Index: tags/org.gvsig.desktop-2.0.97/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/README.txt	(revision 42196)
@@ -0,0 +1,231 @@
+
+Como compilar
+================
+
+Para compilar la aplicacion gvSIG es necesario disponer de:
+
+- Un jdk 1.6 o superior (realmente solo se ha probado con el 1.6 y el 1.7).
+
+- maven instalado en el sistema, recomenado maven 3 (aunque podria compilar 
+  con maven 2), y que use el jdk 1.6 o superior. 
+
+- Acceso a internet para acceder a los repositorios de maven de la aplicacion.
+
+- Si usan maven2 debera configurar la variable MAVEN_OPTS con el valor adecuado 
+  (ver "notas de compilacion"), con mvn3 en linux no suele ser necesario.
+
+- Descargar la carpeta org.gvsig.desktop y ejecutar "mvn clean install".
+  
+  Esto, por defecto, desplegara en la carpeta target/product la instalacion 
+  de gvSIG.
+
+  Si se va a compilar todo desde cero, y no se tiene acceso al repositorio de
+  gvSIG, puede ser necesario compilar antes el projecto org.gvsig.desktop.buildtools
+  
+Notas de compilacion
+========================
+
+MAVEN_OPTS
+------------
+
+Usando maven 2, para que compile correctamente gvsig precisaremos especificar 
+en la variable MAVEN_OPTS una serie de valores para reserbar memoria para el 
+compilador.
+
+Valores adecuados para la compilacion del proyecto "org.gvsig.desktop" son::
+
+  -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m
+
+Para asignar estos valores en linux puede hacerlo ejecutando la siguiente
+instruccion en la linea de comandos desde la que vaya a compilar::
+
+  export MAVEN_OPTS="-Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m"
+
+
+En Windows se establece en esta opci�n o similar
+(depende de versi�n de Windows):
+
+  Panel de control
+    > Sistema
+      > Configurac�n avanzada del sistema
+        > Variables de entorno
+          > Nueva (en el valor no hace falta comillas)
+        
+
+Si esta compilando desde eclipse, precisara tener instalado el plugin maven2e
+
+Usando maven2, cuando no especifica correctamente estos valores pueden 
+aparecerle errores como:
+
+- Error "Compilation failure..."::
+
+    [ERROR] BUILD FAILURE
+    [INFO] ---------------------------------------------------------------
+    [INFO] Compilation failure
+    Failure executing javac, but could not parse the error:
+
+
+    The system is out of resources.
+    Consult the following stack trace for details.
+    java.lang.OutOfMemoryError: PermGen space
+
+
+- Error "Error while executing forked tests..."::
+
+    [ERROR] BUILD ERROR
+    [INFO] ---------------------------------------------------------------
+    [INFO] Error while executing forked tests.; nested exception is org.apache.maven.surefire.booter.shade.org.codehaus.plexus.util.cli.CommandLineException: Error setting up environmental variables
+
+    java.io.IOException: error=12, Cannot allocate memory
+
+gvsig-devel.properties
+------------------------------
+
+Por defecto al ejecutar "mvn install" sobre org.gvsig.desktop la aplicacion 
+se desplegara en la carpeta target/product de ese mismo directorio. Una vez
+ejecutado ese primer comando maven sobre la carpeta org.gvsig.desktop debera 
+editar el fichero ".gvsig-devel.properties" de la carpeta del usuario si 
+desea cambiarlo.
+
+Si tiene varios espacios de trabajo y desea que cada uno despliegue sobre 
+una carpeta distinta puede copiar el fichero de su carpeta de usuario a la 
+carpeta raiz de org.gvsig.desktop con el nombre "gvsig-devel.properties" y 
+cambiar en el sobre donde quiere hacer el despliegue, asi puede tener varias
+"instancias" del desarrollo de gvSIG desplegandose sobre sitios distintos.
+
+Si ejecuta "mvn install" desde algun subproyecto de org.gvsig.desktop tenga 
+en cuenta que solo se utilizara el fichero ".gvsig-devel.properties" que hay 
+en su carpeta de usuario y no el del que se encuentre en org.gvsig.desktop.
+
+
+Como generar una distribucion de gvSIG
+==========================================
+
+- Descargaremos el trunk o nos aseguraremos de que estemos actualizados.
+
+- Nos cercioraremos que en nuestro fichero "gvsig-devel.properties", se apunta
+  al target de lo que nos acabamos de descargar, o simplemente borraremos
+  el fichero para que se recree con el valor correcto.
+  
+- Comprobaremos que el numero de build de 
+
+  org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties
+  
+  Es el numero de build con el que debe salir la nueva distribucion.
+  
+  Si no lo es, ejecutaremos:
+  
+    mvn -Dincrease-build-number process-sources
+  
+  desde la carpeta org.gvsig.desktop  para incrementarlo y commitaremos los cambios.
+
+- "cd org.gvsig.desktop"
+
+- "mvn clean"
+
+- "mvn install"
+
+  Si la compilacion no ha dado problemas probaremos a ejecutar el gvSIG que hay en la carpeta
+  org.gvsig.desktop/target/product para cercionarnos de que por lo menos arranca.
+
+- "mvn release:prepare 2>&1 | tee /tmp/mvn-release-prepare.log"
+
+  Esto incrementa en local los numeros de version de todos los proyecos maven y prepara el tag
+  con los fuentes en el repositorio.
+
+- "cd org.gvsig.desktop.installer"
+
+- "mvn clean"
+
+- "mvn install"
+
+  Con esto se generara el instalable de gvSIG, asi como el paquete (gvspks) con los plugins basicos
+  de la distribucion, y un zip con estos para incluirlos en el pool del repositorio de plugins
+  de gvSIG. 
+  Como ya hemos hecho el "release:prepare" y aun no el "release:perform", los numeros de version de los 
+  proyectos saldran con las versiones finales (sin SNAPSHOT).
+
+- Subiremos los binarios que haya en org.gvsig.desktop.installer/target a donde se
+  encuentren los builds de la aplicacion, por ejemplo:
+  
+  http://downloads.gvsig.org/download/gvsig-desktop/dists/2.1.0/builds
+    
+  Los ficheros a subir, por ejemplo para la 2.1.0 build 2202 serian:
+  
+  - gvSIG-desktop-2.1.0-2202-devel-win-x86-online.exe (binarios para windows)
+  - gvSIG-desktop-2.1.0-2202-devel-lin-x86-online.bin (binarios para linux)
+  - gvSIG-desktop-2.1.0-2202-devel-all-x86-online.zip (zip multiplataforma)
+  - gvSIG-desktop-2.1.0-2202-devel-all-all.gvspks (paquetes a usar en la instalacion)
+  - gvSIG-desktop-2.1.0-2202-devel-all-all-pool.zip (paquetes para incluir en el pool)
+
+- Si despues de ejecutar el "release:prepare" y antes de llegar aqui se produce algun error,
+  ejecutaremos un "mvn release:rollback" para deshacer los cambios.
+  
+  A pesar de ello, se habra quedado creado el tag en el SVN, que podemos ir y eliminar a mano.
+  
+- "mvn release:perform 2>&1 | tee /tmp/mvn-release-perform.log"
+
+  Si todo habia ido bien, al ejecutar esto, se subiran los artefactos maven de la distribucion al
+  repositorio de maven, y se crearan los sites de todos los proyectos para esta version.
+  
+  Los artefactos con la nueva version en SNAPSHOT no se habran compilado, ni instalado o
+  desplegado. Si consideramos oportuno disponer en el repo de maven de los
+  nuevos artefactos en SNAPSHOT deberemos hacerlo a mano tras terminar todo el proceso.
+
+Con esto se deberia haber completado la generacion de la distribucion. Ahora faltaria 
+actualizar el repositorio de plugins de gvSIG.
+
+
+Notas pendientes
+=================
+
+Puede ser interesante mirar el plugin 
+
+http://mojo.codehaus.org/versions-maven-plugin/
+
+
+A tener en cuenta
+--------------------
+
+- Andami se lleva ahora muchas mas dependencias que antes, entre otras el 
+  api de la libreria de proyecciones (se lo lleva org.gvsig.ui) pero como 
+  no se lleva una implementacion peta en la inicializacion. De momento he 
+  puesto un exclude de org.gvsig.projection en el assembly.
+
+- Los snappers que hay en appgvsig dependen de jts.
+  Habria que ver de cambiar su implementacion para que usen el API
+  de la libreria de geometrias y eliminar la dependencia de compilacion
+  de appgvsig hacia jts del pom.
+
+  - TangentPointSnapper
+  - PixelSnapper
+  - MediumPointSnapper
+  - PerpendicularPointSnapper
+  - NearestPointSnapper
+
+- La clase Line2DOffset en org.gvsig.symbology.lib.impl hace uso intensivo 
+  de JTS. Ver si es viable crear una operacion sobre la geometria que haga 
+  lo que hace esa clase.
+
+- En org.gvsig.symbology.swing se hace uso de funcionalidades de andami.
+
+- Hay que repasar la asignacion de iconos a las capas. Ver la extension 
+  de extDWG, pero puede afectar a otras.
+
+- Ver que pasa con las clases de DAL FeatureQueryOrder y DefaultFeatureComparator.
+  De momento he hecho una chapuza y he incrustado DefaultFeatureComparator 
+  dentro de FeatureQueryOrder en el API.
+
+- En la libreria de geometrias, la operacion Equals y el metodo equals de 
+  Geometry hacen cosas distintas. En mapcontext, EqualsGeometryEvaluator, 
+  he sustituido la llamada a la operacion por el metodo.
+
+- El proyecto org.gvsig.new.layer.lib.impl tiene una dependencia con
+  org.gvsig.projection.cresques.ui
+
+- En PluginServices, en el metodo getPluginHomeFolder, habria que hacer que 
+  si es nuevo copie los contenidos de los AlternativeNames a el. De esta 
+  forma seguira funcionanado con la configuracion que tuviese el usuario 
+  aunque se renombre un plugin.
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/maven-howto.rst
===================================================================
--- tags/org.gvsig.desktop-2.0.97/maven-howto.rst	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/maven-howto.rst	(revision 42196)
@@ -0,0 +1,373 @@
+
+==================================
+Usefull maven "howtos" and FAQs
+==================================
+
+.. contents::
+
+How to reduce the process of "install" to run as fast as possible.
+-------------------------------------------------------------------
+
+Can reduce install execution skiping test execution and compilation,
+javadoc generation, test signature checking, license checking, and 
+attach sources in jar.
+
+  mvn  -Danimal.sniffer.skip=true -Dsource.skip=true -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -DskipTests -Dgvsig.skip.downloadPluginTemplates=true install
+
+How to increment the build number of gvSIG plugins
+----------------------------------------------------
+
+To increase the build number of gvSIG plugins, yo can do:
+
+  mvn -Dincrease-build-number process-sources
+  
+How to deploy a package of a gvSIG plugin
+--------------------------------------------
+
+Yo can deploy the package of a gvSIG plugin with:
+
+  mvn -Ddeploy-package -Duser=USER -Dpassword=PASSWORD install
+
+Notes:
+- Require that the gvsig.package.info.poolURL property that this set to the correct value.
+- The process uses WEBDAV to upload the packages, gvspkg and gvspki, and require 
+  access to write in the location specified by gvsig.package.info.poolURL
+- If "user" or "password" is not present, the process ask its each time it need.
+- If folder specified in  gvsig.package.info.poolURL does not exist, the process try to create it.
+- The process create a file "addon-request.txt" in the target with the information to 
+  add to the ticket to request the update of the package in the main repository of
+  packages of gvSIG.
+  
+How show the list of files that have problems with the header.
+----------------------------------------------------------------
+
+You can use the mave plugin "license" to check the headers of the files in
+the project. Use::
+
+    mvn -Dlicense.quiet=false license:check
+
+How to skip license check from command line
+----------------------------------------------
+
+If in the project is enabled by default the checking of the headers
+of files, you can skip this setting the property "license.skip" to
+true in the command line::
+
+    mvn -Dlicense.skip=true install
+
+How to skip attach sources in jar from command line
+------------------------------------------------------
+
+If in the project is enabled by default the generation of jar whith 
+the sources of the project, you can disable this setting the property
+"source.skip" to true in the command line::
+
+    mvn -Dsource.skip=true  install
+
+How to skip test compile from command line
+--------------------------------------------
+
+You can skip the compilation of test setting the propety "maven.test.skip" 
+to true in the command line::
+
+    mvn -Dmaven.test.skip=true  install
+
+
+How to skip test execution from command line
+----------------------------------------------
+
+You can skip the tests execution setting the propety "skipTests" to true
+in the command line::
+
+    mvn -DskipTests install
+
+How to skip javadoc generation from command line
+--------------------------------------------------
+
+You can skip the javadoc generation setting the property
+"maven.javadoc.skip" to true in the command line::
+
+    mvn -Dmaven.javadoc.skip=true  install
+
+How to skip test signature cheks from command line
+---------------------------------------------------
+
+You can skip the signature check setting the property
+"animal.sniffer.skip" to true in the command line::
+
+    mvn -Danimal.sniffer.skip=true install
+
+How to install a project without install submodules
+----------------------------------------------------------
+
+To install a project with submodules and only install the
+parent project without submodules use the option "--non-recursive" ::
+
+    mvn --non-recursive install
+
+How to check and fix the header of source files.
+--------------------------------------------------
+
+You can check the headers of the files in you project 
+using the goal "license". To check the header use::
+
+  mvn license:check
+
+To fix the header use::
+
+  mvn license:format
+  
+How to skip test compilation
+--------------------------------
+
+To configure a project to don't run the compilation
+of test you can add to this pom the next configuration of
+the plugin "maven-compiler-plugin"::
+
+  <build>
+    <plugins>
+      ...
+      <plugin>
+        <!-- Skip compilation tests -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>default-testCompile</id>
+            <phase>process-test-sources</phase>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <configuration>
+              <skip>true</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      ...
+    </plugins>
+  </build>
+
+Skip test execution
+----------------------
+
+To configure a project to don't run the execution
+of test you can add to this pom the next configuration of
+the plugin "maven-surefire-plugin"::
+
+
+  <build>
+    <plugins>
+      ...
+      <plugin>
+        <!-- Skip test execution -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+      ...
+    </plugins>
+  </build>
+
+Continue on test failure
+-----------------------------
+
+You can configure a project to continue on test execution 
+failure. To do this add to the pom of the project the next 
+configuration of plugin "maven-surefire-plugin" ::
+
+  <build>
+    <plugins>
+      ...
+      <plugin>
+        <!-- Continue on test failure -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <testFailureIgnore>true</testFailureIgnore>
+        </configuration>
+      </plugin>
+      ...
+    </plugins>
+  </build>
+
+
+Set java compatibility
+--------------------------
+
+To set the compatibility with a java version  add to the 
+pom of the project the next configuration of plugin 
+"maven-compiler-plugin" ::
+
+  <build>
+    <plugins>
+      ...
+      <plugin>
+          <!-- Set java compatibility -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <configuration>
+              <source>1.5</source>
+              <target>1.5</target>
+              <encoding>ISO-8859-1</encoding>
+          </configuration>
+      </plugin>
+      ...
+    </plugins>
+  </build>
+
+Packaging tests in jar
+------------------------
+
+Test classes do not packaging in jar by default.
+To packing add to pom::
+
+  <build>
+    <plugins>
+      ...
+      <plugin>
+        <!-- Packaging tests in jar -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <!-- Generates a jar file only with the test classes -->
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+            <configuration>
+              <includes>
+                <include>**/**</include>
+              </includes>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin> 
+      ...
+    </plugins>
+  </build>
+
+How to set a dependency with tests jar
+-----------------------------------------
+
+You can set a dependency with a test jar adding to
+the declaration of the dependency the scope of
+test and the type of "test-jar"::
+
+  <dependency>
+      <groupId>...</groupId>
+      <artifactId>...</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+  </dependency>
+
+How use ant in maven
+-------------------------
+
+You can use ant embed in the pom of you project.
+To do this use::
+
+  <plugin>
+    <artifactId>maven-antrun-plugin</artifactId>
+    <version>1.7</version>
+    <executions>
+      <execution>
+        <phase>generate-sources</phase>
+        <configuration>
+          <target>
+            <echo>Hello world!</echo>
+          </target>
+        </configuration>
+        <goals>
+          <goal>run</goal>
+        </goals>
+      </execution>
+    </executions>
+  </plugin>
+
+Fail when execute "mvn deploy" with "No connector available"
+-------------------------------------------------------------
+
+When execute a "mvn deploy" fail with the error::
+
+  [INFO] ------------------------------------------------------------------------
+  [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy 
+    (default-deploy) on project org.gvsig.desktop: Failed to deploy artifacts/metadata: 
+    No connector available to access repository gvsig-repository (dav:https://devel.gvsig.org/m2repo/j2se) 
+    of type default using the available factories WagonRepositoryConnectorFactory -> [Help 1]
+  [ERROR] 
+  
+This happens to be configured the webdav wagon as an extension in the section "build"::
+
+  ...
+  <build>
+    <extensions>
+        <extension>
+            <groupId>org.apache.maven.wagon</groupId>
+            <artifactId>wagon-webdav-jackrabbit</artifactId>
+            <version>1.0-beta-7</version>
+        </extension>
+    </extensions>
+  ...
+
+Fail when execute "mvn release: prepare" with "svn command failed... Could not authenticate"
+------------------------------------------------------------------------------------------------
+
+When running "mvn release: prepare" updates poms, compiles, and then
+fails with the following error ::
+
+  [INFO] ------------------------------------------------------------------------
+  [ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.1:prepare 
+    (default-cli) on project org.gvsig.desktop: Unable to commit files
+  [ERROR] Provider message:
+  [ERROR] The svn command failed.
+  [ERROR] Command output:
+  [ERROR] svn: Commit failed (details follow):
+  [ERROR] svn: MKACTIVITY of '/svn/gvsig-desktop/!svn/act/931a27bc-57e8-45d9-adcd-5a2cf54a7045': 
+    authorization failed: Could not authenticate to server: rejected Basic challenge (https://devel.gvsig.org)
+  [ERROR] -> [Help 1]
+  [ERROR] 
+  [ERROR]
+
+Apparently maven in linux system use the svn of system and if you're not
+authenticated when trying to access to the repository, svn fails.
+
+This is solved by executing a commit from the command line on
+some file of the project (only if you have not enabled the option 
+"store-passwords = no" in $ HOME / .subversion / config). For example, you 
+can add or remove at the end of "pom.xml" a blank line and then run 
+from the command line ::
+
+  svn ci -m "" pom.xml
+
+Alternatively can excute::
+
+  svn list https://devel.gvsig.org/svn/gvsig-desktop/ 
+
+And manually accept the certificate permanently.
+
+Another option that works on Windows in declaring the user and password in the command:
+
+mvn release:prepare -Dusername=[username] -Dpassword=[password]
+
+Fail when execute "mvn release:perform" with unable to find valid certification
+------------------------------------------------------------------------------------------------
+
+When running "mvn release:perform" fail with unable to find valid certification::
+
+
+[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project org.gvsig.tools: Failed to deploy artifacts: Could not transfer artifact org.gvsig:org.gvsig.tools:pom:3.0.15 from/to gvsig-repository (dav:https://devel.gvsig.org/m2repo/j2se): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]
+[INFO] [ERROR] 
+[INFO] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
+[INFO] [ERROR] Re-run Maven using the -X switch to enable full debug logging.
+[INFO] [ERROR] 
+[INFO] [ERROR] For more information about the errors and possible solutions, please read the following articles:
+[INFO] [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
+
+Consulte la seccion "Acceso de escritura al repositorio maven de gvSIG" de
+
+http://www.gvsig.org/plone/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/trabajar-con-el-nucleo-de-gvsig/gvsig-compilation/initial-configuration/initial-configuration/?searchterm=maven%20java%20certification
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/pom.xml	(revision 42196)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.gvsig</groupId>
+  <artifactId>org.gvsig.desktop.buildtools</artifactId>
+  <version>1.0.0</version>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <description>Resources used for build gvsig desktop</description>
+
+
+<!-- No puede ser hijo de org.gvsig.desktop para evitar referencas circulares -->
+<!--
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop</artifactId>
+    <version>2.0.10-SNAPSHOT</version>
+  </parent>  
+-->
+
+
+    <licenses>
+        <license>
+            <name>GPLv3</name>
+            <url>http://www.gnu.org/licenses/gpl.html</url>
+            <distribution>repo</distribution>
+            <comments>
+			"GPL" stands for "General Public License". The most widespread such
+			license is the GNU General Public License, or GNU GPL for short.
+			This can be further shortened to "GPL", when it is understood that
+			the GNU GPL is the one intended.
+	      	</comments>
+        </license>
+    </licenses>
+
+    <organization>
+        <name>gvSIG Association</name>
+        <url>http://www.gvsig.com/</url>
+    </organization>
+
+    <scm>
+        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-desktop/trunk</connection>
+        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-desktop/trunk</developerConnection>
+        <url>https://devel.gvsig.org/redmine/projects/gvsig-desktop/repository/show/trunk</url>
+    </scm>
+    
+    <repositories>
+      <repository>
+        <id>gvsig-public-http-repository</id>
+        <name>gvSIG maven public HTTP repository</name>
+        <url>http://devel.gvsig.org/m2repo/j2se</url>
+        <releases>
+          <enabled>true</enabled>
+          <updatePolicy>daily</updatePolicy>
+          <checksumPolicy>warn</checksumPolicy>
+        </releases>
+        <snapshots>
+          <enabled>true</enabled>
+          <updatePolicy>daily</updatePolicy>
+          <checksumPolicy>warn</checksumPolicy>
+        </snapshots>
+      </repository>
+    </repositories>
+
+    <distributionManagement>
+      <site>
+        <id>gvsig-repository</id>
+        <url>dav:https://devel.gvsig.org/sites/${project.artifactId}/${project.version}</url>
+      </site>
+      <repository>
+          <id>gvsig-repository</id>
+          <name>gvSIG maven repository</name>
+          <url>dav:https://devel.gvsig.org/m2repo/j2se</url>
+          <uniqueVersion>false</uniqueVersion>
+      </repository>
+      <snapshotRepository>
+          <id>gvsig-repository</id>
+          <name>gvSIG maven repository</name>
+          <url>dav:https://devel.gvsig.org/m2repo/j2se</url>
+          <uniqueVersion>false</uniqueVersion>
+      </snapshotRepository>
+    </distributionManagement>
+    
+    <issueManagement>
+      <system>redmine</system>
+      <url>https://devel.gvsig.org/redmine/projects/gvsig-desktop</url>
+    </issueManagement>
+
+    <mailingLists>
+      <mailingList>
+        <name>User List</name>
+        <subscribe>http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</subscribe>
+        <unsubscribe>http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</unsubscribe>
+        <post>gvsig_usuarios@listserv.gva.es</post>
+        <archive>http://www.gvsig.org/web/community/mailing-lists/gvsig-nabble</archive>
+        <otherArchives>
+          <otherArchive>http://www.mail-archive.com/gvsig_usuarios@runas.cap.gva.es</otherArchive>
+          <otherArchive>http://dir.gmane.org/index.php?prefix=gmane.comp.gis.gvsig</otherArchive>
+        </otherArchives>
+      </mailingList>
+      <mailingList>
+        <name>Developer List</name>
+        <subscribe>http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</subscribe>
+        <unsubscribe>http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</unsubscribe>
+        <post>gvsig_desarrolladores@listserv.gva.es</post>
+        <archive>http://www.gvsig.org/web/community/mailing-lists/gvsig-nabble</archive>
+        <otherArchives>
+          <otherArchive>http://www.mail-archive.com/gvsig_desarrolladores@runas.cap.gva.es</otherArchive>
+          <otherArchive>http://dir.gmane.org/index.php?prefix=gmane.comp.gis.gvsig</otherArchive>
+        </otherArchives>
+      </mailingList>
+      <mailingList>
+        <name>International List</name>
+        <subscribe>http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional</subscribe>
+        <unsubscribe>http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional</unsubscribe>
+        <post>gvsig_internacional@listserv.gva.es</post>
+        <archive>http://www.gvsig.org/web/community/mailing-lists/gvsig-nabble</archive>
+        <otherArchives>
+          <otherArchive>http://www.mail-archive.com/gvsig_internacional@runas.cap.gva.es</otherArchive>
+          <otherArchive>http://dir.gmane.org/index.php?prefix=gmane.comp.gis.gvsig</otherArchive>
+        </otherArchives>
+      </mailingList>
+    </mailingLists>
+    
+    <build>
+        <extensions>
+            <extension>
+                <groupId>org.apache.maven.wagon</groupId>
+                <artifactId>wagon-webdav-jackrabbit</artifactId>
+                <version>1.0-beta-7</version>
+            </extension>
+        </extensions>
+    </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/gvsig/checkstyle.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/gvsig/checkstyle.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/gvsig/checkstyle.xml	(revision 42196)
@@ -0,0 +1,276 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE module PUBLIC
+    "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
+    "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
+
+<!--
+
+  Checkstyle configuration that checks the sun coding conventions from:
+
+    - the Java Language Specification at
+      http://java.sun.com/docs/books/jls/second_edition/html/index.html
+
+    - the Sun Code Conventions at http://java.sun.com/docs/codeconv/
+
+    - the Javadoc guidelines at
+      http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
+
+    - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html
+
+    - some best practices
+
+  Checkstyle is very configurable. Be sure to read the documentation at
+  http://checkstyle.sf.net (or in your downloaded distribution).
+
+  Most Checks are configurable, be sure to consult the documentation.
+
+  To completely disable a check, just comment it out or delete it from the file.
+
+  Finally, it is worth reading the documentation.
+
+-->
+
+<module name="Checker">
+    <!--
+        If you set the basedir property below, then all reported file
+        names will be relative to the specified directory. See
+        http://checkstyle.sourceforge.net/5.x/config.html#Checker
+
+        <property name="basedir" value="${basedir}"/>
+    -->
+    <!-- gvSIG: All project files have the ISO-8859-1 charset -->
+	<property name="charset" value="ISO-8859-1" />
+
+    <!-- Checks that a package-info.java file exists for each package.     -->
+    <!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
+	<module name="JavadocPackage">
+		<property name="allowLegacy" value="true" />
+	</module>
+
+    <!-- Checks whether files end with a new line.                        -->
+    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
+    <module name="NewlineAtEndOfFile"/>
+
+    <!-- Checks that property files contain the same keys.         -->
+    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
+    <module name="Translation"/>
+    
+    <!-- Checks for Size Violations.                    -->
+    <!-- See http://checkstyle.sf.net/config_sizes.html -->
+    <module name="FileLength"/>
+    
+    <!-- Checks for whitespace                               -->
+    <!-- See http://checkstyle.sf.net/config_whitespace.html -->
+    <module name="FileTabCharacter"/>
+
+
+    <module name="TreeWalker">
+
+	    <!-- Miscellaneous other checks.                   -->
+	    <!-- See http://checkstyle.sf.net/config_misc.html -->
+	    <!-- gvSIG: apply only to java files -->
+	    <module name="RegexpSinglelineJava">
+	       <property name="format" value="\s+$"/>
+	       <property name="minimum" value="0"/>
+	       <property name="maximum" value="0"/>
+	       <property name="message" value="Line has trailing spaces."/>
+	       <property name="ignoreComments" value="true"/>
+	    </module>
+	    
+        <!-- Checks for Javadoc comments.                     -->
+        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
+		<!--
+			gvSIG rule 3: All protected or public classes must have a Javadoc comments,
+			except getters and setters
+		-->
+		<module name="JavadocMethod">
+			<property name="scope" value="protected" />
+			<property name="allowMissingPropertyJavadoc" value="true" />
+		</module>
+		<!--
+			gvSIG rule 9: All classes must have a Javadoc comment
+			with the "@author tag" and the "@version $Id$" tag included 
+		-->
+		<module name="JavadocType">
+			<property name="scope" value="private" />
+			<property name="authorFormat" value="\S" />
+			<property name="versionFormat" value="\$Id.*\$"/>
+		</module>
+        <module name="JavadocVariable">
+			<property name="scope" value="protected" />
+		</module>
+		<!-- gvSIG rule 3: Check correctly formatted Javadoc -->
+		<module name="JavadocStyle">
+			<property name="scope" value="protected" />
+		</module>
+
+
+        <!-- Checks for Naming Conventions.                  -->
+        <!-- See http://checkstyle.sf.net/config_naming.html -->
+        <module name="ConstantName"/>
+        <module name="LocalFinalVariableName"/>
+        <module name="LocalVariableName"/>
+        <module name="MemberName"/>
+        <module name="MethodName"/>
+		<!-- gvSIG rule 15: All packages must begin with org.gvsig.  -->
+		<module name="PackageName">
+			<property name="format" value="^org\.gvsig(\.[a-z][a-z0-9]*)+$" />
+		</module>
+		<!-- gvSIG advised rule 1: Abstract class names must begin with Abstract. -->
+		<!-- module name="AbstractClassName" /-->
+        <module name="ParameterName"/>
+        <module name="StaticVariableName"/>
+        <module name="TypeName"/>
+
+        <!-- Checks for imports                              -->
+        <!-- See http://checkstyle.sf.net/config_import.html -->
+        <module name="AvoidStarImport"/>
+        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
+        <module name="RedundantImport"/>
+        <module name="UnusedImports"/>
+
+
+        <!-- Checks for Size Violations.                    -->
+        <!-- See http://checkstyle.sf.net/config_sizes.html -->
+        <module name="LineLength"/>
+        <module name="MethodLength"/>
+        <module name="ParameterNumber"/>
+
+
+        <!-- Checks for whitespace                               -->
+        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
+        <module name="EmptyForIteratorPad"/>
+        <module name="GenericWhitespace"/>
+        <module name="MethodParamPad"/>
+        <module name="NoWhitespaceAfter"/>
+        <module name="NoWhitespaceBefore"/>
+        <module name="OperatorWrap"/>
+        <module name="ParenPad"/>
+        <module name="TypecastParenPad"/>
+        <module name="WhitespaceAfter"/>
+        <module name="WhitespaceAround"/>
+
+
+        <!-- Modifier Checks                                    -->
+        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
+        <module name="ModifierOrder"/>
+        <module name="RedundantModifier"/>
+
+
+        <!-- Checks for blocks. You know, those {}'s         -->
+        <!-- See http://checkstyle.sf.net/config_blocks.html -->
+        <module name="AvoidNestedBlocks"/>
+        <module name="EmptyBlock"/>
+        <module name="LeftCurly"/>
+        <module name="NeedBraces"/>
+        <module name="RightCurly"/>
+
+
+        <!-- Checks for common coding problems               -->
+        <!-- See http://checkstyle.sf.net/config_coding.html -->
+        <module name="AvoidInlineConditionals"/>
+        <module name="DoubleCheckedLocking"/>    <!-- MY FAVOURITE -->
+        <module name="EmptyStatement"/>
+        <module name="EqualsHashCode"/>
+        <module name="HiddenField"/>
+        <module name="IllegalInstantiation"/>
+        <module name="InnerAssignment"/>
+        <module name="MagicNumber"/>
+        <module name="MissingSwitchDefault"/>
+        <module name="RedundantThrows"/>
+        <module name="SimplifyBooleanExpression"/>
+        <module name="SimplifyBooleanReturn"/>
+
+		<!-- gvSIG: Check for some common programming errors -->
+		<module name="CovariantEquals" />
+		<module name="StringLiteralEquality" />
+
+        <!-- Checks for class design                         -->
+        <!-- See http://checkstyle.sf.net/config_design.html -->
+        <module name="DesignForExtension"/>
+        <module name="FinalClass"/>
+        <module name="HideUtilityClassConstructor"/>
+        <module name="InterfaceIsType"/>
+        <module name="VisibilityModifier"/>
+
+
+        <!-- Miscellaneous other checks.                   -->
+        <!-- See http://checkstyle.sf.net/config_misc.html -->
+        <module name="ArrayTypeStyle"/>
+        <!-- gvSIG: removed -->
+        <!-- module name="FinalParameters"/-->
+        <module name="TodoComment"/>
+        <module name="UpperEll"/>
+				
+	    <!-- gvSIG rule 2: Sun style with 4 spaces -->
+	    <module name="Indentation">
+	    	<property name="basicOffset" value="4"/>
+		    <property name="caseIndent" value="0"/>
+		</module>
+        
+        <!-- gvSIG rule 10: Do not use System.out/err to log -->
+		<module name="Regexp">
+		    <!-- . matches any character, so we need to escape it and use \. 
+		    to match dots.-->
+		    <property name="format" value="System\.[out|err]\.println"/>
+		    <property name="illegalPattern" value="true"/>
+		</module>
+		
+		<!-- gvSIG rule 11: Try to avoid catching Throwable or 
+		Exception and catch specific exceptions instead. -->
+		<module name="IllegalCatch"/>
+		
+		<!-- gvSIG rule 13: Use interfaces in the declaration of 
+		methods and variables.
+        By default only avoids usage of Classes:
+			"java.util.GregorianCalendar, java.util.Hashtable, 
+		  	java.util.HashSet, java.util.HashMap, java.util.ArrayList, 
+		  	java.util.LinkedList, java.util.LinkedHashMap, 
+		  	java.util.LinkedHashSet, java.util.TreeSet, 
+		  	java.util.TreeMap, java.util.Vector" -->
+		<module name="IllegalType">
+		    <property name="ignoredMethodNames" value="getInstance"/>
+		</module>
+		
+    </module>
+
+	<!--  gvSIG rule 1: check for the gvSIG header -->
+    <!-- Uneeded, use the maven-license-plugin instead
+	<module name="RegexpHeader"> -->
+		<!-- The follow property value demonstrates the ability     -->
+		<!-- to have access to ANT properties. In this case it uses -->
+		<!-- the ${basedir} property to allow Checkstyle to be run  -->
+		<!-- from any directory within a project. See property      -->
+		<!-- expansion,                                             -->
+		<!-- http://checkstyle.sf.net/config.html#properties        -->
+    <!--
+		<property name="headerFile" value="${checkstyle.header.file}" />
+	</module>
+    -->
+
+</module>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/gvsig/checkstyle.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/header.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/header.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/header.txt	(revision 42196)
@@ -0,0 +1,21 @@
+gvSIG. Desktop Geographic Information System.
+
+Copyright (C) 2007-2013 gvSIG Association.
+  
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 3
+of the License, or (at your option) any later version.
+  
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+MA  02110-1301, USA.
+
+For any additional information, do not hesitate to contact us 
+at info AT gvsig.com, or visit our website www.gvsig.com.

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools/src/main/resources/header.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.buildtools
___________________________________________________________________
Added: svn:ignore
   + target

.settings

.classpath

.project


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/layer/layer-icon-vectorial.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/layer/layer-icon-vectorial.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/layer/layer-icon-group.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/layer/layer-icon-group.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/layer/layer-icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/layer/layer-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-crux.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-crux.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-zoom-in.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-zoom-in.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-zoom-out.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-zoom-out.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-info-by-point.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-info-by-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-query-area.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-query-area.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-select-by-polygon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-select-by-polygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-query-distance.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-query-distance.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-pan.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-pan.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-select-by-point.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/images/cursor/cursor-select-by-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,24 @@
+Visible=Visible
+Nombre=Name
+Alias=Alias
+
+Error_editar_geometria=Error while editing the geometry
+Geometria_no_editable_WKT=Geometry not editable on WKT format, text value too big.
+
+geometry_to_wkt_exception=Error getting the geometry value of the cell as WKT
+features_data_reload_exception=Error reloading the features
+get_feature_at_exception=Error getting the feature at row = %(rowIndex)
+get_row_count_exception=Error getting the total table row count
+set_feature_value_exception=Error setting the value of the cell at row = %(rowIndex) and column = %(columnIndex) with the value = %(value)
+wkt_to_geometry_exception=Error getting the geometry value of the WKT value %(wkt)
+table_selection_change_exception=Error while changing the selection on the list of Features
+
+registros_seleccionados_total=Total of selected records
+up=Up
+down=Down
+
+_Invalid_value=Invalid Value
+_Unable_to_show_value=Unable to show value
+_Show_as_text=Show as text
+
+_Pixels=Pixels

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Total rexistros seleccionados

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Total registres seleccionats

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Total de registos seleccionados

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Celkem zvolen\u00fdch z\u00e1znam\u016f

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Total registres s\u00e9lectionn\u00e9s

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Alle ausgew\u00e4hlten register

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Hautatutako erregistroak guztira

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=Totale registri selezionati

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text.properties	(revision 42196)
@@ -0,0 +1,26 @@
+Visible=Visible
+Nombre=Nombre
+Alias=Alias
+
+Error_editar_geometria=Error al editar la geometr�a
+Geometria_no_editable_WKT=Geometr�a no editable en formato WKT, valor demasiado grande.
+
+geometry_to_wkt_exception=Error al convertir la geometr�a de la celda a formato WKT
+features_data_reload_exception=Error al recargar los fen�menos (features)
+get_feature_at_exception=Error al obtener el fen�meno de la fila = %(rowIndex)
+get_row_count_exception=Error al obtener el n�mero total de filas en la tabla
+set_feature_value_exception=Error al establecer el valor de la celda en la fila = %(rowIndex) y columna = %(columnIndex) con el valor = %(value)
+wkt_to_geometry_exception=Error al convertir a geometr�a el valor en WKT: %(wkt)
+table_selection_change_exception=Error al cambiar la selecci�n en la tabla de fen�menos (features)
+
+registros_seleccionados_total=Total registros seleccionados
+up=Subir
+down=Bajar
+remove=Eliminar
+
+_Invalid_value=Valor no v�lido
+_Unable_to_show_value=No se ha podido mostrar valor
+_Show_as_text=Mostrar como texto
+
+_Pixels=P�xeles
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_zh.properties	(revision 42196)
@@ -0,0 +1 @@
+registros_seleccionados_total=\u5df2\u9009\u5b9a\u8bb0\u5f55\u603b\u6570

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/org/gvsig/fmap/mapcontrol/i18n/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1,2 @@
+org.gvsig.fmap.mapcontrol.MapControlLibrary
+org.gvsig.fmap.mapcontrol.impl.DefaultMapControlLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/app/gui/JComboBoxUnits.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/app/gui/JComboBoxUnits.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/app/gui/JComboBoxUnits.java	(revision 42196)
@@ -0,0 +1,124 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.i18n.Messages;
+import org.gvsig.utils.swing.JComboBox;
+
+
+/**
+ * <p>Class representing a JComboBox with the measure units handled by the application.
+ * It takes values from Attributes.NAMES and Attributes.CHANGE static fields. So, to
+ * add more measure units, you must edit Attributes class and change will be automatically
+ * reflected in the combo box.</p>
+ *
+ * <p>The internatiolanization of the field is automatically handled by the system</p>
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class JComboBoxUnits extends JComboBox {
+	private static final long serialVersionUID = 8015263853737441433L;
+
+	/**
+	 * Creates a new instance of JUnitComboBox including "pixel" units and
+	 * setting them as automatically pre-selected.
+	 */
+	public JComboBoxUnits() {
+		this(true);
+	}
+
+	/**
+	 *
+	 * Creates a new instance of JUnitComboBox. If includePixel is true
+	 * then pixel units are included in the list and they are automatically
+	 * pre-selected. Otherwise, meters are preselected.
+	 *
+	 */
+	public JComboBoxUnits(boolean includePixel) {
+		super();
+		String[] names=MapContext.getDistanceNames();
+
+		for (int i = 0; i < names.length; i++) {
+			super.addItem(Messages.getText(names[i]));
+		}
+		if (includePixel) {
+			super.addItem(Messages.getText("_Pixels"));
+			setSelectedItem(Messages.getText("_Pixels"));
+		} else {
+			setSelectedIndex(1);
+		}
+		setMaximumRowCount(10);
+	}
+
+
+	/**
+	 * Returns the conversion factor from the <b>unit selected in the combo box</b>
+	 * to <b>meters</b> or <b>0</b> if pixels have been selected as the size unit.
+	 * @return
+	 */
+	public double getUnitConversionFactor() {
+			double unitFactor;
+			try {
+				unitFactor = MapContext.getDistanceTrans2Meter()[getSelectedIndex()];
+			} catch (ArrayIndexOutOfBoundsException aioobEx) { //jijiji
+				unitFactor = 0; // which represents size in pixel
+			}
+			return unitFactor;
+
+	}
+
+	/**
+	 * the use of this method is not allowed in this combo box.
+	 * @deprecated
+	 */
+	public void addItem(Object anObject) {
+		throw new Error("Operation not allowed");
+	}
+
+	/**
+	 * the use of this method is not allowed for this combo box.
+	 * @deprecated
+	 */
+	public void removeAllItems() {
+		throw new Error("Operation not allowed");
+	}
+
+	public int getSelectedUnitIndex() {
+		int i = getSelectedIndex();
+		if (i>MapContext.getDistanceNames().length-1)
+			return -1;
+		else return i;
+	}
+
+	public void setSelectedUnitIndex(int unitIndex) {
+		if (unitIndex == -1) {
+			setSelectedIndex(getItemCount()-1);
+		} else {
+			setSelectedIndex(unitIndex);
+		}
+	}
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/app/gui/JComboBoxUnits.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPageFactory.java	(revision 42196)
@@ -0,0 +1,33 @@
+
+package org.gvsig.propertypage;
+
+public interface PropertiesPageFactory {
+
+    /**
+     * Return the group identifier.
+     * The group identifier identify the object that store the properties that
+     * this property page handle. Bty excample: 
+     * - Project
+     * - View
+     * - Layer
+     * 
+     * @return the group identifier
+     */
+    public String getGroupID();
+    
+    /**
+     * Return true if this propeties page is enabled for the object.
+     * 
+     * @param obj object that store the properties of this properties page.
+     * @return true if the page is enabled
+     */
+    public boolean isVisible(Object obj);
+    
+    /**
+     * Create a instance of the propeties page for the object.
+     * 
+     * @param obj object that store the properties of this properties page.
+     * @return the properties page
+     */
+    public PropertiesPage create(Object obj);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/impl/DefaultPropertiesPageManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/impl/DefaultPropertiesPageManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/impl/DefaultPropertiesPageManager.java	(revision 42196)
@@ -0,0 +1,70 @@
+
+
+package org.gvsig.propertypage.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DefaultPropertiesPageManager implements PropertiesPageManager {
+    private static final Logger logger = LoggerFactory.getLogger(DefaultPropertiesPageManager.class);
+            
+    private final Map<String, List<PropertiesPageFactory>> groups = new HashMap<String, List<PropertiesPageFactory>>();
+    
+    public DefaultPropertiesPageManager() {
+        
+    }
+
+    public void registerFactory(PropertiesPageFactory factory) {
+        logger.info("Register PropertisPageFactory "+factory.getClass().getName()+" , groupID="+factory.getGroupID()+" ("+factory.toString()+").");
+        List<PropertiesPageFactory> group = this.getFactories(factory.getGroupID());
+        group.add(factory);
+    }
+    
+    private List<PropertiesPageFactory> getFactories(String groupID) {
+        logger.info("get propeties page factories for groupID '"+groupID+"'");
+        List<PropertiesPageFactory> group = this.groups.get(groupID);
+        if( group == null ) {
+            group = new ArrayList<PropertiesPageFactory>();
+            this.groups.put(groupID, group);
+        }
+        return group;
+    }
+    
+    public List<PropertiesPage> getPages(String groupID, Object obj) {
+        logger.info("get propeties page for groupID '"+groupID+"', and object '"+obj.toString()+"'.");
+        List<PropertiesPageFactory> factories = this.getFactories(groupID);
+        List<PropertiesPage> pages = new ArrayList<PropertiesPage>();
+        for ( PropertiesPageFactory factory : factories ) {
+            if( factory.isVisible(obj) ) {
+                pages.add(factory.create(obj));
+            }
+        }
+        Collections.sort(pages, new Comparator<PropertiesPage>() {
+            public int compare(PropertiesPage f1, PropertiesPage f2) {
+                int n = f2.getPriority() - f1.getPriority();
+                if( n != 0 ) {
+                    return n;
+                }
+                if( f1.getTitle()==null || f2.getTitle()==null ) {
+                    // Mas que nada para que no pete, y aunque el orden
+                    // no sea correcto muestre algo al usuario.
+                    return 0;
+                }
+                return f1.getTitle().compareTo(f2.getTitle());
+            }
+        });
+        return pages;
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPagePanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPagePanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPagePanelLayout.java	(revision 42196)
@@ -0,0 +1,132 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.propertypage;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.border.BevelBorder;
+import javax.swing.border.SoftBevelBorder;
+import org.jdesktop.layout.GroupLayout;
+
+/**
+ *
+ * @author usuario
+ */
+public class BasePropertiesPagePanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form BasePropertiesPagePanelLayout
+     */
+    public BasePropertiesPagePanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        titleLabel = new JLabel();
+        applyButton = new JButton();
+        cancelButton = new JButton();
+        acceptButton = new JButton();
+        content = new JPanel();
+        filler1 = new Box.Filler(new Dimension(0, 0), new Dimension(0, 0), new Dimension(32767, 0));
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        titleLabel.setText("jLabel1");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(titleLabel, gridBagConstraints);
+
+        applyButton.setText("Apply");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_END;
+        gridBagConstraints.weightx = 0.1;
+        add(applyButton, gridBagConstraints);
+
+        cancelButton.setText("Cancel");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_END;
+        gridBagConstraints.weightx = 0.1;
+        add(cancelButton, gridBagConstraints);
+
+        acceptButton.setText("Accept");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 8;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_END;
+        gridBagConstraints.weightx = 0.1;
+        add(acceptButton, gridBagConstraints);
+
+        content.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+
+        GroupLayout contentLayout = new GroupLayout(content);
+        content.setLayout(contentLayout);
+        contentLayout.setHorizontalGroup(
+            contentLayout.createParallelGroup(GroupLayout.LEADING)
+            .add(0, 388, Short.MAX_VALUE)
+        );
+        contentLayout.setVerticalGroup(
+            contentLayout.createParallelGroup(GroupLayout.LEADING)
+            .add(0, 234, Short.MAX_VALUE)
+        );
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        add(content, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.weightx = 1.0;
+        add(filler1, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected JButton acceptButton;
+    protected JButton applyButton;
+    protected JButton cancelButton;
+    protected JPanel content;
+    protected Box.Filler filler1;
+    protected JLabel titleLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPageDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPageDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPageDialog.java	(revision 42196)
@@ -0,0 +1,133 @@
+
+package org.gvsig.propertypage;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+import javax.swing.JComponent;
+import javax.swing.JTabbedPane;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+public class BasePropertiesPageDialog extends BasePropertiesPagePanelLayout implements org.gvsig.tools.swing.api.Component {
+    public static final int ACTION_CANCEL = 0;
+    public static final int ACTION_ACCEPT = 1;
+    public static final int ACTION_APPLY = 2;
+
+    private Object obj;
+    private String groupID;
+    private List<PropertiesPage> pages = null;
+    private int userAction = ACTION_ACCEPT;
+    
+    public BasePropertiesPageDialog() {
+    }
+
+    public BasePropertiesPageDialog(Object obj, String groupID) {
+        init(groupID, obj);
+    }
+
+    protected void init(String groupID, Object obj) {
+        this.obj = obj;
+        this.groupID = groupID;
+        PropertiesPageManager manager = MapControlLocator.getPropertiesPageManager();
+        this.pages = manager.getPages(this.groupID,this.obj);        
+        initComponents();
+    }
+    
+    protected void initComponents() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager(); 
+
+        this.content.setLayout(new BorderLayout());
+        this.content.add(createPropertiesPagesPanel(), BorderLayout.CENTER );
+
+        this.titleLabel.setText("");
+        
+        this.acceptButton.setText(i18nManager.getTranslation("ok"));
+        this.acceptButton.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                whenAccept();
+            }
+        });
+        this.applyButton.setText(i18nManager.getTranslation("apply"));
+        this.applyButton.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                whenApply();
+            }
+        });
+        this.cancelButton.setText(i18nManager.getTranslation("cancel"));
+        this.cancelButton.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                whenCancel();
+            }
+        });
+
+    }
+
+    protected Component createPropertiesPagesPanel() {
+        if( this.pages.size()==1 && !useTabsAlwais() ) {
+            PropertiesPage page = this.pages.get(0);
+            return page.asJComponent();
+        } else {
+            JTabbedPane tabbedPane = new JTabbedPane();
+            for( int i=0; i<this.pages.size(); i++ ) {
+                PropertiesPage page = this.pages.get(i);
+                tabbedPane.addTab(page.getTitle(), page.asJComponent());
+            }
+            return tabbedPane;
+        }
+    }
+    
+    protected boolean useTabsAlwais() {
+        return false;
+    }
+    
+    public void whenAccept() {
+        for( int i=0; i<this.pages.size(); i++ ) {
+            PropertiesPage page = this.pages.get(i);
+            if( ! page.whenAccept() ) {
+                return;
+            }
+        }
+        this.userAction = ACTION_ACCEPT;
+        this.closeDialog();
+    }
+    
+    public void whenApply() {
+        for( int i=0; i<this.pages.size(); i++ ) {
+            PropertiesPage page = this.pages.get(i);
+            if( ! page.whenApply() ) {
+                return;
+            }
+        }
+        this.userAction = ACTION_APPLY;
+    }
+    
+    public void whenCancel() {
+        for( int i=0; i<this.pages.size(); i++ ) {
+            PropertiesPage page = this.pages.get(i);
+            if( ! page.whenCancel() ) {
+                return;
+            }
+        }
+        this.userAction = ACTION_CANCEL;
+        this.closeDialog();
+    }
+    
+    public int getUserAction() {
+        return this.userAction;
+    }
+    
+    protected void closeDialog() {
+        this.setVisible(false);
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPagePanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPagePanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/BasePropertiesPagePanelLayout.form	(revision 42196)
@@ -0,0 +1,717 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="titleLabel">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel1"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="applyButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Apply"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="cancelButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Cancel"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="acceptButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Accept"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="8" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JPanel" name="content">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+            <EmptyBorder/>
+          </Border>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="7" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <EmptySpace min="0" pref="388" max="32767" attributes="0"/>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <EmptySpace min="0" pref="234" max="32767" attributes="0"/>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+    </Container>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[32767, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11_titleLabel">
+          <CodeVariable name="titleLabel" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="titleLabel"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="12_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18_applyButton">
+          <CodeVariable name="applyButton" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="applyButton"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="12_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="19_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25_cancelButton">
+          <CodeVariable name="cancelButton" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cancelButton"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="19_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="26_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="26_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="26_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="26_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="26_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="26_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="26_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32_acceptButton">
+          <CodeVariable name="acceptButton" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="acceptButton"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="26_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="33_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="double" value="1.0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="double" value="1.0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40_content">
+          <CodeVariable name="content" type="8196" declaredType="javax.swing.JPanel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="content"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="33_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="41_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="double" value="1.0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="41_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPageManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPageManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPageManager.java	(revision 42196)
@@ -0,0 +1,24 @@
+
+package org.gvsig.propertypage;
+
+import java.util.List;
+
+
+public interface PropertiesPageManager {
+
+    /**
+     * Register a new PropertiesPageFactory in this manager.
+     * 
+     * @param factory 
+     */
+    void registerFactory(PropertiesPageFactory factory);
+    
+    /**
+     * Get a list of the property page instances that can be show for the object.
+     * 
+     * @param obj
+     * @return the list of PropertiesPage
+     */
+    List<PropertiesPage> getPages(String groupID, Object obj);
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/propertypage/PropertiesPage.java	(revision 42196)
@@ -0,0 +1,52 @@
+package org.gvsig.propertypage;
+
+import org.gvsig.tools.swing.api.Component;
+
+
+
+
+public interface PropertiesPage extends Component {
+    
+    /**
+     * Title of the properties page
+     * 
+     * @return the title.
+     */    
+    public String getTitle();
+    
+    /**
+     * The priority of this properties page.
+     * When more high is the priority more to the left are set properties page.
+     * 
+     * @return the priority of the properties page
+     */
+    public int getPriority();
+
+    /**
+     * Called when the button accept is presed by the user.
+     * If return false the panel is not hidden and do not call whenAccept of
+     * other properties pages.
+     * 
+     * @return false to cancel the user action.
+     */
+    public boolean whenAccept();
+
+    /**
+     * Called when the button apply is presed by the user.
+     * If return false the panel do not call whenApply of
+     * other properties pages.
+     * 
+     * @return false to cancel the user action.
+     */
+    public boolean whenApply();
+
+    /**
+     * Called when the button accept is presed by the user.
+     * If return false the panel is not hidden and do not call whenCancel of
+     * other properties pages.
+     * 
+     * @return false to cancel the user action.
+     */
+    public boolean whenCancel();
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/impl/DefaultEditingNotificationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/impl/DefaultEditingNotificationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/impl/DefaultEditingNotificationManager.java	(revision 42196)
@@ -0,0 +1,303 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.impl;
+
+import java.util.Arrays;
+import java.util.List;
+import javax.swing.SwingUtilities;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.editing.EditingNotificationManager;
+import org.gvsig.editing.EditingNotification;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.observer.ObservableHelper;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.BaseNotification;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * Acts as a hub to centralize editing notification events in a single manager.
+ *
+ * All objects that modify a store notify this manager to reported the actions
+ * to the objects interested in knowing when start or end editing, regardless
+ * of where the editing work is done.
+ *
+ */
+public class DefaultEditingNotificationManager implements EditingNotificationManager {
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultEditingNotificationManager.class);
+            
+    private ObservableHelper helper = null;
+
+    private static final int SOURCE = 1;
+    private static final int DOCUMENT = 2;
+    private static final int LAYER = 3;
+    private static final int STORE = 4;
+    private static final int FEATURE = 5;
+    private static final int FEATURETYPE = 6;
+    
+    private static List cancelableNotifications = null;
+
+
+
+    public class DefaultEditingNotification extends BaseNotification implements EditingNotification {
+
+        private boolean validateTheFeature = true;
+        
+        DefaultEditingNotification(String type) {
+            super(type, 7);
+        }
+
+        public Object getSource() {
+            return this.getValue(SOURCE);
+        }
+
+        public Object getDocument() {
+            return this.getValue(DOCUMENT);
+        }
+
+        public FLayer getLayer() {
+            return (FLayer) this.getValue(LAYER);
+        }
+
+        public DataStore getStore() {
+            return (DataStore) this.getValue(STORE);
+        }
+
+        public FeatureStore getFeatureStore() {
+            return (FeatureStore) this.getValue(STORE);
+        }
+
+        public Feature getFeature() {
+            return (Feature) this.getValue(FEATURE);
+        }
+
+        public EditableFeatureType getFeatureType() {
+            return (EditableFeatureType) this.getValue(FEATURETYPE);
+        }
+
+        public boolean isCancelable() {
+            if( cancelableNotifications==null ) {
+                String nn[] = new String[] {
+                    BEFORE_ENTER_EDITING_STORE,
+                    BEFORE_EXIT_EDITING_STORE,
+                    BEFORE_INSERT_FEATURE,
+                    BEFORE_REMOVE_FEATURE,
+                    BEFORE_UPDATE_FEATURE,
+                    BEFORE_UPDATE_FEATURE_TYPE
+                };
+                cancelableNotifications = Arrays.asList(nn);
+            }
+            return cancelableNotifications.contains(this.getType() );
+        }
+
+        public void setSkipFeatureValidation(boolean skipTheFeatureValidation) {
+            this.validateTheFeature = !skipTheFeatureValidation;
+        }
+
+        public boolean shouldValidateTheFeature() {
+            return this.validateTheFeature;
+        }
+    }
+
+    public DefaultEditingNotificationManager() {
+        this.helper = new ObservableHelper();
+    }
+
+    public void addObserver(Observer o) {
+        this.helper.addObserver(o);
+    }
+
+    public void deleteObserver(Observer o) {
+        this.helper.deleteObserver(o);
+    }
+
+    public void deleteObservers() {
+        this.helper.deleteObservers();
+    }
+
+    public EditingNotification notifyObservers(EditingNotification notification) {
+        try {
+            this.helper.notifyObservers(this, notification);
+        } catch(Exception ex) {
+            logger.warn("Problems notifing to observers of DefaultEditingNotificationManager.",ex);
+        }
+        return notification;
+    }
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, FLayer layer, DataStore store, Feature feature, EditableFeatureType featureType) {
+        EditingNotification notification = new DefaultEditingNotification(type);
+        notification.setValue(SOURCE,source);
+        notification.setValue(DOCUMENT,document);
+        notification.setValue(LAYER,layer);
+        notification.setValue(STORE,store);
+        notification.setValue(FEATURE,feature);
+        notification.setValue(FEATURETYPE,featureType);
+        return this.notifyObservers(notification);
+    }
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, FLayer layer, DataStore store) {
+        return this.notifyObservers(source, type, document, layer, store, null, null);
+    }
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, FLayer layer) {
+        DataStore store = null;
+        if ( layer instanceof FLyrVect ) {
+            store = ((FLyrVect) layer).getDataStore();
+        }
+        return this.notifyObservers(source, type, document, layer, store, null, null);
+    }
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store) {
+        return this.notifyObservers(source, type, document, null, store, null, null);
+    }
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store, Feature feature) {
+        return this.notifyObservers(source, type, document, null, store, feature, null);
+    }
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store, EditableFeatureType featureType) {
+        return this.notifyObservers(source, type, document, null, store, null, featureType);
+    }
+    
+    public EditingNotification notifyObservers(Object source, String type, Object document, FLayer layer, DataStore store, Feature feature) {
+        return this.notifyObservers(source, type, document, layer, store, feature, null);
+    }
+
+    public boolean validateFeature(Feature feature) {
+        while( true ) {
+            if( !needAskUser(feature) ) {
+                // La feature se puede validar y no precisa de intervencion del
+                // usuario. Retornamos true.
+                return true;
+            }
+            // No se habia podido validar la feature, se piden al
+            // usuario los datos que faltan.
+            AskRequiredAttributtes ask = new AskRequiredAttributtes();
+            ask.showDialog(feature);
+            if( ask.userCancel() ) {
+                // No se habia podido validar la feature, se le han pedido al
+                // usuario los datos que faltan y este ha pulsado en cancel,
+                // asi que la feature no se puede validar, y retornamos
+                // false.
+                return false;
+            }
+        }
+    }
+    
+    private boolean needAskUser(Feature feature) {
+        FeatureType featureType = feature.getType();
+        FeatureAttributeDescriptor[] attributeDescriptors = featureType.getAttributeDescriptors();
+
+        for ( int i = 0; i < attributeDescriptors.length; i++ ) {
+            FeatureAttributeDescriptor attrDesc = attributeDescriptors[i];
+            if ( attrDesc.isAutomatic() ) {
+                break;
+            }
+            if ( (attrDesc.isPrimaryKey() || !attrDesc.allowNull())
+                    && feature.get(attrDesc.getName()) == null ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private class AskRequiredAttributtes {
+
+        private boolean userCancelValue = true;
+
+        public boolean userCancel() {            
+            return this.userCancelValue;
+        }
+        
+        public void showDialog(final Feature feature) {
+            if ( !SwingUtilities.isEventDispatchThread() ) {
+                try {
+                    SwingUtilities.invokeAndWait(new Runnable() {
+                        public void run() {
+                            showDialog(feature);
+                        }
+                    }
+                    );
+                } catch (Exception e1) {
+                    message("Can't show form to fill need data.",e1);
+                    this.userCancelValue = true;
+                    return;
+                }
+            }
+
+            try {
+                DynObject data = feature.getAsDynObject();
+                DynObjectEditor editor;
+                editor = new DynObjectEditor(data);
+                
+                String title = data.getDynClass().getDescription();
+                if( StringUtils.isEmpty(title) ) {
+                        title = data.getDynClass().getName();
+                } 
+                editor.setTitle(
+                    ToolsLocator.getI18nManager().getTranslation("_Fill_the_required_fields")+
+                    " - "+ 
+                    title);
+                
+                editor.editObject(true);
+                if ( editor.isCanceled() ) {
+                    this.userCancelValue = true;
+                } else {
+                    editor.getData(data);
+                    this.userCancelValue = false;
+                }
+            } catch (Exception ex) {
+                message("Can't show form to fill need data.",ex);
+                this.userCancelValue = true;
+            }
+        }
+        
+        private void message(String msg, Throwable ex) {
+            if( ex==null ) {
+                logger.warn(msg);
+            } else {
+                logger.warn(msg,ex);
+            }
+//            msg = msg + "\nSee to application log for more information.";
+//            ApplicationManager application = ApplicationLocator.getManager();
+//            application.message(msg,JOptionPane.WARNING_MESSAGE);
+        }
+    }
+
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/EditingNotificationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/EditingNotificationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/EditingNotificationManager.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.observer.Observable;
+
+/**
+ * 
+ * Acts as a hub to centralize editing notification events in a single manager.
+ * 
+ * All objects that modify a store notify this manager to reported the actions 
+ * to  the objects interested in knowing when start or end editing, regardless 
+ * of where the editing work is done.
+ * 
+ */
+public interface EditingNotificationManager extends Observable {
+ 
+    public EditingNotification notifyObservers(Object source, String type, Object document, FLayer layer, DataStore store, Feature feature);
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store, Feature feature);
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, FLayer layer, DataStore store);
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store);
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store, EditableFeatureType featuretType);
+
+    public EditingNotification notifyObservers(Object source, String type, Object document, FLayer layer);
+
+    public EditingNotification notifyObservers(EditingNotification notification);
+    
+    public boolean validateFeature(Feature feature);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/EditingNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/EditingNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/EditingNotification.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.observer.Notification;
+
+public interface EditingNotification extends Notification {
+
+    public static final String BEFORE_ENTER_EDITING_STORE = "BEFORE_ENTER_EDITING_STORE";
+    public static final String BEFORE_EXIT_EDITING_STORE = "BEFORE_EXIT_EDITING_STORE";
+    public static final String BEFORE_INSERT_FEATURE = "BEFORE_INSERT_FEATURE";
+    public static final String BEFORE_UPDATE_FEATURE = "BEFORE_UPDATE_FEATURE";
+    public static final String BEFORE_REMOVE_FEATURE = "BEFORE_REMOVE_FEATURE";
+    public static final String BEFORE_UPDATE_FEATURE_TYPE = "BEFORE_UPDATE_FEATURE_TYPE";
+
+    public static final String AFTER_ENTER_EDITING_STORE = "AFTER_ENTER_EDITING_STORE";
+    public static final String AFTER_EXIT_EDITING_STORE = "AFTER_EXIT_EDITING_STORE";
+    public static final String AFTER_INSERT_FEATURE = "AFTER_INSERT_FEATURE";
+    public static final String AFTER_UPDATE_FEATURE = "AFTER_UPDATE_FEATURE";
+    public static final String AFTER_REMOVE_FEATURE = "AFTER_REMOVE_FEATURE";
+    public static final String AFTER_UPDATE_FEATURE_TYPE = "AFTER_UPDATE_FEATURE_TYPE";
+
+    public Object getSource();
+    
+    public Object getDocument();
+    
+    public FLayer getLayer();
+    
+    public DataStore getStore();
+
+    public FeatureStore getFeatureStore();
+    
+    public Feature getFeature();
+    
+    public EditableFeatureType getFeatureType();
+    
+    public boolean isCancelable();
+    
+    public void  setSkipFeatureValidation(boolean skip);
+    
+    public boolean shouldValidateTheFeature();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/editing/EditingNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/IconThemeHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/IconThemeHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/IconThemeHelper.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap;
+
+import java.awt.Image;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IconThemeHelper {
+
+	private static Logger logger = LoggerFactory.getLogger(IconThemeHelper.class);
+	
+	public static void registerIcon(String group, String name, Object obj) {
+		String resourceName;
+		ClassLoader loader;
+		IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+		if( group == null || group.trim().length()==0 ) {
+			resourceName = "images/"+name+".png";
+		} else {
+			resourceName = "images/"+group+"/"+name+".png";
+		}
+		if( obj instanceof Class ) {
+			loader = ((Class) obj).getClassLoader();
+		} else {
+			loader = obj.getClass().getClassLoader();
+		}
+		try {
+			iconTheme.registerDefault("mapcontrol", group, name, null, loader.getResource(resourceName));
+		} catch( Throwable e) {
+			logger.info(e.getMessage());
+		}
+	}
+
+	public static ImageIcon getImageIcon(String iconName) {
+		IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+		return iconTheme.get(iconName);
+	}
+	
+	public static Image getImage(String iconName) {
+		IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+		return iconTheme.get(iconName).getImage();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/IconThemeHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/PrimitivesDrawer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/PrimitivesDrawer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/PrimitivesDrawer.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.fmap.mapcontrol;
+
+import java.awt.Color;
+import java.awt.Graphics;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface PrimitivesDrawer {
+	
+	/**
+	 * This method is used to start a drawing process that needs to 
+	 * be synchronized.
+	 * @param obj
+	 * The object that locks the resource.
+	 * @throws InterruptedException
+	 */
+	public void startDrawing(Object obj) throws InterruptedException;
+	
+	/**
+	 * This method is used to finish a drawing process that needs to 
+	 * be synchronized. 
+	 * @param obj
+	 * The object that has locked the resource.
+	 */
+	public void stopDrawing(Object obj);
+	
+	/**
+	 * This method sets the <code>Graphics</code> where the 
+	 * <code>Drawer</code> has to draw all the objects. 
+	 * @param graphics
+	 * The component where the new objects has to be drawn. 
+	 */
+	public void setGraphics(Graphics graphics);
+	
+	/**
+	 * Sets the color that is used to draw the objects that don't 
+	 * have a symbol.
+	 * @param color
+	 * The color to use on the drawing operations.
+	 */
+	public void setColor(Color color);
+		
+	/**
+	 * It draws a rectangle on the map using the color 
+	 * specified using the {@link #setColor(Color)} method. 
+	 * @param x
+	 * The minimum X coordinate.
+	 * @param y
+	 * The minimum Y coordinate.
+	 * @param width
+	 * The rectangle width.
+	 * @param height
+	 * The rectangle height.
+	 */
+	public void drawRect(int x, int y, int width, int height);
+		
+	/**
+	 * It fills a rectangle on the map using the color 
+	 * specified using the {@link #setColor(Color)} method. 
+	 * @param x
+	 * The minimum X coordinate.
+	 * @param y
+	 * The minimum Y coordinate.
+	 * @param width
+	 * The rectangle width.
+	 * @param height
+	 * The rectangle height.
+	 */
+	public void fillRect(int x, int y, int width, int height);
+	
+	public void drawOval(int i, int j, int sizePixels, int sizePixels2);
+
+	public void drawLine(int x1, int y1, int x3, int y12);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/PrimitivesDrawer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DataStoreParametersCreationPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DataStoreParametersCreationPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DataStoreParametersCreationPanel.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.dal.swing.datastore;
+
+import javax.swing.JPanel;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public abstract class DataStoreParametersCreationPanel extends JPanel {
+    private static final long serialVersionUID = 5265923639970241325L;
+
+    public abstract NewDataStoreParameters getDataStoreParameters();
+    
+    public abstract DataServerExplorer getDataServerExplorer();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DataStoreParametersCreationPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DefaultDataStoreParametersCreationPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DefaultDataStoreParametersCreationPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DefaultDataStoreParametersCreationPanel.java	(revision 42196)
@@ -0,0 +1,289 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.dal.swing.datastore;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.tools.service.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class DefaultDataStoreParametersCreationPanel extends DataStoreParametersCreationPanel implements ActionListener{   
+    private static final long serialVersionUID = -1453149638996485029L;
+
+    private static final Logger LOG =
+        LoggerFactory.getLogger(DefaultDataStoreParametersCreationPanel.class);
+
+    private static final DataManager DATA_MANAGER = DALLocator.getDataManager();
+
+    private static final int FORM_HEIGTH = 18;
+
+    private DataServerExplorer dataServerExplorer = null;
+    private DataServerExplorerParameters dataServerExplorerParameters = null;
+
+    private NewDataStoreParameters dataStoreParameters = null;
+
+    private JButton explorersButton;
+    private JComboBox explorersComboBox;
+    private JButton providersButton;
+    private JComboBox providersComboBox;
+
+    public DefaultDataStoreParametersCreationPanel() {
+        super(); 
+        initComponents();
+        populateExplorerCombo();
+        initListeners();
+        enableExplorerControls(false);
+    }     
+
+    private void initListeners() {
+        this.explorersComboBox.addActionListener(this);
+        this.explorersButton.addActionListener(this);
+        this.providersComboBox.addActionListener(this);
+        this.providersButton.addActionListener(this);        
+    }
+
+    @SuppressWarnings("rawtypes")
+    private void populateExplorerCombo(){
+        explorersComboBox.addItem(null);
+
+        Iterator it = DATA_MANAGER.getExplorerProviders().iterator();
+
+        while(it.hasNext()) {
+            String explorer = (String)it.next();
+            explorersComboBox.addItem(explorer);            
+        }
+    }   
+
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        explorersComboBox = new JComboBox();
+        providersComboBox = new JComboBox();
+        explorersButton = new JButton();
+        providersButton = new JButton();
+
+        setLayout(new GridBagLayout());
+
+        explorersComboBox.setPreferredSize(new Dimension(0, FORM_HEIGTH));
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new Insets(0, 2, 0, 2);
+        add(explorersComboBox, gridBagConstraints);
+
+        explorersButton.setText("...");
+        explorersButton.setPreferredSize(new Dimension(25, FORM_HEIGTH));
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 1;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.insets = new Insets(0, 2, 0, 2);
+        add(explorersButton, gridBagConstraints);
+
+        providersComboBox.setPreferredSize(new Dimension(0, FORM_HEIGTH));
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new Insets(0, 2, 0, 2);
+        add(providersComboBox, gridBagConstraints);      
+
+        providersButton.setText("...");
+        providersButton.setPreferredSize(new Dimension(25, FORM_HEIGTH));
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 3;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.insets = new Insets(0, 2, 0, 2);
+        add(providersButton, gridBagConstraints);
+    }
+
+    @Override
+    public NewDataStoreParameters getDataStoreParameters(){       
+        return dataStoreParameters;
+    }
+
+    @Override
+    public DataServerExplorer getDataServerExplorer() {       
+        return dataServerExplorer;
+    }
+
+    public void actionPerformed(ActionEvent e) {       
+        if (e.getSource().equals(explorersButton)) {           
+            explorersButtonClicked();
+        }else if (e.getSource().equals(providersButton)) {
+            providersButtonClicked();
+        }else if (e.getSource().equals(explorersComboBox)) {           
+            explorersComboSelectionChanged();
+        }else if (e.getSource().equals(providersComboBox)) {
+            providersComboSelectionChanged();
+        }
+    }  
+
+    private void explorersComboSelectionChanged(){        
+        String explorerName = (String)explorersComboBox.getSelectedItem();
+        if (explorerName == null){
+            dataServerExplorerParameters = null;
+            dataServerExplorer = null;
+            removeProvidersCombo();
+            enableExplorerControls(false);
+        }else{
+            //Only update the explorer if the selection is different
+            if ((dataServerExplorer == null) || (!explorerName.equals(dataServerExplorer.getProviderName()))){        
+                dataServerExplorerParameters = null;
+
+                //Remove all the previous providers
+                removeProvidersCombo(); 
+
+                //Disable all the components and enable the explorer button
+                this.enableExplorerControls(false);
+                this.explorersButton.setEnabled(true);       
+                //Sometimes is possible to create an explorer without parameters (e.g: filesystem explorer"
+                try {                    
+                    dataServerExplorerParameters =
+                        DATA_MANAGER.createServerExplorerParameters(explorerName);
+                    dataServerExplorer = 
+                        DATA_MANAGER.openServerExplorer(explorerName, dataServerExplorerParameters);
+                    populateProvidersCombo();  
+                    this.providersComboBox.setEnabled(true);     
+                } catch (InitializeException e) {
+                    LOG.error("Error creating the explorer parameters", e);                    
+                } catch (ProviderNotRegisteredException e) {
+                    LOG.error("The explorer has not been registeger", e);                    
+                } catch (ValidateDataParametersException e) {
+                    LOG.error("Error creating the explorer", e);                  
+                }                
+            }
+        }
+    }
+
+    private void enableExplorerControls(boolean isEnabled){        
+        this.explorersButton.setEnabled(isEnabled);  
+        this.providersComboBox.setEnabled(isEnabled);    
+        this.providersButton.setEnabled(isEnabled);
+    }
+
+    private void enableProviderControls(boolean isEnabled){       
+        this.providersButton.setEnabled(isEnabled);  
+    }
+
+    private void explorersButtonClicked(){
+        dataServerExplorer = null;
+        String explorerName = (String)explorersComboBox.getSelectedItem();
+        if (explorerName != null){
+            try {
+                if ((dataServerExplorerParameters == null) || (!dataServerExplorerParameters.getExplorerName().equals(explorerName))){
+                    dataServerExplorerParameters =
+                        DATA_MANAGER.createServerExplorerParameters(explorerName);
+                }
+                DynObjectEditor dynObjectEditor = new DynObjectEditor(dataServerExplorerParameters);
+                dynObjectEditor.editObject(true);               
+                dataServerExplorer = 
+                    DATA_MANAGER.openServerExplorer(explorerName, dataServerExplorerParameters);
+                //Remove all the previous providers
+                removeProvidersCombo(); 
+                populateProvidersCombo();
+                this.providersComboBox.setEnabled(true);  
+            } catch (InitializeException e) {
+                LOG.error("Error creating the explorer parameters", e);
+            } catch (ProviderNotRegisteredException e) {
+                LOG.error("The explorer has not been registered", e);
+            } catch (ServiceException e) {
+                LOG.error("Error creating the explorer panel", e);
+            } catch (ValidateDataParametersException e) {
+                LOG.error("Error creating the explorer", e);
+            }    
+        }
+    }
+
+    @SuppressWarnings("rawtypes")
+    private void populateProvidersCombo(){       
+        providersComboBox.addItem(null);
+        if (dataServerExplorer != null){
+            List providerNames = dataServerExplorer.getDataStoreProviderNames();
+            for (int i=0 ; i<providerNames.size() ; i++){
+                providersComboBox.addItem(providerNames.get(i));         
+            }
+        }
+    }
+
+    private void removeProvidersCombo(){
+        providersComboBox.removeAllItems();
+    }
+
+    private void providersComboSelectionChanged(){
+        dataStoreParameters = null;
+        String providerName = (String)providersComboBox.getSelectedItem();   
+        if ((dataServerExplorer != null) && (providerName != null)){
+            enableProviderControls(true);
+        }else{
+            enableProviderControls(false);
+        }
+    }
+
+    private void providersButtonClicked(){
+        String providerName = (String)providersComboBox.getSelectedItem();       
+        if ((dataServerExplorer != null) && (providerName != null)){
+            try {
+                if ((dataStoreParameters == null) || (!dataStoreParameters.getDataStoreName().equals(providerName))){
+                    dataStoreParameters = 
+                        DATA_MANAGER.createNewStoreParameters(dataServerExplorer.getProviderName(), providerName);
+                }
+                DynObjectEditor dynObjectEditor = new DynObjectEditor(dataStoreParameters);
+                dynObjectEditor.editObject(true);             
+            } catch (InitializeException e) {
+                LOG.error("Error creating the store parameters", e);
+            } catch (ProviderNotRegisteredException e) {
+                LOG.error("The provider has not been registered", e);
+            } catch (ServiceException e) {
+                LOG.error("Error creating the store panel", e);
+            }
+        }
+    }  
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/swing/datastore/DefaultDataStoreParametersCreationPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/JToggleButtonHeaderCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/JToggleButtonHeaderCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/JToggleButtonHeaderCellRenderer.java	(revision 42196)
@@ -0,0 +1,181 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.awt.Component;
+import java.awt.Insets;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.BitSet;
+
+import javax.swing.JTable;
+import javax.swing.JToggleButton;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableCellRenderer;
+
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTable;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.notification.ColumnHeaderSelectionChangeNotification;
+import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
+
+/**
+ * A header cell renderer for JTables, which allows to select column headers by
+ * rendering a JToggleButton on each header cell.
+ *
+ * When the selection of column headers changes, Observers are notified through
+ * a {@link ColumnHeaderSelectionChangeNotification}.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class JToggleButtonHeaderCellRenderer extends
+        BaseWeakReferencingObservable implements TableCellRenderer,
+        MouseListener {
+
+    private BitSet selectedColumns = new BitSet();
+
+    // Component to render on each header cell
+    private JToggleButton button;
+
+    private FeatureTable table;
+
+    /**
+     * Create a new JToggleButtonCellRenderer for a JTable.
+     */
+    public JToggleButtonHeaderCellRenderer(FeatureTable table) {
+        this.table = table;
+        JTableHeader header = table.getTableHeader();
+        header.addMouseListener(this);
+		button = new JToggleButton();
+
+        // Clone renderization of the default table header
+		// button.setBackground(header.getBackground());
+		// button.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, table
+		// .getGridColor()));
+		// button.setFont(header.getFont());
+		// button.setForeground(header.getForeground());
+        button.setMargin(new Insets(0, 0, 0, 0));
+    }
+
+    /**
+     * Returns the selected columns table model position.
+     *
+     * @return an array of selected column indices
+     */
+    public int[] getSelectedColumns() {
+        int[] columns = new int[selectedColumns.cardinality()];
+        int pos = 0;
+        for (int i = selectedColumns.nextSetBit(0); i >= 0; i = selectedColumns
+                .nextSetBit(i + 1)) {
+            columns[pos] = i;
+            pos++;
+        }
+        return columns;
+    }
+
+    public Component getTableCellRendererComponent(JTable table, Object value,
+            boolean isSelected, boolean hasFocus, int row, int column) {
+
+        // Get the the model position of the column being rendered
+        int columnModel = table.convertColumnIndexToModel(column);
+
+        // Set the column header text and selected status
+        button.setText(table.getColumnName(column));
+        button.setSelected(selectedColumns.get(columnModel));
+		// if (selectedColumns.get(columnModel)){
+		// button.setBackground(Color.gray);
+		// }else{
+		// button.setBackground(Color.lightGray);
+		// }
+        return button;
+    }
+
+    public void deselectAll() {
+        selectedColumns.clear();
+        notifyObservers(new ColumnHeaderSelectionChangeNotification(table));
+    }
+
+    public void mouseClicked(MouseEvent event) {
+        // Look for the clicked column
+        JTable jtable = ((JTableHeader) event.getSource()).getTable();
+        if (jtable.equals(table)) {
+            int columnViewIndex = table.columnAtPoint(event.getPoint());
+            if (columnViewIndex >= 0) {
+                int columnModelIndex =
+                    table.convertColumnIndexToModel(columnViewIndex);
+
+                // Set or add the selected column, depending on the CTRL key
+                // being
+                // pressed or not
+                if (ctrlKeyPressed(event)) {
+                    reverseSelection(columnModelIndex);
+                } else {
+                    setSelection(columnModelIndex);
+                }
+            }
+        }
+    }
+
+    public void mouseEntered(MouseEvent e) {
+        // Nothing to do
+    }
+
+    public void mouseExited(MouseEvent e) {
+        // Nothing to do
+    }
+
+    public void mousePressed(MouseEvent e) {
+        // Nothing to do
+    }
+
+    public void mouseReleased(MouseEvent e) {
+        // Nothing to do
+    }
+
+    private boolean ctrlKeyPressed(MouseEvent event) {
+        final int ctrlDownMask = MouseEvent.CTRL_DOWN_MASK;
+        return (event.getModifiersEx() & ctrlDownMask) == ctrlDownMask;
+    }
+
+    /**
+     * Sets the selection to only the given column.
+     */
+    private void setSelection(int column) {
+        selectedColumns.clear();
+        selectedColumns.set(column);
+
+        notifyObservers(new ColumnHeaderSelectionChangeNotification(table));
+    }
+
+    /**
+     * Reverses the selection of a column.
+     */
+    private void reverseSelection(int column) {
+        selectedColumns.flip(column);
+
+        notifyObservers(new ColumnHeaderSelectionChangeNotification(table));
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/JToggleButtonHeaderCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellEditor.java	(revision 42196)
@@ -0,0 +1,218 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import java.util.EventObject;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.JOptionPane;
+import javax.swing.JTable;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.i18n.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Editor for cells of type Geometry in WKT format.
+ * <p>
+ * If the WKT to represent a Geometry is too big, editing is not allowed, as the
+ * rendering of that big text is too slow.
+ * </p>
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class GeometryWKTCellEditor extends TextAreaCellEditor {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(GeometryWKTCellEditor.class);
+    public static final int DEFAULT_MAX_WKT_LENGTH = 10000;
+
+    private static final long serialVersionUID = -2296004227902843851L;
+    
+    private int maxRowHeight;
+
+    /**
+     * Creates a new editor for Geometries in WKT format.
+     */
+    public GeometryWKTCellEditor() {
+        this(DEFAULT_MAX_WKT_LENGTH, 160);
+    }
+
+    /**
+     * Creates a new editor for Geometries in WKT format.
+     * 
+     * @param maxWKTLength
+     *            the maximum WTK length allowed to be edited.
+     * @param maxRowHeight
+     *            the maximum row height for the rows with cells rendered with
+     *            this component
+     */
+    public GeometryWKTCellEditor(int maxWKTLength, int maxRowHeight) {
+        super();
+        delegate = new GeometryToWKTDelegate(delegate, maxWKTLength);
+        this.maxRowHeight = maxRowHeight;
+    }
+
+    @Override
+    public Object getCellEditorValue() {
+        String wkt = (String) super.getCellEditorValue();
+        try {
+        	return geomManager.createFrom(wkt);
+        } catch (Exception ex) {
+            throw new WKTToGeometryException(wkt, ex);
+        }
+    }
+
+    @Override
+    public Component getTableCellEditorComponent(JTable table, Object value,
+            boolean isSelected, int row, int column) {
+        delegate.setValue(value);
+        if (((GeometryToWKTDelegate) delegate).isWtkTextTooLong()) {
+            JOptionPane
+                    .showMessageDialog(
+                            table.getParent(),
+                            Messages
+                    .getText("Geometria_no_editable_WKT"), Messages
+                    .getText("Error_editar_geometria"),
+                            JOptionPane.ERROR_MESSAGE);
+
+            return null;
+        } else {
+            int height_wanted = (int) getTextArea().getPreferredSize()
+                    .getHeight();
+
+            height_wanted = height_wanted > maxRowHeight ? maxRowHeight
+                    : height_wanted;
+
+            if (height_wanted > table.getRowHeight(row)) {
+                int previousRowHeight = table.getRowHeight();
+                table.setRowHeight(row, height_wanted);
+                table.firePropertyChange("rowheight", previousRowHeight, height_wanted);
+            }
+
+            return editorComponent;
+        }
+    }
+
+    @SuppressWarnings("serial")
+    private class GeometryToWKTDelegate extends
+            DefaultCellEditor.EditorDelegate {
+        private DefaultCellEditor.EditorDelegate delegate;
+
+        private boolean wtkTextTooLong = false;
+
+        private int maxWKTLength;
+
+        public GeometryToWKTDelegate(DefaultCellEditor.EditorDelegate delegate,
+                int maxWKTLength) {
+            this.delegate = delegate;
+            this.maxWKTLength = maxWKTLength;
+        }
+
+        /**
+         * @return the wtkTextTooLong
+         */
+        public boolean isWtkTextTooLong() {
+            return wtkTextTooLong;
+        }
+
+        public void setValue(Object value) {
+            wtkTextTooLong = false;
+            String strValue = "";
+
+            if (value != null) {
+                try {
+                    Geometry geometry = (Geometry) value;
+                    strValue = geometry.convertToWKT();
+
+                    if (strValue.length() > maxWKTLength) {
+                        wtkTextTooLong = true;
+                        delegate.setValue(null);
+                    } else {
+                        delegate.setValue(strValue);
+                    }
+                } catch (Exception ex) {
+                    throw new GeometryToWKTException(ex);
+                }
+            }
+        }
+
+        public Object getCellEditorValue() {
+            if (wtkTextTooLong) {
+                return null;
+            } else {
+                return delegate.getCellEditorValue();
+            }
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            delegate.actionPerformed(e);
+        }
+
+        public void cancelCellEditing() {
+            delegate.cancelCellEditing();
+        }
+
+        public boolean equals(Object obj) {
+            return delegate.equals(obj);
+        }
+
+        public int hashCode() {
+            return delegate.hashCode();
+        }
+
+        public boolean isCellEditable(EventObject anEvent) {
+            return delegate.isCellEditable(anEvent);
+        }
+
+        public void itemStateChanged(ItemEvent e) {
+            delegate.itemStateChanged(e);
+        }
+
+        public boolean shouldSelectCell(EventObject anEvent) {
+            return delegate.shouldSelectCell(anEvent);
+        }
+
+        public boolean startCellEditing(EventObject anEvent) {
+            return delegate.startCellEditing(anEvent);
+        }
+
+        public boolean stopCellEditing() {
+            return delegate.stopCellEditing();
+        }
+
+        public String toString() {
+            return delegate.toString();
+        }
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureStoreModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureStoreModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureStoreModel.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.table.TableModel;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTypesTablePanel;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * A model for the {@link FeatureTypesTablePanel} which unifies the access
+ * to the different models needed by the components included into it.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class FeatureStoreModel {
+
+    private final FeatureStore featureStore;
+    private final FeatureQuery featureQuery;
+    private final FeatureTypeListModel featureTypeListModel;
+    private final Map<String, ConfigurableFeatureTableModel> type2TableModel =
+        new HashMap<String, ConfigurableFeatureTableModel>();
+    private String currentFeatureTypeId;
+
+    /**
+     * Constructor.
+     * 
+     * @param store
+     *            the FeatureStore to get data from
+     * @param query
+     *            the FeatureQuery to use to get data
+     * @throws DataException
+     *             if there is an error getting the default {@link FeatureType}
+     */
+    public FeatureStoreModel(FeatureStore store, FeatureQuery query)
+        throws DataException {
+        this.featureStore = store;
+        this.featureQuery = query;
+        this.featureTypeListModel = new FeatureTypeListModel(store, query);
+
+        this.currentFeatureTypeId =
+            query.getFeatureTypeId() == null ? store.getDefaultFeatureType()
+                .getId() : query.getFeatureTypeId();
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param store
+     *            the FeatureStore to get data from
+     * @throws DataException
+     *             if there is an error getting the default {@link FeatureType}
+     */
+    public FeatureStoreModel(FeatureStore store) throws DataException {
+        this(store, null);
+    }
+
+    /**
+     * Returns the {@link FeatureTypeListModel} to show a list of available
+     * {@link FeatureType}s.
+     * 
+     * @return the {@link FeatureTypeListModel} to show a list of available
+     *         {@link FeatureType}s
+     */
+    public FeatureTypeListModel getFeatureTypeListModel() {
+        return featureTypeListModel;
+    }
+
+    /**
+     * Returns the {@link TableModel} to use to show data of the current feature
+     * type.
+     * 
+     * @return the TableModel to use
+     */
+    public ConfigurableFeatureTableModel getCurrentFeatureTableModel() {
+        return getFeatureTableModel(this.currentFeatureTypeId);
+    }
+
+    /**
+     * Returns the {@link TableModel} to use to show data of a
+     * {@link FeatureType}.
+     * 
+     * @param type
+     *            to use to filter the data
+     * @return the TableModel to use
+     */
+    public ConfigurableFeatureTableModel getFeatureTableModel(FeatureType type) {
+        return getFeatureTableModel(type.getId());
+    }
+
+    /**
+     * Returns the {@link TableModel} to use to show data of a
+     * {@link FeatureType}.
+     * 
+     * @param typeId
+     *            the id of the {@link FeatureType} to use to filter the data
+     * @return the TableModel to use
+     */
+    public ConfigurableFeatureTableModel getFeatureTableModel(String typeId) {
+        ConfigurableFeatureTableModel tableModel = type2TableModel.get(typeId);
+        if (tableModel == null) {
+            try {
+                tableModel =
+                    new ConfigurableFeatureTableModel(featureStore,
+                        featureQuery);
+                type2TableModel.put(typeId, tableModel);
+            } catch (BaseException e) {
+                throw new RuntimeException("Error creating a table model", e);
+            }
+        }
+        return tableModel;
+    }
+
+    /**
+     * Sets the id of the current {@link FeatureType}.
+     * 
+     * @param currentFeatureTypeId
+     *            the id of the current {@link FeatureType}
+     */
+    public void setCurrentFeatureTypeId(String currentFeatureTypeId) {
+        this.currentFeatureTypeId = currentFeatureTypeId;
+    }
+
+    /**
+     * Returns the id of the current {@link FeatureType}.
+     * 
+     * @return the id of the current {@link FeatureType}
+     */
+    public String getCurrentFeatureTypeId() {
+        return currentFeatureTypeId;
+    }
+
+    /**
+     * @return the featureQuery
+     */
+    public FeatureQuery getFeatureQuery() {
+        return featureQuery;
+    }
+
+    /**
+     * @return the featureStore
+     */
+    public FeatureStore getFeatureStore() {
+        return featureStore;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureStoreModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeList.java	(revision 42196)
@@ -0,0 +1,168 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * Shows a list of {@link FeatureType}s to allow the user to select one of them.
+ * 
+ * @author 2005- Vicente Caballero
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class FeatureTypeList extends JPanel {
+
+    private static final long serialVersionUID = 6168364334623238504L;
+
+    private JScrollPane jScrollPane = null;
+    private JList jList = null;
+    private List<SelectedFeatureTypeChangeListener> featureTypeChangeListeners =
+        new ArrayList<SelectedFeatureTypeChangeListener>();
+
+    private final FeatureTypeListModel model;
+
+    /**
+     * Creates a new {@link FeatureTypeList} which loads the available
+     * {@link FeatureType}s from a {@link FeatureStore} and a
+     * {@link FeatureQuery}.
+     * 
+     * @param featureStore
+     *            the store to load the {@link FeatureType}s from
+     * @param featureQuery
+     *            the query to load the {@link FeatureType} from, if any
+     */
+    public FeatureTypeList(FeatureStore featureStore, FeatureQuery featureQuery) {
+        this(new FeatureTypeListModel(featureStore, featureQuery));
+    }
+
+    /**
+     * Creates a new {@link FeatureTypeList} which loads the available
+     * {@link FeatureType}s from a {@link FeatureTypeListModel}.
+     * 
+     * @param model
+     *            the model to get the {@link FeatureType}s from
+     */
+    public FeatureTypeList(FeatureTypeListModel model) {
+        this.model = model;
+        initialize();
+    }
+
+    private void initialize() {
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.setPreferredSize(new Dimension(146, 281));
+        this.add(getJScrollPane(), gridBagConstraints);
+    }
+
+    /**
+     * This method initializes jScrollPane
+     * 
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new JScrollPane();
+            jScrollPane.setViewportView(getJList());
+        }
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes jList
+     * 
+     * @return javax.swing.JList
+     */
+    private JList getJList() {
+        if (jList == null) {
+            jList = new javax.swing.JList();
+            jList.setModel(this.model);
+            jList.setSelectedIndex(0);
+            jList.addListSelectionListener(new ListSelectionListener() {
+
+                public void valueChanged(ListSelectionEvent e) {
+                    FeatureType fType = getSelectedFeatureType();
+                    for (int i = 0; i < featureTypeChangeListeners.size(); i++) {
+                        featureTypeChangeListeners.get(i).change(
+                            model.getFeatureStore(), fType);
+                    }
+                }
+            });
+        }
+
+        return jList;
+    }
+
+    public void addSelectedFeatureTypeChangeListener(
+        SelectedFeatureTypeChangeListener listener) {
+        featureTypeChangeListeners.add(listener);
+    }
+
+    public void removeSelectedFeatureTypeChangeListener(
+        SelectedFeatureTypeChangeListener listener) {
+        featureTypeChangeListeners.remove(listener);
+    }
+
+    /**
+     * Returns the currently selected {@link FeatureType}.
+     * 
+     * @return the currently selected {@link FeatureType}
+     */
+    public FeatureType getSelectedFeatureType() {
+        int index = jList.getSelectedIndex();
+        if (index >= 0) {
+            String typeId = (String) jList.getModel().getElementAt(index);
+            return model.getFeatureType(typeId);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Returns the number of available {@link FeatureType}s.
+     * 
+     * @return the number of available {@link FeatureType}s
+     */
+    public int getFeatureTypesSize() {
+        return model.getSize();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FormattedCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FormattedCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FormattedCellEditor.java	(revision 42196)
@@ -0,0 +1,166 @@
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.JComponent;
+import javax.swing.JFormattedTextField;
+import javax.swing.JTable;
+import javax.swing.border.LineBorder;
+import javax.swing.text.DateFormatter;
+import javax.swing.text.DefaultFormatterFactory;
+import javax.swing.text.NumberFormatter;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+
+import org.gvsig.tools.dataTypes.DataTypes;
+
+public class FormattedCellEditor extends DefaultCellEditor {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1409667557139440155L;
+    private final ConfigurableFeatureTableModel tableModel;
+    private final SimpleDateFormat dateformat;
+    private final NumberFormat numberFormat;
+    private String pattern;
+    private int type;
+
+    public FormattedCellEditor(ConfigurableFeatureTableModel model) {
+        super(new JFormattedTextField());
+        this.tableModel = model;
+
+        Locale localeOfData = this.tableModel.getLocaleOfData();
+        
+        this.dateformat = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(
+                DateFormat.MEDIUM,
+                DateFormat.MEDIUM,
+                localeOfData
+        );
+        this.dateformat.setTimeZone(TimeZone.getDefault());
+        
+        this.numberFormat = NumberFormat.getInstance(localeOfData);
+        this.numberFormat.setMaximumFractionDigits(Integer.MAX_VALUE);
+    }
+
+    @Override
+    public Component getTableCellEditorComponent(JTable table, Object value,
+            boolean isSelected, int row, int column) {
+
+        ((JComponent) getComponent()).setBorder(new LineBorder(Color.black));
+
+        JFormattedTextField editor = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
+        this.pattern = this.tableModel.getFormattingPattern(column);
+
+        if( value == null ) {
+            int attrindex = this.tableModel.getOriginalColumnIndex(column);
+            FeatureAttributeDescriptor attrdesc = this.tableModel.getFeatureType().getAttributeDescriptor(attrindex);
+            value = attrdesc.getDefaultValue();
+        }
+        if ( value instanceof Number ) {
+            if ( value instanceof Float ) {
+                this.type = DataTypes.FLOAT;
+            } else if ( value instanceof Integer ) {
+                this.type = DataTypes.INT;
+            } else if ( value instanceof Long ) {
+                this.type = DataTypes.LONG;
+            } else {
+                this.type = DataTypes.DOUBLE;
+            }
+
+            editor.setFormatterFactory(new DefaultFormatterFactory(
+                    new NumberFormatter(numberFormat)));
+
+            editor.setValue(value);
+        }
+        if ( value instanceof Date ) {
+            this.type = DataTypes.DATE;
+            dateformat.applyPattern(this.pattern);
+            editor.setFormatterFactory(new DefaultFormatterFactory(
+                    new DateFormatter(dateformat)));
+
+            editor.setValue(value);
+        }
+        return editor;
+    }
+
+    @Override
+    public Object getCellEditorValue() {
+        Object superValue = super.getCellEditorValue();
+        String str = (String) superValue;
+        if ( str == null ) {
+            return null;
+        }
+
+        if ( str.length() == 0 ) {
+            return null;
+        }
+
+        try {
+            ParsePosition pos = new ParsePosition(0);
+
+            Number n = null;
+            switch (this.type) {
+            case DataTypes.DOUBLE:
+                n = numberFormat.parse(str, pos);
+                if ( pos.getIndex() != str.length() ) {
+                    throw new ParseException("parsing incomplete", pos.getIndex());
+                }
+                return new Double(n.doubleValue());
+                
+            case DataTypes.FLOAT:
+                n = numberFormat.parse(str, pos);
+                if ( pos.getIndex() != str.length() ) {
+                    throw new ParseException("parsing incomplete", pos.getIndex());
+                }
+                return new Float(n.floatValue());
+                
+            case DataTypes.INT:
+                n = numberFormat.parse(str, pos);
+                if ( pos.getIndex() != str.length() ) {
+                    throw new ParseException("parsing incomplete", pos.getIndex());
+                }
+                return new Integer(n.intValue());
+                
+            case DataTypes.LONG:
+                n = numberFormat.parse(str, pos);
+                if ( pos.getIndex() != str.length() ) {
+                    throw new ParseException("parsing incomplete", pos.getIndex());
+                }
+                return new Long(n.longValue());
+
+            case DataTypes.DATE://                
+                dateformat.applyPattern(this.pattern);
+                Date d = dateformat.parse(str);
+                return d;
+
+            default:
+                return superValue;
+            }
+
+        } catch (ParseException pex) {
+            throw new RuntimeException(pex);
+        }
+    }
+
+    public boolean stopCellEditing() {
+        try {
+            this.getCellEditorValue();
+            return super.stopCellEditing();
+        } catch (Exception ex) {
+            ((JComponent) getComponent()).setBorder(new LineBorder(Color.red));
+            return false;
+        }
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetRowCountException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetRowCountException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetRowCountException.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2008 {DiSiD Technologies}  {{Task}}
+*/
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when getting the total row number, or the total number of
+ * Features, throws an error.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class GetRowCountException extends BaseRuntimeException {
+
+    private static final String KEY = "get_row_count_exception";
+
+    private static final String MESSAGE = "Error getting the total table row count";
+
+    private static final long serialVersionUID = 7803270649446415844L;
+
+    /**
+     * Creates a new GetRowCountException.
+     */
+    public GetRowCountException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Creates a new GetRowCountException.
+     * 
+     * @param cause
+     *            the cause of the exception
+     */
+    public GetRowCountException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+    @Override
+    protected Map<String, ?> values() {
+        return Collections.emptyMap();
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetRowCountException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetFeatureAtException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetFeatureAtException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetFeatureAtException.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when there is an error while getting a Feature in a
+ * position.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class GetFeatureAtException extends BaseRuntimeException {
+
+    private static final long serialVersionUID = 3981212631490713671L;
+
+    private static final String KEY = "get_feature_at_exception";
+
+    private static final String MESSAGE = "Error getting the feature "
+            + "at row =  %(rowIndex)";
+
+    private int rowIndex;
+
+    /**
+     * Creates a new Exception when getting a Feature.
+     * 
+     * @param rowIndex
+     *            the position of the Feature
+     */
+    public GetFeatureAtException(int rowIndex) {
+        super(MESSAGE, KEY, serialVersionUID);
+        this.rowIndex = rowIndex;
+    }
+
+    /**
+     * Creates a new Exception when getting a Feature.
+     * 
+     * @param rowIndex
+     *            the position of the Feature
+     * @param cause
+     *            the original Throwable
+     */
+    public GetFeatureAtException(int rowIndex, Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+        this.rowIndex = rowIndex;
+    }
+
+    /**
+     * @return the rowIndex
+     */
+    public int getRowIndex() {
+        return rowIndex;
+    }
+
+    @Override
+    protected Map<String, ?> values() {
+        return Collections.singletonMap("rowIndex", getRowIndex());
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GetFeatureAtException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurationTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurationTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurationTableModel.java	(revision 42196)
@@ -0,0 +1,203 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureQuery}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import javax.swing.table.AbstractTableModel;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.i18n.Messages;
+
+/**
+ * TableModel to configure a ConfigurableFeatureTableModel.
+ *
+ * Allows to set Feature attributes as visible or not, and to set aliases for
+ * the Feature attribute names.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class ConfigurationTableModel extends AbstractTableModel {
+
+    private static final long serialVersionUID = -825156698327593853L;
+
+    private static final int VISIBILITY_COLUMN = 0;
+    private static final int NAME_COLUMN = 1;
+    private static final int ALIAS_COLUMN = 2;
+    private static final int TYPE_COLUMN = 3;
+    private static final int SIZE_COLUMN = 4;
+    private static final int PRECISION_COLUMN = 5;
+    private static final int PATTERN_COLUMN = 6;
+    
+    private static final int COLUMN_COUNT = 7;
+    
+    
+
+    private ConfigurableFeatureTableModel configurable;
+
+    public ConfigurationTableModel(ConfigurableFeatureTableModel configurable) {
+        super();
+        this.configurable = configurable;
+    }
+
+    public int getColumnCount() {
+        // 1: visibility, 2: field name, 3: alias, 4:Type, 5:size, 6:pattern
+        return COLUMN_COUNT;
+    }
+
+    public int getRowCount() {
+        return configurable.getOriginalColumnCount();
+    }
+
+    public Object getValueAt(int rowIndex, int columnIndex) {
+    	FeatureAttributeDescriptor fad = null;
+        String name = configurable.getOriginalColumnName(rowIndex);
+        switch (columnIndex) {
+        case VISIBILITY_COLUMN:
+            return configurable.isVisible(name);
+        case NAME_COLUMN:
+            return name;
+        case ALIAS_COLUMN:
+            return configurable.getAliasForColumn(name);
+        case TYPE_COLUMN:
+        	fad = configurable.internalGetFeatureDescriptorForColumn(rowIndex);
+        	if( fad == null ) {
+        		return null;
+        	}
+    		return fad.getDataType().getName();
+        case SIZE_COLUMN:
+        	fad = configurable.internalGetFeatureDescriptorForColumn(rowIndex);
+        	if( fad == null ) {
+        		return null;
+        	}
+    		return fad.getSize();
+        case PRECISION_COLUMN:
+        	fad = configurable.internalGetFeatureDescriptorForColumn(rowIndex);
+        	if( fad == null ) {
+        		return null;
+        	}
+    		return fad.getPrecision();
+        case PATTERN_COLUMN:
+        	return configurable.getFormattingPattern(name);
+        default:
+            return null;
+        }
+    }
+
+    @Override
+    public void setValueAt(Object value, int rowIndex, int columnIndex) {
+        String name = configurable.getOriginalColumnName(rowIndex);
+        switch (columnIndex) {
+        case VISIBILITY_COLUMN:
+            configurable.setVisible(name, Boolean.TRUE.equals(value));
+            break;
+        case ALIAS_COLUMN:
+            configurable.setAlias(name, (String) value);
+            break;
+        case PATTERN_COLUMN:
+        	configurable.setFormattingPattern(name, (String) value);
+        }
+    }
+
+    @Override
+    public boolean isCellEditable(int rowIndex, int columnIndex) {
+        switch (columnIndex) {
+        case VISIBILITY_COLUMN:
+        case ALIAS_COLUMN:
+        case PATTERN_COLUMN:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        switch (columnIndex) {
+        case VISIBILITY_COLUMN:
+            return Boolean.class;
+        case NAME_COLUMN:
+        case ALIAS_COLUMN:
+        case TYPE_COLUMN:
+        case PATTERN_COLUMN:
+            return String.class;
+        case SIZE_COLUMN:
+        case PRECISION_COLUMN:
+            /*
+             * We must use Integer.class instead of int.class
+             * because int.class does not have a registered
+             * renderer and its parent class is 'null', so we
+             * have no renderer for it
+             */
+            return Integer.class;
+        default:
+            return Object.class;
+        }
+
+    }
+
+    @Override
+    public String getColumnName(int columnIndex) {
+        switch (columnIndex) {
+        case VISIBILITY_COLUMN:
+            return Messages.getText("visible");
+        case NAME_COLUMN:
+            return Messages.getText("name");
+        case ALIAS_COLUMN:
+            return Messages.getText("alias");
+        case SIZE_COLUMN:
+            return Messages.getText("size");
+        case PRECISION_COLUMN:
+            return Messages.getText("precision");
+        case TYPE_COLUMN:
+            return Messages.getText("type");
+        case PATTERN_COLUMN:
+            return Messages.getText("pattern");
+        default:
+            return "";
+        }
+    }
+
+	public static int getVisibilityColumn() {
+		return VISIBILITY_COLUMN;
+	}
+
+    /**
+     * Make current changes in configuration (visible columns and aliases)
+     * as definitive.
+     */
+	public void acceptChanges() {
+		configurable.acceptChanges();
+	}
+
+    /**
+     * Cancel current changes in configuration (visible columns and aliases)
+     * and return to previous status.
+     */
+	public void cancelChanges() {
+		configurable.cancelChanges();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurationTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/WKTToGeometryException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/WKTToGeometryException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/WKTToGeometryException.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when there is an error while converting a WKT text to a
+ * Geometry into a table cell.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class WKTToGeometryException extends BaseRuntimeException {
+
+    private static final long serialVersionUID = 7450289270030694675L;
+
+    private static final String KEY = "wkt_to_geometry_exception";
+
+    private static final String MESSAGE = "Error getting the geometry value of "
+            + "the WKT value %(wkt)";
+
+    private String wkt;
+
+    /**
+     * Creates a new Exception when getting a Geometry cell as WKT.
+     * 
+     * @param wkt
+     *            the geometry in WKT format
+     */
+    public WKTToGeometryException(String wkt) {
+        super(MESSAGE, KEY, serialVersionUID);
+        this.wkt = wkt;
+    }
+
+    /**
+     * Creates a new Exception when getting a Geometry cell as WKT.
+     * 
+     * @param wkt
+     *            the geometry in WKT format
+     * @param cause
+     *            the original Throwable
+     */
+    public WKTToGeometryException(String wkt, Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+        this.wkt = wkt;
+    }
+
+    public Object getWKT() {
+        return wkt;
+    }
+
+    @Override
+    protected Map<String, ?> values() {
+        return Collections.singletonMap("wkt", getWKT());
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/WKTToGeometryException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryToWKTException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryToWKTException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryToWKTException.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when there is an error while converting a Geometry to WKT
+ * into a table cell.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class GeometryToWKTException extends BaseRuntimeException {
+
+    private static final long serialVersionUID = 1414646041766565149L;
+
+    private static final String KEY = "geometry_to_wkt_exception";
+
+    private static final String MESSAGE = "Error getting the geometry value "
+            + "of the cell as WKT";
+
+    /**
+     * Creates a new Exception when getting a Geometry cell as WKT.
+     * 
+     */
+    public GeometryToWKTException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Creates a new Exception when getting a Geometry cell as WKT.
+     * 
+     * @param cause
+     *            the original Throwable
+     */
+    public GeometryToWKTException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryToWKTException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellRenderer.java	(revision 42196)
@@ -0,0 +1,184 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.awt.Component;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+
+/**
+ * Renders a text value into a text area.
+ * <p>
+ * Taken and adapted from the Article <strong>"Multi-line cells in JTable in JDK
+ * 1.4+"</strong> by Dr. Heinz M. Kabutz:
+ * </p>
+ * <p>
+ * http://www.javaspecialists.eu/archive/Issue106.html
+ * </p>
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class TextAreaCellRenderer extends JTextArea implements TableCellRenderer {
+
+    private static final long serialVersionUID = 3269365116036190589L;
+
+    private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();
+    /** map from table to map of rows to map of column heights */
+    private final Map<JTable, Map<Integer, Map<Integer, Integer>>> cellSizes = new HashMap<JTable, Map<Integer, Map<Integer, Integer>>>();
+    
+    private int maxTxtLength = Integer.MAX_VALUE;
+    
+    private int maxRowHeight = Integer.MAX_VALUE;
+
+    /**
+     * Creates a new TextAreaRenderer.
+     */
+    public TextAreaCellRenderer() {
+        this(Integer.MAX_VALUE, Integer.MAX_VALUE);
+    }
+
+    /**
+     * Creates a new TextAreaRenderer.
+     * 
+     * @param maxTXTLength
+     *            the maximum text length to be rendered.
+     * @param maxRowHeight
+     *            the maximum row height for the rows with cells rendered with
+     *            this component
+     */
+    public TextAreaCellRenderer(int maxTxtLength, int maxRowHeight) {
+        setLineWrap(true);
+        setWrapStyleWord(true);
+        this.maxTxtLength = maxTxtLength;
+        this.maxRowHeight = maxRowHeight;
+    }
+
+    public Component getTableCellRendererComponent(
+            JTable table, Object obj, boolean isSelected, boolean hasFocus,
+            int row, int column) {
+        // set the colours, etc. using the standard for that platform
+        adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus,
+                row, column);
+        setForeground(adaptee.getForeground());
+        setBackground(adaptee.getBackground());
+        setBorder(adaptee.getBorder());
+        setFont(adaptee.getFont());
+
+        String cellTxt = getCellText(obj, row, column);
+        if (cellTxt.length() > maxTxtLength) {
+            cellTxt = cellTxt.substring(0, maxTxtLength - 4).concat(" ...");
+        }
+
+        setText(cellTxt);
+
+        // This line was very important to get it working with JDK1.4
+        TableColumnModel columnModel = table.getColumnModel();
+        setSize(columnModel.getColumn(column).getWidth(), 100000);
+        int height_wanted = (int) getPreferredSize().getHeight();
+        
+        height_wanted = height_wanted > maxRowHeight ? maxRowHeight
+                : height_wanted;
+        
+        addSize(table, row, column, height_wanted);
+        height_wanted = findTotalMaximumRowSize(table, row);
+        if (height_wanted != table.getRowHeight(row)) {
+            int previousRowHeight = table.getRowHeight();
+            table.setRowHeight(row, height_wanted);
+            table.firePropertyChange("rowheight", previousRowHeight, height_wanted);
+        }
+        return this;
+    }
+
+    /**
+     * Returns the text for the cell.
+     * 
+     * @param value
+     *            the cell object value
+     * @return the text to render on the cell
+     */
+    protected String getCellText(Object value, int row, int column) {
+        return adaptee.getText();
+    }
+
+    private void addSize(JTable table, int row, int column, int height) {
+        Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table);
+        if (rows == null) {
+            cellSizes.put(table,
+                    rows = new HashMap<Integer, Map<Integer, Integer>>());
+        }
+        Map<Integer, Integer> rowheights = rows.get(new Integer(row));
+        if (rowheights == null) {
+            rows.put(new Integer(row),
+                    rowheights = new HashMap<Integer, Integer>());
+        }
+        rowheights.put(new Integer(column), new Integer(height));
+    }
+
+    /**
+     * Look through all columns and get the renderer. If it is also a
+     * TextAreaRenderer, we look at the maximum height in its hash table for
+     * this row.
+     */
+    private int findTotalMaximumRowSize(JTable table, int row) {
+        int maximum_height = 0;
+        for (int column = 0; column < table.getColumnCount(); column++) {
+            TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
+            if (cellRenderer instanceof TextAreaCellRenderer) {
+                TextAreaCellRenderer tar = (TextAreaCellRenderer) cellRenderer;
+                maximum_height = Math.max(maximum_height, tar
+                        .findMaximumRowSize(table, row));
+            }
+        }
+        return maximum_height;
+    }
+
+    private int findMaximumRowSize(JTable table, int row) {
+        Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table);
+        if (rows == null)
+            return 0;
+        Map<Integer, Integer> rowheights = rows.get(new Integer(row));
+        if (rowheights == null)
+            return 0;
+        int maximum_height = 0;
+        for (Iterator<Map.Entry<Integer, Integer>> it = rowheights.entrySet()
+                .iterator(); it.hasNext();) {
+            Map.Entry<Integer, Integer> entry = it.next();
+            int cellHeight = ((Integer) entry.getValue()).intValue();
+            maximum_height = Math.max(maximum_height, cellHeight);
+        }
+        return maximum_height;
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurableFeatureTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurableFeatureTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurableFeatureTableModel.java	(revision 42196)
@@ -0,0 +1,538 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureQuery}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.security.InvalidParameterException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.swing.event.TableModelEvent;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extends the FeatureTableModel to add more configurable options, like the
+ * visible columns, column name aliases and row order.
+ * 
+ * TODO: a�adir la persistencia.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class ConfigurableFeatureTableModel extends FeatureTableModel {
+
+    private static final long serialVersionUID = -8223987814719746492L;
+    
+    private static final Logger logger = LoggerFactory.getLogger(ConfigurableFeatureTableModel.class);
+
+    private List<String> columnNames;
+
+    private List<String> visibleColumnNames;
+
+    private List<String> visibleColumnNamesOriginal;
+
+    private Map<String, String> name2Alias;
+
+    private Map<String, String> name2AliasOriginal;
+
+    private Map<String,String> patterns = null;
+
+    private Locale localeOfData;    
+    /**
+     * @see FeatureTableModel#FeatureTableModel(FeatureStore, FeatureQuery)
+     */
+    public ConfigurableFeatureTableModel(FeatureStore featureStore,
+        FeatureQuery featureQuery) throws BaseException {
+        super(featureStore, featureQuery);
+        this.localeOfData = Locale.getDefault();
+    }
+
+    /**
+     * @see FeatureTableModel#FeatureTableModel(FeatureStore, FeatureQuery, int)
+     */
+    public ConfigurableFeatureTableModel(FeatureStore featureStore,
+        FeatureQuery featureQuery, int pageSize) throws BaseException {
+        super(featureStore, featureQuery, pageSize);
+    }
+
+    @Override
+    public int getColumnCount() {
+        return visibleColumnNames.size();
+    }
+
+    public int getOriginalColumnCount() {
+        return super.getColumnCount();
+    }
+
+    @Override
+    public String getColumnName(int column) {
+        int originalIndex = getOriginalColumnIndex(column);
+        return getAliasForColumn(getOriginalColumnName(originalIndex));
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        int originalIndex = getOriginalColumnIndex(columnIndex);
+        return super.getColumnClass(originalIndex);
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getDescriptorForColumn(int columnIndex) {
+        int originalIndex = getOriginalColumnIndex(columnIndex);
+        return super.getDescriptorForColumn(originalIndex);
+    }
+
+    /**
+     * Returns the original name of the column, ignoring the alias.
+     * 
+     * @param column
+     *            the original index of the column
+     * @return the original column name
+     */
+    public String getOriginalColumnName(int column) {
+        return super.getColumnName(column);
+    }
+
+    /**
+     * Sets the visibility of a table column.
+     * 
+     * @param columnIndex
+     *            the index of the column to update
+     * @param visible
+     *            if the column will be visible or not
+     */
+    public void setVisible(String name, boolean visible) {
+        // If we don't have already the column as visible,
+        // add to the list, without order, and recreate
+        // the visible columns list in the original order
+        if (!columnNames.contains(name)) {
+            throw new InvalidParameterException(name); // FIXME
+        }
+        if (visible && !visibleColumnNames.contains(name)) {
+            visibleColumnNames.add(name);
+            setVisibleColumns(visibleColumnNames);
+        } else {
+            visibleColumnNames.remove(name);
+            setVisibleColumns(visibleColumnNames);
+            fireTableStructureChanged();
+        }
+
+    }
+
+    @Override
+    public void setFeatureType(FeatureType featureType) {
+        // Check if there is a new column name
+        List<String> newColumns = new ArrayList<String>();
+        List<String> renamedColumnsNewName = new ArrayList<String>();
+        
+        @SuppressWarnings("unchecked")
+        Iterator<FeatureAttributeDescriptor> attrIter = featureType.iterator();
+        FeatureAttributeDescriptor fad = null;
+        EditableFeatureAttributeDescriptor efad = null;
+        
+        String colName;
+        while (attrIter.hasNext()) {
+            fad = attrIter.next();
+            colName = fad.getName();
+            if (!columnNames.contains(colName)) {
+                if (fad instanceof EditableFeatureAttributeDescriptor) {
+                    efad = (EditableFeatureAttributeDescriptor) fad; 
+                    /*
+                     * If editable att descriptor,
+                     * check original name
+                     */
+                    if (efad.getOriginalName() != null) {
+                        if (!columnNames.contains(efad.getOriginalName())) {
+                            /*
+                             * Check with original name but add current name
+                             */
+                            newColumns.add(colName);
+                        } else {
+                            /*
+                             * List of new names of renamed columns
+                             */
+                            renamedColumnsNewName.add(colName);
+                        }
+                    } else {
+                        newColumns.add(colName);
+                    }
+                } else {
+                    newColumns.add(colName);
+                }
+            }
+        }
+
+        // Update column names
+        columnNames.clear();
+        @SuppressWarnings("unchecked")
+        Iterator<FeatureAttributeDescriptor> visibleAttrIter =
+            featureType.iterator();
+        while (visibleAttrIter.hasNext()) {
+            fad = visibleAttrIter.next();
+            colName = fad.getName();
+            columnNames.add(colName);
+            //If the column is added has to be visible
+            if (!visibleColumnNames.contains(colName)) {
+
+                if (((newColumns.contains(colName)
+                    || renamedColumnsNewName.contains(colName)))
+                    &&
+                    fad.getType() != DataTypes.GEOMETRY) {
+                    // Add new columns and renamed
+                    visibleColumnNames.add(colName);
+                    visibleColumnNamesOriginal.add(colName);
+                }
+                /*
+                if (renamedColumnsNewName.contains(colName)) {
+                    // Add renamed
+                    insertWhereOldName(visibleColumnNames, colName, fad);
+                    insertWhereOldName(visibleColumnNamesOriginal, colName, fad);
+                }
+                */
+            }
+        }
+
+        // remove from visible columns removed columns
+        visibleColumnNames = intersectKeepOrder(columnNames, visibleColumnNames);
+        // instead of: visibleColumnNames.retainAll(columnNames);
+
+        visibleColumnNamesOriginal = intersectKeepOrder(columnNames, visibleColumnNamesOriginal);
+        // instead of: visibleColumnNamesOriginal.retainAll(columnNames);
+
+        // remove from alias map removed columns
+        name2Alias.keySet().retainAll(columnNames);
+        name2AliasOriginal.keySet().retainAll(columnNames);
+
+        super.setFeatureType(featureType);
+
+    }
+
+    /**
+     * keeps order of first parameter
+     * 
+     * @param lista
+     * @param listb
+     * @return
+     */
+    private List<String> intersectKeepOrder(List<String> lista, List<String> listb) {
+        
+        List<String> resp = new ArrayList<String>();
+        resp.addAll(lista);
+        resp.retainAll(listb);
+        return resp;
+    }
+
+    private void insertWhereOldNamee(
+        List<String> str_list,
+        String str,
+        FeatureAttributeDescriptor fad) {
+        
+        if (fad instanceof EditableFeatureAttributeDescriptor) {
+            EditableFeatureAttributeDescriptor efad =
+                (EditableFeatureAttributeDescriptor) fad;
+            if (efad.getOriginalName() != null) {
+                int old_ind = str_list.indexOf(efad.getOriginalName());
+                if (old_ind != -1) {
+                    // Insert before old name
+                    str_list.add(old_ind, str);
+                } else {
+                    // Insert anyway (add)
+                    str_list.add(str);
+                }
+            } else {
+                // Insert anyway (add)
+                str_list.add(str);
+            }
+        } else {
+            // Insert anyway (add)
+            str_list.add(str);
+        }
+    }
+
+    /**
+     * Sets the current visible columns list, in the original order.
+     * 
+     * @param names
+     *            the names of the columns to set as visible
+     */
+    public void setVisibleColumns(List<String> names) {
+        // Recreate the visible column names list
+        // to maintain the original order        
+        visibleColumnNames = new ArrayList<String>(names.size());
+        for (int i = 0; i < columnNames.size(); i++) {
+            String columnName = columnNames.get(i);
+            if (names.contains(columnName)) {
+                visibleColumnNames.add(columnName);
+            }
+        }
+        updatePaginHelperWithHiddenColums();
+        fireTableStructureChanged();
+    }
+
+    protected String[] getHiddenColumnNames() {
+        List<String> hiddenColumns = new ArrayList<String>();
+        hiddenColumns.addAll(columnNames);
+        
+        for (int i = 0; i < visibleColumnNames.size(); i++) {
+            String columnName = visibleColumnNames.get(i);
+            hiddenColumns.remove(columnName);
+        }
+        if( hiddenColumns.size()<1 ) {
+            return null;
+        }
+        return (String[]) hiddenColumns.toArray(new String[hiddenColumns.size()]);
+    }
+        
+    /**
+     * Changes all columns to be visible.
+     */
+    public void setAllVisible() {
+        visibleColumnNames.clear();
+        visibleColumnNames.addAll(columnNames);
+        fireTableStructureChanged();
+    }
+
+    /**
+     * Sets the alias for a column.
+     * 
+     * @param name
+     *            the name of the column
+     * @param alias
+     *            the alias for the column
+     */
+    public void setAlias(String name, String alias) {
+        name2Alias.put(name, alias);
+        fireTableStructureChanged();
+    }
+
+    public void orderByColumn(String name, boolean ascending)
+        throws BaseException {
+        FeatureQueryOrder order = getHelper().getFeatureQuery().getOrder();
+        if (order == null) {
+            order = new FeatureQueryOrder();
+            getHelper().getFeatureQuery().setOrder(order);
+        }
+        order.clear();
+        order.add(name, ascending);
+        getHelper().reload();
+        fireTableChanged(new TableModelEvent(this, 0, getRowCount() - 1));
+    }
+
+    @Override
+    protected void initialize() {
+        super.initialize();
+
+        initializeVisibleColumns();
+        initializeAliases();
+        updatePaginHelperWithHiddenColums();
+    }
+
+    /**
+     * Returns if a column is visible.
+     * 
+     * @param name
+     *            the name of the column
+     * @return if the column is visible
+     */
+    public boolean isVisible(String name) {
+        return visibleColumnNames.contains(name);
+    }
+
+    /**
+     * Initializes the table name aliases.
+     */
+    private void initializeAliases() {
+        int columns = super.getColumnCount();
+        name2Alias = new HashMap<String, String>(columns);
+        name2AliasOriginal = new HashMap<String, String>(columns);
+    }
+
+    /**
+     * Initializes the table visible columns.
+     */
+    protected void initializeVisibleColumns() {
+        int columns = super.getColumnCount();
+        columnNames = new ArrayList<String>(columns);
+        visibleColumnNames = new ArrayList<String>(columns);
+
+        for (int i = 0; i < columns; i++) {
+            String columnName = super.getColumnName(i);
+            columnNames.add(columnName);
+
+            // By default, geometry columns will not be visible
+            FeatureAttributeDescriptor descriptor =
+                super.getDescriptorForColumn(i);
+            if (descriptor.getType() != DataTypes.GEOMETRY) {
+                visibleColumnNames.add(columnName);
+            }
+        }
+        
+        visibleColumnNamesOriginal = new ArrayList<String>(visibleColumnNames);
+    }
+
+    /**
+     * Returns the alias for the name of a column.
+     * 
+     * @param name
+     *            of the column
+     * @return the alias
+     */
+    protected String getAliasForColumn(String name) {
+        String alias = name2Alias.get(name);
+        return alias == null ? name : alias;
+    }
+
+    /**
+     * Returns the original position of a column.
+     * 
+     * @param columnIndex
+     *            the current visible column index
+     * @return the original column index
+     */
+    public int getOriginalColumnIndex(int columnIndex) {
+        String columnName = visibleColumnNames.get(columnIndex);
+        return columnNames.indexOf(columnName);
+    }
+
+    @Override
+    protected Object getFeatureValue(Feature feature, int columnIndex) {
+        int realColumnIndex = getOriginalColumnIndex(columnIndex);
+        return super.getFeatureValue(feature, realColumnIndex);
+    }
+
+    @Override
+    protected EditableFeature setFeatureValue(Feature feature, int columnIndex,
+        Object value) {
+        int realColumnIndex = getOriginalColumnIndex(columnIndex);
+        return super.setFeatureValue(feature, realColumnIndex, value);
+    }
+    
+    /**
+     * Make current changes in configuration (visible columns and aliases)
+     * as definitive.
+     */
+    public void acceptChanges() {
+    	visibleColumnNamesOriginal = new ArrayList<String>(visibleColumnNames);
+    	name2AliasOriginal = new HashMap<String, String>(name2Alias);
+    }
+    
+    /**
+     * Cancel current changes in configuration (visible columns and aliases)
+     * and return to previous status.
+     */
+    public void cancelChanges() {
+    	visibleColumnNames = new ArrayList<String>(visibleColumnNamesOriginal);
+    	name2Alias = new HashMap<String, String>(name2AliasOriginal);
+    	fireTableStructureChanged();
+    }
+
+    protected void initializeFormattingPatterns() {
+        this.patterns = new HashMap<String, String>();
+
+        int columns = super.getColumnCount();
+
+        for (int i = 0; i < columns; i++) {
+            String columnName = super.getColumnName(i);
+            initializeFormattingPattern(columnName);
+        }
+    } 
+    
+    protected void initializeFormattingPattern(String columnName) {
+        FeatureAttributeDescriptor descriptor = 
+                this.getFeatureType().getAttributeDescriptor(columnName);
+
+        switch(descriptor.getDataType().getType()) {
+        case DataTypes.BYTE:
+        case DataTypes.INT:
+        case DataTypes.LONG:
+            String defaultIntegerPattern = "#,##0";
+            this.patterns.put(columnName,defaultIntegerPattern);
+            break;
+        case DataTypes.DOUBLE:
+        case DataTypes.FLOAT:
+            String defaultDecimalPattern = "#,##0.000";
+            this.patterns.put(columnName,defaultDecimalPattern);
+            break;
+        case DataTypes.DATE:
+            String defaultDatePattern = new SimpleDateFormat().toPattern();
+            this.patterns.put(columnName,defaultDatePattern);
+            break;
+        default:
+            this.patterns.put(columnName,null);
+        }
+    }
+    
+    public String getFormattingPattern(int column) {
+        String columnName = this.visibleColumnNames.get(column);
+        return this.getFormattingPattern(columnName);
+    }
+    
+    public String getFormattingPattern(String columnName) {
+        if( this.patterns==null ) {
+            initializeFormattingPatterns();
+        }
+        String pattern = this.patterns.get(columnName);
+        if( StringUtils.isBlank(pattern) ) {
+            initializeFormattingPattern(columnName);
+        }
+        return pattern;
+    }
+    
+    public void setFormattingPattern(String columnName, String pattern) {
+        if( this.patterns==null ) {
+            initializeFormattingPatterns();
+        }
+        this.patterns.put(columnName,pattern);
+    }
+    
+    public Locale getLocaleOfData() {
+        return this.localeOfData;
+    }
+    
+    public void setLocaleOfData(Locale locale) {
+        this.localeOfData = locale;
+    }
+    
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurableFeatureTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/ColumnHeaderSelectionChangeNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/ColumnHeaderSelectionChangeNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/ColumnHeaderSelectionChangeNotification.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table.notification;
+
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTable;
+
+/**
+ * Notification fired when the column header selection has been changed.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class ColumnHeaderSelectionChangeNotification implements
+        FeatureTableNotification {
+    
+    public static final String COLUMNHEADER_SELECTION_CHANGE = "Column_Header_Selection_Change";
+
+    private final FeatureTable featureTable;
+
+    /**
+     * Creates a new ColumnHeaderSelectionChangeNotification with the
+     * originating {@link FeatureTable}.
+     * 
+     * @param featureTable
+     *            origin of the notification
+     */
+    public ColumnHeaderSelectionChangeNotification(FeatureTable featureTable) {
+        this.featureTable = featureTable;
+    }
+
+    public FeatureTable getFeatureTable() {
+        return featureTable;
+    }
+    
+    public String getType() {
+        return COLUMNHEADER_SELECTION_CHANGE;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/ColumnHeaderSelectionChangeNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/FeatureTableNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/FeatureTableNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/FeatureTableNotification.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2008 {DiSiD Technologies}  {{Task}}
+*/
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table.notification;
+
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTable;
+
+/**
+ * Notifications for Observers of the {@link FeatureTable}.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public interface FeatureTableNotification {
+
+    /**
+     * Returns the {@link FeatureTable} originating the notification.
+     * 
+     * @return the {@link FeatureTable}
+     */
+    FeatureTable getFeatureTable();
+    
+    /**
+     * Returns the type of the notification.
+     * 
+     * @return the type
+     */
+    String getType();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/notification/FeatureTableNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellRenderer.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureCollection}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Renderer for cells of type {@link Geometry}, showing it in WKT format.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class GeometryWKTCellRenderer extends TextAreaCellRenderer {
+
+    private static final Logger logger = LoggerFactory.getLogger(GeometryWKTCellRenderer.class);
+            
+    private static final long serialVersionUID = -2470239399517077869L;
+    
+    public static final int DEFAULT_MAX_WKT_LENGTH = 800;
+    
+    public static final int DEFAULT_MAX_ROW_HEIGHT = 80;
+
+    /**
+     * Creates a new GeometryWKTCellRenderer, with the default MAX LENGTH fot
+     * the WKT Strings and the default MAX HEIGHT for rows.
+     */
+    public GeometryWKTCellRenderer() {
+        this(DEFAULT_MAX_WKT_LENGTH, DEFAULT_MAX_ROW_HEIGHT);
+    }
+
+    /**
+     * Creates a new GeometryWKTCellRenderer.
+     * 
+     * @param maxWKTLength
+     *            the maximum WTK length to be rendered.
+     * @param maxRowHeight
+     *            the maximum row height for the rows with cells rendered with
+     *            this component
+     */
+    public GeometryWKTCellRenderer(int maxWKTLength, int maxRowHeight) {
+        super(maxWKTLength, maxRowHeight);
+    }
+
+    @Override
+    protected String getCellText(Object value, int row, int column) {
+        if (value != null) {
+            try {
+                Geometry geometry = (Geometry) value;
+                String geomTxt = (String) geometry.convertToWKT();
+                if (geomTxt.length() > 200) {
+                    geomTxt = geomTxt.substring(0, 200);
+                }
+
+                return geomTxt;
+            } catch (Exception ex) {
+                // Ojo, habia un warn en lugar de debug; pero puede causar que
+                // se inserten demasiadas entradas en el log.
+                logger.debug("Can't convert the geometry to WKT.",ex);
+                return "#ERROR#";
+            }
+        }
+        return "";
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryWKTCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListException.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2008 {DiSiD Technologies}  {{Task}}
+*/
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when preparing the list of {@link FeatureType}s or selecting
+ * one of them.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class FeatureTypeListException extends BaseRuntimeException {
+
+	private static final long serialVersionUID = 2761369014780787542L;
+
+	private static final String KEY = "_FeatureTypeListException";
+
+	private static final String MESSAGE =
+			"Error loading the list of feature types or selecting one of them";
+
+	/**
+	 * Constructs a new FeatureTypeLoadException.
+	 * 
+	 * @param cause
+	 *            the original exception cause
+	 */
+    public FeatureTypeListException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListModel.java	(revision 42196)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.util.List;
+
+import javax.swing.AbstractListModel;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+/**
+ * Model to be used by components showing a list of {@link FeatureType}s.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class FeatureTypeListModel extends AbstractListModel implements Observer {
+
+    private static final long serialVersionUID = -4274815135770376868L;
+    private final FeatureStore featureStore;
+    private final FeatureQuery featureQuery;
+
+    /**
+     * Constructs a {@link FeatureTypeListModel}.
+     * 
+     * @param featureStore
+     *            to get the {@link FeatureType}s from
+     * @param featureQuery
+     *            to get the FeatureType to filter if any
+     */
+    public FeatureTypeListModel(FeatureStore featureStore,
+        FeatureQuery featureQuery) {
+        this.featureStore = featureStore;
+        this.featureQuery = featureQuery;
+        this.featureStore.addObserver(this);
+    }
+
+    /**
+     * Returns the number of {@link FeatureType} to show.
+     */
+    public int getSize() {
+        return queryHasFeatureType() ? 1 : getFeatureTypes().size();
+    }
+
+    /**
+     * Returns if the query has a {@link FeatureType} to filter with.
+     * 
+     * @return if the query has a {@link FeatureType} to filter with
+     */
+    private boolean queryHasFeatureType() {
+        return featureQuery != null && featureQuery.getFeatureTypeId() != null;
+    }
+
+    @SuppressWarnings("unchecked")
+    private List<FeatureType> getFeatureTypes() {
+        try {
+            return featureStore.getFeatureTypes();
+        } catch (DataException e) {
+            throw new RuntimeException(
+                "Error getting the feature types of the FeatureStore: "
+                    + featureStore, e);
+        }
+    }
+
+    public Object getElementAt(int index) {
+        return queryHasFeatureType() ? featureQuery.getFeatureTypeId()
+            : getFeatureTypes().get(index).getId();
+    }
+
+    public void update(Observable observable, Object notification) {
+        if (observable.equals(this.featureStore)
+            && notification instanceof FeatureStoreNotification) {
+            FeatureStoreNotification fsNotification =
+                (FeatureStoreNotification) notification;
+            String type = fsNotification.getType();
+
+            if (FeatureStoreNotification.AFTER_UPDATE_TYPE.equals(type)) {
+                if (queryHasFeatureType()) {
+                    fireContentsChanged(this, 0, 0);
+                } else {
+                    FeatureType featureType = fsNotification.getFeatureType();
+                    int index = getFeatureTypes().indexOf(featureType);
+                    fireContentsChanged(this, index, index);
+                }
+            }
+        }
+    }
+
+    /**
+     * 
+     * Returns the {@link FeatureStore}
+     * 
+     * @return the featureStore
+     */
+    public FeatureStore getFeatureStore() {
+        return featureStore;
+    }
+
+    /**
+     * Returns the {@link FeatureType} with the given identifier.
+     * 
+     * @param featureTypeId
+     *            identifier of the {@link FeatureType}
+     * @return a {@link FeatureType}
+     */
+    public FeatureType getFeatureType(String featureTypeId) {
+        try {
+            return featureStore.getFeatureType(featureTypeId);
+        } catch (DataException e) {
+            throw new FeatureTypeListException(e);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTypeListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableConfigurationPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableConfigurationPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableConfigurationPanel.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a Table component for Features}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import javax.swing.BoxLayout;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+
+
+/**
+ * Panel to configure a FeatureTable. Allows to configure visible columns and
+ * column aliases.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class FeatureTableConfigurationPanel extends JPanel {
+
+    private static final long serialVersionUID = -4912657164727512361L;
+
+    private ConfigurationTableModel tableModel;
+
+    /**
+     * Creates a new FeatureTableConfigurationPanel.
+     *
+     * @param configurableTableModel
+     *            the table model of the FeatureTable to configure.
+     */
+    public FeatureTableConfigurationPanel(
+            ConfigurableFeatureTableModel configurableTableModel) {
+        this(configurableTableModel, true);
+    }
+
+    /**
+     * Creates a new FeatureTableConfigurationPanel.
+     *
+     * @param configurableTableModel
+     *            the table model of the FeatureTable to configure.
+     * @param isDoubleBuffered
+     *            a boolean, true for double-buffering, which uses additional
+     *            memory space to achieve fast, flicker-free updates
+     */
+    public FeatureTableConfigurationPanel(
+            ConfigurableFeatureTableModel configurableTableModel,
+            boolean isDoubleBuffered) {
+        super(isDoubleBuffered);
+        tableModel = new ConfigurationTableModel(configurableTableModel);
+        createGUI();
+    }
+
+    private void createGUI() {
+		setPreferredSize(new java.awt.Dimension(391, 160));
+
+		// TODO: set a fixed column width for the first column with the
+        // checkboxes
+        JTable table = new JTable(tableModel);
+		// Set the width of the "Visible" column
+		table.getColumnModel().getColumn(0).setPreferredWidth(
+				ConfigurationTableModel.getVisibilityColumn());
+
+        JScrollPane scrollPane = new JScrollPane(table);
+        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+        add(scrollPane);
+    }
+
+    /**
+     * Make current changes in configuration (visible columns and aliases)
+     * as definitive.
+     */
+    public void accept() {
+    	tableModel.acceptChanges();
+    }
+
+    /**
+     * Cancel current changes in configuration (visible columns and aliases)
+     * and return to previous status.
+     */
+    public void cancel() {
+    	tableModel.cancelChanges();
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableConfigurationPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FormattedCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FormattedCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FormattedCellRenderer.java	(revision 42196)
@@ -0,0 +1,56 @@
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.awt.Component;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.DefaultTableCellRenderer;
+import org.apache.commons.lang3.StringUtils;
+
+public class FormattedCellRenderer extends DefaultTableCellRenderer {
+
+    private static final long serialVersionUID = -162038647556726890L;
+    private ConfigurableFeatureTableModel tableModel;
+    private DecimalFormat decimalFormat;
+    private SimpleDateFormat dateFormat;
+
+    public FormattedCellRenderer(ConfigurableFeatureTableModel tableModel) {
+        this.tableModel = tableModel;
+        this.decimalFormat = (DecimalFormat) NumberFormat.getInstance(this.tableModel.getLocaleOfData());
+        this.dateFormat = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.MEDIUM, this.tableModel.getLocaleOfData());
+    }
+
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+        super.getTableCellRendererComponent(table,value, isSelected, hasFocus,row, column);
+        try {
+            if ( value instanceof Number ) {
+                String pattern = this.tableModel.getFormattingPattern(column);
+                if ( !StringUtils.isBlank(pattern) ) {
+                    this.decimalFormat.applyPattern(pattern);
+                    String formated = this.decimalFormat.format(value).toString();
+                    this.setHorizontalAlignment(SwingConstants.RIGHT);
+                    this.setText(formated);
+                    return this;
+                }
+            }
+            if ( value instanceof Date ) {
+                String pattern = this.tableModel.getFormattingPattern(column);
+                if ( !StringUtils.isBlank(pattern) ) {
+                    this.dateFormat.applyPattern(pattern);
+                    String formated = this.dateFormat.format(value).toString();
+                    this.setHorizontalAlignment(SwingConstants.RIGHT);
+                    this.setText(formated);
+                    return this;
+                }
+            }
+        } catch (Exception ex) {
+            // Do nothing, use values from default renderer
+        }
+        return this;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeaturesDataReloadException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeaturesDataReloadException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeaturesDataReloadException.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when there is an error while reloading the Features of a
+ * FeatureTable.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class FeaturesDataReloadException extends BaseRuntimeException {
+
+    private static final long serialVersionUID = -7724873225152021219L;
+
+    private static final String KEY = "features_data_reload_exception";
+
+    private static final String MESSAGE = "Error reloading the features";
+
+    /**
+     * Creates a new Exception when setting a Feature value.
+     */
+    public FeaturesDataReloadException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Creates a new Exception when setting a Feature value.
+     * 
+     * @param cause
+     *            the original Throwable
+     */
+    public FeaturesDataReloadException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeaturesDataReloadException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryCellRenderer.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureCollection}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+/**
+ * Simple renderer for cells of type {@link Geometry} .
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class GeometryCellRenderer extends DefaultTableCellRenderer {
+
+    private static final long serialVersionUID = -2470239399517077869L;
+
+    protected void setValue(Object value) {
+        if (value == null) {
+            setText("");
+        } else {
+            Geometry geometry = (Geometry) value;
+            try {
+                String geomTxt = geometry.convertToWKT();
+                setText(geomTxt);
+            } catch (GeometryOperationNotSupportedException e) {
+                throw new RuntimeException(
+                    "Error getting as WKT the geometry: " + geometry, e);
+            } catch (GeometryOperationException e) {
+                throw new RuntimeException(
+                    "Error getting as WKT the geometry: " + geometry, e);
+            }
+            setToolTipText(geometry.getGeometryType().getName());
+        }
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/GeometryCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureCellRenderer.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureCollection}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.gvsig.fmap.dal.feature.Feature;
+
+/**
+ * Renderer for cells of type {@link Feature} .
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class FeatureCellRenderer extends DefaultTableCellRenderer {
+
+    /**
+     * Generated Serial UID.
+     */
+    private static final long serialVersionUID = 3547431185199502021L;
+
+    protected void setValue(Object value) {
+        // TODO: change the current dumb implementation with something
+        // more useful, as a link or button to show the Feature details
+        // or, maybe, a subRow
+        if (value == null) {
+            setText("");
+        } else {
+            Feature feature = (Feature) value;
+            setText(feature.toString());
+        }
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SelectedFeatureTypeChangeListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SelectedFeatureTypeChangeListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SelectedFeatureTypeChangeListener.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Listener for changes in the selected {@link FeatureType}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface SelectedFeatureTypeChangeListener {
+
+    /**
+     * Called when the selected {@link FeatureType} changes.
+     * 
+     * @param featureStore
+     *            where the {@link FeatureType}s belong to
+     * @param featureType
+     *            the new selected {@link FeatureType}
+     * @throws BaseException
+     */
+    void change(FeatureStore featureStore, FeatureType featureType);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SelectedFeatureTypeChangeListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SetFeatureValueException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SetFeatureValueException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SetFeatureValueException.java	(revision 42196)
@@ -0,0 +1,124 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when there is an error while updating a Feature through a
+ * FeatureTableModel.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SetFeatureValueException extends BaseRuntimeException {
+
+    private static final String KEY = "set_feature_value_exception";
+
+    private static final String MESSAGE = "Error setting the value of the cell "
+            + "at row =  %(rowIndex) and column = %(columnIndex) "
+            + "with the value = %(value)";
+
+    private static final long serialVersionUID = -414675652211552543L;
+
+    private int rowIndex;
+
+    private int columnIndex;
+
+    private Object value;
+
+    /**
+     * Creates a new Exception when setting a Feature value.
+     * 
+     * @param rowIndex
+     *            the position of the Feature
+     * @param columnIndex
+     *            the position of the value into the Feature
+     * @param value
+     *            the value to set
+     */
+    public SetFeatureValueException(int rowIndex, int columnIndex, Object value) {
+        super(MESSAGE, KEY, serialVersionUID);
+        this.rowIndex = rowIndex;
+        this.columnIndex = columnIndex;
+        this.value = value;
+    }
+
+    /**
+     * Creates a new Exception when setting a Feature value.
+     * 
+     * @param rowIndex
+     *            the position of the Feature
+     * @param columnIndex
+     *            the position of the value into the Feature
+     * @param value
+     *            the value to set
+     * @param cause
+     *            the original Throwable
+     */
+    public SetFeatureValueException(int rowIndex, int columnIndex,
+            Object value, Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+        this.rowIndex = rowIndex;
+        this.columnIndex = columnIndex;
+        this.value = value;
+    }
+
+    /**
+     * @return the rowIndex
+     */
+    public int getRowIndex() {
+        return rowIndex;
+    }
+
+    /**
+     * @return the columnIndex
+     */
+    public int getColumnIndex() {
+        return columnIndex;
+    }
+
+    /**
+     * @return the value
+     */
+    public Object getValue() {
+        return value;
+    }
+
+    @Override
+    protected Map<String, ?> values() {
+        Map<String, Object> values = new HashMap<String, Object>(3);
+        values.put("rowIndex", getRowIndex());
+        values.put("columnIndex", getColumnIndex());
+        values.put("value", getValue());
+        return values;
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/SetFeatureValueException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellEditor.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+
+/**
+ * <p>
+ * Taken and adapted from the Article <strong>"Multi-line cells in JTable in JDK
+ * 1.4+"</strong> by Dr. Heinz M. Kabutz:
+ * </p>
+ * <p>
+ * http://www.javaspecialists.eu/archive/Issue106.html
+ * </p>
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class TextAreaCellEditor extends DefaultCellEditor {
+
+    private static final long serialVersionUID = -5614806192749314509L;
+
+    private final JTextArea textArea;
+
+    @SuppressWarnings("serial")
+    public TextAreaCellEditor() {
+        super(new JTextField());
+        textArea = new JTextArea();
+        textArea.setWrapStyleWord(true);
+        textArea.setLineWrap(true);
+        JScrollPane scrollPane = new JScrollPane(textArea);
+        scrollPane.setBorder(null);
+        editorComponent = scrollPane;
+
+        delegate = new DefaultCellEditor.EditorDelegate() {
+            public void setValue(Object value) {
+                textArea.setText((value != null) ? value.toString() : "");
+            }
+
+            public Object getCellEditorValue() {
+                return textArea.getText();
+            }
+        };
+    }
+    
+    public JTextArea getTextArea() {
+        return textArea;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/TextAreaCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableModel.java	(revision 42196)
@@ -0,0 +1,674 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureCollection}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing.table;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.AbstractTableModel;
+import org.gvsig.editing.EditingNotification;
+import org.gvsig.editing.EditingNotificationManager;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.ComplexNotification;
+import org.gvsig.tools.observer.ComplexObserver;
+import org.gvsig.tools.observer.Observable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * TableModel to access data of Features.
+ * 
+ * This table model can't handle a FeatureSet with more than Integer.MAX_VALUE
+ * elements. In that case, only the first Integer.MAX_VALUE elements will be
+ * shown.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class FeatureTableModel extends AbstractTableModel implements ComplexObserver {
+
+	
+	private static final Logger logger = LoggerFactory
+			.getLogger(FeatureTableModel.class);
+	
+    private static final long serialVersionUID = -2488157521902851301L;
+
+    private FeaturePagingHelper helper;
+
+    /** Used to know if a modification in the FeatureStore is created by us. */
+    private EditableFeature editableFeature;
+
+    /**
+     * Constructs a TableModel from the features of a FeatureStore, with the
+     * default page size.
+     * 
+     * @param featureStore
+     *            to extract the features from
+     * @param featureQuery
+     *            the query to get the features from the store
+     * @throws BaseException
+     *             if there is an error reading data from the FeatureStore
+     */
+    public FeatureTableModel(FeatureStore featureStore,
+        FeatureQuery featureQuery) throws BaseException {
+        this(featureStore, featureQuery, FeaturePagingHelper.DEFAULT_PAGE_SIZE);
+    }
+
+    /**
+     * Constructs a TableModel from the features of a FeatureStore, with the
+     * default page size.
+     * 
+     * @param featureStore
+     *            to extract the features from
+     * @param featureQuery
+     *            the query to get the features from the store
+     * @param pageSize
+     *            the number of elements per page data
+     * @throws BaseException
+     *             if there is an error reading data from the FeatureStore
+     */
+    public FeatureTableModel(FeatureStore featureStore,
+        FeatureQuery featureQuery, int pageSize) throws BaseException {
+        this(DALLocator.getDataManager().createFeaturePagingHelper(
+            featureStore, featureQuery, pageSize));
+    }
+
+    /**
+     * Constructs a TableModel from a FeatureCollection and a Paging helper.
+     * 
+     * @param featureCollection
+     *            to extract data from
+     * @param helper
+     *            the paging helper
+     * @throws DataException
+     *             if there is an error reading data from the FeatureStore
+     */
+    protected FeatureTableModel(FeaturePagingHelper helper) {
+        this.helper = helper;
+        initialize();
+    }
+
+    public int getColumnCount() {
+        // Return the number of fields of the Features
+        FeatureType featureType = getFeatureType();
+        return featureType.size();
+    }
+
+    public int getRowCount() {
+        // Return the total size of the collection
+        // If the size is bigger than INTEGER.MAX_VALUE, return that instead
+    	try {
+	        long totalSize = getHelper().getTotalSize();
+	        if (totalSize > Integer.MAX_VALUE) {
+	            return Integer.MAX_VALUE;
+	        } else {
+	            return (int) totalSize;
+	        }
+    	} catch (ConcurrentDataModificationException e) {
+			logger.debug("Error while getting the total size of the set", e);
+			return 0;
+		}
+    }
+
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        // Get the Feature at row "rowIndex", and return the value of the
+        // attribute at "columnIndex"
+        Feature feature = getFeatureAt(rowIndex);
+        return feature == null ? null : getFeatureValue(feature, columnIndex);
+    }
+
+    /**
+     * Returns the value for a row position.
+     * 
+     * @param rowIndex
+     *            the row position
+     * @return the Feature
+     */
+    public Feature getFeatureAt(int rowIndex) {
+        try {
+            return getHelper().getFeatureAt(rowIndex);
+        } catch (BaseException ex) {
+            throw new GetFeatureAtException(rowIndex, ex);
+        }
+    }
+
+    public Class<?> getColumnClass(int columnIndex) {
+        // Return the class of the FeatureAttributeDescriptor for the value
+        FeatureAttributeDescriptor attributeDesc =
+            internalGetFeatureDescriptorForColumn(columnIndex);
+        if (attributeDesc == null) {
+        	return super.getColumnClass(columnIndex);
+        }
+        Class<?> clazz = attributeDesc.getObjectClass();
+        return (clazz == null ? super.getColumnClass(columnIndex) : clazz);
+    }
+
+    public String getColumnName(int column) {
+        // Return the Feature attribute name
+        FeatureAttributeDescriptor attributeDesc =
+            internalGetFeatureDescriptorForColumn(column);
+        return attributeDesc.getName();
+    }
+
+    @Override
+    public boolean isCellEditable(int rowIndex, int columnIndex) {
+        if (getFeatureStore().isEditing()) {
+            FeatureAttributeDescriptor attributeDesc =
+                internalGetFeatureDescriptorForColumn(columnIndex);
+            return !attributeDesc.isReadOnly();
+        }
+
+        return false;
+    }
+
+    @Override
+    public void setValueAt(Object value, int rowIndex, int columnIndex) {
+        // Get the feature at rowIndex
+        Feature feature = getFeatureAt(rowIndex);
+        // Only set the value if the feature exists
+        if (feature != null) {
+            // We only need to update if the value to set is not equal to the
+            // current value
+            Object currentValue = getFeatureValue(feature, columnIndex);
+            if (value != currentValue
+                && (value == null || !value.equals(currentValue))) {
+                try {
+                    // Store the editable feature to ignore the related store
+                    // change notification
+                    editableFeature =
+                        setFeatureValue(feature, columnIndex, value);
+                    EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+                    EditingNotification notification = editingNotificationManager.notifyObservers(
+                            this, 
+                            EditingNotification.BEFORE_UPDATE_FEATURE, 
+                            null,
+                            this.getHelper().getFeatureStore(),
+                            editableFeature);
+                    if( notification.isCanceled() ) {
+                        return;
+                    }
+                    if( notification.shouldValidateTheFeature() ) {
+                        if ( !editingNotificationManager.validateFeature(feature) ) {
+                            return;
+                        }
+                    }                    
+                    this.getHelper().update(editableFeature);
+                    // We'll have already received the event, so we can forget
+                    // about it
+                    getHelper().reloadCurrentPage();
+                    fireTableCellUpdated(rowIndex, columnIndex);
+                    
+                    editingNotificationManager.notifyObservers(
+                            this, 
+                            EditingNotification.AFTER_UPDATE_FEATURE, 
+                            null,
+                            this.getHelper().getFeatureStore(),
+                            editableFeature);
+                    editableFeature = null;
+                    
+                } catch (BaseException ex) {
+                    throw new SetFeatureValueException(rowIndex, columnIndex,
+                        value, ex);
+                } finally {
+                    // Just in case
+                    editableFeature = null;
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a reference to the Paging Helper used to load the data from the
+     * DataStore.
+     * 
+     * @return the paging helper
+     */
+    public FeaturePagingHelper getHelper() {
+        return helper;
+    }
+
+    /**
+     * Sets the FeatureType to show in the table. Used for FeatureStores with
+     * many simultaneous FeatureTypes supported. Will cause a reload of the
+     * current data.
+     * 
+     * @param featureType
+     *            the FeatureType of the Features
+     * @throws DataException
+     *             if there is an error loading the data
+     */
+    public void setFeatureType(FeatureType featureType) {
+        getFeatureQuery().setFeatureType(featureType);
+        reloadFeatures();
+        fireTableStructureChanged();
+    }
+
+    /**
+     * Sets that the selected Features get returned first.
+     */
+    public void setSelectionUp(boolean selectionUp) {
+        getHelper().setSelectionUp(selectionUp);
+        fireTableChanged(new TableModelEvent(this, 0, getRowCount() - 1));
+    }
+
+    private class DelayAction extends Timer implements ActionListener, Runnable {
+        private static final int STATE_NONE = 0;
+        private static final int STATE_NEED_RELOADALL = 1;
+        private static final int STATE_NEED_RELOAD_IF_FEATURE_COUNT_CHANGED = 2;
+        private static final int STATE_NEED_RELOAD_IF_FEATURE_UPDATED = 4;
+        private static final int STATE_NEED_RELOAD_IF_FEATURE_TYPE_CHANGED = 8;
+        private static final int STATE_NEED_RELOAD_FEATURE_TYPE = 16;
+        private static final int STATE_NEED_SELECTION_UP = 32;
+        
+        private int state = STATE_NONE;
+        private Feature feature;
+        private FeatureType featureType;
+        private boolean isSelecctionUp;
+        
+        public DelayAction() {
+            super(1000,null);
+            this.setRepeats(false);
+            this.reset();
+            this.addActionListener(this);
+        }
+
+        public void reset() {
+            this.state = STATE_NONE;
+            this.isSelecctionUp = false;
+            this.feature = null;
+            this.featureType = null;
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            this.run();
+        }
+        
+        public void run() {
+            if( !SwingUtilities.isEventDispatchThread() ) {
+                SwingUtilities.invokeLater(this);
+                return;
+            }
+            this.stop();
+            logger.info("DelayAction.run["+this.state+"] begin");
+            switch(this.state) {
+            case STATE_NEED_RELOADALL:
+                reloadAll();
+                break;
+            case STATE_NEED_RELOAD_IF_FEATURE_COUNT_CHANGED:
+                reloadIfFeatureCountChanged(feature);
+                break;
+            case STATE_NEED_RELOAD_IF_FEATURE_UPDATED:
+                reloadIfFeatureUpdated(feature);
+                break;
+            case STATE_NEED_RELOAD_IF_FEATURE_TYPE_CHANGED:
+                reloadIfTypeChanged(featureType);
+                break;
+            case STATE_NEED_RELOAD_FEATURE_TYPE:
+                reloadFeatureType();
+                updatePaginHelperWithHiddenColums();
+                break;
+            case STATE_NEED_SELECTION_UP:
+            case STATE_NONE:
+            default:
+                break;
+            }
+            if( isSelecctionUp ) {
+                getHelper().setSelectionUp(true);
+            }
+            this.reset();
+            logger.info("DelayAction.run["+this.state+"] end");
+        }
+        
+        public void nextState(int nextstate) {
+            this.nextState(nextstate, null, null);
+        }
+        
+        public void nextState(int nextstate, Feature feature) {
+            this.nextState(nextstate, feature, null);
+        }
+        
+        public void nextState(int nextstate, FeatureType featureType) {
+            this.nextState(nextstate, null, featureType);
+        }
+        
+        public void nextState(int nextstate, Feature feature, FeatureType featureType) {
+            this.feature = feature;
+            this.featureType = featureType;
+            switch(nextstate) {
+            case STATE_NEED_RELOADALL:
+            case STATE_NEED_RELOAD_IF_FEATURE_COUNT_CHANGED:
+            case STATE_NEED_RELOAD_IF_FEATURE_UPDATED:
+                switch(this.state) {
+                case STATE_NEED_RELOADALL:
+                case STATE_NEED_RELOAD_IF_FEATURE_COUNT_CHANGED:
+                case STATE_NEED_RELOAD_IF_FEATURE_UPDATED:
+                    this.state = STATE_NEED_RELOADALL;
+                    break;
+                case STATE_NEED_RELOAD_IF_FEATURE_TYPE_CHANGED:
+                case STATE_NEED_RELOAD_FEATURE_TYPE:
+                    this.state = STATE_NEED_RELOAD_FEATURE_TYPE;
+                    break;                    
+                case STATE_NEED_SELECTION_UP:
+                    this.state = nextstate;
+                    this.isSelecctionUp = true;
+                    break;
+                case STATE_NONE:
+                default:
+                    this.state = nextstate;
+                    break;
+                }
+                break;
+            case STATE_NEED_RELOAD_IF_FEATURE_TYPE_CHANGED:
+            case STATE_NEED_RELOAD_FEATURE_TYPE:
+                switch(this.state) {
+                case STATE_NEED_RELOADALL:
+                case STATE_NEED_RELOAD_IF_FEATURE_COUNT_CHANGED:
+                case STATE_NEED_RELOAD_IF_FEATURE_UPDATED:
+                case STATE_NEED_RELOAD_IF_FEATURE_TYPE_CHANGED:
+                case STATE_NEED_RELOAD_FEATURE_TYPE:
+                    this.state = STATE_NEED_RELOAD_FEATURE_TYPE;
+                    break;                    
+                case STATE_NEED_SELECTION_UP:
+                    this.state = nextstate;
+                    this.isSelecctionUp = true;
+                    break;
+                case STATE_NONE:
+                default:
+                    this.state = nextstate;
+                    break;
+                }
+                break;
+            case STATE_NEED_SELECTION_UP:
+                switch(this.state) {
+                case STATE_NEED_RELOADALL:
+                case STATE_NEED_RELOAD_IF_FEATURE_COUNT_CHANGED:
+                case STATE_NEED_RELOAD_IF_FEATURE_UPDATED:
+                case STATE_NEED_RELOAD_IF_FEATURE_TYPE_CHANGED:
+                case STATE_NEED_RELOAD_FEATURE_TYPE:
+                case STATE_NEED_SELECTION_UP:
+                    this.isSelecctionUp = true;
+                    break;
+                case STATE_NONE:
+                default:
+                    this.state = nextstate;
+                    this.isSelecctionUp = true;
+                    break;
+                }
+                break;
+            case STATE_NONE:
+            default:
+                this.state = STATE_NONE;
+                break;
+            }
+            if( this.state != STATE_NONE ) {
+                this.start();
+            }
+        }
+        
+    }
+    
+    private DelayAction delayAction = new DelayAction();
+            
+    public void update(final Observable observable, final Object notification) {
+        if (notification instanceof ComplexNotification) {
+            // A lot of things might have happened in the store, so don't
+            // bother looking into each notification.
+            this.delayAction.nextState(DelayAction.STATE_NEED_RELOADALL);
+//            reloadAll();
+        } else if (observable.equals(getFeatureStore())
+                && notification instanceof FeatureStoreNotification) {
+            FeatureStoreNotification fsNotification
+                    = (FeatureStoreNotification) notification;
+            String type = fsNotification.getType();
+
+            // If there are new, updated or deleted features
+            // reload the table data
+            if (FeatureStoreNotification.AFTER_DELETE.equals(type)
+                    || FeatureStoreNotification.AFTER_INSERT.equals(type)) {
+//                reloadIfFeatureCountChanged(fsNotification.getFeature());
+                this.delayAction.nextState(DelayAction.STATE_NEED_RELOAD_IF_FEATURE_COUNT_CHANGED, fsNotification.getFeature());
+
+            } else if (FeatureStoreNotification.AFTER_UPDATE.equals(type)) {
+//                reloadIfFeatureUpdated(fsNotification.getFeature());
+                this.delayAction.nextState(DelayAction.STATE_NEED_RELOAD_IF_FEATURE_UPDATED, fsNotification.getFeature());
+
+            } else if (FeatureStoreNotification.AFTER_UPDATE_TYPE.equals(type)) {
+//                reloadIfTypeChanged(fsNotification.getFeatureType());
+                this.delayAction.nextState(DelayAction.STATE_NEED_RELOAD_IF_FEATURE_TYPE_CHANGED, fsNotification.getFeatureType());
+
+            } else if (FeatureStoreNotification.TRANSFORM_CHANGE.equals(type)
+                    || FeatureStoreNotification.AFTER_UNDO.equals(type)
+                    || FeatureStoreNotification.AFTER_REDO.equals(type)
+                    || FeatureStoreNotification.AFTER_REFRESH.equals(type))  {
+//                reloadAll();
+                this.delayAction.nextState(DelayAction.STATE_NEED_RELOADALL);
+
+            } else if (FeatureStoreNotification.AFTER_FINISHEDITING.equals(type)
+                    || FeatureStoreNotification.AFTER_STARTEDITING.equals(type)
+                    || FeatureStoreNotification.AFTER_CANCELEDITING.equals(type)) {
+                /*
+                No tengo nada claro por que es necesario llamar al reloadFeatureType
+                pero si no se incluye hay problemas si durante la edicion se a�aden
+                campos a la tabla. Sin esto, al cerrar la edicion, los campos a�adidos 
+                desaparecen de la tabla aunque estan en el fichero.
+                Ver ticket #2434 https://devel.gvsig.org/redmine/issues/2434
+                */
+//                reloadFeatureType();
+//                updatePaginHelperWithHiddenColums();
+                this.delayAction.nextState(DelayAction.STATE_NEED_RELOAD_FEATURE_TYPE, fsNotification.getFeatureType());
+            } else if (FeatureStoreNotification.SELECTION_CHANGE.equals(type)) {
+                if( this.getHelper().isSelectionUp() ) {
+                    getHelper().setSelectionUp(true);
+                    this.delayAction.nextState(DelayAction.STATE_NEED_SELECTION_UP);
+                }
+            }
+        }
+    }
+
+    protected void updatePaginHelperWithHiddenColums() {
+        FeatureQuery query = this.getHelper().getFeatureQuery();
+        if (this.getHelper().getFeatureStore().isEditing()) {
+            if (query.hasConstantsAttributeNames()) {
+                query.clearConstantsAttributeNames();
+            }
+        } else {
+            query.setConstantsAttributeNames(this.getHiddenColumnNames());
+        }
+        try {
+            this.getHelper().reload();
+        } catch (BaseException ex) {
+            logger.warn("Can't reload paging-helper.", ex);
+        }
+    }
+
+    protected String[] getHiddenColumnNames() {
+        return null;
+    }
+    
+    /**
+     * Returns the FeatureStore of the Collection.
+     * 
+     * @return the FeatureStore
+     */
+    public FeatureStore getFeatureStore() {
+        return getHelper().getFeatureStore();
+    }
+
+    /**
+     * Returns the descriptor of a Feature attribute for a table column.
+     * 
+     * @param columnIndex
+     *            the column index
+     */
+    public FeatureAttributeDescriptor getDescriptorForColumn(int columnIndex) {
+        return internalGetFeatureDescriptorForColumn(columnIndex);
+    }
+
+    /**
+     * @param columnIndex
+     * @return
+     */
+	protected FeatureAttributeDescriptor internalGetFeatureDescriptorForColumn(
+			int columnIndex) {
+		FeatureType featureType = getFeatureType();
+		return featureType == null ? null : featureType
+				.getAttributeDescriptor(columnIndex);
+	}
+
+    /**
+     * Initialize the TableModel
+     */
+    protected void initialize() {
+        // Add as observable to the FeatureStore, to detect data and selection
+        // changes
+        helper.getFeatureStore().addObserver(this);
+    }
+
+    /**
+     * Returns the value of a Feature attribute, at the given position.
+     * 
+     * @param feature
+     *            the feature to get the value from
+     * @param columnIndex
+     *            the Feature attribute position
+     * @return the value
+     */
+    protected Object getFeatureValue(Feature feature, int columnIndex) {
+        return feature.get(columnIndex);
+    }
+
+    /**
+     * Sets the value of an Feature attribute at the given position.
+     * 
+     * @param feature
+     *            the feature to update
+     * @param columnIndex
+     *            the attribute position
+     * @param value
+     *            the value to set
+     * @throws IsNotFeatureSettingException
+     *             if there is an error setting the value
+     */
+    protected EditableFeature setFeatureValue(Feature feature, int columnIndex,
+        Object value) {
+        EditableFeature editableFeature = feature.getEditable();
+        editableFeature.set(columnIndex, value);
+        return editableFeature;
+    }
+
+    /**
+     * Returns the FeatureQuery used to get the Features.
+     * 
+     * @return the FeatureQuery
+     */
+    public FeatureQuery getFeatureQuery() {
+        return getHelper().getFeatureQuery();
+    }
+
+    /**
+     * Returns the type of the features.
+     */
+    protected FeatureType getFeatureType() {
+        return getHelper().getFeatureType();
+    }
+
+    /**
+     * Reloads the table data if a feature has been changed, not through the
+     * table.
+     */
+    private void reloadIfFeatureCountChanged(Feature feature) {
+        // Is any data is changed in the FeatureStore, notify the model
+        // listeners. Ignore the case where the updated feature is
+        // changed through us.
+        if (editableFeature == null || !editableFeature.equals(feature)) {
+            reloadFeatures();            
+            fireTableDataChanged();
+        }
+    }
+    
+    private void reloadIfFeatureUpdated(Feature feature) {
+        // Is any data is changed in the FeatureStore, notify the model
+        // listeners. Ignore the case where the updated feature is
+        // changed through us.
+        if (editableFeature == null || !editableFeature.equals(feature)) {
+            reloadFeatures();
+            fireTableChanged(new TableModelEvent(this, 0, getRowCount()));            
+        }
+    }
+
+    /**
+     * Reloads data and structure if the {@link FeatureType} of the features
+     * being shown has changed.
+     */
+    private void reloadIfTypeChanged(FeatureType updatedType) {
+        // If the updated featured type is the one currently being
+        // shown, reload the table.
+        if (updatedType != null
+            && updatedType.getId().equals(getFeatureType().getId())) {
+            setFeatureType(updatedType);
+        }
+    }
+
+    private void reloadAll() {
+    	reloadFeatureType();
+    }
+
+    private void reloadFeatureType() {
+        try {
+            setFeatureType(getHelper().getFeatureStore().getFeatureType(
+                getHelper().getFeatureType().getId()));
+        } catch (DataException e) {
+            throw new FeaturesDataReloadException(e);
+        }
+    }
+
+    /**
+     * Reloads the features shown on the table.
+     */
+    private void reloadFeatures() {
+        try {
+            getHelper().reload();
+        } catch (BaseException ex) {
+            throw new FeaturesDataReloadException(ex);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/FeatureTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTypesTablePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTypesTablePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTypesTablePanel.java	(revision 42196)
@@ -0,0 +1,223 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.ConfigurableFeatureTableModel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureStoreModel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTypeList;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.SelectedFeatureTypeChangeListener;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Panel to show a table of Features. It is able to take into account the
+ * availability of many FeatureTypes, and if it is the case, allows the user to
+ * select the {@link FeatureType} of the {@link Feature}s to show.
+ * 
+ * @author 2005- Vicente Caballero
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class FeatureTypesTablePanel extends JPanel implements
+    SelectedFeatureTypeChangeListener {
+
+    private static final long serialVersionUID = 5857146295213412304L;
+    private static final Logger LOG = LoggerFactory
+        .getLogger(FeatureTypesTablePanel.class);
+    private FeatureTablePanel tablePanel;
+    private FeatureTypeList typesControl;
+    private JSplitPane jSplitPane = null;
+    private final FeatureStoreModel model;
+
+    /**
+     * Constructs a Panel to show a table with the features of a FeatureStore.
+     * 
+     * @param featureStore
+     *            to extract the features from
+     * @throws BaseException
+     *             if there is an error reading data from the FeatureStore
+     */
+    public FeatureTypesTablePanel(FeatureStore featureStore)
+        throws BaseException {
+        this(featureStore, true);
+    }
+
+    /**
+     * Constructs a Panel to show a table with the features of a FeatureStore.
+     * 
+     * @param featureStore
+     *            to extract the features from
+     * @param isDoubleBuffered
+     *            a boolean, true for double-buffering, which uses additional
+     *            memory space to achieve fast, flicker-free updates
+     * @throws BaseException
+     *             if there is an error reading data from the FeatureStore
+     */
+    public FeatureTypesTablePanel(FeatureStore featureStore,
+        boolean isDoubleBuffered) throws BaseException {
+        this(featureStore, null, isDoubleBuffered);
+    }
+
+    /**
+     * @throws BaseException
+     * 
+     */
+    public FeatureTypesTablePanel(FeatureStore featureStore,
+        FeatureQuery featureQuery) throws BaseException {
+        this(featureStore, featureQuery, true);
+    }
+
+    /**
+     * @param isDoubleBuffered
+     * @throws BaseException
+     */
+    public FeatureTypesTablePanel(FeatureStore featureStore,
+        FeatureQuery featureQuery, boolean isDoubleBuffered)
+        throws BaseException {
+        this(new FeatureStoreModel(featureStore, featureQuery),
+            isDoubleBuffered);
+    }
+
+    public FeatureTypesTablePanel(FeatureStoreModel model) throws DataException {
+        this(model, true);
+    }
+
+    public FeatureTypesTablePanel(FeatureStoreModel model,
+        boolean isDoubleBuffered) throws DataException {
+        super(isDoubleBuffered);
+        this.model = model;
+        typesControl =
+            new FeatureTypeList(model.getFeatureStore(),
+                model.getFeatureQuery());
+        this.initializeUI();
+        // Add a listener to change the selection
+        typesControl.addSelectedFeatureTypeChangeListener(this);
+    }
+
+    private boolean hasManyFeatureTypes() throws DataException {
+        return typesControl.getFeatureTypesSize() > 1;
+    }
+
+    /**
+     * @return
+     * @see org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTablePanel#createConfigurationPanel()
+     */
+    public JPanel createConfigurationPanel() {
+        return tablePanel.createConfigurationPanel();
+    }
+
+    public void change(FeatureStore featureStore, FeatureType featureType) {
+        if (featureType != null) {
+            showFeatureTypeData(featureType);
+        }
+    }
+
+    private void showFeatureTypeData(FeatureType featureType) {
+        showFeatureTypeData(featureType.getId());
+    }
+
+    private void showFeatureTypeData(String typeId) {
+        this.model.setCurrentFeatureTypeId(typeId);
+        try {
+            tablePanel =
+                new FeatureTablePanel(this.model.getCurrentFeatureTableModel());
+        } catch (BaseException e) {
+            throw new RuntimeException(
+                "Error creating a new FeatureTablePanel to show "
+                    + "the selected FeatureType with id: " + typeId, e);
+        }
+        getJSplitPane().setRightComponent(tablePanel);
+    }
+
+    public FeatureTablePanel getTablePanel() {
+        return tablePanel;
+    }
+
+    public FeatureTypeList getTypesControl() {
+        return typesControl;
+    }
+
+    /**
+     * Sets that the selected Features to be viewed first.
+     */
+    public void setSelectionUp(boolean selectionUp) {
+        getTablePanel().setSelectionUp(selectionUp);
+    }
+
+    /**
+     * Returns the internal Table Model for the Features of the FeatureStore.
+     * 
+     * @return the internal Table Model
+     */
+    protected ConfigurableFeatureTableModel getTableModel() {
+        return getTablePanel().getTableModel();
+    }
+
+    /**
+     * This method initializes jPanel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private void initializeUI() {
+        this.setLayout(new BorderLayout());
+        this.setSize(new Dimension(331, 251));
+        this.add(getJSplitPane(), BorderLayout.CENTER);
+        showFeatureTypeData(model.getCurrentFeatureTypeId());
+    }
+
+    /**
+     * This method initializes jSplitPane
+     * 
+     * @return javax.swing.JSplitPane
+     */
+    private JSplitPane getJSplitPane() {
+        if (jSplitPane == null) {
+            jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+            jSplitPane.setLeftComponent(getTypesControl());
+            jSplitPane.setOneTouchExpandable(true);
+            try {
+                if (hasManyFeatureTypes()) {
+                    jSplitPane.setDividerLocation(0.2d);
+                } else {
+                    jSplitPane.setDividerLocation(0.0d);
+                }
+            } catch (DataException ex) {
+                LOG.error("Error getting the number of feature types", ex);
+            }
+        }
+        return jSplitPane;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTypesTablePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/SelectionChangeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/SelectionChangeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/SelectionChangeException.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2008 {DiSiD Technologies}  {{Task}}
+*/
+package org.gvsig.fmap.mapcontrol.dal.feature.swing;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when there is an error while changing the selection in the
+ * table.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SelectionChangeException extends BaseRuntimeException {
+
+    private static final long serialVersionUID = -291196709262836214L;
+
+    private static final String KEY = "table_selection_change_exception";
+
+    private static final String MESSAGE = "Error while changing the selection on the list of Features";
+
+    /**
+     * Constructs a new TableSelectionChangeException with no parameters.
+     */
+    public SelectionChangeException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Constructs a new TableSelectionChangeException with the original cause.
+     */
+    public SelectionChangeException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/SelectionChangeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureSelectionModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureSelectionModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureSelectionModel.java	(revision 42196)
@@ -0,0 +1,431 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing;
+
+import javax.swing.ListSelectionModel;
+import javax.swing.event.EventListenerList;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableModel;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author 2010- C�sar Ordi�ana - gvSIG team
+ */
+public class FeatureSelectionModel implements ListSelectionModel, Observer {
+    private static Logger LOG = 
+        LoggerFactory.getLogger(FeatureSelectionModel.class);
+    
+	protected EventListenerList listenerList = new EventListenerList();
+
+	private final FeatureTableModel featureTableModel;
+
+	private int selectionMode = SINGLE_INTERVAL_SELECTION;
+
+	private boolean isAdjusting = false;
+
+	private int anchor = -1;
+
+	private int lead = -1;
+	
+	private int currentFirst = -1;
+	private int currentLast = -1;
+
+	/**
+	 * Creates a new {@link FeatureSelectionModel} with a
+	 * {@link FeatureTableModel} used to get the {@link Feature}s by position in
+	 * the table.
+	 * 
+	 * @param featureTableModel
+	 *            to get Features from
+	 * @throws DataException
+	 *             if there is an error getting the store selection
+	 */
+	public FeatureSelectionModel(FeatureTableModel featureTableModel)
+			throws DataException {
+		this.featureTableModel = featureTableModel;
+		this.featureTableModel.getFeatureStore().addObserver(this);
+	}
+
+	public int getAnchorSelectionIndex() {
+		return anchor;
+	}
+
+	public int getLeadSelectionIndex() {
+		return lead;
+	}
+
+	public int getMaxSelectionIndex() {
+	    
+	    int resp = this.getSelectionIndex(true);
+	    return resp;
+	    /*
+	     * 
+	     * The call to "featureTableModel.getFeatureAt(i)"
+	     * causes a lot of reloadPage all over
+	     * 
+		FeatureSelection selection = getFeatureSelection();
+		try {
+			if (!selection.isEmpty()) {
+				for (int i = featureTableModel.getRowCount() - 1; i >= 0; i--) {
+					if (selection.isSelected(featureTableModel.getFeatureAt(i))) {
+						return i;
+					}
+				}
+			}
+		} catch (DataException e) {
+			throw new SelectionChangeException(e);
+		}
+		return -1;
+		*/
+	}
+
+	public int getMinSelectionIndex() {
+
+	    int resp = this.getSelectionIndex(false);
+	    return resp;
+	    
+	    /*
+	     * 
+         * The call to "featureTableModel.getFeatureAt(i)"
+         * causes a lot of reloadPage all over
+	     * 
+		try {
+
+		    int ii = 0;
+
+		    FeatureSelection selection = this.getFeatureSelection();
+            for (int i = 0; i < featureTableModel.getRowCount(); i++) {
+                if (selection.isSelected(featureTableModel.getFeatureAt(i))) {
+                    ii = i;
+                }
+            }
+		} catch (Exception e) {
+			throw new SelectionChangeException(e);
+		}
+		*/
+		
+	}
+
+	public void insertIndexInterval(int index, int length, boolean before) {
+		// Nothing to do
+	}
+
+	public void removeIndexInterval(int index0, int index1) {
+		// Nothing to do
+	}
+
+	public void setAnchorSelectionIndex(int index) {
+		this.anchor = index;
+	}
+
+	public void setLeadSelectionIndex(int index) {
+		this.lead = index;
+	}
+
+	public void addSelectionInterval(int index0, int index1) {
+		doWithSelection(new FeatureSelectionOperation() {
+
+			public void doWithSelection(FeatureSelection selection, int first,
+					int last) throws DataException {
+				for (int i = first; i <= last; i++) {
+					Feature feature = getFeature(i);
+					if (!selection.isSelected(feature)) {
+						selection.select(feature);
+					}
+				}
+			}
+
+		}, index0, index1, true);
+	}
+
+	public void setSelectionInterval(int index0, int index1) {
+		doWithSelection(new FeatureSelectionOperation() {
+
+			public void doWithSelection(FeatureSelection selection, int first,
+					int last) throws DataException {
+				selection.deselectAll();
+				for (int i = first; i <= last; i++) {
+					Feature feature = getFeature(i);
+					selection.select(feature);
+				}
+			}
+
+		}, index0, index1, true);
+	}
+
+	public void removeSelectionInterval(int index0, int index1) {
+		doWithSelection(new FeatureSelectionOperation() {
+
+			public void doWithSelection(FeatureSelection selection, int first,
+					int last) throws DataException {
+				for (int i = first; i <= last; i++) {
+					Feature feature = getFeature(i);
+					if (selection.isSelected(feature)) {
+						selection.deselect(feature);
+					}
+				}
+			}
+
+		}, index0, index1, false);
+	}
+
+	public void clearSelection() {
+		try {
+			getFeatureSelection().deselectAll();
+		} catch (DataException e) {
+			throw new SelectionChangeException(e);
+		}
+	}
+
+	public boolean isSelectedIndex(int index) {
+		if (index == -1) {
+			return false;
+		}
+		Feature feature = featureTableModel.getFeatureAt(index);
+		return getFeatureSelection().isSelected(feature);
+	}
+
+	public boolean isSelectionEmpty() {
+		try {
+			return getFeatureSelection().isEmpty();
+		} catch (DataException ex) {
+			throw new SelectionChangeException(ex);
+		}
+	}
+
+	public boolean getValueIsAdjusting() {
+		return isAdjusting;
+	}
+
+	public void setValueIsAdjusting(boolean valueIsAdjusting) {
+		if (this.isAdjusting != valueIsAdjusting) {
+			this.isAdjusting = valueIsAdjusting;
+			if (this.isAdjusting) {
+				getFeatureSelection().beginComplexNotification();
+			} else {
+				getFeatureSelection().endComplexNotification();
+			}
+		}
+	}
+
+	public int getSelectionMode() {
+		return selectionMode;
+	}
+
+	public void setSelectionMode(int selectionMode) {
+		this.selectionMode = selectionMode;
+	}
+
+	public void addListSelectionListener(ListSelectionListener listener) {
+		listenerList.add(ListSelectionListener.class, listener);
+	}
+
+	public void removeListSelectionListener(ListSelectionListener listener) {
+		listenerList.remove(ListSelectionListener.class, listener);
+	}
+
+	public void update(Observable observable, Object notification) {
+		if (notification instanceof FeatureStoreNotification) {
+			FeatureStoreNotification fnotification =
+					(FeatureStoreNotification) notification;
+			if (!fnotification.getSource().equals(getFeatureStore())) {
+				return;
+			}
+			if (FeatureStoreNotification.SELECTION_CHANGE.equals(fnotification.getType())) {
+				try{
+				    fireValueChanged(-1, -1, false);
+				}catch(ConcurrentDataModificationException e){
+				    LOG.warn("The store has been updated and the selection can not be refreshed", e);
+				}
+			}
+		}
+	}
+
+	private FeatureSelection getFeatureSelection() {
+		try {
+			return (FeatureSelection) getFeatureStore().getSelection();
+		} catch (DataException ex) {
+			throw new SelectionChangeException(ex);
+		}
+	}
+
+	/**
+	 * @param operation
+	 * @param index0
+	 * @param index1
+	 */
+	private void doWithSelection(FeatureSelectionOperation operation,
+			int index0, int index1, boolean select) {
+		// Set the anchor and lead
+		anchor = index0;
+		lead = index1;
+
+		// As index0 <= index1 is no guaranteed, calculate the first and second
+		// values
+		int first = (index0 <= index1) ? index0 : index1;
+		int last = (index0 <= index1) ? index1 : index0;
+		
+		//If the new selection is not updated don't continue
+		if ((currentFirst == first) && (currentLast == last)){
+		    return;
+		}
+		currentFirst = first;
+		currentLast = last;
+
+		FeatureSelection selection = getFeatureSelection();
+
+		// Perform the selection operation into a complex notification
+		selection.beginComplexNotification();
+		try {
+			// Is a full select or deselect
+			if (first == 00 && last == featureTableModel.getRowCount() - 1) {
+				if (select) {
+					selection.selectAll();
+				} else {
+					selection.deselectAll();
+				}
+			} else {
+				operation.doWithSelection(selection, first, last);
+			}
+		} catch (DataException e) {
+			throw new SelectionChangeException(e);
+		} finally {
+			selection.endComplexNotification();
+		}
+
+		fireValueChanged(first, last, isAdjusting);
+	}
+
+	/**
+	 * Returns a Feature by table row position.
+	 */
+	private Feature getFeature(int index) {
+		return featureTableModel.getFeatureAt(index);
+	}
+
+	/**
+	 * Returns the FeatureStore.
+	 */
+	private FeatureStore getFeatureStore() {
+		return featureTableModel.getFeatureStore();
+	}
+
+	/**
+	 * @param firstIndex
+	 *            the first index in the interval
+	 * @param lastIndex
+	 *            the last index in the interval
+	 * @param isAdjusting
+	 *            true if this is the final change in a series of adjustments
+	 * @see EventListenerList
+	 */
+	protected void fireValueChanged(int firstIndex, int lastIndex,
+			boolean isAdjusting) {
+		Object[] listeners = listenerList.getListenerList();
+		ListSelectionEvent e = null;
+
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == ListSelectionListener.class) {
+				if (e == null) {
+					e =
+							new ListSelectionEvent(this, firstIndex, lastIndex,
+									isAdjusting);
+				}
+				((ListSelectionListener) listeners[i + 1]).valueChanged(e);
+			}
+		}
+	}
+
+	private interface FeatureSelectionOperation {
+		void doWithSelection(FeatureSelection selection, int first, int last)
+				throws DataException;
+	}
+	
+	/**
+	 * 
+	 * Return the index of the the first (last) selected feature 
+	 * 
+	 * @param last whether to return the index of the last selected feature 
+	 * @return
+	 */
+	private int getSelectionIndex(boolean last) {
+	    
+        int ind = -1;
+        int resp = -1;
+
+        FeatureSet fs = null;
+        DisposableIterator diter = null;
+
+        try {
+            FeatureSelection selection = getFeatureSelection();
+            if (!selection.isEmpty()) {
+                
+                fs = getFeatureStore().getFeatureSet();
+                diter = fs.fastIterator();
+                Feature feat = null;
+                while (diter.hasNext()) {
+                    ind++;
+                    feat = (Feature) diter.next();
+                    if (selection.isSelected(feat)) {
+                        resp = ind;
+                        if (!last) {
+                            break;
+                        }
+                    }
+                }
+                
+            }
+        } catch (DataException e) {
+            throw new SelectionChangeException(e);
+        } finally {
+            if (diter != null) {
+                diter.dispose();
+            }
+
+            if (fs != null) {
+                fs.dispose();
+            }
+        }
+        return resp;	    
+	}
+	
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureSelectionModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTable.java	(revision 42196)
@@ -0,0 +1,296 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a Table component for Features}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.sql.Timestamp;
+import java.util.Date;
+
+import javax.swing.JTable;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.ConfigurableFeatureTableModel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureCellRenderer;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableModel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FormattedCellEditor;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FormattedCellRenderer;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.GeometryWKTCellEditor;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.GeometryWKTCellRenderer;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.JToggleButtonHeaderCellRenderer;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.notification.ColumnHeaderSelectionChangeNotification;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Table extension to show Feature values.
+ *
+ * It's based on the usage of a FeatureTableModel, and adds renderers for
+ * Geometry and Feature cell values.
+ *
+ * Observers are notified about column header selection changes, with a
+ * {@link ColumnHeaderSelectionChangeNotification}.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class FeatureTable extends JTable implements Observer, Observable {
+
+    private static final Logger logger = LoggerFactory.getLogger(FeatureTable.class);
+    /**
+     * Generated Serial UID
+     */
+    private static final long serialVersionUID = -6139395189283163964L;
+
+    
+    private final FeatureTableModel featureTableModel;
+    private JToggleButtonHeaderCellRenderer headerCellRenderer;
+
+	private static final int COLUMN_HEADER_MARGIN = 8;
+
+	private static final int COLUMN_HEADER_MIN_WIDTH = 50;
+
+    /**
+     * Creates a new FeatureTable with a {@link FeatureTableModel}.
+     *
+     * @param featureTableModel
+     *            the table model to get data to be shown on the table
+     * @throws DataException
+     *             if there is an error while loading the Features to show
+     * @see JTable#JTable(TableModel)
+     */
+    public FeatureTable(FeatureTableModel featureTableModel)
+            throws DataException {
+        super(featureTableModel);
+        this.featureTableModel = featureTableModel;
+        init();
+    }
+
+    /**
+     * Creates a new FeatureTable with a {@link FeatureTableModel}.
+     *
+     * @param featureTableModel
+     *            the table model to get data to be shown on the table
+     * @param cm
+     *            the table column model to use
+     * @throws DataException
+     *             if there is an error while loading the Features to show
+     * @see JTable#JTable(TableModel, TableColumnModel)
+     */
+    public FeatureTable(FeatureTableModel featureTableModel, TableColumnModel cm)
+            throws DataException {
+        super(featureTableModel, cm);
+        this.featureTableModel = featureTableModel;
+        init();
+    }
+
+    public void update(Observable observable, Object notification) {
+        if (notification instanceof FeatureStoreNotification) {
+            FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
+            String type = fsNotification.getType();
+            // If the selection has changed, repaint the table to show the new
+            // selected rows
+            if (FeatureStoreNotification.SELECTION_CHANGE.equals(type)) {
+                repaint();
+            }
+
+            /*
+             * This is necessary to let Swing know
+             * that editing (in terms of Swing, not gvsig editing)
+             * must be cancelled because the deleted row
+             * is perhaps the row that was being edited
+             */
+            if (FeatureStoreNotification.BEFORE_DELETE.equals(type)) {
+                if (this.isEditing()) {
+                    ChangeEvent che = new ChangeEvent(this);
+                    this.editingCanceled(che);
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns the FeatureAttributeDescriptor related to the selected columns.
+     *
+     * @return an array of FeatureAttributeDescriptor
+     *
+     * @see org.gvsig.fmap.mapcontrol.dal.feature.swing.table.JToggleButtonHeaderCellRenderer#getSelectedColumns()
+     */
+    public FeatureAttributeDescriptor[] getSelectedColumnsAttributeDescriptor() {
+        int[] columns = headerCellRenderer.getSelectedColumns();
+        FeatureAttributeDescriptor[] descriptors = new FeatureAttributeDescriptor[columns.length];
+
+        for (int i = 0; i < descriptors.length; i++) {
+            descriptors[i] = featureTableModel
+                    .getDescriptorForColumn(columns[i]);
+        }
+
+        return descriptors;
+    }
+
+    public void addObserver(Observer observer) {
+        headerCellRenderer.addObserver(observer);
+    }
+
+    public void deleteObserver(Observer observer) {
+        headerCellRenderer.deleteObserver(observer);
+    }
+
+    public void deleteObservers() {
+        headerCellRenderer.deleteObservers();
+    }
+
+	/**
+	 * Sets that the selected Features to be viewed first.
+	 */
+	public void setSelectionUp(boolean selectionUp) {
+		((FeatureTableModel) getModel()).setSelectionUp(selectionUp);
+		scrollRectToVisible(getCellRect(0, 0, true));
+	}
+
+    // @Override
+    // public void tableChanged(TableModelEvent e) {
+    // super.tableChanged(e);
+    // if (headerCellRenderer != null) {
+    // headerCellRenderer.deselectAll();
+    // }
+    // }
+
+    @Override
+    protected void initializeLocalVars() {
+        super.initializeLocalVars();
+        // Add a cell renderer for Geometries and Features
+        setDefaultRenderer(Geometry.class, new GeometryWKTCellRenderer());
+        setDefaultEditor(Geometry.class, new GeometryWKTCellEditor());
+        setDefaultRenderer(Feature.class, new FeatureCellRenderer());
+
+        if( this.getModel() instanceof ConfigurableFeatureTableModel ) {
+            ConfigurableFeatureTableModel model = (ConfigurableFeatureTableModel)this.getModel();
+            setDefaultRenderer(Double.class, new FormattedCellRenderer(model));
+            setDefaultRenderer(Float.class, new FormattedCellRenderer(model));
+            setDefaultRenderer(Integer.class, new FormattedCellRenderer(model));
+            setDefaultRenderer(Long.class, new FormattedCellRenderer(model));
+            setDefaultRenderer(Date.class, new FormattedCellRenderer(model));
+            setDefaultEditor(Double.class, new FormattedCellEditor(model));
+            setDefaultEditor(Float.class, new FormattedCellEditor(model));
+            setDefaultEditor(Integer.class, new FormattedCellEditor(model));
+            setDefaultEditor(Long.class, new FormattedCellEditor(model));
+            setDefaultEditor(Date.class, new FormattedCellEditor(model));
+        }
+
+        // Set the selected row colors
+        setSelectionForeground(Color.blue);
+        setSelectionBackground(Color.yellow);
+    }
+
+    /**
+     * Initializes the table GUI.
+     */
+    private void init() throws DataException {
+		setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+        featureTableModel.getFeatureStore().addObserver(this);
+        // Change the selection model to link with the FeatureStore selection
+        // through the FeatureTableModel
+        setRowSelectionAllowed(true);
+        setColumnSelectionAllowed(false);
+		setSelectionModel(new FeatureSelectionModel(featureTableModel));
+
+		headerCellRenderer = new JToggleButtonHeaderCellRenderer(this);
+		getTableHeader().setDefaultRenderer(headerCellRenderer);
+
+		TableColumnModel tcmodel = getColumnModel();
+		for (int i = 0; i < tcmodel.getColumnCount(); i++) {
+			TableColumn col = tcmodel.getColumn(i);
+			// Get width of column header
+			TableCellRenderer renderer = col.getHeaderRenderer();
+			if (renderer == null) {
+				renderer = getTableHeader().getDefaultRenderer();
+			}
+			Component comp =
+					renderer.getTableCellRendererComponent(this,
+							col.getHeaderValue(), false, false, 0, i);
+			int width = comp.getPreferredSize().width;
+			width =
+					width < COLUMN_HEADER_MIN_WIDTH ? COLUMN_HEADER_MIN_WIDTH
+							: width;
+			col.setPreferredWidth(width + 2 * COLUMN_HEADER_MARGIN);
+		}
+    }
+
+    /**
+     * Returns the number of selected columns.
+     *
+     * @return the number of selected columns, 0 if no columns are selected
+     */
+    public int getSelectedColumnCount() {
+        return headerCellRenderer.getSelectedColumns().length;
+    }
+
+    public void tableChanged(TableModelEvent e) {
+        // Clear the header selection
+        if (e != null && e.getFirstRow() == TableModelEvent.HEADER_ROW
+            && headerCellRenderer != null) {
+            headerCellRenderer.deselectAll();
+        }
+
+        super.tableChanged(e);
+    }
+
+    public Class<?> getColumnClass(int column) {
+        Class resp = super.getColumnClass(column);
+        if (Timestamp.class.isAssignableFrom(resp)) {
+            return Object.class;
+        } else {
+            return resp;
+        }
+    }
+
+    @Override
+    public int getSelectedRowCount() {
+        try {
+            return (int) this.featureTableModel.getFeatureStore().getFeatureSelection().getSelectedCount();
+        } catch (DataException ex) {
+            logger.error("Can't calculate selected rows in table.", ex);
+            return 0;
+        }
+    }
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTablePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTablePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTablePanel.java	(revision 42196)
@@ -0,0 +1,356 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create a Table component for Features}
+ */
+package org.gvsig.fmap.mapcontrol.dal.feature.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.font.FontRenderContext;
+import java.awt.geom.Rectangle2D;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import javax.swing.AbstractListModel;
+import javax.swing.JButton;
+
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableModel;
+import javax.swing.text.StyleConstants;
+
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.ConfigurableFeatureTableModel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableConfigurationPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Panel to show a table of Feature data.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class FeatureTablePanel extends JPanel implements Observer {
+
+    private static final Logger logger = LoggerFactory.getLogger(FeatureTablePanel.class);
+
+    private static final long serialVersionUID = -9199073063283531216L;
+
+    private ConfigurableFeatureTableModel tableModel;
+
+    private JScrollPane jScrollPane = null;
+
+    private FeatureTable table = null;
+    private JPanel selectionPanel;
+    private JLabel selectionLabel;
+
+    /**
+     * Constructs a Panel to show a table with the features of a FeatureStore.
+     *
+     * @param featureStore
+     * to extract the features from
+     * @throws BaseException
+     * if there is an error reading data from the FeatureStore
+     */
+    public FeatureTablePanel(FeatureStore featureStore) throws BaseException {
+        this(featureStore, true);
+    }
+
+    /**
+     * Constructs a Panel to show a table with the features of a FeatureStore.
+     *
+     * @param featureStore
+     * to extract the features from
+     * @param isDoubleBuffered
+     * a boolean, true for double-buffering, which uses additional
+     * memory space to achieve fast, flicker-free updates
+     * @throws BaseException
+     * if there is an error reading data from the FeatureStore
+     */
+    public FeatureTablePanel(FeatureStore featureStore, boolean isDoubleBuffered)
+            throws BaseException {
+        this(featureStore, null, isDoubleBuffered);
+    }
+
+    /**
+     * @throws BaseException
+     *
+     */
+    public FeatureTablePanel(FeatureStore featureStore,
+            FeatureQuery featureQuery) throws BaseException {
+        this(featureStore, featureQuery, true);
+    }
+
+    /**
+     * @param isDoubleBuffered
+     * @throws BaseException
+     */
+    public FeatureTablePanel(FeatureStore featureStore,
+            FeatureQuery featureQuery, boolean isDoubleBuffered)
+            throws BaseException {
+        this(createModel(featureStore, featureQuery));
+    }
+
+    public FeatureTablePanel(ConfigurableFeatureTableModel tableModel)
+            throws DataException {
+        this(tableModel, true);
+    }
+
+    public FeatureTablePanel(ConfigurableFeatureTableModel tableModel,
+            boolean isDoubleBuffered) throws DataException {
+        super(isDoubleBuffered);
+        this.tableModel = tableModel;
+        this.setLayout(new BorderLayout());
+        this.add(getJScrollPane(), BorderLayout.CENTER);
+        this.add(getSelectionPanel(), BorderLayout.SOUTH);
+        tableModel.getFeatureStore().addObserver(this);
+    }
+
+    private JPanel getSelectionPanel() {
+        if ( selectionPanel == null ) {
+            selectionLabel = new JLabel();
+            selectionLabel.setText(getFeatureSelectionSize() + " / "
+                    + getTableModel().getHelper().getTotalSize() + " "
+                    + Messages.getText("registros_seleccionados_total") + ".");
+            selectionPanel = new JPanel();
+
+            selectionPanel.add(selectionLabel, BorderLayout.EAST);
+        }
+        return selectionPanel;
+    }
+
+    private void updateSelection() {
+        selectionLabel.setText(getFeatureSelectionSize() + " / "
+                + getTableModel().getRowCount() + " "
+                + Messages.getText("registros_seleccionados_total") + ".");
+    }
+
+    private long getFeatureSelectionSize() {
+        try {
+            return getFeatureStore().getFeatureSelection().getSize();
+        } catch (DataException e) {
+            throw new RuntimeException("Error updating selection information",
+                    e);
+        }
+    }
+
+    public JPanel createConfigurationPanel() {
+        return new FeatureTableConfigurationPanel(tableModel);
+    }
+
+    /**
+     * Returns the internal Table Model for the Features of the FeatureStore.
+     *
+     * @return the internal Table Model
+     */
+    public ConfigurableFeatureTableModel getTableModel() {
+        return tableModel;
+    }
+
+    /**
+     * Returns the {@link FeatureStore} of the {@link Feature}s being shown in
+     * the table.
+     *
+     * @return the store of the features
+     */
+    public FeatureStore getFeatureStore() {
+        return getTableModel().getFeatureStore();
+    }
+
+    /**
+     * Returns the FeatureQuery used to get the Features.
+     *
+     * @return the FeatureQuery
+     */
+    public FeatureQuery getFeatureQuery() {
+        return getTableModel().getFeatureQuery();
+    }
+
+    /**
+     * Sets that the selected Features to be viewed first.
+     */
+    public void setSelectionUp(boolean selectionUp) {
+        try {
+            getTable().setSelectionUp(selectionUp);
+        } catch (DataException e) {
+            throw new RuntimeException("Error setting the selection up", e);
+        }
+    }
+
+    private static ConfigurableFeatureTableModel createModel(
+            FeatureStore featureStore, FeatureQuery featureQuery)
+            throws BaseException {
+        FeatureQuery query
+                = featureQuery == null ? featureStore.createFeatureQuery()
+                : featureQuery;
+
+        return new ConfigurableFeatureTableModel(featureStore, query);
+    }
+
+    public FeatureTable getTable() throws DataException {
+        if ( table == null ) {
+            table = new FeatureTable(tableModel);
+            // Change the selection model to link with the FeatureStore
+            // selection
+            // through the FeatureTableModel
+            table.setRowSelectionAllowed(true);
+            table.setColumnSelectionAllowed(false);
+            // table.setSelectionModel(new FeatureSelectionModel(tableModel));
+        }
+        return table;
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     * @throws DataException
+     */
+    private JScrollPane getJScrollPane() throws DataException {
+        if ( jScrollPane == null ) {
+            FeatureTable theTable = getTable();
+            jScrollPane = new JScrollPane();
+            jScrollPane.setViewportView(theTable);
+            createTheRowHeader();
+            theTable.addPropertyChangeListener(new PropertyChangeListener() {
+                public void propertyChange(PropertyChangeEvent pce) {
+                    if( "RowHeight".equalsIgnoreCase(pce.getPropertyName())) {
+                        // No he averigado como cambiar el ancho de las lineas
+                        // ya creadas de la cabezera de lineas, asi que la
+                        // reconstruyo entera cuando algo cambia.
+                        createTheRowHeader();
+                    }
+                }
+            });
+            TableModel model = theTable.getModel();
+            model.addTableModelListener(new TableModelListener() {
+                public void tableChanged(TableModelEvent tme) {
+                    // No he averigado como cambiar el ancho de las lineas
+                    // ya creadas de la cabezera de lineas, asi que la
+                    // reconstruyo entera cuando algo cambia.
+                    createTheRowHeader();
+                }
+            });
+        }
+        return jScrollPane;
+    }
+
+    void createTheRowHeader() {
+        // No se si ha sido paranoia o que, pero parece que si la recreo sin mas
+        // a veces parece como si no la cambiase, asi que he probado a encolarlo 
+        // en la cola de eventos de swing y parece que siempre funciona.
+        //
+        // Cuando se estan mostrando las geometrias, que cada linea tiene un ancho
+        // distinto, se le llama muchisimas veces;
+        // habria que evaluar retenerlas por ejemplo durante un segundo y solo 
+        // recrearlo entonces.
+        SwingUtilities.invokeLater(new Runnable() {
+
+            public void run() {
+                ListModel lm = new AbstractListModel() {
+                    public int getSize() {
+                        return table.getRowCount();
+                    }
+
+                    public Object getElementAt(int index) {
+                        return String.valueOf(index + 1);
+                    }
+                };
+                final JList rowHeader = new JList(lm);
+                rowHeader.setBackground(table.getTableHeader().getBackground());
+                rowHeader.setCellRenderer(new RowHeaderRenderer(table,rowHeader));
+                jScrollPane.setRowHeaderView(rowHeader);
+            }
+        });
+    }
+
+    private static class RowHeaderRenderer extends JButton implements ListCellRenderer {
+        private JTable table = null;
+        private final Dimension dimension = new Dimension();
+        private JList rowHeader;
+        
+        RowHeaderRenderer(JTable table,JList rowHeader) {
+            JTableHeader header = table.getTableHeader();
+            setOpaque(true);
+            setBorder(UIManager.getBorder("TableHeader.cellBorder"));
+            setHorizontalAlignment(CENTER);
+            setForeground(header.getForeground());
+            setBackground(header.getBackground());
+            setFont(header.getFont());
+            this.table = table;
+            this.rowHeader = rowHeader;
+        }
+
+        public Component getListCellRendererComponent(JList list, Object value,
+                int index, boolean isSelected, boolean cellHasFocus) {
+            setText((value == null) ? "" : value.toString());
+            this.setPreferredSize(null); // Fuerza recalcular el tama�o del boton
+            this.dimension.height = this.table.getRowHeight(index);
+            this.dimension.width = this.getPreferredSize().width+10;
+            this.setPreferredSize(this.dimension);
+            return this;
+        }
+
+    }
+
+    public void update(Observable observable, Object notification) {
+        // If selection changes from nothing selected to anything selected
+        // or the reverse, update selection info
+        if ( notification instanceof DataStoreNotification ) {
+            String type = ((DataStoreNotification) notification).getType();
+            if ( DataStoreNotification.SELECTION_CHANGE.equals(type) ) {
+                updateSelection();
+            }
+        }
+    }
+    // public void valueChanged(ListSelectionEvent e) {
+    // updateSelection();
+    // updateUI();
+    // }
+    //
+    // public void tableChanged(TableModelEvent e) {
+    // updateSelection();
+    // updateUI();
+    // }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTablePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanelLayout.java	(revision 42196)
@@ -0,0 +1,255 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.mapcontrol.dal.expresionPanel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ExpresionPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form ExpresionPanelLayout
+     */
+    public ExpresionPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        lblFields = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        lstFields = new javax.swing.JList();
+        butEq = new javax.swing.JButton();
+        butNe = new javax.swing.JButton();
+        butLt = new javax.swing.JButton();
+        butGt = new javax.swing.JButton();
+        butLe = new javax.swing.JButton();
+        butGe = new javax.swing.JButton();
+        butAnd = new javax.swing.JButton();
+        butOr = new javax.swing.JButton();
+        butNot = new javax.swing.JButton();
+        jButton10 = new javax.swing.JButton();
+        butClear = new javax.swing.JButton();
+        lblValues = new javax.swing.JLabel();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        lstValues = new javax.swing.JList();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        lblExpresion = new javax.swing.JLabel();
+        butAccept = new javax.swing.JButton();
+        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 16), new java.awt.Dimension(16, 16), new java.awt.Dimension(16, 16));
+        jScrollPane3 = new javax.swing.JScrollPane();
+        txtExpresion = new javax.swing.JTextArea();
+        butCancel = new javax.swing.JButton();
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        lblFields.setText("Campos:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(lblFields, gridBagConstraints);
+
+        lstFields.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+        jScrollPane1.setViewportView(lstFields);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridheight = 9;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.PAGE_START;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.3;
+        add(jScrollPane1, gridBagConstraints);
+
+        butEq.setText("=");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butEq, gridBagConstraints);
+
+        butNe.setText("!=");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 8;
+        gridBagConstraints.gridy = 4;
+        add(butNe, gridBagConstraints);
+
+        butLt.setText("<");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butLt, gridBagConstraints);
+
+        butGt.setText(">");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butGt, gridBagConstraints);
+
+        butLe.setText("<=");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 8;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butLe, gridBagConstraints);
+
+        butGe.setText(">=");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 10;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butGe, gridBagConstraints);
+
+        butAnd.setText("And");
+        butAnd.setActionCommand("and");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butAnd, gridBagConstraints);
+
+        butOr.setText("Or");
+        butOr.setActionCommand("or");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butOr, gridBagConstraints);
+
+        butNot.setText("Not");
+        butNot.setActionCommand("not");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 8;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butNot, gridBagConstraints);
+
+        jButton10.setText("()");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 10;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(jButton10, gridBagConstraints);
+
+        butClear.setText("Borrar texto");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(butClear, gridBagConstraints);
+
+        lblValues.setText("Valores conocidos:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 12;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(lblValues, gridBagConstraints);
+
+        lstValues.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+        jScrollPane2.setViewportView(lstValues);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 12;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.gridheight = 9;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.PAGE_START;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.4;
+        add(jScrollPane2, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 16;
+        gridBagConstraints.gridy = 0;
+        add(filler1, gridBagConstraints);
+
+        lblExpresion.setText("Expresion");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.gridwidth = 11;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(lblExpresion, gridBagConstraints);
+
+        butAccept.setText("Aceptar");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 12;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_END;
+        gridBagConstraints.weightx = 0.1;
+        add(butAccept, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 20;
+        add(filler2, gridBagConstraints);
+
+        txtExpresion.setColumns(20);
+        txtExpresion.setRows(5);
+        jScrollPane3.setViewportView(txtExpresion);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.gridwidth = 13;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.1;
+        add(jScrollPane3, gridBagConstraints);
+
+        butCancel.setText("Cancel");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 14;
+        gridBagConstraints.gridy = 18;
+        add(butCancel, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected javax.swing.JButton butAccept;
+    protected javax.swing.JButton butAnd;
+    protected javax.swing.JButton butCancel;
+    protected javax.swing.JButton butClear;
+    protected javax.swing.JButton butEq;
+    protected javax.swing.JButton butGe;
+    protected javax.swing.JButton butGt;
+    protected javax.swing.JButton butLe;
+    protected javax.swing.JButton butLt;
+    protected javax.swing.JButton butNe;
+    protected javax.swing.JButton butNot;
+    protected javax.swing.JButton butOr;
+    protected javax.swing.Box.Filler filler1;
+    protected javax.swing.Box.Filler filler2;
+    protected javax.swing.JButton jButton10;
+    protected javax.swing.JScrollPane jScrollPane1;
+    protected javax.swing.JScrollPane jScrollPane2;
+    protected javax.swing.JScrollPane jScrollPane3;
+    protected javax.swing.JLabel lblExpresion;
+    protected javax.swing.JLabel lblFields;
+    protected javax.swing.JLabel lblValues;
+    protected javax.swing.JList lstFields;
+    protected javax.swing.JList lstValues;
+    protected javax.swing.JTextArea txtExpresion;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanel.java	(revision 42196)
@@ -0,0 +1,175 @@
+
+package org.gvsig.fmap.mapcontrol.dal.expresionPanel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Map;
+import javax.swing.ListModel;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ExpresionPanel extends ExpresionPanelLayout {
+    
+    private static final Logger logger = LoggerFactory.getLogger(ExpresionPanel.class);
+            
+    private FeatureStore store;
+    private Map values;
+    private boolean okCancelVisible = true;
+    private boolean isCanceled;
+
+    private static class FeatureTypeListModel implements ListModel {
+        private final FeatureType featureType;
+
+        public FeatureTypeListModel(FeatureType featureType) {
+            this.featureType = featureType;
+        }
+        public int getSize() {
+            return this.featureType.size();
+        }
+
+        public Object getElementAt(int index) {
+            return this.featureType.get(index);
+        }
+
+        public void addListDataListener(ListDataListener l) {
+            
+        }
+
+        public void removeListDataListener(ListDataListener l) {
+            
+        }
+        
+    }
+    
+    public ExpresionPanel(FeatureStore store) {
+        this.isCanceled = false;
+        this.initComponents();
+    }
+    
+    public void setFeatureStore(FeatureStore store) {
+        this.store = store;
+        try {
+            this.lstFields.setModel(new FeatureTypeListModel(this.store.getDefaultFeatureType()));
+        } catch (DataException ex) {
+            logger.warn("Can't create model for field list.",ex);
+        }
+    }
+    
+    public void setOkCancelVisible(boolean acceptVisible) {
+        this.okCancelVisible = acceptVisible;
+    }
+    
+    public boolean getOkCancelVisible() {
+        return this.okCancelVisible;
+    }
+    
+    private void initComponents() {
+        this.butAccept.setVisible(this.okCancelVisible);
+        
+        this.lstFields.addListSelectionListener(new ListSelectionListener() {
+            public void valueChanged(ListSelectionEvent e) {
+                doSelectField();
+            }
+        });
+        this.lstValues.addListSelectionListener(new ListSelectionListener() {
+            public void valueChanged(ListSelectionEvent e) {
+                doSelectValue();
+            }
+        });
+        ActionListener action = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                doInsert(e.getActionCommand()+" ");
+            }
+        };
+        this.butAnd.addActionListener(action);
+        this.butOr.addActionListener(action);
+        this.butNot.addActionListener(action);
+        this.butEq.addActionListener(action);
+        this.butNe.addActionListener(action);
+        this.butGt.addActionListener(action);
+        this.butLt.addActionListener(action);
+        this.butGe.addActionListener(action);
+        this.butLe.addActionListener(action);
+        
+        this.butClear.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                doClear();
+            }
+        });
+    
+        this.butAccept.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                doAcept();
+            }
+        });
+
+        this.butCancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                doCancel();
+            }
+        });
+
+    }
+
+    public boolean isCanceled() {
+        return this.isCanceled;
+    }
+    
+    public String getExpresion() {
+        return StringUtils.defaultIfBlank(this.txtExpresion.getText(), null);
+    }
+    
+    public void showAsDialog(String title) {
+        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+        winmgr.showWindow(this, title, WindowManager.MODE.DIALOG);
+    }
+    
+    private void doAcept() {
+        this.isCanceled=false;
+        this.setVisible(false);
+    }
+
+    private void doCancel() {
+        this.isCanceled=true;
+        this.setVisible(false);
+    }
+
+    private void doSelectField() {
+        FeatureAttributeDescriptor x = (FeatureAttributeDescriptor) this.lstFields.getSelectedValue();
+        if( x == null ) {
+            return;
+        }
+        this.doInsert(x.getName());
+        this.doInsert(" ");
+        this.fillValuesList(x.getName());
+    }
+
+    private void doClear() {
+        this.txtExpresion.setText("");
+    }
+
+    private void doSelectValue() {
+        // TODO: falta por implemetar doSelectValue
+    }
+
+    private void doInsert(String s) {
+        this.txtExpresion.insert(s, this.txtExpresion.getCaretPosition());
+    }
+
+    private void fillValuesList(String name) {
+        // TODO: falta por implemetar fillValuesList
+    }
+    
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/expresionPanel/ExpresionPanelLayout.form	(revision 42196)
@@ -0,0 +1,1952 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,56,0,0,1,-4"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblFields">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Campos:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="9" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="19" weightX="0.1" weightY="0.3"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="lstFields">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="0"/>
+            </Property>
+            <Property name="selectionMode" type="int" value="0"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JButton" name="butEq">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="="/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butNe">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="!="/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="8" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butLt">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butGt">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&gt;"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butLe">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;="/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="8" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butGe">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&gt;="/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="10" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butAnd">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="And"/>
+        <Property name="actionCommand" type="java.lang.String" value="and"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butOr">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Or"/>
+        <Property name="actionCommand" type="java.lang.String" value="or"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butNot">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Not"/>
+        <Property name="actionCommand" type="java.lang.String" value="not"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="8" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="jButton10">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="()"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="10" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butClear">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Borrar texto"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblValues">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Valores conocidos:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="12" gridY="2" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="12" gridY="4" gridWidth="3" gridHeight="9" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="19" weightX="0.1" weightY="0.4"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="lstValues">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="0"/>
+            </Property>
+            <Property name="selectionMode" type="int" value="0"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="16" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblExpresion">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Expresion"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="14" gridWidth="11" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butAccept">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Aceptar"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="12" gridY="18" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="24" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="20" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane3">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="16" gridWidth="13" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="txtExpresion">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JButton" name="butCancel">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Cancel"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="14" gridY="18" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9_lblFields">
+          <CodeVariable name="lblFields" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblFields"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="10_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridheight" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="9"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="19"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="double" value="0.3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18_jScrollPane1">
+          <CodeVariable name="jScrollPane1" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="10_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="19_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23_butEq">
+          <CodeVariable name="butEq" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butEq"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="19_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="24_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="24_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="24_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="24_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27_butNe">
+          <CodeVariable name="butNe" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butNe"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="24_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="28_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32_butLt">
+          <CodeVariable name="butLt" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butLt"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="28_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="33_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37_butGt">
+          <CodeVariable name="butGt" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butGt"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="33_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="38_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="38_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="38_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="38_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="38_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42_butLe">
+          <CodeVariable name="butLe" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butLe"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="38_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="43_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47_butGe">
+          <CodeVariable name="butGe" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butGe"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="43_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="48_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52_butAnd">
+          <CodeVariable name="butAnd" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butAnd"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="48_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="53_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57_butOr">
+          <CodeVariable name="butOr" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butOr"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="53_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="58_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62_butNot">
+          <CodeVariable name="butNot" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butNot"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="58_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="63_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67_jButton10">
+          <CodeVariable name="jButton10" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jButton10"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="63_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="68_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="69">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73_butClear">
+          <CodeVariable name="butClear" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butClear"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="68_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="74_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="74_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="74_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="74_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="74_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="77">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="74_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="79_lblValues">
+          <CodeVariable name="lblValues" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblValues"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="74_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="80_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="82">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="83">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridheight" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="84">
+          <ExpressionOrigin>
+            <Value type="int" value="9"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="85">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="86">
+          <ExpressionOrigin>
+            <Value type="int" value="19"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="87">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="88">
+          <ExpressionOrigin>
+            <Value type="double" value="0.4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="89_jScrollPane2">
+          <CodeVariable name="jScrollPane2" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="80_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="90_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="91">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="92">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="93_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="90_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="94_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="94_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="94_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="95">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="94_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="96">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="94_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="97">
+          <ExpressionOrigin>
+            <Value type="int" value="11"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="94_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="98">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="99_lblExpresion">
+          <CodeVariable name="lblExpresion" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblExpresion"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="94_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="100_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="101">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="102">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="103">
+          <ExpressionOrigin>
+            <Value type="int" value="24"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="104">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="105_butAccept">
+          <CodeVariable name="butAccept" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butAccept"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="100_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="106_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="106_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="106_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="107">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="106_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="108">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="109_filler2">
+          <CodeVariable name="filler2" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="106_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="110_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="111">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="112">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="113">
+          <ExpressionOrigin>
+            <Value type="int" value="13"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="114">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="115">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="116">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="117_jScrollPane3">
+          <CodeVariable name="jScrollPane3" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="110_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="118_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="118_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="118_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="119">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="118_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="120">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="121_butCancel">
+          <CodeVariable name="butCancel" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butCancel"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="118_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanelLayout.java	(revision 42196)
@@ -0,0 +1,202 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.mapcontrol.dal.jdbc;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class JDBCConnectionPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form DBConnectionPanelLayout
+     */
+    public JDBCConnectionPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        lblConnectionName = new javax.swing.JLabel();
+        lblConnector = new javax.swing.JLabel();
+        lblServer = new javax.swing.JLabel();
+        lblPort = new javax.swing.JLabel();
+        lblDataBase = new javax.swing.JLabel();
+        lblUsername = new javax.swing.JLabel();
+        lblPassword = new javax.swing.JLabel();
+        cboConnectors = new javax.swing.JComboBox();
+        txtServer = new javax.swing.JTextField();
+        txtPort = new javax.swing.JTextField();
+        txtDataBase = new javax.swing.JTextField();
+        txtUsername = new javax.swing.JTextField();
+        txtPassword = new javax.swing.JPasswordField();
+        lblFoother = new javax.swing.JLabel();
+        cboConnections = new javax.swing.JComboBox();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        lblConnectionName.setText("Nombre de la conexion:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblConnectionName, gridBagConstraints);
+
+        lblConnector.setText("Conector");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblConnector, gridBagConstraints);
+
+        lblServer.setText("Servidor");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblServer, gridBagConstraints);
+
+        lblPort.setText("Puerto");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblPort, gridBagConstraints);
+
+        lblDataBase.setText("Base de datos");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblDataBase, gridBagConstraints);
+
+        lblUsername.setText("Usuario");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblUsername, gridBagConstraints);
+
+        lblPassword.setText("Clave");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblPassword, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(cboConnectors, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtServer, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtPort, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtDataBase, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtUsername, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtPassword, gridBagConstraints);
+
+        lblFoother.setText("<html>\nTenga en cuenta que el nombre de usuario y la  contrase�a deben coincidir en mayusculas y minusculas con el registrado en la base de dato.\n<html>"); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.gridwidth = 5;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(lblFoother, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(cboConnections, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 20;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.2;
+        add(filler1, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected javax.swing.JComboBox cboConnections;
+    protected javax.swing.JComboBox cboConnectors;
+    protected javax.swing.Box.Filler filler1;
+    protected javax.swing.JLabel lblConnectionName;
+    protected javax.swing.JLabel lblConnector;
+    protected javax.swing.JLabel lblDataBase;
+    protected javax.swing.JLabel lblFoother;
+    protected javax.swing.JLabel lblPassword;
+    protected javax.swing.JLabel lblPort;
+    protected javax.swing.JLabel lblServer;
+    protected javax.swing.JLabel lblUsername;
+    protected javax.swing.JTextField txtDataBase;
+    protected javax.swing.JPasswordField txtPassword;
+    protected javax.swing.JTextField txtPort;
+    protected javax.swing.JTextField txtServer;
+    protected javax.swing.JTextField txtUsername;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanel.java	(revision 42196)
@@ -0,0 +1,319 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.gvsig.fmap.mapcontrol.dal.jdbc;
+
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Iterator;
+import java.util.List;
+import javax.swing.ComboBoxModel;
+import javax.swing.JTextField;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel
+public class JDBCConnectionPanel extends JDBCConnectionPanelLayout {
+
+    private static final Logger logger = LoggerFactory.getLogger(JDBCConnectionPanel.class);
+
+    private JDBCServerExplorerParameters forcedParameters;
+    
+    private static class ServerExplorerParametersComboItem {
+
+        private JDBCServerExplorerParameters params;
+        private String label;
+
+        public ServerExplorerParametersComboItem(String label, JDBCServerExplorerParameters params) {
+            this.params = params;
+            this.label = label;
+        }
+
+        public ServerExplorerParametersComboItem(JDBCServerExplorerParameters params) {
+            this(params.getExplorerName(), params);
+        }
+
+        public String toString() {
+            return this.label;
+        }
+
+        public JDBCServerExplorerParameters getParams() {
+            return this.params;
+        }
+
+        public String getLabel() {
+            return this.label;
+        }
+    }
+
+    public JDBCConnectionPanel() {
+        initComponents();
+    }
+
+    protected void initComponents() {
+        this.cboConnections.setEditable(true);
+        this.cboConnections.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                onChangeConnection();
+            }
+        });
+        this.cboConnectors.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                onChangeConnector();
+            }
+        });
+        try {
+            fillConnections();
+            fillConnectors();
+        } catch(Throwable th) {
+            // Ignore it to allow use in GUI builders
+        }
+        this.translate();
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblConnectionName.setText(i18nManager.getTranslation("_Connection_name"));
+        this.lblConnector.setText(i18nManager.getTranslation("_Driver_type"));
+        this.lblServer.setText(i18nManager.getTranslation("_Host"));
+        this.lblPort.setText(i18nManager.getTranslation("_Port"));
+        this.lblDataBase.setText(i18nManager.getTranslation("_Database"));
+        this.lblUsername.setText(i18nManager.getTranslation("_User"));
+        this.lblPassword.setText(i18nManager.getTranslation("_Password"));
+        this.lblFoother.setText("<html>"+i18nManager.getTranslation("_JDBCConecctionPanel_foother")+"</html>");
+    }
+    
+    public void setServerExplorerParameters(JDBCServerExplorerParameters parameters) {
+        this.forcedParameters = (JDBCServerExplorerParameters) parameters.getCopy();
+        
+        int indexConnector = this.getIndexOfConnector(parameters);
+        if ( indexConnector >= 0 && this.cboConnectors.getSelectedIndex()!=indexConnector ) {
+            this.cboConnectors.setSelectedIndex(indexConnector);
+        }
+
+        this.txtServer.setText(parameters.getHost());
+        Integer port = parameters.getPort();
+        if ( port == null ) {
+            this.txtPort.setText("");
+        } else {
+            this.txtPort.setText(String.valueOf(port));
+        }
+        this.txtDataBase.setText(parameters.getDBName());
+        this.txtUsername.setText(parameters.getUser());
+        this.txtPassword.setText(parameters.getPassword());
+    }
+
+    public JDBCServerExplorerParameters getServerExplorerParameters() {
+        JDBCServerExplorerParameters params;
+        JDBCServerExplorerParameters connector = this.getConnector();
+        if( this.forcedParameters==null ) {
+            params = (JDBCServerExplorerParameters) connector.getCopy();
+        } else {
+            params = (JDBCServerExplorerParameters) this.forcedParameters.getCopy();
+        }
+        String s = this.getServer();
+        if( s!=null ) {
+            params.setHost(s);
+        }
+        int n = this.getPort();
+        if( n>0 ) {
+            params.setPort(n);
+        }
+        s = this.getDataBaseName();
+        if( s!=null ) {
+            params.setDBName(s);
+        }
+        s = this.getUsername();
+        if( s!=null ) {
+            params.setUser(s);
+        }
+        s = this.getPassword();
+        if( s!=null ) {
+            params.setPassword(s);
+        }
+
+        if ( this.getConnectionName() != null ) {
+            DataManager dataManager = DALLocator.getDataManager();
+            DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+            pool.add(this.getConnectionName(), params);
+        }
+        return params;
+    }
+
+    protected void setConnectionName(String connectionName) {
+        JTextField txtConnections = (JTextField) this.cboConnections.getEditor().getEditorComponent();
+        txtConnections.setText(connectionName);
+    }
+
+    public String getConnectionName() {
+        JTextField txtConnections = (JTextField) this.cboConnections.getEditor().getEditorComponent();
+        String value = txtConnections.getText();
+        return StringUtils.defaultIfBlank(value, null);
+    }
+
+    protected JDBCServerExplorerParameters getConnector() {
+        ServerExplorerParametersComboItem item = (ServerExplorerParametersComboItem) this.cboConnectors.getSelectedItem();
+        JDBCServerExplorerParameters value = item.getParams();
+        return value;
+    }
+
+    protected String getConnectorName() {
+        JDBCServerExplorerParameters value = this.getConnector();
+        if ( value == null ) {
+            return null;
+        }
+        return StringUtils.defaultIfBlank(value.getExplorerName(), null);
+    }
+
+    protected String getServer() {
+        return StringUtils.defaultIfBlank(this.txtServer.getText(), null);
+    }
+
+    protected int getPort() {
+        String svalue = StringUtils.defaultIfBlank(this.txtPort.getText(), null);
+        int ivalue = -1;
+        try {
+            ivalue = Integer.parseInt(svalue);
+        } catch (Exception ex) {
+            ivalue = -1;
+        }
+        return ivalue;
+    }
+
+    protected String getDataBaseName() {
+        return StringUtils.defaultIfBlank(this.txtDataBase.getText(), null);
+    }
+
+    protected String getUsername() {
+        return StringUtils.defaultIfBlank(this.txtUsername.getText(), null);
+    }
+
+    protected String getPassword() {
+        return StringUtils.defaultIfBlank(this.txtPassword.getText(), null);
+    }
+
+    private void onChangeConnector() {
+        ServerExplorerParametersComboItem item = (ServerExplorerParametersComboItem) this.cboConnectors.getSelectedItem();
+        if( item==null ) {
+            return;
+        }
+        JDBCServerExplorerParameters connector = item.getParams();
+        
+        if ( connector == null ) {
+            return;
+        }
+        this.setServerExplorerParameters(connector);
+    }
+
+    private void onChangeConnection() {
+        Object item = this.cboConnections.getSelectedItem();
+        if ( item instanceof ServerExplorerParametersComboItem ) {
+            JDBCServerExplorerParameters connection = ((ServerExplorerParametersComboItem) item).getParams();
+            if ( connection == null ) {
+                return;
+            }
+            this.setServerExplorerParameters(connection);
+        }
+    }
+    
+
+    private int getIndexOfConnector(JDBCServerExplorerParameters explorerParameters) {
+        String code = null;
+        try {
+            code = explorerParameters.toString();
+            ComboBoxModel model = this.cboConnectors.getModel();
+            for ( int i = 0; i < model.getSize(); i++ ) {
+                ServerExplorerParametersComboItem x = (ServerExplorerParametersComboItem) model.getElementAt(i);
+                if ( x.getLabel().equalsIgnoreCase(explorerParameters.getExplorerName()) ) {
+                    return i;
+                }
+            }
+        } catch (Exception ex) {
+            logger.warn("Can't get index of exporer parameter '" + code + "'.", ex);
+        }
+        return -1;
+    }
+
+    private void fillConnectors() {
+        DataManager dataManager = DALLocator.getDataManager();
+        List<String> explorers = dataManager.getExplorerProviders();
+
+        DataServerExplorerParameters params;
+
+        JDBCServerExplorerParameters last = null;
+        Iterator<String> it = explorers.iterator();
+        while ( it.hasNext() ) {
+            String explorerName = it.next();
+            try {
+                params = dataManager.createServerExplorerParameters(explorerName);
+            } catch (DataException e) {
+                continue;
+            }
+            if ( params instanceof JDBCServerExplorerParameters ) {
+                JDBCServerExplorerParameters dbParams = (JDBCServerExplorerParameters) params;
+                if( dbParams.getClass().getName().equals(JDBCServerExplorerParameters.class.getName()) ) {
+                    last = dbParams;
+                } else {
+                    this.cboConnectors.addItem(
+                            new ServerExplorerParametersComboItem(dbParams)
+                    );
+                }
+            }
+        }
+        if( last!=null ) {
+            this.cboConnectors.addItem(
+                    new ServerExplorerParametersComboItem(last)
+            );
+        }
+    }
+
+    private void fillConnections() {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+
+        DataServerExplorerParameters params;
+
+        Iterator<DataServerExplorerPoolEntry> it = pool.iterator();
+        while ( it.hasNext() ) {
+            DataServerExplorerPoolEntry entry = it.next();
+            if ( entry.getExplorerParameters() instanceof JDBCServerExplorerParameters ) {
+                JDBCServerExplorerParameters dbParams = (JDBCServerExplorerParameters) entry.getExplorerParameters();
+                this.cboConnections.addItem(
+                        new ServerExplorerParametersComboItem(entry.getName(), dbParams)
+                );
+            }
+        }
+        this.cboConnections.setSelectedIndex(-1);
+    }
+
+    public void delete() {
+        String name = this.getConnectionName();
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+        
+        pool.remove(name);
+    }
+    
+    public void clear() {
+        this.cboConnections.setSelectedIndex(-1);
+        this.cboConnectors.setSelectedIndex(-1);
+        this.txtServer.setText("");
+        this.txtPort.setText("");
+        this.txtDataBase.setText("");
+        this.txtUsername.setText("");
+        this.txtPassword.setText("");
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/jdbc/JDBCConnectionPanelLayout.form	(revision 42196)
@@ -0,0 +1,1726 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblConnectionName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Nombre de la conexion:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblConnector">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Conector"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblServer">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Servidor"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblPort">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Puerto"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblDataBase">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Base de datos"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="10" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblUsername">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Usuario"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="12" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblPassword">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Clave"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="14" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cboConnectors">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="4" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtServer">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtPort">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="8" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtDataBase">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtUsername">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="12" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JPasswordField" name="txtPassword">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="14" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblFoother">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Tenga en cuenta que el nombre de usuario y la  contrase&#xf1;a deben coincidir en mayusculas y minusculas con el registrado en la base de dato.&#xa;&lt;html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="18" gridWidth="5" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cboConnections">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[0, 32767]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="20" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.2"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_lblConnectionName">
+          <CodeVariable name="lblConnectionName" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblConnectionName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16_lblConnector">
+          <CodeVariable name="lblConnector" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblConnector"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="17_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22_lblServer">
+          <CodeVariable name="lblServer" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblServer"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="17_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="23_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28_lblPort">
+          <CodeVariable name="lblPort" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblPort"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="23_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="29_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34_lblDataBase">
+          <CodeVariable name="lblDataBase" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblDataBase"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="29_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="35_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40_lblUsername">
+          <CodeVariable name="lblUsername" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblUsername"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="35_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="41_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46_lblPassword">
+          <CodeVariable name="lblPassword" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblPassword"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="41_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="47_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54_cboConnectors">
+          <CodeVariable name="cboConnectors" type="8196" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cboConnectors"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="47_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="55_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="58">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62_txtServer">
+          <CodeVariable name="txtServer" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtServer"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="55_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="63_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="68">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="69">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70_txtPort">
+          <CodeVariable name="txtPort" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtPort"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="63_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="71_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="77">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78_txtDataBase">
+          <CodeVariable name="txtDataBase" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtDataBase"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="71_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="79_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="80">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="82">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="83">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="84">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="85">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="86_txtUsername">
+          <CodeVariable name="txtUsername" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtUsername"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="79_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="87_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="88">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="89">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="90">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="91">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="92">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="93">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="94_txtPassword">
+          <CodeVariable name="txtPassword" type="8196" declaredType="javax.swing.JPasswordField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtPassword"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="87_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="95_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="96">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="97">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="98">
+          <ExpressionOrigin>
+            <Value type="int" value="5"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="99">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="100">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="101_lblFoother">
+          <CodeVariable name="lblFoother" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblFoother"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="95_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="102_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="103">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="104">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="105">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="106">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="107">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="108_cboConnections">
+          <CodeVariable name="cboConnections" type="8196" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cboConnections"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="102_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="109_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="110">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="111">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="112">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="113">
+          <ExpressionOrigin>
+            <Value type="double" value="0.2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="114_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="109_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MapTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MapTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MapTool.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 28-oct-2004
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+public interface MapTool {
+	public static final int EVENT_MEASURE = 1;
+	public static final int EVENT_MOVE = 2;
+	public static final int EVENT_POINTDOUBLECLICKED = 3;
+	public static final int EVENT_POINT = 4;
+	public static final int EVENT_POLYLINEFINISHED = 5;
+	public static final int EVENT_POINTFIXED = 6;
+	public static final int EVENT_POINTS = 7;
+	public static final int EVENT_RECTANGLE = 8;
+	
+	public static final int TYPE_UNKNOW = 0;
+	public static final int TYPE_POINT = 1;
+	public static final int TYPE_RECTANGLE = 2;
+	public static final int TYPE_POLYLINE = 3;
+	public static final int TYPE_POLYGON = 4;
+	public static final int TYPE_CIRCLE = 5;
+	public static final int TYPE_MOVE = 5;
+	public static final int TYPE_MOUSEMOVENENT = 7;
+	public static final int TYPE_MOUSEDRAGGED = 8;
+	
+	public static final int ACTION_ZOOM = 20;
+	public static final int ACTION_PAN = 21;
+	public static final int ACTION_SELECTION = 22;
+	public static final int ACTION_AREA = 23;
+	public static final int ACTION_MEASURE = 24;
+	
+	public String getName();
+	public int getType();
+	public Image getImageCursor();
+	public MapControl getMapControl();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MapTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutRightButtonListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutRightButtonListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutRightButtonListener.java	(revision 42196)
@@ -0,0 +1,123 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * @deprecated use ZoomOutListenerImpl setting mouseButton to right in the Behavior.
+ */
+public class ZoomOutRightButtonListener implements PointListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(ZoomOutRightButtonListener.class);
+		
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	private MapControl mapControl;
+
+	/**
+	 * <p>Creates a new <code>ZoomOutRightButtonListener</code> object.</p>
+	 *
+	 * @param mapControl the <code>MapControl</code> where will be applied the changes
+	 */
+	public ZoomOutRightButtonListener(MapControl mapControl) {
+		this.mapControl = mapControl;
+                logger.warn("Using deprecated class ZoomOutRightButtonListener");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) {
+		if (event.getEvent().getButton() == MouseEvent.BUTTON3){
+			logger.debug("Zoom out bot�n derecho");
+			ViewPort vp = mapControl.getMapContext().getViewPort();
+			Point2D p2 = vp.toMapPoint(event.getPoint());
+
+			double nuevoX;
+			double nuevoY;
+			double factor = 1 / MapContext.ZOOMOUTFACTOR;
+			if (vp.getExtent() != null) {
+				nuevoX = p2.getX()
+						- ((vp.getExtent().getWidth() * factor) / 2.0);
+				nuevoY = p2.getY()
+						- ((vp.getExtent().getHeight() * factor) / 2.0);
+				double x = nuevoX;
+				double y = nuevoY;
+				double width = vp.getExtent().getWidth() * factor;
+				double height = vp.getExtent().getHeight() * factor;
+
+				try {
+					vp.setEnvelope(geomManager.createEnvelope(x, y ,x + width, y + height, SUBTYPES.GEOM2D));
+				} catch (CreateEnvelopeException e) {
+					logger.error("Error creating the envelope", e);
+				}
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-zoom-out");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+	    logger.debug("cancelDrawing true");
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) {
+		// TODO Auto-generated method stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutRightButtonListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BehaviorException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BehaviorException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BehaviorException.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+/**
+ * <p>Exception produced when fails the process that interacts with a {@link MapControl MapControl} object,
+ *  using some tool.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class BehaviorException extends Exception {
+	/**
+	 * <p>Creates a new behavior exception with the specified detail message.</p>
+	 * 
+	 * @see Exception#Exception(String)
+	 */
+	public BehaviorException(String message) {
+		super(message);
+	}
+
+	/**
+	 * <p>Creates a new behavior exception with the specified detail message and cause.</p>
+	 * 
+	 * @see Exception#Exception(String, Throwable)
+	 */
+	public BehaviorException(String message, Throwable cause) {
+		super(message, cause);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BehaviorException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseWheelBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseWheelBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseWheelBehavior.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.event.MouseWheelEvent;
+
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class MouseWheelBehavior extends Behavior {
+
+    /**
+     * Constructor.
+     */
+    public MouseWheelBehavior() {
+    }
+
+    @Override
+    public ToolListener getListener() {
+        return null;
+    }
+
+    @Override
+    public void mouseWheelMoved(MouseWheelEvent event) throws BehaviorException {
+        MapControl control = getMapControl();
+        control.cancelDrawing();
+        super.mouseWheelMoved(event);
+        ViewPort viewPort = control.getViewPort();
+        Envelope envelope = viewPort.getEnvelope();
+        if (envelope != null) {
+            double factor = event.getWheelRotation() < 0 ? 0.75d : 1.3333d;
+            Point mousePosition = viewPort.convertToMapPoint(event.getPoint());
+            Point envelopPoint1 = envelope.getLowerCorner();
+            Point envelopPoint2 = envelope.getUpperCorner();
+
+            double width1 = mousePosition.getX() - envelopPoint1.getX();
+            double heigth1 = mousePosition.getY() - envelopPoint1.getY();
+            double width2 = envelopPoint2.getX() - mousePosition.getX();
+            double heigth2 = envelopPoint2.getY() - mousePosition.getY();
+
+            double xmin = mousePosition.getX() - width1 * factor;
+            double ymin = mousePosition.getY() - heigth1 * factor;
+            double xmax = mousePosition.getX() + width2 * factor;
+            double ymax = mousePosition.getY() + heigth2 * factor;
+
+            try {
+                viewPort.setEnvelope(geomManager.createEnvelope(xmin, ymin,
+                    xmax, ymax, SUBTYPES.GEOM2D));
+            } catch (CreateEnvelopeException e) {
+                throw new BehaviorException(
+                    "Error changing the viewport envelope to (" + xmin + ","
+                        + ymin + "),(" + xmax + "," + ymax + ")", e);
+            }
+            getMapControl().drawMap(true);
+        }
+        event.consume();
+    }
+    
+    @Override
+    public void paintComponent(MapControlDrawer mapControlDrawer) {
+    	// Do nothing
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseWheelBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MoveWithMiddleButtonBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MoveWithMiddleButtonBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MoveWithMiddleButtonBehavior.java	(revision 42196)
@@ -0,0 +1,48 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MoveWithMiddleButtonBehavior extends MoveBehavior {
+
+    /**
+     * <p>
+     * Creates a new behavior for moving the mouse.
+     * </p>
+     *
+     * @param pli
+     *            listener used to permit this object to work with the
+     *            associated <code>MapControl</code>
+     */
+    public MoveWithMiddleButtonBehavior(PanListener pli) {
+        super(pli,BUTTON_MIDDLE);
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/Behavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/Behavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/Behavior.java	(revision 42196)
@@ -0,0 +1,434 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.Image;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import javax.swing.SwingUtilities;
+
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * When user is working with a tool on a {@link MapControl MapControl} instance,
+ * <code>Behavior</code> defines the basic ways of interacting: selecting a
+ * point, a circle, a rectangle, or ...
+ * </p>
+ *
+ * <p>
+ * All events generated will be <code>MouseEvent</code>, and will depend on the
+ * nature of the <i>behavior</i>, like the kind of tool for applying the
+ * changes.
+ * </p>
+ *
+ * <p>
+ * <code>Behavior</code> defines the common and basic functionality for all
+ * kinds of interacting ways with the <code>MapControl</code> object.
+ * </p>
+ *
+ * @see IBehavior
+ *
+ * @author Luis W. Sevilla
+ */
+public abstract class Behavior implements IBehavior {
+
+    public static final int BUTTON_LEFT = 1;
+    public static final int BUTTON_MIDDLE = 2;
+    public static final int BUTTON_RIGHT = 4;
+
+    /**
+     * Reference to the <code>MapControl</code> object that uses.
+     *
+     * @see #getMapControl()
+     * @see #setMapControl(MapControl)
+     */
+    private MapControl mapControl;
+
+    private static final Logger LOG = LoggerFactory.getLogger(Behavior.class);
+
+    protected GeometryManager geomManager = GeometryLocator
+        .getGeometryManager();
+
+    private int mouseButton = BUTTON_LEFT;
+    private boolean isMyButton = false;
+
+    public Behavior() {
+
+    }
+
+    public Behavior(int mouseButton) {
+        this.mouseButton = mouseButton;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#getListener()
+     */
+    public abstract ToolListener getListener();
+
+    /*
+     * <p>Draws as much of the associated <code>MapControl</code> image as is
+     * currently available. The image
+     * is drawn with its top-left corner at (0, 0) in this graphics context's
+     * coordinate space. Transparent
+     * pixels in the image do not affect whatever pixels are already there.</p>
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#paintComponent(java.
+     * awt.Graphics)
+     */
+    public void paintComponent(MapControlDrawer mapControlDrawer) {
+    }
+
+    public void paintComponent(MapControlDrawer mapControlDrawer, boolean clean) {
+        if (clean){
+            clean(mapControlDrawer);
+        }
+        paintComponent(mapControlDrawer);
+    }
+
+    public void clean(MapControlDrawer mapControlDrawer){
+        BufferedImage img = getMapControl().getImage();
+
+        if (img != null) {
+            mapControlDrawer.drawImage(img, 0, 0);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#setMapControl(com.iver
+     * .cit.gvsig.fmap.MapControl)
+     */
+    public void setMapControl(MapControl mc) {
+        mapControl = mc;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#getImageCursor()
+     */
+    public Image getImageCursor() {
+        return getListener().getImageCursor();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#getMapControl()
+     */
+    public MapControl getMapControl() {
+        return mapControl;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseClicked(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseClicked(MouseEvent e) throws BehaviorException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseEntered(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseEntered(MouseEvent e) throws BehaviorException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseExited(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseExited(MouseEvent e) throws BehaviorException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mousePressed(java.awt
+     * .event.MouseEvent)
+     */
+    public void mousePressed(MouseEvent e) throws BehaviorException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseReleased(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseReleased(MouseEvent e) throws BehaviorException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseDragged(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseDragged(MouseEvent e) throws BehaviorException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseMoved(java.awt.
+     * event.MouseEvent)
+     */
+    public void mouseMoved(MouseEvent e) throws BehaviorException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseWheelMoved(java
+     * .awt.event.MouseWheelEvent)
+     */
+    public void mouseWheelMoved(MouseWheelEvent e) throws BehaviorException {
+    }
+
+    /**
+     * Create point. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     *
+     * @param x
+     *            The X coordinate
+     * @param y
+     *            The y coordinate
+     * @return
+     *         The Point
+     */
+    protected Point createPoint(double x, double y) {
+        Point point = null;
+        try {
+            point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+            point.setX(x);
+            point.setY(y);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating a point with x=" + x + ", y=" + y,
+                new CreateGeometryException(TYPES.POINT, SUBTYPES.GEOM2D, e));
+        }
+        return point;
+    }
+
+    /**
+     * Create an Arc. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     *
+     * @param p1
+     * @param p2
+     * @param p3
+     * @return
+     *         The arc
+     */
+    protected Arc createArc(Point2D p1, Point2D p2, Point2D p3) {
+        return createArc(createPoint(p1), createPoint(p2), createPoint(p3));
+    }
+
+    /**
+     * Create an arc. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     *
+     * @param p1
+     * @param p2
+     * @param p3
+     * @return
+     *         The arc
+     */
+    protected Arc createArc(Point p1, Point p2, Point p3) {
+        Arc arc = null;
+        try {
+            arc = (Arc) geomManager.create(TYPES.ARC, SUBTYPES.GEOM2D);
+            arc.setPoints(p1, p2, p3);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating and arc with p1=" + p1 + ", p2=" + p2
+                + ",p3=" + p3, new CreateGeometryException(TYPES.ARC,
+                SUBTYPES.GEOM2D, e));
+        } catch (IllegalArgumentException ex) {
+            LOG.info("Warning: unable to create arc from points: " + p1.getX()
+                + " " + p1.getY() + " :: " + p2.getX() + " " + p2.getY()
+                + " :: " + p3.getX() + " " + p3.getY());
+            arc = null;
+        }
+        return arc;
+    }
+
+    /**
+     * Create a curve point. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     *
+     * @param p1
+     *            The AWT point
+     * @return
+     *         The gvSIG point
+     */
+    protected Point createPoint(Point2D p1) {
+        return createPoint(p1.getX(), p1.getY());
+    }
+
+    /**
+     * Create an arc. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     *
+     * @param centerX
+     * @param centerY
+     * @param radious
+     * @param angleStart
+     * @param angleExtent
+     * @return The arc
+     */
+    protected Arc createArc(double centerX, double centerY, double radious,
+        double angleStart, double angleExtent) {
+        Arc arc = null;
+        try {
+            arc = (Arc) geomManager.create(TYPES.ARC, SUBTYPES.GEOM2D);
+            arc.setPoints(createPoint(centerX, centerY), radious, angleStart,
+                angleExtent);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error(
+                "Error creating an arc with centerX=" + centerX + ", centerY="
+                    + centerY + ", radious=" + radious + ", angleStart="
+                    + angleStart + ", angleExtent=" + angleExtent,
+                new CreateGeometryException(TYPES.ARC, SUBTYPES.GEOM2D, e));
+        } catch (IllegalArgumentException ex) {
+            LOG.info("Warning: unable to create arc from points.");
+            arc = null;
+        }
+        return arc;
+    }
+
+    /**
+     * Create an circle. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     *
+     * @param centerX
+     * @param centerY
+     * @param radious
+     * @return
+     *         The arc
+     */
+    protected Circle createCircle(double centerX, double centerY, double radious) {
+        Circle circle = null;
+        try {
+            circle = (Circle) geomManager.create(TYPES.CIRCLE, SUBTYPES.GEOM2D);
+            circle.setPoints(createPoint(centerX, centerY), radious);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating circle with centerX=" + centerX
+                + ", centerY=" + centerY + ", radious=" + radious,
+                new CreateGeometryException(TYPES.CIRCLE, SUBTYPES.GEOM2D, e));
+        }
+
+        return circle;
+    }
+
+    /**
+     * Create a lineString from a GeneralPath. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     *
+     * @param gpx
+     *            The GeneralPath
+     * @return
+     *         The LineString
+     */
+    protected Curve createLineString(GeneralPathX gpx) {
+        Curve curve = null;
+        try {
+            curve = (Curve) geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
+            curve.setGeneralPath(gpx);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating lineString with GeneralPathX=" + gpx,
+                new CreateGeometryException(TYPES.CURVE, SUBTYPES.GEOM2D, e));
+        }
+        return curve;
+    }
+
+    public void resetMyButton() {
+        this.isMyButton = false;
+    }
+
+    public boolean isMyButton(MouseEvent e) {
+        if (e == null) {
+            return this.isMyButton;
+        }
+        switch (this.mouseButton) {
+        case BUTTON_LEFT:
+        default:
+            this.isMyButton = SwingUtilities.isLeftMouseButton(e);
+            return this.isMyButton;
+        case BUTTON_MIDDLE:
+            this.isMyButton = SwingUtilities.isMiddleMouseButton(e);
+            return this.isMyButton;
+        case BUTTON_RIGHT:
+            this.isMyButton = SwingUtilities.isRightMouseButton(e);
+            return this.isMyButton;
+        }
+    }
+
+    public boolean isMyButton() {
+        return this.isMyButton;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/Behavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/CircleBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/CircleBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/CircleBehavior.java	(revision 42196)
@@ -0,0 +1,205 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.Color;
+import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.util.Date;
+
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.CircleListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Behavior that allows user to draw a circle on the image of the associated
+ *  <code>MapControl</code> using a {@link PolylineListener PolylineListener}.</p>
+ *
+ * @author Laura
+ * @author Pablo Piqueras Bartolom�
+ */
+public class CircleBehavior extends Behavior {
+        private static final Logger logger = LoggerFactory.getLogger(CircleBehavior.class);
+
+	/**
+	 * First point set, that represents the center of the circle.
+	 */
+	protected Point2D m_FirstPoint;
+
+	/**
+	 * Second point set, that permits calculate the radius of the circle.
+	 */
+	protected Point2D m_LastPoint;
+
+	/**
+	 * Tool listener used to work with the <code>MapControl</code> object.
+	 *
+	 * @see #getListener()
+	 * @see #setListener(ToolListener)
+	 */
+	private CircleListener listener;
+
+	/**
+	 * Determines if user setting the radius of the circle (with one click of the button 1 of the mouse), or not.
+	 */
+	protected boolean isClicked = false;
+
+	/**
+	 * <p>Creates a new behavior for selecting circle areas.</p>
+	 *
+	 * @param zili listener used to permit this object to work with the associated <code>MapControl</code>
+	 */
+	public CircleBehavior(CircleListener zili) {
+		listener = zili;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#paintComponent(java.awt.Graphics)
+	 */
+	public void paintComponent(MapControlDrawer mapControlDrawer) {
+		double radio;
+		mapControlDrawer.setColor(Color.black);
+
+
+		if ((m_FirstPoint != null) && (m_LastPoint != null)) {
+			ViewPort vp = getMapControl().getMapContext().getViewPort();
+			Point2D p1 = vp.toMapPoint(m_FirstPoint);
+			Point2D p2 = vp.toMapPoint(m_LastPoint);
+
+			radio = p1.distance(p2);
+			if(radio!=0.0){
+				Arc arc = null;
+				arc = createArc(p1.getX(), p1.getY(),
+				    radio, 0, Math.PI*2);
+				if (arc != null) {
+				    mapControlDrawer.draw(arc);
+				}
+			}
+
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+            if (this.isMyButton(e)) {
+                m_FirstPoint = e.getPoint();
+                isClicked = true;
+                getMapControl().repaint();
+                if (listener.cancelDrawing()) {
+                    getMapControl().cancelDrawing();
+                    isClicked = false;
+                    getMapControl().repaint();
+                }
+            }
+
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) throws BehaviorException {
+            if( this.isMyButton(e) ) {
+		m_FirstPoint = null;
+		m_LastPoint = null;
+		isClicked = false;
+            }
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) throws BehaviorException {
+		mouseMoved(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e)  throws BehaviorException {
+		if (m_FirstPoint == null) return;
+
+		m_LastPoint = e.getPoint();
+
+		ViewPort vp = getMapControl().getMapContext().getViewPort();
+
+		Point2D p1 = vp.toMapPoint(m_FirstPoint);
+		Point2D p2 = vp.toMapPoint(m_LastPoint);
+
+		//	Fijamos el nuevo extent
+		Rectangle2D.Double r = new Rectangle2D.Double();
+		r.setFrameFromDiagonal(p1, p2);
+
+		Rectangle2D rectPixel = new Rectangle();
+		rectPixel.setFrameFromDiagonal(m_FirstPoint, m_LastPoint);
+
+		Double[] x = new Double[2];
+		Double[] y = new Double[2];
+		x[0] = new Double(p1.getX());
+		x[1] = new Double(p2.getX());
+		y[0] = new Double(p1.getY());
+		y[1] = new Double(p2.getY());
+		MeasureEvent event = new MeasureEvent(x, y, e);
+		listener.circle(event);
+		getMapControl().repaint();
+	}
+
+	/**
+	 * <p>Sets a tool listener to work with the <code>MapControl</code> using this behavior.</p>
+	 *
+	 * @param listener a <code>CircleListener</code> object for this behavior
+	 */
+	public void setListener(ToolListener listener) {
+		this.listener = (CircleListener)listener;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+	 */
+	public ToolListener getListener() {
+		return listener;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/CircleBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseMovementBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseMovementBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseMovementBehavior.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.event.MouseEvent;
+
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+
+
+/**
+ * <p>Behavior that permits user to move and drag the mouse on the image of the associated
+ *  <code>MapControl</code> instance using a {@link PointListener PointListener}.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MouseMovementBehavior extends Behavior {
+	/**
+	 * Tool listener used to work with the <code>MapControl</code> object.
+	 *
+	 * @see #getListener()
+	 * @see #setListener(ToolListener)
+	 */
+	protected PointListener listener;
+
+	/**
+	 * <p>Creates a new behavior for moving or dragging the mouse on the image of the associated <code>MapControl</code> instance.</p>
+	 *
+	 * @param mli listener used to permit this object to work with the associated <code>MapControl</code>
+	 */
+	public MouseMovementBehavior(PointListener mli) {
+		listener = mli;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) throws BehaviorException {
+		mouseMoved(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) throws BehaviorException {
+		PointEvent event = new PointEvent(e.getPoint(), e);
+		listener.point(event);
+	}
+
+	/**
+	 * <p>Sets a tool listener to work with the <code>MapControl</code> using this behavior.</p>
+	 *
+	 * @param listener a <code>PointListener</code> object for this behavior
+	 */
+	public void setListener(ToolListener listener) {
+		this.listener = (PointListener) listener;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+	 */
+	public ToolListener getListener() {
+		return listener;
+	}
+
+	   /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#paintComponent(org.gvsig.fmap.mapcontrol.MapControlDrawer)
+     */
+    public void paintComponent(MapControlDrawer mapControlDrawer) {
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MouseMovementBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/RectangleBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/RectangleBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/RectangleBehavior.java	(revision 42196)
@@ -0,0 +1,212 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.RectangleListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Behavior that permits user to select a rectangular area on the associated <code>MapControl</code> using
+ *  a {@link RectangleListener RectangleListener}.</p>
+ *
+ * @author Vicente Caballero Navarro
+ * @author Pablo Piqueras Bartolom�
+ */
+public class RectangleBehavior extends Behavior {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(RectangleBehavior.class);
+
+	/**
+	 * First point of the rectangle area, that represents a corner.
+	 */
+	private Point2D m_FirstPoint;
+
+	/**
+	 * Second point of the rectangle area, that represents the opposite corner of the first,
+	 *  along the diagonal.
+	 */
+	private Point2D m_LastPoint;
+
+	/**
+	 * Tool listener used to work with the <code>MapControl</code> object.
+	 *
+	 * @see #getListener()
+	 * @see #setListener(ToolListener)
+	 */
+	private RectangleListener listener;
+
+	/**
+	 * <p>Creates a new behavior for selecting rectangle areas.</p>
+	 *
+	 * @param zili listener used to permit this object to work with the associated <code>MapControl</code>
+	 */
+	public RectangleBehavior(RectangleListener zili) {
+		listener = zili;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#paintComponent(java.awt.Graphics)
+	 */
+	public void paintComponent(MapControlDrawer mapControlDrawer) {
+		mapControlDrawer.setColor(Color.black);
+
+		// Borramos el anterior
+		Rectangle r = new Rectangle();
+
+		// Dibujamos el actual
+		if ((m_FirstPoint != null) && (m_LastPoint != null)) {
+			r.setFrameFromDiagonal(m_FirstPoint, m_LastPoint);
+			mapControlDrawer.drawRect(r.x, r.y, r.width, r.height);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+            if( !isMyButton(e) ) {
+                return;
+            }
+		if (e.getButton() == MouseEvent.BUTTON1) {
+			m_FirstPoint = e.getPoint();
+			getMapControl().repaint();
+		}
+		if (listener.cancelDrawing()) {
+			getMapControl().cancelDrawing();
+			getMapControl().repaint();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) throws BehaviorException {
+            if( !isMyButton(e) ) {
+                return;
+            }
+	    if (m_FirstPoint == null) return;
+		Point2D p1;
+		Point2D p2;
+		Point pScreen = e.getPoint();
+
+		ViewPort vp = getMapControl().getMapContext().getViewPort();
+
+		p1 = vp.toMapPoint(m_FirstPoint);
+		p2 = vp.toMapPoint(pScreen);
+
+		if (e.getButton() == MouseEvent.BUTTON1) {
+			//	Fijamos el nuevo extent
+
+			double x=0;
+			double y=0;
+			double x1=0;
+			double y1=0;
+			if (p1.getX()<p2.getX()){
+				x=p1.getX();
+				x1=p2.getX();
+			}else{
+				x=p2.getX();
+				x1=p1.getX();
+			}
+			if (p1.getY()<p2.getY()){
+				y=p1.getY();
+				y1=p2.getY();
+			}else{
+				y=p2.getY();
+				y1=p1.getY();
+			}
+			Envelope r;
+			try {
+				r = geomManager.createEnvelope(x,y,x1,y1, SUBTYPES.GEOM2D);
+				Rectangle2D rectPixel = new Rectangle();
+				rectPixel.setFrameFromDiagonal(m_FirstPoint, pScreen);
+
+				EnvelopeEvent event = new EnvelopeEvent(r, e, rectPixel);
+				listener.rectangle(event);
+			} catch (CreateEnvelopeException e1) {
+				logger.error("Error creating the envelope", e);
+			}//Rectangle2D.Double();
+
+			//			r.setFrameFromDiagonal(p1, p2);
+
+
+		}
+
+		m_FirstPoint = null;
+		m_LastPoint = null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) {
+            if( !isMyButton(e) ) {
+                return;
+            }
+		m_LastPoint = e.getPoint();
+		getMapControl().repaint();
+	}
+
+	/**
+	 * <p>Sets a tool listener to work with the <code>MapControl</code> using this behavior.</p>
+	 *
+	 * @param listener a <code>RectangleListener</code> object for this behavior
+	 */
+	public void setListener(ToolListener listener) {
+		this.listener = (RectangleListener) listener;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+	 */
+	public ToolListener getListener() {
+		return listener;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/RectangleBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MoveBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MoveBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MoveBehavior.java	(revision 42196)
@@ -0,0 +1,160 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.AlphaComposite;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * Behavior that permits user to move the image of the associated
+ * <code>MapControl</code> using a {@link PanListener PanListener}.
+ * </p>
+ *
+ * @author Vicente Caballero Navarro
+ * @author Pablo Piqueras Bartolom�
+ */
+public class MoveBehavior extends Behavior {
+    private static final Logger logger = LoggerFactory.getLogger(MoveBehavior.class);
+    /**
+     * First point of the path in image coordinates.
+     */
+    protected Point2D m_FirstPoint;
+
+    /**
+     * Last point of the path in image coordinates.
+     */
+    protected Point2D m_LastPoint;
+
+    /**
+     * Tool listener used to work with the <code>MapControl</code> object.
+     *
+     * @see #getListener()
+     * @see #setListener(ToolListener)
+     */
+    private PanListener listener;
+
+    /**
+     * <p>
+     * Creates a new behavior for moving the mouse.
+     * </p>
+     *
+     * @param pli
+     *            listener used to permit this object to work with the
+     *            associated <code>MapControl</code>
+     * @param mouseButton
+     */
+    public MoveBehavior(PanListener pli, int mouseButton) {
+        super(mouseButton);
+        listener = pli;
+    }
+
+    public MoveBehavior(PanListener pli) {
+        this(pli,BUTTON_LEFT);
+    }
+
+    @Override
+    public void paintComponent(MapControlDrawer renderer) {
+        if( ! this.isMyButton() ) {
+            return;
+        }
+        super.paintComponent(renderer);
+        BufferedImage image = getMapControl().getImage();
+        if (image != null) {
+            if ((m_FirstPoint != null) && (m_LastPoint != null)) {
+                renderer.setComposite(AlphaComposite.getInstance(
+                    AlphaComposite.SRC_OVER, 0.5f));
+                renderer.drawImage(image,
+                    (int) (m_LastPoint.getX() - m_FirstPoint.getX()),
+                    (int) (m_LastPoint.getY() - m_FirstPoint.getY()));
+            }
+        }
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e) {
+        if (this.isMyButton(e)) {
+            m_FirstPoint = e.getPoint();
+            if (listener.cancelDrawing()) {
+               getMapControl().cancelDrawing();
+           }
+        }
+
+
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e) throws BehaviorException {
+        if (this.isMyButton(e) && m_FirstPoint != null) {
+            doMouseReleased(e);
+            this.resetMyButton();
+        }
+    }
+
+    protected void doMouseReleased(MouseEvent e) throws BehaviorException {
+        MoveEvent event = new MoveEvent(m_FirstPoint, e.getPoint(), e);
+        listener.move(event);
+
+        getMapControl().drawMap(true);
+
+        m_FirstPoint = null;
+    }
+
+
+
+    @Override
+    public void mouseDragged(MouseEvent e) {
+        if (this.isMyButton(e)) {
+            m_LastPoint = e.getPoint();
+            getMapControl().repaint();
+        }
+    }
+
+    /**
+     * <p>
+     * Sets a tool listener to work with the <code>MapControl</code> using this
+     * behavior.
+     * </p>
+     *
+     * @param listener
+     *            a <code>PanListener</code> object for this behavior
+     */
+    public void setListener(ToolListener listener) {
+        this.listener = (PanListener) listener;
+    }
+
+    public ToolListener getListener() {
+        return listener;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/MoveBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolygonBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolygonBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolygonBehavior.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
+
+
+
+/**
+ * <p>Behavior that permits user to draw a polygon by its vertexes on the image of the associated
+ *  <code>MapControl</code> using a {@link PolylineListener PolylineListener}.</p>
+ *
+ * @author Vicente Caballero Navarro
+ * @author Pablo Piqueras Bartolom�
+ */
+public class PolygonBehavior extends PolylineBehavior {
+	/**
+	 * <p>Creates a new behavior for drawing a polygon by its vertexes.</p>
+	 *
+	 * @param ali tool listener used to permit this object to work with the associated <code>MapControl</code>
+	 */
+	public PolygonBehavior(PolylineListener ali) {
+		super(ali);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#paintComponent(org.gvsig.fmap.mapcontrol.MapControlDrawer)
+	 */
+	public void paintComponent(MapControlDrawer mapControlDrawer) {
+		super.paintComponent(mapControlDrawer);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.PolylineBehavior#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) throws BehaviorException {
+            if( !isMyButton(e) ) {
+                return;
+            }
+		if (e.getClickCount() == 2) {
+			listener.polylineFinished(new MeasureEvent((Double[]) arrayX.toArray(new Double[arrayX.size()]), (Double[]) arrayY.toArray(new Double[arrayY.size()]), e));
+
+			arrayX.clear();
+			arrayY.clear();
+
+			isClicked = false;
+		} else {
+			isClicked = true;
+
+			if (arrayX.size() == 0) {
+				addPoint(getMapControl().getViewPort().toMapPoint(e.getPoint()));
+				addPoint(getMapControl().getViewPort().toMapPoint(e.getPoint()));
+				addPoint(getMapControl().getViewPort().toMapPoint(e.getPoint()));
+			} else {
+				addAntPoint(getMapControl().getViewPort().toMapPoint(e.getPoint()));
+			}
+
+			listener.pointFixed(new MeasureEvent((Double[]) arrayX.toArray(new Double[arrayX.size()]), (Double[]) arrayY.toArray(new Double[arrayY.size()]), e));
+		}
+	}
+
+	/**
+	 * <p>Adds a new vertex to the polygon.</p>
+	 *
+	 * @param p a new vertex to the polygon
+	 */
+	private void addAntPoint(Point2D p) {
+		arrayX.add(arrayX.size() - 1, new Double(p.getX()));
+		arrayY.add(arrayY.size() - 1, new Double(p.getY()));
+	}
+
+	/**
+	 * <p>Changes the last vertex added to the polygon.</p>
+	 *
+	 * @param p a new vertex to the polygon
+	 */
+	private void changeAntPoint(Point2D p) {
+		if (arrayX.size() > 2) {
+			arrayX.set(arrayX.size() - 2, new Double(p.getX()));
+			arrayY.set(arrayY.size() - 2, new Double(p.getY()));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.PolylineBehavior#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) throws BehaviorException {
+		if (isClicked) {
+			changeAntPoint(getMapControl().getViewPort().toMapPoint(e.getPoint()));
+
+			MeasureEvent event = new MeasureEvent((Double[]) arrayX.toArray(new Double[arrayX.size()]), (Double[]) arrayY.toArray(new Double[arrayY.size()]), e);
+
+			listener.points(event);
+
+			getMapControl().repaint();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.PolylineBehavior#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) throws BehaviorException {
+		mouseMoved(e);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolygonBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/IBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/IBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/IBehavior.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+
+/**
+ * <p>When a programmer needs to add a way to permit user to interact with the current object where the graphical
+ *  information is stored and represented, (see {@link MapControl MapControl}), must analyze and decide the basic
+ *  <i>behavior</i> nature of the interaction.</p>
+ *
+ * <p>That <i>behavior</i> will manage mouse events and generate information and <i>tool</i> events that the
+ *  associated {@link ToolListener ToolListener} will use to interact with the <code>MapControl</code> object ultimately.</p>
+ *
+ * <p>It will be possible also combine more than one <i>behavior</i> for a tool listener, for having a richness tool.</p>
+ */
+public interface IBehavior {
+	/**
+	 * <p>Gets the <code>ToolListener</code> used by this behavior to perform actions on the
+	 *  associated <code>MapControl</code> object.</p>
+	 *
+	 * @return the <code>ToolListener</code> used by this behavior
+	 */
+	public ToolListener getListener();
+
+	/**
+	 * <p>Method executed in real-time, when user is working with a tool on the associated <code>MapControl</code>
+	 *  object, repainting the <code>MapControl</code>'s image.</p>
+	 *
+	 * <p>Returns immediately in all cases, even if the complete image has not yet been loaded.</p>
+	 *
+	 * <p>This method will be implemented according to the specific nature of each behavior, and its
+	 *  extra and particular features.</p>
+	 *
+	 * @see Graphics#drawImage(java.awt.Image, int, int, java.awt.image.ImageObserver)
+	 */
+	public void paintComponent(MapControlDrawer renderer);
+
+	/**
+	 * <p>Associates this behavior to a <code>MapControl</code> object.</p>
+	 *
+	 * @param mc the <code>MapControl</code> object to associate
+	 *
+	 * @see #getMapControl()
+	 */
+	public void setMapControl(MapControl mc);
+
+	/**
+	 * <p>Gets the mouse cursor of the tool listener associated to this behavior.</p>
+	 *
+	 * @return the mouse cursor of the tool listener associated
+	 */
+	public Image getImageCursor();
+
+	/**
+	 * <p>Returns the reference to the <code>MapControl</code> object that this behavior uses.</p>
+	 *
+	 * @return the <code>MapControl</code> object used this behavior
+	 *
+	 * @see #setMapControl(MapControl)
+	 */
+	public MapControl getMapControl();
+
+	/**
+	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse clicked event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mouseClicked(MouseEvent e) throws BehaviorException;
+
+	/**
+	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse entered event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mouseEntered(MouseEvent e) throws BehaviorException;
+
+	/**
+	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse exited event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mouseExited(MouseEvent e) throws BehaviorException;
+
+	/**
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse pressed event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mousePressed(MouseEvent e) throws BehaviorException;
+
+	/**
+	 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse released event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mouseReleased(MouseEvent e) throws BehaviorException;
+
+	/**
+	 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse dragged event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mouseDragged(MouseEvent e) throws BehaviorException;
+
+	/**
+	 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse moved event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mouseMoved(MouseEvent e) throws BehaviorException;
+
+	/**
+	 * @see java.awt.event.MouseWheelListener#mouseWheelMoved(java.awt.event.MouseWheelEvent)
+	 *
+	 * @throws BehaviorException any exception processing the action associated to a <i>mouse wheel event</i>, by the <code>IBehavior</code> object
+	 */
+	public void mouseWheelMoved(MouseWheelEvent e) throws BehaviorException;
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/IBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PointBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PointBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PointBehavior.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.event.MouseEvent;
+
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+
+
+/**
+ * <p>Behavior that permits user to select a point with a double click mouse action, on the associated
+ *  <code>MapControl</code> using a {@link PointListener PointListener}.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PointBehavior extends Behavior {
+	/**
+	 * Tool listener used to work with the <<code>MapControl</code> object.
+	 *
+	 * @see #getListener()
+	 * @see #setListener(ToolListener)
+	 */
+	private PointListener listener;
+
+	/**
+	 * Flag that determines a double click user action.
+	 */
+	private boolean doubleClick=false;
+
+	/**
+ 	 * <p>Creates a new behavior for selecting a point.</p>
+ 	 *
+	 * @param l listener used to permit this object to work with the associated <code>MapControl</code>
+	 */
+	public PointBehavior(PointListener l, int mouseButton) {
+            super(mouseButton);
+            listener = l;
+	}
+
+	public PointBehavior(PointListener l) {
+            this(l,BUTTON_LEFT);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+                if( !isMyButton(e) ) {
+                    return;
+                }
+		if (listener.cancelDrawing()) {
+			getMapControl().cancelDrawing();
+		}
+		if (e.getClickCount()==2){
+			doubleClick=true;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) throws BehaviorException {
+                if( !isMyButton(e) ) {
+                    return;
+                }
+		PointEvent event = new PointEvent(e.getPoint(), e, this.getMapControl());
+		listener.point(event);
+		if (doubleClick){
+			listener.pointDoubleClick(event);
+			doubleClick=false;
+		}
+	}
+
+	/**
+	 * <p>Sets a tool listener to work with the <code>MapControl</code> using this behavior.</p>
+	 *
+	 * @param listener a <code>PointListener</code> object for this behavior
+	 */
+	public void setListener(ToolListener listener) {
+		this.listener = (PointListener) listener;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+	 */
+	public ToolListener getListener() {
+		return listener;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PointBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/DraggerBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/DraggerBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/DraggerBehavior.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+
+
+/**
+ * <p>Behavior that permits user to drag the image of the associated
+ *  <code>MapControl</code> using a {@link PanListener PanListener}.</p>
+ *
+ * @author Vicente Caballero Navarro
+  * @author Pablo Piqueras Bartolom�
+ */
+public class DraggerBehavior extends Behavior {
+	/**
+	 * First point of the path in image coordinates.
+	 */
+	private Point2D m_FirstPoint;
+
+	/**
+	 * Tool listener used to work with the <code>MapControl</code> object.
+	 *
+	 * @see #getListener()
+	 * @see #setListener(ToolListener)
+	 */
+	private PanListener listener;
+
+	/**
+ 	 * <p>Creates a new behavior for dragging the mouse.</p>
+ 	 *
+	 * @param pli listener used to permit this object to work with the associated <code>MapControl</code>
+	 */
+	public DraggerBehavior(PanListener pli) {
+		listener = pli;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior#paintComponent(org.gvsig.fmap.mapcontrol.MapControlDrawer)
+	 */
+	public void paintComponent(MapControlDrawer mapControlDrawer) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		if (e.getButton() == MouseEvent.BUTTON1) {
+			m_FirstPoint = e.getPoint();
+		}
+
+		if (listener.cancelDrawing()) {
+			getMapControl().cancelDrawing();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) throws BehaviorException {
+		m_FirstPoint = null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) throws BehaviorException {
+		MoveEvent event = new MoveEvent(m_FirstPoint, e.getPoint(), e);
+		listener.move(event);
+		getMapControl().repaint();
+	}
+
+	/**
+	 * <p>Sets a tool listener to work with the <code>MapControl</code> using this behavior.</p>
+	 *
+	 * @param listener a <code>PanListener</code> object for this behavior
+	 */
+	public void setListener(ToolListener listener) {
+		this.listener = (PanListener) listener;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+	 */
+	public ToolListener getListener() {
+		return listener;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/DraggerBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolylineBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolylineBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolylineBehavior.java	(revision 42196)
@@ -0,0 +1,200 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Behavior;
+
+import java.awt.Color;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+
+
+/**
+ * <p>Behavior that allows user to draw a polyline by its vertexes on the image of the associated
+ *  <code>MapControl</code> using a {@link PolylineListener PolylineListener}.</p>
+ *
+ * @author Vicente Caballero Navarro
+ * @author Pablo Piqueras Bartolom�
+ */
+public class PolylineBehavior extends Behavior {
+	/**
+	 * The abscissa coordinate of all vertexes of the polyline.
+	 */
+	protected ArrayList arrayX = new ArrayList(); //<Double>
+
+	/**
+	 * The ordinate coordinate of all vertexes of the polyline.
+	 */
+	protected ArrayList arrayY = new ArrayList(); //<Double>
+
+	/**
+	 * Determines if user is setting the vertexes (with one click of the button 1 of the mouse), or not.
+	 */
+	protected boolean isClicked = false;
+
+	/**
+	 * Tool listener used to work with the <code>MapControl</code> object.
+	 *
+	 * @see #getListener()
+	 * @see #setListener(ToolListener)
+	 */
+	protected PolylineListener listener;
+
+	/**
+	 * <p>Creates a new behavior for drawing a polyline by its vertexes.</p>
+	 *
+	 * @param mli listener used to permit this object to work with the associated <code>MapControl</code>
+	 */
+	public PolylineBehavior(PolylineListener mli) {
+                super(Behavior.BUTTON_LEFT);
+		listener = mli;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#paintComponent(java.awt.Graphics)
+	 */
+	public void paintComponent(MapControlDrawer mapControlDrawer) {
+		mapControlDrawer.setColor(Color.black);
+
+		if (!arrayX.isEmpty()) {
+			drawPolyLine(mapControlDrawer);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) throws BehaviorException {
+            if( !isMyButton(e) ) {
+                return;
+            }
+		if (e.getClickCount() == 2) {
+			listener.polylineFinished(new MeasureEvent((Double[]) arrayX.toArray(new Double[arrayX.size()]), (Double[]) arrayY.toArray(new Double[arrayY.size()]), e));
+
+			arrayX.clear();
+			arrayY.clear();
+
+			isClicked = false;
+		} else {
+			isClicked = true;
+			Point2D point = getMapControl().getViewPort().toMapPoint(e.getPoint());
+			addPoint(point);
+
+			if (arrayX.size() < 2) {
+				addPoint(point);
+			}
+
+			listener.pointFixed(new MeasureEvent((Double[]) arrayX.toArray(new Double[arrayX.size()]), (Double[]) arrayY.toArray(new Double[arrayY.size()]), e));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) throws BehaviorException {
+		mouseMoved(e);
+	}
+
+	/**
+	 * <p>Changes the last point added of the polyline.</p>
+	 *
+	 * @param p a point which will replace the last added to the polyline
+	 */
+	protected void changeLastPoint(Point2D p) {
+		if (arrayX.size() > 0) {
+			arrayX.set(arrayX.size() - 1, new Double(p.getX()));
+			arrayY.set(arrayY.size() - 1, new Double(p.getY()));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) throws BehaviorException {
+		if (isClicked) {
+			//System.err.println("moved despues de click");
+			changeLastPoint(getMapControl().getViewPort().toMapPoint(e.getPoint()));
+
+			MeasureEvent event = new MeasureEvent((Double[]) arrayX.toArray(new Double[arrayX.size()]), (Double[]) arrayY.toArray(new Double[arrayY.size()]), e);
+
+			listener.points(event);
+			getMapControl().repaint();
+		}
+	}
+
+	/**
+	 * <p>Draws the polyline in the <code>Graphics2D</code> of the associated <code>MapControl</code>.</p>
+         * @param mapControlDrawer
+	 */
+	protected void drawPolyLine(MapControlDrawer mapControlDrawer) {
+		GeneralPathX polyline = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, arrayX.size());
+
+		polyline.moveTo(((Double) arrayX.get(0)).doubleValue(),
+				((Double) arrayY.get(0)).doubleValue());
+
+		for (int index = 0; index < arrayX.size(); index++) {
+		    polyline.lineTo(((Double) arrayX.get(index)).doubleValue(),((Double) arrayY.get(index)).doubleValue());
+		}
+
+		mapControlDrawer.draw(createLineString(polyline));
+	}
+
+	/**
+	 * <p>Adds a new point to the polyline.</p>
+	 *
+	 * @param p a new point to the polyline
+	 */
+	protected void addPoint(Point2D p) {
+		arrayX.add(new Double(p.getX()));
+		arrayY.add(new Double(p.getY()));
+	}
+
+	/**
+	 * <p>Sets a tool listener to work with the <code>MapControl</code> using this behavior.</p>
+	 *
+	 * @param listener a <code>PolylineListener</code> object for this behavior
+	 */
+	public void setListener(ToolListener listener) {
+		this.listener = (PolylineListener) listener;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+	 */
+	public ToolListener getListener() {
+		return listener;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Behavior/PolylineBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/RectangleSelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/RectangleSelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/RectangleSelectionListener.java	(revision 42196)
@@ -0,0 +1,112 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.RectangleListener;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+/**
+ * <p>Listener that selects all features of the active and vector layers which intersect with the defined
+ *  rectangle area in the associated {@link MapControl MapControl} object.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class RectangleSelectionListener implements RectangleListener {
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	private MapControl mapCtrl;
+
+	/**
+  	 * <p>Creates a new <code>RectangleSelectionListener</code> object.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where is defined the rectangle
+	 */
+	public RectangleSelectionListener(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+
+	public void rectangle(EnvelopeEvent event) throws BehaviorException {
+		try {
+			// mapCtrl.getMapContext().selectByRect(event.getWorldCoordRect());
+            Envelope rect = event.getWorldCoordRect();
+            FLayer[] actives = mapCtrl.getMapContext().getLayers().getActives();
+            
+            for (int i = 0; i < actives.length; i++) {
+                if (actives[i] instanceof FLyrVect) {
+                    FLyrVect lyrVect = (FLyrVect) actives[i];
+					FeatureSet newSelection = null;
+					try {
+						newSelection =
+								lyrVect.queryByEnvelope(rect,
+										lyrVect.getFeatureStore()
+												.getDefaultFeatureType());
+						if (event.getEvent().isControlDown()) {
+							FeatureSelection currentSelection = (FeatureSelection)lyrVect.getFeatureStore().getSelection();
+							DisposableIterator it = newSelection.fastIterator();
+							while(it.hasNext()) {
+								Object obj = it.next();
+								if(obj instanceof Feature) {
+									Feature feat = ((Feature)obj);
+									if(currentSelection.isSelected(feat))
+										currentSelection.deselect(feat);
+									else
+										currentSelection.select(feat);
+								}
+							}
+						} else {
+							lyrVect.getDataStore().setSelection(newSelection);
+						}
+					} finally {
+						DisposeUtils.dispose(newSelection);
+                    }
+                }
+            }
+
+		} catch (DataException e) {
+			throw new BehaviorException("No se pudo hacer la selecci�n", e);
+		}
+	}
+
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-select-by-rectangle");
+	}
+
+	public boolean cancelDrawing() {
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/RectangleSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MoveEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MoveEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MoveEvent.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Events;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+
+/**
+ * <p><code>MoveEvent</code> is used to notify a movement of the mouse between two points 2D.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MoveEvent {
+	/**
+	 * <p>Initial position of the drag & drop movement.</p>
+	 */
+	private Point2D from;
+    
+    /**
+     * <p>Final position of the drag & drop movement.</p>
+     */
+	private Point2D to;
+    
+    /**
+     * <p>Mouse event that has been the cause of creating this one.</p> 
+     */
+	private MouseEvent event;
+
+    /**
+     * <p>Creates a new <code>MoveEvent</code> with all necessary data.</p>
+     *
+	 * @param from initial 2D position of the movement
+	 * @param to final 2D position of the movement
+	 * @param e mouse event that has been the cause of creating this one
+     */
+    public MoveEvent(Point2D from, Point2D to, MouseEvent e) {
+        this.from = from;
+        this.to = to;
+        event = e;
+    }
+
+	/**
+	 * <p>Gets the initial 2D position of the movement.</p>
+	 *
+	 * @return initial 2D position of the movement
+	 */
+    public Point2D getFrom() {
+        return from;
+    }
+
+	/**
+	 * <p>Gets the final 2D position of the movement.</p>
+	 *
+	 * @return final 2D position of the movement
+	 */
+    public Point2D getTo() {
+        return to;
+    }
+
+    /**
+	 * <p>Gets the event that has been the cause of creating this one.</p>
+	 * 
+	 * @return mouse event that has been the cause of creating this one
+     */
+    public MouseEvent getEvent() {
+		return event;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MoveEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/PointEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/PointEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/PointEvent.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Events;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * <p><code>PointEvent</code> is used to notify a selection of a point with the mouse.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PointEvent {
+	/**
+	 * <p>The point 2D associated to this event.</p>
+	 */
+	private Point2D p;
+
+	/**
+	 * <p>The point 2D associated to this event.</p>
+	 */
+	private MouseEvent e;
+
+	private MapControl mapControl;
+
+	/**
+	 * <p>Creates a new <code>PointEvent</code> with all necessary data.</p>
+	 *
+	 * @param p the point 2D associated to this event
+	 * @param e event that has been the cause of creating this one
+	 */
+	public PointEvent(Point2D p, MouseEvent e) {
+		this.p = p;
+		this.e = e;
+		this.mapControl = null;
+	}
+
+	public PointEvent(Point2D p, MouseEvent e, MapControl mapControl) {
+		this(p, e);
+		this.mapControl = mapControl;
+	}
+	
+	/**
+	 * <p>Gets the point 2D in screen coordinates where this event was produced.</p>
+	 *
+	 * @return the point 2D associated to this event
+	 */
+	public Point2D getPoint() {
+		return p;
+	}
+
+	/**
+	 * Gets the Geometry point 2D in map coordinates where this event was produced.
+	 *
+	 * @return the Geometry point 2D associated to this event
+	 */
+	public Point getMapPoint() {
+		if( mapControl == null ) {
+			throw new UnsupportedOperationException();
+		}
+		return this.mapControl.getViewPort().convertToMapPoint(p);
+	}
+
+	
+	/**
+	 * <p>Sets the point 2D where this event was produced.</p>
+	 *
+	 * @param the point 2D associated to this event
+	 */
+	public void setPoint(Point2D p) {
+		this.p = p;
+	}
+
+    /**
+	 * <p>Gets the event that has been the cause of creating this one.</p>
+	 * 
+	 * @return mouse event that has been the cause of creating this one
+     */
+	public MouseEvent getEvent() {
+		return e;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/PointEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/EnvelopeEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/EnvelopeEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/EnvelopeEvent.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Events;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+
+/**
+ * <p><code>RectangleEvent</code> is used to notify a selection of a rectangular area in a view, with the mouse.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class EnvelopeEvent {
+	/**
+	 * <p>Rectangle selected in world coordinates.</p>
+	 */
+	private Envelope rect;
+
+    /**
+     * <p>Rectangle selected in view (pixel) coordinates.</p>
+     */
+	private Rectangle2D pixRect;
+
+    /**
+	 * <p>Mouse event that has been the cause of creating this event.</p>
+     */
+	private MouseEvent event;
+
+	/**
+	 * <p>Creates a new <code>RectangleEvent</code> with all necessary data.</p>
+	 *
+	 * @param worldRect rectangle selected in world coordinates
+	 * @param pixelRect rectangle selected in view (pixel) coordinates
+	 * @param e mouse event that has been the cause of creating this event
+	 */
+    public EnvelopeEvent(Envelope worldRect, MouseEvent e, Rectangle2D pixelRect) {
+        rect = worldRect;
+        event = e;
+        pixRect = pixelRect;
+    }
+
+	/**
+	 * <p>Gets the rectangle selected in world coordinates.</p>
+	 *
+	 * @return rectangle selected in world coordinates
+	 */
+    public Envelope getWorldCoordRect() {
+        return rect;
+    }
+
+    /**
+     * <p>Gets the rectangle selected in pixel coordinates.</p>
+     *
+     * <p>This is useful for doing some verifications, like if rectangle is thinner than
+     *  3 pixels of width and height, keeping the zoom instead of reducing it.</p>
+     *
+     * @return rectangle selected in view (pixel) coordinates
+     */
+    public Rectangle2D getPixelCoordRect() {
+        return pixRect;
+    }
+
+    /**
+	 * <p>Gets the event that has been the cause of creating this one.</p>
+	 *
+	 * @return mouse event that has been the cause of creating this one
+     */
+	public MouseEvent getEvent() {
+		return event;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/EnvelopeEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MeasureEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MeasureEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MeasureEvent.java	(revision 42196)
@@ -0,0 +1,128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Events;
+
+import java.awt.event.MouseEvent;
+
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+
+/**
+ * <p><code>MeasureEvent</code> is used to notify the selection of a polyline.</p>
+ *
+ * <p>Stores the information about the 2D vertexes and the {@link GeneralPathX GeneralPathX}
+ *  between them.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MeasureEvent {
+	/**
+	 * The polyline, broken down in straight lines, and quadratic and cubic (B�zier) curves.
+	 */
+	private GeneralPathX gp;
+
+	/**
+	 * Vector with the X coordinates.
+	 */
+	private Double[] x;
+
+	/**
+	 * Vector with the Y coordinates.
+	 */
+	private Double[] y;
+
+	/**
+	 * Mouse event that has been the cause of creating this event.
+	 */
+	private MouseEvent event;
+
+	/**
+	 * <p>Creates a new <code>MeasureEvent</code> with all necessary data.</p>
+	 * <p>The general path is calculated according the enclosed regions of the path alternate between interior
+	 *  and exterior areas are traversed from the outside of the path towards a point inside the region.</p>
+	 *
+	 * @param x vector with the X coordinates
+	 * @param y vector with the Y coordinates
+	 * @param e event that has been the cause of creating this one
+	 */
+	public MeasureEvent(Double[] x, Double[] y, MouseEvent e) {
+		this.x = x;
+		this.y = y;
+		this.event = e;
+		gp = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, x.length);
+		gp.moveTo(x[0].doubleValue(), y[0].doubleValue());
+
+		for (int index = 1; index < x.length; index++) {
+			gp.lineTo(x[index].doubleValue(), y[index].doubleValue());
+		}
+	}
+
+	/**
+	 * <p>Gets the {@link GeneralPathX GeneralPathX} of the measurement.</p>
+	 *
+	 * @see GeneralPathX
+	 *
+	 * @return geometric path constructed from straight lines, and quadratic and cubic (B�zier) curves
+	 */
+	public GeneralPathX getGP() {
+		return gp;
+	}
+
+	/**
+	 * <p>Sets the {@link GeneralPathX GeneralPathX} of the measurement.</p>
+	 *
+	 * @see GeneralPathX
+	 *
+	 * @param gP geometric path constructed from straight lines, and quadratic and cubic (B�zier) curves
+	 */
+	public void setGP(GeneralPathX gp) {
+		this.gp = gp;
+	}
+
+	/**
+	 * <p>Gets a vector with the X coordinates.</p>
+	 *
+	 * @return vector with the X coordinates
+	 */
+	public Double[] getXs() {
+		return x;
+	}
+
+	/**
+	 * <p>Gets a vector with the Y coordinates.</p>
+	 *
+	 * @return vector with the Y coordinates
+	 */
+	public Double[] getYs() {
+		return y;
+	}
+
+	/**
+	 * <p>Gets the event that has been the cause of creating this one.</p>
+	 *
+	 * @return mouse event that has been the cause of creating this one
+	 */
+	public MouseEvent getEvent() {
+		return event;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Events/MeasureEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PointListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PointListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PointListener.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+
+
+
+/**
+ * <p>Interface for all tools that reply for a {@link PointEvent PointEvent} produced in the 
+ *  associated {@link MapControl MapControl} object, produced by a simple or double click of a button
+ *  of the mouse.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface PointListener extends ToolListener {
+	/**
+	 * <p>Called when one click is pressed on the associated <code>MapControl</code>, or the location of the cursor
+	 *  of the mouse has changed on it.</p>
+	 *
+	 * @param event mouse event with the coordinates of the point selected on the associated <code>MapControl</code>
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void point(PointEvent event) throws BehaviorException;
+
+	/**
+	 * <p>Called when a double click is pressed on the associated <code>MapControl</code>.</p>
+	 *
+	 * @param event mouse event and the coordinates of the point selected on the associated <code>MapControl</code>
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void pointDoubleClick(PointEvent event) throws BehaviorException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PointListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PolylineListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PolylineListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PolylineListener.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+
+
+
+/**
+ * <p>Interface for all tools that reply for a {@link MeasureEvent MeasureEvent} produced in the 
+ *  associated {@link MapControl MapControl} object, as a consequence of a 2D polyline drawn by the mouse.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface PolylineListener extends ToolListener {
+	/**
+	 * <p>Called when user moves the mouse after selecting a vertex of the polyline.</p>
+	 * <p>Each kind of polyline listener calculates different information with the data of the
+	 *  <code>MeasureEvent</code>, according its nature.</p>
+	 *
+	 * @param event information about the mouse event, and geometry data of the polyline
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void points(MeasureEvent event) throws BehaviorException;
+
+	/**
+	 * <p>Called when user executes a mouse click and selects a vertex of the polyline.</p>
+	 * 
+	 * @param event information about the mouse event, and geometry data of the polyline
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void pointFixed(MeasureEvent event) throws BehaviorException;
+
+	/**
+	 * <p>Called when user executes a double click with the mouse, finishing the 
+	 *  drawn of the polyline.</p>
+	 * 
+	 * <p>All features of the active and vector layers of the associated <code>MapControl</code> object that
+	 *  their area intersect with the polygonal area defined in the <i>event</i>, will be selected.</p> 
+	 *
+	 * @param event information about the mouse event, and geometry data of the polyline
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void polylineFinished(MeasureEvent event) throws BehaviorException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PolylineListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractPointListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractPointListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractPointListener.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+
+public abstract class AbstractPointListener extends AbstractToolListener implements PointListener {
+
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+		// Do thing by default
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractPointListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/ToolListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/ToolListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/ToolListener.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import java.awt.Image;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+
+
+/**
+ * <p>User can interact with a {@link MapControl MapControl} instance, working with a tool that applies changes on it
+ *  processing the events produced by the current {@link Behavior Behavior} of <code>MapControl</code>.</p>
+ *
+ * <p>The process that the tool applies on the <code>MapControl</code> is a consequence of the mouse actions
+ *  that user has done on that area.</p>
+ *
+ * <p>Only some tool listener can be cancelled.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface ToolListener {
+	/**
+	 * <p>Gets the <code>Cursor</code> associated to this tool.</p>
+	 *
+	 * @return component with the bitmap associated to this tool
+	 */
+	public Image getImageCursor();
+
+	/**
+	 * <p>Determines if the drawing process that this tool executes on the <code>MapControl</code>
+	 *  instance could be canceled or not.</p>
+	 *
+	 * @return <code>true</code> if is cancellable; otherwise returns <code>false</code>
+	 */
+	public boolean cancelDrawing();
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/ToolListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PanListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PanListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PanListener.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+
+
+
+/**
+ * <p>Interface for all tools that reply for a {@link MoveEvent MoveEvent} produced in the 
+ *  associated {@link MapControl MapControl} object, as a consequence of a 2D drag and drop
+ *  movement of the mouse.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface PanListener extends ToolListener {
+	/**
+	 * <p>Called when user drags the mouse on the view.</p>
+	 * <p>Updates the extent coordinates according to the direction of the movement between
+	 *  the initial and final points of line determined by the move of the mouse.</p>
+	 *
+	 * @param event mouse event information about the initial and final positions of the movement 
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void move(MoveEvent event) throws BehaviorException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/PanListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractToolListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractToolListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractToolListener.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import java.awt.Image;
+
+import org.gvsig.fmap.IconThemeHelper;
+
+public abstract class AbstractToolListener implements ToolListener {
+
+    /*
+	private final Image img = new ImageIcon(MapControl.class.getResource(
+	"images/PointSelectCursor.gif")).getImage();
+	*/
+
+
+	public boolean cancelDrawing() {
+		return false;
+	}
+
+	public Image getImageCursor() {
+        return IconThemeHelper.getImage("cursor-select-by-point");
+	}
+	
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AbstractToolListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/CircleListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/CircleListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/CircleListener.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+
+
+
+/**
+ * <p>Interface for all tools that reply for a {@link MeasureEvent MeasureEvent} produced in the 
+ *  associated {@link MapControl MapControl} object, as a consequence of a circle area drawn by the mouse.</p>
+ * 
+ * @see ToolListener
+ */
+public interface CircleListener extends ToolListener {
+	/**
+	 * <p>Called when user defines a circular area.</p>
+	 *
+	 * @param event information about the mouse event, and geometry data related with the operation done
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void circle(MeasureEvent event) throws BehaviorException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/CircleListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/RectangleListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/RectangleListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/RectangleListener.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.Listeners;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+
+
+
+/**
+ * <p>Interface specialized for tools that reply for a {@link EnvelopeEvent RectangleEvent} produced in the 
+ *  associated {@link MapControl MapControl} object, as a consequence of a 2D rectangle drawn by the mouse.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface RectangleListener extends ToolListener {
+	/**
+	 * <p>Called when user executes a double click with the mouse, finishing the 
+	 *  drawn of the rectangle.</p>
+	 * 
+	 * <p>All features of the active and vector layers of the associated <code>MapControl</code> object that
+	 *  their area intersect with the polygonal area defined in the <i>event</i>, will be selected.</p> 
+	 *
+	 * @param event mouse event and information about the rectangle defined
+	 *
+	 * @throws BehaviorException will be thrown when fails the process of this tool
+	 */
+	public void rectangle(EnvelopeEvent event) throws BehaviorException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/RectangleListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MeasureListenerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MeasureListenerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MeasureListenerImpl.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.Point;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Listener for calculating the length of the segments of a polyline, defined in the associated {@link MapControl MapControl}
+ *  object.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MeasureListenerImpl implements PolylineListener {
+
+	private static final Logger logger = LoggerFactory.getLogger(MeasureListenerImpl.class);
+	/**
+	 * The image to display when the cursor is active.
+	 */
+//	private final Image iruler = PluginServices.getIconTheme().get("cursor-query-area").getImage();
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapControl mapCtrl;
+
+	/**
+	 * <p>Creates a new listener for calculating the length of a polyline.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where is calculated the length
+	 */
+	public MeasureListenerImpl(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PolylineListener#points(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void points(MeasureEvent event) {
+		double dist = 0;
+		double distAll = 0;
+
+		ViewPort vp = mapCtrl.getMapContext().getViewPort();
+
+		for (int i = 0; i < (event.getXs().length - 1); i++) {
+			dist = 0;
+
+			Point p = new Point(event.getXs()[i].intValue(),
+					event.getXs()[i].intValue());
+			Point p2 = new Point(event.getXs()[i + 1].intValue(),
+					event.getXs()[i + 1].intValue());
+
+			///dist = vp.toMapDistance((int) p.distance(p2));
+			dist = vp.distanceWorld(p, p2);
+			distAll += dist;
+		}
+
+		logger.debug("Distancia = {}, Distancia Total = {}.",dist,distAll);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-query-area");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PolylineListener#pointFixed(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void pointFixed(MeasureEvent event) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PolylineListener#polylineFinished(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void polylineFinished(MeasureEvent event) {
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/MeasureListenerImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/geo/Geo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/geo/Geo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/geo/Geo.java	(revision 42196)
@@ -0,0 +1,173 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.geo;
+
+/**
+ * <p>Mathematical utilities to work with geographical data:
+ *  <ul>
+ *  <li>Geographical constants:
+ *   <ul>
+ *    <li>PI / 2.</li>
+ *    <li>Degrees per radian.</li>
+ *    <li>Square miles per spherical degree.</li>
+ *    <li>Square kilometres per spherical degree.</li>
+ *    <li>Square metres per spherical degree.</li>
+ *   </ul>
+ *  </li>
+ *  <li>Decimal degrees equivalent to <i>m</i> meters.</li>
+ *  <li>The area of a spherical polygon in spherical degrees, given the latitudes and longitudes 
+ *   of <i>n</i> points, according the <a href="http://en.wikipedia.org/wiki/Haversine_formula">Haversine function</a>.
+ *  </ul>
+ * </p> 
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Geo {
+	/**
+	 * <i>PI / 2</i>, having PI = 3.14159265358979323846
+	 */
+	public static double HalfPi = 1.5707963267948966192313;
+
+    /**
+     * Degrees per radian.
+     */
+	public static double Degree = 57.295779513082320876798; /* degrees per radian */
+
+    /**
+     *  Square miles per spherical degree.
+     */
+	public static double SqMi = 273218.4; /* Square mi per spherical degree. */
+
+    /**
+     * Square kilometres per spherical degree.
+     */
+	public static double SqKm = 707632.4; /* Square km per spherical degree. */
+
+    /**
+     * Square metres per spherical degree.
+     */
+	public static double SqM = 707632400000.0; /* Square M per spherical degree. */
+
+
+	/**
+	 * <p>Gets the decimal degrees equivalent to the <i>m</i> meters.</p>
+	 * <p>Uses this formula:</br>
+	 * <b><i>m * R * PI</i></b>, having R = Radius of the Earth at the equator
+	 * </p>
+	 * 
+	 * @param m distance value in meters
+	 * 
+	 * @return <i>m</i> * Radius at the equator
+	 */
+	public static double getDecimalDegrees(double m) {
+    	///(m*180)/ (6378137.0 * Math.PI)
+    	return (m*8.983152841195214E-6);
+    }
+
+    /**
+     * <p>Operation for calculate the <a href="http://en.wikipedia.org/wiki/Haversine_formula">Haversine function</a>:
+     *  <b><i>hav(x)= (1-cos(x))/2</i></b>.</p>
+     * 
+     * @param X length between the difference of a coordinate of two points
+     */
+	private static double hav(double X){
+        return (1.0 - Math.cos(X)) / 2.0;
+    }
+
+    /**
+     * <p>Returns the area of a spherical polygon in spherical degrees,
+     *  given the latitudes and longitudes in <i>lat</i> and <i>lon</i>, respectively.</p>
+     *
+     * <p>The <i>n</i> data points have indexes which range from 0 to N-1.</p>
+     *
+     * <p>Uses the <a href="http://en.wikipedia.org/wiki/Haversine_formula">Haversine function</a> for calculating the
+     *  spherical area of the polygon.</p>
+     *  
+     * @param lat latitude of the vertexes <i>(must be in radians)</i>
+     * @param lon longitude of the vertexes <i>(must be in radians)</i>
+     * @param n number of vertexes in the polygon
+     * 
+     * @return the area of a spherical polygon in spherical degrees
+     */
+    public static double sphericalPolyArea(double[] lat, double[] lon, int n) {
+        int j;
+        int k;
+        double lam1;
+        double lam2 = 0;
+        double beta1;
+        double beta2 = 0;
+        double cosB1;
+        double cosB2 = 0;
+        double havA;
+        double t;
+        double a;
+        double b;
+        double c;
+        double s;
+        double sum;
+        double excess;
+
+        sum = 0;
+
+        for (j = 0; j <= n; j++) {
+            k = j + 1;
+
+            if (j == 0) {
+                lam1 = lon[j];
+                beta1 = lat[j];
+                lam2 = lon[j + 1];
+                beta2 = lat[j + 1];
+                cosB1 = Math.cos(beta1);
+                cosB2 = Math.cos(beta2);
+            } else {
+                k = (j + 1) % (n + 1);
+                lam1 = lam2;
+                beta1 = beta2;
+                lam2 = lon[k];
+                beta2 = lat[k];
+                cosB1 = cosB2;
+                cosB2 = Math.cos(beta2);
+            }
+
+            if (lam1 != lam2) {
+                havA = hav(beta2 - beta1) + (cosB1 * cosB2 * hav(lam2 - lam1));
+                a = 2 * Math.asin(Math.sqrt(havA));
+                b = HalfPi - beta2;
+                c = HalfPi - beta1;
+                s = 0.5 * (a + b + c);
+                t = Math.tan(s / 2) * Math.tan((s - a) / 2) * Math.tan((s - b) / 2) * Math.tan((s -
+                        c) / 2);
+
+                excess = Math.abs(4 * Math.atan(Math.sqrt(Math.abs(t)))) * Degree;
+
+                if (lam2 < lam1) {
+                    excess = -excess;
+                }
+
+                sum = sum + excess;
+            }
+        }
+        return Math.abs(sum);
+    } /*        SphericalPolyArea. */
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/geo/Geo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/IConfigurator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/IConfigurator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/IConfigurator.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.snapping;
+
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+
+public interface IConfigurator {
+	void setSnapper(ISnapper snapper);
+	ISnapper getSnapper();
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/IConfigurator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperGeometriesVectorial.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperGeometriesVectorial.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperGeometriesVectorial.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.snapping.snappers;
+
+import java.awt.geom.Point2D;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+
+
+/**
+ * Snapper vectorial with geometries.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface ISnapperGeometriesVectorial extends ISnapperVectorial {
+    Point2D getSnapPoint(Point2D queryPoint, Geometry geomToSnap,
+        double tolerance, Point2D lastPointEntered);
+
+    void setGeometries(List geoms);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperGeometriesVectorial.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapper.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.snapping.snappers;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+
+/**
+ * @author fjp
+ *
+ */
+public interface ISnapper {
+
+	void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels);
+
+	String getToolTipText();
+
+	/**
+	 * Implement this if you need a Snapper more important than the others.
+	 * Default value is 0 (no prority).
+	 * @return
+	 */
+	int getPriority();
+
+	boolean isEnabled();
+	public void setEnabled(boolean enabled);
+	public void setPriority(int priority);
+	Object getConfigurator();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/impl/AbstractSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/impl/AbstractSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/impl/AbstractSnapper.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+
+public abstract class AbstractSnapper implements ISnapper {
+	private int sizePixels = 10;
+	private Color color = Color.MAGENTA;
+	private boolean enabled;
+	private int priority=10;
+
+	protected static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+	public int getSizePixels() {
+		return sizePixels;
+	}
+
+	public void setSizePixels(int sizePixels) {
+		this.sizePixels = sizePixels;
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public void setColor(Color color) {
+		this.color = color;
+	}
+
+	public Object getConfigurator(){
+//		DefaultConfigurePanel configurePanel=new DefaultConfigurePanel();
+//		return configurePanel;
+		return null;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+	 /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getPriority()
+     */
+    public int getPriority() {
+        return priority;
+    }
+    
+	public void setPriority(int priority) {
+		this.priority=priority;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/impl/AbstractSnapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperRaster.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperRaster.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperRaster.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.snapping.snappers;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+public interface ISnapperRaster extends ISnapper {
+
+	Point2D getSnapPoint(MapControl mapControl, Point2D point, double mapTolerance, Point2D lastPoint);
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperRaster.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperVectorial.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperVectorial.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperVectorial.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.snapping.snappers;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+
+public interface ISnapperVectorial extends ISnapper {
+
+	Point2D getSnapPoint(Point2D queryPoint, Geometry geomToSnap, double tolerance, Point2D lastPointEntered);
+
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/snapping/snappers/ISnapperVectorial.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerImpl.java	(revision 42196)
@@ -0,0 +1,267 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
+import org.gvsig.fmap.mapcontrol.tools.geo.Geo;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+
+/**
+ * <p>Listener for calculating the area of a polygon, defined in the associated {@link MapControl MapControl}
+ *  object.</p>
+ *
+ * <p>If the view port of the associated <code>MapControl</code> isn't projected gets the area according the
+ *  geographical coordinates.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class AreaListenerImpl implements PolylineListener {
+	private static final Logger logger = LoggerFactory.getLogger(AreaListenerImpl.class);
+
+	/**
+	 * The image to display when the cursor is active.
+	 */
+//	private final Image iarea = PluginServices.getIconTheme().get("cursor-query-area").getImage();
+	
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapControl mapCtrl;
+
+	/**
+	 * Information about all vertexes and {@link GeneralPathX GeneralPathX}s of the polyline.
+	 */
+	protected MeasureEvent event;
+
+	/**
+ 	 * <p>Creates a new listener for calculating the area of a polygon.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where is calculated the area
+	 */
+	public AreaListenerImpl(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PolylineListener#points(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void points(MeasureEvent event) {
+		this.event = event;
+
+		double dist = 0;
+		double distAll = 0;
+
+		ViewPort vp = mapCtrl.getMapContext().getViewPort();
+
+		for (int i = 0; i < (event.getXs().length - 1); i++) {
+			dist = 0;
+
+			Point p = new Point(event.getXs()[i].intValue(),
+					event.getXs()[i].intValue());
+			Point p2 = new Point(event.getXs()[i + 1].intValue(),
+					event.getXs()[i + 1].intValue());
+
+			///dist = vp.toMapDistance((int) p.distance(p2));
+			dist = vp.distanceWorld(p, p2);
+			distAll += dist;
+		}
+		
+		logger.debug("Perimetro = {}, Area = {}.", 
+			distAll,
+			returnArea(vp.toMapPoint(
+					new Point2D.Double(
+						event.getXs()[event.getXs().length - 2].doubleValue(),
+						event.getYs()[event.getYs().length - 2].doubleValue()
+					)
+				)
+			)
+		);
+
+	}
+
+	/**
+	 * <p>Returns the area of the polygon, using {@link #returnCoordsArea(Double[], Double[], Point2D) returnCoordsArea}
+	 *  if the <code>ViewPort</code> of the associated <code>MapControl</code> is projected, or using
+	 *  {@link #returnGeoCArea(Double[], Double[], Point2D) returnGeoCArea} if isn't.</p>
+	 *
+	 * @param point unused parameter
+	 *
+	 * @return area from the vertexes stored at the measure event in real coordinates, or, if the <code>MapControl</code>
+	 *  isn't projected, in geographical coordinates
+	 *
+	 * @see #returnCoordsArea(Double[], Double[], Point2D)
+	 * @see #returnGeoCArea(Double[], Double[], Point2D)
+	 */
+	protected double returnArea(Point2D point) {
+		Double[] xs=event.getXs();
+		Double[] ys=event.getYs();
+		if (mapCtrl.getProjection().isProjected()) {
+			return returnCoordsArea(xs,ys,point);
+		}
+		return returnGeoCArea(xs,ys,point);
+	}
+
+	/**
+	 * <p>Returns the area of the polygon using <i>point</i> as initial, in
+	 *  real values with the current measure unit, according the projection in the <code>ViewPort</code>
+	 *  of the <code>MapControl</code>.</p>
+	 *
+	 * @param xs abscissa coordinate of all vertexes of the polygon
+	 * @param ys ordinate coordinate of all vertexes of the polygon
+	 * @param point point 2D used as first vertex in the calculation of the area
+	 *
+	 * @return the area of the polygon
+	 */
+	public double returnCoordsArea(Double[] xs,Double[] ys, Point2D point) {
+		Point2D aux=point;
+		double elArea = 0.0;
+		Point2D pPixel;
+		Point2D p = new Point2D.Double();
+		Point2D.Double pAnt = new Point2D.Double();
+		ViewPort vp = mapCtrl.getMapContext().getViewPort();
+		for (int pos = 0; pos < xs.length-1; pos++) {
+			pPixel = new Point2D.Double(xs[pos].doubleValue(),
+					ys[pos].doubleValue());
+			p = pPixel;//vp.toMapPoint(pPixel);
+			if (pos == 0) {
+				pAnt.x = aux.getX();
+				pAnt.y = aux.getY();
+			}
+			elArea = elArea + ((pAnt.x - p.getX()) * (pAnt.y + p.getY()));
+			pAnt.setLocation(p);
+		}
+
+		elArea = elArea + ((pAnt.x - aux.getX()) * (pAnt.y + aux.getY()));
+		elArea = Math.abs(elArea / 2.0);
+		return (elArea*(Math.pow(MapContext.getDistanceTrans2Meter()[vp.getMapUnits()],2)));
+	}
+	public static void main(String[] args) {
+		IProjection projectionUTM = CRSFactory.getCRS("EPSG:23030");
+		ViewPort vpUTM = new ViewPort(projectionUTM);
+		MapControl mcUTM=new MapControl();
+		mcUTM.setMapContext(new MapContext(vpUTM));
+		AreaListenerImpl areaListenerUTM=new AreaListenerImpl(mcUTM);
+		IProjection projectionGeo = CRSFactory.getCRS("EPSG:4230");
+		ViewPort vpGeo = new ViewPort(projectionGeo);
+		MapControl mcGeo=new MapControl();
+		mcGeo.setMapContext(new MapContext(vpGeo));
+		AreaListenerImpl areaListenerGeo=new AreaListenerImpl(mcGeo);
+
+		Double[] xsUTMCaseta=new Double[] {new Double(547508.77),new Double(547517.73),new Double(547512.65)};
+		Double[] ysUTMCaseta=new Double[] {new Double(4704333.97),new Double(4704331.3),new Double(4704315.2)};
+		double areaUTMCaseta=areaListenerUTM.returnCoordsArea(xsUTMCaseta,ysUTMCaseta,new Point2D.Double(547512.65,4704315.2));
+		Double[] xsGeoCaseta=new Double[] {new Double(-2.42192383),new Double(-2.42181545),new Double(-2.42187771)};
+		Double[] ysGeoCaseta=new Double[] {new Double(42.48914909),new Double(42.48912295),new Double(42.48897922)};
+		double areaGeoCCaseta=areaListenerGeo.returnGeoCArea(xsGeoCaseta,ysGeoCaseta,new Point2D.Double(-2.42187771,42.48897922));
+
+		System.out.println("AreaUTMCaseta = "+ areaUTMCaseta);
+		System.out.println("AreaGeoCCaseta = "+ areaGeoCCaseta);
+
+
+		Double[] xsUTM=new Double[] {new Double(731292),new Double(731901),new Double(730138)};
+		Double[] ysUTM=new Double[] {new Double(4351223),new Double(4350768),new Double(4349232)};
+		double areaUTM=areaListenerUTM.returnCoordsArea(xsUTM,ysUTM,new Point2D.Double(730138,4349232));
+		Double[] xsGeo=new Double[] {new Double(-0.31888183),new Double(-0.31173131),new Double(-0.33268401)};
+		Double[] ysGeo=new Double[] {new Double(39.27871741),new Double(39.27464327),new Double(39.26117368)};
+		double areaGeoC=areaListenerGeo.returnGeoCArea(xsGeo,ysGeo,new Point2D.Double(-0.33268401,39.26117368));
+
+		System.out.println("AreaUTM = "+ areaUTM);
+		System.out.println("AreaGeoC = "+ areaGeoC);
+
+		Double[] xsUTMspain=new Double[] {new Double(-12806),new Double(1025790),new Double(-31353.14)};
+		Double[] ysUTMspain=new Double[] {new Double(4793276.43),new Double(4719090.94),new Double(4125607.02)};
+		double areaUTMspain=areaListenerUTM.returnCoordsArea(xsUTMspain,ysUTMspain,new Point2D.Double(730138,4349232));
+		Double[] xsGeospain=new Double[] {new Double(-9.22743872),new Double(3.33087936),new Double(-9.01458587),new Double(-9.22743872)};
+		Double[] ysGeospain=new Double[] {new Double(43.02384666),new Double(42.38528811),new Double(37.06396689),new Double(43.02384666)};
+		double areaGeospainC=areaListenerGeo.returnGeoCArea(xsGeospain,ysGeospain,new Point2D.Double(-9.01458587,37.06396689));
+
+		System.out.println("AreaUTMSpain = "+ areaUTMspain);
+		System.out.println("AreaGeoSpainC = "+ areaGeospainC);
+	}
+
+	/**
+	 * <p>Returns the area in geographical coordinates of the polygon, according the
+	 *  <a href="http://en.wikipedia.org/wiki/Haversine_formula">Haversine function</a>.</p>
+	 *
+	 * @see Geo#sphericalPolyArea(double[], double[], int)
+	 */
+	public double returnGeoCArea(Double[] xs, Double[] ys, Point2D point) {
+		double[] lat = new double[xs.length];
+		double[] lon = new double[xs.length];
+		for (int K = 0; K < xs.length; K++) {
+			lon[K] = xs[K].doubleValue() / Geo.Degree;
+			lat[K] = ys[K].doubleValue() / Geo.Degree;
+		}
+		return (Geo.sphericalPolyArea(lat, lon, xs.length - 1) * Geo.SqM);// /1.29132441;//Esto
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-query-area");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PolylineListener#pointFixed(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void pointFixed(MeasureEvent event) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PolylineListener#polylineFinished(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void polylineFinished(MeasureEvent event) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PolygonSelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PolygonSelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PolygonSelectionListener.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>Listener that selects all features of the active and vector layers which intersect with the defined
+ *  polygon area in the associated {@link MapControl MapControl} object.</p>
+ *
+ * <p>The selection will be produced after user finishes the creation of the polyline.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PolygonSelectionListener implements PolylineListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(PolygonSelectionListener.class);
+	
+	/**
+	 * The cursor used to work with this tool listener.
+	 *
+	 * @see #getCursor()
+	 */
+	private MapControl mapCtrl;
+
+	/**
+ 	 * <p>Creates a new <code>PolygonSelectionListener</code> object.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where is drawn the polyline
+	 */
+	public PolygonSelectionListener(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-select-by-polygon");
+	}
+
+	public boolean cancelDrawing() {
+		return false;
+	}
+
+	public void points(MeasureEvent event) throws BehaviorException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void pointFixed(MeasureEvent event) throws BehaviorException {
+
+	}
+
+	public void polylineFinished(MeasureEvent event) throws BehaviorException {
+		try {
+			GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+            GeneralPathX gp = event.getGP();
+            Surface geom = (Surface)geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+            geom.setGeneralPath(gp);           
+            FLayer[] actives = mapCtrl.getMapContext().getLayers().getActives();
+            for (int i = 0; i < actives.length; i++) {
+                if (actives[i] instanceof FLyrVect) {
+                    FLyrVect lyrVect = (FLyrVect) actives[i];
+					FeatureSet newSelection = null;
+					try {
+						newSelection = lyrVect.queryByGeometry(geom,
+										lyrVect.getFeatureStore()
+												.getDefaultFeatureType());
+						if (event.getEvent().isControlDown()) {
+							FeatureSelection currentSelection = (FeatureSelection)lyrVect.getFeatureStore().getSelection();
+							DisposableIterator it = newSelection.fastIterator();
+							while(it.hasNext()) {
+								Object obj = it.next();
+								if(obj instanceof Feature) {
+									Feature feat = ((Feature)obj);
+									if(currentSelection.isSelected(feat))
+										currentSelection.deselect(feat);
+									else
+										currentSelection.select(feat);
+								}
+							}
+						} else {
+							lyrVect.getDataStore().setSelection(newSelection);
+						}
+					} finally {
+						DisposeUtils.dispose(newSelection);
+                    }
+                }
+            }
+
+		} catch (DataException e) {
+			throw new BehaviorException("No se pudo hacer la selecci�n", e);
+		} catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+			throw new BehaviorException("No se pudo hacer la selecci�n", 
+					new CreateGeometryException(TYPES.SURFACE, SUBTYPES.GEOM2D, e));
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PolygonSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomInListenerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomInListenerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomInListenerImpl.java	(revision 42196)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.RectangleListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Listener for doing a <i>zoom in</i> operation of the extent of the <code>ViewPort</code> of the associated {@link MapControl MapControl}
+ *  object, defining a rectangular area.</p>
+ *
+ * <p>If the area defined is smaller than 3 pixels x 3 pixels holds the zoom, otherwise, calculates the new extent <i>r</i>
+ *  with this equations:
+ *  <code><br>
+ *   double factor = 1/MapContext.ZOOMINFACTOR;<br>
+ *	 Rectangle2D rect = event.getWorldCoordRect();<br>
+ *   Rectangle2D.Double r = new Rectangle2D.Double();<br>
+ *   ViewPort vp = mapCtrl.getMapContext().getViewPort();<br>
+ *   double nuevoX = rect.getMaxX() - ((vp.getExtent().getWidth() * factor) / 2.0);<br>
+ *   double nuevoY = rect.getMaxY() - ((vp.getExtent().getHeight() * factor) / 2.0);<br>
+ *   Rectangle2D.Double r; // This will be the new extent<br>
+ *   r.x = nuevoX;<br>
+ *   r.y = nuevoY;<br>
+ *   r.width = vp.getExtent().getWidth() * factor;<br>
+ *   r.height = vp.getExtent().getHeight() * factor;<br>
+ *   vp.setExtent(r);
+ *  </code>
+ * </p>
+ *
+ * <p>The ultimately extent will be an adaptation from that, calculated by the <code>ViewPort</code>
+ *  bearing in mind the ratio of the available rectangle where display the graphical information.</p>
+ *
+ * @see MapContext#ZOOMINFACTOR
+ * @see ViewPort#setEnvelope(Envelope)
+ * @see ZoomOutListenerImpl
+ * @see ZoomOutRightButtonListener
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ZoomInListenerImpl implements RectangleListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(ZoomInListenerImpl.class);
+	
+	/**
+	 * The image to display when the cursor is active.
+	 */
+//	private final Image izoomin;
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	private MapControl mapCtrl;
+
+
+    /**
+     * 
+     */
+    public ZoomInListenerImpl() {
+//        this.izoomin = PluginServices.getIconTheme().get("cursor-zoom-in").getImage();
+    }
+
+    /**
+ 	 * <p>Creates a new <code>ZoomInListenerImpl</code> object.</p>
+	 *
+	 * @param mapCtrl the <code>MapControl</code> where is defined the rectangle
+	 */
+	public ZoomInListenerImpl(MapControl mapCtrl) {
+	    this();
+		this.mapCtrl = mapCtrl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener#rectangle(com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent)
+	 */
+	public void rectangle(EnvelopeEvent event) {
+		Envelope rect = event.getWorldCoordRect();
+		Rectangle2D pixelRect = event.getPixelCoordRect();
+
+
+		ViewPort vp = mapCtrl.getMapContext().getViewPort();
+
+		if ((pixelRect.getWidth() < 3) && (pixelRect.getHeight() < 3))
+		{
+			if (vp.getExtent()!=null){
+				double factor = 1/MapContext.ZOOMINFACTOR;
+				double x = rect.getMaximum(0) -
+					((vp.getExtent().getWidth() * factor) / 2.0);
+				double y = rect.getMaximum(1) -
+					((vp.getExtent().getHeight() * factor) / 2.0);
+				double width = vp.getExtent().getWidth() * factor;
+				double height = vp.getExtent().getHeight() * factor;
+				Envelope r;
+				try {
+					r = geomManager.createEnvelope(x, y, x + width, y + height, SUBTYPES.GEOM2D);
+					vp.setEnvelope(r);
+				} catch (CreateEnvelopeException e) {
+					logger.error("Error creating the envelope", e);
+				}
+				
+			}
+		}
+		else
+		{
+		    vp.setEnvelope(event.getWorldCoordRect());
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-zoom-in");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+	    logger.debug("cancelDrawing true");
+		return true;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomInListenerImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/CompoundBehavior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/CompoundBehavior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/CompoundBehavior.java	(revision 42196)
@@ -0,0 +1,386 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.spi.LoggerFactoryBinder;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+
+
+/**
+ * <p>Allows having multiple behaviors when user works with the associated
+ *  <code>MapControl</code>. Each one with its associated tool listener.</p>
+ *
+ * @author Fernando Gonz�lez Cort�s
+ * @author Pablo Piqueras Bartolom�
+ */
+public class  CompoundBehavior extends Behavior {
+    private static final Logger logger = LoggerFactory.getLogger(CompoundBehavior.class);
+	/**
+	 * List of all behaviors that compound this one.
+	 */
+	private ArrayList behaviors = new ArrayList(); //<Behavior>
+
+	/**
+	 * List that determines which behaviors of this one will be real-time painted.
+	 */
+	private ArrayList draws = new ArrayList(); //<Boolean>
+
+	/**
+	 * Static <code>behavior</code> that will be used for any <code>MapControl</code>.</p>
+	 */
+	private static Behavior behavior = null;
+
+	/**
+ 	 * <p>Creates a new behavior as a composition of others.</p>
+ 	 *
+	 * @param tools atomic behaviors that will compound this one</code>
+	 */
+	public CompoundBehavior(Behavior[] behaviors){
+
+        for (int i = 0; i < behaviors.length; i++) {
+            if (behaviors[i] == null) {
+                throw new IllegalArgumentException("behaviors");
+            }
+        }
+
+
+        boolean first = true;
+		for (int i = 0; i < behaviors.length; i++) {
+
+		    if (!containsBehavior(behaviors[i])) {
+		        this.behaviors.add(behaviors[i]);
+		        /*
+		         * Only the first in set as real-time drawn
+		         */
+		        if (first) {
+		            draws.add(Boolean.TRUE);
+		        } else {
+	                draws.add(Boolean.FALSE);
+		        }
+		        first = false;
+		    }
+		}
+	}
+
+	/**
+	 * <p>Adds a new behavior, setting if will be real-time (when user is working with it) drawn or not.</p>
+	 *
+	 * <p>When user works with a compound behavior, he/she will see on real-time the graphical changes produced at
+	 *  the associated <code>MapControl</code>, only by those which have their associated <i>draw</i> flag to <code>true</code>.</p>
+	 *
+	 * @param mt the new behavior
+	 * @param draw flag determining if will be real-time drawn or no
+	 */
+	public void addMapBehavior(Behavior mt, boolean draw){
+
+	    if (mt == null) {
+	        throw new IllegalArgumentException("mt");
+	    }
+
+	    if (!containsBehavior(mt)) {
+	        behaviors.add(mt);
+	        draws.add(new Boolean(draw));
+	    }
+	}
+
+	/**
+	 * <p>Removes a <code>Behavior</code> that composes this one.</p>
+	 *
+	 * @param mt the <code>Behavior</code> to be removed
+	 */
+	public void removeMapBehavior(Behavior mt){
+		int index = behaviors.indexOf(mt);
+
+		if (index >= 0) {
+			behaviors.remove(index);
+			draws.remove(index);
+		}
+	}
+	/**
+	 * <p>Searches for <code>mt</code>, returning <code>true</code> if is contained.</p>
+	 *
+	 * @param mt the behavior to search
+	 *
+	 * @return <code>true</code> if is contained; otherwise <code>false</code>
+	 */
+	public boolean containsBehavior(Behavior mt) {
+		return behaviors.indexOf(mt) > -1;
+	}
+
+	/**
+	 * <p>Returns the first-level {@link Behavior Behavior} at the specified position.</p>
+	 *
+	 * @param index index of element to return
+	 *
+	 * @return the element at the specified position.
+	 */
+	public Behavior getBehavior(int index) {
+		return (Behavior)behaviors.get(index);
+	}
+
+	/**
+	 * <p>Returns if it's invoked the method <code>public void paintComponent(Graphics g)</code> of the
+	 *  first-level {@link Behavior Behavior} at the specified position, each time is painted this component.</p>
+	 *
+	 * @param index index of element
+	 *
+	 * @return <code>true</code>  if it's invoked the method <code>public void paintComponent(Graphics g)</code> of the
+	 *   first-level {@link Behavior Behavior} at the specified position, each time is painted this component, otherwise
+	 *   <code>false</code>.
+	 */
+	public boolean isDrawnBehavior(int index) {
+		return ((Boolean)draws.get(index)).booleanValue();
+	}
+
+	/**
+	 * <p>Sets if will be invoked the method <code>public void paintComponent(Graphics g)</code> of the
+	 *  first-level {@link Behavior Behavior} at the specified position, each time is painted this component.</p>
+	 *
+	 * @param index index of element
+	 * @param <code>true</code> if will be invoked the method <code>public void paintComponent(Graphics g)</code> of the
+	 *   first-level {@link Behavior Behavior} at the specified position, each time is painted this component, otherwise
+	 *   <code>false</code>.
+	 */
+	public void setDrawnBehavior(int index, boolean draw) {
+		draws.set(index, new Boolean(draw));
+	}
+
+	/**
+	 * <p>Returns the number of first-level {@link Behavior Behavior}s in this <code>CompoundBehavior</code>.</p>
+	 *
+	 * @return the number of first-level {@link Behavior Behavior}s in this <code>CompoundBehavior</code>
+	 */
+	public int size() {
+		return behaviors.size();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getCursor()
+	 */
+	public Image getImageCursor() {
+		if (behaviors.size() > 0) {
+		    Behavior beh = (Behavior) behaviors.get(0);
+			return beh.getImageCursor();
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseClicked(java.awt.event.MouseEvent)
+	 */
+	public void mouseClicked(MouseEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mouseClicked(e);
+		}
+
+		if(behavior != null)
+			behavior.mouseClicked(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mouseDragged(e);
+		}
+
+		if(behavior != null)
+			behavior.mouseDragged(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseEntered(java.awt.event.MouseEvent)
+	 */
+	public void mouseEntered(MouseEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mouseEntered(e);
+		}
+
+		if(behavior != null)
+			behavior.mouseEntered(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseExited(java.awt.event.MouseEvent)
+	 */
+	public void mouseExited(MouseEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mouseExited(e);
+		}
+
+		if(behavior != null)
+			behavior.mouseExited(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mouseMoved(e);
+		}
+
+		if(behavior != null)
+			behavior.mouseMoved(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mousePressed(e);
+		}
+
+		if(behavior != null)
+			behavior.mousePressed(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mouseReleased(e);
+		}
+
+		if(behavior != null)
+			behavior.mouseReleased(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseWheelMoved(java.awt.event.MouseWheelEvent)
+	 */
+	public void mouseWheelMoved(MouseWheelEvent e) throws BehaviorException {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].mouseWheelMoved(e);
+		}
+
+		if(behavior != null)
+			behavior.mouseWheelMoved(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#paintComponent(java.awt.Graphics)
+	 */
+	public void paintComponent(MapControlDrawer renderer) {
+	    paintComponent(renderer,false);
+	}
+
+    public void paintComponent(MapControlDrawer renderer, boolean clean) {
+        if(clean){
+            clean(renderer);
+        }
+        for (int i = 0; i < behaviors.size(); i++) {
+            Behavior mapTool = (Behavior) behaviors.get(i);
+            if (((Boolean) draws.get(i)).booleanValue()){
+                mapTool.paintComponent(renderer, false);
+            }
+        }
+    }
+
+	/**
+	 * Sets a tool listener to work with a <code>MapControl</code> instance using these behaviors.
+	 *
+	 * @param listener a <code>RectangleListener</code> object for this behavior
+	 */
+	public void setListener(ToolListener listener) {
+		if (listener != null) {
+			throw new UnsupportedOperationException(
+				"CompoundBehavior does not have listeners");
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+	 */
+	public ToolListener getListener() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#setMapControl(com.iver.cit.gvsig.fmap.MapControl)
+	 */
+	public void setMapControl(MapControl mc) {
+		Behavior[] behaviors=(Behavior[])this.behaviors.toArray(new Behavior[0]);
+		for (int i=0;i<behaviors.length;i++ ) {
+			behaviors[i].setMapControl(mc);
+		}
+
+		super.setMapControl(mc);
+	}
+
+	/**
+	 * <p>Sets the <code>Behavior</code> that will be used for any <code>MapControl</code>.</p>
+	 *
+	 * @param behavior the multi-view <code>Behavior</code>
+	 */
+	public static void setAllControlsBehavior(Behavior behavior) {
+		CompoundBehavior.behavior = behavior;
+	}
+
+	/**
+	 * <p>Gets the <code>Behavior</code> that will be used for any <code>MapControl</code>.</p>
+	 *
+	 * @return the multi-view <code>Behavior</code>
+	 */
+	public static Behavior getAllControlsBehavior() {
+		return CompoundBehavior.behavior;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/CompoundBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutListenerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutListenerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutListenerImpl.java	(revision 42196)
@@ -0,0 +1,153 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Listener for doing a <i>zoom out</i> operation on the extent of the <code>ViewPort</code> of the associated {@link MapControl MapControl}
+ *  object, selecting a point of the <code>MapControl</code> by a single click of any mouse's button.</p>
+ *
+ * <p>Calculates the new extent <i>r</i> with this equations:
+ *  <code><br>
+ *   ViewPort vp = mapControl.getMapContext().getViewPort();<br>
+ *   Point2D p2 = vp.toMapPoint(event.getPoint());<br>
+ *   double factor = 1/MapContext.ZOOMOUTFACTOR;<br>
+ *   Rectangle2D.Double r = new Rectangle2D.Double();<br>
+ *   double nuevoX = p2.getX() - ((vp.getExtent().getWidth() * factor) / 2.0);<br>
+ *   double nuevoY = p2.getY() - ((vp.getExtent().getHeight() * factor) / 2.0);<br>
+ *   r.x = nuevoX;<br>
+ *   r.y = nuevoY;<br>
+ *   r.width = vp.getExtent().getWidth() * factor;<br>
+ *   r.height = vp.getExtent().getHeight() * factor;<br>
+ *   vp.setExtent(r);
+ *  </code>
+ * </p>
+ *
+ * <p>The ultimately extent will be an adaptation from that, calculated by the <code>ViewPort</code>
+ *  bearing in mind the ratio of the available rectangle.</p>
+ *
+ * @see MapContext#ZOOMOUTFACTOR
+ * @see ViewPort#setEnvelope(Envelope)
+ * @see ZoomInListenerImpl
+ * @see ZoomOutRightButtonListener
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ZoomOutListenerImpl implements PointListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(ZoomOutListenerImpl.class);
+	
+	/**
+	 * The image to display when the cursor is active.
+	 */
+//	private final Image izoomout = new ImageIcon(MapControl.class.getClassLoader().getResource(
+//				"org/gvsig/fmap/mapcontrol/images/ZoomOutCursor.gif")).getImage();
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	private MapControl mapControl;
+
+	/**
+	 * <p>Creates a new <code>ZoomOutListenerImpl</code> object.</p>
+	 *
+	 * @param mapControl the <code>MapControl</code> where will be applied the changes
+	 */
+	public ZoomOutListenerImpl(MapControl mapControl) {
+		this.mapControl = mapControl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) {
+            ViewPort vp = mapControl.getMapContext().getViewPort();
+            Point2D p2 = vp.toMapPoint(event.getPoint());
+
+            double nuevoX;
+            double nuevoY;
+            double factor = 1 / MapContext.ZOOMOUTFACTOR;
+            if (vp.getExtent() != null) {
+                nuevoX = p2.getX() - ((vp.getExtent().getWidth() * factor) / 2.0);
+                nuevoY = p2.getY() - ((vp.getExtent().getHeight() * factor) / 2.0);
+                double x = nuevoX;
+                double y = nuevoY;
+                double width = vp.getExtent().getWidth() * factor;
+                double height = vp.getExtent().getHeight() * factor;
+
+                try {
+                    vp.setEnvelope(geomManager.createEnvelope(x, y, x + width, y + height, SUBTYPES.GEOM2D));
+                } catch (CreateEnvelopeException e) {
+                    logger.warn("Error creating the envelope", e);
+                }
+            }
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-zoom-out");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+	    logger.debug("cancelDrawing true");
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) {
+		// TODO Auto-generated method stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/ZoomOutListenerImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/grid/Grid.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/grid/Grid.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/grid/Grid.java	(revision 42196)
@@ -0,0 +1,184 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools.grid;
+
+import java.awt.Color;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+
+/**
+ * Clase encargada de gestionar las diferentes operaciones que se realizan
+ * sobre el grid.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Grid {
+	public static boolean DefaultShowGrid = false;
+	public static double DefaultGridSizeX = 1000;
+	public static double DefaultGridSizeY = 1000;
+	public static boolean DefaultAdjustGrid=false;
+
+	public static boolean SHOWGRID = false;
+	public static double GRIDSIZEX = 1000;
+	public static double GRIDSIZEY = 1000;
+	public static boolean ADJUSTGRID=false;
+
+	private boolean grid = SHOWGRID;
+	private double gridSizeX = GRIDSIZEX;
+	private double gridSizeY = GRIDSIZEY;
+	private ViewPort viewport=null;
+	private boolean adjustGrid=ADJUSTGRID;
+
+	/**
+	 * Inserta el viewPort.
+	 *
+	 * @param vp
+	 */
+	public void setViewPort(ViewPort vp) {
+		viewport = vp;
+
+//		if (gridSize == 0) {
+//			gridSize = viewport.toMapDistance(25);
+//		}
+	}
+
+	/**
+	 * Ajusta un punto de la imagen que se pasa como  par�metro al handler m�s
+	 * cercano si se encuentra lo suficientemente  cerca y devuelve la
+	 * distancia del punto original al punto ajustado
+	 *
+	 * @param point
+	 *
+	 * @return Distancia del punto que se pasa como par�metro al punto ajustado
+	 */
+	public double adjustToGrid(Point2D point) {
+		if (adjustGrid) {
+			Point2D auxp = new Point2D.Double(0, 0);
+			double x = ((point.getX() + gridSizeX) % gridSizeX) -
+				((auxp.getX()) % gridSizeX);
+			double y = ((point.getY() + gridSizeY) % gridSizeY) -
+				((auxp.getY()) % gridSizeY);
+			Point2D p = (Point2D) point.clone();
+			if (x>gridSizeX/2){
+				x=x-gridSizeX;
+			}
+			if (y>gridSizeY/2){
+				y=y-gridSizeY;
+			}
+			point.setLocation((point.getX() - x), (point.getY() - y));
+			return p.distance(point);
+		}
+		return Double.MAX_VALUE;
+	}
+
+	/**
+	 * Dibuja el grid sobre el graphics que se pasa como par�metro
+	 *
+	 * @param g Graphics sobre el que dibujar el grid.
+	 */
+	public void drawGrid(MapControlDrawer mapControlDrawer) {
+		if (!grid) {
+			return;
+		}
+		if (viewport.fromMapDistance(gridSizeX) > 3
+				&& viewport.fromMapDistance(gridSizeY) > 3) {
+			mapControlDrawer.setColor(Color.lightGray);
+
+			Envelope extent = viewport.getAdjustedExtent();
+			Point2D auxp = new Point2D.Double(0, 0);
+			if (extent==null)
+				return;
+			for (double i = extent.getMinimum(0); i < (extent.getMaximum(0) + gridSizeX); i += gridSizeX) {
+				for (double j = extent.getMinimum(1); j < (extent.getMaximum(1) + gridSizeY); j += gridSizeY) {
+					Point2D po = new Point2D.Double(i, j);
+					Point2D point = viewport.fromMapPoint(po);
+					double x = ((po.getX() + gridSizeX) % gridSizeX)
+							- ((auxp.getX()) % gridSizeX);
+					double y = ((po.getY() + gridSizeY) % gridSizeY)
+							- ((auxp.getY()) % gridSizeY);
+					x = (point.getX() - viewport.fromMapDistance(x));
+					y = (point.getY() + viewport.fromMapDistance(y));
+
+					mapControlDrawer.drawRect((int) x, (int) y, 1, 1);
+
+				}
+			}
+		}
+	}
+
+	/**
+	 * Inserta un boolean que indica si se utiliza o no el grid y de esta forma
+	 * dibujarse.
+	 *
+	 * @param b boolean
+	 */
+	public void setShowGrid(boolean b) {
+		grid = b;
+	}
+
+	/**
+	 * Devuelve true si se usa el grid.
+	 *
+	 * @return True si se usa el grid.
+	 */
+	public boolean isShowGrid() {
+		return grid;
+	}
+
+	/**
+	 * Inserta un boolean que indica si se ajusta o no al grid y de esta forma
+	 * dibujarse.
+	 *
+	 * @param b boolean
+	 */
+	public void setAdjustGrid(boolean b) {
+		adjustGrid = b;
+	}
+
+	/**
+	 * Devuelve true si se ha de ajustar al grid.
+	 *
+	 * @return True si se est� ajustando al grid.
+	 */
+	public boolean isAdjustGrid() {
+		return adjustGrid;
+	}
+
+	public double getGridSizeX() {
+		return gridSizeX;
+	}
+	public double getGridSizeY() {
+		return gridSizeY;
+	}
+	public void setGridSizeX(double gridSize) {
+		this.gridSizeX = gridSize;
+	}
+	public void setGridSizeY(double gridSize) {
+		this.gridSizeY = gridSize;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/grid/Grid.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PointSelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PointSelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PointSelectionListener.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * <p>Listener that selects all features of the active, and vector layers of the associated <code>MapControl</code>
+ *  that their area intersects with the point selected by a single click of any button of the mouse.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PointSelectionListener implements PointListener {
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapControl mapCtrl;
+
+	/**
+	 * <p>Creates a new <code>PointSelectionListener</code> object.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where will be applied the changes
+	 */
+	public PointSelectionListener(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+
+	public void point(PointEvent event) throws BehaviorException {
+		try {
+            Point2D p = event.getPoint();
+            Point2D mapPoint = mapCtrl.getViewPort().toMapPoint((int) p.getX(), (int) p.getY());
+
+            // Tolerancia de 3 pixels
+            double tol = mapCtrl.getViewPort().toMapDistance(3);
+            FLayer[] actives = mapCtrl.getMapContext().getLayers().getActives();
+            for (int i = 0; i < actives.length; i++) {
+                if (actives[i] instanceof FLyrVect) {
+                    FLyrVect lyrVect = (FLyrVect) actives[i];
+					FeatureSet newSelection = null;
+					try {
+						newSelection = lyrVect.queryByPoint(
+										mapPoint, tol,
+										lyrVect.getFeatureStore().getDefaultFeatureType());
+						if (event.getEvent().isControlDown()) {
+							FeatureSelection currentSelection = (FeatureSelection)lyrVect.getDataStore().getSelection();
+							DisposableIterator it = newSelection.fastIterator();
+							while(it.hasNext()) {
+								Object obj = it.next();
+								if(obj instanceof Feature) {
+									Feature feat = ((Feature)obj);
+									if(currentSelection.isSelected(feat))
+										currentSelection.deselect(feat);
+									else
+										currentSelection.select(feat);
+								}
+							}
+						} else {
+							lyrVect.getFeatureStore()
+									.setSelection(newSelection);
+						}
+					} finally {
+						if (newSelection!=null){
+							newSelection.dispose();
+						}
+                    }
+                    mapCtrl.drawMap(false); // FIXME Esto deber�a sobrar (la capa deber�a de ser observada)
+                }
+            }
+
+		} catch (DataException e) {
+			throw new BehaviorException("No se pudo hacer la selecci�n", e);
+		}
+	}
+	
+
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-select-by-point");
+	}
+
+	public boolean cancelDrawing() {
+		return false;
+	}
+
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PointSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BaseMapTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BaseMapTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BaseMapTool.java	(revision 42196)
@@ -0,0 +1,223 @@
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.IBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.MoveBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.CircleListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PolylineListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.RectangleListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+
+public class BaseMapTool implements MapTool, ActionListener, IBehavior, 
+	ToolListener, CircleListener, PanListener, PointListener, PolylineListener, RectangleListener {
+
+	protected int type = TYPE_UNKNOW;
+			
+	protected ToolListener listener = null;
+	protected IBehavior behavior = null;
+	protected boolean isCancelDrawing = false;
+	private String name;
+	
+	public BaseMapTool(int type) {
+		super();
+		this.setType(type);
+	}
+	
+	public BaseMapTool(ToolListener listener) {
+		super();
+		this.setListener(listener);
+	}
+	
+	protected void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void actionPerformed(ActionEvent arg0) {
+		throw new UnsupportedOperationException();
+	}
+
+	public Image getImageCursor() {
+		return null;
+	}
+
+	public boolean cancelDrawing() {
+		return this.isCancelDrawing;
+	}
+
+	public void setType(int type) {
+		if( this.getMapControl()!=null ) {
+			throw new IllegalStateException("Can't change the type if the tool is already binded to a MapControl.");
+		}
+		this.type = type;
+	}
+
+	public int getType() {
+		return this.type;
+	}
+	
+	public MapControl getMapControl() {
+		return this.behavior.getMapControl();
+	}
+
+	public void setMapControl(MapControl mc) {
+		if( this.behavior.getMapControl()!= null ) {
+			throw new IllegalStateException("The tools is already binded to a MapControl, can't change it.");
+		}
+		this.behavior.setMapControl(mc);
+		switch(this.type) {
+			case TYPE_POINT:
+				this.behavior = new PointBehavior(this);
+				break;
+			case TYPE_RECTANGLE:
+				this.behavior = new RectangleBehavior(this);
+				break;
+
+			// TODO: a�adir el resto de casos TYPE_ al switch
+
+		
+			case ACTION_PAN:
+				this.listener = new PanListenerImpl(this.getMapControl());
+	        	this.behavior = new MoveBehavior((PanListener) this.listener);
+	           	this.type = TYPE_MOVE;		
+	           	break;
+			
+			case ACTION_ZOOM:
+				this.behavior = new CompoundBehavior( new Behavior[] {
+					new RectangleBehavior(new ZoomInListenerImpl(this.getMapControl())),
+					new PointBehavior(new ZoomOutRightButtonListener(this.getMapControl()))
+				});
+				this.listener = null;
+		       	this.type = TYPE_POINT;		
+		       	break;
+		       	
+			// TODO: a�adir el resto de casos ACTION_ al switch
+		    default:
+		    	throw new IllegalStateException("The type "+this.type+" is not a valid value.");
+			}
+	}
+	
+	private void setListener(ToolListener listener) {
+		if( listener instanceof CircleListener ) {
+			this.setType(TYPE_CIRCLE);
+			this.listener = listener;
+			return;
+		} 
+		if( listener instanceof PointListener ) {
+			this.setType(TYPE_POINT);
+			this.listener = listener;
+			return;
+		} 
+		if( listener instanceof RectangleListener ) {
+			this.setType(TYPE_RECTANGLE);
+			this.listener = listener;
+			return;
+		} 
+		// TODO: a�adir el resto de ToolListeners
+	}
+	
+	public ToolListener getListener() {
+		return this;
+	}
+
+	protected void callActionPerformed(Object event, int type, String actionCommand) {
+		try {
+			ActionEvent actionEvent = new ActionEvent(event,type, actionCommand);
+			this.actionPerformed(actionEvent);
+		} catch(Throwable e) {
+			this.isCancelDrawing = true;
+		}
+	}
+	
+	public void rectangle(EnvelopeEvent event) throws BehaviorException {
+		if( this.listener==null ) {
+			this.callActionPerformed(event,EVENT_RECTANGLE, "rectangle");
+			return;
+		}
+		((RectangleListener)this.listener).rectangle(event);
+	}
+
+	public void points(MeasureEvent event) throws BehaviorException {
+		this.callActionPerformed(event,EVENT_POINTS, "points");
+	}
+
+	public void pointFixed(MeasureEvent event) throws BehaviorException {
+		this.callActionPerformed(event,EVENT_POINTFIXED, "pointfixed");
+	}
+
+	public void polylineFinished(MeasureEvent event) throws BehaviorException {
+		this.callActionPerformed(event,EVENT_POLYLINEFINISHED, "polylinefinished");
+	}
+
+	public void point(PointEvent event) throws BehaviorException {
+		this.callActionPerformed(event,EVENT_POINT, "point");
+	}
+
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+		this.callActionPerformed(event,EVENT_POINTDOUBLECLICKED, "pointdoubleclicked");
+	}
+
+	public void move(MoveEvent event) throws BehaviorException {
+		this.callActionPerformed(event,EVENT_MOVE, "move");
+	}
+
+	public void circle(MeasureEvent event) throws BehaviorException {
+		this.callActionPerformed(event,EVENT_MEASURE, "measure");
+	}
+
+	public void paintComponent(MapControlDrawer renderer) {
+		this.behavior.paintComponent(renderer);
+	}
+
+	public void mouseClicked(MouseEvent e) throws BehaviorException {
+		this.behavior.mouseClicked(e);
+	}
+
+	public void mouseEntered(MouseEvent e) throws BehaviorException {
+		this.behavior.mouseEntered(e);
+	}
+
+	public void mouseExited(MouseEvent e) throws BehaviorException {
+		this.behavior.mouseExited(e);
+	}
+
+	public void mousePressed(MouseEvent e) throws BehaviorException {
+		this.behavior.mousePressed(e);
+	}
+
+	public void mouseReleased(MouseEvent e) throws BehaviorException {
+		this.behavior.mouseReleased(e);
+	}
+
+	public void mouseDragged(MouseEvent e) throws BehaviorException {
+		this.behavior.mouseDragged(e);
+	}
+
+	public void mouseMoved(MouseEvent e) throws BehaviorException {
+		this.behavior.mouseMoved(null);
+	}
+
+	public void mouseWheelMoved(MouseWheelEvent e) throws BehaviorException {
+		this.behavior.mouseWheelMoved(e);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/BaseMapTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PanListenerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PanListenerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PanListenerImpl.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Listener for moving the extent of the associated {@link MapControl MapControl} object
+ *  according the movement between the initial and final points of line determined by the movement
+ *  dragging with the third button of the mouse.</p>
+ *
+ * <p>Updates the extent of its <code>ViewPort</code> with the new position.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PanListenerImpl implements PanListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(PanListenerImpl.class);
+	/**
+	 * The image to display when the cursor is active.
+	 */
+//	private final Image ipan = PluginServices.getIconTheme().get("cursor-pan").getImage();
+	
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	private MapControl mapControl;
+
+	/**
+  	 * <p>Creates a new listener for changing the position of the extent of the associated {@link MapControl MapControl} object.</p>
+	 *
+	 * @param mapControl the <code>MapControl</code> where will be applied the changes
+	 */
+	public PanListenerImpl(MapControl mapControl) {
+		this.mapControl = mapControl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PanListener#move(com.iver.cit.gvsig.fmap.tools.Events.MoveEvent)
+	 */
+	public void move(MoveEvent event) {
+		ViewPort vp = mapControl.getMapContext().getViewPort();
+
+		Point2D from = vp.toMapPoint(event.getFrom());
+		Point2D to = vp.toMapPoint(event.getTo());
+
+
+		Rectangle2D extent = vp.getExtent();
+		double x = extent.getX() - (to.getX() - from.getX());
+		double y = extent.getY() - (to.getY() - from.getY());
+		double width = extent.getWidth();
+		double height = extent.getHeight();
+		Envelope r;
+		try {
+			r = geomManager.createEnvelope(x, y, x+width, y+height, SUBTYPES.GEOM2D);
+			vp.setEnvelope(r);
+		} catch (CreateEnvelopeException e) {
+			logger.warn("Error creating the envelope", e);
+		}
+		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
+	 */
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-pan");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return true;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/PanListenerImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/SelectImageListenerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/SelectImageListenerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/SelectImageListenerImpl.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ib��ez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+
+
+
+/**
+ * <p>Listener to select the upper layer with raster data, that has information in the associated <code>MapControl</code> object, down
+ *  the position selected by the mouse.</p>
+ *
+ * @deprecated
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class SelectImageListenerImpl implements PointListener {
+	/**
+	 * The image to display when the cursor is active.
+	 */
+//	private final Image isaveraster = PluginServices.getIconTheme().get("cursor-select-by-point").getImage();
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapControl mapCtrl;
+
+	/**
+	 * World equivalent coordinates of the point 2D
+	 */
+	protected Point2D wcPoint = null;
+
+	/**
+	 * <p>Creates a new <code>SelectImageListenerImpl</code> object.</p>
+	 *
+	 * @param mapCtrl the <code>MapControl</code> where are stored the layers
+	 */
+	public SelectImageListenerImpl(MapControl mapCtrl) {
+		this.mapCtrl = mapCtrl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-select-by-point");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) {
+		// TODO Auto-generated method stub
+
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/tools/SelectImageListenerImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultPrimitivesDrawer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultPrimitivesDrawer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultPrimitivesDrawer.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.impl;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.Stroke;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultPrimitivesDrawer implements PrimitivesDrawer {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultPrimitivesDrawer.class);
+
+    protected Graphics2D graphics = null;
+    protected Color color = Color.BLACK;
+    protected Color xorColor = Color.WHITE;
+    private Object lockObject = null;
+
+    public DefaultPrimitivesDrawer() {
+        super();
+    }
+
+    public DefaultPrimitivesDrawer(Graphics2D graphics) {
+        super();
+        this.graphics = graphics;
+    }
+
+    public void drawLine(int x1, int y1, int x2, int y2) {
+        graphics.setXORMode(xorColor);
+        graphics.drawLine(x1, y1, x2, y2);
+        graphics.setPaintMode();
+    }
+
+    public void drawOval(int x, int y, int width, int height) {
+        graphics.setXORMode(xorColor);
+        graphics.drawOval(x, y, width, height);
+        graphics.setPaintMode();
+    }
+
+    public void drawRect(int x, int y, int width, int height) {
+        graphics.setXORMode(xorColor);
+        graphics.drawRect(x, y, width, height);
+        graphics.setPaintMode();
+    }
+
+    public void fillRect(int x, int y, int width, int height) {
+        graphics.setColor(color);
+        graphics.fillRect(x, y, width, height);
+    }
+
+    public void setColor(Color color) {
+        this.color = color;
+    }
+
+    public void setGraphics(Graphics graphics) {
+        this.graphics = (Graphics2D) graphics;
+    }
+
+    public void stopDrawing(Object obj) {
+        if (lockObject != obj) {
+            LOG.info("Trying to unlock a resource that is not locked");
+            return;
+        }
+        lockObject = null;
+    }
+
+    public void startDrawing(Object obj) throws InterruptedException {
+        while ((lockObject != null) && (obj != lockObject)) {
+            Thread.sleep(100);
+        }
+        lockObject = obj;
+    }
+    
+    public void setRenderingHints(RenderingHints hints) {
+    	this.graphics.setRenderingHints(hints);
+    }
+    
+    public void setStroke(Stroke stroke) {
+    	this.graphics.setStroke(stroke);
+    }
+    
+    public void cleanCanvas(MapControl mapCtrl) {
+    	BufferedImage img = mapCtrl.getImage();
+    	this.graphics.drawImage(img, 0, 0, null);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultPrimitivesDrawer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlLibrary.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.fmap.mapcontrol.impl;
+
+import org.gvsig.editing.impl.DefaultEditingNotificationManager;
+import org.gvsig.fmap.mapcontrol.MapControlLibrary;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.swing.dynformfield.CoordinateReferenceSystem.JDynFormFieldCoordinateReferenceSystemFactory;
+import org.gvsig.fmap.mapcontrol.swing.dynformfield.Geometry.JDynFormFieldGeometryFactory;
+import org.gvsig.propertypage.impl.DefaultPropertiesPageManager;
+import org.gvsig.tools.dynform.spi.DynFormSPILibrary;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultMapControlLibrary extends AbstractLibrary{
+	
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(MapControlLibrary.class);
+        require(DynFormSPILibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		MapControlLocator.registerMapControlManager(DefaultMapControlManager.class);
+                MapControlLocator.registerEditingNotificationManager(DefaultEditingNotificationManager.class);
+                MapControlLocator.registerPropertiesPageManager(DefaultPropertiesPageManager.class);
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		// Validate there is any implementation registered.
+		MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+		if (mapControlManager == null) {
+			throw new ReferenceNotRegisteredException(
+					MapControlLocator.MAPCONTROL_MANAGER_NAME, 
+					MapControlLocator.getInstance());
+		}
+		
+		//Register the default implementation for a view, that will be
+		//the 2D MapControlDrawer.
+		mapControlManager.registerDefaultMapControlDrawer(MapControlDrawer2D.class);
+		
+		//
+		// Register the custom controls for CRS and Geometry en the DynFormManager
+		DynFormSPIManager dynFormManager = DynFormSPILocator.getDynFormSPIManager();
+		if( dynFormManager != null ) {
+			dynFormManager.addServiceFactory(new JDynFormFieldCoordinateReferenceSystemFactory());
+			dynFormManager.addServiceFactory(new JDynFormFieldGeometryFactory());
+		}
+
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/MapControlDrawer2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/MapControlDrawer2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/MapControlDrawer2D.java	(revision 42196)
@@ -0,0 +1,204 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.fmap.mapcontrol.impl;
+
+import java.awt.Color;
+import java.awt.Composite;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.operation.Draw;
+import org.gvsig.fmap.geom.operation.DrawOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * MapControlDrawer for a 2D view.
+ *
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MapControlDrawer2D extends DefaultPrimitivesDrawer implements MapControlDrawer{
+    private static final Logger LOG = LoggerFactory.getLogger(MapControlDrawer2D.class);
+
+	protected GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private ViewPort viewPort = null;
+
+	/**
+	 * @param graphics
+	 * @param viewPort
+	 */
+	public MapControlDrawer2D() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#draw(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
+	 */
+	public void draw(Geometry geometry, ISymbol symbol) {
+		if (geometry != null) {
+		    symbol.draw(graphics, viewPort.getAffineTransform(), geometry, null, null);
+		}
+	}
+
+    public void draw(Geometry geometry, ISymbol symbol, Feature feature) {
+        if (geometry != null) {
+            symbol.draw(graphics, viewPort.getAffineTransform(), geometry, feature, null);
+        }
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawHandlers(org.gvsig.fmap.geom.Geometry, java.awt.geom.AffineTransform, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
+	 */
+	public void drawHandlers(Handler[] handlers, AffineTransform at, ISymbol symbol) {
+		for (int i = 0; i < handlers.length; i++) {
+
+		    try {
+	            Point2D point = handlers[i].getPoint();
+	            at.transform(point, point);
+
+	            graphics.setPaintMode();
+	            graphics.setColor(symbol.getColor());
+	            graphics.fillRect((int) (point.getX() - 3), (int) (point.getY() - 3), 7, 7);
+	            graphics.drawRect((int) (point.getX() - 5), (int) (point.getY() - 5), 10, 10);
+	            graphics.drawString( "" + i, (int) (point.getX() - 5), (int) (point.getY() - 5));
+		    } catch (Throwable th) {
+		        /*
+		         * jmvivo experienced a "java.lang.InternalError" here, possibly
+		         * a graphic bug in the JRE when dealing with windows.
+		         * Since we are simply drawing a handler, we will ignore this
+		         * error and simply write a line in the log file..
+		         */
+		        LOG.warn("Unexpected error while drawing handler: " + th.getMessage(), th);
+		    }
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawLine(java.awt.geom.Point2D, java.awt.geom.Point2D, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
+	 */
+	public void drawLine(Point2D firstPoint, Point2D endPoint, ISymbol symbol) {
+		DrawOperationContext doc = new DrawOperationContext();
+		doc.setGraphics(graphics);
+		doc.setViewPort(viewPort);
+		doc.setSymbol(symbol);
+		try {
+			Curve curve = (Curve)geomManager.create(Geometry.TYPES.CURVE, Geometry.SUBTYPES.GEOM2D);
+			curve.addVertex(geomManager.createPoint(firstPoint.getX(), firstPoint.getY(), Geometry.SUBTYPES.GEOM2D) );
+			curve.addVertex(geomManager.createPoint(endPoint.getX(), endPoint.getY(), Geometry.SUBTYPES.GEOM2D) );
+			curve.invokeOperation(Draw.CODE, doc);
+		} catch (GeometryOperationNotSupportedException e) {
+			e.printStackTrace();
+		} catch (GeometryOperationException e) {
+			e.printStackTrace();
+		} catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawImage(java.awt.Image, int, int)
+	 */
+	public void drawImage(Image img, int x, int y) {
+		if (img != null){
+			graphics.drawImage(img, x, y, null);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#drawHandler(org.gvsig.fmap.geom.handler.Handler, java.awt.geom.AffineTransform)
+	 */
+	public void drawHandler(Handler handler, AffineTransform at) {
+		Point2D point = handler.getPoint();
+		Point2D dest = (Point2D) point.clone();
+		at.transform(point, dest);
+		graphics.setColor(Color.black);
+		graphics.drawLine((int)dest.getX()-2,(int)dest.getY()-10,(int)dest.getX()-2,(int)dest.getY()+10);
+		graphics.drawLine((int)dest.getX()+2,(int)dest.getY()-10,(int)dest.getX()+2,(int)dest.getY()+10);
+		graphics.drawLine((int)dest.getX()-10,(int)dest.getY()-2,(int)dest.getX()+10,(int)dest.getY()-2);
+		graphics.drawLine((int)dest.getX()-10,(int)dest.getY()+2,(int)dest.getX()+10,(int)dest.getY()+2);
+		graphics.setColor(Color.red);
+		graphics.drawLine((int)dest.getX()-1,(int)dest.getY()-10,(int)dest.getX()-1,(int)dest.getY()+10);
+		graphics.drawLine((int)dest.getX()+1,(int)dest.getY()-10,(int)dest.getX()+1,(int)dest.getY()+10);
+		graphics.drawLine((int)dest.getX()-10,(int)dest.getY()-1,(int)dest.getX()+10,(int)dest.getY()-1);
+		graphics.drawLine((int)dest.getX()-10,(int)dest.getY()+1,(int)dest.getX()+10,(int)dest.getY()+1);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawImage(java.awt.Image, java.awt.geom.AffineTransform)
+	 */
+	public void drawImage(Image img, AffineTransform xform) {
+		graphics.drawImage(img, xform, null);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontext.rendering.Renderer#setViewPort(org.gvsig.fmap.mapcontext.ViewPort)
+	 */
+	public void setViewPort(ViewPort viewPort) {
+		this.viewPort = viewPort;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#draw(org.gvsig.fmap.geom.Geometry)
+	 */
+	public void draw(Geometry geometry) {
+		draw(geometry, MapContextLocator.getSymbolManager().createSymbol(geometry.getType()));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#setComposite(java.awt.AlphaComposite)
+	 */
+	public void setComposite(Composite composite) {
+		graphics.setComposite(composite);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#transform(java.awt.geom.AffineTransform)
+	 */
+	public void transform(AffineTransform at) {
+		graphics.transform(at);
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/MapControlDrawer2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlManager.java	(revision 42196)
@@ -0,0 +1,361 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.fmap.mapcontrol.impl;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.prefs.Preferences;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlCreationException;
+import org.gvsig.fmap.mapcontrol.MapControlCreationListener;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.impl.DefaultLayersDynObjectSetComponent;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultMapControlManager implements MapControlManager{
+	private static final Logger logger = LoggerFactory.getLogger(MapControlManager.class);
+	private static final String MAPCONTROL_MANAGER_EXTENSION_POINT = "MapControlManagerExtensionPoint";
+	private static final String DEFAULT_MAPCONTROLMANAGER_NAME = null;
+	private static final String SNAPPING_EXTENSION_POINT = "Snapper";
+
+	private ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
+	private int snappingTolerance = 4;
+	private ISymbol selectionSymbol = null;
+	private ISymbol axisReferencesSymbol = null;
+	private ISymbol geometrySelectionSymbol = null;
+	private ISymbol handlerSymbol = null;
+	private static MapContextManager mapContextManager = MapContextLocator
+	.getMapContextManager();
+	private Preferences prefs = Preferences.userRoot().node( "cadtooladapter" );
+	private static Preferences prefSnappers = Preferences.userRoot().node("snappers");
+	private List<ISnapper> snappers = null;
+        private Set<MapControlCreationListener> mapControlCreationListeners = new LinkedHashSet<MapControlCreationListener>();
+
+
+	public DefaultMapControlManager() {
+		super();
+		snappers = new ArrayList<ISnapper>();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#createDefaultMapControlDrawer()
+	 */
+	public MapControlDrawer createDefaultMapControlDrawer() throws MapControlCreationException {
+		ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT);
+		try {
+			return (MapControlDrawer)ep.create(DEFAULT_MAPCONTROLMANAGER_NAME);
+		} catch (Exception e) {
+			throw new MapControlCreationException(e);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#createMapControlDrawer(java.lang.String)
+	 */
+	public MapControlDrawer createMapControlDrawer(String name) throws MapControlCreationException {
+		ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT);
+		try {
+			return (MapControlDrawer)ep.create(name);
+		} catch (Exception e) {
+			throw new MapControlCreationException(e);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerDefaultMapControlDrawer(java.lang.Class)
+	 */
+	public void registerDefaultMapControlDrawer(Class mapControlDrawerClass) {
+		if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
+			throw new IllegalArgumentException(mapControlDrawerClass.getName()
+					+ " must implement the MapControlDrawer interface");
+		}
+
+		ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
+		extensionPoint.append(DEFAULT_MAPCONTROLMANAGER_NAME, "Default MapControl", mapControlDrawerClass);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerMapControlDrawer(int, java.lang.Class)
+	 */
+	public void registerMapControlDrawer(String name,
+			Class mapControlDrawerClass) {
+
+		if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
+			throw new IllegalArgumentException(mapControlDrawerClass.getName()
+					+ " must implement the MapControlDrawer interface");
+		}
+
+		ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
+		extensionPoint.append(name, "Default MapControl", mapControlDrawerClass);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnappingTolerance()
+	 */
+	public int getTolerance() {
+		return snappingTolerance;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#setSnappingTolerance(int)
+	 */
+	public void setTolerance(int tolerance) {
+		snappingTolerance = tolerance;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#clearSnappers()
+	 */
+	public void clearSnappers() {
+		snappers.clear();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getAxisReferenceSymbol()
+	 */
+	public ISymbol getAxisReferenceSymbol() {
+		if (axisReferencesSymbol == null){
+			axisReferencesSymbol =
+					mapContextManager.getSymbolManager()
+			.createSymbol(Geometry.TYPES.GEOMETRY,
+					new Color(100, 100, 100, 100));
+		}
+		return axisReferencesSymbol;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getGeometrySelectionSymbol()
+	 */
+	public ISymbol getGeometrySelectionSymbol() {
+		if (geometrySelectionSymbol == null){
+			geometrySelectionSymbol =
+					mapContextManager.getSymbolManager()
+			.createSymbol(Geometry.TYPES.GEOMETRY, Color.RED);
+		}
+		return geometrySelectionSymbol;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getHandlerSymbol()
+	 */
+	public ISymbol getHandlerSymbol() {
+		if (handlerSymbol == null){
+			handlerSymbol =
+					mapContextManager.getSymbolManager().createSymbol(
+					Geometry.TYPES.GEOMETRY, Color.ORANGE);
+		}
+		return handlerSymbol;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSelectionSymbol()
+	 */
+	public ISymbol getSelectionSymbol() {
+		if (selectionSymbol == null){
+			selectionSymbol =
+					mapContextManager.getSymbolManager().createSymbol(
+					Geometry.TYPES.GEOMETRY, new Color(255, 0, 0, 100));
+		}
+		return selectionSymbol;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#setAxisReferenceSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
+	 */
+	public void setAxisReferenceSymbol(ISymbol axisReferencesSymbol) {
+		this.axisReferencesSymbol = axisReferencesSymbol;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#setGeometrySelectionSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
+	 */
+	public void setGeometrySelectionSymbol(ISymbol geometrySelectionSymbol) {
+		this.geometrySelectionSymbol = geometrySelectionSymbol;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#setHandlerSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
+	 */
+	public void setHandlerSymbol(ISymbol handlerSymbol) {
+		this.handlerSymbol = handlerSymbol;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#setSelectionSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
+	 */
+	public void setSelectionSymbol(ISymbol selectionSymbol) {
+		this.selectionSymbol = selectionSymbol;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#addSnapper(org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper)
+	 */
+	public void registerSnapper(String name, Class snapperClass) {
+		if (!ISnapper.class.isAssignableFrom(snapperClass)) {
+			throw new IllegalArgumentException(snapperClass.getName()
+					+ " must implement the ISnapper interface");
+		}
+
+		ExtensionPoint extensionPoint = extensionPoints.add(SNAPPING_EXTENSION_POINT, "");
+		Extension extension = extensionPoint.append(name, "", snapperClass);
+
+		ISnapper snapper;
+		try {
+			snapper = (ISnapper)extension.create();
+			snappers.add(snapper);
+            String nameClass=snapper.getClass().getName();
+	        nameClass=nameClass.substring(nameClass.lastIndexOf('.'));
+	        boolean select = prefSnappers.getBoolean("snapper_activated" + nameClass, false);
+	        int priority = prefs.getInt("snapper_priority" + nameClass,3);
+	        snapper.setPriority(priority);
+	        if (select){
+	          	snapper.setEnabled(select);
+	        }
+
+		} catch (Exception e) {
+			logger.error("It is not possible to create the snapper");
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperAt(int)
+	 */
+	public ISnapper getSnapperAt(int index) {
+		return snappers.get(index);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperCount()
+	 */
+	public int getSnapperCount() {
+		return snappers.size();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#disableSnapping()
+	 */
+	public void disableSnapping() {
+		snappers.clear();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#enableSnapping()
+	 */
+	public void enableSnapping() {
+		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
+		ExtensionPoint ep = extensionPoints.get(SNAPPING_EXTENSION_POINT);
+		Iterator iterator = ep.iterator();
+
+		while (iterator.hasNext()) {
+			try {
+				Extension obj= (Extension)iterator.next();
+				ISnapper snapper = (ISnapper) ep.create(obj.getName());
+				snappers.add(snapper);
+			} catch (Exception e) {
+				logger.error("Creating a snapper", e);
+			}
+		}
+
+		for (int n = 0; n < getSnapperCount(); n++) {
+			ISnapper snp = getSnapperAt(n);
+			String nameClass = snp.getClass().getName();
+			nameClass = nameClass.substring(nameClass.lastIndexOf('.'));
+			boolean select = prefs.getBoolean("snapper_activated" + nameClass, false);
+			if (select) {
+				snp.setEnabled(select);
+			}
+			int priority = prefs.getInt("snapper_priority" + nameClass, 3);
+			snp.setPriority(priority);
+		}
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.MapControlManager#getEditionPreferences()
+	 */
+	public Preferences getEditionPreferences() {
+		return prefs;
+	}
+
+	public MapControl createJMapControlPanel(MapContext mapContext) throws MapControlCreationException {
+		MapControl mapControl = new MapControl(mapContext);
+		mapControl.setMapControlDrawer(this.createDefaultMapControlDrawer());
+                for( MapControlCreationListener listener : this.mapControlCreationListeners ) {
+                    if( listener!=null ) {
+                        mapControl = listener.mapControlCreated(mapControl);
+                    }
+                }
+		return mapControl;
+	}
+
+        public void addMapControlCreationListener(MapControlCreationListener listener) {
+            this.mapControlCreationListeners.add(listener);
+        }
+
+    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
+        Map<String, DynObjectSet> layerName2InfoByPoint) {
+        return createLayersDynObjectSetComponent(layerName2InfoByPoint, false);
+    }
+
+    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
+        Map<String, DynObjectSet> layerName2InfoByPoint, boolean writable) {
+        return new DefaultLayersDynObjectSetComponent(layerName2InfoByPoint,
+            writable);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/impl/DefaultMapControlManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlCreationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlCreationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlCreationException.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.fmap.mapcontrol;
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MapControlCreationException extends MapControlException {
+	private static final long serialVersionUID = -7886043430856453161L;
+	private static final String KEY = "mapcontrol_creatioon_exception";
+	private static final String MESSAGE = "Error creating a MapControl";
+    
+	public MapControlCreationException(Throwable cause) {
+		super(MESSAGE, cause, KEY, serialVersionUID);
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlCreationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLocator.java	(revision 42196)
@@ -0,0 +1,119 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.mapcontrol;
+
+import org.gvsig.editing.EditingNotificationManager;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.gvsig.propertypage.impl.DefaultPropertiesPageManager;
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MapControlLocator extends AbstractLocator {
+	private static final String LOCATOR_NAME = "MapContolLocator";
+	
+	/**
+	 * MapControlManager name used by the locator to access the instance
+	 */
+	public static final String MAPCONTROL_MANAGER_NAME = "MapControlManager";
+	private static final String MAPCONTROL_MANAGER_DESCRIPTION = "MapControlManager of gvSIG";
+
+	public static final String EDITING_NOTIFICATION_MANAGER_NAME = "EditingNotificationManager";
+	private static final String EDITING_NOTIFICATION_MANAGER_DESCRIPTION = "EditingNotificationManager of gvSIG";
+
+	public static final String PROPERTIES_PAGE_MANAGER_NAME = "PropertiesPageManager";
+	private static final String PROPERTIES_PAGE_MANAGER_DESCRIPTION = "PropertiesPage manager of gvSIG";
+
+        /**
+	 * Unique instance.
+	 */
+	private static final MapControlLocator instance = new MapControlLocator();
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.locator.Locator#getLocatorName()
+	 */
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+	
+	/**
+	 * Return a reference to {@link MapControlManager}.
+	 *
+	 * @return a reference to MapControlManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static MapControlManager getMapControlManager() throws LocatorException {
+		return (MapControlManager) getInstance().get(MAPCONTROL_MANAGER_NAME);
+	}
+	
+	/**
+	 * Return the singleton instance.
+	 *
+	 * @return the singleton instance
+	 */
+	public static MapControlLocator getInstance() {
+		return instance;
+	}
+	
+	/**
+	 * Registers the Class implementing the {@link MapControlManager} interface.
+	 *
+	 * @param clazz
+	 *            implementing the MapControlManager interface
+	 */
+	public static void registerMapControlManager(Class clazz) {
+		getInstance().register(MAPCONTROL_MANAGER_NAME, 
+				MAPCONTROL_MANAGER_DESCRIPTION,
+				clazz);
+	}
+
+        public static EditingNotificationManager getEditingNotificationManager() throws LocatorException {
+            return (EditingNotificationManager) getInstance().get(EDITING_NOTIFICATION_MANAGER_NAME);
+        }
+
+	public static void registerEditingNotificationManager(Class clazz) {
+		getInstance().register(EDITING_NOTIFICATION_MANAGER_NAME, 
+				EDITING_NOTIFICATION_MANAGER_DESCRIPTION,
+				clazz);
+	}
+        
+        public static PropertiesPageManager getPropertiesPageManager() {
+            return (PropertiesPageManager) getInstance().get(PROPERTIES_PAGE_MANAGER_NAME);
+        }
+
+	public static void registerPropertiesPageManager(Class clazz) {
+		getInstance().register(PROPERTIES_PAGE_MANAGER_NAME, 
+				PROPERTIES_PAGE_MANAGER_DESCRIPTION,
+				clazz);
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlDrawer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlDrawer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlDrawer.java	(revision 42196)
@@ -0,0 +1,200 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.fmap.mapcontrol;
+
+import java.awt.Color;
+import java.awt.Composite;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.Stroke;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+/**
+ * <p>
+ * Represents a class that can write objects in a map like a raster image, a
+ * {@link Geometry} or other graphical objects. This class doesn't depend of the
+ * dimension of the map (2D or 3D).
+ * </p>
+ * <p>
+ * The Map Control has to have an instance of this class that can be accessed
+ * using the {@link MapControl#getMapControlDrawer()} method. When a Map Control
+ * is created some tools are added to this component using the
+ * {@link MapControl#addBehavior(String, org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior)}
+ * method. Some of these tools need to draw some objects in the map and they use
+ * the MapControlDrawer class to do that.
+ * </p>
+ *
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface MapControlDrawer extends PrimitivesDrawer {
+
+    /**
+     * The <code>ViewPort</code> is used to transform the map
+     * coordinates in the screen coordinates.
+     *
+     * @param viewPort
+     *            The <code>ViewPort</code>
+     */
+    public void setViewPort(ViewPort viewPort);
+
+    /**
+     * It draws a <code>Geometry</code> on the map using the color
+     * specified using the {@link #setColor(Color)} method.
+     *
+     * @param geometry
+     *            The <code>Geometry</code> to draw.
+     */
+    public void draw(Geometry geometry);
+
+    /**
+     * It draws a <code>Geometry</code> on the map using a concrete
+     * symbol.
+     *
+     * @param geometry
+     *            The <code>Geometry</code> to draw.
+     * @param symbol
+     *            The symbol used to draw the geometry.
+     */
+    public void draw(Geometry geometry, ISymbol symbol);
+
+    /**
+     * It draws a <code>Geometry</code> on the map using a concrete
+     * symbol.
+     *
+     * @param geometry
+     *            The <code>Geometry</code> to draw.
+     * @param symbol
+     *            The symbol used to draw the geometry.
+     * @param feature
+     *            The feature used to draw the geometry.
+     */
+    public void draw(Geometry geometry, ISymbol symbol, Feature feature);
+
+
+    /**
+     * It draws the <code>Handler</code>'s that compose a geometry
+     * on the map.
+     *
+     * @param handlers
+     *            An array of <code>Handler</code>'s.
+     * @param at
+     *            A transformation that has to be applied to the
+     *            <code>Handler</code>'s.
+     * @param symbol
+     *            The symbol used to draw the handlers.
+     */
+    public void drawHandlers(Handler[] handlers, AffineTransform at,
+        ISymbol symbol);
+
+    /**
+     * It draws a line using a concrete symbol.
+     *
+     * @param firstPoint
+     *            The first point of the line.
+     * @param endPoint
+     *            The end point of the line.
+     * @param symbol
+     *            The symbol used to draw the line.
+     */
+    public void drawLine(Point2D firstPoint, Point2D endPoint, ISymbol symbol);
+
+    /**
+     * It draws an image on a map in a concrete position.
+     *
+     * @param img
+     *            The image to draw.
+     * @param x
+     *            The X coordinate,
+     * @param y
+     *            The Y coordinate.
+     */
+    public void drawImage(Image img, int x, int y);
+
+    /**
+     * It draws image, applying a transform from image space
+     * into user space before drawing.
+     *
+     * @param img
+     *            The image to draw.
+     * @param xform
+     *            The transform to apply.
+     */
+    public void drawImage(Image img, AffineTransform xform);
+
+    /**
+     * It draws a <code>Handler</code> on the map.
+     *
+     * @param handler
+     *            The <code>Handler</code> to draw.
+     * @param at
+     *            A transformation that has to be applied to the
+     *            <code>Handler</code>.
+     */
+    public void drawHandler(Handler handler, AffineTransform at);
+
+    /**
+     * @param at
+     */
+    public void transform(AffineTransform at);
+
+    /**
+     * @param instance
+     */
+    public void setComposite(Composite instance);
+
+    /**
+     * Replaces the values of all preferences for the rendering algorithms with the specified hints. The existing
+     * values for all rendering hints are discarded and the new set of known hints and values are initialized
+     * from the specified Map object. Hint categories include controls for rendering quality and overall time/
+     * quality trade-off in the rendering process. Refer to the RenderingHints class for definitions of some
+     * common keys and values.
+     * @param hints  the rendering hints to be set
+     */
+    public void setRenderingHints(RenderingHints hints);
+
+    /**
+     * Sets the Stroke for the Graphics2D context.
+     * @param stroke the Stroke object to be used to stroke a Shape during the rendering
+     */
+    public void setStroke(Stroke stroke);
+
+    /**
+     * Cleans the graphics using the image of the MapControl
+     * @param mapCtrl
+     */
+    public void cleanCanvas(MapControl mapCtrl);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlDrawer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLibrary.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {Create Library class to initialize the MapControls library}
+ */
+package org.gvsig.fmap.mapcontrol;
+
+
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Initialization of the MapControls library.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class MapControlLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(MapControlLibrary.class);
+        require(MapContextLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		I18nManager i18nManager = ToolsLocator.getI18nManager();
+		i18nManager.addResourceFamily(
+				"org.gvsig.fmap.mapcontrol.i18n.text",
+				MapControlLibrary.class.getClassLoader(),
+				MapControlLibrary.class.getClass().getName()
+                );
+	}
+	
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+	   	IconThemeHelper.registerIcon("cursor", "cursor-crux", this);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-info-by-point",this);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-pan", this);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-query-area", this);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-select-by-point", this);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-select-by-polygon", this);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-zoom-in", this);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-zoom-out", this);
+
+	   	IconThemeHelper.registerIcon("layer", "layer-icon", this);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-group", this);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-vectorial", this);
+	   	
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectEditor.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 IVER T.I. S.A.   {{Task}}
+ */
+
+/**
+ *
+ */
+package org.gvsig.fmap.mapcontrol.swing.dynobject;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Editor for a store parameters.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DynObjectEditor extends JPanel implements ActionListener {
+
+    private static final long serialVersionUID = 23898787077741411L;
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DynObjectEditor.class);
+
+    private String title;
+
+    private JButton botAcept;
+    private JButton botCancel;
+    private JButton botRestoreDefaults;
+    private JPanel panButtons;
+
+//    private boolean modal;
+
+    private JDynForm form = null;
+    private DynObject data = null;
+    private boolean isCanceled = false;
+    private Runnable onclose = null;
+
+    public DynObjectEditor(DynObject data, boolean showDefaultsButton)
+        throws ServiceException {
+    	this.data = data;
+    	this.form = DynFormLocator.getDynFormManager().createJDynForm(this.data);
+    	this.form.setLayoutMode(this.form.USE_TABS);
+    	this.setLayout(new BorderLayout());
+        this.add(this.form.asJComponent(), BorderLayout.CENTER);
+        this.add(getButtonsPanel(showDefaultsButton), BorderLayout.SOUTH);
+        this.setPreferredSize(new Dimension(500,250));
+        String s = this.data.getDynClass().getDescription();
+        if( s==null || s.length()==0 ) {
+        	s = this.data.getDynClass().getName();
+        }
+        this.setTitle(s);
+    }
+    
+    public DynObjectEditor(DynObject data) throws ServiceException {
+        this(data, false);
+    }
+
+    private JPanel getButtonsPanel(boolean add_defaults_button) {
+        if (this.panButtons == null) {
+            this.panButtons = new JPanel();
+            this.panButtons.setLayout(new GridBagLayout());
+            GridBagConstraints constr = new GridBagConstraints();
+            constr.anchor = GridBagConstraints.LAST_LINE_END;
+            constr.fill = GridBagConstraints.HORIZONTAL;
+            constr.weightx = 1;
+            constr.weighty = 0;
+            this.panButtons.add(new JLabel(), constr);
+
+            constr = this.getDefaultParametersConstraints();
+            constr.fill = GridBagConstraints.NONE;
+            constr.weightx = 0;
+            constr.weighty = 0;
+
+            this.panButtons.add(this.getAcceptButton(), constr);
+            this.panButtons.add(this.getCancelButton(), constr);
+            if (add_defaults_button) {
+                this.panButtons.add(this.getRestoreDefaults(), constr);
+            }
+        }
+        return this.panButtons;
+    }
+
+    private GridBagConstraints getDefaultParametersConstraints() {
+        GridBagConstraints constr = new GridBagConstraints();
+        constr.insets = new Insets(2, 2, 2, 2);
+        constr.ipadx = 2;
+        constr.ipady = 2;
+        constr.anchor = GridBagConstraints.PAGE_START;
+        return constr;
+
+    }
+
+    private JButton getRestoreDefaults() {
+        if (this.botRestoreDefaults == null) {
+            this.botRestoreDefaults =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton(
+                    Messages.getText("restoreDefaults"));
+            this.botRestoreDefaults.addActionListener(this);
+        }
+        return this.botRestoreDefaults;
+    }
+
+    private JButton getCancelButton() {
+        if (this.botCancel == null) {
+            this.botCancel =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton(
+                    Messages.getText("cancel"));
+            this.botCancel.addActionListener(this);
+        }
+        return this.botCancel;
+    }
+
+    private JButton getAcceptButton() {
+        if (this.botAcept == null) {
+            this.botAcept =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton(
+                    Messages.getText("accept"));
+            this.botAcept.addActionListener(this);
+        }
+        return this.botAcept;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        Component source = (Component) e.getSource();
+        if (source == this.botAcept) {
+            this.form.getValues(this.data);
+            this.isCanceled = false;
+            this.closeWindow();
+        } else if (source == this.botCancel) {
+            this.isCanceled = true;
+            this.closeWindow();
+        } else if (source == this.botRestoreDefaults) {
+            this.form.setValues(this.data);
+        }
+    }
+    
+    public void setOnClose(Runnable onclose) {
+        this.onclose = onclose;
+    }
+
+    protected void closeWindow() {
+        LOG.debug("Closing window, values edited: ", this.data);
+        this.setVisible(false);    
+        if( this.onclose != null ) {
+            this.onclose.run();
+        }
+    }
+
+    public void editObject(boolean modal) {
+        WindowManager wmanager = ToolsSwingLocator.getWindowManager();
+        WindowManager.MODE mode = WindowManager.MODE.WINDOW;
+        if( modal ) {
+            mode = WindowManager.MODE.DIALOG;
+        }
+        wmanager.showWindow(this,title,mode);
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    /**
+     * @deprecated use getData
+     * @return the data values of the DynObject managed
+     */
+    public DynObject getParameters() {
+        return this.getData();
+    }
+    
+    /**
+     * Return the data values of the DynObject managed.
+     * @return the dynobject
+     */
+    public DynObject getData() {
+    	this.form.getValues(this.data);
+        return this.data;
+    }
+    
+    public DynObject getData(DynObject data) {
+    	this.form.getValues(data);
+        return data;
+    }
+    
+    public boolean isCanceled() {
+        return this.isCanceled;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/LayersDynObjectSetComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/LayersDynObjectSetComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/LayersDynObjectSetComponent.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.swing.dynobject;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ * Interface for components to show information of a list of layers.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface LayersDynObjectSetComponent extends Component, Disposable {
+
+	public void setMapContext(MapContext mapContext);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/LayersDynObjectSetComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/DefaultLayersDynObjectSetComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/DefaultLayersDynObjectSetComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/DefaultLayersDynObjectSetComponent.java	(revision 42196)
@@ -0,0 +1,349 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.swing.dynobject.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.MutableTreeNode;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynform.AbortActionException;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.JDynFormSet;
+import org.gvsig.tools.dynform.JDynFormSet.JDynFormSetListener;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class DefaultLayersDynObjectSetComponent extends JPanel implements
+        LayersDynObjectSetComponent, TreeSelectionListener, JDynFormSetListener {
+
+    private static final long serialVersionUID = 5864674721657215264L;
+
+    private static final Logger LOG = LoggerFactory
+            .getLogger(DefaultLayersDynObjectSetComponent.class);
+
+    private final LayersDynObjectSetComponentModel model;
+
+    private JDynFormSet component;
+
+    private JTree layersTree;
+    private JPanel contentPanel;
+
+    private final boolean writable;
+
+    private DefaultMutableTreeNode topNode;
+    private MutableTreeNode previousSelection = null;
+
+    private MapContext mapContext = null;
+
+    /**
+     * Creates a new {@link DefaultLayersDynObjectSetComponent} with the given
+     * information for a list of layers.
+     */
+    public DefaultLayersDynObjectSetComponent(
+            Map<String, DynObjectSet> layerName2InfoByPoint) {
+        this(layerName2InfoByPoint, true);
+    }
+
+    /**
+     * @param isDoubleBuffered
+     */
+    public DefaultLayersDynObjectSetComponent(
+            Map<String, DynObjectSet> layerName2InfoByPoint,
+            boolean writable) {
+        super(new BorderLayout());
+        this.writable = writable;
+        model = new LayersDynObjectSetComponentModel(layerName2InfoByPoint);
+        initializeUI();
+    }
+
+    private void initializeUI() {
+        addLayerTree();
+    }
+
+    private void addLayerTree() {
+        topNode = new DefaultMutableTreeNode("");
+        layersTree = new JTree(topNode);
+        layersTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+
+        //layersTree.setShowsRootHandles(true);
+        layersTree.addTreeSelectionListener(this);
+        createTreeModel();
+
+        JScrollPane scroll = new JScrollPane(layersTree);
+        scroll.setPreferredSize(new Dimension(200, 200));
+
+        contentPanel = new JPanel();
+        contentPanel.setLayout(new BorderLayout());
+
+        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
+                scroll, contentPanel);
+        splitPane.setOneTouchExpandable(true);
+        splitPane.setDividerLocation(170);
+
+        //Provide minimum sizes for the two components in the split pane
+        Dimension minimumSize = new Dimension(100, 150);
+        scroll.setMinimumSize(minimumSize);
+
+        add(splitPane, BorderLayout.CENTER);
+
+        for (int i = 0; i < layersTree.getRowCount(); i++) {
+            layersTree.expandRow(i);
+        }
+        layersTree.setRootVisible(false);
+
+        if (topNode.getChildCount() > 0 && topNode.getFirstChild().getChildCount() > 0) {
+            layersTree.setSelectionPath(new TreePath(((DefaultTreeModel) layersTree.getModel()).getPathToRoot(topNode.getFirstChild().getChildAt(0))));
+        }
+    }
+
+    private void createTreeModel() {
+        for (int i = 0; i < model.getSize(); i++) {
+            MutableTreeNode newLayer = new DefaultMutableTreeNode(
+                    model.getElementAt(i),
+                    true);
+
+            DynObjectSet dynObjects = model.getLayerInfoByPoint((String) model.getElementAt(i));
+            Iterator it;
+            try {
+                it = dynObjects.iterator();
+                int j = 0;
+                while (it.hasNext()) {
+                    DynObject dynObject = (DynObject) it.next();
+                    MutableTreeNode newDynObject = new DefaultMutableTreeNode(
+                            concatString(dynObject.toString(), 20),
+                            false);
+                    newLayer.insert(newDynObject, j);
+                    j++;
+                }
+            } catch (BaseException e) {
+                LOG.error("Error getting the DynObjects of "
+                        + "the DynObjectSet: " + dynObjects, e);
+            }
+            topNode.add(newLayer);
+
+        }
+    }
+
+    private String concatString(String cadena, int i) {
+        if (cadena.length() > i && i > 3) {
+            String newCadena = cadena.substring(0, i - 3);
+            cadena = newCadena + "...";
+        }
+        return cadena;
+    }
+
+    private void setCurrentLayerInfoByPoint(String layerName) {
+        JDynFormSet newComponent = null;
+
+        DynObjectSet dynObjectSet = model.getLayerInfoByPoint(layerName);
+        try {
+            newComponent
+                    = DynFormLocator.getDynFormManager()
+                    .createJDynFormSet(dynObjectSet);
+            newComponent.setReadOnly(!this.writable);
+        } catch (BaseException e) {
+            LOG.error("Error creating the JDynFormSet for "
+                    + "the DynObjectSet: " + dynObjectSet, e);
+        }
+
+        if (newComponent != null) {
+            newComponent.setAllowDelete(false);
+            newComponent.setAllowNew(false);
+            newComponent.setAllowSearch(false);
+            newComponent.setAllowUpdate(false);
+            if (this.mapContext != null) {
+                DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
+                newComponent.addActionToPopupMenu(dataManager.get(DataTypes.GEOMETRY), "Center in current view", new CenterGeometryInMapContext(this.mapContext));
+            }
+            removeCurrentDynObjectSetComponent();
+            component = newComponent;
+            component.addListener(this);
+            JComponent comp = component.asJComponent();
+            contentPanel.add(comp, BorderLayout.CENTER);
+            revalidate();
+            repaint();
+        }
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public void dispose() {
+        removeCurrentDynObjectSetComponent();
+        model.dispose();
+    }
+
+    private void removeCurrentDynObjectSetComponent() {
+        if (component != null) {
+            remove(component.asJComponent());
+            //  component.dispose();
+            contentPanel.removeAll();
+            contentPanel.repaint();
+        }
+    }
+
+    public void valueChanged(TreeSelectionEvent e) {
+        TreePath newPath = e.getNewLeadSelectionPath();
+        TreePath oldPath = e.getOldLeadSelectionPath();
+
+        if (!newPath.equals(oldPath)) {
+            DefaultMutableTreeNode aux
+                    = (DefaultMutableTreeNode) layersTree.getLastSelectedPathComponent();
+
+            if (layersTree.getSelectionPath() != null) {
+                if (aux.isLeaf()) { // A Feature node is selected
+                    String layerName = "";
+                    if (previousSelection == null
+                            || !aux.getParent().equals(previousSelection.getParent())) {
+                        layerName = aux.getParent().toString();
+                        setCurrentLayerInfoByPoint(layerName);
+                    }
+                    int childIndex = aux.getParent().getIndex(aux);
+                    if (childIndex != -1) {
+                        component.setCurrentIndex(childIndex);
+                    }
+                    previousSelection = aux;
+                }
+            }
+        }
+    }
+
+    public void message(String arg0) {
+        // Do nothing
+    }
+
+    public void formClose() {
+        this.setVisible(false);
+    }
+
+    public void formMessage(String arg0) {
+        // Do nothing
+    }
+
+    public void formMovedTo(int arg0) {
+        DefaultMutableTreeNode aux
+                = (DefaultMutableTreeNode) layersTree.getLastSelectedPathComponent();
+        TreeNode parent = aux.getParent();
+        TreeNode selectNode = parent.getChildAt(arg0);
+
+        TreePath path = new TreePath(((DefaultTreeModel) layersTree.getModel()).getPathToRoot(selectNode));
+        layersTree.setSelectionPath(path);
+    }
+
+    public void setMapContext(MapContext mapContext) {
+        this.mapContext = mapContext;
+    }
+
+    public void formBeforeSave(JDynFormSet jdfs) throws AbortActionException {
+    }
+
+    public void formBeforeNew(JDynFormSet jdfs) throws AbortActionException {
+    }
+
+    public void formBeforeDelete(JDynFormSet jdfs) throws AbortActionException {
+    }
+
+    public void formBeforeSearch(JDynFormSet jdfs) throws AbortActionException {
+    }
+
+    public void formAfterSave(JDynFormSet jdfs) {
+    }
+
+    public void formAfterNew(JDynFormSet jdfs) {
+    }
+
+    public void formAfterDelete(JDynFormSet jdfs) {
+    }
+
+    public void formAfterSearch(JDynFormSet jdfs) {
+    }
+
+    public class CenterGeometryInMapContext extends AbstractAction implements Action {
+
+        private MapContext mapContext;
+
+        public CenterGeometryInMapContext(MapContext mapContext) {
+            super("Center in the current view");
+            this.mapContext = mapContext;
+            this.putValue(Action.SHORT_DESCRIPTION, "Center geometry in the current view");
+            this.putValue(Action.LONG_DESCRIPTION, "Center geometry in the current view");
+        }
+
+        public void actionPerformed(ActionEvent arg0) {
+            if (mapContext == null) {
+                return;
+            }
+            Object source = null;
+            try {
+                source = arg0.getSource();
+                JDynFormField field = (JDynFormField) source;
+                Geometry geom = (Geometry) field.getValue();
+                if (geom == null) {
+                    JOptionPane.showMessageDialog(component.asJComponent(), "The geometri is not valid. Can't center the view in it.", "Warning", JOptionPane.INFORMATION_MESSAGE);
+                    return;
+                }
+                mapContext.getViewPort().setEnvelope(geom.getEnvelope());
+                mapContext.invalidate();
+            } catch (Exception ex) {
+                LOG.warn("Can't center view in the geometry (source=" + source.toString() + ").", ex);
+            }
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/DefaultLayersDynObjectSetComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/LayersDynObjectSetComponentModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/LayersDynObjectSetComponentModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/LayersDynObjectSetComponentModel.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.swing.dynobject.impl;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.AbstractListModel;
+
+import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynobject.DynObjectSet;
+
+/**
+ * Model for a {@link LayersDynObjectSetComponent}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class LayersDynObjectSetComponentModel extends AbstractListModel
+    implements Disposable {
+
+    private static final long serialVersionUID = -7978388308830573063L;
+
+    private final Map<String, DynObjectSet> layerName2InfoByPoint;
+    private final String[] layerNames;
+
+    public LayersDynObjectSetComponentModel(
+        Map<String, DynObjectSet> layerName2InfoByPoint) {
+        this.layerName2InfoByPoint = layerName2InfoByPoint;
+        Set<String> keyset = layerName2InfoByPoint.keySet();
+        layerNames = keyset.toArray(new String[keyset.size()]);
+    }
+
+    public String[] getLayerNames() {
+        Set<String> keyset = layerName2InfoByPoint.keySet();
+        return keyset.toArray(new String[keyset.size()]);
+    }
+
+    public DynObjectSet getLayerInfoByPoint(String layerName) {
+        return layerName2InfoByPoint.get(layerName);
+    }
+
+    public int getSize() {
+        return layerName2InfoByPoint.size();
+    }
+
+    public Object getElementAt(int index) {
+        return layerNames[index];
+    }
+
+    public void dispose() {
+        for (Iterator<DynObjectSet> iterator =
+            layerName2InfoByPoint.values().iterator(); iterator.hasNext();) {
+            iterator.next().dispose();
+        }
+        layerName2InfoByPoint.clear();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/impl/LayersDynObjectSetComponentModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectViewer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectViewer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectViewer.java	(revision 42196)
@@ -0,0 +1,160 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+* AUTHORS (In addition to CIT):
+* 2009 IVER T.I. S.A.   {{Task}}
+*/
+
+package org.gvsig.fmap.mapcontrol.swing.dynobject;
+
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+public class DynObjectViewer extends JPanel {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -5277036770491043233L;
+	private GridBagConstraints paramsListLabelConstraint;
+	private GridBagConstraints paramsListValueConstraint;
+	private GridBagConstraints paramsListFillConstraint;
+
+	public DynObjectViewer() {
+		super();
+		this.intialize();
+	}
+
+	private void intialize() {
+		this.setLayout(new GridBagLayout());
+
+		paramsListLabelConstraint = new GridBagConstraints();
+		paramsListValueConstraint = new GridBagConstraints();
+		paramsListFillConstraint = new GridBagConstraints();
+
+		paramsListLabelConstraint.ipadx = 3;
+		paramsListLabelConstraint.ipady = 3;
+		paramsListLabelConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+		paramsListLabelConstraint.gridwidth = GridBagConstraints.RELATIVE;
+		paramsListLabelConstraint.fill = GridBagConstraints.HORIZONTAL;
+		paramsListLabelConstraint.weightx = 0.5;
+
+		paramsListValueConstraint.ipadx = 3;
+		paramsListValueConstraint.ipady = 3;
+		paramsListValueConstraint.anchor = GridBagConstraints.FIRST_LINE_END;
+		paramsListValueConstraint.gridwidth = GridBagConstraints.REMAINDER;
+		paramsListValueConstraint.fill = GridBagConstraints.HORIZONTAL;
+		paramsListValueConstraint.weightx = 0.5;
+
+		paramsListFillConstraint.ipadx = 3;
+		paramsListFillConstraint.ipady = 3;
+		paramsListFillConstraint.anchor = GridBagConstraints.FIRST_LINE_END;
+		paramsListFillConstraint.gridwidth = GridBagConstraints.REMAINDER;
+		paramsListFillConstraint.fill = GridBagConstraints.BOTH;
+		paramsListFillConstraint.weightx = 1;
+		paramsListFillConstraint.weighty = 1;
+	}
+
+	private String getLocalizedText(String txt) {
+		try {
+			return Messages.getText(txt);
+		} catch (Exception e) {
+			return txt;
+		}
+	}
+
+	public void load(DynObject dynObj) {
+		this.removeAll();
+
+		if (dynObj == null) {
+			this.doLayout();
+			return;
+		}
+		DynClass dynClass = dynObj.getDynClass();
+
+		JTextField label;
+		JTextField text;
+		Object value;
+		String strValue;
+
+		//		label = new JLabel();
+		//		label.setText(getLocalizedText("parameter"));
+		//		label.setBackground(Color.LIGHT_GRAY);
+		//		this.add(label, paramsListLabelConstraint);
+
+		text = new JTextField();
+		text.setText(getLocalizedText("parameter"));
+		text.setEditable(false);
+		text.setBackground(Color.LIGHT_GRAY);
+		this.add(text, paramsListLabelConstraint);
+
+		text = new JTextField();
+		text.setText(getLocalizedText("value"));
+		text.setEditable(false);
+		text.setBackground(Color.LIGHT_GRAY);
+		this.add(text, paramsListValueConstraint);
+
+		for (DynField field : dynClass.getDynFields()) {
+			label = new JTextField();
+			label.setText(field.getDescription());
+			label.setEditable(false);
+			this.add(label, paramsListLabelConstraint);
+
+			strValue = "";
+			value = dynObj.getDynValue(field.getName());
+			if (value != null) {
+				if (value instanceof String) {
+					strValue = (String) value;
+				} else if (value instanceof IProjection) {
+					strValue = ((IProjection) value).getAbrev();
+				} else {
+					strValue = value.toString();
+				}
+
+			}
+			text = new JTextField();
+			text.setText(strValue);
+			text.setEditable(false);
+			this.add(text, paramsListValueConstraint);
+		}
+
+		this.add(new JLabel(), paramsListFillConstraint);
+
+		this.doLayout();
+		this.repaint();
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynobject/DynObjectViewer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystemFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystemFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystemFactory.java	(revision 42196)
@@ -0,0 +1,26 @@
+package org.gvsig.fmap.mapcontrol.swing.dynformfield.CoordinateReferenceSystem;
+
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceManager;
+
+public class JDynFormFieldCoordinateReferenceSystemFactory extends AbstractJDynFormFieldFactory {
+
+	public String getName() {
+		if( name == null ) {
+			DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+			this.name = manager.makeServiceName(org.cresques.DataTypes.CRS, null);
+		}
+		return this.name;
+	}
+
+	public Service create(DynObject parameters, ServiceManager serviceManager)
+			throws ServiceException {
+		return new JDynFormFieldCoordinateReferenceSystem(parameters, serviceManager);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystemFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystem.java	(revision 42196)
@@ -0,0 +1,107 @@
+package org.gvsig.fmap.mapcontrol.swing.dynformfield.CoordinateReferenceSystem;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.cresques.Messages;
+import org.cresques.cts.IProjection;
+import org.gvsig.app.gui.panels.CRSSelectPanelFactory;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.JCustomTextField;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.ServiceManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+
+public class JDynFormFieldCoordinateReferenceSystem extends AbstractJDynFormField implements JDynFormField, FocusListener {
+	
+	protected IProjection assignedValue  = null;
+	protected IProjection currentValue = null;
+	protected JTextField jtext = null;
+	protected JButton jbutton = null;
+
+	public JDynFormFieldCoordinateReferenceSystem(DynObject parameters,
+			ServiceManager serviceManager) {
+		super(parameters, serviceManager);
+		this.assignedValue = (IProjection) this.getParameterValue();
+	}
+
+	public Object getAssignedValue() {
+		return this.assignedValue;
+	}
+	
+	public void initComponent() {
+		this.contents = new JPanel();
+		this.contents.setLayout(new BorderLayout());
+		
+		this.jtext = new JCustomTextField(getLabel());
+		this.jtext.addFocusListener(this);
+		this.jtext.setEditable(false);
+		this.jbutton = new JButton("...");
+		this.jbutton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				onClickBrowse();
+			}
+		});
+
+		this.contents.add(jtext,BorderLayout.CENTER);
+		this.contents.add(jbutton,BorderLayout.LINE_END);
+		this.contents.setVisible(true);
+		this.setValue(this.assignedValue);
+	}
+	
+	public void onClickBrowse() {
+		fireFieldEnterEvent();
+		this.problemIndicator().restore();
+		
+        ISelectCrsPanel csSelect = CRSSelectPanelFactory.getUIFactory().getSelectCrsPanel(this.currentValue, true);
+        ToolsSwingLocator.getWindowManager().showWindow((JComponent) csSelect, Messages.getText("selecciona_sistema_de_referencia"), MODE.DIALOG);
+        if (csSelect.isOkPressed()) {
+        	this.currentValue = csSelect.getProjection();
+        	this.jtext.setText(this.currentValue.getAbrev());
+        }
+	}
+	
+	public boolean hasValidValue() {
+		return true;
+	}
+
+	public void focusGained(FocusEvent arg0) {
+		fireFieldEnterEvent();
+		this.problemIndicator().restore();
+	}
+
+	public void focusLost(FocusEvent arg0) {
+		fireFieldExitEvent();
+	}
+
+	public void setValue(Object value) {
+		IProjection x = null;
+		try {
+			x = (IProjection) this.getDefinition().getDataType().coerce(value);
+		} catch (CoercionException e) {
+			throw new IllegalFieldValue(this,e.getMessage());
+		}
+		this.currentValue = x;
+		if( x!=null ) {
+			this.jtext.setText(x.getAbrev());
+		}
+		this.assignedValue = x;
+	}
+
+	public Object getValue() {
+		return this.currentValue;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/CoordinateReferenceSystem/JDynFormFieldCoordinateReferenceSystem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometry.java	(revision 42196)
@@ -0,0 +1,166 @@
+package org.gvsig.fmap.mapcontrol.swing.dynformfield.Geometry;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.JCustomTextField;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.service.spi.ServiceManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JDynFormFieldGeometry extends AbstractJDynFormField implements JDynFormField, FocusListener {
+	
+        private static final Logger logger = LoggerFactory.getLogger(JDynFormFieldGeometry.class);
+        
+	protected Geometry assignedValue  = null;
+	protected Geometry currentValue = null;
+	protected boolean showWKT = false;
+
+	public JDynFormFieldGeometry(DynObject parameters,
+			ServiceManager serviceManager) {
+		super(parameters, serviceManager);
+		this.assignedValue = (Geometry) this.getParameterValue();
+	}
+
+	public Object getAssignedValue() {
+		return this.assignedValue;
+	}
+	
+	protected JCustomTextField getJTextField() {
+		return (JCustomTextField) this.contents;
+	}
+	
+	public void initComponent() {	
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+		JCustomTextField jtext = new JCustomTextField(getLabel());
+		jtext.addFocusListener(this);
+		jtext.setEditable(false);
+
+		jtext.addSeparatorToPopupMenu();
+		jtext.addActionToPopupMenu(
+                        i18nManager.getTranslation("_Toggle_show_geometry_as_WKT"),
+                        new AbstractAction() {
+			public void actionPerformed(ActionEvent e) {
+				toggleShowGeometryAsWKT();
+			}
+		});
+		
+		this.contents = jtext;
+		this.contents.setVisible(true);
+		this.setValue(this.assignedValue);
+	}
+	
+	private void toggleShowGeometryAsWKT() {
+		if( this.showWKT ) {
+			Geometry x = null;
+			try {
+				x = (Geometry) this.getValue();
+			} catch( IllegalFieldValue ex) {
+				x = null;
+			}
+			if( x!= null ) {
+				this.getJTextField().setText(x.toString());
+			} else {
+				this.getJTextField().setText("");
+			}
+			this.showWKT = false;			
+			this.getJTextField().setEditable(false);
+			this.currentValue = x;
+		} else {
+			String s = null;
+			if( this.currentValue == null ) {
+				s = "" ;
+			} else {
+				try {
+					s = this.currentValue.convertToWKT();
+				} catch (Exception e) {
+                                    I18nManager i18nManager = ToolsLocator.getI18nManager();
+                                    logger.warn("Can't convert geometry to WKT.",e);
+                                    JOptionPane.showMessageDialog(
+                                            this.asJComponent(), 
+                                            i18nManager.getTranslation("_Cant_convert_geometry_to_WKT"), 
+                                            i18nManager.getTranslation("_Warning"), 
+                                            JOptionPane.WARNING_MESSAGE
+                                    );
+                                    s = "";
+				} 
+			}
+			this.getJTextField().setText(s);
+			this.getJTextField().setEditable(true);
+			this.showWKT = true;
+		}
+	}
+	
+	public boolean hasValidValue() {
+		if( !showWKT ) {
+			return true;
+		}
+		try {
+			this.getDefinition().getDataType().coerce(getJTextField().getText());
+		} catch (CoercionException e) {
+			return false;
+		}
+		return true;
+	}
+
+	public void focusGained(FocusEvent arg0) {
+		fireFieldEnterEvent();
+		this.problemIndicator().restore();
+	}
+
+	public void focusLost(FocusEvent arg0) {
+		fireFieldExitEvent();
+	}
+
+	public void setValue(Object value) {
+		String s = null;
+		Geometry x = null;
+		try {
+			x = (Geometry) this.getDefinition().getDataType().coerce(value);
+		} catch (CoercionException e) {
+			throw new IllegalFieldValue(this,e.getMessage());
+		}
+		if( x!=null ) {
+			if( this.showWKT ) {
+				try {
+					s = x.convertToWKT();
+				} catch (Exception e) {
+					this.showWKT = false;
+					this.getJTextField().setEditable(false);
+					s = x.toString();
+				}
+			} else {
+				s = x.toString();
+			}
+			this.getJTextField().setText(s);
+		}
+		this.currentValue = x;
+		this.assignedValue = x;
+	}
+
+	public Object getValue() {
+		if( !showWKT ) {
+			return this.currentValue;
+		}
+		Geometry x = null;
+		try {
+			x = (Geometry) this.getDefinition().getDataType().coerce(getJTextField().getText());
+		} catch (CoercionException e) {
+			throw new IllegalFieldValue(this,e.getMessage());
+		}
+		this.currentValue = x;
+		return this.currentValue;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometryFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometryFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometryFactory.java	(revision 42196)
@@ -0,0 +1,27 @@
+package org.gvsig.fmap.mapcontrol.swing.dynformfield.Geometry;
+
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceManager;
+
+public class JDynFormFieldGeometryFactory extends AbstractJDynFormFieldFactory {
+
+	public String getName() {
+		if( name == null ) {
+			DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+			this.name = manager.makeServiceName(DataTypes.GEOMETRY, null);
+		}
+		return this.name;
+	}
+
+	public Service create(DynObject parameters, ServiceManager serviceManager)
+			throws ServiceException {
+		return new JDynFormFieldGeometry(parameters, serviceManager);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/swing/dynformfield/Geometry/JDynFormFieldGeometryFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlCreationListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlCreationListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlCreationListener.java	(revision 42196)
@@ -0,0 +1,9 @@
+
+
+package org.gvsig.fmap.mapcontrol;
+
+
+public interface MapControlCreationListener {
+    
+    public MapControl mapControlCreated(MapControl mapControl);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlManager.java	(revision 42196)
@@ -0,0 +1,244 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.fmap.mapcontrol;
+
+import java.util.Map;
+import java.util.prefs.Preferences;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+
+/**
+ * <p>
+ * This class is the manager of the MapControl library. It is used to
+ * manage all the properties related with the drawing of objects 
+ * in a map, including default symbols used to draw objects
+ * in a map, the tolerance used by the selection or edition tools...
+ * </p>
+ * <p>
+ * It also holds the implementations of the {@link MapControlDrawer}'s, 
+ * that is the responsible to draw graphical objects in a map.
+ * </p> 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface MapControlManager {
+
+	public MapControl createJMapControlPanel(MapContext mapContext) throws MapControlCreationException;
+	  
+    public void addMapControlCreationListener(MapControlCreationListener listener);
+        
+	/**
+	 * Register a <code>MapControlDrawer</code> by name.
+	 * @param name
+	 * Name of the <code>MapControlDrawer</code>.
+	 * @param mapControolDrawerClass
+	 * Class used to draw graphical objects on a map.
+	 */
+	public void registerMapControlDrawer(String name, Class mapControolDrawerClass);
+	
+	/**
+	 * Creates a <code>MapControlDrawer</code> from a name.
+	 * @param name
+	 * Name of the <code>MapControlDrawer</code>.
+	 * @return
+	 * A <code>MapControlDrawer</code>.
+	 * @throws MapControlCreationException
+	 */
+	public MapControlDrawer createMapControlDrawer(String name) throws MapControlCreationException;
+	
+	/**
+	 * It registers the default implementation for the <code>MapControlDrawer</code>.
+	 * @param mapControlDrawerClass
+	 * A <code>MapControlDrawer</code>. 
+	 */
+	public void registerDefaultMapControlDrawer(Class mapControlDrawerClass);
+	
+	/**
+	 * It returns the default implementation for the <code>MapControlDrawer</code>.
+	 * @return
+	 * The default <code>MapControlDrawer</code>.
+	 * @throws MapControlCreationException
+	 */
+	public MapControlDrawer createDefaultMapControlDrawer() throws MapControlCreationException;
+	
+	/**
+	 * Returns a snapper in a concrete position;
+	 * @param index
+	 * Snapper position.
+	 * @return
+	 * A snapper. 
+	 */
+	public ISnapper getSnapperAt(int index);
+	
+	/**
+	 * Returns the number of registered snappers.
+	 * @return
+	 * The number of registered snappers.
+	 */
+	public int getSnapperCount();
+	
+	/**
+	 * Add a snapper.
+	 * @param snapper
+	 */
+	public void registerSnapper(String name, Class snapperClass);
+	
+	
+	public Preferences getEditionPreferences();
+	
+	/**
+	 * Tolerance (in pixels) that has to be used by the tools
+	 * that use snapping.
+	 * @return
+	 * The distance in pixels.
+	 */
+	public int getTolerance();
+	
+	/**
+	 * Sets the tolerance (in pixels) that has to be used by the
+	 * tools that use snapping.
+	 * @param tolerance
+	 * The tolerance to apply
+	 */
+	public void setTolerance(int tolerance);
+	
+	/**
+	 * Sets the symbol that has to be used to draw a geometry when
+	 * it is selected.
+	 * @param selectionSymbol
+	 * The symbol to apply.
+	 * @deprecated the symbol for edition is the selection symbol
+	 */
+	public void setSelectionSymbol(ISymbol selectionSymbol);
+	
+	/**
+	 * Gets the symbol used to draw the selected geometries.
+	 * @return
+	 * The symbol used to draw the selected geometries.
+	 * @deprecated the symbol for edition is the selection symbol
+	 */
+	public ISymbol getSelectionSymbol();
+	
+	/**
+	 * Sets the symbol that has to be used to draw a geometry that
+	 * represent the axis of a geometry.
+	 * @param axisReferencesSymbol
+	 * The symbol to apply.
+	 */
+	public void setAxisReferenceSymbol(ISymbol axisReferencesSymbol);
+	
+	/**
+	 * Gets the symbol used to draw the axis of a geometry.
+	 * @return
+	 * The symbol used to draw the axis of a geometry.
+	 */
+	public ISymbol getAxisReferenceSymbol();
+	
+	/**
+	 * Sets the symbol that has to be used to draw a geometry when
+	 * it is selected.
+	 * @param geometrySelectionSymbol
+	 * The symbol to apply.
+	 */
+	public void setGeometrySelectionSymbol(ISymbol geometrySelectionSymbol);
+	
+	/**
+	 * Gets the symbol used to draw the selected geometries.
+	 * @return
+	 * The symbol used to draw the selected geometries.
+	 */
+	public ISymbol getGeometrySelectionSymbol();
+	
+	/**
+	 * Sets the symbol that has to be used to draw the handlers.
+	 * @param handlerSymbol
+	 * The symbol to apply.
+	 */
+	public void setHandlerSymbol(ISymbol handlerSymbol);
+	
+	/**
+	 * Gets the symbol used to draw the handlers.
+	 * @return
+	 * The symbol used to draw the handlers.
+	 */
+	public ISymbol getHandlerSymbol();
+
+    /**
+     * Creates a readonly component to view information of a set of layers. The
+     * information must be provided as a set of {@link DynObject}s, through a
+     * {@link DynObjectSet}.
+     * 
+     * @param layerName2InfoByPoint
+     *            the map of {@link DynObjectSet} for each layer.
+     * @return the component to view the information
+     */
+    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
+        Map<String, DynObjectSet> layerName2InfoByPoint);
+
+    /**
+     * Creates a component to view information of a set of layers. The
+     * information must be provided as a set of {@link DynObject}s, through a
+     * {@link DynObjectSet}.
+     * 
+     * @param layerName2InfoByPoint
+     *            the map of {@link DynObjectSet} for each layer.
+     * @param writable
+     *            if the DynObjects loaded must be able to be edited
+     * @return the component to view the information
+     */
+    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
+        Map<String, DynObjectSet> layerName2InfoByPoint, boolean writable);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlException.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.fmap.mapcontrol;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MapControlException extends BaseException {
+	private static final long serialVersionUID = 981894833703125550L;
+
+	/**
+     * @see BaseException#BaseException(String, String, long)
+     */
+    public MapControlException(String message, String key, long code) {
+        super(message, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long)
+     */
+    public MapControlException(String message, Throwable cause, String key,
+            long code) {
+        super(message, cause, key, code);
+    }
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControlException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControl.java	(revision 42196)
@@ -0,0 +1,2650 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.MemoryImageSource;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.prefs.Preferences;
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.events.AtomicEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.AtomicEventListener;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.CompoundBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+import org.gvsig.fmap.mapcontrol.tools.grid.Grid;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperGeometriesVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperRaster;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.utils.exceptionHandling.ExceptionHandlingSupport;
+import org.gvsig.utils.exceptionHandling.ExceptionListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * A component that includes a {@link MapContext MapContext} with support for
+ * use it as a particular {@link Behavior Behavior}.
+ * </p>
+ *
+ * <p>
+ * A developer can register a set of <code>Behavior</code>, but only one (that
+ * can be a composition of several) of them can be active. The active one
+ * defines the way to work and access with its <code>MapContext</code>'s layers.
+ * The active behavior, in combination with the appropriate {@link ToolListener
+ * ToolListener} will allow user work with a particular <i>tool</i>.
+ * </p>
+ *
+ * <p>
+ * All mouse events produced on this component will be delegated to the current
+ * active behavior, the <i>currentMapTool</i>.
+ * </p>
+ *
+ * <p>
+ * <b>Drawing process:</b>
+ * </p>
+ *
+ * <p>
+ * Uses a double buffer for the drawing process of <code>MapContext</code>'s
+ * information.
+ * </p>
+ *
+ * <p>
+ * If the double buffer wasn't created, creates a new one.
+ * </p>
+ *
+ * <p>
+ * Paints the component according the following algorithm: <br>
+ * &nbsp If <i>status</i> is <i>UPDATED</i>:<br>
+ * &nbsp &nbsp If there is a <i>double buffer</i>:<br>
+ * &nbsp &nbsp &nbsp If there is a <i>behavior</i> for managing the
+ * <code>MapControl</code> instance, delegates the drawing process to that
+ * behavior, calling: <code><i>behavior_instance</i>.paintComponent(g)</code>.<br>
+ * &nbsp &nbsp &nbsp Else, repaints the current graphical information quickly
+ * calling: <code>g.drawImage(image,0,0,null)</code>.<br>
+ * &nbsp Else, (<i>status</i> is <i>OUTDATED</i>, or <i>ONLY_GRAPHICS</i>):
+ * executes a quickly repaint of the previous information calling
+ * <code>g.drawImage(image,0,0,null)</code>, and creates a <i>painting
+ * request</i> to delegate the heavy drawing process to the {@link Drawer2
+ * Drawer2}'s worker thread, according the <i>SingleWorketThread</i> pattern,
+ * starting a timer to update (invoking <code>repaint()</code>) the view every
+ * delay of <code>1000 / drawFrameRate</code> ms. during that heavy drawing
+ * process, and if its enabled <code>drawAnimationEnabled</code>. The
+ * <i>painting request</i> once is being attended, invokes
+ * <code>MapContext</code> to draw the layers:
+ * <code>mapContext.draw(image, g, cancel,mapContext.getScaleView());</code>
+ * <br>
+ * <p>
+ * Some notes:
+ * <ul>
+ * <li>The painting process can be cancelled calling {@link #cancelDrawing()
+ * #cancelDrawing()}.</li>
+ * <li>At last resort, the particular implementation of each layer in a
+ * <code>MapControl</code>'s <code>MapContrext</code> will be that one which
+ * will draw the graphical information, and, if supports, which could cancel its
+ * drawing subprocess.</li>
+ * <li>It's possible to force repaint all layers, calling
+ * {@link #drawMap(boolean doClear) #drawMap(boolean)}.</li>
+ * <li>It's possible repaint only the dirty layers, calling
+ * {@link #rePaintDirtyLayers() #rePaintDirtyLayers()}.</li>
+ * <li>It's possible repaint only the {@link GraphicLayer GraphicLayer}, calling
+ * {@link #drawGraphics() #drawGraphics()}.</li>
+ * </ul>
+ * </p>
+ *
+ * <p>
+ * <b>Tools:</b>
+ * </p>
+ *
+ * <p>
+ * A developer can:
+ * <ul>
+ * <li>Register each tool as:
+ * <ul>
+ * <li>A single behavior: {@link #addBehavior(String, Behavior)
+ * #addMapTool(String, Behavior)}.</li>
+ * <li>Or, a compound behavior: {@link #addBehavior(String, Behavior)
+ * #addMapTool(String, Behavior)}.</li>
+ * </ul>
+ * </li>
+ * <li>Get the current active tool: {@link #getCurrentMapTool()
+ * #getCurrentMapTool()}.</li>
+ * <li>Get the current active tool name: {@link #getCurrentTool()
+ * #getCurrentTool()}.</li>
+ * <li>Get a registered tool: {@link #getMapTool(String) #getMapTool(String)}.</li>
+ * <li>Get the name of all tools registered: {@link #getMapToolsKeySet()
+ * #getMapToolsKeySet()}.</li>
+ * <li>Get all tools registered, including the name they were registered:
+ * {@link #getNamesMapTools() #getNamesMapTools()}.</li>
+ * <li>Determine if has a tool registered: {@link #hasTool(String)
+ * #hasTool(String)}.</li>
+ * <li>Set as an active tool, one of the registered: {@link #setTool(String)
+ * #setTool(String)}.</li>
+ * <li>Set as active tool, the previous used: {@link #setPrevTool()
+ * #setPrevTool()}.</li>
+ * <li>Set the current tool: {@link #setCurrentMapTool(Behavior)
+ * #setCurrentMapTool(Behavior)}.</li>
+ * <li>Change the draw frame rate: {@link #setDrawFrameRate(int)
+ * #setDrawFrameRate(int)} and {@link #applyFrameRate() #applyFrameRate()}.</li>
+ * <li>Get the draw frame rate: {@link #getDrawFrameRate() #getDrawFrameRate()}.
+ * </li>
+ * <li>Determine if will repaint this component each time timer finishes:
+ * {@link #isDrawAnimationEnabled() #isDrawAnimationEnabled()}.</li>
+ * <li>Change if will repaint this component each time timer finishes:
+ * {@link #setDrawAnimationEnabled(boolean) #setDrawAnimationEnabled(boolean)}.</li>
+ * <li>Get the shared object that determines if a drawing process must be
+ * cancelled or can continue: {@link #getCanceldraw() #getCanceldraw()}.</li>
+ * <li>Get the combined tool: {@link #getCombinedTool() #getCombinedTool()}.</li>
+ * <li>Set a combined tool: {@link #setCombinedTool(Behavior)
+ * #setCombinedTool(Behavior)}.</li>
+ * <li>Remove the combined tool: {@link #removeCombinedTool()
+ * #removeCombinedTool()}.</li>
+ * </ul>
+ * </p>
+ *
+ * <p>
+ * <b>Exception listener:</b>
+ * </p>
+ *
+ * <p>
+ * Adding an <code>ExceptionListener</code>, can get notification about any
+ * exception produced:
+ * <ul>
+ * <li>Attending a <i>painting request</i>.</li>
+ * <li>Working with the active tool.</li>
+ * <li>Applying a <i>zoom in</i> or <i>zoom out</i> operation.</li>
+ * </ul>
+ * </p>
+ *
+ * <p>
+ * <b>Other:</b>
+ * </p>
+ *
+ * <p>
+ * Other useful capabilities of <code>MapControl</code>:
+ * <ul>
+ * <li>Cancel the current drawing process (notifying it also to the inner
+ * <code>MapContext</code> instance and its layers): {@link #cancelDrawing()
+ * #cancelDrawing()}.</li>
+ * <li>Applying a <i>zoom in</i> operation centered at mouse position (without a
+ * <code>ToolListener</code>): {@link #zoomIn() #zoomIn()}.</li>
+ * <li>Applying a <i>zoom out</i> operation centered at mouse position (without
+ * a <code>ToolListener</code>): {@link #zoomOut() #zoomOut()}.</li>
+ * </ul>
+ * </p>
+ *
+ * @see CancelDraw
+ * @see Drawer
+ * @see MapContextListener
+ * @see MapToolListener
+ *
+ * @author Fernando Gonz�lez Cort�s
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class MapControl extends JComponent implements ComponentListener,
+    Observer, Disposable {
+
+    protected static final GeometryManager geomManager =
+        GeometryLocator.getGeometryManager();
+    private static final Logger LOG =
+        LoggerFactory.getLogger(GeometryManager.class);
+
+    /**
+     * <p>
+     * One of the possible status of <code>MapControl</code>. Determines that
+     * all visible information has been drawn and its updated.
+     * </p>
+     */
+    public static final int ACTUALIZADO = 0;
+
+    /**
+     * <p>
+     * One of the possible status of <code>MapControl</code>. Determines that
+     * not all visible information has been drawn or isn't updated.
+     * </p>
+     */
+    public static final int DESACTUALIZADO = 1;
+
+    /**
+     * <p>
+     * Determines if the drawer can update this <code>MapControl</code> instance
+     * when the timer launches an event.
+     * </p>
+     */
+    private static boolean drawAnimationEnabled = true;
+
+    /**
+     * <p>
+     * Inner model with the layers, event support for drawing them, and the
+     * <code>ViewPort</code> with information to adapt to the bounds available
+     * in <i>image coordinates</i>.
+     * </p>
+     *
+     * @see #getMapContext()
+     * @see #setMapContext(MapContext)
+     */
+    private MapContext mapContext = null;
+
+    /**
+     * <p>
+     * All registered <code>Behavior</code> that can define a way to work with
+     * this <code>MapControl</code>.
+     * </p>
+     *
+     * <p>
+     * Only one of them can be active at a given moment.
+     * </p>
+     *
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     * @see #getMapTool(String)
+     * @see #getMapToolsKeySet()
+     * @see #getNamesMapTools()
+     */
+    protected Map<String,Behavior> namesMapTools = new HashMap<String,Behavior>();
+
+    /**
+     * <p>
+     * Active {@link Behavior Behavior} that will generate events according a
+     * criterion, and then, with a {@link ToolListener ToolListener} associated,
+     * will simulate to user that works with this component as a particular
+     * tool.
+     * </p>
+     *
+     * @see #getCurrentMapTool()
+     * @see #getCurrentTool()
+     * @see #setTool(String)
+     */
+    protected Behavior currentMapTool = null;
+
+    /**
+     * <p>
+     * Determines which's the current drawn status of this component:
+     * <ul>
+     * <li><b>OUTDATED</b>: all visible information has been drawn or isn't
+     * updated.</li>
+     * <li><b>UTDATED</b>: all visible information has been drawn and its
+     * updated.</li>
+     * <li><b>ONLY_GRAPHICS</b>: only the graphical layer must be drawn /
+     * updated.</li>
+     * </ul>
+     * </p>
+     *
+     * <p>
+     * The <code>MapControl</code> drawing process will consider the value of
+     * this parameter to decide which elements will be updated or drawn.
+     * </p>
+     */
+    private int status = DESACTUALIZADO;
+
+    /**
+     * <p>
+     * Image with a buffer to accelerate the draw the changes of the graphical
+     * items in this component.
+     * </p>
+     *
+     * <p>
+     * Firstly, information will be drawn in the buffer, and, when is outright
+     * drawn, that information will be displayed. Meanwhile, the previous image
+     * can be kept showed.
+     * </p>
+     *
+     * @see BufferedImage
+     *
+     * @see #getImage()
+     */
+    private BufferedImage image = null;
+
+    /**
+     * <p>
+     * Name of the tool used currently to interact with this component.
+     * </p>
+     *
+     * @see #getCurrentTool()
+     * @see #setTool(String)
+     */
+    protected String currentTool;
+
+    /**
+     * <p>
+     * Object to store the flag that notifies a drawing thread task and
+     * <code>MapContext</code>'s layers, that must be canceled or can continue
+     * with the process.
+     * </p>
+     *
+     * @see #cancelDrawing()
+     */
+    private CancelDraw canceldraw;
+
+    // private boolean isCancelled = true;
+
+    /**
+     * <p>
+     * Fires an action events after a specified delay.
+     * </p>
+     *
+     * <p>
+     * <code>MapControl</code> will use the timer to update its visible
+     * graphical information during a drawing process, or allowing to cancel
+     * that process.
+     * </p>
+     *
+     * <p>
+     * This is very useful to pretend faster interactivity to user when
+     * <code>MapControl</code> has lots of layers, and / or layers with heavy
+     * graphical elements, that need a long time to finish drawing all its data.
+     * </p>
+     */
+    private Timer timer;
+
+    /**
+     * <p>
+     * Reference to the {@link ViewPort ViewPort} of the {@link MapContext
+     * MapContext} of this component.
+     * </p>
+     *
+     * <p>
+     * After, the view port will change adapting itself according the current
+     * projection and the extent.
+     * </p>
+     *
+     * @see #getViewPort()
+     *
+     * @see ViewPort
+     */
+    protected ViewPort vp;
+
+    /**
+     * <p>
+     * Manager of all <code>MapControl</code> painting requests.
+     * </p>
+     */
+    private Drawer drawer;
+
+    /**
+     * <p>
+     * Listener of all kind of mouse events produced in this component.
+     * </p>
+     *
+     * <p>
+     * Delegates each mouse event to the current map tool.
+     * </p>
+     *
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     * @see #getMapTool(String)
+     * @see #getMapToolsKeySet()
+     * @see #getNamesMapTools()
+     * @see #setTool(String)
+     */
+    protected MapToolListener mapToolListener = new MapToolListener();
+
+    /**
+     * <p>
+     * Listener of all events produced in a this component's
+     * <code>MapContext</code> object during an atomic period of time.
+     * </p>
+     */
+    private MapContextListener mapContextListener = new MapContextListener();
+
+    /**
+     * <p>
+     * Group of <code>ExceptionListener</code> that, in whatever moment could be
+     * notified a Throwable Java error or exception.
+     * </p>
+     *
+     * @see #addExceptionListener(ExceptionListener)
+     * @see #removeExceptionListener(ExceptionListener)
+     */
+    private ExceptionHandlingSupport exceptionHandlingSupport =
+        new ExceptionHandlingSupport();
+
+    /**
+     * <p>
+     * Name of the previous tool used.
+     * </p>
+     */
+    protected String prevTool;
+
+    /**
+     * <p>
+     * Tool that will be used combined with the current tool of this
+     * <code>MapControl</code>.
+     * </p>
+     */
+    private Behavior combinedTool = null;
+
+    /**
+     * Optional grid that could be applied on the <code>MapControl</code>'s view
+     * port.
+     *
+     * @see #getGrid()
+     * @see #setAdjustGrid(boolean)
+     */
+    private Grid cadgrid = new Grid();
+    /**
+     * Represents the cursor's point selected in <i>screen coordinates</i>.
+     *
+     * @see ViewPort#fromMapPoint(Point2D)
+     */
+    protected Point2D adjustedPoint;
+    /**
+     * <p>
+     * Determines if the position of the snap of the mouse's cursor on the
+     * <code>MapControl</code> is within the area around a control point of a
+     * geometry.
+     * </p>
+     *
+     * <p>
+     * The area is calculated as a circle centered at the control point and with
+     * radius the pixels tolerance defined in the preferences.
+     * </p>
+     */
+    private boolean bForceCoord = false;
+
+    /**
+     * Kind of geometry drawn to identify the kind of control point selected by
+     * the cursor's mouse.
+     */
+    private ISnapper usedSnap = null;
+
+    /**
+     * Determines if the snap tools are enabled or disabled.
+     *
+     * @see #isRefentEnabled()
+     * @see #setRefentEnabled(boolean)
+     */
+    private boolean bRefent = true;
+
+    /**
+     * Stores the 2D map coordinates of the last point added.
+     */
+    private double[] previousPoint = null;
+
+    protected static MapControlManager mapControlManager =
+        MapControlLocator.getMapControlManager();
+
+    private static TreeMap selected = new TreeMap(new Comparator() {
+
+        public int compare(Object o1, Object o2) {
+            if (o1.getClass().equals(o2.getClass()))
+                return 0;
+            if (((ISnapper) o1).getPriority() > ((ISnapper) o2).getPriority())
+                return 1;
+            else
+                return -1;
+        }
+
+    });
+
+    /**
+     * Represents the cursor's point selected in <i>map coordinates</i>.
+     *
+     * @see MapControl#toMapPoint
+     */
+    protected Point2D mapAdjustedPoint;
+
+    /**
+     * Renderer used to draw the layers.
+     */
+    private MapControlDrawer mapControlDrawer = null;
+	private Cursor transparentCursor;
+
+	private boolean disposed = false;
+
+    /**
+     * <p>
+     * Creates a new <code>MapControl</code> instance with the following
+     * characteristics:
+     * <ul>
+     * <li><i>Name</i>: MapControl .</li>
+     * <li>Disables the double buffer of <code>JComponent</code> .</li>
+     * <li>Sets opaque <i>(see {@link JComponent#setOpaque(boolean)} )</i>.</li>
+     * <li>Sets its status to <code>OUTDATED</code> .</li>
+     * <li>Creates a new {@link CancelDraw CancelDraw} object to notify
+     * <code>MapContext</code>'s layers if can continue processing the drawn or
+     * must cancel it.</li>
+     * <li>Creates a new {@link MapContext MapContext} with a new
+     * {@link ViewPort ViewPort} in the default projection.</li>
+     * <li>Creates a new {@link CommandListener CommandListener} for edition
+     * operations.</li>
+     * <li>Creates a new {@link MapToolListener MapToolListener}, and associates
+     * it as a listener of whatever kind of mouse events produced in this
+     * component.</li>
+     * <li>Creates a new {@link Drawer2 Drawer2} for managing the painting
+     * requests.</li>
+     * <li>Creates a new timer that will invoke refresh this component
+     * <code>drawFrameRate</code> per second, when is running a drawing process,
+     * and its enabled <code>drawAnimationEnabled</code>.</li>
+     * </ul>
+     * </p>
+     */
+    public MapControl() {
+        this(null);
+    }
+
+    public MapControl(MapContext theMapContext) {
+        if( theMapContext == null ) {
+            theMapContext = new MapContext(new ViewPort(MapContextLocator.getMapContextManager().getDefaultCRS()));
+        }
+        this.setName("MapControl");
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Image imageTransparentCursor = toolkit.createImage(new MemoryImageSource(16, 16, new int[16 * 16], 0,16));
+        transparentCursor =
+            toolkit.createCustomCursor(imageTransparentCursor, new Point(0, 0), "invisiblecursor");
+
+        setDoubleBuffered(false);
+        setOpaque(true);
+        status = DESACTUALIZADO;
+
+        // Clase usada para cancelar el dibujado
+        canceldraw = new CancelDraw();
+
+        vp = theMapContext.getViewPort();
+
+        setMapContext(theMapContext);
+
+        // eventos
+        this.addComponentListener(this);
+        this.addMouseListener(mapToolListener);
+        this.addMouseMotionListener(mapToolListener);
+        this.addMouseWheelListener(mapToolListener);
+
+        this.drawer = new Drawer();
+        // Timer para mostrar el redibujado mientras se dibuja
+        timer =
+            new Timer(1000 / MapContext.getDrawFrameRate(),
+                new ActionListener() {
+
+                    public void actionPerformed(ActionEvent e) {
+
+                        if (drawAnimationEnabled) {
+                            MapControl.this.repaint();
+                        }
+                    }
+                });
+        initializeGrid();
+
+        if(ToolsLocator.getDisposableManager() != null) {
+			ToolsLocator.getDisposableManager().bind(this);
+		} else {
+			LOG.warn("Can't retrieve the disposable manager,");
+		}
+    }
+
+    /**
+     * <p>
+     * Sets a <code>MapContext</code> to this component.
+     * </p>
+     *
+     * <p>
+     * The <code>MapContext</code> has the <i>model</i>, and most of the
+     * <i>view</i>, and <i>control</i> logic of the layers of this component,
+     * including a {@link ViewPort ViewPort} to adapt the information to the
+     * projection, and to display it in the available area.
+     * </p>
+     *
+     * <p>
+     * If <code>model</code> hadn't a <code>ViewPort</code>, assigns the current
+     * one to it, otherwise, use its <code>ViewPort</code>.
+     * </p>
+     *
+     * <p>
+     * After assigning the <code>MapContext</code> and <code>ViewPort</code>,
+     * sets the same {@link MapContextListener MapContextListener} that was
+     * using, and changes the <i>status</i> to <code>OUTDATED</code>.
+     * </p>
+     *
+     * @param model
+     *            this component's <code>MapContext</code>, that includes the
+     *            <code>ViewPort</code>.
+     *
+     * @see MapContext
+     *
+     * @see #getMapContext()
+     */
+    public void setMapContext(MapContext model) {
+        if (mapContext != null) {
+            mapContext.removeAtomicEventListener(mapContextListener);
+            mapContext.dispose();
+        }
+
+        mapContext = model;
+
+        if (mapContext.getViewPort() == null) {
+            mapContext.setViewPort(vp);
+        } else {
+            vp = mapContext.getViewPort();
+            cadgrid.setViewPort(vp);
+        }
+
+        mapContext.addAtomicEventListener(mapContextListener);
+
+        status = DESACTUALIZADO;
+    }
+
+    /**
+     * @return the mapControlDrawer
+     */
+    public MapControlDrawer getMapControlDrawer() {
+        return mapControlDrawer;
+    }
+
+    /**
+     * @param mapControlDrawer
+     *            the mapControlDrawer to set
+     */
+    public void setMapControlDrawer(MapControlDrawer mapControlDrawer) {
+        this.mapControlDrawer = mapControlDrawer;
+        this.mapControlDrawer.setViewPort(vp);
+    }
+
+    /**
+     * <p>
+     * Gets this component's {@link MapContext MapContext} projection.
+     * </p>
+     *
+     * @return this component's {@link MapContext MapContext} projection
+     *
+     * @see MapContext#getProjection()
+     * @see MapControl#setProjection(IProjection)
+     */
+    public IProjection getProjection() {
+        return getMapContext().getProjection();
+    }
+
+    /**
+     * <p>
+     * Sets the projection to this component's {@link MapContext MapContext}.
+     * </p>
+     *
+     * @param proj
+     *            the kind of projection to this component's {@link MapContext
+     *            MapContext}
+     *
+     * @see MapContext#setProjection(IProjection)
+     * @see MapControl#getProjection()
+     */
+    public void setProjection(IProjection proj) {
+        getMapContext().setProjection(proj);
+    }
+
+    /**
+     * <p>
+     * Gets this component's <code>MapContext</code>, with the <i>model</i>, and
+     * most of the <i>view</i>, and <i>control</i> logic of the layers of this
+     * component, including a {@link ViewPort ViewPort} to adapt the information
+     * to the projection, and display it in the available area.
+     * </p>
+     *
+     * @return this component's <code>MapContext</code>, that includes the
+     *         <code>ViewPort</code> used to project the
+     *         graphical information, and display it in the available area
+     *
+     * @see MapContext
+     *
+     * @see MapControl#setMapContext(MapContext)
+     */
+    public MapContext getMapContext() {
+        return mapContext;
+    }
+
+    /**
+     * <p>
+     * Registers a new behavior to this component.
+     * </p>
+     *
+     * <p>
+     * According the nature of the {@link Behavior Behavior}, different events
+     * will be generated. Those events can be caught by a particular
+     * {@link ToolListener ToolListener}, allowing user to interact with this
+     * <code>MapControl</code> object as a <i>tool</i>.
+     * </p>
+     *
+     * @param name
+     *            name to identify the behavior to add
+     * @param tool
+     *            the behavior to add
+     *
+     * @see #addBehavior(String, Behavior[])
+     * @see #getNamesMapTools()
+     * @see #getMapToolsKeySet()
+     * @see #hasTool(String)
+     */
+    public void addBehavior(String name, Behavior tool) {
+        namesMapTools.put(name, tool);
+        tool.setMapControl(this);
+    }
+
+    /**
+     * <p>
+     * Registers a new behavior to this component as a {@link CompoundBehavior
+     * CompoundBehavior} made up of <code>tools</code>.
+     * </p>
+     *
+     * <p>
+     * According the nature of the behaviors registered, different events will
+     * be generated. Those events can be caught by a particular
+     * {@link ToolListener ToolListener}, allowing user to interact with this
+     * <code>MapControl</code> object as a <i>tool</i>.
+     * </p>
+     *
+     * @param name
+     *            name to identify the compound behavior to add
+     * @param tools
+     *            the compound behavior to add
+     *
+     * @see #addBehavior(String, Behavior)
+     * @see #getNamesMapTools()
+     * @see #getMapToolsKeySet()
+     * @see #hasTool(String)
+     */
+    public void addBehavior(String name, Behavior[] tools) {
+        CompoundBehavior tool = new CompoundBehavior(tools);
+        tool.setMapControl(this);
+        addBehavior(name, tool);
+    }
+
+    /**
+     * <p>
+     * Gets the <code>Behavior</code> registered in this component, identified
+     * by <code>name</code>.
+     * </p>
+     *
+     * @param name
+     *            name of a registered behavior
+     *
+     * @return tool the registered behavior in this component as
+     *         <code>name</code>, or <code>null</code> if
+     *         no one has that identifier
+     *
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     * @see #hasTool(String)
+     */
+    public Behavior getMapTool(String name) {
+        return (Behavior) namesMapTools.get(name);
+    }
+
+    /**
+     * <p>
+     * Returns a set view of the keys that identified the tools registered.
+     * </p>
+     *
+     * @return a set view of the keys that identified the tools registered
+     *
+     * @see HashMap#keySet()
+     *
+     * @see #getNamesMapTools()
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     */
+    public Set getMapToolsKeySet() {
+        return namesMapTools.keySet();
+    }
+
+    /**
+     * <p>
+     * Returns <code>true</code> if this component contains a tool identified by
+     * <code>toolName</code>.
+     * </p>
+     *
+     * @param toolName
+     *            identifier of the tool
+     *
+     * @return <code>true</code> if this component contains a tool identified by
+     *         <code>toolName</code>; otherwise <code>false</code>
+     *
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     */
+    public boolean hasTool(String toolName) {
+        return namesMapTools.containsKey(toolName);
+    }
+
+    /**
+     * <p>
+     * Sets as current active <code>Behavior</code> associated to this
+     * component, that one which is registered and identified by
+     * <code>toolName</code>.
+     * </p>
+     *
+     * <p>
+     * Changing the current active behavior for this <code>MapControl</code>,
+     * implies also updating the previous <i>behavior</i> tool, and the current
+     * cursor.
+     * </p>
+     *
+     * @param toolName
+     *            name of a registered behavior
+     *
+     * @see #getCurrentMapTool()
+     * @see #getCurrentTool()
+     */
+    public void setTool(String toolName) {
+        prevTool = getCurrentTool();
+        Behavior mapTool = (Behavior) namesMapTools.get(toolName);
+        currentMapTool = mapTool;
+        currentTool = toolName;
+
+        if (combinedTool != null) {
+            if (mapTool instanceof CompoundBehavior) {
+                ((CompoundBehavior) mapTool).addMapBehavior(combinedTool, true);
+            } else {
+                currentMapTool =
+                    new CompoundBehavior(new Behavior[] { currentMapTool });
+                ((CompoundBehavior) currentMapTool).addMapBehavior(
+                    combinedTool, true);
+                currentMapTool.setMapControl(this);
+            }
+        }
+
+        // this.setCursor(mapTool.getCursor());
+    }
+
+    /**
+     * <p>
+     * Gets as current active <code>Behavior</code> associated to this
+     * component, that one which is registered and identified by
+     * <code>toolName</code>.
+     * </p>
+     *
+     * <p>
+     * Changing the current active behavior for this <code>MapControl</code>,
+     * implies also updating the previous <i>behavior</i> tool, and the current
+     * cursor.
+     * </p>
+     *
+     * @param toolName
+     *            name of a registered behavior
+     *
+     * @see #getCurrentTool()
+     * @see #setTool(String)
+     */
+    public Behavior getCurrentMapTool() {
+        return currentMapTool;
+    }
+
+    /**
+     * <p>
+     * Returns the name of the current selected tool on this MapControl
+     * </p>
+     *
+     * @return the name of the current's behavior tool associated to this
+     *         component
+     *
+     * @see #getCurrentMapTool()
+     * @see #setTool(String)
+     */
+    public String getCurrentTool() {
+        return currentTool;
+    }
+
+    /**
+     * <p>
+     * Determines that current drawing process of <code>MapControl</code>'s
+     * <code>MapContext</code>'s data must be canceled.
+     * </p>
+     *
+     * <p>
+     * It has no effects if now isn't drawing that graphical information.
+     * </p>
+     *
+     * <p>
+     * At last resort, the particular implementation of each layer in this
+     * <code>MapControl</code>'s <code>MapContrext</code> will be that one which
+     * will draw the graphical information, and, if supports, which could cancel
+     * its drawing subprocess.
+     * </p>
+     */
+    public void cancelDrawing() {
+        /*
+         * if (drawer != null) {
+         * if (!drawer.isAlive()) {
+         * return;
+         * }
+         * }
+         */
+        canceldraw.setCanceled(true);
+
+        /*
+         * while (!isCancelled) {
+         * if (!drawer.isAlive()) {
+         * // Si hemos llegado aqu� con un thread vivo, seguramente
+         * // no estamos actualizados.
+         *
+         * break;
+         * }
+         *
+         * }
+         * canceldraw.setCancel(false);
+         * isCancelled = false;
+         * drawerAlive = false;
+         */
+    }
+
+    /**
+     * <p>
+     * Creates a {@link BufferedImage BufferedImage} image if there was no
+     * buffered image, or if its viewport's image height or width is different
+     * from this component's size. Once has created a double-buffer, fills it
+     * with the vieport's background color, or with <i>white</i> if it had no
+     * background color.
+     * </p>
+     *
+     * <p>
+     * If no double-buffered existed, creates a {@link BufferedImage
+     * BufferedImage} with the size of this component, and as an image with
+     * 8-bit RGBA color components packed into integer pixels. That image has a
+     * <code>DirectColorModel</code> with alpha. The color data in that image is
+     * considered not to be premultiplied with alpha.
+     * </p>
+     *
+     * <p>
+     * Once has created and filled the new inner <code>MapControl</code>'s
+     * double-buffer, changes the status to <code>OUTDATED</code>.
+     * </p>
+     *
+     * @return <code>true</code> if has created and filled a new double-buffer
+     *         for this <code>MapControl</code> instance; otherwise
+     *         <code>false</code>
+     */
+    private boolean adaptToImageSize() {
+        if ((image == null) || (vp.getImageWidth() != this.getWidth())
+            || (vp.getImageHeight() != this.getHeight())) {
+            image =
+                new BufferedImage(this.getWidth(), this.getHeight(),
+                    BufferedImage.TYPE_INT_ARGB);
+            // ESTILO MAC
+            // image = GraphicsEnvironment.getLocalGraphicsEnvironment()
+            // .getDefaultScreenDevice().getDefaultConfiguration()
+            // .createCompatibleImage(this.getWidth(), this.getHeight());
+            vp.setImageSize(new Dimension(getWidth(), getHeight()));
+            getMapContext().getViewPort().refreshExtent();
+
+            Graphics gTemp = image.createGraphics();
+            Color theBackColor = vp.getBackColor();
+            if (theBackColor == null) {
+                gTemp.setColor(Color.WHITE);
+            } else {
+                gTemp.setColor(theBackColor);
+            }
+
+            gTemp.fillRect(0, 0, getWidth(), getHeight());
+            gTemp.dispose();
+            status = DESACTUALIZADO;
+            // g.drawImage(image,0,0,null);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * <p>
+     * Paints the graphical information of this component using a double buffer.
+     * </p>
+     *
+     * <p>
+     * If the double buffer wasn't created, creates a new one.
+     * </p>
+     *
+     * <p>
+     * Paints the component according the following algorithm: <br>
+     * &nbsp If <i>status</i> is <i>UPDATED</i>:<br>
+     * &nbsp &nbsp If there is no <i>double buffer</i>:<br>
+     * &nbsp &nbsp &nbsp If there is a <i>behavior</i> for managing the
+     * <code>MapControl</code> instance, delegates the drawing process to that
+     * behavior, calling:
+     * <code><i>behavior_instance</i>.paintComponent(g)</code> &nbsp .<br>
+     * &nbsp &nbsp &nbsp Else, repaints the current graphical information
+     * quickly calling: <code>g.drawImage(image,0,0,null)</code> &nbsp .<br>
+     * &nbsp Else, (<i>status</i> is <i>OUTDATED</i>, or <i>ONLY_GRAPHICS</i>):
+     * executes a quickly repaint of the previous information calling
+     * <code>g.drawImage(image,0,0,null)</code>, and creates a <i>painting
+     * request</i> to delegate the heavy drawing process to the {@link Drawer2
+     * Drawer2}'s worker thread, according the <i>SingleWorketThread</i>
+     * pattern, starting a timer to update (invoking <code>repaint()</code> that
+     * comprises invoke this method) the view every delay of 360 ms. during the
+     * the process drawing.
+     * </p>
+     *
+     * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
+     * @see Drawer2
+     */
+    protected void paintComponent(Graphics g) {
+        adaptToImageSize();
+
+        try {
+            mapControlDrawer.startDrawing(this);
+        } catch (InterruptedException e) {
+            LOG.info("Error locking the MapControlDrawer", e);
+        }
+        mapControlDrawer.setGraphics(g);
+        mapControlDrawer.stopDrawing(this);
+        mapControlDrawer.setViewPort(getMapContext().getViewPort());
+
+        if (status == ACTUALIZADO) {
+            /*
+             * Si hay un behaviour y la imagen es distinta de null se delega el
+             * dibujado
+             * en dicho behaviour
+             */
+            if (image != null) {
+                if (currentMapTool != null) {
+                    currentMapTool.paintComponent(mapControlDrawer,true);
+                } else {
+                    mapControlDrawer.drawImage(image, 0, 0);
+                }
+            }
+		} else if ((status == DESACTUALIZADO)) {
+
+			mapControlDrawer.drawImage(image, 0, 0);
+
+			drawer.put(new PaintingRequest());
+			timer.start();
+		}
+        cadgrid.drawGrid(mapControlDrawer);
+        drawCursor();
+    }
+
+    private String getStatusLabel(int status ) {
+        switch(status) {
+            case ACTUALIZADO:
+                return "ACTUALIZADO";
+            case DESACTUALIZADO:
+                return "DESACTUALIZADO";
+            default:
+                return Integer.toString(status);
+        }
+    }
+    /**
+     * <p>
+     * Gets the {@link BufferedImage BufferedImage} used to accelerate the draw
+     * of new ''frames'' with changes, or new graphical items in this component.
+     * </p>
+     *
+     * @return double buffered image used by this component to accelerate the
+     *         draw of its graphical information, or <code>null</code> if isn't
+     *         already created
+     *
+     * @see BufferedImage
+     */
+    public BufferedImage getImage() {
+        return image;
+    }
+
+    /**
+     * <p>
+     * Forces repaint all visible graphical information in this component.
+     * </p>
+     *
+     * <p>
+     * If <code>doClear == true</code>, before repainting, clears the background
+     * color, with the inner viewport's background color.
+     * </p>
+     *
+     * @param doClear
+     *            <code>true</code> if needs clearing the background color
+     *            before drawing the map
+     *
+     * @see #cancelDrawing()
+     * @see FLayers#setDirty(boolean)
+     */
+    public void drawMap(boolean doClear) {
+        cancelDrawing();
+        //System.out.println("drawMap con doClear=" + doClear);
+        status = DESACTUALIZADO;
+        if (doClear) {
+            // image = null; // Se usa para el PAN
+            if (image != null) {
+                Graphics2D g = image.createGraphics();
+                Color theBackColor = vp.getBackColor();
+                if (theBackColor == null) {
+                    g.setColor(Color.WHITE);
+                } else {
+                    g.setColor(theBackColor);
+                }
+                g.fillRect(0, 0, vp.getImageWidth(), vp.getImageHeight());
+                g.dispose();
+            }
+        }
+        repaint();
+    }
+
+    /**
+     * <p>
+     * Cancels any current drawing process, changing the status to
+     * <code>OUTDATED</code>, and forcing repaint only the layers dirty.
+     * </p>
+     *
+     * @see #cancelDrawing()
+     */
+    public void rePaintDirtyLayers() {
+        cancelDrawing();
+        status = DESACTUALIZADO;
+        repaint();
+    }
+
+    /**
+     * @deprecated use {@link #drawMap(boolean)} instead, or even
+     * better {@link #getMapContext()}.invalidate().
+     */
+    public void drawGraphics() {
+        drawMap(false);
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent)
+     */
+    public void componentHidden(ComponentEvent e) {
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent)
+     */
+    public void componentMoved(ComponentEvent e) {
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
+     */
+    public void componentResized(ComponentEvent e) {
+        /*
+         * image = new BufferedImage(this.getWidth(), this.getHeight(),
+         * BufferedImage.TYPE_INT_ARGB);
+         * Graphics gTemp = image.createGraphics();
+         * gTemp.setColor(vp.getBackColor());
+         * gTemp.fillRect(0,0,getWidth(), getHeight());
+         * System.out.println("MapControl resized");
+         * // image = null;
+         * vp.setImageSize(new Dimension(getWidth(), getHeight()));
+         * getMapContext().getViewPort().setScale();
+         */
+        // drawMap(true);
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent)
+     */
+    public void componentShown(ComponentEvent e) {
+    }
+
+    /**
+     * @see ExceptionHandlingSupport#addExceptionListener(ExceptionListener)
+     */
+    public void addExceptionListener(ExceptionListener o) {
+        exceptionHandlingSupport.addExceptionListener(o);
+    }
+
+    /**
+     * @see ExceptionHandlingSupport#removeExceptionListener(ExceptionListener)
+     */
+    public boolean removeExceptionListener(ExceptionListener o) {
+        return exceptionHandlingSupport.removeExceptionListener(o);
+    }
+
+    /**
+     * @see ExceptionHandlingSupport#throwException(Throwable)
+     */
+    protected void throwException(Throwable t) {
+        exceptionHandlingSupport.throwException(t);
+    }
+
+    /**
+     * <p>
+     * Represents each <code>MapControl</code>'s data painting request.
+     * </p>
+     *
+     * <p>
+     * The request will be attended by a <code>Drawer2</code>, which will hold
+     * it since the <code>Drawer2</code>'s worker takes it, or arrives a new
+     * painting request, which will replace it.
+     * </p>
+     */
+    private class PaintingRequest {
+
+        /**
+         * <p>
+         * Creates a new <code>PaintingRequest
+         * </p>
+         * instance.</p>
+         */
+        public PaintingRequest() {
+        }
+
+        /**
+         * <p>
+         * <code>MapControl</code> paint process:
+         * </p>
+         *
+         * <p>
+         * <ul>
+         * <li><i>1.- </i>Cancels all previous <code>MapControl</code>'s drawing
+         * processes.</li>
+         * <li><i>2.- </i>If <i>status</i> was OUTDATED:
+         * <ul>
+         * <li><i>2.1.- </i>Fills the background color with viewport's
+         * background color, or <i>white</i> if it was undefined.</li>
+         * <li><i>2.2.- </i>Notifies <i>MapContext</i> to be drawn invoking: <code>mapContext.draw(double-buffer, double-buffer's buffer, shared cancel-draw object, mapContext.getScaleView());</code>
+         * .</li>
+         * <li><i>2.3.- </i>If <code>canceldraw.isCanceled()</code>
+         * <ul>
+         * <li><i>2.3.1.- </i>Sets <i>status</i> to OUTDATED.</li>
+         * <li><i>2.3.2.- </i>Sets <i>dirty</i> all layers stored in
+         * <i>MapContext</i>.</li>
+         * </ul>
+         * </li>
+         * <li><i>2.4.- </i>Else, sets <i>status</i> to UPDATED.</li>
+         * </ul>
+         * </li>
+         * <li><i>3.- </i>Stops the <i>timer</i>.</li>
+         * <li><i>4.- </i>Repaints this component invoking:
+         * <code>repaint();</code></li>
+         * </ul>
+         * </p>
+         *
+         * @see #cancelDrawing()
+         * @see MapContext#draw(BufferedImage, Graphics2D, Cancellable, double)
+         * @see MapContext#drawGraphics(BufferedImage, Graphics2D, Cancellable,
+         *      double)
+         *
+         * @see ViewPort
+         */
+        public void paint() {
+            try {
+                canceldraw.setCanceled(false);
+                Graphics2D g = image.createGraphics();
+
+                ViewPort viewPort = mapContext.getViewPort();
+
+                if (status == DESACTUALIZADO) {
+                    Graphics2D gTemp = image.createGraphics();
+                    Color theBackColor = viewPort.getBackColor();
+                    if (theBackColor == null) {
+                        gTemp.setColor(Color.WHITE);
+                    } else {
+                        gTemp.setColor(theBackColor);
+                    }
+                    gTemp.fillRect(0, 0, viewPort.getImageWidth(), viewPort
+                        .getImageHeight());
+                    mapContext.draw(image, g, canceldraw, mapContext
+                        .getScaleView());
+                    if (!canceldraw.isCanceled()) {
+                        status = ACTUALIZADO;
+                    }
+				}
+
+                timer.stop();
+                repaint();
+
+            } catch (Throwable e) {
+                timer.stop();
+                LOG.warn("Problems drawing mapcontext.",e);
+                throwException(e);
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * An instance of <code>Drawer2</code> could manage all
+     * <code>MapControl</code> painting requests.
+     * </p>
+     *
+     * <p>
+     * Based on the <i>WorkerThread</i> software pattern, creates a worker
+     * thread that will attend sequentially the current waiting painting
+     * request, after finishing the previous (that could be by a cancel action).
+     * </p>
+     *
+     * <p>
+     * All new {@link PaintingRequest PaintingRequest} generated will be stored
+     * as <i>waiting requests</i> since the worker attends it.
+     * </p>
+     *
+     * <p>
+     * If a worker finished and there was no <i>painting request</i>, the worker
+     * would be set to wait until any <i>painting request</i> would be put.
+     * </p>
+     *
+     * @author fjp
+     */
+    public class Drawer {
+
+        // Una mini cola de 2. No acumulamos peticiones de dibujado
+        // dibujamos solo lo �ltimo que nos han pedido.
+
+        /**
+         * <p>
+         * Painting request that's been attended by the <code>Drawer2</code>'s
+         * worker.
+         * </p>
+         *
+         * @see #put(org.gvsig.fmap.mapcontrol.MapControl.PaintingRequest)
+         * @see #take()
+         */
+        private PaintingRequest paintingRequest;
+
+        /**
+         * <p>
+         * Painting request waiting to be attended by the <code>Drawer2</code>'s
+         * worker.
+         * </p>
+         *
+         * @see #put(org.gvsig.fmap.mapcontrol.MapControl.PaintingRequest)
+         * @see #take()
+         */
+        private PaintingRequest waitingRequest;
+
+        /**
+         * <p>
+         * Determines that the <code>Drawer2</code>'s worker is busy attending a
+         * painting request.
+         * </p>
+         *
+         * @see #put(org.gvsig.fmap.mapcontrol.MapControl.PaintingRequest)
+         * @see #take()
+         */
+        private boolean waiting;
+
+        /**
+         * <p>
+         * Notifies the <code>Drawer2</code>'s worker to finish or continue with
+         * its process.
+         * </p>
+         *
+         * @see #setShutdown(boolean)
+         */
+        private boolean shutdown;
+
+		private Thread worker;
+
+        /**
+         * <p>
+         * Sets this <code>Drawer2</code>'s worker to finish or continue with
+         * its process.
+         * </p>
+         *
+         * @param isShutdown
+         *            a boolean value
+         */
+        public void setShutdown(boolean isShutdown) {
+            shutdown = isShutdown;
+            if (shutdown) {
+            	worker.interrupt();
+            }
+        }
+
+        /**
+         * <p>
+         * Creates a new drawer for managing all data painting requests in
+         * <code>MapControl</code>.
+         * </p>
+         *
+         * <p>
+         * Includes the following steps:
+         * <ul>
+         * <li>By default, there is no <i>current painting request</i>.</li>
+         * <li>By default, there is no <i>waiting painting request</i>.</li>
+         * <li>By default, the worker thread is waiting no <i>painting
+         * request</i>.</li>
+         * <li>By default, the worker thread is running.</li>
+         * <li>Creates and starts a worker thread for attending the <i>painting
+         * requests</i>.</li>
+         * </ul>
+         * </p>
+         */
+        public Drawer() {
+            paintingRequest = null;
+            waitingRequest = null;
+            waiting = false;
+            shutdown = false;
+            worker = new Thread(new Worker(), "MapControl Drawer Worker");
+            worker.start();
+        }
+
+        /**
+         * <p>
+         * Sets a <code>PaintingRequest</code> to be attended by the worker
+         * thread of this object. If this one was waiting, wakes up.
+         * </p>
+         *
+         * <p>
+         * All waiting threads will be notified synchronized.
+         * </p>
+         *
+         * @param newPaintRequest
+         *
+         * @see #take()
+         */
+        public void put(PaintingRequest newPaintRequest) {
+            waitingRequest = newPaintRequest;
+            if (waiting) {
+                synchronized (this) {
+                    notifyAll();
+                }
+            }
+        }
+
+        /**
+         * <p>
+         * Used by this object's worker, returns the current waiting drawing
+         * request, causing current thread to wait until another thread invokes
+         * {@link #put(org.gvsig.fmap.mapcontrol.MapControl.PaintingRequest)
+         * #put(com.iver.cit.gvsig.fmap.MapControl.PaintingRequest)}, if there
+         * was no waiting request.
+         * </p>
+         *
+         * <p>
+         * All threads will access synchronized to the waiting request.
+         * </p>
+         *
+         * @return <code>PaintingRequest</code> that was waiting to be attended
+         *
+         * @see #put(org.gvsig.fmap.mapcontrol.MapControl.PaintingRequest)
+         */
+        public PaintingRequest take() {
+            if (waitingRequest == null) {
+                synchronized (this) {
+                    waiting = true;
+                    try {
+                        wait();
+                    } catch (InterruptedException ie) {
+                        waiting = false;
+                    }
+                }
+            }
+            paintingRequest = waitingRequest;
+            waitingRequest = null;
+            return paintingRequest;
+        }
+
+        /**
+         * <p>
+         * Thread for attending painting requests.
+         * </p>
+         *
+         * <p>
+         * If there was no double buffer, sets the status to
+         * <code>OUTDATED</code> and finishes, otherwise takes the painting
+         * request (it's probably that would wait some time), cancel the
+         * previous drawing process, and starts processing the request.
+         * </p>
+         *
+         * @see Thread
+         */
+        private class Worker implements Runnable {
+
+            /*
+             * (non-Javadoc)
+             *
+             * @see java.lang.Runnable#run()
+             */
+            public void run() {
+                while (!shutdown) {
+                    PaintingRequest p = take();
+                    // System.out.println("Pintando");
+                    if (image != null) {
+                        cancelDrawing();
+                        if (p != null) {
+                        	p.paint();
+                        }
+                    } else {
+                        status = DESACTUALIZADO;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * An instance of <code>CancelDraw</code> will be shared by all this
+     * <code>MapControl</code>'s <code>MapContext</code> layers, allowing
+     * receive a notification that, when they're been drawn, to be cancelled.
+     * </p>
+     *
+     * @see Cancellable
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class CancelDraw implements Cancellable {
+
+        /**
+         * <p>
+         * Determines if the drawing task must be canceled or not.
+         * </p>
+         *
+         * @see #isCanceled()
+         * @see #setCanceled(boolean)
+         */
+        private boolean cancel = false;
+
+        /**
+         * Creates a new <code>CancelDraw</code> object.
+         */
+        public CancelDraw() {
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see com.iver.utiles.swing.threads.Cancellable#setCanceled(boolean)
+         */
+        public void setCanceled(boolean b) {
+            cancel = b;
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see com.iver.utiles.swing.threads.Cancellable#isCanceled()
+         */
+        public boolean isCanceled() {
+            return cancel;
+        }
+    }
+
+    /**
+     * <p>
+     * Listens all kind of mouse events produced in {@link MapControl
+     * MapControl}, and invokes its current map tool <i>(
+     * {@link MapControl#getCurrentMapTool() MapControl#getCurrentMapTool()}</i>
+     * to simulate a behavior.
+     * </p>
+     *
+     * <p>
+     * Mouse wheel moved events produce a <i>zoom in</i> operation if wheel
+     * rotation is negative, or a <i>zoom out</i> if its positive. Both will be
+     * centered in the position of the mouse, but, meanwhile <i>zoom in</i>
+     * operation applies a factor of 0.9, <i>zoom out</i> operation applies a
+     * factor of 1.2
+     * </p>
+     *
+     * <p>
+     * Mouse wheel moved events can be produced as much frequently, that between
+     * each one, the drawing process could hadn't finished. This is the reason
+     * that, in this situation, cancels always the previous drawing process
+     * before applying a <i>zoom</i> operation, and ignores all new mouse
+     * positions that are produced before 1 second.
+     * </p>
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class MapToolListener implements MouseListener, MouseWheelListener,
+        MouseMotionListener {
+
+        /**
+         * <p>
+         * Used to avoid mouse wheel move events closed.
+         * </p>
+         *
+         * <p>
+         * If a mouse wheel move event is produced
+         */
+        long t1;
+
+        /**
+         * <p>
+         * Position of the mouse, in map coordinates.
+         * </p>
+         *
+         * <p>
+         * This point coordinates will be used as center of the <i>zoom</i>
+         * operation.
+         * </p>
+         */
+        Point2D pReal;
+
+        /**
+         * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+         * @see Behavior#mouseClicked(MouseEvent)
+         */
+        public void mouseClicked(MouseEvent e) {
+            try {
+                if (currentMapTool != null) {
+                    currentMapTool.mouseClicked(e);
+                }
+                Point2D p;
+
+                if (mapAdjustedPoint != null) {
+                    p = mapAdjustedPoint;
+                } else {
+                    p = vp.toMapPoint(adjustedPoint);
+                }
+                previousPoint = new double[] { p.getX(), p.getY() };
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+        }
+
+        /**
+         * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+         * @see Behavior#mouseEntered(MouseEvent)
+         */
+        public void mouseEntered(MouseEvent e) {
+            setToolMouse();
+            try {
+                if (currentMapTool != null) {
+                    currentMapTool.mouseEntered(e);
+                }
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+        }
+
+        /**
+         * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+         * @see Behavior#mouseExited(MouseEvent)
+         */
+        public void mouseExited(MouseEvent e) {
+            try {
+                if (currentMapTool != null) {
+                    currentMapTool.mouseExited(e);
+                }
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+            // Remove the snapping image if exist
+            usedSnap = null;
+            repaint();
+        }
+
+        /**
+         * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+         * @see Behavior#mousePressed(MouseEvent)
+         */
+        public void mousePressed(MouseEvent e) {
+            try {
+                if (currentMapTool != null) {
+                    currentMapTool.mousePressed(e);
+                }
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+        }
+
+        /**
+         * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+         * @see Behavior#mouseReleased(MouseEvent)
+         */
+        public void mouseReleased(MouseEvent e) {
+            try {
+                if (currentMapTool != null) {
+                    currentMapTool.mouseReleased(e);
+                }
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+        }
+
+        /**
+         * @see java.awt.event.MouseWheelListener#mouseWheelMoved(java.awt.event.MouseWheelEvent)
+         * @see Behavior#mouseWheelMoved(MouseWheelEvent)
+         */
+        public void mouseWheelMoved(MouseWheelEvent e) {
+            try {
+                if (currentMapTool == null) {
+                    return;
+                }
+
+                currentMapTool.mouseWheelMoved(e);
+
+                // Si el tool actual no ha consumido el evento
+                // entendemos que quiere el comportamiento por defecto.
+                if (!e.isConsumed()) {
+                    // Para usar el primer punto sobre el que queremos centrar
+                    // el mapa, dejamos pasar un segundo para considerar el
+                    // siguiente
+                    // punto como v�lido.
+                    if (t1 == 0) {
+                        t1 = System.currentTimeMillis();
+                        pReal = vp.toMapPoint(e.getPoint());
+                    } else {
+                        long t2 = System.currentTimeMillis();
+                        if ((t2 - t1) > 1000) {
+                            t1 = 0;
+                        }
+                    }
+                    cancelDrawing();
+                    ViewPort vp = getViewPort();
+
+                    /*
+                     * Point2D pReal = new
+                     * Point2D.Double(vp.getAdjustedExtent().getCenterX(),
+                     * vp.getAdjustedExtent().getCenterY());
+                     */
+                    int amount = e.getWheelRotation();
+                    double nuevoX;
+                    double nuevoY;
+                    double factor;
+
+                    if (amount < 0) // nos acercamos
+                    {
+                        factor = 0.9;
+                    } else // nos alejamos
+                    {
+                        factor = 1.2;
+                    }
+                    if (vp.getExtent() != null) {
+                        nuevoX =
+                            pReal.getX()
+                                - ((vp.getExtent().getWidth() * factor) / 2.0);
+                        nuevoY =
+                            pReal.getY()
+                                - ((vp.getExtent().getHeight() * factor) / 2.0);
+                        double x = nuevoX;
+                        double y = nuevoY;
+                        double width = vp.getExtent().getWidth() * factor;
+                        double height = vp.getExtent().getHeight() * factor;
+
+                        try {
+                            vp.setEnvelope(geomManager.createEnvelope(x, y, x
+                                + width, y + height, SUBTYPES.GEOM2D));
+                        } catch (CreateEnvelopeException e1) {
+                            LOG.info("Error creating the envelope", e);
+                        }
+                    }
+
+                }
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+        }
+
+        /**
+         * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+         * @see Behavior#mouseDragged(MouseEvent)
+         */
+        public void mouseDragged(MouseEvent e) {
+            calculateSnapPoint(e.getPoint());
+            try {
+                if (currentMapTool != null) {
+                    currentMapTool.mouseDragged(e);
+                }
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+            repaint();
+        }
+
+        /**
+         * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+         * @see Behavior#mouseMoved(MouseEvent)
+         */
+        public void mouseMoved(MouseEvent e) {
+            calculateSnapPoint(e.getPoint());
+            try {
+                if (currentMapTool != null) {
+                    currentMapTool.mouseMoved(e);
+                }
+            } catch (BehaviorException t) {
+                throwException(t);
+            }
+            repaint();
+        }
+    }
+
+    /**
+     * <p<code>MapContextListener</code> listens all events produced in a
+     * <code>MapControl</code>'s <code>MapContext</code> object during an atomic
+     * period of time, and sets it to dirty, <i>executing
+     * <code>drawMap(false)</code>, if any of the
+     * following conditions is accomplished</i>:
+     * <ul>
+     * <li>Any of the <code>LayerEvent</code> in the <code>AtomicEvent</code>
+     * parameter notifies a <i>visibility change</i>.</li>
+     * <li>There is at least one <code>ColorEvent</code> in the
+     * <code>AtomicEvent</code> parameter.</li>
+     * <li>There is at least one <code>ExtentEvent</code> in the
+     * <code>AtomicEvent</code> parameter.</li>
+     * <li>Any of the <code>LayerCollectionEvent</code> in the
+     * <code>AtomicEvent</code> parameter notifies that a driver's layer has
+     * reloaded it successfully.</li>
+     * <li>There is at least one <code>LegendEvent</code> in the
+     * <code>AtomicEvent</code> parameter.</li>
+     * <li>There is at least one <code>SelectionEvent</code> in the
+     * <code>AtomicEvent</code> parameter.</li>
+     * </ul>
+     * </p>
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class MapContextListener implements AtomicEventListener {
+
+        /**
+         * @see org.gvsig.fmap.mapcontext.events.listeners.AtomicEventListener#atomicEvent(org.gvsig.fmap.mapcontext.events.AtomicEvent)
+         */
+        public void atomicEvent(final AtomicEvent e) {
+            if (!SwingUtilities.isEventDispatchThread()) {
+                SwingUtilities.invokeLater(new Runnable() {
+
+                    public void run() {
+                        atomicEvent(e);
+                    }
+                });
+                return;
+            }
+            LayerEvent[] layerEvents = e.getLayerEvents();
+
+            for (int i = 0; i < layerEvents.length; i++) {
+                if (layerEvents[i].getProperty().equals("visible")) {
+                    drawMap(false);
+                    return;
+                } else
+                    if (layerEvents[i].getEventType() == LayerEvent.EDITION_CHANGED) {
+                        drawMap(false);
+                        return;
+                    }
+            }
+
+            if (e.getColorEvents().length > 0) {
+                drawMap(false);
+                return;
+            }
+
+            if (e.getExtentEvents().length > 0) {
+                drawMap(false);
+                return;
+            }
+
+            if (e.getProjectionEvents().length > 0) {
+                // redraw = true;
+            }
+
+            LayerCollectionEvent[] aux = e.getLayerCollectionEvents();
+            if (aux.length > 0) {
+                for (int i = 0; i < aux.length; i++) {
+                    if (aux[i].getAffectedLayer().getFLayerStatus()
+                        .isDriverLoaded()) {
+                        drawMap(false);
+                        return;
+                    }
+                }
+
+            }
+
+            if (e.getLegendEvents().length > 0) {
+                drawMap(false);
+                return;
+            }
+
+            if (e.getSelectionEvents().length > 0) {
+                drawMap(false);
+                return;
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Gets the <code>ViewPort</code> of this component's {@link MapContext
+     * MapContext} .
+     * </p>
+     *
+     * @see MapContext#getViewPort()
+     */
+    public ViewPort getViewPort() {
+        return vp;
+    }
+
+    /**
+     * <p>
+     * Returns all registered <code>Behavior</code> that can define a way to
+     * work with this <code>MapControl</code>.
+     * </p>
+     *
+     * @return registered <code>Behavior</code> to this <code>MapControl</code>
+     *
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     * @see #getMapToolsKeySet()
+     * @see #hasTool(String)
+     */
+    public HashMap getNamesMapTools() {
+        return (HashMap) namesMapTools;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.edition.commands.CommandListener#commandRepaint()
+     */
+    public void commandRepaint() {
+        drawMap(false);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * com.iver.cit.gvsig.fmap.edition.commands.CommandListener#commandRefresh()
+     */
+    public void commandRefresh() {
+        // TODO Auto-generated method stub
+    }
+
+    /**
+     * <p>
+     * Equivalent operation to <i>undo</i>.
+     * </p>
+     *
+     * <p>
+     * Exchanges the previous tool with the current one.
+     * </p>
+     *
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     * @see #setTool(String)
+     */
+    public void setPrevTool() {
+        setTool(prevTool);
+    }
+
+    /**
+     * <p>
+     * Executes a <i>zoom in</i> operation centered at the center of the extent.
+     * </p>
+     *
+     * <p>
+     * This implementation is designed for being invoked outside a
+     * <code>Behavior</code>, for example by an action of pressing a button; and
+     * simulates that the event has been produced by releasing the <i>button
+     * 1</i> of the mouse using the registered <code>Behavior</code> in this
+     * <code>MapControl</code> object that's responsible for the <i>zoom in</i>
+     * operation.
+     * </p>
+     *
+     * @see #zoomOut()
+     */
+    public void zoomIn() {
+        Behavior mapTool = (Behavior) namesMapTools.get("zoomIn");
+        ViewPort vp = getViewPort();
+        Envelope r = getViewPort().getAdjustedExtent();
+        Point2D pCenter = vp.fromMapPoint(r.getCenter(0), r.getCenter(1));
+        MouseEvent e =
+            new MouseEvent(this, MouseEvent.MOUSE_RELEASED,
+                MouseEvent.ACTION_EVENT_MASK, MouseEvent.BUTTON1_MASK, (int) pCenter
+                    .getX(), (int) pCenter.getY(), 1, true, MouseEvent.BUTTON1);
+        try {
+            mapTool.mousePressed(e);
+            mapTool.mouseReleased(e);
+        } catch (BehaviorException t) {
+            throwException(t);
+        }
+    }
+
+    /**
+     * <p>
+     * Executes a <i>zoom out</i> operation centered at the center of the
+     * extent.
+     * </p>
+     *
+     * <p>
+     * This implementation is thought for being invoked outside a
+     * <code>Behavior</code>, for example by an action of pressing a button, and
+     * simulates that the event has been produced by releasing the <i>button
+     * 1</i> of the mouse using the registered <code>Behavior</code> in this
+     * <code>MapControl</code> object that's responsible for the <i>zoom out</i>
+     * operation.
+     * </p>
+     *
+     * @see #zoomIn()
+     */
+    public void zoomOut() {
+        Behavior mapTool = (Behavior) namesMapTools.get("zoomOut");
+        ViewPort vp = getViewPort();
+        Envelope r = getViewPort().getAdjustedExtent();
+        Point2D pCenter = vp.fromMapPoint(r.getCenter(0), r.getCenter(1));
+        MouseEvent e =
+            new MouseEvent(this, MouseEvent.MOUSE_RELEASED,
+                MouseEvent.ACTION_EVENT_MASK, MouseEvent.BUTTON1_MASK, (int) pCenter
+                    .getX(), (int) pCenter.getY(), 1, true, MouseEvent.BUTTON1);
+        try {
+            mapTool.mousePressed(e);
+            mapTool.mouseReleased(e);
+        } catch (BehaviorException t) {
+            throwException(t);
+        }
+    }
+
+    /**
+     * <p>
+     * Returns the listener used to catch all mouse events produced in this
+     * <code>MapControl</code> instance and that redirects the calls to the
+     * current map tool.
+     * </p>
+     *
+     * @return the map tool listener used
+     */
+    public MapToolListener getMapToolListener() {
+        return mapToolListener;
+    }
+
+    // mapTool can be null, for instance, in 3D's navigation tools
+    /**
+     * <p>
+     * Sets <code>mapTool</code> as this <code>MapControl</code>'s current map
+     * tool.
+     *
+     * @param mapTool
+     *            a map tool, or <code>null</code> to disable the interaction
+     *            with the user
+     *
+     * @see #getCurrentMapTool()
+     * @see #getCurrentTool()
+     * @see #setTool(String)
+     * @see #setPrevTool()
+     * @see #addBehavior(String, Behavior)
+     * @see #addBehavior(String, Behavior[])
+     */
+    public void setCurrentMapTool(Behavior mapTool) {
+        currentMapTool = mapTool;
+    }
+
+    /**
+     * <p>
+     * Sets the delay to the timer that refreshes this <code>MapControl</code>
+     * instance.
+     * </p>
+     *
+     * <p>
+     * <code>Delay (in ms) = 1000 / getDrawFrameRate()</code>
+     * </p>
+     *
+     * @see #getDrawFrameRate()
+     * @see #setDrawFrameRate(int)
+     */
+    public void applyFrameRate() {
+        if (MapContext.getDrawFrameRate() > 0) {
+            timer.setDelay(1000 / MapContext.getDrawFrameRate());
+        }
+    }
+
+    /**
+     * <p>
+     * Determines if its enabled the repaint that invokes the timer according to
+     * {@link #getDrawFrameRate() #getDrawFrameRate()}.
+     * </p>
+     *
+     * @return <code>true</code> if its enabled; otherwise <code>false</code>
+     */
+    public static boolean isDrawAnimationEnabled() {
+        return drawAnimationEnabled;
+    }
+
+    /**
+     * <p>
+     * Sets if its enabled the repaint that invokes the timer according to
+     * {@link #getDrawFrameRate() #getDrawFrameRate()}.
+     * </p>
+     *
+     * @param drawAnimationEnabled
+     *            <code>true</code> to enable the mode; otherwise
+     *            <code>false</code>
+     */
+    public static void setDrawAnimationEnabled(boolean drawAnimationEnabled) {
+        MapControl.drawAnimationEnabled = drawAnimationEnabled;
+    }
+
+    /**
+     * <p>
+     * Gets the shared object that determines if a drawing process must be
+     * cancelled or can continue.
+     * </p>
+     *
+     * @return the shared object that determines if a drawing process must be
+     *         cancelled or can continue
+     */
+    public CancelDraw getCanceldraw() {
+        return canceldraw;
+    }
+
+    /**
+     * <p>
+     * Gets the tool used in combination with the current tool of this
+     * <code>MapControl</code>.
+     * </p>
+     *
+     * @return the tool used in combination with the <code>currentMapTool</code>
+     *         ; <code>null</code> if there is
+     *         no combined tool
+     */
+    public Behavior getCombinedTool() {
+        return combinedTool;
+    }
+
+    /**
+     * <p>
+     * Sets a tool to be used in combination with the current tool of this
+     * <code>MapControl</code>.
+     * </p>
+     *
+     * @param combinedTool
+     *            a tool to be used in combination with the current tool of
+     *            <code>MapControl</code>
+     */
+    public void setCombinedTool(Behavior combinedTool) {
+        this.combinedTool = combinedTool;
+
+        if (currentMapTool == null) {
+            return;
+        }
+
+        if (currentMapTool instanceof CompoundBehavior) {
+            ((CompoundBehavior) currentMapTool).addMapBehavior(combinedTool,
+                true);
+        } else {
+            currentMapTool =
+                new CompoundBehavior(new Behavior[] { currentMapTool });
+            ((CompoundBehavior) currentMapTool).addMapBehavior(combinedTool,
+                true);
+        }
+
+    }
+
+    /**
+     * <p>
+     * Adds a new tool as combined tool.
+     * </p>
+     * <p>
+     * The new tool will be stored with the previous combined tools, and will be
+     * combined with the current tool.
+     * </p>
+     * <p>
+     * If <code>tool</code> was already stored as a combined tool, doesn't adds
+     * it.
+     * </p>
+     *
+     * @param tool
+     *            a new tool to be used combined with the current tool
+     */
+    public void addCombinedBehavior(Behavior tool) {
+        tool.setMapControl(this);
+        if (combinedTool == null) {
+            combinedTool = tool;
+        } else {
+            if (combinedTool instanceof CompoundBehavior) {
+                if (((CompoundBehavior) combinedTool).containsBehavior(tool)) {
+                    return;
+                }
+
+                ((CompoundBehavior) combinedTool).addMapBehavior(tool, true);
+            } else {
+                if (combinedTool.equals(tool)) {
+                    return;
+                }
+
+                combinedTool =
+                    new CompoundBehavior(new Behavior[] { combinedTool });
+                ((CompoundBehavior) combinedTool).addMapBehavior(tool, true);
+                combinedTool.setMapControl(this);
+            }
+        }
+
+        if (currentMapTool == null) {
+            return;
+        }
+
+        if (currentMapTool instanceof CompoundBehavior) {
+            ((CompoundBehavior) currentMapTool).addMapBehavior(tool, true);
+        } else {
+            currentMapTool =
+                new CompoundBehavior(new Behavior[] { currentMapTool });
+            ((CompoundBehavior) currentMapTool).addMapBehavior(tool, true);
+        }
+    }
+
+    /**
+     * <p>
+     * Removes the tool <code>tool</code> used in combination with the current
+     * tool of this <code>MapControl</code>.
+     * </p>
+     */
+    public void removeCombinedTool(Behavior tool) {
+        if ((currentMapTool != null)
+            && (currentMapTool instanceof CompoundBehavior)) {
+            ((CompoundBehavior) currentMapTool).removeMapBehavior(tool);
+        }
+
+        if (combinedTool == null) {
+            return;
+        }
+
+        if (combinedTool instanceof CompoundBehavior) {
+            ((CompoundBehavior) combinedTool).removeMapBehavior(tool);
+        } else {
+            combinedTool = null;
+        }
+    }
+
+    /**
+     * <p>
+     * Updates the grid on the <code>ViewPort</code> of the associated
+     * <code>MapControl</code> object according the values in the
+     * {@link com.iver.cit.gvsig.gui.cad.CADToolAdapter.prefs.Preferences
+     * com.iver.cit.gvsig.gui.cad.CADToolAdapter.prefs.Preferences}.
+     * </p>
+     *
+     * <p>
+     * The preferences are:
+     * <ul>
+     * <li>Show/hide the grid.</li>
+     * <li>Adjust or not the grid.</li>
+     * <li>Horizontal ( X ) line separation.</li>
+     * <li>Vertical ( Y ) line separation.</li>
+     * </ul>
+     * </p>
+     */
+    public void initializeGrid() {
+        Preferences prefs = mapControlManager.getEditionPreferences();
+        boolean showGrid =
+            prefs.getBoolean("grid.showgrid", cadgrid.isShowGrid());
+        boolean adjustGrid =
+            prefs.getBoolean("grid.adjustgrid", cadgrid.isAdjustGrid());
+
+        double dx = prefs.getDouble("grid.distancex", cadgrid.getGridSizeX());
+        double dy = prefs.getDouble("grid.distancey", cadgrid.getGridSizeY());
+
+        setGridVisibility(showGrid);
+        setAdjustGrid(adjustGrid);
+        cadgrid.setGridSizeX(dx);
+        cadgrid.setGridSizeY(dy);
+    }
+
+    public void setAdjustGrid(boolean adjustGrid) {
+        cadgrid.setAdjustGrid(adjustGrid);
+    }
+
+    public void setGridVisibility(boolean showGrid) {
+        cadgrid.setShowGrid(showGrid);
+        cadgrid.setViewPort(getViewPort());
+        this.repaint();
+    }
+
+    /**
+     * Uses like a mouse pointer the image that provides the
+     * selected tool.
+     *
+     */
+
+    private Image lastImageCursor = null;
+    private Cursor lastCursor = null;
+
+    private void setToolMouse() {
+        Image imageCursor = getCurrentMapTool().getImageCursor();
+        if (imageCursor != null && imageCursor == lastImageCursor && lastCursor != null && lastCursor != transparentCursor) {
+            setCursor(lastCursor);
+            return;
+        }
+        lastImageCursor = imageCursor;
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Cursor c = toolkit.createCustomCursor(imageCursor, new Point(16, 16), "img");
+        setCursor(c);
+        lastCursor = c;
+    }
+
+    /**
+     * Makes the mouse pointer transparent.
+     */
+    private void setTransparentMouse() {
+        setCursor(transparentCursor);
+        lastCursor = transparentCursor;
+    }
+
+    /**
+     * <p>
+     * Draws a 31x31 pixels cross round the mouse's cursor with an small
+     * geometry centered:
+     * <ul>
+     * <li><i>an square centered</i>: if isn't over a <i>control point</i>.
+     * <li><i>an small geometry centered according to the kind of control
+     * point</i>: if it's over a control point. In this case, the small geometry
+     * is drawn by a {@link ISnapper ISnapper} type object.<br>
+     * On the other hand, a light-yellowed background tool tip text with the
+     * type of <i>control point</i> will be displayed.</li>
+     * </p>
+     *
+     * @param g
+     *            <code>MapControl</code>'s graphics where the data will be
+     *            drawn
+     */
+    private void drawCursor() {
+        if (adjustedPoint == null) {
+            return;
+        }
+
+        if (usedSnap != null) {
+            usedSnap.draw(mapControlDrawer, adjustedPoint);
+            setTransparentMouse();
+        } else {
+            setToolMouse();
+        }
+    }
+
+    /**
+     * <p>
+     * Adjusts the <code>point</code> to the grid if its enabled, and sets
+     * <code>mapHandlerAdjustedPoint</code> with that new value.
+     * </p>
+     *
+     * <p>
+     * The value returned is the distance between those points: the original and
+     * the adjusted one.
+     * </p>
+     *
+     * @param point
+     *            point to adjust
+     * @param mapHandlerAdjustedPoint
+     *            <code>point</code> adjusted
+     *
+     * @return distance from <code>point</code> to the adjusted one. If there is
+     *         no
+     *         adjustment, returns <code>Double.MAX_VALUE</code>.
+     */
+
+    private double adjustToHandler(Point2D point,
+        Point2D mapHandlerAdjustedPoint) {
+
+        if (!isRefentEnabled())
+            return Double.MAX_VALUE;
+
+        List layersToSnap = getMapContext().getLayersToSnap();
+
+        double mapTolerance =
+            vp.toMapDistance(mapControlManager.getTolerance());
+        double minDist = mapTolerance;
+        double middleTol = mapTolerance * 0.5;
+        Point2D mapPoint = point;
+        Envelope r = null;
+        try {
+            r =
+                geomManager.createEnvelope(mapPoint.getX() - middleTol,
+                    mapPoint.getY() - middleTol, mapPoint.getX() + middleTol,
+                    mapPoint.getY() + middleTol, SUBTYPES.GEOM2D);
+        } catch (Exception e1) {
+            LOG.info("Error creating the envelope", e1);
+            return Double.MAX_VALUE;
+        }
+
+        usedSnap = null;
+        Point2D lastPoint = null;
+        if (previousPoint != null) {
+            lastPoint = new Point2D.Double(previousPoint[0], previousPoint[1]);
+        }
+        for (int j = 0; j < layersToSnap.size(); j++) {
+            FLyrVect lyrVect = (FLyrVect) layersToSnap.get(j);
+            SpatialCache cache = lyrVect.getSpatialCache();
+            if (lyrVect.isVisible()) {
+                // La lista de snappers est� siempre ordenada por prioridad. Los
+                // de mayor
+                // prioridad est�n primero.
+                List geoms = cache.query(r);
+
+                for (int i = 0; i < mapControlManager.getSnapperCount(); i++)
+                {
+                    ISnapper theSnapper = mapControlManager.getSnapperAt(i);
+                    if (theSnapper instanceof ISnapperGeometriesVectorial)
+                    {
+                        ((ISnapperGeometriesVectorial)theSnapper).setGeometries(geoms);
+                    }
+                }
+
+                for (int n = 0; n < geoms.size(); n++) {
+                    Geometry geom = (Geometry) geoms.get(n);
+                    for (int i = 0; i < mapControlManager.getSnapperCount(); i++) {
+                        ISnapper theSnapper = mapControlManager.getSnapperAt(i);
+                        if (!theSnapper.isEnabled())
+                            continue;
+
+                        if (usedSnap != null) {
+                            // Si ya tenemos un snap y es de alta prioridad,
+                            // cogemos ese. (A no ser que en otra capa
+                            // encontremos un snapper mejor)
+                            if (theSnapper.getPriority() > usedSnap
+                                .getPriority())
+                                break;
+                        }
+                        // SnappingVisitor snapVisitor = null;
+                        Point2D theSnappedPoint = null;
+                        if (theSnapper instanceof ISnapperVectorial) {
+                            theSnappedPoint =
+                                ((ISnapperVectorial) theSnapper).getSnapPoint(
+                                    point, geom, mapTolerance, lastPoint);
+                        }
+                        if (theSnapper instanceof ISnapperRaster) {
+                            ISnapperRaster snapRaster =
+                                (ISnapperRaster) theSnapper;
+                            theSnappedPoint =
+                                snapRaster.getSnapPoint(this, point,
+                                    mapTolerance, lastPoint);
+                        }
+
+                        if (theSnappedPoint != null) {
+                            double distAux = theSnappedPoint.distance(point);
+                            if (minDist > distAux) {
+                                minDist = distAux;
+                                usedSnap = theSnapper;
+                                mapHandlerAdjustedPoint
+                                    .setLocation(theSnappedPoint);
+                            }
+                        }
+                    }
+                } // for n
+            } // visible
+        }
+        if (usedSnap != null)
+            return minDist;
+        return Double.MAX_VALUE;
+
+    }
+
+    /**
+     * Determines if snap tools are enabled or disabled.
+     *
+     * @return <code>true</code> to enable the snap tools; <code>false</code> to
+     *         disable them
+     *
+     * @see #setRefentEnabled(boolean)
+     */
+    public boolean isRefentEnabled() {
+        return bRefent;
+    }
+
+    /**
+     * <p>
+     * Tries to find the nearest geometry or grid control point by the position
+     * of the current snap tool.
+     * </p>
+     *
+     * <p>
+     * Prioritizes the grid control points than the geometries ones.
+     * </p>
+     *
+     * <p>
+     * If finds any near, stores the <i>map</i> and <i>pixel</i> coordinates for
+     * the snap, and enables the <code>bForceCoord</code> attribute for the next
+     * draw of the mouse's cursor.
+     * </p>
+     *
+     * @param point
+     *            current mouse 2D position
+     */
+    public void calculateSnapPoint(Point point) {
+        // Se comprueba el ajuste a rejilla
+
+        Point2D gridAdjustedPoint = vp.toMapPoint(point);
+        double minDistance = Double.MAX_VALUE;
+
+        minDistance = cadgrid.adjustToGrid(gridAdjustedPoint);
+        if (minDistance < Double.MAX_VALUE) {
+            adjustedPoint = vp.fromMapPoint(gridAdjustedPoint);
+            mapAdjustedPoint = gridAdjustedPoint;
+        } else {
+            mapAdjustedPoint = null;
+        }
+
+        Point2D handlerAdjustedPoint = null;
+
+        // Se comprueba el ajuste a los handlers
+        if (mapAdjustedPoint != null) {
+            handlerAdjustedPoint = (Point2D) mapAdjustedPoint.clone(); // getMapControl().getViewPort().toMapPoint(point);
+        } else {
+            handlerAdjustedPoint = vp.toMapPoint(point);
+        }
+
+        Point2D mapPoint = new Point2D.Double();
+        double distance = adjustToHandler(handlerAdjustedPoint, mapPoint);
+
+        if (distance < minDistance) {
+            bForceCoord = true;
+            adjustedPoint = vp.fromMapPoint(mapPoint);
+            mapAdjustedPoint = mapPoint;
+            minDistance = distance;
+        }
+
+        // Si no hay ajuste
+        if (minDistance == Double.MAX_VALUE) {
+            adjustedPoint = point;
+            mapAdjustedPoint = null;
+        }
+    }
+
+    /**
+     * Sets the snap tools enabled or disabled.
+     *
+     * @param activated
+     *            <code>true</code> to enable the snap tools; <code>false</code>
+     *            to disable them
+     *
+     * @see #isRefentEnabled()
+     */
+    public void setRefentEnabled(boolean activated) {
+        bRefent = activated;
+    }
+
+    public Grid getGrid() {
+        return cadgrid;
+    }
+
+    public void update(Observable observable, Object notification) {
+        DataStoreNotification ddsn = (DataStoreNotification) notification;
+        String type = ddsn.getType();
+        if (type.equals(FeatureStoreNotification.AFTER_UNDO)
+            || type.equals(FeatureStoreNotification.AFTER_REDO)) {
+            repaint();
+        }
+    }
+
+    /**
+     * @return the adjustedPoint
+     */
+    public Point2D getAdjustedPoint() {
+        return adjustedPoint;
+    }
+
+    /**
+     * @return the mapAdjustedPoint
+     */
+    public Point2D getMapAdjustedPoint() {
+        return mapAdjustedPoint;
+    }
+
+    /**
+     * Gets the selected point. If the snapping is enabled
+     * it returns the selected point.
+     *
+     * @return
+     *         The selected point
+     */
+    public Point2D getPoint() {
+        if (mapAdjustedPoint != null) {
+            return mapAdjustedPoint;
+        } else {
+            return getViewPort().toMapPoint(adjustedPoint);
+        }
+    }
+
+	public synchronized void dispose() {
+		// Check if we have already been disposed, and don't do it again
+		if (!disposed && ToolsLocator.getDisposableManager().release(this)) {
+			drawer.setShutdown(true);
+			disposed = true;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/MapControl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/test/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/test/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/test/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerTest.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontrol.tools;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+
+public class AreaListenerTest extends AbstractLibraryAutoInitTestCase {
+	private IProjection projectionUTM = CRSFactory.getCRS("EPSG:23030");
+	private IProjection projectionGeo = CRSFactory.getCRS("EPSG:4230");
+		
+	@Override
+	protected void doSetUp() throws Exception {
+		// Nothing to do	
+	}
+
+	public void test1() {
+		AreaListenerImpl areaListenerUTM=new AreaListenerImpl(newMapControlUTM());
+		AreaListenerImpl areaListenerGeo=new AreaListenerImpl(newMapControlGeo());
+		Double[] xsUTM=new Double[] {new Double(731292),new Double(731901),new Double(730138)};
+		Double[] ysUTM=new Double[] {new Double(4351223),new Double(4350768),new Double(4349232)};
+		double areaUTM=areaListenerUTM.returnCoordsArea(xsUTM,ysUTM,new Point2D.Double(730138,4349232));
+		Double[] xsGeo=new Double[] {new Double(-0.31888183),new Double(-0.31173131),new Double(-0.33268401)};
+		Double[] ysGeo=new Double[] {new Double(39.27871741),new Double(39.27464327),new Double(39.26117368)};
+		double areaGeo=areaListenerGeo.returnGeoCArea(xsGeo,ysGeo,new Point2D.Double(-0.33268401,39.26117368));
+		assertTrue("Area UTM igual a Geo",areaUTM<(areaGeo+1000)&& areaUTM>(areaGeo-1000));
+	}
+	private MapControl newMapControlUTM() {
+		ViewPort vp = new ViewPort(projectionUTM);
+		MapControl mc=new MapControl();
+		mc.setMapContext(new MapContext(vp));
+		return mc;
+	}
+	private MapControl newMapControlGeo() {
+		ViewPort vp = new ViewPort(projectionGeo);
+		MapControl mc=new MapControl();
+		mc.setMapContext(new MapContext(vp));
+		return mc;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/src/test/java/org/gvsig/fmap/mapcontrol/tools/AreaListenerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/pom.xml	(revision 42196)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+                      
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.control</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.library</artifactId>
+    <version>2.0.97</version>
+  </parent>  
+
+  <dependencies>
+      
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.cresques.ui</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.dynform.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.dynform.spi</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.impl</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+   <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        <scope>compile</scope>
+    </dependency>  
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>        
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.operation</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+    <!-- TEST -->
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+
+        <plugin>
+          <!-- Skip compilation tests -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>default-testCompile</id>
+              <phase>process-test-sources</phase>
+              <goals>
+                <goal>testCompile</goal>
+              </goals>
+              <configuration>
+                <skip>true</skip>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.fmap.control
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.pom.xml.swp


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/pom.xml	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <description>Exportto project</description>
+  
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.library</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+    </dependency>
+  </dependencies>
+  
+  <modules>
+    <module>org.gvsig.exportto.lib</module>
+    <module>org.gvsig.exportto.swing</module>
+    <module>org.gvsig.exportto.main</module>
+  </modules>
+</project>
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/org/gvsig/exportto/data/andalucia.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/org/gvsig/exportto/data/andalucia.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/org/gvsig/exportto/data/andalucia.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/org/gvsig/exportto/data/andalucia.shp
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/org/gvsig/exportto/data/andalucia.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/org/gvsig/exportto/data/andalucia.dbf
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your classes.
+
+This folder is added to the classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.exportto">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exportto package documentation</title>
+</head>
+<body>
+
+	<p>Exportto library testing and demo application.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/Main.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/Main.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/Main.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.main;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JToolBar;
+import javax.swing.WindowConstants;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.ExporttoLocator;
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.ExporttoWindowManager;
+import org.gvsig.exportto.swing.JExporttoServicePanel;
+import org.gvsig.exportto.swing.preferences.ExporttoSwingPreferencesComponent;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Main executable class for testing the Exportto library.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Main {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Main.class);
+
+    private ExporttoManager manager;
+    private ExporttoSwingManager swingManager;
+    private DataManager dataManager;
+
+    public static void main(String args[]) {
+        new DefaultLibrariesInitializer().fullInitialize();
+        Main main = new Main();
+        main.show();
+    }
+
+    @SuppressWarnings("serial")
+    public void show() {
+        manager = ExporttoLocator.getManager();
+        swingManager = ExporttoSwingLocator.getSwingManager();
+        dataManager = DALLocator.getDataManager();
+
+        Action showCookie = new AbstractAction("Get a Exportto") {
+
+            public void actionPerformed(ActionEvent e) {
+                showExportto(manager);
+            }
+        };
+
+        Action preferences = new AbstractAction("Exportto preferences") {
+
+            public void actionPerformed(ActionEvent e) {
+                showExporttoPreferences();
+            }
+
+        };
+
+        Action exit = new AbstractAction("Exit") {
+
+            public void actionPerformed(ActionEvent e) {
+                System.exit(0);
+            }
+        };
+
+        JFrame frame = new JFrame("Exportto example app");
+        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+        // Create the menu bar.
+        JMenuBar menuBar = new JMenuBar();
+
+        // Build the menu.
+        JMenu menuFile = new JMenu("File");
+        menuFile.add(new JMenuItem(showCookie));
+        menuFile.add(new JMenuItem(preferences));
+        menuFile.add(new JMenuItem(exit));
+
+        menuBar.add(menuFile);
+
+        JToolBar toolBar = new JToolBar();
+        toolBar.add(new JButton(showCookie));
+        toolBar.add(new JButton(exit));
+
+        frame.setPreferredSize(new Dimension(200, 100));
+        frame.setJMenuBar(menuBar);
+        frame.add(toolBar, BorderLayout.PAGE_START);
+
+        // Display the window.
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+    private void showExporttoPreferences() {
+        ExporttoSwingPreferencesComponent preferences =
+            ExporttoSwingProviderLocator.getManager()
+                .createExporttoSwingProvidersPreferences();
+
+        JFrame preferencesFrame = new JFrame("Export to preferences");
+        preferencesFrame.add(preferences.asJComponent());
+
+        preferencesFrame.pack();
+        preferencesFrame.setVisible(true);
+    }
+
+    public void showExportto(ExporttoManager manager) {
+        try {
+            JExporttoServicePanel panel =
+                swingManager.createExportto(createFeatureStore(),
+                    CRSFactory.getCRS("EPSG:23030"));
+            panel.setPreferredSize(new Dimension(800, 400));
+            swingManager.getWindowManager().showWindow(panel, "Exportto",
+                ExporttoWindowManager.MODE_WINDOW);
+        } catch (ValidateDataParametersException e) {
+            LOG.error("Error showing a Exportto", e);
+        } catch (InitializeException e) {
+            LOG.error("Error showing a Exportto", e);
+        } catch (ProviderNotRegisteredException e) {
+            LOG.error("Error showing a Exportto", e);
+        }
+    }
+
+    private FeatureStore createFeatureStore() throws InitializeException,
+        ProviderNotRegisteredException, ValidateDataParametersException {
+        String sourceFileName =
+            getClass().getClassLoader()
+                .getResource("org/gvsig/exportto/data/andalucia.shp").getFile();
+        DataStoreParameters sourceParameters =
+            dataManager.createStoreParameters("Shape");
+        sourceParameters.setDynValue("shpfile", sourceFileName);
+        sourceParameters.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+        return (FeatureStore) dataManager.openStore("Shape", sourceParameters);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/src/main/java/org/gvsig/exportto/main/Main.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/pom.xml	(revision 42196)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.exportto.main</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.exportto</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.lib.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.lib.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.swing.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+<!--
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.serv.field</artifactId>
+            <scope>compile</scope>
+        </dependency>
+-->
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.main
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/pom.xml	(revision 42196)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.lib</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.exportto.lib.api</module>
+    <module>org.gvsig.exportto.lib.impl</module>
+  </modules>
+</project>
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/pom.xml	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.lib.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.api</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+        <plugin>
+          <!-- Skip compilation tests -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>default-testCompile</id>
+              <phase>process-test-sources</phase>
+              <goals>
+                <goal>testCompile</goal>
+              </goals>
+              <configuration>
+                <skip>true</skip>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+
+    </plugins>
+  </build>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.impl.ExporttoDefaultImplLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/resources/org/gvsig/exportto/lib/impl/exporttofilters.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/resources/org/gvsig/exportto/lib/impl/exporttofilters.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/resources/org/gvsig/exportto/lib/impl/exporttofilters.properties	(revision 42196)
@@ -0,0 +1,4 @@
+#point_geometries_only=
+#curve_geometries_only=
+#surface_geometries_only=
+prov_demo=PROV < '10'
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/resources/org/gvsig/exportto/lib/impl/exporttofilters.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoService.java	(revision 42196)
@@ -0,0 +1,142 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.impl;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+
+/**
+ * Default {@link ExporttoService} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoService extends AbstractMonitorableTask implements
+    ExporttoService {
+
+    private DataServerExplorer dataServerExplorer;
+    private NewDataStoreParameters newDataStoreParameters;
+
+    private ExporttoServiceFinishAction exporttoServiceFinishAction;
+
+    /**
+     * {@link DefaultExporttoService} constructor
+     */
+    public DefaultExporttoService(DataServerExplorer dataServerExplorer,
+        NewDataStoreParameters newDataStoreParameters) {
+        super("Exportto");
+        this.dataServerExplorer = dataServerExplorer;
+        this.newDataStoreParameters = newDataStoreParameters;
+    }
+
+    public void export(FeatureStore featureStore, IProjection projection,
+        FeatureSet featureSet) throws ExporttoServiceException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void export(FeatureSet featureSet) throws ExporttoServiceException {
+
+        String providerName = newDataStoreParameters.getDataStoreName();
+        String explorerName = dataServerExplorer.getProviderName();
+
+        DisposableIterator it = null;
+        FeatureStore target = null;
+        EditableFeature newfeature = null;
+        try {
+            taskStatus.setRangeOfValues(0, featureSet.getSize());
+
+            DataManager dataManager = DALLocator.getDataManager();
+
+            dataManager.newStore(explorerName, providerName,
+                newDataStoreParameters, true);
+            target =
+                (FeatureStore) dataManager.openStore(providerName,
+                    newDataStoreParameters);
+
+            FeatureType targetType = target.getDefaultFeatureType();
+
+            target.edit(FeatureStore.MODE_APPEND);
+            it = featureSet.fastIterator();
+
+            long featureCount = 0;
+            while (it.hasNext()) {
+                Feature feature = (Feature) it.next();
+                newfeature = target.createNewFeature(targetType, feature);
+                target.insert(newfeature);
+
+                featureCount++;
+                this.taskStatus.setCurValue(featureCount);
+
+                if (this.taskStatus.isCancellationRequested()) {
+                    return;
+                }
+            }
+            target.finishEditing();
+
+            this.taskStatus.terminate();
+            this.taskStatus.remove();
+        } catch (Exception e) {
+            throw new ExporttoServiceException(e, newfeature);
+        } finally {
+            if (target != null) {
+                target.dispose();
+            }
+            if (it != null) {
+                it.dispose();
+            }
+            if (featureSet != null) {
+                featureSet.dispose();
+            }
+            DisposeUtils.dispose(it);
+        }
+
+        if (exporttoServiceFinishAction != null) {
+            exporttoServiceFinishAction.finished(
+                newDataStoreParameters.getDataStoreName(),
+                newDataStoreParameters);
+        }
+    }
+
+    public void setFinishAction(
+        ExporttoServiceFinishAction exporttoServiceFinishAction) {
+        this.exporttoServiceFinishAction = exporttoServiceFinishAction;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exportto package documentation</title>
+</head>
+<body>
+
+	<p>Exportto library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/ExporttoDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/ExporttoDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/ExporttoDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.impl;
+
+import org.gvsig.exportto.ExporttoLibrary;
+import org.gvsig.exportto.ExporttoLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for default implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoDefaultImplLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(ExporttoLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        ExporttoLocator.registerManager(DefaultExporttoManager.class);
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/ExporttoDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoManager.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.logging.Level;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+
+/**
+ * Default {@link ExporttoManager} implementation.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoManager implements ExporttoManager {
+
+    private static final Logger LOG = LoggerFactory
+            .getLogger(DefaultExporttoManager.class);
+
+    private Map<String, String> filters = null;
+    private File homeFolder = null;
+
+    public DefaultExporttoManager() {
+        super();
+        filters = new HashMap<String, String>();
+    }
+
+    public ExporttoService getExporttoService(
+            DataServerExplorer dataServerExplorer,
+            NewDataStoreParameters newDataStoreParameters) {
+        return new DefaultExporttoService(dataServerExplorer,
+                newDataStoreParameters);
+    }
+
+    public Iterator getPredefinedFilters() {
+        if (this.filters == null) {
+            if (this.homeFolder != null) {
+                Properties properties = new Properties();
+                File filtersFile = new File(this.homeFolder, "filters");
+                if (filtersFile.exists()) {
+                    try {
+                        properties.load(new FileInputStream(filtersFile));
+                        Iterator it = properties.keySet().iterator();
+                        while (it.hasNext()) {
+                            String key = (String) it.next();
+                            filters.put(key, (String) properties.get(key));
+                        }
+                    } catch (IOException ex) {
+                        LOG.warn("Can't load filters file '" + filtersFile.getAbsolutePath() + "'.", ex);
+                    }
+                }
+            }
+        }
+        return filters.keySet().iterator();
+    }
+
+    public String getFilter(String filterName) {
+        if (filters.containsKey(filterName)) {
+            return (String) filters.get(filterName);
+        }
+        return null;
+    }
+
+    public void addFilter(String name, String filter) {
+        this.filters.put(name, filter);
+        if (this.homeFolder != null) {
+            Properties properties = new Properties();
+            Iterator<Map.Entry<String, String>> it = this.filters.entrySet().iterator();
+            while (it.hasNext()) {
+                Map.Entry<String, String> entry = it.next();
+                properties.setProperty(entry.getKey(), entry.getValue());
+            }
+            File filtersFile = new File(this.homeFolder, "filters");
+            try {
+                properties.store(new FileOutputStream(filtersFile), "");
+            } catch (IOException ex) {
+                LOG.warn("Can't load filters file '" + filtersFile.getAbsolutePath() + "'.", ex);
+            }
+        }
+    }
+
+    public void setHomeFolder(File homeFolder) {
+        this.homeFolder = homeFolder;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/main/java/org/gvsig/exportto/impl/DefaultExporttoManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/java/org/gvsig/exportto/impl/DefaultExporttoManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/java/org/gvsig/exportto/impl/DefaultExporttoManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/java/org/gvsig/exportto/impl/DefaultExporttoManagerTest.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.impl;
+
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.ExporttoManagerTest;
+
+/**
+ * {@link ExporttoManager} API compatibility tests for the
+ * {@link DefaultExporttoManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoManagerTest extends ExporttoManagerTest {
+
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/java/org/gvsig/exportto/impl/DefaultExporttoManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.exportto">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoServiceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoServiceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoServiceTest.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * API compatibility tests for {@link ExporttoService} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class ExporttoServiceTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    protected ExporttoManager manager;
+    protected DataManager dataManager = null;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        manager = ExporttoLocator.getManager();
+        dataManager = DALLocator.getDataManager();
+    }
+
+    /**
+     * Returns an instance of the {@link ExporttoService}.
+     * 
+     * @return a {@link ExporttoService} instance
+     * @throws ValidateDataParametersException
+     * @throws DataException
+     * @throws Exception
+     *             if there is any error creating the instance
+     */
+    protected ExporttoService createService()
+        throws ValidateDataParametersException, DataException {
+        DataServerExplorerParameters dataServerExplorerParameters =
+            dataManager.createServerExplorerParameters("FilesystemExplorer");
+        DataServerExplorer dataServerExplorer =
+            dataManager.openServerExplorer("FilesystemExplorer",
+                dataServerExplorerParameters);
+        NewDataStoreParameters newDataStoreParameters =
+            dataServerExplorer.getAddParameters("Shape");
+        return manager.getExporttoService(dataServerExplorer,
+            newDataStoreParameters);
+    }
+
+    /**
+     * Test for the
+     * {@link ExporttoService#export(org.gvsig.fmap.dal.feature.FeatureSet)}
+     * method.
+     */
+    public void testExporttoServiceCreation() {
+        ExporttoService exportService;
+        try {
+            exportService = createService();
+            assertNotNull(exportService);
+            // TODO a test for the export service
+            // exportService.export(featureSet);
+
+        } catch (ValidateDataParametersException e) {
+            assertNull(e);
+        } catch (DataException e) {
+            assertNull(e);
+        }
+    }
+
+    @SuppressWarnings("unused")
+    private FeatureStore createMemoryFeatureStore()
+        throws ValidateDataParametersException, DataException {
+        DataStoreParameters memoryParameters =
+            dataManager.createStoreParameters("Memory");
+        FeatureStore featureStore =
+            (FeatureStore) dataManager.openStore("Memory", memoryParameters);
+        return (FeatureStore) featureStore.getFeatureSet();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoServiceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoManagerTest.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * API compatibility tests for {@link ExporttoManager} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class ExporttoManagerTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    protected ExporttoManager manager;
+    protected DataManager dataManager = null;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        manager = ExporttoLocator.getManager();
+        dataManager = DALLocator.getDataManager();
+    }
+
+    /**
+     * Test for the {@link ExporttoManager#getExporttoService()} method.
+     * 
+     * @throws Exception
+     *             if there is any error in the tests
+     */
+    public void testGetExporttoService() throws Exception {
+        ExporttoService exportService;
+        try {
+            exportService = createService();
+            assertNotNull(exportService);
+        } catch (ValidateDataParametersException e) {
+            assertNull(e);
+        } catch (DataException e) {
+            assertNull(e);
+        }
+    }
+
+    protected ExporttoService createService()
+        throws ValidateDataParametersException, DataException {
+        DataServerExplorerParameters dataServerExplorerParameters =
+            dataManager.createServerExplorerParameters("FilesystemExplorer");
+        DataServerExplorer dataServerExplorer =
+            dataManager.openServerExplorer("FilesystemExplorer",
+                dataServerExplorerParameters);
+        NewDataStoreParameters newDataStoreParameters =
+            dataServerExplorer.getAddParameters("Shape");
+        return manager.getExporttoService(dataServerExplorer,
+            newDataStoreParameters);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/test/java/org/gvsig/exportto/ExporttoManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/resources/filters.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/resources/filters.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/resources/filters.txt	(revision 42196)
@@ -0,0 +1,3 @@
+point_geometries_only=
+curve_geometries_only=
+surface_geometries_only=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/resources/filters.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.ExporttoLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoException.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Generic exception thrown in the Exportto API when the exception or error
+ * may be dealt by the program or the user of the program which is a client of
+ * the Exportto API.
+ * 
+ * @see {@link ExporttoService}
+ * @see {@link ExporttoManager}
+ * @author gvSIG team.
+ * @version $Id$
+ */
+public class ExporttoException extends BaseException {
+
+    private static final long serialVersionUID = 6756475060924237176L;
+
+    private static final String MESSAGE =
+        "An error has been produced in the Exportto library";
+
+    private static final String KEY = "_ExporttoException";
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <strong>Don't use this constructor in child classes.</strong>
+     */
+    public ExporttoException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <p>
+     * <strong>Don't use this constructor in child classes.</strong>
+     * </p>
+     * 
+     * @param cause
+     *            the original cause of the exception
+     */
+    public ExporttoException(Exception cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected ExporttoException(String message, String key, long code) {
+        super(message, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param cause
+     *            the original cause of the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected ExporttoException(String message, Throwable cause, String key,
+        long code) {
+        super(message, cause, key, code);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceException.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Exception thrown when there is an error getting a Exportto message.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoServiceException extends ServiceException {
+
+    private static final long serialVersionUID = -7423501876634702709L;
+
+    private static final String MESSAGE =
+        "An error has been produced exporting a store";
+
+    private static final String KEY = "_ExporttoServiceException";
+    protected Feature feature = null;
+
+    /**
+     * Creates a new {@link ExporttoServiceException}.
+     * 
+     * @param cause
+     *            the original cause
+     */
+    public ExporttoServiceException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+    protected ExporttoServiceException(String message, Throwable cause, String key, long code) {
+        super(message, cause, key, code);
+    }
+    
+    public ExporttoServiceException(Throwable cause, Feature feature) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+        this.feature = feature;
+    }
+
+    public ExporttoServiceException(String message, Throwable cause) {
+        super(message, cause, KEY, serialVersionUID);
+    }
+    
+    public Feature getFeature() {
+        return this.feature;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceFinishAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceFinishAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceFinishAction.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ * Action that can be executed at the end of the export process.
+ * An example of action can be load the destination {@link FeatureStore} like a
+ * layer in a view.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface ExporttoServiceFinishAction {
+
+    /**
+     * This method is called at the end of an export process.
+     * 
+     * @param layerName
+     *            name of the new layer that can be added to gvSIG.
+     * @param dataStoreParameters
+     *            the parameters that can be used to create the exported store.
+     */
+    public void finished(String layerName,
+        DataStoreParameters dataStoreParameters);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoServiceFinishAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoService.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.task.MonitorableTask;
+
+/**
+ * <p>
+ * This service is used to export a source {@link FeatureStore} to a target
+ * {@link FeatureStore}.
+ * </p>
+ * <p>
+ * It inherits if {@link MonitorableTask}, and it means that the export process
+ * can be monitorized by one or more observers that can listen all the export
+ * events.
+ * <p>
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface ExporttoService extends MonitorableTask {
+
+    /**
+     * This method export a {@link FeatureSet} to other {@link FeatureSet}.
+     * The other necessary parameters to make this conversion are specific
+     * for every {@link ExporttoService}. e.g: a shape exporter needs a
+     * file and a projection, a database exporter needs a connection
+     * parameters...
+     * 
+     * @param featureSet
+     *            the set of features hat have to be exported.
+     * @throws ExporttoServiceException
+     *             if there is any exception in the exporting process
+     */
+    public void export(FeatureSet featureSet) throws ExporttoServiceException;
+
+    /**
+     * Sets the {@link ExporttoServiceFinishAction} that is used at the end
+     * of the {@link ExporttoService}.
+     * 
+     * @param exporttoServiceFinishAction
+     *            it contains an action that can be executed at the end of the
+     *            export process
+     * 
+     */
+    public void setFinishAction(
+        ExporttoServiceFinishAction exporttoServiceFinishAction);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLocator.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This locator is the entry point for the Exportto library, providing
+ * access to all Exportto services through the {@link ExporttoManager} .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoLocator extends BaseLocator {
+
+    /**
+     * Exportto manager name.
+     */
+    public static final String MANAGER_NAME = "Exportto.manager";
+
+    /**
+     * Exportto manager description.
+     */
+    public static final String MANAGER_DESCRIPTION = "Exportto Manager";
+
+    private static final String LOCATOR_NAME = "Exportto.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final ExporttoLocator INSTANCE = new ExporttoLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static ExporttoLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name.
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to the ExporttoManager.
+     * 
+     * @return a reference to the ExporttoManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static ExporttoManager getManager() throws LocatorException {
+        return (ExporttoManager) getInstance().get(MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the ExporttoManager interface.
+     * 
+     * @param clazz
+     *            implementing the ExporttoManager interface
+     */
+    public static void registerManager(Class<? extends ExporttoManager> clazz) {
+        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLibrary.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(ExporttoLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        ExporttoManager manager = ExporttoLocator.getManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                ExporttoLocator.MANAGER_NAME, ExporttoLocator.getInstance());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exportto package documentation</title>
+</head>
+<body>
+
+	<p>Exportto library API.</p>
+	
+	<p>
+	It allows to get new Exportto and get their text.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoManager.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto;
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * This class is responsible of the management of the library's business logic.
+ * It is the library's main entry point, and provides all the services to manage
+ * {@link ExporttoService}s.
+ * 
+ * @see ExporttoService
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface ExporttoManager {
+
+    /**
+     * Create an instance of a {@link ExporttoService}.
+     * 
+     * @param dataServerExplorer
+     * @param newDataStoreParameters
+     * @return {@link ExporttoService}
+     */
+    public ExporttoService getExporttoService(
+        DataServerExplorer dataServerExplorer,
+        NewDataStoreParameters newDataStoreParameters);
+
+    public Iterator getPredefinedFilters();
+
+    public String getFilter(String filterName);
+    
+    public void setHomeFolder(File homeFolder);
+
+    public void addFilter(String name, String filter);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/src/main/java/org/gvsig/exportto/ExporttoManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/pom.xml	(revision 42196)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.lib.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.tools.lib</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+          <scope>compile</scope>        
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.projection.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+  </dependencies>  
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib/org.gvsig.exportto.lib.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exportto package documentation</title>
+</head>
+<body>
+
+	<p>Exportto swing library API.</p>
+	
+	<p>
+	It allows to get swing panels to show Exportto, and to include them in windows.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanel.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing;
+
+import javax.swing.JPanel;
+
+import org.gvsig.exportto.ExporttoService;
+
+/**
+ * A panel to show a {@link ExporttoService}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class JExporttoServicePanel extends JPanel {
+
+    private static final long serialVersionUID = 114900538340226231L;
+
+    /**
+     * @param exporttoServicePanelListener
+     *            sets a listener that can be used to execute the panel events.
+     */
+    public abstract void setExporttoServicePanelListener(
+        JExporttoServicePanelListener exporttoServicePanelListener);
+
+    /**
+     * returns status of panel.
+     * Values are:
+     * - JOptionPane.OK_OPTION
+     * - JOptionPane.CANCEL_OPTION
+     * - JOptionPane.UNDEFINED_CONDITION
+     * 
+     * @return
+     */
+    public abstract int getStatus();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLocator.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing;
+
+import org.gvsig.tools.locator.BaseLocator;
+
+/**
+ * This locator is the entry point for the Exportto swing library,
+ * providing access to all Exportto swing services through the
+ * {@link ExporttoSwingManager} .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoSwingLocator extends BaseLocator {
+
+    /**
+     * Exportto swing manager name.
+     */
+    public static final String SWING_MANAGER_NAME = "Exportto.swing.manager";
+
+    /**
+     * Exportto swing manager description.
+     */
+    public static final String SWING_MANAGER_DESCRIPTION = "Exportto UIManager";
+
+    private static final String LOCATOR_NAME = "Exportto.swing.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final ExporttoSwingLocator INSTANCE =
+        new ExporttoSwingLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static ExporttoSwingLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Registers the Class implementing the PersistenceManager interface.
+     * 
+     * @param clazz
+     *            implementing the PersistenceManager interface
+     */
+    public static void registerSwingManager(
+        Class<? extends ExporttoSwingManager> clazz) {
+        getInstance().register(SWING_MANAGER_NAME, SWING_MANAGER_DESCRIPTION,
+            clazz);
+    }
+
+    /**
+     * Gets the instance of the {@link ScriptingUIManager} registered.
+     * 
+     * @return {@link ScriptingUIManager}
+     */
+    public static ExporttoSwingManager getSwingManager() {
+        return (ExporttoSwingManager) getInstance().get(SWING_MANAGER_NAME);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLibrary.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing;
+
+import org.gvsig.exportto.ExporttoLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for Swing API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoSwingLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(ExporttoSwingLibrary.class);
+        require(ExporttoLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        ExporttoSwingManager manager = ExporttoSwingLocator.getSwingManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                ExporttoSwingLocator.SWING_MANAGER_NAME,
+                ExporttoSwingLocator.getInstance());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/preferences/ExporttoSwingPreferencesComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/preferences/ExporttoSwingPreferencesComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/preferences/ExporttoSwingPreferencesComponent.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.preferences;
+
+import java.util.Set;
+
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ * API for the Export to swing preferences component panel.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface ExporttoSwingPreferencesComponent extends Component {
+
+    /**
+     * Returns the providers disabled by the user.
+     * 
+     * @return the providers disabled by the user
+     */
+    Set<?> getDisabledProviders();
+
+    /**
+     * Undoes all the user changes in the preferences.
+     */
+    void initializeDefaults();
+
+    /**
+     * Is the user has made any change in the preferences.
+     * 
+     * @return the user has made any change
+     */
+    boolean isValueChanged();
+
+    /**
+     * Tells the component the changes made by the user to the properties
+     * had been performed.
+     */
+    void setChangesApplied();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/preferences/ExporttoSwingPreferencesComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanelListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanelListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanelListener.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing;
+
+/**
+ * Listener for the {@link JExporttoServicePanel} that provides
+ * the method to manage the panel. The implementation of this
+ * interface has to be provided by the consumer of this library.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface JExporttoServicePanelListener {
+
+    /**
+     * This method is thrown when the close button is clicked.
+     */
+    public void close();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/JExporttoServicePanelListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingManager.java	(revision 42196)
@@ -0,0 +1,191 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing;
+
+import javax.swing.JPanel;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ * This class is responsible of the management of the library's swing user
+ * interface. It is the swing library's main entry point, and provides all the
+ * services to manage library swing components.
+ * 
+ * @see ExporttoWindowManager
+ * @see JExporttoServicePanel
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface ExporttoSwingManager {
+
+    public static final int VECTORIAL_TABLE_WITH_GEOMETRY = 0;
+    public static final int VECTORIAL_TABLE_WITHOUT_GEOMETRY = 1;
+
+    /**
+     * Returns the panel associated to a {@link ExporttoService}.
+     * 
+     * @param featureStore
+     *            the source feature store that is going to be copied.
+     * @param projection
+     *            the destination projection for the output.
+     * @return a {@link JExporttoServicePanel} with the panel of the
+     *         {@link ExporttoService}.
+     * @see JExporttoServicePanel
+     * @see ExporttoService
+     */
+    public JExporttoServicePanel createExportto(FeatureStore featureStore,
+        IProjection projection);
+
+
+    /**
+     * Returns the panel associated to a {@link ExporttoService}.
+     *
+     * @param vectorLayer The source vector layer
+     * 
+     * @param exporttoServiceFinishAction
+     *            the listener to manage the panel events.
+     * @param providerTypes
+     *            a set of the types that have to be displayed.
+     * 
+     * @return a {@link JExporttoServicePanel} with the panel of the
+     *         {@link ExporttoService}.
+     * @see JExporttoServicePanel
+     * @see ExporttoService
+     */
+    public JExporttoServicePanel createExportto(FLyrVect vectorLayer,
+        ExporttoServiceFinishAction exporttoServiceFinishAction,
+        int[] providerTypes);
+    
+    /**
+     * Returns the panel associated to a {@link ExporttoService}.
+     * 
+     * @param featureStore
+     *            the source feature store that is going to be copied.
+     * @param projection
+     *            the destination projection for the output.
+     * @param exporttoServiceFinishAction
+     *            the listener to manage the panel events.
+     * @return a {@link JExporttoServicePanel} with the panel of the
+     *         {@link ExporttoService}
+     * @see JExporttoServicePanel
+     * @see ExporttoService
+     */
+    public JExporttoServicePanel createExportto(FeatureStore featureStore,
+        IProjection projection,
+        ExporttoServiceFinishAction exporttoServiceFinishAction);
+
+    /**
+     * Returns the panel associated to a {@link ExporttoService}.
+     * 
+     * @param featureStore
+     *            the source feature store that is going to be copied.
+     * @param projection
+     *            the destination projection for the output.
+     * @param exporttoServiceFinishAction
+     *            the listener to manage the panel events.
+     * @param providerTypes
+     *            a set of the types that have to be displayed.
+     * @return a {@link JExporttoServicePanel} with the panel of the
+     *         {@link ExporttoService}
+     * @see JExporttoServicePanel
+     * @see ExporttoService
+     */
+    public JExporttoServicePanel createExportto(FeatureStore featureStore,
+        IProjection projection,
+        ExporttoServiceFinishAction exporttoServiceFinishAction,
+        int[] providerTypes);
+
+    /**
+     * Returns the {@link ExporttoManager}.
+     * 
+     * @return {@link ExporttoManager}
+     * @see {@link ExporttoManager}
+     */
+    public ExporttoManager getManager();
+
+    /**
+     * Returns the translation of a string.
+     * 
+     * @param key
+     *            String to translate
+     * @return a String with the translation of the string passed by parameter
+     */
+    public String getTranslation(String key);
+
+    /**
+     * Registers a new instance of a WindowManager which provides services to
+     * the management of the application windows.
+     * 
+     * @param manager
+     *            {@link ExporttoWindowManager} to register in the
+     *            ScriptingUIManager.
+     * @see ExporttoWindowManager
+     */
+    public void registerWindowManager(ExporttoWindowManager manager);
+
+    /**
+     * Returns the {@link ExporttoWindowManager}.
+     * 
+     * @return {@link ExporttoWindowManager}
+     * @see {@link ExporttoWindowManager}
+     */
+    public ExporttoWindowManager getWindowManager();
+    
+    /**
+     * Show a message dialog.
+     * 
+     * If feature is specified, it is dumped in a humman readable
+     * maner to the user.
+     * 
+     * @param title
+     * @param header
+     * @param html text of message in HTML
+     * @param feature 
+     */
+    public void showMessage(String title,
+            String header, String html, Feature feature);
+
+    /**
+     * Show a error message dialog associated to the exception.
+     * 
+     * If feature is specified, it is dumped in a humman readable
+     * maner to the user.
+     * 
+     * @param title
+     * @param header
+     * @param ex
+     * @param feature 
+     */
+    public void showMessage(String title,
+            String header, Exception ex, Feature feature);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoSwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoWindowManager.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing;
+
+/**
+ * Responsible of the window management to show the panels of the
+ * Exportto swing library.
+ * 
+ * @see ExporttoSwingManager
+ * @see JExporttoServicePanel
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface ExporttoWindowManager {
+
+    public static final int MODE_DIALOG = 1;
+    public static final int MODE_WINDOW = 2;
+    public static final int MODE_TOOL = 3;
+
+    /**
+     * Inserts a Panel in a window with a characteristic properties.
+     * 
+     * @param panel
+     *            JPanel with the content of the window
+     * @param title
+     *            String with the title of the window
+     * @param mode
+     *            int that defines the type of window
+     */
+    public void showWindow(JExporttoServicePanel panel, String title, int mode);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/java/org/gvsig/exportto/swing/ExporttoWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.ExporttoSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/pom.xml	(revision 42196)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.api</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency> 
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency> 
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>      
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>      
+  </dependencies>
+</project>
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoPanelValidationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoPanelValidationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoPanelValidationException.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import org.gvsig.exportto.ExporttoException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoPanelValidationException extends ExporttoException {
+
+    private static final long serialVersionUID = 236599587467526356L;
+
+    private static final String MESSAGE = "The panel is not valid";
+
+    private static final String KEY = "_ExporttoPanelValidationException";
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param cause
+     *            the original cause of the exception
+     */
+    public ExporttoPanelValidationException(String message, Throwable cause) {
+        super(message, cause, KEY, serialVersionUID);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     */
+    public ExporttoPanelValidationException(String message) {
+        super(message, KEY, serialVersionUID);
+    }
+
+    public ExporttoPanelValidationException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoPanelValidationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto library SPI.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderFactory.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ProviderFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface ExporttoSwingProviderFactory extends ProviderFactory {
+
+    /**
+     * Return if a provider supports a data type.
+     * 
+     * @param providerType
+     *            the provider type. One of the constants defined in the
+     *            {@link ExporttoSwingManager}.
+     * @return
+     *         if the provider supports a dataType.
+     * @throws ServiceException
+     */
+    public boolean support(int providerType) throws ServiceException;
+
+    /**
+     * Returns a description of the provider.
+     * 
+     * @return a description for the provider
+     */
+    public String getDescription();
+
+    /**
+     * Returns a label or short description for the provider.
+     * 
+     * @return a label or short description for the provider
+     */
+    public String getLabel();
+
+    /**
+     * If the provider this factory creates is enabled. This option might
+     * be used as a way to show or not some providers to the user.
+     * 
+     * @return if the provider is enabled
+     */
+    public boolean isEnabled();
+
+    /**
+     * Enable or disable this provider factory.
+     * 
+     * @param value
+     *            if to enable or disable the factory
+     */
+    public void setEnabled(boolean value);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderManager.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import java.util.List;
+
+import javax.print.attribute.standard.OutputDeviceAssigned;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.preferences.ExporttoSwingPreferencesComponent;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+/**
+ * Responsible of the management of the providers business logic.
+ * 
+ * @see ExporttoSwingProvider
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface ExporttoSwingProviderManager extends ProviderManager {
+
+    /**
+     * @return
+     *         the list of providers that has been registered.
+     * @deprecated use {@link #getProviderFactories()} instead.
+     */
+    public List<String> getProviderNames();
+
+    /**
+     * Returns a list of providers that support all the
+     * provider types.
+     * 
+     * @param a
+     *            list of provider types, that are constants
+     *            defined in the {@link ExporttoSwingManager}.
+     * @return
+     *         the list of providers that has been registered.
+     * @deprecated use {@link #getProviderFactories(int[])} instead.
+     */
+    public List<String> getProviderNames(int[] providerTypes);
+
+    /**
+     * Returns all the available {@link ExporttoSwingProviderFactory}s.
+     * 
+     * @return all the available {@link ExporttoSwingProviderFactory}s
+     */
+    public List<ExporttoSwingProviderFactory> getProviderFactories();
+
+    /**
+     * Returns the {@link ExporttoSwingProviderFactory}s that support the
+     * given factory types.
+     * 
+     * @see ExporttoSwingManager#VECTORIAL_TABLE_WITH_GEOMETRY
+     * @see ExporttoSwingManager#VECTORIAL_TABLE_WITHOUT_GEOMETRY
+     * @param providerTypes
+     *            the types of factories
+     * @return the list of factories for the given factory types
+     */
+    public List<ExporttoSwingProviderFactory> getProviderFactories(
+        int[] providerTypes);
+
+    /**
+     * Returns the description for a concrete provider
+     * 
+     * @param providerName
+     *            the exportto provider.
+     * @return
+     *         the description of the provider.
+     */
+    public String getDescription(String providerName);
+
+    /**
+     * Return if a provider supports a data type.
+     * 
+     * @param providerName
+     *            the provider name.
+     * @param providerType
+     *            the provider type. One of the constants defined in the
+     *            {@link ExporttoSwingManager}.
+     * @return
+     *         if the provider supports a dataType.
+     * @throws ServiceException
+     */
+    public boolean support(String providerName, int providerType)
+        throws ServiceException;
+
+    /**
+     * Creates a {@link ExporttoSwingProvider} that is used to export a
+     * {@link FeatureSet}.
+     * 
+     * @param providerName
+     *            the name of the provider that has to be created.
+     * @param featureStore
+     *            the source feature store. It can be used to fix some
+     *            parameters like the {@link FeatureType} of the destination
+     *            {@link FeatureStore}.
+     * @param projection
+     *            the projection of the {@link OutputDeviceAssigned} store.
+     * @return
+     *         a provider that has to be used to export a {@link FeatureSet}.
+     */
+    public ExporttoSwingProvider createExporttoSwingProvider(
+        String providerName, FeatureStore featureStore, IProjection projection)
+        throws ServiceException;
+    
+    
+    /**
+     * Creates a {@link ExporttoSwingProvider} that is used to export a
+     * {@link FeatureSet}.
+     * 
+     * @param providerName
+     *            the name of the provider that has to be created.
+     * @param vlayer
+     *            the source vector layer
+     * @return
+     *         a provider that has to be used to export a {@link FeatureSet}.
+     */
+    public ExporttoSwingProvider createExporttoSwingProvider(
+        String providerName, FLyrVect vlayer)
+        throws ServiceException;    
+
+    /**
+     * Returns if the provider whose factory is provided is enabled.
+     * 
+     * @param factory
+     *            of the provider to check
+     * @return if the provider whose factory is provided is enabled
+     */
+    public boolean isProviderEnabled(ExporttoSwingProviderFactory factory);
+
+    /**
+     * Enables or disables an exportto provider.
+     * 
+     * @param factory
+     *            of the provider to enable or disable
+     * @param value
+     *            if the provider must be enabled or disabled
+     */
+    public void enableProvider(ExporttoSwingProviderFactory factory,
+        boolean value);
+
+    /**
+     * Returns the provider factory with the given name.
+     * 
+     * @param name
+     *            of the provider
+     * @return the provider factory
+     * @throws ServiceException
+     *             if there is an error getting the provider factory
+     */
+    public ExporttoSwingProviderFactory getExporttoSwingProviderFactory(
+        String name) throws ServiceException;
+
+    /**
+     * Creates a preferences component to manage the export to properties.
+     * 
+     * @return a preferences component
+     */
+    public ExporttoSwingPreferencesComponent createExporttoSwingProvidersPreferences();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProvider.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import org.gvsig.exportto.ExporttoService;
+
+/**
+ * A Exportto provider.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface ExporttoSwingProvider {
+
+    /**
+     * @return
+     *         the number of panels that are used por this provider.
+     */
+    public int getPanelCount();
+
+    /**
+     * A {@link ExporttoSwingProvider} are composed of a set of panels. This
+     * method
+     * is used to retrieve all these panels.
+     * 
+     * @param index
+     *            position of the panel to retrieve.
+     * @return
+     *         the panel that is in a concrete position.
+     */
+    public ExporttoSwingProviderPanel getPanelAt(int index);
+
+    /**
+     * @return a {@link ExporttoService} that has been initialized this
+     *         the values typed in the panels returned by this service.
+     */
+    public ExporttoService createExporttoService();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderPanel.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import javax.swing.JPanel;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ * The panels returned by a {@link ExporttoSwingProvider} have to
+ * implement this interface.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface ExporttoSwingProviderPanel extends Component {
+
+    /**
+     * @return
+     *         the panel title that will be displayed with
+     *         this panel.
+     */
+    public String getPanelTitle();
+
+    /**
+     * Checks if the panel is valid. If is not valid and throws
+     * an exception, the exception message is displayed and the
+     * user can not continue. If the return value is false,
+     * the user can not continue but any error message is shown
+     * to the user.
+     * 
+     * @return
+     *         if all the obligatory fields of the panel have been
+     *         filled.
+     * @throws ExporttoPanelValidationException
+     *             if there is any erro that has to be shown to the user.
+     */
+    public boolean isValidPanel() throws ExporttoPanelValidationException;
+    
+    public void enterPanel();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/AbstractExporttoProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/AbstractExporttoProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/AbstractExporttoProviderFactory.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Abstract parent class for {@link ExporttoSwingProviderFactory} implementation
+ * classes.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractExporttoProviderFactory implements
+    ExporttoSwingProviderFactory {
+
+    protected static final String PARAMETER_FEATURESTORE = "FeatureStore";
+    protected static final String PARAMETER_PROJECTION = "Projection";
+    
+    protected DynClass parametersDefinition;
+    protected int[] providerTypes = null;
+
+    /**
+     * Constructor.
+     * 
+     * @param providerTypes
+     *            supported provider types
+     */
+    public AbstractExporttoProviderFactory(int[] providerTypes) {
+        this.providerTypes = providerTypes;
+    }
+
+    public DynObject createParameters() {
+        return ToolsLocator.getDynObjectManager().createDynObject(
+            parametersDefinition);
+    }
+
+    public void initialize() {
+        parametersDefinition =
+            ToolsLocator.getDynObjectManager().createDynClass(getName(),
+                getDescription());
+        parametersDefinition.addDynField(PARAMETER_FEATURESTORE)
+            .setType(DataTypes.OBJECT).setMandatory(true)
+            .setClassOfValue(FeatureStore.class);
+        parametersDefinition.addDynField(PARAMETER_PROJECTION)
+            .setType(DataTypes.CRS).setMandatory(false);
+    }
+
+    public boolean support(int providerType) throws ServiceException {
+        for (int i = 0; i < providerTypes.length; i++) {
+            if (providerTypes[i] == providerType) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public String getDescription() {
+        return Messages.getText("general_exporter_description",
+            new String[] { getName() });
+    }
+
+    public String getLabel() {
+        return Messages.getText("general_exporter_label",
+            new String[] { getName() });
+    }
+
+    @Override
+    public String toString() {
+        return getLabel();
+    }
+
+    public boolean isEnabled() {
+        return ExporttoSwingProviderLocator.getManager().isProviderEnabled(this);
+    }
+
+    public void setEnabled(boolean value) {
+        ExporttoSwingProviderLocator.getManager().enableProvider(this, value);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/AbstractExporttoProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLocator.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This locator is the entry point for the Exporto library SPI, providing
+ * access to all Exporto provider services through the
+ * {@link ExporttoSwingProviderManager} .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoSwingProviderLocator extends BaseLocator {
+
+    /**
+     * Exporto provider manager name.
+     */
+    public static final String MANAGER_NAME = "Exporto.provider.manager";
+
+    /**
+     * Exporto provider manager description.
+     */
+    public static final String MANAGER_DESCRIPTION = "Exporto Manager";
+
+    private static final String LOCATOR_NAME = "Exporto.provider.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final ExporttoSwingProviderLocator INSTANCE =
+        new ExporttoSwingProviderLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static ExporttoSwingProviderLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name
+     * 
+     * @return a String with the Locator's name
+     */
+    public String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to the {@link ExporttoSwingProviderManager}
+     * 
+     * @return a reference to the {@link ExporttoSwingProviderManager}
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static ExporttoSwingProviderManager getManager()
+        throws LocatorException {
+        return (ExporttoSwingProviderManager) getInstance().get(MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the {@link ExporttoSwingProviderManager}
+     * interface.
+     * 
+     * @param clazz
+     *            implementing the {@link ExporttoSwingProviderManager}
+     *            interface
+     */
+    public static void registerManager(
+        Class<? extends ExporttoSwingProviderManager> clazz) {
+        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderServices.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * The provider for a {@link ExportoService}.
+ * 
+ * @see ExporttoSwingProviderManager
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface ExporttoSwingProviderServices extends ProviderServices {
+
+    /**
+     * Returns the parameters needed to provide a service.
+     * 
+     * @return a {@link DynObject} with the parameters needed by the provider to
+     *         do the service
+     */
+    // public DynObject getParameters();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLibrary.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.spi;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoSwingProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        Messages.addResourceFamily("org.gvsig.exportto.swing.spi.i18n.text",
+            ExporttoSwingProviderLibrary.class.getClassLoader(),
+            ExporttoSwingProviderLibrary.class.getClass().getName());
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        ExporttoSwingProviderManager manager =
+            ExporttoSwingProviderLocator.getManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                ExporttoSwingProviderLocator.MANAGER_NAME,
+                ExporttoSwingProviderLocator.getInstance());
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/java/org/gvsig/exportto/swing/spi/ExporttoSwingProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.spi.ExporttoSwingProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+general_exporter_description=Exporta al formato {0} 
+general_exporter_label=Formato {0}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+general_exporter_description=Exporter to the {0} format 
+general_exporter_label={0} format

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/main/resources/org/gvsig/exportto/swing/spi/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/test/java/org/gvsig/exportto/swing/prov/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/test/java/org/gvsig/exportto/swing/prov/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/test/java/org/gvsig/exportto/swing/prov/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider for tests.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/src/test/java/org/gvsig/exportto/swing/prov/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/pom.xml	(revision 42196)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+     <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+  </dependencies>
+</project>
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.spi
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/pom.xml	(revision 42196)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.api</artifactId>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>animal-sniffer-maven-plugin</artifactId>
+        <configuration>
+            <skip>true</skip>
+        </configuration>
+      </plugin>
+      
+    </plugins>
+  </build>
+
+  <modules>
+    <module>org.gvsig.exportto.swing.api</module>
+    <module>org.gvsig.exportto.swing.impl</module>
+    <module>org.gvsig.exportto.swing.spi</module>
+    <module>org.gvsig.exportto.swing.prov</module>
+  </modules>
+  
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/IconThemeHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/IconThemeHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/IconThemeHelper.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import java.awt.Image;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IconThemeHelper {
+
+	private static Logger logger = LoggerFactory.getLogger(IconThemeHelper.class);
+	
+	@SuppressWarnings("rawtypes")
+	public static void registerIcon(String group, String name, Object obj) {
+		String resourceName;
+		ClassLoader loader;
+		String provider; 
+		IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+		if( group == null || group.trim().length()==0 ) {
+			resourceName = "images/"+name+".png";
+		} else {
+			resourceName = "images/"+group+"/"+name+".png";
+		}
+		if( obj instanceof Class ) {
+			loader = ((Class) obj).getClassLoader();
+			provider = ((Class) obj).getName(); 
+		} else {
+			loader = obj.getClass().getClassLoader();
+			provider = obj.getClass().getName();
+		}
+		try {
+			iconTheme.registerDefault(provider, group, name, null, loader.getResource(resourceName));
+		} catch( Throwable e) {
+			logger.info(e.getMessage());
+		}
+	}
+
+	public static ImageIcon getImageIcon(String iconName) {
+		IconThemeManager manager = ToolsSwingLocator.getIconThemeManager();
+		return manager.getCurrent().get(iconName);
+	}
+	
+	public static Image getImage(String iconName) {
+		IconThemeManager manager = ToolsSwingLocator.getIconThemeManager();
+		return manager.getCurrent().get(iconName).getImage();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/IconThemeHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManager.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import javax.swing.JPanel;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.ExporttoLocator;
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.ExporttoWindowManager;
+import org.gvsig.exportto.swing.JExporttoServicePanel;
+import org.gvsig.exportto.swing.impl.panel.MessagePanel;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+import static org.gvsig.exportto.swing.impl.panel.MessagePanel.showMessage;
+
+/**
+ * Default implementation of the {@link ExporttoSwingManager}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoSwingManager implements ExporttoSwingManager {
+
+    private ExporttoManager manager;
+    // private I18nManager i18nmanager = null;
+    private ExporttoWindowManager windowManager;
+
+    public DefaultExporttoSwingManager() {
+        this.manager = ExporttoLocator.getManager();
+        // this.i18nmanager = ToolsLocator.getI18nManager();
+        this.windowManager = new DefaultExporttoWindowManager();
+    }
+
+    public JExporttoServicePanel createExportto(FeatureStore featureStore,
+        IProjection projection) {
+        JExporttoServicePanel panel =
+            new DefaultJExporttoServicePanel(this, featureStore, projection,
+                null, new int[0]);
+        return panel;
+    }
+
+    public JExporttoServicePanel createExportto(FeatureStore featureStore,
+        IProjection projection,
+        ExporttoServiceFinishAction exporttoServiceFinishAction) {
+        JExporttoServicePanel panel =
+            new DefaultJExporttoServicePanel(this, featureStore, projection,
+                exporttoServiceFinishAction, new int[0]);
+        return panel;
+    }
+
+    public JExporttoServicePanel createExportto(FeatureStore featureStore,
+        IProjection projection,
+        ExporttoServiceFinishAction exporttoServiceFinishAction,
+        int[] providerTypes) {
+        return new DefaultJExporttoServicePanel(this, featureStore, projection,
+            exporttoServiceFinishAction, providerTypes);
+    }
+    
+    public JExporttoServicePanel createExportto(FLyrVect vlayer,
+        ExporttoServiceFinishAction exporttoServiceFinishAction,
+        int[] providerTypes) {
+        
+        return new DefaultJExporttoServicePanel(this, vlayer,
+            exporttoServiceFinishAction, providerTypes);
+    }
+    
+
+    public ExporttoManager getManager() {
+        return this.manager;
+    }
+
+    public String getTranslation(String key) {
+        return Messages.getText(key);
+    }
+
+    public void registerWindowManager(ExporttoWindowManager manager) {
+        this.windowManager = manager;
+    }
+
+    public ExporttoWindowManager getWindowManager() {
+        return this.windowManager;
+    }
+
+    public void showMessage(String title, String header, String html, Feature feature) {
+        MessagePanel.showMessage(title, header, html, feature);
+    }
+
+    public void showMessage(String title, String header, Exception ex, Feature feature) {
+        MessagePanel.showMessage(title, header, ex, feature);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManager.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.gvsig.exportto.swing.ExporttoWindowManager;
+import org.gvsig.exportto.swing.JExporttoServicePanel;
+
+/**
+ * Default implementation for the {@link ExporttoWindowManager}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoWindowManager implements ExporttoWindowManager,
+    ComponentListener {
+
+    public void showWindow(JExporttoServicePanel panel, String title, int mode) {
+        JFrame frame = new JFrame();
+        // frame.setAlwaysOnTop(true);
+
+        final Dimension s = Toolkit.getDefaultToolkit().getScreenSize();
+        frame.setLocation(s.width / 4, s.height / 4);
+
+        frame.setLayout(new BorderLayout());
+        frame.setTitle(title);
+        frame.add(panel, BorderLayout.CENTER);
+
+        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+
+        panel.addComponentListener(this);
+
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+    public void componentHidden(ComponentEvent componentEvent) {
+        JFrame frame =
+            (JFrame) ((JPanel) componentEvent.getSource()).getRootPane()
+                .getParent();
+        frame.setVisible(false);
+        frame.dispose();
+    }
+
+    public void componentMoved(ComponentEvent arg0) {
+        // Do nothing
+    }
+
+    public void componentResized(ComponentEvent arg0) {
+        // Do nothing
+    }
+
+    public void componentShown(ComponentEvent arg0) {
+        // Do nothing
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exportto package documentation</title>
+</head>
+<body>
+
+	<p>Exportto swing library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/MessagePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/MessagePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/MessagePanel.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.panel;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.UnknownHostException;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextPane;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.service.ServiceException;
+
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MessagePanel extends JPanel {
+
+    private static Logger logger = LoggerFactory.getLogger(MessagePanel.class);
+
+    private static final long serialVersionUID = 2579894035021915221L;
+
+    private JButton accept = null;
+    private JTextPane text = null;
+
+    public static void showMessage(String title,
+            String header, String html, Feature feature) {
+        JPanel panel = new MessagePanel(header, html, feature);
+        WindowManager wm = ToolsSwingLocator.getWindowManager();
+        wm.showWindow(panel, title, WindowManager.MODE.DIALOG);
+    }
+
+    public static void showMessage(String title,
+            String header, Exception ex, Feature feature) {
+        showMessage(title, header, getMessageAsHTML(ex), feature);
+    }
+
+    private static class ExceptionIterator implements Iterator {
+
+        Throwable exception;
+
+        ExceptionIterator(Throwable exception) {
+            this.exception = exception;
+        }
+
+        public boolean hasNext() {
+            return this.exception != null;
+        }
+
+        public Object next() {
+            Throwable exception = this.exception;
+            this.exception = exception.getCause();
+            return exception;
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    private static String getMessageAsHTML(Exception ex) {
+        Iterator exceptions = new ExceptionIterator(ex);
+        StringBuilder html = new StringBuilder();
+        String lastmsg = "";
+
+        html.append("<ul>\n");
+        while (exceptions.hasNext()) {
+            Throwable ex1 = ((Throwable) exceptions.next());
+            String message = null;
+            if (ex1 instanceof UnknownHostException) {
+                message = "Unknown Host " + ex1.getMessage();
+            } else {
+                message = ex1.getMessage();
+            }
+            if (message != null) {
+                if( !message.equalsIgnoreCase(lastmsg) ) {
+                    lastmsg = message;
+                    html.append("<li>");
+                    if (message.toLowerCase().contains(" create ")) {
+                        message = message.replaceFirst(" create ", "<br>\nCREATE ");
+                        message = message.replaceAll(",", ",<br>\n");
+                    } else if (message.toLowerCase().contains(" insert ")) {
+                        message = message.replaceFirst(" insert ", "<br>\nINSERT ");
+                        message = message.replaceAll(",", ",<br>\n");
+                    }
+                    html.append(message);
+                    html.append("</li>\n");
+                }
+            }
+        }
+        html.append("</ul>\n");
+        return html.toString();
+    }
+
+    public MessagePanel(final String header, final String html, Feature feature) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        this.setLayout(new BorderLayout());
+        this.setPreferredSize(new Dimension(500, 300));
+        this.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
+
+        JLabel headerlabel = new JLabel();
+        headerlabel.setText(header);
+
+        JTabbedPane tabs = new JTabbedPane();
+
+        text = new JTextPane();
+        text.setContentType("text/html");
+        text.setEditable(false);
+        text.setText(html);
+        text.setCaretPosition(0);
+
+        JScrollPane scrollPane = new JScrollPane(text);
+        scrollPane.setPreferredSize(new Dimension(500, 220));
+
+        tabs.addTab(i18nManager.getTranslation("_Problem"), scrollPane);
+        if (feature != null) {
+            try {
+                DynObject data = feature.getAsDynObject();
+                JDynForm form = DynFormLocator.getDynFormManager().createJDynForm(data);
+                form.setLayoutMode(form.USE_TABS);
+                tabs.addTab(i18nManager.getTranslation("_Row_values"), form.asJComponent());
+            } catch (ServiceException ex) {
+                logger.warn("Can't show feature associated with the problem.", ex);
+            }
+        }
+
+        accept = new JButton(i18nManager.getTranslation("_Accept"));
+        accept.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                setVisible(false);
+            }
+        });
+
+        JPanel buttonsPanel = new JPanel();
+        buttonsPanel.setLayout(new BoxLayout(buttonsPanel,
+                BoxLayout.LINE_AXIS));
+        buttonsPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+        buttonsPanel.add(Box.createHorizontalGlue());
+        buttonsPanel.add(accept);
+
+        this.add(headerlabel, BorderLayout.NORTH);
+        this.add(tabs, BorderLayout.CENTER);
+        this.add(buttonsPanel, BorderLayout.SOUTH);
+        this.setVisible(true);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/MessagePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanelLayout.java	(revision 42196)
@@ -0,0 +1,222 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.impl.panel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ExportFilterPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form ExportFilterPanelLayout
+     */
+    public ExportFilterPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        buttonGroup1 = new javax.swing.ButtonGroup();
+        buttonGroup2 = new javax.swing.ButtonGroup();
+        rdbAllRows = new javax.swing.JRadioButton();
+        rdbSelectedRows = new javax.swing.JRadioButton();
+        rdbFilteredRows = new javax.swing.JRadioButton();
+        lblName = new javax.swing.JLabel();
+        lblExpresion = new javax.swing.JLabel();
+        txtName = new javax.swing.JTextField();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        txtExpresion = new javax.swing.JTextArea();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        lstFilters = new javax.swing.JList();
+        butTest = new javax.swing.JButton();
+        lblHeader = new javax.swing.JLabel();
+        rdoUseSavedExpresion = new javax.swing.JRadioButton();
+        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        rdoUseNewExpresion = new javax.swing.JRadioButton();
+        filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        butFilterDialog = new javax.swing.JButton();
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        buttonGroup1.add(rdbAllRows);
+        rdbAllRows.setText("Todos los registros");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(rdbAllRows, gridBagConstraints);
+
+        buttonGroup1.add(rdbSelectedRows);
+        rdbSelectedRows.setText("Los registros seleccionados");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(rdbSelectedRows, gridBagConstraints);
+
+        buttonGroup1.add(rdbFilteredRows);
+        rdbFilteredRows.setText("Los registros que cumplan el critrio seleccionado");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(rdbFilteredRows, gridBagConstraints);
+
+        lblName.setText("Nombre de la expresion (opcinal)");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(lblName, gridBagConstraints);
+
+        lblExpresion.setText("Expresion");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 20;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(lblExpresion, gridBagConstraints);
+
+        txtName.setToolTipText("Type here the name of the expression if you want to save it, otherwise leave it blank"); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtName, gridBagConstraints);
+
+        txtExpresion.setColumns(20);
+        txtExpresion.setRows(5);
+        jScrollPane2.setViewportView(txtExpresion);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 22;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.1;
+        add(jScrollPane2, gridBagConstraints);
+
+        lstFilters.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+        jScrollPane1.setViewportView(lstFilters);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.4;
+        add(jScrollPane1, gridBagConstraints);
+
+        butTest.setText("Test");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 8;
+        gridBagConstraints.gridy = 24;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
+        add(butTest, gridBagConstraints);
+
+        lblHeader.setText("Indique que registros desea exportar");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
+        add(lblHeader, gridBagConstraints);
+
+        buttonGroup2.add(rdoUseSavedExpresion);
+        rdoUseSavedExpresion.setText("Usar una expresion guardada");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.gridwidth = 5;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(rdoUseSavedExpresion, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 12;
+        add(filler2, gridBagConstraints);
+
+        buttonGroup2.add(rdoUseNewExpresion);
+        rdoUseNewExpresion.setText("Nueva expresion");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.gridwidth = 5;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(rdoUseNewExpresion, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 10;
+        add(filler3, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 10;
+        gridBagConstraints.gridy = 0;
+        add(filler4, gridBagConstraints);
+
+        butFilterDialog.setText("Filtro");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 24;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
+        add(butFilterDialog, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected javax.swing.JButton butFilterDialog;
+    protected javax.swing.JButton butTest;
+    protected javax.swing.ButtonGroup buttonGroup1;
+    protected javax.swing.ButtonGroup buttonGroup2;
+    protected javax.swing.Box.Filler filler2;
+    protected javax.swing.Box.Filler filler3;
+    protected javax.swing.Box.Filler filler4;
+    protected javax.swing.JScrollPane jScrollPane1;
+    protected javax.swing.JScrollPane jScrollPane2;
+    protected javax.swing.JLabel lblExpresion;
+    protected javax.swing.JLabel lblHeader;
+    protected javax.swing.JLabel lblName;
+    protected javax.swing.JList lstFilters;
+    protected javax.swing.JRadioButton rdbAllRows;
+    protected javax.swing.JRadioButton rdbFilteredRows;
+    protected javax.swing.JRadioButton rdbSelectedRows;
+    protected javax.swing.JRadioButton rdoUseNewExpresion;
+    protected javax.swing.JRadioButton rdoUseSavedExpresion;
+    protected javax.swing.JTextArea txtExpresion;
+    protected javax.swing.JTextField txtName;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanel.java	(revision 42196)
@@ -0,0 +1,350 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+import javax.swing.DefaultListModel;
+import javax.swing.JOptionPane;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.exportto.ExporttoLocator;
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.swing.impl.DefaultJExporttoServicePanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExportFilterPanel extends ExportFilterPanelLayout {
+    private static final long serialVersionUID = -2450969034747572624L;
+    
+    private static final Logger logger = LoggerFactory.getLogger(ExportFilterPanel.class);
+
+    private FeatureStore store; 
+    
+    public ExportFilterPanel(DefaultJExporttoServicePanel exporttoServicePanel) {
+        this.store = exporttoServicePanel.getFeatureStore();
+        this.initComponents();
+    }
+
+    private static class FilterItem {
+        private final String label;
+        private final String value;
+        public FilterItem(String label, String value) {
+            this.label=label;
+            this.value=value;
+        }
+        @Override
+        public String toString() {
+            return this.label;
+        }
+    }
+    
+    private void initComponents() {
+        ExporttoManager manager = ExporttoLocator.getManager();
+        
+        DefaultListModel model = new DefaultListModel();
+        Iterator filterNames = manager.getPredefinedFilters();
+        while( filterNames.hasNext() ) {
+            String name = (String) filterNames.next();
+            String expresion = manager.getFilter(name);
+            model.addElement(new FilterItem(name, expresion));
+        }
+        this.lstFilters.setModel(model);
+        this.lstFilters.addListSelectionListener(new ListSelectionListener() {
+            public void valueChanged(ListSelectionEvent lse) {
+                doSelectFilter();
+            }
+        });
+        
+        ActionListener changeOptionAction = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                doChangeOption();
+            }
+        };
+        this.rdbAllRows.addActionListener(changeOptionAction);
+        this.rdbFilteredRows.addActionListener(changeOptionAction);
+        this.rdbSelectedRows.addActionListener(changeOptionAction);
+        this.rdoUseNewExpresion.addActionListener(changeOptionAction);
+        this.rdoUseSavedExpresion.addActionListener(changeOptionAction);
+        
+        this.butTest.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                doTest();
+            }
+        });
+        this.rdbAllRows.setSelected(true);
+        doChangeOption();
+        this.butFilterDialog.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                doShowFilterDialog();
+            }
+        });
+        this.translate();
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.rdbAllRows.setText(i18nManager.getTranslation("_Todos_los_registros"));
+        this.rdbSelectedRows.setText(i18nManager.getTranslation("_Los_registros_seleccionados"));
+        this.rdbFilteredRows.setText(i18nManager.getTranslation("_Los_registros_que_cumplan_el_critrio_seleccionado"));
+        this.lblName.setText(i18nManager.getTranslation("_Nombre_de_la_expresion_opcinal"));
+        this.lblExpresion.setText(i18nManager.getTranslation("_Expresion"));
+        this.txtName.setToolTipText(i18nManager.getTranslation("_Type_here_the_name_of_the_expression_if_you_want_to_save_it_otherwise_leave_it_blank"));
+        this.butTest.setText(i18nManager.getTranslation("_Test"));
+        this.lblHeader.setText(i18nManager.getTranslation("_Indique_que_registros_desea_exportar"));
+        this.rdoUseSavedExpresion.setText(i18nManager.getTranslation("_Usar_una_expresion_guardada"));
+        this.rdoUseNewExpresion.setText(i18nManager.getTranslation("_Nueva_expresion"));
+        this.butFilterDialog.setText(i18nManager.getTranslation("_Filtro"));        
+    }
+    
+    private void doShowFilterDialog() {
+        
+    }
+
+    protected void doSelectFilter() {
+        FilterItem item = (FilterItem) this.lstFilters.getSelectedValue();
+        if( item!=null ) {
+            this.txtExpresion.setText(item.value);
+            this.txtName.setText(item.label);
+        }
+    }
+    
+    private static class Data implements EvaluatorData {
+        private final DynObject data;
+        
+        public Data(DynObject data) {
+            this.data = data;
+        }
+        public Object getDataValue(String name) {
+            if( this.data.getDynClass().getDynField(name)!=null ) {
+                return this.data.getDynValue(name);
+            }
+            if( "defaultgeometry".equalsIgnoreCase(name) ) {
+                // FIXME: deberia crear una geometris de agun tipo
+                return null;
+            }
+            throw new RuntimeException("Identifier '"+name+"'not defined.");
+        }
+
+        public Object getContextValue(String name) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public Iterator getDataValues() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public Iterator getDataNames() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean hasDataValue(String name) {
+            if( "defaultgeometry".equalsIgnoreCase(name) ) {
+                return true;
+            }
+            return  this.data.hasDynValue(name);
+        }
+
+        public boolean hasContextValue(String name) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+    }
+            
+    protected void doTest() {
+        try {
+            this.checkPanel(false);
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            JOptionPane.showMessageDialog(this,
+                    i18nManager.getTranslation("_Expresion_correcta"),
+                    i18nManager.getTranslation("_Filter"),
+                    JOptionPane.INFORMATION_MESSAGE
+            );
+        } catch (NotContinueWizardException ex) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            JOptionPane.showMessageDialog(this,
+                    ex.getMessage(), 
+                    i18nManager.getTranslation("_Warning"),
+                    JOptionPane.WARNING_MESSAGE
+            );
+        }
+    }
+    
+    protected void doChangeOption(){
+        if( this.rdbFilteredRows.isSelected() ) {
+            this.rdoUseNewExpresion.setEnabled(true);
+            this.rdoUseSavedExpresion.setEnabled(true);
+        
+            if( this.rdoUseSavedExpresion.isSelected() ) {
+                this.lstFilters.setEnabled(true);
+                this.txtName.setEnabled(false);
+                this.txtExpresion.setEnabled(false);
+                this.butTest.setEnabled(false);
+                this.butFilterDialog.setEnabled(false);
+            } else {
+                this.rdoUseNewExpresion.setSelected(false);
+                
+                this.lstFilters.setEnabled(false);
+                this.txtName.setEnabled(true);
+                this.txtExpresion.setEnabled(true);
+                this.butTest.setEnabled(true);
+                this.butFilterDialog.setEnabled(true);
+            }
+
+        } else if( this.rdbSelectedRows.isSelected() ) {
+            this.lstFilters.setEnabled(false);
+            this.txtName.setEnabled(false);
+            this.txtExpresion.setEnabled(false);
+            this.butTest.setEnabled(false);
+            this.butFilterDialog.setEnabled(false);
+            this.rdoUseNewExpresion.setEnabled(false);
+            this.rdoUseSavedExpresion.setEnabled(false);
+
+        } else {
+            this.rdbAllRows.setSelected(true);
+            
+            this.lstFilters.setEnabled(false);
+            this.txtName.setEnabled(false);
+            this.txtExpresion.setEnabled(false);
+            this.butTest.setEnabled(false);
+            this.butFilterDialog.setEnabled(false);
+            this.rdoUseNewExpresion.setEnabled(false);
+            this.rdoUseSavedExpresion.setEnabled(false);
+            
+        }
+    } 
+    
+    public boolean isFullLayerSelected() {
+        return this.rdbAllRows.isSelected();
+    }
+
+    public boolean isSelectedFeaturesSelected() {
+        return this.rdbSelectedRows.isSelected();
+    }
+
+    public boolean isPersonalizedFilterSelected() {
+        return this.rdbFilteredRows.isSelected();
+    }
+
+    public void checkPanel()  throws NotContinueWizardException {
+        checkPanel(true);
+    }
+    
+    public void checkPanel(boolean save)  throws NotContinueWizardException {
+        if( this.rdbFilteredRows.isSelected() ) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            String expresion = this.getFilterExpresion();
+            if( expresion == null ) {
+                throw new NotContinueWizardException(
+                        i18nManager.getTranslation("_The_expresion_is_empty_Check_other_option_or_enter_a_expresion"), 
+                        this, true
+                );
+            }
+            Evaluator filter = this.getFilter();
+            if( filter == null ) {
+                throw new NotContinueWizardException(
+                        i18nManager.getTranslation("_Problems_compiling_the_expesion_Check_the_sintax_Remember_use_SQL_expresion_sintax"), 
+                        this, true
+                );
+            }
+            DynObjectManager dynobjmanager = ToolsLocator.getDynObjectManager();
+            try {
+                DynObject values = dynobjmanager.createDynObject(this.store.getDefaultFeatureType());
+                filter.evaluate(new Data(values));
+            } catch (EvaluatorException ex) {
+                throw new NotContinueWizardException(
+                        i18nManager.getTranslation("_Check_the_sintax_Remember_use_SQL_expresion_sintax")
+                        + "\n"
+                        + ex.getCause().getMessage(), 
+                        this, true
+                );
+            } catch (DataException ex) {
+                logger.warn("Can't test expresion",ex);
+                throw new NotContinueWizardException(
+                        i18nManager.getTranslation("_Problems_to_create_a_data_set_to_test_the_expresion_See_register_for_more_information"), 
+                        this, true
+                );
+            }
+            if( save ) {
+                String filterName = this.getFilterName();
+                if( filterName!=null ) {
+                    ExporttoManager manager = ExporttoLocator.getManager();
+                    manager.addFilter(filterName, expresion);
+                }
+            }
+        }
+    }
+
+    public Evaluator getFilter() {
+        String filter = this.getFilterExpresion();
+        if( filter == null ) {
+            return null;
+        }
+        DataManager datamanager = DALLocator.getDataManager();
+        try {
+            Evaluator evaluator = datamanager.createExpresion(filter);
+            return evaluator;
+        } catch (InitializeException ex) {
+            // Error de sintaxis en la expresion ???
+            return null;
+        }
+    }
+
+    public String getFilterExpresion() {
+        String s = this.txtExpresion.getText();
+        if( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.trim();
+    }
+
+    public String getFilterName() {
+        String s = this.txtName.getText();
+        if( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.trim();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFilterPanelLayout.form	(revision 42196)
@@ -0,0 +1,1730 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.ButtonGroup" name="buttonGroup1">
+    </Component>
+    <Component class="javax.swing.ButtonGroup" name="buttonGroup2">
+    </Component>
+  </NonVisualComponents>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-117,0,0,1,-89"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JRadioButton" name="rdbAllRows">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Todos los registros"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdbSelectedRows">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Los registros seleccionados"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdbFilteredRows">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Los registros que cumplan el critrio seleccionado"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Nombre de la expresion (opcinal)"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="16" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblExpresion">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Expresion"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="20" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtName">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value="Type here the name of the expression if you want to save it, otherwise leave it blank" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="18" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="23" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="22" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="txtExpresion">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="12" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.4"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="lstFilters">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="0"/>
+            </Property>
+            <Property name="selectionMode" type="int" value="0"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JButton" name="butTest">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Test"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="8" gridY="24" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Indique que registros desea exportar"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="23" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdoUseSavedExpresion">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup2"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Usar una expresion guardada"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="5" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="12" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdoUseNewExpresion">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup2"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Nueva expresion"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="14" gridWidth="5" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler3">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler4">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="10" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butFilterDialog">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Filtro"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="24" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12_rdbAllRows">
+          <CodeVariable name="rdbAllRows" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdbAllRows"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="13_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20_rdbSelectedRows">
+          <CodeVariable name="rdbSelectedRows" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdbSelectedRows"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="13_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="21_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28_rdbFilteredRows">
+          <CodeVariable name="rdbFilteredRows" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdbFilteredRows"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="21_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="29_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36_lblName">
+          <CodeVariable name="lblName" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="29_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="37_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43_lblExpresion">
+          <CodeVariable name="lblExpresion" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblExpresion"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="37_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="44_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="23"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51_txtName">
+          <CodeVariable name="txtName" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="44_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="52_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="52_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="52_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="52_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="52_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="52_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="52_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="52_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="58">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59_jScrollPane2">
+          <CodeVariable name="jScrollPane2" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="52_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="60_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="63">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="double" value="0.4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67_jScrollPane1">
+          <CodeVariable name="jScrollPane1" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="60_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="68_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="69">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70">
+          <ExpressionOrigin>
+            <Value type="int" value="24"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72_butTest">
+          <CodeVariable name="butTest" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butTest"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="68_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="73_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="77">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78">
+          <ExpressionOrigin>
+            <Value type="int" value="23"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="79_lblHeader">
+          <CodeVariable name="lblHeader" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="73_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="80_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="82">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="83">
+          <ExpressionOrigin>
+            <Value type="int" value="5"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="84">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="85_rdoUseSavedExpresion">
+          <CodeVariable name="rdoUseSavedExpresion" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdoUseSavedExpresion"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="80_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="86_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="86_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="86_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="87">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="86_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="88">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="89_filler2">
+          <CodeVariable name="filler2" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="86_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="90_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="91">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="92">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="93">
+          <ExpressionOrigin>
+            <Value type="int" value="5"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="90_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="94">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="95_rdoUseNewExpresion">
+          <CodeVariable name="rdoUseNewExpresion" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdoUseNewExpresion"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="90_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="96_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="96_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="96_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="97">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="96_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="98">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="99_filler3">
+          <CodeVariable name="filler3" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="96_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="100_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="101">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="100_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="102">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="103_filler4">
+          <CodeVariable name="filler4" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler4"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="100_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="104_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="104_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="104_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="105">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="104_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="106">
+          <ExpressionOrigin>
+            <Value type="int" value="24"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="104_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="107">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="108_butFilterDialog">
+          <CodeVariable name="butFilterDialog" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butFilterDialog"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="104_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFiltersListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFiltersListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFiltersListModel.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.panel;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ListModel;
+import javax.swing.event.ListDataListener;
+
+import org.gvsig.exportto.ExporttoLocator;
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.swing.impl.DefaultJExporttoServicePanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExportFiltersListModel implements ListModel {
+
+    private static final ExporttoManager EXPORTTO_MANAGER = ExporttoLocator
+        .getManager();
+    @SuppressWarnings("rawtypes")
+    private List filters = null;
+    protected DefaultJExporttoServicePanel exporttoServicePanel = null;
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    public ExportFiltersListModel(
+        DefaultJExporttoServicePanel exporttoServicePanel) {
+        super();
+        this.exporttoServicePanel = exporttoServicePanel;
+        filters = new ArrayList();
+        Iterator it = EXPORTTO_MANAGER.getPredefinedFilters();
+        while (it.hasNext()) {
+            filters.add(new Filter((String) it.next()));
+        }
+    }
+
+    public int getSize() {
+        return filters.size();
+    }
+
+    public Object getElementAt(int index) {
+        return filters.get(index);
+    }
+
+    public void addListDataListener(ListDataListener l) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeListDataListener(ListDataListener l) {
+        // TODO Auto-generated method stub
+
+    }
+
+    class Filter {
+
+        private String filterKey;
+        private String filterTanslation;
+
+        public Filter(String filterKey) {
+            super();
+            this.filterKey = filterKey;
+            this.filterTanslation =
+                exporttoServicePanel.getExporttoSwingManager().getTranslation(
+                    filterKey);
+        }
+
+        /**
+         * @return the filterKey
+         */
+        public String getFilterKey() {
+            return filterKey;
+        }
+
+        public String toString() {
+            return filterTanslation;
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExportFiltersListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/AbstractExporttoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/AbstractExporttoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/AbstractExporttoPanel.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.panel;
+
+import javax.swing.JPanel;
+
+import org.gvsig.exportto.swing.impl.DefaultJExporttoServicePanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class AbstractExporttoPanel extends JPanel {
+
+    private static final long serialVersionUID = 2272211580987136370L;
+    protected DefaultJExporttoServicePanel exporttoServicePanel = null;
+
+    public AbstractExporttoPanel(
+        DefaultJExporttoServicePanel exporttoServicePanel) {
+        super();
+        this.exporttoServicePanel = exporttoServicePanel;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/AbstractExporttoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExporterSelectionListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExporterSelectionListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExporterSelectionListModel.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.panel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.ListModel;
+import javax.swing.event.ListDataListener;
+
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderManager;
+
+/**
+ * {@link ListModel} with the list of exportto provider factories.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporterSelectionListModel implements ListModel {
+
+    private List<ExporttoSwingProviderFactory> exporters = null;
+
+    public ExporterSelectionListModel(int[] providerTypes) {
+        super();
+        ExporttoSwingProviderManager exporttoProviderManager =
+            ExporttoSwingProviderLocator.getManager();
+        List<ExporttoSwingProviderFactory> allExporters =
+            exporttoProviderManager.getProviderFactories(providerTypes);
+        exporters = new ArrayList<ExporttoSwingProviderFactory>();
+        for (int i = 0; i < allExporters.size(); i++) {
+            ExporttoSwingProviderFactory factory = allExporters.get(i);
+            if (factory.isEnabled()) {
+                exporters.add(factory);
+            }
+        }
+    }
+
+    public int getSize() {
+        return exporters.size();
+    }
+
+    public Object getElementAt(int index) {
+        return exporters.get(index);
+    }
+
+    public void addListDataListener(ListDataListener l) {
+        // Nothing to do
+    }
+
+    public void removeListDataListener(ListDataListener l) {
+        // Nothing to do
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ExporterSelectionListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ProviderSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ProviderSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ProviderSelectionPanel.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.exportto.swing.impl.DefaultJExporttoServicePanel;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ProviderSelectionPanel extends AbstractExporttoPanel {
+
+    private static final long serialVersionUID = -5887438468358948411L;
+
+    protected JList exporttoProviderList = null;
+    private JScrollPane scrollPane = null;
+    private JScrollPane descriptionScrollPane;
+    protected JTextArea descriptionText;
+    private int[] providerTypes;
+
+    public ProviderSelectionPanel(
+        DefaultJExporttoServicePanel exporttoServicePanel, int[] providerTypes) {
+        super(exporttoServicePanel);
+        this.providerTypes = providerTypes;
+        initializeComponents();
+    }
+
+    private void initializeComponents() {
+        GridBagConstraints gridBagConstraints;
+        this.setLayout(new GridBagLayout());
+
+        // Create the list
+        exporttoProviderList = new JList();
+        exporttoProviderList.setModel(new ExporterSelectionListModel(
+            providerTypes));
+
+        scrollPane = new JScrollPane();
+        scrollPane.setViewportView(exporttoProviderList);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(2, 2, 5, 2);
+        add(scrollPane, gridBagConstraints);
+
+        // Create the description area
+        descriptionScrollPane = new javax.swing.JScrollPane();
+        descriptionText = new javax.swing.JTextArea();
+
+        descriptionText.setColumns(20);
+        descriptionText.setEditable(false);
+        descriptionText.setRows(5);
+        descriptionText.setLineWrap(true);
+        descriptionText.setBorder(null);
+        descriptionScrollPane.setBorder(null);
+        descriptionScrollPane.setViewportView(descriptionText);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(5, 2, 2, 2);
+        add(descriptionScrollPane, gridBagConstraints);
+    }
+
+    protected ExporttoSwingProviderFactory getSelectedProvider() {
+        return (ExporttoSwingProviderFactory) exporttoProviderList
+            .getSelectedValue();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/panel/ProviderSelectionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderServices.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderServices;
+import org.gvsig.tools.service.spi.AbstractProviderServices;
+
+/**
+ * Default {@link ExportoProviderServices} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoSwingProviderServices extends
+    AbstractProviderServices implements ExporttoSwingProviderServices {
+
+    public DefaultExporttoSwingProviderServices() {
+        // Nothing to do
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServiceInfoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServiceInfoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServiceInfoPanel.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+
+/**
+ * Panel to show info (text and cookie date) about a Exportto.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultJExporttoServiceInfoPanel extends JPanel {
+
+    private static final long serialVersionUID = 2965442763236823977L;
+
+    protected JButton accept = null;
+
+    public DefaultJExporttoServiceInfoPanel(ExporttoSwingManager uimanager,
+        ExporttoService cookie) {
+
+        this.setLayout(new BorderLayout());
+        this.setPreferredSize(new Dimension(550, 150));
+
+        JTextArea text = new JTextArea();
+        // try {
+        // text.setText("Message: " + cookie.getMessage() + "\nDate: "
+        // + cookie.getDate());
+        // } catch (ExporttoServiceException e) {
+        // text.setText(uimanager
+        // .getTranslation("Error obtaining message....."));
+        // LOG.error("Error getting the Exportto message", e);
+        // }
+        text.setEditable(false);
+
+        JScrollPane scrollPane = new JScrollPane(text);
+        scrollPane.setPreferredSize(new Dimension(550, 150));
+
+        // TODO: replace with the UsabilitySwingManager.createJButton()
+        accept = new JButton(uimanager.getTranslation("Accept"));
+
+        JPanel optionsPane = new JPanel();
+        optionsPane.setLayout(new BoxLayout(optionsPane, BoxLayout.LINE_AXIS));
+        optionsPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+        optionsPane.add(Box.createHorizontalGlue());
+
+        accept.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent arg0) {
+                setVisible(false);
+            }
+        });
+        optionsPane.add(accept);
+        optionsPane.add(Box.createRigidArea(new Dimension(10, 0)));
+
+        this.add(scrollPane, BorderLayout.CENTER);
+        this.add(optionsPane, BorderLayout.SOUTH);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServiceInfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/DefaultWizardContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/DefaultWizardContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/DefaultWizardContainer.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.wizard;
+
+import javax.swing.JPanel;
+import org.gvsig.exportto.swing.impl.panel.MessagePanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class DefaultWizardContainer implements OptionPanel {
+
+    private static final Logger LOG = LoggerFactory
+            .getLogger(DefaultWizardContainer.class);
+
+    private ExporttoSwingProviderPanel exporttoSwingProviderPanel = null;
+
+    public DefaultWizardContainer(
+            ExporttoSwingProviderPanel exporttoSwingProviderPanel) {
+        super();
+        this.exporttoSwingProviderPanel = exporttoSwingProviderPanel;
+    }
+
+    public String getPanelTitle() {
+        return exporttoSwingProviderPanel.getPanelTitle();
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        try {
+            if (!this.exporttoSwingProviderPanel.isValidPanel()) {
+                throw new NotContinueWizardException(
+                        Messages.getText("_Invalid_values_in_form"),
+                        exporttoSwingProviderPanel.asJComponent(),
+                        false);
+            }
+        } catch (ExporttoPanelValidationException e) {
+            LOG.info("Invalid form values.");
+            throw new NotContinueWizardException(
+                    Messages.getText("_Invalid_values_in_form"),
+                    e, exporttoSwingProviderPanel.asJComponent());
+        }
+    }
+
+    public void lastPanel() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void updatePanel() {
+        try {
+            this.exporttoSwingProviderPanel.enterPanel();
+        } catch (Exception ex) {
+            LOG.warn("Fail the call to enterPanel.", ex);
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            MessagePanel.showMessage(
+                    i18nManager.getTranslation("_Warning"),
+                    i18nManager.getTranslation("_There_have_been_problems_filling_data_in_panel") +
+                            " (" + this.exporttoSwingProviderPanel.getPanelTitle() +")" ,
+                    ex,
+                    null
+            );
+        }
+    }
+
+    public JPanel getJPanel() {
+        return (JPanel) exporttoSwingProviderPanel.asJComponent();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/DefaultWizardContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExportFilterWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExportFilterWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExportFilterWizard.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.wizard;
+
+import javax.swing.JPanel;
+
+import org.gvsig.exportto.swing.impl.DefaultJExporttoServicePanel;
+import org.gvsig.exportto.swing.impl.panel.ExportFilterPanel;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExportFilterWizard extends ExportFilterPanel implements
+    OptionPanel {
+
+    private static final long serialVersionUID = 8801849211055890046L;
+    private DefaultJExporttoServicePanel exporttoServicePanel;
+
+    public ExportFilterWizard(DefaultJExporttoServicePanel exporttoServicePanel) {
+        super(exporttoServicePanel);
+        this.exporttoServicePanel = exporttoServicePanel;
+    }
+
+    public String getPanelTitle() {
+        return exporttoServicePanel.getExporttoSwingManager().getTranslation(
+            "exportto_options");
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        this.checkPanel();
+    }
+
+    public void lastPanel() {
+        exporttoServicePanel.setExportButtonEnabled(false);
+        exporttoServicePanel.setNextButtonEnabled(true);
+    }
+
+    public void updatePanel() {
+        exporttoServicePanel.setExportButtonEnabled(true);
+        exporttoServicePanel.setNextButtonEnabled(false);
+    }
+
+    public JPanel getJPanel() {
+        return this;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExportFilterWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporttoProgressWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporttoProgressWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporttoProgressWizard.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.wizard;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JPanel;
+
+import org.gvsig.exportto.swing.impl.DefaultJExporttoServicePanel;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.task.JTaskStatus;
+import org.gvsig.tools.swing.api.task.TaskStatusSwingManager;
+import org.gvsig.tools.task.TaskStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoProgressWizard extends JPanel implements OptionPanel {
+
+    private static final long serialVersionUID = 8235569247892299856L;
+    private static final TaskStatusSwingManager TASK_STATUS_SWING_MANAGER =
+        ToolsSwingLocator.getTaskStatusSwingManager();
+
+    private DefaultJExporttoServicePanel exporttoServicePanel = null;
+    private JTaskStatus jTaskStatus = null;
+
+    public ExporttoProgressWizard(
+        DefaultJExporttoServicePanel exporttoServicePanel) {
+        super();
+        this.exporttoServicePanel = exporttoServicePanel;
+        jTaskStatus = TASK_STATUS_SWING_MANAGER.createJTaskStatus();
+        this.setLayout(new BorderLayout());
+        this.add(jTaskStatus, BorderLayout.NORTH);
+    }
+
+    public String getPanelTitle() {
+        return exporttoServicePanel.getExporttoSwingManager().getTranslation(
+            "export_progress");
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void lastPanel() {
+        exporttoServicePanel.setCancelButtonText(exporttoServicePanel
+            .getExporttoSwingManager().getTranslation("cancel"));
+    }
+
+    public void updatePanel() {
+        exporttoServicePanel.setExportButtonEnabled(false);
+        exporttoServicePanel.setCancelButtonText(exporttoServicePanel
+            .getExporttoSwingManager().getTranslation("close"));
+    }
+
+    public JPanel getJPanel() {
+        return this;
+    }
+
+    public void bind(TaskStatus taskStatus) {
+        this.jTaskStatus.bind(taskStatus);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporttoProgressWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporterSelectionWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporterSelectionWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporterSelectionWizard.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.wizard;
+
+import javax.swing.JPanel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.impl.DefaultJExporttoServicePanel;
+import org.gvsig.exportto.swing.impl.panel.ProviderSelectionPanel;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderManager;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporterSelectionWizard extends ProviderSelectionPanel implements
+    OptionPanel, ListSelectionListener {
+
+    private static final long serialVersionUID = -2818813233378801919L;
+    private static final ExporttoSwingManager EXPORTTO_SWING_MANAGER =
+        ExporttoSwingLocator.getSwingManager();
+    private static final ExporttoSwingProviderManager EXPORTTO_SWING_PROVIDER_MANAGER =
+        ExporttoSwingProviderLocator.getManager();
+    private static final Logger LOG = LoggerFactory
+        .getLogger(ExporterSelectionWizard.class);
+
+    public ExporterSelectionWizard(
+        DefaultJExporttoServicePanel exporttoServicePanel, int[] providerTypes) {
+        super(exporttoServicePanel, providerTypes);
+        this.exporttoProviderList.addListSelectionListener(this);
+    }
+
+    public String getPanelTitle() {
+        return exporttoServicePanel.getExporttoSwingManager().getTranslation(
+            "select_format_to_export");
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        ExporttoSwingProviderFactory providerFactory = this.getSelectedProvider();
+
+        if (providerFactory != null) {
+            try {
+                exporttoServicePanel.selectExporttoSwingProvider(providerFactory);
+            } catch (ServiceException e) {
+                LOG.error("Not possible to create a exporto swing provider", e);
+                throw new NotContinueWizardException(
+                    EXPORTTO_SWING_MANAGER
+                        .getTranslation("execute_adding_error"),
+                    e, this);
+            }
+        }
+    }
+
+    public void lastPanel() {
+        // Nothing to do
+    }
+
+    public void updatePanel() {
+        // Nothing to do
+    }
+
+    public JPanel getJPanel() {
+        return this;
+    }
+
+    public void valueChanged(ListSelectionEvent e) {
+        ExporttoSwingProviderFactory providerFactory = this.getSelectedProvider();
+
+        if (providerFactory != null) {
+            descriptionText.setText(EXPORTTO_SWING_PROVIDER_MANAGER
+                .getDescription(providerFactory.getName()));
+
+            exporttoServicePanel.setNextButtonEnabled(true);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/wizard/ExporterSelectionWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/preferences/DefaultExporttoPreferencesComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/preferences/DefaultExporttoPreferencesComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/preferences/DefaultExporttoPreferencesComponent.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl.preferences;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.exportto.swing.preferences.ExporttoSwingPreferencesComponent;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+
+/**
+ * Default implementation for the {@link ExporttoSwingPreferencesComponent}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoPreferencesComponent extends JPanel implements
+    ExporttoSwingPreferencesComponent, ChangeListener {
+
+    private static final long serialVersionUID = -4392838062470171181L;
+
+    private JCheckBox[] providerChecks;
+    private List<ExporttoSwingProviderFactory> providers;
+    private boolean valueChanged = false;
+
+    /**
+     * Creates a new DefaultExporttoPreferencesComponent.
+     * 
+     * @see JPanel#JPanel()
+     */
+    public DefaultExporttoPreferencesComponent() {
+        this(true);
+    }
+
+    /**
+     * Creates a new DefaultExporttoPreferencesComponent.
+     * 
+     * @param isDoubleBuffered
+     *            a boolean, true for double-buffering, which
+     *            uses additional memory space to achieve fast, flicker-free
+     *            updates
+     * @see JPanel#JPanel(boolean)
+     */
+    public DefaultExporttoPreferencesComponent(boolean isDoubleBuffered) {
+        super(isDoubleBuffered);
+        initialize();
+    }
+
+    private void initialize() {
+        this.setLayout(new GridBagLayout());
+
+        Insets insets = new Insets(1, 0, 1, 0);
+
+        GridBagConstraints gbc = new GridBagConstraints();
+        gbc.gridx = 0;
+        gbc.gridy = 1;
+        gbc.gridheight = 1;
+        gbc.gridwidth = GridBagConstraints.REMAINDER;
+        gbc.fill = GridBagConstraints.NONE;
+        gbc.anchor = GridBagConstraints.WEST;
+        gbc.weightx = 1.0f;
+        gbc.insets = insets;
+
+        providers =
+            new ArrayList<ExporttoSwingProviderFactory>(
+                ExporttoSwingProviderLocator.getManager()
+                    .getProviderFactories());
+        providerChecks = new JCheckBox[providers.size()];
+        for (int i = 0; i < providers.size(); i++) {
+            ExporttoSwingProviderFactory factory = providers.get(i);
+            providerChecks[i] =
+                new JCheckBox(factory.getLabel(), factory.isEnabled());
+            providerChecks[i].addChangeListener(this);
+            providerChecks[i].setToolTipText(factory.getDescription());
+            add(providerChecks[i], gbc);
+            gbc.gridy++;
+        }
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public void initializeDefaults() {
+        for (int i = 0; i < providers.size(); i++) {
+            ExporttoSwingProviderFactory factory = providers.get(i);
+            providerChecks[i].setSelected(factory.isEnabled());
+        }
+        valueChanged = false;
+        validate();
+    }
+
+    public Set<?> getDisabledProviders() {
+        Set<ExporttoSwingProviderFactory> disabledFactories =
+            new HashSet<ExporttoSwingProviderFactory>();
+
+        for (int i = 0; i < providerChecks.length; i++) {
+            if (!providerChecks[i].isSelected()) {
+                disabledFactories.add(providers.get(i));
+            }
+        }
+
+        return disabledFactories;
+    }
+
+    public boolean isValueChanged() {
+        return valueChanged;
+    }
+
+    public void setChangesApplied() {
+        valueChanged = false;
+    }
+
+    public void stateChanged(ChangeEvent e) {
+        valueChanged = true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/preferences/DefaultExporttoPreferencesComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanel.java	(revision 42196)
@@ -0,0 +1,325 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+
+import jwizardcomponent.DefaultJWizardComponents;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.exportto.swing.JExporttoServicePanel;
+import org.gvsig.exportto.swing.JExporttoServicePanelListener;
+import org.gvsig.exportto.swing.impl.panel.MessagePanel;
+import org.gvsig.exportto.swing.impl.wizard.DefaultWizardContainer;
+import org.gvsig.exportto.swing.impl.wizard.ExportFilterWizard;
+import org.gvsig.exportto.swing.impl.wizard.ExporterSelectionWizard;
+import org.gvsig.exportto.swing.impl.wizard.ExporttoProgressWizard;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderManager;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * Default implementation for the {@link JExporttoServicePanel}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultJExporttoServicePanel extends JExporttoServicePanel
+    implements WizardPanel {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultJExporttoServicePanel.class);
+
+    private static final ExporttoSwingProviderManager EXPORTTO_SWING_PROVIDER_MANAGER =
+        ExporttoSwingProviderLocator.getManager();
+    private static final DataManager DATA_MANAGER = DALLocator.getDataManager();
+
+    private static final long serialVersionUID = -7026467582252285238L;
+
+    private FeatureStore featureStore;
+    private IProjection projection;
+    private FLyrVect vectorLayer = null;
+    private DefaultExporttoSwingManager uimanager;
+
+    // Used to get the new feature store parameters
+    private ExporttoSwingProvider exporttoSwingProvider;
+
+    // Provider types that will be displayed
+    private int[] providerTypes;
+
+    // Wizards used to create the main wizard
+    private ExporterSelectionWizard exporterSelectionWizard = null;
+    private ExportFilterWizard exportFilterWizard = null;
+    private ExporttoProgressWizard exporttoProgressWizard = null;
+
+    // Listener for the finish and cancell button
+    private WizardPanelActionListener exporttoServicePanelListener;
+
+    private WizardPanelWithLogo wizardPanelWithLogo = null;
+
+    // Action to execute at the end of the export process
+    ExporttoServiceFinishAction exporttoServiceFinishAction;
+
+    private int status;
+
+    public DefaultJExporttoServicePanel(DefaultExporttoSwingManager uimanager,
+        FLyrVect vlayer,
+        ExporttoServiceFinishAction exporttoServiceFinishAction,
+        int[] providerTypes) {
+        
+        this(
+            uimanager,
+            vlayer.getFeatureStore(),
+            vlayer.getProjection(),
+            exporttoServiceFinishAction,
+            providerTypes);
+        vectorLayer = vlayer;
+    }
+    
+    public DefaultJExporttoServicePanel(DefaultExporttoSwingManager uimanager,
+        FeatureStore featureStore, IProjection projection,
+        ExporttoServiceFinishAction exporttoServiceFinishAction,
+        int[] providerTypes) {
+        this.featureStore = featureStore;
+        this.projection = projection;
+        this.uimanager = uimanager;
+        this.exporttoServiceFinishAction = exporttoServiceFinishAction;
+        this.providerTypes = providerTypes;
+        this.status = JOptionPane.UNDEFINED_CONDITION;
+
+        ImageIcon ii = IconThemeHelper.getImageIcon("wizard-export-to"); 
+        wizardPanelWithLogo = new WizardPanelWithLogo(ii);
+
+        // Initialize the wizards
+        exporterSelectionWizard =
+            new ExporterSelectionWizard(this, providerTypes);
+        exportFilterWizard = new ExportFilterWizard(this);
+        exporttoProgressWizard = new ExporttoProgressWizard(this);
+
+        // Adding the wizards to the main wizard
+        wizardPanelWithLogo.addOptionPanel(exporterSelectionWizard);
+
+        // The finish button is called "export"
+        this.wizardPanelWithLogo.getWizardComponents().getFinishButton()
+            .setText(uimanager.getTranslation("export"));
+
+        this.setLayout(new BorderLayout());
+        this.add(wizardPanelWithLogo, BorderLayout.CENTER);
+
+        // Disable the nextbutton
+        setNextButtonEnabled(false);
+        setExportButtonEnabled(false);
+
+        // Set the listener for the finish and cancell events
+        this.wizardPanelWithLogo.setWizardListener(this);
+        this.setPreferredSize(new Dimension(700, 350));
+    }
+
+    public FeatureStore getFeatureStore() {
+        return this.featureStore;
+    }
+    
+    public void setNextButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setNextButtonEnabled(isEnabled);
+    }
+
+    public void setExportButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setFinishButtonEnabled(isEnabled);
+    }
+
+    public void setCancelButtonText(String text) {
+        wizardPanelWithLogo.getWizardComponents().getCancelButton()
+            .setText(text);
+    }
+
+    /**
+     * @return the uimanager
+     */
+    public DefaultExporttoSwingManager getExporttoSwingManager() {
+        return uimanager;
+    }
+
+    /**
+     * @param exporttoSwingProvider
+     * @throws ServiceException
+     */
+    public void selectExporttoSwingProvider(
+        ExporttoSwingProviderFactory provider)
+        throws ServiceException {
+        
+        if (vectorLayer == null) {
+            exporttoSwingProvider =
+                EXPORTTO_SWING_PROVIDER_MANAGER.createExporttoSwingProvider(
+                    provider.getName(), featureStore, projection);
+        } else {
+            exporttoSwingProvider =
+                EXPORTTO_SWING_PROVIDER_MANAGER.createExporttoSwingProvider(
+                    provider.getName(), vectorLayer);
+        }
+
+        DefaultJWizardComponents wizardComponents =
+            wizardPanelWithLogo.getWizardComponents();
+        for (int i = wizardComponents.getWizardPanelList().size() - 1; i >= 1; i--) {
+            wizardComponents.removeWizardPanel(i);
+        }
+        for (int i = 0; i < exporttoSwingProvider.getPanelCount(); i++) {
+            wizardPanelWithLogo.addOptionPanel(new DefaultWizardContainer(
+                exporttoSwingProvider.getPanelAt(i)));
+        }
+        wizardPanelWithLogo.addOptionPanel(exportFilterWizard);
+        wizardPanelWithLogo.addOptionPanel(exporttoProgressWizard);
+    }
+
+    public Dimension getPreferredSize() {
+        return new Dimension(800, 550);
+    }
+    
+    public void export() throws DataException, ExporttoServiceException {
+        this.lastWizard();
+
+        // Create the feature Set...
+        FeatureSet featureSet = null;
+        if ( exportFilterWizard.isFullLayerSelected() ) {
+            featureSet = featureStore.getFeatureSet();
+            
+        } else if ( exportFilterWizard.isSelectedFeaturesSelected() ) {
+            featureSet = (FeatureSet) featureStore.getSelection();
+            
+        } else {
+            Evaluator filter = exportFilterWizard.getFilter();
+            if( filter!=null ) {
+                FeatureQuery featureQuery = featureStore.createFeatureQuery();
+                featureQuery.setFilter(filter);
+                featureSet = featureStore.getFeatureSet(featureQuery);
+            }
+        }
+
+        Export export = new Export(featureSet);
+        export.start();
+    }
+
+    public void lastWizard() {
+        this.wizardPanelWithLogo.getWizardComponents().getNextButton()
+            .getActionListeners()[0].actionPerformed(null);
+    }
+
+    private class Export extends Thread {
+
+        private FeatureSet featureSet;
+
+        public Export(FeatureSet featureSet) {
+            super();
+            this.featureSet = featureSet;
+        }
+
+        public synchronized void run() {
+            ExporttoService exportService =
+                exporttoSwingProvider.createExporttoService();
+            exporttoProgressWizard.bind(exportService.getTaskStatus());
+            exportService.setFinishAction(exporttoServiceFinishAction);
+            String layerName = "(unknow)";
+            String layerFullName = "(unknow)";
+            try {
+                layerName = featureStore.getName();
+                layerFullName = featureStore.getFullName();
+                LOG.info("Exporting '"+layerName+"' using '"+exportService.getClass().getName()+"' ("+layerFullName+").");
+                ((SimpleTaskStatus)(exportService.getTaskStatus())).setTitle("Exporting "+layerName+"...");
+                exportService.export(featureSet);
+            } catch (ExporttoServiceException e) {
+                LOG.warn("Problems exporting the data (layer="+layerName+").", e);
+                showError(e);
+            } finally {
+                ((SimpleTaskStatus)(exportService.getTaskStatus())).terminate();
+            }
+        }
+    }
+
+    private void showError(ExporttoServiceException e) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        MessagePanel.showMessage(
+                i18nManager.getTranslation("_Warning"), 
+                i18nManager.getTranslation("_There_have_been_problems_exporting_data"), 
+                e, 
+                e.getFeature()
+        );
+    }
+
+    public void setWizardPanelActionListener(
+        WizardPanelActionListener wizardActionListener) {
+        this.exporttoServicePanelListener = wizardActionListener;
+    }
+
+    public WizardPanelActionListener getWizardPanelActionListener() {
+        if (exporttoServicePanelListener == null) {
+            exporttoServicePanelListener =
+                new DefaultJExporttoServicePanelListener(this);
+        }
+        return exporttoServicePanelListener;
+    }
+
+    @Override
+    public void setExporttoServicePanelListener(
+        JExporttoServicePanelListener exporttoServicePanelListener) {
+        ((DefaultJExporttoServicePanelListener) getWizardPanelActionListener())
+            .setExporttoServicePanelListener(exporttoServicePanelListener);
+    }
+
+    @Override
+    public int getStatus() {
+        return this.status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+        if( this.status == JOptionPane.CANCEL_OPTION ) {
+            this.setVisible(false);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderManager.java	(revision 42196)
@@ -0,0 +1,327 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.swing.impl.preferences.DefaultExporttoPreferencesComponent;
+import org.gvsig.exportto.swing.preferences.ExporttoSwingPreferencesComponent;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderManager;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.AbstractProviderManager;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderFactory;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultExporttoSwingProviderManager extends
+    AbstractProviderManager implements ExporttoSwingProviderManager {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultExporttoSwingProviderManager.class);
+
+    private static final String PROVIDERS_NAME = "Exportto.swing.providers";
+    private static final String PROVIDERS_DESCRIPTION =
+        "Exportto swing providers";
+
+    private static final String PARAMETER_FEATURESTORE = "FeatureStore";
+    private static final String PARAMETER_PROJECTION = "Projection";
+    private static final String PARAMETER_LAYER = "FLyrVect";
+
+    private Map<ExporttoSwingProviderFactory, Boolean> providerStatus;
+
+    public DefaultExporttoSwingProviderManager() {
+        super();
+        providerStatus = new HashMap<ExporttoSwingProviderFactory, Boolean>();
+    }
+
+    public ProviderServices createProviderServices(Service service) {
+        return new DefaultExporttoSwingProviderServices();
+    }
+
+    public List<String> getProviderNames() {
+        return getProviderNames(new int[0]);
+    }
+
+    public List<String> getProviderNames(int[] providerTypes) {
+        ExtensionPointManager extensionPointManager =
+            ToolsLocator.getExtensionPointManager();
+        ExtensionPoint extensionPoint =
+            extensionPointManager.get(this.getRegistryKey());
+        List<String> providers = new ArrayList<String>();
+        if (extensionPoint != null) {
+            @SuppressWarnings("unchecked")
+            Iterator<Extension> it = extensionPoint.iterator();
+            while (it.hasNext()) {
+                Extension extension = it.next();
+                try {
+                    ExporttoSwingProviderFactory exporttoSwingProviderFactory =
+                        (ExporttoSwingProviderFactory) extension.create();
+                    if (providerTypes.length == 0) {
+                        providers.add(exporttoSwingProviderFactory.getName());
+                    } else {
+                        boolean areSupported = true;
+                        for (int i = 0; i < providerTypes.length; i++) {
+                            if (!exporttoSwingProviderFactory
+                                .support(providerTypes[i])) {
+                                areSupported = false;
+                                break;
+                            }
+                        }
+                        if (areSupported) {
+                            providers.add(exporttoSwingProviderFactory
+                                .getName());
+                        }
+                    }
+                } catch (InstantiationException e) {
+                    LOG.error(
+                        "Not possible to create the exportto provider factory",
+                        e);
+                } catch (IllegalAccessException e) {
+                    LOG.error(
+                        "Not possible to create the exportto provider factory",
+                        e);
+                } catch (ServiceException e) {
+                    LOG.error(
+                        "Not possible to check if the provider support a format",
+                        e);
+                }
+            }
+        }
+        return providers;
+    }
+
+    public List<ExporttoSwingProviderFactory> getProviderFactories() {
+        return getProviderFactories(null);
+    }
+
+    public List<ExporttoSwingProviderFactory> getProviderFactories(
+        int[] providerTypes) {
+        ExtensionPointManager extensionPointManager =
+            ToolsLocator.getExtensionPointManager();
+        ExtensionPoint extensionPoint =
+            extensionPointManager.get(this.getRegistryKey());
+        List<ExporttoSwingProviderFactory> providers =
+            new ArrayList<ExporttoSwingProviderFactory>();
+        if (extensionPoint != null) {
+            @SuppressWarnings("unchecked")
+            Iterator<Extension> it = extensionPoint.iterator();
+            while (it.hasNext()) {
+                Extension extension = it.next();
+                try {
+                    ExporttoSwingProviderFactory exporttoSwingProviderFactory =
+                        (ExporttoSwingProviderFactory) extension.create();
+                    if (providerTypes == null || providerTypes.length == 0) {
+                        providers.add(exporttoSwingProviderFactory);
+                    } else {
+                        boolean areSupported = true;
+                        for (int i = 0; i < providerTypes.length; i++) {
+                            if (!exporttoSwingProviderFactory
+                                .support(providerTypes[i])) {
+                                areSupported = false;
+                                break;
+                            }
+                        }
+                        if (areSupported) {
+                            providers.add(exporttoSwingProviderFactory);
+                        }
+                    }
+                } catch (InstantiationException e) {
+                    LOG.error(
+                        "Not possible to create the exportto provider factory",
+                        e);
+                } catch (IllegalAccessException e) {
+                    LOG.error(
+                        "Not possible to create the exportto provider factory",
+                        e);
+                } catch (ServiceException e) {
+                    LOG.error(
+                        "Not possible to check if the provider support a format",
+                        e);
+                }
+            }
+        }
+        return providers;
+    }
+
+    protected String getRegistryDescription() {
+        return PROVIDERS_DESCRIPTION;
+    }
+
+    protected String getRegistryKey() {
+        return PROVIDERS_NAME;
+    }
+
+    public ExporttoSwingProvider createExporttoSwingProvider(
+        String providerName, FeatureStore featureStore, IProjection projection)
+        throws ServiceException {
+        DynObject serviceParameters = createServiceParameters(providerName);
+        serviceParameters.setDynValue(PARAMETER_FEATURESTORE, featureStore);
+        try {
+            serviceParameters.setDynValue(PARAMETER_PROJECTION, projection);
+        } catch (DynFieldNotFoundException e) {
+            LOG.info("This provider doesn't accept projection", e);
+        }
+        Provider provider =
+            createProvider(serviceParameters,
+                new DefaultExporttoSwingProviderServices());
+        if (!(provider instanceof ExporttoSwingProvider)) {
+            throw new NotExporttoSwingProviderException(providerName);
+        }
+        return (ExporttoSwingProvider) provider;
+    }
+    
+    
+    public ExporttoSwingProvider createExporttoSwingProvider(
+        String providerName, FLyrVect vlayer)
+        throws ServiceException {
+        
+        FeatureStore fstore = vlayer.getFeatureStore();
+        
+        IProjection proj = null;
+        ICoordTrans ct = vlayer.getCoordTrans();
+        if (ct == null) {
+            // Layer is not reprojected on the fly
+            proj = vlayer.getProjection(); 
+        } else {
+            /*
+             * If there is on-the-fly reprojection, then
+             * the projection of the export process is the
+             * destination projection of the transformation:
+             */
+            proj = ct.getPDest();
+        }
+            
+        DynObject serviceParameters = createServiceParameters(providerName);
+        serviceParameters.setDynValue(PARAMETER_FEATURESTORE, fstore);
+        try {
+            serviceParameters.setDynValue(PARAMETER_PROJECTION, proj);
+        } catch (DynFieldNotFoundException e) {
+            LOG.info("This provider doesn't accept projection");
+        }
+        try {
+            serviceParameters.setDynValue(PARAMETER_LAYER, vlayer);
+        } catch (DynFieldNotFoundException e) {
+            LOG.info("This provider doesn't accept layer");
+        }
+        // ===========================================================
+        Provider provider =
+            createProvider(serviceParameters,
+                new DefaultExporttoSwingProviderServices());
+        if (!(provider instanceof ExporttoSwingProvider)) {
+            throw new NotExporttoSwingProviderException(providerName);
+        }
+        return (ExporttoSwingProvider) provider;
+    }
+
+    
+    
+    
+
+    public boolean support(String providerName, int providerType)
+        throws ServiceException {
+        ExtensionPointManager epm = ToolsLocator.getExtensionPointManager();
+        ExtensionPoint ep = epm.get(this.getRegistryKey());
+        ExporttoSwingProviderFactory exporttoSwingProviderFactory = null;
+
+        if (ep != null) {
+            try {
+                exporttoSwingProviderFactory =
+                    ((ExporttoSwingProviderFactory) ep.create(providerName));
+                return exporttoSwingProviderFactory.support(providerType);
+            } catch (InstantiationException e) {
+                LOG.error(
+                    "Not possible to create the exportto provider factory", e);
+            } catch (IllegalAccessException e) {
+                LOG.error(
+                    "Not possible to create the exportto provider factory", e);
+            }
+        }
+        return false;
+    }
+
+    public void addProviderFactory(ProviderFactory providerFactory) {
+        if (providerFactory == null) {
+            throw new IllegalArgumentException(
+                "ProviderFactory cannot be null.");
+        }
+
+        if (!(providerFactory instanceof ExporttoSwingProviderFactory)) {
+            throw new IllegalArgumentException(providerFactory.getName()
+                + " must implement the ExporttoSwingProviderFactory interface");
+        }
+        super.addProviderFactory(providerFactory);
+    }
+
+    public String getDescription(String providerName) {
+        try {
+            return getExporttoSwingProviderFactory(providerName)
+                .getDescription();
+        } catch (ServiceException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public boolean isProviderEnabled(ExporttoSwingProviderFactory factory) {
+        Boolean status = providerStatus.get(factory);
+        return status == null ? true : status.booleanValue();
+    }
+
+    public void enableProvider(ExporttoSwingProviderFactory factory, boolean value) {
+        providerStatus.put(factory, Boolean.valueOf(value));
+    }
+
+    public ExporttoSwingProviderFactory getExporttoSwingProviderFactory(
+        String name) throws ServiceException {
+        return (ExporttoSwingProviderFactory) getProviderFactory(name);
+    }
+
+    public ExporttoSwingPreferencesComponent createExporttoSwingProvidersPreferences() {
+        return new DefaultExporttoPreferencesComponent();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingProviderManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/NotExporttoSwingProviderException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/NotExporttoSwingProviderException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/NotExporttoSwingProviderException.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.exportto.swing.impl;
+
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Exception thrown when the provider doesn't implements the
+ * {@link ExporttoSwingProvider} interface
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class NotExporttoSwingProviderException extends ServiceException {
+
+    private static final long serialVersionUID = -2159095938700834790L;
+
+    private final static String MESSAGE_KEY =
+        "_ExporttoProviderNotRegisteredException";
+    private final static String MESSAGE_FORMAT =
+        "The provider '%(providerName)' does not implement the ExporttoSwingProvider interface";
+
+    /**
+     * Creates a new {@link NotExporttoSwingProviderException}.
+     * 
+     * @param name
+     *            the name of the provider that doesn't implements the
+     *            {@link ExporttoSwingProvider} interface
+     */
+    public NotExporttoSwingProviderException(String name) {
+        super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+        setValue("providerName", name);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/NotExporttoSwingProviderException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/ExporttoSwingDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/ExporttoSwingDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/ExporttoSwingDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import java.util.Locale;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.swing.api.ToolsSwingLibrary;
+
+/**
+ * Library for default swing implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class ExporttoSwingDefaultImplLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(ExporttoSwingLibrary.class);
+        this.require(ToolsSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        ExporttoSwingLocator
+            .registerSwingManager(DefaultExporttoSwingManager.class);
+        ExporttoSwingProviderLocator
+            .registerManager(DefaultExporttoSwingProviderManager.class);
+
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily("org.gvsig.exportto.swing.impl.i18n.text",
+            ExporttoSwingDefaultImplLibrary.class.getClassLoader(),
+            ExporttoSwingDefaultImplLibrary.class.getClass().getName());
+        IconThemeHelper.registerIcon("export-to", "wizard-export-to", this);
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/ExporttoSwingDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelListener.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.swing.JExporttoServicePanelListener;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultJExporttoServicePanelListener implements
+    WizardPanelActionListener {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultJExporttoServicePanelListener.class);
+
+    private DefaultJExporttoServicePanel exporttoServicePanel;
+    private JExporttoServicePanelListener exporttoServicePanelListener = null;
+
+    public DefaultJExporttoServicePanelListener(
+        DefaultJExporttoServicePanel exporttoServicePanel) {
+        super();
+        this.exporttoServicePanel = exporttoServicePanel;
+    }
+
+    public void cancel(WizardPanel wizardPanel) {
+        if (exporttoServicePanelListener != null) {
+            exporttoServicePanelListener.close();
+        }
+        exporttoServicePanel.setStatus(JOptionPane.CANCEL_OPTION);
+    }
+
+    public void finish(WizardPanel wizardPanel) {
+        // Start the export process
+        try {
+            exporttoServicePanel.export();
+            exporttoServicePanel.setStatus(JOptionPane.OK_OPTION);
+        } catch (ExporttoServiceException e) {
+            exporttoServicePanel.setStatus(JOptionPane.CANCEL_OPTION);
+            String error =
+                exporttoServicePanel.getExporttoSwingManager().getTranslation(
+                    "_Error_exportto");
+            LOG.info(error, e);
+            JOptionPane.showMessageDialog(exporttoServicePanel, error);
+        } catch (DataException e) {
+            exporttoServicePanel.setStatus(JOptionPane.CANCEL_OPTION);
+            String error =
+                exporttoServicePanel.getExporttoSwingManager().getTranslation(
+                    "_Error_data_export");
+            LOG.info(error, e);
+            JOptionPane.showMessageDialog(exporttoServicePanel, error);
+        }
+    }
+
+
+    /**
+     * @param exporttoServicePanelListener
+     */
+    public void setExporttoServicePanelListener(
+        JExporttoServicePanelListener exporttoServicePanelListener) {
+        this.exporttoServicePanelListener = exporttoServicePanelListener;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.impl.ExporttoSwingDefaultImplLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/wizard-export-to.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/wizard-export-to.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,30 @@
+select_format_to_export=Select the format to export
+exportto_options=Export options
+all_layer=All layer
+selected_features=Selected features
+predefined_filters=Predefined filters
+free_filter=Free filter
+export_progress=Export progress
+_Issues_with_attributes_or_geometries=Some attributes or geometries were not exported correctly
+_File_cannot_be_empty=A file must be selected
+_Invalid_values_in_form=Invalid values 
+_Error_exportto=Error while exporting
+_Error_data_export=Data error while exporting
+_Filter_cannot_be_empty=Filter cannot be empty if active
+_Choose_KML_version=KML version
+_Show_attributes_in_balloon=Show attributes in balloon
+_Use_labels_Label_point_will_be_added_to_non_points=Use labels (label point will be added to geometries which are not points)
+_KML_options=KML options
+_Force_to_EPSG_4326=Convert to EPSG:4326 
+_Indique_que_registros_desea_exportar=Select the records to export
+_Todos_los_registros=All records
+_Los_registros_seleccionados=Only selected records
+_Los_registros_que_cumplan_el_critrio_seleccionado=Filtered records
+_Nombre_de_la_expresion_opcinal=Expression name (optional)
+_Expresion=Expression
+_Type_here_the_name_of_the_expression_if_you_want_to_save_it_otherwise_leave_it_blank=Type here the name of the expression if you want to save it, otherwise leave it blank.
+_Test=Test
+_Usar_una_expresion_guardada=Use a saved expression
+_Nueva_expresion=New expression
+_Filtro=Filter
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text.properties	(revision 42196)
@@ -0,0 +1,30 @@
+select_format_to_export=Selecciona el formato a exportar
+exportto_options=Opciones de exportaci\u00f3n
+all_layer=Toda la capa
+selected_features=Fen\u00f3menos seleccionados
+predefined_filters=Filtros predefinidos
+free_filter=Filtro libre
+export_progress=Progreso de exportaci\u00f3n
+_Issues_with_attributes_or_geometries=Algunos atributos o geometr\u00edas no se exportaron correctamente
+_Invalid_values_in_form=Valores no v\u00e1lidos
+_File_cannot_be_empty=Debe elegir un archivo
+_Error_exportto=Error durante la exportaci\u00f3n
+_Error_data_export=Error con los datos durante la exportaci\u00f3n
+_Filter_cannot_be_empty=Si activa el filtro no debe estar vac\u00edo
+_Choose_KML_version=Versi\u00f3n de KML
+_Show_attributes_in_balloon=Mostrar atributos en globos
+_Use_labels_Label_point_will_be_added_to_non_points=A\u00f1adir etiquetas (se a\u00f1adir\u00e1 un punto a las geometr\u00edas no puntuales)
+_KML_options=Opciones de KML
+_Force_to_EPSG_4326=Convertir a EPSG:4326
+_Indique_que_registros_desea_exportar=Indique que registros desea exportar
+_Todos_los_registros=Todos los registros
+_Los_registros_seleccionados=Los registros seleccionados
+_Los_registros_que_cumplan_el_critrio_seleccionado=Los registros que cumplan el criterio seleccionado
+_Nombre_de_la_expresion_opcinal=Nombre de la expresion (opcional)
+_Expresion=Expresion
+_Type_here_the_name_of_the_expression_if_you_want_to_save_it_otherwise_leave_it_blank=Indique aqui el nombre con el que desea guardar la expresion, o deje este campo en blanco si no desea guardarla.
+_Test=Test
+_Usar_una_expresion_guardada=Usar una expresion guardada
+_Nueva_expresion=Nueva expresion
+_Filtro=Filtro
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/org/gvsig/exportto/swing/impl/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/JExporttoServicePanelTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/JExporttoServicePanelTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/JExporttoServicePanelTest.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+//import org.gvsig.exportto.ExporttoManager;
+//import org.gvsig.exportto.ExporttoServiceException;
+//import org.gvsig.exportto.swing.ExporttoSwingLocator;
+//import org.gvsig.exportto.swing.ExporttoSwingManager;
+//import org.gvsig.exportto.swing.JExporttoServicePanel;
+//import org.gvsig.fmap.crs.CRSFactory;
+//import org.gvsig.fmap.dal.DALLocator;
+//import org.gvsig.fmap.dal.DataManager;
+//import org.gvsig.fmap.dal.DataStoreParameters;
+//import org.gvsig.fmap.dal.exception.InitializeException;
+//import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+//import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+//import org.gvsig.fmap.dal.feature.FeatureStore;
+//import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+//import org.gvsig.tools.service.ServiceException;
+//import org.gvsig.tools.swing.api.ToolsSwingLocator;
+//import org.gvsig.tools.swing.impl.dynobject.DefaultDynObjectSwingManager;
+
+/**
+ * API compatibility tests for {@link JExporttoServicePanel} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class JExporttoServicePanelTest {
+//    extends AbstractLibraryAutoInitTestCase {
+//
+//    protected ExporttoManager manager;
+//    protected ExporttoSwingManager swingManager;
+//    protected DataManager dataManager = null;
+//
+//    @Override
+//    protected void doSetUp() throws Exception {
+//        
+//        // A Class or Factory has not been registered for the reference
+//        // Tools.dynobject.swing.manager in the Locator Tools.swing.locator
+//        ToolsSwingLocator.registerDynObjectSwingManager(
+//            DefaultDynObjectSwingManager.class);
+//
+//        swingManager = ExporttoSwingLocator.getSwingManager();
+//        manager = swingManager.getManager();
+//        dataManager = DALLocator.getDataManager();
+//        
+//        IconThemeHelper.registerIcon("export-to", "wizard-export-to", this);
+//    }
+//
+//    public void testJExporttoServicePanel() throws ServiceException,
+//        ExporttoServiceException, ValidateDataParametersException,
+//        InitializeException, ProviderNotRegisteredException {
+//        assertNotNull(swingManager);
+//
+//        JExporttoServicePanel panel =
+//            swingManager.createExportto(createMemoryFeatureStore(),
+//                CRSFactory.getCRS("EPSG:4326"));
+//        assertNotNull(panel);
+//    }
+//
+//    private FeatureStore createMemoryFeatureStore() throws InitializeException,
+//        ProviderNotRegisteredException, ValidateDataParametersException {
+//        DataStoreParameters memoryParameters =
+//            dataManager.createStoreParameters("Memory");
+//        return (FeatureStore) dataManager.openStore("Memory", memoryParameters);
+//    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/JExporttoServicePanelTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelTest.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+// import org.gvsig.exportto.swing.JExporttoServicePanel;
+
+/**
+ * {@link JExporttoServicePanel} API compatibility tests for the
+ * {@link DefaultJExporttoServicePanel} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultJExporttoServicePanelTest {
+    // extends JExporttoServicePanelTest {
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultJExporttoServicePanelTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoSwingManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoSwingManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoSwingManagerTest.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+//import org.gvsig.exportto.ExporttoLocator;
+//import org.gvsig.exportto.ExporttoManager;
+//import org.gvsig.exportto.swing.ExporttoSwingLocator;
+//import org.gvsig.exportto.swing.ExporttoSwingManager;
+//import org.gvsig.exportto.swing.ExporttoWindowManager;
+//import org.gvsig.exportto.swing.JExporttoServicePanel;
+//import org.gvsig.fmap.crs.CRSFactory;
+//import org.gvsig.fmap.dal.DALLocator;
+//import org.gvsig.fmap.dal.DataManager;
+//import org.gvsig.fmap.dal.DataStoreParameters;
+//import org.gvsig.fmap.dal.exception.InitializeException;
+//import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+//import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+//import org.gvsig.fmap.dal.feature.FeatureStore;
+//import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+//import org.gvsig.tools.service.ServiceException;
+//import org.gvsig.tools.swing.api.ToolsSwingLocator;
+//import org.gvsig.tools.swing.impl.dynobject.DefaultDynObjectSwingManager;
+
+/**
+ * API compatibility tests for {@link ExporttoSwingManager} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class ExporttoSwingManagerTest {
+//extends AbstractLibraryAutoInitTestCase {
+//
+//    protected ExporttoManager manager;
+//    protected ExporttoSwingManager swingManager;
+//    protected DataManager dataManager = null;
+//
+//    @Override
+//    protected void doSetUp() throws Exception {
+//        
+//        // A Class or Factory has not been registered for the reference
+//        // Tools.dynobject.swing.manager in the Locator Tools.swing.locator
+//        ToolsSwingLocator.registerDynObjectSwingManager(
+//            DefaultDynObjectSwingManager.class);
+//
+//        manager = ExporttoLocator.getManager();
+//        swingManager = ExporttoSwingLocator.getSwingManager();
+//        dataManager = DALLocator.getDataManager();
+//        
+//        IconThemeHelper.registerIcon("export-to", "wizard-export-to", this);
+//    }
+//
+//    public void testGetManager() {
+//        assertEquals(manager, swingManager.getManager());
+//    }
+//
+//    public void testCreateWindowManager() {
+//        ExporttoWindowManager windowManager = null;
+//        swingManager.registerWindowManager(windowManager);
+//        assertEquals(swingManager.getWindowManager(), windowManager);
+//    }
+//
+//    public void testCreationJExporttoServicePanel() throws ServiceException,
+//        ValidateDataParametersException, InitializeException,
+//        ProviderNotRegisteredException {
+//
+//        JExporttoServicePanel panel1 =
+//            swingManager.createExportto(createMemoryFeatureStore(),
+//                CRSFactory.getCRS("EPSG:4326"));
+//
+//        assertNotNull(panel1);
+//    }
+//
+//    private FeatureStore createMemoryFeatureStore() throws InitializeException,
+//        ProviderNotRegisteredException, ValidateDataParametersException {
+//        DataStoreParameters memoryParameters =
+//            dataManager.createStoreParameters("Memory");
+//        return (FeatureStore) dataManager.openStore("Memory", memoryParameters);
+//    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoSwingManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoWindowManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoWindowManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoWindowManagerTest.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+// import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * API compatibility tests for {@link ExporttoWindowManager} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class ExporttoWindowManagerTest {
+// extends
+//    AbstractLibraryAutoInitTestCase {
+//
+//    @Override
+//    protected void doSetUp() throws Exception {
+//
+//    }
+//
+//    public void testUno() {
+//        // FIXME: fltan por implementar
+//    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/ExporttoWindowManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManagerTest.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+// import org.gvsig.exportto.swing.ExporttoSwingManager;
+
+/**
+ * {@link ExporttoSwingManager} API compatibility tests for the
+ * {@link DefaultExporttoSwingManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoSwingManagerTest {
+    // extends ExporttoSwingManagerTest {
+
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoSwingManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManagerTest.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.impl;
+
+// import org.gvsig.exportto.swing.ExporttoWindowManager;
+
+/**
+ * {@link ExporttoWindowManager} API compatibility tests for the
+ * {@link DefaultExporttoWindowManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultExporttoWindowManagerTest {
+//    extends ExporttoWindowManagerTest {
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/java/org/gvsig/exportto/swing/impl/DefaultExporttoWindowManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.exportto">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/images/export-to/wizard-export-to.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/test/resources/images/export-to/wizard-export-to.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/pom.xml	(revision 42196)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.exportto.swing.impl</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.exportto.swing</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.api</artifactId>
+            <scope>compile</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.swing.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.ui</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>jwizardcomponent</groupId>
+            <artifactId>jwizardcomponent</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+</project>
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/pom.xml	(revision 42196)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov.dbf</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.file</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency> 
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <!-- Runtime dependencies -->
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+
+  </dependencies>
+</project>
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.prov.dbf.ExporttoDBFProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderLibrary.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dbf;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+/**
+ * Library to initialize and register the file Exporto provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoDBFProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        providerManager.addProviderFactory(new ExporttoDBFProviderFactory());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFService.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dbf;
+
+import java.io.File;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileService;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoDBFService extends AbstractExporttoFileService implements
+    ExporttoService {
+
+    private String encoding;
+
+    protected ExporttoDBFService(File dbfFile, FeatureStore featureStore,
+        String encoding) {
+        super(dbfFile, featureStore);
+        this.encoding = encoding;
+        try {
+            this.open();
+        } catch (ExporttoServiceException e) {
+            ((SimpleTaskStatus) getTaskStatus()).message(e.getMessage());
+        }
+    }
+
+    public void addParameters(
+        NewFeatureStoreParameters newFeatureStoreParameters)
+        throws DataException {
+        newFeatureStoreParameters.setDynValue("Encoding", encoding);
+        newFeatureStoreParameters.setDefaultFeatureType(featureStore
+            .getDefaultFeatureType().getEditable());
+    }
+
+    public String getFileExtension() {
+        return "dbf";
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderFactory.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dbf;
+
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileProviderFactory;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoDBFProviderFactory extends
+    AbstractExporttoFileProviderFactory {
+
+    private static final String PROVIDER_NAME = "DBF";
+
+    public ExporttoDBFProviderFactory() {
+        super(
+            new int[] { ExporttoSwingManager.VECTORIAL_TABLE_WITHOUT_GEOMETRY });
+    }
+
+    public Provider create(DynObject parameters, ProviderServices services)
+        throws ServiceException {
+        return new ExporttoDBFProvider(services,
+            (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE));
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+
+    public void initialize() {
+        parametersDefinition =
+            ToolsLocator.getDynObjectManager().createDynClass(getName(),
+                getDescription());
+        parametersDefinition.addDynField(PARAMETER_FEATURESTORE)
+            .setType(DataTypes.OBJECT).setMandatory(true)
+            .setClassOfValue(FeatureStore.class);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProvider.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dbf;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.swing.prov.dbf.panel.ExporttoDBFPanel;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoDBFProvider extends AbstractExporttoFileProvider implements
+    ExporttoSwingProvider {
+
+    private String encoding;
+
+    public ExporttoDBFProvider(ProviderServices providerServices,
+        FeatureStore featureStore) {
+        super(providerServices, featureStore, null, new ExporttoDBFPanel());
+    }
+
+    public ExporttoService createExporttoService() {
+        return new ExporttoDBFService(selectFileOptionPanel.getSelectedFile(),
+            featureStore,
+            ((ExporttoDBFPanel) selectFileOptionPanel).getEncoding());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/ExporttoDBFProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+    <p>Exportto provider that export to dbf.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/ExporttoDBFPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/ExporttoDBFPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/ExporttoDBFPanel.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dbf.panel;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.swing.prov.file.panel.SelectFileOptionPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoDBFPanel extends SelectFileOptionPanel {
+
+    private static final long serialVersionUID = -2657306673271108746L;
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(ExporttoDBFPanel.class);
+
+    private JLabel encodingLabel;
+    private JComboBox encodingCombo;
+
+    public ExporttoDBFPanel() {
+        super(new EncodingPanel());
+    }
+
+    /**
+     * @return
+     */
+    public String getEncoding() {
+        return ((EncodingPanel) this.getOptionsPanel()).getEncoding();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/ExporttoDBFPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/EncodingPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/EncodingPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/EncodingPanel.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dbf.panel;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.DynStruct;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class EncodingPanel extends JPanel {
+
+    private JLabel encodingLabel;
+    private JComboBox encodingCombo;
+
+    public EncodingPanel() {
+        super();
+        initComponents();
+        initEncodingCombo();
+    }
+
+    private void initComponents() {
+        this.setLayout(new BorderLayout());
+
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        JPanel northPanel = new JPanel();
+        encodingLabel = new JLabel();
+        encodingCombo = new JComboBox();
+
+        northPanel.setLayout(new GridBagLayout());
+
+        encodingLabel.setText(Messages.getText("encoding ") + ": ");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        northPanel.add(encodingLabel, gridBagConstraints);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 1;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 1.0;
+        northPanel.add(encodingCombo, gridBagConstraints);
+
+        add(northPanel, BorderLayout.NORTH);
+    }
+
+    private void initEncodingCombo() {
+        MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+        DynStruct dynStruct = metadataManager.getDefinition("DBF");
+        DynField dynField = dynStruct.getDynField("Encoding");
+        DynObjectValueItem[] dynObjectValueItem = dynField.getAvailableValues();
+        for (int i = 0; i < dynObjectValueItem.length; i++) {
+            encodingCombo.addItem(dynObjectValueItem[i].getValue());
+        }
+    }
+
+    /**
+     * @return
+     */
+    public String getEncoding() {
+        String encoding = (String) encodingCombo.getSelectedItem();
+        if ("".equals(encoding)) {
+            return null;
+        }
+        return encoding;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf/src/main/java/org/gvsig/exportto/swing/prov/dbf/panel/EncodingPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dbf
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,8 @@
+select_dataexplorer=Select the explorer
+select_dataexplorer_parameters=Select the explorer parameters
+select_datastore=Select the store
+select_datastore_parameters=Select the store parameters
+exportto_generic_description=Export using the advanced form to any gvSIG supported format
+exportto_generic_label=Advanced export
+_File_cannot_be_empty=A file must be selected
+_Invalid_values_in_form=Invalid values 
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text.properties	(revision 42196)
@@ -0,0 +1,8 @@
+select_dataexplorer=Selecciona el explorer
+select_dataexplorer_parameters=Selecciona los par�metros del explorer
+select_datastore=Selecciona el store
+select_datastore_parameters=Selecciona los par�metros del store
+exportto_generic_description=Exporta usando el formulario avanzado a cualquier formato soportado por gvSIG. 
+exportto_generic_label=Exportaci�n Avanzada
+_File_cannot_be_empty=Debe elegir un archivo
+_Invalid_values_in_form=Valores no v�lidos 
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/org/gvsig/exportto/swing/prov/generic/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.prov.generic.ExporttoGenericProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractProviderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractProviderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractProviderPanel.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.ListModel;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProvider;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class AbstractProviderPanel extends
+    AbstractExporttoGenericPanel {
+
+    private static final long serialVersionUID = -3344421488964340688L;
+    private JList dalProviderList = null;
+    private JScrollPane scrollPane = null;
+
+    public AbstractProviderPanel(
+        ExporttoGenericProvider exporttoGenericProvider, ListModel listModel) {
+        super(exporttoGenericProvider);
+        initializeComponents(listModel);
+    }
+
+    private void initializeComponents(ListModel listModel) {
+        this.setLayout(new BorderLayout());
+
+        // Create the list
+        dalProviderList = new JList();
+        dalProviderList.setModel(listModel);
+
+        scrollPane = new JScrollPane();
+        scrollPane.setViewportView(dalProviderList);
+
+        this.add(scrollPane, BorderLayout.CENTER);
+    }
+
+    protected void setModel(ListModel listModel) {
+        dalProviderList.setModel(listModel);
+    }
+
+    public String getSelectedProvider() {
+        Object obj = dalProviderList.getSelectedValue();
+        if (obj != null) {
+            return (String) obj;
+        }
+        return null;
+    }
+
+    public void AddListSelectionListener(
+        ListSelectionListener listSelectionListener) {
+        this.dalProviderList.addListSelectionListener(listSelectionListener);
+    }
+
+    @Override
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        if (getSelectedProvider() == null) {
+            throw new ExporttoPanelValidationException(
+                "A provider has to be selected");
+        }
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractProviderPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerListModel.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import java.util.List;
+
+import javax.swing.ListModel;
+import javax.swing.event.ListDataListener;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DataServerExplorerListModel implements ListModel {
+
+    @SuppressWarnings("rawtypes")
+    private List providers = null;
+
+    public DataServerExplorerListModel() {
+        super();
+        DataManager dataManager = DALLocator.getDataManager();
+        providers = dataManager.getExplorerProviders();
+    }
+
+    public int getSize() {
+        return providers.size();
+    }
+
+    public Object getElementAt(int index) {
+        return providers.get(index);
+    }
+
+    public void addListDataListener(ListDataListener l) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeListDataListener(ListDataListener l) {
+        // TODO Auto-generated method stub
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerPanel.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProvider;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DataServerExplorerPanel extends AbstractProviderPanel {
+
+    private static final long serialVersionUID = -5600080647075615795L;
+
+    /**
+     * @param exporttoGenericProvider
+     */
+    public DataServerExplorerPanel(
+        ExporttoGenericProvider exporttoGenericProvider) {
+        super(exporttoGenericProvider, new DataServerExplorerListModel());
+    }
+
+    public String getPanelTitle() {
+        return EXPORTTO_SWING_MANAGER.getTranslation("select_dataexplorer");
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        super.isValidPanel();
+        this.exporttoGenericProvider
+            .setDataServerExplorerSelected(getSelectedProvider());
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreListModel.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import java.util.List;
+
+import javax.swing.ListModel;
+import javax.swing.event.ListDataListener;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DataStoreListModel implements ListModel {
+
+    @SuppressWarnings("rawtypes")
+    private List providers = null;
+
+    public DataStoreListModel() {
+        super();
+        DataManager dataManager = DALLocator.getDataManager();
+        providers = dataManager.getStoreProviders();
+    }
+
+    public DataStoreListModel(DataServerExplorer dataServerExplorer) {
+        super();
+        providers = dataServerExplorer.getDataStoreProviderNames();
+    }
+
+    public int getSize() {
+        return providers.size();
+    }
+
+    public Object getElementAt(int index) {
+        return providers.get(index);
+    }
+
+    public void addListDataListener(ListDataListener l) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeListDataListener(ListDataListener l) {
+        // TODO Auto-generated method stub
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractExporttoGenericPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractExporttoGenericPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractExporttoGenericPanel.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class AbstractExporttoGenericPanel extends JPanel implements
+    ExporttoSwingProviderPanel {
+
+    private static final long serialVersionUID = -7994157431819798158L;
+
+    protected ExporttoGenericProvider exporttoGenericProvider;
+    protected static final ExporttoSwingManager EXPORTTO_SWING_MANAGER =
+        ExporttoSwingLocator.getSwingManager();
+
+    public AbstractExporttoGenericPanel(
+        ExporttoGenericProvider exporttoGenericProvider) {
+        super();
+        this.exporttoGenericProvider = exporttoGenericProvider;
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public void enterPanel() {
+        // Default do nothing
+    }
+    
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractExporttoGenericPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerParamsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerParamsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerParamsPanel.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProvider;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DataServerExplorerParamsPanel extends AbstractDynObjectParamsPanel {
+
+    private static final long serialVersionUID = 667990960406810267L;
+
+    /**
+     * @param exporttoGenericProvider
+     */
+    public DataServerExplorerParamsPanel(
+        ExporttoGenericProvider exporttoGenericProvider) {
+        super(exporttoGenericProvider);
+    }
+
+    @Override
+    public String getPanelTitle() {
+        return EXPORTTO_SWING_MANAGER
+            .getTranslation("select_dataexplorer_parameters");
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        dynform.saveStatus();
+        super.isValidPanel();
+        this.exporttoGenericProvider
+            .setDataServerExplorerParameters(getDataServerExplorerParameters());
+        return true;
+    }
+
+    private DataServerExplorerParameters getDataServerExplorerParameters() {
+        dynform.saveStatus();
+        return (DataServerExplorerParameters) dynform.getDynObject();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataServerExplorerParamsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStorePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStorePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStorePanel.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProvider;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.fmap.dal.DataServerExplorer;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DataStorePanel extends AbstractProviderPanel {
+
+    private static final long serialVersionUID = -3342965948053480977L;
+
+    /**
+     * @param exporttoGenericProvider
+     */
+    public DataStorePanel(ExporttoGenericProvider exporttoGenericProvider) {
+        super(exporttoGenericProvider, new DataStoreListModel());
+    }
+
+    public String getPanelTitle() {
+        return EXPORTTO_SWING_MANAGER.getTranslation("select_datastore");
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        super.isValidPanel();
+        this.exporttoGenericProvider
+            .setDataStoreSelected(getSelectedProvider());
+        return true;
+    }
+
+    public void setDataServerExplorer(DataServerExplorer dataServerExplorer) {
+        this.setModel(new DataStoreListModel(dataServerExplorer));
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStorePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractDynObjectParamsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractDynObjectParamsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractDynObjectParamsPanel.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import java.awt.BorderLayout;
+
+import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProvider;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class AbstractDynObjectParamsPanel extends
+    AbstractExporttoGenericPanel {
+
+    private static final long serialVersionUID = -8274240222613051224L;
+    protected JDynForm dynform = null;
+
+    public AbstractDynObjectParamsPanel(
+        ExporttoGenericProvider exporttoGenericProvider) {
+        super(exporttoGenericProvider);
+        this.setLayout(new BorderLayout());
+    }
+
+    /**
+     * @param dynform
+     *            the dynObjectComponent to set
+     */
+    public void setDynObjectComponent(JDynForm dynform) {
+        this.dynform = dynform;
+        this.removeAll();
+        this.add(dynform.asJComponent(), BorderLayout.CENTER);
+    }
+
+    @Override
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+//        DynObject dynObject = this.dynform.getDynObject();
+//        
+//        try {
+//            dynObject.getDynClass().validate(dynObject);
+//        } catch (DynObjectValidateException e) {
+//            throw new ExporttoPanelValidationException(
+//                "Error validating the panel", e);
+//        }
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/AbstractDynObjectParamsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreParamsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreParamsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreParamsPanel.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic.panel;
+
+import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProvider;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DataStoreParamsPanel extends AbstractDynObjectParamsPanel {
+
+    private static final long serialVersionUID = 181015750609899330L;
+
+    /**
+     * @param exporttoGenericProvider
+     */
+    public DataStoreParamsPanel(ExporttoGenericProvider exporttoGenericProvider) {
+        super(exporttoGenericProvider);
+    }
+
+    @Override
+    public String getPanelTitle() {
+        return EXPORTTO_SWING_MANAGER
+            .getTranslation("select_datastore_parameters");
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        dynform.saveStatus();
+        super.isValidPanel();
+        return true;
+    }
+
+    public NewDataStoreParameters getNewDataStoreParameters() {
+        dynform.saveStatus();
+        return (NewDataStoreParameters) dynform.getDynObject();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/panel/DataStoreParamsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderLibrary.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic;
+
+import java.util.Locale;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library to initialize and register the file Exporto provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoGenericProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily(
+            "org.gvsig.exportto.swing.prov.generic.i18n.text",
+            ExporttoGenericProviderLibrary.class.getClassLoader(),
+            ExporttoGenericProviderLibrary.class.getClass().getName());
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ExporttoSwingProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        ExporttoGenericProviderFactory providerFactory =
+            new ExporttoGenericProviderFactory();
+        providerManager.addProviderFactory(providerFactory);
+
+        // Disable this provider by default
+        providerManager.enableProvider(providerFactory, false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderFactory.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.spi.AbstractExporttoProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Factory of generic {@link ExportoProvider} objects.
+ * This factory add support for any DAL provider in a generic way.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoGenericProviderFactory extends
+    AbstractExporttoProviderFactory implements ExporttoSwingProviderFactory {
+
+    private static final String PROVIDER_NAME = "Generic";
+
+    /**
+     * Constructor.
+     */
+    public ExporttoGenericProviderFactory() {
+        super(null);
+    }
+
+    public Provider create(DynObject parameters, ProviderServices services)
+        throws ServiceException {
+        return new ExporttoGenericProvider(services,
+            (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE),
+            (IProjection) parameters.getDynValue(PARAMETER_PROJECTION));
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+
+    public boolean support(int providerType) throws ServiceException {
+        return true;
+    }
+
+    public String getDescription() {
+        return Messages.getText("exportto_generic_description");
+    }
+
+    public String getLabel() {
+        return Messages.getText("exportto_generic_label");
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProvider.java	(revision 42196)
@@ -0,0 +1,216 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.generic;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.ExporttoLocator;
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.swing.prov.generic.panel.DataServerExplorerPanel;
+import org.gvsig.exportto.swing.prov.generic.panel.DataServerExplorerParamsPanel;
+import org.gvsig.exportto.swing.prov.generic.panel.DataStorePanel;
+import org.gvsig.exportto.swing.prov.generic.panel.DataStoreParamsPanel;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.AbstractProvider;
+import org.gvsig.tools.service.spi.ProviderServices;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.dynobject.DynObjectSwingManager;
+import org.gvsig.tools.swing.api.dynobject.JDynObjectComponent;
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoGenericProvider extends AbstractProvider implements
+    ExporttoSwingProvider {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(ExporttoGenericProvider.class);
+
+    private static final DataManager DATA_MANAGER = DALLocator.getDataManager();
+    private static final DynObjectSwingManager DYN_OBJECT_SWING_MANAGER =
+        ToolsSwingLocator.getDynObjectSwingManager();
+    private static final ExporttoManager EXPORTTO_MANAGER = ExporttoLocator
+        .getManager();
+
+    private DataServerExplorerPanel dataServerExplorerPanel = null;
+    private DataServerExplorerParamsPanel dataServerExplorerParamsPanel = null;
+    private DataStorePanel dataStorePanel = null;
+    private DataStoreParamsPanel dataStoreParamsPanel = null;
+
+    private FeatureStore featureStore;
+    private IProjection projection;
+    private DataServerExplorer dataServerExplorer = null;
+
+    /**
+     * Constructor.
+     * 
+     * @param providerServices
+     *            the services for the provider
+     * @param file
+     *            to get the Exporto from
+     */
+    public ExporttoGenericProvider(ProviderServices providerServices,
+        FeatureStore featureStore, IProjection projection) {
+        super(providerServices);
+        this.featureStore = featureStore;
+        this.projection = projection;
+
+        dataServerExplorerPanel = new DataServerExplorerPanel(this);
+        dataServerExplorerParamsPanel = new DataServerExplorerParamsPanel(this);
+        dataStorePanel = new DataStorePanel(this);
+        dataStoreParamsPanel = new DataStoreParamsPanel(this);
+    }
+
+    public int getPanelCount() {
+        return 4;
+    }
+
+    public ExporttoSwingProviderPanel getPanelAt(int index) {
+        switch (index) {
+        case 0:
+            return dataServerExplorerPanel;
+        case 1:
+            return dataServerExplorerParamsPanel;
+        case 2:
+            return dataStorePanel;
+        case 3:
+            return dataStoreParamsPanel;
+        }
+        return null;
+    }
+
+    public void setDataServerExplorerSelected(String explorerName)
+        throws ExporttoPanelValidationException {
+        DataServerExplorerParameters dataServerExplorerParameters;
+        try {
+            dataServerExplorerParameters =
+                DATA_MANAGER.createServerExplorerParameters(explorerName);
+            JDynObjectComponent dynObjectComponent =
+                DYN_OBJECT_SWING_MANAGER.createJDynObjectComponent(
+                    dataServerExplorerParameters, true);
+            this.dataServerExplorerParamsPanel
+                .setDynObjectComponent(dynObjectComponent);
+        } catch (InitializeException e1) {
+            throw new ExporttoPanelValidationException(
+                "Error creating the explorer params panel", e1);
+        } catch (ProviderNotRegisteredException e1) {
+            throw new ExporttoPanelValidationException(
+                "Error creating the explorer params panel", e1);
+        } catch (ServiceException e1) {
+            throw new ExporttoPanelValidationException(
+                "Error creating the explorer params panel", e1);
+        }
+    }
+
+    public void setDataServerExplorerParameters(
+        DataServerExplorerParameters dataServerExplorerParameters)
+        throws ExporttoPanelValidationException {
+        String explorerName =
+            this.dataServerExplorerPanel.getSelectedProvider();
+        if (explorerName != null) {
+            if (dataServerExplorerParameters != null) {
+                try {
+                    dataServerExplorer =
+                        DATA_MANAGER.openServerExplorer(explorerName,
+                            dataServerExplorerParameters);
+                    this.dataStorePanel
+                        .setDataServerExplorer(dataServerExplorer);
+                } catch (ValidateDataParametersException e) {
+                    throw new ExporttoPanelValidationException(
+                        "error creating the explorer", e);
+                } catch (InitializeException e) {
+                    throw new ExporttoPanelValidationException(
+                        "error creating the explorer", e);
+                } catch (ProviderNotRegisteredException e) {
+                    throw new ExporttoPanelValidationException(
+                        "error creating the explorer", e);
+                }
+            }
+        }
+    }
+
+    public DataServerExplorer getDataServerExplorer() {
+        return dataServerExplorer;
+    }
+
+    public void setDataStoreSelected(String storeName)
+        throws ExporttoPanelValidationException {
+        try {
+            NewDataStoreParameters newDataStoreParameters =
+                dataServerExplorer.getAddParameters(storeName);
+
+            try {
+                newDataStoreParameters.setDynValue("CRS", projection);
+            } catch (DynFieldNotFoundException e) {
+                LOG.info("The provider {} doesn't support the CRS parameter",
+                    storeName);
+            }
+            try {
+                newDataStoreParameters.setDynValue("featureType", featureStore
+                    .getDefaultFeatureType().getEditable());
+            } catch (DynFieldNotFoundException e) {
+                LOG.info(
+                    "The provider {} doesn't support the featureType parameter",
+                    storeName);
+            }
+
+            JDynObjectComponent dynObjectComponent =
+                DYN_OBJECT_SWING_MANAGER.createJDynObjectComponent(
+                    newDataStoreParameters, true);
+            this.dataStoreParamsPanel.setDynObjectComponent(dynObjectComponent);
+        } catch (Exception e1) {
+            throw new ExporttoPanelValidationException(
+                "Error creating the store params panel", e1);
+        }
+    }
+
+    private NewDataStoreParameters getNewDataStoreParameters() {
+        return dataStoreParamsPanel.getNewDataStoreParameters();
+    }
+
+    public ExporttoService createExporttoService() {
+        return EXPORTTO_MANAGER.getExporttoService(dataServerExplorer,
+            getNewDataStoreParameters());
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/ExporttoGenericProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider which gets Exporto from a file.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/src/main/java/org/gvsig/exportto/swing/prov/generic/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/pom.xml	(revision 42196)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.exportto.swing.prov.generic</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+        <version>2.0.46-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.api</artifactId>
+            <scope>compile</scope>
+        </dependency>      
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+            <scope>compile</scope>        
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+            <scope>compile</scope>        
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.generic
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider which gets Exporto from a file.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/panel/SelectFileOptionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/panel/SelectFileOptionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/panel/SelectFileOptionPanel.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.file.panel;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.io.File;
+import javax.swing.JComponent;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.i18n.Messages;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class SelectFileOptionPanel extends JPanel implements ExporttoSwingProviderPanel {
+
+    private static final long serialVersionUID = -7417782279157857962L;
+    private JPanel optionsPanel;
+
+    private static final ExporttoSwingManager EXPORTTO_SWING_MANAGER =
+        ExporttoSwingLocator.getSwingManager();
+
+    private org.gvsig.gui.beans.wizard.panel.SelectFileOptionPanel selectFileOptionPanel;
+
+    /**
+     * @param fileText
+     */
+    public SelectFileOptionPanel() {
+        this(null);
+    }
+
+    public SelectFileOptionPanel(JPanel optionsPanel) {
+        super();
+        this.setLayout(new BorderLayout());
+        selectFileOptionPanel =
+            new org.gvsig.gui.beans.wizard.panel.SelectFileOptionPanel(null);
+        add(selectFileOptionPanel, BorderLayout.NORTH);
+        if (optionsPanel != null) {
+            optionsPanel.setBorder(javax.swing.BorderFactory
+                .createCompoundBorder(javax.swing.BorderFactory
+                    .createTitledBorder(Messages.getText("options")),
+                    javax.swing.BorderFactory.createEmptyBorder(10, 5, 5, 5)));
+            add(optionsPanel, BorderLayout.CENTER);
+            this.optionsPanel = optionsPanel;
+        }
+    }
+
+    public String getPanelTitle() {
+        return EXPORTTO_SWING_MANAGER.getTranslation("Seleccionar_fichero");
+    }
+
+    public File getSelectedFile() {
+        return selectFileOptionPanel.getSelectedFile();
+    }
+    
+    public void enterPanel() {
+        // Default do nothing
+    }
+    
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        File file = selectFileOptionPanel.getSelectedFile();
+        if ((file == null) || (file.equals(""))) {
+            throw new ExporttoPanelValidationException(
+                EXPORTTO_SWING_MANAGER.getTranslation("_File_cannot_be_empty"));
+        }
+        if (file.exists()) {
+            int resp =
+                JOptionPane
+                    .showConfirmDialog(
+                        (Component) selectFileOptionPanel,
+                        EXPORTTO_SWING_MANAGER
+                            .getTranslation("fichero_ya_existe_seguro_desea_guardarlo"),
+                        EXPORTTO_SWING_MANAGER.getTranslation("guardar"),
+                        JOptionPane.YES_NO_OPTION);
+            if (resp == JOptionPane.NO_OPTION) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @return the optionsPanel
+     */
+    public JPanel getOptionsPanel() {
+        return optionsPanel;
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/panel/SelectFileOptionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProvider.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.file;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.prov.file.panel.SelectFileOptionPanel;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.service.spi.AbstractProvider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractExporttoFileProvider extends AbstractProvider
+    implements ExporttoSwingProvider {
+
+    protected SelectFileOptionPanel selectFileOptionPanel = null;
+
+    protected FeatureStore featureStore;
+    protected IProjection projection;
+
+    /**
+     * Constructor.
+     * 
+     * @param providerServices
+     *            the services for the provider
+     * @param file
+     *            to get the Exporto from
+     */
+    public AbstractExporttoFileProvider(ProviderServices providerServices,
+        FeatureStore featureStore, IProjection projection) {
+        this(providerServices, featureStore, projection,
+            new SelectFileOptionPanel());
+    }
+
+    public AbstractExporttoFileProvider(ProviderServices providerServices,
+        FeatureStore featureStore, IProjection projection,
+        SelectFileOptionPanel selectFileOptionPanel) {
+        super(providerServices);
+        this.featureStore = featureStore;
+        this.projection = projection;
+
+        this.selectFileOptionPanel = selectFileOptionPanel;
+    }
+
+    public int getPanelCount() {
+        return 1;
+    }
+
+    public ExporttoSwingProviderPanel getPanelAt(int index) {
+        switch (index) {
+        case 0:
+            return selectFileOptionPanel;
+        }
+        return null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileService.java	(revision 42196)
@@ -0,0 +1,148 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.file;
+
+import java.io.File;
+
+import org.gvsig.exportto.ExporttoLocator;
+import org.gvsig.exportto.ExporttoManager;
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.tools.task.TaskStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class AbstractExporttoFileService implements ExporttoService {
+
+    protected static final ExporttoManager EXPORTTO_MANAGER = ExporttoLocator
+        .getManager();
+    protected File file;
+    protected FeatureStore featureStore;
+    protected ExporttoService exporttoService;
+
+    private NewFeatureStoreParameters newFeatureStoreParameters;
+    private ExporttoServiceFinishAction exporttoServiceFinishAction;
+
+    public AbstractExporttoFileService(File file, FeatureStore featureStore) {
+        super();
+        this.featureStore = featureStore;
+        this.file = file;
+    }
+
+    public void open() throws ExporttoServiceException {
+        String path = file.getAbsolutePath();
+
+        String extension = "." + getFileExtension();
+
+        if (!(path.toLowerCase().endsWith(extension))) {
+            path = path + extension;
+        }
+
+        File newFile = new File(path);
+        DataManager dataManager = DALLocator.getDataManager();
+
+        FilesystemServerExplorerParameters explorerParams;
+        try {
+            explorerParams =
+                (FilesystemServerExplorerParameters) dataManager
+                    .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+        } catch (InitializeException e) {
+            throw new ExporttoServiceException(e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new ExporttoServiceException(e);
+        }
+        explorerParams.setRoot(newFile.getParent());
+
+        FilesystemServerExplorer explorer;
+        try {
+            explorer =
+                (FilesystemServerExplorer) dataManager.openServerExplorer(
+                    "FilesystemExplorer", explorerParams);
+        } catch (ValidateDataParametersException e) {
+            throw new ExporttoServiceException(e);
+        } catch (InitializeException e) {
+            throw new ExporttoServiceException(e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new ExporttoServiceException(e);
+        }
+
+        try {
+            newFeatureStoreParameters =
+                (NewFeatureStoreParameters) explorer.getAddParameters(newFile);
+            addParameters(newFeatureStoreParameters);
+
+            exporttoService =
+                EXPORTTO_MANAGER.getExporttoService(explorer,
+                    newFeatureStoreParameters);
+        } catch (DataException e) {
+            throw new ExporttoServiceException(e);
+        }
+    }
+
+    public abstract void addParameters(
+        NewFeatureStoreParameters newFeatureStoreParameters)
+        throws DataException;
+
+    public abstract String getFileExtension();
+
+    public void export(FeatureSet featureSet) throws ExporttoServiceException {
+        exporttoService.export(featureSet);
+        if (exporttoServiceFinishAction != null) {
+            exporttoServiceFinishAction.finished(file.getName(),
+                newFeatureStoreParameters);
+        }
+    }
+
+    public void setFinishAction(
+        ExporttoServiceFinishAction exporttoServiceFinishAction) {
+        this.exporttoServiceFinishAction = exporttoServiceFinishAction;
+    }
+
+    public TaskStatus getTaskStatus() {
+        return exporttoService.getTaskStatus();
+    }
+
+    public boolean isCancellationRequested() {
+        return exporttoService.isCancellationRequested();
+    }
+
+    public void cancelRequest() {
+        exporttoService.cancelRequest();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProviderFactory.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.file;
+
+import org.gvsig.exportto.swing.spi.AbstractExporttoProviderFactory;
+
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractExporttoFileProviderFactory extends
+    AbstractExporttoProviderFactory {
+
+    public AbstractExporttoFileProviderFactory(int[] providerTypes) {
+        super(providerTypes);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/src/main/java/org/gvsig/exportto/swing/prov/file/AbstractExporttoFileProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/pom.xml	(revision 42196)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov.file</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.api</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+      <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.impl</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.ui</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+      </dependency>
+  </dependencies>
+</project>
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.file
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.prov.shape.ExporttoShapeProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderLibrary.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.shape;
+
+import org.cresques.ProjectionLibrary;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+/**
+ * Library to initialize and register the file Exporto provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoShapeProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+        require(ProjectionLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        providerManager.addProviderFactory(new ExporttoShapeProviderFactory());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeService.java	(revision 42196)
@@ -0,0 +1,773 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.shape;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JOptionPane;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.exportto.swing.prov.file.panel.SelectFileOptionPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class ExporttoShapeService extends AbstractMonitorableTask implements
+    ExporttoService {
+
+    private static Logger logger = LoggerFactory.getLogger(ExporttoShapeService.class);
+
+    public static final int MAX_FIELD_NAME_LENGTH = 10;
+
+    private File theShapeFile;
+    private IProjection projection;
+    private FeatureStore featureStore;
+    private Map<String, String> origNameToDbfName;
+
+    private int geometryType = -1;
+    private NewFeatureStoreParameters newFeatureStoreParameters;
+    private FilesystemServerExplorer filesystemServerExplorer;
+    private SelectFileOptionPanel filePanel = null;
+
+    private static GeometryManager geoManager = GeometryLocator.getGeometryManager();
+
+    private ExporttoServiceFinishAction exporttoServiceFinishAction;
+
+    public ExporttoShapeService(
+    		SelectFileOptionPanel fPanel,
+    		FeatureStore featureStore,
+    		IProjection projection) {
+
+        super("Export to shape");
+        this.featureStore = featureStore;
+        this.filePanel = fPanel;
+        this.theShapeFile = fPanel.getSelectedFile();
+        this.projection = projection;
+
+        try {
+			origNameToDbfName = getNames(featureStore.getDefaultFeatureType());
+		} catch (DataException e) {
+			logger.error("While getting def feat type.", e);
+		}
+    }
+
+    private Map<String, String> getNames(FeatureType ft) {
+
+    	Map<String, String> resp = new HashMap<String, String>();
+    	FeatureAttributeDescriptor[] atts = ft.getAttributeDescriptors();
+    	for (int i=0; i<atts.length; i++) {
+    		//if (atts[i].getName().length() > MAX_FIELD_NAME_LENGTH) {
+    			String new_name = getNewName(atts[i].getName(), resp.values());
+    			resp.put(atts[i].getName(), new_name);
+            //}
+    	}
+		return resp;
+	}
+
+	private String getNewName(String name, Collection<String> values) {
+
+		int len = name.length();
+		if (len <= MAX_FIELD_NAME_LENGTH) {
+			/*
+			 * Should not happen
+			 */
+			return name;
+		}
+
+		String resp = null;
+		/*
+		 * Composes a new name with start and end of old name and an index
+		 * THISISAVERYLONGNAME => THISI_AME_1, THISI_AME_2 ... THISI_AME_9
+		 */
+		/*
+		String pref = name.substring(0, 6) + "_" + name.substring(len - 2) + "_";
+		for (int i=0; i<10; i++) {
+			resp = pref + i;
+			if (!values.contains(resp)) {
+				return resp;
+			}
+		}
+		*/
+		/*
+		 * Very strange to get here...
+		 * THISISAVERYLONGNAME => THISISA_1, THISISA_2 ... THISISA_999
+		 */
+		/*
+		String pref = name.substring(0, 7) + "_";
+		for (int i=0; i<1000; i++) {
+			resp = pref + i;
+			if (!values.contains(resp)) {
+				return resp;
+			}
+		}
+		*/
+		/*
+		 * GDAL field name truncation method (extended from 100 to 255)
+		 * THISISAVERYLONGNAME => THISISAVER, THISISAV_1 ... THISISAV_9,
+		 * THISISAV10 ... THISISAV99, THISISA100 ... THISISA255
+		 * (255 = max number of fields in a SHP)
+		 */
+		//String resp = null;
+		for (int i=0; i<255; i++) {
+		    if (i==0)
+		    	resp = name.substring(0, 10);
+		    else if (i<=9)
+		        resp = name.substring(0, 8) + "_" + i;
+		    else if (i<=99)
+		    	resp = name.substring(0, 8) + i;
+		    else
+		    	resp = name.substring(0, 7) + i;
+		    if (!values.contains(resp))
+		        return resp;
+		}
+		/*
+		 * Should not get here
+		 */
+		return name.substring(0, 4) + "_" + (System.currentTimeMillis() % 1000000);
+	}
+
+	public void export(FeatureSet featureSet) throws ExporttoServiceException {
+
+        ExporttoServiceException throw_exp = null;
+        File item_shp = null;
+        String pathFile = theShapeFile.getAbsolutePath();
+        String withoutShp = pathFile.replaceAll("\\.shp", "");
+
+        File single_file = new File(withoutShp + ".shp");
+
+        String layer_name = single_file.getName();
+        int lastp = layer_name.lastIndexOf(".shp");
+        if (lastp > -1) {
+            layer_name = layer_name.substring(0, lastp);
+        }
+
+        initializeParams(featureSet, single_file);
+
+        if (geometryType == Geometry.TYPES.GEOMETRY) {
+            // SURFACE
+            String fileName = withoutShp + "_surface" + ".shp";
+            item_shp = new File(fileName);
+            initializeParams(featureSet, item_shp);
+            newFeatureStoreParameters.setDynValue("shpfile", item_shp);
+            taskStatus.setTitle("Exporting surfaces");
+
+            try {
+                export(filesystemServerExplorer, newFeatureStoreParameters,
+                    featureSet, Geometry.TYPES.SURFACE, true);
+            } catch (ExporttoServiceException ee) {
+                throw_exp = ee;
+            }
+            finishAction(layer_name + " (surface)", item_shp, projection);
+
+            // CURVE
+            fileName = withoutShp + "_curve" + ".shp";
+            item_shp = new File(fileName);
+            initializeParams(featureSet, item_shp);
+            newFeatureStoreParameters.setDynValue("shpfile", item_shp);
+            taskStatus.setTitle("Exporting curves");
+
+            try {
+                export(filesystemServerExplorer, newFeatureStoreParameters,
+                    featureSet, Geometry.TYPES.CURVE, true);
+            } catch (ExporttoServiceException ee) {
+                throw_exp = ee;
+            }
+
+            finishAction(layer_name + " (curve)", item_shp, projection);
+
+            // POINT
+            fileName = withoutShp + "_point" + ".shp";
+            item_shp = new File(fileName);
+            initializeParams(featureSet, item_shp);
+
+            newFeatureStoreParameters.setDynValue("shpfile", item_shp);
+            taskStatus.setTitle("Exporting points");
+
+            try {
+                export(filesystemServerExplorer, newFeatureStoreParameters,
+                    featureSet, Geometry.TYPES.POINT, true);
+            } catch (ExporttoServiceException ee) {
+                throw_exp = ee;
+            }
+
+            finishAction(layer_name + " (point)", item_shp, projection);
+
+
+        } else {
+
+            // params already initialized
+            newFeatureStoreParameters.setDynValue("shpfile", single_file);
+            try {
+                export(filesystemServerExplorer, newFeatureStoreParameters,
+                    featureSet, geometryType, false);
+            } catch (ExporttoServiceException ee) {
+                throw_exp = ee;
+            }
+            finishAction(layer_name, single_file, projection);
+        }
+        this.taskStatus.terminate();
+        this.taskStatus.remove();
+
+        if (throw_exp != null) {
+            throw throw_exp;
+        } else {
+        	if (origNameToDbfName.size() > 0) {
+        		showNewNamesDialog(origNameToDbfName);
+        	}
+        }
+    }
+
+    private void showNewNamesDialog(Map<String, String> map) {
+
+    	Iterator<String> iter = map.keySet().iterator();
+
+    	String msg = Messages.getText("_Some_field_names_too_long_automatically_changed");
+    	msg = msg + ":\n";
+    	String k, v;
+    	boolean hasModifiedNames = false;
+    	while (iter.hasNext()) {
+    		k = iter.next();
+    		v = map.get(k);
+    		if(!k.equalsIgnoreCase(v)){
+    		msg = msg + "\n" + k + " > " + v;
+    			hasModifiedNames = true;
+    		}
+    	}
+
+    	if(hasModifiedNames){
+    	JOptionPane.showMessageDialog(
+    			this.filePanel,
+    			msg,
+    			Messages.getText("export_progress"),
+    			JOptionPane.WARNING_MESSAGE);
+	}
+	}
+
+	private void initializeParams(
+        FeatureSet featureSet, File out_shp_file)
+        throws ExporttoServiceException {
+
+        DataManager dataManager = DALLocator.getDataManager();
+
+        FilesystemServerExplorerParameters explorerParams;
+        try {
+            explorerParams =
+                (FilesystemServerExplorerParameters) dataManager
+                    .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+        } catch (InitializeException e) {
+            throw new ExporttoServiceException(e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new ExporttoServiceException(e);
+        }
+        explorerParams.setRoot(out_shp_file.getParent());
+
+        try {
+            filesystemServerExplorer =
+                (FilesystemServerExplorer) dataManager.openServerExplorer(
+                    "FilesystemExplorer", explorerParams);
+        } catch (ValidateDataParametersException e) {
+            throw new ExporttoServiceException(e);
+        } catch (InitializeException e) {
+            throw new ExporttoServiceException(e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new ExporttoServiceException(e);
+        }
+
+        try {
+            newFeatureStoreParameters =
+                (NewFeatureStoreParameters) filesystemServerExplorer
+                    .getAddParameters(out_shp_file);
+        } catch (DataException e) {
+            throw new ExporttoServiceException(e);
+        }
+
+        newFeatureStoreParameters.setDynValue("CRS", projection);
+
+        geometryType =
+            featureSet.getDefaultFeatureType().getDefaultGeometryAttribute()
+                .getGeomType().getType();
+
+    }
+
+    private void export(FilesystemServerExplorer explorer,
+        NewFeatureStoreParameters params, FeatureSet featureSet,
+        int geometryType, boolean checkType) throws ExporttoServiceException {
+
+        String providerName = params.getDataStoreName();
+        String explorerName = explorer.getProviderName();
+        boolean there_was_error = false;
+
+        DisposableIterator it = null;
+        try {
+            EditableFeatureType type =
+                featureStore.getDefaultFeatureType().getCopy().getEditable();
+
+            FeatureAttributeDescriptor fad =
+                (FeatureAttributeDescriptor) type.get(type
+                    .getDefaultGeometryAttributeName());
+
+            // ==========================
+            fixNames(type);
+            // ==========================
+
+            type.remove(fad.getName());
+            EditableFeatureAttributeDescriptor efad =
+                type.add(fad.getName(), fad.getType(), fad.getSize());
+            efad.setDefaultValue(fad.getDefaultValue());
+
+            int gsubtype = fad.getGeomType().getSubType();
+            // El shp solo soporta los subtipos 2D y 3D
+            switch( gsubtype ) {
+            case Geometry.SUBTYPES.GEOM2D:
+                break;
+            case Geometry.SUBTYPES.GEOM3D:
+                break;
+            default:
+                // Forzaremos las geometrias a 3D
+                gsubtype = Geometry.SUBTYPES.GEOM3D;
+                break;
+            }
+            GeometryType gty = null;
+            try {
+                gty = geoManager.getGeometryType(geometryType, gsubtype);
+            } catch (Exception e) {
+                throw new ExporttoServiceException(e);
+            }
+
+            efad.setGeometryType(gty);
+
+            efad.setName(origNameToDbfName.get(fad.getName()));
+            efad.setPrecision(fad.getPrecision());
+
+
+            type.setDefaultGeometryAttributeName(efad.getName());
+
+            params.setDefaultFeatureType(type.getNotEditableCopy());
+
+            params.setDynValue("geometryType", null);
+
+            DataManager manager = DALLocator.getDataManager();
+
+            manager.newStore(explorerName, providerName, params, true);
+            FeatureStore target =
+                (FeatureStore) manager.openStore(providerName, params);
+
+            FeatureType targetType = target.getDefaultFeatureType();
+
+            taskStatus.setRangeOfValues(0, featureSet.getSize());
+
+            target.edit(FeatureStore.MODE_APPEND);
+            it = featureSet.fastIterator();
+            int featureCount = 0;
+
+            // ================================================
+            // Reprojection stuff
+            Geometry reproj_geom = null;
+            EditableFeature edit_feat = null;
+            IProjection sourceProjection =
+                featureStore.getDefaultFeatureType().getDefaultGeometryAttribute().getSRS();
+
+            ICoordTrans coord_trans = null;
+            // this comparison is perhaps too preventive
+            // we could  have two instances of same projection
+            // so we would do more computations than needed
+            if (sourceProjection != null && sourceProjection != this.projection) {
+                coord_trans = sourceProjection.getCT(this.projection);
+            }
+            // ================================================
+
+            List<Geometry> extracted = null;
+            Geometry gitem = null;
+
+            while (it.hasNext()) {
+
+                Feature feature = (Feature) it.next();
+                gitem = feature.getDefaultGeometry();
+
+                if (checkType) {
+                    extracted = getGeometriesFrom(gitem, geometryType);
+                    if (extracted.size() == 0) {
+                        // found no geometries of correct type
+                        continue;
+                    } else {
+                        if (geometryType != Geometry.TYPES.POINT) {
+                            // If not points, merge geometries
+                            // (curves or surfaces)
+                            try {
+                                gitem = union(extracted);
+                                extracted = new ArrayList<Geometry>();
+                                extracted.add(gitem);
+                            } catch (Exception ex) {
+                                there_was_error = true;
+                                logger.info("Error in union.", ex);
+                            }
+                        } else {
+                            // only in the case of points, we can have several
+                            // geometries if source is multipoint
+                        }
+                    }
+                } else {
+                    extracted = new ArrayList<Geometry>();
+                    extracted.add(gitem);
+                }
+
+                for (int i=0; i<extracted.size(); i++) {
+                    gitem = extracted.get(i);
+
+                    if( gsubtype==Geometry.SUBTYPES.GEOM2D ) {
+                        gitem = force2D(gitem, geometryType);
+                    } else {
+                        gitem = force3D(gitem, geometryType);
+                    }
+                    edit_feat = target.createNewFeature(true);
+                    there_was_error = there_was_error |
+                    		/*
+                    		 * Accumulate error in boolean.
+                    		 * This also fixes field names (using origNameToDbfName)
+                    		 */
+                    		setNonNulls(featureStore.getDefaultFeatureType(),
+                    				targetType, feature, edit_feat);
+                    edit_feat.setDefaultGeometry(gitem);
+                    // ================================================
+                    // Reprojection stuff
+                    if (coord_trans != null) {
+                        reproj_geom = edit_feat.getDefaultGeometry();
+                        reproj_geom = reproj_geom.cloneGeometry();
+                        reproj_geom.reProject(coord_trans);
+                        edit_feat.setDefaultGeometry(reproj_geom);
+                    }
+                    // ================================================
+                    target.insert(edit_feat);
+                }
+
+                featureCount++;
+                this.taskStatus.setCurValue(featureCount);
+
+                if (this.taskStatus.isCancellationRequested()) {
+                    return;
+                }
+            }
+            target.finishEditing();
+            target.dispose();
+        } catch (Exception e) {
+            throw new ExporttoServiceException(e);
+        } finally {
+            DisposeUtils.dispose(it);
+        }
+
+        if (there_was_error) {
+            Exception cause = new Exception(
+                "_Issues_with_attributes_or_geometries");
+            throw new ExporttoServiceException(cause);
+        }
+    }
+
+
+    private void fixNames(EditableFeatureType eft) {
+
+    	FeatureAttributeDescriptor[] atts = eft.getAttributeDescriptors();
+    	EditableFeatureAttributeDescriptor efad = null;
+    	for (int i=0; i<atts.length; i++) {
+    		String new_name = origNameToDbfName.get(atts[i].getName());
+    		if (new_name != null) {
+    			eft.remove(atts[i].getName());
+    			efad = eft.add(new_name, atts[i].getType(), atts[i].getSize());
+    			efad.setPrecision(atts[i].getPrecision());
+    			if(atts[i].getDataType().getType() == DataTypes.GEOMETRY){
+    				efad.setGeometryType(atts[i].getGeomType());
+    			}
+    		}
+    	}
+	}
+
+	/**
+     * @param gitem
+     * @param geometryType2
+     * @return
+     */
+    private Geometry force2D(Geometry ge, int gt) throws CreateGeometryException {
+
+        if (ge.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM2D) {
+            return ge;
+        } else {
+            switch (gt) {
+            case Geometry.TYPES.POINT:
+                Point p = (Point) ge;
+                Point point = geoManager.createPoint(
+                    p.getX(), p.getY(),
+                    Geometry.SUBTYPES.GEOM2D);
+                return point;
+            case Geometry.TYPES.CURVE:
+                return geoManager.createCurve(ge.getGeneralPath(), Geometry.SUBTYPES.GEOM2D);
+            case Geometry.TYPES.SURFACE:
+                return geoManager.createSurface(ge.getGeneralPath(), Geometry.SUBTYPES.GEOM2D);
+            default:
+                return ge;
+            }
+        }
+    }
+
+    /**
+     * @param gitem
+     * @param geometryType2
+     * @return
+     */
+    private Geometry force3D(Geometry ge, int gt) throws CreateGeometryException {
+        // Los try catch que hay abajo, son para asegurarse de que la geometr�a original
+        // tiene las 3 dimensiones necesarias. A veces nos llegan geometr�as que aunque son de subtipo GEOM3D
+        // los puntos del generalPath que contienen no son 3D y no tienen la coordenada Z
+            Point point;
+            switch (gt) {
+            case Geometry.TYPES.POINT:
+                Point p = (Point) ge;
+                point = geoManager.createPoint(
+                    p.getX(), p.getY(),
+                    Geometry.SUBTYPES.GEOM3D);
+                try {
+                    point.setCoordinateAt(2, p.getCoordinateAt(2));
+                } catch (Exception e) {
+                    point.setCoordinateAt(2, 0);
+                }
+                return point;
+            case Geometry.TYPES.CURVE:
+                Line line = geoManager.createLine(Geometry.SUBTYPES.GEOM3D);
+                for (int i = 0; i < ((OrientablePrimitive)ge).getNumVertices(); i++) {
+                    Point vertex = ((OrientablePrimitive)ge).getVertex(i);
+                    point = geoManager.createPoint(vertex.getX(), vertex.getY(), Geometry.SUBTYPES.GEOM3D);
+                    try {
+                        point.setCoordinateAt(2, vertex.getCoordinateAt(2));
+                    } catch (Exception e) {
+                        point.setCoordinateAt(2, 0);
+                    }
+                    line.addVertex(point);
+                };
+                return line;
+
+            case Geometry.TYPES.SURFACE:
+                Polygon polygon = geoManager.createPolygon(Geometry.SUBTYPES.GEOM3D);
+                for (int i = 0; i < ((OrientablePrimitive)ge).getNumVertices(); i++) {
+                    Point vertex = ((OrientablePrimitive)ge).getVertex(i);
+                    point = geoManager.createPoint(vertex.getX(), vertex.getY(), Geometry.SUBTYPES.GEOM3D);
+                    try {
+                        point.setCoordinateAt(2, vertex.getCoordinateAt(2));
+                    } catch (Exception e) {
+                        point.setCoordinateAt(2, 0);
+                    }
+                    polygon.addVertex(point);
+                };
+                return polygon;
+            default:
+                return ge;
+            }
+    }
+    private void createPoint(int geom3d) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * @param feature
+     * @param edit_feat
+     */
+    private boolean setNonNulls(
+        FeatureType src_ft, FeatureType target_ft,
+        Feature feat, EditableFeature edit_f) {
+
+        boolean error = false;
+        FeatureAttributeDescriptor[] atts = src_ft.getAttributeDescriptors();
+        String orig_name = null;
+        String dbf_name = null;
+        for (int i=0; i<atts.length; i++) {
+            if (atts[i].getType() != org.gvsig.fmap.geom.DataTypes.GEOMETRY) {
+
+                Object val = null;
+
+                try {
+                	orig_name = atts[i].getName();
+                	dbf_name = origNameToDbfName.get(orig_name);
+                	if (dbf_name == null) {
+                		dbf_name = orig_name;
+                	}
+                    val = feat.get(orig_name);
+                    if (val != null) {
+                        edit_f.set(dbf_name, val);
+                    }
+                } catch (Exception ex) {
+                    logger.info("Error while getting/setting value", ex);
+                    error = true;
+                }
+            }
+        }
+        return error;
+    }
+
+    private Geometry union(List<Geometry> geoms)
+        throws GeometryOperationNotSupportedException, GeometryOperationException {
+
+        if (geoms == null || geoms.size() == 0) {
+            return null;
+        }
+
+        if (geoms.size() == 1) {
+            return geoms.get(0);
+        }
+
+        Geometry resp = geoms.get(0);
+        for (int i=1; i<geoms.size(); i++) {
+            resp = resp.union(geoms.get(i));
+        }
+        return resp;
+    }
+    /**
+     * @param feat_geom_type
+     * @param type must be POINT, LINE or POLYGON (Geometry.TYPES)
+     * @return
+     */
+    private List<Geometry> getGeometriesFrom(Geometry in_geom, int type) {
+
+        List<Geometry> resp = new ArrayList<Geometry>();
+        Aggregate agg = null;
+
+        /*
+         * If input geometry is aggregate, search its
+         * primitives
+         */
+        if (in_geom instanceof Aggregate) {
+            agg = (Aggregate) in_geom;
+            Geometry item = null;
+            List<Geometry> add_parts = new ArrayList<Geometry>();
+            for (int i=0; i<agg.getPrimitivesNumber(); i++) {
+                item = agg.getPrimitiveAt(i);
+                add_parts = getGeometriesFrom(item, type);
+                resp.addAll(add_parts);
+            }
+            return resp;
+        }
+
+        // ============================================
+
+        switch (type) {
+        case Geometry.TYPES.POINT:
+            if (in_geom instanceof Point) {
+                resp.add(in_geom);
+            }
+            // =======================================================
+            break;
+        case Geometry.TYPES.CURVE:
+            if (in_geom instanceof Curve) {
+                resp.add(in_geom);
+            }
+            // =======================================================
+            break;
+        case Geometry.TYPES.SURFACE:
+            if (in_geom instanceof Surface) {
+                resp.add(in_geom);
+            }
+            // =======================================================
+            break;
+        }
+        return resp;
+    }
+
+    private void finishAction(String layerName, File shp_file, IProjection proj)
+    throws ExporttoServiceException {
+
+        if (exporttoServiceFinishAction != null) {
+
+            /*
+             * Export is done. We notify with a SHPStoreParameters,
+             * not with the NewSHPParameters we have used:
+             */
+        	DataStoreParameters shp_params = null;
+            try {
+	            shp_params = DALLocator.getDataManager().createStoreParameters("Shape");
+	            shp_params.setDynValue("shpfile", shp_file);
+	            shp_params.setDynValue("CRS", proj);
+
+                shp_params.validate();
+            } catch (Exception e) {
+                throw new ExporttoServiceException(e);
+            }
+            exporttoServiceFinishAction.finished(layerName, shp_params);
+        }
+    }
+
+    public void setFinishAction(
+        ExporttoServiceFinishAction exporttoServiceFinishAction) {
+        this.exporttoServiceFinishAction = exporttoServiceFinishAction;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderFactory.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.shape;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoShapeProviderFactory extends
+    AbstractExporttoFileProviderFactory {
+
+    private static final String PROVIDER_NAME = "Shape";
+
+    public ExporttoShapeProviderFactory() {
+        super(new int[] { ExporttoSwingManager.VECTORIAL_TABLE_WITH_GEOMETRY });
+    }
+
+    public Provider create(DynObject parameters, ProviderServices services)
+        throws ServiceException {
+        return new ExporttoShapeProvider(services,
+            (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE),
+            (IProjection) parameters.getDynValue(PARAMETER_PROJECTION));
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider which gets Exporto from a file.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProvider.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.shape;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoShapeProvider extends AbstractExporttoFileProvider
+    implements ExporttoSwingProvider {
+
+    /**
+     * Constructor.
+     * 
+     * @param providerServices
+     *            the services for the provider
+     * @param file
+     *            to get the Exporto from
+     */
+    public ExporttoShapeProvider(ProviderServices providerServices,
+        FeatureStore featureStore, IProjection projection) {
+        super(providerServices, featureStore, projection);
+    }
+
+    public ExporttoService createExporttoService() {
+        return new ExporttoShapeService(
+            selectFileOptionPanel, featureStore, projection);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/src/main/java/org/gvsig/exportto/swing/prov/shape/ExporttoShapeProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/pom.xml	(revision 42196)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov.shape</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.file</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.dbf</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+  </dependencies>
+</project>
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.shape
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.prov.dxf.ExporttoDXFProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderLibrary.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dxf;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+/**
+ * Library to initialize and register the file Exporto provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoDXFProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        providerManager.addProviderFactory(new ExporttoDXFProviderFactory());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFService.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dxf;
+
+import java.io.File;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileService;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoDXFService extends AbstractExporttoFileService implements
+    ExporttoService {
+
+    private IProjection projection;
+
+    private NewFeatureStoreParameters newFeatureStoreParameters;
+
+    public ExporttoDXFService(File dxfFile, FeatureStore featureStore,
+        IProjection projection) {
+        super(dxfFile, featureStore);
+        this.projection = projection;
+        try {
+            this.open();
+        } catch (ExporttoServiceException e) {
+            ((SimpleTaskStatus) getTaskStatus()).message(e.getMessage());
+        }
+    }
+
+    public NewFeatureStoreParameters getNewFeatureStoreParameters() {
+        return newFeatureStoreParameters;
+    }
+
+    public void addParameters(
+        NewFeatureStoreParameters newFeatureStoreParameters) {
+        newFeatureStoreParameters.setDynValue("CRS", projection);
+    }
+
+    public String getFileExtension() {
+        return "dxf";
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderFactory.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dxf;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoDXFProviderFactory extends
+    AbstractExporttoFileProviderFactory {
+
+    private static final String PROVIDER_NAME = "DXF";
+
+    public ExporttoDXFProviderFactory() {
+        super(new int[] { ExporttoSwingManager.VECTORIAL_TABLE_WITH_GEOMETRY });
+    }
+
+    public Provider create(DynObject parameters, ProviderServices services)
+        throws ServiceException {
+        return new ExporttoDXFProvider(services,
+            (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE),
+            (IProjection) parameters.getDynValue(PARAMETER_PROJECTION));
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider which gets Exporto from a file.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProvider.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.dxf;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoDXFProvider extends AbstractExporttoFileProvider implements
+    ExporttoSwingProvider {
+
+    /**
+     * Constructor.
+     * 
+     * @param providerServices
+     *            the services for the provider
+     * @param file
+     *            to get the Exporto from
+     */
+    public ExporttoDXFProvider(ProviderServices providerServices,
+        FeatureStore featureStore, IProjection projection) {
+        super(providerServices, featureStore, projection);
+    }
+
+    public ExporttoService createExporttoService() {
+        return new ExporttoDXFService(selectFileOptionPanel.getSelectedFile(),
+            featureStore, projection);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/src/main/java/org/gvsig/exportto/swing/prov/dxf/ExporttoDXFProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/pom.xml	(revision 42196)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov.dxf</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.exportto.swing.prov.file</artifactId>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.dxf
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/resources/org/gvsig/exportto/swing/prov/jdbc/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/resources/org/gvsig/exportto/swing/prov/jdbc/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/resources/org/gvsig/exportto/swing/prov/jdbc/text.properties	(revision 42196)
@@ -0,0 +1,51 @@
+_Abort_process=Abortar el proceso
+add_table=A\u00f1adir tabla
+add_table_to_project=\u00bfDesea a\u00f1adir la tabla al proyecto?
+_All=Todos
+_check_geometries_before_export=Comprobar las geometrias antes de exportar
+_check_geometries_before_export_header=Validacion de la informacion geometrica
+_Comprobar_la_validez_de_las_geometrias_antes_de_insertarlas=Comprobar la validez de las geometrias antes de insertarlas
+_Comprobar_que_la_geometria_no_este_corrupta=Comprobar que la geometria no este corrupta
+_Crear_indice_espacial_sobre_las_columnas_de_tipo_geometria=Crear indice espacial sobre las columnas de tipo geometria
+_Crear_una_tabla_nueva=Crear una tabla nueva
+_Create_spatial_index=Creacion de indice espacial
+_Create_spatial_index_header=Si la tabla contiene columnas de tipo geometria es recomendable que cree un indice espacial sobre ellas.
+_Cuando_la_geometria_este_corrupta=Cuando la geometria este corrupta
+_Cuando_la_geometria_no_sea_valida=Cuando la geometria no sea valida
+_Desea_crear_una_clave_primaria=\u00bf Desea crear una clave primaria ?
+exportto_preferences=Export to
+exportto_preferences_panel_description=Enable or disable "export to" formats
+_Generar_una_clave_primaria_con_un_serial=Generar una clave primaria con un serial
+_Indique_donde_desea_insertar_los_datos=Indique donde desea insertar los datos
+_Indique_el_esquema_en_el_que_desea_crear_la_tabla=Indique el esquema en el que desea crear la tabla\:
+_Indique_el_nombre_a_usar_para_la_clave_primaria=Indique el nombre de a usar para la clave primaria
+_Indique_el_nombre_de_la_tabla=Indique el nombre de la tabla\:
+_Insertar_registros_en_una_tabla_existente=Insertar registros en una tabla existente
+_Intentar_reparar_la_geometria=Intentar reparar la geometria
+_Introducir_sentencia_a_ejecutar_tras_la_creacion_de_la_tabla=Introducir sentencia a ejecutar tras la creacion de la tabla
+_La_tabla_{0}_{1}_ya_existe_en_la_base_de_datos_Seleccione_la_opcion_de_insertar_registros_en_una_tabla_existente_para_a\u00f1adir_los_datos_a_esta_o_indique_otro_nombre=La tabla "{0}.{1}" ya existe en la base de datos.\nSeleccione la opcion de insertar registros en una tabla existente para a\u00f1adir los datos a esta o indique otro nombre.
+_Los_datos_se_insertaran_usando_los_nombres_de_columna_que_coincidan_con_la_tabla_origen_dejandose_al_valor_por_defecto_para_los_que_no_haya_valores_en_la_tabla_origen=Los datos se insertaran usando los nombres de columna que coincidan con la tabla origen, dejandose al valor por defecto para los que no haya valores en la tabla origen.
+_No_hacer_nada_en_relacion_a_la_creacion_de_la_clave_primaria=No hacer nada en relacion a la creacion de la clave primaria.
+_No_realizar_ninguna_comprobacion_sobre_las_geometrias=No realizar ninguna comprobacion sobre las geometrias
+_Permissions_header=Puede indicar permisos que desea se asignen a la tabla una vez creada.<br> Marque que privilegios desea le sean asignados e indique para cada uno que <i>perfil</i>, usuario o grupo, desea que tenga ese privilegio.<br> Puede indicar mas de un <i>perfil</i> separandolos por comas.
+_Permissions=Permisos
+_Post_creating_statement_header=Puede indicar una sentencia SQL a ejecutar tras la creacion de la tabla en la base de datos.<br> Esto puede ser de utilidad para asignar una configuracion de permisos peculiar, para crear algun tipo de indice que no cree la aplicacion por defecto o a\u00f1adir alguna columna a la tabla que no este en la tabla original.
+_Post_creating_statement=Sentencias postcreacion
+_Primary_key=Clave primaria
+_Primary_key_msg=Para que gvSIG pueda trabajar correctamente con tablas de BBDD es muy recomendable que esta disponga de una clave primaria definida. Si no  la tiene e intenta cargarla en gvSIG puede que algunas operaciones no funcionen adecuadamente.
+_Recalcular_estadisticas_de_la_tabla_al_terminar=Recalcular estadisticas de la tabla al terminar
+_role=Perfil
+_Seleccione_el_campo_a_usar_como_clave_primaria=Seleccione el campo a usar como clave primaria:
+_Seleccione_la_tabla_a_usar=Seleccione la tabla a usar\:
+_Set_geometry_to_null=Asignar la geometria a null
+_Skip_entire_feature=No insertar la feature
+_Table_and_fields_name_options_header=Algunas bases de datos precisan tratar los identificadores de tabla o campo que tienen mayusculas y minusculas mezcladas, o espacios en blanco de forma especial a la hora de referirse a ellos.  Es recomendable que no los utilice para evitar problemas.<br> Puede indicar al asistente que traslade todos los nombres de campo a minusculas y que use "_" en lugar de espacios en blanco en el nombre de tabla si los hubiese.
+_Table_and_fields_name_options=Opciones del nombre de tabla y campos
+_Tablename=Nombre de tabla
+_The_name_of_schema_cannot_be_empty=Debera especificar un nombre de esquema.
+_The_name_of_table_cannot_be_empty=Debera especificar un nombre de table.
+_Trasladar_espacios_a_guiones=Trasladar espacios a "_"
+_Trasladar_identificadores_a_minusculas=Trasladar identificadores a min\u00fasculas
+_update_table_statistics=Actualizar estadisticas de la tabla
+_update_table_statistics_header=Algunos gestores de base de datos tienen la opcion de recopilar estadisticas de los datos de  las tablas para optimizar el acceso a los datos tras una insercion masiva de estos.<br> Puede indicar aqui si desea que se realice esta operacion al final de la exportacion.
+_Utilizar_un_campo_existente_como_clave_primaria=Utilizar un campo existente como clave primaria.

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/resources/org/gvsig/exportto/swing/prov/jdbc/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCProviderLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporrtoJDBCService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporrtoJDBCService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporrtoJDBCService.java	(revision 42196)
@@ -0,0 +1,368 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.jdbc;
+
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.ExporttoServiceException;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class ExporrtoJDBCService extends AbstractMonitorableTask implements
+        ExporttoService {
+
+    private static final Logger logger = LoggerFactory.getLogger(ExporrtoJDBCService.class);
+
+    public static final int CHECK_NONE = 0;
+    public static final int CHECK_IF_CORRUPT = 1;
+    public static final int CHECK_IF_VALID = 2;
+
+    public static final int ACTION_SET_GEOMETRY_TO_NULL = 0;
+    public static final int ACTION_SKIP_FEATURE = 1;
+    public static final int ACTION_ABORT = 2;
+
+    private ExporttoServiceFinishAction exporttoServiceFinishAction = null;
+    private ExporttoJDBCOptions options;
+//    private Map<String,String> translationIds;
+
+    public ExporrtoJDBCService(ExporttoJDBCOptions options) {
+        this.options = options;
+    }
+
+    protected String getTranslatedIdentifier(String identifier) {
+        String s = identifier;
+        if (this.options.getTranslateIdentifiersToLowerCase()) {
+            s = s.toLowerCase();
+        }
+        if (this.options.getRemoveSpacesInIdentifiers()) {
+            s = StringUtils.normalizeSpace(s).replace(" ", "_");
+        }
+        return s;
+    }
+
+    protected void createTable(JDBCServerExplorer explorer) throws Exception {
+
+        FeatureType targetFeatureType;
+        EditableFeatureType targetEditableFeatureType;
+
+        targetFeatureType = options.getSource().getDefaultFeatureType().getCopy();
+        targetEditableFeatureType = targetFeatureType.getEditable();
+
+        if (this.options.getTranslateIdentifiersToLowerCase()
+                || this.options.getRemoveSpacesInIdentifiers()) {
+            for (int i = 0; i < targetEditableFeatureType.size(); i++) {
+                EditableFeatureAttributeDescriptor x = (EditableFeatureAttributeDescriptor) targetEditableFeatureType.get(i);
+                x.setName(getTranslatedIdentifier(x.getName()));
+            }
+        }
+
+        if (this.options.getPrimaryKey() != null) {
+            EditableFeatureAttributeDescriptor pk = (EditableFeatureAttributeDescriptor) targetEditableFeatureType.get(getTranslatedIdentifier(options.getPrimaryKey()));
+            if (pk == null) {
+                pk = targetEditableFeatureType.add(
+                        getTranslatedIdentifier(this.options.getPrimaryKey()),
+                        DataTypes.LONG
+                );
+                pk.setIsPrimaryKey(true);
+                pk.setIsAutomatic(true);
+            } else {
+                pk.setIsPrimaryKey(true);
+            }
+        }
+
+        if (this.options.getCreateIndexInGeometryRow()) {
+            EditableFeatureAttributeDescriptor x = (EditableFeatureAttributeDescriptor) targetEditableFeatureType.getDefaultGeometryAttribute();
+            x.setIsIndexed(true);
+        }
+
+        // ======================================================
+        // Reprojection: set SRS of geometry field to target SRS
+        EditableFeatureAttributeDescriptor attrdescriptor
+                = (EditableFeatureAttributeDescriptor) targetEditableFeatureType.getDefaultGeometryAttribute();
+        if (attrdescriptor != null) {
+            attrdescriptor.setSRS(this.options.getTargetProjection());
+        }
+
+        // ======================================
+        JDBCNewStoreParameters createTableParams = (JDBCNewStoreParameters) explorer.getAddParameters();
+
+        createTableParams.setSelectRole(this.options.getSelectRole());
+        createTableParams.setInsertRole(this.options.getInsertRole());
+        createTableParams.setUpdateRole(this.options.getUpdateRole());
+        createTableParams.setDeleteRole(this.options.getDeleteRole());
+        createTableParams.setTruncateRole(this.options.getTruncateRole());
+        createTableParams.setReferenceRole(this.options.getReferenceRole());
+        createTableParams.setTriggerRole(this.options.getTriggerRole());
+        createTableParams.setAllRole(this.options.getAllRole());
+
+        createTableParams.setSchema(this.options.getSchema());
+        createTableParams.setPostCreatingStatement(this.options.getPostCreatingStatement());
+
+        createTableParams.setDefaultFeatureType(targetEditableFeatureType);
+        createTableParams.setTable(this.options.getTableName());
+        explorer.add(explorer.getStoreName(), createTableParams, true);
+    }
+
+    private static class InvalidGeometryException extends ExporttoServiceException {
+
+        public InvalidGeometryException(Feature feature, String checkMessage) {
+            super(checkMessage, null, checkMessage, 0);
+            this.feature = feature;
+        }
+    }
+
+    public void export(FeatureSet featureSet) throws ExporttoServiceException {
+        Geometry.ValidationStatus geometryCheck;
+
+        DisposableIterator it = null;
+        EditableFeature targetFeature = null;
+        FeatureStore target = null;
+
+        try {
+
+            // ======================================
+            // Reprojection 
+            FeatureAttributeDescriptor geo_att = this.options.getSource().getDefaultFeatureType().getDefaultGeometryAttribute();
+            IProjection sourceProjection = null;
+            ICoordTrans coord_trans = null;
+            Geometry reproj_geom = null;
+            if (geo_att != null) {
+                sourceProjection = geo_att.getSRS();
+                // this comparison is perhaps too preventive
+                // we could  have two instances of same projection
+                // so we would do more computations than needed
+                if (sourceProjection != null && sourceProjection != this.options.getTargetProjection()) {
+                    coord_trans = sourceProjection.getCT(this.options.getTargetProjection());
+                }
+            }
+            // ============================================
+
+            DataManager dataManager = DALLocator.getDataManager();
+
+            JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
+                    this.options.getExplorerParameters().getExplorerName(),
+                    this.options.getExplorerParameters()
+            );
+
+            if (this.options.canCreatetable()) {
+                logger.debug("Creating table");
+                taskStatus.message("Creating table");
+                this.createTable(explorer);
+            }
+
+            JDBCStoreParameters openParams = (JDBCStoreParameters) explorer.getOpenParameters();
+            openParams.setSchema(this.options.getSchema());
+            openParams.setTable(this.options.getTableName());
+            openParams.setCRS(this.options.getTargetProjection());
+            openParams.setDefaultGeometryField(
+                    this.options.getSource().getDefaultFeatureType().getDefaultGeometryAttributeName()
+            );
+            target = (FeatureStore) explorer.open(openParams);
+
+            FeatureType targetFeatureType = target.getDefaultFeatureType();
+            FeatureType sourceFeatureType = featureSet.getDefaultFeatureType();
+
+            target.edit(FeatureStore.MODE_APPEND);
+
+            int featureCount = 1;
+            taskStatus.setRangeOfValues(0, featureSet.getSize());
+
+            int targetGeometryIndex = -1;
+            int sourceGeometryIndex = -1;
+            if( getGeometryColumnCount(sourceFeatureType)==1 
+                    && getGeometryColumnCount(targetFeatureType)==1 ) {
+                // Solo si hay una columna de geometria asignaremos las geometrias 
+                // independientemente de como se llamen los campos.
+                targetGeometryIndex = targetFeatureType.getDefaultGeometryAttributeIndex();
+                sourceGeometryIndex = sourceFeatureType.getDefaultGeometryAttributeIndex();
+            }
+            
+            logger.debug("Inserting rows");
+            taskStatus.message("Inserting rows");
+            it = featureSet.fastIterator();
+            while (it.hasNext()) {
+                Feature feature = (Feature) it.next();
+                this.taskStatus.setCurValue(featureCount);
+
+                targetFeature = target.createNewFeature(targetFeatureType, feature);
+                for (int i = 0; i < sourceFeatureType.size(); i++) {
+                    if (i == sourceGeometryIndex) {
+                        // Es facil que los campos geometria no se llamen igual, asi que
+                        // el campo geometria lo asignamos a capon.
+                        // Esto puede ocasionar problemas cuando la tabla destino no tenga
+                        // geometria o tenga mas de una.
+                        targetFeature.set(targetGeometryIndex, feature.get(sourceGeometryIndex));
+                    } else {
+                        FeatureAttributeDescriptor x = sourceFeatureType.getAttributeDescriptor(i);
+                        int targetAttributeIndex = targetFeatureType.getIndex(getTranslatedIdentifier(x.getName()));
+                        if (targetAttributeIndex < 0) {
+                            throw new RuntimeException("Can't locate column '" + x.getName() + "' in the target table.");
+                        }
+                        targetFeature.set(targetAttributeIndex, feature.get(x.getName()));
+                    }
+                }
+
+                Geometry geometry = targetFeature.getDefaultGeometry();
+                if (geometry != null) {
+                    switch (this.options.getGeometryChecks()) {
+                        case CHECK_IF_CORRUPT:
+                            geometryCheck = geometry.getValidationStatus();
+                            if (geometryCheck.getStatusCode() == Geometry.ValidationStatus.CURRUPTED) {
+                                switch (this.options.getGeometryChecksAction()) {
+                                    case ACTION_SET_GEOMETRY_TO_NULL:
+                                        targetFeature.setDefaultGeometry(null);
+                                        break;
+                                    case ACTION_SKIP_FEATURE:
+                                        continue;
+                                    case ACTION_ABORT:
+                                    default:
+                                        throw new InvalidGeometryException(targetFeature, geometryCheck.getMessage());
+                                }
+                            }
+
+                            break;
+
+                        case CHECK_IF_VALID:
+                            geometryCheck = geometry.getValidationStatus();
+                            if (!geometryCheck.isValid()) {
+                                Geometry g = null;
+                                if (this.options.getTryToFixGeometry()) {
+                                    g = geometry.makeValid();
+                                    if (g != null) {
+                                        targetFeature.setDefaultGeometry(g);
+                                    }
+                                }
+                                if (g == null) {
+                                    switch (this.options.getGeometryChecksAction()) {
+                                        case ACTION_SET_GEOMETRY_TO_NULL:
+                                            targetFeature.setDefaultGeometry(null);
+                                            break;
+                                        case ACTION_SKIP_FEATURE:
+                                            continue;
+                                        case ACTION_ABORT:
+                                        default:
+                                            throw new InvalidGeometryException(targetFeature, geometryCheck.getMessage());
+                                    }
+                                }
+                            }
+
+                            break;
+                        case CHECK_NONE:
+                        default:
+                            break;
+                    }
+                    // ================================================
+                    // Reprojection 
+                    if (geo_att != null && coord_trans != null) {
+                        reproj_geom = targetFeature.getDefaultGeometry();
+                        reproj_geom = reproj_geom.cloneGeometry();
+                        reproj_geom.reProject(coord_trans);
+                        targetFeature.setDefaultGeometry(reproj_geom);
+                    }
+                    // ================================================
+                }
+
+                target.insert(targetFeature);
+
+                if (this.taskStatus.isCancellationRequested()) {
+                    return;
+                }
+                featureCount++;
+            }
+            targetFeature = null;
+            target.finishEditing();
+
+            if (this.options.getUpdateTableStatistics()) {
+                logger.debug("Updating statistics");
+                taskStatus.message("Updating statistics");
+                explorer.updateTableStatistics(openParams.tableID());
+            }
+            logger.debug("finish");
+
+            if (exporttoServiceFinishAction != null) {
+                exporttoServiceFinishAction.finished(
+                        this.options.getTableName() + " (" + explorer.getStoreName() + ")",
+                        openParams);
+            }
+            taskStatus.message("Exportation finished");
+
+        } catch (Exception e) {
+            logger.warn("Can't export data.", e);
+            taskStatus.message("Problems exporting data");
+            throw new ExporttoServiceException(e, targetFeature);
+
+        } finally {
+            if (it != null) {
+                it.dispose();
+            }
+            featureSet.dispose();
+            if (target != null) {
+                target.dispose();
+            }
+            this.taskStatus.terminate();
+            this.taskStatus.remove();
+        }
+    }
+    
+    private int getGeometryColumnCount(FeatureType featureType) {
+        int count = 0;
+        for( int i=0; i<featureType.size(); i++ ) {
+            if( featureType.getAttributeDescriptor(i).getType()==DataTypes.GEOMETRY ) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    public void setFinishAction(
+            ExporttoServiceFinishAction exporttoServiceFinishAction) {
+        this.exporttoServiceFinishAction = exporttoServiceFinishAction;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporrtoJDBCService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporttoJDBCProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporttoJDBCProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporttoJDBCProviderLibrary.java	(revision 42196)
@@ -0,0 +1,34 @@
+package org.gvsig.exportto.swing.prov.jdbc;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+public class ExporttoJDBCProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        i18nManager.addResourceFamily(
+                "org.gvsig.exportto.swing.prov.jdbc",
+                ExporttoJDBCProviderLibrary.class.getClassLoader(),
+                ExporttoJDBCProviderLibrary.class.getClass().getName()
+        );
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ProviderManager providerManager = ExporttoSwingProviderLocator.getManager();
+        providerManager.addProviderFactory(new BaseExporttoJDBCProviderFactory());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProvider.java	(revision 42196)
@@ -0,0 +1,256 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.jdbc;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import javax.swing.DefaultListModel;
+import org.cresques.cts.IProjection;
+import org.gvsig.exportto.ExporttoService;
+import org.gvsig.exportto.swing.prov.jdbc.panel.CheckGeometriesPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.GeometryIndexPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.IdentifiersOptionsPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.JDBCConnectionPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.UpdateTableStatisticsPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.PermissionsPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.PostCreatingStatementPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.SelectPkPanel;
+import org.gvsig.exportto.swing.prov.jdbc.panel.SelectTableNamePanel;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.tools.service.spi.AbstractProvider;
+import org.gvsig.tools.service.spi.ProviderServices;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class BaseExporttoJDBCProvider extends AbstractProvider
+        implements ExporttoJDBCOptions, ExporttoSwingProvider {
+
+    private static Logger logger = LoggerFactory.getLogger(
+            BaseExporttoJDBCProvider.class);
+
+    protected List<ExporttoSwingProviderPanel> panels = new ArrayList<ExporttoSwingProviderPanel>();
+
+    protected FeatureStore sourceStore;
+    protected IProjection projection;
+    private final JDBCConnectionPanel connectionPanel;
+    private final SelectPkPanel selectPkPanel;
+    private final SelectTableNamePanel selectTableNamePanel;
+    private final CheckGeometriesPanel checkGeometriesPanel;
+    private final IdentifiersOptionsPanel identifiersOptionsPanel;
+    
+    private final GeometryIndexPanel geometryIndexPanel;
+    private final UpdateTableStatisticsPanel updateTableStatistics;
+    private final PermissionsPanel permissionsPanel;
+    private final PostCreatingStatementPanel postCreatingStatementPanel;
+
+    private String storeName = null;
+    
+    public BaseExporttoJDBCProvider(ProviderServices providerServices,
+            FeatureStore sourceStore, IProjection projection) {
+        super(providerServices);
+        this.sourceStore = sourceStore;
+        this.projection = projection;
+
+        FeatureType ftype = null;
+        try {
+            ftype = sourceStore.getDefaultFeatureType();
+        } catch (Exception exc) {
+            logger.warn("Can't retrieve the feature type to use in the export to JDBC panel.", exc);
+
+        }
+        this.connectionPanel = new JDBCConnectionPanel(this);
+        this.selectTableNamePanel = new SelectTableNamePanel(this);
+        this.selectPkPanel = new SelectPkPanel(this);
+        this.checkGeometriesPanel = new CheckGeometriesPanel(this);
+        this.identifiersOptionsPanel = new IdentifiersOptionsPanel(this);
+        
+        this.geometryIndexPanel = new GeometryIndexPanel(this);
+        this.updateTableStatistics = new UpdateTableStatisticsPanel(this);
+        this.permissionsPanel = new PermissionsPanel(this);
+        this.postCreatingStatementPanel = new PostCreatingStatementPanel(this);                
+
+        this.panels.add(this.identifiersOptionsPanel);
+        this.panels.add(this.connectionPanel);
+        this.panels.add(this.selectTableNamePanel);
+        this.panels.add(this.selectPkPanel);
+        this.panels.add(this.geometryIndexPanel);        
+        this.panels.add(this.checkGeometriesPanel);
+        
+        this.panels.add(this.permissionsPanel);
+        this.panels.add(this.updateTableStatistics);
+        this.panels.add(this.postCreatingStatementPanel);
+        
+    }
+    
+    
+
+    public int getPanelCount() {
+        return this.panels.size();
+    }
+
+    public ExporttoSwingProviderPanel getPanelAt(int index) {
+        return this.panels.get(index);
+    }
+
+    public FeatureStore getSource() {
+        return this.sourceStore;
+    }
+
+    public ExporttoService createExporttoService() {
+        JDBCServerExplorerParameters explorerParameters = this.getExplorerParameters();
+        explorerParameters.setSchema(this.getSchema());
+        return new ExporrtoJDBCService(this);
+    }
+
+    public boolean getTranslateIdentifiersToLowerCase() {
+        return this.identifiersOptionsPanel.getTranslateToLowerCase();
+    }
+
+    public boolean getRemoveSpacesInIdentifiers() {
+        return this.identifiersOptionsPanel.getRemoveSpacesInTableName();
+    }
+    
+    public JDBCServerExplorerParameters getExplorerParameters() {
+        return this.connectionPanel.getServerExplorerParameters();
+    }
+
+    public String getSchema() {
+        return this.selectTableNamePanel.getSchema();
+    }
+
+    public String getTableName() {
+        return this.selectTableNamePanel.getTableName();
+    }
+
+    public boolean canCreatetable() {
+        return this.selectTableNamePanel.canCreateTable();
+    }
+
+    public String getPrimaryKey() {
+        return this.selectPkPanel.getPrimaryKeyName();
+    }
+
+    public int getGeometryChecks() {
+        return this.checkGeometriesPanel.getGeometryChecks();
+    }
+
+    public int getGeometryChecksAction() {
+        return this.checkGeometriesPanel.getGeometryChecksAction();
+    }
+
+    public boolean getTryToFixGeometry() {
+        return this.checkGeometriesPanel.getTryToFixGeometry();
+    }
+
+    public String getExplorerName() {
+        return this.connectionPanel.getServerExplorerParameters().getExplorerName();
+    }
+
+    public String getStoreName() {
+        if ( this.storeName == null ) {
+            try {
+                JDBCServerExplorerParameters explorerParameters = this.getExplorerParameters();
+                if ( explorerParameters == null ) {
+                    return null;
+                }
+                DataManager dataManager = DALLocator.getDataManager();
+
+                JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
+                        explorerParameters.getExplorerName(),
+                        explorerParameters
+                );
+                this.storeName = explorer.getStoreName();
+            } catch (Exception ex) {
+                return null;
+            }
+        }
+        return this.storeName;
+    }
+
+    public IProjection getTargetProjection() {
+        return this.projection;
+    }
+
+    public String getSelectRole() {
+        return this.permissionsPanel.getSelectRole();
+    }
+
+    public String getInsertRole() {
+        return this.permissionsPanel.getInsertRole();
+    }
+
+    public String getUpdateRole() {
+        return this.permissionsPanel.getUpdateRole();
+    }
+
+    public String getDeleteRole() {
+        return this.permissionsPanel.getDeleteRole();
+    }
+
+    public String getTruncateRole() {
+        return this.permissionsPanel.getTruncateRole();
+    }
+
+    public String getReferenceRole() {
+        return this.permissionsPanel.getReferenceRole();
+    }
+
+    public String getTriggerRole() {
+        return this.permissionsPanel.getTriggerRole();
+    }
+
+    public String getAllRole() {
+        return this.permissionsPanel.getAllRole();
+    }
+
+    public String getPostCreatingStatement() {
+        return this.postCreatingStatementPanel.getPostCreatingStatement();
+    }
+
+    public boolean getCreateIndexInGeometryRow() {
+        return this.geometryIndexPanel.getCreateIndexInGeometryRow();
+    }
+
+    public boolean getUpdateTableStatistics() {
+        return this.updateTableStatistics.getUpdateTableStatistics();
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider which gets Exporto from a file.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanelLayout.form	(revision 42196)
@@ -0,0 +1,429 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="1"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-70,0,0,2,11"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Algunos gestores de base de datos tienen la opcion de recopilar estadisticas de los datos de  las tablas para optimizar el acceso a los datos tras una insercion masiva de estos.&lt;br&gt;&#xa;Puede indicar aqui si desea que se realice esta operacion al final de la exportacion.&#xa;&lt;/html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkUpdateStatisticsTableAfterInserts">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Recalcular estadisticas de  la tabla al terminar"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="6" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9_lblHeader">
+          <CodeVariable name="lblHeader" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="10_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="10_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13_filler1">
+          <CodeVariable name="filler1" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="10_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="14_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19_chkUpdateStatisticsTableAfterInserts">
+          <CodeVariable name="chkUpdateStatisticsTableAfterInserts" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkUpdateStatisticsTableAfterInserts"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="14_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="20_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25_filler2">
+          <CodeVariable name="filler2" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="20_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanelLayout.java	(revision 42196)
@@ -0,0 +1,109 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.Box;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import org.jdesktop.layout.GroupLayout;
+
+/**
+ *
+ * @author usuario
+ */
+public class PostCreatingStatementPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form PostCreatingStatementPanelLayout
+     */
+    public PostCreatingStatementPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        lblHeader = new JLabel();
+        filler1 = new Box.Filler(new Dimension(16, 0), new Dimension(16, 0), new Dimension(16, 32767));
+        jScrollPane1 = new JScrollPane();
+        txtPostCreatingStatement = new JTextArea();
+        filler2 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        chkUsePostCreatingStatement = new JCheckBox();
+        filler3 = new Box.Filler(new Dimension(16, 0), new Dimension(16, 0), new Dimension(16, 32767));
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        lblHeader.setText("<html>\nPuede indicar una sentencia SQL a ejecutar tras la creacion de la tabla en la base de datos.<br>\nEsto puede ser de utilidad para asignar una configuracion de permisos peculiar, para crear algun tipo de indice que no cree la aplicacion por defecto o a�adir alguna columna a la tabla que no este en la tabla original.\n</html>"); // NOI18N
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(lblHeader, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 0;
+        add(filler1, gridBagConstraints);
+
+        txtPostCreatingStatement.setColumns(20);
+        txtPostCreatingStatement.setRows(5);
+        jScrollPane1.setViewportView(txtPostCreatingStatement);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.anchor = GridBagConstraints.FIRST_LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.1;
+        add(jScrollPane1, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = GridBagConstraints.VERTICAL;
+        add(filler2, gridBagConstraints);
+
+        chkUsePostCreatingStatement.setText("Introducir  sentencia a ejecutar tras la creacion de la tabla");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(chkUsePostCreatingStatement, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        add(filler3, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    public JCheckBox chkUsePostCreatingStatement;
+    public Box.Filler filler1;
+    public Box.Filler filler2;
+    public Box.Filler filler3;
+    public JScrollPane jScrollPane1;
+    public JLabel lblHeader;
+    public JTextArea txtPostCreatingStatement;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanelLayout.java	(revision 42196)
@@ -0,0 +1,160 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SelectTableNamePanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form SelectTableNamePanelLayout
+     */
+    public SelectTableNamePanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        buttonGroup1 = new javax.swing.ButtonGroup();
+        lblHeader = new javax.swing.JLabel();
+        lblWarningUseExistingTable = new javax.swing.JLabel();
+        rdoInsert = new javax.swing.JRadioButton();
+        lblSelectTableName = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        lstTables = new javax.swing.JList();
+        rdoCreateTable = new javax.swing.JRadioButton();
+        lblSchema = new javax.swing.JLabel();
+        txtSchema = new javax.swing.JTextField();
+        lblTableName = new javax.swing.JLabel();
+        txtTableName = new javax.swing.JTextField();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0, 5, 0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        lblHeader.setText("Indique donde desea insertar los datos"); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(lblHeader, gridBagConstraints);
+
+        lblWarningUseExistingTable.setText("<html>\nLos datos se insertaran usando los nombres de columna que coincidan con \n    la tabla origen, dejandose al valor por defecto para los que no \n    haya valores en la tabla origen\n</html>"); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.2;
+        add(lblWarningUseExistingTable, gridBagConstraints);
+
+        buttonGroup1.add(rdoInsert);
+        rdoInsert.setText("Insertar registros en una tabla existente");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(rdoInsert, gridBagConstraints);
+
+        lblSelectTableName.setText("Seleccione la tabla a usar:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(lblSelectTableName, gridBagConstraints);
+
+        jScrollPane1.setViewportView(lstTables);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.2;
+        add(jScrollPane1, gridBagConstraints);
+
+        buttonGroup1.add(rdoCreateTable);
+        rdoCreateTable.setText("Crear una tabla nueva");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(rdoCreateTable, gridBagConstraints);
+
+        lblSchema.setText("Indique el esquema en el que desea crear la tabla:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(lblSchema, gridBagConstraints);
+
+        txtSchema.setText("public");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtSchema, gridBagConstraints);
+
+        lblTableName.setText("Indique el nombre de la tabla:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(lblTableName, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 20;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtTableName, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 0;
+        add(filler1, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 22;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.1;
+        add(filler2, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected javax.swing.ButtonGroup buttonGroup1;
+    protected javax.swing.Box.Filler filler1;
+    protected javax.swing.Box.Filler filler2;
+    protected javax.swing.JScrollPane jScrollPane1;
+    protected javax.swing.JLabel lblHeader;
+    protected javax.swing.JLabel lblSchema;
+    protected javax.swing.JLabel lblSelectTableName;
+    protected javax.swing.JLabel lblTableName;
+    protected javax.swing.JLabel lblWarningUseExistingTable;
+    protected javax.swing.JList lstTables;
+    protected javax.swing.JRadioButton rdoCreateTable;
+    protected javax.swing.JRadioButton rdoInsert;
+    protected javax.swing.JTextField txtSchema;
+    protected javax.swing.JTextField txtTableName;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanel.java	(revision 42196)
@@ -0,0 +1,81 @@
+
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JComponent;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+public class PostCreatingStatementPanel extends PostCreatingStatementPanelLayout implements ExporttoSwingProviderPanel {
+    private static final long serialVersionUID = 7106687071248901180L;
+
+    private ExporttoJDBCOptions provider;
+
+    public PostCreatingStatementPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+
+    private void initComponents() {
+        this.chkUsePostCreatingStatement.setEnabled(true);
+        this.chkUsePostCreatingStatement.setSelected(false);
+        this.txtPostCreatingStatement.setText("");
+        this.txtPostCreatingStatement.setEnabled(false);
+        this.chkUsePostCreatingStatement.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                doChangeUsePostCreatingStatement();
+            }
+        });
+        this.translate();
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblHeader.setText("<html>"+i18nManager.getTranslation("_Post_creating_statement_header")+"</html>");
+        this.chkUsePostCreatingStatement.setText(i18nManager.getTranslation("_Introducir_sentencia_a_ejecutar_tras_la_creacion_de_la_tabla"));
+    }
+
+    protected void doChangeUsePostCreatingStatement() {
+        this.txtPostCreatingStatement.setEnabled(this.chkUsePostCreatingStatement.isSelected());
+    }
+    
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Post_creating_statement");    
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        return true;
+    }
+    
+    public void enterPanel() {
+        if( this.provider.canCreatetable() ) {
+            this.chkUsePostCreatingStatement.setEnabled(true);
+        } else {
+            this.chkUsePostCreatingStatement.setEnabled(false);
+        }
+    }
+    
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public String getPostCreatingStatement() {
+        if( this.chkUsePostCreatingStatement.isEnabled() ) {
+            String stmt = this.txtPostCreatingStatement.getText();
+            if( StringUtils.isBlank(stmt) ) {
+                return null;
+            }
+            return stmt.trim();
+        }
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanel.java	(revision 42196)
@@ -0,0 +1,377 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.ContainerEvent;
+import java.awt.event.ContainerListener;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.ListModel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import org.apache.commons.lang3.StringUtils;
+//import org.gvsig.app.ApplicationLocator;
+//import org.gvsig.app.ApplicationManager;
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class SelectTableNamePanel extends SelectTableNamePanelLayout implements ExporttoSwingProviderPanel {
+
+    private static final Logger logger = LoggerFactory.getLogger(SelectTableNamePanel.class);
+
+    private static final long serialVersionUID = 6269512983586358017L;
+    private final ExporttoJDBCOptions provider;
+
+    private FillTablesListTask task = null;
+
+    private static class TableItem {
+
+        private JDBCStoreParameters params;
+        private String label;
+
+        public TableItem(String label, JDBCStoreParameters params) {
+            this.params = params;
+            this.label = label;
+        }
+
+        public TableItem(JDBCStoreParameters params) {
+            this(params.getSchema() + "." + params.getTable(), params);
+        }
+
+        public String toString() {
+            return this.label;
+        }
+
+        public JDBCStoreParameters getParams() {
+            return this.params;
+        }
+    }
+
+    public SelectTableNamePanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+        this.addAncestorListener(new AncestorListener() {
+
+            public void ancestorAdded(AncestorEvent ae) {
+            }
+
+            public void ancestorRemoved(AncestorEvent ae) {
+                cancelTask();
+            }
+
+            public void ancestorMoved(AncestorEvent ae) {
+            }
+        });
+    }
+
+    private void initComponents() {
+        this.rdoCreateTable.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                onChangeRadioSelecion();
+            }
+        });
+        this.rdoInsert.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                onChangeRadioSelecion();
+            }
+        });
+        this.rdoCreateTable.setSelected(true);
+        this.rdoInsert.setEnabled(false);
+        this.lstTables.setEnabled(false);
+        try {
+            this.txtTableName.setText(this.provider.getSource().getName());
+        } catch (Exception ex) {
+            logger.warn("Can't set the default value for the table name", ex);
+        }
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        this.lblHeader.setText(i18nManager.getTranslation("_Indique_donde_desea_insertar_los_datos"));
+        this.lblWarningUseExistingTable.setText(
+                "<html>\n"
+                + i18nManager.getTranslation("_Los_datos_se_insertaran_usando_los_nombres_de_columna_que_coincidan_con_la_tabla_origen_dejandose_al_valor_por_defecto_para_los_que_no_haya_valores_en_la_tabla_origen")
+                + "\n</html>"
+        );
+        this.rdoInsert.setText(i18nManager.getTranslation("_Insertar_registros_en_una_tabla_existente"));
+        this.lblSelectTableName.setText(i18nManager.getTranslation("_Seleccione_la_tabla_a_usar"));
+        this.rdoCreateTable.setText(i18nManager.getTranslation("_Crear_una_tabla_nueva"));
+        this.lblSchema.setText(i18nManager.getTranslation("_Indique_el_esquema_en_el_que_desea_crear_la_tabla"));
+        this.lblTableName.setText(i18nManager.getTranslation("_Indique_el_nombre_de_la_tabla"));
+    }
+
+    private void cancelTask() {
+        if (task != null) {
+            task.cancelRequest();
+            task.getSimpleTaskStatus().remove();
+            task = null;
+        }
+    }
+
+    public boolean canCreateTable() {
+        return this.rdoCreateTable.isSelected();
+    }
+
+    public String getSchema() {
+        if (this.canCreateTable()) {
+            return StringUtils.defaultIfBlank(this.txtSchema.getText(), null);
+        }
+        TableItem item = (TableItem) this.lstTables.getSelectedValue();
+        JDBCStoreParameters tableParameter = item.getParams();
+        if (tableParameter == null) {
+            return null;
+        }
+        return tableParameter.getSchema();
+    }
+
+    public String getTableName() {
+        if (this.canCreateTable()) {
+            return StringUtils.defaultIfBlank(this.txtTableName.getText(), null);
+        }
+        TableItem item = (TableItem) this.lstTables.getSelectedValue();
+        if (item == null) {
+            return null;
+        }
+        JDBCStoreParameters tableParameter = item.getParams();
+
+        if (tableParameter == null) {
+            return null;
+        }
+        return tableParameter.getTable();
+    }
+
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Tablename");
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        String tablename = this.getTableName();
+        if (tablename == null) {
+            throw new ExporttoPanelValidationException(
+                    i18nManager.getTranslation(
+                            "_The_name_of_table_cannot_be_empty"
+                    )
+            );
+        }
+        String schema = this.getSchema();
+        if (schema == null) {
+            throw new ExporttoPanelValidationException(
+                    i18nManager.getTranslation(
+                            "_The_name_of_schema_cannot_be_empty"
+                    )
+            );
+        }
+        if (this.rdoCreateTable.isSelected()) {
+            String tablename_tr = tablename;
+            if( this.provider.getTranslateIdentifiersToLowerCase() ) {
+                tablename_tr = tablename_tr.toLowerCase();
+            }
+            if( this.provider.getRemoveSpacesInIdentifiers() ) {
+                tablename_tr = StringUtils.normalizeSpace(tablename_tr).replace(" ", "_");
+            }
+            if( !tablename_tr.equals(tablename) ) {
+                String msg = i18nManager.getTranslation(
+                        "Ha_utilizado_espacios_en_blanco_o_mayusculas_en_el_nombre_de_la_tabla_Desea_que_se_corrija_de_forma_automatica"
+                );
+                int resp = JOptionPane.showConfirmDialog(
+                        this,
+                        "Ha utilizado espacios en blanco o mayusculas en el nombre de la tabla.\n� Desea que se corrija de forma automatica ?", 
+                        i18nManager.getTranslation("_Warning"),
+                        JOptionPane.YES_NO_OPTION, 
+                        JOptionPane.WARNING_MESSAGE
+                );
+                if( resp != JOptionPane.YES_OPTION ) {
+                    msg = i18nManager.getTranslation(
+                            "El_nombre_de_tabla_contiene_caracteres no_validos"
+                    );
+                    throw new ExporttoPanelValidationException(msg);
+                }
+                tablename = tablename_tr;
+                this.txtTableName.setText(tablename);
+            }
+            ListModel model = this.lstTables.getModel();
+            for (int i = 0; i < model.getSize(); i++) {
+                TableItem item = (TableItem) model.getElementAt(i);
+                if (schema.equals(item.getParams().getSchema())
+                        && tablename.equals(item.getParams().getTable())) {
+                    String msg = i18nManager.getTranslation(
+                            "_La_tabla_{0}_{1}_ya_existe_en_la_base_de_datos_Seleccione_la_opcion_de_insertar_registros_en_una_tabla_existente_para_a�adir_los_datos_a_esta_o_indique_otro_nombre",
+                            new String[]{schema, tablename}
+                    );
+                    throw new ExporttoPanelValidationException(msg);
+                }
+            }
+        }
+        return true;
+    }
+
+    public void enterPanel() {
+        this.fillTablesList();
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public void onChangeRadioSelecion() {
+        if (this.rdoCreateTable.isSelected()) {
+            this.txtSchema.setEnabled(true);
+            this.txtTableName.setEnabled(true);
+            this.lstTables.setEnabled(false);
+        } else {
+            this.txtSchema.setEnabled(false);
+            this.txtTableName.setEnabled(false);
+            this.lstTables.setEnabled(true);
+        }
+    }
+
+    private void fillTablesList() {
+
+        JDBCServerExplorerParameters explorerParameters = this.provider.getExplorerParameters();
+        if (explorerParameters == null) {
+            return;
+        }
+        cancelTask();
+        this.task = new FillTablesListTask();
+        task.setDaemon(true);
+        task.start();
+    }
+
+    private class FillTablesListTask extends AbstractMonitorableTask {
+
+        public FillTablesListTask() {
+            super("Export");
+        }
+
+        protected SimpleTaskStatus getSimpleTaskStatus() {
+            return (SimpleTaskStatus) this.getTaskStatus();
+        }
+
+        public void run() {
+
+            JDBCServerExplorerParameters explorerParameters = provider.getExplorerParameters();
+            if (provider.getExplorerParameters() == null) {
+                return;
+            }
+            final SimpleTaskStatus status = this.getSimpleTaskStatus();
+            try {
+                status.setAutoremove(true);
+
+                DataManager dataManager = DALLocator.getDataManager();
+
+                this.getSimpleTaskStatus().message("Connecting server");
+                explorerParameters.setShowInformationDBTables(false);
+                JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
+                        explorerParameters.getExplorerName(),
+                        explorerParameters
+                );
+
+                this.getSimpleTaskStatus().message("Retrieving tables");
+                final List<JDBCStoreParameters> tables = explorer.list();
+
+                this.getSimpleTaskStatus().message("Add tables");
+
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    public void run() {
+                        DefaultListModel lmodel = new DefaultListModel();
+                        Iterator<JDBCStoreParameters> it = tables.iterator();
+                        while (it.hasNext()) {
+                            if (status.isCancelled()) {
+                                status.cancel();
+                                break;
+                            }
+                            JDBCStoreParameters table = it.next();
+                            lmodel.addElement(new TableItem(table));
+                        }
+                        lstTables.setModel(lmodel);
+                        //lstTables.setEnabled(true);
+                        rdoInsert.setEnabled(true);
+                    }
+                });
+
+                status.message("finish");
+                status.terminate();
+
+            } catch (final Exception ex) {
+                logger.warn("Fail to fill tables list", ex);
+                if (status.isCancellationRequested()) {
+                    status.cancel();
+                }
+                if (status.isRunning()) {
+                    try {
+                        SwingUtilities.invokeAndWait(new Runnable() {
+                            public void run() {
+                                I18nManager i18nManager = ToolsLocator.getI18nManager();
+                                ExporttoSwingManager manager = ExporttoSwingLocator.getSwingManager();
+
+                                manager.showMessage(
+                                        i18nManager.getTranslation("_Warning"),
+                                        i18nManager.getTranslation("_There_have_been_problems_filling_data_in_panel")
+                                        + " (" + getPanelTitle() + ")",
+                                        ex,
+                                        null
+                                );
+                            }
+                        });
+                    } catch (Exception ex2) {
+                        logger.warn("Can't show error message", ex2);
+                    }
+                }
+            } finally {
+                status.terminate();
+                status.remove();
+            }
+
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanelLayout.form	(revision 42196)
@@ -0,0 +1,1298 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.ButtonGroup" name="buttonGroup1">
+    </Component>
+  </NonVisualComponents>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,123,0,0,2,3"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Para que gvSIG pueda trabajar correctamente con tablas de BBDD es muy&#xa;recomendable que esta disponga de una clave primaria definida. Si no &#xa;la tiene e intenta cargarla en gvSIG puede que algunas operaciones no&#xa;funcionen adecuadamente&#xa;&lt;/html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="23" weightX="0.2" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblPrimaryKeyName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Indique el nombre de a usar para la clave primaria"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="19" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtPrimaryKeyName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="pk"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="txtPrimaryKeyNameActionPerformed"/>
+      </Events>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="19" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[32767, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="23" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdoCreatePrimaryNewKey">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Generar una clave primaria con un serial"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="rdoCreatePrimaryNewKeyActionPerformed"/>
+      </Events>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdoUseExistingFieldAsPrimariKey">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Utilizar un campo existente como clave primaria."/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="14" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblSelectFieldAsPrimaryKey">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Seleccione el campo a usar como clave primaria:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="16" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="18" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="11" weightX="0.1" weightY="0.3"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="lstFields">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="0"/>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JRadioButton" name="rdoDoNotCreatePrimaryKey">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="No hacer nada en relacion a la creacion de la clave primaria."/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="22" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler3">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[0, 32767]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="24" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblQuestion">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&#xbf; Desea crear una clave primaria ?"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10">
+          <ExpressionOrigin>
+            <Value type="int" value="23"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11">
+          <ExpressionOrigin>
+            <Value type="double" value="0.2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12_lblHeader">
+          <CodeVariable name="lblHeader" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="13_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="int" value="19"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18_lblPrimaryKeyName">
+          <CodeVariable name="lblPrimaryKeyName" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblPrimaryKeyName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="13_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="19_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="19"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24_txtPrimaryKeyName">
+          <CodeVariable name="txtPrimaryKeyName" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtPrimaryKeyName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="19_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="25_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="int" value="23"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="25_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="31_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36_rdoCreatePrimaryNewKey">
+          <CodeVariable name="rdoCreatePrimaryNewKey" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdoCreatePrimaryNewKey"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="31_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="37_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43_rdoUseExistingFieldAsPrimariKey">
+          <CodeVariable name="rdoUseExistingFieldAsPrimariKey" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdoUseExistingFieldAsPrimariKey"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="37_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="44_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49_lblSelectFieldAsPrimaryKey">
+          <CodeVariable name="lblSelectFieldAsPrimaryKey" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblSelectFieldAsPrimaryKey"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="44_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="50_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="50_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="50_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="50_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="50_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="50_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54">
+          <ExpressionOrigin>
+            <Value type="int" value="11"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="50_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="50_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="double" value="0.3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57_jScrollPane1">
+          <CodeVariable name="jScrollPane1" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="50_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="58_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="63">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64_rdoDoNotCreatePrimaryKey">
+          <CodeVariable name="rdoDoNotCreatePrimaryKey" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdoDoNotCreatePrimaryKey"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="58_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="65_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="65_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="65_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="65_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="68_filler2">
+          <CodeVariable name="filler2" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="65_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="69_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71">
+          <ExpressionOrigin>
+            <Value type="int" value="24"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74_filler3">
+          <CodeVariable name="filler3" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="69_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="75_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="75_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="75_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="75_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="77">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="75_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="75_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="79">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="75_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="80">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81_lblQuestion">
+          <CodeVariable name="lblQuestion" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblQuestion"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="75_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanelLayout.form	(revision 42196)
@@ -0,0 +1,2520 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="1"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,2,61,0,0,2,21"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Puede indicar permisos que desea se asignen a la tabla una vez creada.&lt;br&gt;&#xa;Marque que privilegios desea le sean asignados e indique para cada uno que &lt;i&gt;perfil&lt;/i&gt;, usuario o grupo, desea que tenga ese privilegio.&lt;br&gt;&#xa;Puede indicar mas de un &lt;i&gt;perfil&lt;/i&gt; separandolos por comas.&#xa;&lt;/html&gt;"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkSelect">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Select"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleSelect">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleSelect">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="10" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkInsert">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Insert"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkUpdate">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Update"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="12" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkDelete">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Delete"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="16" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkTruncate">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Truncate"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="20" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkReference">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Reference"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="24" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkTrigger">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Trigger"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="28" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkAll">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="All"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="32" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler3">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="36" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleInsert">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleUpdate">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="14" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleDelete">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="18" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleTruncate">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="22" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleReference">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="26" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleTrigger">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="30" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRoleAll">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Perfil"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="34" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleInsert">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="10" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleUpdate">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="14" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleDelete">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="18" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleTruncate">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="22" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleReference">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="26" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleTrigger">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="30" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtRoleAll">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="34" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_lblHeader">
+          <CodeVariable name="lblHeader" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18_chkSelect">
+          <CodeVariable name="chkSelect" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkSelect"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="19_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22_lblRoleSelect">
+          <CodeVariable name="lblRoleSelect" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleSelect"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="19_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="23_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28_txtRoleSelect">
+          <CodeVariable name="txtRoleSelect" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleSelect"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="23_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="29_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32_filler1">
+          <CodeVariable name="filler1" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="29_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="33_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="33_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36_filler2">
+          <CodeVariable name="filler2" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="33_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="37_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44_chkInsert">
+          <CodeVariable name="chkInsert" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkInsert"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="37_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="45_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="45_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="45_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="45_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="45_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="45_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="45_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="45_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52_chkUpdate">
+          <CodeVariable name="chkUpdate" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkUpdate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="45_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="53_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="58">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60_chkDelete">
+          <CodeVariable name="chkDelete" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkDelete"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="53_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="61_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="63">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="68_chkTruncate">
+          <CodeVariable name="chkTruncate" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkTruncate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="61_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="69_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71">
+          <ExpressionOrigin>
+            <Value type="int" value="24"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76_chkReference">
+          <CodeVariable name="chkReference" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkReference"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="69_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="77_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="77_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="77_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="77_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="79">
+          <ExpressionOrigin>
+            <Value type="int" value="28"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="77_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="80">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="77_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="77_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="82">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="77_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="83">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="84_chkTrigger">
+          <CodeVariable name="chkTrigger" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkTrigger"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="77_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="85_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="85_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="85_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="86">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="85_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="87">
+          <ExpressionOrigin>
+            <Value type="int" value="32"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="85_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="88">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="85_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="89">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="85_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="90">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="85_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="91">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="92_chkAll">
+          <CodeVariable name="chkAll" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkAll"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="85_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="93_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="93_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="93_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="94">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="93_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="95">
+          <ExpressionOrigin>
+            <Value type="int" value="36"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="93_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="96">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="93_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="97">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="98_filler3">
+          <CodeVariable name="filler3" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="93_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="99_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="99_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="99_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="100">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="99_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="101">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="102_lblRoleInsert">
+          <CodeVariable name="lblRoleInsert" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleInsert"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="99_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="103_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="103_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="103_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="104">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="103_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="105">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="106_lblRoleUpdate">
+          <CodeVariable name="lblRoleUpdate" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleUpdate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="103_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="107_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="107_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="107_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="108">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="107_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="109">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="110_lblRoleDelete">
+          <CodeVariable name="lblRoleDelete" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleDelete"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="107_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="111_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="111_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="111_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="112">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="111_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="113">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="114_lblRoleTruncate">
+          <CodeVariable name="lblRoleTruncate" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleTruncate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="111_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="115_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="115_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="115_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="116">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="115_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="117">
+          <ExpressionOrigin>
+            <Value type="int" value="26"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="118_lblRoleReference">
+          <CodeVariable name="lblRoleReference" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleReference"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="115_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="119_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="119_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="119_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="120">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="119_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="121">
+          <ExpressionOrigin>
+            <Value type="int" value="30"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="122_lblRoleTrigger">
+          <CodeVariable name="lblRoleTrigger" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleTrigger"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="119_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="123_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="123_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="123_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="124">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="123_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="125">
+          <ExpressionOrigin>
+            <Value type="int" value="34"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="126_lblRoleAll">
+          <CodeVariable name="lblRoleAll" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblRoleAll"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="123_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="127_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="127_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="127_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="128">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="127_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="129">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="127_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="130">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="131_txtRoleInsert">
+          <CodeVariable name="txtRoleInsert" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleInsert"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="127_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="132_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="132_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="132_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="133">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="132_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="134">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="132_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="135">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="136_txtRoleUpdate">
+          <CodeVariable name="txtRoleUpdate" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleUpdate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="132_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="137_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="137_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="137_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="138">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="137_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="139">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="137_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="140">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="141_txtRoleDelete">
+          <CodeVariable name="txtRoleDelete" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleDelete"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="137_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="142_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="142_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="142_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="143">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="142_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="144">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="142_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="145">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="146_txtRoleTruncate">
+          <CodeVariable name="txtRoleTruncate" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleTruncate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="142_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="147_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="147_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="147_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="148">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="147_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="149">
+          <ExpressionOrigin>
+            <Value type="int" value="26"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="147_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="150">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="151_txtRoleReference">
+          <CodeVariable name="txtRoleReference" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleReference"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="147_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="152_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="152_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="152_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="153">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="152_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="154">
+          <ExpressionOrigin>
+            <Value type="int" value="30"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="152_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="155">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="156_txtRoleTrigger">
+          <CodeVariable name="txtRoleTrigger" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleTrigger"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="152_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="157_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="157_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="157_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="158">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="157_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="159">
+          <ExpressionOrigin>
+            <Value type="int" value="34"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="157_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="160">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="161_txtRoleAll">
+          <CodeVariable name="txtRoleAll" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtRoleAll"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="157_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanelLayout.java	(revision 42196)
@@ -0,0 +1,156 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CheckGeometriesPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form CheckGeometriesPanelLayout
+     */
+    public CheckGeometriesPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        buttonGroup1 = new javax.swing.ButtonGroup();
+        lblHeader = new javax.swing.JLabel();
+        lblCheckIsCorrupt = new javax.swing.JLabel();
+        rdbCheckNone = new javax.swing.JRadioButton();
+        rdbCheckIsCorrupt = new javax.swing.JRadioButton();
+        cboActionIsCorrupt = new javax.swing.JComboBox();
+        rdbCheckIsValid = new javax.swing.JRadioButton();
+        lblCheckIsvalid = new javax.swing.JLabel();
+        cboActionIsValid = new javax.swing.JComboBox();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
+        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        chkTryFixGeometry = new javax.swing.JCheckBox();
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0, 5, 0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        lblHeader.setText("Validacion de la informacion geometrica");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(lblHeader, gridBagConstraints);
+
+        lblCheckIsCorrupt.setText("Cuando la geometria este corrupta;");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblCheckIsCorrupt, gridBagConstraints);
+
+        buttonGroup1.add(rdbCheckNone);
+        rdbCheckNone.setText("No realizar ninguna comprobacion sobre las geometrias");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(rdbCheckNone, gridBagConstraints);
+
+        buttonGroup1.add(rdbCheckIsCorrupt);
+        rdbCheckIsCorrupt.setText("Comprobar que la geometria no este corrupta");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(rdbCheckIsCorrupt, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(cboActionIsCorrupt, gridBagConstraints);
+
+        buttonGroup1.add(rdbCheckIsValid);
+        rdbCheckIsValid.setText("Comprobar la validez de las geometrias antes de insertarlas");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(rdbCheckIsValid, gridBagConstraints);
+
+        lblCheckIsvalid.setText("Cuando la geometria no sea valida:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblCheckIsvalid, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(cboActionIsValid, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 20;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.1;
+        add(filler1, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 0;
+        add(filler2, gridBagConstraints);
+
+        chkTryFixGeometry.setText("Intentar reparar la geometria");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(chkTryFixGeometry, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected javax.swing.ButtonGroup buttonGroup1;
+    protected javax.swing.JComboBox cboActionIsCorrupt;
+    protected javax.swing.JComboBox cboActionIsValid;
+    protected javax.swing.JCheckBox chkTryFixGeometry;
+    protected javax.swing.Box.Filler filler1;
+    protected javax.swing.Box.Filler filler2;
+    protected javax.swing.JLabel lblCheckIsCorrupt;
+    protected javax.swing.JLabel lblCheckIsvalid;
+    protected javax.swing.JLabel lblHeader;
+    protected javax.swing.JRadioButton rdbCheckIsCorrupt;
+    protected javax.swing.JRadioButton rdbCheckIsValid;
+    protected javax.swing.JRadioButton rdbCheckNone;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanel.java	(revision 42196)
@@ -0,0 +1,149 @@
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JComponent;
+import org.gvsig.exportto.swing.prov.jdbc.ExporrtoJDBCService;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CheckGeometriesPanel extends CheckGeometriesPanelLayout implements ExporttoSwingProviderPanel {
+
+    private final static Logger logger = LoggerFactory.getLogger(CheckGeometriesPanel.class);
+    
+    private final ExporttoJDBCOptions provider;
+    
+    private final CheckAction[] checkActions = {
+        new CheckAction("_Set_geometry_to_null", ExporrtoJDBCService.ACTION_SET_GEOMETRY_TO_NULL),
+        new CheckAction("_Skip_entire_feature", ExporrtoJDBCService.ACTION_SKIP_FEATURE),
+        new CheckAction("_Abort_process", ExporrtoJDBCService.ACTION_ABORT)
+    };
+    
+    private static class CheckAction {
+
+        private final String label;
+        private final int code;
+
+        public CheckAction(String label, int code) {
+            this.code = code;
+            this.label = ToolsLocator.getI18nManager().getTranslation(label);
+        }
+        @Override
+        public String toString() {
+            return this.label;
+        }
+        public int getCode() {
+            return this.code;
+        }
+    }
+        
+    public CheckGeometriesPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+    
+    private void initComponents() {
+        this.rdbCheckIsCorrupt.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+               onChangeRadioButtons();
+            }
+        });
+        this.rdbCheckIsValid.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+               onChangeRadioButtons();
+            }
+        });
+        this.rdbCheckNone.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+               onChangeRadioButtons();
+            }
+        });
+        for (CheckAction checkAction : checkActions) {
+            this.cboActionIsCorrupt.addItem(checkAction);
+            this.cboActionIsValid.addItem(checkAction);            
+        }
+        this.rdbCheckNone.setSelected(true);
+        this.translate();
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+                    
+        this.lblHeader.setText("<html>"+i18nManager.getTranslation("_check_geometries_before_export_header")+"</html>");
+        this.rdbCheckNone.setText(i18nManager.getTranslation("_No_realizar_ninguna_comprobacion_sobre_las_geometrias"));
+        this.rdbCheckIsCorrupt.setText(i18nManager.getTranslation("_Comprobar_que_la_geometria_no_este_corrupta"));
+        this.rdbCheckIsValid.setText(i18nManager.getTranslation("_Comprobar_la_validez_de_las_geometrias_antes_de_insertarlas"));
+        this.lblCheckIsCorrupt.setText(i18nManager.getTranslation("_Cuando_la_geometria_este_corrupta"));
+        this.lblCheckIsvalid.setText(i18nManager.getTranslation("_Cuando_la_geometria_no_sea_valida"));
+        this.chkTryFixGeometry.setText(i18nManager.getTranslation("_Intentar_reparar_la_geometria"));
+    }
+    
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_check_geometries_before_export");    
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        return true;
+    }
+    
+    public void enterPanel() {
+        // Default do nothing
+    }
+    
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public int getGeometryChecks() {
+        if( this.rdbCheckIsCorrupt.isSelected() ) {
+            return ExporrtoJDBCService.CHECK_IF_CORRUPT;
+        } else if( this.rdbCheckIsValid.isSelected()) {
+            return ExporrtoJDBCService.CHECK_IF_VALID;
+        } else {
+            return ExporrtoJDBCService.CHECK_NONE;
+        }
+    }
+
+    public int getGeometryChecksAction() {
+        try {
+            if( this.rdbCheckIsCorrupt.isSelected() ) {
+                CheckAction checkAction = (CheckAction)(this.cboActionIsCorrupt.getSelectedItem());
+                return checkAction.getCode();
+            } else if( this.rdbCheckIsValid.isSelected()) {
+                CheckAction checkAction = (CheckAction)(this.cboActionIsValid.getSelectedItem());
+                return checkAction.getCode();
+            } else {
+                return ExporrtoJDBCService.ACTION_ABORT;
+            }
+        } catch(Exception ex) {
+            logger.warn("Can't get action for geometry check in export to JDBC.",ex);
+            return ExporrtoJDBCService.ACTION_ABORT;
+        }
+    }
+
+    public boolean getTryToFixGeometry() {
+        return this.chkTryFixGeometry.isSelected();
+    }
+    
+    private void onChangeRadioButtons() {
+        if( this.rdbCheckNone.isSelected() ) {
+            this.cboActionIsCorrupt.setEnabled(false);
+            this.cboActionIsValid.setEnabled(false);
+            this.chkTryFixGeometry.setEnabled(false);
+        } else if( this.rdbCheckIsCorrupt.isSelected() ) {
+            this.cboActionIsCorrupt.setEnabled(true);
+            this.cboActionIsValid.setEnabled(false);
+            this.chkTryFixGeometry.setEnabled(false);
+        } else if( this.rdbCheckIsValid.isSelected()) {
+            this.cboActionIsCorrupt.setEnabled(false);
+            this.cboActionIsValid.setEnabled(true);
+            this.chkTryFixGeometry.setEnabled(true);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanelLayout.form	(revision 42196)
@@ -0,0 +1,559 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Algunas bases de datos precisan tratar los identificadores de tabla o campo que tienen mayusculas y minusculas mezcladas, o espacios en blanco de forma especial a la hora de referirse a ellos. &#xa;Es recomendable que no los utilice para evitar problemas.&lt;br&gt;&#xa;Puede indicar al asistente que traslade todos los nombres de campo a minusculas y que use &quot;_&quot; en lugar de espacios en blanco en el nombre de tabla si los hubiese.&#xa;&lt;/html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkTraslateToLowerCase">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Trasladar identificadores de campo y tabla a minusculas"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkRemoveSpaces">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Trasladar espacios en blanco en los identificadores a  &quot;_&quot;"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="8" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_lblHeader">
+          <CodeVariable name="lblHeader" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17_chkTraslateToLowerCase">
+          <CodeVariable name="chkTraslateToLowerCase" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkTraslateToLowerCase"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="18_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24_chkRemoveSpaces">
+          <CodeVariable name="chkRemoveSpaces" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkRemoveSpaces"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="18_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="25_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="25_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="30_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35_jLabel1">
+          <CodeVariable name="jLabel1" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="30_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanelLayout.java	(revision 42196)
@@ -0,0 +1,84 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.Box;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import org.jdesktop.layout.GroupLayout;
+
+/**
+ *
+ * @author usuario
+ */
+public class UpdateTableStatisticsPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form PackPanelLayout
+     */
+    public UpdateTableStatisticsPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        lblHeader = new JLabel();
+        filler1 = new Box.Filler(new Dimension(16, 0), new Dimension(16, 0), new Dimension(16, 32767));
+        chkUpdateStatisticsTableAfterInserts = new JCheckBox();
+        filler2 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        lblHeader.setText("<html>\nAlgunos gestores de base de datos tienen la opcion de recopilar estadisticas de los datos de  las tablas para optimizar el acceso a los datos tras una insercion masiva de estos.<br>\nPuede indicar aqui si desea que se realice esta operacion al final de la exportacion.\n</html>"); // NOI18N
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(lblHeader, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 0;
+        add(filler1, gridBagConstraints);
+
+        chkUpdateStatisticsTableAfterInserts.setText("Recalcular estadisticas de  la tabla al terminar");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(chkUpdateStatisticsTableAfterInserts, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.1;
+        add(filler2, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    public JCheckBox chkUpdateStatisticsTableAfterInserts;
+    public Box.Filler filler1;
+    public Box.Filler filler2;
+    public JLabel lblHeader;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanelLayout.form	(revision 42196)
@@ -0,0 +1,442 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="1"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Si la tabla contiene columnas de tipo geometria es recomendable que cree un indice espacial sobre ellas.&#xa;&lt;/html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkCreateGeometryIndex">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Crear indice espacial sobre las columnas de tipo geometria" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="6" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_lblHeader">
+          <CodeVariable name="lblHeader" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16_chkCreateGeometryIndex">
+          <CodeVariable name="chkCreateGeometryIndex" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkCreateGeometryIndex"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="17_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22_filler1">
+          <CodeVariable name="filler1" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="17_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="23_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26_filler2">
+          <CodeVariable name="filler2" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="23_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/UpdateTableStatisticsPanel.java	(revision 42196)
@@ -0,0 +1,55 @@
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import javax.swing.JComponent;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+public class UpdateTableStatisticsPanel extends UpdateTableStatisticsPanelLayout implements ExporttoSwingProviderPanel {
+    private static final long serialVersionUID = -8450431632002084194L;
+
+    private ExporttoJDBCOptions provider;
+
+    public UpdateTableStatisticsPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+
+    private void initComponents() {
+        this.chkUpdateStatisticsTableAfterInserts.setEnabled(true);
+        this.chkUpdateStatisticsTableAfterInserts.setSelected(true);
+        this.translate();
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblHeader.setText("<html>"+i18nManager.getTranslation("_update_table_statistics_header")+"</html>");
+        this.chkUpdateStatisticsTableAfterInserts.setText(i18nManager.getTranslation("_Recalcular_estadisticas_de_la_tabla_al_terminar"));
+    }
+
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_update_table_statistics");    
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        return true;
+    }
+    
+    public void enterPanel() {
+        // Default do nothing
+    }
+    
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public boolean getUpdateTableStatistics() {
+        return this.chkUpdateStatisticsTableAfterInserts.isSelected();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PostCreatingStatementPanelLayout.form	(revision 42196)
@@ -0,0 +1,634 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="1"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-13"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Puede indicar una sentencia SQL a ejecutar tras la creacion de la tabla en la base de datos.&lt;br&gt;&#xa;Esto puede ser de utilidad para asignar una configuracion de permisos peculiar, para crear algun tipo de indice que no cree la aplicacion por defecto o a&#xf1;adir alguna columna a la tabla que no este en la tabla original.&#xa;&lt;/html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="23" weightX="0.1" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="txtPostCreatingStatement">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="8" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkUsePostCreatingStatement">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Introducir  sentencia a ejecutar tras la creacion de la tabla"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler3">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_lblHeader">
+          <CodeVariable name="lblHeader" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14_filler1">
+          <CodeVariable name="filler1" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="15_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="15_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="15_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="15_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="15_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="15_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="23"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="15_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="15_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22_jScrollPane1">
+          <CodeVariable name="jScrollPane1" type="8193" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="15_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="23_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27_filler2">
+          <CodeVariable name="filler2" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="23_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="28_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="28_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33_chkUsePostCreatingStatement">
+          <CodeVariable name="chkUsePostCreatingStatement" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkUsePostCreatingStatement"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="28_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="34_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37_filler3">
+          <CodeVariable name="filler3" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="34_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanelLayout.java	(revision 42196)
@@ -0,0 +1,187 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SelectPkPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form SelectPkPanelLayout
+     */
+    public SelectPkPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        buttonGroup1 = new javax.swing.ButtonGroup();
+        lblHeader = new javax.swing.JLabel();
+        lblPrimaryKeyName = new javax.swing.JLabel();
+        txtPrimaryKeyName = new javax.swing.JTextField();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0));
+        rdoCreatePrimaryNewKey = new javax.swing.JRadioButton();
+        rdoUseExistingFieldAsPrimariKey = new javax.swing.JRadioButton();
+        lblSelectFieldAsPrimaryKey = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        lstFields = new javax.swing.JList();
+        rdoDoNotCreatePrimaryKey = new javax.swing.JRadioButton();
+        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
+        lblQuestion = new javax.swing.JLabel();
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0, 5, 0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        lblHeader.setText("<html>\nPara que gvSIG pueda trabajar correctamente con tablas de BBDD es muy\nrecomendable que esta disponga de una clave primaria definida. Si no \nla tiene e intenta cargarla en gvSIG puede que algunas operaciones no\nfuncionen adecuadamente\n</html>"); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
+        gridBagConstraints.weightx = 0.2;
+        add(lblHeader, gridBagConstraints);
+
+        lblPrimaryKeyName.setText("Indique el nombre de a usar para la clave primaria");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.PAGE_START;
+        add(lblPrimaryKeyName, gridBagConstraints);
+
+        txtPrimaryKeyName.setText("pk");
+        txtPrimaryKeyName.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                txtPrimaryKeyNameActionPerformed(evt);
+            }
+        });
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.PAGE_START;
+        add(txtPrimaryKeyName, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
+        add(filler1, gridBagConstraints);
+
+        buttonGroup1.add(rdoCreatePrimaryNewKey);
+        rdoCreatePrimaryNewKey.setText("Generar una clave primaria con un serial");
+        rdoCreatePrimaryNewKey.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                rdoCreatePrimaryNewKeyActionPerformed(evt);
+            }
+        });
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(rdoCreatePrimaryNewKey, gridBagConstraints);
+
+        buttonGroup1.add(rdoUseExistingFieldAsPrimariKey);
+        rdoUseExistingFieldAsPrimariKey.setText("Utilizar un campo existente como clave primaria.");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(rdoUseExistingFieldAsPrimariKey, gridBagConstraints);
+
+        lblSelectFieldAsPrimaryKey.setText("Seleccione el campo a usar como clave primaria:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblSelectFieldAsPrimaryKey, gridBagConstraints);
+
+        jScrollPane1.setViewportView(lstFields);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.3;
+        add(jScrollPane1, gridBagConstraints);
+
+        buttonGroup1.add(rdoDoNotCreatePrimaryKey);
+        rdoDoNotCreatePrimaryKey.setText("No hacer nada en relacion a la creacion de la clave primaria.");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 22;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(rdoDoNotCreatePrimaryKey, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 0;
+        add(filler2, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 24;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.1;
+        add(filler3, gridBagConstraints);
+
+        lblQuestion.setText("� Desea crear una clave primaria ?");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblQuestion, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void txtPrimaryKeyNameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPrimaryKeyNameActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_txtPrimaryKeyNameActionPerformed
+
+    private void rdoCreatePrimaryNewKeyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoCreatePrimaryNewKeyActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_rdoCreatePrimaryNewKeyActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected javax.swing.ButtonGroup buttonGroup1;
+    protected javax.swing.Box.Filler filler1;
+    protected javax.swing.Box.Filler filler2;
+    protected javax.swing.Box.Filler filler3;
+    protected javax.swing.JScrollPane jScrollPane1;
+    protected javax.swing.JLabel lblHeader;
+    protected javax.swing.JLabel lblPrimaryKeyName;
+    protected javax.swing.JLabel lblQuestion;
+    protected javax.swing.JLabel lblSelectFieldAsPrimaryKey;
+    protected javax.swing.JList lstFields;
+    protected javax.swing.JRadioButton rdoCreatePrimaryNewKey;
+    protected javax.swing.JRadioButton rdoDoNotCreatePrimaryKey;
+    protected javax.swing.JRadioButton rdoUseExistingFieldAsPrimariKey;
+    protected javax.swing.JTextField txtPrimaryKeyName;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectTableNamePanelLayout.form	(revision 42196)
@@ -0,0 +1,1177 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.ButtonGroup" name="buttonGroup1">
+    </Component>
+  </NonVisualComponents>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,96,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Indique donde desea insertar los datos" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblWarningUseExistingTable">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Los datos se insertaran usando los nombres de columna que coincidan con &#xa;    la tabla origen, dejandose al valor por defecto para los que no &#xa;    haya valores en la tabla origen&#xa;&lt;/html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.2" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdoInsert">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Insertar registros en una tabla existente"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblSelectTableName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Seleccione la tabla a usar:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.2"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="lstTables">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="0"/>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JRadioButton" name="rdoCreateTable">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Crear una tabla nueva"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="12" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblSchema">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Indique el esquema en el que desea crear la tabla:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="14" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtSchema">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="public"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="16" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblTableName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Indique el nombre de la tabla:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="18" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtTableName">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="20" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[0, 32767]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="22" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11_lblHeader">
+          <CodeVariable name="lblHeader" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="12_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="12_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="double" value="0.2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17_lblWarningUseExistingTable">
+          <CodeVariable name="lblWarningUseExistingTable" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblWarningUseExistingTable"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="12_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="18_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24_rdoInsert">
+          <CodeVariable name="rdoInsert" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdoInsert"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="18_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="25_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29_lblSelectTableName">
+          <CodeVariable name="lblSelectTableName" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblSelectTableName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="25_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="30_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="30_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="double" value="0.2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36_jScrollPane1">
+          <CodeVariable name="jScrollPane1" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="30_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="37_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43_rdoCreateTable">
+          <CodeVariable name="rdoCreateTable" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdoCreateTable"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="37_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="44_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="44_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48_lblSchema">
+          <CodeVariable name="lblSchema" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblSchema"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="44_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="49_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53_txtSchema">
+          <CodeVariable name="txtSchema" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtSchema"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="49_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="54_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="58_lblTableName">
+          <CodeVariable name="lblTableName" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblTableName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="54_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="59_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="59_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="59_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="59_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="59_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="63_txtTableName">
+          <CodeVariable name="txtTableName" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtTableName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="59_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="64_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="64_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="64_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="64_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="64_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="68_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="69">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="68_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73_filler2">
+          <CodeVariable name="filler2" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="68_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanelLayout.java	(revision 42196)
@@ -0,0 +1,299 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.Box;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import org.jdesktop.layout.GroupLayout;
+
+/**
+ *
+ * @author usuario
+ */
+public class PermissionsPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form PermissionsPanelLayout
+     */
+    public PermissionsPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        lblHeader = new javax.swing.JLabel();
+        chkSelect = new javax.swing.JCheckBox();
+        lblRoleSelect = new javax.swing.JLabel();
+        txtRoleSelect = new javax.swing.JTextField();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 0), new java.awt.Dimension(16, 32767));
+        chkInsert = new javax.swing.JCheckBox();
+        chkUpdate = new javax.swing.JCheckBox();
+        chkDelete = new javax.swing.JCheckBox();
+        chkTruncate = new javax.swing.JCheckBox();
+        chkReference = new javax.swing.JCheckBox();
+        chkTrigger = new javax.swing.JCheckBox();
+        chkAll = new javax.swing.JCheckBox();
+        filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(16, 16), new java.awt.Dimension(16, 16), new java.awt.Dimension(16, 16));
+        lblRoleInsert = new javax.swing.JLabel();
+        lblRoleUpdate = new javax.swing.JLabel();
+        lblRoleDelete = new javax.swing.JLabel();
+        lblRoleTruncate = new javax.swing.JLabel();
+        lblRoleReference = new javax.swing.JLabel();
+        lblRoleTrigger = new javax.swing.JLabel();
+        lblRoleAll = new javax.swing.JLabel();
+        txtRoleInsert = new javax.swing.JTextField();
+        txtRoleUpdate = new javax.swing.JTextField();
+        txtRoleDelete = new javax.swing.JTextField();
+        txtRoleTruncate = new javax.swing.JTextField();
+        txtRoleReference = new javax.swing.JTextField();
+        txtRoleTrigger = new javax.swing.JTextField();
+        txtRoleAll = new javax.swing.JTextField();
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        lblHeader.setText("<html>\nPuede indicar permisos que desea se asignen a la tabla una vez creada.<br>\nMarque que privilegios desea le sean asignados e indique para cada uno que <i>perfil</i>, usuario o grupo, desea que tenga ese privilegio.<br>\nPuede indicar mas de un <i>perfil</i> separandolos por comas.\n</html>");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(lblHeader, gridBagConstraints);
+
+        chkSelect.setText("Select");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkSelect, gridBagConstraints);
+
+        lblRoleSelect.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        add(lblRoleSelect, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(txtRoleSelect, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        add(filler1, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 10;
+        gridBagConstraints.gridy = 0;
+        add(filler2, gridBagConstraints);
+
+        chkInsert.setText("Insert");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkInsert, gridBagConstraints);
+
+        chkUpdate.setText("Update");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkUpdate, gridBagConstraints);
+
+        chkDelete.setText("Delete");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkDelete, gridBagConstraints);
+
+        chkTruncate.setText("Truncate");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 20;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkTruncate, gridBagConstraints);
+
+        chkReference.setText("Reference");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 24;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkReference, gridBagConstraints);
+
+        chkTrigger.setText("Trigger");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 28;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkTrigger, gridBagConstraints);
+
+        chkAll.setText("All");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 32;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkAll, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 36;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.1;
+        add(filler3, gridBagConstraints);
+
+        lblRoleInsert.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        add(lblRoleInsert, gridBagConstraints);
+
+        lblRoleUpdate.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 14;
+        add(lblRoleUpdate, gridBagConstraints);
+
+        lblRoleDelete.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 18;
+        add(lblRoleDelete, gridBagConstraints);
+
+        lblRoleTruncate.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 22;
+        add(lblRoleTruncate, gridBagConstraints);
+
+        lblRoleReference.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 26;
+        add(lblRoleReference, gridBagConstraints);
+
+        lblRoleTrigger.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 30;
+        add(lblRoleTrigger, gridBagConstraints);
+
+        lblRoleAll.setText("Perfil");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 34;
+        add(lblRoleAll, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtRoleInsert, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtRoleUpdate, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtRoleDelete, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 22;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtRoleTruncate, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 26;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtRoleReference, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 30;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtRoleTrigger, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 34;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        add(txtRoleAll, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    public javax.swing.JCheckBox chkAll;
+    public javax.swing.JCheckBox chkDelete;
+    public javax.swing.JCheckBox chkInsert;
+    public javax.swing.JCheckBox chkReference;
+    public javax.swing.JCheckBox chkSelect;
+    public javax.swing.JCheckBox chkTrigger;
+    public javax.swing.JCheckBox chkTruncate;
+    public javax.swing.JCheckBox chkUpdate;
+    public javax.swing.Box.Filler filler1;
+    public javax.swing.Box.Filler filler2;
+    public javax.swing.Box.Filler filler3;
+    public javax.swing.JLabel lblHeader;
+    public javax.swing.JLabel lblRoleAll;
+    public javax.swing.JLabel lblRoleDelete;
+    public javax.swing.JLabel lblRoleInsert;
+    public javax.swing.JLabel lblRoleReference;
+    public javax.swing.JLabel lblRoleSelect;
+    public javax.swing.JLabel lblRoleTrigger;
+    public javax.swing.JLabel lblRoleTruncate;
+    public javax.swing.JLabel lblRoleUpdate;
+    public javax.swing.JTextField txtRoleAll;
+    public javax.swing.JTextField txtRoleDelete;
+    public javax.swing.JTextField txtRoleInsert;
+    public javax.swing.JTextField txtRoleReference;
+    public javax.swing.JTextField txtRoleSelect;
+    public javax.swing.JTextField txtRoleTrigger;
+    public javax.swing.JTextField txtRoleTruncate;
+    public javax.swing.JTextField txtRoleUpdate;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanel.java	(revision 42196)
@@ -0,0 +1,165 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.DefaultListModel;
+import javax.swing.JComponent;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class SelectPkPanel extends SelectPkPanelLayout implements ExporttoSwingProviderPanel {
+
+    private static final long serialVersionUID = 2652404227373508779L;
+
+    private ExporttoJDBCOptions provider;
+
+    public SelectPkPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+
+    protected void initComponents() {
+        this.rdoCreatePrimaryNewKey.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                onSelect();
+            }
+        });
+        this.rdoUseExistingFieldAsPrimariKey.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                onSelect();
+            }
+        });
+        this.rdoDoNotCreatePrimaryKey.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                onSelect();
+            }
+        });
+        this.rdoCreatePrimaryNewKey.setSelected(true);
+        this.translate();
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblHeader.setText("<html>"+i18nManager.getTranslation("_Primary_key_header")+"</html>");
+        this.lblQuestion.setText(i18nManager.getTranslation("_Desea_crear_una_clave_primaria"));
+        this.rdoCreatePrimaryNewKey.setText(i18nManager.getTranslation("_Generar_una_clave_primaria_con_un_serial"));
+        this.lblPrimaryKeyName.setText(i18nManager.getTranslation("_Indique_el_nombre_a_usar_para_la_clave_primaria"));
+        this.rdoUseExistingFieldAsPrimariKey.setText(i18nManager.getTranslation("_Utilizar_un_campo_existente_como_clave_primaria"));
+        this.lblSelectFieldAsPrimaryKey.setText(i18nManager.getTranslation("_Seleccione_el_campo_a_usar_como_clave_primaria"));
+        this.rdoDoNotCreatePrimaryKey.setText(i18nManager.getTranslation("_No_hacer_nada_en_relacion_a_la_creacion_de_la_clave_primaria"));
+    }
+
+
+    private void onSelect() {
+        if (this.rdoCreatePrimaryNewKey.isSelected()) {
+            this.txtPrimaryKeyName.setEnabled(true);
+            this.lstFields.setEnabled(false);
+        } else if (this.rdoUseExistingFieldAsPrimariKey.isSelected()) {
+            this.txtPrimaryKeyName.setEnabled(false);
+            this.lstFields.setEnabled(true);
+        } else if (this.rdoDoNotCreatePrimaryKey.isSelected()) {
+            this.txtPrimaryKeyName.setEnabled(false);
+            this.lstFields.setEnabled(false);
+        }
+    }
+
+    public String getPrimaryKeyName() {
+        String pkname = null;
+        if (this.rdoCreatePrimaryNewKey.isSelected()) {
+            pkname = this.txtPrimaryKeyName.getText();
+
+        } else if (this.rdoUseExistingFieldAsPrimariKey.isSelected()) {
+            pkname = (String) this.lstFields.getSelectedValue();
+        }
+        if (StringUtils.isBlank(pkname)) {
+            return null;
+        }
+        return pkname.trim();
+    }
+
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Primary_key");
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        return true;
+    }
+
+    public void enterPanel() {
+        this.fillListOfFields();
+        if( !this.provider.canCreatetable() ) {
+            this.rdoCreatePrimaryNewKey.setEnabled(false);
+            this.rdoUseExistingFieldAsPrimariKey.setEnabled(false);
+            this.rdoDoNotCreatePrimaryKey.setEnabled(false);
+        
+            this.rdoCreatePrimaryNewKey.setSelected(false);
+            this.rdoUseExistingFieldAsPrimariKey.setSelected(false);
+            this.rdoDoNotCreatePrimaryKey.setSelected(false);
+        } else {
+            this.rdoCreatePrimaryNewKey.setEnabled(true);
+            this.rdoUseExistingFieldAsPrimariKey.setEnabled(true);
+            this.rdoDoNotCreatePrimaryKey.setEnabled(true);
+            
+            if (! this.rdoCreatePrimaryNewKey.isSelected()
+                && ! this.rdoUseExistingFieldAsPrimariKey.isSelected()
+                && ! this.rdoDoNotCreatePrimaryKey.isSelected()) {
+                this.rdoCreatePrimaryNewKey.setSelected(true);
+            }
+        }
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void fillListOfFields() {
+        try {
+            FeatureStore source = this.provider.getSource();
+            FeatureType sourceFeatureType = source.getDefaultFeatureType();
+            DefaultListModel model = new DefaultListModel();
+            for (int i = 0; i < sourceFeatureType.size(); i++) {
+                model.addElement(sourceFeatureType.getAttributeDescriptor(i).getName());
+            }
+            this.lstFields.setModel(model);
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/SelectPkPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/PermissionsPanel.java	(revision 42196)
@@ -0,0 +1,187 @@
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JComponent;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+public class PermissionsPanel extends PermissionsPanelLayout implements ExporttoSwingProviderPanel {
+    private static final long serialVersionUID = -1930610404012797310L;
+
+    private ExporttoJDBCOptions provider;
+
+    public PermissionsPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+
+    private void initComponents() {
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                doUpdateState();
+            }
+        };
+        this.chkAll.addActionListener(listener);
+        this.chkSelect.addActionListener(listener);
+        this.chkUpdate.addActionListener(listener);
+        this.chkInsert.addActionListener(listener);
+        this.chkDelete.addActionListener(listener);
+        this.chkTruncate.addActionListener(listener);
+        this.chkTrigger.addActionListener(listener);
+        this.chkReference.addActionListener(listener);
+        this.translate();
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblHeader.setText("<html>"+i18nManager.getTranslation("_Permissions_header")+"</html>");
+        this.chkAll.setText(i18nManager.getTranslation("_All"));
+        
+        // Nota:
+        // No traducimos los nombres de los permisos ya que lo normal es que si
+        // alguien los precisa usar los conozca en ingles.
+        
+        this.lblRoleAll.setText(i18nManager.getTranslation("_role"));
+        this.lblRoleSelect.setText(i18nManager.getTranslation("_role"));
+        this.lblRoleUpdate.setText(i18nManager.getTranslation("_role"));
+        this.lblRoleInsert.setText(i18nManager.getTranslation("_role"));
+        this.lblRoleDelete.setText(i18nManager.getTranslation("_role"));
+        this.lblRoleTruncate.setText(i18nManager.getTranslation("_role"));
+        this.lblRoleTrigger.setText(i18nManager.getTranslation("_role"));
+        this.lblRoleReference.setText(i18nManager.getTranslation("_role"));
+
+    }
+    
+    protected void doUpdateState() {
+        this.txtRoleAll.setEnabled(this.chkAll.isSelected());
+        this.txtRoleSelect.setEnabled(this.chkSelect.isSelected());
+        this.txtRoleUpdate.setEnabled(this.chkUpdate.isSelected());
+        this.txtRoleInsert.setEnabled(this.chkInsert.isSelected());
+        this.txtRoleDelete.setEnabled(this.chkDelete.isSelected());
+        this.txtRoleTruncate.setEnabled(this.chkTruncate.isSelected());
+        this.txtRoleTrigger.setEnabled(this.chkTrigger.isSelected());
+        this.txtRoleReference.setEnabled(this.chkReference.isSelected());
+    }
+    
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Permissions");    
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        return true;
+    }
+    
+    public void enterPanel() {
+        boolean enabled = this.provider.canCreatetable();
+        this.chkAll.setEnabled(enabled);
+        this.chkSelect.setEnabled(enabled);
+        this.chkUpdate.setEnabled(enabled);
+        this.chkInsert.setEnabled(enabled);
+        this.chkDelete.setEnabled(enabled);
+        this.chkTruncate.setEnabled(enabled);
+        this.chkTrigger.setEnabled(enabled);
+        this.chkReference.setEnabled(enabled);
+    }
+    
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public String getSelectRole() {
+        if( !this.chkSelect.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleSelect.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+    public String getInsertRole() {
+        if( !this.chkInsert.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleInsert.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+    public String getUpdateRole() {
+        if( !this.chkUpdate.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleUpdate.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+    public String getDeleteRole() {
+        if( !this.chkDelete.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleDelete.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+    public String getTruncateRole() {
+        if( !this.chkTruncate.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleTruncate.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+    public String getReferenceRole() {
+        if( !this.chkReference.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleReference.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+    public String getTriggerRole() {
+        if( !this.chkTrigger.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleTrigger.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+    public String getAllRole() {
+        if( !this.chkAll.isSelected() ) {
+            return null;
+        } 
+        String role = this.txtRoleAll.getText();
+        if( StringUtils.isBlank(role) ) {
+            return null;
+        }
+        return role.trim();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanelLayout.java	(revision 42196)
@@ -0,0 +1,98 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.Box;
+import javax.swing.GroupLayout;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+
+/**
+ *
+ * @author usuario
+ */
+public class IdentifiersOptionsPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form IdentifiersOptionsPanelLayout
+     */
+    public IdentifiersOptionsPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        lblHeader = new JLabel();
+        chkTraslateToLowerCase = new JCheckBox();
+        chkRemoveSpaces = new JCheckBox();
+        filler1 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        jLabel1 = new JLabel();
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        lblHeader.setText("<html>\nAlgunas bases de datos precisan tratar los identificadores de tabla o campo que tienen mayusculas y minusculas mezcladas, o espacios en blanco de forma especial a la hora de referirse a ellos. \nEs recomendable que no los utilice para evitar problemas.<br>\nPuede indicar al asistente que traslade todos los nombres de campo a minusculas y que use \"_\" en lugar de espacios en blanco en el nombre de tabla si los hubiese.\n</html>"); // NOI18N
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(lblHeader, gridBagConstraints);
+
+        chkTraslateToLowerCase.setText("Trasladar identificadores de campo y tabla a minusculas");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkTraslateToLowerCase, gridBagConstraints);
+
+        chkRemoveSpaces.setText("Trasladar espacios en blanco en los identificadores a  \"_\"");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(chkRemoveSpaces, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = GridBagConstraints.VERTICAL;
+        add(filler1, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        gridBagConstraints.weighty = 0.1;
+        add(jLabel1, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected JCheckBox chkRemoveSpaces;
+    protected JCheckBox chkTraslateToLowerCase;
+    protected Box.Filler filler1;
+    protected JLabel jLabel1;
+    protected JLabel lblHeader;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/IdentifiersOptionsPanel.java	(revision 42196)
@@ -0,0 +1,69 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import javax.swing.JComponent;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ *
+ * @author usuario
+ */
+public class IdentifiersOptionsPanel extends IdentifiersOptionsPanelLayout implements ExporttoSwingProviderPanel {
+    private static final long serialVersionUID = -6390855050271511346L;
+
+    private final ExporttoJDBCOptions provider;
+
+    public IdentifiersOptionsPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+
+    private void initComponents() {
+        this.chkRemoveSpaces.setSelected(true);
+        this.chkTraslateToLowerCase.setSelected(true);
+
+        this.translate();
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+                
+        this.chkRemoveSpaces.setText(i18nManager.getTranslation("_Trasladar_espacios_a_guiones"));
+        this.chkTraslateToLowerCase.setText(i18nManager.getTranslation("_Trasladar_identificadores_a_minusculas"));
+        this.lblHeader.setText("<html>"+i18nManager.getTranslation("_Table_and_fields_name_options_header")+"<html>");
+    }
+    
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Table_and_fields_name_options");
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        return true;
+    }
+
+    public void enterPanel() {
+        
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    public boolean getTranslateToLowerCase() {
+        return this.chkTraslateToLowerCase.isSelected();
+    }
+
+    public boolean getRemoveSpacesInTableName() {
+        return this.chkRemoveSpaces.isSelected();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanelLayout.java	(revision 42196)
@@ -0,0 +1,85 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.Box;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import org.jdesktop.layout.GroupLayout;
+
+/**
+ *
+ * @author usuario
+ */
+public class GeometryIndexPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form GeometryIndexPanelLayout
+     */
+    public GeometryIndexPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        lblHeader = new JLabel();
+        chkCreateGeometryIndex = new JCheckBox();
+        filler1 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        filler2 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        lblHeader.setText("<html>\nSi la tabla contiene columnas de tipo geometria es recomendable que cree un indice espacial sobre ellas.\n</html>"); // NOI18N
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(lblHeader, gridBagConstraints);
+
+        chkCreateGeometryIndex.setText("Crear indice espacial sobre las columnas de tipo geometria"); // NOI18N
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(chkCreateGeometryIndex, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.1;
+        add(filler1, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        add(filler2, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    public JCheckBox chkCreateGeometryIndex;
+    public Box.Filler filler1;
+    public Box.Filler filler2;
+    public JLabel lblHeader;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/CheckGeometriesPanelLayout.form	(revision 42196)
@@ -0,0 +1,1188 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.ButtonGroup" name="buttonGroup1">
+    </Component>
+  </NonVisualComponents>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblHeader">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Validacion de la informacion geometrica"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblCheckIsCorrupt">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Cuando la geometria este corrupta;"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdbCheckNone">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="No realizar ninguna comprobacion sobre las geometrias"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdbCheckIsCorrupt">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Comprobar que la geometria no este corrupta"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="3" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cboActionIsCorrupt">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="rdbCheckIsValid">
+      <Properties>
+        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+          <ComponentRef name="buttonGroup1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Comprobar la validez de las geometrias antes de insertarlas"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="12" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblCheckIsvalid">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Cuando la geometria no sea valida:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="14" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cboActionIsValid">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="18" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[0, 32767]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="20" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 32767]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkTryFixGeometry">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Intentar reparar la geometria"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="16" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12_lblHeader">
+          <CodeVariable name="lblHeader" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblHeader"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="13_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="13_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18_lblCheckIsCorrupt">
+          <CodeVariable name="lblCheckIsCorrupt" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblCheckIsCorrupt"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="13_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="19_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="19_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26_rdbCheckNone">
+          <CodeVariable name="rdbCheckNone" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdbCheckNone"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="19_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="27_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="27_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="27_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="27_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="27_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="27_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="27_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33_rdbCheckIsCorrupt">
+          <CodeVariable name="rdbCheckIsCorrupt" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdbCheckIsCorrupt"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="27_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="34_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39_cboActionIsCorrupt">
+          <CodeVariable name="cboActionIsCorrupt" type="8196" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cboActionIsCorrupt"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="34_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="40_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47_rdbCheckIsValid">
+          <CodeVariable name="rdbCheckIsValid" type="8196" declaredType="javax.swing.JRadioButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="rdbCheckIsValid"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="40_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="48_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53_lblCheckIsvalid">
+          <CodeVariable name="lblCheckIsvalid" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblCheckIsvalid"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="48_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="54_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="54_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="58">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59_cboActionIsValid">
+          <CodeVariable name="cboActionIsValid" type="8196" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cboActionIsValid"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="54_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="60_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="63">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="60_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="60_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="66_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="68">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="69_filler2">
+          <CodeVariable name="filler2" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="66_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="70_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="70_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="70_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="70_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="70_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="70_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75_chkTryFixGeometry">
+          <CodeVariable name="chkTryFixGeometry" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkTryFixGeometry"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="70_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/JDBCConnectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/JDBCConnectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/JDBCConnectionPanel.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class JDBCConnectionPanel  implements ExporttoSwingProviderPanel {
+
+    private static final long serialVersionUID = -3278172717881233447L;
+
+    private static final Logger LOG = LoggerFactory.getLogger(JDBCConnectionPanel.class);
+    private org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel connectionPanel = null;
+    private final ExporttoJDBCOptions provider;
+
+
+    public JDBCConnectionPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+
+    private void initComponents() {
+        this.connectionPanel = new org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel();
+    }
+    
+    public void enterPanel() {
+        // Default do nothing
+    }
+    
+    public JDBCServerExplorerParameters getServerExplorerParameters() {
+        return this.connectionPanel.getServerExplorerParameters();
+    }
+    
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("connection_params");
+    }
+    
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        DBServerExplorerParameters connection = this.connectionPanel.getServerExplorerParameters();
+        try {
+            connection.validate();
+            return true;
+        } catch (ValidateDataParametersException ex) {
+            throw new ExporttoPanelValidationException(ex.getMessageStack(),ex);
+        } catch(Exception ex) {
+            return false;
+        }
+    }
+
+    public JComponent asJComponent() {
+        return this.connectionPanel;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/JDBCConnectionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/panel/GeometryIndexPanel.java	(revision 42196)
@@ -0,0 +1,75 @@
+
+package org.gvsig.exportto.swing.prov.jdbc.panel;
+
+import javax.swing.JComponent;
+import org.gvsig.exportto.swing.prov.jdbc.ExporttoJDBCOptions;
+import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GeometryIndexPanel extends GeometryIndexPanelLayout implements ExporttoSwingProviderPanel {
+    private static final long serialVersionUID = -3995015914295698209L;
+    
+    private static final Logger logger = LoggerFactory.getLogger(GeometryIndexPanel.class);
+
+    private ExporttoJDBCOptions provider;
+
+    public GeometryIndexPanel(ExporttoJDBCOptions provider) {
+        this.provider = provider;
+        initComponents();
+    }
+
+    private void initComponents() {
+        this.translate();
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblHeader.setText("<html>"+i18nManager.getTranslation("_Create_spatial_index_header")+"</html>");
+        this.chkCreateGeometryIndex.setText(i18nManager.getTranslation("_Crear_indice_espacial_sobre_las_columnas_de_tipo_geometria"));
+    }
+
+    public String getPanelTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Create_spatial_index");    
+    }
+
+    public boolean isValidPanel() throws ExporttoPanelValidationException {
+        return true;
+    }
+    
+    public void enterPanel() {
+        if( this.provider.canCreatetable() ) {
+            int index = -1;
+            try {
+                index = this.provider.getSource().getDefaultFeatureType().getDefaultGeometryAttributeIndex();
+            } catch (DataException ex) {
+                logger.warn("Problems determining if the tabla has a geometry column",ex);
+            }
+            if( index <0 ) {
+                this.chkCreateGeometryIndex.setEnabled(false);
+                this.chkCreateGeometryIndex.setSelected(false);
+            } else {
+                this.chkCreateGeometryIndex.setEnabled(true);
+                this.chkCreateGeometryIndex.setSelected(true);
+            }
+        } else {
+            this.chkCreateGeometryIndex.setEnabled(false);
+            this.chkCreateGeometryIndex.setSelected(false);
+        }
+    }
+    
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public boolean getCreateIndexInGeometryRow() {
+        return this.chkCreateGeometryIndex.isSelected();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporttoJDBCOptions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporttoJDBCOptions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporttoJDBCOptions.java	(revision 42196)
@@ -0,0 +1,69 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.exportto.swing.prov.jdbc;
+
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface ExporttoJDBCOptions  {
+
+    public JDBCServerExplorerParameters getExplorerParameters();
+    
+    public String getSchema();
+    
+    public String getTableName();
+    
+    public boolean canCreatetable();
+    
+    public String getPrimaryKey();
+    
+    public int getGeometryChecks();
+    
+    public int getGeometryChecksAction();
+    
+    public String getStoreName();
+
+    public String getExplorerName();
+    
+    public FeatureStore getSource();
+    
+    public boolean getTryToFixGeometry();
+
+    public boolean getTranslateIdentifiersToLowerCase();
+
+    public boolean getRemoveSpacesInIdentifiers();
+    
+    public IProjection getTargetProjection();
+    
+    public String getSelectRole();
+    
+    public String getInsertRole();
+    
+    public String getUpdateRole();
+    
+    public String getDeleteRole();
+    
+    public String getTruncateRole();
+    
+    public String getReferenceRole();
+    
+    public String getTriggerRole();
+    
+    public String getAllRole();
+    
+    public String getPostCreatingStatement();
+    
+    public boolean getCreateIndexInGeometryRow();
+    
+    public boolean getUpdateTableStatistics();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProviderFactory.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.jdbc;
+
+import java.util.Iterator;
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.spi.AbstractExporttoProviderFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class BaseExporttoJDBCProviderFactory extends
+        AbstractExporttoProviderFactory {
+
+    private static final String PROVIDER_NAME = "JDBC";
+
+    public BaseExporttoJDBCProviderFactory() {
+        super(new int[]{
+            ExporttoSwingManager.VECTORIAL_TABLE_WITHOUT_GEOMETRY,
+            ExporttoSwingManager.VECTORIAL_TABLE_WITH_GEOMETRY});
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+
+    public String getDescription() {
+        return Messages.getText("general_exporter_description",
+                new String[]{"DataBase (" + getConnectorNames() + " throws JDBC)"});
+    }
+
+    public String getLabel() {
+        return Messages.getText("general_exporter_label",
+                new String[]{"DataBase (throws JDBC)"});
+    }
+
+    private String getConnectorNames() {
+        try {
+            StringBuilder names = new StringBuilder();
+
+            DataManager dataManager = DALLocator.getDataManager();
+            List<String> explorers = dataManager.getExplorerProviders();
+
+            DataServerExplorerParameters params;
+
+            Iterator<String> it = explorers.iterator();
+            while ( it.hasNext() ) {
+                String explorerName = it.next();
+                try {
+                    params = dataManager.createServerExplorerParameters(explorerName);
+                } catch (DataException e) {
+                    continue;
+                }
+                if ( params instanceof JDBCServerExplorerParameters ) {
+                    JDBCServerExplorerParameters dbParams = (JDBCServerExplorerParameters) params;
+                    if ( names.length() > 0 ) {
+                        names.append(", ");
+                    }
+                    names.append(dbParams.getExplorerName());
+                }
+            }
+            return names.toString();
+        } catch (Exception ex) {
+            return "";
+        }
+    }
+
+    public Provider create(DynObject parameters, ProviderServices services) throws ServiceException {
+        return new BaseExporttoJDBCProvider(services,
+                (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE),
+                (IProjection) parameters.getDynValue(PARAMETER_PROJECTION));
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/BaseExporttoJDBCProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/pom.xml	(revision 42196)
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov.jdbc</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.control</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.db.lib</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>     
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+
+  </dependencies>
+</project>
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.prov.postgresql.ExporttoPostgreSQLProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderLibrary.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.postgresql;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+/**
+ * Library to initialize and register the file Exporto provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoPostgreSQLProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        providerManager
+            .addProviderFactory(new ExporttoPostgreSQLProviderFactory());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderFactory.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.postgresql;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.spi.AbstractExporttoProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoPostgreSQLProviderFactory extends
+    AbstractExporttoProviderFactory {
+
+    private static final String PROVIDER_NAME = "PostgreSQL";
+
+    public ExporttoPostgreSQLProviderFactory() {
+        super(new int[] {
+            ExporttoSwingManager.VECTORIAL_TABLE_WITHOUT_GEOMETRY,
+            ExporttoSwingManager.VECTORIAL_TABLE_WITH_GEOMETRY });
+    }
+
+    public Provider create(DynObject parameters, ProviderServices services)
+        throws ServiceException {
+        return new ExporttoPostgreSQLProvider(services,
+            (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE),
+            (IProjection) parameters.getDynValue(PARAMETER_PROJECTION));
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider which gets Exporto from a file.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProvider.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.postgresql;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.prov.jdbc.BaseExporttoJDBCProvider;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoPostgreSQLProvider extends BaseExporttoJDBCProvider
+    implements ExporttoSwingProvider {
+
+    /**
+     * Constructor.
+     */
+    public ExporttoPostgreSQLProvider(ProviderServices providerServices,
+        FeatureStore featureStore, IProjection projection) {
+        super(providerServices, featureStore, projection);
+    }
+
+    @Override
+    public String getStoreName() {
+        return "PostgreSQL";
+    }
+
+    @Override
+    public String getExplorerName() {
+        return "PostgreSQLExplorer";
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/src/main/java/org/gvsig/exportto/swing/prov/postgresql/ExporttoPostgreSQLProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/pom.xml	(revision 42196)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov.postgresql</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.jdbc</artifactId>
+      <scope>compile</scope>
+    </dependency>
+     <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+  </dependencies>
+</project>
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.postgresql
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/pom.xml	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov.mysql</artifactId>
+  <packaging>jar</packaging>
+  <name>org.gvsig.exportto.swing.prov.mysql</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.jdbc</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+      <scope>compile</scope>        
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+
+  </dependencies>
+</project>
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProvider.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.mysql;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.exportto.swing.prov.jdbc.BaseExporttoJDBCProvider;
+
+import org.gvsig.exportto.swing.spi.ExporttoSwingProvider;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Exporto provider which gets Exporto from a file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoMySQLProvider extends BaseExporttoJDBCProvider
+    implements ExporttoSwingProvider {
+
+    /**
+     * Constructor.
+     * 
+     * @param providerServices
+     *            the services for the provider
+     * @param file
+     *            to get the Exporto from
+     */
+    public ExporttoMySQLProvider(ProviderServices providerServices,
+        FeatureStore featureStore, IProjection projection) {
+        super(providerServices, featureStore, projection);
+    }
+
+    public String getStoreName() {
+        return "MySQL";
+    }
+
+    public String getExplorerName() {
+        return "MySQLExplorer";
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderLibrary.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.mysql;
+
+import org.gvsig.exportto.swing.ExporttoSwingLibrary;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+/**
+ * Library to initialize and register the file Exporto provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoMySQLProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ExporttoSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        providerManager.addProviderFactory(new ExporttoMySQLProviderFactory());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderFactory.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.swing.prov.mysql;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.spi.AbstractExporttoProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoMySQLProviderFactory extends
+    AbstractExporttoProviderFactory {
+
+    private static final String PROVIDER_NAME = "MySQL";
+
+    public ExporttoMySQLProviderFactory() {
+        super(new int[] {
+            ExporttoSwingManager.VECTORIAL_TABLE_WITHOUT_GEOMETRY,
+            ExporttoSwingManager.VECTORIAL_TABLE_WITH_GEOMETRY });
+    }
+
+    public Provider create(DynObject parameters, ProviderServices services)
+        throws ServiceException {
+        return new ExporttoMySQLProvider(services,
+            (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE),
+            (IProjection) parameters.getDynValue(PARAMETER_PROJECTION));
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/ExporttoMySQLProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exporto package documentation</title>
+</head>
+<body>
+
+	<p>Exporto provider which gets Exporto from a file.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/java/org/gvsig/exportto/swing/prov/mysql/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.exportto.swing.prov.mysql.ExporttoMySQLProviderLibrary
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.mysql
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/pom.xml	(revision 42196)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.swing.prov</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.swing</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <modules>
+      <!--
+    <module>org.gvsig.exportto.swing.prov.generic</module>  
+    -->
+    <module>org.gvsig.exportto.swing.prov.file</module>  
+    <module>org.gvsig.exportto.swing.prov.shape</module>    
+    <module>org.gvsig.exportto.swing.prov.dxf</module>  
+    <module>org.gvsig.exportto.swing.prov.jdbc</module>  
+    <module>org.gvsig.exportto.swing.prov.postgresql</module>    
+    <module>org.gvsig.exportto.swing.prov.mysql</module>      
+    <module>org.gvsig.exportto.swing.prov.dbf</module>      
+  </modules>
+</project>
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.exportto
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/pom.xml	(revision 42196)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <description>Symbology project</description>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.library</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+    </dependency>  
+  </dependencies>
+  
+  <build>
+    <plugins>
+
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>animal-sniffer-maven-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>  
+    </plugins>
+  </build>
+
+
+  <modules>
+    <module>org.gvsig.symbology.lib</module>
+    <module>org.gvsig.symbology.swing</module>
+    <module>org.gvsig.symbology.main</module>
+  </modules>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/pom.xml	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.main</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.swing.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+  </dependencies>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.symbology package documentation</title>
+</head>
+<body>
+
+	<p>Symbology library testing and demo application.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/Main.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/Main.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/Main.java	(revision 42196)
@@ -0,0 +1,126 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.main;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JToolBar;
+import javax.swing.WindowConstants;
+
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Main executable class for testing the Symbology library.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Main {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Main.class);
+
+    private SymbologyManager manager;
+    private SymbologySwingManager swingManager;
+
+    public static void main(String args[]) {
+        new DefaultLibrariesInitializer().fullInitialize();
+        Main main = new Main();
+        main.show();
+    }
+
+    @SuppressWarnings("serial")
+    public void show() {
+        manager = SymbologyLocator.getSymbologyManager();
+        swingManager = SymbologySwingLocator.getSwingManager();
+
+        Action showCookie = new AbstractAction("Get a Symbology") {
+
+            public void actionPerformed(ActionEvent e) {
+                showSymbology(manager);
+            }
+        };
+
+        Action exit = new AbstractAction("Exit") {
+
+            public void actionPerformed(ActionEvent e) {
+                System.exit(0);
+            }
+        };
+
+        JFrame frame = new JFrame("Symbology example app");
+        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+        // Create the menu bar.
+        JMenuBar menuBar = new JMenuBar();
+
+        // Build the menu.
+        JMenu menuFile = new JMenu("File");
+        menuFile.add(new JMenuItem(showCookie));
+        menuFile.add(new JMenuItem(exit));
+
+        menuBar.add(menuFile);
+
+        JToolBar toolBar = new JToolBar();
+        toolBar.add(new JButton(showCookie));
+        toolBar.add(new JButton(exit));
+
+        frame.setPreferredSize(new Dimension(200, 100));
+        frame.setJMenuBar(menuBar);
+        frame.add(toolBar, BorderLayout.PAGE_START);
+
+        // Display the window.
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+    public void showSymbology(SymbologyManager manager) {
+//        try {
+//            SymbologyService service =
+//                (SymbologyService) manager.getSymbologyService();
+//            JSymbologyServicePanel panel =
+//                swingManager.createSymbology(service);
+//            swingManager.getWindowManager().showWindow(panel, "Symbology",
+//                SymbologyWindowManager.MODE_WINDOW);
+//
+//        } catch (ServiceException e) {
+//            LOG.error("Error showing a Symbology", e);
+//        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/java/org/gvsig/symbology/main/Main.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your classes.
+
+This folder is added to the classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.symbology">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main/src/main/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.main
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.lib</artifactId>
+  <packaging>pom</packaging>
+  <name>org.gvsig.symbology.lib</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.symbology.lib.api</module>
+    <module>org.gvsig.symbology.lib.impl</module>
+  </modules>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.classpath
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.classpath	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.classpath	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.project
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.project	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.project	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.gvsig.symbology.lib.impl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.symbology.impl.SymbologyDefaultImplLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.symbology package documentation</title>
+</head>
+<body>
+
+	<p>Symbology library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/SymbologyDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/SymbologyDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/SymbologyDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {gvSIG}  {{Task}}
+ */
+package org.gvsig.symbology.impl;
+
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialIntervalLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialUniqueValueLegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.SymbologyLibrary;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.driver.impl.PersistenceBasedLegendReader;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.driver.impl.PersistenceBasedLegendWriter;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractClassifiedVectorLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractIntervalLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.FInterval;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.SingleSymbolLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.VectorialIntervalLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.VectorialUniqueValueLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.AttrInTableLabelingStrategy;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.DefaultLabelingMethod;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelClass;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelClassFactory;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.ZoomConstraintsImpl;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.AbstractFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.MarkerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.MultiLayerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.PictureFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.AbstractSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.MultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.AbstractLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.MultiLayerLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.PictureLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.SimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.AbstractMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.ArrowMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.MultiLayerMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.PictureMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.AbstractStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ArrowDecoratorStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.BackgroundFileStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.DefaultMask;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ImageStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.RemoteFileStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SVGStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleLabelStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleLineStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleMarkerFillPropertiesStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.impl.SimpleTextSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.warning.impl.WarningSymbol;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.util.Caller;
+import org.gvsig.tools.util.impl.DefaultCaller;
+
+/**
+ * Library for the Basic Symbology implementation.
+ * 
+ * @author gvSIG team
+ */
+public class SymbologyDefaultImplLibrary extends AbstractLibrary {
+	
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(SymbologyLibrary.class);
+        require(MapContextLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+		Caller caller = new DefaultCaller();
+		caller.add(new DefaultSymbologyManager.RegisterSymbologyManager());
+		if (!caller.call()) {
+			throw new LibraryException(SymbologyDefaultImplLibrary.class,
+					caller.getExceptions());
+		}
+	}
+
+    protected void doPostInitialize() throws LibraryException {
+        Caller caller = new DefaultCaller();
+
+        /*
+         * Add registry of symbols 
+         */
+        caller.add( new SimpleFillSymbol.RegisterSymbol() );
+        caller.add( new MultiLayerFillSymbol.RegisterSymbol() );
+        caller.add( new SimpleLineSymbol.RegisterSymbol() );
+        caller.add( new MultiLayerLineSymbol.RegisterSymbol() );
+        caller.add( new SimpleMarkerSymbol.RegisterSymbol() );
+        caller.add( new MultiLayerMarkerSymbol.RegisterSymbol() );
+        caller.add( new SimpleTextSymbol.RegisterSymbol() );
+        caller.add( new MultiShapeSymbol.RegisterSymbol() );
+        caller.add( new WarningSymbol.RegisterSymbol() );
+
+        caller.add( new PictureFillSymbol.RegisterSymbol() );
+        caller.add( new PictureLineSymbol.RegisterSymbol() );
+        caller.add( new PictureMarkerSymbol.RegisterSymbol() );
+
+//        caller.add( new MarkerFillSymbol.RegisterSymbol() );
+
+        /*
+         * Add registry of legends
+         */
+        caller.add( new VectorialUniqueValueLegend.RegisterLegend() );
+        caller.add( new VectorialIntervalLegend.RegisterLegend() );
+        caller.add( new SingleSymbolLegend.RegisterLegend() );
+        
+        /*
+         * Add registry of persistent styles
+         */
+        caller.add( new AbstractStyle.RegisterPersistence() );
+        caller.add( new ArrowDecoratorStyle.RegisterPersistence() );
+        caller.add( new DefaultMask.RegisterPersistence() );
+        caller.add( new SimpleLineStyle.RegisterPersistence() );
+
+        caller.add( new BackgroundFileStyle.RegisterPersistence() );
+        caller.add( new ImageStyle.RegisterPersistence() );
+        caller.add( new RemoteFileStyle.RegisterPersistence() );
+        caller.add( new SVGStyle.RegisterPersistence() );
+
+        /*
+         * Add registry of persistent symbols
+         */
+        caller.add( new AbstractSymbol.RegisterPersistence() );
+        caller.add( new AbstractFillSymbol.RegisterPersistence() );
+        caller.add( new SimpleFillSymbol.RegisterPersistence() );
+        caller.add( new MultiLayerFillSymbol.RegisterPersistence() );
+        caller.add( new AbstractLineSymbol.RegisterPersistence() );
+        caller.add( new SimpleLineSymbol.RegisterPersistence() );
+        caller.add( new MultiLayerLineSymbol.RegisterPersistence() );
+        caller.add( new AbstractMarkerSymbol.RegisterPersistence() );
+        caller.add( new SimpleMarkerSymbol.RegisterPersistence() );
+        caller.add( new ArrowMarkerSymbol.RegisterPersistence() );
+        caller.add( new MultiLayerMarkerSymbol.RegisterPersistence() );
+        caller.add( new SimpleTextSymbol.RegisterPersistence() );
+        caller.add( new MultiShapeSymbol.RegisterPersistence() );
+        caller.add( new WarningSymbol.RegisterPersistence() );
+                
+        caller.add( new PictureFillSymbol.RegisterPersistence() );
+        caller.add( new PictureLineSymbol.RegisterPersistence() );
+        caller.add( new PictureMarkerSymbol.RegisterPersistence() );
+        caller.add( new MarkerFillSymbol.RegisterPersistence() );
+        caller.add( new SimpleMarkerFillPropertiesStyle.RegisterPersistence() );
+
+
+        /*
+         * Add registry of persistent legends
+         */
+        caller.add(new AbstractLegend.RegisterPersistence());
+        caller.add(new AbstractVectorialLegend.RegisterPersistence());
+        caller.add(new AbstractClassifiedVectorLegend.RegisterPersistence());
+        caller.add(new FInterval.RegisterPersistence());
+        caller.add(new AbstractIntervalLegend.RegisterPersistence());
+        caller.add(new VectorialIntervalLegend.RegisterPersistence());
+        caller.add(new VectorialUniqueValueLegend.RegisterPersistence());
+        caller.add(new SingleSymbolLegend.RegisterPersistence());
+
+        /*
+         * Add registry of labeling classes
+         */
+        caller.add(new ZoomConstraintsImpl.RegisterPersistence());
+        caller.add(new LabelClass.RegisterPersistence());
+        caller.add(new DefaultLabelingMethod.RegisterPersistence());
+        caller.add(new AttrInTableLabelingStrategy.RegisterPersistence());
+                 
+        /*
+         * Default impl of simple label style
+         */
+        caller.add(new SimpleLabelStyle.RegisterPersistence());
+
+        /*
+         * Do register of all
+         */
+        if( !caller.call() ) {
+        	throw new LibraryException(SymbologyDefaultImplLibrary.class, caller.getExceptions());
+        }
+        
+        // Registering persistence-based legend reader/writer
+        // ===============================================
+        MapContextManager mcoman = MapContextLocator.getMapContextManager();
+        // =================================
+        mcoman.registerLegendReader(
+            // removing dot
+            SymbolManager.LEGEND_FILE_EXTENSION.substring(1),
+            PersistenceBasedLegendReader.class);
+        // =================================
+        mcoman.registerLegendWriter(
+            ISingleSymbolLegend.class,
+            SymbolManager.LEGEND_FILE_EXTENSION.substring(1),
+            PersistenceBasedLegendWriter.class);
+        mcoman.registerLegendWriter(
+            IVectorialUniqueValueLegend.class,
+            SymbolManager.LEGEND_FILE_EXTENSION.substring(1),
+            PersistenceBasedLegendWriter.class);
+        mcoman.registerLegendWriter(
+            IVectorialIntervalLegend.class,
+            SymbolManager.LEGEND_FILE_EXTENSION.substring(1),
+            PersistenceBasedLegendWriter.class);
+        // ===========================================================
+        
+        SymbologyManager symbologyManager = SymbologyLocator.getSymbologyManager();
+        symbologyManager.registerLabelClass(new LabelClassFactory());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/SymbologyDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/DefaultSymbologyManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/DefaultSymbologyManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/DefaultSymbologyManager.java	(revision 42196)
@@ -0,0 +1,261 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {}  {{Task}}
+*/
+package org.gvsig.symbology.impl;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClassFactory;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IBackgroundFileStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.FInterval;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.AttrInTableLabelingStrategy;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.DefaultLabelingMethod;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.IAttrInTableLabelingStrategy;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelClass;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.ZoomConstraintsImpl;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.IMultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IMarkerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IPictureFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.ISimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.MarkerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.PictureFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.MultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.IPictureLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ISimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.PictureLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.SimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.PictureMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ArrowDecoratorStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.BackgroundFileStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.DefaultMask;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IArrowDecoratorStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ISimpleLineStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleLabelStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleLineStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleMarkerFillPropertiesStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.impl.SimpleTextSymbol;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Default {@link SymbologyManager} implementation.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class DefaultSymbologyManager implements SymbologyManager {
+
+        private Map labelClassFactories = new HashMap();
+    private ILabelClassFactory defaultLabelClassFactory;
+        
+	public IInterval createInterval(double min, double max) {
+		return new FInterval(min, max);
+	}
+
+	public static class RegisterSymbologyManager implements Callable {
+
+		public Object call() throws Exception {
+
+			SymbologyLocator.registerSymbologyManager(DefaultSymbologyManager.class);
+	        
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public IArrowDecoratorStyle createArrowDecoratorStyle() {
+		return new ArrowDecoratorStyle();
+	}
+	
+//	public IMarkerSymbol createMarkerSymbol(){
+//		return new SimpleMarkerSymbol();
+//	}
+
+	public ISimpleMarkerSymbol createSimpleMarkerSymbol() {
+		return new SimpleMarkerSymbol();
+	}
+
+	public IMask createMask() {
+		return new DefaultMask();
+	}
+
+	public IMultiShapeSymbol createMultiShapeSymbol() {
+		return new MultiShapeSymbol();
+	}
+
+	public ISimpleFillSymbol createSimpleFillSymbol() {
+		return new SimpleFillSymbol();
+	}
+
+	public ISimpleLineSymbol createSimpleLineSymbol() {
+		return new SimpleLineSymbol();
+	}
+
+	public ISimpleLineStyle createSimpleLineStyle() {
+		return new SimpleLineStyle();
+	}
+	
+	public IBackgroundFileStyle createBackgroundFileStyle(URL imgURL)
+			throws IOException {
+		return BackgroundFileStyle.createStyleByURL(imgURL);
+	}
+
+	public ISimpleTextSymbol createSimpleTextSymbol() {
+		return new SimpleTextSymbol();
+	}
+
+	public IMarkerFillPropertiesStyle createSimpleMarkerFillPropertiesStyle() {
+		return new SimpleMarkerFillPropertiesStyle();
+	}
+
+	public IPictureFillSymbol createPictureFillSymbol(URL imageURL,
+			URL selImageURL) throws IOException {
+		return new PictureFillSymbol(imageURL, selImageURL);
+	}
+
+	public IPictureLineSymbol createPictureLineSymbol(URL imageURL,
+			URL selImageURL) throws IOException {
+		return new PictureLineSymbol(imageURL, selImageURL);
+	}
+
+	public IPictureMarkerSymbol createPictureMarkerSymbol(URL imageURL,
+			URL selImageURL) throws IOException {
+		return new PictureMarkerSymbol(imageURL, selImageURL);
+
+	}
+
+	public IMarkerFillSymbol createMarkerFillSymbol() {
+		return new MarkerFillSymbol();
+	}
+
+	public IAttrInTableLabelingStrategy createAttrInTableLabelingStrategy() {
+		return new AttrInTableLabelingStrategy();
+	}
+
+	public ILabelingStrategy createDefaultLabelingStrategy() {
+		return new AttrInTableLabelingStrategy();
+	}
+	
+	public ILabelingMethod createDefaultLabelingMethod() {
+		return new DefaultLabelingMethod();
+	}
+	
+	public IZoomConstraints createDefaultZoomConstraints() {
+		return new ZoomConstraintsImpl();
+	}
+
+	public ILabelStyle createDefaultLabelStyle() {
+		return new SimpleLabelStyle();
+	}
+
+        public void registerLabelClass(ILabelClassFactory factory) {
+            this.labelClassFactories.put(factory.getID().toLowerCase(), factory);
+            if( this.defaultLabelClassFactory==null ) {
+                this.defaultLabelClassFactory = factory;
+            }
+        }
+        
+        public Collection<ILabelClassFactory> getLabelClassFactories() {
+            return Collections.unmodifiableCollection(this.labelClassFactories.values());
+        }
+        
+        public ILabelClassFactory getLabelClassFactory(String id) {
+            if( id==null ) {
+                return null;
+            }
+            return (ILabelClassFactory) this.labelClassFactories.get(id.toLowerCase());
+        }
+        
+	public ILabelClass createDefaultLabel() {
+            ILabelClassFactory f = this.getDefaultLabelFactory();
+            if( f==null ) {
+                return null;
+            }
+            return f.create();
+	}
+	
+        public ILabelClassFactory getDefaultLabelFactory() {
+            return this.defaultLabelClassFactory;
+        }
+        
+        public void setDefaultLabelFactory(String id) {
+            ILabelClassFactory f = this.getLabelClassFactory(id);
+            if( f==null ) {
+                throw new IllegalArgumentException("factory id is null");
+            }
+            this.setDefaultLabelFactory(f);
+        }
+        
+        public void setDefaultLabelFactory(ILabelClassFactory factory) {
+            if( !this.labelClassFactories.containsValue(factory) ) {
+                this.labelClassFactories.put(factory.getID().toLowerCase(), factory);
+            }
+            this.defaultLabelClassFactory = factory;
+        }
+        
+        
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/impl/DefaultSymbologyManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleLabelStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleLabelStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleLabelStyle.java	(revision 42196)
@@ -0,0 +1,396 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IBackgroundFileStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.SimpleLineSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Implements a style for the creation of simple labels.
+ *
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SimpleLabelStyle extends AbstractStyle implements ILabelStyle {
+	
+	private static Logger logger = LoggerFactory.getLogger(SimpleLabelStyle.class);
+	
+	public static final String SIMPLE_LABEL_STYLE_PERSISTENCE_NAME =
+			"SIMPLE_LABEL_STYLE_PERSISTENCE_NAME";
+	
+	private Point2D markerPoint = new Point2D.Double();
+	// conertir a�� a Rectangle2D[] ja que pot arribar a gastar-se massivament
+	// en el pintat
+	private List<Rectangle2D> textFieldAreas = new ArrayList<Rectangle2D>();
+	private IBackgroundFileStyle background;
+	private Dimension defaultSize = new Dimension(32,32);
+	private Dimension sz;
+
+
+
+	public int getFieldCount() {
+		return textFieldAreas.size();
+	}
+
+	public void setTextFields(String[] texts) {
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; texts != null && i < texts.length; i++) {
+			sb.append(texts[i]);
+			if (i<texts.length)
+				sb.append(" ");
+		}
+	}
+
+	public boolean isSuitableFor(ISymbol symbol) {
+		return true;
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	/*
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className", getClassName());
+		xml.putProperty("desc", getDescription());
+		xml.putProperty("markerPointX", markerPoint.getX());
+		xml.putProperty("markerPointY", markerPoint.getY());
+
+		int size = getFieldCount();
+		String[] minx = new String[size];
+		String[] miny = new String[size];
+		String[] widths = new String[size];
+		String[] heights = new String[size];
+
+		Rectangle2D[] rects = getTextBounds();
+		for (int i = 0; i < rects.length; i++) {
+			minx[i] = String.valueOf(rects[i].getMinX());
+			miny[i] = String.valueOf(rects[i].getMinY());
+			widths[i] = String.valueOf(rects[i].getWidth());
+			heights[i] = String.valueOf(rects[i].getHeight());
+		}
+
+		xml.putProperty("minXArray", minx);
+		xml.putProperty("minYArray", miny);
+		xml.putProperty("widthArray", widths);
+		xml.putProperty("heightArray", heights);
+		if(getBackgroundFileStyle() != null){
+			XMLEntity bgXML = getBackgroundFileStyle().getXMLEntity();
+			bgXML.putProperty("id", "LabelStyle");
+			xml.addChild(bgXML);
+		}
+		if (sz!=null){
+			xml.putProperty("sizeW",(int)sz.getWidth());
+			xml.putProperty("sizeH",(int)sz.getHeight());
+		}
+		return xml;
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		setDescription(xml.getStringProperty("desc"));
+
+		double x = xml.getDoubleProperty("markerPointX");
+		double y = xml.getDoubleProperty("markerPointY");
+
+		double[] minx = xml.getDoubleArrayProperty("minXArray");
+		double[] miny = xml.getDoubleArrayProperty("minYArray");
+		double[] widths = xml.getDoubleArrayProperty("widthArray");
+		double[] heights = xml.getDoubleArrayProperty("heightArray");
+
+		textFieldAreas.clear();
+		for (int i = 0; i < minx.length; i++) {
+			addTextFieldArea(new Rectangle2D.Double(
+					minx[i],
+					miny[i],
+					widths[i],
+					heights[i]));
+		}
+		markerPoint.setLocation(x, y);
+		XMLEntity bgXML = xml.firstChild("id", "LabelStyle");
+		if (bgXML!=null) {
+			background = (BackgroundFileStyle) SymbologyFactory.createStyleFromXML(xml.getChild(0), null);
+		}
+		if (xml.contains("sizeW"))
+			sz=new Dimension(xml.getIntProperty("sizeW"),xml.getIntProperty("sizeH"));
+		
+	}
+	*/
+
+	public Rectangle2D[] getTextBounds() {
+		return (Rectangle2D[]) textFieldAreas.toArray(new Rectangle2D[textFieldAreas.size()]);
+	}
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r)
+			throws SymbolDrawingException {
+		if(getBackgroundFileStyle() != null)
+			getBackgroundFileStyle().drawInsideRectangle(g, r);
+	}
+
+
+	public Dimension getSize() {
+		if (sz == null && getBackgroundFileStyle() != null) {
+			Rectangle bgBounds = getBackgroundFileStyle().getBounds();
+			setSize(bgBounds.getWidth(), bgBounds.getHeight());
+		}else if (sz==null)
+			sz = defaultSize;
+		return sz;
+	}
+
+	public Point2D getMarkerPoint() {
+		return markerPoint;
+	}
+
+	public void setMarkerPoint(Point2D p) throws IllegalArgumentException {
+		if (p.getX()<0 || p.getX()>1)
+			throw new IllegalArgumentException("X must be >=0 and <=1 ("+p.getX()+")");
+		if (p.getY()<0 || p.getY()>1)
+			throw new IllegalArgumentException("Y must be >=0 and <=1 ("+p.getY()+")");
+		// the marker represents the point labeled in relative percent units
+		this.markerPoint = p;
+	}
+
+
+	public void drawOutline(Graphics2D g, Rectangle r) throws SymbolDrawingException {
+		if(getBackgroundFileStyle() != null)
+			getBackgroundFileStyle().drawOutline(g, r);
+
+		final double[] xy = new double[2];
+		// draw the pointer
+		{
+			xy[0] = markerPoint.getX();
+			xy[1] = markerPoint.getY();
+
+			int x = (int) Math.round(r.width * xy[0]);
+			int y = (int) Math.round(r.height * xy[1]);
+
+			int size = 7;
+			g.setColor(Color.ORANGE.darker());
+			g.fillOval(x, y, size, size);
+			g.setColor(Color.BLACK.brighter());
+			g.drawString(Messages.getText("labeled_point"), x + size + 10, y + size);
+			g.setColor(Color.BLACK);
+			g.drawLine(x-size, (int) (y+(size*0.5)), x+2*size-1, (int) (y+(size*0.5)));
+			g.drawLine((int) (x+(size*0.5)), y-size, (int) (x+(size*0.5)), y+2*size-1);
+		}
+
+		// draw the text fields
+		if (textFieldAreas.size() > 0) {
+			SimpleFillSymbol sym = new SimpleFillSymbol();
+			Color c = Color.blue.brighter().brighter();
+
+			sym.setFillColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 100));
+			SimpleLineSymbol outline = new SimpleLineSymbol();
+			c = Color.BLACK;
+			outline.setLineColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 100));
+			sym.setOutline(outline);
+			for (int i = 0; i < textFieldAreas.size(); i++) {
+				//FIXME: Esto es un parche, habr�a que cambiar el API de los simbolos y/o estilos
+				//pero mientras tanto
+				if(getBackgroundFileStyle() == null){
+					Rectangle2D textFieldArea = (Rectangle2D) textFieldAreas.get(i);
+					xy[0] = textFieldArea.getX();
+					xy[1] = textFieldArea.getY();
+
+					int x = (int) Math.round(((r.width) * xy[0]));
+					int y = (int) Math.round((r.height) * xy[1]);
+
+					xy[0] = textFieldArea.getMaxX();
+					xy[1] = textFieldArea.getMaxY();
+
+					int width = (int) Math.round((r.width * xy[0]) -x);
+					int height = (int) Math.round((r.height * xy[1]) - y) ;
+
+					Envelope env = null;
+					try {
+						env = GeometryLocator.getGeometryManager().
+								createEnvelope(x, y, x+width, y+height, SUBTYPES.GEOM2D);
+					} catch (Exception e) {
+						logger.error("While creating envelope", e);
+						throw new SymbolDrawingException(TYPES.SURFACE);
+					}
+					
+					sym.draw(g, null, env.getGeometry(), null, null);
+					g.setColor(Color.BLACK);
+					g.drawString(String.valueOf(i+1), x+5, y + 10); // start with 1
+				} else {
+					double xOffset = 0;
+					double yOffset = 0;
+					double scale = 1;
+					Dimension backgroundBounds = getSize();
+					if (backgroundBounds.getWidth()>backgroundBounds.getHeight()) {
+						scale = r.getWidth()/backgroundBounds.getWidth();
+						yOffset = 0.5*(r.getHeight() - backgroundBounds.getHeight()*scale);
+					} else {
+						scale = r.getHeight()/backgroundBounds.getHeight();
+						xOffset = 0.5*(r.getWidth() - backgroundBounds.getWidth()*scale);
+					}
+
+					Rectangle2D textFieldArea = (Rectangle2D) textFieldAreas.get(i);
+					xy[0] = textFieldArea.getX();
+					xy[1] = textFieldArea.getY();
+
+					int x = (int) Math.round(xy[0]*backgroundBounds.getWidth()*scale+xOffset);
+					int y = (int) Math.round(xy[1]*backgroundBounds.getHeight()*scale+yOffset);
+
+					xy[0] = textFieldArea.getMaxX();
+					xy[1] = textFieldArea.getMaxY();
+
+					int width = (int) Math.round((xy[0]*backgroundBounds.getWidth()*scale+xOffset)-x);
+					int height = (int) Math.round((xy[1]*backgroundBounds.getHeight()*scale+yOffset)-y);
+
+					Envelope env = null;
+					try {
+						env = GeometryLocator.getGeometryManager().
+								createEnvelope(x, y, x+width, y+height, SUBTYPES.GEOM2D);
+					} catch (Exception e) {
+						logger.error("While creating envelope", e);
+						throw new SymbolDrawingException(TYPES.SURFACE);
+					}
+					
+					sym.draw(g, null, env.getGeometry(), null, null);
+					g.setColor(Color.BLACK);
+					g.drawString(String.valueOf(i+1), x+5, y + 10); // start with 1
+
+				}
+			}
+		}
+	}
+
+	public void setTextFieldArea(int index, Rectangle2D rect) {
+		textFieldAreas.set(index, rect);
+	}
+
+	public void addTextFieldArea(Rectangle2D rect) {
+		textFieldAreas.add(rect);
+	}
+
+	public void deleteTextFieldArea(int index) {
+		textFieldAreas.remove(index);
+	}
+
+	public void setSize(double width, double height) {
+		sz = new Dimension( (int) Math.round(width), (int) Math.round(height));
+	}
+
+	public IBackgroundFileStyle getBackgroundFileStyle() {
+		return background;
+	}
+
+	public void setBackgroundFileStyle(IBackgroundFileStyle bg) {
+		this.background = bg;
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			DynStruct definition = manager.getDefinition(
+	    		SIMPLE_LABEL_STYLE_PERSISTENCE_NAME);
+
+			if (definition == null){
+				definition = manager.addDefinition(
+	        		SimpleLabelStyle.class,
+	        		SIMPLE_LABEL_STYLE_PERSISTENCE_NAME,
+	        		SIMPLE_LABEL_STYLE_PERSISTENCE_NAME + " Persistent definition", 
+	        		null, 
+	        		null);
+				definition.extend(manager.getDefinition(
+						AbstractStyle.STYLE_PERSISTENCE_DEFINITION_NAME));
+				definition.addDynFieldObject("markerPoint").setClassOfValue(Point2D.class)
+				.setMandatory(true);
+				definition.addDynFieldList("textFieldAreas").setClassOfItems(Rectangle2D.class)
+				.setMandatory(true);
+				definition.addDynFieldObject("background").setClassOfValue(IBackgroundFileStyle.class)
+				.setMandatory(false);
+				definition.addDynFieldObject("defaultSize").setClassOfValue(Dimension.class)
+				.setMandatory(true);
+				definition.addDynFieldObject("size").setClassOfValue(Dimension.class)
+				.setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+	}
+	
+	
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		
+		super.loadFromState(state);
+		
+		this.markerPoint = (Point2D) state.get("markerPoint");
+		this.textFieldAreas = (List<Rectangle2D>) state.get("textFieldAreas");
+		
+		if (state.hasValue("background")) {
+			this.background = (IBackgroundFileStyle) state.get("background");
+		}
+		
+		this.defaultSize = (Dimension) state.get("defaultSize");
+		this.sz = (Dimension) state.get("size");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+
+		super.saveToState(state);
+		
+		state.set("markerPoint", this.markerPoint);
+		state.set("textFieldAreas", this.textFieldAreas);
+		
+		if (this.background != null) {
+			state.set("background", this.background);
+		}
+		
+		state.set("defaultSize", this.defaultSize);
+		state.set("size", this.getSize());
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/RemoteFileStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/RemoteFileStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/RemoteFileStyle.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.remoteclient.utils.Utilities;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * 
+ * RemoteFileStyle.java
+ *
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Feb 13, 2008
+ *
+ */
+public class RemoteFileStyle extends BackgroundFileStyle {
+    public static final String REMOTE_FILE_STYLE_PERSISTENCE_DEFINITION_NAME = "RemoteFileStyle";
+    private static final String SOURCE = "source";
+
+    private BackgroundFileStyle bgStyle;
+	
+	@Override
+	public Rectangle getBounds() {
+		return bgStyle.getBounds();
+	}
+
+	@Override
+	public void setSource(URL url) throws IOException {
+		File f = Utilities.downloadFile(url, "remote_picture_symbol_style", null);
+		source = url;
+		bgStyle = BackgroundFileStyle.createStyleByURL(f.toURI().toURL());
+	}
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r, boolean keepAspectRatio) throws SymbolDrawingException {
+		bgStyle.drawInsideRectangle(g, r, keepAspectRatio);
+	}
+
+	public void drawOutline(Graphics2D g, Rectangle r) throws SymbolDrawingException {
+		bgStyle.drawOutline(g, r);
+	}
+
+	public boolean isSuitableFor(ISymbol symbol) {
+		return bgStyle.isSuitableFor(symbol);
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	   public void loadFromState(PersistentState state)
+	    throws PersistenceException {
+	        try {
+	            setSource(state.getURL(SOURCE));
+	        } catch (Exception e) {
+	            throw new PersistenceCantSetSourceException(e);
+	        }
+	    }
+
+	    public void saveToState(PersistentState state) throws PersistenceException {
+	        state.set(SOURCE, source);
+	    }
+	    
+	    public static class RegisterPersistence implements Callable {
+
+	        public Object call() throws Exception {
+	            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+	            if( manager.getDefinition(REMOTE_FILE_STYLE_PERSISTENCE_DEFINITION_NAME)==null ) {
+	            	DynStruct definition = manager.addDefinition(
+	            			RemoteFileStyle.class,
+	            			REMOTE_FILE_STYLE_PERSISTENCE_DEFINITION_NAME,
+	            			REMOTE_FILE_STYLE_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+	            			null, 
+	            			null
+	            	);
+
+	                // Extend the Style base definition
+	                definition.extend(manager.getDefinition(BACKGROUND_FILE_STYLE_PERSISTENCE_DEFINITION_NAME));
+
+	                definition.addDynFieldURL(SOURCE);
+	            }
+	            return Boolean.TRUE;
+	        }
+	    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/RemoteFileStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ArrowDecoratorStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ArrowDecoratorStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ArrowDecoratorStyle.java	(revision 42196)
@@ -0,0 +1,378 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IArrowMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.ArrowMarkerSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Class ArrowDecoratorStyle. It is used to store the information about the
+ * different options to draw an arrow in a line (and draw it too). This
+ * information is taken from the panel.
+ *
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class ArrowDecoratorStyle extends AbstractStyle implements IArrowDecoratorStyle  {
+	public static final String ARROR_DECORATOR_STYLE_PERSISTENCE_DEFINITION_NAME = "ArrowDecoratorStyle";
+
+	private static final String FIELD_FLIP_ALL = "flipAll";
+	private static final String FIELD_FLIP_FIRST = "flipFirst";
+	private static final String FIELD_ARROW_MARKER_COUNT = "arrowMarkerCount";
+	private static final String FIELD_FOLLOW_LINE_ANGLE = "followLineAngle";
+	private static final String FIELD_MARKER = "marker";
+
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private boolean flipAll = false;
+	private boolean flipFirst = false;
+	private int arrowMarkerCount = 2;
+	private boolean followLineAngle = true;
+	private IMarkerSymbol marker = getDefaultMarker();
+
+	public ArrowDecoratorStyle() {
+		marker.setSize(10);
+		((IArrowMarkerSymbol) marker).setSharpness(30);
+	}
+
+	private IMarkerSymbol getDefaultMarker() {
+		return new ArrowMarkerSymbol();
+	}
+	
+	/**
+	 * Obtains the number of arrows that the user wants to draw in the same line.
+	 * @return
+	 */
+	public int getArrowMarkerCount() {
+		return arrowMarkerCount;
+	}
+
+	/**
+	 * Defines the number of arrows that the user wants to draw in the same line.
+	 * @return
+	 */
+	public void setArrowMarkerCount(int arrowMarkerCount) {
+		this.arrowMarkerCount = arrowMarkerCount;
+	}
+
+	/**
+	 * Defines the flipAll attribute.If the value of this attribute is true all the
+	 * arrows that we had drawn in the same line will be flipped.
+	 * @return
+	 */
+	public boolean isFlipAll() {
+		return flipAll;
+	}
+
+	/**
+	 * Obtains the flipAll attribute.If the value of this attribute is true all the
+	 * arrows that we had drawn in the same line will be flipped.
+	 * @return
+	 */
+	public void setFlipAll(boolean flipAll) {
+		this.flipAll = flipAll;
+	}
+
+	/**
+	 * Obtains the flipFirst attribute.If it is true only the first arrow of the line
+	 * will be flipped.The rest will keep the same orientation.
+	 * @return
+	 */
+	public boolean isFlipFirst() {
+		return flipFirst;
+	}
+
+	/**
+	 * Sets the flipFirst attribute.If it is true only the first arrow of the line
+	 * will be flipped.The rest will keep the same orientation.
+	 * @return
+	 */
+	public void setFlipFirst(boolean flipFirst) {
+		this.flipFirst = flipFirst;
+	}
+
+	/**
+	 * Gets the followLineAngle attribute.This attribute allows the arrow that we are
+	 * going to draw to be more or less aligned with the line where it will be included (depending on the angle) .
+	 * @return
+	 */
+	public boolean isFollowLineAngle() {
+		return followLineAngle;
+	}
+
+	/**
+	 * Sets the followLineAngle attribute.This attribute allows the arrow that we are
+	 * going to draw to be more or less aligned with the line where it will be included.
+	 * (depending on the angle).
+	 * @param followingLineAngle
+	 * @return
+	 */
+	public void setFollowLineAngle(boolean followLineAngle) {
+		this.followLineAngle = followLineAngle;
+	}
+	/**
+	 * Draws an arrow(or other symbol that substitutes an arrow selected by the user)
+	 * in a line.When the line is drawn, the symbol is added and takes care of the different
+	 * options of the user(for example if he wants to flip the first symbol or all and
+	 * the number of symbols per line to be drawn)
+	 * @param g
+	 * @param affineTransform
+	 * @param feature 
+	 * @param shp
+	 * @throws CreateGeometryException 
+	 */
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature) throws CreateGeometryException {
+		if (arrowMarkerCount <= 0) return;
+
+		Geometry geomToDraw = geom.cloneGeometry();
+		geomToDraw.transform(affineTransform);
+		PathLength pl = new PathLength(geomToDraw.getShape());
+		float size = (float) marker.getSize();
+		marker.setRotation(0.0);
+		float myLineLength = pl.lengthOfPath();
+		if (size > myLineLength){
+			return;
+		}
+		float step = arrowMarkerCount>2 ? myLineLength/(arrowMarkerCount-1) : pl.lengthOfPath();
+		float rotation1 = 0; // rotation at the arrow's vertex
+		float rotation2 = 0; // rotation at the arrow's back;
+
+		Point startP = null;
+
+		// the first arrow at the end of the line
+		float theLength = pl.lengthOfPath();
+		{
+
+			if ((flipFirst || flipAll) && (flipFirst != flipAll) && followLineAngle) { // logical XOR
+				Point2D p = pl.pointAtLength(theLength-size);
+				if (p!=null){
+					startP = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
+					if(followLineAngle){
+						rotation1 = pl.angleAtLength(theLength-size);
+						rotation2 = pl.angleAtLength(theLength);
+						marker.setRotation(rotation1);
+					}
+					marker.draw(g, new AffineTransform(), startP, feature, null);
+				}
+			} else {
+				Point2D p = pl.pointAtLength(theLength);
+				if (p!=null){
+					startP = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
+					if(followLineAngle){
+						rotation1 = pl.angleAtLength(theLength-size)+(float) Math.PI;
+						rotation2 = pl.angleAtLength(theLength)+(float) Math.PI;
+						marker.setRotation(rotation2);
+					}
+					marker.draw(g, new AffineTransform(), startP, feature, null);
+				}
+			}
+		}
+		// the other arrows but the first and the last
+		float aLength;
+		for (int i = 1; i < arrowMarkerCount-1; i++) {
+			aLength = (float) (step*i);
+
+			if (flipAll && followLineAngle) {
+				Point2D p = pl.pointAtLength(aLength);
+				if (p==null){
+					p = pl.pointAtLength(theLength);
+				}
+				startP = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
+				if(followLineAngle){
+					rotation1 = (float) pl.angleAtLength(aLength);
+					rotation2 = (float) pl.angleAtLength((float)(aLength+size));
+					marker.setRotation(rotation1);
+				}
+					marker.draw(g, new AffineTransform(), startP, feature, null);
+			} else {
+				Point2D p = pl.pointAtLength(aLength+size);
+				if (p==null){
+					p = pl.pointAtLength(theLength);
+				}
+
+				startP = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
+				if(followLineAngle){
+					rotation1 = (float) (pl.angleAtLength(aLength) + Math.PI);
+					rotation2 = (float) (pl.angleAtLength((float)(aLength+size)) + Math.PI);
+					marker.setRotation(rotation2);
+				}
+				marker.draw(g, new AffineTransform(), startP, feature, null);
+			}
+		}
+
+		startP = null;
+		// and the last arrow at the begining of the line
+		if (arrowMarkerCount>1) {
+			if (flipAll) {
+				Point2D p = null;
+				p = pl.pointAtLength(0);
+				if (p!=null){
+					startP = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
+					if(followLineAngle){
+						rotation1 = (float) pl.angleAtLength(size);
+						rotation2 = (float) pl.angleAtLength(0);
+						marker.setRotation(rotation2);
+					}
+					marker.draw(g, new AffineTransform(), startP, feature, null);
+				}				
+			} else {
+				Point2D p = null;
+				if(followLineAngle){
+					p = pl.pointAtLength(size);
+				} else {
+					p = pl.pointAtLength(0);
+				}
+				if (p!=null){
+					startP = geomManager.createPoint(p.getX(), p.getY(), SUBTYPES.GEOM2D);
+					if(followLineAngle){
+						rotation1 = (float) (pl.angleAtLength(size) + Math.PI);
+						rotation2 = (float) (pl.angleAtLength(0) + Math.PI);
+						marker.setRotation(rotation1);
+					}
+					marker.draw(g, new AffineTransform(), startP, feature, null);
+				}
+			}
+		}
+	}
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public void drawOutline(Graphics2D g, Rectangle r) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public boolean isSuitableFor(ISymbol symbol) {
+		return symbol instanceof ILineSymbol;
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public IMarkerSymbol getMarker() {
+		if(marker == null){
+			marker = getDefaultMarker();
+		}
+		return marker;
+	}
+
+	public void setMarker(IMarkerSymbol marker) {
+		this.marker = marker;
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		ArrowDecoratorStyle copy  = (ArrowDecoratorStyle) super.clone();
+		if (marker != null) {
+			copy.marker = (IMarkerSymbol) marker.clone();
+		}
+		return copy;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent style properties
+		super.loadFromState(state);
+
+		// Set own properties
+		setArrowMarkerCount(state.getInt(FIELD_ARROW_MARKER_COUNT));
+		setFlipAll(state.getBoolean(FIELD_FLIP_ALL));
+		setFlipFirst(state.getBoolean(FIELD_FLIP_FIRST));
+		setFollowLineAngle(state.getBoolean(FIELD_FOLLOW_LINE_ANGLE));
+		setMarker((IMarkerSymbol) state.get(FIELD_MARKER));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Save own properties
+		state.set(FIELD_ARROW_MARKER_COUNT, getArrowMarkerCount());
+		state.set(FIELD_FLIP_ALL, isFlipAll());
+		state.set(FIELD_FLIP_FIRST, isFlipFirst());
+		state.set(FIELD_FOLLOW_LINE_ANGLE, isFollowLineAngle());
+		state.set(FIELD_MARKER, getMarker());
+	}
+	
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(ARROR_DECORATOR_STYLE_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						ArrowDecoratorStyle.class,
+						ARROR_DECORATOR_STYLE_PERSISTENCE_DEFINITION_NAME,
+						ARROR_DECORATOR_STYLE_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				
+				// Extend the Style base definition
+				definition.extend(manager.getDefinition(STYLE_PERSISTENCE_DEFINITION_NAME));
+
+				// Arrow marker count
+				definition.addDynFieldInt(FIELD_ARROW_MARKER_COUNT).setMandatory(true);
+				// Flip all
+				definition.addDynFieldBoolean(FIELD_FLIP_ALL).setMandatory(true);
+				// flip first
+				definition.addDynFieldBoolean(FIELD_FLIP_FIRST).setMandatory(true);
+				// Follow line angles
+				definition.addDynFieldBoolean(FIELD_FOLLOW_LINE_ANGLE).setMandatory(true);
+				// Marker
+				definition.addDynFieldObject(FIELD_MARKER)
+					.setClassOfValue(IMarkerSymbol.class)
+					.setMandatory(true);
+
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ArrowDecoratorStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/BackgroundFileStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/BackgroundFileStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/BackgroundFileStyle.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IBackgroundFileStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Defines methods that allows the user to create an style based in a
+ * background file.For this reason, BackgroundFileStyle will
+ * have a parameter that will be an string in order to specify this source file.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public abstract class BackgroundFileStyle extends AbstractStyle
+implements IBackgroundFileStyle {
+
+    public static final String BACKGROUND_FILE_STYLE_PERSISTENCE_DEFINITION_NAME = "BackgroundFileStyle";
+    protected static final String SOURCE_SYMBOL_IN_LIBRARY = "sourceSymbolInLibrary";
+
+    public static BackgroundFileStyle createStyleByURL(URL url) throws IOException {
+        BackgroundFileStyle bgImage;
+        String l = url.toString().toLowerCase();
+        if (l.startsWith("http://") ||
+            l.startsWith("https://"))  {
+            bgImage = new RemoteFileStyle();
+        } else if (l.toLowerCase().endsWith(".svg")) {
+            bgImage = new SVGStyle();
+        } else {
+            bgImage = new ImageStyle();
+        }
+        bgImage.setSource(url);
+        return bgImage;
+    }
+    protected URL source;
+    /**
+     * Sets the file that is used as a source to create the Background
+     * @param f, File
+     * @throws IOException
+     */
+    public abstract void setSource(URL url) throws IOException;
+    /**
+     * Gets the bounding <code>Rectangle</code> of this <code>Rectangle</code>.
+     * <p>
+     * This method is included for completeness, to parallel the
+     * <code>getBounds</code> method of
+     * {@link Component}.
+     * @return    a new <code>Rectangle</code>, equal to the
+     * bounding <code>Rectangle</code> for this <code>Rectangle</code>.
+     * @see       java.awt.Component#getBounds
+     * @see       #setBounds(Rectangle)
+     * @see       #setBounds(int, int, int, int)
+     * @since     JDK1.1
+     */
+    public abstract Rectangle getBounds();
+
+    /**
+     * Obtains the source of the file which is used to create the background
+     * @return
+     */
+    public final URL getSource() {
+        return source;
+    }
+
+    public final void drawInsideRectangle(Graphics2D g, Rectangle r) throws SymbolDrawingException {
+        drawInsideRectangle(g, r, true);
+    }
+
+    public abstract void drawInsideRectangle(Graphics2D g, Rectangle r, boolean keepAspectRatio) throws SymbolDrawingException ;
+
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+
+    protected boolean isLibrarySymbol() {
+    	return source.toString().startsWith(getSymbolLibraryURL().toString());
+    }
+    
+    protected URL getSymbolLibraryURL(){
+    	String symbolLibraryPath = MapContextLocator.getSymbolManager().getSymbolPreferences().getSymbolLibraryPath();
+    	URL symbolLibraryURL = null;
+    	try {
+			symbolLibraryURL = new File(symbolLibraryPath).toURI().toURL();
+		} catch (MalformedURLException e) {
+			new RuntimeException(e);
+		}
+    	return symbolLibraryURL;
+    }
+    
+    /**
+     * Return the final substring of the URL symbol in the library
+     * 
+     * @return
+     */
+    protected String getSourceSymbolInLibrary(){
+    	return source.toString().substring(getSymbolLibraryURL().toString().length());
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if( manager.getDefinition(BACKGROUND_FILE_STYLE_PERSISTENCE_DEFINITION_NAME)==null ) {
+                DynStruct definition = manager.addDefinition(
+                    BackgroundFileStyle.class,
+                    BACKGROUND_FILE_STYLE_PERSISTENCE_DEFINITION_NAME,
+                    BACKGROUND_FILE_STYLE_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+                    null, 
+                    null
+                );
+
+                // Extend the Style base definition
+                definition.extend(manager.getDefinition(STYLE_PERSISTENCE_DEFINITION_NAME));
+            }
+            return Boolean.TRUE;
+        }
+
+    }
+
+    public class PersistenceCantSetSourceException extends PersistenceException{
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = -3783412193739147977L;
+        /**
+         * 
+         */
+        private final static String MESSAGE_FORMAT = "Can't set source file.";
+        private final static String MESSAGE_KEY = "_PersistenceCantSetSourceException";
+
+        public PersistenceCantSetSourceException() {
+            super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+        }
+        
+        public PersistenceCantSetSourceException(Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        }
+
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/BackgroundFileStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/DefaultMask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/DefaultMask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/DefaultMask.java	(revision 42196)
@@ -0,0 +1,174 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.BasicStroke;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class DefaultMask extends AbstractStyle implements IMask {
+	private static final Logger LOG = LoggerFactory.getLogger(DefaultMask.class);
+
+	public static final String DEFAULT_MASK_PERSISTENCE_DEFINITION_NAME = "DefaultMask";
+
+	private static final String FIELD_SIZE = "size";
+	private static final String FIELD_FILL_SYMBOL = "fillSymbol";
+
+	private static final GeometryManager geomManager = GeometryLocator
+			.getGeometryManager();
+	private double size;
+	private IFillSymbol fill;
+
+	public double getSize() {
+		return size;
+	}
+
+	public void setSize(double size) {
+		this.size = size;
+	}
+
+	public IFillSymbol getFillSymbol() {
+		return fill;
+
+	}
+
+	public void setFillSymbol(IFillSymbol fill) {
+		this.fill = fill;
+	}
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r) {
+		// TODO Implement it
+		LOG.error("TODO: Not yet implemented");
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public Geometry getHaloShape(Shape shp) {
+		BasicStroke stroke = new BasicStroke(
+				(int) /* falta CartographicSupport */getSize());
+		Shape myShp = stroke.createStrokedShape(shp);
+		Geometry haloShape = null;
+		;
+		try {
+			haloShape = geomManager.createSurface(new GeneralPathX(myShp
+					.getBounds2D().getPathIterator(null)), SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			LOG.error("Error creating a surface", e);
+		}
+
+		return haloShape;
+	}
+
+	public boolean isSuitableFor(ISymbol symbol) {
+		// TODO Implement it
+		LOG.error("TODO: Not yet implemented");
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public void drawOutline(Graphics2D g, Rectangle r) {
+		// TODO Implement it
+		LOG.error("TODO: Not yet implemented");
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		DefaultMask copy = (DefaultMask) super.clone();
+		if (fill != null) {
+			copy.fill = (IFillSymbol) fill.clone();
+		}
+		return copy;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent style properties
+		super.loadFromState(state);
+
+		// Set own properties
+		setFillSymbol((IFillSymbol) state.get(FIELD_FILL_SYMBOL));
+		setSize(state.getDouble(FIELD_SIZE));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Save own properties
+		if (getFillSymbol() != null) {
+			state.set(FIELD_FILL_SYMBOL, getFillSymbol());
+		}
+		state.set(FIELD_SIZE, getSize());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(DEFAULT_MASK_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						DefaultMask.class,
+						DEFAULT_MASK_PERSISTENCE_DEFINITION_NAME,
+						DEFAULT_MASK_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				
+				// Extend the Style base definition
+				definition.extend(manager.getDefinition(STYLE_PERSISTENCE_DEFINITION_NAME));
+
+				// Fill symbol
+				definition.addDynFieldObject(FIELD_FILL_SYMBOL)
+					.setClassOfValue(IFillSymbol.class);
+				// size
+				definition.addDynFieldDouble(FIELD_SIZE).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/DefaultMask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SVGStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SVGStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SVGStyle.java	(revision 42196)
@@ -0,0 +1,263 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.batik.bridge.DocumentLoader;
+import org.apache.batik.bridge.GVTBuilder;
+import org.apache.batik.bridge.UserAgentAdapter;
+import org.apache.batik.bridge.ViewBox;
+import org.apache.batik.dom.svg.SVGOMDocument;
+import org.apache.batik.gvt.GraphicsNode;
+import org.apache.batik.gvt.renderer.StaticRenderer;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Style for a SVG files.This is a XML specification and file format for
+ * describing two-dimensional vector graphics, both static and animated.
+ * SVG can be purely declarative or may include scripting. Images can contain
+ * hyperlinks using outbound simple XLinks.It is an open standard created
+ * by the World Wide Web Consortium..
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * 
+ */
+public class SVGStyle extends BackgroundFileStyle {
+
+    public static final String SVG_STYLE_PERSISTENCE_DEFINITION_NAME =
+        "SVGStyle";
+    private static final String SOURCE = "source";
+    private GVTBuilder gvtBuilder = new GVTBuilder();
+    private UserAgentAdapter userAgent;
+    private DocumentLoader loader;
+    private StaticRenderer renderer = new StaticRenderer();
+    private GraphicsNode gvtRoot;
+    private BridgeContext ctx;
+    private Element elt;
+
+    protected static RenderingHints defaultRenderingHints;
+    static {
+        defaultRenderingHints = new RenderingHints(null);
+        defaultRenderingHints.put(RenderingHints.KEY_ANTIALIASING,
+            RenderingHints.VALUE_ANTIALIAS_ON);
+
+        defaultRenderingHints.put(RenderingHints.KEY_INTERPOLATION,
+            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+    }
+
+    /**
+     * Constructor method
+     * 
+     */
+    public SVGStyle() {
+        userAgent = new UserAgentAdapter();
+        loader = new DocumentLoader(userAgent);
+        ctx = new BridgeContext(userAgent, loader);
+        renderer.setDoubleBuffered(true);
+    }
+
+    public void drawInsideRectangle(Graphics2D g,
+        Rectangle rect,
+        boolean keepAspectRatio) throws SymbolDrawingException {
+        if (keepAspectRatio) {
+            AffineTransform ataux;
+            if (elt.hasAttribute("viewBox")) {
+
+                try {
+                    ataux =
+                        ViewBox.getViewTransform(null,
+                            elt,
+                            (float) rect.getWidth(),
+                            (float) rect.getHeight(),
+                            ctx);
+                } catch (NullPointerException e) {
+                    throw new SymbolDrawingException(SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+                }
+            } else {
+                Rectangle2D bounds = gvtRoot.getBounds();
+                
+                ataux = getNoRotationTransform(
+                    bounds,
+                    new Rectangle2D.Double(
+                        rect.x,
+                        rect.y,
+                        rect.width,
+                        rect.height),
+                    true);
+            }
+            RenderingHints renderingHints = new RenderingHints(null);
+            renderingHints.putAll(defaultRenderingHints);
+            g.setRenderingHints(renderingHints);
+            gvtRoot.setTransform(ataux);
+            gvtRoot.paint(g);
+
+        } else {
+
+            Rectangle2D bounds = gvtRoot.getBounds();
+            AffineTransform ataux = getNoRotationTransform(
+                bounds,
+                new Rectangle2D.Double(rect.x, rect.y, rect.width, rect.height),
+                false);
+            
+            RenderingHints renderingHints = new RenderingHints(null);
+            renderingHints.putAll(defaultRenderingHints);
+            g.setRenderingHints(renderingHints);
+            gvtRoot.setTransform(ataux);
+            gvtRoot.paint(g);
+        }
+    }
+
+    public boolean isSuitableFor(ISymbol symbol) {
+        return true;
+    }
+
+    public void setSource(URL url) throws IOException {
+
+    	source = url;
+    	Document svgDoc;
+    	try {
+    		svgDoc = loader.loadDocument(url.toURI().toString());
+    	} catch (URISyntaxException e) {
+            IOException ioex = new IOException();
+            ioex.initCause(e);
+            throw ioex;
+    	}
+    	gvtRoot = gvtBuilder.build(ctx, svgDoc);
+    	renderer.setTree(gvtRoot);
+    	elt = ((SVGOMDocument) svgDoc).getRootElement();
+    }
+
+    public Rectangle getBounds() {
+        try {
+            Rectangle2D r = gvtRoot.getBounds();
+            return new Rectangle((int) r.getX(),
+                (int) r.getY(),
+                (int) r.getWidth(),
+                (int) r.getHeight());
+        } catch (Exception e) {
+            return new Rectangle();
+        }
+    }
+
+    public void drawOutline(Graphics2D g, Rectangle r) throws SymbolDrawingException {
+        drawInsideRectangle(g, r);
+    }
+
+    
+    public void loadFromState(PersistentState state) throws PersistenceException {
+    	try {
+    		String sourceSymbolInLibrary = state.getString(SOURCE_SYMBOL_IN_LIBRARY);
+    		if (sourceSymbolInLibrary != null){
+    			setSource(new URL(getSymbolLibraryURL().toString()+sourceSymbolInLibrary));
+    		} else {
+    			setSource(state.getURL(SOURCE));
+    		}
+    	} catch (Exception e) {
+    		throw new PersistenceCantSetSourceException(e);
+    	}
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+    	if (isLibrarySymbol()){
+    		state.set(SOURCE_SYMBOL_IN_LIBRARY, getSourceSymbolInLibrary());
+    	} else {
+    		state.setNull(SOURCE_SYMBOL_IN_LIBRARY);
+    	}
+        state.set(SOURCE, source);
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if (manager.getDefinition(SVG_STYLE_PERSISTENCE_DEFINITION_NAME) == null) {
+                DynStruct definition =
+                    manager.addDefinition(SVGStyle.class,
+                        SVG_STYLE_PERSISTENCE_DEFINITION_NAME,
+                        SVG_STYLE_PERSISTENCE_DEFINITION_NAME
+                            + " Persistence definition",
+                        null,
+                        null);
+
+                // Extend the Style base definition
+                definition.extend(manager.getDefinition(BACKGROUND_FILE_STYLE_PERSISTENCE_DEFINITION_NAME));
+
+                definition.addDynFieldURL(SOURCE).setMandatory(true);
+                definition.addDynFieldString(SOURCE_SYMBOL_IN_LIBRARY).setMandatory(false);
+            }
+            return Boolean.TRUE;
+        }
+
+    }
+    
+    
+    private AffineTransform getNoRotationTransform(
+        Rectangle2D from_rect,
+        Rectangle2D to_rect,
+        boolean keep_aspect) {
+        
+        double scalex = to_rect.getWidth() / from_rect.getWidth();
+        double scaley = to_rect.getHeight() / from_rect.getHeight();
+        
+        if (keep_aspect) {
+            // force min value for both
+            scalex = Math.min(scalex,  scaley);
+            scaley = scalex;
+        }
+        
+        double from_new_center_x = scalex * from_rect.getCenterX(); 
+        double from_new_center_y = scaley * from_rect.getCenterY(); 
+        
+        double offx = to_rect.getCenterX() - from_new_center_x;
+        double offy = to_rect.getCenterY() - from_new_center_y;
+        
+        AffineTransform resp =
+            AffineTransform.getTranslateInstance(offx, offy);
+        
+        // this composition is equivalent to:
+        // first scale, then move
+        resp.concatenate(
+            AffineTransform.getScaleInstance(scalex, scaley));
+        return resp;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SVGStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleMarkerFillPropertiesStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleMarkerFillPropertiesStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleMarkerFillPropertiesStyle.java	(revision 42196)
@@ -0,0 +1,263 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.TexturePaint;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.MarkerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+public class SimpleMarkerFillPropertiesStyle extends AbstractStyle implements IMarkerFillPropertiesStyle {
+	public static final String SIMPLE_MARKER_FILL_STYLE_PERSISTENCE_DEFINITION_NAME = "SimpleMarkerFillPropertiesStyle";
+
+	private static final String FIELD_SAMPLE_SYMBOL = "sampleSymbol";
+	private static final String FIELD_ROTATION = "rotation";
+	private static final String FIELD_XOFFSET = "xOffset";
+	private static final String FIELD_YOFFSET = "yOffset";
+	private static final String FIELD_XSEPARATION = "xSeparation";
+	private static final String FIELD_YSEPARATION = "ySeparation";
+	private static final String FIELD_FILL_STYLE = "fillStyle";
+	
+	private IMarkerSymbol sampleSymbol = SymbologyLocator.getSymbologyManager().createSimpleMarkerSymbol();
+	private double rotation = 0;
+	private double xOffset = 0;
+	private double yOffset = 0;
+	private double xSeparation = 20;
+	private double ySeparation = 20;
+	private int fillStyle = MarkerFillSymbol.DefaultFillStyle;
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r) {
+		int s = (int) sampleSymbol.getSize();
+		Rectangle rProv = new Rectangle();
+		rProv.setFrame(0, 0, s, s);
+		Paint resulPatternFill = null;
+		BufferedImage bi = null;
+		bi= new BufferedImage(s, s, BufferedImage.TYPE_INT_ARGB);
+		Graphics2D gAux = bi.createGraphics();
+		try {
+			sampleSymbol.drawInsideRectangle(gAux, gAux.getTransform(), rProv, null);
+		} catch (SymbolDrawingException e) {
+			if (e.getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS) {
+				try {
+					IWarningSymbol warning =
+							(IWarningSymbol) MapContextLocator.getSymbolManager()
+									.getWarningSymbol(
+											SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+											"",
+											SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+					warning.drawInsideRectangle(gAux, gAux.getTransform(), rProv, null);
+				} catch (SymbolDrawingException e1) {
+					// IMPOSSIBLE TO REACH THIS
+				}
+			}
+
+		}
+		resulPatternFill = new TexturePaint(bi,rProv);
+		g.setColor(null);
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+			RenderingHints.VALUE_ANTIALIAS_ON);
+		g.setPaint(resulPatternFill);
+		g.fill(r);
+
+	}
+
+	public boolean isSuitableFor(ISymbol symbol) {
+		return (symbol instanceof IFillSymbol);
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void drawOutline(Graphics2D g, Rectangle r) {
+		drawInsideRectangle(g, r);
+	}
+
+	/**
+	 * <p>
+	 * Define an utility symbol to show up a thumbnail
+	 * by default, this symbol is a SimpleMarkerSymbol.
+	 * Thus, the drawInsideRectangle will always work. But
+	 * it can be changed with setSampleSymbol(IMakerSymbol).<br>
+	 * </p>
+	 * <p>
+	 * If <b>marker</b> is null, it does nothing
+	 * </p>
+	 */
+	public void setSampleSymbol(IMarkerSymbol marker) {
+		if (marker != null)
+			this.sampleSymbol = marker;
+	}
+
+
+	public double getRotation() {
+		return rotation;
+	}
+
+	public void setRotation(double rotation) {
+		this.rotation = rotation;
+	}
+
+	public double getXOffset() {
+		return xOffset;
+	}
+
+	public void setXOffset(double offset) {
+		xOffset = offset;
+	}
+
+	public double getXSeparation() {
+		return xSeparation;
+	}
+
+	public void setXSeparation(double separation) {
+		xSeparation = separation;
+	}
+
+	public double getYOffset() {
+		return yOffset;
+	}
+
+	public void setYOffset(double offset) {
+		yOffset = offset;
+	}
+
+	public double getYSeparation() {
+		return ySeparation;
+	}
+
+	public void setYSeparation(double separation) {
+		ySeparation = separation;
+	}
+
+	public void setFillStyle(int fillStyle) {
+		this.fillStyle = fillStyle;
+	}
+
+	public int getFillStyle() {
+		return fillStyle;
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		SimpleMarkerFillPropertiesStyle copy = (SimpleMarkerFillPropertiesStyle) super.clone();
+		if (sampleSymbol != null) {
+			copy.sampleSymbol = (IMarkerSymbol) sampleSymbol.clone();
+		}
+		return copy;
+	}
+
+	public void loadFromState(PersistentState state)
+	throws PersistenceException {
+		// Set parent style properties
+		super.loadFromState(state);
+
+		// Set own properties
+		setRotation(state.getDouble(FIELD_ROTATION));
+		setXOffset(state.getDouble(FIELD_XOFFSET));
+		setYOffset(state.getDouble(FIELD_YOFFSET));
+		setXSeparation(state.getDouble(FIELD_XSEPARATION));
+		setYSeparation(state.getDouble(FIELD_YSEPARATION));
+		setFillStyle(state.getInt(FIELD_FILL_STYLE));
+		
+//		please, avoid initialize "sampleSymbol" field. It
+//		is already controlled by this style's owner.
+
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Save own properties
+		state.set(FIELD_ROTATION, getRotation());
+		state.set(FIELD_XOFFSET, getXOffset());
+		state.set(FIELD_YOFFSET, getYOffset());
+		state.set(FIELD_XSEPARATION, getXSeparation());
+		state.set(FIELD_YSEPARATION, getYSeparation());
+		state.set(FIELD_FILL_STYLE, getFillStyle());
+
+		/* please, avoid persist "sampleSymbol" field.
+		 it is always initialized by this style's owner
+		 when needs it. */
+//		state.set(FIELD_SAMPLE_SYMBOL, this.sampleSymbol);
+		
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SIMPLE_MARKER_FILL_STYLE_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						SimpleMarkerFillPropertiesStyle.class,
+						SIMPLE_MARKER_FILL_STYLE_PERSISTENCE_DEFINITION_NAME,
+						SIMPLE_MARKER_FILL_STYLE_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the Style base definition
+				definition.extend(manager.getDefinition(STYLE_PERSISTENCE_DEFINITION_NAME));
+
+				// Sample Symbol
+				definition.addDynFieldObject(FIELD_SAMPLE_SYMBOL)
+				.setClassOfValue(IMarkerSymbol.class);
+
+				// Rotation
+				definition.addDynFieldDouble(FIELD_ROTATION).setMandatory(true);
+
+				// offset
+				definition.addDynFieldDouble(FIELD_XOFFSET).setMandatory(true);
+				definition.addDynFieldDouble(FIELD_YOFFSET).setMandatory(true);
+
+				// Separation
+				definition.addDynFieldDouble(FIELD_XSEPARATION).setMandatory(true);
+				definition.addDynFieldDouble(FIELD_YSEPARATION).setMandatory(true);
+
+				// Fill Style
+				definition.addDynFieldInt(FIELD_FILL_STYLE).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleMarkerFillPropertiesStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleLineStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleLineStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleLineStyle.java	(revision 42196)
@@ -0,0 +1,418 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Stroke;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * @see http://www.oreilly.com/catalog/java2d/chapter/ch04.html
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class SimpleLineStyle extends AbstractStyle implements CartographicSupport, ISimpleLineStyle {
+	public static final String SIMPLE_LINE_STYLE_PERSISTENCE_DEFINITION_NAME = "SimpleLineStyle";
+
+	private static final String FIELD_DASH_ARRAY = "dashArray";
+	private static final String FIELD_TEMP_DASH_ARRAY = "tempDashArray";
+	private static final String FIELD_LINE_WIDTH = "lineWidth";
+	private static final String FIELD_DASH_PHASE = "dashPhase";
+	private static final String FIELD_END_CAP = "endCap";
+	private static final String FIELD_LINE_JOIN = "lineJoin";
+	private static final String FIELD_MITER_LIMIT = "miterLimit";
+	private static final String FIELD_OFFSET = "offset";
+	private static final String FIELD_UNIT = "unit";
+	private static final String FIELD_ARROW_DECORATOR = "arrowDecorator";
+
+	private final static Color PREVIEW_COLOR_1= new Color(150, 255, 200); //light blue
+	private final static Color PREVIEW_COLOR_2 = new Color(255, 200, 100); //orange
+	private final static int COLOR1_STROKE = 1;
+	private final static int COLOR2_STROKE = 3;
+	private float[] dashArray, tempDashArray;
+	private float dashPhase;
+	private int endCap = BasicStroke.CAP_BUTT;
+	private int lineJoin;
+	private float miterlimit;
+	private float lineWidth = 1f;
+	private int measureUnit;// for the offset distance
+	private double offset = 0, csOffset = 0;
+	private int referenceSystem;
+	private IArrowDecoratorStyle arrowDecorator;
+	/**
+	 * Constructor method
+	 *
+	 */
+	public SimpleLineStyle() {
+		super();
+		BasicStroke dummy = new BasicStroke();
+		dashArray = dummy.getDashArray();
+		tempDashArray = dummy.getDashArray();
+		dashPhase = dummy.getDashPhase();
+		endCap = BasicStroke.CAP_BUTT;
+		lineJoin = BasicStroke.JOIN_BEVEL;
+		miterlimit = dummy.getMiterLimit();
+	}
+	/**
+	 * Constructor method
+	 *
+	 * @param width
+	 * @param cap
+	 * @param join
+	 * @param miterlimit
+	 * @param dash
+	 * @param dash_phase
+	 */
+	public SimpleLineStyle(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase) {
+		super();
+		this.lineWidth = width;
+		this.endCap = cap;
+		this.lineJoin = join;
+		this.miterlimit = miterlimit;
+		this.dashArray = dash;
+		this.tempDashArray = dash;
+		this.dashPhase = dash_phase;
+	}
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r) {
+		Stroke oldStroke = g.getStroke();
+		int h = (int) (r.getHeight() / 2);
+		int margins = 2;
+
+		BasicStroke stroke;
+		stroke = new BasicStroke(COLOR1_STROKE, endCap, lineJoin, miterlimit, tempDashArray, dashPhase);
+		g.setStroke(stroke);
+		g.setColor(PREVIEW_COLOR_1);
+		g.drawLine(margins, h, r.width-margins-margins, h);
+
+		stroke = new BasicStroke(COLOR2_STROKE, endCap, lineJoin, miterlimit, tempDashArray, dashPhase);
+		g.setStroke(stroke);
+		g.setColor(PREVIEW_COLOR_2);
+		g.drawLine(margins, h, r.width-margins-margins, h);
+		g.setStroke(oldStroke);
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public Stroke getStroke() {
+		return new BasicStroke((float) lineWidth, endCap, lineJoin, miterlimit, tempDashArray, dashPhase);
+	}
+
+	public float getLineWidth() {
+		return lineWidth;
+	}
+
+
+	public void setLineWidth(float width) {
+		if (lineWidth != 0) {
+			double scale = width / this.lineWidth;
+			if (dashArray != null) {
+				for (int i = 0; scale > 0 && i < dashArray.length; i++) {
+					tempDashArray[i] = (float) (dashArray[i] * scale);
+				}
+			}
+			this.csOffset = offset * scale;
+		}
+		this.lineWidth = width;
+
+	}
+
+	public boolean isSuitableFor(ISymbol symbol) {
+		return symbol instanceof ILineSymbol;
+	}
+
+	public void setStroke(Stroke stroke) {
+		if (stroke != null) {
+			BasicStroke dummy = (BasicStroke) stroke;
+			dashArray = dummy.getDashArray();
+			if (dashArray != null) {
+				tempDashArray = new float[dashArray.length];
+				for (int i = 0; i < dashArray.length; i++) {
+					tempDashArray[i] = dashArray[i];
+				}
+			} else
+				tempDashArray = null;
+
+
+			dashPhase = dummy.getDashPhase();
+			endCap = dummy.getEndCap();
+			lineJoin = dummy.getLineJoin();
+			miterlimit = dummy.getMiterLimit();
+			lineWidth = dummy.getLineWidth();
+			offset = getOffset();
+			csOffset = offset;
+		}
+	}
+
+	public void drawOutline(Graphics2D g, Rectangle r) {
+		drawInsideRectangle(g, r);
+	}
+
+	public double getOffset() {
+		return csOffset;
+	}
+
+	public void setOffset(double offset) {
+		this.offset = offset;
+		this.csOffset = offset;
+	}
+
+	public IArrowDecoratorStyle getArrowDecorator() {
+		return arrowDecorator;
+
+	}
+
+	public void setArrowDecorator(IArrowDecoratorStyle arrowDecoratorStyle) {
+		this.arrowDecorator = arrowDecoratorStyle;
+	}
+
+	public void setUnit(int unitIndex) {
+		this.measureUnit = unitIndex;
+	}
+
+	public int getUnit() {
+		return measureUnit;
+	}
+
+	public int getReferenceSystem() {
+		return referenceSystem;
+	}
+
+	public void setReferenceSystem(int referenceSystem) {
+		this.referenceSystem = referenceSystem;
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		double oldWidth = getLineWidth();
+		setCartographicSize(getCartographicSize(viewPort, dpi, geom), geom);
+		return oldWidth;
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		setLineWidth((float) cartographicSize);
+
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		return CartographicSupportToolkit.
+		getCartographicLength(this,
+				getOffset(),
+				viewPort,
+				dpi);
+
+	}
+	
+
+	public Object clone() throws CloneNotSupportedException {
+		SimpleLineStyle copy = (SimpleLineStyle) super.clone();
+		if (arrowDecorator != null) {
+			copy.arrowDecorator = (ArrowDecoratorStyle) arrowDecorator.clone();
+		}
+
+		if (dashArray != null) {
+			copy.dashArray = new float[dashArray.length];
+			System.arraycopy(dashArray, 0, copy.dashArray, 0, dashArray.length);
+		}
+		if (tempDashArray != null) {
+			copy.tempDashArray = new float[tempDashArray.length];
+			System.arraycopy(tempDashArray, 0, copy.tempDashArray, 0,
+					tempDashArray.length);
+		}
+
+		return copy;
+	}
+
+	/**
+	 * @return the dashArray
+	 */
+	private float[] getDashArray() {
+		return dashArray;
+	}
+
+	/**
+	 * @param dashArray
+	 *            the dashArray to set
+	 */
+	private void setDashArray(float[] dashArray) {
+		this.dashArray = dashArray;
+	}
+
+	/**
+	 * @return the dashPhase
+	 */
+	private float getDashPhase() {
+		return dashPhase;
+	}
+
+	/**
+	 * @param dashPhase
+	 *            the dashPhase to set
+	 */
+	private void setDashPhase(float dashPhase) {
+		this.dashPhase = dashPhase;
+	}
+
+	/**
+	 * @return the endCap
+	 */
+	private int getEndCap() {
+		return endCap;
+	}
+
+	/**
+	 * @param endCap
+	 *            the endCap to set
+	 */
+	private void setEndCap(int endCap) {
+		this.endCap = endCap;
+	}
+
+	/**
+	 * @return the lineJoin
+	 */
+	private int getLineJoin() {
+		return lineJoin;
+	}
+
+	/**
+	 * @param lineJoin
+	 *            the lineJoin to set
+	 */
+	private void setLineJoin(int lineJoin) {
+		this.lineJoin = lineJoin;
+	}
+
+	/**
+	 * @return the miterlimit
+	 */
+	private float getMiterlimit() {
+		return miterlimit;
+	}
+
+	/**
+	 * @param miterlimit
+	 *            the miterlimit to set
+	 */
+	private void setMiterlimit(float miterlimit) {
+		this.miterlimit = miterlimit;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent style properties
+		super.loadFromState(state);
+
+		// Set own properties
+		setArrowDecorator((ArrowDecoratorStyle) state
+				.get(FIELD_ARROW_DECORATOR));
+		setDashArray(state.getFloatArray(FIELD_DASH_ARRAY));
+		tempDashArray = state.getFloatArray(FIELD_TEMP_DASH_ARRAY);
+		setDashPhase(state.getFloat(FIELD_DASH_PHASE));
+		setEndCap(state.getInt(FIELD_END_CAP));
+		setLineJoin(state.getInt(FIELD_LINE_JOIN));
+		setLineWidth(state.getFloat(FIELD_LINE_WIDTH));
+		setMiterlimit(state.getFloat(FIELD_MITER_LIMIT));
+		setOffset(state.getDouble(FIELD_OFFSET));
+		setUnit(state.getInt(FIELD_UNIT));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Save own properties
+		state.set(FIELD_ARROW_DECORATOR, getArrowDecorator());
+		state.set(FIELD_DASH_ARRAY, getDashArray());
+		state.set(FIELD_TEMP_DASH_ARRAY, tempDashArray);
+		state.set(FIELD_DASH_PHASE, getDashPhase());
+		state.set(FIELD_END_CAP, getEndCap());
+		state.set(FIELD_LINE_JOIN, getLineJoin());
+		state.set(FIELD_LINE_WIDTH, getLineWidth());
+		state.set(FIELD_MITER_LIMIT, getMiterlimit());
+		state.set(FIELD_OFFSET, getOffset());
+		state.set(FIELD_UNIT, getUnit());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SIMPLE_LINE_STYLE_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						SimpleLineStyle.class,
+						SIMPLE_LINE_STYLE_PERSISTENCE_DEFINITION_NAME,
+						SIMPLE_LINE_STYLE_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the Style base definition
+				definition.extend(manager.getDefinition(STYLE_PERSISTENCE_DEFINITION_NAME));
+
+				// Arrow decorator
+				definition.addDynFieldObject(FIELD_ARROW_DECORATOR)
+					.setClassOfValue(ArrowDecoratorStyle.class);
+				// Dash array
+				definition.addDynFieldArray(FIELD_DASH_ARRAY)
+					.setClassOfItems(float.class);
+				// Temporal dash array
+				definition.addDynFieldArray(FIELD_TEMP_DASH_ARRAY)
+					.setClassOfItems(float.class);
+				// Dash phase
+				definition.addDynFieldFloat(FIELD_DASH_PHASE).setMandatory(true);
+				// End cap
+				definition.addDynFieldInt(FIELD_END_CAP).setMandatory(true);
+				// Line join
+				definition.addDynFieldInt(FIELD_LINE_JOIN).setMandatory(true);
+				// Line width
+				definition.addDynFieldFloat(FIELD_LINE_WIDTH).setMandatory(true);
+				// Miter limit
+				definition.addDynFieldFloat(FIELD_MITER_LIMIT).setMandatory(true);
+				// Offset
+				definition.addDynFieldDouble(FIELD_OFFSET).setMandatory(true);
+				// Unit
+				definition.addDynFieldInt(FIELD_UNIT).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/SimpleLineStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ImageStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ImageStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ImageStyle.java	(revision 42196)
@@ -0,0 +1,163 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.imageio.ImageIO;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Controls the style of an image to be correctly painted. This class controls
+ * aspects like the source path of the image, creates a rectangle to paint inside 
+ * the image, draws the outline of the image and so on.
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class ImageStyle extends BackgroundFileStyle {
+    public static final String IMAGE_STYLE_PERSISTENCE_DEFINITION_NAME = "ImageStyle";
+    private static final String SOURCE = "source";
+
+	private BufferedImage img;
+	/**
+	 * Creates a rectangle with the dimensions of the buffered image
+	 * @return Rectangle
+	 */
+	public Rectangle getBounds() {
+		if (img == null) return new Rectangle();
+		return new Rectangle(new Dimension(img.getWidth(), img.getHeight()));
+	}
+	/**
+	 * Defines the source (file) from where the buffered image will be taken.
+	 * @param f,File
+	 */
+	public void setSource(URL url) throws IOException {
+    	source = url;
+		img = ImageIO.read(url);
+	}
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r, boolean keepAspectRatio) {
+		if (img != null) {
+
+			double xOffset = 0;
+			double yOffset = 0;
+			double xScale = 1;
+			double yScale = 1;
+			if (keepAspectRatio) {
+				double scale;
+				if (img.getWidth()>img.getHeight()) {
+					scale = r.getWidth()/img.getWidth();
+					yOffset = 0.5*(r.getHeight() - img.getHeight()*scale);
+				} else {
+					scale = r.getHeight()/img.getHeight();
+					xOffset = 0.5*(r.getWidth() - img.getWidth()*scale);
+				}
+				xScale = yScale = scale;
+
+			} else {
+				xScale = r.getWidth()/img.getWidth();
+				yScale = r.getHeight()/img.getHeight();
+				yOffset = img.getHeight()*0.5*yScale ;
+
+			}
+
+
+			AffineTransform at = AffineTransform.getTranslateInstance(xOffset, yOffset);
+			at.concatenate(AffineTransform.getScaleInstance(xScale, yScale));
+			g.drawRenderedImage(img, at);
+		}
+	}
+
+	public boolean isSuitableFor(ISymbol symbol) {
+		// TODO Implement it
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public void drawOutline(Graphics2D g, Rectangle r) throws SymbolDrawingException {
+		drawInsideRectangle(g, r);
+	}
+
+	public void loadFromState(PersistentState state)
+	throws PersistenceException {
+	    try {
+        	String sourceSymbolInLibrary = state.getString(SOURCE_SYMBOL_IN_LIBRARY);
+        	if (sourceSymbolInLibrary != null){
+        		setSource(new URL(getSymbolLibraryURL().toString()+sourceSymbolInLibrary));
+        	} else {
+        		setSource(state.getURL(SOURCE));
+        	}
+        } catch (Exception e) {
+            throw new PersistenceCantSetSourceException(e);
+        }
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+    	if (isLibrarySymbol()){
+    		state.set(SOURCE_SYMBOL_IN_LIBRARY, getSourceSymbolInLibrary());
+    	} else {
+    		state.setNull(SOURCE_SYMBOL_IN_LIBRARY);
+    	}
+        state.set(SOURCE, source);
+	}
+	
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if( manager.getDefinition(IMAGE_STYLE_PERSISTENCE_DEFINITION_NAME)==null ) {
+                DynStruct definition = manager.addDefinition(
+                    ImageStyle.class,
+                    IMAGE_STYLE_PERSISTENCE_DEFINITION_NAME,
+                    IMAGE_STYLE_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+                    null, 
+                    null
+                );
+
+                // Extend the Style base definition
+                definition.extend(manager.getDefinition(BACKGROUND_FILE_STYLE_PERSISTENCE_DEFINITION_NAME));
+
+                definition.addDynFieldURL(SOURCE).setMandatory(true);
+                definition.addDynFieldString(SOURCE_SYMBOL_IN_LIBRARY).setMandatory(false);
+            }
+            return Boolean.TRUE;
+        }
+    }
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ImageStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/AbstractStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/AbstractStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/AbstractStyle.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Implements the IStyle interface in order to complete the methods ot the
+ * IStyle interface that allow the users to add the description of an object or
+ * obtain it.
+ * 
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+
+public abstract class AbstractStyle implements IStyle {
+
+	public static final String STYLE_PERSISTENCE_DEFINITION_NAME = "Style";
+
+	private static final String FIELD_DESCRIPTION = "description";
+
+	private String desc;
+
+	public final void setDescription(String desc) {
+		this.desc = desc;
+	}
+
+	public final String getDescription() {
+		return desc;
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		return super.clone();
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		setDescription(state.getString(FIELD_DESCRIPTION));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_DESCRIPTION, getDescription());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(STYLE_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						AbstractStyle.class,
+						STYLE_PERSISTENCE_DEFINITION_NAME,
+						STYLE_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Description
+				definition.addDynFieldString(FIELD_DESCRIPTION);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/AbstractStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/Line2DOffset.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/Line2DOffset.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/Line2DOffset.java	(revision 42196)
@@ -0,0 +1,645 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Shape;
+import java.awt.geom.Line2D;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.LineSegment;
+/**
+ *
+ * Line2DOffset.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Jan 3, 2008
+ *
+ */
+
+public class Line2DOffset {
+	final static private Logger logger = LoggerFactory.getLogger(Line2DOffset.class);
+
+	public static GeneralPathX offsetLine(Shape p, double offset) {
+
+		if (Math.abs(offset) < 1) {
+			return new GeneralPathX(p.getPathIterator(null));
+		}
+		PathIterator pi = p.getPathIterator(null);
+		double[] dataCoords = new double[6];
+		Coordinate from = null, first = null;
+		List<LineSegment> segments = new ArrayList<LineSegment>();
+		GeneralPathX offsetSegments = new GeneralPathX();
+		LineSegment line;
+		try {
+			while (!pi.isDone()) {
+				// while not done
+				int type = pi.currentSegment(dataCoords);
+
+				switch (type) {
+				case PathIterator.SEG_MOVETO:
+					if(from == null){
+						from = new Coordinate(dataCoords[0], dataCoords[1]);
+						first = from;
+						break;
+					} else {
+						/* Puede significar un agujero en un pol�gono o un salto en una linea.
+						 * Entonces, consumimos los segmentos que llevamos
+						 * y empezamos un nuevo pol�gono o una nueva linea.
+						 */
+						try {
+							if(((Geometry)p).getType() == Geometry.TYPES.SURFACE){
+								offsetSegments.append(offsetAndConsumeClosedSegments(offset, segments).getPathIterator(null),
+										false);
+							} else {
+								offsetSegments.append(offsetAndConsumeSegments(offset, segments).getPathIterator(null),
+										false);
+							}
+						} catch (NotEnoughSegmentsToClosePathException e) {
+							logger.error(
+									e.getMessage(), e);
+						}
+						segments.clear();
+						from = new Coordinate(dataCoords[0], dataCoords[1]);
+						first = from;
+						break;
+					}
+
+				case PathIterator.SEG_LINETO:
+
+					// System.out.println("SEG_LINETO");
+					Coordinate to = new Coordinate(dataCoords[0], dataCoords[1]);
+					if(from.compareTo(to)!=0){
+						line = new LineSegment(from, to);
+						segments.add(line);
+						from = to;
+					}
+					break;
+				case PathIterator.SEG_CLOSE:
+					line = new LineSegment(from, first);
+					segments.add(line);
+					//					from = first;
+					try {
+						offsetSegments.append(offsetAndConsumeClosedSegments(
+								offset, segments).getPathIterator(null), false);
+					} catch (NotEnoughSegmentsToClosePathException e) {
+						logger.error(
+								e.getMessage(), e);
+					}
+					segments.clear();
+					first =null;
+					from = null;
+
+					break;
+
+				} // end switch
+
+				pi.next();
+			}
+			offsetSegments.append(offsetAndConsumeSegments(offset, segments)
+					.getPathIterator(null), false);
+
+			return offsetSegments;
+		} catch (ParallelLinesCannotBeResolvedException e) {
+			logger.error(e.getMessage(), e);
+			return new GeneralPathX(p.getPathIterator(null));
+		}
+	}
+
+	private static GeneralPathX offsetAndConsumeSegments(double offset,
+			List<LineSegment> segments)
+	throws ParallelLinesCannotBeResolvedException {
+		Map<LineSegment, LineEquation> offsetLines =
+			new HashMap<LineSegment, LineEquation>();
+		int segmentCount = segments.size();
+		// first calculate offset lines with the starting point
+		for (int i = 0; i < segmentCount; i++) {
+			LineSegment segment = (LineSegment)segments.get(i);
+			double theta = segment.angle();
+			//FIXME: �Esto para qu� es?
+			//			if (Math.abs(theta) % (Math.PI*0.5) < 0.00001){
+			//				theta=theta+0.00000000000001;
+			//			}
+
+			double xOffset = offset * Math.sin(theta);
+			double yOffset = offset * Math.cos(theta);
+
+			Coordinate p0 = segment.p0;
+			double x0 = p0.x + xOffset;
+			double y0 = p0.y - yOffset;
+
+			Coordinate p1 = segment.p1;
+			double x1 = p1.x + xOffset;
+			double y1 = p1.y - yOffset;
+
+			LineEquation offsetLine = new LineEquation(theta, x0, y0, x1, y1);
+			offsetLines.put(segment, offsetLine);
+		}
+
+		/*
+		 * let's now calculate the end point of each segment with the point
+		 * where each line crosses the next one. this point will be the end
+		 * point of the first line, and the start point of its next one.
+		 */
+		Point2D pIni = null;
+		Point2D pEnd = null;
+		GeneralPathX gpx = new GeneralPathX();
+		for (int i = 0; i < segmentCount; i++) {
+			LineSegment segment = (LineSegment)segments.get(0);
+			LineEquation eq = (LineEquation)offsetLines.get(segment);
+			if (i == 0) {
+				pIni = new Point2D.Double(eq.x, eq.y);
+			} else {
+				pIni = pEnd;
+			}
+
+			if (i < segmentCount - 1) {
+				LineEquation eq1 = (LineEquation) offsetLines.get(segments.get(1));
+				try{
+					pEnd = eq.resolve(eq1);
+				} catch (ParallelLinesCannotBeResolvedException e) { //Las lineas son paralelas y NO son la misma.
+					pEnd = new Point2D.Double(eq.xEnd, eq.yEnd);
+					gpx.append(new Line2D.Double(pIni, pEnd)
+					.getPathIterator(null), true); // a�adimos una linea
+					// hasta el final
+					// del primer
+					// segmento
+					//					 y asignamos como punto final el principio del siguiente segmento
+					//					 para que en la siguiente iteraci�n lo tome como punto inicial.
+					pIni = pEnd;
+					pEnd = new Point2D.Double(eq1.x, eq1.y);
+					segments.remove(0);
+					continue;
+				}
+			} else {
+				pEnd = new Point2D.Double(eq.xEnd, eq.yEnd);
+			}
+
+			gpx.append(new Line2D.Double(pIni, pEnd).getPathIterator(null), true);
+			segments.remove(0);
+		}
+		return gpx;
+	}
+
+	private static GeneralPathX offsetAndConsumeClosedSegments(double offset,
+			List<LineSegment> segments)
+	throws ParallelLinesCannotBeResolvedException, NotEnoughSegmentsToClosePathException {
+		int segmentCount = segments.size();
+		if (segmentCount > 1) {
+			Map<LineSegment, LineEquation> offsetLines = new HashMap<LineSegment, LineEquation>();
+			// first calculate offset lines with the starting point
+			for (int i = 0; i < segmentCount; i++) {
+				LineSegment segment = (LineSegment)segments.get(i);
+				double theta = segment.angle();
+				//FIXME: �Esto para qu� es?
+				//			if (Math.abs(theta) % (Math.PI*0.5) < 0.00001){
+				//				theta=theta+0.00000000000001;
+				//			}
+
+				double xOffset = offset * Math.sin(theta);
+				double yOffset = offset * Math.cos(theta);
+
+				Coordinate p0 = segment.p0;
+				double x0 = p0.x + xOffset;
+				double y0 = p0.y - yOffset;
+
+				Coordinate p1 = segment.p1;
+				double x1 = p1.x + xOffset;
+				double y1 = p1.y - yOffset;
+
+				LineEquation offsetLine = new LineEquation(theta, x0, y0, x1, y1);
+				offsetLines.put(segment, offsetLine);
+			}
+
+			/*
+			 * let's now calculate the end point of each segment with the point
+			 * where each line crosses the next one. this point will be the end
+			 * point of the first line, and the start point of its next one.
+			 */
+			Point2D pIni = null;
+			Point2D pEnd = null;
+			Point2D firstP = null;
+			GeneralPathX gpx = new GeneralPathX();
+			for (int i = 0; i < segmentCount; i++) {
+				LineSegment segment = (LineSegment)segments.get(0);
+				LineEquation eq = offsetLines.get(segment);
+				if (i == 0) { //Calculo de la intersecci�n entre el primer segmento y el �ltimo
+					LineEquation eq0 = offsetLines.get((LineSegment)segments.get(segmentCount-1));
+					try{
+						pIni = eq0.resolve(eq);
+					} catch (ParallelLinesCannotBeResolvedException e) { //Las lineas son paralelas y NO son la misma.
+						//						pIni = new Point2D.Double(eq0.xEnd, eq0.yEnd);
+						pIni = new Point2D.Double(eq.x, eq.y);
+					}
+					firstP = pIni;
+				} else {
+					pIni = pEnd;
+				}
+
+				if (i < segmentCount - 1) {
+					LineEquation eq1 = offsetLines.get((LineSegment)segments.get(1));
+					try{
+						pEnd = eq.resolve(eq1);
+					} catch (ParallelLinesCannotBeResolvedException e) { //Las lineas son paralelas y NO son la misma.
+						pEnd = new Point2D.Double(eq.xEnd, eq.yEnd);
+						gpx.append(new Line2D.Double(pIni, pEnd).getPathIterator(null), true); // a�adimos una linea hasta el final del primer segmento
+						//					 y asignamos como punto final el principio del siguiente segmento
+						//					 para que en la siguiente iteraci�n lo tome como punto inicial.
+						pIni = pEnd;
+						pEnd = new Point2D.Double(eq1.x, eq1.y);
+						segments.remove(0);
+						continue;
+					}
+				} else {
+					//					pEnd = new Point2D.Double(eq.xEnd, eq.yEnd);
+					pEnd = new Point2D.Double(firstP.getX(), firstP.getY());
+				}
+
+				gpx.append(new Line2D.Double(pIni, pEnd).getPathIterator(null), true);
+				segments.remove(0);
+			}
+			return gpx;
+		}
+		throw new NotEnoughSegmentsToClosePathException(segments);
+
+	}
+
+	//	private static GeneralPathX offsetAndConsumeClosedSegments(double offset,
+	//			List<LineSegment> segments)
+	//	throws ParallelLinesCannotBeResolvedException,
+	//	NotEnoughSegmentsToClosePathException {
+	//		int segmentCount = segments.size();
+	//		if (segmentCount > 1) {
+	//			GeneralPathX openPath = offsetAndConsumeSegments(offset, segments);
+	//			openPath.closePath();
+	//			return openPath;
+	//		}
+	//		throw new NotEnoughSegmentsToClosePathException(segments);
+	//	}
+}
+
+class LineEquation {
+	double theta, m, x, y;
+
+	double xEnd, yEnd; // just for simplicity of code
+
+	public LineEquation(double theta, double x, double y, double xEnd,
+			double yEnd) {
+		//		this.theta = Math.tan(theta); //Esto es un error, no podemos confundir el angulo de la recta con su pendiente
+		this.theta = theta;
+		this.m = Math.tan(theta);
+		this.x = x;
+		this.y = y;
+		this.xEnd = xEnd;
+		this.yEnd = yEnd;
+	}
+
+	public Point2D resolve(LineEquation otherLine)
+	throws ParallelLinesCannotBeResolvedException {
+		/*
+		 * line1 (this): y - y0 = m*(x - x0)
+		 * line2 (otherLine): y' - y'0 = m'*(x' - x'0)
+		 */
+
+		double X;
+		double Y;
+		if(Math.abs(this.x - this.xEnd)<0.00001) { //Esta linea es vertical
+			//			System.out.println("1 VERTICAL");
+			X = this.xEnd;
+			if (Math.abs(otherLine.x - otherLine.xEnd)<0.00001){//La otra linea es vertical
+				//				System.out.println("    2 PERPENDICULAR");
+				if(Math.abs(this.x - otherLine.x)<0.00001){ //Son la misma linea, devolvemos el primer punto de la otra linea.
+					//					System.out.println("        MISMA LINEA");
+					Y = otherLine.y;
+				} else { //No son la misma linea, entonces son paralelas, excepcion.
+					//					System.out.println("        CASCO POR 1");
+					throw new ParallelLinesCannotBeResolvedException(this, otherLine);
+				}
+			} else if (Math.abs(otherLine.y - otherLine.yEnd)<0.00001) { //La otra linea es horizontal
+				//				System.out.println("    2 HORIZONTAL");
+				Y = otherLine.y;
+			} else { //Si no
+				//				System.out.println("    2 CUALQUIERA");
+				Y = otherLine.m*(X - otherLine.x)+otherLine.y;
+			}
+
+		} else if (Math.abs(this.y - this.yEnd)<0.00001) { //Esta linea es horizontal
+			//			System.out.println("1 HORIZONTAL");
+			Y = this.yEnd;
+			if (Math.abs(otherLine.y - otherLine.yEnd)<0.00001) { //La otra linea es horizontal
+				//				System.out.println("    2 HORIZONTAL");
+				if(Math.abs(this.y - otherLine.y)<0.00001){ //Son la misma linea, devolvemos el primer punto de la otra linea.
+					//					System.out.println("        MISMA LINEA");
+					X = otherLine.x;
+				} else { //No son la misma linea, entonces son paralelas, excepcion.
+					//					System.out.println("        CASCO POR 2");
+					throw new ParallelLinesCannotBeResolvedException(this, otherLine);
+				}
+			} else if (Math.abs(otherLine.x - otherLine.xEnd)<0.00001){//La otra linea es vertical
+				//				System.out.println("    2 VERTICAL");
+				X = otherLine.x;
+			} else { //Si no
+				//				System.out.println("    2 CUALQUIERA");
+				X = (Y - otherLine.y)/otherLine.m +otherLine.x;
+			}
+		} else { //Esta linea no es ni vertical ni horizontal
+			//			System.out.println("1 CUALQUIERA");
+			if (Math.abs(otherLine.y - otherLine.yEnd)<0.00001) { //La otra linea es horizontal
+				//				System.out.println("    2 HORIZONTAL");
+				Y = otherLine.y;
+				X = (Y - this.y)/this.m +this.x;
+			} else if (Math.abs(otherLine.x - otherLine.xEnd)<0.00001){//La otra linea es vertical
+				//				System.out.println("    2 VERTICAL");
+				X = otherLine.x;
+				Y = this.m*(X - this.x)+this.y;
+			} else if ((Math.abs(otherLine.m - this.m)<0.00001)) { //Tienen la misma pendiente
+				//				System.out.println("    MISMA PENDIENTE");
+				Y = otherLine.m*(this.x - otherLine.x)+otherLine.y;
+				if (Math.abs(this.y - Y)<0.00001){ //Las lineas son la misma
+					//					System.out.println("        MISMA LINEA");
+					X = otherLine.x;
+					Y = otherLine.y;
+				} else {
+					//					System.out.println("        CASCO POR 3");
+					throw new ParallelLinesCannotBeResolvedException(this, otherLine);
+				}
+			} else {
+				//				System.out.println("    AMBAS CUALESQUIERA");
+				double mTimesX = this.m * this.x;
+				X = (mTimesX - this.y - otherLine.m * otherLine.x + otherLine.y) / (this.m - otherLine.m);
+				Y = this.m * X - mTimesX + this.y;
+			}
+		}
+
+		//		System.out.println("DEVOLVEMOS X = "+X+" Y = "+Y);
+		return new Point2D.Double(X, Y);
+
+	}
+
+	public String toString() {
+		return "Y - " + y + " = " + m + "*(X - " + x + ")";
+	}
+}
+
+class NotEnoughSegmentsToClosePathException extends Exception {
+	private static final long serialVersionUID = 95503944546535L;
+
+	public NotEnoughSegmentsToClosePathException(List<LineSegment> segments) {
+		super("Need at least 2 segments to close a path. I've got "
+				+ segments.size() + ".");
+	}
+}
+
+class ParallelLinesCannotBeResolvedException extends Exception {
+	private static final long serialVersionUID = 8322556508820067641L;
+
+	public ParallelLinesCannotBeResolvedException(LineEquation eq1,
+			LineEquation eq2) {
+		super("Lines '" + eq1 + "' and '" + eq2
+				+ "' are parallel and don't share any point!");
+	}
+}
+//public class Line2DOffset {
+
+//private static final double TOL = 1E-8;
+//private static final double ANGLE_TOL = 0.01/180*Math.PI;
+
+//public static GeneralPathX offsetLine(Shape p, double offset) {
+
+//PathIterator pi = p.getPathIterator(null);
+//double[] dataCoords = new double[6];
+//Coordinate from = null, first = null;
+//ArrayList<LineSegment> segments = new ArrayList<LineSegment>();
+//GeneralPathX offsetSegments = new GeneralPathX();
+//try {
+//while (!pi.isDone()) {
+//// while not done
+//int type = pi.currentSegment(dataCoords);
+
+//switch (type) {
+//case PathIterator.SEG_MOVETO:
+//from = new Coordinate(dataCoords[0], dataCoords[1]);
+//first = from;
+//break;
+
+//case PathIterator.SEG_LINETO:
+
+//// System.out.println("SEG_LINETO");
+//Coordinate to = new Coordinate(dataCoords[0], dataCoords[1]);
+//LineSegment line = new LineSegment(from, to);
+//int size = segments.size();
+//if (size>0) {
+//LineSegment prev = segments.get(size-1);
+//if (line.angle() == prev.angle()) {
+//if (Math.abs(line.p0.x - prev.p1.x) < TOL &&
+//Math.abs(line.p0.y - prev.p1.y) < TOL) {
+//prev.p1 = line.p1;
+//break;
+//}
+//}
+//}
+//from = to;
+//segments.add(line);
+
+//break;
+//case PathIterator.SEG_CLOSE:
+//line = new LineSegment(from, first);
+//segments.add(line);
+//from = first;
+//try {
+//offsetSegments.append(offsetAndConsumeClosedSegments(offset, segments), false);
+//} catch (NotEnoughSegmentsToClosePathException e) {
+//Logger.getLogger(Line2DOffset.class).error(e.getMessage(), e);
+//}
+//break;
+
+//} // end switch
+
+//pi.next();
+//}
+//offsetSegments.append(offsetAndConsumeSegments(offset, segments), true);
+
+//return offsetSegments;
+//} catch (ParallelLinesCannotBeResolvedException e) {
+//Logger.getLogger(Line2DOffset.class).error(e.getMessage(), e);
+//return new GeneralPathX(p);
+//}
+//}
+
+//private static GeneralPathX offsetAndConsumeSegments(double offset, ArrayList<LineSegment> segments)  {
+//Hashtable<LineSegment, LineEquation> offsetLines = new Hashtable<LineSegment, LineEquation>();
+//int segmentCount = segments.size();
+//// first calculate offset lines with the starting point
+//for (int i = 0; i < segmentCount; i++) {
+//LineSegment segment = segments.get(i);
+//double theta = segment.angle();
+
+//double xOffset = offset*Math.sin(theta);
+//double yOffset = offset*Math.cos(theta);
+
+//Coordinate p0 = segment.p0;
+//double x0 = p0.x + xOffset;
+//double y0 = p0.y - yOffset;
+
+//Coordinate p1 = segment.p1;
+//double x1 = p1.x + xOffset;
+//double y1 = p1.y - yOffset;
+
+//LineEquation offsetLine = new LineEquation(theta, x0, y0, x1, y1, offset);
+//offsetLines.put(segment, offsetLine);
+//}
+
+///*
+//* let's now calculate the end point of each segment with
+//* the point where each line crosses the next one.
+//* this point will be the end point of the first line, and
+//* the start point of its next one.
+//*/
+//Point2D pIni = null;
+//Point2D pEnd = null;
+//GeneralPathX gpx = new GeneralPathX();
+//for (int i = 0; i < segmentCount; i++) {
+//LineSegment segment = segments.get(0);
+//LineEquation eq = offsetLines.get(segment);
+//Point2D pAux = null;
+//if (i < segmentCount -1) {
+//try {
+//pAux = eq.resolve(offsetLines.get(segments.get(1)));
+//if (i == 0) {
+//pIni = new Point2D.Double(eq.x, eq.y);
+//} else {
+//pIni = pEnd;
+//}
+//} catch (ParallelLinesCannotBeResolvedException e) {
+//segments.remove(0);
+//continue;
+//}
+//}
+
+
+//if (pAux != null) {
+//pEnd = pAux;
+//} else {
+//pEnd = new Point2D.Double(eq.xEnd, eq.yEnd);
+//}
+
+//gpx.append(new Line2D.Double(pIni, pEnd), true);
+//segments.remove(0);
+//}
+//return gpx;
+//}
+
+//private static GeneralPathX offsetAndConsumeClosedSegments(double offset, ArrayList<LineSegment> segments) throws ParallelLinesCannotBeResolvedException, NotEnoughSegmentsToClosePathException {
+//int segmentCount = segments.size();
+//if (segmentCount > 1) {
+//GeneralPathX openPath = offsetAndConsumeSegments(offset, segments);
+//openPath.closePath();
+//return openPath;
+//}
+//throw new NotEnoughSegmentsToClosePathException(segments);
+//}
+//}
+
+//class LineEquation {
+//double theta, x, y;
+//double xEnd, yEnd; // just for simplicity of code
+//double offset;
+
+//public LineEquation(double theta, double x, double y, double xEnd, double yEnd, double offset) {
+//this.theta = theta;
+//this.x = x;
+//this.y = y;
+//this.xEnd = xEnd;
+//this.yEnd = yEnd;
+//this.offset = offset;
+//}
+
+//public Point2D resolve(LineEquation otherLine) throws ParallelLinesCannotBeResolvedException {
+//double X;
+//double Y;
+
+
+///*
+//* line1 (this):      y  -  y0 =  m*(x  - x0)
+//* line2 (otherLine): y' - y'0 = m'*(x' - x'0)
+//*/
+//if (otherLine.theta == this.theta)
+//throw new ParallelLinesCannotBeResolvedException(this, otherLine);
+
+//if (Math.cos(theta) == 0) {
+
+//X = otherLine.x + offset*Math.cos(otherLine.theta);
+//Y = otherLine.y + offset*Math.sin(otherLine.theta);
+//} else if (Math.cos(otherLine.theta) == 0) {
+//X = x + offset*Math.cos(theta);
+//Y = y + offset*Math.sin(theta);
+//} else {
+///*
+//* m*(X - x0) + y0 = m'*(X - x'0) + y0'
+//* X = (m*x0 - y0 - m'*x0' + y'0) / (m - m')
+//*/
+//double tanTheta = Math.tan(theta);
+//double otherTanTheta = Math.tan(otherLine.theta);
+//double thetaTimesX = tanTheta*this.x;
+//X = (thetaTimesX - this.y - otherTanTheta*otherLine.x + otherLine.y) / (tanTheta - otherTanTheta);
+
+///*
+//* Y - y0 = m*(X - x0)
+//* Y = m*X - m*x0 + y0
+//*/
+//Y = tanTheta*X - thetaTimesX + this.y;
+//}
+//return new Point2D.Double(X, Y);
+//}
+
+//@Override
+//public String toString() {
+//return "Y - "+y+" = "+theta+"*(X - "+x+")";
+//}
+//}
+
+//class NotEnoughSegmentsToClosePathException extends Exception {
+//private static final long serialVersionUID = 95503944546535L;
+//public NotEnoughSegmentsToClosePathException(ArrayList<LineSegment> segments) {
+//super("Need at least 2 segments to close a path. I've got "+segments.size()+".");
+//}
+//}
+
+//class ParallelLinesCannotBeResolvedException extends Exception {
+//private static final long serialVersionUID = 8322556508820067641L;
+
+//public ParallelLinesCannotBeResolvedException(LineEquation eq1, LineEquation eq2) {
+//super("Lines '"+eq1+"' and '"+eq2+"' are parallel and don't share any point!");
+//}
+//}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/Line2DOffset.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbol.java	(revision 42196)
@@ -0,0 +1,1167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 19-feb-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.Stroke;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.awt.image.ImageObserver;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.StringTokenizer;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.utils.StringUtilities;
+import org.gvsig.utils.XMLEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * S�mbolo utilizado para guardar las caracter�sticas que se deben de aplicar a
+ * los Shapes a dibujar.
+ *
+ * @author Vicente Caballero Navarro
+ * @deprecated (jaume)
+ */
+public class FSymbol implements ISymbol{
+	private static final Logger logger = LoggerFactory.getLogger(FSymbol.class);
+//	 Para s�mbolos de tipo pol�gono.
+	public final static int SYMBOL_STYLE_FILL_SOLID = 1;
+	public final static int SYMBOL_STYLE_FILL_TRANSPARENT = 2;
+	public final static int SYMBOL_STYLE_FILL_HORIZONTAL = 3;
+	public final static int SYMBOL_STYLE_FILL_VERTICAL = 4;
+	public final static int SYMBOL_STYLE_FILL_CROSS = 5;
+	public final static int SYMBOL_STYLE_FILL_UPWARD_DIAGONAL = 6;
+	public final static int SYMBOL_STYLE_FILL_DOWNWARD_DIAGONAL = 7;
+	public final static int SYMBOL_STYLE_FILL_CROSS_DIAGONAL = 8;
+	public final static int SYMBOL_STYLE_FILL_GRAYFILL = 9;
+	public final static int SYMBOL_STYLE_FILL_LIGHTGRAYFILL = 10;
+	public final static int SYMBOL_STYLE_FILL_DARKGRAYFILL = 11;
+
+	//	Para s�mbolos de tipo Punto
+	public final static int SYMBOL_STYLE_MARKER_CIRCLE = 30;
+	public final static int SYMBOL_STYLE_MARKER_SQUARE = 31;
+	public final static int SYMBOL_STYLE_MARKER_TRIANGLE = 32;
+	public final static int SYMBOL_STYLE_MARKER_CROSS = 33;
+	public final static int SYMBOL_STYLE_MARKER_TRUETYPE = 34;
+	public final static int SYMBOL_STYLE_MARKER_IMAGEN = 35;
+	public final static int SYMBOL_STYLE_DGNSPECIAL = 40;
+
+	// Para s�mbolos de l�neas
+	public final static int SYMBOL_STYLE_LINE_SOLID = 60;
+	public final static int SYMBOL_STYLE_LINE_DASH = 61;
+	public final static int SYMBOL_STYLE_LINE_DOT = 62;
+	public final static int SYMBOL_STYLE_LINE_DASHDOT = 63;
+	public final static int SYMBOL_STYLE_LINE_DASHDOTDOT = 64;
+	public final static int SYMBOL_STYLE_LINE_RAIL = 65;
+	public final static int SYMBOL_STYLE_LINE_ARROW = 66;
+
+	// Para s�mbolos de tipo texto
+	public final static int SYMBOL_STYLE_TEXT_NORMAL = 90;
+	public final static int SYMBOL_STYLE_TEXT_CURSIVE = 91;
+	public final static int SYMBOL_STYLE_TEXT_BOLD = 92;
+	public final static int SYMBOL_STYLE_TEXT_BOLDCURSIVE = 93;
+
+
+
+	private static BufferedImage img =
+		CompatLocator.getGraphicsUtils().createBufferedImage(1, 1,
+			BufferedImage.TYPE_INT_ARGB);
+	
+	private static Rectangle rect = new Rectangle(0, 0, 1, 1);
+	private int m_symbolType;
+	private int m_Style;
+	private boolean m_useOutline;
+	private Color m_Color;
+	private Color m_outlineColor;
+	private Font m_Font;
+	private Color m_FontColor;
+	private float m_FontSize;
+	private int rgb;
+	private ImageObserver imgObserver;
+
+	/**
+	 * Si <code>m_bUseFontSize</code> viene a false entonces m_FontSize viene
+	 * en unidades de mapa (metros)
+	 */
+	private boolean m_bUseFontSizeInPixels;
+
+	/**
+	 * <code>m_bDrawShape</code> indica si queremos dibujar el shape de fondo.
+	 * Es �til cuando est�s etiquetando y no quieres que se dibuje el s�mbolo
+	 * que te sirve de base para etiquetar.
+	 */
+	private boolean m_bDrawShape = true;
+	private int m_Size;
+	private Image m_Icon;
+	private URI m_IconURI;
+	private int m_Rotation;
+	private Paint m_Fill;
+	public String m_LinePattern = "0"; // Solo para poder mostrarlo cuando vamos a seleccionar un s�mbolo
+
+	// En realidad lo podemos ver de BasicStroke, pero....
+	// ya veremos si luego lo quitamos.
+	private Stroke m_Stroke;
+
+	//private float m_stroke=0;
+	// public int m_Transparency; // Ya la lleva dentro del Color
+	private boolean m_bUseSize; // Si est� a true, m_Size viene en coordenadas de mundo real.
+	private int m_AlingVert;
+	private int m_AlingHoriz;
+	private String m_Descrip;
+	public Color m_BackColor;
+	public Paint m_BackFill;
+
+	// private int resolutionPrinting=300;
+
+    /**
+     * Converts the comma-delimited string into a List of trimmed strings.
+     *
+     * @param linePattern a String with comma-delimited values
+     * @param lineWidth DOCUMENT ME!
+     *
+     * @return a List of the Strings that were delimited by commas
+     *
+     * @throws IllegalArgumentException DOCUMENT ME!
+     */
+    public static float[] toArray(String linePattern, float lineWidth) {
+        StringTokenizer st = new StringTokenizer(linePattern, ",");
+        int numTokens = st.countTokens();
+
+        float[] array = new float[numTokens];
+
+        for (int i = 0; i < numTokens; i++) {
+            String string = st.nextToken();
+            array[i] = Float.parseFloat(string) * lineWidth;
+
+            if (array[i] <= 0) {
+                return null;
+            }
+        }
+
+        return array;
+    }
+
+	/**
+	 * Crea un nuevo FSymbol.
+	 * @deprecated use SymbologyFactory.createDefaultSymbol() instead
+	 */
+//    FSymbol() {
+	private FSymbol() {
+		// Nothing to do
+	}
+
+	/**
+	 * Creates a new FSymbol object.
+	 *
+	 * @param tipoSymbol Tipo de s�mbolo.
+	 * @param c Color.
+	 * @deprecated use SymbologyFactory.createDefaultSymbol(shapeType, color) instead
+	 */
+//	public FSymbol(int tipoSymbol, Color c) {
+	// private FSymbol(int tipoSymbol, Color c) {
+	// createSymbol(tipoSymbol, c);
+	// }
+
+	/**
+	 * Crea un nuevo FSymbol.
+	 *
+	 * @param tipoSymbol Tipo de S�mbolo.
+	 * 			case FConstant.SYMBOL_TYPE_POINT:
+			case FConstant.SYMBOL_TYPE_POINTZ:
+			case FConstant.SYMBOL_TYPE_MULTIPOINT:
+				m_bUseSize = true; // Esto es lo primero que hay que hacer siempre
+
+				// para evitar un StackOverflow
+				m_useOutline = false;
+				setStyle(FConstant.SYMBOL_STYLE_MARKER_SQUARE);
+				setSize(5); //pixels
+
+				break;
+
+			case FConstant.SYMBOL_TYPE_LINE:
+			case FConstant.SYMBOL_TYPE_POLYLINEZ:
+			case FConstant.SYMBOL_TYPE_POLYGONZ:
+				setStroke(new BasicStroke());
+				setStyle(FConstant.SYMBOL_STYLE_LINE_SOLID);
+
+				break;
+
+			case FConstant.SYMBOL_TYPE_FILL:
+			    setStroke(new BasicStroke());
+				setStyle(FConstant.SYMBOL_STYLE_FILL_SOLID);
+
+				break;
+			case FShape.MULTI:
+				m_bUseSize = true;
+			    setStroke(new BasicStroke());
+				setStyle(FConstant.SYMBOL_STYLE_FILL_SOLID);
+
+				// setStyle(FConstant.SYMBOL_STYLE_MARKER_SQUARE);
+				setSize(5); //pixels
+				break;
+
+			case FConstant.SYMBOL_TYPE_TEXT:
+				setStroke(new BasicStroke());
+				setStyle(FConstant.SYMBOL_STYLE_TEXT_NORMAL);
+				setFont(new Font("Dialog",Font.PLAIN,12));
+				break;
+
+	 */
+	public FSymbol(int tipoSymbol) {
+//	private FSymbol(int tipoSymbol) {
+		int numreg = (int) (Math.random() * 100);
+		Color colorAleatorio = new Color(((numreg * numreg) + 100) % 255,
+				(numreg + ((3 * numreg) + 100)) % 255, numreg % 255);
+
+		createSymbol(tipoSymbol, colorAleatorio);
+	}
+
+	/**
+	 * A partir de un s�mbolo devuelve otro similar pero con el color de
+	 * selecci�n.
+	 *
+	 * @param sym S�mbolo a modificar.
+	 *
+	 * @return S�mbolo modificado.
+	 */
+	public static FSymbol getSymbolForSelection(FSymbol sym) {
+		FSymbol selecSymbol = sym.fastCloneSymbol();
+		selecSymbol.setColor(MapContext.getSelectionColor());
+
+		selecSymbol.setFill(null);
+		// 050215, jmorell: Si en los drivers cambiamos el estilo, aqu� tenemos que
+		// actualizar los cambios. SYMBOL_STYLE_MARKER_SQUARE --> SYMBOL_STYLE_DGNSPECIAL.
+		if ((selecSymbol.getStyle() == SYMBOL_STYLE_FILL_TRANSPARENT)
+		        || (selecSymbol.getStyle() == SYMBOL_STYLE_DGNSPECIAL)) {
+			selecSymbol.setStyle(SYMBOL_STYLE_FILL_SOLID);
+		} else if (selecSymbol.getStyle() == SYMBOL_STYLE_TEXT_BOLD ||
+				selecSymbol.getStyle() == SYMBOL_STYLE_TEXT_BOLDCURSIVE ||
+				selecSymbol.getStyle() == SYMBOL_STYLE_TEXT_CURSIVE ||
+				selecSymbol.getStyle() == SYMBOL_STYLE_TEXT_NORMAL){
+			selecSymbol.setFontColor(MapContext.getSelectionColor());
+		}
+		selecSymbol.rgb = MapContext.getSelectionColor().getRGB();
+
+		return selecSymbol;
+	}
+
+	/**
+	 * Clona el s�mbolo actual.
+	 *
+	 * @return Nuevo s�mbolo clonado.
+	 */
+	public FSymbol cloneSymbol() {
+		return createFromXML(getXMLEntity());
+	}
+
+	/**
+	 * Se usa para el s�mbolo de selecci�n. Es una forma
+	 * r�pida de clonar un s�mbolo, sin hacerlo via XML.
+	 * Vicente, no lo borres!!!
+	 * @return
+	 */
+	public FSymbol fastCloneSymbol()
+	{
+		FSymbol nS = new FSymbol();
+
+
+		nS.m_symbolType = m_symbolType;
+		nS.m_Style = m_Style;
+		nS.m_useOutline = m_useOutline;
+		nS.m_Color = m_Color;
+		nS.m_outlineColor = m_outlineColor;
+		nS.m_Font = m_Font;
+		nS.m_FontColor = m_FontColor;
+		nS.m_FontSize = m_FontSize;
+		nS.m_bUseFontSizeInPixels = m_bUseFontSizeInPixels;
+		nS.m_bDrawShape = m_bDrawShape;
+		nS.m_Size = m_Size;
+		nS.m_Icon = m_Icon;
+		nS.m_IconURI = m_IconURI;
+		nS.m_Rotation = m_Rotation;
+		nS.m_Fill = m_Fill;
+		nS.m_Stroke = m_Stroke;
+		// nS.m_Transparency =m_Transparency ;
+		nS.m_bUseSize = m_bUseSize;
+		nS.m_AlingVert = m_AlingVert;
+		nS.m_AlingHoriz = m_AlingHoriz;
+		nS.m_Descrip = m_Descrip;
+		nS.m_BackColor = m_BackColor;
+		nS.m_BackFill = m_BackFill;
+
+		nS.m_LinePattern = m_LinePattern;
+
+		return nS;
+	}
+
+
+	/**
+	 * Crea un s�mbolo a partir del tipo y el color.
+	 *
+	 * @param tipoSymbol Tipo de s�mbolo.
+	 * @param c Color del s�mbolo a crear.
+	 */
+	private void createSymbol(int tipoSymbol, Color c) {
+		// OJO: HE HECHO COINCIDIR LOS TIPOS DE SIMBOLO
+		//FConstant.SYMBOL_TYPE_POINT, LINE Y FILL CON
+		// FShape.POINT, LINE, POLYGON. EL .MULTI SE REFIERE
+		// A MULTIPLES TIPO DENTRO DEL SHAPE, AS� QUE SER� UN
+		// MULTISIMBOLO
+		// Tipo de simbolo
+		m_symbolType = tipoSymbol; // Para no recalcular el pixel, no usamos los set
+
+		// Ponemos un estilo por defecto
+		m_useOutline = true;
+		m_Color = c;
+		m_Stroke = null;
+		m_Fill = null;
+
+		m_FontColor = Color.BLACK;
+		m_FontSize = 10;
+		m_bUseFontSizeInPixels = true;
+
+		m_Size = 2;
+
+		switch (getSymbolType()) {
+			case Geometry.TYPES.POINT:
+			case Geometry.TYPES.MULTIPOINT:
+				m_bUseSize = true; // Esto es lo primero que hay que hacer siempre
+
+				// para evitar un StackOverflow
+				m_useOutline = false;
+				setStyle(SYMBOL_STYLE_MARKER_SQUARE);
+				setSize(5); //pixels
+
+				break;
+
+			case Geometry.TYPES.CURVE:			
+				setStroke(new BasicStroke());
+				setStyle(SYMBOL_STYLE_LINE_SOLID);
+
+				break;
+
+			case Geometry.TYPES.SURFACE:
+			    setStroke(new BasicStroke());
+				setStyle(SYMBOL_STYLE_FILL_SOLID);
+
+				break;
+			case Geometry.TYPES.GEOMETRY:
+				m_bUseSize = true;
+			    setStroke(new BasicStroke());
+				setStyle(SYMBOL_STYLE_FILL_SOLID);
+
+				// setStyle(FConstant.SYMBOL_STYLE_MARKER_SQUARE);
+				setSize(5); //pixels
+				break;
+		}
+
+		m_outlineColor = c.darker();
+
+		calculateRgb();
+	}
+
+	/**
+	 * Calcula el RGB del s�mbolo.
+	 */
+	public void calculateRgb() {
+		// Recalculamos el RGB
+		Graphics2D g2 = img.createGraphics();
+
+		try {
+			FGraphicUtilities.DrawSymbol(g2, g2.getTransform(), rect, this);
+		} catch (CreateGeometryException e) {
+			logger.error("Creating a geometry", e);
+			e.printStackTrace();
+		}
+		rgb = img.getRGB(0, 0);
+	}
+
+	/**
+	 * Devuelve el rgb del s�mbolo.
+	 *
+	 * @return rgb del s�mbolo.
+	 */
+	public int getOnePointRgb() {
+		return rgb;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.gui.layout.fframes.IFFrame#getXMLEntity()
+	 */
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className",this.getClass().getName());
+		xml.putProperty("m_symbolType", getSymbolType());
+		xml.putProperty("m_Style", getStyle());
+		xml.putProperty("m_useOutline", isOutlined());
+
+		if (getColor() != null) {
+			xml.putProperty("m_Color", StringUtilities.color2String(getColor()));
+		}
+
+		if (getOutlineColor() != null) {
+			xml.putProperty("m_outlineColor",
+				StringUtilities.color2String(getOutlineColor()));
+		}
+
+		if (getFont() != null) {
+			xml.putProperty("fontname", getFont().getName());
+			xml.putProperty("fontstyle", getFont().getStyle());
+
+			xml.putProperty("m_FontSize", getFontSize());
+			xml.putProperty("m_FontColor",
+				StringUtilities.color2String(getFontColor()));
+
+		}
+		xml.putProperty("m_bUseFontSize", isFontSizeInPixels());
+		xml.putProperty("m_bDrawShape", isShapeVisible());
+		xml.putProperty("m_Size", getSize());
+
+		//xml.putProperty("m_Icon",m_Icon.);
+		xml.putProperty("m_Rotation", getRotation());
+
+		if (getFill() instanceof Color) {
+			xml.putProperty("m_Fill",
+				StringUtilities.color2String((Color) getFill()));
+		}
+		else
+			if (getFill() != null)
+			{
+			    xml.putProperty("m_Fill", "WithFill");
+			}
+
+
+		xml.putProperty("m_LinePattern", m_LinePattern);
+
+		//Ancho del stroke en float
+		if (getStroke() != null) {
+			xml.putProperty("m_stroke",
+				((BasicStroke) getStroke()).getLineWidth());
+		} else {
+			xml.putProperty("m_stroke", 0f);
+		}
+
+		xml.putProperty("m_bUseSize", isSizeInPixels());
+		xml.putProperty("m_AlingVert", getAlingVert());
+		xml.putProperty("m_AlingHoriz", getAlingHoriz());
+		xml.putProperty("m_Descrip", getDescription());
+
+		if (m_BackColor != null) {
+			xml.putProperty("m_BackColor",
+				StringUtilities.color2String(m_BackColor));
+		}
+
+		if (m_BackFill instanceof Color) {
+			xml.putProperty("m_BackFill",
+				StringUtilities.color2String((Color) m_BackFill));
+		}
+
+		xml.putProperty("rgb", rgb);
+
+		if (m_Icon != null)
+		{
+		    xml.putProperty("m_IconURI", m_IconURI);
+		}
+
+		return xml;
+	}
+	/**
+	 * Crea el s�mbolo a partir del xml.
+	 *
+	 * @param xml xml que contiene la informaci�n para crear el s�mbolo.
+	 *
+	 * @return S�mbolo creado a partir del XML.
+	 */
+	public static FSymbol createFromXML(XMLEntity xml) {
+		FSymbol symbol = new FSymbol();
+		symbol.setSymbolType(xml.getIntProperty("m_symbolType"));
+		symbol.setStyle(xml.getIntProperty("m_Style"));
+		// System.out.println("createFromXML: m_Style=" + xml.getIntProperty("m_Style"));
+
+		symbol.setOutlined(xml.getBooleanProperty("m_useOutline"));
+
+		if (xml.contains("m_Color")) {
+			symbol.setColor(StringUtilities.string2Color(xml.getStringProperty(
+						"m_Color")));
+		}
+
+		if (xml.contains("m_outlineColor")) {
+			symbol.setOutlineColor(StringUtilities.string2Color(
+					xml.getStringProperty("m_outlineColor")));
+		}
+
+		if (xml.contains("fontname")) {
+			symbol.setFont(new Font(xml.getStringProperty("fontname"),
+					xml.getIntProperty("fontstyle"),
+					(int) xml.getFloatProperty("m_FontSize")));
+
+			symbol.setFontColor(StringUtilities.string2Color(
+					xml.getStringProperty("m_FontColor")));
+			symbol.setFontSize(xml.getFloatProperty("m_FontSize"));
+
+		}
+		symbol.setFontSizeInPixels(xml.getBooleanProperty("m_bUseFontSize"));
+		symbol.setShapeVisible(xml.getBooleanProperty("m_bDrawShape"));
+		symbol.setSize(xml.getIntProperty("m_Size"));
+
+		//xml.putProperty("m_Icon",m_Icon.);
+		symbol.setRotation(xml.getIntProperty("m_Rotation"));
+
+		if (xml.contains("m_Fill")) {
+		    // TODO: Si es un Fill de tipo imagen, deber�amos recuperar la imagen.
+		    String strFill = xml.getStringProperty("m_Fill");
+		    if (strFill.compareTo("WithFill") == 0) {
+				symbol.setFill(FSymbolFactory.createPatternFill(symbol.getStyle(), symbol.getColor()));
+			} else {
+				symbol.setFill(StringUtilities.string2Color(strFill));
+			}
+		}
+
+
+		symbol.m_LinePattern = xml.getStringProperty("m_LinePattern");
+
+		//Ancho del stroke en float
+        float lineWidth = xml.getFloatProperty("m_stroke");
+        if (symbol.m_LinePattern.compareTo("0") == 0)
+        {
+            symbol.setStroke(new BasicStroke(lineWidth));
+        }
+        else
+        {
+            symbol.setStroke(new BasicStroke(lineWidth, BasicStroke.CAP_ROUND,
+                    BasicStroke.JOIN_BEVEL, 1.0f,
+                        toArray(symbol.m_LinePattern, lineWidth), 0));
+        }
+
+		symbol.setSizeInPixels(xml.getBooleanProperty("m_bUseSize"));
+		symbol.setAlingVert(xml.getIntProperty("m_AlingVert"));
+		symbol.setAlingHoriz(xml.getIntProperty("m_AlingHoriz"));
+		symbol.setDescription(xml.getStringProperty("m_Descrip"));
+
+		if (xml.contains("m_BackColor")) {
+			symbol.m_BackColor = StringUtilities.string2Color(xml.getStringProperty(
+						"m_BackColor"));
+		}
+
+		if (xml.contains("m_BackFill")) {
+			symbol.m_BackFill = StringUtilities.string2Color(xml.getStringProperty(
+						"m_BackFill"));
+		}
+
+		symbol.rgb = xml.getIntProperty("rgb");
+
+		if (xml.contains("m_IconURI")) {
+		    try {
+                symbol.setIconURI(new URI(xml.getStringProperty("m_IconURI")));
+            } catch (URISyntaxException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+		}
+
+		return symbol;
+	}
+
+	/**
+	 * Introduce el estilo del s�mbolo.
+	 *
+	 * @param m_Style The m_Style to set.
+	 */
+	public void setStyle(int m_Style) {
+		this.m_Style = m_Style;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el estilo del s�mbolo.
+	 *
+	 * @return Returns the m_Style.
+	 */
+	public int getStyle() {
+		return m_Style;
+	}
+
+	/**
+	 * Introduce el tipo de s�mbolo.
+	 *
+	 * @param m_symbolType The m_symbolType to set.
+	 */
+	public void setSymbolType(int m_symbolType) {
+		this.m_symbolType = m_symbolType;
+	}
+
+	/**
+	 * Devuelve el tipo de s�mbolo.
+	 *
+	 * @return Returns the m_symbolType.
+	 */
+	public int getSymbolType() {
+		return m_symbolType;
+	}
+
+	/**
+	 * Introduce si el s�mbolo contiene linea de brode o no.
+	 *
+	 * @param m_useOutline The m_useOutline to set.
+	 */
+	public void setOutlined(boolean m_useOutline) {
+		this.m_useOutline = m_useOutline;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve si el s�mbolo contiene o no linea de borde.
+	 *
+	 * @return Returns the m_useOutline.
+	 */
+	public boolean isOutlined() {
+		return m_useOutline;
+	}
+
+	/**
+	 * Introduce el color del s�mbolo.
+	 *
+	 * @param m_Color The m_Color to set.
+	 */
+	public void setColor(Color m_Color) {
+		this.m_Color = m_Color;
+		calculateRgb();
+	}
+
+	/**
+	 * Devuelve el color del s�mbolo.
+	 *
+	 * @return Returns the m_Color.
+	 */
+	public Color getColor() {
+		return m_Color;
+	}
+
+	/**
+	 * Introduce el color de la l�nea de borde.
+	 *
+	 * @param m_outlineColor The m_outlineColor to set.
+	 */
+	public void setOutlineColor(Color m_outlineColor) {
+		this.m_outlineColor = m_outlineColor;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el color de la l�nea de borde.
+	 *
+	 * @return Returns the m_outlineColor.
+	 */
+	public Color getOutlineColor() {
+		return m_outlineColor;
+	}
+
+	/**
+	 * Introduce el Font del s�mbolo.
+	 *
+	 * @param m_Font The m_Font to set.
+	 */
+	public void setFont(Font m_Font) {
+		this.m_Font = m_Font;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el Font del s�mbolo.
+	 *
+	 * @return Returns the m_Font.
+	 */
+	public Font getFont() {
+		return m_Font;
+	}
+
+	/**
+	 * Introduce el color de la fuente.
+	 *
+	 * @param m_FontColor The m_FontColor to set.
+	 */
+	public void setFontColor(Color m_FontColor) {
+		this.m_FontColor = m_FontColor;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el color de la fuente.
+	 *
+	 * @return Returns the m_FontColor.
+	 */
+	public Color getFontColor() {
+		return m_FontColor;
+	}
+
+	/**
+	 * Introduce si se usa el tama�o de la fuente en pixels.
+	 *
+	 * @param m_bUseFontSize The m_bUseFontSize to set.
+	 */
+	public void setFontSizeInPixels(boolean m_bUseFontSize) {
+		this.m_bUseFontSizeInPixels = m_bUseFontSize;
+
+		// calculateRgb();
+	}
+
+	/**
+	 * Devuelve true si el tama�o de la fuente esta seleccionado en pixels.
+	 *
+	 * @return Returns the m_bUseFontSize.
+	 */
+	public boolean isFontSizeInPixels() {
+		return m_bUseFontSizeInPixels;
+	}
+
+	/**
+	 * Introduce si el shape e visible o no lo es.
+	 *
+	 * @param m_bDrawShape The m_bDrawShape to set.
+	 */
+	public void setShapeVisible(boolean m_bDrawShape) {
+		this.m_bDrawShape = m_bDrawShape;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve true si el shape es visible.
+	 *
+	 * @return Returns the m_bDrawShape.
+	 */
+	public boolean isShapeVisible() {
+		return m_bDrawShape;
+	}
+
+	/**
+	 * Introduce el tama�o del s�mbolo.
+	 *
+	 * @param m_Size The m_Size to set.
+	 */
+	public void setSize(int m_Size) {
+		this.m_Size = m_Size;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el tama�o del s�mbolo.
+	 *
+	 * @return Returns the m_Size.
+	 */
+	public int getSize() {
+		return m_Size;
+	}
+
+	/**
+	 * Introduce la imagen que hace de icono.
+	 *
+	 * @param m_Icon The m_Icon to set.
+	 */
+	public void setIcon(Image m_Icon) {
+		this.m_Icon = m_Icon;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el icono.
+	 *
+	 * @return Returns the m_Icon.
+	 */
+	public Image getIcon() {
+		return m_Icon;
+	}
+
+	/**
+	 * Introduce la rotaci�n.
+	 *
+	 * @param m_Rotation The m_Rotation to set.
+	 */
+	public void setRotation(int m_Rotation) {
+		this.m_Rotation = m_Rotation;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve la rotaci�n.
+	 *
+	 * @return Returns the m_Rotation.
+	 */
+	public int getRotation() {
+		return m_Rotation;
+	}
+
+	/**
+	 * Introduce el relleno.
+	 *
+	 * @param m_Fill The m_Fill to set.
+	 */
+	public void setFill(Paint m_Fill) {
+		this.m_Fill = m_Fill;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el relleno.
+	 *
+	 * @return Returns the m_Fill.
+	 */
+	public Paint getFill() {
+		return m_Fill;
+	}
+
+	/**
+	 * Introduce el Stroke.
+	 *
+	 * @param m_Stroke The m_Stroke to set.
+	 */
+	public void setStroke(Stroke m_Stroke) {
+		this.m_Stroke = m_Stroke;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve el Stroke.
+	 *
+	 * @return Returns the m_Stroke.
+	 */
+	public Stroke getStroke() {
+		return m_Stroke;
+	}
+
+	/**
+	 * Introduce si el tama�o del simbolo est� en pixels.
+	 *
+	 * @param m_bUseSize The m_bUseSize to set.
+	 */
+	public void setSizeInPixels(boolean m_bUseSize) {
+		this.m_bUseSize = m_bUseSize;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve si el tama�o del s�mbolo est� en pixels.
+	 *
+	 * @return Returns the m_bUseSize.
+	 */
+	public boolean isSizeInPixels() {
+		return m_bUseSize;
+	}
+
+	/**
+	 * Introduce la descripci�n del s�mbolo.
+	 *
+	 * @param m_Descrip The m_Descrip to set.
+	 */
+	public void setDescription(String m_Descrip) {
+		this.m_Descrip = m_Descrip;
+	}
+
+	/**
+	 * Devuelve la descripci�n del s�mbolo.
+	 *
+	 * @return Returns the m_Descrip.
+	 */
+	public String getDescription() {
+		return m_Descrip != null ? m_Descrip : "Default";
+	}
+
+	/**
+	 * Introduce la alineaci�n en vertical.
+	 *
+	 * @param m_AlingVert The m_AlingVert to set.
+	 */
+	public void setAlingVert(int m_AlingVert) {
+		this.m_AlingVert = m_AlingVert;
+
+		//		 calculateRgb();
+	}
+
+	/**
+	 * Devuelve la alineaci�n en vertical.
+	 *
+	 * @return Returns the m_AlingVert.
+	 */
+	public int getAlingVert() {
+		return m_AlingVert;
+	}
+
+	/**
+	 * Introduce la alineaci�n en horizontal.
+	 *
+	 * @param m_AlingHoriz The m_AlingHoriz to set.
+	 */
+	public void setAlingHoriz(int m_AlingHoriz) {
+		this.m_AlingHoriz = m_AlingHoriz;
+
+		// calculateRgb();
+	}
+
+	/**
+	 * Devuelve la alineaci�n en horizontal.
+	 *
+	 * @return Returns the m_AlingHoriz.
+	 */
+	public int getAlingHoriz() {
+		return m_AlingHoriz;
+	}
+
+
+	/**
+	 * Introduce el tama�o de la fuente.
+	 *
+	 * @param m_FontSize The m_FontSize to set.
+	 */
+	public void setFontSize(float m_FontSize) {
+		this.m_FontSize = m_FontSize;
+	}
+
+	/**
+	 * Devuelve el tama�o de la fuente.
+	 *
+	 * @return Returns the m_FontSize.
+	 */
+	public float getFontSize() {
+		return m_FontSize;
+	}
+    public URI getIconURI() {
+        return m_IconURI;
+    }
+    public void setIconURI(URI iconURI) {
+        m_IconURI = iconURI;
+        ImageIcon prov;
+        try {
+            prov = new ImageIcon(iconURI.toURL());
+            m_Icon = prov.getImage();
+        } catch (MalformedURLException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+   	/**
+	 * @return Returns the imgObserver.
+	 */
+	public ImageObserver getImgObserver() {
+		return imgObserver;
+	}
+
+	/**
+	 * @param imgObserver The imgObserver to set.
+	 */
+	public void setImgObserver(ImageObserver imgObserver) {
+		this.imgObserver = imgObserver;
+	}
+
+	public ISymbol getSymbolForSelection() {
+		return getSymbolForSelection(this);
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+		FGraphicUtilities.DrawShape(g, affineTransform, geom, this);
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances, ViewPort viewPort, int dpi) {
+		// Nothing to do
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return true;
+	}
+
+	public void drawInsideRectangle(Graphics2D g2, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		try {
+			FGraphicUtilities.DrawSymbol(g2, scaleInstance, r, this);
+		} catch (CreateGeometryException e) {
+			
+			throw new SymbolDrawingException(getSymbolType());
+		}
+	}
+
+	public String getClassName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry shape, PrintAttributes properties){
+		int strokeValue=0;
+		BasicStroke stroke=(BasicStroke)this.getStroke();
+		if (stroke != null && stroke.getLineWidth()!=0) {
+			strokeValue=(int)stroke.getLineWidth();
+			double d = strokeValue;
+			
+			int pq = properties.getPrintQuality();
+			if (pq == PrintAttributes.PRINT_QUALITY_NORMAL){
+				d *= (double) 300/72;
+			}else if (pq == PrintAttributes.PRINT_QUALITY_HIGH){
+				d *= (double) 600/72;
+			}else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT){
+				// d *= 72/72; // (which is the same than doing nothing)
+			}
+			this.setStroke(new BasicStroke((int)d,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
+		}
+		draw(g, at, shape, null, null);
+		this.setStroke(new BasicStroke(strokeValue));
+	}
+	
+	public boolean isOneDotOrPixel(Geometry geom,
+			double[] positionOfDotOrPixel, ViewPort viewPort, int dpi) {
+		int type = geom.getType();
+		switch (type) {
+		case Geometry.TYPES.NULL:
+		case Geometry.TYPES.POINT:
+		case Geometry.TYPES.MULTIPOINT:
+			return false;
+		default:
+			org.gvsig.fmap.geom.primitive.Envelope geomBounds = geom
+			.getEnvelope();
+
+			double dist1Pixel = viewPort.getDist1pixel();
+
+			float[] distances = new float[2];
+			this.getPixExtentPlus(geom, distances, viewPort, dpi);
+
+			boolean onePoint =
+					(geomBounds.getLength(0) + distances[0] <= dist1Pixel && geomBounds
+					.getLength(1)
+					+ distances[1] <= dist1Pixel);
+
+			if (onePoint) {
+				Rectangle bounds = geom.getShape().getBounds();
+				positionOfDotOrPixel[0] = bounds.x;
+				positionOfDotOrPixel[1] = bounds.y;
+			}
+			return onePoint;
+		}
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		// TODO Auto-generated method stub
+		return super.clone();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FGraphicUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FGraphicUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FGraphicUtilities.java	(revision 42196)
@@ -0,0 +1,896 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 28-abr-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Clase con m�todos est�ticos para dibujar sobre el Graphics que se les pase
+ * como par�metro.
+ *
+ * Esta clase deber�a ser privada. Las clases que la usan son GraphicLayer
+ * y AnnotationStrategy, pero hay que revisarlas para que no sea necesario.
+ * Lo m�s urgente ser�a lo del dibujado de textos, para que sea
+ * Hay que quitar las dependecias de FSymbol, y trabajar SIEMPRE con ISymbol.
+ * Recordar: Que sea ISymbol el que renderiza.
+ * extensible el s�mbolo a usar. NOTA: Ver tambi�n comentario en ISymbol
+ *
+ * @author fjp
+ * @deprecated
+ */
+public class FGraphicUtilities {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(FGraphicUtilities.class);
+
+	/**
+	 * Dibuja el s�mbolo que se le pasa como par�metro en el Graphics.
+	 *
+	 * @param g2 Graphics2D sobre el que dibujar.
+	 * @param mT2 Matriz de transformaci�n.
+	 * @param r Rect�ngulo.
+	 * @param symbol S�mbolo a dibujar.
+	 * @throws CreateGeometryException 
+	 */
+	public static void DrawSymbol(Graphics2D g2, AffineTransform mT2,
+		Rectangle r, FSymbol symbol) throws CreateGeometryException {
+		Geometry geom;
+
+		AffineTransform mT = new AffineTransform();
+		mT.setToIdentity();
+
+		Rectangle r2 = new Rectangle(r.x + 2 + (r.width / 3), r.y, r.width / 3,
+				r.height);
+		Rectangle r3 = new Rectangle(r.x + 2 + ((2 * r.width) / 3), r.y,
+				r.width / 3, r.height);
+
+		// g2.clearRect(r.x, r.y, r.width, r.height);
+		// System.out.println("r = " + r.toString() + " Color preview:" + symbol.m_Color.toString());
+		// System.out.println("symbol.m_symbolType= "+symbol.m_symbolType);
+		switch (symbol.getSymbolType()) {
+			case Geometry.TYPES.POINT:
+				geom = geomManager.createPoint(r.x + (r.width / 2), r.y + (r.height / 2), SUBTYPES.GEOM2D);
+
+				//  Para no tener que clonarlo si viene en unidades de mapa
+				boolean bAux2 = symbol.isSizeInPixels();
+				int alturaMetros = symbol.getSize(); // Nota: Cambiar m_Size a float
+
+				if (!bAux2) {
+					symbol.setSizeInPixels(true);
+					symbol.setSize(8); // tama�o fijo
+				}
+
+				symbol.draw(g2, mT, geom, null, null);
+				// FGraphicUtilities.DrawShape(g2, mT, shp, symbol);
+
+
+				if (!bAux2) {
+					symbol.setSize(alturaMetros);
+					symbol.setSizeInPixels(bAux2);
+				}
+
+				if (symbol.getFont() != null) {
+					// Para no tener que clonarlo si viene en unidades de mapa
+					boolean bAux = symbol.isFontSizeInPixels();
+					symbol.setFontSizeInPixels(true);
+					FGraphicUtilities.DrawLabel(g2, mT, geom, symbol,
+						new FLabel("Abcd"));
+					symbol.setFontSizeInPixels(bAux);
+				}
+
+				break;
+
+			case Geometry.TYPES.CURVE:
+
+				Rectangle rect = mT2.createTransformedShape(r).getBounds();
+				GeneralPathX line = new GeneralPathX();
+				line.moveTo(rect.x, rect.y + (rect.height / 2));
+
+				// line.lineTo(rect.x + rect.width/3, rect.y + rect.height);
+				// line.lineTo(rect.x + 2*rect.width/3, rect.y);
+				// line.lineTo(rect.x + rect.width, rect.y + rect.height/2);
+				line.curveTo(rect.x + (rect.width / 3),
+					rect.y + (2 * rect.height),
+					rect.x + ((2 * rect.width) / 3), rect.y - rect.height,
+					rect.x + rect.width, rect.y + (rect.height / 2));
+
+				geom = geomManager.createSurface(line, SUBTYPES.GEOM2D);
+				symbol.draw(g2, mT, geom, null, null);
+				// FGraphicUtilities.DrawShape(g2, mT, shp, symbol);
+
+				break;
+
+			case Geometry.TYPES.SURFACE:
+
+				GeneralPathX rectAux = new GeneralPathX(r.getPathIterator(null));
+				rectAux.transform(mT2);
+				geom = geomManager.createSurface(rectAux, SUBTYPES.GEOM2D);
+
+				// System.out.println("rect = "+rectAux.getBounds());
+				symbol.draw(g2, mT, geom, null, null);
+				// FGraphicUtilities.DrawShape(g2, mT, shp, symbol);
+
+				break;
+
+			case Geometry.TYPES.GEOMETRY:
+
+				// Pol�gono
+				r.setSize(r.width / 3, r.height);
+
+				GeneralPathX rectAux2 = new GeneralPathX(r.getPathIterator(null));
+				rectAux2.transform(mT2);
+				geom = geomManager.createSurface(rectAux2, SUBTYPES.GEOM2D);
+				symbol.draw(g2, mT, geom, null, null);
+				// FGraphicUtilities.DrawShape(g2, mT, shp, symbol);
+
+				// L�nea
+				rect = mT2.createTransformedShape(r2).getBounds();
+				line = new GeneralPathX();
+				line.moveTo(rect.x, rect.y + (rect.height / 2));
+
+				line.curveTo(rect.x + (rect.width / 3),
+					rect.y + (2 * rect.height),
+					rect.x + ((2 * rect.width) / 3), rect.y - rect.height,
+					rect.x + rect.width, rect.y + (rect.height / 2));
+
+				geom = geomManager.createCurve(line, SUBTYPES.GEOM2D);
+				symbol.draw(g2, mT, geom, null, null);
+				// FGraphicUtilities.DrawShape(g2, mT, shp, symbol);
+
+				// Punto:
+				geom = geomManager.createPoint(r3.x + (r3.width / 2), r3.y +
+						(r3.height / 2), SUBTYPES.GEOM2D);
+
+				//  Para no tener que clonarlo si viene en unidades de mapa
+				bAux2 = symbol.isSizeInPixels();
+				alturaMetros = symbol.getSize(); // Nota: Cambiar m_Size a float
+
+				if (!bAux2) {
+					symbol.setSizeInPixels(true);
+					symbol.setSize(4); // tama�o fijo
+				}
+				symbol.draw(g2, mT, geom, null, null);
+				// FGraphicUtilities.DrawShape(g2, mT, shp, symbol);
+
+				if (!bAux2) {
+					symbol.setSize(alturaMetros);
+					symbol.setSizeInPixels(bAux2);
+				}
+
+				if (symbol.getFont() != null) {
+					// Para no tener que clonarlo si viene en unidades de mapa
+					boolean bAux = symbol.isFontSizeInPixels();
+					symbol.setFontSizeInPixels(true);
+					FGraphicUtilities.DrawLabel(g2, mT, geom, symbol,
+						new FLabel("Abcd"));
+					symbol.setFontSizeInPixels(bAux);
+				}
+
+				break;
+		}
+	}
+
+	/**
+	 * Dibuja el shape que se pasa como par�metro con las caracter�sticas que
+	 * aporta el s�mbolo sobre el Graphics2D.
+	 *
+	 * @param g2 Graphics2D sobre el que dibujar.
+	 * @param mT Matriz de transformaci�n.
+	 * @param shp FShape a dibujar.
+	 * @param theSymbol S�mbolo.
+	 * @deprecated
+	 */
+	public static void DrawShape(Graphics2D g2, AffineTransform mT, Geometry geom,
+		FSymbol theSymbol) {
+		// Hacemos la transformaci�n del shape aqu� dentro... por ahora.
+		if (geom == null || theSymbol == null || (!theSymbol.isShapeVisible())) {
+			return;
+		}
+        g2.setColor(theSymbol.getColor());
+
+		/* if (shp instanceof FPolygon2D)
+		   {
+		           System.out.println("Entra pol�gono");
+		   } */
+		int type=geom.getType();
+		/* if (shp.getShapeType()>=FShape.Z){
+			type=shp.getShapeType()-FShape.Z;
+		} */
+		switch (type) {
+			case Geometry.TYPES.POINT: //Tipo punto            
+				drawSymbolPoint(g2, mT, (org.gvsig.fmap.geom.primitive.Point) geom, theSymbol);
+
+				break;
+
+			case Geometry.TYPES.CURVE:           
+			case Geometry.TYPES.ARC:			
+				// Shape theShp = mT.createTransformedShape(shp.m_Polyline);
+				// g2.setColor(theSymbol.m_Color);
+				if (theSymbol.getStroke() != null) {
+					g2.setStroke(theSymbol.getStroke());
+				}
+
+				g2.draw(geom.getShape());
+
+				break;
+
+			case Geometry.TYPES.SURFACE:
+       		case Geometry.TYPES.ELLIPSE:
+		    case Geometry.TYPES.CIRCLE:
+		
+			    if (theSymbol.getFill() != null)
+			        g2.setPaint(theSymbol.getFill());
+
+			    if (theSymbol.getColor() != null)
+				    if (theSymbol.getStyle() != FSymbol.SYMBOL_STYLE_DGNSPECIAL) {
+				        g2.fill(geom.getShape());
+				}
+
+				if (theSymbol.isOutlined()) {
+					g2.setColor(theSymbol.getOutlineColor());
+
+					if (theSymbol.getStroke() != null) {
+						g2.setStroke(theSymbol.getStroke());
+					}
+
+					g2.draw(geom.getShape());
+				}
+
+				break;
+
+		}
+	}
+//	public static double toMapDistance(AffineTransform at,int d) {
+//		double dist = d / at.getScaleX();
+//
+//		return dist;
+//	}
+//	public static int fromMapDistance(AffineTransform at,double d) {
+//		Point2D.Double pWorld = new Point2D.Double(1, 1);
+//		Point2D.Double pScreen = new Point2D.Double();
+//
+//		try {
+//			at.deltaTransform(pWorld, pScreen);
+//		} catch (Exception e) {
+//			System.err.print(e.getMessage());
+//		}
+//
+//		return (int) (d * pScreen.x);
+//	}
+	/**
+	 * Dibuja el FLabel que se pasa como par�metro sobre el Graphics2D.
+	 *
+	 * @param g2 Graphics2D sobre el que dibujar.
+	 * @param mT Matriz de transformaci�n.
+	 * @param shp FShape a dibujar.
+	 * @param theSymbol S�mbolo para aplicar.
+	 * @param theLabel FLabel que contiene el texto que se debe dibujar.
+	 */
+	public static void DrawLabel(Graphics2D g2, AffineTransform mT, Geometry geom,
+		FSymbol theSymbol, FLabel theLabel) {
+		float angle;
+		float x;
+		float y;
+		Point2D pAux = null;
+
+		// USAR TEXTLAYOUT SI QUEREMOS PERMITIR SELECCIONAR UN TEXTO
+		// Y/O EDITARLO "IN SITU"
+
+		/* if (m_labelValues[numReg].length() > 0)
+		   {
+		           TextLayout layout = new TextLayout(m_labelValues[numReg], font, frc);
+		           layout.draw(g2, x, y);
+		   } */
+		if (geom == null) {
+			return;
+		}
+
+		// Las etiquetas que pongamos a nulo ser� porque no la queremos dibujar.
+		// �til para cuando queramos eliminar duplicados.
+		if (theLabel.getString() == null) {
+			return;
+		}
+
+		FontMetrics metrics;// = g2.getFontMetrics();
+		int width;// = metrics.stringWidth(theLabel.getString());
+		int height;// = metrics.getMaxAscent();
+
+		// int height = metrics.getHeight();
+		//g2.setFont(theSymbol.getFont());
+		//g2.setColor(theSymbol.getFontColor());
+
+		// Aqu� hay que mirar m_Size y m_useSize...
+		if (!theSymbol.isFontSizeInPixels()) {
+			// Suponemos que m_Size viene en coordenadas de mundo real
+			// Esto habr� que cambiarlo. Probablemente usar Style2d de geotools en lugar
+			// de FSymbol.
+			// CAMBIO: La altura del texto la miramos en FLabel
+			// float alturaPixels = (float) (theSymbol.m_FontSize * mT.getScaleX());
+			float alturaPixels = (float) (theLabel.getHeight() * mT.getScaleX());
+
+			/* System.out.println("m_bUseSize = " + theSymbol.m_bUseSize +
+			   " Escala: " + mT.getScaleX() + " alturaPixels = " + alturaPixels); */
+			if (alturaPixels < 3) {
+				return; // No leemos nada
+			}
+
+			Font nuevaFuente = theSymbol.getFont().deriveFont(theSymbol.getFont().getStyle(),alturaPixels);
+			g2.setFont(nuevaFuente);
+			g2.setColor(theSymbol.getFontColor());
+			metrics=g2.getFontMetrics();
+			height= metrics.getMaxAscent();
+			width = metrics.stringWidth(theLabel.getString());
+		}else {
+			metrics = g2.getFontMetrics();
+			width = metrics.stringWidth(theLabel.getString());
+			height = metrics.getMaxAscent();
+			g2.setFont(theSymbol.getFont());
+			g2.setColor(theSymbol.getFontColor());
+		}
+		int type=geom.getType();
+		switch (type) {
+			case Geometry.TYPES.POINT: //Tipo punto
+				pAux = new Point2D.Double(((org.gvsig.fmap.geom.primitive.Point) geom).getX(),
+						((org.gvsig.fmap.geom.primitive.Point) geom).getY());
+				pAux = mT.transform(pAux, null);
+
+				break;
+
+			case Geometry.TYPES.CURVE:
+
+				//
+				if (theLabel.getOrig() == null) // Calculamos el punto y la orientaci�n solo la primera vez
+				 {
+					PathLength pathLen = new PathLength(geom.getShape());
+
+					// if (pathLen.lengthOfPath() < width / mT.getScaleX()) return;
+					float midDistance = pathLen.lengthOfPath() / 2;
+					pAux = pathLen.pointAtLength(midDistance);
+					angle = pathLen.angleAtLength(midDistance);
+
+					if (angle < 0) {
+						angle = angle + (float) (2 * Math.PI);
+					}
+
+					if ((angle > (Math.PI / 2)) &&
+							(angle < ((3 * Math.PI) / 2))) {
+						angle = angle - (float) Math.PI;
+					}
+
+					theLabel.setRotation(Math.toDegrees(angle));
+					theLabel.setOrig(pAux);
+				}
+
+				pAux = mT.transform(theLabel.getOrig(), null);
+
+				// pAux = theLabel.getOrig();
+				// GlyphVector theGlyphs = theSymbol.m_Font.createGlyphVector(g2.getFontRenderContext(), theLabel);
+				// Shape txtShp = TextPathLayout.layoutGlyphVector(theGlyphs, shp.m_Polyline,TextPathLayout.ALIGN_MIDDLE);
+				// g2.draw(txtShp);
+				// System.out.println("Pintando etiqueta " + theLabel );
+				break;
+
+			case Geometry.TYPES.SURFACE:
+
+				if (theLabel.getOrig() == null) // Calculamos el punto solo la primera vez
+				 {
+					
+					Point pLabel;
+					try {
+						pLabel = geom.getInteriorPoint();
+						theLabel.setRotation(0);
+						theLabel.setOrig(new Point2D.Double(
+								pLabel.getX(),
+								pLabel.getY()));
+					} catch (Exception e) {
+						logger.info("Error: Impossible to create the label. ", e);
+					}				
+				}
+
+				pAux = mT.transform(theLabel.getOrig(), null);
+
+				break;
+		}
+
+		AffineTransform ant = g2.getTransform();
+
+		x = (float) pAux.getX();
+		y = (float) pAux.getY();
+
+		AffineTransform Tx = (AffineTransform) ant.clone();
+		Tx.translate(x, y); // S3: final translation
+		Tx.rotate(theLabel.getRotation()); // S2: rotate around anchor
+		g2.setTransform(Tx);
+
+		switch (theLabel.getJustification()) {
+			case FLabel.LEFT_BOTTOM:
+				g2.drawString(theLabel.getString(), 0, 0 - 3);
+
+				break;
+
+			case FLabel.LEFT_CENTER:
+				g2.drawString(theLabel.getString(), 0, 0 - (height / 2));
+
+				break;
+
+			case FLabel.LEFT_TOP:
+				g2.drawString(theLabel.getString(), 0, 0 - height);
+
+				break;
+
+			case FLabel.CENTER_BOTTOM:
+				g2.drawString(theLabel.getString(), 0 - (width / 2), 0 - 3);
+
+				break;
+
+			case FLabel.CENTER_CENTER:
+				g2.drawString(theLabel.getString(), 0 - (width / 2),
+					0 - (height / 2));
+
+				break;
+
+			case FLabel.CENTER_TOP:
+				g2.drawString(theLabel.getString(), 0 - (width / 2), 0 -
+					height);
+
+				break;
+
+			case FLabel.RIGHT_BOTTOM:
+				g2.drawString(theLabel.getString(), 0 - width, 0 - 3);
+
+				break;
+
+			case FLabel.RIGHT_CENTER:
+				g2.drawString(theLabel.getString(), 0 - width, 0 -
+					(height / 2));
+
+				break;
+
+			case FLabel.RIGHT_TOP:
+				g2.drawString(theLabel.getString(), 0 - width, 0 - height);
+
+				break;
+		}
+
+		// Restauramos
+		g2.setTransform(ant);
+	}
+	/**
+	 * Dibuja el FLabel que se pasa como par�metro sobre el Graphics2D.
+	 *
+	 * @param g2 Graphics2D sobre el que dibujar.
+	 * @param mT Matriz de transformaci�n.
+	 * @param shp FShape a dibujar.
+	 * @param theSymbol S�mbolo para aplicar.
+	 * @param theLabel FLabel que contiene el texto que se debe dibujar.
+	 */
+	public static void DrawAnnotation(Graphics2D g2, AffineTransform at,
+		FSymbol theSymbol, FLabel theLabel,FontMetrics metrics,boolean isSelected) {
+		float x;
+		float y;
+		Point2D pAux = null;
+		// Las etiquetas que pongamos a nulo ser� porque no la queremos dibujar.
+		// �til para cuando queramos eliminar duplicados.
+		if (theLabel.getString() == null) {
+			return;
+		}
+
+//		 Aqu� hay que mirar m_Size y m_useSize...
+		if (!theSymbol.isFontSizeInPixels()) {
+			// Suponemos que m_Size viene en coordenadas de mundo real
+			// Esto habr� que cambiarlo. Probablemente usar Style2d de geotools en lugar
+			// de FSymbol.
+			// CAMBIO: La altura del texto la miramos en FLabel
+			// float alturaPixels = (float) (theSymbol.m_FontSize * mT.getScaleX());
+			float alturaPixels = (float) (theLabel.getHeight() * at.getScaleX()*FLabel.SQUARE);
+			if (alturaPixels < 3) {
+				return; // No leemos nada
+			}
+			Font nuevaFuente = theSymbol.getFont().deriveFont(theSymbol.getFont().getStyle(),alturaPixels);
+			g2.setFont(nuevaFuente);
+		}
+
+
+		if (isSelected){
+			g2.setColor(MapContext.getSelectionColor());
+		}else{
+			g2.setColor(theSymbol.getFontColor());
+		}
+		pAux = at.transform(theLabel.getOrig(), null);
+		AffineTransform ant = g2.getTransform();
+
+		x = (float) pAux.getX();
+		y = (float) pAux.getY();
+
+		AffineTransform Tx = (AffineTransform) ant.clone();
+		Tx.translate(x, y); // S3: final translation
+		Tx.rotate(theLabel.getRotation()); // S2: rotate around anchor
+		g2.setTransform(Tx);
+
+
+		String s=theLabel.getString();
+
+
+		//switch (theLabel.getJustification()) {
+
+		 //case FLabel.LEFT_BOTTOM:
+				g2.drawString(s, 0, 0 - 3);
+/*
+				break;
+
+			case FLabel.LEFT_CENTER:
+				float height = metrics.getMaxAscent();
+				g2.drawString(s, 0, 0 - (height / 2));
+
+				break;
+
+			case FLabel.LEFT_TOP:
+				height = metrics.getMaxAscent();
+				g2.drawString(s, 0, 0 - height);
+
+				break;
+
+			case FLabel.CENTER_BOTTOM:
+				float width = metrics.stringWidth(s);
+				g2.drawString(s, 0 - (width / 2), 0 - 3);
+
+				break;
+
+			case FLabel.CENTER_CENTER:
+				height = metrics.getMaxAscent();
+				width = metrics.stringWidth(s);
+				g2.drawString(s, 0 - (width / 2),
+					0 - (height / 2));
+
+				break;
+
+			case FLabel.CENTER_TOP:
+				width = metrics.stringWidth(s);
+				height = metrics.getMaxAscent();
+				g2.drawString(s, 0 - (width / 2), 0 -
+					height);
+
+				break;
+
+			case FLabel.RIGHT_BOTTOM:
+				width = metrics.stringWidth(s);
+				g2.drawString(s, 0 - width, 0 - 3);
+
+				break;
+
+			case FLabel.RIGHT_CENTER:
+				width = metrics.stringWidth(s);
+				height = metrics.getMaxAscent();
+				g2.drawString(s, 0 - width, 0 -
+					(height / 2));
+
+				break;
+
+			case FLabel.RIGHT_TOP:
+				width = metrics.stringWidth(s);
+				height = metrics.getMaxAscent();
+				g2.drawString(s, 0 - width, 0 - height);
+
+				break;
+		}
+		*/
+		///Rectangle2D borde=vp.fromMapRectangle(theLabel.getBoundBox());//theLabel.getBoundingBox();
+		///g2.setColor(Color.blue);
+		///g2.drawRect((int)borde.getX(),(int)borde.getY(),(int)borde.getWidth(),(int)borde.getHeight());
+		// Restauramos
+		g2.setTransform(ant);
+	}
+
+	/**
+	 * Dibuja un punto sobre el Graphics2D que se pasa como par�metro.
+	 *
+	 * @param g2 Graphics2D sobre el que dibujar.
+	 * @param mT MAtriz de transformaci�n.
+	 * @param pAux punto a dibujar.
+	 * @param theSymbol S�mbolo a aplicar.
+	 */
+	private static void drawSymbolPoint(Graphics2D g2, AffineTransform mT,
+		org.gvsig.fmap.geom.primitive.Point pAux, FSymbol theSymbol) {
+		int x;
+		int y;
+		x = (int) pAux.getX();
+		y = (int) pAux.getY();
+
+		/*if (x==0){
+		   x=100;
+		   }
+		   if (y==0){
+		           y=100;
+		   }
+		 */
+		Rectangle rectAux = new Rectangle();
+
+		// Aqu� hay que mirar m_Size y m_useSize...
+		float radio_simbolo;
+		radio_simbolo = theSymbol.getSize() / 2;
+		// theSymbol.setSizeInPixels(true);
+
+		if (!theSymbol.isSizeInPixels()) {
+			// Suponemos que m_Size viene en coordenadas de mundo real
+			radio_simbolo = (float) (theSymbol.getSize() * mT.getScaleX());
+
+			/* System.out.println("m_bUseSize = " + theSymbol.m_bUseSize +
+			   " Escala: " + mT.getScaleX() + " alturaPixels = " + alturaPixels); */
+			// if (radio_simbolo < 1) return; // No dibujamos nada
+			rectAux.setRect(x - radio_simbolo, y - radio_simbolo,
+				radio_simbolo * 2, radio_simbolo * 2);
+		} else {
+			// m_Size viene en pixels
+			rectAux.setRect(x - radio_simbolo, y - radio_simbolo,
+				theSymbol.getSize(), theSymbol.getSize());
+		}
+
+		// 	continue; //radioSimbolo_en_pixels = 3;
+		if (theSymbol.getFill() != null) {
+			g2.setPaint(theSymbol.getFill());
+		}
+
+		if (theSymbol.getStroke() != null) {
+			g2.setStroke(theSymbol.getStroke());
+		}
+
+		if (radio_simbolo < 2) {
+			g2.fillRect(rectAux.x, rectAux.y, rectAux.width, rectAux.height);
+
+			return;
+		}
+
+		switch (theSymbol.getStyle()) {
+			case FSymbol.SYMBOL_STYLE_MARKER_CIRCLE: // Circulito
+
+				if (theSymbol.getColor() != null) {
+					g2.fillOval(rectAux.x, rectAux.y, rectAux.width,
+						rectAux.height);
+				}
+
+				if (theSymbol.isOutlined()) {
+					g2.setColor(theSymbol.getOutlineColor());
+					g2.drawOval(rectAux.x, rectAux.y, rectAux.width,
+						rectAux.height);
+				}
+
+				break;
+
+			case FSymbol.SYMBOL_STYLE_MARKER_SQUARE: // Cuadrado
+			case FSymbol.SYMBOL_STYLE_FILL_SOLID:
+				g2.fillRect(rectAux.x, rectAux.y, rectAux.width, rectAux.height);
+
+				if (theSymbol.isOutlined()) {
+					g2.setColor(theSymbol.getOutlineColor());
+					g2.drawRect(rectAux.x, rectAux.y, rectAux.width,
+						rectAux.height);
+				}
+
+				break;
+
+			case FSymbol.SYMBOL_STYLE_MARKER_TRIANGLE: // Triangulo
+
+				// y = r*sin30, x = r*cos30
+				GeneralPathX genPath = new GeneralPathX();
+				genPath.moveTo(x - (int) (radio_simbolo * 0.866),
+					y + (int) (radio_simbolo * 0.5));
+				genPath.lineTo(x + (int) (radio_simbolo * 0.866),
+					y + (int) (radio_simbolo * 0.5));
+				genPath.lineTo(x, y - (float) radio_simbolo);
+				genPath.closePath();
+
+				g2.fill(genPath);
+
+				break;
+
+			case FSymbol.SYMBOL_STYLE_MARKER_CROSS: // cruz
+			case FSymbol.SYMBOL_STYLE_DGNSPECIAL: // Cruz
+
+				GeneralPathX genPathCruz = new GeneralPathX();
+				genPathCruz.moveTo(x, y - radio_simbolo);
+				genPathCruz.lineTo(x, y + radio_simbolo);
+				genPathCruz.moveTo(x - radio_simbolo, y);
+				genPathCruz.lineTo(x + radio_simbolo, y);
+				g2.draw(genPathCruz);
+
+				break;
+
+			case 34: // TrueType marker
+
+			/* lf.lfHeight = -radioSimbolo_en_pixels;
+			   angulo = pSimbolo->m_Rotation;  // En radianes, de -pi a pi
+			   angulo = -180.0 * angulo / PI;
+
+			   lf.lfEscapement = (long) angulo*10;
+			   lf.lfOrientation = (long) angulo*10;
+
+			   fuente.CreateFontIndirect(&lf);
+			   pOldFont = pDC->SelectObject(&fuente);
+
+			   pDC->TextOut(pAPI.x, pAPI.y+radioSimbolo_en_pixels/2,elChar,1);
+
+			   pDC->SelectObject(pOldFont);
+			   fuente.DeleteObject();
+
+			   break; */
+			case FSymbol.SYMBOL_STYLE_MARKER_IMAGEN: // Icono
+			 {
+				if (theSymbol.getIcon() != null) {
+					float w;
+					float h;
+
+					if (!theSymbol.isSizeInPixels()) {
+						// Suponemos que m_Size viene en coordenadas de mundo real
+						// Por ejemplo, nos valemos del ancho para fijar la escala
+						w = (float) (theSymbol.getSize() * mT.getScaleX());
+						h = (theSymbol.getIcon().getHeight(null) * w) / theSymbol.getIcon()
+																				 .getWidth(null);
+
+						rectAux.setRect(x - w, y - h, w * 2, h * 2);
+					} else {
+						// m_Size viene en pixels
+						w = theSymbol.getSize();
+						h = (theSymbol.getIcon().getHeight(null) * w) / theSymbol.getIcon()
+																				 .getWidth(null);
+						rectAux.setRect(x - w/2, y - h/2, w, h);
+					}
+					/* if (theSymbol.getImgObserver() != null)
+					{
+						g2.setColor(Color.WHITE);
+						g2.fillRect(rectAux.x, rectAux.y, rectAux.width, rectAux.height);
+					} */
+					g2.drawImage(theSymbol.getIcon(), rectAux.x, rectAux.y,
+						rectAux.width, rectAux.height, theSymbol.getImgObserver());
+				} else {
+					String strImg = "Image"; // Utilities.getMessage(FGraphicUtilities.class,"imagen");
+					FontMetrics metrics = g2.getFontMetrics();
+					int width = metrics.stringWidth(strImg);
+					int height = metrics.getMaxAscent();
+
+					g2.drawString(strImg, x - (width / 2), y - 2 +
+						(height / 2));
+				}
+
+				break;
+			}
+
+			/* DrawIconEx(pDC->m_hDC, pAPI.x-(pSimbolo->m_widthIco/2), pAPI.y-(pSimbolo->m_heightIco/2),
+			   pSimbolo->m_hIcon, pSimbolo->m_widthIco, pSimbolo->m_heightIco, 0 , NULL, DI_NORMAL);
+			   break; */
+// TODO This case has been commented: check it!!!
+//			case Geometry.TYPES.POINT|Geometry.TYPES.Z: // Circulito
+//
+//				if (theSymbol.getColor() != null) {
+//					g2.fillOval(rectAux.x, rectAux.y, rectAux.width,
+//						rectAux.height);
+//				}
+//
+//				if (theSymbol.isOutlined()) {
+//					g2.setColor(theSymbol.getOutlineColor());
+//					g2.drawOval(rectAux.x, rectAux.y, rectAux.width,
+//						rectAux.height);
+//				}
+//
+//				break;
+		} // del switch estilo
+	}
+	public static void DrawHandlers(Graphics2D g, AffineTransform at,
+			Handler[] handlers,ISymbol symbol) {
+
+			for (int i = 0; i < handlers.length; i++) {
+				Point2D point = handlers[i].getPoint();
+				at.transform(point, point);
+				g.setColor(((IFillSymbol)symbol).getFillColor());
+				g.fillRect((int) (point.getX() - 3), (int) (point.getY() - 3), 7, 7);
+				g.setColor(((ILineSymbol)symbol).getColor());
+				g.drawRect((int) (point.getX() - 5), (int) (point.getY() - 5), 10, 10);
+				g.drawString( "" + i, (int) (point.getX() - 5), (int) (point.getY() - 5));
+			}
+		}
+
+	public static void DrawVertex(Graphics2D g, AffineTransform at, Handler handlers) {
+		//for (int i = 0; i < handlers.length; i++) {
+			Point2D point = handlers.getPoint();
+			at.transform(point, point);
+			g.setColor(Color.black);
+			g.drawLine((int)point.getX()-2,(int)point.getY()-10,(int)point.getX()-2,(int)point.getY()+10);
+			g.drawLine((int)point.getX()+2,(int)point.getY()-10,(int)point.getX()+2,(int)point.getY()+10);
+			g.drawLine((int)point.getX()-10,(int)point.getY()-2,(int)point.getX()+10,(int)point.getY()-2);
+			g.drawLine((int)point.getX()-10,(int)point.getY()+2,(int)point.getX()+10,(int)point.getY()+2);
+			g.setColor(Color.red);
+			g.drawLine((int)point.getX()-1,(int)point.getY()-10,(int)point.getX()-1,(int)point.getY()+10);
+			g.drawLine((int)point.getX()+1,(int)point.getY()-10,(int)point.getX()+1,(int)point.getY()+10);
+			g.drawLine((int)point.getX()-10,(int)point.getY()-1,(int)point.getX()+10,(int)point.getY()-1);
+			g.drawLine((int)point.getX()-10,(int)point.getY()+1,(int)point.getX()+10,(int)point.getY()+1);
+
+		//}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FGraphicUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/MultiShapeSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/MultiShapeSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/MultiShapeSymbol.java	(revision 42196)
@@ -0,0 +1,682 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.IMultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ILineStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * MultiShapeSymbol class allows to create a composition of several symbols with
+ * different shapes and be treated as a single symbol.These shapes can be
+ * marker,line or fill.
+ * 
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MultiShapeSymbol implements ILineSymbol, IMarkerSymbol, IFillSymbol, IMultiShapeSymbol {
+
+	private static final Logger LOG = LoggerFactory.getLogger(MultiShapeSymbol.class); 
+
+	public static final String MULTI_SHAPE_SYMBOL_PERSISTENCE_DEFINITION_NAME = "MultiShapeSymbol";
+	
+	private static final String FIELD_MARKER = "marker";
+	private static final String FIELD_LINE = "line";
+	private static final String FIELD_FILL = "fill";
+	private static final String FIELD_DESCRIPTION = "description";
+
+	public static final String SYMBOL_NAME = "multiShape";
+	
+	private SymbolManager manager = MapContextLocator.getSymbolManager();
+	
+	private IMarkerSymbol marker;
+	private ILineSymbol line;
+	private IFillSymbol fill;
+	private IMask mask;
+	private String desc;
+	private int referenceSystem;
+	private MultiShapeSymbol symSelect;
+	
+	public MultiShapeSymbol() {
+		super();
+		marker = (IMarkerSymbol) createSymbol(IMarkerSymbol.SYMBOL_NAME);
+		line = (ILineSymbol) createSymbol(ILineSymbol.SYMBOL_NAME);
+		fill = (IFillSymbol) createSymbol(IFillSymbol.SYMBOL_NAME);
+	}
+	
+	private ISymbol createSymbol(String symbolName) {
+		return manager.createSymbol(symbolName);
+	}
+
+	public Color getLineColor() {
+		return line.getColor();
+	}
+
+	public void setLineColor(Color color) {
+		line.setLineColor(color);
+	}
+
+	public ILineStyle getLineStyle() {
+		return line.getLineStyle();
+	}
+
+	public void setLineStyle(ILineStyle lineStyle) {
+		line.setLineStyle(lineStyle);
+	}
+
+	public void setLineWidth(double width) {
+		line.setLineWidth(width);
+	}
+
+	public double getLineWidth() {
+		return line.getLineWidth();
+	}
+
+	public int getAlpha() {
+		return line.getAlpha();
+	}
+
+	public void setAlpha(int outlineAlpha) {
+		line.setAlpha(outlineAlpha);
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (symSelect == null) {
+			symSelect = new MultiShapeSymbol();
+		}
+
+		if (marker!=null){
+			symSelect.setMarkerSymbol((IMarkerSymbol) marker.getSymbolForSelection());
+		}
+
+		if (line!=null){
+			symSelect.setLineSymbol((ILineSymbol) line.getSymbolForSelection());
+		}
+
+		if (fill!=null ){
+			symSelect.setFillSymbol((IFillSymbol) fill.getSymbolForSelection());
+		}
+
+		return symSelect;
+
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+	    GeometryType geometryType = geom.getGeometryType();
+	    if (geometryType.isTypeOf(Geometry.TYPES.POINT)){
+	        if (marker != null) {
+	            marker.draw(g, affineTransform, geom, feature, cancel);
+	        }
+	    }else if (geometryType.isTypeOf(Geometry.TYPES.CURVE)){
+	        if (line != null) {
+	            line.draw(g, affineTransform, geom, feature, cancel);
+	        }
+	    }else if (geometryType.isTypeOf(Geometry.TYPES.SURFACE)){
+	        if (fill != null) {
+	            fill.draw(g, affineTransform, geom, feature, cancel);
+	        }			
+	    }else if (geometryType.isTypeOf(Geometry.TYPES.AGGREGATE)){
+	        Aggregate aggregate = (Aggregate)geom;
+	        for (int i=0 ; i<aggregate.getPrimitivesNumber() ; i++){
+	            draw(g, affineTransform, aggregate.getPrimitiveAt(i), feature, cancel);
+	        }
+	    }
+	}
+	
+	public boolean isOneDotOrPixel(Geometry geom,
+			double[] positionOfDotOrPixel, ViewPort viewPort, int dpi) {
+		switch (geom.getType()) {
+		case Geometry.TYPES.POINT: //Tipo punto
+           	if (marker != null) {
+				return marker.isOneDotOrPixel(geom, positionOfDotOrPixel, viewPort, dpi);
+			}
+			break;
+		case Geometry.TYPES.CURVE:
+		case Geometry.TYPES.ARC:
+		case Geometry.TYPES.SPLINE:
+		if (line != null) {
+				return line.isOneDotOrPixel(geom, positionOfDotOrPixel, viewPort, dpi);
+			}
+			break;
+
+		case Geometry.TYPES.SURFACE:
+        case Geometry.TYPES.ELLIPSE:
+		case Geometry.TYPES.CIRCLE:
+			if (fill != null) {
+				return fill.isOneDotOrPixel(geom, positionOfDotOrPixel, viewPort, dpi);
+			}
+			break;
+		}
+		if (!geom.isSimple()){
+			Aggregate aggregate = (Aggregate)geom;			
+			for (int i=0 ; i<aggregate.getPrimitivesNumber() ; i++){
+				if (!isOneDotOrPixel(aggregate.getPrimitiveAt(i), positionOfDotOrPixel, viewPort, dpi)){
+					return false;
+				}
+			}
+			return true;
+		}
+		return true;
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		// TODO Implement it
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public int getOnePointRgb() {
+		// will return a mixture of all symbol's getOnePointRgb() value
+
+		int rMarker = 0;
+		int gMarker = 0;
+		int bMarker = 0;
+		int aMarker = 0;
+
+		if (marker!=null && marker.getColor() != null) {
+			rMarker = marker.getColor().getRed();
+			gMarker = marker.getColor().getGreen();
+			bMarker = marker.getColor().getBlue();
+			aMarker = marker.getColor().getAlpha();
+		}
+
+		int rLine = 0;
+		int gLine = 0;
+		int bLine = 0;
+		int aLine = 0;
+
+		if (line != null  && line.getColor() != null) {
+			rLine = line.getColor().getRed();
+			gLine = line.getColor().getGreen();
+			bLine = line.getColor().getBlue();
+			aLine = line.getColor().getAlpha();
+		}
+
+		int rFill = 0;
+		int gFill = 0;
+		int bFill = 0;
+		int aFill = 0;
+
+		if (fill != null ) {
+			Color colorOfFill = null;
+			if (fill.getOutline()!=null) {
+				colorOfFill = fill.getOutline().getColor();
+			} else if (fill.getFillColor()!=null) {
+				colorOfFill = fill.getFillColor();
+			}
+			if (colorOfFill != null) {
+				rFill = colorOfFill.getRed();
+				gFill = colorOfFill.getGreen();
+				bFill = colorOfFill.getBlue();
+				aFill = colorOfFill.getAlpha();
+
+			}
+		}
+
+		int red = (rMarker + rLine + rFill) / 3;
+		int green = (gMarker + gLine + gFill) / 3;
+		int blue = (bMarker + bLine + bFill) / 3;
+		int alpha = (aMarker + aLine + aFill) / 3;
+
+		return (alpha) << 24 + (red << 16) + (green << 8) + blue;
+	}
+
+	public String getDescription() {
+		return desc;
+	}
+
+	public boolean isShapeVisible() {
+		if (marker!=null) {
+			return marker.isShapeVisible();
+		}
+
+		if (line != null) {
+			return line.isShapeVisible();
+		}
+
+		if (fill != null) {
+			fill.isShapeVisible();
+		}
+
+		return false;
+	}
+
+	public void setDescription(String desc) {
+		this.desc = desc ;
+	}
+
+	public int getSymbolType() {
+		return Geometry.TYPES.GEOMETRY;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		// suitable for everything (why else does it exist?)
+		return true;
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		double myWidth =  (r.getWidth()/3);
+
+		Rectangle rect = new Rectangle(0, 0, (int) myWidth, r.height);
+
+		if (marker != null) {
+			g.translate(r.x, r.y);
+			marker.drawInsideRectangle(g, scaleInstance, rect, properties);
+			g.translate(-(r.x), -(r.y));
+		}
+
+		if (line != null) {
+			g.translate(r.x+myWidth, r.y);
+			line.drawInsideRectangle(g, scaleInstance, rect, properties);
+			g.translate(-(r.x+myWidth), -(r.y));
+		}
+
+		if (fill != null) {
+			g.translate(r.x+myWidth+myWidth, r.y);
+			fill.drawInsideRectangle(g, scaleInstance, rect, properties);
+			g.translate(-(r.x+myWidth+myWidth), -(r.y));
+
+		}
+	}
+
+//	public String getClassName() {
+//		return getClass().getName();
+//	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		switch (geom.getType()) {
+		case Geometry.TYPES.POINT: //Tipo punto
+           	if (marker != null) {
+				marker.print(g, at, geom, properties);
+			}
+			break;
+		case Geometry.TYPES.CURVE:
+		case Geometry.TYPES.ARC:
+			if (line != null) {
+				line.print(g, at, geom, properties);
+			}
+			break;
+
+		case Geometry.TYPES.SURFACE:
+		case Geometry.TYPES.ELLIPSE:
+        case Geometry.TYPES.CIRCLE:
+			if (fill != null) {
+				fill.print(g, at, geom, properties);
+			}
+			break;
+		}
+	}
+
+	public double getRotation() {
+		if (marker != null) {
+			return marker.getRotation();
+		}
+		return 0;
+	}
+
+	public void setRotation(double rotation) {
+		if (marker != null) {
+			marker.setRotation(rotation);
+		}
+	}
+
+	public Point2D getOffset() {
+		if (marker != null) {
+			return marker.getOffset();
+		}
+		return new Point2D.Double();
+	}
+
+	public void setOffset(Point2D offset) {
+		if (marker != null) {
+			marker.setOffset(offset);
+		}
+	}
+
+	public double getSize() {
+		if (marker != null) {
+			return marker.getSize();
+		}
+		return 0;
+	}
+
+	public void setSize(double size) {
+		if (marker != null) {
+			marker.setSize(size);
+		}
+
+	}
+
+	public Color getColor() {
+		if (marker != null) {
+			return marker.getColor();
+		}
+		return null;
+	}
+
+	public void setColor(Color color) {
+		if (marker != null) {
+			marker.setColor(color);
+		}
+	}
+
+	public void setFillColor(Color color) {
+		if (fill != null) {
+			fill.setFillColor(color);
+		}
+	}
+
+	public void setOutline(ILineSymbol outline) {
+		if (fill != null) {
+			fill.setOutline(outline);
+		}
+	}
+
+	public Color getFillColor() {
+		if (fill != null) {
+			return fill.getFillColor();
+		}
+		return null;
+	}
+
+	public ILineSymbol getOutline() {
+		if (fill != null) {
+			return fill.getOutline();
+		}
+		return null;
+	}
+
+	public int getFillAlpha() {
+		if (fill != null) {
+			return fill.getFillAlpha();
+		}
+		return 255;
+	}
+
+	public IMask getMask() {
+		return mask;
+	}
+
+	public void setUnit(int unitIndex) {
+		if (marker != null) {
+			marker.setUnit(unitIndex);
+		}
+		if (line != null) {
+			line.setUnit(unitIndex);
+		}
+	}
+
+	public int getUnit() {
+		if (marker != null) {
+			return marker.getUnit();
+		}
+		if (line != null) {
+			return line.getUnit();
+		}
+		return -1;
+	}
+
+	public void setMask(IMask mask) {
+		// TODO Implement it
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public int getReferenceSystem() {
+		return this.referenceSystem;
+	}
+
+	public void setReferenceSystem(int system) {
+		this.referenceSystem = system;
+
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		switch (geom.getType()) {
+		case Geometry.TYPES.POINT: //Tipo punto
+        	if (marker != null) {
+				return marker.toCartographicSize(viewPort, dpi, geom);
+			}
+		case Geometry.TYPES.CURVE:
+		case Geometry.TYPES.ARC:
+			if (line != null) {
+				return line.toCartographicSize(viewPort, dpi, geom);
+			}
+		case Geometry.TYPES.SURFACE:
+		case Geometry.TYPES.ELLIPSE:
+		case Geometry.TYPES.CIRCLE:
+			LOG.warn("Cartographic size does not have any sense for fill symbols");
+
+		}
+		return -1;
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		switch (geom.getType()) {
+		case Geometry.TYPES.POINT: //Tipo punto
+        	if (marker != null) {
+				marker.setCartographicSize(cartographicSize, null);
+			}
+        	break;
+		case Geometry.TYPES.CURVE:
+		case Geometry.TYPES.ARC:
+			if (line != null) {
+				line.setCartographicSize(cartographicSize, null);
+			}
+        	break;
+		case Geometry.TYPES.SURFACE:
+		case Geometry.TYPES.ELLIPSE:
+	    case Geometry.TYPES.CIRCLE:
+	    	LOG.warn("Cartographic size does not have any sense for fill symbols");
+		}
+	}
+
+
+	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		switch (geom.getType()) {
+		case Geometry.TYPES.POINT: //Tipo punto
+        	return CartographicSupportToolkit.
+			getCartographicLength(marker,
+								  getSize(),
+								  viewPort,
+								  dpi);
+		case Geometry.TYPES.CURVE:
+		case Geometry.TYPES.ARC:
+			return CartographicSupportToolkit.
+			getCartographicLength(line,
+								  getSize(),
+								  viewPort,
+								  dpi);
+		case Geometry.TYPES.SURFACE:
+     	case Geometry.TYPES.ELLIPSE:
+	    case Geometry.TYPES.CIRCLE:
+	    	LOG.warn("Cartographic size does not have any sense for fill symbols");
+		}
+		return -1;
+	}
+
+	public IMarkerSymbol getMarkerSymbol() {
+		return marker;
+	}
+
+	public ILineSymbol getLineSymbol() {
+		return line;
+	}
+
+	public IFillSymbol getFillSymbol() {
+		return fill;
+	}
+
+	public void setMarkerSymbol(IMarkerSymbol markerSymbol) {
+		this.marker = markerSymbol;
+	}
+
+	public void setLineSymbol(ILineSymbol lineSymbol) {
+		this.line = lineSymbol;
+	}
+
+	public void setFillSymbol(IFillSymbol fillFillSymbol) {
+		this.fill = fillFillSymbol;
+	}
+
+	public boolean hasFill() {
+	if (fill == null) {
+		return false;
+	}
+	return fill.hasFill();
+	}
+
+	public void setHasFill(boolean hasFill) {
+		if (fill != null) {
+			fill.setHasFill(hasFill);
+//			this.hasFill = hasFill;
+		}
+	}
+
+	public boolean hasOutline() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void setHasOutline(boolean hasOutline) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		MultiShapeSymbol copy = (MultiShapeSymbol) super.clone();
+
+		// Clone inner symbols
+		if (marker != null) {
+			copy.marker = (IMarkerSymbol) marker.clone();
+		}
+		if (line != null) {
+			copy.line = (ILineSymbol) line.clone();
+		}
+		if (fill != null) {
+			copy.fill = (IFillSymbol) fill.clone();
+		}
+		
+		if (mask != null) {
+			copy.mask = (IMask) mask.clone();
+		}
+		
+		// Clone selection symbol
+		if (symSelect != null) {
+			copy.symSelect = (MultiShapeSymbol) symSelect.clone();
+		}
+		
+		return copy;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		setDescription(state.getString(FIELD_DESCRIPTION));
+		setFillSymbol((IFillSymbol) state.get(FIELD_FILL));
+		setMarkerSymbol((IMarkerSymbol) state.get(FIELD_MARKER));
+		setLineSymbol((ILineSymbol) state.get(FIELD_LINE));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_DESCRIPTION, getDescription());
+		state.set(FIELD_FILL, getFillSymbol());
+		state.set(FIELD_MARKER, getMarkerSymbol());
+		state.set(FIELD_LINE, getLineSymbol());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(MULTI_SHAPE_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						MultiShapeSymbol.class,
+						MULTI_SHAPE_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						MULTI_SHAPE_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Description
+				definition.addDynFieldString(FIELD_DESCRIPTION).setMandatory(false);
+				// Fill symbol
+				definition.addDynFieldObject(FIELD_FILL).setClassOfValue(IFillSymbol.class).setMandatory(true);
+				// Line symbol
+				definition.addDynFieldObject(FIELD_LINE).setClassOfValue(ILineSymbol.class).setMandatory(true);
+				// Marker symbol
+				definition.addDynFieldObject(FIELD_MARKER).setClassOfValue(IMarkerSymbol.class).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+	        int[] shapeTypes;
+	        SymbolManager manager = MapContextLocator.getSymbolManager();
+	        
+	        shapeTypes = new int[] { Geometry.TYPES.GEOMETRY };
+	        manager.registerSymbol(MultiShapeSymbol.SYMBOL_NAME,
+	            shapeTypes,
+	            MultiShapeSymbol.class
+	        );
+			return Boolean.TRUE;
+		}
+		
+	}
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/MultiShapeSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbolFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbolFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbolFactory.java	(revision 42196)
@@ -0,0 +1,253 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 04-may-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.TexturePaint;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.compat.CompatLocator;
+
+/**
+ * @author fjp
+ *
+ * To change the template for this generated type comment go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ * @deprecated
+ */
+public class FSymbolFactory {
+	static int w, h;
+
+	// Podr�amos pasarle tambi�n un color de fondo, y usarlo como background del
+	// graphics2D.
+	static private Graphics2D createG2(Color cRef, BufferedImage bi)
+	{
+		   Graphics2D big = bi.createGraphics();
+		   Color color=new Color(0,0,0,0);
+		   big.setBackground(color);
+		   big.clearRect(0, 0, w, h);
+		   big.setColor(new Color(cRef.getRed(),cRef.getGreen(), cRef.getBlue(),cRef.getAlpha()));
+		   big.setStroke(new BasicStroke());
+
+		   return big;
+
+	}
+
+
+	static public Paint createPatternFill(int style, Color cRef)
+	{
+		/* public final static int SYMBOL_STYLE_FILL_SOLID = 1;
+		public final static int SYMBOL_STYLE_FILL_TRANSPARENT = 2;
+		public final static int SYMBOL_STYLE_FILL_HORIZONTAL = 3;
+		public final static int SYMBOL_STYLE_FILL_VERTICAL = 4;
+		public final static int SYMBOL_STYLE_FILL_CROSS = 5;
+		public final static int SYMBOL_STYLE_FILL_UPWARD_DIAGONAL = 6;
+		public final static int SYMBOL_STYLE_FILL_DOWNWARD_DIAGONAL = 7;
+		public final static int SYMBOL_STYLE_FILL_CROSS_DIAGONAL = 8;
+		public final static int SYMBOL_STYLE_FILL_GRAYFILL = 9;
+		public final static int SYMBOL_STYLE_FILL_LIGHTGRAYFILL = 10;
+		public final static int SYMBOL_STYLE_FILL_DARKGRAYFILL = 11; */
+
+
+		w=7; h=7;
+
+		BufferedImage bi = null;
+		Graphics2D big = null;
+
+		Rectangle2D rProv = new Rectangle();
+		rProv.setFrame(0, 0,w,h);
+
+		Paint resulPatternFill = null;
+		bi= CompatLocator.getGraphicsUtils().createBufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+		big = createG2(cRef, bi);
+
+		switch (style)
+		{
+			case FSymbol.SYMBOL_STYLE_FILL_SOLID:
+			    return null;
+			case FSymbol.SYMBOL_STYLE_FILL_TRANSPARENT:
+			    return null;
+			case FSymbol.SYMBOL_STYLE_FILL_UPWARD_DIAGONAL:
+			    big.drawLine(0,0,w,h);
+				break;
+			case FSymbol.SYMBOL_STYLE_FILL_CROSS:
+				big.drawLine(w/2,0,w/2,h);
+				big.drawLine(0,h/2,w,h/2);
+				break;
+			case FSymbol.SYMBOL_STYLE_FILL_CROSS_DIAGONAL:
+				big.drawLine(0,0,w,h);
+				big.drawLine(0,h,w,0);
+				break;
+			case FSymbol.SYMBOL_STYLE_FILL_VERTICAL:
+				big.drawLine(w/2,0,w/2,h);
+				break;
+			case FSymbol.SYMBOL_STYLE_FILL_HORIZONTAL:
+				big.drawLine(0,h/2,w,h/2);
+				break;
+			case FSymbol.SYMBOL_STYLE_FILL_DOWNWARD_DIAGONAL:
+				// DOWNWARD_DIAGONAL m�s ancho
+				w=15;h=15;
+				rProv.setFrame(0, 0,w,h);
+				bi= CompatLocator.getGraphicsUtils().createBufferedImage(
+						w, h, BufferedImage.TYPE_INT_ARGB);
+				big = createG2(cRef, bi);
+				big.drawLine(-1,h,w,-1);
+				break;
+
+		}
+
+		resulPatternFill = new TexturePaint(bi,rProv);
+
+		return resulPatternFill;
+
+	}
+
+	/**
+	 * Al crear esto lo mejor ser�a mirar en un directorio y cargar todas las
+	 * imagenes que tengamos predise�adas.
+	 *
+	 * @param cRef
+	 * @return
+	 */
+//	static public Paint[] createPatternFills(Color cRef)
+//	{
+//
+//		int aux = 3;
+//
+//		w=7; h=7;
+//
+//		BufferedImage bi = null;
+//		Graphics2D big = null;
+//
+//		Rectangle2D rProv = new Rectangle();
+//		rProv.setFrame(0, 0,w,h);
+//
+//		Paint[] patternFills = new Paint[8];
+//
+//		// UPWARD_DIAGONAL
+//		bi= new Bu-f-f-eredImage(w, h, BufferedImage.TYPE_INT_ARGB);
+//		big = createG2(cRef, bi);
+//		big.drawLine(0,0,w,h);
+//		patternFills[FStyle2D.SYMBOL_STYLE_FILL_UPWARD_DIAGONAL-aux] =
+//				new TexturePaint(bi,rProv);
+//
+//		// CROSS
+//		bi= new Bu-f-f-eredImage(w, h, BufferedImage.TYPE_INT_ARGB);
+//		big = createG2(cRef, bi);
+//		big.drawLine(w/2,0,w/2,h);
+//		big.drawLine(0,h/2,w,h/2);
+//		patternFills[FConstant.SYMBOL_STYLE_FILL_CROSS-aux] =
+//				new TexturePaint(bi,rProv);
+//
+//		// CROSS
+//		bi= new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+//		big = createG2(cRef, bi);
+//		big.drawLine(0,0,w,h);
+//		big.drawLine(0,h,w,0);
+//		patternFills[FConstant.SYMBOL_STYLE_FILL_CROSS_DIAGONAL-aux] =
+//				new TexturePaint(bi,rProv);
+//
+//
+//		// VERTICAL
+//		bi= new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+//		big = createG2(cRef, bi);
+//		big.drawLine(w/2,0,w/2,h);
+//		patternFills[FConstant.SYMBOL_STYLE_FILL_VERTICAL-aux] =
+//				new TexturePaint(bi,rProv);
+//
+//		// HORIZONTAL
+//		bi= new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+//		big = createG2(cRef, bi);
+//		big.drawLine(0,h/2,w,h/2);
+//		patternFills[FConstant.SYMBOL_STYLE_FILL_HORIZONTAL-aux] =
+//				new TexturePaint(bi,rProv);
+//
+//		// DOWNWARD_DIAGONAL m�s ancho
+//		w=15;h=15;
+//		rProv.setFrame(0, 0,w,h);
+//		bi= new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+//		big = createG2(cRef, bi);
+//		// big.setColor(Color.BLUE);
+//		big.drawLine(-1,h,w,-1);
+//		// big.setColor(Color.RED);
+//		// big.drawLine(0,0,w,h);
+//		patternFills[FConstant.SYMBOL_STYLE_FILL_DOWNWARD_DIAGONAL-aux] =
+//				new TexturePaint(bi,rProv);
+//		int trans=((TexturePaint)patternFills[FConstant.SYMBOL_STYLE_FILL_DOWNWARD_DIAGONAL-aux]).getTransparency();
+//
+//		return patternFills;
+//	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FSymbolFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FLabel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FLabel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FLabel.java	(revision 42196)
@@ -0,0 +1,453 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 13-jul-2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.utils.XMLEntity;
+
+/**
+ * Se utiliza para etiquetar. Las capas vectoriales tienen un arrayList
+ * (m_labels) de FLabel, un FLabel por cada registro.
+ *
+ * @author FJP
+ * @deprecated
+ */
+public class FLabel implements Cloneable {
+    
+    private static final Logger logger = LoggerFactory.getLogger(FLabel.class);
+
+    
+	public final static byte LEFT_TOP = 0;
+	public final static byte LEFT_CENTER = 1;
+	public final static byte LEFT_BOTTOM = 2;
+	public final static byte CENTER_TOP = 6;
+	public final static byte CENTER_CENTER = 7;
+	public final static byte CENTER_BOTTOM = 8;
+	public final static byte RIGHT_TOP = 12;
+	public final static byte RIGHT_CENTER = 13;
+	public final static byte RIGHT_BOTTOM = 14;
+	private String m_Str = null;
+	private Point2D m_Orig = null;
+	private double m_Height;
+	public static final double SQUARE = Math.sqrt(2.0);
+	/**
+	 * <code>m_rotation</code> en grados, NO en radianes. Se convierte en
+	 * radianes al dibujar.
+	 */
+	private double m_rotation;
+
+	/**
+	 * Valores posibles para <code>m_Justification</code>: Left/Top = 0
+	 * Center/Top = 6                Right/Top = 12 Left/Center = 1
+	 * Center/Center = 7            Right/Center = 13 Left/Bottom = 2
+	 * Center/Bottom = 8            Right/Bottom = 14
+	 */
+	private byte m_Justification = LEFT_BOTTOM; // Por defecto
+	private int m_Style;
+	private Rectangle2D boundBox;
+	private Color color;
+	private static Font font=new Font("Dialog",Font.PLAIN,12);
+	/**
+	 * Crea un nuevo FLabel.
+	 */
+	public FLabel() {
+		// nothing to do
+	}
+
+	/**
+	 * Crea un nuevo FLabel.
+	 *
+	 * @param str DOCUMENT ME!
+	 */
+	public FLabel(String str) {
+		m_Str = str;
+	}
+
+	/**
+	 * Crea un nuevo FLabel.
+	 *
+	 * @param str
+	 * @param pOrig
+	 * @param heightText
+	 * @param rotation
+	 */
+	public FLabel(String str, Point2D pOrig, double heightText, double rotation) {
+		m_Str = str;
+		m_Orig = pOrig;
+		m_Height = heightText;
+		m_rotation = rotation;
+	}
+
+	/**
+	 * Introduce un nuevo FLabel al ya existente.
+	 *
+	 * @param label
+	 */
+	public void setFLabel(FLabel label) {
+		m_Str = label.m_Str;
+		m_Orig = label.m_Orig;
+		m_Height = label.m_Height;
+		m_rotation = label.m_rotation;
+	}
+
+	/**
+	 * Clona el FLabel.
+	 *
+	 * @return Object clonado.
+	 */
+	public Object clone() {
+		FLabel label=new FLabel(m_Str, m_Orig, m_Height, m_rotation);
+		label.boundBox=(Rectangle2D)boundBox.clone();
+		return label;
+	}
+
+	/**
+	 * Devuelve la altura del Label.
+	 *
+	 * @return Returns the m_Height.
+	 */
+	public double getHeight() {
+		return m_Height;
+	}
+
+	/**
+	 * Devuelve el punto de origen.
+	 *
+	 * @return Returns the m_Orig.
+	 */
+	public Point2D getOrig() {
+		return m_Orig;
+	}
+
+	/**
+	 * Devuelve la rotaci�n.
+	 *
+	 * @return Returns the m_rotation.
+	 */
+	public double getRotation() {
+		return m_rotation;
+	}
+
+	/**
+	 * Devuelve un String con el texto del Label.
+	 *
+	 * @return Returns the m_Str.
+	 */
+	public String getString() {
+		return m_Str;
+	}
+
+	/**
+	 * Introduce la altura del Label.
+	 *
+	 * @param height The m_Height to set.
+	 */
+	public void setHeight(double height) {
+		m_Height = height;
+	}
+
+	/**
+	 * Introduce el punto de origen del Label.
+	 *
+	 * @param orig The m_Orig to set.
+	 */
+	public void setOrig(Point2D orig) {
+		m_Orig = orig;
+	}
+
+	/**
+	 * Introduce la rotaci�n a aplicar al Label.
+	 *
+	 * @param m_rotation The m_rotation to set.
+	 */
+	public void setRotation(double m_rotation) {
+		this.m_rotation = Math.toRadians(-m_rotation);
+	}
+
+	/**
+	 * Introduce el texto del Label.
+	 *
+	 * @param str The m_Str to set.
+	 */
+	public void setString(String str) {
+		m_Str = str;
+	}
+
+	/**
+	 * Valores posibles para <code>m_Justification</code>: Left/Top = 0
+	 * Center/Top = 6                Right/Top = 12 Left/Center = 1
+	 * Center/Center = 7            Right/Center = 13 Left/Bottom = 2
+	 * Center/Bottom = 8            Right/Bottom = 14
+	 *
+	 * @return byte.
+	 */
+	public byte getJustification() {
+		return m_Justification;
+	}
+
+	/**
+	 * Valores posibles para <code>m_Justification</code>: Left/Top = 0
+	 * Center/Top = 6                Right/Top = 12 Left/Center = 1
+	 * Center/Center = 7            Right/Center = 13 Left/Bottom = 2
+	 * Center/Bottom = 8            Right/Bottom = 14
+	 *
+	 * @param justification byte
+	 */
+	public void setJustification(byte justification) {
+		m_Justification = justification;
+	}
+
+	/**
+	 * Devuelve un Objeto XMLEntity con la informaci�n los atributos necesarios
+	 * para poder despu�s volver a crear el objeto original.
+	 *
+	 * @return XMLEntity.
+	 */
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className",this.getClass().getName());
+		xml.setName("flabel");
+		xml.putProperty("m_Height", m_Height);
+		xml.putProperty("m_Justification", (int) m_Justification);
+		xml.putProperty("m_OrigX", m_Orig.getX());
+		xml.putProperty("m_OrigY", m_Orig.getY());
+		xml.putProperty("m_rotation", m_rotation);
+		xml.putProperty("m_Str", m_Str);
+
+		return xml;
+	}
+
+	/**
+	 * Crea un Objeto de esta clase a partir de la informaci�n del XMLEntity.
+	 *
+	 * @param xml XMLEntity
+	 *
+	 * @return Objeto de esta clase.
+	 */
+	public static FLabel createFLabel(XMLEntity xml) {
+		FLabel label = new FLabel();
+		label.setHeight(xml.getDoubleProperty("m_Height"));
+		label.setJustification((byte) xml.getIntProperty("m_Justification"));
+		label.setOrig(new Point2D.Double(xml.getDoubleProperty("m_OrigX"),
+				xml.getDoubleProperty("m_OrigY")));
+		label.setString("m_Str");
+
+		return label;
+	}
+
+	/**
+	 * M�todo est�tico que crea un FLabel a partir de una Geometry.
+	 *
+	 * @param geom Geometry.
+	 *
+	 * @return nuevo FLabel creado.
+	 * @throws CreateGeometryException 
+	 */
+	public static FLabel createFLabel(org.gvsig.fmap.geom.Geometry geom) throws CreateGeometryException {
+		float angle;
+		Point2D pAux = createLabelPoint(geom);
+
+		FLabel label = new FLabel();
+		label.setOrig(pAux);
+		switch (geom.getType()) {
+			case org.gvsig.fmap.geom.Geometry.TYPES.CURVE:
+           		PathLength pathLen = new PathLength(geom.getShape());
+				float midDistance = pathLen.lengthOfPath() / 2;
+				angle = pathLen.angleAtLength(midDistance);
+
+				if (angle < 0) {
+					angle = angle + (float) (2 * Math.PI);
+				}
+				if ((angle > (Math.PI / 2)) && (angle < ((3 * Math.PI) / 2))) {
+					angle = angle - (float) Math.PI;
+				}
+				label.setRotation(Math.toDegrees(angle));
+				break;
+		} // switch
+
+		return label;
+	}
+	public static Point2D createLabelPoint(org.gvsig.fmap.geom.Geometry geom) throws CreateGeometryException {
+		Point2D pAux = null;
+		switch (geom.getType()) {
+			case org.gvsig.fmap.geom.Geometry.TYPES.POINT:
+            	pAux = new Point2D.Double(((org.gvsig.fmap.geom.primitive.Point) geom).getX(),
+						((org.gvsig.fmap.geom.primitive.Point) geom).getY());
+				return pAux;
+
+			case org.gvsig.fmap.geom.Geometry.TYPES.CURVE:
+            	PathLength pathLen = new PathLength(geom.getShape());
+
+				// if (pathLen.lengthOfPath() < width / mT.getScaleX()) return;
+				float midDistance = pathLen.lengthOfPath() / 2;
+				pAux = pathLen.pointAtLength(midDistance);
+				return pAux;
+
+			case org.gvsig.fmap.geom.Geometry.TYPES.SURFACE:
+			    
+			    try {
+	                Point pLabel = geom.centroid();
+	                return new Point2D.Double(pLabel.getX(), pLabel.getY());
+			    } catch (Exception ex) {
+			        logger.info("Error while computing centroid. ", ex);
+			    }
+				break;
+            case org.gvsig.fmap.geom.Geometry.TYPES.MULTIPOINT:
+            	int num=((MultiPoint)geom).getPrimitivesNumber();
+    			Rectangle2D r=null;
+    			if (num>0){
+    				r= ((MultiPoint)geom).getPointAt(0).getBounds2D();
+    				for (int i=1;i<num;i++){
+    					org.gvsig.fmap.geom.primitive.Point fp=((MultiPoint)geom).getPointAt(i);
+    					r.add(new Point2D.Double(fp.getX(),fp.getY()));
+    				}
+    			}
+    			if (r!=null)
+    			return new Point2D.Double(r.getCenterX(),r.getCenterY());
+    			break;
+
+		} // switch
+				
+		return null;
+	}
+	public void setTypeFont(String t) {
+		font=Font.getFont(t,font);
+	}
+	public int getStyle() {
+		return m_Style;
+	}
+
+	public void setBoundBox(Rectangle2D boundBox) {
+		this.boundBox=boundBox;
+
+	}
+	public Rectangle2D getBoundBox(){
+		return boundBox;
+	}
+
+	public Rectangle2D getBoundingBox(ViewPort vp) {
+		return vp.fromMapRectangle(boundBox);
+	}
+
+	public void setColor(int i) {
+		color=new Color(i);
+	}
+
+	public Color getColor() {
+		return color;
+	}
+	/*public Font getFont(AffineTransform at,boolean isInPixels){
+		if (!isInPixels) {
+			float alturaPixels = (float) ((getHeight() * at.getScaleX())*SQUARE);
+			//Font nuevaFuente = font.deriveFont(alturaPixels);//new Font(getTypeFont(),getStyle(),(int)alturaPixels);
+			return font.deriveFont(alturaPixels);
+		}
+		//Font nuevaFuente = font.deriveFont((float)(getHeight()*SQUARE));//new Font(getTypeFont(),getStyle(),(int)(getHeight()*SQUARE));
+		return font;//font.deriveFont((float)(getHeight()*SQUARE));
+	}*/
+	public Font getFont(AffineTransform at,Font font){
+		float alturaPixels = (float) ((getHeight() * at.getScaleX())*SQUARE);
+		//return font.deriveFont(alturaPixels);
+        return font.deriveFont(font.getStyle(),alturaPixels);
+	}
+
+	/**
+	 * Por ahora, para extender el renderizado de etiquetas, habr�a que
+	 * crear otro FLabel y reimplementar este m�todo para que haga caso
+	 * a otros s�mbolos. Es decir, NO usar FGraphicUtilities
+	 * @param g
+	 * @param affineTransform
+	 * @param theShape
+	 * @param theSymbol
+	 */
+	public void draw(Graphics2D g, AffineTransform affineTransform, Shape theShape, ISymbol theSymbol) {
+        FGraphicUtilities.DrawLabel(g, affineTransform,
+                (org.gvsig.fmap.geom.Geometry) theShape, (FSymbol) theSymbol, this);
+
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/FLabel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/AbstractSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/AbstractSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/AbstractSymbol.java	(revision 42196)
@@ -0,0 +1,291 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl;
+
+import java.awt.Rectangle;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol_v2;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstract class that implements the interface the interface for symbols.It is
+ * considered as the father of all XXXSymbols and will implement all the methods
+ * that these classes had not developed (and correspond with one of the methods
+ * of AbstractSymbol class)
+ * 
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractSymbol implements ISymbol_v2, CartographicSupport {
+
+	private static final Logger LOG = LoggerFactory.getLogger(AbstractSymbol.class);
+
+	public static final String SYMBOL_PERSISTENCE_DEFINITION_NAME = "Symbol";
+	
+	private static final String FIELD_UNIT = "unit";
+
+	private static final String FIELD_REFERENCE_SYSTEM = "referenceSystem";
+
+	private static final String FIELD_IS_SHAPE_VISIBLE = "isShapeVisible";
+
+	private static final String FIELD_DESCRIPTION = "description";
+
+
+	private String desc;
+        private String id; 
+	private int unit;
+	private int referenceSystem;
+
+	private boolean isShapeVisible = true;
+
+	public AbstractSymbol() {
+		super();
+		SymbolPreferences preferences =
+				MapContextLocator.getSymbolManager().getSymbolPreferences();
+		unit =
+				preferences.getDefaultCartographicSupportMeasureUnit();
+		referenceSystem =
+				preferences.getDefaultCartographicSupportReferenceSystem();
+	}
+
+	public final void setDescription(String desc) {
+		this.desc = desc;
+	}
+
+	public final String getDescription() {
+		return desc;
+	}
+
+        /**
+         * Set the id ob the symbol (the basename of file)
+         * 
+         * @param id 
+         */
+	public final void setID(String id) {
+		this.id = id;
+	}
+
+        /**
+         * Get the id ob the symbol (the basename of file)
+         * 
+         * @param id 
+         */
+	public final String getID() {
+		return id;
+	}
+
+        
+	/**
+	 * @return
+	 * @uml.property name="isShapeVisible"
+	 */
+	public final boolean isShapeVisible() {
+		return isShapeVisible;
+	}
+
+	/**
+	 * Sets this symbol to visible
+	 * 
+	 * @param isShapeVisible
+	 */
+	public final void setIsShapeVisible(boolean isShapeVisible) {
+		this.isShapeVisible = isShapeVisible;
+	}
+
+	public void setUnit(int unitIndex) {
+		this.unit = unitIndex;
+	}
+
+	public int getUnit() {
+		return this.unit;
+	}
+
+	public int getReferenceSystem() {
+		return this.referenceSystem;
+	}
+
+	public void setReferenceSystem(int system) {
+		this.referenceSystem = system;
+
+	}
+	
+	private boolean areEquals(Object a,Object b) {
+		if( a==null ) {
+			if( b==null) {
+				return true;
+			}
+			return false;
+		} else {
+			if( b == null ) {
+				return false;
+			}
+		}
+		return a.equals(b);
+	}
+
+	public boolean equals(Object obj) {
+		ISymbol other = null;
+		
+		if( obj==null ) {
+			return false;
+		}
+		if( ! areEquals(obj.getClass(),this.getClass()) ) {
+			// El try/catch y la salida al log es una medida
+			// temporal hasta que averiguemos quien causa que
+			// pase por aqui, ya que no parece razonable que 
+			// desde gvSIG se invoque con algo que no sea un ISymbol.
+			try {
+				other = (ISymbol) obj;
+			} catch(Exception ex) {
+				LOG.warn("Suspicious comparison between ISymbol and '"+obj.getClass().getName()+"'.",ex);
+			}
+			return false;
+		}
+		
+		other = (ISymbol) obj;
+		
+		if( ! areEquals(other.getColor(),this.getColor()) ) {
+			return false;
+		}
+		if( other.getOnePointRgb() != this.getOnePointRgb()) {
+			return false;
+		}
+		if( ! areEquals(other.getDescription(),this.getDescription()) ) {
+			return false;
+		}
+		return true;
+	}
+
+	public boolean isOneDotOrPixel(Geometry geom,
+			double[] positionOfDotOrPixel, ViewPort viewPort, int dpi) {
+
+		int type = geom.getType();
+		switch (type) {
+		case Geometry.TYPES.NULL:
+		case Geometry.TYPES.POINT:
+		case Geometry.TYPES.MULTIPOINT:
+			return false;
+		default:
+			org.gvsig.fmap.geom.primitive.Envelope geomBounds = geom
+			.getEnvelope();
+
+			double dist1Pixel = viewPort.getDist1pixel();
+
+			float[] distances = new float[2];
+			this.getPixExtentPlus(geom, distances, viewPort, dpi);
+
+			boolean onePoint =
+					(geomBounds.getLength(0) + distances[0] <= dist1Pixel && geomBounds
+					.getLength(1)
+					+ distances[1] <= dist1Pixel);
+
+			if (onePoint) {
+				Rectangle bounds = geom.getShape().getBounds();
+				positionOfDotOrPixel[0] = bounds.x;
+				positionOfDotOrPixel[1] = bounds.y;
+			}
+			return onePoint;
+		}
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		return super.clone();	
+	}
+
+	protected ISymbol cloneForSelection() {
+		try {
+			ISymbol selectionSymbol = (ISymbol) clone();
+			selectionSymbol.setColor(MapContext.getSelectionColor());
+			if (getDescription() != null){
+				selectionSymbol.setDescription(getDescription().concat(
+				" version for selection"));
+			}else{
+				selectionSymbol.setDescription("version for selection");
+			}
+			return selectionSymbol;
+		} catch (CloneNotSupportedException e) {
+			LOG.error(
+					"Error creating the selection symbol for the symbol "
+					+ this, e);
+		}
+		return null;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		setDescription(state.getString(FIELD_DESCRIPTION));
+		setIsShapeVisible(state.getBoolean(FIELD_IS_SHAPE_VISIBLE));
+		setReferenceSystem(state.getInt(FIELD_REFERENCE_SYSTEM));
+		setUnit(state.getInt(FIELD_UNIT));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_DESCRIPTION, getDescription());
+		state.set(FIELD_IS_SHAPE_VISIBLE, isShapeVisible());
+		state.set(FIELD_REFERENCE_SYSTEM, getReferenceSystem());
+		state.set(FIELD_UNIT, getUnit());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						AbstractSymbol.class, 
+						SYMBOL_PERSISTENCE_DEFINITION_NAME, 
+						SYMBOL_PERSISTENCE_DEFINITION_NAME+" persistence definition", 
+						null, 
+						null
+				);
+				// Description
+				definition.addDynFieldString(FIELD_DESCRIPTION);
+				// Is Shape Visible
+				definition.addDynFieldBoolean(FIELD_IS_SHAPE_VISIBLE).setMandatory(true);
+				// Reference system
+				definition.addDynFieldInt(FIELD_REFERENCE_SYSTEM).setMandatory(true);
+				// Unit
+				definition.addDynFieldInt(FIELD_UNIT).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/AbstractSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/CartographicSupportToolkit.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/CartographicSupportToolkit.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/CartographicSupportToolkit.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+
+
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class CartographicSupportToolkit {
+
+	/**
+	 * Calculates the distance in pixels corresponding to the provided length,
+	 * according to the current rendering context (output dpi, map scale, map units) and the
+	 * symbol cartographic settings (unit, size, and unit reference system).
+	 *
+	 * @param cartographicElement CartographicSupport object which contains the reference system
+	 * and the measuring units for the provided length
+	 * @param length The length to be computed in pixels. The length is supposed to be
+	 * provided in the units defined in the cartographicElement
+	 * @param viewPort The viewport, which defines the relationship between pixels and maps units
+	 * @param dpi The resolution (dots per inch) of the target display device
+	 * (printer, screen, etc)
+	 * @return The distance in pixels corresponding to the provided length
+	 */
+	public static double getCartographicLength(CartographicSupport cartographicElement, double length, ViewPort viewPort, double dpi) {
+		int unit = cartographicElement.getUnit();
+		double lengthInPixel = length;
+
+		if (unit != -1) {
+			double[] trans2Meter=MapContext.getDistanceTrans2Meter();
+			if (cartographicElement.getReferenceSystem() == CartographicSupport.WORLD) {
+				double dist1PixelInMeters = viewPort.getDist1pixel()*trans2Meter[viewPort.getMapUnits()];
+				double realWidthMeter = length*trans2Meter[unit];
+				lengthInPixel = realWidthMeter/dist1PixelInMeters;
+			} else if (cartographicElement.getReferenceSystem() == CartographicSupport.PAPER) {
+				double lengthInInches = 1/trans2Meter[7]*trans2Meter[unit]*length;
+				lengthInPixel = lengthInInches*dpi;
+			}
+		} else{
+			double scale=dpi/72;
+			lengthInPixel=lengthInPixel*scale;
+		}
+		return  (lengthInPixel);
+
+	}
+
+	/**
+	 * The unit that will be used when creating new symbols.<br>
+	 * <b>Factory defaults to pixel.</b>
+	 */
+	public static int DefaultMeasureUnit = -1;
+	/**
+	 * The reference system that will be used when creating new symbols.<br>
+	 * <b>Factory defaults to pixel.</b>
+	 */
+	public static int DefaultReferenceSystem = CartographicSupport.WORLD;
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/impl/CartographicSupportToolkit.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/MultiLayerMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/MultiLayerMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/MultiLayerMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,409 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMultiLayerMarkerSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * MultiLayerMarkerSymbol allows to group several marker symbols (xxxMarkerSymbol
+ * implementing IMarkerSymbol)in one and treat it as an only one symbol.
+ *
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MultiLayerMarkerSymbol extends AbstractMarkerSymbol implements IMarkerSymbol, IMultiLayerSymbol, IMultiLayerMarkerSymbol {
+
+    public static final String MULTILAYER_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME = "MultiLayerMarkerSymbol";
+    
+    private static final String FIELD_LAYERS = "layers";
+    private static final String FIELD_ROTATION = "rotation";
+
+    private IMarkerSymbol[] layers = new IMarkerSymbol[0];
+	private MultiLayerMarkerSymbol selectionSymbol;
+	private double markerSize;
+	private double rotation;
+	
+	public MultiLayerMarkerSymbol() {
+		super();
+	}
+	
+	public Color getColor() {
+		/*
+		 * a multilayer symbol does not define any color, the color
+		 * of each layer is defined by the layer itself
+		 */
+		return null;
+	}
+
+	public double getRotation() {
+		return rotation;
+	}
+
+	public void setColor(Color color) {
+		/*
+		 * will apply the color to each layer
+		 */
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setColor(color);
+		}
+	}
+
+	public void setRotation(double rotation) {
+		this.rotation = rotation;
+	}
+
+	public double getSize() {
+		double myMarkerSize = 0;
+
+		for (int i = 0; i < getLayerCount(); i++) {
+			myMarkerSize = Math.max(myMarkerSize, ((IMarkerSymbol) getLayer(i)).getSize());
+		}
+
+		if (markerSize != myMarkerSize) {
+			markerSize = myMarkerSize;
+		}
+		return markerSize;
+	}
+
+	public void setSize(double size) {
+		if (size > 0 && size != getSize()) {
+
+			double scale = size / getSize();
+			this.markerSize = size;
+			for (int i = 0; layers != null && i < layers.length; i++) {
+				double lSize = layers[i].getSize();
+				layers[i].setSize(lSize*scale);
+			}
+		}
+	}
+
+
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+		Point p = (Point) geom;
+		g.rotate(rotation, p.getX(), p.getY());
+		for (int i = 0; (cancel == null || !cancel.isCanceled())
+				&& layers != null && i < layers.length; i++) {
+			layers[i].draw(g, affineTransform, geom, feature, cancel);
+		}
+		g.rotate(-rotation, p.getX(), p.getY());
+	}
+
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		g.rotate(rotation, r.getCenterX(), r.getCenterY());
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].drawInsideRectangle(g, scaleInstance, r, properties);
+		}
+		g.rotate(-rotation, r.getCenterX(), r.getCenterY());
+	}
+
+	public int getOnePointRgb() {
+		// will paint only the last layer pixel
+		return layers[layers.length-1].getOnePointRgb();
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		float[] myDistances = new float[] {0,0};
+		distances[0] = 0;
+		distances[1] = 0;
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].getPixExtentPlus(geom, myDistances, viewPort, dpi);
+			distances[0] = Math.max(myDistances[0], distances[0]);
+			distances[1] = Math.max(myDistances[1], distances[1]);
+		}
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSymbol == null) {
+			selectionSymbol = new MultiLayerMarkerSymbol();
+			selectionSymbol.setDescription(getDescription());
+			for (int i = 0; layers != null && i < layers.length; i++) {
+				selectionSymbol.addLayer(layers[i].getSymbolForSelection());
+			}
+		}
+		return selectionSymbol;
+
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return geom.getType() == Geometry.TYPES.POINT;
+	}
+
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].print(g, at, geom, properties);
+		}
+
+	}
+
+	public void setLayer(int index, ISymbol layer) throws IndexOutOfBoundsException {
+		layers[index] = (IMarkerSymbol) layer;
+	}
+
+	public void swapLayers(int index1, int index2) {
+		ISymbol aux1 = getLayer(index1), aux2 = getLayer(index2);
+		layers[index2] = (IMarkerSymbol) aux1;
+		layers[index1] = (IMarkerSymbol) aux2;
+	}
+
+	public ISymbol getLayer(int layerIndex) {
+//		try{
+			return layers[layerIndex];
+//		} catch (Exception e) {
+//			return null;
+//		}
+	}
+
+	public int getLayerCount() {
+		return layers.length;
+	}
+
+	public void addLayer(ISymbol newLayer) {
+		addLayer(newLayer, layers.length);
+	}
+
+	public void addLayer(ISymbol newLayer, int layerIndex) throws IndexOutOfBoundsException {
+		if (newLayer == null ) {
+			/*|| newLayer instanceof ILabelStyle)*/ return; // null or symbols that are styles are not allowed
+		}
+
+		IMarkerSymbol newMarker = (IMarkerSymbol) newLayer;
+		if (getLayerCount() == 0) {
+			// apply the new layer properties to this multilayer
+
+			setReferenceSystem(newMarker.getReferenceSystem());
+			markerSize = newMarker.getSize();
+			//setSize(newMarker.getSize());
+			setUnit(newMarker.getUnit());
+		} else {
+			if (newMarker.getSize() > getSize()) {
+				//setSize(newMarker.getSize());
+				markerSize = newMarker.getSize();
+			}
+			newMarker.setReferenceSystem(getReferenceSystem());
+			newMarker.setUnit(getUnit());
+		}
+		selectionSymbol = null; /* forces the selection symbol to be re-created
+		 						 * next time it is required
+		 						 */
+		if (layerIndex < 0 || layers.length < layerIndex) {
+			throw new IndexOutOfBoundsException(layerIndex+" < 0 or "+layerIndex+" > "+layers.length);
+		}
+		List<ISymbol> newLayers = new ArrayList<ISymbol>();
+		for (int i = 0; i < layers.length; i++) {
+			newLayers.add(layers[i]);
+		}
+		try {
+			newLayers.add(layerIndex, newLayer);
+			layers = (IMarkerSymbol[]) newLayers.toArray(new IMarkerSymbol[0]);
+		} catch (ArrayStoreException asEx) {
+			throw new ClassCastException(newLayer.getClass().getName()+" is not an IMarkerSymbol");
+		}
+	}
+
+	public boolean removeLayer(ISymbol layer) {
+
+		int capacity = 0;
+		capacity = layers.length;
+		List<ISymbol> lst = new ArrayList<ISymbol>(capacity);
+		for (int i = 0; i < capacity; i++) {
+			lst.add(layers[i]);
+		}
+		boolean contains = lst.remove(layer);
+		layers = (IMarkerSymbol[])lst.toArray(new IMarkerSymbol[0]);
+		return contains;
+	}
+
+	public void setUnit(int unit) {
+		super.setUnit(unit);
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setUnit(unit);
+		}
+	}
+
+	public void setReferenceSystem(int system) {
+		super.setReferenceSystem(system);
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setReferenceSystem(system);
+		}
+	}
+
+	public void setAlpha(int alpha) {
+		// first, get the biggest alpha in the layers and the index if such layer
+		int maxAlpha = Integer.MIN_VALUE;
+		int maxAlphaLayerIndex = 0;
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			if (layers[i].getColor().getAlpha() > maxAlpha) {
+				maxAlpha = layers[i].getColor().getAlpha();
+				maxAlphaLayerIndex = i;
+			}
+		}
+
+		// now, max alpha takes the value of the desired alpha and the rest
+		// will take a scaled (to biggest alpha) alpha value
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			int r = layers[i].getColor().getRed();
+			int g = layers[i].getColor().getGreen();
+			int b = layers[i].getColor().getBlue();
+
+			if (i!=maxAlphaLayerIndex) {
+				double scaledAlpha = (double) layers[i].getColor().getAlpha()/maxAlpha;
+				int myAlpha = (int) (alpha*scaledAlpha);
+				if (myAlpha == 0) {
+					myAlpha = 1;
+				}
+				layers[i].setColor(new Color(r, g, b, myAlpha));
+			} else {
+				int myAlpha = alpha;
+				if (myAlpha == 0) {
+					myAlpha = 1;
+				}
+				layers[i].setColor(new Color(r, g, b, myAlpha));
+			}
+		}
+
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		MultiLayerMarkerSymbol copy = (MultiLayerMarkerSymbol) super.clone();
+
+		// Clone layers
+		if (layers != null) {
+			IMarkerSymbol[] layersCopy = new IMarkerSymbol[layers.length];
+			for (int i = 0; i < layers.length; i++) {
+				layersCopy[i] = (IMarkerSymbol) layers[i].clone();
+			}
+			copy.layers = layersCopy;
+		}
+
+		// Clone selection
+		if (selectionSymbol != null) {
+			copy.selectionSymbol = (MultiLayerMarkerSymbol) selectionSymbol
+					.clone();
+		}
+
+		return copy;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent fill symbol properties
+		super.loadFromState(state);
+		// Set own properties
+		List layers = state.getList(FIELD_LAYERS);
+		if (layers != null) {
+			for (int i = 0; i < layers.size(); i++) {
+				addLayer((ISymbol) layers.get(i));
+			}
+		}
+		setRotation(state.getDouble(FIELD_ROTATION));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+		// Save own properties
+		if (layers != null && layers.length > 0) {
+			state.set(FIELD_LAYERS, Arrays.asList(layers));
+		}
+		state.set(FIELD_ROTATION, getRotation());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(MULTILAYER_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						MultiLayerMarkerSymbol.class,
+						MULTILAYER_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						MULTILAYER_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the MarkerSymbol base definition
+				definition.extend(manager.getDefinition(MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Layers
+				definition.addDynFieldList(FIELD_LAYERS).setClassOfItems(IMarkerSymbol.class);
+				// Rotation
+				definition.addDynFieldDouble(FIELD_ROTATION).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			int[] shapeTypes;
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+
+	        shapeTypes =
+	            new int[] { Geometry.TYPES.POINT, Geometry.TYPES.MULTIPOINT };
+	        manager.registerMultiLayerSymbol(IMarkerSymbol.SYMBOL_NAME,
+	            shapeTypes,
+	            MultiLayerMarkerSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/MultiLayerMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/SimpleMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/SimpleMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/SimpleMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,392 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * SimpleMarkerSymbol is the most basic symbol for the representation of point objects
+ * which can define its size and color apart from the rotation and the offset from a point
+ * in the map.
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class SimpleMarkerSymbol extends AbstractMarkerSymbol implements ISimpleMarkerSymbol {
+
+	public static final String SIMPLE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME = "SimpleMarkerSymbol";
+
+	private static final String FIELD_OUTLINED = "outlined";
+	private static final String FIELD_OUTLINECOLOR = "outlineColor";
+	private static final String FIELD_OUTLINESIZE = "outlineSize";
+	private static final String FIELD_MARKERSTYLE = "markerStyle";
+
+	private boolean outlined;
+	private Color outlineColor;
+	private double outlineSize;
+	private ISymbol selectionSymbol;
+	private int markerStyle;
+
+	public SimpleMarkerSymbol() {
+		super();
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSymbol == null) {
+			selectionSymbol = (SimpleMarkerSymbol) cloneForSelection();
+		}
+		return selectionSymbol;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+		int x, y;
+		org.gvsig.fmap.geom.primitive.Point p = (org.gvsig.fmap.geom.primitive.Point)geom.cloneGeometry();
+		p.transform(affineTransform);
+
+		int size = (int) getSize();
+
+		int halfSize = size/2;
+		x = ((int) (p.getX() + getOffset().getX()) - halfSize);
+		y = ((int) (p.getY() + getOffset().getY()) - halfSize);
+
+		// IMask mask = getMask();
+		// if (mask != null) {
+		// IFillSymbol maskShape = mask.getFillSymbol();
+		// // maskShape.draw(g, null, mask.getHaloShape(shp));
+		// }
+
+		g.setColor(getColor());
+		GeneralPathX genPath = null;
+		g.setStroke(new BasicStroke(1));
+
+		switch (markerStyle) {
+		case CIRCLE_STYLE:
+			g.fillOval(x, y, size, size);
+			break;
+		case SQUARE_STYLE:
+			g.fillRect(x, y, size, size);
+			break;
+		case CROSS_STYLE:
+			x = x + halfSize;
+			y = y + halfSize;
+			genPath = new GeneralPathX();
+			genPath.moveTo(x, y - halfSize);
+			genPath.lineTo(x, y + halfSize);
+			genPath.moveTo(x - halfSize, y);
+			genPath.lineTo(x + halfSize, y);
+			g.draw(genPath);
+			break;
+		case VERTICAL_LINE_STYLE:
+			genPath = new GeneralPathX();
+			genPath.moveTo(x + halfSize, y);
+			genPath.lineTo(x + halfSize, y + size);
+			g.draw(genPath);
+			break;
+		case DIAMOND_STYLE:
+			x = x + halfSize;
+			y = y + halfSize;
+			genPath = new GeneralPathX();
+			genPath.moveTo(x-halfSize, y);
+			genPath.lineTo(x, y+halfSize);
+			genPath.lineTo(x+halfSize, y);
+			genPath.lineTo(x, y-halfSize);
+			genPath.lineTo(x-halfSize, y);
+			genPath.closePath();
+			g.fill(genPath);
+			break;
+		case X_STYLE:
+			x = x + halfSize;
+			y = y + halfSize;
+			genPath = new GeneralPathX();
+			genPath.moveTo(x-halfSize, y - halfSize);
+			genPath.lineTo(x+halfSize, y + halfSize);
+			genPath.moveTo(x - halfSize, y + halfSize);
+			genPath.lineTo(x + halfSize, y - halfSize);
+			g.draw(genPath);
+			break;
+		case TRIANGLE_STYLE:
+			x = x + halfSize;
+			y = y + halfSize;
+			int otherSize = (int) (size * 0.55);
+			genPath = new GeneralPathX();
+			genPath.moveTo(x - halfSize,
+				y + halfSize);
+			genPath.lineTo(x + halfSize,
+				y + halfSize);
+			genPath.lineTo(x, y - otherSize);
+			genPath.closePath();
+
+			g.fill(genPath);
+			break;
+		case STAR_STYLE:
+			x = x + halfSize;
+			y = y + halfSize;
+			genPath = new GeneralPathX();
+			genPath.moveTo(x-halfSize, y);
+
+			genPath.lineTo(x-2*(halfSize/3), y+(halfSize/3));
+			genPath.lineTo(x-2*(halfSize/3), y+2*(halfSize/3));
+			genPath.lineTo(x-(halfSize/3), y+2*(halfSize/3));
+
+			genPath.lineTo(x, y+halfSize);
+
+			genPath.lineTo(x+(halfSize/3), y+2*(halfSize/3));
+			genPath.lineTo(x+2*(halfSize/3), y+2*(halfSize/3));
+			genPath.lineTo(x+2*(halfSize/3), y+(halfSize/3));
+
+			genPath.lineTo(x+(halfSize), y);
+
+			genPath.lineTo(x+2*(halfSize/3), y-(halfSize/3));
+			genPath.lineTo(x+2*(halfSize/3), y-2*(halfSize/3));
+			genPath.lineTo(x+(halfSize/3), y-2*(halfSize/3));
+
+			genPath.lineTo(x, y-halfSize);
+
+			genPath.lineTo(x-(halfSize/3), y-2*(halfSize/3));
+			genPath.lineTo(x-2*(halfSize/3), y-2*(halfSize/3));
+			genPath.lineTo(x-2*(halfSize/3), y-(halfSize/3));
+
+			genPath.lineTo(x-halfSize, y);
+
+			genPath.closePath();
+
+
+			g.fill(genPath);
+
+			break;
+		}
+
+
+		if (outlined) {
+			g.setColor(outlineColor);
+			switch (markerStyle) {
+			case CIRCLE_STYLE:
+				g.drawOval(x, y, size, size);
+				break;
+			case SQUARE_STYLE:
+				g.drawRect(x, y, size, size);
+				break;
+			case CROSS_STYLE:
+			case DIAMOND_STYLE:
+			case STAR_STYLE:
+			case X_STYLE:
+			case TRIANGLE_STYLE:
+			case VERTICAL_LINE_STYLE:
+				g.draw(genPath);
+				break;
+			}
+		}
+	}
+
+	/**
+	 * Returns true or false depending if the simple marker symbol has an outline or not.
+	 * @return Returns the outline.
+	 */
+	public boolean hasOutline() {
+		return outlined;
+	}
+
+	/**
+	 * Establishes the outline for the simple marker symbol.
+	 * @param outline  The outline to set.
+	 */
+	public void setOutlined(boolean outlined) {
+		this.outlined = outlined;
+	}
+
+	/**
+	 * Returns the outline color for the symple marker symbol
+	 *
+	 * @return Color,outlineColor.
+	 */
+	public Color getOutlineColor() {
+		return outlineColor;
+	}
+
+	/**
+	 * Sets the outline color for the simple marker symbol
+	 * @param outlineColor, Color
+	 */
+	public void setOutlineColor(Color outlineColor) {
+		this.outlineColor = outlineColor;
+	}
+
+	/**
+	 * Gets the size of the outline for the simple marker symbol
+	 * @return  Returns the outlineSize.
+	 */
+	public double getOutlineSize() {
+		return outlineSize;
+	}
+
+	/**
+	 * Establishes the size for the outline of the simple marker symbol
+	 * @param outlineSize  The outlineSize to set.
+	 */
+	public void setOutlineSize(double outlineSize) {
+		this.outlineSize = outlineSize;
+	}
+
+	/**
+	 * @return  Returns the selectionSymbol.
+	 */
+	public ISymbol getSelectionSymbol() {
+		return selectionSymbol;
+	}
+
+	/**
+	 * @param selectionSymbol  The selectionSymbol to set.
+	 */
+	public void setSelectionSymbol(ISymbol selectionSymbol) {
+		this.selectionSymbol = selectionSymbol;
+	}
+	/**
+	 * Sets the style for the simple marker symbol
+	 * @param style
+	 */
+	public void setStyle(int style) {
+		this.markerStyle = style;
+	}
+
+	/**
+	 * Obtains the style for the simple marker symbol
+	 * @return markerStyle,int
+	 */
+	public int getStyle() {
+		return markerStyle;
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		SimpleMarkerSymbol copy = (SimpleMarkerSymbol) super.clone();
+
+		// clone selection
+		if (selectionSymbol != null) {
+			copy.selectionSymbol = (ISymbol) selectionSymbol.clone();
+		}
+
+		return copy;
+	}
+
+	/**
+	 * Returns if the marker symbol should be drawn outlined.
+	 * @return if it is outlined
+	 */
+	public boolean isOutlined() {
+		return outlined;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent fill symbol properties
+		super.loadFromState(state);
+
+		// Set own properties
+		setStyle(state.getInt(FIELD_MARKERSTYLE));
+		setOutlined(state.getBoolean(FIELD_OUTLINED));
+		if (isOutlined()) {
+			setOutlineColor((Color) state.get(FIELD_OUTLINECOLOR));
+			setOutlineSize(state.getDouble(FIELD_OUTLINESIZE));
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Save own properties
+		state.set(FIELD_MARKERSTYLE, getStyle());
+		state.set(FIELD_OUTLINED, isOutlined());
+		if (isOutlined()) {
+			state.set(FIELD_OUTLINECOLOR, getOutlineColor());
+			state.set(FIELD_OUTLINESIZE, getOutlineSize());
+		}
+	}
+
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SIMPLE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						SimpleMarkerSymbol.class,
+						SIMPLE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						SIMPLE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null,
+						null
+				);
+				// Extend the FillSymbol base definition
+				definition.extend(manager.getDefinition(MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Marker style
+				definition.addDynFieldInt(FIELD_MARKERSTYLE).setMandatory(true);
+				// Outlined?
+				definition.addDynFieldBoolean(FIELD_OUTLINED).setMandatory(true);
+				// Outline color
+				definition.addDynFieldObject(FIELD_OUTLINECOLOR).setClassOfValue(Color.class);
+				// Outline size
+				definition.addDynFieldDouble(FIELD_OUTLINESIZE);
+			}
+			return Boolean.TRUE;
+		}
+
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			int[] shapeTypes;
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+
+	        shapeTypes =
+	            new int[] { Geometry.TYPES.POINT, Geometry.TYPES.MULTIPOINT };
+	        manager.registerSymbol(IMarkerSymbol.SYMBOL_NAME,
+	            shapeTypes,
+	            SimpleMarkerSymbol.class);
+
+			return Boolean.TRUE;
+		}
+
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/SimpleMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/ArrowMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/ArrowMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/ArrowMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,173 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl;
+
+import java.awt.BasicStroke;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IArrowMarkerSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class ArrowMarkerSymbol extends AbstractMarkerSymbol implements CartographicSupport, IArrowMarkerSymbol {
+
+	public static final String ARROW_MARKER_SYMBOL_DYNCLASS_NAME = "ArrowMarkerSymbol";
+	
+	private static final String FIELD_SHARPNESS = "sharpness"; 
+
+	private ArrowMarkerSymbol symSel;
+	private double sharpeness;
+
+	public ISymbol getSymbolForSelection() {
+		if (symSel == null) {
+			symSel = new ArrowMarkerSymbol();
+			symSel.setColor(MapContext.getSelectionColor());
+
+		}
+
+		return symSel;
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	/**
+	 * To get the sharpeness attribute.It will determine the final form of the arrow
+	 * @return
+	 */
+	public double getSharpness() {
+		return sharpeness;
+	}
+
+	/**
+	 * To set the sharpeness.It will determine the final form of the arrow
+	 * @param sharpeness, the value of the arrow's edge angle IN RADIANS
+	 * @see #getSharpeness()
+	 */
+	public void setSharpness(double sharpeness) {
+		this.sharpeness = sharpeness;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+
+		if (geom == null) {
+			return;
+		}
+		Point p = (Point) geom;
+		double radian_half_sharpeness = Math.toRadians(getSharpness()*.5); //
+
+		double size = getSize();
+		double halfHeight = size * Math.tan(radian_half_sharpeness);
+		double theta = getRotation();
+
+		g.setColor(getColor());
+
+		g.setStroke(new BasicStroke());
+
+		AffineTransform newAf = (AffineTransform)affineTransform.clone();
+		
+		newAf.translate(p.getX(), p.getY());
+		newAf.rotate(theta);
+		
+		GeneralPathX gp = new GeneralPathX();
+		gp.moveTo(0, 0);
+		gp.lineTo(size, -halfHeight);
+		gp.lineTo(size, halfHeight);
+		gp.closePath();
+
+		gp.transform(newAf);
+		
+		g.fill(gp);
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		ArrowMarkerSymbol copy  = (ArrowMarkerSymbol) super.clone();
+		
+		// Clone the selection symbol
+		if (symSel != null) {
+			copy.symSel = (ArrowMarkerSymbol) symSel.clone();
+		}
+		return copy;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent fill symbol properties
+		super.loadFromState(state);
+
+		// Set own properties
+		setSharpness(state.getDouble(FIELD_SHARPNESS));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Save own properties
+		state.set(FIELD_SHARPNESS, getSharpness());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(ARROW_MARKER_SYMBOL_DYNCLASS_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						ArrowMarkerSymbol.class,
+						ARROW_MARKER_SYMBOL_DYNCLASS_NAME,
+						ARROW_MARKER_SYMBOL_DYNCLASS_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the FillSymbol base definition
+				definition.extend(manager.getDefinition(MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Sharpeness
+				definition.addDynFieldDouble(FIELD_SHARPNESS).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/ArrowMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/PictureMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/PictureMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/PictureMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,384 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: PictureMarkerSymbol.java 15593 2007-10-29 13:01:13Z jdominguez $
+ * $Log$
+ * Revision 1.17  2007-09-21 12:25:32  jaume
+ * cancellation support extended down to the IGeometry and ISymbol level
+ *
+ * Revision 1.16  2007/09/19 16:22:04  jaume
+ * removed unnecessary imports
+ *
+ * Revision 1.15  2007/09/11 07:46:55  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.14  2007/08/16 06:55:19  jvidal
+ * javadoc updated
+ *
+ * Revision 1.13  2007/08/09 06:42:24  jvidal
+ * javadoc
+ *
+ * Revision 1.12  2007/08/08 12:05:17  jvidal
+ * javadoc
+ *
+ * Revision 1.11  2007/07/18 06:54:35  jaume
+ * continuing with cartographic support
+ *
+ * Revision 1.10  2007/07/03 10:58:29  jaume
+ * first refactor on CartographicSupport
+ *
+ * Revision 1.9  2007/06/29 13:07:01  jaume
+ * +PictureLineSymbol
+ *
+ * Revision 1.8  2007/06/11 12:25:48  jaume
+ * ISymbol drawing integration tests (markers and lines)
+ *
+ * Revision 1.7  2007/06/07 06:50:40  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2007/05/29 15:46:37  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5  2007/05/08 08:47:40  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2007/03/21 17:36:22  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2007/03/09 11:20:57  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.4  2007/02/21 07:34:09  jaume
+ * labeling starts working
+ *
+ * Revision 1.1.2.3  2007/02/16 10:54:12  jaume
+ * multilayer splitted to multilayerline, multilayermarker,and  multilayerfill
+ *
+ * Revision 1.1.2.2  2007/02/15 16:23:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2007/02/09 07:47:05  jaume
+ * Isymbol moved
+ *
+ * Revision 1.1  2007/01/24 17:58:22  jaume
+ * new features and architecture error fixes
+ *
+ *
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.io.IOException;
+import java.net.URL;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.BackgroundFileStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * PictureMarkerSymbol allows to use an image file as a definition to be painted
+ * instead of a marker symbol.
+ */
+public class PictureMarkerSymbol extends AbstractMarkerSymbol implements IPictureMarkerSymbol {
+
+    private final Logger LOG =
+        LoggerFactory.getLogger(PictureMarkerSymbol.class);
+
+    public static final String PICTURE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME =
+        "PictureMarkerSymbol";
+    private static final String SELECTED = "selected";
+    private static final String SELECTION_SYMBOL = "selectionSym";
+    private static final String BACKGROUND_IMAGE = "bgImage";
+    private static final String BACKGROUND_SELECTION_IMAGE = "bgSelImage";
+
+//    private static final float SELECTION_OPACITY_FACTOR = .3F;
+    
+    private boolean selected;
+    private PictureMarkerSymbol selectionSym;
+
+    private BackgroundFileStyle bgImage;
+    private BackgroundFileStyle bgSelImage;
+
+    /**
+     * Constructor method
+     */
+    public PictureMarkerSymbol() {
+        super();
+        setSize(18);
+    }
+
+    /**
+     * Constructor method
+     * 
+     * @param imageURL
+     *            , URL of the normal image
+     * @param selImageURL
+     *            , URL of the image when it is selected in the map
+     * @throws IOException
+     */
+    public PictureMarkerSymbol(URL imageURL, URL selImageURL) throws IOException {
+        setImage(imageURL);
+        if (selImageURL != null)
+            setSelImage(selImageURL);
+        else
+            setSelImage(imageURL);
+
+    }
+
+    /**
+     * Sets the file for the image to be used as a marker symbol
+     * 
+     * @param imageFile
+     *            , File
+     * @throws IOException
+     */
+    public void setImage(URL imageUrl) throws IOException {
+
+        bgImage = BackgroundFileStyle.createStyleByURL(imageUrl);
+    }
+
+    /**
+     * Sets the file for the image to be used as a marker symbol (when it is
+     * selected in the map)
+     * 
+     * @param imageFile
+     *            , File
+     * @throws IOException
+     */
+    public void setSelImage(URL imageFileUrl) throws IOException {
+
+        bgSelImage = BackgroundFileStyle.createStyleByURL(imageFileUrl);
+    }
+
+    public ISymbol getSymbolForSelection() {
+        if (selectionSym == null) {
+            try {
+                selectionSym = (PictureMarkerSymbol) this.clone();
+            } catch (CloneNotSupportedException e) {
+                LOG.error("Error creating the selection symbol for the symbol "
+                    + this, e);
+            }
+            selectionSym.selected = true;
+            selectionSym.selectionSym = selectionSym; // avoid too much lazy
+                                                      // creations
+        }
+        return selectionSym;
+    }
+
+    public void draw(Graphics2D g,
+        AffineTransform affineTransform,
+        Geometry geom,
+        Feature f,
+        Cancellable cancel) {
+		org.gvsig.fmap.geom.primitive.Point p = (org.gvsig.fmap.geom.primitive.Point)geom.cloneGeometry();
+		if (affineTransform!=null) {
+			p.transform(affineTransform);
+		}
+        double x, y;
+        int size = (int) Math.round(getSize());
+        double halfSize = getSize() / 2;
+        x = p.getX() - halfSize;
+        y = p.getY() - halfSize;
+        int xOffset = (int) getOffset().getX();
+        int yOffset = (int) getOffset().getY();
+
+        if (size > 0) {
+            BackgroundFileStyle bg = (!selected) ? bgImage : bgSelImage;
+            Rectangle rect = new Rectangle(size, size);
+            g.translate(x + xOffset, y + yOffset);
+            double auxRotation = getRotation();
+            g.rotate(auxRotation, halfSize, halfSize);
+            if (bg != null) {
+                try {
+                    bg.drawInsideRectangle(g, rect);
+                } catch (SymbolDrawingException e) {
+                    LOG.warn(Messages.getText("label_style_could_not_be_painted")
+                        + ": " + bg.getSource().toString(),
+                        e);
+                }
+            } else {
+                LOG.warn(Messages.getText("label_style_could_not_be_painted")
+                    + ": bg is Null");
+            }
+            g.rotate(-auxRotation, halfSize, halfSize);
+            g.translate(-(x + xOffset), -(y + yOffset));
+
+        }
+
+    }
+    
+    
+    public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+
+        /*
+         * Marker symbols which are not simple (images, etc)
+         * are resized when drawn inside a rectangle 
+         */
+        double saved_size = this.getSize();
+        this.setSize(r.getHeight());
+
+        super.drawInsideRectangle(g, scaleInstance, r, properties);
+
+        // =================== Restoring size
+        this.setSize(saved_size);
+    }    
+    
+
+    public String getClassName() {
+        return getClass().getName();
+    }
+
+    // public void print(Graphics2D g, AffineTransform at, FShape shape)
+    // throws ReadDriverException {
+    // // TODO Implement it
+    // throw new Error("Not yet implemented!");
+    //
+    // }
+     /**
+      * Returns the URL of the image that is used as a marker symbol
+      * @return imagePath,URL
+      */
+    public URL getSource() {
+    	return bgImage.getSource();
+    }
+    /**
+     * Returns the URL of the image that is used as a marker symbol (when it
+     is selected in the map)
+     * @return selimagePath,URL
+     */
+    public URL getSelectedSource(){
+    	return bgSelImage.getSource();
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        PictureMarkerSymbol copy = (PictureMarkerSymbol) super.clone();
+
+        // clone selection
+        if (selectionSym != null) {
+        	//to avoid an infinite loop
+        	if (this == selectionSym){
+        		copy.selectionSym = copy;
+        	} else {
+        		copy.selectionSym = (PictureMarkerSymbol) selectionSym.clone();
+        	}
+        }
+
+        // clone brackground image
+        if (bgImage != null) {
+            copy.bgImage = (BackgroundFileStyle) bgImage.clone();
+        }
+
+        // clone selection brackground image
+        if (bgSelImage != null) {
+            copy.bgSelImage = (BackgroundFileStyle) bgSelImage.clone();
+        }
+        return copy;
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        // Set parent style properties
+        super.loadFromState(state);
+
+        this.selected = (Boolean) state.get(SELECTED);
+        this.selectionSym = (PictureMarkerSymbol) state.get(SELECTION_SYMBOL);
+        this.bgImage = (BackgroundFileStyle) state.get(BACKGROUND_IMAGE);
+        this.bgSelImage =
+            (BackgroundFileStyle) state.get(BACKGROUND_SELECTION_IMAGE);
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // Save parent fill symbol properties
+        super.saveToState(state);
+
+        // Save own properties
+        state.set(SELECTED, this.selected);
+        state.set(SELECTION_SYMBOL, this.getSymbolForSelection());
+        state.set(BACKGROUND_IMAGE, this.bgImage);
+        state.set(BACKGROUND_SELECTION_IMAGE, this.bgSelImage);
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if (manager.getDefinition(PICTURE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME) == null) {
+                DynStruct definition =
+                    manager.addDefinition(PictureMarkerSymbol.class,
+                        PICTURE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+                        PICTURE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME
+                            + " Persistence definition",
+                        null,
+                        null);
+
+                // Extend the Style base definition
+                definition.extend(manager.getDefinition(MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+                definition.addDynFieldBoolean(SELECTED).setMandatory(false);
+                definition.addDynFieldObject(SELECTION_SYMBOL).setMandatory(false)
+                    .setClassOfValue(PictureMarkerSymbol.class).setMandatory(false);
+                definition.addDynFieldObject(BACKGROUND_IMAGE)
+                    .setClassOfValue(BackgroundFileStyle.class).setMandatory(false);
+                definition.addDynFieldObject(BACKGROUND_SELECTION_IMAGE)
+                    .setClassOfValue(BackgroundFileStyle.class).setMandatory(false);
+            }
+            return Boolean.TRUE;
+        }
+    }
+    
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+
+	        manager.registerSymbol(PictureMarkerSymbol.PICTURE_MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+	            PictureMarkerSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/PictureMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/AbstractMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/AbstractMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/AbstractMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,297 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.AbstractSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Abstract class that any MARKER SYMBOL should extend.
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractMarkerSymbol extends AbstractSymbol implements IMarkerSymbol {
+    
+    public static final String MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME = "MarkerSymbol";    
+    
+    private static final String FIELD_COLOR = "color";
+
+    private static final String FIELD_ROTATION = "rotation";
+
+    private static final String FIELD_OFFSET = "offset";
+
+    private static final String FIELD_SIZE = "size";
+    
+    private static final String FIELD_MASK = "mask";
+    
+    private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private Color color;
+	private double rotation;
+	private Point2D offset = new Point2D.Double();
+	private double size = 4d;
+	private IMask mask;
+
+	public AbstractMarkerSymbol() {
+		super();
+		color =
+				MapContextLocator.getSymbolManager()
+						.getSymbolPreferences()
+						.getDefaultSymbolFillColor();
+	}
+
+	public final int getSymbolType() {
+		return Geometry.TYPES.POINT;
+	}
+
+	public double getRotation() {
+		return rotation;
+	}
+
+	public void setRotation(double r) {
+		this.rotation = r;
+	}
+
+	public Point2D getOffset() {
+		if (offset == null) {
+			offset = new Point();
+		}
+		return offset;
+	}
+
+	public void setOffset(Point2D offset) {
+		this.offset = offset;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return geom.getType() == Geometry.TYPES.POINT;
+	}
+
+	public int getOnePointRgb() {
+		return color.getRGB();
+	}
+
+	public double getSize() {
+		return size;
+	}
+
+	public void setSize(double size) {
+		this.size = size;
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public void setColor(Color color) {
+		this.color = color;
+	}
+
+	public void setAlpha(int outlineAlpha) {
+		Color color = getColor();
+		setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(),
+				outlineAlpha));
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances, ViewPort viewPort, int dpi) {
+		float cs = (float) getCartographicSize(viewPort, dpi, geom);
+		distances[0] = cs;
+		distances[1] = cs;
+	}
+
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		double originalSize = getSize();
+		double size=originalSize;
+		// scale it to size
+		int pq = properties.getPrintQuality();
+		if (pq == PrintAttributes.PRINT_QUALITY_NORMAL){
+			size *= (double) 300/72;
+		}else if (pq == PrintAttributes.PRINT_QUALITY_HIGH){
+			size *= (double) 600/72;
+		}else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT){
+			// size *= 72/72; // (which is the same than doing nothing)
+		}
+//		setSize(size);
+		draw(g,at,geom, null, null);
+//		setSize(originalSize);
+	}
+
+	public final IMask getMask() {
+		return mask;
+	}
+
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		try {
+			if (properties==null)
+				draw(g, scaleInstance, geomManager.createPoint(r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D), null, null);
+			else{
+				double originalSize = getSize();
+				double size=originalSize;
+				int pq = properties.getPrintQuality();
+				if (pq == PrintAttributes.PRINT_QUALITY_NORMAL){
+					size *= (double) 300/72;
+				}else if (pq == PrintAttributes.PRINT_QUALITY_HIGH){
+					size *= (double) 600/72;
+				}else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT){
+					// d *= 72/72; // (which is the same than doing nothing)
+				}
+				setSize(size);
+				print(g, scaleInstance, geomManager.createPoint(r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D), properties);
+				setSize(originalSize);
+			}
+
+
+
+		} catch (CreateGeometryException e) {
+			throw new SymbolDrawingException(TYPES.POINT);
+		}
+	}
+
+	public final void setMask(IMask mask) {
+		this.mask = mask;
+	}
+
+
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		setSize(cartographicSize);
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		double oldSize = getSize();
+		setCartographicSize(getCartographicSize(
+								viewPort,
+								dpi,
+								geom),
+							geom);
+		return oldSize;
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		return CartographicSupportToolkit.
+					getCartographicLength(this,
+										  getSize(),
+										  viewPort,
+										  dpi);
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		AbstractMarkerSymbol copy  = (AbstractMarkerSymbol) super.clone();
+		
+		// Clone the offset
+		if (offset != null) {
+			copy.offset = (Point2D) offset.clone();
+		}
+		
+		// clone the mask
+		if (mask != null) {
+			copy.mask = (IMask) mask.clone();
+		}
+		return copy;
+	}
+	
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent symbol properties
+		super.loadFromState(state);
+		// Set own properties
+		setColor((Color) state.get(FIELD_COLOR));
+		setMask((IMask) state.get(FIELD_MASK));
+		setOffset((Point2D) state.get(FIELD_OFFSET));
+		setRotation(state.getDouble(FIELD_ROTATION));
+		setSize(state.getDouble(FIELD_SIZE));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent symbol properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_COLOR, getColor());
+		state.set(FIELD_MASK, getMask());
+		state.set(FIELD_OFFSET, getOffset());
+		state.set(FIELD_ROTATION, getRotation());
+		state.set(FIELD_SIZE, getSize());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						AbstractMarkerSymbol.class,
+						MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the Symbol base definition
+				definition.extend(manager.getDefinition(SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Color
+				definition.addDynFieldObject(FIELD_COLOR).setMandatory(false).setClassOfValue(Color.class);
+				// Mask
+				definition.addDynFieldObject(FIELD_MASK).setMandatory(false).setClassOfValue(IMask.class);
+
+				// Offset
+				definition.addDynFieldObject(FIELD_OFFSET).setMandatory(false).setClassOfValue(Point2D.class);
+
+				// Rotation
+				definition.addDynFieldDouble(FIELD_ROTATION).setMandatory(true);
+
+				// Size
+				definition.addDynFieldDouble(FIELD_SIZE).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/AbstractMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/impl/SimpleTextSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/impl/SimpleTextSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/impl/SimpleTextSymbol.java	(revision 42196)
@@ -0,0 +1,515 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.impl;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.AbstractSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * SimpleTextSymbol is a class used to create symbols composed using a text defined by
+ * the user.This text can be edited (changing the color, the font of the characters, and
+ * the rotation of the text).
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class SimpleTextSymbol extends AbstractSymbol implements ITextSymbol, ISimpleTextSymbol {
+	final static private Logger LOG = LoggerFactory.getLogger(SimpleTextSymbol.class);
+
+	public static final String SIMPLE_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME = "SimpleTextSymbol";
+	
+	private static final String FIELD_TEXT = "text";
+	private static final String FIELD_FONT = "font";
+	private static final String FIELD_TEXT_COLOR = "textColor";
+	private static final String FIELD_ROTATION = "rotation";
+	private static final String FIELD_AUTO_RESIZE = "autoResize";
+	
+	private static final String FIELD_HAS_HALO = "hasHalo";
+	private static final String FIELD_HALO_COLOR = "haloColor";
+	private static final String FIELD_HALO_WIDTH = "haloWidth";
+
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	
+	/*
+	 * This value must be get using getText() if the 'null'
+	 * value has to prevented
+	 */
+	private String text = "";
+	private Font font;
+	
+	private Color haloColor = Color.WHITE;
+	private float haloWidth = 3;
+	private boolean drawWithHalo = false;
+	private BasicStroke haloStroke = new BasicStroke(
+			6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
+
+	private Color textColor;
+	private double rotation;
+	private FontRenderContext frc = new FontRenderContext(
+			new AffineTransform(), false, true);
+	private boolean autoresize;
+
+	public SimpleTextSymbol() {
+		super();
+		SymbolPreferences preferences =
+				MapContextLocator.getSymbolManager().getSymbolPreferences();
+		font = preferences.getDefaultSymbolFont();
+		textColor = preferences.getDefaultSymbolColor();
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+		if (!isShapeVisible()) {
+			return;
+		}
+		
+		Point point = (Point)geom;
+	    point.transform(affineTransform);
+	  
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		g.translate(point.getX(), point.getY());
+
+		g.rotate(rotation);
+		
+		if (isDrawWithHalo()) {
+			char[] charText = new char[getText().length()];
+			getText().getChars(0, charText.length, charText, 0);
+			GlyphVector glyph = font.layoutGlyphVector(frc, charText, 0, charText.length, Font.LAYOUT_NO_LIMIT_CONTEXT);
+			g.setColor(getHaloColor());
+			g.setStroke(haloStroke);
+			g.draw(glyph.getOutline());
+		}
+		// Rectangle2D bounds = getBounds();
+//		 getBounds devuelve el bounds de un texto dibujado de manera que
+		// la linea base de la primera letra est� en el punto (0,0).
+		// Por eso, si queremos alinear el texto de manera que la parte superior
+		// izquierda de la primera letra est� en (0,0) debemos moverlo seg�n
+		// el valor de la ordenada, en lugar de seg�n su altura.
+		g.setColor(textColor);
+		g.setFont(font);
+
+		g.drawString(getText(), 0, 0);//(int) bounds.getHeight());
+		g.rotate(-rotation);
+		g.translate(-point.getX(), -point.getY());
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		int s = getFont().getSize();
+		if (autoresize) {
+			if (s==0) {
+				s =1;
+				setFontSize(s);
+			}
+			g.setFont(getFont());
+		    FontMetrics fm = g.getFontMetrics();
+		    Rectangle2D rect = fm.getStringBounds(getText(), g);
+		    double width = rect.getWidth();
+		    double height = rect.getHeight();
+		    double rWidth = r.getWidth();
+		    double rHeight = r.getHeight();
+		    double ratioText = width/height;
+		    double ratioRect = rWidth/rHeight;
+
+		    if (ratioText>ratioRect) {
+		    	s = (int) (s*(rWidth/width));
+		    } else {
+		    	s = (int) (s*(rHeight/height));
+		    }
+//		    r.setLocation(r.x, (int) Math.round(r.getY()+r.getHeight()));
+		}
+		setFontSize(s);
+//		g.setColor(Color.red);
+//		g.draw(r);
+		try {
+			if (properties==null)
+				draw(g, null, geomManager.createPoint(
+						r.getX(),
+						// Small adjustment to center the fonts
+						r.getY() + 0.725 * r.getHeight(),
+						SUBTYPES.GEOM2D), null, null);
+			else
+				print(g, new AffineTransform(), geomManager.createPoint(r.getX(), r.getY(), SUBTYPES.GEOM2D), properties);
+		} catch (CreateGeometryException e) {
+			LOG.error("Error creatint a point", e);
+			e.printStackTrace();
+		}
+
+
+	}
+
+	public int getOnePointRgb() {
+		return textColor.getRGB();
+	}
+
+	public void getPixExtentPlus(org.gvsig.fmap.geom.Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public ISymbol getSymbolForSelection() {
+		return this; // a text is not selectable
+	}
+
+	public int getSymbolType() {
+		//This method returned the deleted type Geometry.TYPES.TEXT. I suppose that now
+	    //it has to retrun geometry
+	    return Geometry.TYPES.GEOMETRY;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return true;
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void print(Graphics2D g, AffineTransform at, org.gvsig.fmap.geom.Geometry geom, PrintAttributes properties){
+		float originalSize = getFont().getSize2D();
+		float size=originalSize;
+		// scale it to size
+		int pq = properties.getPrintQuality();
+		if (pq == PrintAttributes.PRINT_QUALITY_NORMAL){
+			size *= (double) 300/72;
+		}else if (pq == PrintAttributes.PRINT_QUALITY_HIGH){
+			size *= (double) 600/72;
+		}else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT){
+			// d *= 72/72; // (which is the same than doing nothing)
+		}
+		setFont(getFont().deriveFont(size));
+		draw(g,at,geom, null, null);
+		setFont(getFont().deriveFont(originalSize));
+	}
+
+	public String getText() {
+	    if (text == null) {
+	        return "";
+	    } else {
+	        return text;
+	    }
+	}
+
+	public Font getFont() {
+		return font;
+	}
+
+	public Color getTextColor() {
+		return textColor;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	public void setFont(Font font) {
+		if (font == null) {
+			LOG.warn("font <-- null");
+
+			return;
+		}
+		this.font = font;
+	}
+
+	public void setTextColor(Color color) {
+		this.textColor = color;
+	}
+	
+	public Color getColor() {
+		return getTextColor();
+	}
+	
+	public void setColor(Color color) {
+		setTextColor(color);
+	}
+
+	public void setFontSize(double size) {
+		Font newFont = new Font(font.getName(), font.getStyle(), (int) size);
+//		if (newFont == null) {
+//			logger.warn(
+//					"Font(" + font.getName() + ", "
+//					+ font.getStyle() + ", " + (int) size + " --> null");
+//		} else {
+			this.font = newFont;
+//		}
+	}
+
+	public double getRotation() {
+		return rotation;
+	}
+
+	/**
+	 * Defines the angle of rotation for the text that composes the symbol
+	 *
+	 * @param rotation
+	 */
+	public void setRotation(double rotation) {
+		this.rotation = rotation;
+	}
+
+	/**
+	 * Returns an Geometry which represents a rectangle containing the text in
+	 * <b>screen</b> units.
+	 */
+	public Geometry getTextWrappingShape(org.gvsig.fmap.geom.primitive.Point p) {
+		Font font = getFont();
+		GlyphVector gv = font.createGlyphVector(frc, getText());
+
+		Shape shape = gv.getOutline((float) p.getX(), (float) p.getY());
+		Geometry myFShape;
+		try {
+			myFShape = geomManager.createSurface(new GeneralPathX(shape
+					.getBounds2D().getPathIterator(null)), SUBTYPES.GEOM2D);
+			myFShape.transform(AffineTransform.getTranslateInstance(p.getX(), p.getY()));
+
+			if (rotation != 0) {
+				myFShape.transform(AffineTransform.getRotateInstance(rotation));
+			}
+			return myFShape;
+		} catch (CreateGeometryException e) {
+			LOG.error("Error creating a surface", e);
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public Rectangle getBounds() {
+//		FontMetrics fm = g.getFontMetrics();
+//		Rectangle2D rect = fm.getStringBounds("graphics", g);
+
+		Rectangle bounds = null;
+		try {
+			bounds = getTextWrappingShape(geomManager.createPoint(0,0, SUBTYPES.GEOM2D)).getShape().getBounds();
+		} catch (CreateGeometryException e) {
+			LOG.error("Error creating a point", e);
+		}
+		return bounds;
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		setFontSize(cartographicSize);
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		double oldSize = getFont().getSize();
+		setCartographicSize(getCartographicSize(
+								viewPort,
+								dpi,
+								geom),
+							geom);
+		return oldSize;
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		return CartographicSupportToolkit.
+					getCartographicLength(this,
+										  getFont().getSize(),
+										  viewPort,
+										  dpi);
+	}
+	public boolean isAutoresizeEnabled() {
+		return autoresize;
+	}
+
+	public void setAutoresizeEnabled(boolean autoresizeFlag) {
+		this.autoresize = autoresizeFlag;
+	}
+
+	
+	public Object clone() throws CloneNotSupportedException {
+		SimpleTextSymbol copy = (SimpleTextSymbol) super.clone();
+
+		return copy;
+	}
+
+	public void loadFromState(PersistentState state)
+	
+			throws PersistenceException {
+		// Set parent fill symbol properties
+		super.loadFromState(state);
+
+		// Set own properties
+		setAutoresizeEnabled(state.getBoolean(FIELD_AUTO_RESIZE));
+		setFont((Font) state.get(FIELD_FONT));
+		setRotation(state.getDouble(FIELD_ROTATION));
+		setText(state.getString(FIELD_TEXT));
+		setTextColor((Color) state.get(FIELD_TEXT_COLOR));
+		// halo
+		this.setDrawWithHalo(state.getBoolean(FIELD_HAS_HALO));
+		this.setHaloColor((Color) state.get(FIELD_HALO_COLOR));
+		this.setHaloWidth(state.getFloat(FIELD_HALO_WIDTH));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Save own properties
+		state.set(FIELD_AUTO_RESIZE, isAutoresizeEnabled());
+		state.set(FIELD_FONT, getFont());
+		state.set(FIELD_ROTATION, getRotation());
+		state.set(FIELD_TEXT, getText());
+		state.set(FIELD_TEXT_COLOR, getTextColor());
+		// halo
+		state.set(FIELD_HAS_HALO, this.isDrawWithHalo());
+		state.set(FIELD_HALO_COLOR, this.getHaloColor());
+		state.set(FIELD_HALO_WIDTH, this.getHaloWidth());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SIMPLE_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						SimpleTextSymbol.class,
+						SIMPLE_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						SIMPLE_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the Symbol base definition
+				definition.extend(manager.getDefinition(SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Auto resize?
+				definition.addDynFieldBoolean(FIELD_AUTO_RESIZE)
+					.setMandatory(true);
+				
+				// Font
+				definition.addDynFieldObject(FIELD_FONT)
+					.setClassOfValue(Font.class)
+					.setMandatory(true);
+				
+				// Rotation
+				definition.addDynFieldDouble(FIELD_ROTATION)
+					.setMandatory(true);
+				
+				// Text
+				definition.addDynFieldString(FIELD_TEXT);
+				
+				// Text color
+				definition.addDynFieldObject(FIELD_TEXT_COLOR)
+					.setClassOfValue(Color.class)
+					.setMandatory(true);
+				
+				// halo
+				definition.addDynFieldBoolean(FIELD_HAS_HALO).setMandatory(true);
+				definition.addDynFieldObject(FIELD_HALO_COLOR).setClassOfValue(
+						Color.class).setMandatory(true);
+				definition.addDynFieldFloat(FIELD_HALO_WIDTH).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			int[] shapeTypes;
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+	        
+			//This method registered the deleted type Geometry.TYPES.TEXT. I suppose that now
+	        //it has to register geometry
+	        shapeTypes = new int[] { Geometry.TYPES.GEOMETRY };
+	        manager.registerSymbol(ITextSymbol.SYMBOL_NAME,
+	            shapeTypes,
+	            SimpleTextSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	
+	public Color getHaloColor() {
+		return haloColor;
+	}
+
+	public void setHaloColor(Color co) {
+		if (co != null) {
+			this.haloColor = co;
+		}
+	}
+
+	public float getHaloWidth() {
+		return haloWidth;
+	}
+
+	public void setHaloWidth(float haloWidth) {
+		this.haloWidth = haloWidth;
+		this.haloStroke = new BasicStroke(
+				2*haloWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
+	}
+
+	public boolean isDrawWithHalo() {
+		return drawWithHalo;
+	}
+
+	public void setDrawWithHalo(boolean drawWithHalo) {
+		this.drawWithHalo = drawWithHalo;
+	}
+
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/impl/SimpleTextSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/warning/impl/WarningSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/warning/impl/WarningSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/warning/impl/WarningSymbol.java	(revision 42196)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.warning.impl;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Ellipse2D;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.MultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.impl.SimpleTextSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Warning symbol
+ * 
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class WarningSymbol extends MultiShapeSymbol implements IWarningSymbol {
+
+	public static final String WARNING_SYMBOL_PERSISTENCE_DEFINITION_NAME = "WarningSymbol";
+
+	private static final String FIELD_DESCRIPTION = "description";
+	private static final String FIELD_MESSAGE = "message";
+	private static final String FIELD_EXCEPTION_TYPE = "exceptionType";
+
+	private String message;
+	private int exceptionType;
+	private SimpleTextSymbol text;
+
+	/**
+	 * Empty constructor, only used in persistence.
+	 */
+	public WarningSymbol() {
+		super();
+	}
+
+	public WarningSymbol(String message, String symbolDesc,
+			int symbolDrawExceptionType) {
+		super();
+		this.message = message;
+		this.exceptionType = symbolDrawExceptionType;
+		setDescription(symbolDesc);
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Cancellable cancel) {
+		try {
+			drawInsideRectangle(g, g.getTransform(), geom.getShape().getBounds(), null);
+		} catch (SymbolDrawingException e) {
+			// IMPOSSIBLE
+		}
+	}
+
+	public void setDrawExceptionType(int symbolDrawExceptionType) {
+		this.exceptionType = symbolDrawExceptionType;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	private String getMessage() {
+		return message;
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r,
+			PrintAttributes properties) throws SymbolDrawingException {
+		g.setClip(r);
+		if (message == null) {
+			message = "Symbol undrawable.\nPlease, check errors.";
+		}
+
+		String[] messageLines = CompatLocator.getStringUtils().split(message,
+				"\n");
+		int strokeWidth = (int) (Math.min(r.width, r.height) * .1);
+
+		if (strokeWidth == 0) {
+			strokeWidth = 1;
+		}
+		g.setColor(Color.red);
+		g.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_BUTT,
+				BasicStroke.JOIN_ROUND));
+		int width = r.width - (strokeWidth + strokeWidth);
+		int height = r.height - (strokeWidth + strokeWidth);
+		double radius = Math.min(width, height) * .5;
+		double centerX = r.getCenterX();
+		double centerY = r.getCenterY();
+		Ellipse2D circle = new Ellipse2D.Double(centerX - radius, centerY
+				- radius, 2 * radius, 2 * radius);
+		g.draw(circle);
+		g.setClip(circle);
+		double aux = Math.cos(Math.PI * 0.25) * radius;
+		g.drawLine((int) (centerX - aux), (int) (centerY - aux),
+				(int) (centerX + aux), (int) (centerY + aux));
+		int fontSize = 20;
+		g.setFont(new Font("Arial", fontSize, Font.PLAIN));
+		g.setColor(Color.black);
+		g.setClip(null);
+
+		if (text == null) {
+			text = new SimpleTextSymbol();
+			text.setAutoresizeEnabled(true);
+
+		}
+
+		double lineHeight = (r.getHeight() - 6) / messageLines.length;
+		Rectangle textRect = new Rectangle((int) r.getMinX(),
+				(int) r.getMinY() + 6, (int) r.getWidth(), (int) lineHeight);
+		for (int i = 0; i < messageLines.length; i++) {
+			text.setText(messageLines[i]);
+			text.drawInsideRectangle(g, null, textRect, null);
+			textRect.setLocation((int) r.getX(), (int) (r.getY() + r
+					.getHeight()));
+		}
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		WarningSymbol copy = (WarningSymbol) super.clone();
+
+		if (text != null) {
+			copy.text = (SimpleTextSymbol) text.clone();
+		}
+
+		return copy;
+	}
+
+	/**
+	 * @return the exceptionType
+	 */
+	private int getExceptionType() {
+		return exceptionType;
+	}
+
+	/**
+	 * @param exceptionType
+	 *            the exceptionType to set
+	 */
+	private void setExceptionType(int exceptionType) {
+		this.exceptionType = exceptionType;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		setDescription(state.getString(FIELD_DESCRIPTION));
+		setExceptionType(state.getInt(FIELD_EXCEPTION_TYPE));
+		setMessage(state.getString(FIELD_MESSAGE));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_DESCRIPTION, getDescription());
+		state.set(FIELD_EXCEPTION_TYPE, getExceptionType());
+		state.set(FIELD_MESSAGE, getMessage());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(WARNING_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						WarningSymbol.class,
+						WARNING_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						WARNING_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Description
+				definition.addDynFieldString(FIELD_DESCRIPTION).setMandatory(true);
+				// Exception type
+				definition.addDynFieldInt(FIELD_EXCEPTION_TYPE).setMandatory(true);
+				// Message
+				definition.addDynFieldString(FIELD_MESSAGE).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+	        SymbolManager manager = MapContextLocator.getSymbolManager();
+	        
+	        manager.registerSymbol(IWarningSymbol.SYMBOL_NAME,
+	                WarningSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/warning/impl/WarningSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/SimpleFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/SimpleFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/SimpleFillSymbol.java	(revision 42196)
@@ -0,0 +1,219 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.ISimpleFillSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Basic fill symbol. It will allow to paint a shape with its filling color (and transparency) and the outline.
+ * @author 2005-2008  jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class SimpleFillSymbol extends AbstractFillSymbol implements ISimpleFillSymbol {
+	
+
+	private static final String SIMPLE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME = "SimpleFillSymbol";
+	
+	private static final Logger LOG = LoggerFactory.getLogger(SimpleFillSymbol.class);
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+    private static final String FIELD_SYMBOL_FOR_SELECTION = "symbolForSelection";
+
+	private SimpleFillSymbol symbolForSelection;
+
+	public ISymbol getSymbolForSelection() {
+		if (symbolForSelection == null) {
+			SimpleFillSymbol selectionSymbol = (SimpleFillSymbol) cloneForSelection();
+			if (selectionSymbol != null) {
+				selectionSymbol.setHasFill(true);
+				setSymbolForSelection(selectionSymbol);
+			}
+		}
+		return symbolForSelection;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+		Color c = getFillColor();
+
+		if (c!=null && hasFill()) {
+			g.setColor(c);
+			g.fill(geom.getShape(affineTransform));
+		}
+		if (getOutline() != null && hasOutline()) {
+			getOutline().draw(g, affineTransform, geom, feature, cancel);
+		}
+	}
+
+
+	public int getSymbolType() {
+		return Geometry.TYPES.SURFACE;
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		Rectangle rect = new Rectangle(r.x, r.y, r.width, r.height);
+		rect.setFrame(((int) rect.getMinX())+1, ((int) rect.getMinY())+1, ((int) rect.getWidth())-2, ((int) rect.getHeight())-2);
+		Geometry geom;
+		try {
+			geom = geomManager.createSurface(new GeneralPathX(rect.getPathIterator(null)), SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			LOG.error("Creating a surface", e);
+			throw new SymbolDrawingException(getSymbolType());
+		}
+
+		Color c = getFillColor();
+		if (c != null && hasFill()) {
+			g.setColor(c);
+			g.fillRect(rect.x, rect.y, rect.width, rect.height);
+		}
+
+		if (getOutline() != null && hasOutline()) {
+			if (properties==null)
+				getOutline().draw(g, scaleInstance, geom, null, null);
+			else
+				print(g, new AffineTransform(), geom, properties);
+		}
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		Color c = getFillColor();
+		if (c!=null && hasFill()) {
+			g.setColor(c);
+			g.fill(geom.getShape(at));
+		}
+		if (getOutline() != null && hasOutline()) {
+			getOutline().print(g, at, geom, properties);
+		}
+	}
+	
+	
+	public Object clone() throws CloneNotSupportedException {
+		SimpleFillSymbol copy = (SimpleFillSymbol) super.clone();
+
+		// Clone selection
+		if (symbolForSelection != null) {
+			copy.symbolForSelection = (SimpleFillSymbol) symbolForSelection
+					.clone();
+		}
+
+		return copy;
+	}
+	
+	private void setSymbolForSelection(SimpleFillSymbol symbolForSelection) {
+		this.symbolForSelection = symbolForSelection;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent fill symbol properties
+		super.loadFromState(state);
+		 setSymbolForSelection((SimpleFillSymbol)state.get(FIELD_SYMBOL_FOR_SELECTION));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+
+		// Don't use the getSymbolForSelection method, as it will create it
+		// if it does not exist, and persistence will enter an infinite loop
+		 state.set(FIELD_SYMBOL_FOR_SELECTION, symbolForSelection);
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SIMPLE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						SimpleFillSymbol.class,
+						SIMPLE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						SIMPLE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the FillSymbol base definition
+				definition.extend(manager.getDefinition(FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Selection Symbol
+				definition.addDynFieldObject(FIELD_SYMBOL_FOR_SELECTION).setClassOfValue(SimpleFillSymbol.class).setMandatory(false);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+	        int[] shapeTypes;
+	        SymbolManager manager = MapContextLocator.getSymbolManager();
+	        
+	        shapeTypes =
+	            new int[] { Geometry.TYPES.SURFACE, Geometry.TYPES.CIRCLE,
+	                Geometry.TYPES.ELLIPSE, Geometry.TYPES.MULTISURFACE };
+	        manager.registerSymbol(IFillSymbol.SYMBOL_NAME,
+	            shapeTypes,
+	            SimpleFillSymbol.class);
+	        
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/SimpleFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/PictureFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/PictureFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/PictureFillSymbol.java	(revision 42196)
@@ -0,0 +1,482 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.TexturePaint;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.net.URL;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IBackgroundFileStyle;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IPictureFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.BackgroundFileStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleMarkerFillPropertiesStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * PictureFillSymbol allows to use an image file suported by gvSIG as a padding
+ * for the polygons.This image can be modified using methods to scale or rotate it.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class PictureFillSymbol extends AbstractFillSymbol implements IPictureFillSymbol {
+	private static final Logger logger = LoggerFactory.getLogger(PictureFillSymbol.class);
+
+    public static final String PICTURE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME =
+        "PictureFillSymbol";
+    private static final String SELECTED = "selected";
+    private static final String SELECTION_SYMBOL = "selectionSym";
+    private static final String BACKGROUND_IMAGE = "bgImage";
+    private static final String BACKGROUND_SELECTION_IMAGE = "bgSelImage";
+    private static final String ANGLE = "angle";
+    private static final String X_SCALE = "xScale";
+    private static final String Y_SCALE = "yScale";
+    private static final String MARKER_FILL_PROPERTIES = "markerFillProperties";
+
+	private double angle = 0;
+	private double xScale = 1;
+	private double yScale = 1;
+	transient private PictureFillSymbol selectionSym;
+	private boolean selected;
+	private IMarkerFillPropertiesStyle markerFillProperties = new SimpleMarkerFillPropertiesStyle();
+	private BackgroundFileStyle bgImage;
+	private BackgroundFileStyle bgSelImage;
+	private PrintAttributes properties;
+	private GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+	private void draw(Graphics2D g, AffineTransform affineTransform, Geometry geom, Cancellable cancel) {
+ 		Color fillColor = getFillColor();
+ 		
+ 		Shape transf_geom = geom.getShape(affineTransform);
+ 		
+		if (fillColor != null) {
+			g.setColor(fillColor);
+			g.fill(transf_geom);
+		}
+
+		g.setClip(transf_geom);
+		BackgroundFileStyle bg = (!selected) ? bgImage : bgSelImage ;
+		if (bg != null && bg.getBounds() != null){
+			int sizeW=(int) ((int)bg.getBounds().getWidth() * xScale);
+			int sizeH=(int) ((int)bg.getBounds().getHeight() * yScale);
+			Rectangle rProv = new Rectangle();
+			rProv.setFrame(0,0,sizeW,sizeH);
+			Paint resulPatternFill = null;
+			BufferedImage sample= null;
+
+			sample= new BufferedImage(sizeW,sizeH,BufferedImage.TYPE_INT_ARGB);
+			Graphics2D gAux = sample.createGraphics();
+
+			double xSeparation = markerFillProperties.getXSeparation(); // TODO apply CartographicSupport
+			double ySeparation = markerFillProperties.getYSeparation(); // TODO apply CartographicSupport
+			double xOffset = markerFillProperties.getXOffset();
+			double yOffset = markerFillProperties.getYOffset();
+
+			try {
+				bg.drawInsideRectangle(gAux, rProv);
+			} catch (SymbolDrawingException e) {
+				logger.warn(Messages.getText("label_style_could_not_be_painted"), e);
+			}
+
+			Dimension sz = rProv.getSize();
+			sz = new Dimension((int) Math.round(sz.getWidth()+(xSeparation)),
+					(int) Math.round(sz.getHeight() + (ySeparation)));
+			rProv.setSize(sz);
+
+			BufferedImage bi = new BufferedImage(rProv.width, rProv.height, BufferedImage.TYPE_INT_ARGB);
+			gAux = bi.createGraphics();
+			gAux.drawImage(sample, null, (int) (xSeparation*0.5), (int) (ySeparation*0.5));
+
+			rProv.x = rProv.x+(int)xOffset;
+			rProv.y = rProv.y+(int)yOffset;
+			resulPatternFill = new TexturePaint(bi,rProv);
+
+			g.setColor(null);
+			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+					RenderingHints.VALUE_ANTIALIAS_ON);
+
+			g.setPaint(resulPatternFill);
+		}
+		
+		if (angle == 0) {
+		    g.fill(transf_geom);
+		} else {
+
+            AffineTransform at = new AffineTransform();
+            at.rotate(angle);
+
+		    Geometry pixels_geom = geom.cloneGeometry();
+		    pixels_geom.transform(affineTransform);
+		    pixels_geom.transform(at);
+		    
+		    g.rotate(-angle);
+		    g.fill(pixels_geom.getShape());
+		    g.rotate(angle);
+		}
+
+		g.setClip(null);
+		if (getOutline()!=null) {
+			getOutline().draw(g, affineTransform, geom, null, cancel);
+		}
+	}
+
+	/**
+	 * Constructor method
+	 *
+	 */
+	public PictureFillSymbol() {
+		super();
+	}
+	/**
+	 * Constructor method
+	 * @param imageURL, URL of the normal image
+	 * @param selImageURL, URL of the image when it is selected in the map
+	 * @throws IOException
+	 */
+
+	public PictureFillSymbol(URL imageURL, URL selImageURL) throws IOException {
+		setImage(imageURL);
+		if (selImageURL!=null)
+			setSelImage(selImageURL);
+		else setSelImage(imageURL);
+	}
+
+
+	/**
+	 * Sets the URL for the image to be used as a picture fill symbol (when it is selected in the map)
+	 * @param imageFile, File
+	 * @throws IOException
+	 */
+	public void setSelImage(URL selImageUrl) throws IOException{
+
+		bgSelImage= BackgroundFileStyle.createStyleByURL(selImageUrl);
+//		selImagePath = selImageUrl.toString();
+	}
+
+
+
+	/**
+	 * Defines the URL from where the picture to fill the polygon is taken.
+	 * @param imageFile
+	 * @throws IOException
+	 */
+	public void setImage(URL imageUrl) throws IOException{
+		bgImage = BackgroundFileStyle.createStyleByURL(imageUrl);
+	}
+
+
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		Surface surf;
+		try {
+			surf = geometryManager.createSurface(new GeneralPathX(r.getPathIterator(new AffineTransform())), SUBTYPES.GEOM2D);
+			if (properties==null){
+				//			draw(g, null, new FPolygon2D(new GeneralPathX(r)), null);
+				draw(g, null, surf, null);
+			} else {
+				print(g, new AffineTransform(), surf, properties);
+			}
+		} catch (CreateGeometryException e) {
+			throw new SymbolDrawingException(TYPES.POINT);
+		}
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSym == null) {
+			selectionSym = (PictureFillSymbol) cloneForSelection();
+			selectionSym.selected=true;
+			selectionSym.selectionSym = selectionSym; // avoid too much lazy creations
+		}
+		return selectionSym;
+
+	}
+
+	public int getSymbolType() {
+		return Geometry.TYPES.SURFACE;
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom,
+			PrintAttributes properties) {
+		this.properties=properties;
+        draw(g, at, geom, null);
+        this.properties=null;
+	}
+	/**
+	 * Returns the IMarkerFillProperties that allows this class to treat the picture as
+	 * a marker in order to scale it, rotate it and so on.
+	 * @return markerFillProperties,IMarkerFillPropertiesStyle
+	 */
+	public IMarkerFillPropertiesStyle getMarkerFillProperties() {
+		return markerFillProperties;
+	}
+
+	/**
+	 * Sets the MarkerFillProperties in order to allow the user to modify the picture as
+	 * a marker (it is possible to scale it, rotate it and so on)
+	 * @param prop
+	 */
+	public void setMarkerFillProperties(IMarkerFillPropertiesStyle prop) {
+		this.markerFillProperties = prop;
+	}
+	/**
+	 * Defines the angle for the rotation of the image when it is added to create the
+	 * padding
+	 *
+	 * @return angle
+	 */
+	public double getAngle() {
+		return angle;
+	}
+	/**
+	 * Sets the angle for the rotation of the image when it is added to create the padding
+	 * @param angle
+	 */
+	public void setAngle(double angle) {
+		this.angle = angle;
+	}
+
+	/**
+	 * Defines the scale for the x axis of the image when it is added to create the
+	 * padding
+	 * @return xScale
+	 */
+	public double getXScale() {
+		return xScale;
+	}
+	/**
+	 * Returns the scale for the x axis of the image when it is added to create the
+	 * padding
+	 * @param xScale
+	 */
+	public void setXScale(double xScale) {
+		this.xScale = xScale;
+	}
+	/**
+	 * Defines the scale for the y axis of the image when it is added to create the
+	 * padding
+	 * @return yScale
+	 */
+	public double getYScale() {
+		return yScale;
+	}
+	/**
+	 * Returns the scale for the y axis of the image when it is added to create the
+	 * padding
+	 * @param yScale
+	 */
+	public void setYScale(double yScale) {
+		this.yScale = yScale;
+	}
+
+	/**
+	 * Returns the URL of the image that is used to create the padding to fill the
+	 * polygon
+	 * @return imagePath
+	 */
+	public URL getSource() {
+		if (bgImage != null){
+			return bgImage.getSource();
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the URL of the image used when the polygon is selected
+	 * @return
+	 */
+	public URL getSelectedSource(){
+		if( bgSelImage != null){
+			return bgSelImage.getSource();
+		}
+		return null;
+	}
+
+	
+
+	@Override
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		return super.toCartographicSize(viewPort, dpi, geom);
+		// this symbol cannot apply any cartographic transfomation to its filling
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature f, Cancellable cancel) {
+		draw(g, affineTransform, geom, cancel);
+		
+	}
+	
+    public Object clone() throws CloneNotSupportedException {
+    	PictureFillSymbol copy = (PictureFillSymbol) super.clone();
+
+        // clone selection
+    	if (selectionSym != null) {
+    		//Parche por lo que hace el m�todo getSymbolForSelection
+    		if (this == selectionSym){
+    			copy.selectionSym = copy;
+    		} else {
+    			copy.selectionSym = (PictureFillSymbol) selectionSym.clone();
+    		}
+    	}
+
+        // clone brackground image
+        if (bgImage != null) {
+            copy.bgImage = (BackgroundFileStyle) bgImage.clone();
+        }
+
+        // clone selection brackground image
+        if (bgSelImage != null) {
+            copy.bgSelImage = (BackgroundFileStyle) bgSelImage.clone();
+        }
+
+        // FIXME: clone properties
+        
+        return copy;
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        // Set parent style properties
+        super.loadFromState(state);
+
+        this.selected = (Boolean) state.get(SELECTED);
+        this.selectionSym = (PictureFillSymbol) state.get(SELECTION_SYMBOL);
+        this.bgImage = (BackgroundFileStyle) state.get(BACKGROUND_IMAGE);
+        this.bgSelImage =
+            (BackgroundFileStyle) state.get(BACKGROUND_SELECTION_IMAGE);
+
+    
+        this.angle = (Double) state.get(ANGLE);
+        this.xScale = (Double) state.get(X_SCALE);
+        this.yScale = (Double) state.get(Y_SCALE);
+        this.markerFillProperties = (IMarkerFillPropertiesStyle) state.get(MARKER_FILL_PROPERTIES);
+
+    
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // Save parent fill symbol properties
+        super.saveToState(state);
+
+        // Save own properties
+        state.set(SELECTED, this.selected);
+        state.set(SELECTION_SYMBOL, this.getSymbolForSelection());
+        state.set(BACKGROUND_IMAGE, this.bgImage);
+        state.set(BACKGROUND_SELECTION_IMAGE, this.bgSelImage);
+        state.set(ANGLE, this.angle);
+        state.set(X_SCALE, this.xScale);
+        state.set(Y_SCALE, this.yScale);
+        state.set(MARKER_FILL_PROPERTIES, this.markerFillProperties);
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if (manager.getDefinition(PICTURE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME) == null) {
+                DynStruct definition =
+                    manager.addDefinition(PictureFillSymbol.class,
+                    		PICTURE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+                    		PICTURE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME
+                            + " Persistence definition",
+                        null,
+                        null);
+
+                // Extend the Style base definition
+                definition.extend(manager.getDefinition(FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+                definition.addDynFieldBoolean(SELECTED).setMandatory(false);
+                definition.addDynFieldObject(SELECTION_SYMBOL)
+                    .setClassOfValue(PictureFillSymbol.class).setMandatory(false);
+                definition.addDynFieldObject(BACKGROUND_IMAGE)
+                    .setClassOfValue(BackgroundFileStyle.class).setMandatory(false);
+                definition.addDynFieldObject(BACKGROUND_SELECTION_IMAGE)
+                    .setClassOfValue(BackgroundFileStyle.class).setMandatory(false);
+                definition.addDynFieldDouble(ANGLE).setMandatory(true);
+                definition.addDynFieldDouble(X_SCALE).setMandatory(true);
+                definition.addDynFieldDouble(Y_SCALE).setMandatory(true);
+                definition.addDynFieldObject(MARKER_FILL_PROPERTIES)
+                .setClassOfValue(IMarkerFillPropertiesStyle.class).setMandatory(true);
+            }
+            return Boolean.TRUE;
+        }
+    }
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+	        SymbolManager manager = MapContextLocator.getSymbolManager();
+	        
+	        manager.registerSymbol(PICTURE_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+	            PictureFillSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public IBackgroundFileStyle getBackgroundFileStyle() {
+		return this.bgImage;
+	}
+
+	public IBackgroundFileStyle getSelectedBackgroundFileStyle() {
+		return this.bgSelImage;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/PictureFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MarkerFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MarkerFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MarkerFillSymbol.java	(revision 42196)
@@ -0,0 +1,630 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: MarkerFillSymbol.java 16176 2007-11-08 16:07:26Z jdominguez $
+* $Log$
+* Revision 1.19  2007-09-21 12:25:32  jaume
+* cancellation support extended down to the IGeometry and ISymbol level
+*
+* Revision 1.18  2007/09/20 11:53:11  jvidal
+* bug solved
+*
+* Revision 1.16  2007/08/09 10:39:41  jaume
+* first round of found bugs fixed
+*
+* Revision 1.15  2007/08/08 12:04:05  jvidal
+* javadoc
+*
+* Revision 1.14  2007/08/03 09:22:09  jaume
+* refactored class names
+*
+* Revision 1.13  2007/08/02 11:13:50  jaume
+* char encoding fix
+*
+* Revision 1.12  2007/08/01 11:45:59  jaume
+* passing general tests (drawing test yet missing)
+*
+* Revision 1.11  2007/07/23 06:52:25  jaume
+* default selection color refactored, moved to MapContext
+*
+* Revision 1.10  2007/05/28 15:36:42  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2007/05/08 08:47:40  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2007/03/28 16:48:14  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/03/26 14:25:17  jaume
+* implements IPrintable
+*
+* Revision 1.6  2007/03/21 17:36:22  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2007/03/13 16:58:36  jaume
+* Added QuantityByCategory (Multivariable legend) and some bugfixes in symbols
+*
+* Revision 1.4  2007/03/09 11:20:57  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.2.2.4  2007/02/16 10:54:12  jaume
+* multilayer splitted to multilayerline, multilayermarker,and  multilayerfill
+*
+* Revision 1.2.2.3  2007/02/15 16:23:44  jaume
+* *** empty log message ***
+*
+* Revision 1.2.2.2  2007/02/12 15:15:20  jaume
+* refactored interval legend and added graduated symbol legend
+*
+* Revision 1.2.2.1  2007/02/09 07:47:05  jaume
+* Isymbol moved
+*
+* Revision 1.2  2007/01/10 16:39:41  jaume
+* ISymbol now belongs to com.iver.cit.gvsig.fmap.core.symbols package
+*
+* Revision 1.1  2007/01/10 16:31:36  jaume
+* *** empty log message ***
+*
+* Revision 1.10  2006/11/09 18:39:05  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2006/11/09 10:22:50  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2006/11/08 13:05:51  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/11/08 10:56:47  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/11/07 08:52:30  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/06 17:08:45  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.2  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.TexturePaint;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.util.Random;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IMarkerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.PictureMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleMarkerFillPropertiesStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Allows to define a marker symbol of any type as a path image to be used for a filled of a
+ * polygon's padding
+ *
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class MarkerFillSymbol extends AbstractFillSymbol implements IMarkerFillSymbol {
+	private static final Logger logger = LoggerFactory.getLogger(MarkerFillSymbol.class);
+	
+    public static final String MARK_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME =
+        "MarkerFillSymbol";
+    private static final String MARKER_SYMBOL = "markerSymbol";
+    private static final String SELECTION_SYMBOL = "selectionSymbol";
+    private static final String MARKER_FILL_PROPERTIES = "markerFillProperties";
+    private static final String PREVIOUS_MARKERSIZE = "previousMarkerSize";
+
+	public static final int RANDOM_FILL = 3;
+	public static final int GRID_FILL = 1;
+	public static final int SINGLE_CENTERED_SYMBOL = 2;
+	public static int DefaultFillStyle = GRID_FILL;
+	private MarkerFillSymbol selectionSymbol;
+	private IMarkerFillPropertiesStyle markerFillProperties = new SimpleMarkerFillPropertiesStyle();
+	private IMarkerSymbol markerSymbol = (IMarkerSymbol) MapContextLocator.getSymbolManager().createSymbol(IMarkerSymbol.SYMBOL_NAME);
+	private double previousMarkerSize = markerSymbol.getSize();
+	private PrintAttributes properties;
+	private GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSymbol == null) {
+			selectionSymbol = (MarkerFillSymbol) cloneForSelection();
+			selectionSymbol.setFillColor(MapContext.getSelectionColor());
+		}
+
+		return selectionSymbol;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform, Geometry geom, Feature feat, Cancellable cancel) {
+		Point centroid = null;
+		Point p = null;
+			switch (markerFillProperties.getFillStyle()) {
+			case SINGLE_CENTERED_SYMBOL:
+				// case a single marker is used into a polygon shapetype
+				//			Geometry geom = FConverter.java2d_to_jts(geom);
+				//			com.vividsolutions.jts.geom.Point centroid = geom.getCentroid();
+				try {
+					centroid = geom.centroid();
+				} catch (GeometryOperationNotSupportedException e2) {
+					logger.warn("Can't get centroid", e2);
+				} catch (GeometryOperationException e2) {
+					logger.warn("Can't get centroid", e2);
+				}
+
+				/*
+				 * Hay ocasiones en que jts no puede calcular un centroide y devuelve NaN
+				 * (por ejemplo con geometr�as poligonales cuyos puntos tienen todos la misma
+				 * abscisa y distinta ordenada con tan solo una diferencia de 1 � 2 unidades)
+				 * entonces, en lugar de utilizar este centroide tomamos el centro del
+				 * bounds del shp (la geometr�a es tan peque�a que consideramos que deben coincidir).
+				 */
+				p = null;
+				if(centroid!=null && !(Double.isNaN(centroid.getX()) || Double.isNaN(centroid.getY()))){
+					double pX = centroid.getX()+markerFillProperties.getXOffset();
+					double pY = centroid.getY()+markerFillProperties.getYOffset();
+					try {
+						p = geometryManager.createPoint(pX, pY, SUBTYPES.GEOM2D);
+					} catch (CreateGeometryException e) {
+						logger.error("Can't create the point ("+pX+","+pY+")", e);
+					}
+					if (p != null) {
+						markerSymbol.draw(g, affineTransform, p, feat, null);
+					}
+				} else {
+					double pX = geom.getShape().getBounds().getCenterX();
+					double pY = geom.getShape().getBounds().getCenterY();
+					try {
+					p = geometryManager.createPoint(pX, pY, SUBTYPES.GEOM2D);
+					} catch (CreateGeometryException e) {
+						logger.error("Can't create the point ("+pX+","+pY+")", e);
+					}
+					if (p != null) {
+						markerSymbol.draw(g, affineTransform, p, feat, null);
+					}
+				}
+				break;
+			case GRID_FILL:
+				// case a grid fill is used
+			{
+				Rectangle rClip = null;
+				if (g.getClipBounds()!=null){
+					rClip=(Rectangle)g.getClipBounds().clone();
+					g.setClip(rClip.x, rClip.y, rClip.width, rClip.height);
+				}
+				g.clip(geom.getShape(affineTransform));
+
+				int size = (int) markerSymbol.getSize();
+				Rectangle rProv = new Rectangle();
+				rProv.setFrame(0, 0, size, size);
+				Paint resulPatternFill = null;
+
+				double xSeparation = markerFillProperties.getXSeparation(); // TODO apply CartographicSupport
+				double ySeparation = markerFillProperties.getYSeparation(); // TODO apply CartographicSupport
+				double xOffset = markerFillProperties.getXOffset();
+				double yOffset = markerFillProperties.getYOffset();
+
+				BufferedImage sample = null;
+				sample = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
+				Graphics2D gAux = sample.createGraphics();
+
+				try {
+					markerSymbol.drawInsideRectangle(gAux, gAux.getTransform(), rProv, null);
+				} catch (SymbolDrawingException e) {
+					if (e.getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS) {
+						try {
+							IWarningSymbol warning =
+								(IWarningSymbol) MapContextLocator.getSymbolManager()
+								.getWarningSymbol(
+										SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+										"",
+										SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+							warning.drawInsideRectangle(gAux, gAux.getTransform(), rProv, null);
+						} catch (SymbolDrawingException e1) {
+							// IMPOSSIBLE TO REACH THIS
+						}
+					} else {
+						// should be unreachable code
+						throw new Error(Messages.getText("symbol_shapetype_mismatch"));
+					}
+				}
+				rProv.setRect(0, 0,
+						rProv.getWidth() + xSeparation,
+						rProv.getHeight() + ySeparation);
+
+				BufferedImage bi = new BufferedImage(rProv.width, rProv.height, BufferedImage.TYPE_INT_ARGB);
+				gAux = bi.createGraphics();
+				gAux.drawImage(sample, null, (int) (xSeparation*0.5), (int) (ySeparation*0.5));
+
+				resulPatternFill = new TexturePaint(bi,rProv);
+				sample = null;
+				gAux.dispose();
+
+				g.setColor(null);
+				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+						RenderingHints.VALUE_ANTIALIAS_ON);
+
+				g.translate(xOffset, -yOffset);
+				g.setPaint(resulPatternFill);
+				g.fill(geom.getShape(affineTransform));
+				g.translate(-xOffset, +yOffset);
+				g.setClip(rClip);
+				bi = null;
+			}
+			break;
+			case RANDOM_FILL:
+			{
+
+				double s = markerSymbol.getSize();
+				Geometry auxgeo = geom.cloneGeometry();
+				auxgeo.transform(affineTransform);
+				Shape shp = auxgeo.getShape();
+				Rectangle r = shp.getBounds();
+				int drawCount = (int) (Math.min(r.getWidth(), r.getHeight())/s);
+				Random random = new Random();
+
+				int minx = r.x;
+				int miny = r.y;
+				int width = r.width;
+				int height = r.height;
+
+				r = new Rectangle();
+				g.setClip(shp);
+
+				for (int i = 0; (cancel==null || !cancel.isCanceled()) && i < drawCount; i++) {
+					int x = (int) Math.abs(random.nextDouble() * width);
+					int y = (int) Math.abs(random.nextDouble() * height);
+					x = x + minx;
+					y = y + miny;
+					//				markerSymbol.draw(g, new AffineTransform(), new FPoint2D(x, y), cancel);
+					p = null;
+					try {
+						p = geometryManager.createPoint(x, y, SUBTYPES.GEOM2D);
+					} catch (CreateGeometryException e) {
+						logger.error("Can't create the point ("+x+","+y+")", e);
+					}
+					if (p!=null){
+						markerSymbol.draw(g, new AffineTransform(), p, feat, cancel);
+					}
+				}
+				g.setClip(null);
+			}
+			break;
+			}
+			if(getOutline()!= null){
+				getOutline().draw(g, affineTransform, geom, feat, cancel);
+			}
+	}
+
+	public int getSymbolType() {
+		return Geometry.TYPES.SURFACE;
+	}
+
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		markerFillProperties.setSampleSymbol(markerSymbol);
+		Point p;
+		try {
+			switch (markerFillProperties.getFillStyle()) {
+			case SINGLE_CENTERED_SYMBOL:
+				p = geometryManager.createPoint(r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D);
+				markerSymbol.draw(g, null, p, null, null);
+				break;
+			case GRID_FILL:
+			{
+				g.setClip(r);
+				int size = (int) markerSymbol.getSize();
+				if (size <= 0 ) size = 1;
+				Rectangle rProv = new Rectangle();
+				rProv.setFrame(0, 0, size, size);
+				Paint resulPatternFill = null;
+
+				BufferedImage sample = null;
+				sample = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
+				Graphics2D gAux = sample.createGraphics();
+
+				double xSeparation = markerFillProperties.getXSeparation(); // TODO apply CartographicSupport
+				double ySeparation = markerFillProperties.getYSeparation(); // TODO apply CartographicSupport
+				double xOffset = markerFillProperties.getXOffset();
+				double yOffset = markerFillProperties.getYOffset();
+
+				markerSymbol.drawInsideRectangle(gAux, new AffineTransform(), rProv, properties);
+
+				rProv.setRect(0, 0,
+						rProv.getWidth() + xSeparation,
+						rProv.getHeight() + ySeparation);
+
+				BufferedImage bi = new BufferedImage(rProv.width, rProv.height, BufferedImage.TYPE_INT_ARGB);
+				gAux = bi.createGraphics();
+				gAux.drawImage(sample, null, (int) (xSeparation*0.5), (int) (ySeparation*0.5));
+
+
+				resulPatternFill = new TexturePaint(bi,rProv);
+				g.setColor(null);
+				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+						RenderingHints.VALUE_ANTIALIAS_ON);
+
+				g.translate(xOffset, -yOffset);
+				g.setPaint(resulPatternFill);
+				g.fill(r);
+				g.translate(-xOffset, yOffset);
+				g.setClip(null);
+			}
+			break;
+			case RANDOM_FILL:
+				g.setClip(r);
+				int x = r.x;
+				int y = r.y;
+				int width = r.width;
+				int height= r.height;
+				g.setBackground(null);
+
+				markerSymbol.draw(g, null, geometryManager.createPoint((x+width*0.2), (y+height*0.8), SUBTYPES.GEOM2D), null, null);
+				markerSymbol.draw(g, null, geometryManager.createPoint((x+width*0.634), (y+height*0.3), SUBTYPES.GEOM2D), null, null);
+				markerSymbol.draw(g, null, geometryManager.createPoint((x+width*0.26), (y+height*0.35), SUBTYPES.GEOM2D), null, null);
+				markerSymbol.draw(g, null, geometryManager.createPoint((x+width*0.45), (y+height*0.98), SUBTYPES.GEOM2D), null, null);
+				markerSymbol.draw(g, null, geometryManager.createPoint((x+width*0.9), (y+height*0.54), SUBTYPES.GEOM2D), null, null);
+				markerSymbol.draw(g, null, geometryManager.createPoint((x+width*1.1), (y+height*0.7), SUBTYPES.GEOM2D), null, null);
+				g.setClip(null);
+				break;
+			}
+			if(getOutline()!= null && hasOutline()){
+				if (properties==null) {
+					//				getOutline().draw(g, scaleInstance, new FPolyline2D(new GeneralPathX(r)), null);
+					getOutline().draw(g, scaleInstance, geometryManager.createPoint(r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D), null,  null);
+				} else {
+					//				getOutline().print(g, scaleInstance, new FPolyline2D(new GeneralPathX(r)), properties);
+					getOutline().print(g, scaleInstance, geometryManager.createPoint(r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D), properties);
+				}
+			}
+		} catch (CreateGeometryException e) {
+			throw new SymbolDrawingException(TYPES.POINT);
+		}
+	}
+
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void setMarker(IMarkerSymbol marker) {
+		this.markerSymbol = marker;
+	}
+
+	public IMarkerSymbol getMarker() {
+		return markerSymbol;
+	}
+
+	public Color getFillColor(){
+		return markerSymbol.getColor();
+	}
+
+	public void setFillColor (Color color) {
+		markerSymbol.setColor(color);
+	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		this.properties=properties;
+        draw(g, at, geom, null, null);
+        this.properties=null;
+
+	}
+	/**
+	 * Sets the markerfillproperties to be used by the class
+	 *
+	 * @param markerFillStyle,IMarkerFillPropertiesStyle
+	 */
+	public void setMarkerFillProperties(IMarkerFillPropertiesStyle markerFillStyle) {
+		this.markerFillProperties = markerFillStyle;
+	}
+
+	/**
+	 * Returns the markerfillproperties that are used by the class
+	 *
+	 * @return markerFillProperties,IMarkerFillPropertiesStyle
+	 */
+	public IMarkerFillPropertiesStyle getMarkerFillProperties() {
+		return markerFillProperties;
+	}
+
+	@Override
+	public void setUnit(int unitIndex) {
+		super.setUnit(unitIndex);
+		if (getMarker()!=null) {
+			getMarker().setUnit(unitIndex);
+		}
+	}
+
+	@Override
+	public void setReferenceSystem(int system) {
+		super.setReferenceSystem(system);
+		if (getMarker()!=null) {
+			getMarker().setReferenceSystem(system);
+		}
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		
+		super.setCartographicSize(cartographicSize, geom);
+		IMarkerSymbol marker = getMarker();
+		if (marker!=null) {
+				marker.setCartographicSize(previousMarkerSize, geom);
+			}
+		
+		super.setCartographicSize(cartographicSize, geom);
+
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		IMarkerSymbol marker = getMarker();
+		if (marker!=null) {
+			previousMarkerSize = marker.getSize();
+			double size = CartographicSupportToolkit.getCartographicLength(this, previousMarkerSize, viewPort, dpi);
+			marker.setSize(size);
+		}
+		double s = super.toCartographicSize(viewPort, dpi, geom);
+		return s;
+		
+	}
+	
+	
+    public Object clone() throws CloneNotSupportedException {
+    	MarkerFillSymbol copy = (MarkerFillSymbol) super.clone();
+
+        // clone marker
+        if (markerSymbol != null) {
+            copy.markerSymbol = (IMarkerSymbol) markerSymbol.clone();
+        }
+
+        // clone selection
+        if (selectionSymbol != null) {
+            copy.selectionSymbol = (MarkerFillSymbol) selectionSymbol.clone();
+        }
+
+        // clone markerFillProperties
+        if (markerFillProperties != null) {
+            copy.markerFillProperties = (IMarkerFillPropertiesStyle) markerFillProperties.clone();
+        }
+
+        // FIXME: clone properties
+        
+        return copy;
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        // Set parent style properties
+        super.loadFromState(state);
+
+        this.markerSymbol =  (IMarkerSymbol) state.get(MARKER_SYMBOL);
+        this.selectionSymbol = (MarkerFillSymbol) state.get(SELECTION_SYMBOL);
+        this.markerFillProperties = (IMarkerFillPropertiesStyle) state.get(MARKER_FILL_PROPERTIES);
+        this.previousMarkerSize = (Double) state.get(PREVIOUS_MARKERSIZE);
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // Save parent fill symbol properties
+        super.saveToState(state);
+
+        // Save own properties
+        state.set(MARKER_SYMBOL, this.markerSymbol);
+        state.set(SELECTION_SYMBOL, this.selectionSymbol);
+        state.set(MARKER_FILL_PROPERTIES, this.markerFillProperties);
+        state.set(PREVIOUS_MARKERSIZE, this.previousMarkerSize);
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if (manager.getDefinition(MARK_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME) == null) {
+                DynStruct definition =
+                    manager.addDefinition(MarkerFillSymbol.class,
+                    		MARK_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+                    		MARK_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME
+                            + " Persistence definition",
+                        null,
+                        null);
+
+                // Extend the Style base definition
+                definition.extend(manager.getDefinition(FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+                definition.addDynFieldObject(MARKER_SYMBOL)
+                .setClassOfValue(IMarkerSymbol.class).setMandatory(true);
+                definition.addDynFieldObject(SELECTION_SYMBOL)
+                    .setClassOfValue(IMarkerFillSymbol.class).setMandatory(false);
+                definition.addDynFieldObject(MARKER_FILL_PROPERTIES)
+                .setClassOfValue(IMarkerFillPropertiesStyle.class).setMandatory(true);
+                definition.addDynFieldDouble(PREVIOUS_MARKERSIZE);
+            }
+            return Boolean.TRUE;
+        }
+    }
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+	        int[] shapeTypes;
+	        SymbolManager manager = MapContextLocator.getSymbolManager();
+	        
+	        shapeTypes =
+	            new int[] { Geometry.TYPES.SURFACE, Geometry.TYPES.CIRCLE,
+	                Geometry.TYPES.ELLIPSE, Geometry.TYPES.MULTISURFACE };
+	        manager.registerMultiLayerSymbol(IFillSymbol.SYMBOL_NAME,
+	            shapeTypes,
+	            MarkerFillSymbol.class);
+	        
+			return Boolean.TRUE;
+		}
+		
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MarkerFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/AbstractFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/AbstractFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/AbstractFillSymbol.java	(revision 42196)
@@ -0,0 +1,246 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.AbstractSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Abstract class that any FILL SYMBOL should extend
+ * 
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractFillSymbol extends AbstractSymbol implements
+		IFillSymbol {
+
+	public static final String FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME = "FillSymbol";
+
+	private static final String FIELD_OUTLINE = "outline";
+
+	private static final String FIELD_HAS_OUTLINE = "hasOutline";
+
+	private static final String FIELD_HAS_FILL = "hasFill";
+
+	private static final String FIELD_COLOR = "color";
+
+	private boolean hasFill = true;
+	private boolean hasOutline = true;
+	private Color color;
+	private ILineSymbol outline;
+
+	public AbstractFillSymbol() {
+        super();
+        SymbolManager symbolManager = MapContextLocator.getSymbolManager();
+        SymbolPreferences symbolPreferences =
+            symbolManager.getSymbolPreferences();
+        color = symbolPreferences.getDefaultSymbolFillColor();
+
+        outline =
+            (ILineSymbol) symbolManager.createSymbol(ILineSymbol.SYMBOL_NAME);
+        outline.setColor(symbolPreferences.getDefaultSymbolColor());
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return geom.getType() == Geometry.TYPES.SURFACE;
+	}
+
+	public int getOnePointRgb() {
+		int rgb = 0;
+		if (outline != null) {
+			rgb = outline.getOnePointRgb();
+		} else if (color != null) {
+			rgb = color.getRGB();
+		}
+		return rgb;
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		if (getOutline() != null) {
+			getOutline().getPixExtentPlus(geom, distances, viewPort, dpi);
+		} else {
+			distances[0] = 0;
+			distances[1] = 0;
+		}
+	}
+
+	public void setFillColor(Color color) {
+		this.color = color;
+	}
+
+	public void setOutline(ILineSymbol outline) {
+		this.outline = outline;
+	}
+
+	public Color getFillColor() {
+		return color;
+	}
+
+	public ILineSymbol getOutline() {
+		return outline;
+	}
+
+	public int getFillAlpha() {
+		// TODO debatir si es correcto o no (por ejemplo cuando hablamos de
+		// LineFillSymbol's
+		if (color == null)
+			return 255;
+		return color.getAlpha();
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		if (getOutline() != null) {
+			getOutline().setLineWidth(cartographicSize);
+		}
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi,
+			Geometry geom) {
+		if (getOutline() != null) {
+			double oldSize = getOutline().getLineWidth();
+			setCartographicSize(getCartographicSize(viewPort, dpi, geom), geom);
+			return oldSize;
+		}
+		return 0;
+	}
+
+	public boolean hasFill() {
+		return hasFill;
+	}
+
+	public void setHasFill(boolean hasFill) {
+		this.hasFill = hasFill;
+	}
+
+	public boolean hasOutline() {
+		return hasOutline;
+	}
+
+	public void setHasOutline(boolean hasOutline) {
+		this.hasOutline = hasOutline;
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi,
+			Geometry geom) {
+		if (getOutline() != null) {
+			return CartographicSupportToolkit.getCartographicLength(this,
+					getOutline().getLineWidth(), viewPort, dpi);
+		}
+		return 0;
+	}
+
+	public void setUnit(int unitIndex) {
+		super.setUnit(unitIndex);
+		if (getOutline() != null) {
+			getOutline().setUnit(unitIndex);
+		}
+	}
+
+	public Color getColor() {
+		return getFillColor();
+	}
+
+	public void setColor(Color color) {
+		setFillColor(color);
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		IFillSymbol copy = (IFillSymbol) super.clone();
+		
+		// Clone outline
+		ILineSymbol outline = copy.getOutline();
+		if (outline != null) {
+			copy.setOutline((ILineSymbol) outline.clone());
+		}
+		return copy;
+	}
+	
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent symbol properties
+		super.loadFromState(state);
+		// Set own properties
+		setColor((Color) state.get(FIELD_COLOR));
+		setHasFill(state.getBoolean(FIELD_HAS_FILL));
+		setHasOutline(state.getBoolean(FIELD_HAS_OUTLINE));
+		setOutline((ILineSymbol) state.get(FIELD_OUTLINE));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent symbol properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_COLOR, getColor());
+		state.set(FIELD_HAS_FILL, hasFill());
+		state.set(FIELD_HAS_OUTLINE, hasOutline());
+		state.set(FIELD_OUTLINE, getOutline());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						AbstractFillSymbol.class,
+						FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the Symbol base definition
+				definition.extend(manager.getDefinition(SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Color
+				definition.addDynFieldObject(FIELD_COLOR).setMandatory(false).setClassOfValue(Color.class);
+				// Has fill?
+				definition.addDynFieldBoolean(FIELD_HAS_FILL).setMandatory(true);
+				// Has outline?
+				definition.addDynFieldBoolean(FIELD_HAS_OUTLINE).setMandatory(true);
+				// Outline
+				definition.addDynFieldObject(FIELD_OUTLINE).setMandatory(false).setClassOfValue(ILineSymbol.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/AbstractFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MultiLayerFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MultiLayerFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MultiLayerFillSymbol.java	(revision 42196)
@@ -0,0 +1,388 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IMultiLayerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * MultiLayerFillSymbol is a symbol which allows to group several kind of fill symbols
+ * (xxxFillSymbol implementing IFillSymbol)in one and treats it like single symbol.
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MultiLayerFillSymbol extends AbstractFillSymbol implements IFillSymbol, IMultiLayerSymbol, IMultiLayerFillSymbol{
+	private static final Logger LOG = LoggerFactory.getLogger(MultiLayerFillSymbol.class);
+
+    public static final String MULTILAYER_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME = "MultiLayerFillSymbol";
+
+    private static final String FIELD_LAYERS = "layers";
+    
+	private static final double OPACITY_SELECTION_FACTOR = .8;
+	private IFillSymbol[] layers = new IFillSymbol[0];
+	private MultiLayerFillSymbol selectionSymbol;
+
+	public Color getFillColor() {
+		/*
+		 * a multilayer symbol does not define any color, the color
+		 * of each layer is defined by the layer itself
+		 */
+		return null;
+	}
+
+	public int getOnePointRgb() {
+		// will paint only the last layer pixel
+		return layers[layers.length-1].getOnePointRgb();
+	}
+
+	public ILineSymbol getOutline() {
+		/*
+		 * a multilayer symbol does not define any outline, the outline
+		 * of each layer is defined by the layer it self
+		 */
+		return null;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return geom.getType() == Geometry.TYPES.SURFACE;
+	}
+
+	public void setFillColor(Color color) {
+		/*
+		 * Will apply the color to each layer
+		 */
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setFillColor(color);
+		}
+	}
+
+	public void setOutline(ILineSymbol outline) {
+		if (layers != null && layers.length > 0) {
+			for (int i = 0; i < layers.length - 1; i++) {
+				layers[i].setOutline(null);
+			}
+			layers[layers.length - 1].setOutline(outline);
+		}
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+		for (int i = 0; (cancel == null || !cancel.isCanceled())
+				&& layers != null && i < layers.length; i++) {
+			layers[i].draw(g, affineTransform, geom, feature, cancel);
+		}
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].drawInsideRectangle(g, scaleInstance, r, properties);
+		}
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		float[] myDistances = new float[] {0,0};
+		distances[0] = 0;
+		distances[1] = 0;
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].getPixExtentPlus(geom, myDistances, viewPort, dpi);
+			distances[0] = Math.max(myDistances[0], distances[0]);
+			distances[1] = Math.max(myDistances[1], distances[1]);
+		}
+	}
+
+	public ISymbol getSymbolForSelection() {
+	    // TODO: revisar
+	    
+		if (selectionSymbol == null) {
+		    	MultiLayerFillSymbol selectionSymbol = 
+		    	    new MultiLayerFillSymbol();
+			selectionSymbol.setDescription(getDescription());
+			for (int i = 0; layers != null && i < layers.length; i++) {
+				selectionSymbol.addLayer(layers[i].getSymbolForSelection());
+			}
+			SimpleFillSymbol selLayer = new SimpleFillSymbol();
+			Color c = MapContext.getSelectionColor();
+			c = new Color(
+					c.getRed(),
+					c.getGreen(),
+					c.getBlue(),
+					(int) (255*OPACITY_SELECTION_FACTOR));
+			selLayer.setFillColor(c);
+			selLayer.setOutline(getOutline());
+			selectionSymbol.addLayer(selLayer);
+			setSymbolForSelection(selectionSymbol);
+		}
+		return selectionSymbol;
+
+	}
+
+	public int getSymbolType() {
+		return Geometry.TYPES.SURFACE;
+	}
+
+//	public void setPrintingProperties(PrintAttributes printProperties) {
+//		// TODO Implement it
+//		throw new Error("Not yet implemented!");
+//
+//	}
+
+//	public String getClassName() {
+//		return getClass().getName();
+//	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].print(g, at, geom, properties);
+		}
+	}
+
+	public void setLayer(int index, ISymbol layer) throws IndexOutOfBoundsException {
+		layers[index] = (IFillSymbol) layer;
+	}
+
+	public void swapLayers(int index1, int index2) {
+		ISymbol aux1 = getLayer(index1), aux2 = getLayer(index2);
+		layers[index2] = (IFillSymbol) aux1;
+		layers[index1] = (IFillSymbol) aux2;
+	}
+
+	public ISymbol getLayer(int layerIndex) {
+//		try{
+			return layers[layerIndex];
+//		} catch (Exception e) {
+//			return null;
+//		}
+	}
+
+	public int getLayerCount() {
+		return layers.length;
+	}
+
+	public void addLayer(ISymbol newLayer) {
+		addLayer(newLayer, layers.length);
+	}
+
+	public void addLayer(ISymbol newLayer, int layerIndex) throws IndexOutOfBoundsException {
+		if (newLayer == null ) {
+			/*|| newLayer instanceof ILabelStyle)*/ return; // null or symbols that are styles are not allowed
+		}
+
+		selectionSymbol = null; /* forces the selection symbol to be re-created
+		 						 * next time it is required
+		 						 */
+		if (layerIndex < 0 || layers.length < layerIndex) {
+			throw new IndexOutOfBoundsException(layerIndex+" < 0 or "+layerIndex+" > "+layers.length);
+		}
+		List<ISymbol> newLayers = new ArrayList<ISymbol>();
+		for (int i = 0; i < layers.length; i++) {
+			newLayers.add(layers[i]);
+		}
+		try {
+			newLayers.add(layerIndex, newLayer);
+			layers = (IFillSymbol[]) newLayers.toArray(new IFillSymbol[0]);
+		} catch (ArrayStoreException asEx) {
+			throw new ClassCastException(newLayer.getClass().getName() + " is not an IFillSymbol");
+		}
+	}
+
+	public boolean removeLayer(ISymbol layer) {
+
+		int capacity = 0;
+		capacity = layers.length;
+		List<IFillSymbol> lst = new ArrayList<IFillSymbol>(capacity);
+		for (int i = 0; layers != null && i < capacity; i++) {
+			lst.add(layers[i]);
+		}
+		boolean contains = lst.remove(layer);
+		layers = (IFillSymbol[])lst.toArray(new IFillSymbol[0]);
+		return contains;
+	}
+	
+	public void setUnit(int unitIndex) {
+		super.setUnit(unitIndex);
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setUnit(unitIndex);
+		}
+	}
+
+	public void setReferenceSystem(int system) {
+		super.setReferenceSystem(system);
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setReferenceSystem(system);
+		}
+	}
+
+	/**
+	 *Returns the transparency of the multi layer fill symbol created
+	 */
+	public int getFillAlpha() {
+		// will compute the acumulated opacity
+		double myAlpha = 0;
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			double layerAlpha = layers[i].getFillAlpha()/255D;
+			myAlpha += (1-myAlpha)*layerAlpha;
+		}
+		int result = (int) Math.round(myAlpha * 255);
+		return (result>255) ? 255 : result;
+	}
+
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		double size = 0;
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			size = Math.max(size, layers[i].toCartographicSize(viewPort, dpi, geom));
+		}
+		return size;
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		MultiLayerFillSymbol copy = (MultiLayerFillSymbol) super.clone();
+
+		// Clone layers
+		if (layers != null) {
+			IFillSymbol[] layersCopy = new IFillSymbol[layers.length];
+			for (int i = 0; i < layers.length; i++) {
+				layersCopy[i] = (IFillSymbol) layers[i].clone();
+			}
+			copy.layers = layersCopy;
+		}
+
+		// Clone selection
+		if (selectionSymbol != null) {
+			copy.selectionSymbol = (MultiLayerFillSymbol) selectionSymbol
+					.clone();
+		}
+
+		return copy;
+	}
+
+	private void setSymbolForSelection(MultiLayerFillSymbol symbolForSelection) {
+		this.selectionSymbol = symbolForSelection;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent fill symbol properties
+		super.loadFromState(state);
+		LOG.warn("FIXME, fix implement of loadFromState");
+		// Set own properties
+		// setSymbolForSelection((MultiLayerFillSymbol)
+		// state.get(FIELD_SYMBOL_FOR_SELECTION));
+		List layers = state.getList(FIELD_LAYERS);
+		if (layers != null) {
+			for (int i = 0; i < layers.size(); i++) {
+				addLayer((ISymbol) layers.get(i));
+			}
+		}
+
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+		LOG.warn("FIXME, fix implement of saveToState");
+		// Save own properties
+
+		// Don't use the getSymbolForSelection method, as it will create it
+		// if it does not exist, and persistence will enter an infinite loop
+		// state.set(FIELD_SYMBOL_FOR_SELECTION, selectionSymbol);
+		state.set(FIELD_LAYERS, layers);
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(MULTILAYER_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						MultiLayerFillSymbol.class,
+						MULTILAYER_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						MULTILAYER_FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the FillSymbol base definition
+				definition.extend(manager.getDefinition(FILL_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Selection Symbol
+				// definition.addDynFieldSingle(FIELD_SYMBOL_FOR_SELECTION).setType(
+				// DataTypes.OBJECT);
+
+				// Layers
+				definition.addDynFieldList(FIELD_LAYERS).setClassOfItems(IFillSymbol.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			int[] shapeTypes;
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+
+			shapeTypes = new int[] { Geometry.TYPES.SURFACE,
+					Geometry.TYPES.CIRCLE, Geometry.TYPES.ELLIPSE,
+					Geometry.TYPES.MULTISURFACE };
+			manager.registerMultiLayerSymbol(IFillSymbol.SYMBOL_NAME,
+					shapeTypes, MultiLayerFillSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/impl/MultiLayerFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/MultiLayerLineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/MultiLayerLineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/MultiLayerLineSymbol.java	(revision 42196)
@@ -0,0 +1,406 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.IMultiLayerLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ILineStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * MultiLayerLineSymbol allows to create new symbols using a composition of several lineal
+ * symbols (xxxLineSymbol implementing ILineSymbol)and be treated as an only one symbol.
+ *
+ * @author  jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MultiLayerLineSymbol extends AbstractLineSymbol implements
+		ILineSymbol, IMultiLayerSymbol, IMultiLayerLineSymbol {
+
+    public static final String MULTILAYER_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME = "MultiLayerLineSymbol";
+    
+    private static final String FIELD_LAYERS = "layers";
+    
+    private ILineSymbol[] layers = new ILineSymbol[0];
+	private MultiLayerLineSymbol selectionSymbol;
+	
+	// Cached greatest line width from all the layers
+	private double lineWidth;
+
+	public MultiLayerLineSymbol() {
+		super();
+	}
+	
+	public Color getColor() {
+		/*
+		 * a multilayer symbol does not define any color, the color
+		 * of each layer is defined by the layer itself
+		 */
+		return null;
+	}
+
+	public ILineStyle getLineStyle() {
+		/*
+		 * a multilayer symbol does not define any style, the style
+		 * of each layer is defined by the layer itself
+		 */
+		return null;
+	}
+
+    public double getLineWidth() {
+	return lineWidth;
+    }
+
+//    private double calculateLineWidth() {
+//	double myLineWidth = 0;
+//	for (int i = 0; i < getLayerCount(); i++) {
+//	    myLineWidth = Math.max(myLineWidth,
+//		    ((ILineSymbol) getLayer(i)).getLineWidth());
+//	}
+//	return myLineWidth;
+//    }
+
+    public void setLineWidth(double width) {	
+	if (width > 0 && width != lineWidth) {
+	    this.lineWidth = width;
+	    double scaleFactor = width / lineWidth;
+			for (int i = 0; layers != null && i < layers.length; i++) {
+		layers[i].setLineWidth(layers[i].getLineWidth() * scaleFactor);
+	    }
+	}
+    }
+
+	public void setLineColor(Color color) {
+		/*
+		 * will apply the color to each layer
+		 */
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setLineColor(color);
+		}
+	}
+
+	public void setLineStyle(ILineStyle lineStyle) {
+		/*
+		 * will apply the same patter to each layer
+		 */
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setLineStyle(lineStyle);
+		}
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+		for (int i = 0; (cancel == null || !cancel.isCanceled())
+				&& layers != null && i < layers.length; i++) {
+			layers[i].draw(g, affineTransform, geom, feature, cancel);
+		}
+	}
+
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].drawInsideRectangle(g, scaleInstance, r, properties);
+		}
+	}
+
+	public int getOnePointRgb() {
+		// will paint only the last layer pixel
+		return layers[layers.length-1].getOnePointRgb();
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		float[] myDistances = new float[] {0,0};
+		distances[0] = 0;
+		distances[1] = 0;
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].getPixExtentPlus(geom, myDistances, viewPort, dpi);
+			distances[0] = Math.max(myDistances[0], distances[0]);
+			distances[1] = Math.max(myDistances[1], distances[1]);
+		}
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSymbol == null) {
+			selectionSymbol = new MultiLayerLineSymbol();
+			selectionSymbol.setDescription(getDescription());
+			for (int i = 0; layers != null && i < layers.length; i++) {
+				selectionSymbol.addLayer(layers[i].getSymbolForSelection());
+			}
+		}
+		return selectionSymbol;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return geom.getType() == Geometry.TYPES.CURVE;
+	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].print(g, at, geom, properties);
+		}
+
+	}
+
+	public void setLayer(int index, ISymbol layer) throws IndexOutOfBoundsException {
+		layers[index] = (ILineSymbol) layer;
+	}
+
+	public void swapLayers(int index1, int index2) {
+		ISymbol aux1 = getLayer(index1), aux2 = getLayer(index2);
+		layers[index2] = (ILineSymbol) aux1;
+		layers[index1] = (ILineSymbol) aux2;
+	}
+
+	public ISymbol getLayer(int layerIndex) {
+		return layers[layerIndex];
+	}
+
+	public int getLayerCount() {
+		return layers.length;
+	}
+
+	public void addLayer(ISymbol newLayer) {
+		addLayer(newLayer, layers.length);
+	}
+
+	public void addLayer(ISymbol newLayer, int layerIndex) throws IndexOutOfBoundsException {
+
+		if (newLayer == null) {
+			return; // null are not allowed
+		}
+		ILineSymbol newLine = (ILineSymbol) newLayer;
+		if (getLayerCount() == 0) {
+			// apply the new layer properties to this multilayer
+
+			setReferenceSystem(newLine.getReferenceSystem());
+			setUnit(newLine.getUnit());
+			lineWidth = newLine.getLineWidth();
+		} else {
+			if (newLine.getLineWidth() > getLineWidth()) {
+				lineWidth = newLine.getLineWidth();
+			}
+			newLine.setReferenceSystem(getReferenceSystem());
+			newLine.setUnit(getUnit());
+		}
+
+		selectionSymbol = null; /* forces the selection symbol to be re-created
+		 						 * next time it is required
+		 						 */
+
+
+		if (layerIndex < 0 || layers.length < layerIndex) {
+			throw new IndexOutOfBoundsException(layerIndex+" < 0 or "+layerIndex+" > "+layers.length);
+		}
+		List<ISymbol> newLayers = new ArrayList<ISymbol>();
+		for (int i = 0; i < layers.length; i++) {
+			newLayers.add(layers[i]);
+		}
+		try {
+			newLayers.add(layerIndex, newLayer);
+			layers = (ILineSymbol[])newLayers.toArray(new ILineSymbol[0]);
+		} catch (ArrayStoreException asEx) {
+			throw new ClassCastException(newLayer.getClass().getName()+" is not an ILineSymbol");
+		}
+	}
+
+	public boolean removeLayer(ISymbol layer) {
+
+		int capacity = 0;
+		capacity = layers.length;
+		List<ILineSymbol> lst = new ArrayList<ILineSymbol>(capacity);
+		for (int i = 0; i < capacity; i++) {
+			lst.add(layers[i]);
+		}
+		boolean contains = lst.remove(layer);
+		layers = (ILineSymbol[])lst.toArray(new ILineSymbol[0]);
+		return contains;
+	}
+
+	public int getAlpha() {
+		// will compute the acumulated opacity
+		double myAlpha = 0;
+		for (int i = 0; i < layers.length; i++) {
+			double layerAlpha = layers[i].getAlpha()/255D;
+			myAlpha += (1-myAlpha)*layerAlpha;
+		}
+		int result = (int) Math.round(myAlpha * 255);
+		return (result>255) ? 255 : result;
+	}
+
+	public void setAlpha(int outlineAlpha) {
+		// first, get the biggest alpha in the layers and the index if such layer
+		int maxAlpha = Integer.MIN_VALUE;
+		int maxAlphaLayerIndex = 0;
+		for (int i = 0; i < layers.length; i++) {
+			if (layers[i].getAlpha() > maxAlpha) {
+				maxAlpha = layers[i].getAlpha();
+				maxAlphaLayerIndex = i;
+			}
+		}
+
+		// now, max alpha takes the value of the desired alpha and the rest
+		// will take a scaled (to biggest alpha) alpha value
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			if (i!=maxAlphaLayerIndex) {
+				double scaledAlpha = (double) layers[i].getAlpha()/maxAlpha;
+				int myAlpha = (int) (outlineAlpha*scaledAlpha);
+				if (myAlpha == 0) {
+					myAlpha = 1;
+				}
+				layers[i].setAlpha(myAlpha);
+			} else {
+				int myAlpha = outlineAlpha;
+				if (myAlpha == 0) {
+					myAlpha = 1;
+				}
+				layers[i].setAlpha(myAlpha);
+			}
+		}
+
+	}
+
+	public void setUnit(int unitIndex) {
+		super.setUnit(unitIndex);
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setUnit(unitIndex);
+		}
+	}
+
+	public void setReferenceSystem(int system) {
+		super.setReferenceSystem(system);
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].setReferenceSystem(system);
+		}
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+//		super.setCartographicSize(cartographicSize, shp);
+		setLineWidth(cartographicSize);
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		MultiLayerLineSymbol copy = (MultiLayerLineSymbol) super.clone();
+
+		// Clone layers
+		if (layers != null && layers.length > 0) {
+			ILineSymbol[] layersCopy = new ILineSymbol[layers.length];
+			for (int i = 0; i < layers.length; i++) {
+				layersCopy[i] = (ILineSymbol) layers[i].clone();
+			}
+			copy.layers = layersCopy;
+		}
+
+		// Clone selection
+		if (selectionSymbol != null) {
+			copy.selectionSymbol = (MultiLayerLineSymbol) selectionSymbol
+					.clone();
+		}
+
+		return copy;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent fill symbol properties
+		super.loadFromState(state);
+		// Set own properties
+		List layers = state.getList(FIELD_LAYERS);
+		if (layers != null) {
+			for (int i = 0; i < layers.size(); i++) {
+				addLayer((ISymbol) layers.get(i));
+			}
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent fill symbol properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_LAYERS, layers);
+	}
+	
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(MULTILAYER_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						MultiLayerLineSymbol.class,
+						MULTILAYER_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						MULTILAYER_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the LineSymbol base definition
+				definition.extend(manager.getDefinition(LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Layers
+				definition.addDynFieldList(FIELD_LAYERS).setClassOfItems(ILineSymbol.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			int[] shapeTypes;
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+
+		       shapeTypes = new int[] { Geometry.TYPES.CURVE, Geometry.TYPES.ARC,
+		                Geometry.TYPES.ELLIPTICARC, Geometry.TYPES.MULTICURVE };
+		        manager.registerMultiLayerSymbol(ILineSymbol.SYMBOL_NAME,
+		            shapeTypes,
+		            MultiLayerLineSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/MultiLayerLineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/SimpleLineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/SimpleLineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/SimpleLineSymbol.java	(revision 42196)
@@ -0,0 +1,204 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ISimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ArrowDecoratorStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.Line2DOffset;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * SimpleLineSymbol is the most basic symbol for the representation of line objects.
+ * Allows to define the width of the line, the color and the drawn pattern.
+ *
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class SimpleLineSymbol extends AbstractLineSymbol implements ISimpleLineSymbol {
+
+	private static final Logger LOG = LoggerFactory.getLogger(SimpleLineSymbol.class);
+    public static final String SIMPLE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME = "SimpleLineSymbol";
+  
+    private static final String SELECTION_SYMBOL = "symbolForSelection";
+
+	SimpleLineSymbol symbolForSelection;
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+	public SimpleLineSymbol() {
+		super();
+		setLineWidth(1d);
+	}
+	
+	public ISymbol getSymbolForSelection() {
+		if (symbolForSelection == null) {
+			symbolForSelection = (SimpleLineSymbol) cloneForSelection();			
+		}
+		return symbolForSelection;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature, Cancellable cancel) {
+
+		Geometry geomToDraw = geom;
+		g.setStroke(getLineStyle().getStroke());
+
+		if (getLineStyle().getOffset() != 0) {
+			double offset = getLineStyle().getOffset();
+			try {
+				geomToDraw =
+						geomManager.createSurface(Line2DOffset.offsetLine(
+								geomToDraw.getShape(), offset), SUBTYPES.GEOM2D);
+			} catch (CreateGeometryException e) {
+				LOG.error("Creating a Surface", e);
+			}
+		}
+		g.setColor(getColor());	
+		g.draw(geomToDraw.getShape(affineTransform));
+
+		ArrowDecoratorStyle arrowDecorator = (ArrowDecoratorStyle) getLineStyle().getArrowDecorator();
+
+		if (arrowDecorator != null) {
+			try {
+				arrowDecorator.draw(g, affineTransform, geomToDraw, feature);
+			} catch (CreateGeometryException e) {
+				LOG.error("Error creating a geometry");
+			}
+		}
+	}
+
+	public int getOnePointRgb() {
+		return getColor().getRGB();
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		g.setColor(getColor());
+		g.setStroke(getLineStyle().getStroke());
+		super.drawInsideRectangle(g, scaleInstance, r, properties);
+	}
+
+	public void setLineWidth(double width) {
+		getLineStyle().setLineWidth((float) width);
+	}
+
+	public double getLineWidth() {
+		return getLineStyle().getLineWidth();
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		SimpleLineSymbol copy = (SimpleLineSymbol) super.clone();
+
+		if (symbolForSelection != null) {
+			copy.symbolForSelection = (SimpleLineSymbol) symbolForSelection
+					.clone();
+		}
+
+		return copy;
+	}
+	
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        // Set parent style properties
+        super.loadFromState(state);
+
+        this.symbolForSelection = (SimpleLineSymbol) state.get(SELECTION_SYMBOL);
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // Save parent fill symbol properties
+        super.saveToState(state);
+
+        // Save own properties
+        if (this.symbolForSelection != null){
+            state.set(SELECTION_SYMBOL, this.getSymbolForSelection());
+        }
+    }
+
+
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SIMPLE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						SimpleLineSymbol.class,
+						SIMPLE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						SIMPLE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the LineSymbol base definition
+				definition.extend(manager.getDefinition(LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+				
+                definition.addDynFieldObject(SELECTION_SYMBOL).setClassOfValue(SimpleLineSymbol.class);
+
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			int[] shapeTypes;
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+
+	        shapeTypes = new int[] { Geometry.TYPES.CURVE, Geometry.TYPES.ARC,
+	                Geometry.TYPES.ELLIPTICARC, Geometry.TYPES.MULTICURVE };
+	        manager.registerSymbol(ILineSymbol.SYMBOL_NAME,
+	            shapeTypes,
+	            SimpleLineSymbol.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/SimpleLineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/PictureLineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/PictureLineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/PictureLineSymbol.java	(revision 42196)
@@ -0,0 +1,427 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.net.URL;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.IPictureLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.BackgroundFileStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * PictureLineSymbol allows to use any symbol defined as an image (by an image file)
+ * supported  by gvSIG.This symbol will be used as an initial object.The line will be
+ * painted as a succession of puntual symbols through the path defined by it(the line).
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class PictureLineSymbol extends AbstractLineSymbol implements IPictureLineSymbol  {
+
+	private static final Logger logger = LoggerFactory.getLogger(PictureLineSymbol.class);
+
+    public static final String PICTURE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME =
+        "PictureLineSymbol";
+    private static final String SELECTED = "selected";
+    private static final String SELECTION_SYMBOL = "selectionSym";
+    private static final String BACKGROUND_IMAGE = "bgImage";
+    private static final String BACKGROUND_SELECTION_IMAGE = "bgSelImage";
+    private static final String WIDTH = "width";
+
+	transient private PictureLineSymbol selectionSym;
+	private double width;
+	private boolean selected;
+	private double xScale = 1, csXScale = xScale;
+	private double yScale = 1, csYScale = yScale;
+
+	private BackgroundFileStyle bgImage;
+	private BackgroundFileStyle bgSelImage;
+	private PrintAttributes properties;
+
+	/**
+	 * Constructor method
+	 *
+	 */
+	public PictureLineSymbol() {
+		super();
+	}
+	/**
+	 * Constructor method
+	 * @param imageURL, URL of the normal image
+	 * @param selImageURL, URL of the image when it is selected in the map
+	 * @throws IOException
+	 */
+
+	public PictureLineSymbol(URL imageURL, URL selImageURL) throws IOException {
+		setImage(imageURL);
+		if (selImageURL!=null)
+			setSelImage(selImageURL);
+		else setSelImage(imageURL);
+	}
+	/**
+	 * Sets the URL for the image to be used as a picture line symbol
+	 * @param imageFile, File
+	 * @throws IOException
+	 */
+	public void setImage(URL imageUrl) throws IOException{
+
+		bgImage= BackgroundFileStyle.createStyleByURL(imageUrl);
+	}
+	/**
+	 * Sets the URL for the image to be used as a picture line symbol (when it is selected in the map)
+	 * @param imageFile, File
+	 * @throws IOException
+	 */
+	public void setSelImage(URL selImageUrl) throws IOException{
+
+		bgSelImage= BackgroundFileStyle.createStyleByURL(selImageUrl);
+	}
+
+
+	public void setLineWidth(double width) {
+		this.width = width;
+		getLineStyle().setLineWidth((float) width);
+	}
+
+	public double getLineWidth() {
+		return width;
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSym == null) {
+			selectionSym = (PictureLineSymbol) cloneForSelection();
+			selectionSym.selected=true;
+			selectionSym.selectionSym = selectionSym; // avoid too much lazy creations
+
+		}
+		return selectionSym;
+
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform,	Geometry geom, Feature f, Cancellable cancel) {
+		draw(g, affineTransform, geom, cancel);
+	}
+
+	private void draw(Graphics2D g, AffineTransform affineTransform, Geometry geom, Cancellable cancel) {
+
+	    if (csXScale<=0 && csYScale<=0) {
+	        return;
+	    }
+
+	    float csWidth = getLineStyle().getLineWidth();
+		
+		BasicStroke bs = new BasicStroke(
+		    (float) csWidth,
+		    BasicStroke.CAP_ROUND,
+		    BasicStroke.CAP_ROUND);
+		
+		Shape geom_transf_clip = geom.getShape(affineTransform);
+		g.setClip(bs.createStrokedShape(geom_transf_clip));
+		
+		BackgroundFileStyle bg = (!selected) ? bgImage : bgSelImage ;
+
+		Rectangle bounds = bg.getBounds();
+		final double imageWidth  = bounds.getWidth()  * csXScale;
+		final double imageHeight = bounds.getHeight() * csYScale;
+
+		if (imageWidth==0 || imageHeight==0) return;
+		int height = (int) csWidth;
+
+		PathLength pl = new PathLength(geom_transf_clip);
+		PathIterator iterator = geom_transf_clip.getPathIterator(null, 0.8);
+		double[] theData = new double[6];
+		Point2D firstPoint = null, startPoint = null, endPoint = null;
+		if (!iterator.isDone()) {
+			if ( iterator.currentSegment(theData) != PathIterator.SEG_CLOSE) {
+				firstPoint = new Point2D.Double(theData[0], theData[1]);
+			}
+		}
+		float currentPathLength = 1;
+
+		Rectangle rect = new Rectangle();
+
+		while ((cancel==null || !cancel.isCanceled()) && !iterator.isDone()) {
+
+			int theType = iterator.currentSegment(theData);
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+				startPoint = new Point2D.Double(theData[0], theData[1]);
+
+				endPoint = null;
+				iterator.next();
+
+				continue;
+
+			case PathIterator.SEG_LINETO:
+			case PathIterator.SEG_QUADTO:
+			case PathIterator.SEG_CUBICTO:
+				endPoint = new Point2D.Double(theData[0], theData[1]);
+
+				break;
+			case PathIterator.SEG_CLOSE:
+				endPoint = startPoint;
+				startPoint = firstPoint;
+				break;
+			}
+
+			double a = endPoint.getX() - startPoint.getX();
+			double b = endPoint.getY() - startPoint.getY();
+			double theta = pl.angleAtLength(currentPathLength);
+
+			double x = startPoint.getX();
+			double y = startPoint.getY();
+
+			// Theorem of Pythagoras
+			float segmentLength = (float) Math.sqrt(a*a + b*b);
+
+			// compute how many times the image has to be drawn
+			// to completely cover this segment's length
+			int count = (int) Math.ceil(segmentLength/imageWidth);
+
+			for (int i = 0; (cancel==null || !cancel.isCanceled()) && i < count; i++) {
+				g.translate(x, y);
+				g.rotate(theta);
+
+				double xOffsetTranslation = imageWidth*i;
+				g.translate(xOffsetTranslation, -csWidth);
+
+				rect.setBounds(0, (int) Math.round(height*.5), (int) Math.ceil(imageWidth), height);
+				try {
+					bg.drawInsideRectangle(g, rect, false);
+				} catch (SymbolDrawingException e) {
+					logger.warn(Messages.getText("label_style_could_not_be_painted"), e);
+				}
+				g.translate(-xOffsetTranslation, csWidth);
+
+				g.rotate(-theta);
+				g.translate(-x, -y);
+			}
+
+			startPoint = endPoint;
+			currentPathLength += segmentLength;
+			iterator.next();
+		}
+		g.setClip(null);
+	}
+
+	/**
+	 * Sets the yscale for the picture line symbol
+	 * @param yScale
+	 */
+	public void setYScale(double yScale) {
+		this.yScale = yScale;
+		this.csYScale = yScale;
+	}
+	/**
+	 * Sets the xscale for the picture line symbol
+	 * @param xScale
+	 */
+	public void setXScale(double xScale) {
+		this.xScale = xScale;
+		this.csXScale = xScale;
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom,
+			PrintAttributes properties) {
+		this.properties=properties;
+        draw(g, at, geom, null);
+        this.properties=null;
+
+	}
+	
+	/**
+	 * Returns the URL of the image that is used as a picture line symbol (when it
+	 * is selected in the map)
+	 * @return selimagePath,URL
+	 */
+	public URL getSelectedSource(){
+		return bgSelImage.getSource();
+	}
+	/**
+	 * Returns the URL of the image that is used as a picture line symbol
+	 * @return imagePath,URL
+	 */
+	public URL getSource() {
+		return bgImage.getSource();
+	}
+	
+	/**
+	 * Returns the xscale for the picture line symbol
+	 * @param xScale
+	 */
+	public double getXScale() {
+		return xScale;
+	}
+	/**
+	 * Returns the yscale for the picture line symbol
+	 * @param yScale
+	 */
+	public double getYScale() {
+		return yScale;
+	}
+
+	@Override
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		getLineStyle().setLineWidth((float) cartographicSize);
+		double scale = cartographicSize/width;
+		csXScale = xScale * scale;
+		csYScale = yScale * scale;
+	}
+
+	@Override
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		double s = super.toCartographicSize(viewPort, dpi, geom);
+		setCartographicSize(CartographicSupportToolkit.
+				getCartographicLength(this, width, viewPort, dpi), geom);
+		return s;
+	}
+	
+	
+    public Object clone() throws CloneNotSupportedException {
+        PictureLineSymbol copy = (PictureLineSymbol) super.clone();
+
+        // clone selection
+        if (selectionSym != null) {
+        	//to avoid an infinite loop
+        	if (this == selectionSym){
+        		copy.selectionSym = copy;
+        	} else {
+        		copy.selectionSym = (PictureLineSymbol) selectionSym.clone();
+        	}
+        }
+
+        // clone brackground image
+        if (bgImage != null) {
+            copy.bgImage = (BackgroundFileStyle) bgImage.clone();
+        }
+
+        // clone selection brackground image
+        if (bgSelImage != null) {
+            copy.bgSelImage = (BackgroundFileStyle) bgSelImage.clone();
+        }
+
+        // FIXME: clone properties
+        
+        return copy;
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        // Set parent style properties
+        super.loadFromState(state);
+
+        this.selected = (Boolean) state.get(SELECTED);
+        this.selectionSym = (PictureLineSymbol) state.get(SELECTION_SYMBOL);
+        this.bgImage = (BackgroundFileStyle) state.get(BACKGROUND_IMAGE);
+        this.bgSelImage =
+            (BackgroundFileStyle) state.get(BACKGROUND_SELECTION_IMAGE);
+        this.setLineWidth(state.getDouble(WIDTH));
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // Save parent fill symbol properties
+        super.saveToState(state);
+
+        // Save own properties
+        state.set(SELECTED, this.selected);
+        state.set(SELECTION_SYMBOL, this.getSymbolForSelection());
+        state.set(BACKGROUND_IMAGE, this.bgImage);
+        state.set(BACKGROUND_SELECTION_IMAGE, this.bgSelImage);
+        state.set(WIDTH, width);
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if (manager.getDefinition(PICTURE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME) == null) {
+                DynStruct definition =
+                    manager.addDefinition(PictureLineSymbol.class,
+                    		PICTURE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+                    		PICTURE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME
+                            + " Persistence definition",
+                        null,
+                        null);
+
+                // Extend the Style base definition
+                definition.extend(manager.getDefinition(LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+                definition.addDynFieldBoolean(SELECTED).setMandatory(false);
+                definition.addDynFieldObject(SELECTION_SYMBOL)
+                    .setClassOfValue(PictureLineSymbol.class).setMandatory(false);
+                definition.addDynFieldObject(BACKGROUND_IMAGE)
+                    .setClassOfValue(BackgroundFileStyle.class).setMandatory(false);
+                definition.addDynFieldObject(BACKGROUND_SELECTION_IMAGE)
+                    .setClassOfValue(BackgroundFileStyle.class).setMandatory(false);
+                
+                definition.addDynFieldObject(WIDTH)
+                    .setClassOfValue(Double.class).setMandatory(true);
+            }
+            return Boolean.TRUE;
+        }
+    }
+    
+	public static class RegisterSymbol implements Callable {
+
+		public Object call() throws Exception {
+			SymbolManager manager = MapContextLocator.getSymbolManager();
+
+		        manager.registerSymbol(PICTURE_LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+		            PictureLineSymbol.class);
+
+			return Boolean.TRUE;
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/PictureLineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/AbstractLineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/AbstractLineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/AbstractLineSymbol.java	(revision 42196)
@@ -0,0 +1,426 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.AbstractSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ILineStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.SimpleLineStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+
+/**
+ * AbstractLineSymbol is the class that implements the interface for line symbols.
+ * It is considered as the father of all the XXXLineSymbols and will implement all the
+ * methods that these classes had not developed (and correspond with one of the methods
+ * of AbstractLineSymbol class).
+ *
+ *
+ * @author 2005-2009 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractLineSymbol extends AbstractSymbol implements ILineSymbol {
+
+    private static final String FIELD_LINESTYLE = "lineStyle";
+
+    private static final String FIELD_COLOR = "color";
+
+    public static final String LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME = "LineSymbol";
+
+    
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private Color color;
+	private ILineStyle lineStyle = new SimpleLineStyle();
+
+	public AbstractLineSymbol() {
+		super();
+		color =
+				MapContextLocator.getSymbolManager()
+						.getSymbolPreferences()
+						.getDefaultSymbolFillColor();
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public void setLineColor(Color color) {
+		this.color = color;
+	}
+	
+	public void setColor(Color color) {
+		setLineColor(color);
+	}
+
+	public int getOnePointRgb() {
+		return color.getRGB();
+	}
+
+	public final int getSymbolType() {
+		return Geometry.TYPES.CURVE;
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances, ViewPort viewPort, int dpi) {
+		float cs = (float) getCartographicSize(viewPort, dpi, geom);
+		// TODO and add the line offset
+		distances[0] = cs;
+		distances[1] = cs;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		switch(geom.getType()) {
+		case Geometry.TYPES.CURVE:
+		case Geometry.TYPES.ARC:
+			return true;
+		}
+		return false;
+	}
+
+	public ILineStyle getLineStyle() {
+		return lineStyle;
+	}
+
+	public void setLineStyle(ILineStyle lineStyle) {
+		this.lineStyle = lineStyle;
+	}
+
+	public int getAlpha() {
+		return color.getAlpha();
+	}
+
+	public void setAlpha(int outlineAlpha) {
+		color = new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha);
+	}
+
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
+		final int hGap = (int) (r.getWidth() * 0.1); // the left and right margins
+		final int vPos = 1; 						 // the top and bottom margins
+		final int splitCount = 3; 					 // number of lines
+		final int splitHSize = (r.width - hGap - hGap) / splitCount;
+		int hPos = hGap;
+		boolean swap = false;
+
+		GeneralPathX gpx = new GeneralPathX();
+		gpx.moveTo(r.x + hPos, r.y + r.height-vPos);
+		
+		boolean hasDecorator = (getLineStyle().getArrowDecorator() != null);
+		boolean hasPictureDeco = hasDecorator &&
+		    getLineStyle().getArrowDecorator().getMarker() instanceof IPictureMarkerSymbol;
+
+		for (int i = 0; i < splitCount; i++) {
+			swap = !swap;
+			if (i == (splitCount-1) && hasPictureDeco) {
+			    /*
+			     * If we have a picture decorator, the last segment is shorter so that
+			     * the decorator is entirely inside the rectangle
+			     */
+			    gpx.lineTo(r.x + hPos + splitHSize / 2, r.y + r.height/2);
+			} else {
+			    gpx.lineTo(r.x + hPos + splitHSize, (swap ? vPos : r.height-vPos) + r.y);
+			}
+			
+			hPos += splitHSize;
+		}
+
+		
+		double old_deco_size = 0;
+		if (hasDecorator) {
+		    old_deco_size = getLineStyle().getArrowDecorator().getMarker().getSize();
+		    /*
+		     * Temporarily resize decorator so it fits inside the rectangle
+		     */
+		    getLineStyle().getArrowDecorator().getMarker().setSize(0.75 * r.getHeight());
+		}
+
+		try {
+			if (properties==null)
+				draw(g, new AffineTransform(), geomManager.createCurve(gpx, SUBTYPES.GEOM2D), null, null);
+			else
+				print(g, new AffineTransform(), geomManager.createCurve(gpx, SUBTYPES.GEOM2D), properties);
+		} catch (Exception e) {
+			throw new SymbolDrawingException(SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+		}
+		
+		if (hasDecorator) {
+            getLineStyle().getArrowDecorator().getMarker().setSize(old_deco_size);
+		}
+
+	}
+
+
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+	    float currw = this.getLineStyle().getLineWidth();
+	    double ratio = cartographicSize / currw; 
+	    
+		getLineStyle().setLineWidth((float) cartographicSize);
+		
+		if (getLineStyle().getArrowDecorator() != null) {
+	        double marker_size = getLineStyle().getArrowDecorator().getMarker().getSize();
+	        marker_size = marker_size * ratio; 
+	        getLineStyle().getArrowDecorator().getMarker().setSize(marker_size);
+		}
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		double oldSize = getLineWidth();
+		setCartographicSize(getCartographicSize(
+								viewPort,
+								dpi,
+								geom),
+							geom);
+		return oldSize;
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		return CartographicSupportToolkit.
+					getCartographicLength(this,
+										  getLineWidth(),
+										  viewPort,
+										  dpi);
+	}
+
+	public static Geometry offsetFShape(Geometry shp, double offset) {
+		Geometry offsetFShape = null;
+		if (shp != null) {
+			if (offset == 0)
+				return shp;
+
+			List<Point2D[]> segments = new ArrayList<Point2D[]>();
+			GeneralPathX gpx = new GeneralPathX(shp.getPathIterator(null));
+			PathIterator it = gpx.getPathIterator(null);
+			double[] data = new double[6];
+			Point2D segmentIni = null;
+			Point2D segmentEnd = null;
+			while (!it.isDone()) {
+				switch (it.currentSegment(data)) {
+				case PathIterator.SEG_MOVETO:
+					segmentEnd = new Point2D.Double(
+							data[0], data[1]);
+					break;
+
+				case PathIterator.SEG_LINETO:
+					segmentEnd = segmentIni;
+					segmentIni = new Point2D.Double(
+							data[0], data[1]);
+
+					segments.add(getParallel(segmentIni, segmentEnd, offset));
+					break;
+
+				case PathIterator.SEG_QUADTO:
+					break;
+
+				case PathIterator.SEG_CUBICTO:
+					break;
+
+				case PathIterator.SEG_CLOSE:
+					break;
+				}
+			}
+
+		}
+
+
+		return offsetFShape;
+	}
+
+	private static Point2D[] getParallel(Point2D p1, Point2D p2, double distance) {
+		Point2D[] pParallel=new Point2D[2];
+		pParallel[0]=getPerpendicularPoint(p1,p2,p1,distance);
+		pParallel[1]=getPerpendicularPoint(p1,p2,p2,distance);
+		return pParallel;
+	}
+
+	/**
+	 * Obtiene el punto que se encuentra a una distancia 'dist' de la recta
+	 * p1-p2 y se encuentra en la recta perpendicular que pasa por perpPoint
+	 *
+	 * @param p1 Punto de la recta p1-p2
+	 * @param p2 Punto de la recta p1-p2
+	 * @param perpPoint Punto de la recta perpendicular
+	 * @param dist Distancia del punto que se quiere obtener a la recta p1-p2
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	private static Point2D getPerpendicularPoint(Point2D p1, Point2D p2,
+		Point2D perpPoint, double dist) {
+		Point2D[] p = getPerpendicular(p1, p2, perpPoint);
+		Point2D unit = getUnitVector(p[0], p[1]);
+
+		return new Point2D.Double(perpPoint.getX() + (unit.getX() * dist),
+			perpPoint.getY() + (unit.getY() * dist));
+	}
+
+
+	/**
+	 * Obtiene un par de puntos que definen la recta perpendicular a p1-p2 que
+	 * pasa por el punto perp
+	 *
+	 * @param p1 punto de la recta p1-p2
+	 * @param p2 punto de la recta p1-p2
+	 * @param perp Punto por el que pasa la recta perpendicular, debe ser
+	 * 		  distinto a p2
+	 *
+	 * @return Array con dos puntos que definen la recta resultante
+	 */
+	private static Point2D[] getPerpendicular(Point2D p1, Point2D p2,
+		Point2D perp) {
+		if ((p2.getY() - p1.getY()) == 0) {
+			return new Point2D[] {
+				new Point2D.Double(perp.getX(), 0),
+				new Point2D.Double(perp.getX(), 1)
+			};
+		}
+
+		//Pendiente de la recta perpendicular
+		double m = (p1.getX() - p2.getX()) / (p2.getY() - p1.getY());
+
+		//b de la funcion de la recta perpendicular
+		double b = perp.getY() - (m * perp.getX());
+
+		//Obtenemos un par de puntos
+		Point2D[] res = new Point2D[2];
+
+		res[0] = new Point2D.Double(0, (m * 0) + b);
+		res[1] = new Point2D.Double(1000, (m * 1000) + b);
+
+		return res;
+	}
+
+	/**
+	 * Devuelve un vector unitario en forma de punto a partir de dos puntos.
+	 *
+	 * @param p1 punto origen.
+	 * @param p2 punto destino.
+	 *
+	 * @return vector unitario.
+	 */
+	private static Point2D getUnitVector(Point2D p1, Point2D p2) {
+		Point2D paux = new Point2D.Double(p2.getX() - p1.getX(),
+				p2.getY() - p1.getY());
+		double v = Math.sqrt(Math.pow(paux.getX(), 2d) +
+				Math.pow(paux.getY(), 2d));
+		paux = new Point2D.Double(paux.getX() / v, paux.getY() / v);
+
+		return paux;
+	}
+	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
+		double originalSize = getLineWidth();
+		double size=originalSize;
+		// scale it to size
+		int pq = properties.getPrintQuality();
+		if (pq == PrintAttributes.PRINT_QUALITY_NORMAL){
+			size *= (double) 300/72;
+		}else if (pq == PrintAttributes.PRINT_QUALITY_HIGH){
+			size *= (double) 600/72;
+		}else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT){
+			// size *= 72/72; // (which is the same than doing nothing)
+		}
+		setLineWidth(size);
+		draw(g,at,geom,null, null);
+		setLineWidth(originalSize);
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		AbstractLineSymbol copy = (AbstractLineSymbol) super.clone();
+		
+		// Clone the line style
+		if (lineStyle != null) {
+			copy.lineStyle = (ILineStyle) lineStyle.clone();
+		}
+		
+		return copy;
+	}
+
+	
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent symbol properties
+		super.loadFromState(state);
+		// Set own properties
+		setColor((Color) state.get(FIELD_COLOR));
+		setLineStyle((ILineStyle) state.get(FIELD_LINESTYLE));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent symbol properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_COLOR, getColor());
+		state.set(FIELD_LINESTYLE, getLineStyle());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						AbstractLineSymbol.class,
+						LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						LINE_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the Symbol base definition
+				definition.extend(manager.getDefinition(SYMBOL_PERSISTENCE_DEFINITION_NAME));
+
+				// Color
+				definition.addDynFieldObject(FIELD_COLOR).setMandatory(false).setClassOfValue(Color.class);
+				// LineStyle
+				definition.addDynFieldObject(FIELD_LINESTYLE).setMandatory(false).setClassOfValue(ILineStyle.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+	
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/impl/AbstractLineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractIntervalLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractIntervalLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractIntervalLegend.java	(revision 42196)
@@ -0,0 +1,664 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialIntervalLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractIntervalLegend extends
+		AbstractClassifiedVectorLegend implements IVectorialIntervalLegend {
+
+	public static final String INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME = "IntervalLegend";
+
+	private static final String FIELD_KEYS = "keys";
+	private static final String FIELD_INTERVAL_TYPE = "intervalType";
+	private static final String FIELD_USE_DEFAULT_SYMBOL = "useDefaultSymbol";
+	private static final String FIELD_SYMBOLS = "symbols";
+	
+	protected List<Object> keys = new ArrayList<Object>(); // <Object>
+	// protected int index = 0;
+	// protected int fieldId;
+	protected ISymbol defaultSymbol;
+	// protected FeatureStore featureStore;
+	protected int intervalType = NATURAL_INTERVALS;
+	protected boolean useDefaultSymbol = false;
+
+	// private ISymbol nullIntervalSymbol = null;
+
+	public static final int EQUAL_INTERVALS = 0;
+	public static final int NATURAL_INTERVALS = 1;
+	public static final int QUANTILE_INTERVALS = 2;
+	protected Map<Object, ISymbol> symbols = createSymbolMap();
+	final static private Logger logger = LoggerFactory.getLogger(AbstractIntervalLegend.class);
+	
+	public void addSymbol(Object key, ISymbol symbol) {
+		if (key == null) {
+		    // why did we use this?
+			// nullIntervalSymbol = symbol;
+		    logger.info(
+		        "Warning: tried to add symbol with null key.",
+		        new Exception("Key is NULL"));
+		} else {
+			symbols.put(key, symbol);
+			keys.add(key);
+			fireClassifiedSymbolChangeEvent(new SymbolLegendEvent(null, symbol));
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.rendering.IVectorialLegend#getSymbol(int)
+	 */
+	public ISymbol getSymbol(FeatureReference featureID)
+			throws MapContextException, DataException {
+		return getSymbolByFeature(featureID.getFeature());
+		
+//		Object val = featureStore.getFeatureByReference(featureID).get(getClassifyingFieldNames()[0]);
+//		IInterval interval = getInterval(val);
+//		ISymbol theSymbol = getSymbolByInterval(interval);
+//
+//		if (theSymbol != null) {
+//			return theSymbol;
+//		} else if (useDefaultSymbol) {
+//			return getDefaultSymbol();
+//		}
+//		return null;
+
+	}
+
+	public ISymbol getSymbolByFeature(Feature feat) throws MapContextException {
+		Object val = feat.get(getClassifyingFieldNames()[0]);
+		IInterval interval = getInterval(val);
+		ISymbol theSymbol = getSymbolByInterval(interval);
+
+		if (theSymbol != null) {
+			return theSymbol;
+		} else if (useDefaultSymbol) {
+			return getDefaultSymbol();
+		}
+		
+		return null;
+//		return theSymbol;
+	}
+
+
+	public IInterval[] calculateIntervals(FeatureStore featureStore,
+			String fieldName, int numIntervalos, int shapeType)
+	throws DataException {
+		logger.debug("elRs.start()");
+//		recordSet.start();
+
+//		int idField = -1;
+		FeatureSet set = null;
+		DisposableIterator iterator = null;
+		try {
+
+		setClassifyingFieldNames(new String[] {fieldName});
+
+		String[] fieldNames = getClassifyingFieldNames();
+		FeatureQuery featureQuery=featureStore.createFeatureQuery();
+		featureQuery.setAttributeNames(fieldNames);
+
+		set = featureStore.getFeatureSet(featureQuery);
+		iterator = set.fastIterator();
+
+
+//		for (int i = 0; i < recordSet.getFieldCount(); i++) {
+//			String nomAux = recordSet.getFieldName(i).trim();
+//
+//			if (fieldNames[0].compareToIgnoreCase(nomAux) == 0) {
+//				idField = i;
+//
+//				break;
+//			}
+//		}
+
+//		if (idField == -1) {
+//			logger.error("Campo no reconocido " + fieldNames);
+//
+//			return null;
+//		}
+
+		double minValue = Double.MAX_VALUE;
+		double maxValue = Double.NEGATIVE_INFINITY;
+
+		IVectorialIntervalLegend auxLegend = (IVectorialIntervalLegend) MapContextLocator
+					.getMapContextManager().createLegend("VectorialInterval");
+		auxLegend.setShapeType(shapeType);
+
+		Object clave;
+
+		while (iterator.hasNext()) {
+			Feature feature = (Feature) iterator.next();
+
+//		for (int j = 0; j < recordSet.getRowCount(); j++) {
+			clave = feature.get(fieldName);
+
+			IInterval interval = auxLegend.getInterval(clave);
+
+			////Comprobar que no esta repetido y no hace falta introducir en el hashtable el campo junto con el simbolo.
+			if (auxLegend.getSymbolByInterval(interval) == null) {
+				//si no esta creado el simbolo se crea
+				double valor = 0;
+
+
+				if (clave instanceof Number) {
+					valor=((Number)clave).doubleValue();
+				}else if (clave instanceof Date) {
+					//TODO POR IMPLEMENTAR
+					///valorDate = elRs.getFieldValueAsDate(idField);
+					///if (valorDate.before(minValueDate)) minValueDate = valorDate;
+					///if (valorDate.after(maxValueDate)) maxValueDate = valorDate;
+//				} else if (clave instanceof NullValue) {
+//					continue;
+				}
+
+				if (valor < minValue) {
+					minValue = valor;
+				}
+
+				if (valor > maxValue) {
+					maxValue = valor;
+				}
+			}
+		}
+
+			IInterval[] intervalArray = null;
+		switch (getIntervalType()) {
+		case VectorialIntervalLegend.EQUAL_INTERVALS:
+			intervalArray = calculateEqualIntervals(numIntervalos,
+					minValue, maxValue, fieldName);
+
+			break;
+
+		case VectorialIntervalLegend.NATURAL_INTERVALS:
+			intervalArray = calculateNaturalIntervals(featureStore, numIntervalos,
+					minValue, maxValue, fieldName);
+
+			break;
+
+		case VectorialIntervalLegend.QUANTILE_INTERVALS:
+			intervalArray = calculateQuantileIntervals(featureStore, numIntervalos,
+					minValue, maxValue, fieldName);
+
+			break;
+		}
+//		recordSet.stop();
+		return intervalArray;
+		} finally {
+			if (iterator != null) {
+				iterator.dispose();
+			}
+			if (set != null) {
+				set.dispose();
+			}
+		}
+	}
+
+
+    /**
+     * EQUAL INTERVAL Devuelve un Array con el n�mero de intervalos que se
+     * quieren crear. Los intervalos se crean con un tama�o igual entre ellos.
+     * @param numIntervals n�mero de intervalos
+     * @param minValue Valor m�nimo.
+     * @param maxValue Valor m�ximo.
+     * @param fieldName Nombre del campo
+     *
+     * @return Array con los intervalos.
+     */
+	private IInterval[] calculateEqualIntervals(int numIntervals,
+			double minValue,
+        double maxValue, String fieldName) {
+		IInterval[] theIntervalArray = new IInterval[numIntervals];
+        double step = (maxValue - minValue) / numIntervals;
+
+        if (numIntervals > 1) {
+            theIntervalArray[0] = new FInterval(minValue, minValue + step);
+
+            for (int i = 1; i < (numIntervals - 1); i++) {
+                theIntervalArray[i] = new FInterval(minValue + (i * step) +
+                        0.01, minValue + ((i + 1) * step));
+            }
+
+            theIntervalArray[numIntervals - 1] = new FInterval(minValue +
+                    ((numIntervals - 1) * step) + 0.01, maxValue);
+        } else {
+            theIntervalArray[0] = new FInterval(minValue, maxValue);
+        }
+
+        return theIntervalArray;
+    }
+
+    /**
+     * NATURAL INTERVAL Devuelve un Array con el n�mero de intervalos que se
+     * quieren crear. Los intervalos se distribuyen de forma natural.
+     *
+     * @param numIntervals n�mero de intervalos
+     * @param minValue Valor m�nimo.
+     * @param maxValue Valor m�ximo.
+     * @param fieldName Nombre del campo
+     *
+     * @return Array con los intervalos.
+     * @throws DataException 
+     * @throws LegendLayerException
+     */
+	private IInterval[] calculateNaturalIntervals(FeatureStore featureStore,
+			int numIntervals, double minValue,
+        double maxValue, String fieldName) throws DataException {
+        NaturalIntervalGenerator intervalGenerator = new NaturalIntervalGenerator(
+        		featureStore, fieldName, numIntervals);
+
+        intervalGenerator.generarIntervalos();
+
+        int numIntervalsGen = intervalGenerator.getNumIntervals() - 1;
+
+        if (numIntervalsGen == -1) {
+            //TODO cuando no puede calcular los intervalos.
+            numIntervalsGen = 1;
+        }
+
+        FInterval[] theIntervalArray = new FInterval[numIntervalsGen];
+
+        if (numIntervalsGen > 1) {
+            theIntervalArray[0] = new FInterval(minValue,
+                    intervalGenerator.getValorRuptura(0));
+
+            for (int i = 1; i < (numIntervalsGen - 1); i++) {
+                theIntervalArray[i] = new FInterval(intervalGenerator.getValInit(i -
+                            1), intervalGenerator.getValorRuptura(i));
+            }
+
+            theIntervalArray[numIntervalsGen - 1] = new FInterval(intervalGenerator.getValInit(numIntervalsGen -
+                        2), maxValue);
+        } else {
+            theIntervalArray[numIntervalsGen - 1] = new FInterval(minValue,
+                    maxValue);
+        }
+
+        return theIntervalArray;
+    }
+
+    /**
+     * QUANTILE INTERVAL Devuelve un Array con el n�mero de intervalos que se
+     * quieren crear. Los intervalos se distribuyen de forma quantile.
+     * @param recordSet
+     *
+     * @param numIntervals n�mero de intervalos
+     * @param minValue Valor m�nimo.
+     * @param maxValue Valor m�ximo.
+     * @param fieldName Nombre del campo
+     *
+     * @return Array con los intervalos.
+     * @throws LegendLayerException
+     */
+	private IInterval[] calculateQuantileIntervals(FeatureStore featureStore,
+			int numIntervals, double minValue,
+        double maxValue, String fieldName) throws DataException {
+        QuantileIntervalGenerator intervalGenerator = new QuantileIntervalGenerator(
+        		featureStore, fieldName, numIntervals);
+
+        intervalGenerator.generarIntervalos();
+
+        int numIntervalsGen = intervalGenerator.getNumIntervalGen();
+        FInterval[] theIntervalArray = new FInterval[numIntervalsGen];
+
+        if (intervalGenerator.getNumIntervalGen() > 1) {
+            theIntervalArray[0] = new FInterval(minValue,
+                    intervalGenerator.getValRuptura(0));
+
+            for (int i = 1; i < (numIntervalsGen - 1); i++) {
+                theIntervalArray[i] = new FInterval(intervalGenerator.getValInit(i -
+                            1), intervalGenerator.getValRuptura(i));
+            }
+
+            theIntervalArray[numIntervalsGen - 1] = new FInterval(intervalGenerator.getValInit(numIntervalsGen -
+                        2), maxValue);
+        } else {
+            theIntervalArray[numIntervalsGen - 1] = new FInterval(minValue,
+                    maxValue);
+        }
+
+        return theIntervalArray;
+    }
+
+    public ISymbol getSymbolByInterval(IInterval key) {
+
+		if (key == null){
+			if (isUseDefaultSymbol()) {
+				return defaultSymbol;
+			}
+			return null;
+		}
+		if (symbols.containsKey(key)) {
+			return (ISymbol) symbols.get(key);
+		}
+
+		if (isUseDefaultSymbol()) {
+			return defaultSymbol;
+		}
+
+		return null;
+	}
+
+
+	public String[] getDescriptions() {
+		String[] descriptions = new String[symbols.size()];
+		ISymbol[] auxSym = getSymbols();
+
+		for (int i = 0; i < descriptions.length; i++) {
+			descriptions[i] = auxSym[i].getDescription();
+		}
+
+		return descriptions;
+	}
+
+
+	public Object[] getValues() {
+		return symbols.keySet().toArray();
+	}
+
+	public void clear() {
+		// index = 0;
+		keys.clear();
+		symbols.clear();
+	}
+
+	public ISymbol[] getSymbols() {
+		ISymbol[] symbolList;
+        symbolList = new ISymbol[symbols.size()];
+        return (ISymbol[]) symbols.values().toArray(symbolList);
+	}
+
+	public void setDefaultSymbol(ISymbol s) {
+	    ISymbol old = defaultSymbol;
+		if (s == null) {
+			throw new NullPointerException("Default symbol cannot be null");
+		}
+		defaultSymbol = s;
+		fireDefaultSymbolChangedEvent(new SymbolLegendEvent(old, defaultSymbol));
+	}
+
+	public ISymbol getDefaultSymbol() {
+//		NullIntervalValue niv=new NullIntervalValue();
+//		if (symbols.containsKey(niv)) {
+//			return (ISymbol)symbols.get(niv);
+//		}
+
+		if(defaultSymbol==null) {
+			defaultSymbol = getSymbolManager().createSymbol(getShapeType());
+		}
+		return defaultSymbol;
+	}
+
+
+
+//    public void setFeatureStore(FeatureStore featureStore)
+//        throws DataException {
+//    		/*
+//    		 * when we move definitely to feature iterators this
+//    		 * method
+//    		 */
+//    		this.featureStore = featureStore;
+////    		fieldId = ((FeatureType)featureStore.getFeatureTypes().get(0)).getIndex(fieldNames[0]);
+//    }
+
+
+	public IInterval getInterval(Object v) {
+		if (v != null ) {
+			for (int i = 0; i < keys.size(); i++) {
+			    
+			    Object obj_key = keys.get(i);
+			    if (obj_key instanceof IInterval) {
+	                if (((IInterval) obj_key).isInInterval(v)) {
+	                    return (IInterval) obj_key;
+	                }
+			    }
+			}
+		}
+
+		return null;
+	}
+
+	public void setIntervalType(int intervalType) {
+		this.intervalType = intervalType;
+	}
+
+
+	public int getIntervalType() {
+		return intervalType;
+	}
+
+	public void useDefaultSymbol(boolean b) {
+		useDefaultSymbol = b;
+	}
+
+
+	public boolean isUseDefaultSymbol() {
+		return useDefaultSymbol;
+	}
+
+
+	public void delSymbol(Object obj) {
+		keys.remove(obj);
+		symbols.remove(obj);
+		fireClassifiedSymbolChangeEvent(
+				new SymbolLegendEvent(
+						(ISymbol)symbols.remove(obj),
+						null));
+	}
+
+
+	public void replace(ISymbol oldSymbol, ISymbol newSymbol) {
+		if (symbols.containsValue(oldSymbol)) {
+		    
+			Iterator<Object> it = symbols.keySet().iterator();
+			List key_list = new ArrayList();
+			
+			while (it.hasNext()) {
+				Object key = it.next();
+				if (symbols.get(key).equals(oldSymbol)) {
+				    key_list.add(key);
+				    // symbols.remove(key);
+				}
+			}
+			
+			for (int i=0; i<key_list.size(); i++) {
+			    Object k = key_list.get(i);
+			    symbols.put(k, newSymbol);
+			}
+            fireClassifiedSymbolChangeEvent(
+                new SymbolLegendEvent(oldSymbol, newSymbol));
+
+		}
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		AbstractIntervalLegend clone = (AbstractIntervalLegend) super.clone();
+
+		// Clone default symbol
+		if (defaultSymbol != null) {
+			clone.defaultSymbol = (ISymbol) defaultSymbol.clone();
+		}
+		// Clone keys
+		clone.keys = new ArrayList<Object>();
+		
+		// Clone symbols
+		if (symbols != null) {
+			clone.symbols = createSymbolMap();
+			for (Iterator<Entry<Object, ISymbol>> iterator =
+					symbols.entrySet().iterator(); iterator.hasNext();) {
+				Entry<Object, ISymbol> entry = iterator.next();
+				
+				Object key = entry.getKey();
+				IInterval key_interval = null;
+				if (key instanceof IInterval) {
+				    key_interval = (IInterval) key;
+				    key = key_interval.clone();
+				}
+				ISymbol symbolClone =
+						(ISymbol) ((ISymbol) entry.getValue()).clone();
+				clone.addSymbol(key, symbolClone);
+			}
+		}
+		
+		clone.setIntervalType(this.getIntervalType());
+
+		return clone;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent properties
+		super.loadFromState(state);
+		// Set own properties
+		setIntervalType(state.getInt(FIELD_INTERVAL_TYPE));
+		keys = new ArrayList<Object>(state.getList(FIELD_KEYS));
+		useDefaultSymbol(state.getBoolean(FIELD_USE_DEFAULT_SYMBOL));
+		Map persistedSymbolMap = (Map) state.get(FIELD_SYMBOLS);
+		if (persistedSymbolMap != null) {
+			symbols.putAll(persistedSymbolMap);
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_INTERVAL_TYPE, getIntervalType());
+		state.set(FIELD_KEYS, keys);
+		state.set(FIELD_USE_DEFAULT_SYMBOL, isUseDefaultSymbol());
+		state.set(FIELD_SYMBOLS, symbols);
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						AbstractIntervalLegend.class,
+						INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME,
+						INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME+" Persistence definition (FIXME check keys type)",
+						null, 
+						null
+				);
+				
+				// Extend the Classified Vector Legend base definition
+				definition.extend(manager.getDefinition(CLASSIFIED_VECTOR_LEGEND_PERSISTENCE_DEFINITION_NAME));
+
+				// Interval type
+				definition.addDynFieldInt(FIELD_INTERVAL_TYPE).setMandatory(true);
+				// Keys
+				definition.addDynFieldList(FIELD_KEYS)
+					.setClassOfItems(int.class);
+				// Use default symbol?
+				definition.addDynFieldBoolean(FIELD_USE_DEFAULT_SYMBOL);
+				// Symbols
+				definition.addDynFieldMap(FIELD_SYMBOLS).setClassOfItems(ISymbol.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+	
+
+	
+	
+	private Map<Object, ISymbol> createSymbolMap() {
+		return new TreeMap<Object, ISymbol>
+		(new Comparator<Object>() { 
+					public int compare(Object o1, Object o2) {
+						if ((o1 != null) && (o2 != null)) {
+						    
+						    boolean o1_inte = (o1 instanceof FInterval);
+                            boolean o2_inte = (o2 instanceof FInterval);
+                            
+                            if (!o1_inte && !o2_inte) {
+                                return 0;
+                            } else {
+                                if (o1_inte && !o2_inte) {
+                                    return 1;
+                                } else {
+                                    if (!o1_inte && o2_inte) {
+                                        return -1;
+                                    }
+                                }
+                            }
+
+							FInterval i2 = (FInterval) o2;
+							FInterval i1 = (FInterval) o1;
+
+							if (i1.getMin() > i2.getMin()) {
+								return 1;
+							}
+
+							if (i1.getMin() < i2.getMin()) {
+								return -1;
+							}
+							if (i1.getMax() < i2.getMax()) {
+								return -1;
+							}
+							if (i1.getMax() > i2.getMax()) {
+								return 1;
+							}
+						}
+
+						return 0;
+					}
+				});
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractIntervalLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/LegendDrawingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/LegendDrawingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/LegendDrawingException.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {{Task}}
+*/
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.LegendException;
+
+/**
+ * Exception thrown when there is an error while a {@link ILegend} is drawing.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class LegendDrawingException extends LegendException {
+	
+	private static final long serialVersionUID = 4322970061384248489L;
+
+	private static final String KEY = "legend_drawing_exception";
+
+    private static final String MESSAGE = "Error while drawing the legend";
+    
+	/**
+	 * Creates a new {@link LegendDrawingException} with the original cause.
+	 * 
+	 * @param cause
+	 *            of the exception
+	 */
+	public LegendDrawingException(Throwable cause) {
+		super(MESSAGE, cause, KEY, serialVersionUID);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/LegendDrawingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/FInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/FInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/FInterval.java	(revision 42196)
@@ -0,0 +1,145 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Clase intervalo.
+ * 
+ * @author Vicente Caballero Navarro
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class FInterval implements IInterval {
+	public static final String FINTERVAL_PERSISTENCE_DEFINITION_NAME = "FInterval";
+
+	private static final String FIELD_MIN = "min";
+	private static final String FIELD_MAX = "max";
+
+	private double min;
+	private double max;
+
+	/**
+	 * Creates a new empty FInterval, used to be instantiated by persistence
+	 */
+	public FInterval(){
+		// Nothing to do
+	}
+
+	/**
+	 * Crea un nuevo FInterval.
+	 *
+	 * @param from Origen.
+	 * @param to Destino.
+	 */
+	public FInterval(double from, double to) {
+		this.min = from;
+		this.max = to;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.rendering.IInterval#isInInterval(com.hardcode.gdbms.engine.values.Value)
+	 */
+	public boolean isInInterval(Object v) {
+		double valor=0;
+		if (v == null){
+			return false;
+		}else if (v instanceof Number) {
+			valor = ((Number) v).doubleValue();
+		}
+		return ((valor >= min) && (valor <= max));
+	}
+
+	/**
+	 * Devuelve el n�mero de origen.
+	 *
+	 * @return N�mero de inicio.
+	 */
+	public double getMin() {
+		return min;
+	}
+
+	/**
+	 * Devuelve el n�mero final.
+	 *
+	 * @return N�mero final.
+	 */
+	public double getMax() {
+		return max;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.rendering.IInterval#toString()
+	 */
+	public String toString() {
+		return min + "-" + max;
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		return super.clone();
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		min = state.getDouble(FIELD_MIN);
+		max = state.getDouble(FIELD_MAX);
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_MIN, getMin());
+		state.set(FIELD_MAX, getMax());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(FINTERVAL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						FInterval.class,
+						FINTERVAL_PERSISTENCE_DEFINITION_NAME,
+						FINTERVAL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				definition.addDynFieldDouble(FIELD_MIN)
+						.setMandatory(true)
+						.setDescription("Minimum interval value");
+				definition.addDynFieldDouble(FIELD_MAX).setMandatory(true).setDescription(
+						"Maximum interval value");
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/FInterval.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractVectorialLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractVectorialLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractVectorialLegend.java	(revision 42196)
@@ -0,0 +1,938 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.exception.ReprojectionRuntimeException;
+import org.gvsig.fmap.geom.operation.DrawInts;
+import org.gvsig.fmap.geom.operation.DrawOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.IntersectsEnvelopeEvaluator;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.LegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.ZSort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.util.Callable;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Base implementation for Vectorial data Legends.
+ * 
+ * Provides a draw method implementation which loads the {@link Feature}s and
+ * uses the {@link ISymbol} objects to draw the {@link Geometry} objects.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractVectorialLegend extends AbstractLegend implements
+IVectorLegend {
+	
+	private static final Logger LOG = LoggerFactory
+			.getLogger(AbstractVectorialLegend.class);
+
+    private static final int DRAW_MAX_ATTEMPTS = 5;
+
+	public static final String VECTORIAL_LEGEND_PERSISTENCE_DEFINITION_NAME = "VectorialLegend";
+
+    private static final String FIELD_HAS_ZSORT = "hasZSort";
+    private static final String FIELD_SHAPETYPE = "shapeType";
+    private static final String FIELD_DEFAULT_SYMBOL = "defaultSymbol";
+
+    private static final GeometryManager geomManager = GeometryLocator
+    .getGeometryManager();
+
+    protected ZSort zSort;
+
+    public ZSort getZSort() {
+        return zSort;
+    }
+
+    public void setZSort(ZSort zSort) {
+        if (zSort == null) {
+            removeLegendListener(this.zSort);
+        }
+        this.zSort = zSort;
+        addLegendListener(zSort);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
+        Cancellable cancel, double scale, Map queryParameters,
+        ICoordTrans coordTrans, FeatureStore featureStore)
+    throws LegendException {
+        double dpi = viewPort.getDPI();
+        draw(image, g, viewPort, cancel, scale, queryParameters, coordTrans,
+            featureStore, null, dpi);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
+        Cancellable cancel, double scale, Map queryParameters,
+        ICoordTrans coordTrans, FeatureStore featureStore, FeatureQuery featureQuery)
+    throws LegendException {
+        double dpi = viewPort.getDPI();
+        draw(image, g, viewPort, cancel, scale, queryParameters, coordTrans,
+            featureStore, featureQuery, dpi);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+        double scale, Map queryParameters, ICoordTrans coordTrans,
+        FeatureStore featureStore, PrintAttributes properties)
+    throws LegendException {
+        print(g, viewPort, cancel, scale, queryParameters, coordTrans,
+            featureStore, null, properties);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+        double scale, Map queryParameters, ICoordTrans coordTrans,
+        FeatureStore featureStore, FeatureQuery fquery, PrintAttributes properties)
+    throws LegendException {
+        double dpi = 72;
+
+        int resolution = properties.getPrintQuality();
+
+        if (resolution == PrintAttributes.PRINT_QUALITY_DRAFT
+            || resolution == PrintAttributes.PRINT_QUALITY_NORMAL
+            || resolution == PrintAttributes.PRINT_QUALITY_HIGH) {
+            dpi = PrintAttributes.PRINT_QUALITY_DPI[resolution];
+        }
+
+        FeatureSet featureSet = null;
+        DisposableIterator it = null;
+        try {
+            ZSort zSort = getZSort();
+
+            // if layer has map levels it will use a ZSort
+            boolean useZSort = zSort != null && zSort.isUsingZSort();
+
+            int mapLevelCount = (useZSort) ? zSort.getLevelCount() : 1;
+            for (int mapPass = 0; mapPass < mapLevelCount; mapPass++) {
+                
+                Envelope vp_env_in_store_crs = null;
+                IProjection store_crs = null;
+                if (coordTrans != null) {
+                    // 'coordTrans' is from store crs to vp crs
+                    ICoordTrans inv = coordTrans.getInverted();
+                    Envelope aux = viewPort.getAdjustedEnvelope();
+                    vp_env_in_store_crs = aux.convert(inv);
+                    store_crs = coordTrans.getPOrig();
+                } else {
+                    vp_env_in_store_crs = viewPort.getAdjustedEnvelope();
+                    store_crs = viewPort.getProjection();
+                }
+                
+                FeatureQuery feat_query = fquery;
+                Envelope store_env = featureStore.getEnvelope();
+                boolean use_intersection_cond = false;
+                if (store_env == null) {
+                    // Store does not know its envelope, so we must:
+                    use_intersection_cond = true;
+                } else {
+                    if (vp_env_in_store_crs.contains(store_env)) {
+                        use_intersection_cond = false;
+                    } else {
+                        use_intersection_cond = true;
+                    }
+                }
+                
+                if (use_intersection_cond) {
+                    FeatureType ft = featureStore.getDefaultFeatureType(); 
+                    IntersectsEnvelopeEvaluator iee =
+                        new IntersectsEnvelopeEvaluator(
+                            vp_env_in_store_crs,
+                            store_crs,
+                            ft, ft.getDefaultGeometryAttributeName());
+                    if (feat_query == null) {
+                        feat_query = featureStore.createFeatureQuery();
+                        String[] fns = getRequiredFeatureAttributeNames(featureStore);
+                        feat_query.setAttributeNames(fns);
+                    }
+                    feat_query.addFilter(iee);
+                }
+                
+                // 'feat_query' can still be NULL here, so we only filter
+                // the featureStore if it's not null
+                if (feat_query == null) {
+                    featureSet = featureStore.getFeatureSet();
+                } else {
+                    featureSet = featureStore.getFeatureSet(feat_query);
+                }
+                it = featureSet.fastIterator();
+                // Iteration over each feature
+                while (!cancel.isCanceled() && it.hasNext()) {
+                    Feature feat = (Feature) it.next();
+                    Geometry geom = feat.getDefaultGeometry();
+                    if (geom==null) {
+                    	continue;
+                    }                    
+                    // Reprojection if needed
+                    if (coordTrans != null) {
+                        geom = geom.cloneGeometry();
+                        geom.reProject(coordTrans);
+                    }
+
+                    // retrieve the symbol associated to such feature
+                    ISymbol sym = getSymbolByFeature(feat);
+                    if (sym == null) {
+                        continue;
+                    }
+                    if (useZSort) {
+                        int[] symLevels = zSort.getLevels(sym);
+                        if (symLevels != null) {
+
+                            // Check if this symbol is a multilayer
+                            if (sym instanceof IMultiLayerSymbol) {
+                                // if so, get the layer corresponding to the
+                                // current level. If none, continue to next
+                                // iteration
+                                IMultiLayerSymbol mlSym = (IMultiLayerSymbol) sym;
+                                for (int i = 0; i < mlSym.getLayerCount(); i++) {
+                                    ISymbol mySym = mlSym.getLayer(i);
+                                    if (symLevels[i] == mapPass) {
+                                        sym = mySym;
+                                        break;
+                                    }
+                                }
+
+                            } else {
+                                // else, just draw the symbol in its level
+                                if (symLevels[0] != mapPass) {
+                                    continue;
+                                }
+                            }
+                        }
+                    }
+
+                    // Check if this symbol is sized with CartographicSupport
+                    CartographicSupport csSym = null;
+                    int symbolType = sym.getSymbolType();
+
+                    if (symbolType == Geometry.TYPES.POINT
+                        || symbolType == Geometry.TYPES.CURVE
+                        || sym instanceof CartographicSupport) {
+
+                        csSym = (CartographicSupport) sym;
+                    }
+
+                    DrawOperationContext doc = new DrawOperationContext();
+                    doc.setGraphics(g);
+                    doc.setViewPort(viewPort);
+                    if (csSym == null) {
+                        doc.setSymbol(sym);
+                    } else {
+                        doc.setDPI(dpi);
+                        doc.setCancellable(cancel);
+                        doc.setSymbol((ISymbol) csSym);
+                    }
+                    geom.invokeOperation(DrawInts.CODE, doc);
+                }
+            }
+        } catch (ReadException e) {
+            throw new LegendDrawingException(e);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new LegendDrawingException(e);
+        } catch (GeometryOperationException e) {
+            throw new LegendDrawingException(e);
+        } catch (DataException e) {
+            throw new LegendDrawingException(e);
+        } catch (MapContextException e) {
+            throw new LegendDrawingException(e);
+        } finally {
+            if (it != null) {
+                it.dispose();
+            }
+            if (featureSet != null) {
+                featureSet.dispose();
+            }
+        }
+    }
+
+    /**
+     * Draws the features from the {@link FeatureStore}, filtered with the scale
+     * and the query parameters, with the symbols of the legend.
+     */
+    @SuppressWarnings("unchecked")
+	protected void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
+			Cancellable cancel, double scale, Map queryParameters,
+			ICoordTrans coordTrans, FeatureStore featureStore,
+			FeatureQuery featureQuery, double dpi) throws LegendException {
+
+		SimpleTaskStatus taskStatus = ToolsLocator.getTaskStatusManager()
+				.createDefaultSimpleTaskStatus(featureStore.getName());
+		taskStatus.add();
+		try {
+			// Avoid ConcurrentModificationException errors if
+			// while drawing another thread edits the store data.
+			synchronized (featureStore) {
+				internalDraw(image, g, viewPort, cancel, scale,
+						queryParameters, coordTrans, featureStore,
+						featureQuery, dpi, taskStatus);
+			}
+		} finally {
+			if (taskStatus != null) {
+				taskStatus.terminate();
+				taskStatus.remove();
+				taskStatus = null;
+			}
+		}
+	}
+
+	protected void internalDraw(BufferedImage image, Graphics2D g,
+			ViewPort viewPort, Cancellable cancel, double scale,
+			Map queryParameters, ICoordTrans coordTrans,
+			FeatureStore featureStore, FeatureQuery featureQuery, double dpi,
+			SimpleTaskStatus taskStatus) throws LegendDrawingException {
+
+		if (!getDefaultSymbol().isShapeVisible()) {
+			return;
+		}
+
+		if (cancel.isCanceled()) {
+			return;
+		}
+
+		IProjection dataProjection;
+		Envelope reprojectedDataEnvelop;
+
+		try {
+			if (coordTrans == null) {
+				dataProjection = featureStore.getDefaultFeatureType()
+						.getDefaultSRS();
+
+				// If the data does not provide a projection, use the
+				// current view one
+				if (dataProjection == null) {
+					dataProjection = viewPort.getProjection();
+				}
+
+				reprojectedDataEnvelop = featureStore.getEnvelope();
+			} else {
+				dataProjection = coordTrans.getPOrig();
+
+				Envelope env = featureStore.getEnvelope();
+				if ( env!=null && !env.isEmpty()) {
+					reprojectedDataEnvelop = env.convert(coordTrans);
+				} else {
+					reprojectedDataEnvelop = env;
+				}
+			}
+		} catch (DataException e) {
+			throw new LegendDrawingException(e);
+		}
+
+		// Gets the view envelope
+		Envelope viewPortEnvelope = viewPort.getAdjustedEnvelope();
+
+		// Gets the data envelope with the viewport SRS
+		Envelope myEnvelope = reprojectedDataEnvelop;
+
+		// TODO: in some cases, the legend may need a different check to
+		// decide if the data must be drawn or not
+		// Checks if the viewport envelope intersects with the data envelope
+		if (!viewPortEnvelope.intersects(myEnvelope)) {
+			// The data is not visible in the current viewport, do nothing.
+			return;
+		}
+
+		// Check if all the data is contained into the viewport envelope
+		boolean containsAll = viewPortEnvelope.contains(myEnvelope);
+
+		// Create the drawing notification to be reused on each iteration
+		DefaultFeatureDrawnNotification drawnNotification = new DefaultFeatureDrawnNotification();
+
+		if (cancel.isCanceled()) {
+			return;
+		}
+
+		FeatureSet featureSet = null;
+		try {
+			taskStatus.message("Retrieve selection");
+			FeatureSelection selection = featureStore.getFeatureSelection();
+
+			if (featureQuery == null) {
+				featureQuery = featureStore.createFeatureQuery();
+			}
+
+			completeQuery(featureStore, featureQuery, scale, queryParameters,
+					coordTrans, dataProjection, viewPortEnvelope, containsAll);
+
+			taskStatus.message("Retrieve data");
+			featureSet = featureStore.getFeatureSet(featureQuery);
+
+			if (cancel.isCanceled()) {
+				return;
+			}
+
+			taskStatus.message("Drawing");
+			drawFeatures(image, g, viewPort, cancel, coordTrans, dpi,
+					drawnNotification, featureSet, selection);
+
+        } catch (RuntimeException e) {
+            /*
+             * Probably a reprojection exception (for example,
+             * trying to reproject Canada to EPSG:23030)
+             */
+            throw new LegendDrawingException(e);
+		} catch (BaseException e) {
+			throw new LegendDrawingException(e);
+		} finally {
+			if (featureSet != null) {
+				featureSet.dispose();
+			}
+		}
+	}
+
+    /**
+     * Complete a {@link FeatureQuery} to load the {@link Feature}s to draw.
+     */
+    @SuppressWarnings("unchecked")
+    private FeatureQuery completeQuery(FeatureStore featureStore, FeatureQuery featureQuery, double scale,
+        Map queryParameters, ICoordTrans coordTrans,
+        IProjection dataProjection, Envelope viewPortEnvelope,
+        boolean containsAll) throws DataException {
+
+        featureQuery.setScale(scale);
+        
+        //Adds the attributes
+        String[] fieldNames = getRequiredFeatureAttributeNames(featureStore);
+        for (int i=0 ; i<fieldNames.length ;i++){
+            featureQuery.addAttributeName(fieldNames[i]);
+        }       
+        
+        // TODO: Mobile has it's own IntersectsEnvelopeEvaluator
+        if (!containsAll) {
+            // Gets the viewport envelope with the data SRS
+            Envelope viewPortEnvelopeInMyProj = viewPortEnvelope;
+            // FIXME
+            if (coordTrans != null) {
+                viewPortEnvelopeInMyProj = viewPortEnvelope.convert(coordTrans
+                        .getInverted());
+            }
+
+            if (dataProjection == null) {
+                throw new IllegalArgumentException(
+                "Error, the projection parameter value is null");
+            }
+
+            IntersectsEnvelopeEvaluator iee = new IntersectsEnvelopeEvaluator(
+                viewPortEnvelopeInMyProj, dataProjection,
+                featureStore.getDefaultFeatureType(), featureStore
+                .getDefaultFeatureType()
+                .getDefaultGeometryAttributeName());
+            featureQuery.addFilter(iee);			
+        }
+        if (queryParameters != null) {
+            Iterator iterEntry = queryParameters.entrySet().iterator();
+            Entry entry;
+            while (iterEntry.hasNext()) {
+                entry = (Entry) iterEntry.next();
+                featureQuery.setQueryParameter((String) entry.getKey(),
+                    entry.getValue());
+            }
+        }	
+        return featureQuery;
+    }
+
+    /**
+     * Draws the features from the {@link FeatureSet}, with the symbols of the
+     * legend.
+     */
+    private void drawFeatures(BufferedImage image, Graphics2D g,
+        ViewPort viewPort, Cancellable cancel, ICoordTrans coordTrans,
+        double dpi, DefaultFeatureDrawnNotification drawnNotification,
+        FeatureSet featureSet, FeatureSelection selection)
+    throws BaseException {
+        if (isUseZSort()) {
+            drawFeaturesMultiLayer(image, g, viewPort, cancel, coordTrans, dpi,
+                drawnNotification, featureSet, selection);
+        } else {
+            drawFeaturesSingleLayer(image, g, viewPort, cancel, coordTrans,
+                dpi, drawnNotification, featureSet, selection);
+        }
+    }
+
+    /**
+     * Draws the features from the {@link FeatureSet}, with the symbols of the
+     * legend, using a single drawing layer.
+     */
+    private void drawFeaturesSingleLayer(final BufferedImage image,
+        final Graphics2D g, final ViewPort viewPort,
+        final Cancellable cancel, final ICoordTrans coordTrans,
+        final double dpi,
+        final DefaultFeatureDrawnNotification drawnNotification,
+        FeatureSet featureSet, final FeatureSelection selection)
+    throws BaseException {
+
+        try {
+            featureSet.accept(new Visitor() {
+                public void visit(Object obj) throws VisitCanceledException,
+                BaseException {
+                    Feature feat = (Feature) obj;
+                    drawFeatureSingleLayer(image, g, viewPort, cancel,
+                        coordTrans, dpi, drawnNotification, feat, selection);
+                }
+            });
+
+        } catch (ConcurrentDataModificationException e) {
+            cancel.setCanceled(true);
+            return;
+        }
+    }
+
+    /**
+     * Draws a Feature with the symbols of the legend, using a single drawing
+     * layer.
+     */
+    private void drawFeatureSingleLayer(BufferedImage image, Graphics2D g,
+        ViewPort viewPort, Cancellable cancel, ICoordTrans coordTrans,
+        double dpi, DefaultFeatureDrawnNotification drawnNotification,
+        Feature feat, FeatureSelection selection)
+    throws MapContextException, CreateGeometryException {
+
+        Geometry geom = feat.getDefaultGeometry();
+        if (geom == null) {
+            return;
+        }
+
+        if (geom.getType() == Geometry.TYPES.NULL) {
+            return;
+        }
+
+        ISymbol sym = getSymbol(feat, selection);
+        if (sym == null) {
+            return;
+        }
+
+        if (coordTrans != null) {
+            geom = geom.cloneGeometry();
+            try {
+                geom.reProject(coordTrans);
+            } catch (ReprojectionRuntimeException re) {
+                /*
+                 * Library was unable to reproject
+                 * See reproject method in Point2D (geometry)
+                 */
+                throw new CreateGeometryException(
+                    geom.getGeometryType().getType(),
+                    geom.getGeometryType().getSubType(),
+                    re);
+            }
+        }
+
+        if (cancel.isCanceled()) {
+            return;
+        }
+
+        drawGeometry(geom, image, feat, sym, viewPort, g, dpi, cancel);
+
+        // Notify the drawing observers
+        drawnNotification.setFeature(feat);
+        drawnNotification.setDrawnGeometry(geom);
+        notifyObservers(drawnNotification);
+    }
+
+    /**
+     * Draws the features from the {@link FeatureSet}, with the symbols of the
+     * legend, using a multiple drawing layer.
+     */
+    private void drawFeaturesMultiLayer(BufferedImage image, Graphics2D g,
+        ViewPort viewPort, Cancellable cancel, ICoordTrans coordTrans,
+        double dpi, DefaultFeatureDrawnNotification drawnNotification,
+        FeatureSet featureSet, FeatureSelection selection)
+    throws MapContextException, CreateGeometryException, DataException {
+
+        // -- visual FX stuff
+        long time = System.currentTimeMillis();
+
+        boolean bSymbolLevelError = false;
+        // render temporary map each screenRefreshRate milliseconds;
+        int screenRefreshDelay = (int) ((1D / MapContext.getDrawFrameRate()) * 3 * 1000);
+        BufferedImage[] imageLevels = null;
+        Graphics2D[] graphics = null;
+
+        imageLevels = new BufferedImage[getZSort().getLevelCount()];
+        graphics = new Graphics2D[imageLevels.length];
+        for (int i = 0; !cancel.isCanceled() && i < imageLevels.length; i++) {
+
+            imageLevels[i] = CompatLocator.getGraphicsUtils()
+            .createBufferedImage(image.getWidth(), image.getHeight(),
+                image.getType());
+
+            graphics[i] = imageLevels[i].createGraphics();
+            graphics[i].setTransform(g.getTransform());
+            graphics[i].setRenderingHints(g.getRenderingHints());
+        }
+        // -- end visual FX stuff
+
+        DisposableIterator it = null;
+        try {
+            it = featureSet.fastIterator();
+            // Iteration over each feature
+            while (it.hasNext()) {
+                if (cancel.isCanceled()) {
+                    return;
+                }
+                Feature feat = (Feature) it.next();
+
+                bSymbolLevelError |= drawFeatureMultiLayer(image, g, viewPort,
+                    cancel, coordTrans, dpi, drawnNotification, selection,
+                    time, screenRefreshDelay, imageLevels, graphics, feat);
+
+            }
+        } catch (ConcurrentDataModificationException e) {
+            cancel.setCanceled(true);
+            return;
+        } finally {
+            if (it != null) {
+                it.dispose();
+            }
+        }
+
+        g.drawImage(image, 0, 0, null);
+
+        Point2D offset = viewPort.getOffset();
+        CompatLocator.getGraphicsUtils().translate(g, offset.getX(),
+            offset.getY());
+
+        for (int i = 0; !cancel.isCanceled() && i < imageLevels.length; i++) {
+            g.drawImage(imageLevels[i], 0, 0, null);
+            imageLevels[i] = null;
+            graphics[i] = null;
+        }
+
+        CompatLocator.getGraphicsUtils().translate(g, -offset.getX(),
+            -offset.getY());
+
+        imageLevels = null;
+        graphics = null;
+
+        if (bSymbolLevelError) {
+            setZSort(null);
+        }
+    }
+
+    /**
+     * Draws a Feature with the symbols of the legend, using a multiple drawing
+     * layer.
+     */
+    private boolean drawFeatureMultiLayer(BufferedImage image, Graphics2D g,
+        ViewPort viewPort, Cancellable cancel, ICoordTrans coordTrans,
+        double dpi, DefaultFeatureDrawnNotification drawnNotification,
+        FeatureSelection selection, long time, int screenRefreshDelay,
+        BufferedImage[] imageLevels, Graphics2D[] graphics, Feature feat)
+    throws MapContextException, CreateGeometryException {
+
+        Geometry geom = feat.getDefaultGeometry();
+        boolean bSymbolLevelError = false;
+        long drawingTime = time;
+
+        if (geom==null && geom.getType() == Geometry.TYPES.NULL) {
+            return false;
+        }
+
+        ISymbol sym = getSymbol(feat, selection);
+
+        if (sym == null) {
+            return false;
+        }
+
+        if (coordTrans != null) {
+            geom = geom.cloneGeometry();
+            geom.reProject(coordTrans);
+        }
+
+        if (cancel.isCanceled()) {
+            return false;
+        }
+
+        // Check if this symbol is a multilayer
+        int[] symLevels = getZSort().getLevels(sym);
+        if (sym instanceof IMultiLayerSymbol) {
+            // if so, treat each of its layers as a single
+            // symbol
+            // in its corresponding map level
+            IMultiLayerSymbol mlSym = (IMultiLayerSymbol) sym;
+            for (int i = 0; !cancel.isCanceled() && i < mlSym.getLayerCount(); i++) {
+                ISymbol mySym = mlSym.getLayer(i);
+                int symbolLevel = 0;
+                if (symLevels != null) {
+                    symbolLevel = symLevels[i];
+                } else {
+                    /*
+                     * an error occured when managing symbol levels some of the
+                     * legend changed events regarding the symbols did not
+                     * finish satisfactory and the legend is now inconsistent.
+                     * For this drawing, it will finish as it was at the bottom
+                     * (level 0) but, when done, the ZSort will be reset to
+                     * avoid app crashes. This is a bug that has to be fixed.
+                     */
+                    bSymbolLevelError = true;
+                }
+                drawGeometry(geom, imageLevels[symbolLevel], feat, mySym,
+                    viewPort, graphics[symbolLevel], dpi, cancel);
+            }
+        } else {
+            // else, just draw the symbol in its level
+            int symbolLevel = 0;
+            if (symLevels != null) {
+                symbolLevel = symLevels[0];
+            }
+            drawGeometry(geom, imageLevels[symbolLevel], feat, sym, viewPort,
+                graphics[symbolLevel], dpi, cancel);
+        }
+
+        // -- visual FX stuff
+        // Cuando el offset!=0 se est� dibujando sobre el
+        // Layout y por tanto no tiene que ejecutar el
+        // siguiente c�digo.
+        Point2D offset = viewPort.getOffset();
+        if (offset.getX() == 0 && offset.getY() == 0) {
+            if ((System.currentTimeMillis() - drawingTime) > screenRefreshDelay) {
+
+                BufferedImage virtualBim = CompatLocator.getGraphicsUtils()
+                .createBufferedImage(image.getWidth(),
+                    image.getHeight(), BufferedImage.TYPE_INT_ARGB);
+
+                Graphics2D virtualGraphics = virtualBim.createGraphics();
+                virtualGraphics.drawImage(image, 0, 0, null);
+                for (int i = 0; !cancel.isCanceled() && i < imageLevels.length; i++) {
+                    virtualGraphics.drawImage(imageLevels[i], 0, 0, null);
+                }
+                g.clearRect(0, 0, image.getWidth(), image.getHeight());
+                g.drawImage(virtualBim, 0, 0, null);
+                drawingTime = System.currentTimeMillis();
+            }
+            // -- end visual FX stuff
+
+        }
+        // Notify the drawing observers
+        drawnNotification.setFeature(feat);
+        drawnNotification.setDrawnGeometry(geom);
+        notifyObservers(drawnNotification);
+        return bSymbolLevelError;
+    }
+
+    /**
+     * Returns the symbol to use to draw a {@link Feature} taking into account
+     * if it is selected.
+     */
+    private ISymbol getSymbol(Feature feat, FeatureSelection selection)
+    throws MapContextException {
+        // retrieve the symbol associated to such feature
+        ISymbol sym = getSymbolByFeature(feat);
+
+        if (sym != null && selection.isSelected(feat)) {
+            sym = sym.getSymbolForSelection();
+        }
+        return sym;
+    }
+
+    /**
+     * Returns if the legend is using a ZSort.
+     */
+    private boolean isUseZSort() {
+        return getZSort() != null && getZSort().isUsingZSort();
+    }
+
+    /**
+     * Draws a {@link Geometry} using the given {@link ISymbol}, over the
+     * {@link Graphics2D} object.
+     */
+    private void drawGeometry(Geometry geom, BufferedImage image,
+        Feature feature, ISymbol symbol, ViewPort viewPort,
+        Graphics2D graphics, double dpi, Cancellable cancellable)
+    throws CreateGeometryException {
+
+        if (geom instanceof Aggregate) {
+            drawAggregate((Aggregate) geom, image, feature, symbol, viewPort,
+                graphics, dpi, cancellable);
+        } else {
+            boolean bDrawCartographicSupport = false;
+            if (symbol instanceof CartographicSupport) {
+                bDrawCartographicSupport = ((CartographicSupport) symbol)
+                .getUnit() != -1;
+            }
+
+            double previousSize = 0.0d;
+
+            if (bDrawCartographicSupport) {
+                // make the symbol to resize itself with the current rendering
+                // context
+                previousSize = ((CartographicSupport) symbol)
+                .toCartographicSize(viewPort, dpi, geom);
+            }
+
+            try {
+                symbol.draw(graphics, viewPort.getAffineTransform(), geom,
+                    feature, cancellable);
+            } finally {
+                if (bDrawCartographicSupport) {
+                    // restore previous size
+                    ((CartographicSupport) symbol).setCartographicSize(
+                        previousSize, geom);
+                }
+            }
+        }
+    }
+
+    /**
+     * Draws an {@link Aggregate} using the given {@link ISymbol}, over the
+     * {@link Graphics2D} object.
+     */
+    private void drawAggregate(Aggregate aggregate, BufferedImage image,
+        Feature feature, ISymbol symbol, ViewPort viewPort,
+        Graphics2D graphics, double dpi, Cancellable cancellable)
+    throws CreateGeometryException {
+        for (int i = 0; i < aggregate.getPrimitivesNumber(); i++) {
+            Geometry prim = aggregate.getPrimitiveAt(i);
+            drawGeometry(prim, image, feature, symbol, viewPort, graphics, dpi,
+                cancellable);
+        }
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        AbstractVectorialLegend clone = (AbstractVectorialLegend) super.clone();
+
+        // Clone zSort
+        ZSort zSort = getZSort();
+        if (zSort != null) {
+            clone.setZSort(new ZSort(clone));
+        }
+        return clone;
+    }
+
+    public void loadFromState(PersistentState state)
+    throws PersistenceException {
+        // Set parent properties
+        super.loadFromState(state);
+        // Set own properties
+
+        setShapeType(state.getInt(FIELD_SHAPETYPE));
+        if (state.getBoolean(FIELD_HAS_ZSORT)) {
+            setZSort(new ZSort(this));
+        }
+        setDefaultSymbol((ISymbol) state.get(FIELD_DEFAULT_SYMBOL));
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // Save parent properties
+        super.saveToState(state);
+        // Save own properties
+        state.set(FIELD_SHAPETYPE, getShapeType());
+        state.set(FIELD_HAS_ZSORT, this.zSort != null);
+        state.set(FIELD_DEFAULT_SYMBOL, getDefaultSymbol());
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if (manager
+                .getDefinition(VECTORIAL_LEGEND_PERSISTENCE_DEFINITION_NAME) == null) {
+                DynStruct definition = manager.addDefinition(
+                    AbstractVectorialLegend.class,
+                    VECTORIAL_LEGEND_PERSISTENCE_DEFINITION_NAME,
+                    VECTORIAL_LEGEND_PERSISTENCE_DEFINITION_NAME
+                    + " persistence definition", null, null);
+                // Extend the Legend base definition
+                definition.extend(manager
+                    .getDefinition(LEGEND_PERSISTENCE_DEFINITION_NAME));
+
+                // Shapetype
+                definition.addDynFieldInt(FIELD_SHAPETYPE).setMandatory(true);
+                // ZSort
+                definition.addDynFieldBoolean(FIELD_HAS_ZSORT).setMandatory(
+                    true);
+                // Default symbol
+                definition.addDynFieldObject(FIELD_DEFAULT_SYMBOL)
+                .setClassOfValue(ISymbol.class).setMandatory(true);
+            }
+            return Boolean.TRUE;
+        }
+
+    }
+
+    /**
+     * Returns the names of the {@link Feature} attributes required for the
+     * {@link ILegend} to operate.
+     * 
+     * @param featureStore
+     *            the store where the {@link Feature}s belong to
+     * @return the names of required {@link Feature} attribute names
+     * @throws DataException
+     *             if there is an error getting the attribute names
+     */
+    protected abstract String[] getRequiredFeatureAttributeNames(
+        FeatureStore featureStore) throws DataException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractVectorialLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialUniqueValueLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialUniqueValueLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialUniqueValueLegend.java	(revision 42196)
@@ -0,0 +1,466 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialUniqueValueLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendClearEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Vectorial legend for unique values
+ * 
+ * @author Vicente Caballero Navarro
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class VectorialUniqueValueLegend extends AbstractClassifiedVectorLegend implements IVectorialUniqueValueLegend {
+	final static private Logger LOG = LoggerFactory.getLogger(VectorialUniqueValueLegend.class);
+
+	public static final String VECTORIAL_UNIQUE_VALUE_LEGEND_PERSISTENCE_DEFINITION_NAME =
+			"VectorialUniqueValueLegend";
+
+	private static final String FIELD_KEYS = "keys";
+	private static final String FIELD_NULL_VALUE_SYMBOL = "nullValueSymbol";
+	private static final String FIELD_SELECTED_COLORS = "selectedColors";
+	private static final String FIELD_SYMBOLS = "symbols";
+	private static final String FIELD_USE_DEFAULT_SYMBOL = "useDefaultSymbol";
+
+	private Map<Object, ISymbol> symbols = createSymbolMap();
+
+	private List<Object> keys = new ArrayList<Object>();
+
+    private ISymbol defaultSymbol;
+    private int shapeType;
+    private boolean useDefaultSymbol = false;
+    private Color[] selectedColors=null;
+    
+    private ISymbol nullValueSymbol = null;
+    
+    public VectorialUniqueValueLegend() {
+		super();
+	}
+
+    /**
+     * Constructor method
+     *
+     * @param shapeType Type of the shape.
+     */
+    public VectorialUniqueValueLegend(int shapeType) {
+		super();
+    	setShapeType(shapeType);
+    }
+
+    public void setShapeType(int shapeType) {
+    	if (this.shapeType != shapeType) {
+    		if(defaultSymbol==null || defaultSymbol.getSymbolType()!=shapeType){
+    			ISymbol old = defaultSymbol;
+    			defaultSymbol = getSymbolManager().createSymbol(shapeType);
+    			fireDefaultSymbolChangedEvent(new SymbolLegendEvent(old, defaultSymbol));
+    		}
+    		this.shapeType = shapeType;
+    	}
+    }
+
+    public void setValueSymbolByID(int id, ISymbol symbol) {
+        ISymbol old = (ISymbol)symbols.put(keys.get(id), symbol);
+        fireClassifiedSymbolChangeEvent(new SymbolLegendEvent(old, symbol));
+    }
+
+    public Object[] getValues() {
+        return symbols.keySet().toArray(new Object[0]);
+    }
+
+    public void addSymbol(Object key, ISymbol symbol) {
+    	ISymbol resul;
+    	if (key == null) {
+    		resul = nullValueSymbol;
+    		nullValueSymbol = symbol;
+    	}
+    	else {
+			resul = (ISymbol) symbols.put(key, symbol);
+
+			if (resul != null) {
+				LOG.error("Error: la clave " + key + " ya exist�a. Resul = "
+						+ resul);
+				LOG.warn("symbol nuevo:" + symbol.getDescription()
+						+ " Sviejo= " + resul.getDescription());
+			} else {
+				keys.add(key);
+			}
+    	}
+    	
+        fireClassifiedSymbolChangeEvent(new SymbolLegendEvent(resul, symbol));
+    }
+
+    public void clear() {
+        keys.clear();
+        ISymbol[] olds = (ISymbol[])symbols.values().toArray(new ISymbol[0]);
+        symbols.clear();
+        removeLegendListener(getZSort());
+        setZSort(null);
+
+        fireLegendClearEvent(new LegendClearEvent(olds));
+    }
+
+    public String[] getDescriptions() {
+        String[] descriptions = new String[symbols.size()];
+        ISymbol[] auxSym = getSymbols();
+
+        for (int i = 0; i < descriptions.length; i++) {
+			descriptions[i] = auxSym[i].getDescription();
+		}
+
+        return descriptions;
+    }
+
+     public ISymbol[] getSymbols() {
+ 		ISymbol[] symbolList;
+		if (nullValueSymbol == null) {
+			symbolList = new ISymbol[symbols.size()];
+			return (ISymbol[]) symbols.values().toArray(symbolList);
+		}
+		else {
+			symbolList = new ISymbol[symbols.size() + 1];
+			symbolList[0] = nullValueSymbol;
+			int i = 1;
+			for (Iterator<ISymbol> iterator = symbols.values().iterator(); iterator
+					.hasNext();) {
+				symbolList[i] = iterator.next();
+				i++;
+			}
+			return symbolList;
+		}
+    }
+
+    public void setClassifyingFieldNames(String[] fNames) {
+        // TODO: Check if need more process
+        super.setClassifyingFieldNames(fNames);
+    }
+
+    /**
+	 * Devuelve un s�mbolo a partir de una IFeature. OJO!! Cuando usamos un
+	 * feature iterator de base de datos el �nico campo que vendr� rellenado es
+	 * el de fieldID. Los dem�s vendr�n a nulos para ahorra tiempo de creaci�n.
+	 *
+	 * @param feat
+	 *            IFeature
+	 *
+	 * @return S�mbolo.
+     * @throws MapContextException 
+	 */
+    public ISymbol getSymbolByFeature(Feature feat) throws MapContextException {
+
+    	Object val = feat.get(getClassifyingFieldNames()[0]);
+//        Object val = feat.get(fieldId);
+        ISymbol theSymbol = getSymbolByValue(val);
+
+        if (theSymbol != null) {
+        	return theSymbol;
+
+        }
+
+        if (isUseDefaultSymbol()) {
+			return defaultSymbol;
+		}
+
+        return null;
+    }
+
+
+    public ISymbol getDefaultSymbol() {
+
+    	if(defaultSymbol==null) {
+			defaultSymbol = getSymbolManager().createSymbol(shapeType);
+    		fireDefaultSymbolChangedEvent(new SymbolLegendEvent(null, defaultSymbol));
+    	}
+    	return defaultSymbol;
+    }
+
+	public void setDefaultSymbol(ISymbol s) {
+    	ISymbol mySymbol = defaultSymbol;
+
+    	if (s == null) {
+			throw new NullPointerException("Default symbol cannot be null");
+		}
+
+    	ISymbol old = mySymbol;
+    	defaultSymbol = s;
+    	fireDefaultSymbolChangedEvent(new SymbolLegendEvent(old, s));
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.rendering.UniqueValueLegend#getSymbolByValue(com.hardcode.gdbms.engine.values.Value)
+     */
+    public ISymbol getSymbolByValue(Object key) {
+    	ISymbol symbol = null; 
+    	if (key == null) {
+    		symbol = nullValueSymbol;
+    	}
+    	else {
+    		symbol = (ISymbol)symbols.get(key);
+    	}
+    	if (symbol == null && useDefaultSymbol) {
+    		symbol = getDefaultSymbol();
+    	}
+    	return symbol;
+
+    }
+
+	public Object getSymbolKey(ISymbol symbol) {
+		if (symbol != null) {
+			for (Iterator<Entry<Object, ISymbol>> iterator = symbols.entrySet()
+					.iterator(); iterator.hasNext();) {
+				Entry<Object, ISymbol> entry = iterator.next();
+				if (symbol.equals(entry.getValue())) {
+					return entry.getKey();
+				}
+			}
+		}
+		return null;
+	}
+
+    public int getShapeType() {
+        return shapeType;
+    }
+
+    public void useDefaultSymbol(boolean b) {
+        useDefaultSymbol = b;
+    }
+
+    /**
+	 * Devuelve si se utiliza o no el resto de valores para representarse.
+	 * @return  True si se utiliza el resto de valores.
+	 */
+    public boolean isUseDefaultSymbol() {
+        return useDefaultSymbol;
+    }
+
+    public void delSymbol(Object key) {
+        keys.remove(key);
+
+		ISymbol removedSymbol = (ISymbol) symbols.remove(key);
+		if (removedSymbol != null){
+			fireClassifiedSymbolChangeEvent(new SymbolLegendEvent(removedSymbol, null));
+		}
+    }
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void replace(ISymbol oldSymbol, ISymbol newSymbol) {
+		if (symbols.containsValue(oldSymbol)) {
+			Iterator<Object> it = symbols.keySet().iterator();
+			while (it.hasNext()) {
+				Object key = it.next();
+				if (symbols.get(key).equals(oldSymbol)) {
+					fireClassifiedSymbolChangeEvent(new SymbolLegendEvent(
+							(ISymbol)symbols.put(key, newSymbol), newSymbol));
+				}
+
+			}
+		}
+	}
+	public Color[] getColorScheme() {
+		return selectedColors;
+	}
+
+	public void setColorScheme(Color[] cc) {
+		 this.selectedColors = cc;
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		VectorialUniqueValueLegend clone =
+				(VectorialUniqueValueLegend) super.clone();
+
+		// Clone default symbol
+		if (defaultSymbol != null) {
+			clone.defaultSymbol = (ISymbol) defaultSymbol.clone();
+		}
+		// Clone keys
+		clone.keys = new ArrayList<Object>();
+		
+        // ====================================================
+		// Temporarily remove listeners to prevent
+		// cascade of notifications
+		LegendContentsChangedListener[] list = this.getListeners();
+		removeListeners(list);
+        // ====================================================
+
+		// Clone symbols
+		if (symbols != null) {
+			clone.symbols = createSymbolMap();
+			for (Iterator<Entry<Object, ISymbol>> iterator =
+					symbols.entrySet().iterator(); iterator.hasNext();) {
+				Entry<Object, ISymbol> entry = iterator.next();
+				ISymbol symbolClone =
+						(ISymbol) ((ISymbol) entry.getValue()).clone();
+				// Map keys are of type Number or String, so being
+				// immutable objects, don't clone them
+				clone.addSymbol(entry.getKey(), symbolClone);
+			}
+		}
+		
+        // ====================================================
+        // Restore listeners
+        addListeners(list);
+        // ====================================================
+		return clone;
+	}
+
+
+    private void addListeners(LegendContentsChangedListener[] list) {
+        int len = list.length;
+        for (int i=0; i<len; i++) {
+            addLegendListener(list[i]);
+        }
+    }
+
+    private void removeListeners(LegendContentsChangedListener[] list) {
+        int len = list.length;
+        for (int i=0; i<len; i++) {
+            removeLegendListener(list[i]);
+        }
+    }
+
+    private Map<Object, ISymbol> createSymbolMap() {
+		return new TreeMap<Object, ISymbol>(
+				new Comparator<Object>() { 
+					public int compare(Object o1, Object o2) {
+						if ((o1 != null) && (o2 != null)) {
+							Object v2 = o2;
+							Object v1 = o1;
+							if (v1 instanceof Number && v2 instanceof Number) {
+								return ((Number) v1).intValue()
+										- ((Number) v2).intValue();
+							}
+							if (v1 instanceof String && v2 instanceof String) {
+								return ((String) v1).compareTo(((String) v2));
+							}
+						}
+
+						return 0;
+					}
+				});
+
+	}
+
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent properties
+		super.loadFromState(state);
+		// Set own properties
+		keys = new ArrayList<Object>((List) state.get(FIELD_KEYS));
+		nullValueSymbol = (ISymbol) state.get(FIELD_NULL_VALUE_SYMBOL);
+		selectedColors =
+				(Color[]) state.getArray(FIELD_SELECTED_COLORS, Color.class);
+		Map persistedSymbolMap = (Map) state.get(FIELD_SYMBOLS);
+		if (persistedSymbolMap != null) {
+			symbols.putAll(persistedSymbolMap);
+		}
+		useDefaultSymbol(state.getBoolean(FIELD_USE_DEFAULT_SYMBOL));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_KEYS, keys);
+		state.set(FIELD_NULL_VALUE_SYMBOL, nullValueSymbol);
+		state.set(FIELD_SELECTED_COLORS, selectedColors);
+		state.set(FIELD_USE_DEFAULT_SYMBOL, isUseDefaultSymbol());
+		state.set(FIELD_SYMBOLS, symbols);
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(VECTORIAL_UNIQUE_VALUE_LEGEND_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						VectorialUniqueValueLegend.class,
+						VECTORIAL_UNIQUE_VALUE_LEGEND_PERSISTENCE_DEFINITION_NAME,
+						VECTORIAL_UNIQUE_VALUE_LEGEND_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the Classified Vector Legend base definition
+				definition.extend(manager.getDefinition(CLASSIFIED_VECTOR_LEGEND_PERSISTENCE_DEFINITION_NAME));
+
+				// Keys
+				definition.addDynFieldList(FIELD_KEYS).setClassOfItems(Object.class);
+				// Null interval symbol
+				definition.addDynFieldObject(FIELD_NULL_VALUE_SYMBOL).setClassOfValue(ISymbol.class);
+				// Selected colors
+				definition.addDynFieldList(FIELD_SELECTED_COLORS).setClassOfItems(Color.class);
+				// Symbols
+				definition.addDynFieldMap(FIELD_SYMBOLS).setClassOfItems(ISymbol.class);
+				// Use default symbol?
+				definition.addDynFieldBoolean(FIELD_USE_DEFAULT_SYMBOL);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterLegend implements Callable {
+
+		public Object call() throws Exception {
+	        MapContextManager manager = MapContextLocator.getMapContextManager();
+	        
+            manager.registerLegend(IVectorialUniqueValueLegend.LEGEND_NAME,
+                    VectorialUniqueValueLegend.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialUniqueValueLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractClassifiedVectorLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractClassifiedVectorLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractClassifiedVectorLegend.java	(revision 42196)
@@ -0,0 +1,177 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendClearEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Abstract class that implements the interface for legends composed by
+ * classified symbols.It will have two methods that will be executed depending
+ * on the action that had been done with the legend (addition of a new symbol or
+ * clear the legend).
+ * 
+ * @author 2008- pepe vidal salvador - jose.vidal.salvador@iver.es
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractClassifiedVectorLegend extends
+		AbstractVectorialLegend implements IClassifiedVectorLegend {
+
+	public static final String CLASSIFIED_VECTOR_LEGEND_PERSISTENCE_DEFINITION_NAME =
+			"ClassifiedVectorLegend";
+
+	private static final String FIELD_FIELD_NAMES = "fieldNames";
+	private static final String FIELD_FIELD_TYPES = "fieldTypes";
+
+	private String[] fieldNames;
+	private int[] fieldTypes;
+
+	/**
+	 * Looks for a change in a classified symbol of a legend. To perform it, the
+	 * Array of LegendListeners is scaned and when the corresponding listener is
+	 * true, the method is invoked and the change will be done.
+	 * 
+	 * @param event
+	 */
+	public void fireClassifiedSymbolChangeEvent(SymbolLegendEvent event) {
+		for (int i = 0; i < getListeners().length; i++) {
+			getListeners()[i].symbolChanged(event);
+		}
+	}
+
+	/**
+	 * Looks for a change in a legend of classified symbols. In this case if the
+	 * specific legend is cleared.
+	 * 
+	 * @param event
+	 */
+	public void fireLegendClearEvent(LegendClearEvent event) {
+		for (int i = 0; i < getListeners().length; i++) {
+			getListeners()[i].legendCleared(event);
+		}
+	}
+
+	public String[] getClassifyingFieldNames() {
+		return fieldNames;
+	}
+
+	public void setClassifyingFieldNames(String[] fieldNames) {
+		this.fieldNames = fieldNames;
+	}
+
+	public int[] getClassifyingFieldTypes() {
+		return fieldTypes;
+	}
+
+	public void setClassifyingFieldTypes(int[] fieldTypes) {
+		this.fieldTypes = fieldTypes;
+	}
+
+	public boolean isSuitableForShapeType(int shapeType) {
+		return getShapeType() == shapeType;
+	}
+
+	protected String[] getRequiredFeatureAttributeNames(
+			FeatureStore featureStore) throws DataException {
+		String[] requiredFieldNames = null;
+		String[] classified = getClassifyingFieldNames();
+		requiredFieldNames = new String[classified.length + 1];
+		requiredFieldNames[0] =
+				featureStore.getDefaultFeatureType()
+						.getDefaultGeometryAttributeName();
+		for (int i = 1; i < requiredFieldNames.length; i++) {
+			requiredFieldNames[i] = classified[i - 1];
+		}
+
+		return requiredFieldNames;
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		AbstractClassifiedVectorLegend clone =
+				(AbstractClassifiedVectorLegend) super.clone();
+
+		// Clone fieldNames
+		clone.fieldNames = new String[fieldNames.length];
+		System.arraycopy(fieldNames, 0, clone.fieldNames, 0, fieldNames.length);
+		// Clone fieldTypes
+		clone.fieldTypes = new int[fieldTypes.length];
+		System.arraycopy(fieldTypes, 0, clone.fieldTypes, 0, fieldTypes.length);
+
+		return clone;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent properties
+		super.loadFromState(state);
+		// Set own properties
+		this.fieldNames = state.getStringArray(FIELD_FIELD_NAMES);
+		this.fieldTypes = state.getIntArray(FIELD_FIELD_TYPES);
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_FIELD_NAMES, this.fieldNames);
+		state.set(FIELD_FIELD_TYPES, this.fieldTypes);
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(CLASSIFIED_VECTOR_LEGEND_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						AbstractClassifiedVectorLegend.class,
+						CLASSIFIED_VECTOR_LEGEND_PERSISTENCE_DEFINITION_NAME,
+						CLASSIFIED_VECTOR_LEGEND_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the Vectorial Legend base definition
+				definition.extend(manager.getDefinition(VECTORIAL_LEGEND_PERSISTENCE_DEFINITION_NAME));
+
+				// Field names
+				definition.addDynFieldArray(FIELD_FIELD_NAMES)
+					.setClassOfItems(String.class);
+				// Field types
+				definition.addDynFieldArray(FIELD_FIELD_TYPES)
+					.setClassOfItems(int.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractClassifiedVectorLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialIntervalLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialIntervalLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialIntervalLegend.java	(revision 42196)
@@ -0,0 +1,213 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialIntervalLegend;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * <p>
+ * VectorialIntervalLegend (which should be better called GraduatedColorLegend)
+ * is a legend that allows to classify ranges of values using a color gradient
+ * based on a value.<b>
+ * </p>
+ * <p>
+ * The color gradient will be calculated according the starting color, the
+ * ending color and the amount of intervals.
+ * </p>
+ * 
+ * @author Vicente Caballero Navarro
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class VectorialIntervalLegend extends AbstractIntervalLegend {
+//	final static private Logger LOG = LoggerFactory.getLogger(VectorialIntervalLegend.class);
+
+	public static final String VECTORIAL_INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME =
+			"VectorialIntervalLegend";
+
+	private static final String FIELD_START_COLOR = "startColor";
+	private static final String FIELD_END_COLOR = "endColor";
+	
+	private int shapeType;
+    private Color startColor = Color.red;
+    private Color endColor = Color.blue;
+
+    /**
+     * Constructor method
+     */
+    public VectorialIntervalLegend() {
+    	super();
+    }
+
+    /**
+     * Constructor method
+     *
+     * @param type type of the shape.
+     */
+    public VectorialIntervalLegend(int type) {
+    	super();
+    	setShapeType(type);
+    }
+
+    /**
+	 * Returns the final color
+	 * @return Color  final color.
+	 * @uml.property  name="endColor"
+	 */
+    public Color getEndColor() {
+        return endColor;
+    }
+
+    /**
+	 * Inserts the final color.
+	 * @param endColor final color.
+	 * @uml.property  name="endColor"
+	 */
+    public void setEndColor(Color endColor) {
+        this.endColor = endColor;
+    }
+
+    /**
+	 * Returns the initial color.
+	 * @return  Color initial color.
+	 * @uml.property  name="startColor"
+	 */
+    public Color getStartColor() {
+        return startColor;
+    }
+
+    /**
+	 * Inserts the initial color
+	 * @param startColor initial color.
+	 * @uml.property  name="startColor"
+	 */
+    public void setStartColor(Color startColor) {
+        this.startColor = startColor;
+    }
+
+	public int getShapeType() {
+		return shapeType;
+	}
+
+	public void setShapeType(int shapeType) {
+		if (this.shapeType != shapeType) {
+			if(defaultSymbol==null || defaultSymbol.getSymbolType()!=shapeType){
+				setDefaultSymbol(getSymbolManager().createSymbol(shapeType));
+			}
+			this.shapeType = shapeType;
+		}
+	}
+
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		VectorialIntervalLegend clone = (VectorialIntervalLegend) super.clone();
+
+		// Nothing to clone, as Color objects are inmutable, keep the original
+		// references.
+
+		return clone;
+	}
+
+	public IInterval createInterval(double min, double max) {
+		return new FInterval(min, max);
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent properties
+		super.loadFromState(state);
+		// Set own properties
+		setStartColor((Color) state.get(FIELD_START_COLOR));
+		setEndColor((Color) state.get(FIELD_END_COLOR));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent properties
+		super.saveToState(state);
+		// Save own properties
+		state.set(FIELD_START_COLOR, getStartColor());
+		state.set(FIELD_END_COLOR, getEndColor());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(VECTORIAL_INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						VectorialIntervalLegend.class,
+						VECTORIAL_INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME,
+						VECTORIAL_INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				// Extend the Interval Legend base definition
+				definition.extend(manager.getDefinition(INTERVAL_LEGEND_PERSISTENCE_DEFINITION_NAME));
+
+				// Start color
+				definition.addDynFieldObject(FIELD_START_COLOR)
+						.setClassOfValue(Color.class)
+						.setMandatory(true)
+						.setDescription("Start color");
+				// End color
+				definition.addDynFieldObject(FIELD_END_COLOR)
+						.setClassOfValue(Color.class)
+						.setMandatory(true)
+						.setDescription("End color");
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterLegend implements Callable {
+
+		public Object call() throws Exception {
+	        MapContextManager manager = MapContextLocator.getMapContextManager();
+
+	        manager.registerLegend(IVectorialIntervalLegend.LEGEND_NAME,
+                    VectorialIntervalLegend.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/VectorialIntervalLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/QuantileIntervalGenerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/QuantileIntervalGenerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/QuantileIntervalGenerator.java	(revision 42196)
@@ -0,0 +1,269 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ * Calcula los intervalos en funci�n del n�mero de intervalos que se pidan.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class QuantileIntervalGenerator {
+//	private DataSource sds;
+	private FeatureStore featureStore;
+	private String msFieldName;
+	private int miNumIntervalosSolicitados;
+	private double[] mdaValoresRuptura;
+	private double[] mdaValInit;
+	private int num = 0;
+
+	/**
+	 * Crea un nuevo QuantileIntervalGenerator.
+	 *
+	 * @param layer DOCUMENT ME!
+	 * @param field DOCUMENT ME!
+	 * @param numIntervals DOCUMENT ME!
+	 */
+	public QuantileIntervalGenerator(FeatureStore fs, String field,
+		int numIntervals) {
+		featureStore = fs;
+		msFieldName = field;
+		miNumIntervalosSolicitados = numIntervals;
+	}
+
+	/**
+	 * Genera los intervalos.
+	 * @throws DataException TODO
+	 *
+	 */
+	public void generarIntervalos()
+		throws DataException {
+		List<Number> ordenadas = new ArrayList<Number>();
+		List<Integer> coincidencias = new ArrayList<Integer>();
+//		int pos = ((FeatureType)featureStore.getFeatureTypes().get(0)).getIndex(msFieldName);
+		mdaValoresRuptura = new double[miNumIntervalosSolicitados - 1];
+		mdaValInit = new double[miNumIntervalosSolicitados - 1];
+		FeatureQuery featureQuery=featureStore.createFeatureQuery();
+		featureQuery.setAttributeNames(new String[]{msFieldName});
+		FeatureSet set = null;
+		DisposableIterator iterator = null;
+		try {
+			set = featureStore.getFeatureSet(featureQuery);
+			iterator = set.fastIterator();
+			long rowCount = 0;
+			while (iterator.hasNext()) {
+				Feature feature = (Feature) iterator.next();
+				insertarEnVector(ordenadas, coincidencias, feature.get(0));// sds.getFieldValue(i,
+																			// pos));
+				rowCount++;
+			}
+			// int MARGEN = 5;
+			// for (int i = 0; i < sds.getRowCount(); i++) {
+			// insertarEnVector(ordenadas, coincidencias, sds.getFieldValue(i,
+			// pos));
+			// }
+
+			int index = 0;
+			int posj = 0;
+
+			for (int i = 1; i < miNumIntervalosSolicitados; i++) {
+				long x = ((i * rowCount) / miNumIntervalosSolicitados);
+
+				for (int j = posj; j < ordenadas.size(); j++) {
+					int auxcoin = ((Integer) coincidencias.get(j)).intValue();
+					index = index + auxcoin;
+
+					if (x <= index) {
+						mdaValoresRuptura[i - 1] = getValue(ordenadas.get(j));
+
+						/*
+						 * index = (int) ((x + (auxcoin /
+						 * miNumIntervalosSolicitados)) - 1);
+						 */
+						posj = j + 1;
+
+						if (posj < ordenadas.size()) {
+							mdaValInit[i - 1] = getValue(ordenadas.get(posj));
+						} else {
+							mdaValInit[i - 1] = getValue(ordenadas.get(j));
+						}
+
+						num++;
+
+						break;
+					}
+				}
+
+				// double value=getValue(sds.getFieldValue(x,pos));
+			}
+
+			// }
+		} finally {
+			if (iterator != null) {
+				iterator.dispose();
+			}
+			if (set != null) {
+				set.dispose();
+			}
+		}
+	}
+
+	/**
+	 * Esta funci�n busca en el vector de datos la posici�n que le corresponde
+	 * al valor almacenado en vdValor y devuelve dicha posici�n en
+	 * vdValorAInsertar. Para hallar la posici�n se realiza una b�squeda
+	 * binaria. Si se trata de un elemento que ya est� en el vector devolvemos
+	 * el �ndice que le corresponde en rlIndiceCorrespondiente y false en
+	 * rbNuevoElemento. Si se trata de un nuevo elemento que hay que
+	 * insertar... devolvemos el �ndice en el que ir�a y True en
+	 * rbNuevoElemento En caso de que ocurra alg�n error devuelve false
+	 *
+	 * @param rVectorDatos ArrayList con los datos.
+	 * @param coincidencia �ndice.
+	 * @param vdValorAInsertar Valor a insertar.
+	 */
+	private void insertarEnVector(List<Number> rVectorDatos,
+			List<Integer> coincidencia, Object vdValorAInsertar) {
+		int llIndiceIzq;
+		int llIndiceDer;
+		int llMedio;
+		int indice = -1;
+		double ldValorComparacion;
+		double valorAInsertar = getValue(vdValorAInsertar);
+
+		if (rVectorDatos.size() == 0) {
+			rVectorDatos.add((Number) vdValorAInsertar);
+			coincidencia.add(new Integer(1));
+
+			return;
+		}
+
+		llIndiceIzq = 0;
+		llIndiceDer = rVectorDatos.size() - 1;
+		llMedio = (llIndiceIzq + llIndiceDer) / 2; //'Divisi�n entera!
+
+		while (llIndiceIzq <= llIndiceDer) {
+			//'Coger el valor situado en la mitad de la zona de b�squeda como valor de comparaci�n
+			ldValorComparacion = getValue( rVectorDatos.get(llMedio));
+
+			//'Si el valor a insertar es mayor que el valor de comparaci�n...
+			if (valorAInsertar > ldValorComparacion) {
+				//      'La zona de b�squeda queda restringida a la parte de la derecha
+				llIndiceIzq = llMedio + 1;
+				llMedio = (llIndiceIzq + llIndiceDer) / 2;
+
+				//    'Si el valor a insertar es menor que el valor de comparaci�n...
+			} else if (valorAInsertar < ldValorComparacion) {
+				//          'La zona de b�squeda queda restringida a la parte de la derecha
+				llIndiceDer = llMedio - 1;
+				llMedio = (llIndiceIzq + llIndiceDer) / 2;
+
+				//        'Si el valor de comparaci�n coincide con el valor a insertar
+			} else if (valorAInsertar == ldValorComparacion) {
+				indice = llMedio;
+
+				int index = rVectorDatos.indexOf(vdValorAInsertar);
+				int coin = ((Integer) coincidencia.get(index)).intValue() + 1;
+				coincidencia.remove(index);
+				coincidencia.add(index, new Integer(coin));
+
+				return;
+			}
+		}
+
+		//  'Nota:
+		//  'En este caso (cuando en rbNuevoElemento se devuelve True) lo que hay que hacer al salir de esta funci�n
+		//  'es a�adir un nuevo elemento al vector y desplazar todos los valores correspondientes a partir de rlIndiceCorrespondiente
+		//  '�D�nde va el nuevo elemento?
+		//  'El �ltimo sitio estudiado viene dado por el valor de llMedio.
+		//  'Si el valor a insertar es menor que el valor almacenado en la posici�n llMedio, el nuevo valor deber� ir a su izquierda.
+		//  'Si fuera mayor deber�a ir a su derecha.
+		ldValorComparacion = getValue( rVectorDatos.get(llMedio));
+
+		if (valorAInsertar > ldValorComparacion) {
+			indice = llMedio + 1;
+		} else {
+			indice = llMedio;
+		}
+
+		rVectorDatos.add(indice, (Number) vdValorAInsertar);
+		coincidencia.add(indice, new Integer(1));
+	}
+
+	/**
+	 * Devuelve el valor en un double del Value que se pasa como par�metro.
+	 *
+	 * @param value Value.
+	 *
+	 * @return valor.
+	 */
+	private double getValue(Object value) {
+		if (value instanceof Number) {
+			return ((Number) value).doubleValue();
+		}
+		return 0;
+
+	}
+
+	/**
+	 * Devuelve el valor del punto de ruptura seg�n el �ndice que se pasa como
+	 * par�metro.
+	 *
+	 * @param index �ndice del punto de ruptura.
+	 *
+	 * @return valor.
+	 */
+	public double getValRuptura(int index) {
+		return mdaValoresRuptura[index];
+	}
+
+	/**
+	 * Devuelve el valor inicial de cada intervalo.
+	 *
+	 * @param index �ndice del intervalo.
+	 *
+	 * @return valor del intervalo.
+	 */
+	public double getValInit(int index) {
+		return mdaValInit[index];
+	}
+
+	/**
+	 * Devuelve el n�mero de intervalos que se han generado.
+	 *
+	 * @return N�mero de intervalos generados.
+	 */
+	public int getNumIntervalGen() {
+		return num + 1;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/QuantileIntervalGenerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractLegend.java	(revision 42196)
@@ -0,0 +1,213 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import java.lang.ref.Reference;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstract class that implements the interface for legends.It is considered as
+ * the father of all XXXLegends and will implement all the methods that these
+ * classes had not developed.
+ * 
+ * @author 2005-2008 jaume dominguez faus - jaume.dominguez@iver.es
+ * @author 2008 -    pepe vidal salvador - jose.vidal.salvador@iver.es
+ * @author 2009-     <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractLegend implements ILegend {
+
+	public static final String LEGEND_PERSISTENCE_DEFINITION_NAME = "Legend";
+
+//	private static final String FIELD_LISTENERS = "listeners";
+//
+//	private static final String FIELD_OBSERVABLE = "observable";
+
+	private static final Logger LOG =
+			LoggerFactory.getLogger(AbstractLegend.class);
+
+	/**
+	 * List of LegendContentsChangedListener.
+	 */
+	private List<LegendContentsChangedListener> listeners =
+			new ArrayList<LegendContentsChangedListener>();
+
+	private BaseWeakReferencingObservable delegateDrawingObservable = 
+			new BaseWeakReferencingObservable();
+	
+	private MapContextManager manager = MapContextLocator.getMapContextManager();
+
+	public MapContextManager getManager() {
+		return manager;
+	}
+
+	public SymbolManager getSymbolManager() {
+		return manager.getSymbolManager();
+	}
+
+	public void addLegendListener(LegendContentsChangedListener listener) {
+		if (listener != null && !listeners.contains(listener))
+			listeners.add(listener);
+	}
+
+	public void removeLegendListener(LegendContentsChangedListener listener) {
+		listeners.remove(listener);
+	}
+
+	public void fireDefaultSymbolChangedEvent(SymbolLegendEvent event) {
+
+		for (int i = 0; i < listeners.size(); i++) {
+			((LegendContentsChangedListener) listeners.get(i))
+					.symbolChanged(event);
+		}
+	}
+
+	public LegendContentsChangedListener[] getListeners() {
+		return (LegendContentsChangedListener[]) listeners
+				.toArray(new LegendContentsChangedListener[listeners.size()]);
+	}
+	
+	public void addDrawingObserver(Observer observer) {
+		delegateDrawingObservable.addObserver(observer);
+	}
+
+	public void deleteDrawingObserver(Observer observer) {
+		delegateDrawingObservable.deleteObserver(observer);
+	}
+
+	public void deleteDrawingObservers() {
+		delegateDrawingObservable.deleteObservers();
+	}
+
+	public void addObserver(Reference<Observer> ref) {
+		delegateDrawingObservable.addObserver(ref);
+	}
+
+	public void beginComplexNotification() {
+		delegateDrawingObservable.beginComplexNotification();
+	}
+
+	public int countObservers() {
+		return delegateDrawingObservable.countObservers();
+	}
+
+	public void deleteObserver(Reference<Observer> ref) {
+		delegateDrawingObservable.deleteObserver(ref);
+	}
+
+	public void disableNotifications() {
+		delegateDrawingObservable.disableNotifications();
+	}
+
+	public void enableNotifications() {
+		delegateDrawingObservable.enableNotifications();
+	}
+
+	public void endComplexNotification() {
+		delegateDrawingObservable.endComplexNotification();
+	}
+
+	public boolean inComplex() {
+		return delegateDrawingObservable.inComplex();
+	}
+
+	public boolean isEnabledNotifications() {
+		return delegateDrawingObservable.isEnabledNotifications();
+	}
+
+	public void notifyObservers() {
+		delegateDrawingObservable.notifyObservers();
+	}
+
+	public void notifyObservers(Object arg) {
+		delegateDrawingObservable.notifyObservers(arg);
+	}
+	
+	public ILegend cloneLegend() {
+		try {
+			return (ILegend) clone();
+		} catch (CloneNotSupportedException e) {
+			LOG.error("Error creating the clone of the legend: " + this, e);
+		}
+		return null;
+    }
+
+	public Object clone() throws CloneNotSupportedException {
+		AbstractLegend legendClone = (AbstractLegend) super.clone();
+
+		return legendClone;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Do nothing
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Do nothing
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(LEGEND_PERSISTENCE_DEFINITION_NAME)==null ) {
+				@SuppressWarnings("unused")
+				DynStruct definition = manager.addDefinition(
+						AbstractLegend.class, 
+						LEGEND_PERSISTENCE_DEFINITION_NAME, 
+						LEGEND_PERSISTENCE_DEFINITION_NAME + " persistence definition", 
+						null, 
+						null
+					);
+//					// Listeners
+//					definition.addDynFieldList(FIELD_LISTENERS)
+//						.setClassOfItems(LegendContentsChangedListener.class);
+//					// Observable
+//					definition.addDynFieldObject(FIELD_OBSERVABLE)
+//						.setClassOfValue(BaseWeakReferencingObservable.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/NaturalIntervalGenerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/NaturalIntervalGenerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/NaturalIntervalGenerator.java	(revision 42196)
@@ -0,0 +1,920 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * Calcula los intervalos naturales.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class NaturalIntervalGenerator {
+
+    private static final Logger logger =
+        LoggerFactory.getLogger(NaturalIntervalGenerator.class);
+    
+	private String msFieldName;
+	private int miNumIntervalosSolicitados;
+	private int miNumIntervalosGenerados;
+	private double[] mdaValoresRuptura;
+	private double[] mdaValInit;
+	private FeatureStore featureStore;
+
+	/**
+	 * Crea un nuevo IntervalGenerator.
+	 *
+	 * @param layer AlphanumericData
+	 * @param field Nombre del campo.
+	 * @param numIntervals N�mero de intervalos.
+	 */
+	public NaturalIntervalGenerator(FeatureStore fs, String field,
+		int numIntervals) {
+		featureStore = fs;
+		msFieldName = field;
+		miNumIntervalosSolicitados = numIntervals;
+	}
+
+	/**
+	 * Esta funci�n busca en el vector de datos la posici�n que le corresponde
+	 * al valor almacenado en vdValor y devuelve dicha posici�n en
+	 * vdValorAInsertar. Para hallar la posici�n se realiza una b�squeda
+	 * binaria. Si se trata de un elemento que ya est� en el vector devolvemos
+	 * el �ndice que le corresponde en rlIndiceCorrespondiente y false en
+	 * rbNuevoElemento. Si se trata de un nuevo elemento que hay que
+	 * insertar... devolvemos el �ndice en el que ir�a y True en
+	 * rbNuevoElemento En caso de que ocurra alg�n error devuelve false
+	 *
+	 * @param rVectorDatos ArrayList con los datos.
+	 * @param vdValorAInsertar Valor a insertar.
+	 * @param rlIndiceCorrespondiente �ndice.
+	 * @param rbNuevoElemento True si es un nuevo elemento.
+	 *
+	 * @return True si ha conseguido correctamente la posici�n en el vector.
+	 */
+	private boolean mbObtenerPosicionEnVector(
+			List<udtDatosEstudio> rVectorDatos,
+		double vdValorAInsertar, int[] rlIndiceCorrespondiente,
+		boolean[] rbNuevoElemento) {
+		int llIndiceIzq;
+		int llIndiceDer;
+		int llMedio;
+
+		double ldValorComparacion;
+
+		rbNuevoElemento[0] = false;
+		rlIndiceCorrespondiente[0] = -1;
+
+		//'Si el vector estiviese vac�o... (tuviese un s�lo elemento y el n�mero de coincidencias fuese 0)
+		if (rVectorDatos.size() == 1) {
+			if (((udtDatosEstudio) rVectorDatos.get(0)).Coincidencias == 0) {
+				rlIndiceCorrespondiente[0] = 0;
+				rbNuevoElemento[0] = false; //'No tenemos que a�adir un nuevo elemento al vector
+
+				return true;
+			}
+		}
+
+		llIndiceIzq = 0;
+		llIndiceDer = rVectorDatos.size() - 1;
+		llMedio = (llIndiceIzq + llIndiceDer) / 2; //'Divisi�n entera!
+
+		while (llIndiceIzq <= llIndiceDer) {
+			//'Coger el valor situado en la mitad de la zona de b�squeda como valor de comparaci�n
+			ldValorComparacion = ((udtDatosEstudio) rVectorDatos.get(llMedio)).Valor;
+
+			//'Si el valor a insertar es mayor que el valor de comparaci�n...
+			if (vdValorAInsertar > ldValorComparacion) {
+				//      'La zona de b�squeda queda restringida a la parte de la derecha
+				llIndiceIzq = llMedio + 1;
+				llMedio = (llIndiceIzq + llIndiceDer) / 2;
+
+				//    'Si el valor a insertar es menor que el valor de comparaci�n...
+			} else if (vdValorAInsertar < ldValorComparacion) {
+				//          'La zona de b�squeda queda restringida a la parte de la derecha
+				llIndiceDer = llMedio - 1;
+				llMedio = (llIndiceIzq + llIndiceDer) / 2;
+
+				//        'Si el valor de comparaci�n coincide con el valor a insertar
+			} else if (vdValorAInsertar == ldValorComparacion) {
+				rlIndiceCorrespondiente[0] = llMedio;
+				rbNuevoElemento[0] = false;
+
+				return true;
+			}
+		}
+
+		//  'Si llegamos a este punto es que no hemos encontrado el valor a insertar en el vector, es decir,
+		//  'seguro que tendremos que a�adir un nuevo elemento.
+		rbNuevoElemento[0] = true;
+
+		//  'Nota:
+		//  'En este caso (cuando en rbNuevoElemento se devuelve True) lo que hay que hacer al salir de esta funci�n
+		//  'es a�adir un nuevo elemento al vector y desplazar todos los valores correspondientes a partir de rlIndiceCorrespondiente
+		//  '�D�nde va el nuevo elemento?
+		//  'El �ltimo sitio estudiado viene dado por el valor de llMedio.
+		//  'Si el valor a insertar es menor que el valor almacenado en la posici�n llMedio, el nuevo valor deber� ir a su izquierda.
+		//  'Si fuera mayor deber�a ir a su derecha.
+		ldValorComparacion = ((udtDatosEstudio) rVectorDatos.get(llMedio)).Valor;
+
+		if (vdValorAInsertar > ldValorComparacion) {
+			rlIndiceCorrespondiente[0] = llMedio + 1;
+		} else {
+			rlIndiceCorrespondiente[0] = llMedio;
+		}
+
+		return true;
+	}
+
+	/**
+	 * M�todo para generar los intervalos.
+	 *
+	 * @return true si se han generado correctamente.
+	 * @throws DataException TODO
+	 */
+	public boolean generarIntervalos()
+		throws DataException {
+		List<udtDatosEstudio> lVectorDatos;
+		double[] ldMediaTotal = new double[1];
+		double[] ldSDAM = new double[1];
+
+		int[] llaIndicesRupturas;
+
+		double[] ldUltimaGVF = new double[1];
+		double[] ldNuevaGVF = new double[1];
+
+		int i;
+		int liNumClasesReales;
+		int llNumElementosPorClase;
+
+		//    'Obtener los datos a estudiar ordenados ascendentemente y obtener la media total
+		//ReDim lVectorDatos(0)
+		lVectorDatos = new ArrayList<udtDatosEstudio>();
+
+		lVectorDatos.add(new udtDatosEstudio());
+
+		if (!mbObtenerDatos(lVectorDatos, ldMediaTotal)) {
+			return false; //SalidaSinMensaje
+		}
+
+		logger.info("Analizando datos en generarIntervalos() ...");
+
+		/// Call gEstablecerDescripcionProceso("Analizando datos ...", False)
+		//  'Calcular la suma de las desviaciones t�picas del total de los datos respecto de la media total
+		ldSDAM[0] = mbGetSumSquaredDeviationArrayMean(lVectorDatos,
+				ldMediaTotal[0]);
+
+		///if (lVectorDatos.length==0){
+		if (lVectorDatos.isEmpty()) {
+			//      'S�lo se pueden generar dos intervalos -> hay un valor de ruptura
+			///ReDim mdaValoresRuptura(0)
+			mdaValoresRuptura[0] = ((udtDatosEstudio) lVectorDatos.get(0)).Valor;
+			mdaValInit[0] = ((udtDatosEstudio) lVectorDatos.get(0)).Valor;
+			miNumIntervalosGenerados = 2;
+
+			return true;
+		}
+
+		//  'Calculamos el n�mero m�ximo de clases reales que podemos generar.
+		//  'Este n�mero ser�a igual al n� de elementos que tenga el vector de datos.
+		if (miNumIntervalosSolicitados > (lVectorDatos.size())) {
+			liNumClasesReales = lVectorDatos.size() + 1;
+		} else {
+			liNumClasesReales = miNumIntervalosSolicitados;
+		}
+
+		//  'Establecemos las clases iniciales especificando unos �ndices de ruptura en ppo. equidistantes
+		llaIndicesRupturas = new int[liNumClasesReales - 1];
+		llNumElementosPorClase = (lVectorDatos.size()) / liNumClasesReales;
+
+		for (i = 0; i < llaIndicesRupturas.length; i++) {
+			if (i == 0) {
+				llaIndicesRupturas[i] = llNumElementosPorClase - 1;
+			} else {
+				llaIndicesRupturas[i] = llaIndicesRupturas[i - 1] +
+					llNumElementosPorClase;
+			}
+		}
+
+		udtDatosClase[] ldaSDCM_Parciales = new udtDatosClase[llaIndicesRupturas.length +
+			1];
+		udtDatosClase[] ldaSDCM_Validos = new udtDatosClase[llaIndicesRupturas.length +
+			1];
+
+		///ReDim ldaSDCM_Parciales(UBound(llaIndicesRupturas()) + 1)
+		///ReDim ldaSDCM_Validos(UBound(ldaSDCM_Parciales()) + 1)
+		if (llaIndicesRupturas.length == 0) {
+			return true;
+		}
+
+		//  'Calcular la bondad inicial
+		if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales, llaIndicesRupturas,
+					ldSDAM[0], ldUltimaGVF, -1, false)) {
+//			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),PluginServices.getText(this,"el_numero_maximo_de_intervalos_para_este_campo_es")+": "+lVectorDatos.size());
+			miNumIntervalosSolicitados=lVectorDatos.size();
+			generarIntervalos();
+			return false;
+		}
+
+		ldaSDCM_Validos = getArray(ldaSDCM_Parciales);
+
+		boolean lbMoverADerecha;
+		boolean lbMoverAIzquierda;
+		boolean lbIntentarDesplazamiento;
+		int llIndiceRupturaOriginal;
+
+		long k;
+		double ldGVFentrepasadas;
+
+		ldGVFentrepasadas = ldUltimaGVF[0];
+
+		//'liNumClasesReales no ser� muy grande (11 es el m�ximo)
+		for (k = 1; k <= 100; k++) {
+			//      'Para cada �ndice de ruptura...
+			for (i = 0; i < (llaIndicesRupturas.length); i++) {
+				lbMoverADerecha = false;
+				lbMoverAIzquierda = false;
+				llIndiceRupturaOriginal = llaIndicesRupturas[i];
+				ldaSDCM_Validos = getArray(ldaSDCM_Parciales);
+
+				//'Hay que decidir hacia donde hay que desplazar el �ndice de ruptura
+				//'Probamos moviendo a derecha (si se puede)
+				lbIntentarDesplazamiento = false;
+
+				if (i == (llaIndicesRupturas.length - 1)) {
+					if ((llaIndicesRupturas[i] + 1) < lVectorDatos.size()) {
+						lbIntentarDesplazamiento = true;
+					}
+				} else {
+					if ((llaIndicesRupturas[i] + 1) < llaIndicesRupturas[i + 1]) {
+						lbIntentarDesplazamiento = true;
+					} //'If (llaIndicesRupturas(i) + 1) < llaIndicesRupturas(i + 1) Then
+				} //'If i = UBound(llaIndicesRupturas) Then
+
+				if (lbIntentarDesplazamiento) {
+					llaIndicesRupturas[i] = llaIndicesRupturas[i] + 1;
+
+					if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales,
+								llaIndicesRupturas, ldSDAM[0], ldNuevaGVF, i,
+								false)) {
+						return false;
+					}
+
+					if (ldNuevaGVF[0] > ldUltimaGVF[0]) {
+						lbMoverADerecha = true;
+						ldaSDCM_Validos = getArray(ldaSDCM_Parciales);
+					} else {
+						//'Dejamos el �ndice de ruputura como estaba y probamos con un desplazamiento a izquierda
+						llaIndicesRupturas[i] = llIndiceRupturaOriginal;
+						ldaSDCM_Parciales = getArray(ldaSDCM_Validos);
+					}
+				} //'If lbIntentarDesplazamiento Then
+
+				lbIntentarDesplazamiento = false;
+
+				//'Probamos moviendo a izquierda (si se puede y no estamos moviendo ya a derechas)
+				if (!lbMoverADerecha) {
+					if (i == 0) { //LBound(llaIndicesRupturas) Then
+
+						if ((llaIndicesRupturas[i] - 1) >= 0) { //LBound(lVectorDatos()) Then
+							lbIntentarDesplazamiento = true;
+						} //'If (llaIndicesRupturas(i) - 1) >= LBound(lVectorDatos()) Then
+					} else {
+						if ((llaIndicesRupturas[i] - 1) > llaIndicesRupturas[i -
+								1]) {
+							lbIntentarDesplazamiento = true;
+						} //'If (llaIndicesRupturas(i) - 1) > llaIndicesRupturas(i - 1) Then
+					} //'If i = LBound(llaIndicesRupturas) Then
+				} //'If Not lbMoverADerecha Then
+
+				if (lbIntentarDesplazamiento) {
+					llaIndicesRupturas[i] = llaIndicesRupturas[i] - 1;
+
+					if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales,
+								llaIndicesRupturas, ldSDAM[0], ldNuevaGVF, i,
+								true)) {
+						return false;
+					}
+
+					if (ldNuevaGVF[0] > ldUltimaGVF[0]) {
+						lbMoverAIzquierda = true;
+						ldaSDCM_Validos = getArray(ldaSDCM_Parciales);
+					} else {
+						//'Dejamos el �ndice de ruputura como estaba
+						llaIndicesRupturas[i] = llIndiceRupturaOriginal;
+						ldaSDCM_Parciales = getArray(ldaSDCM_Validos);
+					}
+				} //'If lbIntentarDesplazamiento Then
+
+				lbIntentarDesplazamiento = false;
+
+				//'Si se ha decidido desplazar el �ndice ... continuamos hasta que no podamos mejorar la GVF
+				if (lbMoverAIzquierda || lbMoverADerecha) {
+					ldUltimaGVF[0] = ldNuevaGVF[0];
+
+					boolean exit = false;
+
+					while (!exit) {
+						llIndiceRupturaOriginal = llaIndicesRupturas[i];
+
+						if (lbMoverADerecha) {
+							if (i == (llaIndicesRupturas.length - 1)) {
+								if ((llaIndicesRupturas[i] + 1) >= lVectorDatos.size()) {
+									exit = true;
+								}
+							} else {
+								if ((llaIndicesRupturas[i] + 1) >= llaIndicesRupturas[i +
+										1]) {
+									exit = true;
+								}
+							} //'If i = UBound(llaIndicesRupturas) Then
+
+							llaIndicesRupturas[i] = llaIndicesRupturas[i] + 1;
+						} else { //'If lbMoverAIzquierda Then
+
+							if (i == 0) { //LBound(llaIndicesRupturas) Then
+
+								if ((llaIndicesRupturas[i] - 1) < 0) { //LBound(lVectorDatos()) Then Exit Do
+									exit = true;
+								}
+							} else {
+								if ((llaIndicesRupturas[i] - 1) <= llaIndicesRupturas[i -
+										1]) {
+									exit = true;
+								}
+							} //'If i = LBound(llaIndicesRupturas) Then
+
+							llaIndicesRupturas[i] = llaIndicesRupturas[i] - 1; //////////////////
+						} //'If lbMoverADerecha Then
+
+						if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales,
+									llaIndicesRupturas, ldSDAM[0], ldNuevaGVF,
+									i, lbMoverAIzquierda)) {
+							return false;
+						}
+
+						if (ldNuevaGVF[0] < ldUltimaGVF[0]) {
+							// 'Dejar el �ndice donde estaba
+							llaIndicesRupturas[i] = llIndiceRupturaOriginal;
+							ldaSDCM_Parciales = getArray(ldaSDCM_Validos);
+							exit = true;
+						} else {
+							ldUltimaGVF[0] = ldNuevaGVF[0];
+							ldaSDCM_Validos = getArray(ldaSDCM_Parciales);
+						}
+					}
+				} //'If lbMoverAIzquierda Or lbMoverADerecha Then
+			}
+
+			if (ldUltimaGVF[0] <= ldGVFentrepasadas) {
+				i = 101;
+			}
+
+			ldGVFentrepasadas = ldUltimaGVF[0];
+		}
+
+		//   'A partir de aqu� ya no se puede cancelar nada
+		mdaValoresRuptura = new double[llaIndicesRupturas.length];
+		mdaValInit = new double[llaIndicesRupturas.length];
+
+		for (i = 0; i < mdaValoresRuptura.length; i++) { // LBound(mdaValoresRuptura) To UBound(mdaValoresRuptura)
+			if (llaIndicesRupturas[i]==-1) {
+				llaIndicesRupturas[i]=1;
+			}
+			if (llaIndicesRupturas[i]>lVectorDatos.size()-1) {
+				llaIndicesRupturas[i]=lVectorDatos.size()-1;
+			}
+			mdaValoresRuptura[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i])).Valor;
+
+			if ((llaIndicesRupturas[i] + 1) < lVectorDatos.size()) {
+				mdaValInit[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i] +
+						1)).Valor;
+			} else {
+				mdaValInit[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i])).Valor;
+			}
+
+			//      'Hay que aplicar una peque�a correcci�n a los valores de ruptura para que los intervalos que genera
+			//    'mapobjects se aprechen en su totalidad, o lo que es lo mismo, vengan todos representados en el mapa.
+			//  'Con esto tambi�n se consigue hallar intervalos equivalentes a los de ArcView. Esta correcci�n consiste
+			//'en sumar el m�nimo incremento a los valores de ruptura. No lo hago aqu� sino en la ventana de propiedades de capa.
+		}
+
+		miNumIntervalosGenerados = mdaValoresRuptura.length + 2;
+
+		ldaSDCM_Validos = null;
+		ldaSDCM_Parciales = null;
+		lVectorDatos = null;
+
+		return true;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param array DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	private udtDatosClase[] getArray(udtDatosClase[] array) {
+		udtDatosClase[] aux = new udtDatosClase[array.length];
+
+		for (int i = 0; i < array.length; i++) {
+			aux[i] = new udtDatosClase();
+			aux[i].Media = array[i].Media;
+			aux[i].NumElementos = array[i].NumElementos;
+			aux[i].SDCM = array[i].SDCM;
+			aux[i].SumaCuadradoTotal = array[i].SumaCuadradoTotal;
+			aux[i].SumaTotal = array[i].SumaTotal;
+		}
+
+		return aux;
+	}
+
+	/**
+	 * Devuelve la "SDAM" de un conjunto de datos que vienen almacenados en el
+	 * vector rVectorDatos
+	 *
+	 * @param rVectorDatos Datos
+	 * @param vdMedia Media
+	 *
+	 * @return suma de las desviaciones t�picas del total de los datos respecto
+	 * 		   de la media total
+	 */
+	private double mbGetSumSquaredDeviationArrayMean(
+			List<udtDatosEstudio> rVectorDatos,
+		double vdMedia) {
+		int i;
+
+		double rdSDAM = 0;
+
+		for (i = 0; i < rVectorDatos.size(); i++) { // LBound(rVectorDatos) To UBound(rVectorDatos)
+			rdSDAM = rdSDAM +
+				(Math.pow((((udtDatosEstudio) rVectorDatos.get(i)).Valor -
+					vdMedia), 2) * ((udtDatosEstudio) rVectorDatos.get(i)).Coincidencias);
+		}
+
+		return rdSDAM;
+	}
+
+	/**
+	 * Esta funci�n obtiene los datos en los que queremos hallar las rupturas
+	 * naturales. Los datos se devuelven ordenados en un vector. Tambi�n
+	 * devuelve la media total
+	 *
+	 * @param rVectorDatos Datos
+	 * @param rdMediaTotal Media total
+	 *
+	 * @return True si se ha calculado correctamente.
+	 * @throws DataException TODO
+	 */
+	private boolean mbObtenerDatos(List<udtDatosEstudio> rVectorDatos,
+			double[] rdMediaTotal)
+		throws DataException {
+		double ldValor;
+
+//		int i;
+		long llRecordCount=0;
+
+		int[] llIndice = new int[1];
+		boolean[] lbNuevoElemento = new boolean[1];
+		//int j;
+
+//		llRecordCount = ds.getRowCount();
+
+		if (!gbExisteCampoEnRegistro(featureStore, msFieldName)) {
+			if (msFieldName == "") {
+				System.out.println(
+					"No se ha establecido el nombre del campo origen!");
+			} else {
+				System.out.println("El campo '" + msFieldName +
+					"' no pertence a la capa!");
+			}
+
+			return false;
+		}
+		FeatureQuery featureQuery=featureStore.createFeatureQuery();
+		featureQuery.setAttributeNames(new String[]{msFieldName});
+		FeatureSet set = null;
+		DisposableIterator iterator = null;
+		try {
+			set = featureStore.getFeatureSet(featureQuery);
+			iterator = set.fastIterator();
+			while (iterator.hasNext()) {
+				Feature feature = (Feature) iterator.next();
+
+				// 'Nos cuidamos de recorrer todos los registros sin consultar
+				// la propiedad EOF del recordset
+				// for (i = 0; i < llRecordCount; i++) {
+				try {
+					ldValor = feature.getDouble(0); 
+					llRecordCount++;
+				} catch (Exception e) {
+					// llRecordCount--;
+					continue;
+				}
+				rdMediaTotal[0] = rdMediaTotal[0] + ldValor;
+
+				// 'Hay que insertar el valor en la posici�n adecuada. Para
+				// ello hacemos una b�squeda binaria
+				if (!mbObtenerPosicionEnVector(rVectorDatos, ldValor, llIndice,
+						lbNuevoElemento)) {
+					return false;
+				}
+
+				if (!lbNuevoElemento[0]) {
+					if ((llIndice[0] < 0)
+							|| (llIndice[0] > rVectorDatos.size())) {
+						System.out.println("�ndice incorrecto!");
+
+						return false;
+					}
+
+					((udtDatosEstudio) rVectorDatos.get(llIndice[0])).Valor = ldValor; // 'Por
+																						// si
+																						// fuese
+																						// el
+																						// primer
+																						// elemento
+
+					// 'Incrementamos el n� de coincidencias y damos el valor
+					// por insertado
+					((udtDatosEstudio) rVectorDatos.get(llIndice[0])).Coincidencias = ((udtDatosEstudio) rVectorDatos
+							.get(llIndice[0])).Coincidencias +
+					1;
+				} else {
+					udtDatosEstudio udt = new udtDatosEstudio();
+					udt.Valor = ldValor;
+					udt.Coincidencias = 1;
+					rVectorDatos.add(llIndice[0], udt);
+				}
+			}
+
+			rdMediaTotal[0] = rdMediaTotal[0] / llRecordCount;
+
+			return true;
+		} finally {
+			if (iterator != null) {
+				iterator.dispose();
+			}
+			if (set != null) {
+				set.dispose();
+			}
+		}
+	}
+
+	/**
+	 * Devuelve true si existe el campo en el registro.
+	 *
+	 * @param recordset Recordset.
+	 * @param msFieldName2 Nombre del campo.
+	 *
+	 * @return True si existe el campo.
+	 * @throws DataException TODO
+	 *
+	 */
+	private boolean gbExisteCampoEnRegistro(FeatureStore fs,
+		String msFieldName2) throws DataException  {
+		if (((FeatureType)fs.getFeatureTypes().get(0)).getIndex(msFieldName2) == -1) {
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Esta funci�n s�lo calcula las SDCM de las clases adyacentes al �ndice de
+	 * ruptura actual. Si el �ndice de ruptura actual es -1 entonces las
+	 * calcula todas! . En este caso no importa el valor de
+	 * vbDesplazAIzquierda
+	 *
+	 * @param rVectorDatos Datos
+	 * @param raClases Clases encontradas
+	 * @param rlaIndicesRuptura �ndices de ruptura
+	 * @param vdSDAM suma de la desviaci�n standard.
+	 * @param rdGVF Desviaci�n standard de los intervalos.
+	 * @param vlIndiceRupturaActual �ndice de ruptura actual.
+	 *
+	 * @return True si se ha calcula do correctamente.
+	 */
+	/*private boolean mbCalcularGVF(ArrayList rVectorDatos,
+		udtDatosClase[] raClases, int[] rlaIndicesRuptura, double vdSDAM,
+		double[] rdGVF, int vlIndiceRupturaActual ) {
+		return mbCalcularGVF(rVectorDatos, raClases, rlaIndicesRuptura, vdSDAM,
+			rdGVF, vlIndiceRupturaActual, true);
+	}
+*/
+	/**
+	 * Esta funci�n s�lo calcula las SDCM de las clases adyacentes al �ndice de
+	 * ruptura actual. Si el �ndice de ruptura actual es -1 entonces las
+	 * calcula todas! . En este caso no importa el valor de
+	 * vbDesplazAIzquierda
+	 *
+	 * @param rVectorDatos Datos
+	 * @param raClases Calses que representan a los intervalos.
+	 * @param rlaIndicesRuptura �ndices de ruptura.
+	 * @param vdSDAM Desviaci�n standard.
+	 * @param rdGVF Desviaci�n standard de los intervalos.
+	 * @param vlIndiceRupturaActual �ndice de ruptura actual.
+	 * @param vbDesplazAIzquierda Desplazamiento a la izquierda.
+	 *
+	 * @return True si se ha calculado correctamente.
+	 */
+	private boolean mbCalcularGVF(List<udtDatosEstudio> rVectorDatos,
+		udtDatosClase[] raClases, int[] rlaIndicesRuptura, double vdSDAM,
+		double[] rdGVF, int vlIndiceRupturaActual /* As Long = -1*/,
+		boolean vbDesplazAIzquierda) {
+		double ldSDCM_aux;
+
+		int i;
+
+		if (vlIndiceRupturaActual == -1) {
+			// 'Obtenemos los datos para todas las clases = intervalos
+			for (i = 0; i < rlaIndicesRuptura.length; i++) {
+				if (i == 0) { // LBound(rlaIndicesRuptura) Then
+
+					if (!mbGetDatosClase(rVectorDatos, 0, rlaIndicesRuptura[i],
+								raClases, i)) {
+						return false;
+					}
+				} else {
+					if (!mbGetDatosClase(rVectorDatos,
+								rlaIndicesRuptura[i - 1] + 1,
+								rlaIndicesRuptura[i], raClases, i)) {
+						return false;
+					}
+				}
+			}
+
+			//'Falta la �ltima clase
+			if (!mbGetDatosClase(rVectorDatos,
+						rlaIndicesRuptura[rlaIndicesRuptura.length - 1] + 1,
+						rVectorDatos.size() - 1, raClases, raClases.length - 1)) {
+				return false;
+			}
+		} else {
+			i = vlIndiceRupturaActual;
+
+			//'Hay que determinar para qu� clases debemos volver a recalcular los datos en funci�n del �ndice de ruptura que estamos modificando
+			if (vbDesplazAIzquierda) {
+				//  'Recalcular los datos de la clase izquierda
+				if (!mbRecalcularDatosClase(raClases, i, rVectorDatos,
+							rlaIndicesRuptura[i] + 1, vdSDAM, false)) {
+					return false;
+				}
+
+				//  'Recalcular los datos de la clase derecha
+				if (!mbRecalcularDatosClase(raClases, i + 1, rVectorDatos,
+							rlaIndicesRuptura[i] + 1, vdSDAM, true)) {
+					return false;
+				}
+			} else {
+				//  'Recalcular los datos de la clase izquierda
+				if (!mbRecalcularDatosClase(raClases, i, rVectorDatos,
+							rlaIndicesRuptura[i], vdSDAM, true)) {
+					return false;
+				}
+
+				//  'Recalcular los datos de la clase derecha
+				if (!mbRecalcularDatosClase(raClases, i + 1, rVectorDatos,
+							rlaIndicesRuptura[i], vdSDAM, false)) {
+					return false;
+				}
+			}
+		}
+
+		ldSDCM_aux = 0;
+
+		for (i = 0; i < raClases.length; i++) { //LBound(raClases) To UBound(raClases)
+			ldSDCM_aux = ldSDCM_aux + raClases[i].SDCM;
+		}
+
+		rdGVF[0] = (vdSDAM - ldSDCM_aux) / vdSDAM;
+		//System.out.println(ldSDCM_aux);
+
+		return true;
+	}
+
+	/**
+	 * Devuelve la "SDCM" de un conjunto de datos que vienen almacenados en el
+	 * vector rVectorDatos y que est�n delimitados por vlLimiteInf y
+	 * vlLimiteInf
+	 *
+	 * @param rVectorDatos Datos
+	 * @param vlLimiteInf L�mite inferior.
+	 * @param vlLimiteSup L�mite superior.
+	 * @param rClase Calses que representan a los intervalos.
+	 * @param numClas N�mero de calses.
+	 *
+	 * @return True si se ha calculado correctamente.
+	 */
+	private boolean mbGetDatosClase(List<udtDatosEstudio> rVectorDatos,
+			int vlLimiteInf,
+		int vlLimiteSup, udtDatosClase[] rClase, int numClas) {
+		int i;
+
+		if (vlLimiteInf < 0) {
+			return false;
+		}
+
+		if (vlLimiteSup > rVectorDatos.size()) {
+			return false;
+		}
+
+		if (vlLimiteSup < vlLimiteInf) {
+			return false;
+		}
+
+		// 'Inicializamos los datos de la clase
+		rClase[numClas] = new udtDatosClase();
+
+		//'Hallamos la media de la clase
+		for (i = vlLimiteInf; i < (vlLimiteSup + 1); i++) {
+			rClase[numClas].NumElementos = rClase[numClas].NumElementos +
+				((udtDatosEstudio) rVectorDatos.get(i)).Coincidencias;
+
+			//'rClase.Media = rClase.Media + (rVectorDatos(i).Valor * rVectorDatos(i).Coincidencias)
+			rClase[numClas].SumaTotal = rClase[numClas].SumaTotal +
+				(((udtDatosEstudio) rVectorDatos.get(i)).Valor * ((udtDatosEstudio) rVectorDatos.get(i)).Coincidencias);
+
+			//'rClase.ProductoTotal = rClase.ProductoTotal * (rVectorDatos(i).Valor * rVectorDatos(i).Coincidencias)
+			rClase[numClas].SumaCuadradoTotal = rClase[numClas].SumaCuadradoTotal +
+				(Math.pow(((udtDatosEstudio) rVectorDatos.get(i)).Valor * ((udtDatosEstudio) rVectorDatos.get(
+						i)).Coincidencias, 2));
+		}
+
+		//'rClase.Media = rClase.Media / llTotalElementos
+		rClase[numClas].Media = rClase[numClas].SumaTotal / rClase[numClas].NumElementos;
+		rClase[numClas].SDCM = (rClase[numClas].SumaCuadradoTotal) -
+			(2 * rClase[numClas].Media * rClase[numClas].SumaTotal) +
+			(rClase[numClas].NumElementos * Math.pow(rClase[numClas].Media, 2));
+		/*if (new Double(rClase[numClas].SDCM).isNaN()){
+			System.out.println(rClase[numClas].SDCM);
+		}*/
+		return true;
+	}
+
+	/**
+	 * Recalcula los datos de las clases.
+	 *
+	 * @param rClase Clases.
+	 * @param i �adir �adir �adir �adir indica si a la clase se le a�ade un
+	 * 		  elemento (True) o se le quita (False)
+	 * @param rVectorDatos Datos.
+	 * @param vlIndiceElemento es el �ndice del elemento que se le va a�adir o
+	 * 		  a quitar a la clase
+	 * @param vdSDAM desviaci�n standard.
+	 * @param vbA �adir DOCUMENT ME!
+	 *
+	 * @return True si se ha calculado correctamente.
+	 */
+	private boolean mbRecalcularDatosClase(udtDatosClase[] rClase, int i,
+			List<udtDatosEstudio> rVectorDatos, int vlIndiceElemento,
+			double vdSDAM,
+		boolean vbAnyadir) {
+		double ldValor;
+		long llNumCoincidencias;
+try{
+	if (vlIndiceElemento>rVectorDatos.size()-1) {
+		return true;
+	}
+		ldValor = ((udtDatosEstudio) rVectorDatos.get(vlIndiceElemento)).Valor;
+		llNumCoincidencias = ((udtDatosEstudio) rVectorDatos.get(vlIndiceElemento)).Coincidencias;
+
+		if (vbAnyadir) {
+			//'Actualizamos la suma total
+			rClase[i].SumaTotal = rClase[i].SumaTotal +
+				(ldValor * llNumCoincidencias);
+
+			//'Actualizamos la suma de cuadrados total
+			rClase[i].SumaCuadradoTotal = rClase[i].SumaCuadradoTotal +
+				(Math.pow((ldValor * llNumCoincidencias), 2));
+
+			//'Actualizamos el producto total
+			//'rClase.ProductoTotal = rClase.ProductoTotal * (ldValor * llNumCoincidencias)
+			//'Actualizamos el n� de elementos
+			rClase[i].NumElementos = rClase[i].NumElementos +
+				llNumCoincidencias;
+		} else {
+			//'Actualizamos la suma total
+			rClase[i].SumaTotal = rClase[i].SumaTotal -
+				(ldValor * llNumCoincidencias);
+
+			// 'Actualizamos la suma de cuadrados total
+			rClase[i].SumaCuadradoTotal = rClase[i].SumaCuadradoTotal -
+				(Math.pow((ldValor * llNumCoincidencias), 2));
+
+			// 'Actualizamos el producto total
+			// 'rClase.ProductoTotal = rClase.ProductoTotal / (ldValor * llNumCoincidencias)
+			// 'Actualizamos el n� de elementos
+			rClase[i].NumElementos = rClase[i].NumElementos -
+				llNumCoincidencias;
+		} // 'If vbA�adir Then
+		if (rClase[i].NumElementos<=0) {
+			rClase[i].NumElementos=1;
+		}
+		//'Obtenemos la nueva media
+		rClase[i].Media = rClase[i].SumaTotal / rClase[i].NumElementos;
+
+		//'Actualizamos la SDCM
+		rClase[i].SDCM = (rClase[i].SumaCuadradoTotal) -
+			(2 * rClase[i].Media * rClase[i].SumaTotal) +
+			(rClase[i].NumElementos * Math.pow(rClase[i].Media, 2));
+
+}catch (Exception e) {
+	return false;
+}
+		return true;
+	}
+
+	/**
+	 * Devuelve el valor de ruptura seg�n el �ndice que se le pasa como
+	 * par�metro.
+	 *
+	 * @param viIndice �nidice del valor de ruptura.
+	 *
+	 * @return Valor de ruptura.
+	 */
+	public double getValorRuptura(int viIndice) {
+		return mdaValoresRuptura[viIndice];
+	}
+
+	/**
+	 * Devuelve el valor inicial de cada intervalo
+	 *
+	 * @param index �ndice del intervalo
+	 *
+	 * @return valor del intervalo.
+	 */
+	public double getValInit(int index) {
+		return mdaValInit[index];
+	}
+
+	/**
+	 * Devuelve el n�mero de intervalos que se pueden representar, no tiene
+	 * porque coincidir con el n�mero de intervalos que se piden.
+	 *
+	 * @return N�mero de intervalos calculados.
+	 */
+	public int getNumIntervals() {
+		return miNumIntervalosGenerados;
+	}
+
+	/**
+	 * Clase para contener los atributos Valor y coincidencias.
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	private class udtDatosEstudio {
+		private double Valor; //
+		private long Coincidencias;
+	}
+
+	/**
+	 * Clase para contener los atributos: N�mero de Elementos. Media.
+	 * SumaTotal. SumaCuadradoTotal. Desviaci�n standard.
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	private class udtDatosClase {
+		private long NumElementos; //             'N� total de elementos que hay en la clase
+		private double Media; //                 'Media de la clase
+		private double SumaTotal; //              'Suma total de los elementos
+
+		//'ProductoTotal          'Producto total de los elementos '�dar� problemas de desbordamiento?
+		private double SumaCuadradoTotal; //      'Suma del total de los cuadrados de los elementos
+		private double SDCM; //                  'Suma de la desviaci�n t�pica de los elementos de la clase respecto de la media de la clase
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/NaturalIntervalGenerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/DefaultFeatureDrawnNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/DefaultFeatureDrawnNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/DefaultFeatureDrawnNotification.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {{Task}}
+*/
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.FeatureDrawnNotification;
+
+/**
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class DefaultFeatureDrawnNotification implements FeatureDrawnNotification {
+	
+	private Feature feature;
+	private Geometry drawnGeometry;
+
+	/**
+	 * Creates a new FeatureDrawnNotification.
+	 */
+	public DefaultFeatureDrawnNotification() {
+		// Nothing to do
+	}
+
+	/**
+	 * Creates a new FeatureDrawnNotification.
+	 * @param feature the {@link Feature} being drawn
+	 * @param drawnGeometry the {@link Geometry} to be finally drawn, as it may
+	 * have been reprojected
+	 */
+	public DefaultFeatureDrawnNotification(Feature feature, Geometry drawnGeometry) {
+		this.setFeature(feature);
+		this.setDrawnGeometry(drawnGeometry);
+	}
+
+	public Feature getFeature() {
+		return feature;
+	}
+
+	public void setFeature(Feature feature) {
+		this.feature = feature;
+	}
+
+	/**
+	 * @return the {@link Geometry} to be finally drawn, as it may
+	 * have been reprojected
+	 */
+	public Geometry getDrawnGeometry() {
+		return drawnGeometry;
+	}
+
+	public void setDrawnGeometry(Geometry drawnGeometry) {
+		this.drawnGeometry = drawnGeometry;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/DefaultFeatureDrawnNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/SingleSymbolLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/SingleSymbolLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/SingleSymbolLegend.java	(revision 42196)
@@ -0,0 +1,212 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.MultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Implements a legend composed by single symbols.
+ * 
+ * @author Vicente Caballero Navarro
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class SingleSymbolLegend extends AbstractVectorialLegend implements
+		ISingleSymbolLegend {
+
+	final static private Logger LOG = LoggerFactory.getLogger(VectorialUniqueValueLegend.class);
+
+	public static final String SINGLE_SYMBOL_PERSISTENCE_DEFINITION_NAME =
+			"SimgleSymbolLegend";
+	
+	private ISymbol defaultSymbol;
+    private int shapeType = Geometry.TYPES.SURFACE; // Por defecto, tipo pol�gono
+
+	/**
+	 * Constructor method, needed by persistence.
+	 */
+	public SingleSymbolLegend() {
+		super();
+	}
+
+	/**
+	 * Convenience fast constructor.
+	 *
+	 * @param style S�mbolo.
+	 */
+	public SingleSymbolLegend(ISymbol style) {
+		super();
+		setDefaultSymbol(style);
+	}
+
+
+	public void setDefaultSymbol(ISymbol s) {
+		if (s == null) throw new NullPointerException("Default symbol cannot be null");
+		ISymbol old = defaultSymbol;
+		defaultSymbol = s;
+		fireDefaultSymbolChangedEvent(new SymbolLegendEvent(old, s));
+	}
+
+
+	public ISymbol getSymbol(int recordIndex) {
+		return defaultSymbol;
+	}
+
+	public ISymbol getDefaultSymbol() {
+		if(defaultSymbol==null) {
+			defaultSymbol = getSymbolManager().createSymbol(shapeType);
+		}
+		return defaultSymbol;
+	}
+
+
+
+	public int getShapeType() {
+		return shapeType;
+	}
+
+	public void setShapeType(int shapeType) {
+		if (this.shapeType != shapeType) {
+			if(defaultSymbol==null || defaultSymbol.getSymbolType()!=shapeType){
+				defaultSymbol = getSymbolManager().createSymbol(shapeType);
+			}
+			this.shapeType = shapeType;
+		}
+	}
+
+    public ISymbol getSymbolByFeature(Feature feat) {
+        return getDefaultSymbol();
+    }
+
+	public void useDefaultSymbol(boolean b) {
+		LOG.warn("TODO: SingleSymbolLegend.useDefaultSymbol");
+	}
+
+    public String[] getUsedFields() {
+        return new String[0];
+    }
+
+    public boolean isUseDefaultSymbol() {
+    	return true;
+
+    }
+
+
+    public String getClassName() {
+		return getClass().getName();
+	}
+
+    public boolean isSuitableForShapeType(int shapeType) {
+		return getShapeType() == shapeType;
+	}
+
+
+	public void setFeatureStore(FeatureStore fs) throws DataException {
+		LOG.warn("TODO: SingleSymbolLegend.useDefaultSymbol");
+	}
+	
+	protected String[] getRequiredFeatureAttributeNames(
+			FeatureStore featureStore) throws DataException {
+		// We only need the default Geometry to draw
+		return new String[] { featureStore
+				.getDefaultFeatureType().getDefaultGeometryAttributeName() };
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		SingleSymbolLegend clone = (SingleSymbolLegend) super.clone();
+
+		// Clone default symbol
+		if (defaultSymbol != null) {
+			clone.defaultSymbol = (ISymbol) defaultSymbol.clone();
+		}
+
+		return clone;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		// Set parent properties
+		super.loadFromState(state);
+		// LOG.warn("FIXME: SingleSymbolLegend.loadFromState");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// Save parent properties
+		super.saveToState(state);
+		// LOG.warn("FIXME: SingleSymbolLegend.saveToState");
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(SINGLE_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						SingleSymbolLegend.class,
+						SINGLE_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+						SINGLE_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				// Extend the Vectorial Legend base definition
+				definition.extend(manager.getDefinition(VECTORIAL_LEGEND_PERSISTENCE_DEFINITION_NAME));
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public static class RegisterLegend implements Callable {
+
+		public Object call() throws Exception {
+	        MapContextManager manager = MapContextLocator.getMapContextManager();
+
+            manager.registerLegend(ISingleSymbolLegend.LEGEND_NAME,
+                    SingleSymbolLegend.class);
+
+			return Boolean.TRUE;
+		}
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/SingleSymbolLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelLocationMetrics.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelLocationMetrics.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelLocationMetrics.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Point;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelLocationMetrics;
+
+/**
+ * 
+ * LabelLocationMetrics.java
+ *
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public class LabelLocationMetrics implements ILabelLocationMetrics {
+	private Point2D anchor;
+	private double rotation;
+	private boolean isFixed;
+	
+	public LabelLocationMetrics(Point2D point2D, double rotation, boolean isFixed) {
+		this.anchor = point2D;
+		this.rotation = rotation;
+		this.isFixed = isFixed;
+	}
+	
+	public Point2D getAnchor() {
+		return anchor;
+	}
+	
+	public void setAnchor(Point anchor) {
+		this.anchor = anchor;
+	}
+	
+	public double getRotation() {
+		return rotation;
+	}
+	
+	public void setRotation(double rotation) {
+		this.rotation = rotation;
+	}
+
+	public boolean isFixed() {
+		return isFixed;
+	}
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelLocationMetrics.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/TextPath.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/TextPath.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/TextPath.java	(revision 42196)
@@ -0,0 +1,494 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: TextPath.java 25636 2008-12-01 08:42:11Z vcaballero $
+ * $Log$
+ * Revision 1.2  2007-03-09 11:20:57  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.3  2007/02/21 07:34:09  jaume
+ * labeling starts working
+ *
+ * Revision 1.1.2.2  2007/02/09 07:47:05  jaume
+ * Isymbol moved
+ *
+ * Revision 1.1.2.1  2007/02/06 17:01:04  jaume
+ * first version (only lines)
+ *
+ *
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.geom.Point2D;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.i18n.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.algorithm.Angle;
+/**
+ * <p>Class that represents baseline of a string and allows the baseline to
+ * be composed as contiguous segments with distinct slope each.<br></p>
+ *
+ * <p>Once a TextPath is created for a string it is possible to know where
+ * the character at a determined position in the string is placed and
+ * rotated.<br></p>
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class TextPath {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(GeometryManager.class);
+
+	public static final int NO_POS = Integer.MIN_VALUE;
+	/**
+	 * Don't set a concrete word spacing. The word is separated using the normal
+	 * width of the separator glyph.
+	 */
+	public static final int DEFAULT_WORD_SPACING = Integer.MIN_VALUE;
+
+//	private char[] text;
+	/**
+	 * An array which contains the calculated positions for the glyphs
+	 * Each row represents a glyph, and it contains the X coord, the Y coord, and the rotation angle
+	 */
+	private double[][] posList;
+//	private int alignment;
+	private float characterSpacing;
+//	private boolean kerning;
+	private float wordSpacing;
+	private float margin;
+	private boolean rightToLeft;
+	private int numGlyphs = 0;
+	private float characterWidth;
+	private char[] wordSeparators = {' '}; // in the future, separators might be provided as parameter
+
+	/**
+	 * <p>Creates a new instance of TextPath with the current graphics
+	 * context.<br></p>
+	 *
+	 * <p>Given a <b>Graphics2D</b>, TextPath can know which Font and FontRenderContext
+	 * is in use. So, it can calculate the position and rotation of each
+	 * character in <b>char[] text</b> based in the path defined by the
+	 * <b>FShape path</b> argument.</p>
+	 * @param g, Graphics2D
+	 * @param path, FShape
+	 * @param text, char[]
+	 */
+	public TextPath(Graphics2D g, Geometry path, char[] text, Font font,
+			float characterSpacing, float characterWidth, boolean kerning,
+			float leading, int alignment, float wordSpacing, float margin,
+			boolean rightToLeft) {
+//		this.text = text;
+		if (alignment == ITextSymbol.SYMBOL_STYLE_ALIGNMENT_LEFT ||
+				alignment == ITextSymbol.SYMBOL_STYLE_ALIGNMENT_RIGHT
+				||
+				alignment == ITextSymbol.SYMBOL_STYLE_ALIGNMENT_CENTERED ||
+				alignment == ITextSymbol.SYMBOL_STYLE_ALIGNMENT_JUSTIFY) {
+//			this.alignment = alignment;
+		} else {
+			throw new IllegalArgumentException(
+					Messages.getText("invalid_value_for") + ": " +
+					Messages.getText("alignment")+" ( "+alignment+")");
+		}
+		this.characterWidth = characterWidth;
+		this.characterSpacing = characterSpacing;
+//		this.kerning = kerning;
+		this.wordSpacing = wordSpacing;
+		this.margin = margin;
+		this.rightToLeft = rightToLeft;
+
+		FontRenderContext frc = g.getFontRenderContext();
+		/* java 6 code
+		 * TODO keep this!!
+		if (kerning) {
+			HashMap<TextAttribute, Object> attrs = new HashMap<TextAttribute, Object>();
+			attrs.put(TextAttribute.KERNING , TextAttribute.KERNING_ON);
+		}
+		 */
+		GlyphVector gv = font.createGlyphVector(frc, text);
+
+		PathLength pl;
+		try {
+			pl = new PathLength(softenShape(path, gv).getShape());
+			if (alignment==ITextSymbol.SYMBOL_STYLE_ALIGNMENT_RIGHT) {
+				posList = computeAtRight(gv, pl, text);
+			}
+			else if (alignment==ITextSymbol.SYMBOL_STYLE_ALIGNMENT_CENTERED) {
+				computeAtMiddle(frc, text, font, pl);
+			}
+			else {
+				posList = computeAtLeft(gv, pl, text);
+			}
+		} catch (CreateGeometryException e) {
+			logger.error("Error creating a curve", e);
+		}		
+	}
+
+	protected Geometry softenShape(Geometry shape, GlyphVector gv) throws CreateGeometryException {
+
+		float interval = (float) gv.getVisualBounds().getWidth()/(gv.getNumGlyphs()*3);
+
+		PathLength pl = new PathLength(shape.getShape());
+		if (pl.lengthOfPath()==0.0f) {
+			return shape; 
+		}
+                
+		GeneralPathX correctedPath = new GeneralPathX();
+		int controlPoints = 16;
+		double[][] points = new double[controlPoints][2];
+		double prevX, prevY;
+		double xsum=0, ysum=0;
+		int nextPos = 0;
+		boolean bufferComplete = false;
+		boolean movedTo = false;
+		for (float curPos = 0; curPos<pl.lengthOfPath(); curPos = curPos+interval) {
+			prevX = points[nextPos][0];
+			prevY = points[nextPos][1];
+			Point2D point =pl.pointAtLength(curPos);
+			if (!movedTo) {
+				correctedPath.moveTo(point.getX(), point.getY());
+				movedTo = true;
+			}
+
+			points[nextPos][0] = point.getX();
+			points[nextPos][1] = point.getY();
+
+			if (!bufferComplete) {
+				xsum += points[nextPos][0];
+				ysum += points[nextPos][1];
+				nextPos++;
+				if (nextPos==controlPoints) {
+					nextPos = 0;
+					bufferComplete = true;
+
+
+					/**
+					 * calculate the beginning of the line
+					 */
+					// this will be the first interpolated point
+					double auxX2 = xsum/controlPoints;
+					double auxY2 = ysum/controlPoints;
+
+					for (int i=1; i<controlPoints/2-1; i++) {
+						// calculate the points from the origin of the geometry to the first interpolated point
+						double auxX = (points[0][0]+points[i][0]+auxX2)/3;
+						double auxY = (points[0][1]+points[i][1]+auxY2)/3;
+						correctedPath.lineTo(auxX, auxY);
+					}
+					correctedPath.lineTo(auxX2, auxY2);
+				}
+			}
+			else {
+
+				xsum = xsum - prevX + points[nextPos][0];
+				ysum = ysum - prevY + points[nextPos][1];
+				if (!movedTo) {
+					correctedPath.moveTo(xsum/controlPoints, ysum/controlPoints);
+					movedTo = true;
+				}
+				else {
+					correctedPath.lineTo(xsum/controlPoints, ysum/controlPoints);
+				}
+
+				nextPos = (nextPos+1)%controlPoints;
+			}
+		}
+		Point2D endPoint = pl.pointAtLength(pl.lengthOfPath());
+		// last point in the geom
+		double endPointX = endPoint.getX();
+		double endPointY = endPoint.getY();
+
+		if (bufferComplete) {
+			/**
+			 * calculate the points from the last interpolated point to the end of the geometry
+			 */
+
+			// last interpolated point
+			double auxX2 = xsum/controlPoints;
+			double auxY2 = ysum/controlPoints;
+			nextPos = (nextPos+(controlPoints/2))%controlPoints;
+			for (int i=0; i<controlPoints/2-1; i++) {
+				// calculate the points from the last interpolated point to the end of the geometry
+				double auxX = (auxX2+points[nextPos][0]+endPointX)/3;
+				double auxY = (auxY2+points[nextPos][1]+endPointY)/3;
+				correctedPath.lineTo(auxX, auxY);
+				nextPos = (nextPos+1)%controlPoints;
+			}
+		}
+		correctedPath.lineTo(endPointX, endPointY);
+
+		return geomManager.createCurve(new GeneralPathX(
+				correctedPath.getPathIterator(null)), SUBTYPES.GEOM2D);
+	}
+
+	/**
+	 * Initializes the position vector.
+	 * @param g
+	 * @param path
+	 */
+	private double[][] computeAtRight(GlyphVector gv, PathLength pl, char[] text) {
+		numGlyphs = gv.getNumGlyphs();
+		double[][] pos = new double[numGlyphs][3];
+		float[] charAnchors = new float[numGlyphs];
+
+		/**
+		 * Compute glyph positions using linear distances
+		 */
+		float lengthOfPath = pl.lengthOfPath();
+		// char distance from the right side
+		float charDistance = lengthOfPath-margin;
+		int glyphsConsumed = numGlyphs-1;
+		float previousAngle = 0.0f;
+		float angle = 0.0f;
+		boolean correction = true;
+		float charWidth = characterWidth;
+		for (int i = numGlyphs-1; i>=0; i--) {
+			if (correction && charDistance>=0) {
+				previousAngle = angle;
+				angle = pl.angleAtLength(charDistance);
+				if (i<numGlyphs-1) {
+					// correct distance according to angle between current and previous glyph
+					int turn = Angle.getTurn(previousAngle, angle);
+					if (turn==1) {  // if turn is positive => increase distance
+						float auxDistance = charDistance - (float)(charWidth*2.5f*Angle.diff(previousAngle, angle)/Math.PI);
+						float auxAngle = pl.angleAtLength(auxDistance);
+						if (Angle.getTurn(previousAngle, auxAngle)==1) { // ensure new position also has positive turn
+							charDistance = auxDistance;
+							angle = auxAngle;
+						}
+					}
+					else if (turn==-1) { // if turn is negative => decrease distance
+						float auxDistance = charDistance + (float)(charWidth*0.9f*Angle.diff(previousAngle, angle)/Math.PI);
+						float auxAngle = pl.angleAtLength(auxDistance);
+						if (Angle.getTurn(previousAngle, auxAngle)==-1) { // ensure new position also has negative turn
+							charDistance = auxDistance;
+							angle = auxAngle;
+						}
+					}
+				}
+			}
+
+			if (wordSpacing!=DEFAULT_WORD_SPACING
+					&& isWordSeparator(text[gv.getGlyphCharIndex(glyphsConsumed)], wordSeparators)) {
+				charWidth = wordSpacing;
+			}
+			else {
+				charWidth = Math.max(gv.getGlyphMetrics(glyphsConsumed).getAdvance(), characterWidth);
+
+			}
+			charDistance -= charWidth;
+			charAnchors[glyphsConsumed] = charDistance;
+			charDistance -= characterSpacing;
+			glyphsConsumed--;
+		}
+
+		/**
+		 * Calculate 2D positions for the glyphs from the calculated linear distances
+		 */
+		for (int i = numGlyphs-1; i>=0; i--) {
+			float anchor = (rightToLeft) ? charAnchors[charAnchors.length-1-i] : charAnchors[i];
+			Point2D p = pl.pointAtLength( anchor );
+			if (p == null) {
+				if (i<numGlyphs-1) { // place in a straight line the glyphs that don't fit in the shape
+					pos[i][0] = pos[i+1][0] + (charAnchors[i]-charAnchors[i+1])*Math.cos(pos[i+1][2]);
+					pos[i][1] = pos[i+1][1] + (charAnchors[i]-charAnchors[i+1])*Math.sin(pos[i+1][2]);
+					pos[i][2] = pos[i+1][2];
+				} else {
+					pos[i][0] = NO_POS;
+					pos[i][1] = NO_POS;
+				}
+				continue;
+			}
+			pos[i][0] = p.getX();
+			pos[i][1] = p.getY();
+			pos[i][2] = pl.angleAtLength( anchor );
+		}
+		return pos;
+	}
+
+	/**
+	 * Initializes the position vector.
+	 * @param g
+	 * @param path
+	 */
+	private double[][] computeAtLeft(GlyphVector gv, PathLength pl, char[] text) {
+		numGlyphs = gv.getNumGlyphs();
+		double[][] pos = new double[numGlyphs][3];
+		float[] charAnchors = new float[numGlyphs];
+		float[] charWidths = new float[numGlyphs];
+
+		/**
+		 * Compute glyph positions using linear distances
+		 */
+		float lengthOfPath = pl.lengthOfPath();
+		float charDistance = margin;
+		int glyphsConsumed = 0;
+		float previousAngle = 0.0f;
+		float angle = 0.0f;
+		boolean correction = true;
+		float charWidth = characterWidth;
+		for (int i = 0; i < gv.getNumGlyphs(); i++) {
+
+			if (correction && charDistance<=lengthOfPath) {
+				previousAngle = angle;
+				angle = pl.angleAtLength(charDistance);
+				if (i>0) {
+					// correct distance according to angle between current and previous glyph
+					int turn = Angle.getTurn(previousAngle, angle);
+					if (turn==1) {  // if turn is positive => decrease distance
+						float auxDistance = charDistance - (float)(charWidth*0.9*Angle.diff(previousAngle, angle)/Math.PI);
+						float auxAngle = pl.angleAtLength(auxDistance);
+						if (Angle.getTurn(previousAngle, auxAngle)==1) { // ensure new position also has positive turn
+							charDistance = auxDistance;
+							angle = auxAngle;
+						}
+					}
+					else if (turn == -1){ // if turn is negative => increase distance
+
+						float auxDistance = charDistance + (float)(charWidth*2.5*Angle.diff(previousAngle, angle)/Math.PI);
+						float auxAngle = pl.angleAtLength(auxDistance);
+						if (Angle.getTurn(previousAngle, auxAngle)==-1) { // ensure new position also has negative turn
+							charDistance = auxDistance;
+							angle = auxAngle;
+						}
+					}
+				}
+			}
+			if (wordSpacing!=DEFAULT_WORD_SPACING
+					&& isWordSeparator(text[gv.getGlyphCharIndex(glyphsConsumed)], wordSeparators)) {
+				// use defined wordspacing
+				charWidth = wordSpacing;
+			}
+			else {
+				charWidth = Math.max(gv.getGlyphMetrics(glyphsConsumed).getAdvance(), characterWidth);
+
+			}
+			charWidths[glyphsConsumed] = charWidth;
+			charAnchors[glyphsConsumed] = charDistance;
+			charDistance += charWidth;
+			charDistance += characterSpacing;
+			glyphsConsumed++;
+		}
+
+		/**
+		 * Calculate 2D positions for the glyphs from the calculated linear distances
+		 */
+		for (int i = 0; i < charAnchors.length; i++) {
+			float anchor = (rightToLeft) ? charAnchors[charAnchors.length-1-i] : charAnchors[i];
+			Point2D p = pl.pointAtLength( anchor );
+			if (p == null) {
+				if (i>0) { // place in a straight line the glyphs that don't fit in the shape
+					pos[i][0] = pos[i-1][0] + (charAnchors[i]-charAnchors[i-1])*Math.cos(pos[i-1][2]);
+					pos[i][1] = pos[i-1][1] + (charAnchors[i]-charAnchors[i-1])*Math.sin(pos[i-1][2]);
+					pos[i][2] = pos[i-1][2];
+				} else {
+					pos[i][0] = NO_POS;
+					pos[i][1] = NO_POS;
+				}
+				continue;
+			}
+			pos[i][2] = pl.angleAtLength( anchor );
+			//			pos[i][0] = p.getX() - charWidths[i]*Math.cos(pos[i][2]);
+			//			pos[i][1] = p.getY() - charWidths[i]*Math.sin(pos[i][2]);
+			pos[i][0] = p.getX();
+			pos[i][1] = p.getY();
+		}
+		return pos;
+	}
+
+
+	/**
+	 * Initializes the position vector.
+	 * @param g
+	 * @param path
+	 */
+	private void computeAtMiddle(FontRenderContext frc, char[] text, Font font, PathLength pl) {
+		if (text.length==0) {
+			return; // nothing to compute if text length is 0
+		}
+		int middleChar = (text.length-1)/2;
+		char[] text1 = new char[middleChar+1];
+		char[] text2 = new char[text.length-text1.length];
+		System.arraycopy(text, 0, text1, 0, text1.length);
+		System.arraycopy(text, text1.length,  text2, 0, text2.length);
+
+		float halfLength = pl.lengthOfPath()/2.0f;
+		margin = halfLength;
+		GlyphVector gv = font.createGlyphVector(frc, text1);
+		double[][] pos1 = computeAtRight(gv, pl, text1);
+		int glyphCount = numGlyphs;
+		gv = font.createGlyphVector(frc, text2);
+		margin = halfLength + characterSpacing;
+		double[][] pos2 = computeAtLeft(gv, pl, text2);
+		numGlyphs += glyphCount;
+		posList = new double[pos1.length+pos2.length][3];
+		System.arraycopy(pos1, 0, posList, 0, pos1.length);
+		System.arraycopy(pos2, 0, posList, pos1.length, pos2.length);
+	}
+
+
+	/**
+	 * <p>Returns the placement of the next character to draw and the corresponding
+	 * rotation in a double array of three elements with this order:</p><br>
+	 *
+	 * <p><b>double[0]</b> Position in X in the screen</p>
+	 * <p><b>double[1]</b> Position in Y in the screen</p>
+	 * <p><b>double[2]</b> Angle of the character.</p>
+	 * @return
+	 */
+	public double[] nextPosForGlyph(int glyphIndex) {
+		return posList[glyphIndex];
+	}
+
+	public int getGlyphCount() {
+		return numGlyphs;
+	}
+
+	protected static boolean isWordSeparator(char c, char[] wordSeparators) {
+		char separator;
+		for (int i = 0; i < wordSeparators.length; i++) {
+			separator = wordSeparators[i];
+			if (c==separator) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/TextPath.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/EvaluatorCreator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/EvaluatorCreator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/EvaluatorCreator.java	(revision 42196)
@@ -0,0 +1,59 @@
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.gvsig.tools.evaluator.EvaluatorWithDescriptions;
+import org.gvsig.tools.evaluator.sqljep.SQLJEPEvaluator;
+
+
+/**
+ * 
+ * Utility class to centralize the creation of an
+ * @link {@link EvaluatorWithDescriptions}
+ * 
+ * TODO Perhaps create a manager in Tools to perform this operation
+ * 
+ * @author jldominguez
+ *
+ */
+public class EvaluatorCreator {
+
+	private static Map<String, EvaluatorWithDescriptions> evCache =
+			new HashMap<String, EvaluatorWithDescriptions>();
+	
+    /**
+     * Create an {@link EvaluatorWithDescriptions} that uses
+     * the string expression provided
+     * 
+     * @param expr
+     * @return
+     */
+    public static EvaluatorWithDescriptions getEvaluator(String expr) {
+    	
+    	EvaluatorWithDescriptions resp = evCache.get(expr);
+    	if (resp == null) {
+    		resp = new SQLJEPEvaluator(expr);
+    		if (evCache.size() > 100) {
+    			removeOne(evCache);
+    		}
+    		evCache.put(expr, resp);
+    	}
+        return resp; 
+    }
+    
+	private static void removeOne(
+			Map<String, EvaluatorWithDescriptions> themap) {
+		
+		Iterator<String> iter = themap.keySet().iterator();
+		int count = 50;
+		String k = null;
+		while (iter.hasNext() && count > 0) {
+			k = iter.next();
+			count--;
+		}
+		themap.remove(k);
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/DefaultLabelingMethod.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/DefaultLabelingMethod.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/DefaultLabelingMethod.java	(revision 42196)
@@ -0,0 +1,203 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.IntersectsEnvelopeEvaluator;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.evaluator.AndEvaluator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+public class DefaultLabelingMethod implements ILabelingMethod {
+
+
+	private static final String FIELD_DEFAULT_LABEL = "defaultLabel";
+	private static final String DEFAULT_LABELING_METHOD_PERSISTENCE_DEFINITION_NAME =
+			"DefaultLabelingMethod";
+	private ILabelClass defaultLabel;
+
+	/**
+	 * Empty constructor for persistence.
+	 */
+	public DefaultLabelingMethod() {
+		// Nothing to do
+	}
+
+	public DefaultLabelingMethod(LabelClass defaultLabel) {
+		this();
+		this.defaultLabel = defaultLabel;
+	}
+
+
+	public void addLabelClass(ILabelClass lbl) {
+		defaultLabel = lbl;
+	}
+
+
+	public void deleteLabelClass(ILabelClass lbl) {
+		// does nothing
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public boolean allowsMultipleClass() {
+		return false;
+	}
+
+	public void renameLabelClass(ILabelClass lbl, String newName) {
+		// does nothing
+	}
+
+
+	public FeatureSet getFeatureIteratorByLabelClass(
+			FLyrVect layer,
+			ILabelClass lc,
+			ViewPort viewPort,
+			String[] usedFields) throws DataException {
+		
+		FeatureStore featureStore=layer.getFeatureStore();
+		
+		if (viewPort == null && usedFields == null) {
+			// nothing more to do
+			return featureStore.getFeatureSet();
+		}
+		FeatureQuery featureQuery=featureStore.createFeatureQuery();
+		
+		if (usedFields != null) {
+			featureQuery.setAttributeNames(usedFields);
+		}
+
+		Evaluator eva = null;
+		
+		if (viewPort != null) {
+			FeatureType fty = featureStore.getDefaultFeatureType(); 
+			eva = new IntersectsEnvelopeEvaluator(
+					viewPort.getAdjustedEnvelope(),
+					layer.getProjection(),
+					fty, fty.getDefaultGeometryAttributeName());
+			
+		}
+		
+		if (lc.getSQLQuery() != null && lc.getSQLQuery().trim().length() > 0) {
+		    Evaluator vp_eva = eva;
+		    AndEvaluator and_eva = new AndEvaluator(vp_eva);
+		    
+		    String sql_str = lc.getSQLQuery();
+		    /*
+		     * SQL filter was validated in the dialog
+		     */
+	        Evaluator sql_eval = EvaluatorCreator.getEvaluator(sql_str);
+	        and_eva.addEvaluator(sql_eval);
+	        eva = and_eva; 
+		}
+
+		featureQuery.setFilter(eva);
+		return (FeatureSet)featureStore.getFeatureSet(featureQuery);
+	}
+
+	public boolean definesPriorities() {
+		return false;
+	}
+
+	public void setDefinesPriorities(boolean flag) {
+		/* nothing, since only one label class is suported */
+	}
+	public ILabelClass getLabelClassByName(String labelName) {
+		return defaultLabel;
+	}
+
+	public void clearAllClasses() {
+		defaultLabel = null;
+	}
+
+	public ILabelClass[] getLabelClasses() {
+		return defaultLabel == null ? new ILabelClass[0] : new ILabelClass[] { defaultLabel };
+	}
+
+	public ILabelingMethod cloneMethod() {
+//XMLENTITY-UPDATED	
+//		if (defaultLabel !=null)
+//			try {
+//				return new DefaultLabelingMethod(LabelingFactory.createLabelClassFromXML(defaultLabel.getXMLEntity()));
+//			} catch (XMLException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			}
+		return new DefaultLabelingMethod();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		defaultLabel = (ILabelClass) state.get(FIELD_DEFAULT_LABEL);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_DEFAULT_LABEL, defaultLabel);
+	}
+	
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(DEFAULT_LABELING_METHOD_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						DefaultLabelingMethod.class,
+						DEFAULT_LABELING_METHOD_PERSISTENCE_DEFINITION_NAME,
+						DEFAULT_LABELING_METHOD_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				
+				definition.addDynFieldObject(FIELD_DEFAULT_LABEL).setMandatory(false).setClassOfValue(ILabelClass.class);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/DefaultLabelingMethod.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelClass.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelClass.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelClass.java	(revision 42196)
@@ -0,0 +1,710 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: LabelClass.java 13953 2007-09-21 12:26:04Z jaume $
+ * $Log$
+ * Revision 1.14  2007-09-21 12:26:04  jaume
+ * cancellation support extended down to the IGeometry and ISymbol level
+ *
+ * Revision 1.13  2007/09/17 14:16:11  jaume
+ * multilayer symbols sizing bug fixed
+ *
+ * Revision 1.12  2007/08/22 09:48:13  jvidal
+ * javadoc
+ *
+ * Revision 1.11  2007/05/09 11:04:58  jaume
+ * refactored legend hierarchy
+ *
+ * Revision 1.10  2007/05/08 08:47:40  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.9  2007/04/26 11:41:00  jaume
+ * attempting to let defining size in world units
+ *
+ * Revision 1.8  2007/04/18 15:35:11  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.7  2007/04/12 14:28:43  jaume
+ * basic labeling support for lines
+ *
+ * Revision 1.6  2007/04/11 16:01:08  jaume
+ * maybe a label placer refactor
+ *
+ * Revision 1.5  2007/04/10 16:34:01  jaume
+ * towards a styled labeling
+ *
+ * Revision 1.4  2007/04/05 16:07:14  jaume
+ * Styled labeling stuff
+ *
+ * Revision 1.3  2007/04/02 16:34:56  jaume
+ * Styled labeling (start commiting)
+ *
+ * Revision 1.2  2007/03/09 08:33:43  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.6  2007/02/15 16:23:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.5  2007/02/09 07:47:05  jaume
+ * Isymbol moved
+ *
+ * Revision 1.1.2.4  2007/02/02 16:21:24  jaume
+ * start commiting labeling stuff
+ *
+ * Revision 1.1.2.3  2007/02/01 17:46:49  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.2  2007/02/01 11:42:47  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2007/01/30 18:10:45  jaume
+ * start commiting labeling stuff
+ *
+ *
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelLocationMetrics;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.impl.SimpleTextSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentContext;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.persistence.spi.PersistentContextServices;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * LabelClass is the model of the label in the new simbology of gvSIG. In this
+ * class is contained its definition, the expresion that defines the text which
+ * is going to be showed, if it will be visible or not, the text symbol that is
+ * going to paint the label and the style for its background.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class LabelClass implements ILabelClass {
+	
+	private static final String FIELD_REFERENCE_SYSTEM = "referenceSystem";
+	private static final String FIELD_UNIT = "unit";
+	private static final String FIELD_SQL_QUERY = "sqlQuery";
+	private static final String FIELD_SCALE = "scale";
+	private static final String FIELD_PRIORITY = "priority";
+	private static final String FIELD_TEXTS = "texts";
+	private static final String FIELD_LABEL_STYLE = "labelStyle";
+	private static final String FIELD_VISIBLE = "visible";
+	private static final String FIELD_LABEL_EXPRESSIONS = "labelExpressions";
+	private static final String FIELD_TEXT_SYMBOL = "textSymbol";
+	private static final String FIELD_NAME = "name";
+	private static final String FIELD_IS_USESQL = "useSQL";
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(GeometryManager.class);
+	private static final String LABEL_CLASS_PERSISTENCE_DEFINITION_NAME = "LabelClass";
+	private String theName = "";
+	private ITextSymbol textSymbol;
+	private String[] labelExpressions = new String[0];
+	private boolean isVisible = true;
+	private ILabelStyle labelStyle;
+	private String[] texts;
+	private int priority;
+	private double scale = 1;
+	
+	private String sqlQuery;
+	private boolean usesSQL;
+
+	private int unit = CartographicSupportToolkit.DefaultMeasureUnit;
+	private int referenceSystem =
+			CartographicSupportToolkit.DefaultReferenceSystem;
+	
+	/**
+	 * Returns true if the label will be showed in the map
+	 *
+	 * @return isVisible boolean
+	 */
+	public boolean isVisible() {
+		return isVisible;
+	}
+
+	/**
+	 * Returns true if the label will be showed in the map
+	 *
+	 * @return isVisible boolean
+	 */
+	public boolean isVisible(double scale) {
+		return isVisible();
+	}
+
+	/**
+	 * Sets the visibility of the label in the map.
+	 *
+	 * @param isVisible boolean
+	 */
+	public void setVisible(boolean isVisible) {
+		this.isVisible = isVisible;
+	}
+
+	/**
+	 * Returns the expression that defines the text which will be showed in
+	 * the label
+	 *
+	 * @return labelExpression String
+	 */
+	public String[] getLabelExpressions() {
+		return labelExpressions;
+	}
+
+	/**
+	 * Stablishes the expresion that, when it is evaluated, returns the text
+	 * which will be showed by the label.
+	 *
+	 * @param labelExpression String
+	 */
+	public void setLabelExpressions(String[] lbl_exps) {
+		if (lbl_exps == null) {
+			this.labelExpressions = new String[0];
+		} else {
+			this.labelExpressions = lbl_exps;
+		}
+		
+	}
+
+	/**
+	 * Returns the text symbol that is being used for the text(the font,
+	 * size,style,aligment)
+	 *
+	 * @return label ITextSymbol
+	 */
+	public ITextSymbol getTextSymbol() {
+		if (textSymbol == null) {
+			textSymbol = new SimpleTextSymbol();
+		}
+		return textSymbol;
+	}
+
+	private Dimension getSize() {
+		if (labelStyle == null) {
+			if (texts!=null && texts.length >0) {
+				String t = "";
+				for (int i = 0; i < texts.length; i++) {
+					t += texts[i];
+				}
+				getTextSymbol().setText(t);
+			}
+
+			Rectangle bounds = getTextSymbol().getBounds();
+			bounds.setLocation(
+					(int) Math.round(bounds.getX()),
+					(int) Math.round(bounds.getY()+bounds.getHeight()));
+			return new Dimension(bounds.width, bounds.height);
+		} else {
+			labelStyle.setTextFields(texts);
+			return labelStyle.getSize();
+		}
+	}
+	/**
+	 * Stablishes the text symbol that is going to be used for the text(the
+	 * font,size,style,aligment)
+	 *
+	 * @param textSymbol ITextSymbol
+	 */
+	public void setTextSymbol(ITextSymbol textSymbol) {
+		this.textSymbol = textSymbol;
+		if (textSymbol == null) {
+			this.textSymbol = new SimpleTextSymbol();
+		}
+		setReferenceSystem(referenceSystem);
+		setUnit(unit);
+	}
+
+	/**
+	 * Stablishes the style for the label.
+	 *
+	 * @param labelStyle ILabelStyle
+	 */
+	public void setLabelStyle(ILabelStyle labelStyle) {
+		this.labelStyle = labelStyle;
+	}
+
+	/**
+	 * Returns the style of the label
+	 *
+	 */
+	public ILabelStyle getLabelStyle() {
+		return this.labelStyle;
+	}
+
+	/**
+	 * Returns the name of the label
+	 *
+	 */
+	public String getName() {
+		return theName;
+	}
+
+	/**
+	 * Stablishes the name of the label
+	 * @param name
+	 */
+	public void setName(String name) {
+	    if (name == null) {
+            theName = "";
+	    } else {
+	        theName = name;
+	    }
+	}
+
+	public String toString() {
+		// for debugging
+		//		return name+"{label expression="+labelExpression+", visible="+isVisible+", priority="+priority+"}";
+		return getName();
+	}
+
+	/**
+	 * Sets the text for the label
+	 *
+	 * @param texts String[]
+	 */
+	public void setTexts(String[] texts) {
+		this.texts = null;
+		this.texts = texts;
+
+	}
+
+	/**
+	 * Return the text for the label
+	 *
+	 * @param texts String[]
+	 */
+	public String[] getTexts() {
+		return this.texts;
+	}
+
+	/**
+	 * <p>
+	 * LabelLocationMetrics, contains the anchor point, rotation, and some
+	 * other geometric calculations computed by the PlacementManager.
+	 * </p>
+	 *
+	 * <p>
+	 * The shp argument is passed as an accessory for subclasses of this
+	 * class in case they need futher geometric calculations
+	 * </p>
+	 * @param graphics, graphics to use to paint the label.
+	 * @param llm, concrete settings of the placement of this layer
+	 * @param shp, the Shape over whose the label is painted
+	 */
+	public void draw(Graphics2D graphics, ILabelLocationMetrics llm, Geometry geom) {
+		if (scale == 0)
+			return;
+
+
+		Dimension size = getSize();
+		int width = (int) Math.round(size.getWidth()*scale);
+		if (width  < 1)
+			return;
+
+		int height = (int) Math.round(size.getHeight()*scale);
+		if (height < 1)
+			return;
+
+		Rectangle r = new Rectangle(0,0, width, height);
+		org.gvsig.fmap.geom.primitive.Point anchor;
+		try {
+			anchor = geomManager.createPoint(llm.getAnchor().getX(), llm.getAnchor().getY(), SUBTYPES.GEOM2D);
+			double xAnchor = anchor.getX();
+			double yAnchor = anchor.getY();
+			double theta = llm.getRotation();
+
+			graphics.translate(xAnchor, yAnchor);
+			graphics.rotate(theta);
+			synchronized (this) {
+				float fontSizeBefore = textSymbol.getFont().getSize2D();
+				try {
+					textSymbol.setFontSize(fontSizeBefore*scale);
+					drawInsideRectangle(graphics, r);
+					textSymbol.setFontSize(fontSizeBefore);
+				} catch (SymbolDrawingException e) {
+					logger.warn("Error drawing", e);
+				}
+			}
+			graphics.rotate(-theta);
+			graphics.translate(-xAnchor, -yAnchor);
+		} catch (CreateGeometryException e1) {
+			logger.warn("Error creating a point", e1);
+		}
+	}
+
+	private void relativeToAbsolute(double[] xy, Rectangle r, Dimension labelSz, double ratioLabel, double ratioViewPort) {
+		int x;
+		int y;
+		if (ratioViewPort > ratioLabel) {
+			// size is defined by the viewport height
+			y = (int) (r.height*xy[1]);
+			x = (int) ((0.5*r.width) - (0.5-xy[0])*(ratioLabel*r.height));
+		} else {
+			// size is defined by the viewport width
+			x = (int) (r.width * xy[0]);
+			y = (int) ((0.5 * r.height) - (0.5-xy[1])*(r.width/ratioLabel));
+		}
+		xy[0] = x;
+		xy[1] = y;
+	}
+
+	/**
+	 * Useful to render a Label with size inside little rectangles.
+	 *
+	 * @param graphics Graphics2D
+	 * @param bounds Rectangle
+	 * @throws SymbolDrawingException
+	 */
+	public void drawInsideRectangle(Graphics2D graphics, Rectangle bounds) throws SymbolDrawingException {
+		if (labelStyle != null) {
+			labelStyle.drawInsideRectangle(graphics, bounds);
+			Rectangle2D[] textBounds = labelStyle.getTextBounds();
+			Dimension labelSz = getSize();
+			final double ratioLabel = labelSz.getWidth()/labelSz.getHeight();
+			final double ratioViewPort = bounds.getWidth() / bounds.getHeight();
+			final double[] xy = new double[2];
+
+
+			// draw the text fields
+			if (textBounds.length > 0 && texts!=null) {
+				for (int i = 0; i < textBounds.length && i < texts.length; i++) {
+					getTextSymbol().setText(texts[i]);
+					Rectangle2D textFieldArea = textBounds[i];
+					xy[0] = textFieldArea.getX();
+					xy[1] = textFieldArea.getY();
+					relativeToAbsolute(xy, bounds, labelSz, ratioLabel, ratioViewPort);
+					int x = (int) Math.round(xy[0]);
+					int y = (int) Math.round(xy[1]);
+
+					xy[0] = textFieldArea.getMaxX();
+					xy[1] = textFieldArea.getMaxY();
+					relativeToAbsolute(xy, bounds, labelSz, ratioLabel, ratioViewPort);
+					int width = (int) Math.round(xy[0]) -x;
+					int height = (int) Math.round(xy[1] - y) ;
+
+					Rectangle textRect = new Rectangle(x, y, width, height);
+					Shape oldClip = graphics.getClip();
+					graphics.setClip(textRect);
+					getTextSymbol().drawInsideRectangle(graphics, null, textRect, null);
+					graphics.setClip(oldClip);
+				}
+			}
+		} else {
+
+			if (texts != null && texts.length>0){
+				String fullText = "";
+				for(int ig=0; ig<texts.length; ig++){
+					fullText = fullText + texts[ig];
+				}
+				getTextSymbol().setText(fullText);
+			}
+			getTextSymbol().drawInsideRectangle(graphics, null, bounds, null);
+		}
+	}
+
+	public int getPriority() {
+		return priority;
+	}
+
+	public void setPriority(int priority) {
+		this.priority = priority;
+	}
+
+	public Geometry getShape(ILabelLocationMetrics llm) throws CreateGeometryException {
+		if (llm==null)
+			return null;
+		Point2D anchor = llm.getAnchor();
+		org.gvsig.fmap.geom.primitive.Point p = geomManager.createPoint(anchor.getX(), anchor.getY(), SUBTYPES.GEOM2D);
+		double theta = llm.getRotation();
+
+		// 2. calculate the container shape
+		Geometry returnedValue;
+		Rectangle bounds = getBounds();
+
+		AffineTransform at = AffineTransform.getTranslateInstance(p.getX(), p.getY());
+		at.concatenate(AffineTransform.getRotateInstance(theta));
+		returnedValue = geomManager.createSurface(new GeneralPathX(bounds
+				.getPathIterator(null)), SUBTYPES.GEOM2D);
+
+		returnedValue.transform(at);
+		return returnedValue;
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		Dimension sz = getSize();
+		double width = sz.getWidth();
+		double height = sz.getHeight();
+		return CartographicSupportToolkit.
+		getCartographicLength(this,
+				Math.max(width, height),
+				viewPort,
+				dpi);
+	}
+
+	public int getReferenceSystem() {
+		return referenceSystem;
+	}
+
+	public int getUnit() {
+		return unit;
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		Dimension sz = getSize();
+		double width = sz.getWidth();
+		double height = sz.getHeight();
+		if (width >= height) {
+			scale = cartographicSize / width;
+		} else {
+			scale = cartographicSize / height;
+		}
+	}
+
+	public void setReferenceSystem(int referenceSystem) {
+		this.referenceSystem = referenceSystem;
+		if (textSymbol != null && textSymbol instanceof CartographicSupport) {
+			((CartographicSupport) textSymbol).setReferenceSystem(referenceSystem);
+		}
+	}
+
+	public void setUnit(int unitIndex) {
+		this.unit = unitIndex;
+		if (textSymbol != null && textSymbol instanceof CartographicSupport) {
+			((CartographicSupport) textSymbol).setUnit(unitIndex);
+		}
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		setCartographicSize(getCartographicSize(
+				viewPort,
+				dpi,
+				geom),
+				geom);
+		return 0;
+	}
+
+	public Rectangle getBounds() {
+		Dimension cBounds = getSize();
+		return new Rectangle(
+				0,
+				0,
+				(int) Math.round(cBounds.width*scale),
+				(int) Math.round(cBounds.height*scale));
+	}
+
+	public String getSQLQuery() {
+		if (sqlQuery == null) sqlQuery = "";
+		return sqlQuery;
+	}
+
+	public void setSQLQuery(String sqlQuery) {
+		this.sqlQuery = sqlQuery;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.
+	 * persistence.PersistentState)
+	 */
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_NAME, getName());
+		state.set(FIELD_TEXT_SYMBOL, getTextSymbol());
+		state.set(FIELD_LABEL_EXPRESSIONS, getLabelExpressions());
+		state.set(FIELD_VISIBLE, isVisible());
+		
+		ILabelStyle sty = getLabelStyle();
+		if (sty != null) {
+			state.set(FIELD_LABEL_STYLE, getLabelStyle());
+		}
+		
+		state.set(FIELD_TEXTS, getTexts());
+		state.set(FIELD_PRIORITY, getPriority());
+
+		state.set(FIELD_SCALE, scale);
+		state.set(FIELD_SQL_QUERY, getSQLQuery());
+		state.set(FIELD_IS_USESQL, isUseSqlQuery());
+		
+		state.set(FIELD_UNIT, getUnit());
+		state.set(FIELD_REFERENCE_SYSTEM, getReferenceSystem());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.
+	 * persistence.PersistentState)
+	 */
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		setName(state.getString(FIELD_NAME));
+		setTextSymbol((ITextSymbol) state.get(FIELD_TEXT_SYMBOL));
+		setLabelExpressions(state.getStringArray(FIELD_LABEL_EXPRESSIONS));
+		setVisible(state.getBoolean(FIELD_VISIBLE));
+		
+		if (state.hasValue(FIELD_LABEL_STYLE)) {
+			setLabelStyle((ILabelStyle) state.get(FIELD_LABEL_STYLE));			
+		}
+		
+		setTexts((String[]) state.getArray(FIELD_TEXTS, String.class));
+		setPriority(state.getInt(FIELD_PRIORITY));
+		scale = state.getDouble(FIELD_SCALE);
+		
+		setUseSqlQuery(state.getBoolean(FIELD_IS_USESQL));
+		setSQLQuery(state.getString(FIELD_SQL_QUERY));
+		
+		setUnit(state.getInt(FIELD_UNIT));
+		setReferenceSystem(state.getInt(FIELD_REFERENCE_SYSTEM));
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(LABEL_CLASS_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						LabelClass.class,
+						LABEL_CLASS_PERSISTENCE_DEFINITION_NAME,
+						LABEL_CLASS_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+
+				definition.addDynFieldString(FIELD_NAME).setMandatory(true);
+				definition.addDynFieldObject(FIELD_TEXT_SYMBOL).setMandatory(true).setClassOfValue(ITextSymbol.class);
+				
+				definition.addDynFieldArray(FIELD_LABEL_EXPRESSIONS)
+				.setClassOfItems(String.class).setMandatory(true);
+				
+				definition.addDynFieldBoolean(FIELD_VISIBLE).setMandatory(true);
+				
+				definition.addDynFieldObject(FIELD_LABEL_STYLE).setMandatory(false)
+				.setClassOfValue(ILabelStyle.class);
+				
+				definition.addDynFieldList(FIELD_TEXTS).setMandatory(true).setClassOfItems(String.class);
+				definition.addDynFieldInt(FIELD_PRIORITY).setMandatory(true);
+				definition.addDynFieldDouble(FIELD_SCALE).setMandatory(true);
+				definition.addDynFieldString(FIELD_SQL_QUERY).setMandatory(true);
+				definition.addDynFieldBoolean(FIELD_IS_USESQL).setMandatory(true);
+				definition.addDynFieldInt(FIELD_UNIT).setMandatory(true);
+				definition.addDynFieldInt(FIELD_REFERENCE_SYSTEM).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+	public void setUseSqlQuery(boolean use_sql) {
+		this.usesSQL = use_sql;
+	}
+
+	public boolean isUseSqlQuery() {
+		return this.usesSQL;
+	}
+
+	public String getStringLabelExpression(){
+		String expr = "";
+
+		if(labelExpressions != null && labelExpressions.length > 0) {
+
+			for (int i = 0; i < labelExpressions.length-1; i++) {
+				expr += (String) labelExpressions[i] +  ":";//EOFIELD
+			}
+			expr += labelExpressions[labelExpressions.length - 1];
+
+		} else {
+			expr = "";
+		}
+		return expr;
+	}
+
+    public Object clone() throws CloneNotSupportedException {
+
+	PersistenceManager persman = ToolsLocator.getPersistenceManager();
+
+        PersistentContext context = null;
+        Object resp = null;
+        PersistentState state = null;
+        try {
+            state = persman.getState(this, true);
+        } catch (PersistenceException e) {
+            logger.warn("Can't clone, return me !!!!!!!!!!!!!!", e);
+            return this;
+        }
+        context = state.getContext();
+        if (context instanceof PersistentContextServices) {
+            /*
+             * Ensure that previous instances are not used,
+             * so objects are recreated
+             */
+            ((PersistentContextServices) context).clear();
+        }
+        try {
+            resp = persman.create(state);
+        } catch (Exception e) {
+            logger.warn("Can't clone, return me !!!!!!!!!!!!!!", e);
+            return this;
+        }
+        return resp;
+
+    }
+
+        
+
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelClass.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelingFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelingFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelingFactory.java	(revision 42196)
@@ -0,0 +1,132 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: LabelingFactory.java 13913 2007-09-20 09:36:02Z jaume $
+* $Log$
+* Revision 1.9  2007-09-20 09:33:15  jaume
+* Refactored: fixed name of IPersistAnce to IPersistence
+*
+* Revision 1.8  2007/05/22 12:17:41  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/05/22 10:05:31  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/13 11:59:30  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2007/03/28 16:48:01  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2007/03/20 16:16:20  jaume
+* refactored to use ISymbol instead of FSymbol
+*
+* Revision 1.3  2007/03/09 11:20:57  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.2  2007/03/09 08:33:43  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.4  2007/02/21 07:34:08  jaume
+* labeling starts working
+*
+* Revision 1.1.2.3  2007/02/12 15:15:20  jaume
+* refactored interval legend and added graduated symbol legend
+*
+* Revision 1.1.2.2  2007/02/09 07:47:05  jaume
+* Isymbol moved
+*
+* Revision 1.1.2.1  2007/02/02 16:21:24  jaume
+* start commiting labeling stuff
+*
+* Revision 1.1.2.1  2007/01/30 18:10:45  jaume
+* start commiting labeling stuff
+*
+*
+*/
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class LabelingFactory {
+	final static private Logger logger = LoggerFactory.getLogger(LabelingFactory.class);
+	@SuppressWarnings("unchecked")
+	private static Class defaultLabelingStrategy =
+			AttrInTableLabelingStrategy.class;
+	/**
+	 * Given a layer, a labeling method, a label placements constraints, and a label
+	 * zoom constraints it will figure out the best ILabelingStrategy that meets all
+	 * the needs.
+	 * @param layer, the target layer
+	 * @param method, the desired methods
+	 * @param placement, the desired placement constraints
+	 * @param zoom, the desired zoom constraints
+	 * @return ILabelingStrategy
+	 */
+	public static ILabelingStrategy createStrategy(FLayer layer,
+			ILabelingMethod method, IPlacementConstraints placement,
+			IZoomConstraints zoom) 	{
+		if (method == null && placement == null && zoom == null)
+			return createDefaultStrategy(layer);
+
+		ILabelingStrategy strat = createDefaultStrategy(layer);
+		if (method != null)
+			strat.setLabelingMethod(method);
+		if (placement != null)
+			strat.setPlacementConstraints(placement);
+		return strat;
+
+	}
+
+	/**
+	 * Creates a default labeling strategy from an XMLEntity.
+	 * @param layer
+	 * @return an instance of DefaultStrategy
+	 */
+	public static ILabelingStrategy createDefaultStrategy(FLayer layer) {
+		ILabelingStrategy st;
+		try {
+			st = (ILabelingStrategy) defaultLabelingStrategy.newInstance();
+			st.setLayer(layer);
+			return st;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+			return null;
+		}
+
+	}
+
+	@SuppressWarnings("unchecked")
+	public static void setDefaultLabelingStrategy(Class defaultLabelingStrategy) {
+		LabelingFactory.defaultLabelingStrategy = defaultLabelingStrategy;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelingFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/AttrInTableLabelingStrategy.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/AttrInTableLabelingStrategy.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/AttrInTableLabelingStrategy.java	(revision 42196)
@@ -0,0 +1,766 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.IntersectsEnvelopeEvaluator;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.impl.SimpleTextSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+
+/**
+ * LabelingStrategy used when the user wants to use label sizes, rotations, etc.
+ * from the values included in fields of the datasource's table
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class AttrInTableLabelingStrategy implements IAttrInTableLabelingStrategy {
+
+    private static final String FIELD_LABELING_METHOD = "labelingMethod";
+    private static final String FIELD_ZOOM_CONSTRAINTS = "zoomConstraints";
+    private static final String FIELD_COLOR_FONT = "colorFont";
+    private static final String FIELD_REFERENCE_SYSTEM = "referenceSystem";
+    private static final String FIELD_FIXED_COLOR = "fixedColor";
+    private static final String FIELD_USE_FIXED_COLOR = "useFixedColor";
+    private static final String FIELD_FIXED_SIZE = "fixedSize";
+    private static final String FIELD_USE_FIXED_SIZE = "useFixedSize";
+    private static final String FIELD_FONT = "font";
+    private static final String FIELD_UNIT = "Unit";
+    private static final String FIELD_ROTATION = "RotationField";
+    private static final String FIELD_COLOR = "ColorField";
+    private static final String FIELD_HEIGHT = "HeightField";
+    private static final String FIELD_TEXT = "TextField";
+    private static final Logger logger = LoggerFactory.getLogger(AttrInTableLabelingStrategy.class);
+    public static final double MIN_TEXT_SIZE = 3;
+    private static final String ATTR_IN_TABLE_LABELING_STRATEGY_PERSISTENCE_DEFINITION_NAME
+            = "AttrInTableLabelingStrategy";
+    private ILabelingMethod method = new DefaultLabelingMethod();
+    private IZoomConstraints zoom;
+    private FLyrVect layer;
+//	private double unitFactor = 1D;
+    private double fixedSize = 10;
+    private Color fixedColor;
+    private int unit = -1; //(pixel)
+    private boolean useFixedSize;
+    private boolean useFixedColor;
+    private int referenceSystem;
+//	private boolean isPrinting;
+    private String[] usedFields = null;
+    private Font font;
+    private Color colorFont;
+    private String textFieldName;
+    private String rotationFieldName;
+    private String heightFieldName;
+    private String colorFieldName;
+
+    public ILabelingMethod getLabelingMethod() {
+        return this.method;
+    }
+
+    public void setLabelingMethod(ILabelingMethod method) {
+        this.method = method;
+    }
+
+    public IPlacementConstraints getPlacementConstraints() {
+        return null; // (automatically handled by the driver)
+    }
+
+    public void setPlacementConstraints(IPlacementConstraints constraints) {
+        // nothing
+    }
+
+    public IZoomConstraints getZoomConstraints() {
+        return zoom;
+    }
+
+    public void setZoomConstraints(IZoomConstraints constraints) {
+        this.zoom = constraints;
+    }
+
+//    private double getScale(ViewPort vp, PrintAttributes patts)
+//            throws ReadException {
+//
+//        double dpi = 0;
+//        if (patts != null) {
+//            int len = PrintAttributes.PRINT_QUALITY_DPI.length;
+//            int priq = patts.getPrintQuality();
+//            if (priq < 0 || priq >= len) {
+//                dpi = vp.getDPI();
+//            } else {
+//                dpi = PrintAttributes.PRINT_QUALITY_DPI[priq];
+//            }
+//        } else {
+//            dpi = vp.getDPI();
+//        }
+//
+//        // ============== We have dpi now ====================
+//        IProjection proj = vp.getProjection();
+//
+//        if (vp.getImageSize() == null || vp.getAdjustedEnvelope() == null) {
+//            throw new ReadException("",
+//                    new Exception("Viewport does not have image size or envelope"));
+//        }
+//
+//        double[] trans2Meter = MapContext.getDistanceTrans2Meter();
+//        if (proj == null) {
+//            double wmeters = ((vp.getImageSize().width / dpi) * 0.0254);
+//            return (long) ((trans2Meter[vp.getMapUnits()] * vp.getAdjustedEnvelope().getLength(0))
+//                    / wmeters);
+//        } else {
+//            return Math.round(proj.getScale(
+//                    vp.getAdjustedEnvelope().getMinimum(0)
+//                    * trans2Meter[vp.getMapUnits()],
+//                    vp.getAdjustedEnvelope().getMaximum(0)
+//                    * trans2Meter[vp.getMapUnits()],
+//                    vp.getImageSize().width,
+//                    dpi));
+//        }
+//
+//    }
+
+    private void draw(BufferedImage image, Graphics2D g, double scale, ViewPort viewPort,
+            Cancellable cancel, PrintAttributes props) throws ReadException {
+
+//        double scale = getScale(viewPort, props);
+
+        SimpleTextSymbol sym = new SimpleTextSymbol();
+        sym.setFont(getFont());
+        sym.setUnit(unit);
+        sym.setReferenceSystem(referenceSystem);
+        if (zoom == null
+                || (zoom.isUserDefined() && (scale >= zoom.getMaxScale())
+                && (scale <= zoom.getMinScale()))) {
+            FeatureSet set = null;
+            DisposableIterator iterator = null;
+            try {
+                FilteredLogger logger = new FilteredLogger(AttrInTableLabelingStrategy.logger, 10);
+                
+                // limit the labeling to the visible extent
+                List<String> fields = new ArrayList<String>();
+                int heightPos = -1;
+                int rotationPos = -1;
+                int textPos = -1;
+                int colorPos = -1;
+
+                if (!this.usesFixedSize()) {
+                    if (getHeightField() != null) {
+                        heightPos = fields.size();
+                        fields.add(getHeightField());
+                    }
+                }
+                if (getRotationField() != null) {
+                    rotationPos = fields.size();
+                    fields.add(getRotationField());
+                }
+                if (getTextField() != null) {
+                    textPos = fields.size();
+                    fields.add(getTextField());
+                }
+
+                if (!this.usesFixedColor() && getColorField() != null) {
+                    colorPos = fields.size();
+                    fields.add(getColorField());
+                }
+
+                FeatureStore featureStore = layer.getFeatureStore();
+                ICoordTrans ct = layer.getCoordTrans();
+
+                String geomName = featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName();
+                fields.add(geomName);
+
+                if (viewPort.getAdjustedEnvelope().contains(
+                        layer.getFullEnvelope())) {
+                    /*
+                     * viewport contains layer completely
+                     */
+                    set = featureStore.getFeatureSet();
+                } else {
+                    /*
+                     * view port does not contain layer completely
+                     */
+                    IntersectsEnvelopeEvaluator iee = null;
+
+                    IProjection data_proj = null;
+                    Envelope env_in_store_crs = null;
+
+                    if (ct == null) {
+                        env_in_store_crs = viewPort.getAdjustedEnvelope();
+                        data_proj = viewPort.getProjection();
+                    } else {
+                        env_in_store_crs = viewPort.getAdjustedEnvelope().convert(
+                                ct.getInverted());
+                        data_proj = ct.getPOrig();
+                    }
+
+                    iee = new IntersectsEnvelopeEvaluator(
+                            env_in_store_crs,
+                            data_proj,
+                            featureStore.getDefaultFeatureType(),
+                            geomName);
+                    FeatureQuery featureQuery = featureStore.createFeatureQuery();
+                    featureQuery.setAttributeNames((String[]) fields.toArray(new String[fields.size()]));
+                    featureQuery.setFilter(iee);
+                    set = featureStore.getFeatureSet(featureQuery);
+                }
+
+                /*
+                 * 'set' now has the features that have to be labeled
+                 */
+                iterator = set.fastIterator();
+                while (iterator.hasNext()) {
+                    if (cancel.isCanceled()) {
+                        return;
+                    }
+                    try {
+                        Feature feature = (Feature) iterator.next();
+                        Geometry geom = feature.getDefaultGeometry();
+                        if( geom == null ) {
+                            continue;
+                        }
+                        
+                        double size = 0;
+                        Color color = null;
+                        if (useFixedSize) {
+                            // uses fixed size
+                            size = fixedSize;// * fontScaleFactor;
+                        } else if (heightFieldName != null) {
+                            // text size is defined in the table
+                            try {
+                                size = feature.getDouble(fields.get(heightPos));
+                            } catch (Exception e) {
+                                logger.warn("Null text height value for text '"+ feature.getString(fields.get(textPos))+"'.");
+                                continue;
+                            }
+                        } else {
+                            // otherwise will use the size in the symbol
+                            size = sym.getFont().getSize();
+                        }
+
+                        double the_dpi = viewPort.getDPI();
+                        if (props != null) {
+                            int len = PrintAttributes.PRINT_QUALITY_DPI.length;
+                            int priq = props.getPrintQuality();
+                            if (priq < 0 || priq >= len) {
+                                throw new ReadException(featureStore.getName(),
+                                        new Exception("Bad print quality value: "+ priq));
+                            } else {
+                                the_dpi = PrintAttributes.PRINT_QUALITY_DPI[priq];
+                            }
+                        }
+
+                        size = CartographicSupportToolkit.getCartographicLength(this,
+                                        size,
+                                        viewPort,
+                                        the_dpi);
+                        if (size <= MIN_TEXT_SIZE) {
+						// label is too small to be readable, will be skipped
+                            // this speeds up the rendering in wider zooms
+                            continue;
+                        }
+
+                        /*
+                         * ym.setFontSize(int) assumes dpi = 72
+                         */
+                        double font_size = size * 72 / the_dpi;
+                        sym.setFontSize(font_size);
+
+                        if (useFixedColor) {
+                            color = fixedColor;
+                        } else if (colorFieldName != null) {
+                            // text size is defined in the table
+                            try {
+                                color = new Color(feature.getInt(fields.get(colorPos)));
+                            } catch (ClassCastException ccEx) {
+                                if (feature.get(fields.get(colorPos)) != null) {
+                                    throw new ReadException("Unknown", ccEx);
+                                }
+                                logger.warn("Null color value for text '"+feature.getString(textFieldName)+"'.");
+                                continue;
+                            }
+                        } else {
+                            color = sym.getTextColor();
+                        }
+
+                        sym.setTextColor(color);
+
+                        if (ct != null) {
+                            /*
+                             * Reproject from store CRS to view CRS
+                             */
+                            geom = geom.cloneGeometry();
+                            geom.reProject(ct);
+                        }
+
+                        double rotation = 0D;
+                        Point p = null;
+                        if (rotationFieldName != null) {
+                            // text rotation is defined in the table
+                            rotation = -Math.toRadians(((Number) feature.get(fields.get(rotationPos))).doubleValue());
+                            p = createLabelPoint(geom);
+                        } else {
+                            GeometryType gty = geom.getGeometryType();
+                            if (gty.isTypeOf(Geometry.TYPES.CURVE)
+                                    || gty.isTypeOf(Geometry.TYPES.MULTICURVE)) {
+
+                                Geometry aux_geom = geom.cloneGeometry();
+                                aux_geom.transform(viewPort.getAffineTransform());
+
+                                PathLength pathLen = new PathLength(aux_geom);
+                                float length = pathLen.lengthOfPath();
+                                float distance = (float) (length * 0.4);
+                                rotation = pathLen.angleAtLength(distance);
+                                if (rotation < (-Math.PI / 2)) {
+                                    rotation = rotation + Math.PI;
+                                } else {
+                                    if (rotation > (Math.PI / 2)) {
+                                        rotation = rotation - Math.PI;
+                                    }
+                                }
+                                double norm = -rotation + Math.PI / 2;
+
+                                Point2D p2 = pathLen.pointAtLength(distance);
+                                Point2D p2_anchor = new Point2D.Double();
+
+                                try {
+                                    viewPort.getAffineTransform().inverseTransform(
+                                            p2, p2_anchor);
+                                } catch (NoninvertibleTransformException e) {
+                                    logger.warn("While computing anchor point", e);
+                                }
+                                double font_offset = 0.8 * font_size
+                                        / viewPort.getAffineTransform().getScaleX();
+                                p2_anchor.setLocation(
+                                        /*
+                                         * Move away from line
+                                         */
+                                        p2_anchor.getX() + font_offset * Math.cos(norm),
+                                        p2_anchor.getY() + font_offset * Math.sin(norm));
+
+                                p = GeometryLocator.getGeometryManager().createPoint(
+                                        p2_anchor.getX(),
+                                        p2_anchor.getY(), Geometry.SUBTYPES.GEOM2D);
+
+                            } else {
+                                p = createLabelPoint(geom);
+                            }
+
+                        }
+
+                        sym.setText(feature.getString(fields.get(textPos)));
+                        sym.setRotation(rotation);
+
+                        if (p != null) {
+                            if (props == null) {
+                                sym.draw(g, viewPort.getAffineTransform(), p, feature, cancel);
+                            } else {
+                                sym.print(g, viewPort.getAffineTransform(), p, props);
+                            }
+                        }
+                    } catch(Exception ex) {
+                        logger.warn("",ex);
+                    }
+                }
+
+            } catch (BaseException e) {
+                throw new ReadException(
+                        "Could not draw annotation in the layer.", e);
+            } finally {
+                if (iterator != null) {
+                    iterator.dispose();
+                }
+                if (set != null) {
+                    set.dispose();
+                }
+
+            }
+
+        }
+    }
+
+    static class FilteredLogger {
+        private int count = 0;
+        private final Logger logger;
+        private final int max;
+        
+        public FilteredLogger(Logger logger, int max) {
+            this.max = max;
+            this.logger = logger;
+        }
+        public void warn(String msg, Throwable th) {
+            if( ++this.count < this.max ) {
+                this.logger.warn(msg,th);
+            } else if( this.count == this.max ) {
+                this.logger.warn(msg,th);
+                this.logger.warn("Too many errors, don't dump more in this process.");
+            }
+        }
+        public void warn(String msg) {
+            if( ++this.count < this.max ) {
+                this.logger.warn(msg);
+            } else if( this.count == this.max ) {
+                this.logger.warn(msg);
+                this.logger.warn("Too many errors, don't dump more in this process.");
+            }
+        }
+        public void info(String msg) {
+            if( ++this.count < this.max ) {
+                this.logger.info(msg);
+            } else if( this.count == this.max ) {
+                this.logger.info(msg);
+                this.logger.info("Too many errors, don't dump more in this process.");
+            }
+        }
+    }
+    
+    public void draw(BufferedImage image, Graphics2D g, double scale, ViewPort viewPort,
+            Cancellable cancel, double dpi) throws ReadException {
+        draw(image, g, scale, viewPort, cancel, null);
+    }
+
+    private org.gvsig.fmap.geom.primitive.Point createLabelPoint(org.gvsig.fmap.geom.Geometry geom)
+            throws CreateGeometryException {
+
+        try {
+            return geom.centroid();
+        } catch (GeometryOperationNotSupportedException e) {
+            return null;
+        } catch (GeometryOperationException e) {
+            return null;
+        }
+    }
+
+//	public String getClassName() {
+//		return getClass().getName();
+//	}
+    public String getRotationField() {
+        return this.rotationFieldName;
+    }
+
+    public String getTextField() {
+        return this.textFieldName;
+    }
+
+    public String getHeightField() {
+        return this.heightFieldName;
+    }
+
+    public String getColorField() {
+        return this.colorFieldName;
+    }
+
+    public void setTextField(String textFieldName) {
+        this.textFieldName = textFieldName;
+        this.usedFields = null;
+    }
+
+    public void setRotationField(String rotationFieldName) {
+        this.rotationFieldName = rotationFieldName;
+        this.usedFields = null;
+    }
+
+    /**
+     * Sets the field that contains the size of the text. The size is computed
+     * in meters. To use any other unit, call setUnit(int) with the scale factor
+     * from meters (for centimeters, call <b>setUnitFactor(0.01))</b>.
+     *
+     * @param heightFieldName
+     */
+    public void setHeightField(String heightFieldName) {
+        this.heightFieldName = heightFieldName;
+        this.usedFields = null;
+    }
+
+    public void setColorField(String colorFieldName) {
+        this.colorFieldName = colorFieldName;
+    }
+
+    public void print(Graphics2D g, double scale, ViewPort viewPort, Cancellable cancel,
+            PrintAttributes props) throws ReadException {
+        draw(null, g, scale, viewPort, cancel, props);
+    }
+
+    public void setUsesFixedSize(boolean b) {
+        useFixedSize = b;
+        this.usedFields = null;
+    }
+
+    public boolean usesFixedSize() {
+        return useFixedSize;
+    }
+
+    public double getFixedSize() {
+        return fixedSize;
+    }
+
+    public void setFixedSize(double fixedSize) {
+        this.fixedSize = fixedSize;
+        this.usedFields = null;
+    }
+
+    public void setUsesFixedColor(boolean b) {
+        useFixedColor = b;
+        this.usedFields = null;
+    }
+
+    public boolean usesFixedColor() {
+        return useFixedColor;
+    }
+
+    public Color getFixedColor() {
+        return fixedColor;
+    }
+
+    public void setFixedColor(Color fixedColor) {
+        this.fixedColor = fixedColor;
+    }
+
+    public void setUnit(int unitIndex) {
+        unit = unitIndex;
+
+    }
+
+    public int getUnit() {
+        return unit;
+    }
+
+    public String[] getUsedFields() {
+        if (this.usedFields == null) {
+            List<String> v = new ArrayList<String>(4);
+            if (!this.usesFixedSize()) {
+                if (getHeightField() != null) {
+                    v.add(getHeightField());
+                }
+            }
+            if (getRotationField() != null) {
+                v.add(getRotationField());
+            }
+            if (getTextField() != null) {
+                v.add(getTextField());
+            }
+
+            if (!this.usesFixedColor() && getColorField() != null) {
+                v.add(getColorField());
+            }
+            this.usedFields = (String[]) v.toArray(new String[v.size()]);
+        }
+        return this.usedFields;
+    }
+
+    public int getReferenceSystem() {
+        return referenceSystem;
+    }
+
+    public void setReferenceSystem(int referenceSystem) {
+        this.referenceSystem = referenceSystem;
+    }
+
+    public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+        // not required here
+        throw new Error("Undefined in this context");
+    }
+
+    public void setCartographicSize(double cartographicSize, Geometry geom) {
+        // not required here
+        throw new Error("Undefined in this context");
+    }
+
+    public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+        // not required here
+        throw new Error("Undefined in this context");
+
+    }
+
+    public void setLayer(FLayer layer) {
+        this.layer = (FLyrVect) layer;
+        if (layer == null) {
+            return;
+        }
+        FeatureType type;
+        try {
+            type = this.layer.getFeatureStore().getDefaultFeatureType();
+        } catch (DataException e) {
+            throw new RuntimeException(this.getClass().getName(), e);
+        }
+
+        if (textFieldName != null) {
+            if (type.getIndex(textFieldName) < 0) {
+                // FIXME exception ??
+            }
+        }
+        if (rotationFieldName != null) {
+            if (type.getIndex(rotationFieldName) < 0) {
+                // FIXME exception ??
+            }
+        }
+        if (heightFieldName != null) {
+            if (type.getIndex(heightFieldName) < 0) {
+                // FIXME exception ??
+            }
+        }
+        if (colorFieldName != null) {
+            if (type.getIndex(colorFieldName) < 0) {
+                // FIXME exception ??
+            }
+        }
+    }
+
+    public boolean shouldDrawLabels(double scale) {
+        return layer.isWithinScale(scale);
+    }
+
+    public Color getColorFont() {
+        return colorFont;
+    }
+
+    public void setColorFont(Color colorFont) {
+        this.colorFont = colorFont;
+    }
+
+    public Font getFont() {
+        return font;
+    }
+
+    public void setFont(Font selFont) {
+        this.font = selFont;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
+     */
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+
+        setTextField(state.getString(FIELD_TEXT));
+        setHeightField(state.getString(FIELD_HEIGHT));
+        setColorField(state.getString(FIELD_COLOR));
+        setRotationField(state.getString(FIELD_ROTATION));
+        setUnit(state.getInt(FIELD_UNIT));
+        setFont((Font) state.get(FIELD_FONT));
+        useFixedSize = state.getBoolean(FIELD_USE_FIXED_SIZE);
+        setFixedSize(state.getDouble(FIELD_FIXED_SIZE));
+        useFixedColor = state.getBoolean(FIELD_USE_FIXED_COLOR);
+        setFixedColor((Color) state.get(FIELD_FIXED_COLOR));
+        setReferenceSystem(state.getInt(FIELD_REFERENCE_SYSTEM));
+        setColorFont((Color) state.get(FIELD_COLOR_FONT));
+        setZoomConstraints((IZoomConstraints) state.get(FIELD_ZOOM_CONSTRAINTS));
+        setLabelingMethod((ILabelingMethod) state.get(FIELD_LABELING_METHOD));
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.persistence.PersistentState)
+     */
+    public void saveToState(final PersistentState state) throws PersistenceException {
+        state.set(FIELD_TEXT, getTextField());
+        state.set(FIELD_HEIGHT, getHeightField());
+        state.set(FIELD_COLOR, getColorField());
+        state.set(FIELD_ROTATION, getRotationField());
+        state.set(FIELD_UNIT, getUnit());
+        state.set(FIELD_FONT, getFont());
+        state.set(FIELD_USE_FIXED_SIZE, useFixedSize);
+        state.set(FIELD_FIXED_SIZE, getFixedSize());
+        state.set(FIELD_USE_FIXED_COLOR, useFixedColor);
+        state.set(FIELD_FIXED_COLOR, getFixedColor());
+        state.set(FIELD_REFERENCE_SYSTEM, getReferenceSystem());
+        state.set(FIELD_COLOR_FONT, getColorFont());
+        state.set(FIELD_ZOOM_CONSTRAINTS, getZoomConstraints());
+        state.set(FIELD_LABELING_METHOD, getLabelingMethod());
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if (manager.getDefinition(ATTR_IN_TABLE_LABELING_STRATEGY_PERSISTENCE_DEFINITION_NAME) == null) {
+                DynStruct definition = manager.addDefinition(
+                        AttrInTableLabelingStrategy.class,
+                        ATTR_IN_TABLE_LABELING_STRATEGY_PERSISTENCE_DEFINITION_NAME,
+                        ATTR_IN_TABLE_LABELING_STRATEGY_PERSISTENCE_DEFINITION_NAME + " Persistence definition",
+                        null,
+                        null
+                );
+                definition.addDynFieldString(FIELD_TEXT).setMandatory(true);
+                definition.addDynFieldString(FIELD_HEIGHT).setMandatory(false);
+                definition.addDynFieldString(FIELD_COLOR).setMandatory(false);
+                definition.addDynFieldString(FIELD_ROTATION).setMandatory(false);
+                definition.addDynFieldInt(FIELD_UNIT).setMandatory(true);
+                definition.addDynFieldObject(FIELD_FONT).setMandatory(false).setClassOfValue(Font.class);
+                definition.addDynFieldBoolean(FIELD_USE_FIXED_SIZE).setMandatory(true);
+                definition.addDynFieldDouble(FIELD_FIXED_SIZE).setMandatory(false);
+                definition.addDynFieldBoolean(FIELD_USE_FIXED_COLOR).setMandatory(true);
+                definition.addDynFieldObject(FIELD_FIXED_COLOR).setMandatory(false).setClassOfValue(Color.class);
+                definition.addDynFieldInt(FIELD_REFERENCE_SYSTEM).setMandatory(true);
+                definition.addDynFieldObject(FIELD_COLOR_FONT).setMandatory(false).setClassOfValue(Color.class);
+                definition.addDynFieldObject(FIELD_ZOOM_CONSTRAINTS).setMandatory(false).setClassOfValue(IZoomConstraints.class);
+                definition.addDynFieldObject(FIELD_LABELING_METHOD).setMandatory(true).setClassOfValue(ILabelingMethod.class);
+            }
+            return Boolean.TRUE;
+        }
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/AttrInTableLabelingStrategy.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelClassFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelClassFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/LabelClassFactory.java	(revision 42196)
@@ -0,0 +1,28 @@
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClassFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+public class LabelClassFactory implements ILabelClassFactory {
+
+	I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+	public String getName() {
+		return i18nManager.getTranslation("simple_label");
+	}
+
+	public String getID() {
+		return "SimpleLabel";
+	}
+
+	public ILabelClass create() {
+		return new LabelClass();
+	}
+
+	public String toString() {
+		return this.getName();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/ZoomConstraintsImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/ZoomConstraintsImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/ZoomConstraintsImpl.java	(revision 42196)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ZoomConstraintsImpl.java 10671 2007-03-09 08:33:43Z jaume $
+* $Log$
+* Revision 1.2  2007-03-09 08:33:43  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/15 16:23:44  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/02/09 07:47:05  jaume
+* Isymbol moved
+*
+* Revision 1.1.2.1  2007/01/30 18:10:45  jaume
+* start commiting labeling stuff
+*
+*
+*/
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * @author  jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class ZoomConstraintsImpl implements IZoomConstraints {
+	private static final String FIELD_MIN_SCALE = "minScale";
+	private static final String FIELD_MAX_SCALE = "maxScale";
+	private static final String FIELD_MODE = "mode";
+	private static final String ZOOM_CONSTRAINTS_IMPL_PERSISTENCE_DEFINITION_NAME =
+			"ZoomConstraintsImpl";
+	/**
+	 * @uml.property  name="mode"
+	 */
+	private int mode = DEFINED_BY_THE_LAYER;
+	/**
+	 * @uml.property  name="minScale"
+	 */
+	private long minScale = -1;
+	/**
+	 * @uml.property  name="maxScale"
+	 */
+	private long maxScale = -1;
+
+	/**
+	 * @param mode
+	 * @uml.property  name="mode"
+	 */
+	public void setMode(int mode) {
+		if (mode != DEFINED_BY_THE_LAYER &&
+			mode != DEFINED_BY_THE_USER)
+			throw new IllegalArgumentException();
+		this.mode = mode;
+	}
+
+	/**
+	 * @return
+	 * @uml.property  name="maxScale"
+	 */
+	public long getMaxScale() {
+		return maxScale;
+	}
+
+	/**
+	 * @param maxScale
+	 * @uml.property  name="maxScale"
+	 */
+	public void setMaxScale(long maxScale) {
+		this.maxScale = maxScale;
+	}
+
+	/**
+	 * @return
+	 * @uml.property  name="minScale"
+	 */
+	public long getMinScale() {
+		return minScale;
+	}
+
+	/**
+	 * @param minScale
+	 * @uml.property  name="minScale"
+	 */
+	public void setMinScale(long minScale) {
+		this.minScale = minScale;
+	}
+
+	public boolean isUserDefined() {
+		return mode == DEFINED_BY_THE_USER;
+	}
+
+	public boolean isLayerDefined() {
+		return mode == DEFINED_BY_THE_LAYER;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		setMode(state.getInt(FIELD_MODE));
+		setMaxScale(state.getLong(FIELD_MAX_SCALE));
+		setMinScale(state.getLong(FIELD_MIN_SCALE));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_MODE, mode);
+		state.set(FIELD_MAX_SCALE, getMaxScale());
+		state.set(FIELD_MIN_SCALE, getMinScale());
+	}
+
+	public static class RegisterPersistence implements Callable {
+
+		public Object call() throws Exception {
+			PersistenceManager manager = ToolsLocator.getPersistenceManager();
+			if( manager.getDefinition(ZOOM_CONSTRAINTS_IMPL_PERSISTENCE_DEFINITION_NAME)==null ) {
+				DynStruct definition = manager.addDefinition(
+						ZoomConstraintsImpl.class,
+						ZOOM_CONSTRAINTS_IMPL_PERSISTENCE_DEFINITION_NAME,
+						ZOOM_CONSTRAINTS_IMPL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+						null, 
+						null
+				);
+				definition.addDynFieldInt(FIELD_MODE).setMandatory(true);
+				definition.addDynFieldLong(FIELD_MIN_SCALE).setMandatory(true);
+				definition.addDynFieldLong(FIELD_MAX_SCALE).setMandatory(true);
+			}
+			return Boolean.TRUE;
+		}
+		
+	}
+
+
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/ZoomConstraintsImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/MemoryShapeInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/MemoryShapeInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/MemoryShapeInfo.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.strategies;
+
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.List;
+
+
+
+/**
+ * Estructura de datos con la informaci�n relativa a las geometr�as de una
+ * fuente de datos necesaria para acelerar el procesado de la capa en memoria.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MemoryShapeInfo implements ShapeInfo {
+	List<Info> infos = new ArrayList<Info>();
+
+	/**
+	 * @see org.gvsig.symbology.fmap.mapcontext.rendering.legend.strategies.ShapeInfo#addShapeInfo(java.awt.geom.Rectangle2D,
+	 * 		int)
+	 */
+	public void addShapeInfo(Rectangle2D boundingBox, int type) {
+		infos.add(new Info(boundingBox, type));
+	}
+
+	/**
+	 * @see org.gvsig.symbology.fmap.mapcontext.rendering.legend.strategies.ShapeInfo#addShapeInfo(int,
+	 * 		java.awt.geom.Rectangle2D, int)
+	 */
+	public void setShapeInfo(int index, Rectangle2D boundingBox, int type)
+		throws ArrayIndexOutOfBoundsException {
+		infos.set(index, new Info(boundingBox, type));
+	}
+
+	/**
+	 * @see org.gvsig.symbology.fmap.mapcontext.rendering.legend.strategies.ShapeInfo#getBoundingBox(int)
+	 */
+	public Rectangle2D getBoundingBox(int index) {
+		return ((Info) infos.get(index)).getRect();
+	}
+
+	/**
+	 * @see org.gvsig.symbology.fmap.mapcontext.rendering.legend.strategies.ShapeInfo#getType(int)
+	 */
+	public int getType(int index) {
+		return ((Info) infos.get(index)).getType();
+	}
+
+	/**
+	 * Clase con el rect�ngulo y el tipo de shape.
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class Info {
+		private Rectangle2D rect;
+		private int type;
+
+		/**
+		 * Crea un nuevo Info.
+		 *
+		 * @param rect Extent del shape.
+		 * @param type Tipo de shape.
+		 */
+		public Info(Rectangle2D rect, int type) {
+			this.rect = rect;
+			this.type = type;
+		}
+
+		/**
+		 * Devuelve el extent del shape.
+		 *
+		 * @return Extent del shape.
+		 */
+		public Rectangle2D getRect() {
+			return rect;
+		}
+
+		/**
+		 * Devuelve el tipo de shape.
+		 *
+		 * @return Tipo de shape.
+		 */
+		public int getType() {
+			return type;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/MemoryShapeInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/driver/impl/PersistenceBasedLegendReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/driver/impl/PersistenceBasedLegendReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/driver/impl/PersistenceBasedLegendReader.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.driver.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.fmap.mapcontext.exceptions.IncompatibleLegendReadException;
+import org.gvsig.fmap.mapcontext.exceptions.ReadLegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendReader;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+
+/**
+ * Legend reader that uses the standard persistence
+ */
+public class PersistenceBasedLegendReader implements ILegendReader {
+
+    public ILegend read(File inFile, int geometryType)
+        throws ReadLegendException, IncompatibleLegendReadException,
+        IOException {
+        
+        InputStream istr = null;
+        istr = new FileInputStream(inFile);
+        ILegend resp = null;
+
+        try {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            Object inobj = manager.getObject(istr);
+            resp = (ILegend) inobj; 
+        } catch (Exception exc) {
+            throw new ReadLegendException(inFile, exc);
+        }
+        istr.close();
+        
+        if (resp instanceof IVectorLegend) {
+            IVectorLegend vleg = (IVectorLegend) resp;
+            
+            GeometryType foundgt = null;
+            try {
+                foundgt = GeometryLocator.getGeometryManager().getGeometryType(
+                vleg.getShapeType(), Geometry.SUBTYPES.GEOM2D);
+            } catch (Exception e) {
+                throw new IncompatibleLegendReadException(
+                    inFile, geometryType, e);
+            }
+            
+            if (geometryType != Geometry.TYPES.GEOMETRY &&
+                !foundgt.isTypeOf(geometryType)) {
+                
+                throw new IncompatibleLegendReadException(
+                    inFile,
+                    geometryType,
+                    new Exception("Geometry type found: " + vleg.getShapeType()));
+            }
+        }
+        return resp;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/driver/impl/PersistenceBasedLegendWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/driver/impl/PersistenceBasedLegendWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/driver/impl/PersistenceBasedLegendWriter.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.driver.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.gvsig.fmap.mapcontext.exceptions.WriteLegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendWriter;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+
+/**
+ * Legend writer that uses the standard persistence
+ */
+public class PersistenceBasedLegendWriter implements ILegendWriter {
+
+    public static final String
+    LONG_LEGEND_PERSISTENCE_FORMAT = "application/zip; subtype=gvsleg";
+    
+    public void write(ILegend legend, File outFile, String format)
+        throws WriteLegendException, IOException {
+        
+        // Removing dot
+        String legext = SymbolManager.LEGEND_FILE_EXTENSION.substring(1).toLowerCase();
+        String fmt = format.toLowerCase();
+        
+        if (fmt.compareTo(legext) != 0 &&
+            fmt.compareTo(LONG_LEGEND_PERSISTENCE_FORMAT) != 0) {
+            throw new WriteLegendException(
+                legend, new Exception("Unexpected format requested: " + format));
+        }
+        
+        FileOutputStream fos = new FileOutputStream(outFile);
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        manager.putObject(fos, legend);
+        fos.close();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.symbology">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/AllTests.java	(revision 42196)
@@ -0,0 +1,147 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering;
+
+import java.io.File;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestDrawFills;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestDrawLines;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestDrawMarkers;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestMultiLayerSymbol;
+
+public class AllTests extends TestCase{
+	/**
+	 * The EPSG:4326 projection
+	 */
+	public static IProjection TEST_DEFAULT_PROJECTION =
+		CRSFactory.getCRS("EPSG:4326");
+
+	/**
+	 * The EPSG:23030 projection
+	 */
+	public static IProjection TEST_DEFAULT_MERCATOR_PROJECTION =
+		CRSFactory.getCRS("EPSG:23030");
+
+	/**
+	 * The EPSG:23029 projection
+	 */
+	public static IProjection test_newProjection =
+		CRSFactory.getCRS("EPSG:23029");
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for com.iver.cit.gvsig.fmap");
+		//$JUnit-BEGIN$
+
+
+//		/* Symbols (jaume) */
+//			// integration tests
+//				// ISymbol
+//				suite.addTestSuite(TestISymbol.class);
+//				suite.addTestSuite(TestMultiLayerSymbol.class);
+//
+//				// CartographicSupport
+//				suite.addTestSuite(TestCartographicSupportForSymbol.class);
+//
+//		//
+//		/*
+//		 * Feature iterators
+//		 * */
+////		suite.addTestSuite(FeatureIteratorTest.class);
+//
+//		/*
+//		 * Other Tests present in FMap (cesar)
+//		 * Remove them from here and the src-test dir if they are not
+//		 * useful anymore.
+//		 */
+//
+////		suite.addTestSuite(TestAbstractIntervalLegend.class);
+//		suite.addTestSuite(TestCartographicSupportForSymbol.class);
+//		suite.addTestSuite(TestDrawFills.class);
+//		suite.addTestSuite(TestDrawLines.class);
+//		suite.addTestSuite(TestDrawMarkers.class);
+////		suite.addTestSuite(TestIClassifiedLegend.class);
+////		suite.addTestSuite(TestILegend.class);
+//		suite.addTestSuite(TestMultiLayerSymbol.class);
+
+		//$JUnit-END$
+		return suite;
+	}
+
+//// jaume
+//// PASTED FROM FeatureIteratorTest.java to be globally accessible
+	static final String fwAndamiDriverPath = "../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers";
+	private static File baseDataPath;
+	private static File baseDriversPath;
+
+
+	public static void setUpDrivers() {
+//		try {
+//			URL url = AllTests.class.getResource("testdata");
+//			if (url == null)
+//				throw new Exception("No se encuentra el directorio con datos de prueba");
+//
+//			baseDataPath = new File(url.getFile());
+//			if (!baseDataPath.exists())
+//				throw new Exception("No se encuentra el directorio con datos de prueba");
+//
+//			baseDriversPath = new File(fwAndamiDriverPath);
+//			if (!baseDriversPath.exists())
+//				throw new Exception("Can't find drivers path: " + fwAndamiDriverPath);
+//
+//			LayerFactory.setDriversPath(baseDriversPath.getAbsolutePath());
+//			if (LayerFactory.getDM().getDriverNames().length < 1)
+//				throw new Exception("Can't find drivers in path: " + fwAndamiDriverPath);
+//		} catch (Exception e) {
+//			throw new RuntimeException(e);
+//		}
+	}
+
+	public static FLayer newLayer(String fileName,
+			String driverName)
+	throws LoadLayerException {
+//		File file = new File(baseDataPath, fileName);
+//		return LayerFactory.createLayer(fileName,
+//				driverName,
+//				file, TEST_DEFAULT_MERCATOR_PROJECTION);
+	return null;
+	}
+
+	public static MapContext newMapContext(IProjection projection) {
+		ViewPort vp = new ViewPort(projection);
+		return new MapContext(vp);
+	}
+
+//// end past
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestAbstractIntervalLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestAbstractIntervalLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestAbstractIntervalLegend.java	(revision 42196)
@@ -0,0 +1,867 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureCache;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureLocks;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractIntervalLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.FInterval;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestISymbol;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.visitor.Visitor;
+
+
+/**
+ * Integration test to ensure that the legends which implements the
+ * IVectorialIntervalLegend interface follow the rules that follow the managing
+ * of them by the application.
+ *
+ * @author pepe vidal salvador - jose.vidal.salvador@iver.es
+ */
+public class TestAbstractIntervalLegend extends AbstractLibraryAutoInitTestCase {
+
+	private static final Integer v0 = new Integer(0);
+	private static final Integer v1 = new Integer(1);
+	private static final Integer v2 = new Integer(2);
+	private static final Integer v3 = new Integer(3);
+
+	private static final String FIELD3 = "field3";
+	private static final String FIELD2 = "field2";
+	private static final String FIELD1 = "field1";
+	private static final String FIELD0 = "field0";
+	private static final int FIELDID = 0;
+
+	private static final Integer[] feature0Values = new Integer[] { v0, v1, v2, v3, };
+	private static final Integer[] feature1Values = new Integer[] { v3, v0, v1, v2, };
+	private static final Integer[] feature2Values = new Integer[] { v2, v3, v0, v1, };
+	private static final Integer[] feature3Values = new Integer[] { v1, v2, v3, v0, };
+
+	private static final Integer[][] featureValues = new Integer[][] {
+		feature0Values,
+		feature1Values,
+		feature2Values,
+		feature3Values,};
+
+	private static String[] fieldNames = new String[] {FIELD0,FIELD1,FIELD2,FIELD3,};
+
+
+	// private static final Value v4 = (Value)ValueFactory.createValue(4);
+	// private static final Value v5 = (Value)ValueFactory.createValue(5);
+	// private static final Value v6 = (Value)ValueFactory.createValue(6);
+	// private static final Value v7 = (Value)ValueFactory.createValue(7);
+	// private static final Value v8 = (Value)ValueFactory.createValue(8);
+	// private static final Value v9 = (Value)ValueFactory.createValue(9);
+
+	private AbstractIntervalLegend[] intervalLegends;
+	private MockDataSource mockDataSource = new MockDataSource();
+
+	/**
+	 * To avoid duplicated validation logic in the test a mock object is created
+	 * to use a DataSource for this test.
+	 *
+	 */
+	private class MockDataSource implements FeatureStore {
+
+		public boolean allowWrite() {
+
+			return false;
+		}
+
+		public void beginEditingGroup(String description)
+				throws NeedEditingModeException {
+
+
+		}
+
+		public boolean canWriteGeometry(int gvSIGgeometryType)
+				throws DataException {
+
+			return false;
+		}
+
+		public void cancelEditing() throws DataException {
+
+
+		}
+
+		public FeatureSelection createFeatureSelection() throws DataException {
+
+			return null;
+		}
+
+		public FeatureIndex createIndex(FeatureType featureType,
+				String attributeName, String indexName) throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature() throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature(FeatureType type,
+				Feature defaultValues) throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature(FeatureType type,
+				boolean defaultValues) throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature(boolean defaultValues)
+				throws DataException {
+
+			return null;
+		}
+
+		public void delete(Feature feature) throws DataException {
+
+
+		}
+
+		public void edit() throws DataException {
+
+
+		}
+
+		public void edit(int mode) throws DataException {
+
+
+		}
+
+		public void endEditingGroup() throws NeedEditingModeException {
+
+
+		}
+
+		public void finishEditing() throws DataException {
+
+
+		}
+
+		public FeatureType getDefaultFeatureType() throws DataException {
+
+			return null;
+		}
+
+		public Envelope getEnvelope() {
+
+			return null;
+		}
+
+		public Feature getFeatureByReference(FeatureReference reference)
+				throws DataException {
+
+			return null;
+		}
+
+		public Feature getFeatureByReference(FeatureReference reference,
+				FeatureType featureType) throws DataException {
+
+			return null;
+		}
+
+		public FeatureSelection getFeatureSelection() throws DataException {
+
+			return null;
+		}
+
+		public FeatureSet getFeatureSet() throws DataException {
+
+			return null;
+		}
+
+		public FeatureSet getFeatureSet(FeatureQuery featureQuery)
+				throws DataException {
+
+			return null;
+		}
+
+		public void getFeatureSet(FeatureQuery featureQuery, Observer observer)
+				throws DataException {
+
+
+		}
+
+		public void getFeatureSet(Observer observer) throws DataException {
+
+
+		}
+
+		public List getFeatureTypes() throws DataException {
+
+			return null;
+		}
+
+		public FeatureIndexes getIndexes() {
+
+			return null;
+		}
+
+		public FeatureLocks getLocks() throws DataException {
+
+			return null;
+		}
+
+		public DataStoreParameters getParameters() {
+
+			return null;
+		}
+
+		public IProjection getSRSDefaultGeometry() throws DataException {
+
+			return null;
+		}
+
+		public FeatureStoreTransforms getTransforms() {
+
+			return null;
+		}
+
+		public void insert(EditableFeature feature) throws DataException {
+
+
+		}
+
+		public boolean isAppendModeSupported() {
+
+			return false;
+		}
+
+		public boolean isAppending() {
+
+			return false;
+		}
+
+		public boolean isEditing() {
+
+			return false;
+		}
+
+		public boolean isLocksSupported() {
+
+			return false;
+		}
+
+
+		public void setSelection(FeatureSet selection) throws DataException {
+
+
+		}
+		public void update(EditableFeatureType featureType)
+				throws DataException {
+
+
+		}
+
+		public void update(EditableFeature feature) throws DataException {
+
+
+		}
+
+		public void validateFeatures(int mode) throws DataException {
+
+
+		}
+
+		public DataSet createSelection() throws DataException {
+
+			return null;
+		}
+
+		public void dispose() {
+
+
+		}
+
+		public Iterator getChildren() {
+
+			return null;
+		}
+
+		public DataSet getDataSet() throws DataException {
+
+			return null;
+		}
+
+		public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+
+			return null;
+		}
+
+		public void getDataSet(Observer observer) throws DataException {
+
+
+		}
+
+		public void getDataSet(DataQuery dataQuery, Observer observer)
+				throws DataException {
+
+
+		}
+
+		public DataServerExplorer getExplorer() throws DataException {
+
+			return null;
+		}
+
+		public String getName() {
+
+			return null;
+		}
+
+		public DataSet getSelection() throws DataException {
+
+			return null;
+		}
+
+		public void refresh() throws DataException {
+
+
+		}
+
+		public void setSelection(DataSet selection) throws DataException {
+
+
+		}
+
+		public void beginComplexNotification() {
+
+
+		}
+
+		public void disableNotifications() {
+
+
+		}
+
+		public void enableNotifications() {
+
+
+		}
+
+		public void endComplexNotification() {
+
+
+		}
+
+		public void addObserver(Observer o) {
+
+
+		}
+
+		public void deleteObserver(Observer o) {
+
+
+		}
+
+		public void deleteObservers() {
+
+
+		}
+
+		public void saveToState(PersistentState state)
+				throws PersistenceException {
+
+
+		}
+
+		public void loadFromState(PersistentState state) throws PersistenceException {
+
+
+		}
+
+		public FeatureQuery createFeatureQuery() {
+
+			return null;
+		}
+
+		public boolean canRedo() {
+
+			return false;
+		}
+
+		public boolean canUndo() {
+
+			return false;
+		}
+
+		public List getRedoInfos() {
+
+			return null;
+		}
+
+		public List getUndoInfos() {
+
+			return null;
+		}
+
+		public void redo() throws RedoException {
+
+
+		}
+
+		public void redo(int num) throws RedoException {
+
+
+		}
+
+		public void undo() throws UndoException {
+
+
+		}
+
+		public void undo(int num) throws UndoException {
+
+
+		}
+
+		public FeatureIndex createIndex(FeatureType featureType,
+				String attributeName, String indexName, Observer observer)
+				throws DataException {
+
+			return null;
+		}
+
+		public Object getMetadataID() {
+
+			return null;
+		}
+
+		public void delegate(DynObject dynObject) {
+
+
+		}
+
+		public DynClass getDynClass() {
+
+			return null;
+		}
+
+		public Object getDynValue(String name) throws DynFieldNotFoundException {
+
+			return null;
+		}
+
+		public boolean hasDynValue(String name) {
+
+			return false;
+		}
+
+		public void implement(DynClass dynClass) {
+
+
+		}
+
+		public Object invokeDynMethod(String name, DynObject context)
+				throws DynMethodException {
+
+			return null;
+		}
+
+		public Object invokeDynMethod(int code, DynObject context)
+				throws DynMethodException {
+
+			return null;
+		}
+
+		public void setDynValue(String name, Object value)
+				throws DynFieldNotFoundException {
+
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see org.gvsig.metadata.Metadata#getMetadataChildren()
+		 */
+		public Set getMetadataChildren() {
+
+			return null;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see org.gvsig.metadata.Metadata#getMetadataName()
+		 */
+		public String getMetadataName() {
+
+			return null;
+		}
+
+		public FeatureType getFeatureType(String featureTypeId)
+				throws DataException {
+
+			return null;
+		}
+
+		public DataQuery createQuery() {
+
+			return null;
+		}
+
+		public long getFeatureCount() throws DataException {
+
+			return 0;
+		}
+
+		public void accept(Visitor visitor, DataQuery dataQuery)
+				throws BaseException {
+		}
+
+		public void accept(Visitor visitor) throws BaseException {
+		}
+
+		public void createCache(String name,
+				DynObject parameters) throws DataException {
+			// Do nothing
+		}
+
+		public FeatureCache getCache() {
+			return null;
+		}
+
+		public void clear() {
+			// Nothing to do
+		}
+
+		public void export(DataServerExplorer explorer, String provider,
+				NewFeatureStoreParameters params) throws DataException {
+			// Nothing to do
+		}
+
+		public String getProviderName() {
+			return null;
+		}
+
+		public String getFullName() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+        public boolean isKnownEnvelope() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public boolean hasRetrievedFeaturesLimit() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public int getRetrievedFeaturesLimit() {
+            // TODO Auto-generated method stub
+            return 0;
+        }
+
+        public FeatureIndex createIndex(String indexTypeName,
+            FeatureType featureType, String attributeName, String indexName)
+            throws DataException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public FeatureIndex createIndex(String indexTypeName,
+            FeatureType featureType, String attributeName, String indexName,
+            Observer observer) throws DataException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Interval getInterval() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Collection getTimes() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Collection getTimes(Interval interval) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Object clone() throws CloneNotSupportedException {
+            // TODO Auto-generated method stub
+            return super.clone();
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.fmap.dal.feature.FeatureStore#commitChanges()
+         */
+        public void commitChanges() throws DataException {
+            // TODO Auto-generated method stub
+
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.fmap.dal.feature.FeatureStore#canCommitChanges()
+         */
+        public boolean canCommitChanges() throws DataException {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public Feature getFeature(DynObject dynobject) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+	}
+
+	 private static final FInterval interval0=new FInterval(0,2);
+	 private static final FInterval interval1=new FInterval(3,5);
+	 private static final FInterval interval2=new FInterval(6,8);
+	 private static final FInterval interval3=new FInterval(9,11);
+	// private static final Value interval4;
+	// private static final Value interval5;
+	// private static final Value interval6;
+	// private static final Value interval7;
+	// private static final Value interval8;
+	// private static final Value interval9;
+
+	Hashtable symTable;
+
+	private ISymbol[] symbols;
+	private FInterval[] sampleIntervals = new FInterval[] { interval0, interval1, interval2, interval3, };
+	private Feature[] features;
+
+	// private FInterval[] intervals = new FInterval[] {
+	// interval0,
+	// interval1,
+	// interval2,
+	// interval3,
+	// interval4,
+	// interval5,
+	// interval6,
+	// interval7,
+	// interval8,
+	// interval9,
+	// };
+
+	protected void doSetUp() throws Exception {
+		features = new Feature[4];
+
+		// initialize test values
+		for (int i = 0; i < features.length; i++) {
+
+			// create the geometry associated to the feature
+			int size = 200;
+			Dimension d = new Dimension(size, size);
+			Rectangle aShape = new Rectangle(i * size, i * size, d.width,
+					d.height);
+			GeometryManager geomManager = GeometryLocator.getGeometryManager();
+			Curve curve = (Curve)geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
+			curve.setGeneralPath(new GeneralPathX(aShape.getPathIterator(null)));
+
+			/*
+			 * create a full-featured Feature with randomed values at its fields
+			 * to avoid testing over the same values each time
+			 */
+			//TODO
+//			features[i] = new MemoryFeature(geom, featureValues[i], "[" + i
+//					+ "]");
+		}
+
+		// initialize the symbol subset for this test
+		TestISymbol.addSymbols();
+		symbols = TestISymbol.getNewSymbolInstances();
+
+		// initialize the legends for this test
+		ILegend[] allLegends = TestILegend.getNewLegendInstances();
+		ArrayList intervalLegends = new ArrayList();
+		for (int i = 0; i < allLegends.length; i++) {
+
+			if (allLegends[i] instanceof AbstractIntervalLegend) {
+				intervalLegends.add(allLegends[i]);
+			}
+
+			if (allLegends[i] instanceof IClassifiedVectorLegend) {
+				IClassifiedVectorLegend cvl = (IClassifiedVectorLegend) allLegends[i];
+				cvl.setClassifyingFieldNames(new String[] { fieldNames[FIELDID] });
+//				cvl.setFeatureStore(mockDataSource);
+
+			}
+		}
+
+		this.intervalLegends = (AbstractIntervalLegend[]) intervalLegends
+				.toArray(new AbstractIntervalLegend[intervalLegends.size()]);
+	}
+
+	/**
+	 * This method is used to add symbols to a legend.That is, it takes an array
+	 * of AbstractIntervalLegend which is empty and, using a second array
+	 * of FIntervals(values), the first one is filled.Also, a hash table is filled
+	 * using the array of FIntervals (it will be useful in some tests to check
+	 * that a symbol can be taken using a feature) .
+	 *
+	 * @param legend
+	 * @return
+	 */
+	private void fillClassifiedLegend(AbstractIntervalLegend legend,
+			FInterval[] values) {
+		// initialize the hash table
+		symTable = new Hashtable();
+
+		// to add symbols to the legend and the hash table
+		for (int j = 0; j < values.length; j++) {
+
+			ISymbol sym = symbols[j % symbols.length];
+			legend.addSymbol(values[j], sym);
+			symTable.put(values[j], sym);
+		}
+	}
+
+	/**
+	 * This test ensures that when a legend is filled, the number of symbols
+	 * added is correct. To do it, is checked that the number of symbols of a
+	 * legend is the same as the length of the array of example values that we
+	 * have.
+	 *
+	 * @throws ReadDriverException
+	 */
+	public void testICLAdittion() throws ReadException {
+
+		// Fills the legend
+		for (int i = 0; i < intervalLegends.length; i++) {
+			fillClassifiedLegend(intervalLegends[i], sampleIntervals);
+		}
+
+		for (int i = 0; i < intervalLegends.length; i++) {
+			assertEquals(intervalLegends[i].getClass().getName()
+					+ " fails with the comparation of the number of symbols",
+					intervalLegends[i].getSymbols().length,
+					sampleIntervals.length);
+		}
+
+	}
+
+	/**
+	 * This test ensures that the symbols that we have previously added to a
+	 * legend are accessible using its features.To do it, this test compares the
+	 * symbol taken from the legend with the symbol taken from the hashTable
+	 * (using the same feature).
+	 * @throws Exception
+	 */
+	public void testICLCheckValueSymbols() throws Exception {
+
+		ISymbol tableSym =null;
+
+		// fills the legends
+		for (int i = 0; i < intervalLegends.length; i++) {
+			fillClassifiedLegend(intervalLegends[i], sampleIntervals);
+		}
+
+		for (int i = 0; i < intervalLegends.length; i++) {
+			// For each feature
+			for (int j = 0; j < features.length; j++) {
+				Feature myFeature = features[i];
+				// takes the value of the field that identifies the feature
+				Object val = myFeature.get(FIELDID);
+				// the last value is used to access to the hash table to obtain
+				// a symbol
+
+				if(interval0.isInInterval(val)) {
+					tableSym = (ISymbol) symTable.get(interval0);
+				} else if(interval1.isInInterval(val)) {
+					tableSym = (ISymbol) symTable.get(interval1);
+				} else if(interval2.isInInterval(val)) {
+					tableSym = (ISymbol) symTable.get(interval2);
+				} else if(interval3.isInInterval(val)) {
+					tableSym = (ISymbol) symTable.get(interval3);
+				}
+
+				AbstractIntervalLegend leg = intervalLegends[i];
+				// takes the symbol from a legend using the feature
+				ISymbol legendSym = leg.getSymbolByFeature(myFeature);
+				// compares that both symbols are the same
+				assertEquals(legendSym.getClass().getName()
+						+ " fails with the comparation of the class symbols",
+						legendSym, tableSym);
+			}
+		}
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestAbstractIntervalLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestILegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestILegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestILegend.java	(revision 42196)
@@ -0,0 +1,223 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend;
+
+import java.awt.Color;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialIntervalLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialUniqueValueLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.SingleSymbolLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.VectorialIntervalLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.VectorialUniqueValueLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.utils.XMLException;
+
+/**
+ * Integration test to ensure that the legends follow the rules that follow the
+ * managing of them by the application.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class TestILegend extends TestCase {
+	 private static ArrayList classesToTest;
+	 transient private ILegend[] legends;
+
+	 private static ArrayList getClassesToTest() throws MapContextException {
+	        if (classesToTest == null) {
+	            classesToTest = new ArrayList();
+
+	          TestILegend.addLegendToTest(VectorialIntervalLegend.class);
+	          TestILegend.addLegendToTest(VectorialUniqueValueLegend.class);
+	          TestILegend.addLegendToTest(SingleSymbolLegend.class);
+
+//	          TestILegend.addLegendToTest(QuantityByCategoryLegend.class);
+//	          TestILegend.addLegendToTest(DotDensityLegend.class);
+//	          TestILegend.addLegendToTest(ProportionalSymbolsLegend.class);
+//	          TestILegend.addLegendToTest(GraduatedSymbolLegend.class);
+
+
+	        }
+
+	        return classesToTest;
+	    }
+
+	 /**
+	  * This method fills the attributes of a legend.The purpose is to ensure that the new
+	  * legend is 'full' and ready to be used for a test.
+	  * @param le
+	  * @return
+	 * @throws MapContextException 
+	  */
+
+	 private static ILegend fillthelegend(ILegend le) throws MapContextException {
+
+		 SimpleFillSymbol mfs = new SimpleFillSymbol();
+		 mfs.setFillColor(Color.ORANGE.darker());
+		 mfs.setDescription("hola");
+		 mfs.setIsShapeVisible(true);
+		 String[] cad = new String[] {"Pepe","Juan"};
+
+		 if(le instanceof IVectorLegend) {
+			 IVectorLegend ssl=(IVectorLegend)le;
+			 ssl.setDefaultSymbol(mfs);
+		 }
+
+		 if(le instanceof IVectorialUniqueValueLegend) {
+			 IVectorialUniqueValueLegend ivuvl= (IVectorialUniqueValueLegend)le;
+			 ivuvl.setClassifyingFieldNames(cad);
+			 }
+
+		 if(le instanceof IVectorialIntervalLegend) {
+			 IVectorialIntervalLegend ivil=(IVectorialIntervalLegend)le;
+			 ivil.setClassifyingFieldNames(cad);
+			 }
+
+		 if(le instanceof IClassifiedVectorLegend) {
+			 IClassifiedVectorLegend icvl=(IClassifiedVectorLegend)le;
+			 icvl.setClassifyingFieldNames(cad);
+		 }
+
+
+
+		 return le;
+	 }
+
+
+	 public static void addLegendToTest(Class legendClass) throws MapContextException {
+	        try {
+	            ILegend len = (ILegend) legendClass.newInstance();
+	            fillthelegend(len);
+//	            len.getXMLEntity();
+
+	        } catch (InstantiationException e) {
+	            // TODO Auto-generated catch block
+	            fail("Instantiating class, cannot test a non-instantiable symbol");
+	        } catch (IllegalAccessException e) {
+	            // TODO Auto-generated catch block
+	            fail("Class not instantiable");
+	        } catch (ClassCastException ccEx) {
+	            fail("Cannot test a non symbol class");
+//	        } catch (XMLException e) {
+//	        	fail("Cannot test a non symbol class");
+			}
+	        getClassesToTest().add(legendClass);
+	    }
+
+	 /**
+	  * The main purpose of this method is to create new legend instances to be used for
+	  * other test methods.The new instances will be filled for the fillthelegend method.
+	  * @return
+	 * @throws MapContextException 
+	  * @throws FieldNotFoundException
+	  */
+	 public static ILegend[] getNewLegendInstances() throws MapContextException{
+	        ILegend[] legends = new ILegend[getClassesToTest().size()];
+	        for (int i = 0; i < legends.length; i++) {
+
+	            try {
+	            	legends[i] = (ILegend) ((Class) getClassesToTest().get(i)).newInstance();
+	            	fillthelegend(legends[i]);
+
+	            } catch (InstantiationException e) {
+	                fail("Instantiating class");
+	            } catch (IllegalAccessException e) {
+	                fail("Class not instantiable");
+	            }
+
+	        }
+	        return legends;
+	    }
+
+
+	  protected void setUp() throws Exception {
+	      legends = getNewLegendInstances();
+	    }
+
+	/**
+	 * this test ensures that the legend is self-defining. Checks that
+	 * the symbols contained by it can be replicated, and the rules for
+	 * such symbols as well.
+	 * @throws XMLException
+	 */
+	public void testILegendSelfDefinition() throws XMLException{
+		for (int i = 0; i < legends.length; i++) {
+			final ILegend theLegend = legends[i];
+			final ILegend cloneLegend =theLegend.cloneLegend();
+			assertTrue(theLegend.getClass().getName()+ " wrong class name declaration in getXMLEntity() ",
+					cloneLegend.getClass().equals(theLegend.getClass()));
+	        final Field[] theLegendFields = theLegend.getClass().getFields();
+            for (int j = 0; j < theLegendFields.length; j++) {
+                final Field fi = theLegendFields[j];
+                final boolean wasAccessible = fi.isAccessible();
+                fi.setAccessible(true);
+
+                try {
+                    assertTrue(theLegend.getClass().getName() + " fails or misses clonning the field " +fi.getName(),
+                            fi.get(theLegend).equals(fi.get(cloneLegend)));
+                } catch (IllegalArgumentException e) {
+                    fail();
+                } catch (IllegalAccessException e) {
+                    fail();
+                }
+                fi.setAccessible(wasAccessible);
+            }
+			}
+		}
+
+	/**
+	 * this test ensures that any legend always have a symbol ready to be used.
+	 * an empty legend is incorrect.
+	 * @throws Exception 
+	 *
+	 */
+	public void testSymbolAvailability() throws Exception {
+		for (int i = 0; i < legends.length; i++) {
+			assertNotNull("Legend no. "+i+" '"+legends[i].getClass().getName()+" does not have a symbol ready to be used", legends[i].getDefaultSymbol());
+		}
+
+		for (int i = 0; i < legends.length; i++) {
+
+			if (legends[i] instanceof IVectorLegend) {
+				IVectorLegend vectLegend = (IVectorLegend) legends[i];
+				try {
+					vectLegend.setDefaultSymbol(null);
+					fail("setDefaultSymbol(ISymbol) should not accept null values");
+				} catch (NullPointerException e) {
+					// correct
+				}
+			}
+
+		}
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestILegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestIClassifiedLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestIClassifiedLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestIClassifiedLegend.java	(revision 42196)
@@ -0,0 +1,864 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureCache;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureLocks;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractIntervalLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestISymbol;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.visitor.Visitor;
+
+
+/**
+ * Integration test to ensure that the legends which implements the
+ * IClassifiedLegend interface follow the rules that follow the managing of them
+ * by the application.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * @author pepe vidal salvador - jose.vidal.salvador@iver.es
+ */
+public class TestIClassifiedLegend extends AbstractLibraryAutoInitTestCase {
+
+	private static final Integer v0 = new Integer(0);
+	private static final Integer v1 = new Integer(1);
+	private static final Integer v2 = new Integer(2);
+	private static final Integer v3 = new Integer(3);
+
+	private static final String FIELD3 = "field3";
+	private static final String FIELD2 = "field2";
+	private static final String FIELD1 = "field1";
+	private static final String FIELD0 = "field0";
+	private static final int FIELDID = 0;
+
+//	private static final Integer[] feature0Values = new Integer[] { v0, v1, v2, v3, };
+//	private static final Integer[] feature1Values = new Integer[] { v3, v0, v1, v2, };
+//	private static final Integer[] feature2Values = new Integer[] { v2, v3, v0, v1, };
+//	private static final Integer[] feature3Values = new Integer[] { v1, v2, v3, v0, };
+//
+//	private static final Integer[][] featureValues = new Integer[][] {
+//		feature0Values,
+//		feature1Values,
+//		feature2Values,
+//		feature3Values,};
+
+	private static String[] fieldNames = new String[] {FIELD0,FIELD1,FIELD2,FIELD3,};
+
+
+	// private static final Value v4 = (Value)ValueFactory.createValue(4);
+	// private static final Value v5 = (Value)ValueFactory.createValue(5);
+	// private static final Value v6 = (Value)ValueFactory.createValue(6);
+	// private static final Value v7 = (Value)ValueFactory.createValue(7);
+	// private static final Value v8 = (Value)ValueFactory.createValue(8);
+	// private static final Value v9 = (Value)ValueFactory.createValue(9);
+
+	private AbstractIntervalLegend[] intervalLegends;
+//	private MockDataSource mockDataSource = new MockDataSource();
+
+	/**
+	 * To avoid duplicated validation logic in the test a mock object is created
+	 * to use a DataSource for this test.
+	 *
+	 */
+	private class MockDataSource implements FeatureStore {
+
+		public boolean allowWrite() {
+
+			return false;
+		}
+
+		public void beginEditingGroup(String description)
+				throws NeedEditingModeException {
+
+
+		}
+
+		public boolean canWriteGeometry(int gvSIGgeometryType)
+				throws DataException {
+
+			return false;
+		}
+
+		public void cancelEditing() throws DataException {
+
+
+		}
+
+		public FeatureSelection createFeatureSelection() throws DataException {
+
+			return null;
+		}
+
+		public FeatureIndex createIndex(FeatureType featureType,
+				String attributeName, String indexName) throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature() throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature(FeatureType type,
+				Feature defaultValues) throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature(FeatureType type,
+				boolean defaultValues) throws DataException {
+
+			return null;
+		}
+
+		public EditableFeature createNewFeature(boolean defaultValues)
+				throws DataException {
+
+			return null;
+		}
+
+		public void delete(Feature feature) throws DataException {
+
+
+		}
+
+		public void edit() throws DataException {
+
+
+		}
+
+		public void edit(int mode) throws DataException {
+
+
+		}
+
+		public void endEditingGroup() throws NeedEditingModeException {
+
+
+		}
+
+		public void finishEditing() throws DataException {
+
+
+		}
+
+		public FeatureType getDefaultFeatureType() throws DataException {
+
+			return null;
+		}
+
+		public Envelope getEnvelope() {
+
+			return null;
+		}
+
+		public Feature getFeatureByReference(FeatureReference reference)
+				throws DataException {
+
+			return null;
+		}
+
+		public Feature getFeatureByReference(FeatureReference reference,
+				FeatureType featureType) throws DataException {
+
+			return null;
+		}
+
+		public FeatureSelection getFeatureSelection() throws DataException {
+
+			return null;
+		}
+
+		public FeatureSet getFeatureSet() throws DataException {
+
+			return null;
+		}
+
+		public FeatureSet getFeatureSet(FeatureQuery featureQuery)
+				throws DataException {
+
+			return null;
+		}
+
+		public void getFeatureSet(FeatureQuery featureQuery, Observer observer)
+				throws DataException {
+
+
+		}
+
+		public void getFeatureSet(Observer observer) throws DataException {
+
+
+		}
+
+		public List getFeatureTypes() throws DataException {
+
+			return null;
+		}
+
+		public FeatureIndexes getIndexes() {
+
+			return null;
+		}
+
+		public FeatureLocks getLocks() throws DataException {
+
+			return null;
+		}
+
+		public DataStoreParameters getParameters() {
+
+			return null;
+		}
+
+		public IProjection getSRSDefaultGeometry() throws DataException {
+
+			return null;
+		}
+
+		public FeatureStoreTransforms getTransforms() {
+
+			return null;
+		}
+
+		public void insert(EditableFeature feature) throws DataException {
+
+
+		}
+
+		public boolean isAppendModeSupported() {
+
+			return false;
+		}
+
+		public boolean isAppending() {
+
+			return false;
+		}
+
+		public boolean isEditing() {
+
+			return false;
+		}
+
+		public boolean isLocksSupported() {
+
+			return false;
+		}
+
+		public void setSelection(FeatureSet selection) throws DataException {
+
+
+		}
+
+		public void update(EditableFeatureType featureType)
+				throws DataException {
+
+
+		}
+
+		public void update(EditableFeature feature) throws DataException {
+
+
+		}
+
+		public void validateFeatures(int mode) throws DataException {
+
+
+		}
+
+		public DataSet createSelection() throws DataException {
+
+			return null;
+		}
+
+		public void dispose() {
+
+
+		}
+
+		public Iterator getChildren() {
+
+			return null;
+		}
+
+		public DataSet getDataSet() throws DataException {
+
+			return null;
+		}
+
+		public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+
+			return null;
+		}
+
+		public void getDataSet(Observer observer) throws DataException {
+
+
+		}
+
+		public void getDataSet(DataQuery dataQuery, Observer observer)
+				throws DataException {
+
+
+		}
+
+		public DataServerExplorer getExplorer() throws DataException {
+
+			return null;
+		}
+
+		public String getName() {
+
+			return null;
+		}
+
+		public DataSet getSelection() throws DataException {
+
+			return null;
+		}
+
+		public void refresh() throws DataException {
+
+
+		}
+
+		public void setSelection(DataSet selection) throws DataException {
+
+
+		}
+
+		public void beginComplexNotification() {
+
+
+		}
+
+		public void disableNotifications() {
+
+
+		}
+
+		public void enableNotifications() {
+
+
+		}
+
+		public void endComplexNotification() {
+
+
+		}
+
+		public void addObserver(Observer o) {
+
+
+		}
+
+		public void deleteObserver(Observer o) {
+
+
+		}
+
+		public void deleteObservers() {
+
+
+		}
+
+		public void saveToState(PersistentState state)
+				throws PersistenceException {
+
+
+		}
+
+		public void loadFromState(PersistentState state) throws PersistenceException {
+
+
+		}
+
+		public FeatureQuery createFeatureQuery() {
+
+			return null;
+		}
+
+		public boolean canRedo() {
+
+			return false;
+		}
+
+		public boolean canUndo() {
+
+			return false;
+		}
+
+		public List getRedoInfos() {
+
+			return null;
+		}
+
+		public List getUndoInfos() {
+
+			return null;
+		}
+
+		public void redo() throws RedoException {
+
+
+		}
+
+		public void redo(int num) throws RedoException {
+
+
+		}
+
+		public void undo() throws UndoException {
+
+
+		}
+
+		public void undo(int num) throws UndoException {
+
+
+		}
+
+		public FeatureIndex createIndex(FeatureType featureType,
+				String attributeName, String indexName, Observer observer)
+				throws DataException {
+
+			return null;
+		}
+
+		public Object getMetadataID() {
+
+			return null;
+		}
+
+		public void delegate(DynObject dynObject) {
+
+
+		}
+
+		public DynClass getDynClass() {
+
+			return null;
+		}
+
+		public Object getDynValue(String name) throws DynFieldNotFoundException {
+
+			return null;
+		}
+
+		public boolean hasDynValue(String name) {
+
+			return false;
+		}
+
+		public void implement(DynClass dynClass) {
+
+
+		}
+
+		public Object invokeDynMethod(String name, DynObject context)
+				throws DynMethodException {
+
+			return null;
+		}
+
+		public Object invokeDynMethod(int code, DynObject context)
+				throws DynMethodException {
+
+			return null;
+		}
+
+		public void setDynValue(String name, Object value)
+				throws DynFieldNotFoundException {
+
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see org.gvsig.metadata.Metadata#getMetadataChildren()
+		 */
+		public Set getMetadataChildren() {
+
+			return null;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see org.gvsig.metadata.Metadata#getMetadataName()
+		 */
+		public String getMetadataName() {
+
+			return null;
+		}
+
+		public FeatureType getFeatureType(String featureTypeId)
+				throws DataException {
+
+			return null;
+		}
+
+		public DataQuery createQuery() {
+
+			return null;
+		}
+
+		public long getFeatureCount() throws DataException {
+
+			return 0;
+		}
+
+		public void accept(Visitor visitor, DataQuery dataQuery)
+				throws BaseException {
+		}
+
+		public void accept(Visitor visitor) throws BaseException {
+		}
+
+		public void createCache(String name,
+				DynObject parameters) throws DataException {
+			// Do nothing
+		}
+
+		public FeatureCache getCache() {
+			return null;
+		}
+
+		public void clear() {
+			// Nothing to do
+		}
+
+		public void export(DataServerExplorer explorer, String provider,
+				NewFeatureStoreParameters params) throws DataException {
+
+		}
+
+		public String getProviderName() {
+			return null;
+		}
+
+		public String getFullName() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+        public boolean isKnownEnvelope() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public boolean hasRetrievedFeaturesLimit() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public int getRetrievedFeaturesLimit() {
+            // TODO Auto-generated method stub
+            return 0;
+        }
+
+        public FeatureIndex createIndex(String indexTypeName,
+            FeatureType featureType, String attributeName, String indexName)
+            throws DataException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public FeatureIndex createIndex(String indexTypeName,
+            FeatureType featureType, String attributeName, String indexName,
+            Observer observer) throws DataException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Interval getInterval() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Collection getTimes() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Collection getTimes(Interval interval) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Object clone() throws CloneNotSupportedException {
+            // TODO Auto-generated method stub
+            return super.clone();
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.fmap.dal.feature.FeatureStore#commitChanges()
+         */
+        public void commitChanges() throws DataException {
+            // TODO Auto-generated method stub
+
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.fmap.dal.feature.FeatureStore#canCommitChanges()
+         */
+        public boolean canCommitChanges() throws DataException {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public Feature getFeature(DynObject dynobject) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+	}
+
+	//private static final FInterval interval0=new FInterval(0,2);
+	//private static final FInterval interval1=new FInterval(3,5);
+	//private static final FInterval interval2=new FInterval(6,2);
+	//private static final FInterval interval3=new FInterval(9,2);
+	// private static final Value interval4;
+	// private static final Value interval5;
+	// private static final Value interval6;
+	// private static final Value interval7;
+	// private static final Value interval8;
+	// private static final Value interval9;
+
+	Hashtable symTable;
+
+	private IClassifiedVectorLegend[] classifiedLegends;
+	private ISymbol[] symbols;
+	private Object[] sampleValues = new Object[] { v0, v1, v2, v3, };
+	private Feature[] features;
+
+	// private FInterval[] intervals = new FInterval[] {
+	// interval0,
+	// interval1,
+	// interval2,
+	// interval3,
+	// interval4,
+	// interval5,
+	// interval6,
+	// interval7,
+	// interval8,
+	// interval9,
+	// };
+
+	protected void doSetUp() throws Exception {
+
+		features = new Feature[4];
+
+//		//Initializes the geometries library
+//		DefaultGeometryLibrary lib = new DefaultGeometryLibrary();
+//		lib.initialize();
+//		lib.postInitialize();
+
+		// initialize test values
+		for (int i = 0; i < features.length; i++) {
+			// create the geometry associated to the feature
+			int size = 200;
+			Dimension d = new Dimension(size, size);
+			Rectangle aShape = new Rectangle(i * size, i * size, d.width,
+					d.height);
+			GeometryManager geomManager = GeometryLocator.getGeometryManager();
+			Curve curve = (Curve)geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
+			curve.setGeneralPath(new GeneralPathX(aShape.getPathIterator(null)));
+
+			/*
+			 * create a full-featured Feature with randomed values at its fields
+			 * to avoid testing over the same values each time
+			 */
+//			features[i] = new DefaultFeature(geom, featureValues[i], "[" + i
+//					+ "]");
+		}
+
+		// initialize the symbol subset for this test
+		symbols = TestISymbol.getNewSymbolInstances();
+
+		// initialize the legends for this test
+		ILegend[] allLegends = TestILegend.getNewLegendInstances();
+		ArrayList clegends = new ArrayList();
+		ArrayList intervalLegends = new ArrayList();
+		for (int i = 0; i < allLegends.length; i++) {
+			if (allLegends[i] instanceof AbstractIntervalLegend) {
+				intervalLegends.add(allLegends[i]);
+			} else if (allLegends[i] instanceof IClassifiedLegend) {
+				clegends.add(allLegends[i]);
+			}
+
+			if (allLegends[i] instanceof IClassifiedVectorLegend) {
+				IClassifiedVectorLegend cvl = (IClassifiedVectorLegend) allLegends[i];
+				cvl.setClassifyingFieldNames(new String[] { fieldNames[FIELDID] });
+//				cvl.setFeatureStore(mockDataSource);
+
+			}
+		}
+
+		this.classifiedLegends = (IClassifiedVectorLegend[]) clegends
+				.toArray(new IClassifiedVectorLegend[clegends.size()]);
+		this.intervalLegends =
+				(AbstractIntervalLegend[]) intervalLegends
+				.toArray(new AbstractIntervalLegend[intervalLegends.size()]);
+	}
+
+	/**
+	 * This method is used to add symbols to a legend.That is, it takes an array
+	 * of IClassifiedVectorialLegend which is empty andm, using a second array
+	 * of objects (values), the first one is filled.Also, a hash table is filled
+	 * too using the array of objects (it will be useful in some tests to check
+	 * that a symbol can be taken using a feature) .
+	 *
+	 * @param legend
+	 * @return
+	 */
+	private void fillClassifiedLegend(IClassifiedVectorLegend legend,
+			Object[] values) {
+		// initialize the hash table
+		symTable = new Hashtable();
+
+		// to add symbols to the legend and the hash table
+		for (int j = 0; j < values.length; j++) {
+
+			ISymbol sym = symbols[j % symbols.length];
+			legend.addSymbol(values[j], sym);
+			symTable.put(values[j], sym);
+		}
+	}
+
+	/**
+	 * This test ensures that when a legend is filled, the number of symbols
+	 * added is correct. To do it, is checked that the number of symbols of a
+	 * legend is the same as the length of the array of example values that we
+	 * have.
+	 *
+	 * @throws ReadDriverException
+	 */
+	public void testICLAdittion() throws ReadException {
+
+		// Fills the legend
+		for (int i = 0; i < classifiedLegends.length; i++) {
+			fillClassifiedLegend(classifiedLegends[i], sampleValues);
+		}
+
+		for (int i = 0; i < classifiedLegends.length; i++) {
+			assertEquals(classifiedLegends[i].getClass().getName()
+					+ " fails with the comparation of the number of symbols",
+					classifiedLegends[i].getSymbols().length,
+					sampleValues.length);
+		}
+
+	}
+
+	/**
+	 * This test ensures that the symbols that we have previously added to a
+	 * legend are accessible using its features.To do it, this test compares the
+	 * symbol taken from the legend with the symbol taken from the hashTable
+	 * (using the same feature).
+	 * @throws Exception
+	 */
+	public void testICLCheckValueSymbols() throws Exception {
+		// fills the legends
+		for (int i = 0; i < classifiedLegends.length; i++) {
+			fillClassifiedLegend(classifiedLegends[i], sampleValues);
+		}
+
+		for (int i = 0; i < classifiedLegends.length; i++) {
+			// For each feature
+			for (int j = 0; j < features.length; j++) {
+				Feature myFeature = features[i];
+				// takes the value of the field that identifies the feature
+				Object val = myFeature.get(FIELDID);
+				// the last value is used to access to the hash table to obtain
+				// a symbol
+				ISymbol tableSym = (ISymbol) symTable.get(val);
+
+				IClassifiedVectorLegend leg = classifiedLegends[i];
+				// takes the symbol from a legend using the feature
+				ISymbol legendSym = leg.getSymbolByFeature(myFeature);
+				// compares that both symbols are the same
+				assertEquals(legendSym.getClass().getName()
+						+ " fails with the comparation of the class symbols",
+						legendSym, tableSym);
+			}
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/TestIClassifiedLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/TestCartographicSupportForSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/TestCartographicSupportForSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/TestCartographicSupportForSymbol.java	(revision 42196)
@@ -0,0 +1,578 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering;
+
+import java.awt.Dimension;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.Random;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.AbstractSymbolTestCase;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.SimpleFillSymbolTest;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.SimpleLineSymbolTest;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.SimpleMarkerSymbolTest;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.utils.IPersistence;
+import org.gvsig.utils.NotExistInXMLEntity;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.XMLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class TestCartographicSupportForSymbol extends AbstractLibraryAutoInitTestCase {
+	private static GeometryManager geomManager;	
+	private static final Logger logger = LoggerFactory.getLogger(TestCartographicSupportForSymbol.class);
+	
+	/**
+	 * Geodesic vertex of the Micalet in Valencia (Spain) in <b>EPSG:23030</b>
+	 */
+	public static Point valenciaUTM30 = null;
+
+	/**
+	 * Geodesic vertex of the Micalet in Valencia (Spain) in <b>EPSG:4326</b>
+	 */
+	public static Point valenciaGeo = null;
+
+	public SymbolManager manager = MapContextLocator.getSymbolManager();
+	/**
+	 * Extent that covers the whole Comunitat Valenciana in  <b>EPSG:23030</b>
+	 */
+	public static final Rectangle2D TEST_UTM30_EXTENT = new Rectangle2D.Double();
+	{
+		TEST_UTM30_EXTENT.setFrameFromDiagonal(
+				4191037.369934333,
+				626674.7454557443,
+
+				4519266.460824658,
+				797903.2656794232
+		);
+	}
+	/**
+	 * Extent that covers the whole Comunitat Valenciana in  <b>EPSG:4326</b>
+	 */
+
+	public static final Rectangle2D TEST_GEO_EXTENT = new Rectangle2D.Double();
+	{
+		TEST_GEO_EXTENT.setFrameFromDiagonal(
+
+				-  (1 + (31/60) + (28.09/3600)),	// Western egde
+				37 + (50/60) + (48.05/3600),		// Southern edge
+
+				0 + (31/60) + (1.85/3600),		// Eastern edge
+				40 + (47/60) + (21.36/3600)		// Northern edge
+
+		);
+	}
+
+	public static final Rectangle2D TEST_EXTENT = new Rectangle2D.Double(
+			4191037.369934333,
+			626674.7454557443,
+
+			4519266.460824658 - 4191037.369934333,
+			797903.2656794232 -  626674.7454557443
+	);
+	private static ArrayList symbolsToTest; //<AbstractSymbolTestCase>
+	private ArrayList csSymbols; //<CartographicSupport>
+
+	/**
+	 * Acceptable pixel tolerance error. 1 pixel of error is accetable since it is probably due to
+	 * the java.awt.Graphics
+	 */
+	private static final double TOL = 1;
+
+	double zooms[] = new double[] {
+			1,
+			2,
+			1.2,
+			10,
+			0.5
+	};
+
+	protected void doSetUp() throws Exception {	
+		geomManager = GeometryLocator.getGeometryManager();
+		try {
+			valenciaUTM30 = geomManager.createPoint(725846.080, 4373022.720, SUBTYPES.GEOM2D);
+			valenciaGeo = geomManager.createPoint(- (0+ 22/60 +  27.919/3600), 39 + 28/60 + 35.4276/3600, SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}		
+	
+		addSymbolTest(new SimpleFillSymbolTest());
+		addSymbolTest(new SimpleLineSymbolTest());
+		addSymbolTest(new SimpleMarkerSymbolTest());
+
+		init();
+	}
+
+	protected void init() {
+
+		// take the symbols added to the TestISymbol test
+		ISymbol[] symbols = getNewSymbolInstances();
+
+		csSymbols = new ArrayList(); //<CartographicSupport>
+		for (int i = 0; i < symbols.length; i++) {
+			if (symbols[i] instanceof CartographicSupport) {
+				csSymbols.add((CartographicSupport) symbols[i]);
+			}
+		}
+	}
+
+	public static void addSymbolTest(AbstractSymbolTestCase symbolTestClass) {
+		if (symbolsToTest == null) symbolsToTest = new ArrayList(); //<AbstractSymbolTestCase>
+		symbolsToTest.add(symbolTestClass);
+	}
+
+	public static ISymbol[] getNewSymbolInstances() {
+		ISymbol[] symbols = new ISymbol[symbolsToTest.size()];
+		for (int i = 0; i < symbols.length; i++) {
+			symbols[i] = (ISymbol)((AbstractSymbolTestCase)symbolsToTest.get(i)).newInstance();
+		}
+		return symbols;
+	}
+
+
+	public void testSymbolUnitDefinition() {
+		for (int i = 0; i < csSymbols.size(); i++) {
+			CartographicSupport symbol = (CartographicSupport)csSymbols.get(i);
+
+			int aRandomUnit = new Random().nextInt(7);
+
+
+			symbol.setUnit(aRandomUnit);
+			XMLEntity xml=null;
+			try {
+				xml = ((IPersistence) symbol).getXMLEntity();
+			} catch (XMLException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			String name = symbol.getClass().getName().substring(
+					symbol.getClass().getName().lastIndexOf('.')+1,
+					symbol.getClass().getName().length());
+
+			try {
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not declare units correctly",
+						symbol.getUnit() == xml.getIntProperty("unit"));
+			} catch (NotExistInXMLEntity neiXMLEx) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare field attribute in its XMLEntity");
+			}
+			symbol.setUnit(5);
+			try {
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not apply changes to symbol",symbol.getUnit()== 5);
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not declare units correctly",
+						5 == ((IPersistence) symbol).getXMLEntity().getIntProperty("unit"));
+			} catch (NotExistInXMLEntity neiXMLEx) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare field attribute in its XMLEntity");
+			} catch (XMLException e) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare field attribute in its XMLEntity");
+			}
+
+//			xml.putProperty("unit", 3);
+//			ISymbol ts = SymbologyFactory.createSymbolFromXML(xml, xml.getStringProperty("desc"));
+//			assertTrue("The application of the UNIT value to the XMLEntity didn't have any effect ("+name+")", ((CartographicSupport) ts).getUnit() == 3);
+		}
+
+	}
+
+
+	public void testSymbolReferenceSystemDefinition() {
+		for (int i = 0; i < csSymbols.size(); i++) {
+			CartographicSupport symbol = (CartographicSupport)csSymbols.get(i);
+			XMLEntity xml=null;
+			try {
+				xml = ((IPersistence) symbol).getXMLEntity();
+			} catch (XMLException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			String name = symbol.getClass().getName().substring(
+					symbol.getClass().getName().lastIndexOf('.')+1,
+					symbol.getClass().getName().length());
+			try {
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not declare units correctly",
+						symbol.getReferenceSystem() == xml.getIntProperty("referenceSystem"));
+			} catch (NotExistInXMLEntity neiXMLEx) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare referenceSystem field attribute in its XMLEntity");
+			}
+			symbol.setReferenceSystem(CartographicSupport.PAPER);
+			try {
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not apply changes to symbol",symbol.getReferenceSystem()== CartographicSupport.PAPER);
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not declare referenceSystem correctly",
+						CartographicSupport.PAPER == ((IPersistence) symbol).getXMLEntity().getIntProperty("referenceSystem"));
+			} catch (NotExistInXMLEntity neiXMLEx) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare referenceSystem field attribute in its XMLEntity ("+name+")");
+			} catch (XMLException e) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare referenceSystem field attribute in its XMLEntity ("+name+")");
+			}
+
+			symbol.setReferenceSystem(CartographicSupport.WORLD);
+			try {
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not apply changes to symbol",symbol.getReferenceSystem()== CartographicSupport.WORLD);
+				assertTrue( ((ISymbol) symbol).getClass().getName()+" does not declare referenceSystem correctly",
+						CartographicSupport.WORLD == ((IPersistence) symbol).getXMLEntity().getIntProperty("referenceSystem"));
+			} catch (NotExistInXMLEntity neiXMLEx) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare referenceSystem field attribute in its XMLEntity");
+			} catch (XMLException e) {
+				fail(((ISymbol) symbol).getClass().getName()+ " does not declare referenceSystem field attribute in its XMLEntity");
+			}
+
+//			xml.putProperty("referenceSystem", CartographicSupport.PAPER);
+//			ISymbol ts = SymbologyFactory.createSymbolFromXML(xml, xml.getStringProperty("desc"));
+//			assertTrue("The application of the REFERENCE SYSTEM value to the XMLEntity didn't have any effect ("+name+")", ((CartographicSupport) ts).getReferenceSystem() == CartographicSupport.PAPER);
+		}
+	}
+
+
+	public void testDegreesUnits_MapReferenceSystem() throws Exception {
+		for (int j = 0; j < csSymbols.size(); j++) {
+			CartographicSupport symbol = (CartographicSupport)csSymbols.get(j);
+
+			MapContext mc = AllTests.newMapContext(AllTests.TEST_DEFAULT_PROJECTION);
+			ViewPort viewPort = mc.getViewPort();
+
+			int unit = 8;
+			Dimension dim = new Dimension(600, 600);
+			viewPort.setImageSize(dim);
+
+
+			/*
+			 * will test with several extents but in the same map image size, so
+			 * the scale issue is exercised as well.
+			 */
+			for (int i = 0; i < zooms.length; i++) {
+				Envelope extent = geomManager.createEnvelope(-30, -30,dim.getWidth()/zooms[i]-30, dim.getHeight()/zooms[i]-30, SUBTYPES.GEOM2D);
+
+				viewPort.setMapUnits(unit);
+				viewPort.setEnvelope(extent);
+
+
+				String name = ((IPersistence) symbol).getClassName().substring(
+						((IPersistence) symbol).getClassName().lastIndexOf('.')+1,
+						((IPersistence) symbol).getClassName().length());
+
+				CartographicSupport csSym = (CartographicSupport) symbol;
+				csSym.setReferenceSystem(CartographicSupport.WORLD);
+				double size = 30;
+
+				csSym.setUnit(unit);
+
+
+
+				if (symbol instanceof IMarkerSymbol) {
+
+					IMarkerSymbol markerSym = (IMarkerSymbol) symbol;
+					markerSym.setSize(size);
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = markerSym.getSize();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+markerSym.getSize()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i],  Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+				if (symbol instanceof ILineSymbol) {
+
+					ILineSymbol lineSym = (ILineSymbol) symbol;
+					lineSym.setLineWidth(size);
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = lineSym.getLineStyle().getLineWidth();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+mySize+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i], Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+				if (symbol instanceof IFillSymbol) {
+					// this tests if symbol applies the cartographic support to its
+					// outline, since is the only thing that may be resized
+					IFillSymbol fillSym = (IFillSymbol) symbol;
+					if (fillSym.getOutline() == null) {
+						fillSym.setOutline((ILineSymbol) manager.createSymbol(ILineSymbol.SYMBOL_NAME));
+					}
+
+					fillSym.getOutline().setLineWidth(size);
+
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = fillSym.getOutline().getLineStyle().getLineWidth();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+fillSym.getOutline().getLineWidth()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i], Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+			}
+		}
+	}
+
+
+	public void testKilometersUnits_MapReferenceSystem() throws Exception {
+		for (int j = 0; j < csSymbols.size(); j++) {
+			CartographicSupport symbol = (CartographicSupport)csSymbols.get(j);
+			MapContext mc = AllTests.newMapContext(AllTests.TEST_DEFAULT_MERCATOR_PROJECTION);
+			ViewPort viewPort = mc.getViewPort();
+
+			int unit = 0;
+			Dimension dim = new Dimension(60, 60);
+			viewPort.setImageSize(dim);
+
+
+			/*
+			 * will test with several extents but in the same map image size, so
+			 * the scale issue is exercised as well.
+			 */
+			for (int i = 0; i < zooms.length; i++) {
+				Envelope extent = geomManager.createEnvelope(-30, -30, dim.getWidth()/zooms[i]-30, dim.getHeight()/zooms[i]-30, SUBTYPES.GEOM2D);
+
+				viewPort.setMapUnits(unit);
+				viewPort.setEnvelope(extent);
+
+
+				String name = ((IPersistence) symbol).getClassName().substring(
+						((IPersistence) symbol).getClassName().lastIndexOf('.')+1,
+						((IPersistence) symbol).getClassName().length());
+
+				CartographicSupport csSym = (CartographicSupport) symbol;
+				csSym.setReferenceSystem(CartographicSupport.WORLD);
+				double size = 30;
+
+				csSym.setUnit(unit);
+
+
+
+
+				if (symbol instanceof IMarkerSymbol) {
+
+					IMarkerSymbol markerSym = (IMarkerSymbol) symbol;
+					markerSym.setSize(size);
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = markerSym.getSize();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+markerSym.getSize()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i],  Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+				if (symbol instanceof ILineSymbol) {
+
+					ILineSymbol lineSym = (ILineSymbol) symbol;
+					lineSym.setLineWidth(size);
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D								
+							)
+					);
+					double mySize = lineSym.getLineStyle().getLineWidth();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+lineSym.getLineWidth()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i], Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+				if (symbol instanceof IFillSymbol) {
+					// this tests if symbol applies the cartographic support to its
+					// outline, since is the only thing that may be resized
+					IFillSymbol fillSym = (IFillSymbol) symbol;
+					if (fillSym.getOutline() == null) {
+						fillSym.setOutline((ILineSymbol) manager.createSymbol(
+										ILineSymbol.SYMBOL_NAME));
+					}
+
+					fillSym.getOutline().setLineWidth(size);
+
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = fillSym.getOutline().getLineStyle().getLineWidth();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+fillSym.getOutline().getLineWidth()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i], Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+			}
+		}
+
+	}
+
+	public void testMapInKilometersSymbolInMeters_MapReferenceSystem() throws Exception {
+		for (int j = 0; j < csSymbols.size(); j++) {
+			CartographicSupport symbol = (CartographicSupport)csSymbols.get(j);
+
+			MapContext mc = AllTests.newMapContext(AllTests.TEST_DEFAULT_MERCATOR_PROJECTION);
+			ViewPort viewPort = mc.getViewPort();
+
+			int mapUnit = 0;
+			int symbolUnit = 1;
+			Dimension dim = new Dimension(60, 60);
+			viewPort.setImageSize(dim);
+
+
+			/*
+			 * will test with several extents but in the same map image size, so
+			 * the scale issue is exercised as well.
+			 */
+			for (int i = 0; i < zooms.length; i++) {
+				Envelope extent = geomManager.createEnvelope(-30, -30, dim.getWidth()/zooms[i]-30, dim.getHeight()/zooms[i]-30, SUBTYPES.GEOM2D);
+				viewPort.setMapUnits(mapUnit);
+				viewPort.setEnvelope(extent);
+				double size = 30;
+
+
+				String name = ((IPersistence) symbol).getClassName().substring(
+						((IPersistence) symbol).getClassName().lastIndexOf('.')+1,
+						((IPersistence) symbol).getClassName().length());
+
+
+				CartographicSupport csSym = (CartographicSupport) symbol;
+				csSym.setReferenceSystem(CartographicSupport.WORLD);
+
+				csSym.setUnit(symbolUnit);
+
+				if (symbol instanceof IMarkerSymbol) {
+
+					IMarkerSymbol markerSym = (IMarkerSymbol) symbol;
+					markerSym.setSize(size*MapContext.CHANGEM[mapUnit]); // 30m*1000 = 30 km
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = markerSym.getSize();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+markerSym.getSize()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i],  Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+				if (symbol instanceof ILineSymbol) {
+
+					ILineSymbol lineSym = (ILineSymbol) symbol;
+					lineSym.setLineWidth(size*MapContext.CHANGEM[mapUnit]); // 30m*1000 = 30 km
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = lineSym.getLineStyle().getLineWidth();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+lineSym.getLineWidth()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i], Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+				if (symbol instanceof IFillSymbol) {
+					// this tests if symbol applies the cartographic support to its
+					// outline, since is the only thing that may be resized
+					IFillSymbol fillSym = (IFillSymbol) symbol;
+					if (fillSym.getOutline() == null) {
+						fillSym.setOutline((ILineSymbol) manager.createSymbol(
+										ILineSymbol.SYMBOL_NAME));
+					}
+
+					fillSym.getOutline().setLineWidth(size*MapContext.CHANGEM[mapUnit]);
+
+					csSym.toCartographicSize(
+							viewPort,
+							viewPort.getDPI(),
+							geomManager.createPoint(
+									viewPort.getAdjustedExtent().getCenter(0),
+									viewPort.getAdjustedExtent().getCenter(1),
+									SUBTYPES.GEOM2D
+							)
+					);
+					double mySize = fillSym.getOutline().getLineStyle().getLineWidth();
+					assertTrue("The Symbol '"+name+"' failed computing cartographic size. " +
+							"It returned "+fillSym.getOutline().getLineWidth()+" when expecting "+
+							size+"*"+zooms[i]+"="+size*zooms[i], Math.abs(mySize-size*zooms[i]) <= TOL );
+				}
+
+			}
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/TestCartographicSupportForSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestMultiLayerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestMultiLayerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestMultiLayerSymbol.java	(revision 42196)
@@ -0,0 +1,405 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.MultiLayerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.MultiLayerLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.SimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.MultiLayerMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class TestMultiLayerSymbol extends TestCase {
+	ISymbol[] symbols;
+
+	public void setUp() {
+		symbols = TestISymbol.getNewSymbolInstances();
+	}
+
+	public void testLayerTypeAdditionFor_MARKERS() {
+		MultiLayerMarkerSymbol multiLayer = new MultiLayerMarkerSymbol();
+		for (int i = 0; i < symbols.length; i++) {
+			if (symbols[i] instanceof IMarkerSymbol) {
+				try {
+				IMarkerSymbol marker = (IMarkerSymbol) symbols[i];
+				multiLayer.addLayer(marker);
+				} catch (Exception e) {
+					fail("MultiLayerMarkerSymbol failed adding a '"+symbols[i].getClass().getName());
+				}
+			} else {
+				try {
+					multiLayer.addLayer(symbols[i]);
+					fail("MultiLayerMarkerSymbol should not accept '"+symbols[i].getClass().getName()+"' symbols");
+				} catch (ClassCastException ccEx){
+					// this is right
+				}
+			}
+		}
+	}
+
+	public void testLayerTypeAdditionFor_LINES() {
+		MultiLayerLineSymbol multiLayer = new MultiLayerLineSymbol();
+		for (int i = 0; i < symbols.length; i++) {
+			if (symbols[i] instanceof ILineSymbol) {
+				try {
+				ILineSymbol line = (ILineSymbol) symbols[i];
+				multiLayer.addLayer(line);
+				} catch (Exception e) {
+					fail("MultiLayerLineSymbol failed adding a '"+symbols[i].getClass().getName());
+				}
+			} else {
+				try {
+					multiLayer.addLayer(symbols[i]);
+					fail("MultiLayerLineSymbol should not accept '"+symbols[i].getClass().getName()+"' symbols");
+				} catch (ClassCastException ccEx){
+					// this is right
+				}
+			}
+		}
+	}
+
+	public void testLayerTypeAdditionFor_FILL() {
+		MultiLayerFillSymbol multiLayer = new MultiLayerFillSymbol();
+		for (int i = 0; i < symbols.length; i++) {
+			if (symbols[i] instanceof IFillSymbol) {
+				try {
+					IFillSymbol fill = (IFillSymbol) symbols[i];
+				multiLayer.addLayer(fill);
+				} catch (Exception e) {
+					fail("MultiLayerLineSymbol failed adding a '"+symbols[i].getClass().getName());
+				}
+			} else {
+				try {
+					multiLayer.addLayer(symbols[i]);
+					fail("MultiLayerLineSymbol should not accept '"+symbols[i].getClass().getName()+"' symbols");
+				} catch (ClassCastException ccEx){
+					// this is right
+				}
+			}
+		}
+	}
+
+	public void testLayerAdditionPositionConsistencyMultiLayer_MARKER_Symbol() {
+		MultiLayerMarkerSymbol multiLayer = new MultiLayerMarkerSymbol();
+		IMarkerSymbol sym1 = new SimpleMarkerSymbol();
+		IMarkerSymbol sym2 = new SimpleMarkerSymbol();
+		sym1.setDescription("sym1");
+		sym2.setDescription("sym2");
+		try {
+			multiLayer.addLayer(sym1, 0);
+		} catch (IndexOutOfBoundsException ioobEx) {
+			fail("MultiLayer should always accept adding at index 0, even when it is empty");
+		}
+
+		try {
+			multiLayer.addLayer(sym2, 3);
+			fail("MultiLayer cannot accept adding at an index larger than the amount of layers already contained");
+		} catch (IndexOutOfBoundsException ioobEx){
+			// this is right
+		}
+
+		try {
+			multiLayer.addLayer(sym1, multiLayer.getLayerCount());
+		} catch (IndexOutOfBoundsException ioobEx) {
+			fail("MultiLayer should accept adding at index less or equal to the layer count");
+		}
+
+		assertTrue("layer returned does not correspond with the index provided", multiLayer.getLayer(1).getDescription().equals("sym2"));
+		assertTrue("layer returned does not correspond with the index provided", multiLayer.getLayer(0).getDescription().equals("sym1"));
+	}
+
+	public void testLayerAdditionPositionConsistencyMultiLayer_LINE_Symbol() {
+		MultiLayerLineSymbol multiLayer = new MultiLayerLineSymbol();
+		ILineSymbol layer1 = new SimpleLineSymbol();
+		ILineSymbol layer2 = new SimpleLineSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+
+		try {
+			multiLayer.addLayer(layer1, 0);
+		} catch (IndexOutOfBoundsException ioobEx) {
+			fail("MultiLayer should always accept adding at index 0, even when it is empty");
+		}
+
+		try {
+			multiLayer.addLayer(layer2, 3);
+			fail("MultiLayer cannot accept adding at an index larger than the amount of layers already contained");
+		} catch (IndexOutOfBoundsException ioobEx){
+			// this is right
+		}
+
+		try {
+			multiLayer.addLayer(layer2, multiLayer.getLayerCount());
+		} catch (IndexOutOfBoundsException ioobEx) {
+			fail("MultiLayer should accept adding at index less or equal to the layer count");
+		}
+
+		assertTrue("layer returned does not correspond with the index provided", multiLayer.getLayer(1).getDescription().equals("layer2"));
+		assertTrue("layer returned does not correspond with the index provided", multiLayer.getLayer(0).getDescription().equals("layer1"));
+	}
+
+	public void testLayerAdditionPositionConsistencyMultiLayer_FILL_Symbol() {
+		MultiLayerFillSymbol multiLayer = new MultiLayerFillSymbol();
+		IFillSymbol layer1 = new SimpleFillSymbol();
+		IFillSymbol layer2 = new SimpleFillSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+
+		try {
+			multiLayer.addLayer(layer1, 0);
+		} catch (IndexOutOfBoundsException ioobEx) {
+			fail("MultiLayer should always accept adding at index 0, even when it is empty");
+		}
+
+		try {
+			multiLayer.addLayer(layer2, 3);
+			fail("MultiLayer cannot accept adding at an index larger than the amount of layers already contained");
+		} catch (IndexOutOfBoundsException ioobEx){
+			// this is right
+		}
+
+		try {
+			multiLayer.addLayer(layer2, multiLayer.getLayerCount());
+		} catch (IndexOutOfBoundsException ioobEx) {
+			fail("MultiLayer should accept adding at index less or equal to the layer count");
+		}
+
+		assertTrue("layer returned does not correspond with the index provided", multiLayer.getLayer(1).getDescription().equals("layer2"));
+		assertTrue("layer returned does not correspond with the index provided", multiLayer.getLayer(0).getDescription().equals("layer1"));
+	}
+
+	public void testMultiLayer_MARKER_SymbolLayerSwapping() {
+		MultiLayerMarkerSymbol multiLayer = new MultiLayerMarkerSymbol();
+		IMarkerSymbol layer1 = new SimpleMarkerSymbol();
+		IMarkerSymbol layer2 = new SimpleMarkerSymbol();
+		IMarkerSymbol layer3 = new SimpleMarkerSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+		layer3.setDescription("layer3");
+
+		multiLayer.addLayer(layer1);
+		multiLayer.addLayer(layer2);
+		multiLayer.addLayer(layer3);
+
+		multiLayer.swapLayers(1,0);
+		assertTrue("failed swapping layers 0 and 1",
+				   multiLayer.getLayer(0).getDescription().equals("layer2")
+				&& multiLayer.getLayer(1).getDescription().equals("layer1"));
+
+		multiLayer.swapLayers(1,2);
+		assertTrue("failed swapping layers 0 and 1",
+				   multiLayer.getLayer(2).getDescription().equals("layer1")
+				&& multiLayer.getLayer(1).getDescription().equals("layer3"));
+
+		Random random = new Random(System.currentTimeMillis());
+		int numTries = 50;
+		for (int i = 0; i < numTries; i++) {
+			int n = random.nextInt(multiLayer.getLayerCount());
+			int m = random.nextInt(multiLayer.getLayerCount());
+
+			ISymbol aLayer = multiLayer.getLayer(n);
+			multiLayer.swapLayers(n, m);
+			ISymbol otherLayer = multiLayer.getLayer(m);
+			assertEquals("failed swapping layers "+n+" and "+m, aLayer, otherLayer);
+		}
+
+	}
+
+	public void testMultiLayer_LINE_SymbolLayerSwapping() {
+		MultiLayerLineSymbol multiLayer = new MultiLayerLineSymbol();
+		ILineSymbol layer1 = new SimpleLineSymbol();
+		ILineSymbol layer2 = new SimpleLineSymbol();
+		ILineSymbol layer3 = new SimpleLineSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+		layer3.setDescription("layer3");
+
+		multiLayer.addLayer(layer1);
+		multiLayer.addLayer(layer2);
+		multiLayer.addLayer(layer3);
+
+		multiLayer.swapLayers(1,0);
+		assertTrue("failed swapping layers 0 and 1",
+				   multiLayer.getLayer(0).getDescription().equals("layer2")
+				&& multiLayer.getLayer(1).getDescription().equals("layer1"));
+
+		multiLayer.swapLayers(1,2);
+		assertTrue("failed swapping layers 0 and 1",
+				   multiLayer.getLayer(2).getDescription().equals("layer1")
+				&& multiLayer.getLayer(1).getDescription().equals("layer3"));
+
+		Random random = new Random(System.currentTimeMillis());
+		int numTries = 50;
+		for (int i = 0; i < numTries; i++) {
+			int n = random.nextInt(multiLayer.getLayerCount());
+			int m = random.nextInt(multiLayer.getLayerCount());
+
+			ISymbol aLayer = multiLayer.getLayer(n);
+			multiLayer.swapLayers(n, m);
+			ISymbol otherLayer = multiLayer.getLayer(m);
+			assertEquals("failed swapping layers "+n+" and "+m, aLayer, otherLayer);
+		}
+
+	}
+
+	public void testMultiLayer_FILL_SymbolLayerSwapping() {
+		MultiLayerFillSymbol multiLayer = new MultiLayerFillSymbol();
+		IFillSymbol layer1 = new SimpleFillSymbol();
+		IFillSymbol layer2 = new SimpleFillSymbol();
+		IFillSymbol layer3 = new SimpleFillSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+		layer3.setDescription("layer3");
+
+		multiLayer.addLayer(layer1);
+		multiLayer.addLayer(layer2);
+		multiLayer.addLayer(layer3);
+
+		multiLayer.swapLayers(1,0);
+		assertTrue("failed swapping layers 0 and 1",
+				   multiLayer.getLayer(0).getDescription().equals("layer2")
+				&& multiLayer.getLayer(1).getDescription().equals("layer1"));
+
+		multiLayer.swapLayers(1,2);
+		assertTrue("failed swapping layers 0 and 1",
+				   multiLayer.getLayer(2).getDescription().equals("layer1")
+				&& multiLayer.getLayer(1).getDescription().equals("layer3"));
+
+		Random random = new Random(System.currentTimeMillis());
+		int numTries = 50;
+		for (int i = 0; i < numTries; i++) {
+			int n = random.nextInt(multiLayer.getLayerCount());
+			int m = random.nextInt(multiLayer.getLayerCount());
+
+			ISymbol aLayer = multiLayer.getLayer(n);
+			multiLayer.swapLayers(n, m);
+			ISymbol otherLayer = multiLayer.getLayer(m);
+			assertEquals("failed swapping layers "+n+" and "+m, aLayer, otherLayer);
+		}
+	}
+
+	public void testMultiLayer_MARKER_IndexOutOfBounds() {
+		MultiLayerMarkerSymbol multiLayer = new MultiLayerMarkerSymbol();
+		IMarkerSymbol layer1 = new SimpleMarkerSymbol();
+		IMarkerSymbol layer2 = new SimpleMarkerSymbol();
+		IMarkerSymbol layer3 = new SimpleMarkerSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+		layer3.setDescription("layer3");
+
+		multiLayer.addLayer(layer1);
+		multiLayer.addLayer(layer2);
+		multiLayer.addLayer(layer3);
+
+		for (int i = -4; i < multiLayer.getLayerCount()+4; i++) {
+			if (i<0 || i>=multiLayer.getLayerCount()) {
+				try {
+					multiLayer.getLayer(i);
+					fail("MultiLayerMarkerSymbol should throw an IndexOutOfBoundsException when accessing a layer at index "+i+", because layer count is "+multiLayer.getLayerCount());
+				} catch (IndexOutOfBoundsException ioobEx) {
+					// this is correct;
+				}
+			} else {
+				try {
+					multiLayer.getLayer(i);
+				} catch (IndexOutOfBoundsException ioobEx) {
+					fail("MultiLayerMarkerSymbol threw an IndexOutOfBoundsException, but it has "+multiLayer.getLayerCount()+" layers");
+				}
+			}
+		}
+	}
+
+	public void testMultiLayer_LINE_IndexOutOfBounds() {
+		MultiLayerLineSymbol multiLayer = new MultiLayerLineSymbol();
+		ILineSymbol layer1 = new SimpleLineSymbol();
+		ILineSymbol layer2 = new SimpleLineSymbol();
+		ILineSymbol layer3 = new SimpleLineSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+		layer3.setDescription("layer3");
+
+		multiLayer.addLayer(layer1);
+		multiLayer.addLayer(layer2);
+		multiLayer.addLayer(layer3);
+
+		for (int i = -4; i < multiLayer.getLayerCount()+4; i++) {
+			if (i<0 || i>=multiLayer.getLayerCount()) {
+				try {
+					multiLayer.getLayer(i);
+					fail("MultiLayerLineSymbol should throw an IndexOutOfBoundsException when accessing a layer at index "+i+", because layer count is "+multiLayer.getLayerCount());
+				} catch (IndexOutOfBoundsException ioobEx) {
+					// this is correct;
+				}
+			} else {
+				try {
+					multiLayer.getLayer(i);
+				} catch (IndexOutOfBoundsException ioobEx) {
+					fail("MultiLayerLineSymbol threw an IndexOutOfBoundsException, but it has "+multiLayer.getLayerCount()+" layers");
+				}
+			}
+		}
+	}
+
+	public void testMultiLayer_FILL_IndexOutOfBounds() {
+		MultiLayerFillSymbol multiLayer = new MultiLayerFillSymbol();
+		IFillSymbol layer1 = new SimpleFillSymbol();
+		IFillSymbol layer2 = new SimpleFillSymbol();
+		IFillSymbol layer3 = new SimpleFillSymbol();
+		layer1.setDescription("layer1");
+		layer2.setDescription("layer2");
+		layer3.setDescription("layer3");
+
+		multiLayer.addLayer(layer1);
+		multiLayer.addLayer(layer2);
+		multiLayer.addLayer(layer3);
+		for (int i = -4; i < multiLayer.getLayerCount()+4; i++) {
+			if (i<0 || i>=multiLayer.getLayerCount()) {
+				try {
+					multiLayer.getLayer(i);
+					fail("MultiLayerFillSymbol should throw an IndexOutOfBoundsException when accessing a layer at index "+i+", because layer count is "+multiLayer.getLayerCount());
+				} catch (IndexOutOfBoundsException ioobEx) {
+					// this is correct;
+				}
+			} else {
+				try {
+					multiLayer.getLayer(i);
+				} catch (IndexOutOfBoundsException ioobEx) {
+					fail("MultiLayerFillSymbol threw an IndexOutOfBoundsException, but it has "+multiLayer.getLayerCount()+" layers");
+				}
+			}
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestMultiLayerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestISymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestISymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestISymbol.java	(revision 42196)
@@ -0,0 +1,365 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import java.awt.Color;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Random;
+
+import junit.framework.TestSuite;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * Integration test to ensure that the symbols follow the rules that follow the
+ * managing of them by the application.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+
+
+public class TestISymbol extends AbstractLibraryAutoInitTestCase {
+    private static ArrayList classesToTest;//<AbstractSymbolTestCase>
+    transient private ISymbol[] symbols;
+
+    public static TestSuite suite() {
+    	TestSuite suite = new TestSuite("Integration test for com.iver.cit.gvsig.fmap.core.ISymbol");
+        suite.addTestSuite(TestISymbol.class);
+        suite.addTestSuite(TestDrawMarkers.class);
+        suite.addTestSuite(TestDrawLines.class);
+        suite.addTestSuite(TestDrawFills.class);
+
+        return suite;
+    }
+
+    protected void doSetUp() throws Exception {
+    	addSymbols();
+    	symbols = getNewSymbolInstances();
+    }
+    
+    public static void addSymbols() {    	
+    	addSymbolTest(new SimpleFillSymbolTest());
+    	addSymbolTest(new SimpleLineSymbolTest());
+    	addSymbolTest(new SimpleMarkerSymbolTest());
+    	addSymbolTest(new SimpleTextSymbolTest());
+    }
+    
+
+    public static void addSymbolTest(AbstractSymbolTestCase symbolTestClass) {
+    	if (classesToTest == null) classesToTest = new ArrayList(); //<AbstractSymbolTestCase>
+
+    	classesToTest.add(symbolTestClass);
+    }
+
+    public static ISymbol[] getNewSymbolInstances() {
+        ISymbol[] symbols = new ISymbol[classesToTest.size()];
+        for (int i = 0; i < symbols.length; i++) {
+        	symbols[i] = (ISymbol)((AbstractSymbolTestCase)classesToTest.get(i)).newInstance();
+        }
+        return symbols;
+    }
+
+    public void testPointSuitability() throws InstantiationException, IllegalAccessException, CreateGeometryException {
+    	GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    	Point point = (Point)geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+    	final Geometry dummyPointGeom = point;
+        for (int i = 0; i < symbols.length; i++) {
+            // text symbols are suitable for everything
+            if (symbols[i] instanceof ITextSymbol) {
+                assertTrue(symbols[i].getClass().getName()+" should be suitable for "+dummyPointGeom,
+                        symbols[i].isSuitableFor(dummyPointGeom));
+            } else
+
+            // marker symbols are suitable for points
+            if (symbols[i] instanceof IMarkerSymbol) {
+                assertTrue(symbols[i].getClass().getName()+" should be suitable for "+dummyPointGeom,
+                        symbols[i].isSuitableFor(dummyPointGeom));
+            } else {
+                assertFalse(symbols[i].getClass().getName()+" should NOT be suitable for "+dummyPointGeom,
+                        symbols[i].isSuitableFor(dummyPointGeom));
+            }
+        }
+    }
+
+    public void testLineSuitability() throws InstantiationException, IllegalAccessException, CreateGeometryException {
+    	GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    	Curve curve = (Curve)geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
+		curve.setGeneralPath(new GeneralPathX());
+    	final Geometry dummyLineGeom = curve;
+        for (int i = 0; i < symbols.length; i++) {
+            // text symbols are suitable for everything
+            if (symbols[i] instanceof ITextSymbol) {
+                assertTrue(symbols[i].getClass().getName()+" should be suitable for "+dummyLineGeom,
+                        symbols[i].isSuitableFor(dummyLineGeom));
+            } else
+
+            // line symbols are suitable for line
+            if (symbols[i] instanceof ILineSymbol) {
+                assertTrue(symbols[i].getClass().getName()+" should be suitable for "+dummyLineGeom,
+                        symbols[i].isSuitableFor(dummyLineGeom));
+            } else {
+                assertFalse(symbols[i].getClass().getName()+" should NOT be suitable for "+dummyLineGeom,
+                        symbols[i].isSuitableFor(dummyLineGeom));
+            }
+        }
+    }
+
+    public void testPolygonSuitability() throws InstantiationException, IllegalAccessException, CreateGeometryException {
+    	GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    	Surface surface = (Surface)geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+    	surface.setGeneralPath(new GeneralPathX());
+        final Geometry dummyPolygonGeom = surface;
+        for (int i = 0; i < symbols.length; i++) {
+
+            // text symbols are suitable for everything
+            if (symbols[i] instanceof ITextSymbol) {
+                assertTrue(symbols[i].getClass().getName()+" should be suitable for "+dummyPolygonGeom,
+                        symbols[i].isSuitableFor(dummyPolygonGeom));
+            } else
+
+            // fill symbols are suitable for polygons
+            if (symbols[i] instanceof IFillSymbol) {
+                assertTrue(symbols[i].getClass().getName()+" should be suitable for "+dummyPolygonGeom,
+                        symbols[i].isSuitableFor(dummyPolygonGeom));
+            } else {
+                assertFalse(symbols[i].getClass().getName()+" should NOT be suitable for "+dummyPolygonGeom,
+                        symbols[i].isSuitableFor(dummyPolygonGeom));
+            }
+        }
+    }
+
+    /**
+     * tests whether the symbols were correctly configured to work with
+     * different kinds of shapes.
+     */
+    public void testGeneralSuitability() {
+
+        for (int i = 0; i < symbols.length; i++) {
+            // text symbols are suitable for everything
+            if (symbols[i] instanceof ITextSymbol) {
+                assertTrue(symbols[i].getClass().getName()+" should be suitable for "+null,
+                        symbols[i].isSuitableFor(null));
+            } else {
+                try {
+                    symbols[i].isSuitableFor(null);
+                    fail("Exception was not thrown");
+
+                } catch (NullPointerException npEx) {
+                    // this is correct!
+                }
+            }
+        }
+    }
+
+    /**
+     * ensures that symbols defined which can of FShape is the symbol
+     */
+    public void testSymbolTypeDefinition() {
+        for (int i = 0; i < symbols.length; i++) {
+            assertFalse("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"'",
+                        symbols[i].getSymbolType() == 0);
+
+        }
+    }
+
+    /**
+     * ensures that any symbol that is suitable for markers declares its type
+     * as FShape.POINT or FShape.MULTI
+     *
+     */
+    public void testMarkerSymbolTypeDefinition() {
+        for (int i = 0; i < symbols.length; i++) {
+            if (symbols[i] instanceof IMarkerSymbol) {
+                assertTrue("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"'",
+                        symbols[i].getSymbolType() == Geometry.TYPES.POINT
+                        || symbols[i].getSymbolType() == Geometry.TYPES.GEOMETRY);
+            }
+        }
+    }
+
+    /**
+     * ensures that any symbol that is suitable for lines declares its type
+     * as FShape.LINE or FShape.MULTI
+     *
+     */
+    public void testLineSymbolTypeDefinition() {
+        for (int i = 0; i < symbols.length; i++) {
+            if (symbols[i] instanceof ILineSymbol) {
+                assertTrue("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"'",
+                        symbols[i].getSymbolType() == Geometry.TYPES.CURVE
+                        || symbols[i].getSymbolType() == Geometry.TYPES.GEOMETRY);
+            }
+        }
+    }
+
+    /**
+     * ensures that any symbol that is suitable for fills declares its type
+     * as POLYGON or Geometry.TYPES.GEOMETRY
+     *
+     */
+    public void testFillSymbolTypeDefinition() {
+        for (int i = 0; i < symbols.length; i++) {
+            if (symbols[i] instanceof IFillSymbol) {
+                assertTrue("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"'",
+                        symbols[i].getSymbolType() == Geometry.TYPES.SURFACE
+                        || symbols[i].getSymbolType() == Geometry.TYPES.GEOMETRY);
+            }
+        }
+    }
+
+//    /**
+//     * ensures that any symbol has a description in its persistence
+//     * (very important)
+//     */
+//    public void testDescription() {
+//        for (int i = 0; i < symbols.length; i++) {
+//            try {
+//				assertTrue(symbols[i].getClass().getName() + " does not declare a description in its XMLEntity",
+//				        symbols[i].getXMLEntity().contains("desc"));
+//			} catch (XMLException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			}
+//        }
+//    }
+
+//    /**
+//     * ensures that any symbol has an isShapeVisible field in its persistence
+//     * (very important)
+//     */
+//    public void testIsShapeVisible() {
+//        for (int i = 0; i < symbols.length; i++) {
+//            try {
+//				assertTrue(symbols[i].getClass().getName() + " does not declare the isShapeVisible field in its XMLEntity",
+//				        symbols[i].getXMLEntity().contains("isShapeVisible"));
+//			} catch (XMLException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			}
+//        }
+//    }
+
+    /**
+     * ensures that the symbol is self-defining
+     * @throws Exception 
+     */
+    public void testSymbolSelfDefinition() throws Exception {
+        for (int i = 0; i < symbols.length; i++) {
+            final ISymbol theSymbol = symbols[i];
+            ISymbol cloneSymbol= (ISymbol) theSymbol.clone();
+				//cloneSymbol = SymbologyFactory.createSymbolFromXML(theSymbol.getXMLEntity(), null);
+            
+            assertTrue(theSymbol.getClass().getName()+ " wrong class name declaration in getXMLEntity() ",
+                    cloneSymbol.getClass().equals(theSymbol.getClass()));
+            final Field[] theSymbolFields = theSymbol.getClass().getFields();
+            for (int j = 0; j < theSymbolFields.length; j++) {
+                final Field fi = theSymbolFields[j];
+                final boolean wasAccessible = fi.isAccessible();
+                fi.setAccessible(true);
+
+                try {
+                    assertTrue(theSymbol.getClass().getName() + " fails or misses clonning the field " +fi.getName(),
+                            fi.get(theSymbol).equals(fi.get(cloneSymbol)));
+                } catch (IllegalArgumentException e) {
+                    fail();
+                } catch (IllegalAccessException e) {
+                    fail();
+                }
+                fi.setAccessible(wasAccessible);
+            }
+        }
+    }
+
+    /**
+     * Check one pixel acceleration consistency. Checks that the color returned
+     * in RGB matches the color of the symbol set.
+     *
+     */
+    public void testOnePointRGB() {
+    	Random random = new Random(System.currentTimeMillis());
+
+        for (int i = 0; i < symbols.length; i++) {
+            if (symbols[i] instanceof IMarkerSymbol) {
+                IMarkerSymbol marker = (IMarkerSymbol) symbols[i];
+                marker.setColor(new Color(random.nextInt()>>8));
+                assertTrue("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"' RGB value mismatch for getOnePointRBG() and getColor().getRGB()",
+                        symbols[i].getOnePointRgb() == marker.getColor().getRGB());
+
+            }
+
+            if (symbols[i] instanceof ILineSymbol) {
+                ILineSymbol line = (ILineSymbol) symbols[i];
+                line.setLineColor(new Color(random.nextInt()>>8));
+                assertTrue("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"' RGB value mismatch for getOnePointRBG() and getColor().getRGB()",
+                        symbols[i].getOnePointRgb() == line.getColor().getRGB());
+            }
+
+            if (symbols[i] instanceof IFillSymbol) {
+                IFillSymbol fill = (IFillSymbol) symbols[i];
+                boolean outlined = fill.getOutline() != null;
+                if (!outlined)
+                	fill.setFillColor(new Color(random.nextInt()>>8));
+                else
+                	fill.getOutline().setLineColor(new Color(random.nextInt()>>8));
+                assertTrue("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"' RGB value mismatch for getOnePointRBG() and getColor().getRGB()",
+                        symbols[i].getOnePointRgb() == ((outlined) ? fill.getOutline().getColor().getRGB() : fill.getFillColor().getRGB()));
+            }
+
+            if (symbols[i] instanceof ITextSymbol) {
+            	ITextSymbol text = (ITextSymbol) symbols[i];
+            	text.setTextColor(new Color(random.nextInt()>>8));
+                assertTrue("Symbol no. "+i+" '"+symbols[i].getClass().getName()+"' RGB value mismatch for getOnePointRBG() and getColor().getRGB()",
+                        symbols[i].getOnePointRgb() == text.getTextColor().getRGB());
+            }
+
+        }
+    }
+
+    /**
+     * ensures that any symbol provides a version of itself to use when the
+     * feature is selected
+     *
+     */
+    public void testSymbolForSelection() {
+    	for (int i = 0; i < symbols.length; i++) {
+			assertNotNull("Symbol no. "+i+" '"+symbols[i].getClass().getName()+" does not define any derived symbol for selection", symbols[i].getSymbolForSelection());
+		}
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestISymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleMarkerSymbolTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleMarkerSymbolTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleMarkerSymbolTest.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
+
+public class SimpleMarkerSymbolTest extends AbstractSymbolTestCase{
+	public SimpleMarkerSymbolTest() {
+		super(SimpleMarkerSymbol.class);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleMarkerSymbolTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawMarkers.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawMarkers.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawMarkers.java	(revision 42196)
@@ -0,0 +1,249 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.Random;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Integration test to test that Marker symbols always draw in the same
+ * place respecting size constraints.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class TestDrawMarkers extends AbstractLibraryAutoInitTestCase {
+	private GeometryManager geomManager;
+	private static final Logger logger = LoggerFactory.getLogger(TestDrawMarkers.class);
+	private IMarkerSymbol[] symbols;
+	private final Dimension sz = new Dimension(400, 400);
+	private org.gvsig.fmap.geom.primitive.Point centerP = null;
+	private static final int OUTTER_TOLERANCE = 1;
+	private static final int INNER_TOLERANCE = 1;
+
+	private static final double sizes[] = new double[] {
+		200,
+		100,
+		50,
+		30,
+		16,
+		5,
+		3,
+		2,
+		// smaller sizes don't make any sense
+
+	};
+
+	protected void doSetUp() throws Exception {
+		geomManager = GeometryLocator.getGeometryManager();
+
+		centerP = geomManager.createPoint(sz.width/2, sz.height/2, SUBTYPES.GEOM2D);
+		
+		ISymbol[] allSymbols = TestISymbol.getNewSymbolInstances();
+		// Filter the marker ones
+		ArrayList symbols = new ArrayList();
+
+		for (int i = 0; i < allSymbols.length; i++) {
+			if (allSymbols[i] instanceof IMarkerSymbol) {
+				IMarkerSymbol sym = (IMarkerSymbol) allSymbols[i];
+				symbols.add(sym);
+
+			}
+		}
+		this.symbols = (IMarkerSymbol[]) symbols.toArray(new IMarkerSymbol[symbols.size()]);
+	}
+
+	public void testDrawingSize() {
+		for (int i = 0; i < symbols.length; i++) {
+			for (int j = 0; j < sizes.length; j++) {
+				// new blank buffered image
+				BufferedImage bi = CompatLocator.getGraphicsUtils().createBufferedImage(sz.width, sz.height, BufferedImage.TYPE_INT_ARGB);
+
+				// the graphics for the image, so we can draw onto the buffered image
+				Graphics2D g = bi.createGraphics();
+
+				IMarkerSymbol testSymbol = symbols[i];
+				testSymbol.setColor(Color.YELLOW);
+				testSymbol.setSize(sizes[j]);
+				String name = testSymbol.getClass().getName().substring(
+						testSymbol.getClass().getName().lastIndexOf('.')+1,
+						testSymbol.getClass().getName().length());
+
+				testSymbol.draw(g, new AffineTransform(), centerP, null, null);
+
+				Rectangle wrappingRect = new Rectangle(
+						(int) (centerP.getX()-sizes[j]/2),
+						(int) (centerP.getY()-sizes[j]/2),
+						(int) (sizes[j]),
+						(int) (sizes[j]));
+
+//				if (testSymbol instanceof CharacterMarkerSymbol)
+//					continue;
+
+
+
+
+				assertFalse("fails sizing marker, too big ("+name+", "+sizes[j]+"px)", isOutsideRect(bi, wrappingRect, OUTTER_TOLERANCE ));
+				assertTrue("fails sizing marker, too small ("+name+", "+sizes[j]+"px) \n" +
+						"\t - forgot to enable ANTIALIASING?", fitsInsideRect(bi, wrappingRect, INNER_TOLERANCE));
+
+
+			}
+		}
+	}
+
+	public void testDrawingOffset() {
+		// TODO: uncomment this test and make it run successfully
+//		Random random = new Random(System.currentTimeMillis());
+//		for (int i = 0; i < symbols.length; i++) {
+//			for (int j = 0; j < sizes.length; j++) {
+//				// new blank buffered image
+//				BufferedImage bi = CompatLocator.getGraphicsUtils().createBufferedImage(sz.width, sz.height, BufferedImage.TYPE_INT_ARGB);
+//
+//
+//				// the graphics for the image, so we can draw onto the buffered image
+//				Graphics2D g = bi.createGraphics();
+//
+//				IMarkerSymbol testSymbol = symbols[i];
+//				testSymbol.setColor(Color.YELLOW);
+//				testSymbol.setSize(sizes[j]);
+//
+//				String name = testSymbol.getClass().getName().substring(
+//						testSymbol.getClass().getName().lastIndexOf('.')+1,
+//						testSymbol.getClass().getName().length());
+//
+//				double xOffset = (random.nextDouble()-0.5)*sz.width;
+//				double yOffset = (random.nextDouble()-0.5)*sz.height;
+//
+//				testSymbol.setOffset(new Point2D.Double(xOffset, yOffset));
+//
+//				Rectangle wrappingRect = new Rectangle(
+//						(int) ((centerP.getX()-sizes[j]/2) + xOffset),
+//						(int) ((centerP.getY()-sizes[j]/2) + yOffset),
+//						(int) (sizes[j]),
+//						(int) (sizes[j]));
+//
+////				if (testSymbol instanceof CharacterMarkerSymbol)
+////					continue;
+//
+//
+//
+//				testSymbol.draw(g, new AffineTransform(), centerP, null, null);
+//				assertFalse("fails sizing marker, too big ("+name+", "+sizes[j]+"px)", isOutsideRect(bi, wrappingRect, OUTTER_TOLERANCE ));
+//				assertTrue("fails sizing marker, too small ("+name+", "+sizes[j]+"px) \n" +
+//						"\t - forgot to enable ANTIALIASING?", fitsInsideRect(bi, wrappingRect, INNER_TOLERANCE));
+//
+//			}
+//		}
+	}
+
+	public void testDrawingRotation() {
+		// TODO implement it
+
+	}
+
+	private boolean fitsInsideRect(BufferedImage bi, Rectangle wrappingRect, int tolerance) {
+		int myTolerance = Math.min(tolerance, wrappingRect.width);
+		Rectangle myRect;
+		if (myTolerance >= INNER_TOLERANCE) {
+			myRect = new Rectangle(
+					wrappingRect.x+myTolerance,
+					wrappingRect.y+myTolerance,
+					wrappingRect.width-myTolerance-myTolerance,
+					wrappingRect.height-myTolerance-myTolerance);
+		} else {
+			myRect = new Rectangle(-1, -1, 0, 0); // just ensure it does not disturb the check
+		}
+
+		for (int i = 0; i < bi.getWidth(); i++) {
+			for (int j = 0; j < bi.getHeight(); j++) {
+				if (wrappingRect.contains(i,j)
+						&& !myRect.contains(i,j)) {
+
+					if (bi.getRGB(i,j) != 0)
+						return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	private boolean isOutsideRect(BufferedImage bi, Rectangle wrappingRect, int tolerance) {
+		Rectangle myRect = new Rectangle(
+				wrappingRect.x-tolerance,
+				wrappingRect.y-tolerance,
+				wrappingRect.width+tolerance+tolerance,
+				wrappingRect.height+tolerance+tolerance);
+		for (int i = 0; i < bi.getWidth(); i++) {
+			for (int j = 0; j < bi.getHeight(); j++) {
+				if (!myRect.contains(i,j))
+					continue;
+
+				if (bi.getRGB(i,j) != 0) return false;
+			}
+		}
+		return true;
+	}
+}
+
+/// paste this piece of code to produce some png files to check visually what is happening
+//g.setColor(Color.BLUE);
+//Rectangle myRect = new Rectangle(
+//		wrappingRect.x+INNER_TOLERANCE,
+//		wrappingRect.y+INNER_TOLERANCE,
+//		wrappingRect.width-INNER_TOLERANCE-INNER_TOLERANCE,
+//		wrappingRect.height-INNER_TOLERANCE-INNER_TOLERANCE);
+//
+//g.draw(myRect);
+//g.setColor(Color.RED);
+//g.draw(wrappingRect);
+//try {
+//
+//	File dstDir = new File (System.getProperty("java.io.tmpdir")+"/prova-imatges/");
+//	if (!dstDir.exists()) dstDir.mkdir();
+//	ImageIO.write(bi, "png",
+//			new File(dstDir.getAbsoluteFile()+File.separator+
+//					name+"_size_"+sizes[j]
+//					                    +".png"));
+//} catch (IOException e) {
+//	e.printStackTrace();
+//	fail();
+//}
+///

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawMarkers.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IDrawFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IDrawFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IDrawFillSymbol.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+
+public interface IDrawFillSymbol {
+
+	IFillSymbol makeSymbolTransparent(IFillSymbol newSymbol);
+
+	boolean isSuitableFor(IFillSymbol newSymbol);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IDrawFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleTextSymbolTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleTextSymbolTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleTextSymbolTest.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.impl.SimpleTextSymbol;
+
+public class SimpleTextSymbolTest extends AbstractSymbolTestCase{
+	public SimpleTextSymbolTest() {
+		super(SimpleTextSymbol.class);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleTextSymbolTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/AbstractSymbolTestCase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/AbstractSymbolTestCase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/AbstractSymbolTestCase.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import junit.framework.TestCase;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+
+public abstract class AbstractSymbolTestCase extends TestCase {
+	protected Class symClazz;
+
+	public AbstractSymbolTestCase(Class symClazz) {
+		this.symClazz = symClazz;
+	}
+
+	public ISymbol newInstance() {
+		try {
+			return (ISymbol) symClazz.newInstance();
+		} catch (Exception e) {
+			fail("Failed installing symbol to test "+symClazz.getName());
+			return null;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/AbstractSymbolTestCase.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleFillSymbolTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleFillSymbolTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleFillSymbolTest.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+
+public class SimpleFillSymbolTest extends AbstractSymbolTestCase{
+	public SimpleFillSymbolTest() {
+		super(SimpleFillSymbol.class);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleFillSymbolTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleLineSymbolTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleLineSymbolTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleLineSymbolTest.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.SimpleLineSymbol;
+
+public class SimpleLineSymbolTest extends AbstractSymbolTestCase{
+	public SimpleLineSymbolTest() {
+		super(SimpleLineSymbol.class);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/SimpleLineSymbolTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawFills.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawFills.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawFills.java	(revision 42196)
@@ -0,0 +1,226 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.imageio.ImageIO;
+
+import junit.framework.TestCase;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.AllTests;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Integration test to test that Fill symbols always draw in the same
+ * place respecting size constraints.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class TestDrawFills extends AbstractLibraryAutoInitTestCase {
+	private GeometryManager geomManager;
+	private static final Logger logger = LoggerFactory.getLogger(TestDrawFills.class);
+	private final Dimension sz = new Dimension(400, 400);
+	private org.gvsig.fmap.geom.primitive.Point centerP = null;
+	private static final int OUTTER_TOLERANCE = 1;
+	private static final int INNER_TOLERANCE = 1;
+	private IFillSymbol[] symbols;
+	private IDrawFillSymbol[] drawFillSymbols;
+	private static ArrayList classesToTest;
+
+	private static final double sizes[] = new double[] {
+		200,
+		100,
+		50,
+		30,
+		16,
+		5,
+		3,
+		2,
+		// smaller sizes don't make any sense
+
+	};
+
+
+	private static ArrayList getClassesToTest() {
+		if (classesToTest == null) {
+			classesToTest = new ArrayList();
+//			TestDrawFills.addSymbolToTest(DrawLineFillSymbol.class);
+//			TestDrawFills.addSymbolToTest(DrawPictureFillSymbol.class);
+		}
+
+		return classesToTest;
+	}
+
+	public static void addSymbolToTest(Class symbolClass) {
+        try {
+            IDrawFillSymbol sym = (IDrawFillSymbol) symbolClass.newInstance();
+        } catch (InstantiationException e) {
+            // TODO Auto-generated catch block
+            fail("Instantiating class, cannot test a non-instantiable symbol");
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            fail("Class not instantiable");
+        } catch (ClassCastException ccEx) {
+            fail("Cannot test a non symbol class");
+        }
+        getClassesToTest().add(symbolClass);
+    }
+
+	protected void doSetUp() throws Exception {
+		geomManager = GeometryLocator.getGeometryManager();
+		centerP = geomManager.createPoint(sz.width/2, sz.height/2, SUBTYPES.GEOM2D);
+		
+		this.drawFillSymbols = new IDrawFillSymbol[getClassesToTest().size()];
+
+		for (int i = 0; i < drawFillSymbols.length; i++) {
+			drawFillSymbols[i] = (IDrawFillSymbol) ((Class) getClassesToTest().get(i)).newInstance();
+		}
+
+		TestISymbol.addSymbols();
+		ISymbol[] allSymbols = TestISymbol.getNewSymbolInstances();
+		// Filter the marker ones
+		ArrayList symbols = new ArrayList();
+
+		for (int i = 0; i < allSymbols.length; i++) {
+			if (allSymbols[i] instanceof IFillSymbol) {
+				IFillSymbol sym = (IFillSymbol) allSymbols[i];
+				symbols.add(sym);
+
+			}
+		}
+		this.symbols = (IFillSymbol[]) symbols.toArray(new IFillSymbol[symbols.size()]);
+
+
+
+	}
+
+	public void testDraw() {
+		MapContext mc = AllTests.newMapContext(AllTests.TEST_DEFAULT_MERCATOR_PROJECTION);
+
+	}
+
+
+	public final void testNullColorAvoidsFilling() throws CreateGeometryException {
+
+		for (int i = 0; i < symbols.length; i++) {
+
+			for (int s = 0; s < sizes.length; s++) {
+
+				BufferedImage bi = CompatLocator.getGraphicsUtils().createBufferedImage(sz.width,sz.height, BufferedImage.TYPE_INT_ARGB);
+				// the graphics for the image, so we can draw onto the buffered image
+				Graphics2D g = bi.createGraphics();
+
+				IFillSymbol newSymbol = symbols[i];
+				newSymbol.setFillColor(null);
+				newSymbol.setOutline(null);
+
+
+
+
+				String name = newSymbol.getClass().getName().substring(
+						newSymbol.getClass().getName().lastIndexOf('.')+1,
+						newSymbol.getClass().getName().length());
+
+
+				Point2D firstPoint = new Point2D.Float((float)(centerP.getX()-sizes[s]/2-3),(float)(centerP.getY()-sizes[s]/2-3));
+				Point2D lastPoint = new Point2D.Float((float)(centerP.getX()+sizes[s]/2+3),(float)(centerP.getY()+sizes[s]/2+3));
+
+
+
+				GeneralPathX gpx = new GeneralPathX();
+
+				gpx.moveTo((float)firstPoint.getX(),(float) firstPoint.getY());
+				gpx.lineTo((float)lastPoint.getX(),(float) firstPoint.getY());
+				gpx.lineTo((float)lastPoint.getX(),(float) lastPoint.getY());
+				gpx.lineTo((float)firstPoint.getX(),(float) lastPoint.getY());
+				gpx.lineTo((float)firstPoint.getX(), (float)firstPoint.getY());
+				gpx.closePath();
+
+
+				for (int j = 0; j < drawFillSymbols.length; j++) {
+					if (drawFillSymbols[j].isSuitableFor(newSymbol)) {
+						newSymbol = drawFillSymbols[j].makeSymbolTransparent(newSymbol);
+						break;
+					}
+				}
+
+
+				newSymbol.draw(g, new AffineTransform(), geomManager.createSurface(gpx, SUBTYPES.GEOM2D), null, null);
+
+				try {
+
+					File dstDir = new File (System.getProperty("java.io.tmpdir")+"/prova-imatges/");
+					if (!dstDir.exists()) dstDir.mkdir();
+					ImageIO.write(bi, "png",
+							new File(dstDir.getAbsoluteFile()+File.separator+
+									name+"_size_"+sizes[s]
+									                    +".png"));
+				} catch (IOException e) {
+					e.printStackTrace();
+					fail();
+				}
+
+				for (int j = 0; j < bi.getWidth(); j++) {
+					for (int k = 0; k < bi.getHeight(); k++) {
+						if (isInsideShape(geomManager.createSurface(gpx, SUBTYPES.GEOM2D), j, k)) {
+							assertEquals("Failed, the fill is being painted when the color is null",bi.getRGB(j, k),0);
+
+						}
+					}
+
+				}
+			}
+		}
+	}
+
+
+	private boolean isInsideShape(Geometry geom, int x, int y) {
+		Point2D p = new Point2D.Float(x,y);
+		if(geom.getShape().contains(p))return true;
+		return false;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawFills.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawLines.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawLines.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawLines.java	(revision 42196)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Integration test to test that Line symbols always draw in the same
+ * place respecting size constraints.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class TestDrawLines extends AbstractLibraryAutoInitTestCase {
+	private GeometryManager geomManager;
+	private static final Logger logger = LoggerFactory.getLogger(TestDrawLines.class);
+	private ILineSymbol[] symbols;
+	private final Dimension sz = new Dimension(401, 401);
+	private Curve centerL;
+	
+	protected void doSetUp() throws Exception {
+		geomManager = GeometryLocator.getGeometryManager();
+
+		GeneralPathX gp = new GeneralPathX();
+		gp.moveTo(0, sz.height / 2 );
+		gp.lineTo(sz.width, sz.height /2 );
+
+		try {
+			centerL = geomManager.createCurve(gp, SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			e.printStackTrace();
+		}
+
+		ISymbol[] allSymbols = TestISymbol.getNewSymbolInstances();
+		// Filter the marker ones
+		ArrayList symbols = new ArrayList();
+
+		for (int i = 0; i < allSymbols.length; i++) {
+			if (allSymbols[i] instanceof ILineSymbol) {
+				ILineSymbol sym = (ILineSymbol) allSymbols[i];
+				symbols.add(sym);
+
+			}
+		}
+		this.symbols = (ILineSymbol[]) symbols.toArray(new ILineSymbol[symbols.size()]);
+	}
+	private static final double sizes[] = new double[] {
+		300,
+		250,
+		225,
+		200,
+		100,
+		50,
+		30,
+		15,
+		5,
+		3,
+		2,
+		1,
+		// smaller sizes don't make any sense
+	};
+
+	private static final float INNER_TOLERANCE = 1F;
+	private static final float OUTTER_TOLERANCE = 1F;
+
+	public void testDrawingSize() {
+		for (int i = 0; i < symbols.length; i++) {
+			for (int j = 0; j < sizes.length; j++) {
+				// new blank buffered image
+				
+				BufferedImage bi = CompatLocator.getGraphicsUtils().createBufferedImage(sz.width, sz.height, BufferedImage.TYPE_INT_ARGB);
+
+				// the graphics for the image, so we can draw onto the buffered image
+				Graphics2D g = bi.createGraphics();
+
+				ILineSymbol testSymbol = symbols[i];
+				testSymbol.setLineColor(Color.YELLOW);
+				testSymbol.setLineWidth(sizes[j]);
+				String name = testSymbol.getClass().getName().substring(
+						testSymbol.getClass().getName().lastIndexOf('.')+1,
+						testSymbol.getClass().getName().length());
+
+				Point2D upperP1 = new Point2D.Double(0, centerL.getShape().getBounds().getY() - sizes[j]*0.5);
+				Point2D upperP2 = new Point2D.Double(centerL.getShape().getBounds().getWidth(), centerL.getShape().getBounds().getY() - sizes[j]*0.5);
+				GeneralPathX gpUp = new GeneralPathX();
+				gpUp.moveTo(upperP1.getX(), upperP1.getY());
+				gpUp.lineTo(upperP2.getX(), upperP2.getY());
+
+
+				GeneralPathX gpDown = new GeneralPathX();
+				Point2D lowerP1 = new Point2D.Double(0, centerL.getShape().getBounds().getY() + sizes[j]*0.5);
+				Point2D lowerP2 = new Point2D.Double(centerL.getShape().getBounds().getWidth(), centerL.getShape().getBounds().getY() + sizes[j]*0.5);
+				gpDown.moveTo(lowerP1.getX(), lowerP1.getY());
+				gpDown.lineTo(lowerP2.getX(), lowerP2.getY());
+
+
+				testSymbol.draw(g, new AffineTransform(), centerL, null, null);
+
+				/// per a borrar
+//				g.setStroke(new BasicStroke());
+//				g.setColor(Color.RED);
+//
+//				g.draw(gpUp);
+//
+//				g.setColor(Color.BLUE);
+//				g.draw(gpDown);
+//
+//				try {
+//
+//					File dstDir = new File (System.getProperty("java.io.tmpdir")+"/prova-imatges/");
+//					if (!dstDir.exists()) dstDir.mkdir();
+//				ImageIO.write(bi, "png",
+//						new File(dstDir.getAbsoluteFile()+File.separator+
+//									name+"_size_"+sizes[j]
+//									                    +".png"));
+//				} catch (IOException e) {
+//					e.printStackTrace();
+//					fail();
+//				}
+				/// fi per a borrar
+				assertFalse("fails sizing line, too big ("+name+", "+sizes[j]+"px)", isOutsideRect(bi, upperP1, lowerP1, OUTTER_TOLERANCE ));
+				assertTrue("fails sizing line, too small ("+name+", "+sizes[j]+"px) \n" +
+						"\t - forgot to enable ANTIALIASING?", fitsInsideRect(bi, upperP1, lowerP1, INNER_TOLERANCE));
+
+			}
+		}
+	}
+
+	private boolean isOutsideRect(BufferedImage bi, Point2D upper, Point2D lower, float outterTolerance) {
+		for (int i = 0; i < bi.getWidth(); i++) {
+			for (int j = 0; j < bi.getHeight(); j++) {
+				if (j<upper.getY()-outterTolerance && j>lower.getY()+outterTolerance)
+					if (bi.getRGB(i,j) != 0) {
+						System.out.println("too big In pixel ("+i+", "+j+")");
+						return true;
+					}
+
+			}
+		}
+		return false;
+	}
+
+	private boolean fitsInsideRect(BufferedImage bi,Point2D upper, Point2D lower , float innerTolerance) {
+		for (int i = 0; i < bi.getWidth(); i++) {
+			for (int j = 0; j < bi.getHeight(); j++) {
+				if (j<upper.getY()+innerTolerance && j>lower.getY()-innerTolerance)
+					if (bi.getRGB(i,j) == 0) {
+						System.out.println("does not fit big In pixel ("+i+", "+j+")");
+						return false;
+					}
+
+			}
+		}
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/test/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/TestDrawLines.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/pom.xml	(revision 42196)
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.lib.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.vividsolutions</groupId>
+      <artifactId>jts</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.operation</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-gvt</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-script</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-ext</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.remoteclient</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>        
+    <dependency>
+        <groupId>org.apache.xmlgraphics</groupId>
+        <artifactId>batik-awt-util</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.xmlgraphics</groupId>
+        <artifactId>batik-bridge</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>xml-apis</groupId>
+        <artifactId>xml-apis-ext</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    
+	  <dependency>
+          <groupId>org.gvsig</groupId>
+		  <artifactId>org.gvsig.tools.evaluator.sqljep</artifactId>
+          <scope>compile</scope>
+	  </dependency>
+    
+    <!-- Test dependencies -->
+
+<!--
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <version>2.0.1-SNAPSHOT</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+-->
+  </dependencies>
+
+
+  <build>
+    <plugins>
+
+        <plugin>
+          <!-- Skip compilation tests -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>default-testCompile</id>
+              <phase>process-test-sources</phase>
+              <goals>
+                <goal>testCompile</goal>
+              </goals>
+              <configuration>
+                <skip>true</skip>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+
+      <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/test/java/org/gvsig/symbology/SymbologyManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/test/java/org/gvsig/symbology/SymbologyManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/test/java/org/gvsig/symbology/SymbologyManagerTest.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology;
+
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * API compatibility tests for {@link SymbologyManager} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class SymbologyManagerTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    protected SymbologyManager manager;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        manager = SymbologyLocator.getSymbologyManager();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/test/java/org/gvsig/symbology/SymbologyManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.symbology.SymbologyLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ISimpleLineStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ISimpleLineStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ISimpleLineStyle.java	(revision 42196)
@@ -0,0 +1,28 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+public interface ISimpleLineStyle extends ILineStyle{
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ISimpleLineStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMarkerFillPropertiesStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMarkerFillPropertiesStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMarkerFillPropertiesStyle.java	(revision 42196)
@@ -0,0 +1,115 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+/**
+ * IMarkerFillPropertiesStyle is an interface used by classes that are trying to fill a
+ * polygon using marker symbols for that. In order to permit a big mount of possibilities for
+ * the filling, this interface has the options to modify the rotation of the markers that
+ * compose the padding, the x and y offset, the x and y separation,and the style of the fill.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IMarkerFillPropertiesStyle extends IStyle {
+	public static final int RANDOM_FILL = 3;
+	public static final int GRID_FILL = 1;
+	public static final int SINGLE_CENTERED_SYMBOL = 2;
+
+	/**
+	 * <p>
+	 * Defines an utility symbol to show up a thumbnail
+	 * by default, this symbol is a SimpleMarkerSymbol.
+	 * Thus, the drawInsideRectangle will always work. But
+	 * it can be changed with setSampleSymbol(IMakerSymbol).<br>
+	 * </p>
+	 * <p>
+	 * If <b>marker</b> is null, it does nothing
+	 * </p>
+	 */
+	public void setSampleSymbol(IMarkerSymbol marker) ;
+
+	/**
+	 * Obtains the rotation of the marker symbol that compose the padding.
+	 * @return the rotation of a marker
+	 */
+	public double getRotation();
+	/**
+	 * Sets the rotation of the marker symbol that compose the padding.
+	 * @param rotation
+	 */
+	public void setRotation(double rotation) ;
+	/**
+	 * Returns the x offset of the markers that compose the padding
+	 * @return xoffset of the marker
+	 */
+	public double getXOffset();
+	/**
+	 * Establishes de x offset of the markers that compose the padding
+	 * @param offset
+	 */
+	public void setXOffset(double offset) ;
+	/**
+	 * Return the separation (x axis) between the markers that compose the padding
+	 * @return x separation
+	 */
+	public double getXSeparation() ;
+	/**
+	 * Sets the separation (x axis) between the markers that compose the padding
+	 * @param separation
+	 */
+	public void setXSeparation(double separation);
+
+	/**
+	 * Returns the y offset of the markers that compose the padding
+	 * @return yoffset of the marker
+	 */
+	public double getYOffset();
+	/**
+	 * Establishes the y offset of the markers that compose the padding
+	 * @param offset
+	 */
+	public void setYOffset(double offset) ;
+	/**
+	 * Return the separation (y axis) between the markers that compose the padding
+	 * @return y separation
+	 */
+	public double getYSeparation() ;
+	/**
+	 * Sets the separation (y axis) between the markers that compose the padding
+	 * @param separation
+	 */
+	public void setYSeparation(double separation);
+	/**
+	 * Sets the style for the fill that use marker symbols to do it(the filled).
+	 * @param fillStyle
+	 */
+	public void setFillStyle(int fillStyle);
+	/**
+	 * Returns the style of the fill that use marker symbols to do it(the filled).
+	 * @return int, fill style
+	 */
+	public int getFillStyle();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMarkerFillPropertiesStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ILineStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ILineStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ILineStyle.java	(revision 42196)
@@ -0,0 +1,115 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: ILineStyle.java 20989 2008-05-28 11:05:57Z jmvivo $
+ * $Log$
+ * Revision 1.7  2007-08-13 11:36:30  jvidal
+ * javadoc
+ *
+ * Revision 1.6  2007/07/26 12:36:52  jaume
+ * character encoding mispell
+ *
+ * Revision 1.5  2007/07/23 06:53:56  jaume
+ * Added support for arrow line decorator (start commiting)
+ *
+ * Revision 1.4  2007/05/09 16:07:26  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2007/05/08 08:47:39  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/03/09 11:20:56  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.3  2007/02/15 16:23:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.2  2007/02/12 15:15:20  jaume
+ * refactored interval legend and added graduated symbol legend
+ *
+ * Revision 1.1.2.1  2007/02/09 07:47:04  jaume
+ * Isymbol moved
+ *
+ *
+ */
+
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Stroke;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+
+
+
+
+/**
+ * Interface that controls the properties that define the style of a line.This
+ * properties are the width, stroke, offset and arrow decorator style( for example
+ * if the line includes markers as an arrow to specify an orientation).
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface ILineStyle extends IStyle {
+	/**
+	 * Returns the width of the line
+	 * @return
+	 */
+	public abstract float getLineWidth();
+	/**
+	 * Establishes the width of the line
+	 * @param width of the line
+	 */
+	public abstract void setLineWidth(float width);
+	/**
+	 * Returns the stroke of the line
+	 * @return Stroke of the line
+	 */
+	public abstract Stroke getStroke();
+	/**
+	 * Sets the stroke of the line
+	 * @param stroke,stroke to be established
+	 */
+	public abstract void setStroke(Stroke stroke);
+	/**
+	 * Gets the arrow decorator style that has the line
+	 * @return ArrowDecoratorStyle
+	 */
+	public abstract IArrowDecoratorStyle getArrowDecorator();
+	/**
+	 * Sets the arrow decorator style of the line
+	 * @param arrowDecoratorStyle, ArrowDecoratorStyle
+	 */
+	public abstract void setArrowDecorator(IArrowDecoratorStyle arrowDecoratorStyle);
+	/**
+	 * Returns the offset of the line
+	 * @return
+	 */
+	public abstract double getOffset();
+	/**
+	 * Establishes the offset of the line
+	 * @param offset
+	 */
+	public abstract void setOffset(double offset);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/ILineStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMask.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Shape;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+
+/**
+ * Interface for the style of a mask.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IMask extends IStyle {
+
+	public double getSize();
+
+	public void setSize(double size);
+
+	public IFillSymbol getFillSymbol();
+
+	public void setFillSymbol(IFillSymbol fill);
+
+	public Geometry getHaloShape(Shape shp);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IMask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IArrowDecoratorStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IArrowDecoratorStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IArrowDecoratorStyle.java	(revision 42196)
@@ -0,0 +1,114 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface IArrowDecoratorStyle extends IStyle {
+
+	/**
+	 * Obtains the number of arrows that the user wants to draw in the same line.
+	 * @return
+	 */
+	public int getArrowMarkerCount();
+
+	/**
+	 * Defines the number of arrows that the user wants to draw in the same line.
+	 * @return
+	 */
+	public void setArrowMarkerCount(int arrowMarkerCount);
+
+	/**
+	 * Defines the flipAll attribute.If the value of this attribute is true all the
+	 * arrows that we had drawn in the same line will be flipped.
+	 * @return
+	 */
+	public boolean isFlipAll();
+
+	/**
+	 * Obtains the flipAll attribute.If the value of this attribute is true all the
+	 * arrows that we had drawn in the same line will be flipped.
+	 * @return
+	 */
+	public void setFlipAll(boolean flipAll);
+
+	/**
+	 * Obtains the flipFirst attribute.If it is true only the first arrow of the line
+	 * will be flipped.The rest will keep the same orientation.
+	 * @return
+	 */
+	public boolean isFlipFirst();
+
+	/**
+	 * Sets the flipFirst attribute.If it is true only the first arrow of the line
+	 * will be flipped.The rest will keep the same orientation.
+	 * @return
+	 */
+	public void setFlipFirst(boolean flipFirst);
+
+	/**
+	 * Gets the followLineAngle attribute.This attribute allows the arrow that we are
+	 * going to draw to be more or less aligned with the line where it will be included (depending on the angle) .
+	 * @return
+	 */
+	public boolean isFollowLineAngle();
+
+	/**
+	 * Sets the followLineAngle attribute.This attribute allows the arrow that we are
+	 * going to draw to be more or less aligned with the line where it will be included.
+	 * (depending on the angle).
+	 * @param followingLineAngle
+	 * @return
+	 */
+	public void setFollowLineAngle(boolean followLineAngle);
+	/**
+	 * Draws an arrow(or other symbol that substitutes an arrow selected by the user)
+	 * in a line.When the line is drawn, the symbol is added and takes care of the different
+	 * options of the user(for example if he wants to flip the first symbol or all and
+	 * the number of symbols per line to be drawn)
+	 * @param g
+	 * @param affineTransform
+	 * @param feature 
+	 * @param shp
+	 * @throws CreateGeometryException 
+	 */
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature feature) throws CreateGeometryException;
+	
+	public IMarkerSymbol getMarker();
+
+	public void setMarker(IMarkerSymbol marker);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/style/IArrowDecoratorStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMultiLayerMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMultiLayerMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMultiLayerMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+
+public interface IMultiLayerMarkerSymbol extends IMarkerSymbol, IMultiLayerSymbol{
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMultiLayerMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/ISimpleMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/ISimpleMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/ISimpleMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+public interface ISimpleMarkerSymbol extends IMarkerSymbol{
+
+	/**
+	 * Returns true or false depending if the simple marker symbol has an outline or not.
+	 * @return Returns the outline.
+	 */
+	public abstract boolean hasOutline();
+
+	/**
+	 * Establishes the outline for the simple marker symbol.
+	 * @param outline  The outline to set.
+	 */
+	public abstract void setOutlined(boolean outlined);
+
+	/**
+	 * Returns the outline color for the symple marker symbol
+	 *
+	 * @return Color,outlineColor.
+	 */
+	public abstract Color getOutlineColor();
+
+	/**
+	 * Sets the outline color for the simple marker symbol
+	 * @param outlineColor, Color
+	 */
+	public abstract void setOutlineColor(Color outlineColor);
+
+	/**
+	 * Gets the size of the outline for the simple marker symbol
+	 * @return  Returns the outlineSize.
+	 */
+	public abstract double getOutlineSize();
+
+	/**
+	 * Establishes the size for the outline of the simple marker symbol
+	 * @param outlineSize  The outlineSize to set.
+	 */
+	public abstract void setOutlineSize(double outlineSize);
+
+	/**
+	 * @return  Returns the selectionSymbol.
+	 */
+	public abstract ISymbol getSelectionSymbol();
+
+	/**
+	 * @param selectionSymbol  The selectionSymbol to set.
+	 */
+	public abstract void setSelectionSymbol(ISymbol selectionSymbol);
+
+	/**
+	 * Sets the style for the simple marker symbol
+	 * @param style
+	 */
+	public abstract void setStyle(int style);
+
+	/**
+	 * Obtains the style for the simple marker symbol
+	 * @return markerStyle,int
+	 */
+	public abstract int getStyle();
+
+	/**
+	 * Returns if the marker symbol should be drawn outlined.
+	 * @return if it is outlined
+	 */
+	public abstract boolean isOutlined();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/ISimpleMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IArrowMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IArrowMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IArrowMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker;
+
+public interface IArrowMarkerSymbol {
+
+	/**
+	 * To get the sharpeness attribute.It will determine the final form of the arrow
+	 * @return
+	 */
+	public abstract double getSharpness();
+
+	/**
+	 * To set the sharpeness.It will determine the final form of the arrow
+	 * @param sharpeness, the value of the arrow's edge angle IN RADIANS
+	 * @see #getSharpeness()
+	 */
+	public abstract void setSharpness(double sharpeness);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IArrowMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IPictureMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IPictureMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IPictureMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker;
+
+import java.io.IOException;
+import java.net.URL;
+
+public interface IPictureMarkerSymbol extends IMarkerSymbol{
+
+	/**
+	 * Sets the file for the image to be used as a marker symbol
+	 * 
+	 * @param imageFile
+	 *            , File
+	 * @throws IOException
+	 */
+	public abstract void setImage(URL imageUrl) throws IOException;
+
+	/**
+	 * Sets the file for the image to be used as a marker symbol (when it is
+	 * selected in the map)
+	 * 
+	 * @param imageFile
+	 *            , File
+	 * @throws IOException
+	 */
+	public abstract void setSelImage(URL imageFileUrl) throws IOException;
+
+	// public void print(Graphics2D g, AffineTransform at, FShape shape)
+	// throws ReadDriverException {
+	// // TODO Implement it
+	// throw new Error("Not yet implemented!");
+	//
+	// }
+	/**
+	 * Returns the URL of the image that is used as a marker symbol
+	 * @return imagePath,URL
+	 */
+	public abstract URL getSource();
+
+	/**
+	 * Returns the URL of the image that is used as a marker symbol (when it
+	 is selected in the map)
+	 * @return selimagePath,URL
+	 */
+	public abstract URL getSelectedSource();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IPictureMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,115 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker;
+
+import java.awt.Color;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+
+/**
+ * Represents an ISymbol that draws a <b>marker symbol</b>.It has the different methods to obtain or
+ * define the attributes of a marker such as rotation, offset, size, color and
+ * IMask.
+ *
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IMarkerSymbol extends ISymbol, CartographicSupport {
+
+	public static final String SYMBOL_NAME = "marker";
+
+	public static final int CIRCLE_STYLE = 0;
+	public static final int SQUARE_STYLE = 1;
+	public static final int CROSS_STYLE = 2;
+	public static final int DIAMOND_STYLE = 3;
+	public static final int X_STYLE = 4;
+	public static final int TRIANGLE_STYLE = 5;
+	public static final int STAR_STYLE = 6;
+	public static final int VERTICAL_LINE_STYLE = 7;
+
+	/**
+	 * Returns the rotation (in radians, counter-clockwise) of the marker symbol
+	 * @return double (rotation)
+	 */
+	public abstract double getRotation();
+	/**
+	 * Sets the rotation of the marker symbol
+	 * @param rotation
+	 */
+	public abstract void setRotation(double rotation);
+	/**
+	 * Gets the offset for a marker symbol
+	 * @return Point2D
+	 */
+	public abstract Point2D getOffset();
+	/**
+	 * Establishes the offset currently set for the marker symbol.
+	 * @param offset
+	 */
+	public abstract void setOffset(Point2D offset);
+	/**
+	 * Obtains the size of a marker symbol
+	 *
+	 */
+	public abstract double getSize();
+	/**
+	 * Sets the size of marker symbol
+	 * @param size
+	 */
+	public abstract void setSize(double size);
+
+	/**
+	 * Returns the color of the marker symbol.
+	 * @return Color
+	 */
+	public abstract Color getColor();
+
+	/**
+	 * Establishes a color for the marker symbol
+	 * @param color
+	 */
+	public abstract void setColor(Color color);
+
+	/**
+	 * Defines the transparency of a line symbol.
+	 *
+	 * @param outlineAlpha
+	 *            , the transparency
+	 */
+	void setAlpha(int alpha);
+
+	/**
+	 *
+	 * @return the mask of the symbol
+	 */
+	public abstract IMask getMask();
+	/**
+	 * Defines a mask for the symbol
+	 * @param mask,IMask
+	 */
+	public abstract void setMask(IMask mask);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMarkerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/ISimpleTextSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/ISimpleTextSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/ISimpleTextSymbol.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+
+public interface ISimpleTextSymbol extends ITextSymbol{
+
+	public abstract double getRotation();
+
+	/**
+	 * Defines the angle of rotation for the text that composes the symbol
+	 *
+	 * @param rotation
+	 */
+	public abstract void setRotation(double rotation);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/ISimpleTextSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IFillSymbol.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: IFillSymbol.java 21071 2008-06-02 10:55:35Z vcaballero $
+ * $Log$
+ * Revision 1.3  2007-08-13 11:36:50  jvidal
+ * javadoc
+ *
+ * Revision 1.2  2007/03/09 11:20:56  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.2  2007/02/21 16:09:02  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2007/02/16 10:54:12  jaume
+ * multilayer splitted to multilayerline, multilayermarker,and  multilayerfill
+ *
+ *
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+
+
+/**
+ * Interface that extends ISymbol interface in order to define methods for
+ * fill symbols which can manage specific attributes of them.
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+
+public interface IFillSymbol extends ISymbol, CartographicSupport{
+	
+	public static final String SYMBOL_NAME = "fill";
+
+	public abstract boolean isSuitableFor(Geometry geom);
+
+	public abstract int getOnePointRgb();
+
+	/**
+	 * Sets the color that will be used to draw the filling pattern of this symbol.
+	 *
+	 * @param Color
+	 */
+	public abstract void setFillColor(Color color);
+
+	/**
+	 * Sets the color of the outline.
+	 * @deprectated will be substituted by setOutline(AbstractLineSymbol);
+	 * @param color
+	 */
+	public abstract void setOutline(ILineSymbol outline);
+
+	/**
+	 * @return Returns the color.
+	 */
+	public abstract Color getFillColor();
+
+	/**
+	 * Obtains the ILineSymbol interface of the outline
+	 * @return the outline,ILineSymbol.
+	 */
+	public abstract ILineSymbol getOutline();
+	/**
+	 * Obtains the transparency of the fill symbol
+	 * @return the transparency of the fill symbol
+	 */
+
+	public abstract int getFillAlpha();
+
+	public abstract boolean hasFill();
+
+	public abstract void setHasFill(boolean hasFill);
+
+	public abstract boolean hasOutline();
+
+	public abstract void setHasOutline(boolean hasOutline);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMarkerFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMarkerFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMarkerFillSymbol.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+
+public interface IMarkerFillSymbol extends IFillSymbol{
+
+	public abstract void setMarker(IMarkerSymbol marker);
+
+	public abstract IMarkerSymbol getMarker();
+
+	/**
+	 * Sets the markerfillproperties to be used by the class
+	 *
+	 * @param markerFillStyle,IMarkerFillPropertiesStyle
+	 */
+	public abstract void setMarkerFillProperties(
+			IMarkerFillPropertiesStyle markerFillStyle);
+
+	/**
+	 * Returns the markerfillproperties that are used by the class
+	 *
+	 * @return markerFillProperties,IMarkerFillPropertiesStyle
+	 */
+	public abstract IMarkerFillPropertiesStyle getMarkerFillProperties();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMarkerFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMultiLayerFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMultiLayerFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMultiLayerFillSymbol.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+
+public interface IMultiLayerFillSymbol extends IFillSymbol, IMultiLayerSymbol{
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMultiLayerFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/ISimpleFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/ISimpleFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/ISimpleFillSymbol.java	(revision 42196)
@@ -0,0 +1,28 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill;
+
+public interface ISimpleFillSymbol extends IFillSymbol{
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/ISimpleFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IPictureFillSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IPictureFillSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IPictureFillSymbol.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IBackgroundFileStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+
+public interface IPictureFillSymbol extends IFillSymbol{
+
+	/**
+	 * Sets the URL for the image to be used as a picture fill symbol (when it is selected in the map)
+	 * @param imageFile, File
+	 * @throws IOException
+	 */
+	public abstract void setSelImage(URL selImageUrl) throws IOException;
+
+	/**
+	 * Defines the URL from where the picture to fill the polygon is taken.
+	 * @param imageFile
+	 * @throws IOException
+	 */
+	public abstract void setImage(URL imageUrl) throws IOException;
+
+	/**
+	 * Returns the IMarkerFillProperties that allows this class to treat the picture as
+	 * a marker in order to scale it, rotate it and so on.
+	 * @return markerFillProperties,IMarkerFillPropertiesStyle
+	 */
+	public abstract IMarkerFillPropertiesStyle getMarkerFillProperties();
+
+	/**
+	 * Sets the MarkerFillProperties in order to allow the user to modify the picture as
+	 * a marker (it is possible to scale it, rotate it and so on)
+	 * @param prop
+	 */
+	public abstract void setMarkerFillProperties(IMarkerFillPropertiesStyle prop);
+
+	/**
+	 * Defines the angle for the rotation of the image when it is added to create the
+	 * padding
+	 *
+	 * @return angle
+	 */
+	public abstract double getAngle();
+
+	/**
+	 * Sets the angle for the rotation of the image when it is added to create the padding
+	 * @param angle
+	 */
+	public abstract void setAngle(double angle);
+
+	/**
+	 * Defines the scale for the x axis of the image when it is added to create the
+	 * padding
+	 * @return xScale
+	 */
+	public abstract double getXScale();
+
+	/**
+	 * Returns the scale for the x axis of the image when it is added to create the
+	 * padding
+	 * @param xScale
+	 */
+	public abstract void setXScale(double xScale);
+
+	/**
+	 * Defines the scale for the y axis of the image when it is added to create the
+	 * padding
+	 * @return yScale
+	 */
+	public abstract double getYScale();
+
+	/**
+	 * Returns the scale for the y axis of the image when it is added to create the
+	 * padding
+	 * @param yScale
+	 */
+	public abstract void setYScale(double yScale);
+
+	/**
+	 * Returns the URL of the image that is used to create the padding to fill the
+	 * polygon
+	 * @return imagePath
+	 */
+	public abstract URL getSource();
+
+	/**
+	 * Returns the URL of the image used when the polygon is selected
+	 * @return
+	 */
+	public abstract URL getSelectedSource();
+	
+	
+	/**
+	 * Returns the style associated to the image used in this symbol
+	 * 
+	 * @return
+	 */
+	public IBackgroundFileStyle getBackgroundFileStyle();
+
+	/**
+	 * Returns the style associated to the image used in this symbol
+	 * when the feature is selected
+	 * 
+	 * @return
+	 */
+	public IBackgroundFileStyle getSelectedBackgroundFileStyle();
+	
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IPictureFillSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IMultiLayerLineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IMultiLayerLineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IMultiLayerLineSymbol.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+
+public interface IMultiLayerLineSymbol extends ILineSymbol, IMultiLayerSymbol{
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IMultiLayerLineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ISimpleLineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ISimpleLineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ISimpleLineSymbol.java	(revision 42196)
@@ -0,0 +1,28 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line;
+
+public interface ISimpleLineSymbol extends ILineSymbol{
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ISimpleLineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IPictureLineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IPictureLineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IPictureLineSymbol.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line;
+
+import java.io.IOException;
+import java.net.URL;
+
+
+public interface IPictureLineSymbol extends ILineSymbol{
+
+	/**
+	 * Sets the URL for the image to be used as a picture line symbol
+	 * @param imageFile, File
+	 * @throws IOException
+	 */
+	public abstract void setImage(URL imageUrl) throws IOException;
+
+	/**
+	 * Sets the URL for the image to be used as a picture line symbol (when it is selected in the map)
+	 * @param imageFile, File
+	 * @throws IOException
+	 */
+	public abstract void setSelImage(URL selImageUrl) throws IOException;
+
+	/**
+	 * Sets the yscale for the picture line symbol
+	 * @param yScale
+	 */
+	public abstract void setYScale(double yScale);
+
+	/**
+	 * Sets the xscale for the picture line symbol
+	 * @param xScale
+	 */
+	public abstract void setXScale(double xScale);
+
+	/**
+	 * Returns the URL of the image that is used as a picture line symbol (when it
+	 * is selected in the map)
+	 * @return selimagePath,URL
+	 */
+	public abstract URL getSelectedSource();
+
+	/**
+	 * Returns the URL of the image that is used as a picture line symbol
+	 * @return imagePath,URL
+	 */
+	public abstract URL getSource();
+
+	/**
+	 * Returns the xscale for the picture line symbol
+	 * @param xScale
+	 */
+	public abstract double getXScale();
+
+	/**
+	 * Returns the yscale for the picture line symbol
+	 * @param yScale
+	 */
+	public abstract double getYScale();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IPictureLineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ILineSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ILineSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ILineSymbol.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: ILineSymbol.java 20989 2008-05-28 11:05:57Z jmvivo $
+ * $Log$
+ * Revision 1.6  2007-08-14 11:17:31  jvidal
+ * javadoc updated
+ *
+ * Revision 1.5  2007/08/08 12:03:13  jvidal
+ * javadoc
+ *
+ * Revision 1.4  2007/05/08 08:47:39  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2007/03/20 16:00:24  jaume
+ * removed unuseful comments
+ *
+ * Revision 1.2  2007/03/09 11:20:56  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.5  2007/02/21 16:09:02  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.4  2007/02/15 16:23:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.3  2007/02/14 15:53:35  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.2  2007/02/13 16:19:19  jaume
+ * graduated symbol legends (start commiting)
+ *
+ * Revision 1.1.2.1  2007/02/09 07:47:04  jaume
+ * Isymbol moved
+ *
+ *
+ */
+
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ILineStyle;
+
+
+
+/**
+ * Interface for <b>line symbols</b>.It has the different methods to obtain or define
+ * the attributes of a line such as color, style, width and alpha (transparency).
+ *
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface ILineSymbol extends ISymbol, CartographicSupport{
+	
+	public static final String SYMBOL_NAME = "line";
+
+	/**
+	 * Returns the color of the line symbol
+	 * @return Color
+	 */
+	public abstract Color getColor();
+	/**
+	 * Sets the color for a line symbol
+	 * @param color
+	 */
+
+	public abstract void setLineColor(Color color);
+	/**
+	 * Obtains the style of the line symbol.
+	 * @return ILineStyle, the style of the line symbol
+	 */
+	public abstract ILineStyle getLineStyle();
+	/**
+	 * Defines the style of the line symbol to be used.
+	 * @param lineStyle
+	 */
+	public abstract void setLineStyle(ILineStyle lineStyle);
+	/**
+	 * Sets the width of the line symbol.
+	 * @param width, the width of the line
+	 */
+	public abstract void setLineWidth(double width);
+	/**
+	 * Returns the width of the line symbol
+	 * @return
+	 */
+
+	public abstract double getLineWidth();
+
+	/**
+	 * Obtains the transparency of the line symbol
+	 * @return
+	 */
+	public abstract int getAlpha();
+
+	/**
+	 * Defines the transparency of a line symbol.
+	 * @param outlineAlpha, the transparency
+	 */
+	public abstract void setAlpha(int outlineAlpha);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ILineSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IMultiShapeSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IMultiShapeSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IMultiShapeSymbol.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.symbol;
+
+import java.awt.Color;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+
+public interface IMultiShapeSymbol {
+
+	public abstract IMarkerSymbol getMarkerSymbol();
+
+	public abstract ILineSymbol getLineSymbol();
+
+	public abstract IFillSymbol getFillSymbol();
+
+	public abstract void setMarkerSymbol(IMarkerSymbol markerSymbol);
+
+	public abstract void setLineSymbol(ILineSymbol lineSymbol);
+
+	public abstract void setFillSymbol(IFillSymbol fillFillSymbol);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/IMultiShapeSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/IAttrInTableLabelingStrategy.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/IAttrInTableLabelingStrategy.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/IAttrInTableLabelingStrategy.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Color;
+import java.awt.Font;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+
+public interface IAttrInTableLabelingStrategy extends ILabelingStrategy, CartographicSupport{
+
+	public abstract String getRotationField();
+
+	public abstract String getTextField();
+
+	public abstract String getHeightField();
+
+	public abstract String getColorField();
+
+	public abstract void setTextField(String textFieldName);
+
+	public abstract void setRotationField(String rotationFieldName);
+
+	/**
+	 * Sets the field that contains the size of the text. The size is computed
+	 * in meters. To use any other unit, call setUnit(int) with the scale factor from meters
+	 * (for centimeters, call <b>setUnitFactor(0.01))</b>.
+	 * @param heightFieldName
+	 */
+	public abstract void setHeightField(String heightFieldName);
+
+	public abstract void setColorField(String colorFieldName);
+
+	public abstract void setUsesFixedSize(boolean b);
+
+	public abstract boolean usesFixedSize();
+
+	public abstract double getFixedSize();
+
+	public abstract void setFixedSize(double fixedSize);
+
+	public abstract void setUsesFixedColor(boolean b);
+
+	public abstract boolean usesFixedColor();
+
+	public abstract Color getFixedColor();
+
+	public abstract void setFixedColor(Color fixedColor);
+
+	public abstract Color getColorFont();
+
+	public abstract void setColorFont(Color colorFont);
+
+	public abstract Font getFont();
+
+	public abstract void setFont(Font selFont);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/IAttrInTableLabelingStrategy.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/ShapeInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/ShapeInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/ShapeInfo.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.fmap.mapcontext.rendering.legend.strategies;
+
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Estructura de datos con la informaci�n relativa a las geometr�as de una
+ * fuente de datos necesaria para acelerar el procesado de la capa
+ */
+public interface ShapeInfo {
+	/**
+	 * A�ade al final de la estructura de datos la informaci�n de una geometr�a
+	 *
+	 * @param boundingBox Extent del shape.
+	 * @param type Tipo de shape.
+	 */
+	void addShapeInfo(Rectangle2D boundingBox, int type);
+
+	/**
+	 * Establece en la posici�n index-�sima de la estructura de datos la
+	 * informaci�n de una geometr�a
+	 *
+	 * @param index �ndice.
+	 * @param boundingBox Extent del shape.
+	 * @param type Tipo de shape.
+	 *
+	 * @throws ArrayIndexOutOfBoundsException Si se intenta establecer la
+	 * 		   informaci�n para una geometr�a que no existe
+	 */
+	void setShapeInfo(int index, Rectangle2D boundingBox, int type)
+		throws ArrayIndexOutOfBoundsException;
+
+	/**
+	 * Obtiene el bounding box de la geometr�a index-�sima
+	 *
+	 * @param index �ndice de la geometr�a.
+	 *
+	 * @return Extent de la geometr�a.
+	 */
+	Rectangle2D getBoundingBox(int index);
+
+	/**
+	 * Obtiene el tipo de la geometr�a index-�sima
+	 *
+	 * @param index �ndice.
+	 *
+	 * @return Tipo de geometr�a.
+	 */
+	int getType(int index);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/strategies/ShapeInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLocator.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+public class SymbologyLocator extends BaseLocator {
+
+	public static final String SYMBOLOGY_MANAGER_NAME = "SymbologyManager";
+
+	private static final String SYMBOLOGY_MANAGER_DESCRIPTION =
+			"Manager of the basic symbology library";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final SymbologyLocator instance = new SymbologyLocator();
+
+	/**
+	 * Return the singleton instance.
+	 * 
+	 * @return the singleton instance
+	 */
+	public static SymbologyLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Return a reference to the SymbologyManager.
+	 * 
+	 * @return a reference to the SymbologyManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static SymbologyManager getSymbologyManager()
+			throws LocatorException {
+		return (SymbologyManager) getInstance().get(SYMBOLOGY_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the SymbologyManager interface.
+	 * 
+	 * @param clazz
+	 *            implementing the SymbologyManager interface
+	 */
+	public static void registerSymbologyManager(
+			Class<? extends SymbologyManager> clazz) {
+		getInstance().register(SYMBOLOGY_MANAGER_NAME,
+				SYMBOLOGY_MANAGER_DESCRIPTION, clazz);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLibrary.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {gvSIG}  {{Task}}
+ */
+package org.gvsig.symbology;
+
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for the Basic Symbology extended API.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class SymbologyLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(SymbologyLibrary.class);
+        require(MapContextLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+		// Nothing to do
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+		// Validate there is any implementation registered.
+		SymbologyManager manager = SymbologyLocator.getSymbologyManager();
+		if (manager == null) {
+			throw new ReferenceNotRegisteredException(
+					SymbologyLocator.SYMBOLOGY_MANAGER_NAME,
+					SymbologyLocator.getInstance());
+		}
+
+		MapContextManager mapContextManager = MapContextLocator
+				.getMapContextManager();
+
+		// Default vector legend
+		mapContextManager
+				.setDefaultVectorLegend(ISingleSymbolLegend.LEGEND_NAME);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.symbology package documentation</title>
+</head>
+<body>
+
+	<p>Symbology library API.</p>
+	
+	<p>
+	It allows to get new Symbology and get their text.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyManager.java	(revision 42196)
@@ -0,0 +1,152 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.symbology;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collection;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClassFactory;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IBackgroundFileStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.IAttrInTableLabelingStrategy;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.IMultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IMarkerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IPictureFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.ISimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.IPictureLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ISimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IArrowDecoratorStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ISimpleLineStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
+
+/**
+ * Basic symbology manager.
+ *
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public interface SymbologyManager {
+
+    /**
+     * Creates a new interval with the given limit values
+     *
+     * @param min the minimum included interval value
+     * @param max the maximum included interval value
+     * @return a new interval
+     */
+    IInterval createInterval(double min, double max);
+
+    IArrowDecoratorStyle createArrowDecoratorStyle();
+
+//	IMarkerSymbol createMarkerSymbol();
+    ISimpleMarkerSymbol createSimpleMarkerSymbol();
+
+    IMask createMask();
+
+    IMultiShapeSymbol createMultiShapeSymbol();
+
+    ISimpleFillSymbol createSimpleFillSymbol();
+
+    ISimpleLineSymbol createSimpleLineSymbol();
+
+    ISimpleLineStyle createSimpleLineStyle();
+
+    ISimpleTextSymbol createSimpleTextSymbol();
+
+    IMarkerFillPropertiesStyle createSimpleMarkerFillPropertiesStyle();
+
+    IBackgroundFileStyle createBackgroundFileStyle(URL imgURL) throws IOException;
+
+    IPictureFillSymbol createPictureFillSymbol(URL imageURL, URL selImageURL) throws IOException;
+
+    IPictureLineSymbol createPictureLineSymbol(URL imageURL, URL selImageURL) throws IOException;
+
+    IPictureMarkerSymbol createPictureMarkerSymbol(URL imageURL, URL selImageURL) throws IOException;
+
+    IMarkerFillSymbol createMarkerFillSymbol();
+
+    IAttrInTableLabelingStrategy createAttrInTableLabelingStrategy();
+
+    ILabelStyle createDefaultLabelStyle();
+
+    ILabelingStrategy createDefaultLabelingStrategy();
+
+    ILabelingMethod createDefaultLabelingMethod();
+
+    IZoomConstraints createDefaultZoomConstraints();
+
+    public void registerLabelClass(ILabelClassFactory factory);
+
+    public Collection<ILabelClassFactory> getLabelClassFactories();
+
+    public ILabelClassFactory getLabelClassFactory(String id);
+
+    /**
+     * Creates an instance of a class (provided by this manager) which
+     * implements ILabelClass.
+     *
+     */
+    ILabelClass createDefaultLabel();
+    
+    public ILabelClassFactory getDefaultLabelFactory();
+
+    public void setDefaultLabelFactory(String id);
+
+    public void setDefaultLabelFactory(ILabelClassFactory factory);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/src/main/java/org/gvsig/symbology/SymbologyManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/pom.xml	(revision 42196)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.lib.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+        </configuration>
+        <executions>
+          <!-- Generates a jar file only with the test classes -->
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/pom.xml	(revision 42196)
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.swing.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology.swing</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.control</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>castor</groupId>
+        <artifactId>castor</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-gvt</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.xmlgraphics</groupId>
+        <artifactId>batik-bridge</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-script</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-ext</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>xml-apis</groupId>
+        <artifactId>xml-apis-ext</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+        </configuration>
+        <executions>
+          <!-- Generates a jar file only with the test classes -->
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.symbology.swing.SymbologySwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-move-up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-move-up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-add.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-add.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-move-down.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-move-down.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-unlock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-unlock.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-remove.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/symbol/symbol-layer-remove.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/librarybrowser/librarybrowser-folder-image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/librarybrowser/librarybrowser-folder-image.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/librarybrowser/librarybrowser-folder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/librarybrowser/librarybrowser-folder.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/librarybrowser/librarybrowser-folder-documents.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/librarybrowser/librarybrowser-folder-documents.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/style/image-keep-ratio-disabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/style/image-keep-ratio-disabled.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/style/image-keep-ratio-enabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/resources/images/style/image-keep-ratio-enabled.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/panels/ImageSizePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/panels/ImageSizePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/panels/ImageSizePanel.java	(revision 42196)
@@ -0,0 +1,207 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+
+import javax.swing.Icon;
+import javax.swing.JPanel;
+import javax.swing.JToggleButton;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class ImageSizePanel extends JPanel implements KeyListener, MouseListener, ActionListener, FocusListener{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4810686805894198593L;
+	private static final Icon iconSelected =
+			IconThemeHelper.getImageIcon("image-keep-ratio-enabled");
+	private static final Icon iconUnselected =
+			IconThemeHelper.getImageIcon("image-keep-ratio-disabled");
+
+	private JNumberSpinner widthTxt;
+	private JNumberSpinner heightTxt;
+	private double width, height;
+	private JToggleButton lock;
+	private double ratio;
+	private boolean performing;
+	private boolean locked = true;
+	private ArrayList<ActionListener> listeners = new ArrayList<ActionListener>();
+	
+	public ImageSizePanel(){
+		super();
+		initialize();
+	}
+
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+		final GridBagLayoutPanel aux = new GridBagLayoutPanel();
+		setLayout(new BorderLayout());
+		aux.addComponent(Messages.getText("width")+":",
+				widthTxt  = new JNumberSpinner(0, 5, 0, Double.MAX_VALUE, 1));
+		aux.addComponent(Messages.getText("height")+":",
+				heightTxt = new JNumberSpinner(0, 5, 0, Double.MAX_VALUE, 1));
+		setLayout(new BorderLayout());
+		add(aux, BorderLayout.CENTER);
+		JPanel lockPanel = new JPanel(null) {
+			private static final long serialVersionUID = -415551033800811412L;
+			protected void paintComponent(Graphics g) {
+				int y1 = widthTxt.getY() + widthTxt.getHeight()/2-3;
+				int y2 = heightTxt.getY() + heightTxt.getHeight()/2+3;
+				g.setColor(Color.DARK_GRAY);
+				g.drawLine(2, y1, getWidth()/2+2, y1);
+				g.drawLine(getWidth()/2+2, y1, getWidth()/2+2, y2);
+				g.drawLine(2, y2, getWidth()/2+2, y2);
+				lock.setBounds(3, widthTxt.getY()+13, getWidth()-2, 22);
+			}
+		};
+		lockPanel.setPreferredSize(new Dimension(20, 20));
+		lock = new JToggleButton() {
+			private static final long serialVersionUID = 1668046192113822412L;
+			protected void paintComponent(Graphics g) {
+				setIcon(isSelected() ? iconSelected : iconUnselected);
+				super.paintComponent(g);
+			}
+		};
+		lock.setSelected(locked);
+		lockPanel.add(lock);
+		add(lockPanel, BorderLayout.EAST);
+		widthTxt.addKeyListener(this);
+		widthTxt.addMouseListener(this);
+		widthTxt.addActionListener(this);
+		widthTxt.addFocusListener(this);
+		heightTxt.addKeyListener(this);
+		heightTxt.addMouseListener(this);
+		heightTxt.addActionListener(this);
+		heightTxt.addFocusListener(this);
+
+		lock.addMouseListener(this);
+	}
+
+	public void setImageSize(double width, double height) {
+		this.width = width;
+		widthTxt.setDouble(width);
+		this.height = height;
+		heightTxt.setDouble(height);
+		this.ratio = width / height;
+	}
+	
+	public void setImageSize(Dimension sz) {
+		setImageSize(sz.getWidth(), sz.getHeight());
+	}
+	
+
+	public double[] getImageDimension() {
+		double[] d = new double[2];
+		d[0] = width;
+		d[1] = height;
+		return d;
+	}
+
+	public void addActionListener(ActionListener l) {
+		listeners.add(l);
+	}
+
+	public void keyPressed(KeyEvent e) { doIt(); }
+	public void keyReleased(KeyEvent e) { doIt(); }
+	public void keyTyped(KeyEvent e) { doIt(); }
+	public void mouseClicked(MouseEvent e) { e.consume(); doIt(); }
+	public void actionPerformed(ActionEvent e) { doIt(); }
+
+	private void doIt() {
+		if (!performing) {
+			performing = true;
+			if (locked != lock.isSelected()) {
+				locked = lock.isSelected();
+				ratio = widthTxt.getDouble() / heightTxt.getDouble();
+			} else if (locked && width != widthTxt.getDouble()){
+				width = widthTxt.getDouble();
+				height = width/ratio;
+				height = Math.round(height*100)/100;
+				heightTxt.setDouble(height);
+				fireActionPerformed();
+			} else if (locked && height != heightTxt.getDouble()) {
+				height = heightTxt.getDouble();
+				width = height*ratio;
+				width = Math.round(width*100)/100;
+				widthTxt.setDouble(width);
+				fireActionPerformed();
+
+			}
+
+			performing = false;
+		}
+	}
+
+
+	private void fireActionPerformed() {
+		for (int i = 0; i < listeners.size(); i++) {
+			((ActionListener) listeners.get(i)).actionPerformed(
+					new ActionEvent(this, 0, "IMAGE_RESIZED"));
+		}
+	}
+
+
+	public void mouseEntered(MouseEvent e) { /* nothing */ }
+	public void mouseExited(MouseEvent e) { /* nothing */ }
+	public void mousePressed(MouseEvent e) {  /* nothing */ }
+	public void mouseReleased(MouseEvent e) {  /* nothing */ }
+
+
+	public void focusGained(FocusEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+
+
+	public void focusLost(FocusEvent arg0) {
+		doIt();
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/panels/ImageSizePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxColorScheme.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxColorScheme.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxColorScheme.java	(revision 42196)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+
+import org.gvsig.gui.ColorTablePainter;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+
+
+/**
+ * Creates a JComboBox where the user has the option to select different
+ * colors.
+ *
+ * @autor jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class JComboBoxColorScheme extends JComboBox {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -749998859270723991L;
+	private String palettesPath = System.getProperty("user.home") +
+	File.separator +
+	"gvSIG" +
+	File.separator +
+	"ColorSchemes";
+//	private boolean interpolated = false;
+	private List<ColorTablePainter> colorTables = new ArrayList<ColorTablePainter>();
+
+	private ActionListener innerActionUpdateTooltip = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			ColorTablePainter colorTable = (ColorTablePainter)getSelectedItem();
+			if (colorTable != null) {
+				setToolTipText(colorTable.getTableName());
+			} else {
+				setToolTipText(Messages.getText("select_a_color_scheme"));
+			}
+		}
+	};
+	
+	/**
+	 * Constructor method
+	 *
+	 * @param interpolateValues
+	 */
+	public JComboBoxColorScheme(boolean interpolateValues) {
+		super();
+//		interpolated = interpolateValues;
+		setPreferredSize(new Dimension(150, 20));
+		
+		List<ColorTablePainter> colorTables = SymbologySwingLocator.getSwingManager().createColorTables();
+		if(colorTables != null){
+			for (int i=0; i<colorTables.size(); i++) {
+				ColorTablePainter colorTable = colorTables.get(i);
+//				ArrayList array = new ArrayList();
+//				array.add(colorTable.getTableName());
+//				array.add(colorTable);
+//				addItem(array);
+				addItem(colorTable);
+			}
+			addActionListener(innerActionUpdateTooltip);
+			setRenderer(new ListCellRenderer() {
+				public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+					ColorTablePainter colorTable = (ColorTablePainter) value;
+					ColorSchemeItemPainter paintItem = new ColorSchemeItemPainter(colorTable.getTableName(), colorTable, isSelected);
+					paintItem.setPreferredSize(getPreferredSize());
+					return paintItem;
+				}
+			});
+		}
+
+	}
+
+	/**
+	 * Returns an array composed with the selected colors
+	 * @return
+	 */
+	public Color[] getSelectedColors() {
+		ColorTablePainter colorTable = (ColorTablePainter) getSelectedItem();
+		if (colorTable == null) {
+			return null;
+		}
+		return colorTable.getColors();
+	}
+
+	public void setSelectedColors(Color[] colors) {
+
+		colorTables.clear();
+		if (colors == null) {
+			setSelectedIndex(0);
+			return;
+		} else {
+			for (int i = 0; i < getItemCount(); i++) {
+				colorTables.add((ColorTablePainter) getItemAt(i));
+			}
+
+			for (int i = 0; i < colorTables.size(); i++) {
+				ColorTablePainter colorTable = colorTables.get(i);
+				Color[] myColors = colorTable.getColors();
+
+				boolean isEqual = true;
+				if(myColors.length == colors.length) {
+					for (int j = 0; isEqual && j < myColors.length; j++) {
+						Color c1 = myColors[j];
+						Color c2 = colors[j];
+						isEqual = c1.getRGB() == c2.getRGB() && c1.getAlpha() == c2.getAlpha();
+					}
+					if(isEqual) {
+						setSelectedIndex(i);
+						repaint();
+						return;
+					}
+				}
+			}
+			if(getItemCount()> 0) {
+				setSelectedItem(0);
+			}
+		}
+
+	}
+
+
+	private class ColorSchemeItemPainter extends JComponent {
+		private static final long serialVersionUID = -6448740563809113949L;
+		private boolean isSelected = false;
+		private ColorTablePainter colorTablePaint = null;
+		/**
+		 * Constructor method
+		 *
+		 * @param name
+		 * @param colorTablePaint
+		 * @param isSelected
+		 */
+		public ColorSchemeItemPainter(String name, ColorTablePainter colorTablePaint, boolean isSelected) {
+			super();
+			this.colorTablePaint = colorTablePaint;
+			this.isSelected = isSelected;
+			setToolTipText(name);
+		}
+
+		public void paintComponent(Graphics g) {
+			Graphics2D g2 = (Graphics2D) g;
+			if (isSelected) {
+				Color color1 = new Color(89, 153, 229);
+				Color color2 = new Color(31, 92, 207);
+				g2.setPaint(new GradientPaint(0, 1, color1, 0, getHeight() - 1, color2, false));
+				g2.fillRect(0, 1, getWidth(), getHeight() - 1);
+				g2.setColor(new Color(61, 123, 218));
+				g2.drawLine(0, 0, getWidth(), 0);
+				g2.setColor(Color.white);
+			} else {
+				g2.setColor(Color.white);
+				g2.fillRect(0, 0, getWidth(), getHeight());
+				g2.setColor(Color.black);
+			}
+
+			colorTablePaint.paint(g2, isSelected);
+		}
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxColorScheme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleEditor.java	(revision 42196)
@@ -0,0 +1,299 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import javax.swing.AbstractButton;
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Implements the panel which is composed by a previsualization of the style for the label
+ * and the different tools that the user has to modify that style in order to improve the
+ * representation of the labelling in the layer. The different available tools and the preview
+ * of the style change according with the geometry of the layer.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class StyleEditor extends JPanel implements IWindow, ActionListener {
+	private static final long serialVersionUID = -4002620456610864510L;
+	private JPanel pnlNorth = null;
+	private JPanel jPanel = null;
+	private JPanel pnlCenter = null;
+	private AcceptCancelPanel pnlButtons = null;
+	private JLabel lblTitle;
+	private StylePreviewer preview;
+	private JPanel pnlTools;
+	private JTextField txtDesc;
+	private Hashtable<AbstractButton, EditorTool> tools = new Hashtable<AbstractButton, EditorTool>();
+	private static ArrayList<Class> installedTools = new ArrayList<Class>();
+	private EditorTool prevTool;
+
+	private ActionListener okAction = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			PluginServices.getMDIManager().closeWindow(StyleEditor.this);
+		}
+	};
+
+	private ActionListener cancelAction = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			getStylePreviewer().setStyle(null);
+			PluginServices.getMDIManager().closeWindow(StyleEditor.this);
+		};
+	};
+	/**
+	 * Constructor method
+	 *
+	 * @param style, an specific style for the labelling of the layer.This style depends on the
+	 * geometry of the layer.
+	 *
+	 */
+	public StyleEditor(IStyle style) {
+		if (style!=null) {
+			IStyle sty=null;
+			try {
+				sty = (IStyle) style.clone(); 
+			} catch (CloneNotSupportedException e) {
+				NotificationManager.addWarning("Symbol layer", e);
+			}
+			getStylePreviewer().setStyle(sty);
+			String desc = sty.getDescription();
+			getTxtDesc().setText(desc);
+		} else {
+			getTxtDesc().setText(Messages.getText("new_style"));
+		}
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(417,284);
+        this.add(getPnlNorth(), java.awt.BorderLayout.NORTH);
+        this.add(getPnlCenter(), java.awt.BorderLayout.CENTER);
+        this.add(getPnlButtons(), java.awt.BorderLayout.SOUTH);
+
+	}
+	/**
+	 * Sets the previewer of the style in the panel
+	 *
+	 * @param sty, style to be previewed
+	 *
+	 */
+	public void setStyle(IStyle sty) {
+		preview.setStyle(sty);
+	}
+
+	/**
+	 * This method initializes the north JPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlNorth() {
+		if (pnlNorth == null) {
+			pnlNorth = new JPanel(new FlowLayout(FlowLayout.LEADING));
+			lblTitle = new JLabel(Messages.getText("Nombre"));
+			pnlNorth.add(lblTitle);
+			pnlNorth.add(getTxtDesc());
+		}
+		return pnlNorth;
+	}
+
+	/**
+	 * This method initializes the textDesc JTextfield
+	 *
+	 * @return javax.swing.JTextfield
+	 */
+	private JTextField getTxtDesc() {
+		if (txtDesc == null) {
+			txtDesc = new JTextField(30);
+			txtDesc.addActionListener(this);
+
+		}
+
+		return txtDesc;
+	}
+
+	/**
+	 * This method initializes the center JPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlCenter() {
+		if (pnlCenter == null) {
+			pnlCenter = new JPanel(new BorderLayout());
+			JPanel aux = new JPanel();
+			aux.add(getStylePreviewer());
+			pnlCenter.add(getStylePreviewer(), BorderLayout.CENTER);
+			pnlCenter.add(getPnlTools(), BorderLayout.EAST);
+		}
+		return pnlCenter;
+	}
+	/**
+	 * This method initializes the StylePreviewer
+	 *
+	 * @return StylePreviewer for the label
+	 */
+	public StylePreviewer getStylePreviewer() {
+		if (preview == null) {
+			preview = new StylePreviewer();
+			preview.setShowOutline(true);
+		}
+
+		return preview;
+	}
+
+	/**
+	 * This method initializes pnlButtons JPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlButtons() {
+		if (pnlButtons == null) {
+			pnlButtons = new AcceptCancelPanel(okAction, cancelAction);
+		}
+		return pnlButtons;
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+		wi.setTitle(Messages.getText("edit_style"));
+		wi.setWidth(getWidth()+10);
+		wi.setHeight(getHeight());
+		return wi;
+	}
+
+	/**
+	 * Obtains the style for the label
+	 *
+	 * @return IStyle
+	 */
+	public IStyle getStyle() {
+		IStyle style = getStylePreviewer().getStyle();
+		if (style != null) {
+			style.setDescription(txtDesc.getText());
+		}
+		return style;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		AbstractButton srcButton = (AbstractButton) e.getSource();
+		EditorTool currTool = tools.get(srcButton);
+		if (currTool != null) {
+			prevTool = preview.setEditorTool(currTool);
+		}
+	}
+	/**
+	 * This method initializes pnlTools JPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlTools() {
+		if (pnlTools == null) {
+			pnlTools = new JPanel();
+			pnlTools.setBorder(BorderFactory.createTitledBorder(Messages.getText("tools")));
+			pnlTools.setLayout(new BoxLayout(pnlTools, BoxLayout.Y_AXIS));
+
+			ArrayList<EditorTool> availableTools = new ArrayList<EditorTool>();
+			IStyle sty = preview.getStyle();
+			Class<?> editorClazz = null;
+			Class[] constrLocator = new Class[] {JComponent.class};
+			Object[] constrInitargs = new Object[] { this };
+			try {
+				for (Iterator<Class> iterator = installedTools.iterator(); iterator
+				.hasNext();) {
+					editorClazz = iterator.next();
+					Constructor<EditorTool> constructor = (Constructor<EditorTool>) editorClazz.getConstructor(constrLocator);
+					EditorTool editorTool = constructor.newInstance(constrInitargs);
+					if (editorTool.isSuitableFor(sty)) {
+						editorTool.setModel(sty);
+						availableTools.add(editorTool);
+					}
+
+				}
+
+				ButtonGroup group = new ButtonGroup();
+				for (Iterator<EditorTool> iterator = availableTools.iterator();
+				iterator.hasNext();) {
+					EditorTool editorTool = iterator.next();
+					AbstractButton button = editorTool.getButton();
+					button.addActionListener(this);
+					pnlTools.add(button);
+					group.add(button);
+
+					tools.put(button, editorTool);
+
+				}
+			} catch (Exception e) {
+				NotificationManager.addWarning(Messages.getText("could_not_initialize_editor_")+"'"+editorClazz+"'"+
+						" ["+new Date(System.currentTimeMillis()).toString()+"]");
+			}
+		}
+		return pnlTools;
+	}
+	/**
+	 * Sets the tool to be used with the previous one
+	 *
+	 */
+	public void restorePreviousTool() {
+		preview.setEditorTool(prevTool);
+	}
+	/**
+	 * Adds a new tool for the style
+	 *
+	 * @param styleEditorClass, the new tool to be added
+	 */
+	public static void addEditorTool(Class styleEditorClass) {
+		installedTools.add(styleEditorClass);
+	}
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorBrowser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorBrowser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorBrowser.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * Same as symbol selector but does not
+ * ass Accept/Cancel button
+ * 
+ * Containing wizard will have a 'Close' button
+ * or similar 
+ * @author jldominguez
+ *
+ */
+public class SymbolSelectorBrowser extends SymbolSelector {
+    
+    public SymbolSelectorBrowser(GeometryType shpt, boolean init)
+    		throws IllegalArgumentException {
+        
+        super(null, shpt, init);
+    }
+    
+    /**
+     * Same as the symbol selector but without the accept/cancel
+     * panel
+     *
+     */
+    protected void initialize(Object currentElement) throws IllegalArgumentException {
+        library = new SymbolLibrary(rootDir);
+
+        this.setLayout(new BorderLayout());
+        this.setSize(400, 221);
+
+        this.add(getJNorthPanel(), BorderLayout.NORTH);
+        this.add(getJSplitPane(), BorderLayout.CENTER);
+        this.add(getJEastPanel(), BorderLayout.EAST);
+
+        libraryBrowser.setSelectionRow(0);
+
+        SillyDragNDropAction dndAction = new SillyDragNDropAction();
+        libraryBrowser.addMouseListener(dndAction);
+        libraryBrowser.addMouseMotionListener(dndAction);
+        getJListSymbols().addMouseListener(dndAction);
+        getJListSymbols().addMouseMotionListener(dndAction);
+        setSymbol(currentElement);
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorBrowser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolEditor.java	(revision 42196)
@@ -0,0 +1,611 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.gui.JComboBoxUnits;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+
+/**
+ * Creates the panel that is used to control the properties of a symbol in
+ * order to modify or check them and to create a new one.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class SymbolEditor extends JPanel implements IWindow {
+	private static final long serialVersionUID = 9209260593958625497L;
+	
+	private static final GeometryManager GEOMETRY_MANAGER = 
+	    GeometryLocator.getGeometryManager();
+	
+	private static final Logger LOG =
+	    LoggerFactory.getLogger(SymbolEditor.class);
+	
+	private WindowInfo wi;
+	private JPanel pnlWest = null;
+	private JPanel pnlCenter = null;
+	private JPanel pnlPreview = null;
+	private JPanel pnlLayers = null;
+	private AcceptCancelPanel okCancelPanel;
+	private ISymbol symbol;
+	private SymbolPreviewer symbolPreview = null;
+	private JPanel pnlTypeAndUnits = null;
+	private JComboBox cmbType;
+	private JComboBoxUnits cmbUnits;
+	private JTabbedPane tabbedPane = null;
+	private GeometryType shapeType;
+	private ActionListener cmbTypeActionListener;
+
+	private AbstractTypeSymbolEditor[] tabs;
+	private SymbolLayerManager layerManager;
+	private boolean replacing = false;
+	private JComboBoxUnitsReferenceSystem cmbUnitsReferenceSystem;
+	
+	private ISymbol oldSymbol;
+	
+	private MapContextManager mapContextManager = MapContextLocator
+			.getMapContextManager();
+	
+	
+	public SymbolEditor(ISymbol symbol, GeometryType geometryType) {
+	    super();
+	    initialize(symbol, geometryType);
+	}	
+	
+	public SymbolEditor(ISymbol symbol, int shapeType) {
+	    super();
+	    try {
+            GeometryType geometryType = GEOMETRY_MANAGER.getGeometryType(shapeType, SUBTYPES.GEOM2D);
+            initialize(symbol, geometryType);
+        } catch (GeometryTypeNotSupportedException e1) {
+            LOG.error("Impossible to get the geometry type", e1);
+        } catch (GeometryTypeNotValidException e1) {
+            LOG.error("Impossible to get the geometry type", e1);
+        }	   
+	}   
+	    
+	
+	/**
+	 * Constructor method
+	 *
+	 * @param symbol ISymbol
+	 * @param shapeType int
+	 */
+	private void initialize(ISymbol symbol, GeometryType shapeType) {
+//////////	/-------------------------------------
+//      removing the Geometry.TYPES.TEXT: this code can not be executed
+//		if (shapeType == Geometry.TYPES.TEXT) {
+////			this.symbol = symbol == null ? new SimpleTextSymbol(): symbol;
+//			this.symbol = symbol == null ? SymbologyLocator.getSymbologyManager().createSimpleTextSymbol(): symbol;
+//		} else {
+//////////	/-------------------------------------
+
+			if (!(symbol instanceof IMultiLayerSymbol)) {
+				// this is a simple symbol (or null one); it will be
+				// converted to a multilayer one to accept layer addition
+				IMultiLayerSymbol nSym =
+						mapContextManager.getSymbolManager()
+						.createMultiLayerSymbol(shapeType.getType());
+
+//				if (!(symbol instanceof FSymbol)) {
+					nSym.addLayer(symbol);
+//				}
+
+				if (symbol instanceof CartographicSupport) {
+					CartographicSupport cs = (CartographicSupport) symbol;
+					CartographicSupport nCs = (CartographicSupport) nSym;
+					nCs.setReferenceSystem(cs.getReferenceSystem());
+					nCs.setUnit(cs.getUnit());
+				}
+
+				this.symbol = nSym;
+			} else {
+				this.symbol = symbol;
+			}
+
+			// apply units and reference system to comboboxes
+			if (this.symbol instanceof CartographicSupport) {
+				CartographicSupport cs = (CartographicSupport) this.symbol;
+				getCmbUnits().setSelectedUnitIndex(cs.getUnit());
+				getCmbUnitsReferenceSystem().
+					setSelectedIndex(cs.getReferenceSystem());
+
+			}
+
+//		}
+		try {
+			this.oldSymbol = (ISymbol) this.symbol.clone();
+		} catch (CloneNotSupportedException e) {
+			NotificationManager.addWarning("Symbol layer", e);
+		}
+		this.shapeType = shapeType;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+                SymbologySwingManager symbologySwingManager = SymbologySwingLocator.getSwingManager();
+		cmbTypeActionListener = new ActionListener() {
+			int prevIndex = -2;
+
+			public void actionPerformed(ActionEvent e) {
+				int index = getCmbType().getSelectedIndex();
+				if (prevIndex != index) {
+					// needs to refresh
+					prevIndex = index;
+
+					AbstractTypeSymbolEditor options = (AbstractTypeSymbolEditor) getCmbType()
+							.getSelectedItem();
+
+//////////			/-------------------------------------
+					if (layerManager!=null) {
+//////////			/-------------------------------------
+							ISymbol l = layerManager.getSelectedLayer();
+
+						// if the symbol is not null and is it managed by the "options" class
+						// refresh the controls
+						if (l != null
+//								&& l.getClass().equals(options.getSymbolClass())) {
+								&& options.canManageSymbol(l)) {
+							if (l instanceof CartographicSupport) {
+								CartographicSupport cs = (CartographicSupport) l;
+								getCmbUnits().setSelectedUnitIndex(cs.getUnit());
+								getCmbUnitsReferenceSystem().setSelectedIndex(cs.getReferenceSystem());
+							}
+							options.refreshControls(l);
+						}
+
+						replaceOptions(options);
+//////////			/-------------------------------------
+					} else {
+						replaceOptions(options);
+					}
+//////////			/-------------------------------------
+
+				}
+			}
+		};
+
+		Comparator tabComparator = new Comparator() {
+			public int compare(Object o1, Object o2) {
+				AbstractTypeSymbolEditor pnl1 = (AbstractTypeSymbolEditor) o1;
+				AbstractTypeSymbolEditor pnl2 = (AbstractTypeSymbolEditor) o2;
+				int result = pnl1.getName().compareTo(pnl2.getName());
+				return result;
+			}
+		};
+
+
+		TreeSet set = new TreeSet(tabComparator);
+		List editors = symbologySwingManager.getSymbolEditorClassesByGeometryType(shapeType);
+		Class[] constrLocator = new Class[] {SymbolEditor.class};
+		Object[] constrInitargs = new Object[] { this };
+		for (int i = 0; i < editors.size(); i++) {
+			Class editorClass = (Class) editors.get(i);
+			try {
+				Constructor c = editorClass.getConstructor(constrLocator);
+				AbstractTypeSymbolEditor instance = (AbstractTypeSymbolEditor) c.newInstance(constrInitargs); 
+				set.add(instance);
+			} catch (Exception e) {
+				NotificationManager.addError(Messages.getText("failed_installing_symbol_editor")+" "
+						+editorClass.getName(), e);
+			}
+		};
+ 		tabs = (AbstractTypeSymbolEditor[]) set
+				.toArray(new AbstractTypeSymbolEditor[0]);
+
+		this.setLayout(new BorderLayout());
+		this.add(getPnlWest(), BorderLayout.WEST);
+		this.add(getPnlCenter(), BorderLayout.CENTER);
+		this.add(getOkCancelPanel(), BorderLayout.SOUTH);
+
+		cmbTypeActionListener.actionPerformed(null);
+		refresh();
+	}
+	/**
+	 * Returns an array of tabs. The value of this array will depend on the
+	 * symbol selected. For example, if the symbol is composed by lines this
+	 * method will return tha tabs that allow the user to modify a simple line
+	 * symbol(in this case simple line and arrow decorator tabs)
+	 * @param sym
+	 * @return tabs[] AbstractTypeSymbolEditor[]
+	 */
+	private AbstractTypeSymbolEditor getOptionsForSymbol(ISymbol sym) {
+		if (sym == null) {
+			return tabs[0];
+		}
+		for (int i = 0; i < tabs.length; i++) {
+//			if (tabs[i].getSymbolClass().equals(sym.getClass())) {
+			if (tabs[i].canManageSymbol(sym)) {
+				return tabs[i];
+			}
+		}
+		return tabs[0];
+	}
+	/**
+	 * Initializes the OkCancel panel where the accept and cancel buttons
+	 * will be placed
+	 * @return okCancelPanel AcceptCancelPanel
+	 */
+	private AcceptCancelPanel getOkCancelPanel() {
+		if (okCancelPanel == null) {
+			ActionListener action = new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					if ("CANCEL".equals(e.getActionCommand())) {
+						symbol = oldSymbol;
+					}
+					PluginServices.getMDIManager().closeWindow(
+							SymbolEditor.this);
+				}
+			};
+			okCancelPanel = new AcceptCancelPanel(action, action);
+		}
+		return okCancelPanel;
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (wi == null) {
+			wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+			wi.setWidth(650);
+			wi.setHeight(400);
+			wi.setTitle(Messages.getText("symbol_property_editor"));
+		}
+		return wi;
+	}
+
+	public ISymbol getSymbol() {
+		if (symbol instanceof CartographicSupport) {
+			CartographicSupport cs = (CartographicSupport) symbol;
+			cs.setUnit(getUnit());
+			cs.setReferenceSystem(getReferenceSystem());
+		}
+//
+//		if (symbol instanceof MultiLayerLineSymbol) {
+//			MultiLayerLineSymbol mLineSym = (MultiLayerLineSymbol) symbol;
+//			double lineWidth = 0;
+//			for (int i = 0; i < mLineSym.getLayerCount(); i++) {
+//				lineWidth = Math.max(lineWidth, ((ILineSymbol) mLineSym.getLayer(i)).getLineWidth());
+//			}
+//
+//			if (mLineSym.getLineWidth() != lineWidth)
+//				mLineSym.setLineWidth(lineWidth);
+//		}
+		return symbol;
+	}
+	/**
+	 * Initializes the west panel
+	 * @return
+	 */
+	private JPanel getPnlWest() {
+		if (pnlWest == null) {
+			pnlWest = new JPanel();
+			pnlWest.setLayout(new BorderLayout());
+			pnlWest.add(getPnlPreview(), java.awt.BorderLayout.NORTH);
+//////////	/-------------------------------------
+			if (symbol instanceof IMultiLayerSymbol) {
+//////////		/-------------------------------------
+
+
+				pnlWest.add(getPnlLayers(), java.awt.BorderLayout.SOUTH);
+
+//////////		/-------------------------------------
+			} // otherwise, no layer manager needed
+//////////	/-------------------------------------
+		}
+		return pnlWest;
+	}
+	/**
+	 * Initializes the center panel that shows the properties of a symbol.
+	 *
+	 * @return pnlCenter JPanel
+	 */
+	private JPanel getPnlCenter() {
+		if (pnlCenter == null) {
+			pnlCenter = new JPanel(new BorderLayout());
+			pnlCenter.setBorder(BorderFactory.createTitledBorder(null,
+					Messages.getText("properties")));
+			pnlCenter.add(getPnlTypeAndUnits(), java.awt.BorderLayout.NORTH);
+		}
+		return pnlCenter;
+	}
+	/**
+	 * Initializes the preview panel that allows the user to see a previsualization
+	 * of the final symbol
+	 *
+	 * @return pnlPreview JPanel
+	 */
+	private JPanel getPnlPreview() {
+		if (pnlPreview == null) {
+			pnlPreview = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5));
+			pnlPreview.setBorder(BorderFactory.createTitledBorder(null,
+					Messages.getText("preview")));
+			pnlPreview.add(getSymbolPreviewer());
+		}
+		return pnlPreview;
+	}
+	/**
+	 * Initializes the Layers panel that shows the different layers created that
+	 * compose a symbol.
+	 * @return pnlLayers JPanel
+	 */
+	private JPanel getPnlLayers() {
+		if (pnlLayers == null) {
+			pnlLayers = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5));
+			pnlLayers.setBorder(BorderFactory.createTitledBorder(null,
+					Messages.getText("layers")));
+			pnlLayers.add(getLayerManager());
+		}
+		return pnlLayers;
+	}
+	/**
+	 * Obtains the layer manager used in the panel that shows the different layers
+	 * that compose the symbol.
+	 *
+	 * @return layerManager SymbolLayerManager
+	 */
+	private SymbolLayerManager getLayerManager() {
+		if (layerManager == null) {
+			layerManager = new SymbolLayerManager(this);
+		}
+		return layerManager;
+	}
+	/**
+	 * Obtains the symbol previewer used in the panel that shows the previsualization
+	 * of the final symbol.
+	 *
+	 * @return symbolPreview getSymbolPreviewer
+	 */
+	private SymbolPreviewer getSymbolPreviewer() {
+		if (symbolPreview == null) {
+			symbolPreview = new SymbolPreviewer();
+			symbolPreview.setPreferredSize(new Dimension(150, 100));
+
+		}
+		return symbolPreview;
+	}
+	/**
+	 * Initializes the type and units panel where two Jcomboboxes will be placed
+	 * in order to change the type and the units used in the map.
+	 *
+	 * @return pnlTypeAndUnits JPanel
+	 */
+	private JPanel getPnlTypeAndUnits() {
+		if (pnlTypeAndUnits == null) {
+			pnlTypeAndUnits = new JPanel();
+			pnlTypeAndUnits.setLayout(new BorderLayout());
+			JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING));
+			aux.add(new JLabel(Messages.getText("type")));
+			aux.add(getCmbType());
+			pnlTypeAndUnits.add(aux, BorderLayout.WEST);
+
+			aux = new JPanel(new FlowLayout(FlowLayout.LEADING));
+			aux.add(new JLabel(Messages.getText("units")));
+			aux.add(getCmbUnits());
+			aux.add(getCmbUnitsReferenceSystem());
+			pnlTypeAndUnits.add(aux, BorderLayout.EAST);
+
+		}
+		return pnlTypeAndUnits;
+	}
+	/**
+	 * Obtains the JCombobox to select the reference unit to be used in the
+	 * final representation of the map in this case there are two options (in
+	 * the paper and in the map).
+	 * @return
+	 */
+	private JComboBoxUnitsReferenceSystem getCmbUnitsReferenceSystem() {
+		if (cmbUnitsReferenceSystem == null) {
+			cmbUnitsReferenceSystem = new JComboBoxUnitsReferenceSystem();
+
+		}
+
+		return cmbUnitsReferenceSystem;
+	}
+	/**
+	 * Returns the Jcombobox used to select the reference unit (centimeters,
+	 * milimeters and so on) to be used in the final representation of the map.
+	 *
+	 * @return cmbUnits JUnitsComboBox
+	 */
+	private JComboBoxUnits getCmbUnits() {
+		if (cmbUnits == null) {
+			cmbUnits = new JComboBoxUnits();
+		}
+		return cmbUnits;
+	}
+	/**
+	 * Returns the option selected in the reference unit Jcombobox
+	 *
+	 */
+	public int getUnit() {
+		return getCmbUnits().getSelectedUnitIndex();
+	}
+
+	public int getReferenceSystem() {
+		return getCmbUnitsReferenceSystem().getSelectedIndex();
+	}
+	/**
+	 * Returns the Jcombobox used in the panel to select the type of symbol.
+	 *
+	 * @return cmbType JComboBox
+	 */
+	private JComboBox getCmbType() {
+		if (cmbType == null) {
+			cmbType = new JComboBox(tabs);
+			cmbType.addActionListener(cmbTypeActionListener);
+		}
+		return cmbType;
+	}
+	/**
+	 * Sets a layer to a symbol in order to create a final symbol composed
+	 * by different layers.
+	 *
+	 * @param layer
+	 */
+	protected void setLayerToSymbol(ISymbol layer) {
+		int i = getLayerManager().getSelectedLayerIndex();
+		IMultiLayerSymbol s = (IMultiLayerSymbol) symbol;
+		if (i >= 0 && i < s.getLayerCount()) {
+			s.setLayer(s.getLayerCount() - 1 - i, layer);
+
+		}
+		refresh();
+	}
+
+	public void refresh() {
+		getSymbolPreviewer().setSymbol(symbol);
+		doLayout();
+		repaint();
+	}
+
+	/**
+	 * <p>
+	 * Returns the type of the symbol that this panels is created for.<br>
+	 * </p>
+	 * <p>
+	 * Possible values returned by this method are
+	 * <ol>
+	 * <li> <b> Geometry.TYPES.POINT </b>, for maker symbols </li>
+	 * <li> <b> Geometry.TYPES.SURFACE </b>, for fill symbols </li>
+	 * <li> <b> Geometry.TYPES.CURVE </b>, for line symbols (not yet implemented) </li>
+	 * <li> <b> Geometry.TYPES.TEXT </b>, for text symbols (not yet implemented) </li>
+	 * <li> maybe some other in the future </li>
+	 * </ol>
+	 * </p>
+	 *
+	 * @return
+	 */
+	public int getShapeType() {
+		return shapeType.getType();
+	}
+	/**
+	 * Obtains a new layer
+	 *
+	 * @return sym ISymbol
+	 */
+	public ISymbol getNewLayer() {
+		ISymbol sym = ((AbstractTypeSymbolEditor) getCmbType().getSelectedItem())
+				.getLayer();
+
+		return sym;
+	}
+
+	private void replaceOptions(AbstractTypeSymbolEditor options) {
+		if (!replacing) {
+			replacing = true;
+			if (tabbedPane != null) {
+				getPnlCenter().remove(tabbedPane);
+			}
+			JPanel[] tabs = options.getTabs();
+			tabbedPane = new JTabbedPane();
+			tabbedPane.setPreferredSize(new Dimension(300, 300));
+			for (int i = 0; i < tabs.length; i++) {
+				tabbedPane.addTab(tabs[i].getName(), tabs[i]);
+			}
+			getPnlCenter().add(tabbedPane, BorderLayout.CENTER);
+			getPnlCenter().doLayout();
+			replacing = false;
+		}
+	}
+
+
+	public void setOptionsPageFor(ISymbol symbol) {
+		AbstractTypeSymbolEditor options = getOptionsForSymbol(symbol);
+
+		options.refreshControls(symbol);
+		getCmbType().setSelectedItem(options);
+	}
+	/**
+	 * Obtains the units to be used for the reference system.
+	 *
+	 */
+	public int getUnitsReferenceSystem() {
+		return cmbUnitsReferenceSystem.getSelectedIndex();
+	}
+
+        /**
+         * @deprecated use SymblogySwingManager
+         */
+	public static void addSymbolEditorPanel(Class<? extends TypeSymbolEditor> symbolEditor, int shapeType) {
+            SymbologySwingManager manager = SymbologySwingLocator.getSwingManager();
+            manager.registerSymbolEditor(symbolEditor, shapeType);
+	}
+	
+        /**
+         * @deprecated use SymblogySwingManager
+         */
+	private static List getSymbolsByType(GeometryType geometryType){
+            SymbologySwingManager manager = SymbologySwingLocator.getSwingManager();
+            return manager.getSymbolEditorClassesByGeometryType(geometryType);
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureMarker.java	(revision 42196)
@@ -0,0 +1,348 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Point2D;
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
+
+/**
+ * PictureMarker allows the user to store and modify the properties that define a
+ * <b>picture marker symbol</b>.<p>
+ * <p>
+ * This functionality is carried out thanks to a tab (simple marker)which is
+ * included in the panel to edit the properities of a symbol (SymbolEditor)how is
+ * explained in AbstractTypeSymbolEditor.
+ * <p>
+ * First of all, in the above mentioned tab the user will have options to change
+ * the files from where the pictures for the symbol are taken (one for the symbol
+ * when it is not selected in the map and the other when it is done).<p>
+ * <p>
+ * Secondly, the user will have options to modify the pictures which had been
+ * selected before  (width and offset) .
+ *
+ *@see AbstractTypeSymbolEditor
+ *@author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class PictureMarker extends AbstractTypeSymbolEditor implements
+ActionListener {
+    
+    public static final double MARKER_IMAGE_DEFAULT_WIDTH = 18;
+    
+	protected ArrayList<JPanel> tabs = new ArrayList<JPanel>();
+	protected JNumberSpinner txtSize;
+	protected JNumberSpinner txtX;
+	protected JNumberSpinner txtY;
+	//TODO: Comentarizado hasta que mask est� acabado
+//	protected Mask mask;
+	protected JLabel lblFileName;
+	protected JLabel lblSelFileName;
+	private File picFile;
+	protected JLabel lblSize = new JLabel(Messages.getText("width")+":");
+	protected JLabel lblX = new JLabel(Messages.getText("x_offset")+":");
+	protected JLabel lblY = new JLabel(Messages.getText("y_offset")+":");
+	private JButton btn;
+	private JButton btnSel;
+
+	private ActionListener chooseAction = new ActionListener() {
+
+		public void actionPerformed(ActionEvent e) {
+
+			JLabel targetLbl;
+			if (e.getSource().equals(btn)) {
+				targetLbl = lblFileName;
+			} else {
+				targetLbl = lblSelFileName;
+			}
+			FileFilter ff = new FileFilter() {
+				public boolean accept(File f) {
+					if (f.isDirectory()) return true;
+					String fName = f.getAbsolutePath();
+					if (fName!=null) {
+						fName = fName.toLowerCase();
+						return fName.endsWith(".png")
+						|| fName.endsWith(".gif")
+						|| fName.endsWith(".jpg")
+						|| fName.endsWith(".jpeg")
+						|| fName.endsWith(".bmp")
+						|| fName.endsWith(".svg");
+					}
+					return false;
+				}
+
+				public String getDescription() {
+					return Messages.getText("bitmap_and_svg_image_files");
+				}
+			};
+			JUrlFileChooser jfc = new JUrlFileChooser(getName(), null);
+			jfc.setFileFilter(ff);
+			jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
+			jfc.setSelectedFile(picFile);
+			jfc.setMultiSelectionEnabled(false);
+			int returnVal = jfc.showOpenDialog(PictureMarker.this.owner);
+			if(returnVal == JFileChooser.APPROVE_OPTION) {
+
+				URL url = jfc.getSelectedURL();
+				if (url == null) return;
+				try {
+					targetLbl.setText(url.toURI().getPath());
+				} catch (URISyntaxException e1) {
+					NotificationManager.addWarning("URI Syntax error", e1);
+				} //.toString());
+				fireSymbolChangedEvent();
+			}
+//			if(returnVal == JFileChooser.APPROVE_OPTION) {
+//				File myFile = jfc.getSelectedFile();
+//				lastDir = jfc.getCurrentDirectory();
+//				if (myFile != null && myFile.exists()) {
+//					if (isSelection) {
+//						selPicFile = myFile;
+//					} else {
+//						picFile = myFile;
+//					}
+//					try {
+//						targetLbl.setText(myFile.toURL().toString());
+//					} catch (MalformedURLException e1) {
+//						NotificationManager.addError(PluginServices.getText(this, "Error en la creaci?n" +
+//						"de la URL"), e1);
+//					}
+//					fireSymbolChangedEvent();
+//				}
+//			}
+
+			btnSel.setEnabled(lblFileName.getText()!="");
+
+		}
+
+	};
+
+
+	public PictureMarker(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+	/**
+	 * Initializes the parameters that define a picturmarker.To do it,
+	 * a tab is created inside the SymbolEditor panel with default values
+	 *  for the different attributes of the picture marker.
+	 */
+
+	private void initialize() {
+		JPanel myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(Messages.getText("picture_marker"));
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+
+		// picture file label
+		lblFileName = new JLabel();
+		lblFileName.setFont(lblFileName.getFont().deriveFont(Font.BOLD));
+		aux.addComponent(Messages.getText("picture_file")+":",
+				lblFileName);
+
+		// button browse
+		btn = new JButton(Messages.getText("browse"));
+		btn.addActionListener(chooseAction);
+
+		JPanel aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		aux2.add(btn);
+		aux.addComponent("", aux2);
+
+		// selection picture file
+		lblSelFileName = new JLabel();
+		lblSelFileName.setFont(lblSelFileName.getFont().deriveFont(Font.BOLD));
+		aux.addComponent(Messages.getText("selection_picture_file")+":",
+				lblSelFileName);
+
+		// button browse
+		btnSel = new JButton(Messages.getText("browse"));
+		btnSel.addActionListener(chooseAction);
+		btnSel.setEnabled(false);
+		aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		aux2.add(btnSel);
+		aux.addComponent("", aux2);
+
+		// picture width
+		txtSize = new JNumberSpinner(5, 25, 0, Double.POSITIVE_INFINITY, 0.5);
+		aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		aux2.add(txtSize);
+		aux.addComponent(lblSize, aux2 );
+		txtSize.setDouble(MARKER_IMAGE_DEFAULT_WIDTH);
+
+
+		// picture xOffset
+		txtX = new JNumberSpinner(0, 25);
+		aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		aux2.add(txtX);
+		aux.addComponent(lblX, aux2);
+
+
+		// picture width
+		txtY = new JNumberSpinner(0, 25);
+		aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		aux2.add(txtY);
+		aux.addComponent(lblY,
+				aux2 );
+
+
+		// initialize defaults
+		txtSize.addActionListener(this);
+		txtX.addActionListener(this);
+		txtY.addActionListener(this);
+		// buttons have their own listener!!!!
+
+		myTab.add(aux);
+		tabs.add(myTab);
+
+//		mask = new Mask(this);
+//		tabs.add(mask);
+	}
+
+	public ISymbol getLayer() {
+		try {
+			IPictureMarkerSymbol layer = null;
+
+			if( lblFileName.getText().equals(""))
+				layer=null;
+
+			else {
+				if (lblSelFileName.getText().equals("")){
+					layer =  SymbologyLocator.getSymbologyManager().createPictureMarkerSymbol(new File(lblFileName.getText()).toURI().toURL(),null);
+				}else {
+					layer = SymbologyLocator.getSymbologyManager().createPictureMarkerSymbol(new File(lblFileName.getText()).toURI().toURL(),new File(lblSelFileName.getText()).toURI().toURL());
+				}
+//				layer.setIsShapeVisible(true); //True is the default value of this property
+				layer.setSize(txtSize.getDouble());
+				layer.setOffset(new Point2D.Double(
+					txtX.getDouble(),
+					txtY.getDouble()));
+//				layer.setMask(mask.getMask());
+			}
+
+			return layer;
+		} catch (IOException e) {
+			IWarningSymbol warning =
+				(IWarningSymbol) MapContextLocator.getSymbolManager()
+				.getWarningSymbol(
+						SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+						Messages.getText("failed_acessing_files"),
+						SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+			return warning;
+
+		}
+
+
+	}
+
+	public String getName() {
+		return Messages.getText("picture_marker_symbol");
+
+	}
+
+	public JPanel[] getTabs() {
+		return tabs.toArray(new JPanel[tabs.size()]);
+	}
+
+	public void refreshControls(ISymbol layer) {
+		IPictureMarkerSymbol sym;
+		try {
+			double size, xOffset, yOffset;
+			String fileName = null, selectionFileName = null;
+			if (layer == null) {
+				// initialize defaults
+				System.err.println(getClass().getName()+":: should be unreachable code");
+
+				size = 1D;
+				xOffset = 0D;
+				yOffset = 0D;
+				fileName = "-";
+				selectionFileName = "-";
+			} else {
+				sym = (IPictureMarkerSymbol) layer;
+
+				size = sym.getSize();
+				xOffset = sym.getOffset().getX();
+				yOffset = sym.getOffset().getY();
+
+				fileName = sym.getSource().toURI().getPath(); //.toString();
+				selectionFileName = sym.getSelectedSource().toURI().getPath(); //.toString();
+			}
+
+			setValues(size, xOffset, yOffset, fileName, selectionFileName);
+		} catch (IndexOutOfBoundsException ioEx) {
+			NotificationManager.addWarning("Symbol layer index out of bounds", ioEx);
+		} catch (ClassCastException ccEx) {
+			NotificationManager.addWarning("Illegal casting from " +
+					layer.getClass().getName() + " to IPictureMarkerSymbol.", ccEx);
+		} catch (URISyntaxException e) {
+			NotificationManager.addWarning("URI Syntax error", e);
+		}
+	}
+
+	protected void setValues(double size, double xOffset, double yOffset, String fileName, String selectionFileName) {
+		txtSize.setDouble(size);
+		txtX.setDouble(xOffset);
+		txtY.setDouble(yOffset);
+		lblFileName.setText(fileName);
+		lblSelFileName.setText(selectionFileName);
+		btnSel.setEnabled(lblFileName.getText()!="");
+	}
+
+	public EditorTool[] getEditorTools() {
+		return null;
+
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		fireSymbolChangedEvent();
+	}
+
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof IPictureMarkerSymbol;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelectorListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelectorListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelectorListModel.java	(revision 42196)
@@ -0,0 +1,251 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: StyleSelectorListModel.java 30011 2009-07-17 11:07:14Z cordinyana $
+ * $Log$
+ * Revision 1.5  2007-08-14 11:10:20  jvidal
+ * javadoc updated
+ *
+ * Revision 1.4  2007/08/07 11:21:42  jvidal
+ * javadoc
+ *
+ * Revision 1.3  2007/05/08 15:44:07  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/04/04 16:01:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/03/09 11:25:00  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.4  2007/02/21 07:35:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.3  2007/02/08 15:43:04  jaume
+ * some bug fixes in the editor and removed unnecessary imports
+ *
+ * Revision 1.1.2.2  2007/01/30 18:10:10  jaume
+ * start commiting labeling stuff
+ *
+ * Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.app.gui.styling;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Comparator;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import javax.swing.event.ListDataListener;
+
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.ValidationException;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.impl.LoadSymbolException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.listManager.ListModel;
+import org.gvsig.utils.xmlEntity.generate.XmlTag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Implements a list to select styles.This list
+ * has the property that allows the user to stablish a filter to accept or reject
+ * elements for it from a directory which is also specified when the StyleSelectorModel
+ * is created.
+ *
+ *
+ */
+public class StyleSelectorListModel implements ListModel {
+
+	private static Logger logger = LoggerFactory.getLogger(
+			StyleSelectorListModel.class);
+	
+	public static final String STYLE_FILE_EXTENSION = ".gvssty";
+
+	protected Vector<IStyle> elements = null;
+	protected File folder = null;
+	protected FileFilter fFilter = null;
+	protected SelectorFilter sFilter = null;
+	protected String fileExt = "";
+	
+	/**
+	 * <p>
+	 * Creates a new instance of the model for the list in the Style Selector window
+	 * where the styles are stored in the <b>dir</b> (root directory) param.<br>
+	 * </p>
+	 * <p>The <b>currentElement</b> defines which element is pre-selected.<br></p>
+	 * <p>The <b>filter</b> is a user defined filter used to know which elements in
+	 * the folder are accepted or rejected for this list and it is used to avoid
+	 * mixing marker styles for polygons for example.<br></p>
+	 * <p><b>fileExtension</b> param defines the extension of the file to be parsed. This
+	 * is like that to enable inheritance of this class to other file selector such
+	 * as StyleSelector.
+	 *
+	 * @param dir, the root dir where styles are located.
+	 * @param currentElemet, the element to be pre-selected.
+	 * @param filter, the filter used to show or hide some elements.
+	 * @param fileExtension, file extension used for the files to be parsed.
+	 */
+	public StyleSelectorListModel(
+			File dir,
+			SelectorFilter filter,
+			String fileExtension) {
+		
+		fileExt = fileExtension.toLowerCase();
+		folder = dir;
+		sFilter = filter;
+		fFilter = new FileFilter() {
+			public boolean accept(File pathname) {
+				if (!pathname.isFile()) {
+					return false;
+				} else {
+					return pathname.getAbsolutePath().toLowerCase().endsWith(
+							StyleSelectorListModel.this.fileExt);
+				}
+			}
+		};
+	}
+
+	
+	
+	
+	
+	/**
+	 * TODO: use the new Persistence API.
+	 */
+	public Vector<IStyle> getObjects() {
+
+		if (elements == null) {
+
+			elements = new Vector();
+			File[] ff = folder.listFiles(fFilter);
+			for (int i = 0; i < ff.length; i++) {
+
+				try {
+					IStyle sty = this.loadStyle(ff[i]);
+					if (sFilter.accepts(sty)) {
+						add(sty);
+					}
+						
+				} catch (Exception e) {
+					NotificationManager.
+					addWarning("Error in file ["+ff[i].getAbsolutePath()+"]. ", e);
+				}
+
+			}
+		}
+		return elements;
+	}
+
+
+	public void add(Object o) {
+		TreeSet map = new TreeSet(new Comparator() {
+
+			public int compare(Object o1, Object o2) {
+
+				IStyle sym1 = (IStyle) o1;
+				IStyle sym2 = (IStyle) o2;
+				if (sym1.getDescription() == null && sym2.getDescription() != null) return -1;
+				if (sym1.getDescription() != null && sym2.getDescription() == null) return 1;
+				if (sym1.getDescription() == null && sym2.getDescription() == null) return 1;
+
+				int result = sym1.getDescription().compareTo(sym2.getDescription());
+				return (result!=0) ? result: 1; /* this will allow adding symbols with
+				the same value for description than
+				a previous one. */
+			}
+
+		});
+
+		map.addAll(elements);
+		map.add(o);
+		elements = new Vector(map);
+
+	}
+
+	public int getSize() {
+		return getObjects().size();
+	}
+
+	public Object getElementAt(int index) {
+		return getObjects().get(index);
+	}
+	
+
+	public void addListDataListener(ListDataListener l) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void removeListDataListener(ListDataListener l) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public Object remove(int i) throws ArrayIndexOutOfBoundsException {
+		return elements.remove(i);
+	}
+
+	public void insertAt(int i, Object o) {
+		getObjects().insertElementAt((IStyle) o, i);
+	}
+	
+	// =========================================================
+	
+	private IStyle loadStyle(File file) throws Exception {
+		if (file.exists()) {
+				FileInputStream fis = new FileInputStream(file);
+
+				PersistenceManager persistenceManager = ToolsLocator
+						.getPersistenceManager();
+
+				PersistentState state = persistenceManager.loadState(fis);
+				IStyle sty = (IStyle) persistenceManager.create(state);
+				fis.close();
+				
+				return sty;
+		} else {
+			return null;
+		}
+		
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelectorListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SLDListBoxCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SLDListBoxCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SLDListBoxCellRenderer.java	(revision 42196)
@@ -0,0 +1,191 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.io.File;
+
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.ListCellRenderer;
+
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.batik.bridge.DocumentLoader;
+import org.apache.batik.bridge.GVTBuilder;
+import org.apache.batik.bridge.UserAgentAdapter;
+import org.apache.batik.bridge.ViewBox;
+import org.apache.batik.gvt.GraphicsNode;
+import org.apache.batik.gvt.renderer.StaticRenderer;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.svg.SVGDocument;
+
+/**
+*
+* @author jaume dominguez faus - jaume.dominguez@iver.es
+*
+*/
+public class SLDListBoxCellRenderer extends JPanel implements ListCellRenderer {
+
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1458566622433802796L;
+	private String str;
+    private GVTBuilder gvtBuilder = new GVTBuilder();
+    private StaticRenderer renderer = new StaticRenderer();
+    private Element elt;
+    private GraphicsNode gvtRoot;
+
+    DocumentLoader loader;
+    private UserAgentAdapter userAgent;
+    BridgeContext  ctx;
+    BufferedImage image;
+    protected static RenderingHints defaultRenderingHints;
+    static {
+        defaultRenderingHints = new RenderingHints(null);
+        defaultRenderingHints.put(RenderingHints.KEY_ANTIALIASING,
+                                  RenderingHints.VALUE_ANTIALIAS_ON);
+
+        defaultRenderingHints.put(RenderingHints.KEY_INTERPOLATION,
+                                  RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+    }
+    /**
+     * Constructor method
+     *
+     */
+
+    public SLDListBoxCellRenderer() {
+        setOpaque(true);
+        setLayout(new BorderLayout(3,3));
+
+        userAgent = new UserAgentAdapter();
+        loader    = new DocumentLoader(userAgent);
+        ctx       = new BridgeContext(userAgent, loader);
+
+        renderer.setDoubleBuffered(true);
+        /* canvas = new JSVGCanvas();
+        // canvas.setMySize(getWidth()-3, getHeight()-3);
+        canvas.setMySize(new Dimension(getWidth()-3, getHeight()-3));
+        // add(canvas,BorderLayout.CENTER);
+        canvas.setVisible(true); */
+
+        /* setHorizontalAlignment(CENTER);
+        setVerticalAlignment(CENTER); */
+    }
+    public Component getListCellRendererComponent(JList list, Object value,
+            int index, boolean isSelected, boolean cellHasFocus) {
+//      Get the selected index. (The index param isn't
+//      always valid, so just use the value.)
+      String selectedSymbol = ((String)value).toString();
+      str = selectedSymbol;
+
+      if (isSelected) {
+          setBackground(list.getSelectionBackground());
+          setForeground(list.getSelectionForeground());
+      } else {
+          setBackground(list.getBackground());
+          setForeground(list.getForeground());
+      }
+
+      /* try {
+          canvas.setURI( new File("D:/java/eclipse30/eclipse/workspace/FMap 03/docs/fill1.svg").toURL().toString() );
+      } catch (MalformedURLException e1) {
+          // TODO Auto-generated catch block
+          e1.printStackTrace();
+      } */
+      gvtRoot = null;
+      try
+      {
+          File f = new File(str);
+          Document svgDoc = loader.loadDocument(f.toURI().toString());
+          gvtRoot = gvtBuilder.build(ctx, svgDoc);
+          renderer.setTree(gvtRoot);
+          elt = ((SVGDocument)svgDoc).getRootElement();
+
+      } catch (Exception ex) {
+          ex.printStackTrace();
+      }
+
+
+//      Set the icon and text.  If icon was null, say so.
+      // ImageIcon icon = images[selectedIndex];
+      String pet = selectedSymbol; // petStrings[selectedIndex];
+      /* setIcon(icon);
+      if (icon != null) { */
+          // setText(pet);
+          setFont(list.getFont());
+          repaint();
+      /* } else {
+          // setUhOhText(pet + " (no image available)", list.getFont());
+      } */
+
+      return this;
+    }
+    /* (non-Javadoc)
+     * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
+     */
+    protected void paintComponent(Graphics g) {
+        super.paintComponent(g);
+        /* renderer.setTransform
+        (ViewBox.getViewTransform
+         (null, elt, getWidth()-1, getHeight()-1));
+
+        renderer.updateOffScreen(getWidth()-1,
+                                 getHeight()-1);
+
+        Rectangle r = new Rectangle(0, 0,
+                                    getWidth()-1,
+                                    getHeight()-1);
+        renderer.repaint(r);
+
+        image = renderer.getOffScreen();
+
+        g.drawImage(image,0,0, null); */
+        Graphics2D g2 = (Graphics2D) g;
+        RenderingHints renderingHints = defaultRenderingHints;
+        g2.setRenderingHints(renderingHints);
+        try {
+        	gvtRoot.setTransform((ViewBox.getViewTransform(null, elt, getWidth()-1, getHeight()-1, ctx)));
+        	gvtRoot.paint(g2);
+        } catch (Exception e) {
+        	Rectangle bounds = getBounds();
+        	JLabel errLbl = new JLabel("<html><b>"+"Cannot render north"+/*PluginServices.getText(this, "cannot_render_north")+*/"</b></html>");
+        	errLbl.setPreferredSize(bounds.getSize());
+        	errLbl.setSize(bounds.getSize());
+        	errLbl.setBounds(bounds);
+        	errLbl.paint(g);
+        }
+        // g2.setTransform(oldTx);
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SLDListBoxCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureFill.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureFill.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureFill.java	(revision 42196)
@@ -0,0 +1,419 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.project.documents.view.legend.gui.JSymbolPreviewButton;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IPictureFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+
+/**
+ * <b>PictureFill</b> allows to store and modify the properties that fills a
+ * polygon with a padding and an outline<p>
+ * <p>
+ * This functionality is carried out thanks to two tabs (picture fill and MarkerFillProperties)
+ * which are included in the panel to edit the properities of a symbol (SymbolEditor)
+ * how is explained in AbstractTypeSymbolEditor.<p>
+ * <p>
+ * The first tab (picture fill)permits the user to select the picture for the padding and
+ * differentes options to modify it such as the angle(<b>incrAngle</b>) and the scale
+ * (<b>incrScaleX,incrScaleY</b>). Also, there is an option to select a color for the
+ * fill (<b>jccFillColor</b>).
+ * <p>
+ * The second tab is implementes as a MarkerFillProperties class and offers the possibilities
+ * to change the separtion and the offset.
+ *
+ *
+ *@see MarkerFillProperties
+ *@see AbstractTypeSymbolEditor
+ *@author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class PictureFill extends AbstractTypeSymbolEditor implements
+ActionListener {
+
+	private JLabel lblFileName;
+	private JLabel lblSelFileName;
+	private ArrayList<JPanel> tabs = new ArrayList<JPanel>();
+	private MarkerFillProperties fillProperties;
+	private File picFile;
+	private JNumberSpinner incrAngle;
+	private JNumberSpinner incrScaleX;
+	private JNumberSpinner incrScaleY;
+	private ColorChooserPanel jccFillColor;
+	private ILineSymbol outline;
+	private JSymbolPreviewButton btnOutline;
+	private JCheckBox useBorder;
+
+	private JButton btnBrowseFile;
+    private JButton btnBrowseFileSelected;
+
+	private static final double DEGREE_TO_RADIANS = Math.PI/180D;
+
+	private ActionListener chooseAction = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			boolean isSelection;
+			JLabel targetLbl;
+
+			if (e.getSource().equals(btnBrowseFile)) {
+				targetLbl = lblFileName;
+				isSelection = false;
+			} else {
+				targetLbl = lblSelFileName;
+				isSelection = true;
+			}
+
+			FileFilter ff = new FileFilter() {
+				public boolean accept(File f) {
+					if (f.isDirectory()) return true;
+					String fName = f.getAbsolutePath();
+					if (fName!=null) {
+						fName = fName.toLowerCase();
+						return fName.endsWith(".png")
+						|| fName.endsWith(".gif")
+						|| fName.endsWith(".jpg")
+						|| fName.endsWith(".jpeg")
+						|| fName.endsWith(".bmp")
+						|| fName.endsWith(".svg");
+					}
+					return false;
+				}
+
+				public String getDescription() {
+					return Messages.getText("bitmap_and_svg_image_files");
+				}
+			};
+			JUrlFileChooser jfc = new JUrlFileChooser(getName(), null);
+			jfc.setFileFilter(ff);
+			jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
+			jfc.setSelectedFile(picFile);
+			jfc.setMultiSelectionEnabled(false);
+			int returnVal = jfc.showOpenDialog(PictureFill.this.owner);
+//			if(returnVal == JFileChooser.APPROVE_OPTION) {
+//				File myFile = jfc.getSelectedFile();
+//				lastDir = jfc.getCurrentDirectory();
+//				if (myFile != null && myFile.exists()) {
+//					if(!isSelection){
+//						picFile = myFile;
+//					}
+//					else{
+//						selPicFile = myFile;
+//					}
+//					try {
+//						targetLbl.setText(myFile.toURL().toString());
+//					} catch (MalformedURLException e1) {
+//						NotificationManager.addError(PluginServices.getText(this, "invalid_url"), e1);
+//					}
+//					fireSymbolChangedEvent();
+//				}
+//			}
+			if(returnVal == JFileChooser.APPROVE_OPTION) {
+
+				URL url = jfc.getSelectedURL();
+				if (url == null) return;
+				try {
+					targetLbl.setText(url.toURI().getPath());
+				} catch (URISyntaxException e1) {
+					NotificationManager.addWarning("URI Syntax error", e1);
+				}
+				fireSymbolChangedEvent();
+			}
+			boolean enabled = (lblFileName.getText()!="");
+			enableControls(lblFileName.getText()!="");
+
+		}
+	};
+
+	/**
+	 * Constructor method
+	 * @param owner
+	 */
+	public PictureFill(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+	/**
+	 * Initializes the parameters that allows the user to fill the padding of
+	 * a polygon with a picture style.To do it, two tabs are created (picture fill and
+	 * MarkerFillProperties)inside the SymbolEditor panel with default values for the
+     * different attributes.
+	 */
+	private void initialize() {
+		JPanel myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(Messages.getText("picture_fill"));
+
+		btnBrowseFile = new JButton(Messages.getText("browse"));
+		btnBrowseFile.addActionListener(chooseAction);
+
+		btnBrowseFileSelected = new JButton(Messages.getText("browse"));
+		btnBrowseFileSelected.addActionListener(chooseAction);
+
+		JPanel aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
+
+		JPanel auxLabelPic=new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
+		JLabel lblName = new JLabel();
+		lblName.setFont(lblName.getFont().deriveFont(Font.BOLD));
+		lblName.setText(Messages.getText("picture_file")+":");
+		auxLabelPic.add(lblName);
+
+		aux2.add(btnBrowseFile);
+		aux2.add(lblFileName = new JLabel(""));
+
+		JPanel auxLabelSelPic=new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
+		JLabel lblSelName = new JLabel();
+		lblSelName.setFont(lblSelName.getFont().deriveFont(Font.BOLD));
+		lblSelName.setText(Messages.getText("selection_picture_file")+":");
+		auxLabelSelPic.add(lblSelName);
+
+		JPanel aux4 = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
+		aux4.add(btnBrowseFileSelected);
+		aux4.add(lblSelFileName = new JLabel(""));
+
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+		aux.addComponent(new JBlank(5, 5));
+		aux.addComponent(auxLabelPic);
+		aux.addComponent(aux2);
+		aux.addComponent(auxLabelSelPic);
+		aux.addComponent(aux4);
+
+
+		aux2 = new JPanel(new GridLayout(1, 2, 20, 5));
+		GridBagLayoutPanel aux3;
+		aux3 = new GridBagLayoutPanel();
+		aux3.addComponent(Messages.getText("angle")+":",
+				incrAngle = new JNumberSpinner(0, 20));
+		aux3.addComponent(Messages.getText("scale")+"X:",
+				incrScaleX = new JNumberSpinner(
+						1.0,
+                                                20,
+						0.01,
+						Double.POSITIVE_INFINITY,
+						0.1));
+		incrScaleX.setDouble(1);
+		aux3.addComponent(Messages.getText("scale")+"Y:",
+				incrScaleY = new JNumberSpinner(
+						1.0,
+                                                20,
+						0.01,
+						Double.POSITIVE_INFINITY,
+						0.1));
+		incrScaleY.setDouble(1);
+		aux2.add(aux3);
+
+		aux3 = new GridBagLayoutPanel();
+		aux3.addComponent(new JBlank(5,5));
+		aux3.addComponent(new JLabel (Messages.getText("fill_color")+":"));
+		aux3.addComponent(new JBlank(5,5));
+		aux3.addComponent(jccFillColor = new ColorChooserPanel(true,true));
+		jccFillColor.setAlpha(255);
+
+		aux3.addComponent(new JBlank(5,5));
+		aux3.addComponent(new JBlank(5,5));
+		aux2.add(aux3);
+
+		aux.addComponent(aux2);
+		aux.addComponent(new JBlank(10, 10));
+		aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+		aux2.add(btnOutline = new JSymbolPreviewButton(Geometry.TYPES.CURVE));
+		useBorder = new JCheckBox(Messages.getText("use_outline"));
+		aux.addComponent(useBorder);
+		aux.addComponent(Messages.getText("outline")+":",
+				aux2);
+
+		fillProperties = new MarkerFillProperties();
+		myTab.add(aux);
+
+		fillProperties.addActionListener(this);
+		incrAngle.addActionListener(this);
+		incrScaleX.addActionListener(this);
+		incrScaleY.addActionListener(this);
+		jccFillColor.addActionListener(this);
+		btnOutline.addActionListener(this);
+		useBorder.addActionListener(this);
+
+		tabs.add(myTab);
+		tabs.add(fillProperties);
+
+		enableControls(false);
+
+	}
+
+	public EditorTool[] getEditorTools() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public ISymbol getLayer() {
+
+		IPictureFillSymbol sym=null;
+		try {
+
+			if( lblFileName.getText().equals("") )
+				sym=null;
+
+			else {
+				sym =  SymbologyLocator.getSymbologyManager().createPictureFillSymbol(new File(lblFileName.getText()).toURI().toURL(),null);
+				if (!lblSelFileName.getText().equals("")){
+					sym = SymbologyLocator.getSymbologyManager().createPictureFillSymbol(new File(lblFileName.getText()).toURI().toURL(),new File(lblSelFileName.getText()).toURI().toURL());
+				}
+				sym.setHasFill(jccFillColor.getUseColorisSelected());
+				Color c = jccFillColor.getColor();
+				if (c != null)
+					c = new Color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha());
+				sym.setFillColor(c);
+
+				sym.setHasOutline(useBorder.isSelected());
+				outline = (ILineSymbol) btnOutline.getSymbol();
+				sym.setOutline(outline);
+
+				sym.setAngle(incrAngle.getDouble()*DEGREE_TO_RADIANS);
+				sym.setXScale(incrScaleX.getDouble());
+				sym.setYScale(incrScaleY.getDouble());
+				sym.setMarkerFillProperties(fillProperties.getMarkerFillProperties());
+			}
+
+		} catch (IOException e) {
+			IWarningSymbol warning =
+				(IWarningSymbol) MapContextLocator.getSymbolManager()
+				.getWarningSymbol(
+						SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+						Messages.getText("failed_acessing_files"),
+								SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+						return warning;
+		}
+
+
+		return sym;
+
+
+	}
+
+	public String getName() {
+		return Messages.getText("picture_fill_symbol");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs.toArray(new JPanel[tabs.size()]);
+	}
+
+	public void refreshControls(ISymbol layer) {
+		if (layer instanceof IPictureFillSymbol){
+			IPictureFillSymbol sym = (IPictureFillSymbol) layer;
+
+			URL source = sym.getSource();
+			if (source != null) {
+				try {
+					lblFileName.setText(source.toURI().getPath());
+				} catch (URISyntaxException e) {
+					NotificationManager.addWarning("URI Syntax error", e);				}
+			} else {
+				lblFileName.setText("");
+			}
+			URL selSource = sym.getSelectedSource();
+			if (selSource != null) {
+				try {
+					lblSelFileName.setText(selSource.toURI().getPath());
+				} catch (URISyntaxException e) {
+					NotificationManager.addWarning("URI Syntax error", e);
+				}
+			} else {
+				lblSelFileName.setText("");
+			}
+
+			jccFillColor.setUseColorIsSelected(sym.hasFill());
+			jccFillColor.setColor(sym.getFillColor());
+
+			outline=sym.getOutline();
+			btnOutline.setSymbol(outline);
+			useBorder.setSelected(sym.hasOutline());
+
+			incrAngle.setDouble(sym.getAngle()/DEGREE_TO_RADIANS);
+			incrScaleX.setDouble(sym.getXScale());
+			incrScaleY.setDouble(sym.getYScale());
+			fillProperties.setModel(sym.getMarkerFillProperties());
+
+			enableControls(lblFileName.getText()!="");
+		}
+	}
+
+	private void enableControls(boolean enabled){
+		btnBrowseFileSelected.setEnabled(enabled);
+		incrAngle.setEnabled(enabled);
+		incrScaleX.setEnabled(enabled);
+		incrScaleY.setEnabled(enabled);
+		incrAngle.setEnabled(enabled);
+		incrScaleX.setEnabled(enabled);
+		incrScaleY.setEnabled(enabled);
+		jccFillColor.setEnabled(enabled);
+		btnOutline.setEnabled(enabled);
+		useBorder.setEnabled(enabled);
+
+		fillProperties.setEnabled(enabled);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		Object s = e.getSource();
+
+		if(s.equals(jccFillColor)) {
+			jccFillColor.getColor().getAlpha();
+		}
+		outline = (ILineSymbol) btnOutline.getSymbol();
+		fireSymbolChangedEvent();
+	}
+
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof IPictureFillSymbol;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureFill.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PatternEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PatternEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PatternEditor.java	(revision 42196)
@@ -0,0 +1,338 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.util.ArrayList;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+public class PatternEditor extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4393880700290565871L;
+	private static final int NULL_STATE = 0;
+	private static final int EMPTY_STATE = 1;
+	private static final int FILL_STATE = 2;
+	private static final int END_MARK_STATE = 3;
+	private int dividers = 9;
+	private int subDividersPerDivider = 5;
+	private int separations = dividers * subDividersPerDivider;
+	private int vGap = 5; // pixels
+	private int hGap = 5;
+	private float dash[];
+	private int states[] = new int[separations];
+	private MyMouseListener mouseBehavior = new MyMouseListener();
+	private Rectangle bounds;
+	private int width,height,halfHeight,separation;
+	private ArrayList<ActionListener> listeners=new ArrayList<ActionListener>();
+
+	public PatternEditor() {
+		super();
+		addMouseListener(mouseBehavior);
+		addMouseMotionListener(mouseBehavior);
+		for (int i = 0; i < states.length; i++) {
+			states[i] = NULL_STATE;
+		}
+		states[0] = END_MARK_STATE;
+	}
+
+	public float[] getDash() {
+		return dash;
+	}
+
+	public void setDash(float[] dash) {
+		this.dash=dash;
+		obtain_states(dash);
+		repaint();
+	}
+
+	private void obtain_states(float[] dash) {
+		int pos=0;
+		if(dash == null) return;
+
+		//Para el resto de casos
+		for (int i = 0; i < dash.length; i++) {
+			if(i%2 == 0) {
+				for (int j = 0; j < dash[i]; j++) {
+					states[pos]=FILL_STATE;
+					pos++;
+				}
+			}
+			else {
+				for (int j = 0; j < dash[i]; j++) {
+					states[pos]=EMPTY_STATE;
+					pos++;
+				}
+			}
+		}
+		states[pos]=END_MARK_STATE;
+
+
+	}
+
+	private void create_Dash() {
+		if (states[0] == NULL_STATE) dash=null;
+		else {
+			int divisions = 1;
+			boolean firstfilled = true;
+			
+			//To create the divisions of the dash
+			if (states[0] == EMPTY_STATE) {
+				divisions ++;
+				firstfilled = false;
+			}
+			int k=1;
+			if(states[0] != END_MARK_STATE ) {
+				while (states[k] != END_MARK_STATE) {
+					if(states[k] != states[k-1])divisions++;
+					k++;
+				}
+			}
+			
+			
+			//To fill the dash array
+			int pos=0;
+			if(divisions ==1)dash=null;
+			else {
+				dash = new float[divisions];
+				if(!firstfilled) {
+					dash[0]=0;
+					pos++;
+					firstfilled = true;
+				}
+				dash[pos]=1;
+
+				int i=1;
+				while(states[i]!= END_MARK_STATE) {
+					if(states[i] == states[i-1])dash[pos]++;
+					else {
+						pos++;
+						dash[pos]=1;
+					}
+					i++;
+				}
+			}
+			for (int i = 0; dash!=null &&  i < dash.length; i++) {
+				System.out.print(dash[i]+" ");
+			}
+			System.out.print("\n");
+			
+		}	
+		for (int i=0;i<listeners.size();i++) {
+			listeners.get(i).actionPerformed(new ActionEvent(this,ActionEvent.ACTION_FIRST,"Released"));	
+		}
+	}
+
+	public void clear_Dash() {
+		dash = null;
+		for (int i = 0; i < states.length; i++) {
+			states[i] = NULL_STATE;
+		}
+		states[0] = END_MARK_STATE;
+		repaint();
+		create_Dash();
+
+	}
+
+	@Override
+	public void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		bounds = getBounds();
+		width = bounds.width;	
+		height = bounds.height-2*vGap;
+		halfHeight = height / 2;
+		separation = width / separations;
+		for (int i = 0; i <= separations; i++) {
+			if (i%subDividersPerDivider == 0) {
+				g.drawLine(hGap+separation*i, vGap, hGap+separation*i, vGap+halfHeight-3);
+			} else {
+				g.drawLine(hGap+separation*i, vGap+(halfHeight/2), hGap+separation*i, vGap+halfHeight-3);
+			}
+
+		}
+
+		for(int i = 0; i < states.length ; i++) {
+			switch (states[i]) {
+			case END_MARK_STATE:
+				g.setColor(Color.GRAY);
+				break;
+			case NULL_STATE:
+				continue;
+			case FILL_STATE:
+				g.setColor(Color.BLACK);
+				break;
+			case EMPTY_STATE:
+				g.setColor(Color.WHITE);
+				break;
+			}
+			bounds.setLocation(0, 0);
+			g.fillRect(hGap+separation*i, (vGap)+height/2, separation, halfHeight);
+			
+		}
+		bounds.setLocation(0, 0);
+		g.drawRect(hGap,(vGap)+height/2 ,separation*separations,halfHeight);
+
+	}
+	public static void main(String[] args) {
+		JFrame f = new JFrame();
+		final PatternEditor pe1 = new PatternEditor(); 
+		final PatternEditor pe2 = new PatternEditor();
+		JPanel content = new JPanel(new GridLayout(2, 1));
+		pe1.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				pe2.setDash(pe1.getDash());
+			}
+		});
+		
+		content.add(pe1);
+		content.add(pe2);
+		f.setContentPane(content);
+		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		f.pack();
+		f.setVisible(true);
+
+	}
+
+	private class MyMouseListener implements MouseListener, MouseMotionListener {
+		private Point initialPoint = null;
+		private Point endPoint = null;
+		
+	
+		public void mouseEntered(MouseEvent e) { /* nothing */ }
+		public void mouseExited(MouseEvent e){ /* nothing */ }
+		public void mouseReleased(MouseEvent e) { /* nothing */ }
+		public void mouseMoved(MouseEvent e) { /* nothing */ }
+
+		public void mouseClicked(MouseEvent e){ 
+			initialPoint = getPoint(e);
+		}
+		
+		public void mousePressed(MouseEvent e) {
+			initialPoint = getPoint(e);
+			if(isValidPoint(initialPoint)) {
+				if (states[getRect(initialPoint)]== EMPTY_STATE)
+					states[getRect(initialPoint)] = FILL_STATE;
+				else if (states[getRect(initialPoint)]== FILL_STATE)
+					states[getRect(initialPoint)] = EMPTY_STATE;
+				
+				repaint();
+				create_Dash();
+			}
+		}
+		private Point getPoint(MouseEvent e) {
+			Point p = new Point();//getLocation();
+			Point p2 = e.getPoint();
+			return new Point(p2.x - p.x, p2.y - p.y);
+		}
+
+		private synchronized void doIt() {
+			if(!isValidPoint(endPoint) || !isValidPoint(initialPoint))return;
+			
+			if(isValidPoint(endPoint) && isValidPoint(initialPoint)) {
+				int stateIndex = getRect(initialPoint);
+				if (stateIndex>=separations) return;
+				switch (states[stateIndex]) {
+				case END_MARK_STATE:
+				case NULL_STATE:
+					enlarge();
+					break;
+				case FILL_STATE:
+					swap();
+					break;
+				}
+				repaint();
+				create_Dash();
+			}
+		}
+		
+		private void swap() {
+			if(!isValidPoint(endPoint) || !isValidPoint(initialPoint))return;
+			
+			if(states[getRect(endPoint)] == EMPTY_STATE)
+				states[getRect(endPoint)]= FILL_STATE;
+
+			else return;
+		}
+		
+		private synchronized void enlarge() {
+			
+			if(!isValidPoint(endPoint) || !isValidPoint(initialPoint))
+				return;
+			int index = getRect(endPoint);
+			if (index >= separations)
+				return;
+			if(isValidPoint(endPoint) && isValidPoint(initialPoint)) {
+				for (int i = index-1; i >= 0; i--) {
+					if (states[i] != FILL_STATE)
+						states[i] = EMPTY_STATE;
+				}
+				for (int i = index+1; i < states.length; i++) {
+					states[i] = NULL_STATE;
+				}
+				
+				
+				states[index] = END_MARK_STATE;
+			}
+		}
+
+		private boolean isValidPoint(Point p) {
+			if (getRect(p)!= -1)
+				return true;
+			return false;
+		}
+
+		private int getRect(Point p) {
+			if (( vGap+halfHeight <= p.y ) && ( p.y <= vGap+2*halfHeight ))
+				if((hGap <= p.x) && (p.x <= hGap+(separation*separations)))
+					return (p.x - hGap) / separation;
+			return -1;
+		}
+
+		public void mouseDragged(MouseEvent e) {
+			endPoint = getPoint(e);
+			if(isValidPoint(endPoint)) {
+				doIt();
+			}
+		}
+
+	}
+
+	public void addActionListener(ActionListener patternChange) {
+		listeners.add(patternChange);
+		
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PatternEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SelectorFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SelectorFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SelectorFilter.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: SelectorFilter.java 29596 2009-06-29 16:02:00Z jpiera $
+* $Log$
+* Revision 1.3  2007-08-13 11:33:51  jvidal
+* javadoc
+*
+* Revision 1.2  2007/04/04 16:01:13  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.3  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/08 15:43:04  jaume
+* some bug fixes in the editor and removed unnecessary imports
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.gui.styling;
+
+/**
+* Interface which is used to establish a filter in order to accept an object
+* or refuse depending on its features
+* @author jaume dominguez faus - jaume.dominguez@iver.es
+*
+*/
+public interface SelectorFilter {
+	/**
+	 * Returns true if the object passes the filter(is accepted)or false on the contrary
+	 * @param obj
+	 * @return
+	 */
+	public boolean accepts(Object obj);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SelectorFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFill.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFill.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFill.java	(revision 42196)
@@ -0,0 +1,314 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JSlider;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.project.documents.view.legend.gui.ISymbolSelector;
+import org.gvsig.app.project.documents.view.legend.gui.JSymbolPreviewButton;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IMarkerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+/**
+ * <b>MarkerFill</b> allows the user to store and modify the properties that fills a
+ * polygon with a padding made of markers and an outline<p>
+ * <p>
+ * This functionality is carried out thanks to two tabs (marker fill and MarkerFillProperties)
+ * which are included in the panel to edit the properities of a symbol (SymbolEditor)
+ * how is explained in AbstractTypeSymbolEditor.<p>
+ * <p>
+ * The first tab (marker fill)permits the user to select the marker for the padding and
+ * other options such as the color for the fill (<b>btnChooseMarker</b>),to select the
+ * ouline (<b>btnOutline</b>)and the distribution (grid or random) of the marker inside
+ * the padding (<b>rdGrid,rdRandom</b>).
+ * <p>
+ * The second tab is implementes as a MarkerFillProperties class and offers the possibilities
+ * to change the separtion and the offset.
+ *
+ *
+ *@see MarkerFillProperties
+ *@see AbstractTypeSymbolEditor
+ *@author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class MarkerFill extends AbstractTypeSymbolEditor implements ActionListener,ChangeListener {
+	private ArrayList<JPanel> tabs = new ArrayList<JPanel>();
+	private ColorChooserPanel markerCC;
+	private JButton btnChooseMarker;
+	private MarkerFillProperties panelStyle = new MarkerFillProperties();
+	private JRadioButton rdGrid;
+	private JRadioButton rdRandom;
+	private IMarkerSymbol marker = SymbologyLocator.getSymbologyManager().createSimpleMarkerSymbol();
+
+	private JNumberSpinner txtOutlineWidth;
+	private JSymbolPreviewButton btnOutline;
+	private JSlider sldOutlineTransparency;
+	private int outlineAlpha = 255;
+	private ILineSymbol outline;
+	private JCheckBox useBorder;
+
+	/**
+	 * constructor method
+	 * @param owner
+	 */
+	public MarkerFill(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+	/**
+	 * Initializes the parameters that allows the user to fill the padding of
+	 * a polygon with a style made of markers.To do it, two tabs are created (marker
+	 * fill and MarkerFillProperties)inside the SymbolEditor panel with default values
+	 * for the different attributes.
+	 */
+	private void initialize() {
+//		GridLayout layout;
+		JPanel myTab;
+		// Marker fill tab
+
+		{
+			myTab = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
+			myTab.setName(Messages.getText("marker_fill"));
+
+			GridBagLayoutPanel p = new GridBagLayoutPanel();
+			JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+			markerCC = new ColorChooserPanel(true);
+			markerCC.setAlpha(255);
+			markerCC.addActionListener(this);
+			aux.add(markerCC);
+
+			p.addComponent(Messages.getText("color")+":", aux);
+			btnChooseMarker = new JButton(Messages.getText("choose_marker"));
+			btnChooseMarker.addActionListener(this);
+			aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+			aux.add(btnChooseMarker);
+			p.addComponent("", aux);
+
+			ButtonGroup group = new ButtonGroup();
+			rdGrid = new JRadioButton(Messages.getText("grid"));
+			rdGrid.addActionListener(this);
+			rdRandom = new JRadioButton(Messages.getText("random"));
+			rdRandom.addActionListener(this);
+			group.add(rdGrid);
+			group.add(rdRandom);
+
+			aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+			aux.add(rdGrid);
+			aux.add(rdRandom);
+			rdGrid.setSelected(true);
+			p.addComponent("", aux);
+
+
+			JPanel myTab2 = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+			GridBagLayoutPanel aux3 = new GridBagLayoutPanel();
+
+			JPanel aux2 = new JPanel();
+			btnOutline = new JSymbolPreviewButton(Geometry.TYPES.CURVE);
+			btnOutline.setPreferredSize(new Dimension(100, 35));
+			aux2.add(btnOutline);
+
+			aux3.addComponent(new JBlank(10, 10));
+			useBorder = new JCheckBox(Messages.getText("use_outline"));
+			aux3.addComponent(useBorder, aux2);
+			aux3.addComponent(new JBlank(10, 10));
+
+			sldOutlineTransparency = new JSlider();
+			sldOutlineTransparency.setValue(100);
+			aux3.addComponent(Messages.getText("outline")+":",
+					aux2);
+			aux3.addComponent(Messages.getText("outline_opacity")+":", sldOutlineTransparency);
+			txtOutlineWidth = new JNumberSpinner(0.0, 25, 0.0, Double.MAX_VALUE, 1.0, 2);
+			aux3.addComponent(Messages.getText("outline_width")+":", txtOutlineWidth);
+			myTab2.add(aux3);
+
+			p.addComponent("", myTab2);
+			myTab.add(p);
+
+			useBorder.addActionListener(this);
+			btnOutline.addActionListener(this);
+			txtOutlineWidth.addActionListener(this);
+			sldOutlineTransparency.addChangeListener(this);
+
+		}
+		tabs.add(myTab);
+
+		// Fill properties tab
+		tabs.add(panelStyle);
+		panelStyle.addActionListener(this);
+	}
+
+	public void refreshControls(ISymbol layer) {
+		if (layer == null) {
+			System.err.println(getClass().getName()+":: should be unreachable code");
+			// set defaults
+			markerCC.setColor(Color.BLACK);
+			rdGrid.setSelected(true);
+			rdRandom.setSelected(false);
+		} else {
+
+			IMarkerFillSymbol mfs = (IMarkerFillSymbol) layer;
+			int fillStyle = mfs.getMarkerFillProperties().getFillStyle();
+			marker = mfs.getMarker();
+			rdGrid.setSelected(fillStyle == IMarkerFillPropertiesStyle.GRID_FILL);
+			rdRandom.setSelected(fillStyle == IMarkerFillPropertiesStyle.RANDOM_FILL);
+			panelStyle.setModel(mfs.getMarkerFillProperties());
+			markerCC.setColor(marker.getColor());
+
+			//outline
+			sldOutlineTransparency.removeChangeListener(this);
+
+			outline=mfs.getOutline();
+			btnOutline.setSymbol(outline);
+			useBorder.setSelected(mfs.hasOutline());
+
+			if (outline != null) {
+				outlineAlpha = outline.getAlpha();
+				sldOutlineTransparency.setValue((int)((outlineAlpha/255D)*100));
+				txtOutlineWidth.setDouble(outline.getLineWidth());
+			} else {
+				sldOutlineTransparency.setValue(100);
+			}
+
+			sldOutlineTransparency.addChangeListener(this);
+
+
+
+		}
+	}
+
+	public String getName() {
+		return Messages.getText("marker_fill_symbol");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs.toArray(new JPanel[0]);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+
+		JComponent comp = (JComponent) e.getSource();
+		if (comp.equals(btnChooseMarker)) {
+			ISymbolSelector symSelect = SymbolSelector.createSymbolSelector(marker, Geometry.TYPES.POINT);
+			PluginServices.getMDIManager().addWindow(symSelect);
+			marker = (IMarkerSymbol) symSelect.getSelectedObject();
+
+			if (marker == null) return;
+
+		}
+
+		if (!(marker instanceof IMultiLayerSymbol)) {
+			marker.setColor(markerCC.getColor());
+		}
+
+		if (comp.equals(btnOutline)) {
+			ISymbol sym = btnOutline.getSymbol();
+			if (sym instanceof ILineSymbol) {
+				ILineSymbol outline = (ILineSymbol) sym;
+				if (outline != null)
+					txtOutlineWidth.setDouble(outline.getLineWidth());
+				}
+
+		}
+
+		fireSymbolChangedEvent();
+	}
+
+	public ISymbol getLayer() {
+		IMarkerFillSymbol mfs = SymbologyLocator.getSymbologyManager().createMarkerFillSymbol();
+		IMarkerFillPropertiesStyle prop = panelStyle.getMarkerFillProperties();
+		prop.setFillStyle(rdGrid.isSelected() ?
+				IMarkerFillPropertiesStyle.GRID_FILL : IMarkerFillPropertiesStyle.RANDOM_FILL);
+
+		IMarkerSymbol myMarker;
+		try {
+			myMarker = (IMarkerSymbol) marker.clone();
+			mfs.setMarker(myMarker);
+		} catch (CloneNotSupportedException e) {
+			NotificationManager.addWarning(
+					"Marker Symbol does not support cloning", e);
+		}
+
+		mfs.setMarkerFillProperties(prop);
+
+		mfs.setHasOutline(useBorder.isSelected());
+		outline = (ILineSymbol) btnOutline.getSymbol();
+
+		if (outline!=null) {
+			outline.setLineWidth(txtOutlineWidth.getDouble());
+			outline.setAlpha(outlineAlpha);
+		}
+
+		mfs.setOutline(outline);
+
+		return mfs;
+	}
+
+	public EditorTool[] getEditorTools() {
+		return null;
+	}
+
+	public void stateChanged(ChangeEvent e) {
+		Object s = e.getSource();
+
+		if (s.equals(sldOutlineTransparency)) {
+			outlineAlpha = (int) (255*(sldOutlineTransparency.getValue()/100.0));
+		}
+
+		outline = (ILineSymbol) btnOutline.getSymbol();
+		fireSymbolChangedEvent();
+
+	}
+
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof IMarkerFillSymbol;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFill.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLibrary.java	(revision 42196)
@@ -0,0 +1,605 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Component;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentContext;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.spi.PersistentContextServices;
+
+/**
+ * 
+ * SymbolLibrary.java
+ * 
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 7, 2007
+ * 
+ */
+public class SymbolLibrary extends DefaultTreeModel implements ILibraryModel {
+    
+    private static Logger logger =
+        LoggerFactory.getLogger(SymbolLibrary.class);
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6802576248214649793L;
+	static protected String rootDirString;
+	private File rootDir;
+	private Vector<TreeModelListener> listeners = new Vector<TreeModelListener>();
+	private static SymbolLibrary instance = null;
+	private SymbolManager manager;
+
+	public static SymbolLibrary getInstance() {
+		SymbolPreferences preferences = getPreferences();
+		if (instance == null
+				|| !preferences.getSymbolLibraryPath().equals(rootDirString)) {
+			rootDirString = preferences.getSymbolLibraryPath();
+			instance = new SymbolLibrary(new File(rootDirString));
+		}
+		return instance;
+	}
+
+	private static SymbolPreferences getPreferences() {
+		return MapContextLocator.getSymbolManager().getSymbolPreferences();
+	}
+
+	protected SymbolLibrary(File rootDir) {
+		super(new DefaultMutableTreeNode(rootDir));
+		rootDirString = Messages.getText("symbol_library");
+		this.rootDir = rootDir;
+		manager = MapContextLocator.getSymbolManager();
+	}
+
+	final class MyFile extends File {
+		private static final long serialVersionUID = 6332989815291224773L;
+
+		public MyFile(String pathname) {
+			super(pathname);
+		}
+
+		public String toString() {
+
+			String path = getAbsolutePath();
+			if (path.equals(rootDir.getAbsolutePath()))
+				return rootDirString;
+			return path.substring(path.lastIndexOf(File.separator) + 1, path
+					.length());
+		}
+	};
+
+	private FileFilter ff = new FileFilter() {
+		public boolean accept(File pathname) {
+			return pathname.isDirectory();
+		}
+	};
+
+	@Override
+	public Object getRoot() {
+		return new DefaultMutableTreeNode(new MyFile(rootDir.getAbsolutePath()));
+	}
+
+	private File[] listFiles(File f, FileFilter ff) {
+		File[] files = null;
+		if( ff == null ) {
+			files = f.listFiles();
+		} else {
+			files = f.listFiles(ff);
+		}
+		if (files != null) {
+			Arrays.sort(files, new Comparator<File>() {
+				public int compare(File o1, File o2) {
+					return o1.getName().compareTo(o2.getName());
+				}
+			});
+		}
+		return files;
+	}
+	
+	private File[] listFiles(File f) {
+		return listFiles(f,null);
+	}
+	
+	private int countFiles(File f, FileFilter ff) {
+		// No precisa ordenarlos para saber cuantos hay
+		File[] files = f.listFiles(ff);
+		return files == null ? 0 : files.length;
+	}
+	
+	@Override
+	public int getChildCount(Object parent) {
+		File f = null;
+		if (parent instanceof DefaultMutableTreeNode) {
+			f = (File) ((DefaultMutableTreeNode) parent).getUserObject();
+
+		} else {
+			f = (File) parent;
+		}
+		return countFiles(f,ff);
+	}
+
+	@Override
+	public boolean isLeaf(Object node) {
+		return getChildCount(node) == 0;
+	}
+
+	@Override
+	public void addTreeModelListener(TreeModelListener l) {
+		listeners.add(l);
+	}
+
+	@Override
+	public void removeTreeModelListener(TreeModelListener l) {
+		listeners.remove(l);
+	}
+
+	@Override
+	public void valueForPathChanged(TreePath path, Object newValue) {
+	}
+
+	@Override
+	public Object getChild(Object parent, int index) {
+		File file = listFiles((File) (((DefaultMutableTreeNode) parent).getUserObject()),ff)[index];
+		DefaultMutableTreeNode node = new DefaultMutableTreeNode(new MyFile(
+				file.getAbsolutePath()));
+		node.setParent((DefaultMutableTreeNode) parent);
+		return node;
+	}
+
+	@Override
+	public int getIndexOfChild(Object parent, Object child) {
+		if (parent == null)
+			return -1;
+		File[] files = listFiles((File) ((DefaultMutableTreeNode) parent).getUserObject(),ff);
+		for (int i = 0; i < files.length; i++) {
+			if (files[i].equals(child))
+				return i;
+		}
+		return -1;
+	}
+
+	private Object getChildFile(Object parent, int index) {
+		File file = listFiles((File) (((DefaultMutableTreeNode) parent).getUserObject()))[index];
+		DefaultMutableTreeNode node = new DefaultMutableTreeNode(new MyFile(
+				file.getAbsolutePath()));
+		node.setParent((DefaultMutableTreeNode) parent);
+		return node;
+	}
+
+	private int getIndexOfChildFiles(Object parent, Object child) {
+		if (parent == null)
+			return -1;
+		File[] files = listFiles((File) ((DefaultMutableTreeNode) parent).getUserObject());
+		for (int i = 0; files != null && i < files.length; i++) {
+			if (files[i].getName().equals(child))
+				return i;
+		}
+		return -1;
+	}
+
+	public Object getElement(Object containerFolder, String elementName) {
+		if (containerFolder instanceof File) {
+			containerFolder = new DefaultMutableTreeNode(containerFolder);
+		}
+		int index = getIndexOfChildFiles(containerFolder, elementName);
+		if (index != -1) {
+			return getChildFile(containerFolder, index);
+		} else {
+			for (int i = 0; i < getChildCount(containerFolder); i++) {
+				Object o = getElement(getChildFile(containerFolder, i),
+						elementName);
+				if (o != null) {
+					return o;
+				}
+			}
+		}
+		return null;
+	}
+
+	public void addElement(Object element, String elementName,
+			Object containerFolder) {
+		if (element instanceof ISymbol) {
+			ISymbol sym = (ISymbol) element;
+			File folder = containerFolder == null ? rootDir
+					: (File) containerFolder;
+
+			// copy files and update fields
+			try {
+			    sym = (ISymbol) copyFilesToFolder(
+			        sym, folder, new HashMap());
+			} catch (Exception exc) {
+			    logger.info("Error while copying symbol files.", exc);
+			    return;
+			}
+
+			String fExtension = getPreferences().getSymbolFileExtension();
+			if (!elementName.toLowerCase().endsWith(fExtension)) {
+				elementName = elementName.concat(fExtension);
+			}
+
+			File targetFile = new File(folder, elementName);
+			if (targetFile.exists()) {
+				int resp = JOptionPane.showConfirmDialog(
+						(Component) PluginServices.getMainFrame(),
+						Messages.getText(
+								"fichero_ya_existe_seguro_desea_guardarlo"),
+						Messages.getText("guardar"),
+						JOptionPane.YES_NO_OPTION);
+				if (resp != JOptionPane.YES_OPTION) {
+					return;
+				}
+			}
+
+			try {
+				MapContextLocator.getSymbolManager().saveSymbol(sym,
+						elementName, folder, true);
+			} catch (SymbolException e) {
+				NotificationManager.addError(Messages.getText(
+						"save_error"), e);
+			}
+		} else {
+			throw new IllegalArgumentException(Messages.getText(
+					"adding_a_non_symbol_as_element"));
+		}
+	}
+
+	public void addFolder(Object parentFolder, String folderName) {
+		if (parentFolder == null) {
+			parentFolder = rootDir;
+		}
+		try {
+			File fParentFolder = (File) ((DefaultMutableTreeNode) parentFolder)
+					.getUserObject();
+			File f = new File(fParentFolder.getAbsolutePath() + File.separator
+					+ folderName);
+			if (!f.exists())
+				f.mkdir();
+			for (int i = 0; i < listeners.size(); i++) {
+				listeners.get(i).treeNodesInserted(null);
+			}
+		} catch (ConcurrentModificationException cme) {
+			cme.printStackTrace();
+		} catch (Exception e) {
+			throw new IllegalArgumentException(Messages.getText(
+					"invalid_folder_name"), e);
+		}
+	}
+
+	public void removeElement(Object element, Object containerFolder) {
+		try {
+			File fParentFolder = (File) containerFolder;
+			File f = new File(fParentFolder.getAbsolutePath() + File.separator
+					+ (String) element);
+			if (f.exists())
+				deleteRecursively(f);
+
+		} catch (Exception e) {
+			throw new IllegalArgumentException(Messages.getText(
+					"invalid_folder_name"));
+		}
+	}
+
+	private void deleteRecursively(File f) {
+		if (f.isDirectory()) {
+			FileUtils.deleteQuietly(f);
+		}
+		f.delete();
+	}
+
+	public void removeFolder(Object folderToRemove) {
+		try {
+			File f = (File) folderToRemove;
+
+			TreePath tp = treePathNode(f, rootDir);
+			if (f.exists())
+				f.delete();
+		} catch (Exception e) {
+			throw new IllegalArgumentException(Messages.getText(
+					"invalid_folder_name"));
+		}
+	}
+
+	private TreePath treePathNode(File f, File startingNode) {
+		for (int i = 0; i < getChildCount(startingNode); i++) {
+			File child = (File) getChild(startingNode, i);
+			TreePath tp = treePathNode(f, child);
+			if (tp == null) {
+				// it is not in this directory tree
+				continue;
+			} else {
+				if (startingNode != rootDir)
+					tp = tp.pathByAddingChild(startingNode);
+				return tp;
+			}
+		}
+
+		if (f.equals(startingNode)) {
+			return new TreePath(f);
+		}
+		return null;
+	}
+
+	private void fireTreeNodesRemoved(TreePath removedObjectTreePath) {
+		TreeModelEvent e = new TreeModelEvent(this, removedObjectTreePath);
+		for (Iterator<TreeModelListener> iterator = listeners.iterator(); iterator
+				.hasNext();) {
+			iterator.next().treeNodesRemoved(e);
+		}
+	}
+	
+	
+    private static Object copyFilesToFolder(
+        Object sym,
+        File theFolder,
+        Map processedFilesMap
+        // Set processedObjSet,
+        /*int dep*/) throws Exception {
+        
+        PersistenceManager manager =
+            ToolsLocator.getPersistenceManager();
+        PersistentState state = null;
+        state = manager.getState(sym, true);
+        PersistentContext context = state.getContext();
+        
+        List<PersistentState> states_list = getList(context);
+        int len = states_list.size();
+
+        for (int i=0; i<len; i++) {
+            
+            PersistentState aState = states_list.get(i);
+            DynStruct definition = aState.getDefinition();
+            DynField[] fields = definition.getDynFields();
+            
+            File value_file = null;
+            File value_file_new = null;
+            URL value_url = null;
+            URI value_uri = null;
+            File donefile = null;
+            Object value_obj = null;
+            Object value_obj_new = null;
+            
+            for (DynField field : fields) {
+                if (field.getType() == DataTypes.FILE) {
+                    
+                    value_file = aState.getFile(field.getName());
+                    
+                    donefile = (File) processedFilesMap.get(value_file);
+                    if (donefile == null) {
+                        /*
+                         * It was NOT processed before
+                         */
+                        value_file_new = copyFile(value_file, theFolder);
+                        aState.set(field.getName(), value_file_new);
+                        processedFilesMap.put(value_file, value_file_new);
+                    } else {
+                        /*
+                         * It was processed before
+                         */
+                        aState.set(field.getName(), donefile);
+                    }
+                    
+                    
+                } else if (field.getType() == DataTypes.URL) {
+                    
+                    value_url = aState.getURL(field.getName());
+                    if ("FILE".equalsIgnoreCase(value_url.getProtocol())) {
+                        
+                        File urlfile = FileUtils.toFile(value_url);
+                        donefile = (File) processedFilesMap.get(urlfile);
+                        if (donefile == null) {
+                            value_file_new = copyFile(urlfile, theFolder);
+                            value_url = value_file_new.toURI().toURL();
+                            aState.set(field.getName(), value_url);
+                            processedFilesMap.put(urlfile, value_file_new);
+                        } else {
+                            value_url = donefile.toURI().toURL();
+                            aState.set(field.getName(), value_url);
+                        }
+                        
+                    }
+                    
+                } else if (field.getType() == DataTypes.URI) {
+                    
+                    value_uri = aState.getURI(field.getName());
+                    if (value_uri.getScheme() == null ||
+                        "FILE".equalsIgnoreCase(value_uri.getScheme())) {
+                        
+                        File urifile = FileUtils.toFile(value_uri.toURL()) ;
+                        donefile = (File) processedFilesMap.get(urifile);
+                        if (donefile == null) {
+                            value_file_new = copyFile(urifile, theFolder);
+                            value_uri = value_file_new.toURI();
+                            aState.set(field.getName(), value_uri);
+                            processedFilesMap.put(urifile, value_file_new);
+                        } else {
+                            value_uri = donefile.toURI();
+                            aState.set(field.getName(), value_uri);
+                        }
+                        
+                    }
+                }
+            }
+        }
+        
+        // ================================
+        if (context instanceof PersistentContextServices) {
+            /*
+             * Ensure that previous instances are not used,
+             * so objects are recreated
+             */
+            ((PersistentContextServices) context).clear();
+        }
+        Object resp = manager.create(state);
+        return resp;
+    }
+    
+    /**
+     * @param context
+     * @return
+     */
+    private static List<PersistentState> getList(PersistentContext context) {
+
+        Iterator<PersistentState> iter = context.iterator();
+        List<PersistentState> resp = new ArrayList<PersistentState>();
+        while (iter.hasNext()) {
+            resp.add(iter.next());
+        }
+        return resp;
+    }
+
+    /*
+    private static Object recreate(PersistentState stat)
+        throws Exception {
+        
+        File tmp = File.createTempFile("sym" + System.currentTimeMillis(), ".xml");
+        FileOutputStream fos = new FileOutputStream(tmp);
+        PersistenceManager mana = ToolsLocator.getPersistenceManager();
+        mana.saveState(stat, fos);
+        fos.flush();
+        fos.close();
+        FileInputStream fis = new FileInputStream(tmp);
+        PersistentState nstat = mana.loadState(fis);
+        fis.close();
+        Object resp = mana.create(nstat);
+        return resp;
+    }
+    */
+    
+    /**
+     * Copies file to destination folder. If a file with same name
+     * exists, destination name is changed. The final destination
+     * file is returned.
+     * 
+     * @param srcfile
+     * @param dstfolder
+     * @return
+     * @throws IOException
+     */
+    private static File copyFile(File srcfile, File dstfolder) 
+    throws IOException {
+        
+        if (srcfile == null || dstfolder == null
+            || !srcfile.isFile() || !dstfolder.isDirectory()
+            || !srcfile.exists()) {
+            throw new IOException("Bad parameters in copyFile method (src='"+srcfile+"', target='"+dstfolder+"').");
+        }
+        
+        if (srcfile.getParentFile().equals(dstfolder)) {
+            // already in place, nothing to do
+            return srcfile;
+        }
+
+        if (!dstfolder.exists()) {
+            dstfolder.mkdirs();
+        }
+        
+        String checkfile = dstfolder.getCanonicalPath()
+            + File.separator + srcfile.getName();
+        File aux = new File(checkfile);
+        File targetFile = null;
+        if (aux.exists()) {
+            // a file with that name exists and is not the same file
+            // so we must create a new target file name
+            targetFile = getAvailableFileName(dstfolder, srcfile.getName());
+        } else {
+            targetFile = aux;
+        }
+        
+        FileUtils.copyFile(srcfile, targetFile);
+        return targetFile;
+    }
+
+    /**
+     * 
+     * Gets an available file name in the folder, using
+     * the name provided. It will add an index until an
+     * unused name is found
+     * 
+     * @param dstfolder
+     * @param name
+     * @return
+     */
+    private static File getAvailableFileName(
+        File dstfolder, String name) throws IOException {
+        
+        int index = -1;
+        boolean exists = true;
+        String tryname = null;
+        String checkfile = null;
+        File tryfile = null;
+        
+        while (exists) {
+            index++;
+            tryname = "" + index + "_" + name;
+            checkfile = dstfolder.getCanonicalPath()
+                + File.separator + tryname;
+            tryfile = new File(checkfile);
+            exists = tryfile.exists();
+        }
+        return tryfile;
+    }
+    
+    
+    
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/Mask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/Mask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/Mask.java	(revision 42196)
@@ -0,0 +1,208 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.legend.gui.ISymbolSelector;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+
+
+/**
+ * Implements a tab to modify attributes of a mask as style,size and
+ * symbol (to represent a point in the map)which can be applied to
+ * symbols like simple text, simple marker,picture marker and character marker.<p>
+ * <p>
+ * This tab is used several times in different places in our applicattion .For
+ * this reason, in order to avoid the repetition of code, this class has been
+ * created (instead of treat it like a simple tab). With this solution, the user
+ * only has to refer it to use it (and do not need to create a tab and fill it again
+ * and so on).
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class Mask extends JPanel {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 101766990165772454L;
+	private JButton btnHaloSymbol;
+	private JRadioButton rdBtnHalo;
+	private JRadioButton rdBtnNone;
+	private JNumberSpinner txtHaloSize;
+	private IFillSymbol fill;
+	private AbstractTypeSymbolEditor owner;
+	private ActionListener action = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			owner.fireSymbolChangedEvent();
+		};
+	};
+	/**
+	 * Constructor method that initializes the parameters to create a tab to modify
+	 * attributes of a mask for points such as style,size and symbol (to represent a point
+	 * in the map).
+	 * @param owner
+	 */
+	public Mask(AbstractTypeSymbolEditor owner) {
+		super();
+		setName(Messages.getText("mask"));
+
+		this.owner = owner;
+
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+		aux.setBorder(BorderFactory.createTitledBorder(Messages.getText("style")));
+		JPanel stylePanel = new JPanel(new GridLayout(2, 1));
+		stylePanel.add(getRdNone());
+		stylePanel.add(getRdHalo());
+		aux.addComponent(stylePanel);
+		ButtonGroup group = new ButtonGroup();
+		group.add(getRdNone());
+		group.add(getRdHalo());
+
+		JPanel aux2 = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+		aux2.add(new JLabel(Messages.getText("size")+":"));
+		aux2.add(getTxtHaloSize());
+		aux2.add(getBtnHaloSymbol());
+
+		getRdNone().addActionListener(action);
+		getRdHalo().addActionListener(action);
+		getTxtHaloSize().addActionListener(action);
+
+		add(aux);
+		add(aux2);
+	}
+	/**
+	 * Obtains the size for the text halo.This size is taken from a
+	 * JNumberSpinner. If this component does not exist,
+	 * a new JNumberSpinner is created to specify it.
+	 * @return
+	 */
+	private JNumberSpinner getTxtHaloSize() {
+		if (txtHaloSize == null) {
+			txtHaloSize = new JNumberSpinner(0, 5, 0, Double.MAX_VALUE, 1);
+		}
+
+		return txtHaloSize;
+	}
+
+	/**
+	 * Creates the button that allows the user to select the symbol that will substitute
+	 * a point in the map.
+	 * @return
+	 */
+	private JButton getBtnHaloSymbol() {
+		if (btnHaloSymbol == null) {
+			btnHaloSymbol = new JButton(Messages.getText("symbol"));
+			btnHaloSymbol.addActionListener(new ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					ISymbolSelector symSel = SymbolSelector.createSymbolSelector(
+							fill, Geometry.TYPES.SURFACE);
+					PluginServices.getMDIManager().addCentredWindow(symSel);
+					fill = (IFillSymbol) symSel.getSelectedObject();
+				};
+			});
+		}
+
+		return btnHaloSymbol;
+	}
+
+	/**
+	 * Determines if the halo style is selected.If the Radio button
+	 * that determines this information does not exist, a new radio button
+	 * is created for this purpose.
+	 * @return
+	 */
+	private JRadioButton getRdHalo() {
+		if (rdBtnHalo == null) {
+			rdBtnHalo = new JRadioButton(Messages.getText("halo"));
+		}
+
+		return rdBtnHalo;
+	}
+
+	/**
+	 * Determines if there will be no defined style for a point (without halo).
+	 * If the Radio button that determines this information does not exist,
+	 * a new radio button is created for this purpose.
+	 * @return
+	 */
+	private JRadioButton getRdNone() {
+		if (rdBtnNone == null) {
+			rdBtnNone = new JRadioButton(Messages.getText("none"));
+			rdBtnNone.setSelected(true);
+		}
+
+		return rdBtnNone;
+	}
+	/**
+	 * Sets the graphical component that shows the properties of the model.
+	 * @param mask
+	 */
+	public void setModel(IMask mask) {
+		if (mask != null) {
+			getTxtHaloSize().setDouble(mask.getSize());
+			fill = mask.getFillSymbol();
+		}
+		getRdHalo().setSelected(mask != null);
+	}
+	/**
+	 * Returns an IMask or null depending on the option
+	 * that the user had decided (if he wants a mask or not)in the tab "mask" inside
+	 * the panel to edit the properities of a symbol (SymbolEditor).
+	 * If the user
+	 * wants it, a new IMask is created.
+	 * @return
+	 */
+	public IMask getMask() {
+		if (!getRdHalo().isSelected()) return null;
+
+		IMask mask = SymbologyLocator.getSymbologyManager().createMask();
+		if (fill == null) {
+			fill =
+					(IFillSymbol) MapContextLocator.getSymbolManager()
+					.createSymbol(IFillSymbol.SYMBOL_NAME);
+		}
+		mask.setFillSymbol(fill);
+		mask.setSize(getTxtHaloSize().getDouble());
+		return mask;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/Mask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleMarker.java	(revision 42196)
@@ -0,0 +1,295 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: SimpleMarker.java 30289 2009-07-31 11:10:41Z jpiera $
+ * $Log$
+ * Revision 1.15  2007-08-14 11:10:20  jvidal
+ * javadoc updated
+ *
+ * Revision 1.14  2007/08/08 11:49:15  jaume
+ * refactored to avoid provide more than one EditorTool
+ *
+ * Revision 1.13  2007/08/07 11:20:11  jvidal
+ * javadoc
+ *
+ * Revision 1.12  2007/08/03 11:29:13  jaume
+ * refactored AbstractTypeSymbolEditorPanel class name to AbastractTypeSymbolEditor
+ *
+ * Revision 1.11  2007/07/18 06:56:03  jaume
+ * continuing with cartographic support
+ *
+ * Revision 1.10  2007/07/12 10:43:55  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.9  2007/05/31 09:36:22  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.8  2007/05/29 15:47:06  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.7  2007/05/21 10:38:27  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2007/05/09 16:08:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5  2007/04/27 12:10:17  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2007/04/05 16:08:34  jaume
+ * Styled labeling stuff
+ *
+ * Revision 1.3  2007/04/04 16:01:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/03/09 11:25:00  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.4  2007/02/21 07:35:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.3  2007/02/08 15:43:04  jaume
+ * some bug fixes in the editor and removed unnecessary imports
+ *
+ * Revision 1.1.2.2  2007/01/30 18:10:10  jaume
+ * start commiting labeling stuff
+ *
+ * Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
+
+
+/**
+ * SimpleMarker allows the user to store and modify the main properties that
+ * define a <b>simple marker</b>.<p>
+ * <p>
+ * This functionality is carried out thanks to a tab (simple marker and mask)
+ * which are included in the panel to edit the properities of a symbol (SymbolEditor)
+ * how is explained in AbstractTypeSymbolEditor.<p>
+ * <p>
+ * This tab (Simple Marker)allows the user to change the different attributes
+ * which are color (<b>jccColor</b>),text size (<b>txtSize</b>),text offset
+ * (<b>txtXOffset</b> and <b>txtXOffset</b>), style of the marker (<b></b>)
+ * the width (<b>txtWidth</b>) and the style of the line (<b>cmbStyle</b>)
+ * and the color of the outline(<b>jccOutlineColor</b>).<p>
+ *
+ *@see Mask
+ *@see AbstractTypeSymbolEditor
+ *@author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SimpleMarker extends AbstractTypeSymbolEditor implements ActionListener, FocusListener{
+
+	private ArrayList tabs = new ArrayList();
+	private ColorChooserPanel jccColor;
+	private JNumberSpinner txtSize;
+	private JNumberSpinner txtXOffset;
+	private JNumberSpinner txtYOffset;
+	//TODO: Comentarizado hasta que mask est� acabado
+//	private Mask mask;
+	private JComboBoxSimpleMarkeStyles cmbStyle;
+	private JCheckBox chkUseOutline;
+	private ColorChooserPanel jccOutlineColor;
+
+	public SimpleMarker(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+	/**
+	 * Initializes the parameters that define a simplemarker.To do it,
+	 * a tab is created inside the SymbolEditor panel with default values
+	 *  for the different attributes of the simple marker.Also, a mask will be
+	 *  added as a new tab.
+	 */
+
+	private void initialize() {
+		JPanel myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(Messages.getText("simple_marker"));
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+
+		// color chooser
+		jccColor = new ColorChooserPanel(true);
+		jccColor.setAlpha(255);
+
+		aux.addComponent(Messages.getText("color")+":",
+				jccColor	);
+
+		// marker width
+		txtSize = new JNumberSpinner(5.0, 25, 0.0, Double.MAX_VALUE, 1.0, 2);
+		aux.addComponent(Messages.getText("size")+":",
+				txtSize );
+//		txtSize.setDouble(5.0);
+
+		// marker xOffset
+		txtXOffset = new JNumberSpinner(0.0, 25, 0.0, Double.MAX_VALUE, 1.0, 2);
+		aux.addComponent(Messages.getText("x_offset")+":",
+				txtXOffset );
+
+
+		// marker width
+		txtYOffset = new JNumberSpinner(0.0, 25, 0.0, Double.MAX_VALUE, 1.0, 2);
+		aux.addComponent(Messages.getText("y_offset")+":",
+				txtYOffset );
+
+		// marker style
+		cmbStyle = new JComboBoxSimpleMarkeStyles();
+		aux.addComponent(Messages.getText("marker_style")+":",
+				cmbStyle);
+
+		// use outline
+		chkUseOutline = new JCheckBox(Messages.getText("use_outline"));
+		aux.addComponent(chkUseOutline);
+
+		// outline color
+		jccOutlineColor = new ColorChooserPanel(true);
+		jccOutlineColor.setAlpha(255);
+		aux.addComponent(Messages.getText("outline_color"), jccOutlineColor);
+
+		aux.setPreferredSize(new Dimension(300, 300));
+		myTab.add(aux);
+
+		// initialize defaults
+		jccColor.setColor(Color.BLACK);
+		cmbStyle.setSymbolColor(jccColor.getColor());
+
+
+		jccColor.addActionListener(this);
+		txtSize.addActionListener(this);
+		txtSize.addFocusListener(this);
+		txtXOffset.addActionListener(this);
+		txtXOffset.addFocusListener(this);
+		txtYOffset.addActionListener(this);
+		txtYOffset.addFocusListener(this);
+		cmbStyle.addActionListener(this);
+		chkUseOutline.addActionListener(this);
+		jccOutlineColor.addActionListener(this);
+
+		tabs.add(myTab);
+
+//		mask = new Mask(this);
+//		tabs.add(mask);
+	}
+
+	public ISymbol getLayer() {
+		ISimpleMarkerSymbol layer = SymbologyLocator.getSymbologyManager().createSimpleMarkerSymbol();
+		layer.setColor(jccColor.getColor());
+//		layer.setIsShapeVisible(true); //true is the default value for this property
+		layer.setSize(txtSize.getDouble());
+//		layer.setUnit(owner.getUnit());
+//		layer.setReferenceSystem(owner.getUnitsReferenceSystem());
+		layer.setOffset(new Point2D.Double(
+				txtXOffset.getDouble(),
+				txtYOffset.getDouble()));
+//		layer.setMask(mask.getMask());
+		layer.setStyle(((Integer) cmbStyle.getSelectedItem()).intValue());
+		layer.setOutlined(chkUseOutline.isSelected());
+		layer.setOutlineColor(jccOutlineColor.getColor());
+		return layer;
+	}
+
+	public String getName() {
+		return Messages.getText("simple_marker_symbol");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs.toArray(new JPanel[0]);
+	}
+
+	public void refreshControls(ISymbol layer) {
+		ISimpleMarkerSymbol sym;
+		try {
+			if (layer == null) {
+				// initialize defaults
+				System.err.println("SimpleLine.java:: should be unreachable code");
+				jccColor.setColor(Color.BLACK);
+
+				txtSize.setDouble(1.0);
+				txtXOffset.setDouble(0.0);
+				txtYOffset.setDouble(0.0);
+			} else {
+				sym = (ISimpleMarkerSymbol) layer;
+				jccColor.setColor(sym.getColor());
+
+				txtSize.setDouble(sym.getSize());
+				txtXOffset.setDouble(sym.getOffset().getX());
+				txtYOffset.setDouble(sym.getOffset().getY());
+				cmbStyle.setSymbolColor(sym.getColor());
+				chkUseOutline.setSelected(sym.hasOutline());
+				cmbStyle.setOutlineColor(sym.getOutlineColor());
+				cmbStyle.setSelectedItem(new Integer(sym.getStyle()));
+			}
+		} catch (IndexOutOfBoundsException ioEx) {
+			NotificationManager.addWarning("Symbol layer index out of bounds", ioEx);
+		} catch (ClassCastException ccEx) {
+			NotificationManager.addWarning("Illegal casting from " +
+					layer.getClass().getName() + " to ISimpleMarkerSymbol.", ccEx);
+
+		}
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		fireSymbolChangedEvent();
+	}
+
+	public EditorTool[] getEditorTools() {
+		return null;
+	}
+	public void focusGained(FocusEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+	public void focusLost(FocusEvent arg0) {
+		fireSymbolChangedEvent();
+
+	}
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof ISimpleMarkerSymbol;
+
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLayerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLayerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLayerManager.java	(revision 42196)
@@ -0,0 +1,425 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: SymbolLayerManager.java 31067 2009-10-01 16:11:25Z cordinyana $
+* $Log$
+* Revision 1.8  2007-09-17 09:21:45  jaume
+* refactored SymboSelector (added support for multishapedsymbol)
+*
+* Revision 1.7  2007/08/09 10:39:04  jaume
+* first round of found bugs fixed
+*
+* Revision 1.6  2007/06/29 13:07:33  jaume
+* +PictureLineSymbol
+*
+* Revision 1.5  2007/05/31 09:36:22  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2007/04/20 07:54:38  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.4  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.3  2007/02/08 15:45:37  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/08 15:43:04  jaume
+* some bug fixes in the editor and removed unnecessary imports
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2007/01/16 11:52:11  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/01/10 17:05:05  jaume
+* moved to FMap and gvSIG
+*
+* Revision 1.6  2006/11/08 10:56:47  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/07 08:52:30  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/06 17:08:45  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.1  2006/11/02 17:19:28  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.LayoutManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+
+import javax.swing.AbstractListModel;
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.legend.gui.ISymbolSelector;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+
+
+/**
+ * A component linked to a SymbolEditor that shows the layers
+ *
+ * @author jaume
+ *
+ */
+public class SymbolLayerManager extends JPanel implements ActionListener{
+   private static final long serialVersionUID = -1939951243066481691L;
+	private static final Dimension LIST_CELL_SIZE = new Dimension(150,37);
+	private SymbolEditor owner;
+    private JList jListLayers;
+    private ISymbol activeLayer;
+    private IMultiLayerSymbol symbol;
+    private JButton btnAddLayer = null;
+    private JPanel pnlButtons = null;
+    private JButton btnRemoveLayer = null;
+    private JButton btnMoveUpLayer = null;
+    private JButton btnMoveDownLayer = null;
+    private final Dimension btnDimension = new Dimension(24, 24);
+    private JScrollPane scroll;
+    private Color cellSelectedBGColor = Color.BLUE;
+
+
+    public SymbolLayerManager(SymbolEditor owner) {
+        this.owner = owner;
+        this.symbol = (IMultiLayerSymbol) owner.getSymbol();
+        if (symbol.getLayerCount()==0) {
+        	int shapeType = -1;
+			if (symbol instanceof IMarkerSymbol) {
+        		shapeType = Geometry.TYPES.POINT;
+			} else if (symbol instanceof ILineSymbol) {
+        		shapeType = Geometry.TYPES.CURVE;
+			} else if (symbol instanceof IFillSymbol) {
+        		shapeType = Geometry.TYPES.SURFACE;
+			}
+
+        	if (shapeType != -1)
+				symbol.addLayer(MapContextLocator.getSymbolManager()
+						.createSymbol(shapeType));
+   		}
+        initialize();
+
+    }
+
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+        this.add(getPnlButtons(), java.awt.BorderLayout.SOUTH);
+        getJListLayers().setSelectedIndex(0);
+    }
+
+    private JScrollPane getJScrollPane() {
+        if (scroll ==  null) {
+            scroll = new JScrollPane();
+            scroll.setPreferredSize(new Dimension(150, 160));
+            scroll.setViewportView(getJListLayers());
+        }
+        return scroll;
+    }
+
+    private JList getJListLayers() {
+        if (jListLayers == null) {
+            jListLayers = new JList();
+            jListLayers.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+            jListLayers.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+
+            jListLayers.setVisibleRowCount(-1);
+            jListLayers.addListSelectionListener(new ListSelectionListener() {
+                public void valueChanged(ListSelectionEvent e) {
+                    setLayer((ISymbol) jListLayers.getSelectedValue());
+                }
+            });
+            jListLayers.setModel(new SymbolLayerListModel());
+            jListLayers.setCellRenderer(new DefaultListCellRenderer() {
+              	private static final long serialVersionUID = -2551357351239544039L;
+
+				public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+                	return new SymbolLayerComponent((ISymbol) value, index, isSelected);
+                }
+            });
+            jListLayers.addMouseListener(new MouseAdapter() {
+				public void mouseClicked(MouseEvent e) {
+					if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
+						ISymbolSelector symSel = SymbolSelector.createSymbolSelector(activeLayer, owner.getShapeType());
+						PluginServices.getMDIManager().addWindow(symSel);
+						
+						ISymbol new_sym = (ISymbol) symSel.getSelectedObject();
+						/*
+						 * new_sym can be null (should not be a problem)
+						 */
+						updateSymbol(new_sym);
+						setLayer(new_sym);
+					}
+
+				}
+            });
+        }
+        return jListLayers;
+    }
+
+    private void updateSymbol(ISymbol layer) {
+    	if (layer != null) {
+    		int index = getJListLayers().getSelectedIndex();
+    		symbol.setLayer(index, layer);
+    		owner.refresh();
+    		validate();
+    	}
+    }
+
+    private void setLayer(ISymbol symbol) {
+    	if (symbol!=null) {
+    		activeLayer = symbol;
+    		owner.setOptionsPageFor(symbol);
+    	}
+    }
+
+    private JButton getBtnAddLayer() {
+        if (btnAddLayer == null) {
+        	btnAddLayer = new JButton(PluginServices.getIconTheme().get("symbol-layer-add"));
+            btnAddLayer.setActionCommand("ADD");
+            btnAddLayer.setSize(btnDimension);
+            btnAddLayer.setPreferredSize(btnDimension);
+            btnAddLayer.addActionListener(this);
+        }
+        return btnAddLayer;
+    }
+
+    private JPanel getPnlButtons() {
+        if (pnlButtons == null) {
+            pnlButtons = new JPanel();
+            pnlButtons.add(getBtnAddLayer(), null);
+            pnlButtons.add(getBtnRemoveLayer(), null);
+            pnlButtons.add(getBtnMoveUpLayer(), null);
+            pnlButtons.add(getBtnMoveDown(), null);
+        }
+        return pnlButtons;
+    }
+
+    private JButton getBtnRemoveLayer() {
+        if (btnRemoveLayer == null) {
+            btnRemoveLayer = new JButton(PluginServices.getIconTheme().get("symbol-layer-remove"));
+            btnRemoveLayer.setActionCommand("REMOVE");
+            btnRemoveLayer.setSize(btnDimension);
+            btnRemoveLayer.setPreferredSize(btnDimension);
+            btnRemoveLayer.addActionListener(this);
+        }
+        return btnRemoveLayer;
+    }
+
+    private JButton getBtnMoveUpLayer() {
+        if (btnMoveUpLayer == null) {
+            btnMoveUpLayer = new JButton(PluginServices.getIconTheme().get("symbol-layer-move-up"));
+            btnMoveUpLayer.setActionCommand("MOVE_UP");
+            btnMoveUpLayer.setSize(btnDimension);
+            btnMoveUpLayer.setPreferredSize(btnDimension);
+            btnMoveUpLayer.addActionListener(this);
+        }
+        return btnMoveUpLayer;
+    }
+
+    private JButton getBtnMoveDown() {
+        if (btnMoveDownLayer == null) {
+            btnMoveDownLayer = new JButton(PluginServices.getIconTheme().get("symbol-layer-move-down"));
+            btnMoveDownLayer.setActionCommand("MOVE_DOWN");
+            btnMoveDownLayer.setSize(btnDimension);
+            btnMoveDownLayer.setPreferredSize(btnDimension);
+            btnMoveDownLayer.addActionListener(this);
+        }
+        return btnMoveDownLayer;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        String command = e.getActionCommand();
+
+        int jlistIndex = getJListLayers().getSelectedIndex();
+        int index = symbol.getLayerCount() - 1 - jlistIndex;
+
+        if (command.equals("ADD")) {
+        	symbol.addLayer(owner.getNewLayer());
+            index = symbol.getLayerCount();
+        } else if (command.equals("REMOVE")) {
+        	int layerCount = symbol.getLayerCount();
+        	if (layerCount >1 && index < layerCount)
+        		symbol.removeLayer(symbol.getLayer(index));
+        } else if (command.equals("MOVE_UP")) {
+            if (index < symbol.getLayerCount()-1) {
+            	symbol.swapLayers(index, index+1);
+                jlistIndex--;
+            }
+        } else if (command.equals("MOVE_DOWN")) {
+            if (index > 0) {
+            	symbol.swapLayers(index, index-1);
+                jlistIndex++;
+            }
+        } else if (command.equals("LOCK")) {
+            try {
+//XMLENTITY-UPDATED	   	
+//                XMLEntity layerXML = symbol.getLayer(index).getXMLEntity();
+//                boolean locked = !layerXML.contains("locked") || !layerXML.getBooleanProperty("locked");
+//                layerXML.putProperty("locked", locked);
+            } catch (Exception ex) {
+                // Index out of bounds or so, we don't care
+            }
+        }
+        owner.refresh();
+        validate();
+        getJListLayers().setSelectedIndex(jlistIndex);
+
+    }
+
+    private class SymbolLayerListModel extends AbstractListModel {
+    	private static final long serialVersionUID = 4197818146836802855L;
+		private ArrayList listeners = new ArrayList();
+
+        public int getSize() {
+            return symbol.getLayerCount();
+        }
+
+        public Object getElementAt(int index) {
+        	return symbol.getLayer(symbol.getLayerCount()-1-index);
+        }
+
+        public void addListDataListener(ListDataListener l) {
+        	listeners.add(l);
+        }
+
+        public void removeListDataListener(ListDataListener l) {
+        	listeners.remove(l);
+        }
+
+    }
+
+	public ISymbol getSelectedLayer() {
+		return (ISymbol) getJListLayers().getSelectedValue();
+	}
+
+	public int getSelectedLayerIndex() {
+		return getJListLayers().getSelectedIndex();
+	}
+
+	public void validate() { // patched to force the list to be painted when it starts empty
+		jListLayers = null;
+		getJScrollPane().setViewportView(getJListLayers());
+		super.validate();
+	}
+
+	private class SymbolLayerComponent extends JPanel {
+		private static final long serialVersionUID = -3706313315505454031L;
+
+		public SymbolLayerComponent(ISymbol sym, int index, boolean isSelected) {
+			 LayoutManager layout = new FlowLayout(FlowLayout.LEFT, 3, 3);
+             setLayout(layout);
+             Color bgColor = (isSelected) ? cellSelectedBGColor
+                      : Color.WHITE;
+             setBackground(bgColor);
+             
+             JCheckBox chkVisible = new JCheckBox("", false);
+             ISymbol symbolLayer = symbol.getLayer(index);
+             if( symbolLayer!=null ) {
+                chkVisible.setSelected(symbolLayer.isShapeVisible());
+             }
+             chkVisible.setBackground(bgColor);
+             add(chkVisible);
+             SymbolPreviewer sp = new SymbolPreviewer();
+             sp.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+             sp.setAlignmentX(Component.LEFT_ALIGNMENT);
+             sp.setPreferredSize(new Dimension(80, 30));
+             sp.setSize(new Dimension(80, 30));
+             sp.setSymbol(sym);
+             sp.setBackground(Color.WHITE);
+             add(sp);
+             
+             // TODO: which is the meaning of a "locked" symbol, and where is defined??
+//             XMLEntity xml=null;
+////XMLENTITY-UPDATED	
+////			try {
+////				xml = sym.getXMLEntity();
+////			} catch (XMLException e) {
+////				NotificationManager.addWarning("Symbol layer", e);
+////			}
+//             String source;
+//             if (xml.contains("locked"))
+//             	source = xml.getBooleanProperty("locked") ?
+//             			"images/locked.png" :
+//             				"images/unlocked.png";
+//             else
+//             	source = "images/unlocked.png";
+
+             
+             JButton btnLock = new JButton(IconThemeHelper.getImageIcon("symbol-layer-unlock"));
+             btnLock.setSize(btnDimension);
+             btnLock.setPreferredSize(btnDimension);
+             btnLock.setActionCommand("LOCK");
+             btnLock.setBackground(bgColor);
+             btnLock.setAlignmentX(Component.CENTER_ALIGNMENT);
+             add(btnLock);
+             setPreferredSize(LIST_CELL_SIZE);
+
+		}
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLayerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ILibraryModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ILibraryModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ILibraryModel.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import javax.swing.tree.TreeModel;
+
+/**
+ * 
+ * ILibrary.java
+ *
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 7, 2007
+ *
+ */
+public interface ILibraryModel extends TreeModel {
+	
+	public void addFolder(Object parentFolder, String folderName);
+	
+	public void removeFolder(Object folderToRemove);
+	
+	public void addElement(Object element, String elementName, Object containerFolder);
+	
+	public void removeElement(Object element, Object containerFolder);
+	
+	public Object getElement(Object containerFolder, String elementName);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ILibraryModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolPreviewer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolPreviewer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolPreviewer.java	(revision 42196)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: SymbolPreviewer.java 30892 2009-09-21 12:02:19Z cordinyana $
+ * $Log: SymbolPreviewer.java,v $
+ * Revision 1.6  2007/08/16 06:54:35  jvidal
+ * javadoc updated
+ *
+ * Revision 1.5  2007/08/07 11:41:15  jvidal
+ * javadoc
+ *
+ * Revision 1.4  2007/04/05 16:08:34  jaume
+ * Styled labeling stuff
+ *
+ * Revision 1.3  2007/04/04 16:01:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/03/09 11:25:00  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1.2.3  2007/02/21 07:35:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.2  2007/02/08 15:43:05  jaume
+ * some bug fixes in the editor and removed unnecessary imports
+ *
+ * Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2007/01/16 11:52:11  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.8  2007/01/10 17:05:05  jaume
+ * moved to FMap and gvSIG
+ *
+ * Revision 1.7  2006/10/30 19:30:35  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/10/29 23:53:49  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/10/29 21:45:12  jaume
+ * centers in x the "none selected message"
+ *
+ * Revision 1.4  2006/10/29 21:43:34  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/10/29 21:40:29  jaume
+ * centers in x the "none selected message"
+ *
+ * Revision 1.2  2006/10/26 07:46:58  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/25 10:50:41  jaume
+ * movement of classes and gui stuff
+ *
+ * Revision 1.2  2006/10/24 19:54:55  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/24 16:31:12  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.geom.AffineTransform;
+
+import javax.swing.JPanel;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+
+
+/**
+ * SymbolPreviewer creates a JPanel used for the user to watch the preview of
+ * a symbol.It has an square form with a white background and the symbol
+ * is inserted in the middle.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class SymbolPreviewer extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8095930506630873031L;
+	private int hGap = 3, vGap = 3;
+	private ISymbol symbol;
+	private EditorTool prevTool;
+	private boolean useAllRoom = false; 
+	/**
+	 * constructor method
+	 *
+	 */
+	public SymbolPreviewer() {
+		super(true);
+		setBackground(Color.WHITE);
+	}
+	
+    public SymbolPreviewer(boolean all_room) {
+        super(true);
+        setBackground(Color.WHITE);
+        useAllRoom = all_room;
+    }
+	
+	/**
+	 * Returns the symbol printed inside
+	 * @return symbol
+	 */
+	public ISymbol getSymbol() {
+		return symbol;
+	}
+	/**
+	 * Establishes the symbol to be showed in the symbolpreviewer panel
+	 * @param symbol
+	 */
+	public void setSymbol(ISymbol symbol) {
+		this.symbol = symbol;
+		repaint();
+	}
+	/**
+	 * Draws the symbol in the middle of the pane in order to create a preview
+	 * of the final one.
+	 */
+	public void paint(Graphics g) {
+		super.paint(g);
+		Graphics2D g2 = (Graphics2D) g;
+		RenderingHints old = g2.getRenderingHints();
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+		g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+
+		g2.translate(hGap, vGap);
+		Rectangle r = getBounds();
+        r = new Rectangle(0, 0,
+            (int) (r.getWidth()-(hGap*2)), (int) (r.getHeight()-(vGap*2)));
+		
+		Double forcesize = this.forceSize(symbol);
+		if (forcesize != null && !useAllRoom) {
+            long difx = Math.round(0.5 * (r.getWidth() - forcesize.doubleValue()));
+            long dify = Math.round(0.5 * (r.getHeight() - forcesize.doubleValue()));
+		    
+		    r = new Rectangle((int) difx, (int) dify,
+	            (int) forcesize.doubleValue(),
+	            (int) forcesize.doubleValue());
+		}
+
+		if (symbol != null) {
+			try {
+				symbol.drawInsideRectangle(g2, new AffineTransform(), r,null);
+			} catch (SymbolDrawingException e) {
+				if (e.getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS) {
+					try {
+						MapContextLocator.getSymbolManager()
+								.getWarningSymbol(
+										SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+										"",
+										SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS)
+								.drawInsideRectangle(g2, null, r, null);
+					} catch (SymbolDrawingException e1) {
+						// IMPOSSIBLE TO REACH THIS
+					}
+				} else {
+					// should be unreachable code
+					throw new Error(Messages.getText("symbol_shapetype_mismatch"));
+				}
+			}
+		} else {
+			String noneSelected = "["+Messages.getText("preview_not_available")+"]";
+			FontMetrics fm = g2.getFontMetrics();
+			int lineWidth = fm.stringWidth(noneSelected);
+			float scale = (float) r.getWidth() / lineWidth;
+			Font f = g2.getFont();
+			float fontSize = f.getSize()*scale;
+			g2.setFont(	f.deriveFont( fontSize ) );
+
+			g2.drawString(noneSelected,	 (r.x*scale) - (hGap/2), r.height/2+vGap*scale);
+		}
+		g2.setRenderingHints(old);
+	}
+
+	/**
+	 * Sets the EditorTool for the pane.
+	 *
+	 * @param l,EditorTool
+	 */
+	public EditorTool setEditorTool(EditorTool tool) {
+		EditorTool previous = prevTool;
+
+		MouseListener[] ml = getMouseListeners();
+		for (int i = 0; i < ml.length; i++) {
+			super.removeMouseListener(ml[i]);
+		}
+		MouseMotionListener[] mml = getMouseMotionListeners();
+		for (int i = 0; i < mml.length; i++) {
+			super.removeMouseMotionListener(mml[i]);
+		}
+
+		if (tool!= null) {
+			super.addMouseListener(tool);
+			setCursor(tool.getCursor());
+			super.addMouseMotionListener(tool);
+		}
+		prevTool = tool;
+		return previous;
+	}
+	
+	private Double forceSize(ISymbol sym) {
+	    
+	    if (sym == null) {
+	        return null;
+	    }
+	    
+	    if (!(sym instanceof IMarkerSymbol)) {
+	        return null;
+	    }
+	    
+	    IMarkerSymbol msym = (IMarkerSymbol) sym;
+	    if (msym.getUnit() == -1) {
+	        /*
+	         * Pixels
+	         */
+	        return new Double(msym.getSize());
+	    } else {
+	        return null;
+	    }
+	    
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolPreviewer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JUrlFileChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JUrlFileChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JUrlFileChooser.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.i18n.Messages;
+
+import org.gvsig.andami.PluginServices;
+
+public class JUrlFileChooser extends JFileChooser {
+
+	private static final long serialVersionUID = 1844355534608274984L;
+
+	public JUrlFileChooser(String fileChooserID, String defaultDirectory) {
+		super(fileChooserID, defaultDirectory);
+		this.setFileFilter(ff);
+		this.setFileSelectionMode(JFileChooser.FILES_ONLY);
+		this.setMultiSelectionEnabled(false);
+	}
+
+	FileFilter ff = new FileFilter() {
+		public boolean accept(File f) {
+			if (f.isDirectory()) return true;
+			String fName = f.getAbsolutePath();
+			if (fName!=null) {
+				fName = fName.toLowerCase();
+				return fName.endsWith(".png")
+				|| fName.endsWith(".gif")
+				|| fName.endsWith(".jpg")
+				|| fName.endsWith(".jpeg")
+				|| fName.endsWith(".bmp")
+				|| fName.endsWith(".svg");
+			}
+			return false;
+		}
+
+		public String getDescription() {
+			return Messages.getText("bitmap_and_svg_image_files")+ "," +
+			Messages.getText("URL");
+		}
+	};
+
+	public URL getSelectedURL() {
+		String path;
+		File f = getSelectedFile();  
+
+		try {
+			if(f.canRead()) {
+				return f.toURI().toURL();
+			}
+			else {
+				path = f.toString();
+
+				if (!path.startsWith("http"))
+					if(path.contains("http") && 
+							(path.endsWith(".png")
+									|| path.endsWith(".gif")
+									|| path.endsWith(".jpg")
+									|| path.endsWith(".jpeg")
+									|| path.endsWith(".bmp")
+									|| path.endsWith(".svg"))) {
+
+						path = path.substring(path.indexOf("http"), path.length());
+						path = path.replace('\\', '/');
+						path = path.replaceFirst("/", "//");
+
+						return new URL(path);
+					}
+			}
+		} catch (MalformedURLException e) {
+			return null;
+		}
+		return null;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JUrlFileChooser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleFill.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleFill.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleFill.java	(revision 42196)
@@ -0,0 +1,327 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: SimpleFill.java 30289 2009-07-31 11:10:41Z jpiera $
+* $Log$
+* Revision 1.17  2007-09-19 10:45:05  jvidal
+* bug solved
+*
+* Revision 1.16  2007/08/16 06:54:35  jvidal
+* javadoc updated
+*
+* Revision 1.15  2007/08/10 07:28:25  jaume
+* translations
+*
+* Revision 1.14  2007/08/08 11:49:15  jaume
+* refactored to avoid provide more than one EditorTool
+*
+* Revision 1.13  2007/08/08 10:16:53  jvidal
+* javadoc
+*
+* Revision 1.12  2007/08/03 11:29:13  jaume
+* refactored AbstractTypeSymbolEditorPanel class name to AbastractTypeSymbolEditor
+*
+* Revision 1.11  2007/07/23 07:01:13  jaume
+* outline setting bug fixed
+*
+* Revision 1.10  2007/07/12 10:43:55  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2007/06/29 13:07:33  jaume
+* +PictureLineSymbol
+*
+* Revision 1.8  2007/05/21 10:38:27  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/05/09 16:08:14  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/05 16:08:34  jaume
+* Styled labeling stuff
+*
+* Revision 1.5  2007/04/04 16:01:14  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2007/03/30 09:39:45  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2007/03/28 16:44:08  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.4  2007/02/21 16:09:35  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.3  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/08 15:43:05  jaume
+* some bug fixes in the editor and removed unnecessary imports
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2007/01/16 11:52:11  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/13 09:15:23  jaume
+* javadoc and some clean-up
+*
+* Revision 1.3  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/27 12:41:09  jaume
+* GUI
+*
+*
+*/
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+//import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.project.documents.view.legend.gui.JSymbolPreviewButton;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+//import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.ISimpleFillSymbol;
+//import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+* <b>SimpleFill</b> allows to store and modify the properties that fills a
+* polygon with a padding and an outline<p>
+* <p>
+* This functionality is carried out thanks to a tab (simple fill)which is included
+* in the panel to edit the properities of a symbol (SymbolEditor)how is explained
+* in AbstractTypeSymbolEditor.<p>
+* <p>
+* This tab permits the user to change the color of the padding
+* (<b>jccFillColor</b>)and its outline (<b>btnOutline</b>).Also the user has the
+* options to modify the opacity (<b>sldFillTransparency,sldOutlineTransparency</b>)
+* for both attributes and the width <b>txtOutlineWidth</b> (only for the outline).
+*
+*
+*@see AbstractTypeSymbolEditor
+*@author jaume dominguez faus - jaume.dominguez@iver.es
+*/
+public class SimpleFill extends AbstractTypeSymbolEditor implements ActionListener, ChangeListener {
+
+	private static final Logger LOG = LoggerFactory.getLogger(SimpleFill.class);
+
+	private ColorChooserPanel jccFillColor;
+	private JNumberSpinner txtOutlineWidth;
+	private ArrayList tabs = new ArrayList();
+	private JSymbolPreviewButton btnOutline;
+	private JSlider sldOutlineTransparency;
+	private int outlineAlpha;
+	private ILineSymbol outline;
+	private JCheckBox useBorder;
+
+	public SimpleFill(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+	public String getName() {
+		return Messages.getText("simple_fill_symbol");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs.toArray(new JPanel[0]);
+	}
+
+	/**
+	 * Initializes the parameters that allows the user to fill the padding of
+	 * a polygon with a simplefill style.To do it, a tab (simple fill) is created inside the
+	 * SymbolEditor panel with default values for the different attributes.
+	 */
+	private void initialize() {
+		JPanel myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(Messages.getText("simple_fill"));
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+
+		jccFillColor = new ColorChooserPanel(true,true);
+		jccFillColor.setAlpha(255);
+		aux.addComponent(Messages.getText("fill_color"), jccFillColor);
+
+		JPanel aux2 = new JPanel();
+		btnOutline = new JSymbolPreviewButton(Geometry.TYPES.CURVE);
+		btnOutline.setPreferredSize(new Dimension(100, 35));
+		aux2.add(btnOutline);
+
+		aux.addComponent(new JBlank(10, 10));
+		useBorder = new JCheckBox(Messages.getText("use_outline"));
+		aux.addComponent(useBorder, aux2);
+		aux.addComponent(new JBlank(10, 10));
+
+		sldOutlineTransparency = new JSlider();
+		sldOutlineTransparency.setValue(100);
+		aux.addComponent(Messages.getText("outline")+":",
+				aux2);
+		aux.addComponent(Messages.getText("outline_opacity"), sldOutlineTransparency);
+		txtOutlineWidth = new JNumberSpinner(0.0, 25, 0.0, Double.MAX_VALUE, 1.0, 2);
+		aux.addComponent(Messages.getText("outline_width"), txtOutlineWidth);
+		myTab.add(aux);
+
+		useBorder.addActionListener(this);
+		jccFillColor.addActionListener(this);
+		btnOutline.addActionListener(this);
+		txtOutlineWidth.addActionListener(this);
+		sldOutlineTransparency.addChangeListener(this);
+		tabs.add(myTab);
+	}
+
+	public ISymbol getLayer() {
+		IFillSymbol layer = SymbologyLocator.getSymbologyManager().createSimpleFillSymbol();
+
+		layer.setHasOutline(useBorder.isSelected());
+		outline = (ILineSymbol) btnOutline.getSymbol();
+
+		if (outline!=null) {
+			outline.setLineWidth(txtOutlineWidth.getDouble());
+			outline.setAlpha(outlineAlpha);
+		}
+
+		layer.setOutline(outline);
+
+		layer.setHasFill(jccFillColor.getUseColorisSelected());
+		Color c = jccFillColor.getColor();
+		if (c != null)
+			c = new Color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha());
+		layer.setFillColor(c);
+
+		return layer;
+	}
+
+	public void refreshControls(ISymbol layer) {
+		IFillSymbol sym;
+		try {
+			if (layer == null) {
+				// initialize defaults
+				LOG.warn(getClass().getName()+":: should be unreachable code", new Exception());
+			} else {
+
+
+				//fill
+
+				sym = (IFillSymbol) layer;
+				jccFillColor.setUseColorIsSelected(sym.hasFill());
+				jccFillColor.setColor(sym.getFillColor());
+				//outline
+
+				sldOutlineTransparency.removeChangeListener(this);
+
+				outline=sym.getOutline();
+				btnOutline.setSymbol(outline);
+				useBorder.setSelected(sym.hasOutline());
+
+				if (outline != null) {
+					outlineAlpha = outline.getAlpha();
+					sldOutlineTransparency.setValue((int)((outlineAlpha/255D)*100));
+					txtOutlineWidth.setDouble(outline.getLineWidth());
+				} else {
+					sldOutlineTransparency.setValue(100);
+				}
+
+				sldOutlineTransparency.addChangeListener(this);
+
+			}
+		} catch (IndexOutOfBoundsException ioEx) {
+			LOG.warn("Symbol layer index out of bounds", ioEx);
+		} catch (ClassCastException ccEx) {
+			LOG.warn("Illegal casting from " +
+					layer.getClass().getName() + " to IFillSymbol.", ccEx);
+
+		}
+	}
+
+	public boolean canManageSymbol(ISymbol symbol){
+		return symbol instanceof ISimpleFillSymbol;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		Object s = e.getSource();
+
+		if (s.equals(btnOutline)) {
+			ISymbol sym = btnOutline.getSymbol();
+			if (sym instanceof ILineSymbol) {
+				ILineSymbol outline = (ILineSymbol) sym;
+				if (outline != null)
+					txtOutlineWidth.setDouble(outline.getLineWidth());
+			}
+
+		}
+
+
+		fireSymbolChangedEvent();
+	}
+
+	public void stateChanged(ChangeEvent e) {
+		Object s = e.getSource();
+
+
+		if (s.equals(sldOutlineTransparency)) {
+			outlineAlpha = (int) (255*(sldOutlineTransparency.getValue()/100.0));
+		}
+
+		outline = (ILineSymbol) btnOutline.getSymbol();
+
+		fireSymbolChangedEvent();
+	}
+
+	public EditorTool[] getEditorTools() {
+		return null;
+	}
+
+
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleFill.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelector.java	(revision 42196)
@@ -0,0 +1,489 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: StyleSelector.java 30289 2009-07-31 11:10:41Z jpiera $
+* $Log$
+* Revision 1.11  2007-08-21 09:32:53  jvidal
+* javadoc
+*
+* Revision 1.10  2007/05/31 09:36:22  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2007/05/10 09:47:50  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2007/05/08 15:44:07  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/04/27 12:10:17  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/11 16:02:43  jaume
+* file filter
+*
+* Revision 1.5  2007/04/05 16:08:34  jaume
+* Styled labeling stuff
+*
+* Revision 1.4  2007/04/04 16:01:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.4  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.3  2007/02/08 15:43:04  jaume
+* some bug fixes in the editor and removed unnecessary imports
+*
+* Revision 1.1.2.2  2007/01/30 18:10:10  jaume
+* start commiting labeling stuff
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileOutputStream;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.JComboBoxUnits;
+import org.gvsig.app.gui.panels.ImageSizePanel;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.controls.dnd.JDnDList;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Creates a panel where the user can select a style for an object that allows
+ * to manage this property.This panel will be similar to the symbol selector panel
+ * and, on it, the user will have a previsualization of the style of objects
+ * stored and posibilities to modify an existing one, to create a new one
+ * and so on.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class StyleSelector extends SymbolSelector {
+    
+    private static final Logger logger = LoggerFactory.getLogger(StyleSelector.class);
+    
+	private static final long serialVersionUID = -7476555713446755512L;
+	private ImageSizePanel isp;
+
+	public StyleSelector(IStyle style, int shapeType)
+			throws IllegalArgumentException {
+		
+		this(style, shapeType, new SelectorFilter() {
+			public boolean accepts(Object obj) {
+				return obj instanceof IStyle;
+			}
+		});
+	}
+	/**
+	 * Constructor method
+	 *
+	 * @param style
+	 * @param shapeType
+	 * @param filter
+	 */
+	public StyleSelector(IStyle style, int shapeType, SelectorFilter filter)
+	throws IllegalArgumentException {
+		
+		super(null, shapeType, filter, false);
+
+		rootDir = new File(
+				MapContextLocator.getSymbolManager().getSymbolPreferences()
+				.getSymbolLibraryPath());
+		
+    	// Preferences prefs = Preferences.userRoot().node( "gvsig.foldering" );
+		// rootDir = new File(prefs.get("SymbolStylesFolder",
+		// System.getProperty("user.home")+"/gvSIG/Styles"));
+		
+		if (!rootDir.exists())
+			rootDir.mkdir();
+
+		initialize(style);
+		
+		lblTitle.setText(Messages.getText("label_styles"));
+		treeRootName = Messages.getText("style_library");
+
+	}
+
+	@Override
+	protected void initialize(Object currentElement) throws IllegalArgumentException {
+    	library = new StyleLibrary(rootDir);
+
+    	this.setLayout(new BorderLayout());
+    	this.setSize(400, 221);
+
+    	this.add(getJNorthPanel(), BorderLayout.NORTH);
+    	this.add(getJSplitPane(), BorderLayout.CENTER);
+    	this.add(getJEastPanel(), BorderLayout.EAST);
+    	ActionListener okAction = new ActionListener() {
+    		public void actionPerformed(ActionEvent e) {
+    			accepted = true;
+    			PluginServices.getMDIManager().closeWindow(StyleSelector.this);
+    		}
+    	}, cancelAction = new ActionListener() {
+    		public void actionPerformed(ActionEvent e) {
+    			setSymbol(null);
+    			PluginServices.getMDIManager().closeWindow(StyleSelector.this);
+    		}
+    	};
+
+    	okCancelPanel = new AcceptCancelPanel();
+    	okCancelPanel.setOkButtonActionListener(okAction);
+    	okCancelPanel.setCancelButtonActionListener(cancelAction);
+
+    	this.add(okCancelPanel, BorderLayout.SOUTH);
+    	libraryBrowser.setSelectionRow(0);
+
+    	SillyDragNDropAction dndAction = new SillyDragNDropAction();
+    	libraryBrowser.addMouseListener(dndAction);
+    	libraryBrowser.addMouseMotionListener(dndAction);
+    	getJListSymbols().addMouseListener(dndAction);
+    	getJListSymbols().addMouseMotionListener(dndAction);
+    	setSymbol(currentElement);
+    }
+
+	@Override
+	public void setSymbol(Object style) {
+		((StylePreviewer) jPanelPreview).setStyle((IStyle) style);
+		updateOptionsPanel();
+	}
+
+	@Override
+	public Object getSelectedObject() {
+		if (!accepted) return null;
+		Object mySelectedElement = ((StylePreviewer) jPanelPreview).getStyle();
+
+		if (mySelectedElement instanceof CartographicSupport) {
+			CartographicSupport csSym = (CartographicSupport) mySelectedElement;
+			csSym.setUnit(cmbUnits.getSelectedUnitIndex());
+			csSym.setReferenceSystem(cmbReferenceSystem.getSelectedIndex());
+		}
+
+		return mySelectedElement;
+	}
+
+	protected ListModel newListModel() {
+		StyleSelectorListModel listModel = new StyleSelectorListModel(
+				dir,
+				sFilter,
+				StyleSelectorListModel.STYLE_FILE_EXTENSION);
+		return listModel;
+
+	}
+
+	protected JPanel getJPanelOptions() {
+		if (jPanelOptions == null) {
+			jPanelOptions = new GridBagLayoutPanel();
+			jPanelOptions.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("options")));
+			jPanelOptions.addComponent(getImageSizePanel());
+			jPanelOptions.addComponent(Messages.getText("units"),
+					cmbUnits = new JComboBoxUnits(true));
+			jPanelOptions.addComponent("",
+					cmbReferenceSystem = new JComboBoxUnitsReferenceSystem());
+		}
+    	return jPanelOptions;
+    }
+
+	/**
+	 *
+     * This method initializes ImageSizePanel
+     *
+     * @return isp ImageSizePanel
+     */
+	 private ImageSizePanel getImageSizePanel() {
+		 if (isp == null) {
+			isp = new ImageSizePanel();
+			isp.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					ILabelStyle st = (ILabelStyle) getSelectedObject();
+					if (st != null) {
+						double[] sz = isp.getImageDimension();
+						st.setSize(sz[0], sz[1]);
+					}
+				}
+			});
+		}
+
+		return isp;
+	}
+
+	protected void updateOptionsPanel() {
+		IStyle s = ((StylePreviewer) jPanelPreview).getStyle();
+	    if (s instanceof ILabelStyle) {
+			ILabelStyle lab = (ILabelStyle) s;
+			Dimension sz = lab.getSize();
+			getImageSizePanel().setImageSize(sz);
+		}
+	 }
+
+
+    /**
+     * This method initializes jList
+     *
+     * @return javax.swing.JList
+     */
+    protected JList getJListSymbols() {
+    	if (jListSymbols == null) {
+    		jListSymbols = new JDnDList();
+    		jListSymbols.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+            jListSymbols.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+            jListSymbols.setVisibleRowCount(-1);
+            jListSymbols.addListSelectionListener(new ListSelectionListener() {
+            	public void valueChanged(ListSelectionEvent e) {
+            		setStyle(jListSymbols.getSelectedValue());
+            		updateOptionsPanel();
+            	}
+            });
+            ListCellRenderer renderer = new ListCellRenderer() {
+        		private Color mySelectedBGColor = new Color(255,145,100,255);
+    			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+    				IStyle sty = (IStyle) value;
+    				JPanel pnl = new JPanel();
+    				BoxLayout layout = new BoxLayout(pnl, BoxLayout.Y_AXIS);
+    				pnl.setLayout(layout);
+    				Color bgColor = (isSelected) ? mySelectedBGColor
+    							 : getJListSymbols().getBackground();
+
+    				pnl.setBackground(bgColor);
+    				StylePreviewer sp = new StylePreviewer();
+    				sp.setShowOutline(false);
+    				sp.setAlignmentX(Component.CENTER_ALIGNMENT);
+    				sp.setPreferredSize(new Dimension(50, 50));
+    				sp.setStyle(sty);
+    				sp.setBackground(bgColor);
+    				pnl.add(sp);
+    				JLabel lbl = new JLabel(sty.getDescription());
+    				lbl.setBackground(bgColor);
+    				lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
+    				pnl.add(lbl);
+
+    				return pnl;
+    			}
+
+        	};
+        	jListSymbols.setCellRenderer(renderer);
+    	}
+    	return jListSymbols;
+    }
+    /**
+     * Modify the previsualization showed in the panel with the style of the
+     * new object selected.
+     *
+     * @param selectedValue
+     */
+   protected void setStyle(Object selectedValue) {
+		//selectedElement = selectedValue;
+		((StylePreviewer) jPanelPreview).setStyle((IStyle) selectedValue);
+		doLayout();
+		repaint();
+	}
+
+	protected void propertiesPressed() {
+		StyleEditor se = new StyleEditor((IStyle) getSelectedObject());
+		PluginServices.getMDIManager().addWindow(se);
+		setStyle(se.getStyle());
+	}
+
+	protected void savePressed() {
+		if (getSelectedObject() ==null)
+			return;
+
+		JFileChooser jfc = new JFileChooser(rootDir);
+		javax.swing.filechooser.FileFilter ff = new javax.swing.filechooser.FileFilter() {
+			public boolean accept(File f) {
+				return f.getAbsolutePath().
+				toLowerCase().
+				endsWith(StyleSelectorListModel.STYLE_FILE_EXTENSION);
+			}
+
+			public String getDescription() {
+				return Messages.getText("gvSIG_style_definition_file")+ " ("+StyleSelectorListModel.STYLE_FILE_EXTENSION+")";
+			}
+		};
+		jfc.setFileFilter(ff);
+		JPanel accessory = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+		accessory.add(new JLabel(Messages.getText("enter_description")));
+		JTextField txtDesc = new JTextField(25);
+		txtDesc.setText(((IStyle) getSelectedObject()).getDescription());
+		accessory.add(txtDesc);
+		jfc.setAccessory(accessory);
+		if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
+			File targetFile = jfc.getSelectedFile();
+
+			String fExtension = StyleSelectorListModel.STYLE_FILE_EXTENSION;
+
+			// apply description
+			String desc;
+			if (txtDesc.getText()==null || txtDesc.getText().trim().equals("")) {
+				// default to file name
+				String s = targetFile.getAbsolutePath();
+				desc = s.substring(s.lastIndexOf(File.separator)+1).replaceAll(fExtension, "");
+			} else {
+				desc = txtDesc.getText().trim();
+			}
+			IStyle s = (IStyle) getSelectedObject();
+			s.setDescription(desc);
+
+			// save it
+
+			if (!targetFile.
+					getAbsolutePath().
+					toLowerCase().
+					endsWith(fExtension)) {
+			    
+			    targetFile = new File(targetFile.getAbsolutePath() + fExtension);
+			}
+
+			if(targetFile.exists()){
+				int resp = JOptionPane.showConfirmDialog(
+						(Component) PluginServices.getMainFrame(),
+						Messages.getText("fichero_ya_existe_seguro_desea_guardarlo"),
+						Messages.getText("guardar"), JOptionPane.YES_NO_OPTION);
+				if (resp != JOptionPane.YES_OPTION) {
+					return;
+				}
+			}
+			
+			// the object to persist is 's'
+			try {
+			    
+			    PersistenceManager pman = ToolsLocator.getPersistenceManager();
+			    PersistentState psta = pman.getState(s, true);
+	            if (psta.getContext().getErrors() != null) {
+	                throw psta.getContext().getErrors();
+	            }
+	            FileOutputStream fos = new FileOutputStream(targetFile);
+	            pman.saveState(psta, fos);
+	            fos.close();
+
+			} catch (Exception ex) {
+				NotificationManager.addError(
+						Messages.getText("save_error"), ex);
+			}
+			getJListSymbols().setModel(newListModel());
+		}
+	}
+	
+	protected void newPressed() {
+        IStyle curr_sty = ((StylePreviewer) jPanelPreview).getStyle();
+        
+        if(curr_sty != null){
+	        try {
+	            curr_sty = (IStyle) curr_sty.clone();
+	        } catch (Exception cnse) {
+	            logger.info("Unable to clone style. "
+	                + "Creating a new empty SimpleLabelStyle...",
+	                cnse);
+	            curr_sty = SymbologyLocator.getSymbologyManager().createDefaultLabelStyle();
+	        }
+        }else{
+        	curr_sty = SymbologyLocator.getSymbologyManager().createDefaultLabelStyle();
+        }
+        
+        StyleEditor se = new StyleEditor(curr_sty);
+        PluginServices.getMDIManager().addWindow(se);
+        this.setStyle(se.getStyle());
+    }
+	
+    /**
+     * This method initializes jPanelPreview
+     *
+     * @return javax.swing.JComponent
+     */
+    protected JComponent getJPanelPreview() {
+    	if (jPanelPreview == null) {
+    		jPanelPreview = new StylePreviewer();
+    		jPanelPreview.setPreferredSize(new java.awt.Dimension(100,100));
+    		jPanelPreview.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+    		((StylePreviewer) jPanelPreview).setShowOutline(true);
+    	}
+    	return jPanelPreview;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+    	if (!act) return;
+		Object selectedElement = ((StylePreviewer) jPanelPreview).getStyle();//getSelectedObject();
+		performActionOn(selectedElement, e);
+		StyleSelector.this.repaint();
+    }
+
+    public int getUnit() {
+    	return cmbUnits.getSelectedUnitIndex();
+    }
+
+    public int getReferenceSystem() {
+    	return cmbReferenceSystem.getSelectedIndex();
+    }
+
+	public void setUnit(int unit) {
+		cmbUnits.setSelectedUnitIndex(unit);
+	}
+
+	public void setReferenceSystem(int referenceSystem) {
+		cmbReferenceSystem.setSelectedIndex(referenceSystem);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleSelector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MultiShapeSymbolSelector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MultiShapeSymbolSelector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MultiShapeSymbolSelector.java	(revision 42196)
@@ -0,0 +1,256 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.border.Border;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.view.legend.gui.ISymbolSelector;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.IMultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.tools.exception.BaseException;
+
+
+public class MultiShapeSymbolSelector extends JPanel implements
+    ISymbolSelector, ActionListener {
+    
+    private static Logger logger = LoggerFactory.getLogger(
+        MultiShapeSymbolSelector.class);
+
+	private static final long serialVersionUID = 3967550608736418084L;
+	private SymbolSelector markerSelector;
+	private SymbolSelector lineSelector;
+	private SymbolSelector fillSelector;
+	private WindowInfo wi;
+	private JTabbedPane tabbedPane;
+	
+	private GeometryManager gManager = null;
+	private JButton closeButton = null;
+	private JPanel closeButtonPanel = null;
+
+	public static ISymbolSelector createSymbolBrowser() {
+		WindowInfo winfo = new WindowInfo(WindowInfo.RESIZABLE|WindowInfo.MAXIMIZABLE|WindowInfo.ICONIFIABLE);
+		winfo.setWidth(706);
+		winfo.setHeight(500);
+		winfo.setTitle(Messages.getText("symbols_browser"));
+		MultiShapeSymbolSelector resp = null;
+		
+		try {
+		    /*
+		     * This instantiates a symbol browser
+		     * (a selector without accept/cancel panel)
+		     */
+            resp = new MultiShapeSymbolSelector();
+            resp.wi = winfo;
+        } catch (BaseException e) {
+            logger.info("Unable to create symbol browser, will use selector.", e);
+            resp = new MultiShapeSymbolSelector(winfo);
+        }
+        return resp;
+	}
+	
+	/*
+	 * This instantiates a symbol browser 
+	 */
+    private MultiShapeSymbolSelector() throws BaseException {
+
+        GeometryType
+        gt = getGeomManager().getGeometryType(Geometry.TYPES.POINT,
+            SUBTYPES.GEOM2D);
+        markerSelector = new SymbolSelectorBrowser(gt, true);
+        gt = getGeomManager().getGeometryType(Geometry.TYPES.CURVE,
+            SUBTYPES.GEOM2D);
+        lineSelector = new SymbolSelectorBrowser(gt, true);
+        gt = getGeomManager().getGeometryType(Geometry.TYPES.SURFACE,
+            SUBTYPES.GEOM2D);
+        fillSelector = new SymbolSelectorBrowser(gt, true);
+
+        initialize(true);
+    }
+	
+	private MultiShapeSymbolSelector(WindowInfo wi) {
+		this((Object)null);
+		this.wi = wi;
+	}
+	
+	MultiShapeSymbolSelector(Object currSymbol) {
+                IMultiShapeSymbol sym = null;
+                try {
+                    sym = (IMultiShapeSymbol) currSymbol;
+                } catch(Exception ex) {
+                    logger.warn("Incorrect symbol type, use default.",ex);
+                }
+		if (sym == null) {
+			markerSelector = (SymbolSelector) SymbolSelector
+					.createSymbolSelector(null, Geometry.TYPES.POINT);
+			lineSelector = (SymbolSelector) SymbolSelector
+					.createSymbolSelector(null, Geometry.TYPES.CURVE);
+			fillSelector = (SymbolSelector) SymbolSelector
+					.createSymbolSelector(null, Geometry.TYPES.SURFACE);
+		} else {
+			markerSelector = (SymbolSelector) SymbolSelector
+					.createSymbolSelector(sym.getMarkerSymbol(),
+							Geometry.TYPES.POINT);
+			lineSelector = (SymbolSelector) SymbolSelector
+					.createSymbolSelector(sym.getLineSymbol(),
+							Geometry.TYPES.CURVE);
+			fillSelector = (SymbolSelector) SymbolSelector
+					.createSymbolSelector(sym.getFillSymbol(),
+							Geometry.TYPES.SURFACE);
+		}
+		initialize(false);
+	}
+
+
+	private void initialize(boolean add_close_button) {
+		setLayout(new BorderLayout());
+		add(getJTabbedPane(), BorderLayout.CENTER);
+		if (add_close_button) {
+		    add(getCloseButtonPanel(), BorderLayout.SOUTH);
+		}
+	}
+
+    private JTabbedPane getJTabbedPane() {
+		if (tabbedPane == null) {
+			tabbedPane = new JTabbedPane();
+			tabbedPane.addTab(Messages.getText("marker"), markerSelector);
+			tabbedPane.addTab(Messages.getText("line"), lineSelector);
+			tabbedPane.addTab(Messages.getText("fill"), fillSelector);
+			tabbedPane.setPreferredSize(getWindowInfo().getMinimumSize());
+		}
+
+		return tabbedPane;
+	}
+
+
+	public Object getSelectedObject() {
+	    
+		IMultiShapeSymbol sym = SymbologyLocator.getSymbologyManager().createMultiShapeSymbol();
+		
+		IMarkerSymbol ims = (IMarkerSymbol) markerSelector.getSelectedObject();
+		ILineSymbol ils = (ILineSymbol) lineSelector.getSelectedObject();
+		IFillSymbol ifs = (IFillSymbol) fillSelector.getSelectedObject();
+		
+		if (ims == null || ils == null || ifs == null) {
+            /*
+             * If one of the symbols is null, it's because the user
+             * has cancelled so those who have called this method must
+             * deal with null (many of them where already checking before
+             * this change)
+             */
+            return null;
+		} else {
+            sym.setMarkerSymbol(ims);
+            sym.setLineSymbol(ils);
+            sym.setFillSymbol(ifs);
+            return sym;
+		}
+		
+		
+	}
+
+	public void setSymbol(Object symbol) {
+		IMultiShapeSymbol sym = (IMultiShapeSymbol) symbol;
+		markerSelector.setSymbol(sym.getMarkerSymbol());
+		lineSelector.setSymbol(sym.getLineSymbol());
+		fillSelector.setSymbol(sym.getFillSymbol());
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (wi == null) {
+			wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+			wi.setWidth(706);
+			wi.setHeight(500);
+			wi.setTitle(Messages.getText("symbol_selector"));
+		}
+		return wi;
+	}
+
+	public Object getWindowProfile() {
+		if( wi.isModal() ) {
+			return WindowInfo.DIALOG_PROFILE;
+		}
+		return WindowInfo.EDITOR_PROFILE;
+	}
+	
+	private GeometryManager getGeomManager() {
+	    
+	    if (gManager == null) {
+	        gManager = GeometryLocator.getGeometryManager();
+	    }
+	    return gManager;
+	}
+
+	private JButton getCloseButton() {
+	    if (closeButton == null) {
+	        String txt = Messages.getText("close");
+	        closeButton = new JButton(txt);
+	        closeButton.addActionListener(this);
+	    }
+	    return closeButton;
+	}
+	
+    private Component getCloseButtonPanel() {
+        
+        if (closeButtonPanel == null) {
+            closeButtonPanel = new JPanel();
+            Border brd = BorderFactory.createEmptyBorder(10, 10, 10, 10);
+            closeButtonPanel.setBorder(brd);
+            closeButtonPanel.setLayout(new BorderLayout());
+            closeButtonPanel.add(getCloseButton(), BorderLayout.EAST);
+        }
+        return closeButtonPanel;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        
+        if (e.getSource() == this.getCloseButton()) {
+            PluginServices.getMDIManager().closeWindow(this);
+        }
+        
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MultiShapeSymbolSelector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelector.java	(revision 42196)
@@ -0,0 +1,1191 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.io.File;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+import javax.swing.JToggleButton;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import org.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.gui.JComboBoxUnits;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.project.documents.view.legend.gui.ISymbolSelector;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol_v2;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.gui.beans.swing.JComboBoxFontSizes;
+import org.gvsig.gui.beans.swing.JComboBoxFonts;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IMultiLayerFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.IMultiLayerLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMultiLayerMarkerSymbol;
+import org.gvsig.tools.dispose.Disposable;
+
+
+/**
+ * Creates the panel where the user has the options to select a symbol.
+ * Apart from the option to select one, the user will have a previsualization
+ * of all the symbols stored and posibilities to modify an existing one, to create
+ * a new symbol and so on.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SymbolSelector extends JPanel implements ISymbolSelector, ActionListener {
+	private static final long serialVersionUID = -6405660392303659551L;
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(SymbolSelector.class);
+	private JPanel jPanel = null;
+	protected JScrollPane jScrollPane = null;
+	private JScrollPane jScrollPane1 = null;
+	private WindowInfo wi;
+	private JSplitPane jSplitPane = null;
+	protected AcceptCancelPanel okCancelPanel;
+	private JPanel northPanel;
+	private ColorChooserPanel jcc1;
+	private ColorChooserPanel jcc2;
+	private JNumberSpinner txtSize;
+	private JNumberSpinner txtAngle;
+	private JPanel jPanelButtons;
+	private JButton btnProperties;
+	private GeometryType shapeType;
+	private JButton btnSaveSymbol;
+	private JButton btnResetSymbol;
+	private JButton btnNewSymbol;
+	private JComboBoxFonts cmbFonts;
+	private JToggleButton btnBold;
+	private JToggleButton btnItalic;
+	private JToggleButton btnUnderlined;
+	protected JLabel lblTitle;
+	protected File dir;
+	protected File rootDir;
+	protected JComponent jPanelPreview = null;
+	protected GridBagLayoutPanel jPanelOptions = null;
+	protected JList jListSymbols = null;
+	protected String treeRootName;
+	protected ILibraryModel library;
+	private JNumberSpinner txtWidth;
+	protected boolean act = true;
+	boolean accepted = true;
+	private SymbolManager manager;
+
+
+	protected SelectorFilter sFilter = new SelectorFilter() {
+		private Geometry dummyPointGeom = null;
+		private Geometry dummyLineGeom = null;
+		private Geometry dummyPolygonGeom = null;
+		private boolean isInitialized = false;
+
+		public boolean accepts(Object obj) {
+			if (!isInitialized){
+				try {
+					dummyPointGeom = geomManager.createPoint(0, 0, SUBTYPES.GEOM2D);
+					dummyLineGeom = geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
+					dummyPolygonGeom = geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+				} catch (CreateGeometryException e) {
+					logger.error("Error creating a geometry", e);
+				}
+				isInitialized = true;
+			}
+
+			if (obj instanceof ISymbol) {
+				ISymbol sym = (ISymbol) obj;
+
+				Geometry compareGeometry = null;
+				if (SymbolSelector.this.shapeType.isTypeOf(Geometry.TYPES.POINT)
+				    || SymbolSelector.this.shapeType.isTypeOf(Geometry.TYPES.MULTIPOINT)){
+					compareGeometry = dummyPointGeom;
+				}else if (SymbolSelector.this.shapeType.isTypeOf(Geometry.TYPES.CURVE)
+                    || SymbolSelector.this.shapeType.isTypeOf(Geometry.TYPES.MULTICURVE)){
+					compareGeometry = dummyLineGeom;
+				}else if (SymbolSelector.this.shapeType.isTypeOf(Geometry.TYPES.SURFACE)
+                    || SymbolSelector.this.shapeType.isTypeOf(Geometry.TYPES.MULTISURFACE)){
+					compareGeometry = dummyPolygonGeom;
+				}
+				if (compareGeometry != null){
+				    return sym.isSuitableFor(compareGeometry);
+				}
+			}
+			return false;
+		}
+	};
+	protected JComboBoxUnits cmbUnits;
+	protected JComboBoxUnitsReferenceSystem cmbReferenceSystem;
+	private JComboBoxFontSizes cmbFontSize;
+	protected LibraryBrowser libraryBrowser;
+
+	/**
+	 * Constructor method
+	 *
+	 * @param currentElement
+	 * @param shapeType
+	 */
+	private void initialize(
+			Object currentElement,
+			GeometryType shapeType,
+			boolean initialize) throws IllegalArgumentException {
+
+		manager = MapContextLocator.getSymbolManager();
+
+		// TODO  09/08/07 check the currentElement type is suitable for the shapeType specified
+		if (currentElement != null && currentElement instanceof ISymbol) {
+			ISymbol sym = (ISymbol) currentElement;
+			try {
+				currentElement = sym.clone();
+			} catch (CloneNotSupportedException e) {
+				NotificationManager.addWarning("Symbol layer", e);
+			}
+			String desc = sym.getDescription();
+			//    		desc += " ("+PluginServices.getText(this, "current")+")";
+			//    		((ISymbol)currentElement).setDescription(desc);
+		}
+
+        this.shapeType = shapeType;
+
+		//    	Preferences prefs = Preferences.userRoot().node( "gvsig.foldering" );
+		rootDir =
+				new File(manager.getSymbolPreferences().getSymbolLibraryPath());
+
+		if (!rootDir.exists()) {
+			rootDir.mkdir();
+		}
+		treeRootName = Messages.getText("symbol_library");
+		if (initialize) {
+			initialize(currentElement);
+		}
+
+	}
+
+	protected SymbolSelector(
+			Object symbol,
+			GeometryType shapeType, SelectorFilter filter, boolean initialize)
+					throws IllegalArgumentException {
+	    super();
+	    initialize(symbol, shapeType, initialize);
+	    sFilter = filter;
+	}
+
+	protected SymbolSelector(Object symbol, GeometryType shapeType, boolean initialize)
+			throws IllegalArgumentException {
+	    super();
+	    initialize(symbol, shapeType, initialize);
+	}
+
+	/**
+	 * Constructor method, it is <b>protected</b> by convenience to let StyleSelector
+	 * to invoke it, but rigorously it should be <b>private</b>.
+	 *
+	 * @param symbol
+	 * @param shapeType
+	 * @param filter
+	 */
+	protected SymbolSelector(
+			Object symbol,
+			int shapeType,
+			SelectorFilter filter,
+			boolean initialize) throws IllegalArgumentException {
+		super();
+		try {
+		    GeometryType geometryType = geomManager.getGeometryType(shapeType, SUBTYPES.GEOM2D);
+		    initialize(symbol,geometryType, initialize);
+		} catch (GeometryTypeNotSupportedException e1) {
+		    logger.error("Impossible to get the geometry type", e1);
+		} catch (GeometryTypeNotValidException e1) {
+		    logger.error("Impossible to get the geometry type", e1);
+		}
+		sFilter = filter;
+	}
+
+	/**
+	 * This method initializes this
+	 * @param currentElement
+	 * @throws ClassNotFoundException
+	 *
+	 */
+	protected void initialize(Object currentElement) throws IllegalArgumentException {
+		library = new SymbolLibrary(rootDir);
+
+		this.setLayout(new BorderLayout());
+		this.setSize(400, 221);
+
+		this.add(getJNorthPanel(), BorderLayout.NORTH);
+		this.add(getJSplitPane(), BorderLayout.CENTER);
+		this.add(getJEastPanel(), BorderLayout.EAST);
+		ActionListener okAction = new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				PluginServices.getMDIManager().closeWindow(SymbolSelector.this);
+			}
+		}, cancelAction = new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				accepted = false;
+
+				setSymbol(null);
+				PluginServices.getMDIManager().closeWindow(SymbolSelector.this);
+			}
+		};
+
+		okCancelPanel = new AcceptCancelPanel();
+		okCancelPanel.setOkButtonActionListener(okAction);
+		okCancelPanel.setCancelButtonActionListener(cancelAction);
+
+		this.add(okCancelPanel, BorderLayout.SOUTH);
+		libraryBrowser.setSelectionRow(0);
+
+		SillyDragNDropAction dndAction = new SillyDragNDropAction();
+		libraryBrowser.addMouseListener(dndAction);
+		libraryBrowser.addMouseMotionListener(dndAction);
+		getJListSymbols().addMouseListener(dndAction);
+		getJListSymbols().addMouseMotionListener(dndAction);
+		setSymbol(currentElement);
+	}
+
+	/**
+	 * Creates a new symbol selector list model in order to allow the user
+	 * to select an existing symbol previously created.
+	 *
+	 * @return listModel SymbolSelectorListModel
+	 */
+	protected ListModel newListModel() {
+		SymbolSelectorListModel listModel = new SymbolSelectorListModel(
+				dir,
+				sFilter,
+						manager.getSymbolPreferences().getSymbolFileExtension());
+		return listModel;
+	}
+	/**
+	 * Initializes tha JNorthPanel.
+	 *
+	 * @return northPanel JPanel
+	 * @throws IllegalArgumentException
+	 */
+	protected JPanel getJNorthPanel() throws IllegalArgumentException {
+		if (northPanel == null) {
+			String text = "";
+			if (shapeType.isTypeOf(Geometry.TYPES.POINT) || shapeType.isTypeOf(Geometry.TYPES.MULTIPOINT)){
+				text = Messages.getText("point_symbols");
+			}else if (shapeType.isTypeOf(Geometry.TYPES.CURVE) || shapeType.isTypeOf(Geometry.TYPES.MULTICURVE)){
+				text = Messages.getText("line_symbols");
+			}else if (shapeType.isTypeOf(Geometry.TYPES.SURFACE) || shapeType.isTypeOf(Geometry.TYPES.MULTISURFACE)){
+				text = Messages.getText("polygon_symbols");
+			}
+			else{
+				throw new IllegalArgumentException(
+						Messages.getText("shape_type_not_yet_supported"));
+			}
+			northPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+			lblTitle = new JLabel(text);
+			lblTitle.setFont(lblTitle.getFont().deriveFont(Font.BOLD));
+			northPanel.add(lblTitle);
+		}
+		return northPanel;
+	}
+
+	/**
+	 * This method initializes jList
+	 *
+	 * @return javax.swing.JList
+	 */
+	protected JList getJListSymbols() {
+		if (jListSymbols == null) {
+			jListSymbols = new JList() ;
+			jListSymbols.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			jListSymbols.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+			jListSymbols.setVisibleRowCount(-1);
+			jListSymbols.addListSelectionListener(new ListSelectionListener() {
+				public void valueChanged(ListSelectionEvent e) {
+					if (jListSymbols.getSelectedValue()!=null) {
+						ISymbol selSym=null;
+						try {
+							selSym = (ISymbol) ((ISymbol) jListSymbols
+									.getSelectedValue()).clone();
+						} catch (CloneNotSupportedException ex) {
+							NotificationManager.addWarning("Symbol layer", ex);
+						}
+						setSymbol(selSym);
+						updateOptionsPanel();
+					}
+				}
+			});
+			ListCellRenderer renderer = new ListCellRenderer() {
+				private Color mySelectedBGColor = new Color(255,145,100,255);
+				public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+					ISymbol sym = (ISymbol) value;
+					JPanel pnl = new JPanel();
+					BoxLayout layout = new BoxLayout(pnl, BoxLayout.Y_AXIS);
+					pnl.setLayout(layout);
+					Color bgColor = (isSelected) ? mySelectedBGColor
+							: getJListSymbols().getBackground();
+
+					pnl.setBackground(bgColor);
+					SymbolPreviewer sp = new SymbolPreviewer(true);
+					sp.setAlignmentX(Component.CENTER_ALIGNMENT);
+					sp.setPreferredSize(new Dimension(50, 50));
+					sp.setSymbol(sym);
+					sp.setBackground(bgColor);
+					pnl.add(sp);
+					String desc = sym.getDescription();
+					if (desc == null) {
+						desc = "["+Messages.getText("no_desc")+"]";
+					}
+					JLabel lbl = new JLabel(desc);
+					lbl.setBackground(bgColor);
+					lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
+					pnl.add(lbl);
+
+					return pnl;
+				}
+
+			};
+			jListSymbols.setCellRenderer(renderer);
+		}
+		return jListSymbols;
+	}
+	/**
+	 * Updates the options panel depending on the type of symbol that the user
+	 * is controlling or using to show specific options for each one.
+	 *
+	 */
+	protected void updateOptionsPanel() throws IllegalArgumentException {
+		Object mySelectedElement = ((SymbolPreviewer) jPanelPreview).getSymbol();
+
+//		if (mySelectedElement == null) {
+//			return;
+//		}
+		act = false; // disable events
+
+		if (mySelectedElement instanceof CartographicSupport) {
+			CartographicSupport cs = (CartographicSupport) mySelectedElement;
+			cmbUnits.setSelectedUnitIndex(cs.getUnit());
+			cmbReferenceSystem.setSelectedIndex(cs.getReferenceSystem());
+		}
+
+		if (mySelectedElement instanceof IMultiLayerSymbol){
+			if (((IMultiLayerSymbol)mySelectedElement).getLayerCount() == 1) {
+				mySelectedElement = ((IMultiLayerSymbol)mySelectedElement).getLayer(0);
+			}
+		}
+
+		try {
+
+			jcc1.setEnabled(mySelectedElement!=null);
+			jcc2.setEnabled(mySelectedElement!=null);
+
+			if(mySelectedElement instanceof IMultiLayerSymbol){
+				jcc1.setColor(Color.WHITE);
+				jcc2.setColor(Color.WHITE);
+				jcc1.setEnabled(false);
+				jcc2.setEnabled(false);
+			}
+
+			if (shapeType.isTypeOf(Geometry.TYPES.POINT) || shapeType.isTypeOf(Geometry.TYPES.MULTIPOINT)) {
+				IMarkerSymbol m = (IMarkerSymbol) mySelectedElement;
+				txtSize.setEnabled(m!=null);
+				txtAngle.setEnabled(m!=null);
+				if(m!=null){
+					jcc1.setColor(m.getColor());
+					txtSize.setDouble(m.getSize());
+					txtAngle.setDouble(Math.toDegrees(m.getRotation()));
+				}
+			}
+
+			if (shapeType.isTypeOf(Geometry.TYPES.CURVE) || shapeType.isTypeOf(Geometry.TYPES.MULTICURVE)) {
+				ILineSymbol l = (ILineSymbol) mySelectedElement;
+				txtSize.setEnabled(l!=null);
+				if(l!=null){
+					jcc1.setColor(l.getColor());
+					jcc1.setAlpha(l.getAlpha());
+					txtSize.setDouble(l.getLineWidth());
+				}
+			}
+
+			if (shapeType.isTypeOf(Geometry.TYPES.SURFACE) || shapeType.isTypeOf(Geometry.TYPES.MULTISURFACE)) {
+				IFillSymbol f = (IFillSymbol) mySelectedElement;
+
+				txtWidth.setEnabled(f!=null);
+				cmbReferenceSystem.setEnabled(f!=null);
+				cmbUnits.setEnabled(f!=null);
+
+				if (f!=null){
+					jcc1.setUseColorIsSelected(f.hasFill());
+					jcc1.setColor(f.getFillColor());
+					jcc1.setAlpha(f.getFillAlpha());
+					jcc2.setUseColorIsSelected(f.hasOutline());
+					ILineSymbol outline = f.getOutline();
+					if (outline != null) {
+						jcc2.setColor(outline.getColor());
+						txtWidth.setDouble(outline.getLineWidth());
+					}
+
+					if(f instanceof IMultiLayerFillSymbol){
+						txtWidth.setEnabled(false);
+						cmbReferenceSystem.setEnabled(false);
+						cmbUnits.setEnabled(false);
+					}
+				}
+			}
+
+		} catch (NullPointerException npEx) {
+			throw new IllegalArgumentException(npEx);
+		} catch (ClassCastException ccEx) {
+			throw new IllegalArgumentException(ccEx);
+		}
+
+		act = true;  // enable events
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	protected JPanel getJEastPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.setLayout(new BorderLayout());
+			jPanel.add(getJPanelOptions(), BorderLayout.CENTER);
+			JPanel aux = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5));
+			aux.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("preview")));
+			aux.add(getJPanelPreview());
+			jPanel.add(aux, BorderLayout.NORTH);
+
+			jPanel.add(getJPanelOptions());
+			aux = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
+			aux.add(getJPanelButtons());
+			jPanel.add(aux, BorderLayout.SOUTH);
+		}
+		return jPanel;
+	}
+
+	private JPanel getJPanelButtons() {
+		if (jPanelButtons == null) {
+			jPanelButtons = new JPanel();
+			GridLayout layout = new GridLayout();
+			layout.setColumns(1);
+			layout.setVgap(5);
+			jPanelButtons.add(getBtnNewSymbol());
+			jPanelButtons.add(getBtnSaveSymbol());
+			jPanelButtons.add(getBtnResetSymbol());
+			jPanelButtons.add(getBtnProperties());
+
+			// do not add components bellow this line!
+			layout.setRows(jPanelButtons.getComponentCount());
+			jPanelButtons.setLayout(layout);
+		}
+		return jPanelButtons;
+	}
+
+	private JButton getBtnNewSymbol() {
+		if (btnNewSymbol == null) {
+			btnNewSymbol = new JButton();
+			btnNewSymbol.setName("btnNewSymbol");
+			btnNewSymbol.setText(Messages.getText("new"));
+			btnNewSymbol.addActionListener(this);
+		}
+		return btnNewSymbol;
+	}
+
+	private JButton getBtnResetSymbol() {
+		if (btnResetSymbol == null) {
+			btnResetSymbol = new JButton();
+			btnResetSymbol.setName("btnResetSymbol");
+			btnResetSymbol.setText(Messages.getText("reset"));
+			btnResetSymbol.addActionListener(this);
+		}
+		return btnResetSymbol;
+	}
+
+	private JButton getBtnSaveSymbol() {
+		if (btnSaveSymbol == null) {
+			btnSaveSymbol = new JButton();
+			btnSaveSymbol.setName("btnSaveSymbol");
+			btnSaveSymbol.setText(Messages.getText("save"));
+			btnSaveSymbol.addActionListener(this);
+		}
+		return btnSaveSymbol;
+	}
+
+	private JButton getBtnProperties() {
+		if (btnProperties == null) {
+			btnProperties = new JButton();
+			btnProperties.setName("btnProperties");
+			btnProperties.setText(Messages.getText("properties"));
+			btnProperties.addActionListener(this);
+		}
+		return btnProperties;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 * @throws ClassNotFoundException
+	 */
+	protected JScrollPane getLeftJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setPreferredSize(new java.awt.Dimension(80,130));
+			jScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+			libraryBrowser = new LibraryBrowser(library);
+			libraryBrowser.addTreeSelectionListener(new TreeSelectionListener() {
+				public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
+
+					if (libraryBrowser.getLastSelectedPathComponent() == null) {
+						/*
+						 * This happens when clicking on [+] to expand
+						 * or [-] to collapse a tree node.
+						 */
+						return;
+					}
+
+					dir = (File) ((DefaultMutableTreeNode)
+							libraryBrowser.getLastSelectedPathComponent()).getUserObject();
+
+					if (dir == null) {
+						return;
+					}
+					ListModel model = jListSymbols.getModel();
+					if( model != null && model instanceof Disposable ) {
+						((Disposable)model).dispose();
+					}
+					jListSymbols.setModel(newListModel());
+				}
+			});
+			jScrollPane.setViewportView(libraryBrowser);
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jScrollPane1
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane1() {
+		if (jScrollPane1 == null) {
+			jScrollPane1 = new JScrollPane();
+			jScrollPane1.setViewportView(getJListSymbols());
+		}
+		return jScrollPane1;
+	}
+
+	/**
+	 * This method initializes jPanelPreview
+	 *
+	 * @return javax.swing.JComponent
+	 */
+	protected JComponent getJPanelPreview() {
+		if (jPanelPreview == null) {
+			jPanelPreview = new SymbolPreviewer();
+			jPanelPreview.setPreferredSize(new java.awt.Dimension(100,100));
+			jPanelPreview.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+		}
+		return jPanelPreview;
+	}
+	/**
+	 * This method initializes jPanelOptions
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	protected JPanel getJPanelOptions() {
+		if (jPanelOptions == null) {
+			jPanelOptions = new GridBagLayoutPanel();
+			jPanelOptions.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("options")));
+			jcc2 = new ColorChooserPanel(true,true);
+			jcc2.setAlpha(255);
+			if (shapeType.isTypeOf(Geometry.TYPES.POINT) || shapeType.isTypeOf(Geometry.TYPES.MULTIPOINT)) {
+				jcc1 = new ColorChooserPanel(true);
+
+				jPanelOptions.addComponent(
+						Messages.getText("color")+":", jcc1);
+				jPanelOptions.addComponent(
+						Messages.getText("size")+":",
+						txtSize = new JNumberSpinner(3.0, 3, 0, Double.MAX_VALUE, 1, 2));
+				jPanelOptions.addComponent(Messages.getText("units")+":",
+						cmbUnits = new JComboBoxUnits());
+				jPanelOptions.addComponent("",
+						cmbReferenceSystem = new JComboBoxUnitsReferenceSystem());
+				jPanelOptions.addComponent(
+						Messages.getText("angle")+ " (" +Messages.getText("degree")+"):",
+						txtAngle = new JNumberSpinner(0.0, 3, -180.0, 180.0, 1.0, 2));
+
+
+			} else if (shapeType.isTypeOf(Geometry.TYPES.CURVE) || shapeType.isTypeOf(Geometry.TYPES.MULTICURVE)) {
+				jcc1 = new ColorChooserPanel(true);
+				jPanelOptions.addComponent(
+						Messages.getText("color")+":", jcc1);
+				jPanelOptions.addComponent(
+						Messages.getText("width")+":",
+						txtSize = new JNumberSpinner(3.0, 3, 0, Double.MAX_VALUE, 1, 2));
+				jPanelOptions.addComponent(Messages.getText("units")+":",
+						cmbUnits = new JComboBoxUnits());
+				jPanelOptions.addComponent("",
+						cmbReferenceSystem = new JComboBoxUnitsReferenceSystem());
+
+			} else if (shapeType.isTypeOf(Geometry.TYPES.SURFACE) || shapeType.isTypeOf(Geometry.TYPES.MULTISURFACE)) {
+				jcc1 = new ColorChooserPanel(true, true);
+				jPanelOptions.addComponent(
+						Messages.getText("fill_color")+":", jcc1);
+				jPanelOptions.addComponent(
+						Messages.getText("outline_color")+":", jcc2);
+				jPanelOptions.addComponent(
+						Messages.getText("outline_width"),
+						txtWidth = new JNumberSpinner(3.0, 3, 0, Double.MAX_VALUE, 1, 2));
+				jPanelOptions.addComponent(Messages.getText("units")+":",
+						cmbUnits = new JComboBoxUnits());
+				jPanelOptions.addComponent("",
+						cmbReferenceSystem = new JComboBoxUnitsReferenceSystem());
+
+			}
+
+			jcc1.setAlpha(255);
+
+			if (txtSize != null) {
+				txtSize.addActionListener(this);
+			}
+			if (cmbUnits != null) {
+				cmbUnits.addActionListener(this);
+			}
+			if (cmbReferenceSystem != null) {
+				cmbReferenceSystem.addActionListener(this);
+			}
+			if (jcc1 != null) {
+				jcc1.addActionListener(this);
+			}
+			if (jcc2 != null) {
+				jcc2.addActionListener(this);
+			}
+			if (txtWidth != null) {
+				txtWidth.addActionListener(this);
+			}
+			if (cmbFontSize != null) {
+				cmbFontSize.addActionListener(this);
+			}
+			if (txtAngle != null) {
+				txtAngle.addActionListener(this);
+			}
+		}
+		return jPanelOptions;
+	}
+
+	private JToggleButton getBtnUnderlined() {
+		if (btnUnderlined == null) {
+			btnUnderlined = new JToggleButton(PluginServices.getIconTheme().
+					get("underline-icon"));
+		}
+		return btnUnderlined;
+	}
+
+	private JToggleButton getBtnItalic() {
+		if (btnItalic == null) {
+			btnItalic = new JToggleButton(PluginServices.getIconTheme().
+					get("italic-icon"));
+		}
+		return btnItalic;
+	}
+
+	private JToggleButton getBtnBold() {
+		if (btnBold == null) {
+			btnBold = new JToggleButton(PluginServices.getIconTheme().
+					get("bold-icon"));
+		}
+		return btnBold;
+	}
+
+
+	private JComboBoxFonts getCmbFonts() {
+		if (cmbFonts == null) {
+			cmbFonts = new JComboBoxFonts();
+		}
+		return cmbFonts;
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (wi == null) {
+			wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+			wi.setWidth(706);
+			wi.setHeight(500);
+			wi.setTitle(Messages.getText("symbol_selector"));
+		}
+		return wi;
+	}
+
+	protected JSplitPane getJSplitPane() {
+		if (jSplitPane == null) {
+			jSplitPane = new JSplitPane();
+			jSplitPane.setDividerLocation(200);
+			jSplitPane.setResizeWeight(0.4);
+			jSplitPane.setLeftComponent(getLeftJScrollPane());
+			jSplitPane.setRightComponent(getJScrollPane1());
+		}
+		return jSplitPane;
+	}
+
+	public Object getSelectedObject() {
+		if (!accepted) {
+			return null;
+		}
+		Object mySelectedElement = ((SymbolPreviewer) jPanelPreview).getSymbol();
+
+		// if this symbol only has one layer, then no multilayer is needed
+		if (mySelectedElement instanceof IMultiLayerSymbol) {
+			if (((IMultiLayerSymbol) mySelectedElement).getLayerCount()==1) {
+				return ((IMultiLayerSymbol) mySelectedElement).getLayer(0);
+			}
+		}
+
+		if (mySelectedElement instanceof CartographicSupport) {
+			CartographicSupport csSym = (CartographicSupport) mySelectedElement;
+			csSym.setUnit(cmbUnits.getSelectedUnitIndex());
+			csSym.setReferenceSystem(cmbReferenceSystem.getSelectedIndex());
+		}
+
+		return mySelectedElement;
+	}
+
+	public void setSymbol(Object symbol) {
+		((SymbolPreviewer) jPanelPreview).setSymbol((ISymbol) symbol);
+		updateOptionsPanel();
+	}
+
+	/**
+	 * Invoked when the PROPERTIES button is pressed
+	 */
+	protected void propertiesPressed() {
+		ISymbol mySelectedElement = ((SymbolPreviewer) jPanelPreview).getSymbol();
+		if (mySelectedElement ==null) {
+			return;
+		}
+
+		ISymbol clonedSymbol=null;
+		try {
+			clonedSymbol = (ISymbol) mySelectedElement.clone();
+		} catch (CloneNotSupportedException e) {
+			NotificationManager.addWarning("Symbol layer", e);
+		}
+		SymbolEditor se = new SymbolEditor(clonedSymbol, shapeType);
+		PluginServices.getMDIManager().addWindow(se);
+
+		ISymbol symbol = se.getSymbol();
+		if (symbol instanceof IMultiLayerSymbol) {
+			IMultiLayerSymbol mSym = (IMultiLayerSymbol) symbol;
+			if (mSym.getLayerCount() == 1) {
+				symbol =  mSym.getLayer(0);
+			}
+		}
+		setSymbol(symbol);
+
+	}
+
+	/**
+	 * Invoked when the NEW button is pressed
+	 */
+    protected void newPressed() {
+        ISymbol curr_sym = ((SymbolPreviewer) jPanelPreview).getSymbol();
+
+        if (curr_sym != null) {
+            try {
+                curr_sym = (ISymbol) curr_sym.clone();
+            } catch (Exception cnse) {
+                logger.info("Unable to clone symbol. "
+                        + "This can cause an empty symbol if user cancels dialog.",
+                        cnse);
+            }
+        }
+        SymbolEditor se = new SymbolEditor(curr_sym, shapeType);
+        PluginServices.getMDIManager().addWindow(se);
+        setSymbol(se.getSymbol());
+    }
+
+	/**
+	 * Invoked when the RESET button is pressed
+	 */
+	protected void resetPressed() {
+		setSymbol(null);
+	}
+
+	/**
+	 * Invoked when the SAVE button is pressed
+	 */
+	protected void savePressed() {
+		Object selected = getSelectedObject();
+		if (getSelectedObject() ==null) {
+			return;
+		}
+
+		final SymbolPreferences preferences = manager.getSymbolPreferences();
+
+
+		JFileChooser jfc = new JFileChooser("SYMBOL_SELECTOR_FILECHOOSER", rootDir);
+		javax.swing.filechooser.FileFilter ff = new javax.swing.filechooser.FileFilter() {
+			public boolean accept(File f) {
+						return f.getAbsolutePath().toLowerCase().endsWith(
+								preferences.getSymbolFileExtension())
+								|| f.isDirectory();
+			}
+
+			public String getDescription() {
+						return Messages.getText(
+								"gvSIG_symbol_definition_file")
+								.concat(" (*")
+								.concat(preferences.getSymbolFileExtension())
+								.concat(")");
+			}
+		};
+		jfc.setFileFilter(ff);
+		JPanel accessory = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+		accessory.add(new JLabel(Messages.getText("enter_description")));
+		JTextField txtDesc = new JTextField(25);
+                if( selected instanceof ISymbol ) {
+                    txtDesc.setText(((ISymbol)selected).getDescription());
+                }
+                if( selected instanceof ISymbol_v2 && !StringUtils.isEmpty(((ISymbol_v2)selected).getID())) {
+                    jfc.setSelectedFile(new File(((ISymbol_v2)selected).getID()));
+                }
+
+		accessory.add(txtDesc);
+		jfc.setAccessory(accessory);
+		if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
+			File targetFile = jfc.getSelectedFile();
+
+			// apply description
+			String desc;
+			if (txtDesc.getText()==null || txtDesc.getText().trim().equals("")) {
+				// default to file name
+				String s = targetFile.getAbsolutePath();
+				desc =
+						s.substring(s.lastIndexOf(File.separator) + 1)
+								.replaceAll(
+										preferences.getSymbolFileExtension(),
+										"");
+			} else {
+				desc = txtDesc.getText().trim();
+			}
+			ISymbol s = (ISymbol) getSelectedObject();
+			s.setDescription(desc);
+
+
+			String symbolFileName = targetFile.getAbsolutePath().substring(
+					targetFile.getAbsolutePath().lastIndexOf(File.separator)+1,
+					targetFile.getAbsolutePath().length());
+			File targetDir = new File(targetFile.getAbsolutePath().substring(
+					0,
+					targetFile.getAbsolutePath().lastIndexOf(File.separator)));
+			library.addElement(s, symbolFileName , targetDir);
+			getJListSymbols().setModel(newListModel());
+		}
+	}
+
+
+	public void actionPerformed(ActionEvent e) {
+		if (!act) {
+			return;
+		}
+		Object selectedElement = ((SymbolPreviewer) jPanelPreview).getSymbol();//getSelectedObject();
+		performActionOn(selectedElement, e);
+		SymbolSelector.this.repaint();
+	}
+
+	protected void performActionOn(Object selectedElement, ActionEvent e) {
+		JComponent comp = (JComponent) e.getSource();
+
+		if ( comp.equals(getBtnProperties()) ) {
+			// properties pressed
+			propertiesPressed();
+		} else if ( comp.equals(getBtnNewSymbol()) ) {
+			// new pressed
+			newPressed();
+		} else if ( comp.equals(getBtnResetSymbol()) ) {
+			// reset pressed
+			resetPressed();
+		} else if ( comp.equals(getBtnSaveSymbol()) ) {
+			// save pressed
+			savePressed();
+		} else if (comp.equals(jcc1)) {
+			if (selectedElement == null) {
+				return;
+			}
+
+			Color c = jcc1.getColor();
+
+			if (selectedElement instanceof IMarkerSymbol) {
+				IMarkerSymbol m = (IMarkerSymbol) selectedElement;
+				if (m instanceof IMultiLayerMarkerSymbol) {
+					IMultiLayerMarkerSymbol mm = (IMultiLayerMarkerSymbol) m;
+					mm.setAlpha(jcc1.getAlpha());
+				} else {
+					m.setColor(c);
+				}
+			}
+
+			if (selectedElement instanceof ILineSymbol) {
+				ILineSymbol l = (ILineSymbol) selectedElement;
+				if (l instanceof IMultiLayerLineSymbol) {
+					IMultiLayerLineSymbol ml = (IMultiLayerLineSymbol) l;
+					ml.setAlpha(jcc1.getAlpha());
+				} else {
+					l.setLineColor(c);
+				}
+			}
+
+			if (selectedElement instanceof IFillSymbol) {
+				IFillSymbol f = (IFillSymbol) selectedElement;
+
+				f.setHasFill(jcc1.getUseColorisSelected());
+				f.setFillColor(c);
+			}
+
+			if (selectedElement instanceof ITextSymbol) {
+				ITextSymbol t = (ITextSymbol) selectedElement;
+				t.setTextColor(c);
+			}
+
+		} else if (comp.equals(jcc2)) {
+			if (selectedElement == null) {
+				return;
+			}
+			Color c = jcc2.getColor();
+
+
+			if (selectedElement instanceof IFillSymbol) {
+				IFillSymbol f = (IFillSymbol) selectedElement;
+				ILineSymbol outline = f.getOutline();
+				f.setHasOutline(jcc2.getUseColorisSelected());
+
+				if (outline!=null) {
+					ILineSymbol l = outline;
+					if (l instanceof IMultiLayerLineSymbol && c != null) {
+						IMultiLayerLineSymbol ml = (IMultiLayerLineSymbol) l;
+						ml.setAlpha(c.getAlpha());
+					} else {
+						l.setLineColor(c);
+					}
+				}
+
+			}
+		} else if (comp.equals(txtSize)) {
+			double s = txtSize.getDouble();
+
+			if (selectedElement instanceof IMarkerSymbol) {
+				IMarkerSymbol m = (IMarkerSymbol) selectedElement;
+				m.setSize(s);
+				ISymbol sm = m.getSymbolForSelection();
+				if (sm != null && sm instanceof IMarkerSymbol){
+				    ((IMarkerSymbol)sm).setSize(s);
+				}
+			}
+
+			if (selectedElement instanceof ILineSymbol) {
+				ILineSymbol l = (ILineSymbol) selectedElement;
+				l.setLineWidth(s);
+                ISymbol sl = l.getSymbolForSelection();
+                if (sl != null && sl instanceof ILineSymbol){
+                    ((ILineSymbol)sl).setLineWidth(s);
+                }
+			}
+		} else if (comp.equals(cmbUnits)) {
+			if (selectedElement instanceof CartographicSupport) {
+				CartographicSupport cs = (CartographicSupport) selectedElement;
+				cs.setUnit(cmbUnits.getSelectedUnitIndex());
+			}
+		} else if (comp.equals(cmbReferenceSystem)) {
+			if (selectedElement instanceof CartographicSupport) {
+				CartographicSupport cs = (CartographicSupport) selectedElement;
+				cs.setReferenceSystem(cmbReferenceSystem.getSelectedIndex());
+			}
+		} else if (comp.equals(txtWidth)) {
+			double w = txtWidth.getDouble();
+			if (selectedElement instanceof IFillSymbol) {
+				IFillSymbol f = (IFillSymbol) selectedElement;
+				ILineSymbol outline = f.getOutline();
+				if (outline!=null) {
+					outline.setLineWidth(w);
+				}
+			}
+		} else if (comp.equals(cmbFontSize)) {
+			double s = ((Integer) cmbFontSize.getSelectedItem()).doubleValue();
+			if (selectedElement instanceof ITextSymbol) {
+				ITextSymbol t = (ITextSymbol) selectedElement;
+				t.setFontSize(s);
+			}
+		} else if (comp.equals(txtAngle)) {
+			double a = Math.toRadians(txtAngle.getDouble());
+			if (selectedElement instanceof IMarkerSymbol) {
+				IMarkerSymbol m = (IMarkerSymbol) selectedElement;
+				m.setRotation(a);
+			}
+		}
+	}
+
+	public static ISymbolSelector createSymbolBrowser() {
+		return MultiShapeSymbolSelector.createSymbolBrowser();
+	}
+
+	public static ISymbolSelector createSymbolSelector(Object currSymbol, int shapeType) {
+		return createSymbolSelector(currSymbol, shapeType, null);
+	}
+
+	public static ISymbolSelector createSymbolSelector(Object currSymbol, int shapeType, SelectorFilter filter) {
+		ISymbolSelector selector = null;
+
+		GeometryType geometryType = null;
+        try {
+            geometryType = geomManager.getGeometryType(shapeType, SUBTYPES.GEOM2D);
+        } catch (GeometryTypeNotSupportedException e) {
+            logger.error("Impossible to get the geometry type", e);
+        } catch (GeometryTypeNotValidException e) {
+            logger.error("Impossible to get the geometry type", e);
+        }
+
+		if (filter==null) {
+			selector = (shapeType == Geometry.TYPES.GEOMETRY) ?
+					new MultiShapeSymbolSelector(currSymbol) :
+						new SymbolSelector(currSymbol, geometryType, true);
+		} else {
+			selector = (shapeType == Geometry.TYPES.GEOMETRY) ?
+					new MultiShapeSymbolSelector(currSymbol) :
+						new SymbolSelector(currSymbol, geometryType, filter, true);
+		}
+		return selector;
+	}
+
+	class SillyDragNDropAction implements MouseListener, MouseMotionListener {
+		private boolean doDrop = false;
+		private Object selected;
+		private File sourceFolder;
+
+		public void mouseClicked(MouseEvent e) { }
+		public void mouseEntered(MouseEvent e) { }
+		public void mouseExited(MouseEvent e) { }
+
+		public void mousePressed(MouseEvent e) {
+			if (e.getSource().equals(getJListSymbols())) {
+				selected = getJListSymbols().getSelectedValue();
+				doDrop = selected!=null;
+				DefaultMutableTreeNode node = (DefaultMutableTreeNode) libraryBrowser.getLastSelectedPathComponent();
+				if (node.getUserObject() instanceof File) {
+					sourceFolder = (File) node.getUserObject();
+				}
+			}
+			e.consume();
+		}
+
+		public void mouseReleased(MouseEvent e) {
+			if (doDrop && e.getSource().equals(getJListSymbols())) {
+				Point p = new Point(getJListSymbols().getLocation().x-e.getPoint().x, getJListSymbols().getLocation().y+e.getPoint().y);
+				if (libraryBrowser.getBounds().contains(p)) {
+					File destFolder = libraryBrowser.getElementBellow(p);
+					if (destFolder != null) {
+						ISymbol sym = (ISymbol) selected;
+						int move = InputEvent.SHIFT_DOWN_MASK | InputEvent.BUTTON1_DOWN_MASK;
+						//					    int copy = MouseEvent.CTRL_DOWN_MASK | MouseEvent.BUTTON1_DOWN_MASK;
+
+						library.addElement(sym, sym.getDescription(), destFolder);
+						if ((e.getModifiers() & (move)) !=0) {
+							library.removeElement(sym, sourceFolder);
+						}
+
+					}
+					libraryBrowser.refresh();
+				}
+
+			}
+			doDrop = false;
+		}
+
+		public void mouseDragged(MouseEvent e) {
+			if (e.getSource().equals(getJListSymbols())) {
+
+				Point p = new Point(getJListSymbols().getLocation().x-e.getPoint().x, getJListSymbols().getLocation().y+e.getPoint().y);
+				if (libraryBrowser.getBounds().contains(p)) {
+					libraryBrowser.setSelectedElementBellow(p);
+				}
+			}
+		}
+
+		public void mouseMoved(MouseEvent e) {
+
+		}
+
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLevelsWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLevelsWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLevelsWindow.java	(revision 42196)
@@ -0,0 +1,640 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.geom.GeneralPath;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.border.EtchedBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.gui.TableSymbolCellRenderer;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.legend.ZSort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.celleditors.BooleanTableCellEditor;
+import org.gvsig.gui.beans.swing.celleditors.IntegerTableCellEditor;
+import org.gvsig.gui.beans.swing.cellrenderers.BooleanTableCellRenderer;
+import org.gvsig.gui.beans.swing.cellrenderers.NumberTableCellRenderer;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Creates a panel to specify an order for the symbols of a map. This order
+ * is important when the map is going to be painted because, apart from that
+ * the waste of time can be less, the final representation of the map will
+ * depend on this order.
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SymbolLevelsWindow extends JPanel implements IWindow, ActionListener {
+	private static final long serialVersionUID = 3241898997869313055L;
+	private static final int DESCRIPTION_COLUMN_INDEX = 1;
+	private static final int SYMBOL_COLUMN_INDEX = 0;
+	private static final int MERGE_COLUMN_INDEX = 3;
+	private static final int JOIN_COLUMN_INDEX = 2;
+	private static final int FIRST_LEVEL_COLUMN_INDEX = 2;
+	private static final String[] defaultHeaders = new String[] {
+		Messages.getText("symbol"),
+		Messages.getText("description"),
+		Messages.getText("join"),
+		Messages.getText("merge"),
+	};
+	private static final int DEFAULT_VIEW = 0;
+	private static final int ADVANCED_VIEW = 1;
+	private static int viewMode = ADVANCED_VIEW;
+	private JCheckBox chkSpecifyDrawOrder = null;
+	private JPanel pnlCenter = null;
+	private JScrollPane srclLevels = null;
+	private JTable tblLevels = null;
+	private JButton btnUp = null;
+	private JButton btnDown;
+	private JPanel pnlSouth = null;
+	private String[] advancedHeaders;
+	private JButton btnSwitchView;
+	private ZSort zSort;
+	private SymbolSummary summary = new SymbolSummary();
+
+	private ActionListener action = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			String actionCommand = e.getActionCommand();
+			if ("OK".equals(actionCommand)) {
+				tblLevels.editingStopped(new ChangeEvent(tblLevels));
+				applyValues();
+			}
+
+			PluginServices.getMDIManager().closeWindow(SymbolLevelsWindow.this);
+
+		}
+	};
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi = new WindowInfo(WindowInfo.RESIZABLE | WindowInfo.MODALDIALOG);
+		wi.setTitle(Messages.getText("symbol_levels"));
+		wi.setWidth(getWidth()+10);
+		wi.setHeight(getHeight());
+		return wi;
+	}
+	/**
+	 * Completes the main table of the panel with the symbols contained in the
+	 * legend of the map.
+	 *
+	 */
+	private void applyValues() {
+
+		// update symbol order
+		TableModel model = tblLevels.getModel();
+
+
+
+		Hashtable<ISymbol, int[] > aTable = new Hashtable<ISymbol, int[]>();
+		ISymbol[] symbols = new ISymbol[model.getRowCount()];
+		for (int i = 0; i < symbols.length; i++) {
+			symbols[i] = (ISymbol) model.getValueAt(i, SYMBOL_COLUMN_INDEX);
+			int length = 1;
+			if (symbols[i] instanceof IMultiLayerSymbol) {
+				IMultiLayerSymbol mlSym = (IMultiLayerSymbol) symbols[i];
+				length = mlSym.getLayerCount();
+			}
+
+			int[] symbolLevels = new int[length];
+			if (viewMode == DEFAULT_VIEW) {
+				// default view (JOIN and MERGE)
+				if (symbols[i] instanceof IMultiLayerSymbol) {
+					boolean join = ((Boolean) model.getValueAt(i, JOIN_COLUMN_INDEX)).booleanValue();
+					boolean merge= ((Boolean) model.getValueAt(i, MERGE_COLUMN_INDEX)).booleanValue();
+					boolean needToJoin = true;
+					if (merge && i>0) {
+						int j=0;
+						try {
+							int[] prevSymbolLevels = aTable.get(symbols[i-1]);
+							for (j = 0; j < symbolLevels.length; j++) {
+								symbolLevels[j] = prevSymbolLevels[j];
+							}
+						} catch (IndexOutOfBoundsException ex) {
+							/* perfect, no problem
+							 * the previous symbol has different amount of layers
+							 * that is ok because we just have to replicate
+							 * the values of each cell
+							 */
+							for (; j < symbolLevels.length; j++) {
+								symbolLevels[j] = symbolLevels[j-1]+1;
+							}
+						}
+						needToJoin = false;
+					}
+					if (join && needToJoin) {
+						for (int j = 0; j < symbolLevels.length; j++) {
+							symbolLevels[j] = zSort.getLevelCount()+j+1;
+						}
+					}
+					if (!join && !merge) {
+						for (int j = 0; j < symbolLevels.length; j++) {
+							symbolLevels[j] = zSort.getLevelCount();
+						}
+					}
+				} else {
+					symbolLevels[0] = zSort.getLevelCount();
+				}
+			} else {
+				// ADVANCED VIEW (user may set map levels manually)
+				for (int j = 0; j < symbolLevels.length; j++) {
+					symbolLevels[j] = ((Integer) model.getValueAt(i, j+FIRST_LEVEL_COLUMN_INDEX)).intValue();
+				}
+			}
+
+			aTable.put(symbols[i], symbolLevels);
+		}
+
+		Iterator<ISymbol> it = aTable.keySet().iterator();
+		while (it.hasNext()) {
+			ISymbol sym = it.next();
+			zSort.setLevels(sym, aTable.get(sym));
+		}
+
+		zSort.setUsingZSort(getChkSpecifyDrawOrder().isSelected());
+	}
+
+	public SymbolLevelsWindow(ZSort zSort) {
+		super();
+		initialize();
+		setModel(zSort);
+		quitaEsteMetodo();
+		tblLevels.setRowHeight(23);
+	}
+	private void quitaEsteMetodo() {
+		getBtnSwitchView().setEnabled(false);
+		getBtnDown().setEnabled(false);
+		getBtnUp().setEnabled(false);
+	}
+	/**
+	 * Sets the model
+	 * @param plan ZSort
+	 */
+
+	public void setModel(ZSort plan) {
+		advancedHeaders = new String[FIRST_LEVEL_COLUMN_INDEX
+		                             +plan.getTopLevelIndexAllowed() ];
+		advancedHeaders[SYMBOL_COLUMN_INDEX] = defaultHeaders[SYMBOL_COLUMN_INDEX];
+		advancedHeaders[DESCRIPTION_COLUMN_INDEX] = defaultHeaders[DESCRIPTION_COLUMN_INDEX];
+		for (int i = 2; i < advancedHeaders.length; i++) {
+			advancedHeaders[i] = String.valueOf(i-1);
+		}
+		this.zSort = plan;
+		getChkSpecifyDrawOrder().setSelected(plan.isUsingZSort());
+		initTableContents(getTblLevels(), plan, viewMode);
+	}
+	/**
+	 * Initializes the table that it is showed in the panel where the user can
+	 * see the different symbols of the legend and has options to specify the
+	 * level for each one, merge and so on.
+	 *
+	 * @param table
+	 * @param zSort
+	 * @param mode
+	 */
+	private void initTableContents(JTable table, ZSort zSort, int mode) {
+		DefaultTableModel model = new DefaultTableModel();
+		Object[][] dataVector = null;
+		ISymbol[] syms = zSort.getSymbols();
+		String[] labels = zSort.getDescriptions();
+
+		if (mode == DEFAULT_VIEW) {
+			// default view (JOIN and MERGE)
+			dataVector = new Object[syms.length][syms.length];
+			for (int i = 0; i < syms.length; i++) {
+				dataVector[i] = new Object[defaultHeaders.length];
+				dataVector[i][SYMBOL_COLUMN_INDEX] = syms[i];
+				dataVector[i][DESCRIPTION_COLUMN_INDEX] = labels[i];
+				if (syms[i] instanceof IMultiLayerSymbol) {
+					boolean joined = true;
+					int[] levels = zSort.getLevels(syms[i]);
+					if(levels != null){
+						for (int j = 0; j < levels.length; j++) {
+							if (joined) {
+								joined = levels[j] != levels[j+1];
+							}
+						}
+					}
+
+
+					boolean merged = true;
+					if (i<syms.length-1) {
+						for (int j = 0; joined && j < levels.length; j++) {
+							// must be joined to be merged
+							ISymbol nextSymbol = syms[i+1];
+							int[] nextLevels = zSort.getLevels(nextSymbol);
+							if(nextLevels != null){
+								if (nextSymbol instanceof IMultiLayerSymbol) {
+									if (j<nextLevels.length) {
+										merged = levels[j] == nextLevels[j];
+									}
+								} else {
+									merged = levels[0] == nextLevels[0];
+								}
+							}
+						}
+						if (!merged) {
+							break;
+						}
+					}
+					if (!joined) {
+						merged = false;
+					}
+					dataVector[i][JOIN_COLUMN_INDEX] = new Boolean(joined);
+					dataVector[i][MERGE_COLUMN_INDEX] = new Boolean(merged);
+				}
+			}
+
+			model.setDataVector(dataVector, defaultHeaders);
+			table.setModel(model);
+			TableColumn col = table.getColumnModel().getColumn(JOIN_COLUMN_INDEX);
+			col.setCellRenderer(new BooleanTableCellRenderer(true));
+			col.setCellEditor(new BooleanTableCellEditor(table));
+			col = table.getColumnModel().getColumn(MERGE_COLUMN_INDEX);
+			col.setCellRenderer(new BooleanTableCellRenderer(true));
+			col.setCellEditor(new BooleanTableCellEditor(table));
+		} else {
+			// advanced view (user may input the map level manually)
+			dataVector = new Object[syms.length][
+			                                     FIRST_LEVEL_COLUMN_INDEX + /* this is the first column that
+			                                      * contains a level for the symbol
+			                                      */
+
+			                                     zSort.getTopLevelIndexAllowed() + /* according to the set of
+			                                      * symbols this will get the
+			                                      * max level reachable
+			                                      */
+			                                     1 /* plus 1 to get a count instead of an index */];
+			for (int i = 0; i < syms.length; i++) {
+				dataVector[i][SYMBOL_COLUMN_INDEX] = syms[i];
+				dataVector[i][DESCRIPTION_COLUMN_INDEX] = labels[i];
+				if (syms[i] instanceof IMultiLayerSymbol) {
+					int[] levels = zSort.getLevels(syms[i]);
+
+					for (int j = 0; j < levels.length; j++) {
+						dataVector[i][j+FIRST_LEVEL_COLUMN_INDEX] = levels[j];
+					}
+				} else {
+					dataVector[i][FIRST_LEVEL_COLUMN_INDEX] = new Integer(zSort.getLevels(syms[i])[0]);
+				}
+			}
+
+			model.setDataVector(dataVector, advancedHeaders);
+			table.setModel(model);
+			for (int j = FIRST_LEVEL_COLUMN_INDEX; j < model.getColumnCount(); j++) {
+
+				table.getColumnModel().getColumn(j).setCellRenderer(new NumberTableCellRenderer(true, false));
+				table.getColumnModel().getColumn(j).setCellEditor(new IntegerTableCellEditor());
+			}
+		}
+
+		TableSymbolCellRenderer symbolCellRenderer = new TableSymbolCellRenderer(true) {
+			private static final long serialVersionUID = 5603529641148869112L;
+
+			{ // Object static initialize block
+
+				preview = new SymbolPreviewer() {
+					private static final long serialVersionUID = 7262380340075167043L;
+					private Icon downIcon = new Icon(){
+						public int getIconHeight() { return 7; }
+						public int getIconWidth() { return 7; }
+						public void paintIcon(Component c, Graphics g, int x, int y) {
+							Graphics2D g2 = (Graphics2D) g;
+							g2.setColor(Color.GRAY);
+							g2.translate(x + c.getWidth()-getIconWidth()*2, y + c.getHeight()-getIconHeight()*2);
+							GeneralPath gp = new GeneralPath();
+							gp.moveTo(0, 0);
+							gp.lineTo(getIconWidth()/2, getIconHeight()-1);
+							gp.lineTo(getIconWidth()-1, 0);
+							g2.fill(gp);
+							g2.translate(-(x + c.getWidth()-getIconWidth()*2), -(y + c.getHeight()-getIconHeight()*2));
+						}
+					};
+					@Override
+					public void paint(Graphics g) {
+						super.paint(g);
+						if (getSymbol() instanceof IMultiLayerSymbol) {
+							downIcon.paintIcon(this, g, 0, 0);
+						}
+					}
+				};
+
+			} // Object static initialize block
+		};
+		TableColumn col = table.getColumnModel().getColumn(SYMBOL_COLUMN_INDEX);
+		col.setCellRenderer(symbolCellRenderer);
+	}
+
+	private void initialize() {
+		this.setLayout(new BorderLayout(15, 15));
+		this.setSize(564, 344);
+
+		this.add(getChkSpecifyDrawOrder(), BorderLayout.NORTH);
+		this.add(new JBlank(20, 20));
+		this.add(getPnlCenter(), BorderLayout.CENTER);
+		this.add(getPnlSouth(), BorderLayout.SOUTH);
+		tblLevels.addMouseListener(new MouseListener() {
+			public void mouseReleased(MouseEvent e) { }
+			public void mouseClicked(MouseEvent e)  { }
+			public void mouseEntered(MouseEvent e)  { }
+			public void mouseExited(MouseEvent e)  {
+				summary.sym = null;
+				repaint();
+	}
+
+			public void mousePressed(MouseEvent e) {
+				Point where = e.getPoint();
+				int whereX = where.x;
+				int whereY = where.y;
+				Rectangle bounds = tblLevels.getBounds();
+				/*
+				 * calculate the right border x-position of the symbol
+				 * column
+	 			*/
+				int rightEdge = 0;
+				for (int i = 0; i <= SYMBOL_COLUMN_INDEX; i++) {
+					rightEdge += tblLevels.getColumnModel().getColumn(i).getWidth();
+				}
+				if (whereX >= bounds.x &&
+					whereX <= rightEdge + bounds.x &&
+					whereY >= bounds.y &&
+					whereY <= bounds.height + bounds.y) {
+					int rowHeight = tblLevels.getRowHeight();
+					int rowClicked = (whereY - bounds.y) / rowHeight;
+					ISymbol sym = (ISymbol) tblLevels.
+											getModel().
+											getValueAt(
+												rowClicked,
+												SYMBOL_COLUMN_INDEX);
+					if (sym instanceof IMultiLayerSymbol) {
+						summary.sym = (IMultiLayerSymbol) sym;
+						summary.rowIndex = rowClicked;
+					} else {
+						summary.sym = null;
+					}
+					repaint();
+				}
+			}
+
+		});
+
+	}
+
+	private JCheckBox getChkSpecifyDrawOrder() {
+		if (chkSpecifyDrawOrder == null) {
+			chkSpecifyDrawOrder = new JCheckBox("<html><b>"+
+					Messages.getText("draw_symbols_in_specified_order")
+					+"</b></html>");
+			chkSpecifyDrawOrder.addActionListener(this);
+		}
+		return chkSpecifyDrawOrder;
+	}
+
+
+	private JPanel getPnlCenter() {
+		if (pnlCenter == null) {
+			pnlCenter = new JPanel();
+			pnlCenter.setLayout(new BorderLayout(0, 15));
+			pnlCenter.add(getSrclLevels(), BorderLayout.CENTER);
+			pnlCenter.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
+			JPanel aux = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 15));
+			JPanel pnlButtons = new JPanel();
+			pnlButtons.setLayout(new BoxLayout(pnlButtons, BoxLayout.Y_AXIS));
+			pnlButtons.add(new JBlank(1, 70));
+			pnlButtons.add(getBtnUp());
+			pnlButtons.add(new JBlank(1, 10));
+			pnlButtons.add(getBtnDown());
+			pnlButtons.setVisible(false);
+			aux.add(pnlButtons);
+			pnlCenter.add(aux, BorderLayout.EAST);
+
+		}
+		pnlCenter.setEnabled(getChkSpecifyDrawOrder().isSelected());
+		return pnlCenter;
+	}
+
+	private JScrollPane getSrclLevels() {
+		if (srclLevels == null) {
+			srclLevels = new JScrollPane();
+			srclLevels.setViewportView(getTblLevels());
+		}
+		srclLevels.setEnabled(getChkSpecifyDrawOrder().isSelected());
+		return srclLevels;
+	}
+
+
+	private JTable getTblLevels() {
+		if (tblLevels == null) {
+			tblLevels = new JTable() {
+				private static final long serialVersionUID = -1545710722048183232L;
+
+				@Override
+				protected void paintComponent(Graphics g) {
+					super.paintComponent(g);
+					summary.paint((Graphics2D) g);
+		}
+			};
+			summary.rowHeight = tblLevels.getRowHeight();
+		}
+		tblLevels.setEnabled(getChkSpecifyDrawOrder().isSelected());
+		return tblLevels;
+	}
+
+
+	private JButton getBtnUp() {
+		if (btnUp == null) {
+			btnUp = new JButton(PluginServices.getIconTheme().get("arrow-up-icono"));
+			btnUp.setActionCommand("MOVE_UP");
+		}
+		return btnUp;
+	}
+
+	private JButton getBtnDown() {
+		if (btnDown == null) {
+			btnDown = new JButton(PluginServices.getIconTheme().get("arrow-down-icono"));
+			btnDown.setActionCommand("MOVE_DOWN");
+		}
+		return btnDown;
+	}
+
+
+	private JPanel getPnlSouth() {
+		if (pnlSouth == null) {
+			pnlSouth = new JPanel(new BorderLayout());
+			JPanel aux = new JPanel();
+			aux.setLayout(new FlowLayout(FlowLayout.RIGHT));
+			aux.add(getBtnSwitchView());
+			pnlSouth.add(aux, BorderLayout.NORTH);
+
+			aux = new JPanel();
+			aux.setLayout(new FlowLayout(FlowLayout.RIGHT));
+			pnlSouth.add(new AcceptCancelPanel(action, action), BorderLayout.SOUTH);
+
+		}
+		return pnlSouth;
+	}
+
+	private JButton getBtnSwitchView() {
+		if (btnSwitchView == null) {
+			btnSwitchView = new JButton(
+					(viewMode != DEFAULT_VIEW) ?
+					Messages.getText("default_view"):
+					Messages.getText("advanced_view")
+					);
+			btnSwitchView.addActionListener(this);
+			btnSwitchView.setVisible(false);
+		}
+
+		return btnSwitchView;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		JComponent c = (JComponent) e.getSource();
+		if (c.equals(getChkSpecifyDrawOrder())) {
+			getPnlCenter().setEnabled(getChkSpecifyDrawOrder().isSelected());
+			getSrclLevels().setEnabled(getChkSpecifyDrawOrder().isSelected());
+			TableCellEditor tce = getTblLevels().getCellEditor();
+			if (tce != null){
+				tce.stopCellEditing();
+			}
+			getTblLevels().setEnabled(getChkSpecifyDrawOrder().isSelected());
+		} else if (c.equals(getBtnSwitchView())) {
+			viewMode = (viewMode == ADVANCED_VIEW) ? DEFAULT_VIEW : ADVANCED_VIEW;
+			initTableContents(getTblLevels(), zSort, viewMode);
+			btnSwitchView.setText((viewMode != DEFAULT_VIEW) ?
+					Messages.getText("default_view"):
+					Messages.getText("advanced_view"));
+		}
+	}
+	/**
+	 * Gets the ZSort value
+	 *
+	 * @return zSort ZSort
+	 */
+	public ZSort getZSort() {
+		return zSort;
+	}
+
+	private class SymbolSummary {
+		int witdh;
+		int rowHeight = 10;
+
+		int rowIndex;
+
+		IMultiLayerSymbol sym;
+
+		void paint(Graphics2D g){
+
+			if (sym != null) {
+				int whereY = (rowHeight*(rowIndex-1) + (int) (rowHeight/0.6));
+				int whereX = 0;
+				for (int i = 0; i <= SYMBOL_COLUMN_INDEX; i++) {
+					whereX += tblLevels.getColumnModel().getColumn(i).getWidth();
+				}
+				whereX -= 40;
+				int width = 150;
+				int height = Math.max(rowHeight*sym.getLayerCount(), rowHeight);
+				Rectangle bounds = new Rectangle(whereX, whereY, width, height);
+				g.setColor(new Color(255, 255, 220));
+				g.fill(bounds);
+
+				g.setColor(new Color(255, 230, 20));
+				g.draw(bounds);
+
+				g.setFont(new Font("Arial", Font.BOLD, 10));
+
+				for (int i = 0; i < sym.getLayerCount(); i++) {
+					g.setColor(Color.black);
+					g.drawString(i+1+":", whereX+5, height + whereY - ( (i*rowHeight) + 5 ));
+					Rectangle rect = new Rectangle(whereX + 20,
+							height + whereY - ((i+1)*rowHeight) + 3,
+							width - 20,
+							rowHeight - 6);
+					try {
+						sym.getLayer(i).drawInsideRectangle(g, null, rect,null);
+					} catch (SymbolDrawingException e) {
+						if (e.getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS) {
+							try {
+								MapContextLocator.getSymbolManager()
+										.getWarningSymbol(
+												SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+												"",
+												SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS)
+										.drawInsideRectangle(g, null, rect,
+												null);
+							} catch (SymbolDrawingException e1) {
+								// IMPOSSIBLE TO REACH THIS
+							}
+						} else {
+							// should be unreachable code
+							throw new Error(Messages.getText("symbol_shapetype_mismatch"));
+						}
+					}
+				}
+
+			}
+		};
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolLevelsWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LibraryBrowser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LibraryBrowser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LibraryBrowser.java	(revision 42196)
@@ -0,0 +1,240 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import javax.swing.ImageIcon;
+
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JTree;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreePath;
+import org.gvsig.andami.IconThemeHelper;
+
+//import org.gvsig.andami.PluginServices;
+//import org.gvsig.andami.messages.NotificationManager;
+//import org.gvsig.andami.ui.mdiFrame.JMenuItem;
+//import org.gvsig.andami.ui.mdiFrame.JPopUpMenu;
+import org.gvsig.i18n.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * 
+ * LibraryBrowser.java
+ *
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 7, 2007
+ *
+ */
+public class LibraryBrowser extends JPanel implements TreeModelListener {
+	private static final long serialVersionUID = 4322139976928871347L;
+	
+	private static final Logger logger = LoggerFactory.getLogger(LibraryBrowser.class);
+
+	private ILibraryModel model;
+	private JTree tree;
+	private JPopupMenu popUpMenu;
+	private JMenuItem newFolder;
+	private JMenuItem removeFolder;
+	private ActionListener popUpMenuActions = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			Object selectedObject = tree.getLastSelectedPathComponent();
+			Object source = e.getSource();
+			removeFolder.setEnabled(selectedObject != null);
+			try {
+				if (source.equals(newFolder)) {
+					String newFolderName = JOptionPane.showInputDialog(Messages.getText("new_name"));
+					if (newFolderName != null)
+						model.addFolder(selectedObject, newFolderName);
+				} else if (source.equals(removeFolder)) {
+					model.removeFolder(selectedObject);
+				}
+			} catch (Exception ex) {
+				logger.error(Messages
+						.getText("notification_text"
+								+ " ["
+								+ new Date(System.currentTimeMillis())
+										.toString() + "]"), ex);
+			} finally {
+				popUpMenu.setVisible(false);
+			}
+		}
+	};
+	private ArrayList<TreeSelectionListener> treeListeners = new ArrayList<TreeSelectionListener>();
+	private ArrayList<MouseListener> treeMouseListeners = new ArrayList<MouseListener>();
+	private ArrayList<MouseMotionListener> treeMouseMotionListeners = new ArrayList<MouseMotionListener>();
+	
+	public LibraryBrowser(ILibraryModel model) {
+		setLayout(new BorderLayout());
+		model.addTreeModelListener(this);
+		
+		popUpMenu = new JPopupMenu();
+		newFolder = new JMenuItem(Messages.getText("new_folder"));
+		newFolder.addActionListener(popUpMenuActions);
+
+		removeFolder = new JMenuItem(Messages.getText("remove_folder"));
+		removeFolder.addActionListener(popUpMenuActions);
+		
+		popUpMenu.add(newFolder) ;
+		this.model = model;
+		setModel(model);
+	}
+
+        private ImageIcon createImageIcon(String path) {
+            java.net.URL imgURL = this.getClass().getResource(path);
+            if (imgURL != null) {
+                return new ImageIcon(imgURL);
+            } else {
+                return null;
+            }
+        }
+
+        private void setModel(final ILibraryModel model) {
+		if (tree != null) {
+			remove(tree);
+		}
+		tree = new JTree();
+		tree.setModel(model);
+		for (int i = 0; i < treeListeners.size(); i++) {
+			tree.addTreeSelectionListener(treeListeners.get(i));
+		}
+		
+		for (int i = 0; i < treeMouseListeners.size(); i++) {
+			tree.addMouseListener(treeMouseListeners.get(i));
+		}
+		
+		for (int i = 0; i < treeMouseMotionListeners.size(); i++) {
+			tree.addMouseMotionListener(treeMouseMotionListeners.get(i));
+		}
+
+                ImageIcon folderIcon = IconThemeHelper.getImageIcon("librarybrowser-folder");
+                ImageIcon leafIcon = IconThemeHelper.getImageIcon("librarybrowser-folder-image");
+                if (leafIcon != null && folderIcon != null) {
+                    DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
+                    renderer.setLeafIcon(leafIcon);
+                    renderer.setOpenIcon(folderIcon);
+                    renderer.setClosedIcon(folderIcon);
+                    tree.setCellRenderer(renderer);
+                }
+                
+		add(tree, BorderLayout.CENTER);
+		validate();
+	}
+
+	public void mouseClicked(MouseEvent e) {
+		if (e.getButton() == MouseEvent.BUTTON3) {
+			Point p = new Point();
+			p.x = getLocationOnScreen().x + e.getPoint().x;
+			p.y = getLocationOnScreen().y + e.getPoint().y;
+			popUpMenu.setLocation(p);
+			popUpMenu.setVisible(true);
+		}
+	}
+
+	public void treeNodesChanged(TreeModelEvent e) {
+		refresh();
+	}
+
+	public void treeNodesInserted(TreeModelEvent e) {
+		refresh();
+	}
+
+	public void treeNodesRemoved(TreeModelEvent e) {
+		refresh();
+	}
+
+	public void treeStructureChanged(TreeModelEvent e) {
+		refresh();
+	}
+
+	public Object getLastSelectedPathComponent() {
+		return tree.getLastSelectedPathComponent();
+	}
+
+	public void addTreeSelectionListener(
+			TreeSelectionListener treeSelectionListener) {
+		treeListeners.add(treeSelectionListener);
+		tree.addTreeSelectionListener(treeSelectionListener);
+	}
+
+	
+	@Override
+	public synchronized void addMouseListener(MouseListener l) {
+		treeMouseListeners.add(l);
+		tree.addMouseListener(l);
+	}
+	
+	@Override
+	public synchronized void addMouseMotionListener(MouseMotionListener l) {
+		treeMouseMotionListeners.add(l);
+		tree.addMouseMotionListener(l);
+	}
+
+	public void setSelectionRow(int i) {
+		tree.setSelectionRow(i);
+	}
+	
+	
+
+	public File getElementBellow(Point point) {
+		TreePath tp = tree.getPathForLocation(point.x, point.y);
+		if (tp == null) return null;
+		DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp.getLastPathComponent();
+		if (node == null) return null;
+		
+		if (node.getUserObject() instanceof File) {
+			return (File) node.getUserObject();
+		} 
+		return null;
+	}
+	
+	public void setSelectedElementBellow(Point point) {
+		TreePath tp = tree.getPathForLocation(point.x, point.y);
+		if (tp != null)
+			tree.setSelectionPath(tp);
+	}
+
+	public void refresh() {
+		setModel(model);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LibraryBrowser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SingleStyleSelectorFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SingleStyleSelectorFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SingleStyleSelectorFilter.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+
+
+public class SingleStyleSelectorFilter implements SelectorFilter {
+
+	private Class clazz = null;
+
+	public SingleStyleSelectorFilter(IStyle sty) {
+		clazz = sty.getClass();
+	}
+
+	public SingleStyleSelectorFilter(Class clz) {
+		if (IStyle.class.isAssignableFrom(clz)) {
+			clazz = clz;
+		}
+	}
+	
+	public boolean accepts(Object obj) {
+		return clazz != null && obj != null &&
+				clazz.isAssignableFrom(obj.getClass());
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/TypeSymbolEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/TypeSymbolEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/TypeSymbolEditor.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import javax.swing.JPanel;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+
+public interface TypeSymbolEditor {
+
+    boolean canManageSymbol(ISymbol symbol);
+
+    /**
+     * Returns the editor tools that are handled by this configuration panel.
+     * @return <b>EditorTool</b>
+     */
+    EditorTool[] getEditorTools();
+
+    /**
+     * Produces and returns  the ISymbol according with the user settings.
+     *
+     * @return the ISymbol.
+     */
+    ISymbol getLayer();
+
+    /**
+     * <p>
+     * Returns the name of the config tabs that will be shown in the selector combo box.
+     * This is typically a human-readable (and also translatable) name for the symbol that
+     * this TypeEditorPanel deals with, but maybe you prefer to use any other one.<br>
+     * </p>
+     * <p>
+     * The order of the entries in the combo is alphabetically-based. So you can force a
+     * position by defining a name that suits your needs.
+     * </p>
+     * @return A human-readable text naming this panel
+     */
+    String getName();
+
+    /**
+     * <p>
+     * Due to the complexity that many symbols settings can reach, the SymbolEditorPanel is
+     * designed in a tabbed-based fashion. So, you can use as many of pages you want to put
+     * your components. This pages are regular JPanels that will be automatically added to
+     * the SymbolEditor dialog.<br>
+     * </p>
+     * <p>
+     * In case you need only one page, just return a JPanel array with a length of 1.
+     * </p>
+     * @return An array of JPanel containing the setting's interface.
+     */
+    JPanel[] getTabs();
+
+    /**
+     * Invoked when the user selects or adds a new layer. This method fills up
+     * the components on the right according on the layer properties
+     * @param <b>ISymbol</b> layer, the symbol
+     */
+    void refreshControls(ISymbol layer);
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxSimpleMarkeStyles.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxSimpleMarkeStyles.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxSimpleMarkeStyles.java	(revision 42196)
@@ -0,0 +1,169 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+import javax.swing.UIManager;
+
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
+
+
+/**
+ * JComboBox used by the user to select the different styles of simple marker symbols.
+ * The available options are: circle style,square style,cross style, diamond style,x style
+ * and triangle style.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class JComboBoxSimpleMarkeStyles extends JComboBox{
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 3018193423738880772L;
+	private Color symColor = Color.BLACK;
+	private Color outlineColor = Color.BLACK;
+	private boolean outlined = false;
+	static MyItem[] pointTypes = new MyItem[] {
+		new MyItem(IMarkerSymbol.CIRCLE_STYLE),
+		new MyItem(IMarkerSymbol.SQUARE_STYLE),
+		new MyItem(IMarkerSymbol.CROSS_STYLE),
+		new MyItem(IMarkerSymbol.DIAMOND_STYLE),
+		new MyItem(IMarkerSymbol.X_STYLE),
+		new MyItem(IMarkerSymbol.TRIANGLE_STYLE),
+		new MyItem(IMarkerSymbol.STAR_STYLE),
+		new MyItem(IMarkerSymbol.VERTICAL_LINE_STYLE),
+	};
+
+	/**
+	 * Constructor method
+	 *
+	 */
+
+	public JComboBoxSimpleMarkeStyles() {
+		super();
+		removeAllItems();
+		for (int i = 0; i < pointTypes.length; i++) {
+			addItem(pointTypes[i]);
+		}
+
+		setEditable(false);
+		setRenderer(new ListCellRenderer() {
+
+			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+				SymbolPreviewer preview = new SymbolPreviewer(true) ;
+				ISimpleMarkerSymbol mySymbol = SymbologyLocator.getSymbologyManager().createSimpleMarkerSymbol();
+				mySymbol.setColor(symColor);
+				mySymbol.setOutlined(outlined);
+				mySymbol.setOutlineColor(outlineColor);
+				if (value instanceof MyItem) {
+					mySymbol.setStyle(((MyItem) value).style);
+				} else {
+					mySymbol.setStyle(((Integer) value).intValue());
+				}
+
+				mySymbol.setUnit(-1); // pixel
+				mySymbol.setSize(10);
+				preview.setForeground(UIManager.getColor(isSelected
+						? "ComboBox.selectionForeground"
+								: "ComboBox.foreground"));
+				preview.setBackground(UIManager.getColor(isSelected
+						? "ComboBox.selectionBackground"
+								: "ComboBox.background"));
+				preview.setSymbol(mySymbol);
+				preview.setSize(preview.getWidth(), 20);
+				preview.setPreferredSize(new Dimension(preview.getWidth(), 20));
+				return preview;
+			}
+		});
+	}
+
+	/**
+	 * Establishes the color of the simple marker symbol.
+	 * @param c,Color
+	 */
+	public void setSymbolColor(Color c) {
+		this.symColor = c;
+	}
+
+	/**
+	 * Sets the color for the outline of the simple marker symbol
+	 * @param c,Color
+	 */
+	public void setOutlineColor(Color c) {
+		outlined = c!=null;
+		outlineColor = c;
+	}
+
+	public Object getSelectedItem() {
+		return new Integer(((MyItem) super.getSelectedItem()).style);
+	}
+
+	public void setSelectedItem(Object item) {
+		if (item instanceof Integer) {
+			int myItem = ((Integer) item).intValue();
+			for (int i = 0; i < pointTypes.length; i++) {
+				if (myItem == pointTypes[i].style)
+					setSelectedIndex(i);
+			}
+		}
+		super.setSelectedItem(item);
+	}
+}
+/**
+ * Used to store the different options that the JComboBoxsimplemarkerStyles shows to
+ * the user.
+ *
+ */
+class MyItem {
+	int style;
+
+	/**
+	 * Constructor method
+	 * @param style
+	 */
+	MyItem(int style) {
+		this.style = style;
+	}
+
+	public boolean equals(Object obj) {
+		if (obj instanceof Integer) {
+			Integer integer = (Integer) obj;
+			return integer.intValue()==style;
+		}
+
+		if (obj instanceof MyItem) {
+			return ((MyItem) obj).style == style;
+
+		}
+		return super.equals(obj);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxSimpleMarkeStyles.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureLine.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureLine.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureLine.java	(revision 42196)
@@ -0,0 +1,156 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.IPictureLineSymbol;
+
+/**
+ * PictureLine initializes the properties that define a
+ * <b>picture marker symbol</b> and are showed in the tab created by
+ * PictureMarker which is called simple marker.<p>
+ * <p>
+ * Moreover, PictureLine has other methods such as getSymbolClass,getName,
+ * refreshControls and getLayer.
+ *
+ *
+ *@author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class PictureLine extends PictureMarker {
+	public PictureLine(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+	/**
+	 * Initializes the values in the tab
+	 *
+	 */
+	private void initialize() {
+//		tabs.remove(mask);
+		lblSize.setText(Messages.getText("width")+":");
+		lblX.setText(Messages.getText("scale")+" X:");
+		lblY.setText(Messages.getText("scale")+" Y:");
+		txtX.setMinValue(0.1);
+		txtX.setMaxValue(Double.POSITIVE_INFINITY);
+		txtX.setStep(0.1);
+		txtX.setDouble(1);
+
+		txtY.setMinValue(0.1);
+		txtY.setMaxValue(Double.POSITIVE_INFINITY);
+		txtY.setStep(0.1);
+		txtY.setDouble(1);
+	}
+
+	public String getName() {
+		return Messages.getText("picture_line_symbol");
+
+	}
+
+	public void refreshControls(ISymbol layer) {
+		IPictureLineSymbol sym;
+		try {
+			double size, xScale, yScale;
+			String fileName = null, selectionFileName = null;
+
+			if (layer == null) {
+				// initialize defaults
+				System.err.println(getClass().getName()+":: should be unreachable code");
+
+				size = 1D;
+				xScale = 1D;
+				yScale = 1D;
+				fileName = "-";
+				selectionFileName = "-";
+			} else {
+				sym = (IPictureLineSymbol) layer;
+
+				size = sym.getLineWidth();
+				xScale = sym.getXScale();
+				yScale = sym.getYScale();
+
+				fileName = sym.getSource().toURI().getPath();
+				selectionFileName = sym.getSelectedSource().toURI().getPath();
+
+			}
+
+			setValues(size, xScale, yScale, fileName, selectionFileName);
+		} catch (IndexOutOfBoundsException ioEx) {
+			NotificationManager.addWarning("Symbol layer index out of bounds", ioEx);
+		} catch (ClassCastException ccEx) {
+			NotificationManager.addWarning("Illegal casting from " +
+					layer.getClass().getName() + " to IPictureLineSymbol.", ccEx);
+		} catch (URISyntaxException e) {
+			NotificationManager.addWarning("URI Syntax error", e);
+		}
+	}
+
+	public ISymbol getLayer() {
+
+		try {
+			IPictureLineSymbol layer = null;
+
+
+			if(lblFileName.getText().equals("") )
+				layer=null;
+
+			else {
+				layer =  SymbologyLocator.getSymbologyManager().createPictureLineSymbol(new File(lblFileName.getText()).toURI().toURL(),null);
+				if (!lblSelFileName.getText().equals("")){
+					layer = SymbologyLocator.getSymbologyManager().createPictureLineSymbol(new File(lblFileName.getText()).toURI().toURL(),new File(lblSelFileName.getText()).toURI().toURL());
+				}
+//				layer.setIsShapeVisible(true); //true is the default value of this property
+				layer.setLineWidth(txtSize.getDouble());
+				layer.setXScale(txtX.getDouble());
+				layer.setYScale(txtY.getDouble());
+			}
+
+			return layer;
+		} catch (IOException e) {
+			IWarningSymbol warning =
+				(IWarningSymbol) MapContextLocator.getSymbolManager()
+				.getWarningSymbol(
+						SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+						Messages.getText("failed_acessing_files"),
+						SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+			return warning;
+
+		}
+
+	}
+	
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof IPictureLineSymbol;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/PictureLine.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorListModel.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.gui.styling;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.Vector;
+
+import javax.swing.AbstractListModel;
+import javax.swing.SwingUtilities;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.task.CancellableTask;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.gvsig.utils.listManager.ListModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class SymbolSelectorListModel implements a list to select symbols.This list
+ * has the property that allows the user to stablish a filter to accept or
+ * reject elements for it from a directory which is also specified when the
+ * SymbolSelectorModel is created.
+ * 
+ */
+public class SymbolSelectorListModel extends AbstractListModel implements
+		ListModel, Disposable {
+
+	private static Logger logger = LoggerFactory.getLogger(SymbolSelectorListModel.class);
+	private String fileExtension;
+
+	private SelectorFilter sfilter;
+	private Vector<ISymbol> elements;
+	private File folder;
+	private CancellableTask symbolLoader = null;
+
+	
+	/**
+	 * <p>
+	 * Creates a new instance of the model for the list in the Symbol Selector
+	 * window where the symbols are stored in the <b>dir</b> (root directory)
+	 * param.<br>
+	 * </p>
+	 * <p>
+	 * The <b>filter</b> is a user defined filter used to know which elements in
+	 * the folder are accepted or rejected for this list and it is used to avoid
+	 * mixing marker symbols for polygons for example.<br>
+	 * </p>
+	 * <p>
+	 * <b>fileExtension</b> param defines the extension of the file to be
+	 * parsed. This is like that to enable inheritance of this class to other
+	 * file selector such as StyleSelector.
+	 * 
+	 * @param dir
+	 *            , the root dir where symbols are located.
+	 * @param filter
+	 *            , the filter used to show or hide some elements.
+	 * @param fileExtension
+	 *            , file extension used for the files to be parsed.
+	 */
+	public SymbolSelectorListModel(File dir, SelectorFilter filter,
+			String fileExtension) {
+		this.fileExtension = fileExtension;
+		this.folder = dir;
+		this.sfilter = filter;
+	}
+
+	public synchronized void dispose() {
+		/*
+		 * Quien destruye la instancia de la clase se encarga de llamar al dispose
+		 * pero no hace falta hacer seguimieto de las instancias de esta que hay
+		 * en ejecucion, por eso no se a�ade en el constructor la instancia a la
+		 * lista de disposable del DisposableManager.
+		 */
+		if( this.symbolLoader!=null ) {
+			this.symbolLoader.cancelRequest();
+		}
+	}
+
+	public Object remove(int i) throws ArrayIndexOutOfBoundsException {
+		ISymbol o = elements.remove(i);
+		this.fireIntervalRemoved(this, i, i);
+		return o;
+	}
+
+	public void insertAt(int i, Object o) {
+		getObjects().insertElementAt((ISymbol) o, i);
+		this.fireIntervalAdded(this, i, i);
+	}
+
+	protected boolean accepts(ISymbol symbol) {
+		if (sfilter == null) {
+			return true;
+		}
+		return sfilter.accepts(symbol);
+	}
+
+	public void add(Object o) {
+		ISymbol symbol = (ISymbol) o;
+		if (!accepts(symbol)) {
+			return;
+		}
+		Vector<ISymbol> e = this.getObjects();
+		e.add((ISymbol) o);
+		try {
+			int n = e.size();
+			this.fireIntervalAdded(this, n - 1, n);
+		} catch (Exception ex) {
+			// Do nothing.
+		}
+	}
+
+	public Vector<ISymbol> getObjects() {
+		if (elements == null) {
+			elements = new Vector<ISymbol>(0);
+			FileFilter fileFiler = new FileFilter() {
+				public boolean accept(File pathname) {
+					return pathname.getAbsolutePath().toLowerCase().endsWith(fileExtension);
+				}
+			};
+			Visitor visitor = new Visitor() {
+				public void visit(final Object obj)
+					throws VisitCanceledException, BaseException {
+					SwingUtilities.invokeLater(new Runnable() {
+						public void run() {
+							add(obj);
+						}
+					});
+				}
+			};
+			if( this.symbolLoader!=null ) {
+				this.symbolLoader.cancelRequest();
+			}
+			this.symbolLoader = MapContextLocator.getSymbolManager().loadSymbols(folder,fileFiler,visitor);
+			 
+		}
+		return elements;
+	}
+
+	public int getSize() {
+		return getObjects().size();
+	}
+
+	public Object getElementAt(int index) {
+		return getObjects().get(index);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SymbolSelectorListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/EditorTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/EditorTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/EditorTool.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+
+import javax.swing.AbstractButton;
+import javax.swing.JComponent;
+
+
+/**
+ * Abstract class that specifies the methods that are useful for the edition.
+ * Most of them are methods in relation with mouse events in order to control its
+ * position, what button is pressed and so on.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public abstract class EditorTool implements MouseListener, MouseMotionListener {
+
+	public static final Dimension SMALL_BTN_SIZE = new Dimension(24, 24);
+	protected JComponent owner;
+	/**
+	 * Constructor method
+	 *
+	 * @param targetEditor
+	 */
+	public EditorTool(JComponent targetEditor) {
+		super();
+		owner = targetEditor;
+	}
+	/**
+	 * Returns the cursor
+	 */
+	public abstract Cursor getCursor();
+
+	public void mouseClicked(MouseEvent e) {}
+
+	public void mouseEntered(MouseEvent e) {
+		owner.setCursor(getCursor());
+	}
+
+	public void mouseExited(MouseEvent e) {
+		owner.setCursor(Cursor.getDefaultCursor());
+	}
+
+	public void mouseMoved(MouseEvent e) { }
+
+	public abstract AbstractButton getButton();
+	
+	public abstract boolean isSuitableFor(Object obj);
+	public abstract String getID();
+	public abstract void setModel(Object objectToBeEdited);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/EditorTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleLibrary.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.io.File;
+
+import org.gvsig.i18n.Messages;
+
+
+public class StyleLibrary extends SymbolLibrary {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6690618450594454656L;
+
+	public StyleLibrary(File rootDir) {
+		super(rootDir);
+		rootDirString = Messages.getText("style_library") ;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StyleLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxUnitsReferenceSystem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxUnitsReferenceSystem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxUnitsReferenceSystem.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import javax.swing.JComboBox;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * JComboBox to all reference systems
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class JComboBoxUnitsReferenceSystem extends JComboBox {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -5740096657624527194L;
+
+	public JComboBoxUnitsReferenceSystem() {
+		super();
+		addItem(Messages.getText("in_the_world"));
+		addItem(Messages.getText("in_the_paper"));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/JComboBoxUnitsReferenceSystem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StylePreviewer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StylePreviewer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StylePreviewer.java	(revision 42196)
@@ -0,0 +1,191 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: StylePreviewer.java 30892 2009-09-21 12:02:19Z cordinyana $
+* $Log$
+* Revision 1.6  2007-08-16 06:54:35  jvidal
+* javadoc updated
+*
+* Revision 1.5  2007/08/13 11:33:03  jvidal
+* javadoc
+*
+* Revision 1.4  2007/07/30 12:56:04  jaume
+* organize imports, java 5 code downgraded to 1.4 and added PictureFillSymbol
+*
+* Revision 1.3  2007/05/08 15:44:07  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/04/04 16:01:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.4  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.3  2007/02/08 15:43:04  jaume
+* some bug fixes in the editor and removed unnecessary imports
+*
+* Revision 1.1.2.2  2007/01/30 18:10:10  jaume
+* start commiting labeling stuff
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.gui.styling;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.i18n.Messages;
+
+
+/**
+* Defines the properties of the symbols that are showed in the
+* SymbolPreviewer panel.Also the user has methods to set this attributes.
+*
+* @author jaume dominguez faus - jaume.dominguez@iver.es
+*
+*/
+public class StylePreviewer extends SymbolPreviewer{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1690697926703748637L;
+	private int hGap = 5, vGap = 5;
+	private IStyle style;
+	private boolean showOutline;
+
+	/**
+	 * Constructor method
+	 *
+	 */
+	public StylePreviewer() {
+		super();
+		setBackground(Color.WHITE);
+	}
+	/**
+	 * Obtains the style of the symbol showed in the SymbolPreviewer panel
+	 * @return style,IStyle
+	 */
+	public IStyle getStyle() {
+		return style;
+	}
+
+	public void setShowOutline(boolean so) {
+		this.showOutline = so;
+	}
+
+	public ISymbol getSymbol() {
+		throw new Error(Messages.getText("undefined_for_StylePreviewer_use")
+				+" getStyle() "+
+				Messages.getText("instead") );
+
+	}
+
+	public void setSymbol(ISymbol symbol) {
+		throw new Error(Messages.getText("undefined_for_StylePreviewer_use")
+				+" setStyle(IStyle) "+
+				Messages.getText("instead") );
+
+	}
+	/**
+	 * Defines the style of the symbol showed in the SymbolPreviewer panel
+	 * @param style,IStyle
+	 */
+
+	public void setStyle(IStyle style) {
+		this.style = style;
+//		repaint();
+
+	}
+
+	public void paint(Graphics g) {
+		Graphics2D g2 = (Graphics2D) g;
+		Rectangle r = getBounds();
+		g2.translate(hGap, vGap);
+		r = new Rectangle(0, 0, (int) (r.getWidth()-(hGap*2)), (int) (r.getHeight()-(vGap*2)));
+
+		if (style != null) {
+			try {
+				if (showOutline) {
+					// this is a trick for the editor
+					style.drawOutline(g2, r);
+
+				} else {
+					style.drawInsideRectangle(g2, r);
+				}
+			} catch (SymbolDrawingException e) {
+				if (e.getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS) {
+					try {
+						IWarningSymbol warning =
+								(IWarningSymbol) MapContextLocator.getSymbolManager()
+										.getWarningSymbol(
+												SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+												"",
+												SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+						warning.drawInsideRectangle(g2, null, r,null);
+					} catch (SymbolDrawingException e1) {
+						// IMPOSSIBLE TO REACH THIS
+					}
+				} else {
+					// should be unreachable code
+					throw new Error(Messages.getText("symbol_shapetype_mismatch"));
+				}
+			}
+		} else {
+			String noneSelected = "["+Messages.getText("preview_not_available")+"]";
+			FontMetrics fm = g2.getFontMetrics();
+			int lineWidth = fm.stringWidth(noneSelected);
+			float scale = (float) r.getWidth() / lineWidth;
+			Font f = g2.getFont();
+			float fontSize = f.getSize()*scale;
+			g2.setFont(	f.deriveFont( fontSize ) );
+
+			g2.drawString(noneSelected,	 (r.x*scale) - (hGap/2), r.height/2+vGap*scale);
+		}
+	}
+
+	public int getHGap() {
+		return hGap;
+	}
+
+	public int getVGap() {
+		return vGap;
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/StylePreviewer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ArrowDecorator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ArrowDecorator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ArrowDecorator.java	(revision 42196)
@@ -0,0 +1,241 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.legend.gui.ISymbolSelector;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.gui.beans.DefaultBean;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IArrowMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IArrowDecoratorStyle;
+
+
+/**
+ * Implements a tab to modify attributes of an arrow decorator (size,
+ * arrow sharpnss, symbol, number of symbols to draw in the same line and options
+ * for flip and rotate the arrow)which allows the user to insert a symbol in the
+ * line (for example an arrow to specify its orientation)and to modify it.
+ *
+ * <p>
+ * This tab is used several times in different places in our applicattion .For
+ * this reason, in order to avoid the repetition of code, this class has been
+ * created (instead of treat it like a simple tab). With this solution, the user
+ * only has to refer it to use it (and do not need to create a tab and fill it again
+ * and so on).
+
+ * @autor jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class ArrowDecorator extends DefaultBean implements ActionListener {
+
+	private JCheckBox chkFlipAll;
+	private JCheckBox chkFlipFirst;
+	private JRadioButton rdBtnFollowLine;
+	private JRadioButton rdBtnFixedAngle;
+	private JNumberSpinner incrPositionCount;
+	private JNumberSpinner incrSharpness;
+	private JCheckBox chkUseDecorator;
+	private IMarkerSymbol marker;
+	private JNumberSpinner incrSize;
+	private JButton btnOpenSymbolSelector;
+
+	public ArrowDecorator() {
+		super();
+		initialize();
+	}
+
+	private void initialize() {
+		setName(Messages.getText("arrow_decorator"));
+		setLayout(new BorderLayout(10, 10));
+
+		chkUseDecorator = new JCheckBox(Messages.getText("use_decorator"));
+
+		JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		GridBagLayoutPanel pnlTopOptions = new GridBagLayoutPanel();
+		pnlTopOptions.addComponent(chkUseDecorator);
+		pnlTopOptions.addComponent(Messages.getText("size"),
+				incrSize = new  JNumberSpinner(
+						0,
+                                                5,
+						0,
+						Integer.MAX_VALUE,
+						1)
+		);
+		pnlTopOptions.addComponent(Messages.getText("arrow_sharpness"),
+				incrSharpness = new  JNumberSpinner(
+						0,
+                                                5,
+						0,
+						Integer.MAX_VALUE,
+						1)
+		);
+		JPanel aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+		aux2.add(	incrPositionCount = new JNumberSpinner(
+				0,
+                                5,
+				0,
+				Integer.MAX_VALUE,
+				1)
+		);
+//		JButton btnChooseSymbol = new JButton(Messages.getText("symbol"));
+//		JPanel aux3 = new JPanel(new FlowLayout(FlowLayout.LEFT,5, 0));
+//		aux3.add(btnChooseSymbol);
+//		aux2.add(aux3);
+
+
+		JPanel aux3 = new JPanel(new FlowLayout(FlowLayout.LEFT,5, 0));
+		aux3.add(getBtnOpenSymbolSelector());
+		aux2.add(aux3);
+
+		pnlTopOptions.addComponent(Messages.getText("number_of_positions")+":", aux2);
+		aux.add(pnlTopOptions);
+		add(aux, BorderLayout.NORTH);
+
+		aux = new JPanel(new BorderLayout(5,5));
+		aux2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		GridBagLayoutPanel pnlFlip = new GridBagLayoutPanel();
+		pnlFlip.setBorder(BorderFactory.createTitledBorder(Messages.getText("flip")+":"));
+		pnlFlip.addComponent(chkFlipAll = new JCheckBox(Messages.getText("flip_all")));
+		pnlFlip.addComponent(chkFlipFirst = new JCheckBox(Messages.getText("flip_first")));
+
+
+		aux2.add(pnlFlip);
+
+		GridBagLayoutPanel pnlRotation = new GridBagLayoutPanel();
+		pnlRotation.setBorder(BorderFactory.createTitledBorder(Messages.getText("rotation")+":"));
+		pnlRotation.addComponent(rdBtnFollowLine = new JRadioButton(Messages.getText("rotate_symbol_to_follow_line_angle")));
+		pnlRotation.addComponent(rdBtnFixedAngle = new JRadioButton(Messages.getText("keep_symbol_at_fixed_angle_to_page")));
+		ButtonGroup group = new ButtonGroup();
+		group.add(rdBtnFixedAngle);
+		group.add(rdBtnFollowLine);
+		aux2.add(pnlRotation);
+
+		chkUseDecorator.addActionListener(this);
+		incrPositionCount.addActionListener(this);
+		incrSharpness.addActionListener(this);
+		incrSize.addActionListener(this);
+		chkFlipFirst.addActionListener(this);
+		chkFlipAll.addActionListener(this);
+		rdBtnFixedAngle.addActionListener(this);
+		rdBtnFollowLine.addActionListener(this);
+
+		aux.add(aux2, BorderLayout.CENTER);
+		add(aux, BorderLayout.CENTER);
+	}
+
+	/**
+	 * Defines  the attributes that appear in the arrow decorator tab and will
+	 * determine the arrow decorator style.If this style has not been created previosly,
+	 * it will be done.
+	 * @param ads
+	 */
+	public void setArrowDecoratorStyle(IArrowDecoratorStyle ads) {
+		chkUseDecorator.setSelected(ads!=null);
+
+		if (ads == null) {
+			ads = SymbologyLocator.getSymbologyManager().createArrowDecoratorStyle();
+		}
+
+		marker = ads.getMarker();
+		if (marker instanceof IArrowMarkerSymbol) {
+			IArrowMarkerSymbol arrow = (IArrowMarkerSymbol) marker;
+			incrSharpness.setDouble(arrow.getSharpness());
+		}
+		incrSize.setDouble(marker.getSize());
+		incrPositionCount.setInteger(ads.getArrowMarkerCount());
+		chkFlipAll.setSelected(ads.isFlipAll());
+		chkFlipFirst.setSelected(ads.isFlipFirst());
+		rdBtnFollowLine.setSelected(ads.isFollowLineAngle());
+
+	}
+	/**
+	 * Obtains the values of the attributes of an arrow decorator.This attributes
+	 * will be different depending on the type of the symbol that the user had selected
+	 * (because if for example the arrow is changed into a square the sharpness won't
+	 * necessary and so on)
+	 *
+	 * @return
+	 */
+	public IArrowDecoratorStyle getArrowDecoratorStyle() {
+		if (!chkUseDecorator.isSelected()) return null;
+
+		IArrowDecoratorStyle ads = SymbologyLocator.getSymbologyManager().createArrowDecoratorStyle();
+		if (marker == null) {
+			marker = ads.getMarker();
+		}
+
+		if (marker instanceof IArrowMarkerSymbol) {
+			IArrowMarkerSymbol arrow = (IArrowMarkerSymbol) marker;
+			arrow.setSharpness(incrSharpness.getDouble());
+		}
+		marker.setSize(incrSize.getDouble());
+		ads.setMarker(marker);
+		ads.setArrowMarkerCount(incrPositionCount.getInteger());
+		ads.setFlipAll(chkFlipAll.isSelected());
+		ads.setFlipFirst(chkFlipFirst.isSelected());
+		ads.setFollowLineAngle(rdBtnFollowLine.isSelected());
+		return ads;
+	}
+
+
+	public void actionPerformed(ActionEvent e) {
+		JComponent c = (JComponent) e.getSource();
+		if (c.equals(getBtnOpenSymbolSelector())) {
+			ISymbolSelector se = SymbolSelector.createSymbolSelector(marker, Geometry.TYPES.POINT);
+			PluginServices.getMDIManager().addWindow(se);
+			marker = (IMarkerSymbol) se.getSelectedObject();
+
+		}
+		boolean isArrow = marker instanceof IArrowMarkerSymbol;
+		incrSharpness.setEnabled(isArrow);
+
+		callValueChanged(getArrowDecoratorStyle());
+	}
+
+	private JButton getBtnOpenSymbolSelector() {
+		if (btnOpenSymbolSelector == null) {
+			btnOpenSymbolSelector = new JButton();
+			btnOpenSymbolSelector.setText(Messages.getText("choose_symbol"));
+			btnOpenSymbolSelector.addActionListener(this);
+		}
+		return btnOpenSymbolSelector;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/ArrowDecorator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleText.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleText.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleText.java	(revision 42196)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.util.ArrayList;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JToggleButton;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JComboBoxFontSizes;
+import org.gvsig.gui.beans.swing.JComboBoxFonts;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
+
+
+/**
+ * SimpleText allows the user to store and modify the main properties that define a <b>simple text</b>.<p>
+ * <p>
+ * This functionality is carried out thanks to three tabs (text, formatted, advanced)
+ * and a Mask which are included in the panel to edit the properities of a symbol
+ * (SymbolEditor)how is explained in AbstractTypeSymbolEditor.<p>
+ * <p>
+ * The first tab (text)allows the user to change the font (<b>cmbFonts</b>),
+ * the size(<b>cmbFontSize</b>), the style (which can be underlined
+ * -<b>btnUnderlined</b>-, italic -<b>btnItalic</b>- or bold -<b>btnBold</b>-),the
+ * color (<b>jcc</b>)and the offset of the the text(<b>txtXOffset</b> and <b>txtYOffset</b>).<p>
+ * <p>
+ * The rest of tabs that are not mask are not yet implemented.
+ *
+ *
+ *@see Mask
+ *@see AbstractTypeSymbolEditor
+ *@author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SimpleText extends AbstractTypeSymbolEditor {
+
+	private ArrayList tabs = new ArrayList();
+	//TODO: Comentarizado hasta que mask est� acabado
+//	private Mask mask;
+	private JComboBoxFonts cmbFonts;
+	private JToggleButton btnUnderlined;
+	private JToggleButton btnItalic;
+	private JToggleButton btnBold;
+	private JComboBoxFontSizes cmbFontSize;
+	private ColorChooserPanel jcc;
+	private JNumberSpinner txtXOffset;
+	private JNumberSpinner txtYOffset;
+
+	public SimpleText(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+
+	/**
+	 * Initializes the parameters that define a simpletext.To do it, four tabs
+	 * are created (one of them is a mask)inside the SymbolEditor panel with
+	 * default values for the different attributes of the simple text.For the
+	 * moment only the text tab has been created and it allows the user to modify
+	 * the font,color, offset and style of the text.
+	 *
+	 */
+
+	private void initialize() {
+		JPanel myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		JPanel aux = new JPanel(new GridLayout(1,2,15,0));
+		myTab.setName(Messages.getText("text"));
+
+		////------------ Tab Text
+		GridBagLayoutPanel leftColumn = new GridBagLayoutPanel();
+		leftColumn.addComponent(Messages.getText("font")+": ", cmbFonts = new JComboBoxFonts());
+
+		JPanel aux2 = new JPanel(new FlowLayout(FlowLayout.LEADING,0,1));
+		aux2.add(getBtnBold());
+		aux2.add(getBtnItalic());
+		aux2.add(getBtnUnderlined());
+		leftColumn.addComponent(
+				Messages.getText("style")+":", aux2);
+
+		jcc = new ColorChooserPanel();
+		jcc.setAlpha(255);
+		leftColumn.addComponent(Messages.getText("color")+":", jcc);
+		// vertical alignment stuff
+		leftColumn.addComponent(new JLabel(" "));
+		// \vertical alignment stuff
+		leftColumn.addComponent(Messages.getText("x_offset")+":",
+				txtXOffset = new JNumberSpinner(0, 3));
+		leftColumn.addComponent(Messages.getText("x_offset")+":",
+				txtYOffset = new JNumberSpinner(0, 3));
+
+
+		GridBagLayoutPanel rightColumn = new GridBagLayoutPanel();
+		aux2 = new JPanel(new FlowLayout(0, 0, FlowLayout.LEFT));
+		cmbFontSize = new JComboBoxFontSizes();
+		aux2.add(cmbFontSize);
+		rightColumn.addComponent(Messages.getText("size")+":", aux2);
+		// vertical alignment stuff
+		rightColumn.addComponent(new JLabel(" "));
+		rightColumn.addComponent(new JLabel(" "));
+		rightColumn.addComponent(new JLabel(" "));
+		rightColumn.addComponent(new JLabel(" "));
+		rightColumn.addComponent(new JLabel(" "));
+		rightColumn.addComponent(new JLabel(" "));
+		rightColumn.addComponent(new JLabel(" "));
+		// \vertical alignment stuff
+
+
+		aux.add(leftColumn);
+		aux.add(rightColumn);
+
+
+		myTab.add(aux);
+		tabs.add(myTab);
+
+		////------------ Tab FORMATTED
+		myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(Messages.getText("formatted"));
+
+		leftColumn = new GridBagLayoutPanel();
+
+		myTab.add(leftColumn);
+		tabs.add(myTab);
+
+		////------------ Tab ADVANCED
+		myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(Messages.getText("advanced"));
+		leftColumn = new GridBagLayoutPanel();
+
+		myTab.add(leftColumn);
+		tabs.add(myTab);
+
+		////------------ Tab MASK
+//		mask = new Mask(this);
+//		tabs.add(mask);
+	}
+
+	public ISymbol getLayer() {
+		ISimpleTextSymbol sts = SymbologyLocator.getSymbologyManager().createSimpleTextSymbol();
+		return sts;
+	}
+
+	public String getName() {
+		return Messages.getText("simple_text_symbol");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs.toArray(new JPanel[tabs.size()]);
+	}
+
+	public void refreshControls(ISymbol layer) {
+		// TODO Implement it
+//		throw new Error("Not yet implemented!");
+
+	}
+
+	public EditorTool[] getEditorTools() {
+		return null;
+	}
+
+	private JToggleButton getBtnUnderlined() {
+		if (btnUnderlined == null) {
+			btnUnderlined = new JToggleButton(PluginServices.getIconTheme().get("underline-icon"));
+		}
+		return btnUnderlined;
+	}
+
+	private JToggleButton getBtnItalic() {
+		if (btnItalic == null) {
+			btnItalic = new JToggleButton(PluginServices.getIconTheme().get("italic-icon"));
+		}
+		return btnItalic;
+	}
+
+	private JToggleButton getBtnBold() {
+		if (btnBold == null) {
+			btnBold = new JToggleButton(PluginServices.getIconTheme().get("bold-icon"));
+		}
+		return btnBold;
+	}
+
+
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof ISimpleTextSymbol;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleText.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleLine.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleLine.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleLine.java	(revision 42196)
@@ -0,0 +1,223 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.listeners.BeanListener;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ISimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IArrowDecoratorStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ILineStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ISimpleLineStyle;
+
+
+/**
+ * SimpleLine allows the user to store and modify the main properties that
+ * define a <b>simple line</b>.<p>
+ * <p>
+ * This functionality is carried out thanks to two tabs (simple line and arrow
+ * decorator)which are included in the panel to edit the properities of a symbol
+ * (SymbolEditor)how is explained in AbstractTypeSymbolEditor.<p>
+ * <p>
+ * The first tab (Simple Line)allows the user to change the color (<b>jccColor</b>),
+ * the width (<b>txtWidth</b>) and the style of the line (<b>cmbLinStyles</b>).<p>
+ * <p>
+ * The second tab (<b>arrowDecorator</b>)allows the user to insert a symbol in the
+ * line (for example an arrow to specify its orientation)and to modify it.
+ *
+ *@see ArrowDecorator
+ *@see AbstractTypeSymbolEditor
+ *@author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SimpleLine extends AbstractTypeSymbolEditor implements ActionListener {
+
+	private ColorChooserPanel jccColor;
+	private JNumberSpinner txtWidth;
+	private ArrayList<JPanel> tabs = new ArrayList<JPanel>();
+	private ArrowDecorator arrowDecorator;
+	private LineProperties lineProperties;
+	private JNumberSpinner txtOffset;
+
+
+	public SimpleLine(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+
+	/**
+	 * Initializes the parameters that define a simpleline.To do it, two tabs
+	 * are created inside the SymbolEditor panel with default values for the
+	 * different attributes of the simple line.This two tabs will be simple
+	 * line tab (options of color, width and style of the line)and arrow
+	 * decorator tab (options to "decorate" the line with a symbol).
+	 */
+	private void initialize() {
+		JPanel myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(Messages.getText("simple_line"));
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+
+		// color chooser
+		jccColor = new ColorChooserPanel(true);
+		jccColor.setAlpha(255);
+		aux.addComponent(Messages.getText("color"),
+				jccColor	);
+
+		// line width
+		txtWidth = new JNumberSpinner(3.0, 25, 0, Double.POSITIVE_INFINITY, 1);
+		aux.addComponent(Messages.getText("width")+":",
+				txtWidth );
+
+		// line offset
+		txtOffset = new JNumberSpinner(0, 25, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, 1);
+		aux.addComponent(Messages.getText("offset")+":",
+				txtOffset );
+
+
+
+		aux.setPreferredSize(new Dimension(300, 300));
+		myTab.add(aux);
+
+		// initialize defaults
+		jccColor.setColor(Color.BLACK);
+		txtWidth.setDouble(1.0);
+		jccColor.addActionListener(this);
+		txtWidth.addActionListener(this);
+		txtOffset.addActionListener(this);
+		tabs.add(myTab);
+
+		// Arrow Decorator
+		arrowDecorator = new ArrowDecorator();
+		arrowDecorator.addListener(new BeanListener() {
+
+			public void beanValueChanged(Object value) {
+				fireSymbolChangedEvent();
+			}
+
+		});
+		tabs.add(arrowDecorator);
+
+		lineProperties = new LineProperties((float) txtWidth.getDouble());
+		lineProperties.addListener(new BeanListener(){
+
+			public void beanValueChanged(Object value) {
+				fireSymbolChangedEvent();
+			}
+		});
+		tabs.add(lineProperties);
+	}
+
+
+	public ISymbol getLayer() {
+		ISimpleLineSymbol layer = SymbologyLocator.getSymbologyManager().createSimpleLineSymbol();
+		layer.setLineColor(jccColor.getColor());
+//		layer.setIsShapeVisible(true); //true is the default value for this property
+		// clone the selected style in the combo box
+
+		ISimpleLineStyle simplLine= SymbologyLocator.getSymbologyManager().createSimpleLineStyle(); //new SimpleLineStyle();
+
+		simplLine.setStroke(lineProperties.getLinePropertiesStyle());
+		simplLine.setOffset(-txtOffset.getDouble());
+
+		IArrowDecoratorStyle ads= arrowDecorator.getArrowDecoratorStyle();
+		if (ads != null) {
+			ads.getMarker().setColor(jccColor.getColor());
+		}
+		simplLine.setArrowDecorator(arrowDecorator.getArrowDecoratorStyle());
+		layer.setLineStyle(simplLine);
+		layer.setLineWidth((float) txtWidth.getDouble());
+
+		return layer;
+	}
+
+	public String getName() {
+		return Messages.getText("simple_line");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs.toArray(new JPanel[0]);
+	}
+
+	public void refreshControls(ISymbol layer) {
+		ISimpleLineSymbol sym;
+		try {
+			if (layer == null) {
+				// initialize defaults
+				System.err.println(getClass().getName()+":: should be unreachable code");
+				jccColor.setColor(Color.BLACK);
+				txtWidth.setDouble(1.0);
+				txtOffset.setDouble(0);
+			} else {
+				sym = (ISimpleLineSymbol) layer;
+				jccColor.setColor(sym.getColor());
+				txtWidth.setDouble(sym.getLineStyle().getLineWidth());
+				txtOffset.setDouble(sym.getLineStyle().getOffset() == 0 ? 0 : -sym.getLineStyle().getOffset() );
+				arrowDecorator.setArrowDecoratorStyle( sym.getLineStyle().getArrowDecorator());
+				/*
+				 * this line discards any temp changes in the linestyle
+				 * widths made by any previous rendering and sets all the
+				 * values to those to be persisted.
+				 */
+				ILineStyle tempLineStyle = (ILineStyle) sym.getLineStyle().clone();
+				lineProperties.setLinePropertiesStyle((BasicStroke) tempLineStyle.getStroke());
+			}
+		} catch (IndexOutOfBoundsException ioEx) {
+			NotificationManager.addWarning("Symbol layer index out of bounds", ioEx);
+		} catch (ClassCastException ccEx) {
+			NotificationManager.addWarning("Illegal casting from " +
+					layer.getClass().getName() + " to ISimpleLineSymbol.", ccEx);
+		} catch (CloneNotSupportedException e) {
+			NotificationManager.addWarning(
+					"Symbol line style does not support cloning", e);
+		}
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		fireSymbolChangedEvent();
+	}
+
+	public EditorTool[] getEditorTools() {
+		return null;
+	}
+
+
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof ISimpleLineSymbol;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/SimpleLine.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/AbstractTypeSymbolEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/AbstractTypeSymbolEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/AbstractTypeSymbolEditor.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: AbstractTypeSymbolEditor.java 29596 2009-06-29 16:02:00Z jpiera $
+* $Log$
+* Revision 1.3  2007-08-08 11:45:38  jaume
+* some bugs fixed
+*
+* Revision 1.1  2007/08/03 11:29:13  jaume
+* refactored AbstractTypeSymbolEditorPanel class name to AbastractTypeSymbolEditor
+*
+* Revision 1.12  2007/08/03 09:20:47  jaume
+* refactored class names
+*
+* Revision 1.11  2007/08/03 09:07:01  jaume
+* javadoc
+*
+* Revision 1.10  2007/08/03 07:34:15  jaume
+* javadoc
+*
+* Revision 1.9  2007/07/30 12:56:04  jaume
+* organize imports, java 5 code downgraded to 1.4 and added PictureFillSymbol
+*
+* Revision 1.8  2007/07/18 06:56:03  jaume
+* continuing with cartographic support
+*
+* Revision 1.7  2007/07/12 10:43:55  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/06/29 13:07:33  jaume
+* +PictureLineSymbol
+*
+* Revision 1.5  2007/05/08 15:44:07  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2007/04/20 07:54:38  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2007/04/05 16:08:34  jaume
+* Styled labeling stuff
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.3  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/08 15:42:13  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2007/01/16 11:52:11  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/11/13 09:15:23  jaume
+* javadoc and some clean-up
+*
+* Revision 1.5  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/29 23:53:49  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/27 12:41:09  jaume
+* GUI
+*
+*
+*/
+package org.gvsig.app.gui.styling;
+
+import javax.swing.JPanel;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+/**
+ * <p>
+ * Abstract class that all the Symbol settings GUI's must extend. <b>This
+ * is not Component by it self, but a bag of JPanels with the required
+ * interface to be operable from the SymbolEditor</b>. The panels provide
+ * by this are the tabs of the JTabbedPane of the options area in the
+ * SymbolEditor.
+ * </p> 
+ * <p> 
+ * The components contained by this panelset are automatically placed in 
+ * the <b>SymbolEditor</b>'s symbol options area. In case other panel 
+ * of this was already placed, then the old one is replaced by this.
+ * </p>
+ * <p>
+ * In order to the <b>SymbolEditor</b> owner of this to decide which
+ * <b>AbstractTypeSymbolEditorPanel</b> will be placed each symbol editor
+ * panel must define the type of the symbol it is able to configure.
+ * To do this, <b>AbstractTypeSymbolEditorPanel</b> includes the abstract
+ * method <b>getSymbolClass()</b> which will return the <b>Class</b> of
+ * the corresponding symbol. The symbol class must define an implementation
+ * of ISymbol in general, and one of IMarkerSymbol, ILineSymbol or
+ * IFillSymbol in particular, depending of the context of the symbology
+ * being edited.
+ * </p>
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public abstract class AbstractTypeSymbolEditor implements TypeSymbolEditor {
+	protected SymbolEditor owner;
+	private boolean applying = false;
+
+
+	/**
+	 * Creates a new instance of this type symbol editor panel associated to
+	 * its SymbolEditor parent which will be notified of the changes in
+	 * order to keep the symbol preview in sync with the user settings.
+	 * @param owner, the SymbolEditor which created this.
+	 */
+	public AbstractTypeSymbolEditor(SymbolEditor owner) {
+		this.owner = owner;
+	}
+
+
+	/**
+	 * This overrided method returns the text shown at the SymbolEditorPanel
+	 * select combobox.
+	 */
+	public final String toString() {
+		return getName();
+	}
+
+	protected final void fireSymbolChangedEvent() {
+		if (!applying) { // avoid unnecessary events
+			applying = true;
+			ISymbol sym = getLayer();
+
+			if (sym instanceof CartographicSupport) {
+				CartographicSupport cs = (CartographicSupport) sym;
+				cs.setReferenceSystem(owner.getUnitsReferenceSystem());
+				cs.setUnit(owner.getUnit());
+			}
+			
+			owner.setLayerToSymbol(sym);
+			owner.refresh();
+			applying = false;
+		}
+	}
+
+
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/AbstractTypeSymbolEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LineProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LineProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LineProperties.java	(revision 42196)
@@ -0,0 +1,279 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.BasicStroke;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.gui.beans.DefaultBean;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.i18n.Messages;
+
+
+public class LineProperties extends DefaultBean implements ActionListener  {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6356385079456043011L;
+	private JRadioButton joinBevel;
+	private JRadioButton joinMiter;
+	private JRadioButton joinRound;
+	private JRadioButton capBut;
+	private JRadioButton capRound;
+	private JRadioButton capSquare;
+	private PatternEditor pe;
+	private JButton clearButton;
+	private float width;
+
+
+	public LineProperties(float lineWidth) {
+		super();
+		this.width=lineWidth;
+		initialize();
+	}
+
+	private void initialize() {
+		setName(Messages.getText("line_properties"));
+		setLayout(new BorderLayout(10, 10));
+
+		JPanel aux2 = new JPanel();
+		JPanel pnlJoin = new JPanel(new FlowLayout(FlowLayout.LEFT, 15, 0));
+
+
+		pnlJoin.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), Messages.getText("join_style")+":"));
+
+		JPanel d = new JPanel();
+		JPanel toCenter;
+		d.setLayout(new BoxLayout(d, BoxLayout.Y_AXIS));
+		joinBevel = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-join-bevel"));
+		joinBevel.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-join-bevel-selected"));
+		FlowLayout flowCenteredLayout = new FlowLayout(FlowLayout.CENTER, 0, 0);
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(joinBevel);
+		d.add(toCenter);
+
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(new JLabel(Messages.getText("join_bevel")));
+		d.add(toCenter);
+
+		pnlJoin.add(d);
+
+
+		d = new JPanel();
+		d.setLayout(new BoxLayout(d, BoxLayout.Y_AXIS));
+		joinMiter = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-join-miter"));
+		joinMiter.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-join-miter-selected"));
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(joinMiter);
+		d.add(toCenter);
+
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(new JLabel(Messages.getText("join_miter")));
+		d.add(toCenter);
+		pnlJoin.add(d);
+
+
+
+		d = new JPanel();
+		d.setLayout(new BoxLayout(d, BoxLayout.Y_AXIS));
+		joinRound = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-join-round"));
+		joinRound.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-join-round-selected"));
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(joinRound);
+		d.add(toCenter);
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(new JLabel(Messages.getText("join_round")));
+		d.add(toCenter);
+		pnlJoin.add(d);
+
+
+		ButtonGroup groupJoin = new ButtonGroup();
+		groupJoin.add(joinBevel);
+		groupJoin.add(joinMiter);
+		groupJoin.add(joinRound);
+		aux2.add(pnlJoin);
+
+		JPanel aux3 = new JPanel();
+
+		JPanel pnlCap = new JPanel(new FlowLayout(FlowLayout.LEFT, 30, 0));
+		pnlCap.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), Messages.getText("end_style")+":"));
+
+		JPanel c = new JPanel();
+		c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
+		capBut = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-cap-butt"));
+		capBut.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-cap-butt-selected"));
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(capBut);
+		c.add(toCenter);
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(new JLabel(Messages.getText("cap_butt")));
+		c.add(toCenter);
+		pnlCap.add(c);
+
+		JPanel a = new JPanel();
+		a.setLayout(new BoxLayout(a, BoxLayout.Y_AXIS));
+		capRound = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-cap-round"));
+		capRound.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-cap-round-selected"));
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(capRound);
+		a.add(toCenter);
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(new JLabel(Messages.getText("cap_round")));
+		a.add(toCenter);
+		pnlCap.add(a);
+
+
+		JPanel b = new JPanel();
+		b.setLayout(new BoxLayout(b, BoxLayout.Y_AXIS));
+		capSquare = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-cap-square"));
+		capSquare.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-cap-square-selected"));
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(capSquare);
+
+		b.add(toCenter);
+		toCenter = new JPanel(flowCenteredLayout);
+		toCenter.add(new JLabel(Messages.getText("cap_square")));
+		b.add(toCenter);
+		pnlCap.add(b);
+
+		ButtonGroup groupCap = new ButtonGroup();
+		groupCap.add(capBut);
+		groupCap.add(capRound);
+		groupCap.add(capSquare);
+		aux3.add(pnlCap);
+
+		JPanel aux4 = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+		aux4.add(new JBlank(5,40));
+		pe = new PatternEditor();
+		pe.setPreferredSize(new Dimension(440,40));
+		aux4.add(pe);
+		aux4.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), Messages.getText("fill_pattern")+":"));
+
+		JPanel aux5 = new JPanel(new FlowLayout(FlowLayout.LEFT,15, 0));
+		clearButton = new JButton(Messages.getText("clear"));
+		aux5.add(clearButton);
+
+		joinBevel.addActionListener(this);
+		joinMiter.addActionListener(this);
+		joinRound.addActionListener(this);
+		capBut.addActionListener(this);
+		capRound.addActionListener(this);
+		capSquare.addActionListener(this);
+		clearButton.addActionListener(clear);
+		pe.addActionListener(patternChange);
+
+		JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		aux.add(aux2, BorderLayout.CENTER);
+		aux.add(aux3, BorderLayout.CENTER);
+		aux.add(aux4, BorderLayout.CENTER);
+		aux.add(aux5, BorderLayout.WEST);
+		add(aux, BorderLayout.CENTER);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		callValueChanged(getLinePropertiesStyle());
+	}
+
+	private ActionListener patternChange = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			callValueChanged(getLinePropertiesStyle());
+		}
+	};
+
+	private ActionListener clear = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			pe.clear_Dash();
+			callValueChanged(getLinePropertiesStyle());
+		}
+	};
+
+
+
+	public void setLinePropertiesStyle(BasicStroke str) {
+
+		if (str == null) {
+			str = new BasicStroke();
+		}
+
+		switch(str.getLineJoin()) {
+		case 0:
+			joinMiter.setSelected(true);
+			break;
+		case 1:
+			joinRound.setSelected(true);
+			break;
+		case 2:
+			joinBevel.setSelected(true);
+			break;
+		}
+
+		switch(str.getEndCap()) {
+		case 0:
+			capBut.setSelected(true);
+			break;
+		case 1:
+			capRound.setSelected(true);
+			break;
+		case 2:
+			capSquare.setSelected(true);
+			break;
+		}
+
+		pe.setDash(str.getDashArray());
+		pe.repaint();
+	}
+
+	public BasicStroke getLinePropertiesStyle() {
+		int capType=0, joinType=0;
+
+
+		if (capBut.isSelected())			capType = 0;
+		else if (capRound.isSelected())		capType = 1;
+		else if (capSquare.isSelected())	capType = 2;
+
+		if (joinMiter.isSelected())			joinType = 0;
+		else if (joinRound.isSelected())	joinType = 1;
+		else if (joinBevel.isSelected())	joinType = 2;
+
+		float [] dash = pe.getDash();
+
+		BasicStroke str = new BasicStroke(width, capType, joinType, 10, pe.getDash(), 0);
+		pe.setDash(dash);
+		return str;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/LineProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFillProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFillProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFillProperties.java	(revision 42196)
@@ -0,0 +1,197 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.styling;
+
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMarkerFillPropertiesStyle;
+
+/**
+ * Implements a tab to modify attributes to fill the padding of a polygon
+ * such offset and separation (between pictures or markers).<p>
+ * <p>
+ * This tab is used several times in different places in our applicattion becuase the
+ * behaviour is the same if the user is filling the padding of a polygon using pictures
+ * or makers .For this reason, in order to avoid the repetition of code, this class has been
+ * created (instead of treat it like a simple tab). With this solution, the user
+ * only has to refer it to use it (and do not need to create a tab and fill it again
+ * and so on).
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class MarkerFillProperties extends JPanel {
+	private static final long serialVersionUID = 2873569057822494979L;
+	private static final double DEFAULT_SEPARATION = 20;
+	private static final double DEFAULT_OFFSET = 10;
+	private JNumberSpinner txtOffsetX;
+	private JNumberSpinner txtOffsetY;
+	private JNumberSpinner txtSeparationX;
+	private JNumberSpinner txtSeparationY;
+	private ArrayList<ActionListener> listeners = new ArrayList<ActionListener>();
+	private ActionListener action = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			for (int i = 0; i < listeners.size(); i++) {
+				((ActionListener) listeners.get(i)).actionPerformed(e);
+			}
+		}
+	};
+	/**
+	 * Constructor method
+	 *
+	 */
+	public MarkerFillProperties() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * Initializes the parameters to create a tab to modify attributes to fill the
+	 * padding of a polygon such offset and separation (between pictures or markers)
+	 *
+	 */
+	private void initialize() {
+		GridLayout layout = new GridLayout();
+		layout.setColumns(1);
+		layout.setVgap(5);
+		setName(Messages.getText("fill_properties"));
+		JPanel offsetPnl = new JPanel();
+		offsetPnl.setBorder(BorderFactory.
+				createTitledBorder(null,
+						Messages.getText("offset")));
+
+		// add components to the offset panel here
+		{
+			JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+			aux.add(new JLabel("X:"));
+			aux.add(txtOffsetX = new JNumberSpinner(0,10, 0, 150,1));
+			offsetPnl.add(aux);
+
+			aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+			aux.add(new JLabel("Y:"));
+			aux.add(txtOffsetY = new JNumberSpinner(0, 10, 0, 150,1));
+			offsetPnl.add(aux);
+
+
+
+		}
+		layout.setRows(offsetPnl.getComponentCount());
+		offsetPnl.setLayout(layout);
+
+		add(offsetPnl);
+
+		JPanel separationPnl = new JPanel();
+		layout = new GridLayout();
+		layout.setColumns(1);
+		layout.setVgap(5);
+		separationPnl.setBorder(BorderFactory.
+				createTitledBorder(null,
+						Messages.getText("separation")));
+
+		// add components to the separation panel here
+		{
+			JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+			aux.add(new JLabel("X:"));
+			aux.add(txtSeparationX = new JNumberSpinner(0, 10, 0, 150,1));
+			separationPnl.add(aux);
+
+			aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+			aux.add(new JLabel("Y:"));
+			aux.add(txtSeparationY = new JNumberSpinner(0, 10, 0, 150,1));
+			separationPnl.add(aux);
+		}
+		layout.setRows(separationPnl.getComponentCount());
+		separationPnl.setLayout(layout);
+		add(separationPnl);
+		layout = new GridLayout();
+		layout.setColumns(1);
+		layout.setVgap(5);
+		layout.setRows(getComponentCount());
+		txtOffsetX.setDouble(DEFAULT_OFFSET);
+		txtOffsetY.setDouble(DEFAULT_OFFSET);
+		txtSeparationX.setDouble(DEFAULT_SEPARATION);
+		txtSeparationY.setDouble(DEFAULT_SEPARATION);
+
+		txtOffsetX.addActionListener(action);
+		txtOffsetY.addActionListener(action);
+		txtSeparationX.addActionListener(action);
+		txtSeparationY.addActionListener(action);
+
+		setLayout(layout);
+	}
+	/**
+	 * Sets the graphical component that shows the properties of the model.
+	 * @param fillProps,IMarkerFillPropertiesStyle
+	 */
+	public void setModel(IMarkerFillPropertiesStyle fillProps) {
+		if (fillProps != null) {
+			txtOffsetX.setDouble(fillProps.getXOffset());
+			txtOffsetY.setDouble(fillProps.getYOffset());
+			txtSeparationX.setDouble(fillProps.getXSeparation());
+			txtSeparationY.setDouble(fillProps.getYSeparation());
+		}
+	}
+
+	/**
+	 * Obtains the MarkerFillProperties
+	 *
+	 * @return mfProps,IMarkerFillPropertiesStyle
+	 */
+	public IMarkerFillPropertiesStyle getMarkerFillProperties() {
+		IMarkerFillPropertiesStyle mfProps = SymbologyLocator.getSymbologyManager().createSimpleMarkerFillPropertiesStyle();
+		mfProps.setXOffset(txtOffsetX.getDouble());
+		mfProps.setYOffset(txtOffsetY.getDouble());
+		mfProps.setXSeparation(txtSeparationX.getDouble());
+		mfProps.setYSeparation(txtSeparationY.getDouble());
+		return mfProps;
+	}
+	/**
+	 * Permits the good operation of the JIncrementalNumberFields that are included
+	 * in the panel
+	 * @param l,ActionListener
+	 */
+
+	public void addActionListener(ActionListener l) {
+		listeners.add(l);
+	}
+
+	public void setEnabled(boolean enabled){
+		super.setEnabled(enabled);
+		txtOffsetX.setEnabled(enabled);
+		txtOffsetY.setEnabled(enabled);
+		txtSeparationX.setEnabled(enabled);
+		txtSeparationY.setEnabled(enabled);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/styling/MarkerFillProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/labeling/LabelClassEditorFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/labeling/LabelClassEditorFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/labeling/LabelClassEditorFactory.java	(revision 42196)
@@ -0,0 +1,27 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.app.gui.labeling;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface LabelClassEditorFactory {
+
+    public String getName();
+
+    public String getID();
+    
+    public LabelClassEditor createEditor(ILabelClass labelClass, FeatureStore store);
+
+    public boolean accept(Class<? extends ILabelClass> labelClass);
+    
+    public String toString();    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/labeling/LabelClassEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/labeling/LabelClassEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/gui/labeling/LabelClassEditor.java	(revision 42196)
@@ -0,0 +1,15 @@
+
+package org.gvsig.app.gui.labeling;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.tools.swing.api.Component;
+
+public interface LabelClassEditor extends Component {
+    	public ILabelClass getLabelClass();
+        
+        public void setLabelClass(ILabelClass labelClass);
+        
+        public void showDialog();
+        
+        public boolean isAccepted();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/gui/TableSymbolCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/gui/TableSymbolCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/gui/TableSymbolCellRenderer.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.awt.Component;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.border.Border;
+import javax.swing.table.TableCellRenderer;
+
+import org.gvsig.app.gui.styling.SymbolPreviewer;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+
+
+/**
+ * Renderer de la edici�n de un registro de la tabla de s�mbolos.
+ *
+ * @author fjp
+ */
+public class TableSymbolCellRenderer extends JPanel implements TableCellRenderer {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1340848936814244749L;
+	private Border unselectedBorder = null;
+	private Border selectedBorder = null;
+	private boolean isBordered = true;
+	protected SymbolPreviewer preview = new SymbolPreviewer(true) ;
+	
+	/**
+	 * Crea un nuevo FCellRenderer.
+	 *
+	 * @param isBordered DOCUMENT ME!
+	 */
+	public TableSymbolCellRenderer(boolean isBordered) {
+		this.isBordered = isBordered;
+		setOpaque(true); //MUST do this for background to show up.
+	}
+	
+	public Component getTableCellRendererComponent(JTable table, Object value,
+		boolean isSelected, boolean hasFocus, int row, int column) {
+		preview.setSymbol((ISymbol) value);
+
+		
+		if (isSelected) {
+			preview.setBackground(table.getBackground());
+			setBackground(table.getBackground());
+		}
+		
+		if (isBordered) {
+			if (isSelected) {
+				if (selectedBorder == null) {
+					selectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+							5, table.getSelectionBackground());
+				}
+				setBorder(selectedBorder);
+			} else {
+				if (unselectedBorder == null) {
+					unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+							5, table.getBackground());
+				}
+				setBorder(unselectedBorder);
+			}
+		}
+		
+		return preview;
+	}
+
+	
+
+}
+	

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/gui/TableSymbolCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILegendPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILegendPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILegendPanel.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ * Este interfaz es el que debe cumplir cualquier panel que empleemos
+ * para confeccionar una leyenda. Se le pasa una capa para que
+ * tome su leyenda, y con el m�todo getLegend tomamos la leyenda
+ * que ha confeccionado el usuario.
+ */
+public interface ILegendPanel {
+	/**
+	 * Initializes the data required for this legend panel. That is, the layer that
+	 * will adopt the changes and the current legend that this layer has. If the
+	 * legend is not the type of legend that this panel manages then it initializes
+	 * the panel with the default values. In case it is, then the panel should
+	 * refresh its components with the current values of the Legend.
+	 * @param lyr,  target layer
+	 * @param legend, the legend currently applied to lyr
+	 */
+	public void setData(FLayer lyr, ILegend legend);
+
+	/**
+	 * Returns an instance of Legend
+	 * @return Legend, the legend result of the settings
+	 */
+	public ILegend getLegend();
+
+	/**
+	 * Returns a brief human-readable description about what kind of legend builds this panel
+	 * @return String with a brief description
+	 */
+	public String getDescription();
+
+	/**
+	 * Returns the icon which should graphically describe what this panel's legend does.
+	 * @return ImageIcon with the icon to be displayed
+	 */
+	public ImageIcon getIcon();
+
+	/**
+	 * If this panel should appear as a subnode of the legends tree, in other words it is not
+	 * a first-level node, then this method would return <b>its parent's class</b>. Otherwise, if
+	 * it is a first-level node, then it will return <b>null</b>.
+	 * @return String containing the parent's title.
+	 */
+	public Class getParentClass();
+
+	/**
+	 * Returns the title (a human-readable one) of this panel.
+	 */
+	public String getTitle();
+
+	/**
+	 * <p>If this is a complete panel (it is a child node in the legend tree) to set up a legend
+	 * this method will return a <b>JPanel</b> containing the necessary components. Otherwise, if
+	 * it is just a classification node (it has children) in the legend tree it will return
+	 * just <b>null</b>.<br></p>
+	 *
+	 * <p>If <b>null</b> is returned, the ILegendPanel that will be shown and selected each time
+	 * it is selected is the very first child of this parent node.</p>
+	 */
+	public JPanel getPanel();
+
+	/**
+	 * Returns the class of the legend produced by this ILegendPanel.
+	 */
+	public Class getLegendClass();
+
+	/**
+	 * Returns <b>true</b> if this legend is applicable to this layer, <b>false</b> otherwise.
+	 */
+	public boolean isSuitableFor(FLayer layer);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILegendPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILabelingStrategyPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILabelingStrategyPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILabelingStrategyPanel.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+
+
+/**
+ * Interface to be implemented for those panels whose purpose is to
+ * set up labeling strategies.
+ *
+ * ILabelingStrategyPanel.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Jun 13, 2008
+ *
+ */
+public interface ILabelingStrategyPanel {
+	/**
+	 * Invoked when de user accepts the settings, the returned value
+	 * is a always ready-to-work labeling strategy.
+	 *
+	 * @return ILabelingStrategy, a labeling strategy completely set up.
+	 */
+	public ILabelingStrategy getLabelingStrategy();
+
+	/**
+	 * Sets the model of the panel. As a general contract, after invoke
+	 * this method, the panel should be filled with all the values
+	 * needed and be able to be repainted successfully.
+	 *
+	 * @param layer, the layer to whom the labeling strategy is associated.
+	 * @param str, the current labeling strategy.
+	 */
+	public void setModel(FLayer layer, ILabelingStrategy str);
+
+	/**
+	 * A human-readable localized text to make this strategy easily
+	 * recognizable among all the available strategies.
+	 * @return
+	 */
+	public String getLabelingStrategyName();
+
+	/**
+	 * <p>
+	 * The panel shown in the layer properties dialog is selected through
+	 * the class of the labeling strategy. This method returns such class.
+	 * <br>
+	 * </p>
+	 * <p>
+	 * <b>Note</b> that, as a collateral effect, the panel that sets up a labeling strategy
+	 * can be substituted programatically by other of your wish if
+	 * you return the same labeling strategy class than the one to
+	 * be replaced with your new one. The last panel installed, will
+	 * be the one to be shown.
+	 * </p>
+	 * @return Class, the labeling strategy's Class
+	 */
+	public Class getLabelingStrategyClass();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ILabelingStrategyPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JSymbolPreviewButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JSymbolPreviewButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JSymbolPreviewButton.java	(revision 42196)
@@ -0,0 +1,246 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: JSymbolPreviewButton.java 31301 2009-10-16 06:56:13Z vcaballero $
+* $Log$
+* Revision 1.4  2007-09-17 09:21:45  jaume
+* refactored SymboSelector (added support for multishapedsymbol)
+*
+* Revision 1.3  2007/08/09 10:39:04  jaume
+* first round of found bugs fixed
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.4  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.3  2007/02/14 10:00:45  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/14 09:59:17  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/02/13 16:19:19  jaume
+* graduated symbol legends (start commiting)
+*
+*
+*/
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.gui.styling.SymbolSelector;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Just a Button that shows an ISymbol instead a text.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class JSymbolPreviewButton extends JComponent implements MouseListener {
+	private static final long serialVersionUID = -7878718124556977288L;
+	private ISymbol prev;
+	private boolean pressed;
+	private int shapeType;
+	private ArrayList<ActionListener> listeners;  //  @jve:decl-index=0:
+	private ActionEvent event;
+	private String actionCommand;
+
+	/**
+	 * @return the actionCommand
+	 */
+	public String getActionCommand() {
+		return actionCommand;
+	}
+
+
+
+	/**
+	 * @param actionCommand the actionCommand to set
+	 */
+	public void setActionCommand(String actionCommand) {
+		this.actionCommand = actionCommand;
+	}
+
+
+
+	public JSymbolPreviewButton(int shapeType) {
+		this(null, shapeType);
+	}
+
+	public JSymbolPreviewButton(ISymbol sym,
+			int shapeType) {
+		super();
+		addMouseListener(this);
+		mouseExited(null);
+		setPreferredSize(new Dimension(150, 20));
+		this.shapeType = shapeType;
+		this.prev = sym;
+   }
+
+
+
+	public void paint(Graphics g) {
+		Rectangle bounds = getBounds();
+		Graphics2D g2 = (Graphics2D) g;
+		if (g2 != null) {
+			g2.setStroke(new BasicStroke(2));
+			g2.setColor(pressed && isEnabled() ? Color.GRAY : Color.WHITE);
+			g2.drawLine(0, 0, (int) bounds.getWidth(), 0);
+			g2.drawLine(0, 0, 0, (int) bounds.getHeight());
+			g2.setColor(pressed && isEnabled() ? Color.WHITE : Color.GRAY);
+			g2.drawLine(2, (int) bounds.getHeight(), (int) bounds.getWidth(), (int) bounds.getHeight());
+			g2.drawLine((int) bounds.getWidth(), 0, (int) bounds.getWidth(), (int) bounds.getHeight());
+			
+			int _margin = 5;
+
+			Rectangle2D r = new Rectangle2D.Double(
+			    _margin, _margin,
+			    bounds.getWidth() - 2 * _margin,
+			    bounds.getHeight() - 2 * _margin);
+
+			if (prev!=null) {
+				try {
+					prev.drawInsideRectangle(g2,
+					    new AffineTransform(), r.getBounds(),null);
+				} catch (SymbolDrawingException e) {
+					if (e.getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS) {
+						try {
+							MapContextLocator.getSymbolManager()
+									.getWarningSymbol(
+											SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+											prev.getDescription(),
+											SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS)
+									.drawInsideRectangle(g2, g2.getTransform(),
+											r.getBounds(), null);
+						} catch (SymbolDrawingException e1) {
+							// IMPOSSIBLE TO REACH THIS
+						}
+					} else {
+						// should be unreachable code
+						throw new Error(Messages.getText("symbol_shapetype_mismatch"));
+					}
+				}
+			}
+		}
+	}
+
+	public void setSymbol(ISymbol symbol) {
+		this.prev = symbol;
+		this.repaint();
+		// paintImmediately(getBounds());
+	}
+
+	public void mouseClicked(MouseEvent e) {
+		if (e.getButton() == MouseEvent.BUTTON1) {
+			ISymbolSelector sSelect = SymbolSelector.createSymbolSelector(prev, shapeType);
+			PluginServices.getMDIManager().addWindow(sSelect);
+			if (sSelect.getSelectedObject()!=null){
+				setSymbol((ISymbol) sSelect.getSelectedObject());
+				fireActionListeners();
+			}
+		}
+	}
+
+	private void fireActionListeners() {
+		if (!isEnabled()) return;
+		if (listeners != null) {
+			if (event == null) {
+				event = new ActionEvent(this, 0, actionCommand);
+			}
+			for (int i = 0; i < listeners.size(); i++) {
+				((ActionListener) listeners.get(i)).actionPerformed(
+						event);
+			}
+		}
+
+	}
+
+
+
+	public void mouseEntered(MouseEvent e) {}
+
+	public void mouseExited(MouseEvent e) {
+		setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
+		pressed = false;
+		paintImmediately(getBounds());
+	}
+
+	public void mousePressed(MouseEvent e) {
+
+		setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
+		pressed = true;
+		paintImmediately(getBounds());
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		if (pressed)
+			mouseClicked(e);
+		mouseExited(e);
+	}
+
+
+
+	public ISymbol getSymbol() {
+		return prev;
+	}
+
+
+
+	public void addActionListener(ActionListener l) {
+		if (listeners == null)
+			listeners = new ArrayList<ActionListener>();
+		listeners.add(l);
+	}
+
+
+
+	public void setShapeType(int shapeType) {
+		this.shapeType = shapeType;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JSymbolPreviewButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ISymbolSelector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ISymbolSelector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ISymbolSelector.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface ISymbolSelector extends IWindow {
+	/**
+	 * Returns the symbol selected by the user or null if none. It tries to return
+	 * the simplest possible symbol that suits the user settings.
+	 * @return
+	 */
+	public Object getSelectedObject();
+
+	/**
+	 * Sets the symbol selected by the user
+	 * @return
+	 */
+	public void setSymbol(Object symbol);
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ISymbolSelector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.symbology package documentation</title>
+</head>
+<body>
+
+	<p>Symbology swing library API.</p>
+	
+	<p>
+	It allows to get swing panels to show Symbology, and to include them in windows.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLocator.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing;
+
+import org.gvsig.tools.locator.BaseLocator;
+
+/**
+ * This locator is the entry point for the Symbology swing library,
+ * providing access to all Symbology swing services through the
+ * {@link SymbologySwingManager} .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class SymbologySwingLocator extends BaseLocator {
+
+    /**
+     * Symbology swing manager name.
+     */
+    public static final String SWING_MANAGER_NAME =
+        "Symbology.swing.manager";
+
+    /**
+     * Symbology swing manager description.
+     */
+    public static final String SWING_MANAGER_DESCRIPTION =
+        "Symbology UIManager";
+
+    private static final String LOCATOR_NAME = "Symbology.swing.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final SymbologySwingLocator INSTANCE =
+        new SymbologySwingLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static SymbologySwingLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Registers the Class implementing the PersistenceManager interface.
+     * 
+     * @param clazz
+     *            implementing the PersistenceManager interface
+     */
+    public static void registerSwingManager(
+        Class<? extends SymbologySwingManager> clazz) {
+        getInstance().register(SWING_MANAGER_NAME, SWING_MANAGER_DESCRIPTION,
+            clazz);
+    }
+
+    /**
+     * Gets the instance of the {@link ScriptingUIManager} registered.
+     * 
+     * @return {@link ScriptingUIManager}
+     */
+    public static SymbologySwingManager getSwingManager() {
+        return (SymbologySwingManager) getInstance()
+            .get(SWING_MANAGER_NAME);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLibrary.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for Swing API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class SymbologySwingLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(SymbologySwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+
+    	/*
+    	 * This property is read by the batik library and prevents
+    	 * hundreds of warnings like this when drawing SVG files:
+    	 * 
+    	 * "Graphics2D from BufferedImage lacks BUFFERED_IMAGE hint"
+    	 * 
+    	 * The absence of the BUFFERED_IMAGE hint does not seem to have
+    	 * consequences.
+    	 */
+    	System.setProperty("org.apache.batik.warn_destination", "false");
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        SymbologySwingManager manager =
+            SymbologySwingLocator.getSwingManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                SymbologySwingLocator.SWING_MANAGER_NAME,
+                SymbologySwingLocator.getInstance());
+        }
+        
+        IconThemeHelper.registerIcon("symbol", "symbol-layer-add", this);
+        IconThemeHelper.registerIcon("symbol", "symbol-layer-remove", this);
+        IconThemeHelper.registerIcon("symbol", "symbol-layer-move-down", this);
+        IconThemeHelper.registerIcon("symbol", "symbol-layer-move-up", this);
+        IconThemeHelper.registerIcon("symbol", "symbol-layer-unlock", this);
+        
+        IconThemeHelper.registerIcon("style", "image-keep-ratio-disabled", this);
+        IconThemeHelper.registerIcon("style", "image-keep-ratio-enabled", this);
+
+        IconThemeHelper.registerIcon("librarybrowser", "librarybrowser-folder", this);
+        IconThemeHelper.registerIcon("librarybrowser", "librarybrowser-folder-image", this);
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingManager.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing;
+
+import java.util.Collection;
+import java.util.List;
+import org.gvsig.app.gui.labeling.LabelClassEditor;
+import org.gvsig.app.gui.labeling.LabelClassEditorFactory;
+import org.gvsig.app.gui.styling.TypeSymbolEditor;
+import org.gvsig.app.project.documents.view.legend.gui.ILabelingStrategyPanel;
+import org.gvsig.app.project.documents.view.legend.gui.ILegendPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+
+import org.gvsig.gui.ColorTablePainter;
+import org.gvsig.gui.ColorTablesFactory;
+import org.gvsig.symbology.SymbologyManager;
+
+/**
+ * This class is responsible of the management of the library's swing user
+ * interface. It is the swing library's main entry point, and provides all the
+ * services to manage library swing components.
+ * 
+ * @see SymbologyWindowManager
+ * @see JSymbologyServicePanel
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface SymbologySwingManager {
+
+    /**
+     * Returns the {@link SymbologyManager}.
+     * 
+     * @return {@link SymbologyManager}
+     * @see {@link SymbologyManager}
+     */
+    public SymbologyManager getManager();
+
+    /**
+     * Returns the translation of a string.
+     * 
+     * @param key
+     *            String to translate
+     * @return a String with the translation of the string passed by parameter
+     */
+    public String getTranslation(String key);
+
+    /**
+     * Registers a new instance of a WindowManager which provides services to
+     * the management of the application windows.
+     * 
+     * @param manager
+     *            {@link SymbologyWindowManager} to register in the
+     *            ScriptingUIManager.
+     * @see SymbologyWindowManager
+     */
+    public void registerWindowManager(SymbologyWindowManager manager);
+
+    /**
+     * Returns the {@link SymbologyWindowManager}.
+     * 
+     * @return {@link SymbologyWindowManager}
+     * @see {@link SymbologyWindowManager}
+     */
+    public SymbologyWindowManager getWindowManager();
+    
+    public void setColorTablesFactory(ColorTablesFactory factory);
+    
+    public ColorTablesFactory getColorTablesFactory();
+    
+    public List<ColorTablePainter> createColorTables();
+    
+    public void registerSymbolEditor(Class<? extends TypeSymbolEditor> symbolEditor, int shapeType);
+    
+    public List<Class<? extends TypeSymbolEditor>> getSymbolEditorClassesByGeometryType(GeometryType geometryType);
+    
+    public void registerLegendEditor(Class<? extends ILegendPanel> legendEditor);
+    
+    public List<Class<? extends ILegendPanel>> getLegendEditorClasses();
+    
+    public List<ILegendPanel> getLegendEditors(FLayer layer);
+    
+    public void registerLabelingEditor(Class<? extends ILabelingStrategyPanel> labelingEditor);
+    
+    public List<ILabelingStrategyPanel> getLabelingEditors();
+        
+    public void registerLabelClassEditor(LabelClassEditorFactory factory);
+
+    public Collection<LabelClassEditorFactory> getLabelClassEditorFactories();
+
+    public LabelClassEditorFactory getLabelClassEditorFactory(String id);
+
+    public LabelClassEditorFactory getLabelClassEditorFactory(ILabelClass labelClass);
+
+    public LabelClassEditor createLabelClassEditor(ILabelClass labelClass, FeatureStore store);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologySwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologyWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologyWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologyWindowManager.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing;
+
+import javax.swing.JPanel;
+
+/**
+ * Responsible of the window management to show the panels of the
+ * Symbology swing library.
+ * 
+ * @see SymbologySwingManager
+ * @see JSymbologyServicePanel
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface SymbologyWindowManager {
+
+    public static final int MODE_DIALOG = 1;
+    public static final int MODE_WINDOW = 2;
+    public static final int MODE_TOOL = 3;
+
+    /**
+     * Inserts a Panel in a window with a characteristic properties.
+     * 
+     * @param panel
+     *            JPanel with the content of the window
+     * @param title
+     *            String with the title of the window
+     * @param mode
+     *            int that defines the type of window
+     */
+    public void showWindow(JPanel panel, String title, int mode);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api/src/main/java/org/gvsig/symbology/swing/SymbologyWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/pom.xml	(revision 42196)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.swing</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+    </dependency>
+  </dependencies>
+
+  <modules>
+    <module>org.gvsig.symbology.swing.api</module>
+    <module>org.gvsig.symbology.swing.impl</module>
+  </modules>
+</project>
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.symbology.swing.impl.SymbologySwingDefaultImplLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-miter.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-miter.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-round-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-round-selected.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-butt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-butt.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-bevel-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-bevel-selected.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-square.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-square.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-miter-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-miter-selected.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-round.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-round.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-butt-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-butt-selected.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-square-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-square-selected.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-round.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-cap-round.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-bevel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-bevel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-round-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/resources/images/line-properties/line-properties-join-round-selected.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.symbology package documentation</title>
+</head>
+<body>
+
+	<p>Symbology swing library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/SymbologySwingDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/SymbologySwingDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/SymbologySwingDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing.impl;
+
+
+import org.gvsig.symbology.swing.SymbologySwingLibrary;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for default swing implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class SymbologySwingDefaultImplLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(SymbologySwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        SymbologySwingLocator
+            .registerSwingManager(DefaultSymbologySwingManager.class);
+        
+        // LineProperties
+        IconThemeHelper.registerIcon("line-properties", "line-properties-join-bevel", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-join-bevel-selected", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-join-miter", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-join-miter-selected", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-join-round", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-join-round-selected", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-cap-butt", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-cap-butt-selected", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-cap-round", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-cap-round-selected", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-cap-square", this);
+        IconThemeHelper.registerIcon("line-properties", "line-properties-cap-square-selected", this);
+        // SymbolLayerManager
+        IconThemeHelper.registerIcon("symbol-editor", "symbol-editor-unlocked", this);
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/SymbologySwingDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/IconThemeHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/IconThemeHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/IconThemeHelper.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing.impl;
+
+import java.awt.Image;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IconThemeHelper {
+
+	private static Logger logger = LoggerFactory.getLogger(IconThemeHelper.class);
+	
+	@SuppressWarnings("rawtypes")
+	public static void registerIcon(String group, String name, Object obj) {
+		String resourceName;
+		ClassLoader loader;
+		String provider; 
+		IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+		if( group == null || group.trim().length()==0 ) {
+			resourceName = "images/"+name+".png";
+		} else {
+			resourceName = "images/"+group+"/"+name+".png";
+		}
+		if( obj instanceof Class ) {
+			loader = ((Class) obj).getClassLoader();
+			provider = ((Class) obj).getName(); 
+		} else {
+			loader = obj.getClass().getClassLoader();
+			provider = obj.getClass().getName();
+		}
+		try {
+			iconTheme.registerDefault(provider, group, name, null, loader.getResource(resourceName));
+		} catch( Throwable e) {
+			logger.info(e.getMessage());
+		}
+	}
+
+	public static ImageIcon getImageIcon(String iconName) {
+		IconThemeManager manager = ToolsSwingLocator.getIconThemeManager();
+		return manager.getCurrent().get(iconName);
+	}
+	
+	public static Image getImage(String iconName) {
+		IconThemeManager manager = ToolsSwingLocator.getIconThemeManager();
+		return manager.getCurrent().get(iconName).getImage();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/IconThemeHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologySwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologySwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologySwingManager.java	(revision 42196)
@@ -0,0 +1,246 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.app.gui.labeling.LabelClassEditor;
+import org.gvsig.app.gui.labeling.LabelClassEditorFactory;
+
+import org.gvsig.app.gui.styling.TypeSymbolEditor;
+import org.gvsig.app.project.documents.view.legend.gui.ILabelingStrategyPanel;
+import org.gvsig.app.project.documents.view.legend.gui.ILegendPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClassFactory;
+import org.gvsig.gui.ColorTablePainter;
+import org.gvsig.gui.ColorTablesFactory;
+import org.gvsig.gui.DefaultColorTablesFactory;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+import org.gvsig.symbology.swing.SymbologyWindowManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default implementation of the {@link SymbologySwingManager}.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultSymbologySwingManager implements
+        SymbologySwingManager {
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultSymbologySwingManager.class);
+
+    private SymbologyManager manager;
+    private I18nManager i18nmanager = null;
+    private SymbologyWindowManager windowManager;
+    private ColorTablesFactory colorTablesFactory;
+
+    private static Map<Integer, List<Class<? extends TypeSymbolEditor>>> symbolEditorRegistry;
+    private List<Class<? extends ILegendPanel>> legendEditorRegistry = null;
+    private List<Class<? extends ILabelingStrategyPanel>> labelingEditorRegistry = null;
+    private Map<String,LabelClassEditorFactory> labelClassEditorFactories = new HashMap<String, LabelClassEditorFactory>();
+
+    public DefaultSymbologySwingManager() {
+        this.manager = SymbologyLocator.getSymbologyManager();
+        this.windowManager = new DefaultSymbologyWindowManager();
+        this.colorTablesFactory = new DefaultColorTablesFactory();
+
+        this.legendEditorRegistry = new ArrayList<Class<? extends ILegendPanel>>();
+        this.labelingEditorRegistry = new ArrayList<Class<? extends ILabelingStrategyPanel>>();
+    }
+
+    public SymbologyManager getManager() {
+        return this.manager;
+    }
+
+    public String getTranslation(String key) {
+        if (this.i18nmanager == null) {
+            this.i18nmanager = ToolsLocator.getI18nManager();
+        }
+        return this.i18nmanager.getTranslation(key);
+    }
+
+    public void registerWindowManager(SymbologyWindowManager manager) {
+        this.windowManager = manager;
+    }
+
+    public SymbologyWindowManager getWindowManager() {
+        return this.windowManager;
+    }
+
+    public void setColorTablesFactory(ColorTablesFactory factory) {
+        colorTablesFactory = factory;
+    }
+
+    public List<ColorTablePainter> createColorTables() {
+        if (colorTablesFactory != null) {
+            return colorTablesFactory.createColorTables();
+        }
+        return null;
+    }
+
+    public ColorTablesFactory getColorTablesFactory() {
+        return this.colorTablesFactory;
+    }
+
+    /**
+     * @deprecated use registerTypeSymbolEditor
+     */
+    public void addSymbolEditorPanel(Class abstractTypeSymbolEditorPanelClass, int shapeType) {
+        Class<? extends TypeSymbolEditor> symbolEditor = abstractTypeSymbolEditorPanelClass;
+        this.registerSymbolEditor(symbolEditor, shapeType);
+    }
+
+    public void registerSymbolEditor(Class<? extends TypeSymbolEditor> symbolEditor, int shapeType) {
+        if (symbolEditorRegistry == null) {
+            symbolEditorRegistry = new HashMap<Integer, List<Class<? extends TypeSymbolEditor>>>();
+        }
+
+        Integer key = new Integer(shapeType);
+        List<Class<? extends TypeSymbolEditor>> l = symbolEditorRegistry.get(key);
+        if (l == null) {
+            l = new ArrayList<Class<? extends TypeSymbolEditor>>();
+        }
+        l.add(symbolEditor);
+
+        symbolEditorRegistry.put(key, l);
+    }
+
+    public List<Class<? extends TypeSymbolEditor>> getSymbolEditorClassesByGeometryType(GeometryType geometryType) {
+        if (symbolEditorRegistry == null) {
+            return Collections.emptyList();
+        }
+        Iterator it = symbolEditorRegistry.keySet().iterator();
+        while (it.hasNext()) {
+            int currentType = (Integer) it.next();
+            if (geometryType.isTypeOf(currentType)) {
+                return (List) symbolEditorRegistry.get(currentType);
+            }
+        }
+        return Collections.emptyList();
+    }
+
+    public void registerLegendEditor(Class<? extends ILegendPanel> legendEditor) {
+        if (this.legendEditorRegistry == null) {
+            this.legendEditorRegistry = new ArrayList<Class<? extends ILegendPanel>>();
+        }
+        if (!this.legendEditorRegistry.contains(legendEditor)) {
+            this.legendEditorRegistry.add(legendEditor);
+        }
+    }
+
+    public List<Class<? extends ILegendPanel>> getLegendEditorClasses() {
+        return Collections.unmodifiableList(this.legendEditorRegistry);
+    }
+
+    public List<ILegendPanel> getLegendEditors(FLayer layer) {
+        List<ILegendPanel> editors = new ArrayList<ILegendPanel>();
+        Class<? extends ILegendPanel> legendEditorClass = null;
+        ILegendPanel editor = null;
+
+        for (int i = 0; i < legendEditorRegistry.size(); i++) {
+            legendEditorClass = legendEditorRegistry.get(i);
+            try {
+                editor = null;
+                editor = (ILegendPanel) legendEditorClass.newInstance();
+            } catch (Exception e) {
+                logger.info("Unable to instantiate legend editor.", e);
+            }
+            if (editor != null && editor.isSuitableFor(layer)) {
+                editors.add(editor);
+            }
+        }
+        return editors;
+    }
+
+    public void registerLabelingEditor(Class<? extends ILabelingStrategyPanel> labelingEditor) {
+        if (!this.labelingEditorRegistry.contains(labelingEditor)) {
+            this.labelingEditorRegistry.add(labelingEditor);
+        }
+    }
+
+    public List<ILabelingStrategyPanel> getLabelingEditors() {
+        List<ILabelingStrategyPanel> labelingEditors = new ArrayList<ILabelingStrategyPanel>();
+        Iterator<Class<? extends ILabelingStrategyPanel>> it = this.labelingEditorRegistry.iterator();
+        while (it.hasNext()) {
+            Class<? extends ILabelingStrategyPanel> labelingEditorClass = it.next();
+            try {
+                ILabelingStrategyPanel labelingEditor = labelingEditorClass.newInstance();
+                labelingEditors.add(labelingEditor);
+            } catch (Exception ex) {
+                String msg = "Can't create the labeling editor associated to '"+labelingEditorClass.getName()+"'.";
+                logger.warn(msg,ex);
+                throw new RuntimeException(msg,ex);
+            }
+        }
+        return labelingEditors;
+    }
+
+    public void registerLabelClassEditor(LabelClassEditorFactory factory) {
+        this.labelClassEditorFactories.put(factory.getID().toLowerCase(), factory);
+    }
+
+    public Collection<LabelClassEditorFactory> getLabelClassEditorFactories() {
+        return Collections.unmodifiableCollection( this.labelClassEditorFactories.values());
+    }
+
+    public LabelClassEditorFactory getLabelClassEditorFactory(String id) {
+        if( id==null ) {
+            return null;
+        }
+        return this.labelClassEditorFactories.get(id.toLowerCase());
+    }
+
+    public LabelClassEditorFactory getLabelClassEditorFactory(ILabelClass labelClass) {
+        Iterator<LabelClassEditorFactory> it = this.labelClassEditorFactories.values().iterator();
+        while( it.hasNext() ) {
+            LabelClassEditorFactory labelClassEditorFactory = it.next();
+            if( labelClassEditorFactory!=null && labelClassEditorFactory.accept(labelClass.getClass()) ) {
+                return labelClassEditorFactory;
+            }
+        }
+        return null;
+    }
+
+    public LabelClassEditor createLabelClassEditor(ILabelClass labelClass, FeatureStore store) {
+        LabelClassEditorFactory f = this.getLabelClassEditorFactory(labelClass);
+        if( f == null ) {
+            return null;
+        }
+        return f.createEditor(labelClass, store);
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologySwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologyWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologyWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologyWindowManager.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.gvsig.symbology.swing.SymbologyWindowManager;
+
+/**
+ * Default implementation for the {@link SymbologyWindowManager}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultSymbologyWindowManager implements
+    SymbologyWindowManager, ComponentListener {
+
+    public void showWindow(JPanel panel, String title, int mode) {
+        JFrame frame = new JFrame();
+        // frame.setAlwaysOnTop(true);
+
+        final Dimension s = Toolkit.getDefaultToolkit().getScreenSize();
+        frame.setLocation(s.width / 4, s.height / 4);
+
+        frame.setLayout(new BorderLayout());
+        frame.setTitle(title);
+        frame.add(panel, BorderLayout.CENTER);
+
+        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+
+        frame.setSize(400, 400);
+        panel.addComponentListener(this);
+
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+    public void componentHidden(ComponentEvent componentEvent) {
+        JFrame frame =
+            (JFrame) ((JPanel) componentEvent.getSource()).getRootPane()
+                .getParent();
+        frame.setVisible(false);
+        frame.dispose();
+    }
+
+    public void componentMoved(ComponentEvent arg0) {
+        // Do nothing
+    }
+
+    public void componentResized(ComponentEvent arg0) {
+        // Do nothing
+    }
+
+    public void componentShown(ComponentEvent arg0) {
+        // Do nothing
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/main/java/org/gvsig/symbology/swing/impl/DefaultSymbologyWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.symbology">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/pom.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.swing.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology.swing</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+<!--
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.swing.api</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+-->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+<!--
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.compat.se</artifactId>
+      <scope>test</scope>
+    </dependency>
+-->
+  </dependencies>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.classpath
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.classpath	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.classpath	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.project
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.project	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.project	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.gvsig.symbology.swing.impl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing/org.gvsig.symbology.swing.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.swing
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.symbology
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer.lib</artifactId>
+  <packaging>pom</packaging>
+  <name>org.gvsig.newlayer.lib</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.newlayer</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.newlayer.lib.api</module>
+    <module>org.gvsig.newlayer.lib.impl</module>
+  </modules>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.newlayer.impl.NewLayerDefaultImplLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text.properties	(revision 42196)
@@ -0,0 +1,17 @@
+cant_create_new_layer=No se puede crear la nueva capa
+new_layers_parameters_missing=No se puede crear una nueva capa.\nFaltan los par�metros.\nVuelva atr�s e introd�zcalos.
+new_layer_not_store_name=No se puede crear la nueva capa.\nEl nombre del store no existe.\nVuelva atr�s e introd�zcalo.
+not_applicable=No aplicable
+_Invalid_geometry_type=Tipo de geometr�a no v�lido
+_Add_layer_to_view=A�adir capa a la vista
+_Field_definitions=Definiciones de campos
+_Output_format=Formato de salida
+_Adding_layer=A�adir capa
+_Name=Nombre
+_Geometry_type=Tipo geom.
+_Dimensions=Dimensiones
+_Primary_key=Clave primaria
+_Mandatory=Obligatorio
+_Mandatory_(short_text)=Oblig.
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,16 @@
+cant_create_new_layer=Can't create the new layer
+new_layer_parameters_missing=Can't create a new layer.\n The store paremeters are missing.\n Go back and enter it, please.
+new_layer_not_store_name=Can't create a new layer.\n The store name is missing.\n Go back and enter it, please.
+not_applicable=Not applicable
+_Invalid_geometry_type=Invalid geometry type
+_Add_layer_to_view=Add layer to view
+_Field_definitions=Field definitions
+_Output_format=Output format
+_Adding_layer=Adding layer
+_Name=Name
+_Geometry_type=Geom. type
+_Dimensions=Dimensions
+_Primary_key=Primary key
+_Mandatory=Mandatory
+_Mandatory_(short_text)=Mand.
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/images/panel/view-new-layer-illustration.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/images/panel/view-new-layer-illustration.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/newlayerfilters.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/newlayerfilters.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/newlayerfilters.properties	(revision 42196)
@@ -0,0 +1,4 @@
+#point_geometries_only=
+#curve_geometries_only=
+#surface_geometries_only=
+prov_demo=PROV < '10'
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/resources/org/gvsig/newlayer/lib/impl/newlayerfilters.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/AddNewLayerQuestionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/AddNewLayerQuestionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/AddNewLayerQuestionPanel.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.NewLayerWizard;
+
+public class AddNewLayerQuestionPanel extends JPanel implements OptionPanel{
+	
+    private static final long serialVersionUID = -5251910576017225307L;
+    private NewLayerWizard wizard;
+	private JCheckBox questionCheckBox = null;
+	
+	public AddNewLayerQuestionPanel(NewLayerWizard wizard){
+		this.wizard = wizard;
+		initializeComponents();
+	}
+
+	public String getPanelTitle() {
+		return Messages.getText("_Adding_layer");
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		getService().addLayerToView(getAddLayerToView());
+	}
+
+	public void lastPanel() {
+		// do nothing
+		
+	}
+
+	public void updatePanel() {
+		initializeComponents();
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+    private void initializeComponents() {
+        this.setLayout(new BorderLayout());
+        this.add(getQuestionCheckBox(), BorderLayout.NORTH);        
+    }
+    
+    private JCheckBox getQuestionCheckBox(){
+    	if (this.questionCheckBox == null){
+    		this.questionCheckBox = new JCheckBox(
+    		    Messages.getText("_Add_layer_to_view"), true);
+    	}
+    	return this.questionCheckBox;
+    }
+
+	private NewLayerService getService() {
+		return this.wizard.getService();
+	} 
+	
+	public boolean getAddLayerToView(){
+		return getQuestionCheckBox().isSelected();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/AddNewLayerQuestionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerService.java	(revision 42196)
@@ -0,0 +1,231 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.newlayer.NewLayerManager;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.NewLayerServiceException;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Default {@link NewLayerService} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultNewLayerService implements NewLayerService {
+
+    private NewLayerManager newLayerManager;
+    private NewLayerProviderFactory type;
+    private NewLayerProvider provider;
+    private boolean addLayerToView = true;
+    private MapContext mapContext;
+
+    /**
+     * {@link DefaultNewLayerService} constructor
+     */
+    public DefaultNewLayerService(NewLayerManager manager, MapContext mapContext) {
+        this.newLayerManager = manager;
+        this.mapContext = mapContext;
+    }
+
+    public NewLayerProvider getProvider() {
+        return provider;
+    }
+
+    public void createLayer() throws NewLayerServiceException {
+        try {
+            this.getExplorer().add(this.getStoreName(),
+                this.getNewStoreParameters(), true);
+        } catch (DataException e) {
+            throw new CantCreateNewLayerException(e);
+        }
+    }
+
+    public void loadLayer() throws NewLayerServiceException {
+        try {
+            String storeName = this.getStoreName();
+            DataStoreParameters storeParameters =
+                this.getOpenStoreParameters();
+            DataManager dataManager = DALLocator.getDataManager();
+            DataStore store = dataManager.openStore(storeName, storeParameters);
+            String layerName = store.getName();
+
+            MapContextManager mapContextManager =
+                MapContextLocator.getMapContextManager();
+            FLayer lyr = mapContextManager.createLayer(layerName, store);
+            lyr.setActive(true);
+            lyr.setVisible(true);
+            mapContext.getLayers().addLayer(lyr);
+
+            lyr.dispose();
+        } catch (DataException e) {
+            throw new CantOpenStoreException(e);
+        } catch (ValidateDataParametersException e) {
+            throw new CantOpenStoreException(e);
+        } catch (LoadLayerException e) {
+            throw new CantLoadNewLayerException(e);
+        }
+
+    }
+
+    public class CantCreateNewLayerException extends NewLayerServiceException {
+
+        /**
+		 * 
+		 */
+        private static final long serialVersionUID = 4208215791054246118L;
+
+        public CantCreateNewLayerException(Throwable cause) {
+            super("Can't create the layer", cause, "_cant_create_the_layer",
+                serialVersionUID);
+        }
+    }
+
+    public class CantOpenStoreException extends NewLayerServiceException {
+
+        /**
+		 * 
+		 */
+        private static final long serialVersionUID = -2245228621032918630L;
+
+        public CantOpenStoreException(Throwable cause) {
+            super("Can't open store", cause, "_cant_open_store",
+                serialVersionUID);
+        }
+    }
+
+    public class CantLoadNewLayerException extends NewLayerServiceException {
+
+        /**
+		 * 
+		 */
+        private static final long serialVersionUID = -1711950651766745963L;
+
+        public CantLoadNewLayerException(Throwable cause) {
+            super("Can't load the new layer", cause,
+                "_cant_load_the_new_layer", serialVersionUID);
+        }
+    }
+
+    public void setType(String type) {
+        try {
+            setProviderFactory(this.newLayerManager
+                .getNewLayerProviderFactory(type));
+        } catch (ServiceException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public DataServerExplorer getExplorer() {
+        return getProvider().getExplorer();
+    }
+
+    public String getStoreName() {
+        return getProvider().getStoreName();
+    }
+
+    public EditableFeatureType getFeatureType() {
+        return getProvider().getFeatureType();
+    }
+
+    public NewFeatureStoreParameters getNewStoreParameters() {
+        return getProvider().getNewStoreParameters();
+    }
+
+    public DataStoreParameters getOpenStoreParameters() {
+        return getProvider().getOpenStoreParameters();
+    }
+
+    public List<String> getTypes() {
+        List<String> types = new ArrayList<String>();
+        List<NewLayerProviderFactory> providers = getProviderFactories();
+        Iterator<NewLayerProviderFactory> it = providers.iterator();
+        while (it.hasNext()) {
+            NewLayerProviderFactory newLayerProviderFactory = it.next();
+            types.add(newLayerProviderFactory.getName());
+        }
+        return types;
+    }
+
+    public String getType() {
+        return this.type.getName();
+    }
+
+    public void addLayerToView(boolean b) {
+        this.addLayerToView = b;
+    }
+
+    public MapContext getMapContext() {
+        return mapContext;
+    }
+
+    public void setProviderFactory(NewLayerProviderFactory type) {
+        this.type = type;
+        this.provider = type.create(this);
+    }
+
+    public NewLayerProviderFactory getProviderFactory() {
+        return type;
+    }
+
+    public List<NewLayerProviderFactory> getProviderFactories() {
+
+        List<NewLayerProviderFactory> providers =
+            new ArrayList<NewLayerProviderFactory>(
+                this.newLayerManager
+                    .getProviders(NewLayerManager.STORETYPE.ANY));
+
+        for (Iterator<NewLayerProviderFactory> iterator = providers.iterator(); iterator
+            .hasNext();) {
+            NewLayerProviderFactory newLayerProviderFactory = iterator.next();
+            if (!newLayerProviderFactory.isEnabled()) {
+                iterator.remove();
+            }
+        }
+
+        return providers;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerWizard.java	(revision 42196)
@@ -0,0 +1,240 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl;
+
+import java.awt.Dimension;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+import jwizardcomponent.JWizardComponents;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerException;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.newlayer.NewLayerProviderPanel;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.NewLayerServiceException;
+import org.gvsig.newlayer.NewLayerWizard;
+
+public class DefaultNewLayerWizard extends NewLayerWizard {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -5827106636136663823L;
+	private NewLayerService service;
+	private AddNewLayerQuestionPanel addNewLayerQuestionPanel;
+	private static final Logger LOG =
+        LoggerFactory.getLogger(DefaultNewLayerWizard.class);
+
+	public DefaultNewLayerWizard(ImageIcon logo, NewLayerService service) {
+		super(logo);
+		setPreferredSize(new Dimension(800, 400));
+		this.service = service;
+		this.getWizardComponents().setFinishAction(
+				new MyFinishAction(this.getWizardComponents()));
+		this.getWizardComponents().setCancelAction(
+				new MyCancelAction(this.getWizardComponents()));
+		this.createTypeSelector();
+		
+		// ================ disable at the start
+        this.setFinishButtonEnabled(false);
+        this.setBackButtonEnabled(false);
+        this.setNextButtonEnabled(false);
+	}
+
+	public NewLayerService getService() {
+		return this.service;
+	}
+
+	private void createTypeSelector() {
+
+		TypeSelectorPanel panel = new TypeSelectorPanel(this);
+		this.addOptionPanel(panel);
+
+	}
+
+	private void createFeatureTypePanel() {
+	    
+		FeatureTypePanel panel = new FeatureTypePanel(service);
+		this.addOptionPanel(panel);
+	}
+
+	private void createProviderPanels() {
+		DefaultJWizardComponents wizardComponents = this.getWizardComponents();
+		for (int i = wizardComponents.getWizardPanelList().size() - 1; i >= 1; i--) {
+			wizardComponents.removeWizardPanel(i);
+		}
+		List<NewLayerProviderPanel> panels = service.getProvider().getPanels();
+		Iterator<NewLayerProviderPanel> it = panels.iterator();
+		while (it.hasNext()) {
+			NewLayerProviderPanel panel = it.next();
+			this.addOptionPanel(new OptionPanelWrapper(panel));
+		}
+		this.createFeatureTypePanel();
+		this.createAddNewLayerQuestionPanel();
+	}
+
+	private AddNewLayerQuestionPanel getAddNewLayerQuestionPanel() {
+		if (this.addNewLayerQuestionPanel == null) {
+			this.addNewLayerQuestionPanel = new AddNewLayerQuestionPanel(this);
+		}
+		return this.addNewLayerQuestionPanel;
+	}
+
+	private void createAddNewLayerQuestionPanel() {
+		this.addOptionPanel(getAddNewLayerQuestionPanel());
+	}
+
+	private boolean getAddLayerToView() {
+		return getAddNewLayerQuestionPanel().getAddLayerToView();
+	}
+
+	@Override
+    public void setType(NewLayerProviderFactory currentType) {
+        this.service.setProviderFactory(currentType);
+		createProviderPanels();
+	}
+
+	private class OptionPanelWrapper implements OptionPanel {
+
+		private NewLayerProviderPanel panel;
+
+		public OptionPanelWrapper(NewLayerProviderPanel panel) {
+			this.panel = panel;
+		}
+
+		public String getPanelTitle() {
+			return this.panel.getTitle();
+		}
+
+		public void nextPanel() throws NotContinueWizardException {
+
+		    try {
+    			if (!this.panel.isValidPanel()) {
+    				throw new NotContinueWizardException("Error validating the form", panel, false);
+    			}
+		    } catch (NewLayerException e) {
+                LOG.info("Error validating the form", e);
+                throw new NotContinueWizardException("Error validating the form",
+                    e, panel);
+            }
+		}
+
+		public void lastPanel() {
+		}
+
+		public void updatePanel() {
+			this.panel.updatePanel();
+		}
+
+		public JPanel getJPanel() {
+			return this.panel;
+		}
+
+	}
+
+	private class MyFinishAction extends FinishAction {
+
+		public MyFinishAction(JWizardComponents arg0) {
+			super(arg0);
+		}
+
+		public void performAction() {
+
+			if (getService().getStoreName() == null) {
+				JOptionPane
+				.showMessageDialog(
+						null,
+						Messages.getText("new_layer_not_store_name"),
+						Messages.getText("new_layer"),
+						JOptionPane.WARNING_MESSAGE);
+				return;
+			}
+			if (getService().getNewStoreParameters() == null) {
+				JOptionPane
+				.showMessageDialog(
+						null,
+						Messages.getText("new_layer_parameters_missing"),
+						Messages.getText("new_layer"),
+						JOptionPane.WARNING_MESSAGE);
+				return;
+			}
+			getService().addLayerToView(getAddLayerToView());
+			try {
+				getService().createLayer();
+			} catch (NewLayerServiceException e) {
+				LOG.info("Cannot create the new layer", e);
+				JOptionPane
+				.showMessageDialog(
+						null,
+						Messages.getText("cant_create_new_layer") + "\n" + e.getMessageStack(),
+						Messages.getText("new_layer"),
+						JOptionPane.ERROR_MESSAGE);
+				return;
+			}
+			
+			try {
+				getService().loadLayer();
+			} catch (NewLayerServiceException e) {
+				JOptionPane
+				.showMessageDialog(
+						null,
+						"The new layer has been succesfully created but can't load the new layer.\n Try load it yourshelf, please.",
+						"Can't create a new layer",
+						JOptionPane.WARNING_MESSAGE);
+			}
+			setVisible(false);
+			return;
+		}
+
+	}
+
+	private class MyCancelAction extends CancelAction {
+
+		public MyCancelAction(DefaultJWizardComponents wizardComponents) {
+			super(wizardComponents);
+		}
+
+		public void performAction() {
+			setVisible(false);
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/FeatureTypePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/FeatureTypePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/FeatureTypePanel.java	(revision 42196)
@@ -0,0 +1,1292 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.UIManager;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableModel;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.app.gui.panels.CRSSelectPanel;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class FeatureTypePanel extends JPanel implements OptionPanel {
+    private static final int COLUMN_FIELD = 0;
+    private static final int COLUMN_TYPE = 1;
+    private static final int COLUMN_LENGTH = 2;
+    private static final int COLUMN_GEOMETRYTYPE = 3;
+    private static final int COLUMN_GEOMETRYSUBTYPE = 4;
+    private static final int COLUMN_CRS = 5;
+    private static final int COLUMN_PRIMARYKEY = 6;
+    private static final int COLUMN_MANDATORY = 7;
+ 
+	private static final long serialVersionUID = 263541873998597624L;
+	
+    private FeatureType defaultFeatType = null;
+    
+    private NewLayerService newLayer_Service = null;
+    private int inDefaultFeatTypeFieldCount = 0;
+	private String inStoreName = null;
+	private IProjection inProjection = null;
+	private FeatureStoreProviderFactory spFactory = null;
+	private boolean defaultHasGeometry = false;
+	
+	private static final Logger logger = LoggerFactory
+			.getLogger(FeatureTypePanel.class);
+
+	private JLabel jLabel = null;
+	private JScrollPane jScrollPane = null;
+	protected JTable jTable = null;
+	private JPanel jPanelEast = null;
+	private JButton addFieldButton = null;
+	private JButton deleteFieldButton = null;
+	protected int MAX_FIELD_LENGTH = 254;
+	
+	// we dont need this list
+	// we'll clear and rebuild featureType each time
+	// the user clicks next
+	// private List removedFields;
+
+	// private DataServerExplorer explorer = null;
+
+	public FeatureTypePanel(NewLayerService new_layer_service) {
+	    
+	    /*
+	    service.getFeatureType(),
+        service.getStoreName(),
+        service.getMapContext().getProjection();
+        */
+	    newLayer_Service = new_layer_service;
+	}
+	
+	private boolean fieldsInited = false;
+	
+	private void initFields() {
+	    
+	    if (newLayer_Service == null) {
+	        return;
+	    }
+	    
+	    fieldsInited = true;
+	    
+        inStoreName = newLayer_Service.getStoreName();
+        inProjection = newLayer_Service.getMapContext().getProjection();
+        
+        DataStoreProviderFactory dspf =
+                DALLocator.getDataManager().getStoreProviderFactory(inStoreName);
+        spFactory = (FeatureStoreProviderFactory) dspf;
+        defaultFeatType = spFactory.createDefaultFeatureType();
+        if (defaultFeatType != null) {
+            inDefaultFeatTypeFieldCount =
+                defaultFeatType.getAttributeDescriptors().length; 
+            int def_geom_fld_index = defaultFeatType.getDefaultGeometryAttributeIndex(); 
+            if (def_geom_fld_index >= 0 &&
+                def_geom_fld_index < inDefaultFeatTypeFieldCount &&
+                defaultFeatType.
+                getAttributeDescriptor(def_geom_fld_index).
+                getDataType().getType() == DataTypes.GEOMETRY) {
+                
+                defaultHasGeometry = true;
+            }
+        }
+	}
+
+	private void initializeComponents() {
+		jLabel = new JLabel();
+		jLabel.setText(Messages.getText("define_fields"));
+		this.setLayout(new BorderLayout(5, 5));
+		this.setSize(new java.awt.Dimension(499, 232));
+		this.add(jLabel, java.awt.BorderLayout.NORTH);
+		this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+		this.add(getJPanelSouth(), java.awt.BorderLayout.SOUTH);
+
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 * 
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getJTable());
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jTable
+	 * 
+	 * @return javax.swing.JTable
+	 */
+	private JTable getJTable() {
+		if (jTable == null) {
+			jTable = new JTable(){
+			    public boolean isCellEditable(int row,int column){
+			        
+			        
+			        if (row < inDefaultFeatTypeFieldCount) {
+			            // default fields
+			            Object o = getValueAt(row,COLUMN_TYPE);  
+			            if (o instanceof ComboItemDataType) {
+			                
+			                ComboItemDataType ot = (ComboItemDataType) o;
+			                return (ot.dataType.getType() == DataTypes.GEOMETRY)
+			                    &&
+			                    (column == COLUMN_GEOMETRYTYPE ||
+		                        column == COLUMN_GEOMETRYSUBTYPE);
+			                
+			            } else {
+			                return false;
+			            }
+			            
+			        } else {
+			            // fields added by user
+			            if (column == COLUMN_PRIMARYKEY) {
+			                return spFactory.allowsPrimaryKeyAttributes();
+			            }
+
+			            if (column == COLUMN_MANDATORY) {
+			                return spFactory.allowsMandatoryAttributes();
+			            }
+			            
+			            if (column == COLUMN_LENGTH) {
+			                
+			                Object o = getValueAt(row,COLUMN_TYPE);  
+	                        if (o instanceof ComboItemDataType) {
+	                            
+	                            ComboItemDataType ot = (ComboItemDataType) o;
+	                            return dataTypeNeedsSize(ot.dataType.getType());
+	                            
+	                        } else {
+	                            return false;
+	                        }
+			                
+			            }
+
+			            if (defaultHasGeometry &&
+			                (column == COLUMN_GEOMETRYTYPE
+                            || column == COLUMN_GEOMETRYSUBTYPE
+                            || column == COLUMN_CRS)) {
+			                // geom-related columns not editable
+			                return false;
+			            } else {
+	                        return true;
+			            }
+			        }
+
+			        /*
+			        if ((column == COLUMN_GEOMETRYTYPE) ||
+			            (column == COLUMN_GEOMETRYSUBTYPE) ||
+			            (column == COLUMN_CRS)) {
+			            DataType dataType = 
+			                ((ComboItemDataType) getValueAt(row, COLUMN_TYPE)).dataType;			           
+			            return dataType.getType() == DataTypes.GEOMETRY;
+			        }
+			        */
+			    }  
+			};
+
+			DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
+			
+			tm.addColumn(Messages.getText("_Name"));
+			tm.addColumn(Messages.getText("type"));
+			tm.addColumn(Messages.getText("length"));
+			tm.addColumn(Messages.getText("_Geometry_type"));
+			tm.addColumn(Messages.getText("_Dimensions"));
+			tm.addColumn(Messages.getText("CRS"));
+			tm.addColumn("PK");
+			tm.addColumn(Messages.getText("_Mandatory_(short_text)"));
+
+			// Ask to be notified of selection changes.
+			ListSelectionModel rowSM = jTable.getSelectionModel();
+			rowSM.addListSelectionListener(new ListSelectionListener() {
+				public void valueChanged(ListSelectionEvent e) {
+					// Ignore extra messages.
+					if (e.getValueIsAdjusting())
+						return;
+
+					ListSelectionModel lsm = (ListSelectionModel) e.getSource();
+					if (lsm.isSelectionEmpty()) {
+						// no rows are selected
+						deleteFieldButton.setEnabled(false);
+					} else {
+					    int min_sele = lsm.getMinSelectionIndex(); 
+	                    if (min_sele > -1 &&
+	                        min_sele < inDefaultFeatTypeFieldCount) {
+	                        deleteFieldButton.setEnabled(false);
+	                    } else {
+	                        deleteFieldButton.setEnabled(allowEditableFeatureType());
+	                    }
+					}		
+					
+				}
+			});
+			jTable.getColumnModel().getColumn(0).setPreferredWidth(100);
+			// PK column
+            jTable.getColumnModel().getColumn(6).setPreferredWidth(30);
+            // Oblig column
+            jTable.getColumnModel().getColumn(7).setPreferredWidth(50);
+
+			jTable.getModel().addTableModelListener(new TableModelListener() {                
+                public void tableChanged(TableModelEvent e) {
+                    if (e.getColumn() == COLUMN_TYPE){
+                        jTable.repaint();
+                    }                    
+                }
+            });
+			
+
+			if (!fieldsInited) {
+			    initFields();
+			}
+
+			// Rellenado de la tabla
+			if (defaultFeatType != null) {
+
+				Iterator it = defaultFeatType.iterator();
+				boolean some_error = false;
+				while (it.hasNext()) {
+					FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) it
+							.next();
+
+                    if (!addRowToFieldTable(
+                        jTable,
+                        null,
+                        inProjection,
+                        descriptor)) {
+                        
+                        some_error = true;
+                    }
+                    /*
+					tm.setValueAt(descriptor.getName(), row, COLUMN_FIELD);
+					tm.setValueAt(descriptor.getType(), row, COLUMN_TYPE);
+					tm.setValueAt(descriptor.getSize(), row, COLUMN_LENGTH);
+					tm.setValueAt(descriptor.getGeometryType(), row, COLUMN_GEOMETRYTYPE);
+					tm.setValueAt(descriptor.getGeometrySubType(), row, COLUMN_GEOMETRYSUBTYPE);
+					tm.setValueAt(descriptor.getSRS(), row, COLUMN_CRS);
+					tm.setValueAt(descriptor.isPrimaryKey(), row, COLUMN_PRIMARYKEY);
+					tm.setValueAt(descriptor.isMandatory(), row, COLUMN_MANDATORY);
+					*/
+				}
+				
+				if (some_error) {
+                    String tit = Messages.getText("_Default_fields");
+                    String msg = Messages.getText("_Unable_to_add_fields");
+                    JOptionPane.showMessageDialog(
+                        jTable, msg, tit,
+                        JOptionPane.ERROR_MESSAGE);
+				}
+			}
+
+		}
+		jTable.setEnabled(allowEditableFeatureType());
+		return jTable;
+	}
+
+	/**
+	 * This method initializes jPanelWest
+	 * 
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelSouth() {
+		if (jPanelEast == null) {
+			jPanelEast = new JPanel();
+			jPanelEast.setLayout(new BorderLayout());
+			
+			JPanel south_east = new JPanel(new GridBagLayout());
+			// south_east.setPreferredSize(new java.awt.Dimension(170, 50));
+			GridBagConstraints c = new GridBagConstraints();
+			c.fill = GridBagConstraints.HORIZONTAL;
+			c.insets = new Insets(8,10,8,0);  //top padding
+			c.gridx = 0;       
+			c.gridwidth = 1;   
+			c.gridy = 0;       
+			south_east.add(getJButtonAddField(), c);
+            c.gridx = 1;       
+			south_east.add(getJButtonDeleteField(), c);
+			
+			jPanelEast.add(south_east, BorderLayout.EAST);
+		}
+		return jPanelEast;
+	}
+
+	/**
+	 * This method initializes jButtonAddField
+	 * 
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButtonAddField() {
+		if (addFieldButton == null) {
+		    addFieldButton = new JButton();
+		    addFieldButton.setText(Messages.getText("add_field"));
+		    addFieldButton.setLocation(new java.awt.Point(7, 5));
+		    addFieldButton.setSize(new java.awt.Dimension(180, 23));
+		    addFieldButton.setPreferredSize(new java.awt.Dimension(180, 23));
+		    addFieldButton
+					.addActionListener(new java.awt.event.ActionListener() {
+						public void actionPerformed(java.awt.event.ActionEvent e) {
+							DefaultTableModel tm = (DefaultTableModel) jTable
+									.getModel();
+
+							// Figure out a suitable field name
+							ArrayList fieldNames = new ArrayList();
+							for (int i = 0; i < jTable.getRowCount(); i++) {
+								fieldNames.add(tm.getValueAt(i, COLUMN_FIELD));
+							}
+							String[] currentFieldNames = (String[]) fieldNames
+									.toArray(new String[0]);
+							String newField = Messages.getText("field")
+									.replaceAll(" +", "_");
+							int index = 0;
+							for (int i = 0; i < currentFieldNames.length; i++) {
+								if (currentFieldNames[i].startsWith(newField)) {
+									try {
+										index = Integer
+												.parseInt(currentFieldNames[i]
+														.replaceAll(newField,
+																""));
+									} catch (Exception ex) { /* we don't care */
+									}
+								}
+							}
+							String newFieldName = newField + (++index);
+
+							// Esto lo a�ado aqu� porque si no tiene registros,
+							// no hace caso. (Por eso no
+							// lo pongo en getJTable()
+							if (!addRowToFieldTable(
+							    jTable,
+							    newFieldName,
+							    inProjection,
+							    null)) {
+							    
+	                            String tit = Messages.getText("_Default_fields");
+	                            String msg = Messages.getText("_Unable_to_add_fields");
+	                            JOptionPane.showMessageDialog(
+	                                jTable, msg, tit,
+	                                JOptionPane.ERROR_MESSAGE);
+							}
+						}
+					});
+
+		}
+		addFieldButton.setEnabled(allowEditableFeatureType());
+		return addFieldButton;
+	}
+	
+	private boolean allowEditableFeatureType(){
+	    
+	    if (!fieldsInited) {
+	        initFields();
+	    }
+
+		DataManager dataManager = DALLocator.getDataManager();
+		FeatureStoreProviderFactory factory =
+		    (FeatureStoreProviderFactory) dataManager.
+		    getStoreProviderFactory(inStoreName);
+		if (factory.allowEditableFeatureType()==FeatureStoreProviderFactory.NO) {
+			return false;
+		}
+		return true;
+	}
+
+	private class ComboItemDataType {
+		private DataType dataType;
+
+		public ComboItemDataType(DataType dataType) {
+			this.dataType = dataType;
+		}
+
+		@Override
+		public String toString() {
+			return this.dataType.getName();
+		}
+	}
+
+	private class ComboModelDataType implements ComboBoxModel {
+
+		private List<ComboItemDataType> dataTypes;
+		private ComboItemDataType selected;
+
+		public ComboModelDataType(List<DataType> dataTypes, int sel_type) {
+		    
+			this.dataTypes = new ArrayList<ComboItemDataType>();
+			ComboItemDataType item = null;
+			for (Iterator iterator = dataTypes.iterator(); iterator.hasNext();) {
+				DataType dataType = (DataType) iterator.next();
+				item = new ComboItemDataType(dataType);
+				this.dataTypes.add(item);
+				if (sel_type == dataType.getType()) {
+				    this.setSelectedItem(item);
+				}
+			}
+		}
+
+		public void addListDataListener(ListDataListener arg0) {
+			// DO NOTHING
+		}
+
+		public Object getElementAt(int arg0) {
+			return this.dataTypes.get(arg0);
+		}
+
+		public int getSize() {
+			return this.dataTypes.size();
+		}
+
+		public void removeListDataListener(ListDataListener arg0) {
+			// DO NOTHING
+		}
+
+		public Object getSelectedItem() {
+			return this.selected;
+		}
+
+		public void setSelectedItem(Object anItem) {
+			this.selected = (ComboItemDataType) anItem;
+		}
+
+	}
+
+	class CrsRenderer extends JButton implements TableCellRenderer {
+		private static final long serialVersionUID = -573793294070515376L;
+		private JLabel label = null;
+		
+		public CrsRenderer() {
+			setOpaque(true);
+			label = new JLabel(Messages.getText("not_applicable"));
+			this.setMargin(new Insets(2, 0, 2, 0));
+			this.setFont(this.getFont().deriveFont(9f));
+		}
+
+		public Component getTableCellRendererComponent(JTable table,
+				Object value, boolean isSelected, boolean hasFocus, int row,
+				int column) {
+			
+		    ComboItemDataType item =
+		        (ComboItemDataType) table.getValueAt(row, COLUMN_TYPE);
+		    
+		    if (item == null) {
+		        // happens sometimes. perhaps an early rendering?
+		        return new JLabel();
+		    }
+		    
+		    DataType dataType = item.dataType;                       
+                        
+            if (dataType.getType() != DataTypes.GEOMETRY) {                
+                return label;
+            }
+		    
+		    if (isSelected) {
+				setForeground(table.getSelectionForeground());
+				setBackground(table.getSelectionBackground());
+			} else {
+				setForeground(table.getForeground());
+				setBackground(UIManager.getColor("Button.background"));
+			}
+			setText((value == null) ? "" : ((IProjection) value).getFullCode());
+			return this;
+		}
+	}	
+	   
+    private class GeometryComboCellRenderer extends JLabel implements TableCellRenderer{
+
+        public Component getTableCellRendererComponent(JTable table,
+            Object value, boolean isSelected, boolean hasFocus, int row,
+            int column) {                     
+
+            ComboItemDataType item = (ComboItemDataType) table.getValueAt(row, COLUMN_TYPE);
+            DataType dataType = item.dataType;                       
+                        
+            if (dataType.getType() == DataTypes.GEOMETRY) {
+                ComboItemGeomType geomType = (ComboItemGeomType)value;
+                if (geomType != null) {            
+                    this.setText(geomType.toString());
+                }
+            } else {
+               this.setText(Messages.getText("not_applicable"));
+            }
+            
+            return this;
+        }
+        
+    }
+
+	class ButtonEditor extends DefaultCellEditor {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = -2820892672026188802L;
+
+		protected JButton button;
+
+		private String label;
+
+		private boolean isPushed;
+
+		private Object value;
+
+		public ButtonEditor(JCheckBox checkBox) {
+			super(checkBox);
+			button = new JButton();
+			button.setOpaque(true);
+			button.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					fireEditingStopped();
+				}
+			});
+		}
+
+		public Component getTableCellEditorComponent(JTable table,
+				Object value, boolean isSelected, int row, int column) {
+			if (isSelected) {
+				button.setForeground(table.getSelectionForeground());
+				button.setBackground(table.getSelectionBackground());
+			} else {
+				button.setForeground(table.getForeground());
+				button.setBackground(table.getBackground());
+			}
+			label = (value == null) ? "" : ((IProjection) value).getFullCode();// .toString();
+			button.setText(label);
+			isPushed = true;
+			this.value = value;
+			return button;
+		}
+
+		public Object getCellEditorValue() {
+			IProjection curProj = (IProjection) this.value;
+			if (isPushed) {
+				ISelectCrsPanel csSelect = CRSSelectPanel.getUIFactory()
+						.getSelectCrsPanel(curProj, true);
+				WindowManager wm = ToolsSwingLocator.getWindowManager();
+				wm.showWindow((JPanel) csSelect, "Projection",
+						WindowManager.MODE.DIALOG);
+				curProj = csSelect.getProjection();
+			}
+			isPushed = false;
+			return curProj;
+		}
+
+		public boolean stopCellEditing() {
+			isPushed = false;
+			return super.stopCellEditing();
+		}
+
+		protected void fireEditingStopped() {
+			super.fireEditingStopped();
+		}
+	}
+
+	private class ComboItemGeomType {
+		private int type;
+		private String name;
+
+		public ComboItemGeomType(String name, int type) {
+			this.type = type;
+			this.name = name;
+		}
+
+		@Override
+		public String toString() {
+			return this.name;
+		}
+		
+		public int getGeomType() {
+		    return type;
+		}
+	}
+
+	private class ComboModelGeomType implements ComboBoxModel {
+
+		private List<ComboItemGeomType> geomTypes;
+		private ComboItemGeomType selected;
+
+		public ComboModelGeomType(
+		    List<ComboItemGeomType> geomTypes, int sel_geom_type) {
+		    
+			this.geomTypes = geomTypes;
+			int len = geomTypes.size();
+			ComboItemGeomType item = null;
+			for (int i=0; i<len; i++) {
+			    item = geomTypes.get(i);
+			    if (item.getGeomType() == sel_geom_type) {
+			        setSelectedItem(item);
+			    }
+			}
+		}
+
+		public void addListDataListener(ListDataListener arg0) {
+			// DO NOTHING
+		}
+
+		public Object getElementAt(int arg0) {
+			return this.geomTypes.get(arg0);
+		}
+
+		public int getSize() {
+			return this.geomTypes.size();
+		}
+
+		public void removeListDataListener(ListDataListener arg0) {
+			// DO NOTHING
+		}
+
+		public Object getSelectedItem() {
+			return this.selected;
+		}
+
+		public void setSelectedItem(Object anItem) {
+			this.selected = (ComboItemGeomType) anItem;
+		}
+
+	}
+
+	private List<ComboItemGeomType> getGeomTypes() {
+		List<ComboItemGeomType> geomTypes = new ArrayList<ComboItemGeomType>();
+		geomTypes
+				.add(new ComboItemGeomType("GEOMETRY", Geometry.TYPES.GEOMETRY));
+		geomTypes.add(new ComboItemGeomType("POINT", Geometry.TYPES.POINT));
+		geomTypes.add(new ComboItemGeomType("CURVE", Geometry.TYPES.CURVE));
+		geomTypes.add(new ComboItemGeomType("SURFACE", Geometry.TYPES.SURFACE));
+		geomTypes.add(new ComboItemGeomType("SOLID", Geometry.TYPES.SOLID));
+		geomTypes.add(new ComboItemGeomType("AGGREGATE",
+				Geometry.TYPES.AGGREGATE));
+		geomTypes.add(new ComboItemGeomType("MULTIPOINT",
+				Geometry.TYPES.MULTIPOINT));
+		geomTypes.add(new ComboItemGeomType("MULTICURVE",
+				Geometry.TYPES.MULTICURVE));
+		geomTypes.add(new ComboItemGeomType("MULTISURFACE",
+				Geometry.TYPES.MULTISURFACE));
+		geomTypes.add(new ComboItemGeomType("MULTISOLID",
+				Geometry.TYPES.MULTISOLID));
+
+		return geomTypes;
+	}
+
+	private List<ComboItemGeomType> getGeomSubtypes() {
+		List<ComboItemGeomType> geomSubtypes = new ArrayList<ComboItemGeomType>();
+		geomSubtypes.add(new ComboItemGeomType("GEOM2D",
+				Geometry.SUBTYPES.GEOM2D));
+		geomSubtypes.add(new ComboItemGeomType("GEOM2DM",
+				Geometry.SUBTYPES.GEOM2DM));
+		geomSubtypes.add(new ComboItemGeomType("GEOM3D",
+				Geometry.SUBTYPES.GEOM3D));
+		geomSubtypes.add(new ComboItemGeomType("GEOM3DM",
+				Geometry.SUBTYPES.GEOM3DM));
+		geomSubtypes.add(new ComboItemGeomType("UNKNOWN",
+				Geometry.SUBTYPES.UNKNOWN));
+		return geomSubtypes;
+	}
+
+	class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 5093448776058027505L;
+
+		public CheckBoxRenderer() {
+			setHorizontalAlignment(JLabel.CENTER);
+		}
+
+		public Component getTableCellRendererComponent(JTable table,
+				Object value, boolean isSelected, boolean hasFocus, int row,
+				int column) {
+			if (isSelected) {
+				setForeground(table.getSelectionForeground());
+				setBackground(table.getSelectionBackground());
+			} else {
+				setForeground(table.getForeground());
+				setBackground(table.getBackground());
+			}
+			setSelected((value != null && ((Boolean) value).booleanValue()));
+			return this;
+		}
+	}
+
+	/**
+	 * This method initializes jButton
+	 * 
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButtonDeleteField() {
+		if (deleteFieldButton == null) {
+		    deleteFieldButton = new JButton();
+		    deleteFieldButton.setText(Messages.getText("delete_field"));
+		    deleteFieldButton.setLocation(new java.awt.Point(7, 33));
+		    deleteFieldButton.setSize(new java.awt.Dimension(180, 23));
+		    deleteFieldButton.setPreferredSize(new java.awt.Dimension(180, 23));
+		    deleteFieldButton.setEnabled(false);
+		    deleteFieldButton
+					.addActionListener(new java.awt.event.ActionListener() {
+						public void actionPerformed(java.awt.event.ActionEvent e) {
+							int[] selecteds = jTable.getSelectedRows();
+							DefaultTableModel tm = (DefaultTableModel) jTable
+									.getModel();
+
+							for (int i = selecteds.length - 1; i >= 0; i--) {
+							    /*
+							     * 
+								removedFields.add((String) tm.getValueAt(i, 0));
+                                 */
+								tm.removeRow(selecteds[i]);
+							}
+						}
+					});
+		}
+		deleteFieldButton.setEnabled(false);
+		return deleteFieldButton;
+	}
+
+	public String getPanelTitle() {
+		return Messages.getText("_Field_definitions");
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		if (allowEditableFeatureType()){
+			fillFeatureType();
+		}
+	}
+
+	private void fillFeatureType() throws NotContinueWizardException {
+	    
+	    if (!fieldsInited) {
+	        initFields();
+	    }
+
+		/*
+		 * Coge los datos del formulario y los guarda en
+		 * this.service.getFeatureType()
+		 */
+
+	    EditableFeatureType edft = newLayer_Service.getFeatureType();
+
+		// Clean and rebuild featureType everytime we click next
+		removeAllFields(edft);
+		edft.setDefaultGeometryAttributeName(null);
+
+		GeometryManager gm = GeometryLocator.getGeometryManager();
+		DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
+		
+		for (int i = 0; i < tm.getRowCount(); i++) {
+			DataType dataType = ((ComboItemDataType) tm.getValueAt(i, COLUMN_TYPE)).dataType;
+
+			int fieldLength = 20;
+			if (dataTypeNeedsSize(dataType.getType())) {
+	            fieldLength = 
+	                Integer.parseInt((String) tm.getValueAt(i, COLUMN_LENGTH));
+			}
+
+			EditableFeatureAttributeDescriptor efad1 =
+			    edft.add(
+					(String) tm.getValueAt(i, COLUMN_FIELD), dataType.getType(),
+					fieldLength);
+
+			if (dataType.getType() == DataTypes.DOUBLE ||
+			    dataType.getType() == DataTypes.FLOAT) {
+			    // TODO Improve this?
+			    // Half of the size dedicated
+			    // to precision (at least 1) 
+	            efad1.setPrecision(Math.max(1, fieldLength/2));
+			}
+
+			if (dataType.getType() == DataTypes.GEOMETRY) {
+			    
+                int g_type = ((ComboItemGeomType) tm.getValueAt(i, COLUMN_GEOMETRYTYPE)).type;
+                int g_subtype = ((ComboItemGeomType) tm.getValueAt(i, COLUMN_GEOMETRYSUBTYPE)).type;
+			    
+			    GeometryType gty = null;
+			    
+			    try {
+                    gty = gm.getGeometryType(g_type, g_subtype);
+                    efad1.setGeometryType(gty);
+                    // efad1.setGeometryType(g_type);
+			    } catch (Exception ex) {
+                    String _msg = Messages.getText("_Invalid_geometry_type")
+                        + " (" + g_type + ", " + g_subtype + ")";
+			        throw new NotContinueWizardException(_msg, ex, this);
+			    }
+				
+				efad1.setSRS((IProjection) tm.getValueAt(i, COLUMN_CRS));
+				
+				//If there is not a previous default geometry field, add it
+				// this will set the first geometry field
+				// as the default geometry field
+				if (edft.getDefaultGeometryAttribute() == null){
+				    edft.setDefaultGeometryAttributeName(efad1.getName());
+				}	
+			}
+			
+			// pk and mandatory
+            efad1.setIsPrimaryKey(((Boolean) tm.getValueAt(i, COLUMN_PRIMARYKEY))
+                .booleanValue());
+            efad1.setAllowNull(!((Boolean) tm.getValueAt(i, COLUMN_MANDATORY))
+                .booleanValue());
+
+		}
+	}
+
+	/**
+     * @param featureType
+     */
+    private void removeAllFields(EditableFeatureType ft) {
+        
+        FeatureAttributeDescriptor[] atts =  ft.getAttributeDescriptors();
+        int len = atts.length;
+        FeatureAttributeDescriptor item = null;
+        for (int i=0; i<len; i++) {
+            item = atts[i];
+            ft.remove(item.getName());
+        }
+    }
+
+    public void lastPanel() {
+		// TODO Auto-generated method stub
+		logger.info("FeatureTypePanel: lastPanel");
+	}
+
+	public void updatePanel() {
+		initializeComponents();
+
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+	
+	/**
+	 * If fad is null, it's an addition after user has clicked on 'Add field'.
+	 * If fad is not null, it's the description of a default field and the
+	 * field name will also be taken from there.
+	 * 
+	 * @param the_table
+	 * @param new_fld_name
+	 * @param the_projection
+	 * @param fad
+	 * 
+	 * @return true if field was actually added, false otherwise
+	 */
+    private boolean addRowToFieldTable(
+        JTable the_table,
+        String new_fld_name,
+        IProjection the_projection,
+        FeatureAttributeDescriptor fad) {
+        
+        if (fad == null && new_fld_name == null) {
+            logger.info("Error: unable to add field to table (no description and no name)");
+            return false;
+        }
+        
+        DefaultTableModel the_tm = (DefaultTableModel) the_table.getModel();
+        Object[] newRow = new Object[the_tm.getColumnCount()];
+        
+        /*
+        tm.setValueAt(descriptor.getName(), row, COLUMN_FIELD);
+        tm.setValueAt(descriptor.getType(), row, COLUMN_TYPE);
+        tm.setValueAt(descriptor.getSize(), row, COLUMN_LENGTH);
+        tm.setValueAt(descriptor.getGeometryType(), row, COLUMN_GEOMETRYTYPE);
+        tm.setValueAt(descriptor.getGeometrySubType(), row, COLUMN_GEOMETRYSUBTYPE);
+        tm.setValueAt(descriptor.getSRS(), row, COLUMN_CRS);
+        tm.setValueAt(descriptor.isPrimaryKey(), row, COLUMN_PRIMARYKEY);
+        tm.setValueAt(descriptor.isMandatory(), row, COLUMN_MANDATORY);
+        */
+        
+        // =============================== name
+        if (fad == null) {
+            newRow[COLUMN_FIELD] = new_fld_name;
+        } else {
+            newRow[COLUMN_FIELD] = fad.getName();
+        }
+        // ===================================== field type
+        TableColumn typeColumn = the_table.getColumnModel().getColumn(COLUMN_TYPE);
+        List supp_types = spFactory.getSupportedDataTypes();
+        
+        DataManager daman = DALLocator.getDataManager();
+        List all_types = daman.getDataTypes();
+        
+        
+        ComboModelDataType model = null;
+        if (fad == null) {
+
+            // this is a user defined column, remove geometry if in default feattype 
+            if (defaultHasGeometry) {
+                supp_types = removeGeometryType(supp_types);
+                all_types = removeGeometryType(all_types);
+            }
+            
+            if (supp_types != null && supp_types.size() > 0) {
+                model = new ComboModelDataType(
+                    supp_types,
+                    ((DataType) supp_types.get(0)).getType());
+            } else {
+                model = new ComboModelDataType(
+                    all_types,
+                    ((DataType) all_types.get(0)).getType());
+            }
+        } else {
+            model = new ComboModelDataType(supp_types, fad.getType());
+        }
+        
+        JComboBox comboBox = new JComboBox(model);
+        typeColumn.setCellEditor(new DefaultCellEditor(comboBox));
+        newRow[COLUMN_TYPE] = model.getSelectedItem();
+        
+        // ============================= width
+        TableColumn widthColumn =
+            the_table.getColumnModel().getColumn(COLUMN_LENGTH);
+        if (fad == null) {
+            newRow[COLUMN_LENGTH] = "20";
+        } else {
+            newRow[COLUMN_LENGTH] = "" + fad.getSize();
+        }
+        
+        SimpleTextCellRenderer stcr = new SimpleTextCellRenderer();
+        widthColumn.setCellEditor(new DefaultCellEditor(new JTextField()));
+        widthColumn.setCellRenderer(stcr);
+        
+        
+        // ============================= geom type
+        TableColumn geomTypeColumn =
+            the_table.getColumnModel().getColumn(COLUMN_GEOMETRYTYPE);
+        ComboModelGeomType geomTypeModel = null;
+        
+        List<ComboItemGeomType> supptd =
+            leaveSupportedGeomTypes(getGeomTypes(),
+                spFactory.getSupportedGeometryTypesSubtypes(), 0);
+        
+        if (fad == null) {
+            geomTypeModel = new ComboModelGeomType(
+                supptd, supptd.size() > 0 ? supptd.get(0).getGeomType() : -1);
+        } else {
+            geomTypeModel = new ComboModelGeomType(
+                supptd, fad.getGeomType().getType());
+        }
+        
+        JComboBox geomTypeComboBox = new JComboBox(geomTypeModel);
+        geomTypeColumn.setCellEditor(new DefaultCellEditor(geomTypeComboBox));
+        
+        GeometryComboCellRenderer gccr = new GeometryComboCellRenderer();
+        geomTypeColumn.setCellRenderer(gccr);
+        newRow[COLUMN_GEOMETRYTYPE] = geomTypeModel.getSelectedItem();
+        
+        // ============================= geom sub type
+
+        TableColumn geomSubTypeColumn =
+            the_table.getColumnModel().getColumn(COLUMN_GEOMETRYSUBTYPE);
+        ComboModelGeomType geomSubTypeModel = null;
+
+        supptd =
+            leaveSupportedGeomTypes(getGeomSubtypes(),
+                spFactory.getSupportedGeometryTypesSubtypes(), 1);
+        
+        if (fad == null) {
+            geomSubTypeModel = new ComboModelGeomType(
+                supptd, supptd.size() > 0 ? supptd.get(0).getGeomType() : -1);
+        } else {
+            geomSubTypeModel = new ComboModelGeomType(
+                supptd, fad.getGeomType().getSubType());
+        }
+        
+        JComboBox geomSubTypeComboBox = new JComboBox(geomSubTypeModel);
+        geomSubTypeColumn.setCellEditor(new DefaultCellEditor(
+            geomSubTypeComboBox));
+        geomSubTypeColumn.setCellRenderer(new GeometryComboCellRenderer());
+        newRow[COLUMN_GEOMETRYSUBTYPE] = geomSubTypeModel.getSelectedItem();
+
+        // ============================= CRS
+
+        TableColumn crsColumn = the_table.getColumnModel().getColumn(COLUMN_CRS);
+        crsColumn.setCellEditor(new ButtonEditor(new JCheckBox()));
+        CrsRenderer crsButtonRenderer = new CrsRenderer();
+        crsColumn.setCellRenderer(crsButtonRenderer);
+        newRow[COLUMN_CRS] = the_projection;
+
+        // ============================= PK
+
+        TableColumn primaryKeyColumn =
+            the_table.getColumnModel().getColumn(COLUMN_PRIMARYKEY);
+        JCheckBox primaryKeyCheckBox = new JCheckBox();
+        
+        if (fad == null) {
+            primaryKeyCheckBox.setSelected(false);
+        } else {
+            primaryKeyCheckBox.setSelected(fad.isPrimaryKey());
+        }
+
+        primaryKeyColumn.setCellEditor(
+            new DefaultCellEditor(primaryKeyCheckBox));
+        CheckBoxRenderer primaryKeyCheckBoxRenderer = new CheckBoxRenderer();
+        primaryKeyColumn.setCellRenderer(primaryKeyCheckBoxRenderer);
+        newRow[COLUMN_PRIMARYKEY] = primaryKeyCheckBox.isSelected();
+            
+        // ================================== mandatory
+        
+        TableColumn mandatoryColumn =
+            the_table.getColumnModel().getColumn(COLUMN_MANDATORY);
+        JCheckBox mandatoryCheckBox = new JCheckBox();
+        
+        if (fad == null) {
+            mandatoryCheckBox.setSelected(false);
+        } else {
+            mandatoryCheckBox.setSelected(fad.isMandatory());
+        }
+        
+        mandatoryColumn.setCellEditor(new DefaultCellEditor(mandatoryCheckBox));
+        CheckBoxRenderer mandatoryCheckBoxRenderer = new CheckBoxRenderer();
+        mandatoryColumn.setCellRenderer(mandatoryCheckBoxRenderer);
+        newRow[COLUMN_MANDATORY] = mandatoryCheckBox.isSelected();
+
+        // ==================================
+        
+        // Add a new row
+        the_tm.addRow(newRow);
+        return true;
+    }
+
+    /**
+     * @param supp_types
+     * @return
+     */
+    private List removeGeometryType(List dta_types) {
+        List resp = new ArrayList();
+        
+        int len = dta_types.size();
+        Object item_o = null;
+        DataType item_dt = null;
+        
+        for (int i=0; i<len; i++) {
+            item_o = dta_types.get(i);
+            if (item_o instanceof DataType) {
+                item_dt = (DataType) item_o;
+                if (item_dt.getType() != DataTypes.GEOMETRY) {
+                    resp.add(item_dt);
+                }
+            }
+        }
+        return resp;
+    }
+
+    private List<ComboItemGeomType> leaveSupportedGeomTypes(
+        List<ComboItemGeomType> all_types,
+        List<int[]> supported,
+        int index /* 0 for geom types, 1 for geom subtypes */) {
+        
+        if (supported == null) {
+            // all supported
+            return all_types;
+        }
+        
+        List<ComboItemGeomType> resp = new ArrayList<ComboItemGeomType>();
+        int len = all_types.size();
+        ComboItemGeomType item = null;
+        for (int i=0; i<len; i++) {
+            item = all_types.get(i);
+            if (isInNthElement(item.getGeomType(), supported, index)) {
+                resp.add(item);
+            }
+        }
+        return resp;
+    }
+
+
+    private boolean isInNthElement(int val, List<int[]> arr_list, int index) {
+        
+        int len = arr_list.size();
+        int[] item = null;
+        for (int i=0; i<len; i++) {
+            item = arr_list.get(i);
+            if (item != null && item.length > index && item[index] == val) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    private boolean dataTypeNeedsSize(int data_type) {
+        
+        if (data_type == DataTypes.FLOAT
+            || data_type == DataTypes.INT
+            || data_type == DataTypes.STRING) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    private class SimpleTextCellRenderer extends DefaultTableCellRenderer {
+
+        public SimpleTextCellRenderer() {
+            super();
+        }
+        /* (non-Javadoc)
+         * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
+         */
+        public Component getTableCellRendererComponent(
+            JTable table,
+            Object value, boolean isSelected, boolean hasFocus, int row,
+            int column) {
+            
+            TableModel tm = table.getModel();
+            Object new_val = "";            
+            Object type_obj = tm.getValueAt(row, COLUMN_TYPE);
+            if (type_obj instanceof ComboItemDataType) {
+                ComboItemDataType type_item = (ComboItemDataType) type_obj;
+                if (dataTypeNeedsSize(type_item.dataType.getType())) {
+                    new_val = getCurrentOr(value, "");
+                } else {
+                    new_val = Messages.getText("not_applicable");
+                }
+                return super.getTableCellRendererComponent(
+                    table, new_val, isSelected, hasFocus, row, column);
+            } else {
+                return super.getTableCellRendererComponent(
+                    table, value, isSelected, hasFocus, row, column);
+            }
+        }
+        
+        private Object getCurrentOr(Object v, String d) {
+            
+            if (v instanceof String) {
+                String parse_str = (String) v;
+                try {
+                    Integer.parseInt(parse_str);
+                    return v;
+                } catch (Exception ex) {
+                    // not a valid integer
+                    return d;
+                }
+            } else {
+                return v;
+            }
+        }
+
+    }
+
+    private class EnableLengthItemListener implements ItemListener {
+        
+        private TableModel theTableModel = null;
+        private JTable theTable = null;
+        
+        public EnableLengthItemListener(JTable t, boolean b) {
+            theTable = t;
+            theTableModel = t.getModel();
+        }
+        
+        public void itemStateChanged(final ItemEvent e) {
+            doUpdate(e);
+        }
+
+        public void doUpdate(ItemEvent e) {
+            
+            Object src_obj = e.getSource();
+            if (src_obj instanceof JComboBox) {
+                
+                // one of the field type combos has changed
+                int len = theTableModel.getRowCount();
+                Object type_obj = null;
+                ComboItemDataType type_item = null;
+                for (int i=0; i<len; i++) {
+                    type_obj = theTableModel.getValueAt(i, COLUMN_TYPE);
+                    if (type_obj instanceof ComboItemDataType) {
+                        type_item = (ComboItemDataType) type_obj;
+                        if (dataTypeNeedsSize(type_item.dataType.getType())) {
+                            theTableModel.setValueAt(
+                                "20",
+                                i, COLUMN_LENGTH);
+                        } else {
+                            theTableModel.setValueAt(
+                                Messages.getText("not_applicable"),
+                                i, COLUMN_LENGTH);
+                        }
+                    }
+                }
+                theTable.validate(); // .revalidate(); // .repaint();
+            }
+        }
+
+    }
+    
+    
+    
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/FeatureTypePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/preferences/DefaultNewLayerPreferencesComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/preferences/DefaultNewLayerPreferencesComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/preferences/DefaultNewLayerPreferencesComponent.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl.preferences;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.newlayer.preferences.NewLayerPreferencesComponent;
+
+/**
+ * Default implementation for the {@link NewLayerPreferencesComponent}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultNewLayerPreferencesComponent extends JPanel implements
+    NewLayerPreferencesComponent, ChangeListener {
+
+    private static final long serialVersionUID = -4392838062470171181L;
+
+    private JCheckBox[] providerChecks;
+    private List<NewLayerProviderFactory> providers;
+    private boolean valueChanged = false;
+
+    /**
+     * Creates a new DefaultNewLayerPreferencesComponent.
+     * 
+     * @see JPanel#JPanel()
+     */
+    public DefaultNewLayerPreferencesComponent() {
+        this(true);
+    }
+
+    /**
+     * Creates a new DefaultNewLayerPreferencesComponent.
+     * 
+     * @param isDoubleBuffered
+     *            a boolean, true for double-buffering, which
+     *            uses additional memory space to achieve fast, flicker-free
+     *            updates
+     * @see JPanel#JPanel(boolean)
+     */
+    public DefaultNewLayerPreferencesComponent(boolean isDoubleBuffered) {
+        super(isDoubleBuffered);
+        initialize();
+    }
+
+    private void initialize() {
+        this.setLayout(new GridBagLayout());
+
+        Insets insets = new Insets(1, 0, 1, 0);
+
+        GridBagConstraints gbc = new GridBagConstraints();
+        gbc.gridx = 0;
+        gbc.gridy = 1;
+        gbc.gridheight = 1;
+        gbc.gridwidth = GridBagConstraints.REMAINDER;
+        gbc.fill = GridBagConstraints.NONE;
+        gbc.anchor = GridBagConstraints.WEST;
+        gbc.weightx = 1.0f;
+        gbc.insets = insets;
+
+        providers =
+            new ArrayList<NewLayerProviderFactory>(NewLayerLocator.getManager()
+                .getProviders());
+        providerChecks = new JCheckBox[providers.size()];
+        for (int i = 0; i < providers.size(); i++) {
+            NewLayerProviderFactory factory = providers.get(i);
+            providerChecks[i] =
+                new JCheckBox(factory.getLabel(), factory.isEnabled());
+            providerChecks[i].addChangeListener(this);
+            providerChecks[i].setToolTipText(factory.getDescription());
+            add(providerChecks[i], gbc);
+            gbc.gridy++;
+        }
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public void initializeDefaults() {
+        for (int i = 0; i < providers.size(); i++) {
+            NewLayerProviderFactory factory = providers.get(i);
+            providerChecks[i].setSelected(factory.isEnabled());
+        }
+        valueChanged = false;
+        validate();
+    }
+
+    public Set<NewLayerProviderFactory> getDisabledProviders() {
+        Set<NewLayerProviderFactory> disabledFactories =
+            new HashSet<NewLayerProviderFactory>();
+
+        for (int i = 0; i < providerChecks.length; i++) {
+            if (!providerChecks[i].isSelected()) {
+                disabledFactories.add(providers.get(i));
+            }
+        }
+
+        return disabledFactories;
+    }
+
+    public boolean isValueChanged() {
+        return valueChanged;
+    }
+
+    public void setChangesApplied() {
+        valueChanged = false;
+    }
+
+    public void stateChanged(ChangeEvent e) {
+        valueChanged = true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/preferences/DefaultNewLayerPreferencesComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/NewLayerDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/NewLayerDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/NewLayerDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerLibrary;
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for default implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class NewLayerDefaultImplLibrary extends AbstractLibrary {
+    
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(NewLayerLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        NewLayerLocator.registerManager(DefaultNewLayerManager.class);
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily("org.gvsig.newlayer.lib.impl.i18n.text",
+            NewLayerDefaultImplLibrary.class.getClassLoader(),
+            NewLayerDefaultImplLibrary.class.getClass().getName());
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/NewLayerDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/TypeSelectorPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/TypeSelectorPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/TypeSelectorPanel.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl;
+
+import java.awt.BorderLayout;
+
+import javax.swing.DefaultListSelectionModel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.NewLayerWizard;
+
+public class TypeSelectorPanel extends JPanel implements OptionPanel{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 419873365484240927L;
+	private NewLayerWizard wizard;
+    private NewLayerProviderFactory currentType;
+
+	public TypeSelectorPanel(NewLayerWizard wizard){
+		this.wizard = wizard;
+		initializeComponents();
+	}
+
+	public String getPanelTitle() {
+		return Messages.getText("_Output_format");
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		if (currentType!=null){
+			this.wizard.setType(currentType);
+			return;
+		}
+		throw new NotContinueWizardException("", null, false);
+	}
+
+	public void lastPanel() {
+		// do nothing
+		
+	}
+
+	public void updatePanel() {
+		initializeComponents();
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+    private void initializeComponents() {
+        this.setLayout(new BorderLayout());
+
+        JList types = new JList();     
+        ListModel model =
+            new org.gvsig.utils.DefaultListModel(this.getService()
+                .getProviderFactories());
+       
+        types.setModel(model);
+        types.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
+        
+        types.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(ListSelectionEvent e) {
+				if (e.getValueIsAdjusting() == false) {
+					JList list = (JList) e.getSource();
+					
+			        if (list.getSelectedIndex() > -1) {
+                        currentType =
+                            (NewLayerProviderFactory) list.getSelectedValue();
+                        
+                        wizard.setNextButtonEnabled(true);
+			        } else {
+			            wizard.setNextButtonEnabled(false);
+			        }
+			    }
+			}
+		});
+        
+        JScrollPane scrollPane = new JScrollPane();
+        scrollPane.setViewportView(types);
+        this.add(scrollPane, BorderLayout.CENTER);        
+    }
+
+	private NewLayerService getService() {
+		return this.wizard.getService();
+	} 
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/TypeSelectorPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerManager.java	(revision 42196)
@@ -0,0 +1,167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.impl;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.ImageIcon;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.newlayer.NewLayerManager;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.NewLayerWizard;
+import org.gvsig.newlayer.impl.preferences.DefaultNewLayerPreferencesComponent;
+import org.gvsig.newlayer.preferences.NewLayerPreferencesComponent;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Default {@link NewLayerManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultNewLayerManager implements NewLayerManager {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultNewLayerManager.class);
+
+    final static private String EP_NEWLAYER_NAME = "NewLayer.manager.providers";
+    final static private String EP_NEWLAYER_DESCRIPTION = "NewLayer providers";
+
+    private Map<NewLayerProviderFactory, Boolean> providerStatus;
+
+    /**
+     * Empty constructor.
+     */
+    public DefaultNewLayerManager() {
+        providerStatus = new HashMap<NewLayerProviderFactory, Boolean>();
+    }
+
+    public NewLayerService createNewLayerService(MapContext mapContext) {
+        return new DefaultNewLayerService(this, mapContext);
+    }
+
+    public void registerProvider(NewLayerProviderFactory factory) {
+        ExtensionPoint ep = getNewLayerProvidersExtensionPoint();
+        ep.append(factory.getName(), factory.getDescription(), factory);
+    }
+
+    public NewLayerWizard createNewLayerWizard(NewLayerService service) {
+        
+        URL iconURL =
+            getClass().getClassLoader().getResource(
+                "org/gvsig/newlayer/lib/impl/images/panel/view-new-layer-illustration.png");
+        ImageIcon logo = null;
+        if (iconURL != null) {
+            logo = new ImageIcon(iconURL);
+        }
+
+        return new DefaultNewLayerWizard(logo, service);
+    }
+
+    public NewLayerProviderFactory getNewLayerProviderFactory(
+        String providerName) throws ServiceException {
+        ExtensionPoint ep = getNewLayerProvidersExtensionPoint();
+        try {
+            return (NewLayerProviderFactory) ep.create(providerName);
+        } catch (InstantiationException e) {
+            throw new RuntimeException(e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void enableProvider(NewLayerProviderFactory factory, Boolean value) {
+        providerStatus.put(factory, Boolean.valueOf(value));
+    }
+
+    public NewLayerPreferencesComponent createNewLayerProvidersPreferences() {
+        return new DefaultNewLayerPreferencesComponent();
+    }
+
+    public List<NewLayerProviderFactory> getProviders() {
+        ExtensionPoint ep = getNewLayerProvidersExtensionPoint();
+        List<NewLayerProviderFactory> providers =
+            new ArrayList<NewLayerProviderFactory>();
+        @SuppressWarnings("unchecked")
+        Iterator<Extension> it = ep.iterator();
+
+        while (it.hasNext()) {
+            Extension extension = (Extension) it.next();
+            NewLayerProviderFactory factory;
+            try {
+                factory = (NewLayerProviderFactory) extension.create();
+            } catch (InstantiationException e) {
+                LOG.warn(
+                    "Can't create NewLayerProviderFactory "
+                        + extension.getName(), e);
+                continue;
+            } catch (IllegalAccessException e) {
+                LOG.warn(
+                    "Can't create NewLayerProviderFactory "
+                        + extension.getName(), e);
+                continue;
+            }
+            providers.add(factory);
+        }
+
+        return providers;
+    }
+
+    private ExtensionPoint getNewLayerProvidersExtensionPoint() {
+        ExtensionPointManager epmgr = ToolsLocator.getExtensionPointManager();
+        return
+            epmgr.add(EP_NEWLAYER_NAME, EP_NEWLAYER_DESCRIPTION);
+    }
+
+    public List<NewLayerProviderFactory> getProviders(STORETYPE filter) {
+        // TODO use filters
+        // if (filter == STORETYPE.TABULAR){
+        // if (!factory.isSpatial()){
+        // providers.add(factory);
+        // }
+        // } else {
+        // }
+        return getProviders();
+    }
+
+    public boolean isProviderEnabled(NewLayerProviderFactory factory) {
+        Boolean status = providerStatus.get(factory);
+        return status == null ? true : status.booleanValue();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.newlayer">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/pom.xml	(revision 42196)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer.lib.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.newlayer.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.cresques.ui</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+    <!-- Test Dependencies -->
+
+<!--
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.lib.api</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+-->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.dbf</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+
+  </dependencies>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.classpath
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.classpath	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.classpath	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.project
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.project	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.project	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.gvsig.newlayer.lib.impl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.classpath
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.classpath	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.classpath	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.project
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.project	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.project	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.gvsig.newlayer.lib.api</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.newlayer.NewLayerLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/resources/filters.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/resources/filters.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/resources/filters.txt	(revision 42196)
@@ -0,0 +1,3 @@
+point_geometries_only=
+curve_geometries_only=
+surface_geometries_only=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/resources/filters.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerManager.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import java.util.List;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.newlayer.preferences.NewLayerPreferencesComponent;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * This class is responsible of the management of the library's business logic.
+ * It is the library's main entry point, and provides all the services to manage
+ * {@link NewLayerService}s.
+ * 
+ * @see NewLayerService
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface NewLayerManager {
+
+    public enum STORETYPE{ANY,TABULAR,SPATIAL};
+    
+
+    /**
+     * Create an instance of a {@link NewLayerService}.
+     * @return {@link NewLayerService}
+     * @throws ServiceException
+     *             if there is an error getting the service
+     */
+    public NewLayerService createNewLayerService(MapContext mapContext);
+    
+    public void registerProvider(NewLayerProviderFactory factory);
+    
+    public List<NewLayerProviderFactory> getProviders(STORETYPE filter);
+
+    public List<NewLayerProviderFactory> getProviders();
+    
+    public NewLayerWizard createNewLayerWizard(NewLayerService service);
+
+    /**
+     * Returns the provider factory with the given name.
+     * 
+     * @param name
+     *            of the provider
+     * @return the provider factory
+     * @throws ServiceException
+     *             if there is an error getting the provider factory
+     */
+    public NewLayerProviderFactory getNewLayerProviderFactory(
+        String providerName) throws ServiceException;
+
+    /**
+     * Enables or disables a new layer provider.
+     * 
+     * @param factory
+     *            of the provider to enable or disable
+     * @param value
+     *            if the provider must be enabled or disabled
+     */
+    public void enableProvider(NewLayerProviderFactory factory, Boolean false1);
+
+    /**
+     * Creates a preferences component to manage the export to properties.
+     * 
+     * @return a preferences component
+     */
+    public NewLayerPreferencesComponent createNewLayerProvidersPreferences();
+
+    /**
+     * Returns if the provider whose factory is provided is enabled.
+     * 
+     * @param factory
+     *            of the provider to check
+     * @return if the provider whose factory is provided is enabled
+     */
+    public boolean isProviderEnabled(NewLayerProviderFactory factory);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProvider.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.tools.service.spi.Provider;
+
+public interface NewLayerProvider extends Provider{
+	
+	public NewLayerService getService();
+	
+	public DataServerExplorer getExplorer();
+	
+	public String getStoreName();
+
+	public EditableFeatureType getFeatureType();
+	
+	public NewFeatureStoreParameters getNewStoreParameters();
+	
+	public DataStoreParameters getOpenStoreParameters();
+
+	public List<NewLayerProviderPanel> getPanels();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderPanel.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import javax.swing.JPanel;
+
+
+public abstract class NewLayerProviderPanel extends JPanel{
+
+
+	protected NewLayerProvider provider;
+
+	protected NewLayerProviderPanel(NewLayerProvider provider){
+		this.provider = provider;
+	}
+
+	public abstract String getTitle();
+	
+	public abstract boolean isValidPanel() throws NewLayerException;
+	
+	public abstract void updatePanel();
+	
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/preferences/NewLayerPreferencesComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/preferences/NewLayerPreferencesComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/preferences/NewLayerPreferencesComponent.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.preferences;
+
+import java.util.Set;
+
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ * API for the Export to swing preferences component panel.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface NewLayerPreferencesComponent extends Component {
+
+    /**
+     * Returns the providers disabled by the user.
+     * 
+     * @return the providers disabled by the user
+     */
+    Set<NewLayerProviderFactory> getDisabledProviders();
+
+    /**
+     * Undoes all the user changes in the preferences.
+     */
+    void initializeDefaults();
+
+    /**
+     * Is the user has made any change in the preferences.
+     * 
+     * @return the user has made any change
+     */
+    boolean isValueChanged();
+
+    /**
+     * Tells the component the changes made by the user to the properties
+     * had been performed.
+     */
+    void setChangesApplied();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/preferences/NewLayerPreferencesComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerException.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Generic exception thrown in the NewLayer API when the exception or error
+ * may be dealt by the program or the user of the program which is a client of
+ * the NewLayer API.
+ * 
+ * @see {@link NewLayerService}
+ * @see {@link NewLayerManager}
+ * @author gvSIG team.
+ * @version $Id$
+ */
+public class NewLayerException extends BaseException {
+
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = -2954242107118688337L;
+
+	private static final String MESSAGE =
+        "An error has been produced in the NewLayer library";
+
+    private static final String KEY = "_NewLayerException";
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <strong>Don't use this constructor in child classes.</strong>
+     */
+    public NewLayerException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <p>
+     * <strong>Don't use this constructor in child classes.</strong>
+     * </p>
+     * 
+     * @param cause
+     *            the original cause of the exception
+     */
+    public NewLayerException(Exception cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected NewLayerException(String message, String key, long code) {
+        super(message, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param cause
+     *            the original cause of the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected NewLayerException(String message, Throwable cause,
+        String key, long code) {
+        super(message, cause, key, code);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerServiceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerServiceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerServiceException.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Exception thrown when there is an error getting a NewLayer message.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class NewLayerServiceException extends ServiceException {
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = -4395786952326742397L;
+
+	private static final String MESSAGE =
+        "An error has been produced creating a store";
+
+    private static final String KEY = "_NewLayerServiceException";
+    
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	protected NewLayerServiceException(String message, String key, long code) {
+		super(message, key, code);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	protected NewLayerServiceException(String message, Throwable cause, String key,
+			long code) {
+		super(message, cause, key, code);
+	}
+
+    /**
+     * Creates a new {@link NewLayerServiceException}.
+     * 
+     * @param cause
+     *            the original cause
+     */
+    public NewLayerServiceException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerServiceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerService.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.mapcontext.MapContext;
+
+/**
+ * <p>
+ * This service is used to create a new {@link FeatureStore}.
+ * </p>
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface NewLayerService {
+
+    /**
+     * @deprecated use {@link #setProviderFactory(NewLayerProviderFactory)}
+     *             instead
+     */
+    public void setType(String type);
+
+    /**
+     * @deprecated use {@link #getProviderFactory()} instead
+     */
+    public String getType();
+
+    /**
+     * @deprecated use {@link #getProviderFactories()} instead
+     */
+    public List<String> getTypes();
+
+    public void setProviderFactory(NewLayerProviderFactory type);
+    
+    public NewLayerProviderFactory getProviderFactory();
+
+    public List<NewLayerProviderFactory> getProviderFactories();
+    
+    public void createLayer() throws NewLayerServiceException;
+
+	public void loadLayer() throws NewLayerServiceException;
+
+    public DataServerExplorer getExplorer();
+    
+    public String getStoreName();
+    
+    public EditableFeatureType getFeatureType();
+    
+    public NewFeatureStoreParameters getNewStoreParameters();
+    
+    public DataStoreParameters getOpenStoreParameters();
+    
+    public NewLayerProvider getProvider();
+    
+    public void addLayerToView(boolean b);
+    
+    public MapContext getMapContext();
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerWizard.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+
+
+public abstract class NewLayerWizard extends WizardPanelWithLogo{
+
+	private static final long serialVersionUID = -9070328984844239279L;
+
+	public NewLayerWizard(ImageIcon logo) {
+		super(logo);
+	}
+
+	public abstract NewLayerService getService();
+
+    public abstract void setType(NewLayerProviderFactory currentType);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderFactory.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import org.gvsig.tools.service.spi.ProviderFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface NewLayerProviderFactory extends ProviderFactory {
+
+    public boolean isSpatial();
+
+    public NewLayerProvider create(NewLayerService service);
+
+    /**
+     * If the provider this factory creates is enabled. This option might
+     * be used as a way to show or not some providers to the user.
+     * 
+     * @return if the provider is enabled
+     */
+    public boolean isEnabled();
+
+    /**
+     * Enable or disable this provider factory.
+     * 
+     * @param value
+     *            if to enable or disable the factory
+     */
+    public void setEnabled(boolean value);
+
+    /**
+     * Returns a description of the provider.
+     * 
+     * @return a description for the provider
+     */
+    public String getDescription();
+
+    /**
+     * Returns a label or short description for the provider.
+     * 
+     * @return a label or short description for the provider
+     */
+    public String getLabel();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLocator.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This locator is the entry point for the NewLayer library, providing
+ * access to all NewLayer services through the {@link NewLayerManager}
+ * .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class NewLayerLocator extends BaseLocator {
+
+    /**
+     * NewLayer manager name.
+     */
+    public static final String MANAGER_NAME = "NewLayer.manager";
+
+    /**
+     * NewLayer manager description.
+     */
+    public static final String MANAGER_DESCRIPTION = "NewLayer Manager";
+
+    private static final String LOCATOR_NAME = "NewLayer.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final NewLayerLocator INSTANCE =
+        new NewLayerLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static NewLayerLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name.
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to the NewLayerManager.
+     * 
+     * @return a reference to the NewLayerManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static NewLayerManager getManager() throws LocatorException {
+        return (NewLayerManager) getInstance().get(MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the NewLayerManager interface.
+     * 
+     * @param clazz
+     *            implementing the NewLayerManager interface
+     */
+    public static void registerManager(
+        Class<? extends NewLayerManager> clazz) {
+        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLibrary.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class NewLayerLibrary extends AbstractLibrary {
+       
+    @Override
+    public void doRegistration() {
+        registerAsAPI(NewLayerLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        NewLayerManager manager = NewLayerLocator.getManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                NewLayerLocator.MANAGER_NAME, NewLayerLocator
+                    .getInstance());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/NewLayerLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProviderFactory.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.spi;
+
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+public abstract class AbstractNewLayerProviderFactory implements NewLayerProviderFactory{
+
+	public final Provider doCreate(DynObject parameters, ProviderServices services) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynObject createParameters() {
+		throw new UnsupportedOperationException();
+	}
+
+	public void initialize() {
+		throw new UnsupportedOperationException();
+	}
+
+	protected DynClass createParametersDynClass() {
+		throw new UnsupportedOperationException();
+	}
+
+	public Provider create(DynObject parameters, ProviderServices services)
+	throws ServiceException {
+		throw new UnsupportedOperationException();
+	}
+
+    public boolean isEnabled() {
+        return NewLayerLocator.getManager().isProviderEnabled(this);
+    }
+
+    public void setEnabled(boolean value) {
+        NewLayerLocator.getManager().enableProvider(this, value);
+    }
+
+    @Override
+    public String toString() {
+        return getLabel();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProvider.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.spi;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+public abstract class AbstractNewLayerProvider implements NewLayerProvider{
+
+	private NewLayerService service;
+	protected DataServerExplorer explorer;
+	protected String storeName;
+
+	protected AbstractNewLayerProvider(NewLayerService service){
+		this.service = service;
+	}
+	
+	public NewLayerService getService() {
+		return service;
+	}
+	
+	public DataServerExplorer getExplorer() {
+		return explorer;
+	}
+	
+	public String getStoreName() {
+		return storeName;
+	}
+	
+	public void setProviderServices(ProviderServices services) {
+		throw new UnsupportedOperationException();
+	}
+	
+	
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/src/main/java/org/gvsig/newlayer/spi/AbstractNewLayerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/pom.xml	(revision 42196)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer.lib.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.tools.lib</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.tools.swing.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.dal.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.projection.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.ui</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>jwizardcomponent</groupId>
+          <artifactId>jwizardcomponent</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+  </dependencies>
+
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/pom.xml	(revision 42196)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer.prov.generic</artifactId>
+  <packaging>jar</packaging>
+  <name>org.gvsig.newlayer.prov.generic</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.newlayer.prov</artifactId>
+    <version>2.0.46-SNAPSHOT</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.lib.api</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>    
+        <scope>compile</scope>        
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+     <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.newlayer.prov.generic.NewLayerGenericProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text.properties	(revision 42196)
@@ -0,0 +1,6 @@
+select_dataexplorer=Selecciona el explorer
+select_dataexplorer_parameters=Selecciona los par�metros del explorer
+select_datastore=Selecciona el store
+select_datastore_parameters=Selecciona los par�metros del store
+newlayer_generic_description=Crea una nueva capa usando el formulario avanzado de cualquier formato soportado por gvSIG. 
+newlayer_generic_label=Creaci�n avanzada de nueva capa
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,6 @@
+select_dataexplorer=Select the explorer
+select_dataexplorer_parameters=Select the explorer parameters
+select_datastore=Select the store
+select_datastore_parameters=Select the store parameters
+newlayer_generic_description=Create new layer using the advanced form of any gvSIG supported format
+newlayer_generic_label=Advanced create new layer
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/resources/org/gvsig/newlayer/prov/generic/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/ExplorerParamsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/ExplorerParamsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/ExplorerParamsPanel.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic.panels;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JScrollPane;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.prov.generic.NewLayerGenericProviderPanel;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.dynobject.DynObjectSwingManager;
+import org.gvsig.tools.swing.api.dynobject.JDynObjectComponent;
+
+public class ExplorerParamsPanel extends NewLayerGenericProviderPanel {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4479935798588252685L;
+
+	private static final DynObjectSwingManager DYN_OBJECT_SWING_MANAGER = ToolsSwingLocator
+			.getDynObjectSwingManager();
+
+	private JDynObjectComponent dynObjectComponent = null;
+	private String explorerName = null;
+
+	public ExplorerParamsPanel(NewLayerProvider provider) {
+		super(provider);
+	}
+
+	private void initializeComponents() {
+		explorerName = this.getProvider().getExplorerName();
+		this.setLayout(new BorderLayout());
+		try {
+			this.removeAll();
+			dynObjectComponent = DYN_OBJECT_SWING_MANAGER
+					.createJDynObjectComponent(
+							getProvider().getExplorerParameters(),
+							true);
+		} catch (ServiceException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (InitializeException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (ProviderNotRegisteredException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		this.add(dynObjectComponent.asJComponent(), BorderLayout.CENTER);
+
+	}
+
+	@Override
+	public String getTitle() {
+		return Messages.getText("select_dataexplorer_parameters");
+	}
+
+	@Override
+	public boolean isValidPanel() {
+		if (dynObjectComponent == null){
+			return false;
+		}
+		dynObjectComponent.saveStatus();
+		DynObject dynObject = this.dynObjectComponent.getDynObject();
+		try {
+			dynObject.getDynClass().validate(dynObject);
+		} catch (DynObjectValidateException e) {
+			return false;
+		}
+		this.getProvider().createExplorer();
+		return true;
+	}
+
+	@Override
+	public void updatePanel() {
+		if (explorerName != null && this.getProvider().getExplorerName().equalsIgnoreCase(explorerName)){
+			return;
+		}
+		initializeComponents();
+		repaint();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/ExplorerParamsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectStoreTypePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectStoreTypePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectStoreTypePanel.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic.panels;
+
+import java.awt.BorderLayout;
+import java.util.List;
+
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.ListModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.prov.generic.NewLayerGenericProviderPanel;
+import org.gvsig.utils.DefaultListModel;
+
+public class SelectStoreTypePanel extends NewLayerGenericProviderPanel{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2269115175530699282L;
+	private JScrollPane scrollPane = null;
+	private String currentStoreType = null;
+
+	public SelectStoreTypePanel(NewLayerProvider provider) {
+		super(provider);
+		initializeComponents();
+	}
+
+	private void initializeComponents() {
+		this.removeAll();
+		this.setLayout(new BorderLayout());
+
+		JList storeNames = new JList();
+		ListModel model = new DefaultListModel(this.getProvider().getStoreNames());
+		storeNames.setModel(model);
+
+		storeNames.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(ListSelectionEvent e) {
+				if (e.getValueIsAdjusting() == false) {
+					JList list = (JList) e.getSource();
+
+					if (list.getSelectedIndex() > -1) {
+						currentStoreType = (String) list.getSelectedValue();
+					}
+				}
+			}
+		});
+
+		scrollPane = new JScrollPane();
+		scrollPane.setViewportView(storeNames);
+
+		this.add(scrollPane, BorderLayout.CENTER);    
+	}
+
+	@Override
+	public String getTitle() {
+		return Messages.getText("select_datastore");
+	}
+
+	@Override
+	public boolean isValidPanel() {
+		if (currentStoreType != null){
+			getProvider().setStoreName(currentStoreType);
+			return true;
+		}
+		return false;
+	}
+	
+	public void update() {
+		initializeComponents();
+	}
+
+	@Override
+	public void updatePanel() {
+		initializeComponents();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectStoreTypePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectExplorerPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectExplorerPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectExplorerPanel.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic.panels;
+
+import java.awt.BorderLayout;
+import java.util.List;
+
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.ListModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.prov.generic.NewLayerGenericProviderPanel;
+import org.gvsig.utils.DefaultListModel;
+
+public class SelectExplorerPanel extends NewLayerGenericProviderPanel{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4479935798588252685L;
+
+    private JScrollPane scrollPane = null;
+	private String currentExplorerName = null;
+
+	public SelectExplorerPanel(NewLayerProvider provider) {
+		super(provider);
+		initializeComponents();
+	}
+
+	private void initializeComponents() {
+		this.setLayout(new BorderLayout());
+
+		JList explorerNames = new JList();
+		ListModel model = new DefaultListModel(this.getProvider().getExplorerNames());
+		explorerNames.setModel(model);
+
+		explorerNames.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(ListSelectionEvent e) {
+				if (e.getValueIsAdjusting() == false) {
+					JList list = (JList) e.getSource();
+
+					if (list.getSelectedIndex() > -1) {
+						currentExplorerName = (String) list.getSelectedValue();
+					}
+				}
+			}
+		});
+
+		scrollPane = new JScrollPane();
+		scrollPane.setViewportView(explorerNames);
+
+		this.add(scrollPane, BorderLayout.CENTER);    
+	}
+
+	@Override
+	public String getTitle() {
+		return Messages.getText("select_dataexplorer");
+	}
+
+	@Override
+	public boolean isValidPanel() {
+		if (currentExplorerName != null){
+			getProvider().setExplorerName(currentExplorerName);
+			return true;
+		}
+		return false;
+	}
+	
+	public void update() {
+		initializeComponents();
+	}
+
+	@Override
+	public void updatePanel() {
+		initializeComponents();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/SelectExplorerPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/StoreParamsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/StoreParamsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/StoreParamsPanel.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic.panels;
+
+import java.awt.BorderLayout;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.prov.generic.NewLayerGenericProviderPanel;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.dynobject.DynObjectSwingManager;
+import org.gvsig.tools.swing.api.dynobject.JDynObjectComponent;
+
+public class StoreParamsPanel extends NewLayerGenericProviderPanel{
+
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = -3700558197138685488L;
+
+	private static final DynObjectSwingManager  DYN_OBJECT_SWING_MANAGER = 
+        ToolsSwingLocator.getDynObjectSwingManager();
+
+	private JDynObjectComponent dynObjectComponent = null;
+
+	private String storeName;
+
+	public StoreParamsPanel(NewLayerProvider provider) {
+		super(provider);
+	}
+
+	private void initializeComponents() {
+		this.setLayout(new BorderLayout());
+		this.storeName = this.getProvider().getStoreName();
+		
+		try {
+			this.removeAll();
+			dynObjectComponent = DYN_OBJECT_SWING_MANAGER
+					.createJDynObjectComponent(getProvider()
+							.getNewStoreParameters(), true);
+		} catch (ServiceException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		this.add(dynObjectComponent.asJComponent(), BorderLayout.CENTER);
+
+	}
+
+	@Override
+	public String getTitle() {
+		return Messages.getText("select_datastore_parameters");
+	}
+
+	@Override
+	public boolean isValidPanel() {
+		if (dynObjectComponent == null){
+			return false;
+		}
+        dynObjectComponent.saveStatus();
+		DynObject dynObject = this.dynObjectComponent.getDynObject();
+		try {
+			dynObject.getDynClass().validate(dynObject);
+		} catch (DynObjectValidateException e) {
+			return false;
+		}
+		return true;
+	}
+
+	@Override
+	public void updatePanel() {
+		if (storeName != null && storeName.equalsIgnoreCase(this.getProvider().getStoreName())){
+			return;
+		}
+		initializeComponents();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/panels/StoreParamsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderLibrary.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerLibrary;
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.newlayer.NewLayerManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library to initialize and register the file NewLayer provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerGenericProviderLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsServiceOf(NewLayerLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily("org.gvsig.newlayer.prov.generic.i18n.text",
+            NewLayerGenericProviderLibrary.class.getClassLoader(),
+            NewLayerGenericProviderLibrary.class.getClass().getName());
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        NewLayerManager manager = NewLayerLocator.getManager();
+        NewLayerGenericProviderFactory factory =
+            new NewLayerGenericProviderFactory();
+        manager.registerProvider(factory);
+
+        // Disable this provider by default
+        manager.enableProvider(factory, false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderFactory.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.spi.AbstractNewLayerProviderFactory;
+
+/**
+ * Factory of file {@link ExportoProvider} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerGenericProviderFactory extends AbstractNewLayerProviderFactory {
+
+	public boolean isSpatial() {
+        return true;
+	}
+
+	public NewLayerProvider create(NewLayerService service) {
+		return new NewLayerGenericProvider(service);
+	}
+
+	public String getName() {
+		return "Generic";
+	}
+
+    public String getDescription() {
+        return Messages.getText("newlayer_generic_description");
+    }
+
+    public String getLabel() {
+        return Messages.getText("newlayer_generic_label");
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProvider.java	(revision 42196)
@@ -0,0 +1,218 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.newlayer.NewLayerProviderPanel;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.prov.generic.panels.ExplorerParamsPanel;
+import org.gvsig.newlayer.prov.generic.panels.SelectExplorerPanel;
+import org.gvsig.newlayer.prov.generic.panels.SelectStoreTypePanel;
+import org.gvsig.newlayer.prov.generic.panels.StoreParamsPanel;
+import org.gvsig.newlayer.spi.AbstractNewLayerProvider;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * NewLayer provider which create a NewLayer.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerGenericProvider extends AbstractNewLayerProvider {
+
+	List<NewLayerProviderPanel> panels = new ArrayList<NewLayerProviderPanel>();
+	private String explorerName = null; 
+	private DataServerExplorerParameters explorerParameters = null;
+	private NewFeatureStoreParameters storeParameters = null;
+	private EditableFeatureType featureType = null;
+	
+    protected NewLayerGenericProvider(NewLayerService service) {
+		super(service);
+		panels.add(new SelectExplorerPanel(this));
+		panels.add(new ExplorerParamsPanel(this));
+		panels.add(new SelectStoreTypePanel(this));
+		panels.add(new StoreParamsPanel(this));
+	}
+
+	private static final Logger LOG =
+        LoggerFactory.getLogger(NewLayerGenericProvider.class);
+
+	public EditableFeatureType getFeatureType() {
+//		if (this.featureType!=null){
+//			if (this.storeParameters != null){
+//				if (this.storeParameters.getDataStoreName().equals(this.getStoreName())){
+//					return this.featureType;
+//				}
+//			}
+//		}
+//		this.featureType = this.getNewStoreParameters().getDefaultFeatureType();
+//		return this.featureType;
+		return this.getNewStoreParameters().getDefaultFeatureType();
+	}
+	
+	public NewFeatureStoreParameters getNewStoreParameters() {
+		if (storeParameters != null){
+			if (storeParameters.getDataStoreName().equals(this.getStoreName())){
+				return storeParameters;
+			}
+		}
+		try {
+			storeParameters = (NewFeatureStoreParameters) getExplorer().getAddParameters(this.getStoreName());
+			return storeParameters;
+		} catch (InitializeException e) {
+			LOG.error("Can't initialize store parameters.");
+			throw new CantInitializeStoreParametersException(e);
+		} catch (ProviderNotRegisteredException e) {
+			LOG.error("Can't create store parameters, provider not registered.");
+			throw new CantCreateStoreParametersException(e);
+		} catch (DataException e) {
+			LOG.error("Can't create store parameters, provider not registered.");
+			throw new CantCreateStoreParametersException(e);
+		}
+	}
+	
+	public DataStoreParameters getOpenStoreParameters() {
+		DataManager dataManager = DALLocator.getDataManager();
+		try {
+			DataStoreParameters storeParameters = (DataStoreParameters) dataManager
+					.createStoreParameters(this.getStoreName());
+			return storeParameters;
+		} catch (InitializeException e) {
+			throw new CantInitializeStoreParametersException(e);
+		} catch (ProviderNotRegisteredException e) {
+			throw new CantCreateStoreParametersException(e);
+		}
+	}
+	
+	class CantCreateStoreParametersException extends BaseRuntimeException {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = -3487961532247258393L;
+		private final static String MESSAGE_FORMAT = "Can't create store parameters, provider not registered.";
+		private final static String MESSAGE_KEY = "_Cant_create_store_parameters_provider_not_registered";
+
+		public CantCreateStoreParametersException(Throwable cause) {
+			super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		}
+	}
+	
+	class CantInitializeStoreParametersException extends BaseRuntimeException {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = -5263149018209261288L;
+		private final static String MESSAGE_FORMAT = "Can't initialize store parameters.";
+		private final static String MESSAGE_KEY = "_Cant_initialize_store_parameters";
+
+		public CantInitializeStoreParametersException(Throwable cause) {
+			super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		}
+	}
+
+	
+	public List<NewLayerProviderPanel> getPanels() {
+		return panels;
+	}
+	
+	public List<String> getExplorerNames(){
+		DataManager dataManager = DALLocator.getDataManager();
+        return dataManager.getExplorerProviders();
+	}
+
+	public List<String> getStoreNames(){
+		DataManager dataManager = DALLocator.getDataManager();
+		List<String> writables = new ArrayList<String>();
+		if (getExplorer()!=null){
+			List<String> storeProviders = getExplorer().getDataStoreProviderNames();// dataManager.getStoreProviders(); //
+
+			for (Iterator iterator = storeProviders.iterator(); iterator.hasNext();) {
+				String name = (String) iterator.next();
+				DataStoreProviderFactory factory = dataManager.getStoreProviderFactory(name);
+				if (factory != null && factory.allowCreate()!=DataStoreProviderFactory.NO){
+					writables.add(name);
+				}
+			}
+		}
+		
+        return writables;
+	}
+
+	public void setStoreName(String storeName) {
+		this.storeName = storeName;
+	}
+	
+	public String getExplorerName(){
+		return this.explorerName;
+	}
+	
+	public void setExplorerName(String explorerName) {
+		this.explorerName = explorerName;
+	}
+	
+	public DataServerExplorerParameters getExplorerParameters() throws InitializeException, ProviderNotRegisteredException{
+		if (this.explorerParameters==null || !this.explorerParameters.getExplorerName().equalsIgnoreCase(this.getExplorerName())) {
+			if (this.explorerName == null) {
+				LOG.error("Can't create explorer parameters, unknow explorer name.");
+				throw new RuntimeException("Can't create explorer parameters, unknow explorer name.");
+			}
+			DataManager manager = DALLocator.getDataManager();
+			this.explorerParameters = manager.createServerExplorerParameters(this.getExplorerName()); 
+			
+		}
+		return this.explorerParameters;
+	}
+
+	public void createExplorer() {
+		DataManager manager = DALLocator.getDataManager();
+		try {
+			explorer = manager.openServerExplorer(getExplorerName(), getExplorerParameters());
+		} catch (ValidateDataParametersException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (InitializeException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (ProviderNotRegisteredException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderPanel.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.generic;
+
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.NewLayerProviderPanel;
+
+public abstract class NewLayerGenericProviderPanel extends NewLayerProviderPanel{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 2759053809158640346L;
+
+	protected NewLayerGenericProviderPanel(NewLayerProvider provider) {
+		super(provider);
+	}
+
+	public NewLayerGenericProvider getProvider() {
+		return (NewLayerGenericProvider) this.provider;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic/src/main/java/org/gvsig/newlayer/prov/generic/NewLayerGenericProviderPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.generic
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/pom.xml	(revision 42196)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer.prov</artifactId>
+  <packaging>pom</packaging>
+  <name>org.gvsig.newlayer.prov</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.newlayer</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.newlayer.prov.shape</module>    
+    <module>org.gvsig.newlayer.prov.file</module>      
+    <!-- 
+    <module>org.gvsig.newlayer.prov.generic</module>  
+    <module>org.gvsig.newlayer.prov.dxf</module>
+    <module>org.gvsig.newlayer.prov.jdbc</module>
+    <module>org.gvsig.newlayer.prov.postgresql</module>
+    <module>org.gvsig.newlayer.prov.mysql</module>
+    <module>org.gvsig.newlayer.prov.dbf</module> 
+    -->      
+  </modules>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProviderFactory.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.file;
+
+import org.gvsig.newlayer.spi.AbstractNewLayerProviderFactory;
+
+/**
+ * Factory to create shapes.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractNewLayerFileProviderFactory extends
+    AbstractNewLayerProviderFactory {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderPanel.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.file;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.io.File;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.gui.beans.wizard.panel.SelectFileOptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerException;
+import org.gvsig.newlayer.NewLayerProviderPanel;
+
+public class NewLayerFileProviderPanel extends NewLayerProviderPanel{
+    private SelectFileOptionPanel selectFileOptionPanel; 
+    
+	protected NewLayerFileProviderPanel(AbstractNewLayerFileProvider provider) {
+		super(provider);
+		this.setLayout(new BorderLayout());
+        selectFileOptionPanel =
+            new org.gvsig.gui.beans.wizard.panel.SelectFileOptionPanel(null);
+        add(selectFileOptionPanel, BorderLayout.NORTH);
+	}
+
+	public AbstractNewLayerFileProvider getProvider() {
+		return (AbstractNewLayerFileProvider) this.provider;
+	}
+	
+	public File getSelectedFile(){
+	    return selectFileOptionPanel.getSelectedFile();
+	}
+
+    @Override
+    public String getTitle() {
+        return Messages.getText("output_file");
+    }
+
+    @Override
+    public boolean isValidPanel() throws NewLayerException {
+        File file = selectFileOptionPanel.getSelectedFile();
+        if ((file == null) || (file.equals(""))) {
+            throw new NotEmptyFileException();
+        }
+        if (file.exists()) {
+            int resp =
+                JOptionPane
+                    .showConfirmDialog(
+                        (Component) selectFileOptionPanel.getParent(),
+                        Messages.getText("fichero_ya_existe_seguro_desea_guardarlo"),
+                        Messages.getText("guardar"),
+                        JOptionPane.YES_NO_OPTION);
+            if (resp == JOptionPane.NO_OPTION) {
+                return false;
+            }
+        }
+        return true;       
+    }
+    
+    class NotEmptyFileException extends NewLayerException {
+        private static final long serialVersionUID = -3619912245694177044L;
+        private final static String MESSAGE_FORMAT = "The file can not be empty.";
+        private final static String MESSAGE_KEY = "_file_can_not_be_empty_exception";
+
+        public NotEmptyFileException() {
+            super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+        }
+    }
+
+    @Override
+    public void updatePanel() {
+        // TODO Auto-generated method stub
+        
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProvider.java	(revision 42196)
@@ -0,0 +1,179 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.file;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.newlayer.NewLayerProviderPanel;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.spi.AbstractNewLayerProvider;
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * NewLayer provider to create a shape file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractNewLayerFileProvider extends AbstractNewLayerProvider {
+    protected static final Logger LOG =
+        LoggerFactory.getLogger(AbstractNewLayerFileProvider.class);
+    
+    protected List<NewLayerProviderPanel> panels = new ArrayList();
+    protected NewLayerFileProviderPanel fileProviderPanel = null;
+    protected NewFeatureStoreParameters storeParameters = null;
+	
+    protected AbstractNewLayerFileProvider(NewLayerService service) {
+		super(service);
+		fileProviderPanel = new NewLayerFileProviderPanel(this);
+		panels.add(fileProviderPanel);
+    }    
+    
+    public List<NewLayerProviderPanel> getPanels() {   
+        return panels;
+    }    
+    
+    public EditableFeatureType getFeatureType() {
+        return this.getNewStoreParameters().getDefaultFeatureType();
+    }
+    
+    protected abstract String getFileParameterName();
+    
+    protected abstract String getFileExtension();
+
+    public NewFeatureStoreParameters getNewStoreParameters() {
+        DataManager dataManager = DALLocator.getDataManager();
+    
+        try {
+            if (this.explorer == null){
+                DataServerExplorerParameters explorerParameters =
+                    dataManager.createServerExplorerParameters("FilesystemExplorer");
+                this.explorer =
+                    dataManager.openServerExplorer("FilesystemExplorer", explorerParameters);
+            }
+            
+            File selectedFile = fileProviderPanel.getSelectedFile();
+            String fileName = selectedFile.getName();
+            if (fileName.indexOf(".") < 0){
+                fileName = fileName + "." + this.getFileExtension();
+                selectedFile = new File(selectedFile.getParent() + File.separator + fileName);
+            }            
+            
+            //If the file has not been updated, returns the same parameters
+            if (this.storeParameters != null){
+                File previousFile = (File)storeParameters.getDynValue(getFileParameterName());
+                if (previousFile.equals(selectedFile)){
+                    return storeParameters;
+                }
+            }         
+            
+            storeParameters = 
+                (NewFeatureStoreParameters) explorer.getAddParameters(this.getStoreName());      
+            storeParameters.setDynValue(
+                getFileParameterName(), selectedFile);
+            return storeParameters;
+        } catch (InitializeException e) {
+            LOG.error("Can't initialize store parameters.");
+            throw new CantInitializeStoreParametersException(e);
+        } catch (ProviderNotRegisteredException e) {
+            LOG.error("Can't create store parameters, provider not registered.");
+            throw new CantCreateStoreParametersException(e);
+        } catch (DataException e) {
+            LOG.error("Can't create store parameters, provider not registered.");
+            throw new CantCreateStoreParametersException(e);
+        } catch (ValidateDataParametersException e) {
+            LOG.error("Can't create the explorter.");
+            throw new CantCreateExplorerException(e);
+        }
+    }
+    
+	public DataStoreParameters getOpenStoreParameters() {
+		DataManager dataManager = DALLocator.getDataManager();
+
+		try {
+			File selectedFile = fileProviderPanel.getSelectedFile();
+			String fileName = selectedFile.getName();
+			if (fileName.indexOf(".") < 0) {
+				fileName = fileName + "." + this.getFileExtension();
+				selectedFile = new File(selectedFile.getParent()
+						+ File.separator + fileName);
+			}
+
+			DataStoreParameters storeParameters = (DataStoreParameters) dataManager
+					.createStoreParameters(this.getStoreName());
+			storeParameters.setDynValue(getFileParameterName(), selectedFile);
+			return storeParameters;
+		} catch (InitializeException e) {
+			throw new CantInitializeStoreParametersException(e);
+		} catch (ProviderNotRegisteredException e) {
+			throw new CantCreateStoreParametersException(e);
+		}
+	}
+    
+    class CantCreateExplorerException extends BaseRuntimeException {
+        private static final long serialVersionUID = -3487961532247258393L;
+        private final static String MESSAGE_FORMAT = "Can't create explorer.";
+        private final static String MESSAGE_KEY = "_Cant_create_explorer";
+
+        public CantCreateExplorerException(Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        }
+    }
+    
+    class CantCreateStoreParametersException extends BaseRuntimeException {
+        private static final long serialVersionUID = -3487961532247258393L;
+        private final static String MESSAGE_FORMAT = "Can't create store parameters, provider not registered.";
+        private final static String MESSAGE_KEY = "_Cant_create_store_parameters_provider_not_registered";
+
+        public CantCreateStoreParametersException(Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        }
+    }
+    
+    class CantInitializeStoreParametersException extends BaseRuntimeException {
+        private static final long serialVersionUID = -5263149018209261288L;
+        private final static String MESSAGE_FORMAT = "Can't initialize store parameters.";
+        private final static String MESSAGE_KEY = "_Cant_initialize_store_parameters";
+
+        public CantInitializeStoreParametersException(Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        }
+    }
+
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/AbstractNewLayerFileProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderLibrary.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.file;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library to initialize and register the file NewLayer provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerFileProviderLibrary extends AbstractLibrary {
+    
+    public void doRegistration() {
+        registerAsServiceOf(NewLayerLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily("org.gvsig.newlayer.prov.file.i18n.text",
+            NewLayerFileProviderLibrary.class.getClassLoader(),
+            NewLayerFileProviderLibrary.class.getClass().getName());
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/java/org/gvsig/newlayer/prov/file/NewLayerFileProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.newlayer.prov.file.NewLayerFileProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text.properties	(revision 42196)
@@ -0,0 +1 @@
+output_file=Fichero de salida
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1 @@
+output_file=Output file
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/src/main/resources/org/gvsig/newlayer/prov/file/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/pom.xml	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.newlayer.prov.file</artifactId>
+    <packaging>jar</packaging>
+    <name>org.gvsig.newlayer.prov.file</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.newlayer.prov</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+            <scope>compile</scope>        
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.newlayer.lib.api</artifactId>
+        </dependency> 
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.ui</artifactId>
+            <scope>compile</scope>
+        </dependency>    
+    </dependencies>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.file
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.newlayer.prov.shape.NewLayerShapeProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+newlayer_shape_description=Crea una nueva capa de tipo Shape 
+newlayer_shape_label=Creaci�n de nueva capa Shape 
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+newlayer_shape_description=Create a new Shape type layer
+newlayer_shape_label=Create new Shape layer
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/resources/org/gvsig/newlayer/prov/shape/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProvider.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.shape;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.prov.file.AbstractNewLayerFileProvider;
+
+/**
+ * NewLayer provider to create a shape file.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerShapeProvider extends AbstractNewLayerFileProvider {
+   
+    protected NewLayerShapeProvider(NewLayerService service) {
+        super(service);
+        this.storeName = "Shape";
+    }
+
+    @Override
+    protected String getFileParameterName() {
+        return "shpFile";
+    }
+
+    @Override
+    protected String getFileExtension() {       
+        return "shp";
+    } 
+    
+    public NewFeatureStoreParameters getNewStoreParameters() {
+        NewFeatureStoreParameters storeParameters =
+            super.getNewStoreParameters();
+        if (storeParameters != null){
+            storeParameters.setDynValue("geometryType", null);
+        }
+        return storeParameters;
+    }
+
+    @Override
+	public DataStoreParameters getOpenStoreParameters() {
+		DataStoreParameters openStoreParameters = super
+				.getOpenStoreParameters();
+		openStoreParameters.setDynValue("CRS", getNewStoreParameters()
+				.getDynValue("CRS"));
+		return openStoreParameters;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderLibrary.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.shape;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerLibrary;
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library to initialize and register the file NewLayer provider
+ * implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerShapeProviderLibrary extends AbstractLibrary {
+    
+    public void doRegistration() {
+        registerAsServiceOf(NewLayerLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily("org.gvsig.newlayer.prov.shape.i18n.text",
+            NewLayerShapeProviderLibrary.class.getClassLoader(),
+            NewLayerShapeProviderLibrary.class.getClass().getName());
+
+        NewLayerLocator.getManager().registerProvider(
+            new NewLayerShapeProviderFactory());
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderFactory.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.prov.shape;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerProvider;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.prov.file.AbstractNewLayerFileProviderFactory;
+
+/**
+ * Factory to create shapes.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerShapeProviderFactory extends
+    AbstractNewLayerFileProviderFactory {
+
+    private static final String PROVIDER_NAME = "Shape";
+
+    public boolean isSpatial() {
+        return true;
+    }
+
+    public NewLayerProvider create(NewLayerService service) {
+        return new NewLayerShapeProvider(service);
+    }
+
+    public String getName() {
+        return PROVIDER_NAME;
+    }
+
+    public String getDescription() {
+        return Messages.getText("newlayer_shape_description");
+    }
+
+    public String getLabel() {
+        return Messages.getText("newlayer_shape_label");
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/src/main/java/org/gvsig/newlayer/prov/shape/NewLayerShapeProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/pom.xml	(revision 42196)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.newlayer.prov.shape</artifactId>
+    <packaging>jar</packaging>
+    <name>org.gvsig.newlayer.prov.shape</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.newlayer.prov</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>    
+            <scope>compile</scope>        
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>    
+            <scope>compile</scope>        
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.newlayer.lib.api</artifactId>
+        </dependency>   
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.newlayer.prov.file</artifactId>
+        </dependency> 
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>     
+    </dependencies>
+</project>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov/org.gvsig.newlayer.prov.shape
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/org.gvsig.newlayer.prov
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/pom.xml	(revision 42196)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer</artifactId>
+  <packaging>pom</packaging>
+  <description>newlayer project</description>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.library</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+    </dependency>  
+  </dependencies>
+  
+  <modules>
+    <module>org.gvsig.newlayer.lib</module>
+    <module>org.gvsig.newlayer.prov</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.newlayer
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/pom.xml	(revision 42196)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.desktop.library</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <description>This project group all librerias in the core of gvSIG that not havent java compatibility with JVM CDC.</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <modules>
+        <module>org.gvsig.utils</module>
+        <module>org.gvsig.personaldb</module>
+        <module>org.gvsig.annotation</module>
+        <module>org.gvsig.exportto</module>
+        <module>org.gvsig.fmap.control</module>
+        <module>org.gvsig.ui</module>
+        <module>org.gvsig.installer</module>
+        <module>org.gvsig.newlayer</module>
+        <module>org.gvsig.symbology</module>
+        <module>org.gvsig.tools.evaluator.sqljep</module>
+        <module>org.gvsig.about</module>
+	<module>org.gvsig.timesupport</module>
+    </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/pom.xml	(revision 42196)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.personaldb</artifactId>
+    <packaging>pom</packaging>
+    <name>org.gvsig.personaldb</name>
+    <description>PersonalDB project</description>
+    
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.library</artifactId>
+        <version>2.0.97</version>
+    </parent>
+ 
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>animal-sniffer-maven-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <modules>
+      <module>org.gvsig.personaldb.lib</module>
+      <module>org.gvsig.personaldb.main</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.personaldb package documentation</title>
+</head>
+<body>
+
+	<p>PersonalDB library testing and demo application.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/Main.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/Main.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/Main.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb.main;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.personaldb.PersonalDBException;
+import org.gvsig.personaldb.PersonalDBLocator;
+import org.gvsig.personaldb.PersonalDBManager;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Main executable class for testing the PersonalDB library.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Main {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Main.class);
+
+    public static void main(String args[]) {
+        Main main = new Main();
+        try {
+            main.show();
+        } catch (Throwable e) {
+            e.printStackTrace();
+            System.exit(-1);
+        }
+        System.exit(0);
+    }
+
+    public void show() throws PersonalDBException, SQLException {
+
+        new DefaultLibrariesInitializer().fullInitialize();
+        PersonalDBManager manager = PersonalDBLocator.getManager();
+
+        Connection connection = manager.getConnection();
+        DatabaseMetaData metadata = connection.getMetaData();
+        LOG.info("DatabaseMetadata: {}", metadata);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/java/org/gvsig/personaldb/main/Main.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your classes.
+
+This folder is added to the classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.personaldb">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/src/main/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/pom.xml	(revision 42196)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.personaldb.main</artifactId>
+    <packaging>jar</packaging>
+    <name>org.gvsig.personaldb.main</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.personaldb</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.personaldb.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.personaldb.lib.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <executable>java</executable>
+                    <arguments>
+                        <argument>-classpath</argument>
+                        <!-- automatically creates the classpath using all project 
+                            dependencies, also adding the project build directory -->
+                        <classpath />
+                        <argument>org.gvsig.personaldb.main.Main</argument>
+                    </arguments>
+                    <environmentVariables>
+                    </environmentVariables>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.main
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.personaldb.PersonalDBLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DBAccessException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DBAccessException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DBAccessException.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb;
+
+import org.gvsig.fmap.dal.DataParameters;
+
+/**
+ * Exception thrown when there is an error creating a connection to the
+ * personal database.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DBAccessException extends PersonalDBException {
+
+    private static final long serialVersionUID = 8918999379397938916L;
+
+    private final static String MESSAGE_FORMAT =
+        "Access error to a database whose parameters are: %(parameters)";
+    private final static String MESSAGE_KEY = "_DBAccessException";
+
+    /**
+     * Constructor with a message and a cause
+     */
+    public DBAccessException(DataParameters parameters, Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        setValue("parameters", parameters.toString());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DBAccessException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBException.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Generic exception thrown in the PersonalDB API when the exception or error
+ * may be dealt by the program or the user of the program which is a client of
+ * the PersonalDB API.
+ * 
+ * @see {@link PersonalDBManager}
+ * @author gvSIG team.
+ * @version $Id$
+ */
+public class PersonalDBException extends BaseException {
+
+    private static final long serialVersionUID = 6756475060924237176L;
+
+    private static final String MESSAGE =
+        "An error has been produced in the PersonalDB library";
+
+    private static final String KEY = "_PersonalDBException";
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <strong>Don't use this constructor in child classes.</strong>
+     */
+    public PersonalDBException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <p>
+     * <strong>Don't use this constructor in child classes.</strong>
+     * </p>
+     * 
+     * @param cause
+     *            the original cause of the exception
+     */
+    public PersonalDBException(Exception cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected PersonalDBException(String message, String key, long code) {
+        super(message, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param cause
+     *            the original cause of the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected PersonalDBException(String message, Throwable cause,
+        String key, long code) {
+        super(message, cause, key, code);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLocator.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This locator is the entry point for the PersonalDB library, providing
+ * access to all PersonalDB services through the {@link PersonalDBManager}
+ * .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class PersonalDBLocator extends BaseLocator {
+
+    /**
+     * PersonalDB manager name.
+     */
+    public static final String MANAGER_NAME = "PersonalDB.manager";
+
+    /**
+     * PersonalDB manager description.
+     */
+    public static final String MANAGER_DESCRIPTION = "PersonalDB Manager";
+
+    private static final String LOCATOR_NAME = "PersonalDB.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final PersonalDBLocator INSTANCE =
+        new PersonalDBLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static PersonalDBLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name.
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to the PersonalDBManager.
+     * 
+     * @return a reference to the PersonalDBManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static PersonalDBManager getManager() throws LocatorException {
+        return (PersonalDBManager) getInstance().get(MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the PersonalDBManager interface.
+     * 
+     * @param clazz
+     *            implementing the PersonalDBManager interface
+     */
+    public static void registerManager(
+        Class<? extends PersonalDBManager> clazz) {
+        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLibrary.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for PersonalDB API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class PersonalDBLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(PersonalDBLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        PersonalDBManager manager = PersonalDBLocator.getManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                PersonalDBLocator.MANAGER_NAME, PersonalDBLocator
+                    .getInstance());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.personaldb package documentation</title>
+</head>
+<body>
+
+	<p>PersonalDB library API.</p>
+	
+	<p>
+	It allows to get new PersonalDB and get their text.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DataServerExplorerParametersException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DataServerExplorerParametersException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DataServerExplorerParametersException.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb;
+
+
+/**
+ * Exception thrown when there is an error creating a connection to the
+ * personal database.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DataServerExplorerParametersException extends PersonalDBException {
+
+    private static final long serialVersionUID = 8918999379397938916L;
+
+    private final static String MESSAGE_FORMAT =
+        "Error creating a DataServerExplorerParameters for the personal "
+            + "database of the type: %(name)";
+    private final static String MESSAGE_KEY =
+        "_DataServerExplorerParametersException";
+
+    /**
+     * Constructor with a message and a cause
+     */
+    public DataServerExplorerParametersException(String name,
+        Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        setValue("name", name);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/DataServerExplorerParametersException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBManager.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb;
+
+import java.sql.Connection;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+
+/**
+ * This class is responsible of the management of the library's business logic.
+ * It is the library's main entry point, and provides all the services to manage
+ * {@link Connection}s and {@link DataParameters} to connect to the personal
+ * database.
+ * 
+ * @see PersonalDBService
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface PersonalDBManager {
+
+    /**
+     * Returns a {@link Connection} the personal database.
+     * 
+     * @return a connection to the personal database
+     * @throws PersonalDBException
+     *             if there is an error getting the connection
+     */
+    public Connection getConnection() throws PersonalDBException;
+
+    /**
+     * Returns a {@link DataStoreParameters} to connect to the personal database
+     * through the DAL library.
+     * 
+     * @return the DAL data store parameters to connect to connect to the
+     *         database
+     * @throws PersonalDBException
+     *             if there is an error creating the parameters
+     */
+    public DataStoreParameters getDataStoreParameters()
+        throws PersonalDBException;
+
+    /**
+     * Returns a {@link DataStoreParameters} to connect to the personal database
+     * through the DAL library.
+     * 
+     * @param schema
+     *            the schema of the table to load data from
+     * @param table
+     *            the name of the table to load data from
+     * @return the DAL data store parameters to connect to connect to the
+     *         database
+     * @throws PersonalDBException
+     *             if there is an error creating the parameters
+     */
+    public DataStoreParameters getDataStoreParameters(String schema,
+        String table) throws PersonalDBException;
+
+    /**
+     * Returns a {@link DataServerExplorerParameters} to connect to the personal
+     * database
+     * through the DAL library.
+     * 
+     * @return the DAL data server explorer parameters to connect to connect to
+     *         the
+     *         database
+     * @throws PersonalDBException
+     *             if there is an error creating the parameters
+     */
+    public DataServerExplorerParameters getDataServerExplorerParameters()
+        throws PersonalDBException;
+
+    /**
+     * Returns a {@link DataServerExplorerParameters} to connect to the personal
+     * database
+     * through the DAL library.
+     * 
+     * @param schema
+     *            the schema of the database to connect to
+     * @return the DAL data server explorer parameters to connect to connect to
+     *         the
+     *         database
+     * @throws PersonalDBException
+     *             if there is an error creating the parameters
+     */
+    public DataServerExplorerParameters getDataServerExplorerParameters(
+        String schema) throws PersonalDBException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/src/main/java/org/gvsig/personaldb/PersonalDBManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/pom.xml	(revision 42196)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.personaldb.lib.api</artifactId>
+    <packaging>jar</packaging>
+    <name>org.gvsig.personaldb.lib.api</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.personaldb.lib</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+      <plugins>
+        <plugin>
+          <!-- Packaging tests in jar -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <executions>
+            <!-- Generates a jar file only with the test classes -->
+            <execution>
+              <goals>
+                <goal>test-jar</goal>
+              </goals>
+              <configuration>
+                <includes>
+                  <include>**/**</include>
+                </includes>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin> 
+      </plugins>
+    </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/pom.xml	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.personaldb.lib</artifactId>
+  <packaging>pom</packaging>
+  <name>org.gvsig.personaldb.lib</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.personaldb</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.personaldb.lib.api</module>
+    <module>org.gvsig.personaldb.lib.impl</module>
+  </modules>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.personaldb.impl.PersonalDBDefaultImplLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.personaldb package documentation</title>
+</head>
+<body>
+
+	<p>PersonalDB library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/PersonalDBDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/PersonalDBDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/PersonalDBDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb.impl;
+
+import org.gvsig.fmap.dal.store.jdbc.JDBCLibrary;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResourceParameters;
+import org.gvsig.personaldb.PersonalDBLibrary;
+import org.gvsig.personaldb.PersonalDBLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for default implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class PersonalDBDefaultImplLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(PersonalDBLibrary.class);
+        require(JDBCLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        PersonalDBLocator.registerManager(DefaultPersonalDBManager.class);
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        if (PersonalDBLocator.getManager() instanceof DefaultPersonalDBManager) {
+
+            String databasePath =
+                System.getProperty("personalDBPath", "~/.gvsig-personaldb");
+            String databasePort = System.getProperty("personalDBPort");
+
+            String personalDBURL =
+                databasePort == null ? "jdbc:h2:" + databasePath
+                    : "jdbc:h2:tcp://localhost:" + databasePort + "/"
+                        + databasePath;
+
+            JDBCResourceParameters parameters = new JDBCResourceParameters();
+            parameters.setJDBCDriverClassName("org.h2.Driver");
+            parameters.setUrl(personalDBURL);
+
+            ((DefaultPersonalDBManager) PersonalDBLocator.getManager())
+                .open(parameters);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/PersonalDBDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/DefaultPersonalDBManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/DefaultPersonalDBManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/DefaultPersonalDBManager.java	(revision 42196)
@@ -0,0 +1,203 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.personaldb.impl;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.dbcp.BasicDataSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResourceParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreProvider;
+import org.gvsig.personaldb.DBAccessException;
+import org.gvsig.personaldb.DataServerExplorerParametersException;
+import org.gvsig.personaldb.PersonalDBException;
+import org.gvsig.personaldb.PersonalDBManager;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Default {@link PersonalDBManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultPersonalDBManager extends AbstractDisposable implements
+    PersonalDBManager {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultPersonalDBManager.class);
+
+    private BasicDataSource dataSource;
+    private JDBCResourceParameters resourceParameters;
+
+    public Connection getConnection() throws PersonalDBException {
+
+        try {
+            return getDataSource().getConnection();
+        } catch (SQLException e) {
+            throw new DBAccessException(resourceParameters, e);
+        }
+    }
+
+    private synchronized DataSource getDataSource() {
+
+        if (dataSource == null) {
+            dataSource = new BasicDataSource();
+            dataSource.setDriverClassName(resourceParameters
+                .getJDBCDriverClassName());
+            dataSource.setUsername(resourceParameters.getUser());
+            dataSource.setPassword(resourceParameters.getPassword());
+            dataSource.setUrl(resourceParameters.getUrl());
+
+            dataSource.setMaxWait(60L * 1000); // FIXME
+
+            dataSource.setMaxActive(20);
+            dataSource.setMaxIdle(4);
+            dataSource.setMinIdle(1);
+            dataSource.setInitialSize(1);
+
+            // FIXME Set Pool parameters:
+            /*
+             * dataSource.setMaxOpenPreparedStatements(maxActive);
+             * dataSource.setMaxWait(maxActive);
+             * dataSource.setDefaultReadOnly(defaultReadOnly);
+             * dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation
+             * )
+             * ;
+             * dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis
+             * );
+             * dataSource.setTestOnBorrow(testOnBorrow);
+             * dataSource.setTestOnReturn(testOnReturn);
+             * dataSource.setTestWhileIdle(testOnReturn);
+             * dataSource
+             * .setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+             * 
+             * dataSource.setAccessToUnderlyingConnectionAllowed(allow);
+             * dataSource.setLoginTimeout(seconds);
+             * dataSource.setLogWriter(out);
+             */
+        }
+
+        return dataSource;
+    }
+
+    public DataStoreParameters getDataStoreParameters()
+        throws PersonalDBException {
+
+        return getJDBCStoreParameters();
+    }
+
+    public DataStoreParameters getDataStoreParameters(String schema,
+        String table) throws PersonalDBException {
+
+        JDBCStoreParameters params = getJDBCStoreParameters();
+        params.setSchema(schema);
+        params.setTable(table);
+        return params;
+    }
+
+    private JDBCStoreParameters getJDBCStoreParameters()
+        throws PersonalDBException {
+        try {
+            JDBCStoreParameters params =
+                (JDBCStoreParameters) DALLocator.getDataManager()
+                    .createStoreParameters(JDBCStoreProvider.NAME);
+
+            params.setUrl(resourceParameters.getUrl());
+            params.setJDBCDriverClassName(resourceParameters
+                .getJDBCDriverClassName());
+
+            return params;
+        } catch (InitializeException e) {
+            throw new DataServerExplorerParametersException(
+                JDBCServerExplorer.NAME, e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new DataServerExplorerParametersException(
+                JDBCServerExplorer.NAME, e);
+        }
+    }
+
+    public DataServerExplorerParameters getDataServerExplorerParameters()
+        throws PersonalDBException {
+        return getJDBCServerExplorerParameters();
+    }
+
+    public DataServerExplorerParameters getDataServerExplorerParameters(
+        String schema) throws PersonalDBException {
+        JDBCServerExplorerParameters params = getJDBCServerExplorerParameters();
+        params.setSchema(schema);
+        return params;
+    }
+
+    private JDBCServerExplorerParameters getJDBCServerExplorerParameters()
+        throws PersonalDBException {
+        try {
+            JDBCServerExplorerParameters params =
+                (JDBCServerExplorerParameters) DALLocator.getDataManager()
+                    .createServerExplorerParameters(JDBCServerExplorer.NAME);
+
+            params.setUrl(resourceParameters.getUrl());
+            params.setJDBCDriverClassName(resourceParameters
+                .getJDBCDriverClassName());
+
+            return params;
+        } catch (InitializeException e) {
+            throw new DataServerExplorerParametersException(
+                JDBCServerExplorer.NAME, e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new DataServerExplorerParametersException(
+                JDBCServerExplorer.NAME, e);
+        }
+    }
+
+    public void open(JDBCResourceParameters resourceParameters) {
+        LOG.debug(
+            "Creating connection to personal database with parameters: {}",
+            resourceParameters);
+
+        this.resourceParameters = resourceParameters;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        try {
+            dataSource.close();
+        } catch (SQLException e) {
+            throw new DBAccessException(resourceParameters, e);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/main/java/org/gvsig/personaldb/impl/DefaultPersonalDBManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.personaldb">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/pom.xml	(revision 42196)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.personaldb.lib.impl</artifactId>
+    <packaging>jar</packaging>
+    <name>org.gvsig.personaldb.lib.impl</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.personaldb.lib</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.personaldb.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.personaldb.lib.api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.db.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.classpath
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.classpath	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.classpath	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.project
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.project	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.project	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.gvsig.personaldb.lib.impl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib/org.gvsig.personaldb.lib.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb/org.gvsig.personaldb.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.personaldb
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/javadoc/overview.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/javadoc/overview.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/javadoc/overview.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.scripting package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library overview.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.about.impl.AboutDefaultImplLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/computer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/computer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/gvSIG.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/gvSIG.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/folder-drag-accept.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/folder-drag-accept.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/preferences-system.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/preferences-system.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/system-users.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/system-users.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/people.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/people.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/edit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/edit.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/preferences-desktop-locale2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/preferences-desktop-locale2.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/help-browser.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/help-browser.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/image-missing.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/image-missing.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/folder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/folder.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/applications-internet.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i16x16/applications-internet.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/folder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/folder.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/applications-internet.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/applications-internet.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/computer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/computer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/gvSIG.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/gvSIG.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/folder-drag-accept.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/folder-drag-accept.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/preferences-system.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/preferences-system.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/system-users.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/system-users.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/people.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/people.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/edit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/edit.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/preferences-desktop-locale2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/preferences-desktop-locale2.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/help-browser.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/help-browser.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/image-missing.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/org/gvsig/about/images/i32x32/image-missing.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,7 @@
+Put into this folder the resources needed by your library classes.
+
+This folder is added to the runtime classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, into this folder you can find some examples of resource bundle 
+property files that may be used by your library classes.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/HtmlBrowserPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/HtmlBrowserPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/HtmlBrowserPanel.java	(revision 42196)
@@ -0,0 +1,41 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.htmlBrowser;
+
+import java.net.URL;
+
+import javax.swing.JPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class HtmlBrowserPanel extends JPanel {
+
+    private static final long serialVersionUID = 8497218072224309746L;
+
+    abstract public void navigate(URL url);
+
+    abstract public void setText(String text);
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/SimpleHtmlBrowserPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/SimpleHtmlBrowserPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/SimpleHtmlBrowserPanel.java	(revision 42196)
@@ -0,0 +1,97 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.htmlBrowser;
+
+import java.awt.BorderLayout;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.JEditorPane;
+import javax.swing.JScrollPane;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class SimpleHtmlBrowserPanel extends HtmlBrowserPanel implements
+    HyperlinkListener {
+
+    private static final long serialVersionUID = 2222495134882233629L;
+    private static final Logger LOG = LoggerFactory
+        .getLogger(SimpleHtmlBrowserPanel.class);
+
+    public JEditorPane htmlPane;
+    public JScrollPane scroll;
+
+    public SimpleHtmlBrowserPanel() {
+        setLayout(new BorderLayout());
+
+        this.htmlPane = new JEditorPane();
+        this.htmlPane.setContentType("text/html");
+        this.htmlPane.setEditable(false);
+
+        this.scroll = new JScrollPane(htmlPane);
+        // htmlPane.addHyperlinkListener(this);
+
+        add(scroll, BorderLayout.CENTER);
+    }
+
+    @Override
+    public void navigate(URL url) {
+        try {
+            this.htmlPane.setPage(url);
+        } catch (IOException e) {
+            this.htmlPane.setText("Error reading html content");
+            LOG.error("Error reading html content from URL: " + url, e);
+        }
+    }
+
+    @Override
+    public void setText(String text) {
+        this.htmlPane.setText(text);
+        this.htmlPane.setCaretPosition(0);
+    }
+
+    public void hyperlinkUpdate(HyperlinkEvent event) {
+        if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+            try {
+                htmlPane.setPage(event.getURL());
+            } catch (IOException ioe) {
+                this.htmlPane.setText("Error reading html content");
+                LOG.error(
+                    "Error reading html content from URL: " + event.getURL(),
+                    ioe);
+            }
+        }
+    }
+
+    public JEditorPane getJEditorPane() {
+        return htmlPane;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/LoboHtmlBrowserPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/LoboHtmlBrowserPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/htmlBrowser/LoboHtmlBrowserPanel.java	(revision 42196)
@@ -0,0 +1,56 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.htmlBrowser;
+
+import java.net.URL;
+
+//import org.lobobrowser.gui.FramePanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class LoboHtmlBrowserPanel extends HtmlBrowserPanel {
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 2789434542951170259L;
+
+    // FramePanel framePanel = null;
+
+    public LoboHtmlBrowserPanel() {
+        super();
+    }
+
+    @Override
+    public void navigate(URL url) {
+        // this.framePanel.navigate(url);
+    }
+
+    @Override
+    public void setText(String text) {
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JAboutBrowser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JAboutBrowser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JAboutBrowser.java	(revision 42196)
@@ -0,0 +1,445 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.swing;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.List;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.UIManager;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.gvsig.about.AboutManager;
+import org.gvsig.about.AboutParticipant;
+import org.gvsig.about.AboutProject;
+import org.gvsig.about.impl.DefaultAboutManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class JAboutBrowser extends JPanel {
+
+    public static final int DEFAULT_ACTION = 1;
+    public static final int SELECTION_ACTION = 2;
+    public static final int DROPDOWN_ACTION = 3;
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 1L;
+
+    protected DefaultAboutManager manager;
+    protected DefaultMutableTreeNode rootNode;
+    protected DefaultTreeModel treeModel;
+    protected JTree tree;
+    protected AboutProject root;
+    protected ActionListener defaultActionlistener = null;
+    protected ActionListener selectionActionlistener = null;
+    protected ActionListener dropDownActionlistener = null;
+
+    public static class BrowserActionEvent extends ActionEvent {
+
+        /**
+		 * 
+		 */
+        private static final long serialVersionUID = -1474410768278633364L;
+        private Object participant;
+
+        public BrowserActionEvent(Object source, int id, String command,
+            Object participant) {
+            super(source, id, command);
+            this.participant = participant;
+        }
+
+        public Object getParticipant() {
+            return this.participant;
+        }
+    }
+
+    public JAboutBrowser(DefaultAboutManager manager, AboutProject root) {
+        super(new GridLayout(1, 2));
+        this.manager = manager;
+        this.root = root;
+        this.makeUI();
+    }
+
+    public AboutManager getManager() {
+        return this.manager;
+    }
+
+    public void addDefaultActionListener(ActionListener actionlistener) {
+        this.defaultActionlistener = actionlistener;
+    }
+
+    public void addSelectionActionListener(ActionListener actionlistener) {
+        this.selectionActionlistener = actionlistener;
+    }
+
+    public void addDropDownActionListener(ActionListener actionlistener) {
+        this.dropDownActionlistener = actionlistener;
+    }
+
+    private void makeUI() {
+        // Creamos el nodo raíz
+
+        ImageIcon icon =
+            this.manager.getImageIcon(this.root.getIcon(), "gvSIG.png");
+        rootNode =
+            new DefaultMutableTreeNode(new NodeData(icon, icon, this.root));
+
+        // Lo asignamos al modelo del árbol e iniciamos el árbol con ese
+        // modelo
+        treeModel = new DefaultTreeModel(rootNode);
+        tree = new JTree(treeModel);
+
+        // Cargamos la información inicial del árbol
+        this.initializeTree();
+
+        // Para asignar iconos especiales según el tipo de objeto
+        TreeCellRenderer renderer = new IconCellRenderer();
+        tree.setCellRenderer(renderer);
+
+        // Para marcar que no son editables sus propiedades o nodos
+        tree.setEditable(false);
+        this.expandAll();
+
+        // Determina que sólo se puede seleccionar una linea
+        tree.getSelectionModel().setSelectionMode(
+            TreeSelectionModel.SINGLE_TREE_SELECTION);
+
+        tree.addMouseListener(new MouseListener() {
+
+            public void mouseClicked(MouseEvent arg0) {
+                if (arg0.getClickCount() == 1) {
+                    JTree tree = (JTree) arg0.getSource();
+                    if (!tree.isSelectionEmpty()) {
+                        throwEventElementSelected(tree.getSelectionPath());
+                    }
+
+                }
+            }
+
+            public void mouseEntered(MouseEvent arg0) {
+            }
+
+            public void mouseExited(MouseEvent arg0) {
+            }
+
+            public void mousePressed(MouseEvent arg0) {
+            }
+
+            public void mouseReleased(MouseEvent arg0) {
+            }
+        });
+
+        // Indica si el nodo raíz actúa como un nodo más o queda desplegado
+        // de
+        // manera fija
+        tree.setShowsRootHandles(true);
+
+        // Añadimos el Scroll
+        JScrollPane scrollPane = new JScrollPane(tree);
+        add(scrollPane);
+
+        setPreferredSize(new Dimension(200, 300));
+
+    }
+
+    public Object getSelectedNode() {
+        DefaultMutableTreeNode node;
+        if (tree.getSelectionPath() != null) {
+            node =
+                (DefaultMutableTreeNode) tree.getSelectionPath()
+                    .getLastPathComponent();
+        } else {
+            node = this.rootNode;
+        }
+        NodeData nodeData = (NodeData) node.getUserObject();
+        if (nodeData.getParticipant() != null) {
+            return nodeData.getParticipant();
+        } else
+            if (nodeData.getProject() != null) {
+                return nodeData.getProject();
+            }
+        return null;
+    }
+
+    private void throwEventElementSelected(TreePath path) {
+        DefaultMutableTreeNode node =
+            (DefaultMutableTreeNode) path.getLastPathComponent();
+        NodeData nodeData = (NodeData) node.getUserObject();
+        if (nodeData.getParticipant() != null) {
+            if (this.defaultActionlistener != null) {
+                ActionEvent event =
+                    new BrowserActionEvent(this, DEFAULT_ACTION, "default",
+                        nodeData.getParticipant());
+                this.defaultActionlistener.actionPerformed(event);
+            }
+        } else
+            if (nodeData.getProject() != null) {
+                if (this.defaultActionlistener != null) {
+                    ActionEvent event =
+                        new BrowserActionEvent(this, DEFAULT_ACTION, "default",
+                            nodeData.getProject());
+                    this.defaultActionlistener.actionPerformed(event);
+                }
+            }
+    }
+
+    /**
+     * Función para la inicialización de los datos del árbol.
+     **/
+    @SuppressWarnings("rawtypes")
+    private void initializeTree() {
+
+        AboutParticipant ap = null;
+        List participants;
+        ImageIcon icon;
+        NodeData data;
+
+        NodeData sponsors =
+            new NodeData(this.manager.getImageIcon("folder.png"),
+                this.manager.getImageIcon("folder-drag-accept.png"), "Sponsors");
+        DefaultMutableTreeNode sponsorsNode =
+            this.addObject(this.rootNode, sponsors);
+        participants = this.manager.getSponsors();
+        for (int i = 0; i < participants.size(); i++) {
+            ap = (AboutParticipant) participants.get(i);
+            icon =
+                (this.manager).getImageIcon(ap.getIcon(),
+                    "applications-internet.png");
+            data = new NodeData(icon, icon, ap);
+            this.addObject(sponsorsNode, data);
+        }
+
+        NodeData developers =
+            new NodeData(this.manager.getImageIcon("edit.png"),
+                this.manager.getImageIcon("edit.png"), "Developers");
+        DefaultMutableTreeNode developersNode =
+            this.addObject(this.rootNode, developers);
+        participants = this.manager.getDevelopers();
+        for (int i = 0; i < participants.size(); i++) {
+            ap = (AboutParticipant) participants.get(i);
+            icon =
+                this.manager.getImageIcon(ap.getIcon(),
+                    "preferences-system.png");
+            data = new NodeData(icon, icon, ap);
+            this.addObject(developersNode, data);
+        }
+
+        NodeData translators =
+            new NodeData(this.manager.getImageIcon("system-users.png"),
+                this.manager.getImageIcon("system-users.png"), "Contributors");
+        DefaultMutableTreeNode translatorsNode =
+            this.addObject(this.rootNode, translators);
+        participants = this.manager.getTranslators();
+
+        for (int i = 0; i < participants.size(); i++) {
+            ap = (AboutParticipant) participants.get(i);
+            icon = this.manager.getImageIcon(ap.getIcon(), "people.png");
+            data = new NodeData(icon, icon, ap);
+            this.addObject(translatorsNode, data);
+        }
+
+    }
+
+    public void expandAll() {
+        int row = 0;
+        while (row < this.tree.getRowCount()) {
+            this.tree.expandRow(row);
+            row++;
+        }
+    }
+
+    /**
+     * Función para añadir un hijo al nodo actual.
+     **/
+    // private DefaultMutableTreeNode addObject(Object child) {
+    // DefaultMutableTreeNode parentNode = rootNode;
+    // return addObject(parentNode, child, true);
+    // }
+
+    private DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,
+        Object child) {
+        return addObject(parent, child, false);
+    }
+
+    private DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,
+        Object child, boolean shouldBeVisible) {
+        DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);
+
+        // Si no especificamos padre, lo colgará del raíz
+        if (parent == null) {
+            parent = rootNode;
+        }
+
+        // Insertamos el nuevo nodo en el modelo del árbol
+        treeModel.insertNodeInto(childNode, parent, parent.getChildCount());
+
+        // Para que el usuario pueda ver el nuevo nodo
+        if (shouldBeVisible) {
+            tree.scrollPathToVisible(new TreePath(childNode.getPath()));
+        }
+
+        return childNode;
+    }
+
+    /**
+     * Clase IconData permite asociar hasta dos iconos (para cuando está
+     * expandido y cuando no) a un objeto del árbol
+     **/
+    static private class NodeData {
+
+        private Icon m_icon;
+        private Icon m_expandedIcon;
+        private Object m_data;
+
+        public NodeData(Icon icon, Icon expandedIcon, Object data) {
+            m_icon = icon;
+            m_expandedIcon = expandedIcon;
+            m_data = data;
+        }
+
+        public Icon getIcon() {
+            return m_icon;
+        }
+
+        public Icon getExpandedIcon() {
+            return m_expandedIcon != null ? m_expandedIcon : m_icon;
+        }
+
+        public AboutParticipant getParticipant() {
+            try {
+                return (AboutParticipant) m_data;
+            } catch (Exception e) {
+                return null;
+            }
+        }
+
+        public AboutProject getProject() {
+            try {
+                return (AboutProject) m_data;
+            } catch (Exception e) {
+                return null;
+            }
+        }
+
+        @Override
+        public String toString() {
+            return m_data.toString();
+        }
+    }
+
+    private class IconCellRenderer extends JLabel implements TreeCellRenderer {
+
+        /**
+		 * 
+		 */
+        private static final long serialVersionUID = 1L;
+        protected Color m_textSelectionColor;
+        protected Color m_textNonSelectionColor;
+        protected Color m_bkSelectionColor;
+        protected Color m_bkNonSelectionColor;
+        protected Color m_borderSelectionColor;
+
+        protected boolean m_selected;
+
+        public IconCellRenderer() {
+            super();
+            m_textSelectionColor =
+                UIManager.getColor("Tree.selectionForeground");
+            m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");
+            m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");
+            m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground");
+            m_borderSelectionColor =
+                UIManager.getColor("Tree.selectionBorderColor");
+            setOpaque(false);
+        }
+
+        public Component getTreeCellRendererComponent(JTree tree, Object value,
+            boolean sel, boolean expanded, boolean leaf, int row,
+            boolean hasFocus) {
+
+            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+            Object obj = node.getUserObject();
+            setText(obj.toString());
+
+            if (obj instanceof Boolean) {
+                setText("Retrieving data...");
+            }
+            if (obj instanceof NodeData) {
+                NodeData nodeData = (NodeData) obj;
+                if (expanded) {
+                    setIcon(nodeData.getExpandedIcon());
+                } else {
+                    setIcon(nodeData.getIcon());
+                }
+            } else {
+                setIcon(null);
+            }
+
+            setFont(tree.getFont());
+            setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
+            setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
+            m_selected = sel;
+            return this;
+        }
+
+        @Override
+        public void paintComponent(Graphics g) {
+            Color bColor = getBackground();
+            Icon icon = getIcon();
+
+            g.setColor(bColor);
+            int offset = 0;
+            if ((icon != null) && (getText() != null)) {
+                offset = (icon.getIconWidth() + getIconTextGap());
+            }
+            g.fillRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
+
+            if (m_selected) {
+                g.setColor(m_borderSelectionColor);
+                g.drawRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
+            }
+            super.paintComponent(g);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JAboutPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JAboutPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JAboutPanel.java	(revision 42196)
@@ -0,0 +1,85 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+
+import org.gvsig.about.AboutParticipant;
+import org.gvsig.about.AboutProject;
+import org.gvsig.about.impl.DefaultAboutManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class JAboutPanel extends JPanel implements ActionListener {
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 5605530722128487156L;
+    protected DefaultAboutManager manager;
+    protected JAboutBrowser browser;
+    protected JContentPanel content;
+
+    public JAboutPanel(DefaultAboutManager manager) {
+        this.manager = manager;
+
+        setLayout(new BorderLayout());
+
+        browser = new JAboutBrowser(manager, manager.getProject());
+        browser.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+        browser.addDefaultActionListener(this);
+        add(browser, BorderLayout.WEST);
+
+        content = new JContentPanel(manager, manager.getProject());
+        content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+        add(content, BorderLayout.CENTER);
+        setPreferredSize(new Dimension(650, 400));
+    }
+
+    public void actionPerformed(ActionEvent arg0) {
+
+        if (arg0.getSource() instanceof JAboutBrowser) {
+            JAboutBrowser browser = (JAboutBrowser) arg0.getSource();
+
+            if (browser.getSelectedNode() instanceof AboutProject) {
+                AboutProject project = (AboutProject) browser.getSelectedNode();
+                content.setContent(project);
+            } else
+                if (browser.getSelectedNode() instanceof AboutParticipant) {
+                    AboutParticipant participant =
+                        (AboutParticipant) browser.getSelectedNode();
+                    content.setContent(participant);
+                }
+
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JContentPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JContentPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/swing/JContentPanel.java	(revision 42196)
@@ -0,0 +1,68 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.swing;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JPanel;
+
+import org.gvsig.about.AboutManager;
+import org.gvsig.about.AboutParticipant;
+import org.gvsig.about.AboutProject;
+import org.gvsig.htmlBrowser.HtmlBrowserPanel;
+import org.gvsig.htmlBrowser.SimpleHtmlBrowserPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class JContentPanel extends JPanel /* implements HyperlinkListener */{
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 5605530722128487156L;
+    protected AboutManager manager;
+    HtmlBrowserPanel htmlPane;
+
+    public JContentPanel(AboutManager manager, AboutProject project) {
+        this.manager = manager;
+        this.htmlPane = null;
+
+        setLayout(new BorderLayout());
+        this.htmlPane = new SimpleHtmlBrowserPanel();
+        add(this.htmlPane, BorderLayout.CENTER);
+
+        this.setContent(manager.getProject());
+        setVisible(true);
+    }
+
+    public void setContent(AboutParticipant participant) {
+        htmlPane.setText(participant.getInformationPage());
+    }
+
+    public void setContent(AboutProject project) {
+        htmlPane.setText(project.getInformationPage());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutTranslator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutTranslator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutTranslator.java	(revision 42196)
@@ -0,0 +1,46 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import java.net.URL;
+
+import org.gvsig.about.AboutTranslator;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultAboutTranslator extends AbstractParticipant implements
+    AboutTranslator {
+
+    public DefaultAboutTranslator(DefaultAboutManager manager, String name,
+        URL description, int priority, URL icon) {
+        super(manager, name, description, priority, icon);
+    }
+
+    public DefaultAboutTranslator(DefaultAboutManager manager, String name,
+        URL description, int priority) {
+        super(manager, name, description, priority, null);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutManager.java	(revision 42196)
@@ -0,0 +1,502 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.about.AboutContribution;
+import org.gvsig.about.AboutDeveloper;
+import org.gvsig.about.AboutManager;
+import org.gvsig.about.AboutParticipant;
+import org.gvsig.about.AboutProject;
+import org.gvsig.about.AboutSponsor;
+import org.gvsig.about.AboutTranslator;
+import org.gvsig.about.swing.JAboutPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultAboutManager implements AboutManager {
+
+    protected List<AboutDeveloper> developers;
+    protected List<AboutTranslator> translators;
+    protected List<AboutSponsor> sponsors;
+
+    protected DefaultAboutProject root;
+
+    protected int ICON_SIZE = 16;
+
+    public DefaultAboutManager() {
+        developers = new ArrayList<AboutDeveloper>();
+        sponsors = new ArrayList<AboutSponsor>();
+        translators = new ArrayList<AboutTranslator>();
+    }
+
+    public void setProject(String name, URL description, URL icon) {
+        root = new DefaultAboutProject(this, name, description, icon);
+    }
+
+    public void setProject(String name, URL description, URL icon,
+        Map<String, String> vars) {
+        root = new DefaultAboutProject(this, name, description, icon, vars);
+
+    }
+
+    // public AboutContribution addContribution(AboutParticipant participant,
+    // String title, String description) {
+    // return participant.addContribution(title, description, null, null);
+    // }
+    //
+    // public AboutContribution addContribution(AboutParticipant participant,
+    // String title, String description, Date begin) {
+    // return participant.addContribution(title, description, begin, null);
+    // }
+    //
+    // public AboutContribution addContribution(AboutParticipant participant,
+    // String title, String description, Date begin, Date end) {
+    // return participant.addContribution(title, description, begin, end);
+    // }
+
+    public AboutParticipant addDeveloper(String name, URL description,
+        int priority) {
+        return addDeveloper(name, description, priority, null);
+    }
+
+    public AboutParticipant addDeveloper(String name, URL description,
+        int priority, URL icon) {
+
+        AboutDeveloper participant = this.getDeveloper(name);
+
+        if (participant == null) {
+            participant =
+                new DefaultAboutDeveloper(this, name, description, priority,
+                    icon);
+            // Añadimos a la lista de contribuciones
+            this.developers.add(participant);
+            // Ordenamos por prioridad creciente
+            Collections.sort(this.developers, new Comparator<AboutDeveloper>() {
+
+                public int compare(AboutDeveloper p1, AboutDeveloper p2) {
+                    return p1.getPriority() < p2.getPriority() ? -1 : (p1
+                        .getPriority() > p2.getPriority() ? +1 : 0);
+                }
+            });
+        }
+
+        return participant;
+    }
+
+    public AboutParticipant addSponsor(String name, URL description,
+        int priority) {
+        return addSponsor(name, description, priority, null);
+    }
+
+    public AboutParticipant addSponsor(String name, URL description,
+        int priority, URL icon) {
+
+        AboutSponsor participant = this.getSponsor(name);
+
+        if (participant == null) {
+            participant =
+                new DefaultAboutSponsor(this, name, description, priority, icon);
+            // Añadimos a la lista de contribuciones
+            this.sponsors.add(participant);
+            // Ordenamos por prioridad creciente
+            Collections.sort(this.sponsors, new Comparator<AboutSponsor>() {
+
+                public int compare(AboutSponsor p1, AboutSponsor p2) {
+                    return p1.getPriority() < p2.getPriority() ? -1 : (p1
+                        .getPriority() > p2.getPriority() ? +1 : 0);
+                }
+            });
+        }
+
+        return participant;
+    }
+
+    public AboutParticipant addTranslator(String name, URL description,
+        int priority) {
+        return addTranslator(name, description, priority, null);
+    }
+
+    public AboutParticipant addTranslator(String name, URL description,
+        int priority, URL icon) {
+
+        AboutTranslator participant = this.getTranslator(name);
+
+        if (participant == null) {
+            participant =
+                new DefaultAboutTranslator(this, name, description, priority,
+                    icon);
+            // Añadimos a la lista de contribuciones
+            this.translators.add(participant);
+            // Ordenamos por prioridad creciente
+            Collections.sort(this.translators,
+                new Comparator<AboutTranslator>() {
+
+                    public int compare(AboutTranslator p1, AboutTranslator p2) {
+                        return p1.getPriority() < p2.getPriority() ? -1 : (p1
+                            .getPriority() > p2.getPriority() ? +1 : 0);
+                    }
+                });
+        }
+
+        return participant;
+    }
+
+    public JPanel getAboutPanel() {
+        JPanel panel = new JAboutPanel(this);
+        return panel;
+    }
+
+    public List<AboutContribution> getContributions(AboutParticipant participant) {
+        return participant.getContributions();
+    }
+
+    public ImageIcon getImageIcon(String name) {
+        return this.getImageIcon(name, null);
+    }
+
+    public ImageIcon getImageIcon(URL url) {
+        return this.getImageIcon(url, null);
+    }
+
+    public ImageIcon getImageIcon(String name, String defaultName) {
+        URL url =
+            this.getClass().getClassLoader()
+                .getResource("org/gvsig/about/images/i16x16/" + name);
+        return this.getImageIcon(url, defaultName);
+    }
+
+    public ImageIcon getImageIcon(URL url, String defaultName) {
+        if (url == null) {
+            url =
+                this.getClass()
+                    .getClassLoader()
+                    .getResource("org/gvsig/about/images/i16x16/" + defaultName);
+        }
+        if (url == null) {
+            url =
+                this.getClass()
+                    .getClassLoader()
+                    .getResource(
+                        "org/gvsig/about/images/i16x16/image-missing.png");
+        }
+        if (url == null) {
+            url =
+                this.getClass()
+                    .getClassLoader()
+                    .getResource("org/gvsig/about/images/i16x16/" + defaultName);
+        }
+        if (url == null) {
+            return new ImageIcon();
+        }
+        return new ImageIcon(url);
+    }
+
+    public AboutProject getProject() {
+        return this.root;
+    }
+
+    public List<AboutDeveloper> getDevelopers() {
+        return this.developers;
+    }
+
+    public List<AboutSponsor> getSponsors() {
+        return this.sponsors;
+    }
+
+    public List<AboutTranslator> getTranslators() {
+        return this.translators;
+    }
+
+    // public ImageIcon validIconFormat(URL iconUrl){
+    // // comprobar si existe y comprobar si es imagen
+    // if(iconUrl!=null){
+    //
+    // File f = new File(iconUrl.getFile());
+    // String mimeType=null;
+    //
+    // try {
+    // mimeType = iconUrl.openConnection().getContentType();
+    // } catch (IOException e) {
+    // // TODO Auto-generated catch block
+    // e.printStackTrace();
+    // }
+    // boolean isImage = false;
+    // String[] formatNames = ImageIO.getWriterMIMETypes();
+    // for(int i=0;i<formatNames.length;i++){
+    // if(formatNames[i].equals(mimeType)){
+    // isImage = true;
+    // }
+    // }
+    //
+    // if(f.exists() && isImage){
+    // ImageIcon image = new ImageIcon(iconUrl);
+    // // Escalamos, si corresponde, el tamaño del icono
+    // if(image.getIconHeight()>ICON_SIZE || image.getIconWidth()>ICON_SIZE){
+    // float height = image.getIconHeight();
+    // float width = image.getIconWidth();
+    // if(height>=width && height>ICON_SIZE){
+    // width = (width/height*ICON_SIZE);
+    // height = ICON_SIZE;
+    // }else if(width>height && width>ICON_SIZE){
+    // height = (height/width*ICON_SIZE);
+    // width = ICON_SIZE;
+    // }
+    // Image im = image.getImage();
+    // image.setImage(im.getScaledInstance((int)width,(int)height, 0));
+    // }
+    // return image;
+    // }
+    // }
+    //
+    // return null;
+    // }
+
+    @SuppressWarnings("rawtypes")
+    private AboutParticipant getParticipantByName(List l, String name) {
+        Iterator it = l.iterator();
+        while (it.hasNext()) {
+            AboutParticipant ap = (AboutParticipant) it.next();
+            if (ap.getName().equals(name)) {
+                return ap;
+            }
+        }
+        return null;
+    }
+
+    public AboutDeveloper getDeveloper(String name) {
+        AboutDeveloper ap =
+            (AboutDeveloper) this.getParticipantByName(this.developers, name);
+        if (ap != null) {
+            return ap;
+        }
+        return null;
+    }
+
+    public AboutSponsor getSponsor(String name) {
+        AboutSponsor ap =
+            (AboutSponsor) this.getParticipantByName(this.sponsors, name);
+        if (ap != null) {
+            return ap;
+        }
+        return null;
+    }
+
+    public AboutTranslator getTranslator(String name) {
+        AboutTranslator ap =
+            (AboutTranslator) this.getParticipantByName(this.translators, name);
+        if (ap != null) {
+            return ap;
+        }
+        return null;
+    }
+
+    public String getStringFromFile(String filename)
+        throws FileNotFoundException, IOException {
+
+        BufferedReader b = new BufferedReader(new FileReader(filename));
+        StringBuffer sb = new StringBuffer();
+        String str;
+        while ((str = b.readLine()) != null) {
+            sb.append(str);
+            sb.append('\n');
+        }
+        return sb.toString();
+
+    }
+
+    public String getStringFromUrl(URL url) {
+        InputStream imp = null;
+        try {
+            imp = url.openStream();
+        } catch (IOException e) {
+            return null;
+        }
+        BufferedReader b = new BufferedReader(new InputStreamReader(imp));
+        StringBuffer sb = new StringBuffer();
+        String str;
+        try {
+            while ((str = b.readLine()) != null) {
+                sb.append(str);
+                sb.append('\n');
+            }
+            b.close();
+        } catch (IOException e) {
+            // Ignore it
+        }
+        String data = sb.toString();
+
+        return addBaseURLTag(url, data);
+    }
+
+    /**
+     * Add an HTML base tag to the document.
+     */
+    private String addBaseURLTag(URL url, String data) {
+        String baseTag = "<base href=\"" + getURLBase(url) + "\"/>";
+        int index = data.indexOf("<head>");
+        // Document contains a head section
+        if (index > -1) {
+            data =
+                data.substring(0, index) // HTML init
+                    + "<head>"
+                    + baseTag
+                    + data.substring(index + "<head>".length());
+        } else {
+            index = data.indexOf("<html>");
+            // Document contains an html section
+            if (index > -1) {
+                data = data.substring(0, index + "<html>".length()) // HTML init
+                    + "<head>" + baseTag + "</head>" // Head
+                    + data.substring(index + "<html>".length());
+            } else {
+                // Document doesn't contain nor a head nor an html section
+                data = "<head>" + baseTag + "</head>" // Head
+                    + data;
+            }
+        }
+        return data;
+    }
+
+    public String getStringFromUrl(URL url, Map<String, String> vars) {
+        String data = this.getStringFromUrl(url);
+        return this.expandVars(data, vars);
+    }
+
+    public String expandVars(String data, Map<String, String> vars) {
+        Iterator<Map.Entry<String, String>> it = vars.entrySet().iterator();
+        while (it.hasNext()) {
+            Map.Entry<String, String> entry = it.next();
+            data = replaceVariable(data, entry.getKey(), entry.getValue());
+        }
+        return data;
+    }
+
+    private String replaceVariable(String text, String varName,
+        String replacementString) {
+        String searchString = "%(".concat(varName).concat(")");
+        StringBuffer sBuffer = new StringBuffer();
+        int pos = 0;
+        while ((pos = text.indexOf(searchString)) != -1) {
+            sBuffer.append(text.substring(0, pos) + replacementString);
+            text = text.substring(pos + searchString.length());
+        }
+        sBuffer.append(text);
+        return sBuffer.toString();
+    }
+
+    public String getURLBase(URL fileURL) {
+        if (fileURL != null) {
+            String urlStr = fileURL.toString();
+            int index = urlStr.lastIndexOf('/');
+            if (index == urlStr.length() - 1) {
+                // It is a / ending the URL, get the previous one
+                index = urlStr.substring(0, index).lastIndexOf('/');
+            }
+            return urlStr.substring(0, index + 1);
+        }
+        return null;
+    }
+
+    // public String generateContributorsPage(AboutParticipant participant) {
+    // String fileString=null;
+    //
+    // String page=null;
+    //
+    // URL resource = participant.getDescription();
+    // if( resource!=null ) {
+    // page = this.getStringFromUrl(resource);
+    // }
+    //
+    // if( page != null ) {
+    // String[] s = fileString.split("</body>");
+    // String result = "";
+    // for(int i=0;i<s.length-1;i++){
+    // result = result + s[i];
+    // if(i<s.length-2){
+    // result = result + "</body>";
+    // }
+    // }
+    // }
+    //
+    // //Si tiene contribuciones
+    // List contributions = participant.getContributions();
+    // if(contributions.size()>0){
+    // String table = "\t<div style=\"padding-top:5px\">\n" +
+    // "\t\t<div style=\"background-color: white;padding-top: 5px\">\n" +
+    // "\t\t\t<center><h3>Contribuciones realizadas</h3></center>\n" +
+    // "\t\t\t<br>\n" +
+    // "\t\t\t<table width=\"100%\" border=\"1\">\n" +
+    // "\t\t\t\t<tr>\n" +
+    // "\t\t\t\t\t<td valign=\"top\" align=\"center\">Nombre</td>\n" +
+    // "\t\t\t\t\t<td valign=\"top\" align=\"center\">Descripcion</td>\n" +
+    // "\t\t\t\t\t<td valign=\"top\" colspan=\"2\" align=\"center\">Periodo</td>\n"
+    // +
+    // "\t\t\t\t</tr>\n";
+    // Iterator it = contributions.iterator();
+    // SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
+    // while(it.hasNext()){
+    // AboutContribution ap = (AboutContribution)it.next();
+    // String cont = "";
+    // if(ap.getDescription()!=null){
+    // cont=ap.getDescription();
+    // }
+    //
+    // table = table +
+    // "\t\t\t\t<tr>\n" +
+    // "\t\t\t\t\t <td valign=\"top\">"+ap.getTitle()+"</td>\n" +
+    // "\t\t\t\t\t <td valign=\"top\">"+cont+"</td>\n" +
+    // "\t\t\t\t\t  <td valign=\"top\">"+formatter.format(ap.getBegin().getTime())+"</td>\n"
+    // +
+    // "\t\t\t\t\t  <td valign=\"top\">"+formatter.format(ap.getEnd().getTime())+"</td>\n"
+    // +
+    // "\t\t\t\t</tr>\n" ;
+    // }
+    // table = table + "\t\t\t</table>\n\t\t</div>\n\t</div>\n";
+    // result = result + table+"</body>\n";
+    // }
+    //
+    //
+    // result = result+s[s.length-1];
+    // return result;
+    // }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/package.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.scripting.impl package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library default implementation description.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#packagecomment">Javadoc Tool documentation about the package file</a></p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutContribution.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutContribution.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutContribution.java	(revision 42196)
@@ -0,0 +1,91 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import java.util.Date;
+
+import org.gvsig.about.AboutContribution;
+import org.gvsig.about.AboutManager;
+import org.gvsig.about.AboutParticipant;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultAboutContribution implements AboutContribution {
+
+    private AboutParticipant participant;
+    private Date begin;
+    private Date end;
+    private String description;
+    private String title;
+
+    public DefaultAboutContribution(AboutParticipant participant, String title,
+        String description, Date begin, Date end) {
+        this.participant = participant;
+        this.title = title;
+        this.description = description;
+        this.begin = begin;
+        this.end = end;
+    }
+
+    public DefaultAboutContribution(AboutManager manager, String tipo,
+        String participantName, String title, String description, Date begin,
+        Date end) {
+        AboutParticipant ap = null;
+        if (tipo.equals("AboutDeveloper")) {
+            ap = manager.getDeveloper(participantName);
+        } else
+            if (tipo.equals("AboutSponsor")) {
+                ap = manager.getSponsor(participantName);
+            } else
+                if (tipo.equals("AboutTranslator")) {
+                    ap = manager.getTranslator(participantName);
+                }
+        this.participant = ap;
+        this.title = title;
+        this.description = description;
+        this.begin = begin;
+        this.end = end;
+    }
+
+    public String getTitle() {
+        return this.title;
+    }
+
+    public Date getEnd() {
+        return this.end;
+    }
+
+    public Date getBegin() {
+        return this.begin;
+    }
+
+    public AboutParticipant getParticipant() {
+        return this.participant;
+    }
+
+    public String getDescription() {
+        return this.description;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/AbstractParticipant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/AbstractParticipant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/AbstractParticipant.java	(revision 42196)
@@ -0,0 +1,226 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import org.gvsig.about.AboutContribution;
+import org.gvsig.about.AboutManager;
+import org.gvsig.about.AboutParticipant;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class AbstractParticipant implements AboutParticipant {
+
+    private String name;
+    private URL description;
+    private int priority;
+    private URL icon;
+    protected List<AboutContribution> contributions;
+    private DefaultAboutManager manager;
+    private Map<String, String> vars;
+
+    public AbstractParticipant(AboutManager manager, String name,
+        URL description, int priority, URL icon) {
+        this.manager = (DefaultAboutManager) manager;
+        this.name = name;
+        this.description = description;
+        this.priority = priority;
+        this.icon = icon;
+        this.contributions = new ArrayList<AboutContribution>();
+        this.vars = new HashMap<String, String>();
+    }
+
+    public void addVariables(Map<String, String> vars) {
+        this.vars.putAll(vars);
+    }
+
+    public void set(String name, String value) {
+        this.vars.put(name, value);
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public URL getDescription() {
+        return this.description;
+    }
+
+    public int getPriority() {
+        return this.priority;
+    }
+
+    @Override
+    public String toString() {
+        return this.name;
+    }
+
+    public URL getIcon() {
+        return this.icon;
+    }
+
+    public AboutManager getManager() {
+        return this.manager;
+    }
+
+    protected Date getDate(int year, int month, int day) {
+        Calendar cal = Calendar.getInstance();
+        cal.set(year, month, day);
+        return cal.getTime();
+    }
+
+    public AboutContribution addContribution(String title, String description,
+        int begin_year, int begin_month, int begin_day, int end_year,
+        int end_month, int end_day) {
+        return this.addContribution(title, description,
+            getDate(begin_year, begin_month, begin_day),
+            getDate(end_year, end_month, end_day));
+    }
+
+    public AboutContribution addContribution(String title, String description,
+        Date begin, Date end) {
+        AboutContribution contribution =
+            new DefaultAboutContribution(this, title, description, begin, end);
+        // Añadimos a la lista de contribuciones
+        this.contributions.add(contribution);
+        // Ordenamos por fecha de inicio
+        Collections.sort(this.contributions,
+            new Comparator<AboutContribution>() {
+
+                public int compare(AboutContribution p1, AboutContribution p2) {
+                    if (p1.getBegin().before(p2.getBegin())) {
+                        return -1;
+                    } else
+                        if (p1.getBegin().after(p2.getBegin())) {
+                            return 1;
+                        } else {
+                            return 0;
+                        }
+                }
+            });
+
+        return contribution;
+    }
+
+    public List<AboutContribution> getContributions() {
+        return this.contributions;
+    }
+
+    public String getInformationPage() {
+        String description = null;
+        String contributionsTable = this.getContributionsTable();
+
+        if (this.description != null) {
+            description = manager.getStringFromUrl(this.description, this.vars);
+        }
+        if (description == null) {
+            return "<html>\n" // Begin html
+                + "<body>\n" + contributionsTable + "</body>\n" // Body
+                + "</html>"; // End html
+        }
+
+        String baseTag =
+            "<base href=\"" + manager.getURLBase(getDescription()) + "\"/>";
+
+        int index = description.indexOf("<head>");
+        if (index > -1) {
+            description =
+                description.substring(0, index) // HTML init
+                    + "<head>"
+                    + baseTag
+                    + description.substring(index + "<head>".length());
+        } else {
+            index = description.indexOf("<html>");
+            if (index > -1) {
+                description =
+                    description.substring(0, index + "<html>".length())
+                        + "<head>" + baseTag + "</head>" // Head
+                        + description.substring(index + "<html>".length());
+            } else {
+                description = "<head>" + baseTag + "</head>" // Head
+                    + description;
+            }
+        }
+
+        if (description.toLowerCase().indexOf("</body>") < 0) {
+            return description + "\n" + contributionsTable;
+        }
+        return Pattern.compile("</body>", Pattern.CASE_INSENSITIVE)
+            .matcher(description)
+            .replaceFirst(contributionsTable + "\n</body>");
+    }
+
+    public String getContributionsTable() {
+        List<AboutContribution> contributions = this.getContributions();
+        if (contributions.size() < 1) {
+            return "";
+        }
+        String table =
+            "\t<div style=\"padding-top:5px\">\n"
+                + "\t\t<div style=\"background-color: white;padding-top: 5px\">\n"
+                + "\t\t\t<center><h3>Contribuciones realizadas</h3></center>\n"
+                + "\t\t\t<br>\n"
+                + "\t\t\t<table width=\"100%\" border=\"1\">\n"
+                + "\t\t\t\t<tr>\n"
+                + "\t\t\t\t\t<td valign=\"top\" align=\"center\">Nombre</td>\n"
+                + "\t\t\t\t\t<td valign=\"top\" align=\"center\">Descripcion</td>\n"
+                + "\t\t\t\t\t<td valign=\"top\" colspan=\"2\" align=\"center\">Periodo</td>\n"
+                + "\t\t\t\t</tr>\n";
+        Iterator<AboutContribution> it = contributions.iterator();
+        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
+        while (it.hasNext()) {
+            AboutContribution ap = it.next();
+            String cont = "";
+            if (ap.getDescription() != null) {
+                cont = ap.getDescription();
+            }
+
+            table =
+                table + "\t\t\t\t<tr>\n" + "\t\t\t\t\t <td valign=\"top\">"
+                    + ap.getTitle() + "</td>\n"
+                    + "\t\t\t\t\t <td valign=\"top\">" + cont + "</td>\n"
+                    + "\t\t\t\t\t  <td valign=\"top\">"
+                    + formatter.format(ap.getBegin().getTime()) + "</td>\n"
+                    + "\t\t\t\t\t  <td valign=\"top\">"
+                    + formatter.format(ap.getEnd().getTime()) + "</td>\n"
+                    + "\t\t\t\t</tr>\n";
+        }
+        table = table + "\t\t\t</table>\n\t\t</div>\n\t</div>\n";
+        return table;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutSponsor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutSponsor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutSponsor.java	(revision 42196)
@@ -0,0 +1,45 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import java.net.URL;
+
+import org.gvsig.about.AboutSponsor;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultAboutSponsor extends AbstractParticipant implements
+    AboutSponsor {
+
+    public DefaultAboutSponsor(DefaultAboutManager manager, String name,
+        URL description, int priority, URL icon) {
+        super(manager, name, description, priority, icon);
+    }
+
+    public DefaultAboutSponsor(DefaultAboutManager manager, String name,
+        URL description, int priority) {
+        super(manager, name, description, priority, null);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutDeveloper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutDeveloper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutDeveloper.java	(revision 42196)
@@ -0,0 +1,46 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import java.net.URL;
+
+import org.gvsig.about.AboutDeveloper;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultAboutDeveloper extends AbstractParticipant implements
+    AboutDeveloper {
+
+    public DefaultAboutDeveloper(DefaultAboutManager manager, String name,
+        URL description, int priority, URL icon) {
+        super(manager, name, description, priority, icon);
+    }
+
+    public DefaultAboutDeveloper(DefaultAboutManager manager, String name,
+        URL description, int priority) {
+        super(manager, name, description, priority, null);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/AboutDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/AboutDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/AboutDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,52 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import org.gvsig.about.AboutLibrary;
+import org.gvsig.about.AboutLocator;
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class AboutDefaultImplLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(AboutLibrary.class);
+        require(ToolsLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        AboutLocator.registerManager(DefaultAboutManager.class);
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutProject.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutProject.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/main/java/org/gvsig/about/impl/DefaultAboutProject.java	(revision 42196)
@@ -0,0 +1,93 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about.impl;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.about.AboutProject;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultAboutProject implements AboutProject {
+
+    protected String name;
+    protected URL description;
+    protected URL icon;
+    private DefaultAboutManager manager;
+    private Map<String, String> vars;
+
+    public DefaultAboutProject(DefaultAboutManager manager, String name,
+        URL description, URL icon) {
+        this(manager, name, description, icon, null);
+    }
+
+    public DefaultAboutProject(DefaultAboutManager manager, String name,
+        URL description, URL icon, Map<String, String> vars) {
+        this.manager = manager;
+        this.name = name;
+        this.description = description;
+        this.icon = icon;
+        this.vars = new HashMap<String, String>();
+        if (vars != null) {
+            this.vars.putAll(vars);
+        }
+    }
+
+    public void set(String name, String value) {
+        this.vars.put(name, value);
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public URL getDescription() {
+        return this.description;
+    }
+
+    public URL getIcon() {
+        return this.icon;
+    }
+
+    @Override
+    public String toString() {
+        return this.name;
+    }
+
+    public String getInformationPage() {
+        String description = null;
+
+        if (this.description != null) {
+            description = manager.getStringFromUrl(this.description, this.vars);
+        }
+        if (description == null) {
+            return "<html><body></body></html>";
+        }
+        return description;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/test/java/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/test/java/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/src/test/java/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+For each class you are going to test, create one Test class with the same
+name as the class to test, ending with Test.
+
+For example, the unit tests of the "ExampleLibrary" class are performed
+by the "ExampleLibraryTest" class.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl/pom.xml	(revision 42196)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.about.impl</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+	<description>"About us..." dialog library implementation</description>
+	<parent>
+		<groupId>org.gvsig</groupId>
+		<artifactId>org.gvsig.about</artifactId>
+		<version>2.0.97</version>
+	</parent>
+	<dependencies>
+		<dependency>
+			<groupId>org.gvsig</groupId>
+			<artifactId>org.gvsig.about.api</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.gvsig</groupId>
+			<artifactId>org.gvsig.tools.lib</artifactId>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.impl
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/javadoc/overview.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/javadoc/overview.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/javadoc/overview.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.scripting package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library overview.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.about.AboutLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/org/gvsig/about/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/org/gvsig/about/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/org/gvsig/about/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the Spanish language locale (es)
+Example.returns_value=devuelve el valor
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/org/gvsig/about/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/org/gvsig/about/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/org/gvsig/about/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the English language locale (en)
+Example.returns_value=returns value
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/overview.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/overview.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/resources/overview.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.scripting package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library overview.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutLocator.java	(revision 42196)
@@ -0,0 +1,83 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class AboutLocator extends BaseLocator {
+
+    private static final String LOCATOR_NAME = "AboutLocator";
+
+    public static final String MANAGER_NAME = "aboutlocator.manager";
+
+    public static final String MANAGER_DESCRIPTION = "About Manager";
+
+    /**
+     * Unique instance.
+     */
+    private static final AboutLocator instance = new AboutLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static AboutLocator getInstance() {
+        return instance;
+    }
+
+    @Override
+    public String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to AboutManager.
+     * 
+     * @return a reference to AboutManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static AboutManager getManager() throws LocatorException {
+        return (AboutManager) getInstance().get(MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the AboutManager interface.
+     * 
+     * @param clazz
+     *            implementing the AboutManager interface
+     */
+    public static void registerManager(Class<? extends AboutManager> clazz) {
+        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutSponsor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutSponsor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutSponsor.java	(revision 42196)
@@ -0,0 +1,31 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface AboutSponsor extends AboutParticipant {
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/package.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.scripting package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library description.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#packagecomment">Javadoc Tool documentation about the package file</a></p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutLibrary.java	(revision 42196)
@@ -0,0 +1,49 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class AboutLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(AboutLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Nothing to do
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutDeveloper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutDeveloper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutDeveloper.java	(revision 42196)
@@ -0,0 +1,31 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface AboutDeveloper extends AboutParticipant {
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutProject.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutProject.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutProject.java	(revision 42196)
@@ -0,0 +1,42 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+import java.net.URL;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface AboutProject {
+
+    public String getName();
+
+    public URL getDescription();
+
+    public URL getIcon();
+
+    public String getInformationPage();
+
+    public void set(String name, String value);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutTranslator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutTranslator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutTranslator.java	(revision 42196)
@@ -0,0 +1,31 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface AboutTranslator extends AboutParticipant {
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutManager.java	(revision 42196)
@@ -0,0 +1,101 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface AboutManager {
+
+    public void setProject(String name, URL description, URL icon);
+
+    public void setProject(String name, URL description, URL icon,
+        Map<String, String> vars);
+
+    /**
+     * Add a developer information if not exists
+     */
+    public AboutParticipant addDeveloper(String name, URL description,
+        int priority);
+
+    public AboutParticipant addDeveloper(String name, URL description,
+        int priority, URL icon);
+
+    /**
+     * Add a sponsor information if not exists
+     */
+    public AboutParticipant addSponsor(String name, URL description,
+        int priority);
+
+    public AboutParticipant addSponsor(String name, URL description,
+        int priority, URL icon);
+
+    /**
+     * Add a translator information if not exists
+     */
+    public AboutParticipant addTranslator(String name, URL description,
+        int priority);
+
+    public AboutParticipant addTranslator(String name, URL description,
+        int priority, URL icon);
+
+    public AboutProject getProject();
+
+    public List<AboutDeveloper> getDevelopers();
+
+    public List<AboutSponsor> getSponsors();
+
+    public List<AboutTranslator> getTranslators();
+
+    public AboutSponsor getSponsor(String name);
+
+    public AboutDeveloper getDeveloper(String name);
+
+    public AboutTranslator getTranslator(String name);
+
+    /* API of the swing part */
+    public JPanel getAboutPanel();
+
+    /**
+     * Returns the base path of a file URL.
+     * <p>
+     * The method will simply cut the last path of the URL. 
+     * For example, if the URL is:
+     * </p>
+     * http://www.gvsig.org/docs/file.html
+     * <p>
+     * The returned base string would be:
+     * </p>
+     * http://www.gvsig.org/docs/
+     * @param fileURL the {@link URL} of the file
+     * @return the base path of a file URL
+     */
+    public String getURLBase(URL fileURL);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutParticipant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutParticipant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutParticipant.java	(revision 42196)
@@ -0,0 +1,63 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+import java.net.URL;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface AboutParticipant {
+
+    public String getName();
+
+    public int getPriority();
+
+    public URL getDescription();
+
+    public URL getIcon();
+
+    public List<AboutContribution> getContributions();
+
+    public AboutContribution addContribution(String title, String description,
+        Date begin, Date end);
+
+    public AboutContribution addContribution(String title, String description,
+        int begin_year, int begin_month, int begin_day, int end_year,
+        int end_month, int end_day);
+
+    public String getInformationPage();
+
+    public String getContributionsTable();
+
+    public AboutManager getManager();
+
+    public void addVariables(Map<String, String> vars);
+
+    public void set(String name, String value);
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutContribution.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutContribution.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/main/java/org/gvsig/about/AboutContribution.java	(revision 42196)
@@ -0,0 +1,43 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.about;
+
+import java.util.Date;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface AboutContribution {
+
+    public String getTitle();
+
+    public Date getEnd();
+
+    public Date getBegin();
+
+    public AboutParticipant getParticipant();
+
+    public String getDescription();
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/test/java/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/test/java/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/src/test/java/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+For each class you are going to test, create one Test class with the same
+name as the class to test, ending with Test.
+
+For example, the unit tests of the "ExampleLibrary" class are performed
+by the "ExampleLibraryTest" class.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api/pom.xml	(revision 42196)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.about.api</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+	<description>"About us..." dialog library API</description>
+	<parent>
+		<groupId>org.gvsig</groupId>
+		<artifactId>org.gvsig.about</artifactId>
+		<version>2.0.97</version>
+	</parent>
+	<dependencies>
+		<dependency>
+			<groupId>org.gvsig</groupId>
+			<artifactId>org.gvsig.tools.lib</artifactId>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/org.gvsig.about.api
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.about/pom.xml	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.about</artifactId>
+	<packaging>pom</packaging>
+	<name>org.gvsig.about</name>
+	<description>"About us..." dialog library</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.library</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+	<modules>
+		<module>org.gvsig.about.api</module>
+		<module>org.gvsig.about.impl</module>
+	</modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/JAnnotationServicePanelTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/JAnnotationServicePanelTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/JAnnotationServicePanelTest.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+import org.gvsig.annotation.AnnotationCreationException;
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * API compatibility tests for {@link JAnnotationCreationServicePanel}
+ * implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class JAnnotationServicePanelTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    protected AnnotationManager manager;
+    protected AnnotationSwingManager swingManager;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        swingManager = AnnotationSwingLocator.getSwingManager();
+        manager = swingManager.getManager();
+    }
+
+    public void testJAnnotationServicePanel() throws ServiceException,
+        AnnotationCreationException, DataException {
+        assertNotNull(swingManager);
+        AnnotationCreationService cookie = manager.getAnnotationCreationService(null);
+        //cookie.getMessage();
+
+        JAnnotationCreationServicePanel panel =
+            swingManager.createAnnotation(cookie);
+        assertEquals(cookie, panel.getAnnotationCreationService());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/JAnnotationServicePanelTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationSwingManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationSwingManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationSwingManagerTest.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationLocator;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * API compatibility tests for {@link AnnotationSwingManager}
+ * implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AnnotationSwingManagerTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    protected AnnotationManager manager;
+    protected AnnotationSwingManager swingManager;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        manager = AnnotationLocator.getManager();
+        swingManager = AnnotationSwingLocator.getSwingManager();
+    }
+
+    public void testGetManager() {
+        assertEquals(manager, swingManager.getManager());
+    }
+
+    public void testCreationJAnnotationServicePanel()
+        throws ServiceException, DataException {
+        AnnotationCreationService annotationCreationService = manager.getAnnotationCreationService(null);
+
+        JAnnotationCreationServicePanel panel1 =
+            swingManager.createAnnotation(annotationCreationService);
+
+        assertNotNull(panel1);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationSwingManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationWindowManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationWindowManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationWindowManagerTest.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * API compatibility tests for {@link AnnotationWindowManager}
+ * implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AnnotationWindowManagerTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    @Override
+    protected void doSetUp() throws Exception {
+
+    }
+
+    public void testUno() {
+        // FIXME: fltan por implementar
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/test/java/org/gvsig/annotation/swing/AnnotationWindowManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.annotation.swing.AnnotationSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationCreationServicePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationCreationServicePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationCreationServicePanel.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.AnnotationCreationService;
+
+/**
+ * A panel to show a {@link AnnotationCreationService}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class JAnnotationCreationServicePanel extends JPanel{
+    private static final long serialVersionUID = 114900538340226231L;
+    protected AnnotationWizardPanelActionListener annotationWizardPanelActionListener = null;
+
+    /**
+     * Returns the {@link AnnotationCreationService} associated with the panel.
+     * 
+     * @return the {@link AnnotationCreationService}
+     */
+    public abstract AnnotationCreationService getAnnotationCreationService();
+
+	public void setAnnotationServicePanelActionListener(AnnotationWizardPanelActionListener annotationWizardPanelActionListener) {
+		this.annotationWizardPanelActionListener = annotationWizardPanelActionListener;
+	}
+
+	public AnnotationWizardPanelActionListener getAnnotationServicePanelActionListener() {
+		return annotationWizardPanelActionListener;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationCreationServicePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingManager.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * This class is responsible of the management of the library's swing user
+ * interface. It is the swing library's main entry point, and provides all the
+ * services to manage library swing components.
+ * 
+ * @see AnnotationWindowManager
+ * @see JAnnotationCreationServicePanel
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface AnnotationSwingManager {
+
+    /**
+     * Returns the panel associated to a {@link AnnotationCreationService}.
+     * 
+     * @param annotationCreationService
+     *            {@link AnnotationCreationService} contained on the panel
+     * @return a {@link JAnnotationCreationServicePanel} with the panel of the
+     *         {@link AnnotationCreationService}
+     * @throws DataException 
+     * @see JAnnotationCreationServicePanel
+     * @see AnnotationCreationService
+     */
+    public JAnnotationCreationServicePanel createAnnotation(AnnotationCreationService annotationCreationService) throws ServiceException;
+   
+    public JAnnotationPreferencesPanel createAnnotationPreferences();
+    
+    /**
+     * Returns the {@link AnnotationManager}.
+     * 
+     * @return {@link AnnotationManager}
+     * @see {@link AnnotationManager}
+     */
+    public AnnotationManager getManager();
+
+
+	public String getTranslation(String key);
+	
+    /**
+     * Registers a new instance of a WindowManager which provides services to
+     * the management of the application windows.
+     * 
+     * @param manager
+     *            {@link LandRegistryViewerWindowManager} to register in the
+     *            ScriptingUIManager.
+     * @see LandRegistryViewerWindowManager
+     */
+    public void registerWindowManager(AnnotationWindowManager manager);
+
+    /**
+     * Returns the {@link LandRegistryViewerWindowManager}.
+     * 
+     * @return {@link LandRegistryViewerWindowManager}
+     * @see {@link LandRegistryViewerWindowManager}
+     */
+    public AnnotationWindowManager getWindowManager();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWindowManager.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+
+
+/**
+ * Responsible of the window management to show the panels of the
+ * Annotation swing library.
+ * 
+ * @see AnnotationSwingManager
+ * @see JAnnotationCreationServicePanel
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public interface AnnotationWindowManager {
+
+    public static final int MODE_DIALOG = 1;
+    public static final int MODE_WINDOW = 2;
+    public static final int MODE_TOOL = 3;
+
+    /**
+     * Inserts a Panel in a window with a characteristic properties.
+     * 
+     * @param panel
+     *            JPanel with the content of the window
+     * @param title
+     *            String with the title of the window
+     * @param mode
+     *            int that defines the type of window
+     */
+    public void showWindow(JAnnotationCreationServicePanel panel, String title, int mode);
+    
+	public boolean showFileExistsPopup(String title, String text);
+	
+	public void showPreferencesWindow(JAnnotationPreferencesPanel panel, String title, int mode);
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.annotation package documentation</title>
+</head>
+<body>
+
+	<p>Annotation swing library API.</p>
+	
+	<p>
+	It allows to get swing panels to show Annotation, and to include them in windows.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWizardPanelActionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWizardPanelActionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWizardPanelActionListener.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing;
+/**
+ * <p>
+ * Listener for the wizard. It controls
+ * the events thrown by the wizard.
+ * </p> 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface AnnotationWizardPanelActionListener {
+
+	/**
+	 * When the wizard is closed this event is thrown.
+	 */
+	public void finish(JAnnotationCreationServicePanel annotationCreationServicePanel);
+	
+	public void cancel(JAnnotationCreationServicePanel annotationCreationServicePanel);
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationWizardPanelActionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLocator.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+import org.gvsig.tools.locator.BaseLocator;
+
+/**
+ * This locator is the entry point for the Annotation swing library,
+ * providing access to all Annotation swing services through the
+ * {@link AnnotationSwingManager} .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AnnotationSwingLocator extends BaseLocator {
+
+    /**
+     * Annotation swing manager name.
+     */
+    public static final String SWING_MANAGER_NAME =
+        "Annotation.swing.manager";
+
+    /**
+     * Annotation swing manager description.
+     */
+    public static final String SWING_MANAGER_DESCRIPTION =
+        "Annotation UIManager";
+
+    private static final String LOCATOR_NAME = "Annotation.swing.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final AnnotationSwingLocator INSTANCE =
+        new AnnotationSwingLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static AnnotationSwingLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Registers the Class implementing the PersistenceManager interface.
+     * 
+     * @param clazz
+     *            implementing the PersistenceManager interface
+     */
+    public static void registerSwingManager(
+        Class<? extends AnnotationSwingManager> clazz) {
+        getInstance().register(SWING_MANAGER_NAME, SWING_MANAGER_DESCRIPTION,
+            clazz);
+    }
+
+    /**
+     * Gets the instance of the {@link ScriptingUIManager} registered.
+     * 
+     * @return {@link ScriptingUIManager}
+     */
+    public static AnnotationSwingManager getSwingManager() {
+        return (AnnotationSwingManager) getInstance()
+            .get(SWING_MANAGER_NAME);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationPreferencesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationPreferencesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationPreferencesPanel.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing;
+
+import javax.swing.JPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public abstract class JAnnotationPreferencesPanel extends JPanel{
+	 	    
+	    public abstract String getDefaultFontType();
+	    
+	    public abstract void setDefaultFontType(String fontType);	  
+	    
+	    public abstract String getDefaultFontStyle();
+	    
+	    public abstract void setDefaultFontStyle(String fontStyle);	  	 
+	        
+	    public abstract int getDefaultFontColor();
+	    
+	    public abstract void setDefaultFontColor(int fontColor);
+	    
+	    public abstract double getDefaultFontHeight();
+	    
+	    public abstract void setDefaultFontHeight(double fontHeight);
+	    
+	    public abstract double getDefaultFontRotation();
+	    
+	    public abstract void setDefaultFontRotation(double fontRotation);      
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/JAnnotationPreferencesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLibrary.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing;
+
+import org.gvsig.annotation.AnnotationLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for Swing API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AnnotationSwingLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(AnnotationSwingLibrary.class);
+        require(AnnotationLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        AnnotationSwingManager manager =
+            AnnotationSwingLocator.getSwingManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                AnnotationSwingLocator.SWING_MANAGER_NAME,
+                AnnotationSwingLocator.getInstance());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/src/main/java/org/gvsig/annotation/swing/AnnotationSwingLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/pom.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.annotation.swing.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.annotation.swing</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.annotation.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.classpath
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.classpath	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.classpath	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.project
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.project	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.project	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.gvsig.annotation.swing.impl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.annotation">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManagerTest.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+
+/**
+ * {@link AnnotationSwingManager} API compatibility tests for the
+ * {@link DefaultAnnotationSwingManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationSwingManagerTest //extends
+//    AnnotationSwingManagerTest 
+{
+
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManagerTest.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import org.gvsig.annotation.swing.AnnotationWindowManager;
+import org.gvsig.annotation.swing.AnnotationWindowManagerTest;
+
+/**
+ * {@link AnnotationWindowManager} API compatibility tests for the
+ * {@link DefaultAnnotationWindowManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationWindowManagerTest extends
+    AnnotationWindowManagerTest {
+
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationServicePanelTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationServicePanelTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationServicePanelTest.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import org.gvsig.annotation.swing.JAnnotationCreationServicePanel;
+
+/**
+ * {@link JAnnotationCreationServicePanel} API compatibility tests for the
+ * {@link DefaultJAnnotationCreationServicePanel} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultJAnnotationServicePanelTest //extends
+  //  JAnnotationServicePanelTest 
+{
+
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/test/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationServicePanelTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/WizardListenerAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/WizardListenerAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/WizardListenerAdapter.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.annotation.swing.impl;
+
+import java.io.File;
+
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatus;
+
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class WizardListenerAdapter implements WizardPanelActionListener {
+	private DefaultJAnnotationCreationServicePanel annotationCreationServicePanel;
+	private AnnotationSwingManager annotationSwingManager = null;
+
+	public WizardListenerAdapter(
+			DefaultJAnnotationCreationServicePanel annotationCreationServicePanel) {
+		super();
+		this.annotationCreationServicePanel = annotationCreationServicePanel;
+		this.annotationSwingManager = AnnotationSwingLocator.getSwingManager();
+	}
+
+	public void cancel(WizardPanel wizardPanel) {
+		TaskStatus taskStatus = annotationCreationServicePanel.getAnnotationCreationService().getTaskStatus();
+		if(taskStatus instanceof SimpleTaskStatus){
+			((SimpleTaskStatus)taskStatus).cancel();
+		}
+		if (annotationCreationServicePanel.getAnnotationServicePanelActionListener() != null){
+			annotationCreationServicePanel.getAnnotationServicePanelActionListener().cancel(annotationCreationServicePanel);	
+		}
+	}
+
+	public void finish(WizardPanel wizardPanel) {
+		if (annotationCreationServicePanel.getAnnotationServicePanelActionListener() != null){
+			File file = new File(annotationCreationServicePanel.getDestinationShapeFile());
+
+			boolean continueIfExists = true;
+
+			if (file.exists()){
+				continueIfExists = annotationSwingManager.getWindowManager().showFileExistsPopup(Messages.getText("guardar"),
+						Messages.getText("fichero_ya_existe_seguro_desea_guardarlo"));
+			}
+
+			if (continueIfExists){
+			    annotationCreationServicePanel.createAnnotation();
+			}
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/WizardListenerAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationPreferencesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationPreferencesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationPreferencesPanel.java	(revision 42196)
@@ -0,0 +1,317 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.annotation.swing.JAnnotationPreferencesPanel;
+import org.gvsig.gui.beans.colorchooser.ColorChooser;
+
+/**
+ * 
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es> 01/11/2008
+ *
+ */
+public class DefaultJAnnotationPreferencesPanel extends JAnnotationPreferencesPanel{
+	private static final long serialVersionUID = 8893693122931478526L;
+	private JLabel jLabel1 = null;
+	private JComboBox cmbTypeFont = null;
+	private JLabel jLabel2 = null;
+	private JComboBox cmbStyleFont = null;
+	private JLabel jLabel3 = null;
+	private JTextField txtHeight = null;
+	private JLabel jLabel4 = null;
+	private ColorChooser colorPanel = null;
+	private JLabel jLabel5 = null;
+	private JTextField txtRotate = null;
+	
+	private AnnotationManager annotationManager = null;
+	private AnnotationSwingManager annotationSwingManager = null;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public DefaultJAnnotationPreferencesPanel(AnnotationManager annotationManager) {
+		super();
+		this.annotationSwingManager = AnnotationSwingLocator.getSwingManager();
+		this.annotationManager = annotationManager;
+		initialize();		
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		this.setLayout(new GridBagLayout());
+		Insets rightInsets = new Insets(4,4,4,0);
+		Insets leftInsets = new Insets(4,0,4,4);
+		GridBagConstraints txtRotationConstraints = new GridBagConstraints();
+		txtRotationConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		txtRotationConstraints.gridy = 5;
+		txtRotationConstraints.weightx = 1.0;
+		txtRotationConstraints.gridx = 1;
+		txtRotationConstraints.insets = rightInsets;
+		
+		GridBagConstraints gridBagConstraints10 = new GridBagConstraints();
+		gridBagConstraints10.gridx = 0;
+		gridBagConstraints10.gridy = 5;
+		gridBagConstraints10.insets = leftInsets;
+		gridBagConstraints10.anchor = GridBagConstraints.WEST;
+		
+		jLabel5 = new JLabel();
+		jLabel5.setText(annotationSwingManager.getTranslation("fontrotate"));
+		
+		GridBagConstraints colorChooserConstraints = new GridBagConstraints();
+		colorChooserConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		colorChooserConstraints.anchor = GridBagConstraints.WEST;
+		colorChooserConstraints.gridy = 4;
+		colorChooserConstraints.weightx = 1.0;
+		colorChooserConstraints.gridx = 1;
+		colorChooserConstraints.insets = rightInsets;
+		
+		GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
+		gridBagConstraints8.gridx = 0;
+		gridBagConstraints8.gridy = 4;
+		gridBagConstraints8.anchor = GridBagConstraints.WEST;
+		gridBagConstraints8.insets = leftInsets;
+		
+		jLabel4 = new JLabel();
+		jLabel4.setText(annotationSwingManager.getTranslation("fontcolor"));
+		
+		GridBagConstraints txtHeightConstraints = new GridBagConstraints();
+		txtHeightConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		txtHeightConstraints.gridy = 3;
+		txtHeightConstraints.weightx = 1.0;
+		txtHeightConstraints.gridx = 1;
+		txtHeightConstraints.insets = rightInsets;
+		
+		GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+		gridBagConstraints6.gridx = 0;
+		gridBagConstraints6.gridy = 3;
+		gridBagConstraints6.anchor = GridBagConstraints.WEST;
+		gridBagConstraints6.insets = leftInsets;
+		
+		jLabel3 = new JLabel();
+		jLabel3.setText(annotationSwingManager.getTranslation("fontheight"));
+		
+		GridBagConstraints fontStyleConstraints = new GridBagConstraints();
+		fontStyleConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		fontStyleConstraints.gridy = 2;
+		fontStyleConstraints.weightx = 1.0;
+		fontStyleConstraints.gridx = 1;
+		fontStyleConstraints.insets = rightInsets;
+		
+		GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+		gridBagConstraints4.gridx = 0;
+		gridBagConstraints4.gridy = 2;
+		gridBagConstraints4.anchor = GridBagConstraints.WEST;
+		gridBagConstraints4.insets = leftInsets;
+		
+		
+		jLabel2 = new JLabel();
+		jLabel2.setText(annotationSwingManager.getTranslation("fontstyle"));
+		
+		GridBagConstraints fontTypeConstraints = new GridBagConstraints();
+		fontTypeConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		fontTypeConstraints.gridy = 1;
+		fontTypeConstraints.weightx = 1.0;
+		fontTypeConstraints.gridx = 1;
+		fontTypeConstraints.insets = rightInsets;
+		
+		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+		gridBagConstraints2.gridx = 0;
+		gridBagConstraints2.gridy = 1;
+		gridBagConstraints2.anchor = GridBagConstraints.WEST;
+		gridBagConstraints2.insets = leftInsets;
+		
+		jLabel1 = new JLabel();
+		jLabel1.setText(annotationSwingManager.getTranslation("fonttype"));
+		jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);
+		jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.LEADING);
+		
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints1.gridy = 0;
+		gridBagConstraints1.weightx = 1.0;
+		gridBagConstraints1.gridx = 1;
+		gridBagConstraints1.insets = rightInsets;
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = leftInsets;
+		
+		this.add(jLabel1, gridBagConstraints2);
+		this.add(getCmbFontType(), fontTypeConstraints);
+		this.add(jLabel2, gridBagConstraints4);
+		this.add(getCmbFontStyle(), fontStyleConstraints);
+		this.add(jLabel3, gridBagConstraints6);
+		this.add(getTxtHeightField(), txtHeightConstraints);
+		this.add(jLabel4, gridBagConstraints8);
+		this.add(getColorChooser(), colorChooserConstraints);
+		this.add(jLabel5, gridBagConstraints10);
+		this.add(getTxtRotationField(), txtRotationConstraints);		
+	}
+
+	/**
+	 * This method initializes txtTypeFont
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JComboBox getCmbFontType() {
+		if (cmbTypeFont == null) {
+			cmbTypeFont = new JComboBox();
+			List<String> types = annotationManager.getFontTypes();
+			for (int i=0 ; i<types.size() ; i++){
+				cmbTypeFont.addItem(types.get(i));
+			}
+			cmbTypeFont.setSelectedItem(annotationManager.getDefaultFontType());
+
+		}
+		return cmbTypeFont;
+	}
+
+	/**
+	 * This method initializes txtStyleFont
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JComboBox getCmbFontStyle() {
+		if (cmbStyleFont == null) {
+			cmbStyleFont = new JComboBox();
+			List<String> styles = annotationManager.getFontStyles();
+			for (int i=0 ; i<styles.size() ; i++){
+				cmbStyleFont.addItem(styles.get(i));
+			}
+			cmbStyleFont.setSelectedItem(annotationManager.getDefaultFontStyle());
+		}
+		return cmbStyleFont;
+	}
+
+	/**
+	 * This method initializes txtHeight
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtHeightField() {
+		if (txtHeight == null) {
+			txtHeight = new JTextField();
+			txtHeight.setText("10");
+		}
+		return txtHeight;
+	}
+
+	/**
+	 * This method initializes txtColor
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private ColorChooser getColorChooser() {
+		if (colorPanel == null) {
+			colorPanel = new ColorChooser();
+			colorPanel.setColor(Color.BLACK);
+		}
+		return colorPanel;
+	}
+
+	/**
+	 * This method initializes txtRotate
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtRotationField() {
+		if (txtRotate == null) {
+			txtRotate = new JTextField();
+			txtRotate.setText("0.0");
+		}
+		return txtRotate;
+	}
+
+	public String getDefaultFontType() {
+		return getCmbFontType().getSelectedItem().toString();
+	}
+
+	public void setDefaultFontType(String typeFont) {
+		getCmbFontType().setSelectedItem(typeFont);
+	}
+
+	/**
+	 * @return {@link java.awt.Font#PLAIN}, {@link java.awt.Font#BOLD}
+	 * or {@link java.awt.Font#ITALIC}
+	 */
+	public String getDefaultFontStyle() {
+		return (String)getCmbFontStyle().getSelectedItem();
+	}
+
+	/**
+	 * One of {@link java.awt.Font#PLAIN}, {@link java.awt.Font#BOLD}
+	 * or {@link java.awt.Font#ITALIC}
+	 * @param style
+	 */
+	public void setDefaultFontStyle(String style) {
+		getCmbFontStyle().setSelectedItem(style);
+	}
+
+	public double getDefaultFontHeight() {
+		return Double.parseDouble(getTxtHeightField().getText());
+	}
+
+	public void setDefaultFontHeight(double height) {
+		getTxtHeightField().setText(new Double(height).toString());
+	}
+
+	public int getDefaultFontColor() {
+	    Color col = getColorChooser().getColor(); 
+	    int resp = (col.getAlpha() << 24) | col.getRGB();
+	    // resp = resp + ;
+		return resp;
+	}
+
+	public void setDefaultFontColor(int color) {
+		getColorChooser().setColor(new Color(color, true));
+	}
+
+	public double getDefaultFontRotation() {
+		return Double.parseDouble(getTxtRotationField().getText());
+	}
+
+	public void setDefaultFontRotation(double rotation) {
+		getTxtRotationField().setText(new Double(rotation).toString());
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationPreferencesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/AnnotationSwingDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/AnnotationSwingDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/AnnotationSwingDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import java.util.Locale;
+
+import org.gvsig.annotation.swing.AnnotationSwingLibrary;
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+
+/**
+ * Library for default swing implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AnnotationSwingDefaultImplLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(AnnotationSwingLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        AnnotationSwingLocator
+            .registerSwingManager(DefaultAnnotationSwingManager.class);
+
+        IconThemeManager themeManager = ToolsSwingLocator.getIconThemeManager();
+        
+        themeManager.getDefault().registerDefault(
+        		this.getClass().getName(), 
+        		"annotation", 
+        		"wizard-annotation", 
+        		null, 
+        		this.getClass().getClassLoader().getResource("org/gvsig/annotation/swing/impl/images/wizard-icon.png")
+        );
+
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        AnnotationSwingLocator.getSwingManager().registerWindowManager(new DefaultAnnotationWindowManager());
+        
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily("org.gvsig.annotation.swing.impl.i18n.text",
+            AnnotationSwingDefaultImplLibrary.class.getClassLoader(),
+            AnnotationSwingDefaultImplLibrary.class.getClass().getName());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/AnnotationSwingDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.annotation package documentation</title>
+</head>
+<body>
+
+	<p>Annotation swing library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationCreationServicePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationCreationServicePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationCreationServicePanel.java	(revision 42196)
@@ -0,0 +1,279 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.ContainerEvent;
+import java.awt.event.ContainerListener;
+
+import javax.swing.JOptionPane;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import org.gvsig.annotation.AnnotationCreationException;
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationCreationServiceException;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.annotation.swing.JAnnotationCreationServicePanel;
+import org.gvsig.annotation.swing.impl.wizard.AnnotationProgressWizard;
+import org.gvsig.annotation.swing.impl.wizard.MainOptionsWizard;
+import org.gvsig.annotation.swing.impl.wizard.OptionalOptionsWizard;
+import org.gvsig.annotation.swing.impl.wizard.SelectOutputFileWizard;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.gvsig.tools.task.TaskStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default implementation for the {@link JAnnotationCreationServicePanel}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultJAnnotationCreationServicePanel extends JAnnotationCreationServicePanel implements WizardPanel{
+
+	private static final Logger LOG =
+		LoggerFactory.getLogger(DefaultJAnnotationCreationServicePanel.class);
+
+	private static final long serialVersionUID = 2965442763236823977L;
+
+	private AnnotationCreationService annotationCreationService;
+	private AnnotationSwingManager annotationSwingManager;
+
+	private WizardPanelWithLogo wizardPanelWithLogo = null;
+
+	private MainOptionsWizard mainOptionsWizard = null;
+	private OptionalOptionsWizard optionalOptionsWizard = null;
+	private SelectOutputFileWizard selectOutputFileWizard = null;
+	private AnnotationProgressWizard annotationProgressWizard = null;
+		
+	private WizardListenerAdapter wizardListenerAdapter = null;
+
+	public DefaultJAnnotationCreationServicePanel(
+			DefaultAnnotationSwingManager annotationSwingManager, AnnotationCreationService annotationCreationService) throws ServiceException {
+
+		super();
+
+        IconThemeManager themeManager = ToolsSwingLocator.getIconThemeManager();
+		wizardPanelWithLogo = new WizardPanelWithLogo(themeManager.getCurrent().get("wizard-annotation"));
+
+		this.annotationCreationService = annotationCreationService;
+		this.annotationSwingManager = annotationSwingManager;
+
+		try {
+			mainOptionsWizard = new MainOptionsWizard(this);
+			optionalOptionsWizard = new OptionalOptionsWizard(this);
+			selectOutputFileWizard = new SelectOutputFileWizard(this);
+			annotationProgressWizard = new AnnotationProgressWizard(this);
+		} catch (DataException e) {
+			new AnnotationCreationServiceException("Exception creating the wizard forms", e);
+		}
+		
+
+		addWizards();
+
+		//Adding the listener
+		wizardPanelWithLogo.setWizardListener(this);		
+
+		setFinishButtonEnabled(false);
+
+		wizardPanelWithLogo.getWizardComponents().getFinishButton().setText(Messages.getText("Comenzar"));
+		
+		this.setLayout(new BorderLayout());
+		this.add(wizardPanelWithLogo, BorderLayout.CENTER);		
+		
+		this.addAncestorListener(new AncestorListener() {
+    		public void ancestorAdded(AncestorEvent ancestorEvent) {
+    		}
+
+    		public void ancestorMoved(AncestorEvent ancestorEvent) {
+    		}
+
+    		public void ancestorRemoved(AncestorEvent ancestorEvent) {
+    			TaskStatus taskStatus = DefaultJAnnotationCreationServicePanel.this.getAnnotationCreationService().getTaskStatus();
+    			taskStatus.getManager().remove(taskStatus);
+    		}
+		});
+	}
+
+	private void addWizards(){
+		wizardPanelWithLogo.addOptionPanel(mainOptionsWizard);	
+		wizardPanelWithLogo.addOptionPanel(optionalOptionsWizard);
+		wizardPanelWithLogo.addOptionPanel(selectOutputFileWizard);	
+	    wizardPanelWithLogo.addOptionPanel(annotationProgressWizard);     
+	}
+
+
+	@Override
+	public AnnotationCreationService getAnnotationCreationService() {
+		return annotationCreationService;
+	}
+
+	public void setFinishButtonEnabled(boolean isEnabled){
+		wizardPanelWithLogo.setFinishButtonEnabled(isEnabled);
+	}
+	
+	public void setCancellButtonEnabled(boolean isEnabled){
+		wizardPanelWithLogo.setCancelButtonEnabled(isEnabled);
+	}	
+	
+	public String getTextValueAttribute(){
+		return mainOptionsWizard.getTextValueAttribute();
+	}
+	
+	public String getTextRotationAttribute() {
+		return optionalOptionsWizard.getRotationAttribute();
+	}
+	
+	public String getTextColorAttribute() {
+		return optionalOptionsWizard.getColorAttribute();
+	}
+	
+	public String getTextHeightAttribute() {
+		return optionalOptionsWizard.getHeightAttribute();
+	}
+	
+	public String getTextTypeAttribute(){
+		return optionalOptionsWizard.getFontAttribute();
+	}
+
+	public WizardPanelActionListener getWizardPanelActionListener() {
+		if ((wizardListenerAdapter == null && (getAnnotationServicePanelActionListener() != null))){
+			return new WizardListenerAdapter(this);
+		}
+		return wizardListenerAdapter;
+	}
+
+	public void setWizardPanelActionListener(
+			WizardPanelActionListener wizardActionListener) {
+		// TODO Auto-generated method stub		
+	}
+
+	public String getDestinationShapeFile() {
+		return selectOutputFileWizard.getSelectedFileName();
+	}
+	
+	public void setNextButtonEnabled(boolean isEnabled){
+		wizardPanelWithLogo.setNextButtonEnabled(isEnabled);
+	}	
+	
+    /**
+     * @return the annotationSwingManager
+     */
+    public AnnotationSwingManager getAnnotationSwingManager() {
+        return annotationSwingManager;
+    }
+
+    /**
+     * @param translation
+     */
+    public void setCancelButtonText(String translation) {
+        wizardPanelWithLogo.getWizardComponents().getCancelButton().setText(translation);
+    }
+
+    public void createAnnotation() {
+        this.lastWizard();
+        
+        Annotation annotation = new Annotation(
+        		getDestinationShapeFile(), 
+        		getTextValueAttribute(),
+        		getTextRotationAttribute(),
+        		getTextColorAttribute(),
+        		getTextHeightAttribute(),
+        		getTextTypeAttribute());
+        annotation.start();
+    }
+    
+    public void lastWizard() {
+        this.wizardPanelWithLogo.getWizardComponents().getNextButton().getActionListeners()[0].actionPerformed(null);
+    }
+    
+    private class Annotation extends Thread{
+        private String file;
+        private String textValueAttributeName;
+        private String attrRotation;
+        private String attrColor;
+        private String attrHeight;
+        private String attrType;
+
+        /*public Annotation(String file, String textValueAttributeName) {
+            super();
+            this.file = file;
+            this.textValueAttributeName = textValueAttributeName;
+        }*/
+        
+        public Annotation(String file, 
+        		String textValueAttributeName,
+        		String attrRotation,
+        		String attrColor,
+        		String attrHeight,
+        		String attrType) {
+            super();
+            this.file = file;
+            this.textValueAttributeName = textValueAttributeName;
+            this.attrColor = attrColor;
+            this.attrHeight = attrHeight;
+            this.attrRotation = attrRotation;
+            this.attrType = attrType;
+        }
+
+        public synchronized void run() {
+            AnnotationCreationService annotationCreationService = getAnnotationCreationService();
+            annotationProgressWizard.bind(annotationCreationService.getTaskStatus());           
+            try {             
+                if(attrRotation != null)
+                	annotationCreationService.setFontRotationAttribute(attrRotation);
+                if(attrColor != null)
+                	annotationCreationService.setFontColorAttribute(attrColor);
+                if(attrHeight != null)
+                	annotationCreationService.setFontHeigthAttribute(attrHeight);
+                if(attrType != null)
+                	annotationCreationService.setFontTypeAttribute(attrType);
+                annotationCreationService.createAnnotationStore(file, textValueAttributeName);
+            } catch (AnnotationCreationException e) {             
+                LOG.error("Error creating the annotation", e);
+                showError(e, annotationCreationService.getTaskStatus());              
+            } catch (DataException e) {
+            	 LOG.error("Error assigning properties to the annotation layer", e);
+			}
+        }
+    }
+    
+    private void showError(AnnotationCreationException e, TaskStatus taskStatus){        
+        String message = e.getMessage();
+        if (e.getCause() != null){
+            message = e.getCause().getMessage();
+        }
+        JOptionPane.showMessageDialog(annotationProgressWizard, message);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultJAnnotationCreationServicePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/FeatuteAttributeCombo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/FeatuteAttributeCombo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/FeatuteAttributeCombo.java	(revision 42196)
@@ -0,0 +1,126 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing.impl.panel;
+
+import javax.swing.JComboBox;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dataTypes.DataTypes;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class FeatuteAttributeCombo extends JComboBox{
+	private FeatureStore featureStore;
+	private boolean isNullable = true;
+	
+	public FeatuteAttributeCombo(FeatureStore featureStore, boolean isNullable) throws DataException {
+		super();
+		this.featureStore = featureStore;
+		setNullable(isNullable);
+		addFields();
+	}
+	
+	public FeatuteAttributeCombo(FeatureStore featureStore, int dataType, boolean isNullable) throws DataException {
+		super();
+		this.featureStore = featureStore;
+		setNullable(isNullable);
+		addFields(dataType);
+	}
+	
+	private void setNullable(boolean isNullable){
+		this.isNullable = isNullable;
+		if (isNullable){
+			this.addItem(new String("- " + Messages.getText("default") + " -"));
+		}
+	}	
+
+	private void addFields() throws DataException {
+		FeatureAttributeDescriptor[] featureAttributeDescriptors = featureStore.getDefaultFeatureType().getAttributeDescriptors();
+		for (int i=0; i<featureAttributeDescriptors.length ; i++){
+			this.addItem(featureAttributeDescriptors[i].getName());
+		}
+	}
+	
+	private void addFields(int dataType) throws DataException {
+		FeatureAttributeDescriptor[] featureAttributeDescriptors = featureStore.getDefaultFeatureType().getAttributeDescriptors();
+		for (int i=0; i<featureAttributeDescriptors.length ; i++){
+			if (featureAttributeDescriptors[i].getDataType().getType() == dataType){
+				this.addItem(featureAttributeDescriptors[i].getName());
+			}
+			//Double fields includes Integer and long
+			if (DataTypes.DOUBLE == dataType){
+				if (DataTypes.INT == featureAttributeDescriptors[i].getDataType().getType()){
+					this.addItem(featureAttributeDescriptors[i].getName());
+				}else if (DataTypes.LONG == featureAttributeDescriptors[i].getDataType().getType()){
+					this.addItem(featureAttributeDescriptors[i].getName());
+				}
+			}				
+		}
+	}
+
+	public String getSelectedAttribute() {
+		if (isNullable){
+			int index = super.getSelectedIndex();
+			if (index == 0){
+				return null;
+			}else{
+				return (String)super.getSelectedItem();
+			}
+		}else{
+			return (String)super.getSelectedItem();
+		}
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/FeatuteAttributeCombo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/OptionalOptionsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/OptionalOptionsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/OptionalOptionsPanel.java	(revision 42196)
@@ -0,0 +1,235 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing.impl.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationDataTypes;
+import org.gvsig.annotation.AnnotationLocator;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class OptionalOptionsPanel extends JPanel{
+	private JLabel rotationLabel;
+	private FeatuteAttributeCombo rotationCombo;
+	private JLabel colorLabel;
+	private FeatuteAttributeCombo colorCombo;
+	private JLabel heightLabel;
+	private FeatuteAttributeCombo heightCombo;
+	private JLabel fontLabel;
+	private JLabel fontUnitsLabel;
+	private FeatuteAttributeCombo fontCombo;
+	private JLabel descriptionLabel;
+	
+	protected AnnotationCreationService annotationCreationService = null;
+	protected AnnotationManager annotationManager = null;
+	protected AnnotationSwingManager annotationSwingManager = null;
+	
+	public OptionalOptionsPanel(AnnotationCreationService annotationCreationService) throws DataException {
+		super();	
+		this.annotationCreationService = annotationCreationService;
+		annotationManager = AnnotationLocator.getManager();
+		annotationSwingManager = AnnotationSwingLocator.getSwingManager();
+		initComponents();
+		initCombos();
+	}
+
+	private void initCombos() {
+		
+	}
+
+	private void initComponents() throws DataException {
+		java.awt.GridBagConstraints gridBagConstraints;
+		
+		rotationLabel = new JLabel();
+		rotationCombo = new FeatuteAttributeCombo(annotationCreationService.getFeatureStore(), AnnotationDataTypes.FONTROTATION, true);
+		colorLabel = new JLabel();
+		colorCombo = new FeatuteAttributeCombo(annotationCreationService.getFeatureStore(), AnnotationDataTypes.FONTCOLOR, true);
+		heightLabel = new JLabel();
+		heightCombo = new FeatuteAttributeCombo(annotationCreationService.getFeatureStore(), AnnotationDataTypes.FONTHEIGHT, true);
+		fontLabel = new JLabel();
+		fontCombo = new FeatuteAttributeCombo(annotationCreationService.getFeatureStore(), AnnotationDataTypes.FONTSTYLE, true);
+		descriptionLabel = new JLabel();
+		fontUnitsLabel = new JLabel();		
+		
+		GridBagLayout gridBagLayout = new GridBagLayout();			
+		setLayout(gridBagLayout);
+		
+		descriptionLabel.setText(annotationSwingManager.getTranslation("descripcion_de_configuracion_capa_de_anotaciones"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 30, 2);
+		add(descriptionLabel, gridBagConstraints);			
+		
+		rotationLabel.setText(annotationSwingManager.getTranslation("seleccione_el_campo_angulo_de_la_capa_de_anotaciones"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(rotationLabel, gridBagConstraints);
+		
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.insets = new Insets(2, 2, 10, 2);
+		add(rotationCombo, gridBagConstraints);
+		
+		colorLabel.setText(annotationSwingManager.getTranslation("seleccione_el_campo_color_de_la_capa_de_anotaciones"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 3;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(colorLabel, gridBagConstraints);
+		
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 4;	
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.insets = new Insets(2, 2, 10, 2);
+		add(colorCombo, gridBagConstraints);
+		
+		heightLabel.setText(annotationSwingManager.getTranslation("seleccione_el_campo_tamano_de_la_capa_de_anotaciones"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 5;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(heightLabel, gridBagConstraints);			
+		
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 6;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.insets = new Insets(2, 0, 10, 2);
+		add(heightCombo, gridBagConstraints);
+		
+		fontUnitsLabel.setText(annotationSwingManager.getTranslation("en_unidades"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 6;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.insets = new Insets(2, 0, 10, 2);
+		add(fontUnitsLabel, gridBagConstraints);				
+		
+		fontLabel.setText(annotationSwingManager.getTranslation("seleccione_el_campo_fuente_de_la_capa_de_anotaciones"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 7;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(fontLabel, gridBagConstraints);	
+		
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 8;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(fontCombo, gridBagConstraints);	
+	}
+
+	public String getRotationAttribute() {
+		return rotationCombo.getSelectedAttribute();
+	}
+
+	public String getColorAttribute() {
+		return colorCombo.getSelectedAttribute();
+	}
+
+	public String getHeightAttribute() {
+		return heightCombo.getSelectedAttribute();
+	}
+
+	public String getFontAttribute() {
+		return fontCombo.getSelectedAttribute();
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/OptionalOptionsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/MainOptionsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/MainOptionsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/MainOptionsPanel.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing.impl.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationLocator;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MainOptionsPanel extends JPanel{
+	private JLabel annotationPositionCalculatorLabel;
+	private JComboBox annotationPositionCalculatorCombo;
+	private JLabel textValueLabel;
+	private FeatuteAttributeCombo textValueCombo;
+	private JLabel descriptionLabel;
+	
+	protected AnnotationManager annotationManager = null;
+	protected AnnotationSwingManager annotationSwingManager = null;
+	protected AnnotationCreationService annotationCreationService = null;
+	
+	public MainOptionsPanel(AnnotationCreationService annotationCreationService) throws DataException {
+		super();	
+		this.annotationCreationService = annotationCreationService;
+		annotationManager = AnnotationLocator.getManager();
+		annotationSwingManager = AnnotationSwingLocator.getSwingManager();
+		initComponents();
+		initCombos();
+	}
+
+	private void initCombos() {
+		List<String> annotationPositionCalculators = annotationManager.getAnnotationPositionCalculatorList();
+		for (int i=0 ; i<annotationPositionCalculators.size() ; i++){
+			annotationPositionCalculatorCombo.addItem(annotationPositionCalculators.get(i));
+		}	
+	}
+
+	private void initComponents() throws DataException {
+		java.awt.GridBagConstraints gridBagConstraints;
+		
+		annotationPositionCalculatorLabel = new JLabel();
+		textValueCombo = new FeatuteAttributeCombo(annotationCreationService.getFeatureStore(), false);
+		annotationPositionCalculatorCombo = new JComboBox();
+		textValueLabel = new JLabel();	
+		descriptionLabel = new JLabel();
+		
+		GridBagLayout gridBagLayout = new GridBagLayout();
+		setLayout(gridBagLayout);
+		
+		descriptionLabel.setText(annotationSwingManager.getTranslation("descripcion_de_crear_capa_de_anotaciones_nueva"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 30, 2);
+		add(descriptionLabel, gridBagConstraints);		
+		
+		annotationPositionCalculatorLabel.setText(annotationSwingManager.getTranslation("duplicate"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(annotationPositionCalculatorLabel, gridBagConstraints);
+		
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 0.5;
+		gridBagConstraints.insets = new Insets(2, 2, 10, 2);
+		add(annotationPositionCalculatorCombo, gridBagConstraints);
+		
+		textValueLabel.setText(annotationSwingManager.getTranslation("seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 3;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(textValueLabel, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 4;	
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;	
+		gridBagConstraints.weightx = 0.5;
+		gridBagConstraints.insets = new Insets(2, 2, 10, 2);
+		add(textValueCombo, gridBagConstraints);
+	}
+
+	public String getAnnotationPositionCalculatorName() {
+		return annotationPositionCalculatorCombo.getSelectedItem().toString();
+	}
+
+	public String getTextValueAttribute() {
+		return textValueCombo.getSelectedAttribute();
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/panel/MainOptionsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/AnnotationProgressWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/AnnotationProgressWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/AnnotationProgressWizard.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl.wizard;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.swing.impl.DefaultJAnnotationCreationServicePanel;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.task.JTaskStatus;
+import org.gvsig.tools.swing.api.task.TaskStatusSwingManager;
+import org.gvsig.tools.task.TaskStatus;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class AnnotationProgressWizard extends JPanel implements OptionPanel{
+    private static final long serialVersionUID = 8235569247892299856L;
+    private static final TaskStatusSwingManager TASK_STATUS_SWING_MANAGER = 
+        ToolsSwingLocator.getTaskStatusSwingManager();
+
+    private DefaultJAnnotationCreationServicePanel annotationCreationServicePanel = null;
+    private JTaskStatus jTaskStatus = null;
+
+    public AnnotationProgressWizard(DefaultJAnnotationCreationServicePanel annotationCreationServicePanel) {
+        super(); 
+        this.annotationCreationServicePanel = annotationCreationServicePanel;
+        jTaskStatus = TASK_STATUS_SWING_MANAGER.createJTaskStatus();
+        this.setLayout(new BorderLayout());
+        this.add(jTaskStatus, BorderLayout.NORTH);
+    }
+
+    public String getPanelTitle() {
+        return annotationCreationServicePanel.getAnnotationSwingManager().getTranslation("export_progress");
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void lastPanel() {
+        annotationCreationServicePanel.setCancelButtonText(annotationCreationServicePanel.getAnnotationSwingManager().getTranslation("cancel"));
+    }
+
+    public void updatePanel() {
+        annotationCreationServicePanel.setFinishButtonEnabled(false);   
+        annotationCreationServicePanel.setCancelButtonText(annotationCreationServicePanel.getAnnotationSwingManager().getTranslation("close"));
+    }
+
+
+    public JPanel getJPanel() {
+        return this;
+    }
+
+    public void bind(TaskStatus taskStatus){
+        this.jTaskStatus.bind(taskStatus);
+    }  
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/AnnotationProgressWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/MainOptionsWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/MainOptionsWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/MainOptionsWizard.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing.impl.wizard;
+
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.swing.impl.DefaultJAnnotationCreationServicePanel;
+import org.gvsig.annotation.swing.impl.panel.MainOptionsPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MainOptionsWizard extends MainOptionsPanel implements OptionPanel{
+	private DefaultJAnnotationCreationServicePanel annotationCreationServicePanel = null;
+	
+	public MainOptionsWizard(DefaultJAnnotationCreationServicePanel annotationCreationServicePanel) throws DataException {
+		super(annotationCreationServicePanel.getAnnotationCreationService());
+		this.annotationCreationServicePanel = annotationCreationServicePanel;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return "";
+	}
+
+	public void lastPanel() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void updatePanel() {
+		// TODO Auto-generated method stub
+		
+	}
+
+
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/MainOptionsWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/SelectOutputFileWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/SelectOutputFileWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/SelectOutputFileWizard.java	(revision 42196)
@@ -0,0 +1,114 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing.impl.wizard;
+
+import java.io.File;
+
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.annotation.swing.impl.DefaultJAnnotationCreationServicePanel;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.gui.beans.wizard.panel.SelectFileOptionPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectOutputFileWizard extends SelectFileOptionPanel implements OptionPanel{
+	private static AnnotationSwingManager annotationSwingManager =  AnnotationSwingLocator.getSwingManager();
+	private DefaultJAnnotationCreationServicePanel annotationCreationServicePanel = null;
+	
+	public SelectOutputFileWizard(DefaultJAnnotationCreationServicePanel annotationCreationServicePanel) {
+		super(annotationSwingManager.getTranslation("seleccionar_fichero"));	
+		this.annotationCreationServicePanel = annotationCreationServicePanel;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return "";
+	}
+
+	public void lastPanel() {
+		annotationCreationServicePanel.setNextButtonEnabled(true);
+		
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void updatePanel() {
+		annotationCreationServicePanel.setNextButtonEnabled(false);
+		checkNextButtonEnabled();		
+	}
+	
+	@Override
+	protected void checkNextButtonEnabled() {
+		if (annotationCreationServicePanel != null){		
+			File file = getSelectedFile();
+			if (file != null){
+				if (file.getParentFile() != null){
+					annotationCreationServicePanel.setFinishButtonEnabled(file.getParentFile().exists());
+					return;
+				}
+			}
+			annotationCreationServicePanel.setFinishButtonEnabled(false);
+		}
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/SelectOutputFileWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/OptionalOptionsWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/OptionalOptionsWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/OptionalOptionsWizard.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.swing.impl.wizard;
+
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.swing.impl.DefaultJAnnotationCreationServicePanel;
+import org.gvsig.annotation.swing.impl.panel.OptionalOptionsPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class OptionalOptionsWizard extends OptionalOptionsPanel implements OptionPanel{
+	private DefaultJAnnotationCreationServicePanel annotationCreationServicePanel = null;
+	
+	public OptionalOptionsWizard(DefaultJAnnotationCreationServicePanel annotationCreationServicePanel) throws DataException {
+		super(annotationCreationServicePanel.getAnnotationCreationService());
+		this.annotationCreationServicePanel = annotationCreationServicePanel;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return "";
+	}
+
+	public void lastPanel() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void updatePanel() {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/wizard/OptionalOptionsWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManager.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationLocator;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.annotation.swing.AnnotationWindowManager;
+import org.gvsig.annotation.swing.JAnnotationCreationServicePanel;
+import org.gvsig.annotation.swing.JAnnotationPreferencesPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Default implementation of the {@link AnnotationSwingManager}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationSwingManager implements
+    AnnotationSwingManager {
+
+    private AnnotationManager annotationManager;
+    private AnnotationWindowManager windowManager;    
+
+    public DefaultAnnotationSwingManager() {
+        this.annotationManager = AnnotationLocator.getManager();
+    }
+
+    public JAnnotationCreationServicePanel createAnnotation(AnnotationCreationService annotationCreationService) throws ServiceException{
+        return new DefaultJAnnotationCreationServicePanel(this, annotationCreationService);   
+    }    
+    
+	public JAnnotationPreferencesPanel createAnnotationPreferences() {
+		return new DefaultJAnnotationPreferencesPanel(annotationManager);
+	}
+
+    public AnnotationManager getManager() {
+        return this.annotationManager;
+    }
+
+    public String getTranslation(String key) {
+       return Messages.getText(key);       
+    }
+
+	public AnnotationWindowManager getWindowManager() {
+		return windowManager;
+	}
+
+	public void registerWindowManager(AnnotationWindowManager windowManager) {
+		this.windowManager = windowManager;		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationSwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManager.java	(revision 42196)
@@ -0,0 +1,131 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.annotation.swing.AnnotationWindowManager;
+import org.gvsig.annotation.swing.AnnotationWizardPanelActionListener;
+import org.gvsig.annotation.swing.JAnnotationCreationServicePanel;
+import org.gvsig.annotation.swing.JAnnotationPreferencesPanel;
+
+/**
+ * Default implementation for the {@link AnnotationWindowManager}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationWindowManager implements
+    AnnotationWindowManager, ComponentListener {
+
+    public void showWindow(JAnnotationCreationServicePanel panel, String title, int mode) {
+        JFrame frame = showJPanel(panel, title, mode)   ;  
+        panel.setAnnotationServicePanelActionListener(new FrameWizardListener(frame));             
+    }
+    
+
+	public void showPreferencesWindow(JAnnotationPreferencesPanel panel, String title, int modeDialog) {
+		showJPanel(panel, title, modeDialog);
+	}
+	
+	private JFrame showJPanel(JPanel panel, String title, int modeDialog) {		       
+		 JFrame frame = new JFrame();    
+		 
+        final Dimension s = Toolkit.getDefaultToolkit().getScreenSize();
+        frame.setLocation(s.width / 4, s.height / 4);
+
+        frame.setLayout(new BorderLayout());
+        frame.setTitle(title);
+        frame.add(panel, BorderLayout.CENTER);
+
+        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+
+        panel.addComponentListener(this);
+
+        frame.pack();
+        frame.setVisible(true);	
+        return frame;
+	}
+	
+    public void componentHidden(ComponentEvent componentEvent) {
+        JFrame frame =
+            (JFrame) ((JPanel) componentEvent.getSource()).getRootPane()
+                .getParent();
+        frame.setVisible(false);
+        frame.dispose();
+    }
+
+    public void componentMoved(ComponentEvent arg0) {
+        // Do nothing
+    }
+
+    public void componentResized(ComponentEvent arg0) {
+        // Do nothing
+    }
+
+    public void componentShown(ComponentEvent arg0) {
+        // Do nothing
+    }
+    
+    public class FrameWizardListener implements AnnotationWizardPanelActionListener{
+    	private JFrame frame = null;
+    	
+    	public FrameWizardListener(JFrame frame) {
+    		super();
+    		this.frame = frame;
+    	}
+
+    	public void cancel(
+    			JAnnotationCreationServicePanel annotationCreationServicePanel) {
+    		frame.setVisible(false);
+    		System.exit(0);		
+    	}
+
+    	public void finish(
+    			JAnnotationCreationServicePanel annotationCreationServicePanel) {
+    		frame.setVisible(false);
+    		System.exit(0);		
+    	}
+    }
+
+	public boolean showFileExistsPopup(String title, String text) {
+		int resp = JOptionPane.showConfirmDialog(
+				new JFrame(), text,
+				title, JOptionPane.YES_NO_OPTION);
+		if (resp == JOptionPane.YES_OPTION) {
+			return true;
+		}
+		return false;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/java/org/gvsig/annotation/swing/impl/DefaultAnnotationWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/images/wizard-icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/images/wizard-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pl.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [pl]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(unikalne symbole)
+Aceptar=Akceptuj
+annotation=
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=
+annotation_tools=
+annotations=
+Annotations=
+Aplicar=Zastosuj
+avoid_overlapping=
+Capa=Warstwa
+cargar=Wczytaj
+centered=
+Cerrar=Zamknij
+change_options_of_annotations=
+create_annotation_layer=
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Utrzymaj domy\u015blne warto\u015bci, aby u\u017cy\u0107 warto\u015bci wsp\u00f3\u0142dzielonych przez wszystkie atrybuty warstwy. Wybierz kolumny z warto\u015bciami, aby dostosowa\u0107 etykiety</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=
+draw_text_only=Tylko text
+duplicate=
+duplicate.none=
+En_metros=W metrach
+En_pixels=W pikselach
+en_unidades=w jednostkach
+Error_creating_annotation_layer=
+Error_exportando_SLD=B\u0142\u0105d eksportu SLD
+Error_guardando_la_leyenda=B\u0142\u0105d zapisu legendy
+Error_opening_annotation_layer=
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Eksportuj do...
+exporting_=Eksportowanie
+fichero_incorrecto=Niew\u0142a\u015bciwy plik
+fichero_ya_existe_seguro_desea_guardarlo=Plik ju\u017c istnieje, czy chcesz kontynuowac?
+fontcolor=
+fontheight=
+fontrotate=
+fontstyle=
+fonttext=
+fonttype=
+formato_incorrecto=Niew\u0142a\u015bciwy format
+General=Og\u00f3lne
+guardar=Zapisz
+Guardar_leyenda=Zapisz legend\u0119
+incorrect_annotation_format=
+insertar_capa=Wstaw warstw\u0119
+insertar_en_la_vista_la_capa_creada=Czy chcesz wstawi\u0107 now\u0105 warstw\u0119 do aktywnego widoku?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Wpisz nazw\u0119 nowej wartwy adnotacji
+Label_properties=
+Layer_=
+Layer_from_active_view=
+meters=
+metros=Metry
+modify_annotation=
+no_es_posible_aplicar_leyenda_vacia=Nie mo\u017cna zatwierdzi\u0107 pustej legendy
+options=Opcje
+options.annotations=
+over_write=
+pixels=piksele
+Point\ Shape\ Files=
+propiedades_de_la_capa=W\u0142a\u015bciwo\u015bci warstwy
+Recuperar_leyenda=Za\u0142aduj legend\u0119
+remove_annotation_overlapping=
+reproyectar_aviso=Odwzorowanie warstwy i widoku nie s\u0105 zgodne.\nUWAGA\: Mo\u017ce to doprowadzi\u0107 do nie\u015bcis\u0142o\u015bci dla pewnych transformacji.\nProsz\u0119 przeczyta\u0107 dokumentacj\u0119.
+reproyectar_pregunta=Zmieni\u0107 odwzorowanie?
+seleccionar_fichero=Wybierz plik
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Wybierz kolumn\u0119 u\u017cyt\u0105 do przechowania nachylenia etykiet</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Wybierz kolumn\u0119 do przechowania koloru etykiet</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Wybierz kolumn\u0119 do przechowania czcionki etykiet</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Wybierz kolumn\u0119 do przechowania wysoko\u015bci etykiet</HTML>
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=Pliki .shp
+Simbologia=Symbole
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=
+tipo_de_leyenda=Typ legendy
+to_annotation=Przekszta\u0142\u0107 do warstwy adnotacji
+units_of_annotations=
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [it]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(Simbolo unico)
+Aceptar=Accetta
+annotation=Annotazione
+Annotation_layer_not_valid=Livello di annotazioni non valido
+Annotation_layers=Livelli di Annotazioni
+annotation_preferences=Preferenze di annotazione
+annotation_tools=Strumenti di annotazioni
+annotations=Annotazioni
+Annotations=
+Aplicar=Applica
+avoid_overlapping=Evita sovrapposizione
+Capa=Layer
+cargar=Carica
+centered=Centrato
+Cerrar=Chiudi
+change_options_of_annotations=Cambio opzioni di annotazione
+create_annotation_layer=Crea layer di annotazioni
+Create_Open_layer=Crea/Apri Livello
+Define_the_labeling_expression_=Definire l'espressione di etichettatura\:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Per utilizzare valori comuni per tutti i campi del layer lasciare i valori di default. Per personalizzare l'aspetto delle etichette selezionare i campi che contengono i valori corrispondenti.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Un nuovo layer pu\u00f2 essere creato utilizzando questo strumento, basato su un layer preesistente che permette di operare etichettature avanzate. <br>Modifica la visualizzazione del layer selezionato mostrando il valore di uno dei suoi campi.</HTML>
+draw_text_only=Disegna il solo testo
+duplicate=Controllo dei duplicati
+duplicate.none=Nessuno
+En_metros=In metri
+En_pixels=In pixels
+en_unidades=in unit\u00e0
+Error_creating_annotation_layer=Errore nella creazione del Livello di annotazioni
+Error_exportando_SLD=Errore d'esportazione SLD
+Error_guardando_la_leyenda=Errore nel salvare la legenda
+Error_opening_annotation_layer=Errore nell'apertura del Livello di annotazioni
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Esporta...
+exporting_=Esportando
+fichero_incorrecto=File non corretto
+fichero_ya_existe_seguro_desea_guardarlo=Il file esiste gi\u00e0, continuare?
+fontcolor=Colore testo
+fontheight=Altezza testo
+fontrotate=Rotazione testo
+fontstyle=Stile testo
+fonttext=Testo
+fonttype=Tipo carattere
+formato_incorrecto=Formato non corretto
+General=Generale
+guardar=Salva
+Guardar_leyenda=Salva legenda
+incorrect_annotation_format=Formato di annotazione errato
+insertar_capa=Inserisci Layer
+insertar_en_la_vista_la_capa_creada=Aggiungere il nuovo layer nella vista attuale?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Inserire il nome del nuovo layer di annotazioni
+Label_properties=Propriet\u00e0 dell'etichetta
+Layer_=Livello\:
+Layer_from_active_view=Livello dalla Vista attuale
+meters=Metri
+metros=Metri
+modify_annotation=Modifica annotazione
+no_es_posible_aplicar_leyenda_vacia=Impossibile applicare una legenda vuota.
+options=Opzioni
+options.annotations=
+over_write=Sovrascrivi
+pixels=Pixels
+Point\ Shape\ Files=
+propiedades_de_la_capa=Propriet\u00e0 del layer
+Recuperar_leyenda=Recupera legenda
+remove_annotation_overlapping=Rimuovi annotazioni sovrapposte
+reproyectar_aviso=La proiezione del Layer non s' la stessa della Vista.\nAVVISO\: Puo' essere incorretto in alcune trasformazioni.\nLeggere la documentazione.
+reproyectar_pregunta=Riproiettare?
+seleccionar_fichero=Seleziona file
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore d'inclinazione per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di colore per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Seleziona il campo da etichettare.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il font per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di dimensione del testo per la rappresentazione delle eichette</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Seleziona il Livello di annotazioni dove conservare le etichette
+Set_labeling_expression=Imposta espressione dell'etichetta
+Set_target_layer=Imposta Livello di destinazione
+shp_files=SHP files
+Simbologia=Simbologia
+Single_labeling=Etichettatura singola
+SingleLabelingTool=Strumento di etichettatura singola
+Target_annotation_layer=Livello annotazioni di destinazione
+text=Testo
+tipo_de_leyenda=Tipo legenda
+to_annotation=Trasforma in layer annotazioni
+units_of_annotations=Unit\u00e0 delle annotazioni
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text.properties	(revision 42196)
@@ -0,0 +1,90 @@
+#Translations for language [es]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+Aceptar=Aceptar
+annotation=Anotaci\u00f3n
+Annotation_layer=Capa de Anotaciones
+Annotation_layer_not_valid=Capa de anotaciones no v\u00e1lida
+Annotation_layers=Capas de Anotaciones
+annotation_preferences=Anotaciones
+annotation_tools=Herramientas de anotaciones
+annotations=Anotaciones
+Annotations=
+Aplicar=Aplicar
+avoid_overlapping=Evitar solapes
+Capa=Capa
+cargar=Cargar
+centered=Centrado
+Cerrar=Cerrar
+change_options_of_annotations=Cambio opciones de las anotaciones
+create_annotation_layer=Crea capa de anotaciones
+Create_Open_layer=Crear/Abrir capa
+Define_the_labeling_expression_=Defina la expresi\u00f3n de etiquetado\:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Con esta herramienta puede crear una capa basada en otra ya existente que le permita realizar un etiquetado avanzado. <br>Cambia la visualizaci\u00f3n de la capa seleccionada mostrando el valor de uno de sus campos.</HTML>
+draw_text_only=Dibujar s\u00f3lo el texto
+duplicate=Control de los duplicados
+duplicate.none=Ninguno
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=en unidades
+Error_creating_annotation_layer=Error creando la capa de anotaciones
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_leyenda=Error guardando la leyenda
+Error_opening_annotation_layer=Error abriendo la capa de anotaciones
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Exportar a ...
+exporting_=Exportando
+fichero_incorrecto=Fichero incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+fontcolor=Color del texto
+fontheight=Altura del texto
+fontrotate=Rotaci\u00f3n del texto
+fontstyle=Estilo del texto
+fonttext=Texto
+fonttype=Tipo de fuente
+formato_incorrecto=Formato incorrecto
+General=General
+guardar=Guardar
+Guardar_leyenda=Guardar leyenda
+incorrect_annotation_format=Formato de anotaci\u00f3n incorrecto.
+insertar_capa=Insertar capa
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+Label_properties=Propiedades de etiqueta
+Layer_=Capa\:
+Layer_from_active_view=Capa de la vista activa
+meters=Metros
+metros=Metros
+modify_annotation=Modificar anotaci\u00f3n
+no_es_posible_aplicar_leyenda_vacia=No es posible aplicar la leyenda vac\u00eda.
+none=None
+options=Opciones
+options.annotations=
+pixels=p\u00edxeles
+Point\ Shape\ Files=
+propiedades_de_la_capa=Propiedades de la capa
+Recuperar_leyenda=Recuperar leyenda
+remove_annotation_overlapping=Borrar anotationes solapadas
+reproyectar_aviso=La proyecci\u00f3n de la capa no es igual que la de la vista.\nAVISO\: Puede ser inexacto con algunas transformaciones.\nPor favor, lea la documentaci\u00f3n.
+reproyectar_pregunta=\u00bfDesea reproyectar?
+seleccionar_fichero=Seleccionar fichero
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Seleccione el campo a etiquetar.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Seleccione la capa de anotaciones que almacenar\u00e1 las etiquetas
+Set_labeling_expression=Definir expresi\u00f3n de etiquetado
+Set_target_layer=Configurar la capa destino
+shp_files=Ficheros .shp
+Simbologia=Simbolog\u00eda
+Single_labeling=Etiquetado individual
+SingleLabelingTool=Herramienta de etiquetado individual
+Target_annotation_layer=Capa de anotaciones destino
+text=Texto
+tipo_de_leyenda=Tipo de leyenda
+to_annotation=Transformar a capa de anotationes
+units_of_annotations=Unidades de las anotationes
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ro.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ro.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ro.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [ro]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=Simbol unic
+Aceptar=Accept\u0103
+annotation=Adnota\u0163ie
+Annotation_layer_not_valid=Strat adnotar invalid
+Annotation_layers=Strate adnot\u0103ri
+annotation_preferences=Preferin\u0163e adnota\u0163ie
+annotation_tools=Instrumente adnotare
+annotations=Adnota\u0163ii
+Annotations=
+Aplicar=Aplic\u0103
+avoid_overlapping=Evit\u0103 suprapunere
+Capa=Strat
+cargar=\u00cencarc\u0103
+centered=Centrat
+Cerrar=\u00cenchide
+change_options_of_annotations=Schimb\u0103 op\u0163iuni adnotare
+create_annotation_layer=Creaz\u0103 strat adnota\u0163ie
+Create_Open_layer=Creare/Deschidere strat
+Define_the_labeling_expression_=Define\u0219te expresie de etichetare
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Pentru utilizarea valorilor comune tuturo c\u00e2mpurilor stratului p\u0103stra\u0163i valorile predefinite. Pentru personalizarea aspectului etichetelor selecta\u0163i c\u00e2mpurile ce con\u0163in valorile corespunz\u0103toare</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Un strat nou poate fi creat utiliz\u00e2nd acest instrument, \u00een baza unuia existent ce permite operarea unei etichet\u0103ri avansate. <br>Schimb\u0103 vizualizarea stratului selectat ar\u0103t\u00e2nd valorile unia dintre c\u00e2mpurile sale.</HTML>
+draw_text_only=Reprezint\u0103 doar text
+duplicate=Control dublicate
+duplicate.none=Nimic
+En_metros=\u00cen metri
+En_pixels=\u00cen pixeli
+en_unidades=\u00een unit\u0103\u0163i
+Error_creating_annotation_layer=Eroare de creare strat adnota\u021bie
+Error_exportando_SLD=Eroare la export SLD
+Error_guardando_la_leyenda=Eroare \u00een timpul salv\u0103rii legendei
+Error_opening_annotation_layer=Eroare de deschidere strat adnota\u021bie
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Export\u0103 la ...
+exporting_=Exportare
+fichero_incorrecto=Fi\u015fier invalid
+fichero_ya_existe_seguro_desea_guardarlo=Fi\u015fier deja existent. Dori\u0163i s\u0103 continua\u0163i?
+fontcolor=Culoare caracter
+fontheight=Dimensiune caracter
+fontrotate=Rotire caracter
+fontstyle=Stil caracter
+fonttext=Text
+fonttype=Tip caracter
+formato_incorrecto=Format incorect
+General=General
+guardar=Salveaz\u0103
+Guardar_leyenda=Salveaz\u0103 legend\u0103
+incorrect_annotation_format=Format incorect pentru adnota\u0163ie
+insertar_capa=Inserare strat
+insertar_en_la_vista_la_capa_creada=Dori\u0163i s\u0103 ad\u0103uga\u0163i acest strat nou la vederea activ\u0103?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduce\u0163i numele noului strat-anota\u0163ie
+Label_properties=Propriet\u0103\u021bi etichetare
+Layer_=Strat\:
+Layer_from_active_view=Strat din vederea activ\u0103
+meters=Metri
+metros=Metri
+modify_annotation=Modific\u0103 adnota\u0163ie
+no_es_posible_aplicar_leyenda_vacia=Imposibil de aplicat legend\u0103 goal\u0103
+options=Op\u0163iuni
+options.annotations=
+over_write=Suprascrie
+pixels=Pixeli
+Point\ Shape\ Files=
+propiedades_de_la_capa=Propriet\u0103\u0163i strat
+Recuperar_leyenda=\u00cencarc\u0103 legend\u0103
+remove_annotation_overlapping=Elimin\u0103 suprapunere adnota\u0163ii
+reproyectar_aviso=Proiec\u0163ia stratului nu coincide cu a vederii.\nATEN\u0162IE\: Pot ap\u0103rea probleme de transformare.\nConsulta\u0163i documenta\u0163ia.
+reproyectar_pregunta=Dori\u0163i s\u0103 reproiecta\u0163i?
+seleccionar_fichero=Selecteaz\u0103 fi\u015fier
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Selecteaz\u0103 c\u00e2mpul de utilizat pentru salvarea \u00eenclin\u0103rii textului etichetelor</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecteaz\u0103 c\u00e2mpul de utilizat pentru salvarea culorii etichetelor</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Alege\u0163i c\u00e2mpul utilizat pentru etichetare</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecteaz\u0103 c\u00e2mpul de utilizat pentru salvarea caracterului etichetelor</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecteaz\u0103 c\u00e2mpul de utilizat pentru salvarea \u00een\u0103l\u0163imii textului etichetelor</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Selecta\u0163i strat adnota\u021bie care va stoca etichetele\:
+Set_labeling_expression=Setare expresie de etichetare
+Set_target_layer=Stabile\u0219te strat \u021bint\u0103
+shp_files=Fi\u015fier SHP
+Simbologia=Simbololie
+Single_labeling=Etichetare individual\u0103
+SingleLabelingTool=Instrument etichetare simpl\u0103
+Target_annotation_layer=Strat adnota\u021bie \u021bint\u0103
+text=Text
+tipo_de_leyenda=Tip legend\u0103
+to_annotation=Transform\u0103 \u00een strat-anota\u0163ie
+units_of_annotations=Unit\u0103\u0163i adnota\u0163ie
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ro.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_zh.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [zh]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(\u552f\u4e00\u7b26\u53f7)
+Aceptar=\u786e\u5b9a
+annotation=
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=
+annotation_tools=
+annotations=
+Annotations=
+Aplicar=\u5e94\u7528
+avoid_overlapping=
+Capa=\u56fe\u5c42
+cargar=\u8f7d\u5165
+centered=
+Cerrar=\u5173\u95ed
+change_options_of_annotations=
+create_annotation_layer=
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>\u60a8\u8981\u662f\u8ba9\u56fe\u5c42\u7684\u6240\u6709\u7279\u6027\u4f7f\u7528\u5171\u540c\u503c\u7684\u8bdd\uff0c\u5c06\u8981\u4fdd\u6301\u9ed8\u8ba4\u503c\u3002\u5982\u679c\u60a8\u8981\u5b9a\u5236\u6807\u7b7e\u8bf7\u9009\u62e9\u6709\u5173\u5b57\u6bb5\u3002</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=
+draw_text_only=\u53ea\u53ef\u7f16\u5199\u6587\u5b57
+duplicate=
+duplicate.none=
+En_metros=\u5398\u7c73
+En_pixels=\u50cf\u7d20
+en_unidades=\u5355\u4f4d
+Error_creating_annotation_layer=
+Error_exportando_SLD=\u8f93\u51fa SLD \u65f6\u51fa\u9519
+Error_guardando_la_leyenda=\u5b58\u76d8\u56fe\u4f8b\u65f6\u51fa\u9519
+Error_opening_annotation_layer=
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=\u8f93\u51fa\u6210 ...
+exporting_=\u8f93\u51fa\u4e2d
+fichero_incorrecto=\u6587\u4ef6\u4e0d\u6b63\u786e
+fichero_ya_existe_seguro_desea_guardarlo=\u6587\u4ef6\u5df2\u5b58\u5728\uff0c\u60a8\u8981\u7ee7\u7eed\u5417?
+fontcolor=
+fontheight=
+fontrotate=
+fontstyle=
+fonttext=
+fonttype=
+formato_incorrecto=\u683c\u5f0f\u4e0d\u6b63\u786e
+General=\u57fa\u672c\u8bbe\u7f6e
+guardar=\u5b58\u76d8
+Guardar_leyenda=\u4fdd\u5b58\u56fe\u4f8b
+incorrect_annotation_format=
+insertar_capa=\u63d2\u5165\u56fe\u5c42
+insertar_en_la_vista_la_capa_creada=\u60a8\u8981\u628a\u8fd9\u65b0\u5efa\u56fe\u5c42\u6dfb\u52a0\u5230\u6d3b\u52a8\u89c6\u56fe\u91cc\u5417?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=\u8bf7\u7ed9\u65b0\u5efa\u6ce8\u89e3\u5c42\u8f93\u5165\u65b0\u540d\u79f0
+Label_properties=
+Layer_=
+Layer_from_active_view=
+meters=\u7c73
+metros=\u7c73
+modify_annotation=
+no_es_posible_aplicar_leyenda_vacia=\u65e0\u6cd5\u5e94\u7528\u7a7a\u56fe\u4f8b\u3002
+options=\u9009\u9879
+options.annotations=
+over_write=
+pixels=\u50cf\u7d20
+Point\ Shape\ Files=
+propiedades_de_la_capa=\u56fe\u5c42\u5c5e\u6027
+Recuperar_leyenda=\u8f7d\u5165\u56fe\u4f8b
+remove_annotation_overlapping=
+reproyectar_aviso=\u56fe\u5c42\u6295\u5f71\u8ddf\u89c6\u56fe\u6295\u5f71\u4e0d\u4e00\u81f4\u3002\n\u6ce8\u610f\: \u5c06\u4f1a\u4e0d\u7cbe\u786e\u5730\u8fd0\u884c\u4e00\u4e9b\u8f6c\u6362\u3002\n\u8bf7\u9605\u8bfb\u8bf4\u660e\u3002
+reproyectar_pregunta=\u60a8\u8981\u91cd\u65b0\u6295\u5f71\u5417?
+seleccionar_fichero=\u9009\u62e9\u6587\u4ef6
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u6b63\u6587\u89d2\u5ea6\u7684\u5b57\u6bb5\u3002</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u989c\u8272\u7684\u5b57\u6bb5\u3002</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u5b57\u7b26\u7684\u5b57\u6bb5\u3002</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u9ad8\u5ea6\u7684\u5b57\u6bb5\u3002</HTML>
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=.shp \u6587\u4ef6
+Simbologia=\u6807\u7b7e
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=
+tipo_de_leyenda=\u56fe\u4f8b\u7c7b\u578b
+to_annotation=\u6539\u53d8\u4e3a\u6ce8\u89e3\u5c42
+units_of_annotations=
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [ca]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(S\u00edmbol \u00fanic)
+Aceptar=Acceptar
+annotation=Anotaci\u00f3
+Annotation_layer_not_valid=Capa d'anotacions no v\u00e0lida
+Annotation_layers=Capes d'anotacions
+annotation_preferences=Anotacions
+annotation_tools=Eines d'anotacions
+annotations=Anotacions
+Annotations=
+Aplicar=Aplicar
+avoid_overlapping=Evitar solapes
+Capa=Capa
+cargar=Carregar
+centered=Centrat
+Cerrar=Tancar
+change_options_of_annotations=Canvi d'opcions de les anotacions
+create_annotation_layer=Crea capa d'anotacions
+Create_Open_layer=Crear/Obrir capa
+Define_the_labeling_expression_=Definisca l'expressi\u00f3 d'etiquetatge\:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML> Si vol utilitzar valors comuns a tots els atributs de la capa deixe els valors per defecte. Si vol personalitzar com es mostren les etiquetes seleccione els camps que emmagatzemen els valors. </HTML>\n\n\n\n\n\n
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Amb esta eina pot crear una capa basada en una altra ja existent que li permeta realitzar un etiquetatge avan\u00e7at. <br>Canvia la visualitzaci\u00f3 de la capa seleccionada i mostra el valor d'un dels seus camps. </HTML>\n\n
+draw_text_only=Dibuixar nom\u00e9s el text
+duplicate=Control dels duplicats
+duplicate.none=
+En_metros=En metres
+En_pixels=En pixels
+en_unidades=en unitats
+Error_creating_annotation_layer=Error en crear la capa d'anotacions
+Error_exportando_SLD=Error exportant SLD
+Error_guardando_la_leyenda=Error guardant la llegenda
+Error_opening_annotation_layer=Error en obrir la capa d'anotacions
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Exportar a
+exporting_=S'est\u00e0 exportant
+fichero_incorrecto=Fitxer incorrecte
+fichero_ya_existe_seguro_desea_guardarlo=El fitxer ja existix, voleu continuar?
+fontcolor=Color del text
+fontheight=Altura del text
+fontrotate=Rotaci\u00f3 del text
+fontstyle=Estil del text
+fonttext=Text
+fonttype=Tipus de font
+formato_incorrecto=Format incorrecte
+General=General
+guardar=Guardar
+Guardar_leyenda=Guardar llegenda
+incorrect_annotation_format=Format d'anotaci\u00f3 incorrecte.
+insertar_capa=Inserir capa
+insertar_en_la_vista_la_capa_creada=Vol inserir en la vista la capa creada?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introdu\u00efsca el nom per a la nova capa d'anotacions
+Label_properties=Propietats d'etiqueta
+Layer_=Capa\:
+Layer_from_active_view=Capa de la vista activa
+meters=Metres
+metros=Metres
+modify_annotation=Modificar anotaci\u00f3
+no_es_posible_aplicar_leyenda_vacia=No \u00e9s possible aplicar la llegenda buida.
+options=Opcions
+options.annotations=
+over_write=Sobreescriure
+pixels=pixels
+Point\ Shape\ Files=
+propiedades_de_la_capa=Propietats de la capa
+Recuperar_leyenda=Recuperar llegenda
+remove_annotation_overlapping=Esborrar anotacions solapades
+reproyectar_aviso=La projecci\u00f3 de la capa no \u00e9s igual que la de la vista.\nAVISO\: pot ser inexacte amb algunes transformaciones.\nPer favor, llija la documentaci\u00f3
+reproyectar_pregunta=Vol reprojectar-la?
+seleccionar_fichero=Seleccionar fitxer
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el camp on s'emmagatzemar\u00e0 l'angle amb el qual es mostrar\u00e0 el text de l'etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Seleccione el camp on s'emmagatzemar\u00e0 el color amb el qual es mostrar\u00e0 l'etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Seleccione el camp que s'ha d'etiquetar.<HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Seleccione el camp on s'emmagatzemar\u00e0 la font de l'etiqueta amb la qual es mostrar\u00e0 
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Seleccione el camp on s'emmagatzemar\u00e0 l'altura amb la qual es mostrar\u00e0 l'etiqueta
+Select_the_annotation_layer_to_store_the_labels_=Seleccione la capa d'anotacions que emmagatzemar\u00e0 les etiquetes
+Set_labeling_expression=Definir expressi\u00f3 d'etiquetatge
+Set_target_layer=Configurar la capa dest\u00ed
+shp_files=Fitxers .shp
+Simbologia=Simbologia
+Single_labeling=Etiquetatge individual
+SingleLabelingTool=Eina d'etiquetatge individual
+Target_annotation_layer=Capa d'anotacions dest\u00ed
+text=Text
+tipo_de_leyenda=Tipus de llegenda
+to_annotation=Transformar a capa d'anotacions
+units_of_annotations=Unitats de les anotacions
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [pt]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+Aceptar=Aceitar
+annotation=Anota\u00e7\u00e3o
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=Prefer\u00eancias das anota\u00e7\u00f5es
+annotation_tools=
+annotations=Anota\u00e7\u00f5es
+Annotations=Anota\u00e7\u00f5es
+Aplicar=Aplicar
+avoid_overlapping=Evitar sobreposi\u00e7\u00e3o
+Capa=Capa
+cargar=Carregar
+centered=Centrado
+Cerrar=Fechar
+change_options_of_annotations=Alterar as op\u00e7\u00f5es das anota\u00e7\u00f5es
+create_annotation_layer=Criar tema de anota\u00e7\u00f5es
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Se deseja utilizar valores comuns a todos os atributos do tema, deixe os valores por defeito. Se deseja personalizar como se mostram as etiquetas, selecione os campos que armazenam os valores. </HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Usando esta ferramenta \u00e9 poss\u00edvel criar um novo tema baseado num j\u00e1 existente que permite realizar etiquetagem avan\u00e7ada. Modifica a visualiza\u00e7\u00e3o de um tema seleccionado mostrando o valor de um dos seus campos.</HTML>
+draw_text_only=Desenhar apenas o texto
+duplicate=Controle dos duplicados
+duplicate.none=Nenhum
+En_metros=Em metros
+En_pixels=Em pixels
+en_unidades=em unidades
+Error_creating_annotation_layer=
+Error_exportando_SLD=Erro ao exportar o SLD
+Error_guardando_la_leyenda=Erro ao guardar a legenda
+Error_opening_annotation_layer=
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=N\u00e3o \u00e9 possivel abrir este ficheiro como tema de anota\u00e7\u00f5es
+export_to=Exportar para...
+exporting_=Exportando
+fichero_incorrecto=Ficheiro incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=O ficheiro j\u00e1 existe, deseja continuar?
+fontcolor=Cor do texto
+fontheight=Altura do texto
+fontrotate=Rota\u00e7\u00e3o do texto
+fontstyle=Estilo do texto
+fonttext=Texto
+fonttype=Tipo de fonte
+formato_incorrecto=Formato incorrecto
+General=Geral
+guardar=Guardar
+Guardar_leyenda=Guardar legenda
+incorrect_annotation_format=Formato incorrecto de anota\u00e7\u00f5es
+insertar_capa=Inserir tema
+insertar_en_la_vista_la_capa_creada=Deseja adicionar \u00e0 vista o tema creado?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Inserir o nome do tema de anota\u00e7\u00f5es
+Label_properties=
+Layer_=
+Layer_from_active_view=
+meters=Metros
+metros=Metros
+modify_annotation=Modificar anota\u00e7\u00f5es
+no_es_posible_aplicar_leyenda_vacia=N\u00e3o \u00e9 poss\u00edvel inserir uma legenda vazia.
+options=Op\u00e7\u00f5es
+options.annotations=
+over_write=Reescrever
+pixels=pixels
+Point\ Shape\ Files=Tema de pontos
+propiedades_de_la_capa=Propriedades do tema
+Recuperar_leyenda=Recuperar legenda
+remove_annotation_overlapping=Eliminar anota\u00e7\u00f5es sobrepostas
+reproyectar_aviso=A projec\u00e7\u00e3o da capa n\u00e3o \u00e9 a mesma da que a vista.\nAVISO\: Isto pode gerar imprecis\u00e3o com algumas transforma\u00e7\u00f5es.\nPor favor, leia a documenta\u00e7\u00e3o
+reproyectar_pregunta=Deseja voltar a projectar?
+seleccionar_fichero=Seleccionar ficheiro
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se vai guardar o \u00e2ngulo da etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se vai guardar a cor da etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Seleccione o campo da etiqueta</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se vai guardar o estilo de texto</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se vai guardar a altura da etiqueta</HTML>
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=SHP files
+Simbologia=Simbologia
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=Texto
+tipo_de_leyenda=Tipo de legenda
+to_annotation=Transformar a capa de anota\u00e7\u00f5es
+units_of_annotations=Unidades das anota\u00e7\u00f5es
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sr.properties	(revision 42196)
@@ -0,0 +1,66 @@
+#Translations for language [sr]
+#Mon Nov 02 08:36:02 CET 2009
+annotation=Komentar
+Annotation_layer_not_valid=Lejer sa komentarima nije validan
+Annotation_layers=Lejeri sa komentarima
+annotation_preferences=Parametri  komentara
+annotation_tools=Alati za komentare
+annotations=Komentari
+Annotations=
+avoid_overlapping=Izbegni preklapanje
+Capa=Lejer
+cargar=U\u010ditaj
+centered=Centriran
+create_annotation_layer=Kreiraj lejer sa komentarima
+Create_Open_layer=Kreiraj/Otvori lejer
+Define_the_labeling_expression_=Defini\u0161i izraz etikete\:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Ako \u017eelite da koristite vrednosti koje su zajedni\u010dke za sve atribute lejera zadr\u017eite default vrednosti. Ukoliko \u017eelite da kreirate izgled etiketa izaberite polja koja sadr\u017ee te vrednosti.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Uz pomo\u0107 ove alatke mo\u017eete kreirati jedan lejer zasnovan na nekom ve\u0107 postoje\u0107em lejeru \u0161to \u0107e vam omogu\u0107iti da vr\u0161ite napredno etiketiranje. Menja vizualizaciju izabranog lejera prikazuju\u0107i vrednost jednog njegovog polja.</HTML>
+draw_text_only=Nacrtaj samo tekst
+duplicate=Kontrola duplikata.
+duplicate.none=Nijedan
+En_metros=U metrima
+En_pixels=U pikselima
+en_unidades=u jedinicama
+Error_creating_annotation_layer=Gre\u0161ka pri kreiranju lejera sa komentarima
+Error_opening_annotation_layer=Gre\u0161ka pri otvaranju lejera sa komentarima
+export_to=Eksportuj u ...
+exporting_=Eksportovanje
+fichero_ya_existe_seguro_desea_guardarlo=Datoteka ve\u0107 postoji. \u017delite li da nastavite?
+fontcolor=Boja teksta
+fontheight=Visina teksta
+fontrotate=Rotacija teksta
+fontstyle=Stil teksta
+fonttext=Tekst
+fonttype=Tip slova
+guardar=Sa\u010duvaj
+incorrect_annotation_format=Pogre\u0161an format komentara.
+insertar_capa=Unesi lejer
+insertar_en_la_vista_la_capa_creada=Da li \u017eelite da dodate ovaj novi lejer u aktivni prikaz?
+Label_properties=Karakteristike etikete
+Layer_=Lejer\:
+Layer_from_active_view=Lejer iz aktivnog prikaza
+modify_annotation=Izmeni napomene
+options=Opcije
+pixels=piksela
+Point\ Shape\ Files=
+propiedades_de_la_capa=Karakteristike lejera
+remove_annotation_overlapping=Ukloni komentare koji se preklapaju
+seleccionar_fichero=Izaberi fajl
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Izaberi polje u kome \u0107e se sa\u010duvati ugao pod kojim \u0107e se prikazivati tekst etikete</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Izaberi polje u okviru koga \u0107e se \u010duvati boja etikete</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Izaberi polje za etiketiranje.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Izaberi polje u kome \u017eeli\u0161 da arhivira\u0161 font etikete</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Izaberi polje koje \u0107e\u0161 koristiti za arhiviranje visine etikete</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Izaberite lejer sa komentarima koji \u0107e \u010duvati etikete
+Set_labeling_expression=Defini\u0161i izraz etikete
+Set_target_layer=Podesi krajnji lejer
+shp_files=SHP fajlovi
+Single_labeling=Individualno etiketiranje
+SingleLabelingTool=Alatka individualnog etiketiranja
+Target_annotation_layer=Krajnji lejer sa komentarima
+text=Tekst
+to_annotation=Pretvori u lejer sa napomenama
+units_of_annotations=Jedinice napomena
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_tr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_tr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_tr.properties	(revision 42196)
@@ -0,0 +1,64 @@
+#Translations for language [tr]
+#Mon Sep 21 10:01:59 CEST 2009
+annotation=A\u00e7\u0131klama
+Annotation_layer_not_valid=A\u00e7\u0131klama katman\u0131 ge\u00e7erli de\u011fil
+Annotation_layers=A\u00e7\u0131klama katmanlar\u0131
+annotation_preferences=A\u00e7\u0131klamalar
+annotation_tools=A\u00e7\u0131klama ara\u00e7lar\u0131
+annotations=A\u00e7\u0131klamalar
+Annotations=
+avoid_overlapping=\u00d6rt\u00fc\u015fmeden ka\u00e7\u0131n
+Capa=Katman
+cargar=Y\u00fckle
+centered=Ortalanm\u0131\u015f
+create_annotation_layer=A\u00e7\u0131klama katman\u0131 olu\u015ftur
+Create_Open_layer=Olu\u015ftur/A\u00e7 katman
+Define_the_labeling_expression_=Etiketleme ifadesini belirle
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones_nueva=
+draw_text_only=Sadece metin \u00e7iz
+duplicate=Tekrar kontrolu.
+duplicate.none=Hi\u00e7biri
+En_metros=Metre olarak
+En_pixels=Piksel olarak
+en_unidades=birimlerde
+Error_creating_annotation_layer=A\u00e7\u0131klama katman\u0131 olu\u015fturmada hata
+Error_opening_annotation_layer=A\u00e7\u0131klama katman\u0131n\u0131 a\u00e7mada hata
+export_to=D\u0131\u015fa aktar ...
+exporting_=Aktar\u0131l\u0131yor
+fichero_ya_existe_seguro_desea_guardarlo=Dosya zaten var, devam edeyim mi?
+fontcolor=Yaz\u0131 tipi rengi
+fontheight=Yaz\u0131 tipi y\u00fcksekli\u011fi
+fontrotate=
+fontstyle=Font bi\u00e7emi
+fonttext=
+fonttype=Yaz\u0131 tipi
+guardar=Kaydet
+incorrect_annotation_format=
+insertar_capa=Katman ekle
+insertar_en_la_vista_la_capa_creada=Bu yeni katman\u0131 aktif pencereye eklemek ister misin?
+Label_properties=Etiket \u00f6zellikleri
+Layer_=
+Layer_from_active_view=Aktif penceredeki katman
+modify_annotation=A\u00e7\u0131klamay\u0131 de\u011fi\u015ftir
+options=Se\u00e7imler
+Point\ Shape\ Files=
+propiedades_de_la_capa=Katman \u00f6zellikleri
+remove_annotation_overlapping=
+seleccionar_fichero=Dosyay\u0131 se\u00e7
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+Select_the_annotation_layer_to_store_the_labels_=Etiketleri depolayacak a\u00e7\u0131klama katman\u0131n\u0131 se\u00e7\:
+Set_labeling_expression=Etiketleme ifadesini ayarla
+Set_target_layer=Hedef katman\u0131 ayarla
+shp_files=SHP dosyalar\u0131
+Single_labeling=Tek etiketleme
+SingleLabelingTool=Tek Etiketleme Arac\u0131
+Target_annotation_layer=Hedef A\u00e7\u0131klama katman\u0131
+text=Metin
+to_annotation=A\u00e7\u0131klama katman\u0131na d\u00f6n\u00fc\u015ft\u00fcr
+units_of_annotations=A\u00e7\u0131klamalar\u0131n birimleri
+View_Tools=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_tr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ru.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ru.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ru.properties	(revision 42196)
@@ -0,0 +1,64 @@
+#Translations for language [ru]
+#Mon Sep 21 10:01:59 CEST 2009
+annotation=\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439
+annotation_tools=
+annotations=\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438
+Annotations=
+avoid_overlapping=\u0411\u0435\u0437 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f
+Capa=\u0421\u043b\u043e\u0439
+cargar=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
+centered=\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443
+create_annotation_layer=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u043e\u043b\u044f \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>\u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f.</HTML>
+draw_text_only=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442
+duplicate=\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
+duplicate.none=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442
+En_metros=\u0412 \u043c\u0435\u0442\u0440\u0430\u0445
+En_pixels=\u0412 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445
+en_unidades=\u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f
+Error_creating_annotation_layer=
+Error_opening_annotation_layer=
+export_to=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 ...
+exporting_=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
+fichero_ya_existe_seguro_desea_guardarlo=\u0424\u0430\u0439\u043b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b?
+fontcolor=\u0426\u0432\u0435\u0442 \u0448\u0440\u0438\u0444\u0442\u0430
+fontheight=\u0412\u044b\u0441\u043e\u0442\u0430 \u0448\u0440\u0438\u0444\u0442\u0430
+fontrotate=\u0423\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430
+fontstyle=\u0421\u0442\u0438\u043b\u044c \u0448\u0440\u0438\u0444\u0442\u0430
+fonttext=\u0422\u0435\u043a\u0441\u0442
+fonttype=\u0428\u0440\u0438\u0444\u0442
+guardar=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
+incorrect_annotation_format=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438.
+insertar_capa=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u043e\u0439
+insertar_en_la_vista_la_capa_creada=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u041a\u0430\u0440\u0442\u0443?
+Label_properties=
+Layer_=
+Layer_from_active_view=
+modify_annotation=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e
+options=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+Point\ Shape\ Files=
+propiedades_de_la_capa=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043b\u043e\u044f
+remove_annotation_overlapping=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438
+seleccionar_fichero=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u0433\u043b\u0430 \u043d\u0430\u043a\u043b\u043e\u043d\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u0438</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0446\u0432\u0435\u0442\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u0438</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \u043d\u0430\u0434\u043f\u0438\u0441\u0438</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0448\u0440\u0438\u0444\u0442\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u0438</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u044b \u043d\u0430\u0434\u043f\u0438\u0441\u0438</HTML>
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=SHP \u0444\u0430\u0439\u043b\u044b
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=\u0422\u0435\u043a\u0441\u0442
+to_annotation=\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043b\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 
+units_of_annotations=\u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439
+View_Tools=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_ru.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1,90 @@
+#Translations for language [de]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(Einmaliges Symbol)
+Aceptar=OK
+annotation=Beschriftung
+Annotation_layer=Beschriftung-Layer
+Annotation_layer_not_valid=Beschriftung-Layer nicht g\u00fcltig
+Annotation_layers=Beschriftung-Layer
+annotation_preferences=Einstellungen zur Objektbeschriftung 
+annotation_tools=Beschriftungswerkzeuge
+annotations=Beschriftungen
+Annotations=Beschriftungen
+Aplicar=Anwenden
+avoid_overlapping=\u00dcberlappungen vermeiden
+Capa=Layer
+cargar=laden
+centered=Zentriert
+Cerrar=schlie\u00dfen
+change_options_of_annotations=Einstellungen f\u00fcr Beschriftungen \u00e4ndern
+create_annotation_layer=Beschriftungslayer erzeugen
+Create_Open_layer=Layer hinzuf\u00fcgen/\u00f6ffnen
+Define_the_labeling_expression_=Ausdruck f\u00fcr die Beschriftung definieren
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Akzeptieren sie die -Default- Einstellungen, so werden die Spalten 'TypeFont', 'StyleFont', 'Color', 'Heigth' und 'Rotate' automatisiert in die Attributtabelle, f\u00fcr alle vorhandenen Datens\u00e4tze geschrieben. Bei bereits vorhandenen Beschriftungslayer haben sie die M\u00f6glichkeit die einzelnen Werte frei zu vergeben.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Hier kann ein neuer Beschriftungslayer erzeugt werden. Bei einem bereits bestehenden Beschriftungslayer kann dieses Werkzeug verwendet werden um erneuten oder neue Felder zu vergebn. Dies  ver\u00e4ndert die Ansicht des ausgew\u00e4hlten Layers.</HTML>
+draw_text_only=nur Text zeichnen
+duplicate=Duplikate zulassen
+duplicate.none=Keine Duplikate
+En_metros=in Metern
+En_pixels=in Pixeln
+en_unidades=in Einheiten
+Error_creating_annotation_layer=Fehler beim Erzeugen des Beschriftung-Layers
+Error_exportando_SLD=Fehler beim SLD Export
+Error_guardando_la_leyenda=Fehler beim Speichern der Legende
+Error_opening_annotation_layer=Fehler beim \u00d6ffnen des Beschriftungs-Layers
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=Von dieser Datei kann kein Kommentar Layer abgeleitet werden
+export_to=Exportieren nach...
+exporting_=Exportiert
+fichero_incorrecto=ung\u00fcltige Datei
+fichero_ya_existe_seguro_desea_guardarlo=Diese Datei existiert bereits. Soll sie \u00fcberschrieben werden?
+fontcolor=Schriftfarbe
+fontheight=Schriftgr\u00f6\u00dfe
+fontrotate=Schriftrichtung
+fontstyle=Schriftdarstellung
+fonttext=Schrifttext
+fonttype=Schrifttyp
+formato_incorrecto=Ung\u00fcltiges Format
+General=Allgemein
+guardar=Speichern
+Guardar_leyenda=Legende speichern
+incorrect_annotation_format=Falsches Beschriftungsformat
+insertar_capa=Layer hinzuf\u00fcgen
+insertar_en_la_vista_la_capa_creada=Layer zur aktuellen Ansicht hinzuf\u00fcgen
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Namen f\u00fcr neuen Kommentarlayer eingeben
+Label_properties=Eigenschaften Beschriftung
+Layer_=Layer\:
+Layer_from_active_view=Layer aus aktiver Ansicht
+meters=Meter
+metros=Meter
+modify_annotation=Beschriftung anpassen
+no_es_posible_aplicar_leyenda_vacia=Leere Legenden, k\u00f6nnen nicht verwendet werden
+options=Optionen
+options.annotations=Kommentar-Optionen
+over_write=\u00fcberschreiben
+pixels=Pixel
+Point\ Shape\ Files=Punktshape
+propiedades_de_la_capa=Layereigenschaften
+Recuperar_leyenda=Legende laden
+remove_annotation_overlapping=\u00dcberlappende Beschriftungen entfernen
+reproyectar_aviso=Die Layerprojektion entspricht nicht der Ansichtsprojektion. \nACHTUNG\: Bei einigen Transformationen k\u00f6nnte sie ungenau sein.\nLesen Sie bitte die Dokumentation.
+reproyectar_pregunta=Wollen Sie reprojizieren?
+seleccionar_fichero=Datei ausw\u00e4hlen
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Winkelfeld f\u00fcr Kommentarlayer w\u00e4hlen</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Farbfeld f\u00fcr Kommentarlayer w\u00e4hlen</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>W\u00e4hlen sie das Beschriftungsfeld</HTML>  
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>W\u00e4hlen sie das Feld, in dem die Beschriftung gespeichert werden soll</HTML>  
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>W\u00e4hlen sie das Feld, in dem die Gr\u00f6\u00dfe der Beschriftung gespeichert werden soll</HTML>  
+Select_the_annotation_layer_to_store_the_labels_=Beschriftung-Layer zur Speicherung von Beschriftungen w\u00e4hlen
+Set_labeling_expression=Ausdruck f\u00fcr die Beschriftung eingeben
+Set_target_layer=Ziel- Layer festlegen
+shp_files=SHP-Dateien
+Simbologia=Symbole
+Single_labeling=Individuelle Beschriftung
+SingleLabelingTool=Werkzeug Individuelle Beschriftung
+Target_annotation_layer=Ziel-Beschriftung-Layer
+text=Text
+tipo_de_leyenda=Legendentyp
+to_annotation=in Beschriftungen umwandeln
+units_of_annotations=Einheiten f\u00fcr Beschriftungen
+View_Tools=
+View_Tools_Zooms=Ansicht_Werkzeuge_Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sw.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sw.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sw.properties	(revision 42196)
@@ -0,0 +1,65 @@
+#Translations for language [sw]
+#Mon Sep 21 10:01:59 CEST 2009
+annotation=Maelezo
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=upendeleo katika  maelezo
+annotation_tools=vifaa vya kutengenezea maelezo
+annotations=Maelezo
+Annotations=
+avoid_overlapping=Zuia Kukaa juu ya Nyingine
+Capa=Safu/Tabata
+cargar=Beba
+centered=Imewekwa Kati
+create_annotation_layer=
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Weka Vipimo vya Kawaida ambavyo vinatumiwa na Tabia zote za Safu. Chagua Safu ambazo zinaweza Kuweka Vipimo hivyo kwa ajili ya Kutumia Alama Zenye Mtizamo wa Kienyeji<HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Tabaka Halisi inaweza Kutengenezwa  kwa kutumia kifaa hiki, kutegemea Tabaka iliyopo ambayo  inaruhusu Uwekaji Mzuri wa Jina. Inabadilisha Muonekano waTabaka<br> Iliyochanguliwa Ikionesha Thamani ya moja ya safu zake</ HTML>
+draw_text_only=Chora Maandishi Tu
+duplicate=Thibiti Kunanakili
+duplicate.none=
+En_metros=Katika mita
+En_pixels=Katika Pixels
+en_unidades=Katika Vizio
+Error_creating_annotation_layer=
+Error_opening_annotation_layer=
+export_to=Toa Nje Kupeleka kwa.......
+exporting_=Peleka Nje 
+fichero_ya_existe_seguro_desea_guardarlo=Faili hili tayari lipo, je wataka kuendelea?
+fontcolor=Rangi ya Herufi
+fontheight=Urefu wa Herufi
+fontrotate=Mzunguko wa Herufi
+fontstyle=Aina ya Herufi
+fonttext=Maandishi ya herufi
+fonttype=Aina ya Herufi.
+guardar=Weka Akiba
+incorrect_annotation_format=
+insertar_capa=Ingiza Tabaka
+insertar_en_la_vista_la_capa_creada=Je Wataka Kuongeza Tabaka Hii Mpya Kwenye Muonekano Hai?
+Label_properties=
+Layer_=
+Layer_from_active_view=
+modify_annotation=Rekebisha Maelezo
+options=Uchaguzi
+Point\ Shape\ Files=
+propiedades_de_la_capa=Tabia/Sifa za Tabaka
+remove_annotation_overlapping=Ondoa Maelezo Yanayopishana
+seleccionar_fichero=Chagua Faili
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML> Chagua Safu iliyotumika kuweka maandishi ya mteremko</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML> Chagua Safu iliyotumika kuweka Rangi za Majina</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML> Chagua Safu ya kupewa jina</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML> Chagua Safu iliyotumika kuweka Herufi za Majina</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML> Chagua Safu iliyotumika kuweka Urefu wa Majina</HTML>
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=Maifaili ya SHP
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=Maandishi ya kawaida
+to_annotation=Badili kwenda Tabaka ya Maelezo
+units_of_annotations=Vipimo vya Maelezo
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_sw.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_el.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_el.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_el.properties	(revision 42196)
@@ -0,0 +1,64 @@
+#Translations for language [el]
+#Mon Sep 21 10:01:59 CEST 2009
+annotation=\u0395\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd
+annotation_tools=\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd
+annotations=\u0395\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2
+Annotations=
+avoid_overlapping=\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03b5\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7\u03c2
+Capa=\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03bf
+cargar=\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7
+centered=\u039a\u03b5\u03bd\u03c4\u03c1\u03b1\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2
+create_annotation_layer=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>\u0395\u03ac\u03bd \u03b5\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03ba\u03bf\u03b9\u03bd\u03ad\u03c2 \u03c4\u03b9\u03bc\u03ad\u03c2 \u03b3\u03b9\u03b1 \u03cc\u03bb\u03b1 \u03c4\u03b1 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c4\u03bf\u03c5 \u03c0\u03b5\u03b4\u03af\u03bf\u03c5 \u03ba\u03c1\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b5\u03c2 \u03c4\u03b9\u03bc\u03ad\u03c2. \u0393\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03cc\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03b1 \u03c0\u03b5\u03b4\u03af\u03b1 \u03cc\u03c0\u03bf\u03c5 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03bf\u03b9 \u03c4\u03b9\u03bc\u03ad\u03c2.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>\u039c\u03b5 \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03bf\u03c5 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03b7\u03b8\u03b5\u03af \u03ad\u03bd\u03b1 \u03bd\u03ad\u03bf \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03ba\u03cc \u03b5\u03c0\u03af\u03c0\u03b5\u03b4\u03bf \u03b2\u03ac\u03c3\u03b7 \u03b5\u03bd\u03cc\u03c2 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5 \u03c0\u03bf\u03c5 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03b9 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bc\u03ad\u03bd\u03b7 \u03b1\u03c0\u03cc\u03b4\u03bf\u03c3\u03b7 \u03b5\u03c4\u03b9\u03ba\u03b5\u03c4\u03ce\u03bd. \u0391\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b1\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5 <br>\u03bc\u03b5 \u03c4\u03b7\u03bd \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c4\u03b9\u03bc\u03ae\u03c2 \u03b5\u03bd\u03cc\u03c2 \u03b1\u03c0\u03cc \u03c4\u03b1 \u03c0\u03b5\u03b4\u03af\u03b1 \u03c4\u03bf\u03c5.</HTML>
+draw_text_only=\u0391\u03c0\u03bf\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7 \u03bc\u03cc\u03bd\u03bf \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 
+duplicate=\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03b4\u03b9\u03c0\u03bb\u03cc\u03c4\u03c5\u03c0\u03c9\u03bd
+duplicate.none=\u039a\u03b1\u03bd\u03ad\u03bd\u03b1
+En_metros=\u03a3\u03b5 \u03bc\u03ad\u03c4\u03c1\u03b1
+En_pixels=\u03a3\u03b5 \u03c0\u03af\u03be\u03b5\u03bb
+en_unidades=\u03c3\u03b5 \u03bc\u03bf\u03bd\u03ac\u03b4\u03b5\u03c2
+Error_creating_annotation_layer=
+Error_opening_annotation_layer=
+export_to=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03b5 ...
+exporting_=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae
+fichero_ya_existe_seguro_desea_guardarlo=\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7, \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5;
+fontcolor=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+fontheight=\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+fontrotate=\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+fontstyle=\u03a3\u03c4\u03c5\u03bb \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+fonttext=\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+fonttype=\u03a4\u03cd\u03c0\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+guardar=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+incorrect_annotation_format=\u0395\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03bf \u03c6\u03bf\u03c1\u03bc\u03ac\u03c4 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7\u03c2
+insertar_capa=\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03b5\u03c0\u03af\u03c0\u03b5\u03b4\u03bf
+insertar_en_la_vista_la_capa_creada=\u0395\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03cc\u03c8\u03b7 \u03c4\u03bf \u03bd\u03ad\u03bf \u03b5\u03c0\u03af\u03c0\u03b5\u03b4\u03bf;
+Label_properties=
+Layer_=
+Layer_from_active_view=
+modify_annotation=\u03a4\u03c1\u03bf\u03c0\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7\u03c2
+options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+Point\ Shape\ Files=
+propiedades_de_la_capa=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5
+remove_annotation_overlapping=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c0\u03c4\u03cc\u03bc\u03b5\u03bd\u03c9\u03bd \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd
+seleccionar_fichero=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c4\u03bf\u03c5 \u03c0\u03b5\u03b4\u03af\u03bf\u03c5 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c4\u03b7\u03c2 \u03ba\u03bb\u03af\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c4\u03c9\u03bd \u03b5\u03c4\u03b9\u03ba\u03b5\u03c4\u03ce\u03bd</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1\u03c2</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5  \u03c0\u03b5\u03b4\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1\u03c2</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03cd\u03c8\u03bf\u03c5\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1\u03c2</HTML>
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=\u0391\u03c1\u03c7\u03b5\u03af\u03b1 SHP
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=\u0394\u03bf\u03ba\u03b9\u03bc\u03ae
+to_annotation=\u039c\u03b5\u03c4\u03b1\u03c3\u03c7\u03b7\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03b5 \u03b5\u03c0\u03af\u03c0\u03b5\u03b4\u03bf \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd
+units_of_annotations=\u039c\u03bf\u03bd\u03ac\u03b4\u03b5\u03c2 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd
+View_Tools=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_el.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [gl]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+Aceptar=Aceptar
+annotation=Anotaci\u00f3n
+Annotation_layer_not_valid=Capa de anotaci\u00f3ns non v\u00e1lida
+Annotation_layers=Capas de Anotaci\u00f3ns
+annotation_preferences=Anotaci\u00f3ns
+annotation_tools=Ferramentas de anotaci\u00f3ns
+annotations=Anotaci\u00f3ns
+Annotations=
+Aplicar=Aplicar
+avoid_overlapping=Evitar solapes
+Capa=Capa
+cargar=Cargar
+centered=Centrado
+Cerrar=Pechar
+change_options_of_annotations=Cambio opci\u00f3ns das anotaci\u00f3ns
+create_annotation_layer=Crea capa de anotaci\u00f3ns
+Create_Open_layer=Crear/Abrir capa
+Define_the_labeling_expression_=Defina a expresi\u00f3n de etiquetado\:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Se desexa utilizar valores com\u00fans a todos os atributos da capa deixe os valores por defecto. Se desexa personalizar o xeito no que se amosan as etiquetas seleccione os campos que almacenan os valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Con esta ferramenta pode crear unha capa baseada noutra xa existente que lle permita realizar un etiquetado avanzado. <br>Cambia a visualizaci\u00f3n da capa seleccionada amosando o valor dun dos seus campos.</HTML>
+draw_text_only=Debuxar s\u00f3 o texto
+duplicate=Control dos duplicados
+duplicate.none=Ning\u00fan
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=en unidades
+Error_creating_annotation_layer=Erro ao crear a capa de anotaci\u00f3ns
+Error_exportando_SLD=Erro exportando SLD
+Error_guardando_la_leyenda=Erro ao gardar a lenda
+Error_opening_annotation_layer=Erro ao abrir a capa de anotaci\u00f3ns
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Exportar a...
+exporting_=Exportando
+fichero_incorrecto=Arquivo incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=O arquivo xa existe, \u00bfdesexa continuar?
+fontcolor=Cor do texto
+fontheight=Altura do texto
+fontrotate=Rotaci\u00f3n do texto
+fontstyle=Estilo do texto
+fonttext=Texto
+fonttype=Tipo de fonte
+formato_incorrecto=Formato incorrecto
+General=Xeral
+guardar=Gardar
+Guardar_leyenda=Gardar lenda
+incorrect_annotation_format=Formato de anotaci\u00f3n incorrecto.
+insertar_capa=Inserir capa
+insertar_en_la_vista_la_capa_creada=\u00bfDesexa inserir na vista a capa creada?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduza o nome para a nova capa de anotaci\u00f3ns
+Label_properties=Propiedades de etiqueta
+Layer_=Capa\:
+Layer_from_active_view=Capa da vista activa
+meters=Metros
+metros=Metros
+modify_annotation=Modificar anotaci\u00f3n
+no_es_posible_aplicar_leyenda_vacia=Non \u00e9 posible aplicar a lenda vac\u00eda.
+options=Opci\u00f3ns
+options.annotations=
+over_write=
+pixels=pixels
+Point\ Shape\ Files=
+propiedades_de_la_capa=Propiedades da capa
+Recuperar_leyenda=Recuperar lenda
+remove_annotation_overlapping=Borrar anotaci\u00f3ns solapadas
+reproyectar_aviso=A proxecci\u00f3n da capa non \u00e9 igual que a da vista\nAVISO\: Pode ser inexacto con algunhas transformaci\u00f3ns.\nPor favor, lea a documentaci\u00f3n
+reproyectar_pregunta=Desexa reproxectar?
+seleccionar_fichero=Seleccionar arquivo
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se almacenar\u00e1 o \u00e1ngulo co que se amosar\u00e1 o texto da etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se almacenar\u00e1 a cor coa que se amosar\u00e1 a etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Seleccione o campo a etiquetar.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se almacenar\u00e1 a fonte coa que se amosar\u00e1 a etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Seleccione o campo onde se almacenar\u00e1 o alto co que se amosar\u00e1 a etiqueta</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Seleccione a capa de anotaci\u00f3ns que almacenar\u00e1 as etiquetas
+Set_labeling_expression=Definir expresi\u00f3n de etiquetado
+Set_target_layer=Configurar a capa destino
+shp_files=Arquivos .shp
+Simbologia=Simbolox\u00eda
+Single_labeling=Etiquetado individual
+SingleLabelingTool=Ferramenta de etiquetado individual
+Target_annotation_layer=Capa de anotaci\u00f3ns destino
+text=Texto
+tipo_de_leyenda=Tipo de lenda
+to_annotation=Transforma a capa de anotaci\u00f3ns
+units_of_annotations=Unidades das anotaci\u00f3ns
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,90 @@
+#Translations for language [en]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(Unique symbols)
+Aceptar=Accept
+annotation=Annotation
+Annotation_layer=Annotation layer
+Annotation_layer_not_valid=Annotation layer not valid
+Annotation_layers=Annotation layers
+annotation_preferences=Annotation preferences
+annotation_tools=Annotation tools
+annotations=Annotations
+Annotations=
+Aplicar=Apply
+avoid_overlapping=Avoid overlapping
+Capa=Layer
+cargar=Load
+centered=Centered
+Cerrar=Close
+change_options_of_annotations=Change options of annotations
+create_annotation_layer=Create annotation layer
+Create_Open_layer=Create/Open layer
+Define_the_labeling_expression_=Define the labeling expression
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>A new layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. <br>It changes the visualization of the selected layer showing the value of one of its fields.</HTML>
+draw_text_only=Draw text only
+duplicate=Duplicate control.
+duplicate.none=None
+En_metros=In meters
+En_pixels=In pixels
+en_unidades=in units
+Error_creating_annotation_layer=Error creating annotation layer
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_leyenda=Error saving legend
+Error_opening_annotation_layer=Error opening annotation layer
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Export to ...
+exporting_=Exporting
+fichero_incorrecto=Invalid file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+fontcolor=Font color
+fontheight=Font height
+fontrotate=Font rotate
+fontstyle=Font style
+fonttext=Texto
+fonttype=Font type
+formato_incorrecto=Invalid format
+General=General
+guardar=Save
+Guardar_leyenda=Save legend
+incorrect_annotation_format=Incorrect annotation format.
+insertar_capa=Insert layer
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+Label_properties=Label properties
+Layer_=Capa\:
+Layer_from_active_view=Layer from active view
+meters=Meters
+metros=Meters
+modify_annotation=Modify annotation
+no_es_posible_aplicar_leyenda_vacia=It's imposible to apply empty legend.
+none=none
+options=Options
+options.annotations=
+pixels=pixels
+Point\ Shape\ Files=
+propiedades_de_la_capa=Layer properties
+Recuperar_leyenda=Load legend
+remove_annotation_overlapping=Remove annotation overlapping
+reproyectar_aviso=The layer projection is not the same as the views projection.\nATENTION\: It can be unaccurate with some transformations.\nPlease read docs
+reproyectar_pregunta=Do you want to reproject?
+seleccionar_fichero=Select file
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Choose the field to label.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Select the annotation layer to store the labels\:
+Set_labeling_expression=Set labeling expression
+Set_target_layer=Set target layer
+shp_files=SHP files
+Simbologia=Symbols
+Single_labeling=Single labeling
+SingleLabelingTool=Single Labeling Tool
+Target_annotation_layer=Target annotation layer
+text=Text
+tipo_de_leyenda=Type of legend
+to_annotation=Transform to annotation layer
+units_of_annotations=Units of annotations
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [cs]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(Unik\u00e1tn\u00ed symboly)
+Aceptar=Budi\u017e
+annotation=Koment\u00e1\u0159
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=Vlastnosti koment\u00e1\u0159e
+annotation_tools=
+annotations=Koment\u00e1\u0159e
+Annotations=
+Aplicar=Pou\u017e\u00edt
+avoid_overlapping=Vyhnout se p\u0159ekryvu
+Capa=Vrstva
+cargar=Nahrej
+centered=Centrovan\u00fd
+Cerrar=Zav\u0159\u00edt
+change_options_of_annotations=Zm\u011bnit nastaven\u00ed koment\u00e1\u0159\u016f
+create_annotation_layer=Vytvo\u0159it vrstvu koment\u00e1\u0159\u016f
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Nechte implicitn\u00ed hodnoty, kter\u00e9 jsou sd\u00edlen\u00e9 v\u0161emi atributy vrstvy. Zvolte pole, kter\u00e1 obsahuj\u00ed hodnoty pro \u00fapavu popisu.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Nov\u00e1 vrstva m\u016f\u017ee b\u00fdt vytvo\u0159ena t\u00edmto n\u00e1strojem na z\u00e1klad\u011b existuj\u00edc\u00ed vrstvy, kter\u00e1 umo\u017e\u0148uje vylep\u0161en\u00e9 popisov\u00e1n\u00ed.<br> Zm\u011bn\u00ed se zobrazen\u00ed zvolen\u00e9 vrstvy, zobraz\u00ed se hodnota jednoho pole. </HTML>
+draw_text_only=Vykresl\u00ed jenom text
+duplicate=Rozdvojit ovl\u00e1d\u00e1n\u00ed
+duplicate.none=Nic
+En_metros=V metrech
+En_pixels=V pixelech
+en_unidades=v jednotk\u00e1ch
+Error_creating_annotation_layer=
+Error_exportando_SLD=Chyba p\u0159i exportu do SLD
+Error_guardando_la_leyenda=Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed legendy
+Error_opening_annotation_layer=
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Exportovat jako...
+exporting_=Exportov\u00e1n\u00ed
+fichero_incorrecto=Chybn\u00fd soubor
+fichero_ya_existe_seguro_desea_guardarlo=Soubor u\u017e existuje, chcete pokra\u010dovat?
+fontcolor=Barva p\u00edsma
+fontheight=V\u00fd\u0161ka p\u00edsma
+fontrotate=Rotace p\u00edsma
+fontstyle=Styl p\u00edsma
+fonttext=Text
+fonttype=Typ p\u00edsma
+formato_incorrecto=Chybn\u00fd form\u00e1t
+General=Obecn\u00fd
+guardar=Ulo\u017eit
+Guardar_leyenda=Ulo\u017eit styl
+incorrect_annotation_format=Nespr\u00e1vn\u00fd form\u00e1t koment\u00e1\u0159e.
+insertar_capa=Vlo\u017e vrstvu
+insertar_en_la_vista_la_capa_creada=P\u0159ejete si p\u0159idat novou vrstvu do aktivn\u00edho pohledu?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Vlo\u017ete n\u00e1zev nov\u00e9 vrstvy pozn\u00e1mek
+Label_properties=
+Layer_=
+Layer_from_active_view=
+meters=Metry
+metros=Metry
+modify_annotation=Zm\u011bna koment\u00e1\u0159e
+no_es_posible_aplicar_leyenda_vacia=Nelze pou\u017e\u00edt pr\u00e1zdnou legendu.
+options=Mo\u017enosti
+options.annotations=
+over_write=P\u0159epsat
+pixels=pixels
+Point\ Shape\ Files=
+propiedades_de_la_capa=Vlastnosti vrstvy
+Recuperar_leyenda=Nahr\u00e1t legendu
+remove_annotation_overlapping=Odstranit p\u0159ekr\u00fdv\u00e1n\u00ed koment\u00e1\u0159\u016f
+reproyectar_aviso=Projekce vrstvy se neshoduje s projekc\u00ed pohledu.\nUpozorn\u011bn\u00ed\: N\u011bkter\u00e9 transformace mohou b\u00fdt nep\u0159esn\u00e9.\nPros\u00edm prostudujte dokumentaci
+reproyectar_pregunta=Chcete p\u0159ev\u00e9st projekci?
+seleccionar_fichero=vyber soubor
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Vyber atribut pou\u017e\u00edvan\u00fd pro ulo\u017een\u00ed \u00faklonu textov\u00e9ho popisku</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Vyberte polo\u017eku pro ulo\u017een\u00ed barvy popisu</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Vylba pole k pojmenov\u00e1n\u00ed.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed fontu p\u00edsma.</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed velikosti popisu.</HTML>
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=SHP files
+Simbologia=Symboly
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=Text
+tipo_de_leyenda=Druh legendy
+to_annotation=Zm\u011b\u0148 na vrstvu popisk\u016f
+units_of_annotations=Jednotky v koment\u00e1\u0159\u00edch
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt_BR.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt_BR.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt_BR.properties	(revision 42196)
@@ -0,0 +1,64 @@
+#Translations for language [pt_BR]
+#Mon Sep 21 10:01:59 CEST 2009
+annotation=Anota\u00e7\u00e3o
+Annotation_layer_not_valid=Anota\u00e7\u00e3o do plano de informa\u00e7\u00e3o n\u00e3o \u00e9 v\u00e1lido
+Annotation_layers=Anota\u00e7\u00e3o dos planos de informa\u00e7\u00e3o
+annotation_preferences=Prefer\u00eancias de anota\u00e7\u00f5es
+annotation_tools=Ferramentas de anota\u00e7\u00f5es
+annotations=Anota\u00e7\u00f5es
+Annotations=
+avoid_overlapping=Evitar sobreposi\u00e7\u00e3o.
+Capa=Plano de Informa\u00e7\u00e3o
+cargar=Abrir
+centered=Centrado
+create_annotation_layer=Criar plano de informa\u00e7\u00e3o de anota\u00e7\u00f5es
+Create_Open_layer=Criar/Abrir plano de informa\u00e7\u00e3o
+Define_the_labeling_expression_=Defina a express\u00e3o de etiquetado\:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Caso deseje utilizar o valor comum a todos os atributos do plano de informa\u00e7\u00e3o deixe os valores padr\u00f5es. Caso deseje personalizar como mostram as etiquetas selecione os campos que armazenam os valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML> Com esta ferramenta, voc\u00ea pode criar um plano de informa\u00e7\u00e3o baseada em outra ja existente que permita realizar etiquetagem avan\u00e7ada. <br> Modifique a visualiza\u00e7\u00e3o do plano de informa\u00e7\u00e3o selecionado mostrando o valor de um de seus campos.</HTML>
+draw_text_only=Desenhar apenas o texto
+duplicate=Duplicar controle.
+duplicate.none=
+En_metros=Em metros
+En_pixels=Em pixels
+en_unidades=em unidades
+Error_creating_annotation_layer=Erro na cria\u00e7\u00e3o do plano de informa\u00e7\u00e3o de anota\u00e7\u00f5es.
+Error_opening_annotation_layer=Erro ao abrir o plano de informa\u00e7\u00e3o de anota\u00e7\u00f5es.
+export_to=Exportar para ...
+exporting_=Exportando
+fichero_ya_existe_seguro_desea_guardarlo=O arquivo ja existe. Deseja continuar?
+fontcolor=Cor do texto
+fontheight=Altura do texto
+fontrotate=Rota\u00e7\u00e3o do texto
+fontstyle=Estilo do texto
+fonttext=Texto
+fonttype=Tipo de fonte
+guardar=Salvar
+incorrect_annotation_format=Formato de anota\u00e7\u00e3o incompat\u00edvel.
+insertar_capa=Inserir plano de informa\u00e7\u00e3o
+insertar_en_la_vista_la_capa_creada=Deseja inserir no Bloco o plano de informa\u00e7\u00e3o criado?
+Label_properties=Propriedade da etiqueta
+Layer_=Plano de informa\u00e7\u00e3o
+Layer_from_active_view=Plano de informa\u00e7\u00e3o do Bloco ativo
+modify_annotation=Modificar anota\u00e7\u00e3o
+options=Op\u00e7\u00f5es
+Point\ Shape\ Files=
+propiedades_de_la_capa=Propriedades do plano de informa\u00e7\u00e3o
+remove_annotation_overlapping=Apagar anota\u00e7\u00f5es sobrepostas
+seleccionar_fichero=Selecionar arquivo
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML> Escolha o campo utilizado para armazenar o \u00e2ngulo das etiquetas texto </ HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione o campo onde se definir\u00e1 a cor com ser\u00e1 visualizada a etiqueta.</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Selecione o campo para etiquetar.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione o campo onde ser\u00e1 usada a fonte definida para a etiqueta.</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione o campo onde ser\u00e1 definida a altura de visualiza\u00e7\u00e3o da etiqueta.</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Selecione o plano de informa\u00e7\u00e3o de anota\u00e7\u00f5es armazenar\u00e1 as etiquetas\:
+Set_labeling_expression=Definir expre\u00e7\u00e3o das etiquetas
+Set_target_layer=Configurar o plano de informa\u00e7\u00e3o destino
+shp_files=Arquivo SHP
+Single_labeling=Etiquetado individualmente
+SingleLabelingTool=Ferramenta de etiquetamento individual
+Target_annotation_layer=Plano de informa\u00e7\u00e3o de anota\u00e7\u00f5es destino
+text=Texto
+to_annotation=Transformar o plano de informa\u00e7\u00e3o de anota\u00e7\u00f5es
+units_of_annotations=Unidades das anota\u00e7\u00f5es
+View_Tools=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_pt_BR.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [fr]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(Symbole unique)
+Aceptar=Accepter
+annotation=Annotations
+Annotation_layer_not_valid=Couche d'annotation non valide
+Annotation_layers=Couches d'annotation
+annotation_preferences=Annotations
+annotation_tools=Outils d'annotations
+annotations=Annotations
+Annotations=Annotations
+Aplicar=Appliquer
+avoid_overlapping=Eviter les chevauchements
+Capa=Couche
+cargar=Charger
+centered=Centr\u00e9
+Cerrar=Fermer
+change_options_of_annotations=S\u00e9lectionner les options des annotations \:
+create_annotation_layer=Cr\u00e9er une couche d'annotations
+Create_Open_layer=Cr\u00e9er/Ouvrir une couche
+Define_the_labeling_expression_=D\u00e9finir l'expression de l'\u00e9tiquette \:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Pour utiliser des valeurs communes \u00e0 tous les champs de la couche, laisser les valeurs par d\u00e9faut. Sinon, pour personnaliser l'apparence des \u00e9tiquettes, s\u00e9lectionner les champs qui contiennent les valeurs.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Une nouvelle couche peut \u00eatre cr\u00e9\u00e9e avec cet outil \u00e0 partir d'une couche existante afin de d\u00e9finir un \u00e9tiquetage avanc\u00e9. <br> Modifie la visualisation de la couche s\u00e9lectionn\u00e9e en affichant la valeur d'un de ses champs.</HTML>
+draw_text_only=Tracer le texte seulement
+duplicate=Contr\u00f4le des doublons
+duplicate.none=Aucun
+En_metros=En m\u00e8tres
+En_pixels=En pixels
+en_unidades=En unit\u00e9
+Error_creating_annotation_layer=Erreur lors de la cr\u00e9ation de la couche annotation
+Error_exportando_SLD=Erreur en exportant le SLD (system level definition)
+Error_guardando_la_leyenda=Erreur en sauvegardant la l\u00e9gende
+Error_opening_annotation_layer=Erreur lors l'ouverture de la couche d'annotations
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=Ce fichier ne peut \u00eatre ouvert en tant que couche d'annotations
+export_to=Exporter en...
+exporting_=En cours d'exportation
+fichero_incorrecto=Fichier incorrect
+fichero_ya_existe_seguro_desea_guardarlo=Le fichier existe d\u00e9j\u00e0, \u00eates-vous s\u00fbr de vouloir continuer ?
+fontcolor=Couleur des caract\u00e8res
+fontheight=Taille des caract\u00e8res
+fontrotate=Rotation des caract\u00e8res
+fontstyle=Style des caract\u00e8res
+fonttext=Texte
+fonttype=Type de caract\u00e8res
+formato_incorrecto=Format incorrect
+General=G\u00e9n\u00e9ral
+guardar=Enregistrer
+Guardar_leyenda=Enregistrer une l\u00e9gende
+incorrect_annotation_format=Format d'annotation incorrect.
+insertar_capa=Ins\u00e9rer une couche
+insertar_en_la_vista_la_capa_creada=Souhaitez-vous ajouter cette nouvelle couche \u00e0 la vue active ?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Saisir le nom de la nouvelle couche d'annotations
+Label_properties=Propri\u00e9t\u00e9s des \u00e9tiquettes
+Layer_=Couche \:
+Layer_from_active_view=Couche de la vue active
+meters=M\u00e8tres
+metros=M\u00e8tres
+modify_annotation=Modifier l'annotation
+no_es_posible_aplicar_leyenda_vacia=Il est impossible d'appliquer une l\u00e9gende vide.
+options=Options
+options.annotations=annotations
+over_write=Ecrase
+pixels=Pixels
+Point\ Shape\ Files=Fichier couche point
+propiedades_de_la_capa=Propri\u00e9t\u00e9s de la couche\n
+Recuperar_leyenda=Charger une l\u00e9gende
+remove_annotation_overlapping=Enl\u00e8ve les annotations qui se chevauchent
+reproyectar_aviso=Le syst\u00e8me de projection de la couche est diff\u00e9rent de celui de la vue.\nAttention\: \=Des probl\u00e8mes peuvent \u00eatre rencontr\u00e9s avec certaines projections. \nVeuillez vous reporter \u00e0 la documentation.
+reproyectar_pregunta=Souhaitez-vous reprojeter ?
+seleccionar_fichero=S\u00e9lectionner le fichier
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>S\u00e9lectionner le champ contenant les valeurs d'inclinaison pour repr\u00e9senter les \u00e9tiquettes</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>S\u00e9lectionner le champ contenant les codes de couleur pour repr\u00e9senter les \u00e9tiquettes</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>S\u00e9lectionner le champ \u00e0 \u00e9tiqueter</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>S\u00e9lectionner le champ contenant les valeurs \u00e0 \u00e9tiqueter</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>S\u00e9lectionner le champ d\u00e9finissant la taille des \u00e9tiquettes</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Couche annotation pour le stockage des \u00e9tiquettes \:
+Set_labeling_expression=D\u00e9finir l'\u00e9tiquette
+Set_target_layer=D\u00e9finir la couche de destination
+shp_files=Fichiers .shp
+Simbologia=Apparence
+Single_labeling=Etiquette individuelle
+SingleLabelingTool=Outil d'\u00e9tiquetage individuel
+Target_annotation_layer=Couche annotation de destination
+text=Texte
+tipo_de_leyenda=Type de l\u00e9gende
+to_annotation=Transformer la couche en \u00e9tiquettes
+units_of_annotations=Unit\u00e9 des annotations
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en_US.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en_US.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en_US.properties	(revision 42196)
@@ -0,0 +1,64 @@
+#Translations for language [en_US]
+#Mon Sep 21 10:01:59 CEST 2009
+annotation=Annotation
+Annotation_layer_not_valid=Invalid annotation layer
+Annotation_layers=Annotation layers
+annotation_preferences=Annotations
+annotation_tools=Annotation tools
+annotations=Annotations
+Annotations=
+avoid_overlapping=Avoid overlaps
+Capa=Layer
+cargar=Load...
+centered=Center point
+create_annotation_layer=Create annotation layer
+Create_Open_layer=Create/open layer
+Define_the_labeling_expression_=Define labeling expression
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Leave at default to use the same settings for all features in the layer. For per-feature settings, select the attribute fields that hold the respective values.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>This tool will create a new annotation layer based on an existing layer which allows to perform advanced labeling.<p>An annotation layer labels features in the selected layer with the value of an attribute table field.</HTML>
+draw_text_only=Show label text only
+duplicate=Position of label points\:
+duplicate.none=None
+En_metros=In meters
+En_pixels=In pixels
+en_unidades=in selectable units.
+Error_creating_annotation_layer=Error creating annotation layer.
+Error_opening_annotation_layer=Error opening annotation layer.
+export_to=Export to
+exporting_=Exporting\: 
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists. Do you want to continue?
+fontcolor=Font color\:
+fontheight=Font height\:
+fontrotate=Font rotation\:
+fontstyle=Font style\:
+fonttext=Text\:
+fonttype=Font type\:
+guardar=Save
+incorrect_annotation_format=Invalid annotation format.
+insertar_capa=Insert layer
+insertar_en_la_vista_la_capa_creada=Add the new layer to the active view?
+Label_properties=Label properties
+Layer_=Capa\:
+Layer_from_active_view=Layer from active view
+modify_annotation=Modify annotation
+options=Options
+Point\ Shape\ Files=
+propiedades_de_la_capa=Layer properties
+remove_annotation_overlapping=Remove overlapping labels
+seleccionar_fichero=Select file
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Rotation field\:</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Color field\:</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Field to use for labeling\:</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Font field\:</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Height field\:</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Select the annotation layer that stores the labels
+Set_labeling_expression=Define labeling expression
+Set_target_layer=Set target layer
+shp_files=Shapefiles (.shp)
+Single_labeling=Individual labeling
+SingleLabelingTool=Individual labeling tool
+Target_annotation_layer=Target annotation layer
+text=Text
+to_annotation=Export to annotation layer...
+units_of_annotations=Annotation units\:
+View_Tools=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_en_US.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [eu]
+#Mon Sep 21 10:01:59 CEST 2009
+_(Simbolo_unico)=(Ikur bakarra)
+Aceptar=Ados
+annotation=Oharpena
+Annotation_layer_not_valid=Oharpen-geruza baliogabea
+Annotation_layers=Oharpen-geruza
+annotation_preferences=Oharpenen lehentasunak
+annotation_tools=Oharpen erremintak
+annotations=Oharpenak
+Annotations=
+Aplicar=Aplikatu
+avoid_overlapping=Saihestu gainjarpenak
+Capa=Geruza
+cargar=Kargatu
+centered=Erdian
+Cerrar=Itxi
+change_options_of_annotations=Aldatu oharpenen aukerak
+create_annotation_layer=Sortu oharpen geruza
+Create_Open_layer=Sortu/Ireki geruza
+Define_the_labeling_expression_=Definitu etiketatuaren espresioa\:
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Geruzaren ezaugarri guztietarako balio komunak erabili nahi badituzu, hautatu lehenetsitako balioak. Etiketen bistaratzea pertsonalizatu nahi baduzu, balioak dituzten eremuak hautatu.</HTML>
+descripcion_de_crear_capa_de_anotaciones_nueva=<HTML>Tresna honekin etiketatu aurreratua ahalbidetuko dizun geruza bat sortu dezakezu, lehendik dagoen beste geruza batean oinarrituta. <br>Hautatutako geruzaren bistaratzea aldatzen du eremuetako baten balioa erakutsiz.</HTML>
+draw_text_only=Marraztu testua bakarrik
+duplicate=Kopien kontrola
+duplicate.none=Bat ere ez
+En_metros=Metrotan
+En_pixels=Pixeletan
+en_unidades=unitateetan
+Error_creating_annotation_layer=Errorea oharpenen geruza sortzean
+Error_exportando_SLD=Errorea SLD esportatzean
+Error_guardando_la_leyenda=Errorea legenda gordetzean
+Error_opening_annotation_layer=Errorea oharpenen-geruza irekitzean
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=Hona esportatu\:
+exporting_=Esportatzen
+fichero_incorrecto=Fitxategia ez da zuzena
+fichero_ya_existe_seguro_desea_guardarlo=Fitxategia lehendik ere badago, jarraitu nahi duzu?
+fontcolor=Testuaren kolorea
+fontheight=Testuaren altura
+fontrotate=Testuaren biraketa
+fontstyle=Testuaren estiloa
+fonttext=Testua
+fonttype=Letra tipoa
+formato_incorrecto=Formatoa ez da zuzena
+General=Orokorra
+guardar=Gorde
+Guardar_leyenda=Gorde legenda
+incorrect_annotation_format=Oharpenaren formatua oker.
+insertar_capa=Txertatu geruza
+insertar_en_la_vista_la_capa_creada=Sortutako geruza bistan txertatu nahi duzu?
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Sartu oharpen geruza berriaren izena
+Label_properties=Etiketa ezaugarriak
+Layer_=Geruza\:
+Layer_from_active_view=Bista aktiboaren geruza
+meters=Metroak 
+metros=Metroak
+modify_annotation=Aldatu oharpena
+no_es_posible_aplicar_leyenda_vacia=Ezin da hutsik dagoen legenda aplikatu.
+options=Aukerak
+options.annotations=
+over_write=Gainidatzi
+pixels=pixels
+Point\ Shape\ Files=
+propiedades_de_la_capa=Geruzaren ezaugarriak
+Recuperar_leyenda=Berreskuratu legenda
+remove_annotation_overlapping=Ezabatu gainjarritako oharpenak
+reproyectar_aviso=Geruzaren proiekzioa ez da bistaren proiekzioaren berdina. OHARRA\: Zehaztugabea izan daiteke aldaketa batzuekin. Mesedez, irakurri dokumentazioa.
+reproyectar_pregunta=Berriro proiektatu nahi duzu?
+seleccionar_fichero=Hautatu fitxategia
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Hautatu etiketaren testuak bistaratzean izango duen angelua zein eremutan gordeko den</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Hautatu etiketak bistaratzean izango duen kolorea zein eremutan gordeko den</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=<HTML>Hautatu etiketatu beharreko eremua.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Hautatu etiketak bistaratzean izango duen iturria zein eremutan gordeko den</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Hautatu etiketak bistaratzean izango duen altuera zein eremutan gordeko den</HTML>
+Select_the_annotation_layer_to_store_the_labels_=Hautatu etiketak gordetzeko oharpen geruza
+Set_labeling_expression=Definitu etiketatuaren espresioa
+Set_target_layer=Konfiguratu helburu-geruza
+shp_files=.shp fitxategiak
+Simbologia=Sinbologia
+Single_labeling=Banakako etiketatua
+SingleLabelingTool=Banakako etiketatuaren tresna
+Target_annotation_layer=Helburuko oharpen geruza
+text=Testua
+tipo_de_leyenda=Legenda-mota
+to_annotation=Bihurtu oharpen-geruza
+units_of_annotations=Oharpenen unitateak
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_nl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_nl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_nl.properties	(revision 42196)
@@ -0,0 +1,89 @@
+#Translations for language [nl]
+#Tue Aug 11 10:49:14 CEST 2009
+_(Simbolo_unico)=(Uniek symbool)
+Aceptar=OK
+annotation=
+Annotation_layer_not_valid=
+Annotation_layers=
+annotation_preferences=
+annotation_tools=
+annotations=
+Annotations=
+Aplicar=Toepassen
+avoid_overlapping=
+Capa=Laag
+cargar=
+centered=
+Cerrar=Sluiten
+change_options_of_annotations=
+create_annotation_layer=
+Create_Open_layer=
+Define_the_labeling_expression_=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones_nueva=
+draw_text_only=
+duplicate=
+duplicate.none=
+En_metros=In meters
+En_pixels=In pixels
+en_unidades=
+Error_creating_annotation_layer=
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Fout bij het bewaren van de legende
+Error_opening_annotation_layer=
+Este\ fichero\ no\ es\ posible\ abirlo\ como\n\ \ \ \ \ \ \ \ //\ capa\ de\ anotaciones=
+export_to=
+exporting_=
+fichero_incorrecto=Invalid file
+fichero_ya_existe_seguro_desea_guardarlo=
+fontcolor=
+fontheight=
+fontrotate=
+fontstyle=
+fonttext=
+fonttype=
+formato_incorrecto=Incorrect formaat
+General=Algemeen
+guardar=
+Guardar_leyenda=Bewaar legende
+incorrect_annotation_format=
+insertar_capa=
+insertar_en_la_vista_la_capa_creada=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+Label_properties=
+Layer_=
+Layer_from_active_view=
+meters=
+metros=Meters
+modify_annotation=
+no_es_posible_aplicar_leyenda_vacia=
+options=
+options.annotations=
+over_write=
+pixels=
+Point\ Shape\ Files=
+propiedades_de_la_capa=
+Recuperar_leyenda=Herladen van de legende
+remove_annotation_overlapping=
+reproyectar_aviso=De projectie van de laag is niet dezelfde als die van het kaartbeeld. \nOPGELET\: Kan onnauwkeurigheden geven bij sommige transformaties.\nLees de ducumentatie aub.
+reproyectar_pregunta=Wilt u herprojecteren?
+seleccionar_fichero=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+Select_the_annotation_layer_to_store_the_labels_=
+Set_labeling_expression=
+Set_target_layer=
+shp_files=
+Simbologia=Symbolen
+Single_labeling=
+SingleLabelingTool=
+Target_annotation_layer=
+text=
+tipo_de_leyenda=Legende type
+to_annotation=
+units_of_annotations=
+View_Tools=
+View_Tools_Zooms=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/org/gvsig/annotation/swing/impl/i18n/text_nl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.annotation.swing.impl.AnnotationSwingDefaultImplLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/pom.xml	(revision 42196)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.annotation.swing.impl</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.annotation.swing</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.annotation.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.annotation.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>jwizardcomponent</groupId>
+            <artifactId>jwizardcomponent</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.utils</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.ui</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+
+    <build>
+      <plugins>
+        <plugin>
+          <!-- Skip compilation tests -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>default-testCompile</id>
+              <phase>process-test-sources</phase>
+              <goals>
+                <goal>testCompile</goal>
+              </goals>
+              <configuration>
+                <skip>true</skip>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </build>
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/org.gvsig.annotation.swing.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/pom.xml	(revision 42196)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.annotation.swing</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.annotation</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.annotation.lib.api</artifactId>
+    </dependency>
+  </dependencies>
+
+  <modules>
+    <module>org.gvsig.annotation.swing.api</module>
+    <module>org.gvsig.annotation.swing.impl</module>
+  </modules>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.swing
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/pom.xml	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.annotation</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <description>Annotation</description>
+
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.library</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <modules>
+    <module>org.gvsig.annotation.lib</module>
+    <module>org.gvsig.annotation.swing</module>
+    <module>org.gvsig.annotation.main</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/org/gvsig/annotation/data/andalucia.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/org/gvsig/annotation/data/andalucia.shp
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/org/gvsig/annotation/data/andalucia.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/org/gvsig/annotation/data/andalucia.dbf
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/org/gvsig/annotation/data/andalucia.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/org/gvsig/annotation/data/andalucia.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your classes.
+
+This folder is added to the classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.annotation">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.annotation package documentation</title>
+</head>
+<body>
+
+	<p>Annotation library testing and demo application.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/Main.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/Main.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/Main.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.main;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationLocator;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.annotation.swing.AnnotationWindowManager;
+import org.gvsig.annotation.swing.JAnnotationCreationServicePanel;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Main executable class for testing the Annotation library.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Main {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Main.class);
+
+    private AnnotationManager annotationManager;
+    private AnnotationSwingManager annotationSwingManager;
+    private DataManager dataManager;
+
+    public static void main(String args[]) throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        Main main = new Main();
+        main.show();
+    }    
+    
+    @SuppressWarnings("serial")
+    public void show() throws Exception {
+        annotationManager = AnnotationLocator.getManager();
+        annotationSwingManager = AnnotationSwingLocator.getSwingManager();
+        dataManager = DALLocator.getDataManager();
+        
+        
+        JAnnotationCreationServicePanel annotationCreationService = annotationSwingManager.createAnnotation(createService());
+        annotationSwingManager.getWindowManager().showWindow(annotationCreationService, "Annotation App. example", AnnotationWindowManager.MODE_DIALOG);
+    }   
+    
+    /**
+     * Returns an instance of the {@link AnnotationCreationService}.
+     * 
+     * @return a {@link AnnotationCreationService} instance
+     * @throws Exception
+     *             if there is any error creating the instance
+     */
+    protected AnnotationCreationService createService() throws Exception {
+    	String sourceFileName = getClass().getClassLoader().getResource("org/gvsig/annotation/data/andalucia.shp").getFile();
+    	DataStoreParameters sourceParameters = dataManager.createStoreParameters("Shape");
+     	sourceParameters.setDynValue("shpfile", sourceFileName);
+     	sourceParameters.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+     	FeatureStore sourceStore = (FeatureStore) dataManager.openStore("Shape", sourceParameters);
+    	return annotationManager.getAnnotationCreationService(sourceStore);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/Main.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/PreferencesMain.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/PreferencesMain.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/PreferencesMain.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.main;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationLocator;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.swing.AnnotationSwingLocator;
+import org.gvsig.annotation.swing.AnnotationSwingManager;
+import org.gvsig.annotation.swing.AnnotationWindowManager;
+import org.gvsig.annotation.swing.JAnnotationPreferencesPanel;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Main executable class for testing the Annotation library.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class PreferencesMain {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PreferencesMain.class);
+
+    private AnnotationManager annotationManager;
+    private AnnotationSwingManager annotationSwingManager;
+    private DataManager dataManager;
+
+    public static void main(String args[]) throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        PreferencesMain main = new PreferencesMain();
+        main.show();
+    }    
+    
+    @SuppressWarnings("serial")
+    public void show() throws Exception {
+        annotationManager = AnnotationLocator.getManager();
+        annotationSwingManager = AnnotationSwingLocator.getSwingManager();
+        dataManager = DALLocator.getDataManager();
+        
+        
+        JAnnotationPreferencesPanel annotationPreferencesPanel = annotationSwingManager.createAnnotationPreferences();
+        annotationSwingManager.getWindowManager().showPreferencesWindow(annotationPreferencesPanel, "Annotation Preferences. example", AnnotationWindowManager.MODE_DIALOG);
+    }   
+    
+    /**
+     * Returns an instance of the {@link AnnotationCreationService}.
+     * 
+     * @return a {@link AnnotationCreationService} instance
+     * @throws Exception
+     *             if there is any error creating the instance
+     */
+    protected AnnotationCreationService createService() throws Exception {
+    	String sourceFileName = getClass().getClassLoader().getResource("org/gvsig/annotation/data/andalucia.shp").getFile();
+    	DataStoreParameters sourceParameters = dataManager.createStoreParameters("Shape");
+     	sourceParameters.setDynValue("shpfile", sourceFileName);
+     	sourceParameters.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+     	FeatureStore sourceStore = (FeatureStore) dataManager.openStore("Shape", sourceParameters);
+    	return annotationManager.getAnnotationCreationService(sourceStore);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/src/main/java/org/gvsig/annotation/main/PreferencesMain.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/pom.xml	(revision 42196)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.annotation.main</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.annotation</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.annotation.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.annotation.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.main
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationCreationServiceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationCreationServiceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationCreationServiceTest.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.impl;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationCreationServiceTest;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+
+/**
+ * {@link AnnotationCreationService} API compatibility tests for the
+ * {@link DefaultAnnotationCreationService} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationCreationServiceTest extends AnnotationCreationServiceTest {
+		
+	public DefaultAnnotationCreationServiceTest() {
+		super();		
+	}
+
+	@Override
+	public TextPointPairList getResult() throws CreateGeometryException {
+		GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+		TextPointPairList textPointPairList = new TextPointPairList();
+		textPointPairList.addPoint("Sevilla", geometryManager.createPoint(262760.53, 4146732.91, Geometry.SUBTYPES.GEOM2D));
+		return textPointPairList;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationCreationServiceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationManagerTest.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.impl;
+
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.AnnotationManagerTest;
+
+/**
+ * {@link AnnotationManager} API compatibility tests for the
+ * {@link DefaultAnnotationManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationManagerTest extends AnnotationManagerTest {
+
+    // Nothing to add
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/java/org/gvsig/annotation/impl/DefaultAnnotationManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.annotation">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text.properties	(revision 42196)
@@ -0,0 +1,3 @@
+# Resource bundle texts for the Spanish language locale (es)
+centroid=Centroide
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text_en.properties	(revision 42196)
@@ -0,0 +1,3 @@
+# Resource bundle texts for the English language locale (en)
+centroid=Centroid
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/locale/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.annotation.impl.AnnotationDefaultImplLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/template.gvslab
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/resources/template.gvslab
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationCreationService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationCreationService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationCreationService.java	(revision 42196)
@@ -0,0 +1,430 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.gvsig.annotation.AnnotationCreationException;
+import org.gvsig.annotation.AnnotationCreationFinishAction;
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationDataTypes;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.calculator.AnnotationPositionCalculationException;
+import org.gvsig.annotation.calculator.AnnotationPositionCalculator;
+import org.gvsig.annotation.calculator.AnnotationPositionCalculatorCreationException;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Default {@link AnnotationCreationService} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationCreationService extends AbstractMonitorableTask implements AnnotationCreationService {
+	private static final Logger LOG = LoggerFactory.getLogger(DefaultAnnotationCreationService.class);
+	private static final String TEMPLATE_NAME = "template.gvslab";
+	private static DataManager dataManager = DALLocator.getDataManager();
+
+	private AnnotationManager manager;
+	private FeatureStore sourceStore;
+
+	private int sourceFontTypeAttribute = -1;
+	private int sourceFontStyleAttribute = -1;
+	private int sourceFontColorAttribute = -1;
+	private int sourceRotationAttribute = -1;
+	private int sourceHeigthAttribute = -1;
+	private AnnotationPositionCalculator annotationPositionCalculator = null;
+
+	private String destinationGeometryAttributeName = null;
+
+	private AnnotationCreationFinishAction annotationCreationFinishAction = null; 
+
+	/**
+	 * {@link DefaultAnnotationCreationService} constructor with a
+	 * {@link AnnotationManager}.
+	 * 
+	 * @param manager
+	 *            to use in the service
+	 * @throws DataException 
+	 */
+	public DefaultAnnotationCreationService(FeatureStore featureStore, AnnotationManager manager) throws DataException {
+		super("annotation");
+	    this.sourceStore = featureStore; 
+		this.manager = manager;
+		destinationGeometryAttributeName = featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName();
+	}
+
+	public AnnotationManager getManager() {
+		return this.manager;
+	}
+
+	public FeatureStore createAnnotationStore(String destinationShapeFile, int textValueAttribute)
+	throws AnnotationCreationException {		
+		try {
+			if (destinationShapeFile == null){
+				throw new AnnotationCreationException("File can not be null");
+			}	
+
+			String destinationShapeFileWithoutExtension = destinationShapeFile.toLowerCase().replaceAll("\\.shp", "");
+			if (destinationShapeFileWithoutExtension.length() == destinationShapeFile.length()-4){
+				destinationShapeFileWithoutExtension =  destinationShapeFile.substring(0, destinationShapeFile.length()-4);
+			}else{
+				destinationShapeFileWithoutExtension = destinationShapeFile;
+			}			
+
+			NewFeatureStoreParameters newFeatureStoreParameters = (NewFeatureStoreParameters)dataManager.createNewStoreParameters("FilesystemExplorer", "Shape");
+			newFeatureStoreParameters.setDynValue("shpfile", destinationShapeFileWithoutExtension + ".shp");
+			newFeatureStoreParameters.setDynValue("dbffile", destinationShapeFileWithoutExtension + ".dbf");
+			newFeatureStoreParameters.setDynValue("shxfile", destinationShapeFileWithoutExtension + ".shx");
+			newFeatureStoreParameters.setDynValue("crs", sourceStore.getDefaultFeatureType().getDefaultSRS());
+
+			EditableFeatureType editableFeatureType = sourceStore.getDefaultFeatureType().getEditable();//newFeatureStoreParameters.getDefaultFeatureType().getEditable();
+			FeatureAttributeDescriptor[] featureAttributeDescriptors = editableFeatureType.getAttributeDescriptors();
+			for (int i=featureAttributeDescriptors.length-1  ; i>=0 ; i--){
+				editableFeatureType.remove(i);
+			}
+			initializeFeatureType(editableFeatureType);
+			newFeatureStoreParameters.setDefaultFeatureType(editableFeatureType);
+
+			dataManager.newStore("FilesystemExplorer", "Shape", newFeatureStoreParameters, true);
+
+			//If there is not an annotationPositionCalculator it gets the default 
+			if (annotationPositionCalculator == null){
+				annotationPositionCalculator = manager.getDefaultAnnotationPositionCalculator();
+			}	
+
+			FeatureStore destinationStore = (FeatureStore) dataManager.openStore("Shape", newFeatureStoreParameters);
+
+			copyFeatureStore(sourceStore, 
+					destinationStore,
+					textValueAttribute);	
+
+			try {
+				copyLegend(destinationStore);
+			} catch (IOException e) {
+				LOG.error("Error copying the legend");
+			}
+
+			if (annotationCreationFinishAction != null){
+				annotationCreationFinishAction.finished(destinationStore);
+			}
+
+			return destinationStore;
+		} catch (InitializeException e) {
+			throw new AnnotationCreationException(e);
+		} catch (ProviderNotRegisteredException e) {
+			throw new AnnotationCreationException(e);
+		} catch (ValidateDataParametersException e) {
+			throw new AnnotationCreationException(e);
+		} catch (DynFieldNotFoundException e) {
+			throw new AnnotationCreationException(e);
+		} catch (DataException e) {
+			throw new AnnotationCreationException(e);
+		} catch (AnnotationPositionCalculatorCreationException e) {
+			throw new AnnotationCreationException(e);
+		} 			
+	}	
+
+	public FeatureStore createAnnotationStore(String destinationShapeFile,
+			String textValueAttributeName) throws AnnotationCreationException {
+		try {
+			return createAnnotationStore(destinationShapeFile, getIndex(textValueAttributeName));
+		} catch (DataException e) {
+			throw new AnnotationCreationException(e);
+		}			
+	}
+
+	private void initializeFeatureType(EditableFeatureType editableFeatureType) throws DataException
+	{		
+		EditableFeatureAttributeDescriptor geometryType = editableFeatureType.add(destinationGeometryAttributeName, DataTypes.GEOMETRY);
+		geometryType.setAllowNull(false);		
+		geometryType.setGeometryType(Geometry.TYPES.POINT).setGeometrySubType(Geometry.SUBTYPES.GEOM2D);
+		geometryType.setSRS(sourceStore.getDefaultFeatureType().getDefaultSRS());
+		geometryType.setObjectClass(Geometry.class);
+		editableFeatureType.setDefaultGeometryAttributeName(destinationGeometryAttributeName);
+
+		editableFeatureType.add(AnnotationManager.TEXTVALUE_ATTRIBUTE_NAME, AnnotationDataTypes.TEXT, 256).setAllowNull(true);
+		editableFeatureType.add(AnnotationManager.FONTTYPE_ATTRIBUTE_NAME, AnnotationDataTypes.FONTTYPE, 30).setAllowNull(true);
+		editableFeatureType.add(AnnotationManager.FONTSTYLE_ATTRIBUTE_NAME, AnnotationDataTypes.FONTSTYLE, 30).setAllowNull(true);
+		editableFeatureType.add(AnnotationManager.FONTCOLOR_ATTRIBUTE_NAME, AnnotationDataTypes.FONTCOLOR, 20).setAllowNull(true);
+		editableFeatureType.add(AnnotationManager.FONTROTATION_ATTRIBUTE_NAME, AnnotationDataTypes.FONTROTATION, 5).setAllowNull(true);
+		editableFeatureType.add(AnnotationManager.FONTHEGTH_ATTRIBUTE_NAME, AnnotationDataTypes.FONTHEIGHT, 5).setAllowNull(true);
+	}
+
+	private AttributeInserter createInserter(int attributePosition, Object defaultValue)
+	{
+		if (attributePosition > -1){
+			return new StoreAttributeInserter(attributePosition);
+		}else{
+			return new DefaultAttributeInserter(defaultValue);
+		}
+	}
+
+	private void copyFeatureStore(FeatureStore sourceStore,
+			FeatureStore destinationStore, int textAttribute)
+	throws AnnotationCreationException, DataException {		
+		FeatureSet featureSet = null;
+		DisposableIterator iterator = null;
+		
+		try{
+			//Start the edition
+			destinationStore.edit();
+
+			//Copy data
+			featureSet = sourceStore.getFeatureSet();
+			iterator = featureSet.iterator();
+			
+			
+			taskStatus.setRangeOfValues(0, featureSet.getSize());
+	
+			//Create the attribute inserter's
+			AttributeInserter fontTypeAttributeInserter = createInserter(sourceFontTypeAttribute, manager.getDefaultFontType());		
+			AttributeInserter fontStyleAttributeInserter = createInserter(sourceFontStyleAttribute, manager.getDefaultFontStyle());		
+			AttributeInserter fontColorAttributeInserter = createInserter(sourceFontColorAttribute, manager.getDefaultFontColor());		
+			AttributeInserter fontRotationAttributeInserter = createInserter(sourceRotationAttribute, manager.getDefaultFontRotation());		
+			AttributeInserter fontHeigthAttributeInserter = createInserter(sourceHeigthAttribute, manager.getDefaultFontHeight());		
+	
+			Feature sourceFeature;
+			long featureCount = 0;
+			while (iterator.hasNext()) {			
+				sourceFeature = (Feature) iterator.next();
+	
+				EditableFeature destinationFeature = destinationStore.createNewFeature().getEditable();
+				try {
+					destinationFeature.set(destinationGeometryAttributeName, annotationPositionCalculator.getAnnotationPosition(sourceFeature));
+				} catch (AnnotationPositionCalculationException e) {
+					LOG.error("Not possible to get the point for the geometry", e);				
+				}
+				destinationFeature.set(AnnotationManager.TEXTVALUE_ATTRIBUTE_NAME, sourceFeature.get(textAttribute));
+				destinationFeature.set(AnnotationManager.FONTTYPE_ATTRIBUTE_NAME, fontTypeAttributeInserter.getValue(sourceFeature));
+				destinationFeature.set(AnnotationManager.FONTSTYLE_ATTRIBUTE_NAME, fontStyleAttributeInserter.getValue(sourceFeature));
+				destinationFeature.set(AnnotationManager.FONTCOLOR_ATTRIBUTE_NAME, fontColorAttributeInserter.getValue(sourceFeature));
+				destinationFeature.set(AnnotationManager.FONTROTATION_ATTRIBUTE_NAME, fontRotationAttributeInserter.getValue(sourceFeature));
+				destinationFeature.set(AnnotationManager.FONTHEGTH_ATTRIBUTE_NAME, fontHeigthAttributeInserter.getValue(sourceFeature));
+	
+				destinationStore.insert(destinationFeature);
+	    		featureCount++;  
+	    		this.taskStatus.setCurValue(featureCount);
+	    
+	            if (this.taskStatus.isCancellationRequested()) {
+	            	destinationStore.cancelEditing();
+	            	this.taskStatus.cancel();
+	                return;
+	            }
+			}
+		}finally{
+
+			//Finish the edition
+			if(destinationStore.isEditing()){
+				destinationStore.finishEditing();
+			}
+	
+			//Dispose resources
+			if(iterator != null){
+				iterator.dispose();	
+			}
+			if(featureSet != null){
+				featureSet.dispose();
+			}
+			
+			if(this.taskStatus.isRunning()){
+				this.taskStatus.terminate();
+			}
+	        //this.taskStatus.remove();
+		}
+	}
+
+	private void copyLegend(FeatureStore destinationStore) throws ValidateDataParametersException, DataException, IOException {
+		FilesystemServerExplorer filesystemServerExplorer = (FilesystemServerExplorer)destinationStore.getExplorer();
+		File target = filesystemServerExplorer.getResourcePath(destinationStore, "gvslab");
+
+		//Copy the template
+		InputStream in = getClass().getClassLoader().getResourceAsStream(TEMPLATE_NAME);
+		OutputStream out = null;
+
+		out = new FileOutputStream(target);
+
+		byte[] buf = new byte[1024];
+		int len;
+		while ((len = in.read(buf)) > 0) { 
+			out.write(buf, 0, len); 
+		} 
+		in.close();
+		out.close(); 		
+	}
+
+	private void checkAttribute(int index, int[] type) throws DataException{
+		if (index >= sourceStore.getDefaultFeatureType().size()){
+			throw new IllegalArgumentException("Attribute not found");
+		}
+		int datatype = sourceStore.getDefaultFeatureType().getAttributeDescriptor(index).getDataType().getType();
+		
+		boolean validType = false;
+		if(type != null) {
+			for (int i = 0; i < type.length; i++) {
+				if(datatype == type[i]) {
+					validType = true;
+				}
+			}
+		}
+		
+		if (!validType) {
+			throw new IllegalArgumentException("The Attribute has not have the fine type");
+		}
+	}
+
+
+	public void setFontTypeAttribute(int index) throws DataException {
+		checkAttribute(index, new int[]{AnnotationDataTypes.FONTTYPE});
+		this.sourceFontTypeAttribute = index;		
+	}
+
+	public void setFontStyleAttribute(int index) throws DataException {
+		checkAttribute(index, new int[]{AnnotationDataTypes.FONTSTYLE});
+		this.sourceFontStyleAttribute = index;		
+	}
+
+	public void setFontColorAttribute(int index) throws DataException {
+		checkAttribute(index, new int[]{AnnotationDataTypes.FONTCOLOR});
+		this.sourceFontColorAttribute = index;		
+	}
+
+	public void setFontHeigthAttribute(int index) throws DataException {
+		checkAttribute(index, new int[]{AnnotationDataTypes.FONTHEIGHT, DataTypes.INT, DataTypes.LONG, DataTypes.FLOAT});
+		this.sourceHeigthAttribute = index;		
+	}
+
+	public void setFontRotationAttribute(int index) throws DataException {
+		checkAttribute(index, new int[]{AnnotationDataTypes.FONTROTATION});
+		this.sourceRotationAttribute = index;		
+	}
+
+	public void setAnnotationPositionCalculator(
+			AnnotationPositionCalculator annotationPositionCalculator) {		
+		this.annotationPositionCalculator = annotationPositionCalculator;		
+	}
+
+	public int getIndex(String attributeName) throws DataException{
+		FeatureAttributeDescriptor featureAttributeDescriptor = sourceStore.getDefaultFeatureType().getAttributeDescriptor(attributeName);
+		if (featureAttributeDescriptor != null){
+			return featureAttributeDescriptor.getIndex();
+		}
+		return -1;
+	}
+
+	public void setFontColorAttribute(String attributeName) throws DataException {
+		setFontColorAttribute(getIndex(attributeName));		
+	}
+
+	public void setFontHeigthAttribute(String attributeName) throws DataException {
+		setFontHeigthAttribute(getIndex(attributeName));				
+	}
+
+	public void setFontRotationAttribute(String attributeName) throws DataException {
+		setFontRotationAttribute(getIndex(attributeName));				
+	}
+
+	public void setFontStyleAttribute(String attributeName) throws DataException {
+		setFontStyleAttribute(getIndex(attributeName));				
+	}
+
+	public void setFontTypeAttribute(String attributeName) throws DataException {
+		setFontTypeAttribute(getIndex(attributeName));				
+	}
+
+
+	public FeatureStore getFeatureStore() {
+		return sourceStore;
+	}
+
+	private interface AttributeInserter{
+		public Object getValue(Feature feature);
+	}
+
+
+	private class StoreAttributeInserter implements AttributeInserter{
+		private int attributePosition = -1;
+
+		public StoreAttributeInserter(int attributePosition) {
+			super();
+			this.attributePosition = attributePosition;			
+		}
+
+		public Object getValue(Feature feature){
+			return feature.get(attributePosition);
+		}
+	}
+
+	private class DefaultAttributeInserter implements AttributeInserter{
+		private Object defaultValue = null;
+
+		public DefaultAttributeInserter(Object defaultValue) {
+			super();	
+			this.defaultValue = defaultValue;
+		}
+
+		public Object getValue(Feature feature){
+			return defaultValue;
+		}
+	}
+
+	public AnnotationCreationFinishAction getAnnotationCreationFinishAction() {
+		return annotationCreationFinishAction;
+	}
+
+
+	public void setAnnotationCreationFinishAction(
+			AnnotationCreationFinishAction annotationCreationFinishAction) {
+		this.annotationCreationFinishAction = annotationCreationFinishAction;	
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationCreationService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/AnnotationDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/AnnotationDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/AnnotationDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.impl;
+
+import java.awt.Color;
+
+import org.gvsig.annotation.AnnotationLibrary;
+import org.gvsig.annotation.AnnotationLocator;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.impl.calculator.CentroidPositionCalculatior;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for default implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AnnotationDefaultImplLibrary extends AbstractLibrary {
+	  	
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(AnnotationLibrary.class);
+    }
+
+	@Override
+    protected void doInitialize() throws LibraryException {
+		AnnotationLocator.registerManager(DefaultAnnotationManager.class);           
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        AnnotationManager annotationManager = AnnotationLocator.getManager();
+                
+        if (annotationManager == null) {
+            throw new ReferenceNotRegisteredException(
+                AnnotationLocator.MANAGER_NAME, AnnotationLocator
+                    .getInstance());
+        }
+        
+        annotationManager.registerDefaultAnnotationPositionCalculator(CentroidPositionCalculatior.class);
+       
+        //Adding font types
+        annotationManager.addFontType("Arial");
+        annotationManager.addFontType("Dialog");
+        annotationManager.addFontType("DialogInput");
+        annotationManager.addFontType("Serif");
+        annotationManager.addFontType("SansSerif");
+        annotationManager.addFontType("Monospaced");
+        annotationManager.addFontType("Courier");
+        annotationManager.addFontType("TimesRoman");
+        annotationManager.addFontType("Helvetica");
+        
+           //Adding font styles
+        annotationManager.addFontStyle("Plain");
+        annotationManager.addFontStyle("Italic");
+        annotationManager.addFontStyle("Bold");
+        
+        //Setting the default values if there are not registered
+        if (annotationManager.getDefaultTextValue() == null){
+        	annotationManager.setDefaultTextValue("Text");
+        }
+        
+        if (annotationManager.getDefaultFontColor() == -1){
+        	annotationManager.setDefaultFontColor(Color.BLACK);
+        }
+        
+        if (annotationManager.getDefaultFontHeight() == -1){
+        	annotationManager.setDefaultFontHeight(10);
+        }
+        
+        if (annotationManager.getDefaultFontRotation() == -1){
+        	annotationManager.setDefaultFontRotation(0);
+        }
+        
+        if (annotationManager.getDefaultFontStyle() == null){
+        	annotationManager.setDefaultFontStyle("Plain");
+        }
+        
+        if (annotationManager.getDefaultFontType() == null){
+        	annotationManager.setDefaultFontType("Arial");
+        }        
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/AnnotationDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/calculator/CentroidPositionCalculatior.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/calculator/CentroidPositionCalculatior.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/calculator/CentroidPositionCalculatior.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.impl.calculator;
+
+import org.gvsig.annotation.calculator.AnnotationPositionCalculationException;
+import org.gvsig.annotation.calculator.AnnotationPositionCalculator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.i18n.Messages;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class CentroidPositionCalculatior implements AnnotationPositionCalculator{
+
+	public Point getAnnotationPosition(Feature feature) throws AnnotationPositionCalculationException {
+		try {
+			return feature.getDefaultGeometry().centroid();
+		} catch (GeometryOperationNotSupportedException e) {
+			throw new AnnotationPositionCalculationException(e);
+		} catch (GeometryOperationException e) {
+			throw new AnnotationPositionCalculationException(e);
+		}
+	}
+
+	public String getName() {
+		return Messages.getText("centroid");
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/calculator/CentroidPositionCalculatior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationManager.java	(revision 42196)
@@ -0,0 +1,184 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation.impl;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.gvsig.annotation.AnnotationCreationService;
+import org.gvsig.annotation.AnnotationCreationServiceException;
+import org.gvsig.annotation.AnnotationManager;
+import org.gvsig.annotation.calculator.AnnotationPositionCalculator;
+import org.gvsig.annotation.calculator.AnnotationPositionCalculatorCreationException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Default {@link AnnotationManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DefaultAnnotationManager implements AnnotationManager {
+	private static final String ANNOTATION_POSITION_CALCULATOR_EXTENSION_POINT = "AnnotationPositionCalculatorExtensionPoint";
+	private ExtensionPointManager extensionPointManager = ToolsLocator.getExtensionPointManager();
+	private static final String DEFAULT_ANNOTATION_POSITION_CALCULATOR = "DefaultAnnotationPositionCalculator";
+	
+	private String defaultTextValue = null;
+	private int defaultFontColor = -1;
+	private double defaultFontHeight = -1;
+	private double defaultFontRotation = -1;
+	private String defaultFontStyle = null;
+	private String defaultFontType = null;
+	
+	private List<String> fontTypes = Collections.synchronizedList(new ArrayList<String>());
+	private List<String> fontStyles = Collections.synchronizedList(new ArrayList<String>());
+	
+	
+    public AnnotationCreationService getAnnotationCreationService(FeatureStore featureStore)
+        throws ServiceException {
+        AnnotationCreationService fc;
+		try {
+			fc = new DefaultAnnotationCreationService(featureStore, this);
+		} catch (DataException e) {
+			throw new AnnotationCreationServiceException("Impossible to create the annotation service", e);
+		}
+        return fc;
+    }
+
+	public AnnotationPositionCalculator getAnnotationPositionCalculator(
+			String name) throws AnnotationPositionCalculatorCreationException {
+		if (extensionPointManager.get(ANNOTATION_POSITION_CALCULATOR_EXTENSION_POINT).has(name)){
+			try {
+				return (AnnotationPositionCalculator)extensionPointManager.get(ANNOTATION_POSITION_CALCULATOR_EXTENSION_POINT).create(name);
+			} catch (InstantiationException e) {
+				throw new AnnotationPositionCalculatorCreationException(name, e);
+			} catch (IllegalAccessException e) {
+				throw new AnnotationPositionCalculatorCreationException(name, e);
+			}
+		}else{
+			throw new IllegalArgumentException("There is not an annotation position calculator registered with this name"); 
+		}		
+	}
+
+	public List<String> getAnnotationPositionCalculatorList() {
+		return extensionPointManager.get(ANNOTATION_POSITION_CALCULATOR_EXTENSION_POINT).getNames();
+	}
+
+	public AnnotationPositionCalculator getDefaultAnnotationPositionCalculator() throws AnnotationPositionCalculatorCreationException {
+		return getAnnotationPositionCalculator(DEFAULT_ANNOTATION_POSITION_CALCULATOR);
+	}
+
+	public void registerAnnotationPositionCalculator(String name,
+			Class annotationPositionCalculatorClass) {
+		if (!AnnotationPositionCalculator.class.isAssignableFrom(annotationPositionCalculatorClass)) {
+			throw new IllegalArgumentException(annotationPositionCalculatorClass.getName()
+					+ " must implement the AnnotationPositionCalculator interface");
+		}
+		
+		ExtensionPoint extensionPoint = extensionPointManager.add(ANNOTATION_POSITION_CALCULATOR_EXTENSION_POINT, "");
+		extensionPoint.append(name, name, annotationPositionCalculatorClass);		
+	}
+
+	public void registerDefaultAnnotationPositionCalculator(Class annotationPositionCalculatorClass) {
+		registerAnnotationPositionCalculator(DEFAULT_ANNOTATION_POSITION_CALCULATOR,
+				annotationPositionCalculatorClass);
+	}
+
+	public void addFontStyle(String fontStyle) {
+		fontStyles.add(fontStyle);		
+	}
+
+	public void addFontType(String fontType) {
+		fontTypes.add(fontType);		
+	}
+
+	public int getDefaultFontColor() {
+		return defaultFontColor;
+	}
+
+	public double getDefaultFontHeight() {
+		return defaultFontHeight;
+	}
+
+	public double getDefaultFontRotation() {
+		return defaultFontRotation;
+	}
+
+	public String getDefaultFontStyle() {
+		return defaultFontStyle;
+	}
+
+	public String getDefaultFontType() {
+		return defaultFontType;
+	}
+
+	public String getDefaultTextValue() {
+		return defaultTextValue;
+	}
+
+	public List<String> getFontStyles() {
+		return fontStyles;
+	}
+
+	public List<String> getFontTypes() {
+		return fontTypes;
+	}
+
+	public void setDefaultFontColor(int fontColor) {
+		this.defaultFontColor = fontColor;		
+	}
+	
+	public void setDefaultFontColor(Color fontColor) {
+		this.defaultFontColor = fontColor.getRGB();		
+	}
+
+	public void setDefaultFontHeight(double fontHeight) {
+		this.defaultFontHeight = fontHeight;		
+	}
+
+	public void setDefaultFontRotation(double fontRotation) {
+		this.defaultFontRotation = fontRotation;		
+	}
+
+	public void setDefaultFontStyle(String fontStyle) {
+		this.defaultFontStyle = fontStyle;		
+	}
+
+	public void setDefaultFontType(String fontType) {
+		this.defaultFontType = fontType;		
+	}
+
+	public void setDefaultTextValue(String textValue) {
+		this.defaultTextValue = textValue;		
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.annotation package documentation</title>
+</head>
+<body>
+
+	<p>Annotation library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/pom.xml	(revision 42196)
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.annotation.lib.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>org.gvsig.annotation.lib.impl</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.annotation.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.annotation.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>      
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>    
+      <scope>compile</scope>
+    </dependency>
+      <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>      
+      <scope>compile</scope>
+    </dependency>        
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>  
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>    
+      <scope>compile</scope>
+    </dependency>  
+
+  
+<!--
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.annotation.lib.api</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
+      <scope>test</scope>  
+    </dependency>  
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.dbf</artifactId>
+      <scope>test</scope>  
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.proj.lib.proj4j</artifactId>
+      <scope>compile</scope>      
+    </dependency>
+-->
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <!-- Skip compilation tests -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>default-testCompile</id>
+            <phase>process-test-sources</phase>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <configuration>
+              <skip>true</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/pom.xml	(revision 42196)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.annotation.lib</artifactId>
+  <packaging>pom</packaging>
+  <name>org.gvsig.annotation.lib</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.annotation</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.annotation.lib.api</module>
+    <module>org.gvsig.annotation.lib.impl</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/resources/org/gvsig/annotation/data/andalucia.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/resources/org/gvsig/annotation/data/andalucia.shp
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/resources/org/gvsig/annotation/data/andalucia.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/resources/org/gvsig/annotation/data/andalucia.dbf
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/resources/org/gvsig/annotation/data/andalucia.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/resources/org/gvsig/annotation/data/andalucia.shx
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationManagerTest.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * API compatibility tests for {@link AnnotationManager} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AnnotationManagerTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    protected AnnotationManager manager;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        manager = AnnotationLocator.getManager();
+    }
+
+    /**
+     * Test for the {@link AnnotationManager#getAnnotationCreationService()}
+     * method.
+     * 
+     * @throws Exception
+     *             if there is any error in the tests
+     */
+    public void testGetAnnotationCreationService() throws Exception {
+       
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationCreationServiceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationCreationServiceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationCreationServiceTest.java	(revision 42196)
@@ -0,0 +1,206 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+
+/**
+ * API compatibility tests for {@link AnnotationCreationService} implementations.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AnnotationCreationServiceTest extends
+    AbstractLibraryAutoInitTestCase {
+
+    protected AnnotationManager manager;
+    protected DataManager dataManager;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        manager = AnnotationLocator.getManager();
+        dataManager = DALLocator.getDataManager();
+    }
+
+    /**
+     * Returns an instance of the {@link AnnotationCreationService}.
+     * 
+     * @return a {@link AnnotationCreationService} instance
+     * @throws Exception
+     *             if there is any error creating the instance
+     */
+    protected AnnotationCreationService createService() throws Exception {
+    	String sourceFileName = getClass().getClassLoader().getResource("org/gvsig/annotation/data/andalucia.shp").getFile();
+    	DataStoreParameters sourceParameters = dataManager.createStoreParameters("Shape");
+     	sourceParameters.setDynValue("shpfile", sourceFileName);
+     	sourceParameters.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+     	FeatureStore sourceStore = (FeatureStore) dataManager.openStore("Shape", sourceParameters);
+    	return manager.getAnnotationCreationService(sourceStore);
+    }
+
+    /**
+     * Test for the {@link AnnotationCreationService#getMessage()} method.
+     * 
+     * @throws Exception
+     *             if there is any error in the tests
+     */
+    public void testAnnotationServiceMessage() throws Exception {
+        AnnotationCreationService annotationCreationService = createService();
+            
+        File temporalFolder = new File(System.getProperty("java.io.tmpdir") +  File.separator + "tmp_gvsig_annotation");
+        if (!temporalFolder.exists()){
+        	if (!temporalFolder.mkdir()){
+        		throw new Exception("Impossible to create the destination folder");
+        	}
+        }
+        
+        String destinationFileName =  temporalFolder.getAbsolutePath() + File.separator + Math.random() + ".shp";		
+                    
+        annotationCreationService.createAnnotationStore(destinationFileName, 1);
+        
+        DataStoreParameters destinationParameters = dataManager.createStoreParameters("Shape");
+        destinationParameters.setDynValue("shpfile", destinationFileName);
+        destinationParameters.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+    	FeatureStore destinationStore = (FeatureStore) dataManager.openStore("Shape", destinationParameters);
+        
+    	assertNotNull(destinationStore);
+    	
+    	FeatureType featureType = destinationStore.getDefaultFeatureType();
+    	assertEquals(7, featureType.getAttributeDescriptors().length);
+    	
+     	assertEquals(destinationStore.getFeatureCount(), annotationCreationService.getFeatureStore().getFeatureCount());
+    	
+    	assertNotNull(featureType.getDefaultGeometryAttribute());
+    	assertEquals(featureType.getDefaultGeometryAttribute().getGeometryType(), Geometry.TYPES.POINT);
+    	    
+    	//Check the geometries
+    	FeatureSet featureSet = destinationStore.getFeatureSet();
+    	DisposableIterator iterator = featureSet.iterator();
+    	
+    	Feature feature;
+    	TextPointPairList textPointPairList = getResult();
+    	while (iterator.hasNext()){
+    		feature = (Feature)iterator.next();
+    		assertNotNull(feature.get(Messages.getText(AnnotationManager.TEXTVALUE_ATTRIBUTE_NAME)));
+    		String text = feature.getString(AnnotationManager.TEXTVALUE_ATTRIBUTE_NAME);
+    		TextPointPair textPointPair = textPointPairList.search(text);
+    		if (textPointPair != null){
+	    		//Check the geometry
+	    		Point point = (Point)feature.getDefaultGeometry();
+	    		assertEquals(point.getX(), textPointPair.getPoint().getX(), 0.01);
+	    		assertEquals(point.getY(), textPointPair.getPoint().getY(), 0.01);
+	    	}
+    		int color = feature.getInt(AnnotationManager.FONTCOLOR_ATTRIBUTE_NAME);
+    		assertEquals(color, manager.getDefaultFontColor()); 
+    		
+    		double heigth = feature.getDouble(AnnotationManager.FONTHEGTH_ATTRIBUTE_NAME);
+    		assertEquals(heigth, manager.getDefaultFontHeight()); 
+    		
+    		double rotation = feature.getDouble(AnnotationManager.FONTROTATION_ATTRIBUTE_NAME);
+    		assertEquals(rotation, manager.getDefaultFontRotation()); 
+    		
+    		String type = feature.getString(AnnotationManager.FONTTYPE_ATTRIBUTE_NAME);
+    		assertEquals(type, manager.getDefaultFontType()); 
+    		
+    		String style = feature.getString(AnnotationManager.FONTSTYLE_ATTRIBUTE_NAME);
+    		assertEquals(style, manager.getDefaultFontStyle());     		
+    	}
+    	
+    	destinationStore.dispose();
+    	annotationCreationService.getFeatureStore().dispose();
+    }
+    
+    public abstract TextPointPairList getResult() throws CreateGeometryException;
+    
+    public class TextPointPairList{
+    	List<TextPointPair> textPointPairs = new ArrayList<TextPointPair>();
+
+		public TextPointPairList() {
+			super();
+		}
+    	
+		public void addPoint(String text, Point point){
+			textPointPairs.add(new TextPointPair(text, point));
+		}
+		
+		public TextPointPair search(String text){
+			for (TextPointPair textPointPair : textPointPairs) {
+				if (textPointPair.getText().equals(text)){
+					return textPointPair;
+				}
+			}
+			return null;
+		}    	
+    }
+    
+    
+    
+    private class TextPointPair{
+    	private String text;
+		private Point point;
+		
+    	public TextPointPair(String text, Point point) {
+			super();
+			this.text = text;
+			this.point = point;
+		}
+    	
+    	public String getText() {
+			return text;
+		}
+
+		public Point getPoint() {
+			return point;
+		}    	
+    }
+
+    /**
+     * Test for the {@link AnnotationCreationService#getManager()} method.
+     * 
+     * @throws Exception
+     *             if there is any error in the tests
+     */
+    public void testAnnotationServiceManager() throws Exception {
+        AnnotationCreationService annotationCreationService = createService();
+        assertEquals(manager, annotationCreationService.getManager());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/test/java/org/gvsig/annotation/AnnotationCreationServiceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.annotation.AnnotationLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationDataTypes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationDataTypes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationDataTypes.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.annotation;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.tools.dataTypes.DataTypes;
+
+/**
+ * DataTypes for the fields that are created in an annotation {@link DataStore}.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AnnotationDataTypes {
+	public static int TEXT = DataTypes.STRING;
+	public static int FONTROTATION = DataTypes.DOUBLE;
+	public static int FONTCOLOR = DataTypes.INT;
+	public static int FONTHEIGHT = DataTypes.DOUBLE;
+	public static int FONTTYPE = DataTypes.STRING;
+	public static int FONTSTYLE = DataTypes.STRING;
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationDataTypes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationException.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Generic exception thrown in the Annotation API when the exception or error
+ * may be dealt by the program or the user of the program which is a client of
+ * the Annotation API.
+ * 
+ * @see {@link AnnotationCreationService}
+ * @see {@link AnnotationManager}
+ * @author gvSIG team.
+ * @version $Id$
+ */
+public class AnnotationException extends BaseException {
+
+    private static final long serialVersionUID = 6756475060924237176L;
+
+    private static final String MESSAGE =
+        "An error has been produced in the Annotation library";
+
+    private static final String KEY = "_AnnotationException";
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <strong>Don't use this constructor in child classes.</strong>
+     */
+    public AnnotationException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <p>
+     * <strong>Don't use this constructor in child classes.</strong>
+     * </p>
+     * 
+     * @param cause
+     *            the original cause of the exception
+     */
+    public AnnotationException(Exception cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected AnnotationException(String message, String key, long code) {
+        super(message, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param cause
+     *            the original cause of the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected AnnotationException(String message, Throwable cause,
+        String key, long code) {
+        super(message, cause, key, code);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculator.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.calculator;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * This class calculates the position of an annotation layer. It has a 
+ * method that calculates the {@link Point} where the annotation has to
+ * be displayed.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface AnnotationPositionCalculator {
+
+	/**
+	 * This method returns the position where the annotation has to be displayed.
+	 * @param feature 
+	 * the feature that is used like input. 
+	 * @return
+	 * the point where the annotation is displayed.
+	 * @throws AnnotationPositionCalculationException
+	 * if there is an exception calculating the point
+	 */
+	public Point getAnnotationPosition(Feature feature) throws AnnotationPositionCalculationException;	
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculationException.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.calculator;
+
+import org.gvsig.annotation.AnnotationException;
+
+/**
+ * This exception is thrown if there is a problem calculating the
+ * point where the annotation has to be displayed.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AnnotationPositionCalculationException extends AnnotationException {
+	private static final long serialVersionUID = -2759803769427383259L;
+
+	private static final String MESSAGE =
+        "An error has been produced calculating the annotation position";
+
+    private static final String KEY = "_AnnotationPositionCalculationException";
+
+    /**
+     * Creates a new {@link AnnotationPositionCalculationException}.
+     * 
+     * @param cause
+     *            the original cause
+     */
+    public AnnotationPositionCalculationException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculatorCreationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculatorCreationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculatorCreationException.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation.calculator;
+
+import org.gvsig.annotation.AnnotationException;
+
+
+/**
+ * This exception is thrown if it is not possible to create an
+ * {@link AnnotationPositionCalculator} object.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AnnotationPositionCalculatorCreationException extends AnnotationException {
+	private static final long serialVersionUID = 8725010909175451070L;
+	private String name = null;
+	
+	private static final String MESSAGE =
+        "An error has been produced creating the %(name) AnnotationPositionCalculator";
+
+    private static final String KEY = "_CreationAnnotationPositionCalculatoException";
+
+    /**
+     * Creates a new {@link AnnotationPositionCalculatorCreationException}.
+     * 
+     * @param cause
+     *            the original cause
+     */
+    public AnnotationPositionCalculatorCreationException(String name, Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+        setValue("name", name);
+    }      
+ 
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/calculator/AnnotationPositionCalculatorCreationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+/**
+ * Exception thrown when there is an error creating an Annotation layer.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AnnotationCreationException extends AnnotationException {
+
+    private static final long serialVersionUID = -4051458353306878010L;
+
+    private static final String MESSAGE =
+        "An error has been produced " + "creating the Annotation layer";
+
+    private static final String KEY = "_AnnotationCreationException";
+
+    /**
+     * Creates a new {@link AnnotationCreationException}.
+     * 
+     * @param cause
+     *            the original cause
+     */
+    public AnnotationCreationException(Throwable cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+    
+    public AnnotationCreationException(String message) {
+        super(message, KEY, serialVersionUID);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationFinishAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationFinishAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationFinishAction.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ * Action that can be executed at the end of the annotation 
+ * creation process. An example of action can be load the destination
+ * {@link FeatureStore} like a layer in a view.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface AnnotationCreationFinishAction {
+
+	/**
+	 * This method is called at the end of an annotation
+	 * creation process.
+	 * @param featureStore
+	 * the destination store.
+	 */
+	public void finished(FeatureStore featureStore);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationFinishAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLocator.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This locator is the entry point for the Annotation library, providing
+ * access to all Annotation services through the {@link AnnotationManager}
+ * .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AnnotationLocator extends BaseLocator {
+
+    /**
+     * Annotation manager name.
+     */
+    public static final String MANAGER_NAME = "Annotation.manager";
+
+    /**
+     * Annotation manager description.
+     */
+    public static final String MANAGER_DESCRIPTION = "Annotation Manager";
+
+    private static final String LOCATOR_NAME = "Annotation.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final AnnotationLocator INSTANCE =
+        new AnnotationLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static AnnotationLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name.
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to the AnnotationManager.
+     * 
+     * @return a reference to the AnnotationManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static AnnotationManager getManager() throws LocatorException {
+        return (AnnotationManager) getInstance().get(MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the AnnotationManager interface.
+     * 
+     * @param clazz
+     *            implementing the AnnotationManager interface
+     */
+    public static void registerManager(
+        Class<? extends AnnotationManager> clazz) {
+        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.annotation package documentation</title>
+</head>
+<body>
+
+	<p>Annotation library API.</p>
+	
+	<p>
+	It allows to get new Annotation and get their text.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationServiceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationServiceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationServiceException.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.annotation;
+
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Exception thrown by the {@link AnnotationCreationService}.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AnnotationCreationServiceException extends ServiceException {
+	private static final long serialVersionUID = -4200816057552322619L;
+	private final static String MESSAGE_KEY = "_AnnotationCreationServiceException";	
+
+
+	public AnnotationCreationServiceException(String message, Throwable e) {
+		super(message, e, MESSAGE_KEY, serialVersionUID);
+		this.initCause(e);		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationServiceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLibrary.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AnnotationLibrary extends AbstractLibrary {
+	
+    @Override
+    public void doRegistration() {
+        registerAsAPI(AnnotationLibrary.class);
+        require(DALLibrary.class);
+    }
+
+	@Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+		
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+    	
+    	// Validate there is any implementation registered.
+        AnnotationManager manager = AnnotationLocator.getManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                AnnotationLocator.MANAGER_NAME, AnnotationLocator
+                    .getInstance());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationService.java	(revision 42196)
@@ -0,0 +1,127 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+import org.gvsig.annotation.calculator.AnnotationPositionCalculator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.task.MonitorableTask;
+
+/**
+ * <p>
+ * This service is used to create an annotation layer.
+ * </p>
+ * <p>
+ * It inherits if {@link MonitorableTask}, and it means that the annotation 
+ * process can be monitorized by one or more observers that can listen
+ * all the export events.
+ * <p>
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface AnnotationCreationService extends MonitorableTask {
+
+	/**
+	 * @return
+	 * the store that is used like input.
+	 */
+	public FeatureStore getFeatureStore();
+	
+	/**
+	 * This method creates a {@link FeatureStore} with the annotations. 
+	 * @param destinationShapeFile 
+	 * path there the shape this the annotation information is created.
+	 * @param textValueAttributeIndex
+	 * attribute index of the original {@link FeatureStore} that contains the text.
+	 * @return
+	 * a new store with the annotation information.
+	 * @throws AnnotationCreationException
+	 * if there is an error creating the annotation store. 
+	 */
+    public FeatureStore createAnnotationStore(String destinationShapeFile, int textValueAttributeIndex) throws AnnotationCreationException;
+	
+    /**
+	 * This method creates a {@link FeatureStore} with the annotations. 
+	 * @param destinationShapeFile 
+	 * path there the shape this the annotation information is created.
+	 * @param textValueAttributeName
+	 * attribute name of the original {@link FeatureStore} that contains the text.
+	 * @return
+	 * a new store with the annotation information.
+	 * @throws AnnotationCreationException
+	 * if there is an error creating the annotation store. 
+	 */
+    public FeatureStore createAnnotationStore(String destinationShapeFile, String textValueAttributeName) throws AnnotationCreationException;   
+    
+    /**
+     * Sets the {@link AnnotationCreationFinishAction} that is used at the end
+     * of the annotation creation service. 
+     * @param annotationCreationFinishAction
+     * it contains an action that can be executed at the end of the annotation
+     * creation process.
+     */
+    public void setAnnotationCreationFinishAction(AnnotationCreationFinishAction annotationCreationFinishAction);
+    
+    /**
+     * @return
+     * the {@link AnnotationCreationFinishAction} used at the end of the annotation
+     * creation process.
+     */
+    public AnnotationCreationFinishAction getAnnotationCreationFinishAction();
+    
+    /**
+     * Sets an {@link AnnotationPositionCalculator} used to calculate the
+     * position of the 
+     * @param annotationPositionCalculator
+     */
+    public void setAnnotationPositionCalculator(AnnotationPositionCalculator annotationPositionCalculator);
+       
+    public void setFontTypeAttribute(int index) throws DataException;
+    
+    public void setFontStyleAttribute(int index) throws DataException;
+    			
+    public void setFontColorAttribute(int index) throws DataException;
+    
+    public void setFontHeigthAttribute(int index) throws DataException;
+    
+    public void setFontRotationAttribute(int index) throws DataException;
+    
+    public void setFontTypeAttribute(String attributeName) throws DataException;
+    
+    public void setFontStyleAttribute(String attributeName) throws DataException;
+    		
+    public void setFontColorAttribute(String attributeName) throws DataException;
+    
+    public void setFontHeigthAttribute(String attributeName) throws DataException;
+    
+    public void setFontRotationAttribute(String attributeName) throws DataException;
+    
+    /**
+     * Returns the {@link AnnotationManager}
+     * 
+     * @return {@link AnnotationManager}
+     * @see {@link AnnotationManager}
+     */
+    public AnnotationManager getManager();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationCreationService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationManager.java	(revision 42196)
@@ -0,0 +1,252 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.annotation;
+
+import java.awt.Color;
+import java.util.List;
+
+import org.gvsig.annotation.calculator.AnnotationPositionCalculator;
+import org.gvsig.annotation.calculator.AnnotationPositionCalculatorCreationException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * This class is responsible of the management of the library's business logic.
+ * It is the library's main entry point, and provides all the services to manage
+ * {@link AnnotationCreationService}s.
+ * 
+ * @see AnnotationCreationService
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface AnnotationManager {
+	/**
+	 * Name of the datastore attribute that contains the text
+	 * of the annotation.
+	 */
+	public static final String TEXTVALUE_ATTRIBUTE_NAME = "Text";
+	
+	/**
+	 * Name of the datastore attribute that contains the font type
+	 * of the annotation.
+	 */
+	public static final String FONTTYPE_ATTRIBUTE_NAME = "FontType";
+	
+	/**
+	 * Name of the datastore attribute that contains the font style
+	 * of the annotation.
+	 */
+	public static final String FONTSTYLE_ATTRIBUTE_NAME = "FontStyle";
+	
+	/**
+	 * Name of the datastore attribute that contains the font color
+	 * of the annotation.
+	 */
+	public static final String FONTCOLOR_ATTRIBUTE_NAME = "FontColor";
+	
+	/**
+	 * Name of the datastore attribute that contains the font rotation
+	 * of the annotation.
+	 */
+	public static final String FONTROTATION_ATTRIBUTE_NAME = "Rotation";
+	
+	/**
+	 * Name of the datastore attribute that contains the font heigth
+	 * of the annotation.
+	 */
+	public static final String FONTHEGTH_ATTRIBUTE_NAME = "Heigth";
+
+	/**
+	 * Create an instance of a {@link AnnotationCreationService}.
+	 * 
+	 * @param the feature store that is used like input.
+	 * @return {@link AnnotationCreationService}
+	 * @throws ServiceException
+	 *             if there is an error getting the service
+	 */
+	public AnnotationCreationService getAnnotationCreationService(FeatureStore featureStore)
+	throws ServiceException;
+
+	/**
+	 * It registers a class that can be used to caclulate the position of an
+	 * annotation.
+	 * @param name
+	 * The name used to register the class.
+	 * @param annotationPositionCalculatorClass
+	 * The class that is able to calculate an annotation point.
+	 */
+	public void registerAnnotationPositionCalculator(String name, Class annotationPositionCalculatorClass);
+
+	/**
+	 * It registers the default implementation of an {@link AnnotationPositionCalculator}
+	 * class. It will be used by default if the user don't specify any of them.
+	 * @param annotationPositionCalculatorClass
+	 * A class that is able to calculate an annotation point.
+	 */
+	public void registerDefaultAnnotationPositionCalculator(Class annotationPositionCalculatorClass);
+
+	/**
+	 * It returns an object that can be used to create the point
+	 * where the annotation is displayed.
+	 * @param name
+	 * the name used to register the class.
+	 * @return
+	 * a class that is able to calculate an annotation point.
+	 * @throws AnnotationPositionCalculatorCreationException
+	 * if is not possible to create the object.
+	 */
+	public AnnotationPositionCalculator getAnnotationPositionCalculator(String name) throws AnnotationPositionCalculatorCreationException;
+
+	/**
+	 * It returns the default {@link AnnotationPositionCalculator}.
+	 * @return
+	 * the default {@link AnnotationPositionCalculator}.
+	 * @throws AnnotationPositionCalculatorCreationException
+	 * if is not possible to create the object.
+	 */
+	public AnnotationPositionCalculator getDefaultAnnotationPositionCalculator() throws AnnotationPositionCalculatorCreationException;
+
+	/**
+	 * @return
+	 * the list of the names used to register the {@link AnnotationPositionCalculator} classes.
+	 */
+	public List<String> getAnnotationPositionCalculatorList();
+
+	/**
+	 * Value used like the default value for the text field.
+	 * @return
+	 * the default text value.
+	 */
+	public String getDefaultTextValue();
+
+	/**
+	 * Set the default value for the text field.
+	 * @param textValue
+	 * the default text value.
+	 */
+	public void setDefaultTextValue(String textValue);
+
+	/**
+	 * Value used like the default value for the font type field.
+	 * @return
+	 * the default font type value.
+	 */
+	public String getDefaultFontType();
+
+	/**
+	 * Set the default value for the font type field.
+	 * @param fontType
+	 * the default font type value.
+	 */
+	public void setDefaultFontType(String fontType);
+
+	/**
+	 * @return
+	 * the list of possible values for the font type field.
+	 */
+	public List<String> getFontTypes();
+
+	/**
+	 * It adds a new value for the font type field.
+	 * @param fontType
+	 * the new font type.
+	 */
+	public void addFontType(String fontType);
+
+	/**
+	 * Value used like the default value for the font style field.
+	 * @return
+	 * the default font style value.
+	 */
+	public String getDefaultFontStyle();
+
+	/**
+	 * Set the default value for the font style field.
+	 * @param fontStyle
+	 * the default font style value.
+	 */
+	public void setDefaultFontStyle(String fontStyle);
+
+	/**
+	 * @return
+	 * the list of possible values for the font style field.
+	 */
+	public List<String> getFontStyles();
+
+	/**
+	 * It adds a new value for the font style field.
+	 * @param fontStyle
+	 * the new font style.
+	 */
+	public void addFontStyle(String fontStyle);
+
+	/**
+	 * Value used like the default value for the font color field.
+	 * @return
+	 * the default font color value.
+	 */
+	public int getDefaultFontColor();
+
+	/**
+	 * Set the default value for the font color field.
+	 * @param fontColor
+	 * the default font color value.
+	 */
+	public void setDefaultFontColor(int fontColor);
+	
+	/**
+	 * Set the default value for the font color field.
+	 * @param fontColor
+	 * the default font color value.
+	 */
+	public void setDefaultFontColor(Color fontColor);
+
+	/**
+	 * Value used like the default value for the font height field.
+	 * @return
+	 * the default font height value.
+	 */
+	public double getDefaultFontHeight();
+
+	/**
+	 * Set the default value for the font height field.
+	 * @param fontHeight
+	 * the default font height value.
+	 */
+	public void setDefaultFontHeight(double fontHeight);
+
+	/**
+	 * Value used like the default value for the font rotation field.
+	 * @return
+	 * the default font rotation value.
+	 */
+	public double getDefaultFontRotation();
+
+	/**
+	 * Set the default value for the font rotation field.
+	 * @param fontRotation
+	 * the default font rotation value.
+	 */
+	public void setDefaultFontRotation(double fontRotation);        
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/src/main/java/org/gvsig/annotation/AnnotationManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/pom.xml	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.annotation.lib.api</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.annotation.lib</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation/org.gvsig.annotation.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.annotation
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.timesupport.TimeSupportLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/DataTypes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/DataTypes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/DataTypes.java	(revision 42196)
@@ -0,0 +1,38 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * This interface defines a set of constants for basic time data types.
+ * </p>
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface DataTypes extends org.gvsig.tools.dataTypes.DataTypes {
+    
+    public static final int INSTANT = OBJECT + 4;
+    public static final int INTERVAL = OBJECT + 5;
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Time.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Time.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Time.java	(revision 42196)
@@ -0,0 +1,89 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * This object is in the top level of the time hierarchy. All the temporal 
+ * objects have to inherit of this interface.
+ * </p>
+ * 
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface Time {
+    
+    /**
+     * Does this time intersects with the time passed.
+     * @param time
+     *          an instant to check against, null means now 
+     * @return
+     *          <code>true</code> if the time intersects with the time passed in
+     */
+    public boolean intersects(Time time);
+    
+    /**
+     * Checks if the time is a relative temporal type, that is an object that has
+     * a Chronology that establish how a time object can be converted into other
+     * object with date time fields.
+     * @return
+     *          <code>true</code) if the time object is relative
+     */
+    public boolean isRelative();
+    
+    /**
+     * Checks if the time is an absolute temporal type, that is an object that doesn't
+     * has a time zone.
+     * @return
+     *          <code>true</code> if the time object is absolute
+     */
+    public boolean isAbsolute();
+    
+    /**
+     * Checks if the time is an interval, that is an object that represents 
+     * a period of time between two instants.
+     * @return
+     *          <code>true</code> if the time object is an interval
+     */
+    public boolean isInterval();
+    
+    /**
+     * Checks if the time is an instant, that is an object that represents 
+     * a position in a time scale. In practice, an instant is an interval 
+     * whose duration is less than the resolution of the time scale.
+     * @return
+     *          <code>true</code> if the time object is an instant.
+     */
+    public boolean isInstant();
+        
+    /**
+     * Gets the chronology of the instant. The Chronology provides conversion 
+     * from the millisecond value to meaningful fields in a particular calendar system. 
+     * @return
+     *      the Chronology, never null
+     */
+    public Chronology getChronology();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/AnimateClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/AnimateClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/AnimateClient.java	(revision 42196)
@@ -0,0 +1,55 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.animation;
+
+import org.gvsig.timesupport.RelativeInstant;
+
+/**
+ * This interface should be implemented by clients of this module. The
+ * library calls update function each time that an increment happen. 
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public interface AnimateClient {
+	/**
+	 * Updates the animation client
+	 * @param startDateTime
+	 * 			Date when the step starts
+	 * @param endDateTime
+	 *          Date when the step ends
+	 */
+	public void update(RelativeInstant startDateTime, RelativeInstant endDateTime);
+	
+	/**
+	 * This event is thrown when an iteration finishes. An iteration is a complete
+	 * cycle from the start date to the finish date.
+	 * @param endDateTime
+	 * 			Date when the iteration ends
+	 */
+	public void endIteration(RelativeInstant endDateTime);
+	
+	/**
+	 * This event is thrown when the animation finishes
+	 */
+	public void end();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/TimeAnimation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/TimeAnimation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/TimeAnimation.java	(revision 42196)
@@ -0,0 +1,80 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.animation;
+
+/**
+ * Time animation main interface. That is the main interface to control an
+ * animation by time.
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public interface TimeAnimation {
+	public static final int          YEAR         = 0;
+	public static final int          MONTH        = 1;
+	public static final int          WEEK         = 2;
+	public static final int          DAY          = 3;
+	public static final int          HOUR         = 4;
+	public static final int          MINUTE       = 5;
+	public static final int          SECOND       = 6;
+	public static final int          MILLISECOND  = 7;
+	
+	public static final int          NO_LOOP      = 0;
+	public static final int          LOOP         = 1;
+	public static final int          LOOP_N       = 2;
+	
+	/**
+	 * Gets the data model for time animation. Data model contains 
+	 * the time window, the step, the speed of progress and other
+	 * information about an animation
+	 * @return {@link TimeAnimationDataModel}
+	 */
+	public TimeAnimationDataModel getDataModel();
+	
+	/**
+	 * Sets the client which receives events from the animation
+	 * @param client
+	 *        Interface with the functions to call when the animation increase a step, ends
+	 *        or an iteration ends
+	 */
+	public void setAnimateClient(AnimateClient client);
+	
+	/**
+	 * Stops the animation
+	 */
+	public void stopAnimation();
+	
+	/**
+	 * Pauses the animation
+	 */
+	public void pauseAnimation();
+	
+	/**
+	 * Starts the animation
+	 */
+	public void startAnimation();
+	
+	/**
+	 * Tests if this thread is alive. A thread is alive if it has been started and has not yet died. 
+	 */
+	public boolean isAlive();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/TimeAnimationDataModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/TimeAnimationDataModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/animation/TimeAnimationDataModel.java	(revision 42196)
@@ -0,0 +1,219 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.animation;
+
+import org.gvsig.timesupport.RelativeInstant;
+
+/**
+ * Data model for animation. This is useful to configure the animation
+ * parameters. When the animation runs read the values of this object.
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public interface TimeAnimationDataModel {
+	public static final int          PLAY    = 0;
+	public static final int          STOP    = 1;
+	public static final int          PAUSE   = 2;
+	public static final int          CLOSE   = 3;
+	
+	public static final int          ACCEPT  = 0;
+	public static final int          CANCEL  = 1;
+	
+	//*************************
+	
+	/**
+	 * Assigns the window time. The scale is the selected with the
+	 * method setWindowScale.
+	 * @param windowTime
+	 *        Window of time of each step
+	 */
+	public void setWindowTime(int windowTime);
+	
+	/**
+	 * Gets the window time. The scale is the selected with the
+	 * method setWindowScale.
+	 */
+	public int getWindowTime();
+	
+	/**
+	 * Gets the initial speed in milliseconds
+	 * @param speed
+	 */
+	public int getTimeStep();
+	
+	/**
+	 * Sets the animation speed 
+	 * @param speed
+	 *        Speed in milliseconds
+	 */
+	public void setTimeStep(int timeStep);
+	
+	/**
+	 * Returns a constant defined in TimeAnimation. This constant represents the
+	 * scale of time of the window (year, month, day, ...)
+	 * @return
+	 */
+	public int getWindowTimeScale();
+	
+	/**
+	 * Assigns a constant defined in TimeAnimation. This constant represents the
+	 * scale of time of the window (year, month, day, ...)
+	 * @return
+	 */
+	public void setWindowTimeScale(int windowTimeScale);
+	
+	/**
+	 * Returns a constant defined in TimeAnimation. This constant represents the
+	 * scale of time of the time step (year, month, day, ...)
+	 * @return
+	 */
+	public int getTimeStepScale();
+	
+	/**
+	 * Assigns a constant defined in TimeAnimation. This constant represents the
+	 * scale of time of the time step (year, month, day, ...)
+	 * @return
+	 */
+	public void setTimeStepScale(int timeStepScale);
+	
+	//*************************
+	
+	/**
+	 * Gets the time step initial value in the text field
+	 * @param timeStep
+	 */
+	public int getSpeed();
+	
+	/**
+	 * Sets the speed of progress
+	 * @param speed
+	 */
+	public void setSpeed(int speed);
+	
+	/**
+	 * Gets the number of iterations
+	 * @return
+	 */
+	public int getIterations();
+	
+	/**
+	 * Sets the number of iterations
+	 * @param iterations
+	 */
+	public void setIterations(int iterations);
+	
+	/**
+	 * Gets the number of loops
+	 * @return
+	 */
+	public int getLoop();
+	
+	/**
+	 * Sets the number of loops
+	 * @return
+	 */
+	public void setLoop(int loop);
+	
+	//***************************
+	
+	/**
+	 * Sets the time window to visualize in each time instant. The time window is the
+	 * amount of data to show in each step. At the beginning this window goes from the
+	 * initial data time. When the animation has been started this window is moving along
+	 * the time line. 
+	 * @param start
+	 *        Instant in which the animation starts
+	 * @param end
+	 *        Instant in which the animation ends
+	 */
+	public void setTimeWindow(RelativeInstant start, RelativeInstant end);
+	
+	/**
+	 * Gets the end of the time window to visualize in each time instant. The time window is the
+	 * amount of data to show in each step. At the beginning this window goes from the
+	 * initial data time. When the animation has been started this window is moving along
+	 * the time line. 
+	 * @return {@link RelativeInstant}
+	 */
+	public RelativeInstant getEndTimeWindow();
+
+	/**
+	 * Gets the begin of the time window to visualize in each time instant. The time window is the
+	 * amount of data to show in each step. At the beginning this window goes from the
+	 * initial data time. When the animation has been started this window is moving along
+	 * the time line. 
+	 * @return {@link RelativeInstant}
+	 */
+	public RelativeInstant getInitTimeWindow();
+	
+	//***************************
+	
+	/**
+	 * Sets the time interval. The time interval contains two date. The start date is the moment
+	 * in which the animation starts and in the end date the animation ends. 
+	 * @param timeWindowValue
+	 */
+	public void setTimeInterval(RelativeInstant start, RelativeInstant end);
+	
+	/**
+	 * Gets the initial date of the time window to visualize in each time instant. 
+	 * The time window is the amount of data to show in each step.
+	 * @return {@link RelativeInstant}
+	 */
+	public RelativeInstant getInitTime();
+	
+	/**
+	 * Gets the end date of the time window to visualize in each time instant. 
+	 * The time window is the amount of data to show in each step.
+	 * @return {@link RelativeInstant}
+	 */
+	public RelativeInstant getEndTime();
+	
+	//***************************
+	
+	/**
+	 * Gets an array of seven values. Each element of this 
+	 * array represents the number of years, months, days, hours, 
+	 * minutes, seconds and milliseconds of a window time.
+	 */
+	public int[] getWindowTimeByPartOfData();
+	
+	/**
+	 * Gets an array of seven values. Each element of this 
+	 * array represents the number of years, months, days, hours, 
+	 * minutes, seconds and milliseconds of a step.
+	 */
+	public int[] getStepByPartOfData();
+	
+	/**
+	 * Gets the slider position. This position is specified in real time. 
+	 * @return {@link RelativeInstant} 
+	 */
+	public RelativeInstant getSliderPosition();
+	
+	/**
+	 * Assigns the slider position. This position is specified in real time. 
+	 * @param position
+	 */
+	public void setSliderPosition(RelativeInstant position);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstantTypeNotRegisteredException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstantTypeNotRegisteredException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstantTypeNotRegisteredException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+/**
+ * Exception thrown when there is an error getting a TimeSupport message.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AbsoluteInstantTypeNotRegisteredException extends TimeSupportException {
+
+    private static final long serialVersionUID = -4051458353306878010L;
+
+    private static final String MESSAGE =
+        "An error has been produced " + "getting the AbsoluteInstantTypeNotRegisteredException";
+
+    private static final String KEY = "_AbsoluteInstantTypeNotRegisteredException";
+
+    /**
+     * Creates a new {@link AbsoluteInstantTypeNotRegisteredException}.
+     * 
+     * @param cause
+     *            the original cause
+     */
+    public AbsoluteInstantTypeNotRegisteredException(int dateTimeFieldTypeNotRegisteredException) {
+        super(MESSAGE, null, KEY, serialVersionUID);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteIntervalTypeNotRegisteredException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteIntervalTypeNotRegisteredException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteIntervalTypeNotRegisteredException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+/**
+ * Exception thrown when there is an error getting a TimeSupport message.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class AbsoluteIntervalTypeNotRegisteredException extends TimeSupportException {
+
+    private static final long serialVersionUID = -4051458353306878010L;
+
+    private static final String MESSAGE =
+        "An error has been produced " + "getting the AbsoluteIntervalTypeNotRegisteredException";
+
+    private static final String KEY = "_absoluteIntervalTypeNotRegisteredException";
+
+    /**
+     * Creates a new {@link AbsoluteIntervalTypeNotRegisteredException}.
+     * 
+     * @param cause
+     *            the original cause
+     */
+    public AbsoluteIntervalTypeNotRegisteredException(int durationFieldTypeNotRegisteredException) {
+        super(MESSAGE, null, KEY, serialVersionUID);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/EditableRelativeInstant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/EditableRelativeInstant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/EditableRelativeInstant.java	(revision 42196)
@@ -0,0 +1,128 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * The {@link RelativeInstant} ins inmutable, but sometimes is necessary to
+ * edit it. This class is an editable copy of a realtive instant that
+ * cab be edited.
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface EditableRelativeInstant extends RelativeInstant{
+    
+    /**
+     * Set the time from fields. The date part of this object will be unaffected.
+     *
+     * @param hour
+     *          the hour
+     * @param minuteOfHour
+     *          the minute of the hour
+     * @param secondOfMinute
+     *          the second of the minute
+     * @param millisOfSecond
+     *          the millisecond of the second
+     * @throws IllegalArgumentException if the value is invalid
+     * 
+     */
+    public void setTime(final int hour, final int minuteOfHour, final int secondOfMinute, final int millisOfSecond);
+
+    /**
+     * Set the date from fields. The time part of this object will be unaffected.
+     *
+     * @param year
+     *          the year
+     * @param monthOfYear
+     *          the month of the year
+     * @param dayOfMonth
+     *          the day of the month
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    public void setDate(final int year, final int monthOfYear, final int dayOfMonth);
+    
+    /**
+     * Add a number of years to the date.
+     *
+     * @param years  the years to add
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    public void addYears(final int years);
+    
+    /**
+     * Add a number of days to the date.
+     *
+     * @param days
+     *          the days to add
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    public void addDays(final int days);
+           
+    /**
+     * Add a number of hours to the date.
+     *
+     * @param hours  
+     *          the hours to add
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    public void addHours(final int hours);
+    
+    /**
+     * Add a number of minutes to the date.
+     *
+     * @param minutes
+     *          the minutes to add
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    public void addMinutes(final int minutes);
+    
+    /**
+     * Add a number of seconds to the date.
+     *
+     * @param seconds
+     *            the seconds to add
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    public void addSeconds(final int seconds);
+    
+    /**
+     * Add a number of millis to the date.
+     *
+     * @param millis
+     *          the millis to add
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    public void addMillis(final int millis);
+}
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportException.java	(revision 42196)
@@ -0,0 +1,96 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Generic exception thrown in the TimeSupport API when the exception or error
+ * may be dealt by the program or the user of the program which is a client of
+ * the TimeSupport API.
+ * 
+ * @see {@link TimeFactoryService}
+ * @see {@link TimeSupportManager}
+ * @author gvSIG team.
+ * @version $Id$
+ */
+public class TimeSupportException extends BaseException {
+
+    private static final long serialVersionUID = 6756475060924237176L;
+
+    private static final String MESSAGE =
+        "An error has been produced in the TimeSupport library";
+
+    private static final String KEY = "_TimeSupportException";
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <strong>Don't use this constructor in child classes.</strong>
+     */
+    public TimeSupportException() {
+        super(MESSAGE, KEY, serialVersionUID);
+    }
+
+    /**
+     * Constructor to be used in rare cases, usually you must create a new child
+     * exception class for each case.
+     * <p>
+     * <strong>Don't use this constructor in child classes.</strong>
+     * </p>
+     * 
+     * @param cause
+     *            the original cause of the exception
+     */
+    public TimeSupportException(Exception cause) {
+        super(MESSAGE, cause, KEY, serialVersionUID);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected TimeSupportException(String message, String key, long code) {
+        super(message, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long).
+     * @param message
+     *            the default messageFormat to describe the exception
+     * @param cause
+     *            the original cause of the exception
+     * @param key
+     *            the key to use to search a localized messageFormnata
+     * @param code
+     *            the unique code to identify the exception
+     */
+    protected TimeSupportException(String message, Throwable cause,
+        String key, long code) {
+        super(message, cause, key, code);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/RelativeInstant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/RelativeInstant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/RelativeInstant.java	(revision 42196)
@@ -0,0 +1,176 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import java.util.Date;
+
+import org.gvsig.tools.lang.Cloneable;
+
+/**
+ * <p>
+ * A relative instant is defined like an instant in the datetime continuum 
+ * specified as a number of milliseconds from 1970-01-01T00:00Z. This definition 
+ * of milliseconds is consistent with that of the JDK in Date or Calendar.
+ * </p>
+ * <p>It contains also a Chronology which determines how the millisecond 
+ * instant value is converted into the date time fields. The default Chronology 
+ * can be set using the {@link TimeSupportManager} class. (e.g: 1st January 2010)
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface RelativeInstant extends Instant, Cloneable{
+  
+    /**
+     * Get the date time as a <code>java.util.Date</code>.
+     * <p>
+     * The <code>Date</code> object created has exactly the same millisecond
+     * instant as this object.
+     * </p>
+     *
+     * @return 
+     *          a Date initialised with this relative instant
+     */
+    public Date toDate();
+    
+    /**
+     * Compares this object with the specified object for ascending
+     * millisecond instant order. This ordering is inconsistent with
+     * equals, as it ignores the Chronology.
+     *
+     * @param instant
+     *          a readable instant to check against
+     * @return 
+     *          negative value if this is less, 0 if equal, or positive 
+     *          value if greater
+     */
+    public int compareTo(Instant instant);
+             
+    /**
+     * Gets the milliseconds of the datetime instant from the Java epoch
+     * of 1970-01-01T00:00:00Z.
+     * 
+     * @return 
+     *          the number of milliseconds since 1970-01-01T00:00:00Z
+     */
+    public long toMillis();    
+    
+    /**
+     * Get the year field value.
+     * 
+     * @return 
+     *          the year
+     */
+    public int getYear();
+
+    /**
+     * Get the month of year field value.
+     * 
+     * @return 
+     *          the month of year
+     */
+    public int getMonthOfYear();
+ 
+    /**
+     * Get the day of month field value.
+     * 
+     * @return 
+     *          the day of month
+     */
+    public int getDayOfMonth();
+
+    /**
+     * Get the hour of day field value.
+     * 
+     * @return 
+     *          the hour of month
+     */
+    public int getHourOfDay();
+
+    /**
+     * Get the minute of day field value.
+     * 
+     * @return 
+     *          the minute of day
+     */
+    public int getMinuteOfDay();
+
+    /**
+     * Get the minute of hour field value.
+     * 
+     * @return 
+     *          the minute of hour
+     */
+    public int getMinuteOfHour();   
+
+    /**
+     * Get the second of day field value.
+     * 
+     * @return 
+     *          the second of day
+     */
+    public int getSecondOfDay();
+
+    /**
+     * Get the second of minute field value.
+     * 
+     * @return 
+     *          the second of minute
+     */
+    public int getSecondOfMinute();
+
+    /**
+     * Get the millis of second field value.
+     * 
+     * @return 
+     *          the millis of second
+     */
+    public int getMillisOfSecond();
+    
+    /**
+     * Get an editable copy used to edit other instance of
+     * a relative instant. The new copy is initialized with
+     * the values of this intant.
+     *    
+     * @return
+     *          a copy to edit the instant 
+     */
+    public EditableRelativeInstant getEditableCopy();
+    
+    /**
+     * Output the instant using the specified format pattern.
+     *
+     * @param 
+     *          pattern  the pattern specification, null means 
+     *          use <code>toString</code>
+     */
+    public String toString(String pattern);   
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/package.html	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.timesupport package documentation</title>
+</head>
+<body>
+
+	<p>TimeSupport library API.</p>
+	
+	<p>
+	It allows to get new TimeSupport and get their text.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportLocator.java	(revision 42196)
@@ -0,0 +1,98 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This locator is the entry point for the TimeSupport library, providing
+ * access to all TimeSupport services through the {@link TimeSupportManager}
+ * .
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class TimeSupportLocator extends BaseLocator {
+
+    /**
+     * TimeSupport manager name.
+     */
+    public static final String MANAGER_NAME = "TimeSupport.manager";
+
+    /**
+     * TimeSupport manager description.
+     */
+    public static final String MANAGER_DESCRIPTION = "TimeSupport Manager";
+
+    private static final String LOCATOR_NAME = "TimeSupport.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final TimeSupportLocator INSTANCE =
+        new TimeSupportLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static TimeSupportLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name.
+     * 
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to the TimeSupportManager.
+     * 
+     * @return a reference to the TimeSupportManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static TimeSupportManager getManager() throws LocatorException {
+        return (TimeSupportManager) getInstance().get(MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the TimeSupportManager interface.
+     * 
+     * @param clazz
+     *            implementing the TimeSupportManager interface
+     */
+    public static void registerManager(
+        Class<? extends TimeSupportManager> clazz) {
+        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstant.java	(revision 42196)
@@ -0,0 +1,163 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import org.gvsig.tools.lang.Cloneable;
+
+
+/**
+ * <p>
+ * It defines a partial time that does not support every datetime field,
+ * and is thus a local time. It cannot be compared to a {@link RelativeInstant},
+ * as it does not fully specify an instant in time. 
+ * </p>
+ * <p>
+ * The time it does specify is a local time, and does not include a time zone. 
+ * An AbsoluteInstant supports a subset of the fields on the chronology.
+ * </p> 
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface AbsoluteInstant extends Instant, Cloneable{
+   
+    /**
+     * Gets the number of fields in this absolute instant.     
+     * @return 
+     *          the field count
+     */
+    public int size();
+   
+    /**
+     * Gets the field type at the specified index.
+     * @param index 
+     *          the index to retrieve
+     * @return 
+     *          the field at the specified index
+     */
+    public AbsoluteInstantType getFieldType(int index);
+    
+    /**
+     * Gets the value of the field at the specifed index.
+     * @param index 
+     *          the index
+     * @return the value
+     * @throws IndexOutOfBoundsException if the index is invalid
+     */
+    public int getValue(int index);
+    
+    /**
+     * Gets the number of years of this absolute instant. 
+     * @return
+     *          the number of years
+     */
+    public int getYears();
+
+    /**
+     * Gets the number of months of this absolute instant. 
+     * @return
+     *          the number of months
+     */
+    public int getMonths();
+
+    /**
+     * Gets the number of weeks of this absolute instant. 
+     * @return
+     *          the number of weeks
+     */
+    public int getWeeks();
+    
+    /**
+     * Gets the number of days of this absolute instant. 
+     * @return
+     *          the number of days
+     */
+    public int getDays();
+
+    /**
+     * Gets the number of hours of this absolute instant. 
+     * @return
+     *          the number of hours
+     */
+    public int getHours();
+
+    /**
+     * Gets the number of minutes of this absolute instant. 
+     * @return
+     *          the number of minutes
+     */
+    public int getMinutes();
+
+    /**
+     * Gets the number of seconds of this absolute instant. 
+     * @return
+     *          the number of seconds
+     */
+    public int getSeconds();
+    
+    /**
+     * Gets the number of millis of this absolute instant. 
+     * @return
+     *          the number of millis
+     */
+    public int getMillis();
+        
+    /**
+     * Gets the duration of the instant. It returns a duration assuming a 365
+     * days year, 12 months year, 30 days month, 7 day week, 24 hour day, 60 minute hour,
+     * 60 second minute and 1000 millis second. 
+     * @return
+     *          a duration equivalent to this instant from the time 0
+     */
+    public Duration toStandardDuration();
+    
+    /**
+     * Gets a copy of this instance with the specified period take away.
+     * If the amount is zero or null, then <code>this</code> is returned.     *
+     * @param period  
+     *          the period to reduce this instant by
+     * @return 
+     *          a copy of this instance with the period taken away
+     * @throws ArithmeticException if the new instant exceeds the capacity of a long
+     */
+    public AbsoluteInstant minus(AbsoluteInterval interval);
+
+    /**
+     * Gets a copy of this instance with the specified period added.
+     * If the amount is zero or null, then <code>this</code> is returned.
+     *
+     * @param period
+     *          the duration to add to this one, null means zero
+     * @return
+     *          a copy of this instance with the period added
+     * @throws ArithmeticException if the new instant exceeds the capacity of a long
+     */
+    public AbsoluteInstant plus(AbsoluteInterval interval);     
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Instant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Instant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Instant.java	(revision 42196)
@@ -0,0 +1,75 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * An Instant represents a position in a time scale. In practice, 
+ * an instant is an interval whose duration is less than the resolution
+ * of the time scale.
+ * </p>
+ * <p>All the Instant subclasses have to be immutable and have to 
+ * provide a Chronology as well. All standard Chronology classes are
+ * also immutable.
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface Instant extends Time{
+   
+    /**
+     * Is this instant equal to the instant passed in comparing solely by millisecond. 
+     * @param instant
+     *          an instant to check against, null means now 
+     * @return
+     *          <code>true</code> if the instant is equal to the instant passed in
+     */
+    public boolean isEqual(Instant instant);
+    
+    /**
+     * Is this instant after the instant passed in comparing solely by millisecond. 
+     * @param instant
+     *          an instant to check against, null means now 
+     * @return
+     *          <code>true</code> if the instant is after the instant passed in
+     */
+    public boolean isAfter(Instant instant);
+    
+    /**
+     * Is this instant before the instant passed in comparing solely by millisecond. 
+     * @param instant
+     *          an instant to check against, null means now 
+     * @return
+     *          <code>true</code> if the instant is before the instant passed in
+     */
+    public boolean isBefore(Instant instant);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/RelativeInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/RelativeInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/RelativeInterval.java	(revision 42196)
@@ -0,0 +1,144 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import org.gvsig.tools.lang.Cloneable;
+
+
+/**
+ * <p>
+ * A RelativeInterval is defined like an interval between two {@link RelativeInstant}s.
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface RelativeInterval extends Interval, Cloneable{
+    
+    /**
+     * Does this time interval contain the specified instant.     * 
+     * @param instant
+     *          the instant, null means now
+     * @return 
+     *          <code>true</code> if this time interval contains the instant
+     */
+    public boolean contains(RelativeInstant instant);
+    
+    /**
+     * Does this time interval contain the specified interval.     * 
+     * @param instant
+     *          the time interval to compare to, null means a zero 
+     *          duration interval now
+     * @return 
+     *          <code>true</code> if this time interval contains the interval
+     */
+    public boolean contains(RelativeInterval interval);
+    
+    /**
+     * Does this time interval overlap the specified time interval.
+     * @param interval
+     *          the time interval to compare to, null means a zero 
+     *          length interval now
+     * @return
+     *          <code>true</code> if the time intervals overlap
+     */
+    public boolean overlaps(RelativeInterval interval);
+    
+    /**
+     * Is this time interval after the specified instant. Intervals are inclusive
+     * of the start instant and exclusive of the end.
+     * @param instant
+     *          the instant to compare to, null means now
+     * @return
+     *          <code>true</code> if this time interval is after the instant
+     */
+    public boolean isAfter(RelativeInstant instant);
+
+    /**
+     * Is this time interval entirely after the specified interval.
+     * Intervals are inclusive of the start instant and exclusive of the end.
+     * Only the end time of the specified interval is used in the comparison.
+     * @param interval
+     *          the interval to compare to, null means now
+     * @return 
+     *          <code>true</code> if this time interval is after the interval specified
+     */
+    public boolean isAfter(RelativeInterval interval);
+
+    /**
+     * Is this time interval before the specified instant. Intervals are inclusive
+     * of the start instant and exclusive of the end.
+     * @param instant
+     *          the instant to compare to, null means now
+     * @return
+     *          <code>true</code> if this time interval is before the instant
+     */
+    public boolean isBefore(RelativeInstant instant);
+
+    /**
+     * Is this time interval entirely before the specified interval.
+     * Intervals are inclusive of the start instant and exclusive of the end.
+     * Only the end time of the specified interval is used in the comparison.
+     * @param interval
+     *          the interval to compare to, null means now
+     * @return 
+     *          <code>true</code> if this time interval is before the interval specified
+     */
+    public boolean isBefore(RelativeInterval interval);
+    
+    /**
+     * Gets the duration of this time interval.
+     * @return
+     *          the duration of the time interval
+     */
+    public Duration toDuration();
+        
+    /**
+     * Gets the duration of this time interval in milliseconds. 
+     * The duration is equal to the end millis minus the start millis.     
+     * @return
+     *          the duration of the time interval in milliseconds
+     */
+    public long toDurationMillis();
+      
+    /**
+     * Gets the start of this time interval, which is inclusive, as an Instant. 
+     * @return
+     *          the start of the time interval
+     */
+    public RelativeInstant getStart();
+
+    /**
+     * Gets the end of this time interval, which is exclusive, as an Instant. 
+     * @return
+     *          the end of the time interval
+     */
+    public RelativeInstant getEnd();
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportLibrary.java	(revision 42196)
@@ -0,0 +1,55 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library for API initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class TimeSupportLibrary extends AbstractLibrary {
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        TimeSupportManager manager = TimeSupportLocator.getManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                TimeSupportLocator.MANAGER_NAME, TimeSupportLocator
+                    .getInstance());
+        }       
+       
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstantType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstantType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInstantType.java	(revision 42196)
@@ -0,0 +1,85 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * Identifies a field, such as year or minuteOfHour, in a chronology-neutral way.
+ * </p>
+ * <p>
+ * Instances of this class are singletons and they can be compared using the
+ * {@link AbsoluteInstantType}{@link #getType()} method and the <code>==</code>
+ * operator.
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface AbsoluteInstantType {
+	 public static final int ERA = 1;
+	 public static final int YEAR_OF_ERA = 2;
+	 public static final int CENTURY_OF_ERA = 3;
+	 public static final int YEAR_OF_CENTURY = 4;
+	 public static final int YEAR = 5;
+	 public static final int DAY_OF_YEAR = 6;
+	 public static final int MONTH_OF_YEAR = 7;
+	 public static final int DAY_OF_MONTH = 8;
+	 public static final int WEEKYEAR_OF_CENTURY = 9;
+	 public static final int WEEKYEAR = 10;
+	 public static final int WEEK_OF_WEEKYEAR = 11;
+	 public static final int DAY_OF_WEEK = 12;
+	 public static final int HALFDAY_OF_DAY = 13;
+	 public static final int HOUR_OF_HALFDAY = 14;
+	 public static final int CLOCKHOUR_OF_HALFDAY = 15;
+	 public static final int CLOCKHOUR_OF_DAY = 16;
+	 public static final int HOUR_OF_DAY = 17;
+	 public static final int MINUTE_OF_DAY = 18;
+	 public static final int MINUTE_OF_HOUR = 19;
+	 public static final int SECOND_OF_DAY = 20;
+	 public static final int SECOND_OF_MINUTE = 21;
+	 public static final int MILLIS_OF_DAY = 22;
+	 public static final int MILLIS_OF_SECOND = 23;
+	
+	 /**
+	  * Gets the code of the type, that is one of the constants defined
+	  * in the {@link AbsoluteInstantType} class.
+	  * @return
+	  *            the type code
+	  */
+	 public int getType();
+	 
+	 /**
+	  * Gets a description of the {@link AbsoluteInstantType}.
+	  * @return
+	  *            the name of the type
+	  */
+	 public String getName();
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Chronology.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Chronology.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Chronology.java	(revision 42196)
@@ -0,0 +1,87 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * Chronology provides access to the individual date time fields for a
+ * chronological calendar system.
+ * </p> 
+ *  <p>
+ * Various chronologies are supported by subclasses including ISO
+ * and GregorianJulian. To construct a Chronology you should use the
+ * factory methods on the {@link TimeSupportManager}.
+ * <p>
+ * The provided chronology implementations are:
+ * <ul>
+ * <li>ISO - Based on the ISO8601 standard and suitable for use after about 1600
+ * <li>GJ - Historically accurate calendar with Julian followed by Gregorian
+ * <li>Gregorian - The Gregorian calendar system used for all time (proleptic)
+ * <li>Julian - The Julian calendar system used for all time (proleptic)
+ * <li>Buddhist - The Buddhist calendar system which is an offset in years from GJ
+ * <li>Coptic - The Coptic calendar system which defines 30 day months
+ * <li>Ethiopic - The Ethiopic calendar system which defines 30 day months
+ * </ul>
+ * </p>
+ * <p>
+ * Instances of this class are singletons and they can be compared using the
+ * {@link Chronology}{@link #getType()} method and the <code>==</code>
+ * operator.
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface Chronology {
+    public static final int BUDDHIST = 1;
+    public static final int COPTIC = 2;
+    public static final int GJ = 3;
+    public static final int GREGORIAN = 4;
+    public static final int ISO = 5;
+    public static final int JULIAN = 6;
+
+    /**
+     * Gets the code of the type, that is one of the constants defined
+     * in the {@link Chronology} class.
+     * @return
+     *            the type code
+     */
+    public int getType();    
+    
+    /**
+     * Returns an instance of this Chronology that operates in the UTC time
+     * zone. Chronologies that do not operate in a time zone or are already
+     * UTC must return themself.
+     * @return 
+     *          a version of this chronology that ignores time zones
+     */
+    public Chronology withUTC();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteInterval.java	(revision 42196)
@@ -0,0 +1,154 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import org.gvsig.tools.lang.Cloneable;
+
+
+/**
+ * <p>
+ * Is defined like an interval between two absolute instants. 
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface AbsoluteInterval extends Interval, Cloneable{
+    
+    /**
+     * Gets the start of this time interval, which is inclusive, as an Instant. 
+     * @return
+     *          the start of the time interval
+     */
+    public AbsoluteInstant getStart();
+    
+    /**
+     * Gets the end of this time interval, which is exclusive, as an Instant. 
+     * @return
+     *          the end of the time interval
+     */
+    public AbsoluteInstant getEnd();
+    
+    /**
+     * Gets the number of fields that this absolute interval supports.
+     * @return 
+     *          the number of fields supported
+     */   
+    public int size();
+
+    /**
+     * Gets the field type at the specified index.
+     * @param index 
+     *          the index to retrieve
+     * @return 
+     *          the field at the specified index
+     */
+    public AbsoluteIntervalType getFieldType(int index);
+
+    /**
+     * Gets the value at the specified index.
+     *
+     * @param index  
+     *          the index to retrieve
+     * @return
+     *          the value of the field at the specified index
+     * @throws IndexOutOfBoundsException if the index is invalid
+     */
+    public int getValue(int index);
+
+    /**
+     * Gets the number of years of this absolute instant. 
+     * @return
+     *          the number of years
+     */
+    public int getYears();
+
+    /**
+     * Gets the number of months of this absolute instant. 
+     * @return
+     *          the number of months
+     */
+    public int getMonths();
+
+    /**
+     * Gets the number of days of this absolute instant. 
+     * @return
+     *          the number of days
+     */
+    public int getDays();
+
+    /**
+     * Gets the number of hours of this absolute instant. 
+     * @return
+     *          the number of hours
+     */
+    public int getHours();
+
+    /**
+     * Gets the number of minutes of this absolute instant. 
+     * @return
+     *          the number of minutes
+     */
+    public int getMinutes();
+
+    /**
+     * Gets the number of seconds of this absolute instant. 
+     * @return
+     *          the number of seconds
+     */
+    public int getSeconds();
+    
+    /**
+     * Gets the number of millis of this absolute instant. 
+     * @return
+     *          the number of millis
+     */
+    public int getMillis(); 
+    
+    /**
+     * Is this time interval after the specified interval. Intervals are inclusive
+     * of the start instant and exclusive of the end.
+     * @param absoluteInterval
+     *          the insterval to compare to, null means now
+     * @return
+     *          <code>true</code> if this time interval is after the absoluteInterval
+     */
+    public boolean isAfter(AbsoluteInterval absoluteInterval);
+    
+    /**
+     * Is this time interval before the specified interval. Intervals are inclusive
+     * of the start instant and exclusive of the end.
+     * @param absoluteInterval
+     *          the insterval to compare to, null means now
+     * @return
+     *          <code>true</code> if this time interval is before the absoluteInterval
+     */
+    public boolean isBefore(AbsoluteInterval absoluteInterval);
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Interval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Interval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Interval.java	(revision 42196)
@@ -0,0 +1,81 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * A time interval represents a period of time between two instants.
+ * Intervals are inclusive of the start instant and exclusive of the end.
+ * The end instant is always greater than or equal to the start instant.
+ * </p>
+ * <p> 
+ * Intervals have a fixed millisecond duration. This is the difference between 
+ * the start and end instants. As a result, intervals are not comparable. 
+ * To compare the length of two intervals, you should compare their durations.
+ * </p> * 
+ * <p>A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface Interval extends Time{
+    
+    /**
+     * Does this time interval contain the specified time instant.      
+     * @param instant
+     *          the time instant to compare to, null means now 
+     * @return
+     *          <code>true</code> if this time interval contains the time instant
+     */
+    public boolean contains(Instant instant);
+        
+    /**
+     * Gets the start of this time interval, which is inclusive, as an Instant. 
+     * @return
+     *          the start of the time interval
+     */
+    public Instant getStart();
+    
+    /**
+     * Gets the end of this time interval, which is exclusive, as an Instant. 
+     * @return
+     *          the end of the time interval
+     */
+    public Instant getEnd();
+    
+    /**
+     * Gets the duration of the interval. If the interval is relative, it returns the
+     * exact duration. It the interval is relative, it returns a duration assuming a 365
+     * days year, 12 months year, 30 days month, 7 day week, 24 hour day, 60 minute hour,
+     * 60 second minute and 1000 millis second. 
+     * @return
+     *          a duration equivalent to this interval
+     */
+    public Duration toStandardDuration();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteIntervalType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteIntervalType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/AbsoluteIntervalType.java	(revision 42196)
@@ -0,0 +1,63 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * Identifies a field, such as year or month, in a chronology-neutral way.
+ * </p>
+ * <p>
+ * Instances of this class are singletons and they can be compared using the
+ * {@link AbsoluteIntervalType}{@link #getType()} method and the <code>==</code>
+ * operator.
+ * </p>
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface AbsoluteIntervalType {
+    public static final int YEARS = 0;
+    public static final int MONTHS = 1;
+    public static final int WEEKS = 2;
+    public static final int DAYS = 3;
+    public static final int HOURS = 4;
+    public static final int MINUTES = 5;
+    public static final int SECONDS = 6;
+    public static final int MILLIS = 7;
+    
+    /**
+     * Gets the code of the type, that is one of the constants defined
+     * in the {@link AbsoluteIntervalType} class.
+     * @return
+     *            the type code
+     */
+    public int getType();
+    
+    /**
+     * Gets a description of the {@link AbsoluteIntervalType}.
+     * @return
+     *            the name of the type
+     */
+    public String getName();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Duration.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Duration.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/Duration.java	(revision 42196)
@@ -0,0 +1,51 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+
+/**
+ * <p>
+ * A duration specifying a length of time in milliseconds. There is no 
+ * concept of fields, such as days or seconds, as these fields can 
+ * vary in length. 
+ * </p>
+ * <p>
+ * A huge part of the documentation of this class has been retrieved
+ * from the joda-time library.
+ * </p>
+ * 
+ * @see http://joda-time.sourceforge.net
+ * @see https://gvsig.org/web/projects/gvsig-desktop/docs/devel/org-gvsig-sensors/1-0.0/analysis-and-design/detailed-view/time-support/libraries/org-gvsig-timesupport-lib
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface Duration {
+    
+    /**
+     * Gets the length of this duration in milliseconds.
+     * @return
+     *          the length of the duration in milliseconds.
+     */
+    public long getMillis();    
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/src/main/java/org/gvsig/timesupport/TimeSupportManager.java	(revision 42196)
@@ -0,0 +1,542 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport;
+
+import java.util.Date;
+
+import org.gvsig.timesupport.animation.TimeAnimation;
+
+/**
+ * This class is responsible of the management of the library's business logic.
+ * It is the library's main entry point.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface TimeSupportManager {
+
+    /**
+     * Registers a new {@link AbsoluteInstantType} that can be used in the
+     * creation of an {@link AbsoluteInstant}.
+     * @param absoluteInstantType
+     *          the AbsoluteInstantType to register
+     */
+    public void registerAbsoluteInstantType(AbsoluteInstantType absoluteInstantType);
+
+    /**
+     * Gets an {@link AbsoluteInstantType} by code.
+     * @param type
+     *          the code of the {@link AbsoluteInstantType} to retrieve.
+     * @return
+     *          an {@link AbsoluteInstantType} with a concrete code.
+     * @throws AbsoluteInstantTypeNotRegisteredException
+     *          if the {@link AbsoluteInstantType} doen's exist.
+     */
+    public AbsoluteInstantType getAbsoluteInstantType(int type) throws AbsoluteInstantTypeNotRegisteredException;
+
+    /**
+     * Registers a new {@link AbsoluteIntervalType} that can be used in the
+     * creation of an {@link AbsoluteInterval}.
+     * @param absoluteInstantType
+     *          the AbsoluteIntervalType to register
+     */
+    public void registerAbsoluteIntervalType(AbsoluteIntervalType absoluteIntervalType);
+
+    /**
+     * Gets an {@link AbsoluteIntervalType} by code.
+     * @param type
+     *          the code of the {@link AbsoluteIntervalType} to retrieve.
+     * @return
+     *          an {@link AbsoluteIntervalType} with a concrete code.
+     * @throws AbsoluteIntervalTypeNotRegisteredException
+     *          if the {@link AbsoluteIntervalType} doen's exist.
+     */
+    public AbsoluteIntervalType getAbsoluteIntervalType(int type) throws AbsoluteIntervalTypeNotRegisteredException;
+
+    /**
+     * Registers a new {@link Chronology} that can be used in the
+     * creation of any temporal object.
+     * @param chronology
+     *          the chronology to register
+     */
+    public void registerChronology(Chronology chronology);
+
+    /**
+     * Gets an {@link Chronology} by code.
+     * @param type
+     *          the code of the {@link Chronology} to retrieve.
+     * @return
+     *          an {@link Chronology} with a concrete code.
+     */
+    public Chronology getChronology(int typechronology);
+
+    /**
+     * Sets the default chronology. This chronology is used in all the
+     * time object creation if the chronology is not fixed.
+     * @param chronology
+     *          the default chronology.
+     */
+    public void setDefaultChronology(int chronology);
+
+    /**
+     * Creates a {@link RelativeInstant} using the number of milliseconds from
+     * 1970-01-01T00:00Z. It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param instant
+     *          the milliseconds from 1970-01-01T00:00:00Z
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(long instant);
+    
+    /**
+     * Creates a {@link RelativeInstant} using the number of milliseconds from
+     * 1970-01-01T00:00Z and using a chronology.
+     * @param instant
+     *          the milliseconds from 1970-01-01T00:00:00Z.
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(long instant, Chronology chronology);
+
+    /**
+     * Creates a {@link RelativeInstant} using a {@link Date}.
+     * It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param date
+     *          the java.util.Date
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(Date date);
+    
+    /**
+     * Creates a {@link RelativeInstant} using a {@link Date} 
+     * and using a chronology.    
+     * @param date
+     *          the java.util.Date
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(Date date, Chronology chronology);
+            
+    /**
+     * Creates a {@link RelativeInstant} using the current system time 
+     * and using a chronology.   
+     * @param date
+     *          the java.util.Date
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(Chronology chronology);
+
+    /**
+     * Creates a {@link RelativeInstant} using the datetime field values.
+     * It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param year
+     *          the year
+     * @param monthOfYear
+     *          the month of the year
+     * @param dayOfMonth
+     *          the day of the month
+     * @param hourOfDay
+     *          the hour of the day
+     * @param minuteOfHour
+     *          the minute of the hour
+     * @param secondOfMinute
+     *          the second of the minute
+     * @param millisOfSecond
+     *          the millisecond of the second  
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(int year, int monthOfYear, int dayOfMonth, int hourOfDay,
+        int minuteOfHour, int secondOfMinute, int millisOfSecond);
+
+    /**
+     * Creates a {@link RelativeInstant} using the datetime field values 
+     * and using a chronology.   
+     * @param year
+     *          the year
+     * @param monthOfYear
+     *          the month of the year
+     * @param dayOfMonth
+     *          the day of the month
+     * @param hourOfDay
+     *          the hour of the day
+     * @param minuteOfHour
+     *          the minute of the hour
+     * @param secondOfMinute
+     *          the second of the minute
+     * @param millisOfSecond
+     *          the millisecond of the second  
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(int year, int monthOfYear, int dayOfMonth, int hourOfDay,
+        int minuteOfHour, int secondOfMinute, int millisOfSecond, Chronology chronology);
+
+    /**
+     * Creates a {@link RelativeInstant} using the datetime field values 
+     * and using a chronology code.
+     * @param year
+     *          the year
+     * @param monthOfYear
+     *          the month of the year
+     * @param dayOfMonth
+     *          the day of the month
+     * @param hourOfDay
+     *          the hour of the day
+     * @param minuteOfHour
+     *          the minute of the hour
+     * @param secondOfMinute
+     *          the second of the minute
+     * @param millisOfSecond
+     *          the millisecond of the second  
+     * @param chronology
+     *          the chronology code.
+     * @return
+     *          a relative instant
+     */
+    public RelativeInstant createRelativeInstant(int year, int monthOfYear, int dayOfMonth, int hourOfDay,
+        int minuteOfHour, int secondOfMinute, int millisOfSecond, int chronology);
+
+    /**
+     * Creates an {@link AbsoluteInstant} without any value.
+     * It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @return
+     *          an absolute instant
+     */
+    public AbsoluteInstant createAbsoluteInstant();   
+    
+    /**
+     * Creates an {@link AbsoluteInstant} without any value and
+     * using a chronology.
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          an absolute instant
+     */
+    public AbsoluteInstant createAbsoluteInstant(Chronology chronology);  
+
+    /**
+     * Creates an {@link AbsoluteInstant} with a type and a value.
+     * It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param type
+     *          the single type to create the instant. It has to be
+     *          one of the values specified in {@link AbsoluteInstantType}.
+     * @param value
+     *          the value of the field.
+     * @return
+     *          an absolute instant.
+     * @throws AbsoluteInstantTypeNotRegisteredException
+     *          if there is not an {@link AbsoluteInstantType} with
+     *          this code.
+     */
+    public AbsoluteInstant createAbsoluteInstant(int type, int value) throws AbsoluteInstantTypeNotRegisteredException;
+
+    /**
+     * Creates an {@link AbsoluteInstant} with a type and a value and
+     * using a chronology.
+     * @param type
+     *          the single type to create the instant. It has to be
+     *          one of the values specified in {@link AbsoluteInstantType}.
+     * @param value
+     *          the value of the field.
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          an absolute instant.
+     * @throws AbsoluteInstantTypeNotRegisteredException
+     *          if there is not an {@link AbsoluteInstantType} with
+     *          this code.
+     */
+    public AbsoluteInstant createAbsoluteInstant(int type, int value, Chronology chronology) throws AbsoluteInstantTypeNotRegisteredException;
+    
+    /**
+     * Creates an {@link AbsoluteInstant} with a set of types and an array of
+     * values. The length of both arrays has to be the same.
+     * It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param types
+     *          the types to create the instant. All of them have to be
+     *          one of the values specified in {@link AbsoluteInstantType}.
+     * @param values
+     *          the values of every field.
+     * @return
+     *          an absolute instant.
+     * @throws AbsoluteInstantTypeNotRegisteredException
+     *          if there is not an {@link AbsoluteInstantType} with
+     *          the codes.
+     */
+    public AbsoluteInstant createAbsoluteInstant(int[] types, int[] values) throws AbsoluteInstantTypeNotRegisteredException;
+   
+    /**
+     * Creates an {@link AbsoluteInstant} with a set of types and an array of
+     * values. It uses a chronology. and the length of both arrays has to be the same.
+     * @param types
+     *          the types to create the instant. All of them have to be
+     *          one of the values specified in {@link AbsoluteInstantType}.
+     * @param values
+     *          the values of every field.
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          an absolute instant.
+     * @throws AbsoluteInstantTypeNotRegisteredException
+     *          if there is not an {@link AbsoluteInstantType} with
+     *          the codes.
+     */
+    public AbsoluteInstant createAbsoluteInstant(int[] typess, int[] values, Chronology chronology) throws AbsoluteInstantTypeNotRegisteredException;
+
+    /**
+     * Creates a {@link RelativeInterval} from a start and an end 
+     * instants. It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param startInstant
+     *           start of this interval, as milliseconds from 1970-01-01T00:00:00Z.
+     * @param endInstant
+     *           end of this interval, as milliseconds from 1970-01-01T00:00:00Z.
+     * @return
+     *          a relative interval
+     * @throws IllegalArgumentException if the end is before the start
+     */
+    public RelativeInterval createRelativeInterval(long startInstant, long endInstant);
+    
+    /**
+     * Creates a {@link RelativeInterval} from a start and an end 
+     * instants, and using a chonology.
+     * @param startInstant
+     *           start of this interval, as milliseconds from 1970-01-01T00:00:00Z.
+     * @param endInstant
+     *           end of this interval, as milliseconds from 1970-01-01T00:00:00Z.
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          a relative interval
+     * @throws IllegalArgumentException if the end is before the start
+     */
+    public RelativeInterval createRelativeInterval(long startInstant, long endInstant, Chronology chronology); 
+
+    /**
+     * Creates a {@link RelativeInterval} from a start and an end 
+     * instants. It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param startInstant
+     *           start of this interval, null means now
+     * @param endInstant
+     *           end of this interval, null means now
+     * @return
+     *          a relative interval
+     * @throws IllegalArgumentException if the end is before the start
+     */
+    public RelativeInterval createRelativeInterval(RelativeInstant startDateTime, RelativeInstant endDateTime);  
+
+    /**
+     * Creates an {@link AbsoluteInterval} from a start and an end 
+     * instants. It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param startInstant
+     *           start of this interval, null means now
+     * @param endInstant
+     *           end of this interval, null means now
+     * @return
+     *          an absolute interval
+     * @throws IllegalArgumentException if the end is before the start
+     * @throws AbsoluteIntervalTypeNotRegisteredException
+     */
+    public AbsoluteInterval createAbsoluteInterval(AbsoluteInstant startInstant, AbsoluteInstant endInstant) throws AbsoluteIntervalTypeNotRegisteredException;
+    
+    /**
+     * Creates an {@link AbsoluteInterval} from a start and an end 
+     * instants and a chronology.
+     * @param startInstant
+     *           start of this interval
+     * @param endInstant
+     *           end of this interval
+     * @param chronology
+     *          the chronology.
+     * @return
+     *          an absolute interval
+     * @throws IllegalArgumentException if the end is before the start
+     * @throws AbsoluteIntervalTypeNotRegisteredException  if there is not
+     *          the necessary {@link AbsoluteIntervalType}.
+     */
+    public AbsoluteInterval createAbsoluteInterval(AbsoluteInstant startInstant, AbsoluteInstant endInstant, Chronology chronology) throws AbsoluteIntervalTypeNotRegisteredException;
+
+    /**
+     * Creates an {@link AbsoluteInterval} from a start instant and an increment
+     * of the time fields. It uses the chronology defined by the
+     * {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param startAbsoluteInstant
+     *           start of this interval
+     * @param years
+     *          the years to increment the instant.
+     * @param months
+     *          the months to increment the instant.       
+     * @param weeks
+     *          the weeks to increment the instant.
+     * @param days
+     *          the days to increment the instant.
+     * @param hours
+     *          the hours to increment the instant.
+     * @param minutes
+     *          the minutes to increment the instant.
+     * @param seconds
+     *          the seconds to increment the instant.
+     * @param millis
+     *          the milliseconds to increment the instant.
+     * @return
+     *          an absolute instant
+     * @throws IllegalArgumentException if the end is before the start
+     * @throws AbsoluteIntervalTypeNotRegisteredException  if there is not
+     *          the necessary {@link AbsoluteIntervalType}.
+     */
+    public AbsoluteInterval createAbsoluteInterval(AbsoluteInstant startAbsoluteInstant, int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis) throws AbsoluteIntervalTypeNotRegisteredException;
+
+    /**
+     * Creates an {@link AbsoluteInterval} from a start instant and an increment
+     * of the time fields and a chronology. The seconds instant is defined by
+     * all the individual fields. 
+     * @param startAbsoluteInstant
+     *           start of this interval
+     * @param years
+     *          the years to increment the instant.
+     * @param months
+     *          the months to increment the instant.       
+     * @param weeks
+     *          the weeks to increment the instant.
+     * @param days
+     *          the days to increment the instant.
+     * @param hours
+     *          the hours to increment the instant.
+     * @param minutes
+     *          the minutes to increment the instant.
+     * @param seconds
+     *          the seconds to increment the instant.
+     * @param millis
+     *          the milliseconds to increment the instant.
+     * @param chronology
+     *          the chronology
+     * @return
+     *          an absolute instant
+     * @throws IllegalArgumentException if the end is before the start
+     * @throws AbsoluteIntervalTypeNotRegisteredException  if there is not
+     *          the necessary {@link AbsoluteIntervalType}.
+     */
+    public AbsoluteInterval createAbsoluteInterval(AbsoluteInstant startAbsoluteInstant, int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis, Chronology chronology) throws AbsoluteIntervalTypeNotRegisteredException;
+    
+    /**
+     * Creates an {@link AbsoluteInterval} from individual
+     * fields. The start interval is the time 0.
+     * It uses the chronology defined by the
+     *  {@link TimeSupportManager#setDefaultChronology(int)} method.
+     * @param years
+     *          the years of the end instant.
+     * @param months
+     *          the months of the end instant.         
+     * @param weeks
+     *          the weeks of the end instant.
+     * @param days
+     *          the days of the end instant.
+     * @param hours
+     *          the hours of the end instant.
+     * @param minutes
+     *          the minutes of the end instant.
+     * @param seconds
+     *          the seconds of the end instant.
+     * @param millis
+     *          the milliseconds of the end instant.
+     * @return
+     *          an absolute instant
+     * @throws AbsoluteIntervalTypeNotRegisteredException  if there is not
+     *          the necessary {@link AbsoluteIntervalType}.
+     */
+    public AbsoluteInterval createAbsoluteInterval(int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis) throws AbsoluteIntervalTypeNotRegisteredException;
+     
+    /**
+     * Creates an {@link AbsoluteInterval} from individual
+     * fields and a chronology. The start interval is the time 0.   
+     * @param years
+     *          the years of the end instant.
+     * @param months
+     *          the months of the end instant.         
+     * @param weeks
+     *          the weeks of the end instant.
+     * @param days
+     *          the days of the end instant.
+     * @param hours
+     *          the hours of the end instant.
+     * @param minutes
+     *          the minutes of the end instant.
+     * @param seconds
+     *          the seconds of the end instant.
+     * @param millis
+     *          the milliseconds of the end instant.
+     * @param chronology
+     *          the chronology
+     * @return
+     *          an absolute instant
+     * @throws AbsoluteIntervalTypeNotRegisteredException  if there is not
+     *          the necessary {@link AbsoluteIntervalType}.
+     */
+    public AbsoluteInterval createAbsoluteInterval(int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis, Chronology chronology) throws AbsoluteIntervalTypeNotRegisteredException;
+    
+    /**
+     * Add a time pattern that is used to parse a relative instant
+     * @param relativeInstantPattern
+     *          the pattern tor parse the instant
+     */
+    public void addRelativeInstantPattern(String relativeInstantPattern);
+    
+    /**
+     * Creates a relative instant from a string. It tries to parse the
+     * string using the patterns added with the {@link TimeSupportManager#addRelativeInstantPattern(String)}
+     * method.
+     * @param relativeInstantString
+     *          the relative instant like a string
+     * @return
+     *          the relative instant or <code>null</code>.
+     */
+    public RelativeInstant parseRelativeInstant(String relativeInstantString);
+    
+    /**
+     * Creates a time animation object.
+     * @return
+     */
+    public TimeAnimation createTimeAnimation();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/docs/model.uml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/docs/model.uml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/docs/model.uml	(revision 42196)
@@ -0,0 +1,1137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Model xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:uml="http://www.eclipse.org/uml2/3.0.0/UML" xmi:id="_z_CQcZsWEeCP54pW-6JbGA" name="">
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_KMQJsWEeCP54pW-6JbGA" name="boolean"/>
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_SIEJsWEeCP54pW-6JbGA" name="byte"/>
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_SIEZsWEeCP54pW-6JbGA" name="char"/>
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_SIEpsWEeCP54pW-6JbGA" name="double"/>
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_SIE5sWEeCP54pW-6JbGA" name="float"/>
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_SIFJsWEeCP54pW-6JbGA" name="int"/>
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_SvIJsWEeCP54pW-6JbGA" name="long"/>
+  <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_z_SvIZsWEeCP54pW-6JbGA" name="short"/>
+  <packagedElement xmi:type="uml:Package" xmi:id="_z_zFcJsWEeCP54pW-6JbGA" name="org">
+    <packagedElement xmi:type="uml:Package" xmi:id="_z_zsgJsWEeCP54pW-6JbGA" name="gvsig">
+      <packagedElement xmi:type="uml:Package" xmi:id="_z_zsgZsWEeCP54pW-6JbGA" name="timesupport" clientDependency="_0JksgJsWEeCP54pW-6JbGA _0JvroJsWEeCP54pW-6JbGA _0JvroZsWEeCP54pW-6JbGA _0JvropsWEeCP54pW-6JbGA _0Jvro5sWEeCP54pW-6JbGA _0JvrpJsWEeCP54pW-6JbGA _0JvrpZsWEeCP54pW-6JbGA _0JvrppsWEeCP54pW-6JbGA _0JwSsJsWEeCP54pW-6JbGA _0JwSsZsWEeCP54pW-6JbGA _0JwSspsWEeCP54pW-6JbGA _0JwSs5sWEeCP54pW-6JbGA _0JwStJsWEeCP54pW-6JbGA _0JwStZsWEeCP54pW-6JbGA _0JwStpsWEeCP54pW-6JbGA">
+        <packagedElement xmi:type="uml:Class" xmi:id="_0Aoy8JsWEeCP54pW-6JbGA" name="GregorianCalendarTest" isAbstract="true">
+          <eAnnotations xmi:id="_0Aoy8ZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0Aoy8psWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <elementImport xmi:id="_0DQpIJsWEeCP54pW-6JbGA" visibility="private" importedElement="_0DPbApsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0DRQMZsWEeCP54pW-6JbGA" visibility="private" importedElement="_0DRQMJsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0DRQM5sWEeCP54pW-6JbGA" visibility="private" importedElement="_0DRQMpsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0DRQNJsWEeCP54pW-6JbGA" visibility="private" importedElement="_0DMXsZsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0DOM4JsWEeCP54pW-6JbGA" general="_0DMXsZsWEeCP54pW-6JbGA"/>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0D3GEJsWEeCP54pW-6JbGA" name="createDate" specification="_0DujMJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0D3GEZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D3GEpsWEeCP54pW-6JbGA" name="month" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D3GE5sWEeCP54pW-6JbGA" name="day" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D3GFJsWEeCP54pW-6JbGA" type="_0DRQMJsWEeCP54pW-6JbGA"/>
+            <language>JAVA</language>
+            <body>&#xA;        GregorianCalendar gregorianCalendar = new GregorianCalendar();&#xA;        gregorianCalendar.set(year, month, day, 15, 0, 0);       &#xA;        gregorianCalendar.set(Calendar.MILLISECOND, 0);&#xA;        return gregorianCalendar.getTime();        &#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0D9MsJsWEeCP54pW-6JbGA" name="createDate" specification="_0D7XgJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0D9MsZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D9MspsWEeCP54pW-6JbGA" name="month" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D9Ms5sWEeCP54pW-6JbGA" name="day" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D9MtJsWEeCP54pW-6JbGA" name="hour" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D9MtZsWEeCP54pW-6JbGA" name="minutes" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D9MtpsWEeCP54pW-6JbGA" name="seconds" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D9Mt5sWEeCP54pW-6JbGA" type="_0DRQMJsWEeCP54pW-6JbGA"/>
+            <language>JAVA</language>
+            <body>&#xA;        GregorianCalendar gregorianCalendar = new GregorianCalendar();&#xA;        gregorianCalendar.set(year, month, day, hour, minutes, seconds); &#xA;        gregorianCalendar.set(Calendar.MILLISECOND, 0);&#xA;        return gregorianCalendar.getTime();&#xA;    </body>
+          </ownedBehavior>
+          <ownedOperation xmi:id="_0DujMJsWEeCP54pW-6JbGA" name="createDate" visibility="public" method="_0D3GEJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0DujMZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0DujMpsWEeCP54pW-6JbGA" name="month" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0DujM5sWEeCP54pW-6JbGA" name="day" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0DujNJsWEeCP54pW-6JbGA" type="_0DRQMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0D7XgJsWEeCP54pW-6JbGA" name="createDate" visibility="public" method="_0D9MsJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0D7XgZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D7XgpsWEeCP54pW-6JbGA" name="month" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D7Xg5sWEeCP54pW-6JbGA" name="day" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D7XhJsWEeCP54pW-6JbGA" name="hour" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D7XhZsWEeCP54pW-6JbGA" name="minutes" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D7XhpsWEeCP54pW-6JbGA" name="seconds" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0D7Xh5sWEeCP54pW-6JbGA" type="_0DRQMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0AqoIJsWEeCP54pW-6JbGA" name="AbsoluteIntervalTest" isAbstract="true">
+          <eAnnotations xmi:id="_0AqoIZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0AqoIpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0D9zwJsWEeCP54pW-6JbGA" general="_0Aoy8JsWEeCP54pW-6JbGA"/>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EDTUJsWEeCP54pW-6JbGA" name="testAbsoluteIntervalCreation" specification="_0ECFMJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        AbsoluteInterval absoluteInterval = timeSupportManager.createAbsoluteInterval(1, 2, 3, 4, 5, 6, 7, 8);&#xA;        assertEquals(absoluteInterval.getFieldType(0).getType(), AbsoluteIntervalType.YEARS);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.YEARS), 1);&#xA;        assertEquals(absoluteInterval.getFieldType(1).getType(), AbsoluteIntervalType.MONTHS);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.MONTHS), 2);&#xA;        assertEquals(absoluteInterval.getFieldType(2).getType(), AbsoluteIntervalType.WEEKS);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.WEEKS), 3);&#xA;        assertEquals(absoluteInterval.getFieldType(3).getType(), AbsoluteIntervalType.DAYS);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.DAYS), 4);&#xA;        assertEquals(absoluteInterval.getFieldType(4).getType(), AbsoluteIntervalType.HOURS);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.HOURS), 5);&#xA;        assertEquals(absoluteInterval.getFieldType(5).getType(), AbsoluteIntervalType.MINUTES);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.MINUTES), 6);&#xA;        assertEquals(absoluteInterval.getFieldType(6).getType(), AbsoluteIntervalType.SECONDS);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.SECONDS), 7);&#xA;        assertEquals(absoluteInterval.getFieldType(7).getType(), AbsoluteIntervalType.MILLIS);&#xA;        assertEquals(absoluteInterval.getValue(AbsoluteIntervalType.MILLIS), 8);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EGWoJsWEeCP54pW-6JbGA" name="testAbsoluteIntervalCreationWithstart" specification="_0EFIgJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        AbsoluteInstant startAbsoluteInstant = timeSupportManager.createAbsoluteInstant(DateTimeFieldType.HOUR_OF_DAY, 15);&#xA;            &#xA;        AbsoluteInterval absoluteInterval = timeSupportManager.createAbsoluteInterval(startAbsoluteInstant, 0, 0, 0, 0, 3, 0, 0, 0);&#xA;        assertEquals(absoluteInterval.getStart().getValue(0), 15);&#xA;        assertEquals(absoluteInterval.getEnd().getValue(0), 18);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EJZ8JsWEeCP54pW-6JbGA" name="testToString" specification="_0EIL0JsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        AbsoluteInterval absoluteInterval = timeSupportManager.createAbsoluteInterval(1, 2, 3, 4, 5, 6, 7, 100);&#xA;        assertEquals(&quot;P1Y2M3W4DT5H6M7.100S&quot;, absoluteInterval.toString());&#xA;    </body>
+          </ownedBehavior>
+          <ownedOperation xmi:id="_0ECFMJsWEeCP54pW-6JbGA" name="testAbsoluteIntervalCreation" visibility="public" method="_0EDTUJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EFIgJsWEeCP54pW-6JbGA" name="testAbsoluteIntervalCreationWithstart" visibility="public" method="_0EGWoJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EIL0JsWEeCP54pW-6JbGA" name="testToString" visibility="public" method="_0EJZ8JsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0ArPMJsWEeCP54pW-6JbGA" name="RelativeIntervalTest" isAbstract="true">
+          <eAnnotations xmi:id="_0ArPMZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0ArPMpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0EKoEJsWEeCP54pW-6JbGA" general="_0Aoy8JsWEeCP54pW-6JbGA"/>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0ENEUJsWEeCP54pW-6JbGA" name="testRelativeIntervalCreation1" specification="_0EL2MJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInterval relativeInterval = timeSupportManager.createRelativeInterval(100, 200);&#xA;        assertEquals(relativeInterval.toDurationMillis(), 100);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EPgkJsWEeCP54pW-6JbGA" name="testRelativeIntervalCreation2" specification="_0EOScJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInterval relativeInterval = timeSupportManager.createRelativeInterval(-100, +200);&#xA;        assertEquals(relativeInterval.toDurationMillis(), 300);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0ERVwJsWEeCP54pW-6JbGA" name="testRelativeIntervalCreation3" specification="_0EQusJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInterval relativeInterval = timeSupportManager.createRelativeInterval(timeSupportManager.createDateTime(100), timeSupportManager.createDateTime(200));&#xA;        assertEquals(relativeInterval.toDurationMillis(), 100);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0ETyAJsWEeCP54pW-6JbGA" name="testIntervalComparators" specification="_0ETK8JsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInterval relativeInterval1 = timeSupportManager.createRelativeInterval(&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 10)),&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 20)));&#xA;        RelativeInterval relativeInterval2 = timeSupportManager.createRelativeInterval(&#xA;            timeSupportManager.createDateTime(createDate(2010, 06, 10)),&#xA;            timeSupportManager.createDateTime(createDate(2010, 06, 20)));        &#xA;        RelativeInterval relativeInterval3 = timeSupportManager.createRelativeInterval(&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 10)),&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 20))); &#xA;        RelativeInterval relativeInterval4 = timeSupportManager.createRelativeInterval(&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 12)),&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 18))); &#xA;&#xA;&#xA;        assertTrue(relativeInterval1.isBefore(relativeInterval2));        &#xA;        assertTrue(relativeInterval2.isAfter(relativeInterval1));            &#xA;        assertTrue(!relativeInterval1.equals(relativeInterval2));  &#xA;        assertTrue(!relativeInterval1.overlaps(relativeInterval2));  &#xA;        assertTrue(!relativeInterval1.contains(relativeInterval2));  &#xA;&#xA;        assertTrue(!relativeInterval1.isBefore(relativeInterval3));        &#xA;        assertTrue(!relativeInterval3.isAfter(relativeInterval1));            &#xA;        assertEquals(relativeInterval1.toDurationMillis(), relativeInterval3.toDurationMillis());  &#xA;        assertTrue(relativeInterval1.overlaps(relativeInterval3));  &#xA;        assertTrue(relativeInterval1.contains(relativeInterval3));  &#xA;&#xA;        assertTrue(!relativeInterval1.isBefore(relativeInterval4));        &#xA;        assertTrue(!relativeInterval4.isAfter(relativeInterval1));            &#xA;        assertTrue(!relativeInterval1.equals(relativeInterval4));  &#xA;        assertTrue(relativeInterval1.overlaps(relativeInterval4));  &#xA;        assertTrue(relativeInterval1.contains(relativeInterval4));&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EWOQJsWEeCP54pW-6JbGA" name="testInstantComparators" specification="_0EVnMJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        //2011-01-17T00:41:43.478/2011-01-18T23:59:00.000 2011-01-18T23:00:04.000Z&#xA;        //2011-01-17T00:41:43.478/2011-01-18T23:59:00.000 2011-01-18T22:00:04.000Z&#xA;        RelativeInterval relativeInterval = timeSupportManager.createRelativeInterval(&#xA;            timeSupportManager.createDateTime(2011, 1, 17, 0, 41, 43, 478),&#xA;            timeSupportManager.createDateTime(2011, 1, 18, 23, 59, 0, 000));&#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(timeSupportManager.createDateTime(2011, 1, 18, 23, 0, 04, 000));&#xA;        &#xA;        System.out.println(relativeInterval + &quot; &quot; + relativeInstant);&#xA;        assertTrue(relativeInterval.contains(relativeInstant));      &#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EZRkJsWEeCP54pW-6JbGA" name="testIntervalConversors" specification="_0EYDcJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInterval relativeInterval = timeSupportManager.createRelativeInterval(&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 10)),&#xA;            timeSupportManager.createDateTime(createDate(2010, 05, 11)));          &#xA;&#xA;        assertEquals(relativeInterval.toDurationMillis(), 86400000, 1);      &#xA;    </body>
+          </ownedBehavior>
+          <ownedOperation xmi:id="_0EL2MJsWEeCP54pW-6JbGA" name="testRelativeIntervalCreation1" visibility="public" method="_0ENEUJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EOScJsWEeCP54pW-6JbGA" name="testRelativeIntervalCreation2" visibility="public" method="_0EPgkJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EQusJsWEeCP54pW-6JbGA" name="testRelativeIntervalCreation3" visibility="public" method="_0ERVwJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0ETK8JsWEeCP54pW-6JbGA" name="testIntervalComparators" visibility="public" method="_0ETyAJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EVnMJsWEeCP54pW-6JbGA" name="testInstantComparators" visibility="public" method="_0EWOQJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EYDcJsWEeCP54pW-6JbGA" name="testIntervalConversors" visibility="public" method="_0EZRkJsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0AsdUJsWEeCP54pW-6JbGA" name="AbsoluteInstantTest" isAbstract="true">
+          <eAnnotations xmi:id="_0AtEYJsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0AtEYZsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0EZ4oJsWEeCP54pW-6JbGA" general="_0Aoy8JsWEeCP54pW-6JbGA"/>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0Ec78JsWEeCP54pW-6JbGA" name="testAbsoluteInstantCreation1" specification="_0Ebt0JsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        AbsoluteInstant absoluteInstant = timeSupportManager.createAbsoluteInstant(DateTimeFieldType.HOUR_OF_DAY, 23);&#xA;        assertEquals(absoluteInstant.getFieldType(0).getType(), DateTimeFieldType.HOUR_OF_DAY);&#xA;        assertEquals(absoluteInstant.getValue(0), 23);&#xA;        &#xA;        //Checking the utility methods&#xA;        assertEquals(absoluteInstant.getYears(), 0);&#xA;        assertEquals(absoluteInstant.getMonths(), 0);   &#xA;        assertEquals(absoluteInstant.getDays(), 0);&#xA;        assertEquals(absoluteInstant.getHours(), 23);&#xA;        assertEquals(absoluteInstant.getMinutes(), 0);   &#xA;        assertEquals(absoluteInstant.getSeconds(), 0);&#xA;        assertEquals(absoluteInstant.getMillis(), 0);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EfYMJsWEeCP54pW-6JbGA" name="testAbsoluteInstantCreation2" specification="_0EexIJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        int[] types = new int[7];&#xA;        int[] values = new int[7];&#xA;        types[0] = DateTimeFieldType.YEAR;&#xA;        values[0] = 1;&#xA;        types[1] = DateTimeFieldType.MONTH_OF_YEAR;&#xA;        values[1] = 2;&#xA;        types[2] = DateTimeFieldType.DAY_OF_MONTH;&#xA;        values[2] = 3;&#xA;        types[3] = DateTimeFieldType.HOUR_OF_DAY;&#xA;        values[3] = 4;&#xA;        types[4] = DateTimeFieldType.MINUTE_OF_HOUR;&#xA;        values[4] = 5;&#xA;        types[5] = DateTimeFieldType.SECOND_OF_MINUTE;&#xA;        values[5] = 6;&#xA;        types[6] = DateTimeFieldType.MILLIS_OF_SECOND;&#xA;        values[6] = 7;&#xA;        AbsoluteInstant absoluteInstant = timeSupportManager.createAbsoluteInstant(types, values);&#xA;        assertEquals(absoluteInstant.getFieldType(0).getType(), DateTimeFieldType.YEAR);&#xA;        assertEquals(absoluteInstant.getValue(0), 1);&#xA;        assertEquals(absoluteInstant.getFieldType(1).getType(), DateTimeFieldType.MONTH_OF_YEAR);&#xA;        assertEquals(absoluteInstant.getValue(1), 2);&#xA;        assertEquals(absoluteInstant.getFieldType(2).getType(), DateTimeFieldType.DAY_OF_MONTH);&#xA;        assertEquals(absoluteInstant.getValue(2), 3);      &#xA;        assertEquals(absoluteInstant.getFieldType(3).getType(), DateTimeFieldType.HOUR_OF_DAY);&#xA;        assertEquals(absoluteInstant.getValue(3), 4);&#xA;        assertEquals(absoluteInstant.getFieldType(4).getType(), DateTimeFieldType.MINUTE_OF_HOUR);&#xA;        assertEquals(absoluteInstant.getValue(4), 5);&#xA;        assertEquals(absoluteInstant.getFieldType(5).getType(), DateTimeFieldType.SECOND_OF_MINUTE);&#xA;        assertEquals(absoluteInstant.getValue(5), 6);  &#xA;        assertEquals(absoluteInstant.getFieldType(6).getType(), DateTimeFieldType.MILLIS_OF_SECOND);&#xA;        assertEquals(absoluteInstant.getValue(6), 7);  &#xA;        &#xA;        //Checking the utility methods&#xA;        assertEquals(absoluteInstant.getYears(), 1);&#xA;        assertEquals(absoluteInstant.getMonths(), 2);   &#xA;        assertEquals(absoluteInstant.getDays(), 3);  &#xA;        assertEquals(absoluteInstant.getHours(), 4);&#xA;        assertEquals(absoluteInstant.getMinutes(), 5);   &#xA;        assertEquals(absoluteInstant.getSeconds(), 6);&#xA;        assertEquals(absoluteInstant.getMillis(), 7);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EibgJsWEeCP54pW-6JbGA" name="testToDateTime" specification="_0EhNYJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        int[] types = new int[7];&#xA;        int[] values = new int[7];&#xA;        types[0] = DateTimeFieldType.YEAR;&#xA;        values[0] = 3;&#xA;        types[1] = DateTimeFieldType.MONTH_OF_YEAR;&#xA;        values[1] = 1;&#xA;        types[2] = DateTimeFieldType.DAY_OF_MONTH;&#xA;        values[2] = 4;&#xA;        types[3] = DateTimeFieldType.HOUR_OF_DAY;&#xA;        values[3] = 18;&#xA;        types[4] = DateTimeFieldType.MINUTE_OF_HOUR;&#xA;        values[4] = 15;&#xA;        types[5] = DateTimeFieldType.SECOND_OF_MINUTE;&#xA;        values[5] = 30;&#xA;        types[6] = DateTimeFieldType.MILLIS_OF_SECOND;&#xA;        values[6] = 100;&#xA;        AbsoluteInstant absoluteInstant = timeSupportManager.createAbsoluteInstant(types, values);&#xA;        DateTime dateTime = absoluteInstant.toDateTime();&#xA;        assertEquals(dateTime.getYear(), 3);&#xA;        assertEquals(dateTime.getMonthOfYear(), 1);&#xA;        assertEquals(dateTime.getDayOfMonth(), 4);&#xA;        assertEquals(dateTime.getHourOfDay(), 18);&#xA;        assertEquals(dateTime.getMinuteOfHour(), 15);&#xA;        assertEquals(dateTime.getSecondOfMinute(), 30);&#xA;        assertEquals(dateTime.getMillisOfSecond(), 100);        &#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0Ek3wJsWEeCP54pW-6JbGA" name="testToString" specification="_0EjpoJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        int[] types = new int[7];&#xA;        int[] values = new int[7];&#xA;        types[0] = DateTimeFieldType.YEAR;&#xA;        values[0] = 3;&#xA;        types[1] = DateTimeFieldType.MONTH_OF_YEAR;&#xA;        values[1] = 1;&#xA;        types[2] = DateTimeFieldType.DAY_OF_MONTH;&#xA;        values[2] = 4;&#xA;        types[3] = DateTimeFieldType.HOUR_OF_DAY;&#xA;        values[3] = 18;&#xA;        types[4] = DateTimeFieldType.MINUTE_OF_HOUR;&#xA;        values[4] = 15;&#xA;        types[5] = DateTimeFieldType.SECOND_OF_MINUTE;&#xA;        values[5] = 30;&#xA;        types[6] = DateTimeFieldType.MILLIS_OF_SECOND;&#xA;        values[6] = 100;&#xA;        AbsoluteInstant absoluteInstant = timeSupportManager.createAbsoluteInstant(types, values);&#xA;        assertEquals(&quot;0003-01-04T18:15:30.100&quot;, absoluteInstant.toString());&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EnUAJsWEeCP54pW-6JbGA" name="testAbsoluteInstantComparators" specification="_0Ems8JsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        AbsoluteInstant absoluteInstant1 = timeSupportManager.createAbsoluteInstant(DateTimeFieldType.YEAR, 2010);&#xA;        AbsoluteInstant absoluteInstant2 = timeSupportManager.createAbsoluteInstant(DateTimeFieldType.YEAR, 2011);&#xA;        AbsoluteInstant absoluteInstant3 = timeSupportManager.createAbsoluteInstant(DateTimeFieldType.YEAR, 2012);&#xA;                &#xA;        assertTrue(absoluteInstant1.isBefore(absoluteInstant2));&#xA;        assertTrue(absoluteInstant2.isBefore(absoluteInstant3));&#xA;        assertTrue(absoluteInstant1.isBefore(absoluteInstant2));&#xA;        &#xA;        assertTrue(absoluteInstant1.isBefore(absoluteInstant3));&#xA;        assertTrue(absoluteInstant2.isAfter(absoluteInstant1));&#xA;        assertTrue(absoluteInstant1.isBefore(absoluteInstant3));&#xA;        assertTrue(absoluteInstant2.isAfter(absoluteInstant1));&#xA;        &#xA;        assertTrue(!absoluteInstant1.isEqual(absoluteInstant2));    &#xA;        assertTrue(!absoluteInstant2.isEqual(absoluteInstant3));  &#xA;        &#xA;        assertTrue(!absoluteInstant1.equals(absoluteInstant2));  &#xA;        assertTrue(!absoluteInstant2.equals(absoluteInstant3));  &#xA;    </body>
+          </ownedBehavior>
+          <ownedOperation xmi:id="_0Ebt0JsWEeCP54pW-6JbGA" name="testAbsoluteInstantCreation1" visibility="public" method="_0Ec78JsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EexIJsWEeCP54pW-6JbGA" name="testAbsoluteInstantCreation2" visibility="public" method="_0EfYMJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EhNYJsWEeCP54pW-6JbGA" name="testToDateTime" visibility="public" method="_0EibgJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EjpoJsWEeCP54pW-6JbGA" name="testToString" visibility="public" method="_0Ek3wJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0Ems8JsWEeCP54pW-6JbGA" name="testAbsoluteInstantComparators" visibility="public" method="_0EnUAJsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0AtrcJsWEeCP54pW-6JbGA" name="RelativeInstantTest" isAbstract="true">
+          <eAnnotations xmi:id="_0AtrcZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0AtrcpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <elementImport xmi:id="_0EpJMJsWEeCP54pW-6JbGA" visibility="private" importedElement="_0DRQMJsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0EoiIJsWEeCP54pW-6JbGA" general="_0Aoy8JsWEeCP54pW-6JbGA"/>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0ErlcJsWEeCP54pW-6JbGA" name="testRelativeInstantCreation1" specification="_0EqXUJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(new Date(100));&#xA;        assertEquals(relativeInstant.getMillis(), 100);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0EuBsJsWEeCP54pW-6JbGA" name="testRelativeInstantCreation2" specification="_0EszkJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>        &#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(200);&#xA;        assertEquals(relativeInstant.getMillis(), 200);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0Ewd8JsWEeCP54pW-6JbGA" name="testRelativeInstantCreation3" specification="_0EvP0JsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>        &#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(-200);&#xA;        assertEquals(relativeInstant.getMillis(), -200);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0Ey6MJsWEeCP54pW-6JbGA" name="testRelativeInstantCreation4" specification="_0ExsEJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>        &#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(timeSupportManager.createDateTime(300));&#xA;        assertEquals(relativeInstant.getMillis(), 300);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0E1WcJsWEeCP54pW-6JbGA" name="testInstantComparators" specification="_0E0IUJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInstant relativeInstant1 = timeSupportManager.createRelativeInstant(createDate(2010, 05, 15));&#xA;        RelativeInstant relativeInstant2 = timeSupportManager.createRelativeInstant(createDate(2011, 05, 15));&#xA;        RelativeInstant relativeInstant3 = timeSupportManager.createRelativeInstant(createDate(2011, 05, 15));&#xA;                &#xA;        assertTrue(relativeInstant1.isBefore(relativeInstant2));&#xA;        assertTrue(relativeInstant2.isAfter(relativeInstant1));&#xA;        &#xA;        assertTrue(!relativeInstant1.isEqual(relativeInstant2));    &#xA;        assertTrue(relativeInstant2.isEqual(relativeInstant3));  &#xA;        &#xA;        assertTrue(!relativeInstant1.equals(relativeInstant2));  &#xA;        assertTrue(relativeInstant2.equals(relativeInstant3));  &#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0E3ysJsWEeCP54pW-6JbGA" name="testDateTimeComparators" specification="_0E2kkJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(createDate(2009, 10, 9, 16, 28, 26));&#xA;        DateTime dateTime1 = timeSupportManager.createDateTime(createDate(2011, 10, 9, 16, 28, 26));&#xA;       &#xA;        &#xA;        assertTrue(relativeInstant.isBefore(dateTime1));&#xA;        assertTrue(dateTime1.isAfter(relativeInstant));&#xA;        &#xA;        assertTrue(!relativeInstant.isEqual(dateTime1));    &#xA;        assertTrue(!relativeInstant.equals(dateTime1)); &#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0E6O8JsWEeCP54pW-6JbGA" name="testInstantFromDateTime" specification="_0E5A0JsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>       &#xA;        DateTime dateTime = timeSupportManager.createDateTime(createDate(2009, 10, 9, 16, 28, 26));       &#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(dateTime);&#xA;        &#xA;        assertEquals(dateTime.getMillis(), relativeInstant.getMillis());          &#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0E8EIJsWEeCP54pW-6JbGA" name="testInstantFromDateTimeWithChronolgy" specification="_0E7dEJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        Chronology chronology = timeSupportManager.getChronology(Chronology.ISO).withUTC();&#xA;        DateTime dateTime = timeSupportManager.createDateTime(2009, 10, 9, 16, 28, 26,100, chronology);         &#xA;        RelativeInstant relativeInstant = timeSupportManager.createRelativeInstant(dateTime);&#xA;        &#xA;        assertEquals(dateTime.getMillis(), relativeInstant.getMillis());  &#xA;        assertEquals(dateTime.getHourOfDay(),relativeInstant.toDateTime().getHourOfDay()); &#xA;        assertEquals(dateTime.getMillisOfSecond(),relativeInstant.toDateTime().getMillisOfSecond()); &#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0E-gYJsWEeCP54pW-6JbGA" name="testInstantConversors" specification="_0E95UJsWEeCP54pW-6JbGA">
+            <language>JAVA</language>
+            <body>&#xA;        RelativeInstant instant1 = timeSupportManager.createRelativeInstant(createDate(2010, 05, 15));       &#xA;      &#xA;        assertEquals(instant1.toDate().getTime(), instant1.getMillis());&#xA;        assertEquals(instant1.toDateTime().getMillis(), instant1.getMillis());       &#xA;    </body>
+          </ownedBehavior>
+          <ownedOperation xmi:id="_0EqXUJsWEeCP54pW-6JbGA" name="testRelativeInstantCreation1" visibility="public" method="_0ErlcJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EszkJsWEeCP54pW-6JbGA" name="testRelativeInstantCreation2" visibility="public" method="_0EuBsJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0EvP0JsWEeCP54pW-6JbGA" name="testRelativeInstantCreation3" visibility="public" method="_0Ewd8JsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0ExsEJsWEeCP54pW-6JbGA" name="testRelativeInstantCreation4" visibility="public" method="_0Ey6MJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0E0IUJsWEeCP54pW-6JbGA" name="testInstantComparators" visibility="public" method="_0E1WcJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0E2kkJsWEeCP54pW-6JbGA" name="testDateTimeComparators" visibility="public" method="_0E3ysJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0E5A0JsWEeCP54pW-6JbGA" name="testInstantFromDateTime" visibility="public" method="_0E6O8JsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0E7dEJsWEeCP54pW-6JbGA" name="testInstantFromDateTimeWithChronolgy" visibility="public" method="_0E8EIJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0E95UJsWEeCP54pW-6JbGA" name="testInstantConversors" visibility="public" method="_0E-gYJsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0Ayj8JsWEeCP54pW-6JbGA" name="TimeSupportManager">
+          <eAnnotations xmi:id="_0AzLAJsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0AzLAZsWEeCP54pW-6JbGA" key="documentation" value=" This class is responsible of the management of the library's business logic.&#xA; It is the library's main entry point, and provides all the services to manage&#xA; {@link TimeFactoryService}s.&#xA; &#xA; @see TimeFactoryService&#xA; @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <ownedOperation xmi:id="_0FFOEJsWEeCP54pW-6JbGA" name="registerDateTimeFieldType" visibility="public">
+            <ownedParameter xmi:id="_0FFOEZsWEeCP54pW-6JbGA" name="dateTimeFieldType" type="_0A-KIJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FHqUJsWEeCP54pW-6JbGA" name="getDateTimeFieldType" visibility="public">
+            <ownedParameter xmi:id="_0FHqUZsWEeCP54pW-6JbGA" name="type" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FHqUpsWEeCP54pW-6JbGA" type="_0A-KIJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FKtoJsWEeCP54pW-6JbGA" name="registerDurationFieldType" visibility="public">
+            <ownedParameter xmi:id="_0FKtoZsWEeCP54pW-6JbGA" name="durationFieldType" type="_0A21YJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FNJ4JsWEeCP54pW-6JbGA" name="getDurationTieldType" visibility="public">
+            <ownedParameter xmi:id="_0FNJ4ZsWEeCP54pW-6JbGA" name="type" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FNJ4psWEeCP54pW-6JbGA" type="_0A21YJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FPmIJsWEeCP54pW-6JbGA" name="registerAbsoluteIntervalType" visibility="public">
+            <ownedParameter xmi:id="_0FPmIZsWEeCP54pW-6JbGA" name="absoluteIntervalType" type="_0BGtAJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FSCYJsWEeCP54pW-6JbGA" name="getAbsoluteIntervalType" visibility="public">
+            <ownedParameter xmi:id="_0FSCYZsWEeCP54pW-6JbGA" name="type" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FSCYpsWEeCP54pW-6JbGA" type="_0BGtAJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FVFsJsWEeCP54pW-6JbGA" name="registerChronology" visibility="public">
+            <ownedParameter xmi:id="_0FVFsZsWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FW64JsWEeCP54pW-6JbGA" name="getChronology" visibility="public">
+            <ownedParameter xmi:id="_0FW64ZsWEeCP54pW-6JbGA" name="typechronology" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FW64psWEeCP54pW-6JbGA" type="_0BAmYJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FZXIJsWEeCP54pW-6JbGA" name="setDefaultChronology" visibility="public">
+            <ownedParameter xmi:id="_0FZXIZsWEeCP54pW-6JbGA" name="chronology" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FbzYJsWEeCP54pW-6JbGA" name="createRelativeInstant" visibility="public">
+            <ownedParameter xmi:id="_0FbzYZsWEeCP54pW-6JbGA" name="instant" type="_z_SvIJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FbzYpsWEeCP54pW-6JbGA" type="_0A__UJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Fe2sJsWEeCP54pW-6JbGA" name="createRelativeInstant" visibility="public">
+            <ownedParameter xmi:id="_0Fe2sZsWEeCP54pW-6JbGA" name="date" type="_0DRQMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Fe2spsWEeCP54pW-6JbGA" type="_0A__UJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FihEJsWEeCP54pW-6JbGA" name="createRelativeInstant" visibility="public">
+            <ownedParameter xmi:id="_0FihEZsWEeCP54pW-6JbGA" name="dateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FihEpsWEeCP54pW-6JbGA" type="_0A__UJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Fk9UJsWEeCP54pW-6JbGA" name="createAbsoluteInstant" visibility="public">
+            <ownedParameter xmi:id="_0Fk9UZsWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FnZkJsWEeCP54pW-6JbGA" name="createAbsoluteInstant" visibility="public">
+            <ownedParameter xmi:id="_0FnZkZsWEeCP54pW-6JbGA" name="type" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FnZkpsWEeCP54pW-6JbGA" name="value" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FnZk5sWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FtgMJsWEeCP54pW-6JbGA" name="createAbsoluteInstant" visibility="public">
+            <ownedParameter xmi:id="_0FtgMZsWEeCP54pW-6JbGA" name="typess" type="_z_SIFJsWEeCP54pW-6JbGA">
+              <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_0FuHQJsWEeCP54pW-6JbGA" value="*"/>
+            </ownedParameter>
+            <ownedParameter xmi:id="_0FuHQZsWEeCP54pW-6JbGA" name="values" type="_z_SIFJsWEeCP54pW-6JbGA">
+              <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_0FuHQpsWEeCP54pW-6JbGA" value="*"/>
+            </ownedParameter>
+            <ownedParameter xmi:id="_0FuHQ5sWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0FwjgJsWEeCP54pW-6JbGA" name="createAbsoluteInstant" visibility="public">
+            <ownedParameter xmi:id="_0FwjgZsWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0FwjgpsWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Fzm0JsWEeCP54pW-6JbGA" name="createAbsoluteInstant" visibility="public">
+            <ownedParameter xmi:id="_0Fzm0ZsWEeCP54pW-6JbGA" name="type" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Fzm0psWEeCP54pW-6JbGA" name="value" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Fzm05sWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Fzm1JsWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0F3RMJsWEeCP54pW-6JbGA" name="createAbsoluteInstant" visibility="public">
+            <ownedParameter xmi:id="_0F3RMZsWEeCP54pW-6JbGA" name="typess" type="_z_SIFJsWEeCP54pW-6JbGA">
+              <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_0F3RMpsWEeCP54pW-6JbGA" value="*"/>
+            </ownedParameter>
+            <ownedParameter xmi:id="_0F3RM5sWEeCP54pW-6JbGA" name="values" type="_z_SIFJsWEeCP54pW-6JbGA">
+              <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_0F3RNJsWEeCP54pW-6JbGA" value="*"/>
+            </ownedParameter>
+            <ownedParameter xmi:id="_0F3RNZsWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0F3RNpsWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0F5tcJsWEeCP54pW-6JbGA" name="createRelativeInterval" visibility="public">
+            <ownedParameter xmi:id="_0F5tcZsWEeCP54pW-6JbGA" name="startInstant" type="_z_SvIJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0F5tcpsWEeCP54pW-6JbGA" name="endInstant" type="_z_SvIJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0F5tc5sWEeCP54pW-6JbGA" type="_0AzyEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0F9-4JsWEeCP54pW-6JbGA" name="createRelativeInterval" visibility="public">
+            <ownedParameter xmi:id="_0F9-4ZsWEeCP54pW-6JbGA" name="startDateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0F9-4psWEeCP54pW-6JbGA" name="endDateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0F9-45sWEeCP54pW-6JbGA" type="_0AzyEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GBpQJsWEeCP54pW-6JbGA" name="createRelativeInterval" visibility="public">
+            <ownedParameter xmi:id="_0GBpQZsWEeCP54pW-6JbGA" name="startInstant" type="_z_SvIJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GBpQpsWEeCP54pW-6JbGA" name="endInstant" type="_z_SvIJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GBpQ5sWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GBpRJsWEeCP54pW-6JbGA" type="_0AzyEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GHv4JsWEeCP54pW-6JbGA" name="createRelativeInterval" visibility="public">
+            <ownedParameter xmi:id="_0GHv4ZsWEeCP54pW-6JbGA" name="startDateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GHv4psWEeCP54pW-6JbGA" name="endDateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GHv45sWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GHv5JsWEeCP54pW-6JbGA" type="_0AzyEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GMoYJsWEeCP54pW-6JbGA" name="createAbsoluteInterval" visibility="public">
+            <ownedParameter xmi:id="_0GMoYZsWEeCP54pW-6JbGA" name="startAbsoluteInstant" type="_0A1AMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoYpsWEeCP54pW-6JbGA" name="years" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoY5sWEeCP54pW-6JbGA" name="months" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoZJsWEeCP54pW-6JbGA" name="weeks" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoZZsWEeCP54pW-6JbGA" name="days" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoZpsWEeCP54pW-6JbGA" name="hours" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoZ5sWEeCP54pW-6JbGA" name="minutes" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoaJsWEeCP54pW-6JbGA" name="seconds" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoaZsWEeCP54pW-6JbGA" name="millis" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GMoapsWEeCP54pW-6JbGA" type="_0A6fwJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GQ50JsWEeCP54pW-6JbGA" name="createAbsoluteInterval" visibility="public">
+            <ownedParameter xmi:id="_0GQ50ZsWEeCP54pW-6JbGA" name="years" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ50psWEeCP54pW-6JbGA" name="months" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ505sWEeCP54pW-6JbGA" name="weeks" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ51JsWEeCP54pW-6JbGA" name="days" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ51ZsWEeCP54pW-6JbGA" name="hours" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ51psWEeCP54pW-6JbGA" name="minutes" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ515sWEeCP54pW-6JbGA" name="seconds" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ52JsWEeCP54pW-6JbGA" name="millis" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GQ52ZsWEeCP54pW-6JbGA" type="_0A6fwJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GVLQJsWEeCP54pW-6JbGA" name="createAbsoluteInterval" visibility="public">
+            <ownedParameter xmi:id="_0GVLQZsWEeCP54pW-6JbGA" name="startInstant" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GVLQpsWEeCP54pW-6JbGA" name="endInstant" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GVLQ5sWEeCP54pW-6JbGA" type="_0A6fwJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GbR4JsWEeCP54pW-6JbGA" name="createAbsoluteInterval" visibility="public">
+            <ownedParameter xmi:id="_0GbR4ZsWEeCP54pW-6JbGA" name="startAbsoluteInstant" type="_0A1AMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR4psWEeCP54pW-6JbGA" name="years" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR45sWEeCP54pW-6JbGA" name="months" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR5JsWEeCP54pW-6JbGA" name="weeks" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR5ZsWEeCP54pW-6JbGA" name="days" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR5psWEeCP54pW-6JbGA" name="hours" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR55sWEeCP54pW-6JbGA" name="minutes" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR6JsWEeCP54pW-6JbGA" name="seconds" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR6ZsWEeCP54pW-6JbGA" name="millis" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR6psWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GbR65sWEeCP54pW-6JbGA" type="_0A6fwJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GfjUJsWEeCP54pW-6JbGA" name="createAbsoluteInterval" visibility="public">
+            <ownedParameter xmi:id="_0GfjUZsWEeCP54pW-6JbGA" name="startAbsoluteInstant" type="_0A1AMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GfjUpsWEeCP54pW-6JbGA" name="endAbsoluteInstant" type="_0A1AMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GfjU5sWEeCP54pW-6JbGA" type="_0A6fwJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Gkb0JsWEeCP54pW-6JbGA" name="createAbsoluteInterval" visibility="public">
+            <ownedParameter xmi:id="_0Gkb0ZsWEeCP54pW-6JbGA" name="years" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb0psWEeCP54pW-6JbGA" name="months" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb05sWEeCP54pW-6JbGA" name="weeks" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb1JsWEeCP54pW-6JbGA" name="days" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb1ZsWEeCP54pW-6JbGA" name="hours" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb1psWEeCP54pW-6JbGA" name="minutes" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb15sWEeCP54pW-6JbGA" name="seconds" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb2JsWEeCP54pW-6JbGA" name="millis" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb2ZsWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Gkb2psWEeCP54pW-6JbGA" type="_0A6fwJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GpUUJsWEeCP54pW-6JbGA" name="createAbsoluteInterval" visibility="public">
+            <ownedParameter xmi:id="_0GpUUZsWEeCP54pW-6JbGA" name="startInstant" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GpUUpsWEeCP54pW-6JbGA" name="endInstant" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GpUU5sWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GpUVJsWEeCP54pW-6JbGA" type="_0A6fwJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GrwkJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0GrwkZsWEeCP54pW-6JbGA" name="instant" type="_z_SvIJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GrwkpsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GtlwJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0GtlwZsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0GwpEJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0GwpEZsWEeCP54pW-6JbGA" name="date" type="_0DRQMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0GwpEpsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0G06gJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0G06gZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G06gpsWEeCP54pW-6JbGA" name="monthOfYear" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G06g5sWEeCP54pW-6JbGA" name="dayOfMonth" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G06hJsWEeCP54pW-6JbGA" name="hourOfDay" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G06hZsWEeCP54pW-6JbGA" name="minuteOfHour" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G06hpsWEeCP54pW-6JbGA" name="secondOfMinute" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G06h5sWEeCP54pW-6JbGA" name="millisOfSecond" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G06iJsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0G4k4JsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0G4k4ZsWEeCP54pW-6JbGA" name="instant" type="_z_SvIJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G4k4psWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G4k45sWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0G7oMJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0G7oMZsWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G7oMpsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0G_SkJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0G_SkZsWEeCP54pW-6JbGA" name="date" type="_0DRQMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G_SkpsWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0G_Sk5sWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HELEJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0HELEZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELEpsWEeCP54pW-6JbGA" name="monthOfYear" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELE5sWEeCP54pW-6JbGA" name="dayOfMonth" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELFJsWEeCP54pW-6JbGA" name="hourOfDay" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELFZsWEeCP54pW-6JbGA" name="minuteOfHour" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELFpsWEeCP54pW-6JbGA" name="secondOfMinute" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELF5sWEeCP54pW-6JbGA" name="millisOfSecond" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELGJsWEeCP54pW-6JbGA" name="chronology" type="_0BAmYJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HELGZsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HIcgJsWEeCP54pW-6JbGA" name="createDateTime" visibility="public">
+            <ownedParameter xmi:id="_0HIcgZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIcgpsWEeCP54pW-6JbGA" name="monthOfYear" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIcg5sWEeCP54pW-6JbGA" name="dayOfMonth" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIchJsWEeCP54pW-6JbGA" name="hourOfDay" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIchZsWEeCP54pW-6JbGA" name="minuteOfHour" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIchpsWEeCP54pW-6JbGA" name="secondOfMinute" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIch5sWEeCP54pW-6JbGA" name="millisOfSecond" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIciJsWEeCP54pW-6JbGA" name="chronology" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HIciZsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0AzyEJsWEeCP54pW-6JbGA" name="RelativeInterval">
+          <eAnnotations xmi:id="_0AzyEZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0AzyEpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0HJDkJsWEeCP54pW-6JbGA" general="_0A5RoJsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0HJqopsWEeCP54pW-6JbGA" general="_0HJqoZsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0HMG4JsWEeCP54pW-6JbGA" name="contains" visibility="public">
+            <ownedParameter xmi:id="_0HMG4ZsWEeCP54pW-6JbGA" name="instant" type="_0A__UJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HMG4psWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HN8EJsWEeCP54pW-6JbGA" name="contains" visibility="public">
+            <ownedParameter xmi:id="_0HN8EZsWEeCP54pW-6JbGA" name="interval" type="_0AzyEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HN8EpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HPKMJsWEeCP54pW-6JbGA" name="overlaps" visibility="public">
+            <ownedParameter xmi:id="_0HPKMZsWEeCP54pW-6JbGA" name="interval" type="_0AzyEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HPKMpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HQ_YJsWEeCP54pW-6JbGA" name="isAfter" visibility="public">
+            <ownedParameter xmi:id="_0HQ_YZsWEeCP54pW-6JbGA" name="instant" type="_0A__UJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HQ_YpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HSNgJsWEeCP54pW-6JbGA" name="isAfter" visibility="public">
+            <ownedParameter xmi:id="_0HSNgZsWEeCP54pW-6JbGA" name="interval" type="_0AzyEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HSNgpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HUCsJsWEeCP54pW-6JbGA" name="isBefore" visibility="public">
+            <ownedParameter xmi:id="_0HUCsZsWEeCP54pW-6JbGA" name="instant" type="_0A__UJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HUCspsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HV34JsWEeCP54pW-6JbGA" name="isBefore" visibility="public">
+            <ownedParameter xmi:id="_0HV34ZsWEeCP54pW-6JbGA" name="interval" type="_0AzyEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HV34psWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HXGAJsWEeCP54pW-6JbGA" name="toDuration" visibility="public">
+            <ownedParameter xmi:id="_0HXGAZsWEeCP54pW-6JbGA" type="_0A1nQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HXtEJsWEeCP54pW-6JbGA" name="toDurationMillis" visibility="public">
+            <ownedParameter xmi:id="_0HXtEZsWEeCP54pW-6JbGA" type="_z_SvIJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HY7MJsWEeCP54pW-6JbGA" name="getChronology" visibility="public">
+            <ownedParameter xmi:id="_0HY7MZsWEeCP54pW-6JbGA" type="_0BAmYJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HZiQJsWEeCP54pW-6JbGA" name="getStart" visibility="public">
+            <ownedParameter xmi:id="_0HZiQZsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HawYJsWEeCP54pW-6JbGA" name="getEnd" visibility="public">
+            <ownedParameter xmi:id="_0HawYZsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A1AMJsWEeCP54pW-6JbGA" name="AbsoluteInstant">
+          <eAnnotations xmi:id="_0A1AMZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A1AMpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0HbXcJsWEeCP54pW-6JbGA" general="_0A8U8JsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0Hb-gJsWEeCP54pW-6JbGA" general="_0HJqoZsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0HdMoJsWEeCP54pW-6JbGA" name="size" visibility="public">
+            <ownedParameter xmi:id="_0HdMoZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HeawJsWEeCP54pW-6JbGA" name="getFieldType" visibility="public">
+            <ownedParameter xmi:id="_0HeawZsWEeCP54pW-6JbGA" name="index" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HeawpsWEeCP54pW-6JbGA" type="_0A-KIJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HfB0JsWEeCP54pW-6JbGA" name="getValue" visibility="public">
+            <ownedParameter xmi:id="_0HfB0ZsWEeCP54pW-6JbGA" name="index" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HfB0psWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Hg3AJsWEeCP54pW-6JbGA" name="isAfter" visibility="public">
+            <ownedParameter xmi:id="_0Hg3AZsWEeCP54pW-6JbGA" name="absoluteInstant" type="_0A1AMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Hg3ApsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HiFIJsWEeCP54pW-6JbGA" name="isBefore" visibility="public">
+            <ownedParameter xmi:id="_0HiFIZsWEeCP54pW-6JbGA" name="absoluteInstant" type="_0A1AMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0HiFIpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Hj6UJsWEeCP54pW-6JbGA" name="isEqual" visibility="public">
+            <ownedParameter xmi:id="_0Hj6UZsWEeCP54pW-6JbGA" name="abslouteInstant" type="_0A1AMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0Hj6UpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HlIcJsWEeCP54pW-6JbGA" name="getChronology" visibility="public">
+            <ownedParameter xmi:id="_0HlIcZsWEeCP54pW-6JbGA" type="_0BAmYJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HlvgJsWEeCP54pW-6JbGA" name="getYears" visibility="public">
+            <ownedParameter xmi:id="_0HlvgZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0HmWkJsWEeCP54pW-6JbGA" name="getMonths" visibility="public">
+            <ownedParameter xmi:id="_0HmWkZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0H1AEJsWEeCP54pW-6JbGA" name="getDays" visibility="public">
+            <ownedParameter xmi:id="_0H1AEZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0H1nIJsWEeCP54pW-6JbGA" name="getHours" visibility="public">
+            <ownedParameter xmi:id="_0H1nIZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0H2OMJsWEeCP54pW-6JbGA" name="getMinutes" visibility="public">
+            <ownedParameter xmi:id="_0H21QJsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0H3cUJsWEeCP54pW-6JbGA" name="getSeconds" visibility="public">
+            <ownedParameter xmi:id="_0H3cUZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0H4DYJsWEeCP54pW-6JbGA" name="getMillis" visibility="public">
+            <ownedParameter xmi:id="_0H4DYZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A1nQJsWEeCP54pW-6JbGA" name="Duration">
+          <eAnnotations xmi:id="_0A1nQZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A1nQpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <ownedOperation xmi:id="_0H4qcJsWEeCP54pW-6JbGA" name="getMillis">
+            <ownedParameter xmi:id="_0H4qcZsWEeCP54pW-6JbGA" type="_z_SvIJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0A2OUJsWEeCP54pW-6JbGA" name="DurationFieldTypeNotRegisteredException">
+          <eAnnotations xmi:id="_0A2OUZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A2OUpsWEeCP54pW-6JbGA" key="documentation" value=" Exception thrown when there is an error getting a TimeSupport message.&#xA; &#xA; @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0H5RgJsWEeCP54pW-6JbGA" general="_0A7t4JsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A21YJsWEeCP54pW-6JbGA" name="DurationFieldType">
+          <eAnnotations xmi:id="_0A21YZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A21YpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <ownedAttribute xmi:id="_0IBNUJsWEeCP54pW-6JbGA" name="ERAS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0ICbcJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="1"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IDCgJsWEeCP54pW-6JbGA" name="CENTURIES" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IDCgZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="2"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IDCgpsWEeCP54pW-6JbGA" name="WEEKYEARS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IDCg5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="3"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IDChJsWEeCP54pW-6JbGA" name="YEARS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IDChZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="4"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IDChpsWEeCP54pW-6JbGA" name="MONTHS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IDpkJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="5"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IDpkZsWEeCP54pW-6JbGA" name="WEEKS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IDpkpsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="6"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IDpk5sWEeCP54pW-6JbGA" name="DAYS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IDplJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="7"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IDplZsWEeCP54pW-6JbGA" name="HALFDAYS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IDplpsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="8"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IEQoJsWEeCP54pW-6JbGA" name="HOURS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IEQoZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="9"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IEQopsWEeCP54pW-6JbGA" name="MINUTES" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IEQo5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="10"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IEQpJsWEeCP54pW-6JbGA" name="SECONDS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IEQpZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="11"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IEQppsWEeCP54pW-6JbGA" name="MILLIS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IE3sJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="12"/>
+          </ownedAttribute>
+          <ownedOperation xmi:id="_0IH7AJsWEeCP54pW-6JbGA" name="getType" visibility="public">
+            <ownedParameter xmi:id="_0IH7AZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IJJIpsWEeCP54pW-6JbGA" name="getName" visibility="public">
+            <ownedParameter xmi:id="_0IJJI5sWEeCP54pW-6JbGA" type="_0IJJIZsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A5RoJsWEeCP54pW-6JbGA" name="Interval">
+          <eAnnotations xmi:id="_0A5RoZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A5RopsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0IJwMJsWEeCP54pW-6JbGA" general="_0A-xMJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0IKXQJsWEeCP54pW-6JbGA" name="contains" visibility="public">
+            <ownedParameter xmi:id="_0IKXQZsWEeCP54pW-6JbGA" name="instant" type="_0A8U8JsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IKXQpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A6fwJsWEeCP54pW-6JbGA" name="AbsoluteInterval">
+          <eAnnotations xmi:id="_0A6fwZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A6fwpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0IK-UJsWEeCP54pW-6JbGA" general="_0A5RoJsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0ILlYJsWEeCP54pW-6JbGA" general="_0HJqoZsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0IMzgJsWEeCP54pW-6JbGA" name="getStart" visibility="public">
+            <ownedParameter xmi:id="_0IMzgZsWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IOBoJsWEeCP54pW-6JbGA" name="getEnd" visibility="public">
+            <ownedParameter xmi:id="_0IOBoZsWEeCP54pW-6JbGA" type="_0A1AMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IOosJsWEeCP54pW-6JbGA" name="size" visibility="public">
+            <ownedParameter xmi:id="_0IOosZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IPPwJsWEeCP54pW-6JbGA" name="getFieldType" visibility="public">
+            <ownedParameter xmi:id="_0IPPwZsWEeCP54pW-6JbGA" name="index" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IPPwpsWEeCP54pW-6JbGA" type="_0BGtAJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IQd4JsWEeCP54pW-6JbGA" name="getValue" visibility="public">
+            <ownedParameter xmi:id="_0IQd4ZsWEeCP54pW-6JbGA" name="index" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IQd4psWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IRE8JsWEeCP54pW-6JbGA" name="getChronology" visibility="public">
+            <ownedParameter xmi:id="_0IRE8ZsWEeCP54pW-6JbGA" type="_0BAmYJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IRsAJsWEeCP54pW-6JbGA" name="getYears" visibility="public">
+            <ownedParameter xmi:id="_0IRsAZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0ISTEJsWEeCP54pW-6JbGA" name="getMonths" visibility="public">
+            <ownedParameter xmi:id="_0ISTEZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IS6IJsWEeCP54pW-6JbGA" name="getWeeks" visibility="public">
+            <ownedParameter xmi:id="_0IS6IZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IThMJsWEeCP54pW-6JbGA" name="getDays" visibility="public">
+            <ownedParameter xmi:id="_0IThMZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IUIQJsWEeCP54pW-6JbGA" name="getHours" visibility="public">
+            <ownedParameter xmi:id="_0IUIQZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IVWYJsWEeCP54pW-6JbGA" name="getMinutes" visibility="public">
+            <ownedParameter xmi:id="_0IVWYZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IVWYpsWEeCP54pW-6JbGA" name="getSeconds" visibility="public">
+            <ownedParameter xmi:id="_0IV9cJsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IV9cZsWEeCP54pW-6JbGA" name="getMillis" visibility="public">
+            <ownedParameter xmi:id="_0IV9cpsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IXLkJsWEeCP54pW-6JbGA" name="isAfter" visibility="public">
+            <ownedParameter xmi:id="_0IXLkZsWEeCP54pW-6JbGA" name="absoluteInterval" type="_0A6fwJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IXLkpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IYZsJsWEeCP54pW-6JbGA" name="isBefore" visibility="public">
+            <ownedParameter xmi:id="_0IYZsZsWEeCP54pW-6JbGA" name="absoluteInterval" type="_0A6fwJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IYZspsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0A7G0JsWEeCP54pW-6JbGA" name="AbsoluteIntervalTypeNotRegisteredException">
+          <eAnnotations xmi:id="_0A7G0ZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A7G0psWEeCP54pW-6JbGA" key="documentation" value=" Exception thrown when there is an error getting a TimeSupport message.&#xA; &#xA; @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0IZn0JsWEeCP54pW-6JbGA" general="_0A7t4JsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0A7t4JsWEeCP54pW-6JbGA" name="TimeSupportException">
+          <eAnnotations xmi:id="_0A7t4ZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A7t4psWEeCP54pW-6JbGA" key="documentation" value=" Generic exception thrown in the TimeSupport API when the exception or error&#xA; may be dealt by the program or the user of the program which is a client of&#xA; the TimeSupport API.&#xA; &#xA; @see {@link TimeFactoryService}&#xA; @see {@link TimeSupportManager}&#xA; @author gvSIG team.&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <elementImport xmi:id="_0IaO45sWEeCP54pW-6JbGA" visibility="private" importedElement="_0IaO4ZsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0IaO4psWEeCP54pW-6JbGA" general="_0IaO4ZsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A8U8JsWEeCP54pW-6JbGA" name="Instant">
+          <eAnnotations xmi:id="_0A8U8ZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A8U8psWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0Ia18JsWEeCP54pW-6JbGA" general="_0A-xMJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0IbdAJsWEeCP54pW-6JbGA" name="toDateTime" visibility="public">
+            <ownedParameter xmi:id="_0IbdAZsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A9jEJsWEeCP54pW-6JbGA" name="DateTime">
+          <eAnnotations xmi:id="_0A9jEZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A9jEpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0IcEEJsWEeCP54pW-6JbGA" general="_0A__UJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0IcrIJsWEeCP54pW-6JbGA" name="getYear" visibility="public">
+            <ownedParameter xmi:id="_0IcrIZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IdSMJsWEeCP54pW-6JbGA" name="getMonthOfYear" visibility="public">
+            <ownedParameter xmi:id="_0IdSMZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Id5QJsWEeCP54pW-6JbGA" name="getWeekOfWeekyear" visibility="public">
+            <ownedParameter xmi:id="_0Id5QZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IegUJsWEeCP54pW-6JbGA" name="getDayOfWeek" visibility="public">
+            <ownedParameter xmi:id="_0IegUZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IfHYJsWEeCP54pW-6JbGA" name="getDayOfMonth" visibility="public">
+            <ownedParameter xmi:id="_0IfHYZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IfucJsWEeCP54pW-6JbGA" name="getHourOfDay" visibility="public">
+            <ownedParameter xmi:id="_0IgVgJsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Ig8kJsWEeCP54pW-6JbGA" name="getMinuteOfDay" visibility="public">
+            <ownedParameter xmi:id="_0Ig8kZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IhjoJsWEeCP54pW-6JbGA" name="getMinuteOfHour" visibility="public">
+            <ownedParameter xmi:id="_0IhjoZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IiKsJsWEeCP54pW-6JbGA" name="getSecondOfDay" visibility="public">
+            <ownedParameter xmi:id="_0IiKsZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IixwJsWEeCP54pW-6JbGA" name="getSecondOfMinute" visibility="public">
+            <ownedParameter xmi:id="_0IixwZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Ij_4JsWEeCP54pW-6JbGA" name="getMillisOfSecond" visibility="public">
+            <ownedParameter xmi:id="_0Ij_4ZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Ikm8JsWEeCP54pW-6JbGA" name="getMillis" visibility="public">
+            <ownedParameter xmi:id="_0Ikm8ZsWEeCP54pW-6JbGA" type="_z_SvIJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Il1EJsWEeCP54pW-6JbGA" name="getEditableCopy" visibility="public">
+            <ownedParameter xmi:id="_0Il1EZsWEeCP54pW-6JbGA" type="_0BDpsJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0InqQJsWEeCP54pW-6JbGA" name="toString" visibility="public">
+            <ownedParameter xmi:id="_0InqQZsWEeCP54pW-6JbGA" name="pattern" type="_0IJJIZsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0InqQpsWEeCP54pW-6JbGA" type="_0IJJIZsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IpfcJsWEeCP54pW-6JbGA" name="minus" visibility="public">
+            <ownedParameter xmi:id="_0IpfcZsWEeCP54pW-6JbGA" name="absoluteInterval" type="_0A6fwJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IpfcpsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IqtkJsWEeCP54pW-6JbGA" name="plus" visibility="public">
+            <ownedParameter xmi:id="_0IqtkZsWEeCP54pW-6JbGA" name="absoluteInterval" type="_0A6fwJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IqtkpsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IsiwJsWEeCP54pW-6JbGA" name="minus" visibility="public">
+            <ownedParameter xmi:id="_0IsiwZsWEeCP54pW-6JbGA" name="dateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IsiwpsWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0IuX8JsWEeCP54pW-6JbGA" name="plus" visibility="public">
+            <ownedParameter xmi:id="_0IuX8ZsWEeCP54pW-6JbGA" name="dateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0IuX8psWEeCP54pW-6JbGA" type="_0A9jEJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A-KIJsWEeCP54pW-6JbGA" name="DateTimeFieldType">
+          <eAnnotations xmi:id="_0A-KIZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A-KIpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <ownedAttribute xmi:id="_0IuX85sWEeCP54pW-6JbGA" name="ERA" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IuX9JsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="1"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Iu_AJsWEeCP54pW-6JbGA" name="YEAR_OF_ERA" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Iu_AZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="2"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Iu_ApsWEeCP54pW-6JbGA" name="CENTURY_OF_ERA" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Iu_A5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="3"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Iu_BJsWEeCP54pW-6JbGA" name="YEAR_OF_CENTURY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Iu_BZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="4"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Iu_BpsWEeCP54pW-6JbGA" name="YEAR" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Iu_B5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="5"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IvmEJsWEeCP54pW-6JbGA" name="DAY_OF_YEAR" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IvmEZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="6"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IvmEpsWEeCP54pW-6JbGA" name="MONTH_OF_YEAR" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IvmE5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="7"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IvmFJsWEeCP54pW-6JbGA" name="DAY_OF_MONTH" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IvmFZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="8"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IvmFpsWEeCP54pW-6JbGA" name="WEEKYEAR_OF_CENTURY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IvmF5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="9"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IwNIJsWEeCP54pW-6JbGA" name="WEEKYEAR" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IwNIZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="10"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IwNIpsWEeCP54pW-6JbGA" name="WEEK_OF_WEEKYEAR" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IwNI5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="11"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IwNJJsWEeCP54pW-6JbGA" name="DAY_OF_WEEK" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IwNJZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="12"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Iw0MJsWEeCP54pW-6JbGA" name="HALFDAY_OF_DAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Iw0MZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="13"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Iw0MpsWEeCP54pW-6JbGA" name="HOUR_OF_HALFDAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Iw0M5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="14"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Iw0NJsWEeCP54pW-6JbGA" name="CLOCKHOUR_OF_HALFDAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Iw0NZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="15"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IxbQJsWEeCP54pW-6JbGA" name="CLOCKHOUR_OF_DAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IxbQZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="16"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IxbQpsWEeCP54pW-6JbGA" name="HOUR_OF_DAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IxbQ5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="17"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IxbRJsWEeCP54pW-6JbGA" name="MINUTE_OF_DAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IxbRZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="18"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IyCUJsWEeCP54pW-6JbGA" name="MINUTE_OF_HOUR" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IyCUZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="19"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IyCUpsWEeCP54pW-6JbGA" name="SECOND_OF_DAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IyCU5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="20"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IyCVJsWEeCP54pW-6JbGA" name="SECOND_OF_MINUTE" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IypYJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="21"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IypYZsWEeCP54pW-6JbGA" name="MILLIS_OF_DAY" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IypYpsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="22"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0IypY5sWEeCP54pW-6JbGA" name="MILLIS_OF_SECOND" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0IypZJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="23"/>
+          </ownedAttribute>
+          <ownedOperation xmi:id="_0Iz3gJsWEeCP54pW-6JbGA" name="getType" visibility="public">
+            <ownedParameter xmi:id="_0Iz3gZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I0ekJsWEeCP54pW-6JbGA" name="getName" visibility="public">
+            <ownedParameter xmi:id="_0I0ekZsWEeCP54pW-6JbGA" type="_0IJJIZsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A-xMJsWEeCP54pW-6JbGA" name="Time">
+          <eAnnotations xmi:id="_0A-xMZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A-xMpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <ownedOperation xmi:id="_0I1ssJsWEeCP54pW-6JbGA" name="intersects" visibility="public">
+            <ownedParameter xmi:id="_0I1ssZsWEeCP54pW-6JbGA" name="time" type="_0A-xMJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0I1sspsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I2TwJsWEeCP54pW-6JbGA" name="isRelative" visibility="public">
+            <ownedParameter xmi:id="_0I2TwZsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I2TwpsWEeCP54pW-6JbGA" name="isAbsolute" visibility="public">
+            <ownedParameter xmi:id="_0I2Tw5sWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I260JsWEeCP54pW-6JbGA" name="isInterval" visibility="public">
+            <ownedParameter xmi:id="_0I260ZsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I3h4JsWEeCP54pW-6JbGA" name="isInstant" visibility="public">
+            <ownedParameter xmi:id="_0I3h4ZsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0A__UJsWEeCP54pW-6JbGA" name="RelativeInstant">
+          <eAnnotations xmi:id="_0A__UZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0A__UpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0I4I8JsWEeCP54pW-6JbGA" general="_0A8U8JsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0I4wAJsWEeCP54pW-6JbGA" general="_0HJqoZsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0I5-IJsWEeCP54pW-6JbGA" name="isEqual" visibility="public">
+            <ownedParameter xmi:id="_0I5-IZsWEeCP54pW-6JbGA" name="instant" type="_0A__UJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0I5-IpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I7MQJsWEeCP54pW-6JbGA" name="isAfter" visibility="public">
+            <ownedParameter xmi:id="_0I7MQZsWEeCP54pW-6JbGA" name="instant" type="_0A__UJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0I7MQpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I8aYJsWEeCP54pW-6JbGA" name="isBefore" visibility="public">
+            <ownedParameter xmi:id="_0I8aYZsWEeCP54pW-6JbGA" name="instant" type="_0A__UJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0I8aYpsWEeCP54pW-6JbGA" type="_z_KMQJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I9BcJsWEeCP54pW-6JbGA" name="toDate" visibility="public">
+            <ownedParameter xmi:id="_0I9BcZsWEeCP54pW-6JbGA" type="_0DRQMJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I-PkJsWEeCP54pW-6JbGA" name="compareTo" visibility="public">
+            <ownedParameter xmi:id="_0I-PkZsWEeCP54pW-6JbGA" name="dateTime" type="_0A9jEJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0I-PkpsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0I_dsJsWEeCP54pW-6JbGA" name="getChronology" visibility="public">
+            <ownedParameter xmi:id="_0I_dsZsWEeCP54pW-6JbGA" type="_0BAmYJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JAEwJsWEeCP54pW-6JbGA" name="getMillis" visibility="public">
+            <ownedParameter xmi:id="_0JAEwZsWEeCP54pW-6JbGA" type="_z_SvIJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0BAmYJsWEeCP54pW-6JbGA" name="Chronology">
+          <eAnnotations xmi:id="_0BAmYZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0BAmYpsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <ownedAttribute xmi:id="_0JAEwpsWEeCP54pW-6JbGA" name="BUDDHIST" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JAEw5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="1"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JAr0JsWEeCP54pW-6JbGA" name="COPTIC" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JAr0ZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="2"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JAr0psWEeCP54pW-6JbGA" name="GJ" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JAr05sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="3"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JAr1JsWEeCP54pW-6JbGA" name="GREGORIAN" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JAr1ZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="4"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JAr1psWEeCP54pW-6JbGA" name="ISO" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JAr15sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="5"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JBS4JsWEeCP54pW-6JbGA" name="JULIAN" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JBS4ZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="6"/>
+          </ownedAttribute>
+          <ownedOperation xmi:id="_0JBS4psWEeCP54pW-6JbGA" name="getType" visibility="public">
+            <ownedParameter xmi:id="_0JBS45sWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JB58JsWEeCP54pW-6JbGA" name="withUTC" visibility="public">
+            <ownedParameter xmi:id="_0JB58ZsWEeCP54pW-6JbGA" type="_0BAmYJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0BB0gJsWEeCP54pW-6JbGA" name="TimeSupportLocator">
+          <eAnnotations xmi:id="_0BB0gZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0BB0gpsWEeCP54pW-6JbGA" key="documentation" value=" This locator is the entry point for the TimeSupport library, providing&#xA; access to all TimeSupport services through the {@link TimeSupportManager}&#xA; .&#xA; &#xA; @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <elementImport xmi:id="_0JDvI5sWEeCP54pW-6JbGA" visibility="private" importedElement="_0JDvIZsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0JDvJZsWEeCP54pW-6JbGA" visibility="private" importedElement="_0JDvJJsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0JEWMZsWEeCP54pW-6JbGA" visibility="private" importedElement="_0JEWMJsWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0JDvIpsWEeCP54pW-6JbGA" general="_0JDvIZsWEeCP54pW-6JbGA"/>
+          <ownedAttribute xmi:id="_0JFkUJsWEeCP54pW-6JbGA" name="MANAGER_NAME" visibility="public" isStatic="true" type="_0IJJIZsWEeCP54pW-6JbGA">
+            <eAnnotations xmi:id="_0JGLYJsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+              <details xmi:id="_0JGLYZsWEeCP54pW-6JbGA" key="documentation" value=" TimeSupport manager name.&#xA; "/>
+            </eAnnotations>
+            <defaultValue xmi:type="uml:LiteralString" xmi:id="_0JGycJsWEeCP54pW-6JbGA" name="" type="_0IJJIZsWEeCP54pW-6JbGA" value="&quot;TimeSupport.manager&quot;"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JIAkJsWEeCP54pW-6JbGA" name="MANAGER_DESCRIPTION" visibility="public" isStatic="true" type="_0IJJIZsWEeCP54pW-6JbGA">
+            <eAnnotations xmi:id="_0JIAkZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+              <details xmi:id="_0JIAkpsWEeCP54pW-6JbGA" key="documentation" value=" TimeSupport manager description.&#xA; "/>
+            </eAnnotations>
+            <defaultValue xmi:type="uml:LiteralString" xmi:id="_0JIAk5sWEeCP54pW-6JbGA" name="" type="_0IJJIZsWEeCP54pW-6JbGA" value="&quot;TimeSupport Manager&quot;"/>
+          </ownedAttribute>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0JIno5sWEeCP54pW-6JbGA" name="getInstance" specification="_0JIAlJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0JInpJsWEeCP54pW-6JbGA" type="_0BB0gJsWEeCP54pW-6JbGA"/>
+            <language>JAVA</language>
+            <body>&#xA;        return INSTANCE;&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0JJOtJsWEeCP54pW-6JbGA" name="getLocatorName" specification="_0JJOsJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0JJOtZsWEeCP54pW-6JbGA" type="_0IJJIZsWEeCP54pW-6JbGA"/>
+            <language>JAVA</language>
+            <body>&#xA;        return LOCATOR_NAME;&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0JJ1xJsWEeCP54pW-6JbGA" name="getManager" specification="_0JJ1wJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0JJ1xZsWEeCP54pW-6JbGA" type="_0Ayj8JsWEeCP54pW-6JbGA"/>
+            <language>JAVA</language>
+            <body>&#xA;        return (TimeSupportManager) getInstance().get(MANAGER_NAME);&#xA;    </body>
+          </ownedBehavior>
+          <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0JOuRJsWEeCP54pW-6JbGA" name="registerManager" specification="_0JOuQJsWEeCP54pW-6JbGA">
+            <ownedParameter xmi:id="_0JOuRZsWEeCP54pW-6JbGA" name="clazz" type="_0JNgIJsWEeCP54pW-6JbGA"/>
+            <language>JAVA</language>
+            <body>&#xA;        getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);&#xA;    </body>
+          </ownedBehavior>
+          <ownedOperation xmi:id="_0JIAlJsWEeCP54pW-6JbGA" name="getInstance" visibility="public" isStatic="true" method="_0JIno5sWEeCP54pW-6JbGA">
+            <eAnnotations xmi:id="_0JInoJsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+              <details xmi:id="_0JInoZsWEeCP54pW-6JbGA" key="documentation" value=" Return the singleton instance.&#xA; &#xA; @return the singleton instance&#xA; "/>
+            </eAnnotations>
+            <ownedParameter xmi:id="_0JInopsWEeCP54pW-6JbGA" type="_0BB0gJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JJOsJsWEeCP54pW-6JbGA" name="getLocatorName" visibility="public" method="_0JJOtJsWEeCP54pW-6JbGA">
+            <eAnnotations xmi:id="_0JJOsZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+              <details xmi:id="_0JJOspsWEeCP54pW-6JbGA" key="documentation" value=" Return the Locator's name.&#xA; &#xA; @return a String with the Locator's name&#xA; "/>
+            </eAnnotations>
+            <ownedParameter xmi:id="_0JJOs5sWEeCP54pW-6JbGA" type="_0IJJIZsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JJ1wJsWEeCP54pW-6JbGA" name="getManager" visibility="public" isStatic="true" method="_0JJ1xJsWEeCP54pW-6JbGA">
+            <eAnnotations xmi:id="_0JJ1wZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+              <details xmi:id="_0JJ1wpsWEeCP54pW-6JbGA" key="documentation" value=" Return a reference to the TimeSupportManager.&#xA; &#xA; @return a reference to the TimeSupportManager&#xA; @throws LocatorException&#xA;             if there is no access to the class or the class cannot be&#xA;             instantiated&#xA; @see Locator#get(String)&#xA; "/>
+            </eAnnotations>
+            <ownedParameter xmi:id="_0JJ1w5sWEeCP54pW-6JbGA" type="_0Ayj8JsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JOuQJsWEeCP54pW-6JbGA" name="registerManager" visibility="public" isStatic="true" method="_0JOuRJsWEeCP54pW-6JbGA">
+            <eAnnotations xmi:id="_0JOuQZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+              <details xmi:id="_0JOuQpsWEeCP54pW-6JbGA" key="documentation" value=" Registers the Class implementing the TimeSupportManager interface.&#xA; &#xA; @param clazz&#xA;            implementing the TimeSupportManager interface&#xA; "/>
+            </eAnnotations>
+            <ownedParameter xmi:id="_0JOuQ5sWEeCP54pW-6JbGA" name="clazz" type="_0JNgIJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0BDCoJsWEeCP54pW-6JbGA" name="DateTimeFieldTypeNotRegisteredException">
+          <eAnnotations xmi:id="_0BDCoZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0BDCopsWEeCP54pW-6JbGA" key="documentation" value=" Exception thrown when there is an error getting a TimeSupport message.&#xA; &#xA; @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0JPVUJsWEeCP54pW-6JbGA" general="_0A7t4JsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0BDpsJsWEeCP54pW-6JbGA" name="EditableDateTime">
+          <eAnnotations xmi:id="_0BEQwJsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0BEQwZsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0JP8YJsWEeCP54pW-6JbGA" general="_0A9jEJsWEeCP54pW-6JbGA"/>
+          <ownedOperation xmi:id="_0JRKgJsWEeCP54pW-6JbGA" name="setTime" visibility="public">
+            <ownedParameter xmi:id="_0JRKgZsWEeCP54pW-6JbGA" name="hour" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0JRKgpsWEeCP54pW-6JbGA" name="minuteOfHour" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0JRKg5sWEeCP54pW-6JbGA" name="secondOfMinute" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0JRKhJsWEeCP54pW-6JbGA" name="millisOfSecond" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JSYoJsWEeCP54pW-6JbGA" name="setDate" visibility="public">
+            <ownedParameter xmi:id="_0JSYoZsWEeCP54pW-6JbGA" name="year" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0JSYopsWEeCP54pW-6JbGA" name="monthOfYear" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+            <ownedParameter xmi:id="_0JSYo5sWEeCP54pW-6JbGA" name="dayOfMonth" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JTmwJsWEeCP54pW-6JbGA" name="addYears" visibility="public">
+            <ownedParameter xmi:id="_0JTmwZsWEeCP54pW-6JbGA" name="years" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JUN0JsWEeCP54pW-6JbGA" name="addDays" visibility="public">
+            <ownedParameter xmi:id="_0JUN0ZsWEeCP54pW-6JbGA" name="days" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JVb8JsWEeCP54pW-6JbGA" name="addHours" visibility="public">
+            <ownedParameter xmi:id="_0JVb8ZsWEeCP54pW-6JbGA" name="hours" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JWDAJsWEeCP54pW-6JbGA" name="addMinutes" visibility="public">
+            <ownedParameter xmi:id="_0JWDAZsWEeCP54pW-6JbGA" name="minutes" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JXRIJsWEeCP54pW-6JbGA" name="addSeconds" visibility="public">
+            <ownedParameter xmi:id="_0JXRIZsWEeCP54pW-6JbGA" name="seconds" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0JYfQJsWEeCP54pW-6JbGA" name="addMillis" visibility="public">
+            <ownedParameter xmi:id="_0JYfQZsWEeCP54pW-6JbGA" name="millis" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0BE30JsWEeCP54pW-6JbGA" name="DataTypes">
+          <eAnnotations xmi:id="_0BE30ZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0BE30psWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <generalization xmi:id="_0JZGUpsWEeCP54pW-6JbGA" general="_0JZGUZsWEeCP54pW-6JbGA"/>
+          <ownedAttribute xmi:id="_0JZtYJsWEeCP54pW-6JbGA" name="INSTANT" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralString" xmi:id="_0JZtYZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="OBJECT + 4"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JZtYpsWEeCP54pW-6JbGA" name="INTERVAL" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralString" xmi:id="_0JZtY5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="OBJECT + 5"/>
+          </ownedAttribute>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_0BGF8JsWEeCP54pW-6JbGA" name="TimeSupportLibrary">
+          <eAnnotations xmi:id="_0BGF8ZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0BGF8psWEeCP54pW-6JbGA" key="documentation" value=" Library for API initialization and configuration.&#xA; &#xA; @author gvSIG team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <elementImport xmi:id="_0JfM8ZsWEeCP54pW-6JbGA" visibility="private" importedElement="_0JfM8JsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0JfM85sWEeCP54pW-6JbGA" visibility="private" importedElement="_0JfM8psWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0JfM9JsWEeCP54pW-6JbGA" visibility="private" importedElement="_0Jel4ZsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0JfM9psWEeCP54pW-6JbGA" visibility="private" importedElement="_0JfM9ZsWEeCP54pW-6JbGA"/>
+          <elementImport xmi:id="_0JfM-JsWEeCP54pW-6JbGA" visibility="private" importedElement="_0JfM95sWEeCP54pW-6JbGA"/>
+          <generalization xmi:id="_0Jel4psWEeCP54pW-6JbGA" general="_0Jel4ZsWEeCP54pW-6JbGA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Interface" xmi:id="_0BGtAJsWEeCP54pW-6JbGA" name="AbsoluteIntervalType">
+          <eAnnotations xmi:id="_0BGtAZsWEeCP54pW-6JbGA" source="http://www.topcased.org/documentation">
+            <details xmi:id="_0BGtApsWEeCP54pW-6JbGA" key="documentation" value=" @author gvSIG Team&#xA; @version $Id$&#xA;"/>
+          </eAnnotations>
+          <ownedAttribute xmi:id="_0Jf0AJsWEeCP54pW-6JbGA" name="YEARS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Jf0AZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0Jf0ApsWEeCP54pW-6JbGA" name="MONTHS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0Jf0A5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="1"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JgbEJsWEeCP54pW-6JbGA" name="WEEKS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JgbEZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="2"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JgbEpsWEeCP54pW-6JbGA" name="DAYS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JgbE5sWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="3"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JgbFJsWEeCP54pW-6JbGA" name="HOURS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JgbFZsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="4"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JgbFpsWEeCP54pW-6JbGA" name="MINUTES" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JhCIJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="5"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JhCIZsWEeCP54pW-6JbGA" name="SECONDS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JhCIpsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="6"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:id="_0JhCI5sWEeCP54pW-6JbGA" name="MILLIS" visibility="public" isStatic="true" type="_z_SIFJsWEeCP54pW-6JbGA">
+            <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0JhCJJsWEeCP54pW-6JbGA" name="" type="_z_SIFJsWEeCP54pW-6JbGA" value="7"/>
+          </ownedAttribute>
+          <ownedOperation xmi:id="_0JhpMJsWEeCP54pW-6JbGA" name="getType" visibility="public">
+            <ownedParameter xmi:id="_0JhpMZsWEeCP54pW-6JbGA" type="_z_SIFJsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+          <ownedOperation xmi:id="_0Ji3UJsWEeCP54pW-6JbGA" name="getName" visibility="public">
+            <ownedParameter xmi:id="_0Ji3UZsWEeCP54pW-6JbGA" type="_0IJJIZsWEeCP54pW-6JbGA" direction="return"/>
+          </ownedOperation>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JksgJsWEeCP54pW-6JbGA" supplier="_0DPbAZsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JvroJsWEeCP54pW-6JbGA" supplier="_0DMXsJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JvroZsWEeCP54pW-6JbGA" supplier="_0HJqoJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JvropsWEeCP54pW-6JbGA" supplier="_0IaO4JsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0Jvro5sWEeCP54pW-6JbGA" supplier="_0JDvIJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JvrpJsWEeCP54pW-6JbGA" supplier="_0DLwoJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JvrpZsWEeCP54pW-6JbGA" supplier="_0JZGUJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JvrppsWEeCP54pW-6JbGA" supplier="_0Jel4JsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JwSsJsWEeCP54pW-6JbGA" supplier="_0DPbAZsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JwSsZsWEeCP54pW-6JbGA" supplier="_0DMXsJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JwSspsWEeCP54pW-6JbGA" supplier="_0IaO4JsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JwSs5sWEeCP54pW-6JbGA" supplier="_0JDvIJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JwStJsWEeCP54pW-6JbGA" supplier="_0DLwoJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JwStZsWEeCP54pW-6JbGA" supplier="_0JZGUJsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Usage" xmi:id="_0JwStpsWEeCP54pW-6JbGA" supplier="_0Jel4JsWEeCP54pW-6JbGA" client="_z_zsgZsWEeCP54pW-6JbGA"/>
+        <packagedElement xmi:type="uml:Class" xmi:id="_rLCZUJsYEeCLud0KZOCUMA" name="Time"/>
+        <packagedElement xmi:type="uml:Class" xmi:id="_zSr14JsYEeCLud0KZOCUMA" name="Class1"/>
+        <packagedElement xmi:type="uml:Class" xmi:id="_5XJIEJvbEeCizKjHj1sb5A" name="Instant">
+          <generalization xmi:id="_91BooJvbEeCizKjHj1sb5A" general="_rLCZUJsYEeCLud0KZOCUMA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_68Iv8JvbEeCizKjHj1sb5A" name="Interval">
+          <generalization xmi:id="_89TWcJvbEeCizKjHj1sb5A" general="_rLCZUJsYEeCLud0KZOCUMA"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Class" xmi:id="_MndswJvdEeCizKjHj1sb5A" name="Class2"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Package" xmi:id="_0DLwoJsWEeCP54pW-6JbGA" name="tools">
+        <packagedElement xmi:type="uml:Package" xmi:id="_0DMXsJsWEeCP54pW-6JbGA" name="junit">
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0DMXsZsWEeCP54pW-6JbGA" name="AbstractLibraryAutoInitTestCase"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Package" xmi:id="_0HJqoJsWEeCP54pW-6JbGA" name="lang">
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0HJqoZsWEeCP54pW-6JbGA" name="Cloneable"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Package" xmi:id="_0IaO4JsWEeCP54pW-6JbGA" name="exception">
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0IaO4ZsWEeCP54pW-6JbGA" name="BaseException"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Package" xmi:id="_0JDvIJsWEeCP54pW-6JbGA" name="locator">
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0JDvIZsWEeCP54pW-6JbGA" name="BaseLocator"/>
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0JDvJJsWEeCP54pW-6JbGA" name="Locator"/>
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0JEWMJsWEeCP54pW-6JbGA" name="LocatorException"/>
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0JfM95sWEeCP54pW-6JbGA" name="ReferenceNotRegisteredException"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Package" xmi:id="_0JZGUJsWEeCP54pW-6JbGA" name="dataTypes">
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0JZGUZsWEeCP54pW-6JbGA" name="DataTypes"/>
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0JfM8psWEeCP54pW-6JbGA" name="DataTypesManager"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Package" xmi:id="_0Jel4JsWEeCP54pW-6JbGA" name="library">
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0Jel4ZsWEeCP54pW-6JbGA" name="AbstractLibrary"/>
+          <packagedElement xmi:type="uml:DataType" xmi:id="_0JfM9ZsWEeCP54pW-6JbGA" name="LibraryException"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:DataType" xmi:id="_0JfM8JsWEeCP54pW-6JbGA" name="ToolsLocator"/>
+      </packagedElement>
+    </packagedElement>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Package" xmi:id="_0DPbAJsWEeCP54pW-6JbGA" name="java">
+    <packagedElement xmi:type="uml:Package" xmi:id="_0DPbAZsWEeCP54pW-6JbGA" name="util">
+      <packagedElement xmi:type="uml:DataType" xmi:id="_0DPbApsWEeCP54pW-6JbGA" name="Calendar"/>
+      <packagedElement xmi:type="uml:DataType" xmi:id="_0DRQMJsWEeCP54pW-6JbGA" name="Date"/>
+      <packagedElement xmi:type="uml:DataType" xmi:id="_0DRQMpsWEeCP54pW-6JbGA" name="GregorianCalendar"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Package" xmi:id="_0IJJIJsWEeCP54pW-6JbGA" name="lang">
+      <packagedElement xmi:type="uml:DataType" xmi:id="_0IJJIZsWEeCP54pW-6JbGA" name="String"/>
+      <packagedElement xmi:type="uml:DataType" xmi:id="_0JNgIJsWEeCP54pW-6JbGA" name="Class"/>
+    </packagedElement>
+  </packagedElement>
+</uml:Model>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/docs/model.uml_diagram
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/docs/model.uml_diagram	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/docs/model.uml_diagram	(revision 42196)
@@ -0,0 +1,799 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:uml="http://www.eclipse.org/uml2/3.0.0/UML" xmi:id="_kZKSQJvbEeCizKjHj1sb5A" type="MOSKitt UMLClass" measurementUnit="Pixel">
+  <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kZS1IJvbEeCizKjHj1sb5A" source="es.cv.gvcase.mdt.uml2.diagram.common.Belongs_To_This_Diagram">
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0Aoy8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0Aoy8psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0DQpIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0DRQMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0DRQM5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0DRQNJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0DOM4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0D3GEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D3GEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D3GEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D3GE5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D3GFJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0D9MsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D9MsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D9MspsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D9Ms5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D9MtJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D9MtZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D9MtpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D9Mt5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0DujMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0DujMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0DujMpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0DujM5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0DujNJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0D7XgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D7XgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D7XgpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D7Xg5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D7XhJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D7XhZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D7XhpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0D7Xh5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0AqoIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0AqoIpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0D9zwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EDTUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EGWoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EJZ8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0ECFMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EFIgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EIL0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0ArPMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0ArPMpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0EKoEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0ENEUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EPgkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0ERVwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0ETyAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EWOQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EZRkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EL2MJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EOScJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EQusJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0ETK8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EVnMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EYDcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0AtEYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0AtEYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0EZ4oJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0Ec78JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EfYMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EibgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0Ek3wJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EnUAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Ebt0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EexIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EhNYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EjpoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Ems8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0AtrcZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0AtrcpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0EpJMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0EoiIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0ErlcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0EuBsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0Ewd8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0Ey6MJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0E1WcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0E3ysJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0E6O8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0E8EIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0E-gYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EqXUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EszkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0EvP0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0ExsEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0E0IUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0E2kkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0E5A0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0E7dEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0E95UJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0AzLAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0AzLAZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FFOEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FFOEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FHqUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FHqUZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FHqUpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FKtoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FKtoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FNJ4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FNJ4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FNJ4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FPmIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FPmIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FSCYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FSCYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FSCYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FVFsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FVFsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FW64JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FW64ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FW64psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FZXIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FZXIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FbzYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FbzYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FbzYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Fe2sJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Fe2sZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Fe2spsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FihEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FihEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FihEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Fk9UJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Fk9UZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FnZkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FnZkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FnZkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FnZk5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FtgMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FtgMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralUnlimitedNatural" href="model.uml#_0FuHQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FuHQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralUnlimitedNatural" href="model.uml#_0FuHQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FuHQ5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0FwjgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FwjgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0FwjgpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Fzm0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Fzm0ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Fzm0psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Fzm05sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Fzm1JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0F3RMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F3RMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralUnlimitedNatural" href="model.uml#_0F3RMpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F3RM5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralUnlimitedNatural" href="model.uml#_0F3RNJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F3RNZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F3RNpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0F5tcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F5tcZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F5tcpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F5tc5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0F9-4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F9-4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F9-4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0F9-45sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GBpQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GBpQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GBpQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GBpQ5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GBpRJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GHv4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GHv4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GHv4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GHv45sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GHv5JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GMoYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoY5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoZJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoZZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoZpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoZ5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoaJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoaZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GMoapsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GQ50JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ50ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ50psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ505sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ51JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ51ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ51psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ515sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ52JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GQ52ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GVLQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GVLQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GVLQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GVLQ5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GbR4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR45sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR5JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR5ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR5psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR55sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR6JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR6ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR6psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GbR65sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GfjUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GfjUZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GfjUpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GfjU5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Gkb0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb0ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb0psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb05sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb1JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb1ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb1psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb15sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb2JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb2ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Gkb2psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GpUUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GpUUZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GpUUpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GpUU5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GpUVJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GrwkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GrwkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GrwkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GtlwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GtlwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0GwpEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GwpEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0GwpEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0G06gJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06gZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06gpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06g5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06hJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06hZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06hpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06h5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G06iJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0G4k4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G4k4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G4k4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G4k45sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0G7oMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G7oMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G7oMpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0G_SkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G_SkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G_SkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0G_Sk5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HELEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELE5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELFJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELFZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELFpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELF5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELGJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HELGZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HIcgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIcgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIcgpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIcg5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIchJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIchZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIchpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIch5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIciJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HIciZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0AzyEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0AzyEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0HJqopsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HMG4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HMG4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HMG4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HN8EJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HN8EZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HN8EpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HPKMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HPKMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HPKMpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HQ_YJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HQ_YZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HQ_YpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HSNgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HSNgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HSNgpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HUCsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HUCsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HUCspsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HV34JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HV34ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HV34psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HXGAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HXGAZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HXtEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HXtEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HY7MJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HY7MZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HZiQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HZiQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HawYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HawYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A1AMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A1AMpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0HbXcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0Hb-gJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HdMoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HdMoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HeawJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HeawZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HeawpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HfB0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HfB0ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HfB0psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Hg3AJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Hg3AZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Hg3ApsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HiFIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HiFIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HiFIpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Hj6UJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Hj6UZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Hj6UpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HlIcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HlIcZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HlvgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HlvgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0HmWkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0HmWkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0H1AEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0H1AEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0H1nIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0H1nIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0H2OMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0H21QJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0H3cUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0H3cUZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0H4DYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0H4DYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A1nQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A1nQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0H4qcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0H4qcZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A2OUZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A2OUpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0H5RgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A21YZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A21YpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IBNUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0ICbcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IDCgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IDCgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IDCgpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IDCg5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IDChJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IDChZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IDChpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IDpkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IDpkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IDpkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IDpk5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IDplJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IDplZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IDplpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IEQoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IEQoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IEQopsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IEQo5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IEQpJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IEQpZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IEQppsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IE3sJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IH7AJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IH7AZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IJJIpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IJJI5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A5RoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A5RopsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0IJwMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IKXQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IKXQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IKXQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A6fwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A6fwpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0IK-UJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0ILlYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IMzgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IMzgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IOBoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IOBoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IOosJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IOosZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IPPwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IPPwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IPPwpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IQd4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IQd4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IQd4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IRE8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IRE8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IRsAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IRsAZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0ISTEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0ISTEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IS6IJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IS6IZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IThMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IThMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IUIQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IUIQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IVWYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IVWYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IVWYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IV9cJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IV9cZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IV9cpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IXLkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IXLkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IXLkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IYZsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IYZsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IYZspsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A7G0ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A7G0psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0IZn0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A7t4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A7t4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0IaO45sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0IaO4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A8U8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A8U8psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0Ia18JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IbdAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IbdAZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A9jEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A9jEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0IcEEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IcrIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IcrIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IdSMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IdSMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Id5QJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Id5QZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IegUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IegUZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IfHYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IfHYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IfucJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IgVgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Ig8kJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Ig8kZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IhjoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IhjoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IiKsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IiKsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IixwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IixwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Ij_4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Ij_4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Ikm8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Ikm8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Il1EJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Il1EZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0InqQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0InqQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0InqQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IpfcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IpfcZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IpfcpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IqtkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IqtkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IqtkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IsiwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IsiwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IsiwpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0IuX8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IuX8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0IuX8psWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A-KIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A-KIpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IuX85sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IuX9JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Iu_AJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Iu_AZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Iu_ApsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Iu_A5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Iu_BJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Iu_BZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Iu_BpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Iu_B5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IvmEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IvmEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IvmEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IvmE5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IvmFJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IvmFZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IvmFpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IvmF5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IwNIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IwNIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IwNIpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IwNI5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IwNJJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IwNJZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Iw0MJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Iw0MZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Iw0MpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Iw0M5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Iw0NJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Iw0NZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IxbQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IxbQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IxbQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IxbQ5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IxbRJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IxbRZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IyCUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IyCUZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IyCUpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IyCU5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IyCVJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IypYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IypYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IypYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0IypY5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0IypZJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Iz3gJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Iz3gZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I0ekJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I0ekZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A-xMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A-xMpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I1ssJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I1ssZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I1sspsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I2TwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I2TwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I2TwpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I2Tw5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I260JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I260ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I3h4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I3h4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0A__UZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0A__UpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0I4I8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0I4wAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I5-IJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I5-IZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I5-IpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I7MQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I7MQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I7MQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I8aYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I8aYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I8aYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I9BcJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I9BcZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I-PkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I-PkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I-PkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0I_dsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0I_dsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JAEwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JAEwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0BAmYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0BAmYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JAEwpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JAEw5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JAr0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JAr0ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JAr0psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JAr05sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JAr1JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JAr1ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JAr1psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JAr15sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JBS4JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JBS4ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JBS4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JBS45sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JB58JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JB58ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0BB0gZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0BB0gpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JDvI5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JDvJZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JEWMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0JDvIpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JFkUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0JGLYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0JGLYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralString" href="model.uml#_0JGycJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JIAkJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0JIAkZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0JIAkpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralString" href="model.uml#_0JIAk5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0JIno5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JInpJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0JJOtJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JJOtZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0JJ1xJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JJ1xZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:OpaqueBehavior" href="model.uml#_0JOuRJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JOuRZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JIAlJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0JInoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0JInoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JInopsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JJOsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0JJOsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0JJOspsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JJOs5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JJ1wJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0JJ1wZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0JJ1wpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JJ1w5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JOuQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0JOuQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0JOuQpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JOuQ5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0BDCoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0BDCopsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0JPVUJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0BEQwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0BEQwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0JP8YJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JRKgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JRKgZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JRKgpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JRKg5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JRKhJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JSYoJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JSYoZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JSYopsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JSYo5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JTmwJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JTmwZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JUN0JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JUN0ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JVb8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JVb8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JWDAJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JWDAZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JXRIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JXRIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JYfQJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JYfQZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0BE30ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0BE30psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0JZGUpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JZtYJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralString" href="model.uml#_0JZtYZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JZtYpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralString" href="model.uml#_0JZtY5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0BGF8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0BGF8psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JfM8ZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JfM85sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JfM9JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JfM9psWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:ElementImport" href="model.uml#_0JfM-JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_0Jel4psWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EAnnotation" href="model.uml#_0BGtAZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="ecore:EStringToStringMapEntry" href="model.uml#_0BGtApsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Jf0AJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Jf0AZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0Jf0ApsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0Jf0A5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JgbEJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JgbEZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JgbEpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JgbE5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JgbFJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JgbFZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JgbFpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JhCIJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JhCIZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JhCIpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Property" href="model.uml#_0JhCI5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:LiteralInteger" href="model.uml#_0JhCJJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0JhpMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0JhpMZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Operation" href="model.uml#_0Ji3UJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Parameter" href="model.uml#_0Ji3UZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JksgJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JvroJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JvroZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JvropsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0Jvro5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JvrpJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JvrpZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JvrppsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JwSsJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JwSsZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JwSspsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JwSs5sWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JwStJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JwStZsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Usage" href="model.uml#_0JwStpsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_89TWcJvbEeCizKjHj1sb5A"/>
+    <references xmi:type="uml:Generalization" href="model.uml#_91BooJvbEeCizKjHj1sb5A"/>
+    <references xmi:type="uml:Interface" href="model.uml#_0A-xMJsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Interface" href="model.uml#_0A8U8JsWEeCP54pW-6JbGA"/>
+    <references xmi:type="uml:Interface" href="model.uml#_0A5RoJsWEeCP54pW-6JbGA"/>
+  </eAnnotations>
+  <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kZfpcJvbEeCizKjHj1sb5A" source="es.cv.gvcase.mdt.uml2.diagram.common.DiagramsRelatedToElement">
+    <references xmi:type="uml:Package" href="model.uml#_z_zsgZsWEeCP54pW-6JbGA"/>
+  </eAnnotations>
+  <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kZj64JvbEeCizKjHj1sb5A" source="es.cv.gvcase.mdt.common.Editor">
+    <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kZj64ZvbEeCizKjHj1sb5A" key="version" value="1.3.2.201105190953"/>
+  </eAnnotations>
+  <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kZr2sJvbEeCizKjHj1sb5A" source="diagram_plugin_version-es.cv.gvcase.mdt.common">
+    <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kZr2sZvbEeCizKjHj1sb5A" key="version" value="1.3.5.201105190953"/>
+  </eAnnotations>
+  <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kZr2spvbEeCizKjHj1sb5A" source="diagram_plugin_version-es.cv.gvcase.emf.common">
+    <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kZr2s5vbEeCizKjHj1sb5A" key="version" value="1.3.4.201105190953"/>
+  </eAnnotations>
+  <children xmi:type="notation:Shape" xmi:id="_lMxggJvbEeCizKjHj1sb5A" type="1009" fontName="Sans">
+    <children xmi:type="notation:DecorationNode" xmi:id="_lMyHkJvbEeCizKjHj1sb5A" type="4017"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_lMyHkZvbEeCizKjHj1sb5A" type="5014">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_lMyHkpvbEeCizKjHj1sb5A"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_lMyHk5vbEeCizKjHj1sb5A"/>
+    </children>
+    <styles xmi:type="notation:FillStyle" xmi:id="_lMxggZvbEeCizKjHj1sb5A"/>
+    <styles xmi:type="notation:LineStyle" xmi:id="_lMxggpvbEeCizKjHj1sb5A" lineColor="0"/>
+    <element xmi:type="uml:Package" href="model.uml#_z_zsgZsWEeCP54pW-6JbGA"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lMxgg5vbEeCizKjHj1sb5A" width="661" height="466"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_XBy_wJywEeC-F4Rz6ZT0ZA" type="1007">
+    <children xmi:type="notation:DecorationNode" xmi:id="_XBy_x5ywEeC-F4Rz6ZT0ZA" type="4013">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_XBy_yJywEeC-F4Rz6ZT0ZA" y="5"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_XBy_yZywEeC-F4Rz6ZT0ZA" type="4014">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_XBy_ypywEeC-F4Rz6ZT0ZA" y="5"/>
+    </children>
+    <styles xmi:type="notation:DescriptionStyle" xmi:id="_XBy_wZywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_XBy_wpywEeC-F4Rz6ZT0ZA" fontName="Sans"/>
+    <styles xmi:type="notation:FillStyle" xmi:id="_XBy_w5ywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FillStyle" xmi:id="_XBy_xJywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:LineStyle" xmi:id="_XBy_xZywEeC-F4Rz6ZT0ZA" lineColor="0"/>
+    <element xmi:type="uml:Interface" href="model.uml#_0A-xMJsWEeCP54pW-6JbGA"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XBy_xpywEeC-F4Rz6ZT0ZA" x="270" y="90"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_YqhREJywEeC-F4Rz6ZT0ZA" type="1007">
+    <children xmi:type="notation:DecorationNode" xmi:id="_Yqh4IJywEeC-F4Rz6ZT0ZA" type="4013">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Yqh4IZywEeC-F4Rz6ZT0ZA" y="5"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_Yqh4IpywEeC-F4Rz6ZT0ZA" type="4014">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Yqh4I5ywEeC-F4Rz6ZT0ZA" y="5"/>
+    </children>
+    <styles xmi:type="notation:DescriptionStyle" xmi:id="_YqhREZywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_YqhREpywEeC-F4Rz6ZT0ZA" fontName="Sans"/>
+    <styles xmi:type="notation:FillStyle" xmi:id="_YqhRE5ywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FillStyle" xmi:id="_YqhRFJywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:LineStyle" xmi:id="_YqhRFZywEeC-F4Rz6ZT0ZA" lineColor="0"/>
+    <element xmi:type="uml:Interface" href="model.uml#_0A8U8JsWEeCP54pW-6JbGA"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YqhRFpywEeC-F4Rz6ZT0ZA" x="330" y="210"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_ZU9VMJywEeC-F4Rz6ZT0ZA" type="1007">
+    <children xmi:type="notation:DecorationNode" xmi:id="_ZU9VN5ywEeC-F4Rz6ZT0ZA" type="4013">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZU9VOJywEeC-F4Rz6ZT0ZA" y="5"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_ZU9VOZywEeC-F4Rz6ZT0ZA" type="4014">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZU9VOpywEeC-F4Rz6ZT0ZA" y="5"/>
+    </children>
+    <styles xmi:type="notation:DescriptionStyle" xmi:id="_ZU9VMZywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_ZU9VMpywEeC-F4Rz6ZT0ZA" fontName="Sans"/>
+    <styles xmi:type="notation:FillStyle" xmi:id="_ZU9VM5ywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FillStyle" xmi:id="_ZU9VNJywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:LineStyle" xmi:id="_ZU9VNZywEeC-F4Rz6ZT0ZA" lineColor="0"/>
+    <element xmi:type="uml:Interface" href="model.uml#_0A5RoJsWEeCP54pW-6JbGA"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZU9VNpywEeC-F4Rz6ZT0ZA" x="210" y="210"/>
+  </children>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_kZKSQZvbEeCizKjHj1sb5A"/>
+  <element xmi:type="uml:Package" href="model.uml#_z_zsgZsWEeCP54pW-6JbGA"/>
+  <edges xmi:type="notation:Edge" xmi:id="_YruyAJywEeC-F4Rz6ZT0ZA" type="3001" source="_YqhREJywEeC-F4Rz6ZT0ZA" target="_XBy_wJywEeC-F4Rz6ZT0ZA">
+    <styles xmi:type="notation:RoutingStyle" xmi:id="_YruyAZywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_YruyApywEeC-F4Rz6ZT0ZA" fontName="Sans"/>
+    <element xmi:type="uml:Generalization" href="model.uml#_0Ia18JsWEeCP54pW-6JbGA"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YruyA5ywEeC-F4Rz6ZT0ZA" points="[-10, -9, 165, 145]$[-165, -146, 10, 8]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_ZWLdMJywEeC-F4Rz6ZT0ZA" type="3001" source="_ZU9VMJywEeC-F4Rz6ZT0ZA" target="_XBy_wJywEeC-F4Rz6ZT0ZA">
+    <styles xmi:type="notation:RoutingStyle" xmi:id="_ZWLdMZywEeC-F4Rz6ZT0ZA"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_ZWLdMpywEeC-F4Rz6ZT0ZA" fontName="Sans"/>
+    <element xmi:type="uml:Generalization" href="model.uml#_0IJwMJsWEeCP54pW-6JbGA"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZWLdM5ywEeC-F4Rz6ZT0ZA" points="[5, -10, -95, 172]$[94, -172, -6, 10]"/>
+  </edges>
+</notation:Diagram>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api/pom.xml	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>   
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                </configuration>
+                <executions>
+                    <!--
+                    Generates a jar file only with the test classes
+                    -->
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.api
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/pom.xml	(revision 42196)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>	
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency> 
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>   				
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.timesupport.impl.TimeSupportDefaultImplLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInterval.java	(revision 42196)
@@ -0,0 +1,471 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteInstantType;
+import org.gvsig.timesupport.AbsoluteInstantTypeNotRegisteredException;
+import org.gvsig.timesupport.AbsoluteInterval;
+import org.gvsig.timesupport.AbsoluteIntervalType;
+import org.gvsig.timesupport.AbsoluteIntervalTypeNotRegisteredException;
+import org.gvsig.timesupport.Chronology;
+import org.gvsig.timesupport.Duration;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+
+/**
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class DefaultAbsoluteInterval implements AbsoluteInterval{
+    static final long MILLIS_BY_SECOND = 1000;
+    static final long MILLIS_BY_MINUTE = MILLIS_BY_SECOND * 60;
+    static final long MILLIS_BY_HOUR = MILLIS_BY_MINUTE * 60;
+    static final long MILLIS_BY_DAY = MILLIS_BY_HOUR * 24;
+    static final long MILLIS_BY_MONTH = MILLIS_BY_DAY * 30;
+    static final long MILLIS_BY_YEAR = MILLIS_BY_MONTH * 365;
+
+    private static Logger LOG = LoggerFactory.getLogger(DefaultAbsoluteInterval.class);
+
+    private org.joda.time.Period jodaPeriod = null;
+    private AbsoluteInstant startAbsoluteInstant = null;
+    private AbsoluteInstant endAbsoluteInstant = null;
+    private AbsoluteIntervalType[] absoluteIntervalTypes = null; 
+    private Chronology chronology = null;
+
+    private static final TimeSupportManager timeSupportManager = TimeSupportLocator.getManager(); 
+
+    DefaultAbsoluteInterval(AbsoluteInstant startPartial, int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis, Chronology chronology) throws AbsoluteIntervalTypeNotRegisteredException{
+        this(years, months, weeks, days, hours, minutes, seconds, millis, chronology);
+        initilizePartials(((DefaultAbsoluteInstant)startPartial).getJodaType());
+    }
+
+    DefaultAbsoluteInterval(int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis, Chronology chronology) throws AbsoluteIntervalTypeNotRegisteredException{
+        super();	
+        this.jodaPeriod = new org.joda.time.Period(years, months, weeks, days, hours, minutes, seconds, millis);
+        this.absoluteIntervalTypes = new AbsoluteIntervalType[8];
+        this.absoluteIntervalTypes[0] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.YEARS);
+        this.absoluteIntervalTypes[1] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.MONTHS);
+        this.absoluteIntervalTypes[2] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.WEEKS);
+        this.absoluteIntervalTypes[3] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.DAYS);
+        this.absoluteIntervalTypes[4] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.HOURS);
+        this.absoluteIntervalTypes[5] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.MINUTES);
+        this.absoluteIntervalTypes[6] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.SECONDS);
+        this.absoluteIntervalTypes[7] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.MILLIS); 
+        this.chronology = chronology;
+        initilizePartials();
+    }    
+
+    DefaultAbsoluteInterval(AbsoluteInstant startAbsoluteInstant, AbsoluteInstant endAbsoluteInstant, Chronology chronology) {
+        super(); 
+        this.jodaPeriod = new org.joda.time.Period(startAbsoluteInstant.toStandardDuration().getMillis(),
+            endAbsoluteInstant.toStandardDuration().getMillis());         
+            this.chronology = chronology;
+            this.startAbsoluteInstant = startAbsoluteInstant;
+            this.endAbsoluteInstant = endAbsoluteInstant;
+            
+//        int[] mergedTypes = mergeTypes(startAbsoluteInstant, endAbsoluteInstant);
+//        try {
+//            AbsoluteInstant startAbsoluteInstantAux = mergeTypes(mergedTypes, startAbsoluteInstant);
+//            AbsoluteInstant endAbsoluteInstantAux = mergeTypes(mergedTypes, endAbsoluteInstant);
+//            this.jodaPeriod = new org.joda.time.Period(((DefaultAbsoluteInstant)startAbsoluteInstantAux).getJodaType(), 
+//                ((DefaultAbsoluteInstant)endAbsoluteInstantAux).getJodaType());
+//            this.chronology = chronology;
+//            this.startAbsoluteInstant = startAbsoluteInstantAux;
+//            this.endAbsoluteInstant = endAbsoluteInstantAux;
+//        } catch (AbsoluteInstantTypeNotRegisteredException e) {
+//           LOG.error("Error creating the interval");
+//        }        
+    }
+
+//    private AbsoluteInstant mergeTypes(int[] mergedTypes,
+//        AbsoluteInstant absoluteInstant) throws AbsoluteInstantTypeNotRegisteredException{
+//        int[] values = new int[mergedTypes.length];
+//        for (int i=0 ; i<mergedTypes.length ; i++){
+//            if (mergedTypes[i] == AbsoluteInstantType.YEAR){
+//                values[i] = absoluteInstant.getYears();
+//            }else if (mergedTypes[i] == AbsoluteInstantType.MONTH_OF_YEAR){
+//                values[i] = absoluteInstant.getMonths();
+//                if (values[i] == 0){
+//                    values[i] = 1;
+//                }
+//            }else if (mergedTypes[i] == AbsoluteInstantType.DAY_OF_MONTH){
+//                values[i] = absoluteInstant.getDays();
+//                if (values[i] == 0){
+//                    values[i] = 1;
+//                }
+//            }else if (mergedTypes[i] == AbsoluteInstantType.HOUR_OF_DAY){
+//                values[i] = absoluteInstant.getHours();
+//            }else if (mergedTypes[i] == AbsoluteInstantType.MINUTE_OF_HOUR){
+//                values[i] = absoluteInstant.getMinutes();
+//            }else if (mergedTypes[i] == AbsoluteInstantType.SECOND_OF_MINUTE){
+//                values[i] = absoluteInstant.getSeconds();
+//            }else if (mergedTypes[i] == AbsoluteInstantType.MILLIS_OF_SECOND){
+//                values[i] = absoluteInstant.getMillis();
+//            }else{
+//                values[i] = 0;
+//            }                  
+//        }
+//        return timeSupportManager.createAbsoluteInstant(mergedTypes, values, absoluteInstant.getChronology());
+//    }
+//
+//    private int[] mergeTypes(AbsoluteInstant startAbsoluteInstant,
+//        AbsoluteInstant endAbsoluteInstant) {
+//        ArrayList types = new ArrayList();
+//        for (int i=0 ; i<startAbsoluteInstant.size() ; i++){
+//            types.add(startAbsoluteInstant.getFieldType(i).getType());
+//        }
+//        
+//        for (int i=0 ; i<endAbsoluteInstant.size() ; i++){
+//            int type = endAbsoluteInstant.getFieldType(i).getType();
+//            int position = -1;
+//            for (int j=0 ; j<types.size() ; j++){
+//                int addedType = (Integer)types.get(j);
+//                if (type < addedType){
+//                    position = j;
+//                    break;
+//                }else if (type == addedType){
+//                    position = -2;
+//                }                
+//            }
+//            if (position > -1){
+//                types.add(position, type);
+//            }else if (position == -1){
+//                types.add(type);
+//            }
+//        }        
+//        
+//        int[] mergedTypes = new int[types.size()];     
+//        for (int i=0 ; i<types.size() ; i++){
+//            mergedTypes[i] = (Integer)types.get(i);          
+//        }
+//        return mergedTypes;
+//    }
+
+    DefaultAbsoluteInterval(RelativeInstant startPeriod, RelativeInstant endPeriod, Chronology chronology) {
+        super();    
+        this.jodaPeriod = new org.joda.time.Period(((DefaultRelativeInstant)startPeriod).getJodaType(), 
+            ((DefaultRelativeInstant)endPeriod).getJodaType());
+        this.chronology = chronology;
+        initilizePartials();
+    }
+
+    DefaultAbsoluteInterval(Chronology chronology, org.joda.time.Period period) {
+        super();    
+        this.jodaPeriod = period;
+        this.chronology = chronology; 
+        initilizePartials();
+    }    
+
+    DefaultAbsoluteInterval(AbsoluteInstant startPartial, AbsoluteInstant endPartial) {
+        super(); 
+        this.startAbsoluteInstant = startPartial;
+        this.endAbsoluteInstant = endPartial;
+        this.jodaPeriod = new org.joda.time.Period(endPartial.getYears() - startPartial.getYears(),
+            0,
+            endPartial.getMonths() - startPartial.getMonths(),
+            endPartial.getDays() - startPartial.getDays(),
+            endPartial.getHours() - startPartial.getHours(),
+            endPartial.getMinutes() - startPartial.getMinutes(),
+            endPartial.getSeconds() - startPartial.getSeconds(),
+            endPartial.getMillis() - startPartial.getMillis());            
+    }
+   
+    @SuppressWarnings({"unchecked" })
+    private void initilizePartials(){
+        this.startAbsoluteInstant = new DefaultAbsoluteInstant(chronology);        
+        ArrayList types = new ArrayList();
+        ArrayList values = new ArrayList();
+        if (jodaPeriod.getYears() > 0){
+            types.add(AbsoluteInstantType.YEAR);
+            values.add(jodaPeriod.getYears());
+        }
+        if (jodaPeriod.getMonths() > 0){
+            types.add(AbsoluteInstantType.MONTH_OF_YEAR);
+            values.add(jodaPeriod.getMonths());
+        }
+        if (jodaPeriod.getWeeks() > 0){
+            types.add(AbsoluteInstantType.WEEK_OF_WEEKYEAR);
+            values.add(jodaPeriod.getWeeks());
+        }
+        if (jodaPeriod.getDays() > 0){
+            types.add(AbsoluteInstantType.DAY_OF_MONTH);
+            values.add(jodaPeriod.getDays());
+        }
+        if (jodaPeriod.getHours() > 0){
+            types.add(AbsoluteInstantType.HOUR_OF_DAY);
+            values.add(jodaPeriod.getHours());
+        }
+        if (jodaPeriod.getMinutes() > 0){
+            types.add(AbsoluteInstantType.MINUTE_OF_HOUR);
+            values.add(jodaPeriod.getMinutes());
+        }
+        if (jodaPeriod.getSeconds() > 0){
+            types.add(AbsoluteInstantType.SECOND_OF_MINUTE);
+            values.add(jodaPeriod.getSeconds());
+        }
+        if (jodaPeriod.getMillis() > 0){
+            types.add(AbsoluteInstantType.MILLIS_OF_SECOND);
+            values.add(jodaPeriod.getMillis());
+        }        
+        int[] nativeTypes = new int[types.size()];
+        int[] nativeValues = new int[values.size()];
+        for (int i=0 ; i<types.size() ; i++){
+            nativeTypes[i] = (Integer)types.get(i);
+            nativeValues[i] = (Integer)values.get(i);
+        }
+        try {
+            this.endAbsoluteInstant = timeSupportManager.createAbsoluteInstant(nativeTypes, nativeValues, chronology);
+        } catch (AbsoluteInstantTypeNotRegisteredException e) {
+            LOG.error("Impossible to create the endPartial for a period", e);
+        }  
+    }
+
+    @SuppressWarnings({ "unchecked" })
+    private void initilizePartials(org.joda.time.Partial jodaPartial){
+        this.startAbsoluteInstant = new DefaultAbsoluteInstant(chronology, jodaPartial);
+        org.joda.time.DateTimeFieldType[] dateTimeFieldTypes = jodaPartial.getFieldTypes();
+        int[] jodaValues = jodaPartial.getValues();
+        ArrayList types = new ArrayList();
+        ArrayList values = new ArrayList();
+        if (jodaPeriod.getYears() > 0){
+            types.add(AbsoluteInstantType.YEAR);
+            values.add(jodaPeriod.getYears());
+        }
+        if (jodaPeriod.getMonths() > 0){
+            types.add(AbsoluteInstantType.MONTH_OF_YEAR);
+            values.add(jodaPeriod.getMonths());
+        }
+        if (jodaPeriod.getDays() > 0){
+            types.add(AbsoluteInstantType.DAY_OF_MONTH);
+            values.add(jodaPeriod.getDays());
+        }
+        if (jodaPeriod.getHours() > 0){
+            types.add(AbsoluteInstantType.HOUR_OF_DAY);
+            values.add(jodaPeriod.getHours());
+        }
+        if (jodaPeriod.getMinutes() > 0){
+            types.add(AbsoluteInstantType.MINUTE_OF_HOUR);
+            values.add(jodaPeriod.getMinutes());
+        }
+        if (jodaPeriod.getSeconds() > 0){
+            types.add(AbsoluteInstantType.SECOND_OF_MINUTE);
+            values.add(jodaPeriod.getSeconds());
+        }
+        if (jodaPeriod.getMillis() > 0){
+            types.add(AbsoluteInstantType.MILLIS_OF_SECOND);
+            values.add(jodaPeriod.getMillis());
+        }    
+        for (int i=0 ; i<dateTimeFieldTypes.length ; i++){           
+            if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.year())){
+                initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.YEAR);
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.monthOfYear())){
+                initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.MONTH_OF_YEAR);
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.dayOfMonth())){
+                initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.DAY_OF_MONTH);
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.hourOfDay())){
+                initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.HOUR_OF_DAY);
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.minuteOfHour())){
+                initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.MINUTE_OF_HOUR);
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.secondOfMinute())){
+                initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.SECOND_OF_MINUTE);
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.millisOfSecond())){
+                initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.MILLIS_OF_SECOND);
+            } 
+        } 
+        int[] nativeTypes = new int[types.size()];
+        int[] nativeValues = new int[values.size()];
+        for (int i=0 ; i<types.size() ; i++){
+            nativeTypes[i] = (Integer)types.get(i);
+            nativeValues[i] = (Integer)values.get(i);
+        }
+        try {
+            this.endAbsoluteInstant = timeSupportManager.createAbsoluteInstant(nativeTypes, nativeValues, chronology);
+        } catch (AbsoluteInstantTypeNotRegisteredException e) {
+            LOG.error("Impossible to create the endPartial for a period", e);
+        }  
+    }
+
+    @SuppressWarnings({ "unchecked" })
+    private void initializePartialsIteration(List types, List values, int jodaValue, int dateTimefieldtype){
+        boolean found = false;
+        for (int j=0 ; j<types.size() ; j++){
+            if (types.get(j).equals(dateTimefieldtype)){
+                int value = (Integer)values.get(j);
+                values.remove(j);
+                values.add(j, value + jodaValue);
+                found = true;
+                break;
+            }
+        }
+        if (!found){
+            types.add(dateTimefieldtype);
+            values.add(jodaValue);
+        }
+    }
+
+    public int size() {       
+        return jodaPeriod.size();
+    }
+
+    public AbsoluteIntervalType getFieldType(int index) {       
+        return absoluteIntervalTypes[index];
+    }
+
+    public int getValue(int index) {      
+        return jodaPeriod.getValue(index);
+    } 
+
+    public String toString() {      
+        return jodaPeriod.toString();
+    } 
+
+    public boolean equals(Object obj) {      
+        if (((Time)obj).isRelative() || ((Time)obj).isInstant()){
+            return false;
+        }          
+        return ((DefaultAbsoluteInterval)obj).getJodaType().equals(jodaPeriod);
+    }
+
+    org.joda.time.Period getJodaType() {
+        return jodaPeriod;
+    }   
+
+    public Chronology getChronology() {      
+        return chronology;
+    }
+
+    public int getYears() {
+        return jodaPeriod.getYears();
+    }
+
+    public int getMonths() {
+        return jodaPeriod.getMonths();
+    }
+
+    public int getWeeks() {
+        return jodaPeriod.getWeeks();
+    }
+
+    public int getDays() {
+        return jodaPeriod.getDays();
+    }
+
+    public int getHours() {
+        return jodaPeriod.getHours();
+    }
+
+    public int getMinutes() {
+        return jodaPeriod.getMinutes();
+    }
+
+    public int getSeconds() {
+        return jodaPeriod.getSeconds();
+    }
+
+    public int getMillis() {
+        return jodaPeriod.getMillis();
+    }
+
+    public boolean isAfter(AbsoluteInterval period) {
+        return jodaPeriod.getMillis() > period.getMillis();
+    }
+
+    public boolean isBefore(AbsoluteInterval period) {
+        return jodaPeriod.getMillis() < period.getMillis();
+    }    
+
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultAbsoluteInterval(chronology, new org.joda.time.Period(jodaPeriod));
+    }
+
+    public AbsoluteInstant getStart(){
+        return startAbsoluteInstant;
+    }
+
+    public AbsoluteInstant getEnd(){
+        return endAbsoluteInstant;
+    }
+
+    public boolean isRelative() {
+        return false;
+    }
+
+    public boolean isAbsolute() {
+        return true;
+    }    
+
+    public boolean isInterval() {
+        return true;
+    }
+
+    public boolean isInstant() { 
+        return false;
+    }
+
+    public boolean intersects(Time time) {
+        if (time.isAbsolute()){
+            if (time.isInterval()){
+                return intersects((AbsoluteInterval)time);
+            }else{
+                return contains((AbsoluteInstant)time);
+            }
+        }
+        return true;
+    }
+
+    public boolean intersects(AbsoluteInterval absoluteInsterInterval){
+        return (this.getStart().isAfter(absoluteInsterInterval.getStart()) && this.getEnd().isBefore(absoluteInsterInterval.getStart())) ||
+        (this.getEnd().isBefore(absoluteInsterInterval.getEnd()) && this.getEnd().isAfter(absoluteInsterInterval.getEnd()));
+    }
+
+    public boolean contains(Instant instant) {
+        if (instant.isAbsolute()){
+            return this.getMillis() >= ((AbsoluteInstant)instant).getMillis();
+        }
+        return false;  
+    }
+
+    public Duration toStandardDuration() {
+        long millis = 0;                  
+        millis += getYears() * MILLIS_BY_YEAR;
+        millis += getMonths() * MILLIS_BY_MONTH;
+        millis += getDays() * MILLIS_BY_YEAR;
+        millis += getHours() * MILLIS_BY_HOUR;
+        millis += getMinutes() * MILLIS_BY_MINUTE;
+        millis += getSeconds() * MILLIS_BY_SECOND;       
+        millis += getMillis();
+        return new DefaultDuration(millis);
+    }
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultChronology.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultChronology.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultChronology.java	(revision 42196)
@@ -0,0 +1,58 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import org.gvsig.timesupport.Chronology;
+
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class DefaultChronology implements Chronology {
+    private org.joda.time.Chronology jodaChronology = null;
+    private Chronology withUTC= null;
+    private int type = 0;
+    
+    DefaultChronology(int type, org.joda.time.Chronology dateTimeFieldType) {
+        super();    
+        this.type = type;
+        this.jodaChronology = dateTimeFieldType;        
+    }
+    
+    org.joda.time.Chronology getJodaType() {      
+        return jodaChronology;
+    } 
+
+    public int getType() {
+        return type;
+    }
+
+    public Chronology withUTC() {       
+        if (withUTC == null){
+            withUTC = new DefaultChronology(type, jodaChronology.withUTC());
+        }
+        return withUTC;
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteIntervalType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteIntervalType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteIntervalType.java	(revision 42196)
@@ -0,0 +1,55 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import org.gvsig.timesupport.AbsoluteIntervalType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultAbsoluteIntervalType implements AbsoluteIntervalType{
+	private org.joda.time.PeriodType jodaPeriodType = null;
+	private int type = 0;
+	
+	DefaultAbsoluteIntervalType(int type, org.joda.time.PeriodType jodaPeriodType) {
+		super();	
+		this.type = type;
+		this.jodaPeriodType = jodaPeriodType;
+	}
+	
+	org.joda.time.PeriodType getJodaType() {
+		return jodaPeriodType;
+	}
+
+    public int getType() {      
+        return type;
+    }
+
+    public String getName() {      
+        return jodaPeriodType.getName();
+    }    
+    
+    public String toString() {      
+        return jodaPeriodType.toString();
+    }    
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultDuration.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultDuration.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultDuration.java	(revision 42196)
@@ -0,0 +1,64 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import org.gvsig.timesupport.Duration;
+
+/**
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class DefaultDuration implements Duration {
+	private org.joda.time.Duration jodaDuration = null;
+
+	DefaultDuration(long duration) {
+		super();	
+		this.jodaDuration = new org.joda.time.Duration(duration);
+	}	
+	
+	DefaultDuration(org.joda.time.Duration jodaDuration) {
+        super();    
+        this.jodaDuration = jodaDuration;
+    }   
+    
+	DefaultDuration(long startInstant, long endInstant) {
+		super();	
+		this.jodaDuration = new org.joda.time.Duration(startInstant, endInstant);
+	}
+
+    public long getMillis() {
+        return jodaDuration.getMillis();
+    }
+    
+    public String toString() {      
+        return jodaDuration.toString();
+    }  
+    
+    public boolean equals(Object obj) {      
+        return ((DefaultDuration)obj).getJodaType().equals(jodaDuration);
+    }
+
+    org.joda.time.Duration getJodaType() {      
+        return jodaDuration;
+    } 
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultEditableRelativeInstant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultEditableRelativeInstant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultEditableRelativeInstant.java	(revision 42196)
@@ -0,0 +1,79 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import org.joda.time.MutableDateTime;
+
+import org.gvsig.timesupport.Chronology;
+import org.gvsig.timesupport.EditableRelativeInstant;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class DefaultEditableRelativeInstant extends DefaultRelativeInstant implements EditableRelativeInstant{
+    private org.joda.time.MutableDateTime jodaMutableDateTime;
+
+    DefaultEditableRelativeInstant(MutableDateTime jodaMutableDateTime, Chronology chronology) {
+        super(jodaMutableDateTime.getMillis(), chronology);
+        this.jodaMutableDateTime = jodaMutableDateTime;       
+    }
+
+    public void setTime(int hour, int minuteOfHour, int secondOfMinute,
+        int millisOfSecond) {
+        jodaMutableDateTime.setTime(hour, minuteOfHour, secondOfMinute, millisOfSecond); 
+    }
+
+    public void setDate(int year, int monthOfYear, int dayOfMonth) {
+        jodaMutableDateTime.setDate(year, monthOfYear, dayOfMonth);        
+    }
+
+    public void addYears(int years) {
+        jodaMutableDateTime.addYears(years);
+    }
+
+    public void addDays(int days) {
+        jodaMutableDateTime.addDays(days);        
+    }
+
+    public void addHours(int hours) {
+        jodaMutableDateTime.addHours(hours);        
+    }
+
+    public void addMinutes(int minutes) {
+        jodaMutableDateTime.addMinutes(minutes);        
+    }
+
+    public void addSeconds(int seconds) {
+        jodaMutableDateTime.addSeconds(seconds);        
+    }
+
+    public void addMillis(int millis) {
+        jodaMutableDateTime.addMillis(millis);        
+    }  
+        
+    public String toString() {      
+        return jodaMutableDateTime.toString();
+    }  
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultTimeSupportManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultTimeSupportManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultTimeSupportManager.java	(revision 42196)
@@ -0,0 +1,259 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteInstantType;
+import org.gvsig.timesupport.AbsoluteInstantTypeNotRegisteredException;
+import org.gvsig.timesupport.AbsoluteInterval;
+import org.gvsig.timesupport.AbsoluteIntervalType;
+import org.gvsig.timesupport.AbsoluteIntervalTypeNotRegisteredException;
+import org.gvsig.timesupport.Chronology;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.RelativeInterval;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.impl.animation.TimeAnimationImpl;
+
+/**
+ * Default {@link TimeSupportManager} implementation.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+@SuppressWarnings("unchecked")
+public class DefaultTimeSupportManager implements TimeSupportManager {
+    private Logger LOG = LoggerFactory.getLogger(DefaultTimeSupportManager.class);
+	private Map absoluteInstantTypes = new HashMap();
+    private Map chronologyes = new HashMap();
+    private Map absoluteIntervalTypes = new HashMap();
+
+    private Chronology defaultChronology = null;
+
+    private List relativeInstantPatterns = null;
+
+    public DefaultTimeSupportManager(){
+        relativeInstantPatterns = new ArrayList();
+    }
+
+    public void registerAbsoluteInstantType(AbsoluteInstantType absoluteInstantType) {
+        absoluteInstantTypes.put(absoluteInstantType.getType(), absoluteInstantType);   
+    }
+
+    public AbsoluteInstantType getAbsoluteInstantType(int type) throws AbsoluteInstantTypeNotRegisteredException {
+        if (absoluteInstantTypes.containsKey(type)){
+            return (AbsoluteInstantType)absoluteInstantTypes.get(type);
+        }
+        throw new AbsoluteInstantTypeNotRegisteredException(type);     
+    }
+
+    public void registerAbsoluteIntervalType(AbsoluteIntervalType absoluteIntervalType) {
+        absoluteIntervalTypes.put(absoluteIntervalType.getType(), absoluteIntervalType);                  
+    }
+
+    public AbsoluteIntervalType getAbsoluteIntervalType(int type)
+    throws AbsoluteIntervalTypeNotRegisteredException {
+        if (absoluteIntervalTypes.containsKey(type)){
+            return (AbsoluteIntervalType)absoluteIntervalTypes.get(type);
+        }
+        throw new AbsoluteIntervalTypeNotRegisteredException(type);
+    }
+
+    public void registerChronology(Chronology chronology) {
+        chronologyes.put(chronology.getType(), chronology);        
+    }
+
+    public Chronology getChronology(int chronology){
+        if (chronologyes.containsKey(chronology)){
+            return (Chronology)chronologyes.get(chronology);
+        }
+        return null;
+    }
+
+    public void setDefaultChronology(int chronology){
+        this.defaultChronology = getChronology(chronology).withUTC();
+    }
+
+    public RelativeInstant createRelativeInstant(long instant) {
+        return new DefaultRelativeInstant(instant, defaultChronology);
+    }	
+
+    public RelativeInstant createRelativeInstant(Date date) {
+        return new DefaultRelativeInstant(date, defaultChronology);
+    }    
+
+    public AbsoluteInstant createAbsoluteInstant(){
+        return new DefaultAbsoluteInstant(defaultChronology);
+    }
+
+
+    public RelativeInstant createRelativeInstant(long instant, Chronology chronology) {
+        return new DefaultRelativeInstant(instant, chronology);
+    }
+
+    public RelativeInstant createRelativeInstant(Date date, Chronology chronology) {
+        return new DefaultRelativeInstant(date, chronology);
+    }
+
+    public RelativeInstant createRelativeInstant(Chronology chronology) {
+        return new DefaultRelativeInstant(chronology);
+    }
+
+    public RelativeInstant createRelativeInstant(int year, int monthOfYear,
+        int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute,
+        int millisOfSecond) {
+        return new DefaultRelativeInstant(year, monthOfYear, dayOfMonth, hourOfDay, minuteOfHour, secondOfMinute, millisOfSecond, defaultChronology);
+    }
+
+    public RelativeInstant createRelativeInstant(int year, int monthOfYear,
+        int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute,
+        int millisOfSecond, Chronology chronology) {
+        return new DefaultRelativeInstant(year, monthOfYear, dayOfMonth, hourOfDay, minuteOfHour, secondOfMinute, millisOfSecond, chronology);
+    }
+
+    public RelativeInstant createRelativeInstant(int year, int monthOfYear,
+        int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute,
+        int millisOfSecond, int chronology) {
+        return new DefaultRelativeInstant(year, monthOfYear, dayOfMonth, hourOfDay, minuteOfHour, secondOfMinute, millisOfSecond, getChronology(chronology));
+    }
+
+    public AbsoluteInstant createAbsoluteInstant(int type, int value) throws AbsoluteInstantTypeNotRegisteredException {
+        return new DefaultAbsoluteInstant((DefaultAbsoluteInstantType)getAbsoluteInstantType(type), value, defaultChronology);
+    }	
+
+    public AbsoluteInstant createAbsoluteInstant(int[] types, int[] values)
+    throws AbsoluteInstantTypeNotRegisteredException {
+        return createAbsoluteInstant(types, values, defaultChronology);
+    }    
+
+    public AbsoluteInstant createAbsoluteInstant(int type, int value, Chronology chronology)
+    throws AbsoluteInstantTypeNotRegisteredException {
+        return new DefaultAbsoluteInstant((DefaultAbsoluteInstantType)getAbsoluteInstantType(type), value, chronology);
+    }
+
+    public AbsoluteInstant createAbsoluteInstant(int[] types, int[] values,
+        Chronology chronology) throws AbsoluteInstantTypeNotRegisteredException {
+        DefaultAbsoluteInstantType[] dateTimeFieldTypes = new DefaultAbsoluteInstantType[types.length];
+        for (int i=0 ; i<types.length ; i++){
+            dateTimeFieldTypes[i] = (DefaultAbsoluteInstantType)getAbsoluteInstantType(types[i]);
+        }
+        return new DefaultAbsoluteInstant(dateTimeFieldTypes, values, chronology);
+    }
+
+    public AbsoluteInstant createAbsoluteInstant(Chronology chronology){
+        return new DefaultAbsoluteInstant(chronology);
+    }
+
+    public RelativeInterval createRelativeInterval(long startInstant, long endInstant) {
+        return new DefaultRelativeInterval(startInstant, endInstant, defaultChronology);
+    }	
+
+    public RelativeInterval createRelativeInterval(RelativeInstant startDateTime, RelativeInstant endDateTime) {
+        return new DefaultRelativeInterval(startDateTime, endDateTime, defaultChronology);
+    }    
+
+    public RelativeInterval createRelativeInterval(long startInstant, long endInstant,
+        Chronology chronology) {
+        return new DefaultRelativeInterval(startInstant, endInstant, chronology);
+    }
+
+    public RelativeInterval createRelativeInterval(RelativeInstant startDateTime,
+        RelativeInstant endDateTime, Chronology chronology) {
+        return new DefaultRelativeInterval(startDateTime, endDateTime, chronology);
+    }      
+
+    public AbsoluteInterval createAbsoluteInterval(int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis) throws AbsoluteIntervalTypeNotRegisteredException {
+        return new DefaultAbsoluteInterval(years, months, weeks, days, hours, minutes, seconds, millis, defaultChronology);       
+    }	
+
+    public AbsoluteInterval createAbsoluteInterval(AbsoluteInstant startPartial, int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis) throws AbsoluteIntervalTypeNotRegisteredException {
+        return new DefaultAbsoluteInterval(startPartial, years, months, weeks, days, hours, minutes, seconds, millis, defaultChronology);       
+    }   
+
+    public AbsoluteInterval createAbsoluteInterval(int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis, Chronology chronology)
+    throws AbsoluteIntervalTypeNotRegisteredException {
+        return new DefaultAbsoluteInterval(years, months, weeks, days, hours, minutes, seconds, millis, chronology);
+    }    
+
+    public AbsoluteInterval createAbsoluteInterval(AbsoluteInstant startPartial, int years, int months, int weeks, int days,
+        int hours, int minutes, int seconds, int millis, Chronology chronology)
+    throws AbsoluteIntervalTypeNotRegisteredException {
+        return new DefaultAbsoluteInterval(startPartial, years, months, weeks, days, hours, minutes, seconds, millis, chronology);
+    }
+
+    public AbsoluteInterval createAbsoluteInterval(AbsoluteInstant startPartial, AbsoluteInstant endPartial)
+    {
+        return new DefaultAbsoluteInterval(startPartial, endPartial, defaultChronology);
+    }
+
+    public AbsoluteInterval createAbsoluteInterval(RelativeInstant startPartial, RelativeInstant endPartial)
+    {
+        return new DefaultAbsoluteInterval(startPartial, endPartial, defaultChronology);
+    }
+
+    public AbsoluteInterval createAbsoluteInterval(
+        AbsoluteInstant startInstant, AbsoluteInstant endInstant,
+        Chronology chronology)
+    throws AbsoluteIntervalTypeNotRegisteredException {
+        return new DefaultAbsoluteInterval(startInstant, endInstant, chronology);
+    }
+
+    public void addRelativeInstantPattern(String relativeInstantPattern) {
+        relativeInstantPatterns.add(relativeInstantPattern);        
+    }
+
+    public RelativeInstant parseRelativeInstant(String relativeInstantString) {
+        for (int i=0 ; i<relativeInstantPatterns.size() ; i++){
+            try {     
+                Date date = new SimpleDateFormat((String)relativeInstantPatterns.get(i)).parse(relativeInstantString);
+                if (date != null){
+                    return createRelativeInstant(date);
+                }
+            } catch (ParseException e) {
+                //LOG.info("Impossible to parse the date using the " +  relativeInstantPatterns.get(i) + " pattern");    
+            }
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.timesupport.TimeSupportManager#createTimeAnimation()
+     */
+	public TimeAnimation createTimeAnimation() {
+		return new TimeAnimationImpl();
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/package.html	(revision 42196)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.timesupport package documentation</title>
+</head>
+<body>
+
+	<p>TimeSupport library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/animation/TimeAnimationImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/animation/TimeAnimationImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/animation/TimeAnimationImpl.java	(revision 42196)
@@ -0,0 +1,228 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl.animation;
+
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.animation.AnimateClient;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+
+/**
+ * Time animation main class. The data model should have the right parameters
+ * when the animation starts.
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ */
+public class TimeAnimationImpl extends Thread implements TimeAnimation {
+	private TimeAnimationDataModelImpl    timeAnimationModel    = null;
+	private long                          stepPause             = 1000;
+	private boolean                       stop                  = false;
+	private boolean                       pause                 = false;
+	private int[]                         incrementWindow       = null;
+	private int[]                         incrementStep         = null;
+	private TimeSupportManager            timeSupportManager    = null;
+	private AnimateClient                 client                = null;
+	private int                           iteration             = 0;
+	
+	public TimeAnimationImpl() {
+		timeSupportManager = TimeSupportLocator.getManager();
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.animation.TimeAnimation#setAnimateClient(org.gvsig.timesupport.animation.AnimateClient)
+	 */
+	public void setAnimateClient(AnimateClient client) {
+		this.client = client;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.animation.TimeAnimation#getDataModel()
+	 */
+	public TimeAnimationDataModel getDataModel() {
+		if(timeAnimationModel == null)
+			timeAnimationModel = new TimeAnimationDataModelImpl();
+		return timeAnimationModel;
+	}
+
+	public void run() {
+		RelativeInstant startDateTime = null;
+		this.incrementWindow = getDataModel().getWindowTimeByPartOfData();
+		this.incrementStep = getDataModel().getStepByPartOfData();
+		while(!stop) {
+			//Start date
+			if(startDateTime == null)
+				startDateTime = getDataModel().getInitTime();
+			else 
+				startDateTime = nextStep(startDateTime, incrementStep);
+			
+			//Checks in start date
+			if(startDateTime.isAfter(getDataModel().getEndTime())) {
+				iteration++;
+				checkStop(iteration);
+				startDateTime = null;
+				continue;
+			}
+			
+			//End date
+			RelativeInstant endDateTime = nextStep(startDateTime, incrementWindow);
+			//System.out.println("Ventana: " + startDateTime.toString("dd/MM/yyyy HH:mm:ss:SSS") + "  " + endDateTime.toString("dd/MM/yyyy HH:mm:ss:SSS"));
+			
+			//Checks in end date
+			boolean endIteration = false;
+			if(endDateTime.isAfter(getDataModel().getEndTime()) || 
+				endDateTime.isEqual(getDataModel().getEndTime())) {
+				endIteration = true;
+				endDateTime = getDataModel().getEndTime();
+			}
+			
+			if(client != null)
+				client.update(startDateTime, endDateTime);
+			
+			if(endIteration) {
+				iteration++;
+				checkStop(iteration);
+				startDateTime = null;
+				if(client != null)
+					client.endIteration(endDateTime);
+			}
+			
+			while(pause) {
+				try {
+					sleep(stepPause);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
+			try {
+				sleep(getDataModel().getSpeed());
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	/**
+	 * Checks the conditions to stop the animation
+	 * @param iteration
+	 * @return
+	 */
+	private boolean checkStop(int iteration) {
+		if((getDataModel().getLoop() == TimeAnimation.NO_LOOP) || 
+		   (getDataModel().getLoop() == TimeAnimation.LOOP_N && iteration >= getDataModel().getIterations())) {
+			if(client != null)
+				client.end();
+			stopAnimation();
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * Calculates the date of the next step
+	 * @param instant
+	 * @param increment
+	 * @return
+	 */
+	private RelativeInstant nextStep(RelativeInstant instant, int[] increment) {
+		int[] value = new int[7];
+		value[0] = instant.getYear() + increment[0];
+		value[1] = instant.getMonthOfYear() + increment[1];
+		value[2] = instant.getDayOfMonth() + increment[2];
+		value[3] = instant.getHourOfDay() + increment[3];
+		value[4] = instant.getMinuteOfHour() + increment[4];
+		value[5] = instant.getSecondOfMinute() + increment[5];
+		value[6] = instant.getMillisOfSecond() + increment[6];
+		
+		if(value[6] > 999) {
+			value[5] += (int)(value[6] / 1000);
+			value[6] = value[6] % 1000;
+		}
+		if(value[5] > 59) {
+			value[4] += (int)(value[5] / 59);
+			value[5] = value[5] % 60;
+		}
+		if(value[4] > 59) {
+			value[3] += (int)(value[4] / 59);
+			value[4] = value[4] % 60;
+		}
+		if(value[3] > 23) {
+			value[2] += (int)(value[3] / 23);
+			value[3] = value[3] % 24;
+		}
+		
+		//Meses de 31 dias
+		int t = 31;
+		
+		//Meses de 30 dias
+		if(value[1] == 4 || value[1] == 6 || value[1] == 9 || value[1] == 11) { 
+			t = 30;
+		}
+		//Meses de 29 dias
+		if(value[1] == 2 && (value[0] % 4) == 0) {
+			t = 29;
+		}
+		//Meses de 28 dias
+		if(value[1] == 2 && (value[0] % 4) != 0) {
+			t = 28;
+		}
+		
+		if(value[2] > t) {
+			value[1] += (int)(value[2] / t);
+			value[2] = (value[2] - t);
+		}
+
+		if(value[1] > 12) {
+			value[0] += (int)(value[1] / 12);
+			value[1] = value[1] - 12;
+		}
+		
+		return timeSupportManager.createRelativeInstant(
+				value[0], value[1], value[2], value[3], value[4], value[5], value[6]);
+	}
+	
+	/**
+	 * Stops the animation
+	 */
+	public void stopAnimation() {
+		iteration = 0;
+		this.stop = true;
+	}
+	
+	/**
+	 * Pauses the animation
+	 */
+	public void pauseAnimation() {
+		pause = !pause;
+	}
+	
+	/**
+	 * Starts the animation
+	 */
+	public void startAnimation() {
+		this.start();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/animation/TimeAnimationDataModelImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/animation/TimeAnimationDataModelImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/animation/TimeAnimationDataModelImpl.java	(revision 42196)
@@ -0,0 +1,301 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl.animation;
+
+import java.util.Observable;
+
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+
+/**
+ * Data model for animation 
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public class TimeAnimationDataModelImpl extends Observable implements TimeAnimationDataModel {
+	private RelativeInstant  initTime        = null;
+	private RelativeInstant  endTime         = null;
+	private RelativeInstant  initWindow      = null;
+	private RelativeInstant  endWindow       = null;
+	private RelativeInstant  position        = null;
+	private int              iterations      = 0;
+	private int              speed           = 0;
+	private int              timeStep        = 0;
+	private int              windowTime      = 0;
+	private int              windowTimeScale = 0;
+	private int              timeStepScale   = 0;
+	private int              loop            = 0;
+
+	public void setTimeWindow(RelativeInstant start, RelativeInstant end) {
+		this.initWindow = start;
+		this.endWindow = end;
+	}
+	
+	public RelativeInstant getEndTimeWindow() {
+		return endWindow;
+	}
+
+	public RelativeInstant getInitTimeWindow() {
+		return initWindow;
+	}
+	
+	//*********************************
+	
+	public void setTimeInterval(RelativeInstant start, RelativeInstant end) {
+		this.initTime = start;
+		this.endTime = end;
+	}
+	
+	public RelativeInstant getEndTime() {
+		return endTime;
+	}
+
+	public RelativeInstant getInitTime() {
+		return initTime;
+	}
+
+	//*********************************
+	
+	public int getIterations() {
+		return iterations;
+	}
+	
+	public int getSpeed() {
+		return speed;
+	}
+
+	public void setTimeStep(int timeStep) {
+		this.timeStep = timeStep;
+	}
+	
+	public int getTimeStep() {
+		return timeStep;
+	}
+
+	public void setWindowTime(int windowTime) {
+		this.windowTime = windowTime;
+	}
+	
+	public int getWindowTime() {
+		return windowTime;
+	}
+	
+	public void setLoop(int loop) {
+		this.loop = loop;
+	}
+	
+	public int getLoop() {
+		return loop;
+	}
+	
+	public void setInitTime(RelativeInstant initTime) {
+		this.initTime = initTime;
+	}
+
+	public void setEndTime(RelativeInstant endTime) {
+		this.endTime = endTime;
+	}
+
+	public void setIterations(int iterations) {
+		this.iterations = iterations;
+	}
+
+	public void setSpeed(int speed) {
+		this.speed = speed;
+	}
+
+	public int getWindowTimeScale() {
+		return windowTimeScale;
+	}
+
+	public void setWindowTimeScale(int windowTimeScale) {
+		this.windowTimeScale = windowTimeScale;
+	}
+
+	public int getTimeStepScale() {
+		return timeStepScale;
+	}
+
+	public void setTimeStepScale(int timeStepScale) {
+		this.timeStepScale = timeStepScale;
+	}
+	
+	public RelativeInstant getSliderPosition() {
+		return position;
+	}
+
+	public void setSliderPosition(RelativeInstant position) {
+		this.position = position;
+		updateObservers();
+	}
+	
+	public int[] getWindowTimeByPartOfData() {
+		int[] value = new int[7];
+		if(windowTimeScale == TimeAnimation.MILLISECOND) {
+			value[6] = windowTime % 1000;
+			if(windowTime > 999) {
+				windowTimeScale = TimeAnimation.SECOND;
+				windowTime = ((windowTime - value[6]) / 1000);
+			}
+		}
+		if(windowTimeScale == TimeAnimation.SECOND) {
+			value[5] = windowTime % 60;
+			if(windowTime > 59) {
+				windowTimeScale = TimeAnimation.MINUTE;
+				windowTime = ((windowTime - value[5]) / 60);
+			}
+		}
+		if(windowTimeScale == TimeAnimation.MINUTE) {
+			value[4] = windowTime % 60;
+			if(windowTime > 59) {
+				windowTimeScale = TimeAnimation.HOUR;
+				windowTime = ((windowTime - value[4]) / 60);
+			}
+		}
+		if(windowTimeScale == TimeAnimation.HOUR) {
+			value[3] = windowTime % 24;
+			if(windowTime > 23) {
+				windowTimeScale = TimeAnimation.DAY;
+				windowTime = ((windowTime - value[3]) / 24);
+			}
+		}
+		
+		if(windowTimeScale == TimeAnimation.WEEK) {
+			windowTimeScale = TimeAnimation.DAY;
+			windowTime *= 7;
+		}
+		
+		if(windowTimeScale == TimeAnimation.DAY) {
+			//Meses de 31 dias
+			int t = 31;
+			
+			//Meses de 30 dias
+			if(value[1] == 4 || value[1] == 6 || value[1] == 9 || value[1] == 11) 
+				t = 30;
+			
+			//Meses de 29 dias
+			if(value[1] == 2 && (value[0] % 4) == 0) 
+				t = 29;
+			
+			//Meses de 28 dias
+			if(value[1] == 2 && (value[0] % 4) != 0) 
+				t = 28;
+			
+			value[2] = windowTime % t;
+			if(windowTime > t) {
+				windowTimeScale = TimeAnimation.MONTH;
+				windowTime = ((windowTime - value[2]) / t);
+			}
+		}
+		if(windowTimeScale == TimeAnimation.MONTH) {
+			value[1] = windowTime % 12;
+			if(windowTime > 11) {
+				windowTimeScale = TimeAnimation.YEAR;
+				windowTime = ((windowTime - value[1]) / 12);
+			}
+		}
+		if(windowTimeScale == TimeAnimation.YEAR) {
+			value[0] = windowTime;
+		}
+		return value;
+	}
+	
+	public int[] getStepByPartOfData() {
+		int[] value = new int[7];
+		if(timeStepScale == TimeAnimation.MILLISECOND) {
+			value[6] = timeStep % 1000;
+			if(timeStep > 999) {
+				timeStepScale = TimeAnimation.SECOND;
+				timeStep = ((timeStep - value[6]) / 1000);
+			}
+		}
+		if(timeStepScale == TimeAnimation.SECOND) {
+			value[5] = timeStep % 60;
+			if(timeStep > 59) {
+				timeStepScale = TimeAnimation.MINUTE;
+				timeStep = ((timeStep - value[5]) / 60);
+			}
+		}
+		if(timeStepScale == TimeAnimation.MINUTE) {
+			value[4] = timeStep % 60;
+			if(timeStep > 59) {
+				timeStepScale = TimeAnimation.HOUR;
+				timeStep = ((timeStep - value[4]) / 60);
+			}
+		}
+		if(timeStepScale == TimeAnimation.HOUR) {
+			value[3] = timeStep % 24;
+			if(timeStep > 23) {
+				timeStepScale = TimeAnimation.DAY;
+				timeStep = ((timeStep - value[3]) / 24);
+			}
+		}
+		if(timeStepScale == TimeAnimation.WEEK) {
+			timeStepScale = TimeAnimation.DAY;
+			timeStep *= 7;
+		}
+		if(timeStepScale == TimeAnimation.DAY) {
+			//Meses de 31 dias
+			int t = 31;
+			
+			//Meses de 30 dias
+			if(value[1] == 4 || value[1] == 6 || value[1] == 9 || value[1] == 11) 
+				t = 30;
+			
+			//Meses de 29 dias
+			if(value[1] == 2 && (value[0] % 4) == 0) 
+				t = 29;
+			
+			//Meses de 28 dias
+			if(value[1] == 2 && (value[0] % 4) != 0) 
+				t = 28;
+			
+			value[2] = timeStep % t;
+			if(timeStep > t) {
+				timeStepScale = TimeAnimation.MONTH;
+				timeStep = ((timeStep - value[2]) / t);
+			}
+		}
+		if(timeStepScale == TimeAnimation.MONTH) {
+			value[1] = timeStep % 12;
+			if(timeStep > 11) {
+				timeStepScale = TimeAnimation.YEAR;
+				timeStep = ((timeStep - value[1]) / 12);
+			}
+		}
+		if(timeStepScale == TimeAnimation.YEAR) {
+			value[0] = timeStep;
+		}
+		return value;
+	}
+
+	/**
+	 * Actualiza datos y llama al update de los observadores
+	 */
+	public void updateObservers() {
+		setChanged();
+		notifyObservers();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultRelativeInstant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultRelativeInstant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultRelativeInstant.java	(revision 42196)
@@ -0,0 +1,291 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import java.util.Date;
+
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.Chronology;
+import org.gvsig.timesupport.EditableRelativeInstant;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.RelativeInterval;
+import org.gvsig.timesupport.Time;
+
+/**
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class DefaultRelativeInstant implements RelativeInstant{
+    private org.joda.time.DateTime jodaDateTime = null;
+    private Chronology chronology = null;       
+    
+    DefaultRelativeInstant(long instant, Chronology chronology) {
+        super();    
+        this.jodaDateTime = new org.joda.time.DateTime(instant, ((DefaultChronology)chronology).getJodaType());
+        this.chronology = chronology;
+    }
+    
+    DefaultRelativeInstant(Chronology chronology) {
+        super();    
+        this.jodaDateTime = new org.joda.time.DateTime(((DefaultChronology)chronology).getJodaType());   
+        this.chronology = chronology;
+    }
+    
+    DefaultRelativeInstant(Chronology chronology,  org.joda.time.DateTime dateTime ) {
+        super();    
+        this.jodaDateTime = dateTime; 
+        this.chronology = chronology;
+    }
+    
+    DefaultRelativeInstant(Chronology chronology,  org.joda.time.Period period ) {
+        super();    
+        this.jodaDateTime = new org.joda.time.DateTime(period.getYears(), period.getMonths(), period.getDays(),
+            period.getHours(), period.getMinutes(), period.getSeconds(), period.getMillis(), ((DefaultChronology)chronology).getJodaType()); 
+        this.chronology = chronology;
+    }
+    
+    DefaultRelativeInstant(Chronology chronology,  AbsoluteInstant absoluteInstant) {
+        super();    
+        this.jodaDateTime = new org.joda.time.DateTime(absoluteInstant.getYears(), absoluteInstant.getMonths(), absoluteInstant.getDays(),
+            absoluteInstant.getHours(), absoluteInstant.getMinutes(), absoluteInstant.getSeconds(), absoluteInstant.getMillis(), ((DefaultChronology)chronology).getJodaType()); 
+        this.chronology = chronology;
+    }
+    
+    DefaultRelativeInstant(Date date, Chronology chronology) {
+        super();    
+        this.jodaDateTime = new org.joda.time.DateTime(date, ((DefaultChronology)chronology).getJodaType());        
+        this.chronology = chronology;
+    }
+    
+    DefaultRelativeInstant(org.joda.time.DateTime jodaDateTime, Chronology chronology){
+        super();    
+        this.jodaDateTime = jodaDateTime; 
+        this.chronology = chronology;
+    }
+
+    DefaultRelativeInstant(int year, int monthOfYear, int dayOfMonth, int hourOfDay,
+        int minuteOfHour, int secondOfMinute, int millisOfSecond, Chronology chronology){
+        super();    
+        this.jodaDateTime = new org.joda.time.DateTime(year, monthOfYear, dayOfMonth, hourOfDay,
+            minuteOfHour, secondOfMinute, millisOfSecond, ((DefaultChronology)chronology).getJodaType());          
+        this.chronology = chronology;
+    }
+
+    public int getHourOfDay() {
+       return jodaDateTime.getHourOfDay();
+    }
+
+    public int getMinuteOfHour() {
+        return jodaDateTime.getMinuteOfHour();
+    }
+
+    public int getSecondOfMinute() {
+       return jodaDateTime.getSecondOfMinute();
+    }
+
+    public int getMinuteOfDay() {
+        return jodaDateTime.getMinuteOfDay();
+    }
+
+    public int getSecondOfDay() {
+        return jodaDateTime.getSecondOfDay();
+    }
+
+    public EditableRelativeInstant getEditableCopy() {    
+        return new DefaultEditableRelativeInstant(jodaDateTime.toMutableDateTime(), chronology);
+    }
+
+    public long toMillis() {
+        return jodaDateTime.getMillis();
+    }  
+    
+    public String toString(String pattern) {
+        return jodaDateTime.toString(pattern);
+    }
+
+    public Date toDate() {       
+        return jodaDateTime.toDate();
+    }
+
+    public boolean isEqual(Instant instant) {       
+        return jodaDateTime.isEqual(((DefaultRelativeInstant)instant).getJodaType());
+    } 
+
+    public boolean isAfter(Instant instant) {
+        return jodaDateTime.isAfter(((DefaultRelativeInstant)instant).getJodaType());
+    }
+
+    public boolean isBefore(Instant instant) {
+        return jodaDateTime.isBefore(((DefaultRelativeInstant)instant).getJodaType());
+    }
+    
+    public String toString() {      
+        return jodaDateTime.toString();
+    }  
+    
+    public boolean equals(Object obj) {      
+        if ((obj == null) || ((Time)obj).isAbsolute() || ((Time)obj).isInterval()){
+            return false;
+        }
+        return ((DefaultRelativeInstant)obj).getJodaType().equals(jodaDateTime);
+    }
+
+    public int getMillisOfSecond() {      
+        return jodaDateTime.getMillisOfSecond();
+    }
+
+    public Chronology getChronology() {      
+        return chronology;
+    }
+    public int getYear() {
+        return jodaDateTime.getYear();
+    }
+
+    public int getMonthOfYear() {
+        return jodaDateTime.getMonthOfYear();
+    }
+
+    public int getWeekOfWeekyear() {    
+        return jodaDateTime.getWeekOfWeekyear();
+    }
+
+    public int getDayOfWeek() {
+        return jodaDateTime.getDayOfWeek();
+    }    
+
+    public int getDayOfMonth() { 
+        return jodaDateTime.getDayOfMonth();
+    } 
+    
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultRelativeInstant(chronology, new org.joda.time.DateTime(jodaDateTime));
+    }  
+
+    public boolean intersects(Time time) {
+      if (time.isRelative()){
+          if (time.isInterval()){
+              return (((RelativeInterval)time).toDurationMillis() == 0) && ((RelativeInterval)time).getStart().equals(this);
+          }else{
+              return this.equals(time);
+          }
+      }
+      return true;
+  }
+
+    public boolean isRelative() {
+        return true;
+    }
+
+    public boolean isAbsolute() {
+        return false;
+    }
+
+    public boolean isInterval() {
+        return false;
+    }
+
+    public boolean isInstant() {
+        return true;
+    }
+
+    public int compareTo(Instant instant) {
+        return getJodaType().compareTo(((DefaultRelativeInstant)instant).getJodaType());
+    }
+    
+
+    org.joda.time.DateTime getJodaType() {
+        return jodaDateTime;
+    }
+
+  
+    
+//	protected org.joda.time.Instant jodaInstant = null;	
+//	private static Chronology chronology = 
+//	    TimeSupportLocator.getManager().getChronology(Chronology.ISO).withUTC();
+//	
+//	DefaultRelativeInstant(long instant) {
+//		super();	
+//		this.jodaInstant = new org.joda.time.Instant(instant);		
+//	}
+//	
+//   DefaultRelativeInstant(Date date) {
+//        super();    
+//        this.jodaInstant = new org.joda.time.Instant(date);        
+//    }
+//   
+//   DefaultRelativeInstant(DateTime dateTime) {
+//       this(dateTime.toDate());      
+//   }
+//   
+//   DefaultRelativeInstant(org.joda.time.Instant instant) {
+//       super();    
+//       this.jodaInstant = instant;      
+//   }
+//
+//    public Date toDate() {       
+//        return jodaInstant.toDate();
+//    }
+//
+//    public int compareTo(DateTime dateTime) {        
+//        return jodaInstant.compareTo(((DefaultDateTime)dateTime).getJodaType());
+//    }
+//
+//    public DateTime toDateTime() {
+//        return new DefaultDateTime(jodaInstant.toDateTime().toDate(), chronology);
+//    }
+//
+//    public long getMillis() {
+//        return jodaInstant.getMillis();
+//    }	
+//    
+//    org.joda.time.Instant getJodaType() {
+//        return jodaInstant;
+//    }
+//
+//    public boolean isEqual(RelativeInstant instant) {       
+//        return jodaInstant.isEqual(((DefaultRelativeInstant)instant).getJodaType());
+//    }
+//
+//    public boolean isAfter(RelativeInstant instant) {
+//        return jodaInstant.isAfter(((DefaultRelativeInstant)instant).getJodaType());
+//    }
+//
+//    public boolean isBefore(RelativeInstant instant) {
+//        return jodaInstant.isBefore(((DefaultRelativeInstant)instant).getJodaType());
+//    }    
+//    
+//    public String toString() {      
+//        return jodaInstant.toString();
+//    }
+//
+//    public boolean equals(Object obj) {      
+//        return ((DefaultRelativeInstant)obj).getJodaType().equals(jodaInstant);
+//    }       
+//
+//    public Chronology getChronology() {      
+//        return chronology;
+//    }
+
+
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInstant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInstant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInstant.java	(revision 42196)
@@ -0,0 +1,253 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */ 
+package org.gvsig.timesupport.impl;
+
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteInstantType;
+import org.gvsig.timesupport.AbsoluteInterval;
+import org.gvsig.timesupport.AbsoluteIntervalType;
+import org.gvsig.timesupport.Chronology;
+import org.gvsig.timesupport.Duration;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Time;
+
+/**
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class DefaultAbsoluteInstant implements AbsoluteInstant {
+    private org.joda.time.Partial jodaPartial = null;
+    private AbsoluteInstantType[] dateTimeFieldTypes = null;
+    private Chronology chronology = null;
+    private org.joda.time.DateTimeFieldType[] indexes = null;
+
+    DefaultAbsoluteInstant(Chronology chronology) {
+        super();    
+        this.jodaPartial = new org.joda.time.Partial(((DefaultChronology)chronology).getJodaType());
+        this.chronology = chronology;
+        initializeIndexes();
+    }
+
+    DefaultAbsoluteInstant(Chronology chronology, org.joda.time.Partial jodaPartial) {
+        super();    
+        this.jodaPartial = jodaPartial;
+        this.chronology = chronology;
+        initializeIndexes();
+    }
+
+    DefaultAbsoluteInstant(DefaultAbsoluteInstantType dateTimeFieldType, int value, Chronology chronology) {
+        super();	
+        this.jodaPartial = new org.joda.time.Partial(dateTimeFieldType.getJodaType(), value, ((DefaultChronology)chronology).getJodaType());
+        this.dateTimeFieldTypes = new DefaultAbsoluteInstantType[1];
+        this.dateTimeFieldTypes[0] = dateTimeFieldType;
+        this.chronology = chronology;
+        initializeIndexes();
+    }
+
+    DefaultAbsoluteInstant(DefaultAbsoluteInstantType[] dateTimeFieldTypes, int[] values, Chronology chronology) {
+        super();    
+        org.joda.time.DateTimeFieldType[] jodaDateTimeFieldTypes = new org.joda.time.DateTimeFieldType[dateTimeFieldTypes.length];
+        this.dateTimeFieldTypes = new DefaultAbsoluteInstantType[dateTimeFieldTypes.length];
+        for (int i=0 ; i<dateTimeFieldTypes.length ; i++){
+            this.dateTimeFieldTypes[i] = dateTimeFieldTypes[i];
+            jodaDateTimeFieldTypes[i] = dateTimeFieldTypes[i].getJodaType();
+        }
+        this.jodaPartial = new org.joda.time.Partial(jodaDateTimeFieldTypes, values, ((DefaultChronology)chronology).getJodaType());
+        this.chronology = chronology;
+        initializeIndexes();
+    }
+    
+    private void initializeIndexes(){
+        indexes = new org.joda.time.DateTimeFieldType[8];
+        org.joda.time.DateTimeFieldType[] dateTimeFieldTypes = jodaPartial.getFieldTypes();    
+        for (int i=0 ; i<dateTimeFieldTypes.length ; i++){    
+            if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.year())){
+                indexes[AbsoluteIntervalType.YEARS] = dateTimeFieldTypes[i];
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.monthOfYear())){
+                indexes[AbsoluteIntervalType.MONTHS] = dateTimeFieldTypes[i];
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.weekOfWeekyear())){
+                indexes[AbsoluteIntervalType.WEEKS] = dateTimeFieldTypes[i];
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.dayOfMonth())){
+                indexes[AbsoluteIntervalType.DAYS] = dateTimeFieldTypes[i];
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.hourOfDay())){
+                indexes[AbsoluteIntervalType.HOURS] = dateTimeFieldTypes[i];
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.minuteOfHour())){
+                indexes[AbsoluteIntervalType.MINUTES] = dateTimeFieldTypes[i];
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.secondOfMinute())){
+                indexes[AbsoluteIntervalType.SECONDS] = dateTimeFieldTypes[i];
+            } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.millisOfSecond())){
+                indexes[AbsoluteIntervalType.MILLIS] = dateTimeFieldTypes[i];
+            } 
+        }         
+    }
+
+    public int size() {
+        return jodaPartial.size();
+    }
+
+    public AbsoluteInstantType getFieldType(int index) {        
+        return dateTimeFieldTypes[index];
+    }
+
+    public int getValue(int index) {       
+        return jodaPartial.getValue(index);
+    }
+
+    public String toString() {      
+        return jodaPartial.toString();
+    } 
+
+    public boolean equals(Object obj) {      
+        if (((Time)obj).isRelative() || ((Time)obj).isInterval()){
+            return false;
+        }    
+        return ((DefaultAbsoluteInstant)obj).getJodaType().equals(jodaPartial);
+    }
+
+    org.joda.time.Partial getJodaType() {
+        return jodaPartial;
+    }
+
+    public boolean isAfter(Instant partial) {
+        return jodaPartial.isAfter(((DefaultAbsoluteInstant)partial).getJodaType());
+    }
+
+    public boolean isBefore(Instant partial) {
+        return jodaPartial.isBefore(((DefaultAbsoluteInstant)partial).getJodaType());
+    }
+
+    public boolean isEqual(Instant partial) {
+        return jodaPartial.isEqual(((DefaultAbsoluteInstant)partial).getJodaType());
+    }    
+
+    public Chronology getChronology() {      
+        return chronology;
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultAbsoluteInstant(chronology, new org.joda.time.Partial(jodaPartial));
+    }  
+    
+    public int getYears(){
+        if (indexes[AbsoluteIntervalType.YEARS] == null){
+            return 0;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.YEARS])).intValue();
+    }    
+
+    public int getMonths(){
+        if (indexes[AbsoluteIntervalType.MONTHS] == null){
+            return 1;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.MONTHS])).intValue();
+    }
+    
+    public int getWeeks(){
+        if (indexes[AbsoluteIntervalType.WEEKS] == null){
+            return 0;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.WEEKS])).intValue();
+    }
+
+    public int getDays(){
+        if (indexes[AbsoluteIntervalType.DAYS] == null){
+            return 1;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.DAYS])).intValue();
+    }
+
+    public int getHours(){
+        if (indexes[AbsoluteIntervalType.HOURS] == null){
+            return 0;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.HOURS])).intValue();
+    }
+
+    public int getMinutes(){
+        if (indexes[AbsoluteIntervalType.MINUTES] == null){
+            return 0;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.MINUTES])).intValue();
+    }
+
+    public int getSeconds(){
+        if (indexes[AbsoluteIntervalType.SECONDS] == null){
+            return 0;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.SECONDS])).intValue();
+    }
+
+    public int getMillis(){
+        if (indexes[AbsoluteIntervalType.MILLIS] == null){
+            return 0;
+        }
+        return ((Integer)jodaPartial.get(indexes[AbsoluteIntervalType.MILLIS])).intValue();
+    }
+
+    public boolean isRelative() {
+        return false;
+    }
+
+    public boolean isAbsolute() {
+        return true;
+    }
+
+    public boolean isInterval() {
+        return false;
+    }
+
+    public boolean isInstant() { 
+        return true;
+    }
+
+    public boolean intersects(Time time) {
+        if (time.isAbsolute()){
+            if (time.isInterval()){
+                return (((AbsoluteInterval)time).getMillis() == 0) && ((AbsoluteInterval)time).getStart().equals(this);
+            }else{
+                return this.equals(time);
+            }
+        }
+        return true;
+    }
+
+    public AbsoluteInstant minus(AbsoluteInterval interval) {
+        return new DefaultAbsoluteInstant(chronology, jodaPartial.minus(((DefaultAbsoluteInterval)interval).getJodaType()));
+    }
+
+    public AbsoluteInstant plus(AbsoluteInterval interval) {
+        return new DefaultAbsoluteInstant(chronology, jodaPartial.plus(((DefaultAbsoluteInterval)interval).getJodaType()));
+    }
+
+    public Duration toStandardDuration() {
+        long millis = 0;                  
+        millis += getYears() * DefaultAbsoluteInterval.MILLIS_BY_YEAR;
+        millis += (getMonths() - 1) * DefaultAbsoluteInterval.MILLIS_BY_MONTH;
+        millis += (getDays() - 1) * DefaultAbsoluteInterval.MILLIS_BY_YEAR;
+        millis += getHours() * DefaultAbsoluteInterval.MILLIS_BY_HOUR;
+        millis += getMinutes() * DefaultAbsoluteInterval.MILLIS_BY_MINUTE;
+        millis += getSeconds() * DefaultAbsoluteInterval.MILLIS_BY_SECOND;       
+        millis += getMillis();
+        return new DefaultDuration(millis);    
+    }    
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultRelativeInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultRelativeInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultRelativeInterval.java	(revision 42196)
@@ -0,0 +1,165 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import org.gvsig.timesupport.Chronology;
+import org.gvsig.timesupport.Duration;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.RelativeInterval;
+import org.gvsig.timesupport.Time;
+
+/**
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class DefaultRelativeInterval implements RelativeInterval {
+    private org.joda.time.Interval jodaInterval = null;
+    private Chronology chronology = null;
+
+    DefaultRelativeInterval(long startInstant, long endInstant, Chronology chronology) {
+        super();	
+        this.jodaInterval = new org.joda.time.Interval(startInstant, endInstant, ((DefaultChronology)chronology).getJodaType());
+        this.chronology = chronology;
+    }
+
+    DefaultRelativeInterval(RelativeInstant startInstant, RelativeInstant endInstant, Chronology chronology) {
+        this(startInstant.toMillis(), endInstant.toMillis(), chronology);    
+    }
+
+    DefaultRelativeInterval(Chronology chronology, org.joda.time.Interval interval) {
+        super();    
+        this.jodaInterval = interval;
+        this.chronology = chronology; 
+    }
+
+    public long toDurationMillis() {     
+        return jodaInterval.toDurationMillis();
+    }
+
+    public boolean contains(RelativeInstant instant) {       
+        return jodaInterval.contains(((DefaultRelativeInstant)instant).getJodaType());
+    }
+
+    public boolean isAfter(RelativeInstant instant) {
+        return jodaInterval.isAfter(((DefaultRelativeInstant)instant).getJodaType());
+    }
+
+    public boolean isAfter(RelativeInterval interval) {
+        return jodaInterval.isAfter(((DefaultRelativeInterval)interval).getJodaType());
+    }
+
+    public boolean isBefore(RelativeInstant instant) {
+        return jodaInterval.isBefore(((DefaultRelativeInstant)instant).getJodaType());
+    }
+
+    public boolean isBefore(RelativeInterval interval) {
+        return jodaInterval.isBefore(((DefaultRelativeInterval)interval).getJodaType());
+    }
+
+    public Duration toDuration() {    
+        return new DefaultDuration(toDurationMillis());
+    }
+
+    org.joda.time.Interval getJodaType() {
+        return jodaInterval;
+    }    
+
+    public String toString() {      
+        return jodaInterval.toString();
+    }     
+
+    public boolean equals(Object obj) {      
+        if ((obj == null) || ((Time)obj).isAbsolute() || ((Time)obj).isInstant()){
+            return false;
+        }
+        return ((DefaultRelativeInterval)obj).getJodaType().equals(jodaInterval);
+    }
+
+    public boolean contains(RelativeInterval interval) {       
+        return jodaInterval.contains(((DefaultRelativeInterval)interval).getJodaType());
+    }
+
+    public boolean overlaps(RelativeInterval interval) {
+        return jodaInterval.overlaps(((DefaultRelativeInterval)interval).getJodaType());
+    }     
+
+    public Chronology getChronology() {      
+        return chronology;
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultRelativeInterval(chronology, new org.joda.time.Interval(jodaInterval));
+    } 
+    
+    public RelativeInstant getStart(){
+        return new DefaultRelativeInstant(chronology, jodaInterval.getStart());
+    }
+    
+    public RelativeInstant getEnd(){
+        return new DefaultRelativeInstant(chronology, jodaInterval.getEnd());
+    }
+    
+    public boolean isRelative() {
+        return true;
+    }
+
+    public boolean isAbsolute() {
+        return false;
+    }    
+
+    public boolean isInterval() {
+        return true;
+    }
+
+    public boolean isInstant() { 
+        return false;
+    }
+
+    public boolean contains(Instant instant) {
+        if (instant.isRelative()){
+            return contains((RelativeInstant)instant);
+        }
+        return false;  
+    }
+
+    public boolean intersects(Time time) {
+        if (time.isRelative()){
+            if (time.isInterval()){
+                return intersects((RelativeInterval)time);
+            }else{
+                return contains((RelativeInstant)time);
+            }
+        }
+        return false;
+    }
+
+    public boolean intersects(RelativeInterval relativeInterval){
+        return (this.getStart().isAfter((RelativeInstant)relativeInterval.getStart()) && this.getEnd().isBefore((RelativeInstant)relativeInterval.getStart())) ||
+        (this.getEnd().isBefore((RelativeInstant)relativeInterval.getEnd()) && this.getEnd().isAfter((RelativeInstant)relativeInterval.getEnd()));
+    }
+
+    public Duration toStandardDuration() {
+        return new DefaultDuration(jodaInterval.toDuration());
+    }
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInstantType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInstantType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/DefaultAbsoluteInstantType.java	(revision 42196)
@@ -0,0 +1,55 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultAbsoluteInstantType implements AbsoluteInstantType{
+	private org.joda.time.DateTimeFieldType jodaDateTimeFieldType = null;
+	private int type = 0;
+	
+	DefaultAbsoluteInstantType(int type, org.joda.time.DateTimeFieldType dateTimeFieldType) {
+		super();	
+		this.type = type;
+		this.jodaDateTimeFieldType = dateTimeFieldType;
+	}
+	
+	org.joda.time.DateTimeFieldType getJodaType() {
+		return jodaDateTimeFieldType;
+	}
+
+    public int getType() {      
+        return type;
+    }
+
+    public String getName() {      
+        return jodaDateTimeFieldType.getName();
+    }    
+    
+    public String toString() {      
+        return jodaDateTimeFieldType.toString();
+    }    
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/TimeSupportDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/TimeSupportDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/main/java/org/gvsig/timesupport/impl/TimeSupportDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,114 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.impl;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+import org.gvsig.timesupport.AbsoluteIntervalType;
+import org.gvsig.timesupport.Chronology;
+import org.gvsig.timesupport.DataTypes;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for default implementation initialization and configuration.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class TimeSupportDefaultImplLibrary extends AbstractLibrary {
+       
+    @Override
+    protected void doInitialize() throws LibraryException {
+        TimeSupportLocator.registerManager(DefaultTimeSupportManager.class);
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        //Register the types
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+        dataTypesManager.addtype(DataTypes.INSTANT, "Instant", "Instant", DefaultRelativeInstant.class, null);
+        dataTypesManager.addtype(DataTypes.INTERVAL, "Interval","Interval", DefaultRelativeInterval.class, null);
+        
+        // Do nothing
+        TimeSupportManager timeSupportManager = TimeSupportLocator.getManager();
+        
+        //register AbsoluteInstantType 
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.ERA, org.joda.time.DateTimeFieldType.era()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.YEAR_OF_ERA, org.joda.time.DateTimeFieldType.yearOfEra()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.CENTURY_OF_ERA, org.joda.time.DateTimeFieldType.centuryOfEra()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.YEAR_OF_CENTURY, org.joda.time.DateTimeFieldType.yearOfCentury()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.YEAR, org.joda.time.DateTimeFieldType.year()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.DAY_OF_YEAR, org.joda.time.DateTimeFieldType.dayOfYear()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.MONTH_OF_YEAR, org.joda.time.DateTimeFieldType.monthOfYear()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.DAY_OF_MONTH, org.joda.time.DateTimeFieldType.dayOfMonth()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.WEEKYEAR_OF_CENTURY, org.joda.time.DateTimeFieldType.weekyearOfCentury()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.WEEKYEAR, org.joda.time.DateTimeFieldType.weekyear()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.WEEK_OF_WEEKYEAR, org.joda.time.DateTimeFieldType.weekOfWeekyear()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.DAY_OF_WEEK, org.joda.time.DateTimeFieldType.dayOfWeek()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.HALFDAY_OF_DAY, org.joda.time.DateTimeFieldType.halfdayOfDay()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.HOUR_OF_HALFDAY, org.joda.time.DateTimeFieldType.hourOfHalfday()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.CLOCKHOUR_OF_HALFDAY, org.joda.time.DateTimeFieldType.clockhourOfHalfday()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.CLOCKHOUR_OF_DAY, org.joda.time.DateTimeFieldType.clockhourOfDay()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.HOUR_OF_DAY, org.joda.time.DateTimeFieldType.hourOfDay()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.MINUTE_OF_DAY, org.joda.time.DateTimeFieldType.minuteOfDay()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.MINUTE_OF_HOUR, org.joda.time.DateTimeFieldType.minuteOfHour()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.SECOND_OF_DAY, org.joda.time.DateTimeFieldType.secondOfDay()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.SECOND_OF_MINUTE, org.joda.time.DateTimeFieldType.secondOfMinute()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.MILLIS_OF_DAY, org.joda.time.DateTimeFieldType.millisOfDay()));
+        timeSupportManager.registerAbsoluteInstantType(new DefaultAbsoluteInstantType(AbsoluteInstantType.MILLIS_OF_SECOND, org.joda.time.DateTimeFieldType.millisOfSecond()));
+       
+        //Register period types
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.YEARS, org.joda.time.PeriodType.years()));
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.MONTHS, org.joda.time.PeriodType.months()));
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.WEEKS, org.joda.time.PeriodType.weeks()));
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.DAYS, org.joda.time.PeriodType.days()));
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.HOURS, org.joda.time.PeriodType.hours()));
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.MINUTES, org.joda.time.PeriodType.minutes()));
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.SECONDS, org.joda.time.PeriodType.seconds()));
+        timeSupportManager.registerAbsoluteIntervalType(new DefaultAbsoluteIntervalType(AbsoluteIntervalType.MILLIS, org.joda.time.PeriodType.millis()));
+                              
+        //register Chronologies
+        timeSupportManager.registerChronology(new DefaultChronology(Chronology.BUDDHIST, org.joda.time.chrono.BuddhistChronology.getInstance()));
+        timeSupportManager.registerChronology(new DefaultChronology(Chronology.COPTIC, org.joda.time.chrono.CopticChronology.getInstance()));
+        timeSupportManager.registerChronology(new DefaultChronology(Chronology.GJ, org.joda.time.chrono.GJChronology.getInstance()));
+        timeSupportManager.registerChronology(new DefaultChronology(Chronology.GREGORIAN, org.joda.time.chrono.GregorianChronology.getInstance()));
+        timeSupportManager.registerChronology(new DefaultChronology(Chronology.ISO, org.joda.time.chrono.ISOChronology.getInstance()));
+        timeSupportManager.registerChronology(new DefaultChronology(Chronology.JULIAN, org.joda.time.chrono.JulianChronology.getInstance()));
+        
+        //Sets the default chronology
+        timeSupportManager.setDefaultChronology(Chronology.GREGORIAN);     
+        
+        //Add some string patterns to parse relative instants
+        timeSupportManager.addRelativeInstantPattern("yyyy:MM:dd HH:mm:ss");
+        timeSupportManager.addRelativeInstantPattern("yyyy:MM:dd");
+        timeSupportManager.addRelativeInstantPattern("yyyy/MM/dd HH:mm:ss");
+        timeSupportManager.addRelativeInstantPattern("yyyy/MM/dd");
+        timeSupportManager.addRelativeInstantPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+        timeSupportManager.addRelativeInstantPattern("yyyy-MM-dd HH:mm:ss"); 
+        timeSupportManager.addRelativeInstantPattern("yyyy-MM-dd");   
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.timesupport">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/org.gvsig.timesupport.lib.impl
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.lib/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.lib</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <modules>
+        <module>org.gvsig.timesupport.lib.api</module>
+        <module>org.gvsig.timesupport.lib.impl</module>
+    </modules>
+</project>
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/pom.xml	(revision 42196)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.swing.api</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.swing</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>	        
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>		
+    </dependencies>
+</project>
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.timesupport.swing.api.TimeSupportSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingLibrary.java	(revision 42196)
@@ -0,0 +1,44 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.api;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class TimeSupportSwingLibrary extends AbstractLibrary{
+
+	@Override
+	protected void doInitialize() throws LibraryException{
+	    
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException{
+	    
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingManager.java	(revision 42196)
@@ -0,0 +1,46 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.api;
+
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.api.panel.AnimationBarPanel;
+import org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanel;
+
+/**
+ * <p>This manager is used to instantiate a GetObservation window </p>
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ */
+public interface TimeSupportSwingManager {
+
+	public TimeSelectorPanel createTimeSelectorPanel(Interval interval) throws TimeSupportSwingException;
+	
+	public AnimationBarPanel createAnimationBarPanel(TimeAnimationDataModel dataModel);
+	
+	public AnimationPreferencesPanel createAnimationPreferencesPanel(TimeAnimationDataModel dataModel);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/package.html	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.timesupport package documentation</title>
+</head>
+<body>
+
+	<p>TimeSupport swing library API.</p>
+	
+	<p>
+	It allows to get swing panels to show TimeSupport, and to include them in windows.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/AnimationPreferencesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/AnimationPreferencesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/AnimationPreferencesPanel.java	(revision 42196)
@@ -0,0 +1,53 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.api.panel;
+
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ * Main interface for animation preferences
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public interface AnimationPreferencesPanel extends Component {	
+	
+	/**
+	 * Gets the selected options by the user from the animation panel
+	 * @return
+	 */
+	public TimeAnimationDataModel getOutput();
+	
+	/**
+	 * Gets the ID of the component selected. The ID is a constant defined in this
+	 * interface. This is useful to know which component is throwing an event. 
+	 * @return
+	 */
+	public int getIDSource(Object obj);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/AnimationBarPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/AnimationBarPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/AnimationBarPanel.java	(revision 42196)
@@ -0,0 +1,59 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.api.panel;
+
+import java.awt.event.ActionListener;
+
+import org.gvsig.timesupport.RelativeInstant;
+
+/**
+ * Main panel for animation bar
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public interface AnimationBarPanel {
+	/**
+	 * Adds the listener for de accept button
+	 * @param listener
+	 */
+	public void addButtonsListener(ActionListener listener);
+	
+	/**
+	 * Gets the ID of the component selected. The ID is a constant defined in this
+	 * interface. This is useful to know which component is throwing an event. 
+	 * @return
+	 */
+	public int getIDSource(Object obj);
+	
+	/**
+	 * Resets the status of the buttons
+	 */
+	public void resetButtonsStatus();
+	
+	/**
+	 * Updates slider position using the start date
+	 * @param start
+	 */
+	public void updateSliderPosition(RelativeInstant start);
+	
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/TimeSelectorPanelNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/TimeSelectorPanelNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/TimeSelectorPanelNotification.java	(revision 42196)
@@ -0,0 +1,44 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.api.panel;
+
+import org.gvsig.timesupport.Time;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface TimeSelectorPanelNotification {
+    public static final String CLOSE_WINDOW = "close";
+    public static final String UPDATE_TIME = "update";
+    
+    public Time getTime();
+        
+    /**
+     * Returns the type of this notification, represented by one of the constants defined in this interface.
+     * @return 
+     *          a String containing this notification's type
+     */
+    public String getType();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/TimeSelectorPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/TimeSelectorPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/panel/TimeSelectorPanel.java	(revision 42196)
@@ -0,0 +1,72 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.api.panel;
+
+import java.util.List;
+
+import javax.swing.JPanel;
+
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.observer.Observable;
+
+/**
+ * Abstract class to controls window panels
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * @version $Id$
+ *
+ */
+public abstract class TimeSelectorPanel extends JPanel implements Observable{
+	private static final long serialVersionUID = 6668413815112740122L;
+
+   /**
+     * Intializes the control with an interval. If the interval is absolute,
+     * the control shows absolute intervals and if is relative, the control
+     * only shows relative intervals
+     * @param interval
+     *          the maximum and minimum instants that can be selected
+     */
+    public abstract void initialize(Interval interval);	
+	
+	/*
+	 * Set the selected time
+	 * @param time
+	 *         the time to select
+	 *
+	public abstract void setSeletedTime(Time start);
+	
+	/**
+	 * @return
+	 *         the selected time
+	 *
+	public abstract Time getSelectedTime();*/
+	
+    /**
+     * Set valid instants
+     */
+	public abstract void setInstants(List<Instant> instants);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.timesupport.swing.api;
+
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class TimeSupportSwingException extends BaseException{
+	private static final long serialVersionUID = 6422373549535649966L;
+	private static final String KEY = "time_exception";
+	
+	public TimeSupportSwingException(String message) {
+		super(message, KEY, serialVersionUID);		
+	}
+
+	public TimeSupportSwingException(String message, Throwable cause) {
+		super(message, cause, KEY, serialVersionUID);		
+	}
+	
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api/src/main/java/org/gvsig/timesupport/swing/api/TimeSupportSwingLocator.java	(revision 42196)
@@ -0,0 +1,93 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.api;
+
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+/**
+ * This Locator provides the entry point for the gvSIG 
+ * {@link TimeSupportSwingManager}
+ * @see Locator
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ */
+public class TimeSupportSwingLocator extends AbstractLocator{
+	
+	private static final String LOCATOR_NAME = "SwingSOSDalTimeLocator";
+	/**
+	 * SwingInstallerManager name used by the locator to access the instance
+	 */
+	public static final String SWING_MANAGER_NAME = "SwingSOSDalTimeManager";
+	private static final String SWING_MANAGER_DESCRIPTION = "SwingSOSDalTime of gvSIG";
+
+	/* Singleton */
+	
+	private static final TimeSupportSwingLocator instance = new TimeSupportSwingLocator();
+	
+	public static TimeSupportSwingLocator getInstance()
+	{
+		return instance;
+	}
+	
+	public String getLocatorName() {
+		// TODO Auto-generated method stub
+		return LOCATOR_NAME;
+	}
+
+	/**
+	 * Registers the Class implementing the {@link TimeSupportSwingManager} interface.
+	 *
+	 * @param clazz
+	 *            implementing the SwingManager interface
+	 */
+	@SuppressWarnings(value = { "rawtypes" })
+	public static void registerSwingDalTimeManager(Class clazz) {
+		if(!TimeSupportSwingManager.class.isAssignableFrom(clazz))
+		{
+			throw new IllegalArgumentException(clazz.getName()
+					+ " must implements the SwingDalTimeManager interface");
+		}
+			
+			getInstance().register(SWING_MANAGER_NAME, 
+					SWING_MANAGER_DESCRIPTION,
+					clazz);
+	}
+	
+	/**
+	 * Return a reference to {@link TimeSupportSwingManager}.
+	 *
+	 * @return a reference to SwingDalTimeManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static TimeSupportSwingManager getSwingManager() throws LocatorException {
+		return (TimeSupportSwingManager) getInstance().get(SWING_MANAGER_NAME);
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.api
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/pause.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/pause.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/time.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/time.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/left_bound.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/left_bound.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/right_bound.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/right_bound.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/close.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/play.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/play.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/stop.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/images/stop.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/text.properties	(revision 42196)
@@ -0,0 +1,21 @@
+# Resource bundle texts for the Spanish language locale (es)
+step=Paso
+interval=Intervalo
+windowtime=Ventana de tiempo
+timestep=Paso de tiempo
+visualization=Visualizaci�n
+speed=Velocidad
+loop=Loop
+iterations=Iteraciones
+day=D�a
+month=Mes
+week=Semana
+year=A�o
+hour=Hora
+minute=Minuto
+second=Segundo
+millisecond=Milisegundo
+noloop=No loop
+loop_once=Loop una vez
+loop_n=Loop N veces
+speedofprogress=Velocidad de progreso
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/org/gvsig/timesupport/swing/impl/text_en.properties	(revision 42196)
@@ -0,0 +1,21 @@
+# Resource bundle texts for the English language locale (en)
+step=Step
+interval=Interval
+windowtime=Window time
+timestep=Time step
+visualization=Visualization
+speed=Speed
+loop=Loop
+iterations=Iterations
+day=Day
+month=Month
+week=Week
+year=Year
+hour=Hour
+minute=Minute
+second=Second
+millisecond=Millisecond
+noloop=No loop
+loop_once=Loop once
+loop_n=Loop N
+speedofprogress=Speed of progress
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.timesupport.swing.impl.DefaultTimeSupportSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/DefaultTimeSupportSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/DefaultTimeSupportSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/DefaultTimeSupportSwingManager.java	(revision 42196)
@@ -0,0 +1,62 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl;
+
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingException;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingManager;
+import org.gvsig.timesupport.swing.api.panel.AnimationBarPanel;
+import org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanel;
+import org.gvsig.timesupport.swing.impl.panel.DefaultTimeSliderPanel;
+import org.gvsig.timesupport.swing.impl.panel.animation.AnimationBarPanelImpl;
+import org.gvsig.timesupport.swing.impl.panel.animation.AnimationPreferencesPanelImpl;
+
+/**
+ * Manager for the Swing Timesupport to register all control classes.
+ * 
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ */
+public class DefaultTimeSupportSwingManager implements TimeSupportSwingManager{
+	
+	public TimeSelectorPanel createTimeSelectorPanel(Interval interval) throws TimeSupportSwingException{
+            TimeSelectorPanel panel = new DefaultTimeSliderPanel();
+            panel.initialize(interval);
+            return panel;
+	}
+
+	public AnimationBarPanel createAnimationBarPanel(
+			TimeAnimationDataModel dataModel) {
+		return new AnimationBarPanelImpl(dataModel);
+	}
+
+	public AnimationPreferencesPanel createAnimationPreferencesPanel(
+			TimeAnimationDataModel dataModel) {
+		return new AnimationPreferencesPanelImpl(dataModel);
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/ITemporalComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/ITemporalComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/ITemporalComponent.java	(revision 42196)
@@ -0,0 +1,88 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.components;
+
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.swing.impl.rdv.TimeAdjustmentListener;
+
+/**
+ * Interface to control all type of panels (relative or absolute)
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * @version $Id$
+ *
+ */
+public interface ITemporalComponent{
+
+	public TimeAdjustmentListener getListener();
+	public void setListener(TimeAdjustmentListener listener);
+	/**
+	 * Set the name's label of control and all times 
+	 * @param label
+	 * @param init
+	 * @param lower
+	 * @param upper
+	 */
+	public void setTimes(String label, Time init, Time lower, Time upper);
+	/**
+	 * Set current instant to all controls
+	 * @param date
+	 */
+	public void setCurrentInstant(Time date);
+	/**
+	 * Set start Time to all controls
+	 * @param date
+	 */
+	public void setStartTime(Time date);
+	/**
+	 * Set end Time to all controls
+	 * @param date
+	 */
+	public void setEndTime(Time date);
+	/**
+	 * Get current time
+	 * @return
+	 */
+	public Time getTime();
+	public void setEnabled(boolean enabled);
+	/**
+	 * Reset lower (start) time with first value
+	 */
+	public void resetLowertTime();
+	/**
+     * Reset upper (end) time with first value
+     */
+	public void resetUpperTime();
+	/**
+	 * Reset all value with first values
+	 */
+	public void resetValues();
+	/**
+	 * Return if the control is enabled
+	 * @return
+	 */
+	public boolean isEnabled();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/JTemporalDateText.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/JTemporalDateText.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/JTemporalDateText.java	(revision 42196)
@@ -0,0 +1,301 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.components;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.timesupport.AbsoluteInstant;
+
+/**
+ * Control to manipulate absolute times
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * @version $Id$
+ *
+ */
+public class JTemporalDateText extends JPanel implements DateTextListener  {
+
+    private static final long serialVersionUID = 3122343944275532842L;
+    private JTextField txtYears = null;
+	private JLabel lblYears = null;
+	private JTextField txtMonths = null;
+	private JLabel lblMonths = null;
+	private JTextField txtWeeks = null;
+	private JLabel lblWeeks = null;
+	private JTextField txtDays = null;
+	private JLabel lblDays = null;
+	private JTextField txtHours = null;
+	private JLabel lblHours = null;
+	private JTextField txtMinutes = null;
+	private JLabel lblMinutes = null;
+	private JTextField txtSeconds = null;
+	private JLabel lblSeconds = null;
+	private JTextField txtMillis = null;
+	private JLabel lblMillis = null;
+
+	private DateTextListener listener = null;
+	
+	public JTemporalDateText() {
+		createUI();
+	}
+
+	public void setListener(DateTextListener listener)
+	{
+		this.listener = listener;
+	}
+	
+	public DateTextListener getListener()
+	{
+		return this.listener;
+	}
+	
+	public void setDate(int years, int months, int weeks, int days, int hours,
+			int minutes, int seconds, int millis) {
+		setYears(years);
+		setMonths(months);
+		setWeeks(weeks);
+		setDays(days);
+		setHours(hours);
+		setMinutes(minutes);
+		setSeconds(seconds);
+		setMillis(millis);
+	}
+	
+	public void setInstant(AbsoluteInstant instant)
+	{
+		setDate(instant.getYears(), instant.getMonths(), instant.getWeeks(), instant.getDays(), instant.getHours(), instant.getMinutes(), instant.getSeconds(), instant.getMillis());
+	}
+
+	public void setYears(int years) {
+		if(years >=0)
+			txtYears.setText(Integer.toString(years));
+	}
+	
+	public int getYears() throws NumberFormatException
+	{
+		return Integer.parseInt(txtYears.getText());
+	}
+
+	public void setMonths(int months) {
+		if(months >= 1)
+			txtMonths.setText(Integer.toString(months));
+	}
+	
+	public int getMonthOfYear()throws NumberFormatException
+	{
+		return Integer.parseInt(txtMonths.getText());
+	}
+
+	public void setWeeks(int weeks)
+	{
+		if(weeks >= 1)
+		txtWeeks.setText(Integer.toString(weeks));
+	}
+	
+	public int getWeekOfWeekYear()throws NumberFormatException
+	{
+		return Integer.parseInt(txtWeeks.getText());
+	}
+	
+	public void setDays(int days) {
+		if(days >=1)
+		txtDays.setText(Integer.toString(days));
+	}
+
+	public int getDayOfMonth()throws NumberFormatException
+	{
+		return Integer.parseInt(txtDays.getText());
+	}
+	public void setHours(int hours) {
+		if(hours >= 1)
+		txtHours.setText(Integer.toString(hours));
+	}
+
+	public int getHourOfDay()throws NumberFormatException
+	{
+		return Integer.parseInt(txtHours.getText());
+	}
+	public void setMinutes(int minutes) {
+		if(minutes >= 0)
+			txtMinutes.setText(Integer.toString(minutes));
+	}
+	
+	public int getMinuteOfHour()throws NumberFormatException
+	{
+		return Integer.parseInt(txtMinutes.getText());
+	}
+
+	public void setSeconds(int seconds) {
+		if(seconds >= 0)
+			txtSeconds.setText(Integer.toString(seconds));
+	}
+
+	public int getSecondOfMinute()throws NumberFormatException
+	{
+		return Integer.parseInt(txtSeconds.getText());
+	}
+	public void setMillis(int millis) {
+		if(millis >= 0)
+			txtMillis.setText(Integer.toString(millis));
+	}
+	
+	public int getMillisOfSecond()throws NumberFormatException
+	{
+		return Integer.parseInt(txtMillis.getText());
+	}
+	
+
+	/**** PRIVATE METHODS ****/
+
+	private void createUI() {
+		lblYears = new JLabel(Messages.getText("lbl_sos_years"));
+		txtYears = new JTextField();
+		txtYears.addFocusListener(this);
+		txtYears.addActionListener(this);
+		lblMonths = new JLabel(Messages.getText("lbl_sos_months"));
+		txtMonths = new JTextField();
+		txtMonths.addFocusListener(this);
+		txtMonths.addActionListener(this);
+		lblWeeks = new JLabel(Messages.getText("lbl_sos_weeks"));
+		txtWeeks = new JTextField();
+		txtWeeks.addFocusListener(this);
+		txtMonths.addActionListener(this);
+		lblDays = new JLabel(Messages.getText("lbl_sos_days"));
+		txtDays = new JTextField();
+		txtDays.addFocusListener(this);
+		txtDays.addActionListener(this);
+		lblHours = new JLabel(Messages.getText("lbl_sos_hours"));
+		txtHours = new JTextField();
+		txtHours.addFocusListener(this);
+		txtHours.addActionListener(this);
+		lblMinutes = new JLabel(Messages.getText("lbl_sos_minutes"));
+		txtMinutes = new JTextField();
+		txtMinutes.addFocusListener(this);
+		txtMinutes.addActionListener(this);
+		lblSeconds = new JLabel(Messages.getText("lbl_sos_seconds"));
+		txtSeconds = new JTextField();
+		txtSeconds.addFocusListener(this);
+		txtSeconds.addActionListener(this);
+		lblMillis = new JLabel(Messages.getText("lbl_sos_millis"));
+		txtMillis = new JTextField();
+		txtMillis.addFocusListener(this);
+		txtMillis.addActionListener(this);
+		
+		
+		setLayout(new GridBagLayout());
+		GridBagConstraints constraints = new GridBagConstraints();
+		constraints.gridx = 0;
+		constraints.gridy = 0;
+		constraints.fill = GridBagConstraints.HORIZONTAL;
+		constraints.weightx = 1.0;
+		constraints.weightx = 1.0;
+		constraints.weighty = 1.0;
+		
+		add(lblYears,constraints);
+		constraints.gridx = 2;
+		add(txtYears,constraints);
+		
+		constraints.gridx = 3;
+		add(lblMonths,constraints);
+		constraints.gridx = 4;
+		add(txtMonths,constraints);
+
+		constraints.gridx = 5;
+		add(lblWeeks,constraints);
+		constraints.gridx = 6;
+		add(txtWeeks,constraints);
+		
+		constraints.gridx = 7;
+		add(lblDays,constraints);
+		constraints.gridx = 8;
+		add(txtDays,constraints);
+		
+		constraints.gridx = 9;
+		add(lblHours,constraints);
+		constraints.gridx = 10;
+		add(txtHours,constraints);
+		
+		constraints.gridx = 11;
+		add(lblMinutes,constraints);
+		constraints.gridx = 12;
+		add(txtMinutes,constraints);
+		
+		constraints.gridx = 13;
+		add(lblSeconds,constraints);
+		constraints.gridx = 14;
+		add(txtSeconds,constraints);
+		
+		constraints.gridx = 15;
+		add(lblMillis,constraints);
+		constraints.gridx = 16;
+		add(txtMillis,constraints);
+	}
+	
+	@Override
+	public void setEnabled(boolean enabled)
+	{
+		lblYears.setEnabled(enabled);
+		txtYears.setEnabled(enabled);
+		lblMonths.setEnabled(enabled);
+		txtMonths.setEnabled(enabled);
+		lblWeeks.setEnabled(enabled);
+		txtWeeks.setEnabled(enabled);
+		lblDays.setEnabled(enabled);
+		txtDays.setEnabled(enabled);
+		lblHours.setEnabled(enabled);
+		txtHours.setEnabled(enabled);
+		lblMinutes.setEnabled(enabled);
+		txtMinutes.setEnabled(enabled);
+		lblSeconds.setEnabled(enabled);
+		txtSeconds.setEnabled(enabled);
+		lblMillis.setEnabled(enabled);
+		txtMillis.setEnabled(enabled);
+	}
+
+	public void focusGained(FocusEvent e) {
+	}
+
+	public void focusLost(FocusEvent e) {
+		if(this.listener != null)
+			listener.focusLost(new FocusEvent(this,0));
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if(this.listener != null)
+			listener.actionPerformed(new ActionEvent(this,0,"Enter"));
+	}
+	
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/RelativeTemporalComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/RelativeTemporalComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/RelativeTemporalComponent.java	(revision 42196)
@@ -0,0 +1,469 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.components;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import com.toedter.calendar.JDateChooser;
+import com.toedter.components.JSpinField;
+
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.swing.impl.rdv.TimeAdjustmentListener;
+import org.gvsig.timesupport.swing.impl.rdv.TimeEvent;
+/**
+ * Control to manipulate RelativeInstants / RelativeIntervals
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * @version $Id$
+ *
+ */
+public class RelativeTemporalComponent extends javax.swing.JPanel implements ITemporalComponent,
+		PropertyChangeListener {
+	private static final long serialVersionUID = -4793729838825841885L;
+
+	private static TimeSupportManager timeSupportManager = TimeSupportLocator
+			.getManager();
+
+	private JDateChooser jdDateChooser = null;
+	public static int width = 300;
+	public static int height = 40;
+	private JSpinField jsfHours = null;
+	private JSpinField jsfMinutes = null;
+	private JSpinField jsfSeconds = null;
+	private JSpinField jsfMillis = null;
+	private RelativeInstant lowerTime = null;
+	private RelativeInstant upperTime = null;
+	private RelativeInstant initTime = null;
+	private TimeAdjustmentListener listener = null;
+	private JLabel lblLabel = null;
+	private String lastLabel = null;
+
+	public RelativeTemporalComponent() {
+		super();
+		initComponents();
+	}
+
+	public TimeAdjustmentListener getListener() {
+		return listener;
+	}
+
+	public void setListener(TimeAdjustmentListener listener) {
+		this.listener = listener;
+	}
+
+	/**
+	 * Initializes the control with the parameter values
+	 * 
+	 * @param init
+	 *            Date initial for the control
+	 * @param lower
+	 *            Lower limit
+	 * @param upper
+	 *            Upper Limit
+	 */
+	public void setTimes(String label, Time init, Time lower,
+	    Time upper) {
+		lastLabel = label;
+		lowerTime = (RelativeInstant) lower;
+		upperTime = (RelativeInstant) upper;
+		initTime = (RelativeInstant) init;
+		setMinInstantToCalendar(lowerTime);
+		setMaxInstantToCalendar(upperTime);
+		Date date = new Date(initTime.getYear()-1900, initTime.getMonthOfYear()-1, initTime.getDayOfMonth());
+		setInstantToCalendar(initTime);
+		setHours(initTime.getHourOfDay());
+		setMinutes(initTime.getMinuteOfHour());
+		setSeconds(initTime.getSecondOfMinute());
+		setMilis(initTime.getMillisOfSecond());
+		lblLabel.setText(label + " " + initTime.toString());
+	}
+
+	private void setInstantToCalendar(RelativeInstant time)
+	{
+	    getJdDateChooser().setDate(new Date(time.getYear()-1900, time.getMonthOfYear()-1, time.getDayOfMonth()));
+	}
+	
+	private void setMaxInstantToCalendar(RelativeInstant time)
+	{
+	    getJdDateChooser().setMaxSelectableDate(new Date(time.getYear()-1900, time.getMonthOfYear()-1, time.getDayOfMonth()));
+	}
+	
+	private void setMinInstantToCalendar(RelativeInstant time)
+	{
+	    getJdDateChooser().setMinSelectableDate(new Date(time.getYear()-1900, time.getMonthOfYear()-1, time.getDayOfMonth()));
+	}
+	
+	/**
+	 * Set the hours, minutes and seconds
+	 */
+	public void setTime(int hours, int minutes, int seconds, int milis) {
+		setHours(hours);
+		setMinutes(minutes);
+		setSeconds(seconds);
+		setMilis(milis);
+	}
+
+	/**
+	 * Set hours
+	 * 
+	 * @params hours
+	 */
+	public void setHours(int hours) {
+		// if(hours >= 0 && hours < 24)
+		if (hours >= getJsfHours().getMinimum()
+				&& hours <= getJsfHours().getMaximum())
+			getJsfHours().setValue(hours);
+	}
+
+	/**
+	 * Set minutes
+	 * 
+	 * @param minutes
+	 */
+	public void setMinutes(int minutes) {
+		// if(minutes >= 0 && minutes < 59)
+		if (minutes >= getJsfMinutes().getMinimum()
+				&& minutes <= getJsfMinutes().getMaximum())
+			getJsfMinutes().setValue(minutes);
+	}
+
+	/**
+	 * Set seconds
+	 * 
+	 * @param seconds
+	 */
+	public void setSeconds(int seconds) {
+		// if(seconds >= 0 && seconds < 59)
+		if (seconds >= getJsfSeconds().getMinimum()
+				&& seconds <= getJsfSeconds().getMaximum())
+			getJsfSeconds().setValue(seconds);
+	}
+
+	/**
+	 * Set milis
+	 * 
+	 * @param milis
+	 */
+	public void setMilis(int milis) {
+		if (milis >= getJsfMillis().getMinimum()
+				&& milis <= getJsfMillis().getMaximum())
+			getJsfMillis().setValue(milis);
+	}
+
+	/**
+	 * Get hours
+	 * 
+	 * @return
+	 */
+	public int getHours() {
+		return getJsfHours().getValue();
+	}
+
+	/**
+	 * Get minutes
+	 * 
+	 * @return
+	 */
+	public int getMinutes() {
+		return getJsfMinutes().getValue();
+	}
+
+	/**
+	 * Get seconds
+	 * 
+	 * @return
+	 */
+	public int getSeconds() {
+		return getJsfSeconds().getValue();
+	}
+
+	/**
+	 * Get milis
+	 * 
+	 * @return
+	 */
+	public int getMilis() {
+		return getJsfMillis().getValue();
+	}
+
+	public void setCurrentInstant(Time time) {
+		RelativeInstant date = (RelativeInstant) time;
+		setInstantToCalendar(date);
+		setTime(date.getHourOfDay(), date.getMinuteOfHour(),
+				date.getSecondOfMinute(), date.getMillisOfSecond());
+	}
+
+	public void setStartTime(Time date) {
+		setMinInstantToCalendar((RelativeInstant)date);
+
+	}
+
+	public void setEndTime(Time date) {
+	    setMaxInstantToCalendar((RelativeInstant)date);
+	}
+
+	/**
+	 * Returns the date and time selected by the user
+	 * 
+	 * @return
+	 */
+	public Time getTime() {
+		// Set time
+		Date temp = getJdDateChooser().getDate();
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(temp);
+		RelativeInstant date = timeSupportManager.createRelativeInstant(
+				calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1,
+				calendar.get(Calendar.DAY_OF_MONTH), getJsfHours().getValue(),
+				getJsfMinutes().getValue(), getJsfSeconds().getValue(),
+				getJsfMillis().getValue());
+
+		return date;
+	}
+
+	/**
+	 * Property change listener implementation for editing controls. Update
+	 * slider position according to control values. It uses a flag to avoid
+	 * infinite recursive actualization.
+	 */
+	public void propertyChange(PropertyChangeEvent evt) {
+		// TODO Auto-generated method stub
+		try { // this try is for the daylight saving (it creates exceptions)
+			//updateLimits(); 
+	        if (listener != null) {
+	        	TimeEvent t = new TimeEvent(this);
+	        	listener.timeChanged(t);
+	            listener.rangeChanged(t);
+	        }
+		} catch (IllegalArgumentException e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		getJdDateChooser().setEnabled(enabled);
+		getJsfHours().setEnabled(enabled);
+		getJsfMinutes().setEnabled(enabled);
+		getJsfSeconds().setEnabled(enabled);
+		getJsfMillis().setEnabled(enabled);
+	}
+
+	public void resetLowertTime() {
+		setMinInstantToCalendar(lowerTime);
+		setInstantToCalendar((RelativeInstant)getTime());
+
+	}
+
+	public void resetUpperTime() {
+	    setMaxInstantToCalendar(upperTime);
+
+	}
+
+	public void resetValues() {
+		setTimes(lastLabel, this.initTime, this.lowerTime,
+				this.upperTime);
+	}
+
+	/*
+	 * 
+	 * PRIVATE REGION
+	 */
+
+	private void initComponents() {
+
+		setLayout(new BorderLayout());
+		lblLabel = new JLabel();
+		add(lblLabel, BorderLayout.NORTH);
+
+		getJdDateChooser().addPropertyChangeListener(this);
+
+		getJsfHours().setMaximum(23);
+		getJsfHours().setMinimum(0);
+		getJsfHours().setName("jSpinFieldHour");
+		getJsfHours().addPropertyChangeListener(this);
+
+		getJsfMinutes().setMaximum(59);
+		getJsfMinutes().setMinimum(0);
+		getJsfMinutes().setName("jSpinFieldMinute");
+		getJsfMinutes().addPropertyChangeListener(this);
+
+		getJsfSeconds().setMaximum(59);
+		getJsfSeconds().setMinimum(0);
+		getJsfSeconds().setName("jSpinFieldSecond");
+		getJsfSeconds().addPropertyChangeListener(this);
+
+		getJsfMillis().setMaximum(999);
+		getJsfMillis().setMinimum(0);
+		getJsfMillis().setName("jSpinFieldMillis");
+		getJsfMillis().addPropertyChangeListener(this);
+
+		add(getCalendarLayout(), BorderLayout.CENTER);
+	}
+
+	private JPanel getCalendarLayout() {
+		/*
+		 * JPanel panel = new JPanel(); panel.setLayout(new FlowLayout());
+		 * panel.add(getJdDateChooser());
+		 * 
+		 * /*JPanel panelHours = new JPanel(); panelHours.setLayout(new
+		 * GridLayout()); panelHours.add(getJsfHours());
+		 * panelHours.add(getJsfMinutes()); panel.add(getJsfSeconds());
+		 * panelHours.add(getJsfMillis());
+		 * 
+		 * panel.add(panelHours); panel.add(getJsfHours());
+		 * panel.add(getJsfMinutes()); panel.add(getJsfSeconds());
+		 * panel.add(getJsfMillis()); return panel;
+		 */
+		JPanel panel = new JPanel();
+		panel.setLayout(new GridBagLayout());
+
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        gridBagConstraints.insets = new Insets(0, 5, 0, 0);
+		panel.add(getJdDateChooser(), gridBagConstraints);
+
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		panel.add(getJsfHours(), gridBagConstraints);
+
+		gridBagConstraints.gridx = 2;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		panel.add(getJsfMinutes(), gridBagConstraints);
+
+		gridBagConstraints.gridx = 3;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		panel.add(getJsfSeconds(), gridBagConstraints);
+
+		gridBagConstraints.gridx = 4;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		panel.add(getJsfMillis(), gridBagConstraints);
+
+		return panel;
+	}
+
+	private JDateChooser getJdDateChooser() {
+		if (jdDateChooser == null)
+			jdDateChooser = new JDateChooser();
+		return jdDateChooser;
+	}
+
+	private JSpinField getJsfHours() {
+		if (jsfHours == null) {
+			jsfHours = new JSpinField();
+			jsfHours.addPropertyChangeListener(this);
+		}
+		return jsfHours;
+	}
+
+	private JSpinField getJsfMinutes() {
+		if (jsfMinutes == null)
+			jsfMinutes = new JSpinField();
+		return jsfMinutes;
+	}
+
+	private JSpinField getJsfSeconds() {
+		if (jsfSeconds == null)
+			jsfSeconds = new JSpinField();
+		return jsfSeconds;
+	}
+
+	private JSpinField getJsfMillis() {
+		if (jsfMillis == null)
+			jsfMillis = new JSpinField();
+		return jsfMillis;
+	}
+
+	/**
+	 * Update the limits of the JSpinFields to max and min data values
+	 */
+	private void updateLimits() {
+	    RelativeInstant maxDate = timeSupportManager.createRelativeInstant(getJdDateChooser()
+				.getMaxSelectableDate());
+	    RelativeInstant minDate = timeSupportManager.createRelativeInstant(getJdDateChooser()
+				.getMinSelectableDate());
+	    RelativeInstant date = ((RelativeInstant)getTime());
+		if (date.compareTo(maxDate) >= 0) {
+			getJsfHours().setMaximum(maxDate.getHourOfDay());
+			getJsfMinutes().setMaximum(maxDate.getMinuteOfHour());
+			getJsfSeconds().setMaximum(maxDate.getSecondOfMinute());
+			getJsfMillis().setMaximum(maxDate.getMillisOfSecond());
+		} else if (date.compareTo(minDate) <= 0) {
+			getJsfHours().setMinimum(minDate.getHourOfDay());
+			getJsfMinutes().setMinimum(minDate.getMinuteOfHour());
+			getJsfSeconds().setMinimum(minDate.getSecondOfMinute());
+			getJsfMillis().setMinimum(minDate.getMillisOfSecond());
+		} else if (date.compareTo(lowerTime) <= 0) {
+			getJsfHours().setMinimum(lowerTime.getHourOfDay());
+			getJsfMinutes().setMinimum(lowerTime.getMinuteOfHour());
+			getJsfSeconds().setMinimum(lowerTime.getSecondOfMinute());
+			getJsfMillis().setMinimum(lowerTime.getMillisOfSecond());
+		} else if (date.compareTo(upperTime) >= 0) {
+			getJsfHours().setMaximum(upperTime.getHourOfDay());
+			getJsfMinutes().setMaximum(upperTime.getMinuteOfHour());
+			getJsfSeconds().setMaximum(upperTime.getSecondOfMinute());
+			getJsfMillis().setMaximum(upperTime.getMillisOfSecond());
+		} else {
+			getJsfHours().setMaximum(23);
+			getJsfMinutes().setMaximum(59);
+			getJsfSeconds().setMaximum(59);
+			getJsfMillis().setMaximum(999);
+
+			getJsfHours().setMinimum(0);
+			getJsfMinutes().setMinimum(0);
+			getJsfSeconds().setMinimum(0);
+			getJsfMillis().setMinimum(0);
+		}
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/AbsoluteTemporalComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/AbsoluteTemporalComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/AbsoluteTemporalComponent.java	(revision 42196)
@@ -0,0 +1,250 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.components;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusEvent;
+import java.util.ArrayList;
+
+import javax.swing.BoxLayout;
+import javax.swing.JLabel;
+
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteInstantType;
+import org.gvsig.timesupport.AbsoluteInstantTypeNotRegisteredException;
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.swing.impl.rdv.TimeAdjustmentListener;
+import org.gvsig.timesupport.swing.impl.rdv.TimeEvent;
+/**
+ * Panel to manipulate AbsoluteInstants / AbsoluteIntervals
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * @version $Id$
+ *
+ */
+public class AbsoluteTemporalComponent extends javax.swing.JPanel implements ITemporalComponent, DateTextListener {
+    private static final long serialVersionUID = 4486793564004694709L;
+    private static TimeSupportManager timeSupportManager = TimeSupportLocator
+	.getManager();
+	private TimeAdjustmentListener listener;
+	private AbsoluteInstant initTime;
+	private JTemporalDateText jDateText;
+	private JLabel lblLabel = null;
+	
+	public AbsoluteTemporalComponent()
+	{
+		super();
+		initComponents();
+	}
+	
+	public TimeAdjustmentListener getListener() {
+		// TODO Auto-generated method stub
+		return listener;
+	}
+	
+	public void setListener(TimeAdjustmentListener listener) {
+		// TODO Auto-generated method stub
+		this.listener = listener;
+	}
+
+	public void setTimes(String label, Time init, Time lower, Time upper) {
+		// TODO Auto-generated method stub
+		initTime = (AbsoluteInstant) init;
+		getTemporalDateText().setInstant(initTime);
+		getLabel().setText(label + " " + initTime.toString());
+	}
+
+	public void setCurrentInstant(Time date) {
+		// TODO Auto-generated method stub
+		getTemporalDateText().setInstant((AbsoluteInstant)date);
+	}
+
+	public void setStartTime(Time date) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void setEndTime(Time date) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public Time getTime() {
+		// TODO Auto-generated method stub
+//		int [] types = new int[8];
+//		int [] values = new int[8];
+//		
+//		types[0] = AbsoluteInstantType.YEAR;
+//		values[0] = getTemporalDateText().getYears();
+//		types[1] = AbsoluteInstantType.MONTH_OF_YEAR;
+//		values[1] = getTemporalDateText().getMonthOfYear();
+//		types[2] = AbsoluteInstantType.WEEK_OF_WEEKYEAR;
+//		values[2] = getTemporalDateText().getWeekOfWeekYear();
+//		types[3] = AbsoluteInstantType.DAY_OF_MONTH;
+//		values[3] = getTemporalDateText().getDayOfMonth();
+//		types[4] = AbsoluteInstantType.HOUR_OF_DAY;
+//		values[4] = getTemporalDateText().getHourOfDay();
+//		types[5] = AbsoluteInstantType.MINUTE_OF_HOUR;
+//		values[5] = getTemporalDateText().getMinuteOfHour();
+//		types[6] = AbsoluteInstantType.SECOND_OF_MINUTE;
+//		values[6] = getTemporalDateText().getSecondOfMinute();
+//		types[7] = AbsoluteInstantType.MILLIS_OF_SECOND;
+//		values[7] = getTemporalDateText().getMillisOfSecond();
+		
+		ArrayList<Integer> types = new ArrayList<Integer>();
+		ArrayList<Integer> values = new ArrayList<Integer>();
+		
+		try
+		{
+		values.add(getTemporalDateText().getYears());
+		types.add(AbsoluteInstantType.YEAR);
+		}catch(NumberFormatException e){
+		}		
+				
+		try
+		{
+		values.add(getTemporalDateText().getWeekOfWeekYear());
+		types.add(AbsoluteInstantType.MONTH_OF_YEAR);
+		}catch(NumberFormatException e){
+		}	
+		try
+		{
+		values.add(getTemporalDateText().getMonthOfYear());
+		types.add(AbsoluteInstantType.WEEK_OF_WEEKYEAR);
+		}catch(NumberFormatException e){
+		}	
+		try
+		{
+		values.add(getTemporalDateText().getDayOfMonth());
+		types.add(AbsoluteInstantType.DAY_OF_MONTH);
+		}catch(NumberFormatException e){
+		}		
+		try
+		{
+		values.add(getTemporalDateText().getHourOfDay());
+		types.add(AbsoluteInstantType.HOUR_OF_DAY);
+		}catch(NumberFormatException e){
+		}		
+		try
+		{
+		values.add(getTemporalDateText().getMinuteOfHour());
+		types.add(AbsoluteInstantType.MINUTE_OF_HOUR);
+		}catch(NumberFormatException e){
+		}		
+		try
+		{
+		values.add(getTemporalDateText().getSecondOfMinute());
+		types.add(AbsoluteInstantType.SECOND_OF_MINUTE);
+		}catch(NumberFormatException e){
+		}
+		try
+		{
+		values.add(getTemporalDateText().getMillisOfSecond());
+		types.add(AbsoluteInstantType.MILLIS_OF_SECOND);
+		}catch(NumberFormatException e){
+		}		
+		int [] vTypes = new int[types.size()];
+		int [] vValues = new int[types.size()];
+		for(int i = 0; i < vTypes.length; i++)
+		{
+			vTypes[i] = (Integer) types.get(i);
+			vValues[i] = (Integer) values.get(i);
+		}
+		
+		try {
+			return timeSupportManager.createAbsoluteInstant(vTypes,vValues);
+		} catch (AbsoluteInstantTypeNotRegisteredException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return null;
+		}
+		
+	}
+
+	public void resetLowertTime() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void resetUpperTime() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void resetValues() {
+		// TODO Auto-generated method stub
+		getTemporalDateText().setInstant(initTime);
+	}
+	
+	public void focusGained(FocusEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void focusLost(FocusEvent e) {
+		// TODO Auto-generated method stub
+		if(listener != null)
+		{
+			listener.timeChanged(new TimeEvent(this));
+		}
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		// TODO Auto-generated method stub
+		if(listener != null)
+		{
+			listener.timeChanged(new TimeEvent(this));
+		}
+		
+	}
+	/*PRIVATE METHODS*/
+	
+	private void initComponents()
+	{
+		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+		add(getLabel());
+		getTemporalDateText().setListener(this);
+		add(getTemporalDateText());
+	}
+	
+	private JTemporalDateText getTemporalDateText()
+	{
+		if(jDateText == null)
+			jDateText = new JTemporalDateText();
+		return jDateText;
+	}
+
+	private JLabel getLabel()
+	{
+		if(lblLabel == null)
+			lblLabel = new JLabel();
+		return lblLabel;
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/DateTextListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/DateTextListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/DateTextListener.java	(revision 42196)
@@ -0,0 +1,34 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.components;
+
+import java.awt.event.ActionListener;
+import java.awt.event.FocusListener;
+
+public interface DateTextListener extends FocusListener , ActionListener{
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/InstantComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/InstantComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/components/InstantComparator.java	(revision 42196)
@@ -0,0 +1,51 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.components;
+
+import java.util.Comparator;
+
+import org.gvsig.timesupport.Instant;
+
+/**
+ * Comparator to sort instants list
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * @version $Id$
+ *
+ */
+public class InstantComparator implements Comparator<Instant>{
+
+    public int compare(Instant o1, Instant o2) {
+        // TODO Auto-generated method stub
+        if(o1.isBefore(o2))
+            return -1;
+        else if(o1.isAfter(o2))
+            return 1;
+        else
+            return 0;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeEvent.java	(revision 42196)
@@ -0,0 +1,55 @@
+/*
+ * RDV
+ * Real-time Data Viewer
+ * http://rdv.googlecode.com/
+ * 
+ * Copyright (c) 2005-2007 University at Buffalo
+ * Copyright (c) 2005-2007 NEES Cyberinfrastructure Center
+ * Copyright (c) 2008 Palta Software
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ * 
+ * $URL: https://rdv.googlecode.com/svn/branches/RDV-1.9/src/org/rdv/ui/TimeEvent.java $
+ * $Revision: 1149 $
+ * $Date: 2008-07-03 10:23:04 -0400 (Thu, 03 Jul 2008) $
+ * $Author: jason@paltasoftware.com $
+ */
+
+package org.gvsig.timesupport.swing.impl.rdv;
+
+import java.awt.AWTEvent;
+
+/**
+ * An event emitted by objects that are time adjustable.
+ * 
+ * @author Jason P. Hanley
+ */
+public class TimeEvent extends AWTEvent {
+
+  /** serialization version identifier */
+  private static final long serialVersionUID = -1705882505634651086L;
+  /**
+   * Constructs a TimeEvent object.
+   * 
+   * @param source  the source of the time event
+   */
+  public TimeEvent(Object source) {
+    super(source, 0);
+  }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeSlider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeSlider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeSlider.java	(revision 42196)
@@ -0,0 +1,1362 @@
+/*
+ * RDV
+ * Real-time Data Viewer
+ * http://rdv.googlecode.com/
+ * 
+ * Copyright (c) 2005-2007 University at Buffalo
+ * Copyright (c) 2005-2007 NEES Cyberinfrastructure Center
+ * Copyright (c) 2008 Palta Software
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ * 
+ * $URL: http://rdv.googlecode.com/svn/trunk/src/org/rdv/ui/TimeSlider.java $
+ * $Revision: 1149 $
+ * $Date: 2008-07-03 16:23:04 +0200 (jue 03 de jul de 2008) $
+ * $Author: jason@paltasoftware.com $
+ */
+
+package org.gvsig.timesupport.swing.impl.rdv;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Insets;
+import java.awt.RenderingHints;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JToolTip;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteInstantType;
+import org.gvsig.timesupport.AbsoluteInstantTypeNotRegisteredException;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+
+/**
+ * A component that lets the user select a specific time or time range between a
+ * bounded time interval by sliding knobs along a timeline. It also allows one
+ * to display an event indicator at a specific time in the time line. (Modified by Pablo Viciano)
+ * 
+ * @author Jason P. Hanley
+ */
+public class TimeSlider extends JComponent implements MouseListener,
+MouseMotionListener {
+    public static final long MILLIS_BY_SECOND = 1000;
+    public static final long MILLIS_BY_MINUTE = MILLIS_BY_SECOND * 60;
+    public static final long MILLIS_BY_HOUR = MILLIS_BY_MINUTE * 60;
+    public static final long MILLIS_BY_DAY = MILLIS_BY_HOUR * 24;
+    public static final long MILLIS_BY_WEEK = MILLIS_BY_DAY * 7;
+    public static final long MILLIS_BY_MONTH = MILLIS_BY_DAY * 30;
+    public static final long MILLIS_BY_YEAR = MILLIS_BY_DAY * 365;
+
+    private static final Logger LOG = LoggerFactory.getLogger(TimeSlider.class);
+
+    private static TimeSupportManager timeSupportManager = TimeSupportLocator.getManager();
+
+    boolean isAbsolute = false;
+
+    /** serialization version identifier */
+    private static final long serialVersionUID = 2429052022677466231L;
+
+    /** The minimum time. */
+    protected double minimum;
+
+    /** The start of the selected time range. */
+    protected double start;
+
+    /** The selected time. */
+    protected double value;
+
+    /** The end of the selected time range. */
+    protected double end;
+
+    /** The maximum time. */
+    protected double maximum;
+
+    /** Indicate if the time value may be changed from the UI. */
+    private boolean valueChangeable;
+
+    /** Indicates if a time range may be changed from the UI. */
+    private boolean rangeChangeable;
+
+    /** Indicates if the time value is adjusting. */
+    private boolean isAdjusting;
+
+    /** The starting offset of a click (for buttons). */
+    private int clickStart;
+
+    /**
+     * List of event markers. * protected final List<EventMarker> markers;
+     * 
+     * /** List of valid time ranges.
+     */
+    protected final List<TimeRange> timeRanges;
+
+    /** List of valid times ranges, taking into account the minimum and maximum */
+    protected final List<TimeRange> actualTimeRanges;
+
+    /** List of time adjustment listeners. */
+    private final List<TimeAdjustmentListener> adjustmentListeners;
+
+    /** The button used to indicate the start time. */
+    protected final JButton startButton;
+
+    /** The button used to indicate the time. */
+    protected final JButton valueButton;
+
+    /** The button used to indicate the end time. */
+    protected final JButton endButton;
+
+    protected boolean right;
+    protected boolean left;
+    /**
+     * Creates a time slider with the maximum available range.
+     */
+    public TimeSlider(boolean isAbsolute) {
+        super();
+        this.isAbsolute = isAbsolute;    
+
+        minimum = 0;
+        start = 0;
+        value = 0;
+        end = Double.MAX_VALUE;
+        maximum = Double.MAX_VALUE;
+
+        right = true;
+        left = true;
+
+        rangeChangeable = true;
+
+        isAdjusting = false;
+
+        timeRanges = new ArrayList<TimeRange>();
+
+        actualTimeRanges = new ArrayList<TimeRange>();
+        calculateActualTimeRanges();
+
+        adjustmentListeners = new ArrayList<TimeAdjustmentListener>();
+
+        setBorder(null);
+        setLayout(null);
+
+        setToolTipText("");
+
+        addMouseListener(this);
+      
+          valueButton = new JButton() {
+            /** serialization version identifier */
+            private static final long serialVersionUID = 8729851598067678522L;
+
+            public JToolTip createToolTip() {
+                return TimeSlider.this.createToolTip();
+            }
+
+            public String getToolTipText(MouseEvent me) {
+                return TimeSlider.this.getToolTipText(me);
+            }
+        };
+        valueButton.setToolTipText("");
+        valueButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        valueButton.setBorder(null);
+        valueButton.addMouseMotionListener(this);
+        valueButton.addMouseListener(this);        
+        try {
+            BufferedImage bufferedImage = ImageIO.read(getClass().getClassLoader()
+                .getResource("org/gvsig/timesupport/swing/impl/images/time.png"));
+            valueButton.setIcon(new ImageIcon(getScaledImage(bufferedImage, 7, 7)));
+        } catch (IOException e) {
+            valueButton.setBackground(Color.BLACK);
+        }
+        add(valueButton);
+
+        startButton = new JButton();
+        startButton.setBorder(null);
+        startButton.addMouseListener(this);
+        startButton.addMouseMotionListener(this);
+        try {
+            BufferedImage bufferedImage = ImageIO.read(getClass().getClassLoader()
+                .getResource("org/gvsig/timesupport/swing/impl/images/left_bound.png"));
+            startButton.setIcon(new ImageIcon(getScaledImage(bufferedImage, 6, 11)));
+        } catch (IOException e) {
+            startButton.setBackground(Color.BLACK);
+        }
+        add(startButton);
+
+        endButton = new JButton(); 
+        endButton.setBorder(null);
+        endButton.addMouseListener(this);
+        endButton.addMouseMotionListener(this);
+        try {
+            BufferedImage bufferedImage = ImageIO.read(getClass().getClassLoader()
+                .getResource("org/gvsig/timesupport/swing/impl/images/right_bound.png"));
+            endButton.setIcon(new ImageIcon(getScaledImage(bufferedImage, 6, 11)));
+        } catch (IOException e) {
+            endButton.setBackground(Color.BLACK);
+        }
+        add(endButton);
+
+        setValueChangeable(true);
+    }
+
+    private Image getScaledImage(BufferedImage image, int w, int h)  
+    {   
+        double scaleW = w/image.getWidth();
+        double scaleH = h/image.getHeight();
+        BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);  
+        Graphics2D g2 = bi.createGraphics();  
+        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,  
+            RenderingHints.VALUE_INTERPOLATION_BILINEAR);  
+        AffineTransform at = AffineTransform.getScaleInstance(scaleW, scaleH);  
+        g2.drawRenderedImage(image, at);  
+        g2.dispose();  
+        return bi;  
+    } 
+
+    /**
+     * Sets if the time value of the slider can be changed by the UI element.
+     * 
+     * @param changeable
+     *            if true, the value can be changed, false otherwise.
+     */
+    public void setValueChangeable(boolean changeable) {
+        if (valueChangeable == changeable) {
+            return;
+        }
+
+        valueChangeable = changeable;
+
+        valueButton.setEnabled(valueChangeable);
+
+        if (valueChangeable) {
+            addMouseListener(this);
+            valueButton.addMouseListener(this);
+            valueButton.addMouseMotionListener(this);
+            valueButton.setVisible(true);
+            startButton.setCursor(null);
+            endButton.setCursor(null);
+        } else {
+            removeMouseListener(this);
+            valueButton.removeMouseListener(this);
+            valueButton.removeMouseMotionListener(this);
+            valueButton.setVisible(false);
+            startButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+            endButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        }
+    }
+
+    public boolean getValueChangeable()
+    {
+        return valueChangeable;
+    }
+
+    /**
+     * Set if the value is visible in the slider UI.
+     * 
+     * @param visible
+     *            if true the value is shown, if false the value is not shown
+     */
+    public void setValueVisible(boolean visible) {
+        if (valueButton.isVisible() == visible) {
+            return;
+        }
+
+        valueButton.setVisible(visible);
+    }
+
+    /**
+     * Set if a time range can be changed via the UI elements
+     * 
+     * @param changeable
+     *            if true, the time range can be changed, false otherwsie
+     */
+    public void setRangeChangeable(boolean changeable) {
+        if (rangeChangeable == changeable) {
+            return;
+        }
+
+        rangeChangeable = changeable;
+
+        startButton.setEnabled(rangeChangeable);
+        endButton.setEnabled(rangeChangeable);
+
+        if (rangeChangeable) {
+            startButton.addMouseMotionListener(this);
+            endButton.addMouseMotionListener(this);
+        } else {
+            startButton.removeMouseMotionListener(this);
+            endButton.removeMouseMotionListener(this);
+        }
+    }
+
+    /**
+     * Gets the time value set by the slider.
+     * 
+     * @return the time set by the slider
+     */
+    private double getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the time value of the slider.
+     * 
+     * @param value
+     *            the time value to set
+     */
+    private void setValue(double value) {
+        if (this.value != value) {
+            this.value = value;
+            doLayout();
+            fireValueChanged();
+        }
+    }
+
+    public void moveRight(boolean right)
+    {
+        this.right = right;
+    }
+
+    public void moveLeft(boolean left)
+    {
+        this.left = left;
+    }
+
+    /**
+     * Sets the current time of the slider
+     * @param current
+     */
+    public void setCurrentInstant(Instant currentInstant)
+    {
+        long millis = toMillis(currentInstant);
+        if(millis >= this.minimum && millis <= this.maximum)
+            setValue(millis);
+        else if(millis < this.minimum)
+            setValue(this.minimum);
+        else
+            setValue(this.maximum);
+    }
+
+    /**
+     * Set the start DateTime of the slider
+     * @param start
+     */
+    public void setStartInstant(Instant startInstant)
+    {
+        double millis = toMillis(startInstant);
+        if(millis > this.minimum && millis <= this.end)
+            setStart(millis);
+        else if(millis > this.end)
+            setStart(this.end);
+        else
+            setStart(this.minimum);
+    }
+
+    /**
+     * Sets the end DateTime of the slider
+     * @param end
+     */
+    public void setEndInstant(Instant endInstant)
+    {
+        double millis = toMillis(endInstant);
+        if(millis < this.maximum && millis >= this.start)
+            setEnd(millis);
+        else if(millis < this.start)
+            setEnd(this.start);
+        else
+            setEnd(this.maximum);
+    }
+
+    public void setValues(Instant minimunInstant, Instant maximumInstant) {        
+        setValues(toMillis(minimunInstant), toMillis(maximumInstant));
+    }   
+
+    /**
+     * Sets the maximum and minimum values.
+     * 
+     * @param minimum
+     *            the minimum allowed time value
+     * @param maximum
+     *            the maximum allowed time value
+     */
+    private void setValues(long minimum, long maximum) {
+        setMinimum(minimum);
+        setMaximum(maximum);
+        setValue(this.minimum);
+    }
+
+    /**
+     * Sets the time value, and the maximum and minimum time values.
+     * 
+     * @param value
+     *            the time value
+     * @param minimum
+     *            the minimum allowed time value
+     * @param maximum
+     *            the maximum allowed time value
+     *
+    private void setValues(double value, double minimum, double maximum) {
+        setMinimum(minimum);
+        setMaximum(maximum);
+        setValue(value);
+    }
+
+    /**
+     * Sets the maximum and minimum time value, and the time range.
+     * 
+     * @param minimum
+     *            the minimum allowed time value
+     * @param maximum
+     *            the maximum allowed time value
+     * @param start
+     *            the start of the time range
+     * @param end
+     *            the end of the time range
+     *
+    private void setValues(long minimum, long maximum, long start, long end) {
+        setStart(start);
+        setEnd(end);
+        setMinimum(minimum);
+        setMaximum(maximum);
+    }
+
+    /**
+     * Sets the maximum and minimum time value, the time range, and the time
+     * value.
+     * 
+     * @param value
+     *            the time value
+     * @param minimum
+     *            the minimum allowed time value
+     * @param maximum
+     *            the maximum allowed time value
+     * @param start
+     *            the start of the time range
+     * @param end
+     *            the end of the time range
+     *
+    private void setValues(double value, double minimum, double maximum,
+        double start, double end) {
+        setStart(start);
+        setEnd(end);
+        setMinimum(minimum);
+        setMaximum(maximum);
+        setValue(value);
+    }*/
+
+    /**
+     * Gets the start of the selected time range.
+     * 
+     * @return the start of the time range
+     */
+    private double getStart() {
+        return start;
+    }
+
+    /**
+     * Sets the start of the time range.
+     * 
+     * @param start
+     *            the start of the time range
+     */
+    private void setStart(double start) {
+        if (this.start != start) {
+            this.start = start;
+            doLayout();
+            fireRangeChanged();
+        }
+    }
+
+    /**
+     * Gets the end of the selected time range.
+     * 
+     * @return the end of the time range
+     */
+    private double getEnd() {
+        return end;
+    }
+
+    /**
+     * Sets the end of the time range.
+     * 
+     * @param end
+     *            the end of the time range
+     */
+    private void setEnd(double end) {
+        if (this.end != end) {
+            this.end = end;
+            doLayout();
+            fireRangeChanged();
+        }
+    }
+
+    /**
+     * Gets the minimum allowed time value.
+     * 
+     * @return the minimum allowed time value
+     */
+    public double getMinimum() {
+        return minimum;
+    }
+
+    /**
+     * Sets the minimum allowed time value. If this is greater than the selected
+     * time range, it will be set to be equal to this value.
+     * 
+     * @param minimum
+     *            the minimum allowed time value
+     */
+    private void setMinimum(double minimum) {
+        if (this.minimum != minimum) {
+            this.minimum = minimum;
+
+            calculateActualTimeRanges();
+
+            if (rangeChangeable) {
+                if (minimum > start) {
+                    setStart(minimum);
+                    fireRangeChanged();
+                }
+                if (minimum > end) {
+                    setEnd(minimum);
+                    fireRangeChanged();
+                }
+            } else {
+                setStart(minimum);
+            }
+
+            fireBoundsChanged();
+            doLayout();
+        }
+    }
+
+    /**
+     * Gets the maximum allowed time value.
+     * 
+     * @return the maximum allowed time value.
+     */
+    public double getMaximum() {
+        return maximum;
+    }
+
+    /**
+     * Sets the maximum allowed time value. If this is less than the selected
+     * time range, it will be set to be equal to this value.
+     * 
+     * @param maximum
+     *            the maximym allowed time value
+     */
+    private void setMaximum(double maximum) {
+        if (this.maximum != maximum) {
+            this.maximum = maximum;
+
+            calculateActualTimeRanges();
+
+            if (rangeChangeable) {
+                if (maximum < end) {
+                    setEnd(maximum);
+                    fireRangeChanged();
+                }
+                if (maximum < start) {
+                    setStart(maximum);
+                    fireRangeChanged();
+                }
+            } else {
+                setEnd(maximum);
+            }
+
+            fireBoundsChanged();
+            doLayout();
+        }
+    }
+
+    /**
+     * Reset to minimum date
+     */
+    public void resetMinimumBound() {
+        setStart(this.minimum);
+    }
+
+    /**
+     * Reset to maximum date
+     */
+    public void resetMaximumBound() {
+        setEnd(this.maximum);
+    }
+
+    /**
+     * Reset to initial value date
+     */
+    public void resetValue() {
+        setValue(this.minimum);
+    }
+
+    /**
+     * Reset all dates
+     */
+    public void resetAllDates() {
+        resetMinimumBound();
+        resetMaximumBound();
+        resetValue();
+    }
+
+    /**
+     * Replace the current set of time ranges with this one.
+     * 
+     * @param newTimeRanges
+     *            a list of time ranges
+     */
+    public void setTimeRanges(List<TimeRange> newTimeRanges) {
+        timeRanges.clear();
+        timeRanges.addAll(newTimeRanges);
+
+        calculateActualTimeRanges();
+
+        double newValue = getClosestValidTime(value);
+        if (value != newValue) {
+            value = newValue;
+            fireValueChanged();
+        }
+
+        double newStart = getClosestValidTime(start);
+        double newEnd = getClosestValidTime(end);
+        if (start != newStart || end != newEnd) {
+            setStart(newStart);
+            setEnd(newEnd);
+            fireRangeChanged();
+        }
+
+        doLayout();
+    }
+
+    /**
+     * Tell if the time is valid with respect to the current time bounds and
+     * ranges.
+     * 
+     * @param time
+     *            the time to check
+     * @return true if the time is valid, false if it is not
+     */
+    public boolean isTimeValid(double time) {
+        for (TimeRange timeRange : actualTimeRanges) {
+            if (timeRange.contains(time)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get a time that is valid and greater than or equal to the current one.
+     * 
+     * @return the next valid time, or -1 if there is none
+     */
+    public double getNextValidTime(double time) {
+        for (TimeRange tr : actualTimeRanges) {
+            if (tr.contains(time)) {
+                return time;
+            } else if (tr.start > time) {
+                return tr.start;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * Return a time that is valid and the closest possible to the given time.
+     * If the provided time is valid, then the same time will be returned. If
+     * the time is invalid, the nearest valid time will be returned.
+     * 
+     * @param time
+     *            the time to use
+     * @return the closest valid time to the given time
+     */
+    private double getClosestValidTime(double time) {
+        double possibleTime = 0;
+
+        for (int i = 0; i < actualTimeRanges.size(); i++) {
+            TimeRange tr = actualTimeRanges.get(i);
+
+            if (i == 0 && time < tr.start) {
+                return tr.start;
+            } else if (i == actualTimeRanges.size() - 1 && time > tr.end) {
+                return tr.end;
+            } else if (tr.contains(time)) {
+                return time;
+            } else if (time > tr.end) {
+                possibleTime = tr.end;
+            } else if (time - possibleTime < tr.start - time) {
+                return possibleTime;
+            } else {
+                return tr.start;
+            }
+        }
+
+        // this shouldn't be possible
+        return time;
+    }
+
+    /**
+     * Remove all time ranges.
+     */
+    public void clearTimeRanges() {
+        timeRanges.clear();
+        calculateActualTimeRanges();
+        doLayout();
+    }
+
+    /**
+     * Indicates if the value is being continuously changed in the UI.
+     * 
+     * @return true if the value is changing, false otherwise
+     */
+    public boolean isValueAdjusting() {
+        return isAdjusting;
+    }
+
+    /**
+     * Updates the list of time ranges represented by the time slider. This
+     * enforces the maximum and minimum values on the list of time ranges.
+     * 
+     * @see #actualTimeRanges
+     */
+    private void calculateActualTimeRanges() {
+        actualTimeRanges.clear();
+
+        if (timeRanges.size() == 0) {
+            actualTimeRanges.add(new TimeRange(minimum, maximum));
+        } else {
+            for (TimeRange t : timeRanges) {
+                if (t.start > maximum) {
+                    break;
+                }
+
+                if (t.end < minimum) {
+                    continue;
+                }
+
+                double rangeStart;
+                if (t.start >= minimum) {
+                    rangeStart = t.start;
+                } else {
+                    rangeStart = minimum;
+                }
+
+                double rangeEnd;
+                if (t.end <= maximum) {
+                    rangeEnd = t.end;
+                } else {
+                    rangeEnd = maximum;
+                }
+
+                actualTimeRanges.add(new TimeRange(rangeStart, rangeEnd));
+            }
+        }
+    }
+
+    /**
+     * Get the minimum value allowed on the time slider. This takes into account
+     * the time ranges.
+     * 
+     * @return the minimum value allowed on the time slider
+     */
+    public double getActualMinimum() {
+        if (actualTimeRanges.size() == 0) {
+            return minimum;
+        } else {
+            return actualTimeRanges.get(0).start;
+        }
+    }
+
+    /**
+     * Get the maximum value allowed on the time slider. This takes into account
+     * the time ranges.
+     * 
+     * @return the maximum value allowed on the time slider
+     */
+    public double getActualMaximum() {
+        if (actualTimeRanges.size() == 0) {
+            return maximum;
+        } else {
+            return actualTimeRanges.get(actualTimeRanges.size() - 1).end;
+        }
+    }
+
+    /**
+     * Get the total length of time represented by the time slider. This removes
+     * time contained in the gaps from time ranges.
+     * 
+     * @return the total length of time represented by the time slider
+     */
+    private double getTimeLength() {
+        double length = 0;
+
+        for (TimeRange t : actualTimeRanges) {
+            length += t.length();
+        }
+
+        return length;
+    }
+
+    /**
+     * Get the width (in pixels) of the time portion of the slider.
+     * 
+     * @return the width of the time portion of the slider
+     */
+    private int getTimeWidth() {
+        Insets insets = getInsets();
+        return getWidth() - 13 - insets.left - insets.right;
+    }
+
+    /**
+     * Return the time corresponding to the x coordinate of the time slider.
+     * 
+     * @param x
+     *            the horizontal point on the slider component
+     * @return the time
+     */
+    private double getTimeFromX(int x) {
+        // remove left inset and button width
+        x = x - 6 - getInsets().left;
+
+        int width = getTimeWidth();
+
+        if (x < 0) {
+            return getActualMinimum();
+        } else if (x > width) {
+            return getActualMaximum();
+        }
+
+        double factor = ((double) (x)) / width;
+        double length = getTimeLength();
+        double value = factor * length;
+
+        double position = 0;
+        for (TimeRange t : actualTimeRanges) {
+            double startPosition = position;
+            position += t.length();
+
+            if (value <= position) {
+                double startFactor = startPosition / length;
+                double endFactor = position / length;
+                factor = (factor - startFactor) / (endFactor - startFactor);
+                return (t.length()) * factor + t.start;
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * Get the horizontal point on the slider component corresponding to the
+     * given time. If the time is not visible on the slider, -1 will be
+     * returned.
+     * 
+     * @param time
+     *            the time to get the point from
+     * @return the horizontal (x) point of the time, or -1 if the point is not
+     *         visible
+     */
+    private int getXFromTime(double time) {
+        boolean timeVisible = false;
+        double position = 0;
+        for (TimeRange t : actualTimeRanges) {
+            if (t.contains(time)) {
+                timeVisible = true;
+                position += (time - t.start);
+                break;
+            }
+            position += t.length();
+        }
+        if (!timeVisible) {
+            return -1;
+        }
+
+        double factor = position / getTimeLength();
+        int width = getTimeWidth();
+
+        return (int) Math.round(factor * width) + getInsets().left + 6;
+    }
+
+    /**
+     * Gets the amount of time one pixel on the time slider represends.
+     * 
+     * @return the amount of time represented by one pixel, in seconds
+     */
+    @SuppressWarnings("unused")
+    private double getPixelTime() {
+        return getTimeLength() / getTimeWidth();
+    }
+
+    /**
+     * Layout the buttons.
+     */
+    public void doLayout() {
+        Insets insets = getInsets();
+
+        if (maximum == minimum) {
+            startButton.setVisible(false);
+            endButton.setVisible(false);
+        } else {
+            startButton.setVisible(true);
+            endButton.setVisible(true);
+        }
+
+        startButton.setBounds(getXFromTime(start) - 6, insets.top, 6, 11);
+        endButton.setBounds(getXFromTime(end) + 1, insets.top, 6, 11);
+        valueButton.setBounds(getXFromTime(value) - 3, insets.top + 2, 7, 7);			
+        repaint();
+    }
+
+    /**
+     * Paint the components. Also paint the slider and the markers.
+     */
+    protected void paintComponent(Graphics g) {
+        super.paintComponent(g);
+
+        Insets insets = getInsets();
+
+        g.setColor(Color.lightGray);
+        g.fillRect(insets.left + 6, insets.top + 4, getWidth() - insets.left
+            - 12 - insets.right, 3);
+
+        if (isEnabled()) {
+            g.setColor(Color.gray);
+            int startX = getXFromTime(start);
+            int endX = getXFromTime(end);
+            g.fillRect(startX, insets.top + 4, endX - startX, 3);
+        }
+    }
+
+    /**
+     * Get the minimum dimensions for this component.
+     * 
+     * @return the minimum dimensions
+     */
+    public Dimension getMinimumSize() {
+        Insets insets = getInsets();
+        return new Dimension(insets.left + 6 + 6 + 1 + insets.right, insets.top
+            + 11 + insets.bottom);
+    }
+
+    /**
+     * Get the preferred size for this component.
+     * 
+     * @return the preferred dimensions
+     */
+    public Dimension getPreferredSize() {
+        return getMinimumSize();
+    }
+
+    /**
+     * Creates the tooltip for the component. This changes the default tooltip
+     * by setting a different border.
+     * 
+     * @return the tooltip created
+     */
+    public JToolTip createToolTip() {
+        JToolTip toolTip = super.createToolTip();
+        toolTip.setBackground(Color.decode("#FFFFFC"));
+        toolTip.setBorder(BorderFactory.createCompoundBorder(
+            BorderFactory.createEtchedBorder(),
+            BorderFactory.createEmptyBorder(5, 5, 5, 5)));
+        return toolTip;
+    }
+
+    /**
+     * Gets the text for the tooltip. This will return a description of the
+     * markers the mouse pointer is around.
+     * 
+     * @param me
+     *            the mouse event that triggered this
+     * @return text describing the markers around the mouse pointer
+     *
+	public String getToolTipText(MouseEvent me) {
+		int x = me.getX();
+		if (me.getSource() == valueButton) {
+			x += valueButton.getX();
+		}
+
+		double time = getTimeFromX(x);
+		double timeOffset = time - value;
+
+		double markerOffset = 2 * getPixelTime();
+		// List<EventMarker> markersOver = getMarkersAroundTime(time,
+		// markerOffset);
+
+		String text = new String("<html><font size=\"5\">");
+		return text;
+	}
+
+	/**
+     * Returns a DateTime instance to represents the start date
+     * 
+     */
+    public Instant getStartInstant() {
+        return toInstant((long) getStart());        
+    }
+
+    /**
+     * Returns a DateTime instance to represents the end date
+     * 
+     */
+    public Instant getEndInstant() {
+        return toInstant((long) getEnd());
+    }
+
+    /**
+     * Get the current DateTime if the value is changeable or null if the value
+     * isn't changeable.
+     * 
+     * @return
+     */
+    public Instant getCurrentInstant() {
+        if (valueChangeable)
+            return toInstant((long) getValue());
+        else
+            return null;
+    }
+
+    /**
+     * Called when the mouse is dragged. This deals dragging the time value and
+     * range controls.
+     * 
+     * @param me
+     *            the mosue event that triggered this
+     */
+    public void mouseDragged(MouseEvent me) {
+        if (!isEnabled()) {
+            return;
+        }
+
+        JButton button = (JButton) me.getSource();
+        int x = me.getX();
+        if (button == startButton) {
+            x += endButton.getWidth() - clickStart;
+        } else if (button == valueButton) {
+            x += Math.round(valueButton.getWidth() / 2d) - clickStart;
+        } else if (button == endButton) {
+            x -= clickStart;
+        }
+        double time = getTimeFromX(button.getX() + x);
+
+        if (button == startButton) {
+            if(left)
+            {
+                if(!valueChangeable)
+                {
+                    if (time < minimum) {
+                        time = minimum;
+                    } else if (time >= end) {
+                        time = end;
+                    }
+
+                    setStart(time);
+                }
+            }
+        } else if (button == valueButton) {
+            if (rangeChangeable) {
+                if (time < start) {
+                    time = start;
+                } else if (time > end) {
+                    time = end;
+                }
+            } else {
+                if (time < minimum) {
+                    time = minimum;
+                } else if (time > maximum) {
+                    time = maximum;
+                }
+            }
+
+            setValue(time);
+        } else if (button == endButton) {
+            if(right)
+            {
+                if(!valueChangeable)
+                {
+                    if (time < start) {
+                        time = start;
+                    } else if (time > maximum) {
+                        time = maximum;
+                    }
+
+                    setEnd(time);
+                }
+            }
+        }
+    }
+
+    /**
+     * Called when the mouse is pressed. Used to tell when the value control is
+     * being adjusted.
+     * 
+     * @param me
+     *            the mouse event that triggered this
+     */
+    public void mousePressed(MouseEvent me) {
+        clickStart = me.getX();
+
+        if (me.getSource() == valueButton) {
+            isAdjusting = true;
+        }
+    }
+
+    /**
+     * Called whn the mouse is released. Used to tell when the value control is
+     * being adjusted.
+     * 
+     * @param me
+     *            the mouse event that triggered this
+     */
+    public void mouseReleased(MouseEvent me) {
+        if (me.getSource() == valueButton) {
+            isAdjusting = false;
+            TimeEvent event = new TimeEvent(this);
+            for (TimeAdjustmentListener l : adjustmentListeners) {
+                l.timeChanged(event);
+            }
+        }
+    }
+
+    public void mouseMoved(MouseEvent me) {
+    }
+
+    /**
+     * Called when the mouse is clicked. Used to set the time value when there
+     * is a click on the time slider.
+     * 
+     * @param me
+     *            the mouse event that triggered this
+     */
+    public void mouseClicked(MouseEvent me) {
+        double time;
+        if (me.getSource() == this) {
+            time = getTimeFromX(me.getX());
+        } else if (me.getSource() == valueButton) {
+            time = getTimeFromX(valueButton.getX() + me.getX());
+        } else {
+            return;
+        }
+        if (me.getButton() == MouseEvent.BUTTON1) {
+            setValue(time);
+        }
+    }
+
+    public void mouseEntered(MouseEvent me) {
+    }
+
+    public void mouseExited(MouseEvent me) {
+    }
+
+    /**
+     * Add a listener for time adjustments.
+     * 
+     * @param l
+     *            the listener to add
+     */
+    public void addTimeAdjustmentListener(TimeAdjustmentListener l) {
+        adjustmentListeners.add(l);
+    }
+
+    /**
+     * Remove a listener for time adjustments.
+     * 
+     * @param l
+     *            the listener to remove
+     */
+    public void removeTimeAdjustmentListener(TimeAdjustmentListener l) {
+        adjustmentListeners.remove(l);
+    }
+
+    /**
+     * Fires a value changed event to all adjustment listeners.
+     */
+    public void fireValueChanged() {
+        TimeEvent event = new TimeEvent(this);
+        for (TimeAdjustmentListener l : adjustmentListeners) {
+            l.timeChanged(event);
+        }
+    }
+
+    /**
+     * Fires a range changed event to all adjustment listeners.
+     */
+    public void fireRangeChanged() {
+        TimeEvent event = new TimeEvent(this);
+        for (TimeAdjustmentListener l : adjustmentListeners) {
+            l.rangeChanged(event);
+        }
+    }
+
+    /**
+     * Fires a bounds changed event to all adjustment listeners.
+     */
+    protected void fireBoundsChanged() {
+        TimeEvent event = new TimeEvent(this);
+        for (TimeAdjustmentListener l : adjustmentListeners) {
+            l.boundsChanged(event);
+        }
+    }
+
+    /**
+     * Sets if this component is enabled. If the component is not enabled, the
+     * time value and range controls will not respond to user input.
+     * 
+     * @param enabled
+     *            true if this component should be enabled, false otherwise
+     */
+    public void setEnabled(boolean enabled) {
+        if (isEnabled() == enabled) {
+            return;
+        }
+        super.setEnabled(enabled);
+        valueButton.setEnabled(enabled && valueChangeable);
+        startButton.setEnabled(enabled && rangeChangeable);
+        endButton.setEnabled(enabled && rangeChangeable);
+        repaint();
+    }
+
+
+    private long toMillis(Instant instant){
+        if (instant.isAbsolute()){
+            AbsoluteInstant absoluteInstant = (AbsoluteInstant)instant;
+            long millis = 0;                  
+            millis += absoluteInstant.getYears() * MILLIS_BY_YEAR;
+            millis += absoluteInstant.getMonths() * MILLIS_BY_MONTH;
+            millis += absoluteInstant.getDays() * MILLIS_BY_YEAR;
+            millis += absoluteInstant.getHours() * MILLIS_BY_HOUR;
+            millis += absoluteInstant.getMinutes() * MILLIS_BY_MINUTE;
+            millis += absoluteInstant.getSeconds() * MILLIS_BY_SECOND;       
+            millis += absoluteInstant.getMillis();
+            return millis;
+        }else{
+            return ((RelativeInstant)instant).toMillis();
+        }
+    } 
+
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    private Instant toInstant(long millis){
+        if (isAbsolute){  
+
+            ArrayList types = new ArrayList();;
+            ArrayList values = new ArrayList();
+
+            long mod = millis % MILLIS_BY_YEAR;
+            if ((millis / MILLIS_BY_YEAR) > 0){
+                types.add(AbsoluteInstantType.YEAR);
+                values.add((int)(millis / MILLIS_BY_YEAR));
+                millis = mod;
+            }
+
+            mod = millis % MILLIS_BY_MONTH;            
+            if ((millis / MILLIS_BY_MONTH) > 0){
+                if((int)(millis / MILLIS_BY_MONTH) > 0)
+                {
+                    types.add(AbsoluteInstantType.MONTH_OF_YEAR);
+                    values.add((int)(millis / MILLIS_BY_MONTH));
+                }
+                millis = mod;
+            }    
+
+            mod = millis % MILLIS_BY_WEEK;            
+            if ((millis / MILLIS_BY_WEEK) > 0){
+                if((int)(millis / MILLIS_BY_WEEK) > 0)
+                {
+                    types.add(AbsoluteInstantType.WEEK_OF_WEEKYEAR);
+                    values.add((int)(millis / MILLIS_BY_WEEK));
+                }
+                millis = mod;
+            }
+
+            mod = millis % MILLIS_BY_DAY; 
+            if ((millis / MILLIS_BY_DAY) > 0){
+                if((int)(millis / MILLIS_BY_DAY) > 0)
+                {
+                    types.add(AbsoluteInstantType.DAY_OF_MONTH);
+                    values.add((int)(millis / MILLIS_BY_DAY));
+                }
+                millis = mod;
+            }           
+
+            mod = millis % MILLIS_BY_HOUR;
+            if ((millis / MILLIS_BY_HOUR) > 0){
+                types.add(AbsoluteInstantType.HOUR_OF_DAY);
+                values.add((int)(millis / MILLIS_BY_HOUR));
+                millis = mod;
+            }            
+
+            mod = millis % MILLIS_BY_MINUTE;
+            if ((millis / MILLIS_BY_MINUTE) > 0){
+                types.add(AbsoluteInstantType.MINUTE_OF_HOUR);
+                values.add((int)(millis / MILLIS_BY_MINUTE));
+                millis = mod;
+            }
+
+            mod = millis % MILLIS_BY_SECOND;
+            if ((millis / MILLIS_BY_SECOND) > 0){
+                types.add(AbsoluteInstantType.SECOND_OF_MINUTE);
+                values.add((int)(millis / MILLIS_BY_SECOND));
+                millis = mod;
+            }            
+
+            mod = (int)millis;
+            if (mod > 0){
+                types.add(AbsoluteInstantType.MILLIS_OF_SECOND);
+                values.add((int)millis);
+                millis = mod;
+            }
+
+            try {
+                int[] intTypes = new int[types.size()];
+                int[] intValues = new int[types.size()];
+                for (int i=0 ; i<types.size() ; i++){
+                    intTypes[i] = (Integer)types.get(i);
+                    intValues[i] = (Integer)values.get(i);
+                }
+                return timeSupportManager.createAbsoluteInstant(intTypes, intValues);
+            } catch (AbsoluteInstantTypeNotRegisteredException e) {
+                LOG.error("Error creating an absolute instants");
+                return null;
+            }
+        }else{
+            return timeSupportManager.createRelativeInstant((long) millis); 
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeAdjustmentListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeAdjustmentListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeAdjustmentListener.java	(revision 42196)
@@ -0,0 +1,64 @@
+/*
+ * RDV
+ * Real-time Data Viewer
+ * http://rdv.googlecode.com/
+ * 
+ * Copyright (c) 2005-2007 University at Buffalo
+ * Copyright (c) 2005-2007 NEES Cyberinfrastructure Center
+ * Copyright (c) 2008 Palta Software
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ * 
+ * $URL: https://rdv.googlecode.com/svn/branches/RDV-1.9/src/org/rdv/ui/TimeAdjustmentListener.java $
+ * $Revision: 1149 $
+ * $Date: 2008-07-03 10:23:04 -0400 (Thu, 03 Jul 2008) $
+ * $Author: jason@paltasoftware.com $
+ */
+
+package org.gvsig.timesupport.swing.impl.rdv;
+
+import java.util.EventListener;
+
+/**
+ * A listener for time adjustment events.
+ * 
+ * @author Jason P. Hanley
+ */
+public interface TimeAdjustmentListener extends EventListener {
+  /**
+   * Called when the time changes.
+   * 
+   * @param event  the time event
+   */
+  void timeChanged(TimeEvent event);
+  
+  /**
+   * Called when the time range changes.
+   * 
+   * @param event  the time event
+   */
+  void rangeChanged(TimeEvent event);
+  
+  /**
+   * Called when the time bounds change.
+   * 
+   * @param event  the time event
+   */
+  void boundsChanged(TimeEvent event);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeRange.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeRange.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/rdv/TimeRange.java	(revision 42196)
@@ -0,0 +1,99 @@
+/*
+ * RDV
+ * Real-time Data Viewer
+ * http://rdv.googlecode.com/
+ * 
+ * Copyright (c) 2005-2007 University at Buffalo
+ * Copyright (c) 2005-2007 NEES Cyberinfrastructure Center
+ * Copyright (c) 2008 Palta Software
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ * 
+ * $URL: http://rdv.googlecode.com/svn/trunk/src/org/rdv/rbnb/TimeRange.java $
+ * $Revision: 1149 $
+ * $Date: 2008-07-03 16:23:04 +0200 (jue 03 de jul de 2008) $
+ * $Author: jason@paltasoftware.com $
+ */
+
+package org.gvsig.timesupport.swing.impl.rdv;
+
+/**
+ * A time range. This is a range in time specified by a start and end time.
+ */
+public class TimeRange implements Comparable<TimeRange> {
+  /** The start of the time range */
+  public double start;
+  
+  /** The end of the time range */
+  public double end;
+  
+  /**
+   * Create a time range.
+   * 
+   * @param start  the start of the time range
+   * @param end    the end of the time range
+   */
+  public TimeRange(double start, double end) {
+    this.start = start;
+    this.end = end;
+  }
+  
+  /**
+   * The length of the time range. Simply end-start.
+   * 
+   * @return  the length of the time range
+   */
+  public double length() {
+    return end-start;
+  }
+  
+  /**
+   * See if the time is within the time range.
+   * 
+   * @param time  the time to check
+   * @return      true if the time is within the time range, false otherwise
+   */
+  public boolean contains(double time) {
+    return ((time >= start) && (time <= end));
+  }
+  
+  /**
+   * Compare time ranges. This is based first on their start, and then on
+   * their end (if needed).
+   * 
+   * @param d  the time range to compare with
+   * @return   0 if they are the same, -1 if this is less than the other, and
+   *           1 if this is greater than the other.
+   */
+  public int compareTo(TimeRange t) {
+    if (start == t.start) {
+      if (end == t.end) {
+        return 0;
+      } else if (end < t.end) {
+        return -1;
+      } else {
+        return 1;
+      }
+    } else if (start < t.start) {
+      return -1;
+    } else {
+      return 1;
+    }
+  }
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/DefaultTimeSupportSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/DefaultTimeSupportSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/DefaultTimeSupportSwingLibrary.java	(revision 42196)
@@ -0,0 +1,50 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl;
+
+import org.gvsig.timesupport.swing.api.TimeSupportSwingLibrary;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingLocator;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingManager;
+import org.gvsig.timesupport.swing.impl.panel.DefaultTimeSliderPanel;
+import org.gvsig.tools.library.LibraryException;
+
+public class DefaultTimeSupportSwingLibrary extends TimeSupportSwingLibrary{
+
+    @SuppressWarnings("static-access")
+	@Override
+	protected void doInitialize() throws LibraryException {
+		// TODO Auto-generated method stub
+		TimeSupportSwingLocator.getInstance().registerSwingDalTimeManager(DefaultTimeSupportSwingManager.class);
+		
+	}
+
+        @Override
+	protected void doPostInitialize() throws LibraryException {
+
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/package.html	(revision 42196)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.timesupport package documentation</title>
+</head>
+<body>
+
+	<p>TimeSupport swing library API default implementation.</p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/CloseSelectorPanelNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/CloseSelectorPanelNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/CloseSelectorPanelNotification.java	(revision 42196)
@@ -0,0 +1,47 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.impl.panel;
+
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanelNotification;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class CloseSelectorPanelNotification implements TimeSelectorPanelNotification {
+        
+    public CloseSelectorPanelNotification() {
+        super();
+    }
+
+    public Time getTime() {      
+        return null;
+    }
+
+    public String getType() {      
+        return TimeSelectorPanelNotification.CLOSE_WINDOW;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/TimePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/TimePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/TimePanel.java	(revision 42196)
@@ -0,0 +1,541 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.panel;
+
+
+import java.awt.Component;
+import java.util.List;
+
+import javax.swing.BoxLayout;
+import javax.swing.JPanel;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteInterval;
+import org.gvsig.timesupport.AbsoluteIntervalTypeNotRegisteredException;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.swing.impl.components.AbsoluteTemporalComponent;
+import org.gvsig.timesupport.swing.impl.components.ITemporalComponent;
+import org.gvsig.timesupport.swing.impl.components.RelativeTemporalComponent;
+import org.gvsig.timesupport.swing.impl.rdv.TimeAdjustmentListener;
+import org.gvsig.timesupport.swing.impl.rdv.TimeEvent;
+import org.gvsig.timesupport.swing.impl.rdv.TimeSlider;
+/**
+ * Window main panel (control Relative and Absolute time instances)
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * @version $Id$
+ *
+ */
+public class TimePanel extends JPanel implements TimeAdjustmentListener {
+    private static final long serialVersionUID = -1711925095164453822L;
+    /**
+     * Time mode {Relative or absolute}
+     */
+    public static enum TIME_MODE {RELATIVE, ABSOLUTE};
+    private TIME_MODE _mode;
+    private TimeSlider slider = null;
+    private ITemporalComponent jComponentStart = null;
+    private ITemporalComponent jComponentEnd = null;
+    private Instant startDate = null;
+    private Instant endDate = null;
+    private Instant startBackupForInterval = null;
+    private Instant endBackupForInterval = null;
+    private Interval interval = null;
+    private boolean eventSynchronized = false;
+
+    private List<Instant> instants = null;
+    private int instantsPosition;
+    private Instant actual = null;
+    private Instant instAux = null;
+    private boolean updateSlider = false;
+    private static TimeSupportManager timeSupportManager = TimeSupportLocator
+    .getManager();
+
+    private TimeAdjustmentListener listener = null;
+
+    public TimePanel()
+    {
+        super();
+        _mode = TIME_MODE.RELATIVE;
+    }
+
+    /**
+     * Intializes the panel
+     * 
+     * @param start
+     * @param end
+     */
+    public void initialize(Instant start, Instant end)
+    {
+        
+        createComponents(start, end);
+        startBackupForInterval = start;
+        endBackupForInterval = end;
+    }
+    
+    /**
+     * Set instants to all controls
+     * @param start
+     * @param end
+     */
+    public void setInstants(Instant start, Instant end) {
+            startDate = start;
+            endDate = end;
+
+            getJComponentStart().setTimes(Messages.getText("lbl_begin_position"),
+                startDate, startDate, endDate);
+
+            getJComponentEnd().setTimes(Messages.getText("lbl_end_position"),
+                endDate, startDate, endDate);
+
+
+            getTimeSlider().setValues(startDate, endDate);
+    }
+
+    /**
+     * Set the time Mode
+     * @param mode
+     * @param start
+     * @param end
+     */
+    public void setTimeMode(TIME_MODE mode, Instant start, Instant end)
+    {
+    	_mode = mode;
+    	initialize(start,end);
+    }
+    
+    /**
+     * Get the current TIME_MODE
+     * @return
+     */
+    public TIME_MODE getTimeMode()
+    {
+    	return _mode;
+    }
+    
+    /**
+     * Set the listener to capture all events {@link TimeAdjustmentListener}
+     * @param listener
+     */
+    public void setListener(TimeAdjustmentListener listener) {
+        this.listener = listener;
+    }
+
+    /**
+     * Get the listener {@link TimeAdjustmentListener}
+     * @return
+     */
+    public TimeAdjustmentListener getListener() {
+        return this.listener;
+    }
+
+    /**
+     * Set if works with instants (true) or interval (false)
+     * @param changeable
+     */
+    public void setValueChangeableSlider(boolean changeable) {
+        if(changeable == true)
+        { //Instant
+            if(interval != null)
+            {
+                startBackupForInterval = startDate;
+                startBackupForInterval = endDate;
+                setInstants(interval.getStart(), interval.getEnd());
+            }
+        }else
+        { //Interval
+            if(interval != null)
+            {
+                setInstants(startBackupForInterval, endBackupForInterval);
+            }
+        }
+        getTimeSlider().setValueChangeable(changeable);
+    }
+
+    /**
+     * Set the valid instants
+     * @param instants
+     */
+    public void setInstants(List<Instant> instants)
+    {
+        this.instants = instants;
+        instantsPosition = 0;
+        actual = null;
+    }
+    
+    public void timeChanged(TimeEvent event) {
+        // TODO Auto-generated method stub
+    	if(!isUpdating())
+    	{
+    		setUpdating(true);
+	        if (event.getSource() instanceof TimeSlider) {
+	            if(getTimeSlider().getValueChangeable())
+	            {
+	            	if(this.instants != null && !updateSlider)
+	            	{
+	            	    updateSlider = true;
+	            	    if(!getTimeSlider().isValueAdjusting())
+	            	    {
+	            	        getTimeSlider().setCurrentInstant(getApproximateInstant(getTimeSlider().getCurrentInstant()));  
+	            	        getJComponentStart().setCurrentInstant(getTimeSlider().getCurrentInstant());
+	            	    }
+	            	    updateSlider = false;
+	            	}else
+	            	{
+	            	    getJComponentStart().setCurrentInstant(getTimeSlider().getCurrentInstant());
+	            	}
+	
+	            }
+	
+	        } else if (event.getSource() instanceof ITemporalComponent) {
+	            
+	            ITemporalComponent calendar = (ITemporalComponent) event.getSource();
+	            if (calendar == getJComponentStart()) {
+	                if (!getTimeSlider().getValueChangeable()) {
+	                	
+		                    try {// this try is for the daylight saving (it creates
+		                        // exceptions)
+		                        if(!updateSlider)
+		                            getTimeSlider().setStartInstant((Instant)getJComponentStart().getTime());
+		                    } catch (IllegalArgumentException e) {
+		                    	e.printStackTrace();
+		                    }
+	                }
+	            } else {
+	                if (!getTimeSlider().getValueChangeable()) {
+	                	   
+	                		try {// this try is for the daylight saving (it creates
+		                        // exceptions)
+	                		    if(!updateSlider)
+	                		        getTimeSlider().setEndInstant((Instant)getJComponentEnd().getTime());
+		                    } catch (IllegalArgumentException e) {
+		                    	e.printStackTrace();
+		                    }
+	                }
+	            }
+	            updateCalendars();
+	            
+	        } else {
+		            try {// this try is for the daylight saving (it creates exceptions)
+		                if(instants == null)
+		                getTimeSlider().setCurrentInstant((Instant)
+		                    getJComponentStart().getTime());
+		            } catch (IllegalArgumentException e) {
+		            } finally {
+	        	}
+	        }
+	        if (getTimeSlider().getValueChangeable() && listener != null)
+	            listener.timeChanged(new TimeEvent(this));
+        	setUpdating(false);
+    	}
+    }
+
+    public void rangeChanged(TimeEvent event) {
+        // TODO Auto-generated method stub
+        if (event.getSource() instanceof TimeSlider) {            
+            getJComponentStart().setCurrentInstant(getTimeSlider().getStartInstant());
+            getJComponentEnd().setCurrentInstant(getTimeSlider().getEndInstant());
+        }
+        if (!getTimeSlider().getValueChangeable() && listener != null)
+            listener.rangeChanged(new TimeEvent(this));
+    }
+
+    /**
+     * Update slider (intervals)
+     */
+    public void fireRangeInterval() {
+        getTimeSlider().fireRangeChanged();
+    }
+
+    /**
+     * Update slider (instants)
+     */
+    public void fireValueInstant() {
+        getTimeSlider().fireValueChanged();
+    }
+
+    public void boundsChanged(TimeEvent event) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        super.setEnabled(enabled);
+        getJComponentStart().setEnabled(enabled);
+        getJComponentEnd().setEnabled(enabled);
+        getTimeSlider().setEnabled(enabled);
+    }
+
+    public void resetValues() {
+        getTimeSlider().resetAllDates();
+        getJComponentStart().resetValues();
+        getJComponentEnd().resetValues();
+    }
+
+    public void setEnabledEndCalendar(boolean enabled) {
+        getJComponentEnd().setEnabled(enabled);
+    }
+
+    /**
+     * Get the current interval
+     * @return
+     */
+    public Interval getInterval() {
+
+        if (datesCorrect()) {
+        	if(_mode == TIME_MODE.RELATIVE)
+        	{
+        		return timeSupportManager.createRelativeInterval(
+                (RelativeInstant)getJComponentStart().getTime(),(RelativeInstant) getJComponentEnd()
+                .getTime());
+        	}else
+        	{
+        		try {
+        			AbsoluteInstant start = (AbsoluteInstant) getJComponentStart().getTime();
+        			AbsoluteInstant end = (AbsoluteInstant) getJComponentEnd().getTime();
+					return createAbsoluteInterval(start, end); 
+				} catch (AbsoluteIntervalTypeNotRegisteredException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+					return null;
+				}
+        	}
+        } else
+            return null;
+
+    }
+
+    /**
+     * Get the current instant
+     * @return
+     */
+    public Instant getInstant() {
+
+        if (datesCorrect()) {
+            try {// this try is for the daylight saving (it creates exceptions)
+                return (Instant) getJComponentStart().getTime();
+            } catch (IllegalArgumentException e) {
+                return null;
+            }
+        } else
+            return null;
+
+    }
+
+    public void setInterval(Interval interval)
+    {
+        this.interval = interval;
+    }
+    
+    /*
+     * PRIVATE METHODS
+     */
+    private void createUI() {
+        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+        
+        add((Component)getJComponentStart());
+        add(getTimeSlider());
+        add((Component)getJComponentEnd());
+        
+        getTimeSlider().setValueChangeable(false);
+
+        getJComponentStart().setListener(this);
+        getJComponentEnd().setListener(this);
+        getTimeSlider().addTimeAdjustmentListener(this);
+    }
+    
+    private void createComponents(Instant start, Instant end)
+    {
+    	removeAll();
+    	revalidate();
+    	repaint();
+    	jComponentStart = null;
+    	jComponentEnd = null;
+    	slider = null;
+    	setInstants(start, end);
+    	createUI();
+    	
+    }
+
+    @SuppressWarnings("unused")
+    private boolean datesCorrect() {
+        if (getJComponentStart().isEnabled() && getJComponentEnd().isEnabled()) {
+            try {
+                Instant init = (Instant) getJComponentStart().getTime();
+                Instant end = (Instant) getJComponentEnd().getTime();
+                return true;
+            } catch (IllegalArgumentException e) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private TimeSlider getTimeSlider() {
+        if (slider == null)
+        	if(_mode == TIME_MODE.RELATIVE)
+        		slider = new TimeSlider(false);
+        	else
+        		slider = new TimeSlider(true);
+        return slider;
+    }
+
+    private ITemporalComponent getJComponentStart() {
+        if (jComponentStart == null)
+        	if(_mode == TIME_MODE.RELATIVE)
+        		jComponentStart = new RelativeTemporalComponent();
+        	else
+        		jComponentStart = new AbsoluteTemporalComponent();
+        
+        return jComponentStart;
+    }
+
+    private ITemporalComponent getJComponentEnd() {
+        if (jComponentEnd == null)
+        	if(_mode == TIME_MODE.RELATIVE)
+        		jComponentEnd = new RelativeTemporalComponent();
+        	else
+        		jComponentEnd = new AbsoluteTemporalComponent();
+        return jComponentEnd;
+    }
+
+    private void updateCalendars() {
+        try {
+            Instant start = (Instant)getJComponentStart().getTime();
+            Instant end = (Instant)getJComponentEnd().getTime();
+            getJComponentStart().setEndTime(end);
+            getJComponentEnd().setStartTime(start);
+        } catch (IllegalArgumentException e) {
+        }
+    }
+    
+    private boolean isUpdating()
+    {
+    	return eventSynchronized;
+    }
+    
+    private void setUpdating(boolean value)
+    {
+    	eventSynchronized = value;
+    }
+    
+    private AbsoluteInterval createAbsoluteInterval(AbsoluteInstant start, AbsoluteInstant end) throws AbsoluteIntervalTypeNotRegisteredException
+    {
+       long millisStart = start.toStandardDuration().getMillis();
+       long millisEnd = end.toStandardDuration().getMillis();
+       
+       long millisInterval = millisEnd - millisStart;
+       
+       int years = 0, months = 0, weeks = 0, days = 0, hours = 0, minutes = 0, seconds = 0, millis = 0;
+       
+       long mod = millisInterval % TimeSlider.MILLIS_BY_YEAR;
+       if((millisInterval / TimeSlider.MILLIS_BY_YEAR) > 0)
+       {
+           years = (int) (millisInterval / TimeSlider.MILLIS_BY_YEAR);
+           millisInterval = mod;
+       }
+       
+       mod = millisInterval % TimeSlider.MILLIS_BY_MONTH;
+       if((millisInterval / TimeSlider.MILLIS_BY_MONTH) > 0)
+       {
+           months = (int) (millisInterval / TimeSlider.MILLIS_BY_MONTH);
+           millisInterval = mod;
+       }
+       
+       mod = millisInterval % TimeSlider.MILLIS_BY_WEEK;
+       if((millisInterval / TimeSlider.MILLIS_BY_WEEK) > 0)
+       {
+           weeks = (int) (millisInterval / TimeSlider.MILLIS_BY_WEEK);
+           millisInterval = mod;
+       }
+       
+       mod = millisInterval % TimeSlider.MILLIS_BY_DAY; 
+       if ((millisInterval / TimeSlider.MILLIS_BY_DAY) > 0){
+           if((int)(millisInterval / TimeSlider.MILLIS_BY_DAY) > 0)
+           {
+               days = (int)(millisInterval / TimeSlider.MILLIS_BY_DAY);
+           }
+           millisInterval = mod;
+       }           
+      
+       mod = millisInterval % TimeSlider.MILLIS_BY_HOUR;
+       if ((millisInterval / TimeSlider.MILLIS_BY_HOUR) > 0){
+           hours = (int)(millisInterval / TimeSlider.MILLIS_BY_HOUR);
+           millisInterval = mod;
+       }            
+   
+       mod = millisInterval % TimeSlider.MILLIS_BY_MINUTE;
+       if ((millisInterval / TimeSlider.MILLIS_BY_MINUTE) > 0){
+           seconds =(int)(millisInterval / TimeSlider.MILLIS_BY_MINUTE);
+           millisInterval = mod;
+       }
+       
+       mod = millisInterval % TimeSlider.MILLIS_BY_SECOND;
+       if ((millisInterval / TimeSlider.MILLIS_BY_SECOND) > 0){
+           seconds = (int)(millisInterval / TimeSlider.MILLIS_BY_SECOND);
+           millisInterval = mod;
+       } 
+       
+       mod = millisInterval;
+       if (mod > 0){
+           millis = (int) mod;
+       }
+       
+       return timeSupportManager.createAbsoluteInterval(years, months, weeks, days, hours, minutes, seconds, millis);
+       
+       
+    }
+    
+    private Instant getApproximateInstant(Instant instant)
+    {
+        
+        int index = 0;
+        
+        if(instant.isBefore(instants.get(0)))
+            return instants.get(0);
+        
+        for(Instant ins : instants)
+        {
+            if(ins.isEqual(instant))
+                return ins;
+            else if(ins.isAfter(instant))
+            {
+                break;
+            }
+            index++;
+        }
+        if(index == instants.size())
+            return instants.get(instants.size()-1);
+    
+        return instants.get(index);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/animation/AnimationPreferencesPanelImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/animation/AnimationPreferencesPanelImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/animation/AnimationPreferencesPanelImpl.java	(revision 42196)
@@ -0,0 +1,509 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.impl.panel.animation;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.DecimalFormat;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel;
+import org.gvsig.timesupport.swing.impl.panel.TimePanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * Main panel for animation preferences
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public class AnimationPreferencesPanelImpl extends JPanel implements ActionListener, AnimationPreferencesPanel, ChangeListener {
+	private static final long  serialVersionUID          = 1L;
+	private RelativeInstant    startInstant              = null;
+	private RelativeInstant    endInstant                = null;
+	
+	private JComboBox          comboLoopValue            = null;
+	private JSlider            sliderSpeed               = null;
+	private JTextField         textFieldTimeStep         = null;
+	private JTextField         textFieldTimeWindowValue  = null;
+	private JTextField         textFieldNLoops           = null;
+	private JTextField         textSpeed                 = null;
+	private JComboBox          comboTimeStepScale        = null;
+	private JComboBox          comboTimeWindowScale      = null;
+	private TimePanel          timePanel                 = null;
+	
+	private JPanel             panelInterval             = null;
+	private JPanel             panelWindowTime           = null;
+	private JPanel             panelVisualization        = null;
+	private JPanel             panelButtons              = null;
+	private DecimalFormat      format                    = null;
+	
+	private JButton            buttonAccept              = null;
+	private JButton            buttonCancel              = null;
+	private TimeAnimationDataModel
+	                           dataModel                 = null;
+
+	
+	public AnimationPreferencesPanelImpl(TimeAnimationDataModel dataModel) {
+		this.dataModel = dataModel;
+		this.startInstant = dataModel.getInitTime();
+		this.endInstant = dataModel.getEndTime();
+		
+		format = new DecimalFormat("#.##");
+		init();
+		
+		setDefaultTimeWindowScale(dataModel.getWindowTimeScale());
+  	    setDefaultTimeStepScale(dataModel.getTimeStepScale());
+  	    setInitialTimeWindowValue(1);
+  	    setInitialTimeStep(1);
+  	    setInitialSpeed(1000);
+  	    setInitialLoopValue(TimeAnimation.NO_LOOP, 0);
+	}
+	
+	private void init() {
+		setLayout(new GridBagLayout());
+		
+		GridBagConstraints gbc = new GridBagConstraints();
+		gbc.insets = new Insets(0, 2, 4, 2);
+		gbc.fill = GridBagConstraints.HORIZONTAL;
+		gbc.weightx = 1;
+		
+		add(getJPanelInterval(), gbc);
+		
+		gbc.gridy = 1;
+		gbc.insets = new Insets(2, 2, 4, 2);
+		add(getJPanelStep(), gbc);
+		
+		gbc.gridy = 2;
+		add(getJPanelVisualization(), gbc);
+		
+		gbc.insets = new Insets(2, 2, 0, 2);
+		gbc.gridy = 3;
+		gbc.fill = GridBagConstraints.BOTH;
+		gbc.weighty = 1;
+		add(new JPanel(), gbc);
+	}
+	
+	public JPanel getJPanelButtons() {
+		if(panelButtons == null) {
+			panelButtons = new JPanel();
+			FlowLayout fl = new FlowLayout();
+			fl.setAlignment(FlowLayout.RIGHT);
+			fl.setHgap(2);
+			fl.setVgap(0);
+			panelButtons.setLayout(fl);
+			panelButtons.add(getButtonAccept(), fl);
+			panelButtons.add(getButtonCancel(), fl);
+		}
+		return panelButtons;
+	}
+	
+        private String getTranslation(String key) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            return i18nManager.getTranslation(key);
+        }
+        
+	public JPanel getJPanelInterval() {
+		if(panelInterval == null) {
+			panelInterval = new JPanel();
+			panelInterval.setBorder(BorderFactory.createTitledBorder(getTranslation("interval")));
+			panelInterval.setLayout(new BorderLayout());
+			panelInterval.add(getTimePanel(), BorderLayout.CENTER);
+			
+		}
+		return panelInterval;
+	}
+	
+	public JPanel getJPanelStep() {
+		if(panelWindowTime == null) {
+			panelWindowTime = new JPanel();
+			panelWindowTime.setBorder(BorderFactory.createTitledBorder(getTranslation("step")));
+			panelWindowTime.setLayout(new GridBagLayout());
+			
+			GridBagConstraints gbc = new GridBagConstraints();
+			gbc.insets = new Insets(2, 2, 4, 2);
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.anchor = GridBagConstraints.WEST;
+			gbc.weightx = 0;
+			
+			gbc.gridx = 0;
+			gbc.gridy = 0;
+			panelWindowTime.add(new JLabel(getTranslation("windowtime") + ":"), gbc);
+			
+			gbc.gridx = 1;
+			gbc.gridy = 0;
+			panelWindowTime.add(getJTextFieldTimeWindow(), gbc);
+			
+			gbc.gridx = 2;
+			gbc.gridy = 0;
+			panelWindowTime.add(getJComboTimeWindowScale(), gbc);
+			
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			gbc.gridx = 3;
+			gbc.gridy = 0;
+			panelWindowTime.add(new JPanel(), gbc);
+			
+			
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			
+			gbc.gridx = 0;
+			gbc.gridy = 1;
+			panelWindowTime.add(new JLabel(getTranslation("timestep") + ":"), gbc);
+			
+			gbc.gridx = 1;
+			gbc.gridy = 1;
+			panelWindowTime.add(getJTextFieldTimeStep(), gbc);
+			
+			gbc.gridx = 2;
+			gbc.gridy = 1;
+			panelWindowTime.add(getJComboTimeStepScale(), gbc);
+			
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			gbc.gridx = 3;
+			gbc.gridy = 1;
+			panelWindowTime.add(new JPanel(), gbc);
+			
+		}
+		return panelWindowTime;
+	}
+	
+	
+	public JPanel getJPanelVisualization() {
+		if(panelVisualization == null) {
+			panelVisualization = new JPanel();
+			panelVisualization.setBorder(BorderFactory.createTitledBorder(getTranslation("visualization")));
+
+			panelVisualization.setLayout(new GridBagLayout());
+			
+			GridBagConstraints gbc = new GridBagConstraints();
+			gbc.insets = new Insets(2, 2, 4, 2);
+			gbc.anchor = GridBagConstraints.WEST;
+			
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			gbc.gridwidth = 1;
+			gbc.gridx = 0;
+			gbc.gridy = 0;
+			panelVisualization.add(new JLabel(getTranslation("speed")), gbc);
+			
+			gbc.gridx = 1;
+			gbc.gridy = 0;
+			panelVisualization.add(getJTextFieldSpeed(), gbc);
+			
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			gbc.gridwidth = 3;
+			gbc.gridx = 2;
+			gbc.gridy = 0;
+			panelVisualization.add(getJSliderSpeed(), gbc);
+			
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			gbc.gridwidth = 1;
+			
+			gbc.gridx = 0;
+			gbc.gridy = 1;
+			panelVisualization.add(new JLabel(getTranslation("loop")), gbc);
+			
+			gbc.gridx = 1;
+			gbc.gridy = 1;
+			panelVisualization.add(getJComboLoopValue(), gbc);
+			
+			gbc.gridx = 2;
+			gbc.gridy = 1;
+			panelVisualization.add(getJTextFieldNLoops(), gbc);
+			
+			gbc.gridx = 3;
+			gbc.gridy = 1;
+			panelVisualization.add(new JLabel(getTranslation("iterations")), gbc);
+			
+			gbc.gridx = 4;
+			gbc.gridy = 1;
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			panelVisualization.add(new JPanel(), gbc);
+		}
+		return panelVisualization;
+	}
+	
+	public TimePanel getTimePanel() {
+		if(timePanel == null) {
+			timePanel = new TimePanel();
+			timePanel.initialize(startInstant, endInstant);
+		}
+		return timePanel;
+	}
+	
+	public JComboBox getJComboTimeWindowScale() {
+		if(comboTimeWindowScale == null) {
+			comboTimeWindowScale = new JComboBox();
+			comboTimeWindowScale.addItem(getTranslation("year"));
+			comboTimeWindowScale.addItem(getTranslation("month"));
+			comboTimeWindowScale.addItem(getTranslation("week"));
+			comboTimeWindowScale.addItem(getTranslation("day"));
+			comboTimeWindowScale.addItem(getTranslation("hour"));
+			comboTimeWindowScale.addItem(getTranslation("minute"));
+			comboTimeWindowScale.addItem(getTranslation("second"));
+			comboTimeWindowScale.addItem(getTranslation("millisecond"));
+			comboTimeWindowScale.setPreferredSize(new Dimension(150, 20));
+		}
+		return comboTimeWindowScale;
+	}
+	
+	public JComboBox getJComboTimeStepScale() {
+		if(comboTimeStepScale == null) {
+			comboTimeStepScale = new JComboBox();
+			comboTimeStepScale.addItem(getTranslation("year"));
+			comboTimeStepScale.addItem(getTranslation("month"));
+			comboTimeStepScale.addItem(getTranslation("week"));
+			comboTimeStepScale.addItem(getTranslation("day"));
+			comboTimeStepScale.addItem(getTranslation("hour"));
+			comboTimeStepScale.addItem(getTranslation("minute"));
+			comboTimeStepScale.addItem(getTranslation("second"));
+			comboTimeStepScale.addItem(getTranslation("millisecond"));
+			comboTimeStepScale.setPreferredSize(new Dimension(150, 20));
+		}
+		return comboTimeStepScale;
+	}
+	
+	public JComboBox getJComboLoopValue() {
+		if(comboLoopValue == null) {
+			comboLoopValue = new JComboBox();
+			comboLoopValue.addItem(getTranslation("noloop"));
+			comboLoopValue.addItem(getTranslation("loop"));
+			comboLoopValue.addItem(getTranslation("loop_n"));
+			comboLoopValue.addActionListener(this);
+			comboLoopValue.setPreferredSize(new Dimension(110, 20));
+		}
+		return comboLoopValue;
+	}
+	
+	public JSlider getJSliderSpeed() {
+		if(sliderSpeed == null) {
+			sliderSpeed = new JSlider(0, 10000);
+			sliderSpeed.setPaintTicks(true);
+			sliderSpeed.setMinorTickSpacing(100);
+			sliderSpeed.setMajorTickSpacing(1000);
+			sliderSpeed.addChangeListener(this);
+		}
+		return sliderSpeed;
+	}
+	
+	public JTextField getJTextFieldTimeWindow() {
+		if(textFieldTimeWindowValue == null) {
+			textFieldTimeWindowValue = new JTextField();
+			textFieldTimeWindowValue.setPreferredSize(new Dimension(70, 20));
+		}
+		return textFieldTimeWindowValue;
+	}
+	
+	public JTextField getJTextFieldTimeStep() {
+		if(textFieldTimeStep == null) {
+			textFieldTimeStep = new JTextField();
+			textFieldTimeStep.setPreferredSize(new Dimension(70, 20));
+		}
+		return textFieldTimeStep;
+	}
+	
+	public JTextField getJTextFieldNLoops() {
+		if(textFieldNLoops == null) {
+			textFieldNLoops = new JTextField();
+			textFieldNLoops.setPreferredSize(new Dimension(70, 20));
+		}
+		return textFieldNLoops;
+	}
+	
+	public JTextField getJTextFieldSpeed() {
+		if(textSpeed == null) {
+			textSpeed = new JTextField();
+			textSpeed.setPreferredSize(new Dimension(110, 20));
+			textSpeed.addActionListener(this);
+		}
+		return textSpeed;
+	}
+
+	/**
+	 * Scale default value for the time window. The value of the parameter is
+	 * defined as a constant in this class
+	 * @param timeWindowScale
+	 */
+	private void setDefaultTimeWindowScale(int timeWindowScale) {
+		getJComboTimeWindowScale().setSelectedIndex(timeWindowScale);
+	}
+
+	/**
+	 * Scale default value for the time step. The value of the parameter is
+	 * defined as a constant in this class
+	 * @param timeWindowScale
+	 */
+	private void setDefaultTimeStepScale(int timeStepScale) {
+		getJComboTimeStepScale().setSelectedIndex(timeStepScale);
+	}
+	
+	/**
+	 * Sets the time window initial value in the text field
+	 * @param timeWindowValue
+	 */
+	private void setInitialTimeWindowValue(double timeWindowValue) {
+		getJTextFieldTimeWindow().setText(format.format(timeWindowValue));
+	}
+
+	/**
+	 * Sets the time step initial value in the text field
+	 * @param timeStep
+	 */
+	private void setInitialTimeStep(int timeStep) {
+		getJTextFieldTimeStep().setText(format.format(timeStep));
+	}
+
+	/**
+	 * Sets the initial speed in milliseconds
+	 * @param speed
+	 */
+	private void setInitialSpeed(int speed) {
+		getJTextFieldSpeed().setText(speed + "");
+		getJSliderSpeed().setValue(speed);
+	}
+
+	/**
+	 * Sets the initial value for the loop. The value of the parameter is
+	 * defined as a constant in this class. The second parameter
+	 * is taken into account when the first parameter is three (LOOP_N)
+	 * @param loopValue
+	 * @param nIterations
+	 */
+	private void setInitialLoopValue(int loopValue, int nIterations) {
+		getJComboLoopValue().setSelectedIndex(loopValue);
+		getJTextFieldNLoops().setText(nIterations + "");
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == getJComboLoopValue()) {
+			if(getJComboLoopValue().getSelectedIndex() == TimeAnimation.LOOP_N)
+				getJTextFieldNLoops().setEnabled(true);
+			else
+				getJTextFieldNLoops().setEnabled(false);
+		}
+		if(e.getSource() == getJTextFieldSpeed()) {
+			try {
+				Integer value = new Integer(getJTextFieldSpeed().getText());
+				getJSliderSpeed().setValue(value);
+			}catch (NumberFormatException exc) {
+			}
+		}
+	}
+
+	public JButton getButtonAccept() {
+		if(buttonAccept == null)
+			buttonAccept = new JButton(getTranslation("accept"));
+		return buttonAccept;
+	}
+
+	public JButton getButtonCancel() {
+		if(buttonCancel == null)
+			buttonCancel = new JButton(getTranslation("cancel"));
+		return buttonCancel;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel#addAcceptCancelListener(java.awt.event.ActionListener)
+	 */
+	public void addAcceptCancelListener(ActionListener listener) {
+		getButtonAccept().addActionListener(listener);
+		getButtonCancel().addActionListener(listener);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel#getIDSource(java.lang.Object)
+	 */
+	public int getIDSource(Object obj) {
+		if(obj == getButtonAccept())
+			return TimeAnimationDataModel.ACCEPT;
+		if(obj == getButtonCancel())
+			return TimeAnimationDataModel.CANCEL;
+		return -1;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel#getOutput()
+	 */
+	public TimeAnimationDataModel getOutput() {
+		Interval interval = timePanel.getInterval();
+		dataModel.setTimeInterval((RelativeInstant)interval.getStart(),
+							(RelativeInstant)interval.getEnd());
+		try {
+			dataModel.setIterations(new Integer(getJTextFieldNLoops().getText()));
+		}catch (NumberFormatException e) {
+		}
+		dataModel.setSpeed(getJSliderSpeed().getValue());
+		try {
+			dataModel.setTimeStep(new Integer(getJTextFieldTimeStep().getText()));
+		}catch (NumberFormatException e) {
+		}
+		try {
+			dataModel.setWindowTime(new Integer(getJTextFieldTimeWindow().getText()));
+		}catch (NumberFormatException e) {
+		}
+		dataModel.setWindowTimeScale(getJComboTimeWindowScale().getSelectedIndex());
+		dataModel.setTimeStepScale(getJComboTimeStepScale().getSelectedIndex());
+		dataModel.setLoop(getJComboLoopValue().getSelectedIndex());
+		return dataModel;
+	}
+
+	public void stateChanged(ChangeEvent e) {
+		if(e.getSource() == getJSliderSpeed()) {
+			getJTextFieldSpeed().setText(getJSliderSpeed().getValue() + "");
+		}
+	}
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/animation/AnimationBarPanelImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/animation/AnimationBarPanelImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/animation/AnimationBarPanelImpl.java	(revision 42196)
@@ -0,0 +1,478 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.impl.panel.animation;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+import java.util.Observable;
+import java.util.Observer;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.api.panel.AnimationBarPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * Main panel for animation bar
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public class AnimationBarPanelImpl extends JPanel implements AnimationBarPanel, ActionListener, Observer {
+	private static final long  serialVersionUID          = 1L;
+	private static int         buttonSize                = 20;
+	private String             pattern                   = "dd/MM/yyyy HH:mm:ss:SSS";
+	
+	private JSlider            sliderSpeed               = null;
+	private JButton            buttonPlay                = null;
+	private JButton            buttonStop                = null;
+	private JButton            buttonPause               = null;
+	private JButton            buttonClose               = null;
+	private JTextField         textTimeStep              = null;
+	private JTextField         textTimeSpeed             = null;
+	private JTextField         textWindowTime            = null;
+	private JLabel             labelMinInterval          = null;
+	private JLabel             labelMaxInterval          = null;
+	private JLabel             timeStep                  = null;
+	private JLabel             speedOfProgress           = null;
+	
+	private JPanel             panelSlider               = null;
+	private JPanel             panelInfo                 = null;
+	private long               startMillis               = 0;
+	private long               endMillis                 = 0;
+	
+	public AnimationBarPanelImpl(TimeAnimationDataModel dataModel) {
+		((Observable)dataModel).addObserver(this);
+		setTimeWindow(dataModel.getInitTime(), dataModel.getEndTimeWindow());
+		setTimeInterval(dataModel.getInitTime(), dataModel.getEndTime());
+		setTimeStep(dataModel.getTimeStep(), dataModel.getTimeStepScale());
+		setSpeedOfProgress(dataModel.getSpeed());
+		
+		init();
+	}
+	
+	private void init() {
+		setLayout(new GridBagLayout());
+		
+		GridBagConstraints gbc = new GridBagConstraints();
+		gbc.insets = new Insets(2, 2, 2, 2);
+		gbc.fill = GridBagConstraints.HORIZONTAL;
+		gbc.weightx = 1;
+		
+		add(getPanelSlider(), gbc);
+		
+		gbc.gridy = 1;
+		add(getPanelInfo(), gbc);
+	}
+	
+	public JPanel getPanelInfo() {
+		if(panelInfo == null) {
+			panelInfo = new JPanel();
+			panelInfo.setLayout(new GridBagLayout());
+			
+			GridBagConstraints gbc = new GridBagConstraints();
+			gbc.insets = new Insets(2, 2, 2, 2);
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			
+			gbc.gridx = 0;
+			panelInfo.add(getLabelTimeStep(), gbc);
+			
+			gbc.gridx = 1;
+			panelInfo.add(getTextTimeStep(), gbc);
+			
+			gbc.gridx = 2;
+			panelInfo.add(getLabelSpeedOfProgress(), gbc);
+			
+			gbc.gridx = 3;
+			panelInfo.add(getTextSpeedOfProgress(), gbc);
+			
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			gbc.gridx = 4;
+			panelInfo.add(new JPanel(), gbc);
+			
+			/*gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			gbc.gridx = 5;
+			panelInfo.add(getButtonClose(), gbc);*/
+		}
+		return panelInfo;
+	}
+	
+	public JPanel getPanelSlider() {
+		if(panelSlider == null) {
+			panelSlider = new JPanel();
+			panelSlider.setLayout(new GridBagLayout());
+			
+			GridBagConstraints gbc = new GridBagConstraints();
+			gbc.insets = new Insets(2, 2, 2, 2);
+			
+			//Fila 0
+			
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			gbc.gridwidth = 5;
+			
+			gbc.gridx = 0;
+			gbc.gridy = 0;
+			panelSlider.add(getTextWindowTime(), gbc);
+			
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			gbc.gridwidth = 3;
+			
+			gbc.gridx = 5;
+			gbc.gridy = 0;
+			panelSlider.add(new JPanel(), gbc);
+			
+			//Fila 1
+			
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			gbc.gridwidth = 5;
+			gbc.gridx = 0;
+			gbc.gridy = 1;
+			panelSlider.add(getSliderSpeed(), gbc);
+			
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			
+			gbc.gridwidth = 1;
+			gbc.gridx = 5;
+			gbc.gridy = 1;
+			panelSlider.add(getButtonPlay(), gbc);
+			
+			gbc.gridx = 6;
+			gbc.gridy = 1;
+			panelSlider.add(getButtonStop(), gbc);
+			
+			gbc.gridx = 7;
+			gbc.gridy = 1;
+			panelSlider.add(getButtonPause(), gbc);
+			
+			//Fila 2
+			
+			gbc.gridx = 0;
+			gbc.gridy = 2;
+			panelSlider.add(getLabelMinInterval(), gbc);
+			
+			gbc.gridx = 1;
+			gbc.gridy = 2;
+			panelSlider.add(getTextTimeStep(), gbc);
+			
+			gbc.anchor = GridBagConstraints.EAST;
+			gbc.fill = GridBagConstraints.HORIZONTAL;
+			gbc.weightx = 1;
+			gbc.gridx = 2;
+			gbc.gridy = 2;
+			panelSlider.add(new JPanel(), gbc);
+			
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weightx = 0;
+			gbc.gridx = 3;
+			gbc.gridy = 2;
+			panelSlider.add(getTextSpeedOfProgress(), gbc);
+			
+			gbc.gridx = 4;
+			gbc.gridy = 2;
+			panelSlider.add(getLabelMaxInterval(), gbc);
+			
+			gbc.gridx = 5;
+			gbc.gridy = 2;
+			panelSlider.add(new JPanel(), gbc);
+		}
+		return panelSlider;
+	}
+	
+	public JSlider getSliderSpeed() {
+		if(sliderSpeed == null) {
+			sliderSpeed = new JSlider(0, 100);
+			sliderSpeed.setPaintTicks(true);
+			sliderSpeed.setMajorTickSpacing(10);
+			sliderSpeed.setMinorTickSpacing(1);
+			sliderSpeed.setValue(0);
+		}
+		return sliderSpeed;
+	}
+
+	public JButton getButtonPlay() {
+		if(buttonPlay == null) {
+			URL play = getClass().getClassLoader().getResource("org/gvsig/timesupport/swing/impl/images/play.png");
+			ImageIcon icon = new ImageIcon(play);
+			if(icon != null)
+				buttonPlay = new JButton(icon);
+			else 
+				buttonPlay = new JButton();
+			buttonPlay.setPreferredSize(new Dimension(buttonSize, buttonSize));
+			buttonPlay.addActionListener(this);
+			buttonPlay.setEnabled(true);
+		}
+		return buttonPlay;
+	}
+
+	public JButton getButtonStop() {
+		if(buttonStop == null) {
+			URL stop = getClass().getClassLoader().getResource("org/gvsig/timesupport/swing/impl/images/stop.png");
+			ImageIcon icon = new ImageIcon(stop);
+			if(icon != null)
+				buttonStop = new JButton(icon);
+			else 
+				buttonStop = new JButton();
+			buttonStop.setPreferredSize(new Dimension(buttonSize, buttonSize));
+			buttonStop.addActionListener(this);
+			buttonStop.setEnabled(false);
+		}
+		return buttonStop;
+	}
+
+	public JButton getButtonPause() {
+		if(buttonPause == null) {
+			URL pause = getClass().getClassLoader().getResource("org/gvsig/timesupport/swing/impl/images/pause.png");
+			ImageIcon icon = new ImageIcon(pause);
+			if(icon != null)
+				buttonPause = new JButton(icon);
+			else 
+				buttonPause = new JButton();
+			buttonPause.setPreferredSize(new Dimension(buttonSize, buttonSize));
+			buttonPause.addActionListener(this);
+			buttonPause.setEnabled(false);
+		}
+		return buttonPause;
+	}
+	
+	public JButton getButtonClose() {
+		if(buttonClose == null) {
+			URL close = getClass().getClassLoader().getResource("org/gvsig/timesupport/swing/impl/images/close.png");
+			ImageIcon icon = new ImageIcon(close);
+			if(icon != null)
+				buttonClose = new JButton(icon);
+			else 
+				buttonClose = new JButton();
+			buttonClose.setPreferredSize(new Dimension(buttonSize, buttonSize));
+			buttonClose.addActionListener(this);
+			buttonClose.setEnabled(true);
+		}
+		return buttonClose;
+	}
+	
+	public JLabel getLabelMinInterval() {
+		if(labelMinInterval == null) {
+			labelMinInterval = new JLabel("31/12/2000 12:00:00 AM", JLabel.LEFT);
+		}
+		return labelMinInterval;
+	}
+	
+	public JLabel getLabelMaxInterval() {
+		if(labelMaxInterval == null) {
+			labelMaxInterval = new JLabel("1/1/2012 12:00:00 AM", JLabel.RIGHT);
+		}
+		return labelMaxInterval;
+	}
+	
+	public JLabel getLabelTimeStep() {
+		if(timeStep == null) {
+                        I18nManager i18nManager = ToolsLocator.getI18nManager();
+			timeStep = new JLabel(i18nManager.getTranslation("timestep"));
+		}
+		return timeStep;
+	}
+
+	public JLabel getLabelSpeedOfProgress() {
+		if(speedOfProgress == null) {
+                        I18nManager i18nManager = ToolsLocator.getI18nManager();
+			speedOfProgress = new JLabel(i18nManager.getTranslation("speedofprogress"));
+		}
+		return speedOfProgress;
+	}
+
+	public JTextField getTextTimeStep() {
+		if(textTimeStep == null) {
+			textTimeStep = new JTextField("2 years");
+			textTimeStep.setPreferredSize(new Dimension(70, 20));
+			textTimeStep.setEditable(false);
+		}
+		return textTimeStep;
+	}
+
+	public JTextField getTextSpeedOfProgress() {
+		if(textTimeSpeed == null) {
+			textTimeSpeed = new JTextField();
+			textTimeSpeed.setPreferredSize(new Dimension(70, 20));
+			textTimeSpeed.setEditable(false);
+		}
+		return textTimeSpeed;
+	}
+
+	public JTextField getTextWindowTime() {
+		if(textWindowTime == null) {
+			textWindowTime = new JTextField();
+			textWindowTime.setEditable(false);
+			textWindowTime.setHorizontalAlignment(JTextField.CENTER);
+		}
+		return textWindowTime;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationBarPanel#setSpeedOfProgress(int)
+	 */
+	private void setSpeedOfProgress(int speed) {
+		getTextSpeedOfProgress().setText(speed + "");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationBarPanel#setTimeStep(int, int)
+	 */
+	private void setTimeStep(int timeStep, int scale) {
+		String textScale = "year";
+		switch (scale) {
+		case TimeAnimation.YEAR: textScale = "year"; break;
+		case TimeAnimation.MONTH: textScale = "month"; break;
+		case TimeAnimation.WEEK: textScale = "week"; break;
+		case TimeAnimation.DAY: textScale = "day"; break;
+		case TimeAnimation.HOUR: textScale = "hour"; break;
+		case TimeAnimation.MINUTE: textScale = "minute"; break;
+		case TimeAnimation.SECOND: textScale = "second"; break;
+		case TimeAnimation.MILLISECOND: textScale = "millisecond"; break;
+		}
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+		getTextTimeStep().setText(timeStep + " " + i18nManager.getTranslation(textScale));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationBarPanel#setTimeInterval(org.gvsig.timesupport.RelativeInstant, org.gvsig.timesupport.RelativeInstant)
+	 */
+	private void setTimeInterval(RelativeInstant start, RelativeInstant end) {
+		startMillis = start.toMillis();
+		endMillis = end.toMillis();
+		getLabelMinInterval().setText(start.toString(pattern));
+		getLabelMaxInterval().setText(end.toString(pattern));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationBarPanel#setTimeWindow(org.gvsig.timesupport.RelativeInstant, org.gvsig.timesupport.RelativeInstant)
+	 */
+	private void setTimeWindow(RelativeInstant start, RelativeInstant end) {
+		getTextWindowTime().setText(start.toString(pattern) + " to " + end.toString(pattern));
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationBarPanel#updateSliderPosition(org.gvsig.timesupport.RelativeInstant)
+	 */
+	public void updateSliderPosition(RelativeInstant start) {
+		long dist = endMillis - startMillis;
+		long s = start.toMillis();
+		long dist1 = s - startMillis;
+		if(dist > 0) {
+			int positionBar = (int)((dist1 * 100) / dist);
+			getSliderSpeed().setValue(positionBar);
+		}
+	}
+	
+	/**
+	 * Adds the listener for de accept button
+	 * @param listener
+	 */
+	public void addButtonsListener(ActionListener listener) {
+		getButtonPlay().addActionListener(listener);
+		getButtonPause().addActionListener(listener);
+		getButtonStop().addActionListener(listener);
+		getButtonClose().addActionListener(listener);
+	}
+	
+	/**
+	 * Gets the ID of the component selected. The ID is a constant defined in this
+	 * interface. This is useful to know which component is throwing an event. 
+	 * @return
+	 */
+	public int getIDSource(Object obj) {
+		if(obj == getButtonPlay())
+			return TimeAnimationDataModel.PLAY;
+		if(obj == getButtonStop())
+			return TimeAnimationDataModel.STOP;
+		if(obj == getButtonPause())
+			return TimeAnimationDataModel.PAUSE;
+		if(obj == getButtonClose())
+			return TimeAnimationDataModel.CLOSE;
+		return -1;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == getButtonPlay()) {
+			getButtonPlay().setEnabled(false);
+			getButtonStop().setEnabled(true);
+			getButtonPause().setEnabled(true);
+		}
+		if(e.getSource() == getButtonStop()) {
+			getButtonPlay().setEnabled(true);
+			getButtonStop().setEnabled(false);
+			getButtonPause().setEnabled(false);
+		}
+		if(e.getSource() == getButtonPause()) {
+			if(!getButtonPlay().isEnabled() && getButtonStop().isEnabled()) { //Si est� en marcha
+				getButtonPlay().setEnabled(false);
+				getButtonStop().setEnabled(false);
+				getButtonPause().setEnabled(true);
+			} else {
+				getButtonPlay().setEnabled(false);
+				getButtonStop().setEnabled(true);
+				getButtonPause().setEnabled(true);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.swing.api.panel.AnimationBarPanel#resetButtonsStatus()
+	 */
+	public void resetButtonsStatus() {
+		getButtonPlay().setEnabled(true);
+		getButtonStop().setEnabled(false);
+		getButtonPause().setEnabled(false);
+		getButtonClose().setEnabled(true);
+	}
+
+	public void update(Observable o, Object arg) {
+		TimeAnimationDataModel dataModel = (TimeAnimationDataModel)o;
+		setTimeWindow(dataModel.getInitTimeWindow(), dataModel.getEndTimeWindow());
+		updateSliderPosition(dataModel.getSliderPosition());
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/DefaultTimeSliderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/DefaultTimeSliderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/DefaultTimeSliderPanel.java	(revision 42196)
@@ -0,0 +1,341 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+package org.gvsig.timesupport.swing.impl.panel;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.border.Border;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.RelativeInterval;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanel;
+import org.gvsig.timesupport.swing.impl.components.InstantComparator;
+import org.gvsig.timesupport.swing.impl.panel.TimePanel.TIME_MODE;
+import org.gvsig.timesupport.swing.impl.rdv.TimeAdjustmentListener;
+import org.gvsig.timesupport.swing.impl.rdv.TimeEvent;
+import org.gvsig.tools.observer.Observer;
+
+/**
+ * Creates a panel with slider and time control calendars
+ * 
+ * @author <a href="mailto:Pablo.Viciano@uji.es">Pablo Viciano Negre</a>
+ * 
+ */
+public class DefaultTimeSliderPanel extends TimeSelectorPanel implements
+		TimeAdjustmentListener {
+
+	private static final long serialVersionUID = 213502960867760481L;
+
+	private JRadioButton rdbNone = null;
+	private JRadioButton rdbInterval = null;
+	private JRadioButton rdbInstant = null;
+	private TimePanel timePanel = null;
+	private List<Observer> observers = null;
+	private JButton btnClose = null;
+	private String title = null;
+	private Interval interval;
+	
+	public DefaultTimeSliderPanel() {
+		super();
+		observers = new ArrayList<Observer>();
+	}
+
+    @Override
+    public void initialize(Interval interval) {
+    	this.interval = interval;
+        initialize(this.interval.getStart(), this.interval.getEnd());
+    }
+	
+	/**
+	 * Intializes in x, y coordinates and start,end dates
+	 * 
+	 * @param x
+	 * @param y
+	 * @param start
+	 * @param end
+	 */
+	public void initialize(Instant start, Instant end) {
+	    removeAll();
+        revalidate();
+        repaint();
+		createUI();
+		if(start.isAbsolute())
+			timePanel.setTimeMode(TIME_MODE.ABSOLUTE, start, end);
+		else
+			timePanel.setTimeMode(TIME_MODE.RELATIVE, start, end);
+	}
+
+	public void timeChanged(TimeEvent event) {
+		if (getInstantRadioButton().isSelected()) {
+			    Instant instante =  timePanel.getInstant();
+				if (this.observers.size() != 0)
+					for (Observer o : this.observers)
+						o.update(this, new UpdateTimeNotification(instante));
+		}
+	}
+
+	public void rangeChanged(TimeEvent event) {
+		if (getIntervalRadioButton().isSelected()) {
+				if (this.observers.size() != 0)
+					for (Observer o : this.observers)
+						o.update(this, new UpdateTimeNotification(timePanel.getInterval()));
+		}
+	}
+
+	public void boundsChanged(TimeEvent event) {
+
+	}
+
+	@Override
+	public void setBounds(Rectangle r) {
+		super.setBounds(new Rectangle(r.x, r.y, WIDTH, HEIGHT));
+	}
+
+	
+	public boolean isInterval() {
+		// TODO Auto-generated method stub
+		return getIntervalRadioButton().isSelected();
+	}
+	
+	public boolean isInstant() {
+		// TODO Auto-generated method stub
+		return getInstantRadioButton().isSelected();
+	}
+	
+	public boolean isNone() {
+		// TODO Auto-generated method stub
+		return getNoneRadioButton().isSelected();
+	}
+
+	public void addObserver(Observer o) {
+		// TODO Auto-generated method stub
+		observers.add(o);
+	}
+
+	public void deleteObserver(Observer o) {
+		// TODO Auto-generated method stub
+		observers.remove(o);
+	}
+
+	public void deleteObservers() {
+		// TODO Auto-generated method stub
+		observers.clear();
+	}
+	
+	public void setInstants(Instant start, Instant end) {	
+		timePanel.setInstants(start, end);
+	}
+	
+	/*
+	 * PRIVATE METHODS
+	 */
+	private void createUI() {
+		Border etchedBdr = BorderFactory.createEtchedBorder();
+		Border titledBdr = BorderFactory.createTitledBorder(etchedBdr,
+				Messages.getText("temporal_filter"));
+		setBorder(titledBdr);
+
+		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+		//getChkBoxChange().addChangeListener(this);
+
+		add(createRadioButtons());
+
+		timePanel = new TimePanel();
+		timePanel.setListener(this);
+
+		add(timePanel);
+
+		getBtnClose().addActionListener(new TemporalActionListener(this));
+		getBtnClose().setPreferredSize(new Dimension(110, 30));
+		JPanel panel2 = new JPanel();
+		panel2.setLayout(new BorderLayout());
+		JPanel panel = new JPanel(new GridBagLayout());
+	    GridBagConstraints c = new GridBagConstraints();
+		c.fill = GridBagConstraints.HORIZONTAL;
+	    c.weightx = 0.5;
+	    c.gridx = 2;
+	    c.gridy = 0;
+		panel.add(getBtnClose(),c);
+		panel2.add(panel, BorderLayout.EAST);
+		add(panel2);
+
+		timePanel.fireRangeInterval();
+	}
+
+	private JPanel createRadioButtons() {
+		ButtonGroup group = new ButtonGroup();
+		getNoneRadioButton().addActionListener(new ActionNoneButton(this));
+		group.add(getNoneRadioButton());
+		getIntervalRadioButton().addActionListener(new ActionListener() {
+
+			public void actionPerformed(ActionEvent e) {
+				timePanel.setEnabled(true);
+				timePanel.resetValues();
+				timePanel.setValueChangeableSlider(false);
+				timePanel.fireRangeInterval();
+			}
+		});
+		getIntervalRadioButton().setSelected(true);
+		group.add(getIntervalRadioButton());
+		getInstantRadioButton().addActionListener(new ActionListener() {
+
+			public void actionPerformed(ActionEvent e) {
+				timePanel.setEnabled(true);
+				timePanel.setEnabledEndCalendar(false);
+				timePanel.setValueChangeableSlider(true);
+				
+				timePanel.resetValues();
+				timePanel.fireValueInstant();
+			}
+		});
+		group.add(getInstantRadioButton());
+		// return group;
+		JPanel radio = new JPanel();
+		radio.setLayout(new FlowLayout());
+		radio.add(getNoneRadioButton());
+		radio.add(getIntervalRadioButton());
+		radio.add(getInstantRadioButton());
+
+		return radio;
+	}
+
+	private JRadioButton getNoneRadioButton() {
+		if (rdbNone == null)
+			rdbNone = new JRadioButton(Messages.getText("rdButton_none"));
+		return rdbNone;
+	}
+
+	private JRadioButton getIntervalRadioButton() {
+		if (rdbInterval == null)
+			rdbInterval = new JRadioButton(
+					Messages.getText("rdButton_interval"));
+		return rdbInterval;
+	}
+
+	private JRadioButton getInstantRadioButton() {
+		if (rdbInstant == null)
+			rdbInstant = new JRadioButton(Messages.getText("rdButton_instant"));
+		return rdbInstant;
+	}
+
+	public class TemporalActionListener implements ActionListener {
+
+		private TimeSelectorPanel frame = null;
+
+		public TemporalActionListener(TimeSelectorPanel p) {
+			frame = p;
+		}
+
+		public void actionPerformed(ActionEvent e) {
+		    for (Observer o : observers)
+                o.update(frame, new CloseSelectorPanelNotification());
+			frame.setVisible(false);
+		}
+
+	}
+
+	private JButton getBtnClose() {
+		if (btnClose == null)
+			btnClose = new JButton(Messages.getText("temporal_btn_cancel"));
+		return btnClose;
+	}
+
+	void noneButtonAction() {
+		if (this.observers.size() != 0)
+			for (Observer o : this.observers)
+				o.update(this, new UpdateTimeNotification(null));
+	}
+
+	private class ActionNoneButton implements ActionListener {
+		private DefaultTimeSliderPanel panel;
+
+		public ActionNoneButton(DefaultTimeSliderPanel panel) {
+			this.panel = panel;
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			// TODO Auto-generated method stub
+			timePanel.setEnabled(false);
+			
+			this.panel.noneButtonAction();
+		}
+
+	}
+
+	public void setInterval(Interval interval) {
+		timePanel.setInterval((RelativeInterval)interval);	
+	}
+
+
+	@Override
+	public void setName(String name) {
+		// TODO Auto-generated method stub
+		this.title = name;
+	}
+
+	@Override
+	public String getName() {
+		// TODO Auto-generated method stub
+		return this.title;
+	}
+
+    @Override
+    public void setInstants(List<Instant> instants) {
+        // TODO Auto-generated method stub
+        java.util.Collections.sort(instants, new InstantComparator());
+        //Delete duplicates
+        Iterator<Instant> iterador = instants.iterator();
+        List<Instant> sortedList = new ArrayList<Instant>();
+        Instant obj;
+        while(iterador.hasNext()){
+            obj = iterador.next();
+            if(!sortedList.contains(obj)){
+                 sortedList.add(obj);
+            }
+        }
+        timePanel.setInstants(sortedList);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/UpdateTimeNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/UpdateTimeNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/main/java/org/gvsig/timesupport/swing/impl/panel/UpdateTimeNotification.java	(revision 42196)
@@ -0,0 +1,48 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.impl.panel;
+
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanelNotification;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class UpdateTimeNotification implements TimeSelectorPanelNotification{
+    private Time time = null;
+   
+    public UpdateTimeNotification(Time time) {
+        super();
+        this.time = time;
+    }
+
+    public Time getTime() {
+       return time;
+    }
+
+    public String getType() {       
+        return TimeSelectorPanelNotification.UPDATE_TIME;
+    } 
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestTimePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestTimePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestTimePanel.java	(revision 42196)
@@ -0,0 +1,83 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.impl;
+
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.swing.impl.panel.TimePanel;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Test for the panel TimeSupportManager
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public class TestTimePanel implements ActionListener {
+		private int                          w        = 500;
+		private int                          h        = 250;
+		private JFrame                       frame    = new JFrame();
+		private TimePanel                    desc     = null;
+
+		public TestTimePanel() {
+			new DefaultLibrariesInitializer().fullInitialize();
+			desc = new TimePanel();
+			TimeSupportManager timeSupportManager = TimeSupportLocator.getManager();
+			RelativeInstant startInstant = timeSupportManager.createRelativeInstant(2000, 1, 1, 12, 00, 00, 00);
+			RelativeInstant endInstant = timeSupportManager.createRelativeInstant(2010, 1, 12, 13, 30, 00, 00);
+			desc.initialize(startInstant, endInstant);
+			frame.getContentPane().add(desc);
+			frame.setSize(w, h);
+			frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+			frame.setVisible(true);
+		}
+
+		public static void main(String[] args) {
+			new TestTimePanel();
+		}
+
+		private boolean doubleSize = false;
+		public void actionPerformed(ActionEvent e) {
+			if(!doubleSize)
+				frame.setSize(w * 2, h);
+			else
+				frame.setSize(w, h);
+			doubleSize = !doubleSize;
+		}
+
+//		public void stateChanged(ChangeEvent e) {
+//			if(e.getSource() == desc.getTabs()) {
+//				if(desc.getTabs().getSelectedIndex() == 2) {
+//					frame.setSize(w, 600);
+//				} else {
+//					frame.setSize(w, h);
+//				}
+//			}
+//		}
+	}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestAnimationPreferencesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestAnimationPreferencesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestAnimationPreferencesPanel.java	(revision 42196)
@@ -0,0 +1,92 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.impl;
+
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.swing.impl.panel.animation.AnimationPreferencesPanelImpl;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Test for the panel AnimationPreferencesPanelImpl
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ */
+public class TestAnimationPreferencesPanel implements ActionListener {
+		private int                              w        = 600;
+		private int                              h        = 380;
+		private JFrame                           frame    = new JFrame();
+		private AnimationPreferencesPanelImpl    desc     = null;
+
+		public TestAnimationPreferencesPanel() {
+			new DefaultLibrariesInitializer().fullInitialize();
+			TimeSupportManager timeSupportManager = TimeSupportLocator.getManager();
+			RelativeInstant startInstant = timeSupportManager.createRelativeInstant(2000, 1, 1, 12, 00, 00, 00);
+			RelativeInstant endInstant = timeSupportManager.createRelativeInstant(2010, 1, 12, 13, 30, 00, 00);
+			TimeAnimation animation = timeSupportManager.createTimeAnimation();
+			animation.getDataModel().setTimeInterval(startInstant, endInstant);
+			animation.getDataModel().setWindowTimeScale(0);
+			animation.getDataModel().setTimeStepScale(0);
+			animation.getDataModel().setWindowTime(1);
+			animation.getDataModel().setTimeStep(1);
+			animation.getDataModel().setSpeed(1500);
+			animation.getDataModel().setLoop(TimeAnimation.NO_LOOP);
+			animation.getDataModel().setIterations(0);
+			
+			desc = new AnimationPreferencesPanelImpl(animation.getDataModel());
+			frame.getContentPane().add(desc);
+			frame.setSize(w, h);
+			frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+			frame.setVisible(true);
+		}
+
+		public static void main(String[] args) {
+			new TestAnimationPreferencesPanel();
+		}
+
+		private boolean doubleSize = false;
+		public void actionPerformed(ActionEvent e) {
+			if(!doubleSize)
+				frame.setSize(w * 2, h);
+			else
+				frame.setSize(w, h);
+			doubleSize = !doubleSize;
+		}
+
+//		public void stateChanged(ChangeEvent e) {
+//			if(e.getSource() == desc.getTabs()) {
+//				if(desc.getTabs().getSelectedIndex() == 2) {
+//					frame.setSize(w, 600);
+//				} else {
+//					frame.setSize(w, h);
+//				}
+//			}
+//		}
+	}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestAnimationBarPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestAnimationBarPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/java/org/gvsig/timesupport/swing/impl/TestAnimationBarPanel.java	(revision 42196)
@@ -0,0 +1,95 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.swing.impl;
+
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.impl.panel.animation.AnimationBarPanelImpl;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Test for the panel AnimationPreferencesPanelImpl
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ * 
+ */
+public class TestAnimationBarPanel implements ActionListener {
+		private int                              w        = 600;
+		private int                              h        = 200;
+		private JFrame                           frame    = new JFrame();
+		private AnimationBarPanelImpl            desc     = null;
+
+		public TestAnimationBarPanel() {
+			new DefaultLibrariesInitializer().fullInitialize();
+			TimeSupportManager timeSupportManager = TimeSupportLocator.getManager();
+			RelativeInstant startInstant = timeSupportManager.createRelativeInstant(2000, 1, 1, 12, 00, 00, 00);
+			RelativeInstant endInstant = timeSupportManager.createRelativeInstant(2001, 1, 12, 13, 30, 00, 00);
+			TimeAnimation animation = timeSupportManager.createTimeAnimation();
+			TimeAnimationDataModel model = animation.getDataModel();
+			model.setTimeStep(3);
+			model.setTimeStepScale(TimeAnimation.HOUR);
+			model.setSpeed(5);
+			model.setTimeWindow(startInstant, endInstant);
+			
+			RelativeInstant start = timeSupportManager.createRelativeInstant(1990, 1, 1, 12, 00, 00, 00);
+			RelativeInstant end = timeSupportManager.createRelativeInstant(2010, 1, 12, 13, 30, 00, 00);
+			model.setTimeInterval(start, end);
+			
+			desc = new AnimationBarPanelImpl(animation.getDataModel());
+			frame.getContentPane().add(desc);
+			frame.setSize(w, h);
+			frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+			frame.setVisible(true);
+		}
+
+		public static void main(String[] args) {
+			new TestAnimationBarPanel();
+		}
+
+		private boolean doubleSize = false;
+		public void actionPerformed(ActionEvent e) {
+			if(!doubleSize)
+				frame.setSize(w * 2, h);
+			else
+				frame.setSize(w, h);
+			doubleSize = !doubleSize;
+		}
+
+//		public void stateChanged(ChangeEvent e) {
+//			if(e.getSource() == desc.getTabs()) {
+//				if(desc.getTabs().getSelectedIndex() == 2) {
+//					frame.setSize(w, 600);
+//				} else {
+//					frame.setSize(w, h);
+//				}
+//			}
+//		}
+	}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.timesupport">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl/pom.xml	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.swing.impl</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.swing</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.toedter</groupId>
+            <artifactId>jcalendar</artifactId> 				
+            <scope>compile</scope>
+        </dependency>	
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>	
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/org.gvsig.timesupport.swing.impl
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/org.gvsig.timesupport.swing/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.swing</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <modules>
+        <module>org.gvsig.timesupport.swing.api</module>
+        <module>org.gvsig.timesupport.swing.impl</module>
+    </modules>
+</project>
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.timesupport/pom.xml	(revision 42196)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.timesupport</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <description>TimeSupport example project</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.library</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>animal-sniffer-maven-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+    </build>
+    <dependencyManagement>
+        <dependencies>
+
+            <dependency>
+                <groupId>org.swinglabs</groupId>
+                <artifactId>swingx</artifactId>  	
+                <version>1.6</version>
+            </dependency>
+            <dependency>
+                <groupId>com.toedter</groupId>
+                <artifactId>jcalendar</artifactId>
+                <version>1.3.2</version>  				
+            </dependency>	
+        </dependencies>
+    </dependencyManagement>
+
+
+    <modules>
+        <module>org.gvsig.timesupport.lib</module>
+        <module>org.gvsig.timesupport.swing</module>	
+    </modules>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/resources/images/installpackageicon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/resources/images/installpackageicon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/resources/images/makepluginpackageicon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/resources/images/makepluginpackageicon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBundleLauncher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBundleLauncher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBundleLauncher.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.utils;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class CreateBundleLauncher {
+
+	public static void main(String[] args) {
+		new CreateBundleLauncher();
+	}
+
+	public CreateBundleLauncher() {
+		super();
+		CreateBoundleFrame createBoundleFrame = new CreateBoundleFrame();
+		createBoundleFrame.setBounds(0, 0, 500, 150);
+		createBoundleFrame.setVisible(true);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBundleLauncher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/FrameWizardListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/FrameWizardListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/FrameWizardListener.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.utils;
+
+import javax.swing.JFrame;
+
+import org.gvsig.installer.swing.api.wizard.InstallerWizardActionListener;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class FrameWizardListener implements InstallerWizardActionListener {
+
+	private JFrame frame = null;
+
+	public FrameWizardListener(JFrame frame) {
+		super();
+		this.frame = frame;
+	}
+
+	public void cancel(InstallerWizardPanel installerWizard) {
+		frame.setVisible(false);
+		System.exit(0);
+
+	}
+
+	public void finish(InstallerWizardPanel installerWizard) {
+		frame.setVisible(false);
+		System.exit(0);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/FrameWizardListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBoundleFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBoundleFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBoundleFrame.java	(revision 42196)
@@ -0,0 +1,193 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.utils;
+
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+
+import org.gvsig.gui.beans.openfile.FileTextField;
+import org.gvsig.installer.lib.impl.utils.Compress;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class CreateBoundleFrame extends JFrame implements WindowListener,
+		ActionListener {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = -2128261599641241144L;
+	private javax.swing.JButton executeButton;
+	private javax.swing.JLabel inputLabel;
+	private FileTextField inputText;
+	private javax.swing.JLabel jLabel2;
+	private FileTextField outputText;
+
+	public CreateBoundleFrame() throws HeadlessException {
+		super();
+		initializeComponents();
+		this.addWindowListener(this);
+		executeButton.addActionListener(this);
+	}
+
+	private void initializeComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		inputLabel = new javax.swing.JLabel();
+		executeButton = new javax.swing.JButton();
+		inputText = new FileTextField();
+		outputText = new FileTextField();
+		jLabel2 = new javax.swing.JLabel();
+
+		setLayout(new java.awt.GridBagLayout());
+
+		inputLabel.setText("Input directory");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(inputLabel, gridBagConstraints);
+
+		executeButton.setText("Execute");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(executeButton, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.ipadx = 67;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(inputText, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.ipadx = 67;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(outputText, gridBagConstraints);
+
+		jLabel2.setText("Output");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(jLabel2, gridBagConstraints);
+
+	}
+
+	public void windowActivated(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void windowClosed(WindowEvent arg0) {
+		System.exit(0);
+
+	}
+
+	public void windowClosing(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void windowDeactivated(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void windowDeiconified(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void windowIconified(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void windowOpened(WindowEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void actionPerformed(ActionEvent arg0) {
+		File inputDirectory = inputText.getSelectedFile();
+		File outputFile = outputText.getSelectedFile();
+
+		if (!inputDirectory.exists()) {
+			JOptionPane
+					.showMessageDialog(this, "Input directory doesn't exist");
+			return;
+		}
+
+		if (outputFile.exists()) {
+			outputFile.delete();
+		}
+
+		Compress compress = new Compress();
+		try {
+			File[] files = inputDirectory.listFiles();
+			List<File> filesArray = new ArrayList<File>();
+			List<String> fileNamesArray = new ArrayList<String>();
+			for (int i = 0; i < files.length; i++) {
+				if (!files[i].getName().toUpperCase().equals(".SVN")) {
+					filesArray.add(files[i]);
+					fileNamesArray.add(files[i].getName());
+				}
+			}
+			compress.compressPluginsAsPackageSet(filesArray, fileNamesArray,
+					new FileOutputStream(outputFile));
+		} catch (Exception e) {
+			JOptionPane.showMessageDialog(this, e.toString());
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/utils/CreateBoundleFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageServiceFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageServiceFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageServiceFrame.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.execution;
+
+import java.io.File;
+
+import javax.swing.JFrame;
+
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.main.utils.FrameWizardListener;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.api.execution.InstallPackageWizardException;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageServiceFrame extends JFrame {
+
+	private static final long serialVersionUID = -5107758157530922356L;
+	private AbstractInstallPackageWizard installerExecutionWizard;
+
+	public InstallPackageServiceFrame(File applicationFolder, File installFolder)
+			throws LocatorException, InstallPackageWizardException {
+		super();
+		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		installerExecutionWizard = SwingInstallerLocator
+				.getSwingInstallerManager().createInstallPackageWizard(
+						applicationFolder, installFolder);
+		installerExecutionWizard
+				.setWizardActionListener(new FrameWizardListener(this));
+		this.add(installerExecutionWizard);
+		pack();
+	}
+
+	public void installFromDefaultDirectory()
+			throws InstallPackageServiceException {
+		installerExecutionWizard.installFromDefaultDirectory();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageServiceFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardFromDefaultDirectoryLauncher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardFromDefaultDirectoryLauncher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardFromDefaultDirectoryLauncher.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.execution;
+
+import java.io.IOException;
+
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.main.DefaultLauncher;
+import org.gvsig.installer.swing.api.execution.InstallPackageWizardException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageWizardFromDefaultDirectoryLauncher extends
+		DefaultLauncher {
+
+	public static void main(String[] args) throws LocatorException,
+			InstallPackageServiceException, InstallPackageWizardException,
+			IOException {
+		new DefaultLibrariesInitializer().fullInitialize();
+		new InstallPackageWizardFromDefaultDirectoryLauncher();
+	}
+
+	public InstallPackageWizardFromDefaultDirectoryLauncher()
+			throws LocatorException, InstallPackageWizardException,
+			InstallPackageServiceException, IOException {
+
+		InstallPackageServiceFrame frame = new InstallPackageServiceFrame(
+				getApplicationFolder(), getInstallFolder());
+		frame.installFromDefaultDirectory();
+		frame.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardFromDefaultDirectoryLauncher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardLauncher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardLauncher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardLauncher.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.execution;
+
+import java.io.IOException;
+
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.main.DefaultLauncher;
+import org.gvsig.installer.swing.api.execution.InstallPackageWizardException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageWizardLauncher extends DefaultLauncher {
+
+	public static void main(String[] args) throws LocatorException,
+			InstallPackageServiceException, InstallPackageWizardException,
+			IOException {
+		new DefaultLibrariesInitializer().fullInitialize();
+		new InstallPackageWizardLauncher();
+	}
+
+	public InstallPackageWizardLauncher() throws LocatorException,
+			InstallPackageWizardException, InstallPackageServiceException,
+			IOException {
+
+		InstallPackageServiceFrame frame = new InstallPackageServiceFrame(
+				getApplicationFolder(), getInstallFolder());
+		frame.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/execution/InstallPackageWizardLauncher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageWizardLauncher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageWizardLauncher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageWizardLauncher.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.creation;
+
+import java.io.IOException;
+
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.main.DefaultLauncher;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizardException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePluginPackageWizardLauncher extends DefaultLauncher {
+
+	public static void main(String[] args) throws LocatorException,
+			MakePluginPackageWizardException, IOException,
+			MakePluginPackageServiceException {
+		new DefaultLibrariesInitializer().fullInitialize();
+		new MakePluginPackageWizardLauncher();
+	}
+
+	public MakePluginPackageWizardLauncher() throws LocatorException,
+			MakePluginPackageWizardException, IOException,
+			MakePluginPackageServiceException {
+
+		MakePluginPackageFrame frame = new MakePluginPackageFrame(
+				getApplicationFolder(), getInstallFolder());
+		frame.setVisible(true);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageWizardLauncher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageFrame.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main.creation;
+
+import java.io.File;
+
+import javax.swing.JFrame;
+
+import org.gvsig.installer.main.utils.FrameWizardListener;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizard;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizardException;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePluginPackageFrame extends JFrame {
+
+	private static final long serialVersionUID = 4144834319158286247L;
+	private MakePluginPackageWizard installerCreationWizard;
+
+	public MakePluginPackageFrame(File applicationFolder, File installFolder)
+			throws LocatorException, MakePluginPackageWizardException {
+		super();
+		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		installerCreationWizard = SwingInstallerLocator
+				.getSwingInstallerManager().createMakePluginPackageWizard(
+						applicationFolder, installFolder);
+		installerCreationWizard
+				.setWizardActionListener(new FrameWizardListener(this));
+		this.add(installerCreationWizard);
+		pack();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/creation/MakePluginPackageFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/DefaultLauncher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/DefaultLauncher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/DefaultLauncher.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.main;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultLauncher {
+
+	private File appFolder;
+
+	public File getApplicationFolder() throws IOException {
+		if (appFolder == null) {
+			File templateFile = new File(getClass().getClassLoader()
+					.getResource("application").getFile());
+			appFolder = new File(System.getProperty("java.io.tmpdir")
+					+ File.separator + "tmp_gvsig_installer");
+
+			copy(templateFile, appFolder);
+		}
+
+		return appFolder;
+	}
+
+	public File getPluginsFolder() throws IOException {
+		return new File(appFolder, "plugins");
+	}
+
+	public File getInstallFolder() throws IOException {
+		return new File(appFolder, "install");
+	}
+
+	public void copy(File sourceLocation, File targetLocation)
+			throws IOException {
+		if (sourceLocation.isDirectory()) {
+			if (!targetLocation.exists()) {
+				targetLocation.mkdir();
+			}
+
+			String[] children = sourceLocation.list();
+			for (int i = 0; i < children.length; i++) {
+				copy(new File(sourceLocation, children[i]), new File(
+						targetLocation, children[i]));
+			}
+		} else {
+			targetLocation.getParentFile().mkdirs();
+
+			InputStream in = new FileInputStream(sourceLocation);
+			OutputStream out = new FileOutputStream(targetLocation);
+
+			// Copy the bits from instream to outstream
+			byte[] buf = new byte[1024];
+			int len;
+			while ((len = in.read(buf)) > 0) {
+				out.write(buf, 0, len);
+			}
+			in.close();
+			out.close();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/src/main/java/org/gvsig/installer/main/DefaultLauncher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/pom.xml	(revision 42196)
@@ -0,0 +1,50 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.main</artifactId>
+  <packaging>jar</packaging>
+  <name>org.gvsig.installer.main</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.prov.plugin</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.installer.swing.impl</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.main
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.installer.lib.api.InstallerLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageServiceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageServiceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageServiceException.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api.execution;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Base exception for all the exceptions that are thrown by the process of
+ * installation of a package. The {@link InstallPackageService} throws this
+ * exception on its methods.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageServiceException extends BaseException {
+
+	private static final String message = "Error installing a package";
+
+	private static final long serialVersionUID = -7645352975209203727L;
+
+	private static final String KEY = "installer_execution_exception";
+
+	/**
+	 * @see BaseException#BaseException(String, long)
+	 */
+	public InstallPackageServiceException() {
+		super(message, KEY, serialVersionUID);
+	}
+
+	/**
+	 * @see BaseException#BaseException(Throwable, String, long)
+	 */
+	public InstallPackageServiceException(Throwable cause) {
+		super(message, cause, KEY, serialVersionUID);
+	}
+
+	protected InstallPackageServiceException(String message, Throwable cause,
+			String key, long code) {
+		super(message, cause, key, code);
+	}
+
+	protected InstallPackageServiceException(String message, String key,
+			long code) {
+		super(message, key, code);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageServiceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageService.java	(revision 42196)
@@ -0,0 +1,197 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api.execution;
+
+import java.io.File;
+import java.net.URL;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * <p>
+ * This service is used to read a bundle file and install the packages contained
+ * in it. It has methods to read the packages contained in a bundle and to
+ * install one of them.
+ * </p>
+ * <p>
+ * The bundle is a file that has been created using the
+ * {@link MakePluginPackageService} service. It is possible to create an
+ * installer manually, but it has to have the structure defined by the
+ * {@link InstallerManager} class.
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface InstallPackageService extends Service {
+
+	public void reset();
+
+	/**
+	 * Adds a the URI of a bundle that contains some packages to install. A
+	 * bundle is a compressed zip file with a structure defined in the
+	 * {@link InstallerManager} class.
+	 * 
+	 * @param bundleURI
+	 *            the URI of a bundle.
+	 * @throws InstallPackageServiceException
+	 *             it is thrown if there is an exception reading the URI.
+	 */
+	public void addBundle(File bundleFile)
+			throws InstallPackageServiceException;
+
+	/**
+	 * Adds a URL of a bundle that contains some packages to install. A bundle
+	 * is a compressed zip file with a structure defined in the
+	 * {@link InstallerManager} class.
+	 * 
+	 * @param bundleURL
+	 *            the {@link URL} of a bundle.
+	 * @throws InstallPackageServiceException
+	 *             it is thrown if there is an exception reading the {@link URL}
+	 *             .
+	 */
+	public void addBundle(URL bundleURL) throws InstallPackageServiceException;
+
+	/**
+	 * In reads a directory and reads all the bundles. This method retrieve all
+	 * the information of the packages located in the bundles and allows to the
+	 * user to show this information.
+	 * 
+	 * @param bundlesDirectory
+	 *            a directory that contains bundles.
+	 * @throws InstallPackageServiceException
+	 *             If there is any problem reading the directory of bundles.
+	 */
+	public void addBundlesFromDirectory(File bundlesDirectory)
+			throws InstallPackageServiceException;
+
+	/**
+	 * Install a package in a concrete gvSIG installation directory. The
+	 * selected package has to be contained in one of the bundles that has been
+	 * previously added using the {@link #addBundle(File)} or the
+	 * {@link #addBundlesFromDirectory(File)} method.
+	 * 
+	 * @param applicationDirectory
+	 *            a valid root directory where an instance og gvSIG is
+	 *            installed.
+	 * @param packageInfo
+	 *            the package to install.
+	 * @throws InstallPackageServiceException
+	 *             If there is an error installing the package.
+	 */
+	public void installPackage(File applicationDirectory,
+			PackageInfo packageInfo) throws InstallPackageServiceException;
+
+	/**
+	 * Install a package in a concrete gvSIG installation directory. The
+	 * selected package has to be contained in one of the bundles that has been
+	 * previously added using the {@link #addBundle(File)} or the
+	 * {@link #addBundlesFromDirectory(File)} method.
+	 * 
+	 * @param applicationDirectory
+	 *            a valid root directory where an instance og gvSIG is
+	 *            installed.
+	 * @param packageCode
+	 *            the code of the package.
+	 * @throws InstallPackageServiceException
+	 *             if there is an error installing the {@link PackageInfo#}
+	 */
+	public void installPackage(File applicationDirectory, String packageCode)
+			throws InstallPackageServiceException;
+
+	/**
+	 * @return the number of packages that has been loaded form one or more
+	 *         bundles using the {@link #addBundle(File)} or the
+	 *         {@link #addBundlesFromDirectory(File)} method.
+	 */
+	public int getPackageCount();
+
+	/**
+	 * Return the package information for a concrete position. All the packages
+	 * has been loaded form one or more bundles using the
+	 * {@link #addBundle(File)} or the {@link #addBundlesFromDirectory(File)}
+	 * method.
+	 * 
+	 * @param index
+	 *            the position of the package.
+	 * @return the information of a package. returns <code>null</code> if the
+	 *         package doesn't exist.
+	 */
+	public PackageInfo getPackageInfo(int index);
+
+	/**
+	 * Return the package information for a concrete position. All the packages
+	 * has been loaded form one or more bundles using the
+	 * {@link #addBundle(File)} or the {@link #addBundlesFromDirectory(File)}
+	 * method.
+	 * 
+	 * @param packageCode
+	 *            the code of the package.
+	 * @return the information of a package. returns <code>null</code> if the
+	 *         package doesn't exist.
+	 */
+	public PackageInfo getPackageInfo(String packageCode);
+
+	/**
+	 * Download the package and register it in the manager.
+	 * 
+	 * @param packageInfo
+	 */
+	public void downloadPackage(PackageInfo packageInfo,
+			SimpleTaskStatus taskStatus) throws InstallPackageServiceException;
+
+	/**
+     * 
+     */
+	// public void resetPackages();
+
+	/**
+	 * @return
+	 */
+	public List<String> getDefaultSelectedPackagesIDs();
+
+	/**
+	 * Gets the list of all the categories of *all* the packages.
+	 * 
+	 * @return a list with the categories of all the packages.
+	 */
+	public List<String> getCategories();
+
+	/**
+	 * Gets the list of different the types of *all* the packages.
+	 * 
+	 * @return a list with the types of packages.
+	 */
+	public List<String> getTypes();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/execution/InstallPackageService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoWriter.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.api;
+
+import java.io.OutputStream;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface PackageInfoWriter {
+
+	public void write(PackageInfo installInfo, OutputStream os)
+			throws BaseException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoWriter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageService.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.api.creation;
+
+import java.io.OutputStream;
+import java.net.URL;
+
+import org.gvsig.tools.service.Manager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface MakePackageService {
+
+	public static final String ANT_FILE_NAME = "install.xml";
+
+	public abstract Manager getManager();
+
+	public abstract void preparePackage() throws MakePackageServiceException;
+
+	public abstract void createPackage(OutputStream packageStream)
+			throws MakePackageServiceException;
+
+	public abstract void createPackageIndex(URL downloadurl,
+			OutputStream packageStream) throws MakePackageServiceException;
+
+	public abstract void createPackageSet(OutputStream packageStream)
+			throws MakePackageServiceException;
+
+	public void createPackageIndexSet(URL downloadurl,
+			OutputStream packageStream) throws MakePackageServiceException;
+
+	public abstract String getDefaultAntScript()
+			throws MakePackageServiceException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageServiceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageServiceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageServiceException.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api.creation;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Base exception for all the exceptions that are thrown by the process of
+ * creation of an installer for a package of a plugin. The
+ * {@link MakePluginPackageService} throws this exception on its methods.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePluginPackageServiceException extends
+		MakePackageServiceException {
+
+	private static final long serialVersionUID = 4388665353519171171L;
+
+	private static final String KEY = "make_plugin_package_exception";
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	public MakePluginPackageServiceException(String message) {
+		super(message, KEY, serialVersionUID);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public MakePluginPackageServiceException(String message, Throwable cause) {
+		super(message, cause, KEY, serialVersionUID);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	public MakePluginPackageServiceException(String message, String key,
+			long serialVersion) {
+		super(message, key, serialVersion);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public MakePluginPackageServiceException(String message, Throwable cause,
+			String key, long serialVersion) {
+		super(message, cause, key, serialVersion);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageServiceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageServiceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageServiceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageServiceException.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api.creation;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Base exception for all the exceptions that are thrown by the process of
+ * creation of an installer for a package of a plugin. The
+ * {@link MakePluginPackageService} throws this exception on its methods.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePackageServiceException extends BaseException {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = -5549105047582975720L;
+	private static final String KEY = "make_package_exception";
+	private static final String MSG = "_Cant_create_package";
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	public MakePackageServiceException() {
+		super(MSG, KEY, serialVersionUID);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public MakePackageServiceException(Throwable cause) {
+		super(MSG, cause, KEY, serialVersionUID);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	protected MakePackageServiceException(String message, String key,
+			long serialVersion) {
+		super(message, key, serialVersion);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	protected MakePackageServiceException(String message, Throwable cause,
+			String key, long serialVersion) {
+		super(message, cause, key, serialVersion);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePackageServiceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageService.java	(revision 42196)
@@ -0,0 +1,253 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api.creation;
+
+import java.io.File;
+import java.io.OutputStream;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.tools.service.Service;
+
+/**
+ * <p>
+ * This service is used to create a bundle that contains a package of plugin
+ * type. It supports just one package for every installer. It contains a method
+ * to set the plugin path and some methods to set the installer information.
+ * </p>
+ * <p>
+ * It has also methods to load the installed plugins from a directory (if
+ * exists) and methods to create the bundle file in an {@link OutputStream}.
+ * </p>
+ * <p>
+ * A plugin package has the same structure of a standard package defined in
+ * {@link InstallerManager} but it adds some new files. An example of the
+ * structure of a bundle with a plugin package could be:
+ * </p>
+ * 
+ * <pre>
+ * - bundle (compressed file)
+ * 		- org.gvsig.plugin1-1_0_0-23 (compressed file)
+ * 			- org.gvsig.plugin1
+ * 			  	- package.info   
+ *  			- install.xml
+ *  			- files
+ *  				- gvSIG
+ *  					- extensiones
+ *  						- org.gvsig.plugin2
+ *  							- file1
+ *  							- file2
+ * </pre>
+ * <p>
+ * This structure has some extra files:
+ * </p>
+ * <lu> <li><b>install.xml</b>: ant file that is executed in the execution of
+ * the installer to do some extra actions in the installation process. One of
+ * these actions is copy all the files located in the files directory</li> <li>
+ * <b>files directory</b>: it contains some files of other extensions that have
+ * to be copied using the ant script.</li> </lu>
+ * <p>
+ * The usage of the ant script to copy files from other plugins is not
+ * recommended because it is possible that different installers overrides the
+ * same file. The suggestion it that one plugin has to have all the files that
+ * it needs to work inside the plugin and it never has to override some external
+ * files.
+ * </p>
+ * <p>
+ * The implementations of this interface have to have a constructor with a File
+ * parameter that is the directory when the plugins are located. If the
+ * directory doens't exists the creation throws an exception.
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface MakePluginPackageService extends Service {
+
+	/**
+	 * It creates a package set with a single plugin package inside.
+	 * 
+	 * @param packageInfo
+	 *            the information of the plugin that has to be included in the
+	 *            package set
+	 * @param packageStream
+	 *            the stream where the the package set will be created
+	 * @throws MakePluginPackageServiceException
+	 *             it is thrown when there is an exception creating the package
+	 *             set
+	 */
+	public void createPackageSet(PackageInfo packageInfo,
+			OutputStream packageStream)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * It creates a package of a plugin.
+	 * 
+	 * @param packageInfo
+	 *            the information of the plugin that has to be included in the
+	 *            package
+	 * @param packageStream
+	 *            the stream where the the package will be created
+	 * @throws MakePluginPackageServiceException
+	 *             it is thrown when there is an exception creating the package
+	 */
+	public void createPackage(PackageInfo packageInfo,
+			OutputStream packageStream)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Prepares and copies the needed files for the package. It is used to copy
+	 * the ant build file and the additional external files to be included in
+	 * the package.
+	 * 
+	 * @param newPackageInfo
+	 *            the information of the new plugin.
+	 * @param originalPackageInfo
+	 *            the information of the original plugin.
+	 * @throws MakePluginPackageServiceException
+	 *             it is thrown when there is an exception preparing the package
+	 */
+	public void preparePackage(PackageInfo packageInfo,
+			File originalPackageFolder)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * It creates the index for a package of a plugin. This file may be used to
+	 * be included in the main gvSIG remote index, or downloaded as it is.
+	 * 
+	 * @param packageInfo
+	 *            the information of the plugin that has to be included in the
+	 *            package index
+	 * @param packageStream
+	 *            the stream where the the package index will be created
+	 * @throws MakePluginPackageServiceException
+	 *             it is thrown when there is an exception creating the package
+	 */
+	public void createPackageIndex(PackageInfo packageInfo,
+			OutputStream packageStream)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Writes a package info file with the information provided.
+	 * 
+	 * @param packageInfo
+	 *            the package that has to be written into the file
+	 * @param folder
+	 *            the folder where the file is to be created
+	 * @throws MakePluginPackageServiceException
+	 *             it is thrown when there is an exception writing the file
+	 */
+	public void writePackageInfo(PackageInfo packageInfo, File folder)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Writes a package info file with the information provided.
+	 * 
+	 * @param packageInfo
+	 *            the package that has to be written into the file
+	 * @param folder
+	 *            the folder where the file is to be created
+	 * @throws MakePluginPackageServiceException
+	 *             it is thrown when there is an exception writing the file
+	 */
+	public void writePackageInfoForIndex(PackageInfo packageInfo, File folder)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * It returns the number of plugin packages that are installed in the folder
+	 * that has been added using the constructor. It can be used in an iteration
+	 * process combined with the {@link #getPluginPackageInfo(int)} method to
+	 * know all the installed plugins.
+	 * 
+	 * @return the number of plugins installed in a directory.
+	 */
+	public int getPluginPackageCount();
+
+	/**
+	 * It returns an instance of an {@link PackageInfo} class, that is a class
+	 * that contains all the package information (name, version...).
+	 * 
+	 * @param index
+	 *            the position of the plugin that has to be retrieved.
+	 * @return the installer information of a plugin package. Returns
+	 *         <code>null</code> if the package doesn't exist.
+	 */
+	public PackageInfo getPluginPackageInfo(int index);
+
+	/**
+	 * It returns an instance of an {@link PackageInfo} class, that is a class
+	 * that contains all the package information (name, version...).
+	 * 
+	 * @param code
+	 *            code of the plugin, defined in the <b>package.info</b> file
+	 *            like a property.
+	 * @return the installer information of a plugin package. Returns
+	 *         <code>null</code> if the package doesn't exist.
+	 */
+	public PackageInfo getPluginPackageInfo(String code);
+
+	/**
+	 * This method returns the default ant script that will be used by some
+	 * plugins to copy some external files in the installation process.
+	 * 
+	 * @return a string that contains the standard ant script
+	 * @throws MakePluginPackageServiceException
+	 *             if there is a problem reading the file
+	 */
+	public String getDefaultAntScript()
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Returns the list of packages already installed in the application.
+	 * 
+	 * @return the list of packages already installed in the application
+	 * @throws MakePluginPackageServiceException
+	 *             if there is an error getting the installed packages
+	 */
+	public PackageInfo[] getInstalledPackages()
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Returns the folder where a plugin is located.
+	 * 
+	 * @param selectedPackageInfo
+	 *            the info of theplugin to look for
+	 * @return the plugin's folder
+	 * @throws MakePluginPackageServiceException
+	 *             if there is an error locating the folder
+	 */
+	public File getPluginFolder(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * @param folder
+	 * @return
+	 */
+	public boolean deleteDir(File folder);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/creation/MakePluginPackageService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerManager.java	(revision 42196)
@@ -0,0 +1,541 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.creation.MakePackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.service.Manager;
+
+/**
+ * <p>
+ * This manager is used to register and create the services that are used to
+ * manage the creation and the execution of installers. An installer is a file
+ * called <b>bundle</b> that is composed of a set <b>packages</b>.
+ * </p>
+ * <p>
+ * A package has some information that is defined by the {@link PackageInfo}
+ * class and is composed of a set of attributes. One of these attributes, the
+ * type, denotes if the package is a plugin, theme, translation, etc.
+ * </p>
+ * <p>
+ * In practice a bundle is just a compressed zip file that has a compressed zip
+ * file for every package to install. The structure of a bundle file with two
+ * packages of type plugin could be:
+ * </p>
+ * 
+ * <pre>
+ * - bundle (compressed file)
+ * 		- org.gvsig.plugin1-1_0_0-23 (compressed file)
+ * 			- org.gvsig.plugin1
+ * 			  	- package.info   			
+ *  	- org.gvsig.plugin2-2_0_1-35 (compressed file)
+ *  		- org.gvsig.plugin1
+ *  			- package.info
+ * </pre>
+ * <p>
+ * <b>bundle</b> is the compressed file that contains a zip entry for every
+ * package to install. The name of the zip entry follows next pattern:
+ * </p>
+ * 
+ * <pre>
+ * 		[package code]-[version]-[build]
+ * </pre>
+ * <p>
+ * Every zip entry contains a main folder inside that contains all the package
+ * files that are used in the installation process. Depending of the type of
+ * packages, the information inside this folder can be different, but all the
+ * types of packages have to have the <b>package.info</b>file that has all the
+ * package information. To see the <b>package.info</b> description see
+ * {@link PackageInfo}.
+ * <p>
+ * </p>
+ * The services that offers this managers are basically two: the creation of
+ * bundles for just one package of plugin type and a service for the
+ * installation of packages from a bundle. </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface InstallerManager extends Manager {
+
+	public static final String PACKAGE_INDEX_EXTENSION = ".gvspki";
+	public static final String PACKAGE_SET_EXTENSION = ".gvspks";
+	public static final String PACKAGE_EXTENSION = ".gvspkg";
+	
+        public static final String PACKAGE_INFO_FILE_NAME = "package.info";
+	/**
+	 * Package state default values.
+	 */
+	public static interface STATE {
+
+		static final String DEVEL = "devel";
+		static final String TESTING = "testing";
+		static final String PILOT = "pilot";
+		static final String PROTOTYPE = "prototype";
+		static final String ALPHA = "alpha";
+		static final String BETA = "beta";
+		static final String RC = "RC";
+		static final String FINAL = "final";
+	}
+
+	/**
+	 * Supported operating system default values.
+	 */
+	public static interface OS {
+
+		static final String ALL = "all";
+		static final String LINUX = "lin";
+		static final String WINDOWS = "win";
+		static final String OSX_10_4 = "osx_10_4";
+		static final String OSX_10_5 = "osx_10_5";
+		static final String OSX_10_6 = "osx_10_6";
+	}
+
+	/**
+	 * Supported architecture default values.
+	 */
+	public static interface ARCH {
+
+		static final String ALL = "all";
+		static final String X86 = "x86";
+		static final String X86_64 = "x86_64";
+	}
+
+	/**
+	 * Supported Java virtual machine version default values.
+	 */
+	public static interface JVM {
+
+		static final String J1_5 = "j1_5";
+		static final String J1_6 = "j1_6";
+	}
+
+	/**
+	 * Fields into the bundle file name message format.
+	 * 
+	 * @see InstallerManager#getPackageSetNameFormat()
+	 * @see InstallerManager#setPackageSetNameFormat(String)
+	 */
+	public static interface PACKAGE_FILE_NAME_FIELDS {
+
+		static final int GVSIG_VERSION = 0;
+		static final int NAME = 1;
+		static final int VERSION = 2;
+		static final int BUILD = 3;
+		static final int STATE = 4;
+		static final int OS = 5;
+		static final int ARCH = 6;
+		static final int JVM = 7;
+	}
+
+	/**
+	 * It registers a class that implements the service for the creation of
+	 * bundle that contains inside a package of type plugin. The registered
+	 * class have to implement the {@link MakePluginPackageService} interface.
+	 * 
+	 * @param clazz
+	 *            class that implements the {@link MakePluginPackageService}
+	 *            interface.
+	 */
+	public void registerMakePluginPackageService(
+			Class<? extends MakePluginPackageService> clazz);
+
+	// /**
+	// * It creates and returns an object that is used to create a bundle that
+	// * contains inside a package of type plugin. All the parameters are set
+	// * using the {@link MakePluginPackageService} interface. *
+	// *
+	// * @return an object that is used to create a plugin installer
+	// * @throws MakePluginPackageServiceException
+	// * when there is a problem creating the service
+	// */
+	// public MakePluginPackageService getMakePluginPackageService(
+	// File pluginsDirectory) throws MakePluginPackageServiceException;
+
+	/**
+	 * It creates and returns an object that is used to create a bundle that
+	 * contains inside a package of type plugin. All the parameters are set
+	 * using the {@link MakePluginPackageService} interface. *
+	 * 
+	 * @return an object that is used to create a plugin installer
+	 * @throws MakePluginPackageServiceException
+	 * @throws MakePluginPackageServiceException
+	 *             when there is a problem creating the service
+	 */
+	public MakePluginPackageService getMakePluginPackageService()
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Returns a list of package infos for the already installed plugins.
+	 * 
+	 * @param pluginsDirectory
+	 *            where to look for the installed plugins
+	 * @return the list of package infos for the already installed plugins
+	 * @throws MakePluginPackageServiceException
+	 *             if there is an error loading the information of the installed
+	 *             plugins
+         * @deprecated use getInstalledPackages() without parameters
+	 */
+	public PackageInfo[] getInstalledPackages(File pluginsDirectory)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Returns a list of package infos for the already installed plugins.
+	 * 
+	 * @return the list of package infos for the already installed plugins
+	 * @throws MakePluginPackageServiceException
+	 *             if there is an error loading the information of the installed
+	 *             plugins
+	 */
+	public PackageInfo[] getInstalledPackages()
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Returns the package bundle file name format.
+	 * <p>
+	 * The string has to use a suitable {@link MessageFormat} format, and the
+	 * available field numbers are the ones defined in the
+	 * BUNDLE_FILE_NAME_FIELDS interface.
+	 * </p>
+	 * 
+	 * @return the package bundle file name format.
+	 */
+	public String getPackageSetNameFormat();
+
+	/**
+	 * Sets the package bundle file name format.
+	 * 
+	 * @see InstallerManager#getPackageSetNameFormat()
+	 * @param packageBundleNameFormat
+	 *            the package bundle file name format.
+	 */
+	public void setPackageSetNameFormat(String packageBundleNameFormat);
+
+	/**
+	 * Returns the name of the package set file for a given package info.
+	 * 
+	 * @param info
+	 *            of the plugin
+	 * @return the name of the package set file
+	 */
+	public String getPackageSetFileName(PackageInfo info);
+
+	/**
+	 * Returns the name of the package file for a given package info.
+	 * 
+	 * @param info
+	 *            of the plugin
+	 * @return the name of the package file
+	 */
+	public String getPackageFileName(PackageInfo info);
+
+	/**
+	 * Returns the name of the package index file for a given package info.
+	 * 
+	 * @param info
+	 *            of the plugin
+	 * @return the name of the package index file
+	 */
+	public String getPackageIndexFileName(PackageInfo info);
+
+	/**
+	 * It registers a class that implements the service for the installation of
+	 * a package that is inside a bundle. This class has to implement the
+	 * {@link InstallPackageService} interface.
+	 * 
+	 * @param clazz
+	 *            class that implements the {@link InstallPackageService}
+	 *            interface.
+	 */
+	public void registerInstallPackageService(
+			Class<? extends InstallPackageService> clazz);
+
+	/**
+	 * It creates and returns an object that is used to install a package in
+	 * gvSIG. All the parameters are set using the {@link InstallPackageService}
+	 * interface.
+	 * 
+	 * @return an object that is used to install the package.
+	 * @throws InstallPackageServiceException
+	 *             when there is a problem creating the service.
+	 */
+	public InstallPackageService getInstallPackageService()
+			throws InstallPackageServiceException;
+
+	/**
+	 * Returns the default extensions of the package files.
+	 * 
+	 * @return the default extensions of the package files
+	 */
+	public String getDefaultPackageFileExtension();
+
+	/**
+	 * Returns the default extensions of the package set files.
+	 * 
+	 * @return the default extensions of the package set files
+	 */
+	public String getDefaultPackageSetFileExtension();
+
+	/**
+	 * Returns the default extensions of the index set files.
+	 * 
+	 * @return the default extensions of the index set files
+	 */
+	public String getDefaultIndexSetFileExtension();
+
+	/**
+	 * Return the OS code of the system
+	 * 
+	 * @return os code of the system
+	 */
+	public String getOperatingSystem();
+
+	/**
+	 * Returns the Architecture code of the system
+	 * 
+	 * @return architecture code of the system
+	 */
+	public String getArchitecture();
+
+	/**
+	 * Create a empty dependency object.
+	 * 
+	 * @return the dependency
+	 */
+	public Dependency createDependency();
+
+	/**
+	 * Create a dependency instance with the data of the package.
+	 * 
+	 * @param packageInfo
+	 * @return a dependency of the package
+	 */
+	public Dependency createDependency(PackageInfo packageInfo);
+
+	/**
+	 * Create a dependencies calculator.
+	 * 
+	 * @return the dependencias calculator
+	 */
+	public DependenciesCalculator createDependenciesCalculator(
+			InstallPackageService installService);
+
+	/**
+	 * Create a version instance
+	 * 
+	 * @return the version
+	 */
+	public Version createVersion();
+
+	public PackageInfo createPackageInfo();
+	
+	/**
+	 * Create a PackageInfo and load contents from the specified InputStream using the
+	 * default reader.
+	 * 
+	 * @param packegeinfo as URL
+	 * @return the created packageInfo
+	 * @throws IOException 
+	 * @throws BaseException 
+	 */
+	public PackageInfo createPackageInfo(InputStream packegeinfo) throws BaseException;
+
+	public PackageInfoWriter getDefaultPackageInfoWriter();
+
+	public PackageInfoReader getDefaultPackageInfoReader();
+
+	public MakePackageService createMakePackage(File packageFolder,
+			PackageInfo packageInfo);
+
+	public void setDownloadBaseURL(URL url);
+
+	public URL getDownloadBaseURL();
+
+	public void setVersion(Version version);
+
+	public Version getVersionEx();
+
+
+	/**
+	 * 
+	 * @param version
+	 * @deprecated Use {@link #setVersion(Version)}
+	 */
+    public void setVersion(String version);
+
+    /**
+     * 
+     * @return
+     * @deprecated Use {@link #getVersionEx()}
+     */
+    public String getVersion();
+
+	/**
+	 * Gets a List of all the folders where there might be addons folders
+	 * (addons repositories).
+	 * 
+	 * @return list of repositories paths
+	 */
+	public List<File> getLocalAddonRepositories();
+
+	/**
+	 * Gets a List of all the folders where there might be addons folders
+         * for the specified type of packages
+	 * (addons repositories).
+	 * 
+	 * @return list of repositories paths
+	 */
+        public List<File> getLocalAddonRepositories(String type);
+                
+	/**
+	 * Adds an addon local repository location to the manager list,
+         * and register the type of addons for this repository.
+	 * 
+	 * @param path
+	 *            of the repository
+         * @param type
+         *            of addons in this repository
+	 */
+	public void addLocalAddonRepository(File path, String type);
+        
+        /**
+         * @deprecated use addLocalAddonRepository(File path, String type)
+         */
+	public void addLocalAddonRepository(File path);
+
+        /**
+         * Retrieve the default type of addons for the file.
+         * Use the registry of local addon repositories to identify the
+         * type for this file.
+         * 
+         * @param file
+         * @return 
+         */
+        public String getDefaultLocalRepositoryType(File file);
+                
+	/**
+	 * Gets a List of all the addon folders. An addon folder is a folder inside
+	 * any addon repository with a package.info file inside. (addons
+	 * repositories).
+	 * 
+	 * @return list of addon paths folders.
+	 */
+	public List<File> getAddonFolders();
+        
+	/**
+	 * Gets a List of all the addon folders of a type of package. 
+         * An addon folder is a folder inside
+	 * any addon repository with a package.info file inside. (addons
+	 * repositories).
+	 * 
+	 * @return list of addon paths folders.
+	 */
+        public List<File> getAddonFolders(String type);
+
+	/**
+	 * Gets the folder of the addon with the code provided, or null if not
+	 * found.
+	 * 
+	 * @param code
+	 *            of the addon
+	 * 
+	 * @return File of the folder of the addon.
+	 */
+	public File getAddonFolder(String code);
+
+	/**
+	 * The local addons folder where normally all addons are installed.
+	 * 
+	 * @param defaultAddonsRepository
+         * @deprecated use {@link #setDefaultLocalAddonRepository(java.io.File, java.lang.String) }
+	 */
+	public void setDefaultLocalAddonRepository(File defaultAddonsRepository);
+	
+	/**
+	 * The local addons folder where normally all addons are installed.
+	 * 
+	 * @return default addons repository folder.
+         * @deprecated use {@link #getDefaultLocalAddonRepository(java.lang.String) }
+	 */
+	public File getDefaultLocalAddonRepository();
+
+        public static final int ACCESS_READ = 0;
+        public static final int ACCESS_WRITE = 1;
+        /**
+         * Get the path to the default local repository for a type of package.
+         * Grant that the path has the access required, can be:
+         * 
+         * ACCESS_READ
+         * ACCESS_WRITE
+         * 
+         * If don't has a repository for this type of package or don't has the
+         * requiered access mode return null.
+         * 
+         * @param packageType type of package for that ask the default path
+         * @param access type of access to the repository.
+         * @return the path to the repository
+         */
+        public File getDefaultLocalAddonRepository(String packageType, int access);
+        
+        /**
+         * Get the path to the default local repository for a type of package.
+         * This is a utility method using by default ACCESS_READ to the reppository.
+         * 
+         * @param packageType type of package for that ask the default path
+         * @return the path to the repository
+         */
+        public File getDefaultLocalAddonRepository(String packageType);
+
+        
+        /**
+         * Set the path to the default local repository for a type of package
+         * @param defaultAddonsRepository path to the repository
+         * @param packageType type of package in this repository path
+         */
+        public void setDefaultLocalAddonRepository(File defaultAddonsRepository, String packageType);
+	
+        
+	public List<byte[]> getPublicKeys();
+
+	// public PackageInfoFiles getPackageInfoFiles(PackageInfo packageInfo);
+
+	public boolean hasProviderToThisPackage(PackageInfo packageInfo);
+        
+        public boolean needAdminRights();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoReader.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.api;
+
+import java.io.InputStream;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface PackageInfoReader {
+
+	public void read(PackageInfo installerInfoResource, InputStream is)
+			throws BaseException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/PackageInfoReader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/DependenciesCalculator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/DependenciesCalculator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/DependenciesCalculator.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.api;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface DependenciesCalculator {
+
+	public void addPackageToInstall(PackageInfo packageInfo);
+
+	public void addPackageToInstall(Collection<PackageInfo> packages);
+
+	public void addInstalledPackage(PackageInfo packageInfo);
+
+	public void addInstalledPackage(PackageInfo[] packages);
+
+	public void calculate();
+
+	public List<PackageInfo> getRequiredPackages();
+
+	public List<PackageInfo> getConflictPackages();
+
+	public Dependencies getUnresolvedDependencies();
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/DependenciesCalculator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLocator.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api;
+
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This Locator provides the entry point for the gvSIG {@link InstallerManager}
+ * 
+ * @see {@link Locator}
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerLocator extends AbstractLocator {
+
+	private static final String LOCATOR_NAME = "InstallerLocator";
+	/**
+	 * InstallerManager name used by the locator to access the instance
+	 */
+	public static final String INSTALLER_MANAGER_NAME = "InstallerManager";
+	private static final String INSTALLER_MANAGER_DESCRIPTION = "InstallerManager of gvSIG";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final InstallerLocator instance = new InstallerLocator();
+
+	/**
+	 * @see Locator#getLocatorName()
+	 */
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+
+	/**
+	 * Return a reference to {@link InstallerManager}.
+	 * 
+	 * @return a reference to InstallerManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static InstallerManager getInstallerManager()
+			throws LocatorException {
+		return (InstallerManager) getInstance().get(INSTALLER_MANAGER_NAME);
+	}
+
+	/**
+	 * Return the singleton instance.
+	 * 
+	 * @return the singleton instance
+	 */
+	public static InstallerLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Registers the Class implementing the {@link InstallerManager} interface.
+	 * 
+	 * @param clazz
+	 *            implementing the InstallerManager interface
+	 */
+	public static void registerInstallerManager(
+			Class<? extends InstallerManager> clazz) {
+
+		getInstance().register(INSTALLER_MANAGER_NAME,
+				INSTALLER_MANAGER_DESCRIPTION, clazz);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLibrary.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.api;
+
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for the installer.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerLibrary extends AbstractLibrary {
+
+	@Override
+	public void doRegistration() {
+		registerAsAPI(InstallerLibrary.class);
+		this.require(ToolsLibrary.class);
+	}
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		// Nothing to do
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		// Nothing to do
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/InstallerLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/SimpleProgressStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/SimpleProgressStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/SimpleProgressStatus.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.api;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface SimpleProgressStatus {
+
+	public int getCompleted();
+
+	public String getLabel();
+
+	public void requestCancel();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/src/main/java/org/gvsig/installer/lib/api/SimpleProgressStatus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/pom.xml	(revision 42196)
@@ -0,0 +1,18 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.lib.api</artifactId>
+  <packaging>jar</packaging>
+  <name>org.gvsig.installer.lib.api</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderLocator.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.spi;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This Locator provides the entry point for the gvSIG
+ * {@link InstallerProviderManager}
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerProviderLocator extends BaseLocator {
+
+	private static final String LOCATOR_NAME = "Installer.provider.locator";
+	public static final String PROVIDER_MANAGER_NAME = "Installer.provider.manager";
+	public static final String PROVIDER_MANAGER_DESCRIPTION = "Installer Manager";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final InstallerProviderLocator instance = new InstallerProviderLocator();
+
+	/**
+	 * Return the singleton instance.
+	 * 
+	 * @return the singleton instance
+	 */
+	public static InstallerProviderLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Return the Locator's name
+	 * 
+	 * @return a String with the Locator's name
+	 */
+	@Override
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+
+	/**
+	 * Return a reference to InstallerProviderManager.
+	 * 
+	 * @return a reference to InstallerProviderManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static InstallerProviderManager getProviderManager()
+			throws LocatorException {
+		return (InstallerProviderManager) getInstance().get(
+				PROVIDER_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the InstallerProviderManager interface.
+	 * 
+	 * @param clazz
+	 *            implementing the InstallerProviderManager interface
+	 */
+	public static void registerInstallerProviderManager(
+			Class<? extends InstallerProviderManager> clazz) {
+		getInstance().register(PROVIDER_MANAGER_NAME,
+				PROVIDER_MANAGER_DESCRIPTION, clazz);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallPackageProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallPackageProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallPackageProviderServices.java	(revision 42196)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.spi;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * Services that can be used by the providers to create or exceute the bundle.
+ * It contains methods to compress and to decompress files and methods to read
+ * an install a package file from a directory.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface InstallPackageProviderServices extends ProviderServices {
+
+	/**
+	 * It decompress an input stream and write it on a directory.
+	 * 
+	 * @param is
+	 *            The input stream to decompress
+	 * @param outputDirectory
+	 *            . The output directory.
+	 * @throws InstallPackageServiceException
+	 *             If there is a problem decompressing the stream.
+	 */
+	public void decompress(InputStream is, File outputDirectory)
+			throws InstallPackageServiceException;
+
+	/**
+	 * Compress a folder as a zipped package set in the given outputstream with
+	 * a concrete name.
+	 * 
+	 * @param folder
+	 *            the folder to compress.
+	 * @param fileName
+	 *            name of the zip entry that has the output file. The name that
+	 *            have to have
+	 * @param os
+	 *            output stream to write the output.
+	 * @throws MakePluginPackageServiceException
+	 *             if there is any problem compressing.
+	 */
+	public void compressPackageSet(File folder, String fileName, OutputStream os)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Compress a plugin folder using the plugin's name as a package.
+	 * 
+	 * @param folder
+	 *            the directory to compress.
+	 * @param os
+	 *            output stream to write the output.
+	 * @throws MakePluginPackageServiceException
+	 *             if there is any problem compressing.
+	 */
+	public void compressPackage(File folder, OutputStream os)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Compress a plugin folder using the plugin's name as a package, only with
+	 * the files needed by the package index.
+	 * 
+	 * @param folder
+	 *            the directory to compress.
+	 * @param os
+	 *            output stream to write the output.
+	 * @throws MakePluginPackageServiceException
+	 *             if there is any problem compressing.
+	 */
+	public void compressPackageIndex(File folder, OutputStream os)
+			throws MakePluginPackageServiceException;
+
+	/**
+	 * Reads the package.info file from a directory a fills the the properties
+	 * of the {@link PackageInfo} object.
+	 * 
+	 * @param directory
+	 *            the root directory that contains the installinfo file
+	 * @param installInfo
+	 *            the installinfo file that has to be filled.
+	 * @throws InstallerInfoFileException. if there is any problem reading the
+	 *         file
+	 */
+	public void readPackageInfo(File directory, PackageInfo installerInfo)
+			throws InstallerInfoFileException;
+
+	/**
+	 * Reads the package.info file from a package set and fills the the
+	 * properties of the {@link PackageInfo} objects.
+	 * 
+	 * @param is
+	 *            the input stream of a bundle.
+	 * @param packageInfos
+	 *            a list of the information of the packages to install.
+	 * @param zipEntriesMap
+	 *            a map to retrieve the zipEntry for every package. This
+	 *            information is necessary to select the plugin to decompress.
+	 * @throws InstallPackageServiceException
+	 *             if there is a problem reading the bundle.
+	 */
+	public void readPackageSetInfo(InputStream is,
+			List<PackageInfo> packageInfos,
+			Map<PackageInfo, String> zipEntriesMap)
+			throws InstallPackageServiceException;
+
+	/**
+	 * Reads the package.info file from a bundle fills the the properties of the
+	 * {@link PackageInfo} objects.
+	 * 
+	 * @param is
+	 *            the input stream of a bundle.
+	 * @param packageInfos
+	 *            a list of the information of the packages to install.
+	 * @param zipEntriesMap
+	 *            a map to retrieve the zipEntry for every package. This
+	 *            information is necessary to select the plugin to decompress.
+	 * @throws InstallPackageServiceException
+	 *             if there is a problem reading the bundle.
+	 */
+	public void readPackageInfo(InputStream is, List<PackageInfo> packageInfos,
+			Map<PackageInfo, String> zipEntriesMap, String name)
+			throws InstallPackageServiceException;
+
+	/**
+	 * Writes the package.info file in a concrete directory.
+	 * 
+	 * @param directory
+	 *            the directory.
+	 * @param packageInfo
+	 *            the information to write.
+	 * @throws InstallerInfoFileException
+	 *             if there is any problem writing the package.info file.
+	 */
+	public void writePackageInfo(File directory, PackageInfo packageInfo)
+			throws InstallerInfoFileException;
+
+	/**
+	 * Writes the package.info file in a concrete directory to be used in a
+	 * package index.
+	 * 
+	 * @param directory
+	 *            the directory.
+	 * @param packageInfo
+	 *            the information to write.
+	 * @throws InstallerInfoFileException
+	 *             if there is any problem writing the package.info file.
+	 */
+	public void writePackageInfoForIndex(File directory, PackageInfo packageInfo)
+			throws InstallerInfoFileException;
+
+	/**
+	 * It search a package inside an installer file by the zip name and returns
+	 * the stream in this position ready to decompres.
+	 * 
+	 * @param is
+	 *            the input stream of a bundle.
+	 * @param zipEntry
+	 *            the name of the zip entry.
+	 * @return the input stream ready to install.
+	 * @throws InstallPackageServiceException
+	 *             if there is a problem reading the stream
+	 */
+	public InputStream searchPackage(InputStream is, String zipEntry)
+			throws InstallPackageServiceException;
+
+	/**
+	 * It reads a compressed file and retrieve the package information.
+	 * 
+	 * @param is
+	 *            the compressed file
+	 * @return the information of the package
+	 * @throws InstallPackageServiceException
+	 *             if there is a problem decompressing the file.
+	 */
+	public PackageInfo readCompressedPackageInfo(InputStream is)
+			throws InstallPackageServiceException;
+
+	public List<String> getDefaultSelectedPackagesIDs();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallPackageProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderManager.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.spi;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.spi.execution.InstallPackageProvider;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ProviderManager;
+import org.gvsig.tools.service.spi.ProviderManager_WithGetFactories;
+
+/**
+ * <p>
+ * The installation process install packages in gvSIG. These packages has a
+ * type, that can be a plugin, theme, translation, etc. For every type of
+ * package the installation process needs a provider for installing the
+ * packages.
+ * </p>
+ * <p>
+ * All the packages to install have to have some install properties defined by
+ * the {@link PackageInfo} class. This class is just a set of properties and
+ * there is a property named <b>type</b> that can be retrieved by the
+ * {@link PackageInfo#getType()} method that defines the package type. This
+ * property is used to create a {@link InstallPackageProvider} that is used to
+ * install the selected package.
+ * </p>
+ * <p>
+ * This manager provides the functionality to register and to create a providers
+ * for every package.
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface InstallerProviderManager extends ProviderManager, ProviderManager_WithGetFactories {
+
+	/**
+	 * Creates a new provider to execute an installer to add a new package in
+	 * gvSIG.
+	 * 
+	 * @param providerName
+	 *            the provider name used on the registration of the provider.
+	 *            This name is the type attribute defined by {@link PackageInfo}
+	 *            .
+	 * @return a provider that can be used to install a package.
+	 * @throws ServiceException
+	 *             if the provider doesn't exist or if there is a problem
+	 *             creating the provider.
+	 */
+	public InstallPackageProvider createExecutionProvider(String providerName)
+			throws ServiceException;
+
+	/**
+	 * Creates the services that be used for the providers to execute or create
+	 * a new bundle.
+	 * 
+	 * @return the services used to create or execute an bundle.
+	 */
+	public InstallPackageProviderServices createInstallerProviderServices();
+
+	/**
+	 * Returns the name to use for the package info file.
+	 * 
+	 * @return the name of the package info file
+	 */
+	public String getPackageInfoFileName();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerProviderManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/execution/InstallPackageProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/execution/InstallPackageProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/execution/InstallPackageProvider.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.spi.execution;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+
+/**
+ * <p>
+ * Provider that manage the installation process of a concrete package. There is
+ * a different provider for each package type that is supported. The provider
+ * just have a method to install the package in gvSIG
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface InstallPackageProvider {
+
+	/**
+	 * This method install a package in a valid gvSIG directory.
+	 * 
+	 * @param applicationDirectory
+	 *            the directory where gvSIG is located.
+	 * @param inputStream
+	 *            the stream that contains the package information.
+	 * @param taskStatus
+	 * @throws InstallPackageServiceException
+	 *             if there is a problem reading the stream or installing the
+	 *             package.
+	 */
+	public void install(File applicationDirectory, InputStream inputStream,
+			PackageInfo packageInfo) throws InstallPackageServiceException;
+
+	public void installLater(File applicationDirectory,
+			InputStream inputStream, PackageInfo packageInfo)
+			throws InstallPackageServiceException, IOException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/execution/InstallPackageProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerInfoFileException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerInfoFileException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerInfoFileException.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.spi;
+
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerInfoFileException extends
+		MakePluginPackageServiceException {
+
+	private static final long serialVersionUID = -5388898489108649788L;
+
+	private static final String KEY = "install_infofile_exception";
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	public InstallerInfoFileException(String message) {
+		super(message, KEY, serialVersionUID);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable)
+	 */
+	public InstallerInfoFileException(String message, Throwable cause) {
+		super(message, cause, KEY, serialVersionUID);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	public InstallerInfoFileException(String message, String key, long code) {
+		super(message, key, code);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/src/main/java/org/gvsig/installer/lib/spi/InstallerInfoFileException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/pom.xml	(revision 42196)
@@ -0,0 +1,23 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.lib.spi</artifactId>
+  <packaging>jar</packaging>
+  <name>org.gvsig.installer.lib.spi</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer.lib</artifactId>
+    <version>2.0.97</version>
+  </parent> 
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.spi
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/pom.xml	(revision 42196)
@@ -0,0 +1,54 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.lib.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>org.gvsig.installer.lib.impl</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer.lib</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>commons-io</groupId>
+        <artifactId>commons-io</artifactId>
+      <scope>compile</scope>
+    </dependency>
+        <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <!-- TEST -->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wms/resources.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wms/resources.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wms/resources2.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wms/resources2.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wfs/files/gvSIG/extensiones/org.gvsig.wms/resources.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wfs/files/gvSIG/extensiones/org.gvsig.wms/resources.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wfs/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wfs/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wfs/install.xml	(revision 42196)
@@ -0,0 +1,33 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="org.gvsig.plugin1" default="main" basedir=".">
+	<target name="main" depends="copy_files"/>
+    <target name="copy_files">
+    	<copy todir="${gvsig_dir}">
+    		<fileset dir="./files" includes="**"/>
+		</copy>
+	</target>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/gvSIG/extensiones/org.gvsig.wfs/install.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/install/bundle1.zip
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/application/install/bundle1.zip
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/package.info1
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/package.info1	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/package.info1	(revision 42196)
@@ -0,0 +1,8 @@
+code=org.gvsig.myplugin
+name=myplugin
+description=Test
+version=1.0.0
+build=1
+state=RC1
+official=true
+type=plugin
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/package.info2
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/package.info2	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/package.info2	(revision 42196)
@@ -0,0 +1,9 @@
+code=org.gvsig.myplugin.app.mainplugin
+code-alias=org.gvsig.myplugin
+name=myplugin
+description=Test
+version=1.0.0
+build=1
+state=RC1
+official=true
+type=plugin
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin2/files/gvSIG/extensiones/org.gvsig.plugin3/resources.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin2/files/gvSIG/extensiones/org.gvsig.plugin3/resources.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin2/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin2/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin2/install.xml	(revision 42196)
@@ -0,0 +1,33 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="org.gvsig.plugin1" default="main" basedir=".">
+	<target name="main" depends="copy_files"/>
+    <target name="copy_files">
+    	<copy todir="${gvsig_dir}">
+    		<fileset dir="./files" includes="**"/>
+		</copy>
+	</target>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin2/install.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin3/resources.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/resources/bundle1/org.gvsig.plugin3/resources.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriterTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriterTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriterTest.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.info;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.impl.DefaultPackageInfo;
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerInfoFileWriterTest extends
+		AbstractLibraryAutoInitTestCase {
+
+	@Override
+	protected void doSetUp() throws Exception {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void testWriteFile() throws LocatorException,
+			InstallerInfoFileException {
+		DefaultPackageInfo installerInfo = new DefaultPackageInfo();
+
+		installerInfo.setCode("org.gvsig.myplugin");
+		installerInfo.setName("My name");
+		installerInfo.setDescription("My description");
+		installerInfo.setVersion("1.0.0");
+		installerInfo.setBuild(4);
+		installerInfo.setState("final");
+		installerInfo.setOfficial(false);
+		installerInfo.setType("plugin");
+
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+		InstallerInfoFileWriter installerInfoFileWriter = new InstallerInfoFileWriter();
+		installerInfoFileWriter.write(installerInfo, out);
+
+		PackageInfo installerInfo2 = new DefaultPackageInfo();
+
+		InstallerInfoFileReader installerInfoFileReader = new InstallerInfoFileReader();
+		installerInfoFileReader.read(installerInfo2, new ByteArrayInputStream(
+				out.toByteArray()));
+
+		assertEquals("org.gvsig.myplugin", installerInfo2.getCode());
+		assertEquals("My name", installerInfo2.getName());
+		assertEquals("My description", installerInfo2.getDescription());
+		assertEquals("1.0.0-4", installerInfo2.getVersion().toString());
+		assertEquals(4, installerInfo2.getBuild());
+		assertEquals("final", installerInfo2.getState());
+		assertEquals(false, installerInfo2.isOfficial());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriterTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReaderTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReaderTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReaderTest.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.info;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+import org.gvsig.installer.lib.impl.DefaultPackageInfo;
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerInfoFileReaderTest extends
+		AbstractLibraryAutoInitTestCase {
+
+	@Override
+	protected void doSetUp() throws Exception {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void testReadFile() throws LocatorException,
+			InstallerInfoFileException, FileNotFoundException {
+		FileInputStream fis = new FileInputStream(getClass().getClassLoader()
+				.getResource("package.info1").getFile());
+
+		DefaultPackageInfo installerInfo = new DefaultPackageInfo();
+
+		InstallerInfoFileReader installerInfoFileReader = new InstallerInfoFileReader();
+		installerInfoFileReader.read(installerInfo, fis);
+
+		assertEquals(installerInfo.getCode(), "org.gvsig.myplugin");
+		assertEquals(installerInfo.getName(), "myplugin");
+		assertEquals(installerInfo.getDescription(), "Test");
+		assertEquals(installerInfo.getVersion().toString(), "1.0.0-1");
+		assertEquals(installerInfo.getBuild(), 1);
+		assertEquals(installerInfo.getState(), "RC1");
+		assertEquals(installerInfo.isOfficial(), true);
+	}
+
+	public void testCodeAlias() throws LocatorException,
+			InstallerInfoFileException, FileNotFoundException {
+		FileInputStream fis = new FileInputStream(getClass().getClassLoader()
+				.getResource("package.info2").getFile());
+
+		DefaultPackageInfo installerInfo = new DefaultPackageInfo();
+
+		InstallerInfoFileReader installerInfoFileReader = new InstallerInfoFileReader();
+		installerInfoFileReader.read(installerInfo, fis);
+
+		assertEquals(installerInfo.hasThisCode("org.gvsig.myplugin"),true);
+		assertEquals(installerInfo.hasThisCode("org.gvsig.myplugin.app.mainplugin"),true);
+		assertEquals(installerInfo.getName(), "myplugin");
+		assertEquals(installerInfo.getDescription(), "Test");
+		assertEquals(installerInfo.getVersion().toString(), "1.0.0-1");
+		assertEquals(installerInfo.getBuild(), 1);
+		assertEquals(installerInfo.getState(), "RC1");
+		assertEquals(installerInfo.isOfficial(), true);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReaderTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/DependencyTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/DependencyTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/DependencyTest.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl;
+
+import junit.framework.TestCase;
+
+import org.gvsig.installer.lib.api.Dependency;
+
+public class DependencyTest extends TestCase {
+
+	public void testParse() {
+		Dependency dep = new DefaultDependency();
+
+		dep.parse("required: org.gvsig.app >= 2.0.0-SNAPSHOT-2030");
+		String s = dep.toString();
+		assertEquals("required: org.gvsig.app >= 2.0.0-SNAPSHOT-2030", s);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/DependencyTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/InstallerServiceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/InstallerServiceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/InstallerServiceTest.java	(revision 42196)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl;
+
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public abstract class InstallerServiceTest extends
+		AbstractLibraryAutoInitTestCase {
+
+	public File getApplicationDirectory() throws IOException {
+		File templateFile = new File(getClass().getClassLoader().getResource(
+				"application").getFile());
+		File applicationDirectory = new File(System
+				.getProperty("java.io.tmpdir")
+				+ File.separator + "tmp_gvsig_installer");
+
+		if (applicationDirectory.exists()) {
+			deleteDir(applicationDirectory);
+		}
+		copy(templateFile, applicationDirectory);
+
+		return applicationDirectory;
+	}
+
+	public File getTemporalFile() {
+		return new File(System.getProperty("java.io.tmpdir") + File.separator
+				+ "installer" + Math.random());
+	}
+
+	public File getInstallersDirectory() throws IOException {
+		File applicationDirectory = getApplicationDirectory();
+		return new File(applicationDirectory + File.separator + "install");
+	}
+
+	public File getPluginsDirectory() throws IOException {
+		File applicationDirectory = getApplicationDirectory();
+		return new File(applicationDirectory + File.separator + "gvSIG"
+				+ File.separator + "extensiones");
+	}
+
+	public boolean deleteDir(File dir) {
+		if (dir.isDirectory()) {
+			String[] children = dir.list();
+			for (int i = 0; i < children.length; i++) {
+				boolean success = deleteDir(new File(dir, children[i]));
+				if (!success) {
+					return false;
+				}
+			}
+		}
+		return dir.delete();
+	}
+
+	public void copy(File sourceLocation, File targetLocation)
+			throws IOException {
+		if (sourceLocation.isDirectory()) {
+			if (!targetLocation.exists()) {
+				targetLocation.mkdir();
+			}
+
+			String[] children = sourceLocation.list();
+			for (int i = 0; i < children.length; i++) {
+				copy(new File(sourceLocation, children[i]), new File(
+						targetLocation, children[i]));
+			}
+		} else {
+			targetLocation.getParentFile().mkdirs();
+
+			InputStream in = new FileInputStream(sourceLocation);
+			OutputStream out = new FileOutputStream(targetLocation);
+
+			// Copy the bits from instream to outstream
+			byte[] buf = new byte[1024];
+			int len;
+			while ((len = in.read(buf)) > 0) {
+				out.write(buf, 0, len);
+			}
+			in.close();
+			out.close();
+		}
+	}
+
+	public void writeToFile(InputStream is, File file) {
+		try {
+			DataOutputStream out = new DataOutputStream(
+					new BufferedOutputStream(new FileOutputStream(file)));
+			InputStream is2 = is;
+			boolean again = true;
+			while (again) {
+				if (is2.read() > -1) {
+					out.writeByte(is.read());
+				} else {
+					again = false;
+				}
+			}
+			is.close();
+			out.close();
+		} catch (IOException e) {
+			System.err.println("Error Writing/Reading Streams.");
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/InstallerServiceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceTest.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.execution;
+
+import java.io.File;
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.impl.InstallerServiceTest;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageServiceTest extends InstallerServiceTest {
+
+	@Override
+	protected void doSetUp() throws Exception {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void testReadPlugins() throws LocatorException,
+			MakePluginPackageServiceException, InstallPackageServiceException,
+			IOException {
+		File installersDirectory = super.getInstallersDirectory();
+
+		InstallPackageService installPackageService = InstallerLocator
+				.getInstallerManager().getInstallPackageService();
+		installPackageService.addBundlesFromDirectory(installersDirectory);
+
+		Assert.assertEquals(3, installPackageService.getPackageCount());
+
+		int pluginsNumber = 0;
+		for (int i = 0; i < 3; i++) {
+			PackageInfo packageInfo = installPackageService.getPackageInfo(i);
+			if (packageInfo.getCode().equals("org.gvsig.plugin1")) {
+				assertNotNull(packageInfo.getState());
+				pluginsNumber++;
+			} else if (packageInfo.getCode().equals("org.gvsig.plugin2")) {
+				assertEquals("RC1", packageInfo.getState());
+				pluginsNumber++;
+			} else if (packageInfo.getCode().equals("org.gvsig.plugin3")) {
+				assertEquals("Testing", packageInfo.getState());
+				pluginsNumber++;
+			}
+		}
+
+		Assert.assertEquals(3, pluginsNumber);
+	}
+
+	public void testInstallPluginFromApplication()
+			throws InstallPackageServiceException, IOException,
+			LocatorException, MakePluginPackageServiceException {
+		File installersDirectory = super.getInstallersDirectory();
+		File applicationDirectory = super.getApplicationDirectory();
+
+		InstallPackageService installerExecutionService = InstallerLocator
+				.getInstallerManager().getInstallPackageService();
+		installerExecutionService.addBundlesFromDirectory(installersDirectory);
+
+		PackageInfo packageInfo = installerExecutionService
+				.getPackageInfo("org.gvsig.plugin1");
+		installerExecutionService.installPackage(applicationDirectory,
+				packageInfo);
+
+		Assert.assertEquals(3, installerExecutionService.getPackageCount());
+
+		// Reading the excution and check that the file is installed
+		MakePluginPackageService installerCreationService = InstallerLocator
+				.getInstallerManager().getMakePluginPackageService();
+		Assert
+				.assertEquals(4, installerCreationService
+						.getPluginPackageCount());
+	}
+
+	public void testInstallPluginFromExternal()
+			throws InstallPackageServiceException, IOException,
+			LocatorException, MakePluginPackageServiceException {
+		File applicationDirectory = super.getApplicationDirectory();
+		File externalInstallationFile = new File(applicationDirectory
+				.getAbsoluteFile()
+				+ File.separator + "install" + File.separator + "bundle1.zip");
+
+		InstallPackageService installerExecutionService = InstallerLocator
+				.getInstallerManager().getInstallPackageService();
+		installerExecutionService.addBundle(externalInstallationFile);
+
+		PackageInfo packageInfo = installerExecutionService
+				.getPackageInfo("org.gvsig.plugin1");
+
+		Assert.assertEquals(3, installerExecutionService.getPackageCount());
+
+		installerExecutionService.installPackage(applicationDirectory,
+				packageInfo);
+
+		// Reading the excution and check that the file is installed
+		MakePluginPackageService installerCreationService = InstallerLocator
+				.getInstallerManager().getMakePluginPackageService();
+		Assert
+				.assertEquals(4, installerCreationService
+						.getPluginPackageCount());
+	}
+
+	// public void testInstallPluginWithAntScript() throws
+	// InstallPackageServiceException, LocatorException,
+	// MakePluginPackageServiceException, IOException{
+	// File applicationDirectory = super.getApplicationDirectory();
+	// File installersDirectory = super.getInstallersDirectory();
+	// File pluginsDirectory = super.getPluginsDirectory();
+	//
+	// InstallPackageService installerExecutionService =
+	// InstallerLocator.getInstallerManager().getInstallPackageService();
+	// installerExecutionService.addBundlesFromDirectory(installersDirectory);
+	//
+	// PackageInfo packageInfo =
+	// installerExecutionService.getPackageInfo("org.gvsig.plugin2");
+	//
+	// Assert.assertEquals(3, installerExecutionService.getPackageCount());
+	//
+	// installerExecutionService.installPackage(applicationDirectory,
+	// packageInfo);
+	//
+	// //Reading the excution and check that the file is installed
+	// MakePluginPackageService installerCreationService =
+	// InstallerLocator.getInstallerManager().getMakePluginPackageService(pluginsDirectory);
+	//
+	// Assert.assertEquals(5, installerCreationService.getPluginPackageCount());
+	// }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/DependencyCalculatorTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/DependencyCalculatorTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/DependencyCalculatorTest.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl.execution;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.lib.impl.DefaultDependenciesCalculator;
+import org.gvsig.installer.lib.impl.DefaultPackageInfo;
+import org.gvsig.installer.lib.impl.DefaultVersion;
+
+public class DependencyCalculatorTest extends TestCase {
+
+	private MyInstallPackageService getInstallService() {
+		MyInstallPackageService serv = new MyInstallPackageService();
+		serv.addPackage("p1", "1.0.0", null);
+		serv.addPackage("p1", "2.0.0", null);
+		serv.addPackage("p1", "3.0.0", null);
+		serv.addPackage("p2", "3.0.0", null);
+		serv.addPackage("p2", "5.0.0", null);
+		serv.addPackage("p2", "9.0.0", null);
+		serv.addPackage("p3", "1.0.0", null);
+		serv.addPackage("p4", "1.0.0", null);
+		serv.addPackage("p5", "1.0.0", "required: p2 -ge 5.0.0");
+		serv.addPackage("p6", "1.0.0", "required: p1 >= 1.0.0");
+		serv.addPackage("p7", "1.0.0", "required: p1 -ge 2.0.0");
+		serv.addPackage("p8", "1.0.0", "required: p2 >= 1, required: p6 -ge 1");
+		serv.addPackage("p9", "1.0.0",
+				"required: p8 >= 1.0.0, required: p7 >= 1.0.0");
+		return serv;
+	}
+
+	public void testCalculate() {
+		MyInstallPackageService installService = this.getInstallService();
+		DefaultDependenciesCalculator calculator = new DefaultDependenciesCalculator(
+				installService);
+
+		calculator.addInstalledPackage(installService.getPackageInfo("p1",
+				"1.0.0"));
+		calculator.addInstalledPackage(installService.getPackageInfo("p2",
+				"3.0.0"));
+		calculator.addInstalledPackage(installService.getPackageInfo("p5",
+				"1.0.0"));
+
+		calculator.addPackageToInstall(installService.getPackageInfo("p7",
+				"1.0.0"));
+		calculator.addPackageToInstall(installService.getPackageInfo("p9",
+				"1.0.0"));
+
+		calculator.calculate();
+
+		List<PackageInfo> requireds = calculator.getRequiredPackages();
+
+		/*
+		 * required packages plugin p1 3.0.0-0 devel all all j1_5 null plugin p2
+		 * 9.0.0-0 devel all all j1_5 null plugin p6 1.0.0-0 devel all all j1_5
+		 * required: p1 >= 1.0.0-0 plugin p8 1.0.0-0 devel all all j1_5
+		 * required: p2 >= 1.0.0-0, required: p6 -ge 1.0.0-0
+		 */
+		PackageInfo pkg;
+		assertEquals(4, requireds.size());
+		pkg = requireds.get(0);
+		assertEquals("p1", pkg.getCode());
+		assertEquals("3.0.0-0", pkg.getVersion().toString());
+		pkg = requireds.get(1);
+		assertEquals("p2", pkg.getCode());
+		assertEquals("9.0.0-0", pkg.getVersion().toString());
+		pkg = requireds.get(2);
+		assertEquals("p6", pkg.getCode());
+		assertEquals("1.0.0-0", pkg.getVersion().toString());
+		pkg = requireds.get(3);
+		assertEquals("p8", pkg.getCode());
+		assertEquals("1.0.0-0", pkg.getVersion().toString());
+	}
+
+	private class MyInstallPackageService extends InstallPackageServiceDumb {
+
+		Map<String, PackageInfo> packages = new LinkedHashMap<String, PackageInfo>();
+		List<PackageInfo> pacakgesList = null;
+
+		MyInstallPackageService() {
+
+		}
+
+		public void addPackage(String code, String version, String dependencies) {
+			DefaultPackageInfo pkg = new DefaultPackageInfo();
+			pkg.setCode(code);
+			pkg.setType("plugin");
+			pkg.setVersion(new DefaultVersion().parse(version));
+			pkg.setDependencies(dependencies);
+			pkg.setName(code + " (name)");
+			pkg.setDescription(code + " (description)");
+
+			packages.put(pkg.getCode() + "-" + pkg.getVersion().fullFormat(),
+					pkg);
+		}
+
+		public PackageInfo getPackageInfo(String code, String version) {
+			Version ver = new DefaultVersion().parse(version);
+			return packages.get(code + "-" + ver.fullFormat());
+		}
+
+		@Override
+		public int getPackageCount() {
+			if (pacakgesList == null) {
+				pacakgesList = new ArrayList<PackageInfo>();
+				pacakgesList.addAll(packages.values());
+			}
+			return pacakgesList.size();
+		}
+
+		@Override
+		public PackageInfo getPackageInfo(int index) {
+			if (pacakgesList == null) {
+				pacakgesList = new ArrayList<PackageInfo>();
+				pacakgesList.addAll(packages.values());
+			}
+			return pacakgesList.get(index);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/DependencyCalculatorTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceDumb.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceDumb.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceDumb.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl.execution;
+
+import java.io.File;
+import java.net.URL;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.tools.service.Manager;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+public class InstallPackageServiceDumb implements InstallPackageService {
+
+	public Manager getManager() {
+		return null;
+	}
+
+	public void reset() {
+	}
+
+	public void addBundle(File bundleFile)
+			throws InstallPackageServiceException {
+	}
+
+	public void addBundle(URL bundleURL) throws InstallPackageServiceException {
+	}
+
+	public void addBundlesFromDirectory(File bundlesDirectory)
+			throws InstallPackageServiceException {
+	}
+
+	public void installPackage(File applicationDirectory,
+			PackageInfo packageInfo) throws InstallPackageServiceException {
+	}
+
+	public void installPackage(File applicationDirectory, String packageCode)
+			throws InstallPackageServiceException {
+	}
+
+	public int getPackageCount() {
+		return 0;
+	}
+
+	public PackageInfo getPackageInfo(int index) {
+		return null;
+	}
+
+	public PackageInfo getPackageInfo(String packageCode) {
+		return null;
+	}
+
+	public void downloadPackage(PackageInfo packageInfo,
+			SimpleTaskStatus taskStatus) throws InstallPackageServiceException {
+	}
+
+	public List<String> getDefaultSelectedPackagesIDs() {
+		return null;
+	}
+
+	public List<String> getCategories() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List<String> getTypes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/execution/InstallPackageServiceDumb.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/creation/MakePluginPackageServiceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/creation/MakePluginPackageServiceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/creation/MakePluginPackageServiceTest.java	(revision 42196)
@@ -0,0 +1,171 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.creation;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.impl.InstallerServiceTest;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePluginPackageServiceTest extends InstallerServiceTest {
+
+	@Override
+	protected void doSetUp() throws Exception {
+
+	}
+
+	public void testReadPlugins() throws LocatorException,
+			MakePluginPackageServiceException, InstallPackageServiceException,
+			IOException {
+
+		MakePluginPackageService makePluginPackageService = InstallerLocator
+				.getInstallerManager().getMakePluginPackageService();
+
+		Assert
+				.assertEquals(3, makePluginPackageService
+						.getPluginPackageCount());
+
+		int pluginsNumber = 0;
+		for (int i = 0; i < 3; i++) {
+			PackageInfo packageInfo = makePluginPackageService
+					.getPluginPackageInfo(i);
+			if (packageInfo.getCode().equals("org.gvsig.wms")) {
+				assertNotNull(packageInfo.getState());
+				pluginsNumber++;
+			} else if (packageInfo.getCode().equals("org.gvsig.wfs")) {
+				assertEquals("RC2", packageInfo.getState());
+				pluginsNumber++;
+			} else if (packageInfo.getCode().equals("org.gvsig.wcs")) {
+				assertEquals("RC1", packageInfo.getState());
+				pluginsNumber++;
+			}
+		}
+
+		Assert.assertEquals(3, pluginsNumber);
+	}
+
+	public void testMakePluginPackage() throws IOException, LocatorException,
+			MakePluginPackageServiceException, InstallPackageServiceException {
+		File installerFile = super.getTemporalFile();
+
+		MakePluginPackageService makePluginPackageService = InstallerLocator
+				.getInstallerManager().getMakePluginPackageService();
+
+		PackageInfo packageInfo = makePluginPackageService
+				.getPluginPackageInfo("org.gvsig.wfs");
+
+		assertEquals("1.0.0", packageInfo.getVersion());
+
+		// Change the version to check that the installation process works fine
+		packageInfo.setVersion("1.0.1");
+
+		// Compress the plugin and create the installer compressed file
+		FileOutputStream os = new FileOutputStream(installerFile);
+		makePluginPackageService.createPackageSet(packageInfo, os);
+
+		// decompress the plugin and read the plugin information
+		InstallPackageService installPackageService = InstallerLocator
+				.getInstallerManager().getInstallPackageService();
+
+		installPackageService.addBundle(installerFile);
+		assertEquals(1, installPackageService.getPackageCount());
+		PackageInfo newInstallerInfo = makePluginPackageService
+				.getPluginPackageInfo(0);
+		assertEquals("1.0.1", newInstallerInfo.getVersion());
+	}
+
+	public void testCreateInstallerWithAntFile() throws IOException,
+			LocatorException, MakePluginPackageServiceException,
+			InstallPackageServiceException {
+		File installerFile = super.getTemporalFile();
+
+		MakePluginPackageService makePluginPackageService = InstallerLocator
+				.getInstallerManager().getMakePluginPackageService();
+
+		PackageInfo packageInfo = makePluginPackageService
+				.getPluginPackageInfo("org.gvsig.wfs");
+		packageInfo
+				.setAntScript(makePluginPackageService.getDefaultAntScript());
+
+		// Compress the plugin and create the installer compressed file
+		FileOutputStream os = new FileOutputStream(installerFile);
+		makePluginPackageService.createPackageSet(packageInfo, os);
+
+		// decompress the plugin and read the plugin information
+		InstallPackageService installPackageService = InstallerLocator
+				.getInstallerManager().getInstallPackageService();
+		installPackageService.addBundle(installerFile);
+		assertEquals(1, installPackageService.getPackageCount());
+		PackageInfo newInstallerInfo = makePluginPackageService
+				.getPluginPackageInfo(0);
+		assertTrue(newInstallerInfo.getAntScript().startsWith("<project"));
+	}
+
+	public void testCreateInstallerWithFiles() throws IOException,
+			LocatorException, MakePluginPackageServiceException,
+			InstallPackageServiceException {
+		File pluginsDirectory = super.getPluginsDirectory();
+		File installerFile = super.getTemporalFile();
+		File resource = new File(pluginsDirectory + File.separator
+				+ "org.gvsig.wms" + File.separator + "resources2.txt");
+
+		MakePluginPackageService makePluginPackageService = InstallerLocator
+				.getInstallerManager().getMakePluginPackageService();
+
+		PackageInfo packageInfo = makePluginPackageService
+				.getPluginPackageInfo("org.gvsig.wcs");
+		packageInfo.getFilesToCopy().add(resource);
+
+		// Compress the plugin and create the installer compressed file
+		FileOutputStream os = new FileOutputStream(installerFile);
+		makePluginPackageService.createPackageSet(packageInfo, os);
+
+		// decompress the plugin and read the plugin information
+		InstallPackageService installPackageService = InstallerLocator
+				.getInstallerManager().getInstallPackageService();
+		installPackageService.addBundle(installerFile);
+		assertEquals(1, installPackageService.getPackageCount());
+		PackageInfo newInstallerInfo = makePluginPackageService
+				.getPluginPackageInfo(0);
+		assertEquals(1, newInstallerInfo.getFilesToCopy().size());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/creation/MakePluginPackageServiceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/VersionTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/VersionTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/VersionTest.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl;
+
+import junit.framework.TestCase;
+
+import org.gvsig.installer.lib.api.Version;
+
+public class VersionTest extends TestCase {
+
+	public void testParseVersion() {
+		Version v = new DefaultVersion();
+
+		v.parse("2.3.20-SNAPSHOT-10");
+		assertEquals("0002.0003.0020-SNAPSHOT-0010", v.fullFormat());
+
+		v.parse("2.3.20-SNAPSHOT");
+		assertEquals("0002.0003.0020-SNAPSHOT-0000", v.fullFormat());
+
+		v.parse("2.3.20-10");
+		assertEquals("0002.0003.0020-ZZZZ-0010", v.fullFormat());
+
+		v.parse("2.3.20");
+		assertEquals("0002.0003.0020-ZZZZ-0000", v.fullFormat());
+
+		v.parse("2.3");
+		assertEquals("0002.0003.0000-ZZZZ-0000", v.fullFormat());
+
+		v.parse("2");
+		assertEquals("0002.0000.0000-ZZZZ-0000", v.fullFormat());
+	}
+
+	public void testCompareVersion() {
+		Version v1 = new DefaultVersion();
+		Version v2 = new DefaultVersion();
+
+		v1.parse("2.3.20-SNAPSHOT-10");
+		v2.parse("2.3");
+		boolean b = v2.check(">=", v1);
+		assert (b);
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/test/java/org/gvsig/installer/lib/impl/VersionTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.installer.lib.impl.DefaultInstallerLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/org/gvsig/installer/lib/keys/key.public
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/org/gvsig/installer/lib/keys/key.public
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/org/gvsig/installer/lib/impl/creation/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/org/gvsig/installer/lib/impl/creation/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/org/gvsig/installer/lib/impl/creation/install.xml	(revision 42196)
@@ -0,0 +1,43 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="org.gvsig.plugin1" default="main" basedir=".">
+	<!--
+		Predefined properties:
+		gvsig_dir = gvSIG application root installation directory
+		extensions_dir = gvSIG extensions directory
+	-->
+	<taskdef resource="net/sf/antcontrib/antlib.xml">
+		<classpath>
+			<pathelement location="${gvsig_dir}/lib/ant-contrib-1.0b3.jar" />
+		</classpath>
+	</taskdef>
+	<target name="main" depends="copy_files"/>
+    <target name="copy_files">
+    	<copy todir="${gvsig_dir}">
+    		<fileset dir="./files" includes="**"/>
+		</copy>
+	</target>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/resources/org/gvsig/installer/lib/impl/creation/install.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependenciesCalculator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependenciesCalculator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependenciesCalculator.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl;
+
+import org.gvsig.installer.lib.api.DependenciesCalculator;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+
+public class DefaultDependenciesCalculator extends DependenciesCalculatorV2 implements DependenciesCalculator {
+
+	public DefaultDependenciesCalculator(
+			InstallPackageService installService) {
+		super(installService);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependenciesCalculator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerLibrary.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl;
+
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.impl.creation.DefaultMakePluginPackageService;
+import org.gvsig.installer.lib.impl.execution.DefaultInstallPackageService;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultInstallerLibrary extends AbstractLibrary {
+
+	@Override
+	public void doRegistration() {
+		registerAsImplementationOf(InstallerLibrary.class);
+	}
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		InstallerLocator
+				.registerInstallerManager(DefaultInstallerManager.class);
+		InstallerProviderLocator
+				.registerInstallerProviderManager(DefaultInstallerProviderManager.class);
+		InstallerLocator.getInstallerManager()
+				.registerMakePluginPackageService(
+						DefaultMakePluginPackageService.class);
+		InstallerLocator.getInstallerManager().registerInstallPackageService(
+				DefaultInstallPackageService.class);
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		// Nothing to do
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV1.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV1.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV1.java	(revision 42196)
@@ -0,0 +1,333 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.lib.api.DependenciesCalculator;
+import org.gvsig.installer.lib.api.Dependency;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.tools.packageutils.StringWithAlias;
+
+public class DependenciesCalculatorV1 implements DependenciesCalculator {
+
+	private static Logger logger = LoggerFactory
+			.getLogger(DefaultDependenciesCalculator.class);
+
+	private InstallPackageService installService = null;
+	private List<PackageInfo> packagesInstalleds = null;
+	private List<PackageInfo> packagesToInstall = null;
+	private List<PackageInfo> requieredPackages = null;
+	private List<PackageInfo> conflictsPackages = null;
+	private Dependencies unresolvedDependencies = null;
+	private Map<Dependency, Set<PackageInfo>> requiredPackagesOfDependency = null;
+
+	public DependenciesCalculatorV1(InstallPackageService installService) {
+		super();
+		this.installService = installService;
+		this.packagesInstalleds = new ArrayList<PackageInfo>();
+		this.packagesToInstall = new ArrayList<PackageInfo>();
+		this.requiredPackagesOfDependency = new HashMap<Dependency, Set<PackageInfo>>();
+	}
+
+	private boolean addDependency(Dependencies dependencies,
+			Dependency dependency) {
+		try {
+			if (dependencies.contains(dependency)) {
+				return false;
+			}
+			Dependency dep = (Dependency) dependency.clone();
+			dependencies.add(dep);
+		} catch (CloneNotSupportedException e) {
+			throw new RuntimeException(e);
+		}
+		return true;
+	}
+
+	private void addDependency(Dependencies dependencies,
+			PackageInfo packageInfo) {
+
+		Dependencies pkgdependencies = packageInfo.getDependencies();
+		if (pkgdependencies != null) {
+			Iterator<Dependency> it = pkgdependencies.iterator();
+			Dependency dependency = null;
+			while (it.hasNext()) {
+				dependency = it.next();
+				Set<PackageInfo> requirers = requiredPackagesOfDependency
+						.get(dependency);
+				if (requirers == null) {
+					requirers = new HashSet<PackageInfo>();
+					requiredPackagesOfDependency.put(dependency, requirers);
+				}
+
+				this.addDependency(dependencies, dependency);
+				requirers.add(packageInfo);
+			}
+		}
+	}
+
+	public void addPackageToInstall(PackageInfo packageInfo) {
+		this.packagesToInstall.add(packageInfo);
+	}
+
+	public void addPackageToInstall(Collection<PackageInfo> packages) {
+		Iterator<PackageInfo> it = packages.iterator();
+		while (it.hasNext()) {
+			this.addPackageToInstall(it.next());
+		}
+	}
+
+	public void addInstalledPackage(PackageInfo packageInfo) {
+		this.packagesInstalleds.add(packageInfo);
+	}
+
+	public void addInstalledPackage(PackageInfo[] packages) {
+		for (int i = 0; i < packages.length; i++) {
+			this.addInstalledPackage(packages[i]);
+		}
+	}
+
+	@SuppressWarnings({ "deprecation", "unchecked" })
+	public void calculate() {
+
+		// Inicializa el conjunto de paquetes ya instalados mas los que
+		// se han solicitado instalar.
+		List<PackageInfo> packages = new ArrayList<PackageInfo>();
+		packages.addAll(this.packagesInstalleds);
+		packages.addAll(this.packagesToInstall);
+
+		Set<PackageInfo> allPackages = new HashSet<PackageInfo>();
+		allPackages.addAll(packages);
+		for (int i = 0; i < this.installService.getPackageCount(); i++) {
+			PackageInfo pkg = this.installService.getPackageInfo(i);
+			allPackages.add(pkg);
+		}
+			
+		List<PackageInfo> requieredPackages = null;
+		conflictsPackages = new ArrayList<PackageInfo>();
+
+		for (int retries = 0; retries < 100; retries++) {
+
+			requieredPackages = new ArrayList<PackageInfo>();
+
+			if( logger.isDebugEnabled() ) {
+				logger.debug("Pass " + retries);
+				logger.debug("All packages (installed+to-install):");
+				logger.debug("\n" + dumpPackages(packages));
+			}
+			Dependencies dependencies = new DefaultDependencies();
+			Iterator<PackageInfo> it = packages.iterator();
+			while (it.hasNext()) {
+				this.addDependency(dependencies, it.next());
+			}
+			if( logger.isDebugEnabled() ) {
+				logger.debug("Dependencies:");
+				logger.debug("\n"+dumpDependencies(dependencies));
+			}
+			unresolvedDependencies = new DefaultDependencies();
+			unresolvedDependencies.addAll(dependencies);
+
+			Iterator<PackageInfo> itAllPackages = allPackages.iterator();
+			while( itAllPackages.hasNext() ) {
+				PackageInfo pkg = itAllPackages.next();
+				if( logger.isDebugEnabled() ) {
+					logger.debug("Check " +pkg.toStringCompact());
+				}
+				List <Dependency> foundDependencies = null;
+				foundDependencies = dependencies.findAll(Dependency.REQUIRED, pkg.getAllCodes(), pkg.getVersion());
+				if (foundDependencies != null) {
+					PackageInfo pkg1 = getByCodeAndVersion(packages, pkg.getAllCodes(), pkg.getVersion());
+					if (pkg1 == null) {
+						logger.debug("           Add required");
+						requieredPackages.add(pkg);
+					}
+					unresolvedDependencies.removeAll(foundDependencies);
+				}
+				foundDependencies = dependencies.findAll(Dependency.CONFLICT, pkg.getAllCodes(), pkg.getVersion());
+				if (foundDependencies != null) {
+					PackageInfo pkg1 = getByCodeAndVersion(packages, pkg.getAllCodes(), pkg.getVersion());
+					if (pkg1 == null) {
+						logger.debug("           Add conflicts");
+						conflictsPackages.add(pkg);
+					}
+					unresolvedDependencies.removeAll(foundDependencies);
+				}
+			}
+			if( logger.isDebugEnabled() ) {
+				logger.debug("required packages:");
+				logger.debug("\n"+dumpPackages(requieredPackages));
+			}
+			if (requieredPackages.size() == 0) {
+				break;
+			}
+			packages.addAll(requieredPackages);
+			removeDuplicateds(packages);
+		}
+		// Eliminamos de la lista de paquetes los que ya estan instalados o
+		// los que elusuario pidio instalar.
+		requieredPackages = new ArrayList<PackageInfo>();
+		Iterator<PackageInfo> it = packages.iterator();
+		while (it.hasNext()) {
+			PackageInfo pkg = it.next();
+			if (this.packagesInstalleds.contains(pkg)) {
+				continue;
+			}
+			if (this.packagesToInstall.contains(pkg)) {
+				continue;
+			}
+			requieredPackages.add(pkg);
+		}
+
+		Collections.sort(requieredPackages, new Comparator<PackageInfo>() {
+			public int compare(PackageInfo o1, PackageInfo o2) {
+				return o1.getName().compareTo(o2.getName());
+			}
+		});
+		if( logger.isDebugEnabled() ) {
+			logger.debug("required packages");
+			logger.debug("\n"+dumpPackages(requieredPackages));
+			logger.debug("Conflict packages");
+			logger.debug("\n"+dumpPackages(conflictsPackages));
+		}
+		this.requieredPackages = requieredPackages;
+		dumpUnresolvedDependencies();
+		
+	}
+
+	private void dumpUnresolvedDependencies() {
+
+		Iterator<Dependency> iter = unresolvedDependencies.iterator();
+		while (iter.hasNext()) {
+			Dependency dep = iter.next();
+			Set<PackageInfo> required = requiredPackagesOfDependency.get(dep);
+			if (required != null) {
+				StringBuffer str_buffer = new StringBuffer();
+				str_buffer.append("Unresolved dependency: " + dep.toString()
+						+ " required by:\n");
+				Iterator<PackageInfo> iter2 = required.iterator();
+				while (iter2.hasNext()) {
+					str_buffer.append("   - " + iter2.next().toStringCompact()
+							+ "\n");
+				}
+				logger.info(str_buffer.toString());
+			}
+		}
+
+	}
+
+	public List<PackageInfo> getRequiredPackages() {
+		return this.requieredPackages;
+	}
+
+	@SuppressWarnings("deprecation")
+	public List<PackageInfo> getConflictPackages() {
+		return this.conflictsPackages;
+	}
+
+	public Dependencies getUnresolvedDependencies() {
+		return this.unresolvedDependencies;
+	}
+
+	private PackageInfo getByCodeAndVersion(Collection<PackageInfo> packages,
+			StringWithAlias code, Version version) {
+		Iterator<PackageInfo> it1 = packages.iterator();
+		while (it1.hasNext()) {
+			PackageInfo pkg1 = it1.next();
+			if (pkg1.hasThisCode(code)) {
+				if (pkg1.getVersion().check(">=", version)) {
+					return pkg1;
+				}
+			}
+		}
+		return null;
+	}
+
+	private void removeDuplicateds(List<PackageInfo> packages) {
+
+		boolean copy;
+		List<PackageInfo> lpackages = new ArrayList<PackageInfo>();
+
+		Iterator<PackageInfo> it1 = packages.iterator();
+		while (it1.hasNext()) {
+			PackageInfo pkg1 = it1.next();
+			copy = true;
+			Iterator<PackageInfo> it2 = packages.iterator();
+			while (it2.hasNext()) {
+				PackageInfo pkg2 = it2.next();
+				if (pkg1 == pkg2) {
+					continue;
+				}
+				if (!pkg1.hasThisCode(pkg2.getAllCodes())) {
+					continue;
+				}
+				if (pkg2.getVersion().check("<", pkg1.getVersion())) {
+					continue;
+				}
+				copy = false;
+				break;
+			}
+			if (copy) {
+				lpackages.add(pkg1);
+			}
+		}
+		packages.clear();
+		packages.addAll(lpackages);
+	}
+
+	private String dumpPackages(Collection<PackageInfo> pkgs) {
+		StringBuffer s = new StringBuffer();
+		Iterator<PackageInfo> it = pkgs.iterator();
+		while (it.hasNext()) {
+			s.append(it.next().toStringCompact());
+			s.append("\n");
+		}
+
+		return s.toString();
+	}
+
+	private String dumpDependencies(Collection<Dependency> dependencies) {
+		StringBuffer s = new StringBuffer();
+		Iterator<Dependency> it = dependencies.iterator();
+		while (it.hasNext()) {
+			s.append(it.next().toString());
+			s.append("\n");
+		}
+		return s.toString();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV1.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderManager.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.installer.lib.impl.execution.NotInstallerExecutionProviderException;
+import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
+import org.gvsig.installer.lib.spi.InstallerProviderManager;
+import org.gvsig.installer.lib.spi.execution.InstallPackageProvider;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.AbstractProviderManager;
+import org.gvsig.tools.service.spi.NotRegisteredException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderFactory;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultInstallerProviderManager extends AbstractProviderManager
+		implements InstallerProviderManager {
+
+	public static final String PROVIDERS_NAMESPACE = "Installer.providers";
+	public static final String PROVIDERS_NAME = "Installer.providers";
+	public static final String PROVIDERS_DESCRIPTION = "Installer providers";
+
+	private static Logger logger = LoggerFactory
+			.getLogger(DefaultInstallerProviderManager.class);
+
+	private static final String INSTALL_INFO_FILE = "package.info";
+
+	public DefaultInstallerProviderManager() {
+		super();
+	}
+
+	@Override
+	protected String getRegistryDescription() {
+		return PROVIDERS_DESCRIPTION;
+	}
+
+	@Override
+	protected String getRegistryKey() {
+		return PROVIDERS_NAME;
+	}
+
+	public ProviderServices createProviderServices(Service service) {
+		return new DefaultInstallerProviderServices();
+	}
+
+	public InstallPackageProvider createExecutionProvider(String providerName)
+			throws ServiceException {
+		DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+		DynClass dynClass = dynObjectManager.get(providerName);
+		if (dynClass == null) {
+			throw new NotRegisteredException(providerName);
+		}
+		DynObject serviceParameters = dynObjectManager
+				.createDynObject(dynClass);
+		Provider provider = createProvider(serviceParameters,
+				new DefaultInstallerProviderServices());
+		if (!(provider instanceof InstallPackageProvider)) {
+			throw new NotInstallerExecutionProviderException(providerName);
+		}
+		return (InstallPackageProvider) provider;
+	}
+
+	public InstallPackageProviderServices createInstallerProviderServices() {
+		return new DefaultInstallerProviderServices();
+	}
+
+	public String getPackageInfoFileName() {
+		return INSTALL_INFO_FILE;
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<ProviderFactory> getProviderFactories() {
+		ExtensionPointManager epm = ToolsLocator.getExtensionPointManager();
+		ExtensionPoint ep = epm.get(this.getRegistryKey());
+		List<String> names = ep.getNames();
+		List<ProviderFactory> factories = new ArrayList<ProviderFactory>();
+
+		for (int i = 0; i < names.size(); i++) {
+			try {
+				factories.add((ProviderFactory) ep.create(names.get(i)));
+			} catch (InstantiationException e) {
+				logger.info("Cannot retreive the factory provider of "
+						+ names.get(i), e);
+			} catch (IllegalAccessException e) {
+				logger.info("Cannot retreive the factory provider of "
+						+ names.get(i), e);
+			}
+		}
+
+		return factories;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV2.java	(revision 42196)
@@ -0,0 +1,359 @@
+package org.gvsig.installer.lib.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.lib.api.DependenciesCalculator;
+import org.gvsig.installer.lib.api.Dependency;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.tools.packageutils.StringWithAlias;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("deprecation")
+public class DependenciesCalculatorV2 implements DependenciesCalculator {
+
+	private static Logger logger = LoggerFactory
+			.getLogger(DefaultDependenciesCalculator.class);
+
+	private InstallPackageService installService = null;
+	private List<PackageInfo> packagesInstalleds = null;
+	private List<PackageInfo> packagesToInstall = null;
+	private List<PackageInfo> requieredPackages = null;
+	private List<PackageInfo> conflictsPackages = null;
+	private Dependencies unresolvedDependencies = null;
+	
+	public DependenciesCalculatorV2(InstallPackageService installService) {
+		super();
+		this.installService = installService;
+		this.packagesInstalleds = new ArrayList<PackageInfo>();
+		this.packagesToInstall = new ArrayList<PackageInfo>();
+	}
+	public void addPackageToInstall(PackageInfo packageInfo) {
+		this.packagesToInstall.add(packageInfo);
+	}
+
+	public void addPackageToInstall(Collection<PackageInfo> packages) {
+		Iterator<PackageInfo> it = packages.iterator();
+		while (it.hasNext()) {
+			this.addPackageToInstall(it.next());
+		}
+	}
+
+	public void addInstalledPackage(PackageInfo packageInfo) {
+		this.packagesInstalleds.add(packageInfo);
+	}
+
+	public void addInstalledPackage(PackageInfo[] packages) {
+		for (int i = 0; i < packages.length; i++) {
+			this.addInstalledPackage(packages[i]);
+		}
+	}
+
+	public List<PackageInfo> getRequiredPackages() {
+		return this.requieredPackages;
+	}
+
+	public List<PackageInfo> getConflictPackages() {
+		return this.conflictsPackages;
+	}
+
+	public Dependencies getUnresolvedDependencies() {
+		return this.unresolvedDependencies;
+	}
+
+	private class DependencyAndPackages implements Dependency {
+	
+		private List<PackageInfo> packages = null;
+		private Dependency delegate = null;
+		
+		DependencyAndPackages(Dependency dependency, PackageInfo packageInfo) {
+			this.delegate = dependency;
+			this.packages = new ArrayList<PackageInfo>();
+			this.packages.add(packageInfo);
+		}
+		
+		public List<PackageInfo> getPackages() {
+			return this.packages;
+		}
+		
+		public void addPackage(PackageInfo packageInfo) {
+			if( this.packages.contains(packageInfo)) {
+				return;
+			}
+			this.packages.add(packageInfo);
+		}
+
+		public Dependency parse(String dependency) {
+			return this.delegate.parse(dependency);
+		}
+
+		public String getType() {
+			return this.delegate.getType();
+		}
+
+		public String getCode() {
+			return this.delegate.getCode();
+		}
+
+		public String getOp() {
+			return this.delegate.getOp();
+		}
+
+		public Version getVersion() {
+			return this.delegate.getVersion();
+		}
+
+		public boolean match(String type, String code, Version version) {
+			return this.delegate.match(type, code, version);
+		}
+
+		public boolean match(String type, StringWithAlias code, Version version) {
+			return this.delegate.match(type, code, version);
+		}
+		public Object clone() throws CloneNotSupportedException {
+			DependencyAndPackages x = (DependencyAndPackages) super.clone();
+			x.packages = new ArrayList<PackageInfo>();
+			for (PackageInfo packageInfo : this.packages) {
+				x.packages.add(packageInfo);
+			}
+			return x;
+		}
+		
+		public String toString() {
+			StringBuffer buffer = new StringBuffer();
+			buffer.append( this.delegate.toString() );
+			buffer.append(" ( ");
+			for (PackageInfo packageInfo : this.packages) {
+				buffer.append(packageInfo.getCode());
+				buffer.append(" ");
+			}
+			buffer.append(" )");
+			return buffer.toString();
+		}
+		
+	}
+	
+	public void calculate() {
+		int retryCount = 1;
+		boolean retry = true;
+		
+		this.conflictsPackages = new ArrayList<PackageInfo>();
+		this.requieredPackages = new ArrayList<PackageInfo>();
+		this.unresolvedDependencies = new DefaultDependencies();
+		
+		if( logger.isInfoEnabled() ) {
+			logger.info("Installeds packages:\n" + dumpPackages(this.packagesInstalleds));
+			logger.info("Packages to install:\n" + dumpPackages(this.packagesToInstall));
+		}
+		while( retry ) {
+			if( retryCount > 50 ) {
+				logger.info("Too many retries to calculate dependencies.");
+				throw new RuntimeException("Too many retries to calculate dependencies");
+			}
+			/* 
+			 * Inicializamos el conjunto de paquetes que al final han de quedar
+			 * instalados con:
+			 * - Los paqetes ya instalados
+			 * - Los paquetes que hay que instalar
+			 * - Los paquetes que hay que instalar por que son depenendencia de 
+			 *   alguno instalado o a instalar.
+			 */
+			List<PackageInfo> packages = new ArrayList<PackageInfo>();
+			packages.addAll(this.packagesInstalleds);
+			packages.addAll(this.packagesToInstall);
+			packages.addAll(this.requieredPackages);
+			
+			/*
+			 * Una vez tenemos la lista de paquetes que han de quedar instalados,
+			 * Creamos la lista de dependencias de todos los paquetes. 
+			 */
+			Dependencies dependencies = new DefaultDependencies();
+			for (PackageInfo packageInfo : packages) {
+				Dependencies pkgDependencies = packageInfo.getDependencies();
+				for( int i=0; i< pkgDependencies.size(); i++) {
+					Dependency dependency = (Dependency) pkgDependencies.get(i);
+					List x = dependencies.findAll( dependency.getType(), dependency.getCode(), dependency.getVersion());
+					if( x == null ) {
+						dependencies.add(new DependencyAndPackages(dependency,packageInfo));
+					} else if(x.size()==1) {
+						((DependencyAndPackages)x.get(0)).addPackage(packageInfo);;
+					} else {
+						// Hay paquetes que tienen dependencias con el mismo paquete pero
+						// con versiones distintas. Cogemos la version mayor.
+						Collections.sort(x, new Comparator<Dependency>() {
+							public int compare(Dependency arg0, Dependency arg1) {
+								// Orden inverso, la primera la mas alta
+								return - arg0.getVersion().compareTo(arg1.getVersion());
+							}
+						});
+						((DependencyAndPackages)x.get(0)).addPackage(packageInfo);;
+						
+					}
+				}
+			}
+//			if( logger.isInfoEnabled() ) {
+//				logger.info("Attempt: " + retryCount);
+//				logger.info("Required packages:\n" + dumpPackages(this.requieredPackages));
+//				logger.info("Unresolved dependencies:\n" + dumpDependencies(this.unresolvedDependencies));
+//				logger.info("Conflict packages:\n" + dumpPackages(this.conflictsPackages));
+//				logger.info("All dependencies:\n" + dumpDependencies(dependencies));
+//			}
+
+			/*
+			 * Ahora calcularemos si se cumplen esas dependencias, y en caso de que no
+			 * si tenemos el paquete que se corresponde con esa dependencia.
+			 * Si se a�ade un paquete a instalar debido a que es dependencia de otro,
+			 * deberemos recalcular las dependencias de nuevo y reintentarlo para ver
+			 * si este nuevo paquete a introducido nuevas dependencias.
+			 */
+			retry = calculateRequiredPackagesAndUnresolvedDependencies(dependencies);
+			if( retry ) {
+				retryCount +=1;
+			} else {
+				calculateConflictPackages(dependencies);
+			}
+		}
+
+		// Ordenamos los resultados para hacer previsible y repetibles los resultados.
+		if( this.requieredPackages!=null && !this.requieredPackages.isEmpty() ) {
+			Collections.sort(this.requieredPackages, new Comparator<PackageInfo>() {
+				public int compare(PackageInfo o1, PackageInfo o2) {
+					return o1.getCode().compareTo(o2.getCode());
+				}
+			});
+		}
+		if( this.conflictsPackages!=null && !this.conflictsPackages.isEmpty() ) {
+			Collections.sort(this.conflictsPackages, new Comparator<PackageInfo>() {
+				public int compare(PackageInfo o1, PackageInfo o2) {
+					return o1.getCode().compareTo(o2.getCode());
+				}
+			});
+		}
+		if( this.unresolvedDependencies!=null && !this.unresolvedDependencies.isEmpty() ) {
+			Collections.sort(this.unresolvedDependencies, new Comparator<Dependency>() {
+				public int compare(Dependency o1, Dependency o2) {
+					return o1.getCode().compareTo(o2.getCode());
+				}
+			});
+		}
+		
+		if( logger.isInfoEnabled() ) {
+			logger.info("Required packages:\n" + dumpPackages(this.requieredPackages));
+			logger.info("Unresolved dependencies:\n" + dumpDependencies(this.unresolvedDependencies));
+			logger.info("Conflict packages:\n" + dumpPackages(this.conflictsPackages));
+			logger.info("Attempts Requireds: " + retryCount);
+		}
+	}
+	
+	private boolean calculateRequiredPackagesAndUnresolvedDependencies(Dependencies dependencies) {
+		boolean retry = false;
+		for( int i=0; i<dependencies.size(); i++ ) {
+			DependencyAndPackages dependency = (DependencyAndPackages) dependencies.get(i);
+			if( Dependency.REQUIRED.equals(dependency.getType()) ) {
+				PackageInfo availablePackage = getInstalledOrToInstallOrRequiredsPackage(dependency);
+				if( availablePackage==null ) {
+					availablePackage = getAvalible(dependency);
+					if( availablePackage != null ) {
+						logger.info("Added new package "+availablePackage.getCode()+" required by dependency "+dependency.toString()+".");
+						this.requieredPackages.add(availablePackage);
+						/*
+						 * Al a�adir paquetes nuevos, debemos recualcular las
+						 * dependencias de nuevo y volver a comprobar si se cumplen.
+						 */
+						retry = true; 
+					} else {
+						this.unresolvedDependencies.add(dependency);
+					}
+				}
+			}
+		}
+		return retry;
+	}
+	
+	private void calculateConflictPackages(Dependencies dependencies) {
+		for( int i=0; i<dependencies.size(); i++ ) {
+			DependencyAndPackages dependency = (DependencyAndPackages) dependencies.get(i);
+			if( Dependency.CONFLICT.equals(dependency.getType()) ) {
+				PackageInfo pkg = getInstalledOrToInstallOrRequiredsPackage(dependency);
+				if( pkg != null ) {
+					this.conflictsPackages.addAll(dependency.getPackages());
+				}
+			}
+		}
+	}
+
+	/**
+	 * Busca entre los paquetes instalados o a instalar alguno que
+	 * se corresponda con los requerimientos de la dependencia y lo
+	 * devuelve. Devuelve null si no lo encuentra.
+	 * 
+	 * @param dependency
+	 * @return the package that match with the dependency or null
+	 */
+	private PackageInfo getInstalledOrToInstallOrRequiredsPackage(
+			DependencyAndPackages dependency) {
+		for (PackageInfo pkg : this.packagesInstalleds ) {
+			if( dependency.match(dependency.getType(), pkg.getAllCodes(), pkg.getVersion())) {
+				return pkg;
+			}
+		}
+		for (PackageInfo pkg : this.packagesToInstall ) {
+			if( dependency.match(dependency.getType(), pkg.getAllCodes(), pkg.getVersion())) {
+				return pkg;
+			}
+		}
+		for (PackageInfo pkg : this.requieredPackages ) {
+			if( dependency.match(dependency.getType(), pkg.getAllCodes(), pkg.getVersion())) {
+				return pkg;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Busca entre los paquetes disponibles a ver si encuentra uno que se 
+	 * corresponda con los requerimientos de la dependencia y si lo encunetra
+	 * lo devuelve. Si no devuelbe null.
+	 * 
+	 * @param dependency
+	 * @return the package that match with the dependency or null
+	 */
+	private PackageInfo getAvalible(DependencyAndPackages dependency) {
+		for (int i = 0; i < this.installService.getPackageCount(); i++) {
+			PackageInfo pkg = this.installService.getPackageInfo(i);
+			if( dependency.match(dependency.getType(), pkg.getAllCodes(), pkg.getVersion())) {
+				return pkg;
+			}
+		}
+		return null;
+	}
+	
+	private String dumpPackages(Collection<PackageInfo> pkgs) {
+		StringBuffer s = new StringBuffer();
+		Iterator<PackageInfo> it = pkgs.iterator();
+		while (it.hasNext()) {
+			s.append(it.next().toStringCompact());
+			s.append("\n");
+		}
+
+		return s.toString();
+	}
+	
+	private String dumpDependencies(Collection<Dependency> dependencies) {
+		StringBuffer s = new StringBuffer();
+		Iterator<Dependency> it = dependencies.iterator();
+		while (it.hasNext()) {
+			s.append(it.next().toString());
+			s.append("\n");
+		}
+		return s.toString();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DependenciesCalculatorV2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultVersion.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultVersion.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultVersion.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl;
+
+import java.security.InvalidParameterException;
+import java.text.MessageFormat;
+
+import org.gvsig.installer.lib.api.Version;
+
+public class DefaultVersion implements Version {
+
+	private int mayor = 0;
+	private int minor = 0;
+	private int rev = 0;
+	private String classifier = null;
+	private int build = 0;
+
+	public DefaultVersion() {
+		super();
+	}
+
+	protected DefaultVersion(int mayor, int minor, int rev, String classifier,
+			int build) {
+		this();
+		this.mayor = mayor;
+		this.minor = minor;
+		this.rev = rev;
+		this.classifier = classifier;
+		this.build = build;
+	}
+
+	public Version parse(String version) {
+		// Formato: mayor.minor.rev-classifier-build
+
+		String[] x = version.split("[.]");
+		int lx = x.length;
+		if (lx == 1) {
+			this.mayor = parseIntClassifierAndBuild(x[0], version);
+			this.minor = 0;
+			this.rev = 0;
+			this.classifier = null;
+			this.build = 0;
+		} else if (lx == 2) {
+			this.mayor = Integer.parseInt(x[0]);
+			this.minor = parseIntClassifierAndBuild(x[1], version);
+			this.rev = 0;
+			this.classifier = null;
+			this.build = 0;
+		} else if (lx == 3) {
+			this.mayor = Integer.parseInt(x[0]);
+			this.minor = Integer.parseInt(x[1]);
+			this.rev = parseIntClassifierAndBuild(x[2], version);
+		} else {
+			throw new InvalidParameterException(version);
+		}
+		return this;
+	}
+
+	private int parseIntClassifierAndBuild(String s, String fullversion) {
+		int value;
+
+		String[] y = s.split("[-]");
+		int ly = y.length;
+		if (ly == 1) {
+			value = Integer.parseInt(y[0]);
+			this.classifier = null;
+			this.build = 0;
+		} else if (ly == 2) {
+			value = Integer.parseInt(y[0]);
+			try {
+				this.build = Integer.parseInt(y[1]);
+				this.classifier = null;
+			} catch (NumberFormatException e) {
+				this.build = 0;
+				this.classifier = y[1];
+			}
+		} else if (ly == 3) {
+			value = Integer.parseInt(y[0]);
+			this.classifier = y[1];
+			this.build = Integer.parseInt(y[2]);
+		} else {
+			throw new InvalidParameterException(fullversion);
+		}
+		return value;
+	}
+
+	public int getMayor() {
+		return this.mayor;
+	}
+
+
+	public int getMajor() {
+	    return this.mayor;
+	}
+
+	public int getMinor() {
+		return this.minor;
+	}
+
+	public int getRevision() {
+		return this.rev;
+	}
+
+	public String getClassifier() {
+		return this.classifier;
+	}
+
+	public int getBuild() {
+		return this.build;
+	}
+
+	public boolean check(String op, Version other) {
+		if ("=".equals(op) || "==".equals(op) || "-eq".equals(op)) {
+			return this.fullFormat().compareTo(other.fullFormat()) == 0;
+		}
+		if (">".equals(op) || "-gt".equals(op)) {
+			return this.fullFormat().compareTo(other.fullFormat()) > 0;
+		}
+		if (">=".equals(op) || "-ge".equals(op)) {
+			return this.fullFormat().compareTo(other.fullFormat()) >= 0;
+		}
+		if ("<".equals(op) || "-lt".equals(op)) {
+			return this.fullFormat().compareTo(other.fullFormat()) < 0;
+		}
+		if ("<=".equals(op) || "-le".equals(op)) {
+			return this.fullFormat().compareTo(other.fullFormat()) <= 0;
+		}
+		return false;
+	}
+
+	@Override
+	public String toString() {
+		if (this.classifier == null) {
+			return MessageFormat.format("{0}.{1}.{2}-{3,number,####}",
+					this.mayor, this.minor, this.rev, this.build);
+		} else {
+			return MessageFormat.format("{0}.{1}.{2}-{3}-{4,number,####}",
+					this.mayor, this.minor, this.rev, this.classifier,
+					this.build);
+		}
+	}
+
+	public String fullFormat() {
+		if (this.classifier == null) {
+			// classifier ZZZZ allows compare correctly tow versions
+			return MessageFormat
+					.format(
+							"{0,number,0000}.{1,number,0000}.{2,number,0000}-ZZZZ-{3,number,0000}",
+							this.mayor, this.minor, this.rev, this.build);
+		} else {
+			return MessageFormat
+					.format(
+							"{0,number,0000}.{1,number,0000}.{2,number,0000}-{3}-{4,number,0000}",
+							this.mayor, this.minor, this.rev, this.classifier,
+							this.build);
+		}
+	}
+
+	public int compareTo(Object arg0) {
+		Version other = (Version)arg0;
+		return this.fullFormat().compareTo(other.fullFormat());
+	}
+	
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		return super.clone();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		Version other = (Version) obj;
+		if (this.mayor != other.getMayor()) {
+			return false;
+		}
+		if (this.minor != other.getMinor()) {
+			return false;
+		}
+		if (this.rev != other.getRevision()) {
+			return false;
+		}
+		if (this.build != other.getBuild()) {
+			return false;
+		}
+		if (this.classifier == null) {
+			if (other.getClassifier() == null) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+		if (!this.classifier.equalsIgnoreCase(other.getClassifier())) {
+			return false;
+		}
+		return true;
+	}
+	
+	public int hashCode() {
+	    return (classifier == null ? 0 : classifier.hashCode()) +
+	        (mayor<<13) + (minor<<19) + (rev<<25) + build;
+	}
+
+	public Version setBuild(int build) {
+		this.build = build;
+		return this;
+	}
+		
+	public String format(String fmt) {
+		String s = fmt;
+		s = s.replaceAll("%M", String.valueOf(this.mayor));
+		s = s.replaceAll("%m", String.valueOf(this.minor));
+		s = s.replaceAll("%r", String.valueOf(this.rev));
+		s = s.replaceAll("%c", this.classifier);
+		s = s.replaceAll("%b", String.valueOf(this.build));
+		return s;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultVersion.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependencies.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependencies.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependencies.java	(revision 42196)
@@ -0,0 +1,179 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.lib.api.Dependency;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.tools.packageutils.StringWithAlias;
+
+public class DefaultDependencies extends ArrayList implements
+		Dependencies {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6743931124069465522L;
+
+	private Dependency createDependency() {
+		// InstallerManager manager = InstallerLocator.getInstallerManager();
+		// return manager.createDependency();
+		return new DefaultDependency();
+	}
+
+	public Dependencies parse(String dependecies) {
+		if (dependecies == null) {
+			this.clear();
+			return this;
+		}
+		dependecies = dependecies.trim();
+		if (dependecies.equals("")) {
+			this.clear();
+			return this;
+		}
+
+		String[] x = dependecies.split(",");
+		for (int i = 0; i < x.length; i++) {
+			this.add(createDependency().parse(x[i]));
+		}
+		return this;
+	}
+
+	@Override
+	public String toString() {
+		StringBuffer s = null;
+		Iterator<Dependency> it = this.iterator();
+		while (it.hasNext()) {
+			if (s == null) {
+				s = new StringBuffer();
+			} else {
+				s.append(", ");
+			}
+			s.append(it.next().toString());
+		}
+		if (s == null) {
+			return "";
+		}
+		return s.toString();
+	}
+
+	@Override
+	public boolean contains(Object o) {
+		if (!(o instanceof Dependency)) {
+			return false;
+		}
+		Iterator<Dependency> it = this.iterator();
+		while (it.hasNext()) {
+			Dependency dep = it.next();
+			if (dep.equals(o)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public boolean match(String type, String code, Version version) {
+		Iterator<Dependency> it = this.iterator();
+		while (it.hasNext()) {
+			Dependency dependency = it.next();
+			if (dependency.match(type, code, version)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public Dependency find(String type, String code, Version version) {
+		Iterator<Dependency> it = this.iterator();
+		while (it.hasNext()) {
+			Dependency dependency = it.next();
+			if (dependency.match(type, code, version)) {
+				return dependency;
+			}
+		}
+		return null;
+	}
+	
+	   public List findAll(String type, String code, Version version) {
+	       
+	       List<Dependency> resp = null;
+	        Iterator<Dependency> it = this.iterator();
+	        while (it.hasNext()) {
+	            Dependency dependency = it.next();
+	            if (dependency.match(type, code, version)) {
+	                if (resp == null) {
+	                    resp = new ArrayList<Dependency>();
+	                }
+	                resp.add(dependency);
+	            }
+	        }
+	        return resp;
+	    }
+
+		public boolean match(String type, StringWithAlias code, Version version) {
+			Iterator<Dependency> it = this.iterator();
+			while (it.hasNext()) {
+				Dependency dependency = it.next();
+				if (dependency.match(type, code, version)) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		public Dependency find(String type, StringWithAlias code, Version version) {
+			Iterator<Dependency> it = this.iterator();
+			while (it.hasNext()) {
+				Dependency dependency = it.next();
+				if (dependency.match(type, code, version)) {
+					return dependency;
+				}
+			}
+			return null;
+		}
+		
+	public List findAll(String type, StringWithAlias code, Version version) {
+
+		List<Dependency> resp = null;
+		Iterator<Dependency> it = this.iterator();
+		while (it.hasNext()) {
+			Dependency dependency = it.next();
+			if (dependency.match(type, code, version)) {
+				if (resp == null) {
+					resp = new ArrayList<Dependency>();
+				}
+				resp.add(dependency);
+			}
+		}
+		return resp;
+	}
+
+
+	   
+	   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependencies.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/NotPropertyFoundException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/NotPropertyFoundException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/NotPropertyFoundException.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.info;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class NotPropertyFoundException extends InstallerInfoFileException {
+
+	private static final long serialVersionUID = -3465150550431966595L;
+
+	private String propertyName = null;
+
+	private static final String MESSAGE_KEY = "install_infofile_property_not_found";
+	private static final String FORMAT_STRING = "The property %(propertyName) is mandatory but it is not in the install.info file.";
+
+	public NotPropertyFoundException(String propertyName) {
+		super(FORMAT_STRING, MESSAGE_KEY, serialVersionUID);
+		this.propertyName = propertyName;
+	}
+
+	@Override
+	protected Map<String, String> values() {
+		Map<String, String> map = new HashMap<String, String>();
+		map.put("propertyName", String.valueOf(propertyName));
+		return map;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/NotPropertyFoundException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriter.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.info;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Properties;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.PackageInfoWriter;
+import org.gvsig.installer.lib.impl.utils.SignUtil;
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerInfoFileWriter implements PackageInfoWriter {
+
+	/**
+	 * Writes the install.info file
+	 * 
+	 * @param fileName
+	 *            The file name to write the installation information
+	 * @param installInfo
+	 *            The installation information
+	 * @throws InstallerInfoFileException
+	 */
+	public void write(PackageInfo installInfo, String fileName)
+			throws InstallerInfoFileException {
+		write(installInfo, new File(fileName));
+	}
+
+	/**
+	 * Writes the install.info file
+	 * 
+	 * @param file
+	 *            The file to write the installation information
+	 * @param installInfo
+	 *            The installation information
+	 * @throws InstallerInfoFileException
+	 */
+	public void write(PackageInfo installInfo, File file)
+			throws InstallerInfoFileException {
+		try {
+			write(installInfo, new FileOutputStream(file));
+		} catch (FileNotFoundException e) {
+			throw new InstallerInfoFileException("install_infofile_not_found",
+					e);
+		}
+		SignUtil signutil = new SignUtil();
+		if( signutil.canSign() ) {
+			signutil.sign(file);
+		}
+	}
+
+    /**
+     * Writes the install.info file
+     * 
+     * @param os
+     *            The file to write the installation information
+     * @param installInfo
+     *            The installation information
+     * @throws InstallerInfoFileException
+     */
+     public void write(PackageInfo installInfo, OutputStream os)
+        throws InstallerInfoFileException {
+        try {
+            // Fill the properties
+            Properties properties = new Properties();
+            properties.setProperty(InstallerInfoTags.CODE, toStr(installInfo.getCode()));
+            properties.setProperty(InstallerInfoTags.NAME, toStr(installInfo.getName()));
+            properties.setProperty(InstallerInfoTags.DESCRIPTION, toStr(installInfo.getDescription()));
+            properties.setProperty(InstallerInfoTags.VERSION, installInfo.getVersion().toString());
+            properties.setProperty(InstallerInfoTags.BUILD, Integer.toString(installInfo.getBuild()));
+            properties.setProperty(InstallerInfoTags.STATE, toStr(installInfo.getState()));
+            properties.setProperty(InstallerInfoTags.OFFICIAL, Boolean.toString(installInfo.isOfficial()));
+            properties.setProperty(InstallerInfoTags.TYPE, toStr(installInfo.getType()));
+            properties.setProperty(InstallerInfoTags.OS, toStr(installInfo.getOperatingSystem()));
+            properties.setProperty(InstallerInfoTags.ARCHITECTURE, toStr(installInfo.getArchitecture()));
+            properties.setProperty(InstallerInfoTags.JVM, toStr(installInfo.getJavaVM()));
+            properties.setProperty(InstallerInfoTags.GVSIG_VERSION, toStr(installInfo.getGvSIGVersion()));
+            properties.setProperty(InstallerInfoTags.OWNER, toStr(installInfo.getOwner()));
+            properties.setProperty(InstallerInfoTags.CATEGORIES, toStr(installInfo.getCategoriesAsString()));
+            properties.setProperty(InstallerInfoTags.DEPENDENCIES, toStr(installInfo.getDependencies()));
+            properties.setProperty(InstallerInfoTags.SOURCES_URL, toStr(installInfo.getSourcesURL()));
+            properties.setProperty(InstallerInfoTags.WEB_URL, toStr(installInfo.getWebURL()));
+            properties.setProperty(InstallerInfoTags.OWNER_URL, toStr(installInfo.getOwnerURL()));
+            properties.setProperty(InstallerInfoTags.MODEL_VERSION, toStr(installInfo.getModelVersion()));
+            if( !StringUtils.isBlank(installInfo.getDownloadURLAsString()) ) {
+                properties.setProperty(InstallerInfoTags.DOWNLOAD_URL, toStr(installInfo.getDownloadURLAsString()));
+            }
+            
+            properties.store(os, "");
+            os.close();
+        } catch (IOException e) {
+            throw new InstallerInfoFileException(
+                    "install_infofile_writing_error", e);
+        }
+    }
+           
+    private String toStr(Object s) {
+       return s == null ? "" : s.toString();
+   }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileWriter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoTags.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoTags.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoTags.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.info;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerInfoTags {
+
+	public static final String CODE = "code";
+	public static final String CODEALIAS = "code-alias";
+	public static final String NAME = "name";
+	public static final String DESCRIPTION = "description";
+	public static final String VERSION = "version";
+	public static final String BUILD = "buildNumber";
+	public static final String BUILD_OLD = "build";
+	public static final String STATE = "state";
+	public static final String OFFICIAL = "official";
+	public static final String TYPE = "type";
+	public static final String OS = "operating-system";
+	public static final String ARCHITECTURE = "architecture";
+	public static final String JVM = "java-version";
+	public static final String GVSIG_VERSION = "gvSIG-version";
+	public static final String DOWNLOAD_URL = "download-url";
+	public static final String MODEL_VERSION = "model-version";
+	public static final String OWNER = "owner";
+	public static final String OWNER_URL = "owner-url";
+	public static final String SOURCES_URL = "sources-url";
+	public static final String WEB_URL = "web-url";
+	public static final String DEPENDENCIES = "dependencies";
+	public static final String CATEGORIES = "categories";
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoTags.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReader.java	(revision 42196)
@@ -0,0 +1,279 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.info;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Properties;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.PackageInfoReader;
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallerInfoFileReader implements PackageInfoReader {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(InstallerInfoFileReader.class);
+
+	/**
+	 * Reads and parses the install.info file and creates one object that
+	 * contains the information.
+	 * 
+	 * @param fileName
+	 *            The file name that contains the install.info information.
+	 * @return An object with the information about the installation
+	 * @throws InstallerInfoFileException
+	 */
+	public void read(PackageInfo installerInfoResource, String fileName)
+			throws InstallerInfoFileException {
+		read(installerInfoResource, new File(fileName));
+	}
+
+	/**
+	 * Reads and parses the install.info file and creates one object that
+	 * contains the information.
+	 * 
+	 * @param file
+	 *            The file that contains the install.info information.
+	 * @return An object with the information about the installation
+	 * @throws InstallerInfoFileException
+	 */
+	public void read(PackageInfo installerInfoResource, File file)
+			throws InstallerInfoFileException {
+		if (!file.exists()) {
+			throw new InstallerInfoFileException("install_infofile_not_found");
+		}
+		try {
+			read(installerInfoResource, new FileInputStream(file));
+		} catch (FileNotFoundException e) {
+			throw new InstallerInfoFileException("install_infofile_not_found",
+					e);
+		}
+	}
+
+	/**
+	 * Reads and parses the install.info file and creates one object that
+	 * contains the information.
+	 * 
+	 * @param is
+	 *            The input stream that contains the install.info information.
+	 * @return An object with the information about the installation
+	 * @throws InstallerInfoFileException
+	 */
+	public void read(PackageInfo installerInfoResource, InputStream is)
+			throws InstallerInfoFileException {
+		Properties properties = new Properties();
+		try {
+			properties.load(is);
+			is.close();
+		} catch (IOException e) {
+			throw new InstallerInfoFileException(
+					"install_infofile_reading_error", e);
+		}
+
+		installerInfoResource.setCode(properties
+				.getProperty(InstallerInfoTags.CODE));
+		
+		String codealias1 = properties.getProperty(InstallerInfoTags.CODEALIAS);
+		if( codealias1 != null ) {
+			String[] s = codealias1.split(",");
+			for( int i=0; i<s.length; i++) {
+				s[i] = s[i].trim();
+				if(! "".equals(s[i]) ) {
+					installerInfoResource.getAllCodes().add(s[i]);
+				}
+			}
+		}
+		
+		String name = properties.getProperty(InstallerInfoTags.NAME);
+		installerInfoResource.setName(name);
+		installerInfoResource.setDescription(properties
+				.getProperty(InstallerInfoTags.DESCRIPTION));
+		String version = properties.getProperty(InstallerInfoTags.VERSION);
+		if (version == null) {
+			LOG
+					.warn(
+							"Got a null version string for the {} plugin "
+									+ "Ignoring it and leaving the default version value",
+							name);
+		} else {
+			installerInfoResource.setVersion(version);
+		}
+		installerInfoResource.setType(properties
+				.getProperty(InstallerInfoTags.TYPE));
+		String build = properties.getProperty(InstallerInfoTags.BUILD);
+		if (build != null && installerInfoResource.getVersion().getBuild() == 0) {
+			try {
+				installerInfoResource.setBuild(Integer.parseInt(build));
+			} catch (Exception e) {
+				installerInfoResource.setBuild(0);
+				LOG.info(
+						"Error while converting to int the "
+								+ InstallerInfoTags.BUILD + " property value: "
+								+ build, e);
+			}
+		}
+
+		// Look for the old build tag just in case (the new one is buildNumber).
+		if (installerInfoResource.getBuild() <= 0) {
+			String oldBuild = properties
+					.getProperty(InstallerInfoTags.BUILD_OLD);
+			if (oldBuild != null) {
+				try {
+					installerInfoResource.setBuild(Integer.parseInt(oldBuild));
+				} catch (Exception e) {
+					installerInfoResource.setBuild(0);
+					LOG.info("Error while converting to int the "
+							+ InstallerInfoTags.BUILD_OLD + " property value: "
+							+ oldBuild, e);
+				}
+			}
+		}
+		installerInfoResource.setState(properties
+				.getProperty(InstallerInfoTags.STATE));
+		try {
+			installerInfoResource.setOfficial(Boolean.parseBoolean(properties
+					.getProperty(InstallerInfoTags.OFFICIAL)));
+		} catch (Exception e) {
+			installerInfoResource.setOfficial(false);
+			LOG.info("Error while converting to boolean the "
+					+ InstallerInfoTags.OFFICIAL + " property value: "
+					+ properties.getProperty(InstallerInfoTags.OFFICIAL), e);
+		}
+
+		String os = properties.getProperty(InstallerInfoTags.OS);
+		if (os != null) {
+			installerInfoResource.setOperatingSystem(os);
+		}
+
+		String arch = properties.getProperty(InstallerInfoTags.ARCHITECTURE);
+		if (arch != null) {
+			installerInfoResource.setArchitecture(arch);
+		}
+
+		String jvm = properties.getProperty(InstallerInfoTags.JVM);
+		if (jvm != null) {
+			installerInfoResource.setJavaVM(jvm);
+		}
+
+		installerInfoResource.setGvSIGVersion(properties
+				.getProperty(InstallerInfoTags.GVSIG_VERSION));
+
+		String urlStr = properties.getProperty(InstallerInfoTags.DOWNLOAD_URL);
+		if (urlStr != null) {
+			installerInfoResource.setDownloadURL(urlStr);
+		}
+
+		String modelVersion = properties
+				.getProperty(InstallerInfoTags.MODEL_VERSION);
+		if (modelVersion != null) {
+			installerInfoResource.setModelVersion(modelVersion);
+		}
+
+		String owner = properties.getProperty(InstallerInfoTags.OWNER);
+		if (owner != null) {
+			installerInfoResource.setOwner(owner);
+		}
+
+		String dependencies = properties
+				.getProperty(InstallerInfoTags.DEPENDENCIES);
+		if (dependencies != null) {
+			installerInfoResource.setDependencies(dependencies);
+		}
+
+		String sourcesUrlStr = properties
+				.getProperty(InstallerInfoTags.SOURCES_URL);
+		if (sourcesUrlStr != null && !sourcesUrlStr.equals("")) {
+			URL sourcesURL;
+			try {
+				if( sourcesUrlStr.toLowerCase().startsWith("scm:svn:http") ) {
+					sourcesUrlStr = sourcesUrlStr.substring(8);
+				}
+				sourcesURL = new URL(sourcesUrlStr);
+			} catch (MalformedURLException e) {
+				throw new InstallerInfoFileException(
+						"Error getting the value of the sources url property as URL: "
+								+ sourcesUrlStr, e);
+			}
+			installerInfoResource.setSourcesURL(sourcesURL);
+		} else {
+			installerInfoResource.setSourcesURL(null);
+		}
+
+		String webUrlStr = properties.getProperty(InstallerInfoTags.WEB_URL);
+		if (webUrlStr != null && !webUrlStr.equals("")) {
+			URL webUrl;
+			try {
+				webUrl = new URL(webUrlStr);
+			} catch (MalformedURLException e) {
+				throw new InstallerInfoFileException(
+						"Error getting the value of the web url property as URL: "
+								+ webUrlStr, e);
+			}
+			installerInfoResource.setWebURL(webUrl);
+		} else {
+			installerInfoResource.setWebURL(null);
+		}
+
+		String ownerURLStr = properties
+				.getProperty(InstallerInfoTags.OWNER_URL);
+		if (ownerURLStr != null && !ownerURLStr.equals("")) {
+			URL ownerUrl;
+			try {
+				ownerUrl = new URL(ownerURLStr);
+			} catch (MalformedURLException e) {
+				throw new InstallerInfoFileException(
+						"Error getting the value of the owner url property as URL: "
+								+ ownerURLStr, e);
+			}
+			installerInfoResource.setOwnerURL(ownerUrl);
+		} else {
+			installerInfoResource.setOwnerURL(null);
+		}
+
+		String categories = properties
+				.getProperty(InstallerInfoTags.CATEGORIES);
+		if (categories != null && !categories.equals("")) {
+			installerInfoResource.addCategoriesAsString(categories);
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/info/InstallerInfoFileReader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultPackageInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultPackageInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultPackageInfo.java	(revision 42196)
@@ -0,0 +1,788 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.InvalidParameterException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.InstallerManager.ARCH;
+import org.gvsig.installer.lib.api.InstallerManager.JVM;
+import org.gvsig.installer.lib.api.InstallerManager.OS;
+import org.gvsig.installer.lib.api.InstallerManager.STATE;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.impl.info.InstallerInfoTags;
+import org.gvsig.installer.lib.impl.utils.DeleteFile;
+import org.gvsig.installer.lib.impl.utils.Download;
+import org.gvsig.installer.lib.impl.utils.SignUtil;
+import org.gvsig.tools.packageutils.StringWithAlias;
+import org.gvsig.tools.packageutils.impl.DefaultStringWithAlias;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultPackageInfo implements PackageInfo {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultPackageInfo.class);
+
+    private StringWithAlias code = null;
+    private String name = null;
+    private String description = null;
+    private Version version = null;
+    private boolean official;
+    private List<File> auxFiles = null;
+    private String antScript = null;
+    private String type = "unknow";
+    private Boolean signed = false;
+    private Boolean broken = false;
+
+    private String state = STATE.DEVEL;
+    private String operatingSystem = OS.ALL;
+    private String architecture = ARCH.ALL;
+    private String javaVM = JVM.J1_5;
+
+    private String owner = "";
+    private URL ownerURL = null;
+    private URL sources = null;
+    private String gvSIGVersion = "";
+
+    private String defaultDownloadURL = null;
+
+    private String modelVersion = "1.0.1";
+    private Dependencies dependencies = null;
+    private List<String> categories = null;
+
+    private URL webURL = null;
+
+    public DefaultPackageInfo() {
+        super();
+        auxFiles = new ArrayList<File>();
+        this.version = new DefaultVersion().parse("0.0.1");
+        this.dependencies = new DefaultDependencies();
+        this.categories = new ArrayList<String>();
+    }
+
+    public String getCode() {
+    	if( code == null ) {
+    		return null;
+    	}
+        return code.toString();
+    }
+
+    public StringWithAlias getAllCodes() {
+    	return this.code;
+    }
+    
+    private String getAliasAsString() {
+    	if( this.code == null ) {
+    		return "";
+    	}
+    	StringBuffer s = new StringBuffer();
+    	Iterator alias = this.code.getAlias().iterator();
+    	while( alias.hasNext() ) {
+    		String ss = (String) alias.next();
+    		s.append(ss);
+    		if( alias.hasNext() ) {
+    			s.append(", ");
+    		}
+    	}
+    	return s.toString();
+    }
+    
+    public boolean hasThisCode(String code) {
+    	if( this.code == null ) {
+    		if( code == null ) {
+    			return true;
+    		}
+    		return false;
+    	}
+    	return this.code.equalsIgnoreCase(code);
+    }
+    
+    public boolean hasThisCode(StringWithAlias code) {
+    	if( this.code == null ) {
+    		if( code == null ) {
+    			return true;
+    		}
+    		return false;
+    	}
+    	return this.code.equalsIgnoreCase(code);
+    }
+    
+
+    public String getID() {
+        String id =
+            this.getCode() + "#" + this.getVersion() 
+                + "#" + this.getOperatingSystem() + "#"
+                + this.getArchitecture();
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public Version getVersion() {
+        return version;
+    }
+
+    public int getBuild() {
+        return this.version.getBuild();
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public boolean isOfficial() {
+        return official;
+    }
+
+    public void setCode(String code) {
+    	if( code == null ) {
+    		this.code = null;
+    	} else {
+    		this.code = new DefaultStringWithAlias(code);
+    	}
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public void setVersion(String version) {
+        if (version == null) {
+            return;
+        }
+        int prev = this.version.getBuild();
+        this.version.parse(version);
+        int curr = this.version.getBuild();
+        if (prev != 0 && curr == 0) {
+            this.version.setBuild(prev);
+        }
+    }
+
+    public void setVersion(Version version) {
+        try {
+            int prev = this.version.getBuild();
+            this.version = (Version) version.clone();
+            int curr = this.version.getBuild();
+            if (prev != 0 && curr == 0) {
+                this.version.setBuild(prev);
+            }
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setBuild(int build) {
+        this.version.setBuild(build);
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public void setOfficial(boolean official) {
+        this.official = official;
+    }
+
+    public String getOperatingSystem() {
+        return operatingSystem;
+    }
+
+    public void setOperatingSystem(String operatingSystem) {
+        this.operatingSystem = operatingSystem;
+    }
+
+    public String getArchitecture() {
+        return architecture;
+    }
+
+    public void setArchitecture(String architecture) {
+        this.architecture = architecture;
+    }
+
+    public String getJavaVM() {
+        return javaVM;
+    }
+
+    public void setJavaVM(String javaVM) {
+        this.javaVM = javaVM;
+    }
+
+    public String getAntScript() {
+        return antScript;
+    }
+
+    public void setAntScript(String antScript) {
+        this.antScript = antScript;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getGvSIGVersion() {
+        return gvSIGVersion;
+    }
+
+    public void setGvSIGVersion(String gvSIGVersion) {
+        this.gvSIGVersion = gvSIGVersion;
+    }
+
+    private URL internalGetDownloadURL() {
+        if (defaultDownloadURL != null) {
+            try {
+                return new URL(defaultDownloadURL);
+            } catch (MalformedURLException e) {
+                throw new RuntimeException(
+                    "Error converting to URL the package download url: "
+                        + defaultDownloadURL, e);
+            }
+        }
+        return null;
+    }
+
+    public URL getDownloadURL() {
+        InstallerManager manager = InstallerLocator.getInstallerManager();
+        if (manager == null) {
+            return null;
+        }
+        return getDownloadURL(manager.getDownloadBaseURL());
+    }
+
+    public URL getDownloadURL(URL baseURL) {
+        try {
+            return internalGetDownloadURL();
+        } catch (RuntimeException e) {
+            // The download URL in the package info is not a valid URL,
+            // so it might be a relative one.
+            // Try to create and absolute one.
+        }
+
+        // Create a full URL with the base one and the download one.
+        try {
+            return new URL(baseURL, this.defaultDownloadURL);
+        } catch (MalformedURLException e) {
+            throw new RuntimeException(
+                "Error converting to URL the package download url, "
+                    + "with the base URL: " + baseURL
+                    + ", the package download URL: " + this.defaultDownloadURL,
+                e);
+        }
+    }
+
+    public String getDownloadURLAsString() {
+        return this.defaultDownloadURL;
+    }
+
+    public void setDownloadURL(URL defaultDownloadURL) {
+        this.defaultDownloadURL = defaultDownloadURL.toString();
+    }
+
+    public void setDownloadURL(String defaultDownloadURL) {
+        this.defaultDownloadURL = defaultDownloadURL;
+    }
+
+    public String getModelVersion() {
+        return modelVersion;
+    }
+
+    public void setModelVersion(String modelVersion) {
+        this.modelVersion = modelVersion;
+    }
+
+    public String getOwner() {
+        return owner;
+    }
+
+    public void setOwner(String owner) {
+        this.owner = owner;
+    }
+
+    public URL getOwnerURL() {
+        return ownerURL;
+    }
+
+    public void setOwnerURL(URL sources) {
+        this.ownerURL = sources;
+    }
+
+    public URL getSourcesURL() {
+        return sources;
+    }
+
+    public void setSourcesURL(URL sources) {
+        this.sources = sources;
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer buffer = new StringBuffer(super.toString()).append(" (");
+
+        append(buffer, InstallerInfoTags.CODE, getCode());
+        append(buffer, InstallerInfoTags.NAME, getName());
+        append(buffer, InstallerInfoTags.DESCRIPTION, getDescription());
+        append(buffer, InstallerInfoTags.GVSIG_VERSION, getGvSIGVersion());
+        append(buffer, InstallerInfoTags.VERSION, getVersion());
+        append(buffer, InstallerInfoTags.BUILD, getBuild());
+        append(buffer, InstallerInfoTags.OS, getOperatingSystem());
+        append(buffer, InstallerInfoTags.ARCHITECTURE, getArchitecture());
+        append(buffer, InstallerInfoTags.JVM, getJavaVM());
+        append(buffer, InstallerInfoTags.DOWNLOAD_URL, getDownloadURL());
+        append(buffer, InstallerInfoTags.STATE, getState());
+        append(buffer, InstallerInfoTags.OFFICIAL, isOfficial());
+        append(buffer, InstallerInfoTags.TYPE, getType());
+        append(buffer, InstallerInfoTags.MODEL_VERSION, getModelVersion());
+        append(buffer, InstallerInfoTags.OWNER, getOwner());
+        append(buffer, InstallerInfoTags.OWNER_URL, getOwnerURL());
+        append(buffer, InstallerInfoTags.SOURCES_URL, getSourcesURL());
+        append(buffer, InstallerInfoTags.DEPENDENCIES, getDependencies());
+        append(buffer, InstallerInfoTags.WEB_URL, getWebURL());
+        append(buffer, InstallerInfoTags.CATEGORIES, getCategories());
+        append(buffer, InstallerInfoTags.CODEALIAS, getAliasAsString());
+
+        return buffer.append(')').toString();
+    }
+
+    public String toStringCompact() {
+        // type code version state os arch jvm dep
+        return String
+            .format(
+                "%1$-8.8s %2$-40s %3$-20.20s %4$-5.5s %5$-5.5s %6$-6.6s %7$-5.5s %8$s %8$s",
+                this.type, this.code, this.version, this.state,
+                this.operatingSystem, this.architecture, this.javaVM,
+                this.dependencies, this.getAliasAsString());
+    }
+
+    private DefaultPackageInfo append(StringBuffer buffer, String key,
+        Object value) {
+        buffer.append("\n\t").append(key).append(": ")
+            .append(value == null ? "" : value);
+        return this;
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DefaultPackageInfo clone = (DefaultPackageInfo) super.clone();
+        clone.auxFiles = new ArrayList<File>(auxFiles);
+        return clone;
+    }
+
+    public File downloadFile() throws InstallPackageServiceException {
+        return this.downloadFile(null);
+    }
+
+    public class FileDownloadException extends InstallPackageServiceException {
+
+        private static final long serialVersionUID = 8640183295766490512L;
+
+        private static final String message = "File '%(url)s' download error";
+
+        private static final String KEY = "_File_XurlX_download_error";
+
+        public FileDownloadException(URL url, IOException e) {
+            super(message, e, KEY, serialVersionUID);
+            setValue("url", url.toString());
+        }
+
+    }
+
+    public File downloadFile(SimpleTaskStatus taskStatus)
+        throws InstallPackageServiceException {
+    	File file = null;
+    	try {
+	        Download download = new Download(taskStatus);
+	
+	        // First try to download from the index base URL this package info has
+	        // been downloaded from, looking first as if the index is located in the
+	        // main version folder, and if not in the build folder. 
+	        // If also not there, download from the URL available in the 
+	        // downloadURL property.
+	        // Example baseURL: http://downloads.gvsig.org/download/gvsig-desktop/dists/2.0.0/
+			String versionRelativePath = "../../pool/" + getCode() + "/"
+					+ getPackageFileName();
+			file = downloadFromRelativeURL(download, versionRelativePath);
+	
+			if (file == null) {
+		        // Example baseURL: http://downloads.gvsig.org/download/gvsig-desktop/dists/2.0.0/builds/2048/
+				String buildRelativePath = "../../../../pool/" + getCode() + "/"
+						+ getPackageFileName();
+				file = downloadFromRelativeURL(download, buildRelativePath);
+			}
+	
+			if (file == null) {
+				file = downloadFromPackageInfoURL(download);
+			}
+			
+    	} catch(InstallPackageServiceException ex) {
+    		LOG.info("Can't download package '"+this.getCode()+"' from server '"+getBaseURL().toString()+"'.",ex);
+    		throw ex;
+    	} catch(RuntimeException ex) {
+    		LOG.info("Can't download package '"+this.getCode()+"' from server '"+getBaseURL().toString()+"'.",ex);
+    		throw ex;
+    	}
+    	if( file == null ) {
+    		LOG.info("Can't download package '"+this.getCode()+"' from server '"+getBaseURL().toString()+"'.");
+    	}
+		return file;
+	}
+
+    private URL getBaseURL() {
+		InstallerManager manager = InstallerLocator.getInstallerManager();
+		URL baseURL = manager.getDownloadBaseURL();
+		return baseURL;
+    }
+    
+	private File downloadFromRelativeURL(Download download,
+			String buildRelativePath) {
+		InstallerManager manager = InstallerLocator.getInstallerManager();
+		URL baseURL = manager.getDownloadBaseURL();
+		try {
+			URL downloadURL = new URL(baseURL, buildRelativePath);
+			return download.downloadFile(downloadURL, null);
+		} catch (IOException e) {
+			LOG.debug("Package " + getName()
+					+ " not found relative to the build index URL: " + baseURL
+					+ ", in the URL: " + buildRelativePath, e);
+		}
+		return null;
+	}
+
+	private File downloadFromPackageInfoURL(Download download) throws FileDownloadException {
+		try {
+			return download.downloadFile(this.getDownloadURL(), null);
+		} catch (IOException ex3) {
+			throw new FileDownloadException(this.getDownloadURL(), ex3);
+		}
+	}
+
+    private String getPackageFileName() {
+        Object[] values =
+            new Object[] { "gvSIG-desktop", getGvSIGVersion(), getCode(),
+                getVersion(), getState(), getOperatingSystem(),
+                getArchitecture(), getJavaVM() };
+        StringBuffer buffer = new StringBuffer();
+        for (int i = 0; i < values.length - 1; i++) {
+            buffer.append(values[i]).append('-');
+        }
+        buffer.append(values[values.length - 1]).append(".gvspkg");
+        return buffer.toString();
+    }
+
+    public void addFileToCopy(File file) {
+        auxFiles.add(file);
+    }
+
+    public File getFileToCopy(int i) {
+        return auxFiles.get(i);
+    }
+
+    public void removeFileToCopy(File file) {
+        auxFiles.remove(file);
+    }
+
+    public void clearFilesToCopy() {
+        auxFiles.clear();
+    }
+
+    public List<File> getFilesToCopy() {
+        return auxFiles;
+    }
+
+    public boolean removeInstallFolder(File folder) {
+        DeleteFile delete = new DeleteFile();
+        boolean success = delete.delete(folder);
+        setAntScript(null);
+        clearFilesToCopy();
+        return success;
+    }
+
+    public boolean removeFilesFolder(File folder) {
+        DeleteFile delete = new DeleteFile();
+        return delete.delete(folder);
+    }
+
+    public boolean matchID(String string) {
+        String id = this.getID();
+        String[] stringParts = string.split("#");
+
+        switch (stringParts.length) {
+        case 1:
+            if (stringParts[0].equals(this.getCode())) {
+                return true;
+            } else {
+                return false;
+            }
+        case 2:
+            if (!stringParts[0].equals(this.getCode())) {
+                return false;
+            }
+            Version version = new DefaultVersion();
+            try {
+                version.parse(stringParts[1]);
+            } catch (InvalidParameterException ex) {
+                return false;
+            }
+
+            if (version.equals(this.getVersion())) {
+                return true;
+            }
+            return false;
+        default:
+            return string.equals(id);
+
+        }
+
+    }
+
+    public Dependencies getDependencies() {
+        return this.dependencies;
+    }
+
+    public void setDependencies(Dependencies dependencies) {
+        this.dependencies = dependencies;
+    }
+
+    public void setDependencies(String dependencies) {
+        if (dependencies == null) {
+            this.dependencies = null;
+        } else {
+            this.dependencies = new DefaultDependencies().parse(dependencies);
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        PackageInfo other;
+        try {
+            other = (PackageInfo) obj;
+        } catch (Exception e) {
+            return false;
+        }
+        if (!code.equalsIgnoreCase(other.getCode())) {
+            return false;
+        }
+        if (!version.check("=", other.getVersion())) {
+            return false;
+        }
+        if (!operatingSystem.equalsIgnoreCase(other.getOperatingSystem())) {
+            return false;
+        }
+        if (!gvSIGVersion.equalsIgnoreCase(other.getGvSIGVersion())) {
+            return false;
+        }
+        if (!state.equalsIgnoreCase(other.getState())) {
+            return false;
+        }
+        if (!architecture.equalsIgnoreCase(other.getArchitecture())) {
+            return false;
+        }
+        if (!javaVM.equalsIgnoreCase(other.getJavaVM())) {
+            return false;
+        }
+        if (!type.equalsIgnoreCase(other.getType())) {
+            return false;
+        }
+        if (official != other.isOfficial()) {
+            return false;
+        }
+        return true;
+    }
+
+    public URL getWebURL() {
+        return webURL;
+    }
+
+    public void setWebURL(URL webURL) {
+        this.webURL = webURL;
+    }
+
+    public List<String> getCategories() {
+        return this.categories;
+    }
+
+    public void setCategories(List categoriesList) {
+        for (int i = 0; i < categoriesList.size(); i++) {
+            if (!this.categories.contains(categoriesList.get(i))) {
+                this.categories.add((String) categoriesList.get(i));
+            }
+        }
+    }
+
+    public String getCategoriesAsString() {
+        String categoriesString = "";
+        for (int i = 0; i < this.categories.size(); i++) {
+            if (i + 1 < this.categories.size()) {
+                categoriesString += this.categories.get(i) + ", ";
+            } else {
+                categoriesString += this.categories.get(i);
+            }
+        }
+        return categoriesString;
+    }
+
+    public void addCategoriesAsString(String categoriesString) {
+        if (categoriesString == null) {
+            return;
+        }
+        categoriesString.trim();
+        String[] cadena = categoriesString.split(",");
+
+        for (int i = 0; i < cadena.length; i++) {
+            String trimCadena = cadena[i].trim();
+            if ((!this.categories.contains(trimCadena)) && (trimCadena != "")) {
+                this.categories.add(trimCadena);
+            }
+        }
+
+    }
+
+    public void checkSignature(byte[] pkgdata) {
+        this.signed = false;
+        SignUtil signutil = null;
+        List<byte[]> keys =
+            InstallerLocator.getInstallerManager().getPublicKeys();
+        if (keys.size() < 1) {
+            // No hay claves publicas, asi que no comprobamos ninguna firma
+            // y decirmos a todos que no estan firmados.
+            this.signed = false;
+            return;
+        }
+        for (byte[] rawkey : keys) {
+            signutil = new SignUtil(rawkey);
+            if (signutil.canVerify()) {
+                int status = signutil.verify(pkgdata);
+                switch (status) {
+                case SignUtil.SIGN_OK:
+                    // El paquete tiene una firma correcta,lo marcamos
+                    // como firmado y salimos.
+                    this.signed = true;
+                    return;
+                case SignUtil.NOT_SIGNED:
+                    // El paquete no va firmado, lo marcamos como no
+                    // firmado y salimos.
+                    this.signed = false;
+                    return;
+                case SignUtil.SIGN_FAIL:
+                default:
+                    // La firma del paquete no es correcta para esta clave,
+                    // lo intentamos con el resto de claves.
+                    break;
+                }
+            }
+        }
+        // Si habiendo claves publicas la comprobacion de la firma con todas
+        // ellas
+        // falla marcamos el paquete como roto.
+        this.broken = true;
+    }
+
+    public boolean isBroken() {
+        if (this.broken) {
+            return true;
+        }
+        // if( this.isOfficial() && !this.isSigned() ) {
+        // return true;
+        // }
+        return false;
+    }
+
+    public boolean isSigned() {
+        return signed;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.installer.lib.api.PackageInfo#getApplicationVersion()
+     */
+    public Version getApplicationVersion() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.installer.lib.api.PackageInfo#setApplicationVersion(org.gvsig.installer.lib.api.Version)
+     */
+    public void setApplicationVersion(Version version) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.installer.lib.api.PackageInfo#setValue(java.lang.String, java.lang.Object)
+     */
+    public void setValue(String name, Object value) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.installer.lib.api.PackageInfo#getValue(java.lang.String)
+     */
+    public Object getValue(String name) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.installer.lib.api.PackageInfo#getPreferedPackageFileName()
+     */
+    public String getPreferedPackageFileName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultPackageInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerManager.java	(revision 42196)
@@ -0,0 +1,657 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.installer.lib.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.installer.lib.api.DependenciesCalculator;
+import org.gvsig.installer.lib.api.Dependency;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.PackageInfoReader;
+import org.gvsig.installer.lib.api.PackageInfoWriter;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.lib.api.creation.MakePackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.impl.creation.DefaultMakePackageService;
+import org.gvsig.installer.lib.impl.info.InstallerInfoFileReader;
+import org.gvsig.installer.lib.impl.info.InstallerInfoFileWriter;
+import org.gvsig.installer.lib.spi.InstallerProviderManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.service.AbstractManager;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultInstallerManager extends AbstractManager implements
+        InstallerManager {
+
+    private static Logger logger = LoggerFactory.getLogger(DefaultInstallerManager.class);
+            
+    private static class LocalRepositoryLocation {
+
+        private File location;
+        private Set<String> types;
+
+        public LocalRepositoryLocation(File localtion, String type) {
+            this.location = localtion;
+            this.types = new HashSet<String>();
+            this.addType(type);
+        }
+
+        public LocalRepositoryLocation(File localtion) {
+            this(localtion, null);
+        }
+
+        public void addType(String type) {
+            if ( !StringUtils.isBlank(type) ) {
+                this.types.add(type);
+            }
+        }
+
+        public void addType(LocalRepositoryLocation location) {
+            this.types.addAll(location.getTypes());
+        }
+
+        public Collection<String> getTypes() {
+            return this.types;
+        }
+
+        public File getLocation() {
+            return this.location;
+        }
+
+        public String getDefaultType() {
+            if ( this.types.isEmpty() ) {
+                return null;
+            }
+            return this.types.iterator().next();
+        }
+
+        public boolean is(File location) {
+            if ( location.equals(this.location) ) {
+                return true;
+            }
+            return false;
+        }
+
+        public boolean contains(File file) {
+            if ( file.getAbsolutePath().startsWith(this.location.getAbsolutePath()) ) {
+                return true;
+            }
+            return false;
+        }
+        
+        public boolean contains(PackageInfo packageInfo) {
+            if( !this.support(packageInfo.getType()) ) {
+                return false;
+            }
+            String packageInfoName = packageInfo.getCode() + File.separator + PACKAGE_INFO_FILE_NAME;
+            File packageInfoFile = new File(this.location,packageInfoName);
+            return packageInfoFile.exists();
+        }
+        
+        public boolean support(String type) {
+            for( String atype : this.types ) {
+                if( atype != null ) {
+                    if( atype.equalsIgnoreCase(type) ) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
+    }
+
+    private static class LocalRepositoriesLocations extends ArrayList<LocalRepositoryLocation> {
+
+        public LocalRepositoryLocation getLocation(File location) {
+            Iterator<LocalRepositoryLocation> it = super.iterator();
+            while ( it.hasNext() ) {
+                LocalRepositoryLocation x = it.next();
+                if ( x.is(location) ) {
+                    return x;
+                }
+            }
+            return null;
+        }
+
+        public boolean add(LocalRepositoryLocation location) {
+            LocalRepositoryLocation old = this.getLocation(location.getLocation());
+            if ( old != null ) {
+                old.addType(location);
+                return true;
+            }
+            return super.add(location);
+        }
+
+    }
+
+    private static final String INSTALLER_MANAGER_EXTENSION_POINT = "InstallerManagerExtensionPoint";
+    private static final String INSTALLER_CREATION_SERVICE_NAME = "InstallerCreationService";
+    private static final String INSTALLER_EXECUTION_SERVICE_NAME = "InstallerExecutionService";
+    private ExtensionPointManager extensionPoints = ToolsLocator
+            .getExtensionPointManager();
+
+    private String packageSetNameFormat = "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspks";
+    private String packageNameFormat = "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspkg";
+    private String packageIndexNameFormat = "gvSIG-desktop-{0}-{1}-{2}-{4}-{5}-{6}-{7}.gvspki";
+
+    private URL BaseDownloadURL = null;
+    private Version version = null;
+    private List<LocalRepositoryLocation> localRepositoriesLocation = null;
+    private Map<String,File> defaultRepositoryLocation = null;
+
+    public DefaultInstallerManager() {
+        super(new DefaultInstallerProviderManager());
+        this.defaultRepositoryLocation = new HashMap<String,File>();
+        localRepositoriesLocation = new LocalRepositoriesLocations();
+    }
+
+    public String getPackageSetNameFormat() {
+        return packageSetNameFormat;
+    }
+
+    public void setPackageSetNameFormat(String packageSetNameFormat) {
+        this.packageSetNameFormat = packageSetNameFormat;
+    }
+
+    public String getPackageNameFormat() {
+        return packageNameFormat;
+    }
+
+    public void setPackageNameFormat(String packageNameFormat) {
+        this.packageNameFormat = packageNameFormat;
+    }
+
+    public String getPackageIndexNameFormat() {
+        return packageIndexNameFormat;
+    }
+
+    public void setPackageIndexNameFormat(String packageIndexNameFormat) {
+        this.packageIndexNameFormat = packageIndexNameFormat;
+    }
+
+    public MakePluginPackageService getMakePluginPackageService()
+            throws MakePluginPackageServiceException {
+        ExtensionPoint ep = extensionPoints
+                .add(INSTALLER_MANAGER_EXTENSION_POINT);
+        try {
+            Object[] args = new Object[]{this};
+            return (MakePluginPackageService) ep.create(
+                    INSTALLER_CREATION_SERVICE_NAME, args);
+        } catch (Exception e) {
+            throw new MakePluginPackageServiceException(
+                    "Exception creating the installer service to create installers",
+                    e);
+        }
+    }
+
+    public class InstallerCreationException extends
+            InstallPackageServiceException {
+
+        private static final long serialVersionUID = 759329820705535873L;
+
+        private static final String message = "Error creating the installer service to install plugins";
+
+        private static final String KEY = "_Error_creating_the_installer_service_to_install_plugins";
+
+        public InstallerCreationException(Exception e) {
+            super(message, e, KEY, serialVersionUID);
+        }
+
+    }
+
+    public InstallPackageService getInstallPackageService()
+            throws InstallPackageServiceException {
+        ExtensionPoint ep = extensionPoints
+                .add(INSTALLER_MANAGER_EXTENSION_POINT);
+        try {
+            Object[] args = new Object[1];
+            args[0] = this;
+            return (InstallPackageService) ep.create(
+                    INSTALLER_EXECUTION_SERVICE_NAME, args);
+        } catch (Exception e) {
+            throw new InstallerCreationException(e);
+        }
+    }
+
+    public void registerMakePluginPackageService(
+            Class<? extends MakePluginPackageService> clazz) {
+        ExtensionPoint extensionPoint = extensionPoints.add(
+                INSTALLER_MANAGER_EXTENSION_POINT, "");
+        extensionPoint.append(INSTALLER_CREATION_SERVICE_NAME, "", clazz);
+    }
+
+    public void registerInstallPackageService(
+            Class<? extends InstallPackageService> clazz) {
+        ExtensionPoint extensionPoint = extensionPoints.add(
+                INSTALLER_MANAGER_EXTENSION_POINT, "");
+        extensionPoint.append(INSTALLER_EXECUTION_SERVICE_NAME, "", clazz);
+    }
+
+    public Service getService(DynObject parameters) throws ServiceException {
+        return null;
+    }
+
+    public String getPackageSetFileName(PackageInfo info) {
+        Object[] parameters = getPackageNameFormatParameters(info);
+        return MessageFormat.format(getPackageSetNameFormat(), parameters);
+    }
+
+    public String getPackageFileName(PackageInfo info) {
+        Object[] parameters = getPackageNameFormatParameters(info);
+        return MessageFormat.format(getPackageNameFormat(), parameters);
+    }
+
+    public String getPackageIndexFileName(PackageInfo info) {
+        Object[] parameters = getPackageNameFormatParameters(info);
+        return MessageFormat.format(getPackageIndexNameFormat(), parameters);
+    }
+
+    private Object[] getPackageNameFormatParameters(PackageInfo info) {
+        Object[] parameters = new Object[8];
+        parameters[PACKAGE_FILE_NAME_FIELDS.GVSIG_VERSION] = info
+                .getGvSIGVersion();
+        parameters[PACKAGE_FILE_NAME_FIELDS.NAME] = info.getCode();
+        parameters[PACKAGE_FILE_NAME_FIELDS.VERSION] = info.getVersion();
+        parameters[PACKAGE_FILE_NAME_FIELDS.BUILD] = info.getBuild();
+        parameters[PACKAGE_FILE_NAME_FIELDS.STATE] = info.getState();
+        parameters[PACKAGE_FILE_NAME_FIELDS.OS] = info.getOperatingSystem();
+        parameters[PACKAGE_FILE_NAME_FIELDS.ARCH] = info.getArchitecture();
+        parameters[PACKAGE_FILE_NAME_FIELDS.JVM] = info.getJavaVM();
+        return parameters;
+    }
+
+    public PackageInfo[] getInstalledPackages(File pluginsDirectory)
+            throws MakePluginPackageServiceException {
+        MakePluginPackageService service = getMakePluginPackageService();
+        return service.getInstalledPackages();
+    }
+
+    public PackageInfo[] getInstalledPackages()
+            throws MakePluginPackageServiceException {
+        MakePluginPackageService service = getMakePluginPackageService();
+        return service.getInstalledPackages();
+    }
+
+    public String getDefaultPackageFileExtension() {
+        return "gvspkg";
+    }
+
+    public String getDefaultPackageSetFileExtension() {
+        return "gvspks";
+    }
+
+    public String getDefaultIndexSetFileExtension() {
+        return "gvspki";
+    }
+
+    public String getOperatingSystem() {
+        String osname = System.getProperty("os.name");
+        if ( osname.toLowerCase().startsWith("linux") ) {
+            return InstallerManager.OS.LINUX;
+        }
+        if ( osname.toLowerCase().startsWith("window") ) {
+            return InstallerManager.OS.WINDOWS;
+        }
+        return osname;
+    }
+
+    public String getArchitecture() {
+        String osarch = System.getProperty("os.arch");
+        if ( osarch.toLowerCase().startsWith("i386") ) {
+            return InstallerManager.ARCH.X86;
+        }
+        if ( osarch.toLowerCase().startsWith("x86") ) {
+            return InstallerManager.ARCH.X86;
+        }
+        if ( osarch.toLowerCase().startsWith("amd64") ) {
+            return InstallerManager.ARCH.X86_64;
+        }
+        return osarch;
+    }
+
+    public Dependency createDependency(PackageInfo packageInfo) {
+        return new DefaultDependency(packageInfo);
+    }
+
+    public Dependency createDependency() {
+        return new DefaultDependency();
+    }
+
+    public DependenciesCalculator createDependenciesCalculator(
+            InstallPackageService installService) {
+        return new DefaultDependenciesCalculator(installService);
+    }
+
+    public Version createVersion() {
+        if ( version == null ) {
+            return new DefaultVersion();
+        }
+        Version v = null;
+        try {
+            v = (Version) version.clone();
+        } catch (CloneNotSupportedException e) {
+            // Version clone can't trow exception
+        }
+        return v;
+    }
+
+    public PackageInfoReader getDefaultPackageInfoReader() {
+        return new InstallerInfoFileReader();
+    }
+
+    public PackageInfoWriter getDefaultPackageInfoWriter() {
+        return new InstallerInfoFileWriter();
+    }
+
+    public MakePackageService createMakePackage(File packageFolder,
+            PackageInfo packageInfo) {
+        return new DefaultMakePackageService(this, packageFolder, packageInfo);
+    }
+
+    public PackageInfo createPackageInfo() {
+        return new DefaultPackageInfo();
+    }
+
+    public PackageInfo createPackageInfo(InputStream stream) throws BaseException {
+        PackageInfo pkg = new DefaultPackageInfo();
+        PackageInfoReader reader = this.getDefaultPackageInfoReader();
+        reader.read(pkg, stream);
+        return pkg;
+    }
+
+    public PackageInfo createPackageInfo(File file) throws BaseException {
+        FileInputStream fis = null;
+        PackageInfo pkg = null;
+        try {
+            fis = new FileInputStream(file);
+            pkg = this.createPackageInfo(fis);
+            fis.close();
+        } catch (Exception ex) {
+
+        } finally {
+            try {
+                fis.close();
+            } catch (IOException ex) {
+                //
+            }
+        }
+        return pkg;
+    }
+
+    public URL getDownloadBaseURL() {
+        return this.BaseDownloadURL;
+    }
+
+    public String getVersion() {
+        return this.version.toString();
+    }
+
+    public void setVersion(Version version) {
+        try {
+            this.version = (Version) version.clone();
+        } catch (CloneNotSupportedException e) {
+            // This should not happen
+        }
+
+    }
+
+    public Version getVersionEx() {
+        try {
+            return (Version) this.version.clone();
+        } catch (CloneNotSupportedException e) {
+            // This should not happen
+            return null;
+        }
+    }
+
+    public void setDownloadBaseURL(URL url) {
+        this.BaseDownloadURL = url;
+    }
+
+    public void setVersion(String version) {
+        if ( this.version == null ) {
+            this.version = new DefaultVersion();
+        }
+        this.version.parse(version);
+    }
+
+    public File getDefaultLocalAddonRepository() {
+        File f = this.defaultRepositoryLocation.get("plugin");
+        return f;
+    }
+
+    public void setDefaultLocalAddonRepository(File defaultAddonsRepository) {
+        this.defaultRepositoryLocation.put("plugin", defaultAddonsRepository);
+        this.localRepositoriesLocation.add(new LocalRepositoryLocation(defaultAddonsRepository, "plugin"));
+    }
+
+    public void addLocalAddonRepository(File path) {
+        this.addLocalAddonRepository(path, "plugin");
+    }
+
+    public File getDefaultLocalAddonRepository(String packageType) {
+        return this.getDefaultLocalAddonRepository(packageType,ACCESS_READ);
+    }
+
+    public boolean needAdminRights() {
+       List<File> folders = getLocalAddonRepositories(); 
+       for( File folder : folders) {
+           if( !canWrite(folder) ) {
+               return true;
+           }
+       }
+       return false;
+    }
+    
+    private boolean canWrite(File f) {
+        if( !f.canWrite() ) {
+            return false;
+        }
+        // Esto requiere java 1.7 o superior y aun debemos ejecutar con 1.6
+//        Path path = FileSystems.getDefault().getPath(f.getAbsolutePath());
+//        boolean b = Files.isWritable(path);
+//        return b;
+        
+//        En MS Windows File.canWrite retorna true aunque luego no se pueden crear 
+//        escribir en esa carpeta, asi que probamos a crear una carpeta para 
+//        asegurarnos si se puede escribir realmente.
+        File f2 = new File(f,"test.dir");
+        if( f2.mkdir() ) {
+            f2.delete();
+            return true;
+        }
+        return false;
+    }
+    
+    public File getDefaultLocalAddonRepository(String packageType, int access) {
+        File f = this.defaultRepositoryLocation.get(packageType);
+        switch(access) {
+        case ACCESS_WRITE:
+            if( canWrite(f) ) {
+                return f;
+            }
+            break;
+        case ACCESS_READ:
+        default:
+            if( f.canRead()) {
+                return f;
+            }
+            break;
+        }
+        List<File> repositoriesLocaltions = this.getLocalAddonRepositories(packageType);
+        for( File repositoryLocation : repositoriesLocaltions ) {
+            switch(access) {
+            case ACCESS_WRITE:
+                if( canWrite(repositoryLocation) ) {
+                    return repositoryLocation;
+                }
+                break;
+            case ACCESS_READ:
+            default:
+                if( repositoryLocation.canRead()) {
+                    return repositoryLocation;
+                }
+                break;
+            }
+        }
+        return null;
+    }
+
+    public void setDefaultLocalAddonRepository(File defaultAddonsRepository, String packageType) {
+        this.defaultRepositoryLocation.put(packageType, defaultAddonsRepository);
+        this.localRepositoriesLocation.add(new LocalRepositoryLocation(defaultAddonsRepository, packageType));
+    }
+
+    public void addLocalAddonRepository(File path, String type) {
+        localRepositoriesLocation.add(new LocalRepositoryLocation(path, type));
+    }
+
+    public String getDefaultLocalRepositoryType(File file) {
+        Iterator<LocalRepositoryLocation> it = localRepositoriesLocation.iterator();
+        while ( it.hasNext() ) {
+            LocalRepositoryLocation location = it.next();
+            if ( location.contains(file) ) {
+                return location.getDefaultType();
+            }
+        }
+        return null;
+    }
+
+    public List<File> getLocalAddonRepositories() {
+        return this.getLocalAddonRepositories(null);
+    }
+
+    public List<File> getLocalAddonRepositories(String type) {
+        List<File> l = new ArrayList<File>();
+        Iterator<LocalRepositoryLocation> it = localRepositoriesLocation.iterator();
+        while ( it.hasNext() ) {
+            LocalRepositoryLocation location = it.next();
+            if( type==null || location.support(type) ) {
+                l.add(location.getLocation());
+            }
+        }
+        return l;
+    }
+
+    public List<File> getAddonFolders() {
+        return this.getAddonFolders(null);
+    }
+    
+    public List<File> getAddonFolders(String type) {
+        List<File> addonFolders = new ArrayList<File>();
+
+        // Para cada directorio en la lista de repositorios locales
+        List<File> localAddonRepositories = this.getLocalAddonRepositories(type);
+        for ( int i = 0; i < localAddonRepositories.size(); i++ ) {
+            File repoPath = localAddonRepositories.get(i);
+            if ( repoPath.isDirectory() && repoPath.exists() ) {
+                File[] folderRepoList = repoPath.listFiles();
+
+                // recorrer los directorios que haya dentro
+                for ( int j = 0; j < folderRepoList.length; j++ ) {
+                    File addonFolder = folderRepoList[j];
+                    if ( addonFolder.isDirectory() ) {
+                        File pkginfofile = new File(addonFolder, "package.info");
+                        if ( pkginfofile.exists() ) {
+                            addonFolders.add(addonFolder);
+                        }
+                    }
+
+                }
+            }
+        }
+
+        return addonFolders;
+    }
+
+    public File getAddonFolder(String code) {
+        List<File> packagePaths = this.getAddonFolders();
+        for ( int i = 0; i < packagePaths.size(); i++ ) {
+            try {
+                File pkgfile = new File(packagePaths.get(i), "package.info");
+                PackageInfo pkg = this.createPackageInfo(pkgfile);
+                if ( pkg.getCode().equalsIgnoreCase(code) ) {
+                    return packagePaths.get(i);
+                }
+            } catch (Exception ex) {
+                
+            }
+        }
+        return null;
+    }
+
+    public List<byte[]> getPublicKeys() {
+        byte[] rawkey;
+        try {
+            InputStream is = this.getClass().getResourceAsStream("/org/gvsig/installer/lib/keys/key.public");
+            rawkey = new byte[is.available()];
+            is.read(rawkey);
+            is.close();
+        } catch (IOException e) {
+            return null;
+        }
+        List<byte[]> keys = new ArrayList<byte[]>();
+        keys.add(rawkey);
+        return keys;
+    }
+
+    public boolean hasProviderToThisPackage(PackageInfo packageInfo) {
+        InstallerProviderManager provmgr = (InstallerProviderManager) this.getProviderManager();
+        try {
+            return provmgr.getProviderFactory(packageInfo.getType()) != null;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Compress.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Compress.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Compress.java	(revision 42196)
@@ -0,0 +1,195 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.utils;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class Compress {
+
+	// private static final int BUFFER = 2048;
+
+	public void compressPluginAsPackageSet(File file, String fileName,
+			OutputStream os) throws MakePluginPackageServiceException {
+		List<File> files = new ArrayList<File>();
+		List<String> fileNames = new ArrayList<String>();
+		files.add(file);
+		fileNames.add(fileName);
+		compressPluginsAsPackageSet(files, fileNames, os);
+	}
+
+	public void compressPluginsAsPackageSet(File directory, OutputStream os)
+			throws MakePluginPackageServiceException {
+		File[] files = directory.listFiles();
+		List<File> filesArray = new ArrayList<File>();
+		List<String> fileNamesArray = new ArrayList<String>();
+		for (int i = 0; i < files.length; i++) {
+			filesArray.add(files[i]);
+			fileNamesArray.add(files[i].getName());
+		}
+		compressPluginsAsPackageSet(filesArray, fileNamesArray, os);
+	}
+
+	public void compressPluginsAsPackageSet(List<File> files,
+			List<String> fileNames, OutputStream os)
+			throws MakePluginPackageServiceException {
+		try {
+			ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(
+					os));
+
+			for (int i = 0; i < files.size(); i++) {
+				ZipEntry zipEntry = new ZipEntry(fileNames.get(i));
+				zos.putNextEntry(zipEntry);
+				compressPluginFiles(files.get(i), zos);
+				zos.closeEntry();
+			}
+			zos.close();
+		} catch (Exception e) {
+			throw new MakePluginPackageServiceException(
+					"Error compressing as package set the plugin files: "
+							+ files, e);
+		}
+	}
+
+	public void compressPluginAsPackage(File folder, OutputStream os)
+			throws MakePluginPackageServiceException {
+		ZipOutputStream zos = new ZipOutputStream(os);
+		try {
+			int parentFileLenght = folder.getParentFile().toString().length();
+			compressPluginFile(folder, parentFileLenght, zos);
+			zos.flush();
+			zos.close();
+		} catch (IOException e) {
+			throw new MakePluginPackageServiceException(
+					"Error compressing as package the plugin folder: " + folder,
+					e);
+		}
+	}
+
+	public void compressPluginAsPackageIndex(File folder, OutputStream os)
+			throws MakePluginPackageServiceException {
+		ZipOutputStream zos = new ZipOutputStream(os);
+		try {
+			int parentFileLength = folder.getParentFile().toString().length();
+			String folderName = folder.toString().substring(
+					parentFileLength + 1, folder.toString().length());
+
+			File infoFile = new File(folder, getPackageInfoFileName()
+					+ ".index");
+			if (!infoFile.exists()) {
+				infoFile = new File(folder, getPackageInfoFileName());
+			}
+
+			byte[] buf = new byte[1024];
+			int len;
+
+			// No usar File.separator hace cosas raras en G�indous
+			ZipEntry zipEntry = new ZipEntry(folderName + "/" + getPackageInfoFileName());
+			zos.putNextEntry(zipEntry);
+
+			FileInputStream fin = new FileInputStream(infoFile);
+			BufferedInputStream in = new BufferedInputStream(fin);
+			while ((len = in.read(buf)) >= 0) {
+				zos.write(buf, 0, len);
+			}
+			in.close();
+			zos.closeEntry();
+			zos.flush();
+			zos.close();
+		} catch (IOException e) {
+			throw new MakePluginPackageServiceException(
+					"Error compressing as package index the plugin folder: "
+							+ folder, e);
+		}
+	}
+
+	private void compressPluginFiles(File fileOrFolder, ZipOutputStream zos)
+			throws IOException {
+		int parentFileLenght = fileOrFolder.getParentFile().toString().length();
+		ZipOutputStream zosPlugin = new ZipOutputStream(zos);
+		compressPluginFile(fileOrFolder, parentFileLenght, zosPlugin);
+		zosPlugin.finish();
+	}
+
+	private void compressPluginFile(File file, int parenFileLength,
+			ZipOutputStream zosPlugin) throws IOException {
+		String fileName = file.toString().substring(parenFileLength,
+				file.toString().length());
+		if (File.separatorChar != '/') {
+			fileName = fileName.replace(File.separatorChar, '/');
+		}
+
+		if (file.isDirectory()) {
+			// Remove the subversion folders
+			if (!file.getName().toUpperCase().equals(".SVN")) {
+				// Adding the files
+				String[] fileNames = file.list();
+				if (fileNames != null) {
+					for (int i = 0; i < fileNames.length; i++) {
+						compressPluginFile(new File(file, fileNames[i]),
+								parenFileLength, zosPlugin);
+					}
+				}
+			}
+		} else {
+			byte[] buf = new byte[1024];
+			int len;
+
+			ZipEntry zipEntry = new ZipEntry(fileName);
+			zosPlugin.putNextEntry(zipEntry);
+
+			FileInputStream fin = new FileInputStream(file);
+			BufferedInputStream in = new BufferedInputStream(fin);
+			while ((len = in.read(buf)) >= 0) {
+				zosPlugin.write(buf, 0, len);
+			}
+			in.close();
+			zosPlugin.closeEntry();
+		}
+	}
+
+	private String getPackageInfoFileName() {
+		return InstallerProviderLocator.getProviderManager()
+				.getPackageInfoFileName();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Compress.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/MD5BinaryFileUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/MD5BinaryFileUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/MD5BinaryFileUtils.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.MessageDigest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public class MD5BinaryFileUtils {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(MD5BinaryFileUtils.class);
+    
+    /**
+     * 
+     * Gets the MD5 string of a md5 file which is associated with
+     * the file provided.
+     * 
+     * @param remote_file the file that has a ".md5" file next to it
+     * @return
+     */
+    public static String getMD5InRemoteFile(URL remote_file) {
+
+        BufferedReader in = null;
+        InputStreamReader istr = null;
+        try {
+            String _url = remote_file.toString() + ".md5";
+            URL md5_url = new URL(_url);
+            
+            URLConnection connection = md5_url.openConnection();
+            connection.setUseCaches(false);
+            connection.setConnectTimeout(30000);
+            connection.setReadTimeout(20000);
+            
+            istr = new InputStreamReader(connection.getInputStream());
+            in = new BufferedReader(istr);
+            String inputLine = in.readLine();
+            
+            int space = inputLine.indexOf(" "); 
+            inputLine = inputLine.substring(0, space);
+            return inputLine;
+        } catch (Exception ex) {
+            LOG.info("Error while reading MD5 file: " + ex.getMessage());
+            return null;
+        } finally {
+            try {
+                in.close();
+                istr.close();
+            } catch (Exception ex) { }  
+        }
+        
+    }
+    
+    public static byte[] createChecksum(File the_file) throws Exception {
+        
+        InputStream fis =  new FileInputStream(the_file);
+
+        byte[] buffer = new byte[1024];
+        MessageDigest complete = MessageDigest.getInstance("MD5");
+        int numRead;
+
+        do {
+            numRead = fis.read(buffer);
+            if (numRead > 0) {
+                complete.update(buffer, 0, numRead);
+            }
+        } while (numRead != -1);
+
+        fis.close();
+        return complete.digest();
+    }
+
+    /**
+     * In case this is too slow for you:
+     * There are faster ways to convert
+     * a byte array to a HEX string
+     *  
+     * @param the_file the input file
+     * @return the given file's MD5 checksum as a hex string
+     * @throws Exception
+     */
+    public static String getMD5Checksum(File the_file) throws Exception {
+        byte[] b = createChecksum(the_file);
+        String result = "";
+
+        for (int i=0; i < b.length; i++) {
+            result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
+        }
+        return result;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/MD5BinaryFileUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/SignUtil.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/SignUtil.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/SignUtil.java	(revision 42196)
@@ -0,0 +1,387 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.security.KeyFactory;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.SecureRandom;
+import java.security.Signature;
+import java.security.spec.EncodedKeySpec;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+
+import org.apache.commons.codec.binary.Base64;
+
+public class SignUtil {
+
+	public static final int SIGN_OK = 0;
+	public static final int SIGN_FAIL = 1;
+	public static final int NOT_SIGNED = 2;
+
+	private PublicKey pubKey = null;
+	private PrivateKey privKey = null;
+
+	public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException, FileNotFoundException {
+		new SignUtil().doMain(args);
+	}
+
+	private void doMain(String[] args) {
+
+		try {
+			if( "sign".equalsIgnoreCase(getCommand(args)) ) {
+				if( !this.canSign() ) {
+					System.out.println("Can't locate private key to sign.");
+					return;
+				}
+				this.sign( this.getArg1AsFile(args));
+				System.out.println("File "+this.getArg1(args)+" signed.");
+				return;
+			}
+			
+			if( "verify".equalsIgnoreCase(getCommand(args)) ) {
+				if( !this.canVerify() ) {
+					System.out.println("Can't locate public key to verify.");
+					return;
+				}
+				switch(this.verify(this.getArg1AsFile(args))) {
+				case NOT_SIGNED:
+					System.out.println("NOT SIGNED");
+					break;
+				case SIGN_FAIL:
+					System.out.println("SIGN FAIL");
+					break;
+				case SIGN_OK:
+					System.out.println("SIGN OK");
+					break;
+				default:
+					System.out.println("ERROR");
+				}
+				return;
+			}
+
+			if( "generateKeys".equalsIgnoreCase(getCommand(args)) ) {
+				this.generateKeys();
+				System.out.println("Generate keys ok");
+				return;
+			}
+
+			System.out.println("Usage: SignUtil sign|verify|generateKeys\n" +
+					"  sign file\n" +
+					"  verify file\n" +
+					"  generateKeys\n");
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private String getCommand(String[] args) {
+		if( args.length>=1) {
+			return args[0];
+		}
+		return null;
+	}
+	
+	private File getArg1AsFile(String[] args) {
+		if( args.length>=2) {
+			return new File(args[1]);
+		}
+		return null;
+	}
+	
+	private String getArg1(String[] args) {
+		if( args.length>=2) {
+			return args[1];
+		}
+		return null;
+	}
+	
+	public SignUtil()  {
+		loadPrivateKey();
+		loadPublicKey();
+	}
+
+	public SignUtil(byte[] publicKey){
+		loadPrivateKey();
+		loadPublicKey(publicKey);
+	}
+
+	private void loadPrivateKey()  {
+		File home = new File(System.getProperty("user.home"));
+		File keyfile = new File(home, ".gvsig-keys" + File.separatorChar
+				+ "key.private");
+		if (keyfile.exists()) {
+			try {
+				loadPrivateKey(keyfile);
+			} catch (Exception e) {
+				// Ignore errors
+			}
+		}
+	}
+
+	private PrivateKey loadPrivateKey(File key) {
+		try {
+			byte[] rawkey;
+			rawkey = loadFileAsByteArray(new FileInputStream(key));
+			EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(rawkey);
+			KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");
+			this.privKey = keyFactory.generatePrivate(keySpec);
+		} catch (Exception e) {
+			this.privKey = null;
+		}
+		return this.privKey;
+	}
+
+	private PublicKey loadPublicKey() {
+		File home = new File(System.getProperty("user.home"));
+		File keyfile = new File(home, ".gvsig-keys" + File.separatorChar
+				+ "key.public");
+		if (keyfile.exists()) {
+				return loadPublicKey(loadFileAsByteArray(keyfile));
+		}
+		return null;
+	}
+	private PublicKey loadPublicKey(byte[] rawkey)  {
+		try {
+			EncodedKeySpec keySpec = new X509EncodedKeySpec(rawkey);
+			KeyFactory keyFactory;
+			keyFactory = KeyFactory.getInstance("DSA", "SUN");
+			this.pubKey = keyFactory.generatePublic(keySpec);
+		} catch (Exception e) {
+			this.pubKey = null;
+		}
+		return this.pubKey;
+	}
+
+	private PublicKey getPublicKey() {
+		return this.pubKey;
+	}
+
+	private PrivateKey getPrivateKey() {
+		return this.privKey;
+	}
+
+	private byte[] loadFileAsByteArray(InputStream in) {
+		byte[] alldata;
+		try {
+			alldata = new byte[in.available()];
+			in.read(alldata);
+			in.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+		return alldata;
+	}
+
+	private byte[] loadFileAsByteArray(File file) {
+		try {
+			return loadFileAsByteArray(new FileInputStream(file));
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	private String getData(byte[] alldata) {
+		BufferedReader reader = new BufferedReader(new StringReader(
+				new String(alldata)));
+		StringWriter writer = new StringWriter();
+		String line;
+		try {
+			boolean inSignature = false;
+			while ((line = reader.readLine()) != null) {
+				if (inSignature) {
+					if (line.startsWith("## END SIGNATURE")) {
+						inSignature = false;
+					}
+				} else {
+					if (line.startsWith("## BEGIN SIGNATURE")) {
+						inSignature = true;
+					} else {
+						writer.append(line);
+						writer.append("\n");
+					}
+				}
+			}
+			writer.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+		return writer.toString();
+	}
+
+	private byte[] getSignature(byte[] alldata) {
+		BufferedReader reader = new BufferedReader(new StringReader(
+				new String(alldata)));
+		StringWriter writer = new StringWriter();
+		String line;
+		try {
+			boolean inSignature = false;
+			while ((line = reader.readLine()) != null) {
+				if (inSignature) {
+					if (line.startsWith("## END SIGNATURE")) {
+						inSignature = false;
+					} else {
+						writer.append(line);
+						writer.append("\n");
+					}
+				} else {
+					if (line.startsWith("## BEGIN SIGNATURE")) {
+						inSignature = true;
+					}
+				}
+			}
+			writer.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+		String s = writer.toString();
+		if (s.length() < 1) {
+			return null;
+		}
+		Base64 coder = new Base64(60);
+		return coder.decode(s);
+	}
+
+	public void sign(File file) {
+		Signature dsa;
+		Base64 coder = new Base64(60);
+
+		try {
+			String data = getData(loadFileAsByteArray(file));
+			dsa = Signature.getInstance("SHA1withDSA", "SUN");
+			dsa.initSign(getPrivateKey());
+			dsa.update(data.getBytes());
+
+			String sig = coder.encodeAsString(dsa.sign());
+			String[] lines = sig.split("\n");
+
+			FileWriter fw = new FileWriter(file);
+			fw.append(data);
+			fw.append("## BEGIN SIGNATURE\n");
+			for (int i = 0; i < lines.length; i++) {
+				fw.append("## ");
+				fw.append(lines[i]);
+				fw.append("\n");
+			}
+			fw.append("## END SIGNATURE\n");
+			fw.close();
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+	
+	public int verify(File file) {
+		return verify(loadFileAsByteArray(file));
+	}
+
+	public int verify(byte[] alldata) {
+		try {
+			String data = getData(alldata);
+			byte[] signature = getSignature(alldata);
+			if (signature == null) {
+				return NOT_SIGNED;
+			}
+			Signature dsa;
+			dsa = Signature.getInstance("SHA1withDSA", "SUN");
+			dsa.initVerify(getPublicKey());
+			dsa.update(data.getBytes());
+			if (!dsa.verify(signature)) {
+				return SIGN_FAIL;
+			}
+			return SIGN_OK;
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return NOT_SIGNED;
+	}
+
+	public void generateKeys() {
+		try {
+			KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA",
+					"SUN");
+			SecureRandom random = SecureRandom.getInstance("SHA1PRNG",
+					"SUN");
+			keyGen.initialize(1024, random);
+
+			KeyPair pair = keyGen.generateKeyPair();
+			PrivateKey privKey = pair.getPrivate();
+			PublicKey pubKey = pair.getPublic();
+
+			FileOutputStream fos;
+			fos = new FileOutputStream("key.private");
+			fos.write(privKey.getEncoded());
+			fos.close();
+
+			fos = new FileOutputStream("key.public");
+			fos.write(pubKey.getEncoded());
+			fos.close();
+
+			System.out
+					.println("Generados los ficheros key.private y key.public en la carpeta corriente.");
+			System.out
+					.println("Por defecto la aplicaccion las buscara en la carpeta $HOME/.gvsig-keys .");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+	
+	public boolean canSign() {
+		if( this.getPrivateKey() == null ) {
+			return false;
+		}
+		return true;
+	}
+	
+	public boolean canVerify() {
+		if( this.getPublicKey() == null ) {
+			return false;
+		}
+		return true;
+	}
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/SignUtil.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/DeleteFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/DeleteFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/DeleteFile.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl.utils;
+
+import java.io.File;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DeleteFile {
+
+	public DeleteFile() {
+
+	}
+
+	public boolean delete(File dir) {
+		if (dir.isDirectory()) {
+			String[] children = dir.list();
+			for (int i = 0; i < children.length; i++) {
+				boolean success = delete(new File(dir, children[i]));
+				if (!success) {
+					return false;
+				}
+			}
+		}
+		return dir.delete();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/DeleteFile.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Decompress.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Decompress.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Decompress.java	(revision 42196)
@@ -0,0 +1,450 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipInputStream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.impl.DefaultPackageInfo;
+import org.gvsig.installer.lib.impl.info.InstallerInfoFileReader;
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class Decompress {
+
+	private static final int OPTION_DECOMPRESS = 1;
+	private static final int OPTION_READ_INSTALLINFO = 2;
+	private static final int OPTION_INSTALL = 3;
+
+	private int option = 0;
+
+	private int BUFFER = 2048;
+
+	private static final Logger logger = LoggerFactory
+			.getLogger(Decompress.class);
+
+	private List<PackageInfo> readedIinstallerInfos = null;
+	private File outputDirectory = null;
+	private List<PackageInfo> selectedInstallerInfos = null;
+	private Map<PackageInfo, String> zipEntriesMap = null;
+	private List<String> defaultSelectedPackets = null;
+
+	public Decompress() {
+
+	}
+
+	public void decompressPlugins(InputStream is, File outputDirectory)
+			throws InstallPackageServiceException {
+		option = OPTION_DECOMPRESS;
+		this.outputDirectory = outputDirectory;
+
+		decompressFolderOfPlugins(is);
+	}
+
+	public void readPackageSetInstallInfos(InputStream is,
+			List<PackageInfo> installerInfos,
+			Map<PackageInfo, String> zipEntriesMap)
+			throws InstallPackageServiceException {
+		option = OPTION_READ_INSTALLINFO;
+		this.readedIinstallerInfos = installerInfos;
+		this.zipEntriesMap = zipEntriesMap;
+		decompressFolderOfPlugins(is);
+	}
+
+	public void readPackageInstallInfo(InputStream is,
+			List<PackageInfo> installerInfos,
+			Map<PackageInfo, String> zipEntriesMap, String name)
+			throws InstallPackageServiceException {
+		option = OPTION_READ_INSTALLINFO;
+		this.readedIinstallerInfos = installerInfos;
+		this.zipEntriesMap = zipEntriesMap;
+		decompressFolderOfPluginFromPackage(is, name);
+	}
+
+	public class InstallerPluginReadException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = -6065359474790792680L;
+
+		private static final String message = "Error reading the plugin";
+
+		private static final String KEY = "_Error_reading_the_plugin";
+
+		public InstallerPluginReadException(ServiceException e) {
+			super(message, e, KEY, serialVersionUID);
+		}
+
+	}
+
+	public void decompressPlugin(InputStream is, File outputDirectory)
+			throws InstallPackageServiceException {
+		try {
+			option = OPTION_DECOMPRESS;
+			this.outputDirectory = outputDirectory;
+			FileUtils.forceMkdir(outputDirectory);
+			logger.debug("decompress plugin to '"+outputDirectory.getAbsolutePath()+"'.");
+			decompressPlugin(is);
+		} catch (Exception e) {
+			logger.warn("Can't decompress plugin in '"+outputDirectory+"'.", e);
+			throw new InstallPackageServiceException(e);
+		}
+	}
+
+	public class InstallerPluginReadErrorException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = 4505298394252120334L;
+
+		private static final String message = "Error reading the plugin '%(name)s'";
+
+		private static final String KEY = "_Error_reading_the_plugin";
+
+		public InstallerPluginReadErrorException(Exception e, String packageName) {
+			super(message, e, KEY, serialVersionUID);
+			setValue("name", packageName);
+		}
+
+	}
+
+	public InputStream searchPlugin(InputStream is, String zipEntry)
+			throws InstallPackageServiceException {
+		ZipEntry entry = null;
+		String name = "";
+
+		try {
+			ZipInputStream zipInputStream = new ZipInputStream(is);
+
+			while ((entry = zipInputStream.getNextEntry()) != null) {
+				name = entry.getName();
+				if (entry.getName().equals(zipEntry)) {
+					return zipInputStream;
+				}
+				zipInputStream.closeEntry();
+			}
+			zipInputStream.closeEntry();
+
+			zipInputStream.close();
+		} catch (Exception e) {
+			throw new InstallerPluginReadErrorException(e, name);
+		}
+		return null;
+	}
+
+	public void installFromStream(InputStream is, PackageInfo installerInfo)
+			throws InstallPackageServiceException {
+		option = OPTION_INSTALL;
+		this.selectedInstallerInfos = new ArrayList<PackageInfo>();
+		this.selectedInstallerInfos.add(installerInfo);
+		decompressFolderOfPlugins(is);
+	}
+
+	public void installFromStream(InputStream is,
+			List<PackageInfo> installerInfos)
+			throws InstallPackageServiceException {
+		option = OPTION_INSTALL;
+		this.selectedInstallerInfos = installerInfos;
+		decompressFolderOfPlugins(is);
+	}
+
+	private void decompressFolderOfPlugins(InputStream is)
+			throws InstallPackageServiceException {
+		ZipInputStream zipInputStream = new ZipInputStream(is);
+		ZipEntry entry = null;
+
+		String name = "";
+
+		try {
+			while ((entry = zipInputStream.getNextEntry()) != null) {
+				name = entry.getName();
+				if (entry.getName().equals("defaultPackages")
+						|| entry.getName().equals("defaultSelection")) {
+					int count;
+					byte data[] = new byte[BUFFER];
+					ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+					while ((count = zipInputStream.read(data, 0, BUFFER)) != -1) {
+						out.write(data, 0, count);
+					}
+
+					String str = out.toString().replace("\r", "");
+					String lineas[] = str.split("\\n");
+					List<String> defaultPackagesList = new ArrayList<String>();
+
+					for (int i = 0; i < lineas.length; i++) {
+					    
+					    String trim_lineas = lineas[i].trim();
+					    if (! ((trim_lineas.startsWith("#") || trim_lineas.startsWith(";")))) {
+					        // not a comment
+					        defaultPackagesList.add(lineas[i]);
+					    }
+						
+					}
+
+					defaultSelectedPackets = defaultPackagesList;
+					out.flush();
+				} else {
+//					logger.debug("Extracting all Plugins, plugin: " + name);
+					if (option == OPTION_INSTALL) {
+
+					} else {
+						if (option == OPTION_DECOMPRESS) {
+							logger.info("decompress plugin " + name);
+							decompressPlugin(zipInputStream);
+						} else if (option == OPTION_READ_INSTALLINFO) {
+							readPlugin(zipInputStream, entry.getName());
+						}
+					}
+				}
+				zipInputStream.closeEntry();
+			}
+			zipInputStream.close();
+
+		} catch (Exception e) {
+			throw new InstallerPluginReadErrorException(e, name);
+		}
+	}
+
+	private void decompressFolderOfPluginFromPackage(InputStream is, String name)
+			throws InstallPackageServiceException {
+
+		try {
+			if (option == OPTION_INSTALL) {
+
+			} else {
+				if (option == OPTION_DECOMPRESS) {
+					decompressPlugin(is);
+				} else {
+					if (option == OPTION_READ_INSTALLINFO) {
+						readPlugin(is, name);
+					}
+				}
+			}
+
+		} catch (Exception e) {
+			throw new InstallerPluginReadErrorException(e, name);
+		}
+	}
+
+	private void readPlugin(InputStream is, String zipEntryName)
+			throws ZipException, IOException, InstallerInfoFileException {
+		ZipEntry entry = null;
+		int installerInfoNumber = zipEntriesMap.size();
+		String packageInfoName = getPackageInfoFileName();
+		String unixPackageInfoPath = "/".concat(packageInfoName);
+		String windowsPackageInfoPath = "\\".concat(packageInfoName);
+		ZipInputStream zis = new ZipInputStream(is);
+		while ((entry = zis.getNextEntry()) != null) {
+			logger.debug("Extracting: " + entry.getName());
+
+			String name = entry.getName();
+			// Just in case, but we are going to create them always using
+			// the unix file separator
+			if (name.endsWith(unixPackageInfoPath)
+					|| name.endsWith(windowsPackageInfoPath)) {
+				PackageInfo installerInfo = readInstallInfo(zis);
+				zipEntriesMap.put(installerInfo, zipEntryName);
+				readedIinstallerInfos.add(installerInfo);
+			}
+			zis.closeEntry();
+		}
+		// Don't close the stream as if it is a zip file contained
+		// into another zip file, closing of the child Zip�nputStream
+		// will close also the parent's.
+		// zis.close();
+
+		if (installerInfoNumber == zipEntriesMap.size()) {
+			PackageInfo installerInfo = new DefaultPackageInfo();
+			installerInfo.setCode(zipEntryName);
+			installerInfo.setName(zipEntryName);
+			zipEntriesMap.put(installerInfo, zipEntryName);
+			readedIinstallerInfos.add(installerInfo);
+		}
+	}
+
+	private void decompressPlugin(InputStream inputStream) throws ZipException,
+			IOException, InstallerInfoFileException {
+
+		ZipInputStream zis = null;
+		ZipEntry entry = null;
+		byte data[] = new byte[BUFFER];
+		int count = 0;
+
+		TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+		SimpleTaskStatus taskStatus = manager
+				.createDefaultSimpleTaskStatus("Uncompressing...");
+		
+		manager.add(taskStatus);
+		int countRootFolders = 0;
+		String entryName = "(header)";
+		try {
+			long readed = 0;
+	
+			// // First read all the contents size
+			// zis = new ZipInputStream(inputStream);
+			// while ((entry = zis.getNextEntry()) != null) {
+			// count += entry.getSize();
+			// }
+			// // zis.close();
+			// taskStatus.setRangeOfValues(0, count);
+	
+			// Return the stream to the initial position
+			zis = new ZipInputStream(inputStream);
+			while ((entry = zis.getNextEntry()) != null) {
+				entryName = FilenameUtils.separatorsToSystem(entry.getName());
+				taskStatus.message(entryName);
+	
+				File file = new File(outputDirectory, entryName);
+				if (file.exists()) {
+					logger.info("delete " + file.getAbsolutePath());
+					FileUtils.forceDelete(file);
+				}
+				if (entry.isDirectory()) {
+					String s = FilenameUtils.getPathNoEndSeparator(entryName);
+					if( !s.contains(File.separator) ) {  
+						if( ++countRootFolders > 1 ) {
+							logger.warn("More than one root folder ("+entryName+") in the package; it may be an error.");
+						}
+					}
+					logger.debug("makedirs " + file.getAbsolutePath());
+					if( !file.mkdirs() ) {
+                                           throw new IOException("Can't create folder '"+file.getAbsolutePath()+"'.");
+                                        }
+				} else {
+					createParentFolder(file);
+					logger.debug("extracting " + file.getAbsolutePath());
+					FileOutputStream fos = new FileOutputStream(file);
+					while ((count = zis.read(data, 0, BUFFER)) != -1) {
+						fos.write(data, 0, count);
+						readed += count;
+						taskStatus.setCurValue(readed);
+					}
+					fos.flush();
+					fos.close();
+				}
+			}
+			zis.close();
+		} catch(IOException ex) {
+			logger.warn("Problems uncompresing plugin (last entry '"+entryName+"'.",ex);
+			throw ex;
+			
+		} catch(RuntimeException ex) {
+			logger.warn("Problems uncompresing plugin (last entry '"+entryName+"'.",ex);
+			throw ex;
+			
+		} finally {
+		    
+		    taskStatus.remove();
+		    
+		}
+		
+        
+	}
+
+	private void createParentFolder(File file) {
+		File parentFile = file.getParentFile();
+		if (!parentFile.exists()) {
+			parentFile.mkdirs();
+		}
+	}
+
+	public boolean delete(File dir) {
+		if (dir.isDirectory()) {
+			String[] children = dir.list();
+			for (int i = 0; i < children.length; i++) {
+				boolean success = delete(new File(dir, children[i]));
+				if (!success) {
+					return false;
+				}
+			}
+		}
+		return dir.delete();
+	}
+
+	public PackageInfo readInstallerInfo(InputStream is)
+			throws InstallerInfoFileException {
+		try {
+			return readInstallInfo(new ZipInputStream(is));
+		} catch (IOException e) {
+			throw new InstallerInfoFileException("error_reading_installerinfo",
+					e);
+		}
+	}
+
+	private PackageInfo readInstallInfo(ZipInputStream zipInputStream)
+			throws IOException, InstallerInfoFileException {
+		int count;
+		byte data[] = new byte[BUFFER];
+
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+		while ((count = zipInputStream.read(data, 0, BUFFER)) != -1) {
+			out.write(data, 0, count);
+		}
+		out.flush();
+
+		DefaultPackageInfo installerInfo = new DefaultPackageInfo();
+		InstallerInfoFileReader installerInfoFileReader = new InstallerInfoFileReader();
+		installerInfoFileReader.read(installerInfo, new ByteArrayInputStream(
+				out.toByteArray()));
+
+		return installerInfo;
+	}
+
+	private String getPackageInfoFileName() {
+		return InstallerProviderLocator.getProviderManager()
+				.getPackageInfoFileName();
+	}
+
+	public List<String> getDefaultSelectedPackages() {
+		return defaultSelectedPackets;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Decompress.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Download.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Download.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Download.java	(revision 42196)
@@ -0,0 +1,298 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl.utils;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Date;
+import java.util.StringTokenizer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class Download extends AbstractMonitorableTask {
+
+	private static final Logger LOG = LoggerFactory.getLogger(Download.class);
+	
+	/**
+	 * If file size provided by URLConnection is smaller than this,
+	 * then the downloaded file size will always be accepted (unit: bytes)
+	 */
+    private static final int FILE_SIZE_ESTIMATED_MINIMUM = 10000;
+    
+    /**
+     * Downloaded file size will be accepted if it is bigger than this ratio
+     * multiplied by the estimated file size provided by URLConnection
+     * (unit: bytes)
+     */
+    private static final double FILE_SIZE_ESTIMATED_RATIO = 0.85;
+    
+	private boolean selfCreatedTaskStatus = true;
+
+	/**
+	 * @param taskName
+	 */
+	public Download(SimpleTaskStatus taskStatus) {
+		this();
+		
+		/*
+		 * constructor without params is adding
+		 * itself to manager, so we remove it
+		 */
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        manager.remove(getTaskStatus());
+        
+        /*
+         * The received taskstatus is being managed by somebody else,
+         * we don not add it to the manager
+         */
+		this.taskStatus = taskStatus;
+		selfCreatedTaskStatus = false;
+	}
+
+	public Download() {
+	    /**
+	     * this call is adding the task status to the manager
+	     */
+		super("Downloading...");
+	}
+
+	public File downloadFile(URL url, String defaultFileName)
+			throws IOException {
+
+		URL downloadURL = url;
+
+		// check if the URL ends with '/' and append the file name
+		if (defaultFileName != null) {
+			String urlStr = url.toString();
+			if (urlStr.endsWith("/")) {
+				urlStr = urlStr.concat(defaultFileName);
+				downloadURL = new URL(urlStr);
+			}
+		}
+
+		URLConnection connection = downloadURL.openConnection();
+		connection.setUseCaches(false);
+		connection.setConnectTimeout(30000);
+		connection.setReadTimeout(20000);
+		
+		String fileName = getFileName(connection);
+
+		// if (LOG.isDebugEnabled()) {
+			Date date = new Date(connection.getLastModified());
+			LOG
+					.info(
+							"Downloading file {} from URL {}, with last modified date: {}",
+							new Object[] { fileName, downloadURL, date });
+		// }
+
+		String fileNamePrefix = fileName;
+		String fileNameSuffix = "zip";
+		int dotPosition = fileName.lastIndexOf('.');
+		if ((dotPosition > -1) && (dotPosition < fileName.length() - 1)) {
+			fileNamePrefix = fileName.substring(0, dotPosition);
+			fileNameSuffix = fileName.substring(dotPosition);
+		}
+
+		BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
+
+		File localFile = File.createTempFile(fileNamePrefix, fileNameSuffix);
+
+		BufferedOutputStream bos = new BufferedOutputStream(
+				new FileOutputStream(localFile));
+
+		int expected_size = connection.getContentLength();
+		this.taskStatus.setRangeOfValues(0, expected_size);
+		
+
+			byte[] data = new byte[1024];
+			int count = 0;
+			long totalCount = 0; // total bytes read
+			while ((count = bis.read(data, 0, 1024)) >= 0) {
+			    
+				bos.write(data, 0, count);
+				totalCount += count;
+				
+				this.taskStatus.setCurValue(totalCount);
+
+				if (this.taskStatus.isCancellationRequested()) {
+					break;
+				}
+			}
+			
+			try {
+		         bis.close();
+		         bos.flush();
+		         bos.close();
+			} catch (Exception ex) {
+			    LOG.info("Error while closing download streams: " + ex.getMessage());
+			}
+			
+			if (selfCreatedTaskStatus) {
+				this.taskStatus.terminate();
+				this.taskStatus.remove();
+			}
+			
+			// out from the read loop
+			// perhaps it was cancelled:
+            if (this.taskStatus.isCancellationRequested()) {
+                return null;
+            }
+            
+            String md5_ = MD5BinaryFileUtils.getMD5InRemoteFile(downloadURL);
+            
+            if (md5_ != null) {
+                // ==========================================
+                // check md5
+                String local_md5 = null;
+                try {
+                    local_md5 = MD5BinaryFileUtils.getMD5Checksum(localFile);
+                } catch (Exception e) {
+                    throw new IOException("Unable to get MD5 for file: " + downloadURL.toString());
+                }
+                if (local_md5.compareTo(md5_) != 0) {
+                    throw new IOException("MD5 does not match for file: " + downloadURL.toString());
+                }
+                // ==========================================
+            } else {
+                // ==========================================
+                // check real size and expected size:
+                if (!acceptableFileSize(localFile, expected_size)) {
+                    throw new IOException("Bad download file size ("
+                        + localFile.length()
+                        + " / "
+                        + expected_size
+                        + ")");
+                }
+                // ==========================================
+            }
+			
+            // everything seems to be OK
+			return localFile;
+
+	}
+
+	/**
+	 * Returns the file name associated to an url connection.<br />
+	 * The result is not a path but just a file name.
+	 * 
+	 * @param urlConnection
+	 *            - the url connection
+	 * @return the file name
+	 * 
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
+	 */
+	private String getFileName(URLConnection urlConnection) throws IOException {
+		String fileName = null;
+
+		String contentDisposition = urlConnection
+				.getHeaderField("content-disposition");
+
+		if (contentDisposition != null) {
+			fileName = extractFileNameFromContentDisposition(contentDisposition);
+		}
+
+		// if the file name cannot be extracted from the content-disposition
+		// header, using the url.getFilename() method
+		if (fileName == null) {
+			StringTokenizer st = new StringTokenizer(urlConnection.getURL()
+					.getFile(), "/");
+			while (st.hasMoreTokens()) {
+				fileName = st.nextToken();
+			}
+		}
+
+		return fileName;
+	}
+
+	/**
+	 * Extract the file name from the content disposition header.
+	 * <p>
+	 * See <a
+	 * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html">http:
+	 * //www.w3.org/Protocols/rfc2616/rfc2616-sec19.html</a> for detailled
+	 * information regarding the headers in HTML.
+	 * 
+	 * @param contentDisposition
+	 *            - the content-disposition header. Cannot be <code>null>/code>.
+	 * @return the file name, or <code>null</code> if the content-disposition
+	 *         header does not contain the filename attribute.
+	 */
+	private String extractFileNameFromContentDisposition(
+			String contentDisposition) {
+		String[] attributes = contentDisposition.split(";");
+
+		for (String a : attributes) {
+			if (a.toLowerCase().contains("filename")) {
+				// The attribute is the file name. The filename is between
+				// quotes.
+				return a.substring(a.indexOf('\"') + 1, a.lastIndexOf('\"'));
+			}
+		}
+
+		// not found
+		return null;
+
+	}
+	
+	/**
+	 * {@link URLConnection}'s method getContentLength() does not give
+	 * exact size.
+	 * 
+	 * @return whether the size is acceptable
+	 */
+	public static boolean acceptableFileSize(File f, int estimated_size) {
+	    
+	    if (f == null) {
+	        return false;
+	    }
+	    
+	    if (estimated_size == -1) {
+	        // -1 means unknown
+	        return true;
+	    }
+	    
+	    if (estimated_size < FILE_SIZE_ESTIMATED_MINIMUM) {
+	        return true;
+	    }
+	    
+	    return f.length() > (FILE_SIZE_ESTIMATED_RATIO * estimated_size);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/utils/Download.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderServices.java	(revision 42196)
@@ -0,0 +1,183 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.impl.info.InstallerInfoFileReader;
+import org.gvsig.installer.lib.impl.info.InstallerInfoFileWriter;
+import org.gvsig.installer.lib.impl.utils.Compress;
+import org.gvsig.installer.lib.impl.utils.Decompress;
+import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.tools.service.spi.AbstractProviderServices;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultInstallerProviderServices extends AbstractProviderServices
+		implements InstallPackageProviderServices {
+
+	private List<String> defaultSelectedPacketsIDs = null;
+
+	// private static final Logger LOG = LoggerFactory
+	// .getLogger(DefaultInstallerProviderServices.class);
+
+	public void decompress(InputStream is, File outputDirectory)
+			throws InstallPackageServiceException {
+		Decompress decompress = new Decompress();
+		decompress.decompressPlugin(is, outputDirectory);
+	}
+
+	public class ReadPackageException extends InstallPackageServiceException {
+
+		private static final long serialVersionUID = 1989187468965303199L;
+
+		private static final String message = "Exception reading a compressed file";
+
+		private static final String KEY = "Exception_reading_a_compressed_file";
+
+		public ReadPackageException(InstallerInfoFileException e) {
+			super(message, e, KEY, serialVersionUID);
+		}
+
+	}
+
+	public PackageInfo readCompressedPackageInfo(InputStream is)
+			throws InstallPackageServiceException {
+		Decompress decompress = new Decompress();
+		try {
+			return decompress.readInstallerInfo(is);
+		} catch (InstallerInfoFileException e) {
+			throw new ReadPackageException(e);
+		}
+	}
+
+	public void compressPackageSet(File folder, String fileName, OutputStream os)
+			throws MakePluginPackageServiceException {
+		Compress compress = new Compress();
+		compress.compressPluginAsPackageSet(folder, fileName, os);
+	}
+
+	public void compressPackage(File folder, OutputStream os)
+			throws MakePluginPackageServiceException {
+		Compress compress = new Compress();
+		compress.compressPluginAsPackage(folder, os);
+	}
+
+	public void compressPackageIndex(File folder, OutputStream os)
+			throws MakePluginPackageServiceException {
+		Compress compress = new Compress();
+		compress.compressPluginAsPackageIndex(folder, os);
+	}
+
+	public void readPackageInfo(File directory, PackageInfo installerInfo)
+			throws InstallerInfoFileException {
+		File installInfoFile = new File(directory + File.separator
+				+ getPackageInfoFileName());
+		if (installInfoFile.exists()) {
+			InstallerInfoFileReader reader = new InstallerInfoFileReader();
+			reader.read(installerInfo, installInfoFile.getAbsolutePath());
+		}
+
+		if (installerInfo.getCode() == null) {
+			installerInfo.setCode(directory.getName());
+		}
+		if (installerInfo.getName() == null) {
+			installerInfo.setName(directory.getName());
+		}
+	}
+
+	private String getPackageInfoFileName() {
+		return InstallerProviderLocator.getProviderManager()
+				.getPackageInfoFileName();
+	}
+
+	public void writePackageInfo(File directory, PackageInfo packageInfo)
+			throws InstallerInfoFileException {
+		writePackageInfoFile(directory, getPackageInfoFileName(), packageInfo);
+	}
+
+	public void writePackageInfoForIndex(File directory, PackageInfo packageInfo)
+			throws InstallerInfoFileException {
+		writePackageInfoFile(directory, getPackageInfoFileName() + ".index",
+				packageInfo);
+	}
+
+	private void writePackageInfoFile(File directory, String fileName,
+			PackageInfo installerInfo) throws InstallerInfoFileException {
+		if (!directory.exists()) {
+			// throw new
+			// InstallerInfoFileException("The directory doesn't exist");
+			directory.mkdir();
+		}
+		InstallerInfoFileWriter installerInfoFileWriter = new InstallerInfoFileWriter();
+		installerInfoFileWriter.write(installerInfo, directory + File.separator
+				+ fileName);
+	}
+
+	public InputStream searchPackage(InputStream is, String zipEntry)
+			throws InstallPackageServiceException {
+		Decompress decompress = new Decompress();
+		return decompress.searchPlugin(is, zipEntry);
+	}
+
+	public void readPackageSetInfo(InputStream is,
+			List<PackageInfo> installerInfos,
+			Map<PackageInfo, String> zipEntriesMap)
+			throws InstallPackageServiceException {
+		Decompress decompress = new Decompress();
+		decompress
+				.readPackageSetInstallInfos(is, installerInfos, zipEntriesMap);
+
+		defaultSelectedPacketsIDs = decompress.getDefaultSelectedPackages();
+	}
+
+	public void readPackageInfo(InputStream is,
+			List<PackageInfo> installerInfos,
+			Map<PackageInfo, String> zipEntriesMap, String name)
+			throws InstallPackageServiceException {
+
+		Decompress decompress = new Decompress();
+		decompress.readPackageInstallInfo(is, installerInfos, zipEntriesMap,
+				name);
+	}
+
+	public List<String> getDefaultSelectedPackagesIDs() {
+		return defaultSelectedPacketsIDs;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependency.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependency.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependency.java	(revision 42196)
@@ -0,0 +1,201 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl;
+
+import java.text.MessageFormat;
+
+import org.gvsig.installer.lib.api.Dependency;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.gvsig.tools.packageutils.StringWithAlias;
+import org.gvsig.tools.packageutils.impl.DefaultStringWithAlias;
+
+public class DefaultDependency implements Dependency {
+
+	private String type;
+	private StringWithAlias code;
+	private String op;
+	private Version version;
+
+	public DefaultDependency() {
+		super();
+		clear();
+	}
+
+	public DefaultDependency(PackageInfo packageInfo) {
+		this();
+		this.code = packageInfo.getAllCodes();
+		this.type = "required";
+		this.op = ">=";
+		this.version = packageInfo.getVersion();
+	}
+
+	public void clear() {
+		this.type = "required";
+		this.code = new DefaultStringWithAlias("unknow");
+		this.op = "=";
+		this.version = new DefaultVersion();
+	}
+
+	public Dependency parse(String dependency) {
+		// Parse a string with the dependency specification
+		// (required|suggested|recommended|conflict)[:] code (=|>|<|>=|<=)
+		// version
+		if (dependency == null) {
+			this.clear();
+			return this;
+		}
+		dependency = dependency.trim();
+		if (dependency.equals("")) {
+			this.clear();
+			return this;
+		}
+		
+		String s = dependency;
+		/*
+		 * Remove special characters, so
+		 * dependency description in pom.xml is not
+		 * so fragile
+		 */
+        s = s.replace('\n', ' ');
+        s = s.replace('\t', ' ');
+        s = s.replace('\r', ' ');
+        s = s.replace(':', ' ');
+		
+        /*
+         * Added loop because replaceAll is not
+         * exhaustive in this case
+         */
+        while (s.indexOf("  ") != -1) {
+            s = s.replaceAll("  ", " ");
+        }
+		
+		String[] x = s.split(" ");
+		if (x.length != 4) {
+			throw new InvalidDependencyFormatException(dependency);
+		}
+		
+		this.type = x[0];
+		this.code = new DefaultStringWithAlias(x[1]);
+		this.op = x[2];
+		this.version.parse(x[3]);
+		return this;
+	}
+
+	private class InvalidDependencyFormatException extends BaseRuntimeException {
+
+		private static final long serialVersionUID = 2856837862117653856L;
+
+		private static final String message = "Error parsing dependecy '%(dependency)s'";
+
+		private static final String KEY = "_Error_parsing_dependecy_XdependecyX";
+
+		public InvalidDependencyFormatException(String dependency) {
+			super(message, null, KEY, serialVersionUID);
+			setValue("dependency", dependency);
+		}
+	}
+
+	public String getType() {
+		return this.type;
+	}
+
+	public String getCode() {
+		return this.code.toString();
+	}
+
+	public String getOp() {
+		return this.op;
+	}
+
+	public Version getVersion() {
+		return this.version;
+	}
+
+	public boolean match(String type, String code, Version version) {
+		if (!this.type.equalsIgnoreCase(type)) {
+			return false;
+		}
+		if (!this.code.equalsIgnoreCase(code)) {
+			return false;
+		}
+		return version.check(this.op, this.version);
+	}
+
+	public boolean match(String type, StringWithAlias code, Version version) {
+		if (!this.type.equalsIgnoreCase(type)) {
+			return false;
+		}
+		if (!code.equalsIgnoreCase(this.code)) {
+			return false;
+		}
+		return version.check(this.op, this.version);
+	}
+
+	@Override
+	public String toString() {
+		return MessageFormat.format("{0}: {1} {2} {3}", this.type, this.code.toString(),
+				this.op, this.version.toString());
+	}
+
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		DefaultDependency x = (DefaultDependency) super.clone();
+		x.version = (Version) this.version.clone();
+		return x;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		Dependency other;
+		try {
+			other = (Dependency) obj;
+		} catch (Exception ex) {
+			return false;
+		}
+		if (!this.code.equalsIgnoreCase(other.getCode())) {
+			return false;
+		}
+		if (!this.type.equalsIgnoreCase(other.getType())) {
+			return false;
+		}
+		if (!this.op.equalsIgnoreCase(other.getOp())) {
+			return false;
+		}
+		if (!this.version.equals(other.getVersion())) {
+			return false;
+		}
+		return true;
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+	    return version.hashCode() + code.hashCode()
+	        + type.hashCode() + op.hashCode();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultDependency.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/DefaultInstallPackageService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/DefaultInstallPackageService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/DefaultInstallPackageService.java	(revision 42196)
@@ -0,0 +1,585 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.execution;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.impl.DefaultInstallerManager;
+import org.gvsig.installer.lib.impl.utils.Download;
+import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.installer.lib.spi.InstallerProviderManager;
+import org.gvsig.installer.lib.spi.execution.InstallPackageProvider;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.service.Manager;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+
+public class DefaultInstallPackageService extends Thread implements
+		InstallPackageService {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(DefaultInstallPackageService.class);
+	
+	private static final String PACKAGE_FILE_NAME = "packages.gvspki";
+
+	private Map<PackageInfo, File> packageInfoFileMap = null;
+	private Map<PackageInfo, String> zipEntriesMap = null;
+	private List<PackageInfo> packageInfos = null;
+	private InstallerManager manager;
+	private InstallPackageProviderServices installerProviderServices = null;
+
+	public DefaultInstallPackageService(DefaultInstallerManager manager) {
+		super();
+		this.manager = manager;
+		this.reset();
+	}
+
+	public void reset() {
+		packageInfoFileMap = new HashMap<PackageInfo, File>();
+		packageInfos = new ArrayList<PackageInfo>();
+		zipEntriesMap = new HashMap<PackageInfo, String>();
+		installerProviderServices = InstallerProviderLocator
+				.getProviderManager().createInstallerProviderServices();
+	}
+
+	public class InstallerApplicationDirectoryNotFoundException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = -1130408094135962456L;
+
+		private static final String message = "Aplication directory '%(directory)s' not found";
+
+		private static final String KEY = "_aplication_directory_XdirectoryX_not_found";
+
+		public InstallerApplicationDirectoryNotFoundException(File file) {
+			super(message, KEY, serialVersionUID);
+			setValue("directory", file.toString());
+		}
+
+	}
+
+	public class InstallerNoDirectoryException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = -8685263049644983769L;
+
+		private static final String message = "'%(directory)s' is not a directory";
+
+		private static final String KEY = "_XdirectoryX_is_not_a_directory";
+
+		public InstallerNoDirectoryException(File file) {
+			super(message, KEY, serialVersionUID);
+			setValue("directory", file.toString());
+		}
+
+	}
+
+	public class InstallerFileNotFoundException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = 556517830330132149L;
+
+		private static final String message = "File '%(file)s' not found";
+
+		private static final String KEY = "_file_XfileX_not_found";
+
+		public InstallerFileNotFoundException(File file) {
+			super(message, KEY, serialVersionUID);
+			setValue("file", file.toString());
+		}
+
+	}
+
+	public class InstallerBundleNotFoundException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = 5065410511582625301L;
+
+		private static final String message = "File '%(file)s' not found";
+
+		private static final String KEY = "_file_XfileX_not_found";
+
+		public InstallerBundleNotFoundException(File file,
+				FileNotFoundException e) {
+			super(message, e, KEY, serialVersionUID);
+			setValue("file", file.toString());
+		}
+
+	}
+
+	public class InstallerIOException extends InstallPackageServiceException {
+
+		private static final long serialVersionUID = 3153613550157712363L;
+
+		private static final String message = "IO error installing the file '%(file)s'";
+
+		private static final String KEY = "_IO_error installing_file_XfileX_";
+
+		public InstallerIOException(File file, IOException e) {
+			super(message, e, KEY, serialVersionUID);
+			setValue("file", file.toString());
+		}
+
+	}
+
+	public class InstallerFileDownloadException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = 8640183295766490512L;
+
+		private static final String message = "File '%(url)s' download error";
+
+		private static final String KEY = "_File_XurlX_download_error";
+
+		public InstallerFileDownloadException(URL url, IOException e) {
+			super(message, e, KEY, serialVersionUID);
+			setValue("url", url.toString());
+		}
+
+	}
+
+	public class InstallerPackageNotFoundException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = 1726608498886963868L;
+
+		private static final String message = "Package not found";
+
+		private static final String KEY = "_package_not_found";
+
+		public InstallerPackageNotFoundException() {
+			super(message, KEY, serialVersionUID);
+		}
+
+	}
+
+	public class InstallerNoPackageException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = -2292735515704746966L;
+
+		private static final String message = "Package does not exist";
+
+		private static final String KEY = "_package__does_not_exist";
+
+		public InstallerNoPackageException() {
+			super(message, KEY, serialVersionUID);
+		}
+
+	}
+
+	public class InstallerProviderCreationException extends
+			InstallPackageServiceException {
+
+		private static final long serialVersionUID = -7985786807492393584L;
+
+		private static final String message = "Error creating the provider";
+
+		private static final String KEY = "_Error_creating_the_provider";
+
+		public InstallerProviderCreationException(ServiceException e) {
+			super(message, e, KEY, serialVersionUID);
+		}
+
+	}
+
+	public void installPackage(File applicationDirectory,
+			PackageInfo packageInfo) throws InstallPackageServiceException {
+		if (!applicationDirectory.exists()) {
+			LOG.warn("Can install package '"+packageInfo.getCode()+"', application folder '"+applicationDirectory.toString()+"' does not exits.");
+			throw new InstallerApplicationDirectoryNotFoundException(
+					applicationDirectory);
+		}
+		if (!packageInfoFileMap.containsKey(packageInfo)) {
+			LOG.warn("Can install package '"+packageInfo.getCode()+"', package not found.");
+			throw new InstallerPackageNotFoundException();
+		}
+
+		InstallPackageProvider installerExecutionProvider = createProvider(packageInfo);
+
+		// Get the package or package set file
+		File file = packageInfoFileMap.get(packageInfo);
+		if (file == null) {
+			if (packageInfo.getDownloadURL() == null) {
+				throw new InstallerPackageNotFoundException();
+			}
+			this.downloadPackage(packageInfo);
+			file = packageInfoFileMap.get(packageInfo);
+		}
+
+		// Open and install the package or package set file
+		try {
+
+			InputStream packageStream;
+			InputStream fis = new FileInputStream(file);
+			InputStream bis = new BufferedInputStream(fis);
+			if (isPackage(file)) {
+				packageStream = bis;
+			} else {
+				if (!isPackageSet(file)) {
+					LOG.info("Trying to install a package file ({0}) "
+							+ "without a known file extension. Will try "
+							+ "to install it as a package set", file);
+				}
+				packageStream = installerProviderServices.searchPackage(bis,
+						zipEntriesMap.get(packageInfo));
+			}
+
+			try {
+				installerExecutionProvider.install(applicationDirectory,
+						packageStream, packageInfo);
+			} catch (InstallPackageServiceException e) {
+
+				packageStream.close();
+				if (bis != packageStream) {
+					bis.close();
+				}
+				fis.close();
+
+				// if fails the installation, zip files need to be reopen
+				// the package will be installed into the update folder for
+				// installation after a gvSIG restart
+
+				fis = new FileInputStream(file);
+				bis = new BufferedInputStream(fis);
+				if (isPackage(file)) {
+					packageStream = bis;
+				} else {
+					if (!isPackageSet(file)) {
+						LOG.info("Trying to install a package file ({0}) "
+								+ "without a known file extension. Will try "
+								+ "to install it as a package set", file);
+					}
+					packageStream = installerProviderServices.searchPackage(
+							bis, zipEntriesMap.get(packageInfo));
+				}
+				installerExecutionProvider.installLater(applicationDirectory,
+						packageStream, packageInfo);
+			}
+
+			packageStream.close();
+			if (bis != packageStream) {
+				bis.close();
+			}
+			fis.close();
+
+		} catch (FileNotFoundException e) {
+			throw new InstallerFileNotFoundException(file);
+		} catch (IOException e) {
+			throw new InstallerIOException(file, e);
+		}
+
+	}
+
+	public void installPackage(File applicationDirectory, String packageCode)
+			throws InstallPackageServiceException {
+		PackageInfo packageInfo = getPackageInfo(packageCode);
+		if (packageInfo == null) {
+			throw new InstallerNoPackageException();
+		}
+		installPackage(applicationDirectory, packageInfo);
+	}
+
+	private InstallPackageProvider createProvider(PackageInfo packageInfo)
+			throws InstallPackageServiceException {
+		InstallerProviderManager installerProviderManager = (InstallerProviderManager) ((DefaultInstallerManager) manager)
+				.getProviderManager();
+
+		try {
+			return installerProviderManager.createExecutionProvider(packageInfo
+					.getType());
+		} catch (ServiceException e) {
+			throw new InstallerProviderCreationException(e);
+		}
+	}
+
+	public PackageInfo getPackageInfo(int index) {
+		if (index >= packageInfos.size()) {
+			return null;
+		}
+		return packageInfos.get(index);
+	}
+
+	public PackageInfo getPackageInfo(String packageCode) {
+		for (int i = 0; i < getPackageCount(); i++) {
+			if (packageInfos.get(i).getCode().equals(packageCode)) {
+				return packageInfos.get(i);
+			}
+		}
+		return null;
+	}
+
+	public void addBundle(File bundle) throws InstallPackageServiceException {
+
+		if (!bundle.exists()) {
+			throw new InstallPackageServiceException();
+		}
+
+		int packageInfoCount = packageInfos.size();
+
+		FileInputStream fis;
+		try {
+			fis = new FileInputStream(bundle);
+		} catch (FileNotFoundException e) {
+			throw new InstallerBundleNotFoundException(bundle, e);
+		}
+		BufferedInputStream bis = new BufferedInputStream(fis);
+		if (isPackage(bundle)) {
+			installerProviderServices.readPackageInfo(bis, packageInfos,
+					zipEntriesMap, bundle.getName());
+		} else {
+			if (!isPackageSet(bundle)) {
+				LOG
+						.info(
+								"Trying to add a package file ({0}) without a known "
+										+ "file extension. Will try to add it as a package set",
+								bundle);
+			}
+			installerProviderServices.readPackageSetInfo(fis, packageInfos,
+					zipEntriesMap);
+		}
+		try {
+			bis.close();
+			fis.close();
+		} catch (IOException e) {
+			LOG.info("Error closing the input streams of the package file: "
+					+ bundle, e);
+		}
+
+		for (int i = packageInfoCount; i < packageInfos.size(); i++) {
+			packageInfoFileMap.put(packageInfos.get(i), bundle);
+		}
+	}
+
+	private boolean isPackageSet(File file) {
+		return file.getName().endsWith(
+				manager.getDefaultPackageSetFileExtension());
+	}
+
+	private boolean isPackage(File file) {
+		return file.getName()
+				.endsWith(manager.getDefaultPackageFileExtension());
+	}
+
+	public void addBundle(URL bundleURL) throws InstallPackageServiceException {
+		File bundle;
+		String urlString = bundleURL.toString(); 
+		if (urlString.endsWith(InstallerManager.PACKAGE_EXTENSION) || urlString.endsWith(InstallerManager.PACKAGE_INDEX_EXTENSION)) {
+            manager.setDownloadBaseURL(bundleURL);
+			bundle = downloadFile(bundleURL, PACKAGE_FILE_NAME);
+			addBundle(bundle);
+		} else {
+			if (!urlString.endsWith("/")) {
+				urlString += "/";
+			}
+			
+			Version version = manager.getVersionEx(); 
+			urlString += ("dists/"
+			+ version.getMayor() + "." + version.getMinor() + "."
+			+ version.getRevision() + "/" + PACKAGE_FILE_NAME);
+			
+
+			URL completeURL;
+			try {
+				completeURL = new URL(urlString);
+			} catch (MalformedURLException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+				return;
+			}
+
+            manager.setDownloadBaseURL(completeURL);
+			bundle = downloadFile(completeURL, PACKAGE_FILE_NAME);
+			addBundle(bundle);
+		}
+
+	}
+
+	private File downloadFile(URL bundleURL, String defaultFileName)
+			throws InstallPackageServiceException {
+		try {
+			Download download = new Download();
+			return download.downloadFile(bundleURL, defaultFileName);
+		} catch (IOException e) {
+			throw new InstallerFileDownloadException(bundleURL, e);
+		}
+	}
+
+	public void addBundlesFromDirectory(File directory)
+			throws InstallPackageServiceException {
+		if (!directory.isDirectory()) {
+			throw new InstallerNoDirectoryException(directory);
+		}
+		List<File> files = new ArrayList<File>();
+
+		listRecursively(directory, new FileFilter() {
+
+			private String packageExt = manager
+					.getDefaultPackageFileExtension();
+			private String packageSetExt = manager
+					.getDefaultPackageSetFileExtension();
+
+			public boolean accept(File file) {
+				String name = file.getName().toLowerCase();
+				return file.isDirectory() || name.endsWith(packageExt)
+						|| name.endsWith(packageSetExt);
+			}
+		}, files);
+		for (int i = 0; i < files.size(); i++) {
+			if (files.get(i).isFile()) {
+				addBundle(files.get(i));
+			}
+		}
+	}
+
+	private void listRecursively(File fileOrDir, FileFilter filter,
+			List<File> files) {
+		files.add(fileOrDir);
+
+		if (fileOrDir.isDirectory()) {
+
+			File[] dirContents = fileOrDir.listFiles(filter);
+
+			for (File f : dirContents) {
+				listRecursively(f, filter, files); // Recursively list.
+			}
+		} else {
+			files.add(fileOrDir);
+		}
+	}
+
+	public int getPackageCount() {
+		if (packageInfos == null) {
+			return 0;
+		}
+		return packageInfos.size();
+	}
+
+	public Manager getManager() {
+		return this.manager;
+	}
+
+	public void downloadPackage(PackageInfo packageInfo)
+			throws InstallPackageServiceException {
+		this.downloadPackage(packageInfo, null);
+	}
+
+	public void downloadPackage(PackageInfo packageInfo,
+			SimpleTaskStatus taskStatus) throws InstallPackageServiceException {
+	    
+		File file = null;
+		
+		try {
+            file = packageInfo.downloadFile(taskStatus);
+        } catch (BaseException e) {
+            throw new InstallPackageServiceException(e);
+        }
+		this.packageInfoFileMap.put(packageInfo, file);
+	}
+
+	public List<String> getDefaultSelectedPackagesIDs() {
+		return installerProviderServices.getDefaultSelectedPackagesIDs();
+	}
+
+	public List<String> getCategories() {
+		Set<String> categories = new HashSet<String>();
+
+		for (int i = 0; i < packageInfos.size(); i++) {
+			PackageInfo pkginfo = packageInfos.get(i);
+			List<String> pkgcategories = pkginfo.getCategories();
+			categories.addAll(pkgcategories);
+		}
+		try {
+			PackageInfo[] pkgs = manager.getInstalledPackages();
+			for (int i = 0; i < pkgs.length; i++) {
+				PackageInfo pkginfo = pkgs[i];
+				List<String> pkgcategories = pkginfo.getCategories();
+				categories.addAll(pkgcategories);
+			}
+			
+		} catch (MakePluginPackageServiceException e) {
+			// Ignore exceptions
+		}
+		ArrayList<String> l = new ArrayList<String>(categories);
+		Collections.sort(l);
+		return l;
+	}
+
+	public List<String> getTypes() {
+		Set<String> types = new HashSet<String>();
+
+		for (int i = 0; i < packageInfos.size(); i++) {
+			PackageInfo pkginfo = packageInfos.get(i);
+			types.add(pkginfo.getType());
+		}
+		try {
+			PackageInfo[] pkgs = manager.getInstalledPackages();
+			for (int i = 0; i < pkgs.length; i++) {
+				PackageInfo pkginfo = pkgs[i];
+				types.add(pkginfo.getType());
+			}
+			
+		} catch (MakePluginPackageServiceException e) {
+			// Ignore exceptions
+		}
+		ArrayList<String> l = new ArrayList<String>(types);
+		Collections.sort(l);
+		return l;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/DefaultInstallPackageService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/NotInstallerExecutionProviderException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/NotInstallerExecutionProviderException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/NotInstallerExecutionProviderException.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.execution;
+
+import org.gvsig.installer.lib.spi.execution.InstallPackageProvider;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Exception thrown when the provider doesn't implements the
+ * {@link InstallPackageProvider} interface
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class NotInstallerExecutionProviderException extends ServiceException {
+
+	private static final long serialVersionUID = -2159095938700834790L;
+
+	private final static String MESSAGE_KEY = "_ProviderNotRegisteredException";
+	private final static String MESSAGE_FORMAT = "The provider '%(providerName)' does not implement the InstallerExecutionProvider interface";
+
+	/**
+	 * Creates a new {@link NotInstallerExecutionProviderException}.
+	 * 
+	 * @param name
+	 *            the name of the provider that doesn't implements the
+	 *            {@link InstallPackageProvider} interface
+	 */
+	public NotInstallerExecutionProviderException(String name) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("providerName", name);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/NotInstallerExecutionProviderException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePluginPackageService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePluginPackageService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePluginPackageService.java	(revision 42196)
@@ -0,0 +1,456 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.lib.impl.creation;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.impl.DefaultPackageInfo;
+import org.gvsig.installer.lib.impl.utils.DeleteFile;
+import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.tools.service.Manager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultMakePluginPackageService implements
+		MakePluginPackageService {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(DefaultMakePluginPackageService.class);
+
+	public static final String ANT_FILE_NAME = "install.xml";
+	public static final String COPIED_FILES_DIRECTORY_NAME = "files";
+	private static final Logger logger = org.slf4j.LoggerFactory
+			.getLogger(DefaultMakePluginPackageService.class);
+	private final InstallerManager manager;
+
+	private List<PackageInfo> installerInfos = null;
+
+	protected String antScript = null;
+	private InstallPackageProviderServices installerProviderServices = null;
+
+	public DefaultMakePluginPackageService(InstallerManager manager)
+			throws MakePluginPackageServiceException {
+		super();
+		this.manager = manager;
+		this.installerInfos = new ArrayList<PackageInfo>();
+		this.installerProviderServices = InstallerProviderLocator
+				.getProviderManager().createInstallerProviderServices();
+		initialize();
+	}
+
+	private void initialize() throws MakePluginPackageServiceException {
+
+		List<File> addonFolders = manager.getAddonFolders();
+
+		if (addonFolders == null) {
+			throw new MakePluginPackageServiceException(
+					"The addonFolders list is null");
+		}
+		// else if (addonFolders.size() <= 0) {
+		// LOG.info("The addonFolders list is empty");
+		// }
+		else {
+			// Read all the installed plugins
+			for (int i = 0; i < addonFolders.size(); i++) {
+				File pluginDirectoryFile = addonFolders.get(i);
+
+				if (!pluginDirectoryFile.exists()) {
+					pluginDirectoryFile.mkdirs();
+					LOG.info("Plugins folder created: {}", pluginDirectoryFile);
+				}
+
+				DefaultPackageInfo packageInfo = new DefaultPackageInfo();
+
+				installerProviderServices.readPackageInfo(new File(
+						pluginDirectoryFile.getAbsolutePath()), packageInfo);
+
+				// Checks if the ant file exists
+				File antFile = getAntFile(pluginDirectoryFile);
+				if (antFile.exists()) {
+					try {
+						packageInfo.setAntScript(readFileAsString(antFile
+								.getAbsolutePath()));
+					} catch (IOException e) {
+						logger.error("Not possible to read the ant file");
+					}
+				}
+
+				// Checks if there are files to copy
+				File copiedFilesDirectory = getCopiedFilesDirectory(pluginDirectoryFile);
+				if (copiedFilesDirectory.exists()) {
+					loadCopiedFiles(copiedFilesDirectory, copiedFilesDirectory,
+							packageInfo);
+				}
+
+				installerInfos.add(packageInfo);
+			}
+		}
+	}
+
+	private void loadCopiedFiles(File file, File filesDirectory,
+			PackageInfo packageInfo) throws MakePluginPackageServiceException {
+		if (file.isDirectory()) {
+			File[] files = file.listFiles();
+			for (int i = 0; i < files.length; i++) {
+				loadCopiedFiles(files[i], filesDirectory, packageInfo);
+			}
+		} else {
+			// Removing the plugin prefix
+
+			String pluginFileName = file.getAbsolutePath().substring(
+					filesDirectory.getAbsolutePath().length(),
+					file.getAbsolutePath().length());
+
+			File pluginFile = new File(System.getProperty("user.dir")
+					+ pluginFileName);
+
+			packageInfo.getFilesToCopy().add(pluginFile);
+		}
+	}
+
+	public void createPackageSet(PackageInfo packageInfo,
+			OutputStream packageStream)
+			throws MakePluginPackageServiceException {
+
+		LOG.debug("Creating a package set of the package info: \n{0}",
+				packageInfo);
+
+		String pluginFileName = manager.getPackageFileName(packageInfo);
+		installerProviderServices.compressPackageSet(
+				getAbsolutePluginPackageDirectory(packageInfo), pluginFileName,
+				packageStream);
+	}
+
+	public void preparePackage(PackageInfo packageInfo, File originalPluginDir)
+			throws MakePluginPackageServiceException {
+
+		LOG.debug("Preparing a package set of the package info: \n{0}",
+				packageInfo);
+		// Write the package.info file
+		writePackageInfo(packageInfo);
+
+		if (packageInfo.getAntScript() != null) {
+			// Create the ant file
+			writeAntFile(packageInfo);
+
+			// Copy the selected files
+			writeSelectedFiles(packageInfo);
+		}
+	}
+
+	public void createPackage(PackageInfo packageInfo,
+			OutputStream packageStream)
+			throws MakePluginPackageServiceException {
+
+		LOG.debug("Creating package of the package info: \n{0}", packageInfo);
+		installerProviderServices.compressPackage(
+				getAbsolutePluginPackageDirectory(packageInfo), packageStream);
+	}
+
+	public void createPackageIndex(PackageInfo packageInfo,
+			OutputStream packageStream)
+			throws MakePluginPackageServiceException {
+		LOG.debug("Creating package index of the package info: \n{0}",
+				packageInfo);
+
+		installerProviderServices.compressPackageIndex(
+				getAbsolutePluginPackageDirectory(packageInfo), packageStream);
+	}
+
+	private void writePackageInfo(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		// conseguir directorio destino
+		writePackageInfo(packageInfo,
+				getAbsolutePluginPackageDirectory(packageInfo));
+	}
+
+	public void writePackageInfo(PackageInfo packageInfo, File folder)
+			throws MakePluginPackageServiceException {
+		installerProviderServices.writePackageInfo(folder, packageInfo);
+	}
+
+	public void writePackageInfoForIndex(PackageInfo packageInfo, File folder)
+			throws MakePluginPackageServiceException {
+		installerProviderServices.writePackageInfoForIndex(folder, packageInfo);
+	}
+
+	private void createInstallDirInPluginDir(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		File pluginDirectory;
+		pluginDirectory = getAbsolutePluginPackageDirectory(packageInfo);
+		File installdir = new File(pluginDirectory, "install");
+		installdir.mkdir();
+
+	}
+
+	private void writeAntFile(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		try {
+			createInstallDirInPluginDir(packageInfo);
+			ByteArrayInputStream in = new ByteArrayInputStream(packageInfo
+					.getAntScript().getBytes());
+			OutputStream out = new FileOutputStream(
+					getAbsoluteAntFile(packageInfo));
+
+			// Copy the bits from instream to outstream
+			byte[] buf = new byte[1024];
+			int len;
+			while ((len = in.read(buf)) > 0) {
+				out.write(buf, 0, len);
+			}
+			in.close();
+			out.close();
+		} catch (IOException e) {
+			throw new MakePluginPackageServiceException(
+					"Exception writing the ant file");
+		}
+
+	}
+
+	private void writeSelectedFiles(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		try {
+			createInstallDirInPluginDir(packageInfo);
+			String copiedFilesDirectoryName = getAbsoulteCopiedFilesDirectoryName(packageInfo);
+
+			// Deleting the previous files folder
+			File copiedFilesDirectoryfile = new File(copiedFilesDirectoryName);
+			deleteDirectory(copiedFilesDirectoryfile);
+
+			// It works if the plugins directory is in the folder
+			// "gvSIG/extensiones"
+			String applicationDirectory = System.getProperty("user.dir");
+
+			List<File> files = packageInfo.getFilesToCopy();
+
+			for (int i = 0; i < files.size(); i++) {
+				String sourceFile = files.get(i).getAbsolutePath();
+
+				// Create the final path
+				String destFile = sourceFile.substring(applicationDirectory
+						.length(), sourceFile.length());
+				destFile = copiedFilesDirectoryName + destFile;
+
+				// Copy the files
+				copy(new File(sourceFile), new File(destFile));
+			}
+		} catch (IOException e) {
+			throw new MakePluginPackageServiceException(
+					"Exception copying the files", e);
+		}
+	}
+
+	static public boolean deleteDirectory(File path) {
+		if (path.exists()) {
+			File[] files = path.listFiles();
+			for (int i = 0; i < files.length; i++) {
+				if (files[i].isDirectory()) {
+					deleteDirectory(files[i]);
+				} else {
+					files[i].delete();
+				}
+			}
+		}
+		return (path.delete());
+	}
+
+	private void copy(File sourceLocation, File targetLocation)
+			throws IOException {
+		if (sourceLocation.isDirectory()) {
+			if (!targetLocation.exists()) {
+				targetLocation.mkdir();
+			}
+
+			String[] children = sourceLocation.list();
+			for (int i = 0; i < children.length; i++) {
+				copy(new File(sourceLocation, children[i]), new File(
+						targetLocation, children[i]));
+			}
+		} else {
+			targetLocation.getParentFile().mkdirs();
+
+			InputStream in = new FileInputStream(sourceLocation);
+			OutputStream out = new FileOutputStream(targetLocation);
+
+			// Copy the bits from instream to outstream
+			byte[] buf = new byte[1024];
+			int len;
+			while ((len = in.read(buf)) > 0) {
+				out.write(buf, 0, len);
+			}
+			in.close();
+			out.close();
+		}
+	}
+
+	private File getCopiedFilesDirectory(File pluginDirectory)
+			throws MakePluginPackageServiceException {
+		return new File(pluginDirectory.getAbsolutePath() + File.separator
+				+ "install" + File.separator + COPIED_FILES_DIRECTORY_NAME);
+	}
+
+	private String getAbsoulteCopiedFilesDirectoryName(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		return getAbsolutePluginPackageDirectory(packageInfo).getAbsolutePath()
+				+ File.separator + "install" + File.separator
+				+ COPIED_FILES_DIRECTORY_NAME;
+	}
+
+	private File getAntFile(File pluginDirectory)
+			throws MakePluginPackageServiceException {
+		return new File(pluginDirectory.getAbsolutePath() + File.separator
+				+ "install" + File.separator + ANT_FILE_NAME);
+	}
+
+	private File getAbsoluteAntFile(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		String destinationFilePath = manager.getDefaultLocalAddonRepository()
+				.getAbsolutePath()
+				+ File.separator + packageInfo.getCode();
+		return new File(destinationFilePath + File.separator + "install" + File.separator  + ANT_FILE_NAME);
+	}
+
+	private File getAbsolutePluginPackageDirectory(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException { 
+            File folder = manager.getAddonFolder(packageInfo.getCode());
+            // Si existe un addon para ese packageinfo lo usamos, y si no
+            // devolbemos la carpeta del addon en el repositorio local por defecto
+            // para ese tipo de addon en el que se pueda escribir para que se
+            // pueda crear alli el addon.
+            if( folder == null ) {
+                folder = manager.getDefaultLocalAddonRepository(packageInfo.getType(), InstallerManager.ACCESS_WRITE);
+                folder = new File(folder, packageInfo.getCode());
+            }
+            return folder.getAbsoluteFile();
+	}
+
+	public Manager getManager() {
+		return this.manager;
+	}
+
+	public PackageInfo getPluginPackageInfo(int index) {
+		if (index >= installerInfos.size()) {
+			return null;
+		}
+		return installerInfos.get(index);
+	}
+
+	public PackageInfo getPluginPackageInfo(String code) {
+		for (int i = 0; i < getPluginPackageCount(); i++) {
+			if (installerInfos.get(i).getCode() != null
+					&& installerInfos.get(i).getCode().equals(code)) {
+				return installerInfos.get(i);
+			}
+		}
+		PackageInfo info = new DefaultPackageInfo();
+		info.setCode(code);
+		return info;
+	}
+
+	public int getPluginPackageCount() {
+		return installerInfos.size();
+	}
+
+	public String getDefaultAntScript()
+			throws MakePluginPackageServiceException {
+		try {
+			URL resource = getClass().getResource(ANT_FILE_NAME);
+			return readUrlAsString(resource);
+		} catch (IOException e) {
+			throw new MakePluginPackageServiceException(
+					"Impossible to read the default ant file", e);
+		}
+	}
+
+	private String readUrlAsString(URL url) throws java.io.IOException {
+		URLConnection urlConnection = url.openConnection();
+		InputStream inputStream = urlConnection.getInputStream();
+		BufferedReader bufferedReader = new BufferedReader(
+				new InputStreamReader(inputStream));
+		StringBuffer fileData = new StringBuffer(1000);
+		String line = bufferedReader.readLine();
+		while (line != null) {
+			fileData.append(line + "\n");
+			line = bufferedReader.readLine();
+		}
+		bufferedReader.close();
+		return fileData.toString();
+	}
+
+	private String readFileAsString(String filePath) throws java.io.IOException {
+		StringBuffer fileData = new StringBuffer(1000);
+		BufferedReader reader = new BufferedReader(new FileReader(filePath));
+		char[] buf = new char[1024];
+		int numRead = 0;
+		while ((numRead = reader.read(buf)) != -1) {
+			String readData = String.valueOf(buf, 0, numRead);
+			fileData.append(readData);
+			buf = new char[1024];
+		}
+		reader.close();
+		return fileData.toString();
+	}
+
+	public PackageInfo[] getInstalledPackages()
+			throws MakePluginPackageServiceException {
+		return installerInfos.toArray(new PackageInfo[installerInfos.size()]);
+	}
+
+	public File getPluginFolder(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		return getAbsolutePluginPackageDirectory(packageInfo);
+	}
+
+	public boolean deleteDir(File folder) {
+		DeleteFile file = new DeleteFile();
+		return file.delete(folder);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePluginPackageService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePackageService.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePackageService.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePackageService.java	(revision 42196)
@@ -0,0 +1,213 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.lib.impl.creation;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePackageService;
+import org.gvsig.installer.lib.api.creation.MakePackageServiceException;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.tools.service.Manager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultMakePackageService implements MakePackageService {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(DefaultMakePackageService.class);
+
+	public static final String COPIED_FILES_DIRECTORY_NAME = "files";
+
+	private final InstallerManager manager;
+	protected File packageFolder;
+
+	protected String antScript = null;
+	private InstallPackageProviderServices installerProviderServices = null;
+
+	private PackageInfo packageInfo;
+
+	public DefaultMakePackageService(InstallerManager manager,
+			File packageFolder, PackageInfo packageInfo) {
+		super();
+		this.manager = manager;
+		this.packageFolder = packageFolder;
+		this.packageInfo = packageInfo;
+		installerProviderServices = InstallerProviderLocator
+				.getProviderManager().createInstallerProviderServices();
+	}
+
+	public Manager getManager() {
+		return this.manager;
+	}
+
+	public void preparePackage() throws MakePackageServiceException {
+
+		LOG.debug("Preparing a package set of the package info: \n{0}",
+				packageInfo);
+
+		if (packageInfo.getAntScript() != null) {
+			// Create the ant file
+			writeAntFile(packageInfo);
+		}
+	}
+
+	public void createPackageSet(OutputStream packageStream)
+			throws MakePackageServiceException {
+
+		LOG.debug("Creating a package set of the package info: \n{0}",
+				packageInfo);
+
+		installerProviderServices.writePackageInfo(this.packageFolder,
+				this.packageInfo);
+		String pluginFileName = manager.getPackageFileName(packageInfo);
+		installerProviderServices.compressPackageSet(this.packageFolder,
+				pluginFileName, packageStream);
+	}
+
+	public void createPackageIndexSet(URL downloadurl,
+			OutputStream packageStream) throws MakePackageServiceException {
+
+		LOG.debug("Creating a package set of the package info: \n{0}",
+				packageInfo);
+
+		try {
+			PackageInfo infoIndex = (PackageInfo) packageInfo.clone();
+			infoIndex.setDownloadURL(downloadurl);
+			installerProviderServices.writePackageInfo(this.packageFolder,
+					this.packageInfo);
+
+			String pluginFileName = manager.getPackageFileName(packageInfo);
+			installerProviderServices.compressPackageSet(this.packageFolder,
+					pluginFileName, packageStream);
+		} catch (Exception e) {
+			throw new MakePackageServiceException(e);
+		}
+	}
+
+	public void createPackage(OutputStream packageStream)
+			throws MakePackageServiceException {
+		LOG.debug("Creating package of the package info: \n{0}", packageInfo);
+
+		installerProviderServices.writePackageInfo(this.packageFolder,
+				this.packageInfo);
+		installerProviderServices.compressPackage(this.packageFolder,
+				packageStream);
+	}
+
+	public void createPackageIndex(URL downloadurl, OutputStream packageStream)
+			throws MakePackageServiceException {
+		LOG.debug("Creating package index of the package info: \n{0}",
+				packageInfo);
+
+		try {
+			PackageInfo infoIndex = (PackageInfo) packageInfo.clone();
+			infoIndex.setDownloadURL(downloadurl);
+			installerProviderServices.writePackageInfo(this.packageFolder,
+					infoIndex);
+			installerProviderServices.compressPackageIndex(this.packageFolder,
+					packageStream);
+		} catch (Exception e) {
+			throw new MakePackageServiceException(e);
+		}
+	}
+
+	protected void createInstallFolderInPackageFolder() {
+		File installdir = new File(this.packageFolder, "install");
+		installdir.mkdir();
+	}
+
+	private void writeAntFile(PackageInfo packageInfo)
+			throws MakePluginPackageServiceException {
+		try {
+			createInstallFolderInPackageFolder();
+			ByteArrayInputStream in = new ByteArrayInputStream(packageInfo
+					.getAntScript().getBytes());
+			OutputStream out = new FileOutputStream(getAntFile());
+
+			// Copy the bits from instream to outstream
+			byte[] buf = new byte[1024];
+			int len;
+			while ((len = in.read(buf)) > 0) {
+				out.write(buf, 0, len);
+			}
+			in.close();
+			out.close();
+		} catch (IOException e) {
+			throw new MakePluginPackageServiceException(
+					"Exception writing the ant file");
+		}
+
+	}
+
+	private File getAntFile() {
+		return new File(this.packageFolder.getAbsolutePath() + File.separator
+				+ "install" + File.separator + ANT_FILE_NAME);
+	}
+
+	public String getDefaultAntScript()
+			throws MakePluginPackageServiceException {
+		try {
+			URL resource = getClass().getResource(ANT_FILE_NAME);
+			return readUrlAsString(resource);
+		} catch (IOException e) {
+			throw new MakePluginPackageServiceException(
+					"Impossible to read the default ant file", e);
+		}
+	}
+
+	private String readUrlAsString(URL url) throws java.io.IOException {
+		URLConnection urlConnection = url.openConnection();
+		InputStream inputStream = urlConnection.getInputStream();
+		BufferedReader bufferedReader = new BufferedReader(
+				new InputStreamReader(inputStream));
+		StringBuffer fileData = new StringBuffer(1000);
+		String line = bufferedReader.readLine();
+		while (line != null) {
+			fileData.append(line + "\n");
+			line = bufferedReader.readLine();
+		}
+		bufferedReader.close();
+		return fileData.toString();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/creation/DefaultMakePackageService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/pom.xml	(revision 42196)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.lib</artifactId>
+  <packaging>pom</packaging>
+  <name>org.gvsig.installer.lib</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <modules>
+    <module>org.gvsig.installer.lib.api</module>
+    <module>org.gvsig.installer.lib.spi</module>
+    <module>org.gvsig.installer.lib.impl</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/AbstractGeneratePackageMojo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/AbstractGeneratePackageMojo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/AbstractGeneratePackageMojo.java	(revision 42196)
@@ -0,0 +1,255 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.maven;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.impl.utils.MD5BinaryFileUtils;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * Abstract Maven mojo to launch the gvSIG installer to generate a package of a
+ * gvSIG plugin.
+ * <p>
+ * Look at the <a href="http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/anexos/proyectos-oficiales-en-gvsig/nombrado-de-binarios-para-un-plugin-de-gvsig"
+ * >gvSIG plugin naming standard</a> for information about installers naming and
+ * versioning.
+ * </p>
+ * 
+ * @see InstallerManager
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractGeneratePackageMojo extends AbstractMojo {
+
+	/**
+	 * Location of the gvSIG plugins folder.
+	 * 
+	 * @parameter
+	 * @required
+	 */
+	private File pluginsFolder;
+
+	/**
+	 * Location of the folder where to create the package file.
+	 * 
+	 * @parameter
+	 * @required
+	 */
+	private File packageFolder;
+
+	/**
+	 * Name of the package file. If not provided, the official gvSIG name will
+	 * be used, as provided by the org.gvsig.installer.lib.api.InstallerManager.
+	 * 
+	 * @parameter
+	 */
+	private String packageFileName;
+
+	/**
+	 * Plugin project artifactId or code, used as gvSIG plugin name.
+	 * 
+	 * @parameter expression="${project.artifactId}"
+	 * @required
+	 */
+	private String artifactId;
+
+	/**
+	 * Plugin project packaging, to check it is of jar type.
+	 * 
+	 * @parameter expression="${project.packaging}"
+	 * @required
+	 */
+	private String packaging;
+
+	/**
+	 * If the mojo execution is disabled. Useful for projects that inherit the
+	 * maven plugin configuration but don't generate installer.
+	 * 
+	 * @parameter
+	 */
+	private boolean disabled = false;
+
+	public void execute() throws MojoExecutionException, MojoFailureException {
+		String packageName;
+		MakePluginPackageService makePluginService;
+		File packageBundleFile = null;
+
+		Log log = getLog();
+
+		if (disabled) {
+			log.info(getPackageTypeName() + " generation disabled.");
+			return;
+		}
+
+		if (!"jar".equals(packaging)) {
+			log
+					.info("Running on a project with packaging of type "
+							+ packaging
+							+ ". Do nothing, as we only create installers for projects "
+							+ "with jar packaging");
+			return;
+		}
+
+		log.info("Generating a " + getPackageTypeName() + " for the plugin: "
+				+ artifactId + " with the following information:");
+		log.info("\tgvSIG Plugin's folder: " + pluginsFolder);
+		log.info("\tPackage file destination folder: " + packageFolder);
+
+		try {
+			new DefaultLibrariesInitializer().fullInitialize();
+
+			InstallerManager manager = InstallerLocator.getInstallerManager();
+            manager.setDefaultLocalAddonRepository(pluginsFolder);
+			makePluginService = manager.getMakePluginPackageService();
+		} catch (LocatorException e) {
+			throw new MojoExecutionException(
+					"Error getting a reference to the InstallerManager", e);
+		} catch (MakePluginPackageServiceException e) {
+			throw new MojoExecutionException(
+					"Error getting a MakePluginPackageService for the "
+							+ " plugin folder: " + pluginsFolder, e);
+		}
+
+		// Get and fill the package info data
+		PackageInfo info = makePluginService.getPluginPackageInfo(artifactId);
+
+		log.info("Creating package of the package info:");
+		log.info(info.toString());
+
+		// Create the package bundle file
+		packageName = packageFileName == null ? getPackageFileName(info)
+				: packageFileName;
+		if (!packageFolder.exists()) {
+			packageFolder.mkdirs();
+		}
+		packageBundleFile = new File(packageFolder, packageName);
+
+		try {
+			FileOutputStream fos = new FileOutputStream(packageBundleFile);
+			BufferedOutputStream bos = new BufferedOutputStream(fos);
+
+			createPackage(makePluginService, info, bos);
+
+			bos.flush();
+			bos.close();
+			fos.close();
+			
+			writeMD5FileForBinaryFile(packageBundleFile);
+		} catch (FileNotFoundException e) {
+			throw new MojoExecutionException("Error creating the "
+					+ getPackageTypeName() + " file: " + packageBundleFile, e);
+		} catch (MakePluginPackageServiceException e) {
+			throw new MojoExecutionException(
+					"Error creating the package file: " + packageName
+							+ ", for the plugin: " + artifactId, e);
+		} catch (IOException e) {
+			throw new MojoExecutionException("I/O error writing the "
+					+ getPackageTypeName() + " file: " + packageBundleFile, e);
+		}
+
+		log.info(getPackageTypeName() + " file created successfully as: "
+				+ packageName);
+	}
+
+    private void writeMD5FileForBinaryFile(File the_file) throws IOException {
+        
+        String md5_str = "";
+        try {
+            md5_str = MD5BinaryFileUtils.getMD5Checksum(the_file);
+        } catch (Exception ex) {
+            throw new IOException(
+                "Unable to compute MD5 checksum for file: "
+                + the_file.getAbsolutePath() + " (" + ex.getMessage() + ")");
+        }
+        
+        String separator = " *";
+        // for ascii file: separator = "  ";
+        
+        md5_str = md5_str + separator + the_file.getName();
+        
+        File md5_file = new File(the_file.getAbsolutePath() + ".md5");
+        if (md5_file.exists()) {
+            md5_file.delete();
+        }
+
+        FileOutputStream fos = new FileOutputStream(md5_file);
+        BufferedOutputStream bos = new BufferedOutputStream(fos);
+        
+        bos.write(md5_str.getBytes());
+
+        bos.flush();
+        bos.close();
+        fos.close();
+    }
+
+    /**
+	 * Returns the name of the package file to create.
+	 * 
+	 * @param info
+	 *            package information
+	 * @return the name of the file to create
+	 */
+	protected abstract String getPackageFileName(PackageInfo info);
+
+	/**
+	 * Returns the name of the package type to create.
+	 * 
+	 * @return the name of the package type to create
+	 */
+	protected abstract String getPackageTypeName();
+
+	/**
+	 * Creates the package file into the given {@link OutputStream}.
+	 * 
+	 * @param makePluginService
+	 *            to use to create the package
+	 * @param info
+	 *            the information of the package to create
+	 * @param os
+	 *            where to create the package file
+	 * @throws MakePluginPackageServiceException
+	 *             if there is an error creating the package file
+	 */
+	protected abstract void createPackage(
+			MakePluginPackageService makePluginService, PackageInfo info,
+			OutputStream os) throws MakePluginPackageServiceException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/AbstractGeneratePackageMojo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageIndexMojo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageIndexMojo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageIndexMojo.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.maven;
+
+import java.io.File;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+
+/**
+ * Maven mojo to launch the gvSIG installer to generate a package index of a
+ * gvSIG plugin.
+ * <p>
+ * Look at the <a href="http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/anexos/proyectos-oficiales-en-gvsig/nombrado-de-binarios-para-un-plugin-de-gvsig"
+ * >gvSIG plugin naming standard</a> for information about installers naming and
+ * versioning.
+ * </p>
+ * 
+ * @see InstallerManager
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ * @goal create-package-index
+ */
+public class GeneratePluginPackageIndexMojo extends AbstractGeneratePackageMojo {
+
+	/**
+	 * Remote plugin package base download URL. The base path URL where the
+	 * installation package will be located.
+	 * 
+	 * @required
+	 * @parameter
+	 */
+	private String baseDownloadURL;
+
+	@Override
+	protected void createPackage(MakePluginPackageService makePluginService,
+			PackageInfo info, OutputStream os)
+			throws MakePluginPackageServiceException {
+
+		File pluginFolder = makePluginService.getPluginFolder(info);
+
+		PackageInfo infoIndex;
+		try {
+			infoIndex = (PackageInfo) info.clone();
+		} catch (CloneNotSupportedException e) {
+			throw new MakePluginPackageServiceException(
+					"Error cloning the package info: " + info, e);
+		}
+        
+	    InstallerManager manager = InstallerLocator.getInstallerManager();
+		String fullDownloadURL = baseDownloadURL
+				+ "/"
+				+ manager.getPackageFileName(info);
+    	infoIndex.setDownloadURL(fullDownloadURL);
+
+		makePluginService.writePackageInfoForIndex(infoIndex, pluginFolder);
+		makePluginService.createPackageIndex(info, os);
+	}
+
+	@Override
+	protected String getPackageTypeName() {
+		return "PackageIndex";
+	}
+
+	@Override
+	protected String getPackageFileName(PackageInfo info) {
+		return InstallerLocator.getInstallerManager().getPackageIndexFileName(
+				info);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageIndexMojo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageSetMojo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageSetMojo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageSetMojo.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.maven;
+
+import java.io.OutputStream;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+
+/**
+ * Maven mojo to launch the gvSIG installer to generate a installation bundle of
+ * a gvSIG plugin.
+ * <p>
+ * Look at the <a href="http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/anexos/proyectos-oficiales-en-gvsig/nombrado-de-binarios-para-un-plugin-de-gvsig"
+ * >gvSIG plugin naming standard</a> for information about installers naming and
+ * versioning.
+ * </p>
+ * 
+ * @see InstallerManager
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ * @goal create-package-set
+ */
+public class GeneratePluginPackageSetMojo extends AbstractGeneratePackageMojo {
+
+	@Override
+	protected void createPackage(MakePluginPackageService makePluginService,
+			PackageInfo info, OutputStream os)
+			throws MakePluginPackageServiceException {
+		makePluginService.createPackageSet(info, os);
+	}
+
+	@Override
+	protected String getPackageTypeName() {
+		return "Package Set";
+	}
+
+	@Override
+	protected String getPackageFileName(PackageInfo info) {
+		return InstallerLocator.getInstallerManager().getPackageSetFileName(
+				info);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageSetMojo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePackageInfoMojo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePackageInfoMojo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePackageInfoMojo.java	(revision 42196)
@@ -0,0 +1,311 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.maven;
+
+import java.io.File;
+import java.net.URL;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * Maven mojo to launch the gvSIG installer to generate a file with the package
+ * info.
+ * <p>
+ * Look at the <a href="http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/anexos/proyectos-oficiales-en-gvsig/nombrado-de-binarios-para-un-plugin-de-gvsig"
+ * >gvSIG plugin naming standard</a> for information about installers naming and
+ * versioning.
+ * </p>
+ * 
+ * @see InstallerManager
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ * @goal write-info
+ */
+public class GeneratePackageInfoMojo extends AbstractMojo {
+
+	/**
+	 * Location of the gvSIG plugins folder.
+	 * 
+	 * @parameter
+	 * @required
+	 */
+	private File pluginsFolder;
+
+	/**
+	 * Plugin project artifactId or code, used as gvSIG plugin name.
+	 * 
+	 * @parameter expression="${project.artifactId}"
+	 * @required
+	 */
+	private String artifactId;
+
+	/**
+	 * Plugin project packaging, to check it is of jar type.
+	 * 
+	 * @parameter expression="${project.packaging}"
+	 * @required
+	 */
+	private String packaging;
+
+	/**
+	 * Plugin project name.
+	 * 
+	 * @parameter expression="${project.name}"
+	 * @required
+	 */
+	private String name;
+
+	/**
+	 * Plugin project description.
+	 * 
+	 * @parameter expression="${project.description}"
+	 * @required
+	 */
+	private String description;
+
+	/**
+	 * Plugin project version.
+	 * 
+	 * @parameter expression="${project.version}"
+	 * @required
+	 */
+	private String version;
+
+	/**
+	 * Plugin build number.
+	 * 
+	 * @parameter
+	 */
+	private int buildNumber = -1;
+
+	/**
+	 * Plugin state. One of: devel, pilot, prototype, alpha[num], beta[num],
+	 * RC[num], final.
+	 * 
+	 * Defaults to "devel".
+	 * 
+	 * @parameter
+	 */
+	private String state;
+
+	/**
+	 * If the plugin is a gvSIG official one.
+	 * 
+	 * @parameter
+	 * @required
+	 */
+	private boolean official;
+
+	/**
+	 * The supported operating system. Examples: lin (linux), win (windows),
+	 * osx_10_4, osx_10_5, osx_10_6.
+	 * 
+	 * Defaults to all.
+	 * 
+	 * @parameter
+	 */
+	private String operatingSystem;
+
+	/**
+	 * The supported architecture. Examples: x86 (32 bits), x86_64 (64 bits).
+	 * 
+	 * Defaults to all.
+	 * 
+	 * @parameter
+	 */
+	private String architecture;
+
+	/**
+	 * Minimum Java VM version supported. Example: j1_5, j1_6.
+	 * 
+	 * Defaults to j1_5.
+	 * 
+	 * @parameter
+	 */
+	private String javaVM;
+
+	/**
+	 * The minimum gvSIG version supported.
+	 * 
+	 * @parameter
+	 * @required
+	 */
+	private String gvSIGVersion;
+
+	/**
+	 * Installabe type. Only <strong>plugin</strong> is supported.
+	 * 
+	 * @parameter default="${plugin}"
+	 */
+	private String installableType = "plugin";
+
+	/**
+	 * If the mojo execution is disabled. Useful for projects that inherit the
+	 * maven plugin configuration but don't generate installer.
+	 * 
+	 * @parameter
+	 */
+	private boolean disabled = false;
+
+	/**
+	 * Plugin project folder where to store the package info.
+	 * 
+	 * @parameter expression="${basedir}"
+	 * @required
+	 */
+	private File packageInfoFolder;
+
+	/**
+	 * Dependencies with other packages
+	 * 
+	 * @parameter
+	 */
+	private String pkgdependencies;
+
+	/**
+	 * Owner of the package.
+	 * 
+	 * @parameter
+	 */
+	private String owner;
+
+	/**
+	 * URL of the plugin sources.
+	 * 
+	 * @parameter
+	 */
+	private URL sourcesURL;
+
+	/**
+	 * URL of the project's web.
+	 * 
+	 * @parameter
+	 */
+	private URL webURL;
+
+	/**
+	 * addon categories.
+	 * 
+	 * @parameter
+	 */
+	private String categories;
+
+	public void execute() throws MojoExecutionException, MojoFailureException {
+		Log log = getLog();
+
+		if (disabled) {
+			log.info("Package info generation disabled.");
+			return;
+		}
+		if( buildNumber == -1 ) {
+			log.info("Skip package info generation, undefined buildNumber property.");
+			return;
+		}
+
+		if (!"jar".equals(packaging)) {
+			log
+					.info("Running on a project with packaging of type "
+							+ packaging
+							+ ". Do nothing, as we only create installers for projects "
+							+ "with jar packaging");
+			return;
+		}
+		packageInfoFolder = new File(packageInfoFolder, "target") ;
+		
+		log.info("Generating the package info for the plugin: " + artifactId
+				+ " with the following information:");
+		log.info("\tPlugin name: " + name);
+		log.info("\tPlugin description: " + description);
+		log.info("\tPlugin version: " + version);
+		log.info("\tPlugin build number: " + buildNumber);
+		log.info("\tPlugin state: " + state);
+		log.info("\tPlugin official: " + official);
+		log.info("\tPlugin operatingSystem: " + operatingSystem);
+		log.info("\tPlugin architecture: " + architecture);
+		log.info("\tPlugin javaVM: " + javaVM);
+		log.info("\tPlugin gvSIGVersion: " + gvSIGVersion);
+		log.info("\tgvSIG Plugin's folder: " + pluginsFolder);
+		log.info("\tPackage info folder: " + packageInfoFolder);
+		log.info("\tDependencies: " + pkgdependencies);
+		log.info("\tOwner: " + owner);
+		log.info("\tSources URL: " + sourcesURL);
+		log.info("\tWeb URL: " + webURL);
+		log.info("\tCategories: " + categories);
+
+		try {
+			new DefaultLibrariesInitializer().fullInitialize();
+
+			InstallerManager manager = InstallerLocator.getInstallerManager();
+			
+			manager.setDefaultLocalAddonRepository(pluginsFolder);
+			MakePluginPackageService makePluginService = manager.getMakePluginPackageService();
+
+			// Get and fill the package info data
+			PackageInfo info = makePluginService.getPluginPackageInfo(artifactId);
+
+			// info.setCode(artifactId);
+			info.setDescription(description);
+			info.setName(name);
+			info.setOfficial(official);
+			info.setState(state);
+			info.setType(installableType);
+			info.setVersion(version);
+			info.setBuild(buildNumber);
+			info.setOperatingSystem(operatingSystem);
+			info.setArchitecture(architecture);
+			info.setJavaVM(javaVM);
+			info.setGvSIGVersion(gvSIGVersion);
+			info.setDependencies(pkgdependencies);
+			info.setOwner(owner);
+			info.setSourcesURL(sourcesURL);
+			info.setWebURL(webURL);
+			info.addCategoriesAsString(categories);
+
+			makePluginService.writePackageInfo(info, packageInfoFolder);
+
+		} catch (LocatorException e) {
+			throw new MojoExecutionException(
+					"Error getting a reference to the InstallerManager", e);
+		} catch (MakePluginPackageServiceException e) {
+			throw new MojoExecutionException(
+					"Error getting a MakePluginPackageService for the "
+							+ " plugin folder: " + pluginsFolder, e);
+		}
+
+		log.info("Package info file created successfully");
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePackageInfoMojo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageMojo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageMojo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageMojo.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.maven;
+
+import java.io.OutputStream;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+
+/**
+ * Maven mojo to launch the gvSIG installer to generate a package of a gvSIG
+ * plugin.
+ * <p>
+ * Look at the <a href="http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/anexos/proyectos-oficiales-en-gvsig/nombrado-de-binarios-para-un-plugin-de-gvsig"
+ * >gvSIG plugin naming standard</a> for information about installers naming and
+ * versioning.
+ * </p>
+ * 
+ * @see InstallerManager
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ * @goal create-package
+ */
+public class GeneratePluginPackageMojo extends AbstractGeneratePackageMojo {
+
+	@Override
+	protected void createPackage(MakePluginPackageService makePluginService,
+			PackageInfo info, OutputStream os)
+			throws MakePluginPackageServiceException {
+		makePluginService.createPackage(info, os);
+	}
+
+	@Override
+	protected String getPackageTypeName() {
+		return "Package";
+	}
+
+	@Override
+	protected String getPackageFileName(PackageInfo info) {
+		return InstallerLocator.getInstallerManager().getPackageFileName(info);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/src/main/java/org/gvsig/installer/maven/GeneratePluginPackageMojo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/pom.xml	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.installer.maven</artifactId>
+    <packaging>maven-plugin</packaging>
+    <name>org.gvsig.installer.maven</name>
+    <parent>
+        <artifactId>org.gvsig.installer</artifactId>
+        <groupId>org.gvsig</groupId>
+        <version>2.0.51-SNAPSHOT</version>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-plugin-plugin</artifactId>
+                <version>2.7</version>
+                <executions>
+                    <execution>
+                        <id>generated-helpmojo</id>
+                        <goals>
+                            <goal>helpmojo</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <goalPrefix>org.gvsig.installer.maven</goalPrefix>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.lib.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.lib.impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.prov.plugin</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+            <version>2.0</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.maven
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.installer.prov.plugin.PluginInstallerProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/PluginInstallerProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/PluginInstallerProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/PluginInstallerProviderLibrary.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.prov.plugin;
+
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.installer.prov.plugin.execution.PluginInstallerExecutionProviderFactory;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PluginInstallerProviderLibrary extends AbstractLibrary {
+
+	@Override
+	public void doRegistration() {
+		registerAsServiceOf(InstallerLibrary.class);
+	}
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		ProviderManager providerManager = InstallerProviderLocator
+				.getProviderManager();
+		providerManager
+				.addProviderFactory(new PluginInstallerExecutionProviderFactory());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/PluginInstallerProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProvider.java	(revision 42196)
@@ -0,0 +1,223 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+package org.gvsig.installer.prov.plugin.execution;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.installer.lib.spi.InstallerProviderManager;
+import org.gvsig.installer.lib.spi.execution.InstallPackageProvider;
+import org.gvsig.tools.service.spi.AbstractProvider;
+import org.gvsig.tools.service.spi.ProviderServices;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sardak.antform.AntForm;
+import com.sardak.antform.AntMenu;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PluginInstallerExecutionProvider extends AbstractProvider
+        implements InstallPackageProvider {
+
+    private static Logger logger = LoggerFactory.getLogger(PluginInstallerExecutionProvider.class);
+    private static final String ANT_FILE_NAME = "install.xml";
+
+    public PluginInstallerExecutionProvider(ProviderServices providerServices) {
+        super(providerServices);
+    }
+
+    public class InstallerPluginsDirectoryNotFoundException extends
+            InstallPackageServiceException {
+
+        private static final long serialVersionUID = 4416143986837955880L;
+
+        private static final String message = "Plugins directory not found";
+
+        private static final String KEY = "plugins_directory_not_found";
+
+        public InstallerPluginsDirectoryNotFoundException() {
+            super(message, KEY, serialVersionUID);
+        }
+
+    }
+
+    public void install(File applicationDirectory, InputStream inputStream,
+            PackageInfo packageInfo) throws InstallPackageServiceException {
+
+        InstallerProviderManager installerProviderManager = InstallerProviderLocator.getProviderManager();
+        InstallerManager installerManager = InstallerLocator.getInstallerManager();
+        
+        File pluginsDirectory = installerManager.getDefaultLocalAddonRepository(
+                "plugin", 
+                InstallerManager.ACCESS_WRITE
+        );
+
+        logger.info("Installing package '" + packageInfo.getCode() + "' in '" + pluginsDirectory + "'.");
+        try {
+            if ( !pluginsDirectory.exists() ) {
+                logger.warn("Can install package '" + packageInfo.getCode() + "', install folder '" + pluginsDirectory + "' does not exists");
+                throw new InstallerPluginsDirectoryNotFoundException();
+            }
+
+            InstallPackageProviderServices installerProviderServices = installerProviderManager
+                    .createInstallerProviderServices();
+
+            installerProviderServices.decompress(inputStream, pluginsDirectory);
+            File antFile = new File(pluginsDirectory + File.separator
+                    + packageInfo.getCode() + File.separator + "install"
+                    + File.separator + ANT_FILE_NAME);
+
+            if ( antFile.exists() ) {
+                executeAntFile(applicationDirectory, pluginsDirectory, antFile);
+            }
+
+        } catch (Exception e) {
+            try {
+                logger.warn("Can install package '" + packageInfo.getCode() + "'.", e);
+                // if there is an exception, installLater is called
+                installLater(applicationDirectory, inputStream, packageInfo);
+            } catch (IOException e1) {
+                logger.warn("Can install package '" + packageInfo.getCode() + "'.", e1);
+                throw new InstallPackageServiceException(e1);
+            }
+        }
+    }
+
+    /**
+     * This function will is called when an exception is produced during the
+     * installation of a plugin. It will prepare the package to be installed on
+     * the next gvSIG restart.
+     */
+    public void installLater(File applicationDirectory,
+            InputStream inputStream, PackageInfo packageInfo)
+            throws InstallPackageServiceException, IOException {
+
+        InstallerProviderManager installerProviderManager = InstallerProviderLocator.getProviderManager();
+        File decompressDir = null;
+        
+        logger.info("Delayed the package installation (" + packageInfo.getCode() + ").");
+
+        File updateDirectory = new File(applicationDirectory + File.separator
+                + "update");
+
+        if ( !updateDirectory.exists() ) {
+            forceMkdir(updateDirectory);
+        }
+
+        File filesDirectory = new File(updateDirectory + File.separator
+                + "files");
+        if ( !filesDirectory.exists() ) {
+            forceMkdir(filesDirectory);
+        }
+
+        File scriptsFile = new File(updateDirectory + File.separator
+                + "scripts.lst");
+
+        decompressDir = new File(filesDirectory.toString() + File.separator
+                + packageInfo.getCode());
+        if ( decompressDir.exists() ) {
+            deleteDir(decompressDir);
+        }
+
+        InstallPackageProviderServices installerProviderServices = installerProviderManager
+                .createInstallerProviderServices();
+        installerProviderServices.decompress(inputStream, filesDirectory);
+
+        File antFile = new File(decompressDir + File.separator + "install"
+                + File.separator + ANT_FILE_NAME);
+
+        if ( antFile.exists() ) {
+            if ( !scriptsFile.exists() ) {
+                forceMkdir(scriptsFile);
+                scriptsFile.createNewFile();
+            }
+            FileWriter writer = new FileWriter(scriptsFile, true);
+            BufferedWriter out = new BufferedWriter(writer);
+            String str = antFile.toString();
+            out.append(str + "\n");
+            out.close();
+        }
+
+    }
+
+    private void forceMkdir(File file) throws IOException {
+        if ( file.isDirectory() ) {
+            org.apache.commons.io.FileUtils.forceMkdir(file);
+        } else {
+            org.apache.commons.io.FileUtils.forceMkdir(file.getParentFile());
+        }
+    }
+
+    private void executeAntFile(File applicationDirectory, File pluginsDirectory, File file) {
+        logger.info("Running install script '" + file.getAbsolutePath() + "'.");
+        try {
+            Project p = new Project();
+            p.setUserProperty("ant.file", file.getAbsolutePath());
+            p.setUserProperty("gvsig_dir", applicationDirectory.getAbsolutePath());
+            p.setUserProperty("extensions_dir", pluginsDirectory.getAbsolutePath());
+            p.setBaseDir(file.getParentFile());
+            p.addTaskDefinition("antform", AntForm.class);
+            p.addTaskDefinition("antmenu", AntMenu.class);
+            p.init();
+            ProjectHelper helper = ProjectHelper.getProjectHelper();
+            p.addReference("ant.projectHelper", helper);
+            helper.parse(p, file);
+            p.executeTarget(p.getDefaultTarget());
+        } catch (Exception ex) {
+            logger.warn("Problems executing installation script.", ex);
+        }
+    }
+
+    private boolean deleteDir(File dir) {
+        if ( dir.isDirectory() ) {
+            String[] children = dir.list();
+            for ( int i = 0; i < children.length; i++ ) {
+                boolean success = deleteDir(new File(dir, children[i]));
+                if ( !success ) {
+                    return false;
+                }
+            }
+        }
+        // The directory is now empty so delete it
+        return dir.delete();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProviderFactory.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.prov.plugin.execution;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.service.spi.AbstractProviderFactory;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PluginInstallerExecutionProviderFactory extends
+		AbstractProviderFactory {
+
+	public static final String PROVIDER_NAME = "plugin";
+	public static final String PROVIDER_DESCRIPTION = "";
+
+	private DynClass dynclass;
+
+	@Override
+	protected DynClass createParametersDynClass() {
+		if (dynclass == null) {
+			initialize();
+		}
+		return dynclass;
+	}
+
+	@Override
+	protected Provider doCreate(DynObject parameters, ProviderServices services) {
+		return new PluginInstallerExecutionProvider(services);
+	}
+
+	public void initialize() {
+		if (dynclass == null) {
+			DynObjectManager dynObjectManager = ToolsLocator
+					.getDynObjectManager();
+			dynclass = dynObjectManager.createDynClass(PROVIDER_NAME,
+					PROVIDER_DESCRIPTION);
+			dynObjectManager.add(dynclass);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/src/main/java/org/gvsig/installer/prov/plugin/execution/PluginInstallerExecutionProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/pom.xml	(revision 42196)
@@ -0,0 +1,48 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.prov.plugin</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer.prov</artifactId>
+    <version>2.0.97</version>
+  </parent>  
+  <dependencies>
+      <dependency>
+        <groupId>commons-io</groupId>
+        <artifactId>commons-io</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ant</groupId>
+      <artifactId>ant</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>com.sardak</groupId>
+        <artifactId>antform</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>ant-contrib</groupId>
+        <artifactId>ant-contrib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/org.gvsig.installer.prov.plugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/pom.xml	(revision 42196)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.prov</artifactId>
+  <packaging>pom</packaging>
+  <name>org.gvsig.installer.prov</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <modules>
+    <module>org.gvsig.installer.prov.plugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.prov
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.swing</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  <modules>
+    <module>org.gvsig.installer.swing.api</module>
+    <module>org.gvsig.installer.swing.impl</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/pom.xml	(revision 42196)
@@ -0,0 +1,23 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.swing.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer.swing</artifactId>
+    <version>2.0.97</version>
+  </parent> 
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.installer.swing.api.SwingInstallerLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowUnresolvedDependenciesAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowUnresolvedDependenciesAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowUnresolvedDependenciesAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api.execution;
+
+
+public abstract class JShowUnresolvedDependenciesAndAskContinuePanel extends JShowDependenciesAndAskContinuePanel {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6257913354743524479L;
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowUnresolvedDependenciesAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackagesAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackagesAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackagesAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api.execution;
+
+import javax.swing.JPanel;
+
+public abstract class JShowPackagesAndAskContinuePanel extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6598121113755711664L;
+
+	public abstract boolean cancelled();
+
+	public abstract boolean needShow();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackagesAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackageStatusAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackageStatusAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackageStatusAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api.execution;
+
+
+public abstract class JShowPackageStatusAndAskContinuePanel extends JShowPackagesAndAskContinuePanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6598121113755711664L;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowPackageStatusAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowRequiredPackagesAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowRequiredPackagesAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowRequiredPackagesAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api.execution;
+
+import javax.swing.JPanel;
+
+public abstract class JShowRequiredPackagesAndAskContinuePanel extends JShowPackagesAndAskContinuePanel {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6257913354743524479L;
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowRequiredPackagesAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/InstallPackageWizardException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/InstallPackageWizardException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/InstallPackageWizardException.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.installer.swing.api.execution;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Base exception for all the exceptions that are thrown by the process of
+ * execution of an installer using the wizard.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageWizardException extends BaseException {
+
+	private static final long serialVersionUID = -5480466569496849255L;
+	private static final String KEY = "installer_execution_exception";
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public InstallPackageWizardException(String message, Throwable cause) {
+		super(message, cause, KEY, serialVersionUID);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/InstallPackageWizardException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/AbstractInstallPackageWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/AbstractInstallPackageWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/AbstractInstallPackageWizard.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api.execution;
+
+import java.io.File;
+import java.util.List;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.swing.api.wizard.AbstractInstallerWizard;
+
+/**
+ * <p>
+ * Wizard that is used to open a bundle file to install one or more packages in
+ * a valid gvSIG directory. This class receive a directory where gvSIG is
+ * installed and it allows to select from the user interface the packages to
+ * install.
+ * </p>
+ * <p>
+ * All the classes that inherit if this abstract class have to have a
+ * constructor with an argument of type {@link File}, that is the application
+ * directory.
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public abstract class AbstractInstallPackageWizard extends
+		AbstractInstallerWizard {
+
+	private static final long serialVersionUID = -758246118332926598L;
+
+	/**
+	 * Constructor
+	 * 
+	 * @see AbstractInstallerWizard#AbstractInstallerWizard(File, File)
+	 */
+	public AbstractInstallPackageWizard(File applicationFolder,
+			File installFolder) {
+		super(applicationFolder, installFolder);
+	}
+
+	/**
+	 * If this method is selected the first window of the wizard is not visible
+	 * and the installation process takes the installers form the default
+	 * directory.
+	 * 
+	 * @throws InstallPackageServiceException
+	 *             if there an error reading the default directory.
+	 */
+	public abstract void installFromDefaultDirectory()
+			throws InstallPackageServiceException;
+
+	/**
+	 * @return the installerExecutionService
+	 */
+	public abstract InstallPackageService getInstallerExecutionService();
+
+	/**
+	 * @return the installersToInstall
+	 */
+	public abstract List<PackageInfo> getInstallersToInstall();
+
+	public abstract void setNextButtonEnabled(boolean isEnabled);
+
+	public abstract void setFinishButtonVisible(boolean isVisible);
+
+	public abstract void setCancelButtonEnabled(boolean isEnabled);
+
+	public abstract void setBackButtonEnabled(boolean isEnabled);
+
+	/**
+	 * It will ask the user to select the installation mode to Typical or
+	 * Advanced.
+	 * 
+	 * @param askIt
+	 *            True or False if the option will be shown to the user or not.
+	 */
+	public abstract void setAskTypicalOrCustom(boolean askIt);
+
+	/**
+	 * To know if the question is set to be shown or not.
+	 * 
+	 * @return True if the question is set to be shown or false if not.
+	 */
+	public abstract boolean getAskTypicalOrCustom();
+
+	public abstract void setSelectDefaultPackages(boolean isActivated);
+
+	public abstract boolean getSelectDefaultPackages();
+	
+	   
+	public boolean needsToRestartApplicationAfterFinish() {
+	    // installers need to restart
+	    return true;
+	}
+
+        public abstract void setSkipBundleSelection(boolean skipBundleSelection);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/AbstractInstallPackageWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowDependenciesAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowDependenciesAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowDependenciesAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api.execution;
+
+import javax.swing.JPanel;
+
+public abstract class JShowDependenciesAndAskContinuePanel extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6598121113755711664L;
+
+	public abstract boolean cancelled();
+
+	public abstract boolean needShow();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/execution/JShowDependenciesAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizardException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizardException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizardException.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.installer.swing.api.creation;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Base exception for all the exceptions that are thrown by the process of
+ * creation of an installer using the wizard.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePluginPackageWizardException extends BaseException {
+
+	private static final long serialVersionUID = -2058883261679288759L;
+	private static final String KEY = "installer_creation_exception";
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public MakePluginPackageWizardException(String message, Throwable cause) {
+		super(message, cause, KEY, serialVersionUID);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizardException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizard.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api.creation;
+
+import java.io.File;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.wizard.AbstractInstallerWizard;
+
+/**
+ * <p>
+ * Wizard that is used to create a bundle with a package of type plugin from a
+ * gvSIG directory. This class receive a gvSIG root directory and allows to the
+ * user to select the plugin that is used to create the bundle.
+ * </p>
+ * <p>
+ * The user can also set some plugin properties, like the version of the
+ * installer, the build number... The definition of all these properties can be
+ * found in {@link PackageInfo}.
+ * </p>
+ * <p>
+ * All the classes that inherit if this abstract class have to have a
+ * constructor with an argument of type {@link File}, that is the application
+ * directory.
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public abstract class MakePluginPackageWizard extends AbstractInstallerWizard {
+
+	private static final long serialVersionUID = 6387360455696226183L;
+
+	/**
+	 * Constructor
+	 * 
+	 * @see AbstractInstallerWizard#AbstractInstallerWizard(File, File)
+	 */
+	public MakePluginPackageWizard(File applicationFolder, File installFolder) {
+		super(applicationFolder, installFolder);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/MakePluginPackageWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JOutputPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JOutputPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JOutputPanel.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api.creation;
+
+import java.io.File;
+import java.net.URL;
+
+import javax.swing.JPanel;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class JOutputPanel extends JPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 3787670185392301184L;
+
+	public abstract File getPackageFile();
+
+	public abstract boolean isCreatePackageIndex();
+
+	public abstract void setCreatePackageIndex(boolean create);
+
+	public abstract File getPackageIndexFile();
+
+	public abstract URL getDownloadURL();
+
+	public abstract void setDownloadURL(URL downloadURL);
+
+	public abstract void setPackageIndexFile(File packageIndexFile);
+
+	public abstract void setPackageFile(File packageFile);
+	
+	public abstract void setPackageInfo(PackageInfo packageInfo);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JOutputPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JPackageInfoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JPackageInfoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JPackageInfoPanel.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api.creation;
+
+import javax.swing.JPanel;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class JPackageInfoPanel extends JPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = -3731407272889942912L;
+
+	public abstract boolean validatePanel();
+
+	public abstract void panelToPackageInfo(PackageInfo packageInfo);
+
+	public abstract void packageInfoToPanel(PackageInfo packageInfo);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/creation/JPackageInfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLocator.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api;
+
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This Locator provides the entry point for the gvSIG
+ * {@link SwingInstallerManager}
+ * 
+ * @see Locator
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SwingInstallerLocator extends AbstractLocator {
+
+	private static final String LOCATOR_NAME = "SwingInstallerLocator";
+	/**
+	 * SwingInstallerManager name used by the locator to access the instance
+	 */
+	public static final String SWING_INSTALLER_MANAGER_NAME = "SwingInstallerManager";
+	private static final String SWING_INSTALLER_MANAGER_DESCRIPTION = "SwingInstallerManager of gvSIG";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final SwingInstallerLocator instance = new SwingInstallerLocator();
+
+	/**
+	 * @see Locator#getLocatorName()
+	 */
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+
+	/**
+	 * Return a reference to {@link SwingInstallerManager}.
+	 * 
+	 * @return a reference to SwingInstallerManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static SwingInstallerManager getSwingInstallerManager()
+			throws LocatorException {
+		return (SwingInstallerManager) getInstance().get(
+				SWING_INSTALLER_MANAGER_NAME);
+	}
+
+	/**
+	 * Return the singleton instance.
+	 * 
+	 * @return the singleton instance
+	 */
+	public static SwingInstallerLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Registers the Class implementing the {@link SwingInstallerManager}
+	 * interface.
+	 * 
+	 * @param clazz
+	 *            implementing the SwingInstallerManager interface
+	 */
+	public static void registerSwingInstallerManager(
+			Class<? extends SwingInstallerManager> clazz) {
+		getInstance().register(SWING_INSTALLER_MANAGER_NAME,
+				SWING_INSTALLER_MANAGER_DESCRIPTION, clazz);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLibrary.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api;
+
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for the swing installer.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SwingInstallerLibrary extends AbstractLibrary {
+
+	@Override
+	public void doRegistration() {
+		registerAsAPI(SwingInstallerLibrary.class);
+		require(InstallerLibrary.class);
+	}
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		// TODO Auto-generated method stub
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/JProgressPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/JProgressPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/JProgressPanel.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.api;
+
+import javax.swing.JPanel;
+
+import org.gvsig.tools.task.TaskStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class JProgressPanel extends JPanel {
+
+	public abstract void bind(TaskStatus taskStatus);
+
+	public abstract void showErrorMessage(String msg, Throwable ex);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/JProgressPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerManager.java	(revision 42196)
@@ -0,0 +1,216 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import javax.swing.JPanel;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.creation.JOutputPanel;
+import org.gvsig.installer.swing.api.creation.JPackageInfoPanel;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizard;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizardException;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.api.execution.InstallPackageWizardException;
+import org.gvsig.installer.swing.api.execution.JShowPackageStatusAndAskContinuePanel;
+import org.gvsig.installer.swing.api.execution.JShowPackagesAndAskContinuePanel;
+
+/**
+ * 
+ * <p>
+ * This manager is used to register and create the wizards that are used to
+ * create and execute an installer. These wizards are classes that inherit of
+ * {@link JPanel}.
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface SwingInstallerManager {
+
+
+	public interface UrlAndLabel {
+		/**
+		 * Return the url.
+		 * 
+		 * @return the url
+		 */
+		public URL getURL();
+		
+		/**
+		 * Return the url associated to the url or null
+		 * if the url don't have a label.
+		 *  
+		 * @return the label or null
+		 */
+		public String getLabel();
+		
+		/**
+		 * Return a string with the label and the url like:
+		 *   "label - http://..."
+		 *   
+		 * @return the label and url
+		 */
+		public String toString(); // Return "label - url"
+	}
+	
+	/**
+	 * Registers a class that implements a wizard to create an installer of a
+	 * plugin from a gvSIG installation directory.
+	 * 
+	 * @param clazz
+	 *            Class that inherits of the {@link MakePluginPackageWizard}
+	 *            abstract class.
+	 */
+	public void registerMakePluginPackageWizardInstallerCreationWizard(
+			Class<? extends MakePluginPackageWizard> clazz);
+
+	/**
+	 * This method returns a class that is used to create an installer from a
+	 * gvSIG installation directory.
+	 * 
+	 * @return The wizard to create an installer.
+	 * @throws MakePluginPackageWizardException
+	 *             If there is a problem creating the wizard.
+	 */
+	public MakePluginPackageWizard createMakePluginPackageWizard(
+			File applicationDirectory, File installFolder)
+			throws MakePluginPackageWizardException;
+
+	/**
+	 * Registers a class that implements a wizard to execte an installer to
+	 * install a set of plugins in a gvSIG installation directory.
+	 * 
+	 * @param clazz
+	 *            Class that inherits of the
+	 *            {@link AbstractInstallPackageWizard} abstract class.
+	 */
+	public void registerInstallPackageWizard(
+			Class<? extends AbstractInstallPackageWizard> clazz);
+
+	/**
+	 * This method returns a class that is used to execute an installer to
+	 * install a set of plugins in a gvSIG installation directory.
+	 * 
+	 * @return The wizard to execute an installer.
+	 * @throws InstallPackageWizardException
+	 *             If there is a problem creating the wizard.
+	 */
+	public AbstractInstallPackageWizard createInstallPackageWizard(
+			File applicationDirectory, File installFolder)
+			throws InstallPackageWizardException;
+
+	/**
+	 * Returns the current application version.
+	 * 
+	 * @return the current application version
+	 */
+	public String getApplicationVersion();
+
+	/**
+	 * Sets the current application version.
+	 * 
+	 * @param gvSIGVersion
+	 *            the current application version
+	 */
+	public void setApplicationVersion(String gvSIGVersion);
+
+	/**
+	 * Returns the default URL to download packages from.
+	 * 
+	 * @return the default URL to download packages from
+	 */
+	public URL getDefaultDownloadURL();
+
+	/**
+	 * Sets the default URL to download packages from
+	 * 
+	 * @param defaultDownloadURL
+	 *            the default URL to download packages from
+	 */
+	public void setDefaultDownloadURL(URL defaultDownloadURL);
+
+	/**
+	 * Translate a key in a text using the current application language
+	 * 
+	 * @param key
+	 *            The key to translate
+	 * @return The translated key
+	 */
+	public String getText(String key);
+
+	/**
+	 * Returns a reference to the {@link InstallerManager}.
+	 * 
+	 * @return a reference to the {@link InstallerManager}
+	 */
+	public InstallerManager getInstallerManager();
+
+	public JShowPackageStatusAndAskContinuePanel createJShowPackageStatusAndAskContinuePanel(
+			List<PackageInfo> packages, String message);
+
+	public JShowPackagesAndAskContinuePanel createJShowTroubledPackagesAndAskContinuePanel(
+			List<PackageInfo> packages, String message);
+	
+	public JPackageInfoPanel createPackageInfoPanel();
+
+	public JOutputPanel createOutputPanel();
+
+	public JProgressPanel createProgressPanel();
+
+	public void setDefaultDownloadURL(String defaultDownloadURLs);
+
+	public void setDefaultDownloadURL(File defaultDownloadURLs);
+
+	public void addDefaultDownloadURL(URL url);
+
+	public void addDefaultDownloadURL(URL url, String label);
+	
+	public void addDefaultDownloadURL(String url) throws MalformedURLException;
+
+	/**
+	 * Return the list of default URL used to retrieve the package.gvspki
+	 * 
+	 * @return list of defaults urls
+	 * @deprecated use getDefaultDownloadUrlAndLabels
+	 */
+	public List<URL> getDefaultDownloadURLs();
+	
+	/**
+	 * Return the list of default URL used to retrieve the package.gvspki
+	 * the list contains the URLs and their labels.
+	 *  
+	 * @return list of default urls and their labels
+	 */
+	public List<UrlAndLabel> getDefaultDownloadUrlAndLabels();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/SwingInstallerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardPanel.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api.wizard;
+
+import java.util.List;
+
+import org.gvsig.tools.task.CancellableTask;
+
+/**
+ * This interface must be implemented by all the wizards. It just have a methods
+ * to manage the events that the wizard throws.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface InstallerWizardPanel {
+
+	/**
+	 * @param wizardActionListener
+	 *            sets the listener for the action events.
+	 */
+	public void setWizardActionListener(
+			InstallerWizardActionListener wizardActionListener);
+
+	/**
+	 * @return the listener for the action events
+	 */
+	public InstallerWizardActionListener getWizardActionListener();
+
+	public List<CancellableTask> getCancellableTasks();
+
+	public void addCancellableTask(CancellableTask task);
+	
+	/**
+	 * Tells whether this install wizard needs to restart
+     * the app after install process has finished
+     * 
+	 * @return Whether this install wizard needs to restart
+	 * the app after install process has finished
+	 */
+	public boolean needsToRestartApplicationAfterFinish();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/AbstractInstallerWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/AbstractInstallerWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/AbstractInstallerWizard.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api.wizard;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JPanel;
+
+import org.gvsig.tools.task.CancellableTask;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public abstract class AbstractInstallerWizard extends JPanel implements
+		InstallerWizardPanel {
+
+	private static final long serialVersionUID = 5609799260650093733L;
+	protected InstallerWizardActionListener wizardActionListener = null;
+	private final File applicationFolder;
+	private final File installFolder;
+	private List<CancellableTask> cancelableTasks;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param applicationFolder
+	 *            the main root application folder
+	 * @param installFolder
+	 *            the default bundle files location folder
+	 */
+	public AbstractInstallerWizard(File applicationFolder, File installFolder) {
+		super();
+		this.applicationFolder = applicationFolder;
+		this.installFolder = installFolder;
+		this.cancelableTasks = new ArrayList<CancellableTask>();
+	}
+
+	public void addCancellableTask(CancellableTask task) {
+		this.cancelableTasks.add(task);
+	}
+
+	public List<CancellableTask> getCancellableTasks() {
+		return this.cancelableTasks;
+	}
+
+	public void setWizardActionListener(
+			InstallerWizardActionListener wizardActionListener) {
+		this.wizardActionListener = wizardActionListener;
+	}
+
+	public InstallerWizardActionListener getWizardActionListener() {
+		return wizardActionListener;
+	}
+
+	public File getApplicationFolder() {
+		return applicationFolder;
+	}
+
+	public File getInstallFolder() {
+		return installFolder;
+	}
+	
+	public boolean needsToRestartApplicationAfterFinish() {
+	    // false by default
+	    // to be overriden by subclasses
+	    return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/AbstractInstallerWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardActionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardActionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardActionListener.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.api.wizard;
+
+/**
+ * <p>
+ * Listener for the wizards used on the installation management. It controls the
+ * events thrown by the wizard.
+ * </p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface InstallerWizardActionListener {
+
+	public void finish(InstallerWizardPanel installerWizard);
+
+	public void cancel(InstallerWizardPanel installerWizard);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api/src/main/java/org/gvsig/installer/swing/api/wizard/InstallerWizardActionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.installer.swing.impl.DefaultSwingInstallerLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_lin_all.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_lin_all.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialRecommended.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialRecommended.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/installed.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/installed.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/broken.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/broken.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_win_x86_64.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_win_x86_64.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialRecommendedB.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialRecommendedB.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/makepluginpackageicon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/makepluginpackageicon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/temporal.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/temporal.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_unknow_unknow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_unknow_unknow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_win_all.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_win_all.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/installpackageicon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/installpackageicon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_lin_x86.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_lin_x86.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notOfficial.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notOfficial.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/toReinstall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/toReinstall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notInstalled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notInstalled.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notOfficialRecommended.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notOfficialRecommended.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialNotRecommended.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialNotRecommended.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notOfficialRecommendedB.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/notOfficialRecommendedB.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialNotRecommendedB.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/officialNotRecommendedB.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/temporal_roig.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/temporal_roig.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_lin_x86_64.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_lin_x86_64.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_win_x86.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_win_x86.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/toInstall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/toInstall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/installedNotInstallable.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/installedNotInstallable.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_fedora11_x86.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/images/platform_14x14_fedora11_x86.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text.properties	(revision 42196)
@@ -0,0 +1,122 @@
+# Resource bundle texts for the Spanish language locale (es)
+_select_the_folder_to_create_the_package_with=Selecciona el directorio con el que se crear� el paquete
+_output_options=Opciones de salida
+_the_package_file_folder_does_not_exist=La carpeta del paquete no existe
+_the_package_index_file_folder_does_not_exist=La carpeta del paquete de �ndices no existe
+_package_description=Descripci�n del paquete
+_installer_progress=Progreso del instalador
+_Compressing=Comprimiendo
+_Creating_index=Creando �ndice
+_Finished=Finalizado
+_cant_create_the_package=No se pudo crear el paquete
+_create_package=Creaci�n del paquete
+_select_symbol_folder=Selecciona carpeta de s�mbolos
+_Create_package_symbols=Crear paquete de simbolos
+_typical_installation=Instalaci�n t�pica
+_advanced_installation=Instalaci�n avanzada
+_fast_filter=Filtro r�pido
+_search=Buscar
+_reset_filters=Restaurar filtros
+_categories=Categor�as
+_types=Tipos
+_standard_installation=Instalaci�n est�ndar
+_installation_from_file=Instalaci�n desde archivo
+_installation_from_url=Instalaci�n desde URL
+_name=Nombre
+_version=Versi�n
+_type=Tipo
+_already_installed,_check_to_reinstall=Ya instalado, marca para reinstalar.
+_checked_to_reinstall=Marcado para reinstalar.
+_not_installed,_check_to_install=No instalado, marca para instalar.
+_checked_to_install=Marcado para instalar.
+_already_installed_but_not_installable=Ya instalado pero no instalable.
+_official_recommended=Official y recomendado
+_official=Oficial
+_not_official_recommended=No oficial, recomendado
+_not_official=No oficial
+_downloading=Descargando
+_start_download=Comenzar descarga
+_download_progress=Progreso de la descarga
+_Cant_download_package_files=No se han podido descargar los ficheros del paquete
+_do_you_want_to_continue=�Desea continuar?
+_Download_error=Error en la descarga
+_finished=Terminado
+_the_selected_file_does_not_exist=El archivo seleccionado no existe.
+_execute_adding_error=Error al a�adir
+_progress=Progreso
+_select_plugins=Selecciona paquetes
+_There_are_no_packages_in_typical_installation_to_select=No hay paquetes en la instalaci�n t�pica para seleccionar
+_do_you_want_to_continue=�Desea continuar?
+_do_you_want_to_continue_anyway=�Desea continuar de todas formas?
+_Some_of_the_selected_addons_should_not_be_installed_simultaneously=Algunos de los complementos seleccionados no deben ser instalados simultaneamente.
+_Installing_these_addons_may_cause_errors=La instalacion de estos complementos puede causar errores 
+_you_have_selected_in_development_or_not_official_versions=Ha seleccionado versiones de desarrollo o no oficiales
+_the_following_dependencies_have_not_been_possible_to_resolve=Las siguientes dependencias no se han podido resolver
+_the_selected_packages_require_to_install_or_update_the_following_packages=Los complementos seleccionados requieren instalar o actualizar los siguientes complementos
+_an_error_has_occurred_when_calculating_the_dependecies_of_the_packages_to_install=Se ha producido un error calculando las dependencias de los paquetes a instalar.
+_an_error_has_occurred_when_calculating_the_dependecies_of_the_selected_packages=Se ha producido un error calculando las dependencias de los paquetes seleccionados.
+_it_is_not_possible_to_verify_if_any_additional_package_is_needed_to_install_the_selected_packages=No es posible verificar si precisa alg�n paquete adicional para instalar los paquetes que ha seleccionado.
+_a_problem_has_occurred_when_calculating_the_dependencies=Ha ocurrido un problema calculando las dependencias.
+_if_you_want_you_can_select_again_manually_the_packets_that_might_be_necessary=Si lo desea puede volver a seleccionar manualmente los paquetes que estime pueden ser necesarios.
+_do_you_want_to_continue_and_install_the_packages_you_already_have_selected=�Desea continuar instalando los paquetes que ya ha seleccionado?
+_cancel=Cancelar
+_continue=Continuar
+_error_creating_the_wizard=Error creando el asistente.
+_malformed_url=Direcci�n URL incorrecta.
+_the_package_source_files_url_is_malformed._Please_review_it=La URL de los archivos fuente del paquete es incorrecta. Por favor, rev�sala.
+_the_owners_url_is_malformed._Please_review_it=La URL del propietario es incorrecta. Por favor, rev�sala.
+_advanced_options=Opciones avanzadas
+_select_an_option=Selecciona una opcion.
+_the_folder_install_already_exists._do_you_want_to_delete_it_before_proceeding?=El directorio install ya existe. Quieres borrarlo antes de continuar?
+_Couldn't_delete_the_directory=No se pudo borrar el directorio.
+_advanced_mode=El modo avanzado permite copiar recursos que est�n alojados fuera del directorio del plugin. No se recomienda usar esta opci�n.
+_name=Nombre
+_description=Descripci�n
+_version=Versi�n
+_build=Build
+_is_official=Es oficial?
+_status=Estado
+_code=C�digo
+_operating_system=Sistema operativo
+_architecture=Arquitectura
+_java_version=Versi�n java
+_gvSIG_desktop_version=Versi�n gvSIG desktop
+_package_owner=Propietario del paquete
+_package_URL_owner=URL del propietario del paquete 
+_sources_url=URL del c�digo fuente
+_dependencies=Dependencias
+_plugin_description=Description del plugin
+_plugin_to_install=Plugin a instalar
+_enable_advanced_mode=Habilitar modo avanzado.
+_package_file=Archivo del paquete
+_package_index_file=Archivo del �ndice del paquete
+_download_url=URL de descarga
+_create_package_index=Crear �ndice del paquete
+_output_options=Opciones de salida
+_invalid_download_url=URL de descarga incorrecta.
+_files_to_copy=Archivos a copiar
+_the_folder_install/files_already_exists_do_you_want_to_delete_it_before_proceeding?=El directorio install/files ya existe. Desea borrarlo antes de continuar?
+_ant_script=Script de ant
+_select_installation_source=Selecciona fuente de instalaci�n
+_select_installation_mode=Selecciona modo de instalaci�n
+_gvSIG_packages_and_packages_and_index_sets=Paquetes gvSIG y sets de paquetes e �ndices
+_broken_package=Paquete roto
+_install_addons_in_gvsig_standard_dist=instalar complementos incluidos en la distribuci�n gvSIG standard
+_install_addons_in_gvspki_or_gvspks_file=instalar complementos contenidos en un archivo .gvspki o .gvspks
+_install_addons_from_remote_repo=instalar complementos desde un repositorio remoto
+_These_packages_not_downloaded=No se han podido descargar estos paquetes
+_gvSIG_must_be_restarted_to_have_changes_applied=Es necesario reiniciar gvSIG para que los cambios tengan efecto 
+_All=Todos
+_Install_package=Instalar paquetes
+_finished_Some_files_not_downloaded=Terminado. Algunos archivos no se pudieron descargar.
+_downloading_files=Descargar archivos
+_Installing_devel_addons_may_cause_errors=Instalar complementos en desarrollo puede provocar errores de funcionamiento en la aplicaci�n
+_This_may_cause_issues_in_gvSIG=Esto puede provocar un mal funcionamiento de gvSIG
+
+select_package_location=Indique la ubicacion en la que se generara el paquete
+create_package_index=�Desea crear el indice para este paquete?
+create_index_for_package=Crear indice para el paquete
+select_package_index_location=Indique la ubicacion en la que se generara el indice
+destination_package_url=Para crear un indice debera indicar la url desde la que se podra descargar su paquete una vez generado.
+absolute_url_package_location=Indique una url absoluta a donde se encontrara el paquete
+pool_url_package_location=Indique la URL al pool desde el que se podra descargar su paquete (recomendado)
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text_en.properties	(revision 42196)
@@ -0,0 +1,122 @@
+# Resource bundle texts for the English language locale (en)
+_select_the_folder_to_create_the_package_with=Select the folder to create the package with
+_output_options=Output options
+_the_package_file_folder_does_not_exist=The package file folder does not exist
+_the_package_index_file_folder_does_not_exist=The package index file folder does not exist
+_package_description=Package description
+_installer_progress=Installer progress
+_Compressing=Compressing
+_Creating_index=Creating �ndex
+_Finished=Finished
+_cant_create_the_package=Can't create the package
+_create_package=Create package
+_select_symbol_folder=Select symbol folder
+_Create_package_symbols=Create package symbols
+_typical_installation=Typical installation
+_advanced_installation=Advanced installation
+_fast_filter=Fast filter
+_search=Search
+_reset_filters=Reset filters
+_categories=Categories
+_types=Types
+_standard_installation=Standard installation
+_installation_from_file=Installation from file
+_installation_from_url=Installation from URL
+_name=Name
+_version=Version
+_type=Type
+_already_installed,_check_to_reinstall=Already installed, check to reinstall
+_checked_to_reinstall=Checked to reinstall
+_not_installed,_check_to_install=Not installed, check to reinstall
+_checked_to_install=Checked to install
+_already_installed_but_not_installable=Already installed but not installable
+_official_recommended=Official and recommended
+_official=Official
+_not_official_recommended=Not official, recommended
+_not_official=Not official
+_downloading=Downloading
+_start_download=Start download
+_progress=Progress
+_select_plugins=Select packages
+_There_are_no_packages_in_typical_installation_to_select=There are no packages in typical installation to select
+_do_you_want_to_continue=Do you want to continue?
+_do_you_want_to_continue_anyway=Do you want to continue anyway?
+_you_have_selected_in_development_or_not_official_versions=You have selected in development or not official versions
+_download_progress=Download progress
+_Cant_download_package_files=Can't download package files
+_do_you_want_to_continue=Do you want to continue?
+_Download_error=Download error
+_finished=Finished
+_the_selected_file_does_not_exist=The selected file does not exist.
+_execute_adding_error=Execute adding error
+_Some_of_the_selected_addons_should_not_be_installed_simultaneously=_Some of the selected addons should not be installed simultaneously
+_Installing_these_addons_may_cause_errors=Installing these addons may cause errors 
+_the_following_dependencies_have_not_been_possible_to_resolve=The following dependencies have not been possible to resolve
+_the_selected_packages_require_to_install_or_update_the_following_packages=The selected addons require to install or update the following addons
+_an_error_has_occurred_when_calculating_the_dependecies_of_the_packages_to_install=An error has occurred when calculating the dependencies of the packages to install.
+_an_error_has_occurred_when_calculating_the_dependecies_of_the_selected_packages=An error has occurred when calculating the dependencies of the selected packages.
+_it_is_not_possible_to_verify_if_any_additional_package_is_needed_to_install_the_selected_packages=It is not possible to verify if any additional package is needed to install the selected packages
+_a_problem_has_occurred_when_calculating_the_dependencies=A problem has occurred when calculating the dependencies.
+_if_you_want_you_can_select_again_manually_the_packets_that_might_be_necessary=If you want you can select again manually the packets that might be necessary.
+_do_you_want_to_continue_and_install_the_packages_you_already_have_selected=Do you want to continue and install the packages you already have selected?
+_cancel=Cancel
+_continue=Continue
+_error_creating_the_wizard=Error creating the wizard
+_malformed_url=Malformed URL
+_the_package_source_files_url_is_malformed._Please_review_it=The package source files URL is malformed. Please review it.
+_the_owners_url_is_malformed._Please_review_it=The owner's URL is malformed. Please review it.
+_advanced_options=Advanced options
+_select_an_option=Select an option.
+_the_folder_install_already_exists._do_you_want_to_delete_it_before_proceeding?=The folder install already exists. Do you want to delete it before proceeding?
+_Couldn't_delete_the_directory=Couldn't delete the directory.
+_advanced_mode=The advanced mode option allows to copy resources that are located out of the plugin directory. We don't recommend to use this option.
+_name=Name
+_description=Description
+_version=Version
+_build=Build
+_is_official=Is official?
+_status=Status
+_code=Code
+_operating_system=Operating system
+_architecture=Architecture
+_java_version=Java version
+_gvSIG_desktop_version=gvSIG desktop version
+_package_owner=Package owner
+_package_URL_owner=Package URL owner
+_sources_url=Sources URL
+_dependencies=Dependencies
+_plugin_description=Plugin description
+_plugin_to_install=Plugin to install
+_enable_advanced_mode=Enable advanced mode.
+_package_file=Archivo del paquete
+_package_index_file=Package index file
+_download_url=Download URL
+_create_package_index=Create package index
+_output_options=Output options
+_invalid_download_url=Invalid download URL.
+_files_to_copy=Files to copy
+_the_folder_install/files_already_exists_do_you_want_to_delete_it_before_proceeding?=The folder install/files already exists. Do you want to delete it before proceeding?
+_ant_script=Ant script
+_select_installation_source=Select installation source
+_select_installation_mode=Select installation mode
+_gvSIG_packages_and_packages_and_index_sets=gvSIG packages and packages and index sets
+_broken_package=Broken package
+_install_addons_in_gvsig_standard_dist=install addons contained in the gvSIG standard distribution
+_install_addons_in_gvspki_or_gvspks_file=install addons contained in a .gvspki or .gvspks file
+_install_addons_from_remote_repo=install addons from a remote repository
+_These_packages_not_downloaded=Unable to download these packages
+_gvSIG_must_be_restarted_to_have_changes_applied=Changes will take effect when gvSIG is restarted
+_All=All
+_Install_package=Package install
+_finished_Some_files_not_downloaded=Finished. There were issues downloading some files.
+_downloading_files=File download
+_Installing_devel_addons_may_cause_errors=Installing addons in development may cause errors in gvSIG
+_This_may_cause_issues_in_gvSIG=This may cause issues in gvSIG
+
+select_package_location=Select the package location
+create_package_index=Do you want to create a package index?
+create_index_for_package=Create index for the package
+select_package_index_location=Index location
+destination_package_url=The index needs the url where the package will be located 
+absolute_url_package_location=Put the absolute url
+pool_url_package_location=Pool url where the package can be downloaded (recommended)
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/creation/panel/formPackageinfo.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/creation/panel/formPackageinfo.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/creation/panel/formPackageinfo.xml	(revision 42196)
@@ -0,0 +1,158 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="FormPackageinfo">
+
+      <description>Form definition for package.info data</description>
+      <fields>
+        <field name="type" label="Type" type="string" mandatory="true" order="1" group="General">
+          <description>Type of package, plugin, symbol,...</description>
+          <availableValues>
+            <value label="Plugin">plugin</value>
+            <value label="Symbol library">symbols</value>
+            <value label="Translations">translations</value>
+            <value label="jCRS - EPSG data base">jCRS_EPSG</value>
+          </availableValues>
+        </field>
+
+        <field name="code" label="Code" type="string" mandatory="true" order="2" group="General">
+          <description>Package code. It is usually a lowercase name separated by dots or dashes.</description>
+        </field>
+        
+        <field name="name" label="Name" type="string" mandatory="true" group="General">
+          <description>Name of the package</description>
+        </field> 
+        
+        <field name="description" label="Description" type="string" subtype="text" group="General">
+          <description></description>
+        </field>      
+        
+        <field name="categories" label="Categories" type="string" group="General">
+          <description>Categories list separated by commas, for example:  View,Vector</description>
+        </field>      
+        
+        <field name="version" label="Version" type="version" mandatory="true" defaultValue="1.0.0-0" group="General">
+          <description>Version number of the package. The last number should be the same as the number of build</description>
+        </field> 
+        
+        <field name="buildNumber" label="Build" type="integer" mandatory="true" defaultValue="0" group="General">
+          <description>Build number of the package</description>
+        </field> 
+        
+        <field name="state" label="State" type="string" mandatory="false" defaultValue="testing" group="General">
+          <description>State of the package</description>
+          <availableValues>
+          	<value label="devel">devel</value>
+            <value label="testing">testing</value>
+            <value label="pilot">pilot</value>
+            <value label="prototype">prototype</value>
+            <value label="alpha1">alpha1</value>
+            <value label="alpha2">alpha2</value>
+            <value label="alpha3">alpha3</value>
+            <value label="beta1">beta1</value>
+            <value label="beta2">beta2</value>
+            <value label="beta3">beta3</value>
+            <value label="RC1">RC1</value>
+            <value label="RC2">RC2</value>
+            <value label="RC3">RC3</value>
+            <value label="final">final</value>
+          </availableValues>
+        </field>
+        
+        <field name="official" label="Official" type="boolean" group="General">
+          <description>Check if the package is a official package of gvSIG project</description>
+        </field>
+
+        <field name="sources-url" label="Source code URL" type="URL" mandatory="false" group="General">
+          <description>URL to the source of the package</description>
+        </field>      
+
+        <field name="owner" label="Package owner" type="string" mandatory="true" group="Owner">
+          <description>Package owner</description>
+        </field>      
+
+        <field name="owner-url" label="Package owner URL" type="URL" mandatory="false" group="Owner">
+          <description>URL to the home page of the package owner</description>
+        </field>      
+
+
+        
+        <field name="operating-system" label="Operating System" type="string" mandatory="true" defaultValue="all" group="Requeriments">
+          <description>Operating system that require this package</description>
+          <availableValues>
+          	<value label="all">all</value>
+            <value label="Linux">lin</value>
+            <value label="Windows">win</value>
+            <value label="MAC OSX 10.4">osx_10_4</value>
+            <value label="MAC OSX 10.5">osx_10_5</value>
+            <value label="MAC OSX 10.6">osx_10_6</value>
+            <value label="MAC OSX 10.7">osx_10_7</value>
+            <value label="MAC OSX 10.8">osx_10_8</value>
+            <value label="MAC OSX 10.9">osx_10_9</value>
+          </availableValues>
+        </field>
+
+        <field name="architecture" label="Architecture" type="string" mandatory="true" defaultValue="all" group="Requeriments">
+          <description>Operating system that require this package</description>
+          <availableValues>
+          	<value label="all">all</value>
+            <value label="x86">x86</value>
+            <value label="x86_64/AMD64">x86_64</value>
+            <value label="PowerPC">PowerPC</value>
+          </availableValues>
+        </field>
+
+        <field name="java-version" label="Java version" type="string" mandatory="true" defaultValue="j1_5" group="Requeriments">
+          <description>Minimun java version required to run this package</description>
+          <availableValues>
+          	<value label="Java 1.5">j1_5</value>
+            <value label="Java 1.6">j1_6</value>
+            <value label="Java 1.7">j1_7</value>
+            <value label="Java 1.8">j1_8</value>
+          </availableValues>
+        </field>
+
+        <field name="gvSIG-version" label="gvSIG version" type="string" mandatory="true" defaultValue="2.0.0" group="Requeriments">
+          <description>gvSIG version for which this package has been created</description>
+        </field>      
+
+        <field name="dependencies" label="Dependencies" type="string" mandatory="false" group="Requeriments">
+          <description>Specifies the dependencies or conflicts with other packates</description>
+        </field>      
+
+        <field name="code-alias" label="Code alias" type="string" mandatory="false" group="Others">
+          <description>Alternative value for the code. It is useful when a renamed package to maintain compatibility with dependencies that other packages might have with this.</description>
+        </field>      
+
+           
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/resources/org/gvsig/installer/swing/impl/creation/panel/formPackageinfo.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerManager.java	(revision 42196)
@@ -0,0 +1,513 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.swing.api.JProgressPanel;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.api.creation.JOutputPanel;
+import org.gvsig.installer.swing.api.creation.JPackageInfoPanel;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizard;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizardException;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.api.execution.InstallPackageWizardException;
+import org.gvsig.installer.swing.api.execution.JShowPackageStatusAndAskContinuePanel;
+import org.gvsig.installer.swing.api.execution.JShowPackagesAndAskContinuePanel;
+import org.gvsig.installer.swing.api.execution.JShowRequiredPackagesAndAskContinuePanel;
+import org.gvsig.installer.swing.api.execution.JShowUnresolvedDependenciesAndAskContinuePanel;
+import org.gvsig.installer.swing.impl.creation.panel.DefaultOutputPanel;
+import org.gvsig.installer.swing.impl.creation.panel.DefaultPackageInfoPanel;
+import org.gvsig.installer.swing.impl.panel.DefaultProgressPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultSwingInstallerManager implements SwingInstallerManager {
+
+	public class DefaultUrlAndLabel implements UrlAndLabel {
+
+		private URL url;
+		private String label;
+
+		public DefaultUrlAndLabel(URL url, String label) {
+			this.url = url;
+			this.label = label;
+		}
+		public URL getURL() {
+			return this.url;
+		}
+
+		public String getLabel() {
+			return this.label;
+		}
+		
+		public void setLabel(String label) {
+			this.label = label;
+		}
+		@Override
+		public String toString() {
+			if( label == null ) {
+				return this.url.toString();
+			}
+			return this.label + " - " + this.url.toString();
+		}
+	}
+
+	/**
+	 * 
+	 * This class is for compatibility with deprecated method 
+	 * List<URL> getDefaultDownloadURLs()
+	 *  
+	 * @author jjdelcerro
+	 *
+	 */
+	public class DefaultDownloadURLsIterator<URL> implements ListIterator<URL> {
+		private List<UrlAndLabel> urlAndLabels;
+		private ListIterator<UrlAndLabel> it;
+		
+		DefaultDownloadURLsIterator(List<UrlAndLabel> urlAndLabels, int index) {
+			this.urlAndLabels = urlAndLabels;
+			this.it = this.urlAndLabels.listIterator(index);
+		}
+
+		DefaultDownloadURLsIterator(List<UrlAndLabel> urlAndLabels) {
+			this.urlAndLabels = urlAndLabels;
+			this.it = this.urlAndLabels.listIterator();
+		}
+
+		public boolean hasNext() {
+			return this.it.hasNext();
+		}
+
+		public URL next() {
+			UrlAndLabel value = this.it.next();
+			if( value == null ) {
+				return null;
+			}
+			return (URL) value.getURL();
+		}
+
+		public boolean hasPrevious() {
+			return it.hasPrevious();
+		}
+
+		public int nextIndex() {
+			return it.nextIndex();
+		}
+
+		public URL previous() {
+			UrlAndLabel value = this.it.previous();
+			if( value == null ) {
+				return null;
+			}
+			return (URL) value.getURL();
+		}
+
+		public int previousIndex() {
+			return it.previousIndex();
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException("This is read-only");
+		}
+
+		public void add(Object arg0) {
+			throw new UnsupportedOperationException("This is read-only");
+		}
+
+		public void set(Object arg0) {
+			throw new UnsupportedOperationException("This is read-only");
+		}
+	}
+	
+	/**
+	 * 
+	 * This class is for compatibility with deprecated method 
+	 * List<URL> getDefaultDownloadURLs()
+	 *  
+	 * @author jjdelcerro
+	 *
+	 */
+	public class DefaultDownloadURLs<URL> implements List<URL> {
+
+		private List<UrlAndLabel> urlAndLabels;
+
+		DefaultDownloadURLs(List<UrlAndLabel> urlAndLabels) {
+			this.urlAndLabels = urlAndLabels;
+		}
+		
+		public boolean add(Object url) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public void add(int arg0, Object url) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public boolean addAll(Collection arg0) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public boolean addAll(int arg0, Collection arg1) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public void clear() {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public boolean contains(Object arg0) {
+			Iterator<UrlAndLabel> it = this.urlAndLabels.iterator();
+			while( it.hasNext() ) {
+				UrlAndLabel x = it.next();
+				if( x.getURL().equals(arg0) ) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		public boolean containsAll(Collection arg0) {
+			throw new UnsupportedOperationException("This method is not supported");
+		}
+
+		public URL get(int arg0) {
+			return (URL) this.urlAndLabels.get(arg0).getURL();
+		}
+
+		public int indexOf(Object arg0) {
+			for( int i=0; i<this.urlAndLabels.size(); i++) {
+				if( this.urlAndLabels.get(i).getURL().equals(arg0) ) {
+					return i;
+				}
+			}
+			return -1;
+		}
+
+		public boolean isEmpty() {
+			return this.urlAndLabels.isEmpty();
+		}
+
+		public Iterator iterator() {
+			return new DefaultDownloadURLsIterator(this.urlAndLabels);
+		}
+
+		public int lastIndexOf(Object arg0) {
+			for( int i=this.urlAndLabels.size()-1; i>=0; i--) {
+				if( this.urlAndLabels.get(i).getURL().equals(arg0) ) {
+					return i;
+				}
+			}
+			return -1;
+		}
+
+		public ListIterator listIterator() {
+			return new DefaultDownloadURLsIterator(this.urlAndLabels);
+		}
+
+		public ListIterator listIterator(int arg0) {
+			return new DefaultDownloadURLsIterator(this.urlAndLabels, arg0);
+		}
+
+		public boolean remove(Object arg0) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public URL remove(int arg0) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public boolean removeAll(Collection arg0) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public boolean retainAll(Collection arg0) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public Object set(int arg0, Object arg1) {
+			throw new UnsupportedOperationException("This is a read-only list");
+		}
+
+		public int size() {
+			return this.urlAndLabels.size();
+		}
+
+		public List subList(int arg0, int arg1) {
+			throw new UnsupportedOperationException("This method is not supported");
+		}
+
+		public Object[] toArray() {
+			throw new UnsupportedOperationException("This method is not supported");
+		}
+
+		public Object[] toArray(Object[] arg0) {
+			throw new UnsupportedOperationException("This method is not supported");
+		}
+		
+	}
+	
+	private static Logger logger = LoggerFactory
+			.getLogger(DefaultSwingInstallerManager.class);
+
+	private static final String SWING_INSTALLER_MANAGER_EXTENSION_POINT = "SwingInstallerManagerExtensionPoint";
+	private static final String CREATE_INSTALLER_WIZARD_NAME = "CreateInstallerWizard";
+	private static final String EXECUTE_INSTALLER_WIZARD_NAME = "ExecuteInstallerWizard";
+	private ExtensionPointManager extensionPoints = ToolsLocator
+			.getExtensionPointManager();
+
+	private String applicationVersion = "1.0.0";
+	private List<UrlAndLabel> defaultDownloadURLs = new ArrayList<UrlAndLabel>();
+
+	public String getText(String key) {
+		return Messages.translate(key);
+	}
+
+	public void registerMakePluginPackageWizardInstallerCreationWizard(
+			Class<? extends MakePluginPackageWizard> clazz) {
+		ExtensionPoint extensionPoint = extensionPoints.add(
+				SWING_INSTALLER_MANAGER_EXTENSION_POINT, "");
+		extensionPoint.append(CREATE_INSTALLER_WIZARD_NAME, "", clazz);
+	}
+
+	public void registerInstallPackageWizard(
+			Class<? extends AbstractInstallPackageWizard> clazz) {
+		ExtensionPoint extensionPoint = extensionPoints.add(
+				SWING_INSTALLER_MANAGER_EXTENSION_POINT, "");
+		extensionPoint.append(EXECUTE_INSTALLER_WIZARD_NAME, "", clazz);
+	}
+
+	public String getApplicationVersion() {
+		return applicationVersion;
+	}
+
+	public void setApplicationVersion(String gvSIGVersion) {
+		this.applicationVersion = gvSIGVersion;
+	}
+
+	public URL getDefaultDownloadURL() {
+		if (defaultDownloadURLs.size() < 1) {
+			return null;
+		}
+		return defaultDownloadURLs.get(0).getURL();
+	}
+
+	public List<URL> getDefaultDownloadURLs() {
+		return new DefaultDownloadURLs(this.defaultDownloadURLs);
+	}
+
+    public List<UrlAndLabel> getDefaultDownloadUrlAndLabels() {
+    	return this.defaultDownloadURLs;
+    }
+    
+	public void setDefaultDownloadURL(String defaultDownloadURLs) {
+		String[] urls = defaultDownloadURLs.split(";");
+		for (int i = 0; i < urls.length; i++) {
+			try {
+				this.addDefaultDownloadURL(urls[i]);
+			} catch (MalformedURLException e) {
+				logger.info("Malformed URL ("+urls[i]+").", e);
+			}
+		}
+	}
+
+	public void setDefaultDownloadURL(URL defaultDownloadURL) {
+		this.defaultDownloadURLs.clear();
+		this.addDefaultDownloadURL(defaultDownloadURL);
+	}
+
+	public void setDefaultDownloadURL(File defaultDownloadURLs) {
+		InputStream is;
+		try {
+			is = new FileInputStream(defaultDownloadURLs);
+		} catch (FileNotFoundException e1) {
+			logger.error(
+					"Can't open the file " + defaultDownloadURLs.getName(), e1);
+			return;
+		}
+		BufferedReader in = new BufferedReader(new InputStreamReader(is));
+		String line = null;
+		try {
+			for (line = in.readLine(); line != null; line = in.readLine()) {
+				try {
+					this.addDefaultDownloadURL(line);
+				} catch (MalformedURLException e) {
+					logger.error(
+							"Error creating the default packages download URL pointing to "
+									+ line, e);
+				}
+			}
+		} catch (IOException e) {
+			logger.error("Error reading the file "
+					+ defaultDownloadURLs.getName(), e);
+		}
+	}
+
+	public void addDefaultDownloadURL(URL url) {
+		addDefaultDownloadURL(url,null);
+	}
+	
+	public void addDefaultDownloadURL(URL url, String label) {
+		Iterator<UrlAndLabel> it = this.defaultDownloadURLs.iterator();
+		while( it.hasNext() ) {
+			DefaultUrlAndLabel value = (DefaultUrlAndLabel) it.next();
+                        // Hacket by jbadia ;)
+			if( value.getURL().toString().equals(url.toString()) ) {
+				if( value.getLabel() == null ) {
+					value.setLabel(label);
+				}
+				// Already exists the url, don't duplicate.
+				return;
+			}
+		}
+		this.defaultDownloadURLs.add( new DefaultUrlAndLabel(url, label));
+	}
+	
+	public void addDefaultDownloadURL(String url) throws MalformedURLException {
+		String label = null;
+		
+		if( url.startsWith("#") ) {
+			return;
+		}
+		Version version = getInstallerManager().createVersion();
+		String versionFormat = version.getMajor() + "." + version.getMinor()
+				+ "." + version.getRevision();
+		int n = url.indexOf("##");
+		if( n>0 ) {
+			label = url.substring(n+2);
+			url = url.substring(0, n-1);
+		}
+		url = url.replace("$version", versionFormat);
+		url = url.replace("<%Version%>", versionFormat);
+		url = url.replace("$build", Integer.toString(version.getBuild()));
+		url = url.replace("<%Build%>", Integer.toString(version.getBuild()));
+		addDefaultDownloadURL(new URL(url), label);
+	}
+
+	public InstallerManager getInstallerManager() {
+		return InstallerLocator.getInstallerManager();
+	}
+
+	public JShowPackageStatusAndAskContinuePanel createJShowPackageStatusAndAskContinuePanel(
+			List<PackageInfo> packages, String message) {
+		return new DefaultJShowPackageStatusAndAskContinuePanel(this, packages,
+				message);
+	}
+
+	public JShowPackagesAndAskContinuePanel createJShowTroubledPackagesAndAskContinuePanel(
+			List<PackageInfo> packages, String message) {
+		return new DefaultJShowTroubledPackagesAndAskContinuePanel(this, packages,
+				message);
+	}
+	
+	public JShowRequiredPackagesAndAskContinuePanel createJShowRequiredPackagesAndAskContinuePanel(
+			List<PackageInfo> packages, String message) {
+		return new DefaultJShowRequiredPackagesAndAskContinuePanel(this,
+				packages, message);
+	}
+
+	public JShowUnresolvedDependenciesAndAskContinuePanel createJShowUnresolvedDependenciesAndAskContinuePanel(
+			Dependencies dependencies, String message) {
+		return new DefaultJShowUnresolvedDependenciesAndAskContinuePanel(this,
+				dependencies, message);
+	}
+
+	public JPackageInfoPanel createPackageInfoPanel() {
+		return new DefaultPackageInfoPanel();
+	}
+
+	public JOutputPanel createOutputPanel() {
+		return new DefaultOutputPanel();
+	}
+
+	public JProgressPanel createProgressPanel() {
+		return new DefaultProgressPanel();
+	}
+
+	public AbstractInstallPackageWizard createInstallPackageWizard(
+			File applicationDirectory, File installFolder)
+			throws InstallPackageWizardException {
+		ExtensionPoint ep = extensionPoints
+				.add(SWING_INSTALLER_MANAGER_EXTENSION_POINT);
+		try {
+			Object[] args = new Object[2];
+			args[0] = applicationDirectory;
+			args[1] = installFolder;
+			return (AbstractInstallPackageWizard) ep.create(
+					EXECUTE_INSTALLER_WIZARD_NAME, args);
+
+		} catch (Exception e) {
+			throw new InstallPackageWizardException(
+					"Error creating the wizard", e);
+		}
+	}
+
+	public MakePluginPackageWizard createMakePluginPackageWizard(
+			File applicationDirectory, File installFolder)
+			throws MakePluginPackageWizardException {
+		ExtensionPoint ep = extensionPoints
+				.add(SWING_INSTALLER_MANAGER_EXTENSION_POINT);
+		try {
+			Object[] args = new Object[2];
+			args[0] = applicationDirectory;
+			args[1] = installFolder;
+			return (MakePluginPackageWizard) ep.create(
+					CREATE_INSTALLER_WIZARD_NAME, args);
+		} catch (Exception e) {
+			throw new MakePluginPackageWizardException(
+					"Error creating the wizard", e);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowPackageStatusAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowPackageStatusAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowPackageStatusAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,160 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.api.execution.JShowPackageStatusAndAskContinuePanel;
+
+public class DefaultJShowPackageStatusAndAskContinuePanel extends
+		JShowPackageStatusAndAskContinuePanel implements ActionListener {
+
+	private static final long serialVersionUID = -3142143854199963997L;
+	private List<String> packages;
+	private boolean doCancel = true;
+	DefaultSwingInstallerManager swingInstallerManager;
+
+	public DefaultJShowPackageStatusAndAskContinuePanel(
+			SwingInstallerManager manager, List<PackageInfo> packages,
+			String message) {
+		this.swingInstallerManager = (DefaultSwingInstallerManager) manager;
+		this.buildPackageList(packages);
+		this.createUI(manager, message);
+	}
+
+	private void buildPackageList(List<PackageInfo> packages) {
+		this.packages = new ArrayList<String>();
+		for (int i = 0; i < packages.size(); i++) {
+			PackageInfo pkg = packages.get(i);
+			if (!pkg.isOfficial()) {
+				this.packages.add(pkg.getName() + " ("
+						+ swingInstallerManager.getText("_not_official") + ")");
+			} else {
+			    
+			    if (InstallerManager.STATE.FINAL.equalsIgnoreCase(pkg.getState())) {
+			        continue;
+			    } else if (InstallerManager.STATE.TESTING.equalsIgnoreCase(pkg.getState())) {
+			        continue;
+                } else if (pkg.getState().toLowerCase().startsWith(InstallerManager.STATE.RC.toLowerCase())) {
+                    continue;
+                } else if (pkg.getState().toLowerCase().startsWith(InstallerManager.STATE.BETA.toLowerCase())) {
+                    continue;
+                } else {
+                    this.packages.add(pkg.getName() + " (" + pkg.getState() + ")");
+                }
+			}
+		}
+	}
+
+	private void createUI(SwingInstallerManager manager, String message) {
+		this.setLayout(new BorderLayout());
+
+		JButton cancelButton = new JButton(swingInstallerManager
+				.getText("_cancel"));
+		cancelButton.setActionCommand("cancel");
+		cancelButton.addActionListener(this);
+		//
+		final JButton continueButton = new JButton(swingInstallerManager
+				.getText("_continue"));
+		continueButton.setActionCommand("continue");
+		continueButton.addActionListener(this);
+
+		JList list = new JList(this.packages.toArray());
+
+		JScrollPane listScroller = new JScrollPane(list);
+		listScroller.setPreferredSize(new Dimension(250, 80));
+		listScroller.setAlignmentX(LEFT_ALIGNMENT);
+
+		JPanel listPane = new JPanel();
+		listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
+		
+		String html_msg = getHtmlText(message);
+		JLabel label = new JLabel(html_msg);
+		label.setLabelFor(list);
+		listPane.add(label);
+		listPane.add(Box.createRigidArea(new Dimension(0, 5)));
+		listPane.add(listScroller);
+		listPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+		JPanel buttonPane = new JPanel();
+		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+		buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+		buttonPane.add(Box.createHorizontalGlue());
+		buttonPane.add(cancelButton);
+		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+		buttonPane.add(continueButton);
+
+		this.add(listPane, BorderLayout.CENTER);
+		this.add(buttonPane, BorderLayout.PAGE_END);
+		
+		this.setPreferredSize(new Dimension(500, 300));
+	}
+
+
+	/*
+	 * Utility method to HTML code (this allows multiline in Swing
+	 * components)
+	 */
+    public static String getHtmlText(String txt) {
+        String resp = txt.replace("\n", "<br><br>");
+        resp = "<html>" + resp + "</html>";
+        return resp;
+    }
+
+    @Override
+	public boolean cancelled() {
+		return doCancel;
+	}
+
+	@Override
+	public boolean needShow() {
+		return this.packages.size() > 0;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if ("cancel".equals(e.getActionCommand())) {
+			doCancel = true;
+		} else {
+			doCancel = false;
+		}
+		this.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowPackageStatusAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowRequiredPackagesAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowRequiredPackagesAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowRequiredPackagesAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.api.execution.JShowRequiredPackagesAndAskContinuePanel;
+
+public class DefaultJShowRequiredPackagesAndAskContinuePanel extends
+		JShowRequiredPackagesAndAskContinuePanel implements ActionListener {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 2135985029410816305L;
+	private List<String> packages;
+	private boolean doCancel = true;
+
+	public DefaultJShowRequiredPackagesAndAskContinuePanel(
+			SwingInstallerManager manager, List<PackageInfo> packages,
+			String message) {
+		this.buildPackageList(packages);
+		this.createUI(manager, message);
+	}
+
+	private void buildPackageList(List<PackageInfo> packages) {
+		this.packages = new ArrayList<String>();
+		for (int i = 0; i < packages.size(); i++) {
+			PackageInfo pkg = packages.get(i);
+			this.packages.add(pkg.getName());
+		}
+	}
+
+	private void createUI(SwingInstallerManager manager, String message) {
+		this.setLayout(new BorderLayout());
+
+		JButton cancelButton = new JButton(manager.getText("_cancel"));
+		cancelButton.setActionCommand("cancel");
+		cancelButton.addActionListener(this);
+		//
+		final JButton continueButton = new JButton(manager.getText("_continue"));
+		continueButton.setActionCommand("continue");
+		continueButton.addActionListener(this);
+
+		JList list = new JList(this.packages.toArray());
+
+		JScrollPane listScroller = new JScrollPane(list);
+		listScroller.setPreferredSize(new Dimension(250, 80));
+		listScroller.setAlignmentX(LEFT_ALIGNMENT);
+
+		JPanel listPane = new JPanel();
+		listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
+		
+		String html_msg = DefaultJShowPackageStatusAndAskContinuePanel.getHtmlText(message);
+		JLabel label = new JLabel(html_msg);
+		label.setLabelFor(list);
+		listPane.add(label);
+		listPane.add(Box.createRigidArea(new Dimension(0, 5)));
+		listPane.add(listScroller);
+		listPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+		JPanel buttonPane = new JPanel();
+		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+		buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+		buttonPane.add(Box.createHorizontalGlue());
+		buttonPane.add(cancelButton);
+		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+		buttonPane.add(continueButton);
+
+		this.add(listPane, BorderLayout.CENTER);
+		this.add(buttonPane, BorderLayout.PAGE_END);
+	}
+
+	@Override
+	public boolean cancelled() {
+		return doCancel;
+	}
+
+	@Override
+	public boolean needShow() {
+		return this.packages.size() > 0;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if ("cancel".equals(e.getActionCommand())) {
+			doCancel = true;
+		} else {
+			doCancel = false;
+		}
+		this.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowRequiredPackagesAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowTroubledPackagesAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowTroubledPackagesAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowTroubledPackagesAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.api.execution.JShowPackageStatusAndAskContinuePanel;
+
+public class DefaultJShowTroubledPackagesAndAskContinuePanel extends
+	JShowPackageStatusAndAskContinuePanel implements ActionListener {
+
+	private static final long serialVersionUID = -3142143854199963997L;
+	private List<String> packages;
+	private boolean doCancel = true;
+	DefaultSwingInstallerManager swingInstallerManager;
+
+	public DefaultJShowTroubledPackagesAndAskContinuePanel(
+			SwingInstallerManager manager, List<PackageInfo> packages,
+			String message) {
+		this.swingInstallerManager = (DefaultSwingInstallerManager) manager;
+		this.buildPackageList(packages);
+		this.createUI(manager, message);
+	}
+
+	private void buildPackageList(List<PackageInfo> packages) {
+		this.packages = new ArrayList<String>();
+		for (int i = 0; i < packages.size(); i++) {
+			PackageInfo pkg = packages.get(i);
+            this.packages.add(pkg.getName() + " (" + pkg.getDependencies().toString() + ")");
+		}
+	}
+
+	private void createUI(SwingInstallerManager manager, String message) {
+		this.setLayout(new BorderLayout());
+
+		JButton cancelButton = new JButton(swingInstallerManager
+				.getText("_cancel"));
+		cancelButton.setActionCommand("cancel");
+		cancelButton.addActionListener(this);
+		//
+		final JButton continueButton = new JButton(swingInstallerManager
+				.getText("_continue"));
+		continueButton.setActionCommand("continue");
+		continueButton.addActionListener(this);
+
+		JList list = new JList(this.packages.toArray());
+
+		JScrollPane listScroller = new JScrollPane(list);
+		listScroller.setPreferredSize(new Dimension(250, 80));
+		listScroller.setAlignmentX(LEFT_ALIGNMENT);
+
+		JPanel listPane = new JPanel();
+		listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
+		
+		String html_msg = getHtmlText(message);
+		JLabel label = new JLabel(html_msg);
+		label.setLabelFor(list);
+		listPane.add(label);
+		listPane.add(Box.createRigidArea(new Dimension(0, 5)));
+		listPane.add(listScroller);
+		listPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+		JPanel buttonPane = new JPanel();
+		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+		buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+		buttonPane.add(Box.createHorizontalGlue());
+		buttonPane.add(cancelButton);
+		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+		buttonPane.add(continueButton);
+
+		this.add(listPane, BorderLayout.CENTER);
+		this.add(buttonPane, BorderLayout.PAGE_END);
+		
+		this.setPreferredSize(new Dimension(500, 300));
+	}
+
+
+	/*
+	 * Utility method to HTML code (this allows multiline in Swing
+	 * components)
+	 */
+    public static String getHtmlText(String txt) {
+        String resp = txt.replace("\n", "<br><br>");
+        resp = "<html>" + resp + "</html>";
+        return resp;
+    }
+
+    @Override
+	public boolean cancelled() {
+		return doCancel;
+	}
+
+	@Override
+	public boolean needShow() {
+		return this.packages.size() > 0;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if ("cancel".equals(e.getActionCommand())) {
+			doCancel = true;
+		} else {
+			doCancel = false;
+		}
+		this.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowTroubledPackagesAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerLibrary.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.installer.swing.api.SwingInstallerLibrary;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.execution.DefaultInstallPackageWizard;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultSwingInstallerLibrary extends AbstractLibrary {
+
+	@Override
+	public void doRegistration() {
+		registerAsImplementationOf(SwingInstallerLibrary.class);
+		require(InstallerLibrary.class);
+	}
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		SwingInstallerLocator
+				.registerSwingInstallerManager(DefaultSwingInstallerManager.class);
+		if (!Messages.hasLocales()) {
+			Messages.addLocale(Locale.getDefault());
+		}
+		Messages.addResourceFamily("org.gvsig.installer.swing.impl.text",
+				DefaultSwingInstallerLibrary.class.getClassLoader(),
+				DefaultSwingInstallerLibrary.class.getClass().getName());
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		SwingInstallerManager swingInstallerManager = SwingInstallerLocator
+				.getSwingInstallerManager();
+
+		swingInstallerManager
+				.registerMakePluginPackageWizardInstallerCreationWizard(DefaultMakePluginPackageWizard.class);
+		swingInstallerManager
+				.registerInstallPackageWizard(DefaultInstallPackageWizard.class);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultSwingInstallerLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/panel/DefaultProgressPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/panel/DefaultProgressPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/panel/DefaultProgressPanel.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.installer.swing.api.JProgressPanel;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.task.JTaskStatus;
+import org.gvsig.tools.task.TaskStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultProgressPanel extends JProgressPanel {
+
+	protected static Logger logger = LoggerFactory
+			.getLogger(DefaultProgressPanel.class);
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 3961459135479121712L;
+	final private JTaskStatus progressBar;
+
+	public DefaultProgressPanel() {
+		super();
+		progressBar = ToolsSwingLocator.getTaskStatusSwingManager()
+				.createJTaskStatus();
+
+		initComponents();
+	}
+
+	@Override
+	public void bind(TaskStatus taskStatus) {
+		this.progressBar.bind(taskStatus);
+	}
+
+	protected void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		setLayout(new GridBagLayout());
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(progressBar, gridBagConstraints);
+
+	}
+
+	public void showErrorMessage(String msg, Throwable ex) {
+		logger.error(msg, ex);
+                
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/panel/DefaultProgressPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/wizard/WizardListenerAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/wizard/WizardListenerAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/wizard/WizardListenerAdapter.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.wizard;
+
+import java.awt.Component;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardPanel;
+import org.gvsig.tools.task.CancellableTask;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class WizardListenerAdapter implements WizardPanelActionListener {
+
+	private InstallerWizardPanel installerWizardPanel;
+
+	public WizardListenerAdapter(InstallerWizardPanel installerWizardPanel) {
+		super();
+		this.installerWizardPanel = installerWizardPanel;
+	}
+
+	public void cancel(WizardPanel wizardPanel) {
+		if (installerWizardPanel.getWizardActionListener() != null) {
+			for (CancellableTask task : installerWizardPanel
+					.getCancellableTasks()) {
+				task.cancelRequest();
+			}
+			installerWizardPanel.getWizardActionListener().cancel(
+					installerWizardPanel);
+		}
+	}
+
+	public void finish(WizardPanel wizardPanel) {
+		if (installerWizardPanel.getWizardActionListener() != null) {
+			installerWizardPanel.getWizardActionListener().finish(
+					installerWizardPanel);
+		}
+		
+		if (installerWizardPanel.needsToRestartApplicationAfterFinish()) {
+
+		    // --------------------------- Suggest restart
+		    Component parent = null;
+		    if (installerWizardPanel instanceof Component) {
+		        parent = (Component) installerWizardPanel;
+		    }
+		    JOptionPane.showMessageDialog(
+		        parent,
+		        Messages.getText("_gvSIG_must_be_restarted_to_have_changes_applied"),
+                Messages.getText("_finished"),
+		        JOptionPane.WARNING_MESSAGE);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/wizard/WizardListenerAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/DefaultInstallPackageWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/DefaultInstallPackageWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/DefaultInstallPackageWizard.java	(revision 42196)
@@ -0,0 +1,227 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.execution;
+
+import java.awt.BorderLayout;
+import java.io.File;
+import java.net.URL;
+import java.util.List;
+
+import jwizardcomponent.DefaultJWizardComponents;
+
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager.UrlAndLabel;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.impl.execution.wizard.DownloadProgressWizard;
+import org.gvsig.installer.swing.impl.execution.wizard.ProgressWizard;
+import org.gvsig.installer.swing.impl.execution.wizard.SelectBundlesWizard;
+import org.gvsig.installer.swing.impl.execution.wizard.SelectPackagesWizard;
+import org.gvsig.installer.swing.impl.execution.wizard.TypicalOrAdvancedWizard;
+import org.gvsig.installer.swing.impl.wizard.WizardListenerAdapter;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultInstallPackageWizard extends AbstractInstallPackageWizard
+		implements WizardPanel {
+
+	private static final long serialVersionUID = 554068938842141497L;
+	private static final int TYPICAL_MODE = 0;
+	private static final int ADVANCED_MODE = 1;
+
+	private int installationMode = ADVANCED_MODE;
+	private boolean askInstallationMode = false;
+	private boolean selectDefaultPackages;
+        private boolean goToSelectInstalationPackages = false;
+
+	private WizardPanelWithLogo wizardPanelWithLogo = null;
+	private InstallPackageService installerExecutionService = null;
+
+	// Wizards
+	private SelectBundlesWizard selectInstallersWizard = null;
+	private SelectPackagesWizard selectPluginsWizard = null;
+	private ProgressWizard progressWizard = null;
+	private DownloadProgressWizard downloadProgressWizard = null;
+	private TypicalOrAdvancedWizard typicalOrAdvancedWizard = null;
+
+	private WizardListenerAdapter wizardListenerAdapter = null;
+        private boolean skipBundleSelection = false;
+
+	public DefaultInstallPackageWizard(File applicationFolder,
+			File installFolder) throws InstallPackageServiceException {
+		super(applicationFolder, installFolder);
+
+		installerExecutionService = InstallerLocator.getInstallerManager()
+				.getInstallPackageService();
+
+		wizardPanelWithLogo = new WizardPanelWithLogo();
+
+		List<UrlAndLabel> downloadURLs = SwingInstallerLocator
+				.getSwingInstallerManager().getDefaultDownloadUrlAndLabels();
+		selectInstallersWizard = new SelectBundlesWizard(this, downloadURLs);
+		typicalOrAdvancedWizard = new TypicalOrAdvancedWizard(this);
+		selectPluginsWizard = new SelectPackagesWizard(this);
+		progressWizard = new ProgressWizard(this);
+		downloadProgressWizard = new DownloadProgressWizard(this);
+
+		addWizards();
+
+		// Adding the listeners
+		wizardPanelWithLogo.setWizardListener(this);
+
+		setFinishButtonVisible(false);
+
+		this.setLayout(new BorderLayout());
+		this.add(wizardPanelWithLogo, BorderLayout.CENTER);
+	}
+
+	public void doAction(int action) {
+		this.wizardPanelWithLogo.doAction(action);
+	}
+
+	private void addWizards() {
+		wizardPanelWithLogo.addOptionPanel(selectInstallersWizard);
+		wizardPanelWithLogo.addOptionPanel(typicalOrAdvancedWizard);
+		wizardPanelWithLogo.addOptionPanel(selectPluginsWizard);
+		wizardPanelWithLogo.addOptionPanel(downloadProgressWizard);
+		wizardPanelWithLogo.addOptionPanel(progressWizard);
+	}
+
+	public DefaultJWizardComponents getWizardComponents() {
+		return wizardPanelWithLogo.getWizardComponents();
+	}
+
+	/**
+	 * @return the installerExecutionService
+	 */
+	@Override
+	public InstallPackageService getInstallerExecutionService() {
+		return installerExecutionService;
+	}
+
+	/**
+	 * @return the installersToInstall
+	 */
+	@Override
+	public List<PackageInfo> getInstallersToInstall() {
+		return this.selectPluginsWizard.getPackagesToInstall();
+	}
+
+	@Override
+	public void setNextButtonEnabled(boolean isEnabled) {
+		getWizardComponents().getNextButton().setEnabled(isEnabled);
+	}
+
+	@Override
+	public void setFinishButtonVisible(boolean isVisible) {
+		getWizardComponents().getFinishButton().setEnabled(isVisible);
+	}
+
+	@Override
+	public void setCancelButtonEnabled(boolean isEnabled) {
+		getWizardComponents().getCancelButton().setEnabled(isEnabled);
+	}
+
+	@Override
+	public void setBackButtonEnabled(boolean isEnabled) {
+		getWizardComponents().getBackButton().setEnabled(isEnabled);
+	}
+
+	@Override
+	public void installFromDefaultDirectory()
+			throws InstallPackageServiceException {
+		getWizardComponents().removeWizardPanel(0);
+		installerExecutionService.addBundlesFromDirectory(getInstallFolder());
+		selectPluginsWizard.updatePanel();
+	}
+
+	public WizardPanelActionListener getWizardPanelActionListener() {
+		if (((wizardListenerAdapter == null) && (getWizardActionListener() != null))) {
+			wizardListenerAdapter = new WizardListenerAdapter(this);
+		}
+		return wizardListenerAdapter;
+	}
+
+	public void setWizardPanelActionListener(
+			WizardPanelActionListener wizardActionListener) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	public void setSelectDefaultPackages(boolean isActivated) {
+		this.selectDefaultPackages = isActivated;
+	}
+
+	@Override
+	public boolean getSelectDefaultPackages() {
+		return this.selectDefaultPackages;
+	}
+
+	public void setShowSelectPackagesPanel(boolean mode) {
+		if (mode) {
+			installationMode = ADVANCED_MODE;
+		} else {
+			installationMode = TYPICAL_MODE;
+			selectDefaultPackages = true;
+		}
+	}
+
+	public boolean showSelectPackagesPanel() {
+		return installationMode == ADVANCED_MODE;
+	}
+
+	@Override
+	public boolean getAskTypicalOrCustom() {
+		return askInstallationMode;
+	}
+
+	@Override
+	public void setAskTypicalOrCustom(boolean b) {
+		askInstallationMode = true;
+	}
+
+        public void setSkipBundleSelection(boolean skipBundleSelection) {
+            if( skipBundleSelection ) {
+                this.doAction(WizardPanelWithLogo.ACTION_NEXT);
+                this.setBackButtonEnabled(false);
+            }
+            this.skipBundleSelection = skipBundleSelection;
+        }
+        
+        public boolean getSkipBundleSelection() {
+            return this.skipBundleSelection;
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/DefaultInstallPackageWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/AllFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/AllFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/AllFilter.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.filters;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+
+public class AllFilter implements PackageFilter {
+
+	public AllFilter() {
+		
+	}
+	
+	public String toString() {
+		SwingInstallerManager manager = SwingInstallerLocator.getSwingInstallerManager();
+		return manager.getText("_All");
+	}
+	
+	public boolean match(PackageInfo pkg) {
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/AllFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/PackageFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/PackageFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/PackageFilter.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.filters;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface PackageFilter {
+
+	public boolean match(PackageInfo pkg);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/PackageFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/CategoryFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/CategoryFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/CategoryFilter.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.filters;
+
+import java.util.List;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+
+public class CategoryFilter implements PackageFilter {
+
+	private String category;
+
+	public CategoryFilter(String type) {
+		this.category = type;
+	}
+
+	@Override
+	public String toString() {
+		return category;
+	}
+
+	public boolean match(PackageInfo pkg) {
+		List<String> list = pkg.getCategories();
+		if (list.contains(category)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/CategoryFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/NameDescriptionOrCodeFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/NameDescriptionOrCodeFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/NameDescriptionOrCodeFilter.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.filters;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class NameDescriptionOrCodeFilter implements PackageFilter {
+
+	private String filterString;
+
+	public NameDescriptionOrCodeFilter(String filterString) {
+		this.filterString = filterString;
+	}
+
+	public void setFilter(String filter) {
+		this.filterString = filter;
+	}
+
+	public String getFilter() {
+		return this.filterString;
+	}
+
+	public boolean match(PackageInfo pkg) {
+		Boolean matchesName;
+		Boolean matchesDescription;
+		Boolean matchesCode;
+		String regularExpressionString = "(?i).*" + filterString + ".*";
+		String packageString;
+
+		packageString = pkg.getName();
+		matchesName = packageString.matches(regularExpressionString);
+		packageString = pkg.getDescription();
+		matchesDescription = packageString.matches(regularExpressionString);
+		packageString = pkg.getCode();
+		matchesCode = packageString.matches(regularExpressionString);
+
+		return matchesName || matchesDescription || matchesCode;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/NameDescriptionOrCodeFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/TypeFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/TypeFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/TypeFilter.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.filters;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class TypeFilter implements PackageFilter {
+
+	private String type;
+
+	public TypeFilter(String type) {
+		this.type = type;
+	}
+
+	@Override
+	public String toString() {
+		return this.type;
+	}
+
+	public boolean match(PackageInfo pkg) {
+		return this.type.equals(pkg.getType());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/TypeFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OfficialRecommendedCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OfficialRecommendedCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OfficialRecommendedCellRenderer.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.renderers;
+
+import java.awt.Component;
+import java.net.URL;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.PackageOfficialRecommended;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class OfficialRecommendedCellRenderer extends DefaultTableCellRenderer {
+
+	private static final long serialVersionUID = 1195015856704835320L;
+
+	private DefaultSwingInstallerManager swingInstallerManager;
+
+	public OfficialRecommendedCellRenderer() {
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+	}
+
+	@Override
+	public Component getTableCellRendererComponent(JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int column) {
+
+		Icon icon;
+		PackageOfficialRecommended status = (PackageOfficialRecommended) value;
+		JLabel check = new JLabel();
+		URL resource;
+
+		switch (status) {
+
+		case OFFICIAL_RECOMMENDED:
+			resource = this.getClass().getResource(
+					"/images/officialRecommended.png");
+			icon = new ImageIcon(resource);
+			check.setToolTipText(swingInstallerManager
+					.getText("_official_recommended"));
+			check.setIcon(icon);
+
+			return check;
+
+		case OFFICIAL_NOT_RECOMMENDED:
+			resource = this.getClass().getResource(
+					"/images/officialNotRecommended.png");
+			icon = new ImageIcon(resource);
+			check.setToolTipText(swingInstallerManager.getText("_official"));
+			check.setIcon(icon);
+
+			return check;
+
+		case NOT_OFFICIAL_RECOMMENDED:
+			resource = this.getClass().getResource(
+					"/images/notOfficialRecommended.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_not_official_recommended"));
+			return check;
+
+		case NOT_OFFICIAL_NOT_RECOMMENDED:
+			resource = this.getClass().getResource("/images/notOfficial.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check
+					.setToolTipText(swingInstallerManager
+							.getText("_not_official"));
+			return check;
+
+		default:
+			// no image as default
+			return check;
+
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OfficialRecommendedCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/AbstractTablePackageInfoCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/AbstractTablePackageInfoCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/AbstractTablePackageInfoCellRenderer.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.renderers;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableModel;
+
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.TablePackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractTablePackageInfoCellRenderer extends
+		DefaultTableCellRenderer {
+
+	private static final long serialVersionUID = -8534540354786328208L;
+
+	@Override
+	public Component getTableCellRendererComponent(JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int column) {
+
+        Component component =
+            super.getTableCellRendererComponent(table,
+				value, isSelected, hasFocus, row, column);
+
+		TableModel tableModel = table.getModel();
+
+		if (tableModel instanceof PackagesTableModel) {
+			PackagesTableModel packagesTableModel = (PackagesTableModel) tableModel;
+
+			TablePackageInfo info = packagesTableModel.getPackageInfo(row);
+
+            component =
+                getTableCellRendererComponent(info, component, table,
+					value, isSelected, hasFocus, row, column);
+		}
+
+        // Make sure the row height allows the cell renderer to fit in height
+        Dimension dim = component.getPreferredSize();
+        if (dim.height > table.getRowHeight()) {
+            table.setRowHeight(dim.height);
+        }
+
+        return component;
+	}
+
+	protected abstract Component getTableCellRendererComponent(
+			TablePackageInfo info, Component defaultComponent, JTable table,
+			Object value, boolean isSelected, boolean hasFocus, int row,
+			int column);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/AbstractTablePackageInfoCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OsAndArchitectureCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OsAndArchitectureCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OsAndArchitectureCellRenderer.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.renderers;
+
+import java.awt.Component;
+import java.net.URL;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.PackageOsAndArchitecture;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class OsAndArchitectureCellRenderer extends DefaultTableCellRenderer {
+
+	private static final long serialVersionUID = 3767874502044161245L;
+
+	public OsAndArchitectureCellRenderer() {
+	}
+
+	@Override
+	public Component getTableCellRendererComponent(JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int column) {
+
+		String tooltip;
+		Icon icon;
+		URL resource;
+		JLabel check = new JLabel();
+		PackageOsAndArchitecture osArch = (PackageOsAndArchitecture) value;
+
+		if( InstallerManager.OS.ALL.equalsIgnoreCase(osArch.os) ) {
+			return check;
+		}  
+                
+                String oslabel = osArch.os;
+		if( InstallerManager.OS.LINUX.equalsIgnoreCase(osArch.os) ) {
+                    oslabel = "Linux";
+		} else if( InstallerManager.OS.WINDOWS.equalsIgnoreCase(osArch.os) ) {
+                    oslabel = "Windows";
+		}
+                
+                if( InstallerManager.ARCH.ALL.equalsIgnoreCase(osArch.arch) ) {
+                    tooltip = oslabel;
+                } else if( InstallerManager.ARCH.X86.equalsIgnoreCase(osArch.arch) ) {
+                    tooltip = oslabel + " 32 bits";
+                } else if( InstallerManager.ARCH.X86_64.equalsIgnoreCase(osArch.arch) ) {
+                    tooltip = oslabel + " 64 bits";
+                } else {
+                    tooltip = oslabel + " (" + osArch.arch +")";
+                }
+
+                try {
+			resource = this.getClass().getResource("/images/platform_14x14_"+osArch.os+"_"+osArch.arch+".png");
+		} catch( Exception ex) {
+			resource = null;
+		}
+		if( resource == null ) {
+			resource = this.getClass().getResource("/images/platform_14x14_unknow_unknow.png");
+		}
+		icon = new ImageIcon(resource);
+		check.setIcon(icon);
+		check.setToolTipText(tooltip);
+		return check;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/OsAndArchitectureCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellEditor.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.renderers;
+
+import java.awt.Component;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.JCheckBox;
+import javax.swing.JTable;
+
+import org.gvsig.installer.swing.impl.execution.panel.SelectPackagesPanel;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.PackageStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class InstallStatusCellEditor extends DefaultCellEditor {
+
+	private static final long serialVersionUID = 1271382732175530111L;
+	PackageStatus status;
+	SelectPackagesPanel panel;
+
+	public InstallStatusCellEditor(SelectPackagesPanel selectPackagesPanel) {
+		super(new JCheckBox());
+		this.panel = selectPackagesPanel;
+	}
+
+	@Override
+	public Component getTableCellEditorComponent(JTable arg0, Object value,
+			boolean isSelected, int row, int col) {
+		JCheckBox check = (JCheckBox) this.getComponent();
+		status = (PackageStatus) value;
+
+		switch (status) {
+
+		case INSTALLED:
+			check.setEnabled(true);
+			check.setSelected(false);
+			break;
+
+		case TO_REINSTALL:
+			check.setEnabled(true);
+			check.setSelected(true);
+			break;
+
+		case NOT_INSTALLED:
+			check.setEnabled(true);
+			check.setSelected(false);
+			break;
+
+		case TO_INSTALL:
+			check.setEnabled(true);
+			check.setSelected(true);
+			break;
+
+		case INSTALLED_NOT_INSTALLABLE:
+			check.setEnabled(false);
+			break;
+
+		case INSTALLATION_NOT_AVAILABLE:
+			check.setEnabled(false);
+			check.setSelected(false);
+			break;
+
+		case BROKEN:
+			check.setEnabled(false);
+			check.setSelected(false);
+			break;
+
+		default:
+			check.setSelected(false);
+			check.setEnabled(false);
+			break;
+		}
+		return check;
+	}
+
+	@Override
+	public Object getCellEditorValue() {
+		JCheckBox check = (JCheckBox) this.getComponent();
+		switch (status) {
+		case INSTALLED:
+			if (check.isSelected()) {
+				status = PackageStatus.TO_REINSTALL;
+			}
+			break;
+
+		case TO_REINSTALL:
+			if (!check.isSelected()) {
+				status = PackageStatus.INSTALLED;
+			}
+			break;
+
+		case NOT_INSTALLED:
+			if (check.isSelected()) {
+				status = PackageStatus.TO_INSTALL;
+			}
+			break;
+
+		case TO_INSTALL:
+			if (!check.isSelected()) {
+				status = PackageStatus.NOT_INSTALLED;
+			}
+			break;
+
+		default:
+			break;
+		}
+		return status;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellRenderer.java	(revision 42196)
@@ -0,0 +1,130 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.renderers;
+
+import java.awt.Component;
+import java.net.URL;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.PackageStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class InstallStatusCellRenderer extends DefaultTableCellRenderer {
+
+	private static final long serialVersionUID = 1195015856704835320L;
+
+	private DefaultSwingInstallerManager swingInstallerManager;
+
+	public InstallStatusCellRenderer() {
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+	}
+
+	@Override
+	public Component getTableCellRendererComponent(JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int column) {
+
+		Icon icon;
+		PackageStatus status = (PackageStatus) value;
+		JLabel check = new JLabel();
+		URL resource;
+
+		switch (status) {
+
+		case INSTALLED:
+			resource = this.getClass().getResource("/images/installed.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_already_installed,_check_to_reinstall"));
+			return check;
+
+		case TO_REINSTALL:
+			resource = this.getClass().getResource("/images/toReinstall.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_checked_to_reinstall"));
+			return check;
+
+		case NOT_INSTALLED:
+			resource = this.getClass().getResource("/images/notInstalled.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_not_installed,_check_to_install"));
+			return check;
+
+		case TO_INSTALL:
+			resource = this.getClass().getResource("/images/toInstall.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_checked_to_install"));
+			return check;
+
+		case INSTALLED_NOT_INSTALLABLE:
+			resource = this.getClass().getResource(
+					"/images/installedNotInstallable.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_already_installed_but_not_installable"));
+			return check;
+			
+		case BROKEN:
+			resource = this.getClass().getResource(
+					"/images/broken.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_broken_package"));
+			return check;
+
+		case INSTALLATION_NOT_AVAILABLE:
+			resource = this.getClass().getResource(
+					"/images/broken.png");
+			icon = new ImageIcon(resource);
+			check.setIcon(icon);
+			check.setToolTipText(swingInstallerManager
+					.getText("_can_install_package_at_this_moment"));
+			return check;
+
+		default:
+			return check;
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstallStatusCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstalledPackageCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstalledPackageCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstalledPackageCellRenderer.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel.renderers;
+
+import java.awt.Component;
+
+import javax.swing.JTable;
+
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.TablePackageInfo;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class InstalledPackageCellRenderer extends
+		AbstractTablePackageInfoCellRenderer {
+
+	private static final long serialVersionUID = 746811910254748285L;
+
+	public InstalledPackageCellRenderer() {
+	}
+
+	@Override
+	protected Component getTableCellRendererComponent(TablePackageInfo info,
+			Component defaultComponent, JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int column) {
+
+		// defaultComponent.setForeground(Color.black);
+
+		return defaultComponent;
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/renderers/InstalledPackageCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectBundlesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectBundlesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectBundlesPanel.java	(revision 42196)
@@ -0,0 +1,293 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.execution.panel;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JComboBox;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.gvsig.gui.beans.openfile.FileFilter;
+import org.gvsig.gui.beans.openfile.FileTextField;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager.UrlAndLabel;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectBundlesPanel extends JPanel implements ItemListener,
+		DocumentListener {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = -6580729307001414868L;
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private JRadioButton fileRadioButton;
+	private ButtonGroup buttonGroup;
+	private JPanel northPanel;
+	private FileTextField selectFileText;
+	private JRadioButton standardRadioButton;
+	private JComboBox downloadURL;
+	private JRadioButton urlRadioButton;
+	private final List<UrlAndLabel> defaultDownloadURL;
+
+	public SelectBundlesPanel(List<UrlAndLabel> defaultDownloadURL2, File installFolder) {
+		super();
+		this.defaultDownloadURL = defaultDownloadURL2;
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+		initListeners();
+		
+		String[] files = installFolder.list();
+		
+		if (files.length >0){
+			standardRadioButton.setSelected(true);
+			urlRadioButton.setSelected(false);	
+		} else {
+			urlRadioButton.setSelected(true);	
+			standardRadioButton.setEnabled(false);
+		}
+	}
+
+	private void initListeners() {
+		standardRadioButton.addItemListener(this);
+		fileRadioButton.addItemListener(this);
+		urlRadioButton.addItemListener(this);
+		Object obj = selectFileText.getComponent(0);
+		if ((obj != null) && (obj instanceof JTextField)) {
+			((JTextField) obj).getDocument().addDocumentListener(this);
+		}
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		northPanel = new JPanel();
+		standardRadioButton = new JRadioButton();
+		fileRadioButton = new JRadioButton();
+		urlRadioButton = new JRadioButton();
+		selectFileText = new FileTextField();
+		selectFileText.setFileFilter(new FileFilter() {
+
+			private String packageExt = swingInstallerManager
+					.getInstallerManager().getDefaultPackageFileExtension();
+			private String packageSetExt = swingInstallerManager
+					.getInstallerManager().getDefaultPackageSetFileExtension();
+			private String indexSetExt = swingInstallerManager
+					.getInstallerManager().getDefaultIndexSetFileExtension();
+
+			@Override
+			public String getDescription() {
+			    
+				return swingInstallerManager.getText(
+				    "_gvSIG_packages_and_packages_and_index_sets")
+				    + " (*." + packageExt + ", *." + packageSetExt
+				    + ", *." + indexSetExt + ")";
+			}
+
+			@Override
+			public boolean accept(File file) {
+				if (file.isFile()) {
+					String name = file.getName().toLowerCase();
+					return name.endsWith(packageExt)
+							|| name.endsWith(packageSetExt)
+							|| name.endsWith(indexSetExt);
+				}
+				return true;
+			}
+
+			@Override
+			public String getDefaultExtension() {
+				return packageSetExt;
+			}
+		});
+
+		downloadURL = new JComboBox();
+		downloadURL.setEditable(true);
+		if (defaultDownloadURL != null) {
+			for (int i = 0; i < defaultDownloadURL.size(); i++) {
+				downloadURL.addItem(defaultDownloadURL.get(i));
+			}
+		}
+
+		buttonGroup = new ButtonGroup();
+
+		buttonGroup.add(standardRadioButton);
+		buttonGroup.add(fileRadioButton);
+		buttonGroup.add(urlRadioButton);
+
+		setLayout(new BorderLayout());
+
+		northPanel.setLayout(new GridBagLayout());
+
+		standardRadioButton.setText(swingInstallerManager
+				.getText("_standard_installation") +
+				" (" +
+				swingInstallerManager.getText("_install_addons_in_gvsig_standard_dist") +
+				")");
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		northPanel.add(standardRadioButton, gridBagConstraints);
+
+		fileRadioButton.setText(swingInstallerManager
+				.getText("_installation_from_file") +
+		             " (" +
+		             swingInstallerManager.getText("_install_addons_in_gvspki_or_gvspks_file") +
+		             ")");
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		northPanel.add(fileRadioButton, gridBagConstraints);
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new Insets(2, 20, 2, 2);
+		northPanel.add(selectFileText, gridBagConstraints);
+
+		urlRadioButton.setText(swingInstallerManager
+				.getText("_installation_from_url") +
+	             " (" +
+	             swingInstallerManager.getText("_install_addons_from_remote_repo") +
+	             ")");
+		
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 3;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		northPanel.add(urlRadioButton, gridBagConstraints);
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 4;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new Insets(2, 20, 2, 2);
+		northPanel.add(downloadURL, gridBagConstraints);
+
+		add(northPanel, java.awt.BorderLayout.NORTH);
+	}
+
+	public void itemStateChanged(ItemEvent e) {
+		selectFileText.setEnabled(fileRadioButton.isSelected());
+		downloadURL.setEnabled(urlRadioButton.isSelected());
+		downloadURL.setEditable(urlRadioButton.isSelected());
+		checkNextButtonEnabled();
+	}
+
+	protected File getSelectedFile() {
+		return selectFileText.getSelectedFile();
+	}
+
+	protected URL getSelectedURL() throws MalformedURLException {
+		Object value = downloadURL.getSelectedItem();
+		if( value instanceof UrlAndLabel) {
+			// clicked fron the combo
+			return ((UrlAndLabel)value).getURL();
+		} else {
+			// String entered in the text field
+			return new URL(value.toString());
+		}
+
+	}
+
+	protected boolean isStandardSelected() {
+		return standardRadioButton.isSelected();
+	}
+
+	protected boolean isFileSelected() {
+		return fileRadioButton.isSelected();
+	}
+
+	protected boolean isURLSelected() {
+		return urlRadioButton.isSelected();
+	}
+
+	protected boolean isNextButtonEnabled() {
+		if (isStandardSelected()) {
+			return true;
+		}
+		if (isFileSelected()) {
+			File file = selectFileText.getSelectedFile();
+			if (file == null) {
+				return false;
+			}
+			return file.exists();
+		}
+		if (isURLSelected()) {
+			try {
+				getSelectedURL();
+				return true;
+			} catch (MalformedURLException e) {
+				return false;
+			}
+		}
+		return false;
+	}
+
+	protected void checkNextButtonEnabled() {
+
+	}
+
+	public void changedUpdate(DocumentEvent e) {
+		checkNextButtonEnabled();
+	}
+
+	public void insertUpdate(DocumentEvent e) {
+		checkNextButtonEnabled();
+	}
+
+	public void removeUpdate(DocumentEvent e) {
+		checkNextButtonEnabled();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectBundlesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/TypicalOrAdvancedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/TypicalOrAdvancedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/TypicalOrAdvancedPanel.java	(revision 42196)
@@ -0,0 +1,139 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class TypicalOrAdvancedPanel extends JPanel implements ItemListener,
+		DocumentListener {
+
+	private static final long serialVersionUID = 8488517767926838568L;
+
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+
+	private JPanel northPanel;
+	private JRadioButton typicalModeRadioButton;
+	private JRadioButton advancedModeRadioButton;
+	private ButtonGroup buttonGroup;
+
+	public TypicalOrAdvancedPanel() {
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+		initListeners();
+		typicalModeRadioButton.setSelected(true);
+
+	}
+
+	private void initListeners() {
+		typicalModeRadioButton.addItemListener(this);
+		advancedModeRadioButton.addItemListener(this);
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		northPanel = new JPanel();
+		typicalModeRadioButton = new JRadioButton();
+		advancedModeRadioButton = new JRadioButton();
+
+		buttonGroup = new ButtonGroup();
+
+		buttonGroup.add(typicalModeRadioButton);
+		buttonGroup.add(advancedModeRadioButton);
+
+		setLayout(new BorderLayout());
+
+		northPanel.setLayout(new GridBagLayout());
+
+		typicalModeRadioButton.setText(swingInstallerManager
+				.getText("_typical_installation"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		northPanel.add(typicalModeRadioButton, gridBagConstraints);
+
+		advancedModeRadioButton.setText(swingInstallerManager
+				.getText("_advanced_installation"));
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		northPanel.add(advancedModeRadioButton, gridBagConstraints);
+
+		add(northPanel, java.awt.BorderLayout.WEST);
+	}
+
+	protected boolean isTypicalModeSelected() {
+		return typicalModeRadioButton.isSelected();
+	}
+
+	protected boolean isAdvancedModeSelected() {
+		return advancedModeRadioButton.isSelected();
+	}
+
+	protected void setEnableTypicalMode(boolean active) {
+		if (active) {
+			typicalModeRadioButton.setSelected(true);
+		} else {
+			advancedModeRadioButton.setSelected(true);
+		}
+		typicalModeRadioButton.setEnabled(active);
+	}
+
+	public void itemStateChanged(ItemEvent arg0) {
+	}
+
+	public void changedUpdate(DocumentEvent arg0) {
+	}
+
+	public void insertUpdate(DocumentEvent arg0) {
+	}
+
+	public void removeUpdate(DocumentEvent arg0) {
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/TypicalOrAdvancedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagePropertiesFilterPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagePropertiesFilterPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagePropertiesFilterPanel.java	(revision 42196)
@@ -0,0 +1,226 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListModel;
+
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.panel.filters.AllFilter;
+import org.gvsig.installer.swing.impl.execution.panel.filters.CategoryFilter;
+import org.gvsig.installer.swing.impl.execution.panel.filters.PackageFilter;
+import org.gvsig.installer.swing.impl.execution.panel.filters.TypeFilter;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class PackagePropertiesFilterPanel extends JPanel implements
+		ActionListener {
+
+	private static final long serialVersionUID = 3767011079359743742L;
+
+	public enum PropertiesFilter {
+		CATEGORIES, TYPES
+	}
+
+	private PackagesTablePanel packagesTablePanel;
+
+	private JScrollPane filterScrollPane;
+	private JList jList;
+//	private PropertiesFilter optionFilter = null;
+	private DefaultListModel model = null;
+
+	private DefaultSwingInstallerManager manager;
+
+	public PackagePropertiesFilterPanel(PackagesTablePanel packagesTablePanel) {
+		this.packagesTablePanel = packagesTablePanel;
+		manager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	private void initComponents() {
+
+		model = new DefaultListModel();
+		jList = new JList(model);
+
+		filterScrollPane = new JScrollPane(jList);
+		MyMouseListener mouseListener = new MyMouseListener();
+		// filterScrollPane.addMouseListener(mouseListener);
+		jList.addMouseListener(mouseListener);
+
+		JButton categoriesButton = new JButton(manager.getText("_categories"));
+		categoriesButton.setActionCommand("categories");
+		categoriesButton.addActionListener(this);
+
+		JButton typesButton = new JButton(manager.getText("_types"));
+		typesButton.setActionCommand("types");
+		typesButton.addActionListener(this);
+
+		this.setLayout(new GridBagLayout());
+
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 1;
+		// gridBagConstraints.gridheight = 3;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		this.add(filterScrollPane, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 0;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		this.add(categoriesButton, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.weighty = 0;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		this.add(typesButton, gridBagConstraints);
+
+	}
+
+	public void resetPanel() {
+		model.removeAllElements();
+		
+		// optionFilter = null;
+		PackageFilter filter = null;
+		packagesTablePanel.setFilter(filter);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+
+		InstallPackageService service = packagesTablePanel
+				.getSelectPackagesPanel().getModel().getInstallPackageService();
+
+		if ("categories".equals(e.getActionCommand())) {
+		    
+		    packagesTablePanel.resetPanel();
+		    loadCategories();
+			
+		} else {
+			if ("types".equals(e.getActionCommand())) {
+//				this.optionFilter = PropertiesFilter.TYPES;
+				model.removeAllElements();
+				packagesTablePanel.resetPanel();
+
+				List<String> types = service.getTypes();
+
+				model.add(0,new AllFilter());
+				if (types != null) {
+					for (int i = 0; i < types.size(); i++) {
+						model.add(i+1, new TypeFilter(types.get(i)));
+					}
+				}
+			}
+		}
+	}
+
+	private class MyMouseListener implements MouseListener {
+
+		public void mouseClicked(MouseEvent e) {
+			int i = jList.getSelectedIndex();
+			if (i >= 0) {
+				ListModel listModel = jList.getModel();
+				PackageFilter filter = (PackageFilter) listModel.getElementAt(i);
+				packagesTablePanel.setFilter(filter);
+				
+//				
+//				// update packets list to filter
+//				if (optionFilter == PropertiesFilter.TYPES) {
+//					TypeFilter typeFilter = new TypeFilter(element);
+//					packagesTablePanel.setFilter(typeFilter);
+//				} else if (optionFilter == PropertiesFilter.CATEGORIES) {
+//					CategoryFilter categoryFilter = new CategoryFilter(element);
+//					packagesTablePanel.setFilter(categoryFilter);
+//				}
+
+			}
+		}
+
+		public void mouseEntered(MouseEvent e) {
+		}
+
+		public void mouseExited(MouseEvent e) {
+		}
+
+		public void mousePressed(MouseEvent e) {
+		}
+
+		public void mouseReleased(MouseEvent e) {
+		}
+
+	}
+	
+	private void loadCategories() {
+	       
+	    InstallPackageService service = packagesTablePanel
+               .getSelectPackagesPanel().getModel().getInstallPackageService();
+        model.removeAllElements();
+
+        List<String> categories = service.getCategories();
+
+        model.add(0,new AllFilter());
+        if (categories != null) {
+            for (int i = 0; i < categories.size(); i++) {
+                model.add(i+1, new CategoryFilter(categories.get(i)));
+            }
+        }
+        jList.setSelectedIndex(0);
+	    
+	}
+	
+	public void setInitialFilter() {
+	    loadCategories();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagePropertiesFilterPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectPackagesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectPackagesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectPackagesPanel.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.execution.panel;
+
+import java.awt.BorderLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JPanel;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.DefaultInstallPackageWizard;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel;
+import org.gvsig.installer.swing.impl.execution.wizard.SelectPackagesWizard;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class SelectPackagesPanel extends JPanel {
+
+	private SelectPackagesWizard wizard;
+	private static final long serialVersionUID = -7554097983061858479L;
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private PackagesTablePanel packagesTablePanel;
+
+	private PackagesTableModel pluginsTableModel = null;
+
+	public SelectPackagesPanel(SelectPackagesWizard selectPackagesWizard) {
+		super();
+		this.wizard = selectPackagesWizard;
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public void updateTableModel(PackagesTableModel pluginsTableModel) {
+		packagesTablePanel.setTableModel(pluginsTableModel);
+		add(packagesTablePanel, BorderLayout.CENTER);
+	}
+
+	public void selectPackages() {
+		packagesTablePanel.selectPackages();
+	}
+
+	private void initComponents() {
+		setLayout(new BorderLayout(0, 0));
+
+		packagesTablePanel = new PackagesTablePanel(this);
+		add(packagesTablePanel, BorderLayout.CENTER);
+	}
+
+	public List<PackageInfo> getPackagesToInstall() {
+
+		List<PackageInfo> packages = packagesTablePanel.getPackagesToInstall();
+
+		List<PackageInfo> packagesToInstall = new ArrayList<PackageInfo>();
+		packagesToInstall.addAll(packages);
+		return packagesToInstall;
+	}
+
+	public boolean isPackageSelected() {
+		return packagesTablePanel.isPackageSelected();
+	}
+
+	public void checkIfPluginSelected() {
+		wizard.checkIfPluginSelected();
+	}
+
+	public void packageSelectionChanged(Object value, int row, int column) {
+	}
+
+	public void updatePanel() {
+
+		InstallPackageService installerExecutionService = wizard
+				.getDefaultInstallPackageWizard()
+				.getInstallerExecutionService();
+
+		if (pluginsTableModel == null) {
+			pluginsTableModel = new PackagesTableModel(swingInstallerManager,
+					installerExecutionService, true);
+		}
+		pluginsTableModel.updatePackages();
+
+		updateTableModel(pluginsTableModel);
+
+		if (wizard.isDefaultPackagesSelectionSet()) {
+			pluginsTableModel.selectDefaultPackages();
+		}
+		
+		
+		
+		
+
+	}
+
+	public DefaultInstallPackageWizard getDefaultInstallPackageWizard() {
+		return wizard.getDefaultInstallPackageWizard();
+	}
+
+	public PackagesTableModel getModel() {
+		return this.pluginsTableModel;
+	}
+
+	public void clearPanel() {
+		packagesTablePanel.clearAllPanels();
+	}
+
+    /**
+     * 
+     */
+    public void setInitialFilter() {
+        packagesTablePanel.setInitialFilter();
+        
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/SelectPackagesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/PackagesTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/PackagesTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/PackagesTableModel.java	(revision 42196)
@@ -0,0 +1,588 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.execution.panel.model;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.table.AbstractTableModel;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.panel.filters.NameDescriptionOrCodeFilter;
+import org.gvsig.installer.swing.impl.execution.panel.filters.PackageFilter;
+import org.gvsig.tools.packageutils.PackageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PackagesTableModel extends AbstractTableModel {
+
+	private static final long serialVersionUID = -454014676003979512L;
+	private Logger logger = LoggerFactory.getLogger(PackagesTableModel.class);
+
+	public enum PackageStatus {
+		INSTALLED, NOT_INSTALLED, TO_REINSTALL, TO_INSTALL, INSTALLED_NOT_INSTALLABLE, BROKEN, INSTALLATION_NOT_AVAILABLE;
+	}
+
+	public enum PackageOfficialRecommended {
+		OFFICIAL_NOT_RECOMMENDED, OFFICIAL_RECOMMENDED, NOT_OFFICIAL_RECOMMENDED, NOT_OFFICIAL_NOT_RECOMMENDED
+	}
+
+	public class PackageOsAndArchitecture {
+		public String os;
+		public String arch;
+	}
+	
+//	
+//	public enum PackageOsAndArchitecture {
+//		WINDOLS_32, WINDOLS_64, LINUX_32, LINUX_64, ALL, OTHER
+//	}
+
+	private TablePackageInfo[] currentlyVisiblePackages = null;
+
+	private final String[] columnNames;
+
+	private InstallerManager installerManager = InstallerLocator
+			.getInstallerManager();
+	private InstallPackageService installerExecutionService;
+
+	boolean isOfficial;
+	private NameDescriptionOrCodeFilter packageFastFilter = null;
+	private PackageFilter packageFilter = null;
+	
+	private Set<PackageInfo> selectedPackages = new HashSet<PackageInfo>();
+	private Map<String, TablePackageInfo> allPackages = null;
+
+	public PackagesTableModel(SwingInstallerManager swingInstallerManager,
+			InstallPackageService installerExecutionService, boolean isOfficial) {
+
+		this.installerExecutionService = installerExecutionService;
+		this.isOfficial = isOfficial;
+		
+		Map<String, TablePackageInfo> infos = getDefaultPackages();
+
+		currentlyVisiblePackages = infos.values().toArray(
+				new TablePackageInfo[infos.size()]);
+		sortInstallerInfos();
+
+		columnNames = new String[] {
+				"", // Check column
+				"", "", swingInstallerManager.getText("_name"),
+				swingInstallerManager.getText("_version"),
+				swingInstallerManager.getText("_type") };
+
+	}
+
+	private void sortInstallerInfos() {
+		Arrays.sort(currentlyVisiblePackages, new Comparator<TablePackageInfo>() {
+
+			public int compare(TablePackageInfo o1, TablePackageInfo o2) {
+				PackageInfo p1 = o1.getPackageInfo();
+				PackageInfo p2 = o2.getPackageInfo();
+				String s1 = p1.getName() + "/" + p1.getVersion().fullFormat() + "/" + p1.getOperatingSystem() + "/" + p1.getArchitecture();
+				String s2 = p2.getName() + "/" + p2.getVersion().fullFormat() + "/" + p2.getOperatingSystem() + "/" + p2.getArchitecture();
+				return s1.compareToIgnoreCase(s2);
+			}
+		});
+	}
+
+	private boolean canSetAsDefault(List<String> defaultIDs, PackageInfo pkg) {
+    	String system_os = installerManager.getOperatingSystem();
+    	String pkg_os = pkg.getOperatingSystem(); 
+    	String pkg_arch = pkg.getArchitecture();
+        if (defaultIDs != null) {
+            for (int j = 0; j < defaultIDs.size(); j++) {
+            	String code = defaultIDs.get(j);
+                if (pkg.matchID(code)) {
+                    if (pkg_os.equals(system_os) || pkg_os.equals(PackageManager.OS.ALL)) {
+                    	// De momento solo marcamos paquetes de arquitectura x86, 32bits
+                		if( PackageManager.ARCH.ALL.equalsIgnoreCase(pkg_arch) ) {
+                			return true;
+                		} else if( PackageManager.ARCH.X86.equalsIgnoreCase(pkg_arch) ) {
+                			return true;
+                		}
+                    }
+                }
+            }
+        }
+        logger.info("package '"+pkg.getCode()+"/"+pkg_os+"/"+pkg_arch+"' don't install as default.");
+		return false;
+	}
+	
+    private Map<String, TablePackageInfo> getDefaultPackages() {
+
+        if (allPackages == null) {
+            List<String> defaultIDs =
+                installerExecutionService.getDefaultSelectedPackagesIDs();
+            allPackages =
+                new HashMap<String, PackagesTableModel.TablePackageInfo>();
+            // Add installable package infos
+            for (int i = 0; i < installerExecutionService.getPackageCount(); i++) {
+                PackageInfo installerInfo =
+                    installerExecutionService.getPackageInfo(i);
+                TablePackageInfo info =
+                    new TablePackageInfo(installerInfo, false, true);
+            	PackageInfo pkg = info.getPackageInfo();
+            	if( canSetAsDefault(defaultIDs, pkg) ) {
+            		info.setDefault(true);
+            	}
+                allPackages.put(info.getID(), info);
+            }
+            // Add already installed package infos
+            try {
+                PackageInfo[] installedPackages =
+                    installerManager.getInstalledPackages();
+
+                for (int i = 0; i < installedPackages.length; i++) {
+                    TablePackageInfo info =
+                        new TablePackageInfo(installedPackages[i], true, false);
+                    TablePackageInfo x = allPackages.get(info.getID());
+                    if (x == null) {
+                        allPackages.put(info.getID(), info);
+                    } else {
+                        x.setInstalled(true);
+                    }
+                }
+            } catch (MakePluginPackageServiceException e) {
+                throw new RuntimeException(e);
+            }
+            
+            // ==========================================
+            // Set default
+            
+            TablePackageInfo tpi = null;
+            String os = null;
+            List<String> idList = installerExecutionService
+                .getDefaultSelectedPackagesIDs();
+            
+            if (idList != null) {
+                for (int i=0; i<idList.size(); i++) {
+                    
+                    tpi = getMatch(idList.get(i), allPackages);
+                    if (tpi != null) {
+                        os = tpi.getPackageInfo().getOperatingSystem();
+                        if (os.equals(installerManager.getOperatingSystem())
+                            || os.equals("all")) {
+                            
+                            tpi.setDefault(true);
+                        }
+                    }
+                }
+            }
+        }
+        return allPackages;
+    }
+    
+    private TablePackageInfo getMatch(String id, Map<String, TablePackageInfo> map) {
+        
+        Iterator<TablePackageInfo> iter = map.values().iterator();
+        TablePackageInfo item = null;
+        while (iter.hasNext()) {
+            item = iter.next();
+            if (item.getPackageInfo().matchID(id)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+	// get filtered packages
+	private Map<String, TablePackageInfo> getFilteredPackages(
+			Map<String, TablePackageInfo> packageInfos) {
+
+		Map<String, TablePackageInfo> infos = new HashMap<String, TablePackageInfo>();
+
+		TablePackageInfo[] packs = packageInfos.values().toArray(
+				new TablePackageInfo[infos.size()]);
+
+		for (int i = 0; i < packs.length; i++) {
+			PackageInfo installerInfo = packs[i].getPackageInfo();
+
+			if (packageFilter.match(installerInfo)) {
+				TablePackageInfo info = packs[i];
+				infos.put(installerInfo.getID(), info);
+			}
+		}
+		return infos;
+	}
+
+	// get fast filtered packages (by name or description)
+	private Map<String, TablePackageInfo> getFastFilteredPackages(
+			Map<String, TablePackageInfo> packageInfos) {
+
+		Map<String, TablePackageInfo> infos = new HashMap<String, TablePackageInfo>();
+
+		TablePackageInfo[] packs = packageInfos.values().toArray(
+				new TablePackageInfo[infos.size()]);
+
+		for (int i = 0; i < packs.length; i++) {
+			PackageInfo installerInfo = packs[i].getPackageInfo();
+
+			if (packageFastFilter.match(installerInfo)) {
+				TablePackageInfo info = packs[i];
+				infos.put(installerInfo.getID(), info);
+			}
+		}
+		return infos;
+	}
+
+	public void updatePackages() {
+
+		Map<String, TablePackageInfo> infos = getDefaultPackages();
+
+		// check if there is a filter set (category, type, etc)
+		if (isPackageFilterSet()) {
+			infos = getFilteredPackages(infos);
+		}
+
+		// check if there is any filter set (fastFilter)
+		if (isFastFilterSet()) {
+			infos = getFastFilteredPackages(infos);
+		}
+
+		currentlyVisiblePackages = infos.values().toArray(
+				new TablePackageInfo[infos.size()]);
+		sortInstallerInfos();
+	}
+
+
+	public void selectDefaultPackages() {
+	    
+	    Iterator<String> iter = allPackages.keySet().iterator();
+	    TablePackageInfo tpi = null;
+	    while (iter.hasNext()) {
+	        
+	        tpi = allPackages.get(iter.next());
+	        if (tpi.isDefault()) {
+	            tpi.setSelected(true);
+	        }
+	    }
+	}
+
+	public void selectPackage(PackageInfo pkg) {
+	    
+	    Iterator<String> iter = allPackages.keySet().iterator();
+        TablePackageInfo tpi = null;
+        while (iter.hasNext()) {
+            
+            tpi = allPackages.get(iter.next());
+            if (pkg.equals(tpi.getPackageInfo())) {
+                tpi.setSelected(true);
+                return;
+            }
+        }
+	}
+
+	@Override
+	public Class<?> getColumnClass(int columnIndex) {
+		switch (columnIndex) {
+		case 0:
+			return PackageStatus.class;
+		case 1:
+			return PackageOfficialRecommended.class;
+		case 2:
+			return PackageOsAndArchitecture.class;
+		default:
+			return String.class;
+		}
+	}
+
+	public int getColumnCount() {
+		return columnNames.length;
+	}
+
+	@Override
+	public String getColumnName(int columnIndex) {
+		return columnIndex >= columnNames.length ? ""
+				: columnNames[columnIndex];
+	}
+
+	public int getRowCount() {
+		return currentlyVisiblePackages.length;
+	}
+
+	public Object getValueAt(int rowIndex, int columnIndex) {
+		TablePackageInfo tableInfo = currentlyVisiblePackages[rowIndex];
+		PackageInfo installerInfo = tableInfo.getPackageInfo();
+
+		switch (columnIndex) {
+		case 0:
+			PackageStatus installStatus = checkStatus(rowIndex);
+			return installStatus;
+		case 1:
+			PackageOfficialRecommended officialRecommended = checkOfficialRecommended(rowIndex);
+			return officialRecommended;
+		case 2:
+			PackageOsAndArchitecture packageSystem = checkPackageSystem(rowIndex);
+			return packageSystem;
+		case 3:
+			return installerInfo.getName();
+		case 4:
+			return installerInfo.getVersion();
+		case 5:
+			return installerInfo.getType();
+		default:
+			return "";
+
+		}
+	}
+
+	/**
+	 * @param rowIndex
+	 * @return
+	 */
+	private PackageOsAndArchitecture checkPackageSystem(int rowIndex) {
+		PackageOsAndArchitecture oSArch = new PackageOsAndArchitecture();
+		TablePackageInfo tableInfo = currentlyVisiblePackages[rowIndex];
+		PackageInfo installerInfo = tableInfo.getPackageInfo();
+		oSArch.os = installerInfo.getOperatingSystem();
+		oSArch.arch = installerInfo.getArchitecture();
+		return oSArch;
+	}
+
+	/**
+	 * @return
+	 */
+	private PackageStatus checkStatus(int rowIndex) {
+		TablePackageInfo tableInfo = currentlyVisiblePackages[rowIndex];
+
+		// TODO: checkboxes when a package is broken dont work correctly
+		if (tableInfo.getPackageInfo().isBroken()) {
+			return PackageStatus.BROKEN;
+		}
+		
+		if( !installerManager.hasProviderToThisPackage( tableInfo.getPackageInfo()) ) {
+			return PackageStatus.INSTALLATION_NOT_AVAILABLE;
+		}
+		
+		if (tableInfo.isInstalled()) {
+			if (tableInfo.isInstallable()) {
+				if (tableInfo.isSelected()) {
+					return PackageStatus.TO_REINSTALL;
+				} else {
+					return PackageStatus.INSTALLED;
+				}
+			} else {
+				return PackageStatus.INSTALLED_NOT_INSTALLABLE;
+			}
+
+		} else {
+			if (tableInfo.isSelected()) {
+				return PackageStatus.TO_INSTALL;
+			} else {
+				return PackageStatus.NOT_INSTALLED;
+			}
+		}
+	}
+
+	private PackageOfficialRecommended checkOfficialRecommended(int rowIndex) {
+		TablePackageInfo tableInfo = currentlyVisiblePackages[rowIndex];
+		PackageInfo packageInfo = tableInfo.getPackageInfo();
+
+		if (packageInfo.isOfficial()) {
+			if (currentlyVisiblePackages[rowIndex].isDefault()) {
+				return PackageOfficialRecommended.OFFICIAL_RECOMMENDED;
+			} else {
+				return PackageOfficialRecommended.OFFICIAL_NOT_RECOMMENDED;
+			}
+		} else {
+			if (currentlyVisiblePackages[rowIndex].isDefault()) {
+				return PackageOfficialRecommended.NOT_OFFICIAL_RECOMMENDED;
+			} else {
+				return PackageOfficialRecommended.NOT_OFFICIAL_NOT_RECOMMENDED;
+			}
+		}
+	}
+
+	public PackageInfo getPackageInfoAt(int rowIndex) {
+		return currentlyVisiblePackages[rowIndex].getPackageInfo();
+	}
+
+	public String getDescriptionAt(int rowIndex) {
+		return getPackageInfoAt(rowIndex).getDescription();
+	}
+
+	public URL getSourcesAt(int rowIndex) {
+		return getPackageInfoAt(rowIndex).getSourcesURL();
+	}
+
+	public URL getOwnerUrlAt(int rowIndex) {
+		return getPackageInfoAt(rowIndex).getOwnerURL();
+	}
+
+	public String getOwnerAt(int rowIndex) {
+		return getPackageInfoAt(rowIndex).getOwner();
+	}
+
+	@Override
+	public boolean isCellEditable(int rowIndex, int columnIndex) {
+		return (columnIndex == 0) && currentlyVisiblePackages[rowIndex].isInstallable();
+	}
+
+	@Override
+	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+
+		if (columnIndex == 0) {
+			PackageStatus status = (PackageStatus) aValue;
+			TablePackageInfo tableInfo = currentlyVisiblePackages[rowIndex];
+			switch (status) {
+			case INSTALLED:
+			case NOT_INSTALLED:
+				tableInfo.setSelected(false);
+				break;
+
+			case TO_REINSTALL:
+			case TO_INSTALL:
+				tableInfo.setSelected(true);
+				break;
+			}
+		}
+	}
+
+	public List<PackageInfo> getPackagesToInstall() {
+	    
+	    List<PackageInfo> packageInfosToInstall = new ArrayList<PackageInfo>();
+	    packageInfosToInstall.addAll(selectedPackages);
+	    return packageInfosToInstall;
+	}
+
+	public boolean hasAnyPackageSelected() {
+	    return (selectedPackages.size() > 0);
+	}
+
+	public final class TablePackageInfo {
+
+		private final PackageInfo packageInfo;
+		private boolean isInstalled;
+		private final boolean isInstallable;
+		// private boolean isSelected;
+		private boolean isDefault;
+
+		public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
+				boolean isInstallable) {
+			this(packageInfo, isInstalled, isInstallable, false);
+		}
+
+		public void setInstalled(boolean installed) {
+			this.isInstalled = installed;
+		}
+
+		public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
+				boolean isInstallable, boolean isDefault) {
+			this.packageInfo = packageInfo;
+			this.isInstalled = isInstalled;
+			this.isInstallable = isInstallable;
+			this.isDefault = isDefault;
+		}
+
+		public String getID() {
+			PackageInfo pkg = this.getPackageInfo();
+			return pkg.getID();
+		}
+
+		public PackageInfo getPackageInfo() {
+			return packageInfo;
+		}
+
+		public boolean isInstalled() {
+			return isInstalled;
+		}
+
+		public boolean isInstallable() {
+			return isInstallable;
+		}
+
+		public boolean isSelected() {
+			return selectedPackages.contains(packageInfo);
+		}
+
+		public void setSelected(boolean isSelected) {
+		    if (isSelected) {
+		        selectedPackages.add(packageInfo);
+		    } else {
+		        selectedPackages.remove(packageInfo);
+		    }
+		}
+
+		public void setDefault(boolean isDefault) {
+			this.isDefault = isDefault;
+		}
+
+		public boolean isDefault() {
+			return isDefault;
+		}
+
+	}
+
+	/**
+	 * Returns the TablePackageInfo located in the given row.
+	 * 
+	 * @param row
+	 *            the TablePackageInfo located in the given row
+	 */
+	public TablePackageInfo getPackageInfo(int row) {
+		return currentlyVisiblePackages[row];
+	}
+
+	public void setFilter(PackageFilter filter) {
+		this.packageFilter = filter;
+	}
+
+	public void setFilter(NameDescriptionOrCodeFilter filter) {
+		this.packageFastFilter = filter;
+	}
+
+	private Boolean isFastFilterSet() {
+		return this.packageFastFilter != null;
+	}
+
+	private Boolean isPackageFilterSet() {
+		return this.packageFilter != null;
+	}
+
+	public PackageFilter getFilter() {
+		return this.packageFastFilter;
+	}
+
+	public InstallPackageService getInstallPackageService() {
+		return this.installerExecutionService;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/PackagesTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/IPackageSelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/IPackageSelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/IPackageSelectionListener.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.execution.panel.model;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface IPackageSelectionListener {
+
+	public void packageSelectionChanged(Object value, int row, int column);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/model/IPackageSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/FastFilterButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/FastFilterButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/FastFilterButtonsPanel.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.panel;
+
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.panel.filters.NameDescriptionOrCodeFilter;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class FastFilterButtonsPanel extends JPanel implements ActionListener {
+
+	private static final long serialVersionUID = 3767011079359743742L;
+
+	private PackagesTablePanel panel;
+	private SwingInstallerManager swingInstallerManager;
+
+	private JButton searchButton;
+	private JButton resetButton;
+	private JTextField textField;
+	private NameDescriptionOrCodeFilter filter = null;
+
+	public FastFilterButtonsPanel(PackagesTablePanel panel) {
+		this.panel = panel;
+		swingInstallerManager = SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	private void initComponents() {
+
+		filter = new NameDescriptionOrCodeFilter("");
+
+		JLabel fastFilterLabel = new JLabel(swingInstallerManager
+				.getText("_fast_filter"));
+
+		textField = new JTextField(20);
+
+		MyKeyListener l = new MyKeyListener();
+
+		textField.addKeyListener(l);
+
+		searchButton = new JButton(swingInstallerManager.getText("_search"));
+		searchButton.setActionCommand("search");
+		searchButton.addActionListener(this);
+
+		resetButton = new JButton(swingInstallerManager
+				.getText("_reset_filters"));
+		resetButton.setActionCommand("reset");
+		resetButton.addActionListener(this);
+
+		setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
+
+		add(fastFilterLabel);
+		add(textField);
+		// search button not needed with key listener
+		// add(searchButton);
+		add(resetButton);
+
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if ("search".equals(e.getActionCommand())) {
+			searchAction();
+		} else if ("reset".equals(e.getActionCommand())) {
+			resetAction();
+		}
+	}
+
+	private void searchAction() {
+		filter.setFilter(textField.getText());
+		panel.setFilter(filter);
+	}
+
+	private void resetAction() {
+		this.resetPanel();
+	}
+
+	public void resetPanel() {
+		textField.setText("");
+		filter.setFilter("");
+		panel.setFilter(filter);
+		panel.resetPanel();
+	}
+
+	private class MyKeyListener implements KeyListener {
+
+		public void keyTyped(KeyEvent e) {
+		}
+
+		public void keyReleased(KeyEvent e) {
+			searchAction();
+			textField.requestFocus();
+			textField.setCaretPosition(textField.getDocument().getLength());
+		}
+
+		public void keyPressed(KeyEvent e) {
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/FastFilterButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagesTablePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagesTablePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagesTablePanel.java	(revision 42196)
@@ -0,0 +1,353 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.execution.panel;
+
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.net.URL;
+import java.util.List;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.TableColumnModel;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.panel.filters.NameDescriptionOrCodeFilter;
+import org.gvsig.installer.swing.impl.execution.panel.filters.PackageFilter;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.PackageOfficialRecommended;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.PackageOsAndArchitecture;
+import org.gvsig.installer.swing.impl.execution.panel.model.PackagesTableModel.PackageStatus;
+import org.gvsig.installer.swing.impl.execution.panel.renderers.AbstractTablePackageInfoCellRenderer;
+import org.gvsig.installer.swing.impl.execution.panel.renderers.InstallStatusCellEditor;
+import org.gvsig.installer.swing.impl.execution.panel.renderers.InstallStatusCellRenderer;
+import org.gvsig.installer.swing.impl.execution.panel.renderers.InstalledPackageCellRenderer;
+import org.gvsig.installer.swing.impl.execution.panel.renderers.OfficialRecommendedCellRenderer;
+import org.gvsig.installer.swing.impl.execution.panel.renderers.OsAndArchitectureCellRenderer;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class PackagesTablePanel extends JPanel implements ListSelectionListener {
+
+	private static final long serialVersionUID = 8156088357208685689L;
+	protected SwingInstallerManager swingInstallerManager = null;
+
+	private JScrollPane descriptionScrollPane;
+	private JEditorPane descriptionTextEditor;
+	private JScrollPane pluginsScrollPane;
+	private JTable pluginsTable;
+	private PackagePropertiesFilterPanel filterPanel;
+	private FastFilterButtonsPanel fastFilterPanel;
+	private SelectPackagesPanel selectPackagesPanel;
+
+	public PackagesTablePanel(SelectPackagesPanel selectPackagesPanel) {
+		super();
+		swingInstallerManager = SwingInstallerLocator
+				.getSwingInstallerManager();
+		this.selectPackagesPanel = selectPackagesPanel;
+		initComponents();
+		pluginsTable.getSelectionModel().addListSelectionListener(this);
+		pluginsTable.setDefaultRenderer(PackageOfficialRecommended.class,
+				new OfficialRecommendedCellRenderer());
+		pluginsTable.setDefaultRenderer(PackageStatus.class,
+				new InstallStatusCellRenderer());
+		pluginsTable.setDefaultEditor(PackageStatus.class,
+				new InstallStatusCellEditor(this.selectPackagesPanel));
+		AbstractTablePackageInfoCellRenderer ipcr = new InstalledPackageCellRenderer();
+		pluginsTable.setDefaultRenderer(PackageOsAndArchitecture.class,
+				new OsAndArchitectureCellRenderer());
+		pluginsTable.setDefaultRenderer(String.class, ipcr);
+		pluginsTable.setDefaultRenderer(Number.class, ipcr);
+		pluginsTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		pluginsTable = new JTable();
+
+		MouseListener mouseListener = new MyMouseListener();
+		pluginsTable.addMouseListener(mouseListener);
+
+		pluginsScrollPane = new JScrollPane(pluginsTable);
+
+		descriptionTextEditor = new JEditorPane();
+		descriptionTextEditor.setBackground(Color.WHITE);
+		descriptionTextEditor.setEditable(false);
+		descriptionTextEditor.setContentType("text/html");
+
+		descriptionScrollPane = new JScrollPane(descriptionTextEditor);
+
+		filterPanel = new PackagePropertiesFilterPanel(this);
+		filterPanel.setVisible(true);
+
+		fastFilterPanel = new FastFilterButtonsPanel(this);
+
+		setLayout(new GridBagLayout());
+
+		// left panel filter
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.weightx = 0.13;
+		gridBagConstraints.weighty = 1;
+		gridBagConstraints.gridheight = 2;
+		gridBagConstraints.insets = new Insets(0, 2, 2, 2);
+		add(filterPanel, gridBagConstraints);
+
+		// fast filters buttons panel
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.weightx = 0.75;
+		gridBagConstraints.weighty = 0;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(fastFilterPanel, gridBagConstraints);
+
+		// plugins scroll panel
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.weightx = 0.75;
+		gridBagConstraints.weighty = 0.7;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(pluginsScrollPane, gridBagConstraints);
+
+		// description panel
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 0.75;
+		gridBagConstraints.weighty = 0.3;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(descriptionScrollPane, gridBagConstraints);
+		
+		// filterPanel.setInitialFilter();
+	}
+
+	public void resetFilter() {
+		filterPanel.resetPanel();
+		valueChanged();
+	}
+	
+	public void selectPackages() {
+		PackagesTableModel pluginsTableModel = (PackagesTableModel) pluginsTable
+				.getModel();
+		pluginsTableModel.selectDefaultPackages();
+	}
+
+	public void setTableModel(PackagesTableModel pluginsTableModel) {
+		pluginsTable.setModel(pluginsTableModel);
+		pluginsTableModel.fireTableDataChanged();
+		TableColumnModel tableColumnModel = pluginsTable.getColumnModel();
+		tableColumnModel.getColumn(0).setPreferredWidth(20);
+		tableColumnModel.getColumn(1).setPreferredWidth(20);
+		tableColumnModel.getColumn(2).setPreferredWidth(20);
+		tableColumnModel.getColumn(3).setPreferredWidth(225);
+		tableColumnModel.getColumn(4).setPreferredWidth(130);
+		tableColumnModel.getColumn(5).setPreferredWidth(53);
+
+	}
+
+	public List<PackageInfo> getPackagesToInstall() {
+		return ((PackagesTableModel) pluginsTable.getModel())
+				.getPackagesToInstall();
+	}
+
+	public boolean isPackageSelected() {
+		return ((PackagesTableModel) pluginsTable.getModel())
+				.hasAnyPackageSelected();
+	}
+
+	private class HTMLCoder {
+		private StringBuffer buffer = new StringBuffer();
+	
+		public String toString() {
+			return buffer.toString();
+		}
+		
+		public void addTitle(String title) {
+			if( title == null ) {
+				return;
+			}
+			buffer.append("<h1>");
+			buffer.append(title);
+			buffer.append("</h1>");
+		}
+		
+		public void addParagraph(Object text) {
+			if( text == null ) {
+				return;
+			}
+			String t = text.toString().replaceAll("\\n", "<br>\n");
+			buffer.append("<p>");
+			buffer.append(t);
+			buffer.append("</p>");
+		}
+		
+		public void addBeginList() {
+			buffer.append("<ul>");
+		}
+		
+		public void addEndList() {
+			buffer.append("</ul>");
+		}
+		
+		public void addListItem(String label, Object value) {
+			if( value == null ) {
+				return;
+			}
+			buffer.append("<li>");
+			buffer.append(label);
+			buffer.append(": <i>");
+			buffer.append(value.toString());
+			buffer.append("</i></li>");
+		}
+		
+		public void addListItem(String label, URL value) {
+			if( value == null ) {
+				return;
+			}
+			buffer.append("<li>");
+			buffer.append(label);
+			buffer.append(": <a href=\"");
+			buffer.append(value.toString());
+			buffer.append("\">");
+			buffer.append(value.toString());
+			buffer.append("</a></li>");
+		}
+		
+	}
+	public void valueChanged(ListSelectionEvent e) {
+		valueChanged();
+	}
+
+	public void valueChanged() {
+		int row = pluginsTable.getSelectedRow();
+		if (row < 0) {
+			descriptionTextEditor.setText("<p></p>");
+			return;
+		}
+
+		PackageInfo pkginfo = ((PackagesTableModel) pluginsTable.getModel())
+				.getPackageInfoAt(row);
+
+		HTMLCoder html = new HTMLCoder();
+		html.addTitle(pkginfo.getName());
+		html.addParagraph(pkginfo.getDescription());
+		html.addBeginList();
+		html.addListItem("code", pkginfo.getCode());
+		html.addListItem("Organization", pkginfo.getOwner());
+		html.addListItem("Organization URL", pkginfo.getOwnerURL());
+		html.addListItem("Sources", pkginfo.getSourcesURL());
+		html.addListItem("Dependencies", pkginfo.getDependencies());
+		html.addListItem("Categories", pkginfo.getCategoriesAsString());
+		html.addListItem("Official", pkginfo.isOfficial());
+		html.addListItem("Signed", pkginfo.isSigned());
+		html.addEndList();
+
+		descriptionTextEditor.setText(html.toString());
+
+		// get the view area to the top-left corner
+		descriptionTextEditor.setCaretPosition(0);
+
+	}
+
+	public void setFilter(PackageFilter filter) {
+		PackagesTableModel pluginsTableModel = (PackagesTableModel) pluginsTable
+				.getModel();
+		pluginsTableModel.setFilter(filter);
+		selectPackagesPanel.updatePanel();
+	}
+
+	public void setFilter(NameDescriptionOrCodeFilter filter) {
+		PackagesTableModel pluginsTableModel = (PackagesTableModel) pluginsTable
+				.getModel();
+		pluginsTableModel.setFilter(filter);
+		selectPackagesPanel.updatePanel();
+	}
+
+	private class MyMouseListener implements MouseListener {
+
+		public void mouseClicked(MouseEvent e) {
+			selectPackagesPanel.checkIfPluginSelected();
+		}
+
+		public void mouseEntered(MouseEvent e) {
+		}
+
+		public void mouseExited(MouseEvent e) {
+		}
+
+		public void mousePressed(MouseEvent e) {
+		}
+
+		public void mouseReleased(MouseEvent e) {
+		}
+	}
+
+	public SelectPackagesPanel getSelectPackagesPanel() {
+		return this.selectPackagesPanel;
+	}
+
+	public void clearAllPanels() {
+		filterPanel.resetPanel();
+		descriptionTextEditor.setText("");
+		fastFilterPanel.resetPanel();
+	}
+
+	public void resetPanel() {
+		filterPanel.resetPanel();
+		descriptionTextEditor.setText("");
+	}
+
+    /**
+     * 
+     */
+    public void setInitialFilter() {
+        filterPanel.setInitialFilter();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/PackagesTablePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/ProgressWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/ProgressWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/ProgressWizard.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+package org.gvsig.installer.swing.impl.execution.wizard;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.DefaultInstallPackageWizard;
+import org.gvsig.installer.swing.impl.panel.DefaultProgressPanel;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class ProgressWizard extends DefaultProgressPanel implements OptionPanel {
+
+    private static final long serialVersionUID = 8531884535246881448L;
+    private AbstractInstallPackageWizard installerExecutionWizard;
+    private DefaultSwingInstallerManager swingInstallerManager;
+
+    public ProgressWizard(DefaultInstallPackageWizard installerExecutionWizard) {
+        super();
+        this.installerExecutionWizard = installerExecutionWizard;
+        swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+                .getSwingInstallerManager();
+    }
+
+    public JPanel getJPanel() {
+        return this;
+    }
+
+    public String getPanelTitle() {
+        return swingInstallerManager.getText("_progress");
+    }
+
+    public void lastPanel() {
+        installerExecutionWizard.setFinishButtonVisible(false);
+        installerExecutionWizard.setCancelButtonEnabled(true);
+    }
+
+    public void nextPanel() {
+        // Nothing to do, no next panel
+    }
+
+    public void updatePanel() {
+        installerExecutionWizard.setFinishButtonVisible(false);
+        installerExecutionWizard.setCancelButtonEnabled(false);
+
+        final ProgressWizard wizard = this;
+
+        UpdatePanel task = new UpdatePanel(wizard);
+        wizard.installerExecutionWizard.addCancellableTask(task);
+        bind(task.getTaskStatus());
+        task.setDaemon(true);
+        task.start();
+    }
+
+    private static class UpdatePanel extends AbstractMonitorableTask {
+
+        private final ProgressWizard panel;
+
+        public UpdatePanel(ProgressWizard panel) {
+            super(panel.swingInstallerManager
+                    .getText("_Install_package"));
+            this.panel = panel;
+        }
+
+        private void showWarning(final String msg) {
+            if( !SwingUtilities.isEventDispatchThread() )  {
+                try {
+                    SwingUtilities.invokeAndWait(new Runnable() {
+                        public void run() {
+                        }
+                    });
+                } catch (Exception ex) {
+                    logger.warn("Cant show message to the user. "+msg);
+                }
+                return;
+            }
+            JOptionPane.showMessageDialog(panel, msg, "Warning", JOptionPane.WARNING_MESSAGE);
+        }
+        
+        @Override
+        public synchronized void run() {
+
+            int errcount = 0;
+            try {
+                logger.info("Package installation iniitiated");
+                SimpleTaskStatus taskStatus = (SimpleTaskStatus) this
+                        .getTaskStatus();
+                // bundle of packages
+                InstallPackageService installerExecutionService = this.panel.installerExecutionWizard
+                        .getInstallerExecutionService();
+                // packages to install
+                List<PackageInfo> installersToInstall = this.panel.installerExecutionWizard
+                        .getInstallersToInstall();
+                Collections.sort(installersToInstall, new Comparator<PackageInfo>() {
+                    public int compare(PackageInfo o1, PackageInfo o2) {
+                        return o1.getCode().compareTo(o2.getCode());
+                    }
+                });
+                taskStatus.setRangeOfValues(0, installersToInstall.size());
+                for ( int i = 0; i < installersToInstall.size(); i++ ) {
+                    PackageInfo installerInfo = installersToInstall.get(i);
+                    taskStatus.message(installerInfo.getName());
+                    try {
+                        installerExecutionService.installPackage(
+                                panel.installerExecutionWizard.getApplicationFolder(),
+                                installerInfo
+                        );
+                    } catch (Throwable th) {
+                        logger.warn("Can't install package '" + installerInfo.getCode() + "'.", th);
+                        errcount++;
+                    }
+                    taskStatus.setCurValue(i + 1);
+                }
+                this.panel.installerExecutionWizard.setFinishButtonVisible(true);
+                if( errcount>0 ) {
+                    showWarning("Failed to install "+errcount+" packages.");
+                }
+                taskStatus.message(panel.swingInstallerManager.getText("_Finished"));
+
+                taskStatus.terminate();
+                taskStatus.remove();
+                logger.info("Package installation finished");
+            } catch (Throwable th) {
+                logger.warn("Problems install packages.",th);
+                showWarning(panel.swingInstallerManager.getText("_Cant_install_packege"));
+            }
+
+        }
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/ProgressWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/DownloadProgressWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/DownloadProgressWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/DownloadProgressWizard.java	(revision 42196)
@@ -0,0 +1,312 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.wizard;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.DefaultInstallPackageWizard;
+import org.gvsig.installer.swing.impl.panel.DefaultProgressPanel;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+
+public class DownloadProgressWizard extends DefaultProgressPanel implements
+		OptionPanel {
+
+	private static final long serialVersionUID = -7064334977678611609L;
+	private static Logger logger = LoggerFactory
+			.getLogger(DownloadProgressWizard.class);
+	private AbstractInstallPackageWizard abstractInstallPackageWizard;
+	// private abstractInstallPackageWizard abstractInstallPackageWizard;
+	public JButton startDownload;
+	private int direccion = WizardPanelWithLogo.ACTION_NEXT;
+	private DefaultSwingInstallerManager swingInstallerManager;
+
+	public DownloadProgressWizard(
+			AbstractInstallPackageWizard abstractInstallPackageWizard) {
+		super();
+		this.abstractInstallPackageWizard = abstractInstallPackageWizard;
+	}
+
+	@Override
+	protected void initComponents() {
+		super.initComponents();
+
+		final DownloadProgressWizard wizard = this;
+
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+
+		startDownload = new JButton(swingInstallerManager
+				.getText("_start_download"));
+
+		java.awt.GridBagConstraints gridBagConstraints;
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 3;
+		gridBagConstraints.anchor = GridBagConstraints.EAST;
+		gridBagConstraints.insets = new Insets(5, 2, 2, 2);
+		add(startDownload, gridBagConstraints);
+
+		startDownload.addActionListener(new ActionListener() {
+
+			public void actionPerformed(ActionEvent e) {
+				UpdatePanel task = new UpdatePanel(wizard);
+				wizard.abstractInstallPackageWizard.addCancellableTask(task);
+				bind(task.getTaskStatus());
+				task.start();
+			}
+		});
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_download_progress");
+	}
+
+	public void lastPanel() {
+		abstractInstallPackageWizard.setFinishButtonVisible(false);
+		abstractInstallPackageWizard.setCancelButtonEnabled(true);
+		direccion = WizardPanelWithLogo.ACTION_NEXT;
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		direccion = WizardPanelWithLogo.ACTION_PREVIOUS;
+	}
+
+	public void updatePanel() {
+		boolean thereIsDownloablePackage = false;
+
+		InstallPackageService service = abstractInstallPackageWizard
+				.getInstallerExecutionService();
+		service.getPackageCount();
+
+		for (int i = 0; i < abstractInstallPackageWizard
+				.getInstallersToInstall().size(); i++) {
+
+			if (abstractInstallPackageWizard.getInstallersToInstall().get(i)
+					.getDownloadURL() != null) {
+				thereIsDownloablePackage = true;
+				break;
+			}
+		}
+
+		if (thereIsDownloablePackage) {
+			this.abstractInstallPackageWizard.setNextButtonEnabled(false);
+			this.startDownload.setEnabled(true);
+		} else {
+			((DefaultInstallPackageWizard) abstractInstallPackageWizard)
+					.doAction(direccion);
+		}
+	}
+
+	private String getText(String key) {
+		return this.swingInstallerManager.getText(key);
+	}
+
+	private static class UpdatePanel extends AbstractMonitorableTask {
+
+		private final DownloadProgressWizard panel;
+
+		public UpdatePanel(DownloadProgressWizard panel) {
+            super(panel.getText("_downloading_files"));
+			// super(panel.getText("_downloading"));
+			this.panel = panel;
+		}
+
+		@Override
+        public synchronized void run() {
+            SimpleTaskStatus taskStatus =
+                (SimpleTaskStatus) this.getTaskStatus();
+
+            List<String> not_downloaded = new ArrayList<String>();
+            
+            try {
+
+                List<PackageInfo> installersToInstall =
+                    this.panel.abstractInstallPackageWizard
+                        .getInstallersToInstall();
+                this.panel.startDownload.setEnabled(false);
+                this.panel.abstractInstallPackageWizard
+                    .setBackButtonEnabled(false);
+                InstallPackageService installerService =
+                    this.panel.abstractInstallPackageWizard
+                        .getInstallerExecutionService();
+
+                
+
+                for (int i = 0; i < installersToInstall.size(); i++) {
+                    taskStatus.setCurValue(0);
+                    PackageInfo installerInfo = installersToInstall.get(i);
+                    taskStatus.message(installerInfo.getName() + " " + (i + 1)
+                        + " / " + installersToInstall.size());
+                    if (installerInfo.getDownloadURL() != null) {
+                        try {
+                            installerService.downloadPackage(installerInfo,
+                                taskStatus);
+                        } catch (Exception e) {
+
+                            not_downloaded.add(installerInfo.getName());
+                            String msg =
+                                panel.swingInstallerManager
+                                    .getText("_Cant_download_package_files")
+                                    + " " + installerInfo.getName();
+                            logger.info(msg, e);
+                        }
+                    }
+
+                    if (not_downloaded.size() > 0) {
+                        break;
+                    }
+                }
+
+                this.panel.abstractInstallPackageWizard
+                    .setBackButtonEnabled(true);
+
+            } finally {
+                if (not_downloaded.size() == 0) {
+                    // Set the finished text
+                    taskStatus.message(panel.getText("_finished"));
+                    taskStatus.terminate();
+                    taskStatus.remove();
+                    this.panel.abstractInstallPackageWizard
+                        .setNextButtonEnabled(true);
+                } else {
+                    taskStatus.message(panel.getText("_finished_Some_files_not_downloaded"));
+                    taskStatus.terminate();
+                    taskStatus.remove();
+                    this.panel.abstractInstallPackageWizard
+                        .setNextButtonEnabled(false);
+                    showNotDownloaded(this.panel, not_downloaded);
+                }            
+                
+            }
+        }
+
+	}
+	
+	
+	   private static synchronized void showNotDownloaded(
+	       final Component parentPanel, final List<String> names) {
+	       
+	       int sz = names.size();
+           String list_str = ""; 
+	       for (int i=0; i<sz; i++) {
+	           list_str = list_str + "\n - " + names.get(i);
+	       }
+	       
+	       list_str = Messages.getText("_These_packages_not_downloaded")
+	           + ":\n" + list_str + "\n";
+	       final String list_str_copy = list_str; 
+	       if (!SwingUtilities.isEventDispatchThread()) {
+	            try {
+	                SwingUtilities.invokeLater(new Runnable() {
+	                    public void run() {
+	                        
+	                        JOptionPane.showMessageDialog(
+	                            parentPanel, list_str_copy,
+	                            Messages.getText("_Download_error"),
+	                            JOptionPane.ERROR_MESSAGE);
+	                        
+	                    }
+	                });
+	            } catch (Throwable e) {
+	                logger.info("Error while showing message dialog. ", e);
+	            }
+	            
+	        } else {
+	            JOptionPane.showMessageDialog(
+	                parentPanel, list_str, Messages.getText("_Download_error"),
+	                JOptionPane.ERROR_MESSAGE);
+	        }
+	        
+	    }
+	   
+	   
+	
+	private static synchronized int showOptionDialog(
+	    final Component parentComponent,
+	    final String message,
+	    final String title,
+	    final int optionType,
+	    final int messageType) {
+
+        if (!SwingUtilities.isEventDispatchThread()) {
+            try {
+                final int[] resp = new int[1];
+                SwingUtilities.invokeAndWait(new Runnable() {
+
+                    public void run() {
+                        resp[0] = showOptionDialog(
+                            parentComponent, message, title, optionType, messageType);
+                        
+                    }
+                });
+                
+                return resp[0];
+            } catch (Throwable e) {
+                logger.info("Error while showing message dialog. ", e);
+            }
+        }
+        
+	    return JOptionPane.showOptionDialog(
+	        parentComponent, message, title,
+	        optionType, messageType, null, null, null);
+	    
+	}
+	
+	
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/DownloadProgressWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectBundlesWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectBundlesWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectBundlesWizard.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.execution.wizard;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import javax.swing.JPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.swing.api.SwingInstallerManager.UrlAndLabel;
+import org.gvsig.installer.swing.impl.execution.DefaultInstallPackageWizard;
+import org.gvsig.installer.swing.impl.execution.panel.SelectBundlesPanel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectBundlesWizard extends SelectBundlesPanel implements
+		OptionPanel {
+
+	private static final long serialVersionUID = -3694039665800882085L;
+	private DefaultInstallPackageWizard installerExecutionWizard;
+	private static final Logger LOG = LoggerFactory
+			.getLogger(SelectBundlesWizard.class);
+
+	public SelectBundlesWizard(
+			DefaultInstallPackageWizard installerExecutionWizard,
+			List<UrlAndLabel> defaultDownloadURL) {
+		super(defaultDownloadURL, installerExecutionWizard.getInstallFolder());
+		this.installerExecutionWizard = installerExecutionWizard;
+		updatePanel();
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_select_installation_source");
+	}
+
+	public void lastPanel() {
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		InstallPackageService installerExecutionService = installerExecutionWizard
+				.getInstallerExecutionService();
+		installerExecutionService.reset();
+
+		try {
+			if (isStandardSelected()) {
+				installerExecutionService
+						.addBundlesFromDirectory(installerExecutionWizard
+								.getInstallFolder());
+			} else {
+				if (isURLSelected()) {
+					installerExecutionService.addBundle(getSelectedURL());
+				} else {
+					File file = getSelectedFile();
+					if ((file != null) && (file.exists())) {
+						installerExecutionService.addBundle(file);
+					} else {
+						LOG.error(swingInstallerManager.getText(""
+								+ "_the_selected_file_does_not_exist"));
+					}
+				}
+			}
+		} catch (InstallPackageServiceException e) {
+			throw new NotContinueWizardException(swingInstallerManager
+					.getText("_execute_adding_error"), e, this);
+		} catch (MalformedURLException e) {
+			throw new NotContinueWizardException(swingInstallerManager
+					.getText("_execute_adding_error"), e, this);
+		}
+
+	}
+
+	public void updatePanel() {
+                if(installerExecutionWizard.getSkipBundleSelection() ) {
+                    installerExecutionWizard.doAction(WizardPanelWithLogo.ACTION_NEXT);
+                }
+		if (installerExecutionWizard != null) {
+			installerExecutionWizard.setBackButtonEnabled(false);
+		}
+	}
+
+	@Override
+	protected void checkNextButtonEnabled() {
+		if (installerExecutionWizard != null) {
+			installerExecutionWizard
+					.setNextButtonEnabled(isNextButtonEnabled());
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectBundlesWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/TypicalOrAdvancedWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/TypicalOrAdvancedWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/TypicalOrAdvancedWizard.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.wizard;
+
+import java.util.List;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.swing.impl.execution.DefaultInstallPackageWizard;
+import org.gvsig.installer.swing.impl.execution.panel.TypicalOrAdvancedPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class TypicalOrAdvancedWizard extends TypicalOrAdvancedPanel implements
+		OptionPanel {
+
+	private DefaultInstallPackageWizard installerExecutionWizard;
+
+	private int direccion = WizardPanelWithLogo.ACTION_NEXT;
+
+	public TypicalOrAdvancedWizard(
+			DefaultInstallPackageWizard installerExecutionWizard) {
+		super();
+		this.installerExecutionWizard = installerExecutionWizard;
+	}
+
+	private static final long serialVersionUID = -7151675399781722322L;
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_select_installation_mode");
+	}
+
+	public void lastPanel() {
+		direccion = WizardPanelWithLogo.ACTION_NEXT;
+
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		if (installerExecutionWizard.getAskTypicalOrCustom()) {
+			installerExecutionWizard
+					.setShowSelectPackagesPanel(isAdvancedModeSelected());
+		}
+		direccion = WizardPanelWithLogo.ACTION_PREVIOUS;
+	}
+
+	public void updatePanel() {
+		InstallPackageService service = installerExecutionWizard
+				.getInstallerExecutionService();
+
+		if (!installerExecutionWizard.getAskTypicalOrCustom()) {
+			(installerExecutionWizard).doAction(direccion);
+		}
+
+		// if no packages will be selected on typical mode
+		List<String> defaultdPackagesIDs = service
+				.getDefaultSelectedPackagesIDs();
+
+		// disable or enable the typical mode
+		if ((defaultdPackagesIDs == null) || (defaultdPackagesIDs.size() < 1)) {
+			setEnableTypicalMode(false);
+		} else {
+			// typical mode is enabled
+			setEnableTypicalMode(true);
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/TypicalOrAdvancedWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectPackagesWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectPackagesWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectPackagesWizard.java	(revision 42196)
@@ -0,0 +1,349 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl.execution.wizard;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.lib.api.DependenciesCalculator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageService;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.execution.JShowPackageStatusAndAskContinuePanel;
+import org.gvsig.installer.swing.api.execution.JShowPackagesAndAskContinuePanel;
+import org.gvsig.installer.swing.api.execution.JShowRequiredPackagesAndAskContinuePanel;
+import org.gvsig.installer.swing.api.execution.JShowUnresolvedDependenciesAndAskContinuePanel;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.execution.DefaultInstallPackageWizard;
+import org.gvsig.installer.swing.impl.execution.panel.SelectPackagesPanel;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SelectPackagesWizard implements OptionPanel {
+
+	private static final long serialVersionUID = -4678172923039393643L;
+
+	private static Logger LOG = LoggerFactory
+			.getLogger(SelectPackagesWizard.class);
+
+	protected DefaultInstallPackageWizard installerExecutionWizard;
+
+	private SelectPackagesPanel selectPackagesPanel = null;
+	private DefaultSwingInstallerManager swingInstallerManager = null;
+
+	private int direccion = WizardPanelWithLogo.ACTION_NEXT;
+
+	public SelectPackagesWizard(
+			DefaultInstallPackageWizard installerExecutionWizard) {
+		super();
+		this.installerExecutionWizard = installerExecutionWizard;
+		selectPackagesPanel = new SelectPackagesPanel(this);
+
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+	}
+
+	public JPanel getJPanel() {
+		return selectPackagesPanel;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_select_plugins");
+	}
+
+	public void lastPanel() {
+		direccion = WizardPanelWithLogo.ACTION_NEXT;
+		selectPackagesPanel.clearPanel();
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+	    /*
+	     * First warn about packages in development or unofficial
+	     */
+        checkDevelAndUnoficialPackages();
+        /*
+         * Then check dependencies
+         */
+		checkDependencies();
+		direccion = WizardPanelWithLogo.ACTION_PREVIOUS;
+		installerExecutionWizard.setNextButtonEnabled(false);
+	}
+
+	private void checkDependencies() throws NotContinueWizardException {
+		List<PackageInfo> requiredPackages = null;
+		List<PackageInfo> troubledPackages = null;
+		Dependencies unresolvedDependencies = null;
+		try {
+			// Creamos el calculador de dependencias
+			DependenciesCalculator calculator = this.swingInstallerManager
+					.getInstallerManager().createDependenciesCalculator(
+							installerExecutionWizard
+									.getInstallerExecutionService());
+
+			// Le indicamos los paquetes que queremos instalar
+			calculator.addPackageToInstall(this.installerExecutionWizard
+					.getInstallersToInstall());
+
+			// Le a�adimos los paquetes que ya hay instalados.
+
+			PackageInfo[] pkgs = swingInstallerManager.getInstallerManager()
+					.getInstalledPackages();
+			calculator.addInstalledPackage(pkgs);
+
+			// Calculamos las dependencias
+			calculator.calculate();
+
+			requiredPackages = calculator.getRequiredPackages();
+			unresolvedDependencies = calculator.getUnresolvedDependencies();
+			troubledPackages = calculator.getConflictPackages();
+		} catch (Throwable e) {
+			LOG
+					.error(
+							swingInstallerManager
+									.getText("_an_error_has_occurred_when_calculating_the_dependecies_of_the_packages_to_install"),
+							e);
+			int resp = JOptionPane
+					.showConfirmDialog(
+							null,
+							swingInstallerManager
+									.getText("_an_error_has_occurred_when_calculating_the_dependecies_of_the_selected_packages")
+									+ "\n"
+									+ swingInstallerManager
+											.getText("_it_is_not_possible_to_verify_if_any_additional_package_is_needed_to_install_the_selected_packages")
+									+ "\n"
+									+ swingInstallerManager
+											.getText("_if_you_want_you_can_select_again_manually_the_packets_that_might_be_necessary")
+									+ swingInstallerManager
+											.getText("_do_you_want_to_continue_and_install_the_packages_you_already_have_selected"),
+							swingInstallerManager
+									.getText("_a_problem_has_occurred_when_calculating_the_dependencies"),
+							JOptionPane.YES_NO_OPTION,
+							JOptionPane.WARNING_MESSAGE);
+			if (resp == JOptionPane.NO_OPTION) {
+				throw new NotContinueWizardException("", null, false);
+			}
+		}
+
+		if (troubledPackages != null && troubledPackages.size() > 0) {
+			JShowPackagesAndAskContinuePanel dlg = this.swingInstallerManager
+					.createJShowTroubledPackagesAndAskContinuePanel(
+							troubledPackages,
+							swingInstallerManager
+									.getText("_Some_of_the_selected_addons_should_not_be_installed_simultaneously")
+									+ ". "
+		                            + swingInstallerManager.getText("_Installing_these_addons_may_cause_errors")
+									+ ".\n"
+									+ swingInstallerManager.getText("_do_you_want_to_continue")
+					);
+			if (dlg.needShow()) {
+				WindowManager wm = ToolsSwingLocator.getWindowManager();
+				wm.showWindow(dlg, swingInstallerManager
+						.getText("_do_you_want_to_continue"),
+						WindowManager.MODE.DIALOG);
+				if (dlg.cancelled()) {
+					throw new NotContinueWizardException("", null, false);
+				}
+			}
+		}
+
+		if (requiredPackages != null && requiredPackages.size() > 0) {
+			JShowRequiredPackagesAndAskContinuePanel dlg = this.swingInstallerManager
+					.createJShowRequiredPackagesAndAskContinuePanel(
+							requiredPackages,
+							swingInstallerManager
+									.getText("_the_selected_packages_require_to_install_or_update_the_following_packages")
+									+ ":\n"
+									+ swingInstallerManager
+											.getText("_do_you_want_to_continue"));
+			if (dlg.needShow()) {
+				WindowManager wm = ToolsSwingLocator.getWindowManager();
+				wm.showWindow(dlg, swingInstallerManager
+						.getText("_do_you_want_to_continue"),
+						WindowManager.MODE.DIALOG);
+				if (dlg.cancelled()) {
+					throw new NotContinueWizardException("", null, false);
+				}
+			}
+		}
+
+		if (unresolvedDependencies != null && unresolvedDependencies.size() > 0) {
+			JShowUnresolvedDependenciesAndAskContinuePanel dlg = this.swingInstallerManager
+					.createJShowUnresolvedDependenciesAndAskContinuePanel(
+							unresolvedDependencies,
+							swingInstallerManager
+									.getText("_the_following_dependencies_have_not_been_possible_to_resolve")
+                                    + ". " +
+                                    swingInstallerManager.getText("_This_may_cause_issues_in_gvSIG")
+									+ "\n" +
+									swingInstallerManager.getText("_do_you_want_to_continue_anyway")
+									);
+			if (dlg.needShow()) {
+				WindowManager wm = ToolsSwingLocator.getWindowManager();
+				wm.showWindow(dlg, swingInstallerManager
+						.getText("_do_you_want_to_continue"),
+						WindowManager.MODE.DIALOG);
+				if (dlg.cancelled()) {
+					throw new NotContinueWizardException("", null, false);
+				}
+			}
+		}
+
+		Iterator<PackageInfo> it = requiredPackages.iterator();
+		while (it.hasNext()) {
+			PackageInfo pkg = it.next();
+			selectPackagesPanel.getModel().selectPackage(pkg);
+			LOG.info("Automatic selection of required package "+pkg.getCode());
+		}
+	}
+
+	private void checkDevelAndUnoficialPackages()
+			throws NotContinueWizardException {
+		List<PackageInfo> packagesToInstall = this.installerExecutionWizard
+				.getInstallersToInstall();
+
+		JShowPackageStatusAndAskContinuePanel dlg = this.swingInstallerManager
+				.createJShowPackageStatusAndAskContinuePanel(
+						packagesToInstall,
+						swingInstallerManager.getText(
+						    "_you_have_selected_in_development_or_not_official_versions")
+                            + ". "
+                            + swingInstallerManager.getText(
+                                "_Installing_devel_addons_may_cause_errors")
+						    + "\n"
+						    + swingInstallerManager.getText(
+						        "_do_you_want_to_continue_anyway"));
+		if (dlg.needShow()) {
+			WindowManager wm = ToolsSwingLocator.getWindowManager();
+			wm.showWindow(dlg, swingInstallerManager
+					.getText("_do_you_want_to_continue"),
+					WindowManager.MODE.DIALOG);
+			if (dlg.cancelled()) {
+				throw new NotContinueWizardException("", null, false);
+			}
+		}
+	}
+
+	public void updatePanel() {
+                if(installerExecutionWizard.getSkipBundleSelection() ) {
+			installerExecutionWizard.setBackButtonEnabled(false);
+		}
+            
+		InstallPackageService installerExecutionService = installerExecutionWizard
+				.getInstallerExecutionService();
+
+		selectPackagesPanel.updatePanel();
+		selectPackagesPanel.setInitialFilter();
+
+		// if default packages must be selected or not
+		if (installerExecutionWizard.getSelectDefaultPackages()) {
+			selectPackagesPanel.selectPackages();
+		}
+
+		// if this panel has not to be shown
+		if (!installerExecutionWizard.showSelectPackagesPanel()) {
+			saltaOno(installerExecutionService);
+		}
+
+		checkIfPluginSelected();
+	}
+
+	public void checkIfPluginSelected() {
+		if (installerExecutionWizard.showSelectPackagesPanel()) {
+			installerExecutionWizard.setNextButtonEnabled(selectPackagesPanel
+					.isPackageSelected());
+		}
+	}
+
+	public void saltaOno(InstallPackageService installerExecutionService) {
+
+		List<String> defaultPackageIDs = installerExecutionService
+				.getDefaultSelectedPackagesIDs();
+
+		boolean defaultPacketsExist = false;
+
+		// check if there is any default package
+		if (defaultPackageIDs != null) {
+			for (int i = 0; i < installerExecutionService.getPackageCount(); i++) {
+				for (int j = 0; j < defaultPackageIDs.size(); j++) {
+					// if the package is in the default packages list
+					if (installerExecutionService.getPackageInfo(i).matchID(
+							defaultPackageIDs.get(j))) {
+						// if package is for all operating systems or the system
+						// operating system equals the project's one
+						if (installerExecutionService.getPackageInfo(i)
+								.getOperatingSystem().equals("all")
+								|| installerExecutionService.getPackageInfo(i)
+										.getOperatingSystem().equals(
+												this.swingInstallerManager
+														.getInstallerManager()
+														.getOperatingSystem())) {
+							defaultPacketsExist = true;
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		if (defaultPacketsExist) {
+			(installerExecutionWizard).doAction(direccion);
+			// if there is not any package, show error and jump back.
+		} else {
+			(installerExecutionWizard)
+					.doAction(WizardPanelWithLogo.ACTION_PREVIOUS);
+			try {
+				throw new Exception(
+						swingInstallerManager
+								.getText("_There_are_no_packages_in_typical_installation_to_select"));
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+		}
+
+	}
+
+	public List<PackageInfo> getPackagesToInstall() {
+		return selectPackagesPanel.getPackagesToInstall();
+	}
+
+	public DefaultInstallPackageWizard getDefaultInstallPackageWizard() {
+		return this.installerExecutionWizard;
+	}
+
+	public Boolean isDefaultPackagesSelectionSet() {
+		return installerExecutionWizard.getSelectDefaultPackages();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/wizard/SelectPackagesWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowUnresolvedDependenciesAndAskContinuePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowUnresolvedDependenciesAndAskContinuePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowUnresolvedDependenciesAndAskContinuePanel.java	(revision 42196)
@@ -0,0 +1,132 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.installer.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.api.execution.JShowUnresolvedDependenciesAndAskContinuePanel;
+
+public class DefaultJShowUnresolvedDependenciesAndAskContinuePanel extends
+		JShowUnresolvedDependenciesAndAskContinuePanel implements
+		ActionListener {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 2135985029410816305L;
+	private Dependencies dependencies;
+	private boolean doCancel = true;
+
+	public DefaultJShowUnresolvedDependenciesAndAskContinuePanel(
+			SwingInstallerManager manager, Dependencies dependencies,
+			String message) {
+		// this.buildPackageList(dependencies);
+		this.dependencies = dependencies;
+		this.createUI(manager, message);
+	}
+
+	// private void buildPackageList(Dependencies dependencies) {
+	// this.dependencies = new ArrayList<String>();
+	// for( int i=0 ; i<packages.size(); i++ ) {
+	// PackageInfo pkg = packages.get(i);
+	// this.packages.add(pkg.getName());
+	// }
+	// }
+
+	private void createUI(SwingInstallerManager manager, String message) {
+		this.setLayout(new BorderLayout());
+
+		JButton cancelButton = new JButton(manager.getText("_cancel"));
+		cancelButton.setActionCommand("cancel");
+		cancelButton.addActionListener(this);
+		//
+		final JButton continueButton = new JButton(manager.getText("_continue"));
+		continueButton.setActionCommand("continue");
+		continueButton.addActionListener(this);
+
+		JList list = new JList(this.dependencies.toArray());
+
+		JScrollPane listScroller = new JScrollPane(list);
+		listScroller.setPreferredSize(new Dimension(250, 80));
+		listScroller.setAlignmentX(LEFT_ALIGNMENT);
+
+		JPanel listPane = new JPanel();
+		listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
+		
+		String html_msg = DefaultJShowPackageStatusAndAskContinuePanel.getHtmlText(message);
+		JLabel label = new JLabel(html_msg);
+		
+		label.setLabelFor(list);
+		listPane.add(label);
+		listPane.add(Box.createRigidArea(new Dimension(0, 5)));
+		listPane.add(listScroller);
+		listPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+		JPanel buttonPane = new JPanel();
+		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+		buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+		buttonPane.add(Box.createHorizontalGlue());
+		buttonPane.add(cancelButton);
+		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+		buttonPane.add(continueButton);
+
+		this.add(listPane, BorderLayout.CENTER);
+		this.add(buttonPane, BorderLayout.PAGE_END);
+		
+		this.setPreferredSize(new Dimension(500, 300));
+	}
+
+	@Override
+	public boolean cancelled() {
+		return doCancel;
+	}
+
+	@Override
+	public boolean needShow() {
+		return this.dependencies.size() > 0;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if ("cancel".equals(e.getActionCommand())) {
+			doCancel = true;
+		} else {
+			doCancel = false;
+		}
+		this.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/DefaultJShowUnresolvedDependenciesAndAskContinuePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/DefaultMakePluginPackageWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/DefaultMakePluginPackageWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/DefaultMakePluginPackageWizard.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation;
+
+import java.awt.BorderLayout;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+
+import jwizardcomponent.DefaultJWizardComponents;
+
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.creation.wizard.AdvancedModeSelectionWizard;
+import org.gvsig.installer.swing.impl.creation.wizard.AntScriptWizard;
+import org.gvsig.installer.swing.impl.creation.wizard.PackageInfoWizard;
+import org.gvsig.installer.swing.impl.creation.wizard.ProgressWizard;
+import org.gvsig.installer.swing.impl.creation.wizard.SelectFilesWizard;
+import org.gvsig.installer.swing.impl.creation.wizard.SelectOutputFileWizard;
+import org.gvsig.installer.swing.impl.creation.wizard.SelectPlugintoInstallWizard;
+import org.gvsig.installer.swing.impl.wizard.WizardListenerAdapter;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultMakePluginPackageWizard extends MakePluginPackageWizard
+		implements WizardPanel {
+
+	private static final long serialVersionUID = 9205891710214122265L;
+	private WizardPanelWithLogo wizardPanelWithLogo = null;
+	private MakePluginPackageService makePluginPackageService = null;
+	private OutputStream outputStream = null;
+	private OutputStream indexOutputStream;
+	private PackageInfo selectedPackageInfo = null;
+	private File originalPluginFolder = null;
+
+	// Wizards
+	private AdvancedModeSelectionWizard advancedModeSelectionWizard = null;
+	private AntScriptWizard antScriptWizard = null;
+	private PackageInfoWizard pluginDescriptionWizard = null;
+	private ProgressWizard progressWizard = null;
+	private SelectFilesWizard selectFilesWizard = null;
+	private SelectOutputFileWizard selectOutputFileWizard = null;
+	private SelectPlugintoInstallWizard selectPlugintoInstallWizard = null;
+
+	private WizardListenerAdapter wizardListenerAdapter = null;
+	private URL downloadURL;
+
+	public DefaultMakePluginPackageWizard(File applicationFolder,
+			File installFolder) throws LocatorException,
+			MakePluginPackageServiceException {
+		super(applicationFolder, installFolder);
+		URL iconURL = getClass().getClassLoader().getResource(
+				"images/makepluginpackageicon.png");
+		ImageIcon icon = new ImageIcon(iconURL);
+		wizardPanelWithLogo = new WizardPanelWithLogo();
+
+		advancedModeSelectionWizard = new AdvancedModeSelectionWizard(this);
+		antScriptWizard = new AntScriptWizard(this);
+		pluginDescriptionWizard = new PackageInfoWizard(this);
+		progressWizard = new ProgressWizard(this);
+		selectFilesWizard = new SelectFilesWizard(this);
+		selectOutputFileWizard = new SelectOutputFileWizard(this);
+		selectPlugintoInstallWizard = new SelectPlugintoInstallWizard(this);
+
+		addWizards();
+
+		// Adding the listeners
+		wizardPanelWithLogo.setWizardListener(this);
+
+		setFinishButtonEnabled(false);
+
+		this.setLayout(new BorderLayout());
+		this.add(wizardPanelWithLogo, BorderLayout.CENTER);
+
+		makePluginPackageService = InstallerLocator.getInstallerManager()
+				.getMakePluginPackageService();
+		selectPlugintoInstallWizard
+				.setPluginsDirectory(makePluginPackageService);
+		selectFilesWizard.setApplicationDirectory(applicationFolder);
+	}
+
+	public MakePluginPackageService getMakePluginPackageService() {
+		return makePluginPackageService;
+	}
+
+	private void addWizards() {
+		wizardPanelWithLogo.addOptionPanel(selectPlugintoInstallWizard);
+		wizardPanelWithLogo.addOptionPanel(pluginDescriptionWizard);
+		wizardPanelWithLogo.addOptionPanel(advancedModeSelectionWizard);
+		addLastWizards();
+	}
+
+	private void addLastWizards() {
+		wizardPanelWithLogo.addOptionPanel(selectOutputFileWizard);
+		wizardPanelWithLogo.addOptionPanel(progressWizard);
+	}
+
+	private void addAdvancedWizards() {
+		wizardPanelWithLogo.addOptionPanel(selectFilesWizard);
+		wizardPanelWithLogo.addOptionPanel(antScriptWizard);
+	}
+
+	private DefaultJWizardComponents getWizardComponents() {
+		return wizardPanelWithLogo.getWizardComponents();
+	}
+
+	public void setNextButtonEnabled(boolean isEnabled) {
+		wizardPanelWithLogo.setNextButtonEnabled(isEnabled);
+	}
+
+	public void setCancelButtonEnabled(boolean isEnabled) {
+		wizardPanelWithLogo.setCancelButtonEnabled(isEnabled);
+	}
+
+	public void setFinishButtonEnabled(boolean isEnabled) {
+		wizardPanelWithLogo.setFinishButtonEnabled(isEnabled);
+	}
+
+	public void setBackButtonEnabled(boolean isEnabled) {
+		wizardPanelWithLogo.setBackButtonEnabled(isEnabled);
+	}
+
+	public void setAdvancedModeSelected(boolean advancedModeSelected) {
+		for (int i = getWizardComponents().getWizardPanelList().size() - 1; i >= 3; i--) {
+			getWizardComponents().removeWizardPanel(i);
+		}
+		if (advancedModeSelected) {
+			addAdvancedWizards();
+		}
+		addLastWizards();
+	}
+
+	/**
+	 * @return the installercreationService
+	 */
+	public MakePluginPackageService getInstallerCreationService() {
+		return makePluginPackageService;
+	}
+
+	/**
+	 * @return the outputStream
+	 */
+	public OutputStream getOutputStream() {
+		return outputStream;
+	}
+
+	/**
+	 * @param outputStream
+	 *            the outputStream to set
+	 */
+	public void setOutputStream(OutputStream outputStream) {
+		this.outputStream = outputStream;
+	}
+
+	public OutputStream getIndexOutputStream() {
+		return indexOutputStream;
+	}
+
+	public void setIndexOutputStream(OutputStream outputStream) {
+		this.indexOutputStream = outputStream;
+	}
+
+	public PackageInfo getSelectedPackageInfo() {
+		return selectedPackageInfo;
+	}
+
+	public void setSelectedPackageInfo(PackageInfo selectedPackageInfo) {
+		this.selectedPackageInfo = selectedPackageInfo;
+	}
+
+	public void setOriginalPluginFolder(File originalPluginFolder) {
+		this.originalPluginFolder = originalPluginFolder;
+	}
+
+	public File getOriginalPluginFolder() {
+		return this.originalPluginFolder;
+	}
+
+	public WizardPanelActionListener getWizardPanelActionListener() {
+		if (((wizardListenerAdapter == null) && (getWizardActionListener() != null))) {
+			return new WizardListenerAdapter(this);
+		}
+		return wizardListenerAdapter;
+	}
+
+	public void setWizardPanelActionListener(
+			WizardPanelActionListener wizardActionListener) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setDownloadURL(URL downloadURL) {
+		this.downloadURL = downloadURL;
+	}
+
+	public URL getDownloadURL() {
+		return downloadURL;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/DefaultMakePluginPackageWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AdvancedModeSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AdvancedModeSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AdvancedModeSelectionPanel.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.BorderLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AdvancedModeSelectionPanel extends JPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = -4336979089415520761L;
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private JCheckBox advancedModeCheckBox;
+
+	private JScrollPane advancedModeScrollPane;
+	private JTextArea advancedModeTextArea;
+
+	public AdvancedModeSelectionPanel() {
+		super();
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+		initLabels();
+	}
+
+	private void initLabels() {
+		advancedModeTextArea.setText(swingInstallerManager
+				.getText("_advanced_mode"));
+	}
+
+	private void initComponents() {
+		advancedModeCheckBox = new JCheckBox();
+		advancedModeScrollPane = new JScrollPane();
+		advancedModeTextArea = new JTextArea();
+
+		setLayout(new java.awt.BorderLayout());
+
+		advancedModeCheckBox.setText(swingInstallerManager
+				.getText("_enable_advanced_mode"));
+		add(advancedModeCheckBox, BorderLayout.NORTH);
+
+		advancedModeScrollPane.setBorder(BorderFactory.createEmptyBorder(5, 5,
+				5, 5));
+
+		advancedModeTextArea.setBackground(this.getBackground());
+		advancedModeTextArea.setColumns(20);
+		advancedModeTextArea.setLineWrap(true);
+		advancedModeTextArea.setRows(5);
+		advancedModeTextArea.setBorder(BorderFactory.createEmptyBorder(1, 1, 1,
+				1));
+		advancedModeScrollPane.setViewportView(advancedModeTextArea);
+
+		add(advancedModeScrollPane, BorderLayout.CENTER);
+	}
+
+	/**
+	 * @return the advancedMode
+	 */
+	public boolean isAdvancedModeSelected() {
+		return advancedModeCheckBox.isSelected();
+	}
+        
+        public void setAvancedModeSupported(boolean supported) {
+            this.advancedModeCheckBox.setEnabled(supported);
+            if( !supported ) {
+                this.advancedModeCheckBox.setSelected(false);
+            }
+            //this.advancedModeTextArea.setEnabled(supported);
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AdvancedModeSelectionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanelLayout.jfrm
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanelLayout.jfrm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/PlugintoInstallTablePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/PlugintoInstallTablePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/PlugintoInstallTablePanel.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PlugintoInstallTablePanel extends JPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 4098431540205466849L;
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private JScrollPane jScrollPane2;
+	private JTextArea jTextArea1;
+	private JTable pluginTable;
+	private JScrollPane pluginjScrollPane;
+
+	public PlugintoInstallTablePanel() {
+		super();
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		pluginjScrollPane = new JScrollPane();
+		pluginTable = new JTable();
+		jScrollPane2 = new JScrollPane();
+		jTextArea1 = new JTextArea();
+
+		setLayout(new GridBagLayout());
+
+		pluginjScrollPane.setViewportView(pluginTable);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 0.5;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(pluginjScrollPane, gridBagConstraints);
+
+		jTextArea1.setColumns(20);
+		jTextArea1.setRows(5);
+		jScrollPane2.setViewportView(jTextArea1);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 0.5;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		add(jScrollPane2, gridBagConstraints);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/PlugintoInstallTablePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectFilesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectFilesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectFilesPanel.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.File;
+import java.util.List;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.creation.model.SelectFilesTree;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFilesPanel extends JPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 2281611103908058218L;
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private JScrollPane resourcesScrollPane;
+	private SelectFilesTree resourcesTree;
+
+	public SelectFilesPanel() {
+		super();
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	public void setApplicationDirectory(File pluginsDirectory) {
+		resourcesTree.setApplicationDirectory(pluginsDirectory);
+	}
+
+	private void initComponents() {
+		GridBagConstraints gridBagConstraints;
+
+		resourcesScrollPane = new JScrollPane();
+		resourcesTree = new SelectFilesTree();
+
+		setLayout(new GridBagLayout());
+
+		resourcesScrollPane.setViewportView(resourcesTree);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 1.0;
+		add(resourcesScrollPane, gridBagConstraints);
+	}
+
+	public List<File> getSelectedFiles() {
+		return resourcesTree.getSelectedFiles();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectFilesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanelLayout.java	(revision 42196)
@@ -0,0 +1,207 @@
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+
+import javax.swing.Box;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+
+public class DefaultOutputPanelLayout extends JPanel
+{
+   JLabel fileLabel = new JLabel();
+   JTextField fileTextField = new JTextField();
+   JButton fileBrowserButton = new JButton();
+   JLabel createPackageIndexLabel = new JLabel();
+   JCheckBox createPackageIndexCheckBox = new JCheckBox();
+   JLabel indexFileLabel = new JLabel();
+   JTextField indexFileTextField = new JTextField();
+   JButton indexFileBrowserButton = new JButton();
+   JLabel packageURLLabel = new JLabel();
+   JRadioButton useAbsoluteURLRadioButton = new JRadioButton();
+   ButtonGroup buttongroup1 = new ButtonGroup();
+   JTextField packageURLTextField = new JTextField();
+   JRadioButton usePoolURLRadioButton = new JRadioButton();
+   JTextField packageURLPoolTextField = new JTextField();
+   private SwingInstallerManager swingInstallerManager;
+
+   /**
+    * Default constructor
+    */
+   public DefaultOutputPanelLayout()
+   {
+	  swingInstallerManager = SwingInstallerLocator.getSwingInstallerManager();
+      initializePanel();
+   }
+
+   /**
+    * Adds fill components to empty cells in the first row and first column of the grid.
+    * This ensures that the grid spacing will be the same as shown in the designer.
+    * @param cols an array of column indices in the first row where fill components should be added.
+    * @param rows an array of row indices in the first column where fill components should be added.
+    */
+   void addFillComponents( Container panel, int[] cols, int[] rows )
+   {
+      Dimension filler = new Dimension(10,10);
+
+      boolean filled_cell_11 = false;
+      CellConstraints cc = new CellConstraints();
+      if ( cols.length > 0 && rows.length > 0 )
+      {
+         if ( cols[0] == 1 && rows[0] == 1 )
+         {
+            /** add a rigid area  */
+            panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
+            filled_cell_11 = true;
+         }
+      }
+
+      for( int index = 0; index < cols.length; index++ )
+      {
+         if ( cols[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
+      }
+
+      for( int index = 0; index < rows.length; index++ )
+      {
+         if ( rows[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
+      }
+
+   }
+
+   /**
+    * Helper method to load an image file from the CLASSPATH
+    * @param imageName the package and name of the file to load relative to the CLASSPATH
+    * @return an ImageIcon instance with the specified image file
+    * @throws IllegalArgumentException if the image resource cannot be loaded.
+    */
+   public ImageIcon loadImage( String imageName )
+   {
+      try
+      {
+         ClassLoader classloader = getClass().getClassLoader();
+         java.net.URL url = classloader.getResource( imageName );
+         if ( url != null )
+         {
+            ImageIcon icon = new ImageIcon( url );
+            return icon;
+         }
+      }
+      catch( Exception e )
+      {
+         e.printStackTrace();
+      }
+      throw new IllegalArgumentException( "Unable to load image: " + imageName );
+   }
+
+   /**
+    * Method for recalculating the component orientation for 
+    * right-to-left Locales.
+    * @param orientation the component orientation to be applied
+    */
+   public void applyComponentOrientation( ComponentOrientation orientation )
+   {
+      // Not yet implemented...
+      // I18NUtils.applyComponentOrientation(this, orientation);
+      super.applyComponentOrientation(orientation);
+   }
+
+   public JPanel createPanel()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      fileLabel.setName("fileLabel");
+      fileLabel.setText(swingInstallerManager.getText("select_package_location")+":");
+      jpanel1.add(fileLabel,cc.xywh(2,2,5,1));
+
+      fileTextField.setName("fileTextField");
+      jpanel1.add(fileTextField,cc.xywh(2,3,4,1));
+
+      fileBrowserButton.setActionCommand("Examinar...");
+      fileBrowserButton.setName("fileBrowserButton");
+      fileBrowserButton.setText("...");
+      jpanel1.add(fileBrowserButton,cc.xy(6,3));
+
+      createPackageIndexLabel.setName("createPackageIndexLabel");
+      createPackageIndexLabel.setText(swingInstallerManager.getText("create_package_index"));
+      jpanel1.add(createPackageIndexLabel,cc.xywh(2,5,5,1));
+
+      createPackageIndexCheckBox.setActionCommand("Crear indice para el paquete");
+      createPackageIndexCheckBox.setName("createPackageIndexCheckBox");
+      createPackageIndexCheckBox.setText(swingInstallerManager.getText("create_index_for_package"));
+      jpanel1.add(createPackageIndexCheckBox,cc.xywh(2,6,5,1));
+
+      indexFileLabel.setName("indexFileLabel");
+      indexFileLabel.setText(swingInstallerManager.getText("select_package_index_location"));
+      jpanel1.add(indexFileLabel,cc.xywh(3,7,4,1));
+
+      indexFileTextField.setName("indexFileTextField");
+      jpanel1.add(indexFileTextField,cc.xywh(3,8,3,1));
+
+      indexFileBrowserButton.setActionCommand("Examinar ...");
+      indexFileBrowserButton.setName("indexFileBrowseerButton");
+      indexFileBrowserButton.setText(" ...");
+      jpanel1.add(indexFileBrowserButton,cc.xy(6,8));
+
+      packageURLLabel.setName("packageURLLabel");
+      packageURLLabel.setText(swingInstallerManager.getText("destination_package_url"));
+      jpanel1.add(packageURLLabel,cc.xywh(3,9,4,1));
+
+      useAbsoluteURLRadioButton.setActionCommand("Indique una url absoluta a donde se encontrara el paquete:");
+      useAbsoluteURLRadioButton.setName("useAbsoluteURLRadioButton");
+      useAbsoluteURLRadioButton.setText(swingInstallerManager.getText("absolute_url_package_location")+":");
+      buttongroup1.add(useAbsoluteURLRadioButton);
+      jpanel1.add(useAbsoluteURLRadioButton,cc.xywh(3,10,4,1));
+
+      packageURLTextField.setName("packageURLTextField");
+      jpanel1.add(packageURLTextField,cc.xywh(4,11,3,1));
+
+      usePoolURLRadioButton.setActionCommand("Indique la URL al pool desde el que se podra descargar su paquete (recomendado):");
+      usePoolURLRadioButton.setName("usePoolURLRadioButton");
+      usePoolURLRadioButton.setText(swingInstallerManager.getText("pool_url_package_location")+":");
+      buttongroup1.add(usePoolURLRadioButton);
+      jpanel1.add(usePoolURLRadioButton,cc.xywh(3,12,4,1));
+
+      packageURLPoolTextField.setName("packageURLPoolTextField");
+      jpanel1.add(packageURLPoolTextField,cc.xywh(4,13,3,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanelLayout.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanel.java	(revision 42196)
@@ -0,0 +1,287 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.creation.JOutputPanel;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class DefaultOutputPanel extends JOutputPanel {
+
+	private static final long serialVersionUID = 1219577194134960697L;
+
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private DefaultOutputPanelLayout form = null;
+
+	private PackageInfo packageInfo = null;
+	
+	public DefaultOutputPanel() {
+		super();
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	private void initComponents() {
+		this.form = new DefaultOutputPanelLayout();
+		this.form.indexFileBrowserButton.setEnabled(false);
+		this.form.indexFileTextField.setEditable(false);
+		this.form.packageURLTextField.setEnabled(false);
+		this.form.packageURLPoolTextField.setEnabled(false);
+		this.form.useAbsoluteURLRadioButton.setEnabled(false);
+		this.form.usePoolURLRadioButton.setEnabled(false);
+		this.form.createPackageIndexCheckBox.setSelected(false);
+		
+                this.form.usePoolURLRadioButton.setSelected(true);
+                
+		this.form.indexFileBrowserButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				File[] f = showOpenFileDialog("_Select_package_index_file",null);
+				if( f!=null ) {
+					setPackageIndexFile(f[0]);
+				}
+			}
+		});
+		this.form.fileBrowserButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				File[] f = showOpenFileDialog("_Select_package_file",null);
+				if( f!=null ) {
+					setPackageFile(f[0]);
+				}
+			}
+		});
+		this.form.createPackageIndexCheckBox.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				boolean x = form.createPackageIndexCheckBox.isSelected();
+				setCreatePackageIndex(x);
+			}
+		});
+		this.form.useAbsoluteURLRadioButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if( form.useAbsoluteURLRadioButton.isSelected() ) {
+					form.packageURLTextField.setEnabled(true);
+					form.packageURLPoolTextField.setEnabled(false);
+				} else {
+					form.packageURLTextField.setEnabled(false);
+					form.packageURLPoolTextField.setEnabled(true);
+				}
+			}
+		});
+		this.form.usePoolURLRadioButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if( form.useAbsoluteURLRadioButton.isSelected() ) {
+					form.packageURLTextField.setEnabled(true);
+					form.packageURLPoolTextField.setEnabled(false);
+				} else {
+					form.packageURLTextField.setEnabled(false);
+					form.packageURLPoolTextField.setEnabled(true);
+				}
+			}
+		});
+		
+		
+		setLayout(new BorderLayout());
+		add(this.form, BorderLayout.CENTER);
+	}
+
+	@Override
+	public void setPackageInfo(PackageInfo packageInfo) {
+		this.packageInfo = packageInfo;
+	}
+	
+	@Override
+	public File getPackageFile() {
+		String s = this.form.fileTextField.getText().trim();
+		if( s.length()==0 ) {
+			return null;
+		}
+		return new File(s);
+	}
+
+	@Override
+	public void setPackageFile(File selectedFile) {
+		this.form.fileTextField.setText(selectedFile.toString());
+	}
+
+	@Override
+	public boolean isCreatePackageIndex() {
+		return this.form.createPackageIndexCheckBox.isSelected();
+	}
+
+	@Override
+	public void setCreatePackageIndex(boolean create) {
+		if( this.form.createPackageIndexCheckBox.isSelected() != create ) { 
+			this.form.createPackageIndexCheckBox.setSelected(create);
+		}
+		if( create ) {
+			this.form.indexFileBrowserButton.setEnabled(true);
+			this.form.indexFileTextField.setEditable(true);
+			this.form.packageURLTextField.setEnabled(true);
+			this.form.packageURLPoolTextField.setEnabled(true);
+			this.form.useAbsoluteURLRadioButton.setEnabled(true);
+			this.form.usePoolURLRadioButton.setEnabled(true);
+		} else {
+			this.form.indexFileBrowserButton.setEnabled(false);
+			this.form.indexFileTextField.setEditable(false);
+			this.form.packageURLTextField.setEnabled(false);
+			this.form.packageURLPoolTextField.setEnabled(false);
+			this.form.useAbsoluteURLRadioButton.setEnabled(false);
+			this.form.usePoolURLRadioButton.setEnabled(false);
+		}
+	}
+
+	@Override
+	public File getPackageIndexFile() {
+		if ( !isCreatePackageIndex()) {
+			return null;
+		}
+		String s = this.form.indexFileTextField.getText().trim();
+		if( s.length()==0 ) {
+			return null;
+		}
+		return new File(s);
+	}
+
+	@Override
+	public void setPackageIndexFile(File selectedIndexFile) {
+		this.form.indexFileTextField.setText(selectedIndexFile.toString());
+	}
+
+	@Override
+	public URL getDownloadURL() {
+		String s = null;
+		if (! isCreatePackageIndex()) {
+			return null;
+		}
+		try {
+			if( this.form.useAbsoluteURLRadioButton.isSelected() ) {
+				s = this.form.packageURLTextField.getText();
+			} else {
+				s = this.form.packageURLPoolTextField.getText();
+				File ff = this.getPackageFile();
+				PackageInfo pkg = this.getPackageInfo();
+				if( pkg == null ) {
+					this.form.useAbsoluteURLRadioButton.setSelected(true);
+					this.form.usePoolURLRadioButton.setEnabled(false);
+					JOptionPane.showMessageDialog(null, swingInstallerManager
+							.getText("_Cant_use_pool_URL"));
+					return null;
+				}
+				String fileName = InstallerLocator.getInstallerManager()
+						.getPackageFileName(pkg);
+				s = s + pkg.getCode() + "/" + fileName;
+			}
+			return new URL(s);
+		} catch (MalformedURLException e) {
+			JOptionPane.showMessageDialog(null, swingInstallerManager
+					.getText("_invalid_download_url") + ": "
+							+ this.form.packageURLTextField.getText());
+			return null;
+		} catch(Exception ex) {
+			return null;
+		}
+	}
+
+	@Override
+	public void setDownloadURL(URL downloadURL) {
+		this.form.useAbsoluteURLRadioButton.setSelected(false);
+		this.form.usePoolURLRadioButton.setSelected(true);
+		if( downloadURL==null ) {
+			this.form.packageURLPoolTextField.setText("");
+			this.form.packageURLTextField.setText("");
+			return;
+		}
+		this.form.packageURLTextField.setText(downloadURL.toString());
+		try {
+			File ff = new File(downloadURL.getPath());
+			String s = ff.getParentFile().getParentFile().getAbsolutePath();
+			URL url = new URL(downloadURL, s);
+			this.form.packageURLPoolTextField.setText(url.toString());
+		} catch (MalformedURLException e) {
+			this.form.packageURLPoolTextField.setText("");
+		}
+	}
+	
+	private File[] showChooserDialog(
+			final String title,
+			final int type, // SAVE_DIALOG / OPEN_DIALOG
+			final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
+			final boolean multiselection, 
+			final File initialPath,
+			final FileFilter filter,
+			final boolean fileHidingEnabled
+			) {
+		JFileChooser fc = new JFileChooser();
+		fc.setDialogTitle(title);
+		fc.setDialogType(type);
+		fc.setFileSelectionMode(selectionMode);
+		fc.setMultiSelectionEnabled(multiselection);
+		fc.setCurrentDirectory(initialPath);
+		fc.setFileFilter(filter);
+		fc.setFileHidingEnabled(fileHidingEnabled);
+		int r = JFileChooser.CANCEL_OPTION;
+		switch(type) {
+		case JFileChooser.SAVE_DIALOG:
+			r = fc.showSaveDialog(this);
+			break;
+		case JFileChooser.OPEN_DIALOG:
+		default:
+			r = fc.showOpenDialog(this);
+			break;
+		}
+		if( r != JFileChooser.APPROVE_OPTION ) {
+			return null;
+		}
+		if( fc.isMultiSelectionEnabled() ) {
+			return fc.getSelectedFiles();
+		} else {
+			return new File[] { fc.getSelectedFile() };
+		}
+	}
+	
+	private File[] showOpenFileDialog(String title, File initialPath) {
+		return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+	}
+	
+	protected PackageInfo getPackageInfo() {
+		return this.packageInfo;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultOutputPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AntScriptPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AntScriptPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AntScriptPanel.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ScrollPaneConstants;
+
+import org.apache.batik.util.gui.xmleditor.XMLEditorKit;
+
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AntScriptPanel extends JPanel {
+
+	private static final long serialVersionUID = 6279969036777585961L;
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private JEditorPane scriptEditorPane;
+	private JScrollPane scriptScrollPane;
+
+	public AntScriptPanel() {
+		super();
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	private void initComponents() {
+
+		scriptEditorPane = new javax.swing.JEditorPane();
+		scriptEditorPane.setEditorKitForContentType("text/xml",
+				new XMLEditorKit());
+		scriptEditorPane.setContentType("text/xml");
+
+		scriptScrollPane = new javax.swing.JScrollPane(scriptEditorPane);
+		scriptScrollPane
+				.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+		scriptScrollPane.setPreferredSize(new Dimension(250, 300));
+		scriptScrollPane.setMinimumSize(new Dimension(10, 10));
+
+		setLayout(new BorderLayout());
+
+		add(scriptScrollPane, BorderLayout.CENTER);
+	}
+
+	public String getAntScript() {
+		return scriptEditorPane.getText();
+	}
+
+	public void setAntScript(String antScript) {
+		scriptEditorPane.setText(antScript);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/AntScriptPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectPluginToInstallPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectPluginToInstallPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectPluginToInstallPanel.java	(revision 42196)
@@ -0,0 +1,127 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.BorderLayout;
+import java.awt.Checkbox;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JCheckBox;
+
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.SwingConstants;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.creation.model.PluginListCellRenderer;
+import org.gvsig.installer.swing.impl.creation.model.PluginListModel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectPluginToInstallPanel extends JPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 7910780973467189103L;
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+	private JList pluginList;
+	private JScrollPane pluginScrollPane1;
+	private PackageInfo selectedInstallerInfo = null;
+        private JCheckBox chkShowFullPath;
+    private PluginListModel pluginListModel;
+
+	public SelectPluginToInstallPanel() {
+		super();
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	public void setPluginsDirectory(
+			MakePluginPackageService installerCreationService)
+			throws MakePluginPackageServiceException {
+                pluginListModel = new PluginListModel(installerCreationService);
+		pluginList.setModel(pluginListModel);
+		pluginList.setCellRenderer(new PluginListCellRenderer(this));
+	}
+
+	private void initComponents() {
+
+		pluginScrollPane1 = new JScrollPane();
+		pluginList = new JList();
+		pluginScrollPane1.setViewportView(pluginList);
+                
+                chkShowFullPath = new JCheckBox("Show full paths", false);
+                chkShowFullPath.setHorizontalAlignment(SwingConstants.RIGHT);
+                chkShowFullPath.addActionListener(new ActionListener() {
+                    public void actionPerformed(ActionEvent ae) {
+                        pluginListModel.refresh();
+                    }
+                });
+
+//		java.awt.GridBagConstraints gridBagConstraints;
+//		setLayout(new GridBagLayout());
+//		gridBagConstraints = new GridBagConstraints();
+//		gridBagConstraints.fill = GridBagConstraints.BOTH;
+//		gridBagConstraints.weightx = 1.0;
+//		gridBagConstraints.weighty = 1.0;
+//		add(pluginScrollPane1, gridBagConstraints);
+                
+                
+                setLayout(new BorderLayout());
+                this.add(pluginScrollPane1, BorderLayout.CENTER);
+                this.add(chkShowFullPath,BorderLayout.SOUTH);
+	}
+
+        public boolean getShowFullPaths() {
+            return this.chkShowFullPath.isSelected();
+        }
+        
+	/**
+	 * @return the selectedPlugin
+	 */
+	public PackageInfo getSelectedInstallerInfo() {
+		return selectedInstallerInfo;
+	}
+
+	/**
+	 * @param selectedPlugin
+	 *            the selectedPlugin to set
+	 */
+	public void setSelectedInstallerInfo(PackageInfo installerInfo) {
+		this.selectedInstallerInfo = installerInfo;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/SelectPluginToInstallPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultPackageInfoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultPackageInfoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultPackageInfoPanel.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.panel;
+
+import java.awt.BorderLayout;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Map;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.creation.JPackageInfoPanel;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.DynFormManager;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.packageutils.impl.PackageInfoTags;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultPackageInfoPanel extends JPackageInfoPanel {
+
+	private static final Logger logger = LoggerFactory.getLogger(DefaultPackageInfoPanel.class);
+	
+	private static final long serialVersionUID = 3220127550495628087L;
+
+	protected DefaultSwingInstallerManager swingInstallerManager = null;
+
+	private JDynForm form = null;
+	private DynObject data = null;
+
+	
+	public DefaultPackageInfoPanel() {
+		super();
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+		initComponents();
+	}
+
+	private void initComponents() {
+		DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+		InputStream resource = this.getClass().getClassLoader().getResourceAsStream("org/gvsig/installer/swing/impl/creation/panel/formPackageinfo.xml");
+		try {
+			Map definitions = dynObjectManager.importDynClassDefinitions(resource, this.getClass().getClassLoader());
+			DynStruct definition = (DynStruct) definitions.get("FormPackageinfo");
+			this.data = dynObjectManager.createDynObject(definition);
+			
+			DynFormManager dynFormManager = DynFormLocator.getDynFormManager();
+			this.form = dynFormManager.createJDynForm(data);
+		} catch (Exception e) {
+			// Uf....
+			logger.warn("No se puede crear el formulario.", e);
+			throw new RuntimeException("No se puede crear el formulario.", e);
+		}
+		
+		this.setLayout(new BorderLayout(4, 4));
+		this.add(form.asJComponent(),BorderLayout.CENTER);
+	}
+	
+	
+	protected String findCurrentGvSIGVersion() {
+		return SwingInstallerLocator.getSwingInstallerManager()
+				.getApplicationVersion();
+	}
+
+
+	public String getName() {
+		return (String) this.form.getValue(PackageInfoTags.NAME);
+	}
+
+	public void setName(String name) {
+		this.form.setValue(PackageInfoTags.NAME, name);
+	}
+
+
+	@Override
+	public boolean validatePanel() {
+		return this.form.hasValidValues();
+	}
+
+	@Override
+	public void panelToPackageInfo(PackageInfo packageInfo) {
+		
+		this.form.getValues(data);
+		packageInfo.setType( (String) data.getDynValue(PackageInfoTags.TYPE));
+		packageInfo.setCode( (String) data.getDynValue(PackageInfoTags.CODE));
+		packageInfo.setName((String) data.getDynValue(PackageInfoTags.NAME));
+		packageInfo.setDescription((String) data.getDynValue(PackageInfoTags.DESCRIPTION));
+		packageInfo.setVersion((Version) data.getDynValue(PackageInfoTags.VERSION));
+		packageInfo.setBuild(((Integer) data.getDynValue(PackageInfoTags.BUILD)).intValue());
+		packageInfo.setState((String) data.getDynValue(PackageInfoTags.STATE));
+		packageInfo.setOfficial(((Boolean) data.getDynValue(PackageInfoTags.OFFICIAL)).booleanValue());
+		packageInfo.setOperatingSystem((String) data.getDynValue(PackageInfoTags.OS));
+		packageInfo.setArchitecture((String) data.getDynValue(PackageInfoTags.ARCHITECTURE));
+		packageInfo.setJavaVM((String) data.getDynValue(PackageInfoTags.JVM));
+		packageInfo.setGvSIGVersion((String) data.getDynValue(PackageInfoTags.GVSIG_VERSION));
+		packageInfo.setSourcesURL((URL) data.getDynValue(PackageInfoTags.SOURCES_URL));
+		packageInfo.setOwnerURL((URL) data.getDynValue(PackageInfoTags.OWNER_URL));
+		packageInfo.setOwner((String) data.getDynValue(PackageInfoTags.OWNER));
+		packageInfo.setDependencies((String) data.getDynValue(PackageInfoTags.DEPENDENCIES));
+		packageInfo.addCategoriesAsString((String) data.getDynValue(PackageInfoTags.CATEGORIES));
+	}
+
+	private boolean isEmptyString(String s) {
+		if( s==null) {
+			return true;
+		}
+		return s.length() == 0; 
+	}
+	
+	@Override
+	public void packageInfoToPanel(PackageInfo packageInfo) {
+		this.data.setDynValue(PackageInfoTags.TYPE, packageInfo.getType());
+		this.data.setDynValue(PackageInfoTags.CODE, packageInfo.getCode());
+		this.data.setDynValue(PackageInfoTags.NAME, packageInfo.getName());
+		this.data.setDynValue(PackageInfoTags.VERSION, packageInfo.getVersion());
+		this.data.setDynValue(PackageInfoTags.GVSIG_VERSION, findCurrentGvSIGVersion());
+		this.data.setDynValue(PackageInfoTags.BUILD, packageInfo.getBuild());
+		this.data.setDynValue(PackageInfoTags.OFFICIAL, packageInfo.isOfficial());
+		this.data.setDynValue(PackageInfoTags.STATE, packageInfo.getState());
+		this.data.setDynValue(PackageInfoTags.DESCRIPTION, packageInfo.getDescription());
+		this.data.setDynValue(PackageInfoTags.OS, packageInfo.getOperatingSystem());
+		this.data.setDynValue(PackageInfoTags.ARCHITECTURE, packageInfo.getArchitecture());
+		this.data.setDynValue(PackageInfoTags.JVM, packageInfo.getJavaVM());
+		this.data.setDynValue(PackageInfoTags.SOURCES_URL, packageInfo.getSourcesURL());
+		this.data.setDynValue(PackageInfoTags.OWNER, packageInfo.getOwner());
+		this.data.setDynValue(PackageInfoTags.OWNER_URL, packageInfo.getOwnerURL());
+		this.data.setDynValue(PackageInfoTags.DEPENDENCIES, packageInfo.getDependencies());
+		this.data.setDynValue(PackageInfoTags.CATEGORIES, packageInfo.getCategoriesAsString());
+		//this.data.setDynValue(PackageInfoTags.CODEALIAS, packageInfo.getAllCodes().toString());
+		this.form.getField(PackageInfoTags.CODEALIAS).setReadOnly(true);
+		
+//		if (  !isEmptyString(packageInfo.getCode()) ){
+//			this.form.getField(PackageInfoTags.CODE).setReadOnly(true);
+//		}
+		this.form.setValues(data);
+
+	}
+	
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/panel/DefaultPackageInfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListCellRenderer.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.model;
+
+import java.awt.Component;
+import java.io.File;
+
+import javax.swing.JCheckBox;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.impl.creation.panel.SelectPluginToInstallPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PluginListCellRenderer extends JCheckBox implements
+		ListCellRenderer {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = -3727657020492852977L;
+	private SelectPluginToInstallPanel selectPluginToInstallPanel;
+
+	public PluginListCellRenderer(
+			SelectPluginToInstallPanel selectPluginToInstallPanel) {
+		this.selectPluginToInstallPanel = selectPluginToInstallPanel;
+	}
+
+	public Component getListCellRendererComponent(JList list, Object value,
+			int index, boolean isSelected, boolean cellHasFocus) {
+            
+		PackageInfo installerInfo = (PackageInfo) value;
+                if( this.selectPluginToInstallPanel.getShowFullPaths() ) {
+                    InstallerManager manager = InstallerLocator.getInstallerManager();
+                    File pathname = manager.getAddonFolder(installerInfo.getCode());
+                    setText(installerInfo.getCode() + " ("+pathname.getAbsolutePath()+")");
+                } else {
+                    setText(installerInfo.getCode());
+                }
+		setSelected(isSelected);
+		if (isSelected) {
+			selectPluginToInstallPanel.setSelectedInstallerInfo(installerInfo);
+		}
+		return this;
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTree.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTree.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTree.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.model;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JTree;
+import javax.swing.tree.TreeSelectionModel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFilesTree extends JTree {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 9167217334192981460L;
+
+	public SelectFilesTree() {
+		super();
+	}
+
+	public void setApplicationDirectory(File applicationDirectory) {
+		setModel(new SelectFilesTreeModel(applicationDirectory));
+		setCellRenderer(new SelectFilesTreeCellRenderer());
+		getSelectionModel().setSelectionMode(
+				TreeSelectionModel.SINGLE_TREE_SELECTION);
+		addMouseListener(new SelectFilesTreeNodeSelectionListener(this));
+	}
+
+	public List<File> getSelectedFiles() {
+		List<File> selectedFiles = new ArrayList<File>();
+		addSelectedFiles((SelectFilesTreeCheckNode) getModel().getRoot(),
+				selectedFiles);
+		return selectedFiles;
+	}
+
+	public void addSelectedFiles(SelectFilesTreeCheckNode node,
+			List<File> selectedFiles) {
+
+		if (node.isSelected) {
+			File absolutePath = new File(node.getFile().getAbsolutePath());
+			if (!absolutePath.isDirectory()) {
+				selectedFiles.add(absolutePath);
+			} else {
+				traverseChildren(node, selectedFiles);
+			}
+		} else {
+			if (node.getFile().isDirectory()) {
+				for (int i = 0; i < node.getChildCount(); i++) {
+					addSelectedFiles((SelectFilesTreeCheckNode) node
+							.getChildAt(i), selectedFiles);
+				}
+				traverseChildren(node, selectedFiles);
+			}
+		}
+	}
+
+	protected void traverseChildren(SelectFilesTreeCheckNode node,
+			List<File> selectedFiles) {
+		for (int i = 0; i < node.getChildCount(); i++) {
+			addSelectedFiles((SelectFilesTreeCheckNode) node.getChildAt(i),
+					selectedFiles);
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTree.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeModel.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.model;
+
+import java.io.File;
+
+import javax.swing.tree.DefaultTreeModel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFilesTreeModel extends DefaultTreeModel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 4319288411353595566L;
+
+	public SelectFilesTreeModel(File pluginsDirectory) {
+		super(new SelectFilesTreeCheckNode(pluginsDirectory));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeNodeSelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeNodeSelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeNodeSelectionListener.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.model;
+
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JTree;
+import javax.swing.tree.TreePath;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFilesTreeNodeSelectionListener extends MouseAdapter {
+
+	JTree tree;
+
+	public SelectFilesTreeNodeSelectionListener(JTree tree) {
+		this.tree = tree;
+	}
+
+	@Override
+	public void mouseClicked(MouseEvent e) {
+		int x = e.getX();
+		int y = e.getY();
+		int row = tree.getRowForLocation(x, y);
+		TreePath path = tree.getPathForRow(row);
+		// TreePath path = tree.getSelectionPath();
+		if (path != null) {
+			SelectFilesTreeCheckNode node = (SelectFilesTreeCheckNode) path
+					.getLastPathComponent();
+			boolean isSelected = !(node.isSelected());
+			node.setSelected(isSelected);
+
+			((SelectFilesTreeModel) tree.getModel()).nodeChanged(node);
+			// I need revalidate if node is root. but why?
+			if (row == 0) {
+				tree.revalidate();
+				tree.repaint();
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeNodeSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCheckNode.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCheckNode.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCheckNode.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.model;
+
+import java.io.File;
+import java.util.Enumeration;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFilesTreeCheckNode extends DefaultMutableTreeNode {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 8722862821986059646L;
+	public final static int SINGLE_SELECTION = 0;
+	public final static int DIG_IN_SELECTION = 4;
+	protected int selectionMode;
+	protected boolean isSelected;
+
+	private File file = null;
+
+	public SelectFilesTreeCheckNode(File file) {
+		this(file, true, false);
+	}
+
+	public SelectFilesTreeCheckNode(File file, boolean allowsChildren,
+			boolean isSelected) {
+		super(file, allowsChildren);
+		this.isSelected = isSelected;
+		setSelectionMode(DIG_IN_SELECTION);
+		this.file = file;
+		if (file.isDirectory()) {
+			retrieveChildren();
+		}
+	}
+
+	public void setSelectionMode(int mode) {
+		selectionMode = mode;
+	}
+
+	public int getSelectionMode() {
+		return selectionMode;
+	}
+
+	public void setSelected(boolean isSelected) {
+		this.isSelected = isSelected;
+
+		if ((selectionMode == DIG_IN_SELECTION) && (children != null)) {
+			Enumeration e = children.elements();
+			while (e.hasMoreElements()) {
+				SelectFilesTreeCheckNode node = (SelectFilesTreeCheckNode) e
+						.nextElement();
+				node.setSelected(isSelected);
+			}
+		}
+	}
+
+	public boolean isSelected() {
+		return isSelected;
+	}
+
+	public boolean isFile() {
+		return file.isFile();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.swing.tree.DefaultMutableTreeNode#getChildAt(int)
+	 */
+	@Override
+	public TreeNode getChildAt(int index) {
+		return super.getChildAt(index);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.swing.tree.DefaultMutableTreeNode#getChildCount()
+	 */
+	@Override
+	public int getChildCount() {
+		return super.getChildCount();
+	}
+
+	private void retrieveChildren() {
+		File[] files = file.listFiles();
+		for (int i = 0; i < files.length; i++) {
+			add(new SelectFilesTreeCheckNode(files[i]));
+		}
+	}
+
+	/**
+	 * @return the file
+	 */
+	public File getFile() {
+		return file;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.swing.tree.DefaultMutableTreeNode#toString()
+	 */
+	@Override
+	public String toString() {
+		return file.getName();
+	}
+
+	// If you want to change "isSelected" by CellEditor,
+
+	// public void setUserObject(Object obj) {
+	// if (obj instanceof Boolean) {
+	// setSelected(((Boolean)obj).booleanValue());
+	// }else{
+	// super.setUserObject(obj);
+	// }
+	// }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCheckNode.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCellRenderer.java	(revision 42196)
@@ -0,0 +1,169 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.model;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+
+import javax.swing.Icon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTree;
+import javax.swing.UIManager;
+import javax.swing.plaf.ColorUIResource;
+import javax.swing.tree.TreeCellRenderer;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFilesTreeCellRenderer extends JPanel implements
+		TreeCellRenderer {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 3880990147213047185L;
+	protected JCheckBox check;
+
+	public SelectFilesTreeCellRenderer() {
+		setLayout(null);
+		add(check = new JCheckBox());
+		check.setBackground(UIManager.getColor("Tree.textBackground"));
+	}
+
+	public Component getTreeCellRendererComponent(JTree tree, Object value,
+			boolean isSelected, boolean expanded, boolean leaf, int row,
+			boolean hasFocus) {
+		String stringValue = tree.convertValueToText(value, isSelected,
+				expanded, leaf, row, hasFocus);
+
+		setEnabled(tree.isEnabled());
+		check.setSelected(((SelectFilesTreeCheckNode) value).isSelected());
+		check.setText(stringValue);
+		return this;
+	}
+
+	@Override
+	public Dimension getPreferredSize() {
+		Dimension d_check = check.getPreferredSize();
+		return new Dimension(d_check.width, d_check.height);
+
+	}
+
+	@Override
+	public void doLayout() {
+		Dimension d_check = check.getPreferredSize();
+		int y_check = 0;
+		check.setLocation(0, y_check);
+		check.setBounds(0, y_check, d_check.width, d_check.height);
+	}
+
+	@Override
+	public void setBackground(Color color) {
+		if (color instanceof ColorUIResource) {
+			color = null;
+		}
+		super.setBackground(color);
+	}
+
+	public class TreeLabel extends JLabel {
+
+		/**
+         * 
+         */
+		private static final long serialVersionUID = -6969544786323247161L;
+
+		boolean isSelected;
+
+		boolean hasFocus;
+
+		public TreeLabel() {
+		}
+
+		@Override
+		public void setBackground(Color color) {
+			if (color instanceof ColorUIResource) {
+				color = null;
+			}
+			super.setBackground(color);
+		}
+
+		@Override
+		public void paint(Graphics g) {
+			String str;
+			if ((str = getText()) != null) {
+				if (0 < str.length()) {
+					if (isSelected) {
+						g.setColor(UIManager
+								.getColor("Tree.selectionBackground"));
+					} else {
+						g.setColor(UIManager.getColor("Tree.textBackground"));
+					}
+					Dimension d = getPreferredSize();
+					int imageOffset = 0;
+					Icon currentI = getIcon();
+					if (currentI != null) {
+						imageOffset = currentI.getIconWidth()
+								+ Math.max(0, getIconTextGap() - 1);
+					}
+					g.fillRect(imageOffset, 0, d.width - 1 - imageOffset,
+							d.height);
+					if (hasFocus) {
+						g.setColor(UIManager
+								.getColor("Tree.selectionBorderColor"));
+						g.drawRect(imageOffset, 0, d.width - 1 - imageOffset,
+								d.height - 1);
+					}
+				}
+			}
+			super.paint(g);
+		}
+
+		@Override
+		public Dimension getPreferredSize() {
+			Dimension retDimension = super.getPreferredSize();
+			if (retDimension != null) {
+				retDimension = new Dimension(retDimension.width + 3,
+						retDimension.height);
+			}
+			return retDimension;
+		}
+
+		public void setSelected(boolean isSelected) {
+			this.isSelected = isSelected;
+		}
+
+		public void setFocus(boolean hasFocus) {
+			this.hasFocus = hasFocus;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/SelectFilesTreeCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListModel.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.model;
+
+import java.util.Arrays;
+import java.util.Comparator;
+
+import javax.swing.AbstractListModel;
+
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PluginListModel extends AbstractListModel {
+
+	private static final long serialVersionUID = -6434919440184484361L;
+	private PackageInfo[] plugins;
+
+	public PluginListModel(MakePluginPackageService installerCreationService)
+			throws MakePluginPackageServiceException {
+		super();
+
+		plugins = new PackageInfo[installerCreationService
+				.getPluginPackageCount()];
+		for (int i = 0; i < plugins.length; i++) {
+			plugins[i] = installerCreationService.getPluginPackageInfo(i);
+		}
+
+		Arrays.sort(plugins, new Comparator<PackageInfo>() {
+
+			public int compare(PackageInfo info1, PackageInfo info2) {
+				if (info2 == null) {
+					return info1 == null ? 0 : 1;
+				}
+
+				if (info1 == null) {
+					return -1;
+				}
+
+				return info1.getCode().compareTo(info2.getCode());
+			}
+		});
+	}
+
+	public Object getElementAt(int index) {
+		return plugins[index];
+	}
+
+	public int getSize() {
+		return plugins.length;
+	}
+
+        public void refresh() {
+            this.fireContentsChanged(this, 0,this.getSize());
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/model/PluginListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AdvancedModeSelectionWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AdvancedModeSelectionWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AdvancedModeSelectionWizard.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.wizard;
+
+import java.io.File;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.creation.panel.AdvancedModeSelectionPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AdvancedModeSelectionWizard extends AdvancedModeSelectionPanel
+		implements OptionPanel {
+
+	private static final long serialVersionUID = 257540289911849694L;
+	private DefaultMakePluginPackageWizard installerCreationWizard;
+
+	public AdvancedModeSelectionWizard(
+			DefaultMakePluginPackageWizard installerCreationWizard) {
+		super();
+		this.installerCreationWizard = installerCreationWizard;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_advanced_options");
+	}
+
+	public void lastPanel() {
+		// TODO Auto-generated method stub
+	}
+
+	public void nextPanel() {
+
+		if (!isAdvancedModeSelected()) {
+
+			InstallerManager manager = InstallerLocator.getInstallerManager();
+			String pluginName = installerCreationWizard
+					.getSelectedPackageInfo().getCode();
+			File pluginLocation = manager.getAddonFolder(pluginName);
+			File folder = null;
+
+			if (pluginLocation != null) {
+				String path = pluginLocation.getAbsolutePath() + File.separator
+						+ "install";
+				folder = new File(path);
+			}
+
+			if (folder != null && folder.exists()) {
+				String msg = Messages
+						.getText("_the_folder_install_already_exists._do_you_want_to_delete_it_before_proceeding?");
+
+				int resp = JOptionPane.showConfirmDialog(null, msg, Messages
+						.getText("_select_an_option"),
+						JOptionPane.YES_NO_OPTION);
+
+				if (resp == JOptionPane.OK_OPTION) {
+					PackageInfo packageInfo = installerCreationWizard
+							.getSelectedPackageInfo();
+					boolean success = packageInfo.removeInstallFolder(folder);
+
+					if (!success) {
+						JOptionPane.showMessageDialog(null, Messages
+								.getText("_Couldn't_delete_the_directory"));
+					}
+				}
+			}
+		}
+		installerCreationWizard
+				.setAdvancedModeSelected(isAdvancedModeSelected());
+	}
+
+	public void updatePanel() {
+            // TODO Auto-generated method stub
+            PackageInfo pkg = this.installerCreationWizard.getSelectedPackageInfo();
+            if( pkg.getType().equalsIgnoreCase("plugin") ) {
+                setAvancedModeSupported(true);
+            } else {
+                setAvancedModeSupported(false);
+            }
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AdvancedModeSelectionWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectOutputFileWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectOutputFileWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectOutputFileWizard.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.wizard;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.creation.panel.DefaultOutputPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectOutputFileWizard extends DefaultOutputPanel implements
+		OptionPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = 555020268506822671L;
+	private DefaultMakePluginPackageWizard installerCreationWizard;
+	private static final Logger logger = LoggerFactory
+			.getLogger(SelectOutputFileWizard.class);
+
+	public SelectOutputFileWizard(
+			DefaultMakePluginPackageWizard installerCreationWizard) {
+		super();
+		this.installerCreationWizard = installerCreationWizard;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_output_options");
+	}
+
+	public void lastPanel() {
+
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		try {
+			File file = getPackageFile();
+			File filePath = new File(file.getParent());
+			if (!filePath.exists()) {
+				JOptionPane
+						.showMessageDialog(
+								installerCreationWizard,
+								swingInstallerManager
+										.getText("_the_package_file_folder_does_not_exist")
+										+ ": " + filePath);
+				throw new NotContinueWizardException("", null, false);
+			}
+
+			if (isCreatePackageIndex()) {
+				URL url = getDownloadURL();
+				if (url == null) {
+					throw new NotContinueWizardException("", null, false);
+				}
+				installerCreationWizard.setDownloadURL(url);
+				File indexFile = getPackageIndexFile();
+				File indexFilePath = new File(indexFile.getParent());
+				if (!indexFilePath.exists()) {
+					JOptionPane
+							.showMessageDialog(
+									installerCreationWizard,
+									swingInstallerManager
+											.getText("_the_package_index_file_folder_does_not_exist")
+											+ ": " + indexFilePath);
+					throw new NotContinueWizardException("", null, false);
+				}
+				installerCreationWizard
+						.setIndexOutputStream(new FileOutputStream(indexFile));
+			}
+			installerCreationWizard.setOutputStream(new FileOutputStream(file));
+		} catch (FileNotFoundException e) {
+			logger.info(swingInstallerManager
+					.getText("Create output file exception"), e);
+			JOptionPane.showMessageDialog(installerCreationWizard,
+					swingInstallerManager
+							.getText("_create_output_file_exception"));
+		}
+	}
+
+	public void updatePanel() {
+		setPackageFile(getDefaultPackageBundleFile());
+		setPackageIndexFile(getDefaultPackageIndexBundleFile());
+	}
+
+	private File getDefaultPackageBundleFile() {
+		File installsFolder = installerCreationWizard.getInstallFolder();
+		PackageInfo info = installerCreationWizard.getSelectedPackageInfo();
+		String fileName = InstallerLocator.getInstallerManager()
+				.getPackageFileName(info);
+		return new File(installsFolder, fileName);
+	}
+
+	private File getDefaultPackageIndexBundleFile() {
+		File installsFolder = installerCreationWizard.getInstallFolder();
+		PackageInfo info = installerCreationWizard.getSelectedPackageInfo();
+		String fileName = InstallerLocator.getInstallerManager()
+				.getPackageIndexFileName(info);
+		return new File(installsFolder, fileName);
+	}
+	
+	@Override
+	protected PackageInfo getPackageInfo() {
+		PackageInfo info = installerCreationWizard.getSelectedPackageInfo();
+		return info;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectOutputFileWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectFilesWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectFilesWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectFilesWizard.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.wizard;
+
+import java.io.File;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.creation.panel.SelectFilesPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFilesWizard extends SelectFilesPanel implements OptionPanel {
+
+	private static final long serialVersionUID = 1645239143301238773L;
+	private DefaultMakePluginPackageWizard installerCreationWizard;
+
+	public SelectFilesWizard(
+			DefaultMakePluginPackageWizard installerCreationWizard) {
+		super();
+		this.installerCreationWizard = installerCreationWizard;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_files_to_copy");
+	}
+
+	public void lastPanel() {
+		// Do nothing
+
+	}
+
+	public void nextPanel() {
+
+		PackageInfo packageInfo = installerCreationWizard
+				.getSelectedPackageInfo();
+
+		packageInfo.clearFilesToCopy();
+		List<File> selectedFiles = getSelectedFiles();
+
+		for (int i = 0; i < selectedFiles.size(); i++) {
+			packageInfo.addFileToCopy(selectedFiles.get(i));
+		}
+	}
+
+	public void updatePanel() {
+
+		InstallerManager manager = InstallerLocator.getInstallerManager();
+		String pluginName = installerCreationWizard.getSelectedPackageInfo()
+				.getCode();
+		File pluginLocation = manager.getAddonFolder(pluginName);
+		File folder = null;
+
+		if (pluginLocation != null) {
+			String path = pluginLocation.getAbsolutePath() + File.separator
+					+ "install" + File.separator + "files";
+			folder = new File(path);
+		}
+
+		if (folder != null && folder.exists() && folder.isDirectory()) {
+			String msg = Messages
+					.getText("_the_folder_install/files_already_exists_do_you_want_to_delete_it_before_proceeding?");
+
+			int resp = JOptionPane.showConfirmDialog(null, msg, Messages
+					.getText("_select_an_option"), JOptionPane.YES_NO_OPTION);
+
+			if (resp == JOptionPane.OK_OPTION) {
+				PackageInfo packageInfo = installerCreationWizard
+						.getSelectedPackageInfo();
+
+				if (!packageInfo.removeFilesFolder(folder)) {
+					JOptionPane.showMessageDialog(null, Messages
+							.getText("_Couldn't_delete_the_directory"));
+				}
+			}
+
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectFilesWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/ProgressWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/ProgressWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/ProgressWizard.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+package org.gvsig.installer.swing.impl.creation.wizard;
+
+import java.io.File;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.impl.DefaultSwingInstallerManager;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.panel.DefaultProgressPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class ProgressWizard extends DefaultProgressPanel implements OptionPanel {
+
+	private static final long serialVersionUID = -2940454513497249659L;
+	private DefaultMakePluginPackageWizard installerCreationWizard;
+	private DefaultSwingInstallerManager swingInstallerManager;
+
+	public ProgressWizard(DefaultMakePluginPackageWizard installerCreationWizard) {
+		super();
+		this.installerCreationWizard = installerCreationWizard;
+		swingInstallerManager = (DefaultSwingInstallerManager) SwingInstallerLocator
+				.getSwingInstallerManager();
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_installer_progress");
+	}
+
+	public void lastPanel() {
+		installerCreationWizard.setFinishButtonEnabled(false);
+		installerCreationWizard.setCancelButtonEnabled(true);
+	}
+
+	public void nextPanel() {
+		// Do nothing
+	}
+
+	public void updatePanel() {
+		MakePluginPackageService installerCreationService = installerCreationWizard
+				.getInstallerCreationService();
+
+		PackageInfo selectedPackageInfo = installerCreationWizard
+				.getSelectedPackageInfo();
+		File originalPackageFolder = installerCreationWizard
+				.getOriginalPluginFolder();
+
+		SimpleTaskStatus taskStatus = ToolsLocator.getTaskStatusManager()
+				.createDefaultSimpleTaskStatus(selectedPackageInfo.getName());
+		this.bind(taskStatus);
+		try {
+			// Compress the plugin
+			taskStatus.message(swingInstallerManager.getText("_Compressing"));
+			installerCreationService.preparePackage(selectedPackageInfo,
+					originalPackageFolder);
+			installerCreationService.createPackage(selectedPackageInfo,
+					installerCreationWizard.getOutputStream());
+			if (installerCreationWizard.getIndexOutputStream() != null) {
+				taskStatus.message(swingInstallerManager
+						.getText("_Creating_index"));
+				PackageInfo info = installerCreationWizard
+						.getSelectedPackageInfo();
+				File pluginFolder = installerCreationWizard
+						.getMakePluginPackageService().getPluginFolder(info);
+
+				PackageInfo infoIndex = (PackageInfo) info.clone();
+				infoIndex.setDownloadURL(installerCreationWizard
+						.getDownloadURL());
+
+				installerCreationService.writePackageInfoForIndex(infoIndex,
+						pluginFolder);
+				installerCreationService.createPackageIndex(info,
+						installerCreationWizard.getIndexOutputStream());
+			}
+			taskStatus.terminate();
+
+			// Set the finished text
+			taskStatus.message(swingInstallerManager.getText("_Finished"));
+		} catch (MakePluginPackageServiceException e) {
+			this.showErrorMessage(swingInstallerManager
+					.getText("_Cant_create_package"), e);
+		} catch (CloneNotSupportedException e) {
+			this.showErrorMessage(swingInstallerManager
+					.getText("_Cant_create_package"), e);
+		}
+		installerCreationWizard.setFinishButtonEnabled(true);
+		installerCreationWizard.setCancelButtonEnabled(false);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/ProgressWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AntScriptWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AntScriptWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AntScriptWizard.java	(revision 42196)
@@ -0,0 +1,112 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.wizard;
+
+import java.io.ByteArrayInputStream;
+
+import javax.swing.JPanel;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.creation.panel.AntScriptPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class AntScriptWizard extends AntScriptPanel implements OptionPanel {
+
+	/**
+     * 
+     */
+	private static final long serialVersionUID = -4741237867123090223L;
+	private DefaultMakePluginPackageWizard installerCreationWizard;
+	private static final Logger log = LoggerFactory
+			.getLogger(AntScriptWizard.class);
+
+	public AntScriptWizard(
+			DefaultMakePluginPackageWizard installerCreationWizard) {
+		super();
+		this.installerCreationWizard = installerCreationWizard;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_ant_script");
+	}
+
+	public void lastPanel() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		DocumentBuilder documentBuilder;
+		try {
+			documentBuilder = DocumentBuilderFactory.newInstance()
+					.newDocumentBuilder();
+			documentBuilder.parse(new ByteArrayInputStream(getAntScript()
+					.getBytes()));
+		} catch (Exception e) {
+			throw new NotContinueWizardException("not_valid_xml", e,
+					installerCreationWizard);
+		}
+		PackageInfo packageInfo = installerCreationWizard
+				.getSelectedPackageInfo();
+		packageInfo.setAntScript(getAntScript());
+	}
+
+	public void updatePanel() {
+		PackageInfo installerInfo;
+		try {
+			MakePluginPackageService installerCreationService = installerCreationWizard
+					.getInstallerCreationService();
+			installerInfo = installerCreationWizard.getSelectedPackageInfo();
+			if (installerInfo.getAntScript() != null) {
+				setAntScript(installerInfo.getAntScript());
+			} else {
+				setAntScript(installerCreationService.getDefaultAntScript());
+			}
+		} catch (MakePluginPackageServiceException e) {
+			log.error("There is not a selected installer info", e);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/AntScriptWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/PackageInfoWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/PackageInfoWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/PackageInfoWizard.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.swing.impl.creation.wizard;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.creation.panel.DefaultPackageInfoPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PackageInfoWizard extends DefaultPackageInfoPanel implements
+		OptionPanel {
+
+	private static final long serialVersionUID = 6880987804806802863L;
+
+	private DefaultMakePluginPackageWizard installerCreationWizard;
+
+	public PackageInfoWizard(
+			DefaultMakePluginPackageWizard installerCreationWizard) {
+		super();
+		this.installerCreationWizard = installerCreationWizard;
+	}
+
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	public String getPanelTitle() {
+		return swingInstallerManager.getText("_package_description");
+	}
+
+	public void lastPanel() {
+		// TODO Auto-generated method stub
+	}
+
+	public void nextPanel() throws NotContinueWizardException {
+		if (!this.validatePanel()) {
+			throw new NotContinueWizardException("", null, false);
+		}
+		PackageInfo installerInfo = installerCreationWizard
+				.getSelectedPackageInfo();
+		this.panelToPackageInfo(installerInfo);
+	}
+
+	public void updatePanel() {
+		PackageInfo installerInfo = installerCreationWizard
+				.getSelectedPackageInfo();
+		this.packageInfoToPanel(installerInfo);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/PackageInfoWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectPlugintoInstallWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectPlugintoInstallWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectPlugintoInstallWizard.java	(revision 42196)
@@ -0,0 +1,105 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+package org.gvsig.installer.swing.impl.creation.wizard;
+
+import java.io.File;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.impl.creation.DefaultMakePluginPackageWizard;
+import org.gvsig.installer.swing.impl.creation.panel.SelectPluginToInstallPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectPlugintoInstallWizard extends SelectPluginToInstallPanel
+        implements OptionPanel {
+
+    private static final long serialVersionUID = 3735333214491700782L;
+    private DefaultMakePluginPackageWizard installerCreationWizard;
+
+    public SelectPlugintoInstallWizard(
+            DefaultMakePluginPackageWizard installerCreationWizard) {
+        super();
+        this.installerCreationWizard = installerCreationWizard;
+        installerCreationWizard.setNextButtonEnabled(false);
+        installerCreationWizard.setBackButtonEnabled(false);
+    }
+
+    public JPanel getJPanel() {
+        return this;
+    }
+
+    public String getPanelTitle() {
+        return swingInstallerManager.getText("_plugin_to_install");
+    }
+
+    public void lastPanel() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void nextPanel() {
+        PackageInfo selectedPackageInfo = super.getSelectedInstallerInfo();
+        String selectedPackageCode = super.getSelectedInstallerInfo().getCode();
+        InstallerManager manager = InstallerLocator.getInstallerManager();
+
+        installerCreationWizard.setSelectedPackageInfo(selectedPackageInfo);
+        installerCreationWizard.setOriginalPluginFolder(manager
+                .getAddonFolder(selectedPackageCode));
+        installerCreationWizard.setBackButtonEnabled(true);
+    }
+
+    public void updatePanel() {
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.gvsig.installer.swing.impl.creation.panel.SelectPluginToInstallPanel
+     * #setSelectedPlugin(java.lang.String)
+     */
+    @Override
+    public void setSelectedInstallerInfo(PackageInfo installerInfo) {
+        super.setSelectedInstallerInfo(installerInfo);
+        InstallerManager installManager = InstallerLocator.getInstallerManager();
+
+        File file = installManager.getAddonFolder(installerInfo.getCode());
+        if ( file != null ) {
+            String type = installManager.getDefaultLocalRepositoryType(file);
+            installerInfo.setType(type);
+        }
+
+        installerCreationWizard.setNextButtonEnabled(installerInfo != null);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/creation/wizard/SelectPlugintoInstallWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/pom.xml	(revision 42196)
@@ -0,0 +1,80 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.swing.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer.swing</artifactId>
+    <version>2.0.97</version>
+  </parent> 
+  <dependencies>
+<!-- 
+    <dependency>
+        <groupId>com.jgoodies</groupId>
+        <artifactId>forms</artifactId>
+	    <scope>compile</scope>
+    </dependency>
+    -->
+    <dependency>
+    	<groupId>com.jgoodies</groupId>
+    	<artifactId>jgoodies-forms</artifactId>
+	    <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.dynform.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jwizardcomponent</groupId>
+      <artifactId>jwizardcomponent</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-gui-util</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-xml</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/pom.xml	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.installer</artifactId>
+    <packaging>pom</packaging>
+    <description>Project to create installers or install packages in gvSIG</description>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.library</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <modules>
+        <module>org.gvsig.installer.lib</module>
+        <module>org.gvsig.installer.prov</module>
+        <module>org.gvsig.installer.swing</module>
+        <module>org.gvsig.installer.main</module>
+        <!--
+        <module>org.gvsig.installer.maven</module>
+        -->
+    </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.installer
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/controls/dnd/JDnDTableTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/controls/dnd/JDnDTableTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/controls/dnd/JDnDTableTest.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: JDnDTableTest.java 15818 2007-11-05 07:28:30Z bsanchez $
+* $Log$
+* Revision 1.2  2007-08-21 09:58:04  bsanchez
+* - Quitados imports innecesarios
+* - Quitado codigo no usado
+* - Cambio de deprecated show por setVisible(true)
+*
+* Revision 1.1  2007/08/20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.1  2006/09/27 13:34:57  jaume
+* *** empty log message ***
+*
+*
+*/
+package controls.dnd;
+
+import java.awt.Dimension;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.controls.dnd.JDnDList;
+import org.gvsig.gui.beans.controls.dnd.JDnDListModel;
+import org.gvsig.gui.beans.controls.dnd.JDnDTable;
+import org.gvsig.gui.beans.controls.dnd.JDnDTableModel;
+/**
+ * El model que ha de suportar les funcions d'una JDnDTable. Encara est� en
+ * proves.
+ *
+ * @author jaume
+ */
+public class JDnDTableTest {
+	static String[] colNames = new String[] {"1234", "abcd", "qwerty"};
+	static String[][] values = new String[][] {new String[] {"a1", "a2", "a3"},
+										new String[] {"b1", "b2", "b3"},
+										new String[] {"c1", "c2", "c3"}};
+
+	public static void main(String args[]) {
+		JFrame f = new TestUI("JDnDTableTest");
+		JPanel content = new JPanel();
+		content.setPreferredSize(new Dimension(500,400));
+
+		JDnDTableModel model = new JDnDTableModel(values, colNames);
+		JDnDListModel listModel = new JDnDListModel();
+		listModel.addElement("a");
+		listModel.addElement("b");
+		listModel.addElement("c");
+
+		JDnDTable tbl = new JDnDTable();
+
+		tbl.setModel(model);
+		tbl.setSize(new Dimension(450, 350));
+		JDnDList list = new JDnDList();
+		list.setModel(listModel);
+		content.add(tbl);
+		content.add(list);
+		f.setContentPane(content);
+		f.pack();
+		f.setVisible(true);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/controls/dnd/JDnDTableTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/images/forward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/images/forward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/images/backward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/images/backward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/TestComboButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/TestComboButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/TestComboButton.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.combobutton;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.controls.combobutton.ComboButton;
+
+public class TestComboButton implements ActionListener {
+	
+	public TestComboButton() {
+		TestUI frame = new TestUI("TestComboButton");
+		ComboButton cb = new ComboButton();
+		ImageIcon icon1 = new ImageIcon(getClass().getResource("images/backward.png"));
+		ImageIcon icon2 = new ImageIcon(getClass().getResource("images/forward.png"));
+		JButton b1 = new JButton("Action 1", icon1);
+		b1.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				System.out.println("Pulsando el bot�n 1");
+				System.out.println("Action command: " + arg0.getActionCommand());
+			}
+		});
+		b1.setActionCommand("action1");
+		JButton b2 = new JButton("Action 2", icon2);
+		b2.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				System.out.println("Pulsando el bot�n 2");
+				System.out.println("Action command: " + arg0.getActionCommand());
+			}
+		});
+		b2.setActionCommand("action2");
+		cb.setName("Prueba");
+		cb.addButton(b1);
+		cb.addSeparator();
+		cb.addButton(b2);
+		cb.addActionListener(this);
+		frame.getContentPane().add(cb);
+		frame.setSize(80, 80);
+		frame.setVisible(true);
+	}
+	
+
+	public static void main(String[] args) {
+		new TestComboButton();
+	}
+
+
+	public void actionPerformed(ActionEvent e) {
+		System.out.println("actionPerformed() : " + e.getActionCommand());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/combobutton/TestComboButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestThread.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestThread.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestThread.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+public class TestThread {
+	public class miThread1 extends Thread {
+		public void run() {
+			System.out.println("miThread1 begin");
+			for (int i=0; i<=10; i++) {
+				System.out.println(i);
+				try {
+					Thread.sleep(500);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
+			System.out.println("miThread1 end");
+		}
+	}
+
+	public TestThread() {
+		System.out.println("testThread begin");
+		miThread1 a = new miThread1();
+		a.start();
+		while (true) {
+			try {
+				Thread.sleep(250);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+			System.out.println("isAlive(): " + a.isAlive());
+			if (!a.isAlive()) break;
+		}
+		System.out.println("testThread end");
+	}
+
+	public static void main(String[] args) {
+		System.out.println("main begin");
+		new TestThread();
+		System.out.println("main end");
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestThread.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestIncrementableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestIncrementableTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestIncrementableTask.java	(revision 42196)
@@ -0,0 +1,240 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+import org.gvsig.gui.beans.progresspanel.LogControl;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * Test del IncrementableTask
+ *
+ * @version 27/05/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestIncrementableTask {
+	class ClassProcess implements Runnable, IIncrementable, IncrementableListener {
+		int i = 0;
+		long j = 0;
+		LogControl log = new LogControl();
+		IncrementableTask incrementableTask = null;
+
+		private volatile Thread blinker;
+//		private boolean ended = false;
+//		private boolean threadSuspended = false;
+
+		public ClassProcess() {
+		}
+
+		public void start() {
+			blinker = new Thread(this);
+			blinker.start();
+		}
+
+		public synchronized void stop() {
+//			ended = true;
+			blinker = null;
+			notify();
+		}
+
+		public boolean isAlive() {
+			return blinker.isAlive();
+		}
+
+		public void procesoDuro() throws InterruptedException {
+			try {
+				for (long k = 0; k <= 8000; k++)
+					for (long n = 0; n <= 5000; n++) {
+						for (long l = 0; l <= 100; l++);
+						if (Thread.currentThread().isInterrupted())
+							throw new InterruptedException();
+					}
+				System.out.println("b");
+			} finally {
+				System.out.println("c");
+			}
+		}
+
+		public synchronized void run() {
+			try {
+				procesoDuro();
+			} catch (InterruptedException e1) {
+				System.out.println("Se ha salido");
+			}
+/*
+			for (long k=0; k<=65535; k++)
+				for (long n=0; n<=5000; n++);
+			for (j=0; j<=65535; j++) {
+				if (Thread.currentThread().isInterrupted())
+					break;
+				for (long i=0; i<=65535; i++);
+				log.replaceLastLine(j + "");
+				System.out.println(Thread.currentThread().isInterrupted());
+				if ((j%1000)==0) {
+					log.addLine(j + "");
+				}
+				synchronized(this) {
+					while (threadSuspended && !Thread.currentThread().isInterrupted())
+						try {
+							wait(500);
+						} catch (InterruptedException e) {
+							e.printStackTrace();
+						}
+				}
+			}*/
+			incrementableTask.processFinalize();
+		}
+
+		public String getLabel() {
+			return "Generando estad�sticas, por favor, espere...";
+		}
+
+		public String getLog() {
+			return log.getText();
+		}
+
+		public int getPercent() {
+			return (int) ((j*100)/65535);
+		}
+
+		public String getTitle() {
+			return "Barra de progreso";
+		}
+
+		public void setIncrementableTask(IncrementableTask value) {
+			incrementableTask = value;
+		}
+
+		public void actionCanceled(IncrementableEvent e) {
+//			ended = true;
+			blinker.interrupt();
+		}
+
+		public void actionResumed(IncrementableEvent e) {
+//			threadSuspended = false;
+		}
+
+		public void actionSuspended(IncrementableEvent e) {
+//			threadSuspended = true;
+		}
+
+
+		public void setLabel(String label) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		public boolean isSuspended() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public void resume() {
+			// TODO Auto-generated method stub
+			
+		}
+
+		public void suspend() {
+			// TODO Auto-generated method stub
+			
+		}
+
+		public boolean isCancelable() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public void process() throws InterruptedException, Exception {
+			// TODO Auto-generated method stub
+			
+		}
+
+		public void setCancelable(boolean b) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		public boolean isPausable() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public void setPausable(boolean b) {
+			// TODO Auto-generated method stub
+			
+		}
+	}
+
+	ClassProcess classProcess = null;
+
+	public TestIncrementableTask() {
+		super();
+		initialize();
+	}
+
+	private void initialize() {
+		classProcess = new ClassProcess();
+		IncrementableTask incrementableTask = new IncrementableTask(classProcess);
+		classProcess.setIncrementableTask(incrementableTask);
+		incrementableTask.showWindow();
+		incrementableTask.addIncrementableListener(classProcess);
+
+		incrementableTask.start();
+		classProcess.start();
+		while (classProcess.isAlive()) {
+			try {
+				Thread.sleep(500);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+		classProcess.stop();
+		classProcess = null;
+		incrementableTask = null;
+	}
+
+	public static void main(String[] args) {
+		new TestIncrementableTask();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/incrementabletask/TestIncrementableTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/treelist/TestTreeList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/treelist/TestTreeList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/treelist/TestTreeList.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.treelist;
+
+import java.util.Hashtable;
+
+import javax.swing.ListModel;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.treelist.event.TreeListChangeEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListChangeListener;
+
+public class TestTreeList implements TreeListChangeListener {
+	private int               w     = 200;
+	private int               h     = 380;
+	private TestUI            frame = new TestUI("TestTreeList");
+	private TreeListContainer tlist;
+
+	public TestTreeList() {
+		tlist = new TreeListContainer();
+
+		tlist.addClass("uno", 0);
+		tlist.addClass("dos", 1);
+		tlist.addClass("tres", 2);
+		tlist.addClass("cuatro", 3);
+		tlist.addEntry("uno-uno","uno","1-1");
+		tlist.addEntry("uno-dos","uno","1-2");
+		tlist.addEntry("uno-tres","uno","1-3");
+		tlist.addEntry("tres-uno","tres","3-1");
+		tlist.addEntry("tres-dos","tres","3-2");
+		tlist.addEntry("cuatro-uno","cuatro","4-1");
+		tlist.addEntry("cuatro-dos","cuatro","4-2");
+		tlist.addEntry("cuatro-tres","cuatro","4-3");
+		tlist.addEntry("cuatro-cuatro","cuatro","4-4");
+		tlist.addEntry("cuatro-cinco","cuatro","4-5");
+		tlist.addEntry("cuatro-seis","cuatro","4-6");
+
+		tlist.getTree().expandRow(0);
+		tlist.addChangeSelectionListener(this);
+
+		frame.getContentPane().add(tlist);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestTreeList();
+	}
+
+	public void actionChangeSelection(TreeListChangeEvent e) {
+		System.out.println("-");
+		ListModel list = tlist.getListModel();
+		for (int i=0; i<list.getSize(); i++) {
+			Hashtable prueba = tlist.getMap();
+			System.out.println(prueba.get(list.getElementAt(i)));
+			System.out.println(list.getElementAt(i));
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/treelist/TestTreeList.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigator.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.imagenavigator;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+
+import org.gvsig.gui.beans.TestUI;
+/**
+ * Test del ImageNavigator
+ *
+ * @version 08/05/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestImageNavigator implements IClientImageNavigator {
+	private TestUI jFrame = null;
+	private ImageNavigator imageNavigator = null;
+
+	public TestImageNavigator() {
+		initialize();
+	}
+
+	private void initialize() {
+		jFrame = new TestUI("TestImageNavigator");
+		jFrame.setSize(new Dimension(200, 200));
+		jFrame.setContentPane(getImageNavigator());
+		getImageNavigator().setViewDimensions(0.0, 0.0, 200.0, 100.0);
+		getImageNavigator().updateBuffer();
+		getImageNavigator().setEnabled(true);
+		jFrame.setVisible(true);
+	}
+
+	private ImageNavigator getImageNavigator() {
+		if (imageNavigator == null) {
+			imageNavigator = new ImageNavigator(this);
+		}
+		return imageNavigator;
+	}
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		new TestImageNavigator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.imagenavigator.IClientImageNavigator#drawImage(java.awt.Graphics2D, double, double, double, double, double, int, int)
+	 */
+	public void drawImage(Graphics2D g, double x1, double y1, double x2, double y2, double zoom, int width, int height) throws ImageUnavailableException {
+		if (true) {
+			throw new ImageUnavailableException("No es posible la visualizaci�n de la capa.");
+		}
+		double usex1 = (((0 - x1) * width) / (width/zoom));
+		double usey1 = (((0 - y1) * height) / (height/zoom));
+		double usex2 = (usex1 + (200.0 * zoom));
+		double usey2 = (usey1 + (100.0 * zoom));
+
+		g.setColor(Color.black);
+		g.fillRect((int) usex1, (int) usey1, (int) (usex2 - usex1), (int) (usey2 - usey1));
+		g.setColor(Color.RED);
+		g.drawLine((int) usex1, (int) usey1, (int) usex2, (int) usey2);
+		g.drawLine((int) usex1, (int) usey2, (int) usex2, (int) usey1);
+		g.drawRect((int) usex1, (int) usey1, (int) (usex2 - usex1), (int) (usey2 - usey1));
+
+		g.drawString("X1:" + (int) x1, 1, 20);
+		g.drawString("Y1:" + (int) y1, 1, 40);
+		g.drawString("X2:" + (int) x2, 1, 60);
+		g.drawString("Y2:" + (int) y2, 1, 80);
+		g.drawString(width + ":" + height, 1, 120);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigatorInverted.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigatorInverted.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigatorInverted.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.imagenavigator;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+
+import org.gvsig.gui.beans.TestUI;
+/**
+ * Test del ImageNavigator para coordenadas totalmente invertidas.
+ *
+ * @version 08/05/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestImageNavigatorInverted implements IClientImageNavigator {
+	private TestUI         jFrame         = null;
+	private ImageNavigator imageNavigator = null;
+
+	public TestImageNavigatorInverted() {
+		initialize();
+	}
+
+	private void initialize() {
+		jFrame = new TestUI("TestImageNavigatorInverted");
+		jFrame.setSize(new Dimension(598, 167));
+		jFrame.setContentPane(getImageNavigator());
+		getImageNavigator().setViewDimensions(200.0, 100.0, 0.0, 0.0);
+		getImageNavigator().updateBuffer();
+		jFrame.setVisible(true);
+	}
+
+	private ImageNavigator getImageNavigator() {
+		if (imageNavigator == null) {
+			imageNavigator = new ImageNavigator(this);
+		}
+		return imageNavigator;
+	}
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		new TestImageNavigatorInverted();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.imagenavigator.IClientImageNavigator#drawImage(java.awt.Graphics2D, double, double, double, int, int)
+	 */
+	public void drawImage(Graphics2D g, double x1, double y1, double x2, double y2, double zoom, int width, int height) {
+		double usex1 = (((0 + x1) * width) / (width/zoom));
+		double usey1 = (((0 + y1) * height) / (height/zoom));
+		double usex2 = (usex1 - (200.0 * zoom));
+		double usey2 = (usey1 - (100.0 * zoom));
+
+		g.setColor(Color.GREEN);
+		g.fillRect((int) usex2, (int) usey2, (int) (usex1 - usex2), (int) (usey1 - usey2));
+		g.setColor(Color.BLACK);
+		g.drawLine((int) usex2, (int) usey1, (int) usex1, (int) usey2);
+		g.drawLine((int) usex2, (int) usey2, (int) usex1, (int) usey1);
+		g.drawRect((int) usex2, (int) usey2, (int) (usex1 - usex2), (int) (usey1 - usey2));
+
+		g.drawString("X1:" + (int) x1, 1, 20);
+		g.drawString("Y1:" + (int) y1, 1, 40);
+		g.drawString("X2:" + (int) x2, 1, 60);
+		g.drawString("Y2:" + (int) y2, 1, 80);
+		g.drawString(width + ":" + height, 1, 120);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/imagenavigator/TestImageNavigatorInverted.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextField.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent;
+
+import java.awt.Dimension;
+
+import javax.swing.JFrame;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests for JEditableTextField
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJEditableTextField {
+	private static JEditableTextField jTCE;
+	
+	/**
+	 * Test method for the TestJEditableTextField class
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		final int height = 40;
+		final int width = 300;
+		
+		// Objects creation
+		JFrame jF = new JFrame();		
+
+		jTCE = new JEditableTextField();
+		jTCE.setPreferredSize(new Dimension(width, height));
+
+	    // Set properties
+		jF.setTitle("Test JEditableTextField");
+	    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	    jF.setSize(jTCE.getPreferredSize());
+	    jF.getContentPane().add(jTCE);	
+	    
+		jF.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextArea.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextArea.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextArea.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent;
+
+import java.awt.Dimension;
+
+import javax.swing.JFrame;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests for JEditableTextArea
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJEditableTextArea {
+	private static JEditableTextArea jTCA;
+	
+	/**
+	 * Test method for the TestJEditableTextArea class
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		final int height = 40;
+		final int width = 300;
+		
+		// Objects creation
+		JFrame jF = new JFrame();		
+
+		jTCA = new JEditableTextArea();
+		jTCA.setPreferredSize(new Dimension(width, height));
+
+	    // Set properties
+		jF.setTitle("Test JEditableTextArea");
+	    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	    jF.setSize(jTCA.getPreferredSize());
+	    jF.getContentPane().add(jTCA);	
+	    
+		jF.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/editabletextcomponent/TestJEditableTextArea.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorchooser/TestColorChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorchooser/TestColorChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorchooser/TestColorChooser.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.colorchooser;
+
+import java.awt.Dimension;
+import java.util.EventObject;
+
+import org.gvsig.gui.beans.TestUI;
+/**
+* Test del ColorChooser
+*
+* @version 08/05/2007
+* @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+*/
+public class TestColorChooser implements ColorChooserListener {
+	private TestUI       jFrame       = new TestUI("TestColorChooser");
+	private ColorChooser colorChooser = null;
+
+	public TestColorChooser() {
+		initialize();
+	}
+
+	private void initialize() {
+		colorChooser = new ColorChooser();
+		colorChooser.addValueChangedListener(this);
+		colorChooser.setEnabled(true);
+
+		jFrame.setSize(new Dimension(258, 167));
+		jFrame.setContentPane(colorChooser);
+		jFrame.setVisible(true);
+	}
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		new TestColorChooser();
+	}
+
+	public void actionValueChanged(EventObject e) {
+		System.out.println("Changed: " + colorChooser.getColor() + ", " + colorChooser.getColor().getAlpha());
+	}
+
+	public void actionValueDragged(EventObject e) {
+		System.out.println("Dragged: " + colorChooser.getColor() + ", " + colorChooser.getColor().getAlpha());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorchooser/TestColorChooser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/TestListView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/TestListView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/TestListView.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+/**
+ * @version 28/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestListView implements ActionListener {
+	private JFrame jFrame = null;
+	private JScrollPane jScrollPane = null;
+	private ListViewComponent listViewComponent = null;
+	JButton botonAdd = null;
+	JButton botonDel = null;
+	JCheckBox multiselect = null;
+	JCheckBox enabled = null;
+
+	public TestListView() {
+		initialize();
+	}
+
+	private void initialize() {
+		jFrame = new JFrame();
+		jScrollPane = new JScrollPane();
+
+		listViewComponent = new ListViewComponent();
+		listViewComponent.setEditable(true);
+		jScrollPane.setViewportView(listViewComponent);
+
+		for (int i=0; i<1000; i++) {
+			ListViewItem item = new ListViewItem(new RampPainter(), "Prueba-" + i);
+			listViewComponent.addItem(item, true);
+		}
+
+		JPanel jpane = new JPanel();
+		jpane.setLayout(new BorderLayout());
+		jpane.add(jScrollPane, BorderLayout.CENTER);
+
+		JPanel jPanel1 = new JPanel();
+		jPanel1.setLayout(new java.awt.GridBagLayout());
+
+		jpane.add(jPanel1, BorderLayout.SOUTH);
+
+		botonAdd = new JButton("Add");
+		botonAdd.addActionListener(this);
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.insets = new java.awt.Insets(5, 5, 2, 2);
+		jPanel1.add(botonAdd, gridBagConstraints);
+
+		botonDel = new JButton("Del");
+		botonDel.addActionListener(this);
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.insets = new java.awt.Insets(5, 2, 2, 5);
+		jPanel1.add(botonDel, gridBagConstraints);
+
+		multiselect = new JCheckBox("MultiSelect");
+		multiselect.addActionListener(this);
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new java.awt.Insets(2, 5, 5, 5);
+		jPanel1.add(multiselect, gridBagConstraints);
+
+		enabled = new JCheckBox("Activo");
+		enabled.addActionListener(this);
+		enabled.setSelected(true);
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new java.awt.Insets(2, 5, 5, 5);
+		jPanel1.add(enabled, gridBagConstraints);
+
+		jFrame.setSize(new Dimension(192, 300));
+		jFrame.setContentPane(jpane);
+
+		jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		jFrame.setVisible(true);
+	}
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		new TestListView();
+	}
+
+	int id = 0;
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == botonAdd) {
+			ListViewItem item = new ListViewItem(new RampPainter(), "Prueba");
+			listViewComponent.addItem(item);
+			return;
+		}
+
+		if (e.getSource() == botonDel) {
+			listViewComponent.removeSelecteds();
+			return;
+		}
+
+		if (e.getSource() == multiselect) {
+			listViewComponent.setMultiSelect(multiselect.isSelected());
+			return;
+		}
+
+		if (e.getSource() == enabled) {
+			listViewComponent.setEnabled(enabled.isSelected());
+			jScrollPane.setEnabled(enabled.isSelected());
+			return;
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/TestListView.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/RampPainter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/RampPainter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/RampPainter.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview;
+
+import java.awt.Color;
+import java.awt.GradientPaint;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+/**
+ *
+ * @version 29/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class RampPainter implements IIconPaint {
+
+	public RampPainter() {
+	}
+
+	public void paint(Graphics2D g, boolean isSelected) {
+		Shape clip = g.getClip();
+		Rectangle area = clip.getBounds();
+
+		int x1 = area.x;
+		int x2 = area.x + area.width - 1;
+
+		Color color1 = Color.green;
+		Color color2 = Color.red;
+		g.setPaint(new GradientPaint(area.x, 0, color1, area.x + area.width, 0, color2, false));
+		g.fillRect(area.x, area.y, area.width, area.height);
+
+		if (isSelected)
+			g.setColor(Color.black);
+		else
+			g.setColor(new Color(96, 96, 96));
+		g.drawRect(x1, area.y, x2 - x1, area.height - 1);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/listview/RampPainter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/AllTests.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.gvsig.gui.beans.panelGroup.Test1ExceptionsUsingTabbedPanel;
+import org.gvsig.gui.beans.panelGroup.Test1ExceptionsUsingTreePanel;
+import org.gvsig.gui.beans.panelGroup.TestPanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.TestPanelGroupManager;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.gvsig.gui.beans");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(TestPanelGroupLoaderFromList.class);
+		suite.addTestSuite(TestPanelGroupManager.class);
+		suite.addTestSuite(Test1ExceptionsUsingTabbedPanel.class);
+		suite.addTestSuite(Test1ExceptionsUsingTreePanel.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTabbedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTabbedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTabbedPanel.java	(revision 42196)
@@ -0,0 +1,279 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import junit.framework.TestCase;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.samples.Samples_Data;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+
+/**
+ * <p>Tests the loading of layers using a {@link TabbedPanel TabbedPanel} object and a {@link PanelGroupLoaderFromList PanelGroupLoaderFromList} loader
+ * Tests also the managing of the different kind of exceptions which could be launched during this process.</p>
+ * 
+ * @version 29/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test1ExceptionsUsingTabbedPanel extends TestCase {
+	private TabbedPanel panelGroup;
+	private PanelGroupManager manager;
+	private PanelGroupLoaderFromList loader;
+	private String validationText;
+	private String localizedMessage;
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		manager = PanelGroupManager.getManager();
+		manager.registerPanelGroup(TabbedPanel.class);
+		manager.setDefaultType(TabbedPanel.class);
+		panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_Data.REFERENCE3);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		manager.deregisterPanelGroup(TabbedPanel.class);
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test1() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.";
+		
+		try {
+			System.out.println("----- Test 1 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST4_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test2() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.";
+		
+		try {
+			System.out.println("----- Test 2 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST5_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test3() {
+		validationText = Messages.getText("empty_panel_group_exception");
+
+		try {
+			System.out.println("----- Test 3 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST6_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test4() {
+		validationText = Messages.getText("empty_panel_group_gui_exception");
+
+		try {
+			System.out.println("----- Test 4 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST7_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test5() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.\n  " + Messages.getText("empty_panel_group_exception");
+
+		try {
+			System.out.println("----- Test 5 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST8_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test6() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.\n  " + Messages.getText("empty_panel_group_gui_exception");
+
+		try {
+			System.out.println("----- Test 6 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST9_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test7() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.";
+
+		try {
+			System.out.println("----- Test 7 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST10_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTabbedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TreePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TreePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TreePanel.java	(revision 42196)
@@ -0,0 +1,248 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.util.ArrayList;
+
+import javax.swing.JFrame;
+import javax.swing.JTree;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.gvsig.gui.beans.panelGroup.samples.SampleInfoPanel;
+import org.gvsig.gui.beans.panelGroup.samples.SamplePanelWithoutGroupLabel;
+import org.gvsig.gui.beans.panelGroup.samples.Samples_Data;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+
+/**
+ * <p>Tests the creation of a {@link TreePanel TreePanel} object using {@link PanelGroupLoaderFromList PanelGroupLoaderFromList} .</p>
+ * 
+ * @version 17/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test1TreePanel {
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+	
+	/**
+	 * <p>Test method for the Test1TreePanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			// Use the defined  samples 
+//			Class[] panelClass = new Class[Samples_Data.TEST1_CLASSES.length];
+//			int i;
+//			
+//			for (i = 0; i < Samples_Data.TEST1_CLASSES.length; i ++) {
+//				panelClass[i] = Samples_Data.TEST1_CLASSES[i];
+//			}
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_Data.REFERENCE1);
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_Data.TEST1_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+			
+			// Begin: Other tests
+			ArrayList<IPanel> panels = new ArrayList<IPanel>();
+
+			loader.loadPanels(panels);
+
+			// Begin: Initialise sample classes
+//			i = 0;
+//
+//			for (AbstractPanel panel: panels) {
+//				panel.setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+//				panel.setReference(Samples_Data.REFERENCE1);
+//				
+//				panel.setID(Samples_Data.PANELS1_IDS[i]);
+//				panel.setLabel(Samples_Data.PANELS1_LABELS[i]);
+//				panel.setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[i++]);
+//				
+//				panelGroup.addPanel(panel);
+//			}
+			// End: Initialise sample classes
+			
+			// Begin: Tests adding and removing a panel without "label" -> this shoudn't add that panel
+			panels = new ArrayList<IPanel>();
+			loader = new PanelGroupLoaderFromList(new Class[]{SampleInfoPanel.class, SampleInfoPanel.class, SamplePanelWithoutGroupLabel.class});
+			loader.loadPanels(panels);
+			((AbstractPanel)panels.get(0)).setPreferredSize(new Dimension(600, 700));
+			panels.get(0).setReference(Samples_Data.REFERENCE1);
+			panels.get(0).setID("ID");
+			panels.get(0).setLabel(null);
+			panels.get(0).setLabelGroup("LABEL_GROUP");
+			panelGroup.addPanel(panels.get(0));
+			AbstractPanel incorrectAPanel = (AbstractPanel) panels.get(0);
+			//panelGroup.removePanel(panels.get(0));
+			// End: Tests adding and removing a panel without "label" -> this shoudn't add that panel
+
+			// Begin: Tests adding and removing a panel
+			((AbstractPanel)panels.get(1)).setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+			panels.get(1).setReference(Samples_Data.REFERENCE1);
+			panels.get(1).setID("ID");
+			panels.get(1).setLabel("LABEL_TEST_REPEATED_GROUP");
+			panels.get(1).setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[0]);
+			panelGroup.addPanel(panels.get(1));
+			AbstractPanel repeatedGroupAPanel = (AbstractPanel) panels.get(1);
+			//panelGroup.removePanel(panels.get(0));
+			// End: Tests adding and removing a panel
+			
+			// Begin: Tests adding and removing a panel without "labelGroup"
+			((AbstractPanel)panels.get(2)).setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+			panels.get(2).setReference(Samples_Data.REFERENCE1);
+			panelGroup.addPanel(panels.get(2));
+			//panelGroup.removePanel(panels.get(1));
+			// End: Tests adding and removing a panel without "labelGroup"
+			
+			// Begin: Test visibility			
+			Object[] oPanels = panelGroup.values().toArray();			
+			panelGroup.setPanelInGUI(repeatedGroupAPanel, false);// test set false a panel with a repeated group
+			panelGroup.setPanelInGUI((IPanel)oPanels[1], false); // intermediate element
+			 ((AbstractPanel)oPanels[1]).setInGroupGUI(true);    // test change the visibility from a panel child
+			 ((AbstractPanel)oPanels[1]).setInGroupGUI(false);    // test change the visibility from a panel child
+			 ((AbstractPanel)oPanels[1]).setInGroupGUI(true);    // test change the visibility from a panel child
+			panelGroup.setPanelInGUI((IPanel)oPanels[0], false); // first element
+			panelGroup.setPanelInGUI(incorrectAPanel, false);	 // incorrect element
+			panelGroup.setPanelInGUI(panels.get(2), false);			 // last element (and labelGroup = null)
+			panelGroup.setPanelInGUI((IPanel)oPanels[2], false); // intermediate element
+			panelGroup.setPanelInGUI((IPanel)oPanels[2], false); // test set false two times the same node
+			panelGroup.setPanelInGUI((IPanel)oPanels[0], true);  // first element
+			panelGroup.setPanelInGUI(incorrectAPanel, true);	 // incorrect element
+			panelGroup.setPanelInGUI((IPanel)oPanels[1], true);  // intermediate element
+			panelGroup.setPanelInGUI((IPanel)oPanels[1], true);  // test set true two times the same node
+			panelGroup.setPanelInGUI((IPanel)oPanels[2], true);  // intermediate element
+			panelGroup.setPanelInGUI(panels.get(2), true); 			 // last element (and labelGroup = null)
+			panelGroup.setPanelInGUI(repeatedGroupAPanel, true); // test set false a panel with a repeated group
+			
+			panels.get(1).setInGroupGUI(false);    // test change the visibility from a panel child
+			if (!panels.get(1).isInGroupGUI()) {
+				System.out.println("Test OK: the panel isn't in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel is in the GUI");
+			}
+			
+			panels.get(1).setInGroupGUI(true);     // test change the visibility from a panel child
+			if (panels.get(1).isInGroupGUI()) {
+				System.out.println("Test OK: the panel is in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel isn't in the GUI");
+			}
+			
+			panelGroup.setPanelInGUI(panels.get(1), false);
+			if (!panelGroup.isPanelInGUI(panels.get(1))) {
+				System.out.println("Test OK: the panel isn't in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel is in the GUI");
+			}
+			
+			panelGroup.setPanelInGUI(panels.get(1), true);
+			if (panelGroup.isPanelInGUI(panels.get(1))) {
+				System.out.println("Test OK: the panel is in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel isn't in the GUI");
+			}
+			// End: Test visibility -> True or False
+			
+			jFrame = new JFrame();
+			jFrame.setTitle("Test TreePanel using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroup.getPreferredSize());
+		    jFrame.getContentPane().setLayout(new BorderLayout());
+		    jFrame.getContentPane().add(panelGroup, BorderLayout.CENTER);
+		    
+			jFrame.setVisible(true);
+			
+			// Begin: Test the method 'getSelectedIndex()':
+			panelGroup.addTreeSelectionListener(new TreeSelectionListener() {
+				/*
+				 * (non-Javadoc)
+				 * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
+				 */
+				public void valueChanged(TreeSelectionEvent e) {
+		        	JTree jTree = (JTree) e.getSource();
+		        	
+		        	System.out.println("Selection changed. New selection path: " + jTree.getSelectionPath());
+
+		        	showActivePanelInformation();
+				}
+			});
+			// End: Test the method 'getSelectedIndex()':
+				
+			// Begin: Test the methods: 'getDividerLocation()' and 'setDividerLocation(int)'
+			System.out.println("Divider location before setting it to the position 250 : " + panelGroup.getDividerLocation());
+			panelGroup.setDividerLocation(250);
+			System.out.println("Divider location after setting it to the position 250 : " + panelGroup.getDividerLocation());
+			// End: Test the methods: 'getDividerLocation()' and 'setDividerLocation(int)'
+
+			// Begin: Test the methods: 'getDividerSize()' and 'setDividerSize(int)'
+			System.out.println("Divider size before setting it to the position 10 : " + panelGroup.getDividerSize());
+			panelGroup.setDividerSize(10);
+			System.out.println("Divider size after setting it to the position 10 : " + panelGroup.getDividerSize());
+			// End: Test the methods: 'getDividerSize()' and 'setDividerSize(int)'
+			
+			// End: Other tests
+		} catch (BaseException e) {
+			System.out.println(e.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * <p>Shows information about the current active panel using the standard output.</p>
+	 */
+	private static void showActivePanelInformation() {
+		// Test the method 'getActivePanel()'
+		IPanel panel = panelGroup.getActivePanel();
+
+		if (panel == null) {
+			System.out.println("The node selected of the JTree in the TreePanel object isn't a IPanel .");
+		}
+		else {
+			System.out.println("New active panel:\n\tID: " + panel.getID() + "\n\tLABEL_GROUP: " + panel.getLabelGroup() + "\n\tLABEL: " + panel.getLabel() + "\n\tCLASS: " + panel.getClass());
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TreePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TabbedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TabbedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TabbedPanel.java	(revision 42196)
@@ -0,0 +1,326 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import java.awt.Dimension;
+import java.util.ArrayList;
+
+import javax.swing.JFrame;
+import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.gvsig.gui.beans.panelGroup.samples.SampleInfoPanel;
+import org.gvsig.gui.beans.panelGroup.samples.Samples_Data;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+
+/**
+ * <p>Tests the creation of a {@link TabbedPanel TabbedPanel} object using {@link PanelGroupLoaderFromList PanelGroupLoaderFromList} .</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test1TabbedPanel {
+	private static TabbedPanel panelGroup;
+	
+	/**
+	 * <p>Test method for the Test1TabbedPanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_Data.REFERENCE1);
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_Data.TEST1_CLASSES);
+
+			// Begin: Test the normal load
+			System.out.println("----------> Begin: Test the normal load");
+
+			panelGroup.loadPanels(loader);
+
+			System.out.println("End: Test the normal load <----------");
+			// End: Test the normal load
+			
+			// Begin: Other tests
+			ArrayList<IPanel> panels = new ArrayList<IPanel>();
+
+			// Begin: Initialize sample classes
+//			int i = 0;
+//
+//			for (AbstractPanel panel: panels) {
+//				panel.setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+//				panel.setReference(Samples_Data.REFERENCE1);
+//				
+//				panel.setID(Samples_Data.PANELS1_IDS[i]);
+//				panel.setLabel(Samples_Data.PANELS1_LABELS[i]);
+//				panel.setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[i++]);
+//				
+//				panelGroup.addPanel(panel);
+//			}
+			// End: Initialize sample classes
+
+			// Begin: Tests adding and removing a panel without "label" -> this shoudn't add that panel
+			System.out.println("----------> Begin: Tests adding and removing a panel without \"label\" -> this shoudn't add that panel");
+			loader = new PanelGroupLoaderFromList(new Class[]{SampleInfoPanel.class});
+			loader.loadPanels(panels);
+
+			panels.get(0).setReference(Samples_Data.REFERENCE1);
+			panels.get(0).setID("ID");
+			panels.get(0).setLabel(null);
+			panels.get(0).setLabelGroup("LABEL_GROUP");
+			panelGroup.addPanel(panels.get(0));
+			panelGroup.removePanel(panels.get(0));
+			System.out.println("End: Tests adding and removing a panel without \"label\" -> this shoudn't add that panel <----------");
+			// End: Tests adding and removing a panel without "label" -> this shoudn't add that panel
+
+			// Begin: Tests: has changed?
+			System.out.println("----------> Begin: Tests: has changed?");
+			Object[] oPanels = panelGroup.values().toArray();
+
+			((AbstractPanel)oPanels[0]).setPreferredSize(new Dimension(700, 600));
+			System.out.println("Has the new panel '" + ((AbstractPanel)oPanels[0]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[0]).hasChanged());
+
+			String old_Label = ((AbstractPanel)oPanels[0]).getLabel();
+			((AbstractPanel)oPanels[0]).setLabel(((AbstractPanel)oPanels[0]).getLabel() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[0]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[0]).hasChanged());
+
+			((AbstractPanel)oPanels[0]).setLabel(old_Label);
+			((AbstractPanel)oPanels[0]).resetChangedStatus();
+			((AbstractPanel)oPanels[0]).setID(((AbstractPanel)oPanels[0]).getID() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[0]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[0]).hasChanged());
+
+			((AbstractPanel)oPanels[0]).resetChangedStatus();
+			((AbstractPanel)oPanels[0]).setLabelGroup(((AbstractPanel)oPanels[0]).getLabelGroup() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[0]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[0]).hasChanged());
+
+			((AbstractPanel)oPanels[0]).resetChangedStatus();
+			System.out.println("Has the panel reseted '" + ((AbstractPanel)oPanels[0]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[0]).hasChanged());
+			System.out.println("End: Tests: has changed? <----------");
+			// End: Tests: has changed?
+
+			// Begin: Test visibility
+			System.out.println("----------> Begin: Test visibility");
+			((AbstractPanel)oPanels[0]).setID("ID");
+			((AbstractPanel)oPanels[0]).setLabel("LABEL_TEST_VISIBILITY");
+			((AbstractPanel)oPanels[0]).setLabelGroup("LABEL_GROUP");
+
+			panelGroup.addPanel(((AbstractPanel)oPanels[0]));
+			
+			((AbstractPanel)oPanels[0]).setInGroupGUI(false);    // test change the visibility from a panel child
+			if (!((AbstractPanel)oPanels[0]).isInGroupGUI()) {
+				System.out.println("Test OK: the panel isn't in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel is in the GUI");
+			}
+			
+			((AbstractPanel)oPanels[0]).setInGroupGUI(true);     // test change the visibility from a panel child
+			if (((AbstractPanel)oPanels[0]).isInGroupGUI()) {
+				System.out.println("Test OK: the panel is in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel isn't in the GUI");
+			}
+			
+			panelGroup.setPanelInGUI(((AbstractPanel)oPanels[0]), false);
+			if (!panelGroup.isPanelInGUI(((AbstractPanel)oPanels[0]))) {
+				System.out.println("Test OK: the panel isn't in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel is in the GUI");
+			}
+			
+			panelGroup.setPanelInGUI(((AbstractPanel)oPanels[0]), true);
+			if (panelGroup.isPanelInGUI(((AbstractPanel)oPanels[0]))) {
+				System.out.println("Test OK: the panel is in the GUI");
+				System.out.println("Hay " + panelGroup.getPanelInGUICount() + " paneles en GUI, de los " + panelGroup.getPanelCount() + " registrados.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel isn't in the GUI");
+			}
+			System.out.println("End: Test visibility <----------");
+			// End: Test visibility
+
+			// Begin: Tests: Is a panel enabled?
+			System.out.println("----------> Begin: Tests: Is a panel enabled?");
+			panelGroup.setEnabledAt(0, false); // test change the enable status to a panel
+			if (!panelGroup.isEnabledAt(0)) {
+				System.out.println("Test OK: the panel isn't enabled.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel is enabled.");
+			}
+			
+			panelGroup.setEnabledAt(0, true); // test change the enable status to a panel
+			if (panelGroup.isEnabledAt(0)) {
+				System.out.println("Test OK: the panel is enabled.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel isn't enabled.");
+			}
+			
+			panelGroup.setEnabledAt(3, false); // test change the enable status to a panel
+			if (!panelGroup.isEnabledAt(3)) {
+				System.out.println("Test OK: the panel isn't enabled.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel is enabled.");
+			}
+			
+			panelGroup.setEnabledAt(3, true); // test change the enable status to a panel
+			if (panelGroup.isEnabledAt(3)) {
+				System.out.println("Test OK: the panel is enabled.");
+			}
+			else {
+				System.out.println("Test FAILED: the panel isn't enabled.");
+			}
+			System.out.println("End: Tests: Is a panel enabled? <----------");
+			// End: Tests: Is a panel enabled?
+			
+			// Begin: Test: accept, apply or cancel, after request if has changed?
+			System.out.println("----------> Begin: Test: accept, apply or cancel, after request if has changed?");
+//			Object[] obj_panels = (((Collection<IPanel>) panelGroup.values()).toArray());
+			
+			// First part:
+			System.out.println("First part:");
+			System.out.println("Is the new panel '" + ((AbstractPanel)oPanels[1]).getLabel() + "' always applicable?: " + ((AbstractPanel)oPanels[1]).isAlwaysApplicable());
+			System.out.println("Has the new panel '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			((AbstractPanel)oPanels[1]).setLabel(((AbstractPanel)oPanels[1]).getLabel() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.accept();
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after accept?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			((AbstractPanel)oPanels[1]).setLabel(((AbstractPanel)oPanels[1]).getLabel() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.apply();
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after apply?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			((AbstractPanel)oPanels[1]).setLabel(((AbstractPanel)oPanels[1]).getLabel() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.cancel();
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after cancel?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.accept();
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after accept?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.apply();
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after apply?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.cancel();
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after cancel?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			// Second part:
+			System.out.println("Second part:");
+			((AbstractPanel)oPanels[1]).setAlwaysApplicable(false);
+			System.out.println("Is the new panel '" + ((AbstractPanel)oPanels[1]).getLabel() + "' always applicable?: " + ((AbstractPanel)oPanels[1]).isAlwaysApplicable());
+			System.out.println("Has the new panel '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			((AbstractPanel)oPanels[1]).setLabel(((AbstractPanel)oPanels[1]).getLabel() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.accept();
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after accept?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			((AbstractPanel)oPanels[1]).setLabel(((AbstractPanel)oPanels[1]).getLabel() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.apply();
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after apply?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			((AbstractPanel)oPanels[1]).setLabel(((AbstractPanel)oPanels[1]).getLabel() + " modified");
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.cancel();
+			System.out.println("Has the panel modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after cancel?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.accept();
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after accept?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.apply();
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after apply?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			panelGroup.cancel();
+			System.out.println("Has the panel not modified '" + ((AbstractPanel)oPanels[1]).getLabel() + "' changed after cancel?: " + ((AbstractPanel)oPanels[1]).hasChanged());
+			System.out.println("End: Test: accept, apply or cancel, after request if has changed? <----------");
+			// End: Test: accept, apply or cancel, after request if has changed?
+			
+			JFrame jFrame = new JFrame();
+			jFrame.setTitle("Test TabbedPanel using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroup.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroup);
+			jFrame.setVisible(true);
+			
+			// Test the methods 'getSelectedIndex()' and 'getActivePanel()'
+			// Register a change listener
+			panelGroup.addChangeListener(new ChangeListener() {
+		        // This method is called whenever the selected tab changes
+		        public void stateChanged(ChangeEvent evt) {
+		        	JTabbedPane jTabbedPanel = (JTabbedPane) evt.getSource();
+		        	
+		        	System.out.println("Selection changed. New selection index: " + jTabbedPanel.getSelectedIndex());
+
+		        	showActivePanelInformation();
+		        }
+		    });
+			
+			// Test the method 'getSelectedIndex()':
+			panelGroup.setSelectedIndex(2);
+			
+			// Test the change of the reference of the group
+			panelGroup.updateReference("NEW REFERENCE");
+
+		// End: Other tests
+		} catch (BaseException e) {
+			System.out.println(e.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * <p>Shows information about the current active panel using the standard output.</p>
+	 */
+	private static void showActivePanelInformation() {
+		// Test the method 'getActivePanel()'
+		IPanel panel = panelGroup.getActivePanel();
+		
+    	System.out.println("New active panel:\n\tID: " + panel.getID() + "\n\tLABEL_GROUP: " + panel.getLabelGroup() + "\n\tLABEL: " + panel.getLabel() + "\n\tCLASS: " + panel.getClass());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1TabbedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupLoaderFromList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupLoaderFromList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupLoaderFromList.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.gvsig.gui.beans.panelGroup.samples.Samples_Data;
+
+/**
+ * <p>Tests {@link PanelGroupLoaderUtilities PanelGroupLoaderUtilities} and {@link PanelGroupLoaderFromList PanelGroupLoaderFromList}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class TestPanelGroupLoaderFromList extends TestCase {
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void test() {
+		try {
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_Data.TEST2_CLASSES);
+			ArrayList<IPanel> panels = new ArrayList<IPanel>();
+
+			loader.loadPanels(panels);
+
+			// Check that has loaded all panels
+			assertEquals(Samples_Data.TEST2_CLASSES.length, panels.size());
+			
+			int i = 0;
+
+			while (i < Samples_Data.TEST2_CLASSES.length) {
+				// Check order and class types
+				assertTrue(panels.get(i).getClass() == (Samples_Data.TEST2_CLASSES[i++]));
+			}
+		} catch (BaseException e) {
+			System.out.println(e.getLocalizedMessageStack());
+			fail();
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupLoaderFromList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanSharpeningPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanSharpeningPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanSharpeningPanel.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SamplePanSharpeningPanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = 648806623810248226L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SamplePanSharpeningPanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SamplePanSharpeningPanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+
+		setID(Samples_Data.PANELS1_IDS[4]);
+		setLabel(Samples_Data.PANELS1_LABELS[4]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[4]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.MAGENTA);
+		}
+
+		return jTextArea;
+	}
+
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+		
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanSharpeningPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelWithoutGroupLabel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelWithoutGroupLabel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelWithoutGroupLabel.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 23/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SamplePanelWithoutGroupLabel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = -5449402170753829090L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SamplePanelWithoutGroupLabel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SamplePanelWithoutGroupLabel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+		
+		setID(Samples_Data.PANELS3_IDS[0]);
+		setLabel(Samples_Data.PANELS3_LABELS[0]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.WHITE);
+		}
+
+		return jTextArea;
+	}
+
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelWithoutGroupLabel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInvisiblePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInvisiblePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInvisiblePanel.java	(revision 42196)
@@ -0,0 +1,152 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 10/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleInvisiblePanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = -1629511810619122126L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleInvisiblePanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleInvisiblePanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+	
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+		
+		setID(Samples_Data.PANELS1_IDS[0]);
+		setLabel(Samples_Data.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[0]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+		setVisible(false);
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.RED);
+		}
+
+		return jTextArea;
+	}
+	
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+		
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInvisiblePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleBandSetupPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleBandSetupPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleBandSetupPanel.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleBandSetupPanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = 40652963597544670L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleBandSetupPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleBandSetupPanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+
+		setID(Samples_Data.PANELS1_IDS[1]);
+		setLabel(Samples_Data.PANELS1_LABELS[1]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[1]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.GREEN);
+		}
+
+		return jTextArea;
+	}
+
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+		 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+		 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleBandSetupPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleEnhancedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleEnhancedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleEnhancedPanel.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleEnhancedPanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = -7469300452126449245L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleEnhancedPanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleEnhancedPanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+	
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+
+		setID(Samples_Data.PANELS1_IDS[3]);
+		setLabel(Samples_Data.PANELS1_LABELS[3]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[3]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.CYAN);
+		}
+
+		return jTextArea;
+	}
+	
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleEnhancedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelGroupLabelRepeated.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelGroupLabelRepeated.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelGroupLabelRepeated.java	(revision 42196)
@@ -0,0 +1,152 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 23/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SamplePanelGroupLabelRepeated extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = 1857806149242138609L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SamplePanelGroupLabelRepeated() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SamplePanelGroupLabelRepeated(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+
+		setID(Samples_Data.PANELS3_IDS[1]);
+		setLabel(Samples_Data.PANELS3_LABELS[1]);
+		setLabelGroup(Samples_Data.PANELS3_LABELGROUPS[1]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.GRAY);
+		}
+
+		return jTextArea;
+	}
+
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SamplePanelGroupLabelRepeated.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleScalePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleScalePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleScalePanel.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleScalePanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = -4160464669737958732L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleScalePanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleScalePanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+	
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+
+		setID(Samples_Data.PANELS1_IDS[5]);
+		setLabel(Samples_Data.PANELS1_LABELS[5]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[5]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.YELLOW);
+		}
+
+		return jTextArea;
+	}
+	
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+		
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleScalePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInitializingExcetionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInitializingExcetionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInitializingExcetionPanel.java	(revision 42196)
@@ -0,0 +1,154 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleInitializingExcetionPanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = -876907003975432865L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleInitializingExcetionPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleInitializingExcetionPanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		
+		initialize();
+	}
+
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+		
+		setID(Samples_Data.PANELS1_IDS[0]);
+		setLabel(Samples_Data.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[0]);
+		
+		// Force to generate an exception
+		double badValue = 2 / 0;
+
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.GREEN);
+		}
+
+		return jTextArea;
+	}
+
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+		 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+		 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInitializingExcetionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleTransparencyPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleTransparencyPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleTransparencyPanel.java	(revision 42196)
@@ -0,0 +1,152 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleTransparencyPanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = -4145789119404234621L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleTransparencyPanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleTransparencyPanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+	
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+
+		setID(Samples_Data.PANELS1_IDS[2]);
+		setLabel(Samples_Data.PANELS1_LABELS[2]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[2]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.BLUE);
+		}
+
+		return jTextArea;
+	}
+	
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+		
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleTransparencyPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java	(revision 42196)
@@ -0,0 +1,148 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * 
+ * @version 30/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleUndefinedPreferredSizeExceptionPanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = 1210497562221898739L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleUndefinedPreferredSizeExceptionPanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleUndefinedPreferredSizeExceptionPanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+	
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+		
+		setID(Samples_Data.PANELS1_IDS[0]);
+		setLabel(Samples_Data.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[0]);
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.RED);
+		}
+
+		return jTextArea;
+	}
+	
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+		
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInfoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInfoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInfoPanel.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Sample of {@link AbstractPanel AbstractPanel}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleInfoPanel extends AbstractPanel implements Serializable {
+	private static final long serialVersionUID = -1629511810619122126L;
+
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private JTextArea jTextArea = null;
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel()
+	 */
+	public SampleInfoPanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * @see AbstractPanel#AbstractPanel(String, String, String)
+	 */
+	public SampleInfoPanel(String id, String label, String labelGroup) {
+		super(id, label, labelGroup);
+		initialize();
+	}
+	
+	@Override
+	protected void initialize() {
+		add(new JScrollPane(getJTextArea()));
+		setToolTipText(getID());
+		
+		setID(Samples_Data.PANELS1_IDS[0]);
+		setLabel(Samples_Data.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_Data.PANELS1_LABELGROUPS[0]);
+		setPreferredSize(new Dimension(Samples_Data.PANELS_DEFAULT_WIDTH, Samples_Data.PANELS_DEFAULT_HEIGHT));
+		resetChangedStatus();
+	}
+	
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea(5, 40);
+			jTextArea.setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+			jTextArea.setEditable(false);
+			jTextArea.setBackground(Color.RED);
+		}
+
+		return jTextArea;
+	}
+	
+	@Override
+	public void setID(String id) {
+		super.setID(id);
+		
+		setToolTipText(getID());
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabel(String label) {
+		super.setLabel(label);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	@Override
+	public void setLabelGroup(String labelGroup) {
+		super.setLabelGroup(labelGroup);
+		
+		getJTextArea().setText("I\'m a JTextArea object in the \"Panel\" with:\n\nID: " + getID() + "\nLabel: " + getLabel() + "\nLabelGroup: " + getLabelGroup());
+		hasChanged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+	 */
+	public void accept() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'accept' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+	 */
+	public void apply() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing an 'apply' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#cancel()
+	 */
+	public void cancel() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I'm executing a 'cancel' method.");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#selected()
+	 */
+	public void selected() {
+		System.out.println("I'm the IPanel: " + toString() + "\n and I've been selected. My information is: " +
+				 "\n\tID: " + getID() + "\n\tLABEL_GROUP: " + getLabelGroup() + "\n\tLABEL: " + getLabel() + "\n\tCLASS: " + getClass() +
+				 "\n\tMy Preferred Size: " + getPreferredSize() + "\n\tAnd My size: " + getSize());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/SampleInfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/Samples_Data.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/Samples_Data.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/Samples_Data.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.samples;
+
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+
+/**
+ * <p>This class has information to create samples to test {@link PanelGroupManagerDePablo PanelGroupManagerDePablo},
+ *  {@link TabbedPanel TabbedPanel}, {@link TreePanel TreePanel},
+ *  {@link AbstractPanel AbstractPanel}, {@link PanelGroupLoaderUtilities PanelGroupLoaderUtilities},
+ *  {@link PanelGroupLoaderFromList PanelGroupLoaderFromList}, {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Samples_Data {
+	public final static short PANELS_DEFAULT_WIDTH = 500;
+	public final static short PANELS_DEFAULT_HEIGHT = 400;
+	
+	public final static Class[] TEST1_CLASSES = {SampleInfoPanel.class, SampleBandSetupPanel.class, SampleTransparencyPanel.class, SampleEnhancedPanel.class, SamplePanSharpeningPanel.class, SampleScalePanel.class};
+	public final static Class[] TEST2_CLASSES = {SampleInfoPanel.class, SampleTransparencyPanel.class, SampleScalePanel.class};
+	public final static Class[] TEST3_CLASSES = {SamplePanelWithoutGroupLabel.class, SamplePanelGroupLabelRepeated.class};
+	public final static Class[] TEST4_CLASSES = {SampleInitializingExcetionPanel.class, SampleInfoPanel.class}; // Test 'ListCouldntLoadPanelFromListException' with any 'Exception' 
+	public final static Class[] TEST5_CLASSES = {SampleInfoPanel.class, SampleUndefinedPreferredSizeExceptionPanel.class}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException'
+	public final static Class[] TEST6_CLASSES = {}; // Test 'ListCouldntAddPanelException' with a 'EmptyPanelGroupException'
+	public final static Class[] TEST7_CLASSES = {SampleInvisiblePanel.class}; // Test 'ListCouldntAddPanelException' with a 'EmptyPanelGroupGUIException'
+	public final static Class[] TEST8_CLASSES = {SampleInitializingExcetionPanel.class, SampleUndefinedPreferredSizeExceptionPanel.class}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a 'EmptyPanelGroupException' and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static Class[] TEST9_CLASSES = {SampleInvisiblePanel.class, SampleInitializingExcetionPanel.class, SampleUndefinedPreferredSizeExceptionPanel.class}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a 'EmptyPanelGroupGUIException' and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static Class[] TEST10_CLASSES = {SampleBandSetupPanel.class, SampleInvisiblePanel.class, SampleInitializingExcetionPanel.class, SampleUndefinedPreferredSizeExceptionPanel.class}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a EmptyPanelGroupGUIException and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static Object REFERENCE1 = new String("Raster Layer");
+	public final static Object REFERENCE2 = new String("Imaginary Layer");
+	public final static Object REFERENCE3 = new String("Other tests");	
+	public final static String REFERENCE1_NAME = "Raster Layer reference";
+	public final static String REFERENCE2_NAME = "Imaginary Layer reference";
+	public final static String REFERENCE3_NAME = "Other tests reference";
+	public final static String PANELGROUP1_ID = "RPG1_ID";
+	public final static String PANELGROUP2_ID = "RPG2_ID";
+	public final static String PANELGROUP3_ID = "RPG3_ID";
+	public final static String[] PANELS1_IDS = {"Information_ID", "Bands_ID", "Transparency_ID", "Enhanced_ID", "PanSharpening_ID", "Scale_ID"};
+	public final static String[] PANELS2_IDS = {"Information_ID", "Transparency_ID", "Scale_ID"};
+	public final static String[] PANELS3_IDS = {"WithoutGroup_ID", "GroupLabelRepeated_ID"};
+	public final static String[] PANELS1_LABELS = {"Information_LABEL", "Bands_LABEL", "Transparency_LABEL", "Enhanced_LABEL", "PanSharpening_LABEL", "Scale_LABEL"};
+	public final static String[] PANELS2_LABELS = {"Information_LABEL", "Transparency_LABEL", "Scale_LABEL"};
+	public final static String[] PANELS3_LABELS = {"WithoutGroup_LABEL", "GroupLabelRepeated_LABEL"};
+	public final static String[] PANELS1_LABELGROUPS = {"Information_LABELGROUP", "Bands_LABELGROUP", "Transparency_LABELGROUP", "Enhanced_LABELGROUP", "PanSharpening_LABELGROUP", "Scale_LABELGROUP"};
+	public final static String[] PANELS2_LABELGROUPS = {"Information_LABELGROUP", "Transparency_LABELGROUP", "Scale_LABELGROUP"};
+	public final static String[] PANELS3_LABELGROUPS = {"WithoutGroup_LABELGROUP", "GroupLabelRepeated_LABELGROUP"};
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/samples/Samples_Data.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupManager.java	(revision 42196)
@@ -0,0 +1,167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import junit.framework.TestCase;
+
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+
+/**
+ * <p>Tests the class {@link PanelGroupManager PanelGroupManager}.</p>
+ * 
+ * @version 06/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class TestPanelGroupManager extends TestCase {
+	private PanelGroupManager manager;
+	private Object reference; 
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		manager = PanelGroupManager.getManager();
+		manager.registerPanelGroup(TabbedPanel.class);
+		manager.setDefaultType(TabbedPanel.class);
+
+		reference = new Object();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void testGetManager() {
+		try {
+			assertSame(manager, PanelGroupManager.getManager());
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}
+
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void testDefaultType() {
+		try {
+			assertSame(manager.getPanelGroup(reference).getClass(), TabbedPanel.class);
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}
+
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void testTabbedPanelType() {
+		try {
+			manager.setDefaultType(TabbedPanel.class);
+			assertSame(manager.getPanelGroup(reference).getClass(), TabbedPanel.class);
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}
+
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void testTreePanelType() {
+		try {
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+			assertSame(manager.getPanelGroup(reference).getClass(), TreePanel.class);
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}
+	
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void testCreateAPanelGroupManager() {
+		try {
+			manager.setDefaultType(TreePanel.class);
+			assertSame(manager.getPanelGroup(reference).getClass(), TreePanel.class);
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}
+
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void test1RegistegerAndDeregisterTypes() {
+		try {
+			manager.setDefaultType(TabbedPanel.class);
+			manager.deregisterPanelGroup(TabbedPanel.class);
+
+			AbstractPanelGroup panelGroup = manager.getPanelGroup(reference);
+			
+			assertEquals(panelGroup, null);
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}	
+
+	/**
+	 * <p>Test, results must be valid.</p>
+	 */
+	public void test2RegistegerAndDeregisterTypes() {
+		try {
+			manager.deregisterPanelGroup(TabbedPanel.class);
+			manager.deregisterPanelGroup(TreePanel.class);
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.registerPanelGroup(TreePanel.class);
+			manager.deregisterPanelGroup(TreePanel.class);
+			manager.deregisterPanelGroup(TabbedPanel.class);
+
+			AbstractPanelGroup panelGroup = manager.getPanelGroup(reference);
+			
+			assertEquals(panelGroup, null);
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/TestPanelGroupManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTreePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTreePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTreePanel.java	(revision 42196)
@@ -0,0 +1,279 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import junit.framework.TestCase;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.samples.Samples_Data;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+
+/**
+ * <p>Tests the loading of layers using a {@link TreePanel TreePanel} object and a {@link PanelGroupLoaderFromList PanelGroupLoaderFromList} loader
+ * Tests also the managing of the different kind of exceptions which could be launched during this process.</p>
+ * 
+ * @version 29/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test1ExceptionsUsingTreePanel extends TestCase {
+	private TreePanel panelGroup;
+	private PanelGroupManager manager;
+	private PanelGroupLoaderFromList loader;
+	private String validationText;
+	private String localizedMessage;
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		manager = PanelGroupManager.getManager();
+		manager.registerPanelGroup(TreePanel.class);
+		manager.setDefaultType(TreePanel.class);
+		panelGroup = (TreePanel) manager.getPanelGroup(Samples_Data.REFERENCE3);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		manager.deregisterPanelGroup(TreePanel.class);
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test1() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.";
+
+		try {
+			System.out.println("----- Test 1 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST4_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test2() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.";
+
+		try {
+			System.out.println("----- Test 2 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST5_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test3() {
+		validationText = Messages.getText("empty_panel_group_exception");
+
+		try {
+			System.out.println("----- Test 3 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST6_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test4() {
+		validationText = Messages.getText("empty_panel_group_gui_exception");
+
+		try {
+			System.out.println("----- Test 4 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST7_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test5() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.\n  " + Messages.getText("empty_panel_group_exception");
+
+		try {
+			System.out.println("----- Test 5 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST8_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test6() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.\n  " + Messages.getText("empty_panel_group_gui_exception");
+
+		try {
+			System.out.println("----- Test 6 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST9_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+	
+	/**
+	 * <p>Test the 'PanelGroup' exceptions </p>
+	 */
+	public void test7() {
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_list_exception") + "\n  Error cargando un panel: / by zero.\n  Panel de etiqueta Information_LABEL sin tama�o inicial definido.";
+
+		try {
+			System.out.println("----- Test 7 -----");
+			loader = new PanelGroupLoaderFromList(Samples_Data.TEST10_CLASSES);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack();
+			System.out.println(localizedMessage);
+			System.out.println("------------------");
+			assertEquals(localizedMessage, validationText);
+			return;
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.out.println("------------------");
+			fail();
+			return;
+		}
+
+		System.out.println("------------------");
+		fail();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/panelGroup/Test1ExceptionsUsingTreePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/graphic/TestGraphic.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/graphic/TestGraphic.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/graphic/TestGraphic.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.BorderLayout;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+/**
+ * Test para comprobar el funcionamiento de la grafica
+ * 
+ * @version 06/06/2008
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestGraphic implements GraphicListener {
+	private TestUI              frame               = new TestUI("TestGraphic");
+	private DefaultButtonsPanel defaultButtonsPanel = null;
+	private GraphicContainer    graphic             = null;
+
+	public TestGraphic() throws NotInitializeException{
+		graphic = new GraphicContainer(true);
+
+		int nSeries = 3;
+
+		String[] names = new String[nSeries];
+		int[][] series = new int[nSeries][256];
+
+		for(int iSerie = 0; iSerie < nSeries; iSerie++){
+			names[iSerie] = "Band " + iSerie;
+			for (int i = 0; i < 256; i++)
+				series[iSerie][i] = i * (iSerie + 1);
+		}
+		
+		graphic.getPGraphic().setViewType(0);
+		
+		graphic.getPGraphic().setNewChart(series, names);
+
+		graphic.addValueChangedListener(this);
+		defaultButtonsPanel = new DefaultButtonsPanel(ButtonsPanel.BUTTONS_CLOSE);
+		defaultButtonsPanel.setLayout(new BorderLayout(5, 5));
+		defaultButtonsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		defaultButtonsPanel.add(graphic, BorderLayout.CENTER);
+		frame.getContentPane().add(defaultButtonsPanel);
+		frame.setSize(640, 480);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		try {
+			new TestGraphic();
+		} catch (NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void actionValueChanged(GraphicEvent e) {
+		System.out.println(graphic.getX1() + ":" + graphic.getX2());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/graphic/TestGraphic.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/doubleslider/TestDoubleSlider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/doubleslider/TestDoubleSlider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/doubleslider/TestDoubleSlider.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.doubleslider;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+public class TestDoubleSlider implements DoubleSliderListener {
+	private JFrame jFrame = null;
+	private DoubleSlider doubleSlider = null;
+	private JPanel jPanel = null;
+
+	public TestDoubleSlider() {
+		jFrame = new JFrame();
+		jFrame.setSize(new Dimension(498, 267));
+		jFrame.setContentPane(getJPanel());
+		jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		jFrame.setVisible(true);
+	}
+
+	/**
+	 * This method initializes multiSlider	
+	 * 	
+	 * @return borsanza.src.multislider.MultiSlider	
+	 */
+	private DoubleSlider getMultiSlider() {
+		if (doubleSlider == null) {
+			doubleSlider = new DoubleSlider();
+			doubleSlider.setMinimum(0);
+			doubleSlider.setMaximum(255);
+			doubleSlider.addValueChangedListener(this);
+		}
+		return doubleSlider;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.setLayout(new BorderLayout());
+			jPanel.add(getMultiSlider(), BorderLayout.CENTER);
+		}
+		return jPanel;
+	}
+
+	public static void main(String[] args) {
+		new TestDoubleSlider();
+	}
+
+	public void actionValueChanged(DoubleSliderEvent e) {
+		System.out.println("Changed: " + getMultiSlider().getValue());
+	}
+
+	public void actionValueDragged(DoubleSliderEvent e) {
+		System.out.println("Dragged: " + getMultiSlider().getValue());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/doubleslider/TestDoubleSlider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/coorddatainput/TestCoordDataInput.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/coorddatainput/TestCoordDataInput.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/coorddatainput/TestCoordDataInput.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.coorddatainput;
+
+import java.awt.GridLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.coordinatespanel.CoordinatesPanel;
+/**
+ *
+ * @version 06/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestCoordDataInput extends TestUI {
+
+	public TestCoordDataInput() {
+		super("TestCoordDataInput");
+
+		CoordinatesPanel coord = new CoordinatesPanel();
+		coord.setTitlePanel("Coordenadas pixel");
+		coord.setEnabled(true);
+
+		CoordinatesPanel coord2 = new CoordinatesPanel();
+		coord2.setTitlePanel("Coordenadas reales");
+		coord2.setEnabled(true);
+
+		JPanel panel = new JPanel(new GridLayout(2, 1, 2, 2));
+		panel.add(coord);
+		panel.add(coord2);
+
+		JTextField field = new JTextField();
+		panel.add(field);
+
+		panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+		add(panel);
+		pack();
+		setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestCoordDataInput();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/coorddatainput/TestCoordDataInput.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/defaultbuttonspanel/TestDefaultButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/defaultbuttonspanel/TestDefaultButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/defaultbuttonspanel/TestDefaultButtonsPanel.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.defaultbuttonspanel;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.awt.BorderLayout;
+
+import javax.swing.JButton;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+
+/**
+ * <code>TestDialogPanel</code>. Test para comprobar el funcionamiento de la
+ * clase <code>DialogPanel</code>
+ *
+ * @version 15/03/2007
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestDefaultButtonsPanel implements ButtonsPanelListener {
+	private TestUI frame = new TestUI("TestDefaultButtonsPanel");
+
+	class NewComponentDialog extends DefaultButtonsPanel {
+		private static final long serialVersionUID = 4452922507292538671L;
+
+		public NewComponentDialog() {
+			super(ButtonsPanel.BUTTONS_YESNO);
+			this.setLayout(new BorderLayout());
+			JButton b = new JButton("prueba");
+			this.add(b, java.awt.BorderLayout.NORTH);
+			JButton c = new JButton("prueba2");
+			this.add(c, java.awt.BorderLayout.CENTER);
+		}
+	}
+
+	NewComponentDialog ncd;
+
+	public TestDefaultButtonsPanel() {
+		ncd = new NewComponentDialog();
+
+		frame.setSize(640, 480);
+		frame.getContentPane().add(ncd);
+
+		ncd.addButtonPressedListener(this);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestDefaultButtonsPanel();
+	}
+
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		System.out.println("Bot�n pulsado: " + e.getButton());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/defaultbuttonspanel/TestDefaultButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckColorSliderTextTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckColorSliderTextTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckColorSliderTextTable.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.checkslidertext;
+
+import java.awt.Color;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderEvent;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderListener;
+
+public class TestCheckColorSliderTextTable implements DoubleSliderListener {
+	private int                           w      = 375, h = 150;
+	private TestUI                        frame  = new TestUI("TestCheckColorSliderTextTable");
+	private CheckColorSliderTextContainer sliderRed = null;
+
+	public TestCheckColorSliderTextTable() {
+		sliderRed = new CheckColorSliderTextContainer(0, 255, 0, "R", false);
+		sliderRed.setColor1(Color.BLACK, false);
+		sliderRed.setColor2(Color.RED, true);
+		sliderRed.setCheckboxVisible(true);
+
+		frame.getContentPane().add(sliderRed);
+		sliderRed.setEnabled(true);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+		sliderRed.addValueChangedListener(this);
+	}
+
+	public static void main(String[] args) {
+		new TestCheckColorSliderTextTable();
+	}
+
+	public void actionValueChanged(DoubleSliderEvent e) {
+		System.out.println("Changed: " + sliderRed.getValue());
+	}
+
+	public void actionValueDragged(DoubleSliderEvent e) {
+		System.out.println("Dragged: " + sliderRed.getValue());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckColorSliderTextTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckSliderTextTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckSliderTextTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckSliderTextTable.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.checkslidertext;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
+import org.gvsig.gui.beans.slidertext.listeners.SliderListener;
+
+public class TestCheckSliderTextTable implements SliderListener {
+	private TestUI                   frame  = new TestUI("TestCheckSliderTextTable");
+	private CheckSliderTextContainer slider = null;
+
+	public TestCheckSliderTextTable() {
+		slider = new CheckSliderTextContainer(0, 10, 5, false, "Activar", false, true, true);
+		slider.setDecimal(false);
+		slider.setBorder("Cabecera");
+		slider.addValueChangedListener(this);
+
+		frame.getContentPane().add(slider);
+		frame.setSize(375, 150);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestCheckSliderTextTable();
+	}
+
+	public void actionValueChanged(SliderEvent e) {
+		System.out.println("Changed: " + slider.getValue());
+	}
+
+	public void actionValueDragged(SliderEvent e) {
+		System.out.println("Dragged: " + slider.getValue());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/checkslidertext/TestCheckSliderTextTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/fastforward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/fastforward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/forward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/forward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/fastbackward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/fastbackward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/backward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/images/backward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/TestJComboBoxWithImageIconItems.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/TestJComboBoxWithImageIconItems.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/TestJComboBoxWithImageIconItems.java	(revision 42196)
@@ -0,0 +1,219 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.jComboBoxWithImageIconItems;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Vector;
+
+import javax.swing.JFrame;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests JPanelWithJComboBoxImageItems
+ * 
+ * This code has been extracted and modified from the Java Sun Microsystems's example: 'CustomComboBoxDemo.java'
+ *   in http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html
+ * 
+ * @author Sun Microsystems
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJComboBoxWithImageIconItems {
+    /**
+     * Main test method
+     * 
+     * @param args Arguments
+     */
+    public static void main(String[] args) {
+    	/**
+    	 * Schedule a job for the event-dispatching thread:
+    	 * creating and showing this application's GUI.
+    	 */
+        javax.swing.SwingUtilities.invokeLater(new Runnable() {
+        	/*
+        	 * (non-Javadoc)
+        	 * @see java.lang.Runnable#run()
+        	 */
+            public void run() {
+                createAndShowGUI();
+            }
+        });
+    }
+
+    /**
+     * Create the GUI and show it.  For thread safety,
+     * this method should be invoked from the
+     * event-dispatching thread.
+     */
+    private static void createAndShowGUI() {
+        //Create and set up the window.
+        JFrame frame = new JFrame("Test TestJComboBoxWithImageIconItems");
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        //Create and set up the content pane.
+        JComboBoxWithImageIconItems component = new JComboBoxWithImageIconItems(); 
+        component.setOpaque(true); //content panes must be opaque
+        frame.setContentPane(component);
+        component.addActionListener(new ActionListener() {
+        	/*
+        	 *  (non-Javadoc)
+        	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+        	 */
+			public void actionPerformed(ActionEvent e) {		
+				JComboBoxWithImageIconItems cb = (JComboBoxWithImageIconItems)e.getSource();
+				ImageIconItemInfo iiii = (ImageIconItemInfo)cb.getSelectedItem();
+				if (iiii != null) {
+					String value = (String)iiii.getItemValue();
+					if (value != null)
+						System.out.println("Seleccionado item con null: " + value);
+					else
+						System.out.println("Seleccionado item con con valor null");
+				}
+			}
+        	
+        });
+        
+        /**** METHOD TESTS ****/
+
+        /**** Don't Remove any test! ****/
+        /**** Some tests could be commented but not removed! ****/
+
+        // Test 'setJComboBoxRendererPreferredSize' method
+        component.setJComboBoxRendererPreferredSize(new Dimension(150, 80));
+
+        // Test 'getJComboBoxRendererPreferredSize' method
+        System.out.println("JComboBox Renderer Preferred Size: " + component.getJComboBoxRendererPreferredSize());
+
+        // Data samples
+        ImageIconItemInfo backward = new ImageIconItemInfo("images/backward.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "images/backward.png"), "Retroceder", null);
+        ImageIconItemInfo fastbackward = new ImageIconItemInfo("images/fastbackward.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "images/fastbackward.png"), "Retroceso r�pido", null);
+        ImageIconItemInfo forward = new ImageIconItemInfo("images/forward.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "images/forward.png"), "Avanzar", "Avanzar");
+        ImageIconItemInfo fastforward = new ImageIconItemInfo("images/fastforward.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "images/fastforward.png"), "Avance r�pido", null);
+        
+        ImageIconItemInfo error1 = new ImageIconItemInfo("Error1.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "Error1.png"),"Error 1", "Error 1");
+        ImageIconItemInfo error2 = new ImageIconItemInfo("Error2.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "Error2.png"),"Error 2", null);
+        ImageIconItemInfo error3 = new ImageIconItemInfo("Error3.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "Error3.png"),"Error 3", "Error 3");
+        ImageIconItemInfo error4 = new ImageIconItemInfo("Error4.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "Error4.png"),"Error 4", null);
+        ImageIconItemInfo error5 = new ImageIconItemInfo("Error5.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "Error5.png"),"Error 5", "Error 5");
+        ImageIconItemInfo error6 = new ImageIconItemInfo("Error6.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "Error6.png"),"Error 6", null);
+        ImageIconItemInfo error7 = new ImageIconItemInfo("Error7.png", ImageIconItemInfoUtils.createImageIcon(TestJComboBoxWithImageIconItems.class, "Error7.png"),"Error 5", null);
+        
+        // Test 'addImageIcon' method
+        component.addImageIconItem(backward);
+        component.addImageIconItem(error1);
+        
+        // Test 'removeImageIcon' method
+        component.removeImageIconItem(backward);
+        component.removeImageIconItem(error2);
+        component.removeImageIconItem(error1);
+
+        // Test 'getMaximumRowCount' method
+        System.out.println("N�mero de filas por defecto: " + component.getMaximumRowCount());
+
+        // Test 'setMaximumRowCount' method
+        component.setMaximumRowCount(4);
+
+        // Test 'getMaximumJComboBoxRowCount' method
+        System.out.println("N�mero de filas despues de modificarlo el atributo: " + component.getMaximumRowCount());
+
+        // Tests 'addImageIcons(String [])' method
+        ImageIconItemInfo[] icons = {backward, forward, forward, // Duplicated 'forward.png'
+        		error3, fastbackward, fastforward};
+        component.addImageIconItems(icons);
+
+        // Tests 'removeAllImageIcons' method
+        component.removeAllImageIconItems();
+
+        // Tests 'removeImageIcons(String [])' method
+        component.addImageIconItems(icons);
+        ImageIconItemInfo[] icons2 = {error3, error4, forward};
+        component.removeImageIconItems(icons2);
+
+        // Tests 'addImageIcons(Vector)' method
+        Vector icons3 = new Vector();
+        icons3.add(forward); // Allow repeated items
+        icons3.add(error5);
+        icons3.add(backward); // Allow repeated items
+        icons3.add(error6);
+        component.addImageIconItems(icons3);
+
+        // Tests 'setShowImageIconAndTextProperty' method
+        component.setShowImageIconAndTextProperty(true);
+        component.setShowImageIconAndTextProperty(false);
+
+        // Tests 'removeImageIcons(Vector)' method
+        Vector icons4 = new Vector();
+        icons4.add(forward); // Remove a repeted item (only one time)
+        icons4.add(error6);
+        icons4.add(error7); // Tries to remove an item but its tool tip text it's incorrect and then it can't remove this item
+        component.removeImageIconItems(icons4);
+
+        /**** END METHOD TESTS ****/
+
+        //Display the window.
+        frame.pack();
+        frame.setVisible(true);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/TestJComboBoxWithImageIconItems.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jfilechooser/TestJFileChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jfilechooser/TestJFileChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jfilechooser/TestJFileChooser.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.jfilechooser;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.swing.JFileChooser;
+/**
+ * Test para el componente JFileChooser. Como se puede apreciar, recuerda el
+ * �ltimo directorio elegido para cada caso.
+ *
+ * @version 05/12/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestJFileChooser implements ActionListener  {
+
+	private TestUI frame = new TestUI("TestJFileChooser");
+	JComboBox comboBox = null;
+
+	public TestJFileChooser() {
+
+		frame.setLayout(new BorderLayout());
+		frame.setResizable(false);
+		comboBox = new JComboBox();
+		comboBox.addItem("Tablas de color");
+		comboBox.addItem("Vectorial");
+		comboBox.addItem("Raster");
+		comboBox.addItem("Otros");
+		frame.add(comboBox, BorderLayout.CENTER);
+		JButton button = new JButton("Abrir fichero");
+		button.addActionListener(this);
+		frame.add(button, BorderLayout.SOUTH);
+
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestJFileChooser();
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		JFileChooser chooser = new JFileChooser(comboBox.getSelectedItem().toString(), (File) null);
+		chooser.showOpenDialog(frame);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/jfilechooser/TestJFileChooser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDateDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDateDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDateDialog.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar;
+
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.Messages;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the JCalendarDateDialog  -> creates a JFrame that allows use a JCalendarDateDialog  object
+
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJCalendarDateDialog extends JFrame implements Serializable {
+	private static final long serialVersionUID = 5885608277555264729L;
+	private static JCalendarDateDialog t;
+
+	/**
+	 * Test method for the TestJCalendarCDatePanel class
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		int widthJF = 200;
+		int heightJF = 50;
+		int widthJB = 30;
+		int heightJB = 20;
+		
+		// Objects creation
+		JFrame jF = new JFrame();
+		
+		// JCalendarDateDialog
+		t = new JCalendarDateDialog();		
+		
+		// Test Modal
+		t.setModal(true);
+		
+		// Test set minimum dimension
+//		t.setMinimumWidth(200);
+//		t.setMinimumHeight(150);
+		t.setMinimumWidthScreenResolutionPercentage(0.30);
+		t.setMinimumHeightScreenResolutionPercentage(0.20);
+		
+		// Test set maximum dimension
+//		t.setMaximumWidth(500);
+//		t.setMaximumHeight(400);		
+		t.setMaximumWidthScreenResolutionPercentage(0.60);
+		t.setMaximumHeightScreenResolutionPercentage(0.40);		
+
+		// Test Resize the component:
+		t.setSizeResize(350, 300);
+		
+		// Creates a JButton
+		JButton jButton = new JButton();
+		jButton.setPreferredSize(new Dimension(widthJB, heightJB));
+		jButton.setText(Messages.getText("date"));
+		jButton.addMouseListener(new MouseAdapter() {
+			/*
+			 *  (non-Javadoc)
+			 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+			 */
+			public void mouseClicked(MouseEvent e) {
+				t.setVisible(true);
+				t.setLocationRelativeTo(null);
+				System.out.println("Selected date: " + new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(t.getDate()));
+			}
+		});
+		
+		// Set properties
+		jF.setTitle("Test JCalendarDateDialog");
+		jF.setSize(new Dimension(widthJF, heightJF));	    
+	    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	    jF.getContentPane().add(jButton);
+	    jF.setLocationRelativeTo(null);
+		
+		jF.setVisible(true);
+	
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDateDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDatePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDatePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDatePanel.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar;
+
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JFrame;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the JCalendarCDatePanel -> creates a JFrame that allows use a JCalendarCDatePanel object
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJCalendarDatePanel extends JFrame implements Serializable {
+	private static final long serialVersionUID = 6214293384150864091L;
+
+	/**
+	 * Test method for the TestJCalendarCDatePanel class
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		int old_width = 200;
+		int old_height = 50;
+		int new_width = 445;
+		int new_height = 370;
+		
+		// Objects creation
+		JFrame jF = new JFrame();		
+		JCalendarDatePanel t = new JCalendarDatePanel();
+		
+		// Set properties
+		jF.setTitle("Test JCalendarDatePanel");
+		jF.setSize(new Dimension(old_width, old_height));	    
+	    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	    jF.getContentPane().add(t);	    
+		
+		jF.setVisible(true);
+		
+		// Test Modal
+		t.setModal(true);
+		
+		// Test resize the panel (and its button)
+		jF.setSize(new Dimension(new_width, new_height)); // For see all panel with the new size
+		t.setPreferredSize(new Dimension (355, 325));
+		t.setSize(new Dimension (360, 320));
+		t.setSize(365, 325);
+		t.revalidate();
+		
+		// Test Disable Calendar Selection
+		//t.disableCalendar();
+		
+		// Tests resizing the Calendar dialog
+		// Test set minimum dimension
+		t.getJCalendarDateDialog().setMinimumWidth(350);
+		t.getJCalendarDateDialog().setMinimumHeight(170);
+//		t.getJCalendarDateDialog().setMinimumWidthScreenResolutionPercentage(0.30);
+//		t.getJCalendarDateDialog().setMinimumHeightScreenResolutionPercentage(0.20);
+		
+		// Test set maximum dimension
+		t.getJCalendarDateDialog().setMaximumWidth(500);
+		t.getJCalendarDateDialog().setMaximumHeight(400);		
+//		t.getJCalendarDateDialog().setMaximumWidthScreenResolutionPercentage(0.60);
+//		t.getJCalendarDateDialog().setMaximumHeightScreenResolutionPercentage(0.40);		
+
+		// Test Resize the component:
+//		t.getJCalendarDateDialog().setSizeResize(350, 300);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarDatePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarCDatePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarCDatePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarCDatePanel.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar;
+
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JFrame;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the JCalendarCDatePanel -> creates a JFrame that allows use a JCalendarCDatePanel object
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJCalendarCDatePanel extends JFrame implements Serializable {
+	private static final long serialVersionUID = 8633128258748487018L;
+
+	/**
+	 * Test method for the CalendarPanelTest
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		int width = 500;
+		int height = 30;
+		
+		// Objects creation
+		JFrame jF = new JFrame();		
+		JCalendarCDatePanel t = new JCalendarCDatePanel();
+		
+		// Set properties
+		jF.setTitle("Test JCalendarCDatePanel");
+		jF.setSize(new Dimension(width, height));	    
+	    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	    jF.getContentPane().add(t);	    
+		
+		jF.setVisible(true);
+		
+		// Test Resize the component:
+		t.setPreferredSizeResize(500, 24);
+		
+		// Test Disable Calendar Selection
+		//t.disableCalendar();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/TestJCalendarCDatePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example1.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example1.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example1.java	(revision 42196)
@@ -0,0 +1,208 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+//**********************************************************************
+// Package
+//**********************************************************************
+
+
+//**********************************************************************
+// Import list
+//**********************************************************************
+package org.gvsig.gui.beans.swing.textBoxWithCalendar.jCalendarUsingSamples;
+
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.util.Calendar;
+import java.util.Locale;
+
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.border.Border;
+
+import org.freixas.jcalendar.DateEvent;
+import org.freixas.jcalendar.DateListener;
+import org.freixas.jcalendar.JCalendar;
+
+/**
+ * This example shows various instances of the JCalendar class.
+ * <hr>
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the Artistic License. You should have
+ * received a copy of the Artistic License along with this program. If
+ * not, a copy is available at
+ * <a href="http://opensource.org/licenses/artistic-license.php">
+ * opensource.org</a>.
+ *
+ * @author Antonio Freixas
+ */
+
+// Copyright � 2004 Antonio Freixas
+// All Rights Reserved.
+
+public class Example1 extends JFrame {
+	private static final long serialVersionUID = -2655722904436980134L;
+
+	// **********************************************************************
+	// main
+	// **********************************************************************
+
+	public static void main(String[] args) {
+		new Example1();
+	}
+
+// **********************************************************************
+// Constructors
+//**********************************************************************
+
+/**
+ * Create various instances of a JCalendar.
+ */
+
+public
+Example1()
+{
+    // Set up the frame
+
+    setTitle("Example1");
+    setDefaultCloseOperation(EXIT_ON_CLOSE);
+
+    Container contentPane = getContentPane();
+    contentPane.setLayout(new GridLayout(2, 2, 5, 5));
+
+    // Create a border for all calendars
+
+    Border etchedBorder =
+	BorderFactory.createEtchedBorder();
+    Border emptyBorder =
+	BorderFactory.createEmptyBorder(10, 10, 10, 10);
+    Border compoundBorder =
+	BorderFactory.createCompoundBorder(etchedBorder, emptyBorder);
+
+    // Create a date listener to be used for all calendars
+
+    MyDateListener listener = new MyDateListener();
+
+    // Display date and time using the default calendar and locale.
+    // Display today's date at the bottom.
+
+    JCalendar calendar1 =
+	new JCalendar(
+	    JCalendar.DISPLAY_DATE | JCalendar.DISPLAY_TIME,
+	    true);
+    calendar1.addDateListener(listener);
+    calendar1.setBorder(compoundBorder);
+
+    // Set fonts rather than using defaults
+
+    calendar1.setTitleFont(new Font("Serif", Font.BOLD|Font.ITALIC, 24));
+    calendar1.setDayOfWeekFont(new Font("SansSerif", Font.ITALIC, 12));
+    calendar1.setDayFont(new Font("SansSerif", Font.BOLD, 16));
+    calendar1.setTimeFont(new Font("DialogInput", Font.PLAIN, 10));
+    calendar1.setTodayFont(new Font("Dialog", Font.PLAIN, 14));
+
+    // Display date only
+
+    JCalendar calendar2 = new JCalendar(JCalendar.DISPLAY_DATE, false);
+    calendar2.addDateListener(listener);
+    calendar2.setBorder(compoundBorder);
+
+    // Display time only and set the time pattern to use as a duration
+    // from 00:00 to 23:59
+
+    JCalendar calendar3 =
+	new JCalendar(
+	    Calendar.getInstance(),
+	    Locale.getDefault(),
+	    JCalendar.DISPLAY_TIME,
+	    false,
+	    "HH:mm");
+    calendar3.addDateListener(listener);
+    calendar3.setBorder(compoundBorder);
+
+    // Display a French calendar
+
+    JCalendar calendar4 =
+	new JCalendar(
+	    Calendar.getInstance(Locale.FRENCH),
+	    Locale.FRENCH,
+	    JCalendar.DISPLAY_DATE | JCalendar.DISPLAY_TIME,
+	    false);
+    calendar4.addDateListener(listener);
+    calendar4.setBorder(compoundBorder);
+
+    // Add all the calendars to the content pane
+
+    JPanel panel1 = new JPanel(new FlowLayout());
+    panel1.add(calendar1);
+    contentPane.add(panel1);
+
+    JPanel panel2 = new JPanel(new FlowLayout());
+    panel2.add(calendar2);
+    contentPane.add(panel2);
+
+    JPanel panel3 = new JPanel(new FlowLayout());
+    panel3.add(calendar3);
+    contentPane.add(panel3);
+
+    JPanel panel4 = new JPanel(new FlowLayout());
+    panel4.add(calendar4);
+    contentPane.add(panel4);
+
+    // Make the window visible
+
+    pack();
+    setVisible(true);
+}
+
+//**********************************************************************
+// Inner Classes
+//**********************************************************************
+
+private class MyDateListener
+      implements DateListener
+{
+
+public void
+dateChanged(
+    DateEvent e)
+{
+    Calendar c = e.getSelectedDate();
+    if (c != null) {
+	System.out.println(c.getTime());
+    }
+    else {
+	System.out.println("No time selected.");
+    }
+}
+
+}
+
+//**********************************************************************
+// End Inner Classes
+//**********************************************************************
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example1.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example2.java	(revision 42196)
@@ -0,0 +1,196 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar.jCalendarUsingSamples;
+
+
+//**********************************************************************
+// Import list
+//**********************************************************************
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Locale;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.freixas.jcalendar.DateEvent;
+import org.freixas.jcalendar.DateListener;
+import org.freixas.jcalendar.JCalendarCombo;
+
+/**
+ * This example shows various instances of the JCalendarCombo class.
+ * <hr>
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the Artistic License. You should have
+ * received a copy of the Artistic License along with this program. If
+ * not, a copy is available at
+ * <a href="http://opensource.org/licenses/artistic-license.php">
+ * opensource.org</a>.
+ *
+ * @author Antonio Freixas
+ */
+
+// Copyright � 2004 Antonio Freixas
+// All Rights Reserved.
+
+class Example2 extends JFrame {
+	private static final long serialVersionUID = 1804829593564929253L;
+
+	// **********************************************************************
+	// main
+	// **********************************************************************
+
+	public static void main(String[] args) {
+		new Example2();
+	}
+
+// **********************************************************************
+// Constructors
+//**********************************************************************
+
+/**
+ * Create various instances of a JCalendarCombo.
+ */
+
+public
+Example2()
+{
+    // Set up the frame
+
+    setTitle("Example2");
+    setDefaultCloseOperation(EXIT_ON_CLOSE);
+
+    Container contentPane = getContentPane();
+    contentPane.setLayout(new GridLayout(2, 2, 5, 5));
+
+    // Create a date listener to be used for all calendars
+
+    MyDateListener listener = new MyDateListener();
+
+    // Display date and time using the default calendar and locale.
+    // Display today's date at the bottom. Allow editing
+
+    JCalendarCombo calendar1 =
+	new JCalendarCombo(
+	    JCalendarCombo.DISPLAY_DATE | JCalendarCombo.DISPLAY_TIME,
+	    true);
+    calendar1.setEditable(true);
+    calendar1.addDateListener(listener);
+
+    // Set fonts rather than using defaults
+
+    calendar1.setFont(new Font("DialogInput", Font.PLAIN, 16));
+
+    calendar1.setTitleFont(new Font("Serif", Font.BOLD|Font.ITALIC, 24));
+    calendar1.setDayOfWeekFont(new Font("SansSerif", Font.ITALIC, 12));
+    calendar1.setDayFont(new Font("SansSerif", Font.BOLD, 16));
+    calendar1.setTimeFont(new Font("DialogInput", Font.PLAIN, 10));
+    calendar1.setTodayFont(new Font("Dialog", Font.PLAIN, 14));
+
+    // Display date only
+
+    JCalendarCombo calendar2 =
+	new JCalendarCombo(JCalendarCombo.DISPLAY_DATE, false);
+    calendar2.addDateListener(listener);
+
+    // Display time only and set the time pattern to use as a duration
+    // from 00:00 to 23:59
+
+    JCalendarCombo calendar3 =
+	new JCalendarCombo(
+	    Calendar.getInstance(),
+	    Locale.getDefault(),
+	    JCalendarCombo.DISPLAY_TIME,
+	    false,
+	    "HH:mm:ss");
+    calendar3.setDateFormat(new SimpleDateFormat("HH:mm:ss"));
+    calendar3.addDateListener(listener);
+
+    // Display a French calendar
+
+    JCalendarCombo calendar4 =
+	new JCalendarCombo(
+	    Calendar.getInstance(Locale.FRENCH),
+	    Locale.FRENCH,
+	    JCalendarCombo.DISPLAY_DATE | JCalendarCombo.DISPLAY_TIME,
+	    false);
+    calendar4.addDateListener(listener);
+
+    // Add all the calendars to the content pane
+
+    JPanel panel1 = new JPanel(new BorderLayout());
+    panel1.add(calendar1, BorderLayout.NORTH);
+    contentPane.add(panel1);
+
+    JPanel panel2 = new JPanel(new BorderLayout());
+    panel2.add(calendar2, BorderLayout.NORTH);
+    contentPane.add(panel2);
+
+    JPanel panel3 = new JPanel(new BorderLayout());
+    panel3.add(calendar3, BorderLayout.NORTH);
+    contentPane.add(panel3);
+
+    JPanel panel4 = new JPanel(new BorderLayout());
+    panel4.add(calendar4, BorderLayout.NORTH);
+    contentPane.add(panel4);
+
+    // Make the window visible
+
+    pack();
+    setVisible(true);
+}
+
+//**********************************************************************
+// Inner Classes
+//**********************************************************************
+
+private class MyDateListener
+      implements DateListener
+{
+
+public void
+dateChanged(
+    DateEvent e)
+{
+    Calendar c = e.getSelectedDate();
+    if (c != null) {
+	System.out.println(c.getTime());
+    }
+    else {
+	System.out.println("No time selected.");
+    }
+}
+
+}
+
+//**********************************************************************
+// End Inner Classes
+//**********************************************************************
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/jCalendarUsingSamples/Example2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJTextFieldWithSCP.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJTextFieldWithSCP.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJTextFieldWithSCP.java	(revision 42196)
@@ -0,0 +1,178 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.specificcaretposition;
+
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.awt.event.specificCaretPosition.ISpecificCaretPosition;
+import org.gvsig.gui.beans.Messages;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests for JTextFieldWithSpecificCaretPosition
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJTextFieldWithSCP {
+	private static JTextFieldWithSCP jTF1;
+	private static JTextFieldWithSCP jTF2;
+	private static JTextFieldWithSCP jTF3;
+	private static JTextFieldWithSCP jTF4;
+	
+	/**
+	 * Test method for the TestJCalendarCDatePanel class
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		final int height = 60;
+		final int width = 300;
+		
+		final int heightTF = 25;
+		final int widthTF = 40;
+		
+		final int heightJB = 25;
+		final int widthJB = 100;
+		
+		// Objects creation
+		JFrame jF = new JFrame();		
+
+		JPanel jP = new JPanel();
+		jP.setPreferredSize(new Dimension(width, height));
+		
+		jTF1 = new JTextFieldWithSCP();
+		jTF1.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF1.setToolTipText(Messages.getText("Default"));
+		
+		jTF2 = new JTextFieldWithSCP();
+		jTF2.setCaretPositionMode(ISpecificCaretPosition.RIGHT_POSITIONS);
+		jTF2.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF2.setToolTipText(Messages.getText("Right"));
+
+		jTF3 = new JTextFieldWithSCP();
+		jTF3.setCaretPositionMode(ISpecificCaretPosition.LEFT_POSITIONS);
+		jTF3.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF3.setToolTipText(Messages.getText("Left"));
+
+		jTF4 = new JTextFieldWithSCP();
+		jTF4.setCaretPositionMode(ISpecificCaretPosition.LIKE_JTEXTCOMPONENT);
+		jTF4.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF4.setToolTipText(Messages.getText("Like_JTextField"));
+		
+		JButton jButton = new JButton();
+		jButton.setToolTipText("Enable/Disable");
+		jButton.setText("En./Dis.");
+		jButton.setPreferredSize(new Dimension(widthJB, heightJB));
+		jButton.addMouseListener(new MouseAdapter() {
+			/*
+			 *  (non-Javadoc)
+			 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+			 */
+			public void mouseClicked(MouseEvent e) {
+				enableOrDisableJTextFields();
+			}			
+		});
+
+	    
+		jP.add(jTF1);
+		jP.add(jTF2);
+		jP.add(jTF3);
+		jP.add(jTF4);
+		jP.add(jButton);
+
+//		jF.setVisible(false);		
+	    // Test adding text to text fields
+
+	    // Set properties
+		jF.setTitle("Test JTextFieldWithSpecificCaretPosition");
+	    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	    jF.setSize(jP.getPreferredSize());
+	    jF.getContentPane().add(jP);	
+	    
+		jF.setVisible(true);
+		
+	    jTF1.setEnabled(false);
+	    jTF1.setText("+123456.78901234141241");
+	    jTF2.setEnabled(false);
+	    jTF2.setText("-0917429817.10934712");
+	    jTF3.setEnabled(false);
+	    jTF3.setText("-184091.3095174");
+	    jTF4.setEnabled(false);
+	    jTF4.setText("+128947.09345734");
+
+	}
+	
+	private static void enableOrDisableJTextFields() {
+		jTF1.setEnabled(!jTF1.isEnabled());
+		jTF2.setEnabled(!jTF2.isEnabled());
+		jTF3.setEnabled(!jTF3.isEnabled());
+		jTF4.setEnabled(!jTF4.isEnabled());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJTextFieldWithSCP.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJFormattedTextFieldSCP.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJFormattedTextFieldSCP.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJFormattedTextFieldSCP.java	(revision 42196)
@@ -0,0 +1,178 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.specificcaretposition;
+
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.awt.event.specificCaretPosition.ISpecificCaretPosition;
+import org.gvsig.gui.beans.Messages;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests for JFormattedTextFieldWithSpecificCaretPosition
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestJFormattedTextFieldSCP {
+	private static JFormattedTextFieldSCP jTF1;
+	private static JFormattedTextFieldSCP jTF2;
+	private static JFormattedTextFieldSCP jTF3;
+	private static JFormattedTextFieldSCP jTF4;
+	
+	/**
+	 * Test method for the TestJCalendarCDatePanel class
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		final int height = 60;
+		final int width = 300;
+		
+		final int heightTF = 25;
+		final int widthTF = 40;
+		
+		final int heightJB = 25;
+		final int widthJB = 100;
+		
+		// Objects creation
+		JFrame jF = new JFrame();		
+
+		JPanel jP = new JPanel();
+		jP.setPreferredSize(new Dimension(width, height));
+		
+		jTF1 = new JFormattedTextFieldSCP();
+		jTF1.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF1.setToolTipText(Messages.getText("default"));
+		
+		jTF2 = new JFormattedTextFieldSCP();
+		jTF2.setCaretPositionMode(ISpecificCaretPosition.RIGHT_POSITIONS);
+		jTF2.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF2.setToolTipText(Messages.getText("right"));
+
+		jTF3 = new JFormattedTextFieldSCP();
+		jTF3.setCaretPositionMode(ISpecificCaretPosition.LEFT_POSITIONS);
+		jTF3.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF3.setToolTipText(Messages.getText("left"));
+
+		jTF4 = new JFormattedTextFieldSCP();
+		jTF4.setCaretPositionMode(ISpecificCaretPosition.LIKE_JTEXTCOMPONENT);
+		jTF4.setPreferredSize(new Dimension(widthTF, heightTF));
+		jTF4.setToolTipText(Messages.getText("like_JTextField"));
+		
+		JButton jButton = new JButton();
+		jButton.setToolTipText(Messages.getText("enable/Disable"));
+		jButton.setText("En./Dis.");
+		jButton.setPreferredSize(new Dimension(widthJB, heightJB));
+		jButton.addMouseListener(new MouseAdapter() {
+			/*
+			 *  (non-Javadoc)
+			 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+			 */
+			public void mouseClicked(MouseEvent e) {
+				enableOrDisableJTextFields();
+			}			
+		});
+
+	    
+		jP.add(jTF1);
+		jP.add(jTF2);
+		jP.add(jTF3);
+		jP.add(jTF4);
+		jP.add(jButton);
+
+//		jF.setVisible(false);		
+	    // Test adding text to text fields
+
+	    // Set properties
+		jF.setTitle("Test JFormattedTextFieldWithSpecificCaretPosition");
+	    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	    jF.setSize(jP.getPreferredSize());
+	    jF.getContentPane().add(jP);	
+	    
+		jF.setVisible(true);
+		
+	    jTF1.setEnabled(false);
+	    jTF1.setText("+123456.78901234141241");
+	    jTF2.setEnabled(false);
+	    jTF2.setText("-0917429817.10934712");
+	    jTF3.setEnabled(false);
+	    jTF3.setText("-184091.3095174");
+	    jTF4.setEnabled(false);
+	    jTF4.setText("+128947.09345734");
+
+	}
+	
+	private static void enableOrDisableJTextFields() {
+		jTF1.setEnabled(!jTF1.isEnabled());
+		jTF2.setEnabled(!jTF2.isEnabled());
+		jTF3.setEnabled(!jTF3.isEnabled());
+		jTF4.setEnabled(!jTF4.isEnabled());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/specificcaretposition/TestJFormattedTextFieldSCP.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/TestUI.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/TestUI.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/TestUI.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans;
+
+import java.awt.Toolkit;
+
+import javax.swing.JFrame;
+import javax.swing.UIManager;
+/**
+ * Base para inicializar el frame de un Test
+ * @version 30/10/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestUI extends JFrame {
+  private static final long serialVersionUID = -4036296272039858631L;
+
+	public TestUI(String title) {
+		super(title);
+		defaultInit();
+		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+	}
+	
+	/**
+	 * Configura el entorno por defecto
+	 */
+	public static void defaultInit() {
+		 //Turn off metal's use of bold fonts
+		UIManager.put("swing.boldMetal", Boolean.FALSE);
+		Toolkit.getDefaultToolkit().setDynamicLayout(true);
+		try {
+	    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+    } catch (Exception e) {
+    }
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/TestUI.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorslideredition/TestColorSliderEdition.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorslideredition/TestColorSliderEdition.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorslideredition/TestColorSliderEdition.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.colorslideredition;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.border.EmptyBorder;
+
+import org.gvsig.gui.beans.TestUI;
+/**
+ *
+ * @version 02/11/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestColorSliderEdition implements ActionListener {
+	private TestUI jFrame = new TestUI("TestColorSliderEdition");
+	private ColorSliderEdition colorSliderEdition = null;
+	JCheckBox jCBInterpolated = null;
+	JCheckBox jCBEnabled = null;
+
+	public TestColorSliderEdition() {
+		jCBInterpolated = new JCheckBox("Interpolated");
+		jCBInterpolated.setSelected(true);
+		jCBInterpolated.addActionListener(this);
+		jCBEnabled = new JCheckBox("Enabled");
+		jCBEnabled.addActionListener(this);
+		jCBEnabled.setSelected(true);
+
+		jFrame.setSize(new Dimension(498, 127));
+		colorSliderEdition = new ColorSliderEdition();
+		colorSliderEdition.setPreferredSize(new Dimension(0, 44));
+		colorSliderEdition.setMinimumSize(new Dimension(0, 44));
+
+		colorSliderEdition.addItem(new ItemColorSlider(0, Color.black), false);
+		colorSliderEdition.addItem(new ItemColorSlider(25, Color.red), false);
+		colorSliderEdition.addItem(new ItemColorSlider(50, Color.yellow), false);
+		colorSliderEdition.addItem(new ItemColorSlider(75, Color.blue), true);
+		colorSliderEdition.addItem(new ItemColorSlider(100, new Color(255, 255, 255, 0)), true);
+
+		JPanel jPanel = new JPanel();
+		jFrame.setContentPane(jPanel);
+
+		jPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+		jPanel.setLayout(new java.awt.GridBagLayout());
+
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.weightx = 1;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.insets = new java.awt.Insets(5, 5, 2, 5);
+		jPanel.add(colorSliderEdition, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.insets = new java.awt.Insets(2, 5, 2, 5);
+		jPanel.add(jCBInterpolated, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.insets = new java.awt.Insets(2, 5, 5, 5);
+		jPanel.add(jCBEnabled, gridBagConstraints);
+
+		jFrame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestColorSliderEdition();
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == jCBInterpolated) {
+			colorSliderEdition.setInterpolated(jCBInterpolated.isSelected());
+			return;
+		}
+		if (e.getSource() == jCBEnabled) {
+			colorSliderEdition.setEnabled(jCBEnabled.isSelected());
+			return;
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorslideredition/TestColorSliderEdition.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonbar/TestButtonBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonbar/TestButtonBar.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonbar/TestButtonBar.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.buttonbar;
+
+import org.gvsig.gui.beans.TestUI;
+
+public class TestButtonBar {
+	private TestUI frame = new TestUI("TestButtonBar");
+
+	public TestButtonBar() {
+		ButtonBarContainer cont = new ButtonBarContainer();
+		frame.setSize(410, 45);
+		cont.setButtonAlignment("right");
+		cont.addButton("down.png", "hola",0);
+		cont.addButton(null, "que",1);
+		cont.addButton(null, "tal",2);
+		cont.addButton(null, "estas?",3);
+		cont.addButton(null, "adios", 4);
+		cont.getButton(2).setEnabled(false);
+		cont.disableAllControls();
+		cont.restoreControlsValue();
+		cont.setComponentBorder(true);
+		cont.delButton(3);
+		frame.getContentPane().add(cont);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args){
+		new TestButtonBar();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonbar/TestButtonBar.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/openfile/TestOpenFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/openfile/TestOpenFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/openfile/TestOpenFile.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.openfile;
+
+import javax.swing.JFrame;
+
+public class TestOpenFile {
+	private int               w     = 510;
+	private int               h     = 90;
+	private JFrame            frame = new JFrame();
+	private OpenFileContainer open  = null;
+
+	public TestOpenFile() {
+		open = new OpenFileContainer();
+		open.setComponentSize(w, h);
+		frame.getContentPane().add(open);
+		frame.setSize(w, h);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestOpenFile();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/openfile/TestOpenFile.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/TestFilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/TestFilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/TestFilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.Messages;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests FilterQueryJPanel
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestFilterQueryJPanel {
+	public static void main(String[] args) {
+		JFrame frame = new JFrame();
+		
+		FilterQueryJPanel fQ = new FilterQueryJPanel();
+	    frame.setSize(fQ.getPreferredSize());
+		frame.getContentPane().add(fQ);
+		frame.setTitle(Messages.getText("test_TableFilterQueryJPanel_title"));
+		frame.pack();
+		frame.setVisible(true);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/TestFilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test2FilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test2FilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test2FilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.Messages;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests FilterQueryJPanel
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class Test2FilterQueryJPanel {
+	public static void main(String[] args) {
+		FilterQueryJPanel filterQueryJPanel = new FilterQueryJPanel();
+		filterQueryJPanel.resizeHeight(427);
+		
+		JFrame frame = new JFrame();
+
+		FilterQueryJPanel fQ = new FilterQueryJPanel();
+	    frame.setSize(fQ.getPreferredSize());
+		frame.getContentPane().add(fQ);
+		frame.setTitle(Messages.getText("test_TableFilterQueryJPanel_title"));
+		frame.pack();
+		frame.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test2FilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test3FilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test3FilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test3FilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.Messages;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests FilterQueryJPanel
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class Test3FilterQueryJPanel {
+	public static void main(String[] args) {
+		FilterQueryJPanel filterQueryJPanel = new FilterQueryJPanel();
+		filterQueryJPanel.resize(460, 450);
+		
+		JFrame frame = new JFrame();
+
+		FilterQueryJPanel fQ = new FilterQueryJPanel();
+	    frame.setSize(fQ.getPreferredSize());
+		frame.getContentPane().add(fQ);
+		frame.setTitle(Messages.getText("test_TableFilterQueryJPanel_title"));
+		frame.pack();
+		frame.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/Test3FilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TestTableFilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TestTableFilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TestTableFilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.tableFilterQueryPanel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.Messages;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests TableFilterQueryJPanel
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestTableFilterQueryJPanel {
+	public static void main(String[] args) {
+		JFrame frame = new JFrame();
+		TableFilterQueryJPanel tFQ = new TableFilterQueryJPanel();
+	    frame.setSize(tFQ.getPreferredSize());
+		frame.getContentPane().add(tFQ);
+
+		frame.setTitle(Messages.getText("test_TableFilterQueryJPanel_title"));
+		frame.pack();
+		frame.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TestTableFilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/Test2TableFilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/Test2TableFilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/Test2TableFilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.tableFilterQueryPanel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.Messages;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests TableFilterQueryJPanel
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class Test2TableFilterQueryJPanel {
+	public static void main(String[] args) {
+		JFrame frame = new JFrame();
+		TableFilterQueryJPanel tableFilterQueryJPanel = new TableFilterQueryJPanel();
+		tableFilterQueryJPanel.resize(460, 300);
+
+	    frame.setSize(tableFilterQueryJPanel.getPreferredSize());	    
+		frame.getContentPane().add(tableFilterQueryJPanel);		
+
+		frame.setTitle(Messages.getText("test_TableFilterQueryJPanel_title"));
+		frame.pack();
+		frame.setVisible(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/Test2TableFilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboscale/TestComboScale.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboscale/TestComboScale.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboscale/TestComboScale.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboscale;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.controls.comboscale.ComboScale;
+
+public class TestComboScale {
+	private ComboScale cs;
+
+	public TestComboScale() {
+		TestUI frame = new TestUI("TestComboScale");
+		cs = new ComboScale();
+		long[] scale = new long[5];
+		scale[0] = 100;
+		scale[1] = 500;
+		scale[2] = 1000;
+		scale[3] = 5000;
+		scale[4] = 10000;
+		cs.setItems(scale);
+		cs.setScale(400);
+		JButton btn = new JButton("Reset");
+		btn.setPreferredSize(new Dimension(100, 50));
+		btn.addActionListener(new ActionListener() {
+			public void actionPerformed(java.awt.event.ActionEvent e) {
+				cs.setScale(500);
+			}
+		});
+
+		JPanel panel = new JPanel();
+		frame.setContentPane(panel);
+		panel.setLayout(new BorderLayout());
+		panel.add(cs, BorderLayout.CENTER);
+		panel.add(btn, BorderLayout.EAST);
+
+		frame.setSize(280, 80);
+		frame.setVisible(true);
+
+		cs.addActionListener(new java.awt.event.ActionListener() {
+			public void actionPerformed(java.awt.event.ActionEvent e) {
+				System.out.println("ActionListener: " + e.getActionCommand());
+			}
+		});
+	}
+
+	public static void main(String[] args) {
+		new TestComboScale();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboscale/TestComboScale.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorbutton/TestColorButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorbutton/TestColorButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorbutton/TestColorButton.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.colorbutton;
+
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.TestUI;
+/**
+* Test del ColorButton
+*
+* @version 08/05/2007
+* @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+*/
+public class TestColorButton implements ColorButtonListener {
+	private TestUI       jFrame       = null;
+	private ColorButton colorButton = null;
+
+	public TestColorButton() {
+		initialize();
+	}
+
+	private void initialize() {
+		colorButton = new ColorButton();
+		colorButton.setEnabled(true);
+		colorButton.addValueChangedListener(this);
+		jFrame = new TestUI("TestColorButton");
+		JPanel jpanel = new JPanel();
+		jpanel.add(colorButton);
+		jFrame.setSize(new Dimension(598, 167));
+		jFrame.setContentPane(jpanel);
+		jFrame.pack();
+		jFrame.setVisible(true);
+	}
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		new TestColorButton();
+	}
+
+	public void actionValueChanged(ColorButtonEvent e) {
+		System.out.println("actionValueChanged");
+	}
+
+	public void actionValueDragged(ColorButtonEvent e) {
+		System.out.println("actionValueDragged");
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/colorbutton/TestColorButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.awt.Toolkit;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+
+public class TestPropertiesPanel implements ButtonsPanelListener, PropertiesComponentListener {
+	TestUI frame = null;
+	PropertiesPanel pd = null;
+
+	public TestPropertiesPanel() {
+		initialize();
+	}
+
+	public void initialize() {
+		Toolkit.getDefaultToolkit().setDynamicLayout(true);
+		frame = new TestUI("TestPropertiesPanel");
+		pd = new PropertiesPanel();
+
+		pd.addButtonPressedListener(this);
+		pd.addValue("Protocolo", "protocolo", "", null);
+		pd.addValue("Integer", "var1", new Integer(50), null);
+		{
+			Object[] types = {new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(-255), new Integer(255)};
+			pd.addValue("Slider", "slider1", new Integer(25), types); // Slider
+			Object[] types2 = {new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(0), new Integer(50)};
+			pd.addValue("Slider", "slider2", new Integer(25), types2); // Slider
+			Object[] types3 = {new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(0), new Integer(100)};
+			pd.addValue("Slider", "slider3", new Double(25), types3); // Slider
+		}
+		pd.addValue("Activo", "check1", new Boolean(true), null); // Slider
+		{
+			ArrayList lista = new ArrayList();
+			lista.add("Primer elemento");
+			lista.add("Segundo elemento");
+			lista.add("Tercer elemento");
+			PropertyStruct property = new PropertyStruct();
+			property.setTextLabel("Combo");
+			property.setKey("combo1");
+			property.setOldValue(new Integer(1));
+			Object[] types = {new Integer(PropertiesComponent.TYPE_COMBO), lista};
+			property.setExtras(types);
+			pd.addPropertyStruct(property);
+		}
+		frame.getContentPane().add(pd);
+		frame.pack();
+		pd.addStateChangedListener(this);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestPropertiesPanel();
+	}
+
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		if (e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
+			ArrayList values = pd.getValues();
+			System.out.println("-----");
+			for (int i=0; i<values.size(); i++) {
+				System.out.println(((PropertyStruct)values.get(i)).getKey()
+						+ ": '" + ((PropertyStruct)values.get(i)).getOldValue().toString()
+						+ "', '" + ((PropertyStruct)values.get(i)).getNewValue().toString() + "'");
+				System.out.println(pd.getComponentUI(((PropertyStruct)values.get(i)).getKey()).toString());
+			}
+		}
+	}
+
+	public void actionChangeProperties(EventObject e) {
+		System.out.println("Ha cambiado");
+		System.out.println(pd.getProperties().get("slider3"));
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/ui/TestSlider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/ui/TestSlider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/ui/TestSlider.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.propertiespanel.ui;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.gui.beans.propertiespanel.JPanelProperty;
+/**
+ * Panel que ira dentro del panel de propiedades
+ *
+ * @version 06/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestSlider extends JPanelProperty implements ChangeListener, ActionListener {
+	private static final long serialVersionUID = -4936433530376831937L;
+
+	public TestSlider() {
+		initialize();
+	}
+
+	private void initialize() {
+		setLayout(new BorderLayout());
+		JColorChooser color = new JColorChooser();
+		add(color, BorderLayout.CENTER);
+		JButton boton = new JButton("OK");
+		add(boton, BorderLayout.SOUTH);
+		boton.addActionListener(this);
+		color.getSelectionModel().addChangeListener(this);
+	}
+
+	public void stateChanged(ChangeEvent e) {
+		this.callStateChanged();
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		this.callStateChanged();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/ui/TestSlider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel2.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+
+public class TestPropertiesPanel2 implements ButtonsPanelListener, PropertiesComponentListener {
+	TestUI frame = null;
+	PropertiesPanel pd = null;
+
+	public TestPropertiesPanel2() {
+		initialize();
+	}
+
+	public void initialize() {
+		frame = new TestUI("TestPropertiesPanel2");
+		pd = new PropertiesPanel();
+
+		pd.addButtonPressedListener(this);
+		pd.addValue("Protocolo", "protocolo", "", null);
+		pd.addValue("Integer", "var1", new Integer(50), null);
+		{
+			Object[] types = {new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(-255), new Integer(255)};
+			pd.addValue("Slider", "slider1", new Integer(25), types); // Slider
+			Object[] types2 = {new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(0), new Integer(50)};
+			pd.addValue("Slider", "slider2", new Integer(25), types2); // Slider
+			Object[] types3 = {new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(0), new Integer(100)};
+			pd.addValue("Slider", "slider3", new Integer(25), types3); // Slider
+		}
+		pd.addValue("Activo", "check1", new Boolean(true), null); // Slider
+		{
+			ArrayList lista = new ArrayList();
+			lista.add("Primer elemento");
+			lista.add("Segundo elemento");
+			lista.add("Tercer elemento");
+			PropertyStruct property = new PropertyStruct();
+			property.setTextLabel("Combo");
+			property.setKey("combo1");
+			property.setOldValue(new Integer(1));
+			Object[] types = {new Integer(PropertiesComponent.TYPE_COMBO), lista};
+			property.setExtras(types);
+			pd.addPropertyStruct(property);
+
+			pd = new PropertiesPanel(pd.getProperties());
+		}
+		frame.getContentPane().add(pd);
+		frame.pack();
+		pd.addStateChangedListener(this);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestPropertiesPanel2();
+	}
+
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		if (e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
+			ArrayList values = pd.getValues();
+			System.out.println("-----");
+			for (int i=0; i<values.size(); i++) {
+				System.out.println(((PropertyStruct)values.get(i)).getKey()
+						+ ": '" + ((PropertyStruct)values.get(i)).getOldValue().toString()
+						+ "', '" + ((PropertyStruct)values.get(i)).getNewValue().toString() + "'");
+			}
+		}
+	}
+
+	public void actionChangeProperties(EventObject e) {
+		System.out.println("Ha cambiado");
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel_JPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel_JPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel_JPanel.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+import org.gvsig.gui.beans.propertiespanel.ui.TestSlider;
+/**
+ * Test para comprobar que se puede integrar un JPanelProperty dentro del
+ * PropertiesComponent
+ *
+ * @version 06/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestPropertiesPanel_JPanel implements ButtonsPanelListener, PropertiesComponentListener {
+	private TestUI          jFrame = null;
+	private PropertiesPanel pd     = null;
+
+	public TestPropertiesPanel_JPanel() {
+		initialize();
+	}
+
+	public void initialize() {
+		jFrame = new TestUI("TestPropertiesPanel_JPanel");
+		pd = new PropertiesPanel();
+
+		pd.addButtonPressedListener(this);
+		TestSlider ts = new TestSlider();
+		pd.addValue("Protocolo", "protocolo", "", null);
+		pd.addValue("Integer", "var1", new Integer(50), null);
+		pd.addValue("Mi panel", "mipanel", ts, null);
+
+		jFrame.getContentPane().add(pd);
+		pd.addStateChangedListener(this);
+		jFrame.pack();
+		jFrame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestPropertiesPanel_JPanel();
+	}
+
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		if (e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
+			ArrayList values = pd.getValues();
+			System.out.println("-----");
+			for (int i = 0; i < values.size(); i++) {
+				System.out.println(((PropertyStruct)values.get(i)).getKey()
+					+ ": '" + ((PropertyStruct)values.get(i)).getOldValue().toString()
+					+ "', '" + ((PropertyStruct)values.get(i)).getNewValue() + "'");
+			}
+		}
+	}
+
+	public void actionChangeProperties(EventObject e) {
+		System.out.println("Ha cambiado");
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/propertiespanel/TestPropertiesPanel_JPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonspanel/TestButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonspanel/TestButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonspanel/TestButtonsPanel.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.buttonspanel;
+
+import java.awt.FlowLayout;
+
+import org.gvsig.gui.beans.TestUI;
+/**
+ * <code>TestButtonsPanel</code> es un test para comprobar el funcionamiento de
+ * la clase <code>ButtonsPanel</code>.
+ *
+ * @version 15/03/2007
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestButtonsPanel implements ButtonsPanelListener {
+	private TestUI frame = new TestUI("TestButtonsPanel");
+
+	public TestButtonsPanel(){
+		frame.getContentPane().setLayout(new java.awt.GridLayout(0, 1));
+
+		frame.setSize(320, 320);
+		ButtonsPanel bp = new ButtonsPanel(ButtonsPanel.BUTTONS_ACCEPT);
+		bp.addButtonPressedListener(this);
+		frame.getContentPane().add(bp);
+		bp = new ButtonsPanel(ButtonsPanel.BUTTONS_ACCEPTCANCEL);
+		bp.addButtonPressedListener(this);
+		bp.setLayout(new java.awt.FlowLayout(FlowLayout.CENTER));
+		frame.getContentPane().add(bp);
+		bp = new ButtonsPanel(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
+		bp.setLayout(new java.awt.FlowLayout(FlowLayout.LEFT));
+		bp.addButtonPressedListener(this);
+		frame.getContentPane().add(bp);
+		bp = new ButtonsPanel(ButtonsPanel.BUTTONS_YESNO);
+		bp.addButtonPressedListener(this);
+
+		bp.getButton(ButtonsPanel.BUTTONS_YESNO).setEnabled(false);
+
+		frame.getContentPane().add(bp);
+		bp = new ButtonsPanel(ButtonsPanel.BUTTONS_CLOSE);
+		bp.addButtonPressedListener(this);
+		frame.getContentPane().add(bp);
+		bp = new ButtonsPanel(ButtonsPanel.BUTTONS_EXIT);
+		bp.addButtonPressedListener(this);
+		bp.addButton("1", 55);
+		bp.addButton("bp.addButtonPressedListener(this);", 56);
+
+//		bp.getButton(ButtonsPanel.BUTTON_ACCEPT).isEnabled();
+
+		frame.getContentPane().add(bp);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args){
+		new TestButtonsPanel();
+	}
+
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		System.out.println(e.getButton());
+		if (ButtonsPanel.BUTTON_EXIT == e.getButton()) {
+			frame.dispose();
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/buttonspanel/TestButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.textincreaser;
+
+import javax.swing.JFrame;
+
+public class TestTextIncreaser {
+	private int                    w     = 200;
+	private int                    h     = 200;
+	private JFrame                 frame = new JFrame();
+	private TextIncreaserContainer tic1;
+
+	public TestTextIncreaser() {
+		tic1 = new TextIncreaserContainer(70, 0, 10, 0, true);
+
+		frame.getContentPane().add(tic1);
+		frame.setSize(w, h);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestTextIncreaser();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleAgent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleAgent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleAgent.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup.programmertests;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import org.gvsig.gui.beans.comboboxconfigurablelookup.ILookUp;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.StringComparator;
+
+/**
+ * <p>Sample of personalized look up algorithm for the model of a <code>JComboBoxConfigurableLookUp</code> object.</p>
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ * @version 08/02/2008
+ */
+public class SampleAgent implements ILookUp {
+	/**
+	 * <p>Creates a new instance of the class <code>StartsWithLookUpAgent</code>.</p>
+	 */
+	public SampleAgent() {
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.comboboxconfigurablelookup.ILookUp#doLookUpConsideringCaseSensitive(java.lang.String, java.util.Vector, org.gvsig.gui.beans.comboboxconfigurablelookup.StringComparator)
+	 */
+	public List<Object> doLookUpConsideringCaseSensitive(String text, Vector<Object> sortOrderedItems, StringComparator comp) {
+		if (sortOrderedItems == null)
+			return null;
+
+		List<Object> list = new ArrayList<Object>();
+		
+		for (int i = 0; i < (sortOrderedItems.size()); i++) {
+			if (i % 2 == 0)
+				list.add(sortOrderedItems.get(i));
+		}
+
+		return list;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.comboboxconfigurablelookup.ILookUp#doLookUpIgnoringCaseSensitive(java.lang.String, java.util.Vector, org.gvsig.gui.beans.comboboxconfigurablelookup.StringComparator)
+	 */
+	public List<Object> doLookUpIgnoringCaseSensitive(String text, Vector<Object> sortOrderedItems, StringComparator comp) {
+		if (sortOrderedItems == null)
+			return null;
+
+		List<Object> list = new ArrayList<Object>();
+		
+		for (int i = 0; i < (sortOrderedItems.size()); i++) {
+			if (i % 2 == 0)
+				list.add(sortOrderedItems.get(i));
+		}
+
+		return list;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleAgent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleComboBoxEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleComboBoxEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleComboBoxEditor.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup.programmertests;
+
+import java.awt.Component;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.lang.reflect.Method;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.JTextField;
+import javax.swing.border.Border;
+import javax.swing.plaf.basic.BasicComboBoxEditor;
+
+import org.gvsig.gui.beans.editabletextcomponent.JEditableTextField;
+
+/**
+ * <p>The default editor for editable combo boxes. The editor is implemented as a JTextField.</p>
+ *
+ * @version 12/02/08
+ * @author Arnaud Weber
+ * @author Mark Davidson
+ * @author Pablo Piqueras Bartolom�
+ */
+public class SampleComboBoxEditor implements ComboBoxEditor, FocusListener {
+    protected JTextField editor;
+    private Object oldValue;
+
+    public SampleComboBoxEditor() {
+        editor = new BorderlessTextField("",9);
+        editor.setBorder(null);
+    }
+
+    public Component getEditorComponent() {
+        return editor;
+    }
+
+    /** 
+     * Sets the item that should be edited. 
+     *
+     * @param anObject the displayed value of the editor
+     */
+    public void setItem(Object anObject) {
+        if ( anObject != null )  {
+            editor.setText(anObject.toString());
+            
+            oldValue = anObject;
+        } else {
+            editor.setText("");
+        }
+    }
+
+    public Object getItem() {
+        Object newValue = editor.getText();
+        
+        if (oldValue != null && !(oldValue instanceof String))  {
+            // The original value is not a string. Should return the value in it's
+            // original type.
+            if (newValue.equals(oldValue.toString()))  {
+                return oldValue;
+            } else {
+                // Must take the value from the editor and get the value and cast it to the new type.
+                Class cls = oldValue.getClass();
+                try {
+                    Method method = cls.getMethod("valueOf", new Class[]{String.class});
+                    newValue = method.invoke(oldValue, new Object[] { editor.getText()});
+                } catch (Exception ex) {
+                    // Fail silently and return the newValue (a String object)
+                }
+            }
+        }
+        return newValue;
+    }
+
+    public void selectAll() {
+        editor.selectAll();
+        editor.requestFocus();
+    }
+
+    // This used to do something but now it doesn't.  It couldn't be
+    // removed because it would be an API change to do so.
+    public void focusGained(FocusEvent e) {}
+    
+    // This used to do something but now it doesn't.  It couldn't be
+    // removed because it would be an API change to do so.
+    public void focusLost(FocusEvent e) {}
+
+    public void addActionListener(ActionListener l) {
+        editor.addActionListener(l);
+    }
+
+    public void removeActionListener(ActionListener l) {
+        editor.removeActionListener(l);
+    }
+
+    /** 
+     * Inner text field editable as a component of a ComboBox editor.
+     * 
+     * @see JEditableTextField
+     * 
+     * @version 12/02/08
+     * @author Arnaud Weber
+     * @author Mark Davidson
+     * @author Pablo Piqueras Bartolom�
+     */
+    private class BorderlessTextField extends JEditableTextField {
+		private static final long serialVersionUID = -3333236529430569318L;
+
+		public BorderlessTextField(String value,int n) {
+            super(value,n);
+        }
+
+        // workaround for 4530952
+        public void setText(String s) {
+            if (getText().equals(s)) {
+                return;
+            }
+            super.setText(s);
+        }
+
+        public void setBorder(Border b) {}
+    }
+    
+    /**
+     * A subclass of BasicComboBoxEditor that implements UIResource.
+     * BasicComboBoxEditor doesn't implement UIResource
+     * directly so that applications can safely override the
+     * cellRenderer property with BasicListCellRenderer subclasses.
+     * <p>
+     * <strong>Warning:</strong>
+     * Serialized objects of this class will not be compatible with
+     * future Swing releases. The current serialization support is
+     * appropriate for short term storage or RMI between applications running
+     * the same version of Swing.  As of 1.4, support for long term storage
+     * of all JavaBeans<sup><font size="-2">TM</font></sup>
+     * has been added to the <code>java.beans</code> package.
+     * Please see {@link java.beans.XMLEncoder}.
+     */
+    public static class UIResource extends BasicComboBoxEditor
+    implements javax.swing.plaf.UIResource {
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleComboBoxEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleBasicComboBoxRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleBasicComboBoxRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleBasicComboBoxRenderer.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup.programmertests;
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.JList;
+import javax.swing.plaf.basic.BasicComboBoxRenderer;
+
+/**
+ * <p>Sample of personalized combo box cell renderer.</p>
+ * 
+ * @version 08/02/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class SampleBasicComboBoxRenderer extends BasicComboBoxRenderer {
+	private static final long serialVersionUID = -9044759678425798655L;
+
+	/**
+	 * <p>Creates a new instance of the <code>SampleBasicComboBoxRenderer</code> class.</p>
+	 */
+	public SampleBasicComboBoxRenderer() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.plaf.basic.BasicComboBoxRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
+	 */
+	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+		Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+		
+		if (isSelected)
+			component.setBackground(Color.GRAY);
+		else
+			component.setBackground(new Color(((17 * index) % 256), ((31 * index) % 256), ((7 * index) % 256)));
+		
+		return component;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/SampleBasicComboBoxRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/TestJComboBoxConfigurableLookUp.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/TestJComboBoxConfigurableLookUp.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/TestJComboBoxConfigurableLookUp.java	(revision 42196)
@@ -0,0 +1,462 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup.programmertests;
+
+import java.awt.Dimension;
+
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.DefaultComboBoxConfigurableLookUpModel;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.JComboBoxConfigurableLookUp;
+
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * <p>Tests the class {@link JComboBoxConfigurableLookUp JComboBoxConfigurableLookUp} .</p>
+ * 
+ * <p>Notes:
+ *  <ul>
+ *   <li>MORE TESTS COULD BE ADDED!!!</li>
+ *   <li>DON'T REMOVE TEST COMMENTED!!!</li>
+ *  </ul>
+ * </p>
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ * @version 07/02/2008
+ */
+public class TestJComboBoxConfigurableLookUp extends JFrame {
+	private static final long serialVersionUID = -422198204525608333L;
+
+	/**
+	 * Test method for the <code>TestJComboBoxConfigurableLookUp</code>
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		int width = 300;
+		int height = 60;
+		
+		try
+		{
+			// Objects creation
+			JFrame jF = new JFrame();
+	
+			// Create a TestJComboBoxConfigurableLookUp, sets the behavior configuration and add Items
+			
+			// ---- TESTS ----
+			// Test the default behavior
+			JComboBoxConfigurableLookUp jCBSD = new JComboBoxConfigurableLookUp();
+
+			// -- TESTS FLAGS FOR CONTROL --
+			// Test the change of the flag 'onlyOneColor'
+			// jCBSD.setOnlyOneColorOnText(true);
+			// jCBSD.setOnlyOneColorOnText(false);
+			
+			// Test the change of the flag 'beepEnabled'
+			// jCBSD.setBeepEnabled(false);
+			// jCBSD.setBeepEnabled(true);
+
+			// Test the change of the flag 'hidePopupIfThereAreNoItems'
+			// jCBSD.setHidePopupIfThereAreNoItems(false);
+			// jCBSD.setHidePopupIfThereAreNoItems(true);
+			
+			// Test the change of the flag 'toForceSelectAnItem'
+			// jCBSD.setToForceSelectAnItem(false);
+			// jCBSD.setToForceSelectAnItem(true);
+			
+
+			// --- TESTS ADDING A MODEL ---
+			// -- TESTS FLAGS FOR THE MODEL --
+			// DefaultComboBoxConfigurableLookUpModel model = new DefaultComboBoxConfigurableLookUpModel();
+			DefaultComboBoxConfigurableLookUpModel model = new DefaultComboBoxConfigurableLookUpModel(new Object[] {"Item1", "Item2", "Item3", "Item4", "Item5"});
+			// DefaultComboBoxConfigurableLookUpModel model = (DefaultComboBoxConfigurableLookUpModel) jCBSD.getModel();
+				
+			// Test the change of the flag 'itemsShownInListBox'
+			// model.setLanguageRules("en_US");
+			// model.setLanguageRules("fr_FR");
+			// model.setLanguageRules("es_ES");
+			// model.setLanguageRules(DefaultComboBoxConfigurableLookUpModel.DEFAULT_LANGUAGE_RULES_CONFIGURATION);
+				
+			// Test the change of the flag 'caseSensitive'
+			// model.setCaseSensitive(false);
+			// model.setCaseSensitive(DefaultComboBoxConfigurableLookUpModel.CASE_INSENSITIVE);
+			// model.setCaseSensitive(true);
+			// model.setCaseSensitive(DefaultComboBoxConfigurableLookUpModel.CASE_SENSITIVE);
+			 
+			// Test the change of the flag 'itemsOrder'
+			// model.setItemsOrder(DefaultComboBoxConfigurableLookUpModel.MAINTAIN_POSITION);
+			// model.setItemsOrder(DefaultComboBoxConfigurableLookUpModel.ALPHABETICAL_ORDERED);
+			// model.setItemsOrder(DefaultComboBoxConfigurableLookUpModel.MAINTAIN_AGENT_POSITIONS);
+			
+			// Test the change of the flag 'itemsShownInListBox'
+			// model.setShowAllItemsInListBox(DefaultComboBoxConfigurableLookUpModel.SHOW_ALL_ITEMS);
+			// model.setShowAllItemsInListBox(true);
+			// model.setShowAllItemsInListBox(DefaultComboBoxConfigurableLookUpModel.SHOW_ONLY_MATCHES);
+			// model.setShowAllItemsInListBox(false);
+
+			// Test the change of the flag 'completeArrowKeySelection'
+			// jCBSD.setCompleteArrowKeySelection(true);
+			// jCBSD.setCompleteArrowKeySelection(false);
+
+			// Test the change of the flag 'displayAllItemsWithArrowButton'
+			// jCBSD.setDisplayAllItemsWithArrowButton(false);
+			 jCBSD.setDisplayAllItemsWithArrowButton(true);
+
+			// Adds the new model
+			jCBSD.setModel(model);
+
+			// --- ADD ITEMS TO THE COMPONENT AND OTHER TESTS ---
+			// Add some items to test if has too much delay with an average number of items
+			jCBSD.addItem("extAddEventTheme");
+			jCBSD.addItem("�and�");
+			jCBSD.addItem("_fwAndami");
+			jCBSD.addItem("extJDBC");
+
+			jCBSD.addItem("extCAD");
+			jCBSD.addItem("libuiDownCase");
+			jCBSD.addItem("appgvSig");
+			// jCBSD.setSelectedItem("appgvSig");
+			// jCBSD.removeAllItems();
+			jCBSD.addItem("RemoteServices");
+			jCBSD.addItem("�and�");	
+			jCBSD.addItem("�");
+			// jCBSD.setSelectedItem("appgvSig");
+			// jCBSD.setSelectedItem(jCBSD.getItemAt(3)); //Test setSelectedItem
+			jCBSD.addItem("extNomenclatorIGN");
+
+            // jCBSD.setSelectedItem(jCBSD.getItemAt(1)); //Test setSelectedItem
+            // jCBSD.setSelectedIndex(1); //Test setSelectedIndex
+			jCBSD.addItem("extWMS");
+			jCBSD.addItem("�AND�");
+			jCBSD.addItem("window");
+			jCBSD.addItem("�");
+			jCBSD.addItem("LIBUI");
+            jCBSD.setSelectedItem("window");
+			jCBSD.addItem("libCorePlugin");
+			jCBSD.addItem("libCq CMS for java");
+			jCBSD.addItem("libDriverManager");
+
+            // jCBSD.setSelectedItem("libDriverManager");
+			////				jCBSD.addItem("libFMap");
+			////				jCBSD.addItem("libG_fwAndamiDBMS");
+			////				jCBSD.addItem("libIverUtiles");
+			////				jCBSD.addItem("libNomenclatorIGN");
+			////				jCBSD.addItem("libNomenclatorIGN_GUI");
+			////				jCBSD.addItem("libRemoteServices");
+			//////				jCBSD.addItem("extNomenclatorIGN"); // Duplication test
+			////				jCBSD.addItem("libUI");
+			////				jCBSD.addItem("a");
+			////				jCBSD.addItem("aa");
+			////				jCBSD.addItem("aaa");
+			////				jCBSD.addItem("aaaa");
+			////				jCBSD.addItem("aaaaa");
+			////				jCBSD.addItem("b");
+			////				jCBSD.addItem("bbb");
+			////				jCBSD.addItem("bb");
+			////				jCBSD.addItem("c");
+			////				jCBSD.addItem(".");
+			////				jCBSD.addItem("ccc");
+			////				jCBSD.addItem("cc");
+			////				jCBSD.addItem("cccc");
+			////				jCBSD.addItem("ddd");
+			////				jCBSD.addItem("d");
+			////				jCBSD.addItem("dd");
+			////				jCBSD.addItem("dddd");
+			////				jCBSD.addItem("e");
+			////				jCBSD.addItem("eee");
+			////				jCBSD.addItem("ee");
+			////				jCBSD.addItem("eeee");
+			//				jCBSD.addItem("ff");
+			//				jCBSD.addItem("f");
+			////				jCBSD.addItem("LIBZZMAYUSCULA1");
+			////				jCBSD.addItem("ff"); // Duplication test
+			////				jCBSD.addItem("asldf");
+			////				jCBSD.addItem("wej");
+			////				jCBSD.addItem("asdf");
+			////				jCBSD.addItem("LIBMAYUSCULA2");
+			////				jCBSD.addItem("qera");
+			////				jCBSD.addItem("zxvcas");
+			////				jCBSD.addItem("wea");
+			////				jCBSD.addItem("asr");
+			////				jCBSD.addItem("asra");
+			////				jCBSD.addItem("LIBMAYUSCULA1");
+			////				jCBSD.addItem("rar");
+			////				jCBSD.addItem("afda");
+			////				jCBSD.addItem("ljvkgk");
+			////				jCBSD.addItem("zcv");
+			////				jCBSD.addItem("gfhdt");
+			////				jCBSD.addItem("dfhgd");
+			////				jCBSD.addItem("dfh");
+			////				jCBSD.addItem("dfhs");
+			////				jCBSD.addItem("sfszv");
+			////				jCBSD.addItem("qer");
+			////				jCBSD.addItem("adfazva");
+			////				jCBSD.addItem("xnd");
+			////				jCBSD.addItem("vdkjgd");
+			////				jCBSD.addItem("ddhd");
+			////				jCBSD.addItem("dxgx");
+			
+			////				jCBSD.addItem("cnsf");
+			////				jCBSD.addItem("ssfgs");
+			////				jCBSD.addItem("sgfsbx");
+			////				jCBSD.addItem("sfxb");
+			////				jCBSD.addItem("chdgk");
+			////				jCBSD.addItem("jgu");
+			////				jCBSD.addItem("gkgj");
+			////				jCBSD.addItem("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeee");
+			////				jCBSD.addItem("ljko�j.n");
+			////				jCBSD.addItem("hfjf");
+			////				jCBSD.addItem("xbxb");
+			////				jCBSD.addItem(".,lhhi");
+			////				jCBSD.addItem("hklx_fwAndami");
+			////				jCBSD.addItem("cvn");
+			////				jCBSD.addItem("dgh");
+			////				jCBSD.addItem("cncv");
+			////				jCBSD.addItem("sg");
+			////				jCBSD.addItem("b,mjk");
+			////				jCBSD.addItem("xv");
+			////				jCBSD.addItem("sgghu");
+			////				jCBSD.addItem("saxc");
+			////				jCBSD.addItem("srts");
+			////				jCBSD.addItem("sduyg");
+			////				jCBSD.addItem("sxfsrs");
+			////				jCBSD.addItem("rsdtf");
+			////				jCBSD.addItem("po`llh");
+			////				jCBSD.addItem("fghtf54j");
+			////				jCBSD.addItem("s25ewsd");
+			////				jCBSD.addItem("uo8khkj");
+			////				jCBSD.addItem("sfg45");
+			////				jCBSD.addItem("3gd");
+			////				jCBSD.addItem("5dhd");
+			////				jCBSD.addItem("sg4dh6");
+			////				jCBSD.addItem("dfh5");
+			////				jCBSD.addItem("s4hfj74");
+			////				jCBSD.addItem("sdg534");
+			////				jCBSD.addItem("2452etdfg");
+			////				jCBSD.addItem("2ui068");
+			////				jCBSD.addItem("3dsd sgr");
+			////				jCBSD.addItem("sr sgsr");
+			////				jCBSD.addItem("sssssssss");
+			////				jCBSD.addItem("aaaaass");
+			////				jCBSD.addItem("ss");
+			////				jCBSD.addItem("sry");
+			////				jCBSD.addItem("h�hj");
+			////				jCBSD.addItem("gkgb");
+			////				jCBSD.addItem("gkgu");
+			////				jCBSD.addItem("gjugvfc");
+			////				jCBSD.addItem("dghdd");
+			////				jCBSD.addItem("dhdt");
+			////				jCBSD.addItem("dhgd");
+			////				jCBSD.addItem("ddtughd");
+			////				jCBSD.addItem("ffuklj�d");
+			////				jCBSD.addItem("j�olk.j");
+			////				jCBSD.addItem("las alupoai a�ieurpay");
+			////				jCBSD.addItem("tytresd");
+			////				jCBSD.addItem("fgkg");
+			////				jCBSD.addItem("lhh");
+			////				jCBSD.addItem("hkhlhip");
+			////				jCBSD.addItem("k�popi0�?=(J");
+			////				jCBSD.addItem("af�?=)(/?/");
+			////				jCBSD.addItem("-a,malj'=)/");
+			////				jCBSD.addItem("2gw");
+			////				jCBSD.addItem("5teu");
+			////				jCBSD.addItem("4576jfff");
+			////				jCBSD.addItem("urtyu");
+			////				jCBSD.addItem("fi7");
+			////				jCBSD.addItem("git7t4h");
+			////				jCBSD.addItem("hr6frr");
+			////				jCBSD.addItem("ehe5et");
+			////				jCBSD.addItem("eue5klhj");
+			////				jCBSD.addItem("yoiyoy");
+			////				jCBSD.addItem("yoyi");
+			////				jCBSD.addItem("sgcsc");
+			////				jCBSD.addItem("sgmff74");
+			////				jCBSD.addItem("dd43d d6dhlhju");
+			////				jCBSD.addItem("gkjngr");
+			////				jCBSD.addItem("dbddht");
+			////				jCBSD.addItem("sbd");
+			////				jCBSD.addItem("dcbd5opihjj");
+			////				jCBSD.addItem("pujtth");
+			////				jCBSD.addItem("ZZZZZ");
+			////				jCBSD.addItem("ytht");
+			////				jCBSD.addItem("tjgt");
+			////				jCBSD.addItem("rrf");
+			////				jCBSD.addItem("BLIUE� ");
+			////				jCBSD.addItem("�AND�");
+			////				jCBSD.addItem("axaaa4iktiu");
+			////				jCBSD.addItem("tttyir");
+			////				jCBSD.addItem("ruyrrruu4");
+			////				jCBSD.addItem("rryewrsw");
+			////				jCBSD.addItem("wertw");
+			////				jCBSD.addItem("wer26e");
+			////				jCBSD.addItem("eceye");
+			////				jCBSD.addItem("etye7yyy-er");
+			////				jCBSD.addItem("eyert7e7e7");
+			////				jCBSD.addItem("_abcdefghijklmn�opqrstuvwxyz");
+			////				jCBSD.addItem("_0123456789");
+			////				jCBSD.addItem("sstsnmmsutt");
+			////				jCBSD.addItem("dcytdtyd");
+			////				jCBSD.addItem("dcdtdty");
+			////				jCBSD.addItem("dctycd");
+			////				jCBSD.addItem("cstyd");
+			////				jCBSD.addItem("dbddcytdsssc");
+			////				jCBSD.addItem("cdydt");
+			////				jCBSD.addItem("scscydu");
+			////				jCBSD.addItem("axct");
+			////				jCBSD.addItem("joobfvd");
+			////				jCBSD.addItem("jomj");
+			////				jCBSD.addItem("omjo");
+			////				jCBSD.addItem("mol");
+			////				jCBSD.addItem("agdhfj");
+			////				jCBSD.addItem("fjfhjuh,ooom");
+			////				jCBSD.addItem("affjfa");
+			////				jCBSD.addItem("afjfjyfga");
+			////				jCBSD.addItem("NOMENCLATOR");
+			////				jCBSD.addItem("asg");
+			////				jCBSD.addItem("afaea");
+			////				jCBSD.addItem("gvSIG");
+			////				jCBSD.addItem("yoiey");
+			////				jCBSD.addItem("35");
+			////				jCBSD.addItem("ewgw2dh");
+			////				jCBSD.addItem("titgr");
+			////				jCBSD.addItem("o9yky");
+			////				jCBSD.addItem("kyio8gbr");
+			////				jCBSD.addItem("eve5yed574rir");
+			////				jCBSD.addItem("578tygmtio");
+			////				jCBSD.addItem("t43262ryteye");
+			////				jCBSD.addItem("wvwx");
+			////				jCBSD.addItem("zssscwwwwww");
+			////				jCBSD.addItem("sgvr");
+			////				jCBSD.addItem("...");
+			//				jCBSD.addItem("�LTIMO ITEM EN A�ADIRSE");
+			
+			// --- END ADD ITEMS TO THE COMPONENT AND OTHER TESTS ---
+			
+			// Test of no item default selection 
+			// jCBSD.setSelectedIndex(-1);
+			
+			// Other tests
+			// jCBSD.setSelectedIndex(0);
+			// System.out.println("Selected: " + jCBSD.getSelectedItem());
+			// jCBSD.setSelectedIndex(3);
+			// System.out.println("Item at 3: " + jCBSD.getItemAt(3));
+			// jCBSD.setSelectedItem("�AND�");
+
+			// System.out.println("Index of LIBUI: " + ((DefaultComboBoxConfigurableLookUpModel)jCBSD.getModel()).getIndexOf("LIBUI"));
+			// jCBSD.addItem("A�ADIDO");
+			// jCBSD.removeItemAt(0);
+			// jCBSD.removeAllItems();
+			// ((DefaultComboBoxConfigurableLookUpModel)jCBSD.getModel()).removeAllElements();
+			// System.out.println("Number of elements (list box): " + jCBSD.getItemCount());
+
+			// Tests the method ''setPrototypeDisplayValue''
+			// jCBSD.addItem("ABCDEFGHIJKLMN�OPQRSTUVWXYZ-ABCDEFGHIJKLMN�OPQRSTUVWXYZ-ABCDEFGHIJKLMN�OPQRSTUVWXYZ");
+			// jCBSD.setSelectedItem("ABCDEFGHIJKLMN�OPQRSTUVWXYZ-ABCDEFGHIJKLMN�OPQRSTUVWXYZ-ABCDEFGHIJKLMN�OPQRSTUVWXYZ");
+			// jCBSD.setPrototypeDisplayValue("ABCDEFGHIJKLMN�OPQRSTUVWXYZ");
+			
+			// Configure the JFrame
+			jF.setTitle("Test JComboBoxConfigurableLookUp");
+			jF.setSize(new Dimension(width, height));	    
+		    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jF.getContentPane().add(jCBSD);
+		    jF.setVisible(true);
+
+		    // More tests
+			// jCBSD.setSelectedIndex(0); // Failures before the component could be showed
+			// System.out.println("Selected: " + jCBSD.getSelectedItem());
+			// jCBSD.setSelectedIndex(3); // Failures before the component could be showed
+			// System.out.println("Item at 3: " + jCBSD.getItemAt(3));
+			// jCBSD.setSelectedItem("�AND�"); // Failures before the component could be showed
+		    
+		    // Test a Look up Agent
+		    // model.setLookUpAgent(new SampleAgent());
+		    
+		    // Test changing the renderer
+		    // jCBSD.setRenderer(new SampleBasicComboBoxRenderer());
+		    
+			// More tests
+			// jCBSD.removeAllItems();
+			// jCBSD.addItem("extCAD");
+			// jCBSD.addItem("libuiDownCase");
+			// jCBSD.addItem("appgvSig");
+			// jCBSD.removeAllItems();
+			// jCBSD.addItem("extCAD");
+			// jCBSD.addItem("libuiDownCase");
+			// jCBSD.addItem("appgvSig");
+			// jCBSD.setSelectedItem("libuiDownCase");
+		    
+		    // Test change the editor
+		    // jCBSD.setEditor(new SampleComboBoxEditor());
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+			JOptionPane.showMessageDialog(null, Messages.getText("testJComboBoxConfigurableLookUpErrorMessage"), Messages.getText("error"), JOptionPane.ERROR_MESSAGE);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/programmertests/TestJComboBoxConfigurableLookUp.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JFrameUserTestOfJComboBoxConfigurableLookUp.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JFrameUserTestOfJComboBoxConfigurableLookUp.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JFrameUserTestOfJComboBoxConfigurableLookUp.java	(revision 42196)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup.usertests;
+
+import java.io.Serializable;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.JComboBoxConfigurableLookUp;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ib��ez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+
+/**
+ * <p>Creates and launches an application for testing {@link JComboBoxConfigurableLookUp JComboBoxConfigurableLookUp}.</p>
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ * @version 07/02/2008
+ */
+public class JFrameUserTestOfJComboBoxConfigurableLookUp implements Serializable{
+	private static final long serialVersionUID = 5760643373469048220L;
+
+	private JPanelUserTestOfJComboBoxConfigurableLookUp mainPanel = null;
+	private JFrame frame;
+
+	/**
+	 * <p>Default constructor.</p>
+	 */
+	public JFrameUserTestOfJComboBoxConfigurableLookUp() {
+		createFrame();
+	}
+
+	/**
+	 * <p>Creates the main <code>JFrame</code> for execute the application, and adds to it the <code>JPanel</code> test application.</p> 
+	 */
+	private void createFrame() {
+		// Create: Configuration Frame
+		frame = new JFrame();
+		frame.setResizable(false);
+		frame.setTitle(Messages.getText("jComboBoxConfigurableLookUpByTheUser_frameTitle"));
+		frame.getContentPane().add(getJPanelUserTestOfJComboBoxConfigurableLookUp());
+		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		frame.pack();
+
+		// Centers the frame in the middle of the screen
+		frame.setLocationRelativeTo(null);
+	}
+	
+	/**
+	 * <p>Initializes <code>mainPanel</code>.</p>
+	 * 
+	 * @return JPanelUserTestOfJComboBoxConfigurableLookUp
+	 */
+	private JPanelUserTestOfJComboBoxConfigurableLookUp getJPanelUserTestOfJComboBoxConfigurableLookUp() {
+		if (mainPanel == null) {
+			mainPanel = new JPanelUserTestOfJComboBoxConfigurableLookUp();
+		}
+		
+		return mainPanel;
+	}
+
+	/**
+	 * <p>Method for launch the application.</p>
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		JFrameUserTestOfJComboBoxConfigurableLookUp app = new JFrameUserTestOfJComboBoxConfigurableLookUp();
+		app.setVisible(true);
+	}
+
+	/**
+	 * <p>Sets visible the frame.</p>
+	 * 
+	 * @param visible True or false
+	 */
+	public void setVisible(boolean visible) {
+		frame.setVisible(visible);
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JFrameUserTestOfJComboBoxConfigurableLookUp.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JPanelUserTestOfJComboBoxConfigurableLookUp.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JPanelUserTestOfJComboBoxConfigurableLookUp.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JPanelUserTestOfJComboBoxConfigurableLookUp.java	(revision 42196)
@@ -0,0 +1,3283 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup.usertests;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.DefaultComboBoxConfigurableLookUpModel;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.JComboBoxConfigurableLookUp;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.programmertests.SampleBasicComboBoxRenderer;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ib��ez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+
+/** 
+ * <p>Application for testing <code>JComboBoxLookUpConfigurable</code> objects.</p>
+ * 
+ * <p>This class is a JPanel and has other classes nested.</p>
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ * @version 07/02/2008
+ */
+public class JPanelUserTestOfJComboBoxConfigurableLookUp extends JPanel implements Serializable {
+	private static final long serialVersionUID = -8900802197326194647L;
+
+	private final int panelWidth = 735;
+	private final int panelHeight = 580;
+	private final int testWidth = 260;
+	private ConfigurationJPanel configurationPanel = null;
+	private OtherTestsJPanel otherTestsPanel = null;
+	private JavaFileMethodsLoader javaFileMethodsLoader;
+	private int testNumber;
+	private String path;
+	private boolean isConfiguring;
+	
+	private static final short DEFAULT_CELL_RENDERER = 0;
+	private static final short SAMPLE_BG_COLOR_CELL_RENDERER = 1;
+	
+	/**
+	 * <p>Default constructor.</p>
+	 */
+	public JPanelUserTestOfJComboBoxConfigurableLookUp() {
+		super();
+		this.initialize();
+	}
+
+	/**
+	 * <p>Initializes the application pane.</p>
+	 */
+	private void initialize() {
+		path = "src/org/gvsig/gui/beans/comboboxconfigurablelookup/JComboBoxConfigurableLookUp.java";
+		isConfiguring = false;
+		this.setPreferredSize(new Dimension(panelWidth, panelHeight));
+		this.setSize(new Dimension(panelWidth, panelHeight));
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setAlignment(FlowLayout.LEFT);
+		this.setLayout(flowLayout);
+		this.add(this.getConfigurationPanel());
+		this.add(this.getOtherTestsPanel());	
+		this.loadPublicMethods();
+		this.redirectDebugAndErrorMessages();
+		testNumber = 1;
+	}	
+
+	/**
+	 * <p>Loads public methods of the <code>JComboBoxConfigurableLookUp</code> from its file class and adds the constructors to the
+	 *   inner <code>ConfigurationPanel</code> and the other methods to the <code>OtherTestsPanel</code>.</p>
+	 */
+	private void loadPublicMethods() {
+		String methodHead;
+		String reservedWord = new String("public ");
+		int reservedWordLength = reservedWord.length();
+		
+		for (int i = 0; i < javaFileMethodsLoader.size(); i++)
+		{
+			methodHead = javaFileMethodsLoader.getMethodHead(i);
+			if (methodHead.startsWith(reservedWord))
+			{
+				if (methodHead.startsWith(reservedWord + javaFileMethodsLoader.getClassName()))
+					getConfigurationPanel().addConstructorItem(methodHead.substring(reservedWordLength, methodHead.length()));
+				else
+					getOtherTestsPanel().addMethodItem(methodHead.substring(reservedWordLength, methodHead.length()));
+			}
+		}
+	}
+	
+	/**
+	 * <p>Redirects the default output and error stream to the inner log <code>JTextArea</code>.</p>
+	 */
+	private void redirectDebugAndErrorMessages() {
+		// Now create a new TextAreaOutputStream to write to our JTextArea control and wrap a
+		// PrintStream around it to support the println/printf methods.
+		PrintStream out = new PrintStream( new TextAreaOutputStream( getOtherTestsPanel().getJTextAreaLog() ) );
+
+		// Redirect standard output stream to the TextAreaOutputStream
+		System.setOut( out );
+
+		// Redirect standard error stream to the TextAreaOutputStream
+		System.setErr( out );
+	}
+	
+	/**
+	 * <p>This method initializes <code>configurationPanel</code>.</p>
+	 * 	
+	 * @return javax.swing.JComboBoxItemsSeekerConfigurableTestingByTheUserConfigurationPanel	
+	 */
+	private ConfigurationJPanel getConfigurationPanel() {
+		if (configurationPanel == null) {			
+			configurationPanel = new ConfigurationJPanel();
+			configurationPanel.getJButtonNew().addMouseListener(new MouseAdapter() {
+				/*
+				 * (non-Javadoc)
+				 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+				 */
+				public void mouseClicked(MouseEvent arg0) {
+					addNewTestObject();
+				}
+			});
+		}
+
+		return configurationPanel;
+	}
+	
+	/**
+	 * <p>This method initializes <code>otherTestsPanel</code>.<p>
+	 * 	
+	 * @return javax.swing.JComboBoxItemsSeekerConfigurableTestingByTheUserOtherTestsPanel	
+	 */
+	private OtherTestsJPanel getOtherTestsPanel() {
+		if (this.otherTestsPanel == null)
+			this.otherTestsPanel = new OtherTestsJPanel(path);
+
+		return this.otherTestsPanel;
+	}
+	
+	/**
+	 * <p>This method creates a JFrame with a new object for testing.</p>
+	 * <p>This method also defines the closing methods and the name of the <code>JFrame</code>, and add the <code>JFrame</code> to the <code>OtherTestPanel</code>; that panel.
+	 *    will use it for do methods.</p>
+	 */
+	private void addNewTestObject() {
+		JComboBoxConfigurableLookUp object = this.createComponent();
+		object.setPreferredSize(new Dimension(testWidth, object.getPreferredSize().height));
+		String keyAndTitle = Messages.getText("test") + " " + String.valueOf(testNumber++);
+		
+		JFrame jFrame = new JFrame(keyAndTitle);
+		jFrame.getContentPane().add(object);
+		jFrame.pack();
+		jFrame.setVisible(true);
+		
+		// Centers the JFrame in the middle of the screen
+		jFrame.setLocationRelativeTo(null);
+		
+		// Defines the methods that will have to do the JFrame when it would have to be closed
+		jFrame.addWindowListener(new WindowAdapter(){
+
+			/*
+			 * (non-Javadoc)
+			 * @see java.awt.event.WindowAdapter#windowClosed(java.awt.event.WindowEvent)
+			 */
+			public void windowClosed(WindowEvent e) {
+				// It's executen when the application closes the JFrame
+				getOtherTestsPanel().removeTestObject(((JFrame)e.getSource()).getTitle());
+				getOtherTestsPanel().getJTextAreaLog().append('(' + ((JFrame)e.getSource()).getTitle() + ", " + Messages.getText("elimination") + ")\n");
+			}
+			
+			/*
+			 * (non-Javadoc)
+			 * @see java.awt.event.WindowAdapter#windowClosing(java.awt.event.WindowEvent)
+			 */
+			public void windowClosing(WindowEvent e) {
+				// It's executen when the user closes the JFrame
+				getOtherTestsPanel().removeTestObject(((JFrame)e.getSource()).getTitle());
+				getOtherTestsPanel().getJTextAreaLog().append('(' + ((JFrame)e.getSource()).getTitle() + ", " + Messages.getText("elimination") + ")\n");
+			}
+		});
+
+		this.getOtherTestsPanel().addTestObject(keyAndTitle, jFrame);
+	}
+	
+
+	/**
+	 * <p>Obtains the configuration value for create the new object and creates it.</p>
+	 * 
+	 * @return JComboBoxConfigurableLookUp The new object created
+	 */
+	private JComboBoxConfigurableLookUp createComponent() {
+		JComboBoxConfigurableLookUp comboBox = null;
+		String argument = "";
+
+		// ESTA PARTE CREA EL OBJETO, AVISA DE QUE EN CASO NECESARIO PONDR� UN PAR�METRO PREESTABLECIDO, Y ALMACENA EL TEXTO ACERCA
+		//  DEL PAR�METRO QUE PONDR� LUEGO EN EL LOG
+		switch(getConfigurationPanel().getSelectedComboBoxConstructor()) {
+			case 0:
+				comboBox = new JComboBoxConfigurableLookUp();
+				break;
+			case 1:
+				JOptionPane.showMessageDialog(null, Messages.getText("will_use_a_default_model"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+				DefaultComboBoxConfigurableLookUpModel model = new DefaultComboBoxConfigurableLookUpModel(new Object[] {"Item1", "Item2", "Item3", "Item4", "Item5"});
+				comboBox = new JComboBoxConfigurableLookUp(model);
+				argument = "model; ";
+				break;
+			case 2:
+				JOptionPane.showMessageDialog(null, Messages.getText("will_use_a_default_array_of_items"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+				comboBox = new JComboBoxConfigurableLookUp(new Object[] {"Item1", "Item2", "Item3", "Item4", "Item5"});
+				argument = "array; ";
+				break;
+			case 3:
+				JOptionPane.showMessageDialog(null, Messages.getText("will_use_a_default_vector_of_items"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+				Vector<Object> vector = new Vector<Object>();
+				vector.add("Item1");
+				vector.add("Item2");
+				vector.add("Item3");
+				vector.add("Item4");
+				vector.add("Item5");
+				comboBox = new JComboBoxConfigurableLookUp(vector);
+				argument = "vector; ";
+				break;
+			default:
+				comboBox = new JComboBoxConfigurableLookUp();
+		}
+
+		DefaultComboBoxConfigurableLookUpModel model = (DefaultComboBoxConfigurableLookUpModel)comboBox.getModel();
+		String itemsOrderText = null;
+		String languageRule = null;
+		String cellRenderer = getConfigurationPanel().getSelectedComboBoxCellRenderer();
+
+		
+		if (isConfiguring) {
+			comboBox.setOnlyOneColorOnText(getConfigurationPanel().isSelectedJCheckBoxOnlyOneColor());
+			comboBox.setBeepEnabled(getConfigurationPanel().isSelectedJCheckBoxBeepEnabled());
+			comboBox.setHidePopupIfThereAreNoItems(getConfigurationPanel().isSelectedJCheckBoxHidePopupIfThereAreNoItems());
+			comboBox.setToForceSelectAnItem(getConfigurationPanel().isSelectedJCheckBoxToForceSelectAnItem());
+			comboBox.setCompleteArrowKeySelection(getConfigurationPanel().isSelectedJCheckBoxCompleteArrowKeySelection());
+			comboBox.setDisplayAllItemsWithArrowButton(getConfigurationPanel().isSelectedJCheckBoxDisplayAllItemsWithArrowButton());
+			
+			if (getConfigurationPanel().getSelectedComboBoxCellRendererIndex() == SAMPLE_BG_COLOR_CELL_RENDERER)
+				comboBox.setRenderer(new SampleBasicComboBoxRenderer());
+
+			// Configuration of the model
+			model.setItemsOrder(getConfigurationPanel().getSelectedComboBoxItemsOrder());
+			model.setShowAllItemsInListBox(getConfigurationPanel().isSelectedJCheckBoxShowAllItemsInListBox());
+			model.setLocaleRules(getConfigurationPanel().getSelectedComboBoxLanguageRuleText());
+			model.setCaseSensitive(getConfigurationPanel().isSelectedJCheckBoxCaseSensitive());
+			
+			itemsOrderText = getConfigurationPanel().getSelectedComboBoxItemsOrderText();
+			languageRule = getConfigurationPanel().getSelectedComboBoxLanguageRuleText();
+			
+			// Write the log
+			getOtherTestsPanel().getJTextAreaLog().append('(' + Messages.getText("test") + " " + String.valueOf(testNumber) + ", " +
+					Messages.getText("creaction") + ": " + argument + Messages.getText("configuration") + ": " + getConfigurationPanel().isSelectedJCheckBoxOnlyOneColor() + ", " + 
+					getConfigurationPanel().isSelectedJCheckBoxBeepEnabled() + ", " + getConfigurationPanel().isSelectedJCheckBoxHidePopupIfThereAreNoItems() + ", " +
+					getConfigurationPanel().isSelectedJCheckBoxToForceSelectAnItem() + ", " +
+					getConfigurationPanel().isSelectedJCheckBoxCompleteArrowKeySelection() + ", " +
+					getConfigurationPanel().isSelectedJCheckBoxDisplayAllItemsWithArrowButton() + ", " +
+					cellRenderer + ", " +
+					itemsOrderText + ", " +
+					getConfigurationPanel().isSelectedJCheckBoxShowAllItemsInListBox() + ", " + languageRule + ", " +
+					getConfigurationPanel().isSelectedJCheckBoxCaseSensitive() + ")\n");
+		}
+		else {
+			switch(model.getItemsOrder()) {
+				case DefaultComboBoxConfigurableLookUpModel.MAINTAIN_POSITION:
+					itemsOrderText = Messages.getText("maintain_position");
+					break;
+				case DefaultComboBoxConfigurableLookUpModel.ALPHABETICAL_ORDERED:
+					itemsOrderText = Messages.getText("alphabetical_ordered");
+					break;
+				case DefaultComboBoxConfigurableLookUpModel.MAINTAIN_AGENT_POSITIONS:
+					itemsOrderText = Messages.getText("agent_positions");
+					break;
+			}
+			
+			// Write the log
+			getOtherTestsPanel().getJTextAreaLog().append('(' + Messages.getText("test") + " " + String.valueOf(testNumber) + ", " +
+					Messages.getText("creaction") + ": " + argument + Messages.getText("configuration") + ": " + comboBox.isOnlyOneColorOnText() + ", " +
+					 comboBox.isBeepEnabled() + ", " + comboBox.isHidePopupIfThereAreNoItems() + ", " + comboBox.isToForceSelectAnItem() + ", " +
+					 comboBox.isCompleteArrowKeySelection() + ", " + comboBox.isDisplayAllItemsWithArrowButton() + ", " + cellRenderer + ", " +
+					 itemsOrderText + ", " + model.isShowAllItemsInListBox() + ", " + model.getLocaleRules() + ", " + model.isCaseSensitive() + ")\n");
+		}
+
+		return comboBox;
+	}
+
+	/**
+	 * <p>A JPanel for the configuration and create a new JComboBoxConfigurableLookUp for testing.</p>
+	 *  
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	private class ConfigurationJPanel extends JPanel implements Serializable {
+		private static final long serialVersionUID = 6327342028864667372L;
+
+		private final int configurationPanelWidth = 310;
+		private final int configurationPanelHeight = 570;
+		private final int subPanelWidth = 280;
+		private final int subPanelHeight = 28;
+		private final int buttonWidth = 90;
+		private final int buttonHeight = 20;
+		private final int jComboBoxWidth = 160;
+		private final int jComboBoxHeight = 20;
+		private final int jPaneConfigurationParametersWidth = 296;
+		private final int jPaneConfigurationParametersHeight = 440;
+		private final int jPaneConstructorsWidth = jPaneConfigurationParametersWidth;
+		private final int jPaneConstructorsHeight = 55;
+		private final int jComboBoxConstructorsWidth = jPaneConfigurationParametersWidth - 10;
+		private final int jComboBoxConstructorsHeight = jComboBoxHeight;
+		private JCheckBox jCheckBoxOnlyOneColorOnText = null;
+		private JCheckBox jCheckBoxBeepEnabled = null;
+		private JCheckBox jCheckBoxHidePopupIfThereAreNoItems = null;
+		private JCheckBox jCheckBoxToForceSelectAnItem = null;
+		private JCheckBox jCheckBoxShowAllItemsInListBox = null;
+		private JCheckBox jCheckBoxCaseSensitive = null;
+		private JCheckBox jCheckBoxCompleteArrowKeySelection = null;
+		private JCheckBox jCheckBoxDisplayAllItemsWithArrowButton = null;
+		private JLabel jLabelOnlyOneColorOnText = null;
+		private JLabel jLabelBeepEnabled = null;
+		private JLabel jLabelHidePopupIfThereAreNoItems = null;
+		private JLabel jLabelToForceSelectAnItem = null;
+		private JLabel jLabelItemsOrder = null;
+		private JLabel jLabelShowAllItemsInListBox = null;
+		private JLabel jLabelLanguageRules = null;
+		private JLabel jLabelCaseSensitive = null;
+		private JLabel jLabelCompleteArrowKeySelection = null;
+		private JLabel jLabelDisplayAllItemsWithArrowButton = null;
+		private JLabel jLabelCellRenderer = null;
+		private JButton jButtonReset = null;
+		private JPanel jPaneConstructor = null;
+		private JPanel jPaneConfigurationParameters = null;
+		private JPanel jPaneOnlyOneColorOnText = null;
+		private JPanel jPaneBeepEnabled = null;
+		private JPanel jPaneHidePopupIfThereAreNoItems = null;
+		private JPanel jPaneToForceSelectAnItem = null;
+		private JPanel jPaneItemsOrder = null;
+		private JPanel jPaneShowAllItemsInListBox = null;
+		private JPanel jPaneLanguageRules = null;
+		private JPanel jPaneCaseSensitive = null;
+		private JPanel jPaneCompleteArrowKeySelection = null;
+		private JPanel jPaneDisplayAllItemsWithArrowButton = null;
+		private JPanel jPaneCellRenderer = null;
+		private JPanel jPaneButtons = null;
+		private JComboBox jComboBoxConstructors = null;
+		private JComboBox jComboBoxItemsOrder = null;
+		private JComboBox jComboBoxLanguageRules = null;
+		private JComboBox jComboBoxCellRenderer = null;
+		private JButton jButtonNew = null;
+		private JButton jButtonEnableParametersConfiguration = null;
+		private Object lastSelectedConstructor = null;
+		
+		/**
+		 * <p>Default constructor.</p>
+		 */
+		public ConfigurationJPanel() {
+			super();
+			this.initialize();
+		}
+
+		/**
+		 * <p>Initializes this pane.</p>
+		 */
+		private void initialize() {
+			this.setPreferredSize(new Dimension(configurationPanelWidth, configurationPanelHeight));
+			this.setSize(new Dimension(configurationPanelWidth, configurationPanelHeight));
+			this.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("objectsCreation"), TitledBorder.LEFT, TitledBorder.TOP, new Font("Dialog", Font.BOLD, 12), Color.black));
+			this.add(getJPaneConstructors(), null);
+			this.add(getJPaneConfigurationParameters(), null);
+			this.add(getJPaneButtons(), null);
+			this.resetConfigurationPanel();
+		}
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxOnlyOneColor</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxOnlyOneColorOnText() {
+			if (jCheckBoxOnlyOneColorOnText == null) {
+				jCheckBoxOnlyOneColorOnText = new JCheckBox();
+			}
+			return jCheckBoxOnlyOneColorOnText;
+		}
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxBeepEnabled</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxBeepEnabled() {
+			if (jCheckBoxBeepEnabled == null) {
+				jCheckBoxBeepEnabled = new JCheckBox();
+			}
+			return jCheckBoxBeepEnabled;
+		}
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxHidePopupIfThereAreNoItems</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxHidePopupIfThereAreNoItems() {
+			if (jCheckBoxHidePopupIfThereAreNoItems == null) {
+				jCheckBoxHidePopupIfThereAreNoItems = new JCheckBox();
+			}
+			return jCheckBoxHidePopupIfThereAreNoItems;
+		}
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxToForceSelectAnItem</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxToForceSelectAnItem() {
+			if (jCheckBoxToForceSelectAnItem == null) {
+				jCheckBoxToForceSelectAnItem = new JCheckBox();
+			}
+			return jCheckBoxToForceSelectAnItem;
+		}
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxShowAllItemsInListBox</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxShowAllItemsInListBox() {
+			if (jCheckBoxShowAllItemsInListBox == null) {
+				jCheckBoxShowAllItemsInListBox = new JCheckBox();
+			}
+			return jCheckBoxShowAllItemsInListBox;
+		}		
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxCaseSensitive</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxCaseSensitive() {
+			if (jCheckBoxCaseSensitive == null) {
+				jCheckBoxCaseSensitive = new JCheckBox();
+			}
+			return jCheckBoxCaseSensitive;
+		}
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxCompleteArrowKeySelection</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxCompleteArrowKeySelection() {
+			if (jCheckBoxCompleteArrowKeySelection == null) {
+				jCheckBoxCompleteArrowKeySelection = new JCheckBox();
+			}
+			return jCheckBoxCompleteArrowKeySelection;
+		}
+
+		/**
+		 * <p>This method initializes <code>jCheckBoxDisplayAllItemsWithArrowButton</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JCheckBox getJCheckBoxDisplayAllItemsWithArrowButton() {
+			if (jCheckBoxDisplayAllItemsWithArrowButton == null) {
+				jCheckBoxDisplayAllItemsWithArrowButton = new JCheckBox();
+			}
+			return jCheckBoxDisplayAllItemsWithArrowButton;
+		}
+		
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckBoxOnlyOneColor(boolean b) {
+			getJCheckBoxOnlyOneColorOnText().setSelected(b);
+		}
+
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckBoxBeepEnabled(boolean b) {
+			getJCheckBoxBeepEnabled().setSelected(b);
+		}
+
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckBoxHidePopupIfThereAreNoItems(boolean b) {
+			getJCheckBoxHidePopupIfThereAreNoItems().setSelected(b);
+		}
+
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckBoxToForceSelectAnItem(boolean b) {
+			getJCheckBoxToForceSelectAnItem().setSelected(b);
+		}
+
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckShowAllItemsInListBox(boolean b) {
+			getJCheckBoxShowAllItemsInListBox().setSelected(b);
+		}
+
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckBoxCaseSensitive(boolean b) {
+			jCheckBoxCaseSensitive.setSelected(b);
+		}
+
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckBoxCompleteArrowKeySelection(boolean b) {
+			jCheckBoxCompleteArrowKeySelection.setSelected(b);
+		}
+
+		/**
+		 * @see JCheckBox#setSelected(boolean)
+		 */
+		public void setSelectedJCheckBoxDisplayAllItemsWithArrowButton(boolean b) {
+			jCheckBoxDisplayAllItemsWithArrowButton.setSelected(b);
+		}
+		
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxOnlyOneColor() {
+			return getJCheckBoxOnlyOneColorOnText().isSelected();
+		}
+
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxBeepEnabled() {
+			return getJCheckBoxBeepEnabled().isSelected();
+		}	
+		
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxHidePopupIfThereAreNoItems() {
+			return getJCheckBoxHidePopupIfThereAreNoItems().isSelected();
+		}
+
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxToForceSelectAnItem() {
+			return getJCheckBoxToForceSelectAnItem().isSelected();
+		}
+
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxShowAllItemsInListBox() {
+			return getJCheckBoxShowAllItemsInListBox().isSelected();
+		}
+		
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxCaseSensitive() {
+			return getJCheckBoxCaseSensitive().isSelected();
+		}
+		
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxCompleteArrowKeySelection() {
+			return getJCheckBoxCompleteArrowKeySelection().isSelected();
+		}
+
+		/**
+		 * @see JCheckBox#isSelected()
+		 */
+		public boolean isSelectedJCheckBoxDisplayAllItemsWithArrowButton() {
+			return getJCheckBoxDisplayAllItemsWithArrowButton().isSelected();
+		}
+		
+		/**
+		 * <p>This method initializes <code>jButtonReset</code>.<p>
+		 * 	
+		 * @return javax.swing.JButton	
+		 */
+		private JButton getJButtonReset() {
+			if (jButtonReset == null) {
+				jButtonReset = new JButton();
+				jButtonReset.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
+				jButtonReset.setText(Messages.getText("reset"));
+				jButtonReset.addMouseListener(new MouseAdapter() {
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						resetConfigurationPanel();
+					}
+				});
+			}
+			return jButtonReset;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneConfigurationParameters</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneConfigurationParameters() {
+			if (jPaneConfigurationParameters == null) {				
+				jPaneConfigurationParameters = new JPanel();
+				jPaneConfigurationParameters.setPreferredSize(new Dimension(jPaneConfigurationParametersWidth, jPaneConfigurationParametersHeight));
+				jPaneConfigurationParameters.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("configurationParameters"), TitledBorder.LEFT, TitledBorder.TOP, new Font("Dialog", Font.BOLD, 12), Color.black));
+
+				// Enable or disable the configuration of the parameters
+				jPaneConfigurationParameters.add(getJButtonEnableParametersConfiguration());
+				
+				// Parameters of the JComboBoxLookUpConfigurable View and Control
+				jPaneConfigurationParameters.add(getJPaneOnlyOneColorOnText(), null);
+				jPaneConfigurationParameters.add(getJPaneBeepEnabled(), null);
+				jPaneConfigurationParameters.add(getJPaneHidePopupIfThereAreNoItems(), null);
+				jPaneConfigurationParameters.add(getJPaneToForceSelectAnItem(), null);
+				jPaneConfigurationParameters.add(getJPaneCompleteArrowKeySelection(), null);
+				jPaneConfigurationParameters.add(getJPaneDisplayAllItemsWithArrowButton(), null);
+				jPaneConfigurationParameters.add(getJPaneCellRenderer(), null);
+				
+				// Parameters of the JComboBoxLookUpConfigurable Model
+				jPaneConfigurationParameters.add(getJPaneItemsOrder(), null);
+				jPaneConfigurationParameters.add(getJPaneShowAllItemsInListBox(), null);
+				jPaneConfigurationParameters.add(getJPaneLanguageRules(), null);
+				jPaneConfigurationParameters.add(getJPaneCaseSensitive(), null);
+
+				// By default don't change the default configuration
+				enableAllConfigurationComponents(false);
+			}
+			return jPaneConfigurationParameters;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelOnlyOneColorOnText</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelOnlyOneColorOnText() {
+			if (jLabelOnlyOneColorOnText == null) {
+				jLabelOnlyOneColorOnText = new JLabel();
+				jLabelOnlyOneColorOnText.setText(Messages.getText("onlyOneColorOnTextConfigurationLabel"));
+				jLabelOnlyOneColorOnText.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxOnlyOneColorOnText().setSelected(!getJCheckBoxOnlyOneColorOnText().isSelected());
+					}
+				});
+			}
+			return jLabelOnlyOneColorOnText;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelBeepEnabled</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelBeepEnabled() {
+			if (jLabelBeepEnabled == null) {
+				jLabelBeepEnabled = new JLabel();
+				jLabelBeepEnabled.setText(Messages.getText("beepConfigurationLabel"));
+				jLabelBeepEnabled.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxBeepEnabled().setSelected(!getJCheckBoxBeepEnabled().isSelected());
+					}
+				});
+			}
+			return jLabelBeepEnabled;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelHidePopupIfThereAreNoItems</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelHidePopupIfThereAreNoItems() {
+			if (jLabelHidePopupIfThereAreNoItems == null) {
+				jLabelHidePopupIfThereAreNoItems = new JLabel();
+				jLabelHidePopupIfThereAreNoItems.setText(Messages.getText("hidePopupIfThereAreNoItemsConfigurationLabel"));
+				jLabelHidePopupIfThereAreNoItems.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxHidePopupIfThereAreNoItems().setSelected(!getJCheckBoxHidePopupIfThereAreNoItems().isSelected());
+					}
+				});
+			}
+			return jLabelHidePopupIfThereAreNoItems;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelToForceSelectAnItem</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelToForceSelectAnItem() {
+			if (jLabelToForceSelectAnItem == null) {
+				jLabelToForceSelectAnItem = new JLabel();
+				jLabelToForceSelectAnItem.setText(Messages.getText("toForceSelectAnItemConfigurationLabel"));
+				jLabelToForceSelectAnItem.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxToForceSelectAnItem().setSelected(!getJCheckBoxToForceSelectAnItem().isSelected());
+					}
+				});
+			}
+			return jLabelToForceSelectAnItem;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelItemsOrder</code>.<p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelItemsOrder() {
+			if (jLabelItemsOrder == null) {
+				jLabelItemsOrder = new JLabel();
+				jLabelItemsOrder.setText(Messages.getText("itemsOrderConfigurationLabel"));
+			}
+			return jLabelItemsOrder;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelShowAllItemsInListBox</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelShowAllItemsInListBox() {
+			if (jLabelShowAllItemsInListBox == null) {
+				jLabelShowAllItemsInListBox = new JLabel();
+				jLabelShowAllItemsInListBox.setText(Messages.getText("showAllItemsInListBoxConfigurationLabel"));
+				jLabelShowAllItemsInListBox.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxShowAllItemsInListBox().setSelected(!getJCheckBoxShowAllItemsInListBox().isSelected());
+					}
+				});
+			}
+			return jLabelShowAllItemsInListBox;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelLanguageRules</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelLanguageRules() {
+			if (jLabelLanguageRules == null) {
+				jLabelLanguageRules = new JLabel();
+				jLabelLanguageRules.setText(Messages.getText("languageRulesConfigurationLabel"));
+			}
+			return jLabelLanguageRules;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelCaseSensitive1</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelCaseSensitive() {
+			if (jLabelCaseSensitive == null) {
+				jLabelCaseSensitive = new JLabel();
+				jLabelCaseSensitive.setText(Messages.getText("caseSensitiveConfigurationLabel"));
+				jLabelCaseSensitive.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxCaseSensitive().setSelected(!getJCheckBoxCaseSensitive().isSelected());
+					}
+				});
+			}
+			return jLabelCaseSensitive;
+		}
+		
+
+		/**
+		 * <p>This method initializes <code>jLabelCompleteArrowKeySelection</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelCompleteArrowKeySelection() {
+			if (jLabelCompleteArrowKeySelection == null) {
+				jLabelCompleteArrowKeySelection = new JLabel();
+				jLabelCompleteArrowKeySelection.setText(Messages.getText("completeArrowKeySelectionConfigurationLabel"));
+				jLabelCompleteArrowKeySelection.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxCompleteArrowKeySelection().setSelected(!getJCheckBoxCompleteArrowKeySelection().isSelected());
+					}
+				});
+			}
+			return jLabelCompleteArrowKeySelection;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelDisplayAllItemsWithArrowButton</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelDisplayAllItemsWithArrowButton() {
+			if (jLabelDisplayAllItemsWithArrowButton == null) {
+				jLabelDisplayAllItemsWithArrowButton = new JLabel();
+				jLabelDisplayAllItemsWithArrowButton.setText(Messages.getText("displayAllItemsWithArrowButtonConfigurationLabel"));
+				jLabelDisplayAllItemsWithArrowButton.addMouseListener(new MouseAdapter(){
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						getJCheckBoxDisplayAllItemsWithArrowButton().setSelected(!getJCheckBoxDisplayAllItemsWithArrowButton().isSelected());
+					}
+				});
+			}
+			return jLabelDisplayAllItemsWithArrowButton;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelCellRenderer</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelCellRenderer() {
+			if (jLabelCellRenderer == null) {
+				jLabelCellRenderer = new JLabel();
+				jLabelCellRenderer.setText(Messages.getText("cellRendererConfigurationLabel"));
+			}
+			return jLabelCellRenderer;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneConstructor</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneConstructors() {
+			if (jPaneConstructor == null) {
+				jPaneConstructor = new JPanel();
+				jPaneConstructor.setPreferredSize(new Dimension(jPaneConstructorsWidth, jPaneConstructorsHeight));
+				jPaneConstructor.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("constructors"), TitledBorder.LEFT, TitledBorder.TOP, new Font("Dialog", Font.BOLD, 12), Color.black));
+				jPaneConstructor.add(getJComboBoxConstructors(), null);
+			}
+			return jPaneConstructor;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneOnlyOneColor</code>.</p>	
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneOnlyOneColorOnText() {
+			if (jPaneOnlyOneColorOnText == null) {				
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneOnlyOneColorOnText = new JPanel();
+				jPaneOnlyOneColorOnText.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneOnlyOneColorOnText.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneOnlyOneColorOnText.setLayout(flowLayout);
+				jPaneOnlyOneColorOnText.add(getJCheckBoxOnlyOneColorOnText(), null);
+				jPaneOnlyOneColorOnText.add(getJLabelOnlyOneColorOnText(), null);
+			}
+			return jPaneOnlyOneColorOnText;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneBeepEnabled</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneBeepEnabled() {
+			if (jPaneBeepEnabled == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneBeepEnabled = new JPanel();
+				jPaneBeepEnabled.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneBeepEnabled.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneBeepEnabled.setLayout(flowLayout);
+				jPaneBeepEnabled.add(getJCheckBoxBeepEnabled(), null);
+				jPaneBeepEnabled.add(getJLabelBeepEnabled(), null);
+			}
+			return jPaneBeepEnabled;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneHidePopupIfThereAreNoItems</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneHidePopupIfThereAreNoItems() {
+			if (jPaneHidePopupIfThereAreNoItems == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneHidePopupIfThereAreNoItems = new JPanel();
+				jPaneHidePopupIfThereAreNoItems.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneHidePopupIfThereAreNoItems.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneHidePopupIfThereAreNoItems.setLayout(flowLayout);
+				jPaneHidePopupIfThereAreNoItems.add(getJCheckBoxHidePopupIfThereAreNoItems(), null);
+				jPaneHidePopupIfThereAreNoItems.add(getJLabelHidePopupIfThereAreNoItems(), null);
+			}
+			return jPaneHidePopupIfThereAreNoItems;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneToForceSelectAnItem</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneToForceSelectAnItem() {
+			if (jPaneToForceSelectAnItem == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneToForceSelectAnItem = new JPanel();
+				jPaneToForceSelectAnItem.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneToForceSelectAnItem.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneToForceSelectAnItem.setLayout(flowLayout);
+				jPaneToForceSelectAnItem.add(getJCheckBoxToForceSelectAnItem(), null);
+				jPaneToForceSelectAnItem.add(getJLabelToForceSelectAnItem(), null);
+			}
+			return jPaneToForceSelectAnItem;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneItemsOrder</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneItemsOrder() {
+			if (jPaneItemsOrder == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneItemsOrder = new JPanel();
+				jPaneItemsOrder.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneItemsOrder.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneItemsOrder.setLayout(flowLayout);
+				jPaneItemsOrder.add(getJComboBoxItemsOrder(), null);
+				jPaneItemsOrder.add(getJLabelItemsOrder(), null);
+			}
+			return jPaneItemsOrder;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneShowAllItemsInListBox</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneShowAllItemsInListBox() {
+			if (jPaneShowAllItemsInListBox == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneShowAllItemsInListBox = new JPanel();
+				jPaneShowAllItemsInListBox.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneShowAllItemsInListBox.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneShowAllItemsInListBox.setLayout(flowLayout);
+				jPaneShowAllItemsInListBox.add(getJCheckBoxShowAllItemsInListBox(), null);
+				jPaneShowAllItemsInListBox.add(getJLabelShowAllItemsInListBox(), null);
+			}
+			return jPaneShowAllItemsInListBox;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneLanguageRules</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneLanguageRules() {
+			if (jPaneLanguageRules == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneLanguageRules = new JPanel();
+				jPaneLanguageRules.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneLanguageRules.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneLanguageRules.setLayout(flowLayout);
+				jPaneLanguageRules.add(getJComboBoxLanguageRules(), null);
+				jPaneLanguageRules.add(getJLabelLanguageRules(), null);
+			}
+			return jPaneLanguageRules;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneCaseSensitive</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneCaseSensitive() {
+			if (jPaneCaseSensitive == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneCaseSensitive = new JPanel();
+				jPaneCaseSensitive.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneCaseSensitive.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneCaseSensitive.setLayout(flowLayout);
+				jPaneCaseSensitive.add(getJCheckBoxCaseSensitive(), null);
+				jPaneCaseSensitive.add(getJLabelCaseSensitive(), null);
+			}
+			return jPaneCaseSensitive;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneCompleteArrowKeySelection</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneCompleteArrowKeySelection() {
+			if (jPaneCompleteArrowKeySelection == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneCompleteArrowKeySelection = new JPanel();
+				jPaneCompleteArrowKeySelection.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneCompleteArrowKeySelection.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneCompleteArrowKeySelection.setLayout(flowLayout);
+				jPaneCompleteArrowKeySelection.add(getJCheckBoxCompleteArrowKeySelection(), null);
+				jPaneCompleteArrowKeySelection.add(getJLabelCompleteArrowKeySelection(), null);
+			}
+			return jPaneCompleteArrowKeySelection;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneDisplayAllItemsWithArrowButton</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneDisplayAllItemsWithArrowButton() {
+			if (jPaneDisplayAllItemsWithArrowButton == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneDisplayAllItemsWithArrowButton = new JPanel();
+				jPaneDisplayAllItemsWithArrowButton.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneDisplayAllItemsWithArrowButton.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneDisplayAllItemsWithArrowButton.setLayout(flowLayout);
+				jPaneDisplayAllItemsWithArrowButton.add(getJCheckBoxDisplayAllItemsWithArrowButton(), null);
+				jPaneDisplayAllItemsWithArrowButton.add(getJLabelDisplayAllItemsWithArrowButton(), null);
+			}
+			return jPaneDisplayAllItemsWithArrowButton;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneCellRenderer</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneCellRenderer() {
+			if (jPaneCellRenderer == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.LEFT);
+				jPaneCellRenderer = new JPanel();
+				jPaneCellRenderer.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneCellRenderer.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				jPaneCellRenderer.setLayout(flowLayout);
+				jPaneCellRenderer.add(getJComboBoxCellRenderer(), null);
+				jPaneCellRenderer.add(getJLabelCellRenderer(), null);
+			}
+			return jPaneCellRenderer;
+		}
+
+		/**
+		 * <p>This method initializes <code>jPaneButtons</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneButtons() {
+			if (jPaneButtons == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.RIGHT);
+				jPaneButtons = new JPanel();
+				jPaneButtons.setPreferredSize(new Dimension(subPanelWidth, subPanelHeight));
+				jPaneButtons.setLayout(flowLayout);
+				jPaneButtons.add(getJButtonReset(), null);
+				jPaneButtons.add(getJButtonNew(), null);
+			}
+			return jPaneButtons;
+		}		
+		
+		/**
+		 * <p>This method initializes <code>jComboBoxConstructors</code>.</p>	
+		 * 	
+		 * @return javax.swing.JComboBox	
+		 */
+		private JComboBox getJComboBoxConstructors() {
+			if (jComboBoxConstructors == null) {
+				jComboBoxConstructors = new JComboBox();
+				jComboBoxConstructors.setEditable(false);
+				jComboBoxConstructors.setPreferredSize(new Dimension(jComboBoxConstructorsWidth, jComboBoxConstructorsHeight));
+
+				jComboBoxConstructors.getModel().addListDataListener(new ListDataListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
+					 */
+					public void contentsChanged(ListDataEvent e) {
+						Object item = jComboBoxConstructors.getSelectedItem();
+
+						if (item != null)
+							jComboBoxConstructors.setToolTipText(item.toString());
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalAdded(ListDataEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalRemoved(ListDataEvent e) {
+					}
+				});
+
+				jComboBoxConstructors.addPopupMenuListener(new PopupMenuListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.PopupMenuListener#popupMenuCanceled(javax.swing.event.PopupMenuEvent)
+					 */
+					public void popupMenuCanceled(PopupMenuEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.PopupMenuListener#popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent)
+					 */
+					public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.PopupMenuListener#popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent)
+					 */
+					public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+						lastSelectedConstructor = jComboBoxConstructors.getSelectedItem();
+					}				
+				});
+			}
+			return jComboBoxConstructors;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jComboBoxItemsOrder</code>.</p>
+		 * 	
+		 * @return javax.swing.JComboBox	
+		 */
+		private JComboBox getJComboBoxItemsOrder() {
+			if (jComboBoxItemsOrder == null) {
+				jComboBoxItemsOrder = new JComboBox();
+				jComboBoxItemsOrder.setEditable(false);
+				jComboBoxItemsOrder.setPreferredSize(new Dimension(jComboBoxWidth, jComboBoxHeight));
+
+				jComboBoxItemsOrder.getModel().addListDataListener(new ListDataListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
+					 */
+					public void contentsChanged(ListDataEvent e) {
+						Object item = jComboBoxItemsOrder.getSelectedItem();
+
+						if (item != null)
+							jComboBoxItemsOrder.setToolTipText(item.toString());
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalAdded(ListDataEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalRemoved(ListDataEvent e) {
+					}
+				});
+
+				jComboBoxItemsOrder.addItem(Messages.getText("maintain_position"));
+				jComboBoxItemsOrder.addItem(Messages.getText("alphabetical_ordered"));
+				jComboBoxItemsOrder.addItem(Messages.getText("disordered"));
+			}
+
+			return jComboBoxItemsOrder;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jComboBoxLanguageRules</code>.</p>
+		 * 	
+		 * @return javax.swing.JComboBox	
+		 */
+		private JComboBox getJComboBoxLanguageRules() {
+			if (jComboBoxLanguageRules == null) {
+				jComboBoxLanguageRules = new JComboBox();
+				jComboBoxLanguageRules.setEditable(false);
+				jComboBoxLanguageRules.setPreferredSize(new Dimension(jComboBoxWidth, jComboBoxHeight));
+
+				jComboBoxLanguageRules.getModel().addListDataListener(new ListDataListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
+					 */
+					public void contentsChanged(ListDataEvent e) {
+						Object item = jComboBoxLanguageRules.getSelectedItem();
+
+						if (item != null)
+							jComboBoxLanguageRules.setToolTipText(item.toString());
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalAdded(ListDataEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalRemoved(ListDataEvent e) {
+					}
+				});
+
+				jComboBoxLanguageRules.addItem("es_ES");
+				jComboBoxLanguageRules.addItem("en_US");
+				jComboBoxLanguageRules.addItem("fr_FR");
+			}
+
+			return jComboBoxLanguageRules;
+		}
+		
+
+		/**
+		 * <p>This method initializes <code>jComboBoxCellRenderer</code>.</p>
+		 * 	
+		 * @return javax.swing.JCheckBox	
+		 */
+		private JComboBox getJComboBoxCellRenderer() {
+			if (jComboBoxCellRenderer == null) {
+				jComboBoxCellRenderer = new JComboBox();
+				jComboBoxCellRenderer.setEditable(false);
+				jComboBoxCellRenderer.setPreferredSize(new Dimension(jComboBoxWidth, jComboBoxHeight));
+
+				jComboBoxCellRenderer.getModel().addListDataListener(new ListDataListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
+					 */
+					public void contentsChanged(ListDataEvent e) {
+						Object item = jComboBoxCellRenderer.getSelectedItem();
+
+						if (item != null)
+							jComboBoxCellRenderer.setToolTipText(item.toString());
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalAdded(ListDataEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalRemoved(ListDataEvent e) {
+					}
+				});
+
+				jComboBoxCellRenderer.addItem("Default");
+				jComboBoxCellRenderer.addItem("Sample_BG_Color");
+			}
+
+			return jComboBoxCellRenderer;
+		}
+		
+		/**
+		 * <p>Adds a constructor item to <code>jComboBoxConstructors</code>, and if it`s needed configures the configuration options of this JPanel.</p>
+		 *  
+		 * @param name Constructor name
+		 */
+		public void addConstructorItem(String name) {
+			this.jComboBoxConstructors.addItem(name);
+		
+			// Displays description of the first item added by default
+			if (this.lastSelectedConstructor == null)
+			{
+				this.lastSelectedConstructor = getJComboBoxConstructors().getSelectedItem();
+			}
+		}
+	
+		/**
+		 * @see JComboBox#getSelectedIndex()
+		 */
+		public int getSelectedComboBoxItemsOrder() {
+			return jComboBoxItemsOrder.getSelectedIndex();
+		}
+
+		/**
+		 * @see JComboBox#setSelectedIndex(int)
+		 */
+		public void setSelectedComboBoxItemsOrder(int index) {
+			jComboBoxItemsOrder.setSelectedIndex(index);
+		}
+
+		/**
+		 * @see JComboBox#getSelectedIndex()
+		 */
+		public int getSelectedComboBoxLanguageRules() {
+			return jComboBoxLanguageRules.getSelectedIndex();
+		}
+		
+		/**
+		 * @see JComboBox#setSelectedIndex(int)
+		 */
+		public void setSelectedComboBoxLanguageRules(int index) {
+			jComboBoxLanguageRules.setSelectedIndex(index);
+		}
+
+		/**
+		 * <p>Gets the selected cell renderer.</p>
+		 * 
+		 * @return the selected cell renderer index
+		 */
+		public int getSelectedComboBoxCellRendererIndex() {
+			return jComboBoxCellRenderer.getSelectedIndex();
+		}
+
+		/**
+		 * @see JComboBox#getSelectedIndex()
+		 */
+		public int getSelectedComboBoxConstructor() {
+			return jComboBoxConstructors.getSelectedIndex();
+		}
+
+		/**
+		 * <p>Gets an string that identifies the selected items order.</p>
+		 * 
+		 * @return text that identifies the selected items order
+		 */
+		public String getSelectedComboBoxItemsOrderText() {
+			return jComboBoxItemsOrder.getSelectedItem().toString();
+		}
+
+		/**
+		 * <p>Gets an string that identifies the selected language rule.</p>
+		 * 
+		 * @return text that identifies the selected language rule
+		 */
+		public String getSelectedComboBoxLanguageRuleText() {
+			return jComboBoxLanguageRules.getSelectedItem().toString();
+		}
+		
+		/**
+		 * <p>Gets an string that identifies the selected cell renderer.</p>
+		 * 
+		 * @return text that identifies the selected cell renderer
+		 */
+		public String getSelectedComboBoxCellRenderer() {
+			return jComboBoxCellRenderer.getSelectedItem().toString();
+		}
+
+		/**
+		 * <p>This method initializes <code>jButtonNew</code>.</p>
+		 * 	
+		 * @return javax.swing.JButton	
+		 */
+		private JButton getJButtonNew() {
+			if (jButtonNew == null) {
+				jButtonNew = new JButton();
+				jButtonNew.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
+				jButtonNew.setText(Messages.getText("new"));
+			}
+			return jButtonNew;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jButtonEnableParametersConfiguration</code>.</p>
+		 * 	
+		 * @return javax.swing.JButton	
+		 */
+		private JButton getJButtonEnableParametersConfiguration() {
+			if (jButtonEnableParametersConfiguration == null) {
+				jButtonEnableParametersConfiguration = new JButton();
+				jButtonEnableParametersConfiguration.setPreferredSize(new Dimension(subPanelWidth, buttonHeight));
+				jButtonEnableParametersConfiguration.setText(Messages.getText("configure"));
+				
+				jButtonEnableParametersConfiguration.addMouseListener(new MouseAdapter() {
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent e) {
+						if (getJComboBoxConstructors().getItemCount() == 0) {
+							JOptionPane.showMessageDialog(null, Messages.getText("cant_configure_parameters"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+							return;
+						}
+						
+						isConfiguring = !isConfiguring;
+
+						enableAllConfigurationComponents(isConfiguring);
+					}
+				});
+			}
+			return jButtonEnableParametersConfiguration;
+		}
+
+		/**
+		 * <p>Sets all configuration components enabled or disabled according the value of the parameter.</p>
+		 * 
+		 * @param b a boolean value
+		 */
+		private void enableAllConfigurationComponents(boolean b) {
+			getJLabelOnlyOneColorOnText().setEnabled(b);
+			getJCheckBoxOnlyOneColorOnText().setEnabled(b);
+
+			getJLabelBeepEnabled().setEnabled(b);
+			getJCheckBoxBeepEnabled().setEnabled(b);
+
+			getJLabelHidePopupIfThereAreNoItems().setEnabled(b);
+			getJCheckBoxHidePopupIfThereAreNoItems().setEnabled(b);
+
+			getJLabelToForceSelectAnItem().setEnabled(b);
+			getJCheckBoxToForceSelectAnItem().setEnabled(b);
+
+			getJLabelCompleteArrowKeySelection().setEnabled(b);
+			getJCheckBoxCompleteArrowKeySelection().setEnabled(b);
+
+			getJLabelDisplayAllItemsWithArrowButton().setEnabled(b);
+			getJCheckBoxDisplayAllItemsWithArrowButton().setEnabled(b);
+
+			getJLabelCellRenderer().setEnabled(b);
+			getJComboBoxCellRenderer().setEnabled(b);
+			
+			getJLabelItemsOrder().setEnabled(b);
+			getJComboBoxItemsOrder().setEnabled(b);
+
+			getJLabelShowAllItemsInListBox().setEnabled(b);
+			getJCheckBoxShowAllItemsInListBox().setEnabled(b);
+
+			getJLabelLanguageRules().setEnabled(b);
+			getJComboBoxLanguageRules().setEnabled(b);
+
+			getJLabelCaseSensitive().setEnabled(b);
+			getJCheckBoxCaseSensitive().setEnabled(b);
+		}
+
+		/**
+		 * <p>Reset the configuration options of this pane to their default value.</p>
+		 */
+		private void resetConfigurationPanel() {
+			isConfiguring = false;
+			
+			// JComboBoxConstructors (The constructor selected)
+			if (getJComboBoxConstructors().getItemCount() > 0)
+				getJComboBoxConstructors().setSelectedIndex(0);
+			else
+				getJComboBoxConstructors().setSelectedIndex(-1);
+
+			
+			// Disable all options
+			enableAllConfigurationComponents(false);
+			
+			// Only One Color
+			getJCheckBoxOnlyOneColorOnText().setSelected(JComboBoxConfigurableLookUp.DEFAULT_ONLY_ONE_COLOR_ON_TEXT_CONFIGURATION);
+			
+			// Beep Enabled
+			getJCheckBoxBeepEnabled().setSelected(JComboBoxConfigurableLookUp.DEFAULT_BEEP_ENABLED_CONFIGURATION);
+
+			// Hide Popup If There Are No Items
+			getJCheckBoxHidePopupIfThereAreNoItems().setSelected(JComboBoxConfigurableLookUp.DEFAULT_HIDE_POPUP_IF_THERE_ARE_NO_ITEMS_CONFIGURATION);
+			
+			// To Force Select An Item
+			getJCheckBoxToForceSelectAnItem().setSelected(JComboBoxConfigurableLookUp.DEFAULT_TO_FORCE_SELECT_AN_ITEM_CONFIGURATION);
+			
+			// Complete Arrow Key Selection
+			getJCheckBoxCompleteArrowKeySelection().setSelected(JComboBoxConfigurableLookUp.DEFAULT_COMPLETE_ARROW_KEY_SELECTION_CONFIGURATION);
+			
+			// Display All Items With Arrow Button
+			getJCheckBoxDisplayAllItemsWithArrowButton().setSelected(JComboBoxConfigurableLookUp.DEFAULT_DISPLAY_ALL_ITEMS_WITH_ARROW_BUTTON_CONFIGURATION);
+			
+			// Cell Renderer -> the default (that's a the position 0)
+			getJComboBoxCellRenderer().setSelectedIndex(DEFAULT_CELL_RENDERER);
+
+			// Items order
+			getJComboBoxItemsOrder().setSelectedIndex(DefaultComboBoxConfigurableLookUpModel.DEFAULT_ITEMS_ORDER_CONFIGURATION);
+			
+			// Show all items in list box
+			getJCheckBoxShowAllItemsInListBox().setSelected(DefaultComboBoxConfigurableLookUpModel.DEFAULT_SHOW_ALL_ITEMS_IN_LIST_BOX_CONFIGURATION);
+			
+			// Language rules
+			getJComboBoxLanguageRules().setSelectedIndex(0); // es_ES
+
+			// Case Sensitive
+			getJCheckBoxCaseSensitive().setSelected(DefaultComboBoxConfigurableLookUpModel.DEFAULT_CASE_SENSITIVE_CONFIGURATION);
+		}	
+	}
+
+	
+	/**
+	 * <p>A <code>JPanel</code> for the configuration and create a new JComboBoxLookUpConfigurable for testing.</p>
+	 *  
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	private class OtherTestsJPanel extends JPanel implements Serializable {
+		private static final long serialVersionUID = 402109040183526786L;
+
+		private final int panelWidth = 410;
+		private final int panelHeight = 570;
+		private final int buttonWidth = 90;
+		private final int buttonHeight = 20;
+		private final int methodsPanelWidth = 390;
+		private final int methodsPanelHeight = 60;
+		private final int otherUtilitiesJTabbedPaneWidth = methodsPanelWidth;
+		private final int otherUtilitiesJTabbedPaneHeight = 435;
+		private final int columnsOfJTextAreaDescriptionInstructions = 34;
+		private final int rowsOfJTextAreaDescriptionInstructions = 22;
+		private final int jScrollPaneIncrementConstant = 10;
+		private final int jLabelWidth = 70;
+		private final int jLabelHeight = buttonHeight;
+		private final int parametersTextFieldWidth = methodsPanelWidth - jLabelWidth - 25; // -25 for the margins
+		private final int parametersTextFieldHeight = 20;
+		private final int buttonsPanelHeight = 30;
+		private final int buttonsPanelWidth = methodsPanelWidth;
+		private final int jComboBoxWidth = 180;
+		private final int jComboBoxHeigth = 20;
+		private JComboBox jComboBoxMethods = null;
+		private JTextField jTextField = null;
+		private JButton jButtonTest = null;
+		private JLabel jLabelMethod = null;
+		private JPanel jPanelMethods = null;
+		private JLabel jLabelComponents = null;
+		private JLabel jLabelParameters = null;
+		private JComboBox jComboBoxTestObjects = null;
+		private JTextArea jTextAreaDescriptionInstructions = null;
+		private JButton jButtonReset = null;
+		private JPanel jPanelButtons = null;
+		private Vector<Object> methods = null;
+		private Object lastSelectedMethod = null;
+		private Vector<Object> currentMethodTypes = null;
+		private JScrollPane jScrollPaneDescriptionInstructions = null;
+		String textHelp;
+		private String globalHelp;
+		private Map<Object, Object> testObjects;
+		private JButton jButtonFill = null;
+		private JButton jButtonOtherTestsHelp = null;
+		private JTabbedPane jTabbedPaneOtherUtilities = null;
+		private JScrollPane jScrollPaneLog = null;
+		private JTextArea jTextAreaLog = null;
+
+		/**
+		 * <p>Default constructor without parameters.</p>
+		 */
+		public OtherTestsJPanel() {
+			super();
+		}
+		
+		/**
+		 * <p>Default constructor with 1 parameter.</p>
+		 */
+		public OtherTestsJPanel(String path) {
+			super();
+			javaFileMethodsLoader = new JavaFileMethodsLoader(path);
+			this.initialize();
+		}
+		
+		/**
+		 * <p>Initializes this pane.</p>
+		 */
+		private void initialize() {
+			this.setPreferredSize(new Dimension(panelWidth, panelHeight));
+			this.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("proofs"), TitledBorder.LEFT, TitledBorder.TOP, new Font("Dialog", Font.BOLD, 12), Color.black));
+			this.setSize(new Dimension(panelWidth, panelHeight));
+			this.testObjects = new HashMap<Object, Object>();
+			
+			this.add(getJPanelMethods(), null);
+			this.add(getJTabbedPaneOtherUtilities(), null);
+			this.add(getJPaneButtons(), null);
+			textHelp = new String("AYUDA CON LOS PAR�METROS:\n\n" +									
+										"Se permiten 5 tipos de par�metros:\n" +
+										"   - Entero (int) (Ejemplo: 24)\n" +
+										"   - Real corto (float) (Ejemplo: 2.5)\n" +
+										"   - Real largo (double) (Ejemplo: 2.56869479346)\n" +
+										"   - Booleano (boolean) (Ejemplo valor true: T) (Ejemplo valor false: F)\n" +
+										"   - Cadena de caracteres (String) (Se deben usar comillas dobles) (Ejemplo: \"La casa.\")\n" +
+										"   - Car�cter (char) (Se deben usar comillas simples) (Ejemplo: 'a')\n\n" +
+										"Los par�metros se deben escribir separados por coma:\n" +
+										"   Ejemplo: 2, 3.5, true, \"El coche\", 'c'\n");
+
+			globalHelp = new String("   AYUDA CON LOS PAR�METROS:\n" +
+									"   ==========================\n" +									
+									"   Se permiten 5 tipos de par�metros:\n" +
+									"      - Entero (int) (Ejemplo: 24)\n" +
+									"      - Real corto (float) (Ejemplo: 2.5)\n" +
+									"      - Real largo (double) (Ejemplo: 2.56869479346)\n" +
+									"      - Booleano/Bandera (boolean) (Ejemplo valor cierto: true) (Ejemplo valor falso: false)\n" +
+									"      - Cadena de caracteres (String) (Se deben usar comillas dobles) (Ejemplo: \"La casa.\")\n" +
+									"      - Car�cter (char) (Se deben usar comillas simples) (Ejemplo: 'a')\n" +
+									"      - Objeto (Object) (Se considerar� como un item a a�adir o quitar a un JComboBox; se\n" +
+									"           escribir� como si fuese una cadena de caracteres (String)) (Ejemplo: \"El reloj\"\n\n" +									
+									"   Los par�metros se deben escribir separados por coma:\n" +
+									"      Ejemplo: 2, 3.5, true, \"El coche\", 'c', \"El reloj\"\n\n\n" +
+									"   AYUDA PANEL \"OTRAS PRUEBAS\" :\n" +
+									"   =============================\n" +
+									"   + JComboBox \"Operaci�n\" :\n" +
+									"      Puede seleccionar la operaci�n que desee realizar.\n\n" +
+									"   + JComboBox \"Objeto\" :\n" +
+									"      Puede seleccionar el objeto sobre el que realizar\n" +
+									"   la operaci�n seleccionada.\n\n" +
+									"   + Pesta�a \"Descripci�n\" :\n" +
+									"   - �rea de texto \"Descripci�n\" :\n" +
+									"      Muestra informaci�n de la operaci�n seleccionada y\n" +
+									"   puede mostrar esta informaci�n de ayuda acerca del\n" +
+									"   manejo de esta aplicaci�n\n\n" +
+									"   - Campo de texto \"Par�metros\" :\n" +
+									"      Permite introducir par�metros para probar la operaci�n\n" +
+									"   seleccionada sobre el objeto seleccionado. Se debe introducir\n" +
+									"   par�metros del mismo tipo que los necesarios por la operaci�n,\n" +
+									"   y el mismo n�mero. En caso de que la operaci�n no necesite\n" +
+									"   par�metros de entrada, este campo estar� deshabilitado. Y en\n" +
+									"   en caso que no el usuario no pueda introducir un tipo de\n" +
+									"   par�metro (tipo distinto a los soportados), en caso de poderse\n" +
+									"   realizar la operaci�n, se usar�n valores por defecto desde la\n" +
+									"   aplicaci�n (y no escribir el par�metro).\n\n" +	
+									"   - Bot�n \"Rellenar\" :\n" +
+									"      A�ade un conjunto de items por defecto al objeto actual,\n" +
+									"   permite as� al usuario probar el objeto sin tener que introducir\n" +
+									"   datos manualmente.\n\n" +
+									"   - Bot�n \"Reset\" :\n" +
+									"      Puls�ndolo deja el panel \"Otras Pruebas\" tal y como\n" +
+									"   estaba inicialmente.\n\n" +
+									"   - Bot�n \"Test\" :\n" +
+									"      Puls�ndolo se intenta ejecutar un test de la operaci�n\n" +
+									"   seleccionada sobre el objeto seleccionado, y usando los\n" +
+									"   par�metros introducidos en caso necesario.\n" +
+									"      El test puede no ejecutarse si algo de lo anterior no es\n" +
+									"   correcto.\n\n" +
+									"   + Pesta�a \"Log\" :\n" +
+									"      Se va mostrando el resultado de las operaciones, as� como\n" +
+									"   texto de depuraci�n que puedan ir generando los objetos\n" +
+									"   objetos seg�n se usen.");
+
+			this.inializeMethods();
+		}
+		
+		/**
+		 * <p>Pass a JavaFileMethodsLoader object that has been used for load a the <code>JComboBoxLookUpConfigurable</code> class file.</p>
+		 * 
+		 * @param methodsLoader A JavaFileMethodsLoader object
+		 */
+		public void setJavaFileMethodsLoader(JavaFileMethodsLoader methodsLoader) {
+			javaFileMethodsLoader = methodsLoader;
+			this.initialize();
+		}
+		
+		/**
+		 * <p>Add a method to a private Vector with all the methods that this pane will use.</p>
+		 */
+		private void inializeMethods() {
+			methods = new Vector<Object>(0, 1);
+			
+			/* Create object without parameters */
+			MethodsDescription description = new MethodsDescription();
+			methods.add(description);
+		}
+
+		/**
+		 * <p>This method initializes <code>jComboBoxMethods</code>.</p>
+		 * 	
+		 * @return javax.swing.JComboBox	
+		 */
+		private JComboBox getJComboBoxMethods() {
+			if (jComboBoxMethods == null) {
+				jComboBoxMethods = new JComboBox();
+				jComboBoxMethods.setPreferredSize(new Dimension(jComboBoxWidth, jComboBoxHeigth));
+
+				jComboBoxMethods.getModel().addListDataListener(new ListDataListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
+					 */
+					public void contentsChanged(ListDataEvent e) {
+						Object item = jComboBoxMethods.getSelectedItem();
+
+						if (item != null)
+							jComboBoxMethods.setToolTipText(item.toString());
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalAdded(ListDataEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalRemoved(ListDataEvent e) {
+					}
+				});
+
+				jComboBoxMethods.addPopupMenuListener(new PopupMenuListener() {
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.PopupMenuListener#popupMenuCanceled(javax.swing.event.PopupMenuEvent)
+					 */
+					public void popupMenuCanceled(PopupMenuEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.PopupMenuListener#popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent)
+					 */
+					public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+						// If the user has selected another method -> show its description
+						Object item = jComboBoxMethods.getSelectedItem();
+						if (item != null)
+						{
+							if ((lastSelectedMethod == null) || (!lastSelectedMethod.equals(item)))
+							{
+								displayMethodDescription(item);
+
+								currentMethodTypes = javaFileMethodsLoader.getMethodParametersType(item.toString());
+
+								// Clears the previous parameters
+								getJTextField().setText("");
+
+								// Updates the editable status of the field with parameters
+								if (currentMethodTypes.size() == 0)
+									getJTextField().setEditable(false);
+								else
+									getJTextField().setEditable(true);
+							}
+						}
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.PopupMenuListener#popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent)
+					 */
+					public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+						lastSelectedMethod = jComboBoxMethods.getSelectedItem();
+					}				
+				});
+			}
+
+			return jComboBoxMethods;
+		}
+		
+		/**
+		 * <p>Displays in the <code>JTextAreaDescriptionInstructions</code> information about a method.</p>
+		 * 
+		 * @param method A method
+		 */
+		private void displayMethodDescription(Object method) {
+			// Adds the description text
+			String methodHead = new String("public " + method);
+			this.getJTextAreaDescriptionInstructions().setText(javaFileMethodsLoader.getMethodDocumentation(methodHead) + "\n" + method);
+			
+			// Adjusts the view (jTextAreaDescriptionInstructions) to the jtreeRoot-left corner
+			this.getJTextAreaDescriptionInstructions().getCaret().setDot(0);
+		}	
+
+		/**
+		 * <p>Adds an method item to the <code>jComboBoxMethods</code>.</p>
+		 * 
+		 * @param name Name of the new method
+		 */
+		public void addMethodItem(String name) {
+			this.jComboBoxMethods.addItem(name);		
+			
+			// Displays description of the first item added by default
+			if (this.lastSelectedMethod == null)
+			{
+				this.lastSelectedMethod = getJComboBoxMethods().getSelectedItem();
+				currentMethodTypes = javaFileMethodsLoader.getMethodParametersType((String)lastSelectedMethod);
+				
+				if (currentMethodTypes.size() == 0)
+					getJTextField().setEditable(false);
+				else
+					getJTextField().setEditable(true);
+				
+				displayMethodDescription(name);
+			}
+		}
+		
+		/**
+		 * <p>Removes a method item from the <code>jComboBoxMethods</code>.</p>
+		 * 
+		 * @param name Name of a method to remove
+		 */
+		public void removeMethodItem(String name) {
+			this.jComboBoxMethods.removeItem(name);
+		}
+		
+		/**
+		 * <p>Removes all method items from the <code>jComboBoxMethods</code>.</p>
+		 */
+		public void removeAllMethodItems() {
+			this.jComboBoxMethods.removeAll();
+		}
+
+		/**
+		 * <p>This method initializes <code>jTextField</code>.</p>
+		 * 	
+		 * @return javax.swing.JTextField	
+		 */
+		private JTextField getJTextField() {
+			if (jTextField == null) {
+				jTextField = new JTextField();
+				jTextField.setPreferredSize(new Dimension(parametersTextFieldWidth, parametersTextFieldHeight));
+			}
+			return jTextField;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelMethod</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelMethod() {
+			if (jLabelMethod == null) {
+				jLabelMethod = new JLabel();
+				jLabelMethod.setText(Messages.getText("method"));
+			}
+			return jLabelMethod;
+		}
+
+		/**
+		 * <p>This method initializes <code>jLabelParameters</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelParameters() {
+			if (jLabelParameters == null) {
+				jLabelParameters = new JLabel();
+				jLabelParameters.setPreferredSize(new Dimension(this.jLabelWidth, this.jLabelHeight));
+				jLabelParameters.setText(Messages.getText("parameters"));
+			}
+			return jLabelParameters;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jPanelMethods</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPanelMethods() {
+			if (jPanelMethods == null) {
+				jPanelMethods = new JPanel();		
+				jPanelMethods.setPreferredSize(new Dimension(methodsPanelWidth, methodsPanelHeight));
+				jPanelMethods.setSize(new Dimension(methodsPanelWidth, methodsPanelHeight));
+				jPanelMethods.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+				
+				GridLayout gridLayout = new GridLayout(2, 2);
+				gridLayout.setHgap(4);
+				gridLayout.setVgap(4);
+				jPanelMethods.setLayout(gridLayout);
+				
+				jPanelMethods.add(getJLabelMethod());
+				jPanelMethods.add(getJLabelComponents());
+				jPanelMethods.add(getJComboBoxMethods());
+				jPanelMethods.add(getJComboBoxTestObjects());
+			}
+			return jPanelMethods;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jLabelComponents</code>.</p>
+		 * 	
+		 * @return javax.swing.JLabel	
+		 */
+		private JLabel getJLabelComponents() {
+			if (jLabelComponents == null) {
+				jLabelComponents = new JLabel();
+				jLabelComponents.setText(Messages.getText("object"));
+			}
+			return jLabelComponents;
+		}
+
+		/**
+		 * <p>This method initializes <code>jComboBoxTestObjects</code>.</p>
+		 * 	
+		 * @return javax.swing.JComboBox	
+		 */
+		private JComboBox getJComboBoxTestObjects() {
+			if (jComboBoxTestObjects == null) {
+				jComboBoxTestObjects = new JComboBox();
+				jComboBoxTestObjects.setPreferredSize(new Dimension(jComboBoxWidth, jComboBoxHeigth));
+				jComboBoxTestObjects.setSize(new Dimension(jComboBoxWidth, jComboBoxHeigth));
+				jComboBoxTestObjects.setMaximumSize(new Dimension(jComboBoxWidth, jComboBoxHeigth));
+
+				jComboBoxTestObjects.getModel().addListDataListener(new ListDataListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
+					 */
+					public void contentsChanged(ListDataEvent e) {
+						Object item = jComboBoxTestObjects.getSelectedItem();
+
+						if (item != null)
+							jComboBoxTestObjects.setToolTipText(item.toString());
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalAdded(ListDataEvent e) {
+					}
+
+					/*
+					 * (non-Javadoc)
+					 * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
+					 */
+					public void intervalRemoved(ListDataEvent e) {
+					}
+				});
+			}
+			return jComboBoxTestObjects;
+		}
+		
+		/**
+		 * <p>Adds an object for testing.</p>
+		 * 
+		 * @param key A reference/name of the object
+		 * @param object The object
+		 */
+		public void addTestObject(Object key, Object object) {
+			this.testObjects.put(key, object);
+			this.jComboBoxTestObjects.addItem(key);
+		}
+		
+		/**
+		 * <p>Removes a testing object.</p>
+		 * 
+		 * @param key A reference/name of the object
+		 */
+		public void removeTestObject(Object key) {
+			this.testObjects.remove(key);
+			this.jComboBoxTestObjects.removeItem(key);
+		}
+		
+		/**
+		 * <p>Removes all testing objects.</p>
+		 */
+		public void removeAllTestObjects() {
+			this.testObjects.clear();
+			this.jComboBoxTestObjects.removeAllItems();
+		}
+		
+		/**
+		 * <p>This method initializes <code>jScrollPaneDescriptionInstructions</code>.</p>
+		 * 	
+		 * @return javax.swing.JScrollPane	
+		 */
+		private JScrollPane getJScrollPaneDescriptionInstructions() {
+			if (jScrollPaneDescriptionInstructions == null) {
+				jScrollPaneDescriptionInstructions = new JScrollPane(getJTextAreaDescriptionInstructions());
+				Dimension dimension = getJTextAreaDescriptionInstructions().getPreferredSize();
+				dimension.height += jScrollPaneIncrementConstant;
+				dimension.width += jScrollPaneIncrementConstant;
+				jScrollPaneDescriptionInstructions.setPreferredSize(dimension);
+			}
+			return jScrollPaneDescriptionInstructions;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jTextAreaDescriptionInstructions</code>.</p>
+		 * 	
+		 * @return javax.swing.JTextArea	
+		 */
+		private JTextArea getJTextAreaDescriptionInstructions() {
+			if (jTextAreaDescriptionInstructions == null) {
+				jTextAreaDescriptionInstructions = new JTextArea(rowsOfJTextAreaDescriptionInstructions, columnsOfJTextAreaDescriptionInstructions);
+				jTextAreaDescriptionInstructions.setEditable(false);
+			}
+			return jTextAreaDescriptionInstructions;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jButtonTest</code>.</p>
+		 * 	
+		 * @return javax.swing.JButton	
+		 */
+		private JButton getJButtonTest() {
+			if (jButtonTest == null) {
+				jButtonTest = new JButton();
+				jButtonTest.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
+				jButtonTest.setText(Messages.getText("test"));
+				jButtonTest.addMouseListener(new MouseAdapter() {
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						try {
+							String methodHead = (String)getJComboBoxMethods().getSelectedItem();
+							if (methodHead == null)
+							{
+								JOptionPane.showMessageDialog(null, Messages.getText("selectAMethod"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+								return;
+							}
+							
+							int selectedTestObjectIndex = getJComboBoxTestObjects().getSelectedIndex();
+							if (selectedTestObjectIndex == -1)
+							{
+								JOptionPane.showMessageDialog(null, Messages.getText("selectAComponent"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+								return;
+							}
+							
+							// If the method selected needs an special treatment
+							if (javaFileMethodsLoader.hasTheMethodAnStrangeParameterType(methodHead) || javaFileMethodsLoader.hasTheMethodAnStrangeReturnParameterType(methodHead))
+							{
+								JOptionPane.showMessageDialog(null, Messages.getText("cantTestThisMethod"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+								return;
+							}
+							
+							Vector<Object> parametersWritten = getParametersWritten();
+							if (parametersWritten.size() != currentMethodTypes.size())
+							{
+								JOptionPane.showMessageDialog(null, Messages.getText("incorrectNumberOfParametersWritten"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+								return;
+							}
+							
+							// Defines the type of parameters for the current selected method
+							Class parameterTypes[] = new Class[currentMethodTypes.size()];
+
+							// Create the 'parameters' array
+							Object parameters[] = new Object[currentMethodTypes.size()];
+
+							for (int i = 0; i < currentMethodTypes.size(); i++)
+							{
+								MethodParameter parameter = parametersTypeIsCorrect((String)parametersWritten.get(i), (Integer)currentMethodTypes.get(i));
+	
+								if (parameter == null)
+								{
+									JOptionPane.showMessageDialog(null, Messages.getText("incorrectParameter") + ": " + (String)parametersWritten.get(i), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+									return;
+								}
+								
+								parameters[i] = parameter.getParameter();
+								parameterTypes[i] = parameter.getType();
+							}
+							
+							// Select the "log" tab of the jTabbedPane
+							getJTabbedPaneOtherUtilities().setSelectedIndex(1);							
+							
+							// Gets the frame of the object selected
+							String objectName = getJComboBoxTestObjects().getSelectedItem().toString();
+							JFrame jTestObjectFrame = ((JFrame)testObjects.get(objectName));
+							
+							// Sets the focus to the frame of the selected object
+							((JFrame)jTestObjectFrame).getRootPane().requestDefaultFocus();
+							
+							// Gets the selected object for test
+							Object object = jTestObjectFrame.getContentPane().getComponent(0);
+							
+							// Gets the class of the current selected object
+							Class testObjectClass = object.getClass();
+								
+							// Gets the method that corresponds with the selected method
+							String methodName = javaFileMethodsLoader.getMethodName(methodHead);
+							Method method = testObjectClass.getMethod(methodName, parameterTypes);
+							
+							// Show information about the next method to do 
+							getJTextAreaLog().append(Messages.getText("invoke") +"(" + objectName + ", " + methodName + "):\n");
+							
+							// Invoke the selected method for the selected object
+							Object objectReturned = method.invoke(object, parameters);
+							
+							// Show the results of the method
+							if (objectReturned != null)
+								getJTextAreaLog().append(Messages.getText("resultOf") +"(" + objectName + ", " + methodName + "): " + objectReturned.toString() + "\n");
+						}
+						catch(Exception e) {
+							e.printStackTrace();
+						}
+					}
+				});
+			}
+			return jButtonTest;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jTabbedPaneOtherUtilities</code>.</p>	
+		 * 	
+		 * @return javax.swing.JTabbedPane	
+		 */
+		private JTabbedPane getJTabbedPaneOtherUtilities() {
+			if (jTabbedPaneOtherUtilities == null) {
+				jTabbedPaneOtherUtilities = new JTabbedPane();
+				jTabbedPaneOtherUtilities.setPreferredSize(new Dimension(otherUtilitiesJTabbedPaneWidth, otherUtilitiesJTabbedPaneHeight));
+				
+				JPanel panel1 = new JPanel();
+				panel1.setPreferredSize(new Dimension(otherUtilitiesJTabbedPaneWidth - 10, 30));
+				panel1.add(getJLabelParameters());
+				panel1.add(getJTextField());
+				
+				JPanel tab1Pane = new JPanel();
+				tab1Pane.add(getJScrollPaneDescriptionInstructions());
+				tab1Pane.add(panel1);
+				jTabbedPaneOtherUtilities.addTab(Messages.getText("description"), tab1Pane);
+				
+				jTabbedPaneOtherUtilities.addTab(Messages.getText("log"), getJScrollPaneLog());
+			}
+			return jTabbedPaneOtherUtilities;
+		}
+		
+		/**
+		 * <p>Verifies if a parameter is of one particular type: if <code>true</code> -> returns a <code>MethodParameter</code> object with
+		 * the type codification and the parameter as an object of its type; if <code>false</code> -> returns <code>null</code>.</p>
+		 * 
+		 * @param parameter A parameter as a name
+		 * @param type An Integer object with the codification of the type
+		 * @return <code>Null<code> or a <code>MethodParameter<code> object with an object of the same type as the parameter type, and
+		 *    the codification of the type.
+		 */
+		private MethodParameter parametersTypeIsCorrect(String parameter, Integer type) {
+			MethodParameter methodParameter = new MethodParameter();
+			
+			switch (type.intValue()) {
+			case JavaFileMethodsLoader.BOOLEAN_TYPE:
+				if (parameter.compareTo("true") == 0)
+				{
+					methodParameter.setParameter(new Boolean(true));
+					methodParameter.setType(Boolean.TYPE);				
+				}
+				else
+				{
+					if (parameter.compareTo("false") == 0)
+					{
+						methodParameter.setParameter(new Boolean(false));
+						methodParameter.setType(Boolean.TYPE);				
+					}
+					else
+						return null;
+				}
+				return methodParameter;
+			case JavaFileMethodsLoader.CHAR_TYPE:
+				if ((parameter.length() == 3) && (parameter.charAt(0) == '\'') && (parameter.charAt(2) == '\''))
+				{
+					methodParameter.setParameter(new Character(parameter.charAt(1)));
+					methodParameter.setType(Character.TYPE);				
+				}
+				else
+					return null;
+			case JavaFileMethodsLoader.FLOAT_TYPE:
+				try	{
+					methodParameter.setParameter(new Float(parameter));
+					methodParameter.setType(Float.TYPE);
+					return methodParameter;
+				}
+				catch(Exception e) {
+					return null;
+				}
+			case JavaFileMethodsLoader.DOUBLE_TYPE:
+				try	{
+					methodParameter.setParameter(new Double(parameter));
+					methodParameter.setType(Double.TYPE);
+					return methodParameter;
+				}
+				catch(Exception e) {
+					return null;
+				}
+			case JavaFileMethodsLoader.INT_TYPE:
+				try	{
+					methodParameter.setParameter(new Integer(parameter));
+					methodParameter.setType(Integer.TYPE);
+					return methodParameter;
+				}
+				catch(Exception e) {
+					return null;
+				}
+			case JavaFileMethodsLoader.STRING_TYPE:
+				// If the string is between "" simbols:
+				if ((parameter.charAt(0) == '\"') && (parameter.charAt(parameter.length() - 1) == '\"'))
+				{
+					methodParameter.setParameter(new String(parameter.substring(1, parameter.length() -1)));
+					methodParameter.setType(String.class);
+					return methodParameter;
+				}
+				else
+					return null;
+			case JavaFileMethodsLoader.OBJECT_TYPE:
+				// If the string written is between "" simbols:
+				if ((parameter.charAt(0) == '\"') && (parameter.charAt(parameter.length() - 1) == '\"'))
+				{
+					methodParameter.setParameter(parameter.substring(1, parameter.length() -1));
+					methodParameter.setType(Object.class);
+					return methodParameter;
+				}
+				else
+					return null;
+			default: // JavaFileMethodsLoader.OTHER_TYPE			
+				return null;
+			}
+		}
+		
+		/**
+		 * <p>Return a Vector with the parameters written as <code>String</code>.</p>
+		 * 
+		 * @return A Vector with the parameters written
+		 */
+		private Vector<Object> getParametersWritten() {
+			Vector<Object> parameters = new Vector<Object>(0, 1);
+			
+			String parametersWritten = getJTextField().getText().trim();
+			
+			// If there is only one parameter
+			if (parametersWritten.indexOf(',') == -1)
+			{
+				if (parametersWritten.length() > 0)
+					parameters.add(parametersWritten);
+				else
+					return parameters;
+			}
+			else
+			{
+			StringTokenizer tokens = new StringTokenizer(parametersWritten, ",");
+
+				while(tokens.hasMoreTokens())
+					parameters.add(tokens.nextToken().trim());
+			}
+			
+			return parameters;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jButtonReset</code>.</p>
+		 * 	
+		 * @return javax.swing.JButton	
+		 */
+		private JButton getJButtonReset() {
+			if (jButtonReset == null) {
+				jButtonReset = new JButton();
+				jButtonReset.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
+				jButtonReset.setText(Messages.getText("reset"));
+				jButtonReset.addMouseListener(new MouseAdapter() {
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						resetOtherTestsPanel();
+					}
+				});
+			}
+			return jButtonReset;
+		}
+
+		/**
+		 * <p>Resets this <code>JPanel</code>: all will be similar as at beginning except the log, that won't be reset.</p>
+		 */
+		private void resetOtherTestsPanel() {
+			getJTextAreaDescriptionInstructions().setText("");
+			
+			getJTextField().setText("");
+			
+			if (getJComboBoxMethods().getItemCount() == 0)
+			{
+				getJComboBoxMethods().setSelectedIndex(-1);
+				this.lastSelectedMethod = this.currentMethodTypes = null;
+				getJTextField().setEditable(false);
+			}
+			else
+			{
+				this.getJComboBoxMethods().setSelectedIndex(0);
+				this.lastSelectedMethod = getJComboBoxMethods().getSelectedItem();
+				currentMethodTypes = javaFileMethodsLoader.getMethodParametersType((String)lastSelectedMethod);
+				
+				if (currentMethodTypes.size() == 0)
+					getJTextField().setEditable(false);
+				else
+					getJTextField().setEditable(true);
+				
+				displayMethodDescription(this.lastSelectedMethod);
+			}
+
+			// Removes all test objects (closing the JFrames that cointain them)
+			Object[] objects = testObjects.keySet().toArray();
+			for (int i = 0; i < objects.length; i++)
+			{
+				((JFrame)testObjects.get(objects[i])).dispose();
+				((JFrame)testObjects.get(objects[i])).setVisible(false); // For complete de JFrame close method (it's necessary)
+			}
+
+			// Set selected the firt tab
+			getJTabbedPaneOtherUtilities().setSelectedIndex(0);
+		}
+		
+		/**
+		 * <p>This method initializes <code>jPaneButtons</code>.</p>
+		 * 	
+		 * @return javax.swing.JPanel	
+		 */
+		private JPanel getJPaneButtons() {
+			if (jPanelButtons == null) {
+				FlowLayout flowLayout = new FlowLayout();
+				flowLayout.setAlignment(FlowLayout.RIGHT);
+				jPanelButtons = new JPanel();
+				jPanelButtons.setPreferredSize(new Dimension(buttonsPanelWidth, buttonsPanelHeight));
+				jPanelButtons.setLayout(flowLayout);
+				jPanelButtons.add(getJButtonOtherTestsHelp(), null);
+				jPanelButtons.add(getJButtonFill(), null);
+				jPanelButtons.add(getJButtonReset(), null);
+				jPanelButtons.add(getJButtonTest(), null);
+			}
+			return jPanelButtons;
+		}
+
+		/**
+		 * <p>Returns the number of testing objects that this panel has in this moments.</p>
+		 * 
+		 * @return Number of testing objects that this panel has in this moments
+		 */
+		public int getTestObjectsCount() {
+			return this.getJComboBoxTestObjects().getItemCount();
+		}
+
+		/**
+		 * <p>This method initializes <code>jButtonLog</code>.</p>
+		 * 	
+		 * @return javax.swing.JButton	
+		 */
+		private JButton getJButtonFill() {
+			if (jButtonFill == null) {
+				jButtonFill = new JButton();
+				jButtonFill.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
+				jButtonFill.setText(Messages.getText("fill"));
+				jButtonFill.addMouseListener(new MouseAdapter() {
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						try
+						{
+							// It must be selected a component -> else: show a message dialog and don't fill with data the object
+							int selectedTestObjectIndex = getJComboBoxTestObjects().getSelectedIndex();
+							if (selectedTestObjectIndex == -1)
+							{
+								JOptionPane.showMessageDialog(null, Messages.getText("selectAComponent"), Messages.getText("warning"), JOptionPane.WARNING_MESSAGE);
+								return;
+							}							
+							
+							JFrame jTestObjectFrame = ((JFrame)testObjects.get(getJComboBoxTestObjects().getSelectedItem().toString()));
+							
+							// Sets the focus to the frame of the selected object
+							((JFrame)jTestObjectFrame).getRootPane().requestDefaultFocus();
+							
+							// Gets the selected object for test
+							Object object = jTestObjectFrame.getContentPane().getComponent(0);
+							
+							// Gets the class of the current selected object
+							Class testObjectClass = object.getClass();
+
+							// Defines the type of parameter for the 'addItem' method
+							Class addItemParameterTypes[] = new Class[1];
+							addItemParameterTypes[0] = Object.class;
+
+							// Gets the 'addItem' method of the current selected object
+							Method addItemMethod = testObjectClass.getMethod("addItem", addItemParameterTypes);
+							
+							// ADDS SAMPLE DATA:
+							addSampleData(object, addItemMethod);						
+						}
+						catch(Exception e) {
+							e.printStackTrace();
+						}
+					}
+				});
+			}
+			
+			return jButtonFill;
+		}
+		
+		/**
+		 * <p>This method add sample data (items) to the current selected object invoking the "addItem" method for the object.</p>
+		 * 
+		 * @param object Object where the items will be added
+		 * @param addItemMethod Method "addItem" to invoke
+		 */
+		private void addSampleData(Object object, Method addItemMethod) {
+			try {
+				// Create the 'parameters' array
+				Object parameters[] = new Object[1];
+				
+				// Invokes the 'addItem' method of the object for adding sample items
+				parameters[0] = "_fwAndami";		
+				addItemMethod.invoke(object, parameters);
+				
+				parameters[0] = "appgvSIG";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extAddEventTheme";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extAddIDEELayers";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extCAD";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extCenterViewToPoint";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extJDBC";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extNomenclatorIGN";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extScripting";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extWCS";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "extWMS";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libCorePlugin";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libCq CMS for java";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libDriverManager";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libFMap";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libGDBMS";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libIverUtiles";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libNomeclatorIGN";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libNomenclatorIGN_GUI";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libRemoteServices";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "libUI";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "May�scula1";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "MAY�SCULA2";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "Mayuscula3";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "mayuscula4?";		
+				addItemMethod.invoke(object, parameters);
+				
+				parameters[0] = "min�scula1";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "minuscula2";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "�and�";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "�AND�";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "a";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "aa";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "aaa";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "aaaa";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "aaaaa";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "af�?=)(/?/";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = ".";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "-a,malj'=)/";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "ZZZZZ";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "BLIUE� ";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "etye7yyy-er";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "_abcdefghijklmn�opqrstuvwxyz";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "_0123456789";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "...";		
+				addItemMethod.invoke(object, parameters);
+
+				parameters[0] = "gvSIG";		
+				addItemMethod.invoke(object, parameters);
+				
+				parameters[0] = "�LTIMO ITEM EN A�ADIRSE POR DEFECTO";		
+				addItemMethod.invoke(object, parameters);
+
+			} catch (IllegalArgumentException e) {
+				e.printStackTrace();
+			} catch (IllegalAccessException e) {
+				e.printStackTrace();
+			} catch (InvocationTargetException e) {
+				e.printStackTrace();
+			}		
+		}
+
+		/**
+		 * <p>This method initializes <code>jButtonOtherTestsHelp</code>.</p>
+		 * 	
+		 * @return javax.swing.JButton	
+		 */
+		private JButton getJButtonOtherTestsHelp() {
+			if (jButtonOtherTestsHelp == null) {
+				jButtonOtherTestsHelp = new JButton();
+				jButtonOtherTestsHelp.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
+				jButtonOtherTestsHelp.setText(Messages.getText("help"));
+				jButtonOtherTestsHelp.addMouseListener(new MouseAdapter() {
+					/*
+					 * (non-Javadoc)
+					 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+					 */
+					public void mouseClicked(MouseEvent arg0) {
+						// Selects the 'description' tab pane
+						getJTabbedPaneOtherUtilities().setSelectedIndex(0);
+						
+						// Sets the help text
+						getJTextAreaDescriptionInstructions().setText(globalHelp);
+						
+						// Adjusts the view (jTextAreaDescriptionInstructions) to the jtreeRoot-left corner
+						getJTextAreaDescriptionInstructions().getCaret().setDot(0);
+						
+						// Reset the current method selected
+						lastSelectedMethod = null;
+						getJTextField().setEditable(false);
+						currentMethodTypes = null;
+						getJComboBoxMethods().setSelectedIndex(-1);
+					}					
+				});
+
+			}
+			return jButtonOtherTestsHelp;
+		}
+		
+		/**
+		 * <p>This method initializes <code>jScrollPaneLog</code>.</p>
+		 * 	
+		 * @return javax.swing.JScrollPane	
+		 */
+		private JScrollPane getJScrollPaneLog() {
+			if (jScrollPaneLog == null) {
+				jScrollPaneLog = new JScrollPane(getJTextAreaLog());
+			}
+			return jScrollPaneLog;
+		}
+
+		/**
+		 * <p>This method initializes <code>jTextAreaLog</code>.</p>
+		 * 	
+		 * @return javax.swing.JTextArea	
+		 */
+		private JTextArea getJTextAreaLog() {
+			if (jTextAreaLog == null) {
+				jTextAreaLog = new JTextArea();
+				jTextAreaLog.setEditable(false);
+			}
+			return jTextAreaLog;
+		}
+		
+		/**
+		 * <p>This class has information about a parameter of a method of a class.</p>
+		 * 
+		 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+		 */
+		private class MethodParameter implements Serializable {
+			private static final long serialVersionUID = -6492607912912912179L;
+
+			private Object parameter;
+			private Class type;
+			
+			/**
+			 * <p>Default constructor without parameters.</p>
+			 */
+			public MethodParameter() {
+				super();
+			}
+			
+			/**
+			 * <p>Default constructor with 2 parameters.</p>
+			 * 
+			 * @param parameter The parameter object
+			 * @param type The type of the parameter
+			 */
+			public MethodParameter(Object parameter, Class type) {
+				super();
+				this.parameter = parameter;
+				this.type = type;
+			}
+		
+			/**
+			 * <p>Returns the parameter object.</p>
+			 * 
+			 * @return Parameter object
+			 */
+			public Object getParameter() {
+				return parameter;
+			}
+			
+			/**
+			 * <p>Sets the parameter object.</p>
+			 * 
+			 * @param parameter Parameter object
+			 */
+			public void setParameter(Object parameter) {
+				this.parameter = parameter;
+			}
+			
+			/**
+			 * <p>Returns the type of the parameter.</p>
+			 * 
+			 * @return Type of the parameter
+			 */
+			public Class getType() {
+				return type;
+			}
+			
+			/**
+			 * <p>Sets the type of the parameter.</p>
+			 * 
+			 * @param type Type of the parameter
+			 */
+			public void setType(Class type) {
+				this.type = type;
+			}	
+		}
+	}
+	
+	
+	/**
+	 * <p>This class loads from a java file the methods of the class defined, and has some methods for get or manipulate them
+	 * (It's supposed that the file to load has a determinated structure).</p>
+	 *  
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	private class JavaFileMethodsLoader implements Serializable {
+		private static final long serialVersionUID = 4934916590524133748L;
+
+		private String className;
+		private Map<String, String> methods;
+		private Vector<Object> methodHeads;
+		private String filePath;
+		private File file;
+		
+		public static final int BOOLEAN_TYPE = 0;
+		public static final int STRING_TYPE = 1;
+		public static final int INT_TYPE = 2;
+		public static final int FLOAT_TYPE = 3;
+		public static final int DOUBLE_TYPE = 4;
+		public static final int CHAR_TYPE = 5;
+		public static final int VOID_TYPE = 6;
+		public static final int OBJECT_TYPE = 7;
+		public static final int OTHER_TYPE = 8;
+		
+		/**
+		 * <p>Default constructor without parameters.</p>
+		 */
+		public JavaFileMethodsLoader() {
+			methods = new HashMap<String, String>();
+			methodHeads = new Vector<Object>(0, 1); // Initial capacity = 0; Increment capacity = 1
+		}
+		
+		/**
+		 * <p>Default constructor with a parameter: the path of the file to load.</p>
+		 * 
+		 * <p>Loads that file.</p>
+		 * 
+		 * @param path The path for the file to load
+		 */
+		public JavaFileMethodsLoader(String path) {
+			methods = new HashMap<String, String>();
+			methodHeads = new Vector<Object>(0, 1); // Initial capacity = 0; Increment capacity = 1
+
+			this.filePath = path;
+			this.file = new File(this.filePath);
+			this.className = this.obteinClassName();
+			this.processFile();				
+		}
+		
+		/**
+		 * <p>Obtains the name of the class.</p>
+		 * 
+		 * @return Name of the main class of the file loaded
+		 */
+		private String obteinClassName() {
+			return file.getName().substring(0, file.getName().lastIndexOf('.'));
+		}
+		
+		/**
+		 * <p>Returns the name of the main class of the file loaded.</p>
+		 * 
+		 * @return Name of the main class of the file loaded
+		 */
+		public String getClassName() {
+			return this.className;
+		}
+		
+		/**
+		 * <p>Returns the name of the file loaded.</p>
+		 * 
+		 * @return Name of the file loaded
+		 */
+		public String getClassFileName() {
+			return this.file.getName();
+		}
+		
+		/**
+		 * <p>Returns a method head in order as it was declared/defined in the file loaded.</p>
+		 * 
+		 * @param position Order of the method in the file, for return its head
+		 * @return A method head
+		 */
+		public String getMethodHead(int position) {
+			return (String)methodHeads.get(position);
+		}
+
+		/**
+		 * <p>Returns the documentation of a method.</p>
+		 * 
+		 * @param methodHead A method head
+		 * @return Documentation of a method
+		 */
+		public String getMethodDocumentation(String methodHead) {
+			return (String)methods.get(methodHead);
+		}
+		
+		/**
+		 * <p>Returns only the name from a method head.</p>
+		 * 
+		 * @param methodHead A method head
+		 * @return A name of a method
+		 */
+		public String getMethodName(String methodHead) {
+			int endPosition = methodHead.indexOf('(');
+
+			StringTokenizer tokens = new StringTokenizer(methodHead.substring(0, endPosition), " ");
+
+			int numberOfTokens = tokens.countTokens();
+			
+			if (numberOfTokens == 0)
+				return null;
+			else
+			{
+				// Get the last token -> which is the name of the method
+				for (int i = 0; i < (numberOfTokens - 1); i++)
+					tokens.nextToken();
+				
+				return tokens.nextToken();
+			}
+		}
+		
+		/**
+		 * <p>Returns a vector with the codes of the parameter types of a method from its method head.</p>
+		 * 
+		 * @param methodHead A method head
+		 * @return A vector with the parameter types of a method. Each element in the vector is an Integer object
+		 */
+		public Vector<Object> getMethodParametersType(String methodHead) {
+			Vector<Object> types = new Vector<Object>(0, 1);
+			
+			int startPosition = methodHead.indexOf('(') + 1;
+			int endPosition = methodHead.lastIndexOf(')');
+			
+			StringTokenizer tokens = new StringTokenizer(methodHead.substring(startPosition, endPosition).trim(), ",");
+			
+			a: while(tokens.hasMoreTokens()) {
+				String token = tokens.nextToken().trim();
+				
+				if (token.startsWith("boolean "))
+				{
+					types.add(new Integer(JavaFileMethodsLoader.BOOLEAN_TYPE));
+					continue a;
+				}
+				
+				if (token.startsWith("int "))
+				{
+					types.add(new Integer(JavaFileMethodsLoader.INT_TYPE));
+					continue a;
+				}
+			
+				if (token.startsWith("double "))
+				{
+					types.add(new Integer(JavaFileMethodsLoader.DOUBLE_TYPE));
+					continue a;
+				}
+		
+				if (token.startsWith("String "))
+				{
+					types.add(new Integer(JavaFileMethodsLoader.STRING_TYPE));
+					continue a;
+				}
+	
+				if (token.startsWith("char "))
+				{
+					types.add(new Integer(JavaFileMethodsLoader.CHAR_TYPE));
+					continue a;
+				}
+
+				if (token.startsWith("float "))
+				{
+					types.add(new Integer(JavaFileMethodsLoader.FLOAT_TYPE));
+					continue a;
+				}
+				
+				if (token.startsWith("Object "))
+				{
+					types.add(new Integer(JavaFileMethodsLoader.OBJECT_TYPE));
+					continue a;
+				}
+				
+				// Other type of parameters
+				types.add(new Integer(JavaFileMethodsLoader.OTHER_TYPE));
+			}
+			
+			return types;
+		}
+		
+		/**
+		 * <p>Returns the return type name of a method.</p>
+		 * 
+		 * @param methodHead A method head
+		 * @return A return type name
+		 */
+		public String getMethodReturnTypeName(String methodHead) {
+			int endPosition = methodHead.indexOf('(');
+			String aux = methodHead.substring(0, endPosition);
+			endPosition = aux.lastIndexOf(' ');
+			return methodHead.substring(0, endPosition);
+		}
+		
+		/**
+		 * <p>Returns the code of the return type of a method from its method head.</p>
+		 * 
+		 * @param methodHead A method head
+		 * @return An Integer object with the code
+		 */
+		public Integer getMethodReturnType(String methodHead) {
+			String returnType = getMethodReturnTypeName(methodHead);
+			
+			if (returnType.compareTo("boolean") == 0)
+				return new Integer(JavaFileMethodsLoader.BOOLEAN_TYPE);
+			
+			if (returnType.compareTo("int") == 0)
+				return new Integer(JavaFileMethodsLoader.INT_TYPE);
+		
+			if (returnType.compareTo("double") == 0)
+				return new Integer(JavaFileMethodsLoader.DOUBLE_TYPE);
+	
+			if (returnType.compareTo("String") == 0)
+				return new Integer(JavaFileMethodsLoader.STRING_TYPE);
+
+			if (returnType.compareTo("char") == 0)
+				return new Integer(JavaFileMethodsLoader.CHAR_TYPE);
+
+			if (returnType.compareTo("float") == 0)
+				return new Integer(JavaFileMethodsLoader.FLOAT_TYPE);
+			
+			if (returnType.compareTo("void") == 0)
+				return new Integer(JavaFileMethodsLoader.VOID_TYPE);
+			
+			if (returnType.compareTo("Object") == 0)
+				return new Integer(JavaFileMethodsLoader.OBJECT_TYPE);
+			
+			// Other type of parameters
+			return new Integer(JavaFileMethodsLoader.OTHER_TYPE);
+			
+		}
+		
+		/**
+		 * <p>Returns true if the method has almost one parameter that its type is unkwown <code>(JavaFileMethodsLoader.OTHER_TYPE)</code>.</p>
+		 * 
+		 * @param methodHead A method head
+		 * @return true or false
+		 */
+		public boolean hasTheMethodAnStrangeParameterType(String methodHead) {
+			Vector<Object> types = this.getMethodParametersType(methodHead);
+			Integer otherType = new Integer(JavaFileMethodsLoader.OTHER_TYPE);
+			
+			for (int i = 0; i < types.size(); i++) {
+				if (((Integer)types.get(i)).intValue() == otherType.intValue())
+					return true;
+			}
+			
+			return false;			
+		}
+		
+		/**
+		 * <p>Returns true if the method has a return parameter that its type is unkwown <code>(JavaFileMethodsLoader.OTHER_TYPE)</code>.</p>
+		 * 
+		 * @param methodHead A method head
+		 * @return true or false
+		 */
+		public boolean hasTheMethodAnStrangeReturnParameterType(String methodHead) {
+			Integer otherType = new Integer(JavaFileMethodsLoader.OTHER_TYPE);
+			
+			if (((Integer)getMethodReturnType(methodHead)).intValue() == otherType.intValue())
+				return true;
+			
+			return false;
+		}
+		
+		/**
+		 * <p>Returns the number of methods loaded.</p>
+		 * 
+		 * @return Number of methods loaded
+		 */
+		public int size() {
+			return methodHeads.size();
+		}
+		
+		/**
+		 * <p>Returns the path of the file loaded.</p>
+		 * 
+		 * @return The path of the file loaded
+		 */
+		public String getPath() {
+			return filePath;
+		}
+
+		/**
+		 * <p>Sets a path for a file to load, and loads it.</p>
+		 * 
+		 * @param aPath A path for a file to load
+		 */
+		public void setPath(String aPath) {
+			this.filePath = aPath;
+			file = new File(this.filePath);
+			this.className = this.obteinClassName();
+			this.processFile();
+		}		
+
+		/**
+		 * <p>Verifies if can read the file and invokes a method for analyze it.</p>
+		 */
+		private void processFile() {
+			try
+			{
+				// Verify if exists the file
+				if (!file.exists())
+				{
+				     // File doesn't exists
+					 JOptionPane.showMessageDialog(null, Messages.getText("jOPMessageFileDoesntExists"), Messages.getText("error"), JOptionPane.ERROR_MESSAGE);
+					 return;
+				}
+				
+				// Verify if it's a file
+				if (!file.isFile())
+				{
+					 JOptionPane.showMessageDialog(null, Messages.getText("jOPMessageIncorrectFile"), Messages.getText("error"), JOptionPane.ERROR_MESSAGE);
+					 return;
+				}
+				
+				// Verify if it can be read
+				if (!file.canRead())
+				{
+					 JOptionPane.showMessageDialog(null, Messages.getText("jOPMessageFileWithoutReadPermissions"), Messages.getText("error"), JOptionPane.ERROR_MESSAGE);
+					 return;
+				}
+				
+				analyzeFile();
+			}
+			catch(Exception e)
+			{
+				e.printStackTrace();
+			}
+		}
+		
+		/**
+		 * <p>Analyes/loads a file, obtaining its methods and other information.</p>
+		 * 
+		 * @throws IOException 
+		 */
+		private void analyzeFile() throws IOException {
+			String line, commentary, methodHead;
+			int pos;
+			
+			// Process:
+			// Associates a buffered-reader to the file-reader of the file
+			BufferedReader input = new BufferedReader(new FileReader(file));
+
+			while(input.ready())
+			{
+				// Tries to read a commentary
+				line = input.readLine();
+
+				if (line.startsWith("\t/*")) // This include the "\t/**" and "\t/*" commentary starts
+				{
+					commentary = new String(line.trim());
+					
+					while((pos = (line = input.readLine()).indexOf("*/")) == -1)
+						commentary += "\n " + line.trim();
+					
+					commentary += "\n " + line.substring(0, pos+2).trim();
+					
+					// Tries to read the head of a method
+					line = input.readLine();
+
+					if (line.startsWith("\tpublic ") || line.startsWith("\tprivate ") || line.startsWith("\tprotected "))
+					{
+						// Ignore inner/nested classes
+						if (line.indexOf(" class ") == -1)
+						{
+							// Removes the '{' character if exists and does a trim:
+							if ((pos = line.indexOf("{")) != -1)
+								line = line.substring(0, pos);
+							
+							methodHead = new String(line.trim());
+							commentary = commentary.trim();
+
+							// Adds needed information of the new method
+							this.methodHeads.add(methodHead);
+							this.methods.put(methodHead, commentary);
+						}
+					}
+				}
+			}
+			
+			// Closes the buffered-reader
+			input.close();
+		}
+	}
+	
+	/**
+	 * <p>This class stores for a method, its previous commentary description.</p>
+	 * 
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	private class MethodsDescription implements Serializable {
+		private static final long serialVersionUID = 5425689217735155592L;
+
+		private String methodName;
+		private String description;
+
+		/**
+		 * <p>Default Constructor without parameters.</p>
+		 */
+		public MethodsDescription() {
+			super();
+		}
+
+		/**
+		 * <p>Default Constructor with 2 parameters.</p>
+		 * 
+		 * @param methodName Name of a method
+		 * @param description Description (commentary) of the method
+		 */
+		public MethodsDescription(String methodName, String description) {
+			super();
+			this.methodName = methodName;
+			this.description = description;
+		}
+
+		/**
+		 * <p>Returns the description of this method.</p>
+		 * 
+		 * @return Description of this method
+		 */
+		public String getDescription() {
+			return description;
+		}
+
+		/**
+		 * <p>Sets a description for this method.</p>
+		 * 
+		 * @param description A description for this method
+		 */
+		public void setDescription(String description) {
+			this.description = description;
+		}
+
+		/**
+		 * <p>Returns the name of this method.</p>
+		 * 
+		 * @return The name of this method
+		 */
+		public String getMethodName() {
+			return methodName;
+		}
+
+		/**
+		 * <p>Sets a name of this method.</p>
+		 * 
+		 * @param methodName A name for this method
+		 */
+		public void setMethodName(String methodName) {
+			this.methodName = methodName;
+		}
+	}
+
+	/**
+	 * <p>An output stream that writes its output to a <code>javax.swing.JTextArea</code> control.</p>
+	 * 
+	 * @see javax.swing.JTextArea
+	 *
+	 * @author Ranganath Kini
+	 */
+	public class TextAreaOutputStream extends OutputStream {
+	    private JTextArea textControl;
+	    
+	    /**
+	     * <p>Creates a new instance of TextAreaOutputStream which writes
+	     * to the specified instance of <code>javax.swing.JTextArea</code> control.</p>
+	     *
+	     * @param control   A reference to the javax.swing.JTextArea
+	     *                  control to which the output must be redirected
+	     *                  to.
+	     */
+	    public TextAreaOutputStream( JTextArea control ) {
+	        textControl = control;
+	    }
+
+	    /*
+	     * Writes the specified byte as a character to the
+	     * javax.swing.JTextArea.
+	     * 
+	     * @see java.io.OutputStream#write(int)
+	     *
+	     * @param   b   The byte to be written as character to the
+	     *              JTextArea.
+	     */
+		public void write(int arg0) throws IOException {
+	        // append the data as characters to the JTextArea control
+	        textControl.append( String.valueOf( ( char )arg0 ) );		
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/comboboxconfigurablelookup/usertests/JPanelUserTestOfJComboBoxConfigurableLookUp.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/SampleProcess.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/SampleProcess.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/SampleProcess.java	(revision 42196)
@@ -0,0 +1,114 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.progresspanel;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.incrementabletask.IncrementableProcess;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * Process that adds a layer with derivative geometries, according the configuration. 
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class SampleProcess extends IncrementableProcess {
+	public SampleProcess(String title, String label) {
+		super(title);
+
+		this.label = label;
+		this.isPausable = true;
+	}
+
+	/**
+	 * Sample process.
+	 * <br>
+	 * "cancelProcess" is a shared object that, if you want allow to cancel the process,
+	 *  you should read it once in a while and check if it's canceled, if true, throw an InterrupedException  
+	 * 
+	 * @throws InterruptedException if fails the process
+	 */
+	public void process() throws InterruptedException {
+		try {
+			percentage = 0;
+
+			for (int i = 1; i <= 20; i++) {
+				percentage = i * 5;
+				
+				if (cancelProcess.isCanceled()) {
+					throw new InterruptedException();
+				}
+
+				log.addLine("Paso: " + i);
+				Thread.sleep(1000);
+			}
+
+			percentage = 100;
+			log.addLine(Messages.getText("Process_finished_successfully"));
+			return;
+		}
+		catch (Exception ex) {
+			if (! cancelProcess.isCanceled()) {
+				// Next line must be uncommented
+				//NotificationManager.showMessageError(Messages.getText("Failed_the_process"), ex);
+				log.addLine(Messages.getText("Failed_the_process"));
+			}
+
+			/* CANCELLATION PROCESS */
+
+			// Must restore the changes
+			//....
+
+			throw new InterruptedException();
+		}
+		finally {
+			/* Summary of the process */
+			log.addLine("    Proceso de ejemplo con barra de progreso durante 20 segundos");
+
+			// Ends the progress panel
+			iTask.getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).doClick();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/SampleProcess.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/TestProgressPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/TestProgressPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/TestProgressPanel.java	(revision 42196)
@@ -0,0 +1,157 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.progresspanel;
+
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * <code>TestProgressPanel</code>. Test para comprobar el funcionamiento del
+ * objeto <code>TestProgressPanel</code>
+ *
+ * @version 20/03/2007
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestProgressPanel {
+
+	private tryPanel frame = null;
+
+	public class tryPanel implements Runnable, ButtonsPanelListener {
+		private ProgressPanel frame = new ProgressPanel();
+		private volatile Thread blinker;
+
+		public void showWindow() {
+			frame.getButtonsPanel().getButton(ButtonsPanel.BUTTON_PAUSE).setVisible(false);
+			frame.setTitle("Actualizando datos");
+			frame.showLog(false);
+			frame.getButtonsPanel().addButtonPressedListener(this);
+			frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+			frame.setVisible(true);
+		}
+
+		private boolean threadSuspended = false;
+
+		public void start() {
+			blinker = new Thread(this);
+			blinker.start();
+		}
+
+		public synchronized void stop() {
+			blinker = null;
+			notify();
+		}
+
+		public void run() {
+			Thread thisThread = Thread.currentThread();
+			int i = 0;
+			frame.addLineLog("Realizando testeo...");
+			while ((blinker == thisThread) && (i < 1000)) {
+				try {
+					Thread.sleep(1);
+
+					synchronized(this) {
+						while (threadSuspended && blinker==thisThread)
+							wait();
+					}
+				} catch (InterruptedException e) {
+				}
+
+				if (i==0)
+					frame.addLineLog("Testeo 1 completado al 0%");
+				if ((i>=0) && (i<=100))
+					frame.replaceLastLineLog("Testeo 1 completado al " + i + "%");
+				if (i==100) {
+					frame.replaceLastLineLog("Testeo 1 completado");
+					frame.addLineLog("Testeo 2 completado al 0%");
+				}
+				if ((i>=100) && (i<=800))
+					frame.replaceLastLineLog("Testeo 2 completado al " + (int)((i-100)*100)/700 + "%");
+				if (i==800) {
+					frame.replaceLastLineLog("Testeo 2 completado");
+					frame.addLineLog("Testeo 3 completado al 0%");
+				}
+				if ((i>=800) && (i<=1000))
+					frame.replaceLastLineLog("Testeo 3 completado al " + (int)((i-800)*100)/200 + "%");
+				i++;
+
+				frame.setPercent((int) (i*100)/1000);
+			}
+			// Cerramos la ventana
+			frame.setVisible(false);
+			frame = null;
+		}
+
+		public void actionButtonPressed(ButtonsPanelEvent e) {
+			if (e.getButton() == ButtonsPanel.BUTTON_CANCEL) {
+				this.stop();
+			}
+		}
+	}
+
+	public static void main(String[] args) {
+		new TestProgressPanel();
+	}
+
+	/**
+	 * This is the default constructor
+	 */
+	public TestProgressPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		frame = new tryPanel();
+		frame.showWindow();
+		frame.start();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/TestProgressPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/Test2ProgressPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/Test2ProgressPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/Test2ProgressPanel.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.progresspanel;
+
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+
+import org.apache.log4j.Logger;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
+
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class Test2ProgressPanel {
+
+	public static void main(String[] args) {
+		SampleProcess iprocess = new SampleProcess("Proceso de ejemplo",
+				Messages.getText("Ongoing_process_please_wait"));
+
+		IncrementableTask iTask = new IncrementableTask(iprocess, new ProgressPanel(false));
+		iTask.addIncrementableListener(iprocess);
+		iprocess.setIncrementableTask(iTask);
+
+		final SampleProcess f_iprocess = iprocess;
+		final IncrementableTask f_iTask = iTask;
+		
+		iTask.getProgressPanel().addComponentListener(new ComponentAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * @see java.awt.event.ComponentAdapter#componentHidden(java.awt.event.ComponentEvent)
+			 */
+			public void componentHidden(ComponentEvent e) {
+				f_iTask.getProgressPanel().dispose();
+
+				/* Writes in the gvSIG log the results of the process */
+				String text = "\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n" +
+					"Resumen del proceso:\n" +
+					f_iprocess.getLog() +
+					"\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n";
+				Logger.getLogger(getClass().getName()).debug(text);
+			}
+		});
+
+		/* Starts the process */
+		iprocess.start();
+		iTask.start();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/progresspanel/Test2ProgressPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/labelslidertext/TestLabelSliderTextTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/labelslidertext/TestLabelSliderTextTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/labelslidertext/TestLabelSliderTextTable.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.labelslidertext;
+
+import javax.swing.JFrame;
+
+public class TestLabelSliderTextTable {
+	private int                      w      = 375;
+	private int                      h      = 150;
+	private JFrame                   frame  = new JFrame();
+	private LabelSliderTextContainer slider = null;
+
+	public TestLabelSliderTextTable() {
+		slider = new LabelSliderTextContainer(0, 255, 255, true, "Longaniza de nombre");
+		slider.setDecimal(false);
+		slider.setBorder("Cabecera");
+		frame.getContentPane().add(slider);
+		frame.setSize(w, h);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestLabelSliderTextTable();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/labelslidertext/TestLabelSliderTextTable.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.slidertext;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
+import org.gvsig.gui.beans.slidertext.listeners.SliderListener;
+
+public class TestSliderTextTable implements SliderListener {
+	private int 				w = 350, h = 150;
+	private JFrame 				frame=new JFrame();
+	private SliderTextContainer	slider = null;
+
+	public TestSliderTextTable() {
+		slider = new SliderTextContainer(-255, 255, 0);
+		slider.addValueChangedListener(this);
+
+		frame.getContentPane().add(slider);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+	}
+
+	public static void main(String[] args) {
+		new TestSliderTextTable();
+	}
+
+	public void actionValueChanged(SliderEvent e) {
+		System.out.println("- Changed: " + slider.getValue());
+	}
+
+	public void actionValueDragged(SliderEvent e) {
+//		System.out.println("+ Dragged: " + slider.getValue());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTable.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+/**
+ * Test para la clase Table
+ * @version 30/10/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestTable extends TestUI {
+	private static final long serialVersionUID = -1071011269441792511L;
+	private TableContainer table = null;
+
+	public TestTable() throws NotInitializeException {
+		super("TestTable");
+		String[] columnNames = {"columna 1", "columna 2", "columna 3", "columna 4"};
+		int[] columnWidths = {70, 90, 110, 130};
+		table = new TableContainer(columnNames, columnWidths);
+		table.initialize();
+		table.setControlVisible(true);
+		table.setMoveRowsButtonsVisible(true);
+		table.setEditable(true);
+
+		String row[] = {"", "", "", ""};
+		for (int i = 0; i < 10; i++) {
+			row[0] = String.valueOf(i);
+			row[1] = String.valueOf(i);
+			row[2] = String.valueOf(i);
+			row[3] = String.valueOf(i);
+			table.addRow(row);
+		}
+
+		table.swapRow(5, 6);
+		table.delRow(3);
+
+		getContentPane().add(table);
+		setSize(400, 300);
+		setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		try {
+			new TestTable();
+		} catch (NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableButtonModelTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableButtonModelTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableButtonModelTable.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestTableButtonModelTable implements ActionListener {
+	private int            w     = 460;
+	private int            h     = 200;
+	private TestUI         frame = new TestUI("TestTableButtonModelTable");
+	private TableContainer table = null;
+
+	public TestTableButtonModelTable() throws NotInitializeException {
+		String[] columnNames = { "Bot�n", "columna2", "columna3", "columna 4", "col5" };
+		int[] columnWidths = { 54, 114, 94, 114, 60 };
+		table = new TableContainer(columnNames, columnWidths);
+		table.setModel("TableButtonModel");
+		table.initialize();
+
+		Object[] row = { Color.GREEN, "texto 0", "texto 0", "texto 0", "125" };
+		Object[] row1 = { Color.BLUE, "texto 1", "texto 1", "texto 1", "255" };
+		Object[] row2 = { Color.RED, "texto 2", "texto 2", "texto 2", "80" };
+		table.addRow(row);
+
+		/*JButton b7 = new JButton();
+		b7.setBackground(Color.RED);
+		b7.addActionListener(this);
+		((TableButtonModel)table.getModel()).setValueAt(b7, 0, 0);*/
+		table.addRow(row1);
+		table.addRow(row2);
+
+		frame.getContentPane().add(table);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		try {
+			new TestTableButtonModelTable();
+		} catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		System.out.println("Evento de bot�n!!");
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableButtonModelTable.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableColorTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableColorTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableColorTable.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+/**
+ * Test del TableContainer
+ *
+ * @version 27/05/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TestTableColorTable implements ActionListener {
+	private int            w     = 460;
+	private int            h     = 200;
+	private TestUI         frame = new TestUI("TestTableColorTable");
+	private TableContainer table = null;
+
+	public TestTableColorTable() throws NotInitializeException {
+		String[] columnNames = { "selec", "clase", "RGB", "Valor", "Max", "Alpha" };
+		int[] columnWidths = { 54, 1104, 94, 114, 114, 60 };
+		table = new TableContainer(columnNames, columnWidths);
+		table.setModel("TableColorModel");
+		table.initialize();
+
+		Object[] row = { Color.GREEN, "", "0,255,0", new Double(2), new Double(2), "255" };
+		Object[] row1 = { Color.BLUE, "", "0,0,255", new Double(1), new Double(2), "255" };
+		Object[] row2 = { Color.RED , "", "255,0,0", new Double(0), new Double(1), "255" };
+		table.addRow(row);
+
+		table.addRow(row1);
+		table.addRow(row2);
+
+		frame.getContentPane().add(table);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+	}
+
+	public static void main(String[] args) {
+		try {
+			new TestTableColorTable();
+		} catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		System.out.println("Evento de bot�n!!");
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTableColorTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/CheckBoxModelTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/CheckBoxModelTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/CheckBoxModelTable.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class CheckBoxModelTable extends TestUI implements TableModelListener {
+	private static final long serialVersionUID = -7971006561681605303L;
+	private int            w     = 400;
+	private int            h     = 200;
+	private TableContainer table = null;
+
+	public CheckBoxModelTable() throws NotInitializeException {
+		super("CheckBoxModelTable");
+		String[] columnNames = {" ", "Nombre", ""};
+		int[] columnWidths = {22, 334, 0};
+		table = new TableContainer(columnNames, columnWidths);
+		table.setModel("CheckBoxModel");
+		table.initialize();
+		table.setControlVisible(false);
+		table.setMoveRowsButtonsVisible(true);
+
+		Object row[] = {"", "", ""};
+		for (int i = 0; i < 10; i++) {
+			row[0] = new Boolean(true);
+			row[1] = String.valueOf(i);
+			row[2] = new Integer(i);
+			table.addRow(row);
+		}		
+		
+		table.delRow(1);
+		table.getTable().getJTable().getColumnModel().getColumn(2).setMinWidth(0);
+		table.getTable().getJTable().getColumnModel().getColumn(2).setMaxWidth(0);
+		table.getTable().getJTable().getColumnModel().getColumn(0).setMinWidth(22);
+		table.getTable().getJTable().getColumnModel().getColumn(0).setMaxWidth(22);
+
+		table.getModel().addTableModelListener(this);
+		getContentPane().add(table);
+		setSize(w, h);
+		setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		try {
+			new CheckBoxModelTable();
+		} catch (NotInitializeException ex) {
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void tableChanged(TableModelEvent e) {
+		System.out.println("Ha cambiado");
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/CheckBoxModelTable.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import org.gvsig.gui.beans.TestUI;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestTreeRadioButtonModelTable {
+	private int            w     = 400;
+	private int            h     = 200;
+	private TestUI         frame = new TestUI("TestTreeRadioButtonModelTable");
+	private TableContainer table = null;
+
+	public TestTreeRadioButtonModelTable() throws NotInitializeException {
+		String[] columnNames = { "A", "R", "G", "B", "Capa" };
+		int[] columnWidths = { 22, 22, 22, 22, 334 };
+		table = new TableContainer(columnNames, columnWidths);
+		table.setModel("ARGBBandSelectorModel");
+		table.initialize();
+
+		Object[] row = { new Boolean(false), new Boolean(true), new Boolean(false), new Boolean(false), "layer1.tif" };
+		Object[] row1 = { new Boolean(false), new Boolean(false), new Boolean(true), new Boolean(false), "layer2.tif" };
+		Object[] row2 = { new Boolean(false), new Boolean(false), new Boolean(false), new Boolean(true), "layer3.tif" };
+		Object[] row3 = { new Boolean(true), new Boolean(false), new Boolean(false), new Boolean(false), "layer4.tif" };
+		table.addRow(row);
+		table.addRow(row1);
+		table.addRow(row2);
+		table.addRow(row3);
+
+		frame.getContentPane().add(table);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+	}
+
+	public static void main(String[] args) {
+		try {
+			new TestTreeRadioButtonModelTable();
+		} catch (NotInitializeException ex) {
+			System.out.println("Tabla no inicializada");
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/datainput/TestDataInput.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/datainput/TestDataInput.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/datainput/TestDataInput.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.datainput;
+
+import java.awt.GridLayout;
+import java.util.EventObject;
+
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+public class TestDataInput implements DataInputContainerListener {
+	private DataInputContainer data  = null;
+	private DataInputContainer data2 = null;
+
+	public TestDataInput(){
+		data = new DataInputContainer();
+		data.setLabelText("Valor 1");
+		data.addValueChangedListener(this);
+
+		data2 = new DataInputContainer();
+		data2.setLabelText("Valor 2");
+
+		JPanel panel = new JPanel(new GridLayout(2, 1, 2, 2));
+		panel.add(data);
+		panel.add(data2);
+		panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+		JFrame frame = new JFrame("DataInputContainerDemo");
+		frame.add(panel);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestDataInput();
+	}
+
+	public void actionValueChanged(EventObject e) {
+	  System.out.println(data.getValue());
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/test/java/org/gvsig/gui/beans/datainput/TestDataInput.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorPanel.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+/*
+ * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI
+ * for visualizing and manipulating spatial features with geometry and attributes.
+ *
+ * Copyright (C) 2003 Vivid Solutions
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * For more information, contact:
+ *
+ * Vivid Solutions
+ * Suite #1A
+ * 2328 Government Street
+ * Victoria BC  V8T 5G5
+ * Canada
+ *
+ * (250)385-6040
+ * www.vividsolutions.com
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.app.gui.panels;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+
+import javax.swing.JPanel;
+
+
+/**
+ * Displays a colour.
+ */
+public class ColorPanel extends JPanel {
+    private Color fillColor = Color.red;
+    private Color lineColor = Color.green;
+    private int margin = 0;
+
+    public ColorPanel() {
+        setBackground(Color.white);
+    }
+
+    protected void paintComponent(Graphics g) {
+        super.paintComponent(g);
+
+        //Before I simply set the ColorPanel's background colour. But I found this
+        //caused weird paint effects e.g. a second copy of the panel appearing
+        //at the top left corner of the rendered image. [Jon Aquino].
+        //<<TODO:DESIGN>> Use the GraphicsState class [Jon Aquino]
+        Color originalColor = g.getColor();
+        g.setColor(getBackground());
+        ((Graphics2D)g).setStroke(fillStroke);
+        g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
+        g.setColor(fillColor);
+        g.fillRect(margin, margin, getWidth() - 1 - margin - margin,
+            getHeight() - 1 - margin - margin);
+
+        if (lineColor != null) {
+            g.setColor(lineColor);
+            ((Graphics2D)g).setStroke(lineStroke);
+
+            //-1 to ensure the rectangle doesn't extend past the panel [Jon Aquino]
+            g.drawRect(margin, margin, getWidth() - 1 - margin - margin,
+                getHeight() - 1 - margin - margin);
+        }
+
+        //<<TODO:DESIGN>> Put the next line in a finally block [Jon Aquino]
+        g.setColor(originalColor);
+    }
+
+    /** Workaround for bug 4238829 in the Java bug database */
+    public void setBounds(int x, int y, int w, int h) {
+        super.setBounds(x, y, w, h);
+        validate();
+    }
+
+    public void setFillColor(Color fillColor) {
+        this.fillColor = fillColor;
+    }
+
+    /**
+     * @param lineColor the new line colour, or null to not draw the line
+     */
+    public void setLineColor(Color lineColor) {
+        this.lineColor = lineColor;
+    }
+
+    public void setMargin(int margin) {
+        this.margin = margin;
+    }
+    public Color getFillColor() {
+        return fillColor;
+    }
+
+    public Color getLineColor() {
+        return lineColor;
+    }
+    
+    private BasicStroke fillStroke = new BasicStroke(1);
+    private int lineWidth = 1;
+    private BasicStroke lineStroke = new BasicStroke(lineWidth);
+    
+    public void setLineWidth(int lineWidth) {
+        lineStroke = new BasicStroke(lineWidth);
+        this.lineWidth = lineWidth;
+    }
+    
+    public int getLineWidth() {
+        return lineWidth;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorChooserPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorChooserPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorChooserPanel.java	(revision 42196)
@@ -0,0 +1,465 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+/*
+ * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI
+ * for visualizing and manipulating spatial features with geometry and attributes.
+ *
+ * Copyright (C) 2003 Vivid Solutions
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * For more information, contact:
+ *
+ * Vivid Solutions
+ * Suite #1A
+ * 2328 Government Street
+ * Victoria BC  V8T 5G5
+ * Canada
+ *
+ * (250)385-6040
+ * www.vividsolutions.com
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.app.gui.panels;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JColorChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.i18n.Messages;
+
+
+
+/**
+ * A custom Colour Scheme Browser - custom choices based on JColorChooser.
+ */
+
+public class ColorChooserPanel extends JPanel {
+	private GridBagLayout gridBagLayout1 = new GridBagLayout();
+	private JButton changeButton = new JButton();
+
+
+    //{DEFECT-PREVENTION} In accessors, it's better to use "workbench = newWorkbench"
+    //rather than "this.workbench = workbench", because otherwise if you misspell the
+    //argument, Java won't complain! We should do this everywhere. [Jon Aquino]
+    private JPanel outerColorPanel = new JPanel();
+    private ColorPanel colorPanel = new ColorPanel();
+    private Color color = Color.black;
+//    private int alpha;
+    private Dimension dim = new Dimension(100, 22);
+    private Dimension dim2 = new Dimension(dim.width, dim.height*2+5);
+    private ArrayList<ActionListener> actionListeners = new ArrayList<ActionListener>();
+    private boolean withTransp;
+    private boolean withTranspPerc;
+	private boolean withNoFill;
+    private JCheckBox chkUseColor;
+	private JSlider sldTransparency;
+	private JLabel lblTransparency;
+	private boolean muteSldTransparency = false;
+	private double perc = 0.392156863 ;/*100/255*/
+	private ChangeListener sldAction = new ChangeListener() {
+		public void stateChanged(ChangeEvent e) {
+			if (!muteSldTransparency) {
+				int alphaValue = sldTransparency.getValue();
+				setAlpha(alphaValue);
+
+				if(withTranspPerc) {
+					int percValue = (int) (alphaValue * perc);
+					lblTransparency.setText( String.valueOf(percValue) + "%");
+				}
+				fireActionPerformed();
+			}
+		}
+
+	};
+
+
+    public ColorChooserPanel() {
+        this(false);
+    }
+
+    /**
+	 * Constructor method
+	 *
+	 * @param withTransparencySlider boolean that specifies if the user
+	 * wants a slider with the color chooser panel to control the transparency
+	 * of the selected color.Also, it will appear a text which specifies the transparency percentage.
+	 * @param withNoFill boolean that specifies if the color chooser panel
+	 * allows a null value for the color selected (true case). If this values
+	 * is false, when the color selected is null then black color is assigned
+	 * automatically.
+	 */
+    public ColorChooserPanel(boolean withTransparencySlider) {
+    	this(withTransparencySlider,false);
+
+    }
+
+	/**
+	 * Constructor method
+	 *
+	 * @param withTransparencySlider boolean that specifies if the user
+	 * wants a slider with the color chooser panel to control the transparency
+	 * of the selected color.
+	 * @param withNoFill boolean that specifies if the color chooser panel
+	 * allows a null value for the color selected (true case). If this values
+	 * is false, when the color selected is null then black color is assigned
+	 * automatically.
+	 */
+	public ColorChooserPanel(boolean withTransparencySlider, boolean withNoFill) {
+
+		this.withTransp=withTransparencySlider;
+		this.withTranspPerc=withTransparencySlider;
+		this.withNoFill=withNoFill;
+
+		try {
+			if (withTransp) {
+				sldTransparency = new JSlider(0, 255);
+				sldTransparency.addChangeListener(sldAction);
+				int width = withNoFill ? dim2.width - 40 : dim2.width;
+				sldTransparency.setPreferredSize(new Dimension(width-5, dim2.height/2));
+				sldTransparency.setToolTipText(Messages.getText("transparencia"));
+
+				if(withTranspPerc) {
+					lblTransparency = new JLabel();
+					int percValue = (int) (sldTransparency.getValue() * perc);
+					lblTransparency.setText(String.valueOf(percValue) +"%");
+					lblTransparency.setPreferredSize(new Dimension(40,20));
+				}
+
+				sldTransparency.setValue(255);
+
+			}
+			jbInit();
+			colorPanel.setLineColor(null);
+			changeButton.setToolTipText(Messages.getText("browse"));
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	private void jbInit() throws Exception {
+		JPanel pane = new JPanel(new GridBagLayout());
+		GridBagConstraints c = new GridBagConstraints();
+
+		changeButton.setText("...");
+		changeButton.addActionListener(new java.awt.event.ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				changeButton_actionPerformed(e);
+			}
+		});
+		outerColorPanel.setBorder(BorderFactory.createLoweredBevelBorder());
+		outerColorPanel.setPreferredSize(new Dimension(dim.width/2, dim.height));
+		outerColorPanel.setBackground(Color.white);
+
+
+		c.fill = GridBagConstraints.HORIZONTAL;
+		c.gridx = 1;
+		c.gridy = 0;
+		c.gridwidth = 2;
+		pane.add(outerColorPanel,c);
+
+		c.fill = GridBagConstraints.HORIZONTAL;
+		c.gridx = 3;
+		c.gridy = 0;
+		c.gridwidth = 1;
+		pane.add(changeButton,c);
+		outerColorPanel.add(colorPanel);
+
+		if(withNoFill) {
+			chkUseColor = new JCheckBox();
+			chkUseColor.setSelected(true);
+			c.fill = GridBagConstraints.HORIZONTAL;
+			c.gridwidth = 1;
+			c.gridx = 0;
+			c.gridy = 1;
+
+
+			chkUseColor.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					useColor_actionPerformed(e);
+				}
+			});
+			pane.add(chkUseColor,c);
+		}
+
+
+		if (withTransp) {
+
+			c.fill = GridBagConstraints.HORIZONTAL;
+			c.gridwidth = 3;
+			c.gridx = 1;
+			c.gridy = 1;
+			pane.add(sldTransparency,c);
+
+
+			if(withTranspPerc) {
+				c.fill = GridBagConstraints.HORIZONTAL;
+				c.gridwidth = 3;
+				c.gridx = 4;
+				c.gridy = 1;
+				pane.add(lblTransparency,c);
+			}
+
+		}
+
+		add(pane);
+	}
+
+    private void changeButton_actionPerformed(ActionEvent e) {
+    	Color newColor = JColorChooser.showDialog(SwingUtilities.windowForComponent(this), Messages.getText("choose_color"), color);
+
+        if (newColor == null) {
+            return;
+        }
+
+        setColor(newColor);
+        fireActionPerformed();
+    }
+
+    /**
+	 * Returns true if the check box of the color chooser panel is selected.
+	 * False otherwise.
+	 * @return boolean true if the check box is selected. Otherwise, false.
+	 */
+	public boolean getUseColorisSelected() {
+		if(withNoFill)
+			return chkUseColor.isSelected();
+		return false;
+	}
+	/**
+	 * Sets the check box of the color chooser panel
+
+	 * @param b boolean true if the user wants to select it.Otherwise, false.
+	 */
+	public void setUseColorIsSelected(boolean b) {
+		if(withNoFill)
+			chkUseColor.setSelected(b);
+	}
+	/**
+	 * Controls the events when the check box of the color chooser panel
+	 * is modified
+	 *
+	 * @param e Action Event
+	 */
+	private void useColor_actionPerformed(ActionEvent e) {
+		if(chkUseColor.isSelected())
+			setColor(color);
+		else setColor(null);
+		fireActionPerformed();
+	}
+
+     public void addActionListener(ActionListener l) {
+        actionListeners.add(l);
+    }
+
+    public void removeActionListener(ActionListener l) {
+        actionListeners.remove(l);
+    }
+
+    protected void fireActionPerformed() {
+        for (Iterator<ActionListener> i = actionListeners.iterator(); i.hasNext();) {
+            i.next().actionPerformed(new ActionEvent(this, 0, null));
+        }
+    }
+	/**
+	 * Sets the color of the chooser panel.
+	 *
+	 * @param color Color to be selected.
+	 */
+	public void setColor(Color color) {
+
+		if( color != null) {
+			this.color = color;
+			setAlpha(color.getAlpha());
+			updateColorPanel();
+		}
+
+	}
+
+	/**
+	 * Sets the alpha value of the color selected in the color chooser
+	 * panel.
+	 *
+	 * @param alpha Alpha value of the color.
+	 */
+	public void setAlpha(int alpha) {
+		muteSldTransparency = true;
+
+		if (color != null)
+			color=alphaColor(color,alpha);
+
+		if (withTransp) {
+			sldTransparency.setValue(alpha);
+			sldTransparency.validate();
+			int percValue = (int) (alpha * perc);
+			lblTransparency.setText( String.valueOf(percValue)+ "%");
+		}
+
+		updateColorPanel();
+		muteSldTransparency = false;
+//		fireActionPerformed();
+	}
+
+	public int getAlpha() {
+		if (withTransp) {
+			return sldTransparency.getValue();
+		} else {
+			return color.getAlpha();
+		}
+
+	}
+
+    private void updateColorPanel() {
+        colorPanel.setFillColor(color);
+        colorPanel.repaint();
+    }
+
+
+	/**
+	 * Obtains the selected color in the color chooser panel.
+	 *
+	 * @return color the selected color
+	 */
+	public Color getColor() {
+		return color;
+	}
+
+	public void disabledWithTransparency() {
+		changeButton.setEnabled(false);
+		if(withNoFill)
+			chkUseColor.setEnabled(false);
+
+	}
+
+	@Override
+	public void setEnabled(boolean newEnabled) {
+
+		changeButton.setEnabled(newEnabled);
+		if(withTransp) {
+			sldTransparency.setEnabled(newEnabled);
+		}
+		if(withTranspPerc) {
+			lblTransparency.setEnabled(newEnabled);
+		}
+		if(withNoFill) {
+			chkUseColor.setEnabled(newEnabled);
+		}
+
+	}
+
+	public static void main(String[] args) {
+		JFrame f = new JFrame();
+
+		final ColorChooserPanel ce2 = new ColorChooserPanel(true,true);
+
+		JPanel content = new JPanel(new GridLayout(2, 1));
+
+		content.add(ce2);
+
+
+		f.setContentPane(content);
+		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		f.pack();
+		f.setVisible(true);
+
+	}
+
+    private Color alphaColor(Color color, int alpha) {
+        return new Color(color.getRed(), color.getGreen(), color.getBlue(),
+            alpha);
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/panels/ColorChooserPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/TableSorter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/TableSorter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/TableSorter.java	(revision 42196)
@@ -0,0 +1,521 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+/**
+ * TableSorter is a decorator for TableModels; adding sorting
+ * functionality to a supplied TableModel. TableSorter does
+ * not store or copy the data in its TableModel; instead it maintains
+ * a map from the row indexes of the view to the row indexes of the
+ * model. As requests are made of the sorter (like getValueAt(row, col))
+ * they are passed to the underlying model after the row numbers
+ * have been translated via the internal mapping array. This way,
+ * the TableSorter appears to hold another copy of the table
+ * with the rows in a different order.
+ * <p/>
+ * TableSorter registers itself as a listener to the underlying model,
+ * just as the JTable itself would. Events recieved from the model
+ * are examined, sometimes manipulated (typically widened), and then
+ * passed on to the TableSorter's listeners (typically the JTable).
+ * If a change to the model has invalidated the order of TableSorter's
+ * rows, a note of this is made and the sorter will resort the
+ * rows the next time a value is requested.
+ * <p/>
+ * When the tableHeader property is set, either by using the
+ * setTableHeader() method or the two argument constructor, the
+ * table header may be used as a complete UI for TableSorter.
+ * The default renderer of the tableHeader is decorated with a renderer
+ * that indicates the sorting status of each column. In addition,
+ * a mouse listener is installed with the following behavior:
+ * <ul>
+ * <li>
+ * Mouse-click: Clears the sorting status of all other columns
+ * and advances the sorting status of that column through three
+ * values: {NOT_SORTED, ASCENDING, DESCENDING} (then back to
+ * NOT_SORTED again).
+ * <li>
+ * SHIFT-mouse-click: Clears the sorting status of all other columns
+ * and cycles the sorting status of the column through the same
+ * three values, in the opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
+ * <li>
+ * CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except
+ * that the changes to the column do not cancel the statuses of columns
+ * that are already sorting - giving a way to initiate a compound
+ * sort.
+ * </ul>
+ * <p/>
+ * This is a long overdue rewrite of a class of the same name that
+ * first appeared in the swing table demos in 1997.
+ * 
+ * @author Philip Milne
+ * @author Brendon McLean 
+ * @author Dan van Enckevort
+ * @author Parwinder Sekhon
+ * @version 2.0 02/27/04
+ */
+
+public class TableSorter extends AbstractTableModel {
+    protected TableModel tableModel;
+
+    public static final int DESCENDING = -1;
+    public static final int NOT_SORTED = 0;
+    public static final int ASCENDING = 1;
+
+    private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
+
+    public static final Comparator COMPARABLE_COMAPRATOR = new Comparator() {
+        public int compare(Object o1, Object o2) {
+            return ((Comparable) o1).compareTo(o2);
+        }
+    };
+    public static final Comparator LEXICAL_COMPARATOR = new Comparator() {
+        public int compare(Object o1, Object o2) {
+            return o1.toString().compareTo(o2.toString());
+        }
+    };
+
+    private Row[] viewToModel;
+    private int[] modelToView;
+
+    private JTableHeader tableHeader;
+    private MouseListener mouseListener;
+    private TableModelListener tableModelListener;
+    private Map columnComparators = new HashMap();
+    private List sortingColumns = new ArrayList();
+
+    public TableSorter() {
+        this.mouseListener = new MouseHandler();
+        this.tableModelListener = new TableModelHandler();
+    }
+
+    public TableSorter(TableModel tableModel) {
+        this();
+        setTableModel(tableModel);
+    }
+
+    public TableSorter(TableModel tableModel, JTableHeader tableHeader) {
+        this();
+        setTableHeader(tableHeader);
+        setTableModel(tableModel);
+    }
+
+    private void clearSortingState() {
+        viewToModel = null;
+        modelToView = null;
+    }
+
+    public TableModel getTableModel() {
+        return tableModel;
+    }
+
+    public void setTableModel(TableModel tableModel) {
+        if (this.tableModel != null) {
+            this.tableModel.removeTableModelListener(tableModelListener);
+        }
+
+        this.tableModel = tableModel;
+        if (this.tableModel != null) {
+            this.tableModel.addTableModelListener(tableModelListener);
+        }
+
+        clearSortingState();
+        fireTableStructureChanged();
+    }
+
+    public JTableHeader getTableHeader() {
+        return tableHeader;
+    }
+
+    public void setTableHeader(JTableHeader tableHeader) {
+        if (this.tableHeader != null) {
+            this.tableHeader.removeMouseListener(mouseListener);
+            TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
+            if (defaultRenderer instanceof SortableHeaderRenderer) {
+                this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
+            }
+        }
+        this.tableHeader = tableHeader;
+        if (this.tableHeader != null) {
+            this.tableHeader.addMouseListener(mouseListener);
+            this.tableHeader.setDefaultRenderer(
+                    new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
+        }
+    }
+
+    public boolean isSorting() {
+        return sortingColumns.size() != 0;
+    }
+
+    private Directive getDirective(int column) {
+        for (int i = 0; i < sortingColumns.size(); i++) {
+            Directive directive = (Directive)sortingColumns.get(i);
+            if (directive.column == column) {
+                return directive;
+            }
+        }
+        return EMPTY_DIRECTIVE;
+    }
+
+    public int getSortingStatus(int column) {
+        return getDirective(column).direction;
+    }
+
+    private void sortingStatusChanged() {
+        clearSortingState();
+        fireTableDataChanged();
+        if (tableHeader != null) {
+            tableHeader.repaint();
+        }
+    }
+
+    public void setSortingStatus(int column, int status) {
+        Directive directive = getDirective(column);
+        if (directive != EMPTY_DIRECTIVE) {
+            sortingColumns.remove(directive);
+        }
+        if (status != NOT_SORTED) {
+            sortingColumns.add(new Directive(column, status));
+        }
+        sortingStatusChanged();
+    }
+
+    protected Icon getHeaderRendererIcon(int column, int size) {
+        Directive directive = getDirective(column);
+        if (directive == EMPTY_DIRECTIVE) {
+            return null;
+        }
+        return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
+    }
+
+    private void cancelSorting() {
+        sortingColumns.clear();
+        sortingStatusChanged();
+    }
+
+    public void setColumnComparator(Class type, Comparator comparator) {
+        if (comparator == null) {
+            columnComparators.remove(type);
+        } else {
+            columnComparators.put(type, comparator);
+        }
+    }
+
+    protected Comparator getComparator(int column) {
+        Class columnType = tableModel.getColumnClass(column);
+        Comparator comparator = (Comparator) columnComparators.get(columnType);
+        if (comparator != null) {
+            return comparator;
+        }
+        if (Comparable.class.isAssignableFrom(columnType)) {
+            return COMPARABLE_COMAPRATOR;
+        }
+        return LEXICAL_COMPARATOR;
+    }
+
+    private Row[] getViewToModel() {
+        if (viewToModel == null) {
+            int tableModelRowCount = tableModel.getRowCount();
+            viewToModel = new Row[tableModelRowCount];
+            for (int row = 0; row < tableModelRowCount; row++) {
+                viewToModel[row] = new Row(row);
+            }
+
+            if (isSorting()) {
+                Arrays.sort(viewToModel);
+            }
+        }
+        return viewToModel;
+    }
+
+    public int modelIndex(int viewIndex) {
+        return getViewToModel()[viewIndex].modelIndex;
+    }
+
+    private int[] getModelToView() {
+        if (modelToView == null) {
+            int n = getViewToModel().length;
+            modelToView = new int[n];
+            for (int i = 0; i < n; i++) {
+                modelToView[modelIndex(i)] = i;
+            }
+        }
+        return modelToView;
+    }
+
+    // TableModel interface methods 
+
+    public int getRowCount() {
+        return (tableModel == null) ? 0 : tableModel.getRowCount();
+    }
+
+    public int getColumnCount() {
+        return (tableModel == null) ? 0 : tableModel.getColumnCount();
+    }
+
+    public String getColumnName(int column) {
+        return tableModel.getColumnName(column);
+    }
+
+    public Class getColumnClass(int column) {
+        return tableModel.getColumnClass(column);
+    }
+
+    public boolean isCellEditable(int row, int column) {
+        return tableModel.isCellEditable(modelIndex(row), column);
+    }
+
+    public Object getValueAt(int row, int column) {
+        return tableModel.getValueAt(modelIndex(row), column);
+    }
+
+    public void setValueAt(Object aValue, int row, int column) {
+        tableModel.setValueAt(aValue, modelIndex(row), column);
+    }
+
+    // Helper classes
+    
+    private class Row implements Comparable {
+        private int modelIndex;
+
+        public Row(int index) {
+            this.modelIndex = index;
+        }
+
+        public int compareTo(Object o) {
+            int row1 = modelIndex;
+            int row2 = ((Row) o).modelIndex;
+
+            for (Iterator it = sortingColumns.iterator(); it.hasNext();) {
+                Directive directive = (Directive) it.next();
+                int column = directive.column;
+                Object o1 = tableModel.getValueAt(row1, column);
+                Object o2 = tableModel.getValueAt(row2, column);
+
+                int comparison = 0;
+                // Define null less than everything, except null.
+                if (o1 == null && o2 == null) {
+                    comparison = 0;
+                } else if (o1 == null) {
+                    comparison = -1;
+                } else if (o2 == null) {
+                    comparison = 1;
+                } else {
+                    comparison = getComparator(column).compare(o1, o2);
+                }
+                if (comparison != 0) {
+                    return directive.direction == DESCENDING ? -comparison : comparison;
+                }
+            }
+            return 0;
+        }
+    }
+
+    private class TableModelHandler implements TableModelListener {
+        public void tableChanged(TableModelEvent e) {
+            // If we're not sorting by anything, just pass the event along.             
+            if (!isSorting()) {
+                clearSortingState();
+                fireTableChanged(e);
+                return;
+            }
+                
+            // If the table structure has changed, cancel the sorting; the             
+            // sorting columns may have been either moved or deleted from             
+            // the model. 
+            if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
+                cancelSorting();
+                fireTableChanged(e);
+                return;
+            }
+
+            // We can map a cell event through to the view without widening             
+            // when the following conditions apply: 
+            // 
+            // a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and, 
+            // b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
+            // c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and, 
+            // d) a reverse lookup will not trigger a sort (modelToView != null)
+            //
+            // Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
+            // 
+            // The last check, for (modelToView != null) is to see if modelToView 
+            // is already allocated. If we don't do this check; sorting can become 
+            // a performance bottleneck for applications where cells  
+            // change rapidly in different parts of the table. If cells 
+            // change alternately in the sorting column and then outside of             
+            // it this class can end up re-sorting on alternate cell updates - 
+            // which can be a performance problem for large tables. The last 
+            // clause avoids this problem. 
+            int column = e.getColumn();
+            if (e.getFirstRow() == e.getLastRow()
+                    && column != TableModelEvent.ALL_COLUMNS
+                    && getSortingStatus(column) == NOT_SORTED
+                    && modelToView != null) {
+                int viewIndex = getModelToView()[e.getFirstRow()];
+                fireTableChanged(new TableModelEvent(TableSorter.this, 
+                                                     viewIndex, viewIndex, 
+                                                     column, e.getType()));
+                return;
+            }
+
+            // Something has happened to the data that may have invalidated the row order. 
+            clearSortingState();
+            fireTableDataChanged();
+            return;
+        }
+    }
+
+    private class MouseHandler extends MouseAdapter {
+        public void mouseClicked(MouseEvent e) {
+            JTableHeader h = (JTableHeader) e.getSource();
+            TableColumnModel columnModel = h.getColumnModel();
+            int viewColumn = columnModel.getColumnIndexAtX(e.getX());
+            int column = columnModel.getColumn(viewColumn).getModelIndex();
+            if (column != -1) {
+                int status = getSortingStatus(column);
+                if (!e.isControlDown()) {
+                    cancelSorting();
+                }
+                // Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or 
+                // {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed. 
+                status = status + (e.isShiftDown() ? -1 : 1);
+                status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
+                setSortingStatus(column, status);
+            }
+        }
+    }
+
+    private static class Arrow implements Icon {
+        private boolean descending;
+        private int size;
+        private int priority;
+
+        public Arrow(boolean descending, int size, int priority) {
+            this.descending = descending;
+            this.size = size;
+            this.priority = priority;
+        }
+
+        public void paintIcon(Component c, Graphics g, int x, int y) {
+            Color color = c == null ? Color.GRAY : c.getBackground();             
+            // In a compound sort, make each succesive triangle 20% 
+            // smaller than the previous one. 
+            int dx = (int)(size/2*Math.pow(0.8, priority));
+            int dy = descending ? dx : -dx;
+            // Align icon (roughly) with font baseline. 
+            y = y + 5*size/6 + (descending ? -dy : 0);
+            int shift = descending ? 1 : -1;
+            g.translate(x, y);
+
+            // Right diagonal. 
+            g.setColor(color.darker());
+            g.drawLine(dx / 2, dy, 0, 0);
+            g.drawLine(dx / 2, dy + shift, 0, shift);
+            
+            // Left diagonal. 
+            g.setColor(color.brighter());
+            g.drawLine(dx / 2, dy, dx, 0);
+            g.drawLine(dx / 2, dy + shift, dx, shift);
+            
+            // Horizontal line. 
+            if (descending) {
+                g.setColor(color.darker().darker());
+            } else {
+                g.setColor(color.brighter().brighter());
+            }
+            g.drawLine(dx, 0, 0, 0);
+
+            g.setColor(color);
+            g.translate(-x, -y);
+        }
+
+        public int getIconWidth() {
+            return size;
+        }
+
+        public int getIconHeight() {
+            return size;
+        }
+    }
+
+    private class SortableHeaderRenderer implements TableCellRenderer {
+        private TableCellRenderer tableCellRenderer;
+
+        public SortableHeaderRenderer(TableCellRenderer tableCellRenderer) {
+            this.tableCellRenderer = tableCellRenderer;
+        }
+
+        public Component getTableCellRendererComponent(JTable table, 
+                                                       Object value,
+                                                       boolean isSelected, 
+                                                       boolean hasFocus,
+                                                       int row, 
+                                                       int column) {
+            Component c = tableCellRenderer.getTableCellRendererComponent(table, 
+                    value, isSelected, hasFocus, row, column);
+            if (c instanceof JLabel) {
+                JLabel l = (JLabel) c;
+                l.setHorizontalTextPosition(JLabel.LEFT);
+                int modelColumn = table.convertColumnIndexToModel(column);
+                l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
+            }
+            return c;
+        }
+    }
+
+    private static class Directive {
+        private int column;
+        private int direction;
+
+        public Directive(int column, int direction) {
+            this.column = column;
+            this.direction = direction;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/app/gui/TableSorter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/util/StatusComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/util/StatusComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/util/StatusComponent.java	(revision 42196)
@@ -0,0 +1,183 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.util;
+
+import java.util.ArrayList;
+
+import javax.swing.JComponent;
+/**
+ * Clase para poder cambiar el estado de un componente y sus componentes hijos.
+ *
+ * Tiene dos formas de uso:
+ *
+ * 1.- Desactivar un componente y todos sus hijos sin necesidad de guardar su
+ *     estado. Para este caso solo es necesario usar el m�todo est�tico
+ *     setDisabled(componente). El hecho de que no exista un activar es que para
+ *     desactivar esta claro que queremos desactivar un componente y sus hijos,
+ *     pero a la hora de activar no todos los hijos deben estar activos, para
+ *     estos casos es necesario ver la segunda opci�n.
+ *
+ * 2.- Desactivar un componente guardando todos sus estados y volver a recuperar
+ *     sus estados como estaba inicialmente. Ejemplo:
+ *
+ *     // Creamos el StatusComponent asoci�ndolo al componente en cuesti�n
+ *     StatusComponent statusComponent = new StatusComponent(miControl);
+ *
+ *     // Desactivamos el componente y sus hijos guardando todos los estados.
+ *     statusComponent.setEnabled(false);
+ *
+ *     ......
+ *     // Activamos el componente recuperando su estado inicial
+ *     statusComponent.setEnabled(true);
+ *
+ * @version 07/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class StatusComponent {
+	private ArrayList<StatusComponentStruct> statusList = new ArrayList<StatusComponentStruct>();
+	private boolean    enabled   = true;
+	private JComponent component = null;
+
+	/**
+	 * Estructura de datos para poder tener el estado de un componente
+	 * @version 07/09/2007
+	 * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+	 */
+	public class StatusComponentStruct {
+		private JComponent object;
+		private boolean enabled;
+
+		public boolean isEnabled() {
+			return enabled;
+		}
+
+		public void setEnabled(boolean enabled) {
+			this.enabled = enabled;
+		}
+
+		public JComponent getObject() {
+			return object;
+		}
+
+		public void setObject(JComponent object) {
+			this.object = object;
+		}
+	}
+
+	/**
+	 * Construye un StatusComponent. Es necesario pasarle el componente que
+	 * queremos tratar.
+	 * @param component
+	 */
+	public StatusComponent(JComponent component) {
+		this.component = component;
+	}
+
+	/**
+	 * Recupera el estado de un componente y todos sus hijos, vaciando la pila de
+	 * estados. Eso quiere decir que no se podra volver a recuperar su estado sin
+	 * haberlo guardado previamente.
+	 * @param component
+	 */
+	private void restoreStatus(JComponent component) {
+		boolean auxEnabled = false;
+		boolean finded = false;
+		// Buscar estado de dicho componente
+		for (int i = 0; i < statusList.size(); i++) {
+			StatusComponentStruct auxStatus = (StatusComponentStruct) statusList.get(i);
+			if (auxStatus.getObject() == component) {
+				auxEnabled = auxStatus.isEnabled();
+				statusList.remove(i);
+				finded = true;
+				break;
+			}
+		}
+
+		// Asignar su estado
+		if (finded)
+			component.setEnabled(auxEnabled);
+
+		for (int i = 0; i < component.getComponentCount(); i++)
+			if (component.getComponent(i) instanceof JComponent)
+				restoreStatus((JComponent) component.getComponent(i));
+	}
+
+	/**
+	 * Desactivar el componente y todos sus hijos sin guardar los estados. Hay que
+	 * tener cuidado con no confundirlo con setEnabled(false). Este metodo nunca
+	 * guardara el estado, asi que no se podra recuperar despues dicho estado.
+	 * @param component
+	 */
+	static public void setDisabled(JComponent component) {
+		component.setEnabled(false);
+		for (int i = 0; i < component.getComponentCount(); i++)
+			if (component.getComponent(i) instanceof JComponent)
+				setDisabled((JComponent) component.getComponent(i));
+	}
+
+	/**
+	 * Guarda el estado de un componente. Este proceso es recursivo. El estado
+	 * se guarda en un array y este array no es vaciado inicialmente. La idea es
+	 * guardar en un disabled y recuperar en un enabled y asegurarse que no puede
+	 * ocurrir un disabled o un enabled dos veces.
+	 * @param component
+	 */
+	private void saveComponentsStatus(JComponent component) {
+		// Guardar estado
+		StatusComponentStruct auxStatus = new StatusComponentStruct();
+		auxStatus.setEnabled(component.isEnabled());
+		auxStatus.setObject(component);
+		statusList.add(auxStatus);
+
+		for (int i = 0; i < component.getComponentCount(); i++)
+			if (component.getComponent(i) instanceof JComponent)
+				saveComponentsStatus((JComponent) component.getComponent(i));
+	}
+
+	/**
+	 * Activa o desactiva un componente y todos sus componentes hijos. No se puede
+	 * activar o desactivar dos veces seguidas. Siendo ignoradas las peticiones
+	 * repetitivas.
+	 * @param enabled
+	 */
+	public void setEnabled(boolean enabled) {
+		// Si el estado ha cambiado, hacemos algo
+		if (this.enabled != enabled) {
+			if (enabled) {
+				restoreStatus(component);
+			} else {
+				saveComponentsStatus(component);
+				setDisabled(component);
+			}
+			this.enabled = enabled;
+		}
+	}
+
+	/**
+	 * @return the enabled
+	 */
+	public boolean isEnabled() {
+		return enabled;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/util/StatusComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablePainter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablePainter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablePainter.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultColorTablePainter implements ColorTablePainter {
+	private class ColorItem {
+		Color color = null;
+		double value =0;
+		
+		ColorItem(double value, Color color) {
+			this.color = color;
+			this.value = value;
+		}
+		
+		Color getColor() {
+			return color;
+		}
+		
+		double getValue() {
+			return value;
+		}
+	}
+	
+	List<ColorItem> colorItems = null;
+	
+	DefaultColorTablePainter() {
+		this.colorItems = new ArrayList<ColorItem>();
+		int n = 256;
+		for( int i=0; i<n; i++) {
+                Color color = Color.getHSBColor((float) i / (float) n, 0.85f, 1.0f);
+                this.colorItems.add( new ColorItem(i,color));
+        }
+
+	}
+	
+	public Color[] getColors() {
+		Color[] colors = new Color[colorItems.size()];
+		for (int i = 0; i < colors.length; i++) {
+			colors[i] = ((ColorItem) colorItems.get(i)).getColor();
+		}
+		return colors;	
+	}
+
+	public String getTableName() {
+		return "Default colot table";
+	}
+
+	public void paint(Graphics2D g, boolean isSelected) {
+		Rectangle area = g.getClipBounds();
+		area.y=0;
+		area.x=0;
+		int x1 = area.x;
+		int x2 = area.x + area.width - 1;
+
+		if( this.colorItems.size() > 0 ) {
+			double min = colorItems.get(0).getValue();
+            double max = colorItems.get(colorItems.size() - 1).getValue();
+            for (int i = area.x; i < (area.x + area.width - 1); i++) {
+				double pos = min + (((max - min) * (i - area.x)) / (area.width - 2));
+				g.setColor(this.colorItems.get((int) pos).getColor());
+				g.drawLine(i, area.y, i, area.y + area.height);
+			}
+		} else {
+			g.setColor(new Color(224, 224, 224));
+			g.fillRect(x1, area.y, x2 - x1, area.height - 1);
+		}
+		if (isSelected) {
+			g.setColor(Color.black);
+		} else {
+			g.setColor(new Color(96, 96, 96));
+		}
+		g.drawRect(x1, area.y, x2 - x1, area.height - 1);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablePainter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablesFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablesFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablesFactory.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui;
+
+import java.util.List;
+
+public interface ColorTablesFactory {
+	public List<ColorTablePainter> createColorTables();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablesFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablesFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablesFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablesFactory.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultColorTablesFactory implements ColorTablesFactory {
+	private List<ColorTablePainter> colorTables;
+
+	public DefaultColorTablesFactory() {
+		this.colorTables = new ArrayList<ColorTablePainter>();
+		this.colorTables.add(new DefaultColorTablePainter());
+	}
+	
+	public List<ColorTablePainter> createColorTables() {
+		return this.colorTables;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/DefaultColorTablesFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listeners/BeanListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listeners/BeanListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listeners/BeanListener.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: BeanListener.java 13136 2007-08-20 08:38:34Z evercher $
+* $Log$
+* Revision 1.1  2007-08-20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.2  2006/07/03 09:29:09  jaume
+* javadoc
+*
+* Revision 1.1  2006/03/22 11:18:29  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/02/28 15:25:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2.2.3  2006/01/31 16:25:24  jaume
+* correcciones de bugs
+*
+* Revision 1.3  2006/01/26 16:07:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2.2.1  2006/01/26 12:59:33  jaume
+* 0.5
+*
+* Revision 1.2  2006/01/24 14:36:33  jaume
+* This is the new version
+*
+* Revision 1.1.2.1  2006/01/10 13:11:38  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2006/01/02 18:08:01  jaume
+* Tree de estilos
+*
+* Revision 1.1.2.1  2005/12/30 08:56:19  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans.listeners;
+
+/**
+ * Defines an object which listens for changes in the value produced by a bean.
+ *
+ * @author jaume dominguez faus
+ */
+public interface BeanListener {
+    /**
+     * Invoked when the target of the listener has changed its value.
+     * @param value, the new value obtained from the target.
+     */
+    public void beanValueChanged(Object value);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listeners/BeanListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.graphic.listeners;
+
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+
+import javax.swing.JLabel;
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class GraphicListener implements MouseListener, MouseMotionListener {
+	private boolean move  = false;
+	private JLabel  left  = null;
+	private JLabel  right = null;
+
+	public GraphicListener() {
+	}
+
+	public void setLabels(JLabel left, JLabel right){
+		this.left = left;
+		this.right = right;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) {
+		if (move) {
+			if (e.getSource() == left)
+				left.setLocation(left.getLocation().x + e.getX(), left.getLocation().y);
+
+			if (e.getSource() == right)
+				right.setLocation(right.getLocation().x + e.getX(), right.getLocation().y);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		move = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) {
+		move = false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+	 */
+	public void mouseClicked(MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+	 */
+	public void mouseEntered(MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+	 */
+	public void mouseExited(MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) {
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicChartPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicChartPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicChartPanel.java	(revision 42196)
@@ -0,0 +1,210 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.BasicStroke;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Image;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.Plot;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+/**
+ * Componente gr�fico de JFree
+ * 
+ * @version 05/04/2007
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class GraphicChartPanel extends JPanel {
+	private static final long serialVersionUID = 7328137487119964665L;
+	private JFreeChart         chart       = null;
+	private ChartPanel         jPanelChart = null;
+	private XYSeries           series[]    = new XYSeries[0];
+	private XYSeriesCollection dataset     = null;
+
+	private int                viewType    = 0;
+
+	public GraphicChartPanel() {
+		dataset = new XYSeriesCollection();
+
+		createChart();
+
+		initialize();
+
+		Plot plot = this.jPanelChart.getChart().getPlot();
+		plot.setOutlineStroke(new BasicStroke(1));
+		plot.setOutlinePaint(Color.black);
+
+		chart.setBackgroundPaint(Color.white);
+		plot.setBackgroundPaint(new Color(245, 245, 245));
+	}
+
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.add(getChart(), BorderLayout.CENTER);
+	}
+
+	/**
+	 * @return
+	 */
+	public ChartPanel getChart() {
+		if (jPanelChart == null) {
+			jPanelChart = new ChartPanel(chart);
+			jPanelChart.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+		}
+		return jPanelChart;
+	}
+
+	/**
+	 * Creates a chart.
+	 * @param dataset the dataset.
+	 * @return A chart.
+	 */
+	private void createChart() {
+		chart = ChartFactory.createXYLineChart(null, null, null, dataset,
+							PlotOrientation.VERTICAL, false, true, true);
+
+		// Definir la lista de colores
+		XYPlot plot = chart.getXYPlot();
+		plot.getRenderer().setSeriesPaint(0, Color.red);
+		plot.getRenderer().setSeriesPaint(1, Color.green);
+		plot.getRenderer().setSeriesPaint(2, Color.blue);
+		plot.getRenderer().setSeriesPaint(3, Color.cyan);
+		plot.getRenderer().setSeriesPaint(4, Color.black);
+		plot.getRenderer().setSeriesPaint(5, Color.darkGray);
+		plot.getRenderer().setSeriesPaint(6, Color.gray);
+		plot.getRenderer().setSeriesPaint(7, Color.magenta);
+		plot.getRenderer().setSeriesPaint(8, Color.yellow);
+		plot.getRenderer().setSeriesPaint(9, Color.orange);
+
+		Image img = new ImageIcon(getClass().getResource("images/splash.png")).getImage();
+		plot.setBackgroundPaint(null);
+		plot.setBackgroundImageAlpha(0.18f);
+		plot.setBackgroundImage(img);
+	}
+
+	/**
+	 * Asigna nuevos valores para la gr�fica
+	 * @param values Matriz de [n�mero de gr�ficas][Valores por gr�fica]
+	 */
+	public void setNewChart(int[][] values, String names[]) {
+		series = new XYSeries[values.length];
+		for (int iGraf = 0; iGraf < values.length; iGraf++) {
+			series[iGraf] = new XYSeries(names[iGraf]);
+			for (int i = 0; i < values[iGraf].length; i++) {
+				series[iGraf].add(new Integer(i), new Integer(values[iGraf][i]));
+			}
+		}
+		reloadGraphic();
+	}
+
+	/**
+	 * Asigna nuevos valores para la gr�fica
+	 * @param values Matriz de [n�mero de gr�ficas][Valores por gr�fica]
+	 */
+	public void setNewChart(double[][][] values, String names[]) {
+		series = new XYSeries[values.length];
+		for (int iGraf = 0; iGraf < values.length; iGraf++) {
+			series[iGraf] = new XYSeries(names[iGraf]);
+			for (int i = 0; i < values[iGraf].length; i++) {
+				series[iGraf].add(values[iGraf][i][0], values[iGraf][i][1]);
+			}
+		}
+		reloadGraphic();
+	}
+
+	/**
+	 * Define el tipo de visualizacion para la grafica.
+	 * Valores: 0 - Normal, 1 - Acumulado, 2 - Logaritmico
+	 * @param type
+	 */
+	public void setViewType(int type) {
+		this.viewType = type;
+		reloadGraphic();
+	}
+
+	/**
+	 * Recarga los datos de la grafica dependiendo del tipo de visualizacion
+	 */
+	private void reloadGraphic() {
+		dataset.removeAllSeries();
+		switch (viewType) {
+			case 0: // Normal
+				for (int i = 0; i < series.length; i++)
+					dataset.addSeries(series[i]);
+				break;
+			case 1: // Acumulado
+				XYSeries[] seriesAcum = new XYSeries[series.length];
+				for (int i = 0; i < series.length; i++) {
+					seriesAcum[i] = new XYSeries(series[i].getKey());
+					double total = 0;
+					for (int j = 0; j < series[i].getItemCount(); j++) {
+						total += series[i].getY(j).doubleValue();
+						seriesAcum[i].add(series[i].getX(j), total);
+					}
+					dataset.addSeries(seriesAcum[i]);
+				}
+				break;
+			case 2: // Logaritmico
+				XYSeries[] seriesLog = new XYSeries[series.length];
+
+				double minim = Double.MAX_VALUE;
+				for (int i = 0; i < series.length; i++)
+					for (int j = 0; j < series[i].getItemCount(); j++)
+						if (minim > series[i].getY(j).doubleValue())
+							minim = series[i].getY(j).doubleValue();
+				
+				for (int i = 0; i < series.length; i++) {
+					seriesLog[i] = new XYSeries(series[i].getKey());
+					for (int j = 0; j < series[i].getItemCount(); j++)
+						seriesLog[i].add(series[i].getX(j), java.lang.Math.log(series[i].getY(j).doubleValue() - minim + 1.0));
+					dataset.addSeries(seriesLog[i]);
+				}
+				break;
+		}
+		jPanelChart.repaint();
+	}
+
+	/**
+	 * Limpia la gr�fica
+	 */
+	public void cleanChart() {
+		series = new XYSeries[0];
+		reloadGraphic();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicChartPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicEvent.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.graphic;
+
+import java.util.EventObject;
+
+public class GraphicEvent extends EventObject {
+	private static final long serialVersionUID = -684281519921935004L;
+
+	public GraphicEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/BoxesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/BoxesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/BoxesPanel.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.textincreaser.TextIncreaserContainer;
+
+/**
+ *
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class BoxesPanel extends JPanel {
+	private static final long serialVersionUID = -4117483555280497312L;
+	private JPanel pLeft = null;
+	private JPanel pRight = null;
+	private TextIncreaserContainer controlLeft = null;
+	private TextIncreaserContainer controlRight = null;
+	public BoxesPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.add(getPLeft(), BorderLayout.WEST);
+		this.add(getPRight(), BorderLayout.EAST);
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPLeft() {
+		if (pLeft == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setHgap(0);
+			flowLayout1.setAlignment(FlowLayout.LEFT);
+			flowLayout1.setVgap(0);
+			pLeft = new JPanel();
+			pLeft.setLayout(flowLayout1);
+			pLeft.add(getControlLeft(), null);
+			pLeft.setPreferredSize(new Dimension(100, 30));
+		}
+		return pLeft;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPRight() {
+		if (pRight == null) {
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setHgap(0);
+			flowLayout2.setAlignment(FlowLayout.RIGHT);
+			flowLayout2.setVgap(0);
+			pRight = new JPanel();
+			pRight.setLayout(flowLayout2);
+			pRight.add(getControlRight(), null);
+			pRight.setPreferredSize(new Dimension(100, 30));
+		}
+		return pRight;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public TextIncreaserContainer getControlLeft() {
+		if (controlLeft == null) {
+			controlLeft = new TextIncreaserContainer(70, 0, 100, 0.0, true);
+		}
+		return controlLeft;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public TextIncreaserContainer getControlRight() {
+		if (controlRight == null) {
+			controlRight = new TextIncreaserContainer(70, 0, 100, 100.0, false);
+		}
+		return controlRight;
+	}
+
+	//****************************************************
+	//M�TODOS DEL CONTROL
+
+	/**
+	 * Obtiene el valor de los controles.
+	 * @return Array con los valores de ambos controles. El primer valor del array es el control de la derecha
+	 * y el segundo el de la izquierda.
+	 */
+	public double[] getBoxesValues(){
+		double[] v = new double[2];
+		v[0] = getControlRight().getValue();
+		v[1] = getControlLeft().getValue();
+		return v;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/BoxesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicContainer.java	(revision 42196)
@@ -0,0 +1,228 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.doubleslider.DoubleSlider;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderEvent;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderListener;
+import org.gvsig.gui.beans.textincreaser.TextIncreaserEvent;
+import org.gvsig.gui.beans.textincreaser.TextIncreaserListener;
+/**
+ * Control para el manejo de un gr�fico.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class GraphicContainer extends JPanel implements DoubleSliderListener, TextIncreaserListener {
+	private static final long serialVersionUID = -6230083498345786500L;
+	private ArrayList actionCommandListeners = new ArrayList();
+
+	private JPanel            pGeneral         = null;
+	private GraphicChartPanel pGraphic         = null;
+	private JPanel            panelSlider      = null;
+	private BoxesPanel        pBoxes           = null;
+	private DoubleSlider      doubleSlider     = null;
+
+	private boolean           bDoCallListeners = true;
+	static private int        eventId          = Integer.MIN_VALUE;
+
+	public GraphicContainer() {
+		initialize();
+	}
+
+	public GraphicContainer(boolean showSlider) {
+		getPDoubleSlider().setVisible(showSlider);
+		initialize();
+	}
+
+
+	private void initialize() {
+		this.setLayout(new BorderLayout(0, 4));
+		this.add(getPGraphic(), BorderLayout.CENTER);
+		this.add(getPGeneral(), BorderLayout.SOUTH);
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPGeneral() {
+		if (pGeneral == null) {
+			pGeneral = new JPanel();
+			pGeneral.setLayout(new BorderLayout(0, 2));
+			getPDoubleSlider().setPreferredSize(new Dimension(50, 25));
+			pGeneral.add(getPDoubleSlider(), BorderLayout.NORTH);
+			pGeneral.add(getPBoxes(), BorderLayout.SOUTH);
+		}
+		return pGeneral;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public GraphicChartPanel getPGraphic() {
+		if (pGraphic == null) {
+			pGraphic = new GraphicChartPanel();
+		}
+		return pGraphic;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JComponent getPDoubleSlider() {
+		if (panelSlider == null) {
+			panelSlider = new JPanel();
+			panelSlider.setLayout(new BorderLayout());
+			panelSlider.add(getDoubleSlider(), BorderLayout.CENTER);
+		}
+		return panelSlider;
+	}
+	
+	/**
+	 * Devuelve el componente DoubleSlider
+	 * @return
+	 */
+	private DoubleSlider getDoubleSlider() {
+		if (doubleSlider == null) {
+			doubleSlider = new DoubleSlider();
+			doubleSlider.addValueChangedListener(this);
+		}
+		return doubleSlider;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private BoxesPanel getPBoxes() {
+		if (pBoxes == null) {
+			pBoxes = new BoxesPanel();
+			pBoxes.getControlLeft().addValueChangedListener(this);
+			pBoxes.getControlRight().addValueChangedListener(this);
+		}
+		return pBoxes;
+	}
+
+	//****************************************************
+	//M�TODOS DEL CONTROL
+
+	public double getX1() {
+		double value = getPBoxes().getControlLeft().getValue();
+		
+		if (value > 100)
+			value = 100;
+
+		if (value < 0)
+			value = 0;
+
+		return value;
+	}
+
+	public double getX2() {
+		double value = getPBoxes().getControlRight().getValue();
+
+		if (value > 100)
+			value = 100;
+
+		if (value < 0)
+			value = 0;
+
+		return value;
+	}
+
+	public void actionValueChanged(TextIncreaserEvent e) {
+		if (e.getSource() == getPBoxes().getControlLeft()) {
+			if (getPBoxes().getControlLeft().getValue() > getPBoxes().getControlRight().getValue())
+				getPBoxes().getControlRight().setValue(getPBoxes().getControlLeft().getValue());
+		}
+		if (e.getSource() == getPBoxes().getControlRight()) {
+			if (getPBoxes().getControlRight().getValue() < getPBoxes().getControlLeft().getValue())
+				getPBoxes().getControlLeft().setValue(getPBoxes().getControlRight().getValue());
+		}
+		getDoubleSlider().setX1((int) getPBoxes().getControlLeft().getValue());
+		getDoubleSlider().setX2((int) getPBoxes().getControlRight().getValue());
+		callValueChangedListeners();
+	}
+
+	public void addValueChangedListener(GraphicListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	public void removeValueChangedListener(GraphicListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	private void callValueChangedListeners() {
+		if (!bDoCallListeners)
+			return;
+		Iterator acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			GraphicListener listener = (GraphicListener) acIterator.next();
+			listener.actionValueChanged(new GraphicEvent(this));
+		}
+		eventId++;
+	}
+
+	public void setBandVisible(int band, boolean visible) {
+		getPGraphic().getChart().getChart().getXYPlot().getRenderer().setSeriesVisible(band, Boolean.valueOf(visible));
+	}
+
+	public void setBandColor(int band, Color color) {
+		getPGraphic().getChart().getChart().getXYPlot().getRenderer().setSeriesPaint(band, color);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.doubleslider.DoubleSliderListener#actionValueChanged(java.util.EventObject)
+	 */
+	public void actionValueChanged(DoubleSliderEvent e) {
+		getPBoxes().getControlLeft().setValue(((DoubleSlider) e.getSource()).getX1());
+		getPBoxes().getControlRight().setValue(((DoubleSlider) e.getSource()).getX2());
+		callValueChangedListeners();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.doubleslider.DoubleSliderListener#actionValueDragged(java.util.EventObject)
+	 */
+	public void actionValueDragged(DoubleSliderEvent e) {
+		actionValueChanged(e);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicListener.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.graphic;
+
+import java.util.EventListener;
+
+public interface GraphicListener extends EventListener {
+  public void actionValueChanged(GraphicEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/GraphicListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/images/splash.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/graphic/images/splash.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Pager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Pager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Pager.java	(revision 42196)
@@ -0,0 +1,489 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: Pager.java 13655 2007-09-12 16:28:55Z bsanchez $
+ * $Log$
+ * Revision 1.2  2007-09-12 16:28:23  bsanchez
+ * *** empty log message ***
+ *
+ * Revision 1.1  2007/08/20 08:34:45  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.1  2006/03/22 11:18:29  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/02/28 15:25:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2.2.6  2006/02/23 10:36:30  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2.2.5  2006/02/16 10:36:41  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/02/16 09:09:05  caballero
+ * PAger de Jaume
+ *
+ * Revision 1.2.2.4  2006/02/10 13:23:18  jaume
+ * page value can now be set externally
+ *
+ * Revision 1.2.2.3  2006/01/31 16:25:24  jaume
+ * correcciones de bugs
+ *
+ * Revision 1.3  2006/01/26 16:07:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2.2.1  2006/01/26 12:59:32  jaume
+ * 0.5
+ *
+ * Revision 1.2  2006/01/24 14:36:33  jaume
+ * This is the new version
+ *
+ * Revision 1.1.2.5  2006/01/19 16:09:30  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.4  2006/01/17 17:05:39  jaume
+ * fixed crazy buttons behavior :-P
+ *
+ * Revision 1.1.2.3  2006/01/17 17:01:55  jaume
+ * fixed crazy buttons behavior :-P
+ *
+ * Revision 1.1.2.2  2006/01/11 12:20:30  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2006/01/10 13:11:38  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2006/01/10 11:33:31  jaume
+ * Time dimension working against Jet Propulsion Laboratory's WMS server
+ *
+ * Revision 1.1.2.3  2006/01/09 18:10:38  jaume
+ * casi con el time dimension
+ *
+ * Revision 1.1.2.2  2006/01/02 18:08:01  jaume
+ * Tree de estilos
+ *
+ * Revision 1.1.2.1  2005/12/30 08:56:19  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+/**
+ *
+ */
+package org.gvsig.gui.beans;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+
+
+
+/**
+ * Bean that is useful to browse a very large list of data. It
+ * includes a set of navigation buttons to step ahead or behind
+ * by one or going to the first and last element of the list as
+ * well as an slider and a text field for directly focus on a
+ * list item.
+ *
+ * @author jaume dominguez faus
+ *
+ */
+public class Pager extends DefaultBean {
+  private static final long serialVersionUID = 1997136221292929382L;
+	private JPanel buttonsPanel = null;
+	private JButton btnFastBackward = null;
+	private JButton btnBackward = null;
+	private JTextField txtItemCountDisplay = null;
+	private JButton btnForward = null;
+	private JButton btnFastForward = null;
+	private JPanel sliderPanel = null;
+	private JSlider slider = null;
+	private int itemCount;
+	private int lowLimit;
+	private int currentValue = -1;
+	private int orientation;
+	private boolean refreshing = false;
+	public static int HORIZONTAL=0;
+	public static int VERTICAL=1;
+	/**
+	 * This is the default constructor. Creates a new instance of ItemBrowser with
+	 * zero items.
+	 */
+	public Pager(int orientation){
+		super();
+		this.orientation=orientation;
+		initialize(0, 0);
+	}
+	
+	/**
+	 * Creates a new instance of ItemBrowser defining its edges
+	 * @param lowIndex, the lowest edge.
+	 * @param itemCount, the highest edge.
+	 */
+	public Pager(int lowIndex, int itemCount,int orientation) {
+		super();
+		this.orientation=orientation;
+		initialize(lowIndex, itemCount);
+	}
+	
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize(int lowIndex, int itemCount) {
+		setItemCount(itemCount);
+		this.lowLimit = lowIndex;
+		this.setLayout(null);
+		if (orientation==VERTICAL){
+			this.setSize(45,305);
+			this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.lightGray,1));
+			this.setPreferredSize(new Dimension(40,300));
+		}else{
+			this.setSize(240, 50);
+			this.setPreferredSize(new Dimension(190,50));
+		}
+		
+		this.add(getSliderPanel(), null);
+		this.add(getButtonsPanel(), null);
+	}
+	
+	/**
+	 * This method initializes buttonsPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getButtonsPanel() {
+		if (buttonsPanel == null) {
+			buttonsPanel = new JPanel();
+			buttonsPanel.setLayout(null);
+			buttonsPanel.setName("buttonsPanel");
+			buttonsPanel.setPreferredSize(new java.awt.Dimension(173,50));
+			if (orientation==VERTICAL){
+				buttonsPanel.setBounds(3, 182, 35,115);
+			}else{
+				buttonsPanel.setBounds(5, 25, 240, 25);
+			}
+			
+			buttonsPanel.add(getBtnFastBackward(), null);
+			buttonsPanel.add(getBtnBackward(), null);
+			buttonsPanel.add(getTxtItemCountDisplay(), null);
+			buttonsPanel.add(getBtnForward(), null);
+			buttonsPanel.add(getBtnFastForward(), null);
+		}
+		return buttonsPanel;
+	}
+	
+	/**
+	 * This method initializes btnFastBackWard
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnFastBackward() {
+		if (btnFastBackward == null) {
+			btnFastBackward = new JButton();
+			if (orientation==VERTICAL){
+				btnFastBackward.setBounds(7, 1, 20, 24);
+			}else{
+				btnFastBackward.setBounds(2, 1, 20, 24);
+			}
+			
+			btnFastBackward.setEnabled(itemCount!=0);
+			btnFastBackward.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					if (currentValue != lowLimit){
+						setValue(lowLimit, true);
+					}
+				}});
+			btnFastBackward.setIcon(new ImageIcon(getClass().getResource("images/fastbackward.png")));
+		}
+		return btnFastBackward;
+	}
+	
+	/**
+	 * This method initializes btnBackward
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnBackward() {
+		if (btnBackward == null) {
+			btnBackward = new JButton();
+			if (orientation==VERTICAL){
+				btnBackward.setBounds(7, 21, 20, 24);
+			}else{
+				btnBackward.setBounds(21, 1, 20, 24);
+			}
+			
+			btnBackward.setEnabled(itemCount!=0);
+			btnBackward.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					if (currentValue > lowLimit ){
+						setValue(currentValue-1, true);
+					}
+				}});
+			btnBackward.setIcon(new ImageIcon(getClass().getResource("images/backward.png")));
+		}
+		return btnBackward;
+	}
+	
+	/**
+	 * This method initializes txtItemCountDisplay
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtItemCountDisplay() {
+		if (txtItemCountDisplay == null) {
+			txtItemCountDisplay = new JTextField();
+			txtItemCountDisplay.setEnabled(itemCount!=0);
+			txtItemCountDisplay.setHorizontalAlignment(javax.swing.JTextField.CENTER);
+			if (orientation==VERTICAL){
+				txtItemCountDisplay.setBounds(2,43, 33, 23);
+			} else {
+				txtItemCountDisplay.setBounds(43, 2, 144, 23);
+			}
+			
+			txtItemCountDisplay.setText(lowLimit+" / "+itemCount);
+			txtItemCountDisplay.addMouseListener(new java.awt.event.MouseAdapter() {
+				public void mouseClicked(java.awt.event.MouseEvent e) {
+					txtItemCountDisplay.setText(currentValue+"");
+					txtItemCountDisplay.setSelectionStart(0);
+					txtItemCountDisplay.setSelectionEnd(txtItemCountDisplay.getText().length());
+				}
+			});
+			txtItemCountDisplay.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					try {
+						int v = Integer.parseInt(txtItemCountDisplay.getText());
+						v = (v>itemCount) ? itemCount : v;
+						setValue(v, true);
+					} catch (Exception ex){
+						refreshText(currentValue);
+					}
+					txtItemCountDisplay.transferFocusDownCycle();
+				}
+			});
+			txtItemCountDisplay.setEnabled(false);
+		}
+		return txtItemCountDisplay;
+	}
+	
+	/**
+	 * This, sets the bean value and triggers an event that can be captured
+	 * by a listener.
+	 * @param number
+	 * @param fireEvent, if true then this method will fire the event. If false,
+	 * then the value will be changed silently.
+	 *
+	 */
+	public void setValue(int number, boolean fireEvent) {
+		if (number < lowLimit)
+			number = lowLimit;
+		if (number > itemCount-1)
+			number = itemCount;
+		if (number != currentValue) {
+			currentValue = number;
+			refreshControls();
+			if (fireEvent)
+				callValueChanged(new Integer(currentValue));
+		}
+	}
+	
+	/**
+	 * Refreshes all the mutable controls in this component.
+	 */
+	private void refreshControls() {
+		int normalizedValue = (int) ((currentValue / (float) itemCount)*100);
+		refreshSlider(normalizedValue);
+		refreshText(currentValue);
+	}
+	
+	/**
+	 * Sets the slider to the correct (scaled) position.
+	 * @param normalizedValue
+	 */
+	private void refreshSlider(int normalizedValue) {
+		refreshing = true;
+		getSlider().setValue(normalizedValue);
+		refreshing = false;
+	}
+	
+	/**
+	 * @param string
+	 */
+	private void refreshText(int value) {
+		String newText = (value+1) +" / "+itemCount;
+		
+		if (!getTxtItemCountDisplay().getText().equals(newText))
+			getTxtItemCountDisplay().setText(newText);
+	}
+	
+	/**
+	 * This method initializes btnForward
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnForward() {
+		if (btnForward == null) {
+			btnForward = new JButton();
+			if (orientation==VERTICAL){
+				btnForward.setBounds(7, 67, 20, 24);
+			}else{
+				btnForward.setBounds(189, 1, 20, 24);
+			}
+			
+			btnForward.setEnabled(itemCount!=0);
+			btnForward.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					if (currentValue < itemCount-1){
+						setValue(currentValue+1, true);
+					}
+				}});
+			btnForward.setIcon(new ImageIcon(getClass().getResource("images/forward.png")));
+		}
+		return btnForward;
+	}
+	
+	/**
+	 * This method initializes btnFastForward
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnFastForward() {
+		if (btnFastForward == null) {
+			btnFastForward = new JButton();
+			if (orientation==VERTICAL){
+				btnFastForward.setBounds(7, 91, 20, 24);
+			}else{
+				btnFastForward.setBounds(208, 1, 20, 24);
+			}
+			
+			btnFastForward.setEnabled(itemCount!=0);
+			btnFastForward.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					if (currentValue < itemCount-1){
+						setValue(itemCount-1, true);
+					}
+				}});
+			btnFastForward.setIcon(new ImageIcon(getClass().getResource("images/fastforward.png")));
+		}
+		return btnFastForward;
+	}
+	
+	/**
+	 * This method initializes sliderPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getSliderPanel() {
+		if (sliderPanel == null) {
+			sliderPanel = new JPanel();
+			sliderPanel.setLayout(null);
+			sliderPanel.setName("sliderPanel");
+			if (orientation==VERTICAL){
+				sliderPanel.setBounds(3, 0, 35, 181);
+			}else{
+				sliderPanel.setBounds(5, 0, 300, 26);
+			}
+			sliderPanel.setEnabled(false);
+			sliderPanel.add(getSlider(), null);
+		}
+		return sliderPanel;
+	}
+	
+	/**
+	 * This method initializes slider
+	 *
+	 * @return javax.swing.JSlider
+	 */
+	private JSlider getSlider() {
+		if (slider == null) {
+			slider = new JSlider();
+			slider.setValue(0);
+			if (orientation==VERTICAL){
+				slider.setOrientation(JSlider.VERTICAL);
+				slider.setSize(24, 230);
+			}else{
+				slider.setOrientation(JSlider.HORIZONTAL);
+				slider.setSize(230, 24);
+			}
+			
+			slider.setLocation(0, 1);
+			slider.setEnabled(itemCount!=0);
+			slider.addMouseListener(new java.awt.event.MouseAdapter() {
+				public void mouseReleased(java.awt.event.MouseEvent e) {
+					int value = (int) (getSlider().getValue() * itemCount * 0.01);
+					if (value >= itemCount)
+						value = itemCount - 1;
+					refreshText(value);
+					setValue(value, false);
+				}
+			});
+			slider.addChangeListener(new javax.swing.event.ChangeListener() {
+				public void stateChanged(javax.swing.event.ChangeEvent e) {
+					int value = (int) (getSlider().getValue() * itemCount * 0.01);
+					if (value >= itemCount)
+						value = itemCount - 1;
+					refreshText(value);
+					if (!refreshing)
+						callValueChanged(new Integer(value));
+				}
+			});
+		}
+		return slider;
+	}
+	
+	/**
+	 * Sets the amount of items that this component will handle.
+	 * @param count
+	 */
+	public void setItemCount(int count){
+		itemCount = count;
+		getSlider().setEnabled(count != 0);
+		getBtnFastBackward().setEnabled(count != 0);
+		getBtnBackward().setEnabled(count != 0);
+		getTxtItemCountDisplay().setEnabled(count != 0);
+		getBtnForward().setEnabled(count != 0);
+		getBtnFastForward().setEnabled(count != 0);
+	}
+	
+	/**
+	 * Sets the starting point if none is defined the pager will start from 0.
+	 * @param initial position
+	 */
+	public void setStartingPosition(int initialPosition) {
+		lowLimit = initialPosition;
+	}
+	
+	public void setCurrentPosition(int pos) {
+		setValue(pos, true);
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,15"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Pager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelListener.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.buttonspanel;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ *  
+ */
+
+import java.util.EventListener;
+
+/**
+ *
+ * @version 09/05/2008
+ *
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface ButtonsPanelListener extends EventListener {
+  public void actionButtonPressed(ButtonsPanelEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/IButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/IButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/IButtonsPanel.java	(revision 42196)
@@ -0,0 +1,286 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.buttonspanel;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * <p>Interface for adding support to enable/disable the necessary buttons of a {@link ButtonsPanel ButtonsPanel} component.</p>
+ * <p>For example, if our panel has only the <i>accept</i> and <i>cancel</i> buttons, 
+ *  will only need to have implemented the methods related with them. And, even, only one (the set...) of them,
+ *   if, for instance, we don't need to know if a particular button is or isn't enabled.</p>    
+ * 
+ * @version 09/05/2008
+ *
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface IButtonsPanel {
+	/**
+	 * <p>Enables (or disables) the <i>accept button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>accept button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledAcceptButton()
+	 */
+	public void setEnabledAcceptButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>accept button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>accept button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledAcceptButton(boolean)
+	 */
+	public boolean isEnabledAcceptButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>cancel button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>cancel button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledCancelButton()
+	 */
+	public void setEnabledCancelButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>cancel button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>cancel button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledCancelButton(boolean)
+	 */
+	public boolean isEnabledCancelButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>apply button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>apply button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledApplyButton()
+	 */
+	public void setEnabledApplyButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>apply button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>apply button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledApplyButton(boolean)
+	 */
+	public boolean isEnabledApplyButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>yes button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>yes button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledYesButton()
+	 */
+	public void setEnabledYesButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>yes button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>yes button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledYesButton(boolean)
+	 */
+	public boolean isEnabledYesButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>no button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>no button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledNoButton()
+	 */
+	public void setEnabledNoButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>no button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>no button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledNoButton(boolean)
+	 */
+	public boolean isEnabledNoButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>close button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>close button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledCloseButton()
+	 */
+	public void setEnabledCloseButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>close button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>close button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledCloseButton(boolean)
+	 */
+	public boolean isEnabledCloseButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>exit button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>exit button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledExitButton()
+	 */
+	public void setEnabledExitButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>exit button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>exit button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledExitButton(boolean)
+	 */
+	public boolean isEnabledExitButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>see details button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>see details button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledSeeDetailsButton()
+	 */
+	public void setEnabledSeeDetailsButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>see details button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>see details button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledSeeDetailsButton(boolean)
+	 */
+	public boolean isEnabledSeeDetailsButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>hide details button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>hide details button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledHideDetailsButton()
+	 */
+	public void setEnabledHideDetailsButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>hide details button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>hide details button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledHideDetailsButton(boolean)
+	 */
+	public boolean isEnabledHideDetailsButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>pause button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>pause button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledPauseButton()
+	 */
+	public void setEnabledPauseButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>pause button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>pause button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledPauseButton(boolean)
+	 */
+	public boolean isEnabledPauseButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>restart button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>restart button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledRestartButton()
+	 */
+	public void setEnabledRestartButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>restart button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>restart button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledRestartButton(boolean)
+	 */
+	public boolean isEnabledRestartButton();
+
+	/**
+	 * <p>Enables (or disables) the <i>save button</i>.</p>
+	 * 
+	 * @param b <code>true</code> to enable the <i>save button</i>, otherwise <code>false</code>
+	 * 
+	 * @see #isEnabledSaveButton()
+	 */
+	public void setEnabledSaveButton(boolean b);
+
+	/**
+	 * <p>Determines whether the <i>save button</i> is enabled. An enabled component can respond
+	 *  to user input and generate events.</p>
+	 * 
+	 * @return <code>true</code> if the <i>save button</i> is enabled, <code>false</code> otherwise
+	 * 
+	 * @see #setEnabledSaveButton(boolean)
+	 */
+	public boolean isEnabledSaveButton();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/IButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanel.java	(revision 42196)
@@ -0,0 +1,390 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.buttonspanel;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.Messages;
+
+/**
+ * <code>ButtonsPanel</code> ofrece un widget con un conjunto de botones
+ * preestablecidos, aunque tambi�n se pueden a�adir botones con el m�todo
+ * {@link #addButton(String, int)}
+ *
+ * @version 09/05/2008
+ *
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ButtonsPanel extends JPanel {
+	private static final long serialVersionUID = -1660559792086305063L;
+
+	private ArrayList<ButtonsPanelListener> actionCommandListeners = new ArrayList<ButtonsPanelListener>();
+	private ArrayList<JButton> buttonsList = new ArrayList<JButton>();
+
+	static private int      eventId                   = Integer.MIN_VALUE;
+
+	public static final int BUTTON_ACCEPT             = 1;
+	public static final int BUTTON_CANCEL             = 2;
+	public static final int BUTTON_APPLY              = 3;
+	public static final int BUTTON_YES                = 4;
+	public static final int BUTTON_NO                 = 5;
+	public static final int BUTTON_CLOSE              = 6;
+	public static final int BUTTON_EXIT               = 7;
+	public static final int BUTTON_SEEDETAILS         = 8;
+	public static final int BUTTON_HIDEDETAILS        = 9;
+	public static final int BUTTON_PAUSE              = 10;
+	public static final int BUTTON_RESTART            = 11;
+	public static final int BUTTON_SAVE               = 12;
+	/**
+	 * Sirve para cuando se crean botones nuevos, saber el �ltimo n�mero usado
+	 * internamente, as� '<code>new_id = BUTTON_LAST + 1;</code>' podr�a ser
+	 * el �ndice del nuevo bot�n.
+	 */
+	public static final int BUTTON_LAST               = 12;
+	public static final int BUTTONS_ACCEPT            = 1;
+	public static final int BUTTONS_ACCEPTCANCEL      = 2;
+	public static final int BUTTONS_ACCEPTCANCELAPPLY = 3;
+	public static final int BUTTONS_CANCEL            = 4;
+	public static final int BUTTONS_YESNO             = 5;
+	public static final int BUTTONS_CLOSE             = 6;
+	public static final int BUTTONS_EXIT              = 7;
+	public static final int BUTTONS_NONE              = 8;
+	public static final int BUTTONS_APPLYCLOSE        = 9;
+
+	/**
+	 * Crea un ButtonsPanel con un Layout por defecto.
+	 */
+	public ButtonsPanel() {
+		initialize();
+	}
+
+	private void initialize() {
+		setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 2, 0));
+		setBorder(javax.swing.BorderFactory.createEmptyBorder(4, 0, 0, 0));
+	}
+	/**
+	 * Crea un ButtonsPanel con un Layout por defecto.
+	 * @param items Que botones vamos a usar en la creaci�n.
+	 */
+	public ButtonsPanel(int items) {
+		initialize();
+		switch (items) {
+			case BUTTONS_ACCEPT:
+				addAccept();
+				break;
+			case BUTTONS_ACCEPTCANCEL:
+				addAccept();
+				addCancel();
+				break;
+			case BUTTONS_ACCEPTCANCELAPPLY:
+				addApply();
+				addAccept();
+				addCancel();
+				break;
+			case BUTTONS_APPLYCLOSE:
+				addApply();
+				addClose();
+				break;
+			case BUTTONS_CANCEL:
+				addCancel();
+				break;
+			case BUTTONS_YESNO:
+				addYes();
+				addNo();
+				break;
+			case BUTTONS_CLOSE:
+				addClose();
+				break;
+			case BUTTONS_EXIT:
+				addExit();
+				break;
+			case BUTTONS_NONE:
+				break;
+		}
+	}
+
+	/**
+	 * A�adir el disparador de cuando se pulsa un bot�n.
+	 * @param listener
+	 */
+	public void addButtonPressedListener(ButtonsPanelListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Devuelve el array de listeners del componente
+	 * @return
+	 */
+	public Object[] getButtonPressedListeners() {
+		return actionCommandListeners.toArray();
+	}
+
+	/**
+	 * Borrar el disparador de eventos de los botones.
+	 * @param listener
+	 */
+	public void removeButtonPressedListener(ButtonsPanelListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	private void callActionCommandListeners(int buttonID) {
+		Iterator<ButtonsPanelListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ButtonsPanelListener listener = (ButtonsPanelListener) acIterator.next();
+			listener.actionButtonPressed(new ButtonsPanelEvent(this, buttonID));
+		}
+		eventId++;
+	}
+
+	/**
+	 * A�adir el boton Aceptar.
+	 */
+	public void addAccept() {
+		addButton(Messages.getText("aceptar"), BUTTON_ACCEPT);
+	}
+
+	/**
+	 * A�adir el boton Guardar.
+	 */
+	public void addSave() {
+		addButton(Messages.getText("guardar"), BUTTON_SAVE);
+	}
+
+	/**
+	 * A�adir el boton Cancelar.
+	 */
+	public void addCancel() {
+		addButton(Messages.getText("cancelar"), BUTTON_CANCEL);
+	}
+
+	/**
+	 * A�adir el boton S�.
+	 */
+	public void addYes() {
+		addButton(Messages.getText("si"), BUTTON_YES);
+	}
+
+	/**
+	 * A�adir el boton No.
+	 */
+	public void addNo() {
+		addButton(Messages.getText("no"), BUTTON_NO);
+	}
+
+	/**
+	 * A�adir el boton Aplicar.
+	 */
+	public void addApply() {
+		addButton(Messages.getText("aplicar"), BUTTON_APPLY);
+	}
+
+	/**
+	 * A�adir el boton Cerrar.
+	 */
+	public void addClose() {
+		addButton(Messages.getText("cerrar"), BUTTON_CLOSE);
+	}
+
+	/**
+	 * A�adir el boton Salir.
+	 */
+	public void addExit() {
+		addButton(Messages.getText("salir"), BUTTON_EXIT);
+	}
+
+	/**
+	 * A�adir el boton Ver detalles.
+	 */
+	public void addSeeDetails() {
+		addButton(Messages.getText("verdetalles"), BUTTON_SEEDETAILS);
+	}
+
+	/**
+	 * A�adir el boton Ocultar detalles.
+	 */
+	public void addHideDetails() {
+		addButton(Messages.getText("ocultardetalles"), BUTTON_HIDEDETAILS);
+	}
+
+	/**
+	 * A�adir el boton Pausar.
+	 */
+	public void addPause() {
+		addButton(Messages.getText("pausar"), BUTTON_PAUSE);
+	}
+
+	/**
+	 * A�adir el boton Reanudar.
+	 */
+	public void addRestart() {
+		addButton(Messages.getText("reanudar"), BUTTON_RESTART);
+	}
+
+	/**
+	 * A�adimos un bot�n definido por el usuario.
+	 *
+	 * @param text Texto que contendr� el bot�n
+	 * @param id Entero para identificar los eventos del bot�n
+	 */
+	public void addButton(String text, int id) {
+		JButton button = new JButton();
+		button.setText(text);
+
+		buttonsList.add(button);
+		button.setActionCommand(id + "");
+		button.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				callActionCommandListeners(Integer.parseInt(e.getActionCommand()));
+			}
+		});
+
+		add(button);
+	}
+
+	/**
+	 * Obtener un bot�n por su Entero
+	 * @param id N�mero del disparador del bot�n
+	 * @return El bot�n especificado o <code>null</code> si no se encontr� el bot�n.
+	 */
+	public JButton getButton(int id) {
+		Iterator<JButton> acIterator = buttonsList.iterator();
+		while (acIterator.hasNext()) {
+			JButton button = (JButton) acIterator.next();
+			if (Integer.parseInt(button.getActionCommand()) == id)
+				return button;
+		}
+		return null;
+	}
+
+	/**
+	 * <p>Removes the button identified by <code>id</code>.</p>
+	 * 
+	 * @param id identifier of the button
+	 * @return <code>true</code> if has removed the button; otherwise <code>false</code>
+	 */
+	public boolean removeButton(int id) {
+		String b_text = getButtonText(id);
+		
+		Iterator<JButton> acIterator = buttonsList.iterator();
+		while (acIterator.hasNext()) {
+			JButton button = (JButton) acIterator.next();
+			if (button.getText().compareTo(b_text) == 0) {
+				buttonsList.remove(button);
+				return true;
+			}
+		}
+		
+		return false;
+	}
+	
+	/**
+	 * <p>Returns the text of the button identified by <code>id</code>.</p>
+	 * 
+	 * @param id identifier of the button
+	 * 
+	 * @return text of the identified button
+	 */
+	protected String getButtonText(int id) {
+		switch (id) {
+			case BUTTON_ACCEPT:
+				return Messages.getText("aceptar");
+			case BUTTON_CANCEL:
+				return Messages.getText("cancelar");
+			case BUTTON_APPLY:
+				return Messages.getText("aplicar");
+			case BUTTON_YES:
+				return Messages.getText("si");
+			case BUTTON_NO:
+				return Messages.getText("no");
+			case BUTTON_CLOSE:
+				return Messages.getText("cerrar");
+			case BUTTON_EXIT:
+				return Messages.getText("salir");
+			case BUTTON_SEEDETAILS:
+				return Messages.getText("verdetalles");
+			case BUTTON_HIDEDETAILS:
+				return Messages.getText("ocultardetalles");
+			case BUTTON_PAUSE:
+				return Messages.getText("pausar");
+			case BUTTON_RESTART:
+				return Messages.getText("reanudar");
+			case BUTTON_SAVE:
+				return Messages.getText("guardar");
+		}
+
+		return null;
+	}
+
+	/**
+	 * <p>Enables (or disables) the button identified by <code>id</code>.</p>
+	 * 
+	 * @param id identifier of the button
+	 * @param b <code>true</code> to enable the button, otherwise <code>false</code>
+	 * 
+	 * @return <code>true</code> if there was a button of that kind in this group, otherwise <code>false</code>
+	 */
+	public boolean setEnabled(int id, boolean b) {
+		String b_text = getButtonText(id);
+		
+		Iterator<JButton> acIterator = buttonsList.iterator();
+		while (acIterator.hasNext()) {
+			JButton button = (JButton) acIterator.next();
+			if (button.getText().compareTo(b_text) == 0) {
+				button.setEnabled(b);
+				return true;
+			}
+		}
+		
+		return false;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelEvent.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.buttonspanel;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.util.EventObject;
+
+/**
+ *
+ * @version 09/05/2008
+ *
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ButtonsPanelEvent extends EventObject {
+	private static final long serialVersionUID = 4275588038151358375L;
+
+	int button = 0;
+
+	public ButtonsPanelEvent(Object source, int button) {
+		super(source);
+		this.button = button;
+	}
+	
+	public int getButton() {
+		return button;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonspanel/ButtonsPanelEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/SamplePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/SamplePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/SamplePanel.java	(revision 42196)
@@ -0,0 +1,144 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: SamplePanel.java 13655 2007-09-12 16:28:55Z bsanchez $
+ * $Log$
+ * Revision 1.3  2007-09-12 16:28:23  bsanchez
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/08/21 08:39:05  bsanchez
+ * - Sustituir "deprecated" show por setVisible
+ *
+ * Revision 1.1  2007/08/20 08:34:45  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.1  2006/03/22 11:18:29  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/02/28 15:25:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4.2.4  2006/02/16 10:36:41  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4.2.3  2006/01/31 16:25:24  jaume
+ * correcciones de bugs
+ *
+ * Revision 1.5  2006/01/26 16:07:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4.2.1  2006/01/26 12:59:32  jaume
+ * 0.5
+ *
+ * Revision 1.4  2006/01/26 12:50:20  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/01/25 15:14:02  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/01/24 14:36:33  jaume
+ * This is the new version
+ *
+ * Revision 1.1.2.5  2006/01/10 13:11:38  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.4  2006/01/10 11:33:31  jaume
+ * Time dimension working against Jet Propulsion Laboratory's WMS server
+ *
+ * Revision 1.1.2.3  2006/01/09 18:10:38  jaume
+ * casi con el time dimension
+ *
+ * Revision 1.1.2.2  2006/01/02 18:08:01  jaume
+ * Tree de estilos
+ *
+ * Revision 1.1.2.1  2005/12/30 08:56:19  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+/**
+ * 
+ */
+package org.gvsig.gui.beans;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.listeners.BeanListener;
+/**
+ * Sample class for see how to use BeanListeners.
+ * <p>
+ * Have fun! ;-)
+ * </p>
+ * @author jaume
+ */
+public class SamplePanel extends JPanel {
+  private static final long serialVersionUID = 3663247043945556938L;
+		private Pager ep;
+    /**
+     * This is the default constructor
+     */
+    public SamplePanel() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        this.setSize(300, 200);
+        this.setLayout(null);
+        
+        this.add(getEditionPanel(), null);
+        
+    }
+
+    private Pager getEditionPanel(){
+        if (ep == null){
+            ep = new Pager(0, 20, Pager.HORIZONTAL);
+            ep.addListener(new BeanListener(){
+
+                public void beanValueChanged(Object value) {
+                    System.out.println("("+((Integer) value).intValue()+")");
+                }
+                
+            });
+        }
+        return ep;
+    }
+    
+    public static void main(String[] args){
+        //dim = new TimeDimension("units", "unitSymbol", "2004-12-24/2005-12-18/P1D");
+        
+        JFrame frame = new JFrame();
+        frame.getContentPane().add(new SamplePanel());
+        frame.setBounds(0, 0, 279, 63);
+        frame.pack();
+        frame.setVisible(true);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/SamplePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/simplecombobox/SimpleComboBox.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/simplecombobox/SimpleComboBox.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/simplecombobox/SimpleComboBox.java	(revision 42196)
@@ -0,0 +1,165 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.simplecombobox;
+
+import javax.swing.JComboBox;
+
+
+
+/**
+ * <p>Simple ComboBox component to add items with an associated code.
+ * Typical usage would be adding Strings items and associated action
+ * codes. Example</p>
+ * <pre>SimpleComboBox combo = new SimpleComboBox();
+ * combo.addItem("Left", TextComponent.ALIGN_LEFT);
+ * combo.addItem("Right", TextComponent.ALIGN_RIGHT;
+ * combo.addItem("Center", TextComponent.ALIGN_CENTER);
+ * combo.addItem("Justify", TextComponent.ALIGN_JUSTIFY);
+ * . . .
+ * int textAlign = combo.getSelectedCode();
+ * textComponent.align(textAlign);
+ * </pre>
+ * <p>This component provides a basic selection autocompletion when the user
+ * presses a key (while the combo has the focus).</p>
+ * 
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public class SimpleComboBox extends JComboBox {
+	private static final long serialVersionUID = 5805274299238455334L;
+
+	public SimpleComboBox() {
+        super();
+    }
+    
+	/**
+	 * <p>Invalid method, do not use it. Use
+	 * {@link #addItem(Object, int)} instead.</p>
+	 */
+	public void addItem(Object anObject) {
+		throw new RuntimeException("Invalid method: use addItem(Object anObject, int code) instead or regular Swing JComboBox");
+	}
+
+    public void addItem(Object anObject, int code) {
+    	ComboItem item = new ComboItem(anObject, code);
+    	super.addItem(item);
+    }
+
+    public Object getItemAt(int index) {
+    	ComboItem item = (ComboItem) super.getItemAt(index);
+    	if (item!=null) {
+    		return item.getObject();
+    	}
+    	return null;
+    }
+
+    public Object getSelectedItem() {
+    	ComboItem item = (ComboItem) super.getSelectedItem();
+    	if (item!=null) {
+    		return item.getObject();
+    	}
+    	return null;
+    }
+
+    public void setSelectedIndex(int anIndex) {
+        int size = dataModel.getSize();
+        if ( anIndex == -1 ) {
+            setSelectedItem( null );
+        } else if ( anIndex < -1 || anIndex >= size ) {
+            throw new IllegalArgumentException("setSelectedIndex: " + anIndex + " out of bounds");
+        } else {
+        	Object item = dataModel.getElementAt(anIndex);
+            super.setSelectedItem(item);
+        }
+    }
+
+    public void setSelectedItem(Object anObject) {
+    	ComboItem item;
+    	for (int i=0; i<getItemCount(); i++) {
+    		item = (ComboItem) super.getItemAt(i);
+    		if (item.getObject().equals(anObject)) {
+    			super.setSelectedItem(item);    			
+    		}
+    	}
+    }
+
+    public void setSelectedCode(int code) {
+    	ComboItem item;
+    	for (int i=0; i<getItemCount(); i++) {
+    		item = (ComboItem) super.getItemAt(i);
+    		if (item.getCode()==code) {
+    			super.setSelectedItem(item);    			
+    		}
+    	}
+    }
+
+    public Object[] getSelectedObjects() {
+    	Object obj = getSelectedItem();
+    	if (obj!=null) {
+    		return new Object[]{obj};
+    	}
+    	else {
+    		return new Object[0];
+    	}
+    }
+
+    /**
+     * Gets the code associated to the selected item
+     * @return
+     */
+    public int getSelectedCode() {
+    	ComboItem item = (ComboItem) super.getSelectedItem();
+    	if (item!=null) {
+    		return item.getCode();
+    	}
+    	return -1;
+    }
+
+    private class ComboItem {
+    	private Object theObject;
+    	private int code;
+
+    	public ComboItem(Object object, int code) {
+    		this.theObject = object;
+    		this.code = code;
+    	}
+ 
+		public void setObject(Object theObject) {
+			this.theObject = theObject;
+		}
+		public Object getObject() {
+			return theObject;
+		}
+		public void setCode(int code) {
+			this.code = code;
+		}
+		public int getCode() {
+			return code;
+		}
+
+		public String toString() {
+			return theObject.toString();
+		}
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/simplecombobox/SimpleComboBox.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/defaultbuttonspanel/DefaultButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/defaultbuttonspanel/DefaultButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/defaultbuttonspanel/DefaultButtonsPanel.java	(revision 42196)
@@ -0,0 +1,201 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.defaultbuttonspanel;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.LayoutManager;
+import java.awt.Window;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+
+/**
+ * <code>DefaultButtonsPanel</code> es un Panel que hereda de <code>JPanel</code> con
+ * el a�adido de poder definir una botonera por defecto.
+ *
+ * @version 20/08/2008
+ *
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class DefaultButtonsPanel extends JPanel {
+	private static final long serialVersionUID = 1536590395737700551L;
+	ButtonsPanel              bp               = null;
+	JPanel                    content          = null;
+	private int               margin           = 4;
+	
+	/**
+	 * Crea el <code>DefaultButtonsPanel</code> con los botones por defecto.
+	 */
+	public DefaultButtonsPanel() {
+		super.setLayout(new java.awt.BorderLayout(0, 0));
+		getButtonsPanel().addAccept();
+		getButtonsPanel().addCancel();
+		getButtonsPanel().addApply();
+		super.add(getButtonsPanel(), java.awt.BorderLayout.SOUTH);
+		super.add(getContent(), java.awt.BorderLayout.CENTER);
+		this.setBorder(javax.swing.BorderFactory.createEmptyBorder(margin, margin, margin, margin));
+	}
+
+	/**
+	 * Crea el <code>DialogPanel</code> con los botones que definamos de la clase
+	 * <code>ButtonsPanel</code>
+	 *
+	 * @param buttons Constante para definir que botones se crear�n
+	 */
+	public DefaultButtonsPanel(int buttons) {
+		super.setLayout(new java.awt.BorderLayout(0, 0));
+		bp = new ButtonsPanel(buttons);
+		super.add(getButtonsPanel(), java.awt.BorderLayout.SOUTH);
+		super.add(getContent(), java.awt.BorderLayout.CENTER);
+		this.setBorder(javax.swing.BorderFactory.createEmptyBorder(margin, margin, margin, margin));
+	}
+
+	/**
+	 * Obtener el objeto <code>ButtonsPanel</code> del <code>DialogPanel</code>.
+	 * En caso de no estar creado, lo crear�.
+	 *
+	 * @return El componente bp
+	 */
+	public ButtonsPanel getButtonsPanel() {
+		if (bp == null)
+			bp = new ButtonsPanel();
+		return bp;
+	}
+
+	/**
+	 * Obtener el contenido del <code>DialogPanel</code>. En caso de no estar creado,
+	 * lo crear�.
+	 *
+	 * @return El componente content
+	 */
+	public JPanel getContent() {
+		if (content == null)
+			content = new JPanel();
+		return content;
+	}
+
+	public void addButtonPressedListener(ButtonsPanelListener listener) {
+		getButtonsPanel().addButtonPressedListener(listener);
+	}
+
+	public void removeButtonPressedListener(ButtonsPanelListener listener) {
+		getButtonsPanel().removeButtonPressedListener(listener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#getLayout()
+	 */
+	public LayoutManager getLayout() {
+		return getContent().getLayout();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#setLayout(java.awt.LayoutManager)
+	 */
+	public void setLayout(LayoutManager mgr) {
+		getContent().setLayout(mgr);
+	}
+
+	/**
+	 * Devuelve el Window que contiene dicha ventana o null en caso de que no sea
+	 * asi
+	 * @return
+	 */
+	public Window getWindow() {
+		Container container = getParent();
+		while (container != null) {
+			if (container instanceof Window)
+				return (Window) container;
+			container = container.getParent();
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#add(java.awt.Component)
+	 */
+	public Component add(Component comp) {
+		return getContent().add(comp);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#add(java.awt.Component, int)
+	 */
+	public Component add(Component comp, int index) {
+		return getContent().add(comp, index);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#add(java.awt.Component, java.lang.Object)
+	 */
+	public void add(Component comp, Object constraints) {
+		getContent().add(comp, constraints);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#add(java.awt.Component, java.lang.Object, int)
+	 */
+	public void add(Component comp, Object constraints, int index) {
+		getContent().add(comp, constraints, index);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#add(java.lang.String, java.awt.Component)
+	 */
+	public Component add(String name, Component comp) {
+		return getContent().add(name, comp);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/defaultbuttonspanel/DefaultButtonsPanel.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/DefaultComboBoxConfigurableLookUpModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/DefaultComboBoxConfigurableLookUpModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/DefaultComboBoxConfigurableLookUpModel.java	(revision 42196)
@@ -0,0 +1,986 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup;
+/* DefaultComboBoxModel.java --
+   Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+import java.io.Serializable;
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Vector;
+
+import javax.swing.AbstractListModel;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.MutableComboBoxModel;
+
+import org.gvsig.gui.beans.comboboxconfigurablelookup.agents.StartsWithLookUpAgent;
+
+/**
+ * <p>Re-implementation of {@link DefaultComboBoxModel} adapted for the behavior needed to look up items.</p>
+ * 
+ * <p>This model has configurable behaviour using flags.</p>
+ * 
+ * <p><code>DefaultComboBoxConfigurableLookUpModel</code> represents the model used by a {@link JComboBoxLookUpConfigurable JComboBoxLookUpConfigurable},
+ *  according the MVC (Model-View-Controller) pattern.</p>
+ * 
+ * <p>Flags:
+ * <ul>
+ *  <li><b>ItemsOrder:</b> order in which items will be showed: maintain position (according the items were introduced); alphabetical order (according the local rules); or disordered.<br>
+ *   + <b><i>MAINTAIN_POSITION</i></b>: in the same position as they are stored.<br>
+ *   + <b><i>ALPHABETICAL_ORDERED</i></b>: in alphabetical order (according a local language rules).<br>
+ *   + <b><i>MAINTAIN_AGENT_POSITIONS</i></b>: in the same position as the are returned by the look up agent.
+ *  </li>   
+ *  <li><b>ShowAllItemsInListBox:</b> show all items in list box always, or only items that match with the text written according the <code>ILookUp</code> agent.<br>
+ *   + <b><i>SHOW_ALL_ITEMS</i></b>: shows all items of the model always.<br>
+ *   + <b><i>SHOW_ONLY_MATCHES</i></b>: shows only the items , or only items that match with the text written according the <code>ILookUp</code> agent.
+ *  </li>
+ *  <li><b>LanguageRules:</b> language rules (es_ES, en_US, fr_FR, ...)</li>  
+ *  <li><b>CaseSensitive:</b> consider or ignore the case sensitive looking up the items with the <code>ILookUp</code> agent.<br>
+ *   + <b><i>CASE_SENSITIVE</i></b>: discriminates between lower and upper cases.<br>
+ *   + <b><i>CASE_INSENSITIVE</i></b>: doesn't discriminate between lower and upper cases.
+ *  </li>  
+ * </ul>
+ * </p>
+ * 
+ * <p>Default flag values are:
+ *  <ul>
+ *   <li><b>ItemsOrder:</b> <i>MAINTAIN_AGENT_POSITIONS</i>.</li>
+ *   <li><b>ShowAllItemsInListBox:</b> <i>false (that's equal to ''SHOW_ONLY_MATCHES'').</li>
+ *   <li><b>LanguageRules:</b> <i>en_EN (English from England)</i>.</li>
+ *   <li><b>CaseSensitive:</b> <i>true (that's equal to ''CASE_SENSITIVE'')</i>.</li>
+ *  </ul>
+ * </p>
+ * 
+ * @see javax.swing.DefaultComboBoxModel
+ * @see JComboBoxConfigurableLookUp
+ *  
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ * @version 07/02/2008
+ */
+public class DefaultComboBoxConfigurableLookUpModel extends AbstractListModel implements ComboBoxModel, MutableComboBoxModel, Serializable, IComboBoxLookUp {
+	private static final long serialVersionUID = 3514664640086791882L;
+
+	/**
+     * <p>Storage for the elements in the model's objects.</p>
+     * 
+     * <p>All items will be stored according they are introduced.</p>
+     */
+    private Vector<Object> objects;
+ 
+    /**
+     * <p>Stores the elements of 'objects' in alphabetical order.</p>
+     * 
+     * <p>This attribute will be used in the searches.</p>
+     */
+    private Vector<Object> alphabeticallyOrdered;
+  
+    /**
+     * <p>The selected item (<code>null</code> indicates no selection).</p>
+     */
+    private Object selectedObject = null;
+    
+    ///// NEW ATTRIBUTES /////
+
+	/**
+	 * <p>Items that will be visible (displayed).</p>
+	 */
+	private List<Object> visibleList;
+
+	/**
+	 * <p>Text written.</p>
+	 */
+	private String textWritten;
+	
+	/**
+	 * <p>Agent with the logic for looking up the items of this model, considering the text written.</p>
+	 */
+	private ILookUp lookUpAgent;
+	
+	/**
+	 * <p>Object with utilities for managing vectors.</p>
+	 */
+	private VectorUtilities vectorUtilities;
+
+	/**
+	 * <p>Determines if will notify all events produced.</p>
+	 */
+	private boolean eventNotificationEnabled = true; // by default -> true
+
+    ///// END NEW ATTRIBUTES /////
+	
+	// CONSTANTS FOR CONFIGURE THE BEHAVIOR
+	public static final int MAINTAIN_POSITION = 0;
+	public static final int ALPHABETICAL_ORDERED = 1;
+	public static final int MAINTAIN_AGENT_POSITIONS = 2;
+	public static final boolean SHOW_ALL_ITEMS = true;
+	public static final boolean SHOW_ONLY_MATCHES = false;
+	public static final boolean CASE_SENSITIVE = true;
+	public static final boolean CASE_INSENSITIVE = false;
+	
+	public static final int DEFAULT_ITEMS_ORDER_CONFIGURATION = MAINTAIN_AGENT_POSITIONS;
+	public static final boolean DEFAULT_SHOW_ALL_ITEMS_IN_LIST_BOX_CONFIGURATION = SHOW_ONLY_MATCHES;
+	
+	public static final String DEFAULT_LANGUAGE_RULES_CONFIGURATION = "en_EN";
+	public static final boolean DEFAULT_CASE_SENSITIVE_CONFIGURATION = CASE_SENSITIVE;
+	// END CONSTANTS FOR CONFIGURE THE BEHAVIOR
+	
+	// CONFIGURATION FLAGS
+	/**
+	 * <p>Flag: order in which items will be showed: maintain position (according the items were introduced); alphabetical order (according the local rules); or maintain the elements in
+	 *  the positions the look up agent returned.</p>
+	 */
+	private int itemsOrder;
+	
+	/**
+	 * <p>Flag: show all items in list box always, or only items that match with the text written according the <code>ILookUp</code> agent.</p>
+	 */
+	private boolean showAllItemsInListBox;
+
+	/**
+	 * <p>Flag: locale rules (es_ES, en_US, fr_FR, ...).</p>
+	 */
+	private String localeRules;
+
+	/**
+	 * <p>Object that allows compare strings. Stores a flag:</p>
+	 * 
+	 * <p>Flag: consider or ignore the case sensitive looking up the items that match with the text written according the <code>ILookUp</code> agent.</p>
+	 */
+	private StringComparator stringComparator;
+	// END FLAGS
+
+    /**
+     * @see javax.swing.DefaultComboBoxModel#DefaultComboBoxModel()
+     */
+    public DefaultComboBoxConfigurableLookUpModel()
+    {
+    	objects = new Vector<Object>();
+      
+    	initialize();
+    }
+  
+	/**
+     * @see javax.swing.DefaultComboBoxModel#DefaultComboBoxModel(java.lang.Object[])
+     */
+    public DefaultComboBoxConfigurableLookUpModel(final Object items[])
+    {
+    	objects = new Vector<Object>(Arrays.asList(items));
+
+    	initialize();
+    }
+  
+	/**
+     * @see javax.swing.DefaultComboBoxModel#DefaultComboBoxModel(java.util.Vector)
+     */
+    public DefaultComboBoxConfigurableLookUpModel(Vector<Object> vector)
+    {
+    	this.objects = new Vector<Object>(vector);
+ 
+    	initialize();
+    }
+	
+	///// REIMPLEMENTATION OF METHODS /////
+ 
+    /**
+     * @see javax.swing.DefaultComboBoxModel#addElement(java.lang.Object)
+     */
+	public void addElement(Object object)
+	{
+		objects.addElement(object);
+		vectorUtilities.addAlphabeticallyOrdered(alphabeticallyOrdered, object, stringComparator);
+     
+		int index = objects.size() - 1;
+		
+		updateVisibleList();
+ 		
+		if (eventNotificationEnabled)
+			fireIntervalAdded(this, index, index);
+ 	}
+ 
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#removeElementAt(int)
+	 */
+	public void removeElementAt(int index)
+	{
+		if ( getElementAt( index ) == selectedObject )
+		{
+			if ( index == 0 ) {
+				setSelectedItem( getSize() == 1 ? null : getElementAt( index + 1) );
+			}
+			else {
+				setSelectedItem( getElementAt( index - 1 ) );
+			}
+		}
+		
+		Object obj = objects.get(index);
+		
+		alphabeticallyOrdered.remove(obj);
+		objects.removeElementAt(index);
+		
+		updateVisibleList();
+
+		if (eventNotificationEnabled)
+			fireIntervalRemoved(this, index, index);
+	}
+ 
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#insertElementAt(java.lang.Object, int)
+	 */
+	public void insertElementAt(Object object, int index)
+	{
+		objects.insertElementAt(object, index);
+		vectorUtilities.addAlphabeticallyOrdered(alphabeticallyOrdered, object, stringComparator);
+		
+		updateVisibleList();
+
+		if (eventNotificationEnabled)
+			fireIntervalAdded(this, index, index);
+	}
+ 
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#removeElement(java.lang.Object)
+	 */
+	public void removeElement(Object object)
+	{
+		int index = getIndexOf(object);
+		
+		if (index != -1) {
+			removeElementAt(index);
+		}
+	}
+ 
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#removeAllElements()
+	 */
+	public void removeAllElements()
+	{
+		selectedObject = null;
+		int size = objects.size();
+
+		if (size > 0)
+		{
+			objects.removeAllElements();
+			alphabeticallyOrdered.removeAllElements();
+			
+			updateVisibleList();
+	 		
+			if (eventNotificationEnabled)
+				fireIntervalRemoved(this, 0, size - 1);
+		}
+	}
+
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#getSize()
+	 */
+	public int getSize()
+	{		
+		if (visibleList == null)
+			return 0;
+		else
+			return visibleList.size();
+	}
+	
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#setSelectedItem(java.lang.Object)
+	 */
+	public void setSelectedItem(Object anObject)
+	{
+		// No item is selected and object is null, so no change required.
+		if (selectedObject == null && anObject == null)
+			return;
+		
+		if ( ((selectedObject != null) && (!selectedObject.equals(anObject)))
+				|| ((selectedObject == null) && (anObject != null)) ) {
+		
+			// Here we know that object is either an item in the objects or null.
+	 
+			// Handle the three change cases: selectedObject is null, object is
+			// non-null; selectedObject is non-null, object is null;
+			// selectedObject is non-null, object is non-null and they're not
+			// equal.
+			selectedObject = anObject;
+			
+			if (anObject == null)
+				textWritten = null;
+			else
+				textWritten = anObject.toString();
+			
+			updateVisibleList();
+			
+			if (eventNotificationEnabled)
+				fireContentsChanged(this, -1, -1);
+		}
+	}
+ 
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#getSelectedItem()
+	 */
+	public Object getSelectedItem()
+	{
+		return selectedObject;
+	}
+ 
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#getElementAt(int)
+	 */
+	public Object getElementAt(int index)
+	{		
+		if (visibleList == null)
+			return null;
+		
+		if (index >= 0 && index < visibleList.size())
+			return visibleList.get(index);
+		else
+			return null;
+	}
+	
+	/**
+	 * @see javax.swing.DefaultComboBoxModel#getIndexOf(java.lang.Object)
+	 */
+	public int getIndexOf(Object object)
+	{
+		if (visibleList == null)
+			return -1;
+    	
+		return visibleList.indexOf(object);
+	}
+
+	///// END REIMPLEMENTATION OF METHODS /////    
+    
+	///// METHODS FOR THE BEHAVIOR FLAGS  /////
+	/**
+	 * <p>Returns the 'itemsOrder' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li>MAINTAIN_POSITION: all items will be shown in the order programmer did.</li>
+	 *   <li>ALPHABETICAL_ORDERED: all items will be shown in alphabetical order.</li>
+	 *   <li>MAINTAIN_AGENT_POSITIONS: all items will be shown in the order the look up agent did.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @return 'itemsOrder' configuration
+	 */
+	public int getItemsOrder() {
+		return itemsOrder;
+	}
+
+	/**
+	 * <p>Sets the 'itemsOrder' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li>MAINTAIN_POSITION: all items will be shown in the order programmer did.</li>
+	 *   <li>ALPHABETICAL_ORDERED: all items will be shown in alphabetical order.</li>
+	 *   <li>MAINTAIN_AGENT_POSITIONS: all items will be shown in the order the look up agent did.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @param An integer value for 'itemsOrder' configuration flag
+	 */
+	public void setItemsOrder(int itemsOrder) {
+		this.itemsOrder = itemsOrder;
+	}
+	
+	/**
+	 * <p>Returns the 'showAllItemsInListBox' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li>SHOW_ALL_ITEMS: shows all items in the list box.</li>
+	 *   <li>SHOW_ONLY_MATCHES: shows only the items that match with the text written according the <code>ILookUp</code> agent.</li>
+	 *  </ul> 
+	 * </p>
+	 * 
+	 * @return 'showAllItemsInListBox' configuration
+	 */
+	public boolean isShowAllItemsInListBox() {
+		return showAllItemsInListBox;
+	}
+	
+	/**
+	 * <p>Sets the 'showAllItemsInListBox' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li>SHOW_ALL_ITEMS: shows all items in the list box.</li>
+	 *   <li>SHOW_ONLY_MATCHES: shows only the items that match with the text written according the <code>ILookUp</code> agent.</li>
+	 *  </ul> 
+	 * </p>
+	 * 
+	 * @param A boolean value for 'showAllItemsInListBox' configuration flag
+	 */
+	public void setShowAllItemsInListBox(boolean itemsShownInListBox) {
+		this.showAllItemsInListBox = itemsShownInListBox;
+	}
+	
+	/**
+	 * <p>Returns the 'localeRules' configuration value of this component. The language code values could be consulted at: <br>
+	 *  <i><a href="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt</a></i><br>
+	 *  <i><a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html</a></i>
+	 * </p>
+	 * 
+	 * @see {@Locale}
+	 * 
+	 * @return 'localeRules' configuration
+	 */
+	public String getLocaleRules() {
+		return localeRules;
+	}
+	
+	/**
+	 * <p>Sets the 'localeRules' configuration value for this component. Configuration values are: <br>
+	 *  <i><a href="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt</a></i><br>
+	 *  <i><a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html</a></i>
+	 * </p>
+	 * 
+	 * @see {@Locale}
+	 * 
+	 * @param An String value for 'localeRules' configuration flag
+	 */
+	public void setLocaleRules(String localeRules) {
+		this.localeRules = localeRules;
+		
+		stringComparator.setLocaleRules(stringComparator.new LocaleRules(true, Collator.getInstance(new Locale(this.localeRules))));
+		Collections.sort(alphabeticallyOrdered.subList(0, alphabeticallyOrdered.size()), stringComparator); 
+		
+		updateVisibleList();
+	}
+	
+	/**
+	 * <p>Returns the 'caseSensitive' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li>CASE_SENSITIVE: discriminates between small letters and capital letters.</li>
+	 *   <li>CASE_INSENSITIVE: doesn't discriminates between small letters and capital letters.</li>
+	 *  </ul> 
+	 * </p>
+	 *  
+	 * @return 'caseSensitive' configuration
+	 */
+	public boolean isCaseSensitive() {
+		return stringComparator.isCaseSensitive();
+	}
+	
+	/**
+	 * <p>Sets the 'caseSensitive' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li>CASE_SENSITIVE: discriminates between small letters and capital letters.</li>
+	 *   <li>CASE_INSENSITIVE: doesn't discriminates between small letters and capital letters.</li>
+	 *  </ul> 
+	 * </p>
+	 *  
+	 * @param A boolean value for 'caseSensitive' configuration flag
+	 */
+	public void setCaseSensitive(boolean caseSensitive) {
+		stringComparator.setCaseSensitive(caseSensitive);
+		Collections.sort(alphabeticallyOrdered.subList(0, alphabeticallyOrdered.size()), stringComparator); 
+
+		updateVisibleList();
+	}
+	///// END METHODS FOR THE BEHAVIOR FLAGS  /////
+    
+   ///// NEW METHODS /////
+   
+	/**
+	 * <p>Initializes some attributes.</p>
+	 */
+	protected void initialize() {
+		textWritten = "";
+		
+		// Creates an object for doing ordering operations with vectors
+		vectorUtilities = new VectorUtilities();
+		
+		// Creates the agent that will execute the look up on the items of this model
+		lookUpAgent = new StartsWithLookUpAgent();
+		
+		// Initializes the StringComparator -> use spanish alphabetical rules, and case sensitive
+		stringComparator = new StringComparator();
+		stringComparator.setCaseSensitive(DEFAULT_CASE_SENSITIVE_CONFIGURATION);
+		stringComparator.setLocaleRules(stringComparator.new LocaleRules(true, Collator.getInstance(new Locale(DEFAULT_LANGUAGE_RULES_CONFIGURATION))));
+		
+		// Set default flags configuration
+		this.setDefaultBehaviorFlagsConfiguration();		
+		
+		alphabeticallyOrdered = new Vector<Object>(objects.subList(0, objects.size()));
+		Collections.sort(alphabeticallyOrdered.subList(0, alphabeticallyOrdered.size()), stringComparator); // Use an algorithm of comparision which implements the rules of the language.
+		
+		visibleList = new ArrayList<Object>();
+		updateVisibleList();
+	}
+	
+	/**
+	 * <p>Sets the default values of the flags.</p>
+	 */
+	protected void setDefaultBehaviorFlagsConfiguration() {
+		itemsOrder = DEFAULT_ITEMS_ORDER_CONFIGURATION;
+		showAllItemsInListBox = DEFAULT_SHOW_ALL_ITEMS_IN_LIST_BOX_CONFIGURATION;
+		localeRules = DEFAULT_LANGUAGE_RULES_CONFIGURATION;
+		stringComparator.setCaseSensitive(DEFAULT_CASE_SENSITIVE_CONFIGURATION);
+	}
+
+	/**
+	 * <p>Returns all elements stored in this model, according the order they were added.</p>
+	 * 
+	 * @return data stored in this model.
+	 */
+	public Vector<Object> getData() {
+		return objects;
+	}
+
+	/**
+	 * <p>Gets the data stored in this model according the criterion of the <i>itemsOrder</i> parameter.</p>
+	 * <p>Always returns all items stored.</p>
+	 * 
+	 * @return data stored in this model according the criterion of the <i>itemsOrder</i> parameter
+	 */
+	public Vector<Object> getDataAccordingItemsOrder() {
+		switch(itemsOrder) {
+			case MAINTAIN_POSITION:
+				return objects;
+	     	case ALPHABETICAL_ORDERED:
+	     		// Do nothing because items are already alphabetically ordered
+	     		return alphabeticallyOrdered;
+	     	case MAINTAIN_AGENT_POSITIONS:
+	     		List<Object> list;
+	     		
+	     		// "" forces to return all items stored
+	    		if (stringComparator.isCaseSensitive()) {
+	    			list = lookUpAgent.doLookUpConsideringCaseSensitive("", alphabeticallyOrdered, stringComparator);
+	    		}
+	    		else {
+	    			list = lookUpAgent.doLookUpIgnoringCaseSensitive("", alphabeticallyOrdered, stringComparator);
+	    		}
+	    		
+	    		return new Vector<Object>(list.subList(0, list.size()));
+	     	default:
+	     		// Default case: ALPHABETICAL_ORDERED
+	     		// Do nothing because items are already alphabetically ordered
+	     		return alphabeticallyOrdered;
+		}
+	}
+	
+	/**
+	 * <p>Updates the list with the results of the look up by the agent, and its configuration.</p>
+	 */
+	protected void updateVisibleList() {
+		if (!eventNotificationEnabled)
+			return;
+		
+		if (objects.size() == 0) {
+			visibleList = alphabeticallyOrdered.subList(0, 0);
+			return;
+		}
+		
+		if (showAllItemsInListBox) {
+			switch (itemsOrder) {
+				case MAINTAIN_POSITION:
+					visibleList = objects.subList(0, objects.size());
+		     		break;
+		     	case ALPHABETICAL_ORDERED:
+		     		visibleList = alphabeticallyOrdered.subList(0, alphabeticallyOrdered.size());
+		     	    break;
+		     	case MAINTAIN_AGENT_POSITIONS:
+		     		// "" forces to return all items stored
+		    		if (stringComparator.isCaseSensitive()) {
+		    			visibleList = lookUpAgent.doLookUpConsideringCaseSensitive("", alphabeticallyOrdered, stringComparator);
+		    		}
+		    		else {
+		    			visibleList = lookUpAgent.doLookUpIgnoringCaseSensitive("", alphabeticallyOrdered, stringComparator);
+		    		}
+		     		break;
+		     	default:
+		     		// Default case: ALPHABETICAL_ORDERED
+		     		visibleList = alphabeticallyOrdered.subList(0, alphabeticallyOrdered.size());
+			}
+
+			if ((visibleList != null) && (visibleList.size() > 0)) {
+				List<Object> list = lookUp();
+
+				if ((list != null) && (list.size() > 0)) {
+					selectedObject = list.get(0);
+					textWritten = selectedObject.toString(); // ?
+				}
+				else {
+					selectedObject = null;
+				}
+			}
+		}
+		else {
+			visibleList = lookUp();
+			
+			switch (itemsOrder) {
+				case MAINTAIN_POSITION:
+					if (visibleList != null) {
+						Vector<Object> aux = new Vector<Object>(objects.subList(0, objects.size()));
+						int size = aux.size();
+						Object obj = new Object();
+
+						for (int i = (size - 1); i >= 0; i--) {
+							obj = aux.get(i);
+
+							if (visibleList.contains(obj)) {
+								visibleList.remove(obj);
+							}
+							else {
+								aux.remove(i);
+							}
+						}
+
+						visibleList = aux.subList(0, aux.size());
+					}
+		     		break;
+		     	case ALPHABETICAL_ORDERED:
+		     		if (visibleList != null)
+		     			Collections.sort(visibleList, stringComparator);
+		     		break;
+		     	case MAINTAIN_AGENT_POSITIONS:
+		     		// Do nothing because items are already ordered
+		     		break;
+		     	default:
+		     		// Default case: ALPHABETICAL_ORDERED
+		     		// Do nothing because items are already alphabetically ordered
+			}
+		}
+	}
+
+	/**
+	 * <p>Invokes the agent to execute its search on all items alphabetically sort ordered,
+	 *  considering the <i>text written</i> and the <i>case sensitive</i> configuration. The agent will use a <p>Comparator</p> that
+	 *  includes the <i>locale language rules</i> and the <i>case sensitive</i> in the rule that uses to compare.</p>.
+	 * 
+	 * @return java.util.List
+	 */
+	protected List<Object> lookUp() {
+		if (stringComparator.isCaseSensitive()) {
+			return lookUpAgent.doLookUpConsideringCaseSensitive(textWritten, alphabeticallyOrdered, stringComparator);
+		}
+		else {
+			return lookUpAgent.doLookUpIgnoringCaseSensitive(textWritten, alphabeticallyOrdered, stringComparator);
+		}
+	}
+
+	/**
+	 * <p>Gets the agent used with the logic for looking up the items of this model, considering
+	 *  the text written.</p>
+	 *  
+	 * @return the agent used with the logic for looking up the items of this model
+	 */
+	public ILookUp getLookUpAgent() {
+		return lookUpAgent;
+	}
+
+	/**
+	 * <p>Sets the agent with the logic for looking up the items of this model, considering
+	 *  the text written.</p>
+	 *  
+	 * @param agent the agent used with the logic for looking up the items of this model
+	 */
+	public void setLookUpAgent(ILookUp agent) {
+		lookUpAgent = agent;
+		
+		// Updates the list using the new agent
+		updateVisibleList();
+		
+	}
+
+	/**
+	 * <p>Sets enabled or disabled the notification of events in this model.</p>
+	 * 
+	 * @param b <code>true</code> to enable, <code>false</code> to disable
+	 */
+	public void setEventNotificationEnabled(boolean b) {
+		eventNotificationEnabled = b;
+	}
+
+	/**
+	 * <p>Gets if the notification of events in this model is enabled.</p>
+	 * 
+	 * @return <code>true</code> is its enabled; <code>false</code> otherwise
+	 */
+	public boolean getEventNotificationEnabled() {
+		return eventNotificationEnabled;
+	}
+	
+	///// END NEW METHODS /////
+
+	///// REIMPLEMENTATION OF METHODS OF THE INTERFACE IComboBoxLookUp /////
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.comboboxconfigurablelookup.IComboBoxLookUp#setTextWritten(java.lang.String)
+	 */
+	public void setTextWritten(String text) {
+		textWritten = text;
+		updateVisibleList();
+	}
+
+	///// END REIMPLEMENTATION OF METHODS OF THE INTERFACE IComboBoxLookUp /////
+	
+	/**
+	 * <p>New functionality to work with vectors (of elements).</p>
+	 *
+	 * <p>This class is a copy of a class with the same name located in <i>libIverUtiles</i>.
+	 * 
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	public class VectorUtilities {
+		/**
+		 * <p>Creates a new instance of the class <code>VectorUtilities</code>.</p>
+		 */
+		public VectorUtilities() {
+		}
+		
+		/**
+		 * <p>Adds an item in alphabetical order.</p>
+		 * 
+		 * @param v java.util.Vector in alphabetical order.
+		 * @param obj java.lang.Object
+		 */
+		public synchronized void addAlphabeticallyOrdered(Vector<Object> v, Object obj) {
+			int size = v.size();
+			int currentIteration = 0;
+			int index, aux_index;
+			int lowIndex = 0;
+			int highIndex = size -1;
+			int maxNumberOfIterations = (int) log2(size);
+			
+			// If there are no items
+			if (size == 0) {
+				v.add(obj);
+				return;
+			}
+			
+			while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+				index = ( lowIndex + highIndex ) / 2;
+
+				// If the item in the index position has the same value as obj 
+				if (v.get(index).toString().compareTo(obj.toString()) == 0) {
+					v.add(index, obj);
+					return;
+				}
+
+				// If the item in the index position has a lower value than the obj
+				if (v.get(index).toString().compareTo(obj.toString()) < 0) {
+					aux_index = index + 1;
+					
+					if ((aux_index) >= size) {
+						v.add(v.size() , obj);
+						return;
+					}
+
+					if (v.get(aux_index).toString().compareTo(obj.toString()) > 0) {
+						v.add(aux_index, obj);
+						return;
+					}
+
+					lowIndex = aux_index;
+				}
+				else {
+					// If the item in the index position has a higher value than the obj
+					if (v.get(index).toString().compareTo(obj.toString()) > 0) {
+						aux_index = index - 1;
+						
+						if ((aux_index) < 0) {
+							v.add(0 , obj);
+							return;
+						}
+						
+						if (v.get(aux_index).toString().compareTo(obj.toString()) < 0) {
+							v.add(index, obj);
+							return;
+						}
+						
+						highIndex = aux_index;
+					}
+				}
+				
+				currentIteration ++;
+			}		 
+		}
+		
+		/**
+		 * <p>Adds an item in alphabetic order using a comparator for compare the objects. The objects must be alhabetically ordered.</p>
+		 *
+		 * @param v java.util.Vector in alphabetical order.
+		 * @param obj java.lang.Object
+		 * @param comp java.util.Comparator
+		 */
+		public synchronized void addAlphabeticallyOrdered(Vector<Object> v, Object obj, Comparator<Object> comp) {
+			int size = v.size();
+			int currentIteration = 0;
+			int index, aux_index;
+			int lowIndex = 0;
+			int highIndex = size -1;
+			int maxNumberOfIterations = (int) log2(size);
+			
+			// If there are no items
+			if (size == 0) {
+				v.add(obj);
+				return;
+			}
+			
+			while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+				index = ( lowIndex + highIndex ) / 2;
+				
+				// If the item in the index position has the same value as obj 
+				if (comp.compare(v.get(index), obj) == 0) {
+					v.add(index, obj);
+					return;
+				}
+				
+				// If the item in the index position has a lower value than the obj
+				if (comp.compare(v.get(index), obj) < 0) {
+					aux_index = index + 1;
+					
+					if ((aux_index) >= size) {
+						v.add(v.size() , obj);
+						return;
+					}
+					
+					if (comp.compare(v.get(aux_index), obj) > 0) {
+						v.add(aux_index, obj);
+						return;
+					}
+					
+					lowIndex = aux_index;
+				}
+				else {
+					// If the item in the index position has a higher value than the obj
+					if (comp.compare(v.get(index), obj) > 0) {
+						aux_index = index - 1;
+						
+						if ((aux_index) < 0) {
+							v.add(0 , obj);
+							return;
+						}
+						
+						if (comp.compare(v.get(aux_index), obj) < 0) {
+							v.add(index, obj);
+							return;
+						}
+						
+						highIndex = aux_index;
+					}
+				}
+				
+				currentIteration ++;
+			}
+		}
+
+		///// MATHEMATICAL OPERATIONS /////
+		/**
+		 * <p>2-base logarithm of a</p>
+		 * 
+		 * @param a The value to do the calculations
+		 * @return Logarithm in 2 base of 'a'
+		 */
+		public double log2(double a) {
+			return (Math.log(a) / Math.log(2));
+		}
+		
+		/**
+		 * <p>2-base logarithm of a, but the result doesn't have decimals (approximated to the integer number most near by below)</p>
+		 * 
+		 * @param a The value to do the calculations
+		 * @return Logarithm in 2 base of 'a', as an integer
+		 */
+		public int log2Integer(double a) {
+			return (int) Math.floor(log2(a));
+		}
+		///// END MATHEMATICAL OPERATIONS /////
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/DefaultComboBoxConfigurableLookUpModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/IComboBoxLookUp.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/IComboBoxLookUp.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/IComboBoxLookUp.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup;
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * <p>Interface for all the models which will allow look up items
+ *  using a text.</p>
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ * @version 07/02/2008
+ */
+public interface IComboBoxLookUp {
+	/**
+	 * <p>Sets the text for search items.</p>
+	 */
+	public void setTextWritten(String text);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/IComboBoxLookUp.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/JComboBoxConfigurableLookUp.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/JComboBoxConfigurableLookUp.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/JComboBoxConfigurableLookUp.java	(revision 42196)
@@ -0,0 +1,1657 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup;
+
+import java.awt.Color;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.Vector;
+
+import javax.accessibility.Accessible;
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.MutableComboBoxModel;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import javax.swing.event.UndoableEditListener;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.basic.BasicComboBoxUI;
+import javax.swing.plaf.basic.BasicComboPopup;
+import javax.swing.plaf.basic.ComboPopup;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.PlainDocument;
+
+import org.gvsig.gui.beans.editabletextcomponent.IEditableText;
+import org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditEvent;
+import org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+
+/** VERSION: BETA
+ * <p>A configurable combo box component that lists items that carry out with the criterions of a <code>ILookUp</code> agent,
+ *  considering the text in its inner editor.</p>
+ * 
+ * <p>Key features:
+ *  <ul>
+ *   <li>Allows configure it's behaviour.</li>
+ * 	 <li>Inherits from JComboBox.</li>
+ * 	 <li>Has 6 flags to configure its behaviour.</li>
+ * 	 <li>It's made according the MVC (Model-View-Controller) pattern.</li>
+ * 	 <li>Uses a {@link DefaultComboBoxConfigurableLookUpModel DefaultComboBoxConfigurableLookUpModel} as a dataModel, which it's also configurable.</li>
+ *  </ul>
+ * </p>
+ * 
+ * <p>Configuration flags:
+ *  <ul>
+ *   <li><b>OnlyOneColorOnText:</b> uses red if there is no item or only items that matches with the text written according the <code>ILookUp</code> agent, or uses always black color.</li>
+ *   <li><b>BeepEnabled:</b> rings a beep sound if there is no item that matches with the text written according the <code>ILookUp</code> agent, or not.</li>
+ *   <li><b>HidePopupIfThereAreNoItems:</b> hides popup (list box) if there is no item that matches with the text written according the <code>ILookUp</code> agent, or uses the default (JComboBox and more) behaviour.</li>
+ *   <li><b>ToForceSelectAnItem:</b> forces to select an item (if the component looses the focus or user presses the Enter keyboard key), or uses the default (JComboBox and more) behaviour.</li>
+ *   <li><b>CompleteArrowKeySelection:</b> writes in the editor the value of the element selected by the arrow keys (up or down) if its enabled, otherwise holds the previous text.</li>
+ *   <li><b>DisplayAllItemsWithArrowButton:</b> <i>true</i>: displays all this component's dataModel items if its <i>popup</i> it's hided, and this component's dataModel listed only the matches
+ *    <i>(flag: <code>DefaultComboBoxConfigurableLookUpModel.showAllItemsInListBox == false</code>)</i>; otherwise, if this flag isn't enabled,
+ *    won't display all items in that situation.</li>
+ *  </ul>
+ * </p>
+ * 
+ * <p>Default flag values are:
+ *  <ul>
+ *   <li><b>OnlyOneColorOnText:</b> <i>false</i>.</li>
+ *   <li><b>BeepEnabled:</b> <i>false</i>.</li>
+ *   <li><b>HidePopupIfThereAreNoItems:</b> <i>true</i>.</li>
+ *   <li><b>ToForceSelectAnItem:</b> <i>true</i>.</li>
+ *   <li><b>CompleteArrowKeySelection:</b> <i>false</i>.</li>
+ *   <li><b>DisplayAllItemsWithArrowButton:</b> <i>true</i>.</li>
+ *  </ul>
+ * </p>
+ * 
+ * <p><i>More information about the behaviour of it's dataModel in {@link DefaultComboBoxConfigurableLookUpModel DefaultComboBoxConfigurableLookUpModel} .</i></p>
+ * 
+ * @see JComboBox
+ * @see DefaultComboBoxConfigurableLookUpModel
+ * 
+ * @author Pablo Piqueras Bartolom� 
+ * @version 07/02/2008
+ */
+public class JComboBoxConfigurableLookUp extends JComboBox implements java.io.Serializable {
+
+
+	// CONSTANTS FOR CONFIGURE THE BEHAVIOR
+	public static final boolean DEFAULT_ONLY_ONE_COLOR_ON_TEXT_CONFIGURATION = false;
+	public static final boolean DEFAULT_BEEP_ENABLED_CONFIGURATION = false;
+	public static final boolean DEFAULT_HIDE_POPUP_IF_THERE_ARE_NO_ITEMS_CONFIGURATION = true;
+	public static final boolean DEFAULT_TO_FORCE_SELECT_AN_ITEM_CONFIGURATION = true;
+	public static final boolean DEFAULT_COMPLETE_ARROW_KEY_SELECTION_CONFIGURATION = false;
+	public static final boolean DEFAULT_DISPLAY_ALL_ITEMS_WITH_ARROW_BUTTON_CONFIGURATION = true;
+	// END CONSTANTS FOR CONFIGURE THE BEHAVIOR
+	
+	// EDITOR DOCUMENT REFERENCE
+	/**
+	 * <p>A reference to the document of this component.</p> 
+	 */
+	private PlainDocumentTextFormatter document;
+	// END EDITOR DOCUMENT REFERENCE
+	
+	// NEW ATTRIBUTES 
+	/**
+	 * <p>A reference to the dataModel of this component (according to the MVC <i>(Model-View-Controller)</i> pattern).</p>
+	 */
+	private DefaultComboBoxConfigurableLookUpModel model;
+
+	/**
+	 * <p>Has or not to hide the popup on focus loss.</p>
+	 */
+	private boolean hidePopupOnFocusLoss;
+
+	/**
+	 * <p>Has an item of the popup been selected or not by the user.</p>
+	 */
+	private boolean popupItemSelected;
+	
+	/**
+	 * <p>Determines if an arrow key (meanwhile down or up) has been pressed.</p>
+	 */
+	private boolean arrowKeyPressed;
+
+	/**
+	 * <p>Determines if the arrow button of the GUI has been clicked.</p>
+	 */
+	private boolean arrowButtonClicked;
+
+	/**
+	 * <p>Determines if is showing all items temporally in the GUI .</p>
+	 */
+	private boolean showingAllItemsTemporally;
+
+	/**
+	 * <p>Flag to ensure the we don't get multiple ActionEvents on item selection.</p>
+	 */
+	private boolean selectingItem = false;
+	
+	/**
+	 * <p>Last item selected.</p>
+	 */
+	private Object previousSelected;
+
+	/**
+	 * <p>Determines if the UI of this component has been updated.</p>
+	 * <p>This parameter is used by the listener that shows all items when user presses the <i>arrow button</i>
+	 *  and its enabled the flag <code>displayAllItemsWithArrowButton</code>.</p>
+	 */
+	private boolean updatedUI = true;
+	
+	private boolean blockPopupHided = false;
+	// END NEW ATTRIBUTES
+	
+	// LISTENERS
+	/**
+	 * <p>Listener for the editor key.</p> 
+	 */
+	private KeyListener editorKeyListener;
+	
+	/**
+	 * <p>Listener for the editor focus.</p>
+	 */
+	private FocusListener editorFocusListener;
+	
+	/**
+	 * <p>Listener for the popup menu.</p> 
+	 */
+	private PopupMenuListener popupMenuListener;
+	
+	/**
+	 * <p>Listener for the arrow button.</p>
+	 */
+	private MouseListener arrowMouseListener;
+	// END LISTENERS
+	
+	// CONFIGURATION FLAGS
+	/**
+	 * <p>Flag: use red if there is no item that matches with the text written according the <code>ILookUp</code> agent, or uses always black colour.</p>
+	 */
+	private boolean onlyOneColorOnText;
+	
+	/**
+	 * <p>Flag: rings a beep sound if there is no item that matches with the text written according the <code>ILookUp</code> agent, otherwise no.</p>
+	 */
+	private boolean beepEnabled;
+	
+	/**
+	 * <p>Flag: hide popup (list box) if there is no item that matches with the text written according the <code>ILookUp</code> agent, or uses the default (JComboBox and more) behaviour.</p>
+	 */
+	private boolean hidePopupIfThereAreNoItems;
+	
+	/**
+	 * <p>Flag: forces to select an item (if the component looses the focus or user presses the Enter keyboard key), or uses the default (JComboBox and more) behaviour.</p>
+	 */
+	private boolean toForceSelectAnItem;
+
+	/**
+	 * <p>Flag: determines if has to write in the editor the value of the element selected by the 
+	 * arrow keys (up or down) if its enabled, or hold the previous text if isn't.</p>
+	 */
+	private boolean completeArrowKeySelection;
+	
+	/**
+	 * <p>Flag: displays all this component's dataModel items if its <i>popup</i> it's hided, this component's dataModel displayed only the matches, and this flag enabled; if this flag isn't enabled,
+	 *  won't display all items in that situation.</p>
+	 */
+	private boolean displayAllItemsWithArrowButton;
+	// END FLAGS
+	
+	/**
+	 * <p>Default constructor without parameters.</p>
+	 */
+	public JComboBoxConfigurableLookUp() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * <p>Default constructor with a {@link DefaultComboBoxConfigurableLookUpModel} as parameter.</p>
+	 * 
+	 * @param aModel javax.swing.ComboBoxModel
+	 */
+	public JComboBoxConfigurableLookUp(DefaultComboBoxConfigurableLookUpModel aModel) {
+		super(aModel);
+
+		initialize();
+	}	
+
+	/**
+	 * <p>Default constructor with an array of objects as parameter.</p>
+	 * 
+	 * @param items An array of objects. All them must implement a <i>'String toStrin()'</i> method
+	 */
+	public JComboBoxConfigurableLookUp(Object[] items) {
+		super(items);
+
+		initialize();
+	}
+
+	/**
+	 * <p>Default constructor with a Vector of objects as parameter.</p>
+	 * 
+	 * @param items A {@link Vector} of objects. All them must implement a <i>'String toStrin()'</i> method
+	 */
+	public JComboBoxConfigurableLookUp(Vector<Object> items) {
+		super(items);
+
+		initialize();
+	}
+	
+	///// NEW METHODS /////
+	
+	/**
+	 * <p>This method sets the start values of inner attributes and creates the necessary inner objects.</p>
+	 * 
+	 * @param dataModel dataModel used by this combo box instance
+	 */
+	protected void initialize() {
+		// By default user hasn't selected an item of the popup
+		popupItemSelected = false;
+		
+		// By default no arrow key has been pressed
+		arrowKeyPressed = false;
+		
+		// By default the arrow button of the GUI hasn't been clicked
+		arrowButtonClicked = false;
+		
+		// By default isn't showing all items temporally in the GUI
+		showingAllItemsTemporally = false;
+		
+		// By default no item has been selected
+		previousSelected = null;
+
+		// Set default flags configuration
+		this.setDefaultBehaviorFlagsConfiguration();
+
+		// Allows user to edit on the combobox
+		super.setEditable(true);
+				
+		// Other configuration tasks
+		configure();
+
+		// If there are items -> select the first
+		if ((toForceSelectAnItem) && (model.getData().size() > 0)) {
+			model.setSelectedItem(model.getData().elementAt(0));
+		}
+
+		// Resets the UI property to a value from the current look and feel
+		updateUI();
+	}
+	
+	/**
+	 * <p>Configures the component and some of its elements.</p>
+	 */
+	protected void configure() {
+		// Defines a key listener for the editor of this component
+		defineEditorKeyListener(this);
+
+		// Defines a focus listener for the editor of this component
+		defineEditorFocusListener(this);
+				
+		// Configures the document of the editor of this component
+		configureDocument();
+		
+		// Configures the editor (ComboBoxEditor) of this component
+		configureEditor(this.getEditor());
+		
+		// Configures the popup of this component
+		configurePopUp(this);
+	}
+	
+	/**
+	 * <p>Configures the editor ( {@link ComboBoxEditor} ) of this component.</p>
+	 * 
+	 * @param newEditor The new editor to configure
+	 */
+	protected void configureEditor(ComboBoxEditor newEditor) {
+		if (newEditor != null) {
+			JTextComponent jTextComponentOfEditor = (JTextComponent) newEditor.getEditorComponent();
+
+			// Adds the new document (tries to remove it if it existed before)
+			jTextComponentOfEditor.setDocument(this.document);
+
+			// Adds the new Key Listener (tries to remove it if it existed before)
+			jTextComponentOfEditor.removeKeyListener(this.editorKeyListener);
+			jTextComponentOfEditor.addKeyListener(this.editorKeyListener);
+
+			// Adds the new Focus Listener (tries to remove it if it existed before)
+			jTextComponentOfEditor.removeFocusListener(this.editorFocusListener);
+			jTextComponentOfEditor.addFocusListener(this.editorFocusListener);
+		}
+	}
+
+	/**
+	 * <p>Configures the document of the editor of this component.</p>
+	 */
+	protected void configureDocument() {
+		// Creates the document of the editor of this component
+		document = new PlainDocumentTextFormatter();
+
+		// Set reference to the container component
+		document.setJComboBoxReference(this);
+	}
+
+	/**
+	 * <p>Configures the popup of this component.</p>
+	 *
+	 * @param comboBox A reference of this component
+	 */
+	protected void configurePopUp(JComboBoxConfigurableLookUp comboBox) {
+		final JComboBoxConfigurableLookUp comboBoxReference = comboBox;
+		this.addPopupMenuListener(this.popupMenuListener);
+				
+		BasicComboBoxUI comboBoxUi = (BasicComboBoxUI)comboBoxReference.getUI();
+		Accessible aC = comboBoxUi.getAccessibleChild(comboBoxReference, 0);
+
+		if (aC instanceof ComboPopup) {
+			JList jlist = ((ComboPopup)aC).getList();
+
+			jlist.addMouseListener(new MouseAdapter() {
+				public void mousePressed(MouseEvent e) {
+					// User selects an item of the popup using the mouse
+					popupItemSelected = true;
+					System.out.println("Pulsado");
+				}
+			});
+				
+			if (aC instanceof BasicComboPopup) {
+				((BasicComboPopup)aC).addPopupMenuListener(new PopupMenuListener() {
+					public void popupMenuCanceled(PopupMenuEvent e) {
+						if (arrowButtonClicked) {
+							arrowButtonClicked = false;
+						}
+					}
+
+					public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+						if (arrowButtonClicked) {
+							arrowButtonClicked = false;
+						}
+					}
+
+					public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+						if (arrowButtonClicked) {
+							arrowButtonClicked = false;
+						}
+					}
+				});
+			}
+		}
+	}
+
+	/**
+	 * <p>Returns the listener invoked when user presses the arrow button of this <code>JComboBox</code>.</p>
+	 * 
+	 * @return java.awt.event.MouseListener
+	 */
+	public MouseListener getArrowMouseListener() {
+		if (arrowMouseListener == null) {
+			// New mouse listener
+			arrowMouseListener = new MouseAdapter() {
+				/*
+				 * (non-Javadoc)
+				 * @see java.awt.event.MouseAdapter#mousePressed(java.awt.event.MouseEvent)
+				 */
+				public void mousePressed(MouseEvent e) {
+					arrowButtonClicked = true;
+					
+					// Avoids a bug: when the component is created an shown, first time the arrow button is pressed, the method
+					// #isPopupVisible() returns 'true' instead of returning 'false'
+					boolean popupVisible;
+					
+					if (updatedUI) {
+						popupVisible = false;
+					}
+					else {
+						popupVisible = isPopupVisible();
+					}
+		
+					// Shows all items temporally in the GUI
+					if ((! model.isShowAllItemsInListBox()) && (displayAllItemsWithArrowButton) && (! popupVisible)) {
+						showingAllItemsTemporally = true;
+						
+						// Stores the configuration of the flags	    	    	
+						int itemsOrderFlag = model.getItemsOrder();
+						String languageRules = model.getLocaleRules();
+						boolean caseSensitive = model.isCaseSensitive();
+						ILookUp lookUpAgent = model.getLookUpAgent();
+						
+						// Must replace the dataModel for update the data in the popup correctly
+						setModel(new DefaultComboBoxConfigurableLookUpModel(model.getData()));
+						
+						// Restores the configuration of the flags
+						model.setItemsOrder(itemsOrderFlag);
+						model.setShowAllItemsInListBox(true);
+						model.setLocaleRules(languageRules);
+						model.setCaseSensitive(caseSensitive);
+						model.setLookUpAgent(lookUpAgent);
+		
+						model.setTextWritten(document.textWritten);
+						
+						if (updatedUI) {
+							updatedUI = false;
+							showPopup();
+						}
+					}
+				}
+			};
+		}
+		
+		return arrowMouseListener;
+	}
+	
+	/**
+	 * <p>Sets the default values of the flags.</p>
+	 */
+	protected void setDefaultBehaviorFlagsConfiguration() {
+		onlyOneColorOnText = DEFAULT_ONLY_ONE_COLOR_ON_TEXT_CONFIGURATION;
+		beepEnabled = DEFAULT_BEEP_ENABLED_CONFIGURATION;
+		hidePopupIfThereAreNoItems = DEFAULT_HIDE_POPUP_IF_THERE_ARE_NO_ITEMS_CONFIGURATION;
+		toForceSelectAnItem = DEFAULT_TO_FORCE_SELECT_AN_ITEM_CONFIGURATION;
+		completeArrowKeySelection = DEFAULT_COMPLETE_ARROW_KEY_SELECTION_CONFIGURATION;
+		displayAllItemsWithArrowButton = DEFAULT_DISPLAY_ALL_ITEMS_WITH_ARROW_BUTTON_CONFIGURATION;
+	}
+	
+	/**
+	 * <p>Defines a key listener for the editor of this component.</p>
+	 * 
+	 * <p><b>Warning:</b><i>This method is another important difference from the JComboBox; and could work badly with some key-maps.</i></p>
+	 * 
+	 * @param comboBox A reference of this component
+	 */
+	private void defineEditorKeyListener(JComboBoxConfigurableLookUp comboBox) {
+		final JComboBoxConfigurableLookUp comboBoxReference = comboBox;
+		
+		editorKeyListener = new KeyAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * @see java.awt.event.KeyAdapter#keyPressed(java.awt.event.KeyEvent)
+			 */
+			public void keyPressed(KeyEvent ke)  // Executed on the Start view state or Search view state
+			{
+				// Restore the status if was showing all items temporally
+				if (showingAllItemsTemporally) {
+					showingAllItemsTemporally = false;
+					
+					// Stores the configuration of the flags	    	    	
+					int itemsOrderFlag = model.getItemsOrder();
+					String languageRules = model.getLocaleRules();
+					boolean caseSensitive = model.isCaseSensitive();
+					ILookUp lookUpAgent = model.getLookUpAgent();
+					
+					// Must replace the dataModel for update the data in the popup correctly
+					comboBoxReference.setModel(new DefaultComboBoxConfigurableLookUpModel(model.getData()));
+					
+					// Restores the configuration of the flags
+					model.setItemsOrder(itemsOrderFlag);
+					model.setShowAllItemsInListBox(false);
+					model.setLocaleRules(languageRules);
+					model.setCaseSensitive(caseSensitive);
+					model.setLookUpAgent(lookUpAgent);
+					model.setTextWritten(document.textWritten);
+				}
+				
+				// According the key pressed, do some actions or others
+				switch (ke.getKeyCode())
+				{
+					case KeyEvent.VK_ENTER :
+						// Don't allow execute the default instructions because they have a bug (first time we remove some characters, no item will be displayed in the popup)
+						ke.consume();
+
+						// Sets the caret position of the text in the document to the end:
+						((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setCaretPosition(document.getLength());
+
+						final DefaultComboBoxConfigurableLookUpModel c_model = (DefaultComboBoxConfigurableLookUpModel)comboBoxReference.getModel();
+						
+						if (toForceSelectAnItem) {
+							if (c_model.isShowAllItemsInListBox()) {
+								// Select now the first item or the previous selected
+								if (c_model.getSelectedItem() == null) {
+									if (c_model.getData().size() > 0) {
+										if (previousSelected == null)
+											previousSelected = c_model.getDataAccordingItemsOrder().elementAt(0);
+										else {
+											((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+										}
+									}
+									else {
+										previousSelected = null;
+									}
+								}
+								else {								
+									previousSelected = c_model.getSelectedItem();									
+									comboBoxReference.setSelectedItem(previousSelected);
+									
+									((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+								}
+							}
+							else {
+								// Select now the first item or the previous selected
+								switch (comboBoxReference.getModel().getSize()) {
+									case 0:
+										if (previousSelected == null) {
+											if (c_model.getData().size() > 0) {
+												previousSelected = c_model.getDataAccordingItemsOrder().elementAt(0);
+											}
+											else {
+												previousSelected = null;
+											}
+										}
+										
+										((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+										break;
+									case 1:
+										// If there is only one item -> select it
+										previousSelected = comboBoxReference.getItemAt(0); // Select the first
+										comboBoxReference.setSelectedIndex(0);
+										break;
+									default:
+										if (previousSelected == null) {
+											previousSelected = comboBoxReference.getItemAt(0); // Select the first
+											comboBoxReference.setSelectedIndex(0);
+										}
+										else
+											((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+								}
+							}
+						}						
+						
+						// Hide the popup
+						comboBoxReference.hidePopup();
+						
+						// Force select one item
+						if (completeArrowKeySelection) {
+							model.setTextWritten(document.textWritten);
+						}
+						break;
+						
+					case KeyEvent.VK_UP: case KeyEvent.VK_DOWN:
+						// User selects an item of the popup using the mouse
+						popupItemSelected = true;
+						arrowKeyPressed = true;
+						break;
+				}
+			}
+		};
+	}
+	
+	/**
+	 * <p>Defines a focus listener for the editor of this component.</p>
+	 * 
+	 * @param comboBox A reference of this component
+	 */
+	private void defineEditorFocusListener(JComboBoxConfigurableLookUp comboBox) {
+		final JComboBoxConfigurableLookUp comboBoxReference = comboBox;
+		
+		// Bug 5100422 on Java 1.5: Editable JComboBox won't hide popup when tabbing out		
+		hidePopupOnFocusLoss = System.getProperty("java.version").startsWith("1.5");
+		
+		// Highlight whole text when gaining focus
+		editorFocusListener = new FocusAdapter() {
+			/*
+			 *  (non-Javadoc)
+			 * @see java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
+			 */
+			public void focusLost(FocusEvent e) {
+				// Restore the status if was showing all items temporally
+				if (showingAllItemsTemporally) {
+					showingAllItemsTemporally = false;
+					
+					// Stores the configuration of the flags	    	    	
+					int itemsOrderFlag = model.getItemsOrder();
+					String languageRules = model.getLocaleRules();
+					boolean caseSensitive = model.isCaseSensitive();
+					ILookUp lookUpAgent = model.getLookUpAgent();
+					
+					// Must replace the dataModel for update the data in the popup correctly
+					comboBoxReference.setModel(new DefaultComboBoxConfigurableLookUpModel(model.getData()));
+					
+					// Restores the configuration of the flags
+					model.setItemsOrder(itemsOrderFlag);
+					model.setShowAllItemsInListBox(false);
+					model.setLocaleRules(languageRules);
+					model.setCaseSensitive(caseSensitive);
+					model.setLookUpAgent(lookUpAgent);
+					model.setTextWritten(document.textWritten);
+				}
+				
+				
+				// Sets the caret position of the text in the document to the end:
+				((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setCaretPosition(document.getLength());
+
+				final DefaultComboBoxConfigurableLookUpModel c_model = (DefaultComboBoxConfigurableLookUpModel)comboBoxReference.getModel();
+
+				if (toForceSelectAnItem) {
+					if (c_model.isShowAllItemsInListBox()) {
+						// Select now the first item or the previous selected
+						if (c_model.getSelectedItem() == null) {
+							if (c_model.getData().size() > 0) {
+								if (previousSelected == null)
+									previousSelected = c_model.getDataAccordingItemsOrder().elementAt(0);
+								else {
+									((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+								}
+							}
+							else {
+								previousSelected = null;
+							}
+						}
+						else {								
+							previousSelected = c_model.getSelectedItem();									
+							comboBoxReference.setSelectedItem(previousSelected);
+						}
+
+						((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+					}
+					else {
+						// Select now the first item or the previous selected
+						switch (model.getData().size()) {
+							case 0:
+								if (previousSelected == null) {
+									if (c_model.getData().size() > 0) {
+										previousSelected = c_model.getDataAccordingItemsOrder().elementAt(0);
+
+										((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+									}
+									else {
+										previousSelected = null;
+									}
+								}
+								break;
+							default:
+								if (previousSelected == null) {
+									previousSelected = comboBoxReference.getItemAt(0); // Select the first
+									comboBoxReference.setSelectedIndex(0);
+								}
+								else
+									((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setText(previousSelected.toString());
+						}
+					}
+				}
+
+				comboBoxReference.hidePopup();
+
+				// Workaround for Bug 5100422 - Hide Popup on focus loss
+				if (hidePopupOnFocusLoss)
+					comboBoxReference.setPopupVisible(false);
+			}			
+		};
+	}
+	
+	///// END NEW METHODS /////
+	
+	///// REIMPLEMENTATION OF METHODS OF 'JComboBox' /////
+	
+	/**
+	 * <p>Sets the editor used to paint and edit the selected item in the 
+     * <code>JComboBox</code> field.  The editor is used only if the
+     * receiving <code>JComboBox</code> is editable. If not editable,
+     * the combo box uses the renderer to paint the selected item.</p>
+     * 
+     * <p>The editor must be a <code>JTextComponent</code>, and its document a <code>PlainDocument</code> object.</p>
+     *  
+     * @param anEditor  the <code>ComboBoxEditor</code> that
+     *			displays the selected item
+     * @see #setRenderer
+     * @beaninfo
+     *     bound: true
+     *    expert: true
+     *  description: The editor that combo box uses to edit the current value
+	 */
+	public void setEditor(ComboBoxEditor anEditor) {
+		if (anEditor == null) {
+			super.setEditor(anEditor);
+			return;
+		}
+		
+		JTextComponent jTextComponentOfEditor = (JTextComponent) anEditor.getEditorComponent();
+
+		// Adds the new ''PlainDocumentTextFormatter'', adding the listeners of the new editor's document
+		PlainDocument old_document = ((PlainDocument)jTextComponentOfEditor.getDocument());
+		
+		DocumentListener[] documentListeners = old_document.getDocumentListeners();
+		UndoableEditListener[] undoableEditListeners = old_document.getUndoableEditListeners();
+		
+		// Defines a key listener for the editor of this component
+		defineEditorKeyListener(this);
+		jTextComponentOfEditor.addKeyListener(editorKeyListener);
+		
+		// Defines a focus listener for the editor of this component
+		defineEditorFocusListener(this);
+		jTextComponentOfEditor.addFocusListener(editorFocusListener);
+		
+		document = new PlainDocumentTextFormatter();
+				
+		// Set reference to the container component
+		document.setJComboBoxReference(this);
+			
+		// Removes all previous 'document' and 'undoableEdit' listeners
+		DocumentListener[] removableDocumentListeners = document.getDocumentListeners();
+		for (DocumentListener dL : removableDocumentListeners)
+			document.removeDocumentListener(dL);
+
+		UndoableEditListener[] removableUndoableEditListeners = document.getUndoableEditListeners();
+		for (UndoableEditListener dUEL : removableUndoableEditListeners)
+			document.removeUndoableEditListener(dUEL);
+
+		for (DocumentListener rdL : documentListeners)
+			document.addDocumentListener(rdL);
+		
+		// The undo-redo listeners fail
+		for (UndoableEditListener uEL : undoableEditListeners) 
+			document.addUndoableEditListener(uEL);
+		
+		if (undoableEditListeners.length > 0) {
+			if (jTextComponentOfEditor instanceof IEditableText) {
+				((IEditableText)jTextComponentOfEditor).addUndoRedoEditListener(new UndoRedoEditListener() {
+					/*
+					 * (non-Javadoc)
+					 * @see org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener#operationExecuted(org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditEvent)
+					 */
+					public void operationExecuted(UndoRedoEditEvent e) {
+						model.setTextWritten(e.getNewText());
+						document.updateOnlyTextColor();
+					}
+				});
+			}
+		}
+
+		jTextComponentOfEditor.setDocument(document);
+		
+		super.setEditor(anEditor);
+	}
+
+	public void setModel(ComboBoxModel aModel) {
+		// If model isn't DefaultComboBoxConfigurableLookUpModel, sets as model a new DefaultComboBoxConfigurableLookUpModel, with the data
+		//  of ''aModel'':
+		if (! (aModel instanceof DefaultComboBoxConfigurableLookUpModel) ) {
+			Vector<Object> data = new Vector<Object>(aModel.getSize());
+			
+			for (int i = 0; i < aModel.getSize(); i++) {
+				data.add(aModel.getElementAt(i));
+			}
+			
+			aModel = new DefaultComboBoxConfigurableLookUpModel(data);
+		}
+		
+		super.setModel(aModel);
+		
+		model = (DefaultComboBoxConfigurableLookUpModel)super.getModel();
+	}
+	
+	public void setSelectedIndex(int anIndex) {
+		if (anIndex < -1 || anIndex >= model.getSize())
+			// Fails because index is out of bounds.
+			throw new IllegalArgumentException("setSelectedIndex: " + anIndex + " out of bounds");
+		else
+			// Selects the item at the given index or clears the selection if the
+			// index value is -1.
+			setSelectedItem((anIndex == -1) ? null : model.getElementAt(anIndex));
+	}
+	
+	public void setSelectedItem(Object anObject) {		
+		if ((selectedItemReminder == null) || (!selectedItemReminder.equals(anObject))) {
+			if (arrowKeyPressed) {
+				
+				selectingItem = true;
+				model.setSelectedItem(anObject);
+				selectingItem = false;
+				
+				if (model.getSize() > 0)
+					previousSelected = anObject;
+			}
+			else {
+				selectingItem = true;
+				model.setSelectedItem(anObject);
+				selectingItem = false;
+				
+				editor.setItem(anObject);
+				
+				if (model.getSize() > 0)
+					previousSelected = anObject;
+			}
+			
+			if (selectedItemReminder != model.getSelectedItem()) {
+				// In case a users implementation of ComboBoxModel
+				// doesn't fire a ListDataEvent when the selection
+				// changes.
+				selectedItemChanged();
+			}
+		}			
+		fireActionEvent();
+		document.updateOnlyTextColor();
+	}
+
+	public void setEditable(boolean b) {
+		throw new UnsupportedOperationException();
+	}
+	
+	public void removeAllItems() {
+		if ( !(model instanceof MutableComboBoxModel) )
+			throw new RuntimeException("Cannot use this method with a non-Mutable data dataModel.");
+
+		//if ( model instanceof DefaultComboBoxConfigurableLookUpModel ) {
+		model.setTextWritten("");
+		((DefaultComboBoxConfigurableLookUpModel)model).removeAllElements();
+
+		selectedItemReminder = null;
+
+		if (isEditable()) {
+			editor.setItem(null);
+		}
+		
+		document.updateTextColorAndRingBeep();
+		updateUI();
+	}
+	
+	public void addItem(Object anObject) {
+		super.addItem(anObject);
+
+		if ((toForceSelectAnItem) && (getSelectedIndex() == -1))
+			setSelectedIndex(0);
+		
+		document.updateTextColorAndRingBeep();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#removeItem(java.lang.Object)
+	 */
+	public void removeItem(Object anObject) {
+		super.removeItem(anObject);
+		
+		document.updateTextColorAndRingBeep();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#removeItemAt(int)
+	 */
+	public void removeItemAt(int anIndex) {
+		super.removeItemAt(anIndex);
+		
+		document.updateTextColorAndRingBeep();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#setUI(javax.swing.plaf.ComponentUI)
+	 */
+	protected void setUI(ComponentUI newUI) {
+		super.setUI(newUI);
+		ComponentUI oldUI = newUI;
+		
+		// Remove the default key selection manager
+		super.setKeySelectionManager(null);
+		
+        firePropertyChange("UI", oldUI, newUI);
+        revalidate();
+        repaint();
+	}
+
+	/*
+	 * <p>Unsupported operation.</p>
+	 * 
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#selectWithKeyChar(char)
+	 */
+	public boolean selectWithKeyChar(char keyChar) {
+		throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * <p>Unsupported operation.</p>
+	 * 
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#processKeyEvent(java.awt.event.KeyEvent)
+	 */
+	public void processKeyEvent(KeyEvent e) {
+		throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * <p>Unsupported operation.</p>
+	 * 
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#createDefaultKeySelectionManager()
+	 */
+	protected KeySelectionManager createDefaultKeySelectionManager() {
+		throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#paramString()
+	 */
+	protected String paramString() {
+		return super.paramString() +
+		  "onlyOneColorOnText" + onlyOneColorOnText +
+		  "beepEnabled" + beepEnabled +
+		  "hidePopupIfThereAreNoItems" + hidePopupIfThereAreNoItems +
+		  "toForceSelectAnItem" + toForceSelectAnItem +
+		  "completeArrowKeySelection" + completeArrowKeySelection +
+		  "displayAllItemsWithArrowButton" + displayAllItemsWithArrowButton +
+		  "itemsOrder" + model.getItemsOrder() +
+		  "showAllItemsInListBox" + model.isShowAllItemsInListBox() +
+		  "localeRules" + model.getLocaleRules() +
+		  "caseSensitive" + model.isCaseSensitive();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#updateUI()
+	 */
+	public void updateUI() {
+		super.updateUI();
+		
+		// Force to hide the popup
+		updatedUI = true;
+
+		for (int i = 0; i < getComponentCount(); i++) {
+			if (getComponent(i) instanceof JButton) {
+				((JButton)getComponent(i)).addMouseListener(getArrowMouseListener());
+				return;
+			}
+		}
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComboBox#showPopup()
+	 */
+	public void showPopup() {
+		if (this.isShowing() && (!blockPopupHided))
+			setPopupVisible(true);
+	}
+
+	/**
+	 * <p>Sets if the popup of this component will always remain hided, or can be shown when is invoked.</p>
+	 * 
+	 * @param b <code>true</code> if will remain blocked; <code>false</code> if can be shown 
+	 */
+	public void setBlockPopupHided(boolean b) {
+		blockPopupHided = b;
+	}
+	
+
+	/**
+	 * <p>Determines if the popup of this component will always remain hided.</p>
+	 * 
+	 * @param b <code>true</code> if will remain blocked; <code>false</code> if can be shown 
+	 */
+	public boolean isBlockPopupHided() {
+		return blockPopupHided;
+	}
+	///// END REIMPLEMENTATION OF METHODS OF 'JComboBox' /////    
+	
+	////// METHODS FOR THE BEHAVIOR FLAGS  //////
+	/**
+	 * <p>Returns the 'only_One_Color_On_Text' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: always uses black colour on text.</li>
+	 *   <li><i>false</i>: by default uses black colour on text, but if text written by user doesn't match with any item according the <code>ILookUp</code> agent, text will be on red colour.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @return 'only_One_Color_On_Text' configuration
+	 */
+	public boolean isOnlyOneColorOnText() {
+		return onlyOneColorOnText;
+	}
+	
+	/**
+	 * <p>Sets the 'only_One_Color_On_Text' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: always uses black colour on text.</li>
+	 *   <li><i>false</i>: by default uses black colour on text, but if text written by user doesn't match with any item according the <code>ILookUp</code> agent, text will be on red colour.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @param b value for 'only_One_Color_On_Text' configuration flag
+	 */
+	public void setOnlyOneColorOnText(boolean b) {
+		onlyOneColorOnText = b;
+	}
+
+	/**
+	 * <p>Returns the 'beep_Enabled' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: a beep-sound is listened when no item matches with the text written according the <code>ILookUp</code> agent.</li>
+	 *   <li><i>false</i>: no sound is listened.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @return 'beep_Enabled' configuration
+	 */
+	public boolean isBeepEnabled() {
+		return beepEnabled;
+	}
+	
+	/**
+	 * <p>Sets the 'beep_Enabled' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: a beep-sound is listened when no item matches with the text written according the <code>ILookUp</code> agent.</li>
+	 *   <li><i>false</i>: no sound is listened.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @param b value for 'beep_Enabled' configuration flag
+	 */
+	public void setBeepEnabled(boolean b) {
+		beepEnabled = b;
+	}	
+
+	/**
+	 * <p>Returns the 'hidePopupIfThereAreNoItems' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: hides the popup if there are no items when you write.</li>
+	 *   <li><i>false</i>: default behaviour (if there are no items when you write, popup remains visible) .</li>
+	 *  <ul>
+	 * </p>
+	 * 
+	 * @return 'hidePopupIfThereAreNoItems' configuration
+	 */
+	public boolean isHidePopupIfThereAreNoItems() {
+		return hidePopupIfThereAreNoItems;
+	}
+	
+	/**
+	 * <p>Sets the 'hidePopupIfThereAreNoItems' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: hides the popup if there are no items when you write.</li>
+	 *   <li><i>false</i>: default behaviour (if there are no items when you write, popup remains visible) .</li>
+	 *  <ul>
+	 * </p>
+	 * 
+	 * @param b value for 'hidePopupIfThereAreNoItems' configuration flag
+	 */
+	public void setHidePopupIfThereAreNoItems(boolean b) {
+		hidePopupIfThereAreNoItems = b;
+	}
+
+	/**
+	 * <p>Returns the 'toForceSelectAnItem' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: selects the previous selected item or the first of the list when user presses the Enter key or when the component loses the focus .</li>
+	 *   <li><i>false</i>: default behaviour .</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @return 'toForceSelectAnItem' configuration
+	 */
+	public boolean isToForceSelectAnItem() {
+		return toForceSelectAnItem;
+	}
+	
+	/**
+	 * <p>Sets the 'toForceSelectAnItem' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: selects the previous selected item or the first of the list when user presses the Enter key or when the component loses the focus .</li>
+	 *   <li><i>false</i>: default behaviour .</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @param value for 'toForceSelectAnItem' configuration flag
+	 */
+	public void setToForceSelectAnItem(boolean b) {
+		toForceSelectAnItem = b;
+	}
+
+	/**
+	 * <p>Returns the 'completeArrowKeySelection' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: writes in the editor the value of the element selected by the arrow keys (up or down).</li>
+	 *   <li><i>false</i>: holds the previous text written .</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @return 'completeArrowKeySelection' configuration
+	 */
+	public boolean isCompleteArrowKeySelection() {
+		return completeArrowKeySelection;
+	}
+
+	/**
+	 * <p>Sets the 'completeArrowKeySelection' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: writes in the editor the value of the element selected by the arrow keys (up or down).</li>
+	 *   <li><i>false</i>: holds the previous text written .</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @param b value for 'completeArrowKeySelection' configuration flag
+	 */
+	public void setCompleteArrowKeySelection(boolean b) {
+		completeArrowKeySelection = b;
+	}
+
+	/**
+	 * <p>Returns the 'displayAllItemsWithArrowButton' configuration value of this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: displays all this component's dataModel items if its <i>popup</i> it's hided, and this component's dataModel
+	 *    listed only the matches <i>(flag: <code>DefaultComboBoxConfigurableLookUpModel.showAllItemsInListBox == false</code>)</i>.</li>
+	 *   <li><i>false</i>: normal behaviour according the other <i>flags</i>.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @return 'displayAllItemsWithArrowButton' configuration
+	 */
+	public boolean isDisplayAllItemsWithArrowButton() {
+		return displayAllItemsWithArrowButton;
+	}
+	
+	/**
+	 * <p>Sets the 'toForceSelectAnItem' configuration value for this component. Configuration values are:
+	 *  <ul>
+	 *   <li><i>true</i>: displays all this component's dataModel items if its <i>popup</i> it's hided, and this component's dataModel
+	 *    listed only the matches <i>(flag: <code>DefaultComboBoxConfigurableLookUpModel.showAllItemsInListBox == false</code>)</i>.</li>
+	 *   <li><i>false</i>: normal behaviour according the other <i>flags</i>.</li>
+	 *  </ul>
+	 * </p>
+	 * 
+	 * @param value for 'displayAllItemsWithArrowButton' configuration flag
+	 */
+	public void setDisplayAllItemsWithArrowButton(boolean b) {
+		displayAllItemsWithArrowButton = b;
+	}
+
+	////// END METHODS FOR THE BEHAVIOR FLAGS  //////
+
+
+	/**
+	 * <p>Inner class that inherits of the class PlainDocument, and is used for manipulate the textWritten that has the document of the editor of this component.</p>
+	 * 
+	 * <p>This class is also optimized for items look up process.</p>
+	 * 
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	public class PlainDocumentTextFormatter extends PlainDocument {
+		private static final long serialVersionUID = -1858441733547527816L;
+		private JComboBoxConfigurableLookUp comboBoxReference;
+		private String textWritten;
+		private boolean updatedModel;
+		private String textOfReplacement;
+		private boolean textInRedColor;
+		private int old_caretPosition;
+		private String completeArrowKeySelectionValue;
+
+		/**
+		 * <p>Default Constructor.</p>
+		 */
+		public PlainDocumentTextFormatter() {
+			super();
+			this.initialize();
+		}
+		
+		/**
+		 * <p>This method makes some initialize operations.</p> 
+		 */
+		protected void initialize() {
+			textWritten = "";
+			textOfReplacement = "";
+			textInRedColor = false;
+			completeArrowKeySelectionValue = null;
+		}
+
+		/**
+		 * <p>Sets a reference of this component.</p>
+		 * 
+		 * @param comboBox A reference to the class that contains this.
+		 */
+		protected void setJComboBoxReference(JComboBoxConfigurableLookUp comboBox) {
+			comboBoxReference = comboBox;
+		}
+
+		/*
+		 *  (non-Javadoc)
+		 * @see javax.swing.text.Document#insertString(int, java.lang.String, javax.swing.text.AttributeSet)
+		 */
+		public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
+			if (updatedModel) {
+				model.setTextWritten(textWritten);
+				super.insertString(offs, textWritten, a);
+				
+				return;
+			}
+
+			hidePopup();
+			
+			boolean caretToEnd = true;
+			
+			if (textWritten.length() > 0) {
+				if (offs < textWritten.length()) {
+					String old_textWritten = textWritten;
+					
+					// End of the text
+					textWritten = textWritten.substring(offs, textWritten.length());
+					
+					// Beginning of the text
+					if (offs > 0) {
+						// Reset (without text written)
+						textWritten = old_textWritten.substring(0, offs) + str + textWritten;
+					}
+					else {
+						
+						if (offs == 0) {
+							caretToEnd = false;
+						}
+						
+						textWritten = str + textWritten;
+					}
+				}
+				else {
+					textWritten = textWritten.substring(0, offs) + str;
+				}
+			}
+			else {
+				textWritten =  str;
+			}
+				
+			if (completeArrowKeySelectionValue == null) {
+				model.setTextWritten(textWritten);
+			}
+			else {
+				model.setTextWritten(completeArrowKeySelectionValue);
+			}
+			
+			super.insertString(offs, str, a);
+
+			// Update the color of the text
+			updateTextColorAndRingBeep();
+		
+			if (model.getSize() > 0) {
+				if (isShowing()) {
+					showPopup();
+				}
+			}
+			else {
+				if ((textWritten.compareTo("") != 0) && (!hidePopupIfThereAreNoItems)) {
+					showPopup();	
+				}
+			}
+			
+			if (caretToEnd) {
+				// Update the caret position -> at the same place it was or at the end
+				updateCaretPosition(textWritten.length());
+			}
+			else {
+				// Update the caret position -> at the same place it was or at the end
+				updateCaretPosition(str.length());
+			}
+		}
+		
+		/*
+		 *  (non-Javadoc)
+		 * @see javax.swing.text.AbstractDocument#replace(int, int, java.lang.String, javax.swing.text.AttributeSet)
+		 */
+		public void replace(int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
+			String old_textWritten;
+
+			if (arrowKeyPressed) {
+				if (!model.isShowAllItemsInListBox()) {
+					if (completeArrowKeySelection) {
+						String currentText = ((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).getText();
+						
+						old_textWritten = textWritten;
+						old_caretPosition = ((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).getCaretPosition() + text.length();
+								
+						textWritten = "";
+
+						super.remove(0, old_textWritten.length());
+		
+						if ((completeArrowKeySelectionValue == null) || (!currentText.equals(old_textWritten))) 
+							completeArrowKeySelectionValue = old_textWritten;
+
+						insertString(0, text, null);
+					}
+					else {
+						insertString(0, "", null);
+					}
+				}
+
+				previousSelected = text;
+				arrowKeyPressed = false;
+
+				return;
+			}
+
+			completeArrowKeySelectionValue = null;
+			
+			// Avoid two replaces for the same operation
+			if ((text.compareTo("") == 0) && (length == textWritten.length()))
+				return;
+			
+			// Only remove if there is text to be replaced (text selected)
+			if (length > 0) {
+
+				textOfReplacement = text;
+				remove(offset, length);
+			}
+			else {
+				if ((offset > 0) && (offset != textWritten.length())) {
+					// Must replace the dataModel for update the data in the popup correctly
+						
+					// There is a bug that when text has been removed, the elements in the popup aren seen.
+					// The solution to this bug is add them as a new dataModel
+					hidePopup();
+
+					updatedModel = true;
+
+					old_textWritten = textWritten;
+					old_caretPosition = ((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).getCaretPosition() + text.length();
+					
+					textWritten = "";
+					model.setTextWritten(textWritten);
+
+					super.remove(0, old_textWritten.length());
+				
+					// Stores the configuration of the flags	    	    	
+					int itemsOrderFlag = model.getItemsOrder();
+					boolean showAllItemsInListBox = model.isShowAllItemsInListBox();
+					String languageRules = model.getLocaleRules();
+					boolean caseSensitive = model.isCaseSensitive();
+					ILookUp lookUpAgent = model.getLookUpAgent();
+					
+					// Must replace the dataModel for update the data in the popup correctly
+					comboBoxReference.setModel(new DefaultComboBoxConfigurableLookUpModel(model.getData()));
+					
+					// Restores the configuration of the flags
+					model.setItemsOrder(itemsOrderFlag);
+					model.setShowAllItemsInListBox(showAllItemsInListBox);
+					model.setLocaleRules(languageRules);
+					model.setCaseSensitive(caseSensitive);
+					model.setLookUpAgent(lookUpAgent);
+					
+					// Reset (without text written)
+					insertString(0, textWritten, null);
+					
+					// Insert the new text
+					textWritten = old_textWritten.substring(0, offset) + text + old_textWritten.substring(offset, old_textWritten.length());
+					
+					insertString(0, textWritten, null);
+
+					updatedModel = false;
+
+					// Update the color of the text
+					updateTextColorAndRingBeep();
+					
+					// Update the caret position -> at the same place it was or at the end
+					updateCaretPosition(old_caretPosition);
+					
+					// Only show the popup if there are items to show
+					if (model.getSize() > 0) {
+						 showPopup();
+					}
+					else {
+						if ((textWritten.compareTo("") != 0) && (!hidePopupIfThereAreNoItems)) {
+							showPopup();	
+						}
+					}
+				}
+				else {
+					// Default replacement
+					super.replace(offset, length, text, attrs);
+				}
+			}
+		}
+			
+		/*
+		 *  (non-Javadoc)
+		 * @see javax.swing.text.Document#remove(int, int)
+		 */
+		public void remove(int offs, int len) throws BadLocationException {
+			String old_textWritten;
+				
+			// There is a bug that when text has been removed, the elements in the popup aren seen.
+			// The solution to this bug is add them as a new dataModel
+			hidePopup();
+
+			updatedModel = true;
+
+			old_textWritten = textWritten;
+			
+			old_caretPosition = Math.min(((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).getCaretPosition(), offs);
+			
+			textWritten = "";
+			model.setTextWritten(textWritten);
+
+			super.remove(0, old_textWritten.length());
+			
+			int itemsOrderFlag = model.getItemsOrder();
+			boolean showAllItemsInListBox = model.isShowAllItemsInListBox();
+			String languageRules = model.getLocaleRules();
+			boolean caseSensitive = model.isCaseSensitive();
+			ILookUp lookUpAgent = model.getLookUpAgent();
+		
+			// Must replace the dataModel for update the data in the popup correctly
+			comboBoxReference.setModel(new DefaultComboBoxConfigurableLookUpModel(model.getData()));
+			
+			// Restores the configuration of the flags
+			model.setItemsOrder(itemsOrderFlag);
+			model.setShowAllItemsInListBox(showAllItemsInListBox);
+			model.setLocaleRules(languageRules);
+			model.setCaseSensitive(caseSensitive);
+			model.setLookUpAgent(lookUpAgent);
+
+			// Reset (without text written)
+			insertString(0, textWritten, null);
+			
+			// Insert the new text
+			textWritten = old_textWritten.substring(0, offs) + textOfReplacement + old_textWritten.substring(offs + len, old_textWritten.length());
+
+			insertString(0, textWritten, null);
+			
+			updatedModel = false;
+			
+			// Update the color of the text
+			updateTextColorAndRingBeep();
+			
+			// Only show the popup if there are items to show
+			if (model.getSize() > 0) {
+				 showPopup();
+			}
+			else {
+				if ((textWritten.compareTo("") != 0) && (!hidePopupIfThereAreNoItems)) {
+					showPopup();	
+				}
+			}
+	
+//			if (old_caretPosition == 0) {
+//				// Set the caret position to the end of the text
+//				updateCaretPosition(textWritten.length());
+//			}
+//			else {
+				// Update the caret position -> at the same place it was or at the end
+				updateCaretPosition(old_caretPosition + textOfReplacement.length());
+//			}
+			
+			textOfReplacement = "";
+		}
+
+		/**
+		 * <p>Updates the color of the text in the {@link ComboBoxEditor} of this component, and
+		 *  rings a beep if there is no item.</p>
+		 * 
+		 * <ul>
+		 *  <li><i>Text in <u>red color</u></i>: if no item matches with the text written according the <code>ILookUp</code> agent.</li>
+		 *  <li><i>Text in <u>black color</u></i>: if there is at least one item matches with the text written according the <code>ILookUp</code> agent.</li>
+		 * </ul>
+		 */
+		public void updateTextColorAndRingBeep() {
+			if (! comboBoxReference.isOnlyOneColorOnText()) {
+				if (model.isShowAllItemsInListBox()) {
+					// Set text into red color if no items matches with the text written, or in black color if it was in red
+					//   color and now there is almost one element that starts with the characteres written by the user
+					if (textWritten.compareTo("") != 0) {
+						if (model.getSelectedItem() == null) {
+							comboBoxReference.getEditor().getEditorComponent().setForeground(Color.RED);
+							textInRedColor = true;
+								 
+								 // Rings a beep if allowed
+						if (beepEnabled)
+							comboBoxReference.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);
+						}
+						else {
+							comboBoxReference.getEditor().getEditorComponent().setForeground(Color.BLACK);
+							textInRedColor = false;
+						}
+					}
+					else {
+						if (textInRedColor) {
+							comboBoxReference.getEditor().getEditorComponent().setForeground(Color.BLACK);
+							textInRedColor = false;
+						}
+					}
+				}
+				else {
+					// Set text into red color if no items matches with the text written, or in black color if it was in red
+					//   color and now there is almost one element that starts with the characteres written by the user
+					if (textWritten.compareTo("") != 0) {
+						if (model.getSize() == 0) {
+							comboBoxReference.getEditor().getEditorComponent().setForeground(Color.RED);
+							textInRedColor = true;
+								 
+								 // Rings a beep if allowed
+						if (beepEnabled)
+							comboBoxReference.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);
+						}
+						else {
+							comboBoxReference.getEditor().getEditorComponent().setForeground(Color.BLACK);
+							textInRedColor = false;
+						}
+					}
+					else {
+						if (textInRedColor) {
+							comboBoxReference.getEditor().getEditorComponent().setForeground(Color.BLACK);
+							textInRedColor = false;
+						}
+					}
+				}
+			}
+			else {
+				// Rings a beep if no there is no item, and if it's allowed
+				if ((textWritten.compareTo("") != 0) && (model.getSize() == 0)) {
+					if (beepEnabled)
+						comboBoxReference.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);
+				}
+			}
+		}
+		
+		/**
+		 * <p>Updates the position of the caret in the {@link ComboBoxEditor} of this component.</p>
+		 * 
+		 * @param position the new position of the caret.
+		 */
+		public void updateCaretPosition(int position) {
+			// If user has selected an item of the popup (using the mouse) -> set the caret position to the end of the text
+			if (popupItemSelected) {
+				((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setCaretPosition(textWritten.length());
+				popupItemSelected = false;
+				return;
+			}
+			
+			if (position > textWritten.length())
+				((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setCaretPosition(textWritten.length());
+			else {
+				((JTextComponent) comboBoxReference.getEditor().getEditorComponent()).setCaretPosition(position);
+			}
+		}
+
+		/**
+		 * <p>Updates the color of the text in this document.</p>
+		 * 
+		 * <p>Sets text to red color if there is no item in the visible list that the <i>look up</i> agent
+		 *  returned with that text and the items of the dataModel, and, being enabled the second color in
+		 *  the configuration the the <code>JcomboBoxConfigurableLookUp</code> agent. Otherwise, the foreground color
+		 *  of the text will be black.</p>
+		 * 
+		 * <p>This method disables the <i>beep</i> during the process of updating the color of the text, and
+		 *  restores it after.</p>
+		 */
+		public void updateOnlyTextColor() {
+			boolean isBeepEnabled = isBeepEnabled();
+			setBeepEnabled(false);
+			
+			updateTextColorAndRingBeep();
+				
+			setBeepEnabled(isBeepEnabled);
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/JComboBoxConfigurableLookUp.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/StringComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/StringComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/StringComparator.java	(revision 42196)
@@ -0,0 +1,189 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup;
+
+import java.text.Collator;
+import java.util.Comparator;
+
+/**
+ * <p>Compares two chain of characters alphabetically.</p>
+ *
+ * <p>This class is a copy of a class with the same name located in <i>libIverUtiles</i>.</p>
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es)
+ */
+public class StringComparator implements Comparator<Object> {
+	private boolean caseSensitive = true;
+	private LocaleRules localeRules = null;
+
+    /**
+     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+     */
+    public int compare(Object o1, Object o2) {
+        String s1 = o1.toString();
+        String s2 = o2.toString();
+
+        // If localeRules is null -> use the default rules
+        if (localeRules == null) {
+        	if (caseSensitive) {
+        		return s1.compareTo(s2);
+        	}
+        	else {
+        		return s1.compareToIgnoreCase(s2);
+        	}
+        }
+        else {
+        	if (localeRules.isUseLocaleRules()) {
+        		Collator collator = localeRules.getCollator();
+        		
+        		if (caseSensitive) {
+        			return collator.compare(s1, s2);
+        		}
+        		else {
+        			return collator.compare(s1.toLowerCase(), s2.toLowerCase());
+        		}
+        	}
+        	else {
+            	if (caseSensitive) {
+            		return s1.compareTo(s2);
+            	}
+            	else {
+            		return s1.compareToIgnoreCase(s2);
+            	}
+        	}
+        }
+    }
+
+    /**
+     * Determines if the comparator is sensitive to upper case and down case characters or not.
+     *
+     * @return <code>true</code> if the comparator is sensitive to upper case and down case characters; 
+     *  otherwise not
+     */
+    public boolean isCaseSensitive() {
+        return caseSensitive;
+    }
+
+    /**
+     * Sets the comparator sensitive or insensitive to upper case and down case characters.
+     *
+     * @param b <code>true</code> if the comparator is sensitive to upper case and down case characters;
+     *  <code>false</code> if not
+     */
+    public void setCaseSensitive(boolean b) {
+        caseSensitive = b;
+    }
+
+    /**
+     * Gets an object with the information for use the locale rules in comparison between strings.
+     * <ul>
+     * <li>A boolean value -> if want or not use the locale rules</li>
+     * <li>A reference to the locale rules</li>
+     * </ul>
+     * 
+     * @return @see LocaleRules
+     */
+    public LocaleRules getLocaleRules() {
+    	return localeRules;
+    }    
+    /**
+     * Sets an object with the information for use the locale rules in comparison between strings.
+     * <ul>
+     * <li>A boolean value -> if want or not use the locale rules.</li>
+     * <li>A reference to the locale rules.</li>
+     * </ul>
+     * 
+     * @param @see LocaleRules
+     */
+    public void setLocaleRules(LocaleRules locRules) {
+    	localeRules = locRules;
+    }
+    
+    /**
+     * Represents the information needed by <i>StringComparator</i> for use or not locale-sensitive String
+     *  comparison-rules in the <b><i>compare</i></b> method.
+     * 
+     * @author Pablo Piqueras Bartolom�
+     */
+    public class LocaleRules {
+    	 private boolean useLocaleRules;
+    	 private Collator _collator;
+    	 
+    	 /**
+    	  * Default constructor without parameters.
+    	  */
+    	 public LocaleRules() {
+    		 useLocaleRules = false;
+    		 _collator = null;
+    	 }
+    	 
+    	 /**
+    	  * Default constructor with two parameters.
+    	  * 
+    	  * @param b Use locale rules
+    	  * @param collator A reference to an object configurated for locale-sensitive String comparison
+    	  */
+    	 public LocaleRules(boolean b, Collator collator) {
+    		 useLocaleRules = b;
+    		 _collator = collator;
+    	 }
+    	 
+ 		/**
+ 		 * Gets the value of the inner attribute <i>_collator</i>.
+ 		 * 
+ 		 * @return Returns A reference to an object configurated for locale-sensitive String comparison
+ 		 */
+ 		public Collator getCollator() {
+ 			return _collator;
+ 		}
+
+ 		/**
+ 		 * Sets a value to the inner attribute <i>_collator</i>.
+ 		 * 
+ 		 * @param collator A reference to an object configurated for locale-sensitive String comparison
+ 		 */
+ 		public void setCollator(Collator collator) {
+ 			this._collator = collator;
+ 		}
+
+		/**
+		 * Gets the value of the inner attribute <i>useLocaleRules</i>.
+		 * 
+		 * @return Returns the useLocaleRules.
+		 */
+		public boolean isUseLocaleRules() {
+			return useLocaleRules;
+		}
+
+		/**
+		 * Sets a value to the inner attribute <i>useLocaleRules</i>.
+		 * 
+		 * @param useLocaleRules The useLocaleRules to set.
+		 */
+		public void setUseLocaleRules(boolean useLocaleRules) {
+			this.useLocaleRules = useLocaleRules;
+		}
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/StringComparator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/agents/StartsWithLookUpAgent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/agents/StartsWithLookUpAgent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/agents/StartsWithLookUpAgent.java	(revision 42196)
@@ -0,0 +1,123 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup.agents;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Vector;
+
+import org.gvsig.gui.beans.comboboxconfigurablelookup.ILookUp;
+import org.gvsig.gui.beans.comboboxconfigurablelookup.StringComparator;
+
+/**
+ * <p>Agent that looks up items of an locale-rules alphabetically sort ordered <code>Vector</code> that
+ *  start with a text. Those items will be returned as a {@link List List}.</p>
+ * 
+ * <p>Supports two versions: with or without considering case sensitive.</p>
+ * 
+ * @version 07/02/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class StartsWithLookUpAgent implements ILookUp {
+	/**
+	 * <p>Creates a new instance of the class <code>StartsWithLookUpAgent</code>.</p>
+	 */
+	public StartsWithLookUpAgent() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.comboboxconfigurablelookup.ILookUp#doLookUpConsideringCaseSensitive(java.lang.String, java.util.Vector, org.gvsig.gui.beans.comboboxconfigurablelookup.StringComparator)
+	 */
+	public synchronized List<Object> doLookUpConsideringCaseSensitive(String text, Vector<Object> sortOrderedItems, StringComparator comp) {
+		if (text == null)
+			return null;
+		
+		List<Object> results_list = doLookUpIgnoringCaseSensitive(text, sortOrderedItems, comp);
+
+		if (results_list == null)
+			return null;
+
+		List<Object> results = new ArrayList<Object>();
+
+		for (int i = 0; i < (results_list.size()); i++) {
+			if (results_list.get(i).toString().startsWith(text)) {
+				results.add(results_list.get(i));
+			}
+		}
+
+		return results;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.comboboxconfigurablelookup.ILookUp#doLookUpIgnoringCaseSensitive(java.lang.String, java.util.Vector, org.gvsig.gui.beans.comboboxconfigurablelookup.StringComparator)
+	 */
+	public synchronized List<Object> doLookUpIgnoringCaseSensitive(String text, Vector<Object> sortOrderedItems, StringComparator comp) {
+		if (text == null)
+			return null;
+		
+		int currentIteration = 0;
+		int size = sortOrderedItems.size();
+		int maxNumberOfIterations = (int) (Math.log(size) / Math.log(2));
+		int lowIndex = 0;
+		int highIndex = sortOrderedItems.size() - 1;
+		int mIndx;
+		
+		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+			mIndx = ( lowIndex + highIndex ) / 2;
+
+			if ( sortOrderedItems.get( mIndx ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) {
+				lowIndex = highIndex = mIndx;
+				highIndex ++;
+				
+				// Expand the rank to up
+				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					highIndex ++;
+				}
+
+				// Expand the rank to down
+				while ( ( (lowIndex - 1) > -1 ) && ( sortOrderedItems.get( (lowIndex - 1) ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					lowIndex --;
+				}
+				
+				// Returns all items in the rank			
+				return Arrays.asList((sortOrderedItems.subList(lowIndex, highIndex)).toArray()); // Breaks the loop
+			}
+			else {
+				if ( comp.compare(sortOrderedItems.get( mIndx ).toString().toLowerCase(), text.toLowerCase() ) > 0 ) {
+					highIndex = mIndx - 1;
+				}
+				else {
+					lowIndex = mIndx + 1;
+				}
+			}
+			
+			currentIteration ++;
+		}
+		
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/agents/StartsWithLookUpAgent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/ILookUp.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/ILookUp.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/ILookUp.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.comboboxconfigurablelookup;
+
+import java.util.List;
+import java.util.Vector;
+
+/**
+ * <p>Interface for implementing algorithms that get a sublist of items that match with a text written according
+ *  an orthographical rules and particular search requirements.</p>
+ * 
+ * <p>There are two possibilities, considering or ignoring case sensitive.</p>
+ * 
+ * <p>The particular implementation will be useful to integrate customized algorithms as the <i>look up</i>
+ *  logic in the {@link JComboBoxConfigurableLookUp JComboBoxConfigurableLookUp} model.</p> 
+ * 
+ * @version 07/02/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public interface ILookUp {
+	/**
+	 * <p>This method should be used when is wanted to distinguish small letters from capital letters during the search.</p>
+	 *   
+	 * <p>It's necessary that all items of the array implement the {@link Comparable} interface.</p>
+	 * 
+	 * <p>It's also necessary that the value returned by the <i>toString()</i> method of each item (supposing 
+	 *   they inherit from Object) would be the expected value user saw (that would be used to compare the items).</p>
+	 * 
+	 * <p>And elements of the <code>Vector</code> should be sort ordered by a <code>StringComparator</code> with the same configuration as <code>comp</code>.</p>
+	 * 
+	 * @param text java.lang.String
+	 * @param sortOrderedItems java.util.Vector
+	 * @param comp An <code>StringComparator</code> object which implements the <i><b>compareTo()</b><i> method. Must have the same configuration that was
+	 *  used to sort order the items of <code>sortOrderedItems</code>.
+	 *  
+	 * @return A sublist with all items that carry out with the particular search algorithm requirements
+	 */
+	public List<Object> doLookUpConsideringCaseSensitive(String text, Vector<Object> sortOrderedItems, StringComparator comp);
+
+	/**
+	 * <p>This method should be used when is wanted not to distinguish small letters from capital letters during the search, and the comparison of items
+	 *   done according an algorithm we define.</p>
+	 *   
+	 * <p>It's necessary that all items of the array implement the {@link Comparable} interface.</p>
+	 * 
+	 * <p>It's also necessary that the value returned by the <i>toString()</i> method of each item (supposing 
+	 *   they inherit from Object) would be the expected value user saw (that would be used to compare the items).</p>
+	 * 
+	 * <p>And elements of the <code>Vector</code> should be sort ordered by a <code>StringComparator</code> with the same configuration as <code>comp</code>.</p>
+	 * 
+	 * @param text java.lang.String
+	 * @param sortOrderedItems java.util.Vector
+	 * @param comp An <code>StringComparator</code> object which implements the <i><b>compareTo()</b><i> method. Must have the same configuration that was
+	 *  used to sort order the items of <code>sortOrderedItems</code>.
+	 *  
+	 * @return A sublist with all items that carry out with the particular search algorithm requirements
+	 */
+	public List<Object> doLookUpIgnoringCaseSensitive(String text, Vector<Object> sortOrderedItems, StringComparator comp);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/comboboxconfigurablelookup/ILookUp.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckSliderTextContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckSliderTextContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckSliderTextContainer.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.checkslidertext;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.slidertext.SliderTextContainer;
+/**
+ * A�ade un check al componente Slider ajustando el tama�o del componente
+ * a la longitud del check. Al redimensionar el componente varia el tama�o
+ * del slider
+ * 
+ * @author Nacho Brodin(nachobrodin@gmail.com) 
+ */
+public class CheckSliderTextContainer extends SliderTextContainer implements ActionListener{
+	private static final long serialVersionUID  = -542842897847364459L;
+	public JCheckBox          check             = null;
+	private JPanel            pLabel            = null;
+	private String            text              = null;
+	private boolean           showCheck         = true;
+	private JLabel            labelWithoutCheck = null;
+
+	/**
+	 * Constructor	
+	 * @param min Valor m�nimo del slider
+	 * @param max Valor m�ximo del slider
+	 * @param defaultPos Posici�n inicial
+	 * @param up Si es true el texto se coloca sobre el componente y si es false a la izquierda 
+	 * @param txt Texto de la etiqueta del check
+	 * @param active Valor por defecto del control.True activo y false desactivo
+	 * @deprecated Es recomendable el uso del constructor con el par�metro border. Tiene la misma funcionalidad 
+	 * si se pone ese par�metro a true. Se mantiene este constructor por compatibilidad con versiones 
+	 * anteriores.
+	 */
+	public CheckSliderTextContainer(int min, int max, int defaultPos, boolean up, String txt, boolean active){
+		this(min, max, defaultPos, up, txt, active, false, true);
+	}
+	
+	/**
+	 * Constructor	
+	 * @param min Valor m�nimo del slider
+	 * @param max Valor m�ximo del slider
+	 * @param defaultPos Posici�n inicial
+	 * @param up Si es true el texto se coloca sobre el componente y si es false a la izquierda 
+	 * @param txt Texto de la etiqueta del check
+	 * @param active Valor por defecto del control.True activo y false desactivo
+	 * @param border True para mostrar el borde al control y false para ocultarlo
+	 * @param showCheck True para mostrar el checkbox de activaci�n y desactivaci�n. False para ocultarlo
+	 */
+	public CheckSliderTextContainer(int min, int max, int defaultPos, boolean up, String txt, boolean active, boolean border, boolean showCheck) {
+		super(min, max, defaultPos, border);
+		this.showCheck = showCheck;
+		text = txt;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.insets = new Insets(0,0,0,0);
+		if(!up)
+			super.add(getPCheck(up), BorderLayout.WEST);
+		else
+			super.add(getPCheck(up), BorderLayout.NORTH);
+		if(showCheck) {
+			check.addActionListener(this);
+			check.setSelected(active);
+		}
+		setControlEnabled(active);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPCheck(boolean up) {
+		if (pLabel == null) {
+			pLabel = new JPanel();
+			if (!up) {
+				GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+				pLabel.setLayout(new GridBagLayout());
+				if(showCheck) {
+					gridBagConstraints1.insets = new java.awt.Insets(0, 10, 13, 0);
+					pLabel.add(getCheck(), gridBagConstraints1);
+				} else {
+					gridBagConstraints1.insets = new java.awt.Insets(0, 0, 13, 0);
+					labelWithoutCheck = new JLabel(text); 
+					pLabel.add(labelWithoutCheck, gridBagConstraints1);
+				}
+			} else {
+				FlowLayout fl = new FlowLayout();
+				fl.setAlignment(FlowLayout.LEFT);
+				pLabel.setLayout(fl);
+				if(showCheck)
+					pLabel.add(getCheck(), null);
+				else {
+					labelWithoutCheck = new JLabel(text); 
+					pLabel.add(labelWithoutCheck, null);
+				}
+			}
+		}
+		return pLabel;
+	}
+
+	/**
+	 * This method initializes JLabel
+	 * @return
+	 */
+	public JCheckBox getCheck() {
+		if(check == null)
+			check = new JCheckBox(text);
+		return check;
+	}
+
+	/**
+	 * Activa o desactiva el control del panel
+	 * @param active
+	 */
+	public void setControlEnabled(boolean active) {
+		if(showCheck)
+			getCheck().setSelected(active);
+		if(labelWithoutCheck != null)
+			labelWithoutCheck.setEnabled(active);
+		super.setControlEnabled(active);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == check) {
+			setControlEnabled(check.isSelected());
+			callChangeValue(true);
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckSliderTextContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckColorSliderTextContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckColorSliderTextContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckColorSliderTextContainer.java	(revision 42196)
@@ -0,0 +1,145 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.checkslidertext;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.slidertext.ColorSliderTextContainer;
+/**
+ * A�ade un check al componente Slider ajustando el tama�o del componente a la
+ * longitud del check. Al redimensionar el componente varia el tama�o del slider
+ *
+ * @version 08/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class CheckColorSliderTextContainer extends ColorSliderTextContainer implements ActionListener {
+	private static final long	serialVersionUID	= 7047604405777061995L;
+	public JCheckBox check = null;
+	private JPanel pLabel = null;
+	private String	text = null;
+
+	/**
+	 * Constructor
+	 * @param min Valor m�nimo del slider
+	 * @param max Valor m�ximo del slider
+	 * @param defaultPos Posici�n inicial
+	 * @param txt Texto de la etiqueta del check
+	 * @param active Valor por defecto del control.True activo y false desactivo
+	 */
+	public CheckColorSliderTextContainer(int min, int max, int defaultPos, String txt, boolean active) {
+		super(min, max, defaultPos);
+		text = txt;
+		add(getPCheck(), BorderLayout.WEST);
+		check.addActionListener(this);
+		check.setSelected(active);
+		setControlEnabled(active);
+
+		this.setMaximumSize(new Dimension(32767, 31));
+		this.setMinimumSize(new Dimension(250, 31));
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPCheck() {
+		if (pLabel == null) {
+			pLabel = new JPanel();
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(0, 0, 13, 0);
+			pLabel.setLayout(new GridBagLayout());
+			pLabel.add(getCheck(), gridBagConstraints1);
+			pLabel.add(new JLabel(text), gridBagConstraints1);
+		}
+		return pLabel;
+	}
+
+	/**
+	 * This method initializes JLabel
+	 * @return
+	 */
+	private JCheckBox getCheck() {
+		if (check == null)
+			check = new JCheckBox();
+		return check;
+	}
+
+	/**
+	 * Activa o desactiva el control del panel
+	 * @param active
+	 */
+	public void setChecked(boolean active) {
+		getCheck().setSelected(active);
+		super.setControlEnabled(active);
+	}
+
+	/**
+	 * Hace visible el checkbox o no del componente
+	 * @param value
+	 */
+	public void setCheckboxVisible(boolean value) {
+		if (!value)
+			setChecked(true);
+		getCheck().setVisible(value);
+	}
+
+	/**
+	 * Devuelve si el control esta activo
+	 * @param active
+	 */
+	public boolean isChecked() {
+		return getCheck().isSelected();
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == check) {
+			setControlEnabled(check.isSelected());
+			callChangeValue();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.swing.JComponent#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		getCheck().setEnabled(enabled);
+
+		if (!getCheck().isSelected())
+			enabled = false;
+
+		getSlider().setEnabled(enabled);
+		getJSpinner().setEnabled(enabled);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/checkslidertext/CheckColorSliderTextContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Messages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Messages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Messages.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.gui.beans;
+
+import java.util.Locale;
+
+/**
+ * Bridge class to provide internationalization services to the library.
+ * It uses the gvsig-i18n library as a backend, and includes its
+ * necessary initialization.
+ *
+ * @author Cesar Martinez Izquierdo
+ *
+ */
+public class Messages {
+	/**
+	 * Whether the class has been initialized
+	 */
+	private static boolean isInitialized = false;
+
+	/**
+	 * The name of the Java package containing this class
+	 */
+	private static final String packageName = Messages.class.getPackage().getName();
+
+	/**
+	 * Loads the translations in the dictionary. It initializes the backend
+	 * gvsig-i18n library
+	 *
+	 */
+	private static void init() {
+		if (!org.gvsig.i18n.Messages.hasLocales()) {
+			org.gvsig.i18n.Messages.addLocale(Locale.getDefault());
+		}
+		org.gvsig.i18n.Messages.addResourceFamily(packageName+".resources.translations.text", Messages.class.getClassLoader(), packageName);
+	}
+
+	/**
+	 * Gets the translation associated with the provided translation key.
+	 *
+	 * @param key The translation key which identifies the target text
+	 * @return The translation associated with the provided translation key.
+	 */
+	public static String getText(String key) {
+		if (isInitialized==false) {
+			init();
+			isInitialized = true;
+		}
+		return org.gvsig.i18n.Messages.getText(key, packageName);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/Messages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderEvent.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.slidertext.listeners;
+
+import java.util.EventObject;
+/**
+ * Evento b�sico para un ColorSliderTextContainer
+ *
+ * @version 03/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class SliderEvent extends EventObject {
+	private static final long serialVersionUID = -128111523373280522L;
+
+	/**
+	 * Construye un SliderEvent
+	 * @param source
+	 */
+	public SliderEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderListener.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.slidertext.listeners;
+
+import java.util.EventListener;
+
+public interface SliderListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente. Nunca
+	 * se dispara mientras se hace un dragged con el rat�n.
+	 * @param e
+	 */
+	public void actionValueChanged(SliderEvent e);
+
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente mientras se
+	 * hace un dragged con el rat�n.
+	 * @param e
+	 */
+	public void actionValueDragged(SliderEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/listeners/SliderListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/ColorSliderTextContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/ColorSliderTextContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/ColorSliderTextContainer.java	(revision 42196)
@@ -0,0 +1,337 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.slidertext;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JPanel;
+import javax.swing.JSpinner;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.gui.beans.doubleslider.DoubleSlider;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderEvent;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderListener;
+/**
+ * Barra de deslizamiento con una ventana de texto que tiene el valor de la
+ * posici�n de la barra. En este control podr� controlarse mediante la entrada
+ * de datos por la caja de texto la posibilidad de introducir valores decimales.
+ *
+ * @version 15/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ColorSliderTextContainer extends JPanel implements ChangeListener, DoubleSliderListener {
+	private static final long serialVersionUID = 1876415954410511634L;
+	private ArrayList<DoubleSliderListener> actionCommandListeners = new ArrayList<DoubleSliderListener>();
+
+	private JPanel       pText            = null;
+	private DoubleSlider slider           = null;
+	private JSpinner     jSpinner         = null;
+	private int          min              = 0;
+	private int          max              = 255;
+	private int          defaultPos       = 0;
+
+	/**
+	 * Contructor
+	 * @param min Valor m�nimo de la barra
+	 * @param max Valor m�ximo de la barra
+	 * @param defaultPos Posici�n por defecto
+	 */
+	public ColorSliderTextContainer(int min, int max, int defaultPos) {
+		super();
+		this.min = min;
+		this.max = max;
+		this.defaultPos = defaultPos;
+
+		initialize();
+		slider.setTwoSliders(false);
+	}
+
+	/**
+	 * Constructor vacio
+	 */
+	public ColorSliderTextContainer() {
+		this(0, 100, 0);
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout(5, 5));
+		this.add(getSlider(), BorderLayout.CENTER);
+		this.add(getPText(), BorderLayout.EAST);
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPText() {
+		if (pText == null) {
+			pText = new JPanel();
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(0, 10, 8, 0);
+			pText.setLayout(new GridBagLayout());
+			pText.add(getJSpinner(), gridBagConstraints1);
+		}
+		return pText;
+	}
+
+	/**
+	 * This method initializes jSlider
+	 *
+	 * @return javax.swing.JSlider
+	 */
+	public DoubleSlider getSlider() {
+		if (slider == null) {
+			slider = new DoubleSlider();
+			slider.setMinimum(min);
+			slider.setMaximum(max);
+			slider.setValue(defaultPos);
+			slider.addValueChangedListener(this);
+		}
+		return slider;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	public JSpinner getJSpinner() {
+		if (jSpinner == null) {
+			jSpinner = new JSpinner();
+			jSpinner.setValue(new Integer(defaultPos));
+			jSpinner.setPreferredSize(new Dimension(50, 26));
+			jSpinner.setMinimumSize(new Dimension(50, 26));
+			jSpinner.addChangeListener(this);
+		}
+		return jSpinner;
+	}
+
+	public void setComponentSize(int w, int h){
+	}
+
+	/**
+	 * Obtiene el valor del control.
+	 * @return Valor del control en formato double.
+	 */
+	public int getValue() {
+		return new Integer(getJSpinner().getValue() + "").intValue();
+	}
+
+	/**
+	 * Asigna el valor del control.
+	 * @return Valor del control en formato double.
+	 */
+	public void setValue(int value) {
+		getJSpinner().setValue(new Integer(value));
+		getSlider().setValue(value);
+	}
+
+	/**
+	 * Activa o desactiva el control del panel
+	 * @param active
+	 */
+	public void setControlEnabled(boolean active){
+		getSlider().setEnabled(active);
+		getJSpinner().setEnabled(active);
+	}
+
+	/**
+	 * Obtiene el valor m�ximo del slider
+	 * @return Entero con el valor m�ximo
+	 */
+	public int getMax() {
+		return max;
+	}
+
+	/**
+	 * Asigna el valor m�ximo del slider
+	 * @param Entero con el valor m�ximo
+	 * @deprecated Usar setMaximum en su lugar
+	 */
+	public void setMax(int max) {
+		this.setMaximum(max);
+	}
+
+	/**
+	 * Asigna el valor m�ximo del slider
+	 * @param Entero con el valor m�ximo
+	 */
+	public void setMaximum(int max) {
+		this.max = max;
+		updateInterval();
+	}
+
+	/**
+	 * Obtiene el valor m�nimo del slider
+	 * @return Entero con el valor m�nimo
+	 */
+	public int getMin() {
+		return min;
+	}
+
+	/**
+	 * Asigna el valor m�nimo del slider
+	 * @param Entero con el valor m�nimo
+	 * @deprecated Usar setMinimum
+	 */
+	public void setMin(int min) {
+		this.setMinimum(min);
+	}
+
+	/**
+	 * Asigna el valor m�nimo del slider
+	 * @param Entero con el valor m�nimo
+	 */
+	public void setMinimum(int min) {
+		this.min = min;
+		updateInterval();
+	}
+
+	private void updateInterval() {
+		int aux = this.getValue();
+		getSlider().setMinimum(min);
+		getSlider().setMaximum(max);
+		setValue(aux);
+	}
+
+	/**
+	 * Especificar el color izquierdo del control
+	 * @param color
+	 */
+	public void setColor1(Color color, boolean refresh) {
+		slider.setColor1(color, refresh);
+	}
+
+	/**
+	 * Especificar el color derecho del control
+	 * @param color
+	 */
+	public void setColor2(Color color, boolean refresh) {
+		slider.setColor2(color, refresh);
+	}
+
+	/**
+	 * Controla cuando cambia el spinner
+	 */
+	public void stateChanged(ChangeEvent e) {
+		int value = new Integer(getJSpinner().getValue().toString()).intValue();
+		if (value != getSlider().getValue())
+			getSlider().setValue(value);
+		if (new Integer(getJSpinner().getValue().toString()).intValue() != getSlider().getValue())
+			getJSpinner().setValue(new Integer(getSlider().getValue()));
+
+		if (spinnerEvent)
+			callChangeValue();
+	}
+
+	/**
+	 * Dispara el evento del cambio del control
+	 */
+	protected void callChangeValue() {
+		Iterator<DoubleSliderListener> iterator = actionCommandListeners.iterator();
+		while (iterator.hasNext()) {
+			DoubleSliderListener listener = iterator.next();
+			listener.actionValueChanged(new DoubleSliderEvent(this));
+		}
+	}
+
+	/**
+	 * Dispara el evento del cambio del control
+	 */
+	protected void callDraggedValue() {
+		Iterator<DoubleSliderListener> iterator = actionCommandListeners.iterator();
+		while (iterator.hasNext()) {
+			DoubleSliderListener listener = iterator.next();
+			listener.actionValueDragged(new DoubleSliderEvent(this));
+		}
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(DoubleSliderListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(DoubleSliderListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.swing.JComponent#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		jSpinner.setEnabled(enabled);
+		slider.setEnabled(enabled);
+	}
+
+	/**
+	 * Controla cuando cambia el slider
+	 */
+	public void actionValueChanged(DoubleSliderEvent e) {
+		int value = getSlider().getValue();
+		getJSpinner().setValue(new Integer(value));
+
+		if (isEnabled())
+			callChangeValue();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.doubleslider.DoubleSliderListener#actionValueDragged(java.util.EventObject)
+	 */
+	boolean spinnerEvent = true;
+	int lastDragged = -1;
+	public void actionValueDragged(DoubleSliderEvent e) {
+		int value = getSlider().getValue();
+		if (lastDragged != value) {
+			lastDragged = value;
+			spinnerEvent = false;
+			getJSpinner().setValue(new Integer(value));
+			spinnerEvent = true;
+
+			if (isEnabled())
+				callDraggedValue();
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/ColorSliderTextContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/SliderTextContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/SliderTextContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/SliderTextContainer.java	(revision 42196)
@@ -0,0 +1,457 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.slidertext;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
+import org.gvsig.gui.beans.slidertext.listeners.SliderListener;
+/**
+ * Barra de deslizamiento con una ventana de texto que tiene el valor de la
+ * posici�n de la barra. En este control podr� controlarse mediante la entrada
+ * de datos por la caja de texto la posibilidad de introducir valores decimales.
+ *
+ * Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class SliderTextContainer extends JPanel implements ChangeListener, FocusListener, KeyListener, MouseListener {
+	private static final long serialVersionUID = 1876415954410511634L;
+	private ArrayList<SliderListener> actionCommandListeners = new ArrayList<SliderListener>();
+	private JPanel     pText           = null;
+	private JSlider    slider          = null;
+	private JTextField text            = null;
+	private int        min             = 0;
+	private int        max             = 255;
+	private double     interval        = 1.0;
+	private int        defaultPos      = 0;
+	private boolean    decimal         = false;
+	private boolean    disconnectEvent = false;
+	private boolean    dragged         = false;
+	private boolean    showBorder      = false;
+
+	/**
+	 * Contructor
+	 * @param min Valor m�nimo de la barra
+	 * @param max Valor m�ximo de la barra
+	 * @param defaultPos Posici�n por defecto
+	 * @deprecated Es recomendable el uso del constructor con el par�metro border. Tiene la misma funcionalidad 
+	 * si se pone ese par�metro a true. Se mantiene este constructor por compatibilidad con versiones 
+	 * anteriores.
+	 */
+	public SliderTextContainer(int min, int max, int defaultPos) {
+		this(min, max, defaultPos, false);
+	}
+	
+	/**
+	 * Contructor
+	 * @param min Valor m�nimo de la barra
+	 * @param max Valor m�ximo de la barra
+	 * @param defaultPos Posici�n por defecto
+	 * @param border Flag que obliga a mostrar u ocultar el borde
+	 */
+	public SliderTextContainer(int min, int max, int defaultPos, boolean border) {
+		super();
+		this.min = min;
+		this.max = max;
+		this.defaultPos = defaultPos;
+		this.showBorder = border;
+		initialize();
+	}
+
+
+	/**
+	 * Constructor vacio
+	 */
+	public SliderTextContainer() {
+		this(0, 100, 0);
+	}
+
+	/**
+	 * Dispara el evento del cambio del control
+	 */
+	protected void callChangeValue(boolean forceEvent) {
+		if (!getSlider().isEnabled() && !forceEvent)
+			return;
+		Iterator<SliderListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			SliderListener listener = (SliderListener) acIterator.next();
+			listener.actionValueChanged(new SliderEvent(this));
+		}
+	}
+
+	/**
+	 * Dispara el evento del cambio del control
+	 */
+	protected void callDraggedValue() {
+		Iterator<SliderListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			SliderListener listener = (SliderListener) acIterator.next();
+			listener.actionValueDragged(new SliderEvent(this));
+		}
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(SliderListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(SliderListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	/**
+	 * Asigna un borde al componente con el texto pasado como
+	 * par�metro
+	 * @param name
+	 */
+	public void setBorder(String name){
+		setBorder(BorderFactory.createTitledBorder(null, name, TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.add(getSlider(), BorderLayout.CENTER);
+		this.add(getPText(), BorderLayout.EAST);
+		if(showBorder)
+			this.setBorder(BorderFactory.createLineBorder(java.awt.Color.gray,1));
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPText() {
+		if (pText == null) {
+			pText = new JPanel();
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(0, 10, 8, 0);
+			pText.setLayout(new GridBagLayout());
+			pText.add(getTextField(), gridBagConstraints1);
+		}
+		return pText;
+	}
+
+	/**
+	 * This method initializes jSlider
+	 *
+	 * @return javax.swing.JSlider
+	 */
+	public JSlider getSlider() {
+		if (slider == null) {
+			slider = new JSlider();
+			slider.setMinimum(0);
+			slider.setMaximum((int) ((max - min) / interval));
+			slider.setValue((int) ((defaultPos - min) / interval));
+			updateTicks();
+			slider.addChangeListener(this);
+			slider.addMouseListener(this);
+		}
+		return slider;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	public JTextField getTextField() {
+		if (text == null) {
+			text = new JTextField();
+			text.setText(defaultPos + "");
+			text.setPreferredSize(new Dimension(40, 26));
+			text.setMinimumSize(new Dimension(40, 26));
+			text.addFocusListener(this);
+			text.addKeyListener(this);
+		}
+		return text;
+	}
+
+	public void setComponentSize(int w, int h){
+	}
+
+	/**
+	 * Obtiene el valor del control.
+	 * @return Valor del control en formato double.
+	 */
+	public double getValue() {
+		return new Double(getTextField().getText()).doubleValue();
+	}
+
+	/**
+	 * Asigna el valor del control.
+	 * @return Valor del control en formato double.
+	 */
+	public void setValue(double value){
+		if(decimal)
+			getTextField().setText(String.valueOf(value));
+		else
+			getTextField().setText(String.valueOf((int)value));
+		getSlider().setValue((int) ((value - min) / interval));
+	}
+
+	/**
+	 * Activa o desactiva el control del panel
+	 * @param active
+	 */
+	public void setControlEnabled(boolean active){
+		getSlider().setEnabled(active);
+		getTextField().setEnabled(active);
+		if (active == false) {
+			getTextField().setBackground(pText.getBackground());
+		} else {
+			getTextField().setBackground(java.awt.Color.white);
+		}
+	}
+
+	/**
+	 * Asigna el flag que dice si el valor del campo de texto ser�
+	 * decimal o entero
+	 * @param dec true si se admiten valores decimales y false si no se admiten
+	 */
+	public void setDecimal (boolean dec){
+		decimal = dec;
+		String s = getTextField().getText();
+		if(dec)
+			getTextField().setText((s +".0"));
+		else{
+			int index = s.lastIndexOf(".");
+			if(index == -1 || index == 0)
+				index = s.length() - 1;
+			getTextField().setText(s.substring(0, index + 1));
+		}
+	}
+
+	/**
+	 * Obtiene el flag que dice si el valor del campo de texto es
+	 * decimal o entero
+	 * @return true si se admiten valores decimales y false si no se admiten
+	 */
+	public boolean getDecimal (){
+		return decimal;
+	}
+
+	/**
+	 * Obtiene el valor m�ximo del slider
+	 * @return Entero con el valor m�ximo
+	 */
+	public int getMax() {
+		return max;
+	}
+
+	/**
+	 * Asigna el valor m�ximo del slider
+	 * @param Entero con el valor m�ximo
+	 * @deprecated Usar setMaximum en su lugar
+	 */
+	public void setMax(int max) {
+		this.setMaximum(max);
+	}
+
+	/**
+	 * Asigna el valor m�ximo del slider
+	 * @param Entero con el valor m�ximo
+	 */
+	public void setMaximum(int max) {
+		this.max = max;
+		updateInterval();
+	}
+
+	/**
+	 * Obtiene el valor m�nimo del slider
+	 * @return Entero con el valor m�nimo
+	 */
+	public int getMin() {
+		return min;
+	}
+
+	/**
+	 * Asigna el valor m�nimo del slider
+	 * @param Entero con el valor m�nimo
+	 * @deprecated Usar setMinimum
+	 */
+	public void setMin(int min) {
+		this.setMinimum(min);
+	}
+
+	/**
+	 * Asigna el valor m�nimo del slider
+	 * @param Entero con el valor m�nimo
+	 */
+	public void setMinimum(int min) {
+		this.min = min;
+		updateInterval();
+	}
+
+	/**
+	 * Actualizar la separacion entre los Ticks
+	 */
+	private void updateTicks() {
+		int ticks = (int) ((max-min)/interval) / 40;
+		getSlider().setMajorTickSpacing(ticks * 4);
+		slider.setPaintTicks(true);
+		getSlider().setMinorTickSpacing(ticks);
+	}
+
+	private void updateInterval() {
+		double aux = this.getValue();
+		getSlider().setMinimum(0);
+		getSlider().setMaximum((int) ((max - min) / interval));
+		setValue(aux);
+		updateTicks();
+	}
+	/**
+	 * Definir un intervalo para el slider
+	 * @param value
+	 */
+	public void setInterval(double value) {
+		interval = value;
+		updateInterval();
+	}
+
+	/**
+	 * Obtener el intervalo definido para el slider
+	 * @return
+	 */
+	public double getInterval() {
+		return interval;
+	}
+
+	/**
+	 * Controla que si el formato introducido en el textfield es numerico. Si lo
+	 * es se actualiza la posici�n del slider
+	 */
+	private void checkDecimalTextAndUpdateSlider() {
+		String text = getTextField().getText();
+		double value = 0;
+		disconnectEvent = true;
+
+		try {
+			if (!text.equals("")) {
+				value = (Double.parseDouble(text) * 100) / (double) (getMax() - getMin());
+				value = Double.valueOf(text).doubleValue();
+				if (value < getMin())
+					value = getMin();
+				if (value > getMax())
+					value = getMax();
+			}
+			setValue(value);
+			callChangeValue(true);
+		} catch (NumberFormatException exc) {
+			setValue(getSlider().getValue()*interval + min);
+		}
+	}
+
+	/**
+	 * Control del evento de cambio en la posici�n del slider. Este cambio
+	 * actualiza el valor de la caja de texto y ejecuta el m�todo stateChanged de
+	 * los listener registrados.
+	 */
+	public void stateChanged(ChangeEvent e) {
+		//Modificamos la caja de texto con el valor de la posici�n del slider
+		if (!disconnectEvent) {
+			double value = (getSlider().getValue() * getInterval()) + getMin();
+			if (!getDecimal())
+				getTextField().setText(((int) value) + "");
+			else
+				getTextField().setText(((int) (value * 10)) / 10.0 + "");
+			if (dragged)
+				callDraggedValue();
+			else
+				callChangeValue(true);
+		}
+		disconnectEvent = false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
+	 */
+	public void focusLost(FocusEvent e) {
+		checkDecimalTextAndUpdateSlider();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
+	 */
+	public void keyReleased(KeyEvent e) {
+		if (e.getKeyCode() == 10)
+			checkDecimalTextAndUpdateSlider();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		dragged = true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) {
+		dragged = false;
+		callChangeValue(false);
+	}
+
+	public void focusGained(FocusEvent e) {}
+	public void keyPressed(KeyEvent e) {}
+	public void keyTyped(KeyEvent e) {}
+	public void mouseClicked(MouseEvent e) {}
+	public void mouseEntered(MouseEvent e) {}
+	public void mouseExited(MouseEvent e) {}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/slidertext/SliderTextContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarCDatePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarCDatePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarCDatePanel.java	(revision 42196)
@@ -0,0 +1,224 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+import javax.swing.JPanel;
+import javax.swing.JToolTip;
+
+import org.freixas.jcalendar.JCalendarCombo;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.controls.MultiLineToolTip;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Creates a Panel for include in other panels -> this panel allows users to set the date they want
+ * The difference from this class to the JCalendarDatePanel is that in this class the user can move
+ *    the calendar with the mouse
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JCalendarCDatePanel extends JPanel implements IMethodsForGraphicalCalendarComponents, java.io.Serializable {
+	private static final long serialVersionUID = -1698696825218186886L;
+
+	private final int defaultWidth = 120;
+	private final int defaultHeight = 19;
+	private JCalendarCombo calendar = null;
+	
+	/**
+	 * This is the default constructor: creates the panel with a JCalendar object
+	 */
+	public JCalendarCDatePanel() {
+			
+		try
+		{
+			// Set properties to the current panel
+			this.setPreferredSize(new Dimension(defaultWidth, defaultHeight));
+			this.setLayout(new BorderLayout());
+			
+		    // Adds the JCalendar to the current panel
+		    this.add(this.getJCalendarCombo());
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * This is the default constructor with 2 parameters: creates the panel with a JCalendar object
+	 */
+	public JCalendarCDatePanel(int width, int height) {
+			
+		try {
+			
+			// Set properties to the current panel
+			this.setPreferredSize(new Dimension(width, height));
+			this.setLayout(new BorderLayout());			
+		    
+		    // Adds the JCalendar to the current panel
+		    this.add(this.getJCalendarCombo());
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Returns a reference to the JCalendarCombo private attribute
+	 * 
+	 * @return A reference to the calendar
+	 */
+	private JCalendarCombo getJCalendarCombo() {
+		if (this.calendar == null) {
+			// Create a JCalendar
+			calendar = new JCalendarCombo(Calendar.getInstance(), Locale.getDefault(), JCalendarCombo.DISPLAY_DATE, true);
+			calendar.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
+		    calendar.setEditable(false);		    
+		    calendar.setBackground(Color.WHITE);
+		    calendar.setToolTipText(Messages.getText("calendarSelectDate"));
+		    calendar.setToolTipTextToMonthDecrButton(Messages.getText("calendarBackOneMonth"));
+		    calendar.setToolTipTextToMonthIncrButton(Messages.getText("calendarForwardOneMonth"));
+		    calendar.setToolTipTextToYearDecrButton(Messages.getText("calendarBackOneYear"));
+		    calendar.setToolTipTextToYearIncrButton(Messages.getText("calendarForwardOneYear"));
+		}
+		
+		return this.calendar;
+	}
+	
+	/**
+	 * Sets the size of the CalendarDatePanel for resize the JCalendarCommbo and this panel
+	 * 
+	 * @param width (the new Width for the panel)
+	 * @param height (the new Height for the panel)
+	 */
+	public void setPreferredSizeResize(int width, int height)
+	{
+		this.setPreferredSize(new Dimension(width, height));
+		calendar.setPreferredSize(new Dimension(width, height));		   
+		calendar.setSize(new Dimension(width, height));
+		this.revalidate();
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#setDate(java.util.Date)
+	 */
+	public void setDate(Date date)
+	{
+		calendar.setDate(date);
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#getDate()
+	 */
+	public Date getDate()
+	{
+		return calendar.getDate();
+	}
+	
+	/**
+	 * Allows select the date
+	 */
+	public void enableCalendar()
+	{
+		calendar.setEnabled(true);
+	}
+	
+	/**
+	 * Don't allow select the date
+	 */
+	public void disableCalendar()
+	{
+		calendar.setEnabled(false);
+	}	
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#getFormattedDate()
+	 */
+	public String getFormattedDate() {
+		return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(this.getDate());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#createToolTip()
+	 */
+    public JToolTip createToolTip() {
+    	// Multiline support
+    	MultiLineToolTip tip = new MultiLineToolTip();
+    	tip.setComponent(this);
+    	return tip;
+    }	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarCDatePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/IMethodsForGraphicalCalendarComponents.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/IMethodsForGraphicalCalendarComponents.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/IMethodsForGraphicalCalendarComponents.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar;
+
+import java.util.Date;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This interface defines some methods for grafical components that use a JCalendar
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public interface IMethodsForGraphicalCalendarComponents {
+	/**
+	 * Gets the date of the calendar 
+	 * 
+	 * @return Date
+	 */
+	public Date getDate();
+	
+	/**
+	 * Sets the date to the calendar
+	 * 
+	 * @param date
+	 */
+	public void setDate(Date date);
+	
+	/**
+	 * Returns the date selected, formatted
+	 * 
+	 * @return String The formatted date
+	 */
+	public String getFormattedDate();
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/IMethodsForGraphicalCalendarComponents.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDateDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDateDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDateDialog.java	(revision 42196)
@@ -0,0 +1,445 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import javax.swing.JDialog;
+
+import org.freixas.jcalendar.DateEvent;
+import org.freixas.jcalendar.DateListener;
+import org.freixas.jcalendar.JCalendar;
+import org.gvsig.gui.beans.Messages;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Creates a Dialog that allows users to select the date they want
+ * This class is a version of JCalendarDatePanel
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JCalendarDateDialog extends JDialog implements IMethodsForGraphicalCalendarComponents, Serializable {
+	private static final long serialVersionUID = -4265734997797240482L;
+	private JCalendar jCalendar = null;
+	private final int defaultWidth = 350;
+	private final int defaultHeight = 230;
+	private Dimension lastDimensionOfJDialog;
+	private Dimension minDimensionOfJDialog;
+	private Dimension maxDimensionOfJDialog;
+
+	/**
+	 * Default Constructor
+	 */
+	public JCalendarDateDialog() {
+		super();
+		
+		this.initialize();
+	}
+
+	/**
+	 * This is the default constructor with 2 parameters for set the size
+	 */
+	public JCalendarDateDialog(int width, int height) {
+		super();
+
+		this.initialize();			
+			
+		this.lastDimensionOfJDialog.width = width;
+		this.lastDimensionOfJDialog.height = height;
+	}
+	
+	/**
+	 * This method initializes this 
+	 */
+	private void initialize() {
+		this.setDefaultTitle();
+				
+		// Initialize the attribute 'lastDimensionOfJCalendar'
+		this.lastDimensionOfJDialog = new Dimension(this.defaultWidth, this.defaultHeight);
+		
+		// Resize this component to its initial size
+		this.setSizeResize(defaultWidth, defaultHeight);
+		
+		// Adds the jCalendar to this dialog
+		this.getContentPane().add(this.getJCalendar());
+
+		// By default there isn't maximun neither minimum dimensions
+		this.maxDimensionOfJDialog = new Dimension(-1, -1);
+		this.minDimensionOfJDialog = new Dimension(-1, -1);		
+		
+		// This allows authomatic revalidation while this component is been resized
+		Toolkit.getDefaultToolkit().setDynamicLayout(true);
+
+		// Listener for the redimension of this component:
+		// Dimension must be between the minimum and maximum
+		this.addComponentListener(new ComponentAdapter() {
+			/*
+			 *  (non-Javadoc)
+			 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
+			 */
+			public void componentResized(ComponentEvent e) {
+				boolean modified = false;
+				int width = getSize().width;
+				int height = getSize().height;
+				int new_width = 0;
+				int new_height = 0;
+				
+				// If there are a minimum dimension or a maximum dimension, check the current
+				//   dimension and resize if it's nessecary
+
+				// If this component hasn't been initialed yet
+				if ((height != 0) && (width != 0)) {
+					if (minDimensionOfJDialog.height != -1) {
+						if (height < minDimensionOfJDialog.height) {
+							new_width = width;
+							new_height = minDimensionOfJDialog.height;
+							modified = true;
+						}
+					}
+					
+					if (minDimensionOfJDialog.width != -1) {
+						if (width < minDimensionOfJDialog.width) {
+							new_width = minDimensionOfJDialog.width;
+							new_height = height;
+							modified = true;
+						}
+					}
+	
+					if (maxDimensionOfJDialog.height != -1) {
+						if (height > maxDimensionOfJDialog.height) {
+							new_width = width;
+							new_height = maxDimensionOfJDialog.height;
+							modified = true;
+						}
+					}
+	
+					if (maxDimensionOfJDialog.width != -1) {
+						if (width > maxDimensionOfJDialog.width) {
+							new_width = maxDimensionOfJDialog.width;
+							new_height = height;
+							modified = true;
+						}
+					}
+					
+					if (modified) {
+						setResizable(false);
+						setSize(new_width, new_height);
+						setResizable(true);
+						getJCalendar().revalidate();
+					}
+					
+					lastDimensionOfJDialog = getSize();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Sets the initial size of this panel
+	 * 
+	 * @param width (the new Width for the panel)
+	 * @param height (the new Height for the panel)
+	 */
+	public void resizeToInitialSize()
+	{
+		getContentPane().setSize(this.defaultWidth, this.defaultHeight);
+		getJCalendar().revalidate();
+	}
+
+	/**
+	 * Sets the maximum width for this component, according a percentage of the width resolution of the screen
+	 * (If the parameter isn't > 0.0 neither -1.0 neither <= 1.0, this method doesn't apply the changes)
+	 * 
+	 * @param max_width_screen_percentage A float number > 0, or -1 if there is no limit
+	 */
+	public void setMaximumWidthScreenResolutionPercentage(double max_width_screen_percentage) {
+		int max_width = (int) Math.ceil(Toolkit.getDefaultToolkit().getScreenSize().width * max_width_screen_percentage);
+		
+		if ((max_width > 0) || (max_width == -1)) {
+			this.maxDimensionOfJDialog.width = max_width;
+		}
+	}
+	
+	/**
+	 * Sets the minimum width for this component, according a percentage of the width resolution of the screen
+	 * (If the parameter isn't > 0.0 neither -1.0 neither <= 1.0, this method doesn't apply the changes)
+	 * 
+	 * @param min_width_screen_percentage A float number > 0.0 neither -1.0 neither <= 1.0, or -1 if there is no limit
+	 */
+	public void setMinimumWidthScreenResolutionPercentage(double min_width_screen_percentage) {
+		int min_width = (int) Math.ceil(Toolkit.getDefaultToolkit().getScreenSize().width * min_width_screen_percentage);
+		
+		if ((min_width > 0) || (min_width == -1))
+			this.minDimensionOfJDialog.width = min_width;
+	}
+
+	/**
+	 * Sets the maximum height for this component, according a percentage of the height resolution of the screen
+	 * (If the parameter isn't > 0.0 neither -1.0 neither <= 1.0, this method doesn't apply the changes)
+	 * 
+	 * @param max_width_screen_percentage A float number > 0.0 neither -1.0 neither <= 1.0, or -1 if there is no limit
+	 */
+	public void setMaximumHeightScreenResolutionPercentage(double max_height_screen_percentage) {
+		if (((max_height_screen_percentage > 0.0) && (max_height_screen_percentage <= 1.0)) || (max_height_screen_percentage == -1.0)) {
+			int max_height = (int) Math.ceil(Toolkit.getDefaultToolkit().getScreenSize().height * max_height_screen_percentage);
+			this.maxDimensionOfJDialog.height = max_height;
+		}
+	}
+	
+	/**
+	 * Sets the minimum height for this component, according a percentage of the height resolution of the screen
+	 * (If the parameter isn't > 0.0 neither -1.0 neither <= 1.0, this method doesn't apply the changes)
+	 * 
+	 * @param min_width_screen_percentage A float number > 0.0 neither -1.0 neither <= 1.0, or -1 if there is no limit
+	 */
+	public void setMinimumHeightScreenResolutionPercentage(double min_height_screen_percentage) {
+		if (((min_height_screen_percentage > 0.0) && (min_height_screen_percentage <= 1.0)) || (min_height_screen_percentage == -1.0)) {
+			int min_height = (int) Math.ceil(Toolkit.getDefaultToolkit().getScreenSize().height * min_height_screen_percentage);
+			this.minDimensionOfJDialog.height = min_height;
+		}
+	}
+	
+	/**
+	 * Sets the maximum width for this component
+	 * (If the parameter isn't > 0 neither -1, this method doesn't apply the changes)
+	 * 
+	 * @param max_width A natural number > 0, or -1 if there is no limit
+	 */
+	public void setMaximumWidth(int max_width) {
+		if ((max_width > 0) || (max_width == -1)) {
+			this.maxDimensionOfJDialog.width = max_width;
+		}
+	}
+	
+	/**
+	 * Sets the minimum width for this component
+	 *  (If the parameter isn't > 0 neither -1, this method doesn't apply the changes)
+	 * 
+	 * @param min_width A natural number > 0, or -1 if there is no limit
+	 */
+	public void setMinimumWidth(int min_width) {
+		if ((min_width > 0) || (min_width == -1))
+			this.minDimensionOfJDialog.width = min_width;
+	}
+
+	/**
+	 * Sets the maximum height for this component
+	 * (If the parameter isn't > 0 neither -1, this method doesn't apply the changes)
+	 * 
+	 * @param max_width A natural number > 0, or -1 if there is no limit
+	 */
+	public void setMaximumHeight(int max_height) {
+		if ((max_height > 0) || (max_height == -1))
+			this.maxDimensionOfJDialog.height = max_height;
+	}
+	
+	/**
+	 * Sets the minimum height for this component
+	 *  (If the parameter isn't > 0 neither -1, this method doesn't apply the changes)
+	 * 
+	 * @param min_width A natural number > 0, or -1 if there is no limit
+	 */
+	public void setMinimumHeight(int min_height) {
+		if ((min_height > 0) || (min_height == -1))
+			this.minDimensionOfJDialog.height = min_height;
+	}
+
+	/**
+	 * Sets the size of this panel
+	 * 
+	 * @param width (the new Width for the panel)
+	 * @param height (the new Height for the panel)
+	 */
+	public void setSizeResize(int width, int height) {
+		this.setSize(new Dimension(width, height));
+		this.lastDimensionOfJDialog = this.getSize();
+		getJCalendar().revalidate();
+	}
+	
+	/**
+	 * Get the height of this panel
+	 */
+	public int getHeight()
+	{
+		return this.lastDimensionOfJDialog.height;
+	}
+	
+	/**
+	 * Get the width of this panel
+	 */
+	public int getWidth()
+	{
+		return this.lastDimensionOfJDialog.width;
+	}
+	
+	/**
+	 * This method initializes jCalendar	
+	 * 	
+	 * @return javax.swing.JCalendar	
+	 */
+	private JCalendar getJCalendar() {
+		if (jCalendar == null) {
+			jCalendar = new JCalendar();
+			jCalendar.setToolTipText(Messages.getText("calendarSelectDate"));
+
+			try
+			{
+				jCalendar.setToolTipTextToMonthDecrButton(Messages.getText("calendarBackOneMonth"));
+				jCalendar.setToolTipTextToMonthIncrButton(Messages.getText("calendarForwardOneMonth"));
+				jCalendar.setToolTipTextToYearDecrButton(Messages.getText("calendarBackOneYear"));
+				jCalendar.setToolTipTextToYearIncrButton(Messages.getText("calendarForwardOneYear"));
+
+				// Adds a date listener calendar
+				jCalendar.addDateListener(new DateListener(){
+					/*
+					 *  (non-Javadoc)
+					 * @see org.freixas.jcalendar.DateListener#dateChanged(org.freixas.jcalendar.DateEvent)
+					 */
+					public void dateChanged(DateEvent arg0) {
+						setVisible(false);
+					}				
+				});
+			}
+			catch(Exception e)
+			{
+				e.printStackTrace();
+			}
+		}
+		return jCalendar;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#getDate()
+	 */	
+	public Date getDate() {		
+		return jCalendar.getDate();
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#setDate(java.util.Date)
+	 */
+	public void setDate(Date date)
+	{
+		jCalendar.setDate(date);
+	}
+
+//	/**
+//	 * Returns the date formatted
+//	 * 
+//	 * @param Date
+//	 * @return String The formatted date
+//	 */
+//	private String getFormattedDate(Date d) {
+//		return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(d);
+//	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#getFormattedDate()
+	 */
+	public String getFormattedDate() {
+		return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(this.getDate());
+	}
+
+	/**
+	 * Gets the title of the JDialog with the calendar component. The title is displayed in the JDialog's border.
+	 *
+	 * @return Title
+	 */
+	public String getTitle() {
+		return super.getTitle();
+	}
+	
+	/**
+	 * Sets the title of the JDialog with the calendar component. 
+	 * 
+	 * @param String
+	 */
+	public void setTitle(String title) {
+		super.setTitle(title);
+	}
+
+	/**
+	 * Sets the default title of the JDialog with the calendar component.
+	 */
+	public void setDefaultTitle() {
+		this.setTitle(Messages.getText("calendarTitle"));
+	}
+	
+	/**
+	 * @see java.awt.Dialog#setModal(boolean)
+	 */
+	public void setModal(boolean b) {
+		super.setModal(b);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDateDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDatePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDatePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDatePanel.java	(revision 42196)
@@ -0,0 +1,312 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.textBoxWithCalendar;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JToolTip;
+import javax.swing.SwingConstants;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.controls.MultiLineToolTip;
+
+/**
+ * Creates a Panel for include in other panels -> this panel allows users to set the date they want
+ * The difference from this class to the JCalendarDatePanel is that in this class the user can move
+ *    the calendar with the mouse
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JCalendarDatePanel extends JPanel implements IMethodsForGraphicalCalendarComponents, Serializable{
+	private static final long serialVersionUID = -5439270916098423256L;
+
+	private JButton jButton = null;
+	private JCalendarDateDialog jDialogCalendar = null;
+	private final int defaultWidth = 120;
+	private final int defaultHeight = 19;
+	private MouseListener mouseListener;	
+
+	/**
+	 * Default Constructor
+	 */
+	public JCalendarDatePanel() {
+	
+		try
+		{
+			this.setPreferredSize(new Dimension(defaultWidth, defaultHeight));
+			initialize();			
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * This is the default constructor with 2 parameters for set the size of the inner button
+	 */
+	public JCalendarDatePanel(int width, int height) {
+			
+		try
+		{			
+			this.setPreferredSize(new Dimension(defaultWidth, defaultHeight));
+			initialize();			
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * This method initializes this 
+	 */
+	private void initialize() {
+		// Set properties to the current panel
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.gridx = 1;
+		gridBagConstraints1.gridy = 0;		
+		
+		GridBagLayout gridBagLayout = new GridBagLayout();
+		this.setLayout(gridBagLayout);
+		
+		// Add components to this panel:
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.gridx = 0;
+
+		// Add the JButton
+		this.add(getJButton(), gridBagConstraints1);
+		
+		// Defines the mouseLIstener
+		this.createMouseListener();
+		
+		// Adds the mouseListener to the jTextField and the jButton
+		jButton.addMouseListener(mouseListener);
+	}
+
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setPreferredSize(new Dimension(defaultWidth, defaultHeight));
+			jButton.setHorizontalTextPosition(SwingConstants.LEFT);
+			jButton.setBackground(Color.WHITE);
+			jButton.setText(this.getFormattedDate(this.getJCalendarDateDialog().getDate()));
+		}
+		return jButton;
+	}
+	
+	/**
+	 * This method initializes jDialogCalendar	
+	 * 	
+	 * @return javax.swing.JDialog	
+	 */
+	public JCalendarDateDialog getJCalendarDateDialog() {
+		if (jDialogCalendar == null) {
+			jDialogCalendar = new JCalendarDateDialog();
+			jDialogCalendar.addComponentListener(new ComponentAdapter() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent)
+				 */
+				public void componentHidden(ComponentEvent e) {
+					jButton.setText(getFormattedDate(jDialogCalendar.getDate()));
+				}
+			});
+		}
+		return jDialogCalendar;
+	}
+	
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#getDate()
+	 */
+	public Date getDate() {		
+		return this.getJCalendarDateDialog().getDate();
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#setDate(java.util.Date)
+	 */
+	public void setDate(Date date)
+	{
+		this.getJCalendarDateDialog().setDate(date);
+	}
+	
+	/**
+	 * Allows select the date
+	 */
+	public void enableCalendar() {
+		jButton.setEnabled(true);
+	}
+	
+	/**
+	 * Don't allow select the date
+	 */
+	public void disableCalendar() {
+		jButton.setEnabled(false);
+	}
+
+	/**
+	 * Returns the date formatted
+	 * 
+	 * @param Date
+	 * @return String The formatted date
+	 */
+	private String getFormattedDate(Date d) {
+		return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(d);
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.swing.textBoxWithCalendar.IMethodsForGraphicalCalendarComponents#getFormattedDate()
+	 */
+	public String getFormattedDate() {
+		return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(this.getDate());
+	}
+	
+	/**
+	 * Gets the title of the JDialog with the calendar component. The title is displayed in the JDialog's border.
+	 * @return Title
+	 */
+	public String getTitle() {
+		return this.getJCalendarDateDialog().getTitle();
+	}
+		
+	/**
+	 * Sets the title of the JDialog with the calendar component. 
+	 * 
+	 * @param String
+	 */
+	public void setTitle(String title) {
+		this.getJCalendarDateDialog().setTitle(title);
+	}
+
+	/**
+	 * Sets the default title of the JDialog with the calendar component.
+	 */
+	public void setDefaultTitle() {
+		this.getJCalendarDateDialog().setTitle(Messages.getText("calendarTitle"));
+	}	
+	
+	/**
+	 * @see java.awt.Dialog#setModal(boolean)
+	 */
+	public void setModal(boolean b) {
+		this.getJCalendarDateDialog().setModal(b);
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.JComponent#setPreferredSize(java.awt.Dimension)
+	 */
+	public void setPreferredSize(Dimension d) {
+		super.setPreferredSize(d);
+		getJButton().setPreferredSize(d);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.awt.Component#setSize(int, int)
+	 */
+	public void setSize(int width, int height) {
+		super.setSize(width, height);
+		getJButton().setSize(width, height);		
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see java.awt.Component#setSize(java.awt.Dimension)
+	 */
+	public void setSize(Dimension d) {
+		super.setSize(d);
+		getJButton().setSize(d);		
+	}
+	
+	/**
+	 * Adds a component listener for the inner JDialog that cointins the calendar interface
+	 * 
+	 * @param componentListener
+	 */
+	public void addComponentListenerForJDialogCalendar(ComponentListener componentListener) {
+		getJCalendarDateDialog().addComponentListener(componentListener);
+	}	
+	
+	/**
+	 * This method creates a Mouse Listener object
+	 */
+	private void createMouseListener() {
+		
+		mouseListener = new MouseAdapter() {
+
+			/*
+			 *  (non-Javadoc)
+			 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+			 */
+			public void mouseClicked(MouseEvent e) {
+				// Show the JDialog
+				if (getJButton().isEnabled())
+				{
+					getJCalendarDateDialog().setLocationRelativeTo(jButton);
+					getJCalendarDateDialog().setVisible(true);
+				}				
+			}	
+		};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#createToolTip()
+	 */
+    public JToolTip createToolTip() {
+    	// Multiline support
+    	MultiLineToolTip tip = new MultiLineToolTip();
+    	tip.setComponent(this);
+    	return tip;
+    }	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/textBoxWithCalendar/JCalendarDatePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JButton.java	(revision 42196)
@@ -0,0 +1,160 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing;
+
+import java.awt.Dimension;
+
+import javax.swing.Icon;
+
+/**
+ * According to the gvSIG's GUI style sheet all the buttons in the application
+ * will have a normative size. No smaller than a concrete size, and big enough
+ * to contain the text and avoiding the "..." characters. The button will grow
+ * up in width by a set of widths defined in this style sheet, always choosing
+ * the smallest width that can contain the text. If the biggest width is not
+ * enought for this purpose then the button will automatically grow up to the
+ * smallest necessary width to fit the text.<br>
+ * <p>
+ * The button resizing is based on the <b>setText(String txt)</b> method.
+ * However, it is possible to use a custom size if you invoke one of
+ * <b>setSize(..)</b>, <b>setBorders(...)</b> or <b>setPreferredSize(...)</b>
+ * after invoking the <b>setText(...)<b> method.
+ * <p>
+ * This class is just a standard javax.swing.JButton that handles this issue.
+ * </p>
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * 
+ * @deprecated use the
+ *             org.gvsig.tools.swing.api.usability.UsabilitySwingManager.
+ *             createJButton() methods instead. You can get the instance of the
+ *             UsabilitySwingManager through the
+ *             org.gvsig.tools.swing.api.ToolsSwingLocator class.
+ * 
+ */
+public class JButton extends javax.swing.JButton {
+  private static final long serialVersionUID = -1635879317292710725L;
+
+	// TODO this should be initialized from a properties file or so.
+	private static int[][] buttonSizes = new int[][] {
+			new int[] { 90, 23},
+			new int[] {110, 23},
+			new int[] {135, 23},
+			new int[] {160, 23}
+	};
+
+	private String enableText;
+	private String toolTip;
+
+
+
+	/**
+	 * Creates a new empty instance of org.gvsig.gui.beans.swing.JButton.
+	 */
+	public JButton() {
+		super();
+	}
+
+	/**
+	 * Creates a new instance of org.gvsig.gui.beans.swing.JButton containing a text.
+	 * @param text
+	 */
+	public JButton(String text) {
+		super();
+		setText(text);
+	}
+
+	/**
+	 * Creates a new instance of org.gvsig.gui.beans.swing.JButton containing an image and
+	 * a text.
+	 * @param text
+	 * @param icon
+	 */
+	public JButton(String text, Icon icon) {
+		super(icon);
+		setText(text);
+	}
+
+	/**
+	 * Creates a new instance of org.gvsig.gui.beans.swing.JButton containing an image.
+	 */
+	public JButton(Icon icon) {
+		super(icon);
+	}
+
+
+	/**
+	 * Gets the text that appears in the tooltip when the button is disabled.
+	 * @return String
+	 */
+	public String getEnableText() {
+		return enableText;
+	}
+	/**
+	 * Sets the text that appears in the tooltip when the button is disabled.
+	 * @param enableText The enableText to set.
+	 */
+	public void setEnableText(String enableText) {
+		this.enableText = enableText;
+	}
+
+
+	public void setEnabled(boolean aFlag) {
+		super.setEnabled(aFlag);
+		if (aFlag){
+			setToolTipText(toolTip);
+		}else{
+			setToolTipText(enableText);
+		}
+	}
+
+	/**
+	 * Sets the text that appears in the tooltip when the button is enabled.
+	 */
+	public void setToolTip(String text) {
+		toolTip = text;
+	}
+
+	public void setText(String text) {
+		super.setText(text);
+		Dimension d = getUI().getMinimumSize(this);
+		int oldWidth = (int) d.getWidth(), newWidth = oldWidth;
+		int oldHeight = (int) d.getHeight(), newHeight = oldHeight;
+
+		// figure out the suitable width
+		for (int i = buttonSizes.length-1; i >= 0 ; i--)
+			if (oldWidth < buttonSizes[i][0])
+				newWidth = buttonSizes[i][0];
+
+		// figure out the suitable height
+		for (int i = buttonSizes.length-1; i >= 0 ; i--)
+			if (oldHeight < buttonSizes[i][1])
+				newHeight = buttonSizes[i][1];
+
+		Dimension sz = new Dimension(newWidth, newHeight);
+		super.setSize(sz);
+		super.setPreferredSize(sz);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFontSizes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFontSizes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFontSizes.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing;
+
+import java.awt.Dimension;
+import java.util.ArrayList;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class JComboBoxFontSizes extends JComboBox {
+  private static final long serialVersionUID = 3256519971028107511L;
+		private static ArrayList sizes;
+    private static float DEFAULT_FONT_SIZE = 10;
+    public JComboBoxFontSizes() {
+        super();
+        if (sizes == null) {
+            sizes = new ArrayList();
+            sizes.add(new Integer(5));
+            sizes.add(new Integer(6));
+            sizes.add(new Integer(7));
+            sizes.add(new Integer(8));
+            sizes.add(new Integer(9));
+            sizes.add(new Integer(10));
+            sizes.add(new Integer(11));
+            sizes.add(new Integer(12));
+            sizes.add(new Integer(13));
+            sizes.add(new Integer(14));
+            sizes.add(new Integer(16));
+            sizes.add(new Integer(18));
+            sizes.add(new Integer(20));
+            sizes.add(new Integer(22));
+            sizes.add(new Integer(24));
+            sizes.add(new Integer(28));
+            sizes.add(new Integer(36));
+            sizes.add(new Integer(48));
+            sizes.add(new Integer(72));
+        }
+
+        setModel(new DefaultComboBoxModel((Integer[]) sizes.toArray(new Integer[sizes.size()])));
+        setSelectedIndex(7);
+        setEditable(true);
+        setPreferredSize(new Dimension(50, 20));
+    }
+
+    public float getSelectedValue() {
+        Object v = getSelectedItem();
+        if (v instanceof Integer) {
+            return ((Integer) v).floatValue();
+        }
+        if (v instanceof String) {
+            try{
+                return Float.parseFloat((String) v);
+            } catch (Exception e) {
+                return DEFAULT_FONT_SIZE;
+            }
+        }
+        if (v instanceof Double || v instanceof Float) {
+            return ((Double) v).floatValue();
+        }
+        return DEFAULT_FONT_SIZE;
+    }
+
+    public void setSelectedItem(Object anObject) {
+    	 if (anObject instanceof Double || anObject instanceof Float) {
+              if (((Double) anObject).doubleValue() == 10) {
+            	  super.setSelectedItem(new Integer(10));
+            	  return;
+              }
+              super.setSelectedItem(anObject);
+         } else if (anObject instanceof String) {
+        	 setSelectedItem( new Double((String)anObject));
+         } else {
+        	 super.setSelectedItem(anObject);
+         }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFontSizes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellEditor.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+
+import java.awt.Component;
+
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: TreeTableCellEditor.java 13136 2007-08-20 08:38:34Z evercher $
+ * $Log$
+ * Revision 1.1  2007-08-20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class TreeTableCellEditor extends AbstractCellEditor implements TableCellEditor {
+	private TreeTable treeTable;
+	
+	public TreeTableCellEditor(TreeTable treeTable){
+		this.treeTable = treeTable;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
+	 */
+	public Component getTableCellEditorComponent(JTable table, Object value,
+			boolean isSelected, int r, int c) {
+		return treeTable.getTree();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellRenderer.java	(revision 42196)
@@ -0,0 +1,139 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+
+import java.awt.Component;
+import java.awt.Graphics;
+
+import javax.swing.JTable;
+import javax.swing.JTree;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.tree.TreeCellEditor;
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreeModel;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: TreeTableCellRenderer.java 13655 2007-09-12 16:28:55Z bsanchez $
+ * $Log$
+ * Revision 1.3  2007-09-12 16:28:23  bsanchez
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/08/21 09:47:17  bsanchez
+ * - Quitados warnings en imports innecesarios
+ *
+ * Revision 1.1  2007/08/20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.2  2006/10/25 14:45:52  jorpiell
+ * A�adidos los renderers al arbol
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class TreeTableCellRenderer extends JTree implements TableCellRenderer {
+  private static final long serialVersionUID = 1017457033135612066L;
+	private int visibleRow;
+	private TreeTable treeTable;
+	
+	public TreeTableCellRenderer(TreeModel model,TreeTable treetable) { 
+		super(model); 		
+		this.treeTable = treetable;
+	}
+	
+	public TreeTableCellRenderer(TreeModel model,TreeTable treetable,TreeCellRenderer cellRenderer,TreeCellEditor cellEditor){ 
+		super(model); 
+		this.setCellRenderer(cellRenderer);
+		this.setCellEditor(cellEditor);
+		this.treeTable = treetable;		    
+	}
+	
+	public void setBounds(int x, int y, int w, int h) {
+		super.setBounds(x, 0, w, treeTable.getHeight());
+	}
+	
+	public void paint(Graphics g) {
+		g.translate(0, -visibleRow * getRowHeight());
+		super.paint(g);
+	}
+	
+	public Component getTableCellRendererComponent(JTable table,
+			Object value,
+			boolean isSelected,
+			boolean hasFocus,
+			int row, int column) {
+		if(isSelected)
+			setBackground(table.getSelectionBackground());
+		else
+			setBackground(table.getBackground());
+		
+		visibleRow = row;
+		return this;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/MergeSort.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/MergeSort.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/MergeSort.java	(revision 42196)
@@ -0,0 +1,138 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: MergeSort.java 13136 2007-08-20 08:38:34Z evercher $
+ * $Log$
+ * Revision 1.1  2007-08-20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public abstract class MergeSort extends Object {
+    protected Object           toSort[];
+    protected Object           swapSpace[];
+
+    public void sort(Object array[]) {
+	if(array != null && array.length > 1)
+	{
+	    int             maxLength;
+  
+	    maxLength = array.length;
+	    swapSpace = new Object[maxLength];
+	    toSort = array;
+	    this.mergeSort(0, maxLength - 1);
+	    swapSpace = null;
+	    toSort = null;
+	}
+    }
+
+    public abstract int compareElementsAt(int beginLoc, int endLoc);
+
+    protected void mergeSort(int begin, int end) {
+	if(begin != end)
+	{
+	    int           mid;
+
+	    mid = (begin + end) / 2;
+	    this.mergeSort(begin, mid);
+	    this.mergeSort(mid + 1, end);
+	    this.merge(begin, mid, end);
+	}
+    }
+
+    protected void merge(int begin, int middle, int end) {
+	int           firstHalf, secondHalf, count;
+
+	firstHalf = count = begin;
+	secondHalf = middle + 1;
+	while((firstHalf <= middle) && (secondHalf <= end))
+	{
+	    if(this.compareElementsAt(secondHalf, firstHalf) < 0)
+		swapSpace[count++] = toSort[secondHalf++];
+	    else
+		swapSpace[count++] = toSort[firstHalf++];
+	}
+	if(firstHalf <= middle)
+	{
+	    while(firstHalf <= middle)
+		swapSpace[count++] = toSort[firstHalf++];
+	}
+	else
+	{
+	    while(secondHalf <= end)
+		swapSpace[count++] = toSort[secondHalf++];
+	}
+	for(count = begin;count <= end;count++)
+	    toSort[count] = swapSpace[count];
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/MergeSort.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTable.java	(revision 42196)
@@ -0,0 +1,246 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.Icon;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeSelectionModel;
+import javax.swing.tree.TreeCellEditor;
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreeModel;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: TreeTable.java 13655 2007-09-12 16:28:55Z bsanchez $
+ * $Log$
+ * Revision 1.2  2007-09-12 16:28:23  bsanchez
+ * *** empty log message ***
+ *
+ * Revision 1.1  2007/08/20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.4  2007/01/17 17:18:29  jorpiell
+ * A�adido un m�todo para expandir todo el �rbol
+ *
+ * Revision 1.3  2006/10/25 14:45:52  jorpiell
+ * A�adidos los renderers al arbol
+ *
+ * Revision 1.2  2006/10/23 11:13:55  jorpiell
+ * A�adida la posibilidad de recargar el �rbol tantas veces como queramos
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * To create a new tree table it is necessary to create a new
+ * treetablemodel. See the ExampleModel.java.
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+
+public class TreeTable extends JTable {
+  private static final long serialVersionUID = 6630322246955414756L;
+	protected TreeTableCellRenderer tree;
+		
+	public TreeTable(TreeTableModel treeTableModel) {
+		super();
+	    setModel(treeTableModel);  
+	}
+	
+	public TreeTable(TreeTableModel treeTableModel,TreeCellRenderer cellRenderer,TreeCellEditor cellEditor) {
+		super();
+	    setModel(treeTableModel,cellRenderer,cellEditor);  
+	}
+	
+	public void setModel(TreeTableModel treeTableModel,TreeCellRenderer cellRenderer,TreeCellEditor cellEditor){
+		tree = new TreeTableCellRenderer(treeTableModel,this,cellRenderer,cellEditor);
+		super.setModel(new TreeTableModelAdapter(treeTableModel, tree));
+		setModel();
+	}
+	
+	public void setModel(TreeTableModel treeTableModel){
+		tree = new TreeTableCellRenderer(treeTableModel,this); 
+		super.setModel(new TreeTableModelAdapter(treeTableModel, tree));
+		setModel();
+	}
+	
+	private void setModel(){
+		// Force the JTable and JTree to share their row selection models. 
+		tree.setSelectionModel(new DefaultTreeSelectionModel() { 
+      	private static final long serialVersionUID = 2719965083562067462L;
+			// Extend the implementation of the constructor, as if: 
+			/* public this() */ {
+				setSelectionModel(listSelectionModel); 
+			} 
+		}); 
+		// Make the tree and table row heights the same. 
+		tree.setRowHeight(getRowHeight());
+		
+		// Install the tree editor renderer and editor. 
+		setDefaultRenderer(TreeTableModel.class, tree); 
+		setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());  
+		
+		setShowGrid(false);
+		setIntercellSpacing(new Dimension(0, 0)); 
+	}
+	
+	/* Workaround for BasicTableUI anomaly. Make sure the UI never tries to 
+	 * paint the editor. The UI currently uses different techniques to 
+	 * paint the renderers and editors and overriding setBounds() below 
+	 * is not the right thing to do for an editor. Returning -1 for the 
+	 * editing row in this case, ensures the editor is never painted. 
+	 */
+	public int getEditingRow() {
+		return (getColumnClass(editingColumn) == TreeTableModel.class) ? -1 : editingRow;  
+	}
+
+	
+	public class TreeTableCellEditor extends AbstractCellEditor implements TableCellEditor {
+		public Component getTableCellEditorComponent(JTable table, Object value,
+				boolean isSelected, int r, int c) {
+			return tree;
+		}
+	}
+	
+	/**
+	 * Deletes all the tree icons
+	 *
+	 */
+	public void deleteIcons(){
+		setLeafIcon(null);
+	    setClosedIcon(null);
+	    setOpenIcon(null);
+	}
+	
+	/**
+	 * Sets the root visible
+	 */
+	public void setRootVisible(boolean rootVisible){
+		tree.setRootVisible(rootVisible);
+	}
+	
+	/**
+	 * Sets the leaftIcon
+	 * @param newIcon
+	 */
+	public void setLeafIcon(Icon newIcon){
+		TreeTableCellRenderer renderer = (TreeTableCellRenderer)getTree();
+		DefaultTreeCellRenderer treeRenderer = (DefaultTreeCellRenderer)renderer.getCellRenderer();
+		treeRenderer.setLeafIcon(newIcon);
+	}
+	
+	/**
+	 * Sets the open icon
+	 * @param newIcon
+	 */
+	public void setOpenIcon(Icon newIcon){
+		TreeTableCellRenderer renderer = (TreeTableCellRenderer)getTree();
+		DefaultTreeCellRenderer treeRenderer = (DefaultTreeCellRenderer)renderer.getCellRenderer();
+		treeRenderer.setOpenIcon(newIcon);
+	}
+	
+	/**
+	 * Sets the close icon
+	 * @param newIcon
+	 */
+	public void setClosedIcon(Icon newIcon){
+		TreeTableCellRenderer renderer = (TreeTableCellRenderer)getTree();
+		DefaultTreeCellRenderer treeRenderer = (DefaultTreeCellRenderer)renderer.getCellRenderer();
+		treeRenderer.setClosedIcon(newIcon);
+	}
+
+	public Component getTree() {
+		return tree;
+	}
+	
+	public int expandJTreeNode (Object node, int row){
+		TreeModel model = tree.getModel();
+		if (node != null  &&  !model.isLeaf(node)){
+			tree.expandRow(row);
+			for (int index = 0;	row + 1 < tree.getRowCount()  &&  index < model.getChildCount(node); index++){
+				row++;
+				Object child = model.getChild(node, index);
+				if (child == null)
+					break;
+				javax.swing.tree.TreePath path;
+				while ((path = tree.getPathForRow(row)) != null  &&	path.getLastPathComponent() != child){
+					tree.expandRow(row);
+					row++;					
+				}
+				if (path == null)
+					break;
+				row = expandJTreeNode(child, row);				
+			}
+		}
+		return row;
+	}
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModel.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+
+import javax.swing.tree.TreeModel;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: TreeTableModel.java 13136 2007-08-20 08:38:34Z evercher $
+ * $Log$
+ * Revision 1.1  2007-08-20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public interface TreeTableModel extends TreeModel
+{
+    /**
+     * Returns the number ofs availible column.
+     */
+    public int getColumnCount();
+
+    /**
+     * Returns the name for column number <code>column</code>.
+     */
+    public String getColumnName(int column);
+
+    /**
+     * Returns the type for column number <code>column</code>.
+     */
+    public Class getColumnClass(int column);
+
+    /**
+     * Returns the value to be displayed for node <code>node</code>, 
+     * at column number <code>column</code>.
+     */
+    public Object getValueAt(Object node, int column);
+
+    /**
+     * Indicates whether the the value for node <code>node</code>, 
+     * at column number <code>column</code> is editable.
+     */
+    public boolean isCellEditable(Object node, int column);
+
+    /**
+     * Sets the value for node <code>node</code>, 
+     * at column number <code>column</code>.
+     */
+    public void setValueAt(Object aValue, Object node, int column);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModelAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModelAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModelAdapter.java	(revision 42196)
@@ -0,0 +1,153 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+
+import javax.swing.JTree;
+import javax.swing.event.TreeExpansionEvent;
+import javax.swing.event.TreeExpansionListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.tree.TreePath;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: TreeTableModelAdapter.java 13655 2007-09-12 16:28:55Z bsanchez $
+ * $Log$
+ * Revision 1.2  2007-09-12 16:28:23  bsanchez
+ * *** empty log message ***
+ *
+ * Revision 1.1  2007/08/20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.3  2006/10/25 14:45:52  jorpiell
+ * A�adidos los renderers al arbol
+ *
+ * Revision 1.2  2006/10/24 08:04:13  jorpiell
+ * nodeFroRow es ahora public
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class TreeTableModelAdapter extends AbstractTableModel{
+  private static final long serialVersionUID = -5509267189480739255L;
+	JTree tree;
+	TreeTableModel treeTableModel;
+	
+	public TreeTableModelAdapter(TreeTableModel treeTableModel, JTree tree) {
+		this.tree = tree;
+		this.treeTableModel = treeTableModel;
+		
+		tree.addTreeExpansionListener(new TreeExpansionListener() {
+			// Don't use fireTableRowsInserted() here; 
+			// the selection model would get  updated twice. 
+			public void treeExpanded(TreeExpansionEvent event) {  
+				fireTableDataChanged(); 
+			}
+			public void treeCollapsed(TreeExpansionEvent event) {  
+				fireTableDataChanged(); 
+			}
+		});
+	}
+	
+	// Wrappers, implementing TableModel interface. 
+	
+	public int getColumnCount() {
+		return treeTableModel.getColumnCount();
+	}
+	
+	public String getColumnName(int column) {
+		return treeTableModel.getColumnName(column);
+	}
+	
+	public Class getColumnClass(int column) {
+		return treeTableModel.getColumnClass(column);
+	}
+	
+	public int getRowCount() {
+		return tree.getRowCount();
+	}
+	
+	public Object nodeForRow(int row) {
+		TreePath treePath = tree.getPathForRow(row);
+		return treePath.getLastPathComponent();         
+	}
+	
+	public Object getValueAt(int row, int column) {
+		return treeTableModel.getValueAt(nodeForRow(row), column);
+	}
+	
+	public boolean isCellEditable(int row, int column) {
+		return treeTableModel.isCellEditable(nodeForRow(row), column);
+	}
+	
+	public void setValueAt(Object value, int row, int column) {
+		treeTableModel.setValueAt(value, nodeForRow(row), column);
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/TreeTableModelAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractCellEditor.java	(revision 42196)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+
+import java.util.EventObject;
+
+import javax.swing.CellEditor;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.EventListenerList;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: AbstractCellEditor.java 13136 2007-08-20 08:38:34Z evercher $
+ * $Log$
+ * Revision 1.1  2007-08-20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class AbstractCellEditor implements CellEditor {
+	
+	protected EventListenerList listenerList = new EventListenerList();
+	
+	public Object getCellEditorValue() { return null; }
+	public boolean isCellEditable(EventObject e) { return true; }
+	public boolean shouldSelectCell(EventObject anEvent) { return false; }
+	public boolean stopCellEditing() { return true; }
+	public void cancelCellEditing() {}
+	
+	public void addCellEditorListener(CellEditorListener l) {
+		listenerList.add(CellEditorListener.class, l);
+	}
+	
+	public void removeCellEditorListener(CellEditorListener l) {
+		listenerList.remove(CellEditorListener.class, l);
+	}
+	
+	/**
+	 * Notify all listeners that have registered interest for
+	 * notification on this event type.  
+	 * @see EventListenerList
+	 */
+	protected void fireEditingStopped() {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length-2; i>=0; i-=2) {
+			if (listeners[i]==CellEditorListener.class) {
+				((CellEditorListener)listeners[i+1]).editingStopped(new ChangeEvent(this));
+			}	       
+		}
+	}
+	
+	/**
+	 * Notify all listeners that have registered interest for
+	 * notification on this event type.  
+	 * @see EventListenerList
+	 */
+	protected void fireEditingCanceled() {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length-2; i>=0; i-=2) {
+			if (listeners[i]==CellEditorListener.class) {
+				((CellEditorListener)listeners[i+1]).editingCanceled(new ChangeEvent(this));
+			}	       
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractTreeTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractTreeTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractTreeTableModel.java	(revision 42196)
@@ -0,0 +1,256 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.treeTable;
+
+import javax.swing.event.EventListenerList;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreePath;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: AbstractTreeTableModel.java 13136 2007-08-20 08:38:34Z evercher $
+ * $Log$
+ * Revision 1.1  2007-08-20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.3  2006/11/01 17:27:44  jorpiell
+ * Se elimina el nodo "virtual" de la raiz
+ *
+ * Revision 1.2  2006/10/23 11:13:55  jorpiell
+ * A�adida la posibilidad de recargar el �rbol tantas veces como queramos
+ *
+ * Revision 1.1  2006/10/23 08:18:39  jorpiell
+ * A�adida la clase treetable
+ *
+ *
+ */
+/**
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public abstract class AbstractTreeTableModel implements TreeTableModel {
+	protected Object root;     
+	protected EventListenerList listenerList = new EventListenerList();
+	
+	public AbstractTreeTableModel(Object root) {
+		setNodes(root);
+	}
+	
+	public void setNodes(Object root){
+		this.root = root; 		
+	}
+	
+	//
+	// Default implmentations for methods in the TreeModel interface. 
+	//
+	
+	public Object getRoot() {
+		return root;
+	}
+	
+	public boolean isLeaf(Object node) {
+		return getChildCount(node) == 0; 
+	}
+	
+	public void valueForPathChanged(TreePath path, Object newValue) {}
+	
+	// This is not called in the JTree's default mode: use a naive implementation. 
+	public int getIndexOfChild(Object parent, Object child) {
+		for (int i = 0; i < getChildCount(parent); i++) {
+			if (getChild(parent, i).equals(child)) { 
+				return i; 
+			}
+		}
+		return -1; 
+	}
+	
+	public void addTreeModelListener(TreeModelListener l) {
+		listenerList.add(TreeModelListener.class, l);
+	}
+	
+	public void removeTreeModelListener(TreeModelListener l) {
+		listenerList.remove(TreeModelListener.class, l);
+	}
+	
+	/*
+	 * Notify all listeners that have registered interest for
+	 * notification on this event type.  The event instance 
+	 * is lazily created using the parameters passed into 
+	 * the fire method.
+	 * @see EventListenerList
+	 */
+	protected void fireTreeNodesChanged(Object source, Object[] path, 
+			int[] childIndices, 
+			Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		TreeModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length-2; i>=0; i-=2) {
+			if (listeners[i]==TreeModelListener.class) {
+				// Lazily create the event:
+				if (e == null)
+					e = new TreeModelEvent(source, path, 
+							childIndices, children);
+				((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
+			}          
+		}
+	}
+	
+	/*
+	 * Notify all listeners that have registered interest for
+	 * notification on this event type.  The event instance 
+	 * is lazily created using the parameters passed into 
+	 * the fire method.
+	 * @see EventListenerList
+	 */
+	protected void fireTreeNodesInserted(Object source, Object[] path, 
+			int[] childIndices, 
+			Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		TreeModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length-2; i>=0; i-=2) {
+			if (listeners[i]==TreeModelListener.class) {
+				// Lazily create the event:
+				if (e == null)
+					e = new TreeModelEvent(source, path, 
+							childIndices, children);
+				((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
+			}          
+		}
+	}
+	
+	/*
+	 * Notify all listeners that have registered interest for
+	 * notification on this event type.  The event instance 
+	 * is lazily created using the parameters passed into 
+	 * the fire method.
+	 * @see EventListenerList
+	 */
+	protected void fireTreeNodesRemoved(Object source, Object[] path, 
+			int[] childIndices, 
+			Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		TreeModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length-2; i>=0; i-=2) {
+			if (listeners[i]==TreeModelListener.class) {
+				// Lazily create the event:
+				if (e == null)
+					e = new TreeModelEvent(source, path, 
+							childIndices, children);
+				((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
+			}          
+		}
+	}
+	
+	/*
+	 * Notify all listeners that have registered interest for
+	 * notification on this event type.  The event instance 
+	 * is lazily created using the parameters passed into 
+	 * the fire method.
+	 * @see EventListenerList
+	 */
+	protected void fireTreeStructureChanged(Object source, Object[] path, 
+			int[] childIndices, 
+			Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		TreeModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length-2; i>=0; i-=2) {
+			if (listeners[i]==TreeModelListener.class) {
+				// Lazily create the event:
+				if (e == null)
+					e = new TreeModelEvent(source, path, 
+							childIndices, children);
+				((TreeModelListener)listeners[i+1]).treeStructureChanged(e);
+			}          
+		}
+	}
+	
+	//
+	// Default impelmentations for methods in the TreeTableModel interface. 
+	//
+	
+	public Class getColumnClass(int column) { return Object.class; }
+	
+	/** By default, make the column with the Tree in it the only editable one. 
+	 *  Making this column editable causes the JTable to forward mouse 
+	 *  and keyboard events in the Tree column to the underlying JTree. 
+	 */ 
+	public boolean isCellEditable(Object node, int column) { 
+		return getColumnClass(column) == TreeTableModel.class; 
+	}
+	
+	public void setValueAt(Object aValue, Object node, int column) {}
+	}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/treeTable/AbstractTreeTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/StringTableCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/StringTableCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/StringTableCellEditor.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.celleditors;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.JComponent;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.gui.beans.swing.cellrenderers.StringTableCellRenderer;
+
+public class StringTableCellEditor implements TableCellEditor {
+	private StringTableCellRenderer renderer;
+	private ArrayList listeners = new ArrayList();
+
+
+	public StringTableCellEditor(final JTable ownerTable) {
+		renderer = new StringTableCellRenderer();
+	}
+
+	public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, int row, int column) {
+		if (value == null) return null;
+		JComponent aux = (JComponent) renderer.getTableCellRendererComponent(table, value, isSelected, false, row, column);
+		((JTextField) aux).addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				// Store the value to avoid the need of pressing ENTER
+				// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4139078
+				table.editingStopped(new ChangeEvent(table));
+			}
+		});
+		return aux;
+	}
+
+
+	public void cancelCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+	        CellEditorListener l = (CellEditorListener) listeners.get(i);
+	        ChangeEvent evt = new ChangeEvent(this);
+	        l.editingCanceled(evt);
+	    }
+	}
+
+	public boolean stopCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingStopped(evt);
+        }
+        return true;
+	}
+
+
+	public Object getCellEditorValue() {
+		if (renderer!=null && renderer.getText()!=null)
+			return new Boolean(renderer.getText());
+		return null;
+	}
+
+	public boolean isCellEditable(EventObject anEvent) {
+		return true;
+	}
+
+	public boolean shouldSelectCell(EventObject anEvent) {
+		return true;
+	}
+
+	public void addCellEditorListener(CellEditorListener l) {
+		listeners.add(l);
+	}
+
+	public void removeCellEditorListener(CellEditorListener l) {
+		listeners.remove(l);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/StringTableCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/IntegerTableCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/IntegerTableCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/IntegerTableCellEditor.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.celleditors;
+
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.JTable;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.gui.beans.swing.cellrenderers.NumberTableCellRenderer;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class IntegerTableCellEditor implements TableCellEditor {
+	private static NumberTableCellRenderer renderer = new NumberTableCellRenderer(true, false);
+	private ArrayList listeners = new ArrayList();
+
+	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+		if (value == null) return null;
+		return renderer.getTableCellRendererComponent(table, value, isSelected, false, row, column);
+	}
+
+
+	public void cancelCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+	        CellEditorListener l = (CellEditorListener) listeners.get(i);
+	        ChangeEvent evt = new ChangeEvent(this);
+	        l.editingCanceled(evt);
+	    }
+	}
+
+	public boolean stopCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingStopped(evt);
+        }
+        return true;
+	}
+
+
+	public Object getCellEditorValue() {
+		if (renderer!=null && renderer.getIncrementalNumberField()!=null)
+			return new Integer(renderer.getIncrementalNumberField().getInteger());
+		return null;
+	}
+
+	public boolean isCellEditable(EventObject anEvent) {
+		return true;
+	}
+
+	public boolean shouldSelectCell(EventObject anEvent) {
+		return false;
+	}
+
+	public void addCellEditorListener(CellEditorListener l) {
+		listeners.add(l);
+	}
+
+	public void removeCellEditorListener(CellEditorListener l) {
+		listeners.remove(l);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/IntegerTableCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/BooleanTableCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/BooleanTableCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/BooleanTableCellEditor.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.celleditors;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JTable;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.gui.beans.swing.cellrenderers.BooleanTableCellRenderer;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class BooleanTableCellEditor implements TableCellEditor {
+	private BooleanTableCellRenderer renderer;
+	private ArrayList listeners = new ArrayList();
+
+
+	public BooleanTableCellEditor(final JTable ownerTable) {
+		renderer = new BooleanTableCellRenderer(true);
+	}
+
+	public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, int row, int column) {
+		if (value == null) return null;
+		JComponent aux = (JComponent) renderer.getTableCellRendererComponent(table, value, isSelected, false, row, column);
+		((JCheckBox) aux.getComponent(0)).addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				// Store the value to avoid the need of pressing ENTER
+				// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4139078
+				table.editingStopped(new ChangeEvent(table));
+			}
+		});
+		return aux;
+	}
+
+
+	public void cancelCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+	        CellEditorListener l = (CellEditorListener) listeners.get(i);
+	        ChangeEvent evt = new ChangeEvent(this);
+	        l.editingCanceled(evt);
+	    }
+	}
+
+	public boolean stopCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingStopped(evt);
+        }
+        return true;
+	}
+
+
+	public Object getCellEditorValue() {
+		if (renderer!=null && renderer.getCheck()!=null)
+			return new Boolean(renderer.getCheck().isSelected());
+		return null;
+	}
+
+	public boolean isCellEditable(EventObject anEvent) {
+		return true;
+	}
+
+	public boolean shouldSelectCell(EventObject anEvent) {
+		return true;
+	}
+
+	public void addCellEditorListener(CellEditorListener l) {
+		listeners.add(l);
+	}
+
+	public void removeCellEditorListener(CellEditorListener l) {
+		listeners.remove(l);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/celleditors/BooleanTableCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/NumberTableCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/NumberTableCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/NumberTableCellRenderer.java	(revision 42196)
@@ -0,0 +1,115 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.cellrenderers;
+
+import java.awt.Component;
+import java.awt.FlowLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.border.MatteBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class NumberTableCellRenderer extends DefaultTableCellRenderer {
+  private static final long serialVersionUID = -4551232953341602636L;
+
+	private JNumberSpinner txt;
+
+	private boolean isBordered;
+	private MatteBorder selectedBorder;
+	private MatteBorder unselectedBorder;
+
+	private boolean acceptsDoubles;
+
+
+
+	public NumberTableCellRenderer(boolean bordered, boolean acceptsDoubles) {
+		this.isBordered = bordered;
+		this.acceptsDoubles = acceptsDoubles;
+		setOpaque(true);
+	}
+
+	public JNumberSpinner getIncrementalNumberField() {
+		return txt;
+	}
+
+	public Component getTableCellRendererComponent(JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int column) {
+		if (value == null)
+			return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+
+		if (isBordered) {
+			if (isSelected) {
+				if (selectedBorder == null) {
+					selectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+							5, table.getSelectionBackground());
+				}
+
+				setBorder(selectedBorder);
+			} else {
+				if (unselectedBorder == null) {
+					unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+							5, table.getBackground());
+				}
+				setBorder(unselectedBorder);
+			}
+		}
+		try {
+
+			JPanel content = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
+			content.setBackground(table.getBackground());
+
+                        int decimals = 0;
+                        if( this.acceptsDoubles ) {
+                            decimals = 3;
+                        }
+                        txt = new JNumberSpinner(0.0,6, 0.0,80.0,1.0,decimals);
+//                      Validator valid = acceptsDoubles ? ValidatingTextField.DOUBLE_VALIDATOR : ValidatingTextField.INTEGER_VALIDATOR;
+//			txt = new JIncrementalNumberField("", 6,valid, ValidatingTextField.NUMBER_CLEANER, 0, 80, 1);
+//			if (acceptsDoubles) {
+//				txt.setDouble(((Double) value).doubleValue());
+//			} else {
+//				txt.setInteger(((Integer) value).intValue());
+//			}
+
+			txt.setBackground(table.getBackground());
+			// TODO figure out a way to know the cell's width to fit in the editor
+//			txt.setPreferredSize(new Dimension(
+//					table.getColumnModel().getColumn(column).getPreferredWidth(),
+//					table.getRowHeight()));
+			content.add(txt);
+			return content;
+		} catch (ClassCastException ccEx) {
+			throw new RuntimeException("Trying to use a numeric cell renderer with a non-numeric datatype");
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/NumberTableCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/BooleanTableCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/BooleanTableCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/BooleanTableCellRenderer.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.cellrenderers;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.LayoutManager;
+
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.border.MatteBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.jfree.layout.CenterLayout;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class BooleanTableCellRenderer extends DefaultTableCellRenderer {
+  private static final long serialVersionUID = 2121615214282741840L;
+
+	private JCheckBox chk;
+
+	private boolean isBordered;
+	private MatteBorder selectedBorder;
+	private MatteBorder unselectedBorder;
+
+
+	public BooleanTableCellRenderer(boolean bordered) {
+		this.isBordered = bordered;
+		setOpaque(true);
+	}
+
+	public JCheckBox getCheck() {
+		return chk;
+	}
+
+	public Component getTableCellRendererComponent(JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int column) {
+		if (value == null)
+			return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+
+		if (isBordered) {
+			if (isSelected) {
+				if (selectedBorder == null) {
+					selectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+							5, table.getSelectionBackground());
+				}
+
+				setBorder(selectedBorder);
+			} else {
+				if (unselectedBorder == null) {
+					unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+							5, table.getBackground());
+				}
+
+				setBorder(unselectedBorder);
+			}
+		}
+		try {
+			Boolean v = (Boolean) value;
+			JPanel content = new JPanel(new CenterLayout());
+			content.setBackground(table.getBackground());
+			chk = new JCheckBox("", v.booleanValue());
+			chk.setBackground(table.getBackground());
+			content.add(chk, BorderLayout.CENTER);
+			return content;
+		} catch (ClassCastException ccEx) {
+			throw new RuntimeException("Trying to use a Boolean cell renderer with a non-Boolean datatype");
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/BooleanTableCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/StringTableCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/StringTableCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/StringTableCellRenderer.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.cellrenderers;
+
+import java.awt.Component;
+import java.awt.FlowLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.border.MatteBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+
+public class StringTableCellRenderer extends DefaultTableCellRenderer {
+	  private static final long serialVersionUID = 2121615214282741840L;
+
+		private JTextField txt;
+
+		private boolean isBordered;
+		private MatteBorder selectedBorder;
+		private MatteBorder unselectedBorder;
+
+
+
+		public JTextField getTextField() {
+			return txt;
+		}
+
+		public Component getTableCellRendererComponent(JTable table, Object value,
+				boolean isSelected, boolean hasFocus, int row, int column) {
+			if (value == null)
+				return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+
+			if (isBordered) {
+				if (isSelected) {
+					if (selectedBorder == null) {
+						selectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+								5, table.getSelectionBackground());
+					}
+
+					setBorder(selectedBorder);
+				} else {
+					if (unselectedBorder == null) {
+						unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+								5, table.getBackground());
+					}
+
+					setBorder(unselectedBorder);
+				}
+			}
+			try {
+				String v = (String) value;
+				txt = new JTextField(v);
+				txt.setBackground(table.getBackground());
+				return txt;
+			} catch (ClassCastException ccEx) {
+				throw new RuntimeException("Trying to use a Boolean cell renderer with a non-Boolean datatype");
+			}
+
+		}
+
+	}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/cellrenderers/StringTableCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFonts.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFonts.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFonts.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing;
+
+import java.awt.GraphicsEnvironment;
+
+import javax.swing.JComboBox;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class JComboBoxFonts extends JComboBox{
+  private static final long serialVersionUID = -1096327332248927959L;
+
+	public JComboBoxFonts() {
+		super();
+		initialize();
+	}
+
+	private void initialize() {
+		//	Font info is obtained from the current graphics environment.
+		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+
+		// --- Get an array of font names (smaller than the number of fonts)
+		String[] fontNames = ge.getAvailableFontFamilyNames();
+		for (int i = 0; i < fontNames.length; i++) {
+			addItem(fontNames[i]);
+		};
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JComboBoxFonts.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JFileChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JFileChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JFileChooser.java	(revision 42196)
@@ -0,0 +1,207 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing;
+
+import java.awt.Component;
+import java.awt.HeadlessException;
+import java.io.File;
+import java.util.Hashtable;
+
+import javax.swing.filechooser.FileSystemView;
+
+/**
+ * 
+ * JFileChooser.java
+ * <p>JFileChooser that tracks the last visited directory for a given ID. It allows you to
+ * open the JFileChooser in the same directory where you were the last time you open a file
+ * in the file system.<br>
+ * </p>
+ * <p>
+ * It needs to specify a string defining the JFileChooser ID in order to know what kind of 
+ * files you are going to open. For example after creating a JFileChooser by doing this:<br>
+ * <b><code>new JFileChooser("TEMPLATES_FILECHOOSER", defaultDirectory);</code></b><br> each time
+ * you create another JFileChooser anywhere giving the same ID, it will point directly to
+ * the last directory where you opened a file using this JFileChooser with an equal ID.
+ * </p>
+ * 
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 5, 2007
+ *
+ */
+public class JFileChooser extends javax.swing.JFileChooser {
+	private static final long serialVersionUID = -2419775752576400974L;
+	private static Hashtable<String, File> jfcLastPaths = new Hashtable<String, File>();
+	private String fileChooserID;
+	
+	/**
+	 * Creates a new JFileChooser with the remind last path feature. 
+	 * @param fileChooserID, the id that distinguishes the wanted files (i.e. "TEMPLATES_FILECHOOSER")
+	 * @param defaultDirectory, the default directory to go for the first time. It allows null, which
+	 *        means the user's home directory. 
+	 */
+	public JFileChooser(String fileChooserID, File defaultDirectory) {
+		super();
+		setDragEnabled(true);
+		if (fileChooserID == null) 
+			throw new IllegalArgumentException("JFileChooser's ID cannot be null");
+		
+		this.fileChooserID = fileChooserID;
+
+		setCurrentDirectory(getLastPath(fileChooserID, defaultDirectory));
+
+//		if (defaultDirectory == null)
+//			defaultDirectory = new File(System.getProperty("user.home"));
+//		File currentDirectory;
+//		if (jfcLastPaths.get(fileChooserID) != null)
+//			currentDirectory = new File(jfcLastPaths.get(fileChooserID));
+//		else
+//			currentDirectory = defaultDirectory;
+//		setCurrentDirectory(currentDirectory);
+//		if (defaultDirectory != null)
+//			jfcLastPaths.put(fileChooserID, currentDirectory.getAbsolutePath());
+	}
+
+	/**
+	 * Returns the Last Path for this fileChooserID
+	 * @param fileChooserID, the id that distinguishes the wanted files (i.e. "TEMPLATES_FILECHOOSER")
+	 * @param defaultDirectory, the default directory to go for the first time. It allows null, which
+	 *        means the user's home directory.
+	 * @return
+	 */
+	static public File getLastPath(String fileChooserID, File defaultDirectory) {
+		File path = jfcLastPaths.get(fileChooserID);
+
+		if (path != null)
+			return path;
+
+		if (defaultDirectory != null)
+			return defaultDirectory;
+
+		return FileSystemView.getFileSystemView().getHomeDirectory();
+	}
+
+	/**
+	 * Returns the Last Path for this JFileChooser
+	 * @param defaultDirectory, the default directory to go for the first time. It allows null, which
+	 *        means the user's home directory.
+	 * @return
+	 */
+	public File getLastPath(File defaultDirectory) {
+		return getLastPath(fileChooserID, defaultDirectory);
+	}
+
+	/**
+	 * Returns the Last Path for this JFileChooser
+	 * @return
+	 */
+	public File getLastPath() {
+		return getLastPath(fileChooserID, getCurrentDirectory());
+	}
+
+	/**
+	 * Save the Last Path for this fileChooserID
+	 * @param fileChooserID
+	 * @param path
+	 */
+	static public void setLastPath(String fileChooserID, File path) {
+		jfcLastPaths.put(fileChooserID, path);
+	}
+
+	/**
+	 * Save the Last Path for this JFileChooser
+	 * @param path
+	 */
+	public void setLastPath(File path) {
+		setLastPath(fileChooserID, path);
+	}
+
+	/**
+	 * Creates a new JFileChooser with the remind last path feature. 
+	 * @param fileChooserID, the id that distinguishes the wanted files (i.e. "TEMPLATES_FILECHOOSER")
+	 * @param defaultDirectory, the default directory to go for the first time. It allows null, which
+	 *        means the user's home directory. 
+	 */
+	public JFileChooser(String fileChooserID, String defaultDirectory) {
+		this(fileChooserID, defaultDirectory!=null ? new File(defaultDirectory) : null);
+	}
+
+    /**
+     * Constructs a <code>JFileChooser</code> using the given
+     * <code>FileSystemView</code>.
+     */
+    public JFileChooser(String fileChooserID, FileSystemView fsv) {
+	this(fileChooserID, (File) null, fsv);
+    }
+
+
+    /**
+     * Constructs a <code>JFileChooser</code> using the given current directory
+     * and <code>FileSystemView</code>.
+     */
+    public JFileChooser(String fileChooserID, File defaultDirectory, FileSystemView fsv) {
+    	this(fileChooserID, defaultDirectory);
+		setup(fsv);
+    }
+
+    /**
+     * Constructs a <code>JFileChooser</code> using the given current directory
+     * path and <code>FileSystemView</code>.
+     */
+    public JFileChooser(String fileChooserID, String defaultDirectoryPath, FileSystemView fsv) {
+	this(fileChooserID, new File(defaultDirectoryPath), fsv);
+		}
+
+	@Override
+	public int showDialog(Component parent, String approveButtonText) throws HeadlessException {       
+	    super.setCurrentDirectory(getLastPath());
+		int response = super.showDialog(parent, approveButtonText);
+		if ((getSelectedFile() != null) && (getSelectedFile().isDirectory()))
+			setLastPath(fileChooserID, getSelectedFile());
+		else
+			setLastPath(fileChooserID, getCurrentDirectory());
+
+			return response;
+		}
+
+/* with this version it only reminds when a file was choosen and accepted (ok button clicked)
+     @Override
+    public int showDialog(Component parent, String approveButtonText)
+    		throws HeadlessException {
+    	int response = super.showDialog(parent, approveButtonText);
+    	if (response == javax.swing.JFileChooser.APPROVE_OPTION) {
+    		File[] ff = super.getSelectedFiles();
+    		if (ff.length>0) {
+    			String theFilePath = ff[0].getAbsolutePath().
+    				substring(0, ff[0].getAbsolutePath().lastIndexOf(File.pathSeparator));
+    			jfcLastPaths.put(fileChooserID, theFilePath);
+    		} else if (super.getSelectedFile() != null) {
+    			File f = super.getSelectedFile() ;
+    			String theFilePath = f.getAbsolutePath().
+						substring(0, f.getAbsolutePath().lastIndexOf(File.separator));
+    			jfcLastPaths.put(fileChooserID, theFilePath);
+
+    		}
+    	}
+*/
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JFileChooser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/JComboBoxWithImageIconItems.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/JComboBoxWithImageIconItems.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/JComboBoxWithImageIconItems.java	(revision 42196)
@@ -0,0 +1,426 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.jComboBoxWithImageIconItems;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.io.Serializable;
+import java.util.Vector;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+
+import org.gvsig.gui.beans.Messages;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * A JComboBox which items are ImageIcons.<br>
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JComboBoxWithImageIconItems extends JComboBox implements Serializable {
+	private static final long serialVersionUID = -429261182461238958L;
+
+	public static final int DEFAULT_ROW_COUNT = 3;
+
+	private JComboBoxWithImageIconItems referenceToThisJComboBoxWithImageIconItems;
+
+    /**
+     * Default constructor
+     */
+    public JComboBoxWithImageIconItems() {
+    	super();
+    	initialize();
+    }
+
+    /**
+     * Default constructor with a 'ComboBoxImageIconModel' as parameter
+     * 
+     * @param aModel org.gvsig.gui.beans.swing.jComboBoxWithImageIconItems.JComboBoxWithImageIconItems.ComboBoxImageIconModel
+     */
+    public JComboBoxWithImageIconItems(ComboBoxImageIconModel aModel) {
+    	super();
+    	initialize();
+    }
+
+    /**
+     * Default constructor with an array of 'ImageIconItemInfo' as parameters
+     * 
+     * @param items Each item must be an 'ImageIconItemInfo' object
+     */
+    public JComboBoxWithImageIconItems(Object[] items) {
+    	super();
+    	initialize();
+    }
+
+    /**
+     * Default constructor with a Vector of 'ImageIconItemInfo' as parameter
+     * 
+     * @param items Each item must be an 'ImageIconItemInfo' object
+     */
+    public JComboBoxWithImageIconItems(Vector items) {
+    	super();
+    	initialize();
+    }
+
+    /**
+     * Initialize this component
+     */
+    private void initialize() {
+    	this.referenceToThisJComboBoxWithImageIconItems = this;
+    	this.setModel(new ComboBoxImageIconModel());
+		this.setRenderer(new ComboBoxImageIconRenderer());
+		this.setMaximumRowCount(DEFAULT_ROW_COUNT);
+    }
+
+    /**
+     * Adds an image icon URL path, image icon loaded (or null if not), tool tip text (tool tip text could be "") and if it's neccessary (it's optional)
+     *   another associated value to this item (if there is no associated value, the 'item_Value' param should be null) 
+     * 
+     * @param imageIconPath A path
+     * @param imageIcon An image icon loaded or null if haven't been loaded
+     * @param imageIconToolTipText Text
+     * @param item_Value Another extra value associated to the item added (null if no extra value)
+     */
+    public void addImageIconItem(String imageIconPath, ImageIcon imageIcon, String imageIconToolTipText, Object item_Value) {
+    	// Load the image and stor it into the model of the JComboBox
+    	this.addItem(new ImageIconItemInfo(imageIconPath, imageIcon, imageIconToolTipText, item_Value));
+    }
+    
+    /**
+     * Adds an image icon URL path, image icon loaded (or null if not), and tool tip text (tool tip text could be "")
+     * 
+     * @param imageIconItem Information for load an image icon and set its tool tip text
+     */
+    public void addImageIconItem(ImageIconItemInfo imageIconItem) {
+    	// Load the image and stor it into the model of the JComboBox
+    	this.addItem(imageIconItem);
+    }
+    
+    /**
+     * Adds an image icon URL path, tool tip text (tool tip text could be "") and the item value
+     * If no item matches, does nothing
+     * (The image icon parameter is ignored)
+     * 
+     * @param imageIconPath A path
+     * @param imageIconToolTipText Text
+     * @param item_Value An extra value
+     */
+    public void removeImageIconItem(String imageIconPath, String imageIconToolTipText, String item_Value) {
+    	int i = 0;
+    	ImageIconItemInfo iiii1;
+
+    	while (i < this.getItemCount()) {
+    		iiii1 = (ImageIconItemInfo)this.getItemAt(i);
+    		if ((iiii1.getPath().compareTo(imageIconPath) == 0) &&
+    				(iiii1.getToolTipText().compareTo(imageIconToolTipText) == 0) && 
+    				(((iiii1.getItemValue() == null) && (item_Value == null)) || (iiii1.getItemValue().equals(item_Value)))) {
+    			this.removeItemAt(i);
+    			return; // Only remove the first match
+    		}
+    		else {
+    			i ++;
+    		}
+    	}
+    }
+
+    /**
+     * Removes an image icon URL path, tool tip text (tool tip text could be "") and the item value
+     * If no item matches, does nothing
+     * (The image icon parameter is ignored)
+     * 
+     * @param imageIconPath Information for remove the item
+     */
+    public void removeImageIconItem(ImageIconItemInfo imageIconItem) {
+    	int i = 0;
+    	ImageIconItemInfo iiii1;
+    	
+    	while (i < this.getItemCount()) {
+    		iiii1 = (ImageIconItemInfo)this.getItemAt(i);
+    		if ((iiii1.getPath().compareTo(imageIconItem.getPath()) == 0) &&
+    				(iiii1.getToolTipText().compareTo(imageIconItem.getToolTipText()) == 0) && 
+    				(((iiii1.getItemValue() == null) && (imageIconItem.getItemValue() == null)) || (iiii1.getItemValue().equals(imageIconItem.getItemValue())))) {
+    			this.removeItemAt(i);
+    			return; // Only remove the first match
+    		}
+    		else {
+    			i ++;
+    		}
+    	}
+    }
+
+    /**
+     * Removes all image icons
+     */
+    public void removeAllImageIconItems() {
+    	this.removeAllItems();
+    }
+
+    /**
+     * Sets some image icons that their information to load is stored in an array of ImageIconItemInfo
+     * 
+     * @param imagePaths An array of ImageIconItemInfo with the URL path, image icon loaded (or null if not), and tool tip text to each image
+     */
+    public void addImageIconItems(ImageIconItemInfo[] imageIconItems) {    	
+    	// Load the images and store them into the model of the JComboBox
+    	for (int i = 0; i < imageIconItems.length; i++) {
+    		this.addItem(imageIconItems[i]);
+    	}
+    }
+
+    /**
+     * Sets some image icons that their information to load is stored in a Vector of ImageIconItemInfo
+     * 
+     * @param imagePaths A Vector of ImageIconItemInfo with the URL path, image icon loaded (or null if not), and tool tip text to each image
+     */    
+    public void addImageIconItems(Vector imageIconItems) {
+    	// Load the images and store them into the model of the JComboBox
+    	for (int i = 0; i < imageIconItems.size(); i++) {
+    		this.addItem(imageIconItems.get(i));
+    	}
+    }
+
+    /**
+     * Removes some image icons that their path, tool tip text and item value are stored in an array
+     * If no item matches, does nothing
+     * (The image icon parameter is ignored)
+     * 
+     * @param imageIconPaths An array with the ImageIconItemInfo
+     */
+    public void removeImageIconItems(ImageIconItemInfo[] imageIconItems) {
+       	int i, j;
+       	ImageIconItemInfo iiii1, iiii2;
+
+       	// For each item to remove
+       	for (i = 0; i < imageIconItems.length; i++) {
+       		j = 0;
+       		iiii1 = (ImageIconItemInfo)imageIconItems[i];
+       		// Finds first item that it's patch matches and removes it
+	    	while (j < this.getItemCount()) {
+	    		iiii2 = (ImageIconItemInfo)this.getItemAt(j);
+	    		if ((iiii1.getPath().compareTo(iiii2.getPath()) == 0) &&
+	    				(iiii1.getToolTipText().compareTo(iiii2.getToolTipText()) == 0) && 
+	    				(((iiii1.getItemValue() == null) && (iiii2.getItemValue() == null)) || (iiii1.getItemValue().equals(iiii2.getItemValue())))) {
+	    			this.removeItemAt(j);
+	    			break; // Only remove the first match
+	    		}
+	    		else {
+	    			j ++;
+	    		}
+	    	}
+       	}
+    }
+
+    /**
+     * Removes some image icons that their paths, tool tip text and item value are stored in a Vector
+     * (The image icon parameter is ignored)
+     * 
+     * @param imageIconPaths A Vector with the ImageIconItemInfo
+     */
+    public void removeImageIconItems(Vector imageIconItems) {
+       	int i, j;
+       	ImageIconItemInfo iiii1, iiii2;
+
+       	// For each item to remove
+       	for (i = 0; i < imageIconItems.size(); i++) {
+       		j = 0;
+       		iiii1 = (ImageIconItemInfo)imageIconItems.get(i);
+       		// Finds first item that it's patch matches and removes it
+	    	while (j < this.getItemCount()) {
+	    		iiii2 = (ImageIconItemInfo)this.getItemAt(j);
+	    		if ((iiii1.getPath().compareTo(iiii2.getPath()) == 0) &&
+	    				(iiii1.getToolTipText().compareTo(iiii2.getToolTipText()) == 0) && 
+	    				(((iiii1.getItemValue() == null) && (iiii2.getItemValue() == null)) || (iiii1.getItemValue().equals(iiii2.getItemValue())))) {
+	    			this.removeItemAt(j);
+	    			break; // Only remove the first match
+	    		}
+	    		else {
+	    			j ++;
+	    		}
+	    	}
+       	}    	
+    }
+    
+	/**
+	 * @see ComboBoxImageIconModel#setShowImageIconAndTextProperty(boolean)
+	 */
+	public void setShowImageIconAndTextProperty(boolean b) {
+		((ComboBoxImageIconModel)this.getModel()).setShowImageIconAndTextProperty(b);
+	}
+	
+	/**
+	 * @see ComboBoxImageIconModel#getShowImageIconAndTextProperty()
+	 */
+	public boolean getShowImageIconAndTextProperty() {
+		return ((ComboBoxImageIconModel)this.getModel()).getShowImageIconAndTextProperty();
+	}
+    
+	/**
+	 * @see ComboBoxRenderer#setPreferredSize(Dimension)
+	 */
+	public void setJComboBoxRendererPreferredSize (Dimension d) {
+		((ComboBoxImageIconRenderer)this.getRenderer()).setPreferredSize(d);
+	}
+	
+	/**
+	 * @see ComboBoxRenderer#getPreferredSize()
+	 */
+	public Dimension getJComboBoxRendererPreferredSize () {
+		return ((ComboBoxImageIconRenderer)this.getRenderer()).getPreferredSize();
+	}
+
+    /**
+     * This code has been extracted and modified from the Java Sun Microsystems's example: 'CustomComboBoxDemo.java'
+     *   in http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html
+     * 
+     * @author Sun Microsystems
+     * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+     */
+    private class ComboBoxImageIconRenderer extends JLabel implements ListCellRenderer, Serializable {
+		private static final long serialVersionUID = -7247546606502171953L;
+
+		private Font uhOhFont;
+
+    	/**
+    	 * Default constructor
+    	 */
+    	public ComboBoxImageIconRenderer() {
+    		setOpaque(true);
+    		setHorizontalAlignment(CENTER);
+    		setVerticalAlignment(CENTER);
+    	}
+
+    	/**
+    	 * This method finds the image and text corresponding
+    	 * to the selected value and returns the label, set up
+    	 * to display the text and image.
+    	 * 
+    	 * @see ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
+    	 */
+    	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+    		if (value != null) {
+	    		if (isSelected) {
+	    			setBackground(list.getSelectionBackground());
+	    			setForeground(list.getSelectionForeground());
+	    		} else {
+	    			setBackground(list.getBackground());
+	    			setForeground(list.getForeground());
+	    		}
+	    		
+	    		ImageIcon icon = ((ImageIconItemInfo)value).getImageIcon();
+	    		String item = ((ImageIconItemInfo)value).getPath();
+	    		String toolTipText = ((ImageIconItemInfo)value).getToolTipText();
+	    		
+	    		setIcon(icon);
+	    		
+	    		if (toolTipText != null) {
+	    			setToolTipText(toolTipText);
+	    			referenceToThisJComboBoxWithImageIconItems.setToolTipText(toolTipText);
+	    		}
+	
+	    		if (getShowImageIconAndTextProperty()) {
+		    		if (icon != null) {
+		    			setText(item);
+		    			setFont(list.getFont());
+		    		} else {
+		    			setUhOhText(item + " (" + Messages.getText("no_image_available") + ")", list.getFont());
+		    		}
+	    		}
+	    		else {
+	    			 /* In this way we force to show anything in the Popup list 
+		   			      in order to user knew that no item has been loaded */
+		    		setText(" ");
+	    		}
+    		}
+    		else {
+    			// Empty previous information
+    			setIcon(null);
+    			setToolTipText("");
+    			referenceToThisJComboBoxWithImageIconItems.setToolTipText("");
+    			setText("");
+    		}
+    		
+    		return this;
+    	}
+
+    	/**
+    	 * Set the font and text when no image was found.
+    	 * 
+    	 * @param uhOhText Text
+    	 * @param normalFont Font type
+    	 */
+    	private void setUhOhText(String uhOhText, Font normalFont) {
+    		if (uhOhFont == null) { //lazily create this font
+    			uhOhFont = normalFont.deriveFont(Font.ITALIC);
+    		}
+
+    		setFont(uhOhFont);
+    		setText(uhOhText);
+    	}
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/JComboBoxWithImageIconItems.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ComboBoxImageIconModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ComboBoxImageIconModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ComboBoxImageIconModel.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.jComboBoxWithImageIconItems;
+
+import java.io.Serializable;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+
+/**
+ * Model for 'JPanelWithJComboBoxImageIconItems', stores the attribute 'showImageIconAndText'
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class ComboBoxImageIconModel extends DefaultComboBoxModel implements Serializable {
+	private static final long serialVersionUID = -775510419199115805L;
+
+	public static final boolean DEFAULT_SHOW_IMAGE_ICON_AND_TEXT_PROPERTY = false;
+	
+	private boolean showImageIconAndText;
+
+	/**
+	 * @see DefaultComboBoxModel#DefaultComboBoxModel()
+	 */
+	public ComboBoxImageIconModel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * @see DefaultComboBoxModel#DefaultComboBoxModel(Object[])
+	 */
+	public ComboBoxImageIconModel(Object[] items) {
+		super(items);
+		initialize();
+	}
+
+	/**
+	 * @see DefaultComboBoxModel#DefaultComboBoxModel(Vector)
+	 */
+	public ComboBoxImageIconModel(Vector v) {
+		super(v);
+		initialize();
+	}
+
+	/**
+	 * Initializes the new attribute of this model
+	 */
+	private void initialize() {
+		showImageIconAndText = DEFAULT_SHOW_IMAGE_ICON_AND_TEXT_PROPERTY;
+	}
+
+	/**
+	 * Sets the value of the inner attribute 'imageIconAndText'
+	 * 
+	 * @param b A boolean value
+	 */
+	public void setShowImageIconAndTextProperty(boolean b) {
+		showImageIconAndText = b;
+	}
+
+	/**
+	 * Returns the value of the inner attribute 'imageIconAndText'
+	 * 
+	 * @return A boolean value
+	 */
+	public boolean getShowImageIconAndTextProperty() {
+		return showImageIconAndText;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ComboBoxImageIconModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfo.java	(revision 42196)
@@ -0,0 +1,185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.jComboBoxWithImageIconItems;
+
+import java.io.Serializable;
+
+import javax.swing.ImageIcon;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+
+
+/**
+ * This class represents the necessary information about each image icon item of 'JPanelWithJComboBoxImageIconItems'
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class ImageIconItemInfo implements Serializable {
+	private static final long serialVersionUID = -7087121873703006781L;
+
+	private ImageIcon imageIcon;
+	private String toolTipText;
+	private Object itemValue; // An object value of the item like a item value of a JComboBox
+	
+	/* This other attribute it's necessary because it's possible that the image icon couldn't be
+	     loaded and then in this case could be impossible to know the path after */
+	private String path;
+
+	/**
+	 * Default constructor without parameters
+	 */
+	public ImageIconItemInfo() {
+		path = null;
+		imageIcon = null;
+		toolTipText = null;
+		itemValue = null;
+	}
+	
+	/**
+	 * Default constructor with two parameters
+	 * 
+	 * @param path Path to the image icon
+	 * @param image_Icon The image icon
+	 * @param text The tool tip text
+	 * @param item_Value A value associated to this item
+	 */
+	public ImageIconItemInfo(String image_Icon_Path, ImageIcon image_Icon, String text, Object item_Value) {
+		path = image_Icon_Path;
+		imageIcon = image_Icon;
+		toolTipText = text;
+		itemValue = item_Value;
+	}
+
+	/**
+	 * Gets the image icon object reference
+	 * 
+	 * @return the imageIcon
+	 */
+	public ImageIcon getImageIcon() {
+		return imageIcon;
+	}
+
+	/**
+	 * Sets the image icon object reference
+	 * 
+	 * @param imageIcon the imageIcon to set
+	 */
+	public void setImageIcon(ImageIcon imageIcon) {
+		this.imageIcon = imageIcon;
+	}
+
+	/**
+	 * Gets the path
+	 * 
+	 * @return the path
+	 */
+	public String getPath() {
+		return path;
+	}
+
+	/**
+	 * Sets the path
+	 * 
+	 * @param path the path to set
+	 */
+	public void setPath(String path) {
+		this.path = path;
+	}
+	
+	/**
+	 * Gets the tool tip text
+	 * 
+	 * @return text the tool tip text to this icon image
+	 */
+	public String getToolTipText() {
+		return this.toolTipText;
+	}
+	
+	/**
+	 * Sets the tool tip text
+	 * 
+	 * @param text the tool tip text to this icon image
+	 */
+	public void setToolTipText(String text) {
+		this.toolTipText = text;
+	}
+	
+	/**
+	 * Gets the associated item value
+	 * 
+	 * @return a value associated to this item
+	 */
+	public Object getItemValue() {
+		return this.itemValue;
+	}
+	
+	/**
+	 * Sets the associated item value
+	 * 
+	 * @param item_Value a value associated to this item
+	 */
+	public void setItemValue(Object item_Value) {
+		this.itemValue = item_Value;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfoUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfoUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfoUtils.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing.jComboBoxWithImageIconItems;
+
+import javax.swing.ImageIcon;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class has an static method that is an utility to load an image icon
+ *
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class ImageIconItemInfoUtils {
+	// TRACE - DEBUG
+	final static private Logger logger = LoggerFactory.getLogger(ImageIconItemInfoUtils.class);
+	// END TRACE - DEBUG
+
+    /**
+     * Returns an ImageIcon, or null if the path from class reference was invalid.
+     *
+     * @param class_Reference A reference to a class which path will be the base to find the resource of the 'path' param
+     * @param path Path to the image to load
+     * @return javax.swing.ImageIcon
+     */
+    public static ImageIcon createImageIcon(Class class_Reference, String path) {
+    	java.net.URL imgURL = class_Reference.getResource(path);
+        if (imgURL != null) {
+            return new ImageIcon(imgURL);
+        } else {
+        	logger.debug("Couldn't find file: " + path);
+            return null;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/jComboBoxWithImageIconItems/ImageIconItemInfoUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/GridBagLayoutPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/GridBagLayoutPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/GridBagLayoutPanel.java	(revision 42196)
@@ -0,0 +1,454 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: GridBagLayoutPanel.java 13655 2007-09-12 16:28:55Z bsanchez $
+* $Log$
+* Revision 1.2  2007-09-12 16:28:23  bsanchez
+* *** empty log message ***
+*
+* Revision 1.1  2007/08/20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.11  2006/10/23 09:53:07  jaume
+* *** empty log message ***
+*
+* Revision 1.10  2006/10/18 07:29:21  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2006/08/23 07:33:32  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2006/08/22 07:38:58  jaume
+* added support for detecting changes keyboard and mouse changes over the componenets added via addComponent methods
+*
+* Revision 1.7  2006/08/11 16:36:15  azabala
+* *** empty log message ***
+*
+* Revision 1.6  2006/08/07 14:45:14  azabala
+* added a convenience method to specify insets and gridbagconstraints
+*
+* Revision 1.5  2006/07/28 15:17:43  azabala
+* added the posibility to customize insets of the panel which has each row
+*
+* Revision 1.4  2006/07/12 11:23:56  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/07/04 16:56:10  azabala
+* new method to add three componentes
+*
+* Revision 1.2  2006/07/03 09:29:09  jaume
+* javadoc
+*
+* Revision 1.1  2006/06/29 06:27:10  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans.swing;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.border.EmptyBorder;
+
+/**
+ * A panel designed for make the production of forms easier and faster.<br><br>
+ *
+ * It is a JPanel with a GridBagLayout that allows easily adding new components
+ * in rows that are automatically added and aligned by using the
+ * addComponent(...) methods.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class GridBagLayoutPanel extends JPanel{
+  private static final long serialVersionUID = -5583978286938513624L;
+	private GridBagLayout gridBag;
+	private boolean changed;
+	/**
+	 * The number of components already added to the layout manager.
+	 */
+	protected int y;
+	private MyValueChangeListener lst;
+
+
+	public GridBagLayoutPanel() {
+		setLayout(gridBag = new GridBagLayout());
+		lst = new MyValueChangeListener();
+	}
+
+	/**
+	 * Adds a labeled component to the option pane. Components are
+	 * added in a vertical fashion, one per row. The label is
+	 * displayed to the left of the component.
+	 * @param label The label
+	 * @param comp The component
+	 */
+	public void addComponent(String label, Component comp)
+	{
+		JLabel l = newLabel(label, comp);
+		l.setBorder(new EmptyBorder(0,0,0,12));
+		addComponent(l,comp,GridBagConstraints.BOTH);
+	}
+
+	/**
+	 * Adds a labeled component to the option pane. Components are
+	 * added in a vertical fashion, one per row. The label is
+	 * displayed to the left of the component.
+	 * @param label The label
+	 * @param comp The component
+	 * @param fill Fill parameter to GridBagConstraints for the right
+	 * component
+	 */
+	public void addComponent(String label, Component comp, int fill)
+	{
+		JLabel l = newLabel(label, comp);
+		l.setBorder(new EmptyBorder(0,0,0,12));
+		addComponent(l,comp,fill);
+	}
+
+
+	public void addComponent(String label, Component comp, Insets insets)
+	{
+		addComponent(label, comp, GridBagConstraints.BOTH, insets);
+	}
+
+	public void addComponent(String label, Component comp, int fill, Insets insets){
+		JLabel l = newLabel(label, comp);
+		l.setBorder(new EmptyBorder(0,0,0,12));
+		addComponent(l,comp, fill, insets);
+	}
+
+
+	/**
+	 * Adds a labeled component to the option pane. Components are
+	 * added in a vertical fashion, one per row. The label is
+	 * displayed to the left of the component.
+	 * @param comp1 The label
+	 * @param comp2 The component
+	 *
+	 * @since jEdit 4.1pre3
+	 */
+	public void addComponent(Component comp1, Component comp2)
+	{
+		addComponent(comp1,comp2,GridBagConstraints.BOTH);
+	}
+
+	/**
+	 * Adds two components in a single line using the default inset (borders of margin)
+	 * @param comp1
+	 * @param comp2
+	 * @param fill
+	 */
+	public void addComponent(Component comp1, Component comp2, int fill){
+		addComponent(comp1, comp2, fill, new Insets(1,0,1,0));
+	}
+	/**
+	 * Adds a labeled component to the option pane. Components are
+	 * added in a vertical fashion, one per row. The label is
+	 * displayed to the left of the component.
+	 * @param comp1 The label
+	 * @param comp2 The component
+	 * @param fill Fill parameter to GridBagConstraints for the right
+	 * component
+	 *
+	 * @since jEdit 4.1pre3
+	 */
+	public void addComponent(Component comp1, Component comp2, int fill, Insets insets)
+	{
+		copyToolTips(comp1, comp2);
+		GridBagConstraints cons = new GridBagConstraints();
+		cons.gridy = y++;
+		cons.gridheight = 1;
+		cons.gridwidth = 1;
+		cons.weightx = 0.0f;
+		cons.insets = insets;
+		cons.fill = GridBagConstraints.BOTH;
+
+		gridBag.setConstraints(comp1,cons);
+		add(comp1);
+
+		cons.fill = fill;
+		cons.gridx = 1;
+		cons.weightx = 1.0f;
+		gridBag.setConstraints(comp2,cons);
+		add(comp2);
+		comp1.addKeyListener(lst);
+		comp1.addMouseListener(lst);
+		comp2.addKeyListener(lst);
+		comp2.addMouseListener(lst);
+	}
+
+	/**
+	 * Adds three components in a line using the default insets
+	 * @param comp1
+	 * @param comp2
+	 * @param comp3
+	 * @param fill
+	 */
+	public void addComponent(Component comp1,
+			Component comp2,
+			Component comp3,
+			int fill){
+		addComponent(comp1, comp2, comp3, fill, new Insets(1, 0, 1, 0));
+	}
+	/**
+	 * Adds three components (azabala)
+	 *
+	 * @param comp1
+	 * @param comp2
+	 * @param comp3
+	 * @param fill
+	 */
+	public void addComponent(Component comp1,
+			Component comp2,
+			Component comp3,
+			int fill,
+			Insets insets)
+	{
+		copyToolTips(comp1, comp2);
+		copyToolTips(comp1, comp3);
+
+		GridBagConstraints cons = new GridBagConstraints();
+		cons.gridy = y++;
+		cons.gridheight = 1;
+		cons.gridwidth = 1;
+		cons.weightx = 0.0f;
+		cons.insets = insets;
+		cons.fill = GridBagConstraints.BOTH;
+
+		gridBag.setConstraints(comp1,cons);
+		add(comp1);
+
+		cons.gridx = 1;
+		cons.weightx = 1.0f;
+		gridBag.setConstraints(comp2,cons);
+		add(comp2);
+
+		//FIXME. REVISAR ESTO QUE SEGURAMENTE ESTE MAL (AZABALA)
+		cons.fill = GridBagConstraints.NONE;
+		cons.gridx = 2;
+		cons.weightx = 1.0f;
+		gridBag.setConstraints(comp3, cons);
+		add(comp3);
+		comp1.addKeyListener(lst);
+		comp1.addMouseListener(lst);
+		comp2.addKeyListener(lst);
+		comp2.addMouseListener(lst);
+	}
+
+	/**
+	 * Adds three components in a single line using the default BOTH fill constraint
+	 * @param comp1
+	 * @param comp2
+	 * @param comp3
+	 */
+	public void addComponent(Component comp1,
+			Component comp2,
+			Component comp3) {
+		addComponent(comp1, comp2, comp3, GridBagConstraints.BOTH);
+	}
+
+
+
+	public void addComponent(Component comp){
+		addComponent(comp, new Insets(1, 0, 1, 0));
+	}
+	/**
+	 * Adds a component to the option pane. Components are
+	 * added in a vertical fashion, one per row.
+	 * @param comp The component
+	 */
+	public void addComponent(Component comp, Insets insets)
+	{
+		GridBagConstraints cons = new GridBagConstraints();
+		cons.gridy = y++;
+		cons.gridheight = 1;
+		cons.gridwidth = GridBagConstraints.REMAINDER;
+		cons.fill = GridBagConstraints.NONE;
+		cons.anchor = GridBagConstraints.WEST;
+		cons.weightx = 1.0f;
+		cons.insets = insets;
+
+		gridBag.setConstraints(comp,cons);
+		add(comp);
+		comp.addKeyListener(lst);
+		comp.addMouseListener(lst);
+
+	}
+
+	/**
+	 * (azabala)
+	 * Adds a component which is going to fill many rows of the grid
+	 * (useful to add scrollpanes with list, etc.)
+	 *
+	 * */
+	public void addComponent(Component comp, Insets insets, int numRows){
+		GridBagConstraints cons = new GridBagConstraints();
+		cons.gridy = y++;
+		cons.gridheight = numRows;
+		//REVISAR
+		y += numRows;
+		cons.gridwidth = GridBagConstraints.REMAINDER;
+		cons.fill = GridBagConstraints.HORIZONTAL;
+		cons.anchor = GridBagConstraints.WEST;
+		cons.weightx = 1.0f;
+		cons.insets = insets;
+		cons.weighty = 0.0f;
+
+		gridBag.setConstraints(comp,cons);
+		add(comp);
+		comp.addKeyListener(lst);
+		comp.addMouseListener(lst);
+
+	}
+
+
+	///////ADDING SEPARATORS
+
+
+
+
+
+
+
+
+
+
+
+	public void addComponent(Component comp, int fill){
+		addComponent(comp, fill, new Insets(1, 0, 1, 0));
+	}
+
+	/**
+	 * Adds a component to the option pane. Components are
+	 * added in a vertical fashion, one per row.
+	 * @param comp The component
+	 * @param fill Fill parameter to GridBagConstraints
+	 */
+	public void addComponent(Component comp, int fill, Insets insets)
+	{
+		GridBagConstraints cons = new GridBagConstraints();
+		cons.gridy = y++;
+		cons.gridheight = 1;
+		cons.gridwidth = GridBagConstraints.REMAINDER;
+		cons.fill = fill;
+		cons.anchor = GridBagConstraints.WEST;
+		cons.weightx = 1.0f;
+		cons.insets = insets;
+
+		gridBag.setConstraints(comp,cons);
+		add(comp);
+		comp.addKeyListener(lst);
+		comp.addMouseListener(lst);
+	}
+
+	private void copyToolTips (Component c1, Component c2) {
+		int tooltips = 0;
+		int jc=0;
+		String text = null;
+		JComponent jc1 = null, jc2 = null;
+		try {
+			jc1 = (JComponent) c1;
+			text = jc1.getToolTipText();
+			++jc;
+			if (text != null && text.length() > 0) tooltips++;
+		}
+		catch (Exception e) {}
+		try {
+			jc2 = (JComponent) c2;
+			String text2 = jc2.getToolTipText();
+			++jc;
+			if (text2 != null && text2.length() > 0) {
+				text = text2;
+				tooltips++;
+			}
+		}
+		catch (Exception e) {}
+		if (tooltips == 1 && jc == 2) {
+			jc1.setToolTipText(text);
+			jc2.setToolTipText(text);
+		}
+	}
+
+	/**
+	 *	@return a label which has the same tooltiptext as the Component
+	 *    that it is a label for. This is used to create labels from inside
+	 *    AbstractPreferencePage.
+	 */
+	public JLabel newLabel(String label, Component comp)
+	{
+		JLabel retval = new JLabel(label);
+		try /* to get the tooltip of the component */
+		{
+			JComponent jc = (JComponent) comp;
+			String tttext = jc.getToolTipText();
+			retval.setToolTipText(tttext);
+		}
+		catch (Exception e)
+		{
+			/* There probably wasn't a tooltip,
+			 * or it wasn't a JComponent.
+			   We don't care. */
+		}
+		return retval;
+	}
+
+	/**
+	 * Adds an empty row to the form. It can be used as a separator to
+	 * improve panel appearance and comprehension.
+	 */
+	public void addBlank() {
+		addComponent(new JBlank(1,1));
+	}
+
+	public boolean hasChanged() {
+		return changed;
+	}
+
+	public void setChanged(boolean changed) {
+		this.changed = changed;
+	}
+
+	private class MyValueChangeListener implements KeyListener, MouseListener {
+		public void keyPressed(KeyEvent e)      { changed = true; }
+		public void keyReleased(KeyEvent e)     { changed = true; }
+		public void keyTyped(KeyEvent e)        { changed = true; }
+		public void mouseClicked(MouseEvent e)  { changed = true; }
+		public void mouseEntered(MouseEvent e)  { changed = true; }
+		public void mouseExited(MouseEvent e)   { changed = true; }
+		public void mousePressed(MouseEvent e)  { changed = true; }
+		public void mouseReleased(MouseEvent e) { changed = true; }
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/GridBagLayoutPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JTextPreview.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JTextPreview.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JTextPreview.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: JTextPreview.java 13655 2007-09-12 16:28:55Z bsanchez $
+* $Log$
+* Revision 1.2  2007-09-12 16:28:23  bsanchez
+* *** empty log message ***
+*
+* Revision 1.1  2007/08/20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.2  2006/11/28 09:30:12  ppiqueras
+* Cambiado PluginServices.getText(..., ...) por Messages.getText(...)
+*
+* Revision 1.1  2006/09/18 08:00:34  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans.swing;
+
+import java.awt.Font;
+import java.util.Enumeration;
+
+import javax.swing.JEditorPane;
+import javax.swing.UIManager;
+import javax.swing.plaf.FontUIResource;
+
+import org.gvsig.gui.beans.Messages;
+
+public class JTextPreview extends JEditorPane {
+  private static final long serialVersionUID = -3848260639539532634L;
+	private String text = null;
+	private Font font = null;
+	private final String template=
+	"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang3082{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Arial;}{\\f1\\fswiss\\fcharset0 #FONT#;}}\r\n" +
+	"{\\*\\generator Msftedit 5.41.15.1507;}\\viewkind4\\uc1\\pard#BOLD##ITALIC##UNDERLINED#f0#FONT_SIZE# #TEXT##END_UNDERLINED##NONE##END_BOLD##END_ITALIC#\\f1\\par\r\n" +
+	"}";
+
+
+	public JTextPreview() {
+		super();
+		setEditable(false);
+	}
+
+	public void setText(String text) {
+		if (text == null)
+			text = Messages.getText("text_preview_text");
+		setContentType("text/rtf");
+		this.text = text;
+		if (font == null) {
+			Enumeration keys = UIManager.getDefaults().keys();
+			while (keys.hasMoreElements()) {
+				Object key = keys.nextElement();
+				Object value = UIManager.get (key);
+				if (value instanceof FontUIResource) {
+					FontUIResource fur = (FontUIResource) value;
+					String fontName = fur.getFontName();
+					font = new Font(fontName, Font.PLAIN, 10);
+					break;
+				}
+			}
+		}
+
+		String theText =
+			template.replaceAll("#FONT#", font.getName()).
+					 replaceAll("#BOLD#", (font.isBold())? "\\b": "").
+					 replaceAll("#END_BOLD#", (font.isBold())? "\\b0": "").
+					 replaceAll("#ITALIC#", (font.isItalic())? "\\i": "").
+					 replaceAll("#END_ITALIC#", (font.isItalic())? "\\i0": "").
+					 replaceAll("#UNDERLINED#", (false/*font.isUnderlined()*/)? "\\ul": "").
+					 replaceAll("#END_UNDERLINED#", (false/*font.isUnderlined()*/)? "\\ul": "").
+					 replaceAll("#FONT_SIZE#", "\\\\fs"+font.getSize()*2).
+					 replaceAll("#NONE#", ((font.isBold() || font.isItalic() /*||font.isUnderlined()*/)? "none":"")).
+					 replaceAll("#TEXT#", text);
+		super.setText(theText);
+	}
+
+	public void setFont(Font font) {
+		this.font = font;
+		setText(text);
+	}
+
+	public void setEditable(boolean b) {
+		// avoided
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JTextPreview.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JBlank.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JBlank.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JBlank.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: JBlank.java 13655 2007-09-12 16:28:55Z bsanchez $
+* $Log$
+* Revision 1.2  2007-09-12 16:28:23  bsanchez
+* *** empty log message ***
+*
+* Revision 1.1  2007/08/20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.1  2006/10/23 09:53:07  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans.swing;
+
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+
+public class JBlank extends JPanel {
+  private static final long serialVersionUID = -8119213961484182678L;
+
+	public JBlank(int width, int height) {
+		super();
+		Dimension dim = new Dimension(width, height);
+		setSize(dim);
+		setPreferredSize(dim);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JBlank.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JNumberSpinner.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JNumberSpinner.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JNumberSpinner.java	(revision 42196)
@@ -0,0 +1,393 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.swing;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JFormattedTextField;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.text.NumberFormatter;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JNumberSpinner extends JSpinner {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 8614785196224519553L;
+
+    private static final Logger logger = LoggerFactory.getLogger(JNumberSpinner.class);
+
+    private boolean fireChanges;
+    private List<ActionListener> actionListeners = new ArrayList<ActionListener>();
+
+    private final int defaultColumns = 10;
+
+    public JNumberSpinner() {
+        super(new SpinnerNumberModel(0.0, Double.NEGATIVE_INFINITY, Double.MAX_VALUE, 1.0));
+        init(defaultColumns,0);
+    }
+
+    public JNumberSpinner(int currentValue) {
+        super(new SpinnerNumberModel(currentValue, Integer.MIN_VALUE, Integer.MAX_VALUE, 1));
+        init(defaultColumns,0);
+    }
+
+    public JNumberSpinner(int currentValue, int columns) {
+        super(new SpinnerNumberModel(currentValue, Integer.MIN_VALUE, Integer.MAX_VALUE, 1));
+        init(columns,0);
+    }
+
+    public JNumberSpinner(int currentValue, int columns, int minValue, int maxValue, int step) {
+        super(new SpinnerNumberModel(currentValue, minValue, maxValue, step));
+        init(columns,0);
+    }
+
+    /*
+     * @deprecated use {@link #JNumberSpinner(int, int, int, int, int)} instead.
+    */
+   @Deprecated
+   public JNumberSpinner(String currentValue, int columns, int minValue, int maxValue, int step) {
+        super(new SpinnerNumberModel());
+
+        Number value;
+
+        if (StringUtils.isBlank(currentValue)) {
+            value = null;
+        } else {
+            try {
+                value = new Integer(Integer.parseInt(currentValue));
+            } catch (Exception ex) {
+                value = null;
+            }
+        }
+        init(
+                value == null ? 0 : value,
+                columns,
+                new Integer(minValue),
+                new Integer(maxValue),
+                new Integer(step),
+                0
+        );
+        if (value == null) {
+            JSpinner.NumberEditor editor = (JSpinner.NumberEditor) this.getEditor();
+            JFormattedTextField textField = editor.getTextField();
+            textField.setText("");
+        }
+    }
+
+    public JNumberSpinner(int currentValue, int columns, int minValue, int maxValue, int step, int decimals) {
+        super(new SpinnerNumberModel(currentValue, minValue, maxValue, step));
+        init(
+                columns,
+                decimals
+        );
+    }
+
+    public JNumberSpinner(double currentValue) {
+        super(new SpinnerNumberModel(currentValue, Double.NEGATIVE_INFINITY, Double.MAX_VALUE, 1.0));
+        init(defaultColumns,4);
+    }
+
+    /*
+     * @deprecated use {@link #JNumberSpinner(double, int, double, double, double)} instead.
+     */
+    @Deprecated
+    public JNumberSpinner(String currentValue, int columns, double minValue, double maxValue, double step) {
+        this(
+                currentValue,
+                columns,
+                minValue,
+                maxValue,
+                step,
+                0
+        );
+    }
+
+    /*
+     * @deprecated use {@link #JNumberSpinner(double currentValue, int columns,
+     * double minValue, double maxValue, double step, int decimals)} instead.
+     */
+    @Deprecated
+    public JNumberSpinner(String currentValue, int columns, double minValue, double maxValue, double step, int decimals) {
+        super(new SpinnerNumberModel());
+
+        Number value;
+
+        if (StringUtils.isBlank(currentValue)) {
+            value = null;
+        } else {
+            try {
+                value = new Double(Double.parseDouble(currentValue));
+            } catch (Exception ex) {
+                value = null;
+            }
+        }
+        init(
+                value == null ? 0.0 : value,
+                columns,
+                new Double(minValue),
+                new Double(maxValue),
+                new Double(step),
+                decimals
+        );
+        if (value == null) {
+            JSpinner.NumberEditor editor = (JSpinner.NumberEditor) this.getEditor();
+            JFormattedTextField textField = editor.getTextField();
+            textField.setText("");
+        }
+    }
+
+    public JNumberSpinner(double currentValue, int columns, double minValue, double maxValue, double step) {
+        super(new SpinnerNumberModel(currentValue, minValue, maxValue, step));
+        init(columns,4);
+    }
+
+    public JNumberSpinner(double currentValue, int columns, double minValue, double maxValue, double step, int decimals) {
+        super(new SpinnerNumberModel(currentValue, minValue, maxValue, step));
+        init(columns,decimals);
+    }
+
+    private void init(int columns,int decimals) {
+        JSpinner.NumberEditor editor = (JSpinner.NumberEditor) this.getEditor();
+        JFormattedTextField textField = editor.getTextField();
+        NumberFormatter formatter = (NumberFormatter) textField.getFormatter();
+        DecimalFormat format = editor.getFormat();
+
+        if (columns > 0) {
+            textField.setColumns(columns);
+        }
+
+        format.setMinimumFractionDigits(decimals);
+        formatter.setAllowsInvalid(true);
+
+        this.fireChanges = true;
+
+    }
+
+    @Deprecated
+    private void init(Number currentValue, int columns, Comparable minValue, Comparable maxValue, Number step, int decimals) {
+
+        JSpinner.NumberEditor editor = (JSpinner.NumberEditor) this.getEditor();
+        JFormattedTextField textField = editor.getTextField();
+        NumberFormatter formatter = (NumberFormatter) textField.getFormatter();
+        DecimalFormat format = editor.getFormat();
+        SpinnerNumberModel model = getNumberModel();
+
+        if (columns > 0) {
+            textField.setColumns(columns);
+        }
+        model.setValue(currentValue);
+
+        // Las siguientes lineas son un chapuza.
+        //
+        // Si meto un Double/double en setMaximun/setMinimun
+        // No deja cambiar el valor asignado desde el UI.
+        model.setMaximum(hackValue(maxValue));
+        model.setMinimum(hackValue(minValue));
+        // Como meta un double en setStepSize tampoco me deja
+        // incrementar/decrementar el valor
+        model.setStepSize((int)(Math.ceil(step.doubleValue())));
+        //
+        // Esto es lo que esperaba que deberia ir y no va
+        // model.setMaximum(maxValue);
+        // model.setMinimum(minValue);
+        // model.setStepSize(step);
+        //
+        // Fin chapuza
+
+        // dump();
+        format.setMinimumFractionDigits(decimals);
+        formatter.setAllowsInvalid(true);
+
+        this.fireChanges = true;
+    }
+//
+//    private void dump() {
+//        SpinnerNumberModel model = getNumberModel();
+//        logger.info(
+//                "Current="+model.getValue()+" ("+model.getValue().getClass().getName()+"), "+
+//                "maxValue="+model.getMaximum()+" ("+model.getMaximum().getClass().getName()+"), "+
+//                "minValue="+model.getMinimum()+" ("+model.getMinimum().getClass().getName()+"),"+
+//                "step="+model.getStepSize()+" ("+model.getStepSize().getClass().getName()+")"
+//        );
+//    }
+
+    protected SpinnerNumberModel getNumberModel() {
+        return (SpinnerNumberModel) this.getModel();
+    }
+
+    private Comparable hackValue(Comparable value) {
+        if( !(value instanceof Double) ) {
+            return value;
+        }
+        return ((Number)value).intValue();
+    }
+
+    public int getInteger() {
+        return getNumberModel().getNumber().intValue();
+    }
+
+    public double getDouble() {
+        return getNumberModel().getNumber().doubleValue();
+    }
+
+    public void setDouble(double v) {
+        if (this.fireChanges) {
+            this.fireChanges = false;
+            try {
+                setDouble(v);
+            } finally {
+                this.fireChanges = true;
+            }
+            return;
+        }
+        SpinnerNumberModel model = getNumberModel();
+        model.setValue(v);
+        //dump();
+    }
+
+    public void setInteger(int v) {
+        if (this.fireChanges) {
+            this.fireChanges = false;
+            try {
+                setInteger(v);
+            } finally {
+                this.fireChanges = true;
+            }
+            return;
+        }
+        SpinnerNumberModel model = getNumberModel();
+        model.setValue(v);
+        // dump();
+    }
+
+    public double getMaxValue() {
+        Number n = (Number) getNumberModel().getMaximum();
+        return n.doubleValue();
+    }
+
+    public void setMaxValue(double maxValue) {
+        if (this.fireChanges) {
+            this.fireChanges = false;
+            try {
+                setMaxValue(maxValue);
+            } finally {
+                this.fireChanges = true;
+            }
+            return;
+        }
+        SpinnerNumberModel model = getNumberModel();
+
+        if (model.getValue() instanceof Double) {
+            model.setMaximum(new Double(maxValue));
+        } else {
+            model.setMaximum(new Integer((int) maxValue));
+        }
+        // dump();
+    }
+
+    public double getMinValue() {
+        Number n = (Number) getNumberModel().getMinimum();
+        return n.doubleValue();
+    }
+
+    public void setMinValue(double minValue) {
+        if (this.fireChanges) {
+            this.fireChanges = false;
+            try {
+                setMinValue(minValue);
+            } finally {
+                this.fireChanges = true;
+            }
+            return;
+        }
+        SpinnerNumberModel model = getNumberModel();
+
+        if (model.getValue() instanceof Double) {
+            model.setMinimum(new Double(minValue));
+        } else {
+            model.setMinimum(new Integer((int) minValue));
+        }
+        // dump();
+    }
+
+    public double getStep() {
+        Number n = (Number) getNumberModel().getStepSize();
+        return n.doubleValue();
+    }
+
+    public void setStep(double step) {
+        if (this.fireChanges) {
+            this.fireChanges = false;
+            try {
+                setStep(step);
+            } finally {
+                this.fireChanges = true;
+            }
+            return;
+        }
+
+        SpinnerNumberModel model = getNumberModel();
+
+        if (model.getValue() instanceof Double) {
+            model.setStepSize(new Double(step));
+        } else {
+            model.setStepSize(new Integer((int) step));
+        }
+        // dump();
+    }
+
+    public void addActionListener(final ActionListener listener) {
+        // Me guardo los ActionListeners a parte y no los registro
+        // directamente en el spinner ya que el cliente de JnumberSpiner
+        // espera que solo se invoque a estos listeners por eventos
+        // provocados desde el GUI y no por asignar valores a las
+        // propiedades del JNumberSpinner
+        this.actionListeners.add(listener);
+    }
+
+    @Override
+    protected void fireStateChanged() {
+        // Disparo los evento normales
+        super.fireStateChanged();
+        if( this.fireChanges ) {
+            // Si los cambios no son producidos por asignacion a las propiedades
+            // del JNumberSpinner disparo los actionlistener que haya registrados.
+            for( int i=0; i<this.actionListeners.size(); i ++ ) {
+                ActionListener listener = (ActionListener) this.actionListeners.get(i);
+                listener.actionPerformed(new ActionEvent(this, -1, null));
+            }
+        }
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/swing/JNumberSpinner.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JTextFieldWithSCP.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JTextFieldWithSCP.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JTextFieldWithSCP.java	(revision 42196)
@@ -0,0 +1,205 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.specificcaretposition;
+
+import java.io.Serializable;
+
+import javax.swing.JTextField;
+import javax.swing.text.Document;
+
+import org.gvsig.gui.awt.event.specificCaretPosition.ISpecificCaretPosition;
+import org.gvsig.gui.awt.event.specificCaretPosition.SpecificCaretPositionListeners;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class is a JTextField with two listeners that allow authomatically reset the caret
+ *   position of this component to left (LEFT_POSITIONS), right (RIGHT_POSITIONS) or like JTextField (LIKE_JTEXTCOMPONENT) (do nothing).
+ *   By default is to left. 
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class JTextFieldWithSCP extends JTextField implements ISpecificCaretPosition, Serializable {
+	private static final long serialVersionUID = -7873719783491147038L;
+
+	private int caretPositionMode;
+
+	/**
+	 * @see JTextField#JTextField()
+	 */
+	public JTextFieldWithSCP() {
+		super();
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JTextField#JTextField(javax.swing.text.Document, java.lang.String, int)
+	 */
+	public JTextFieldWithSCP(Document doc, String text, int columns) {
+		super(doc, text, columns);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JTextField#JTextField(int)
+	 */
+	public JTextFieldWithSCP(int columns) {
+		super(columns);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JTextField#JTextField(java.lang.String)
+	 */
+	public JTextFieldWithSCP(String text) {
+		super(text);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JTextField#JTextField(java.lang.String, int)
+	 */
+	public JTextFieldWithSCP(String text, int columns) {
+		super(text, columns);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+//
+//	/**
+//	 * @see JTextField#JTextField()
+//   * @param position The position of text that will be seen (LEFT_POSITIONS, RIGHT_POSITIONS or LIKE_JTEXTCOMPONENT)
+//	 */
+//	public JTextFieldWithSpecificCaretPosition(int position) {
+//		super();
+//		caretPositionMode = position;
+//		initialize();
+//	}
+	
+	/**
+	 * @see JTextField#JTextField(javax.swing.text.Document, java.lang.String, int)
+	 * @param position The position of text that will be seen (LEFT_POSITIONS, RIGHT_POSITIONS or LIKE_JTEXTCOMPONENT)
+	 */
+	public JTextFieldWithSCP(Document doc, String text, int columns, int position) {
+		super(doc, text, columns);
+		caretPositionMode = position;
+		initialize();
+	}
+	
+	/**
+	 * @see JTextField#JTextField(int)
+	 * @param position The position of text that will be seen (LEFT_POSITIONS, RIGHT_POSITIONS or LIKE_JTEXTCOMPONENT)
+	 */
+	public JTextFieldWithSCP(int columns, int position) {
+		super(columns);
+		caretPositionMode = position;
+		initialize();
+	}
+	
+	/**
+	 * @see JTextField#JTextField(java.lang.String)
+	 * @param position The position of text that will be seen (LEFT_POSITIONS, RIGHT_POSITIONS or LIKE_JTEXTCOMPONENT)
+	 */
+	public JTextFieldWithSCP(int position, String text) {
+		super(text);
+		caretPositionMode = position;
+		initialize();
+	}
+	
+	/**
+	 * @see JTextField#JTextField(java.lang.String, int)
+	 * @param position The position of text that will be seen (LEFT_POSITIONS, RIGHT_POSITIONS or LIKE_JTEXTCOMPONENT)
+	 */
+	public JTextFieldWithSCP(String text, int columns, int position) {
+		super(text, columns);
+		caretPositionMode = position;
+		initialize();
+	}
+	
+	/**
+	 * This method adds three listeners to this component:
+	 */
+	private void initialize() {
+		SpecificCaretPositionListeners.setListeners(this);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.awt.event.ISpecificCaretPosition#getCaretPositionMode()
+	 */
+	public int getCaretPositionMode() {
+		return caretPositionMode;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.awt.event.ISpecificCaretPosition#setCaretPositionMode(int)
+	 */
+	public void setCaretPositionMode(int caretPositionMode) {
+		this.caretPositionMode = caretPositionMode;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JTextFieldWithSCP.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JFormattedTextFieldSCP.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JFormattedTextFieldSCP.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JFormattedTextFieldSCP.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.specificcaretposition;
+
+import java.io.Serializable;
+import java.text.Format;
+
+import javax.swing.JFormattedTextField;
+
+import org.gvsig.gui.awt.event.specificCaretPosition.ISpecificCaretPosition;
+import org.gvsig.gui.awt.event.specificCaretPosition.SpecificCaretPositionListeners;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class is a JFormattedTextField with two listeners that allow authomatically reset the caret
+ *   position of this component to left (LEFT_POSITIONS), right (RIGHT_POSITIONS) or like JFormattedTextField (LIKE_JTEXTCOMPONENT) (do nothing).
+ *   By default is to left. 
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class JFormattedTextFieldSCP extends JFormattedTextField implements ISpecificCaretPosition, Serializable {
+	private static final long serialVersionUID = -8224060521711689694L;
+
+	private int caretPositionMode;
+
+	/**
+	 * @see JFormattedTextField#JFormattedTextField()
+	 */
+	public JFormattedTextFieldSCP() {
+		super();
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JFormattedTextField#JFormattedTextField(javax.swing.JFormattedTextField.AbstractFormatter)
+	 */
+	public JFormattedTextFieldSCP(JFormattedTextField.AbstractFormatter formatter) {
+		super(formatter);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JFormattedTextField#JFormattedTextField(javax.swing.JFormattedTextField.AbstractFormatterFactory)
+	 */
+	public JFormattedTextFieldSCP(JFormattedTextField.AbstractFormatterFactory factory) {
+		super(factory);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JFormattedTextField#JFormattedTextField(javax.swing.JFormattedTextField.AbstractFormatterFactory, java.lang.Object)
+	 */
+	public JFormattedTextFieldSCP(JFormattedTextField.AbstractFormatterFactory factory, Object currentValue) {
+		super(factory, currentValue);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JFormattedTextField#JFormattedTextField()
+	 */
+	public JFormattedTextFieldSCP(Format format) {
+		super(format);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * @see JFormattedTextField#JFormattedTextField(java.lang.Object)
+	 */
+	public JFormattedTextFieldSCP(Object value) {
+		super(value);
+		caretPositionMode = LEFT_POSITIONS;
+		initialize();
+	}
+	
+	/**
+	 * This method adds three listeners to this component:
+	 */
+	private void initialize() {
+		SpecificCaretPositionListeners.setListeners(this);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.awt.event.ISpecificCaretPosition#getCaretPositionMode()
+	 */
+	public int getCaretPositionMode() {
+		return caretPositionMode;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.awt.event.ISpecificCaretPosition#setCaretPositionMode(int)
+	 */
+	public void setCaretPositionMode(int caretPositionMode) {
+		this.caretPositionMode = caretPositionMode;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/specificcaretposition/JFormattedTextFieldSCP.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java	(revision 42196)
@@ -0,0 +1,294 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.treelist.listeners;
+
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.util.ArrayList;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JTree;
+import javax.swing.tree.TreePath;
+
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+
+/**
+ * Esta clase contiene la l�gica que a�ade elementos desde el arbol a la lista, arrastrando o
+ * haciendo doble click sobre el elemento en el arbol, elimina elementos de la lista haciendo 
+ * doble click sobre ellos o intercambia elementos arrastrando en la lista de una posici�n 
+ * a otra.
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class TreeListListener implements MouseListener, MouseMotionListener, TreeListComponentListener {
+	private JTree tree = null;
+	private JList 					list = null;
+	private ArrayList				listListeners = null;
+	private TreeListEvent 			ev = new TreeListEvent();
+
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public TreeListListener() {
+	}
+
+	/**
+	 * Asigna la lista
+	 * @param list
+	 */
+	public void setList(JList list) {
+		this.list = list;
+	}
+
+	/**
+	 * Asigna el arbol
+	 * @param tree
+	 */
+	public void setTree(JTree tree) {
+		this.tree = tree;
+	}
+
+	//-------------------------------------------
+	//M�TODOS DEL LISTENER
+	
+	//A�ADIR A LA LISTA
+	//Pinchar con doble click el elemento del arbol
+	
+	//Pichar lista -> obtiene draggLabel
+	//Arrastrar -> draggActive
+	//Released -> !draggActive. Si enterList y se ha arrastrado y se ha pichado un elemento de la lista -> a�ade elemento
+	
+	//ELIMINAR DE LA LISTA
+	//Pinchar con doble click el elemento de la lista.
+	
+	//CAMBIAR EL ORDEN DE LOS ELEMENTOS DE LA LISTA
+	//Pinchar lista -> Obtiene index del elem pinchado
+	//Arrastrar -> draggElement a true
+	//Soltar -> si hay elemento seleccionado estamos dentro de la lista y draggElement es true -> se intercambiar
+	
+	/**
+	 * Variable que contiene la etiqueta seleccionada y arrastrado hasta la lista
+	 */
+	private String draggLabel = null;
+	/**
+	 * Variable que est� a true si estamos arrastrando una etiqueta
+	 */
+	private boolean draggActive = false;
+	/**
+	 * Variable que est� a true si el rat�n ha entrado en la lista
+	 */
+	private boolean enterInList = false;
+	/**
+	 * Elemento seleccionado de la lista. -1 si no hay ninguno;
+	 */
+	private int selectElement = -1;
+	/**
+	 * Variable que est� a true si estamos arrastrando un elemento de la lista
+	 */
+	private boolean draggElement = false;
+	
+	public void deleteElement() {
+		if (list.getSelectedIndex() != -1) {
+			DefaultListModel model = (DefaultListModel) list.getModel();
+
+			// Lanzamos el evento de eliminar un elemento
+			ev.resetValues();
+			ev.setElementRemoved((String) list.getSelectedValue());
+
+			model.remove(list.getSelectedIndex());
+
+			elementRemoved(ev);
+		}
+	}
+	
+	public void insertElement() {
+		if (draggLabel != null) {
+			DefaultListModel model = (DefaultListModel) list.getModel();
+
+			// Si ya esta en la lista no lo a�adimos
+			if (model.indexOf(draggLabel) != -1) return;
+
+			// Lanzamos el evento de a�adir un elemento
+			ev.resetValues();
+			ev.setElementAdded(draggLabel);
+
+			model.addElement(draggLabel);
+//			draggLabel = null;
+
+			elementAdded(ev);
+		}
+	}
+	
+	public void mouseClicked(MouseEvent e) {
+		if (e.getSource() == list)
+			// Si es doble click y hay alg�n elemento seleccionado en la lista lo eliminamos
+			if (e.getClickCount() == 2)
+				deleteElement();
+
+		if (e.getSource() == tree)
+			// Si es doble click y hay alg�n elemento seleccionado en el arbol lo a�adimos
+			if (e.getClickCount() == 2)
+				insertElement();
+	}
+	
+	public void mouseEntered(MouseEvent e) {
+		if(e.getSource() == list)
+			enterInList = true;
+	}
+
+	public void mouseExited(MouseEvent e) {
+		if(e.getSource() == list)
+			enterInList = false;
+	}
+
+	public void mousePressed(MouseEvent e) {
+		selectElement = -1;
+		
+		//Al pulsar sobre el Arbol se captura el elemento seleccionado
+		if(e.getSource() == tree){
+			TreePath[] tp = tree.getSelectionPaths();
+			if(tp != null){
+				String val = tp[0].toString();
+				//Comprobamos que se haya pinchado sobre una rama
+				String[] pathTree = val.split(", ");
+				if(pathTree.length <= 2)
+					draggLabel = null;
+				else
+					draggLabel = val.substring(val.lastIndexOf(", ") + 2, val.lastIndexOf("]"));
+			}
+		}
+		
+		//Al pulsar sobre la lista capturamos el elemento seleccionado
+		if(e.getSource() == list){
+			selectElement = list.getSelectedIndex();
+			if(selectElement < 0)
+				return;
+			
+			//Capturamos datos para el evento elementMoved
+			ev.resetValues();
+			ev.setPositionSourceElement(selectElement);
+			ev.setSourceElement((String)((DefaultListModel)list.getModel()).getElementAt(selectElement));
+		}
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		//Si se ha pinchado sobre un elemento del arbol y se ha arrastrado lo a�adimos
+		if (enterInList){
+			if (draggLabel != null && draggActive == true) {
+				insertElement();
+/*				DefaultListModel model = (DefaultListModel)list.getModel();
+				
+				//Lanzamos el evento de a�adir un elemento
+				ev.setElementAdded(draggLabel);
+				elementAdded(ev);
+				
+				model.addElement(draggLabel);
+*/
+				draggLabel = null;
+			}
+		}
+		
+		//Si se est� arrastrando un elemento de la lista se intercambia por el lugar donde se suelta
+		if(draggElement && e.getSource() == list && selectElement != -1){
+			if(list.getSelectedIndex() != selectElement){
+				DefaultListModel model = (DefaultListModel)list.getModel();
+				int posDst = list.getSelectedIndex();
+				String elemOrig = (String)model.getElementAt(selectElement);
+				
+				ev.setPositionDestElement(posDst);
+				ev.setDestElement((String)((DefaultListModel)list.getModel()).getElementAt(posDst));
+				
+				model.remove(selectElement);
+				model.insertElementAt(elemOrig, posDst);
+
+				elementMoved(ev);
+			}
+		}
+		
+		//Al levantar el click del rat�n desactivamos los arrastres
+		draggActive = false;
+		draggElement = false;
+		selectElement = -1;
+	}
+		
+	public void mouseDragged(MouseEvent e) {
+		//Al arrastrar desde el arbor se pone draggActive a true se se ha pinchado antes en un elemento
+		if(e.getSource() == tree){
+			if(draggLabel != null)
+				draggActive = true;
+		}
+		
+		if(e.getSource() == list){
+			if(selectElement != -1)
+				draggElement = true;
+		}
+	}
+
+	public void mouseMoved(MouseEvent e) {
+	}	
+	
+	/**
+	 * A�ade la lista de listeners
+	 * @param l
+	 */
+	public void setListeners(ArrayList l){
+		this.listListeners = l;
+	}
+
+	/**
+	 * Ejecutamos el m�todo elementAdded de todos los listeners registrados
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e) {
+		if(listListeners == null || listListeners.size() == 0)
+			return;
+		for(int i = 0; i < listListeners.size(); i++)
+			((TreeListComponentListener)listListeners.get(i)).elementAdded(e);
+	}
+	
+	/**
+	 * Ejecutamos el m�todo elementRemoved de todos los listeners registrados
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e) {
+		if(listListeners == null || listListeners.size() == 0)
+			return;
+		for(int i = 0; i < listListeners.size(); i++)
+			((TreeListComponentListener)listListeners.get(i)).elementRemoved(e);
+	}
+
+	/**
+	 * Ejecutamos el m�todo elementMoved de todos los listeners registrados
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent e) {
+		if(listListeners == null || listListeners.size() == 0)
+			return;
+		for(int i = 0; i < listListeners.size(); i++)
+			((TreeListComponentListener)listListeners.get(i)).elementMoved(e);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.treelist.listeners;
+
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+
+/**
+ * Interfaz que contiene los eventos del componente TreeList
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public interface TreeListComponentListener {
+	/**
+	 * Este m�todo es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e);
+	
+	/**
+	 * Este m�todo es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e);
+	
+	/**
+	 * Este m�todo es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListChangeListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListChangeListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListChangeListener.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.treelist.listeners;
+
+import java.util.EventListener;
+
+import org.gvsig.gui.beans.treelist.event.TreeListChangeEvent;
+
+public interface TreeListChangeListener extends EventListener {
+  public void actionChangeSelection(TreeListChangeEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/listeners/TreeListChangeListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/TreeListContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/TreeListContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/TreeListContainer.java	(revision 42196)
@@ -0,0 +1,401 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.treelist;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.ListModel;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.treelist.event.TreeListChangeEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListChangeListener;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+import org.gvsig.gui.beans.treelist.listeners.TreeListListener;
+/**
+ * Componente consistente en un men� de arbol al que se le pueden a�adir
+ * entradas y una lista de elementos debajo de este. Haciendo doble click o
+ * arrastrando un elemento del men� a la lista este queda a�adido en esta.
+ * Haciendo doble click en un elemento de la lista se elimina de esta y
+ * arrastrando elementos dentro de la lista se varia su posici�n en ella.
+ *
+ * @version 31/05/2007
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TreeListContainer extends JPanel implements ActionListener, TreeSelectionListener, ListSelectionListener {
+	private static final long serialVersionUID = 6665259638830401366L;
+	private ArrayList<TreeListChangeListener> actionChangeListeners = new ArrayList<TreeListChangeListener>();
+	private ArrayList<TreeListComponentListener> listListeners = new ArrayList<TreeListComponentListener>();
+	private Hashtable<String, String> map = null;
+
+	// Componentes visuales
+	private JScrollPane            pTree         = null;
+	private JScrollPane            pList         = null;
+	private JTree                  tree          = null;
+	private JList                  list          = null;
+	private JButton                bAdd          = null;
+	private JButton                bDel          = null;
+	private JSplitPane             jSplitPane1   = null;
+	private JPanel                 jPanelButtons = null;
+
+	private DefaultMutableTreeNode raiz          = null;
+	private TreeListListener       listener      = null;
+	private String                 pathToImages  = "images/";
+
+	/**
+	 * This method initializes
+	 */
+	public TreeListContainer() {
+		super();
+		listener = new TreeListListener();
+		initialize();
+		listener.setList(getList());
+		listener.setTree(getTree());
+		this.setPreferredSize(new Dimension(160, 0));
+		getTree().addTreeSelectionListener(this);
+		getList().addListSelectionListener(this);
+	}
+
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		map = new Hashtable<String, String>();
+		raiz =  new DefaultMutableTreeNode(Messages.getText("filtros"));
+		setLayout(new BorderLayout());
+
+		getPList().setMinimumSize(new Dimension(0, 60));
+		jSplitPane1 = new JSplitPane();
+		jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
+		jSplitPane1.setTopComponent(getPTree());
+		jSplitPane1.setBottomComponent(getPList());
+		jSplitPane1.setResizeWeight(1.0);
+		jSplitPane1.setContinuousLayout(true);
+		this.add(jSplitPane1, BorderLayout.CENTER);
+		this.add(getJPanelButtons(), BorderLayout.SOUTH);
+	}
+
+	/**
+	 * Establece el ToolTip del boton de a�adir
+	 * @param text
+	 */
+	public void setAddToolTipText(String text) {
+		getAddButton().setToolTipText(text);
+	}
+
+	/**
+	 * Establece el ToolTip del boton de borrar
+	 * @param text
+	 */
+	public void setDelToolTipText(String text) {
+		getDelButton().setToolTipText(text);
+	}
+
+	/**
+	 * Devuelve el boton de A�adir
+	 * @return
+	 */
+	private JButton getAddButton() {
+		if (bAdd == null) {
+			bAdd = new JButton();
+			bAdd.setIcon(new ImageIcon(getClass().getResource(pathToImages + "addlayer.png")));
+			bAdd.setPreferredSize(new Dimension(22, 19));
+			bAdd.addActionListener(this);
+		}
+		return bAdd;
+	}
+
+	/**
+	 * Devuelve el boton de Borrar
+	 * @return
+	 */
+	private JButton getDelButton() {
+		if (bDel == null) {
+			bDel = new JButton();
+			bDel.setIcon(new ImageIcon(getClass().getResource(pathToImages + "delall.png")));
+			bDel.setPreferredSize(new Dimension(22, 19));
+			bDel.addActionListener(this);
+		}
+		return bDel;
+	}
+	
+	private JPanel getJPanelButtons() {
+		if (jPanelButtons == null) {
+			jPanelButtons = new JPanel();
+			jPanelButtons.setPreferredSize(new Dimension(0, 21));
+
+
+
+
+			FlowLayout flowLayout5 = new FlowLayout();
+			flowLayout5.setHgap(5);
+			flowLayout5.setVgap(0);
+			flowLayout5.setAlignment(java.awt.FlowLayout.CENTER);
+			jPanelButtons.setLayout(flowLayout5);
+
+			jPanelButtons.add(getAddButton(), null);
+			jPanelButtons.add(getDelButton(), null);
+		}
+		return jPanelButtons;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JScrollPane getPTree() {
+		if (pTree == null) {
+			pTree = new JScrollPane();
+			pTree.setViewportBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+			pTree.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+			pTree.setViewportView(getTree());
+		}
+		return pTree;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JScrollPane getPList() {
+		if (pList == null) {
+			pList = new JScrollPane();
+			pList.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
+			pList.setBackground(java.awt.Color.white);
+			pList.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+			pList.setViewportView(getList());
+		}
+		return pList;
+	}
+
+	/**
+	 * This method initializes jTree
+	 *
+	 * @return javax.swing.JTree
+	 */
+	public JTree getTree() {
+		if (tree == null) {
+			tree = new JTree(raiz);
+			tree.addMouseListener(listener);
+			tree.addMouseMotionListener(listener);
+		}
+		return tree;
+	}
+
+	/**
+	 * This method initializes jList
+	 *
+	 * @return javax.swing.JList
+	 */
+	public JList getList() {
+		if (list == null) {
+			DefaultListModel m = new DefaultListModel();
+			list = new JList(m);
+			list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+			list.addMouseListener(listener);
+			list.addMouseMotionListener(listener);
+		}
+		return list;
+	}
+
+	public ListModel getListModel() {
+		return list.getModel();
+	}
+
+	//-------------------------------------------
+	//M�TODOS DE ARBOL
+
+	/**
+	 * A�ade una nueva categoria al arbol
+	 * @param name	Etiqueta que aparece en el arbol.
+	 * @param pos	Posici�n en el arbol de la nueva categoria
+	 */
+	public void addClass(String name, int pos) {
+		DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
+		DefaultMutableTreeNode r = new DefaultMutableTreeNode(name);
+		model.insertNodeInto(r, raiz, pos);
+	}
+
+	/**
+	 * A�ade una entrada a una categoria
+	 * @param name Nombre de la entrada a a�adir
+	 * @param parentName Categoria a la que a�adimos
+	 * @param value Valor asociado a la entrada
+	 */
+	public void addEntry(String name, String parentName, String value){
+		DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
+		for (int i = 0; i < model.getChildCount(raiz); i++) {
+			if (model.getChild(raiz, i).toString().equals(parentName)) {
+				DefaultMutableTreeNode node = (DefaultMutableTreeNode) model.getChild(raiz, i);
+				node.add(new DefaultMutableTreeNode(name));
+				if (value != null)
+					map.put(name, value);
+			}
+		}
+	}
+
+	/**
+	 * M�todo que comprueba si una entrada existe en la lista de seleccion.
+	 * @param value Valor que se quiere comprobar si est� en la lista
+	 * @return true si el valor est� en la lista y false si no lo est�
+	 */
+	public boolean isInList(String value) {
+		DefaultListModel model = (DefaultListModel) getList().getModel();
+		for (int i = 0; i < model.getSize(); i++)
+			if (((String) model.get(i)).equals(value))
+				return true;
+		return false;
+	}
+
+	/**
+	 * A�ade un listener TreeListComponent
+	 * @param e
+	 */
+	public void addTreeListListener(TreeListComponentListener e){
+		listListeners.add(e);
+		listener.setListeners(listListeners);
+	}
+
+	/**
+	 * A�ade un elemento a la lista
+	 * @param element Elemento a a�adir
+	 */
+	public void addElementInList(String element){
+		DefaultListModel model = (DefaultListModel)getList().getModel();
+		model.addElement(element);
+	}
+
+	/**
+	 * Elimina un elemento a la lista
+	 * @param element Elemento a eliminar
+	 */
+	public void removeElementInList(String element){
+		DefaultListModel model = (DefaultListModel)getList().getModel();
+		model.removeElement(element);
+	}
+
+	/**
+	 * Elimina un elemento a la lista por indice
+	 * @param element Indice del elemento a eliminar
+	 */
+	public void removeElementInList(int element){
+		DefaultListModel model = (DefaultListModel) getList().getModel();
+		model.remove(element);
+	}
+
+	@SuppressWarnings("unchecked")
+	public Hashtable getMap() {
+		return map;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void setMap(Hashtable map) {
+		this.map = map;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == getAddButton()) {
+			listener.insertElement();
+		}
+		if (e.getSource() == getDelButton()) {
+			listener.deleteElement();
+		}
+	}
+
+	/**
+	 * A�adir el disparador de cuando se pulsa un bot�n.
+	 * @param listener
+	 */
+	public void addChangeSelectionListener(TreeListChangeListener listener) {
+		if (!actionChangeListeners.contains(listener))
+			actionChangeListeners.add(listener);
+	}
+
+	/**
+	 * Borrar el disparador de eventos de los botones.
+	 * @param listener
+	 */
+	public void removeChangeSelectionListener(TreeListChangeListener listener) {
+		actionChangeListeners.remove(listener);
+	}
+
+	private void callActionChangeListeners(String item) {
+		Iterator<TreeListChangeListener> acIterator = actionChangeListeners.iterator();
+		while (acIterator.hasNext()) {
+			TreeListChangeListener listener = acIterator.next();
+			String name = map.get(item);
+			if (name != null)
+				listener.actionChangeSelection(new TreeListChangeEvent(this, name));
+			else
+				listener.actionChangeSelection(new TreeListChangeEvent(this, item));
+		}
+	}
+
+	public void valueChanged(TreeSelectionEvent e) {
+		String draggLabel = null;
+		if (e.getSource() == tree) {
+			TreePath[] tp = tree.getSelectionPaths();
+			if (tp != null) {
+				String val = tp[0].toString();
+				// Comprobamos que se haya pinchado sobre una rama
+				String[] pathTree = val.split(", ");
+				if (pathTree.length > 2) {
+					draggLabel = val.substring(val.lastIndexOf(", ") + 2, val.lastIndexOf("]"));
+					callActionChangeListeners(draggLabel);
+				}
+			}
+		}
+	}
+
+	public void valueChanged(ListSelectionEvent e) {
+		if (!e.getValueIsAdjusting()) {
+			if (getList().getSelectedValue() != null)
+				callActionChangeListeners(getList().getSelectedValue().toString());
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/TreeListContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListEvent.java	(revision 42196)
@@ -0,0 +1,148 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.treelist.event;
+
+
+/**
+ * Event para el TreeListComponentListener
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class TreeListEvent {
+	
+	private String elementAdded = null;
+	private String elementRemoved = null;
+	private String sourceElement = null;
+	private String DestElement = null;
+	private int positionSourceElement = -1;
+	private int positionDestElement = -1;
+	
+	/**
+	 * Obtiene el elemento a�adido
+	 * @return Elemento a�adido
+	 */
+	public String getElementAdded() {
+		return elementAdded;
+	}
+	
+	/**
+	 * Asigna el elemento a�adido
+	 * @param elementAdded
+	 */
+	public void setElementAdded(String elementAdded) {
+		this.elementAdded = elementAdded;
+	}
+	
+	/**
+	 * Obtiene el elemento eliminado
+	 * @return Elemento eliminado
+	 */
+	public String getElementRemoved() {
+		return elementRemoved;
+	}
+	
+	/**
+	 * Asigna el elemento eliminado
+	 * @param elementRemoved
+	 */
+	public void setElementRemoved(String elementRemoved) {
+		this.elementRemoved = elementRemoved;
+	}
+
+	/**
+	 * Obtiene el elemento de destino
+	 * @return Elemento de destino
+	 */
+	public String getDestElement() {
+		return DestElement;
+	}
+
+	/**
+	 * Asigna el elemento de destino
+	 * @param destElement
+	 */
+	public void setDestElement(String destElement) {
+		DestElement = destElement;
+	}
+
+	/**
+	 * Obtiene la posici�n del elemento de destino
+	 * @return Elemento de destino
+	 */
+	public int getPositionDestElement() {
+		return positionDestElement;
+	}
+
+	/**
+	 * Asigna la posici�n del elemento de destino
+	 * @param positionDestElement
+	 */
+	public void setPositionDestElement(int positionDestElement) {
+		this.positionDestElement = positionDestElement;
+	}
+
+	/**
+	 * Obtiene la posici�n del elemento de origen
+	 * @return Elemento de origen
+	 */
+	public int getPositionSourceElement() {
+		return positionSourceElement;
+	}
+
+	/**
+	 * Asigna la posici�n del elemento de origen
+	 * @param positionSourceElement
+	 */
+	public void setPositionSourceElement(int positionSourceElement) {
+		this.positionSourceElement = positionSourceElement;
+	}
+
+	/**
+	 * Obtiene el elemento de origen
+	 * @return Elemento de origen
+	 */
+	public String getSourceElement() {
+		return sourceElement;
+	}
+
+	/**
+	 * Asigna el elemento de origen
+	 * @param sourceElement
+	 */
+	public void setSourceElement(String sourceElement) {
+		this.sourceElement = sourceElement;
+	}
+	
+	/**
+	 * Resetea los valores
+	 */
+	public void resetValues(){
+		elementAdded = null;
+		elementRemoved = null;
+		sourceElement = null;
+		DestElement = null;
+		positionSourceElement = -1;
+		positionDestElement = -1;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListChangeEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListChangeEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListChangeEvent.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.treelist.event;
+
+import java.util.EventObject;
+
+public class TreeListChangeEvent extends EventObject {
+	private static final long serialVersionUID = -684281519921935004L;
+	String item = null;
+
+	public TreeListChangeEvent(Object source, String item) {
+		super(source);
+		this.item = item;
+	}
+	
+	public String getItem() {
+		return item;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/event/TreeListChangeEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/images/delall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/images/delall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/images/addlayer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/treelist/images/addlayer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/IClientImageNavigator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/IClientImageNavigator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/IClientImageNavigator.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.imagenavigator;
+
+import java.awt.Graphics2D;
+/**
+ * Interfaz que debe implementar quien quiera dibujar en ImageNavigator
+ * @version 12/06/2008
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface IClientImageNavigator {
+
+	/**
+	 * Metodo que es invocado cuando ImageNavigator va a pintar la imagen.
+	 * Pasa un Graphics para hacer el dibujado, y luego todas las posibles
+	 * posiciones para hacer el pintado.
+	 * 
+	 * @param g
+	 * @param left
+	 * @param top
+	 * @param right
+	 * @param bottom
+	 * @param zoom
+	 * @param width
+	 * @param height
+	 * @throws ImageUnavailableException
+	 */
+	public void drawImage(Graphics2D g,
+			double left,
+			double top,
+			double right,
+			double bottom,
+			double zoom,
+			int width,
+			int height) throws ImageUnavailableException;
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/IClientImageNavigator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageUnavailableException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageUnavailableException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageUnavailableException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.imagenavigator;
+/**
+ * Excepcion para cuando no se puede visualizar una imagen en ImageNavigator
+ * 
+ * @version 12/06/2008
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ImageUnavailableException extends Exception {
+	private static final long serialVersionUID = -4801264886991752651L;
+	
+	/**
+	 * Constructs a new exception with the specified detail message.  The
+	 * cause is not initialized, and may subsequently be initialized by
+	 * a call to {@link #initCause}.
+	 *
+	 * @param   message   the detail message. The detail message is saved for 
+	 *          later retrieval by the {@link #getMessage()} method.
+	 */
+	public ImageUnavailableException(String message) {
+		super(message);
+	}
+	
+	public ImageUnavailableException(String message, Throwable e) {
+		super(message, e);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageUnavailableException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/images/help.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/images/help.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/images/error.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/images/error.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/images/close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/images/close.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageNavigator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageNavigator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageNavigator.java	(revision 42196)
@@ -0,0 +1,912 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.imagenavigator;
+
+import java.awt.AlphaComposite;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.RenderingHints;
+import java.awt.color.ColorSpace;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorConvertOp;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+
+import org.gvsig.gui.beans.Messages;
+/**
+ * <code>ImageNavigator</code> es un componente que representa un manejador
+ * de im�genes. En �l se puede desplazar, hacer un zoom out o un zoom in a una
+ * imagen virtual. El componente no trata la imagen en si, solo lanza los
+ * eventos indicando la nueva posici�n y zoom de la imagen, luego es el usuario
+ * el que se encargar� de dibujar esa imagen en la posici�n correspondiente.
+ *
+ * El modo de uso es el siguiente:
+ * - Se puede desplazar una imagen con el bot�n izquierdo del rat�n.
+ * - Se puede hacer zoom in/out con las teclas +/- del teclado.
+ * - Se puede hacer zoom in/out con la rueda del rat�n teniendo en cuenta la
+ * posici�n del mismo.
+ * - Se puede resetear los valores con las teclas 'Espacio' o 0;
+ * - Las teclas 1, 2, 3, 4 y 5 equivalen a zoom 1, 2, 4, 8 y 16 respectivamente.
+ * - La tecla C sirve para centrar la imagen.
+ * - La tecla B sirve para mostrar u ocultar los cuadros del fondo. �til para
+ *   mostrar imagenes con transparencia.
+ * - La tecla H muestra la ayuda.
+ *
+ * @version 04/05/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ImageNavigator extends JComponent implements KeyListener, MouseMotionListener, MouseListener, MouseWheelListener {
+	private static final long serialVersionUID = 1164788214432359272L;
+	private IClientImageNavigator iClient         = null;
+
+	private Image                 image           = null;
+	private Graphics2D            widgetGraphics  = null;
+	private Image                 imageCache      = null;
+	private Graphics2D            cacheGraphics   = null;
+
+	private double                zoom            = 1.0;
+	private double                x1              = 0.0;
+	private double                y1              = 0.0;
+	private boolean               yInverted       = false;
+	private boolean               xInverted       = false;
+	private int                   width           = 0;
+	private int                   height          = 0;
+	private boolean               showHelp        = false;
+	private boolean               showBackground  = false;
+	private Color                 backgroundColor = new Color(224, 224, 224);
+	private ImageIcon             imageIconClose  = null;
+	private ImageIcon             imageIconHelp   = null;
+	private ImageIcon             imageIconError  = null;
+
+	private double                initX1          = 0.0;
+	private double                initY1          = 0.0;
+	private double                initX2          = 100.0;
+	private double                initY2          = 100.0;
+	private double                initZoom        = 1.0;
+	private boolean               autoAdjusted    = true;
+
+	private boolean               errorDrawing    = false;
+	private String                errorDrawingMsg = null;
+
+
+	/**
+	 * Crea un <code>ImageNavigator</code>
+	 */
+	public ImageNavigator() {
+		this.setFocusable(true);
+		this.addKeyListener(this);
+		this.addMouseMotionListener(this);
+		this.addMouseListener(this);
+		this.addMouseWheelListener(this);
+	}
+	
+	/**
+	 * Crea un <code>ImageNavigator</code> especificandole quien pintara el
+	 * componente
+	 * @param iClient
+	 */
+	public ImageNavigator(IClientImageNavigator iClient) {
+		this();
+		setClientImageNavigator(iClient);
+	}
+	
+	public void setClientImageNavigator(IClientImageNavigator iClient) {
+		this.iClient = iClient;
+	}
+
+	/**
+	 * Actualiza las dimensiones para ajustar la imagen a los bordes especificados
+	 * con setViewDimensions.
+	 */
+	private void updateDimensions() {
+		double factor = this.getWidth() / (initX2 - initX1);
+		if (factor > (this.getHeight() / (initY2 - initY1)))
+			factor = this.getHeight() / (initY2 - initY1);
+		zoom = factor;
+		imageCenter();
+	}
+
+	/**
+	 * Centra la imagen
+	 */
+	public void imageCenter() {
+		x1 = initX1;
+		y1 = initY1;
+
+		if (isXInverted())
+			x1 -= ((initX2 - initX1) - this.getWidth() / zoom) / 2.0;
+		else
+			x1 += ((initX2 - initX1) - this.getWidth() / zoom) / 2.0;
+		if (isYInverted())
+			y1 -= ((initY2 - initY1) - this.getHeight() / zoom) / 2.0;
+		else
+			y1 += ((initY2 - initY1) - this.getHeight() / zoom) / 2.0;
+	}
+
+	/**
+	 * Especifica el rectangulo de la imagen a visualizar, pudiendo tener
+	 * cualquiera de los ejes X e Y invertidos
+	 *
+	 * @param x1 Coordenada izquierda
+	 * @param y1 Coordenada superior
+	 * @param x2 Coordenada derecha
+	 * @param y2 Coordenada inferior
+	 */
+	public void setViewDimensions(double x1, double y1, double x2, double y2) {
+		this.initX1 = x1;
+		this.initX2 = x2;
+		this.initY1 = y1;
+		this.initY2 = y2;
+
+		yInverted = (y2 < y1);
+		if (yInverted) {
+			this.initY1 = y2;
+			this.initY2 = y1;
+		}
+
+		xInverted = (x2 < x1);
+		if (xInverted) {
+			this.initX1 = x2;
+			this.initX2 = x1;
+		}
+
+		this.updateDimensions();
+	}
+
+	/**
+	 * Hace un forzado de pintado del buffer temporal de la imagen. Este m�todo
+	 * forzar� una llamada a la funci�n de pintado del cliente.
+	 */
+	public void updateBuffer() {
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+
+	/**
+	 * Especifica el zoom que usar� por defecto el componente.
+	 * @param zoom
+	 */
+	public void setZoom(double zoom) {
+		initZoom = zoom;
+		this.zoom = initZoom;
+		autoAdjusted = false;
+		imageCenter();
+	}
+
+	/**
+	 * Especifica el zoom que usar� por defecto el componente.
+	 * @param zoom
+	 */
+	public void setAutoAdjusted() {
+		autoAdjusted = true;
+		updateDimensions();
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#addNotify()
+	 */
+	public void addNotify() {
+		super.addNotify();
+
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+
+	/**
+	 * Hace un zoom de aumento en las coordenadas especificadas
+	 * @param x
+	 * @param y
+	 */
+	private void ZoomIn(double x, double y) {
+		double xcent = (x / zoom);
+		double ycent = (y / zoom);
+		if (isXInverted())
+			x1 -= xcent;
+		else
+			x1 += xcent;
+		if (isYInverted())
+			y1 -= ycent;
+		else
+			y1 += ycent;
+		zoom = zoom * 2.0;
+		xcent = (x / zoom);
+		ycent = (y / zoom);
+		if (isXInverted())
+			x1 += xcent;
+		else
+			x1 -= xcent;
+		if (isYInverted())
+			y1 += ycent;
+		else
+			y1 -= ycent;
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+
+	/**
+	 * Hace un zoom hacia afuera en las coordenadas especificadas
+	 * @param x
+	 * @param y
+	 */
+	private void ZoomOut(double x, double y) {
+		double xcent = (x / zoom);
+		double ycent = (y / zoom);
+		if (isXInverted())
+			x1 -= xcent;
+		else
+			x1 += xcent;
+		if (isYInverted())
+			y1 -= ycent;
+		else
+			y1 += ycent;
+		zoom = zoom / 2.0;
+		xcent = (x / zoom);
+		ycent = (y / zoom);
+		if (isXInverted())
+			x1 += xcent;
+		else
+			x1 -= xcent;
+		if (isYInverted())
+			y1 += ycent;
+		else
+			y1 -= ycent;
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+
+	/**
+	 * Mostrar o ocultar la ayuda
+	 *
+	 */
+	private void callShowHelp() {
+		showHelp = !showHelp;
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
+	 */
+	public void keyPressed(KeyEvent e) {
+		switch (e.getKeyChar()) {
+			case 'h':
+			case 'H':
+				callShowHelp();
+				break;
+			case '+':
+				ZoomIn(width / 2.0, height / 2.0);
+				autoAdjusted = false;
+				break;
+			case '-':
+				ZoomOut(width / 2.0, height / 2.0);
+				autoAdjusted = false;
+				break;
+			case '1':
+				autoAdjusted = false;
+				this.zoom = initZoom;
+				imageCenter();
+				updateImageCache(true);
+				refreshImage(0, 0);
+				break;
+			case '2':
+				autoAdjusted = false;
+				this.zoom = initZoom * 2.0;
+				imageCenter();
+				updateImageCache(true);
+				refreshImage(0, 0);
+				break;
+			case '3':
+				autoAdjusted = false;
+				this.zoom = initZoom * 4.0;
+				imageCenter();
+				updateImageCache(true);
+				refreshImage(0, 0);
+				break;
+			case '4':
+				autoAdjusted = false;
+				this.zoom = initZoom * 8.0;
+				imageCenter();
+				updateImageCache(true);
+				refreshImage(0, 0);
+				break;
+			case '5':
+				autoAdjusted = false;
+				this.zoom = initZoom * 16.0;
+				imageCenter();
+				updateImageCache(true);
+				refreshImage(0, 0);
+				break;
+			case 'c':
+			case 'C':
+				imageCenter();
+				updateImageCache(true);
+				refreshImage(0, 0);
+				break;
+			case 'b':
+			case 'B':
+				setShowBackground(!isShowBackground());
+				break;
+			case '0':
+			case ' ':
+				setAutoAdjusted();
+				break;
+		}
+	}
+
+	double updateWidth = 0;
+	double updateHeight = 0;
+	/**
+	 * M�todo que hara la invocaci�n al cliente del pintado del trozo de imagen a
+	 * visualizar
+	 * @param forceUpdate
+	 */
+	private void updateImageCache(boolean forceUpdate) {
+		if (getWidgetImage() == null ||
+				(updateWidth == getWidgetImage().getWidth(this) &&
+				updateHeight == getWidgetImage().getHeight(this) &&
+				!forceUpdate))
+			return;
+		updateWidth = getWidgetImage().getWidth(this);
+		updateHeight = getWidgetImage().getHeight(this);
+
+		if (showBackground) {
+			for (int i = 0; (i * 4) <= width; i++) {
+				for (int j = 0; (j * 4) <= height; j++) {
+					if ((i + j) % 2 == 0)
+						getCacheGraphics().setColor(Color.white);
+					else
+						getCacheGraphics().setColor(getBackgroundColor());
+					getCacheGraphics().fillRect(i * 4, j * 4, 4, 4);
+				}
+			}
+		} else {
+			getCacheGraphics().setColor(Color.white);
+			getCacheGraphics().fillRect(0, 0, width, height);
+		}
+
+		double newY1 = 0.0;
+		double newY2 = 0.0;
+		double newX1 = 0.0;
+		double newX2 = 0.0;
+
+		if (isYInverted()) {
+			newY1 = y1 + this.getHeight() / zoom - ((y1 - initY1) * 2.0);
+			newY2 = newY1 - this.getHeight() / zoom;
+		} else {
+			newY1 = y1;
+			newY2 = y1 + this.getHeight() / zoom;
+		}
+
+		if (isXInverted()) {
+			newX1 = x1 + this.getWidth() / zoom - ((x1 - initX1) * 2.0);
+			newX2 = newX1 - this.getWidth() / zoom;
+		} else {
+			newX1 = x1;
+			newX2 = x1 + this.getWidth() / zoom;
+		}
+
+		if ((Double.isNaN(newX1)) || (Double.isNaN(newY1)))
+			return;
+
+		if (iClient != null)
+			try {
+				errorDrawing = false;
+				iClient.drawImage(getCacheGraphics(), newX1, newY1, newX2, newY2, zoom, this.getWidth(), this.getHeight());
+			} catch (ImageUnavailableException e) {
+				getCacheGraphics().setColor(new Color(224, 224, 224));
+				getCacheGraphics().fillRect(0, 0, width, height);
+				errorDrawing = true;
+				errorDrawingMsg = e.getMessage();
+			}
+	}
+
+	private Image getWidgetImage() {
+		int width2 = getBounds().width;
+		int height2 = getBounds().height;
+		if (width2 <= 0)
+			width2 = 1;
+		if (height2 <= 0)
+			height2=1;
+
+		if ((width != width2) || (height != height2)) {
+			image = createImage(width2, height2);
+			imageCache = createImage(width2, height2);
+			if (image == null)
+				return null;
+			widgetGraphics = (Graphics2D) image.getGraphics();
+			cacheGraphics = (Graphics2D) imageCache.getGraphics();
+
+			RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+			hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
+			cacheGraphics.setRenderingHints(hints);
+		}
+
+		width = width2;
+		height = height2;
+		return image;
+	}
+
+	private Graphics2D getWidgetGraphics() {
+		getWidgetImage();
+		return widgetGraphics;
+	}
+
+	private Graphics2D getCacheGraphics() {
+		getWidgetImage();
+		return cacheGraphics;
+	}
+
+	/**
+	 * Redibujar el componente en el graphics temporal
+	 */
+	private void redrawBuffer(int x, int y) {
+		if (showBackground) {
+			for (int i = -2; ((i - 2) * 4) <= width; i++) {
+				for (int j = -2; ((j - 2) * 4) <= height; j++) {
+					if ((i + j) % 2 == 0)
+						getWidgetGraphics().setColor(Color.white);
+					else
+						getWidgetGraphics().setColor(getBackgroundColor());
+					getWidgetGraphics().fillRect((i * 4) + (x % 8), (j * 4) + (y % 8), 4, 4);
+				}
+			}
+		} else {
+			getWidgetGraphics().setColor(Color.white);
+			getWidgetGraphics().fillRect(0, 0, width, height);
+		}
+
+		getWidgetGraphics().drawImage(imageCache, x, y, null);
+
+		if (errorDrawing) {
+			paintError((Graphics2D) getWidgetGraphics());
+		} else {
+			if (showHelp) {
+				paintHelp((Graphics2D) getWidgetGraphics());
+			} else {
+				getWidgetGraphics().drawImage(getIconHelp().getImage(), width - getIconHelp().getIconWidth() - 4, 3, null);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
+	 */
+	public void paint(Graphics g) {
+		if (autoAdjusted) updateDimensions();
+		Graphics2D g2d = (Graphics2D) g;
+		RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
+		g2d.setRenderingHints(hints);
+
+		updateImageCache(false);
+
+		redrawBuffer(0, 0);
+
+		if (image != null) {
+			if (isEnabled()) {
+				g.drawImage(image, 0, 0, this);
+			} else {
+				// Dibujar en escala de grises y aclarado para cuando esta inactivo
+				BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+
+				Graphics big = bi.createGraphics();
+				big.drawImage(image, 0, 0, this);
+
+				ColorConvertOp colorConvert = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
+				colorConvert.filter(bi, bi);
+
+				big.setColor(new Color(255, 255, 255, 164));
+				big.fillRect(0, 0, width, height);
+
+				g.drawImage(bi, getVisibleRect().x, getVisibleRect().y, this);
+			}
+		}
+	}
+
+	/**
+	 * Redibujar el componente en el graphics temporal y representarlo en el
+	 * componente
+	 */
+	private void refreshImage(int x, int y) {
+		Graphics2D g2d = (Graphics2D) getGraphics();
+		if (g2d == null)
+			return;
+		RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
+		g2d.setRenderingHints(hints);
+		redrawBuffer(x, y);
+
+		if (image != null)
+			getGraphics().drawImage(image, 0, 0, this);
+	}
+
+	/**
+	 * Devuelve el icono de cerrar
+	 * @return
+	 */
+	private ImageIcon getIconClose() {
+		if (imageIconClose == null) {
+			imageIconClose = new ImageIcon(ImageNavigator.class.getResource("images/close.png"));
+		}
+		return imageIconClose;
+	}
+
+	/**
+	 * Devuelve el icono de error
+	 * @return
+	 */
+	private ImageIcon getIconError() {
+		if (imageIconError == null) {
+			imageIconError = new ImageIcon(ImageNavigator.class.getResource("images/error.png"));
+		}
+		return imageIconError;
+	}
+
+	/**
+	 * Devuelve el icono ayuda
+	 * @return
+	 */
+	private ImageIcon getIconHelp() {
+		if (imageIconHelp == null) {
+			imageIconHelp = new ImageIcon(ImageNavigator.class.getResource("images/help.png"));
+		}
+		return imageIconHelp;
+	}
+
+	private void paintHelp(Graphics2D g) {
+		int sep = 13;
+		int pos = sep + 1;
+
+		int alto = sep * 8 + 6;
+
+		Image image2 = createImage(width, alto);
+		Graphics2D graphics2 = (Graphics2D) image2.getGraphics();
+
+		RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
+		graphics2.setRenderingHints(hints);
+
+		alto--;
+
+		Color color1 = new Color(255, 255, 178);
+		Color color2 = new Color(255, 255, 74);
+		graphics2.setPaint(new GradientPaint(0, 0, color1, 0, alto, color2, false));
+		graphics2.fillRect(0, 0, width, alto);
+
+		graphics2.setColor(new Color(0, 0, 0));
+
+		graphics2.setFont(new java.awt.Font("Tahoma", 1, sep - 2));
+
+		graphics2.drawString(Messages.getText("teclas") + ":", 10, pos);
+
+		graphics2.setFont(new java.awt.Font("Tahoma", 0, sep - 2));
+		pos += sep;
+		graphics2.drawString(Messages.getText("ayuda_c"), 20, pos);
+		pos += sep;
+		graphics2.drawString(Messages.getText("ayuda_0"), 20, pos);
+		pos += sep;
+		graphics2.drawString(Messages.getText("ayuda_1_5"), 20, pos);
+		pos += sep;
+		graphics2.drawString(Messages.getText("ayuda_more_less"), 20, pos);
+		pos += sep;
+		graphics2.drawString(Messages.getText("ayuda_wheel"), 20, pos);
+		pos += sep;
+		graphics2.drawString(Messages.getText("ayuda_background"), 20, pos);
+		pos += sep;
+		graphics2.drawString(Messages.getText("ayuda_h"), 20, pos);
+
+		graphics2.setColor(new Color(185, 185, 185));
+		graphics2.drawLine(0, alto, width, alto);
+
+		graphics2.drawImage(getIconClose().getImage(), width - getIconClose().getIconWidth() - 4, 3, null);
+
+		AlphaComposite myAlpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
+		g.setComposite(myAlpha);
+
+		g.drawImage(image2, 0, 0, this);
+
+		myAlpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
+		g.setComposite(myAlpha);
+	}
+	
+	private ArrayList<String> splitString4Width(Graphics2D g, String msg, int width) {
+		String words[] = msg.split(" ");
+
+		ArrayList<String> newString = new ArrayList<String>();
+		String aux = "";
+		for (int i = 0; i < words.length; i++) {
+			if (aux.length() == 0) {
+				aux = words[i];
+				continue;
+			}
+			if (g.getFontMetrics().getStringBounds(aux + " " + words[i], g).getWidth() <= width) {
+				aux += " " + words[i];
+				continue;
+			}
+
+			newString.add(aux);
+			aux = words[i];
+		}
+		newString.add(aux);
+
+		return newString;
+	}
+
+	private ArrayList<String> splitString4Intro(Graphics2D g, String msg, int width) {
+		String words[] = msg.split("\n");
+		ArrayList<String> newString = new ArrayList<String>();
+		for (int i = 0; i < words.length; i++) {
+			ArrayList<String> more = splitString4Width(g, words[i], width);
+			for (int j = 0; j < more.size(); j++) {
+				newString.add(more.get(j));
+			}
+		}
+
+		return newString;
+	}
+	
+	private void paintError(Graphics2D g) {
+		ArrayList<String> errors = splitString4Intro(g, errorDrawingMsg, width - 30);
+
+		int size = errors.size();
+		if (size < 6)
+			size = 6;
+		
+		int sep = 13;
+		int pos = sep + 2;
+
+		int alto = sep * size + 8;
+
+		Image image2 = createImage(width, alto);
+		Graphics2D graphics2 = (Graphics2D) image2.getGraphics();
+
+		alto--;
+
+		Color color1 = new Color(255, 152, 152);
+		Color color2 = new Color(255, 100, 100);
+		graphics2.setPaint(new GradientPaint(0, 0, color1, 0, alto, color2, false));
+		graphics2.fillRect(0, 0, width, alto);
+
+		graphics2.setColor(new Color(0, 0, 0));
+
+		graphics2.setFont(new java.awt.Font("Tahoma", 0, sep - 2));
+
+		for (int i=0; i<errors.size(); i++) { 
+			graphics2.drawString((String) errors.get(i), 24, pos);
+			pos+=sep;
+		}
+		
+		graphics2.drawImage(getIconError().getImage(), 4, 4, null);
+
+		graphics2.setColor(new Color(185, 185, 185));
+		graphics2.drawLine(0, alto, width, alto);
+
+		g.drawImage(image2, 0, 0, this);
+	}
+
+
+	Point mouse = null;
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		if (!isInteractiveEnabled())
+			return;
+		requestFocus();
+
+		if ((e.getX() > (width - 20)) && (e.getY() < 20))
+			return;
+
+		if ((e.getButton() != MouseEvent.BUTTON1) && (e.getButton() != MouseEvent.BUTTON2))
+			return;
+
+		// Oscurece la imagen cuando se mueve
+		Color gris = new Color(0, 0, 0, 16);
+		getCacheGraphics().setColor(gris);
+		getCacheGraphics().fillRect(0, 0, width-1, height-1);
+
+		// Pone un borde a la imagen cuando se mueve
+		getCacheGraphics().setColor(Color.gray);
+		getCacheGraphics().drawRect(0, 0, width-1, height-1);
+
+		mouse = new Point(e.getX(), e.getY());
+		changePos(e.getX(), e.getY());
+		autoAdjusted = false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) {
+		if (!isInteractiveEnabled())
+			return;
+		changePos(e.getX(), e.getY());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) {
+		if (!isInteractiveEnabled())
+			return;
+		if (mouse != null) {
+			x1 = x1 - ((e.getX() - mouse.getX())/zoom);
+			y1 = y1 - ((e.getY() - mouse.getY())/zoom);
+			updateImageCache(true);
+			refreshImage(0, 0);
+		}
+		mouse = null;
+	}
+
+	private void changePos(int x, int y) {
+		if (mouse != null)
+			refreshImage((int) (x - mouse.getX()), (int) (y - mouse.getY()));
+	}
+
+	/**
+	 * Evento de la rueda del rat�n para hacer Zoom In o Zoom Out en la posici�n
+	 * del puntero.
+	 */
+	public void mouseWheelMoved(MouseWheelEvent e) {
+		if (!isInteractiveEnabled())
+			return;
+
+		if (e.getWheelRotation() > 0) {
+			ZoomOut(isXInverted() ? this.getWidth() - e.getX() : e.getX(), isYInverted() ? this.getHeight() - e.getY() : e.getY());
+			autoAdjusted = false;
+		}
+		if (e.getWheelRotation() < 0) {
+			ZoomIn(isXInverted() ? this.getWidth() - e.getX() : e.getX(), isYInverted() ? this.getHeight() - e.getY() : e.getY());
+			autoAdjusted = false;
+		}
+	}
+
+	/**
+	 * Obtener si el eje de las Y esta invertido
+	 * @return
+	 */
+	private boolean isYInverted() {
+		return yInverted;
+	}
+
+	/**
+	 * Obtener si el eje de las X esta invertido
+	 * @return
+	 */
+	private boolean isXInverted() {
+		return xInverted;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) {
+		if (!isInteractiveEnabled())
+			return;
+		if ((e.getX() > (width - 20)) && (e.getY() < 20)) {
+			setCursor(new Cursor(Cursor.HAND_CURSOR));
+			if (showHelp)
+				setToolTipText(Messages.getText("cerrar"));
+			else
+				setToolTipText(Messages.getText("ayuda"));
+		} else {
+			setCursor(new Cursor(Cursor.MOVE_CURSOR));
+			setToolTipText(null);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+	 */
+	public void mouseClicked(MouseEvent e) {
+		if (!isInteractiveEnabled())
+			return;
+		if ((e.getX() > (width - 20)) && (e.getY() < 20))
+			callShowHelp();
+	}
+
+	public void keyReleased(KeyEvent e) {}
+	public void keyTyped(KeyEvent e) {}
+	public void mouseEntered(MouseEvent e) {}
+	public void mouseExited(MouseEvent e) {}
+
+	/**
+	 * Define el color de los recuadros del fondo
+	 *
+	 * @param backgroundColor the backgroundColor to set
+	 */
+	public void setBackgroundColor(Color backgroundColor) {
+		this.backgroundColor = backgroundColor;
+	}
+
+	/**
+	 * Devuelve el color de los recuadros del fondo
+	 * @return the backgroundColor
+	 */
+	public Color getBackgroundColor() {
+		return backgroundColor;
+	}
+
+	/**
+	 * Devuelve si se esta mostrando o no la cuadricula de fondo.
+	 * @return the showBackground
+	 */
+	public boolean isShowBackground() {
+		return showBackground;
+	}
+
+	/**
+	 * Define si se muestra o no la cuadricula de fondo. Util para imagenes
+	 * transparentes
+	 * @param showBackground the showBackground to set
+	 */
+	public void setShowBackground(boolean showBackground) {
+		this.showBackground = showBackground;
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+	
+	/**
+	 * Devuelve si se pueden gestionar los eventos segun el estado del componente
+	 * @return
+	 */
+	private boolean isInteractiveEnabled() {
+		if (isEnabled() && !errorDrawing)
+			return true;
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.swing.JComponent#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		updateImageCache(true);
+		refreshImage(0, 0);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/imagenavigator/ImageNavigator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelActionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelActionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelActionListener.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.gui.beans.wizard;
+/**
+ * <p>
+ * Listener for the wizard. It has methods to manage the events that can
+ * be thrown by the wizard.
+ * </p> 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface WizardPanelActionListener {
+
+	/**
+	 * This event is thrown when the finish button is clicked.
+	 * @param wizardPanel
+	 * The wizard that has thrown the event.
+	 */
+	public void finish(WizardPanel wizardPanel);
+	
+	/**
+	 * This event is thrown when the cancel button is clicked.
+	 * @param wizardPanel
+	 * The wizard that has thrown the event.
+	 */
+	public void cancel(WizardPanel wizardPanel);
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelActionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelCancelAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelCancelAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelCancelAction.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.gui.beans.wizard;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.JWizardComponents;
+
+/**
+ * <p>
+ * This class links the click action in the cancel button method
+ * and calls the {@link WizardPanelActionListener#cancel(WizardPanel)}
+ * method.
+ * </p>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class WizardPanelCancelAction extends CancelAction{
+	private WizardPanel wizardPanel = null;
+	
+	public WizardPanelCancelAction(JWizardComponents wizardComponents, WizardPanel wizardPanel) {
+		super(wizardComponents);
+		this.wizardPanel = wizardPanel;
+	}
+
+	public void performAction() {
+		if (wizardPanel.getWizardPanelActionListener() != null){
+			wizardPanel.getWizardPanelActionListener().cancel(wizardPanel);
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelCancelAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelWithLogo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelWithLogo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelWithLogo.java	(revision 42196)
@@ -0,0 +1,165 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.wizard;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+import jwizardcomponent.common.SimpleButtonPanel;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.gui.beans.wizard.panel.OptionPanelContainer;
+
+public class WizardPanelWithLogo extends JPanel {
+
+    private static final long serialVersionUID = 7506729926181935234L;
+    public final static int ACTION_PREVIOUS = 0;
+    public final static int ACTION_NEXT = 1;
+    public final static int ACTION_CANCEL = 2;
+    public final static int ACTION_FINISH = 3;
+
+    DefaultJWizardComponents wizardComponents;
+
+    JPanel buttonPanel;
+    JLabel statusLabel = new JLabel();
+
+    ImageIcon logo;
+
+    public WizardPanelWithLogo(ImageIcon logo) {
+        this.logo = logo;
+        wizardComponents = new DefaultJWizardComponents();
+        init();
+    }
+
+    public WizardPanelWithLogo() {
+        wizardComponents = new DefaultJWizardComponents();
+        this.logo = null;
+        init();
+    }
+
+    private void init() {
+
+        this.setLayout(new BorderLayout());
+        if (logo != null) {
+            JPanel logoPanel = new JPanel();
+            logoPanel.add(new JLabel(logo));
+            logoPanel.setBackground(Color.WHITE);
+            this.add(logoPanel, BorderLayout.WEST);
+        }
+
+        this.add(wizardComponents.getWizardPanelsContainer(),
+            BorderLayout.CENTER);
+
+        JPanel auxPanel = new JPanel(new BorderLayout());
+        auxPanel.add(new JSeparator(), BorderLayout.NORTH);
+
+        buttonPanel = new SimpleButtonPanel(wizardComponents);
+        auxPanel.add(buttonPanel);
+        this.add(auxPanel, BorderLayout.SOUTH);
+
+        wizardComponents.setFinishAction(new FinishAction(wizardComponents) {
+
+            public void performAction() {
+                // dispose();
+            }
+        });
+        wizardComponents.setCancelAction(new CancelAction(wizardComponents) {
+
+            public void performAction() {
+                // dispose();
+            }
+        });
+    }
+
+    public void doAction(int action) {
+        switch (action) {
+        case ACTION_NEXT:
+            getWizardComponents().getNextButton().getActionListeners()[0]
+                .actionPerformed(null);
+            break;
+        case ACTION_PREVIOUS:
+            getWizardComponents().getBackButton().getActionListeners()[0]
+                .actionPerformed(null);
+            break;
+        }
+    }
+
+    public DefaultJWizardComponents getWizardComponents() {
+        return wizardComponents;
+    }
+
+    public void setWizardComponents(DefaultJWizardComponents aWizardComponents) {
+        wizardComponents = aWizardComponents;
+    }
+
+    @Override
+    public void show() {
+        wizardComponents.updateComponents();
+        super.setVisible(true);
+    }
+
+    public void addOptionPanel(OptionPanel optionPanel) {
+        getWizardComponents().addWizardPanel(
+            new OptionPanelContainer(getWizardComponents(), optionPanel));
+    }
+
+    public void setNextButtonEnabled(boolean isEnabled) {
+        getWizardComponents().getNextButton().setEnabled(isEnabled);
+    }
+
+    public void setFinishButtonEnabled(boolean isVisible) {
+        getWizardComponents().getFinishButton().setEnabled(isVisible);
+    }
+
+    public void setCancelButtonEnabled(boolean isVisible) {
+        getWizardComponents().getCancelButton().setEnabled(isVisible);
+    }
+
+    private void setFinishAction(FinishAction finishAction) {
+        getWizardComponents().setFinishAction(finishAction);
+    }
+
+    private void setCancelAction(CancelAction cancelAction) {
+        getWizardComponents().setCancelAction(cancelAction);
+    }
+
+    public void setWizardListener(WizardPanel wizardPanel) {
+        setFinishAction(new WizardPanelFinishAction(getWizardComponents(),
+            wizardPanel));
+        setCancelAction(new WizardPanelCancelAction(getWizardComponents(),
+            wizardPanel));
+    }
+
+    public void setBackButtonEnabled(boolean isEnabled) {
+        getWizardComponents().getBackButton().setEnabled(isEnabled);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelWithLogo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelFinishAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelFinishAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelFinishAction.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.gui.beans.wizard;
+
+import jwizardcomponent.FinishAction;
+import jwizardcomponent.JWizardComponents;
+
+/**
+ * <p>
+ * This class links the click action in the cancel button method
+ * and calls the {@link WizardPanelActionListener#finish(WizardPanel)}
+ * method.
+ * </p>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class WizardPanelFinishAction extends FinishAction{
+	private WizardPanel wizardPanel = null;
+	
+	public WizardPanelFinishAction(JWizardComponents wizardComponents, WizardPanel wizardPanel) {
+		super(wizardComponents);
+		this.wizardPanel = wizardPanel;
+	}
+
+	public void performAction() {
+		if (wizardPanel.getWizardPanelActionListener() != null){		
+			wizardPanel.getWizardPanelActionListener().finish(wizardPanel);
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanelFinishAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanelContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanelContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanelContainer.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.gui.beans.wizard.panel;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JOptionPane;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * This class is a wizard panel that displays the panel returned by the
+ * {@link OptionPanel#getJPanel()} method int the top of the wizard. It also
+ * call the other methods when the user clicks a button.
+ * <p>
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class OptionPanelContainer extends JWizardPanel {
+
+    private static final long serialVersionUID = 3947658150325230122L;
+    private OptionPanel optionPanel = null;
+    private static final Logger log =
+        LoggerFactory.getLogger(OptionPanelContainer.class);
+
+    public OptionPanelContainer(JWizardComponents wizardComponents,
+        OptionPanel optionPanel) {
+        super(wizardComponents);
+        this.optionPanel = optionPanel;
+        setLayout(new BorderLayout());
+        setBorder(javax.swing.BorderFactory.createCompoundBorder(
+            javax.swing.BorderFactory.createTitledBorder(optionPanel
+                .getPanelTitle()), javax.swing.BorderFactory.createEmptyBorder(
+                5, 5, 5, 5)));
+        add(optionPanel.getJPanel(), BorderLayout.CENTER);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see jwizardcomponent.JWizardPanel#back()
+     */
+    @Override
+    public void back() {
+        optionPanel.lastPanel();
+        super.back();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see jwizardcomponent.JWizardPanel#next()
+     */
+    @Override
+    public void next() {
+        try {
+            optionPanel.nextPanel();
+            super.next();
+        } catch (NotContinueWizardException e) {
+            // this is not an error and not need to raise a error or
+            // warning in the log.
+            log.info("It is not possible to continue with the wizard. "+e.displayMessage());
+            if (e.displayMessage()) {
+                JOptionPane.showMessageDialog(e.getComponent(), e
+                    .getLocalizedMessageStack());
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see jwizardcomponent.JWizardPanel#update()
+     */
+    @Override
+    public void update() {
+        optionPanel.updatePanel();
+        super.update();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanelContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/ProgressOptionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/ProgressOptionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/ProgressOptionPanel.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.gui.beans.wizard.panel;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+
+/**
+ * <p>
+ * This panel implements a progress bar that can be added to a wizard.
+ * <p>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class ProgressOptionPanel extends JPanel {
+	private JLabel pluginLabel;
+	private JProgressBar progressBar;
+	private JLabel progressLabel;
+
+	public ProgressOptionPanel() {
+		super();		
+		initComponents();		
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		JPanel northPanel = new JPanel();
+		northPanel.setLayout(new GridBagLayout());
+		
+		progressBar = new JProgressBar();
+		progressLabel = new JLabel();
+		pluginLabel = new JLabel();
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new Insets(2, 2, 2, 2);
+		northPanel.add(progressBar, gridBagConstraints);
+
+		progressLabel.setFont(new Font("DejaVu Sans", 0, 11)); // NOI18N
+		progressLabel.setText("task");
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(5, 2, 2, 2);
+		northPanel.add(progressLabel, gridBagConstraints);
+
+		pluginLabel.setText("plugin");
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(5, 2, 2, 2);
+		northPanel.add(pluginLabel, gridBagConstraints);
+		
+	    setLayout(new BorderLayout());
+		add(northPanel, BorderLayout.NORTH);
+	}
+
+	/**
+	 * @param plugin the plugin to set
+	 */
+	public void setMainText(String plugin) {
+		this.pluginLabel.setText(plugin);
+	}	
+	
+	public void setSecondaryText(String plugin) {
+		this.progressLabel.setText(plugin);
+	}		
+	
+	public void setProgress(int progress){
+		progressBar.setValue(progress);
+	}	
+	
+	public void setExceptionText(String text, Exception e) {
+		progressLabel.setText(text);		
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/ProgressOptionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/NotContinueWizardException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/NotContinueWizardException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/NotContinueWizardException.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.gui.beans.wizard.panel;
+
+import java.awt.Component;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * <p>
+ * This exception is thrown if the wizard can not continue by any reason.
+ * </p>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class NotContinueWizardException extends BaseException{
+	private static final long serialVersionUID = -850687874081155952L;
+	private static final String KEY = "not_continue_with_wizard";	
+	private Component component = null;
+	private boolean displayMessage = true;
+	
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public NotContinueWizardException(String message, Throwable cause, Component component) {
+		super(message, cause, KEY, serialVersionUID);		
+		this.component = component;
+	}
+	
+	public NotContinueWizardException(String message, Component component, boolean displayMessage) {
+	    super(message, KEY, serialVersionUID);
+	    this.component = component;
+	    this.displayMessage = displayMessage;
+    }
+	
+	public Component getComponent() {
+		return component;
+	}
+	
+	public boolean displayMessage(){
+	    return displayMessage;
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/NotContinueWizardException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanel.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.gui.beans.wizard.panel;
+
+import javax.swing.JPanel;
+
+
+/**
+ * <p>
+ * This interface has to be implemented by all the classes
+ * that are a part of the wizard. 
+ * </p>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface OptionPanel {
+	/**
+	 * Returns a title for the panel.
+	 * @return
+	 * The panel title.
+	 */
+	public String getPanelTitle();
+
+	/**
+	 * This method is called when the next button is clicked
+	 */
+	public void nextPanel() throws NotContinueWizardException;
+
+	/**
+	 * This method is called when the last button is clicked
+	 */
+	public void lastPanel();
+	
+	/**
+	 * This method is called when the panel is displayed
+	 */
+	public void updatePanel();
+		
+	/**
+	 * Return the panel to display.
+	 * @return
+	 * The panel.
+	 */
+	public JPanel getJPanel();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/OptionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/SelectFileOptionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/SelectFileOptionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/SelectFileOptionPanel.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.gui.beans.wizard.panel;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.File;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.gvsig.gui.beans.openfile.FileTextField;
+
+/**
+ * <p>
+ * This panel implements a panel to select a file that can be added to a wizard.
+ * </p>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class SelectFileOptionPanel extends JPanel implements DocumentListener{
+	private JLabel fileLabel;
+	private FileTextField fileTextField;
+	private javax.swing.JPanel northPanel;
+
+	public SelectFileOptionPanel(String fileText) {
+		super();		
+		initComponents();
+		if (fileText != null){
+		    fileLabel.setText(fileText + ":");
+		}
+		initListeners();
+	}
+	
+    private void initListeners() {	
+		Object obj = fileTextField.getComponent(0);
+		if ((obj != null) && (obj instanceof JTextField)) {
+			((JTextField)obj).getDocument().addDocumentListener(this);	
+		}
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		northPanel = new JPanel();
+		fileLabel = new JLabel();
+		fileTextField = new FileTextField();
+
+		setLayout(new BorderLayout());
+
+		northPanel.setLayout(new GridBagLayout());
+
+		northPanel.add(fileLabel, new GridBagConstraints());
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		northPanel.add(fileTextField, gridBagConstraints);
+
+		add(northPanel, BorderLayout.NORTH);
+	}
+
+	public File getSelectedFile(){
+		return fileTextField.getSelectedFile();
+	}
+
+	public String getSelectedFileName(){
+		return fileTextField.getSelectedFile().getAbsolutePath();
+	}
+
+	protected void checkNextButtonEnabled(){
+
+	}
+
+	public void changedUpdate(DocumentEvent e) {
+		checkNextButtonEnabled();		
+	}
+
+	public void insertUpdate(DocumentEvent e) {
+		checkNextButtonEnabled();			
+	}
+
+	public void removeUpdate(DocumentEvent e) {
+		checkNextButtonEnabled();			
+	}   
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/panel/SelectFileOptionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanel.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2010 {Prodevelop}   {Task}
+*/
+ 
+package org.gvsig.gui.beans.wizard;
+
+
+/**
+ * This interface must be implemented by all the wizards. It just have a 
+ * methods to manage the events that the wizard throws.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface WizardPanel {	
+	
+	/**
+	 * @param wizardActionListener
+	 * sets the listener for the action events.
+	 */
+	public void setWizardPanelActionListener(WizardPanelActionListener wizardActionListener);
+	
+	/**
+	 * @return
+	 * the listener for the action events
+	 */
+	public WizardPanelActionListener getWizardPanelActionListener();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/wizard/WizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/ButtonBarContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/ButtonBarContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/ButtonBarContainer.java	(revision 42196)
@@ -0,0 +1,185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.buttonbar;
+
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+public class ButtonBarContainer extends JPanel {
+	private static final long serialVersionUID = -2556987128553063939L;
+
+	private ArrayList<JButton> buttons = new ArrayList<JButton>();
+
+	private int       wComp              = 400;
+	private int       hComp              = 26;
+	private String    pathToImages       = "images/";
+	private boolean   disableAllControls = false;
+	private boolean[] buttonsState       = null;
+
+
+	/**
+	 * This is the default constructor
+	 */
+	public ButtonBarContainer() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		this.setLayout(flowLayout);
+		this.setSize(wComp, hComp);
+		}
+
+
+	/**
+	 * A�ade un boton al ArrayList de los botones.
+	 *
+	 * @param iconName: nombre del icono asignado al boton. La imagen tendr�a que
+	 * 					estar dentro de la carpeta "images/"
+	 * @param tip: tip del boton;
+	 * @param order: orden que ocupar� el boton dentro del control
+	 */
+	public void addButton(String iconName, String tip, int order){
+		JButton bt = new JButton();
+
+		bt.setPreferredSize(new java.awt.Dimension(22, 22));
+		try{
+			if (iconName != null)
+				bt.setIcon(new ImageIcon(getClass().getResource(pathToImages + iconName)));
+		}catch(NullPointerException exc){
+			//El icono no existe -> No se a�ade ninguno
+		}
+
+		if(tip != null)
+			bt.setToolTipText(tip);
+
+		buttons.add(order, bt);
+		addList();
+
+	}
+
+	/**
+	 * Elimina el bot�n correspondiente al indice que le pasamos.
+	 * @param index
+	 */
+	public void delButton(int index){
+		buttons.remove(index);
+		this.removeAll();
+		addList();
+	}
+
+	/**
+	 * A�ade en el panel los botones que tenemos en el ArrayList.
+	 *
+	 */
+	public void addList(){
+		for(int i = 0 ; i < buttons.size() ; i++){
+			this.add((JButton)buttons.get(i));
+		}
+	}
+
+
+	/**
+	 * Esta funci�n deshabilita todos los controles y guarda sus valores
+	 * de habilitado o deshabilitado para que cuando se ejecute restoreControlsValue
+	 * se vuelvan a quedar como estaba
+	 */
+	public void disableAllControls(){
+		if(!disableAllControls){
+			disableAllControls = true;
+
+			buttonsState = new boolean[buttons.size()];
+
+
+
+			for (int i = 0 ; i < buttons.size() ; i++){
+
+				//Salvamos los estados
+				buttonsState[i] = ((JButton)buttons.get(i)).isEnabled();
+				//Desactivamos controles
+				((JButton)buttons.get(i)).setEnabled(false);
+			}
+		}
+	}
+
+	/**
+	 * Esta funci�n deja los controles como estaban al ejecutar la funci�n
+	 * disableAllControls
+	 */
+	public void restoreControlsValue(){
+		if(disableAllControls){
+			disableAllControls = false;
+
+			for(int i = 0 ; i < buttons.size() ; i++){
+				((JButton)buttons.get(i)).setEnabled(buttonsState[i]);
+			}
+		}
+	}
+
+	/**
+	 * M�todo para acceder a los botones del control;
+	 * @param index
+	 * @return
+	 */
+	public JButton getButton(int index){
+		return (JButton)buttons.get(index);
+	}
+
+	/**
+	 * M�todo para establecer la posici�n de los botones dentro del control.
+	 * @param align: "left" o "right"
+	 */
+	public void setButtonAlignment(String align){
+		FlowLayout layout = new FlowLayout();
+		layout.setHgap(2);
+		layout.setVgap(0);
+
+		if (align.equals("right"))
+			layout.setAlignment(FlowLayout.RIGHT);
+		else
+			layout.setAlignment(FlowLayout.LEFT);
+
+		this.setLayout(layout);
+	}
+
+	public void setComponentBorder(boolean br){
+		if(br)
+			this.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		if(!br)
+			this.setBorder(javax.swing.BorderFactory.createEmptyBorder());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/ButtonBarContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/fullExtent.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/fullExtent.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/import.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/import.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/rois.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/rois.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/selectTool.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/selectTool.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/export.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/export.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/down.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/buttonbar/images/down.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooserListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooserListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooserListener.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.colorchooser;
+
+import java.util.EventListener;
+import java.util.EventObject;
+
+public interface ColorChooserListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente. Nunca
+	 * se dispara mientras se hace un dragged con el rat�n.
+	 * @param e
+	 */
+	public void actionValueChanged(EventObject e);
+
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente mientras se
+	 * hace un dragged con el rat�n.
+	 * @param e
+	 */
+	public void actionValueDragged(EventObject e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooserListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooser.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.colorchooser;
+
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.Iterator;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.checkslidertext.CheckColorSliderTextContainer;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderEvent;
+import org.gvsig.gui.beans.doubleslider.DoubleSliderListener;
+/**
+ *
+ * @version 03/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ColorChooser extends JPanel implements DoubleSliderListener {
+	private static final long serialVersionUID = 2397304969793748653L;
+
+	private ArrayList<ColorChooserListener> actionCommandListeners = new ArrayList<ColorChooserListener>();
+
+	private CheckColorSliderTextContainer sliderRed   = null;
+	private CheckColorSliderTextContainer sliderGreen = null;
+	private CheckColorSliderTextContainer sliderBlue  = null;
+	private CheckColorSliderTextContainer sliderAlpha = null;
+
+	public ColorChooser() {
+		initialize();
+	}
+
+	private void initialize() {
+		setLayout(new GridBagLayout());
+		sliderRed = new CheckColorSliderTextContainer(0, 255, 0, "R", true);
+		sliderGreen = new CheckColorSliderTextContainer(0, 255, 0, "G", true);
+		sliderBlue = new CheckColorSliderTextContainer(0, 255, 0, "B", true);
+		sliderAlpha = new CheckColorSliderTextContainer(0, 255, 255, "A", true);
+		sliderRed.setCheckboxVisible(false);
+		sliderGreen.setCheckboxVisible(false);
+		sliderBlue.setCheckboxVisible(false);
+		sliderAlpha.setCheckboxVisible(false);
+		sliderRed.addValueChangedListener(this);
+		sliderGreen.addValueChangedListener(this);
+		sliderBlue.addValueChangedListener(this);
+		sliderAlpha.addValueChangedListener(this);
+		setColor(Color.black);
+		updateColors();
+
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		add(sliderRed, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		add(sliderGreen, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		add(sliderBlue, gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 3;
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		add(sliderAlpha, gridBagConstraints);
+	}
+
+	public void actionValueChanged(DoubleSliderEvent e) {
+		updateColors();
+		callChangeValue();
+	}
+
+	private void updateColors() {
+		sliderRed.setColor1(new Color(0, sliderGreen.getValue(), sliderBlue.getValue(), sliderAlpha.getValue()), false);
+		sliderRed.setColor2(new Color(255, sliderGreen.getValue(), sliderBlue.getValue(), sliderAlpha.getValue()), true);
+		sliderGreen.setColor1(new Color(sliderRed.getValue(), 0, sliderBlue.getValue(), sliderAlpha.getValue()), false);
+		sliderGreen.setColor2(new Color(sliderRed.getValue(), 255, sliderBlue.getValue(), sliderAlpha.getValue()), true);
+		sliderBlue.setColor1(new Color(sliderRed.getValue(), sliderGreen.getValue(), 0, sliderAlpha.getValue()), false);
+		sliderBlue.setColor2(new Color(sliderRed.getValue(), sliderGreen.getValue(), 255, sliderAlpha.getValue()), true);
+		sliderAlpha.setColor1(new Color(sliderRed.getValue(), sliderGreen.getValue(), sliderBlue.getValue(), 0), false);
+		sliderAlpha.setColor2(new Color(sliderRed.getValue(), sliderGreen.getValue(), sliderBlue.getValue(), 255), true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.doubleslider.DoubleSliderListener#actionValueDragged(org.gvsig.gui.beans.doubleslider.DoubleSliderEvent)
+	 */
+	public void actionValueDragged(DoubleSliderEvent e) {
+		updateColors();
+		callDraggedValue();
+	}
+
+	public Color getColor() {
+		return new Color(sliderRed.getValue(), sliderGreen.getValue(), sliderBlue.getValue(), sliderAlpha.getValue());
+	}
+
+	public void setColor(Color value) {
+		sliderRed.setValue(value.getRed());
+		sliderGreen.setValue(value.getGreen());
+		sliderBlue.setValue(value.getBlue());
+		sliderAlpha.setValue(value.getAlpha());
+		updateColors();
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(ColorChooserListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.swing.JComponent#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		sliderRed.setEnabled(enabled);
+		sliderGreen.setEnabled(enabled);
+		sliderBlue.setEnabled(enabled);
+		sliderAlpha.setEnabled(enabled);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(ColorChooserListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+
+	/**
+	 * Dispara el evento del cambio del control
+	 */
+	protected void callChangeValue() {
+		Iterator<ColorChooserListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ColorChooserListener listener = acIterator.next();
+			listener.actionValueChanged(new EventObject(this));
+		}
+	}
+
+	/**
+	 * Dispara el evento del cambio del control
+	 */
+	protected void callDraggedValue() {
+		Iterator<ColorChooserListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ColorChooserListener listener = acIterator.next();
+			listener.actionValueDragged(new EventObject(this));
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorchooser/ColorChooser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/ProgressDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/ProgressDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/ProgressDialog.java	(revision 42196)
@@ -0,0 +1,160 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: ProgressDialog.java 22756 2008-08-07 09:49:05Z vcaballero $
+ * $Log$
+ * Revision 1.2  2007-09-12 16:28:23  bsanchez
+ * *** empty log message ***
+ *
+ * Revision 1.1  2007/08/20 08:34:45  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.6  2006/11/28 13:00:54  jmvivo
+ * quitadas dependencias de andami
+ *
+ * Revision 1.5  2006/09/14 08:31:58  cesar
+ * Replace PluginServices.getText by the new Messages bridge class from libUI
+ *
+ * Revision 1.4.2.1  2006/09/13 13:13:19  cesar
+ * Replace PluginServices.getText by the new Messages bridge class from libUI
+ *
+ * Revision 1.4  2006/08/29 07:56:08  cesar
+ * Rename the *View* family of classes to *Window* (ie: SingletonView to SingletonWindow, ViewInfo to WindowInfo, etc)
+ *
+ * Revision 1.3  2006/06/15 15:47:25  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/05/19 06:27:09  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/05/17 17:20:11  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.gui.beans;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JProgressBar;
+
+/** 
+ * It is aimed to have an easy way to show a progres bar dialog. 
+ * Unfortunatelly, it is not finished. Next step would be to
+ * let ProgressDialog implement ProgressListener, to completely
+ * encapsulate the component. Until then, the user has to call
+ * setProgress(int) to make the bar grow up.
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class ProgressDialog extends JDialog {  
+  private static final long serialVersionUID = 2325230864829072756L;
+	private JProgressBar jProgressBar = null;
+	private JButton btnCancel = null;
+	private JLabel lblStatus = null;
+	private JLabel lblTask = null;
+	private String jobName;
+	private CancellableComponent cc;
+	private String textMessage;
+
+	public ProgressDialog(CancellableComponent owner, String jobName, int stepAmount) {
+		this(owner, jobName, jobName, stepAmount);
+	}
+	
+	public ProgressDialog(CancellableComponent owner, String jobName, String textMessage, int stepAmount) {
+		super();
+		setTitle(jobName);
+		this.textMessage = textMessage;
+		getJProgressBar().setMinimum(0);
+		getJProgressBar().setMaximum(stepAmount);
+		cc = owner;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		lblTask = new JLabel();
+		lblTask.setBounds(10, 12, 280, 20);
+		lblTask.setFont(new java.awt.Font("MS Sans Serif", java.awt.Font.BOLD, 11));
+		lblTask.setText(textMessage);
+		lblStatus = new JLabel();
+		lblStatus.setBounds(10, 63, 280, 20);
+		this.getContentPane().setLayout(null);
+		this.setSize(308, 168);
+		this.getContentPane().add(getJProgressBar(), null);
+		this.getContentPane().add(getBtnCancel(), null);
+		this.getContentPane().add(lblStatus, null);
+		this.getContentPane().add(lblTask, null);
+	}
+
+	/**
+	 * This method initializes jProgressBar	
+	 * 	
+	 * @return javax.swing.JProgressBar	
+	 */    
+	private JProgressBar getJProgressBar() {
+		if (jProgressBar == null) {
+			jProgressBar = new JProgressBar();
+			jProgressBar.setBounds(10, 38, 280, 20);
+		}
+		return jProgressBar;
+	}
+
+	/**
+	 * This method initializes btnCancel	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */    
+	private JButton getBtnCancel() {
+		if (btnCancel == null) {
+			btnCancel = new JButton();
+			btnCancel.setBounds(210, 96, 80, 20);
+			btnCancel.addActionListener(new java.awt.event.ActionListener() { 
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					//NotificationManager.addInfo("The job was cancelled", null);
+					if (cc!=null)
+						cc.cancel();
+				}
+			});
+			btnCancel.setText(Messages.getText("cancel"));
+		}
+		return btnCancel;
+	}
+	
+	public void setProgress(int step) {
+		jProgressBar.setValue(step);
+	}
+	
+	public void setStatusMessage(String message) {
+		lblStatus.setText(message);
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/ProgressDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TableFilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TableFilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TableFilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,396 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.tableFilterQueryPanel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.Serializable;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListModel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class is the graphical interface of the "FilterDialog" which was made by Fernando and is in 'appgvSIG' project.
+ * It's supposed that other classes will extend from this and will add the logic as is in the "FilterDialog" class.
+ *
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TableFilterQueryJPanel extends AbstractFilterQueryJPanel implements Serializable {	
+	private static final long serialVersionUID = 7215933791644769237L;
+
+	protected JPanelML buttonsSetJPanel = null;
+	protected JButtonML btnNewSet = null;
+	protected JButtonML btnAddToCurrentSet = null;
+	protected JButtonML btnFromSet = null;
+	protected int defaultButtonsSetPanelWidth = 190; 
+	protected int defaultButtonsSetPanelHeight = 100;
+	protected int filterJScrollPaneHeight = defaultBottomJPanelHeight - 10;
+	protected int filterJScrollPanelWidth = defaultBottomJPanelWidth - 10 - defaultButtonsSetPanelWidth;
+	protected int setButtonWidth = defaultButtonsSetPanelWidth - 5;
+	protected int setButtonHeight = 25;
+
+	protected DefaultMutableTreeNode jtreeRoot;
+	
+	/**
+	 * @see AbstractFilterQueryJPanel#AbstractFilterQueryJPanel()
+	 */
+	public TableFilterQueryJPanel() {
+		super();
+		this.initialize();
+	}
+
+	/**
+	 * @see AbstractFilterQueryJPanel#AbstractFilterQueryJPanel(String)
+	 */
+	public TableFilterQueryJPanel(String _title) {
+		super(_title);
+		this.initialize();
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#initialize()
+	 */
+	protected void initialize() {
+		super.initialize();
+		this.setBorder(BorderFactory.createTitledBorder(Messages.getText("filter_of_Table")));
+		jtreeRoot = new DefaultMutableTreeNode(fieldsJTree.getModel().getRoot());
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getFieldsJPanel()
+	 */
+	protected JPanel getFieldsJPanel() {
+		if (fieldsJPanel == null) {
+			fieldsJPanel = new JPanelML();
+			fieldsJPanel.setPreferredSize(new java.awt.Dimension(fieldsJPanelWidth, fieldsJPanelHeight));
+			fieldsJPanel.setLayout(new GridBagLayout());
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
+			gridBagConstraints.anchor = GridBagConstraints.NORTH;			
+			fieldsJPanel.add(getFieldsJLabel(), gridBagConstraints);
+			gridBagConstraints.anchor = GridBagConstraints.SOUTH;
+			fieldsJPanel.add(getFieldsJScrollPane(), gridBagConstraints);			
+		}
+
+		return fieldsJPanel;
+	}
+	
+	/**
+	 * @see AbstractFilterQueryJPanel#getValuesJList()
+	 */
+	protected javax.swing.JList getValuesJList() {
+		if (valuesJList == null) {
+			valuesJList = new JListML(new DefaultListModel());
+			valuesListModel = new DefaultListModel();
+			valuesJList.setModel(valuesListModel);
+			valuesJList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			
+//			valuesJList.addMouseListener(new MouseAdapter() {
+//				/*
+//				 *  (non-Javadoc)
+//				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+//				 */
+//				public void mouseClicked(MouseEvent e) {
+//					if (e.getClickCount() == 2) {
+//						int row = fieldsJTree.getRowForLocation(e.getX(), e.getY());
+//	
+//						if (row > -1) {
+//							putSymbol(((DefaultListModel)valuesJList.getModel()).get(row).toString());
+//						}
+//					}
+//				}
+//			});
+		}
+
+		return valuesJList;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getFieldsJScrollPane()
+	 */
+	protected javax.swing.JScrollPane getFieldsJScrollPane() {
+		if (fieldsJScrollPane == null) {
+			fieldsJScrollPane = new JScrollPaneML();
+			fieldsJScrollPane.setPreferredSize(new java.awt.Dimension(fieldsAndValuesJScrollPaneWidth, fieldsAndValuesJScrollPaneHeight));
+			fieldsJScrollPane.setViewportView(getFieldsJTree());
+		}
+
+		return fieldsJScrollPane;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getValuesJPanel()
+	 */
+	protected JPanel getValuesJPanel() {
+		if (valuesJPanel == null) {
+			valuesJPanel = new JPanelML();
+			valuesJPanel.setPreferredSize(new java.awt.Dimension(valuesJPanelWidth, valuesJPanelHeight));
+			valuesJPanel.setLayout(new GridBagLayout());
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
+			gridBagConstraints.anchor = GridBagConstraints.NORTH;
+			valuesJPanel.add(getValuesJLabel(), gridBagConstraints);
+			gridBagConstraints.anchor = GridBagConstraints.SOUTH;
+			valuesJPanel.add(getValuesJScrollPane(), gridBagConstraints);
+		}
+
+		return valuesJPanel;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getValuesJScrollPane()
+	 */
+	protected javax.swing.JScrollPane getValuesJScrollPane() {
+		if (valuesJScrollPane == null) {
+			valuesJScrollPane = new JScrollPaneML();
+			valuesJScrollPane.setPreferredSize(new Dimension(fieldsAndValuesJScrollPaneWidth, fieldsAndValuesJScrollPaneHeight));
+			valuesJScrollPane.setViewportView(getValuesJList());
+		}
+
+		return valuesJScrollPane;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getFilterJScrollPane()
+	 */
+	protected JScrollPane getFilterJScrollPane() {
+		if (filterJScrollPane == null) {
+			filterJScrollPane = new JScrollPaneML();
+			filterJScrollPane.setPreferredSize(new java.awt.Dimension(filterJScrollPanelWidth, filterJScrollPaneHeight));
+			filterJScrollPane.setViewportView(getTxtExpression());
+			filterJScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+		}
+
+		return filterJScrollPane;
+	}	
+	
+	/**
+	 * This method initializes buttonsSetJPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	protected javax.swing.JPanel getButtonsSetJPanel() {
+		if (buttonsSetJPanel == null) {
+			buttonsSetJPanel = new JPanelML();
+			buttonsSetJPanel.setPreferredSize(new java.awt.Dimension(defaultButtonsSetPanelWidth, defaultButtonsSetPanelHeight));
+			buttonsSetJPanel.add(getBtnNewSet(), null);
+			buttonsSetJPanel.add(getBtnAddToCurrentSet(), null);
+			buttonsSetJPanel.add(getBtnFromSet(), null);			
+		}
+
+		return buttonsSetJPanel;
+	}
+
+	/**
+	 * This method initializes btnNewSet
+	 *
+	 * @return javax.swing.JButton
+	 */
+	protected javax.swing.JButton getBtnNewSet() {
+		if (btnNewSet == null) {
+			btnNewSet = new JButtonML();
+			btnNewSet.setPreferredSize(new Dimension(this.setButtonWidth, this.setButtonHeight));
+			btnNewSet.setText(Messages.getText("Nuevo_conjunto"));
+//			btnNewSet.setMargin(new java.awt.Insets(2, 2, 2, 2));
+		}
+
+		return btnNewSet;
+	}
+
+	/**
+	 * This method initializes btnAddToCurrentSet
+	 *
+	 * @return javax.swing.JButton
+	 */
+	protected javax.swing.JButton getBtnAddToCurrentSet() {
+		if (btnAddToCurrentSet == null) {
+			btnAddToCurrentSet = new JButtonML();
+			btnAddToCurrentSet.setPreferredSize(new Dimension(this.setButtonWidth, this.setButtonHeight));
+			btnAddToCurrentSet.setText(Messages.getText("Anadir_al_conjunto"));
+//			btnAddToCurrentSet.setMargin(new java.awt.Insets(2, 2, 2, 2));
+		}
+
+		return btnAddToCurrentSet;
+	}
+
+	/**
+	 * This method initializes btnFromSet
+	 *
+	 * @return javax.swing.JButton
+	 */
+	protected javax.swing.JButton getBtnFromSet() {
+		if (btnFromSet == null) {
+			btnFromSet = new JButtonML();
+			btnFromSet.setPreferredSize(new Dimension(this.setButtonWidth, this.setButtonHeight));
+			btnFromSet.setText(Messages.getText(
+					"Seleccionar_del_conjunto"));
+//			btnFromSet.setMargin(new java.awt.Insets(2, 2, 2, 2));
+		}
+
+		return btnFromSet;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getTxtExpression()
+	 */
+	protected javax.swing.JTextArea getTxtExpression() {
+		if (txtExpression == null) {
+			txtExpression = new JEditableTextAreaML();
+			txtExpression.setLineWrap(true);
+			txtExpression.setToolTipText(Messages.getText("write_here_a_filter_expression"));
+		}
+
+		return txtExpression;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getTopJPanel()
+	 */
+	protected JPanel getTopJPanel() {
+		if (topJPanel == null) {
+			topJPanel = new JPanelML();
+
+		    topJPanel.setPreferredSize(new Dimension(defaultTopJPanelWidth, defaultTopJPanelHeight));
+		    topJPanel.setLayout(new GridBagLayout());
+		    
+		    GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		    gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;	    
+		    
+		    gridBagConstraints.anchor = GridBagConstraints.WEST;
+		    topJPanel.add(getFieldsJPanel(), gridBagConstraints);
+		    
+			gridBagConstraints.anchor = GridBagConstraints.CENTER;
+			topJPanel.add(getFilterButtonsJPanel(), gridBagConstraints);
+			
+			gridBagConstraints.anchor = GridBagConstraints.EAST;
+			topJPanel.add(getValuesJPanel(), gridBagConstraints);
+		}
+		
+		return topJPanel;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getBottomJPanel()
+	 */
+	protected JPanel getBottomJPanel() {
+		if (bottomJPanel == null) {
+			bottomJPanel = new JPanelML();
+			bottomJPanel.setPreferredSize(new Dimension(defaultBottomJPanelWidth, defaultBottomJPanelHeight));
+			bottomJPanel.add(getFilterJScrollPane(), null);
+			bottomJPanel.add(getButtonsSetJPanel(), null);
+		}
+		
+		return bottomJPanel;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#resizeWidth(int)
+	 */
+	public void resizeWidth(int new_Width) {	
+		int difference = new_Width - DefaultWidth;
+		
+		if (difference != 0) {
+			this.setPreferredSize(new Dimension(this.getPreferredSize().width + difference, this.getPreferredSize().height));
+			getTopJPanel().setPreferredSize(new Dimension(getTopJPanel().getPreferredSize().width + difference, getTopJPanel().getPreferredSize().height));
+			getBottomJPanel().setPreferredSize(new Dimension(getBottomJPanel().getPreferredSize().width + difference, getBottomJPanel().getPreferredSize().height));
+			int halfDifference = difference / 2;
+
+			getFilterJScrollPane().setPreferredSize(new Dimension(getFilterJScrollPane().getPreferredSize().width + halfDifference, getFilterJScrollPane().getPreferredSize().height));
+			
+			getButtonsSetJPanel().setPreferredSize(new Dimension(getButtonsSetJPanel().getPreferredSize().width + halfDifference, getButtonsSetJPanel().getPreferredSize().height));
+			getBtnNewSet().setPreferredSize(new Dimension(getBtnNewSet().getPreferredSize().width + halfDifference, getBtnNewSet().getPreferredSize().height));
+			getBtnAddToCurrentSet().setPreferredSize(new Dimension(getBtnAddToCurrentSet().getPreferredSize().width + halfDifference, getBtnAddToCurrentSet().getPreferredSize().height));
+			getBtnFromSet().setPreferredSize(new Dimension(getBtnFromSet().getPreferredSize().width + halfDifference, getBtnFromSet().getPreferredSize().height));
+				
+			getFieldsJLabel().setPreferredSize(new Dimension(getFieldsJLabel().getPreferredSize().width + halfDifference, getFieldsJLabel().getPreferredSize().height));
+			getFieldsJPanel().setPreferredSize(new Dimension(getFieldsJPanel().getPreferredSize().width + halfDifference, getFieldsJPanel().getPreferredSize().height));
+			getFieldsJScrollPane().setPreferredSize(new Dimension(getFieldsJScrollPane().getPreferredSize().width + halfDifference, getFieldsJScrollPane().getPreferredSize().height));
+		
+			getValuesJLabel().setPreferredSize(new Dimension(getValuesJLabel().getPreferredSize().width + halfDifference, getValuesJLabel().getPreferredSize().height));
+			getValuesJPanel().setPreferredSize(new Dimension(getValuesJPanel().getPreferredSize().width + halfDifference, getValuesJPanel().getPreferredSize().height));
+			getValuesJScrollPane().setPreferredSize(new Dimension(getValuesJScrollPane().getPreferredSize().width + halfDifference, getValuesJScrollPane().getPreferredSize().height));
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/tableFilterQueryPanel/TableFilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterButtons/FilterButtonsJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterButtons/FilterButtonsJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterButtons/FilterButtonsJPanel.java	(revision 42196)
@@ -0,0 +1,704 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterButtons;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.LayoutManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.HashMap;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JToolTip;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.controls.MultiLineToolTip;
+import org.gvsig.gui.beans.swing.textBoxWithCalendar.JCalendarDateDialog;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class is a panel with buttons for filter operations: AND, OR, NOT, >, <, ...
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class FilterButtonsJPanel extends JPanel implements Serializable {
+	private static final long serialVersionUID = -6976915487897365666L;
+
+	public static final int default_FilterButtonsJPanelWidth = 190;
+	public static final int default_FilterButtonsJPanelHeight = 104;
+	private final int buttonsGroupJPanelWidth = default_FilterButtonsJPanelWidth;
+	private final int buttonsGroupJPanelHeight = default_FilterButtonsJPanelHeight;
+	private final int buttonHeight = 20;
+	private final int buttonWidthUnit = 40;
+
+	private JButtonML btnEqual = null;
+	private JButtonML btnDistinct = null;
+	private JButtonML btnGreater = null;
+	private JButtonML btnSmaller = null;
+	private JButtonML btnEqualGreater = null;
+	private JButtonML btnEqualSmaller = null;
+	private JButtonML btnAnd = null;
+	private JButtonML btnOr = null;
+	private JButtonML btnNot = null;
+	private JButtonML btnDate = null;
+	private JButtonML btnParenthesis = null;
+	private JButtonML btnDeleteText = null;
+	private JPanelML buttonsJPanel = null;	
+
+	// Last selected date
+	private DateFormat dateFormat = DateFormat.getDateInstance();
+	private Date lastSelectedDate = null;
+
+	private JCalendarDateDialog jCalendarDateDialog = null;
+	
+	// Values of the events fired when has been clicked a button
+	public static final int DEFAULT = 0;
+	public static final int EQUAL = 1;
+	public static final int DISTINCT = 2;
+	public static final int GREATER = 3;
+	public static final int SMALLER = 4;
+	public static final int EQUALGREATER = 5;
+	public static final int EQUALSMALLER = 6;
+	public static final int AND = 7;
+	public static final int OR = 8;
+	public static final int NOT = 9;
+	public static final int DATE = 10;
+	public static final int PARENTHESIS = 11;
+	public static final int DELETE_TEXT = 12;
+	
+	// Values of the type of event fired
+	public static final int BUTTON_CLICKED_ACTION_ID = 13;
+	public static final String BUTTON_CLICKED_ACTION_COMMAND = "Button Clicked";
+	
+	// Hash map for the items
+	private HashMap<String, String> map;
+	
+	// Action listener for notify (fire) some events that had happened to this component
+	private ActionListener actionListener = null;
+
+	/**
+	 * @see JPanel#JPanel()
+	 */
+	public FilterButtonsJPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * @see JPanel#JPanel(boolean)
+	 */
+	public FilterButtonsJPanel(boolean isDoubleBuffered) {
+		super(isDoubleBuffered);
+		initialize();
+	}
+
+	/**
+	 * @see JPanel#JPanel(java.awt.LayoutManager, boolean)
+	 */
+	public FilterButtonsJPanel(LayoutManager layout, boolean isDoubleBuffered) {
+		super(layout, isDoubleBuffered);
+		initialize();
+	}
+
+	/**
+	 * @see JPanel#JPanel(java.awt.LayoutManager)
+	 */
+	public FilterButtonsJPanel(LayoutManager layout) {
+		super(layout);
+		initialize();
+	}
+	
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		map = new HashMap<String, String>();
+		
+		this.setPreferredSize(new Dimension(default_FilterButtonsJPanelWidth, default_FilterButtonsJPanelHeight));
+		this.setLayout(new GridBagLayout());
+		
+		// Vertical center
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.anchor = GridBagConstraints.CENTER;
+
+		this.add(getButtonsJPanel(), gridBagConstraints);
+	}
+	
+	/**
+	 * This method initializes buttonsJPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */	
+	private javax.swing.JPanel getButtonsJPanel() {
+		if (buttonsJPanel == null) {
+			buttonsJPanel = new JPanelML();
+			
+			buttonsJPanel.setPreferredSize(new Dimension(buttonsGroupJPanelWidth, buttonsGroupJPanelHeight));
+			buttonsJPanel.add(getBtnEqual());
+			buttonsJPanel.add(getBtnDistinct());
+			buttonsJPanel.add(getBtnDate());
+			buttonsJPanel.add(getBtnSmaller());
+			buttonsJPanel.add(getBtnGreater());
+			buttonsJPanel.add(getBtnEqualSmaller());
+			buttonsJPanel.add(getBtnEqualGreater());
+			buttonsJPanel.add(getBtnAnd());
+			buttonsJPanel.add(getBtnOr());
+			buttonsJPanel.add(getBtnNot());
+			buttonsJPanel.add(getBtnParenthesis());			
+			buttonsJPanel.add(getBtnDeleteText());
+		}
+		
+		return buttonsJPanel;
+	}
+
+	/**
+	 * This method initializes btnDistinct
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnDistinct() {
+		if (btnDistinct == null) {
+			btnDistinct = new JButtonML();
+			btnDistinct.setText("!=");
+			btnDistinct.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnDistinct.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnDistinct.setToolTipText(Messages.getText("operator_distinct_explanation"));
+			map.put("!=", Integer.toString(FilterButtonsJPanel.DISTINCT));
+			
+			btnDistinct.addActionListener(this.getActionListener());
+		}
+		
+		return btnDistinct;
+	}
+	
+	
+	/**
+	 * This method initializes btnEqua
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnEqual() {
+		if (btnEqual == null) {
+			btnEqual = new JButtonML();
+			btnEqual.setText("=");
+			btnEqual.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnEqual.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnEqual.setToolTipText(Messages.getText("operator_equal_explanation"));
+			map.put("=", Integer.toString(FilterButtonsJPanel.EQUAL));
+
+			btnEqual.addActionListener(this.getActionListener());
+		}
+
+		return btnEqual;
+	}
+
+	/**
+	 * This method initializes btnGreater
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnGreater() {
+		if (btnGreater == null) {
+			btnGreater = new JButtonML();
+			btnGreater.setText(">");
+			btnGreater.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnGreater.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnGreater.setToolTipText(Messages.getText("operator_greater_explanation"));
+			map.put(">", Integer.toString(FilterButtonsJPanel.GREATER));
+			
+			btnGreater.addActionListener(this.getActionListener());
+		}
+
+		return btnGreater;
+	}
+
+	/**
+	 * This method initializes btnEqualGreater
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnEqualGreater() {
+		if (btnEqualGreater == null) {
+			btnEqualGreater = new JButtonML();
+			btnEqualGreater.setText(">=");
+			btnEqualGreater.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnEqualGreater.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnEqualGreater.setToolTipText(Messages.getText("operator_equal_greater_explanation"));
+			map.put(">=", Integer.toString(FilterButtonsJPanel.EQUALGREATER));
+			
+			btnEqualGreater.addActionListener(this.getActionListener());
+		}
+
+		return btnEqualGreater;
+	}
+
+	/**
+	 * This method initializes btnSmaller
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnSmaller() {
+		if (btnSmaller == null) {
+			btnSmaller = new JButtonML();
+			btnSmaller.setText("<");
+			btnSmaller.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnSmaller.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnSmaller.setToolTipText(Messages.getText("operator_smaller_explanation"));
+			map.put("<", Integer.toString(FilterButtonsJPanel.SMALLER));
+			
+			btnSmaller.addActionListener(this.getActionListener());
+		}
+
+		return btnSmaller;
+	}
+
+	/**
+	 * This method initializes btnEqualSmaller
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnEqualSmaller() {
+		if (btnEqualSmaller == null) {
+			btnEqualSmaller = new JButtonML();
+			btnEqualSmaller.setText("<=");
+			btnEqualSmaller.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnEqualSmaller.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnEqualSmaller.setToolTipText(Messages.getText("operator_equal_smaller_explanation"));
+			map.put("<=", Integer.toString(FilterButtonsJPanel.EQUALSMALLER));
+			
+			btnEqualSmaller.addActionListener(this.getActionListener());
+		}
+
+		return btnEqualSmaller;
+	}
+
+	/**
+	 * This method initializes btnDate
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnDate() {
+		if (btnDate == null) {
+			btnDate = new JButtonML();
+			btnDate.setText("Date");
+			btnDate.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnDate.setPreferredSize(new java.awt.Dimension(86, buttonHeight));
+			btnDate.setToolTipText(Messages.getText("date_button_explanation"));
+			map.put("Date", Integer.toString(FilterButtonsJPanel.DATE));
+			
+			btnDate.addMouseListener(new MouseAdapter() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+				 */
+				public void mouseClicked(MouseEvent e) {
+					getCDD().setVisible(true);
+				}				
+			});			
+		}
+
+		return btnDate;
+	}
+
+	/**
+	 * This method initializes a JCalendarDateDialog	
+	 * 	
+	 * @return A JCalendarDateDialog
+	 */
+	protected JCalendarDateDialog getCDD() {
+		if (jCalendarDateDialog == null) {
+			jCalendarDateDialog = new JCalendarDateDialog(350, 230);
+			jCalendarDateDialog.setModal(true);
+			jCalendarDateDialog.setLocationRelativeTo(btnDate);
+			jCalendarDateDialog.setMinimumWidth(350);
+			jCalendarDateDialog.setMinimumHeight(170);
+			jCalendarDateDialog.setMaximumWidth(500);
+			jCalendarDateDialog.setMaximumHeight(400);
+	
+			// Adds a listener for get the date when the 
+			jCalendarDateDialog.addComponentListener(new ComponentAdapter() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent)
+				 */
+				public void componentHidden(ComponentEvent e) {
+					lastSelectedDate = jCalendarDateDialog.getDate();
+					
+					actionListener.actionPerformed(new ActionEvent(btnDate, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND));
+
+				}			
+			});
+		
+		}
+		
+		return jCalendarDateDialog;
+	}
+
+	/**
+	 * This method initializes btnAnd
+	 *
+	 * @return javax.swing.JButton
+	 */	
+	private javax.swing.JButton getBtnAnd() {
+		if (btnAnd == null) {
+			btnAnd = new JButtonML();
+			btnAnd.setText("And");
+			btnAnd.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnAnd.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnAnd.setToolTipText(Messages.getText("operator_and_explanation"));
+			map.put("And", Integer.toString(FilterButtonsJPanel.AND));
+			
+			btnAnd.addActionListener(this.getActionListener());
+		}
+
+		return btnAnd;
+	}
+
+	/**
+	 * This method initializes btnNot
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnNot() {
+		if (btnNot == null) {
+			btnNot = new JButtonML();
+			btnNot.setText("Not");
+			btnNot.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnNot.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnNot.setToolTipText(Messages.getText("operator_not_explanation"));
+			map.put("Not", Integer.toString(FilterButtonsJPanel.NOT));
+			
+			btnNot.addMouseListener(new MouseAdapter() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+				 */
+				public void mouseClicked(MouseEvent e) {
+					new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
+				}				
+			});
+			
+			btnNot.addActionListener(this.getActionListener());
+
+		}
+
+		return btnNot;
+	}
+
+	/**
+	 * This method initializes btnOr
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnOr() {
+		if (btnOr == null) {
+			btnOr = new JButtonML();
+			btnOr.setText("Or");
+			btnOr.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnOr.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnOr.setToolTipText(Messages.getText("operator_or_explanation"));
+			map.put("Or", Integer.toString(FilterButtonsJPanel.OR));
+			
+			btnOr.addMouseListener(new MouseAdapter() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+				 */
+				public void mouseClicked(MouseEvent e) {
+					new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
+				}				
+			});
+			
+			btnOr.addActionListener(this.getActionListener());
+		}
+
+		return btnOr;
+	}
+
+	/**
+	 * This method initializes btnParenthesis
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnParenthesis() {
+		if (btnParenthesis == null) {
+			btnParenthesis = new JButtonML();
+			btnParenthesis.setText("()");
+			btnParenthesis.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnParenthesis.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
+			btnParenthesis.setToolTipText(Messages.getText("parenthesis_explanation"));
+			map.put("()", Integer.toString(FilterButtonsJPanel.PARENTHESIS));
+			
+			btnParenthesis.addMouseListener(new MouseAdapter() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+				 */
+				public void mouseClicked(MouseEvent e) {
+					new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
+				}				
+			});
+			
+			btnParenthesis.addActionListener(this.getActionListener());
+		}
+
+		return btnParenthesis;
+	}
+	
+	/**
+	 * This method initializes btnDeleteText
+	 * 
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnDeleteText() {
+		if (btnDeleteText == null) {
+			btnDeleteText = new JButtonML();
+			btnDeleteText.setText(Messages.getText("deleteText"));
+			btnDeleteText.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnDeleteText.setPreferredSize(new java.awt.Dimension(176, buttonHeight));
+			btnDeleteText.setToolTipText(Messages.getText("deleteText_on_filter_use_explanation"));
+			map.put(Messages.getText("deleteText"), Integer.toString(FilterButtonsJPanel.DELETE_TEXT));
+			
+			btnDeleteText.addMouseListener(new MouseAdapter() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+				 */
+				public void mouseClicked(MouseEvent e) {
+					new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
+				}				
+			});
+			
+			btnDeleteText.addActionListener(this.getActionListener());
+		}
+			
+		return btnDeleteText;	
+	}
+	
+	/**
+	 * This method initializes the "actionListener" ActionListener
+	 * 
+	 * @return ActionListener
+	 */
+	private ActionListener getActionListener() {
+		if (actionListener == null) {
+			actionListener = new ActionListener() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+				 */
+				public void actionPerformed(ActionEvent event) {
+				   	// Notifies that has been clicked a button
+					firePropertyChange(
+							FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND,
+							FilterButtonsJPanel.DEFAULT,
+							map.get(((javax.swing.JButton) event.getSource())
+									.getText()));
+		        }
+		    };
+		}
+		return actionListener;
+	}
+	
+	/**
+	 * Returns the las selected date, formatted
+	 * 
+	 * @return A formatted date
+	 */
+	public String getLastSelectedDate() {
+		if (lastSelectedDate == null)
+			return "";
+		else
+			return "Date(" + dateFormat.format(lastSelectedDate) + ")"; 
+	}
+	
+	/**
+	 * Returns the 'DateFormat' private attribute
+	 * 
+	 * @return A 'DateFormat' reference
+	 */
+	public DateFormat getDateFormat() {
+		return dateFormat;
+	}
+
+	/**
+	 * JButton with multi line tool tip text.
+	 * 
+	 * @see JButton
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+    protected class JButtonML extends JButton {
+		private static final long serialVersionUID = -6052122756677251026L;
+
+		/**
+		 * @see JButton#JButton()
+		 */
+		public JButtonML() {
+			super();
+		}
+
+		/**
+		 * @see JButton#JButton(Action)
+		 */
+		public JButtonML(Action a) {
+			super(a);
+		}
+
+		/**
+		 * @see JButton#JButton(Icon)
+		 */
+		public JButtonML(Icon icon) {
+			super(icon);
+		}
+
+		/**
+		 * @see JButton#JButton(String, Icon)
+		 */
+		public JButtonML(String text, Icon icon) {
+			super(text, icon);
+		}
+
+		/**
+		 * @see JButton#JButton(String)
+		 */
+		public JButtonML(String text) {
+			super(text);
+		}
+
+		/*
+    	 * (non-Javadoc)
+    	 * @see javax.swing.JComponent#createToolTip()
+    	 */
+        public JToolTip createToolTip() {
+        	// Multiline support
+        	MultiLineToolTip tip = new MultiLineToolTip();
+        	tip.setComponent(this);
+        	return tip;
+        }		
+    }
+
+	/**
+	 * JPanel with multi line tool tip text.
+	 * 
+	 * @see JPanel
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+    protected class JPanelML extends JPanel {
+		private static final long serialVersionUID = -5282313934096892711L;
+
+		/**
+		 * @see JPanel#JPanel()
+		 */
+		public JPanelML() {
+			super();
+		}
+
+		/**
+		 * @see JPanel#JPanel(boolean)
+		 */
+		public JPanelML(boolean isDoubleBuffered) {
+			super(isDoubleBuffered);
+		}
+
+		/**
+		 * @see JPanel#JPanel(LayoutManager, boolean)
+		 */
+		public JPanelML(LayoutManager layout, boolean isDoubleBuffered) {
+			super(layout, isDoubleBuffered);
+		}
+
+		/**
+		 * @see JPanel#JPanel(LayoutManager)
+		 */
+		public JPanelML(LayoutManager layout) {
+			super(layout);
+		}
+
+		/*
+    	 * (non-Javadoc)
+    	 * @see javax.swing.JComponent#createToolTip()
+    	 */
+        public JToolTip createToolTip() {
+        	// Multiline support
+        	MultiLineToolTip tip = new MultiLineToolTip();
+        	tip.setComponent(this);
+        	return tip;
+        }	
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterButtons/FilterButtonsJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/AbstractFilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/AbstractFilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/AbstractFilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,983 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.LayoutManager;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.swing.Action;
+import javax.swing.DefaultListModel;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JToolTip;
+import javax.swing.JTree;
+import javax.swing.ListModel;
+import javax.swing.text.Document;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.controls.MultiLineToolTip;
+import org.gvsig.gui.beans.editabletextcomponent.JEditableTextArea;
+import org.gvsig.gui.beans.filterPanel.filterButtons.FilterButtonsJPanel;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This abstract class represents the common components of the FilterQuery panels
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public abstract class AbstractFilterQueryJPanel extends AbstractPanel implements Serializable {
+	public static final int DefaultHeight = 280;
+	public static final int DefaultWidth = 490; 
+	
+	protected final int fieldsJPanelHeight = 145;
+	protected final int fieldsJPanelWidth = 145;
+	protected final int valuesJPanelHeight = fieldsJPanelHeight;
+	protected final int valuesJPanelWidth = fieldsJPanelWidth;
+	protected final int defaultBottomJPanelWidth = 480;
+	protected final int defaultBottomJPanelHeight = 110;
+	protected int filterJScrollPaneHeight;
+	protected int filterJScrollPanelWidth;
+	protected final int filterButtonsPanelHeight = FilterButtonsJPanel.default_FilterButtonsJPanelHeight;
+	protected final int filterButtonsPanelWidth = FilterButtonsJPanel.default_FilterButtonsJPanelWidth;
+	protected final int defaultTopJPanelWidth = defaultBottomJPanelWidth;
+	protected final int defaultTopJPanelHeight = 145;
+	protected int fieldsAndValuesJScrollPaneHeight = 110;
+	protected int fieldsAndValuesJScrollPaneWidth = fieldsJPanelWidth;
+	
+	protected JLabelML fieldsJLabel = null;
+	protected JLabelML valuesJLabel = null;
+	protected JPanelML fieldsJPanel = null;
+	protected JPanelML valuesJPanel = null;
+	protected FilterButtonsJPanel filterButtonsJPanel = null;
+	protected JScrollPaneML filterJScrollPane = null;
+	protected JPanelML topJPanel = null;
+	protected JPanelML bottomJPanel = null;
+	protected JEditableTextAreaML txtExpression = null;
+	protected JTreeML fieldsJTree = null;
+	protected JListML valuesJList = null;
+	protected JScrollPaneML fieldsJScrollPane = null;
+	protected JScrollPaneML valuesJScrollPane = null;		
+
+	protected String title;
+	
+	protected DefaultTreeModel defaultTreeModel;
+	protected DefaultListModel valuesListModel;
+		
+	// A set with all simbols or operator names used
+	private Set<String> operatorSymbols;
+	
+	
+	/**
+	 * This is the default constructor
+	 */
+	public AbstractFilterQueryJPanel(String _title) {		
+		super();
+		title = _title;
+	}
+	/**
+	 * This is the default constructor
+	 */
+	public AbstractFilterQueryJPanel() {		
+		super();
+	}
+	
+	/**
+	 * This method initializes this
+	 */
+	protected void initialize() {
+		operatorSymbols = new HashSet<String>();
+			
+		operatorSymbols.add("and");
+//		operatorSymbols.add("Date");
+		operatorSymbols.add("<>"); // In SQL this is the formal operator
+		operatorSymbols.add("!="); // This operator is also supported
+		operatorSymbols.add("=");
+		operatorSymbols.add(">=");
+		operatorSymbols.add("<=");
+		operatorSymbols.add(">");
+		operatorSymbols.add("not");
+		operatorSymbols.add("or");
+		operatorSymbols.add("(");
+		operatorSymbols.add(")");
+		operatorSymbols.add("<");
+
+		this.setPreferredSize(new Dimension(DefaultWidth, DefaultHeight));
+		
+		this.setLayout(new GridBagLayout());
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
+
+		gridBagConstraints.anchor = GridBagConstraints.NORTH;
+		this.add(getTopJPanel(), gridBagConstraints);
+
+		gridBagConstraints.anchor = GridBagConstraints.SOUTH;
+		this.add(getBottomJPanel(), gridBagConstraints);
+	}
+	
+	/**
+	 * This method initializes topJPanel
+	 * 
+	 * @return javax.swing.JPanel
+	 */
+	protected abstract javax.swing.JPanel getTopJPanel();
+	
+	/**
+	 * This method initializes bottomJPanel
+	 * 
+	 * @return javax.swing.JPanel
+	 */
+	protected abstract JPanel getBottomJPanel();	
+	
+	/**
+	 * This method initializes fieldsJLabel
+	 *
+	 * @return javax.swing.JLabel
+	 */
+	protected JLabel getFieldsJLabel() {
+		if (fieldsJLabel == null) {
+			fieldsJLabel = new JLabelML();
+			fieldsJLabel.setText(Messages.getText("fields_uppercase_first") + ":");
+		}
+
+		return fieldsJLabel;
+	}	
+
+	/**
+	 * This method initializes valuesJList
+	 *
+	 * @return javax.swing.JList
+	 */
+	protected abstract javax.swing.JList getValuesJList();
+	
+	/**
+	 * This method initializes fieldsJPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	protected abstract JPanel getFieldsJPanel();
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	protected abstract javax.swing.JScrollPane getFieldsJScrollPane();
+
+	/**
+	 * This method initializes valuesJLabel
+	 *
+	 * @return javax.swing.JLabel
+	 */
+	protected javax.swing.JLabel getValuesJLabel() {
+		if (valuesJLabel == null) {
+			valuesJLabel = new JLabelML();
+			valuesJLabel.setText(Messages.getText("known_values") + ":");
+		}
+
+		return valuesJLabel;
+	}
+	
+	/**
+	 * This method initializes valuesJPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	protected abstract JPanel getValuesJPanel();
+	
+	/**
+	 * This method initializes jScrollPane1
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	protected abstract javax.swing.JScrollPane getValuesJScrollPane();
+	
+	/**
+	 * This method initializes filterJScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	protected abstract javax.swing.JScrollPane getFilterJScrollPane();
+
+	/**
+	 * This method initializes txtExpression
+	 *
+	 * @return javax.swing.JTextArea
+	 */
+	protected abstract javax.swing.JTextArea getTxtExpression();
+	
+	/**
+	 * Adds a symbol to the filter expression.
+	 *
+	 * @param symbol symbol to add
+	 */
+	protected void putSymbol(String symbol) {
+		int position = getTxtExpression().getCaretPosition();
+		
+		getTxtExpression().setText(insert(getTxtExpression().getText(), position, symbol));
+
+		if (symbol.equals(" () ")) {
+			position = position + 2;
+		} else {
+			position = position + symbol.length();
+		}
+
+		getTxtExpression().setCaretPosition(position);
+	}
+	
+	/**
+	 * This method initializes fieldsJTree
+	 *
+	 * @return org.gvsig.gui.beans.swing.jTree
+	 */
+	protected javax.swing.JTree getFieldsJTree() {
+		if (fieldsJTree == null) {
+			fieldsJTree = new JTreeML(new Vector(0,1));
+			
+			// Remove icons:
+			DefaultTreeCellRenderer defaultTreeCellRenderer = new DefaultTreeCellRenderer();
+			defaultTreeCellRenderer.setOpenIcon(null);
+			defaultTreeCellRenderer.setClosedIcon(null);
+			defaultTreeCellRenderer.setLeafIcon(null);
+			
+			// Root not visible
+			fieldsJTree.setRootVisible(false);
+			fieldsJTree.setCellRenderer(defaultTreeCellRenderer);
+		}
+
+		return fieldsJTree;
+	}
+	
+    /**
+     * Inserts an <i>string</i> at a position of another one.
+     *
+     * @param base original <i>string</i> where will be inserted
+     * @param position position at the <i>string</i> where will be inserted
+     * @param graft <i>string</i> to insert
+     *
+     * @return the new <i>string</i> with the graft inserted in
+     */
+    protected static String insert(String base, int position, String graft) {
+        return base.substring(0, position) + graft + base.substring(position);
+    }
+
+	/**
+	 * This method initializes filterButtonsJPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	protected JPanel getFilterButtonsJPanel() {
+		if (filterButtonsJPanel == null) {
+			filterButtonsJPanel = new FilterButtonsJPanel();
+			filterButtonsJPanel.setPreferredSize(new Dimension(filterButtonsPanelWidth, filterButtonsPanelHeight));
+			filterButtonsJPanel.addPropertyChangeListener(new PropertyChangeListener() {
+				/*
+				 *  (non-Javadoc)
+				 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+				 */
+				public void propertyChange(PropertyChangeEvent arg0) {
+					if (arg0.getPropertyName().equals(FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND)) {
+		            	
+						switch(Integer.parseInt(arg0.getNewValue().toString()))	{
+							case FilterButtonsJPanel.AND:
+								putSymbol(" and ");
+								break;
+							case FilterButtonsJPanel.DATE:
+								putSymbol( ((FilterButtonsJPanel)arg0.getSource()).getLastSelectedDate() );
+								break;
+							case FilterButtonsJPanel.DISTINCT:
+								putSymbol(" != ");
+								break;
+							case FilterButtonsJPanel.EQUAL:
+								putSymbol(" = ");
+								break;
+							case FilterButtonsJPanel.EQUALGREATER:
+								putSymbol(" >= ");
+								break;
+							case FilterButtonsJPanel.EQUALSMALLER:
+								putSymbol(" <= ");
+								break;
+							case FilterButtonsJPanel.GREATER:
+								putSymbol(" > ");
+								break;
+							case FilterButtonsJPanel.NOT:
+								putSymbol(" not ");
+								break;
+							case FilterButtonsJPanel.OR:
+								putSymbol(" or ");
+								break;
+							case FilterButtonsJPanel.PARENTHESIS:
+								putSymbol(" () ");
+								break;
+							case FilterButtonsJPanel.SMALLER:
+								putSymbol(" < ");
+								break;
+							case FilterButtonsJPanel.DELETE_TEXT:
+								txtExpression.setText("");
+								break;
+							default: // do anything
+				        }
+					}
+				}			
+			});
+		}
+		
+		return filterButtonsJPanel;
+	}
+
+	/**
+	 * Returns a set with all symbols used as operators
+	 * 
+	 * @return A set
+	 */
+	protected Set<String> getAllOperatorSymbols() {
+		return operatorSymbols;		
+	}
+
+	/**
+	 * Sets new height to the 'topJPanel', (new Height must be bigger than default, else do nothing)
+	 * 
+	 * @param new_Height New height
+	 */
+	public void resizeHeight(int new_Height) {
+		int difference = new_Height - DefaultHeight;
+		
+		if (difference > 0) {
+			this.setPreferredSize(new Dimension(this.getPreferredSize().width, this.getPreferredSize().height + difference));
+			getTopJPanel().setPreferredSize(new Dimension(getTopJPanel().getPreferredSize().width, getTopJPanel().getPreferredSize().height + difference));
+			
+			getFieldsJPanel().setPreferredSize(new Dimension(getFieldsJPanel().getPreferredSize().width, getFieldsJPanel().getPreferredSize().height + difference));
+			getFieldsJScrollPane().setPreferredSize(new Dimension(getFieldsJScrollPane().getPreferredSize().width, getFieldsJScrollPane().getPreferredSize().height + difference));
+		
+			getValuesJPanel().setPreferredSize(new Dimension(getValuesJPanel().getPreferredSize().width, getValuesJPanel().getPreferredSize().height + difference));
+			getValuesJScrollPane().setPreferredSize(new Dimension(getValuesJScrollPane().getPreferredSize().width, getValuesJScrollPane().getPreferredSize().height + difference));
+		}
+	}
+
+	/**
+	 * Sets the width to this JPanel
+	 * 
+	 * @param new_Width New width
+	 */
+	public abstract void resizeWidth(int new_Width);
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.awt.Component#resize(int, int)
+	 */
+	public void resize(int width, int height) {
+		int difference = height - DefaultHeight;
+
+		if (difference != 0)
+			this.resizeHeight(height);
+		
+		this.resizeWidth(width);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.awt.Component#resize(java.awt.Dimension)
+	 */
+	public void resize(Dimension d) {
+		int difference = d.height - DefaultHeight;
+
+		if (difference != 0)
+			this.resizeHeight(d.height);
+		
+		this.resizeWidth(d.width);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.AbstractPanel#accept()
+	 */
+	public void accept() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.AbstractPanel#apply()
+	 */
+	public void apply() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.AbstractPanel#cancel()
+	 */
+	public void cancel() {
+	}	
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.AbstractPanel#selected()
+	 */
+	public void selected() {		
+	}
+
+	/**
+	 * JCrollPane with multi line tool tip text.
+	 * 
+	 * @see JScrollPane
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+	protected class JScrollPaneML extends JScrollPane {
+		private static final long serialVersionUID = 5222187234181725243L;
+
+		/**
+		 * @see JScrollPane#JScrollPane()
+		 */
+		public JScrollPaneML() {
+			super();
+		}
+
+		/**
+		 * @see JScrollPane#JScrollPane(Component, int, int)
+		 */
+		public JScrollPaneML(Component view, int vsbPolicy, int hsbPolicy) {
+			super(view, vsbPolicy, hsbPolicy);
+		}
+
+		/**
+		 * @see JScrollPane#JScrollPane(Component)
+		 */
+		public JScrollPaneML(Component view) {
+			super(view);
+		}
+
+		/**
+		 * @see JScrollPane#JScrollPane(int, int)
+		 */
+		public JScrollPaneML(int vsbPolicy, int hsbPolicy) {
+			super(vsbPolicy, hsbPolicy);
+		}
+		
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.JComponent#createToolTip()
+		 */
+	    public JToolTip createToolTip() {
+	    	// Multiline support
+	    	MultiLineToolTip tip = new MultiLineToolTip();
+	    	tip.setComponent(this);
+	    	return tip;
+	    }
+	}
+
+	/**
+	 * JLabel with multi line tool tip text.
+	 * 
+	 * @see JLabel
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+	protected class JLabelML extends JLabel {
+		private static final long serialVersionUID = 525349503578470487L;
+
+		/**
+		 * @see JLabel#JLabel()
+		 */
+		public JLabelML() {
+			super();
+		}
+
+		/**
+		 * @see JLabel#JLabel(Icon, int)
+		 */
+		public JLabelML(Icon image, int horizontalAlignment) {
+			super(image, horizontalAlignment);
+		}
+
+		/**
+		 * @see JLabel#JLabel(Icon)
+		 */
+		public JLabelML(Icon image) {
+			super(image);
+		}
+
+		/**
+		 * @see JLabel#JLabel(String, Icon, int)
+		 */
+		public JLabelML(String text, Icon icon, int horizontalAlignment) {
+			super(text, icon, horizontalAlignment);
+		}
+
+		/**
+		 * @see JLabel#JLabel(String, int)
+		 */
+		public JLabelML(String text, int horizontalAlignment) {
+			super(text, horizontalAlignment);
+		}
+
+		/**
+		 * @see JLabel#JLabel(String)
+		 */
+		public JLabelML(String text) {
+			super(text);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.JComponent#createToolTip()
+		 */
+	    public JToolTip createToolTip() {
+	    	// Multiline support
+	    	MultiLineToolTip tip = new MultiLineToolTip();
+	    	tip.setComponent(this);
+	    	return tip;
+	    }
+	}
+	
+	/**
+	 * JPanel with multi line tool tip text.
+	 * 
+	 * @see JPanel
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+	protected class JPanelML extends JPanel {
+		private static final long serialVersionUID = 5951860640473906815L;
+
+		/**
+		 * @see JPanel#JPanel()
+		 */
+		public JPanelML() {
+			super();
+		}
+
+		/**
+		 * @see JPanel#JPanel(boolean)
+		 */
+		public JPanelML(boolean isDoubleBuffered) {
+			super(isDoubleBuffered);
+		}
+
+		/**
+		 * @see JPanel#JPanel(LayoutManager, boolean)
+		 */
+		public JPanelML(LayoutManager layout, boolean isDoubleBuffered) {
+			super(layout, isDoubleBuffered);
+		}
+
+		/**
+		 * @see JPanel#JPanel(LayoutManager)
+		 */
+		public JPanelML(LayoutManager layout) {
+			super(layout);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.JComponent#createToolTip()
+		 */
+	    public JToolTip createToolTip() {
+	    	// Multiline support
+	    	MultiLineToolTip tip = new MultiLineToolTip();
+	    	tip.setComponent(this);
+	    	return tip;
+	    }
+	}
+
+	/**
+	 * Editable text area with multi line tool tip text.
+	 * 
+	 * @see JEditableTextArea
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+	protected class JEditableTextAreaML extends JEditableTextArea {
+		private static final long serialVersionUID = -6963953475368014077L;
+
+		/**
+		 * @see JTextArea#JTextArea()
+		 */
+		public JEditableTextAreaML() {
+			super();
+		}
+
+		/**
+		 * @see JTextArea#JTextArea(Document, String, int, int)
+		 */
+		public JEditableTextAreaML(Document doc, String text, int rows, int columns) {
+			super(doc, text, rows, columns);
+		}
+
+		/**
+		 * @see JTextArea#JTextArea(Document)
+		 */
+		public JEditableTextAreaML(Document doc) {
+			super(doc);
+		}
+
+		/**
+		 * @see JTextArea#JTextArea(int, int)
+		 */
+		public JEditableTextAreaML(int rows, int columns) {
+			super(rows, columns);
+		}
+
+		/**
+		 * @see JTextArea#JTextArea(String, int, int)
+		 */
+		public JEditableTextAreaML(String text, int rows, int columns) {
+			super(text, rows, columns);
+		}
+
+		/**
+		 * @see JTextArea#JTextArea(String)
+		 */
+		public JEditableTextAreaML(String text) {
+			super(text);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.JComponent#createToolTip()
+		 */
+	    public JToolTip createToolTip() {
+	    	// Multiline support
+	    	MultiLineToolTip tip = new MultiLineToolTip();
+	    	tip.setComponent(this);
+	    	return tip;
+	    }	
+	}
+
+	/**
+	 * JTree with multi line tool tip text.
+	 * 
+	 * @see JTree
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+	protected class JTreeML extends JTree {
+		private static final long serialVersionUID = -8619256256346496435L;
+
+		/**
+		 * @see JTree#JTree()
+		 */
+		public JTreeML() {
+			super();
+		}
+
+		/**
+		 * @see JTree#JTree(Hashtable)
+		 */
+		public JTreeML(Hashtable<?, ?> value) {
+			super(value);
+		}
+
+		/**
+		 * @see JTree#JTree(Object[])
+		 */
+		public JTreeML(Object[] value) {
+			super(value);
+		}
+
+		/**
+		 * @see JTree#JTree(TreeModel)
+		 */
+		public JTreeML(TreeModel newModel) {
+			super(newModel);
+		}
+
+		/**
+		 * @see JTree#JTree(TreeNode, boolean)
+		 */
+		public JTreeML(TreeNode root, boolean asksAllowsChildren) {
+			super(root, asksAllowsChildren);
+		}
+
+		/**
+		 * @see JTree#JTree(TreeNode)
+		 */
+		public JTreeML(TreeNode root) {
+			super(root);
+		}
+
+		/**
+		 * @see JTree#JTree(Vector)
+		 */
+		public JTreeML(Vector<?> value) {
+			super(value);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.JComponent#createToolTip()
+		 */
+	    public JToolTip createToolTip() {
+	    	// Multiline support
+	    	MultiLineToolTip tip = new MultiLineToolTip();
+	    	tip.setComponent(this);
+	    	return tip;
+	    }		
+	}
+
+	/**
+	 * JList with multi line tool tip text.
+	 * 
+	 * @see JList
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+	protected class JListML extends JList {
+		private static final long serialVersionUID = 5316332987144988365L;
+
+		/**
+		 * @see JList#JList()
+		 */
+		public JListML() {
+			super();
+		}
+
+		/**
+		 * @see JList#JList(ListModel)
+		 */
+		public JListML(ListModel dataModel) {
+			super(dataModel);
+		}
+
+		/**
+		 * @see JList#JList(Object[])
+		 */
+		public JListML(Object[] listData) {
+			super(listData);
+		}
+
+		/**
+		 * @see JTree#JTree(Vector)
+		 */
+		public JListML(Vector<?> listData) {
+			super(listData);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.JComponent#createToolTip()
+		 */
+	    public JToolTip createToolTip() {
+	    	// Multiline support
+	    	MultiLineToolTip tip = new MultiLineToolTip();
+	    	tip.setComponent(this);
+	    	return tip;
+	    }		
+	}
+
+	/**
+	 * JCheckBox with multi line tool tip text.
+	 * 
+	 * @see JCheckBox
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+	protected class JCheckBoxML extends JCheckBox {
+		private static final long serialVersionUID = 2610142188236840664L;
+
+		/**
+		 * @see JCheckBox#JCheckBox()
+		 */
+		public JCheckBoxML() {
+			super();
+		}
+
+		/**
+		 * @see JCheckBox#JCheckBox(Action)
+		 */
+		public JCheckBoxML(Action a) {
+			super(a);
+		}
+
+		/**
+		 * @see JCheckBox#JCheckBox(Icon, boolean)
+		 */
+		public JCheckBoxML(Icon icon, boolean selected) {
+			super(icon, selected);
+		}
+
+		/**
+		 * @see JCheckBox#JCheckBox(Icon)
+		 */
+		public JCheckBoxML(Icon icon) {
+			super(icon);
+		}
+
+		/**
+		 * @see JCheckBox#JCheckBox(String, boolean)
+		 */
+		public JCheckBoxML(String text, boolean selected) {
+			super(text, selected);
+		}
+
+		/**
+		 * @see JCheckBox#JCheckBox(String, Icon, boolean)
+		 */
+		public JCheckBoxML(String text, Icon icon, boolean selected) {
+			super(text, icon, selected);
+		}
+
+		/**
+		 *@see JCheckBox#JCheckBox(String, Icon)
+		 */
+		public JCheckBoxML(String text, Icon icon) {
+			super(text, icon);
+		}
+
+		/**
+		 * @see JCheckBox#JCheckBox(String)
+		 */
+		public JCheckBoxML(String text) {
+			super(text);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.JComponent#createToolTip()
+		 */
+	    public JToolTip createToolTip() {
+	    	// Multiline support
+	    	MultiLineToolTip tip = new MultiLineToolTip();
+	    	tip.setComponent(this);
+	    	return tip;
+	    }		
+	}
+
+	/**
+	 * JButton with multi line tool tip text.
+	 * 
+	 * @see JButton
+	 * 
+	 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
+	 */
+    protected class JButtonML extends JButton {
+		private static final long serialVersionUID = -6052122756677251026L;
+
+		/**
+		 * @see JButton#JButton()
+		 */
+		public JButtonML() {
+			super();
+		}
+
+		/**
+		 * @see JButton#JButton(Action)
+		 */
+		public JButtonML(Action a) {
+			super(a);
+		}
+
+		/**
+		 * @see JButton#JButton(Icon)
+		 */
+		public JButtonML(Icon icon) {
+			super(icon);
+		}
+
+		/**
+		 * @see JButton#JButton(String, Icon)
+		 */
+		public JButtonML(String text, Icon icon) {
+			super(text, icon);
+		}
+
+		/**
+		 * @see JButton#JButton(String)
+		 */
+		public JButtonML(String text) {
+			super(text);
+		}
+
+		/*
+    	 * (non-Javadoc)
+    	 * @see javax.swing.JComponent#createToolTip()
+    	 */
+        public JToolTip createToolTip() {
+        	// Multiline support
+        	MultiLineToolTip tip = new MultiLineToolTip();
+        	tip.setComponent(this);
+        	return tip;
+        }		
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/AbstractFilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/AbstractJLabelAsCellLoaded.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/AbstractJLabelAsCellLoaded.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/AbstractJLabelAsCellLoaded.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel.jLabelAsCell;
+
+import javax.swing.JLabel;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+
+/**
+ * This class has some methods for classes which will be a JLabel as a cell
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public abstract class AbstractJLabelAsCellLoaded extends JLabel {
+	/**
+	 * @see JLabel#JLabel()
+	 */
+	public AbstractJLabelAsCellLoaded() {
+		super();
+	}
+	
+	/**
+	 * @see JLabel#JLabel(String)
+	 */
+	public AbstractJLabelAsCellLoaded(String text) {
+		super(text);
+	}
+	
+	/**
+	 * Configures some characteristics 
+	 */
+	protected abstract void configure();
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(Object o) {
+		// It's supposed that 'o' is an string
+		return this.getText().compareTo((String)o);
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return this.getText();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/AbstractJLabelAsCellLoaded.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueLoaded.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueLoaded.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueLoaded.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel.jLabelAsCell;
+
+import java.awt.Color;
+import java.io.Serializable;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Extension of JLabel that has some specific characteristics -> Version for values that are loaded in layer in view
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JLabelAsCellValueLoaded extends AbstractJLabelAsCellLoaded implements Comparable, Serializable {
+	private static final long serialVersionUID = 4837556795083191433L;
+
+	/**
+	 * Default constructor without parameters
+	 */
+	public JLabelAsCellValueLoaded() {
+		super();
+		this.configure();
+	}
+
+	/**
+	 * Default constructor with one parameters
+	 * 
+	 * @param text Text value for this component
+	 */
+	public JLabelAsCellValueLoaded(String text) {
+		super(text);
+		this.configure();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.filterQueryPanel.jLabelCell.AbstractJLabelCellLoaded#configure()
+	 */
+	protected void configure() {
+		this.setBackground(Color.yellow);
+		this.setForeground(Color.blue);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueLoaded.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueNotLoaded.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueNotLoaded.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueNotLoaded.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel.jLabelAsCell;
+
+import java.awt.Color;
+import java.io.Serializable;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Extension of JLabel that has some specific characteristics -> Version for values that aren't loaded in layer in view
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JLabelAsCellValueNotLoaded extends AbstractJLabelAsCellLoaded implements Comparable, Serializable {
+	private static final long serialVersionUID = -4191869383518983183L;
+
+	/**
+	 * Default constructor without parameters
+	 */
+	public JLabelAsCellValueNotLoaded() {
+		super();
+		this.configure();
+	}
+
+	/**
+	 * Default constructor with one parameters
+	 * 
+	 * @param text Text value for this component
+	 */
+	public JLabelAsCellValueNotLoaded(String text) {
+		super(text);
+		this.configure();
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.filterQueryPanel.jLabelCell.AbstractJLabelCellLoaded#configure()
+	 */
+	protected void configure() {
+		this.setBackground(Color.white);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/JLabelAsCellValueNotLoaded.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/DefaultListModelForJLabelAsCell.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/DefaultListModelForJLabelAsCell.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/DefaultListModelForJLabelAsCell.java	(revision 42196)
@@ -0,0 +1,276 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel.jLabelAsCell;
+
+import java.io.Serializable;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JLabel;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+
+/**
+ * This class reimplements the "contains()" method of "DefaultListModel" for 
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ *
+ */
+public class DefaultListModelForJLabelAsCell extends DefaultListModel implements Serializable {
+	private static final long serialVersionUID = 4410627738805243864L;
+
+	/**
+	 * Represents the start index of the group of not loaded values (that should be after the group of loaded values) 
+	 * -2                 -> if elements aren't grouped (in two lists: first for loaded, after for not loaded)
+	 * -1                 -> if there isn't elements
+	 *  0                 -> if there are only not loaded elements  
+	 *  = (capacity() -1) -> if there are only loaded elements
+	 */
+	private int startIndexOfNotLoadedValues; 
+	
+	/**
+	 * Default constructor without parameters
+	 */
+	public DefaultListModelForJLabelAsCell() {
+		super();
+		startIndexOfNotLoadedValues = -1;
+	}
+	
+	/**
+	 * Method that returns true if there is a inner JLabel that has as inner text the same text as 'patternText' 
+	 * 
+	 * @param patternText
+	 * @return A boolean value
+	 */
+	public boolean containsJLabelText(String patternText) {
+		for (int i = 0; i < super.getSize(); i++) {
+			if (((JLabel)super.get(i)).getText().compareTo(patternText) == 0)
+				return true;
+		}				
+			
+		return false;
+	}
+	
+	/**
+	 * Returns the position of first JLabel that has as text the same text as 'patternText', or -1 if no JLabel has that text
+	 * 
+	 * @param patternText An String
+	 * @return An integer value
+	 */
+	public int getIndexOfJLabelText(String patternText) {
+		for (int i = 0; i < super.getSize(); i++) {
+			if (((JLabel)super.get(i)).getText().compareTo(patternText) == 0)
+				return i;
+		}				
+			
+		return -1; // If not found
+	}
+	
+	/**
+	 * Replaces first element which has the text 'patternText' to a JLabelValueLoaded new one element with the same text
+	 * 
+	 * @param patternText Text of the component
+	 */
+	public void changeElementThatHasTextToJLabelLoadedValue(String patternText) {
+		int index = getIndexOfJLabelText(patternText);
+		
+		if (index != -1)
+			super.set(index, new JLabelAsCellValueLoaded(patternText));
+	}
+	
+	/**
+	 * Sets all elements to 'JLabelValueNotLoaded'
+	 */
+	public void setAllElementsToNotLoaded() {
+		if (startIndexOfNotLoadedValues == -1) {
+			for (int i = 0; i < super.getSize(); i++) {
+				if (super.get(i) instanceof JLabelAsCellValueLoaded) {
+					JLabelAsCellValueNotLoaded jL = new JLabelAsCellValueNotLoaded(((JLabelAsCellValueLoaded)super.get(i)).getText());
+					super.remove(i);
+					super.add(i, jL);///// REIMPLEMENTATION OF SOME METHODS OF 'DefaultListModel' /////
+				}
+			}
+		}
+		else {
+			for (int i = 0; i < startIndexOfNotLoadedValues; i++) {
+				if (super.get(i) instanceof JLabelAsCellValueLoaded) {
+					JLabelAsCellValueNotLoaded jL = new JLabelAsCellValueNotLoaded(((JLabelAsCellValueLoaded)super.get(i)).getText());
+					super.set(i, jL); // replacement
+				}
+			}
+		}
+		
+		startIndexOfNotLoadedValues = 0;
+	}
+	
+	///// REIMPLEMENTATION OF SOME METHODS OF 'DefaultListModel' /////
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#clear()
+	 */		
+	public void clear() {
+		super.clear();
+		startIndexOfNotLoadedValues = -1;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#insertElementAt(java.lang.Object, int)
+	 */
+	public void insertElementAt(Object obj, int index) {
+		super.insertElementAt(obj, index);
+		
+		if ((obj instanceof JLabelAsCellValueNotLoaded) && (index > -1) && (index < startIndexOfNotLoadedValues))
+			startIndexOfNotLoadedValues = index;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#remove(int)
+	 */
+	public Object remove(int index) {
+		if ( (index > -1) && (index == startIndexOfNotLoadedValues) && (index == (super.capacity() -1)) ) {
+			startIndexOfNotLoadedValues = -1;
+		}
+
+		return super.remove(index);
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#removeAllElements()
+	 */
+	public void	removeAllElements() {
+		super.removeAllElements();
+		startIndexOfNotLoadedValues = -1;
+	}
+	 
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#removeElement(java.lang.Object)
+	 */
+	public boolean removeElement(Object obj) {
+		int index = super.indexOf(obj);
+		
+		if ( (index > -1) && (index == startIndexOfNotLoadedValues) && (index == (super.capacity() -1)) ) {
+			startIndexOfNotLoadedValues = -1;
+		}
+		
+		return super.removeElement(obj);
+	}
+	 
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#removeElementAt(int)
+	 */
+	public void removeElementAt(int index) {
+		if ( (index > -1) && (index == startIndexOfNotLoadedValues) && (index == (super.capacity() -1)) ) {
+			startIndexOfNotLoadedValues = -1;
+		}
+		
+		super.removeElementAt(index);			
+	}
+	 
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#removeRange(int, int)
+	 */
+	public void removeRange(int fromIndex, int toIndex) {			
+		super.removeRange(fromIndex, toIndex);
+		
+		// Try to find any element of type 'JLabelNotLoadedValue'
+		for (int i = 0; i < super.capacity(); i++) {
+			if (super.get(i) instanceof JLabelAsCellValueNotLoaded) {
+				if ( ( (i == (super.capacity() -1) || (i < (super.capacity() -1)) && (super.get(super.capacity() -1) instanceof JLabelAsCellValueNotLoaded) ) ) )
+					startIndexOfNotLoadedValues = i;
+				else
+					startIndexOfNotLoadedValues = -1;
+			}
+		}
+	}
+	 
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#set(int, java.lang.Object)
+	 */
+	public Object set(int index, Object element) {
+		if ((element instanceof JLabelAsCellValueNotLoaded) && (index > -1) && (index < startIndexOfNotLoadedValues))
+			startIndexOfNotLoadedValues = index;
+
+		return super.set(index, element);
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.DefaultListModel#setElementAt(java.lang.Object, int)
+	 */
+	public void setElementAt(Object obj, int index) {
+		super.setElementAt(obj, index);
+
+		if ((obj instanceof JLabelAsCellValueNotLoaded) && (index > -1) && (index < startIndexOfNotLoadedValues))
+			startIndexOfNotLoadedValues = index;
+	}
+
+	///// END REIMPLEMENTATION OF SOME METHODS OF 'DefaultListModel' /////		
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/jLabelAsCell/DefaultListModelForJLabelAsCell.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/FilterQueryJPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/FilterQueryJPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/FilterQueryJPanel.java	(revision 42196)
@@ -0,0 +1,375 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.filterPanel.filterQueryPanel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.Serializable;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListModel;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel;
+import org.gvsig.gui.beans.filterPanel.filterQueryPanel.jLabelAsCell.DefaultListModelForJLabelAsCell;
+import org.gvsig.gui.javax.swing.jLabelCellRenderer.JLabelCellRendererWithTextAsToolTipText;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class is a version of the graphical interface of "FilterDialog" which was made by Fernando and is in 'appgvSIG' project.
+ * It's supposed that other classes will extend from this and will add the logic as is in the "FilterDialog" class.
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class FilterQueryJPanel extends AbstractFilterQueryJPanel implements Serializable{
+	private static final long serialVersionUID = -1657663414129590679L;
+
+	protected JPanelML topCenterJPanel = null;
+	protected JCheckBoxML validateFilterExpressionJCheckBox = null;
+	
+	protected int filterJScrollPaneHeight = defaultBottomJPanelHeight - 10;
+	protected int filterJScrollPanelWidth = defaultBottomJPanelWidth;
+	protected int validateFilterExpressionJCheckBoxHeight = 20;
+	
+	/**
+	 * @see AbstractFilterQueryJPanel#AbstractFilterQueryJPanel()
+	 */
+	public FilterQueryJPanel() {
+		super();
+		this.initialize();
+	}
+
+	/**
+	 * @see AbstractFilterQueryJPanel#AbstractFilterQueryJPanel(String)
+	 */
+	public FilterQueryJPanel(String _title) {
+		super(_title);
+		this.initialize();
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#initialize()
+	 */
+	protected void initialize() {
+		super.initialize();
+		this.setBorder(BorderFactory.createTitledBorder(Messages.getText("filter_by_sentence")));
+		getValuesJList().setCellRenderer(new JLabelCellRendererWithTextAsToolTipText());
+
+//		/**
+//		 * This listener allows show in the tool tip text the value of the item when
+//		 *   the wheel of the mouse is beeing moved
+//		 */
+//		getValuesJScrollPane().addMouseWheelListener(new MouseWheelListener() {
+//			public void mouseWheelMoved(MouseWheelEvent e) {
+//				if (e.getSource() != null) {
+//					Object obj = ((JScrollPane)e.getSource()).getViewport().getComponent(0);
+//					
+//					if (obj instanceof JList) {
+//						int index = ((JList)obj).locationToIndex(e.getPoint());
+//						
+//						if (index >= 0)
+//							((JList)obj).setToolTipText( ((JLabel) ((JList)obj).getModel().getElementAt(index)).getText() );
+//					}
+//				}
+//			}
+//			
+//		});
+	}
+	
+	/*
+	 *  (FilterQueryJPanel)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getFieldsJPanel()
+	 */
+	protected JPanel getFieldsJPanel() {
+		if (fieldsJPanel == null) {
+			fieldsJPanel = new JPanelML();
+			fieldsJPanel.setPreferredSize(new java.awt.Dimension(fieldsJPanelWidth, fieldsJPanelHeight));
+			fieldsJPanel.setLayout(new GridBagLayout());
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
+			gridBagConstraints.anchor = GridBagConstraints.NORTH;			
+			fieldsJPanel.add(getFieldsJLabel(), gridBagConstraints);
+			gridBagConstraints.anchor = GridBagConstraints.SOUTH;
+			fieldsJPanel.add(getFieldsJScrollPane(), gridBagConstraints);			
+		}
+
+		return fieldsJPanel;
+	}	
+	
+	/**
+	 * @see AbstractFilterQueryJPanel#getValuesJList()
+	 */
+	protected javax.swing.JList getValuesJList() {
+		if (valuesJList == null) {
+			valuesJList = new JListML(new DefaultListModel());
+			valuesListModel = new DefaultListModelForJLabelAsCell();
+			valuesJList.setModel(valuesListModel);
+			valuesJList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			
+//			valuesJList.addMouseListener(new MouseAdapter() {
+//				/*
+//				 *  (non-Javadoc)
+//				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+//				 */
+//				public void mouseClicked(MouseEvent e) {
+//					if (e.getClickCount() == 2) {
+//						int row = fieldsJTree.getRowForLocation(e.getX(), e.getY());
+//	
+//						if (row > -1) {
+//							putSymbol(((DefaultListModel)valuesJList.getModel()).get(row).toString());
+//						}
+//					}
+//				}
+//			});
+		}
+
+		return valuesJList;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getFieldsJScrollPane()
+	 */
+	protected javax.swing.JScrollPane getFieldsJScrollPane() {
+		if (fieldsJScrollPane == null) {
+			fieldsJScrollPane = new JScrollPaneML();
+			fieldsJScrollPane.setPreferredSize(new java.awt.Dimension(fieldsAndValuesJScrollPaneWidth, fieldsAndValuesJScrollPaneHeight));
+			fieldsJScrollPane.setViewportView(getFieldsJTree());
+		}
+
+		return fieldsJScrollPane;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getValuesJPanel()
+	 */
+	protected JPanel getValuesJPanel() {
+		if (valuesJPanel == null) {
+			valuesJPanel = new JPanelML();
+			valuesJPanel.setPreferredSize(new java.awt.Dimension(valuesJPanelWidth, valuesJPanelHeight));
+			valuesJPanel.setLayout(new GridBagLayout());
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
+			gridBagConstraints.anchor = GridBagConstraints.NORTH;
+			valuesJPanel.add(getValuesJLabel(), gridBagConstraints);
+			gridBagConstraints.anchor = GridBagConstraints.SOUTH;
+			valuesJPanel.add(getValuesJScrollPane(), gridBagConstraints);
+		}
+
+		return valuesJPanel;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getValuesJScrollPane()
+	 */
+	protected javax.swing.JScrollPane getValuesJScrollPane() {
+		if (valuesJScrollPane == null) {
+			valuesJScrollPane = new JScrollPaneML();
+			valuesJScrollPane.setPreferredSize(new Dimension(fieldsAndValuesJScrollPaneWidth, fieldsAndValuesJScrollPaneHeight));
+			valuesJScrollPane.setViewportView(getValuesJList());
+		}
+
+		return valuesJScrollPane;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getFilterJScrollPane()
+	 */
+	protected JScrollPane getFilterJScrollPane() {
+		if (filterJScrollPane == null) {
+			filterJScrollPane = new JScrollPaneML();
+			filterJScrollPane.setPreferredSize(new java.awt.Dimension(filterJScrollPanelWidth, filterJScrollPaneHeight));
+			filterJScrollPane.setViewportView(getTxtExpression());
+			filterJScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+		}
+
+		return filterJScrollPane;
+	}	
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getTxtExpression()
+	 */
+	protected javax.swing.JTextArea getTxtExpression() {
+		if (txtExpression == null) {
+			txtExpression = new JEditableTextAreaML();
+			txtExpression.setLineWrap(true);
+			txtExpression.setToolTipText(Messages.getText("write_here_a_filter_expression"));
+		}
+
+		return txtExpression;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getTopJPanel()
+	 */
+	protected JPanel getTopJPanel() {
+		if (topJPanel == null) {
+			topJPanel = new JPanelML();
+
+		    topJPanel.setPreferredSize(new Dimension(defaultTopJPanelWidth, defaultTopJPanelHeight));
+		    topJPanel.setLayout(new GridBagLayout());
+		    
+		    GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		    gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;	    
+		    
+		    gridBagConstraints.anchor = GridBagConstraints.WEST;
+		    topJPanel.add(getFieldsJPanel(), gridBagConstraints);
+		    
+			gridBagConstraints.anchor = GridBagConstraints.CENTER;
+//			topJPanel.add(getFilterButtonsJPanel(), gridBagConstraints);
+			topJPanel.add(getTopCenterJPanel(), gridBagConstraints);
+//			topJPanel.add(getValidateFilterExpressionJCheckBox(), gridBagConstraints);
+			
+			gridBagConstraints.anchor = GridBagConstraints.EAST;
+			topJPanel.add(getValuesJPanel(), gridBagConstraints);
+		}
+		
+		return topJPanel;
+	}
+	
+	/**
+	 * This method initializes topCenterJPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	protected JPanel getTopCenterJPanel() {
+		if (topCenterJPanel == null) {
+			topCenterJPanel = new JPanelML();
+			topCenterJPanel.setPreferredSize(new Dimension(getFilterButtonsJPanel().getPreferredSize().width, getFilterButtonsJPanel().getPreferredSize().height + validateFilterExpressionJCheckBoxHeight));
+			topCenterJPanel.setLayout(null);
+			
+			getFilterButtonsJPanel().setBounds(0, 0, getFilterButtonsJPanel().getPreferredSize().width, getFilterButtonsJPanel().getPreferredSize().height);
+			topCenterJPanel.add(getFilterButtonsJPanel());
+			topCenterJPanel.add(getValidateFilterExpressionJCheckBox());
+		}
+		return topCenterJPanel;
+	}
+	
+	/**
+	 * This method initializes validateFilterExpressionJCheckBox
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	protected JCheckBox getValidateFilterExpressionJCheckBox() {
+		if (validateFilterExpressionJCheckBox == null) {
+			validateFilterExpressionJCheckBox = new JCheckBoxML();
+			validateFilterExpressionJCheckBox.setBounds(5, getFilterButtonsJPanel().getPreferredSize().height, getFilterButtonsJPanel().getWidth(), validateFilterExpressionJCheckBoxHeight);
+			validateFilterExpressionJCheckBox.setText(Messages.getText("validate_expression"));
+			validateFilterExpressionJCheckBox.setToolTipText(Messages.getText("validate_filter_expression_explanation"));
+		}
+		return validateFilterExpressionJCheckBox;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getBottomJPanel()
+	 */
+	protected JPanel getBottomJPanel() {
+		if (bottomJPanel == null) {
+			bottomJPanel = new JPanelML();
+			bottomJPanel.setPreferredSize(new Dimension(defaultBottomJPanelWidth, defaultBottomJPanelHeight));
+			bottomJPanel.add(getFilterJScrollPane(), null);
+		}
+		
+		return bottomJPanel;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#resizeWidth(int)
+	 */
+	public void resizeWidth(int new_Width) {	
+		int difference = new_Width - DefaultWidth;
+		
+		if (difference != 0) {
+			this.setPreferredSize(new Dimension(this.getPreferredSize().width + difference, this.getPreferredSize().height));
+			getTopJPanel().setPreferredSize(new Dimension(getTopJPanel().getPreferredSize().width + difference, getTopJPanel().getPreferredSize().height));
+			getBottomJPanel().setPreferredSize(new Dimension(getBottomJPanel().getPreferredSize().width + difference, getBottomJPanel().getPreferredSize().height));
+			getFilterJScrollPane().setPreferredSize(new Dimension(getFilterJScrollPane().getPreferredSize().width + difference, getFilterJScrollPane().getPreferredSize().height));
+			
+			int halfDifference = difference / 2;
+			
+			getFieldsJLabel().setPreferredSize(new Dimension(getFieldsJLabel().getPreferredSize().width + halfDifference, getFieldsJLabel().getPreferredSize().height));
+			getFieldsJPanel().setPreferredSize(new Dimension(getFieldsJPanel().getPreferredSize().width + halfDifference, getFieldsJPanel().getPreferredSize().height));
+			getFieldsJScrollPane().setPreferredSize(new Dimension(getFieldsJScrollPane().getPreferredSize().width + halfDifference, getFieldsJScrollPane().getPreferredSize().height));
+		
+			getValuesJLabel().setPreferredSize(new Dimension(getValuesJLabel().getPreferredSize().width + halfDifference, getValuesJLabel().getPreferredSize().height));
+			getValuesJPanel().setPreferredSize(new Dimension(getValuesJPanel().getPreferredSize().width + halfDifference, getValuesJPanel().getPreferredSize().height));
+			getValuesJScrollPane().setPreferredSize(new Dimension(getValuesJScrollPane().getPreferredSize().width + halfDifference, getValuesJScrollPane().getPreferredSize().height));
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/filterPanel/filterQueryPanel/FilterQueryJPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewItem.java	(revision 42196)
@@ -0,0 +1,145 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview;
+
+import java.awt.Rectangle;
+
+/**
+ * <code>ListViewItem</code> representa un item para ser usado desde
+ * ListViewComponent
+ *
+ * @version 28/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ListViewItem implements Comparable<ListViewItem> {
+	IIconPaint icon          = null;
+	String     name          = null;
+	Rectangle  nameRectangle = null;
+	Rectangle  itemRectangle = new Rectangle();
+	boolean    selected      = false;
+	boolean    showTooltip   = true;
+	Object     tag           = null;
+
+	/**
+	 * Construye un ListViewItem con un icono y su nombre.
+	 * @param icon
+	 * @param name
+	 */
+	public ListViewItem(IIconPaint icon, String name) {
+		this.icon = icon;
+		this.name = name;
+	}
+
+	/**
+	 * Obtener el nombre del item
+	 * @return
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Definir el nombre del item
+	 * @param name
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * Obtener el icono del item
+	 * @return
+	 */
+	public IIconPaint getIcon() {
+		return icon;
+	}
+
+	/**
+	 * Especificar el icono del item
+	 * @param icon
+	 */
+	public void setIcon(IIconPaint icon) {
+		this.icon = icon;
+	}
+
+	/**
+	 * Comprobar si el item esta seleccionado
+	 * @return
+	 */
+	public boolean isSelected() {
+		return selected;
+	}
+
+	/**
+	 * Definir si el item esta seleccionado
+	 * @param selected
+	 */
+	public void setSelected(boolean selected) {
+		this.selected = selected;
+	}
+
+	/**
+	 * Definir algun campo extra necesario por el programador
+	 * @return
+	 */
+	public Object getTag() {
+		return tag;
+	}
+
+	/**
+	 * Obtiene el campo extra
+	 * @return
+	 */
+	public void setTag(Object tag) {
+		this.tag = tag;
+	}
+
+	public boolean isShowTooltip() {
+		return showTooltip;
+	}
+
+	public void setShowTooltip(boolean showTooltip) {
+		this.showTooltip = showTooltip;
+	}
+
+	public Rectangle getNameRectangle() {
+		return nameRectangle;
+	}
+
+	public void setNameRectangle(Rectangle nameRectangle) {
+		this.nameRectangle = nameRectangle;
+	}
+
+	public Rectangle getItemRectangle() {
+		return itemRectangle;
+	}
+
+	public void setItemRectangle(Rectangle itemRectangle) {
+		this.itemRectangle = itemRectangle;
+	}
+
+	public int compareTo(ListViewItem listViewItem) {
+		return getName().compareTo(listViewItem.getName());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/SmallIcon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/SmallIcon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/SmallIcon.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview.painters;
+
+import java.awt.*;
+import java.util.ArrayList;
+
+import org.gvsig.gui.beans.listview.IListViewPainter;
+import org.gvsig.gui.beans.listview.ListViewItem;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Iconos de 82x28
+ *
+ * @version 28/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class SmallIcon implements IListViewPainter {
+
+  ArrayList items = null;
+
+  int iconsWidth = 40;
+
+  int minIconsWidth = 40;
+
+  int iconsHeight = 28;
+
+  Dimension lastDimension = new Dimension(0, 0);
+
+  int cols = 0;
+
+  public SmallIcon(ArrayList items) {
+    this.items = items;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.gvsig.gui.beans.graphic.listview.IListViewPainter#getName()
+   */
+  public String getName() {
+    return Messages.getText("smallIcon");
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.gvsig.gui.beans.graphic.listview.IListViewPainter#getPreferredSize()
+   */
+  public Dimension getPreferredSize() {
+    return lastDimension;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.gvsig.gui.beans.graphic.listview.IListViewPainter#paint(java.awt.Graphics2D
+   * , int, int)
+   */
+  public void paint(Graphics2D g, Rectangle visibleRect) {
+    int aux = (int) Math.floor(visibleRect.getWidth() / (minIconsWidth + 2));
+    if (aux > items.size()) aux = items.size();
+    iconsWidth = (int) (Math.floor(visibleRect.getWidth() / aux) - 2);
+
+    int height2 = 0;
+
+    int posX = 0;
+    int posY = 0;
+    cols = 0;
+    for (int i = 0; i < items.size(); i++) {
+      // Evito que se pueda editar el nombre
+      ((ListViewItem) items.get(i)).setNameRectangle(null);
+
+      ((ListViewItem) items.get(i)).setShowTooltip(true);
+      if (posX != 0) {
+        if (((posX + 1) * (iconsWidth + 2)) > visibleRect.getWidth()) {
+          posX = 0;
+          posY++;
+        }
+      }
+
+      ((ListViewItem) items.get(i)).getItemRectangle().setBounds(
+          posX * (iconsWidth + 2), (posY * (iconsHeight + 2)), iconsWidth + 2,
+          iconsHeight + 2);
+      if (((ListViewItem) items.get(i)).getItemRectangle().intersects(
+          visibleRect)) {
+        if (((ListViewItem) items.get(i)).isSelected()) {
+          g.setColor(new Color(49, 106, 197));
+          g.fillRect(posX * (iconsWidth + 2), posY * (iconsHeight + 2),
+              iconsWidth + 2, iconsHeight + 2);
+        }
+
+        Shape clip = g.getClip();
+        g.translate(posX * (iconsWidth + 2) + 1, (posY * (iconsHeight + 2)) + 1);
+        g.setClip(0, 0, iconsWidth, iconsHeight);
+
+        if (((ListViewItem) items.get(i)).getIcon() != null)
+          ((ListViewItem) items.get(i)).getIcon().paint(g,
+              ((ListViewItem) items.get(i)).isSelected());
+
+        g.setClip(clip);
+        g.translate(-(posX * (iconsWidth + 2) + 1),
+            -((posY * (iconsHeight + 2)) + 1));
+      }
+
+      if (height2 < ((posY + 1) * (iconsHeight + 2)))
+        height2 = (posY + 1) * (iconsHeight + 2);
+
+      if (cols < posX) cols = posX;
+
+      posX++;
+    }
+
+    lastDimension = new Dimension(minIconsWidth + 2, height2);
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/SmallIcon.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/LargeIcon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/LargeIcon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/LargeIcon.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview.painters;
+
+import java.awt.*;
+import java.util.ArrayList;
+
+import org.gvsig.gui.beans.listview.IListViewPainter;
+import org.gvsig.gui.beans.listview.ListViewItem;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Iconos de 82x28
+ *
+ * @version 28/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class LargeIcon implements IListViewPainter {
+
+  ArrayList items = null;
+
+  int iconsWidth = 82;
+
+  int minIconsWidth = 82;
+
+  int iconsHeight = 28;
+
+  Dimension lastDimension = new Dimension(0, 0);
+
+  int cols = 0;
+
+  public LargeIcon(ArrayList items) {
+    this.items = items;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.gvsig.gui.beans.graphic.listview.IListViewPainter#getName()
+   */
+  public String getName() {
+    return Messages.getText("largeIcon");
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.gvsig.gui.beans.graphic.listview.IListViewPainter#getPreferredSize()
+   */
+  public Dimension getPreferredSize() {
+    return lastDimension;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.gvsig.gui.beans.graphic.listview.IListViewPainter#paint(java.awt.Graphics2D
+   * , int, int)
+   */
+  public void paint(Graphics2D g, Rectangle visibleRect) {
+    int aux = (int) Math.floor(visibleRect.getWidth() / (minIconsWidth + 2));
+    if (aux > items.size()) aux = items.size();
+    iconsWidth = (int) (Math.floor(visibleRect.getWidth() / aux) - 2);
+
+    int height2 = 0;
+
+    int posX = 0;
+    int posY = 0;
+    cols = 0;
+    for (int i = 0; i < items.size(); i++) {
+      // Evito que se pueda editar el nombre
+      ((ListViewItem) items.get(i)).setNameRectangle(null);
+
+      ((ListViewItem) items.get(i)).setShowTooltip(true);
+      if (posX != 0) {
+        if (((posX + 1) * (iconsWidth + 2)) > visibleRect.getWidth()) {
+          posX = 0;
+          posY++;
+        }
+      }
+
+      ((ListViewItem) items.get(i)).getItemRectangle().setBounds(
+          posX * (iconsWidth + 2), (posY * (iconsHeight + 2)), iconsWidth + 2,
+          iconsHeight + 2);
+      if (((ListViewItem) items.get(i)).getItemRectangle().intersects(
+          visibleRect)) {
+        if (((ListViewItem) items.get(i)).isSelected()) {
+          g.setColor(new Color(49, 106, 197));
+          g.fillRect(posX * (iconsWidth + 2), posY * (iconsHeight + 2),
+              iconsWidth + 2, iconsHeight + 2);
+        }
+
+        Shape clip = g.getClip();
+        g.translate(posX * (iconsWidth + 2) + 1, (posY * (iconsHeight + 2)) + 1);
+        g.setClip(0, 0, iconsWidth, iconsHeight);
+
+        if (((ListViewItem) items.get(i)).getIcon() != null)
+          ((ListViewItem) items.get(i)).getIcon().paint(g,
+              ((ListViewItem) items.get(i)).isSelected());
+
+        g.setClip(clip);
+        g.translate(-(posX * (iconsWidth + 2) + 1),
+            -((posY * (iconsHeight + 2)) + 1));
+      }
+
+      if (height2 < ((posY + 1) * (iconsHeight + 2)))
+        height2 = (posY + 1) * (iconsHeight + 2);
+
+      if (cols < posX) cols = posX;
+
+      posX++;
+    }
+
+    lastDimension = new Dimension(minIconsWidth + 2, height2);
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/LargeIcon.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/PaintList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/PaintList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/PaintList.java	(revision 42196)
@@ -0,0 +1,148 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview.painters;
+
+import java.awt.*;
+import java.util.ArrayList;
+
+import org.gvsig.gui.beans.listview.IListViewPainter;
+import org.gvsig.gui.beans.listview.ListViewItem;
+import org.gvsig.i18n.Messages;
+
+/**
+ * @version 28/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class PaintList implements IListViewPainter {
+
+  ArrayList items = null;
+
+  int iconsWidth = 35;
+
+  int minIconsWidth = 35;
+
+  Dimension lastDimension = new Dimension(0, 0);
+
+  public PaintList(ArrayList items) {
+    this.items = items;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.gvsig.gui.beans.graphic.listview.IListViewPainter#getName()
+   */
+  public String getName() {
+    return Messages.getText("list");
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.gvsig.gui.beans.graphic.listview.IListViewPainter#getPreferredSize()
+   */
+  public Dimension getPreferredSize() {
+    return lastDimension;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.gvsig.gui.beans.graphic.listview.IListViewPainter#paint(java.awt.Graphics2D
+   * , int, int)
+   */
+  public void paint(Graphics2D g, Rectangle visibleRect) {
+    FontMetrics fm = g.getFontMetrics();
+
+    int minAux = 0;
+    for (int i = 0; i < items.size(); i++) {
+      int auxWidth = g.getFontMetrics().stringWidth(
+          ((ListViewItem) items.get(i)).getName()) + 8;
+      if (minAux < auxWidth) minAux = auxWidth;
+    }
+    minAux = visibleRect.width - minAux;
+    if (minAux < minIconsWidth) minAux = minIconsWidth;
+    iconsWidth = minAux;
+
+    int height2 = 0;
+    int width2 = 0;
+    for (int i = 0; i < items.size(); i++) {
+      ((ListViewItem) items.get(i)).setNameRectangle(null);
+
+      int auxWidth = g.getFontMetrics().stringWidth(
+          ((ListViewItem) items.get(i)).getName());
+      if ((minIconsWidth + 3 + auxWidth - visibleRect.x) > visibleRect.width) {
+        ((ListViewItem) items.get(i)).setShowTooltip(true);
+      }
+      else {
+        ((ListViewItem) items.get(i)).setShowTooltip(false);
+      }
+      if (width2 < auxWidth) width2 = auxWidth;
+
+      ((ListViewItem) items.get(i)).getItemRectangle().setBounds(visibleRect.x,
+          i * 17, visibleRect.width, 17);
+
+      if (!((ListViewItem) items.get(i)).getItemRectangle().intersects(
+          visibleRect)) continue;
+
+      int upper = fm.getLeading() + fm.getAscent()
+          + ((17 - fm.getHeight()) / 2);
+
+      if (((ListViewItem) items.get(i)).isSelected()) {
+        Color color1 = new Color(89, 153, 229);
+        Color color2 = new Color(31, 92, 207);
+        g.setPaint(new GradientPaint(0, i * 17 + 1, color1, 0, i * 17 + 16,
+            color2, false));
+        g.fillRect(visibleRect.x, i * 17 + 1, visibleRect.width, 16);
+        g.setColor(new Color(61, 123, 218));
+        g.drawLine(visibleRect.x, i * 17, visibleRect.x + visibleRect.width,
+            i * 17);
+        g.setColor(Color.white);
+      }
+      else {
+        g.setColor(Color.black);
+      }
+      g.drawString(((ListViewItem) items.get(i)).getName(), iconsWidth + 3,
+          (i * 17) + upper);
+      // Guardar el estado de donde se visualiza el nombre y cuanto ocupa
+      ((ListViewItem) items.get(i))
+          .setNameRectangle(new Rectangle(iconsWidth + 2, i * 17 - 1,
+              visibleRect.width - (iconsWidth + 2), 20));
+
+      Shape clip = g.getClip();
+      g.translate(1, i * 17 + 1);
+      g.setClip(0, 0, iconsWidth, 15);
+
+      if (((ListViewItem) items.get(i)).getIcon() != null)
+        ((ListViewItem) items.get(i)).getIcon().paint(g,
+            ((ListViewItem) items.get(i)).isSelected());
+
+      g.setClip(clip);
+      g.translate(-1, -(i * 17 + 1));
+    }
+    height2 = items.size() * 17;
+
+    lastDimension = new Dimension(minIconsWidth + 3 + width2, height2);
+    // lastDimension = new Dimension(0, height2);
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/painters/PaintList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewComponent.java	(revision 42196)
@@ -0,0 +1,1006 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview;
+
+import java.awt.*;
+import java.awt.color.ColorSpace;
+import java.awt.event.*;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorConvertOp;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import org.gvsig.gui.beans.listview.painters.*;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Componente grafico para representar una lista de valores
+ *
+ * @version 28/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ListViewComponent extends JComponent implements MouseListener,
+    MouseMotionListener, ActionListener, KeyListener, FocusListener,
+    AncestorListener {
+
+  private static final long serialVersionUID = 6177600314634665863L;
+
+  /**
+   * Lista de los tipos de vista existentes
+   */
+  private ArrayList<IListViewPainter> painters = new ArrayList<IListViewPainter>();
+
+  private ArrayList<JRadioButtonMenuItem> paintersMenu = new ArrayList<JRadioButtonMenuItem>();
+
+  /**
+   * Lista de items
+   */
+  private ArrayList<ListViewItem> items = new ArrayList<ListViewItem>();
+
+  /**
+   * Selecciona el tipo de vista
+   */
+  private int view = 0;
+
+  /**
+   * Booleano para saber si se permite la multiselecci�n
+   */
+  private boolean multiSelect = false;
+
+  private Image image = null;
+
+  private int width = 0;
+
+  private int height = 0;
+
+  private Graphics2D widgetGraphics = null;
+
+  private JMenu jMenu = null;
+
+  private ButtonGroup buttonGroup = null;
+
+  private JPopupMenu jPopupMenu = null;
+
+  private JTextField jRenameEdit = null;
+
+  private int itemEdited = -1;
+
+  private int lastSelected = -1;
+
+  private int cursorPos = -1;
+
+  private boolean editable = false;
+
+  private ArrayList<ListViewListener> actionCommandListeners = new ArrayList<ListViewListener>();
+
+  private ListViewItem lastSelectedItem = null;
+
+  /**
+   * Construye un <code>ListViewComponent</code>
+   */
+  public ListViewComponent() {
+    setFocusable(true);
+
+    initialize();
+  }
+
+  /**
+   * Inicializa el <code>ListViewComponent</code>
+   */
+  private void initialize() {
+    addListViewPainter(new PaintList(items));
+    addListViewPainter(new SmallIcon(items));
+    addListViewPainter(new LargeIcon(items));
+
+    addAncestorListener(this);
+
+    addKeyListener(this);
+    addMouseListener(this);
+    addMouseMotionListener(this);
+  }
+
+  /**
+   * Obtiene que vista se esta usando en el componente
+   *
+   * @return
+   */
+  public int getView() {
+    return view;
+  }
+
+  /**
+   * Define que vista es la que se va a usar
+   *
+   * @param view
+   */
+  public void setView(int view) {
+    this.view = view;
+  }
+
+  /**
+   * Agrega una vista al componente
+   *
+   * @param item
+   */
+  public void addListViewPainter(IListViewPainter item) {
+    painters.add(item);
+
+    JRadioButtonMenuItem jRadioButtonMenuItem = new JRadioButtonMenuItem();
+    getButtonGroup().add(jRadioButtonMenuItem);
+
+    jRadioButtonMenuItem.setText(item.getName());
+    if (paintersMenu.size() == 0) jRadioButtonMenuItem.setSelected(true);
+    getJMenu().add(jRadioButtonMenuItem);
+
+    jRadioButtonMenuItem.addActionListener(this);
+
+    paintersMenu.add(jRadioButtonMenuItem);
+  }
+
+  /**
+   * Sorts the specified array of objects into ascending order
+   */
+  public void sort() {
+    Object[] list = items.toArray();
+    Arrays.sort(list);
+    items.clear();
+    for (int i = 0; i < list.length; i++)
+      items.add((ListViewItem) list[i]);
+  }
+
+  /**
+   * Agrega un item al componente
+   *
+   * @param item
+   */
+  public void addItem(ListViewItem item) {
+    addItem(item, false);
+  }
+
+  /**
+   * Agrega un item al componente, si acceptRepeatNames es false no se aceptaran
+   * nombres repetidos
+   *
+   * @param item
+   * @param acceptRepeatNames
+   */
+  public void addItem(ListViewItem item, boolean acceptRepeatNames) {
+    items.add(item);
+    if (!acceptRepeatNames) changeName(item.getName(), items.size() - 1);
+
+    viewItem(items.size() - 1);
+  }
+
+  /**
+   * Agrega el item en la posicion especificada de la lista.
+   *
+   * @param pos
+   * @param item
+   */
+  public void addItem(int pos, ListViewItem item) {
+    items.add(pos, item);
+    changeName(item.getName(), pos);
+
+    viewItem(pos);
+  }
+
+  /**
+   * Agrega un item al componente
+   *
+   * @param item
+   */
+  public void removeItem(int index) {
+    items.remove(index);
+    repaint();
+  }
+
+  /**
+   * Borra todos los items seleccionados
+   */
+  public void removeSelecteds() {
+    for (int i = (items.size() - 1); i >= 0; i--)
+      if (((ListViewItem) items.get(i)).isSelected()) items.remove(i);
+
+    repaint();
+  }
+
+  /**
+   * Devuelve un ArrayList con todos los items
+   *
+   * @return
+   */
+  @SuppressWarnings("unchecked")
+  public ArrayList getItems() {
+    return items;
+  }
+
+  private Graphics2D getWidgetGraphics() {
+    getWidgetImage();
+    return widgetGraphics;
+  }
+
+  private Image getWidgetImage() {
+    int width2 = getVisibleRect().width;
+    int height2 = getVisibleRect().height;
+    if (width2 <= 0) width2 = 1;
+    if (height2 <= 0) height2 = 1;
+
+    if ((width != width2) || (height != height2)) {
+      image = createImage(width2, height2);
+      if (image == null) return null;
+      widgetGraphics = (Graphics2D) image.getGraphics();
+    }
+
+    width = width2;
+    height = height2;
+    return image;
+  }
+
+  /**
+   * Redibujar el componente en el graphics temporal
+   */
+  private void redrawBuffer() {
+    if (getWidgetGraphics() == null) return;
+
+    /** desactivaci�n del anti-aliasing */
+    getWidgetGraphics().setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+        RenderingHints.VALUE_ANTIALIAS_OFF);
+    getWidgetGraphics().setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
+        RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+
+    /** demanda de rendimiento r�pido */
+    getWidgetGraphics().setRenderingHint(RenderingHints.KEY_RENDERING,
+        RenderingHints.VALUE_RENDER_SPEED);
+    getWidgetGraphics().setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
+        RenderingHints.VALUE_COLOR_RENDER_SPEED);
+    getWidgetGraphics().setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
+        RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
+    getWidgetGraphics().setRenderingHint(RenderingHints.KEY_DITHERING,
+        RenderingHints.VALUE_DITHER_DISABLE);
+
+    getWidgetGraphics().translate(-getVisibleRect().x, -getVisibleRect().y);
+    getWidgetGraphics().setColor(Color.white);
+    getWidgetGraphics().fillRect(getVisibleRect().x, getVisibleRect().y,
+        getVisibleRect().width, getVisibleRect().height);
+
+    ((IListViewPainter) painters.get(view)).paint(
+        (Graphics2D) getWidgetGraphics(), getVisibleRect());
+    getWidgetGraphics().translate(getVisibleRect().x, getVisibleRect().y);
+  }
+
+  public void paint(Graphics g) {
+    redrawBuffer();
+
+    if (image != null) {
+      if (isEnabled()) {
+        g.drawImage(image, getVisibleRect().x, getVisibleRect().y, this);
+      }
+      else {
+        // Dibujar en escala de grises y aclarado para cuando esta inactivo
+        BufferedImage bi = new BufferedImage(width, height,
+            BufferedImage.TYPE_INT_RGB);
+
+        Graphics big = bi.createGraphics();
+        big.drawImage(image, 0, 0, this);
+
+        ColorConvertOp colorConvert = new ColorConvertOp(
+            ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
+        colorConvert.filter(bi, bi);
+
+        big.setColor(new Color(255, 255, 255, 164));
+        big.fillRect(0, 0, width, height);
+
+        g.drawImage(bi, getVisibleRect().x, getVisibleRect().y, this);
+      }
+    }
+
+    Dimension size = getPreferredSize();
+    Dimension aux = ((IListViewPainter) painters.get(view)).getPreferredSize();
+    if (!size.equals(aux)) {
+      setPreferredSize(aux);
+      setSize(aux);
+    }
+
+    if (getParent() instanceof JViewport) {
+      JViewport jViewport = (JViewport) getParent();
+      if (jViewport.getParent() instanceof JScrollPane) {
+        if (items.size() > 0)
+          ((JScrollPane) jViewport.getParent()).getVerticalScrollBar()
+              .setUnitIncrement(
+                  ((ListViewItem) items.get(0)).getItemRectangle().height);
+      }
+    }
+  }
+
+  public boolean isMultiSelect() {
+    return multiSelect;
+  }
+
+  public void setMultiSelect(boolean multiSelect) {
+    if (multiSelect == false) {
+      for (int i = 0; i < items.size(); i++)
+        ((ListViewItem) items.get(i)).setSelected(false);
+      if ((lastSelected != -1) && (lastSelected < items.size()))
+        ((ListViewItem) items.get(lastSelected)).setSelected(true);
+    }
+
+    this.multiSelect = multiSelect;
+    repaint();
+  }
+
+  private int getItem(int x, int y) {
+    Point point = new Point(x, y);
+    Rectangle rectangle = null;
+    for (int i = 0; i < items.size(); i++) {
+      rectangle = ((ListViewItem) items.get(i)).getItemRectangle();
+      if ((rectangle != null) && (rectangle.getBounds().contains(point)))
+        return i;
+    }
+
+    return -1;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+   */
+  public void mousePressed(MouseEvent e) {
+    if (!isEnabled()) return;
+    requestFocus();
+
+    try {
+      if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != InputEvent.BUTTON1_MASK)
+        return;
+
+      cursorPos = getItem(e.getX(), e.getY());
+      viewItem(cursorPos);
+      if (cursorPos == -1) return;
+
+      if (isMultiSelect()) {
+        if ((e.getModifiers() & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK) {
+          int pos1 = cursorPos;
+          int pos2 = lastSelected;
+          if (pos2 < pos1) {
+            pos1 = lastSelected;
+            pos2 = cursorPos;
+          }
+
+          if ((e.getModifiers() & InputEvent.CTRL_MASK) != InputEvent.CTRL_MASK)
+            for (int i = 0; i < items.size(); i++)
+              ((ListViewItem) items.get(i)).setSelected(false);
+
+          for (int i = pos1; i <= pos2; i++)
+            ((ListViewItem) items.get(i)).setSelected(true);
+          return;
+        }
+
+        lastSelected = cursorPos;
+
+        if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) {
+          ((ListViewItem) items.get(cursorPos))
+              .setSelected(!((ListViewItem) items.get(cursorPos)).isSelected());
+          return;
+        }
+
+        for (int i = 0; i < items.size(); i++)
+          ((ListViewItem) items.get(i)).setSelected(false);
+
+        ((ListViewItem) items.get(cursorPos)).setSelected(true);
+      }
+      else {
+        boolean selected = true;
+
+        lastSelected = cursorPos;
+
+        if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK)
+          selected = !((ListViewItem) items.get(cursorPos)).isSelected();
+
+        for (int i = 0; i < items.size(); i++)
+          ((ListViewItem) items.get(i)).setSelected(false);
+
+        ((ListViewItem) items.get(cursorPos)).setSelected(selected);
+      }
+    }
+    finally {
+      repaint();
+    }
+  }
+
+  /**
+   * Establece que un item debe estar visible en la vista
+   *
+   * @param pos
+   */
+  private void viewItem(int pos) {
+    if ((pos == -1) || (items.size() == 0)) return;
+    redrawBuffer();
+    Dimension aux = ((IListViewPainter) painters.get(view)).getPreferredSize();
+    setPreferredSize(aux);
+    setSize(aux);
+
+    if (pos < 0) pos = 0;
+
+    if (pos >= items.size()) pos = items.size() - 1;
+
+    if (getParent() instanceof JViewport) {
+      JViewport jViewport = (JViewport) getParent();
+
+      if (jViewport.getParent() instanceof JScrollPane) {
+        ListViewItem lvi = ((ListViewItem) items.get(pos));
+        Rectangle rectangle = (Rectangle) lvi.getItemRectangle().clone();
+        if (rectangle == null) return;
+        rectangle.setLocation((int) rectangle.getX() - getVisibleRect().x,
+            (int) rectangle.getY() - getVisibleRect().y);
+        jViewport.scrollRectToVisible(rectangle);
+        ((JScrollPane) jViewport.getParent()).getVerticalScrollBar()
+            .paintImmediately(
+                ((JScrollPane) jViewport.getParent()).getVerticalScrollBar()
+                    .getVisibleRect());
+      }
+    }
+  }
+
+  public void mouseDragged(MouseEvent e) {
+    if (!isEnabled()) return;
+    if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != InputEvent.BUTTON1_MASK)
+      return;
+
+    if (isMultiSelect()) {
+      if ((e.getModifiers() & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK)
+        return;
+      if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK)
+        return;
+    }
+
+    int itemSelected = getItem(e.getX(), e.getY());
+
+    if (itemSelected == -1) return;
+
+    lastSelected = itemSelected;
+    cursorPos = itemSelected;
+
+    for (int i = 0; i < items.size(); i++)
+      ((ListViewItem) items.get(i)).setSelected(false);
+
+    ((ListViewItem) items.get(itemSelected)).setSelected(true);
+
+    repaint();
+
+    viewItem(itemSelected);
+  }
+
+  private JPopupMenu getPopupMenu() {
+    if (jPopupMenu == null) {
+      jPopupMenu = new JPopupMenu();
+      getJMenu().setText(Messages.getText("view"));
+
+      jPopupMenu.add(getJMenu());
+    }
+    return jPopupMenu;
+  }
+
+  public void mouseReleased(MouseEvent e) {
+    if (!isEnabled()) return;
+    if ((e.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)
+      getPopupMenu().show(this, e.getX(), e.getY());
+
+    if ((e.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) {
+      fireSelectionValueChanged();
+    }
+  }
+
+  public void mouseMoved(MouseEvent e) {
+    if (!isEnabled()) return;
+    int itemSelected = getItem(e.getX(), e.getY());
+
+    if (itemSelected == -1) {
+      setToolTipText(null);
+      return;
+    }
+    if (((ListViewItem) items.get(itemSelected)).isShowTooltip())
+      setToolTipText(((ListViewItem) items.get(itemSelected)).getName());
+    else
+      setToolTipText(null);
+  }
+
+  private ButtonGroup getButtonGroup() {
+    if (buttonGroup == null) buttonGroup = new ButtonGroup();
+    return buttonGroup;
+  }
+
+  private JMenu getJMenu() {
+    if (jMenu == null) jMenu = new JMenu();
+    return jMenu;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+   */
+  public void actionPerformed(ActionEvent e) {
+    int pos = paintersMenu.indexOf(e.getSource());
+    view = pos;
+    viewItem(cursorPos);
+  }
+
+  /**
+   * Returns an array of the values for the selected cells. The returned values
+   * are sorted in increasing index order.
+   *
+   * @return the selected values or an empty list if nothing is selected
+   */
+  public ListViewItem[] getSelectedValues() {
+    int cont = 0;
+    for (int i = 0; i < items.size(); i++) {
+      if (((ListViewItem) items.get(i)).isSelected()) cont++;
+    }
+    ListViewItem[] values = new ListViewItem[cont];
+    cont = 0;
+    for (int i = 0; i < items.size(); i++) {
+      if (((ListViewItem) items.get(i)).isSelected()) {
+        values[cont] = (ListViewItem) items.get(i);
+        cont++;
+      }
+    }
+
+    return values;
+  }
+
+  /**
+   * Returns the first selected index; returns -1 if there is no selected item.
+   *
+   * @return the value of <code>getMinSelectionIndex</code>
+   */
+  public int getSelectedIndex() {
+    for (int i = 0; i < items.size(); i++) {
+      if (((ListViewItem) items.get(i)).isSelected()) return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Select the index value
+   *
+   * @return the value of <code>getMinSelectionIndex</code>
+   */
+  public void setSelectedIndex(int value) {
+    if (value < 0) value = 0;
+    if (value >= items.size()) value = items.size() - 1;
+    for (int i = 0; i < items.size(); i++) {
+      ((ListViewItem) items.get(i)).setSelected(i == value);
+    }
+    lastSelectedItem = getSelectedValue();
+    viewItem(value);
+    update(getGraphics());
+  }
+
+  /**
+   * Returns the first selected value, or <code>null</code> if the selection is
+   * empty.
+   *
+   * @return the first selected value
+   */
+  public ListViewItem getSelectedValue() {
+    for (int i = 0; i < items.size(); i++) {
+      if (((ListViewItem) items.get(i)).isSelected())
+        return (ListViewItem) items.get(i);
+    }
+    return null;
+  }
+
+  /**
+   * Returns an array of all of the selected indices in increasing order.
+   *
+   * @return all of the selected indices, in increasing order
+   */
+  public int[] getSelectedIndices() {
+    int cont = 0;
+    for (int i = 0; i < items.size(); i++) {
+      if (((ListViewItem) items.get(i)).isSelected()) cont++;
+    }
+    int[] values = new int[cont];
+    cont = 0;
+    for (int i = 0; i < items.size(); i++) {
+      if (((ListViewItem) items.get(i)).isSelected()) {
+        values[cont] = i;
+        cont++;
+      }
+    }
+
+    return values;
+  }
+
+  /**
+   * A�adir un listener a la lista de eventos
+   *
+   * @param listener
+   */
+  public void addListSelectionListener(ListViewListener listener) {
+    if (!actionCommandListeners.contains(listener))
+      actionCommandListeners.add(listener);
+  }
+
+  /**
+   * Borrar un listener de la lista de eventos
+   *
+   * @param listener
+   */
+  public void removeListSelectionListener(ListViewListener listener) {
+    actionCommandListeners.remove(listener);
+  }
+
+  /**
+   * Invocar a los eventos asociados al componente
+   */
+  private void fireSelectionValueChanged() {
+    lastSelectedItem = getSelectedValue();
+    Iterator<ListViewListener> acIterator = actionCommandListeners.iterator();
+    EventObject e = null;
+    while (acIterator.hasNext()) {
+      ListViewListener listener = acIterator.next();
+      if (e == null) e = new EventObject(this);
+      listener.actionValueChanged(e);
+    }
+  }
+
+  /**
+   * Invocar a los eventos asociados al componente
+   */
+  private void fireItemNameChanged(String oldName, ListViewItem item) {
+    Iterator<ListViewListener> acIterator = actionCommandListeners.iterator();
+    EventObject e = null;
+    while (acIterator.hasNext()) {
+      ListViewListener listener = acIterator.next();
+      if (e == null) e = new EventObject(this);
+      listener.actionItemNameChanged(e, oldName, item);
+    }
+  }
+
+  public void renameItem(int item) {
+    if (!isEditable()) return;
+
+    if ((item >= 0) && (item < items.size())) {
+      if (((ListViewItem) items.get(item)).isSelected()) {
+        Rectangle rectangle = ((ListViewItem) items.get(item))
+            .getNameRectangle();
+
+        if (rectangle != null) {
+          itemEdited = item;
+          ((ListViewItem) items.get(itemEdited)).setSelected(false);
+          repaint();
+          this.setLayout(null);
+          getJRenameEdit().setText(((ListViewItem) items.get(item)).getName());
+          this.add(getJRenameEdit());
+          getJRenameEdit().setBounds(rectangle);
+          getJRenameEdit().addFocusListener(this);
+          getJRenameEdit().addKeyListener(this);
+          getJRenameEdit().requestFocus();
+          getJRenameEdit().setSelectionStart(0);
+          getJRenameEdit().setSelectionEnd(getJRenameEdit().getText().length());
+        }
+      }
+    }
+  }
+
+  public JTextField getJRenameEdit() {
+    if (jRenameEdit == null) {
+      jRenameEdit = new JTextField();
+    }
+    return jRenameEdit;
+  }
+
+  public void changeName(String newName, int pos) {
+    newName = newName.trim();
+    if (newName.length() == 0) return;
+    String newNameAux = newName;
+    boolean isItem;
+    int newNumber = 0;
+    do {
+      isItem = false;
+      for (int i = 0; i < items.size(); i++) {
+        if ((i != pos)
+            && (((ListViewItem) items.get(i)).getName().equals(newNameAux))) {
+          isItem = true;
+          newNumber++;
+          newNameAux = newName + "_" + newNumber;
+          break;
+        }
+      }
+    }
+    while (isItem);
+    ((ListViewItem) items.get(pos)).setName(newNameAux);
+  }
+
+  public void closeRenameEdit() {
+    if (jRenameEdit == null) return;
+
+    if (itemEdited != -1) {
+      String oldName = ((ListViewItem) items.get(itemEdited)).getName();
+
+      changeName(getJRenameEdit().getText(), itemEdited);
+
+      fireItemNameChanged(oldName, (ListViewItem) items.get(itemEdited));
+
+      ((ListViewItem) items.get(cursorPos)).setSelected(true);
+      itemEdited = -1;
+      repaint();
+    }
+    this.remove(getJRenameEdit());
+    jRenameEdit = null;
+    this.requestFocus();
+  }
+
+  /**
+   * Mueve el cursor hacia abajo
+   */
+  private void moveDown() {
+    int selItem = -1;
+
+    for (int i = 0; i < items.size(); i++) {
+      if (cursorPos == i) continue;
+      if (((ListViewItem) items.get(i)).getItemRectangle().y >= (((ListViewItem) items
+          .get(cursorPos)).getItemRectangle().y + ((ListViewItem) items
+          .get(cursorPos)).getItemRectangle().height)) {
+        if (((ListViewItem) items.get(i)).getItemRectangle().x == ((ListViewItem) items
+            .get(cursorPos)).getItemRectangle().x) {
+          selItem = i;
+          break;
+        }
+      }
+    }
+
+    if (selItem != -1) {
+      cursorPos = selItem;
+      setSelectedIndex(selItem);
+    }
+  }
+
+  /**
+   * Mueve el cursor hacia la izquierda
+   */
+  private void moveLeft() {
+    int selItem = -1;
+    for (int i = items.size() - 1; i >= 0; i--) {
+      if (cursorPos == i) continue;
+      if ((((ListViewItem) items.get(i)).getItemRectangle().x + ((ListViewItem) items
+          .get(i)).getItemRectangle().width) <= ((ListViewItem) items
+          .get(cursorPos)).getItemRectangle().x) {
+        if (((ListViewItem) items.get(i)).getItemRectangle().y == ((ListViewItem) items
+            .get(cursorPos)).getItemRectangle().y) {
+          selItem = i;
+          break;
+        }
+      }
+    }
+
+    if (selItem != -1) {
+      cursorPos = selItem;
+      setSelectedIndex(selItem);
+    }
+  }
+
+  /**
+   * Mueve el cursor hacia la derecha
+   */
+  private void moveRight() {
+    int selItem = -1;
+    for (int i = 0; i < items.size(); i++) {
+      if (cursorPos == i) continue;
+      if (((ListViewItem) items.get(i)).getItemRectangle().x >= (((ListViewItem) items
+          .get(cursorPos)).getItemRectangle().x + ((ListViewItem) items
+          .get(cursorPos)).getItemRectangle().width)) {
+        if (((ListViewItem) items.get(i)).getItemRectangle().y == ((ListViewItem) items
+            .get(cursorPos)).getItemRectangle().y) {
+          selItem = i;
+          break;
+        }
+      }
+    }
+
+    if (selItem != -1) {
+      cursorPos = selItem;
+      setSelectedIndex(selItem);
+    }
+  }
+
+  /**
+   * Mueve el cursor hacia arriba
+   */
+  private void moveUp() {
+    int selItem = -1;
+    for (int i = items.size() - 1; i >= 0; i--) {
+      if (cursorPos == i) continue;
+      if ((((ListViewItem) items.get(i)).getItemRectangle().y + ((ListViewItem) items
+          .get(i)).getItemRectangle().height) <= ((ListViewItem) items
+          .get(cursorPos)).getItemRectangle().y) {
+        if (((ListViewItem) items.get(i)).getItemRectangle().x == ((ListViewItem) items
+            .get(cursorPos)).getItemRectangle().x) {
+          selItem = i;
+          break;
+        }
+      }
+    }
+
+    if (selItem != -1) {
+      cursorPos = selItem;
+      setSelectedIndex(selItem);
+    }
+  }
+
+  public void keyPressed(KeyEvent e) {
+    if (e.getSource() == this) {
+      switch (e.getKeyCode()) {
+        case KeyEvent.VK_F2:
+          renameItem(cursorPos);
+          break;
+        case KeyEvent.VK_DOWN:
+          moveDown();
+          break;
+        case KeyEvent.VK_LEFT:
+          moveLeft();
+          break;
+        case KeyEvent.VK_RIGHT:
+          moveRight();
+          break;
+        case KeyEvent.VK_UP:
+          moveUp();
+          break;
+        case KeyEvent.VK_HOME:
+          cursorPos = 0;
+          setSelectedIndex(cursorPos);
+          break;
+        case KeyEvent.VK_END:
+          cursorPos = items.size() - 1;
+          setSelectedIndex(cursorPos);
+          break;
+        case KeyEvent.VK_PAGE_UP:
+          if (items.size() > 0) {
+            int cont = (int) Math.floor(this.getVisibleRect().getHeight()
+                / ((ListViewItem) items.get(0)).getItemRectangle().height);
+            for (int i = 0; i < cont; i++)
+              moveUp();
+          }
+          break;
+        case KeyEvent.VK_PAGE_DOWN:
+          if (items.size() > 0) {
+            int cont = (int) Math.floor(this.getVisibleRect().getHeight()
+                / ((ListViewItem) items.get(0)).getItemRectangle().height);
+            for (int i = 0; i < cont; i++)
+              moveDown();
+          }
+          break;
+      }
+      return;
+    }
+    if (e.getSource() == getJRenameEdit()) {
+      switch (e.getKeyCode()) {
+        case KeyEvent.VK_ESCAPE:
+          getJRenameEdit().setText(
+              ((ListViewItem) items.get(itemEdited)).getName());
+          closeRenameEdit();
+          break;
+        case KeyEvent.VK_ENTER:
+          closeRenameEdit();
+          break;
+      }
+    }
+  }
+
+  public void keyReleased(KeyEvent e) {
+    if (e.getSource() == this) {
+      switch (e.getKeyCode()) {
+        case KeyEvent.VK_DOWN:
+        case KeyEvent.VK_UP:
+        case KeyEvent.VK_LEFT:
+        case KeyEvent.VK_RIGHT:
+        case KeyEvent.VK_HOME:
+        case KeyEvent.VK_END:
+        case KeyEvent.VK_PAGE_UP:
+        case KeyEvent.VK_PAGE_DOWN:
+          fireSelectionValueChanged();
+          break;
+      }
+    }
+  }
+
+  public void focusLost(FocusEvent e) {
+    closeRenameEdit();
+  }
+
+  public void mouseClicked(MouseEvent e) {
+    if (!isEnabled()) return;
+    if (e.getSource() == this)
+    // Si es doble click y hay alg�n elemento seleccionado en la lista lo
+    // eliminamos
+      if (e.getClickCount() == 2) {
+        renameItem(cursorPos);
+      }
+  }
+
+  /**
+   * Devuelve si se puede cambiar el nombre de los items
+   *
+   * @return
+   */
+  public boolean isEditable() {
+    return editable;
+  }
+
+  /**
+   * Define si se puede cambiar el nombre de los items
+   *
+   * @param editable
+   */
+  public void setEditable(boolean editable) {
+    this.editable = editable;
+  }
+
+  /**
+   * Quito los eventos del JScrollPane para gestionarlos yo
+   */
+  public void ancestorAdded(AncestorEvent event) {
+    if (getParent() instanceof JViewport) {
+      JViewport jViewport = (JViewport) getParent();
+      if (jViewport.getParent() instanceof JScrollPane) {
+        ((JScrollPane) jViewport.getParent()).setActionMap(null);
+      }
+    }
+  }
+
+  /**
+   * Devuelve el �ltimo item seleccionado. Solo el que provoco el evento.
+   *
+   * @return
+   */
+  public ListViewItem getLastSelectedItem() {
+    return lastSelectedItem;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see javax.swing.JComponent#setEnabled(boolean)
+   */
+  public void setEnabled(boolean enabled) {
+    super.setEnabled(enabled);
+    update(getGraphics());
+  }
+
+  // [start] Codigo no usado
+  public void mouseEntered(MouseEvent e) {}
+
+  public void mouseExited(MouseEvent e) {}
+
+  public void keyTyped(KeyEvent e) {}
+
+  public void focusGained(FocusEvent e) {}
+
+  public void ancestorMoved(AncestorEvent event) {}
+
+  public void ancestorRemoved(AncestorEvent event) {}
+  // [end]
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewListener.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.listview;
+
+import java.util.EventListener;
+import java.util.EventObject;
+/**
+ *
+ * @version 07/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface ListViewListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionValueChanged(EventObject e);
+
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionItemNameChanged(EventObject e, String oldName, ListViewItem item);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/ListViewListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IIconPaint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IIconPaint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IIconPaint.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview;
+
+import java.awt.Graphics2D;
+/**
+ *
+ * @version 29/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface IIconPaint {
+	public void paint(Graphics2D g, boolean isSelected);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IIconPaint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IListViewPainter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IListViewPainter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IListViewPainter.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.listview;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+/**
+ * @version 28/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface IListViewPainter {
+	/**
+	 * Devuelve el nombre de la vista
+	 * @return
+	 */
+	public String getName();
+
+	/**
+	 * Devuelve la dimension minima del componente
+	 * @return
+	 */
+	public Dimension getPreferredSize();
+
+	/**
+	 * Pintar el componente
+	 * @param g
+	 */
+	public void paint(Graphics2D g, Rectangle visibleRect);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/listview/IListViewPainter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonEvent.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.colorbutton;
+
+import java.util.EventObject;
+/**
+ *
+ * @version 07/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ColorButtonEvent extends EventObject {
+	private static final long serialVersionUID = -1649548367781607532L;
+
+	public ColorButtonEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonListener.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.colorbutton;
+
+import java.util.EventListener;
+/**
+ *
+ * @version 07/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface ColorButtonListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionValueChanged(ColorButtonEvent e);
+
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionValueDragged(ColorButtonEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButton.java	(revision 42196)
@@ -0,0 +1,233 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.colorbutton;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Shape;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.Iterator;
+
+import javax.swing.JComponent;
+
+import org.gvsig.gui.beans.colorchooser.ColorChooserListener;
+/**
+ *
+ * @version 03/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ColorButton extends JComponent implements MouseListener, ColorChooserListener {
+	private static final long serialVersionUID = 6003841064431749542L;
+
+	private ArrayList<ColorButtonListener> actionCommandListeners = new ArrayList<ColorButtonListener>();
+
+	private Color             color            = Color.black;
+	private ColorButtonDialog colorButtonPanel = null;
+	private Image             bufferImage      = null;
+	private int               width            = 0;
+	private int               height           = 0;
+	private Graphics          bufferGraphics   = null;
+
+	public ColorButton() {
+		setPreferredSize(new Dimension(40, 22));
+		setCursor(new Cursor(Cursor.HAND_CURSOR));
+		setColor(Color.black);
+		addMouseListener(this);
+	}
+
+	public void setColor(Color value) {
+		color = value;
+		refreshImage();
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		if (!isEnabled())
+			return;
+		colorButtonPanel = new ColorButtonDialog();
+		Color oldColor = getColor();
+		colorButtonPanel.setColor(oldColor);
+		colorButtonPanel.addValueChangedListener(this);
+		if (!colorButtonPanel.showDialog()) {
+			setColor(oldColor);
+			callValueChangedListeners();
+		}
+	}
+
+	public void actionValueChanged(EventObject e) {
+		setColor(colorButtonPanel.getColor());
+		callValueChangedListeners();
+	}
+
+	public void actionValueDragged(EventObject e) {
+		setColor(colorButtonPanel.getColor());
+		callValueDraggedListeners();
+	}
+
+	/**
+	 * Crea un graphics con las dimensiones del componente si no estaba creado y
+	 * lo devuelve para poder usarlo para dibujar en �l.
+	 * @return Graphics
+	 */
+	private Graphics getBufferGraphics() {
+		int width2 = getBounds().width;
+		int height2 = getBounds().height;
+		if (width2 <= 0)
+			width2 = 1;
+		if (height2 <= 0)
+			height2 = 1;
+
+		if ((width != width2) || (height != height2)) {
+			bufferImage = createImage(width2, height2);
+			if (bufferImage == null)
+				return null;
+			bufferGraphics = bufferImage.getGraphics();
+		}
+
+		width = width2;
+		height = height2;
+
+		return bufferGraphics;
+	}
+
+	/**
+	 * Redibujar el componente en el graphics temporal
+	 */
+	private void redrawBuffer() {
+		if (getBufferGraphics() == null)
+			return;
+
+		Color newColor = color;
+		if (isEnabled()) {
+			Shape oldClip = getBufferGraphics().getClip();
+			getBufferGraphics().setClip(1, 1, width - 2, height - 2);
+			if ((color == null) || (color.getAlpha() != 255)) {
+				for (int i = 0; (i * 4) <= width; i++) {
+					for (int j = 0; (j * 4) <= height; j++) {
+						if ((i + j) % 2 == 0)
+							getBufferGraphics().setColor(Color.white);
+						else
+							getBufferGraphics().setColor(new Color(204, 204, 204));
+						getBufferGraphics().fillRect(1 + i * 4, 1 + j * 4, 4, 4);
+					}
+				}
+			}
+			getBufferGraphics().setClip(oldClip);
+
+			newColor = color;
+		} else {
+			newColor = getBackground();
+		}
+
+		if (newColor != null) {
+			getBufferGraphics().setColor(newColor);
+			getBufferGraphics().fillRect(1, 1, width - 2, height - 2);
+		}
+
+		if (isEnabled())
+			getBufferGraphics().setColor(Color.black);
+		else
+			getBufferGraphics().setColor(new Color(172, 168, 153));
+		getBufferGraphics().drawRect(0, 0, width - 1, height - 1);
+	}
+
+	/**
+	 * Redibujar el componente en el graphics temporal y representarlo en el
+	 * componente
+	 */
+	private void refreshImage() {
+		redrawBuffer();
+		if (bufferImage != null)
+			getGraphics().drawImage(bufferImage, 0, 0, this);
+		super.paint(getGraphics());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
+	 */
+	public void paint(Graphics g) {
+		redrawBuffer();
+		g.drawImage(bufferImage, 0, 0, this);
+		super.paint(g);
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(ColorButtonListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(ColorButtonListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueChangedListeners() {
+		Iterator<ColorButtonListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ColorButtonListener listener = acIterator.next();
+			listener.actionValueChanged(new ColorButtonEvent(this));
+		}
+	}
+
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueDraggedListeners() {
+		Iterator<ColorButtonListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ColorButtonListener listener = acIterator.next();
+			listener.actionValueDragged(new ColorButtonEvent(this));
+		}
+	}
+
+
+	public void mouseClicked(MouseEvent e) {}
+	public void mouseReleased(MouseEvent e) {}
+	public void mouseEntered(MouseEvent e) {}
+	public void mouseExited(MouseEvent e) {}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonDialog.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.colorbutton;
+
+import java.awt.Color;
+import java.awt.Dimension;
+
+import javax.swing.JDialog;
+
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+import org.gvsig.gui.beans.colorchooser.ColorChooser;
+import org.gvsig.gui.beans.colorchooser.ColorChooserListener;
+import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
+/**
+ *
+ * @version 06/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ColorButtonDialog extends JDialog implements ButtonsPanelListener {
+	private static final long serialVersionUID = -6452724233113608938L;
+	private DefaultButtonsPanel defaultButtonsPanel = null;
+	private ColorChooser colorChooser = null;
+	private boolean result = false;
+
+	public ColorButtonDialog() {
+		initialize();
+	}
+
+	private void initialize() {
+		setResizable(false);
+		setTitle("Selector de color");
+		defaultButtonsPanel = new DefaultButtonsPanel(ButtonsPanel.BUTTONS_ACCEPTCANCEL);
+		defaultButtonsPanel.getButtonsPanel().setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 7, 0));
+		add(defaultButtonsPanel);
+		colorChooser = new ColorChooser();
+		defaultButtonsPanel.add(colorChooser);
+		defaultButtonsPanel.addButtonPressedListener(this);
+		colorChooser.setPreferredSize(new Dimension(220, (int) colorChooser.getPreferredSize().getHeight()));
+		pack();
+	}
+
+	/**
+	 * @param listener
+	 * @see org.gvsig.gui.beans.colorchooser.ColorChooser#addValueChangedListener(org.gvsig.gui.beans.colorchooser.ColorChooserListener)
+	 */
+	public void addValueChangedListener(ColorChooserListener listener) {
+		colorChooser.addValueChangedListener(listener);
+	}
+
+	/**
+	 * @return
+	 * @see org.gvsig.gui.beans.colorchooser.ColorChooser#getColor()
+	 */
+	public Color getColor() {
+		return colorChooser.getColor();
+	}
+
+	/**
+	 * @param value
+	 * @see org.gvsig.gui.beans.colorchooser.ColorChooser#setColor(java.awt.Color)
+	 */
+	public void setColor(Color value) {
+		colorChooser.setColor(value);
+	}
+
+	public boolean showDialog() {
+		setModal(true);
+		setVisible(true);
+		return result;
+	}
+
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		switch (e.getButton()) {
+			case ButtonsPanel.BUTTON_ACCEPT:
+				result = true;
+			case ButtonsPanel.BUTTON_CANCEL:
+				this.setVisible(false);
+				break;
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorbutton/ColorButtonDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesPanel.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Properties;
+
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
+/**
+ * Panel para crear un cuadro de propiedades de configuracion standard.
+ * Tiene botones de aceptar, cancelar y aplicar.
+ * @version 19/04/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class PropertiesPanel extends DefaultButtonsPanel {
+	private static final long serialVersionUID = 372118344763661890L;
+	PropertiesComponent propertiesComponent = null;
+
+	/**
+	 * Constructor de la calse
+	 */
+	public PropertiesPanel() {
+		super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
+		propertiesComponent = new PropertiesComponent();
+		initialize();
+	}
+
+	/**
+	 * Constructor para poder pasarle un ArrayList de PropertyStruct
+	 * @param values
+	 */
+	public PropertiesPanel(ArrayList values) {
+		super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
+		propertiesComponent = new PropertiesComponent(values);
+		initialize();
+	}
+
+	/**
+	 * Constructor para poder pasarle un Properties
+	 * @param values
+	 */
+	public PropertiesPanel(Properties properties) {
+		super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
+		propertiesComponent = new PropertiesComponent(properties);
+		initialize();
+	}
+
+	/**
+	 * A�ade un PropertyStruct al componente
+	 * @param property
+	 */
+	public void addPropertyStruct(PropertyStruct property) {
+		propertiesComponent.addPropertyStruct(property);
+	}
+
+	/**
+	 * Creaci�n de la ventana con sus componentes
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout(0, 0));
+		this.add(propertiesComponent, BorderLayout.CENTER);
+	}
+
+	/**
+	 * A�ade una clave/valor al panel de propiedades.<br>
+	 * <br>
+	 * El componente seleccionado dependera del instanceof del valor y las
+	 * opciones extras que se pongan. Por ejemplo: para el instanceof de un String
+	 * siempre se usara un JTextField, en cambio, para un Integer, se podran usar
+	 * 3 tipos, el JSlider, JComboBox y JSpinner. Estos tipos se especifican en el
+	 * array extras, poniendolo siempre en la posicion 0. En la posici�n 1 y 2 de
+	 * un JSlider se puede especificar el m�nimo y el m�ximo del Slider.
+	 *
+	 * @param textLabel
+	 * @param key
+	 * @param value
+	 * @param extras
+	 */
+	public void addValue(String textLabel, String key, Object value, Object[] extras) {
+		propertiesComponent.addValue(textLabel, key, value, extras);
+	}
+
+	/**
+	 * A�ade una clave valor al panel de propiedades.
+	 * @param key
+	 * @param value
+	 */
+	public void put(Object key, Object value) {
+		propertiesComponent.put(key, value);
+	}
+
+	/**
+	 * Obtener todos los valores de la ventana, esto ser� un
+	 * <code><b>ArrayList</b></code> que contendr� elementos de tipo
+	 * <code><b>PropertyStruct</b></code>, pudiendo tener el valor antes de
+	 * ser modificado y el nuevo valor.
+	 *
+	 * @see <code>PropertyStruct</code>
+	 *
+	 * @return ArrayList de elementos de tipo <code>PropertyStruct</code>
+	 */
+	public ArrayList getValues() {
+		return propertiesComponent.getValues();
+	}
+
+	/**
+	 * Obtener todos los valores de la ventana en formato java.util.Properties
+	 * @return
+	 */
+	public Properties getProperties() {
+		return propertiesComponent.getProperties();
+	}
+	
+	/**
+	 * Devuelve el componente del interfaz que trata esa variable, hay que tener
+	 * cuidado, puede devolver null o un componente distinto al esperado si se
+	 * mod�fica esta clase.
+	 * @param name
+	 * @return
+	 */
+	public Component getComponentUI(String name) {
+		return propertiesComponent.getComponentUI(name);
+	}
+
+	/**
+	 * A�adir el disparador de cuando se pulsa un bot�n.
+	 * @param listener
+	 */
+	public void addStateChangedListener(PropertiesComponentListener listener) {
+		propertiesComponent.addStateChangedListener(listener);
+	}
+
+	/**
+	 * Borrar el disparador de eventos de los botones.
+	 * @param listener
+	 */
+	public void removeStateChangedListener(PropertiesComponentListener listener) {
+		propertiesComponent.removeStateChangedListener(listener);
+	}
+
+	/**
+	 * Devuelve el PropertiesComponent que contiene este panel.
+	 * @return PropertiesComponent
+	 */
+	public PropertiesComponent getPropertiesComponent(){
+		return propertiesComponent;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/JPanelProperty.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/JPanelProperty.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/JPanelProperty.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.Iterator;
+
+import javax.swing.JPanel;
+/**
+ * Clase base que sirve para meter JPanels dentro de un PropertiesComponent
+ *
+ * @version 06/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class JPanelProperty extends JPanel {
+	private static final long	serialVersionUID	= 3024638614874519828L;
+	private ArrayList actionCommandListeners = new ArrayList();
+
+	/**
+	 * A�adir el disparador de cuando se pulsa un bot�n.
+	 * @param listener
+	 */
+	public void addStateChangedListener(PropertiesComponentListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar el disparador de eventos de los botones.
+	 * @param listener
+	 */
+	public void removeStateChangedListener(PropertiesComponentListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	/**
+	 * Metodo que se invoca para informar de que ha cambiado un estado
+	 */
+	protected void callStateChanged() {
+		Iterator acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			PropertiesComponentListener listener = (PropertiesComponentListener) acIterator.next();
+			listener.actionChangeProperties(new EventObject(this));
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/JPanelProperty.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponent.java	(revision 42196)
@@ -0,0 +1,489 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.EventObject;
+import java.util.Iterator;
+import java.util.Properties;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSpinner;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.gui.beans.slidertext.SliderTextContainer;
+import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
+import org.gvsig.gui.beans.slidertext.listeners.SliderListener;
+/**
+ * Componente para crear un cuadro de propiedades de configuracion standard.
+ *
+ * @version 19/04/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class PropertiesComponent extends JScrollPane implements FocusListener, KeyListener, ChangeListener, ItemListener, PropertiesComponentListener, SliderListener {
+	private static final long serialVersionUID = 372118344763661890L;
+	private ArrayList       datalist               = new ArrayList();
+	private ArrayList       actionCommandListeners = new ArrayList();
+
+	private JPanel          jPanelContent          = null;
+
+	static final public int TYPE_DEFAULT           = 1;
+	static final public int TYPE_SLIDER            = 2;
+	static final public int TYPE_COMBO             = 3;
+
+	/**
+	 * Constructor de la calse
+	 */
+	public PropertiesComponent() {
+		initialize();
+	}
+
+	/**
+	 * Constructor para poder pasarle un ArrayList de PropertyStruct
+	 * @param values
+	 */
+	public PropertiesComponent(ArrayList values) {
+		initialize();
+		for (int i=0; i<values.size(); i++) {
+			addPropertyStruct((PropertyStruct) values.get(i));
+		}
+	}
+
+	/**
+	 * Constructor para poder pasarle un Properties
+	 * @param values
+	 */
+	public PropertiesComponent(Properties properties) {
+		initialize();
+		Enumeration elements = properties.keys();
+		while (elements.hasMoreElements()) {
+			String key = (String) elements.nextElement();
+			addValue(key, key, properties.get(key), null);
+		}
+	}
+
+	/**
+	 * Creaci�n de la ventana con sus componentes
+	 */
+	private void initialize() {
+		this.setBorder(null);
+		jPanelContent = new JPanel();
+		jPanelContent.setLayout(new GridBagLayout());
+		
+		JPanel jPanelPrincipal = new JPanel();
+		jPanelPrincipal.setLayout(new GridBagLayout());
+
+		JPanel jPanelEmpty = new JPanel();
+		jPanelEmpty.setPreferredSize(new Dimension(0, 0));
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		jPanelPrincipal.add(jPanelContent, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 1.0;
+		jPanelPrincipal.add(jPanelEmpty, gridBagConstraints);
+		
+		this.setViewportView(jPanelPrincipal);
+	}
+
+	int y = 0;
+	/**
+	 * A�ade un PropertyStruct al componente
+	 * @param property
+	 */
+	public void addPropertyStruct(PropertyStruct property) {
+		boolean without_label = false;
+
+		JLabel label = new JLabel(property.getTextLabel() + ": ");
+
+		Component component = new JLabel("Sin soporte para: " + property.getOldValue().getClass().toString());
+
+		if (property.getOldValue() instanceof Component) {
+			component = (Component) property.getOldValue();
+			without_label = true;
+		}
+
+		// Tratamiento de Strings, como un JTextField
+		if (property.getOldValue() instanceof String) {
+			component = new JTextField(property.getOldValue().toString());
+			((JTextField) component).setMaximumSize(new Dimension(200, 25));
+			((JTextField) component).addFocusListener(this);
+			((JTextField) component).addKeyListener(this);
+		}
+
+		if (property.getOldValue() instanceof JPanelProperty) {
+			component = (JPanelProperty) property.getOldValue();
+			((JPanelProperty) component).addStateChangedListener(this);
+			without_label = true;
+		}
+
+		// Tratamiento de Integer
+		if (property.getOldValue() instanceof Integer || property.getOldValue() instanceof Double) {
+			boolean created = false;
+			if (property.getExtras() != null) {
+				switch (((Integer) property.getExtras()[0]).intValue()) {
+					case TYPE_SLIDER:
+						without_label = true;
+						component = new SliderTextContainer();
+						((SliderTextContainer) component).setBorder(javax.swing.BorderFactory.createTitledBorder(property.getTextLabel()));
+
+						if (property.getExtras().length >= 2)
+							((SliderTextContainer) component).setMinimum(((Integer) property.getExtras()[1]).intValue());
+						if (property.getExtras().length >= 3)
+							((SliderTextContainer) component).setMaximum(((Integer) property.getExtras()[2]).intValue());
+						if (property.getOldValue() instanceof Integer) {
+							((SliderTextContainer) component).setDecimal(false);
+							((SliderTextContainer) component).setValue(((Integer) property.getOldValue()).intValue());
+						}
+						if (property.getOldValue() instanceof Double) {
+							((SliderTextContainer) component).setDecimal(true);
+							((SliderTextContainer) component).setValue(((Double) property.getOldValue()).doubleValue());
+						}
+
+						((SliderTextContainer) component).addValueChangedListener(this);
+
+						created = true;
+						break;
+					case TYPE_COMBO:
+						if(property.getOldValue() instanceof Integer) {
+							component = new JComboBox();
+							ArrayList aux = (ArrayList) property.getExtras()[1];
+							for (int i=0; i<aux.size(); i++)
+								((JComboBox) component).addItem(aux.get(i).toString());
+							if(property.getOldValue() instanceof Integer)
+								((JComboBox) component).setSelectedIndex(((Integer) property.getOldValue()).intValue());
+							((JComboBox) component).addItemListener(this);
+							created = true;
+						}
+						break;
+				}
+			}
+			if (!created) {
+				component = new JSpinner();
+				((JSpinner) component).setValue(property.getOldValue());
+				((JSpinner) component).addChangeListener(this);
+			}
+		}
+
+		// Tratamiento de Boolean
+		if (property.getOldValue() instanceof Boolean) {
+			component = new JCheckBox();
+			((JCheckBox) component).setSelected(((Boolean) property.getOldValue()).booleanValue());
+			((JCheckBox) component).addItemListener(this);
+		}
+
+		GridBagConstraints gridBagConstraints;
+		if (without_label) {
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridwidth = 2;
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.weightx = 1.0;
+			gridBagConstraints.insets = new Insets(2, 5, 2, 5);
+			jPanelContent.add(component, gridBagConstraints);
+		} else {
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.anchor = GridBagConstraints.EAST;
+			gridBagConstraints.insets = new Insets(2, 5, 2, 2);
+			jPanelContent.add(label, gridBagConstraints);
+
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 1;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.weightx = 1.0;
+			gridBagConstraints.insets = new Insets(2, 2, 2, 5);
+			jPanelContent.add(component, gridBagConstraints);
+		}
+		y++;
+
+		label.setLabelFor(component);
+
+		property.setJLabel(label);
+		property.setComponent(component);
+		datalist.add(property);
+	}
+
+	/**
+	 * A�ade una clave/valor al panel de propiedades.<br>
+	 * <br>
+	 * El componente seleccionado dependera del instanceof del valor y las
+	 * opciones extras que se pongan. Por ejemplo: para el instanceof de un String
+	 * siempre se usara un JTextField, en cambio, para un Integer, se podran usar
+	 * 3 tipos, el JSlider, JComboBox y JSpinner. Estos tipos se especifican en el
+	 * array extras, poniendolo siempre en la posicion 0. En la posici�n 1 y 2 de
+	 * un JSlider se puede especificar el m�nimo y el m�ximo del Slider.
+	 *
+	 * @param textLabel
+	 * @param key
+	 * @param value
+	 * @param extras
+	 */
+	public void addValue(String textLabel, String key, Object value, Object[] extras) {
+		PropertyStruct propertyStruct = new PropertyStruct(textLabel, key, value, extras);
+		addPropertyStruct(propertyStruct);
+	}
+
+	/**
+	 * A�ade una clave valor al panel de propiedades.
+	 * @param key
+	 * @param value
+	 */
+	public void put(Object key, Object value) {
+		PropertyStruct propertyStruct = new PropertyStruct((String) key, (String) key, value, null);
+		addPropertyStruct(propertyStruct);
+	}
+
+	/**
+	 * Obtener todos los valores de la ventana, esto ser� un
+	 * <code><b>ArrayList</b></code> que contendr� elementos de tipo
+	 * <code><b>PropertyStruct</b></code>, pudiendo tener el valor antes de
+	 * ser modificado y el nuevo valor.
+	 *
+	 * @see <code>PropertyStruct</code>
+	 *
+	 * @return ArrayList de elementos de tipo <code>PropertyStruct</code>
+	 */
+	public ArrayList getValues() {
+		for (int i = 0; i < datalist.size(); i++) {
+			PropertyStruct propertyStruct = ((PropertyStruct) datalist.get(i));
+
+			if (propertyStruct.getComponent() instanceof JTextField) {
+				propertyStruct.setNewValue(((JTextField) propertyStruct.getComponent()).getText());
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JSpinner) {
+				propertyStruct.setNewValue(((JSpinner) propertyStruct.getComponent()).getValue());
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof SliderTextContainer) {
+				if (propertyStruct.getOldValue() instanceof Double)
+					propertyStruct.setNewValue(new Double((double) ((SliderTextContainer) propertyStruct.getComponent()).getValue()));
+				else
+					propertyStruct.setNewValue(new Integer((int) ((SliderTextContainer) propertyStruct.getComponent()).getValue()));
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JCheckBox) {
+				propertyStruct.setNewValue(new Boolean(((JCheckBox) propertyStruct.getComponent()).getSelectedObjects()!=null));
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JComboBox) {
+				propertyStruct.setNewValue(new Integer(((JComboBox) propertyStruct.getComponent()).getSelectedIndex()));
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JPanelProperty) {
+				// No es necesario pq el mismo JPanel esta tb en el oldValue
+				continue;
+			}
+		}
+		return datalist;
+	}
+
+	/**
+	 * Devuelve el componente del interfaz que trata esa variable, hay que tener
+	 * cuidado, puede devolver null o un componente distinto al esperado si se
+	 * mod�fica esta clase.
+	 * @param name
+	 * @return
+	 */
+	public Component getComponentUI(String name) {
+		for (int i = 0; i < datalist.size(); i++) {
+			PropertyStruct propertyStruct = ((PropertyStruct) datalist.get(i));
+			String key = propertyStruct.getKey();
+			if (key.equals(name))
+				return propertyStruct.getComponent();
+		}
+		return null;
+	}
+	
+	/**
+	 * Obtener todos los valores de la ventana en formato java.util.Properties
+	 * @return
+	 */
+	public Properties getProperties() {
+		Properties properties = new Properties();
+		for (int i = 0; i < datalist.size(); i++) {
+			PropertyStruct propertyStruct = ((PropertyStruct) datalist.get(i));
+			String key = propertyStruct.getKey();
+
+			if (propertyStruct.getComponent() instanceof JTextField) {
+				properties.put(key, ((JTextField) propertyStruct.getComponent()).getText());
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JSpinner) {
+				properties.put(key, ((JSpinner) propertyStruct.getComponent()).getValue());
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof SliderTextContainer) {
+				if (propertyStruct.getOldValue() instanceof Double)
+					properties.put(key, new Double((double) ((SliderTextContainer) propertyStruct.getComponent()).getValue()));
+				else
+					properties.put(key, new Integer((int) ((SliderTextContainer) propertyStruct.getComponent()).getValue()));
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JCheckBox) {
+				properties.put(key, new Boolean(((JCheckBox) propertyStruct.getComponent()).getSelectedObjects() != null));
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JComboBox) {
+				properties.put(key, new Integer(((JComboBox) propertyStruct.getComponent()).getSelectedIndex()));
+				continue;
+			}
+			if (propertyStruct.getComponent() instanceof JPanelProperty) {
+				properties.put(key, (JPanelProperty) propertyStruct.getComponent());
+				continue;
+			}
+		}
+		return properties;
+	}
+
+	/**
+	 * A�adir el disparador de cuando se pulsa un bot�n.
+	 * @param listener
+	 */
+	public void addStateChangedListener(PropertiesComponentListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar el disparador de eventos de los botones.
+	 * @param listener
+	 */
+	public void removeStateChangedListener(PropertiesComponentListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	private void callStateChanged() {
+		Iterator acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			PropertiesComponentListener listener = (PropertiesComponentListener) acIterator.next();
+			listener.actionChangeProperties(new EventObject(this));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
+	 */
+	public void stateChanged(ChangeEvent e) {
+		callStateChanged();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
+	 */
+	public void itemStateChanged(ItemEvent e) {
+		callStateChanged();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
+	 */
+	public void focusLost(FocusEvent e) {
+		callStateChanged();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
+	 */
+	public void keyReleased(KeyEvent e) {
+		if (e.getKeyCode() == 10)
+			callStateChanged();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.propertiespanel.PropertiesComponentListener#actionChangeProperties(java.util.EventObject)
+	 */
+	public void actionChangeProperties(EventObject e) {
+		callStateChanged();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.slidertext.listeners.SliderListener#actionValueChanged(org.gvsig.gui.beans.slidertext.listeners.SliderEvent)
+	 */
+	public void actionValueChanged(SliderEvent e) {
+		callStateChanged();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.slidertext.listeners.SliderListener#actionValueDragged(org.gvsig.gui.beans.slidertext.listeners.SliderEvent)
+	 */
+	public void actionValueDragged(SliderEvent e) {
+		//callStateChanged();
+	}
+
+	public void keyTyped(KeyEvent e) {}
+	public void focusGained(FocusEvent e) {}
+	public void keyPressed(KeyEvent e) {}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponentListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponentListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponentListener.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.util.EventListener;
+import java.util.EventObject;
+
+public interface PropertiesComponentListener extends EventListener {
+	public void actionChangeProperties(EventObject e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertiesComponentListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertyStruct.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertyStruct.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertyStruct.java	(revision 42196)
@@ -0,0 +1,209 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.propertiespanel;
+
+import java.awt.Component;
+
+import javax.swing.JLabel;
+/**
+ * Clase con todos los datos posibles que puede tener una clave/valor
+ * especificada.
+ *
+ * @version 23/04/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class PropertyStruct {
+	/**
+	 * Representa al contenido que tendra el label
+	 */
+	private String textLabel = "";
+
+	/**
+	 * Clave del elemento
+	 */
+	private String key = "";
+
+	/**
+	 * Valor inicial del elemento
+	 */
+	private Object oldValue = null;
+
+	/**
+	 * Valor despu�s de haberlo modificado en la ventana
+	 */
+	private Object newValue = null;
+
+	/**
+	 * Lista de opciones extras que determina como sera un
+	 * <code>Component</code>
+	 */
+	private Object[] extras = null;
+
+	/**
+	 * <code>JLabel</code> que representa al componente
+	 */
+	private JLabel jLabel = null;
+
+	/**
+	 * Componente en si donde se modificar� el valor
+	 */
+	private Component component = null;
+
+	/**
+	 * Crea un PropertyStruct vacio
+	 */
+	public PropertyStruct() {
+	}
+
+	/**
+	 * Crea un PropertyStruct;
+	 * @param textLabel
+	 * @param key
+	 * @param value
+	 * @param extras
+	 */
+	public PropertyStruct(String textLabel, String key, Object value, Object[] extras) {
+		setTextLabel(textLabel);
+		setKey(key);
+		setOldValue(value);
+		setNewValue(value);
+		setExtras(extras);
+	}
+
+	/**
+	 * @return the component
+	 */
+	public Component getComponent() {
+		return component;
+	}
+
+	/**
+	 * @param component the component to set
+	 */
+	public void setComponent(Component component) {
+		this.component = component;
+	}
+
+	/**
+	 * @return the extras
+	 */
+	public Object[] getExtras() {
+		return extras;
+	}
+
+	/**
+	 * @param extras the extras to set
+	 */
+	public void setExtras(Object[] extras) {
+		this.extras = extras;
+	}
+
+	/**
+	 * @return the jLabel
+	 */
+	public JLabel getJLabel() {
+		return jLabel;
+	}
+
+	/**
+	 * @param label the jLabel to set
+	 */
+	public void setJLabel(JLabel label) {
+		jLabel = label;
+	}
+
+	/**
+	 * @return the key
+	 */
+	public String getKey() {
+		return key;
+	}
+
+	/**
+	 * @param key the key to set
+	 */
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	/**
+	 * @return the newValue
+	 */
+	public Object getNewValue() {
+		return newValue;
+	}
+
+	/**
+	 * @param newValue the newValue to set
+	 */
+	public void setNewValue(Object newValue) {
+		this.newValue = newValue;
+	}
+
+	/**
+	 * @return the oldValue
+	 */
+	public Object getOldValue() {
+		return oldValue;
+	}
+
+	/**
+	 * @param oldValue the oldValue to set
+	 */
+	public void setOldValue(Object oldValue) {
+		this.oldValue = oldValue;
+	}
+
+	/**
+	 * @return the textLabel
+	 */
+	public String getTextLabel() {
+		return textLabel;
+	}
+
+	/**
+	 * @param textLabel the textLabel to set
+	 */
+	public void setTextLabel(String textLabel) {
+		this.textLabel = textLabel;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/propertiespanel/PropertyStruct.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/AbstractPanelGroup.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/AbstractPanelGroup.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/AbstractPanelGroup.java	(revision 42196)
@@ -0,0 +1,735 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import java.awt.BorderLayout;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.buttonspanel.IButtonsPanel;
+import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupException;
+import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupGUIException;
+import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntAddPanelException;
+import org.gvsig.gui.beans.panelGroup.exceptions.PanelBaseException;
+import org.gvsig.gui.beans.panelGroup.exceptions.PanelWithNoPreferredSizeDefinedException;
+import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>Represents a {@link JPanel JPanel} adapted to work with as a group of {@link IPanel IPanel}'s.</p>
+ *
+ * @see IPanelGroup
+ *
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public abstract class AbstractPanelGroup extends JPanel implements ChangeListener, IPanelGroup, IButtonsPanel {
+	final static private Logger logger = LoggerFactory.getLogger(AbstractPanelGroup.class);
+
+	/**
+	 * <p>If the last notification received has been {@linkplain AbstractPanelGroup#accept()}.</p>
+	 *
+	 * @see #accept()
+	 */
+	protected boolean accepted;
+
+	/**
+	 * <p>Properties associated to this group of panels.</p>
+	 *
+	 * @see #getProperties()
+	 */
+	private Hashtable properties;
+
+	/**
+	 * <p>Object that has a  a ''semantically'' or ''conceptually'' relation to this panel.</p>
+	 *
+	 *  @see #getReference()
+	 */
+	protected Object reference;
+
+	/**
+	 * <p>Array list with all {@link IPanel IPanel} of this group.</p>
+	 *
+	 * @see #loadPanels(IPanelGroupLoader)
+	 * @see #addPanel(IPanel)
+	 * @see #values()
+	 */
+	protected ArrayList<IPanel> registeredPanels = null;
+
+	/**
+	 * <p>Accept action identifier.</p>
+	 */
+	protected final byte ACCEPT_ACTION = 0;
+
+	/**
+	 * <p>Apply action identifier.</p>
+	 */
+	protected final byte APPLY_ACTION = 1;
+
+	/**
+	 * <p>Cancel action identifier.</p>
+	 */
+	protected final byte CANCEL_ACTION = 2;
+
+	/**
+	 * <p>Reference to another <code>IPanelGroup</code> component which contains this one.</p>
+	 */
+	protected IPanelGroup parentPanelGroup;
+
+	/**
+	 * <p>Default constructor of a group of {@link IPanel IPanel}.</p>
+	 *
+	 * @param reference object that is ''semantically' or 'contextually' related to the group of panels
+	 */
+	public AbstractPanelGroup(Object reference) {
+		this.reference = reference;
+
+		initialize();
+	}
+
+	/**
+	 * <p>Returns all panels of this group.</p>
+	 *
+	 * @return panels of this group
+	 *
+	 * @see #loadPanels(IPanelGroupLoader)
+	 * @see #addPanel(IPanel)
+	 */
+	public final Collection<IPanel> values() {
+		return registeredPanels;
+	}
+
+	/**
+	 * <p>This method is used by each concrete implementation of <code>AbstractPanelGroup</code> to
+	 *  execute its particular initialization tasks.</p>
+	 */
+	protected void initialize() {
+		accepted = false;
+		parentPanelGroup = null;
+		properties = new Hashtable();
+
+		// Resizes automatically this and its components, and when a new panel is added, gets adjust to
+		//  the new component could be displayed at least with its preferred size
+		setLayout(new BorderLayout());
+		registeredPanels = new ArrayList<IPanel>();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#loadPanels(org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader)
+	 */
+	public void loadPanels(IPanelGroupLoader loader) throws ListCouldntAddPanelException, EmptyPanelGroupException, EmptyPanelGroupGUIException {
+		ArrayList<IPanel> panels = new ArrayList<IPanel>();
+		ListCouldntAddPanelException listBaseException = null;
+
+		// Don't reload the panels
+		if (registeredPanels.size() > 0)
+			return;
+
+		try {
+			// Tries to load as most as possible panels
+			loader.loadPanels(panels);
+		} catch (Exception e) {
+			listBaseException = addCouldntAddPanelException(listBaseException, e);
+		}
+
+		if (panels.size() == 0) {
+			if (listBaseException == null)
+				throw new EmptyPanelGroupException();
+			else {
+				// If there were other exceptions, launch all them with the 'EmptyPanelGroupException' as the first of them.
+				listBaseException.add(new EmptyPanelGroupException());
+				throw listBaseException;
+			}
+		}
+
+		Iterator<IPanel> iterator = panels.iterator();
+		IPanel panel;
+		PanelWithNoPreferredSizeDefinedException exception;
+
+		while (iterator.hasNext()) {
+			panel = iterator.next();
+
+			try {
+				if (panel.remainsWithItsDefaultPreferredSize()) {
+					exception = new PanelWithNoPreferredSizeDefinedException(panel.getLabel());
+
+					throw exception;
+				}
+				else {
+					loadPanel(panel);
+				}
+			} catch( PanelWithNoPreferredSizeDefinedException e ) {
+				logger.debug(Messages.getText("panel_adding_exception"), e);
+				listBaseException = addCouldntAddPanelException(listBaseException, e);
+			} catch (Exception e) {
+				logger.debug(Messages.getText("panel_adding_exception"), e);
+
+				if (panel == null)
+					listBaseException = addCouldntAddPanelException(listBaseException, new PanelBaseException(e, ""));
+				else
+					listBaseException = addCouldntAddPanelException(listBaseException, new PanelBaseException(e, panel.getLabel()));
+			}
+		}
+
+		if (getPanelCount() == 0) {
+			if (listBaseException != null) {
+				// If there were other exceptions, launch all them with the 'EmptyPanelGroupException' as the first of them.
+				listBaseException = addCouldntAddPanelException(listBaseException, new EmptyPanelGroupException());
+				throw listBaseException;
+			}
+			else {
+				throw new EmptyPanelGroupException();
+			}
+		}
+
+		if (getPanelInGUICount() == 0) {
+			if (listBaseException != null) {
+				// If there were other exceptions, launch all them with the 'EmptyPanelGroupGUIException' as the first of them.
+				listBaseException = addCouldntAddPanelException(listBaseException, new EmptyPanelGroupGUIException());
+				throw listBaseException;
+			}
+			else {
+				throw new EmptyPanelGroupGUIException();
+			}
+		}
+
+		if (listBaseException != null)
+			throw listBaseException;
+	}
+
+	private ListCouldntAddPanelException addCouldntAddPanelException(ListCouldntAddPanelException l, Exception e) {
+		if( l == null ) {
+			l = new ListCouldntAddPanelException();
+		}
+
+		l.add(e);
+
+		return l;
+	}
+
+	/**
+	 * <p>Loads a particular panel. It's supposed that this panel is valid.</p>
+	 *
+	 * @param panel the panel to add
+	 *
+	 * @see #addPanel(IPanel)
+	 * @see #loadPanels(IPanelGroupLoader)
+	 */
+	protected void loadPanel(IPanel panel) {
+		panel.setPanelGroup(this);
+		panel.setReference(reference);
+		registeredPanels.add(panel);
+	}
+
+	/**
+	 * <p>Validates if the panel as parameter belongs this panel group.</p>
+	 * <p>One panel belongs this panel group if have the same references, or
+	 * both references are <code>null</code>. </p>
+	 *
+	 * @param panel the panel to validate
+	 * @return <code>true</code> if belong to this group; otherwise <code>false</code>
+	 */
+	protected boolean belongsThisGroup(IPanel panel) {
+		if (panel == null)
+			return false;
+
+		if (getReference() == null) {
+			if (panel.getReference() == null)
+				return true;
+			else
+				return false;
+		}
+		else {
+			if (panel.getReference() == null)
+				return false;
+			else {
+				if (getReference().equals(panel.getReference()))
+					return true;
+				else
+					return false;
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isAccepted()
+	 */
+	public boolean isAccepted() {
+	  	return accepted;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getProperties()
+	 */
+	public Hashtable getProperties() {
+		return this.properties;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getReference()
+	 */
+	public Object getReference() {
+		return reference;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#updateReference(java.lang.Object)
+	 */
+	public void updateReference(Object reference) {
+		this.reference = reference;
+
+		for (Object panel : values().toArray()) {
+			((AbstractPanel)panel).setReference(reference);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#accept()
+	 */
+	public void accept() {
+		this.executeAction(ACCEPT_ACTION);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#apply()
+	 */
+	public void apply() {
+		this.executeAction(APPLY_ACTION);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#cancel()
+	 */
+	public void cancel() {
+		this.executeAction(CANCEL_ACTION);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
+	 */
+	public abstract void stateChanged(ChangeEvent e);
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#addPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	public void addPanel(IPanel panel) throws BaseException {
+		BaseException baseException = null;
+		ListCouldntAddPanelException listBaseException = null;
+
+		if (panel.remainsWithItsDefaultPreferredSize()) {
+			baseException = new PanelWithNoPreferredSizeDefinedException(panel.getLabel());
+		}
+		else {
+			try {
+				if ((panel.getLabel() != null) && (belongsThisGroup(panel))) {
+					// Load the panel
+					loadPanel(panel);
+				}
+			}
+			catch (Exception e) {
+				logger.debug(Messages.getText("panel_adding_exception"), e);
+
+				if (panel == null)
+					baseException = new PanelBaseException(e, "");
+				else
+					baseException = new PanelBaseException(e, panel.getLabel());
+			}
+		}
+
+		if (registeredPanels.size() == 0) {
+			if (baseException == null) {
+				throw new EmptyPanelGroupException();
+			}
+			else {
+				listBaseException = new ListCouldntAddPanelException();
+				listBaseException.add(baseException);
+				listBaseException.add(new EmptyPanelGroupException());
+			}
+		}
+
+		if (getPanelInGUICount() == 0) {
+			if (listBaseException == null) {
+				if (baseException == null)
+					throw new EmptyPanelGroupGUIException();
+				else {
+					listBaseException = new ListCouldntAddPanelException();
+					listBaseException.add(baseException);
+					listBaseException.add(new EmptyPanelGroupGUIException());
+				}
+			}
+			else {
+				listBaseException.add(new EmptyPanelGroupGUIException());
+			}
+		}
+
+		if (listBaseException != null)
+			throw listBaseException;
+		else {
+			if (baseException != null)
+				throw baseException;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#removePanel(org.gvsig.gui.beans.panelGroup.panels.AbstractPanel)
+	 */
+	public void removePanel(IPanel panel) {
+		if ((belongsThisGroup(panel)) && (panel.getLabel() != null)) {
+			unLoadPanel(panel);
+		}
+	}
+
+	/**
+	 * <p>Unloads a particular panel. It's supposed that this panel is valid.</p>
+	 *
+	 * @param panel the panel to add
+	 *
+	 * @see #removePanel(IPanel)
+	 * @see #loadPanel(IPanel)
+	 * @see #loadPanels(IPanelGroupLoader)
+	 */
+	protected void unLoadPanel(IPanel panel) {
+		registeredPanels.remove(panel);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelCount()
+	 */
+	public int getPanelCount() {
+		return registeredPanels.size();
+	}
+
+	/**
+	 * <p>Executes an <i>accept</i>, <i>apply</i>, or <i>cancel</i> action. This implies notify that action
+	 *  to all panels of the group.</p>
+	 *
+	 * @param action the action to execute
+	 *
+	 * @see IPanel#accept()
+	 * @see IPanel#apply()
+	 * @see IPanel#cancel()
+	 */
+	private void executeAction(byte action) {
+		Iterator<IPanel> iterator = this.registeredPanels.iterator();
+
+		while (iterator.hasNext()) {
+			IPanel panel = iterator.next();
+
+			if ((panel.hasChanged()) || ((!panel.hasChanged()) && (panel.isAlwaysApplicable()))) {
+				switch (action) {
+					case ACCEPT_ACTION:
+						accepted = true;
+						panel.accept();
+						panel.resetChangedStatus();
+						break;
+					case APPLY_ACTION:
+						accepted = false;
+						panel.apply();
+						panel.resetChangedStatus();
+						break;
+					case CANCEL_ACTION:
+						accepted = false;
+						panel.cancel();
+						panel.resetChangedStatus();
+						break;
+				}
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#setParentPanelGroup(org.gvsig.gui.beans.panelGroup.IPanelGroup)
+	 */
+	public void setParentPanelGroup(IPanelGroup parent) {
+		parentPanelGroup = parent;
+	}
+
+	///// BEGIN: Buttons Enable/Disable functionality /////
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledAcceptButton()
+	 */
+	public boolean isEnabledAcceptButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledAcceptButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledApplyButton()
+	 */
+	public boolean isEnabledApplyButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledApplyButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledCancelButton()
+	 */
+	public boolean isEnabledCancelButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledCancelButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledCloseButton()
+	 */
+	public boolean isEnabledCloseButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledCloseButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledExitButton()
+	 */
+	public boolean isEnabledExitButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledExitButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledHideDetailsButton()
+	 */
+	public boolean isEnabledHideDetailsButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledHideDetailsButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledNoButton()
+	 */
+	public boolean isEnabledNoButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledNoButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledPauseButton()
+	 */
+	public boolean isEnabledPauseButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledPauseButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledRestartButton()
+	 */
+	public boolean isEnabledRestartButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledRestartButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSaveButton()
+	 */
+	public boolean isEnabledSaveButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledSaveButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSeeDetailsButton()
+	 */
+	public boolean isEnabledSeeDetailsButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledSeeDetailsButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledYesButton()
+	 */
+	public boolean isEnabledYesButton() {
+		if (parentPanelGroup != null)
+			return ((IButtonsPanel)parentPanelGroup).isEnabledYesButton();
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledAcceptButton(boolean)
+	 */
+	public void setEnabledAcceptButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledAcceptButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledApplyButton(boolean)
+	 */
+	public void setEnabledApplyButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledApplyButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledCancelButton(boolean)
+	 */
+	public void setEnabledCancelButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledCancelButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledCloseButton(boolean)
+	 */
+	public void setEnabledCloseButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledCloseButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledExitButton(boolean)
+	 */
+	public void setEnabledExitButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledExitButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledHideDetailsButton(boolean)
+	 */
+	public void setEnabledHideDetailsButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledHideDetailsButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledNoButton(boolean)
+	 */
+	public void setEnabledNoButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledNoButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledPauseButton(boolean)
+	 */
+	public void setEnabledPauseButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledPauseButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledRestartButton(boolean)
+	 */
+	public void setEnabledRestartButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledRestartButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSaveButton(boolean)
+	 */
+	public void setEnabledSaveButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledSaveButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSeeDetailsButton(boolean)
+	 */
+	public void setEnabledSeeDetailsButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledSeeDetailsButton(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledYesButton(boolean)
+	 */
+	public void setEnabledYesButton(boolean b) {
+		if (parentPanelGroup != null)
+			((IButtonsPanel)parentPanelGroup).setEnabledYesButton(b);
+	}
+
+	///// END: Buttons Enable/Disable functionality /////
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/AbstractPanelGroup.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupGUIException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupGUIException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupGUIException.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.exceptions;
+
+import java.util.Map;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.IPanelGroup;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * <p>When an object of type {@link IPanelGroup IPanelGroup} hasn't any of its registered panels in its GUI
+ *  launches an exception of this kind.</p> 
+ * 
+ * @version 27/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class EmptyPanelGroupGUIException extends BaseException {
+	private static final long serialVersionUID = 1244814519514860627L;
+
+	/**
+	 * <p>Creates an initializes a new instance of <code>EmptyPanelGroupGUIException</code>.</p>
+	 */
+	public EmptyPanelGroupGUIException() {
+		super();
+
+		// Identifier of this kind of exception
+		this.code = serialVersionUID;
+		
+		// Default text that explains this kind of exception. If there is no translation associated to the
+		// "messageKey" of this exception, then the value shown will be the value of "formatString".
+		this.formatString = "No panel in the graphical user interface.";
+
+		 // Key to the sentence that explains this exception. That key will be use for multilingual purposes.
+		this.messageKey = "empty_panel_group_gui_exception";
+
+		setTranslator(new Messages());
+	}
+
+	protected Map<String, String> values() {
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupGUIException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelWithNoPreferredSizeDefinedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelWithNoPreferredSizeDefinedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelWithNoPreferredSizeDefinedException.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.exceptions;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.IPanelGroup;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * <p>If an object of type {@link IPanelGroup IPanelGroup} tries to load a panel that its preferred sized
+ *  hasn't been initialized, (not the default preferred size), then an exception of this kind will be
+ *  launched.</p>
+ * 
+ * @version 28/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class PanelWithNoPreferredSizeDefinedException extends BaseException {
+	private static final long serialVersionUID = 3953831724578904518L;
+	protected HashMap<String, String> values;
+	public static final String PANEL_LABEL = "PANEL_LABEL";
+
+	/**
+	 * <p>Creates an initializes a new instance of <code>PanelWithNoPreferredSizedDefinedException</code>.</p>
+	 */
+	public PanelWithNoPreferredSizeDefinedException() {
+		super();
+
+		initialize();
+	}
+	
+	/**
+	 * <p>Creates an initializes a new instance of <code>PanelWithNoPreferredSizedDefinedException</code>.</p>
+	 * 
+	 * @param panelLabel label of the panel which is the source of this exception
+	 */
+	public PanelWithNoPreferredSizeDefinedException(String panelLabel) {
+		super();
+
+		initialize();
+
+		// Sets the needed information
+		setPanelLabel(panelLabel);
+	}
+	
+	/**
+	 * <p>Initializes a <code>PanelBaseException</code> with the needed information.</p>
+	 */
+	protected void initialize() {
+		// Identifier of this kind of exception
+		this.code = serialVersionUID;
+		
+		// Default text that explains this kind of exception. If there is no translation associated to the
+		// "messageKey" of this exception, then the value shown will be the value of "formatString".
+		this.formatString = "Panel with label \"%(" + PANEL_LABEL + ")\" without preferred size defined.";
+
+		 // Key to the sentence that explains this exception. That key will be use for multilingual purposes.
+		this.messageKey = "panel_without_preferred_size_defined_exception";
+		
+		// Map with the label of the panel
+		values = new HashMap<String, String>();
+		values.put(PANEL_LABEL, "");
+
+		setTranslator(new Messages());
+	}
+
+	protected Map<String, String> values() {
+		return values;
+	}
+
+	/**
+	 * <p>Gets the label of the panel which is the source of this exception, or
+	 *  <code>null</code> if hasn't been defined.</p>
+	 * 
+	 * @return label of the panel which is the source of this exception
+	 */
+	public String getPanelLabel() {
+		return values.get(PANEL_LABEL);
+	}
+
+	/**
+	 * <p>Sets the label of the panel which is the source of this exception.</p>
+	 * 
+	 * @param panelLabel label of the panel which is the source of this exception
+	 */
+	public void setPanelLabel(String panelLabel) {
+		if (panelLabel == null) {
+			values.put(PANEL_LABEL, "");
+		} else {
+			values.put(PANEL_LABEL, panelLabel);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelWithNoPreferredSizeDefinedException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntLoadPanelException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntLoadPanelException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntLoadPanelException.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.exceptions;
+
+import java.util.Map;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
+import org.gvsig.tools.exception.ListBaseException;
+
+/**
+ * <p>It's possible that during the loading process of an {@link IPanelGroupLoader IPanelGroupLoader}, any of the panels
+ *  that are being loaded could failed. To avoid stop the process, the exception launched will be caught and
+ *  stored in an exception of this kind.</p>
+ *
+ * @version 27/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class ListCouldntLoadPanelException extends ListBaseException {
+	private static final long serialVersionUID = -8474169506341379995L;
+
+
+	// Default text that explains this kind of exception. If there is no
+	// translation associated to the
+	// "messageKey" of this exception, then the value shown will be the value of
+	// "formatString".
+	private static final String formatString = "Couldn't load some panels:";
+
+	// Key to the sentence that explains this exception. That key will be use
+	// for multilingual purposes.
+	private static final String messageKey = "couldnt_load_some_panel_exception";
+
+
+
+	protected ListCouldntLoadPanelException(String message, String key,
+			long code) {
+		super(formatString, messageKey, serialVersionUID);
+	}
+	/**
+	 * <p>Creates an initializes a new instance of <code>ListCouldntLoadPanelException</code>.</p>
+	 */
+	public ListCouldntLoadPanelException() {
+		super(formatString, messageKey, serialVersionUID);
+
+		setTranslator(new Messages());
+	}
+
+	protected Map<String, String> values() {
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntLoadPanelException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelBaseException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelBaseException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelBaseException.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.exceptions;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * <p>Adapts any <i>Java</i> exception produced working with panels to be dealed in as a {@link BaseException BaseException}.</p>
+ * 
+ * @version 11/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class PanelBaseException extends BaseException {
+	private static final long serialVersionUID = -5248981827020054295L;
+	protected HashMap<String, String> values;
+	public static final String PANEL_LABEL = "PANEL_LABEL";
+	public static final String CAUSE_MESSAGE = "CAUSE_MESSAGE";
+
+	/**
+	 * <p>Creates and initializes a new instance of <code>PanelBaseException</code>.</p>
+	 */
+	public PanelBaseException() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * <p>Creates and initializes a new instance of <code>PanelBaseException</code>.</p>
+	 * 
+	 * @param e the exception to be wrappered
+	 */
+	public PanelBaseException(Exception e) {
+		super();
+		initialize();
+		initCause(e);
+	}
+
+	/**
+	 * <p>Creates and initializes a new instance of <code>PanelBaseException</code>.</p>
+	 * 
+	 * @param e the exception to be wrappered
+	 * @param panelLabel label of the panel which is the source of the exception wrappered
+	 */
+	public PanelBaseException(Exception e, String panelLabel) {
+		super();
+		initialize();
+		initCause(e);
+		setPanelLabel(panelLabel);
+	}
+
+	protected Map<String, String> values() {
+		return values;
+	}
+
+	/**
+	 * <p>Initializes a <code>PanelBaseException</code> with the needed information.</p>
+	 */
+	protected void initialize() {
+		// Identifier of this kind of exception
+		this.code = serialVersionUID;
+		
+		// Default text that explains this kind of exception. If there is no translation associated to the
+		// "messageKey" of this exception, then the value shown will be the value of "formatString".
+		this.formatString = "Error loading %(" + PANEL_LABEL + ")%(" + CAUSE_MESSAGE + ").";
+
+		 // Key to the sentence that explains this exception. That key will be use for multilingual purposes.
+		this.messageKey = "panel_base_exception";
+		
+		// Map with the label of the panel
+		values = new HashMap<String, String>();
+		values.put(PANEL_LABEL, Messages.getText("a_panel"));
+		values.put(CAUSE_MESSAGE, "");
+		
+		setTranslator(new Messages());
+	}
+
+	/**
+	 * <p>Gets the label of the panel which is the source of this exception, or
+	 *  <code>null</code> if hasn't been defined.</p>
+	 * 
+	 * @return label of the panel which is the source of this exception
+	 */
+	public String getPanelLabel() {
+		return values.get(PANEL_LABEL);
+	}
+
+	/**
+	 * <p>Sets the label of the panel which is the source of this exception.</p>
+	 * 
+	 * @param panelLabel label of the panel which is the source of this exception
+	 */
+	public void setPanelLabel(String panelLabel) {
+		if ((panelLabel.equals("")) || (panelLabel == null)) {
+			values.put(PANEL_LABEL, Messages.getText("a_panel"));
+		} else {
+			values.put(PANEL_LABEL, Messages.getText("the_panel") + " \"" + panelLabel + "\"");
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Throwable#initCause(java.lang.Throwable)
+	 */
+	public Throwable initCause(Throwable cause) {
+		Throwable t = super.initCause(cause);
+		
+		if ((cause == null) || (cause.getLocalizedMessage() == null)) {
+			values.put(CAUSE_MESSAGE, "");
+		} else {
+			values.put(CAUSE_MESSAGE, ": " + cause.getLocalizedMessage());
+		}
+		
+		return t;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/PanelBaseException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupException.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.exceptions;
+
+import java.util.Map;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.IPanelGroup;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * <p>When an object of type {@link IPanelGroup IPanelGroup} tries to load panels, but
+ *  can't load any of them finally, then launches an exception of this kind.</p> 
+ * 
+ * @version 27/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class EmptyPanelGroupException extends BaseException {
+	private static final long serialVersionUID = -6903623253538826864L;
+
+	/**
+	 * <p>Creates an initializes a new instance of <code>EmptyPanelGroupException</code>.</p>
+	 */
+	public EmptyPanelGroupException() {
+		super();
+
+		// Identifier of this kind of exception
+		this.code = serialVersionUID;
+		
+		// Default text that explains this kind of exception. If there is no translation associated to the
+		// "messageKey" of this exception, then the value shown will be the value of "formatString".
+		this.formatString = "No panel loaded.";
+
+		 // Key to the sentence that explains this exception. That key will be use for multilingual purposes.
+		this.messageKey = "empty_panel_group_exception";
+		
+		setTranslator(new Messages());
+	}
+
+	protected Map<String, String> values() {
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/EmptyPanelGroupException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntAddPanelException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntAddPanelException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntAddPanelException.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.exceptions;
+
+import java.util.Map;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
+import org.gvsig.tools.exception.ListBaseException;
+
+/**
+ * <p>It's possible that during the loading process of an {@link IPanelGroupLoader IPanelGroupLoader}, any of the panels
+ *  that are being added could failed. To avoid stop the process, the exception launched will be caught and
+ *  stored in a <code>ListCouldntAddPanelException</code>.</p>
+ *
+ * @version 28/11/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class ListCouldntAddPanelException extends ListBaseException {
+	private static final long serialVersionUID = -8397609549559655067L;
+
+	// Default text that explains this kind of exception. If there is no
+	// translation associated to the
+	// "messageKey" of this exception, then the value shown will be the value of
+	// "formatString".
+	private static final String formatString = "Couldn't add some panels to the panel-group component:";
+
+	// Key to the sentence that explains this exception. That key will be use
+	// for multilingual purposes.
+	private static final String messageKey = "couldnt_add_some_panel_exception";
+
+	/**
+	 * <p>Creates an initializes a new instance of <code>ListCouldntAddPanelException</code>.</p>
+	 */
+	public ListCouldntAddPanelException() {
+		super(formatString, messageKey, serialVersionUID);
+
+		setTranslator(new Messages());
+	}
+
+	protected Map<String, String> values() {
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/exceptions/ListCouldntAddPanelException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/tabbedPanel/TabbedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/tabbedPanel/TabbedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/tabbedPanel/TabbedPanel.java	(revision 42196)
@@ -0,0 +1,344 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.tabbedPanel;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ContainerEvent;
+import java.awt.event.ContainerListener;
+import java.io.Serializable;
+import java.util.Vector;
+
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
+import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+
+
+/**
+ * <p>Graphical interface that's a {@link JPanel JPanel} with an inner {@link JTabbedPane JTabbedPane} that
+ * contains the {@link IPanel IPanel}'s of this group, and supports work with them.</p>
+ * 
+ * @see AbstractPanelGroup
+ * 
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class TabbedPanel extends AbstractPanelGroup implements Serializable {
+	private static final long serialVersionUID = -7979646227156641693L;
+
+	/**
+	 * <p>Graphical interface where the panels will be drawn.</p>
+	 * 
+	 * @see #getJTabbedPane()
+	 */
+	private JTabbedPane jTabbedPane;
+
+	static {
+		// Registers this class as a "PanelGroup" type
+		PanelGroupManager.getManager().registerPanelGroup(TabbedPanel.class);
+		
+		// Sets this class as the default "PanelGroup" type
+		PanelGroupManager.getManager().setDefaultType(TabbedPanel.class);
+	}
+
+	/**
+	 * <p>Default constructor.</p>
+	 * 
+	 * @param reference object that is ''semantically' or 'contextually' related to the group of panels
+	 */
+	public TabbedPanel(Object reference) {
+		super(reference);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#initialize()
+	 */
+	protected void initialize() {
+		super.initialize();
+		this.setLayout(new BorderLayout());
+		this.add(getJTabbedPane(), BorderLayout.CENTER);
+	}
+
+	/**
+	 * This method initializes jTabbedPane
+	 *
+	 * @return JTabbedPane
+	 */
+	protected JTabbedPane getJTabbedPane() {
+		if (jTabbedPane == null) {
+			jTabbedPane = new JTabbedPane();
+			jTabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+
+			jTabbedPane.addContainerListener(new ContainerListener() {
+				/*
+				 * (non-Javadoc)
+				 * @see java.awt.event.ContainerListener#componentAdded(java.awt.event.ContainerEvent)
+				 */
+				public void componentAdded(ContainerEvent e) {
+					// Propagates the event -> this allows notify that a component has been added into this TabbedPanel
+					dispatchEvent(e);
+				}
+
+				/*
+				 * (non-Javadoc)
+				 * @see java.awt.event.ContainerListener#componentRemoved(java.awt.event.ContainerEvent)
+				 */
+				public void componentRemoved(ContainerEvent e) {
+					// Propagates the event -> this allows notify that a component has been removed from this TabbedPanel
+					dispatchEvent(e);
+				}
+			});
+
+			jTabbedPane.addChangeListener(new ChangeListener() {
+				/*
+				 * (non-Javadoc)
+				 * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
+				 */
+				public void stateChanged(ChangeEvent e) {
+					Object source = e.getSource();
+					
+					if (!((source != null) && (source instanceof JTabbedPane)))
+						return;
+
+					Object parent = ((JTabbedPane)source).getParent();
+					
+					if (!(parent instanceof TabbedPanel))
+						return;
+					
+					Object object = ((JTabbedPane)source).getSelectedComponent();
+
+					if ((object != null) && (object instanceof AbstractPanel)) {
+		        		// Notifies the new panel selected
+						((TabbedPanel)parent).stateChanged(new ChangeEvent(object));
+					}
+				}
+			});
+		}
+
+		return jTabbedPane;
+	}
+
+	/**
+	 * @see JTabbedPane#getSelectedIndex()
+	 * @see #setSelectedIndex(int)
+	 */
+	public int getSelectedIndex() {
+		return getJTabbedPane().getSelectedIndex();
+	}
+
+	/**
+	 * @see JTabbedPane#setSelectedIndex(int)
+	 * @see #getSelectedIndex()
+	 */
+	public void setSelectedIndex(int position) {
+		getJTabbedPane().setSelectedIndex(position);
+	}
+
+//	/*
+//	 * (non-Javadoc)
+//	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#addPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+//	 */
+//	public void addPanel(IPanel panel) throws EmptyPanelGroupException, EmptyPanelGroupGUIException, PanelWithNoPreferredSizeDefinedException {
+//		if ((belongsThisGroup(panel)) && (panel.getLabel() != null)) {
+//			super.loadPanel(panel);
+//			
+//			if (((AbstractPanel)panel).isVisible())
+//				getJTabbedPane().add(panel.getLabel(), (JPanel)panel);
+//		}
+//	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#loadPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	protected void loadPanel(IPanel panel) {
+		super.loadPanel(panel);
+		
+		if (((AbstractPanel)panel).isVisible()) {
+			getJTabbedPane().add(panel.getLabel(), (JPanel)panel);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#unLoadPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	protected void unLoadPanel(IPanel panel) {
+		super.unLoadPanel(panel);
+
+		getJTabbedPane().remove((Component) panel);
+	}
+	
+//	/*
+//	 * (non-Javadoc)
+//	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#removePanel(org.gvsig.gui.beans.panelGroup.panels.AbstractPanel)
+//	 */
+//	public void removePanel(IPanel panel) {
+//		
+//		if ((belongsThisGroup(panel)) && (panel.getLabel() != null)) {
+//			super.removePanel(panel);
+//			getJTabbedPane().remove((Component) panel);
+//		}
+//	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getActivePanel()
+	 */
+	public IPanel getActivePanel() {
+		if (getJTabbedPane().getSelectedComponent() instanceof IPanel)
+			return (IPanel)getJTabbedPane().getSelectedComponent(); 		
+		else
+			return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#stateChanged(javax.swing.event.ChangeEvent)
+	 */
+	public void stateChanged(ChangeEvent e) {
+		if (registeredPanels.size() == 0)
+			return;
+
+		Object object = e.getSource();
+
+		if (object != null)
+			((IPanel)object).selected();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#setPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel, boolean)
+	 */
+	public synchronized void setPanelInGUI(IPanel panel, boolean b) {
+		if (registeredPanels.size() == 0)
+			return;
+
+		if (registeredPanels.indexOf(panel) == -1)
+			return;
+		
+		// Remove all tabs and re-insert the necessary
+		Vector<Component> tabPanels = new Vector<Component>(0, getJTabbedPane().getTabCount());
+
+		for (int i = getJTabbedPane().getTabCount() -1; i >= 0; i--){
+			if (getJTabbedPane().getComponentAt(i) instanceof AbstractPanel) {
+				tabPanels.add(getJTabbedPane().getComponentAt(i));
+				getJTabbedPane().removeTabAt(i);
+			}
+		}
+
+		if (b == true) {
+			for (IPanel regPanel: registeredPanels) {
+				if (regPanel.equals(panel)) {
+					getJTabbedPane().add(panel.getLabel(), (JPanel)panel);
+				}
+				else {
+					if (tabPanels.indexOf((Component)regPanel) != -1) 
+						getJTabbedPane().add(regPanel.getLabel(), (JPanel)regPanel);
+				}
+			}
+		}
+		else {
+			for (IPanel regPanel: registeredPanels) {
+				if (tabPanels.indexOf((Component)regPanel) != -1) {
+					if (!(regPanel.equals(panel))) {
+						getJTabbedPane().add(regPanel.getLabel(), (JPanel)regPanel);
+					}
+				}
+			}
+		}
+
+		repaint();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	public synchronized boolean isPanelInGUI(IPanel panel) {
+		if (!registeredPanels.contains(panel))
+			return false;
+
+		for (int i = getJTabbedPane().getTabCount() -1; i >= 0; i--){
+			Object object = getJTabbedPane().getComponentAt(i);
+			if (object instanceof AbstractPanel) {
+				if (object.equals(panel))
+					return true;
+			}
+		}
+		
+		return false;
+	}
+
+	/**
+	 * @see JTabbedPane#setEnabledAt(int, boolean)
+	 */
+	public void setEnabledAt(int index, boolean enabled) {
+		getJTabbedPane().setEnabledAt(index, enabled);
+	}
+
+	/**
+	 * @see JTabbedPane#isEnabledAt(int)
+	 */
+	public boolean isEnabledAt(int index) {
+		return getJTabbedPane().isEnabledAt(index);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelInGUICount()
+	 */
+	public int getPanelInGUICount() {
+		return getJTabbedPane().getTabCount();
+	}
+
+	/**
+     * @see JTabbedPane#addChangeListener(ChangeListener)
+     */
+    public void addChangeListener(ChangeListener l) {
+		getJTabbedPane().addChangeListener(l);
+	}
+
+    /**
+     * @see JTabbedPane#removeChangeListener(ChangeListener)
+     */
+    public void removeChangeListener(ChangeListener l) {
+        listenerList.remove(ChangeListener.class, l);
+    }
+
+    /**
+     * @see JTabbedPane#getChangeListeners()
+     */
+    public ChangeListener[] getChangeListeners() {
+        return (ChangeListener[])listenerList.getListeners(ChangeListener.class);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/tabbedPanel/TabbedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/AbstractPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/AbstractPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/AbstractPanel.java	(revision 42196)
@@ -0,0 +1,297 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.panels;
+
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
+
+/**
+ * <p>Represents a {@link JPanel JPanel} adapted to work as a panel of an {@link AbstractPanelGroup  AbstractPanelGroup}.</p>
+ *  
+ * @see JPanel
+ * @see IPanel
+ * 
+ * @see AbstractPanelGroup
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public abstract class AbstractPanel extends JPanel implements IPanel {
+	/**
+	 * <p>If this panel remains with its initial preferred size of it has been changed.</p>
+	 * 
+	 * @see #remainsWithItsDefaultPreferredSize()
+	 */
+	protected boolean remainsWithDefaultPreferredSize;
+
+	/**
+	 * <p>Optional attribute that identifies this panel.</p>
+	 * 
+	 * @see #getID()
+	 * @see #setID(String)
+	 */
+	private String id;
+
+	/**
+	 * <p>Identifier used by a {@link AbstractPanelGroup AbstractPanelGroup} to identify this panel.</p>
+	 * 
+	 * @see #getLabel()
+	 * @see #setLabel(String)
+	 */
+	private String label;
+
+	/**
+	 * <p>Identifier used to group together different <code>IPanel</code> panels
+     *      in a {@link AbstractPanelGroup AbstractPanelGroup}</p>
+     *
+     * @see #getLabelGroup()
+     * @see #setLabelGroup(String)
+	 */
+	private String labelGroup;
+
+	/**
+	 * <p>Reference to an object that is related this panel</p>
+	 * 
+	 * @see #getReference()
+	 * @see #setReference(Object)
+	 */
+	private Object reference;
+
+	/**
+	 * <p>Reference to the container of the group which this panel is a member.</p>
+	 * 
+	 * @see #getPanelGroup()
+	 * @see #setPanelGroup(AbstractPanelGroup)
+	 */
+	private AbstractPanelGroup panelGroup;
+	
+	/**
+	 * <p>Determines if this component has changed since it was created, or applied (or accepted).</p>
+	 */
+	protected boolean hasChanged;
+
+	/**
+	 * <p>Determines if this panel will always be applied and accepted, or only when has changed.</p>
+	 */
+	private boolean alwaysApplicable;
+	
+	/**
+	 * <p>Initializes this panel.</p>
+	 */
+	public AbstractPanel() {
+		super();
+		
+		id = null;
+		label = null;
+		labelGroup = null;
+		remainsWithDefaultPreferredSize = true;
+		hasChanged = false;
+		alwaysApplicable = true;
+	}
+
+	/**
+	 * <p>Initializes this panel using three parameters.</p>
+	 * 
+	 * @param id optional attribute that identifies this panel
+	 * @param label identifier used by a {@link AbstractPanelGroup AbstractPanelGroup} to identify this panel
+	 * @param labelGroup identifier used to group together different <code>IPanel</code> panels
+     *      in a {@link AbstractPanelGroup AbstractPanelGroup}
+	 */
+	public AbstractPanel(String id, String label, String labelGroup) {
+		super();
+		
+		this.id = id;
+		this.label = label;
+		this.labelGroup = labelGroup;
+		remainsWithDefaultPreferredSize = true;
+		hasChanged = false;
+		alwaysApplicable = true;
+	}
+
+	/**
+	 * <p>This method is used by each concrete implementation of <code>AbstractPanel</code> to
+	 *  execute its particular initialization tasks.</p>
+	 */
+	protected abstract void initialize();
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#getID()
+	 */
+	public String getID() {
+		return id;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#getLabel()
+	 */
+	public String getLabel() {
+		return label;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#getLabelGroup()
+	 */
+	public String getLabelGroup() {
+		return labelGroup;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#setID(java.lang.String)
+	 */
+	public void setID(String id) {
+		this.id = id;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#setLabel(java.lang.String)
+	 */
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#setLabelGroup(java.lang.String)
+	 */
+	public void setLabelGroup(String labelGroup) {
+		this.labelGroup = labelGroup;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#getReference()
+	 */
+	public Object getReference() {
+		return reference; 
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#setReference(java.lang.Object)
+	 */
+	public void setReference(Object ref) {
+		reference = ref;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#getPanelGroup()
+	 */
+	public AbstractPanelGroup getPanelGroup() {
+		return panelGroup;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#setPanelGroup(org.gvsig.gui.beans.panelGroup.AbstractPanelGroup)
+	 */
+	public void setPanelGroup(AbstractPanelGroup panelGroup) {
+		this.panelGroup = panelGroup;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#setInGroupGUI(boolean)
+	 */
+	public synchronized void setInGroupGUI(boolean visible) {
+		if (panelGroup != null)
+			panelGroup.setPanelInGUI(this, visible);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#isInGroupGUI()
+	 */
+	public synchronized boolean isInGroupGUI() {
+		if (panelGroup == null)
+			return false;
+
+		return panelGroup.isPanelInGUI(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Component#toString()
+	 */
+	public String toString() {
+		return (label == null)? "": label;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#remainsWithItsDefaultPreferredSize()
+	 */
+	public boolean remainsWithItsDefaultPreferredSize() {
+		return remainsWithDefaultPreferredSize;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#setPreferredSize(java.awt.Dimension)
+	 */
+	public void setPreferredSize(Dimension preferredSize) {
+		super.setPreferredSize(preferredSize);
+		remainsWithDefaultPreferredSize = false;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#hasChanged()
+	 */
+	public boolean hasChanged() {
+		return hasChanged;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#resetChangedStatus()
+	 */
+	public void resetChangedStatus() {
+		hasChanged = false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#setAlwaysApplicable(boolean)
+	 */
+	public void setAlwaysApplicable(boolean b) {
+		alwaysApplicable = b;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#isAlwaysApplicable()
+	 */
+	public boolean isAlwaysApplicable() {
+		return alwaysApplicable;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/AbstractPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/IPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/IPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/IPanel.java	(revision 42196)
@@ -0,0 +1,220 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.panels;
+
+import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
+import org.gvsig.gui.beans.panelGroup.IPanelGroup;
+
+/**
+ * <p>Common interface for all kinds of {@link AbstractPanel AbstractPanel}.</p>
+ * <p>An <i>IPanel</i> has:
+ *  <ul>
+ *   <li>Three identifiers:</li>
+ *    <ul>
+ *     <li><b>ID</b>: (optional) identifies neutrally the panel.</li>
+ *     <li><b>Label</b>: identifier of the panel, used by a {@link AbstractPanelGroup AbstractPanelGroup}.</li>
+ *     <li><b>LabelGroup</b>: identifier of the panel used to group together different <code>IPanel</code> panels
+ *      of a {@link AbstractPanelGroup AbstractPanelGroup}.</li>
+ *    </ul>
+ *   <li>An optional reference to an object that is related ''semantically'' or ''conceptually'' to this panel (Ex. this panel is about some properties of a raster layer).</li>
+ *  </ul>
+ * </p>
+ * 
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public interface IPanel {
+	/**
+	 * <p>Gets the panel identifier.</p>.
+	 * 
+	 * @return panel identifier, or <code>null</code> if undefined
+	 * 
+	 * @see #setID(String)
+	 */
+	public abstract String getID();
+
+	/**
+	 * <p>Gets the identifier of the panel used by a {@link AbstractPanelGroup AbstractPanelGroup}.</p>
+	 * 
+	 * @return panel label identifier, or <code>null</code> if undefined
+	 * 
+	 * @see #setLabel(String)
+	 */
+	public abstract String getLabel();
+
+	/**
+	 * <p>Gets the identifier of the panel used to group together different <code>IPanel</code> panels
+     *      in a {@link AbstractPanelGroup AbstractPanelGroup}.</p>
+	 * 
+	 * @return panel label group identifier, or <code>null</code> if undefined
+	 * 
+	 * @see #setLabelGroup(String)
+	 */
+	public abstract String getLabelGroup();
+
+	/**
+	 * <p>Sets the identifier of the panel used by a {@link AbstractPanelGroup AbstractPanelGroup}.</p>
+	 * 
+	 * @param id panel label identifier, or <code>null</code> if undefined
+	 * 
+	 * @see #getID()
+	 */
+	public abstract void setID(String id);
+
+	/**
+	 * <p>Sets the identifier of the panel used by a {@link AbstractPanelGroup AbstractPanelGroup}.</p>
+	 * 
+	 * @param label panel label identifier, or <code>null</code> if undefined
+	 * 
+	 * @see #getLabel()
+	 */
+	public abstract void setLabel(String label);
+
+	/**
+	 * <p>Sets the identifier of the panel used to group together different <code>IPanel</code> panels
+     *      of a {@link AbstractPanelGroup AbstractPanelGroup}.</p>
+	 * 
+	 * @param labelGroup label group identifier, or <code>null</code> if undefined
+	 * 
+	 * @see #getLabelGroup()
+	 */
+	public abstract void setLabelGroup(String labelGroup);
+
+	/**
+	 * <p>Gets the object that has a ''semantically'' or ''conceptually'' relation to this panel, this is used to group
+	 *  <code>IPanel</code> panels on a {@link IPanelGroup IPanelGroup} object.</p>
+	 * 
+	 * @return object that has reference this panel, or <code>null</code> if there has reference
+	 *  to no object
+	 * 
+	 * @see #setReference(Object)
+	 */
+	public abstract Object getReference();
+
+	/**
+	 * <p>Sets a reference to an object that is ''semantically' or 'contextually' related to this panel.</p>
+	 * 
+	 * @param ref an object
+	 * 
+	 * @see #getReference()
+	 */
+	public abstract void setReference(Object ref);
+
+	/**
+	 * <p>Gets a reference to the object that contains the group which this panel is a member.</p>
+	 * 
+	 * @return an object that contains this panel's group
+	 * 
+	 * @see #setPanelGroup(AbstractPanelGroup)
+	 */
+	public abstract AbstractPanelGroup getPanelGroup();
+
+	/**
+	 * <p>Sets a reference to the object that contains the group which this panel is a member.</p>
+	 * 
+	 * @param panelGroup object that contains this panel's group
+	 * 
+	 * @see #getPanelGroup()
+	 */
+	public abstract void setPanelGroup(AbstractPanelGroup panelGroup);
+
+	/**
+	 * <p>If this panel belongs to a 'panel group', changes its visibility at the interface of the panel group.
+	 *  If changes to invisible, then this panel won't be accessible by the user interface. But if changes to visible
+	 *  and was invisible before, then will appear at the same position it was in the user interface. The position is
+	 *  according the order of the insertion at the group. Anyway, the group will have this panel.</p>
+	 * 
+	 * @param b the new visibility for that panel.
+	 */
+	public abstract void setInGroupGUI(boolean b);
+
+	/**
+	 * <p>Returns <code>true</code> if this panel belongs to a 'panel group' and it's loaded in the graphical user interface
+	 *  of that component; otherwise returns <code>false</code>.</p>
+	 * 
+	 * @return <code>true</code> if this panel belongs to a 'panel group' and it's loaded in the graphical user interface
+	 *  of that component
+	 */
+	public abstract boolean isInGroupGUI();
+
+	/**
+	 * <p>Returns if this panel remains with its initial preferred size of it has been changed.</p>
+	 * 
+	 * @return if this panel remains with its initial preferred size of it has been changed
+	 */
+	public abstract boolean remainsWithItsDefaultPreferredSize();
+
+	/**
+	 * <p>Notifies to this panel of an <i>accept</i> action.</p>
+	 */
+	public abstract void accept();
+
+	/**
+	 * <p>Notifies this panel of an <i>apply</i> action.</p>
+	 */
+	public abstract void apply();
+
+	/**
+	 * <p>Notifies this panel of a <i>cancel</i> action.</p>
+	 */
+	public abstract void cancel();
+
+	/**
+	 * <p>Notifies this panel that has been selected at the {@link AbstractPanelGroup AbstractPanelGroup}</p>
+	 */
+	public abstract void selected();
+
+	/**
+	 * <p>Determines if this panel has changed since it was created, or applied (or accepted or cancelled). The 
+	 *  programmer of each panel will be whom would set to <code>true</code> that a panel has changed.</p>
+	 *
+	 * @return <code>true</code> if this panel has changed since it was created, or applied (or accepted or cancelled); otherwise <code>false</code> 
+	 */
+	public abstract boolean hasChanged();
+
+	/**
+	 * <p>Resets this panel <i>changed status</i> to its initial value.</p>
+	 */
+	public abstract void resetChangedStatus();
+
+	/**
+	 * <p>Sets if this panel will always be applied and accepted (by default), or only when has changed.</i></p>
+	 * 
+	 * @param b if this panel will always be applied and accepted, or only when has changed
+	 * 
+	 * @see #isAlwaysApplicable()
+	 * @see #hasChanged()
+	 */
+	public abstract void setAlwaysApplicable(boolean b);
+	
+	/**
+	 * <p>Gets if this panel will always be applied and accepted (by default), or only when has changed.</i></p>
+	 * 
+	 * @return if this panel will always be applied and accepted, or only when has changed
+	 * 
+	 * @see #setAlwaysApplicable(boolean)
+	 * @see #hasChanged()
+	 */
+	public abstract boolean isAlwaysApplicable();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/panels/IPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/IPanelGroup.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/IPanelGroup.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/IPanelGroup.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import java.util.Hashtable;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupException;
+import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupGUIException;
+import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntAddPanelException;
+import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+
+/**
+ * <p>All kind of panels which support a group of {@link IPanel IPanel} must
+ *  implement this interface.</p>
+ * 
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public interface IPanelGroup {
+	/**
+	 * <p>Adds another {@link IPanel IPanel} to this group.</p>
+	 * 
+	 * @param panel the <code>IPanel</code> to add
+	 * 
+	 * @throws EmptyPanelGroupException if there was no panel loaded and tries to add a new one, launches this exception
+	 *  if the panel to add hasn't been registered to this component and then, no remains without panels
+	 * @throws EmptyPanelGroupGUIException if there was no panel loaded and tries to add a new one, launches this exception
+	 *  if the panel to add hasn't been set to this component graphical interface and then, no remains without panels
+	 *  in its graphical interface
+	 * 
+	 * @see #loadPanels(IPanelGroupLoader)
+	 * @see #removePanel(IPanel)
+	 */
+	public abstract void addPanel(IPanel panel) throws BaseException;
+
+	/**
+	 * <p>Removes an {@link IPanel IPanel} from this group.</p>
+	 * 
+	 * @param panel the <code>IPanel</code> to remove
+	 * 
+	 * @see #addPanel(IPanel)
+	 * @see #loadPanels(IPanelGroupLoader)
+	 */
+	public abstract void removePanel(IPanel panel);
+
+	/**
+	 * <p>Tries to load as most as possible panels using an <code>IPanelGroupLoader</code>.</p>
+	 *  
+	 * @param loader used to load the panels into this group
+	 * 
+	 * @throws ListCouldntAddPanelException list with all exceptions produced loading and adding the panels
+	 * @throws EmptyPanelGroupException launched if there was no exception during the loading and adding processes
+	 *  but there is no panel registered finally in this component
+	 * @throws EmptyPanelGroupGUIException launched if there was no exception during the loading and adding processes
+	 * there is at least one panel registered, but finally none of them is in the graphical interface of this component
+	 * 
+	 * @see #addPanel(IPanel)
+	 */
+	public abstract void loadPanels(IPanelGroupLoader loader) throws ListCouldntAddPanelException, EmptyPanelGroupException, EmptyPanelGroupGUIException;
+
+	/**
+	 * <p>Gets a reference to the active panel in this group.</p>
+	 * 
+	 * @return a reference to the active panel, or <code>null</code> if there is no any active
+	 */
+	public abstract IPanel getActivePanel();
+
+	/**
+	 * <p>Gets the properties associated to this group of panels.</p>
+	 * 
+	 * @return properties associated to this group of panels
+	 */
+	public abstract Hashtable getProperties();
+
+	/**
+	 * <p>Gets the object that has a  a ''semantically'' or ''conceptually'' relation to this panel.</p>
+	 * 
+	 * @return type of object that has reference this panel, or <code>null</code> if there has reference
+	 *  to no object
+	 */
+	public abstract Object getReference();
+	
+	/**
+	 * <p>Updates the reference of all elements of the group with the new one.</p>
+	 * 
+	 * @param reference type of object that has reference this panel, or <code>null</code> if there has reference
+	 *  to no object
+	 */
+	public abstract void updateReference(Object reference);
+
+	/**
+	 * <p>Changes the visibility of an existent panel of this group. If a panel changes to invisible, then that
+	 *  panel won't be accessible by the user interface. But if changes to visible and was invisible
+	 *  before, then will appear at the same position it was in the user interface. The position is
+	 *  according the order of the insertion at the group. Anyway, the group will have that panel.</p>
+	 * 
+	 * @param panel reference to the panel with visibility has changed.
+	 * @param b the new visibility for that panel.
+	 */
+	public abstract void setPanelInGUI(IPanel panel, boolean b);
+
+	/**
+	 * <p>Returns <code>true</code> if the panel as parameter belongs to a this group and it's loaded in the graphical user interface;
+	 *  otherwise returns <code>false</code>.</p>
+	 * 
+	 * @return <code>true</code> if the panel as parameter belongs to a this group and it's loaded in the graphical user interface;
+	 *  otherwise returns <code>false</code>
+	 */
+	public abstract boolean isPanelInGUI(IPanel panel);
+
+	/**
+	 * <p>Returns the number of panels registered in this group.</p>
+	 * 
+	 * @return number of panels registered in this group
+	 */
+	public abstract int getPanelCount();
+
+	/**
+	 * <p>Returns the number of panels registered in this group that are in GUI.</p>
+	 * 
+	 * @return number of panels registered in this group that are in GUI
+	 */
+	public abstract int getPanelInGUICount();
+
+	/**
+	 * <p>Determines if the last notification received has been {@linkplain IPanel#accept()}.</code> 
+	 * 
+	 * @return <code>true</code> if that has been the last notification received, <code>false</code> otherwise
+	 */
+	public abstract boolean isAccepted();
+
+	/**
+	 * <p>Sets the parent of this component. That object must be another {@link IPanelGroup IPanelGroup} component.</p>
+	 * 
+	 * @param parent parent of this component
+	 */
+	public abstract void setParentPanelGroup(IPanelGroup parent);
+
+	/**
+	 * <p>Notifies this panel of an <i>accept</i> action.</p>
+	 */
+	public abstract void accept();
+
+	/**
+	 * <p>Notifies this panel of an <i>apply</i> action.</p>
+	 */
+	public abstract void apply();
+
+	/**
+	 * <p>Notifies this panel of a <i>cancel</i> action.</p>
+	 */
+	public abstract void cancel();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/IPanelGroup.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/PanelGroupManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/PanelGroupManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/PanelGroupManager.java	(revision 42196)
@@ -0,0 +1,157 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+
+/**
+ * <p>Implemented to use the {@link AbstractPanelGroup AbstractPanelGroup} type desired.</p>
+ * <p>This class allows having different implementations of {@link AbstractPanelGroup AbstractPanelGroup}
+ * and only load in memory the class of some of them, whom have previously been imported to future use. Then, when
+ * a graphical interface would need use a <code>AbstractPanelGroup</code> instance, will instance an object of the 
+ * class <i>selected</i> (set previously as <i>default</i>) of the registered types in this manager.</p> 
+ * 
+ * @version 18/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class PanelGroupManager implements Serializable {
+	private static final long serialVersionUID = 2059085515913026734L;
+
+	/**
+	 * Array list with the {@link AbstractPanelGroup AbstractPanelGroup} registered.
+	 * 
+	 * @see #registerPanelGroup(Class)
+	 * @see #deregisterPanelGroup(Class)
+	 */
+	private ArrayList<Class> registeredPanelGroups = null;
+	
+	/**
+	 * The {@link AbstractPanelGroup AbstractPanelGroup} type set as default.
+	 * 
+	 * @see #getPanelGroup()
+	 * @see #setDefaultType(Class)
+	 */
+	private Class defaultPanelGroup = null;
+
+	/**
+	 * <p>Reference to the current manager with the <i>PanelGroup</i> registered.</p>
+	 */
+	private static PanelGroupManager manager = null;
+
+	/**
+	 * <p>Default constructor.</p>
+	 */
+	protected PanelGroupManager() {
+		 registeredPanelGroups = new ArrayList<Class>();
+	}
+	
+	/**
+	 * <p>The singleton <code>PanelGroupManager</code> instance.</p>
+	 * 
+	 * @return current manager used, or if didn't exist any, a new one
+	 */
+	public static synchronized PanelGroupManager getManager()
+	{
+		if( manager == null ) {
+			manager = new PanelGroupManager ();
+		}
+
+		return manager;
+	}
+	
+	/**
+	 * <p>Registers a new {@link AbstractPanelGroup AbstractPanelGroup} class type if it
+	 * wasn't already done.</p>
+	 * 
+	 * @param panelGroup the new <code>AbstractPanelGroup</code> class type to register
+	 * 
+	 * @see #deregisterPanelGroup(Class)
+	 */
+	public synchronized void registerPanelGroup(Class panelGroup) {
+		// Only adds if isn't already registered
+		if (!registeredPanelGroups.contains(panelGroup))
+			registeredPanelGroups.add(panelGroup);
+	}
+
+	/**
+	 * <p>Unregisters a {@link AbstractPanelGroup AbstractPanelGroup} class type if it
+	 * was previously registered.</p>
+	 * <p>If the type to unregister is the <i>default</i>, sets <i>default</i> to <code>null</code>.</p>
+	 * 
+	 * @param panelGroup the <code>AbstractPanelGroup</code> class type to unregister
+	 * 
+	 * @see #registerPanelGroup(Class)
+	 */
+	public synchronized void deregisterPanelGroup(Class panelGroup) {
+		// Only removes if already registered
+		if (registeredPanelGroups.contains(panelGroup)) {
+			registeredPanelGroups.remove(panelGroup);
+
+			if (defaultPanelGroup == null)
+				return;
+
+			if (defaultPanelGroup.equals(panelGroup)) {
+				defaultPanelGroup = null;
+			}
+		}
+	}
+	
+	/**
+	 * <p>Sets as <i>default</i> one of the {@link AbstractPanelGroup AbstractPanelGroup} class type
+	 *  previously registered.</p>
+	 * 
+	 * @param panelGroup a <code>AbstractPanelGroup</code> class type
+	 * 
+	 * @see #getPanelGroup()
+	 */
+	public synchronized void setDefaultType(Class panelGroup) {
+		if (registeredPanelGroups.contains(panelGroup))
+			defaultPanelGroup = panelGroup;
+	}
+	
+	/**
+	 * <p>Gets the <i>default</i> {@link AbstractPanelGroup AbstractPanelGroup} class type.</p>
+	 * 
+	 * return the <i>default</i> <code>AbstractPanelGroup</code> class type or <code>null</code> if isn't any
+	 * 
+	 * @throws Exception any exception produced loading the {@link AbstractPanel AbstractPanel}
+	 * 
+	 * @see #setDefaultType(Class)
+	 */	
+	public synchronized AbstractPanelGroup getPanelGroup(Object reference) throws Exception {
+		try {
+			if( defaultPanelGroup != null ) {
+				return (AbstractPanelGroup) defaultPanelGroup.getConstructor(Object.class).newInstance(reference);
+			}
+		}
+		catch (Exception e) {
+			throw e;
+		}
+
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/PanelGroupManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/IPanelGroupLoader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/IPanelGroupLoader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/IPanelGroupLoader.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.loaders;
+
+import java.util.ArrayList;
+
+import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntLoadPanelException;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+
+/**
+ * <p>Interface for all loaders which return an array of {@link AbstractPanel AbstractPanel}
+ *  registered as an {@link ExtensionPoint ExtensionPoint}.</p>
+ * 
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public interface IPanelGroupLoader {
+	/**
+	 * <p>Loads and returns all <code>AbstractPanel</code> registered as an {@link ExtensionPoint ExtensionPoint}</p>
+	 * 
+	 * @param panels array with the panels or <code>null</code> if hasn't been registered any in that extension point, or that extension point didn't exit
+	 * 
+	 * @throws Exception last exception produced loading the panels
+	 */
+	public abstract void loadPanels(ArrayList<IPanel> panels) throws ListCouldntLoadPanelException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/IPanelGroupLoader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/PanelGroupLoaderFromList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/PanelGroupLoaderFromList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/PanelGroupLoaderFromList.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.loaders;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntLoadPanelException;
+import org.gvsig.gui.beans.panelGroup.exceptions.PanelBaseException;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>Panel loader version that doesn't load the panels, only stores and returns them.</p>
+ * <p>This loader is useful to mask the load of panels and eliminate the dependence to the extension
+ *  points, and, consequently, the dependence between the <i>libUIComponents</i> project to other
+ *  projects.</p>
+ * <p>This loader is used together with {@link PanelGroupLoaderUtilities PanelGroupLoaderUtilities} (allocated
+ * in other project), that is which really loads the panels. First use <code>PanelGroupLoaderUtilities</code>
+ * and after <code>PanelGroupLoaderFromList</code>.</p>
+ *
+ * @see IPanelGroupLoader
+ *
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class PanelGroupLoaderFromList implements IPanelGroupLoader, Serializable {
+	private static final long serialVersionUID = 3066607004928429045L;
+	final static private Logger logger = LoggerFactory.getLogger(PanelGroupLoaderFromList.class);
+
+	/**
+	 * Array with the panels loaded.
+	 *
+	 * @see #loadPanels()
+	 */
+	private Class<IPanel>[] list;
+
+	/**
+	 * <p>Initializes this loader with the panels.</p>
+	 *
+	 * @param list array with the panels that this loader supposedly load
+	 */
+	public PanelGroupLoaderFromList(Class<IPanel>[] list) {
+		this.list = list;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader#loadPanels(java.util.ArrayList)
+	 */
+	public void loadPanels(ArrayList<IPanel> panels) throws ListCouldntLoadPanelException {
+		if (list == null) {
+			return;
+		}
+
+		ListCouldntLoadPanelException lCLPException = null;
+		AbstractPanel panel = null;
+
+		for (int i = 0; i< list.length; i++) {
+			if (list[i] != null) {
+				try {
+					panel = null;
+					panel = (AbstractPanel) list[i].newInstance();
+					panels.add(panel);
+				} catch (Exception e) {
+					logger.debug(Messages.getText("panel_loading_exception"), e);
+
+					if ( lCLPException == null ) {
+						lCLPException = new ListCouldntLoadPanelFromListException();
+					}
+
+					PanelBaseException bew = null;
+
+					if (panel == null) {
+						bew = new PanelBaseException(e, "");
+					} else {
+						bew = new PanelBaseException(e, panel.getLabel());
+					}
+
+					lCLPException.add(bew);
+				}
+			}
+		}
+
+		if ( lCLPException != null ) {
+			throw lCLPException;
+		}
+	}
+
+	/**
+	 * <p>Exception produced when fails the load of a panel by a loader of type <code>PanelGroupLoaderFromList</code>.</p>
+	 *
+	 * @version 27/11/2007
+	 * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+	 */
+	public class ListCouldntLoadPanelFromListException extends ListCouldntLoadPanelException {
+		private static final long serialVersionUID = -8607556361881436022L;
+
+		private static final String formatString = "Couldn't load some panels from a list of classes:";
+		private static final String messageKey = "couldnt_load_panels_from_list_exception";
+
+		/**
+		 * <p>Creates an initializes a new instance of <code>ListCouldntLoadPanelFromListException</code>.</p>
+		 */
+		public ListCouldntLoadPanelFromListException() {
+			super();
+
+		}
+
+		protected Map<String, String> values() {
+			return null;
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/loaders/PanelGroupLoaderFromList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/TreePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/TreePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/TreePanel.java	(revision 42196)
@@ -0,0 +1,844 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.panelGroup.treePanel;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ContainerEvent;
+import java.io.Serializable;
+import java.util.Enumeration;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
+import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+
+
+/**
+ * <p>Graphical interface that's a {@link JPanel JPanel} with an inner {@link JSplitPane JSplitPane} that
+ *  contains the {@link IPanel IPanel}'s grouped in a {@link JTree JTree}.</p>
+ * <p>When user selects one of them, at the tree, that's displayed at the right pane of the split pane, and
+ *  user can work with it.</p>
+ *
+ * @see AbstractPanelGroup
+ *
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class TreePanel extends AbstractPanelGroup implements Serializable {
+	private static final long serialVersionUID = 2350636078676872309L;
+
+	/**
+	 * <p>Graphical interface where the tree and the selected panel will be drawn.</p>
+	 *
+	 * @see #getJSplitPane()
+	 */
+	private JSplitPane jSplitPane = null;
+
+	/**
+	 * <p>Graphical interface that represents a tree where panels will be listed and grouped together.</p>
+	 *
+	 * @see #getJTree()
+	 */
+	private JTree jTree = null;
+
+	/**
+	 * <p>Graphical interface where is allocated the tree.</p>
+	 *
+	 * @see #getJSplitPane()
+	 */
+	private JScrollPane treeJScrollPane = null;
+
+	/**
+	 * <p>Reference to the root node of the tree.</p>
+	 *
+	 * #see #getRootNode()
+	 */
+	private DefaultMutableTreeNode rootNode = null;
+
+	/**
+	 * <p>Reference to the tree model.</p>
+	 *
+	 * @see #getTreeModel()
+	 */
+	private DefaultTreeModel treeModel = null;
+
+	/**
+	 * <p>A panel used in the initialization of the split pane.</p>
+	 *
+	 * @see #getDefaultPanel()
+	 */
+	private AbstractPanel defaultPanel = null;
+
+	/**
+	 * <p>Name of the tree root node.</p>
+	 */
+	private final String rootNodeName = "";
+
+	/**
+	 * <p>Default (horizontal) divider width.</p>
+	 */
+	private final short DEFAULT_DIVIDER_WIDTH = 5;
+
+	/**
+	 * <p>Reference to the last node inserted or removed.</p>
+	 */
+	private DefaultMutableTreeNode lastNode = null;
+
+	/**
+	 * <p>Attribute used to hold the position of the divider.</p>
+	 */
+	private int currentDividerLocation;
+
+	/**
+	 * <p>Number of the registered panels of this group that are in the GUI.</p>
+	 */
+	private int panelsInGUICount;
+
+	static {
+		// Registers this class as a "PanelGroup" type
+		PanelGroupManager.getManager().registerPanelGroup(TabbedPanel.class);
+	}
+
+	/**
+	 * <p>Default constructor.</p>
+	 *
+	 * @param reference object that is ''semantically' or 'contextually' related to the group of panels
+	 */
+	public TreePanel(Object reference) {
+		super(reference);
+
+		initialize();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#initialize()
+	 */
+	protected void initialize() {
+		super.initialize();
+
+		currentDividerLocation = -1;
+
+		panelsInGUICount = 0;
+		this.setLayout(new BorderLayout());
+		this.add(getJSplitPane(), BorderLayout.CENTER);
+	}
+
+	/**
+	 * <p>This method initializes <code>jSplitPane</code>.</p>
+	 *
+	 * @return JSplitPane
+	 */
+	protected JSplitPane getJSplitPane() {
+		if (jSplitPane == null) {
+			jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+			jSplitPane.setDividerSize(DEFAULT_DIVIDER_WIDTH);
+			jSplitPane.setLeftComponent(getTreeJScrollPane());
+			jSplitPane.setRightComponent(getDefaultPanel());
+			jSplitPane.setOneTouchExpandable(true);
+			jSplitPane.setDividerLocation(180);
+		}
+
+		return jSplitPane;
+	}
+
+	/**
+	 * <p>This method initializes <code>defaultPanel</code>.</p>
+	 *
+	 * @return AbstractPanel inner panel that is stored as a right panel of the <code>JSplitPane</code> object
+	 *  when this object is created
+	 */
+	protected AbstractPanel getDefaultPanel() {
+		if (defaultPanel == null) {
+			defaultPanel = new DefaultPanel();
+		}
+
+		return defaultPanel;
+	}
+
+	/**
+	 * <p>This method initializes <code>jTree</code>.</p>
+	 *
+	 * @return JTree
+	 */
+	protected JTree getJTree() {
+		if (jTree == null) {
+			jTree = new JTree(getTreeModel());
+
+			// Single Selection:
+			jTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+
+			// Remove icons:
+			DefaultTreeCellRenderer defaultTreeCellRenderer = new DefaultTreeCellRenderer();
+			defaultTreeCellRenderer.setOpenIcon(null);
+			defaultTreeCellRenderer.setClosedIcon(null);
+			defaultTreeCellRenderer.setLeafIcon(null);
+
+			// Add new icons for the node-branches that can be expanded or collapsed
+			ImageIcon treeCellRendererIcon = new ImageIcon(TreePanel.class.getResource("images/treenodecollapsibleicon.png"), null);
+			defaultTreeCellRenderer.setOpenIcon(treeCellRendererIcon);
+			treeCellRendererIcon = new ImageIcon(TreePanel.class.getResource("images/treenodeexpandableicon.png"), null);
+			defaultTreeCellRenderer.setClosedIcon(treeCellRendererIcon);
+
+			// Root not visible
+			jTree.setRootVisible(false);
+			jTree.setCellRenderer(defaultTreeCellRenderer);
+
+			// Expand only the root node
+			// Adds support for notification that a node has been adder or removed using a ''ContainerEvent''
+			//  which is used in other AbstractPanelGruop implementations:
+			jTree.getModel().addTreeModelListener(new TreeModelListener() {
+				/*
+				 * (non-Javadoc)
+				 * @see org.apache.log4j.lf5.viewer.categoryexplorer.TreeModelAdapter#treeNodesInserted(javax.swing.event.TreeModelEvent)
+				 */
+				public void treeNodesInserted(TreeModelEvent e) {
+					// Expand only the root node
+					TreePath rootNodePath = new TreePath(getRootNode());
+
+					if (jTree.isCollapsed(rootNodePath))
+						jTree.expandPath(rootNodePath);
+
+					// Only notify as ContainerEvent the insertion of a IPanel
+					if (((DefaultMutableTreeNode)lastNode).getUserObject() instanceof IPanel)
+						dispatchEvent(new ContainerEvent(jTree, ContainerEvent.COMPONENT_ADDED, (Component)((DefaultMutableTreeNode)lastNode).getUserObject()));
+
+					lastNode = null;
+				}
+
+				/*
+				 * (non-Javadoc)
+				 * @see org.apache.log4j.lf5.viewer.categoryexplorer.TreeModelAdapter#treeNodesRemoved(javax.swing.event.TreeModelEvent)
+				 */
+				public void treeNodesRemoved(TreeModelEvent e) {
+					// Expand only the root node
+					TreePath rootNodePath = new TreePath(getRootNode());
+
+					if (jTree.isCollapsed(rootNodePath))
+						jTree.expandPath(rootNodePath);
+
+					// Only notify as ContainerEvent the insertion of a IPanel
+					if (((DefaultMutableTreeNode)lastNode).getUserObject() instanceof IPanel)
+						dispatchEvent(new ContainerEvent(jTree, ContainerEvent.COMPONENT_REMOVED, (Component)((DefaultMutableTreeNode)lastNode).getUserObject()));
+
+					lastNode = null;
+				}
+
+				public void treeNodesChanged(TreeModelEvent e) {
+					// TODO Auto-generated method stub
+
+				}
+
+				public void treeStructureChanged(TreeModelEvent e) {
+					// TODO Auto-generated method stub
+
+				}
+			});
+
+			// Set to the right panel of the JSplitPane, the AbstractPanel selected
+			// Adds support for notification that a node has been selected -> set the panel associated to
+			//  the right panel of the jSplitPane
+			jTree.addTreeSelectionListener(new TreeSelectionListener() {
+				/*
+				 * (non-Javadoc)
+				 * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
+				 */
+			    public void valueChanged(TreeSelectionEvent e) {
+			        DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
+
+			        /* If nothing is selected */
+			        if (node == null)
+			        	return;
+
+			        /* Retrieve the node that was selected and set it to the right panel of the JSPlitPane */
+			        Object object = node.getUserObject();
+
+		        	if ((object != null) && (object instanceof AbstractPanel)) {
+		        		getJSplitPane().setRightComponent((Component) object);
+
+		        		// Notifies the new panel selected
+		        		stateChanged(new ChangeEvent(object));
+
+		    			getJSplitPane().setDividerLocation(currentDividerLocation);
+			        }
+			    }
+			});
+		}
+
+		return jTree;
+	}
+
+	/**
+	 * <p>This method initializes <code>treeModel</code>.</p>
+	 *
+	 * @return DefaultTreeModel
+	 */
+	protected DefaultTreeModel getTreeModel() {
+		if (treeModel == null) {
+			treeModel = new DefaultTreeModel(getRootNode());
+		}
+
+		return treeModel;
+	}
+
+	/**
+	 * <p>This method initializes <code>rootNode</code>.</p>
+	 *
+	 * @return DefaultMutableTreeNode
+	 */
+	protected DefaultMutableTreeNode getRootNode() {
+		if (rootNode == null)
+			rootNode = new DefaultMutableTreeNode(rootNodeName);
+
+		return rootNode;
+	}
+
+	/**
+	 * <p>This method initialiazes <code>jScrollPane</code>.</p>
+	 *
+	 * @return JScrollPane
+	 */
+	protected JScrollPane getTreeJScrollPane() {
+		if (treeJScrollPane == null) {
+			treeJScrollPane = new JScrollPane();
+			treeJScrollPane.setViewportView(getJTree());
+		}
+
+		return treeJScrollPane;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#loadPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	protected void loadPanel(IPanel panel) {
+		super.loadPanel(panel);
+
+		AbstractPanel panel_obj = (AbstractPanel)panel;
+
+		if (panel_obj.isVisible()) {
+			addPanelImpl(panel);
+
+			// Recalculates preferred sizes (of the right component of the JSPlitPane), and then resizes also this one if it's necessary
+			Dimension panelPreferredSize = panel_obj.getPreferredSize();
+			Dimension rightPanelPreferredSize = getJSplitPane().getRightComponent().getPreferredSize();
+
+			if ((panelPreferredSize.width > rightPanelPreferredSize.width) || (panelPreferredSize.height > rightPanelPreferredSize.height)) {
+				getJSplitPane().getRightComponent().setPreferredSize(new Dimension(Math.max(panelPreferredSize.width, rightPanelPreferredSize.width), Math.max(panelPreferredSize.height, rightPanelPreferredSize.height)));
+			}
+		}
+	}
+
+	/**
+	 * <p>Has the algorithms that allows adding a panel to the JTree component.</p>
+	 *
+	 * @param panel the panel to add
+	 *
+	 * @see #addPanel(IPanel)
+	 */
+	protected void addPanelImpl(IPanel panel) {
+		if (belongsThisGroup(panel)) {
+
+			// Don't add the panel if hasn't defined the 'label' attribute
+			if (panel.getLabel() == null)
+				return;
+
+			DefaultMutableTreeNode new_node = new DefaultMutableTreeNode(panel);
+			lastNode = new_node;
+
+			// Case 1 -> the attribute 'labelGroup' is undefined
+			if (panel.getLabelGroup() == null) {
+				getTreeModel().insertNodeInto(new_node, getRootNode(), getRootNode().getChildCount());
+				panelsInGUICount ++;
+				return;
+			}
+
+			// Case 2 -> Check if already exists a node with the same 'labelGroup' attribute than the panel
+			DefaultMutableTreeNode node;
+
+			for (short i = 0; i < getRootNode().getChildCount(); i ++) {
+				node = (DefaultMutableTreeNode) getRootNode().getChildAt(i);
+
+				if (node.getUserObject().toString().equals(panel.getLabelGroup())) {
+					getTreeModel().insertNodeInto(new_node, node, node.getChildCount());
+					panelsInGUICount ++;
+					return;
+				}
+			}
+
+			// Case 3 -> Normal insertion
+			DefaultMutableTreeNode parent = new DefaultMutableTreeNode(panel.getLabelGroup());
+			lastNode = parent;
+			getTreeModel().insertNodeInto(parent, getRootNode(), getRootNode().getChildCount());
+
+			lastNode = new_node;
+			getTreeModel().insertNodeInto(new_node, parent, 0);
+			panelsInGUICount ++;
+		}
+	}
+
+	/**
+	 * <p>Has the algorithms that allows adding a panel to the JTree component, considering the position
+	 *  of that panel in the group, and the group position in the JTree.</p>
+	 *
+	 * @param panel the panel to add
+	 *
+	 * @see #addPanel(IPanel)
+	 */
+	protected void addPanelSortOrdered(IPanel panel) {
+		if (belongsThisGroup(panel)) {
+
+			// Don't add the panel if hasn't defined the 'label' attribute
+			if (panel.getLabel() == null)
+				return;
+
+			short p_index = (short)registeredPanels.indexOf(panel);
+
+			DefaultMutableTreeNode new_node = new DefaultMutableTreeNode(panel);
+			lastNode = new_node;
+
+//			String label;
+			short l_index = 0;
+			short i;
+
+			// Case 1 -> the attribute 'labelGroup' is undefined (null)
+			if (panel.getLabelGroup() == null) {
+				Enumeration labelsAndGroups = rootNode.children();
+
+				for (i = 0; i < p_index; i++) {
+					if (registeredPanels.get(i).getLabelGroup() == null) {
+						if (labelsAndGroups.hasMoreElements()) {
+							if (((DefaultMutableTreeNode)labelsAndGroups.nextElement()).getUserObject().equals(registeredPanels.get(i)))
+								l_index ++;
+						}
+						else {
+							break;
+						}
+					}
+					else {
+						if (labelsAndGroups.hasMoreElements()) {
+							if (((DefaultMutableTreeNode)labelsAndGroups.nextElement()).getUserObject().equals(registeredPanels.get(i).getLabelGroup()))
+								l_index ++;
+						}
+						else {
+							break;
+						}
+					}
+				}
+
+				// Insert the node
+				getTreeModel().insertNodeInto(new_node, getRootNode(), l_index);
+				panelsInGUICount ++;
+				return;
+			}
+
+			// Case 2 -> Check if already exists a node with the same 'labelGroup' attribute than the panel
+			DefaultMutableTreeNode node = null;
+			Enumeration groups = rootNode.children();
+			Enumeration labels;
+
+			// Find the node with the label group
+			while (groups.hasMoreElements()) {
+				node = (DefaultMutableTreeNode) groups.nextElement();
+
+				if ((node.getUserObject()).equals(panel.getLabelGroup())) {
+					break;
+				}
+				else {
+					node = null;
+				}
+			}
+
+			if (node != null) {
+				labels = node.children();
+				l_index = 0;
+
+				// Avoid adding two times the same node
+				while (labels.hasMoreElements()) {
+					if (((DefaultMutableTreeNode)labels.nextElement()).getUserObject().equals(panel))
+						return;
+				}
+
+				labels = node.children();
+				Object leaf_panel = ((DefaultMutableTreeNode) labels.nextElement()).getUserObject();
+
+				for (i = 0; i < p_index; i++) {
+					if (registeredPanels.get(i).getLabelGroup() == panel.getLabelGroup()) {
+						if (registeredPanels.get(i).equals(leaf_panel)) {
+							l_index ++;
+
+							if (! labels.hasMoreElements())
+								break;
+
+							leaf_panel = ((DefaultMutableTreeNode) labels.nextElement()).getUserObject();
+						}
+					}
+				}
+
+				// Insert the node
+				getTreeModel().insertNodeInto(new_node, node, l_index);
+				panelsInGUICount ++;
+				return;
+			}
+
+			// Case 3 -> Normal insertion
+
+			// Check the position of the 'labelGroup' node:
+			short g_index = 0;
+
+			groups = rootNode.children();
+			String c_labelGroup = (String)((DefaultMutableTreeNode)groups.nextElement()).getUserObject();
+			String labelGroup;
+
+			for (i = 0; i < p_index; i++) {
+				labelGroup = registeredPanels.get(i).getLabelGroup();
+
+				if (c_labelGroup == null) {
+					if (labelGroup == null) {
+						c_labelGroup = (String)((DefaultMutableTreeNode)groups.nextElement()).getUserObject();
+						g_index ++;
+					}
+				}
+				else {
+					if (c_labelGroup.equals(labelGroup))
+					{
+						DefaultMutableTreeNode dmtnode = ((DefaultMutableTreeNode)groups.nextElement());
+						c_labelGroup = (String)dmtnode.getUserObject().toString();
+						g_index ++;
+					}
+				}
+			}
+
+			// Insert the node
+			DefaultMutableTreeNode parent = new DefaultMutableTreeNode(panel.getLabelGroup());
+			lastNode = parent;
+			getTreeModel().insertNodeInto(parent, getRootNode(), g_index);
+
+			lastNode = new_node;
+			getTreeModel().insertNodeInto(new_node, parent, 0);
+			panelsInGUICount ++;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#unLoadPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	protected void unLoadPanel(IPanel panel) {
+		super.unLoadPanel(panel);
+
+		removePanelImpl(panel);
+	}
+
+	/**
+	 * <p>Has the algorithms that allows removing a panel from the JTree component.</p>
+	 *
+	 * @param panel the panel to remove
+	 *
+	 * @see #removePanel(IPanel)
+	 */
+	protected void removePanelImpl(IPanel panel) {
+		if (belongsThisGroup(panel)) {
+
+			// Don't add the panel if hasn't defined the 'label' attribute
+			if (panel.getLabel() == null)
+				return;
+
+			DefaultMutableTreeNode node;
+
+			// Case 1 -> the attribute 'labelGroup' is undefined
+			if (panel.getLabelGroup() == null) {
+				for (short i = 0; i < getRootNode().getChildCount(); i ++) {
+					node = (DefaultMutableTreeNode) getRootNode().getChildAt(i);
+
+					if ((node.getUserObject().toString().equals(panel.getLabel())) && (node.getChildCount() == 0)) {
+						lastNode = node;
+						getTreeModel().removeNodeFromParent(node);
+						panelsInGUICount --;
+						return;
+					}
+				}
+
+				return;
+			}
+
+			DefaultMutableTreeNode parent;
+
+			// Case 2 -> Check if already exists a node with the same 'labelGroup' and 'label' attributes than the panel
+			for (short i = 0; i < getRootNode().getChildCount(); i ++) {
+				parent = (DefaultMutableTreeNode) getRootNode().getChildAt(i);
+
+				if ((parent.getChildCount() > 0) && (parent.getUserObject().toString().equals(panel.getLabelGroup()))) {
+					for (short j = 0; j < parent.getChildCount(); j ++) {
+						node = (DefaultMutableTreeNode)parent.getChildAt(j);
+
+						if (node.getUserObject().toString().equals(panel.getLabel())) {
+							if (parent.getChildCount() == 1) { // Case 3 -> If there is only one panel in that 'labelGroup'
+								lastNode = parent;
+								getTreeModel().removeNodeFromParent(parent);
+								panelsInGUICount --;
+							}
+							else {
+								lastNode = node;
+								getTreeModel().removeNodeFromParent(node);
+								panelsInGUICount --;
+							}
+						}
+					}
+					return;
+				}
+			}
+		}
+	}
+
+	/**
+	 * @see JTree#getSelectionPath()
+	 */
+	public TreePath getSelectionPath() {
+		return getJTree().getSelectionPath();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getActivePanel()
+	 */
+	public IPanel getActivePanel() {
+		if (registeredPanels.size() == 0)
+			return null;
+
+		Object node = ((DefaultMutableTreeNode)getJTree().getLastSelectedPathComponent()).getUserObject();
+
+		if (node instanceof IPanel)
+			return (IPanel)node;
+		else
+			return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#stateChanged(javax.swing.event.ChangeEvent)
+	 */
+	public void stateChanged(ChangeEvent e) {
+		if (registeredPanels.size() == 0)
+			return;
+
+		Object object = e.getSource();
+
+		if ((object != null) && (object instanceof IPanel)) {
+			((IPanel) object).selected();
+
+			// Get the current divider location to hold it after the selected panel will be set to the interface of the inner JTreePanel
+			currentDividerLocation = getJSplitPane().getDividerLocation();
+    	}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#updatePanelVisibility(org.gvsig.gui.beans.panelGroup.panels.IPanel, boolean)
+	 */
+	public synchronized void setPanelInGUI(IPanel panel, boolean b) {
+		if (registeredPanels.size() == 0)
+			return;
+
+		if (registeredPanels.indexOf(panel) == -1)
+			return;
+
+		if (b == true) {
+			addPanelSortOrdered((AbstractPanel)panel);
+		}
+		else {
+			removePanelImpl((AbstractPanel)panel);
+		}
+
+		repaint();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	public synchronized boolean isPanelInGUI(IPanel panel) {
+		if (!registeredPanels.contains(panel))
+			return false;
+
+		DefaultMutableTreeNode node;
+
+		for (int i = 0; i < getRootNode().getChildCount(); i++) {
+			node = (DefaultMutableTreeNode) getRootNode().getChildAt(i);
+
+			if (node.getChildCount() == 0) {
+				if (node.getUserObject().equals(panel))
+					return true;
+			}
+			else {
+				if (isPanelAtBranch(panel, node))
+					return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * <p>Returns <code>true</code> if the panel is a child of the tree node as parameter.</p>
+	 */
+	protected boolean isPanelAtBranch(IPanel panel, DefaultMutableTreeNode node) {
+		DefaultMutableTreeNode child;
+
+		for (int i = 0; i < node.getChildCount(); i++) {
+			child = (DefaultMutableTreeNode) node.getChildAt(i);
+
+			if (child.getUserObject().equals(panel))
+				return true;
+		}
+
+		return false;
+	}
+
+    /**
+     * @see JTree#addTreeSelectionListener(TreeSelectionListener)
+     */
+    public void addTreeSelectionListener(TreeSelectionListener tsl) {
+    	getJTree().addTreeSelectionListener(tsl);
+    }
+
+    /**
+     * @see JTree#removeTreeSelectionListener(TreeSelectionListener)
+     */
+    public void removeTreeSelectionListener(TreeSelectionListener tsl) {
+    	getJTree().removeTreeSelectionListener(tsl);
+    }
+
+    /**
+     * @see JTree#getTreeSelectionListeners()
+     */
+    public TreeSelectionListener[] getTreeSelectionListeners() {
+    	return getJTree().getTreeSelectionListeners();
+    }
+
+     /*
+     * (non-Javadoc)
+     * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelInGUICount()
+     */
+	public int getPanelInGUICount() {
+		return panelsInGUICount;
+	}
+
+	/**
+	 * @see JSplitPane#getDividerLocation()
+	 */
+	public int getDividerLocation() {
+		return getJSplitPane().getDividerLocation();
+	}
+
+	/**
+	 * @see JSplitPane#setDividerLocation(int)
+	 */
+	public void setDividerLocation(int location) {
+		getJSplitPane().setDividerLocation(location);
+	}
+
+	/**
+	 * @see JSplitPane#getDividerSize()
+	 */
+	public int getDividerSize() {
+		return getJSplitPane().getDividerSize();
+	}
+
+	/**
+	 * @see JSplitPane#setDividerSize()
+	 */
+	public void setDividerSize(int newSize) {
+		getJSplitPane().setDividerSize(newSize);
+	}
+
+	/**
+	 * <p>A trivial implementation of {@link AbstractPanel AbstractPanel} used in the
+	 *  initialization of the <code>jSplitPane</code> attribute.</p>
+	 *
+	 * @version 15/10/2007
+	 * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+	 */
+	protected class DefaultPanel extends AbstractPanel {
+		/**
+		 * @see AbstractPanel#AbstractPanel()
+		 */
+		public DefaultPanel() {
+			super();
+		}
+
+		/**
+		 * @see AbstractPanel#AbstractPanel(String, String, String)
+		 */
+		public DefaultPanel(String id, String label, String labelGroup) {
+			super(id, label, labelGroup);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see org.gvsig.gui.beans.panelGroup.panels.AbstractPanel#initialize()
+		 */
+		protected void initialize() {
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#accept()
+		 */
+		public void accept() {
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see org.gvsig.gui.beans.panelGroup.panels.IPanel#apply()
+		 */
+		public void apply() {
+		}
+
+		public void cancel() {
+		}
+
+		public void selected() {
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/TreePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/images/treenodeexpandableicon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/images/treenodeexpandableicon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/images/treenodecollapsibleicon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/panelGroup/treePanel/images/treenodecollapsibleicon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSlider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSlider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSlider.java	(revision 42196)
@@ -0,0 +1,549 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.doubleslider;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Shape;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JComponent;
+/**
+ * <code>DoubleSlider</code> representa un componente que tiene dos
+ * deslizadores. Se puede definir un m�ximo y un m�nimo.
+ *
+ * @version 04/05/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class DoubleSlider extends JComponent implements MouseMotionListener, MouseListener, MouseWheelListener {
+	private static final long serialVersionUID = 663355422780987493L;
+
+	private ArrayList<DoubleSliderListener> actionCommandListeners = new ArrayList<DoubleSliderListener>();
+
+	private final int LEFT_PAD               = 2;
+	private final int RIGHT_PAD              = 2;
+
+	private Image     bufferImage            = null;
+	private int       width                  = 0;
+	private int       height                 = 0;
+	private Graphics  bufferGraphics;
+	private double    x1                     = 0;
+	private double    x2                     = 100;
+
+	private Color     color1                 = Color.BLACK;
+	private Color     color2                 = Color.WHITE;
+
+	private double    minimum                = 0;
+	private double    maximum                = 100;
+
+	private boolean   twoSliders             = true;
+
+	/**
+	 * Crea un DoubleSlider con las opciones por defecto.
+	 */
+	public DoubleSlider() {
+		this.setPreferredSize(new Dimension(100, 21));
+		addMouseMotionListener(this);
+		addMouseListener(this);
+		addMouseWheelListener(this);
+	}
+
+	/**
+	 * Establece el m�ximo valor que puede tomar el componente
+	 * @param value
+	 */
+	public void setMaximum(int value) {
+		maximum = value;
+		validateValues();
+		refreshImage();
+	}
+
+	/**
+	 * Establece el m�nimo valor que puede tomar el componente
+	 * @param value
+	 */
+	public void setMinimum(int value) {
+		minimum = value;
+		validateValues();
+		refreshImage();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#addNotify()
+	 */
+	public void addNotify() {
+		super.addNotify();
+
+		refreshImage();
+	}
+
+	/**
+	 * Crea un graphics con las dimensiones del componente si no estaba creado y
+	 * lo devuelve para poder usarlo para dibujar en �l.
+	 * @return Graphics
+	 */
+	private Graphics getBufferGraphics() {
+		int width2 = getBounds().width;
+		int height2 = getBounds().height;
+		if (width2 <= 0)
+			width2 = 1;
+		if (height2 <= 0)
+			height2 = 1;
+
+		if ((width!=width2) || (height!=height2)) {
+			bufferImage = createImage(width2, height2);
+			if (bufferImage == null) return null;
+			bufferGraphics = bufferImage.getGraphics();
+		}
+
+		width = width2;
+		height = height2;
+
+		return bufferGraphics;
+	}
+
+	public Color getColorPosition(int pos) {
+		int r, g, b, a;
+
+		Color color1 = this.color1;
+		Color color2 = this.color2;
+		if (!isEnabled()) {
+			r = Color.DARK_GRAY.getRed();
+			color1 = new Color(r, r, r);
+			r = Color.WHITE.getRed();
+			color2 = new Color(r, r, r);
+		}
+
+		double value = (pixeltovalue(pos) - minimum) / (maximum - minimum);
+		if (value < 0)
+			value = 0;
+		if (value > 1)
+			value = 1;
+
+		r = (int) (color1.getRed() + ((color2.getRed() - color1.getRed()) * value));
+		g = (int) (color1.getGreen() + ((color2.getGreen() - color1.getGreen()) * value));
+		b = (int) (color1.getBlue() + ((color2.getBlue() - color1.getBlue()) * value));
+		a = (int) (color1.getAlpha() + ((color2.getAlpha() - color1.getAlpha()) * value));
+		return new Color(r, g, b, a);
+	}
+	/**
+	 * Redibujar el componente en el graphics temporal
+	 */
+	public void redrawBuffer() {
+		if (getBufferGraphics() == null)
+			return;
+
+		getBufferGraphics().setColor(this.getBackground());
+		getBufferGraphics().fillRect(0, 0, width, height);
+
+		int top = (height - 11) / 2;
+		top -= 6;
+
+		Shape oldClip = getBufferGraphics().getClip();
+		getBufferGraphics().setClip(LEFT_PAD + 1, top + 1, width - 2 - LEFT_PAD - RIGHT_PAD, 9);
+
+		if ((color1.getAlpha() != 255) || (color2.getAlpha() != 255)) {
+			for (int i = 0; (i * 4) <= (width - 1 - RIGHT_PAD); i++) {
+				for (int j = 0; (j * 4) <= (top + 6); j++) {
+					if ((i + j) % 2 == 0)
+						getBufferGraphics().setColor(Color.white);
+					else
+						getBufferGraphics().setColor(new Color(204, 204, 204));
+					getBufferGraphics().fillRect(LEFT_PAD + 1 + i * 4, top + 1 + j * 4, 4, 4);
+				}
+			}
+		}
+
+		for (int i = LEFT_PAD + 1; i < (width - 1 - RIGHT_PAD); i++) {
+			getBufferGraphics().setColor(getColorPosition(i));
+			getBufferGraphics().drawLine(i, top, i, top + 10);
+		}
+		getBufferGraphics().setClip(oldClip);
+
+		if (!isEnabled())
+			getBufferGraphics().setColor(Color.LIGHT_GRAY);
+		else
+			getBufferGraphics().setColor(Color.BLACK);
+		getBufferGraphics().drawRect(LEFT_PAD, top, width - 1 - LEFT_PAD - RIGHT_PAD, 10);
+
+
+		drawTriangle(valuetopixel(x1), top, getColorPosition(valuetopixel(x1)));
+		if (twoSliders)
+			drawTriangle(valuetopixel(x2), top, getColorPosition(valuetopixel(x2)));
+	}
+
+	/**
+	 * Dibujar un triangulo, un triangulo es un deslizador del componente. Puedes
+	 * indicarle que color tendra y en que posici�n estar�.
+	 * @param x
+	 * @param color
+	 */
+	private void drawTriangle(int x, int y, Color color) {
+		if (isEnabled()) {
+			getBufferGraphics().setColor(color);
+			getBufferGraphics().drawLine(x, y + 12, x, y + 16);
+			getBufferGraphics().drawLine(x-1, y + 14, x-1, y + 16);
+			getBufferGraphics().drawLine(x+1, y + 14, x+1, y + 16);
+			getBufferGraphics().drawLine(x-2, y + 16, x-2, y + 16);
+			getBufferGraphics().drawLine(x+2, y + 16, x+2, y + 16);
+		}
+
+		if (isEnabled()) {
+			getBufferGraphics().setColor(Color.BLACK);
+		} else {
+			getBufferGraphics().setColor(Color.GRAY);
+		}
+		getBufferGraphics().drawLine(x, y + 10, x-3, y + 17);
+		getBufferGraphics().drawLine(x, y + 10, x+3, y + 17);
+		getBufferGraphics().drawLine(x-3, y + 17, x+3, y + 17);
+	}
+
+	/**
+	 * Redibujar el componente en el graphics temporal y representarlo en el
+	 * componente
+	 */
+	public void refreshImage() {
+		redrawBuffer();
+		if (getGraphics() == null)
+			return;
+		if (bufferImage != null)
+			getGraphics().drawImage(bufferImage, 0, 0, this);
+		super.paint(getGraphics());
+	}
+
+	/**
+	 * Convierte un valor a la coordenada pixel correspondiente
+	 * @param value
+	 * @return
+	 */
+	private int valuetopixel(double value) {
+		return (int) (((value - minimum) * (width - 3.0 - LEFT_PAD - RIGHT_PAD) / (maximum - minimum)) + 1.0 + LEFT_PAD);
+	}
+
+	/**
+	 * Convierte un pixel al valor que deber�a tener
+	 * @param value
+	 * @return
+	 */
+	private double pixeltovalue(int value) {
+		return ((((value - 1 - LEFT_PAD) * (maximum - minimum)) / (width - 3.0 - LEFT_PAD - RIGHT_PAD)) + minimum);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
+	 */
+	public void paint(Graphics g) {
+		redrawBuffer();
+		g.drawImage(bufferImage, 0, 0, this);
+		super.paint(g);
+	}
+
+	int valuePressed = 0;
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		if (!isEnabled())
+			return;
+		if (e.getButton() != MouseEvent.BUTTON1) return;
+
+		double aux = pixeltovalue(e.getX());
+		double aux2 = aux - x1;
+		double aux3 = x2 - aux;
+		if (aux3 < aux2)
+			valuePressed = 2;
+		else
+			valuePressed = 1;
+
+		if (!twoSliders)
+			valuePressed = 1;
+
+		changeValue(e.getX());
+		callValueDraggedListeners();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) {
+		valuePressed = 0;
+		callValueChangedListeners();
+	}
+
+	/**
+	 * Establecer los l�mites de los valores en caso de que sean incorrectos
+	 */
+	private void validateValues() {
+		if (x1 < minimum) x1 = minimum;
+		if (x1 > maximum) x1 = maximum;
+		if (twoSliders) {
+			if (x2 < minimum) x2 = minimum;
+			if (x2 > maximum) x2 = maximum;
+		}
+	}
+
+	/**
+	 * Establecer el valor del extremo izquierdo del slider
+	 * @param value
+	 */
+	public void setX1(int value) {
+		setX1((double) value);
+	}
+
+	/**
+	 * Establecer el valor del extremo izquierdo del slider
+	 * @param value
+	 */
+	public void setX1(double value) {
+		x1 = value;
+		if (twoSliders)
+			if (x1 > x2)
+				x2 = x1;
+		validateValues();
+		refreshImage();
+	}
+
+	/**
+	 * Es lo mismo que setX1()
+	 * @param value
+	 */
+	public void setValue(int value) {
+		setX1(value);
+	}
+
+	/**
+	 * Establecer el valor del extremo derecho del slider
+	 * @param value
+	 */
+	public void setX2(int value) {
+		setX2((double) value);
+	}
+
+	/**
+	 * Establecer el valor del extremo derecho del slider
+	 * @param value
+	 */
+	public void setX2(double value) {
+		x2 = value;
+		if (x2 < x1) x1 = x2;
+		validateValues();
+		refreshImage();
+	}
+
+	/**
+	 * Obtener el valor del extremo izquierdo del componente
+	 * @return
+	 */
+	public int getX1() {
+		return (int) x1;
+	}
+
+	/**
+	 * Devuelve lo mismo que getX1()
+	 * @return
+	 */
+	public int getValue() {
+		return getX1();
+	}
+
+	/**
+	 * Obtener el valor del extremo derecho del componente
+	 * @return
+	 */
+	public int getX2() {
+		return (int) x2;
+	}
+
+	/**
+	 * M�todo usado por los eventos del rat�n para establecer una nueva posici�n
+	 * del slider
+	 * @param pos
+	 */
+	private void changeValue(int pos) {
+		if (!isEnabled())
+			return;
+		if (valuePressed == 0) return;
+
+		double aux = pixeltovalue(pos);
+
+		if (valuePressed == 1) setX1(aux);
+		if (valuePressed == 2) setX2(aux);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent arg0) {
+		if (!isEnabled())
+			return;
+		changeValue(arg0.getX());
+		callValueDraggedListeners();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+	 */
+	public void mouseClicked(MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+	 */
+	public void mouseEntered(MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+	 */
+	public void mouseExited(MouseEvent e) {
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(DoubleSliderListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(DoubleSliderListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueChangedListeners() {
+		Iterator<DoubleSliderListener> iterator = actionCommandListeners.iterator();
+		while (iterator.hasNext()) {
+			DoubleSliderListener listener = iterator.next();
+			listener.actionValueChanged(new DoubleSliderEvent(this));
+		}
+	}
+
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueDraggedListeners() {
+		Iterator<DoubleSliderListener> iterator = actionCommandListeners.iterator();
+		while (iterator.hasNext()) {
+			DoubleSliderListener listener = iterator.next();
+			listener.actionValueDragged(new DoubleSliderEvent(this));
+		}
+	}
+
+	/**
+	 * @return the twoSliders
+	 */
+	public boolean isTwoSliders() {
+		return twoSliders;
+	}
+
+	/**
+	 * @param twoSliders the twoSliders to set
+	 */
+	public void setTwoSliders(boolean twoSliders) {
+		this.twoSliders = twoSliders;
+		refreshImage();
+	}
+
+	/**
+	 * @param color1 the color1 to set
+	 */
+	public void setColor1(Color color1, boolean refresh) {
+		this.color1 = color1;
+		if (refresh)
+			refreshImage();
+	}
+
+	/**
+	 * @param color2 the color2 to set
+	 */
+	public void setColor2(Color color2, boolean refresh) {
+		this.color2 = color2;
+		if (refresh)
+			refreshImage();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.swing.JComponent#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		refreshImage();
+	}
+
+	public void mouseWheelMoved(MouseWheelEvent e) {
+		if (!isEnabled())
+			return;
+
+		double aux = pixeltovalue(e.getX());
+		double aux2 = aux - x1;
+		double aux3 = x2 - aux;
+		if (aux3 < aux2)
+			valuePressed = 2;
+		else
+			valuePressed = 1;
+
+		if (!twoSliders)
+			valuePressed = 1;
+
+		if (valuePressed == 1)
+			setX1(getX1() - e.getWheelRotation());
+		else
+			setX2(getX2() - e.getWheelRotation());
+		valuePressed = 0;
+
+		callValueChangedListeners();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSlider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderEvent.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.doubleslider;
+
+import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
+
+public class DoubleSliderEvent extends SliderEvent {
+	private static final long serialVersionUID = -684281519921935004L;
+
+	public DoubleSliderEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderListener.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.doubleslider;
+
+import java.util.EventListener;
+/**
+ * Interfaz para los eventos del componente DoubleSlider. Existe ValueChanged
+ * y ValueDragged, son los disparadores de los eventos, Changed para cuando
+ * el evento a finalizado, y Dragged mientras esta transcurriendo.
+ *
+ * @version 07/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface DoubleSliderListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente. Nunca
+	 * se dispara mientras se hace un dragged con el rat�n.
+	 * @param e
+	 */
+	public void actionValueChanged(DoubleSliderEvent e);
+
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente mientras se
+	 * hace un dragged con el rat�n.
+	 * @param e
+	 */
+	public void actionValueDragged(DoubleSliderEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/doubleslider/DoubleSliderListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserListener.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.textincreaser;
+
+import java.util.EventListener;
+
+public interface TextIncreaserListener extends EventListener {
+  public void actionValueChanged(TextIncreaserEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserEvent.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.textincreaser;
+
+import java.util.EventObject;
+
+public class TextIncreaserEvent extends EventObject {
+	private static final long serialVersionUID = -684281519921935004L;
+
+	public TextIncreaserEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java	(revision 42196)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.textincreaser;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+/**
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TextIncreaserContainer extends JPanel implements ActionListener, KeyListener{
+	private static final long serialVersionUID = 7570162018139822874L;
+	private ArrayList actionCommandListeners = new ArrayList();
+	private JTextField tText            = null;
+	private JPanel     pButtons         = null;
+	private JButton    bmas             = null;
+	private JButton    bmenos           = null;
+	private JPanel     pGeneral         = null;
+	private double     minValue         = 0;
+	private double     maxValue         = 100;
+	private double     value            = 0.0;
+	private String     pathToImages     = "images/"; // "/com/iver/cit/gvsig/gui/panels/images/";
+	/**
+	 * Variable que est� a true si los controles est�n a la derecha
+	 */
+	private boolean    isRight          = true;
+
+	private boolean    bDoCallListeners = true;
+	static private int eventId          = Integer.MIN_VALUE;
+
+	/**
+	 * Creaci�n de un componente TextIncrearserContainer
+	 * @param width Ancho del componente
+	 * @param minValue M�nimo valor que puede tomar el texto del control
+	 * @param maxValue M�ximo valor que puede tomar el texto del control
+	 * @param right	a true si queremos que los controles se muestren a la derecha del TextBox
+	 * y false si los queremos a la izquierda
+	 */
+	public TextIncreaserContainer(int width, double minValue, double maxValue, double init, boolean right) {
+		super();
+		getTText().setPreferredSize(new Dimension(width - 25, (int) getTText().getPreferredSize().getHeight()));
+		this.minValue = minValue;
+		this.maxValue = maxValue;
+		this.isRight = right;
+		setValue(init);
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		FlowLayout flowLayout5 = new FlowLayout();
+		flowLayout5.setHgap(0);
+		flowLayout5.setVgap(0);
+		this.setLayout(flowLayout5);
+		this.add(getPGeneral(), null);
+	}
+
+	/**
+	 * Asigna un valor al textBox
+	 * @param value
+	 */
+	public void setValue(double value){
+		this.value = value;
+		getTText().setText(Double.toString(value));
+	}
+
+	/**
+	 * Obtiene el valor del textBox
+	 * @return value
+	 */
+	public double getValue(){
+		return value;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTText() {
+		if (tText == null) {
+			tText = new JTextField();
+			tText.setText(Double.toString(value));
+			tText.setPreferredSize(new java.awt.Dimension(45, (int) tText.getPreferredSize().getHeight()));
+			tText.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+			tText.addKeyListener(this);
+		}
+		return tText;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints3.gridy = 1;
+			gridBagConstraints3.gridx = 0;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints2.gridy = 0;
+			gridBagConstraints2.gridx = 0;
+			pButtons = new JPanel();
+			pButtons.setLayout(new GridBagLayout());
+			pButtons.add(getBmas(), gridBagConstraints2);
+			pButtons.add(getBmenos(), gridBagConstraints3);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBmas() {
+		if (bmas == null) {
+			bmas = new JButton();
+			bmas.setPreferredSize(new java.awt.Dimension(16, (int) getTText().getPreferredSize().getHeight()/2));
+			bmas.addActionListener(this);
+			bmas.setIcon(new ImageIcon(getClass().getResource(pathToImages + "mas.png")));
+		}
+		return bmas;
+	}
+
+	/**
+	 * This method initializes jButton1
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBmenos() {
+		if (bmenos == null) {
+			bmenos = new JButton();
+			bmenos.setPreferredSize(new java.awt.Dimension(16, (int) getTText().getPreferredSize().getHeight()/2));
+			bmenos.addActionListener(this);
+			bmenos.setIcon(new ImageIcon(getClass().getResource(pathToImages + "menos.png")));
+		}
+		return bmenos;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPGeneral() {
+		if (pGeneral == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			if(isRight){
+				gridBagConstraints1.gridx = 1;
+				gridBagConstraints.gridx = 0;
+			}else{
+				gridBagConstraints1.gridx = 0;
+				gridBagConstraints.gridx = 1;
+			}
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints1.gridy = 0;
+			gridBagConstraints.weightx = 1.0;
+			pGeneral = new JPanel();
+			pGeneral.setLayout(new GridBagLayout());
+			pGeneral.add(getTText(), gridBagConstraints);
+			pGeneral.add(getPButtons(), gridBagConstraints1);
+		}
+		return pGeneral;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == bmas) {
+			value ++;
+			checkValues();
+		}
+
+		if (e.getSource() == bmenos) {
+			value --;
+			checkValues();
+		}
+		callValueChangedListeners();
+	}
+
+	public void addValueChangedListener(TextIncreaserListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	public void removeValueChangedListener(TextIncreaserListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	private void callValueChangedListeners() {
+		if (!bDoCallListeners)
+			return;
+		Iterator acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			TextIncreaserListener listener = (TextIncreaserListener) acIterator.next();
+			listener.actionValueChanged(new TextIncreaserEvent(this));
+		}
+		eventId++;
+	}
+
+	private void checkValues() {
+		if (value >= maxValue) value = maxValue;
+		if (value <= minValue) value = minValue;
+		getTText().setText(Double.toString(value));
+	}
+
+	public void keyPressed(KeyEvent e) {
+		if (e.getKeyCode() == 10) {
+			try {
+				value = new Double(getTText().getText()).doubleValue();
+			} catch (NumberFormatException exc) {
+			}
+
+			checkValues();
+			callValueChangedListeners();
+		}
+	}
+
+	public void keyReleased(KeyEvent e) {}
+	public void keyTyped(KeyEvent e) {}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/images/mas.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/images/mas.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/images/menos.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/textincreaser/images/menos.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/LogControl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/LogControl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/LogControl.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.progresspanel;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * <code>LogControl</code>. Objeto para un control b�sico de un log. Para a�adir
+ * y reemplazar la �ltima l�nea a�adida.
+ *
+ * @version 27/03/2007
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class LogControl {
+	String text = "";
+
+	/**
+	 * A�ade una l�nea al log.
+	 * @param line
+	 */
+	public void addLine(String line) {
+		if (text.length() > 0)
+			text += "\n";
+		text += line;
+	}
+
+	/**
+	 * Reemplaza la �ltima l�nea a�adida al log.
+	 * @param line
+	 */
+	public void replaceLastLine(String line) {
+		int index = text.lastIndexOf("\n");
+		if (index < 0)
+			index = 0;
+		text = text.substring(0, index);
+		addLine(line);
+	}
+
+	/**
+	 * Establece el texto completo del log.
+	 * @param value
+	 */
+	public void setText(String value) {
+		text = value;
+	}
+
+	/**
+	 * Devuelve el contenido del log.
+	 * @return String
+	 */
+	public String getText() {
+		return text;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/LogControl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/ProgressPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/ProgressPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/ProgressPanel.java	(revision 42196)
@@ -0,0 +1,404 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.progresspanel;
+
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.awt.GraphicsConfiguration;
+import java.awt.HeadlessException;
+import java.awt.Toolkit;
+
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTextPane;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
+
+/**
+ * <code>ProgressPanel</code>. Muestra una ventana de di�logo para representar
+ * una barra de progreso con su ventana de registro.
+ *
+ * @version 15/07/2008
+ *
+ * @author BorSanZa - Borja Sanchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ProgressPanel extends JDialog {
+	private static final long serialVersionUID = 4321011219898234352L;
+
+	private JPanel              jPanel              = null;
+	private JLabel              jLabel              = null;
+	private JLabel              jLabel1             = null;
+	private JPanel              jPanel1             = null;
+	private JPanel              njp                 = null;
+	private DefaultButtonsPanel defaultButtonsPanel = null;
+	private JProgressBar        jProgressBar        = null;
+	private JScrollPane         jScrollPane         = null;
+	private JTextPane           jTextPane           = null;
+	private LogControl          text                = new LogControl();
+	private long                startTime           = System.currentTimeMillis();
+	private boolean             showPause           = true;
+
+	/**
+	 * Constructor
+	 */
+	public ProgressPanel() {
+		super();
+		initialize();
+	}
+
+	public ProgressPanel(boolean showPause) {
+		super();
+		this.showPause = showPause;
+		initialize();
+	}
+	
+	/**
+	 * @see JDialog#JDialog(Dialog, boolean)
+	 */
+	public ProgressPanel(Dialog owner, boolean modal) throws HeadlessException {
+		super(owner, modal);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Dialog, String, boolean, GraphicsConfiguration)
+	 */
+	public ProgressPanel(Dialog owner, String title, boolean modal,	GraphicsConfiguration gc) throws HeadlessException {
+		super(owner, title, modal, gc);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Dialog, String, boolean)
+	 */
+	public ProgressPanel(Dialog owner, String title, boolean modal)
+			throws HeadlessException {
+		super(owner, title, modal);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Dialog, String)
+	 */
+	public ProgressPanel(Dialog owner, String title) throws HeadlessException {
+		super(owner, title);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Dialog)
+	 */
+	public ProgressPanel(Dialog owner) throws HeadlessException {
+		super(owner);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Frame, boolean)
+	 */
+	public ProgressPanel(Frame owner, boolean modal) throws HeadlessException {
+		super(owner, modal);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Frame, String, boolean, GraphicsConfiguration)
+	 */
+	public ProgressPanel(Frame owner, String title, boolean modal, GraphicsConfiguration gc) {
+		super(owner, title, modal, gc);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Frame, String, boolean)
+	 */
+	public ProgressPanel(Frame owner, String title, boolean modal)
+			throws HeadlessException {
+		super(owner, title, modal);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Frame, String)
+	 */
+	public ProgressPanel(Frame owner, String title) throws HeadlessException {
+		super(owner, title);
+		initialize();
+	}
+
+	/**
+	 * @see JDialog#JDialog(Frame)
+	 */
+	public ProgressPanel(Frame owner) throws HeadlessException {
+		super(owner);
+		initialize();
+	}	
+	
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		njp = new JPanel();
+		njp.setLayout(new java.awt.BorderLayout(5, 5));
+		njp.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 15, 5, 15));
+		this.setContentPane(njp);
+		this.setResizable(false);
+		njp.add(getJPanel(), java.awt.BorderLayout.NORTH);
+		njp.add(getJPanel1(), java.awt.BorderLayout.CENTER);
+		njp.add(getButtonsPanel(), java.awt.BorderLayout.SOUTH);
+		showLog(false);
+		setPercent(0);
+		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
+		this.setLocation(
+				(int) (d.getWidth() - this.getWidth()) >> 1,
+				(int) (d.getHeight() - this.getHeight()) >> 1);
+		this.setVisible(true);
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jLabel1 = new JLabel();
+			jLabel = new JLabel();
+			jLabel.setText(Messages.getText("espere") + "...");
+			jPanel = new JPanel();
+			jPanel.setLayout(new java.awt.BorderLayout(5, 5));
+			jPanel.add(jLabel, java.awt.BorderLayout.WEST);
+			jPanel.add(jLabel1, java.awt.BorderLayout.EAST);
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jPanel1 = new JPanel();
+			jPanel1.setLayout(new java.awt.BorderLayout(5, 5));
+			jPanel1.add(getJProgressBar(), java.awt.BorderLayout.NORTH);
+			jPanel1.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+		}
+		return jPanel1;
+	}
+
+	public void addButtonPressedListener(ButtonsPanelListener listener) {
+		getDefaultButtonsPanel().addButtonPressedListener(listener);
+	}
+
+	public void removeButtonPressedListener(ButtonsPanelListener listener) {
+		getDefaultButtonsPanel().removeButtonPressedListener(listener);
+	}
+
+	public void showLog(boolean visible) {
+		getButtonsPanel().getButton(ButtonsPanel.BUTTON_SEEDETAILS).setVisible(!visible);
+		getButtonsPanel().getButton(ButtonsPanel.BUTTON_HIDEDETAILS).setVisible(visible);
+		jScrollPane.setVisible(visible);
+
+		this.setIgnoreRepaint(true);
+
+		if (visible)
+			this.setSize(this.getWidth(), 300);
+		else
+			this.pack();
+
+		this.setIgnoreRepaint(false);
+		if (this.isVisible())
+			this.setVisible(true);
+	}
+
+	public void showPause(boolean visible) {
+		if (showPause) {
+			getButtonsPanel().getButton(ButtonsPanel.BUTTON_RESTART).setVisible(!visible);
+			getButtonsPanel().getButton(ButtonsPanel.BUTTON_PAUSE).setVisible(visible);
+		} else {
+			getButtonsPanel().getButton(ButtonsPanel.BUTTON_RESTART).setVisible(false);
+			getButtonsPanel().getButton(ButtonsPanel.BUTTON_PAUSE).setVisible(false);
+		}
+	}
+
+	/**
+	 * @see DefaultButtonsPanel#getButtonsPanel()
+	 */
+	public ButtonsPanel getButtonsPanel() {
+		return getDefaultButtonsPanel().getButtonsPanel();
+	}
+	
+	/**
+	 * This method initializes DefaultButtonsPanel
+	 *
+	 * @return DefaultButtonsPanel
+	 */
+	public DefaultButtonsPanel getDefaultButtonsPanel() {
+		if (defaultButtonsPanel == null) {
+			defaultButtonsPanel = new DefaultButtonsPanel(ButtonsPanel.BUTTONS_NONE);
+			getButtonsPanel().addSeeDetails();
+			getButtonsPanel().addHideDetails();
+			getButtonsPanel().addPause();
+			getButtonsPanel().addRestart();
+			showPause(true);
+			getButtonsPanel().addCancel();
+			getButtonsPanel().setLayout(new java.awt.FlowLayout(FlowLayout.CENTER));
+			getButtonsPanel().addButtonPressedListener(new ButtonsPanelListener() {
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_SEEDETAILS:
+							showLog(true);
+							break;
+						case ButtonsPanel.BUTTON_HIDEDETAILS:
+							showLog(false);
+							break;
+						case ButtonsPanel.BUTTON_PAUSE:
+							showPause(false);
+							break;
+						case ButtonsPanel.BUTTON_RESTART:
+							showPause(true);
+							break;
+					}
+				}
+			});
+		}
+		return defaultButtonsPanel;
+	}
+
+	/**
+	 * This method initializes jProgressBar
+	 *
+	 * @return javax.swing.JProgressBar
+	 */
+	private JProgressBar getJProgressBar() {
+		if (jProgressBar == null) {
+			jProgressBar = new JProgressBar();
+			jProgressBar.setValue(50);
+			jProgressBar.setPreferredSize(new Dimension(450, 18));
+		}
+		return jProgressBar;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getJTextPane());
+			jScrollPane.setVisible(false);
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jTextPane
+	 *
+	 * @return javax.swing.JTextPane
+	 */
+	private JTextPane getJTextPane() {
+		if (jTextPane == null) {
+			jTextPane = new JTextPane();
+			jTextPane.setEditable(false);
+		}
+		return jTextPane;
+	}
+
+	private void updateLog() {
+		jTextPane.setText(text.getText());
+		jTextPane.setCaretPosition(jTextPane.getText().length());
+	}
+
+	public void addLineLog(String line) {
+		text.addLine(line);
+		updateLog();
+	}
+
+	public void replaceLastLineLog(String line) {
+		text.replaceLastLine(line);
+		updateLog();
+	}
+
+	public void setLog(String value) {
+		long time = (System.currentTimeMillis() - startTime) / 1000;
+		text.setText(value + "\n" + Messages.getText("tiempo_transcurrido") + ": " + time + "s");
+		updateLog();
+	}
+
+	public int getPercent() {
+		return jProgressBar.getValue();
+	}
+
+	public void setPercent(int value) {
+		if ((value == 0) && (!jProgressBar.isIndeterminate())) {
+			jProgressBar.setIndeterminate(true);
+			jLabel1.setVisible(false);
+		}
+		if ((value != 0) && (jProgressBar.isIndeterminate())) {
+			jProgressBar.setIndeterminate(false);
+			jLabel1.setVisible(true);
+		}
+		jProgressBar.setValue(value);
+		jLabel1.setText(value + "%");
+	}
+
+	public void setLabel(String value) {
+		jLabel.setText(value);
+	}
+
+	/**
+	 * <p>Sets whether this panel will show a normal progress bar
+	 * or an indeterminate one.</p>
+	 *
+	 * @see JProgressBar.setIndeterminate(boolean)
+	 * @param indeterminate
+	 */
+	public void setIndeterminate(boolean indeterminate) {
+		getJProgressBar().setIndeterminate(indeterminate);
+	}
+
+	/**
+	 * <p>Gets whether this panel will show a normal progress bar
+	 * or an indeterminate one.</p>
+	 *
+	 * @see JProgressBar.setIndeterminate(boolean)
+	 * @param indeterminate
+	 */
+	public boolean getIndeterminate() {
+		return getJProgressBar().isIndeterminate();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/progresspanel/ProgressPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableControlerPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableControlerPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableControlerPanel.java	(revision 42196)
@@ -0,0 +1,430 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.table.listeners.TableListener;
+import org.gvsig.gui.util.StatusComponent;
+
+/**
+ * Control para el manejo de tablas. No contiene eventos, estos deben ser
+ * manejados desde la clase que lo llame.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TableControlerPanel extends JPanel {
+	private static final long serialVersionUID = -6442685244347917638L;
+	private int               HEIGHT_BUTTONS   = 19;                   // 16
+																																			// estaria
+																																			// bien
+	// **********************Vars**********************************
+	private JButton           bPrev            = null;
+	private JComboBox         cPoint           = null;
+	private JButton           bNext            = null;
+	private JButton           bFirst           = null;
+	private JButton           bLast            = null;
+	private JLabel            lPoints          = null;
+	private JLabel            lNumberOfPoints  = null;
+	private JButton           bNew             = null;
+	private JButton           bDelPoint        = null;
+	private JButton           bClear           = null;
+
+	private String            pathToImages     = "images/";            // "/com/iver/cit/gvsig/gui/panels/images/";
+
+	/**
+	 * Objeto para controlar el estado de los componentes visuales
+	 */
+	private StatusComponent   statusComponent  = null;
+
+	// **********************End Vars******************************
+
+	// **********************Methods*******************************
+	/**
+	 * This is the default constructor
+	 */
+	public TableControlerPanel(TableListener tableListener) {
+		initialize(tableListener);
+	}
+
+	/**
+	 * This method initializes this
+	 * @return void
+	 */
+	private void initialize(TableListener tableListener) {
+		statusComponent = new StatusComponent(this);
+
+		this.setLayout(new FlowLayout(FlowLayout.CENTER, 1, 0));
+		this.setAlignmentX(0);
+
+		lPoints = new JLabel();
+		lPoints.setText(Messages.getText("registro") + " ");
+		this.add(lPoints);
+
+		this.add(getBFirst());
+		this.add(getBPrev());
+		this.add(getCPoint());
+		this.add(getBNext());
+		this.add(getBLast());
+		this.add(getBNew());
+		this.add(getLNumberOfPoints());
+		this.add(getBDelPoint());
+		this.add(getBClear());
+
+		getBFirst().addActionListener(tableListener);
+		getBPrev().addActionListener(tableListener);
+		getCPoint().addActionListener(tableListener);
+		getBNext().addActionListener(tableListener);
+		getBLast().addActionListener(tableListener);
+		getBNew().addActionListener(tableListener);
+		getBDelPoint().addActionListener(tableListener);
+		getBClear().addActionListener(tableListener);
+	}
+
+	/**
+	 * Esta funci�n deshabilita todos los controles y guarda sus valores de
+	 * habilitado o deshabilitado para que cuando se ejecute restoreControlsValue
+	 * se vuelvan a quedar como estaba
+	 */
+	public void disableAllControls() {
+		statusComponent.setEnabled(false);
+	}
+
+	/**
+	 * Esta funci�n deja los controles como estaban al ejecutar la funci�n
+	 * disableAllControls
+	 */
+	public void restoreControlsValue() {
+		statusComponent.setEnabled(true);
+	}
+
+	// **********************Methods*******************************
+	/**
+	 * This method initializes jButton
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBFirst() {
+		if (bFirst == null) {
+			bFirst = new JButton();
+			bFirst.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			bFirst.setEnabled(false);
+			URL url = getClass().getResource(pathToImages + "first.png");
+			if(url != null) {
+				bFirst.setIcon(new ImageIcon(url));
+			}
+			bFirst.setToolTipText(Messages.getText("primero"));
+		}
+		return bFirst;
+	}
+
+	/**
+	 * This method initializes jButton
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBLast() {
+		if (bLast == null) {
+			bLast = new JButton();
+			bLast.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			bLast.setEnabled(false);
+			URL url = getClass().getResource(pathToImages + "last.png");
+			if(url != null)
+				bLast.setIcon(new ImageIcon(url));
+			bLast.setToolTipText(Messages.getText("ultimo"));
+		}
+		return bLast;
+	}
+
+	/**
+	 * This method initializes bBefore
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBPrev() {
+		if (bPrev == null) {
+			bPrev = new JButton();
+			bPrev.setText("");
+			bPrev.setEnabled(false);
+			bPrev.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			URL url = getClass().getResource(pathToImages + "prev.png");
+			if(url != null)
+				bPrev.setIcon(new ImageIcon(url));
+			bPrev.setActionCommand("");
+			bPrev.setToolTipText(Messages.getText("anterior"));
+		}
+		return bPrev;
+	}
+
+	/**
+	 * This method initializes bNext
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBNext() {
+		if (bNext == null) {
+			bNext = new JButton("");
+			bNext.setEnabled(false);
+			bNext.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			URL url = getClass().getResource(pathToImages + "next.png");
+			if(url != null)
+				bNext.setIcon(new ImageIcon(url));
+			bNext.setActionCommand("");
+			bNext.setToolTipText(Messages.getText("siguiente"));
+		}
+		return bNext;
+	}
+
+	/**
+	 * Este m�todo inicializa el combo que contiene el n�mero de puntos.
+	 * @return javax.swing.JComboBox
+	 */
+	public JComboBox getCPoint() {
+		if (cPoint == null) {
+			cPoint = new JComboBox();
+			cPoint.setPreferredSize(new Dimension(64, HEIGHT_BUTTONS));
+		}
+		return cPoint;
+	}
+
+	/**
+	 * @return Returns the lNumberOfPoints.
+	 */
+	public JLabel getLNumberOfPoints() {
+		if (lNumberOfPoints == null) {
+			lNumberOfPoints = new JLabel();
+			lNumberOfPoints.setText(Messages.getText("de") + " 0");
+			// lNumberOfPoints.setPreferredSize(new java.awt.Dimension(35,15));
+		}
+		return lNumberOfPoints;
+	}
+
+	/**
+	 * This method initializes jButton
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBNew() {
+		if (bNew == null) {
+			bNew = new JButton();
+			bNew.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			URL url = getClass().getResource(pathToImages + "newpoint.png");
+			if(url != null)
+				bNew.setIcon(new ImageIcon(url));
+			bNew.setToolTipText(Messages.getText("nuevo"));
+		}
+		return bNew;
+	}
+
+	/**
+	 * Este m�todo inicializa el bot�n del eliminar punto que har� que se elimine
+	 * el punto seleccionado.
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBDelPoint() {
+		if (bDelPoint == null) {
+			bDelPoint = new JButton();
+			bDelPoint.setText("");
+			bDelPoint.setEnabled(false);
+			bDelPoint.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			URL url = getClass().getResource(pathToImages + "delone.png");
+			if(url != null)
+				bDelPoint.setIcon(new ImageIcon(url));
+			bDelPoint.setToolTipText(Messages.getText("borrar_uno"));
+		}
+		return bDelPoint;
+	}
+
+	/**
+	 * Este m�todo inicializa el bot�n del clear que har� que se eliminen todos
+	 * los puntos seleccionados.
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBClear() {
+		if (bClear == null) {
+			bClear = new JButton();
+			bClear.setText("");
+			bClear.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			bClear.setEnabled(false);
+			URL url = getClass().getResource(pathToImages + "delall.png");
+			if(url != null)
+				bClear.setIcon(new ImageIcon(url));
+			bClear.setActionCommand("");
+			bClear.setToolTipText(Messages.getText("borrar_todos"));
+		}
+		return bClear;
+	}
+
+	/**
+	 * Resetea el control al estado inicial. Limpia el combo, pone el n�mero de
+	 * elementos a 0 y desactiva las flechas.
+	 */
+	public void resetControls() {
+		getCPoint().removeAllItems();
+		getLNumberOfPoints().setText(Messages.getText("de 0"));
+		checkArrows();
+	}
+
+	/**
+	 * Elimina del control un elemento de una posici�n.
+	 * <UL>
+	 * <LI>Actualiza el combo</LI>
+	 * <LI>Actualiza el texto que dice el n�mero de elementos</LI>
+	 * <LI>Actualiza las flechas</LI>
+	 * </UL>
+	 * @param pos Posici�n del elemento a eliminar.
+	 */
+	public void setNItems(int n) {
+		// if(n < 1)
+		// return;
+		getCPoint().removeAllItems();
+		for (int i = 1; i <= n; i++) {
+			try {
+				getCPoint().addItem(String.valueOf(i));
+			} catch (ArrayIndexOutOfBoundsException ex) {
+				// No a�adimos nada
+			}
+		}
+		getLNumberOfPoints().setText(Messages.getText("de") + " " + n);
+		checkArrows();
+	}
+
+	/**
+	 * Selecciona un elemento del control
+	 * @param index
+	 */
+	public void setSelectedIndex(int index) {
+		try {
+			getCPoint().setSelectedIndex(index);
+		} catch (IllegalArgumentException ex) {
+
+		}
+		checkArrows();
+	}
+
+	/**
+	 * Devuelve el punto seleccionado
+	 * @return Punto seleccionado.
+	 */
+	public int getSelectedIndex() {
+		return getCPoint().getSelectedIndex();
+	}
+
+	/**
+	 * Obtiene el n�mero de elementos en la lista.
+	 * @return N�mero de elementos
+	 */
+	public int getItemCount() {
+		return getCPoint().getItemCount();
+	}
+
+	/**
+	 * Obtiene el Objeto seleccionado como cadena de texto.
+	 * @return N�mero seleccionado
+	 */
+	public String getSelectedItem() {
+		return getCPoint().getSelectedItem().toString();
+	}
+
+	/**
+	 * Comprueba la posici�n del combo para ver si tiene que habilitar o
+	 * deshabilitar las flechas de delante y detr�s.
+	 */
+	public void checkArrows() {
+		if (!statusComponent.isEnabled())
+			return;
+
+		if (getCPoint().getItemCount() <= 0) {
+			getBClear().setEnabled(false);
+			getBDelPoint().setEnabled(false);
+		} else {
+			getBClear().setEnabled(true);
+			getBDelPoint().setEnabled(true);
+		}
+
+		if (getCPoint().getSelectedIndex() == -1) {
+			getBPrev().setEnabled(false);
+			getBNext().setEnabled(false);
+			getBLast().setEnabled(false);
+			getBFirst().setEnabled(false);
+
+			return;
+		}
+		if (getCPoint().getSelectedIndex() == 0) {
+			getBPrev().setEnabled(false);
+			getBFirst().setEnabled(false);
+		} else {
+			getBPrev().setEnabled(true);
+			getBFirst().setEnabled(true);
+		}
+
+		if (getCPoint().getSelectedIndex() == (getCPoint().getItemCount() - 1)) {
+			getBNext().setEnabled(false);
+			getBLast().setEnabled(false);
+		} else {
+			getBNext().setEnabled(true);
+			getBLast().setEnabled(true);
+		}
+	}
+
+	/**
+	 * A�ade un punto al combo y checkea los controles colocandolos en los valores
+	 * correctos.
+	 * @param countPoints N�mero de punto a a�adir al final del combo
+	 */
+	public void addPointToTable(int countPoints) {
+		getCPoint().addItem("" + countPoints);
+		getLNumberOfPoints().setText(Messages.getText("de") + " " + countPoints);
+		setSelectedIndex(getItemCount() - 1);
+		checkArrows();
+	}
+
+	/**
+	 * Asigna la ruta donde est�n las imagenes
+	 * @param pathToImages
+	 */
+	public void setPathToImages(String pathToImages) {
+		this.pathToImages = pathToImages;
+	}
+
+	/**
+	 * Activa o desactiva este panel y todos los que lo componen
+	 * @param enabled variable booleana para la activaci�n y/o desactivaci�n
+	 */
+	public void setEnabled(boolean enabled) {
+		this.getBDelPoint().setEnabled(enabled);
+		this.getBClear().setEnabled(enabled);
+	}
+
+	/**
+	 * Dice si los controles est�n deshabilitados o no
+	 * @return true si est� habilitado y false si no lo est�
+	 */
+	public boolean isDisableAllControls() {
+		return !statusComponent.isEnabled();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableControlerPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/MoveRowsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/MoveRowsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/MoveRowsPanel.java	(revision 42196)
@@ -0,0 +1,156 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.Dimension;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.table.listeners.TableListener;
+import org.gvsig.gui.util.StatusComponent;
+
+public class MoveRowsPanel extends JPanel {
+  private static final long serialVersionUID = -4496318143555472677L;
+
+	private int             HEIGHT_BUTTONS  = 19;       // 16 estaria bien
+	private JButton         bUp             = null;
+	private JButton         bDown           = null;
+	private int             selected        = -1;
+	private int             cont            = 0;
+	private String          pathToImages    = "images/"; // "/com/iver/cit/gvsig/gui/panels/images/";
+
+	/**
+	 * Objeto para controlar el estado de los componentes visuales 
+	 */
+	private StatusComponent statusComponent = null;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public MoveRowsPanel(TableListener tableListener) {
+		initialize(tableListener);
+	}
+	
+	private void initialize(TableListener tableListener) {
+		statusComponent = new StatusComponent(this);
+
+		setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 1, 0));
+		add(getBUp());
+		add(getBDown());
+
+		getBUp().addActionListener(tableListener);
+		getBDown().addActionListener(tableListener);
+	}
+
+	public void setSelectedIndex(int i, int cont) {
+		selected = i;
+		this.cont = cont;
+		checkArrows();
+	}
+	
+	/**
+	 * Comprueba la posici�n del combo para ver si tiene que
+	 * habilitar o deshabilitar las flechas de delante y detr�s.
+	 */
+	private void checkArrows(){
+		if (!statusComponent.isEnabled())
+			return;
+
+		if (selected == -1) {
+			getBUp().setEnabled(false);
+			getBDown().setEnabled(false);
+			return;
+		}
+
+		if (selected == 0) {
+			getBUp().setEnabled(false);
+		} else {
+			getBUp().setEnabled(true);
+		}
+
+		if (selected == (cont - 1)) {
+			getBDown().setEnabled(false);
+		} else {
+			getBDown().setEnabled(true);
+		}
+	}	
+
+	/**
+	 * This method initializes bUp
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBUp() {
+		if (bUp == null) {
+			bUp = new JButton("");
+			bUp.setEnabled(true);
+			bUp.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			URL url = getClass().getResource(pathToImages + "up-16x16.png");
+			if(url != null)
+				bUp.setIcon(new ImageIcon(url));
+			bUp.setActionCommand("");
+			bUp.setToolTipText(Messages.getText("subir"));
+		}
+		return bUp;
+	}
+	
+
+	/**
+	 * This method initializes bDown
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBDown() {
+		if (bDown == null) {
+			bDown = new JButton("");
+			bDown.setEnabled(true);
+			bDown.setPreferredSize(new Dimension(22, HEIGHT_BUTTONS));
+			URL url = getClass().getResource(pathToImages + "down-16x16.png");
+			if(url != null)
+				bDown.setIcon(new ImageIcon(url));
+			bDown.setActionCommand("");
+			bDown.setToolTipText(Messages.getText("bajar"));
+		}
+		return bDown;
+	}
+	
+	/**
+	 * Esta funci�n deshabilita todos los controles y guarda sus valores
+	 * de habilitado o deshabilitado para que cuando se ejecute restoreControlsValue
+	 * se vuelvan a quedar como estaba
+	 */
+	public void disableAllControls(){
+		statusComponent.setEnabled(false);
+	}
+
+	/**
+	 * Esta funci�n deja los controles como estaban al ejecutar la funci�n
+	 * disableAllControls
+	 */
+	public void restoreControlsValue(){
+		statusComponent.setEnabled(true);
+	}	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/MoveRowsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.exceptions;
+/**
+ * Excepci�n que indica que una tabla no ha sido inicializada.
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class NotInitializeException extends Exception {
+	private static final long serialVersionUID = -6411813224550536884L;
+
+	public NotInitializeException() {
+		super();
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 */
+	public NotInitializeException(String message) {
+		super(message);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public NotInitializeException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param cause
+	 */
+	public NotInitializeException(Throwable cause) {
+		super(cause);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ProfilesTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ProfilesTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ProfilesTableModel.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+
+import javax.swing.JButton;
+import javax.swing.table.DefaultTableModel;
+
+public class ProfilesTableModel extends DefaultTableModel implements IModel{
+	
+private static final long serialVersionUID = 8716862990277121681L;
+
+	
+	private static boolean[]	canEdit = new boolean[] { true, true, false, false, false };
+	private static Class[]   	types   = new Class[] { String.class, JButton.class, Double.class, Double.class, Double.class };
+	private static Color[]   	colors  = new Color[] {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW, Color.MAGENTA, Color.CYAN,
+		Color.ORANGE, Color.PINK, Color.WHITE, Color.BLACK};
+	
+	public ProfilesTableModel(String[] columnNames) {
+		super(new Object[0][5], columnNames);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.table.models.IModel#getNewLine()
+	 */
+	public Object[] getNewLine() {
+		Color color = null;
+		if (this.getRowCount() < colors.length) {
+			color = colors[this.getRowCount()];
+		}
+		else{
+			color = new Color((float)Math.random(),(float)Math.random(),(float)Math.random());
+		}
+		return new Object[] {"",color, new Double(0), new Double(0), new Double(0)};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
+	 */
+	public Class getColumnClass(int columnIndex) {
+		return types [columnIndex];
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)
+	 */
+	public boolean isCellEditable(int rowIndex, int columnIndex) {
+		return canEdit [columnIndex];
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ProfilesTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+
+import javax.swing.JRadioButton;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TreeRadioButtonColumnRenderer extends JRadioButton implements TableCellRenderer {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    public Component getTableCellRendererComponent(JTable table,
+                                                   Object value,
+                                                   boolean isSelected,
+                                                   boolean hasFocus,
+                                                   int row, int column) {
+        if (value == null) {
+            this.setSelected(false);
+        }
+        
+        if(value instanceof Boolean){
+	        Boolean ValueAsBoolean = (Boolean) value;
+	        this.setSelected(ValueAsBoolean.booleanValue());
+	        this.setHorizontalAlignment(SwingConstants.CENTER);
+        }
+        	
+        return this;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ARGBBandSelectorModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ARGBBandSelectorModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ARGBBandSelectorModel.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+/**
+ * Componente tabla. Selector de bandas ARGB para la visualizaci�n. Una file consta
+ * de cuatro JRadioButtons para la selecci�n de ARGB y una entrada de texto para 
+ * el nombre de la banda.
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class ARGBBandSelectorModel extends DefaultTableModel implements IModel {
+	final private static long serialVersionUID = -3370601314380922368L;
+
+	public ARGBBandSelectorModel(String[] columnNames) {
+		super(new Object[0][5], columnNames);
+	}
+
+	public Class getColumnClass(int c) {
+		if (c < 4) {
+			return Boolean.class;
+		}
+
+		return String.class;
+	}
+
+	public void setValueAt(Object value, int row, int col) {
+		if ((col < 4) && ((Boolean) value).booleanValue()) {
+			for (int i = 0; i < getRowCount(); i++) {
+				if (i != row) {
+					setValueAt(new Boolean(false), i, col);
+				}
+			}
+		}
+		super.setValueAt(value, row, col);
+	}
+
+	public void addNew() {
+		super.addRow(new Object[] { new Boolean(false), new Boolean(false), new Boolean(false), new Boolean(false), "" });
+	}
+
+	public Object[] getNewLine() {
+		return new Object[] { new Boolean(false), new Boolean(false), new Boolean(false), new Boolean(false), "" };
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ARGBBandSelectorModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/JValueSelector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/JValueSelector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/JValueSelector.java	(revision 42196)
@@ -0,0 +1,240 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.slidertext.SliderTextContainer;
+
+/**
+ * Ventana con el slider para la selecci�n de Alpha en una entrada de la tabla que representa
+ * a la paleta de color.
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+
+public class JValueSelector extends JPanel {
+	private static final long serialVersionUID = -427287107697905904L;
+
+	/**
+		 * Creates and returns a new dialog containing the specified
+		 * <code>ColorChooser</code> pane along with "OK", "Cancel", and "Reset"
+		 * buttons. If the "OK" or "Cancel" buttons are pressed, the dialog is
+		 * automatically hidden (but not disposed).  If the "Reset"
+		 * button is pressed, the color-chooser's color will be reset to the
+		 * color which was set the last time <code>show</code> was invoked on the
+		 * dialog and the dialog will remain showing.
+		 *
+		 * @param c              the parent component for the dialog
+		 * @param title          the title for the dialog
+		 * @param modal          a boolean. When true, the remainder of the program
+		 *                       is inactive until the dialog is closed.
+		 * @param valueSelector  the value-selector to be placed inside the dialog
+		 * @param okListener     the ActionListener invoked when "OK" is pressed
+		 * @param cancelListener the ActionListener invoked when "Cancel" is pressed
+		 * @return a new dialog containing the color-chooser pane
+		 * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+		 * returns true.
+		 * @see java.awt.GraphicsEnvironment#isHeadless
+		 */
+		public static JDialog createDialog(Component c, String title, boolean modal,
+				JValueSelector valueSelector, ActionListener okListener,
+				ActionListener cancelListener, String initValue) throws HeadlessException {
+
+				return new ValueSelector(c, title, modal, valueSelector,
+																								okListener, cancelListener, initValue);
+		}
+
+}
+
+class ValueSelector extends JDialog implements ActionListener {
+	private static final long serialVersionUID = -1510744508318912657L;
+	private int	 				initValue;
+	private ActionListener			okListener;
+	private ActionListener			cancelListener;
+
+	private int 					HBUTTONS = 30;
+	private int 					HSLIDER = 50;
+	private JPanel					buttons = null;
+	private JPanel					pMain = null;
+	private SliderTextContainer 	pSlider = null;
+	private int 					width = 315, height = 115;
+	private int 					widthMargin = 300;
+	private JButton				bAccept = null;
+	private JButton				bCancel = null;
+
+	/**
+	 * Constructor
+	 * @param pp PalettePanel
+	 */
+	public ValueSelector(Component c, String title, boolean modal,
+					JValueSelector valueSelector, ActionListener okListener,
+					ActionListener cancelListener, String initValue)throws HeadlessException {
+
+				super(JOptionPane.getFrameForComponent(c), title, modal);
+				this.okListener = okListener;
+				this.cancelListener = cancelListener;
+
+				try{
+					init(Integer.valueOf(initValue).intValue());
+					this.initValue = Integer.valueOf(initValue).intValue();
+				}catch(NumberFormatException ex){
+					init(0);
+				}
+
+				setLocationRelativeTo(c);
+	}
+
+	public void init(int initValue){
+		getPSlider().setValue(initValue);
+
+		Container contentPane = getContentPane();
+		FlowLayout layout = new FlowLayout();
+		layout.setHgap(0);
+		layout.setVgap(0);
+				contentPane.setLayout(layout);
+				setSize(width, height + 10);
+				contentPane.add(getPMain(), null);
+	}
+
+	/**
+	 * Asigna el valor de inicializaci�n para el Slider
+	 * @param value
+	 */
+	public void setValue(int value){
+			this.initValue = value;
+			this.getPSlider().setValue((double)value);
+		}
+
+	/**
+	 * Asigna el valor de inicializaci�n para el Slider
+	 * @param value
+	 */
+	public double getValue(){
+		 return initValue;
+		}
+
+	/**
+	 * Obtiene el panel principal que contiene el panel de botones y el panel
+	 * con el slider
+	 * @return JPanel
+	 */
+	private JPanel getPMain(){
+		if(pMain == null){
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.gridx = 0;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.gridx = 0;
+			pMain = new JPanel();
+			pMain.setLayout(new GridBagLayout());
+			pMain.setPreferredSize(new java.awt.Dimension(widthMargin, height));
+			pMain.add(getPSlider(), gridBagConstraints);
+			pMain.add(getPButtons(), gridBagConstraints1);
+		}
+		return pMain;
+	}
+
+	/**
+	 * Obtiene el panel de botones
+	 * @return JPanel
+	 */
+	private JPanel getPButtons(){
+		if(buttons == null){
+			buttons = new JPanel();
+			buttons.setPreferredSize(new java.awt.Dimension(widthMargin, HBUTTONS));
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout.setVgap(0);
+			flowLayout.setHgap(2);
+			buttons.setLayout(flowLayout);
+			buttons.add(getBAccept(), null);
+			buttons.add(getBCancel(), null);
+		}
+		return buttons;
+	}
+
+	/**
+	 * Obtiene el panel con el slider
+	 * @return
+	 */
+	public SliderTextContainer getPSlider(){
+		if(pSlider == null){
+			pSlider = new SliderTextContainer(0, 255, this.initValue);
+			pSlider.setPreferredSize(new java.awt.Dimension(widthMargin, HSLIDER));
+		}
+		return pSlider;
+	}
+
+	/**
+	 * Obtiene el bot�n de aceptar
+	 * @return JButton
+	 */
+	public JButton getBAccept(){
+		if(bAccept == null){
+			bAccept = new JButton("aceptar");
+			bAccept.addActionListener(okListener);
+			bAccept.addActionListener(this);
+		}
+		return bAccept;
+	}
+
+	/**
+	 * Obtiene el bot�n de cancelar
+	 * @return JButton
+	 */
+	public JButton getBCancel(){
+		if(bCancel == null){
+			bCancel = new JButton("cancelar");
+			bAccept.addActionListener(cancelListener);
+			bCancel.addActionListener(this);
+		}
+		return bCancel;
+	}
+
+	/**
+	 * Al aceptar asignamos el valor del slider al bot�n de alpha y al cancelar cerramos la ventana
+	 */
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == this.getBAccept()){
+			initValue = (int)getPSlider().getValue();
+		}
+		this.setVisible(false);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/JValueSelector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ModelLoader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ModelLoader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ModelLoader.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+/**
+ * Cargador de Modelos
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class ModelLoader {
+	private static DefaultTableModel tableModel = null;
+
+	public JTable load(String model, String[] columnNames, ArrayList listeners) {
+		if (model == null || model.equals(""))
+			return null;
+
+		ActionListener actionListener = null;
+		if(listeners != null) {
+			for (int i = 0; i < listeners.size(); i++) {
+				if(listeners.get(i) instanceof ActionListener) 
+					actionListener = (ActionListener)listeners.get(i);
+			}
+		}
+		
+		JTable table = null;
+
+		if (model.equals("ListModel")) {
+			tableModel = new ListModel(columnNames);
+			table = new JTable(tableModel);
+		}
+
+		if (model.equals("TreeRadioButtonModel")) {
+			tableModel = new TreeRadioButtonModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+			
+			for (int i = 0; i < columnNames.length - 1; i++) {
+				column = table.getColumnModel().getColumn(i);
+				column.setCellRenderer(new TreeRadioButtonColumnRenderer());
+				column.setCellEditor(new TreeRadioButtonColumnEditor());
+			}
+		}
+		
+		if (model.equals("ARGBBandSelectorModel")) {
+			tableModel = new ARGBBandSelectorModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+
+			for (int i = 0; i < columnNames.length - 1; i++) {
+				column = table.getColumnModel().getColumn(i);
+				column.setMaxWidth(52);
+				column.setMinWidth(26);
+				column.setCellRenderer(new TreeRadioButtonColumnRenderer());
+				TreeRadioButtonColumnEditor trbce = new TreeRadioButtonColumnEditor();
+				trbce.setActionListener(actionListener);
+				column.setCellEditor(trbce);
+			}
+		}
+
+		if (model.equals("RadioButtonModel")) {
+			tableModel = new RadioButtonModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+
+			for (int i = 0; i < columnNames.length - 1; i++) {
+				column = table.getColumnModel().getColumn(i);
+				column.setCellRenderer(new TreeRadioButtonColumnRenderer());
+				column.setCellEditor(new TreeRadioButtonColumnEditor());
+			}
+		}
+
+		if (model.equals("CheckBoxModel")) {
+			tableModel = new CheckBoxModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+
+			column = table.getColumnModel().getColumn(0);
+			column.setCellRenderer(new CheckBoxColumnRenderer());
+			column.setCellEditor(new CheckBoxColumnEditor());
+		}
+
+		if (model.equals("TableButtonModel")) {
+			tableModel = new TableButtonModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+
+			column = table.getColumnModel().getColumn(0);
+			column.setCellRenderer(new TableColorButtonColumnRenderer(true));
+			column.setCellEditor(new TableColorButtonColumnEditor((DefaultTableModel) tableModel, table));
+
+			column = table.getColumnModel().getColumn(4);
+			column.setCellRenderer(new TableSelectorButtonColumnRenderer());
+			column.setCellEditor(new TableSelectorButtonColumnEditor());
+		}
+
+		if (model.equals("TableColorModel")) {
+			tableModel = new TableColorModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+
+			column = table.getColumnModel().getColumn(0);
+			column.setCellRenderer(new TableColorButtonColumnRenderer(true));
+			column.setCellEditor(new TableColorButtonColumnEditor((DefaultTableModel) tableModel, table));
+
+			column = table.getColumnModel().getColumn(5);
+			column.setCellRenderer(new TableSelectorButtonColumnRenderer());
+			column.setCellEditor(new TableSelectorButtonColumnEditor());
+		}
+		
+		if (model.equals("ROIsTableModel")) {
+			tableModel = new ROIsTableModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+	
+			column = table.getColumnModel().getColumn(4);
+			column.setCellRenderer(new TableColorButtonColumnRenderer(true));
+			column.setCellEditor(new TableColorButtonColumnEditor((DefaultTableModel) tableModel, table));	
+		}
+		if (model.equals("ProfilesTableModel")) {
+			tableModel = new ProfilesTableModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+	
+			column = table.getColumnModel().getColumn(1);
+			column.setCellRenderer(new TableColorButtonColumnRenderer(true));
+			column.setCellEditor(new TableColorButtonColumnEditor((DefaultTableModel) tableModel, table));	
+		}
+		
+		if (model.equals("GCPModel")) {
+			tableModel = new GCPModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+
+			column = table.getColumnModel().getColumn(0);
+			column.setCellRenderer(new CheckBoxColumnRenderer(actionListener));
+			column.setCellEditor(new CheckBoxColumnEditor());
+		}
+		
+		return table;
+	}
+
+	/**
+	 * Obtiene el modelo de la tabla
+	 * @return DefaultTableModel
+	 */
+	public DefaultTableModel getTableModel() {
+		return tableModel;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ModelLoader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.border.Border;
+import javax.swing.table.TableCellRenderer;
+/**
+ * Componente tabla
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TableColorButtonColumnRenderer extends JLabel implements TableCellRenderer {
+	private static final long serialVersionUID = 4792441413562824229L;
+	Border unselectedBorder = null;
+	Border selectedBorder = null;
+	boolean isBordered = true;
+
+	public TableColorButtonColumnRenderer(boolean isBordered) {
+		this.isBordered = isBordered;
+		setOpaque(true);
+	}
+
+	public Component getTableCellRendererComponent(JTable table, Object color, boolean isSelected, boolean hasFocus, int row, int column) {
+		if (!(color instanceof Color))
+			return this;
+
+		Color newColor = (Color) color;
+		setBackground(newColor);
+		if (isBordered) {
+			if (isSelected) {
+				if (selectedBorder == null) {
+					selectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getSelectionBackground());
+				}
+				setBorder(selectedBorder);
+			} else {
+				if (unselectedBorder == null) {
+					unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getBackground());
+				}
+				setBorder(unselectedBorder);
+			}
+		}
+
+		setToolTipText("RGB value: " + newColor.getRed() + ", " + newColor.getGreen() + ", " + newColor.getBlue());
+		return this;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableSelectorButtonColumnRenderer extends JLabel implements TableCellRenderer {
+	private static final long serialVersionUID = 2387857417420654102L;
+
+		public TableSelectorButtonColumnRenderer() {
+        setOpaque(true);
+    }
+
+    public Component getTableCellRendererComponent(
+                            JTable table, Object value,
+                            boolean isSelected, boolean hasFocus,
+                            int row, int column) {
+    	if(!(value instanceof String))
+    		return this;
+    	
+        setText((String)value);
+     
+        return this;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/GCPModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/GCPModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/GCPModel.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+/**
+ * Modelo correspondiente a una tabla de puntos de control
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class GCPModel extends DefaultTableModel implements IModel {
+	final private static long serialVersionUID = -3370601314380922368L;
+	private int               nColumns         = 0;
+
+	public GCPModel(String[] columnNames) {
+		super(new Object[0][columnNames.length], columnNames);
+		this.nColumns = columnNames.length;
+	}
+
+	public Class getColumnClass(int c) {
+		return String.class;
+	}
+
+	public void setValueAt(Object value, int row, int col) {
+		super.setValueAt(value, row, col);
+	}
+
+	public void addNew() {
+		Object[] line = new Object[nColumns];
+		line[0] = new Boolean(true);
+		for (int i = 0; i < nColumns; i++)
+			line[i] = new String("");
+		super.addRow(line);
+	}
+
+	public Object[] getNewLine() {
+		Object[] o = new Object[nColumns];
+		o[0] = new Boolean(true);
+		for (int i = 1; i < nColumns; i++)
+			o[i] = "";
+		return o;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/GCPModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TreeRadioButtonModel extends DefaultTableModel implements IModel {
+	final private static long serialVersionUID = -3370601314380922368L;
+
+	public TreeRadioButtonModel(String[] columnNames) {
+		super(new Object[0][4], columnNames);
+	}
+
+	public Class getColumnClass(int c) {
+		if (c < 3) {
+			return Boolean.class;
+		}
+
+		return String.class;
+	}
+
+	public void setValueAt(Object value, int row, int col) {
+		if ((col < 3) && ((Boolean) value).booleanValue()) {
+			for (int i = 0; i < getRowCount(); i++) {
+				if (i != row) {
+					setValueAt(new Boolean(false), i, col);
+				}
+			}
+		}
+		super.setValueAt(value, row, col);
+	}
+
+	public void addNew() {
+		super.addRow(new Object[] { new Boolean(false), new Boolean(false), new Boolean(false), "" });
+	}
+
+	public Object[] getNewLine() {
+		return new Object[] { new Boolean(false), new Boolean(false), new Boolean(false), "" };
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class CheckBoxColumnRenderer extends JCheckBox implements TableCellRenderer {
+    final private static long            serialVersionUID = -3370601314380922368L;
+    private ActionListener               listener = null;
+
+    public CheckBoxColumnRenderer() {}
+    
+    public CheckBoxColumnRenderer(ActionListener listener) {
+    	this.listener = listener;
+    }
+    
+    public Component getTableCellRendererComponent(JTable table,
+                                                   Object value,
+                                                   boolean isSelected,
+                                                   boolean hasFocus,
+                                                   int row, int column) {
+        if (value == null) {
+            this.setSelected(false);
+        }
+        if(isSelected)
+        	if(listener != null) 
+        		listener.actionPerformed(new ActionEvent(this, row, "SELECT_ROW"));
+        	
+        if(value instanceof Boolean){
+	        Boolean ValueAsBoolean = (Boolean) value;
+	        this.setSelected(ValueAsBoolean.booleanValue());
+	        this.setHorizontalAlignment(SwingConstants.CENTER);
+        }
+        	
+        return this;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ListModel.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class ListModel extends DefaultTableModel implements IModel {
+	final private static long serialVersionUID = -3370601314380922368L;
+	private int               nColumns         = 0;
+
+	public ListModel(String[] columnNames) {
+		super(new Object[0][columnNames.length], columnNames);
+		this.nColumns = columnNames.length;
+	}
+
+	public Class getColumnClass(int c) {
+		return String.class;
+	}
+
+	public void setValueAt(Object value, int row, int col) {
+		super.setValueAt(value, row, col);
+	}
+
+	public void addNew() {
+		Object[] line = new Object[nColumns];
+		for (int i = 0; i < nColumns; i++)
+			line[i] = new String("");
+		super.addRow(line);
+	}
+
+	public Object[] getNewLine() {
+		Object[] o = new Object[nColumns];
+		for (int i = 0; i < nColumns; i++)
+			o[i] = "";
+		return o;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JRadioButton;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.TableCellEditor;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TreeRadioButtonColumnEditor extends AbstractCellEditor
+implements TableCellEditor {
+    final private static long   serialVersionUID = -3370601314380922368L;
+    public JRadioButton         theRadioButton;
+	private ActionListener      listener = null;
+    
+    public TreeRadioButtonColumnEditor() {
+        super();
+        theRadioButton = new JRadioButton();
+        theRadioButton.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent event) {
+                    fireEditingStopped() ;
+                    if(listener != null)
+                    	listener.actionPerformed(event);
+                }
+            });
+    }
+    
+    /**
+     * Asigna un listener externo
+     * @param listener
+     */
+    public void setActionListener(ActionListener listener) {
+    	this.     listener = listener;
+    }
+
+    public Component getTableCellEditorComponent(JTable table, Object obj,
+                                                 boolean isSelected,
+                                                 int row, int col) {
+        theRadioButton.setHorizontalAlignment(SwingUtilities.CENTER);
+
+        Boolean lValueAsBoolean = (Boolean) obj;
+        theRadioButton.setSelected(lValueAsBoolean.booleanValue());
+
+        return theRadioButton;
+    }
+
+    public Object getCellEditorValue() {
+        return new Boolean(theRadioButton.isSelected());
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableButtonModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableButtonModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableButtonModel.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+
+import javax.swing.JButton;
+import javax.swing.table.DefaultTableModel;
+/**
+ * Componente tabla
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TableButtonModel extends DefaultTableModel implements IModel {
+	final private static long serialVersionUID = -3370601314380922368L;
+
+	public TableButtonModel(String[] columnNames) {
+		super(new Object[0][4], columnNames);
+	}
+
+	public Class getColumnClass(int c) {
+		if ((c < 1) || (c == 4))
+			return JButton.class;
+
+		return String.class;
+	}
+
+	public void removeRow(int row) {
+		super.setValueAt(null, row, 0);
+		super.setValueAt("", row, 1);
+		super.setValueAt("", row, 2);
+		super.setValueAt("", row, 3);
+		super.setValueAt(null, row, 4);
+		super.removeRow(row);
+	}
+
+	public void setValueAt(Object value, int row, int col) {
+		super.setValueAt(value, row, col);
+	}
+
+	public Object[] getNewLine() {
+		return new Object[] { Color.WHITE, "", "", "", "255" };
+	}
+
+	public void addRow(Object[] list) {
+		super.addRow(new Object[] { list[0], list[1], list[2], list[3], list[4] });
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableButtonModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ROIsTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ROIsTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ROIsTableModel.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+
+import javax.swing.JButton;
+import javax.swing.table.DefaultTableModel;
+
+public class ROIsTableModel extends DefaultTableModel implements IModel {
+	private static final long serialVersionUID = 8716862990277121681L;
+
+	
+	private static boolean[]	canEdit = new boolean[] { true, false, false, false, true};
+	private static Class[]   	types   = new Class[] { String.class, Integer.class, Integer.class, Integer.class, JButton.class};
+	private static Color[]   	colors  = new Color[] {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW, Color.MAGENTA, Color.CYAN,
+		Color.ORANGE, Color.PINK, Color.WHITE, Color.BLACK};
+	
+	public ROIsTableModel(String[] columnNames) {
+		super(new Object[0][5], columnNames);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.table.models.IModel#getNewLine()
+	 */
+	public Object[] getNewLine() {
+		Color color = null;
+		if (this.getRowCount() < colors.length) {
+			color = colors[this.getRowCount()];
+		}
+		else{
+			color = new Color((float)Math.random(),(float)Math.random(),(float)Math.random());
+		}
+		return new Object[] {"", new Integer(0), new Integer(0), new Integer(0), color};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
+	 */
+	public Class getColumnClass(int columnIndex) {
+		return types [columnIndex];
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)
+	 */
+	public boolean isCellEditable(int rowIndex, int columnIndex) {
+		return canEdit [columnIndex];
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/ROIsTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorModel.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+
+import javax.swing.JButton;
+import javax.swing.table.DefaultTableModel;
+/**
+ * Componente tabla
+ *
+ * @version 27/06/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class TableColorModel extends DefaultTableModel implements IModel {
+	private static final long serialVersionUID = 5126848457976272945L;
+
+	boolean[] canEdit = new boolean[] { true, true, false, true, false, true };
+	Class[]   types   = new Class[] { JButton.class, String.class, String.class, Double.class, Double.class, JButton.class };
+
+	public TableColorModel(String[] columnNames) {
+		super(new Object[0][6], columnNames);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.table.models.IModel#getNewLine()
+	 */
+	public Object[] getNewLine() {
+		Double valor = new Double(0.0f);
+		Color color = Color.WHITE;
+		if (this.getRowCount() > 0) {
+			valor = (Double) getValueAt(this.getRowCount() - 1, 3);
+			color = (Color) getValueAt(this.getRowCount() - 1, 0);
+		}
+		return new Object[] {color, "", "", valor, null, "255"};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
+	 */
+	public Class getColumnClass(int columnIndex) {
+		return types [columnIndex];
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)
+	 */
+	public boolean isCellEditable(int rowIndex, int columnIndex) {
+		return canEdit [columnIndex];
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JDialog;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.gui.beans.Messages;
+/**
+ * Editor de celda con un bot�n selector de color-
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TableColorButtonColumnEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
+	private static final long serialVersionUID = -6627842834708616873L;
+	Color currentColor;
+	JButton button;
+	JColorChooser colorChooser;
+	JDialog dialog;
+	private DefaultTableModel tableModel = null;
+	private JTable table = null;
+	protected static final String EDIT = "edit";
+
+	public TableColorButtonColumnEditor(DefaultTableModel tableModel, JTable table) {
+		button = new JButton();
+		button.setActionCommand(EDIT);
+		button.addActionListener(this);
+		button.setBorderPainted(false);
+		this.tableModel = tableModel;
+		this.table = table;
+
+		colorChooser = new JColorChooser();
+		dialog = JColorChooser.createDialog(button, Messages.getText("select_color"), true, colorChooser, this, null);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (EDIT.equals(e.getActionCommand())) {
+			button.setBackground(currentColor);
+			colorChooser.setColor(currentColor);
+			dialog.setVisible(true);
+			if ((tableModel != null) && (table != null)) {
+				if (!((tableModel instanceof ProfilesTableModel)||(tableModel instanceof ROIsTableModel))) {
+					String newColor = currentColor.getRed() + "," + currentColor.getGreen() + "," + currentColor.getBlue();
+					if (!newColor.equals(tableModel.getValueAt(table.getSelectedRow(), 2))) {	
+					tableModel.setValueAt(newColor, table.getSelectedRow(), 2);
+					}
+				}
+			}
+			fireEditingStopped();
+		} else
+			currentColor = colorChooser.getColor();
+	}
+
+	public Object getCellEditorValue() {
+		return currentColor;
+	}
+
+	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+		currentColor = (Color) value;
+		return button;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxModel.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class CheckBoxModel extends DefaultTableModel implements IModel{
+	final private static long serialVersionUID = -3370601314380922368L;
+
+	public CheckBoxModel(String[] columnNames) {
+		super(new Object[0][columnNames.length], columnNames);
+	}
+
+	public Object[] getNewLine() {
+		return new Object[] { new Boolean(false), "", new Integer(0)};
+	}
+	
+	public boolean isCellEditable(int row, int col) {
+		return (col == 0);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/IModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/IModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/IModel.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+
+/**
+ * Interfaz que implementan los modelos de tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public interface IModel{
+    public Object[] getNewLine();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/IModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.gui.beans.Messages;
+
+/**
+ * Componente tabla
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableSelectorButtonColumnEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
+	private static final long serialVersionUID = -2028530090765546942L;
+	String currentText = "255";
+	JButton button;
+	JValueSelector valueSelector;
+	JDialog dialog;
+	protected static final String EDIT = "edit";
+
+	public TableSelectorButtonColumnEditor() {
+		button = new JButton();
+		button.setActionCommand(EDIT);
+		button.addActionListener(this);
+		button.setBorderPainted(false);
+
+		valueSelector = new JValueSelector();
+		dialog = JValueSelector.createDialog(button, Messages.getText("seleccion_alpha"), true, valueSelector, this, null, currentText);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (EDIT.equals(e.getActionCommand())) {
+			button.setText(currentText);
+			((ValueSelector)dialog).setValue(Integer.valueOf(currentText).intValue());
+			dialog.setVisible(true);
+
+			fireEditingStopped();
+
+		}else{
+			currentText = String.valueOf((int)((ValueSelector)dialog).getValue());
+			button.setText(currentText);
+		}
+	}
+
+	public Object getCellEditorValue() {
+		return currentText;
+	}
+
+	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
+															 int row, int column) {
+		currentText = (String)value;
+		return button;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JCheckBox;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.TableCellEditor;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class CheckBoxColumnEditor extends AbstractCellEditor
+implements TableCellEditor {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public JCheckBox theCheckBox;
+
+    public CheckBoxColumnEditor() {
+        super();
+        theCheckBox = new JCheckBox();
+        theCheckBox.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent event) {
+                    fireEditingStopped() ;
+                    
+                }
+            });
+    }
+
+    public Component getTableCellEditorComponent(JTable table, Object obj,
+                                                 boolean isSelected,
+                                                 int row, int col) {
+    	theCheckBox.setHorizontalAlignment(SwingUtilities.CENTER);
+
+        Boolean lValueAsBoolean = (Boolean) obj;
+        theCheckBox.setSelected(lValueAsBoolean.booleanValue());
+
+        return theCheckBox;
+    }
+
+    public Object getCellEditorValue() {
+        return new Boolean(theCheckBox.isSelected());
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/RadioButtonModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/RadioButtonModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/RadioButtonModel.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+
+public class RadioButtonModel extends DefaultTableModel implements IModel {
+	private static final long serialVersionUID = 7113401200946271448L;
+
+	public RadioButtonModel(String[] columnNames) {
+		super(new Object[0][2], columnNames);
+	}
+
+	public Class getColumnClass(int c) {
+		if (c < 1) {
+			return Boolean.class;
+		}
+
+		return String.class;
+	}
+
+	public void setValueAt(Object value, int row, int col) {
+		super.setValueAt(value, row, col);
+	}
+
+	public void addNew() {
+		super.addRow(new Object[] { new Boolean(false), "" });
+	}
+
+	public Object[] getNewLine() {
+		return new Object[] { new Boolean(false), "" };
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/models/RadioButtonModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/last.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/last.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/newpoint.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/newpoint.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/delone.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/delone.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/first.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/first.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/up-16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/up-16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/down-16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/down-16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/prev.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/prev.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/delall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/delall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/next.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/images/next.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/Table.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/Table.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/Table.java	(revision 42196)
@@ -0,0 +1,195 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.BorderLayout;
+import java.util.ArrayList;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+import org.gvsig.gui.beans.table.models.ModelLoader;
+/**
+ * Componente tabla
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class Table extends JPanel {
+	private static final long serialVersionUID = -4375500244443538451L;
+	private JTable            jTable           = null;
+	private JScrollPane       scrollPanel      = null;
+	private DefaultTableModel tableModel       = null;
+	private String[]          columnNames      = null;
+	private int[]             columnWidths     = null;
+	private TableContainer    tableContainer   = null;
+	public String             tableModelClass  = null;
+	private ArrayList         listeners        = null;
+
+	/**
+	 *
+	 * @param width Ancho de la tabla en pixeles
+	 * @param height Alto de la tabla en pixeles
+	 * @param columnNames Vector de nombres de columna
+	 * @param columnsWidth	Vector de anchos para cada columna. Ha de tener el mismo n�mero de elementos que columnNames.
+	 * Si vale null las columnas se pondr�n equidistantes.
+	 */
+	public Table(String[] columnNames, int[] columnWidths, String tableModelClass){
+		this.columnNames = columnNames;
+		this.columnWidths = columnWidths;
+		this.tableModelClass = tableModelClass;
+		initialize();
+	}
+	
+	/**
+	 *
+	 * @param width Ancho de la tabla en pixeles
+	 * @param height Alto de la tabla en pixeles
+	 * @param columnNames Vector de nombres de columna
+	 * @param columnsWidth	Vector de anchos para cada columna. Ha de tener el mismo n�mero de elementos que columnNames.
+	 * @para listener Liste de eventos para recoger en las tablas. Cada modelo tiene la posibilida de recoger unos listener
+	 * u otros. El usuario le pasar� el listener y el modelo se encargar� de gestionarlos si puede hacerlo. Si no puede no
+	 * har� nada con ellos.
+	 * Si vale null las columnas se pondr�n equidistantes.
+	 */
+	public Table(String[] columnNames, int[] columnWidths, String tableModelClass, ArrayList listeners){
+		this.columnNames = columnNames;
+		this.columnWidths = columnWidths;
+		this.tableModelClass = tableModelClass;
+		this.listeners = listeners;
+		initialize();
+	}
+
+
+		/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout(5, 5));
+		this.add(getJScrollPane(), BorderLayout.CENTER);
+	}
+
+	/**
+	 * Obtiene la Tabla
+	 * @return Tabla de bandas de la imagen
+	 */
+	public JTable getJTable() {
+			if (jTable == null) {
+			// tableModel = new ListModel(columnNames);
+			ModelLoader loader = new ModelLoader();
+			jTable = loader.load(tableModelClass, columnNames, listeners);
+			tableModel = loader.getTableModel();
+
+			TableColumn column = null;
+
+			int widthPerColumn = (int) (this.getWidth() / columnNames.length);
+			for (int i = 0; i < columnNames.length; i++) {
+				column = jTable.getColumnModel().getColumn(i);
+				column.setResizable(true);
+				if (columnWidths == null)
+					column.setPreferredWidth(widthPerColumn);
+				else
+					column.setPreferredWidth(columnWidths[i]);
+			}
+		}
+
+		return jTable;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 * @return javax.swing.JPanel
+	 */
+	private JScrollPane getJScrollPane() {
+		if (scrollPanel == null) {
+			scrollPanel = new JScrollPane(getJTable());
+		}
+		return scrollPanel;
+	}
+
+	/**
+	 * Obtiene el contenedor padre de la tabla
+	 * @return
+	 */
+	public TableContainer getTableContainer() {
+		return tableContainer;
+	}
+
+	/**
+	 * Asigna el contenedor padre de la tabla
+	 * @param tableContainer
+	 */
+	public void setTableContainer(TableContainer tableContainer) {
+		this.tableContainer = tableContainer;
+	}
+
+	/**
+	 * Obtiene el modelo de la tabla
+	 * @return
+	 */
+	public DefaultTableModel getTableModel() {
+		return tableModel;
+	}
+
+	//********************M�todos de Tabla*****************************//
+
+	/**
+	 * A�ade una fila a la tabla.
+	 * @param list Lista de cadenas
+	 */
+	public void addRow(Object[] list){
+		((DefaultTableModel)this.getJTable().getModel()).addRow(list);
+	}
+
+	/**
+	 * Elimina una fila de la tabla.
+	 * @param i Fila a eliminar
+	 */
+	public void delRow(int i){
+		((DefaultTableModel)this.getJTable().getModel()).removeRow(i);
+	}
+	
+	/**
+	 * Intercambia una fila de la tabla por otra.
+	 * @param i
+	 * @param j
+	 */
+	public void swapRow(int i, int j) {
+		DefaultTableModel model = (DefaultTableModel) this.getJTable().getModel();
+		if ((i < 0) || (j < 0))
+			return;
+		if ((i >= model.getRowCount()) || (j >= model.getRowCount()))
+			return;
+		model.moveRow(i, i, j);
+	}
+
+	/**
+	 * Elimina todas las filas de la tabla.
+	 */
+	public void removeAllRows(){
+		((DefaultTableModel)this.getJTable().getModel()).setNumRows(0);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/Table.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/listeners/TableListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/listeners/TableListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/listeners/TableListener.java	(revision 42196)
@@ -0,0 +1,161 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table.listeners;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.gui.beans.table.MoveRowsPanel;
+import org.gvsig.gui.beans.table.Table;
+import org.gvsig.gui.beans.table.TableContainer;
+import org.gvsig.gui.beans.table.TableControlerPanel;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.models.IModel;
+/**
+ * Listener para la tabla
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class TableListener implements ActionListener, ListSelectionListener {
+	public static boolean       comboEventEnable      = true;
+	private TableContainer      tableContainer        = null;
+	private TableControlerPanel controlPanel          = null;
+	private MoveRowsPanel       moveRowsPanel         = null;
+	private Table               table                 = null;
+	public boolean              enableNewLineListener = true;
+
+	/**
+	 * Constructor
+	 * @param tableContainer
+	 */
+	public TableListener(TableContainer tableContainer){
+		this.tableContainer = tableContainer;
+	}
+
+	private void initialize(){
+		controlPanel = tableContainer.getPTableControl();
+		moveRowsPanel = tableContainer.getMoveRowsPanel();
+		table = tableContainer.getTable();
+	}
+
+	/**
+	 * Captura y gestiona los eventos del control de la tabla para a�adir filas,
+	 * eliminar filas y moverse por la tabla.
+	 */
+	public void actionPerformed(ActionEvent e) {
+		if (controlPanel == null || table == null)
+			initialize();
+
+		try {
+			/**
+			 * Nueva entrada
+			 */
+			if (enableNewLineListener && e.getSource() == controlPanel.getBNew()) {
+				if (table.getTableModel() instanceof IModel)
+					tableContainer.addRow(((IModel) table.getTableModel()).getNewLine());
+			}
+
+			/**
+			 * Eliminar todas las filas
+			 */
+			if (enableNewLineListener && e.getSource() == controlPanel.getBClear()) {
+				tableContainer.removeAllRows();
+			}
+
+			/**
+			 * Elimina una entrada concreta de la tabla
+			 */
+			if (enableNewLineListener && e.getSource() == controlPanel.getBDelPoint()) {
+				int[] lista = tableContainer.getSelectedRows();
+				for (int i = lista.length - 1; i>=0; i--)
+					tableContainer.delRow(lista[i]);
+			}
+
+			/**
+			 * Subir un elemento
+			 */
+			if (e.getSource() == moveRowsPanel.getBUp()) {
+				int[] lista = tableContainer.getSelectedRows();
+				if (lista.length > 0) {
+  				for (int i = 0; i < lista.length; i++)
+  					tableContainer.swapRow(lista[i] - 1, lista[i]);
+  				if (lista[0] > 0)
+  					tableContainer.setSelectedIndex(lista[0] - 1);
+				}
+			}
+
+			/**
+			 * Bajar un elemento
+			 */
+			if (e.getSource() == moveRowsPanel.getBDown()) {
+				int[] lista = tableContainer.getSelectedRows();
+				if (lista.length > 0) {
+  				for (int i = lista.length - 1; i >= 0; i--)
+  					tableContainer.swapRow(lista[i], lista[i] + 1);
+  				tableContainer.setSelectedIndex(lista[0] + 1);
+				}
+			}
+
+			if (e.getSource() == controlPanel.getBFirst()) {
+				tableContainer.setSelectedIndex(0);
+			}
+
+			if (e.getSource() == controlPanel.getBLast()) {
+				tableContainer.setSelectedIndex(tableContainer.getRowCount() - 1);
+			}
+
+			if (e.getSource() == controlPanel.getBNext()) {
+				if (tableContainer.getSelectedRow() < tableContainer.getRowCount())
+					tableContainer.setSelectedIndex(tableContainer.getSelectedRow() + 1);
+			}
+
+			if (e.getSource() == controlPanel.getBPrev()) {
+				if (tableContainer.getSelectedRow() > 0)
+					tableContainer.setSelectedIndex(tableContainer.getSelectedRow() - 1);
+			}
+
+			if (e.getSource() == controlPanel.getCPoint()) {
+				if (comboEventEnable)
+					tableContainer.setSelectedIndex(controlPanel.getCPoint().getSelectedIndex());
+			}
+
+		} catch (NotInitializeException ex) {
+
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
+	 */
+	public void valueChanged(ListSelectionEvent e) {
+		try {
+	    tableContainer.setSelectedIndex(tableContainer.getSelectedRow());
+    } catch (NotInitializeException e1) {
+	    e1.printStackTrace();
+    }
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/listeners/TableListener.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableContainer.java	(revision 42196)
@@ -0,0 +1,350 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+
+import javax.swing.JPanel;
+import javax.swing.table.DefaultTableModel;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.listeners.TableListener;
+
+/**
+ * Contenedor para los componentes de la tabla. Incluye la tabla y el panel de
+ * control.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class TableContainer extends JPanel {
+	private static final long   serialVersionUID = 384372026944926838L;
+
+	private Table               table           = null;
+	private TableControlerPanel pTableControl   = null;
+	private MoveRowsPanel       moveRowsPanel   = null;
+	private String[]            columnNames     = null;
+	private int[]               columnWidths    = null;
+	private TableListener       tableListener   = null;
+	// Variable que indica si la tabla ha sido inicializada
+	private boolean             initTable       = false;
+	private String              tableModelClass = "ListModel";
+	private ArrayList           listeners       = null;
+
+	/**
+	 * @param width Ancho de la tabla en pixeles
+	 * @param height Alto de la tabla en pixeles
+	 * @param columnNames Vector de nombres de columna
+	 * @param columnsWidth Vector de anchos para cada columna. Ha de tener el
+	 *          mismo n�mero de elementos que columnNames. Si vale null las
+	 *          columnas se pondr�n equidistantes.
+	 */
+	public TableContainer(String[] columnNames, int[] columnWidths) {
+		this.columnNames = columnNames;
+		this.columnWidths = columnWidths;
+	}
+	
+	/**
+	 * @param width Ancho de la tabla en pixeles
+	 * @param height Alto de la tabla en pixeles
+	 * @param columnNames Vector de nombres de columna
+	 * @param columnsWidth Vector de anchos para cada columna. Ha de tener el
+	 *          mismo n�mero de elementos que columnNames. Si vale null las
+	 *          columnas se pondr�n equidistantes.
+	 * @para listener Liste de eventos para recoger en las tablas. Cada modelo tiene la posibilida de recoger unos listener
+	 * u otros. El usuario le pasar� el listener y el modelo se encargar� de gestionarlos si puede hacerlo. Si no puede no
+	 * har� nada con ellos.
+	 */
+	public TableContainer(String[] columnNames, int[] columnWidths, ArrayList listeners) {
+		this.columnNames = columnNames;
+		this.columnWidths = columnWidths;
+		this.listeners = listeners;
+	}
+
+	/**
+	 * This method initializes this
+	 */
+	public void initialize() {
+		initTable = true;
+		tableListener = new TableListener(this);
+		getTable().getJTable().getSelectionModel().addListSelectionListener(tableListener);
+
+		this.setLayout(new BorderLayout(5, 5));
+		this.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8));
+		this.add(getTable(), BorderLayout.CENTER);
+
+		JPanel panel = new JPanel();
+
+		panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
+		panel.add(getPTableControl());
+		panel.add(getMoveRowsPanel());
+		this.add(panel, BorderLayout.SOUTH);
+	}
+
+	/**
+	 * This method initializes jPanel
+	 * @return javax.swing.JPanel
+	 */
+	public Table getTable() {
+		if (table == null) {
+			table = new Table(columnNames, columnWidths, tableModelClass, listeners);
+			table.setTableContainer(this);
+		}
+		return table;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 * @return javax.swing.JPanel
+	 */
+	public TableControlerPanel getPTableControl() {
+		if (pTableControl == null) {
+			pTableControl = new TableControlerPanel(tableListener);
+		}
+		return pTableControl;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 * @return javax.swing.JPanel
+	 */
+	public MoveRowsPanel getMoveRowsPanel() {
+		if (moveRowsPanel == null) {
+			moveRowsPanel = new MoveRowsPanel(tableListener);
+			moveRowsPanel.setVisible(false);
+		}
+		return moveRowsPanel;
+	}
+
+	// ********************M�todos de Tabla*****************************//
+
+	/**
+	 * A�ade una fila a la tabla.
+	 * @param list Lista de cadenas
+	 */
+	public void addRow(Object[] list) throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		TableListener.comboEventEnable = false;
+		getTable().addRow(list);
+		getPTableControl().addPointToTable((getTable()).getJTable().getRowCount());
+		setSelectedIndex(getRowCount() - 1);
+		TableListener.comboEventEnable = true;
+	}
+
+	/**
+	 * Elimina una fila de la tabla.
+	 * @param i Fila a eliminar
+	 */
+	public void delRow(int i) throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		TableListener.comboEventEnable = false;
+		try {
+			setSelectedIndex(getSelectedRow() - 1);
+		} catch (ArrayIndexOutOfBoundsException ex) {
+			try {
+				setSelectedIndex(getSelectedRow() + 1);
+			} catch (ArrayIndexOutOfBoundsException exc) {
+			}
+		}
+		getTable().delRow(i);
+		getPTableControl().setNItems(getRowCount());
+		TableListener.comboEventEnable = true;
+	}
+
+	/**
+	 * Intercambia una fila de la tabla por otra.
+	 * @param i Fila a eliminar
+	 */
+	public void swapRow(int i, int j) throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		TableListener.comboEventEnable = false;
+		getTable().swapRow(i, j);
+		TableListener.comboEventEnable = true;
+	}
+
+	/**
+	 * Elimina todas las filas de la tabla.
+	 */
+	public void removeAllRows() throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		TableListener.comboEventEnable = false;
+		getTable().removeAllRows();
+		getPTableControl().setNItems(0);
+		TableListener.comboEventEnable = true;
+	}
+
+	/**
+	 * Obtiene el n�mero de filas en la tabla
+	 * @return N�mero de filas de la tabla
+	 */
+	public int getRowCount() throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		return getTable().getJTable().getRowCount();
+	}
+
+	/**
+	 * Selecciona un punto de la lista
+	 * @param i punto a seleccionar
+	 */
+	public void setSelectedIndex(int i) throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		TableListener.comboEventEnable = false;
+		try {
+			getPTableControl().setSelectedIndex(i);
+			getMoveRowsPanel().setSelectedIndex(i, getRowCount());
+			getTable().getJTable().setRowSelectionInterval(i, i);
+		} catch (IllegalArgumentException ex) {
+
+		}
+		TableListener.comboEventEnable = true;
+	}
+
+	/**
+	 * Obtiene el punto seleccionado de la lista
+	 * @return Posici�n del punto seleccionado de la tabla
+	 */
+	public int getSelectedRow() throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		return getTable().getJTable().getSelectedRow();
+	}
+
+	/**
+	 * Obtiene los puntos seleccionados de la lista
+	 * @return Posici�n del punto seleccionado de la tabla
+	 */
+	public int[] getSelectedRows() throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		return getTable().getJTable().getSelectedRows();
+	}
+
+	/**
+	 * Asigna un valor a una posici�n de la tabla
+	 * @param value Valor
+	 * @param row Fila
+	 * @param col Columna
+	 */
+	public void setValueAt(Object value, int row, int col) throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		getTable().getJTable().setValueAt(value, row, col);
+	}
+
+	/**
+	 * Dice si una tabla es editable o no. Este flag hay que asignarlo antes de la
+	 * inicializaci�n de tabla.
+	 * @param editable
+	 */
+	public void setEditable(boolean editable) throws NotInitializeException {
+		if (!initTable)
+			throw new NotInitializeException();
+
+		if (!editable)
+			getTable().getJTable().setBackground(this.getBackground());
+		else
+			getTable().getJTable().setBackground(Color.white);
+
+		getTable().getJTable().setEnabled(editable);
+	}
+
+	/**
+	 * Asigna el modelo de la tabla
+	 * @param model cadena con el nombre del modelo
+	 */
+	public void setModel(String model) {
+		tableModelClass = model;
+	}
+
+	/**
+	 * Obtiene el model de la tabla
+	 * @return
+	 */
+	public DefaultTableModel getModel() {
+		return (DefaultTableModel) getTable().getJTable().getModel();
+	}
+
+	/**
+	 * Asigna al panel de control de tabla la propiedad de visible/invisible a
+	 * true o false
+	 * @param visible
+	 */
+	public void setControlVisible(boolean visible) {
+		getPTableControl().setVisible(visible);
+	}
+	
+	/**
+	 * Asigna al panel de control de tabla la propiedad de visible/invisible a
+	 * true o false
+	 * @param visible
+	 */
+	public void setMoveRowsButtonsVisible(boolean visible) {
+		getMoveRowsPanel().setVisible(visible);
+	}
+
+	/**
+	 * Obtiene el control de tabla
+	 * @return TableControlerPanel
+	 */
+	public TableControlerPanel getControl() {
+		return getPTableControl();
+	}
+
+	/**
+	 * Desactiva o activa el evento de nueva linea. Si se desactiva tendr� que ser
+	 * gestionado por el cliente
+	 * @param enabled true para activar y false para desactivar
+	 */
+	public void setEnableControlsListener(boolean enabled) {
+		tableListener.enableNewLineListener = enabled;
+	}
+
+	/**
+	 * Activar o desactivar los componentes del panel
+	 */
+	public void setEnabled(boolean enabled) {
+		getTable().getJTable().setEnabled(enabled);
+
+		if (!enabled)
+			getPTableControl().disableAllControls();
+		else
+			getPTableControl().restoreControlsValue();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/table/TableContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/labelslidertext/LabelSliderTextContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/labelslidertext/LabelSliderTextContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/labelslidertext/LabelSliderTextContainer.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.labelslidertext;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.slidertext.SliderTextContainer;
+/**
+ * A�ade una etiqueta al componente Slider ajustando el tama�o del componente
+ * a la longitud de la etiqueta. Al redimensionar el componente varia el tama�o
+ * del slider
+ * 
+ * @author Nacho Brodin(nachobrodin@gmail.com) 
+ */
+public class LabelSliderTextContainer extends SliderTextContainer {
+	private static final long serialVersionUID = -4617272063786945078L;
+	public JLabel lName = null;
+	private JPanel pLabel = null;
+
+	/**
+	 * Constructor	
+	 * @param min Valor m�nimo del slider
+	 * @param max Valor m�ximo del slider
+	 * @param defaultPos Posici�n inicial
+	 * @param up Si es true el texto se coloca sobre el componente y si es false a la izquierda 
+	 * @param txt Texto de la etiqueta
+	 */
+	public LabelSliderTextContainer(int min, int max, int defaultPos, boolean up, String txt){
+		super(min, max, defaultPos);
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.insets = new Insets(0,0,0,0);
+		if(!up)
+			super.add(getPLabel(up), BorderLayout.WEST);
+		else
+			super.add(getPLabel(up), BorderLayout.NORTH);
+		getLName().setText(txt);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPLabel(boolean up) {
+		if (pLabel == null) {
+			pLabel = new JPanel();
+			if(!up){
+				GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+				gridBagConstraints1.insets = new java.awt.Insets(0, 10, 8, 0);
+				pLabel.setLayout(new GridBagLayout());
+				pLabel.add(getLName(), gridBagConstraints1);
+			}else{
+				FlowLayout fl = new FlowLayout();
+				fl.setAlignment(FlowLayout.LEFT);
+				pLabel.setLayout(fl);
+				pLabel.add(getLName(), null);
+			}
+
+		}
+		return pLabel;
+	}
+
+	/**
+	 * This method initializes JLabel
+	 * @return
+	 */
+	public JLabel getLName(){
+		if(lName == null)
+			lName = new JLabel();
+		return lName;
+	}
+
+	/**
+	 * Asigna el texto de la etiqueta
+	 * @param Texto de la etiqueta
+	 */
+	public void setName(String name){
+		lName.setText(name);
+	}
+
+	/**
+	 * Activa o desactiva el control
+	 */
+	public void setControlEnabled(boolean active){
+		this.lName.setEnabled(active);
+		super.setControlEnabled(active);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/labelslidertext/LabelSliderTextContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/CancellableComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/CancellableComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/CancellableComponent.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: CancellableComponent.java 13136 2007-08-20 08:38:34Z evercher $
+* $Log$
+* Revision 1.1  2007-08-20 08:34:45  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.1  2006/05/17 17:20:11  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans;
+/**
+ * Interface implemented by those components that can cancel an action at anytime.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public interface CancellableComponent {
+	/**
+	 * Invoked to cancel the current executing action.
+	 */
+	public abstract void cancel();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/CancellableComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainer.java	(revision 42196)
@@ -0,0 +1,171 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.datainput;
+
+import java.awt.ComponentOrientation;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.KeyListener;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+/**
+ * Campo de texto que controla el contenido de datos del componente y solo
+ * dispara un evento cuando realmente ha cambiado su valor. Contiene un
+ * label para ponerle un nombre.<p>
+ * 
+ * <b>RECOMENDABLE:</b> Usar JFormattedTextFields<p>
+ * 
+ * Ejemplo de Sun:<br>
+ * &nbsp;&nbsp;<a href="http://java.sun.com/docs/books/tutorial/uiswing/examples/components/FormatterFactoryDemoProject/src/components/FormatterFactoryDemo.java">FormatterFactoryDemo.java</a>
+ * 
+ * @version 06/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class DataInputContainer extends JPanel {
+	private static final long serialVersionUID = 7084105134015956663L;
+
+	private JLabel          jLabel                = null;
+	private DataInputField  dataInputField        = null;
+	private int             maximumFractionDigits = 3;
+
+	/**
+	 * This is the default constructor
+	 */
+	public DataInputContainer(int maximumFractionDigits) {
+		this.maximumFractionDigits = maximumFractionDigits;
+		initialize();
+	}
+	
+	/**
+	 * This is the default constructor
+	 */
+	public DataInputContainer() {
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * @return void
+	 */
+	private void initialize() {
+		setLayout(new GridBagLayout());
+
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.insets = new Insets(0, 0, 0, 0);
+		add(getLText(), gridBagConstraints);
+
+		gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		add(getDataInputField(), gridBagConstraints);
+	}
+
+	private JLabel getLText() {
+		if (jLabel == null) {
+			jLabel = new JLabel();
+			jLabel.setText("JLabel");
+			jLabel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
+		}
+		return jLabel;
+	}
+
+	/**
+	 * Da nombre al campo de texto del componente.
+	 * @param text
+	 */
+	public void setLabelText(String text){
+		getLText().setText(text + ":");
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	public DataInputField getDataInputField() {
+		if (dataInputField == null) {
+			dataInputField = new DataInputField(maximumFractionDigits);
+		}
+		return dataInputField;
+	}
+
+	/**
+	 * Devuelve el valor del campo de texto.
+	 * @return
+	 */
+	public String getValue() {
+		return getDataInputField().getValue();
+	}
+
+	/**
+	 * Habilita o deshabilita el control
+	 * @param en
+	 */
+	public void setControlEnabled(boolean en){
+		getLText().setEnabled(en);
+		getDataInputField().setControlEnabled(en);
+	}
+
+	/**
+	 * Asigna el valor al campo de texto.
+	 * @return
+	 */
+	public void setValue(String value) {
+		getDataInputField().setValue(value);
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(DataInputContainerListener listener) {
+		getDataInputField().addValueChangedListener(listener);
+	}
+	
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addKeyListener(KeyListener listener) {
+		getDataInputField().addKeyListener(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(DataInputContainerListener listener) {
+		getDataInputField().removeValueChangedListener(listener);
+	}
+	
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeKeyListener(KeyListener listener) {
+		getDataInputField().removeKeyListener(listener);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputField.java	(revision 42196)
@@ -0,0 +1,193 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.datainput;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.event.KeyListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.Iterator;
+
+import javax.swing.JFormattedTextField;
+import javax.swing.text.DefaultFormatterFactory;
+import javax.swing.text.NumberFormatter;
+/**
+ * Campo de texto que controla el contenido de datos del componente y solo
+ * dispara un evento cuando realmente ha cambiado su valor.<p>
+ * 
+ * <b>RECOMENDABLE:</b> Usar JFormattedTextFields<p>
+ * 
+ * Ejemplo de Sun:<br>
+ * &nbsp;&nbsp;<a href="http://java.sun.com/docs/books/tutorial/uiswing/examples/components/FormatterFactoryDemoProject/src/components/FormatterFactoryDemo.java">FormatterFactoryDemo.java</a>
+ * 
+ * @version 06/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class DataInputField extends Container implements PropertyChangeListener {
+  private static final long serialVersionUID = 8633824284253287604L;
+
+	private JFormattedTextField textField              = null;
+	private ArrayList           actionChangedListeners = new ArrayList();
+
+	private NumberFormat        doubleDisplayFormat;
+	private NumberFormat        doubleEditFormat;
+	private boolean             eventsEnabled = true;
+	private int                 maximumFractionDigits = 3;
+
+	/**
+	 * This is the default constructor
+	 */
+	public DataInputField(int maximumFractionDigits) {
+		this.maximumFractionDigits = maximumFractionDigits;
+		setUpFormats();
+		initialize();
+	}
+
+	/**
+	 * This is the default constructor
+	 */
+	public DataInputField() {
+		setUpFormats();
+		initialize();
+	}
+
+  /**
+	 * Create and set up number formats. These objects also parse numbers input by
+	 * user.
+	 */
+  private void setUpFormats() {
+      doubleDisplayFormat = NumberFormat.getNumberInstance();
+      doubleDisplayFormat.setMinimumFractionDigits(0);
+      doubleDisplayFormat.setMaximumFractionDigits(maximumFractionDigits);
+      doubleEditFormat = NumberFormat.getNumberInstance();
+  }
+
+	/**
+	 * This method initializes this
+	 * @return void
+	 */
+	private void initialize() {
+		setLayout(new BorderLayout());
+
+		add(getJFormattedTextField(), BorderLayout.CENTER);
+	}
+	
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JFormattedTextField getJFormattedTextField() {
+		if (textField == null) {
+			textField = new JFormattedTextField(new DefaultFormatterFactory(
+          new NumberFormatter(doubleDisplayFormat),
+          new NumberFormatter(doubleDisplayFormat),
+          new NumberFormatter(doubleEditFormat)));
+			textField.setBackground(Color.white);
+			textField.setValue(new Double(0));
+			textField.setColumns(10);
+			textField.addPropertyChangeListener("value", this);
+		}
+		return textField;
+	}
+
+	/**
+	 * Devuelve el valor del campo de texto.
+	 * @return
+	 */
+	public String getValue(){
+		double value = ((Number) getJFormattedTextField().getValue()).doubleValue();
+
+		return Double.toString(value);
+	}
+
+	/**
+	 * Habilita o deshabilita el control
+	 * @param en
+	 */
+	public void setControlEnabled(boolean en){
+		getJFormattedTextField().setEnabled(en);
+		if (en)
+			getJFormattedTextField().setBackground(Color.white);
+		else
+			getJFormattedTextField().setBackground(getBackground());
+	}
+
+	/**
+	 * Asigna el valor al campo de texto.
+	 * @return
+	 */
+	public void setValue(String value) {
+		eventsEnabled = false;
+		getJFormattedTextField().setValue(new Double(value));
+		eventsEnabled = true;
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(DataInputContainerListener listener) {
+		if (!actionChangedListeners.contains(listener))
+			actionChangedListeners.add(listener);
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addKeyListener(KeyListener listener) {
+		textField.addKeyListener(listener);
+	}
+	
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(DataInputContainerListener listener) {
+		actionChangedListeners.remove(listener);
+	}
+	
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueChangedListeners() {
+		if (eventsEnabled == false)
+			return;
+		Iterator acIterator = actionChangedListeners.iterator();
+		while (acIterator.hasNext()) {
+			DataInputContainerListener listener = (DataInputContainerListener) acIterator.next();
+			listener.actionValueChanged(new EventObject(this));
+		}
+	}
+
+	public void propertyChange(PropertyChangeEvent evt) {
+	  callValueChangedListeners();
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainerListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainerListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainerListener.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.datainput;
+
+import java.util.EventListener;
+import java.util.EventObject;
+/**
+ * 
+ * @version 06/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface DataInputContainerListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionValueChanged(EventObject e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/datainput/DataInputContainerListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/DefaultBean.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/DefaultBean.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/DefaultBean.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: DefaultBean.java 17327 2007-12-12 07:45:23Z bsanchez $
+* $Log$
+* Revision 1.2  2007-08-21 08:38:21  bsanchez
+* - Quitados warnings en imports innecesarios
+*
+* Revision 1.1  2007/08/20 08:34:45  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.4  2006/09/14 08:30:11  cesar
+* Remove static initialization of gvsig-i18n; it's done in the Messages class now
+*
+* Revision 1.3.2.1  2006/09/14 07:55:48  cesar
+* Remove static initialization of gvsig-i18n; it's done in the Messages class now
+*
+* Revision 1.3  2006/08/10 07:33:12  cesar
+* *** empty log message ***
+*
+* Revision 1.2  2006/07/11 12:42:10  cesar
+* Load properties for libUI
+*
+* Revision 1.1  2006/03/22 11:18:29  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/02/28 15:25:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2.2.3  2006/01/31 16:25:24  jaume
+* correcciones de bugs
+*
+* Revision 1.3  2006/01/26 16:07:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2.2.1  2006/01/26 12:59:32  jaume
+* 0.5
+*
+* Revision 1.2  2006/01/24 14:36:33  jaume
+* This is the new version
+*
+* Revision 1.1.2.3  2006/01/10 13:11:38  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2006/01/10 11:33:31  jaume
+* Time dimension working against Jet Propulsion Laboratory's WMS server
+*
+* Revision 1.1.2.1  2005/12/30 08:56:19  jaume
+* *** empty log message ***
+*
+*
+*/
+/**
+ *
+ */
+package org.gvsig.gui.beans;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.listeners.BeanListener;
+/**
+ * A JPanel with addListener(BeanListener l), removeListener(BeanListener l),
+ * and callValueChange(Object value) methods for adding and removing listeners,
+ * and firing BeanValueChange events.
+ *
+ * @author jaume
+ */
+public abstract class DefaultBean extends JPanel {
+	ArrayList<BeanListener> listeners = new ArrayList<BeanListener>();
+
+	public void addListener(BeanListener l) {
+		listeners.add(l);
+	}
+
+	public void removeListener(BeanListener l) {
+		listeners.remove(l);
+	}
+
+	public void callValueChanged(Object value) {
+		Iterator<BeanListener> i = listeners.iterator();
+
+		while (i.hasNext()) {
+			i.next().beanValueChanged(value);
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/DefaultBean.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/images/downright.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/images/downright.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/images/upleft.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/images/upleft.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesPanel.java	(revision 42196)
@@ -0,0 +1,361 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.coordinatespanel;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.border.TitledBorder;
+
+import org.gvsig.gui.beans.datainput.DataInputContainer;
+import org.gvsig.gui.beans.datainput.DataInputContainerListener;
+/**
+ * 
+ * @version 06/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+@SuppressWarnings("unchecked")
+public class CoordinatesPanel extends JPanel implements DataInputContainerListener {
+	private static final long  serialVersionUID       = 3336324382874763427L;
+	private String             pathToImages           = "images/";
+	private ArrayList          actionChangedListeners = new ArrayList();
+
+	private JPanel             pCoord                 = null;
+	private JLabel             lTitulo1               = null;
+	private JLabel             lTitulo2               = null;
+	private DataInputContainer dataInputContainer11   = null;
+	private DataInputContainer dataInputContainer12   = null;
+	private DataInputContainer dataInputContainer21   = null;
+	private DataInputContainer dataInputContainer22   = null;
+	private int                maximumFractionDigits  = 3;
+
+	/**
+	 * This is the default constructor
+	 */
+	public CoordinatesPanel(int maximumFractionDigits) {
+		this.maximumFractionDigits = maximumFractionDigits;
+		initialize();
+	}
+	
+	/**
+	 * This is the default constructor
+	 */
+	public CoordinatesPanel() {
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		setLayout(new BorderLayout());
+		add(getPCoord(), BorderLayout.CENTER);
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPCoord() {
+		if (pCoord == null) {
+			GridBagConstraints gridBagConstraints;
+			pCoord = new JPanel();
+			pCoord.setLayout(new GridBagLayout());
+
+			int y = 0;
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.insets = new Insets(5, 5, 2, 2);
+			pCoord.add(getLTitulo1(), gridBagConstraints);
+
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 1;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.weightx = 1.0;
+			gridBagConstraints.insets = new Insets(5, 2, 2, 2);
+			pCoord.add(getDataInputContainer11(), gridBagConstraints);
+
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 2;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.weightx = 1.0;
+			gridBagConstraints.insets = new Insets(5, 2, 2, 5);
+			pCoord.add(getDataInputContainer12(), gridBagConstraints);
+
+			y++;
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.insets = new Insets(2, 5, 5, 2);
+			pCoord.add(getLTitulo2(), gridBagConstraints);
+
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 1;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.weightx = 1.0;
+			gridBagConstraints.insets = new Insets(2, 2, 5, 2);
+			pCoord.add(getDataInputContainer21(), gridBagConstraints);
+
+
+			gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 2;
+			gridBagConstraints.gridy = y;
+			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.weightx = 1.0;
+			gridBagConstraints.insets = new Insets(2, 2, 5, 5);
+			pCoord.add(getDataInputContainer22(), gridBagConstraints);		
+		}
+		return pCoord;
+	}
+
+	private JLabel getLTitulo1(){
+		if (lTitulo1 == null){
+			URL resource = getClass().getResource(pathToImages + "upleft.png");
+			if(resource != null) {
+				ImageIcon icon = new ImageIcon(resource);
+				lTitulo1 = new JLabel(icon);
+			} else
+				lTitulo1 = new JLabel();
+		}
+		return lTitulo1;
+	}
+
+	private JLabel getLTitulo2() {
+		if (lTitulo2 == null){
+			if (lTitulo2 == null){
+				URL resource = getClass().getResource(pathToImages + "downright.png");
+				if(resource != null) {
+					ImageIcon icon = new ImageIcon(resource);
+					lTitulo2 = new JLabel(icon);
+				} else
+					lTitulo2 = new JLabel();
+			}
+		}
+		return lTitulo2;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public DataInputContainer getDataInputContainer11() {
+		if (dataInputContainer11 == null) {
+			dataInputContainer11 = new DataInputContainer(maximumFractionDigits);
+			dataInputContainer11.setLabelText("X");
+			dataInputContainer11.addValueChangedListener(this);
+		}
+		return dataInputContainer11;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public DataInputContainer getDataInputContainer12() {
+		if (dataInputContainer12 == null) {
+			dataInputContainer12 = new DataInputContainer(maximumFractionDigits);
+			dataInputContainer12.setLabelText("Y");
+			dataInputContainer12.addValueChangedListener(this);
+		}
+		return dataInputContainer12;
+	}
+
+	/**
+	 * This method initializes jPanel2
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public DataInputContainer getDataInputContainer21() {
+		if (dataInputContainer21 == null) {
+			dataInputContainer21 = new DataInputContainer(maximumFractionDigits);
+			dataInputContainer21.setLabelText("X");
+			dataInputContainer21.addValueChangedListener(this);
+		}
+		return dataInputContainer21;
+	}
+
+	/**
+	 * This method initializes jPanel3
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public DataInputContainer getDataInputContainer22() {
+		if (dataInputContainer22 == null) {
+			dataInputContainer22 = new DataInputContainer(maximumFractionDigits);
+			dataInputContainer22.setLabelText("Y");
+			dataInputContainer22.addValueChangedListener(this);
+		}
+		return dataInputContainer22;
+	}
+
+	/**
+	 * M�todo para poner un titulo al panel.
+	 * 
+	 * @param titlePanel
+	 */
+	public void setTitlePanel(String titlePanel) {
+		getPCoord().setBorder(BorderFactory.createTitledBorder(null, titlePanel, TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.PLAIN, 12), null));
+	}
+
+	/**
+	 * Devuelve los valores del panel por orden de izquierda a derecha
+	 * y de arriba a bajo.
+	 * @return
+	 */
+	public String[] getValues(){
+		String[] values = {
+			getDataInputContainer11().getValue(),
+			getDataInputContainer12().getValue(),
+			getDataInputContainer21().getValue(),
+			getDataInputContainer22().getValue()
+		};
+		return values;
+	}
+
+	/**
+	 * Asigna los valores del panel por orden de izquierda a derecha
+	 * y de arriba a bajo.
+	 * @return
+	 */
+	public void setValues(String[] values){
+		getDataInputContainer11().setValue(values[0]);
+		getDataInputContainer12().setValue(values[1]);
+		getDataInputContainer21().setValue(values[2]);
+		getDataInputContainer22().setValue(values[3]);
+	}
+	
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(CoordinatesListener listener) {
+		if (!actionChangedListeners.contains(listener))
+			actionChangedListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(CoordinatesListener listener) {
+		actionChangedListeners.remove(listener);
+	}
+	
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueChangedListeners(String component) {
+		Iterator acIterator = actionChangedListeners.iterator();
+		while (acIterator.hasNext()) {
+			CoordinatesListener listener = (CoordinatesListener) acIterator.next();
+			listener.actionValueChanged(new CoordinatesEvent(this, component));
+		}
+	}
+
+	public void actionValueChanged(EventObject e) {
+		if (e.getSource() == getDataInputContainer11().getDataInputField()) {
+			callValueChangedListeners("11");
+			return;
+		}
+		if (e.getSource() == getDataInputContainer12().getDataInputField()) {
+			callValueChangedListeners("12");
+			return;
+		}
+		if (e.getSource() == getDataInputContainer21().getDataInputField()) {
+			callValueChangedListeners("21");
+			return;
+		}
+		if (e.getSource() == getDataInputContainer22().getDataInputField()) {
+			callValueChangedListeners("22");
+			return;
+		}
+  }
+	
+	public String getValue11() {
+		return getDataInputContainer11().getValue();
+	}
+	
+	public String getValue12() {
+		return getDataInputContainer12().getValue();
+	}
+	
+	public String getValue21() {
+		return getDataInputContainer21().getValue();
+	}
+	
+	public String getValue22() {
+		return getDataInputContainer22().getValue();
+	}
+	
+	public void setValue11(String value) {
+		getDataInputContainer11().setValue(value);
+	}
+	
+	public void setValue12(String value) {
+		getDataInputContainer12().setValue(value);
+	}
+	
+	public void setValue21(String value) {
+		getDataInputContainer21().setValue(value);
+	}
+	
+	public void setValue22(String value) {
+		getDataInputContainer22().setValue(value);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+	  super.setEnabled(enabled);
+	  getPCoord().setEnabled(enabled);
+	  getLTitulo1().setEnabled(enabled);
+	  getLTitulo2().setEnabled(enabled);
+	  getDataInputContainer11().setControlEnabled(enabled);
+	  getDataInputContainer12().setControlEnabled(enabled);
+	  getDataInputContainer21().setControlEnabled(enabled);
+	  getDataInputContainer22().setControlEnabled(enabled);
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesEvent.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.coordinatespanel;
+
+import java.util.EventObject;
+/**
+ *
+ * @version 07/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class CoordinatesEvent extends EventObject {
+	private static final long serialVersionUID = -1649548367781607532L;
+	private String name = "";
+
+	public CoordinatesEvent(Object source, String component) {
+		super(source);
+		name = component;
+	}
+	
+	public String getName() {
+		return name;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesListener.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.coordinatespanel;
+
+import java.util.EventListener;
+/**
+ * 
+ * @version 06/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface CoordinatesListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionValueChanged(CoordinatesEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/coordinatespanel/CoordinatesListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableListener.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.util.EventListener;
+
+/**
+ * Interfaz para la ventana IncrementableTask, aqui se define los
+ * comportamientos de los botones de la ventana.
+ *
+ * @version 23/04/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface IncrementableListener extends EventListener {
+	/**
+	 * Invocado cuando se aprieta el boton Resumir de la ventana
+	 * @param e
+	 */
+	public void actionResumed(IncrementableEvent e);
+
+	/**
+	 * Invocado cuando se aprieta el boton Suspender de la ventana
+	 * @param e
+	 */
+	public void actionSuspended(IncrementableEvent e);
+
+	/**
+	 * Invocado cuando se aprieta el boton Cancelar de la ventana
+	 * @param e
+	 */
+	public void actionCanceled(IncrementableEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IIncrementable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IIncrementable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IIncrementable.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * 
+ *
+ * @version 20/08/2008
+ * 
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface IIncrementable {
+	/**
+	 * Devuelve el titulo de la ventana IncrementableTask
+	 * @return String
+	 */
+	public String getTitle();
+
+	/**
+	 * Devuelve el contenido del log de la ventana IncrementableTask
+	 * @return String
+	 */
+	public String getLog();
+
+	/**
+	 * Devuelve la etiqueta de la ventana IncrementableTask
+	 * @return String
+	 */
+	public String getLabel();
+	
+	/**
+	 * Devuelve el porcentaje de 0 a 100 de la ventana IncrementableTask
+	 * @return int
+	 */
+	public int getPercent();
+
+	/**
+	 * <p>Determines if this process can be canceled.</p>
+	 * 
+	 * @return <code>true</code> if this process can be canceled, otherwise <code>false</code>
+	 */
+	public boolean isCancelable();
+
+	/**
+	 * <p>Determines if this process can be paused.</p>
+	 * 
+	 * @return <code>true</code> if this process can be paused, otherwise <code>false</code>
+	 */
+	public boolean isPausable();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IIncrementable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancel.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+public class Cancel implements Cancellable {
+	private boolean cancel = false;
+
+	/**
+	 * Crea un nuevo CancelDraw.
+	 */
+	public Cancel() {
+	}
+
+	/**
+	 * Insertar si se debe cancelar el dibujado.
+	 * 
+	 * @param b
+	 *            true si se debe cancelar el dibujado.
+	 */
+	public void setCanceled(boolean b) {
+		cancel = b;
+	}
+
+	/**
+	 * @see com.iver.utiles.swing.threads.Cancellable#isCanceled()
+	 */
+	public boolean isCanceled() {
+		return cancel;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancellable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancellable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancellable.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+
+/**
+ * <p><code>Cancellable</code> interface is designed for adding support to notify that a task must be cancelled.</p>
+ * 
+ * <p>This is useful if a process is hung up, blocking, or simply if user wants cancel it, for instance, a
+ *  drawing process of a heavy layer.</p>
+ * 
+ * <p>The classes which implement this interface are force to share the canceling information, in order to be
+ *  notified about the current status of it. This implies a synchronous canceling process, that could be implemented by
+ *  another object.</p>
+ */
+public interface Cancellable {
+	/**
+	 * <p>Determines if the related task must be canceled.</p>
+	 * 
+	 * @return <code>true</code> if task must been canceled; otherwise <code>false</code>
+	 * 
+	 * @see #setCanceled(boolean)
+	 */
+	boolean isCanceled();
+
+	/**
+	 * <p>Sets if the related task must be canceled.</p>
+	 * 
+	 * @param canceled <code>true</code> if the task must be canceled; otherwise <code>false</code>
+	 * 
+	 * @see #isCanceled()
+	 */
+	void setCanceled(boolean canceled);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/Cancellable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableProcess.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableProcess.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableProcess.java	(revision 42196)
@@ -0,0 +1,423 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.progresspanel.LogControl;
+
+/**
+ * Process to be executed by an {@link IncrementableTask IncrementableTask}.
+ * 
+ * @version 20/08/2008
+ * 
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ * @deprecated use org.gvsig.tools.task.AbstractMonitorableTask
+ *             http://blog.gvsig.org/2012/08/07/hilos-y-gvsig-1
+ */
+public abstract class IncrementableProcess implements IIncrementable, IncrementableListener, Runnable {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(IncrementableProcess.class);
+
+	protected IncrementableTask 	iTask	 		= null;
+	protected LogControl 			log		 		= new LogControl();
+	protected int 					percentage		= 0;
+	protected boolean 				ended			= false;
+	protected volatile boolean		threadSuspended = false;
+	protected volatile Thread 		blinker			= null;
+	protected long 					t0 				= 0;
+	protected static Cancellable 	cancelProcess 	= null;
+	protected boolean 				isCancellable 	= true;
+	protected boolean 				isPausable	 	= false;
+	
+
+	protected String 				title 			= "";
+	protected String 				label 			= "";
+
+	/**
+	 * Creates a new process.
+	 * 
+	 * @param title title for the dialog that displays the evolution of the process
+	 */
+	public IncrementableProcess(String title) {
+		super();
+		this.title = title;
+		this.cancelProcess = new Cancel();
+	}
+
+	/**
+	 * Creates a new process.
+	 * 
+	 * @param title title for the dialog that displays the evolution of the process
+	 * @param label brief of this process, that will be displayed in the dialog
+	 */
+	public IncrementableProcess(String title, String label) {
+		super();
+		this.title = title;
+		this.label = label;
+		this.cancelProcess = new Cancel();
+	}
+
+	/**
+	 * Creates a new process.
+	 * 
+	 * @param title title for the dialog that displays the evolution of the process
+	 * @param label brief of this process, that will be displayed in the dialog
+ 	 * @param cancellable determines if this process can be canceled
+ 	 * @param pausable determines if this process can be paused
+	 */
+	public IncrementableProcess(String title, String label, boolean cancellable, boolean pausable) {
+		super();
+		this.title = title;
+		this.label = label;
+		this.cancelProcess = new Cancel();
+		this.isCancellable = cancellable;
+		this.isPausable = pausable;
+	}
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getTitle()
+	 */
+	public String getTitle() {
+		return title;
+	}
+
+	/**
+	 * Adds a new line to the log.
+	 * 
+	 * @param line
+	 *            the line to add
+	 */
+	protected void insertLineLog(String line) {
+		log.addLine(line);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLabel()
+	 */
+	public String getLabel() {
+		return label;
+	}
+
+	/**
+	 * <p>Sets a brief of the current subprocess.</p>
+	 * 
+	 * @param label brief of the current subprocess
+	 */
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLog()
+	 */
+	public String getLog() {
+		return log.getText();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getPercent()
+	 */
+	public int getPercent() {
+		if (percentage > 100)
+			percentage = 100;
+
+		if (percentage == 100)
+			ended = true;
+
+		return percentage;
+	}
+
+	/**
+	 * Creates and starts a new thread to execute this importation process.
+	 * 
+	 * @see Thread#start()
+	 * @see #stop()
+	 */
+	public void start() {
+		blinker = new Thread(this);
+		blinker.start();
+	}
+
+	/**
+	 * @see Thread#stop()
+	 * @see #start()
+	 */
+	public synchronized void stop() {
+		ended = true;
+		blinker = null;
+		notify();
+	}
+
+	/**
+	 * @see Thread#isAlive()
+	 * @see #start()
+	 */
+	public boolean isAlive() {
+		return blinker.isAlive();
+	}
+
+	/**
+	 * Ends the thread that displays the progress dialog with the evolution of
+	 * the loading process.
+	 * 
+	 * @see IncrementableTask#processFinalize()
+	 */
+	protected void processFinalize() {
+		iTask.processFinalize();
+	}
+
+	/**
+	 * Sets the object that will display the evolution of this loading process
+	 * as a progress dialog.
+	 * 
+	 * @param iTask
+	 *            the object that will display the evolution of this loading
+	 *            process
+	 */
+	public void setIncrementableTask(IncrementableTask iTask) {
+		this.iTask = iTask;
+		iTask.setAskCancel(true);
+		iTask.getButtonsPanel().addAccept();
+		iTask.getButtonsPanel().setEnabled(ButtonsPanel.BUTTON_ACCEPT, false);
+
+		JButton jButton = iTask.getButtonsPanel().getButton(
+				ButtonsPanel.BUTTON_ACCEPT);
+		jButton.addMouseListener(new MouseAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+			 */
+			public void mouseClicked(MouseEvent e) {
+				processFinalize();
+			}
+		});
+	}
+
+	/**
+	 * Determines if this thread has been suspended.
+	 * 
+	 * @return <code>true</code> if this thread has been suspended; otherwise <code>false</code>
+	 */
+	public boolean isSuspended() {
+		return threadSuspended;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Runnable#run()
+	 */
+	public void run() {
+		String text = null;
+
+		try {
+			process();
+			while (! ended) {
+				t0 += 500;
+                Thread.currentThread().sleep(150);
+			}
+		} catch (Exception ie) {
+			if (! cancelProcess.isCanceled()) {
+                LOG.error("", ie);
+				label = Messages.getText("Process_failed");
+				iTask.getProgressPanel().setLabel(label);
+				text = Messages.getText("Failed_the_process");
+			}
+			else {
+				label = Messages.getText("Process_canceled");
+				iTask.getProgressPanel().setLabel(label);
+				text = Messages.getText("Process_canceled");
+			}
+		}
+		finally {
+			iTask.setAskCancel(false);
+			iTask.getButtonsPanel().setEnabled(ButtonsPanel.BUTTON_ACCEPT, true);
+			iTask.getButtonsPanel().setEnabled(ButtonsPanel.BUTTON_CANCEL, false);
+
+			if (text != null) {
+				log.addLine(Messages.getText("Percent") + ": " + getPercent());
+				log.addLine(text);
+				
+				if (cancelProcess.isCanceled())
+					JOptionPane.showMessageDialog(iTask.getButtonsPanel(), text, Messages.getText("Information"), JOptionPane.INFORMATION_MESSAGE);
+				else
+					JOptionPane.showMessageDialog(iTask.getButtonsPanel(), text, Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+			}
+			
+			if (percentage == 100) {
+				label = Messages.getText("Process_finished");
+				iTask.getProgressPanel().setLabel(label);
+//				iTask.getProgressPanel().setPercent(100); // Forces setting the progress bar at 100 %
+			}
+
+			// Ends this process
+			ended = true;
+			
+			// Ends the progress panel
+			iTask.stop();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionCanceled(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
+	 */
+	public void actionCanceled(IncrementableEvent e) {
+		if (percentage < 100) {
+			// If was cancelled
+			if (ended == true)
+				processFinalize();
+
+			if (isCancellable)
+				cancelProcess.setCanceled(true);
+			else
+				JOptionPane.showMessageDialog(null, Messages.getText("The_process_cant_be_cancelled"), Messages.getText("Warning"), JOptionPane.WARNING_MESSAGE);
+		}
+		else {
+            LOG.warn(Messages.getText("Process_finished_wont_be_cancelled"));
+
+			processFinalize();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionResumed(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
+	 */
+	public void actionResumed(IncrementableEvent e) {
+//		if (isPausable)
+//			resume();
+		if ((isPausable) && (threadSuspended)) {
+			threadSuspended = false;
+	
+			blinker.resume();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionSuspended(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
+	 */
+	public void actionSuspended(IncrementableEvent e) {
+		try {
+			if (isPausable) {
+				if ( ! threadSuspended) {
+					threadSuspended = true;
+			
+					blinker.suspend();
+				}
+			}
+			
+			
+//			if (isPausable)
+//				suspend();
+			else
+				JOptionPane.showMessageDialog(null, Messages.getText("The_process_cant_be_paused"), Messages.getText("Warning"), JOptionPane.WARNING_MESSAGE);
+		}
+		catch (Exception iex) {
+            LOG.error("", iex);
+			JOptionPane.showMessageDialog(null, Messages.getText("Failed_pausing_the_process"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#isCancelable()
+	 */
+	public boolean isCancelable() {
+		return isCancellable;
+	}
+
+	/**
+	 * <p>Sets if this process can be canceled.</p>
+	 * 
+	 * @param b <code>true</code> if this process can be canceled, otherwise <code>false</code>
+	 */
+	public void setCancelable(boolean b) {
+		isCancellable = b;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#isPausable()
+	 */
+	public boolean isPausable() {
+		return isPausable;
+	}
+
+	/**
+	 * <p>Sets if this process can be paused.</p>
+	 * 
+	 * @param b <code>true</code> if this process can be paused, otherwise <code>false</code>
+	 */
+	public void setPausable(boolean b) {
+		isPausable = b;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#process()
+	 */
+	public abstract void process() throws InterruptedException, Exception;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableProcess.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableEvent.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.util.EventObject;
+/**
+ * Se utiliza para poder definir que acci�n esta ocurriendo en un momento dado
+ * en la ventana IncrementableTask
+ *
+ * @version 23/04/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class IncrementableEvent extends EventObject {
+	private static final long serialVersionUID = 75795297813891036L;
+
+	/**
+	 * Definir si la acci�n que esta ocurriendo es la de resumir.
+	 */
+	public static final int RESUMED = 1;
+
+	/**
+	 * Definir si la acci�n que esta ocurriendo es la de suspender
+	 */
+	public static final int SUSPENDED = 2;
+
+	/**
+	 * Definir si la acci�n que esta ocurriendo es la de cancelar.
+	 */
+	public static final int CANCELED = 3;
+
+	/**
+	 * Constructor de IncrementableEvent
+	 * @param source
+	 */
+	public IncrementableEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableTask.java	(revision 42196)
@@ -0,0 +1,366 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.incrementabletask;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+import org.gvsig.gui.beans.progresspanel.ProgressPanel;
+
+/**
+ * <code>IncrementableTask</code>. Es un dialogo que contiene un ProgressPanel.
+ * Se ejecuta bajo un Thread y va consultando a un objeto de tipo IIncrementable
+ * para modificar sus valores.
+ *
+ * @version 20/08/2008
+ *
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class IncrementableTask implements Runnable, ButtonsPanelListener {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(IncrementableTask.class);
+
+	IIncrementable                            iIncrementable         = null;
+	private volatile ProgressPanel            progressPanel          = null;
+	private volatile Thread                   blinker                = null;
+	private boolean                           threadSuspended        = false;
+	private boolean                           ended                  = false;
+	private boolean                           askOnCancel            = true;
+	private ArrayList<IncrementableListener>  actionCommandListeners = new ArrayList<IncrementableListener>();
+	private boolean                           bDoCallListeners       = true;
+	static private int                        eventId                = Integer.MIN_VALUE;
+	
+	/**
+	 * Constructor del IncrementableTask.
+	 * @param incrementable
+	 */
+	public IncrementableTask(IIncrementable incrementable, ProgressPanel dialog) {
+		iIncrementable = incrementable;
+		progressPanel = dialog;
+		configureProgressPanel();
+	}
+	
+	/**
+	 * Constructor del IncrementableTask.
+	 * @param incrementable
+	 */
+	public IncrementableTask(IIncrementable incrementable) {
+		iIncrementable = incrementable;
+		configureProgressPanel();
+	}
+
+	/**
+	 * Inicio del thread para que la ventana vaya consultando por si sola al
+	 * iIncrementable
+	 */
+	public void start() {
+		blinker = new Thread(this);
+		blinker.start();
+	}
+
+	/**
+	 * Detiene el proceso de consulta de la ventana.
+	 */
+	public void stop() {
+		ended = true;
+	}
+	
+	/**
+	 * Este thread va leyendo el porcentaje hasta que se completa el histograma.
+	 */
+	public synchronized void run() {
+//		while (!ended && (iIncrementable.getPercent() <= 100)) {
+		while (! ended) {
+			try {
+				getProgressPanel().setLabel(iIncrementable.getLabel());
+				getProgressPanel().setPercent(iIncrementable.getPercent());
+				getProgressPanel().setTitle(iIncrementable.getTitle());
+				getProgressPanel().setLog(iIncrementable.getLog());
+				Thread.sleep(100);
+				synchronized (this) {
+					while (threadSuspended && !ended)
+						wait(500);
+				}
+			} catch (InterruptedException e) {
+			}
+		}
+		
+		// Forces to refresh the log with the last changes
+		getProgressPanel().setLog(iIncrementable.getLog());
+	}
+
+	/**
+	 * Termina el proceso de lectura de porcentajes y logs de la ventana y
+	 * cierra esta.
+	 */
+	public void processFinalize() {
+		stop();
+		while (isAlive());
+		hide();
+	}
+
+	/**
+	 * Ocultar la ventana y parar el proceso
+	 */
+	private void hide() {
+		hideWindow();
+		progressPanel = null;
+		blinker = null;
+	}
+	
+	/**
+	 * Ocultar la ventana
+	 */
+	public void hideWindow() {
+//		getProgressPanel().dispose();
+		getProgressPanel().setVisible(false);
+	}
+
+	/**
+	 * Devuelve un booleano indicando si esta activa la ventana.
+	 * @return boolean
+	 */
+	public boolean isAlive() {
+		if (blinker == null)
+			return false;
+		return blinker.isAlive();
+	}
+
+	/**
+	 * Muestra la ventana de incremento con el porcentaje de la construcci�n del
+	 * histograma.
+	 */
+	public void showWindow() {
+		getProgressPanel().setTitle(iIncrementable.getTitle());
+		getProgressPanel().showLog(false);
+		getProgressPanel().setVisible(true);
+	}
+
+	/**
+	 * Devuelve el componente ProgressPanel de la ventana incrementable.
+	 * @return ProgressPanel
+	 */
+	public ProgressPanel getProgressPanel() {
+		if (progressPanel == null) {
+			progressPanel = new ProgressPanel(false);
+		}
+		return progressPanel;
+	}
+	
+	protected void configureProgressPanel() {
+		getProgressPanel().setAlwaysOnTop(true);
+		getProgressPanel().addButtonPressedListener(this);
+		
+		// Must ask if user wants to cancel the process, avoid closing the dialog
+		getProgressPanel().setDefaultCloseOperation( JDialog.DO_NOTHING_ON_CLOSE );
+		getProgressPanel().addWindowListener(new WindowAdapter() {
+			public void windowClosing(WindowEvent e) {
+				// Simulates an event like the produced pressing the cancel button of the associated progress panel
+				actionButtonPressed(new ButtonsPanelEvent(getProgressPanel(), ButtonsPanel.BUTTON_CANCEL));				
+			}
+		});
+	}
+
+	private void callActionCommandListeners(int actions) {
+		if (!bDoCallListeners)
+			return;
+		Iterator<IncrementableListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			IncrementableListener listener = (IncrementableListener) acIterator.next();
+			switch (actions) {
+				case IncrementableEvent.RESUMED:
+					listener.actionResumed(new IncrementableEvent(this));
+					break;
+				case IncrementableEvent.SUSPENDED:
+					listener.actionSuspended(new IncrementableEvent(this));
+					break;
+				case IncrementableEvent.CANCELED:
+					listener.actionCanceled(new IncrementableEvent(this));
+					break;
+			}
+		}
+		eventId++;
+	}
+
+	/**
+	 * A�adir el manejador de eventos para atender las peticiones de start,
+	 * stop...
+	 *
+	 * @param listener
+	 */
+	public void addIncrementableListener(IncrementableListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un manejador de eventos.
+	 * @param listener
+	 */
+	public void removeIncrementableListener(IncrementableListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	/**
+	 * Definir si queremos que confirme al usuario si realmente desea cancelar el
+	 * proceso
+	 *
+	 * @param value
+	 */
+	public void setAskCancel(boolean value) {
+		askOnCancel = value;
+	}
+
+	/**
+	 * Metodo para gestionar todos los eventos del objeto.
+	 */
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		switch (e.getButton()) {
+			case ButtonsPanel.BUTTON_CANCEL:
+				boolean cancelled = true;
+				if (askOnCancel) {
+					if (! iIncrementable.isCancelable()) {
+						JOptionPane.showMessageDialog(null, Messages.getText("The_process_cant_be_cancelled"), Messages.getText("Information"), JOptionPane.INFORMATION_MESSAGE);
+						return;
+					}
+
+					/* Pauses the process */
+					if (iIncrementable.isPausable()) {
+						try {
+							callActionCommandListeners(IncrementableEvent.SUSPENDED);
+						}
+						catch (Exception iex) {
+                        LOG.error("", iex);
+							JOptionPane.showMessageDialog(null, Messages.getText("Failed_pausing_the_process"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+						}
+					}
+	
+					/* Asks user to cancel or not the process */
+					cancelled = false;
+					String string1 = Messages.getText("Yes");
+					String string2 = Messages.getText("No");
+					Object[] options = { string1, string2 };
+					int answer = JOptionPane.showOptionDialog(getProgressPanel(), Messages
+							.getText("msg_cancel_incrementable"), Messages
+							.getText("title_cancel_incrementable"),
+							JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
+							options, string1);
+					if (answer == JOptionPane.YES_OPTION) {
+						cancelled = true;
+
+						/* Continues the process */
+						try {
+							if (iIncrementable.isPausable())
+								callActionCommandListeners(IncrementableEvent.RESUMED);
+						} catch (Exception e2) {
+                        LOG.error("", e2);
+							Messages.getText("Failed_resuming_the_process");
+						}
+					}
+					else {
+						/* Continues the process */
+						try {
+							if (iIncrementable.isPausable())
+								callActionCommandListeners(IncrementableEvent.RESUMED);
+						} catch (Exception e2) {
+                        LOG.error("", e2);
+							Messages.getText("Failed_resuming_the_process");
+						}
+					}
+				}
+				if (cancelled) {
+//					ended = true;
+					// Will wait the process to finish and notify this to stop
+					callActionCommandListeners(IncrementableEvent.CANCELED);
+				}
+				break;
+			case ButtonsPanel.BUTTON_PAUSE:
+				threadSuspended = true;
+
+				/* Pauses the associated process */
+				try {
+					if (! iIncrementable.isPausable()) {
+						JOptionPane.showMessageDialog(null, Messages.getText("The_process_cant_be_paused"), Messages.getText("Information"), JOptionPane.INFORMATION_MESSAGE);
+					}
+					else {
+						callActionCommandListeners(IncrementableEvent.SUSPENDED);
+					}
+				}
+				catch (Exception iex) {
+                LOG.error("", iex);
+					JOptionPane.showMessageDialog(null, Messages.getText("Failed_pausing_the_process"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+				}
+
+				break;
+			case ButtonsPanel.BUTTON_RESTART:
+				threadSuspended = false;
+
+				/* Resumes the associated process */
+				callActionCommandListeners(IncrementableEvent.RESUMED);
+				break;
+		}
+	}
+
+	/**
+	 * @see ProgressPanel#getButtonsPanel()
+	 */
+	public ButtonsPanel getButtonsPanel() {
+		return getProgressPanel().getButtonsPanel();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/incrementabletask/IncrementableTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ItemColorSlider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ItemColorSlider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ItemColorSlider.java	(revision 42196)
@@ -0,0 +1,168 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.colorslideredition;
+
+import java.awt.Color;
+/**
+ * 
+ * @version 26/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ItemColorSlider {
+	private double value = 0;
+	private double interpolated = 50; // Atencion, es la interpolacion izquierda
+	private Color color = Color.black;
+	private boolean visible = true;
+	private String name = "";
+	private Object tag = null;
+
+	/**
+	 * Seleted:
+	 * -1: No seleccionado
+	 * 1: Seleccionado el item
+	 * 2: Seleccionado la interpolacion izquierda
+	 */
+	private int selected = -1;
+
+	public ItemColorSlider(double value, Color color) {
+		setValue(value);
+		setColor(color);
+	}
+
+	/**
+	 * @return the color
+	 */
+	public Color getColor() {
+		return color;
+	}
+
+	/**
+	 * @param color the color to set
+	 */
+	public void setColor(Color color) {
+		this.color = color;
+	}
+
+	/**
+	 * @return the interpolation
+	 */
+	public double getInterpolated() {
+		return interpolated;
+	}
+
+	/**
+	 * @param interpolation the interpolation to set
+	 */
+	public void setInterpolated(double interpolation) {
+		this.interpolated = interpolation;
+		if (this.interpolated < 5)
+			this.interpolated = 5;
+		if (this.interpolated > 95)
+			this.interpolated = 95;
+	}
+
+	/**
+	 * @return the value
+	 */
+	public double getValue() {
+		return value;
+	}
+
+	/**
+	 * @param value the value to set
+	 */
+	public void setValue(double value) {
+		this.value = value;
+		if (this.value < 0)
+			this.value = 0;
+		if (this.value > 100)
+			this.value = 100;
+	}
+
+	/**
+	 * @return the visible
+	 */
+	public boolean isVisible() {
+		return visible;
+	}
+
+	/**
+	 * @param visible the visible to set
+	 */
+	public void setVisible(boolean visible) {
+		this.visible = visible;
+	}
+
+	/**
+	 * @return the selected
+	 */
+	public int getSelected() {
+		return selected;
+	}
+
+	/**
+	 * @param selected the selected to set
+	 */
+	public void setSelected(int selected) {
+		switch (selected) {
+			case 1:
+			case 2:
+				this.selected = selected;
+				break;
+			default:
+				this.selected = -1;
+				break;
+		}
+	}
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * Obtiene el campo extra de cada elemento
+	 * @return
+	 */
+	public Object getTag() {
+  	return tag;
+  }
+
+	/**
+	 * Especifica un campo extra a cada elemento
+	 * @param tag
+	 */
+	public void setTag(Object tag) {
+  	this.tag = tag;
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ItemColorSlider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEvent.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.colorslideredition;
+
+import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
+
+public class ColorSliderEvent extends SliderEvent {
+	private static final long serialVersionUID = -684281519921935004L;
+
+	public ColorSliderEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderListener.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.colorslideredition;
+
+import java.util.EventListener;
+
+public interface ColorSliderListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el item seleccionado.
+	 * @param e
+	 */
+	public void actionSelectionChanged(ColorSliderEvent e);
+
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente mientras se
+	 * hace un dragged con el rat�n.
+	 * @param e
+	 */
+	public void actionValueDragged(ColorSliderEvent e);
+
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionValueChanged(ColorSliderEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEdition.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEdition.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEdition.java	(revision 42196)
@@ -0,0 +1,699 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.colorslideredition;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Polygon;
+import java.awt.Shape;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JComponent;
+/**
+ * <code>DoubleSlider</code> representa un componente que tiene dos
+ * deslizadores. Se puede definir un m�ximo y un m�nimo.
+ *
+ * @version 04/05/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ColorSliderEdition extends JComponent implements MouseListener, MouseMotionListener {
+	private static final long serialVersionUID = 663355422780987493L;
+
+	private ArrayList<ColorSliderListener> actionCommandListeners   = new ArrayList<ColorSliderListener>();
+	private ArrayList<ColorSliderListener> actionSelectionListeners = new ArrayList<ColorSliderListener>();
+	private ArrayList<ItemColorSlider>     items                    = new ArrayList<ItemColorSlider>();
+
+	private final int LEFT_PAD       = 3;
+	private final int RIGHT_PAD      = 3;
+
+	private Image     bufferImage    = null;
+	private int       width          = 0;
+	private int       height         = 0;
+	private Graphics  bufferGraphics = null;
+	private boolean   interpolated   = true;
+
+	/**
+	 * Crea un DoubleSlider con las opciones por defecto.
+	 */
+	public ColorSliderEdition() {
+		this.setPreferredSize(new Dimension(100, 46));
+		addMouseListener(this);
+		addMouseMotionListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#addNotify()
+	 */
+	public void addNotify() {
+		super.addNotify();
+
+		refreshImage();
+	}
+
+	public void addItem(ItemColorSlider value) {
+		addItem(value, true);
+	}
+
+	public void addItem(ItemColorSlider value, boolean repaint) {
+		items.add(value);
+		if (repaint)
+			refreshImage();
+	}
+
+	/**
+	 * Devuelve un color de interpolacion entre dos colores
+	 * @param value
+	 * @param pos
+	 * @return
+	 */
+	private Color interpolatedColor(ArrayList newItems, double value, int pos) {
+		if (newItems.size() <= 0)
+			return Color.black;
+
+		if ((pos + 1) == newItems.size())
+			return ((ItemColorSlider) newItems.get(pos)).getColor();
+
+		if (value <= ((ItemColorSlider) newItems.get(0)).getValue())
+			return ((ItemColorSlider) newItems.get(0)).getColor();
+
+		ItemColorSlider item1 = (ItemColorSlider) newItems.get(pos);
+		ItemColorSlider item2 = (ItemColorSlider) newItems.get(pos + 1);
+
+		double percValue = ((value - item1.getValue()) * 100) / (item2.getValue() - item1.getValue());
+
+		Color halfColor = new Color(
+				(item2.getColor().getRed() + item1.getColor().getRed()) >> 1,
+				(item2.getColor().getGreen() + item1.getColor().getGreen()) >> 1,
+				(item2.getColor().getBlue() + item1.getColor().getBlue()) >> 1,
+				(item2.getColor().getAlpha() + item1.getColor().getAlpha()) >> 1);
+
+		Color color1, color2;
+		double perc1, perc2;
+
+		if (percValue > item2.getInterpolated()) {
+			color1 = halfColor;
+			color2 = item2.getColor();
+			perc1 = item2.getInterpolated();
+			perc2 = 100;
+		} else {
+			color1 = item1.getColor();
+			color2 = halfColor;
+			perc1 = 0;
+			perc2 = item2.getInterpolated();
+		}
+
+		double percNew = (percValue - perc1) / (perc2 - perc1);
+
+		Color newColor = new Color(
+				(int) (color1.getRed() + ((color2.getRed() - color1.getRed()) * percNew)) & 0xff,
+				(int) (color1.getGreen() + ((color2.getGreen() - color1.getGreen()) * percNew)) & 0xff,
+				(int) (color1.getBlue() + ((color2.getBlue() - color1.getBlue()) * percNew)) & 0xff,
+				(int) (color1.getAlpha() + ((color2.getAlpha() - color1.getAlpha()) * percNew)) & 0xff);
+
+
+		return newColor;
+	}
+
+	/**
+	 * Crea un graphics con las dimensiones del componente si no estaba creado y
+	 * lo devuelve para poder usarlo para dibujar en �l.
+	 * @return Graphics
+	 */
+	private Graphics getBufferGraphics() {
+		int width2 = getBounds().width;
+		int height2 = getBounds().height;
+		if (width2 <= 0)
+			width2 = 1;
+		if (height2 <= 0)
+			height2 = 1;
+
+		if ((width != width2) || (height != height2)) {
+			bufferImage = createImage(width2, height2);
+			if (bufferImage == null)
+				return null;
+			bufferGraphics = bufferImage.getGraphics();
+		}
+
+		width = width2;
+		height = height2;
+
+		return bufferGraphics;
+	}
+
+	private void sortItems() {
+		for (int i = 0; i < items.size(); i++) {
+			for (int j = i + 1; j < items.size(); j++) {
+				if (items.get(j).getValue() < items.get(i).getValue()) {
+					ItemColorSlider aux = items.get(i);
+					items.set(i, items.get(j));
+					items.set(j, aux);
+				}
+			}
+		}
+	}
+
+	private int getPosForValue(double value, ArrayList newArray) {
+		int pos = 0;
+		for (int j = 1; j <= newArray.size(); j++) {
+			if (j < newArray.size()) {
+				if (value < ((ItemColorSlider) newArray.get(j)).getValue()) {
+					pos = j - 1;
+					break;
+				}
+			} else {
+				pos = j - 1;
+				break;
+			}
+		}
+		return pos;
+	}
+
+	/**
+	 * Convierte a gris y aclara el color si esta inactivo el componente, en caso
+	 * contrario devuelve el color tal cual
+	 */
+	private Color convertColor(Color value) {
+		if (isEnabled())
+			return value;
+
+		int aux = (value.getRed() + value.getGreen() + value.getBlue()) / 3;
+
+		aux = (int) ((aux * 91.0 / 255.0) + 164.0);
+
+		return new Color(aux, aux, aux, value.getAlpha());
+	}
+
+	/**
+	 * Redibujar el componente en el graphics temporal
+	 */
+	private void redrawBuffer() {
+		if (getBufferGraphics() == null)
+			return;
+
+		sortItems();
+
+		getBufferGraphics().setColor(this.getBackground());
+
+		getBufferGraphics().fillRect(0, 0, width, height);
+
+		getBufferGraphics().setColor(Color.black);
+		getBufferGraphics().drawRect(LEFT_PAD, 0, width - 1 - LEFT_PAD - RIGHT_PAD, height - 18);
+
+		Shape oldClip = getBufferGraphics().getClip();
+		getBufferGraphics().setClip(LEFT_PAD + 2, 2, width - 4 - LEFT_PAD - RIGHT_PAD, height - 21);
+		for (int i = 0; (i * 4 + 2) <= (width - 3 - LEFT_PAD - RIGHT_PAD); i++) {
+			for (int j = 0; (j * 4 + 2) <= (height - 20); j++) {
+				if ((i + j) % 2 == 0)
+					getBufferGraphics().setColor(Color.white);
+				else
+					getBufferGraphics().setColor(new Color(204, 204, 204));
+				getBufferGraphics().fillRect(i * 4 + 2 + LEFT_PAD, j * 4 + 2, 4, 4);
+			}
+		}
+		Color newColor = Color.black;
+
+		ArrayList<ItemColorSlider> newArray = getItemsShowed();
+
+		for (int i = LEFT_PAD + 2; i <= width - 2 - RIGHT_PAD; i++) {
+			int pos = getPosForValue(pixelToValue(i), newArray);
+
+			if (isInterpolated()) {
+				newColor = interpolatedColor(newArray, pixelToValue(i), pos);
+			} else {
+				if ((pos + 1) < newArray.size()) {
+					double min = newArray.get(pos).getValue();
+					double max = newArray.get(pos + 1).getValue();
+					if ((min + ((max - min) * newArray.get(pos + 1).getInterpolated() / 100)) < pixelToValue(i))
+						pos++;
+				}
+				if (pos < newArray.size())
+					newColor = newArray.get(pos).getColor();
+			}
+			if (newColor != null) {
+				getBufferGraphics().setColor(convertColor(newColor));
+				getBufferGraphics().drawLine(i, 2, i, height - 18);
+			}
+		}
+
+		getBufferGraphics().setClip(oldClip);
+
+		boolean paintNext = false;
+		for (int i = 0; i < items.size(); i++) {
+			ItemColorSlider aux = items.get(i);
+			if (!aux.isVisible())
+				continue;
+			// Dibujar los deslizadores de la interpolacion
+			if (aux.getSelected() != -1)
+				paintNext = true;
+			if (paintNext && isEnabled()) {
+				if (i != 0) {
+					double value = items.get(i - 1).getValue() + ((items.get(i).getValue() - items.get(i - 1).getValue()) * items.get(i).getInterpolated() / 100);
+
+					drawSliderInterpolation(valueToPixel(value), height - 17, aux.getColor(), (aux.getSelected() == 2));
+				}
+				paintNext = false;
+			}
+			if (aux.getSelected() == 1)
+				paintNext = true;
+		}
+
+		for (int i = items.size() - 1; i >= 0; i--) {
+			ItemColorSlider aux = items.get(i);
+			if (!aux.isVisible())
+				continue;
+			drawSliderColor(valueToPixel(aux.getValue()), height - 17, convertColor(aux.getColor()), (aux.getSelected() == 1) && (isEnabled()));
+		}
+	}
+
+	/**
+	 * Convierte un porcentaje al valor pixel en X
+	 * @param value
+	 * @return
+	 */
+	private int valueToPixel(double value) {
+		if (value < 0)
+			value = 0;
+		if (value > 100)
+			value = 100;
+		return (int) (((width - 5 - LEFT_PAD - RIGHT_PAD) * value) / 100) + 2 + LEFT_PAD;
+	}
+
+	/**
+	 * Convierte un valor en X en porcentaje
+	 * @param value
+	 * @return
+	 */
+	private double pixelToValue(int value) {
+		double aux = value - LEFT_PAD - 1;
+		return (aux * 100.0f) / (width - LEFT_PAD - RIGHT_PAD - 4.0f);
+	}
+
+	/**
+	 * Dibujar un triangulo, un triangulo es un deslizador del componente. Puedes
+	 * indicarle que color tendra y en que posici�n estar�.
+	 * @param x
+	 * @param color
+	 */
+	private void drawSliderColor(int x, int y, Color color, boolean isSelected) {
+		if (color == null)
+			return;
+		Polygon p = new Polygon();
+		p.addPoint(x, y);
+		p.addPoint(x - 5, y + 6);
+		p.addPoint(x - 5, y + 16);
+		p.addPoint(x + 5, y + 16);
+		p.addPoint(x + 5, y + 6);
+		if (!isSelected) {
+			getBufferGraphics().setColor(this.getBackground());
+			getBufferGraphics().fillPolygon(p);
+			getBufferGraphics().setColor(new Color(172, 168, 153));
+			getBufferGraphics().drawLine(x + 1, y + 2, x + 4, y + 6);
+			getBufferGraphics().drawLine(x - 4, y + 6, x + 4, y + 6);
+		} else {
+			getBufferGraphics().setColor(Color.black);
+			getBufferGraphics().fillPolygon(p);
+		}
+
+		getBufferGraphics().setColor(Color.black);
+		getBufferGraphics().drawPolygon(p);
+
+		getBufferGraphics().setColor(new Color(172, 168, 153));
+		getBufferGraphics().drawLine(x - 3, y + 15, x + 4, y + 15);
+		getBufferGraphics().drawLine(x + 4, y + 8, x + 4, y + 15);
+
+		getBufferGraphics().setColor(Color.white);
+		getBufferGraphics().drawLine(x - 4, y + 7, x - 4, y + 15);
+		getBufferGraphics().drawLine(x - 4, y + 7, x + 4, y + 7);
+
+		getBufferGraphics().setColor(new Color(color.getRed(), color.getGreen(), color.getBlue()));
+		getBufferGraphics().fillRect(x - 3, y + 8, 7, 7);
+	}
+
+	/**
+	 * Dibujar un triangulo, un triangulo es un deslizador del componente. Puedes
+	 * indicarle que color tendra y en que posici�n estar�.
+	 * @param x
+	 * @param color
+	 */
+	private void drawSliderInterpolation(int x, int y, Color color, boolean isSelected) {
+		Polygon p = new Polygon();
+		p.addPoint(x, y);
+		p.addPoint(x - 3, y + 3);
+		p.addPoint(x, y + 6);
+		p.addPoint(x + 3, y + 3);
+		if (isSelected)
+			getBufferGraphics().setColor(new Color(color.getRed(), color.getGreen(), color.getBlue()));
+		else
+			getBufferGraphics().setColor(this.getBackground());
+
+		getBufferGraphics().fillPolygon(p);
+
+		getBufferGraphics().setColor(Color.black);
+		getBufferGraphics().drawPolygon(p);
+	}
+
+	/**
+	 * Redibujar el componente en el graphics temporal y representarlo en el
+	 * componente
+	 */
+	private void refreshImage() {
+		redrawBuffer();
+		if (bufferImage != null)
+			getGraphics().drawImage(bufferImage, 0, 0, this);
+		super.paint(getGraphics());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
+	 */
+	public void paint(Graphics g) {
+		redrawBuffer();
+		g.drawImage(bufferImage, 0, 0, this);
+		super.paint(g);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		if (!isEnabled())
+			return;
+		int onmask = MouseEvent.BUTTON1_DOWN_MASK;
+		if ((e.getModifiersEx() & onmask) != onmask)
+			return;
+		onmask = MouseEvent.ALT_DOWN_MASK;
+		boolean newItem = false;
+		if ((e.getModifiersEx() & onmask) == onmask)
+			newItem = true;
+
+		if ((e.getY() > height) || (e.getY() < (height - 18))) {
+			clearSelected();
+			refreshImage();
+			return;
+		}
+
+		int type = 1;
+		ItemColorSlider itemSelected = getItem(e.getX(), e.getY());
+		if ((itemSelected == null) || (newItem)) {
+			itemSelected = getItemInterpolated(e.getX(), e.getY());
+			if ((itemSelected == null) || (newItem)) {
+				int pos = getPosForValue(pixelToValue(e.getX()), items);
+
+				Color newColor = interpolatedColor(items, pixelToValue(e.getX()), pos);
+
+				itemSelected = new ItemColorSlider(pixelToValue(e.getX()), newColor);
+				items.add(itemSelected);
+			} else {
+				type = 2;
+			}
+		}
+		setItemSelected(itemSelected, type);
+
+		callSelectionChangedListeners();
+		callValueChangedListeners();
+
+		refreshImage();
+	}
+
+	private void clearSelected() {
+		for (int i = items.size() - 1; i >= 0; i--)
+			items.get(i).setSelected(-1);
+	}
+
+	private void setItemSelected(ItemColorSlider aux, int type) {
+		clearSelected();
+		aux.setSelected(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(MouseEvent e) {
+		if (!isEnabled())
+			return;
+		try {
+			for (int i = items.size() - 1; i >= 0; i--) {
+				if (items.size() <= 2)
+					return;
+				if (items.get(i).isVisible() == false)
+					items.remove(i);
+			}
+		} finally {
+			callValueChangedListeners();
+		}
+	}
+
+	public ItemColorSlider getSelectedItem() {
+		for (int i = 0; i < items.size(); i++) {
+			if (items.get(i).getSelected() != -1)
+				return items.get(i);
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) {
+		if (!isEnabled())
+			return;
+		ItemColorSlider aux = getSelectedItem();
+		if (aux != null) {
+			if (aux.getSelected() == 1) {
+				aux.setValue(pixelToValue(e.getX()));
+				refreshImage();
+				setMouseCursor(e.getX(), e.getY());
+				aux.setVisible((e.getY() <= height) && (e.getY() >= 0) || items.size() <= 2);
+				callValueDraggedListeners();
+				return;
+			}
+			if (aux.getSelected() == 2) {
+				int pos = -1;
+				for (int i = 0; i < items.size(); i++) {
+					if (items.get(i) == aux)
+						pos = i;
+				}
+				if (pos > 0) {
+					double min = items.get(pos - 1).getValue();
+					double max = items.get(pos).getValue();
+
+					double newValue = 100 * (pixelToValue(e.getX()) - min) / (max - min);
+
+					aux.setInterpolated(newValue);
+					refreshImage();
+					setMouseCursor(e.getX(), e.getY());
+					callValueDraggedListeners();
+				}
+				return;
+			}
+		}
+	}
+
+	private ItemColorSlider getItem(int x, int y) {
+		for (int i = 0; i < items.size(); i++) {
+			if ((x >= (valueToPixel(items.get(i).getValue()) - 5)) &&
+					(x <= (valueToPixel(items.get(i).getValue()) + 5)) &&
+					(y <= height) &&
+					(y >= (height - 18))) {
+				return items.get(i);
+			}
+		}
+		return null;
+	}
+
+	private ItemColorSlider getItemInterpolated(int x, int y) {
+		for (int i = 1; i < items.size(); i++) {
+			int value = valueToPixel(items.get(i - 1).getValue() + ((items.get(i).getValue() - items.get(i - 1).getValue()) * items.get(i).getInterpolated() / 100));
+
+			if ((x >= value - 3) &&
+					(x <= value + 3) &&
+					(y <= (height - 11)) &&
+					(y >= (height - 18))) {
+				if (items.get(i).getSelected() != -1)
+					return items.get(i);
+				if (items.get(i - 1).getSelected() == 1)
+					return items.get(i);
+			}
+		}
+		return null;
+	}
+
+	private void setMouseCursor(int x, int y) {
+		if (getItem(x, y) != null) {
+			setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
+			return;
+		}
+		if (getItemInterpolated(x, y) != null) {
+			setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
+			return;
+		}
+		if ((y <= height) && (y >= (height - 18))) {
+			setCursor(new Cursor(Cursor.HAND_CURSOR));
+			return;
+		}
+		setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+		return;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) {
+		if (!isEnabled())
+			return;
+		setMouseCursor(e.getX(), e.getY());
+	}
+
+	/**
+	 * @return the interpolated
+	 */
+	public boolean isInterpolated() {
+		return interpolated;
+	}
+
+	/**
+	 * @param interpolated the interpolated to set
+	 */
+	public void setInterpolated(boolean interpolated) {
+		this.interpolated = interpolated;
+		refreshImage();
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addValueChangedListener(ColorSliderListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeValueChangedListener(ColorSliderListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addSelectionChangedListener(ColorSliderListener listener) {
+		if (!actionSelectionListeners.contains(listener))
+			actionSelectionListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeSelectionChangedListener(ColorSliderListener listener) {
+		actionSelectionListeners.remove(listener);
+	}
+
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callSelectionChangedListeners() {
+		Iterator<ColorSliderListener> acIterator = actionSelectionListeners.iterator();
+		while (acIterator.hasNext()) {
+			ColorSliderListener listener = acIterator.next();
+			listener.actionSelectionChanged(new ColorSliderEvent(this));
+		}
+	}
+
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueChangedListeners() {
+		Iterator<ColorSliderListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ColorSliderListener listener = acIterator.next();
+			listener.actionValueChanged(new ColorSliderEvent(this));
+		}
+	}
+
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callValueDraggedListeners() {
+		Iterator<ColorSliderListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ColorSliderListener listener = acIterator.next();
+			listener.actionValueDragged(new ColorSliderEvent(this));
+		}
+	}
+
+	public void removeAllItems() {
+		items.clear();
+	}
+
+	/**
+	 * @return the items
+	 */
+	public ArrayList getItems() {
+		return items;
+	}
+
+	/**
+	 * Devuelve los items que estan visibles en el componente
+	 * @return the items
+	 */
+	public ArrayList getItemsShowed() {
+		ArrayList newArray = (ArrayList) items.clone();
+		for (int i = newArray.size() - 1; i >= 0; i--) {
+			if (((ItemColorSlider) newArray.get(i)).isVisible() == false)
+				newArray.remove(i);
+		}
+
+		return newArray;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.swing.JComponent#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		refreshImage();
+	}
+
+	public void mouseClicked(MouseEvent e) {}
+	public void mouseEntered(MouseEvent e) {}
+	public void mouseExited(MouseEvent e) {}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/colorslideredition/ColorSliderEdition.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/OpenFileContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/OpenFileContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/OpenFileContainer.java	(revision 42196)
@@ -0,0 +1,189 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.openfile;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.File;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.openfile.listeners.OpenFileListener;
+/**
+ *
+ * @version 13/07/2007
+ */
+public class OpenFileContainer extends JPanel {
+	private static final long serialVersionUID = 5823371652872582451L;
+	private int 					wComp   = 500, hComp = 55;
+	private int						wButton = 165;
+	private int						wText   = (int)Math.floor(0.63 * wComp);
+	private int						hButton = 22;
+	private boolean                 border  = true;   
+
+	private JButton jButton = null;
+	private JTextField tOpen = null;
+	private OpenFileListener listener = null;
+
+	private boolean isButtonVisible = true;
+
+	public OpenFileContainer() {
+		super();
+		listener = new OpenFileListener(this);
+		initialize();
+		listener.setButton(this.getJButton());
+	}
+	
+	public OpenFileContainer(boolean border) {
+		super();
+		this.border = border;
+		listener = new OpenFileListener(this);
+		initialize();
+		listener.setButton(this.getJButton());
+	}
+
+	/**
+	 * Constructor
+	 * @param WIDTH
+	 * Window width
+	 * @param HEIGHT
+	 * Window height
+	 * @param isButtonVisible
+	 * If the open button is visible
+	 */
+	public OpenFileContainer(int WIDTH,int HEIGHT,boolean isButtonVisible){
+		super();
+		this.isButtonVisible = isButtonVisible;
+		this.wComp = WIDTH;
+		this.hComp = HEIGHT;
+		listener = new OpenFileListener(this);
+		initialize();
+		listener.setButton(this.getJButton());
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+				GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+				gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
+				gridBagConstraints1.gridx = 1;
+				gridBagConstraints1.gridy = 0;
+				gridBagConstraints1.weightx = 10.0;
+				gridBagConstraints1.insets = new java.awt.Insets(0,2,0,0);
+				GridBagConstraints gridBagConstraints = new GridBagConstraints();
+				gridBagConstraints.insets = new java.awt.Insets(0,0,0,2);
+				gridBagConstraints.gridy = 0;
+				gridBagConstraints.gridx = 0;
+				gridBagConstraints.weightx = 1.0;
+				this.setLayout(new GridBagLayout());
+				this.setSize(new java.awt.Dimension(500,50));
+				if(border)
+					this.setBorder(javax.swing.BorderFactory.createTitledBorder(null, Messages.getText("open_file"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+				this.add(getJButton(), gridBagConstraints);
+				this.add(getTOpen(), gridBagConstraints1);
+
+	}
+
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setPreferredSize(new java.awt.Dimension(wButton,hButton));
+			jButton.addActionListener(listener);
+			jButton.setSize(wButton, hButton);
+			jButton.setText(Messages.getText("abrir..."));
+			jButton.setVisible(isButtonVisible);
+			getTOpen().setEnabled(isButtonVisible);
+		}
+		return jButton;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	public JTextField getTOpen() {
+		if (tOpen == null) {
+			tOpen = new JTextField();
+			if (isButtonVisible){
+				tOpen.setPreferredSize(new java.awt.Dimension(wText,hButton));
+			}else{
+				tOpen.setPreferredSize(new java.awt.Dimension((int)Math.floor(wComp * 0.95),hButton));
+			}
+		}
+		return tOpen;
+	}
+
+	/**
+	 * Pone el texto que le pasamos como texto del borde del panel.
+	 * @param text
+	 */
+/*
+	public void setBorderText(String text){
+		this.borderText = text;
+	}
+*/
+
+
+	public void setComponentSize(int w, int h){
+		wComp = w;
+		hComp = 55;
+		wText = (int)Math.floor(0.63 * wComp);
+
+		this.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		if (isButtonVisible){
+			this.getTOpen().setPreferredSize(new java.awt.Dimension(wText, hButton));
+		}else{
+			this.getTOpen().setPreferredSize(new java.awt.Dimension((int)Math.floor(wComp * 0.95), hButton));
+		}
+	}
+
+
+	/**
+	 * Devuelve el file cuya ruta corresponde con el campo de texto.
+	 * @return
+	 */
+	public File getFile(){
+		File fil = null;
+		if(this.getTOpen().getText() != ""){
+			try{
+				fil = new File(this.getTOpen().getText());
+			}catch(Exception exc){
+				System.err.println("Ruta o archivo no v�lido");
+			}
+		}
+		return fil;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/OpenFileContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileFilter.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.openfile;
+
+import java.io.File;
+
+public abstract class FileFilter extends javax.swing.filechooser.FileFilter {
+
+	/**
+	 * <p>Gets the default file extension, which will be
+	 * added to the selected file if its extension is not
+	 * valid.</p>
+	 * 
+	 * @return
+	 */
+	public abstract String getDefaultExtension();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileTextField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileTextField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileTextField.java	(revision 42196)
@@ -0,0 +1,235 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.openfile;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.swing.JFileChooser;
+
+public class FileTextField extends JPanel {
+	private static final long serialVersionUID = 1L;
+	private JTextField tf_fileName = null;
+	private JButton bt_chooseFile = null;
+	private File selectedFile = null;
+	private ArrayList enabledListeners = new ArrayList();
+	private JFileChooser jfc;
+	/**
+	 * Used to create file choosers with 'memory'
+	 */
+	private String JFC_ID = null;
+
+	public static final int ACTION_EVENT_FIELD_DISABLED = 0;
+	public static final int ACTION_EVENT_FIELD_ENABLED = 1;
+	public static final int ACTION_EVENT_VALUE_CHANGED = 1;
+
+	public FileTextField() {
+		super();
+		JFC_ID = this.getClass().getName();
+		initializeUI();
+	}
+
+	public FileTextField(String id) {
+		super();
+		JFC_ID = id;
+		initializeUI();
+	}
+
+	private void initializeUI() {
+		 jfc = new JFileChooser(JFC_ID, (String) null);
+		setLayout(new GridBagLayout());
+
+		GridBagConstraints constraints = new GridBagConstraints();
+		constraints.gridx = 0;
+		constraints.gridy = 0;
+		constraints.gridwidth = 1;
+		constraints.gridheight = 1;
+		constraints.fill = GridBagConstraints.BOTH;
+		constraints.anchor = GridBagConstraints.WEST;
+		constraints.weightx = 1.0;
+		constraints.weighty = 1.0;
+		constraints.insets = new Insets(0,0,0,4);
+		this.add(getNameField(), constraints);
+
+		getChooseFileButton().addActionListener(new ActionListener() {
+
+			public void actionPerformed(ActionEvent e) {
+				if (e.getSource()==getChooseFileButton()) {
+					int action = jfc.showDialog(FileTextField.this, Messages.getText("Open"));
+					if (action == JFileChooser.APPROVE_OPTION) {
+						setSelectedFile(jfc.getSelectedFile());
+						setEnabled(true);	
+					}
+				}
+			}
+		});
+		constraints.gridx = 1;
+		constraints.gridy = 0;
+		constraints.gridwidth = 1;
+		constraints.gridheight = 1;
+		constraints.fill = GridBagConstraints.BOTH;
+		constraints.anchor = GridBagConstraints.WEST;
+		constraints.weightx = 0.0;
+		constraints.weighty = 1.0;
+		constraints.insets = new Insets(0,0,0,0);
+		this.add(getChooseFileButton(), constraints);
+	}
+
+	private JTextField getNameField() {
+		if (tf_fileName==null) {
+			tf_fileName = new JTextField();
+			tf_fileName.addFocusListener(new FocusListener() {
+				public void focusGained(FocusEvent e) {}
+
+				public void focusLost(FocusEvent e) {
+					updateSelectedFile();
+				}
+			});
+		}
+		return tf_fileName;
+	}
+	
+	private JButton getChooseFileButton() {
+		if (bt_chooseFile==null) {
+			bt_chooseFile = new JButton("...");
+		}
+		return bt_chooseFile;
+	}
+
+
+	public void setSelectedFile(File file) {
+		File oldFile = selectedFile;
+		selectedFile = normalizeExtension(file);
+		getNameField().setText(selectedFile.toString());
+		if (file.isDirectory()) {
+			jfc.setLastPath(file);
+		}
+		else {
+		    jfc.setSelectedFile(file);
+            jfc.setLastPath(file.getParentFile());
+		}
+		fireValueChanged(oldFile, file);
+	}
+
+	public File getSelectedFile() {
+		return updateSelectedFile();
+	}
+	
+	private File normalizeExtension(File file) {
+		javax.swing.filechooser.FileFilter filter = (javax.swing.filechooser.FileFilter) jfc.getFileFilter();
+		if (!filter.accept(file)) {
+			String path = file.getPath();
+			if (filter instanceof FileFilter)  {
+				FileFilter ourFilter = (FileFilter) filter;
+			if (path.endsWith(".")) {
+				path = path+ourFilter.getDefaultExtension();
+			}
+			else {
+				path = path+"."+ourFilter.getDefaultExtension();
+			}
+			file = new File(path);
+			}
+		}
+		return file;	
+	}
+	
+	private File updateSelectedFile() {
+		File oldFile = selectedFile;
+		String text = getNameField().getText();
+		if ( (oldFile!=null && !oldFile.getPath().equals(text))
+				|| ((oldFile==null) && !text.equals(""))){
+			File newFile = normalizeExtension(new File(getNameField().getText()));
+			selectedFile = newFile;
+			fireValueChanged(oldFile, newFile);
+		}
+		return selectedFile;
+	}
+
+	protected void fireValueChanged(File oldValue, File newValue) {
+		firePropertyChange("selectedFileChanged", oldValue, newValue);
+	}
+
+	protected void fireEnabledChanged(boolean oldValue, boolean newValue) {
+		firePropertyChange("enabled", oldValue, newValue);
+	}
+
+	public void setEnabled(boolean enabled) {
+		boolean oldValue = isEnabled();
+		super.setEnabled(enabled);
+		getNameField().setEnabled(enabled);
+        getChooseFileButton().setEnabled(enabled);
+		fireEnabledChanged(oldValue, enabled);
+	}
+
+	public javax.swing.filechooser.FileFilter getFileFilter() {
+		return jfc.getFileFilter();
+	}
+
+	public int getFileSelectionMode() {
+		return jfc.getFileSelectionMode();
+	}
+
+	public boolean removeChoosableFileFilter(FileFilter f) {
+		return jfc.removeChoosableFileFilter(f);
+	}
+
+	public void setFileFilter(FileFilter filter) {
+
+		jfc.setFileFilter(filter);
+		
+	}
+
+	public void addChoosableFileFilter(FileFilter filter) {
+		jfc.addChoosableFileFilter(filter);
+	}
+
+	public FileFilter getAcceptAllFileFilter() {
+		return (FileFilter) jfc.getAcceptAllFileFilter();
+	}
+
+	public boolean isAcceptAllFileFilterUsed() {
+		return jfc.isAcceptAllFileFilterUsed();
+	}
+
+	public void resetChoosableFileFilters() {
+		jfc.resetChoosableFileFilters();
+	}
+
+	public void setAcceptAllFileFilterUsed(boolean b) {
+		jfc.setAcceptAllFileFilterUsed(b);
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/FileTextField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/listeners/OpenFileListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/listeners/OpenFileListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/listeners/OpenFileListener.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.openfile.listeners;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+
+import org.gvsig.gui.beans.openfile.OpenFileContainer;
+
+public class OpenFileListener implements ActionListener{
+
+	private JButton button = null;
+	private String fName = null;
+	private OpenFileContainer controlPanel= null;
+	
+	public OpenFileListener(OpenFileContainer panel){
+		this.controlPanel = panel;
+	}
+	
+	public void setButton(JButton but){
+		this.button = but;
+	}
+	
+	
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == this.button){
+			JFileChooser file = new JFileChooser();
+			file.setDialogTitle("Select File");
+			file.addChoosableFileFilter(new ReadFilter(file, "raw"));
+			int returnVal = file.showOpenDialog(controlPanel);
+			if(returnVal == JFileChooser.APPROVE_OPTION){
+				fName = file.getSelectedFile().toString();
+				controlPanel.getTOpen().setText(fName);
+			}
+		}
+		
+	}
+
+	public String getFileName(){
+		return fName;
+	}
+	
+}
+
+class ReadFilter extends javax.swing.filechooser.FileFilter{
+
+	JFileChooser chooser = null;
+	String filter = null;
+	
+	public ReadFilter(JFileChooser cho,String fil){
+		this.chooser = cho;
+		this.filter = fil;
+	}
+	
+	public boolean accept(File f) {
+		 return f.isDirectory() || f.getName().toLowerCase().endsWith("."+filter);
+	}
+
+	public String getDescription() {
+		return "."+filter;
+	}
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/openfile/listeners/OpenFileListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/PositiveNumberField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/PositiveNumberField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/PositiveNumberField.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.numberTextField;
+
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.text.ParseException;
+
+/**
+ * <p>Provides a TextField component suitable for numbers. No error is
+ * produced when other characters are introduced, but just numbers are kept
+ * in the field after pressing enter or after focus is lost.</p>
+ * 
+ * <p>The component parses numbers according to the default Locale. For example
+ * when es_ES locale is active, a comma (",") is expected to separate the
+ * fractional part from the integer part, and when en_US is the default locale,
+ * then a dot (".") is expected to separate them.</p>
+ * 
+ * <p>The format of the accepted numbers can be modified by using the
+ *  {@link #getFormat()} method. For example, to get a TextField that accepts
+ *  just integer numbes we would use:</p>
+ *  <pre>
+ *    NumberTextField field = new NumberTextField();
+ *    field.getFormat().setParseIntegerOnly(true);</pre>
+ *  
+ *  <p>In order to get a TextField that accepts double values with a minimum
+ *  of two fractional digits and a maximum of five, we would use:</p>
+ *  <pre>
+ *    NumberTextField field = new NumberTextField();
+ *    field.getFormat().setMinimumFractionDigits(0);
+ *    field.getFormat().setMaximumFractionDigits(5);
+ *  </pre>
+ *  
+ *  <p>NumberTextField commits the value to the Field when the focus is lost,
+ *  while standard JFormattedTextField just commits the value to the Field
+ *  when the user presses ENTER.</p>
+ */
+public class PositiveNumberField extends NumberTextField
+	implements FocusListener{
+
+	private static final long serialVersionUID = 1289959692215502516L;
+
+	public PositiveNumberField() {
+        super();
+        initialize();
+	}
+
+	public PositiveNumberField(int columns) {
+		super(columns);
+		initialize();
+	}
+
+	public PositiveNumberField(double value, int columns) {
+		super(value, columns);
+		initialize();
+	}
+
+	public PositiveNumberField(int value, int columns) {
+		super(value, columns);
+		initialize();
+	}
+
+	private void initialize() {
+		addFocusListener(this);
+		getFormat().setParseIntegerOnly(true);
+		getFormat().setGroupingUsed(false);
+	}
+
+	public void focusLost(FocusEvent e) {
+		try {
+			commitEdit();
+		} catch (ParseException e1) {}
+		if (getIntValue()<0) {
+			setValue(-getIntValue());
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/PositiveNumberField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/NumberTextField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/NumberTextField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/NumberTextField.java	(revision 42196)
@@ -0,0 +1,226 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.numberTextField;
+
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.text.NumberFormat;
+import java.text.ParseException;
+
+import javax.swing.JFormattedTextField;
+import javax.swing.JTextField;
+import javax.swing.text.DefaultFormatterFactory;
+import javax.swing.text.NumberFormatter;
+
+/**
+ * <p>Provides a TextField component suitable for numbers. No error is
+ * produced when other characters are introduced, but just numbers are kept
+ * in the field after pressing enter or after focus is lost.</p>
+ * 
+ * <p>The component parses numbers according to the default Locale. For example
+ * when es_ES locale is active, a comma (",") is expected to separate the
+ * fractional part from the integer part, and when en_US is the default locale,
+ * then a dot (".") is expected to separate them.</p>
+ * 
+ * <p>The format of the accepted numbers can be modified by using the
+ *  {@link #getFormat()} method. For example, to get a TextField that accepts
+ *  just integer numbes we would use:</p>
+ *  <pre>
+ *    NumberTextField field = new NumberTextField();
+ *    field.getFormat().setParseIntegerOnly(true);</pre>
+ *  
+ *  <p>In order to get a TextField that accepts double values with a minimum
+ *  of two fractional digits and a maximum of five, we would use:</p>
+ *  <pre>
+ *    NumberTextField field = new NumberTextField();
+ *    field.getFormat().setMinimumFractionDigits(0);
+ *    field.getFormat().setMaximumFractionDigits(5);
+ *  </pre>
+ *  
+ *  <p>NumberTextField commits the value to the Field when the focus is lost,
+ *  while standard JFormattedTextField just commits the value to the Field
+ *  when the user presses ENTER.</p>
+ */
+public class NumberTextField extends JFormattedTextField
+	implements FocusListener{
+	private static final long serialVersionUID = 1045806433744300963L;
+	private NumberFormat format;
+
+	public NumberTextField() {
+        super();
+        format = NumberFormat.getInstance();
+        setFormatterFactory(new DefaultFormatterFactory(new NumberFormatter(
+                (NumberFormat)format)));
+		initialize();
+	}
+	
+	public NumberTextField(int columns) {
+		this();
+		setColumns(columns);
+	}
+
+	public NumberTextField(double value, int columns) {
+		this();
+		setColumns(columns);
+		super.setValue(new Double(value));
+	}
+
+	public NumberTextField(int value, int columns) {
+		this();
+		setColumns(columns);
+		super.setValue(new Integer(value));
+	}
+
+	/**
+	 * <p>Gets the NumberFormat accepted by this text field. It can be
+	 * used to change the format accepted by this text field.</p>
+	 * 
+	 * <p>Examples:</p>
+	 * 
+	 * <ul>
+	 * <li>To accept numbers with 0 to 5 fraction digits (as 2, 2.232, 6.23211):
+	 * <pre>
+	 *   getFormat().setMinimumFractionDigits(0);
+	 *   getFormat().setMaximumFractionDigits(5);</pre></li>
+	 * <li>To accept numbers with exactly two fraction digits (as 76.23, 12.00):
+	 * <pre>
+	 *   getFormat().setMinimumFractionDigits(2);
+	 *   getFormat().setMaximumFractionDigits(2);</pre></li>
+	 * <li>To accept just integer numbers (as 23, 5542, 0):
+	 * <pre>
+	 *   getFormat().setParseIntegerOnly(true);</pre></li>
+	 * <li>To enable digit grouping (enabled by default):
+	 * <pre>
+	 *   getFormat().setGroupingUsed(true);</pre></li></ul>
+	 * <p>Note: digit grouping enabled means to display 2534313.23 as
+	 * 2,534,313.23</p> 
+	 * 
+	 * @return
+	 */
+	public NumberFormat getFormat() {
+		return format;
+	}
+	
+	private void initialize() {
+		addFocusListener(this);
+		setHorizontalAlignment(JTextField.RIGHT);
+	}
+	
+	/**
+	 * <p>Sets the value of this TextField as a
+	 * <code>double</code> primitive type.</p>
+	 * 
+	 */
+	public void setValue(double value) {
+		setValue(new Double(value));
+	}
+
+	/**
+	 * <p>Sets the value of this TextField as an
+	 * <code>int</code> primitive type.</p>
+	 */
+	public void setValue(int value) {
+		setValue(new Integer(value));
+	}
+
+	/**
+	 * <p>Sets the value of this TextField as a
+	 * <code>long</code> primitive type.</p>
+	 * 
+	 */
+	public void setValue(long value) {
+		setValue(new Long(value));
+	}
+
+	/**
+	 * <p>Gets the value of this TextField as a
+	 * <code>double</code> primitive type.</p>
+	 * 
+	 * @return The value as a <code>double</code>
+	 */
+	public double getDoubleValue() {
+		Object value = getValue();
+		if (value instanceof Double) {
+			return ((Double)value).doubleValue();
+		}
+		else if (value instanceof Long) {
+			return ((Long)value).doubleValue();
+		}
+		else if (value instanceof Integer) {
+			return ((Integer)value).doubleValue();
+		}
+		else
+			return 0;
+	}
+
+	/**
+	 * <p>Gets the value of this TextField as an
+	 * <code>int</code> primitive type.</p>
+	 * 
+	 * @return The value as an <code>int</code>
+	 */
+	public int getIntValue() {
+		Object value = getValue();
+		if (value instanceof Long) {
+			return ((Long)value).intValue();
+		}
+		else if (value instanceof Double) {
+			return ((Double)value).intValue();
+		}
+		else if (value instanceof Integer) {
+			return ((Integer)value).intValue();
+		}
+		else
+			return 0;
+	}
+
+	/**
+	 * <p>Gets the value of this TextField as a
+	 * <code>long</code> primitive type.</p>
+	 * 
+	 * @return The value as a <code>long</code>
+	 */
+	public long getLongValue() {
+		Object value = getValue();
+		if (value instanceof Long) {
+			return ((Long)value).longValue();
+		}
+		else if (value instanceof Double) {
+			return ((Double)value).longValue();
+		}
+		else if (value instanceof Integer) {
+			return ((Integer)value).longValue();
+		}
+		else
+			return 0;
+	}
+
+	public void focusGained(FocusEvent e) {}
+
+	public void focusLost(FocusEvent e) {
+		try {
+			commitEdit();
+		} catch (ParseException e1) {}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/numberTextField/NumberTextField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/IEditableText.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/IEditableText.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/IEditableText.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent;
+
+import javax.swing.text.JTextComponent;
+
+import org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener;
+
+/**
+ * <p>All graphical components which inherit from {@link JTextComponent JTextComponent}
+ *  can enhance their functionality with graphical edition options support implementing
+ *  this interface.</p>
+ * 
+ * @version 03/01/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public interface IEditableText {
+	/**
+     * Sets the limit of actions that can hold the UndoManager of this component.
+     * 
+     * @param limit sets the limit of actions that can hold
+     */
+	public void setUndoRedoLimitActions(int limit);
+
+	/**
+     * Gets the limit of actions that can hold the UndoManager.
+     * 
+     * @return int limit of actions that can hold
+     */
+	public int getUndoRedoLimitActions();
+	
+	/**
+     * Adds a listener for notification of an <i>undo</i> or <i>redo</i> operation executed.
+     *
+     * @param listener the listener to be added
+     * @see javax.swing.event.UndoRedoEditEvent
+     */
+    public void addUndoRedoEditListener(UndoRedoEditListener listener);
+
+    /**
+     * Removes a listener for notification of an <i>undo</i> or <i>redo</i> operation executed.
+     *
+     * @param listener the listener to be removed
+     * @see javax.swing.event.UndoRedoEditEvent
+     */
+    public void removeUndoRedoEditListener(UndoRedoEditListener listener);
+
+    /**
+     * Returns an array of all the <code>UndoRedoEditListener</code>
+     * registered on this text component.
+     *
+     * @return all of this component's <code>UndoRedoEditListener</code>s 
+     *         or an empty
+     *         array if no listeners of that kind are currently registered
+     *
+     * @see #addUndoRedoEditListener
+     * @see #removeUndoRedoEditListener
+     */
+    public UndoRedoEditListener[] getUndoRedoEditListeners();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/IEditableText.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextField.java	(revision 42196)
@@ -0,0 +1,137 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent;
+
+import javax.swing.JTextField;
+import javax.swing.text.Document;
+
+import org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener;
+
+/**
+ * <p>Text field with options to edit its text easily.</p>
+ * 
+ * @see JTextField
+ * 
+ * @version 03/01/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class JEditableTextField extends JTextField implements IEditableText {
+	private static final long serialVersionUID = 5504131442718795532L;
+
+	// REFERENCE TO THE TEXT EDITOR DECORATOR
+	private EditableTextDecorator editableTextDecorator;
+	// END REFERENCE TO THE TEXT EDITOR DECORATOR
+
+	/**
+	 * @see JTextField#JTextField()
+	 */
+	public JEditableTextField() {
+		super();
+		
+		initialize();
+	}
+
+	/**
+	 * @see JTextField#JTextField(Document, String, int)
+	 */
+	public JEditableTextField(Document doc, String text, int columns) {
+		super(doc, text, columns);
+		
+		initialize();
+	}
+
+	/**
+	 * @see JTextField#JTextField(int)
+	 */
+	public JEditableTextField(int columns) {
+		super(columns);
+		
+		initialize();
+	}
+
+	/**
+	 * @see JTextField#JTextField(String, int)
+	 */
+	public JEditableTextField(String text, int columns) {
+		super(text, columns);
+		
+		initialize();
+	}
+
+	/**
+	 * @see JTextField#JTextField(String)
+	 */
+	public JEditableTextField(String text) {
+		super(text);
+		
+		initialize();
+	}
+
+	/**
+	 * <p>Fits this component to be ready to be used.</p>
+	 */
+	protected void initialize() {
+		editableTextDecorator = new EditableTextDecorator(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#getUndoRedoLimitActions()
+	 */
+	public int getUndoRedoLimitActions() {
+		return editableTextDecorator.getUndoRedoLimitActions();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#setUndoRedoLimitActions(int)
+	 */
+	public void setUndoRedoLimitActions(int limit) {
+		editableTextDecorator.setUndoRedoLimitActions(limit);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#addUndoRedoEditListener(org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener)
+	 */
+	public void addUndoRedoEditListener(UndoRedoEditListener listener) {
+		editableTextDecorator.addUndoRedoEditListener(listener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#getUndoRedoEditListeners()
+	 */
+	public UndoRedoEditListener[] getUndoRedoEditListeners() {
+		return editableTextDecorator.getUndoRedoEditListeners();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#removeUndoRedoEditListener(org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener)
+	 */
+	public void removeUndoRedoEditListener(UndoRedoEditListener listener) {
+		editableTextDecorator.removeUndoRedoEditListener(listener);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/EditableTextDecorator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/EditableTextDecorator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/EditableTextDecorator.java	(revision 42196)
@@ -0,0 +1,508 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent;
+
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.event.EventListenerList;
+import javax.swing.event.UndoableEditEvent;
+import javax.swing.event.UndoableEditListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.PlainDocument;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.UndoManager;
+
+import org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditEvent;
+import org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener;
+import org.gvsig.gui.beans.editionpopupmenu.JOptionsEditionByMousePopupMenu;
+
+/**
+ * <p>Extra functionality that allows a {@link JTextComponent JTextComponent} having graphical edition options,
+ * which allows user to select any: <i>COPY, CUT, PASTE, SELECT ALL, REMOVE, UNDO, REDO</i> in a popup menu.</p>
+ * 
+ * <p>All options will be about the edition of the text in the component.</p>
+ *  
+ * <p><b><i>How select an edition option using the mouse:</i></b> press the right button of the mouse on the text area, and a popup with the options will be displayed. Select and option.<br>
+ * <b><i>Default fast-access keys:</i></b> 
+ * <ul>
+ *  <li><b>COPY:</b> </li> CTRL + C. Copies from the text field to the clipboard.
+ *  <li><b>CUT:</b> </li> CTRL + X. Cuts from the text field to the clipboad.
+ *  <li><b>PASTE:</b> </li> CTRL + V. Copies from the clipboard to the text field.
+ *  <li><b>REMOVE:</b> </li> SUPR (in spanish keyboard, and the equivalent in others). Removes the selected text.
+ *  <li><b>SELECT ALL:</b> </li> CTRL + A. Selects all the text.
+ *  <li><b>UNDO:</b> </li> CTRL + Z. Undoes.
+ *  <li><b>REDO:</b> </li> SHIFT + CTRL + Z. Redoes.
+ * </ul></p>
+ * 
+ * <p>This component by default stores 100 undo/redo actions. This value can be modified.</p>
+ * 
+ * <p>A developer would have to re-implement {@linkplain #defineEditorKeyListener() #defineEditorKeyListener()}, creating
+ *  a new <code>editorKeyListener</code> for changing any fast-access key.</p>
+ * 
+ * @version 27/02/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class EditableTextDecorator implements IEditableText {
+	// CONSTANTS
+	public static final int DEFAULT_UNDO_REDO_LIMIT_ACTIONS = 100;
+	// END CONSTANTS
+
+	// A POPUPMENU FOR EDITION OPTIONS
+	private JOptionsEditionByMousePopupMenu optionsEditionByMouse;
+    // END A POPUPMENU FOR EDITION OPTIONS
+	
+	// UNDO-REDO
+	private UndoManager undoManager;
+	private int undoRedoLimitActions;
+	// END UNDO-REDO
+	
+	// LISTENERS
+	protected KeyListener editorKeyListener;
+	private MouseAdapter editorMouseListener;
+	private PropertyChangeListener editionMenuListener;
+	private EventListenerList undoRedoEditListeners;
+	// END LISTENERS
+	
+	// REFERENCE TO THE JTEXTCOMPONENT
+	private JTextComponent jTextComponent;
+	// END REFERENCE TO THE JTEXTCOMPONENT
+	
+	/**
+	 * Default constructor
+	 */
+	public EditableTextDecorator(JTextComponent jTextComponent) {
+		super();
+
+		// Reference to the JTextComponent
+		this.jTextComponent = jTextComponent;
+		
+		initialize();
+		
+		// Other configuration tasks
+		this.createDefaultListeners();
+		this.configure();
+	}
+	
+	/**
+	 * This method sets the start values of inner attributes and creates the necessary inner objects
+	 */
+	private void initialize() {
+		undoRedoEditListeners = new EventListenerList();
+		
+        // Allows user to edit
+		jTextComponent.setEditable(true);
+		
+		// Text options edition popupmenu initialization
+		optionsEditionByMouse = new JOptionsEditionByMousePopupMenu();
+		
+		// Undo-Redo initialization
+		undoManager = new UndoManager();
+		undoRedoLimitActions = DEFAULT_UNDO_REDO_LIMIT_ACTIONS; // By default is 1
+		undoManager.setLimit(undoRedoLimitActions);
+	}
+	
+	/**
+	 * Creation of default listeners that will use the component
+	 */
+	private void createDefaultListeners() {
+		// Defines a listener for the PopupMenu of text edition options: when a change is produced in that component, it fires an event
+		//   and this listener captures it
+		defineEditionMenuPropertyChangeListener();
+
+        // Defines a key listener for the editor of this component
+        defineEditorKeyListener();
+
+        // Defines a mouse listener for the editor of this component
+        defineEditorMouseListener();
+	}
+	
+	/**
+	 * Defines a listener for the PopupMenu of text edition options: when a change is produced in that component, it fires an event
+	 *    and this listener captures and treats it
+	 */
+	private void defineEditionMenuPropertyChangeListener() {
+		editionMenuListener = new PropertyChangeListener() {
+			/*
+			 * (non-Javadoc)
+			 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+			 */
+			public void propertyChange(PropertyChangeEvent arg0) {
+				if (arg0.getPropertyName().equals(JOptionsEditionByMousePopupMenu.SELECTEDOPTION)) {
+	            						
+			          switch(Integer.parseInt(arg0.getNewValue().toString()))
+			          {
+				          case JOptionsEditionByMousePopupMenu.UNDO:
+				        	  undoOperationLogic();
+				        	  break;
+				          case JOptionsEditionByMousePopupMenu.REDO:
+				        	  redoOperationLogic();
+				        	  break;
+				          case JOptionsEditionByMousePopupMenu.CUT:
+				        	  jTextComponent.cut();
+				        	  break;
+				          case JOptionsEditionByMousePopupMenu.COPY:
+				        	  jTextComponent.copy();
+				        	  break;
+				          case JOptionsEditionByMousePopupMenu.PASTE:
+				        	  jTextComponent.paste();
+				        	  break;
+				          case JOptionsEditionByMousePopupMenu.DELETE:
+				        	  deleteTextLogic();
+				        	  break;
+				          case JOptionsEditionByMousePopupMenu.SELECT_ALL:
+				        	  jTextComponent.selectAll();
+				        	  break;
+				          default: // do anything
+			          }
+				}
+/*
+				else
+				{
+					if (arg0.getPropertyName().equals(JOptionsEditionByMousePopupMenu.VISIBILITYCHANGED))
+					{
+						// First True, after False (when false -> optionsEditorWasVisible = true)
+						if (!optionsEditionByMouse.isVisible())
+							optionsEditorWasVisible = true;
+						else
+							optionsEditorWasVisible = false;
+
+					}
+				}
+*/
+			}			
+		};
+	}
+
+	/**
+	 * Defines a key listener for the editor of the text component.
+	 */
+	protected void defineEditorKeyListener() {
+		editorKeyListener = new KeyAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * @see java.awt.event.KeyAdapter#keyPressed(java.awt.event.KeyEvent)
+			 */
+			public void keyPressed(KeyEvent ke)  // Executed on the Start view state or Search view state
+			{
+				// COPY, CUT, PASTE, SELECT ALL, UNDO AND REDO WITH THE KEYBOARD (Combination of keys; REMOVE is implemented after: KV_DELETE (supr spanish key))
+				if (ke.isControlDown())
+				{
+					// COPY
+				    if (ke.getKeyCode() == KeyEvent.VK_C) {
+				    	jTextComponent.copy();
+				    	ke.consume();
+				    	return;
+				    }
+				    
+				    // CUT
+				    if (ke.getKeyCode() == KeyEvent.VK_X) {
+				    	jTextComponent.cut();
+				    	ke.consume();
+				    	return;
+				    }
+				    
+				    // PASTE
+				    if (ke.getKeyCode() == KeyEvent.VK_V) {
+				    	jTextComponent.paste();
+				    	ke.consume();
+				    	return;
+				    }
+				    
+				    // SELECT ALL
+				    if (ke.getKeyCode() == KeyEvent.VK_A) {
+				    	jTextComponent.selectAll();
+				    	ke.consume();
+				    	return;
+				    }
+
+				    // UNDO OR REDO
+				    if (ke.getKeyCode() == KeyEvent.VK_Z) {
+				    	if (ke.isShiftDown()) // REDO
+				    		redoOperationLogic();					    		
+				    	else //UNDO
+				    		undoOperationLogic();
+				    	
+				    	ke.consume();
+				    	return;
+			 	    }
+				}
+				
+				// According the key pressed, do some actions or others
+				switch (ke.getKeyCode())
+				{
+					case KeyEvent.VK_DELETE : // 'supr' key in spanish keyboard
+						deleteTextLogic();
+						ke.consume();
+					break;
+				}
+			}
+		};
+	}
+
+	/**
+	 * Defines a mouse listener for the editor of the text component.
+	 */
+	private void defineEditorMouseListener() {
+		editorMouseListener = new MouseAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
+			 */
+			public void mouseClicked(MouseEvent e) {
+	
+				if (e.getButton() == MouseEvent.BUTTON3) {	            	
+	            	// By default disable all options
+	            	optionsEditionByMouse.setEnabledAllOptions(false);
+	            	
+	            	// Enable the "Undo" option if there is any previous state to restore
+	            	if (undoManager.canUndo())
+	            		optionsEditionByMouse.setEnabledUndoOption(true);
+	            	
+	            	// Enable the "Redo" option if there is any later state to restore
+	            	if (undoManager.canRedo())
+	            		optionsEditionByMouse.setEnabledRedoOption(true);
+	            	
+	            	// Enable the "Copy", "Cut" and "Delete" options if there is text selected
+	            	if (jTextComponent.getCaretPosition() != jTextComponent.getCaret().getMark())
+	            	{
+	            		optionsEditionByMouse.setEnabledCopyOption(true);
+	            		optionsEditionByMouse.setEnabledCutOption(true);
+	            		optionsEditionByMouse.setEnabledDeleteOption(true);
+	            	}
+	            	
+	            	// Enable the "Paste" option if there is text on the system's clipboard
+	            	if ( jTextComponent.getToolkit().getSystemClipboard().getContents(this).toString().length() > 0 )
+	            		optionsEditionByMouse.setEnabledPasteOption(true);//
+	            	
+	            	// Enable the "Select-All" option (by default it's always enabled)
+	            	optionsEditionByMouse.setEnabledSelectAllOption(true);
+	            	
+					optionsEditionByMouse.setLocation((int)jTextComponent.getLocationOnScreen().getX() + e.getX(), (int)jTextComponent.getLocationOnScreen().getY() + e.getY());
+	            	optionsEditionByMouse.setInvoker(jTextComponent);
+	            	optionsEditionByMouse.setVisible(true);
+	            }
+	        }
+		};
+	}
+	
+	/**
+	 * Configures the component and some of its parts
+	 */
+	private void configure() {
+		// Configures the document of the editor of this component
+		PlainDocument document = this.configureDocument();
+
+		// Configures the editor (ComboBoxEditor) of this component
+		configureEditor(document);
+		
+		// Configures the text-edition-options popupmenu
+		configureOptionsEditionByMouse();
+	}
+
+	/**
+	 * Configures the document of the editor of the text component
+	 */
+	private PlainDocument configureDocument() {
+		// Creates the document of the editor of this component
+		PlainDocument document = new PlainDocument();
+        
+		// Configures the document
+		configureUndoManager(document);
+		
+		return document;
+	}
+	
+	/**
+	 * Configures the editor {@link ComboBoxEditor ComboBoxEditor} of the text component.
+	 * 
+	 * @param document the document to display/edit
+	 */
+	private void configureEditor(PlainDocument document) {
+        if (jTextComponent != null) {
+           	// Removes some previous listeners and adds some new others:     
+        	
+        	// Adds the new Key Listener (tries to remove it if it existed before)
+        	jTextComponent.removeKeyListener(this.editorKeyListener);
+        	jTextComponent.addKeyListener(this.editorKeyListener);
+        	
+           	// Adds the new Mouse Listener (tries to remove it if it existed before)
+        	jTextComponent.removeMouseListener(this.editorMouseListener);
+        	jTextComponent.addMouseListener(this.editorMouseListener);
+        	
+        	// Adds the new document (tries to remove it if it existed before)
+        	jTextComponent.setDocument(document);
+        }
+	}
+
+	/** 
+	 * Configures the text-edition-options popup menu.
+	 */
+	private void configureOptionsEditionByMouse() {
+		this.optionsEditionByMouse.addPropertyChangeListener(editionMenuListener);
+	}
+	
+	/**
+	 * Configures the UndoManager for Undo-Redo operations.
+	 */
+	private void configureUndoManager(PlainDocument document) {
+        // Listen for undo and redo events
+        document.addUndoableEditListener(new UndoableEditListener() {
+        	/*
+        	 * (non-Javadoc)
+        	 * @see javax.swing.event.UndoableEditListener#undoableEditHappened(javax.swing.event.UndoableEditEvent)
+        	 */
+            public void undoableEditHappened(UndoableEditEvent evt) {
+            	undoManager.addEdit(evt.getEdit());
+            }
+        });
+	}
+	
+	/**
+	 * This method has the logic for a "undo" operation.
+	 */
+	private void undoOperationLogic() {
+		try {
+            if (undoManager.canUndo()) {
+            	String previousText = jTextComponent.getText();
+            	undoManager.undo();
+         	   	String newText = jTextComponent.getText();
+         	   	fireUndoRedoEditUpdate(new UndoRedoEditEvent(jTextComponent, UndoRedoEditEvent.UNDO, previousText, newText));
+            }
+		} catch (CannotUndoException e) {
+        	e.printStackTrace();
+        }
+	}
+	
+	/**
+	 * This method has the logic for a "redo" operation.
+	 */
+	private void redoOperationLogic() {
+        try {
+            if (undoManager.canRedo()) {
+            	String previousText = jTextComponent.getText();
+         	   	undoManager.redo();
+         	   	String newText = jTextComponent.getText();
+         	   	fireUndoRedoEditUpdate(new UndoRedoEditEvent(jTextComponent, UndoRedoEditEvent.REDO, previousText, newText));
+            }
+	    } catch (CannotRedoException e) {
+	    	e.printStackTrace();
+	    }
+	}
+
+	////// OTHER METHODS //////
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#setUndoRedoLimitActions(int)
+	 */
+	public void setUndoRedoLimitActions(int limit) {
+    	this.undoRedoLimitActions = limit;
+    	undoManager.setLimit(undoRedoLimitActions);
+    }
+    
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#getUndoRedoLimitActions()
+	 */
+	public int getUndoRedoLimitActions() {
+    	return this.undoRedoLimitActions;
+    }
+     
+	/**
+	 * This method is invoked when some text has to be removed: With the 'Delete' option of the text-edition-popupmenu or with the 'delete' ('supr'
+	 *    in spanish keyboard) key.
+	 */
+	private void deleteTextLogic() {
+		//		 Get the new text:		
+	  	try {
+	  		PlainDocument document = (PlainDocument)jTextComponent.getDocument();
+	  		int caretPosition = jTextComponent.getCaretPosition();
+	  		int markPosition = jTextComponent.getCaret().getMark();
+	  		  
+	  		int min_index = Math.min(caretPosition, markPosition);
+	  		int length = Math.abs(caretPosition - markPosition);
+	  		  
+	  		document.remove(min_index, length);
+	  	} catch (BadLocationException e) {
+	  		e.printStackTrace();
+	  	}
+	}
+	
+   /*
+    * (non-Javadoc)
+    * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#addUndoRedoEditListener(org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener)
+    */
+    public void addUndoRedoEditListener(UndoRedoEditListener listener) {
+    	undoRedoEditListeners.add(UndoRedoEditListener.class, listener);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#removeCaretListener(org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener)
+     */
+    public void removeUndoRedoEditListener(UndoRedoEditListener listener) {
+    	undoRedoEditListeners.remove(UndoRedoEditListener.class, listener);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#getUndoRedoEditListeners()
+     */
+    public UndoRedoEditListener[] getUndoRedoEditListeners() {
+        return (UndoRedoEditListener[])undoRedoEditListeners.getListeners(UndoRedoEditListener.class);
+    }
+    
+    /**
+     * Notifies all listeners that have registered interest for
+     * notification on this event type.  The event instance 
+     * is lazily created using the parameters passed into 
+     * the fire method.  The listener list is processed in a
+     * last-to-first manner.
+     *
+     * @param e the event
+     * @see EventListenerList
+     */
+    protected void fireUndoRedoEditUpdate(UndoRedoEditEvent e) {
+        // Guaranteed to return a non-null array
+        Object[] listeners = undoRedoEditListeners.getListenerList();
+        
+    	if (listeners != null) {
+    	    for (int i = 1; i < listeners.length; i+=2) {
+    	    	if (listeners[i] instanceof UndoRedoEditListener) {
+                  ((UndoRedoEditListener)listeners[i]).operationExecuted(e);
+              }
+    	    }
+    	}
+    }
+    ////// END OTHER METHODS //////
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/EditableTextDecorator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextArea.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextArea.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextArea.java	(revision 42196)
@@ -0,0 +1,146 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent;
+
+import javax.swing.JTextArea;
+import javax.swing.text.Document;
+
+import org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener;
+
+/**
+ * <p>Text area with options to edit its text easily.</p>
+ * 
+ * @see JTextArea
+ * 
+ * @version 03/01/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class JEditableTextArea extends JTextArea implements IEditableText {
+	private static final long serialVersionUID = -8094155271679157582L;
+
+	// REFERENCE TO THE TEXT EDITOR DECORATOR
+	private EditableTextDecorator editableTextDecorator;
+	// END REFERENCE TO THE TEXT EDITOR DECORATOR
+	
+	/**
+	 * @see JEditableTextArea#JEditableTextArea()
+	 */
+	public JEditableTextArea() {
+		super();
+		
+		initialize();
+	}
+
+	/**
+	 * @see JEditableTextArea#JEditableTextArea(Document, String, int, int)
+	 */
+	public JEditableTextArea(Document doc, String text, int rows, int columns) {
+		super(doc, text, rows, columns);
+		
+		initialize();
+	}
+
+	/**
+	 * @see JEditableTextArea#JEditableTextArea(Document)
+	 */
+	public JEditableTextArea(Document doc) {
+		super(doc);
+		
+		initialize();
+	}
+
+	/**
+	 * @see JEditableTextArea#JEditableTextArea(int, int)
+	 */
+	public JEditableTextArea(int rows, int columns) {
+		super(rows, columns);
+		
+		initialize();
+	}
+
+	/**
+	 * @see JEditableTextArea#JEditableTextArea(String, int, int)
+	 */
+	public JEditableTextArea(String text, int rows, int columns) {
+		super(text, rows, columns);
+		
+		initialize();
+	}
+
+	/**
+	 * @see JEditableTextArea#JEditableTextArea(String)
+	 */
+	public JEditableTextArea(String text) {
+		super(text);
+		
+		initialize();
+	}
+
+	/**
+	 * <p>Fits this component to be ready to be used.</p>
+	 */
+	protected void initialize() {
+		editableTextDecorator = new EditableTextDecorator(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#getUndoRedoLimitActions()
+	 */
+	public int getUndoRedoLimitActions() {
+		return editableTextDecorator.getUndoRedoLimitActions();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#setUndoRedoLimitActions(int)
+	 */
+	public void setUndoRedoLimitActions(int limit) {
+		editableTextDecorator.setUndoRedoLimitActions(limit);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#addUndoRedoEditListener(org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener)
+	 */
+	public void addUndoRedoEditListener(UndoRedoEditListener listener) {
+		editableTextDecorator.addUndoRedoEditListener(listener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#getUndoRedoEditListeners()
+	 */
+	public UndoRedoEditListener[] getUndoRedoEditListeners() {
+		return editableTextDecorator.getUndoRedoEditListeners();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.editabletextcomponent.IEditableText#removeUndoRedoEditListener(org.gvsig.gui.beans.editabletextcomponent.event.UndoRedoEditListener)
+	 */
+	public void removeUndoRedoEditListener(UndoRedoEditListener listener) {
+		editableTextDecorator.removeUndoRedoEditListener(listener);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/JEditableTextArea.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditEvent.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent.event;
+
+
+/**
+ * <p>An event indicating the kind of operation occurred: undo or redo.</p>
+ * 
+ * @version 12/02/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class UndoRedoEditEvent extends java.util.EventObject {
+	public static final short UNDO = 0;
+	public static final short REDO = 1;
+
+	protected transient short myType;
+	protected transient String myOldText;
+	protected transient String myNewText;
+	
+    /**
+     * Constructs an UndoableEditEvent object.
+     *
+     * @param source  the Object that originated the event
+     *                (typically <code>this</code>)
+     * @param type    type of operation done <i>(undo or redo)</i>
+     * @param oldText text before the operation
+     * @param newText text after the operation
+     */
+    public UndoRedoEditEvent(Object source, short type, String oldText, String newText) {
+    	super(source);
+    	myType = type;
+    	myOldText = oldText;
+    	myNewText = newText;
+    }
+    
+    /**
+     * Returns the edit operation identifier value.
+     *
+     * @return the UndoableEdit object encapsulating the edit
+     */
+    public short getType() {
+    	return myType;
+    }
+    
+    /**
+     * Returns the previous text.
+     *
+     * @return the previous text
+     */
+    public String getOldText() {
+    	return myOldText;
+    }
+    
+    /**
+     * Returns the new text.
+     *
+     * @return the new text
+     */
+    public String getNewText() {
+    	return myNewText;
+    }
+
+    /**
+     * Returns a <code>String</code> representation of this <code>UndoRedoEditEvent</code>.
+     *
+     * @return a <code>String</code> representation of this <code>UndoRedoEditEvent</code>
+     */
+    public String toString() {
+        return getClass().getName() + "[source=" + source +
+        ",myType=" + myType +
+    	",myOldText=" + myOldText +
+    	",myNewText=" + myNewText +
+        "]" ;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditListener.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editabletextcomponent.event;
+
+import java.util.EventListener;
+
+/**
+ * <p>The listener interface for receiving events from undo or redo operations on a text edition.</p>
+ * 
+ * <p>The listener object created from that class is then registered with a
+ * component using the component's <code>addUndoRedoEditListener</code> 
+ * method. An event of this kind of operations is generated when an <code>EditableTextDecorator</code>
+ * executes an <code>undo</code> or <code>redo</code> operation. The relevant method in the listener 
+ * object is then invoked, and the <code>UndoRedoEditEvent</code> is passed to it.</p>
+ * 
+ * @see UndoRedoEditEvent
+ * 
+ * @version 12/02/2008
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public interface UndoRedoEditListener extends EventListener {
+    /**
+     * Invoked when an <i>undo</i> or <i>redo</i> operation has been executed.
+     * See the class description for {@link UndoRedoEditEvent UndoRedoEditEvent} for a notification of 
+     * an <i>undo</i> or <i>redo</i> operation executed on an editable text component.
+     */
+    public void operationExecuted(UndoRedoEditEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editabletextcomponent/event/UndoRedoEditListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTable.java	(revision 42196)
@@ -0,0 +1,330 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: JDnDTable.java 13655 2007-09-12 16:28:55Z bsanchez $
+* $Log$
+* Revision 1.3  2007-09-12 16:28:23  bsanchez
+* *** empty log message ***
+*
+* Revision 1.2  2007/08/21 09:56:44  bsanchez
+* - Variable no usada
+*
+* Revision 1.1  2007/08/20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.1  2006/09/21 16:35:12  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans.controls.dnd;
+
+import java.awt.Component;
+import java.awt.Point;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragSource;
+import java.awt.dnd.DragSourceDragEvent;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceEvent;
+import java.awt.dnd.DragSourceListener;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+/**
+ * Preten ser una taula que accepte arrossegar i soltar. Ja mou coses i aix�
+ * per� encara est� en proves.
+ *
+ * La intenci� �s que pugues moure columnes, per� una volta posats, que moga
+ * l�nies i cel�les lliurement.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class JDnDTable extends JTable implements DragSourceListener,
+								DragGestureListener, DropTargetListener{
+  private static final long serialVersionUID = -5479369256188567414L;
+	private CellCoordinates	overCellCoordinates = null;
+	private DragSource	dragSource;
+	private CellCoordinates[]	selectedCells;
+	private boolean	dragging;
+	private CellCoordinates currSelectedCell;
+	static final short FREE_CELL_MOVING = -4;
+	public static final short ONLY_ALLOW_MOVING_ROWS = -2;
+	public static final short ONLY_ALLOW_MOVING_COLUMNS = -1;
+
+
+
+	public JDnDTable() {
+		// Configure ourselves to be a drag source
+		dragSource = new DragSource();
+		dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
+
+		// Configure ourselves to be a drop target
+		new DropTarget(this, this);
+	}
+
+	public JDnDTable( JDnDTableModel model ) {
+        super( model );
+        // Configure ourselves to be a drag source
+        dragSource = new DragSource();
+        dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this);
+
+        // Configure ourselves to be a drop target
+        new DropTarget( this, this );
+    }
+
+	public void dragEnter(DragSourceDragEvent dsde) {
+		Point thisLocation = this.getLocationOnScreen();
+		Point clickLocation = dsde.getLocation();
+
+		Point2D relativeLocation = new Point2D.Double(
+				(clickLocation.getX() - thisLocation.getX()),
+				(clickLocation.getY() - thisLocation.getY()));
+
+		this.overCellCoordinates = locationToCellCoord(relativeLocation);
+	}
+
+	public void setSelectionMode(short mode) {
+		if (mode == ONLY_ALLOW_MOVING_COLUMNS) {
+			setColumnSelectionAllowed(true);
+			setRowSelectionAllowed(false);
+		} else if ( mode == ONLY_ALLOW_MOVING_ROWS) {
+			setColumnSelectionAllowed(false);
+			setRowSelectionAllowed(true);
+		}
+		((JDnDTableModel) this.getModel()).setSelectionMode(mode);
+	}
+	private CellCoordinates locationToCellCoord(Point2D location) {
+
+		int[] ij = new int[2];
+		int width = (int) location.getX();
+		int height = (int) location.getY();
+
+		for (int i = 0; i < this.getColumnCount(); i++) {
+			int iColumnWidth = this.getColumnModel().getColumn(i).getWidth();
+			// it seems to be right, but just in case consideer to use:
+			// ? int iColumnWidth = this.getColumnModel().getColumn(i).getPreferredWidth();
+			if ((width - iColumnWidth) <= 0) {
+				ij[1] = i;
+				break;
+			}
+			width = width - iColumnWidth;
+		}
+
+		// Get the current default height for all rows
+        int jRowHeight = this.getRowHeight();
+		for (int j = 0; j < this.getRowCount(); j++) {
+	        // Determine highest cell in the row
+	        for (int c=0; c<this.getColumnCount(); c++) {
+	            TableCellRenderer renderer = this.getCellRenderer(j, c);
+	            Component comp = this.prepareRenderer(renderer, j, c);
+	            int h = comp.getPreferredSize().height - 2*rowMargin;
+	            jRowHeight = Math.max(jRowHeight, h);
+	        }
+
+	        if ((height - jRowHeight) <= 0) {
+	        	ij[0] = j;
+	        	break;
+	        }
+	        height = height - jRowHeight;
+		}
+
+		return new CellCoordinates(ij[0], ij[1]);
+	}
+
+
+	public void dragOver(DragSourceDragEvent dsde) {
+		// TODO Auto-generated method stub
+	}
+
+	public void dropActionChanged(DragSourceDragEvent dsde) {
+		// TODO Auto-generated method stub
+	}
+
+	public void dragDropEnd(DragSourceDropEvent dsde) {
+		System.out.println("dragDropEnd");
+		this.dragging = false;
+	}
+
+	public void dragExit(DragSourceEvent dse) {
+		this.overCellCoordinates = null;
+	}
+
+	public void dragGestureRecognized(DragGestureEvent dge) {
+		// TODO Auto-generated method stub
+		this.selectedCells = this.getSelectedCells();
+		Object[] selectedObjects = this.getSelectedValues();
+		if (selectedObjects.length>0) {
+			StringBuffer sb = new StringBuffer();
+            for( int i=0; i<selectedObjects.length; i++ ) {
+                sb.append( selectedObjects[ i ].toString() + "\n" );
+            }
+
+            // Build a StringSelection object that the Drag Source
+            // can use to transport a string to the Drop Target
+            StringSelection text = new StringSelection( sb.toString() );
+
+            // Start dragging the object
+            this.dragging = true;
+            dragSource.startDrag( dge, DragSource.DefaultMoveDrop, text, this );
+            System.err.println("Selected objects\n"+sb.toString());
+		}
+	}
+
+	private Object[] getSelectedValues() {
+		ArrayList values = new ArrayList(selectedCells.length);
+		for (int i = 0; i < selectedCells.length; i++) {
+			values.add(this.getValueAt(selectedCells[i].i, selectedCells[i].j));
+		}
+		return values.toArray();
+	}
+
+	private CellCoordinates[] getSelectedCells() {
+		ArrayList cells = new ArrayList();
+		for (int i = 0; i < this.getColumnCount(); i++) {
+			for (int j = 0; j < this.getRowCount(); j++) {
+				if (this.isCellSelected(i, j))
+					cells.add( new CellCoordinates(i,j) );
+			}
+		}
+		return (CellCoordinates[]) cells.toArray(new CellCoordinates[0]);
+	}
+
+	public void dragEnter(DropTargetDragEvent dtde) {
+		// TODO
+		System.out.println("dragEnter");
+	}
+
+	public void dragOver(DropTargetDragEvent dtde) {
+		 // See who we are over...
+		CellCoordinates overCellCoordinates = this.locationToCellCoord( dtde.getLocation());
+        if( overCellCoordinates != null && !overCellCoordinates.equals(this.overCellCoordinates) ) {
+            // If the value has changed from what we were previously over
+            // then change the selected object to the one we are over; this
+            // is a visual representation that this is where the drop will occur
+            this.overCellCoordinates = overCellCoordinates;
+
+            currSelectedCell = this.overCellCoordinates;
+            System.out.println("Current cell  ["+currSelectedCell.i+","+currSelectedCell.j+"]");
+
+        }
+	}
+
+	public void dropActionChanged(DropTargetDragEvent dtde) {
+		// TODO Auto-generated method stub
+	}
+
+	public void drop(DropTargetDropEvent dtde) {
+		try {
+			Transferable transferable = dtde.getTransferable();
+			if( transferable.isDataFlavorSupported( DataFlavor.stringFlavor ) ) {
+				dtde.acceptDrop( DnDConstants.ACTION_MOVE );
+
+				// Find out where the item was dropped
+				CellCoordinates newCellCoord = locationToCellCoord(dtde.getLocation());
+
+				// Get the items out of the transferable object and build an
+				// array out of them...
+				String s = ( String ) transferable.getTransferData( DataFlavor.stringFlavor );
+				StringTokenizer st = new StringTokenizer( s );
+				ArrayList items = new ArrayList();
+				while( st.hasMoreTokens() ) {
+					items.add( st.nextToken() );
+				}
+
+				JDnDTableModel model = (JDnDTableModel) this.getModel();
+
+                // If we are dragging from our this to our list them move the items,
+                // otherwise just add them...
+                if( this.dragging ) {
+                    //model.itemsMoved( newIndex, items );
+                    model.itemsMoved( newCellCoord, this.selectedCells );
+                } else {
+                    model.insertItems( newCellCoord, items );
+                }
+
+                // Update the selected cells
+                /* TODO
+                int[] newIndicies = new int[ items.size() ];
+                for( int i=0; i<items.size(); i++ ) {
+                    newIndicies[ i ] = newIndex + i;
+                }
+                this.setSelectedIndices( newIndicies );
+                */
+                // Reset the over index
+                this.overCellCoordinates = null;
+
+                dtde.getDropTargetContext().dropComplete( true );
+			} else {
+				dtde.rejectDrop();
+			}
+		} catch( IOException exception ) {
+			exception.printStackTrace();
+			System.err.println( "Exception" + exception.getMessage());
+			dtde.rejectDrop();
+		} catch( UnsupportedFlavorException ufException ) {
+			ufException.printStackTrace();
+			System.err.println( "Exception" + ufException.getMessage());
+			dtde.rejectDrop();
+		}
+	}
+
+	public void dragExit(DropTargetEvent dte) {
+		// TODO Auto-generated method stub
+		System.out.println("dragExit");
+	}
+
+}
+
+class CellCoordinates {
+	int i, j;
+
+	public CellCoordinates(int i, int j) {
+		this.i = i;
+		this.j = j;
+	}
+
+	public boolean equals(Object obj) {
+		if (!(obj instanceof CellCoordinates))
+			return false;
+
+		CellCoordinates other = (CellCoordinates) obj;
+		return (this.i == other.i) && (this.j == other.j);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTableModel.java	(revision 42196)
@@ -0,0 +1,137 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: JDnDTableModel.java 13655 2007-09-12 16:28:55Z bsanchez $
+* $Log$
+* Revision 1.2  2007-09-12 16:28:23  bsanchez
+* *** empty log message ***
+*
+* Revision 1.1  2007/08/20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.2  2006/09/27 13:34:57  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/09/21 16:35:12  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans.controls.dnd;
+
+import java.util.ArrayList;
+
+import javax.swing.table.AbstractTableModel;
+
+public class JDnDTableModel extends AbstractTableModel{
+  private static final long serialVersionUID = 7508610018581206163L;
+		public static final short ONLY_ALLOW_MOVING_COLUMNS = JDnDTable.ONLY_ALLOW_MOVING_COLUMNS;
+    public static final short ONLY_ALLOW_MOVING_ROWS = JDnDTable.ONLY_ALLOW_MOVING_ROWS;
+	private static final short FREE_CELL_MOVING = JDnDTable.FREE_CELL_MOVING;
+
+    private short mode = ONLY_ALLOW_MOVING_COLUMNS;
+
+    private String[] colNames;
+    private Object[][] values;
+
+    public JDnDTableModel(Object[][] values, String[] colNames) {
+        super();
+        this.colNames = colNames;
+        this.values = values;
+    }
+
+    public int getColumnCount() {
+        // TODO Auto-generated method stub
+        return colNames.length;
+    }
+
+    public int getRowCount() {
+        // TODO Auto-generated method stub
+        return values[0].length;
+    }
+
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        // TODO Auto-generated method stub
+        return values[rowIndex][columnIndex];
+    }
+
+    public void itemsMoved(CellCoordinates newCellCoord, CellCoordinates[] coordinates) {
+        // TODO Auto-generated method stub
+        System.out.println("Model itemsMoved");
+
+
+        switch (mode) {
+        case ONLY_ALLOW_MOVING_COLUMNS:
+
+        	// last selected cell defines which column
+        	int srcColumnIndex = coordinates[coordinates.length-1].i;
+        	int dstColumnIndex = newCellCoord.i;
+        	System.out.println("movent columna "+ srcColumnIndex + " a columna "+dstColumnIndex);
+            for (int i = 0; i < getRowCount(); i++) {
+            	CellCoordinates srcCoord = new CellCoordinates(i, srcColumnIndex);
+            	CellCoordinates dstCoord = new CellCoordinates(i, dstColumnIndex);
+            	swapCells(srcCoord, dstCoord);
+            }
+            swapColumnNames(dstColumnIndex, srcColumnIndex);
+            break;
+        case ONLY_ALLOW_MOVING_ROWS:
+            // last selected cell defines which row
+            int rowIndex = coordinates[coordinates.length-1].i;
+            coordinates = new CellCoordinates[getColumnCount()];
+            for (int i = 0; i < coordinates.length; i++) {
+                coordinates[i].i = rowIndex;
+                coordinates[i].j = i;
+            }
+            newCellCoord.j = 0;
+            break;
+        case FREE_CELL_MOVING:
+        	// TODO implement it
+        	break;
+        }
+        this.fireTableDataChanged();
+    }
+
+    private void swapColumnNames(int ind1, int ind2) {
+        String aux = colNames[ind2];
+        colNames[ind2] = colNames[ind1];
+        colNames[ind1] = aux;
+    }
+
+    private void swapCells(CellCoordinates cell1, CellCoordinates cell2) {
+    	Object aux = values[cell1.i][cell1.j];
+    	values[cell1.i][cell1.j] = values[cell2.i][cell2.j];
+    	values[cell2.i][cell2.j] = aux;
+    }
+
+    public void insertItems(CellCoordinates cellCoord, ArrayList items) {
+        // TODO Auto-generated method stub
+        System.out.println("Model inserItems");
+    }
+
+	public void setSelectionMode(short mode) {
+		this.mode = mode;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDList.java	(revision 42196)
@@ -0,0 +1,315 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.controls.dnd;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragSource;
+import java.awt.dnd.DragSourceDragEvent;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceEvent;
+import java.awt.dnd.DragSourceListener;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+import javax.swing.JList;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+ *
+ * $Id: JDnDList.java 13655 2007-09-12 16:28:55Z bsanchez $
+ * $Log$
+ * Revision 1.3  2007-09-12 16:28:23  bsanchez
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/08/21 09:57:17  bsanchez
+ * - Variable no usada
+ *
+ * Revision 1.1  2007/08/20 08:34:46  evercher
+ * He fusionado LibUI con LibUIComponents
+ *
+ * Revision 1.2  2006/03/23 10:37:11  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/03/22 11:18:29  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/02/28 15:25:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2.2.3  2006/01/31 16:25:24  jaume
+ * correcciones de bugs
+ *
+ * Revision 1.3  2006/01/26 16:07:14  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2.2.1  2006/01/26 12:59:33  jaume
+ * 0.5
+ *
+ * Revision 1.2  2006/01/24 14:36:33  jaume
+ * This is the new version
+ *
+ * Revision 1.1.2.1  2006/01/10 13:11:38  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2005/12/29 08:26:54  jaume
+ * some gui issues where fixed
+ *
+ * Revision 1.1.2.1  2005/12/19 18:12:35  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+/**
+ * <p>
+ * A JList that allows drag'n'drop elements. It accepts changing position of
+ * one or more elements within the list, adding other from other JDnDList's,
+ * removing sets of selected items, and other features.
+ * </p>
+ * <p>
+ * In order to use this features you have to use a JDnDListModel as the list's
+ * model.
+ * </p>
+ * jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class JDnDList extends JList implements DragSourceListener, DragGestureListener, DropTargetListener{
+  private static final long serialVersionUID = -9071985815215584362L;
+		private DragSource dragSource;
+    private boolean    dragging;
+    private int overIndex;
+    private int[] selectedIndices;
+    
+    
+    public JDnDList() {
+        new DropTarget (this, this);
+        dragSource = new DragSource();
+        dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this);
+      }
+    
+    public JDnDList( JDnDListModel model ) {
+        super( model );
+        // Configure ourselves to be a drag source
+        dragSource = new DragSource();
+        dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this);
+        
+        // Configure ourselves to be a drop target
+        new DropTarget( this, this );
+    }
+    
+    public void dragGestureRecognized(DragGestureEvent dge)  {
+        this.selectedIndices = this.getSelectedIndices();
+        Object[] selectedObjects = this.getSelectedValues();
+        if( selectedObjects.length > 0 ) {
+            StringBuffer sb = new StringBuffer();
+            for( int i=0; i<selectedObjects.length; i++ ) {
+                sb.append( selectedObjects[ i ].toString() + "\n" );
+            }
+            
+            // Build a StringSelection object that the Drag Source
+            // can use to transport a string to the Drop Target
+            StringSelection text = new StringSelection( sb.toString() ); 
+            
+            // Start dragging the object 
+            this.dragging = true;
+            dragSource.startDrag( dge, DragSource.DefaultMoveDrop, text, this );
+        }
+    }
+    
+    public void dragDropEnd(DragSourceDropEvent dsde) {
+        this.dragging = false;
+    }
+    
+    public void dragExit(DropTargetEvent dte) {
+        this.overIndex = -1;
+    }
+    public void dragEnter(DropTargetDragEvent dtde) {
+        this.overIndex = this.locationToIndex( dtde.getLocation() );
+        this.setSelectedIndex( this.overIndex );
+    }
+    public void dragOver(DropTargetDragEvent dtde) {
+        // See who we are over...
+        int overIndex = this.locationToIndex( dtde.getLocation() );
+        if( overIndex != -1 && overIndex != this.overIndex ) {
+            // If the value has changed from what we were previously over
+            // then change the selected object to the one we are over; this 
+            // is a visual representation that this is where the drop will occur
+            this.overIndex = overIndex;
+            this.setSelectedIndex( this.overIndex );
+        }
+    }
+    
+    public void drop(DropTargetDropEvent dtde) {
+        try {
+            Transferable transferable = dtde.getTransferable();
+            if( transferable.isDataFlavorSupported( DataFlavor.stringFlavor ) ) {
+                dtde.acceptDrop( DnDConstants.ACTION_MOVE );
+                
+                // Find out where the item was dropped
+                int newIndex = this.locationToIndex( dtde.getLocation() );
+                
+                // Get the items out of the transferable object and build an
+                // array out of them...
+                String s = ( String )transferable.getTransferData( DataFlavor.stringFlavor );
+                StringTokenizer st = new StringTokenizer( s );
+                ArrayList items = new ArrayList();
+                while( st.hasMoreTokens() ) {
+                    items.add( st.nextToken() );
+                }
+                JDnDListModel model = ( JDnDListModel )this.getModel();
+                
+                // If we are dragging from our this to our list them move the items,
+                // otherwise just add them...
+                if( this.dragging ) {
+                    //model.itemsMoved( newIndex, items );
+                    model.itemsMoved( newIndex, this.selectedIndices );
+                } else {
+                    model.insertItems( newIndex, items );
+                }
+                
+                // Update the selected indicies
+                int[] newIndicies = new int[ items.size() ];
+                for( int i=0; i<items.size(); i++ ) {
+                    newIndicies[ i ] = newIndex + i;
+                }
+                this.setSelectedIndices( newIndicies );
+                
+                // Reset the over index
+                this.overIndex = -1;
+                
+                dtde.getDropTargetContext().dropComplete( true );
+            } else {
+                dtde.rejectDrop();
+            }
+        } catch( IOException exception ) {
+            exception.printStackTrace();
+            System.err.println( "Exception" + exception.getMessage());
+            dtde.rejectDrop();
+        } catch( UnsupportedFlavorException ufException ) {
+            ufException.printStackTrace();
+            System.err.println( "Exception" + ufException.getMessage());
+            dtde.rejectDrop();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.dnd.DragSourceListener#dragEnter(java.awt.dnd.DragSourceDragEvent)
+     */
+    public void dragEnter(DragSourceDragEvent dsde) {
+        
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.dnd.DragSourceListener#dragOver(java.awt.dnd.DragSourceDragEvent)
+     */
+    public void dragOver(DragSourceDragEvent dsde) {
+        
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.dnd.DragSourceListener#dropActionChanged(java.awt.dnd.DragSourceDragEvent)
+     */
+    public void dropActionChanged(DragSourceDragEvent dsde) {
+        
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.dnd.DragSourceListener#dragExit(java.awt.dnd.DragSourceEvent)
+     */
+    public void dragExit(DragSourceEvent dse) {
+        
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.dnd.DropTargetListener#dropActionChanged(java.awt.dnd.DropTargetDragEvent)
+     */
+    public void dropActionChanged(DropTargetDragEvent dtde) {
+        
+    }
+    
+    /**
+     * Constructs a <b>JDnDListModel</b> from an array of objects and then applies setModel to it. 
+     * @param listData an array of Objects containing the items to display in the list
+     * @see	setModel
+     * @author jaume
+     */
+    public void setListData(Object[] obj) {
+    	JDnDListModel model = new JDnDListModel();
+		for (int i = 0; i < obj.length; i++) {
+			model.addElement(obj[i]);
+		}
+		this.setModel(model);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDListModel.java	(revision 42196)
@@ -0,0 +1,230 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: JDnDListModel.java 13655 2007-09-12 16:28:55Z bsanchez $
+* $Log$
+* Revision 1.2  2007-09-12 16:28:23  bsanchez
+* *** empty log message ***
+*
+* Revision 1.1  2007/08/20 08:34:46  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.1  2006/03/22 11:18:29  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/02/28 15:25:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2.2.3  2006/01/31 16:25:24  jaume
+* correcciones de bugs
+*
+* Revision 1.3  2006/01/26 16:07:14  jaume
+* *** empty log message ***
+*
+* Revision 1.2.2.1  2006/01/26 12:59:33  jaume
+* 0.5
+*
+* Revision 1.2  2006/01/24 14:36:33  jaume
+* This is the new version
+*
+* Revision 1.1.2.2  2006/01/17 12:55:40  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2006/01/10 13:11:38  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2005/12/29 08:26:54  jaume
+* some gui issues where fixed
+*
+* Revision 1.1.2.2  2005/12/22 16:46:00  jaume
+* puede borrar m�ltiples intervalos de entradas dentro de la lista
+*
+* Revision 1.1.2.1  2005/12/19 18:12:35  jaume
+* *** empty log message ***
+*
+*
+*/
+/**
+ * 
+ */
+package org.gvsig.gui.beans.controls.dnd;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.swing.AbstractListModel;
+
+
+/**
+ * List model to use in junction the JDnDList. Contains some useful tools.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class JDnDListModel extends AbstractListModel {
+  private static final long serialVersionUID = 8998356167841647319L;
+		private ArrayList items = new ArrayList();
+    /**
+     * Inserts a collection of items before the specified index
+     */
+    public void insertItems( int index, Collection objects ) {
+        // Handle the case where the items are being added to the end of the list
+        if( index == -1 ) {
+            // Add the items
+            for( Iterator i = objects.iterator(); i.hasNext(); ) {
+                String item = ( String )i.next();
+                addElement(items.size(), item );
+            }
+        } else {
+            // Insert the items
+            for( Iterator i = objects.iterator(); i.hasNext(); ) {
+                Object item = i.next();
+                insertElement( index++, item );
+            }
+        }
+        
+        // Tell the list to update itself
+        this.fireContentsChanged( this, 0, this.items.size() - 1 );
+    }
+    
+    /**
+     * Inserts a new element into the list at the position mentioned in the index param.
+     * @param index
+     * @param item
+     */
+    public boolean insertElement(int index, Object element) {
+        if (element == null) {
+            return false;
+        }
+        for (int i = 0; i < items.size(); i++) {
+            
+            if (items.get(i).equals(items)) {
+                return false;
+            }
+        }
+        
+        this.items.add(index, element);
+        return true;
+    }
+
+    /**
+     * Adds a new element at the position indicated by pos of the list.
+     * @param j 
+     * @param pos 
+     */
+    public boolean addElement(int j, Object element) {
+        if (element == null) {
+            return false;
+        }
+        
+        for (int i = 0; i < items.size(); i++) {
+            if (items.get(i).equals(items)) {
+                return false;
+            }
+        }
+        this.items.add(j, element);
+        fireContentsChanged(this, items.size() - 1, items.size() - 1);
+        return true;
+    }
+    
+    /**
+     * Adds a new element at the position indicated by pos of the list.
+     * @param j 
+     * @param pos 
+     */
+    public boolean addElement(Object element) {
+        return addElement(items.size(), element);
+    }
+    
+    /**
+     * Removes every elements contained in the collection from this list.
+     */
+    public void delElements(Collection c) {
+        items.removeAll(c);
+        this.fireContentsChanged(this, 0, items.size());
+    }
+    
+    /**
+     * Removes the items of the list mentioned by the index array passed as argument.
+     * @param indices
+     */
+    public void delIndices(int[] indices){
+        int removed = 0;
+        for (int i = 0; i < indices.length; i++) {
+            items.remove(indices[i]-removed);
+            removed++;
+        }
+    }
+
+    public void itemsMoved( int newIndex, int[] indicies ) {
+        
+        // Copy the objects to a temporary ArrayList
+        ArrayList objects = new ArrayList();
+        for( int i=0; i<indicies.length; i++ ) {
+            objects.add( this.items.get( indicies[ i ] ) );
+        }
+        
+        // Delete the objects from the list
+        for( int i=indicies.length-1; i>=0; i-- ) {
+            this.items.remove( indicies[ i ] );
+        }
+        
+        // Insert the items at the new location
+        insertItems( newIndex, objects );
+    }
+    
+    /* (non-Javadoc)
+     * @see javax.swing.ListModel#getSize()
+     */
+    public int getSize() {
+        return items.size();
+    }
+    
+    /* (non-Javadoc)
+     * @see javax.swing.ListModel#getElementAt(int)
+     */
+    public Object getElementAt(int index) {
+        return items.get(index);
+    }
+    
+    /**
+     * Removes any item currently contained by this list.
+     *
+     */
+    public void clear() {
+        items.clear();
+        fireContentsChanged(this, 0, 0);
+    }
+    
+    /**
+     * Returns an ArrayList containing the elements of this list.
+     */
+    public ArrayList getElements() {
+        return items;
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/dnd/JDnDListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScale.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScale.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScale.java	(revision 42196)
@@ -0,0 +1,300 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.controls.comboscale;
+
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.controls.IControl;
+
+public class ComboScale extends JPanel implements IControl {
+
+    private static final long serialVersionUID = 6483498713300082876L;
+
+    private JLabel jLabel = null;
+
+    private JComboBox jComboBox = null;
+
+    private List<ActionListener> actionCommandListeners =
+        new ArrayList<ActionListener>();
+
+    private boolean bDoCallListeners = true;
+
+    private boolean isScaleCombo;
+
+    static private int eventId = Integer.MIN_VALUE;
+
+    private Long lastValue = null;
+    
+    // jaume
+    private class ComboScaleItem {
+
+        private long value;
+
+        public ComboScaleItem(long itemScale) {
+            this.value = itemScale;
+        }
+
+        public String toString() {
+            return NumberFormat.getNumberInstance().format(value);
+        }
+
+        public boolean equals(Object obj) {
+            return obj instanceof ComboScaleItem
+                && ((ComboScaleItem) obj).getValue() == value;
+        }
+
+        public long getValue() {
+            return value;
+        }
+    }
+
+    /**
+     * This is the default constructor
+     */
+    public ComboScale() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 0, 0);
+        jLabel = new JLabel();
+        jLabel.setText("1:");
+        this.setLayout(flowLayout);
+        // this.setSize(155, 16);
+        this.add(jLabel, null);
+        this.add(getJComboBox(), null);
+    }
+
+    /**
+     * This method initializes jComboBox
+     * 
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getJComboBox() {
+        if (jComboBox == null) {
+            jComboBox = new JComboBox();
+            jComboBox.setEditable(true);
+            jComboBox.setMaximumRowCount(5);
+            jComboBox.setBackground(java.awt.SystemColor.window);
+            jComboBox
+                .setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
+            jComboBox.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    if (e.getActionCommand().equals("comboBoxChanged")) {
+
+                        // callActionCommandListeners(((Long)jComboBox.getSelectedItem()).longValue());
+                        // setScale(((Long)jComboBox.getSelectedItem()).longValue());
+                        Object item = jComboBox.getSelectedItem();
+                        long scale = 0;
+                        if (item instanceof String) {
+                            StringBuffer sb = new StringBuffer((String) item);
+                            // remove any point in the number
+                            final String digits = "0123456789";
+                            int i = sb.charAt(0) == '-' ? 1 : 0;
+                            BitSet deleteChars = new BitSet();
+                            while (i < sb.length()) {
+                                if (digits.indexOf(sb.charAt(i)) == -1)
+                                    deleteChars.set(i);
+                                i++;
+                            }
+                            for (int k = deleteChars.size(); k >= 0; k--) {
+                                if (deleteChars.get(k))
+                                    sb.deleteCharAt(k);
+                            }
+                            jComboBox.removeItem(item);
+                            try {
+                                scale = Long.parseLong(sb.toString());
+                            } catch (NumberFormatException e1) {
+                            }
+                        } else {
+                            scale =
+                                ((ComboScaleItem) jComboBox.getSelectedItem())
+                                    .getValue();
+                        }
+                        insertScaleIfNotPresent(scale);
+                        callActionCommandListeners(scale);
+                    }
+                }
+            });
+        }
+        return jComboBox;
+    }
+    
+	public Object getValue() {
+		return lastValue;
+	}
+
+    public void setItems(long[] items) {
+        ComboScaleItem[] scales = new ComboScaleItem[items.length];
+        for (int i = 0; i < items.length; i++) {
+            scales[i] = new ComboScaleItem(items[i]);
+        }
+        DefaultComboBoxModel newModel = new DefaultComboBoxModel(scales);
+        getJComboBox().setModel(newModel);
+    }
+
+    /**
+     * This funcion ONLY sets the text in combo. It will NOT call listeners.
+     * 
+     * @param scale
+     */
+    public void setScale(long item) {
+        bDoCallListeners = false;
+        getJComboBox().setSelectedItem(new ComboScaleItem(item));
+        bDoCallListeners = true;
+    }
+
+    /**
+     * @param scale
+     */
+    private void insertScaleIfNotPresent(long scale) {
+        // Si viene de un setScale, no insertamos la escala en el combo
+        if (!bDoCallListeners)
+            return;
+
+        DefaultComboBoxModel model =
+            (DefaultComboBoxModel) jComboBox.getModel();
+        // model=new DefaultComboBoxModel();
+        boolean inserted = false;
+        for (int i = 0; i < model.getSize(); i++) {
+            ComboScaleItem itemScale = (ComboScaleItem) model.getElementAt(i);
+            if (scale == itemScale.getValue()) {
+                inserted = true;
+                break;
+            }
+        }
+        if (!inserted) {
+            for (int i = 0; i < model.getSize(); i++) {
+                ComboScaleItem itemScale =
+                    (ComboScaleItem) model.getElementAt(i);
+                if (scale < itemScale.getValue()) {
+                    model.insertElementAt(new ComboScaleItem(scale), i);
+                    inserted = true;
+                    break;
+                }
+            }
+            if (!inserted)
+                model.addElement(new ComboScaleItem(scale));
+        }
+        jComboBox.setSelectedItem(new ComboScaleItem(scale));
+        isScaleCombo = true;
+    }
+
+    private void callActionCommandListeners(long scale) {
+        if (!bDoCallListeners)
+            return;
+
+        lastValue = new Long(scale);
+        Iterator<ActionListener> acIterator = actionCommandListeners.iterator();
+        while (acIterator.hasNext()) {
+            ActionListener listener = acIterator.next();
+            listener.actionPerformed(new ActionEvent(this, eventId,"view-change-scale"));
+        }
+        eventId++;
+    }
+
+    public void addActionListener(ActionListener listener) {
+        if (!actionCommandListeners.contains(listener))
+            actionCommandListeners.add(listener);
+    }
+
+    public void removeActionListener(ActionListener listener) {
+        actionCommandListeners.remove(listener);
+    }
+
+    /**
+     * Returns the current selected item.
+     * 
+     * @return The value of the selected scale, or -1 if there was an invalid
+     *         value (ie. not long value).
+     */
+    public long getScale() {
+        return ((ComboScaleItem) jComboBox.getSelectedItem()).getValue();
+    }
+
+    /**
+     * Sets the label to be displayed on the left of the combo
+     */
+    public void setLabel(String label) {
+        jLabel.setText(label);
+    }
+
+    /**
+     * Gets the label
+     */
+    public String getLabel() {
+        return jLabel.getText();
+    }
+
+    public Object setValue(Object value) {
+        if (isScaleCombo) {
+            isScaleCombo = false;
+            return null;
+        }
+        try {
+            long scale = Long.parseLong((String) value);
+
+            if (scale < 0)
+                return null;
+
+            ComboScaleItem item = new ComboScaleItem(scale);
+            if (item.equals(jComboBox.getSelectedItem()))
+                return item;
+            this.setScale(scale);
+            return item;
+        } catch (NumberFormatException ex) {
+            // don't change the status if the provided value was not valid
+            return null;
+        }
+    }
+
+    public void setEnabled(boolean enabled) {
+        boolean oldEnabled = jComboBox.isEnabled();
+        jComboBox.setEnabled(enabled);
+        jComboBox.firePropertyChange("enabled", oldEnabled, enabled);
+        if (enabled != oldEnabled) {
+            jComboBox.repaint();
+        }
+    }
+
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScale.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScaleListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScaleListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScaleListener.java	(revision 42196)
@@ -0,0 +1,29 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.controls.comboscale;
+
+public interface ComboScaleListener {
+
+	public void changeScale(long l);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/comboscale/ComboScaleListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/IControl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/IControl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/IControl.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.controls;
+
+import java.awt.event.ActionListener;
+
+/**
+ * This interface models a control to be used in Andami.
+ *
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public interface IControl {
+	/**
+	 *  Adds an ActionListener to the control
+	 *
+	 * @param listener
+	 */
+	public void addActionListener(ActionListener listener);
+
+	/**
+	 *  Removes an ActionListener from the control
+	 *
+	 * @param listener
+	 */
+	public void removeActionListener(ActionListener listener);
+
+	/**
+	 *  Sets the value of the control. It may mean different things for
+	 *  different kinds of controls.
+	 *
+	 *  @return The value which was set, or null if the value was not valid
+	 *  for this control
+	 */
+	public Object setValue(Object value);
+
+	public Object getValue();
+
+	/**
+	 * Gets the name of the control, used to identify it
+	 * @return the name of the control
+	 */
+	public String getName();
+
+	/**
+	 * Sets the name of the control, used to identify it
+	 *
+	 * @param name
+	 * @return
+	 */
+	public void setName(String name);
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/IControl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonEvent.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.controls.combobutton;
+
+import java.util.EventObject;
+/**
+ *
+ * @version 07/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ComboButtonEvent extends EventObject {
+	private static final long serialVersionUID = -1649548367781607532L;
+
+	public ComboButtonEvent(Object source) {
+		super(source);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ModeToggleButtonGroup.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ModeToggleButtonGroup.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ModeToggleButtonGroup.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* 
+GeoGebra - Dynamic Geometry and Algebra
+Copyright Markus Hohenwarter, http://www.geogebra.at
+
+This file is part of GeoGebra.
+
+This program is free software; you can redistribute it and/or modify it 
+under the terms of the GNU General Public License as published by 
+the Free Software Foundation; either version 2 of the License, or 
+(at your option) any later version.
+*/
+package org.gvsig.gui.beans.controls.combobutton;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JPopupMenu;
+
+public class ModeToggleButtonGroup extends ButtonGroup {
+  private static final long serialVersionUID = 7060814534660638147L;
+	private JPopupMenu activePopMenu;
+	
+	public void setActivePopupMenu(JPopupMenu popMenu) {
+		activePopMenu = popMenu;			
+	}	
+	
+	public JPopupMenu getActivePopupMenu() {
+		return activePopMenu;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ModeToggleButtonGroup.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonListener.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.controls.combobutton;
+
+import java.util.EventListener;
+/**
+ *
+ * @version 07/08/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public interface ComboButtonListener extends EventListener {
+	/**
+	 * Evento que se dispara cuando cambia el valor del componente.
+	 * @param e
+	 */
+	public void actionComboButtonClicked(ComboButtonEvent e);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButtonListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButton.java	(revision 42196)
@@ -0,0 +1,374 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.controls.combobutton;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.geom.GeneralPath;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JButton;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import org.gvsig.gui.beans.controls.IControl;
+/**
+ * Boton destinado a ser usado en un JToolBar que ofrece un desplegable de 
+ * items de menu.
+ *
+ * @version 06/02/2008
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class ComboButton extends JButton implements IControl, MouseListener, MouseMotionListener, ActionListener {
+	private static final long serialVersionUID = -1412453774004951410L;
+	private JPopupMenu popMenu         = new JPopupMenu();
+	private static int BORDER          = 6;
+	private int        offsetTrianglex = -4;
+	private int        offsetTriangley = -4;
+	private int        triangleWidth   = 8;
+	private int        triangleHeight  = 7;
+	private boolean    showToolTipText = true;
+	private boolean    showMenuAlways  = true;
+	private boolean    alwaysMenuOnClick = false;
+	
+	private ArrayList<ComboButtonListener> actionCommandListeners = new ArrayList<ComboButtonListener>();
+	
+	/**
+	 * Indica si en la siguiente agregacion de un item ha de llevar un separador
+	 * previo
+	 */
+	private boolean nextSeparator = false;
+
+	public ComboButton() {
+		addMouseListener(this);
+		addMouseMotionListener(this);
+		addActionListener(this);
+	}
+	
+	/**
+	 * @deprecated Mantego el metodo para posibles compatibilidades
+	 * @param mode
+	 * @return
+	 */
+	public boolean selectMode(int mode) {
+		String modeText = mode + "";
+
+		for (int i = 0; i < popMenu.getSubElements().length; i++) {
+			JMenuItem mi = (JMenuItem) popMenu.getSubElements()[i];
+			// found item for mode?
+			if (mi.getActionCommand().equals(modeText)) {
+				selectItem(mi);
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private void selectItem(JMenuItem mi) {
+		setIcon(mi.getIcon());
+		setToolTipText(mi.getText());
+		setActionCommand(mi.getActionCommand());
+//		requestFocus();
+	}
+	
+	public void setSelectedItem(String actionCommand) {
+		for (int i = 0; i < popMenu.getSubElements().length; i++) {
+			if (((JMenuItem) popMenu.getSubElements()[i].getComponent()).getActionCommand().equals(actionCommand)) {
+				selectItem((JMenuItem) popMenu.getSubElements()[i].getComponent());
+				break;
+			}
+		}
+//		popMenu.requestFocus();
+	}
+
+	/**
+	 * Borra todos los items de la lista desplegable
+	 */
+	public void clearButtons() {
+		popMenu.removeAll();
+	}
+	
+	/**
+	 * A�ade un JMenuItem al menu desplegable
+	 * @param menu
+	 */
+	public void addButton(JButton menu) {
+		JMenuItem mi = new JMenuItem();
+		mi.setText(menu.getText());
+		mi.setIcon(menu.getIcon());
+		mi.setEnabled(menu.isEnabled());
+		mi.setActionCommand(menu.getActionCommand());
+		mi.addActionListener(this);
+		
+		if (nextSeparator) {
+			popMenu.addSeparator();
+			nextSeparator = false;
+		}
+
+		popMenu.add(mi);
+
+		if (popMenu.getSubElements().length == 1) {
+			// init tbutton
+			setIcon(menu.getIcon());
+			setActionCommand(menu.getActionCommand());
+			setToolTipText(menu.getText());
+		}
+	}
+
+	/**
+	 * Indica que en la siguiente agregaci�n de un item al menu ha de llevar un
+	 * separador
+	 */
+	public void addSeparator() {
+		nextSeparator = true;
+	}
+
+	/**
+	 * Muestra/Oculta el menu
+	 * @param flag
+	 */
+	public void setPopupVisible(boolean flag) {
+		if (flag) {
+			if (popMenu.isShowing())
+				return;
+			popMenu.show(this, 0, getHeight());
+		} else {
+			popMenu.setVisible(false);
+		}
+	}
+
+	public void setAction(ActionEvent action) {
+		for (int i = 0; i < popMenu.getSubElements().length; i++) {
+			if (((JMenuItem) popMenu.getSubElements()[i].getComponent()).getActionCommand().equals(action.getActionCommand())) {
+				((JMenuItem) popMenu.getSubElements()[i].getComponent()).doClick();
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.controls.IControl#setValue(java.lang.Object)
+	 */
+	public Object setValue(Object value) {
+		return value;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(ActionEvent e) {
+		for (int i = 0; i < popMenu.getSubElements().length; i++) {
+			if (e.getSource() instanceof JMenuItem && popMenu.getSubElements()[i] == e.getSource()) {
+				selectItem((JMenuItem) e.getSource());
+				callComboButtonClickedListeners();
+				return;
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
+	 */
+	public void paint(Graphics g) {
+		super.paint(g);
+
+		Graphics2D g2 = (Graphics2D) g;
+		if (showMenuAlways || popMenu.getSubElements().length > 1) {
+			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+			// draw little arrow (for popup menu)
+			drawTriangle(g2);
+		}
+	}
+
+	private void drawTriangle(Graphics2D g2) {
+		GeneralPath gp = new GeneralPath();
+
+		int x = 0;
+		if (offsetTrianglex < 0)
+			x = this.getWidth() + offsetTrianglex - BORDER;
+		else
+			x = offsetTrianglex + BORDER;
+
+		int y = 0;
+		if (offsetTriangley < 0)
+			y = this.getHeight() + offsetTriangley - BORDER;
+		else
+			y = offsetTriangley + BORDER;
+
+		gp.moveTo(x, y);
+		gp.lineTo(x + triangleWidth, y);
+		gp.lineTo(x + (triangleWidth / 2), y + triangleHeight);
+		gp.closePath();
+
+		g2.setColor(Color.white);
+		g2.fill(gp);
+		g2.setColor(new Color(0, 0, 0, 130));
+		g2.draw(gp);
+	}
+
+	private boolean popupTriangleClicked(int x, int y) {
+		if (alwaysMenuOnClick)
+			return true;
+
+		if (!showMenuAlways && (popMenu.getSubElements().length <= 1))
+			return false;
+
+		if (offsetTrianglex < 0) {
+			if (x < (this.getWidth() - BORDER + offsetTrianglex))
+				return false;
+		} else {
+			if (x > (BORDER + offsetTrianglex + triangleWidth))
+				return false;
+		}
+	
+		if (offsetTriangley < 0) {
+			if (y < (this.getHeight() - BORDER + offsetTriangley))
+				return false;
+		} else {
+			if (y > (BORDER + offsetTriangley + triangleHeight))
+				return false;
+		}
+
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(MouseEvent e) {
+		boolean showPopup = popupTriangleClicked(e.getX(), e.getY());
+		if (showPopup)
+			setPopupVisible(showPopup);
+		else
+			callComboButtonClickedListeners();
+	}
+	
+	/**
+	 * A�adir un listener a la lista de eventos
+	 * @param listener
+	 */
+	public void addComboButtonClickedListener(ComboButtonListener listener) {
+		if (!actionCommandListeners.contains(listener))
+			actionCommandListeners.add(listener);
+	}
+
+	/**
+	 * Borrar un listener de la lista de eventos
+	 * @param listener
+	 */
+	public void removeComboButtonClickedListener(ComboButtonListener listener) {
+		actionCommandListeners.remove(listener);
+	}
+	
+	/**
+	 * Invocar a los eventos asociados al componente
+	 */
+	private void callComboButtonClickedListeners() {
+		Iterator<ComboButtonListener> acIterator = actionCommandListeners.iterator();
+		while (acIterator.hasNext()) {
+			ComboButtonListener listener = acIterator.next();
+			listener.actionComboButtonClicked(new ComboButtonEvent(this));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#getToolTipText()
+	 */
+	public String getToolTipText() {
+		if (showToolTipText)
+			return super.getToolTipText();
+		return null;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+	 */
+	public void mouseDragged(MouseEvent e) {
+		if (popupTriangleClicked(e.getX(), e.getY()))
+			setPopupVisible(true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+	 */
+	public void mouseMoved(MouseEvent e) {
+		showToolTipText = !popMenu.isShowing();
+	}
+
+	/**
+	 * Devuelve si esta visible siempre
+	 * @return the showMenuAlways
+	 */
+	public boolean isShowMenuAlways() {
+		return showMenuAlways;
+	}
+
+	/**
+	 * Especifica si el menu se ha de visualizar siempre o solo cuando haya mas de
+	 * un item
+	 * @param showMenuAlways the showMenuAlways to set
+	 */
+	public void setShowMenuAlways(boolean showMenuAlways) {
+		this.showMenuAlways = showMenuAlways;
+	}
+	
+	public void mouseReleased(MouseEvent e) {
+		
+	}
+	public void mouseClicked(MouseEvent e) {}
+	public void mouseEntered(MouseEvent arg0) {}
+	public void mouseExited(MouseEvent arg0) {}
+
+	/**
+	 * @return the alwaysMenuOnClick
+	 */
+	public boolean isAlwaysMenuOnClick() {
+		return alwaysMenuOnClick;
+	}
+
+	/**
+	 * @param alwaysMenuOnClick the alwaysMenuOnClick to set
+	 */
+	public void setAlwaysMenuOnClick(boolean alwaysMenuOnClick) {
+		this.alwaysMenuOnClick = alwaysMenuOnClick;
+	}
+	
+	public Object getValue() {
+		return null;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/combobutton/ComboButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/MultiLineToolTip.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/MultiLineToolTip.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/MultiLineToolTip.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.controls;
+
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JToolTip;
+import javax.swing.SwingUtilities;
+import javax.swing.plaf.metal.MetalToolTipUI;
+/**
+ * <p>
+ * Allows using more than one line length tooltips. It also automatically
+ * calculates the size of the screen rectangle used and the preferred sized up
+ * on the contained text. It does NOT format the text to fit within a given
+ * size. The user must provide the text as she/he wishes to show it.
+ * </p>
+ * <p>
+ * It means that new line characters must be placed in the string as well as it
+ * was a System.out.println statement.
+ * </p>
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class MultiLineToolTip extends JToolTip {
+	private static final long serialVersionUID = -3727623742187461577L;
+
+	public MultiLineToolTip() {
+		setUI(new MultiLineToolTipUI());
+	}
+
+	private class MultiLineToolTipUI extends MetalToolTipUI {
+		private String[] strs;
+
+		public void paint(Graphics g, JComponent c) {
+			FontMetrics metrics = g.getFontMetrics();
+			Dimension size = c.getSize();
+			g.setColor(c.getBackground());
+			g.fillRect(0, 0, size.width, size.height);
+			g.setColor(c.getForeground());
+			if (strs != null) {
+				for (int i = 0; i < strs.length; i++) {
+					g.drawString(strs[i], 3, (metrics.getHeight()) * (i + 1));
+				}
+			}
+		}
+
+		public Dimension getPreferredSize(JComponent c) {
+			FontMetrics metrics = c.getFontMetrics(c.getFont());
+			String tipText = ((JToolTip) c).getTipText();
+			if (tipText == null) {
+				tipText = "";
+			}
+			BufferedReader br = new BufferedReader(new StringReader(tipText));
+			String line;
+			int _maxWidth = 0;
+			Vector v = new Vector();
+			try {
+				while ((line = br.readLine()) != null) {
+					int width = SwingUtilities.computeStringWidth(metrics, line);
+					_maxWidth = (_maxWidth < width) ? width : _maxWidth;
+					v.addElement(line);
+				}
+			} catch (IOException ex) {
+				ex.printStackTrace();
+			}
+			int lines = v.size();
+			if (lines < 1) {
+				strs = null;
+				lines = 1;
+			} else {
+				strs = new String[lines];
+				int i = 0;
+				for (Enumeration e = v.elements(); e.hasMoreElements(); i++) {
+					strs[i] = (String) e.nextElement();
+				}
+			}
+			int height = metrics.getHeight() * lines;
+			return new Dimension(_maxWidth + 6, height + 4);
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/MultiLineToolTip.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/label/Label.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/label/Label.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/label/Label.java	(revision 42196)
@@ -0,0 +1,70 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.controls.label;
+
+import java.awt.event.ActionListener;
+
+import javax.swing.JLabel;
+
+import org.gvsig.gui.beans.controls.IControl;
+
+/**
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public class Label extends JLabel implements IControl {
+	private static final long serialVersionUID = 1L;
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.gui.beans.controls.IControl#addActionListener(java.awt.event.ActionListener)
+	 */
+	public void addActionListener(ActionListener listener) {
+		// Labels doesn't have any action, so we discard actionListeners
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.gui.beans.controls.IControl#removeActionListener(java.awt.event.ActionListener)
+	 */
+	public void removeActionListener(ActionListener listener) {
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.gui.beans.controls.IControl#setValue(java.lang.Object)
+	 */
+	public Object setValue(Object value) {
+		try {
+			String text = (String) value;
+			setText(text);
+			return text;
+		}
+		catch (ClassCastException ex) {
+			return null;
+		}
+	}
+
+	public Object getValue() {
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/controls/label/Label.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/JOptionsEditionByMousePopupMenu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/JOptionsEditionByMousePopupMenu.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/JOptionsEditionByMousePopupMenu.java	(revision 42196)
@@ -0,0 +1,439 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.beans.editionpopupmenu;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.Serializable;
+import java.util.HashMap;
+
+import javax.swing.ImageIcon;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.border.BevelBorder;
+
+import org.gvsig.gui.beans.Messages;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ib��ez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+
+
+/**
+ * <p>This class is a JPopupMenu that can be used with another component.</p>
+ * <p>The items showed in this menu are for editing: UNDO, REDO, CUT, COPY, PASTE, DELETE and SELECT ALL.</p>
+ * <p>When the user clicks on a item, this Component fires a property change event that its value allows identify the item clicked.</p>
+ * <p>(The icons used are from the open-source 'Tango Icon Library' project: (http://tango.freedesktop.org/Tango_Icon_Library)).</p>
+ *  
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JOptionsEditionByMousePopupMenu extends JPopupMenu implements Serializable{
+	private static final long serialVersionUID = -142360699557710223L;
+
+	// Items of this JPopupMenu
+	private JMenuItem jMenuItemUndo = null;
+	private JMenuItem jMenuItemRedo = null;
+	private JMenuItem jMenuItemCut = null;
+	private JMenuItem jMenuItemCopy = null;
+	private JMenuItem jMenuItemPaste = null;
+	private JMenuItem jMenuItemDelete = null;
+	private JMenuItem jMenuItemSelectAll = null;
+	
+	// Values of the events fired when has been clicked an item
+	public static final int DEFAULT = 0;
+	public static final int UNDO = 1;
+	public static final int REDO = 2;
+	public static final int CUT = 3;
+	public static final int COPY = 4;
+	public static final int PASTE = 5;
+	public static final int DELETE = 6;
+	public static final int SELECT_ALL = 7;
+	
+	// Values of the type of event fired
+	public static final int VISIBILITY = 8;
+	public static final String SELECTEDOPTION = "SelectedOption";
+	public static final String VISIBILITYCHANGED = "Visibility";
+	
+	// Hash map for the items
+	private HashMap<String, String> map;
+
+	// Action listener for notify (fire) some events that had happened to this component
+	private ActionListener menuListener = null;
+
+ 	/**
+	 * Default constructor 
+	 */
+	public JOptionsEditionByMousePopupMenu() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this component 
+	 */
+	private void initialize() {
+        map = new HashMap<String, String>();
+        this.add(getJMenuItemUndo());
+        this.add(getJMenuItemRedo());
+        this.addSeparator();
+        this.add(getJMenuItemCut());
+        this.add(getJMenuItemCopy());
+        this.add(getJMenuItemPaste());
+        this.add(getJMenuItemDelete());
+        this.addSeparator();
+        this.add(getJMenuItemSelectAll());
+        this.setLabel("Edition");
+        this.setBorder(new BevelBorder(BevelBorder.RAISED));
+	}
+	
+	/**
+	 * This method initializes jMenuItemUndo	
+	 * 	
+	 * @return javax.swing.JMenuItem
+	 */
+	private JMenuItem getJMenuItemUndo() {
+		if (jMenuItemUndo == null) {
+			ImageIcon undoIcon = new ImageIcon(JOptionsEditionByMousePopupMenu.class.getResource("images/edit-undo.png"), Messages.getText("edit_undo"));
+			jMenuItemUndo = new JMenuItem(Messages.getText("edit_undo"), undoIcon);
+			jMenuItemUndo.setHorizontalTextPosition(JMenuItem.RIGHT);
+			jMenuItemUndo.addActionListener(this.getMenuListener());
+			map.put(Messages.getText("edit_undo"), Integer.toString(JOptionsEditionByMousePopupMenu.UNDO));
+		}
+		return jMenuItemUndo;
+	}
+
+	/**
+	 * This method initializes jMenuItemRedo	
+	 * 	
+	 * @return javax.swing.JMenuItem	
+	 */
+	private JMenuItem getJMenuItemRedo() {
+		if (jMenuItemRedo == null) {
+			ImageIcon redoIcon = new ImageIcon(JOptionsEditionByMousePopupMenu.class.getResource("images/edit-redo.png"), Messages.getText("edit_redo"));
+			jMenuItemRedo = new JMenuItem(Messages.getText("edit_redo"), redoIcon);
+			jMenuItemRedo.setHorizontalTextPosition(JMenuItem.RIGHT);
+			jMenuItemRedo.addActionListener(this.getMenuListener());
+			map.put(Messages.getText("edit_redo"), Integer.toString(JOptionsEditionByMousePopupMenu.REDO));
+		}
+		return jMenuItemRedo;
+	}
+
+	/**
+	 * This method initializes jMenuItemCut	
+	 * 	
+	 * @return javax.swing.JMenuItem	
+	 */
+	private JMenuItem getJMenuItemCut() {
+		if (jMenuItemCut == null) {
+			ImageIcon cutIcon = new ImageIcon(JOptionsEditionByMousePopupMenu.class.getResource("images/edit-cut.png"), Messages.getText("edit_cut"));
+			jMenuItemCut = new JMenuItem(Messages.getText("edit_cut"), cutIcon);
+			jMenuItemCut.setHorizontalTextPosition(JMenuItem.RIGHT);
+			jMenuItemCut.addActionListener(this.getMenuListener());
+			map.put(Messages.getText("edit_cut"), Integer.toString(JOptionsEditionByMousePopupMenu.CUT));
+		}
+		return jMenuItemCut;
+	}
+	
+	/**
+	 * This method initializes jMenuItemCopy	
+	 * 	
+	 * @return javax.swing.JMenuItem	
+	 */
+	private JMenuItem getJMenuItemCopy() {
+		if (jMenuItemCopy == null) {
+			ImageIcon copyIcon = new ImageIcon(JOptionsEditionByMousePopupMenu.class.getResource("images/edit-copy.png"), Messages.getText("edit_copy"));
+			jMenuItemCopy = new JMenuItem(Messages.getText("edit_copy"), copyIcon);
+			jMenuItemCopy.setHorizontalTextPosition(JMenuItem.RIGHT);
+			jMenuItemCopy.addActionListener(this.getMenuListener());
+			map.put(Messages.getText("edit_copy"), Integer.toString(JOptionsEditionByMousePopupMenu.COPY));
+		}
+		return jMenuItemCopy;
+	}
+
+	/**
+	 * This method initializes jMenuItemPaste	
+	 * 	
+	 * @return javax.swing.JMenuItem	
+	 */
+	private JMenuItem getJMenuItemPaste() {
+		if (jMenuItemPaste == null) {
+			ImageIcon pasteIcon = new ImageIcon(JOptionsEditionByMousePopupMenu.class.getResource("images/edit-paste.png"), Messages.getText("edit_paste"));
+			jMenuItemPaste = new JMenuItem(Messages.getText("edit_paste"), pasteIcon);
+			jMenuItemPaste.setHorizontalTextPosition(JMenuItem.RIGHT);
+			jMenuItemPaste.addActionListener(this.getMenuListener());
+			map.put(Messages.getText("edit_paste"), Integer.toString(JOptionsEditionByMousePopupMenu.PASTE));
+		}
+		return jMenuItemPaste;
+	}
+
+	/**
+	 * This method initializes jMenuItemDelete	
+	 * 	
+	 * @return javax.swing.JMenuItem	
+	 */
+	private JMenuItem getJMenuItemDelete() {
+		if (jMenuItemDelete == null) {
+			ImageIcon deleteIcon = new ImageIcon(JOptionsEditionByMousePopupMenu.class.getResource("images/edit-delete.png"), Messages.getText("edit_delete"));
+			jMenuItemDelete = new JMenuItem(Messages.getText("edit_delete"), deleteIcon);
+			jMenuItemDelete.setHorizontalTextPosition(JMenuItem.RIGHT);
+			jMenuItemDelete.addActionListener(this.getMenuListener());
+			map.put(Messages.getText("edit_delete"), Integer.toString(JOptionsEditionByMousePopupMenu.DELETE));
+		}
+		return jMenuItemDelete;
+	}	
+
+	/**
+	 * This method initializes jMenuItemSelectAll	
+	 * 	
+	 * @return javax.swing.JMenuItem	
+	 */
+	private JMenuItem getJMenuItemSelectAll() {
+		if (jMenuItemSelectAll == null) {
+			ImageIcon selectAllIcon = new ImageIcon(JOptionsEditionByMousePopupMenu.class.getResource("images/edit-select-all.png"), Messages.getText("edit_select_all"));
+			jMenuItemSelectAll = new JMenuItem(Messages.getText("edit_select_all"), selectAllIcon);
+			jMenuItemSelectAll.setHorizontalTextPosition(JMenuItem.RIGHT);
+			jMenuItemSelectAll.addActionListener(this.getMenuListener());
+			map.put(Messages.getText("edit_select_all"), Integer.toString(JOptionsEditionByMousePopupMenu.SELECT_ALL));
+		}
+		return jMenuItemSelectAll;
+	}
+	
+	/**
+	 * This method initializes the "menuListener" ActionListener
+	 * 
+	 * @return ActionListener
+	 */
+	private ActionListener getMenuListener() {
+		if (menuListener == null) {
+		    menuListener = new ActionListener() {
+		    	/*
+		    	 * (non-Javadoc)
+		    	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+		    	 */
+		        public void actionPerformed(ActionEvent event) {
+		        	// Notifies that the Visibility of this component has changed
+		        	if (event.getActionCommand().equals(JOptionsEditionByMousePopupMenu.VISIBILITYCHANGED))
+						firePropertyChange(
+								JOptionsEditionByMousePopupMenu.VISIBILITYCHANGED,
+								JOptionsEditionByMousePopupMenu.DEFAULT,
+								JOptionsEditionByMousePopupMenu.VISIBILITY);
+		         	else // Notifies that has been clicked on an item
+						firePropertyChange(
+								JOptionsEditionByMousePopupMenu.SELECTEDOPTION,
+								JOptionsEditionByMousePopupMenu.DEFAULT,
+								map.get(event.getActionCommand()));
+		        }
+		    };
+		}
+		return menuListener;
+	} 
+
+	/**
+	 * Enables or disables the undo option item
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledUndoOption(boolean b) {
+		jMenuItemUndo.setEnabled(b);
+	}
+	
+	/**
+	 * Returns if the undo option item is enabled or not
+	 * 
+	 * @return Value true or false
+	 */
+	public boolean isEnabledUndoOption() {
+		return jMenuItemUndo.isEnabled();
+	}
+	
+	/**
+	 * Enables or disables the redo option item
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledRedoOption(boolean b) {
+		jMenuItemRedo.setEnabled(b);
+	}
+	
+	/**
+	 * Returns if the redo option item is enabled or not
+	 * 
+	 * @return Value true or false
+	 */
+	public boolean isEnabledRedoOption() {
+		return jMenuItemRedo.isEnabled();
+	}
+	
+	/**
+	 * Enables or disables the cut option item
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledCutOption(boolean b) {
+		jMenuItemCut.setEnabled(b);
+	}
+	
+	/**
+	 * Returns if the cut option item is enabled or not
+	 * 
+	 * @return Value true or false
+	 */
+	public boolean isEnabledCutOption() {
+		return jMenuItemCut.isEnabled();
+	}
+	
+	/**
+	 * Enables or disables the copy option item
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledCopyOption(boolean b) {
+		jMenuItemCopy.setEnabled(b);
+	}
+	
+	/**
+	 * Returns if the copy option item is enabled or not
+	 * 
+	 * @return Value true or false
+	 */
+	public boolean isEnabledCopyOption() {
+		return jMenuItemCopy.isEnabled();
+	}
+	
+	/**
+	 * Enables or disables the paste option item
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledPasteOption(boolean b) {
+		jMenuItemPaste.setEnabled(b);
+	}
+	
+	/**
+	 * Returns if the paste option item is enabled or not
+	 * 
+	 * @return Value true or false
+	 */
+	public boolean isEnabledPasteOption() {
+		return jMenuItemPaste.isEnabled();
+	}
+	
+	/**
+	 * Enables or disables the delete option item
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledDeleteOption(boolean b) {
+		jMenuItemDelete.setEnabled(b);
+	}
+	
+	/**
+	 * Returns if the delete option item is enabled or not
+	 * 
+	 * @return Value true or false
+	 */
+	public boolean isEnabledDeleteOption() {
+		return jMenuItemDelete.isEnabled();
+	}
+	
+	/**
+	 * Enables or disables the select all option item
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledSelectAllOption(boolean b) {
+		jMenuItemSelectAll.setEnabled(b);
+	}
+	
+	/**
+	 * Returns if the select all option item is enabled or not
+	 * 
+	 * @return Value true or false
+	 */
+	public boolean isEnabledelectAllOption() {
+		return jMenuItemSelectAll.isEnabled();
+	}	
+
+	/**
+	 * Enables or disables all option items
+	 * 
+	 * @param b Value true or false
+	 */
+	public void setEnabledAllOptions(boolean b) {
+		this.setEnabledUndoOption(b);
+		this.setEnabledRedoOption(b);
+		this.setEnabledCutOption(b);
+		this.setEnabledCopyOption(b);
+		this.setEnabledPasteOption(b);
+		this.setEnabledDeleteOption(b);
+		this.setEnabledSelectAllOption(b);
+	}	
+	
+	/* 
+	 * (non-Javadoc)
+	 * @see javax.swing.JPopupMenu#setVisible(boolean)
+	 */
+	public void setVisible(boolean b) {
+		// Notifies that has changed the visibility of this component
+		super.setVisible(b);
+		this.getMenuListener().actionPerformed(new ActionEvent(this, JOptionsEditionByMousePopupMenu.VISIBILITY, JOptionsEditionByMousePopupMenu.VISIBILITYCHANGED));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/JOptionsEditionByMousePopupMenu.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-redo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-redo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-copy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-copy.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-cut.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-cut.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-paste.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-paste.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-delete.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-select-all.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-select-all.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-undo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/editionpopupmenu/images/edit-undo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/backward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/backward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/fastforward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/fastforward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/forward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/forward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/fastbackward.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/images/fastbackward.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/AcceptCancelPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/AcceptCancelPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/AcceptCancelPanel.java	(revision 42196)
@@ -0,0 +1,207 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: AcceptCancelPanel.java 39402 2012-12-10 08:06:54Z nbrodin $
+* $Log$
+* Revision 1.2  2007-09-12 16:28:23  bsanchez
+* *** empty log message ***
+*
+* Revision 1.1  2007/08/20 08:34:45  evercher
+* He fusionado LibUI con LibUIComponents
+*
+* Revision 1.5  2006/11/06 07:29:04  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/09/14 08:31:58  cesar
+* Replace PluginServices.getText by the new Messages bridge class from libUI
+*
+* Revision 1.3.2.1  2006/09/13 13:13:19  cesar
+* Replace PluginServices.getText by the new Messages bridge class from libUI
+*
+* Revision 1.3  2006/07/20 11:12:25  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/07/20 10:42:37  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/07/03 07:12:28  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.gui.beans;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+/**
+ * A JPanel representing a normative sized and aligned Ok and Cancel buttons according
+ * on the gvSIG's style sheet. The buttons size is automatically handled as far as the
+ * panel is BorderLayout-ed.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class AcceptCancelPanel extends JPanel {
+  private static final long serialVersionUID = -1834568346328338410L;
+
+	private JButton btnOk = null;
+	private JButton btnCancel = null;
+
+	/**
+	 * Creates a new instance of the panel with the buttons aligned to the right
+	 * and with the respective action handlers.
+	 * @param okAction, the handler for the ok button clicking.
+	 * @param cancelAction, the handler for the cancel button clicking.
+	 *
+	 */
+	public AcceptCancelPanel(ActionListener okAction, ActionListener cancelAction) {
+		super();
+		initialize(okAction, cancelAction);
+	}
+	/**
+	 * Creates a new instance of the panel with the buttons aligned to the right
+	 * with no listeners set.
+	 *
+	 */
+	public AcceptCancelPanel() {
+		super();
+		initialize(null, null);
+	}
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize(ActionListener okAction, ActionListener cancelAction) {
+        this.setLayout(new BorderLayout());
+        JPanel aux = new JPanel();
+        aux.add(getBtnOk(okAction), java.awt.BorderLayout.EAST);
+        aux.add(getCancelButton(cancelAction), java.awt.BorderLayout.EAST);
+        this.add(aux, java.awt.BorderLayout.EAST);
+	}
+
+	/**
+	 * This method initializes btnOk
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnOk(ActionListener okAction) {
+		if (btnOk == null) {
+			btnOk = new JButton();
+			btnOk.setText(Messages.getText("ok" ));
+			btnOk.setActionCommand("OK");
+			if (okAction != null)
+				btnOk.addActionListener(okAction);
+		}
+		return btnOk;
+	}
+
+	/**
+	 * This method initializes btnCancel
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getCancelButton(ActionListener cancelAction) {
+		if (btnCancel == null) {
+			btnCancel = new JButton();
+			btnCancel.setText(Messages.getText("cancel" ));
+			btnCancel.setActionCommand("CANCEL");
+			if (cancelAction != null)
+				btnCancel.addActionListener(cancelAction);
+		}
+		return btnCancel;
+	}
+
+	/**
+	 * Adds an ActionListener to the <b>cancel</b> button.
+	 * @param l
+	 */
+	public void addCancelButtonActionListener(ActionListener l) {
+		btnCancel.addActionListener(l);
+	}
+
+	/**
+	 * Sets the ActionListener to the <b>OK</b> button removing any other previous one.
+	 * @param l
+	 */
+	public void setOkButtonActionListener(ActionListener l) {
+		ActionListener[] listeners = btnOk.getActionListeners();
+		for (int i = 0; i < listeners.length; i++) {
+			btnOk.removeActionListener(listeners[i]);
+		}
+		btnOk.addActionListener(l);
+	}
+
+	/**
+	 * Sets the ActionListener to the <b>cancel</b> button removing any other previous one.
+	 * @param l
+	 */
+	public void setCancelButtonActionListener(ActionListener l) {
+		ActionListener[] listeners = btnCancel.getActionListeners();
+		for (int i = 0; i < listeners.length; i++) {
+			btnCancel.removeActionListener(listeners[i]);
+		}
+		btnCancel.addActionListener(l);
+	}
+
+	/**
+	 * Adds an ActionListener to the <b>OK</b> button.
+	 * @param l
+	 */
+	public void addOkButtonActionListener(ActionListener l) {
+		btnOk.addActionListener(l);
+	}
+
+	/**
+	 * Returns the ok button contained by this panel since resizing issues should be
+	 * automatically handled by the layout manager. The use of this method is discouraged,
+	 * it is keeped only for compatibility issues. Try using specific button properties
+	 * access methods contained by this class instead.
+	 * @return the Ok button
+	 * @deprecated
+	 */
+	public JButton getOkButton() {
+		return btnOk;
+	}
+
+	public boolean isOkButtonEnabled() {
+		return btnOk.isEnabled();
+	}
+
+	public boolean isCancelButtonEnabled() {
+		return btnCancel.isEnabled();
+	}
+
+	public void setOkButtonEnabled(boolean b) {
+		btnOk.setEnabled(b);
+	}
+
+	public void setCancelButtonEnabled(boolean b) {
+		btnCancel.setEnabled(b);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/beans/AcceptCancelPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablePainter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablePainter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablePainter.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+
+
+public interface ColorTablePainter {
+
+	public Color[] getColors();
+
+	/**
+	 * Method to paint the color table
+	 *
+	 * @param g
+	 * @param isSelected
+	 */
+	public void paint(Graphics2D g, boolean isSelected);
+
+	public String getTableName();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/ColorTablePainter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRenderer.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.javax.swing.jLabelCellRenderer;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.io.Serializable;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+
+/**
+ * This class allows render a JLabel in a Cell of other graphic component (as a JList)
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JLabelCellRenderer extends DefaultListCellRenderer implements Serializable {
+	private static final long serialVersionUID = -3820198983465837422L;
+
+	/* (non-Javadoc)
+	 * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
+	 */
+	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+        /* The DefaultListCellRenderer class will take care of
+         * the JLabels text property, it's foreground and background
+         * colors, and so on.
+         */
+        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+		
+		// Set the text property, background and foreground color
+        if (value instanceof JLabel) {
+        	setText(((JLabel)value).getText());
+    		setBackground(((JLabel)value).getBackground());
+    		
+    		if (isSelected)
+    			setForeground(Color.red);
+    		else
+    			setForeground(((JLabel)value).getForeground());
+        }
+
+		return this;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRendererWithTextAsToolTipText.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRendererWithTextAsToolTipText.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRendererWithTextAsToolTipText.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.javax.swing.jLabelCellRenderer;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.io.Serializable;
+
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+/**
+ * This class allows render a JLabel in a Cell of other graphic component (as a JList) and
+ * if mouse is on this cell, a tool tip text with the text value will be shown
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class JLabelCellRendererWithTextAsToolTipText extends JLabelCellRenderer implements Serializable {
+	private static final long serialVersionUID = 4799667459274027212L;
+
+	/* (non-Javadoc)
+	 * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
+	 */
+	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+        /* The DefaultListCellRenderer class will take care of
+         * the JLabels text property, it's foreground and background
+         * colors, and so on.
+         */
+        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+		
+		// Set the text property, background and foreground color
+        if (value instanceof JLabel) {
+        	setText(((JLabel)value).getText());
+    		setBackground(((JLabel)value).getBackground());
+    		
+    		if (isSelected)
+    			setForeground(Color.red);
+    		else
+    			setForeground(((JLabel)value).getForeground());
+        }
+        
+		return this;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see javax.swing.JLabel#setText(java.lang.String)
+	 */
+	public void setText(String text) {
+		super.setText(text);
+		
+		// Set as tool tip text for this cell, it's text value
+		if (text != null)
+			super.setToolTipText(text);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/javax/swing/jLabelCellRenderer/JLabelCellRendererWithTextAsToolTipText.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/ISpecificCaretPosition.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/ISpecificCaretPosition.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/ISpecificCaretPosition.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.awt.event.specificCaretPosition;
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Interface with the prototype of methods to have a component with an specific
+ *   caret position
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public interface ISpecificCaretPosition {
+	public static final int LEFT_POSITIONS = 1;
+	public static final int RIGHT_POSITIONS = 2;
+	public static final int LIKE_JTEXTCOMPONENT = 3;
+	
+	/**
+	 * Gets the position of text that will be seen
+	 *
+	 * @return The position of text that will be seen (LEFT_POSITIONS, RIGHT_POSITIONS or LIKE_JTEXTCOMPONENT)
+	 */
+	public int getCaretPositionMode();
+
+	/**
+	 * Sets the position of text that will be seen
+	 * 
+	 * @param caretPositionMode The position of text that will be seen (LEFT_POSITIONS, RIGHT_POSITIONS or LIKE_JTEXTCOMPONENT)
+	 */
+	public void setCaretPositionMode(int caretPositionMode);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/ISpecificCaretPosition.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/SpecificCaretPositionListeners.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/SpecificCaretPositionListeners.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/SpecificCaretPositionListeners.java	(revision 42196)
@@ -0,0 +1,195 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.awt.event.specificCaretPosition;
+
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.JTextComponent;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class has a method which adds the necessary listeners for convert a JTextComponent to another which can be configurated
+ *   its 'text visible positions when isn't edited' behaviour: left positions, right positions or like JTextComponent (doesn't change text visible positions)
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class SpecificCaretPositionListeners {
+	/**
+	 * Adds three listeners to a JTextComponent component:
+	 *  - A FocusListener -> if this component loses its focus -> set caret position to 0
+	 *  - A DocumentListener -> if this component doesn't have the focus and its caret position has changed -> set caret position to 0
+	 *  - A CaretListener -> sometimes DocumentListener doesn't take effect, but this listener does
+	 * @param component
+	 */
+	public static void setListeners(final JTextComponent component) {
+		// The Focus Listener
+		component.addFocusListener(new FocusAdapter() {
+			/*
+			 *  (non-Javadoc)
+			 * @see java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
+			 */
+			public void focusLost(FocusEvent e) {
+				switch (((ISpecificCaretPosition)component).getCaretPositionMode()) {
+					case ISpecificCaretPosition.LEFT_POSITIONS:
+						(component).setCaretPosition(0);
+						break;
+					case ISpecificCaretPosition.RIGHT_POSITIONS:
+						(component).setCaretPosition(component.getDocument().getLength());
+						break;
+					case ISpecificCaretPosition.LIKE_JTEXTCOMPONENT: // Do nothing
+						break;
+				}
+			}
+		});
+		
+		// The Document Listener
+		component.getDocument().addDocumentListener(new DocumentListener() {
+			/*
+			 *  (non-Javadoc)
+			 * @see javax.swing.event.DocumentListener#changedUpdate(javax.swing.event.DocumentEvent)
+			 */
+			public void changedUpdate(DocumentEvent e) {				
+				if (!component.isFocusOwner()) {
+					switch (((ISpecificCaretPosition)component).getCaretPositionMode()) {
+						case ISpecificCaretPosition.LEFT_POSITIONS:
+							(component).setCaretPosition(0);
+							break;
+						case ISpecificCaretPosition.RIGHT_POSITIONS:
+							(component).setCaretPosition(component.getDocument().getLength());
+							break;
+						case ISpecificCaretPosition.LIKE_JTEXTCOMPONENT: // Do nothing
+							break;
+					}
+				}
+			}
+
+			/*
+			 *  (non-Javadoc)
+			 * @see javax.swing.event.DocumentListener#insertUpdate(javax.swing.event.DocumentEvent)
+			 */
+			public void insertUpdate(DocumentEvent e) {
+				if (!component.isFocusOwner()) {
+					switch (((ISpecificCaretPosition)component).getCaretPositionMode()) {
+						case ISpecificCaretPosition.LEFT_POSITIONS:
+							(component).setCaretPosition(0);
+							break;
+						case ISpecificCaretPosition.RIGHT_POSITIONS:
+							(component).setCaretPosition(component.getDocument().getLength());
+							break;
+						case ISpecificCaretPosition.LIKE_JTEXTCOMPONENT: // Do nothing
+							break;
+					}
+				}
+			}
+
+			/*
+			 *  (non-Javadoc)
+			 * @see javax.swing.event.DocumentListener#removeUpdate(javax.swing.event.DocumentEvent)
+			 */
+			public void removeUpdate(DocumentEvent e) {
+				if (!component.isFocusOwner()) {
+					switch (((ISpecificCaretPosition)component).getCaretPositionMode()) {
+						case ISpecificCaretPosition.LEFT_POSITIONS:
+							(component).setCaretPosition(0);
+							break;
+						case ISpecificCaretPosition.RIGHT_POSITIONS:
+							(component).setCaretPosition(component.getDocument().getLength());
+							break;
+						case ISpecificCaretPosition.LIKE_JTEXTCOMPONENT: // Do nothing
+							break;
+					}
+				}
+			}			
+		});
+
+		// The Caret Listener
+		component.addCaretListener(new CaretListener() {
+			/*
+			 *  (non-Javadoc)
+			 * @see javax.swing.event.CaretListener#caretUpdate(javax.swing.event.CaretEvent)
+			 */
+			public void caretUpdate(CaretEvent e) {				
+				if (!component.isFocusOwner()) {
+					switch (((ISpecificCaretPosition)component).getCaretPositionMode()) {
+						case ISpecificCaretPosition.LEFT_POSITIONS:
+							if ((component).getCaretPosition() != 0)
+								(component).setCaretPosition(0);
+							break;
+						case ISpecificCaretPosition.RIGHT_POSITIONS:
+							if ((component).getCaretPosition() != component.getDocument().getLength())
+							(component).setCaretPosition(component.getDocument().getLength());
+							break;
+						case ISpecificCaretPosition.LIKE_JTEXTCOMPONENT: // Do nothing
+							break;
+					}
+				}
+			}
+		});
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/event/specificCaretPosition/SpecificCaretPositionListeners.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/text/RotatedTextUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/text/RotatedTextUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/java/org/gvsig/gui/awt/text/RotatedTextUtils.java	(revision 42196)
@@ -0,0 +1,897 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2015 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.gui.awt.text;
+
+
+import java.awt.Graphics2D;
+import java.awt.font.TextLayout;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+
+/**
+ * <p>A convenience class to easily draw rotated text which is positioned on
+ * a specific side of the rotation point (TOP, BOTTOM, LEFT or RIGHT).
+ * The text can be anchored by its central point or by the text corner.</p>
+ * 
+ * <p>The following diagrams illustrate the behaviour of each positioning and
+ * anchor point in relation to the rotation point:</p>
+ * <pre>
+ * top center:         top corner:
+ *        o                     o
+ *       l                     l
+ *      l                     l
+ *     e                     e
+ *    h                     h
+ *      .                   . 
+ * 
+ * 
+ * right center:      right corner:
+ *                          o 
+ *                         l 
+ *        o               l
+ *       l               e
+ *   .  l              .h 
+ *     e
+ *    h
+ * </pre>
+ * 
+ * <p>The  class provides 2 separate families of methods:
+ * <ul>
+ * <li><strong>draw methods</strong>, which rotate the graphics, draw the rotated text and
+ * restore the graphics transformation</li>
+ * <li><strong>getPosition methods</strong>, which are used to get the position of the
+ * rotated text on an already rotated graphics (faster when drawing several
+ * rotated texts using the same rotation angle). Note that this family of
+ * methods deals with coordinates in 2 different coordinate spaces
+ * (the original, non-rotated space and the rotated space). The origin point
+ * coordinates has to be referred to the non-rotated space, while the returned
+ * position is referred to the rotated space.</li>
+ * </ul>
+ *
+ * Generally speaking the <code>draw</code> family of methods can be considered a simpler, higher level
+ * API, while the <code>getPosition</code> family is conceptually more complex but faster for some
+ * scenarios.
+ * </p>
+ * 
+ * <p>
+ * Example of <strong>draw</strong> method usage:
+ * <pre>
+ * // draw coordinates axis
+ * Graphics2D g = ...
+ * Point2D origin1 = new Point2D.Double(100, 200);
+ * int lenght = 100;
+ * g.drawLine((int)origin1.getX()-length, (int)origin1.getY(), (int)origin1.getX()+length, (int)origin1.getY());
+ * g.drawLine((int)origin1.getX(), (int)origin1.getY()-length, (int)origin1.getX(), (int)origin1.getY()+length);
+ * // draw the rotated text
+ * RotatedTextUtils.draw(origin1, g, "Hello world", angle, RotatedTextUtils.PLACEMENT_BOTTOM, RotatedTextUtils.ANCHOR_CORNER);
+ * </pre>
+ * </p>
+ * 
+ * 
+ * <p>
+ * Example of <strong>getPosition</strong> method usage:
+ * <pre>
+ * // draw coordinates axis
+ * Graphics2D g = ...
+ * AffineTransform defaultAt = g.getTransform();
+ * Point2D origin1 = new Point2D.Double(100, 200);
+ * Point2D origin2 = new Point2D.Double(200, 200);
+ * int lenght = 100;
+ * g.drawLine((int)origin1.getX()-length, (int)origin1.getY(), (int)origin1.getX()+length, (int)origin1.getY());
+ * g.drawLine((int)origin1.getX(), (int)origin1.getY()-length, (int)origin1.getX(), (int)origin1.getY()+length);
+ * // draw the rotated text
+ * AffineTransform finalTransform = g.getTransform();
+ * finalTransform.rotate(angle);
+ * g.setTransform(finalTransform);
+ * TextLayout text = new TextLayout("Hello world", g.getFont(), g.getFontRenderContext());
+ * Point2D p = RotatedTextUtils.getPosition(origin1, angle, text, RotatedTextUtils.PLACEMENT_BOTTOM, RotatedTextUtils.ANCHOR_CORNER);
+ * text.draw(g, (float)p.getX(), (float)p.getY());
+ * // faster than RotatedTextUtils.draw if we are writing the same rotated text at different points
+ * p = RotatedTextUtils.getPosition(origin2, angle, text, RotatedTextUtils.PLACEMENT_BOTTOM, RotatedTextUtils.ANCHOR_CORNER);
+ * text.draw(g, (float)p.getX(), (float)p.getY());
+ * g.setTransform(defaultAt);
+ * </pre>
+ * </p>
+ * 
+ * @author Cesar Martinez Izquierdo <cmartinez@scolab.es>
+ *
+ */
+public class RotatedTextUtils {
+	/**
+	 * PI/2
+	 */
+	private static final double PI_HALF = Math.PI/2;
+	/**
+	 * 3*PI/2
+	 */
+	private static final double PI_HALF3 = 3*Math.PI/2;
+	/**
+	 * 2*PI
+	 */
+	private static final double PI_HALF4 = 2*Math.PI;
+	
+	/**
+	 * Anchor a corner of the text on the rotation center. In this way
+	 * a corner (left or right) of the text string will be aligned
+	 * with the rotation point.
+	 * 
+	 * The corner (left or right) to anchor will be automatically selected
+	 * depending on the rotation angle (choosing the corner which is closer
+	 * to the rotation center)
+	 */
+	public static final int ANCHOR_CORNER = 0;
+	/**
+	 * Anchor the center of the text on the rotation center. In this way
+	 * the center of the text string will be aligned with the rotation point.
+	 */
+	public static final int ANCHOR_CENTER = 1;
+	
+	/**
+	 * Place the text on the top of the rotation point, meaning that no part
+	 * of the text is under the rotation point. 
+	 */
+	public static final int PLACEMENT_TOP = 0;
+	/**
+	 * Place the text bellow the rotation point, meaning that no part
+	 * of the text is over the rotation point. 
+	 */
+	public static final int PLACEMENT_BOTTOM = 1;
+	/**
+	 * Place the text on the left of the rotation point, meaning that no part
+	 * of the text is on the right the rotation point. 
+	 */
+	public static final int PLACEMENT_LEFT = 2;
+	/**
+	 * Place the text on the right of the rotation point, meaning that no part
+	 * of the text is on the left the rotation point. 
+	 */
+	public static final int PLACEMENT_RIGHT = 3;
+	
+    /**
+     * Draws rotated text which is positioned on
+     * a specific side of the rotation point (TOP, BOTTOM, LEFT or RIGHT).
+     * The text can be anchored by its central point or by the text corner.
+     * 
+     * @param origin	The rotation center point
+     * @param g			The target Graphics2D
+     * @param strText 	The text to draw .Use the Graphics2D options (font,
+     * color, etc) to style the text before calling this method.
+     * @param angle		The rotation angle, in radians. The angle should be comprised
+     * in the [0, 2*PI[ range, result is otherwise unexpected
+     * (a convenience method is provided to normalize it:
+     *  {@link RotatedTextUtils#normalizeAngle(double)})
+     * @param relativePosition The position of the text compared with the origin point.
+     *  See {@link #PLACEMENT_TOP}, {@link #PLACEMENT_LEFT}, {@link #PLACEMENT_RIGHT} and
+     *  {@value #PLACEMENT_BOTTOM}.
+     * @param anchor 	Whether the center of the label should be aligned with the
+     * point ({@link #ANCHOR_CENTER}) or a corner of the label should be used
+     * ({@link #ANCHOR_CORNER}).
+     */
+	public static void draw(Point2D origin, Graphics2D g, String strText, double angle, int relativePosition, int anchor) {
+		AffineTransform defaultAt = g.getTransform();
+
+		// affine transform containing the rotation plus the previous graphics transformations (if any)
+		AffineTransform finalAt = g.getTransform();
+		finalAt.rotate(angle);
+		g.setTransform(finalAt);
+
+		TextLayout text = new TextLayout(strText, g.getFont(), g.getFontRenderContext());
+		Point2D position = null;
+
+		if (anchor==ANCHOR_CORNER) {
+			switch (relativePosition) {
+			case PLACEMENT_RIGHT:
+				position = getPositionRightCorner(origin, text, angle);
+				break;
+			case PLACEMENT_BOTTOM:
+				position = getPositionBottomCorner(origin, text, angle);
+				break;
+			case PLACEMENT_LEFT:
+				position = getPositionLeftCorner(origin, text, angle);
+				break;
+			case PLACEMENT_TOP:
+			default:
+				position = getPositionTopCorner(origin, text, angle);
+				break;
+			}
+		}
+		else {
+			switch (relativePosition) {
+			case PLACEMENT_RIGHT:
+				position = getPositionRightCenter(origin, text, angle);
+				break;
+			case PLACEMENT_BOTTOM:
+				position = getPositionBottomCenter(origin, text, angle);
+				break;
+			case PLACEMENT_LEFT:
+				position = getPositionLeftCenter(origin, text, angle);
+				break;
+			case PLACEMENT_TOP:
+			default:
+				position = getPositionTopCenter(origin, text, angle);
+				break;
+			}
+		}
+		text.draw(g, (float)position.getX(), (float)position.getY());
+		g.setTransform(defaultAt);
+    }
+    
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point, angle, align and anchor.</p>
+     * 
+     * <p>You may consider using
+     * the higher level draw methods (e.g. {@link #draw(Point2D, Graphics2D, String, double, int, int)},
+     * {@link #drawTopCenter(Point2D, Graphics2D, String, double)}, etc) if
+     * you are drawing a single label, as this method makes some assumptions
+     * for getting maximum performance when drawing several texts using the
+     * same rotation. In particular, this method assumes that the target
+     * Graphics2D has been rotated using the provided angle and the text
+     * has been laid out for this rotated target Graphics2D.</p> 
+	 * 
+	 * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     * 
+     * @param origin The point used as the center of the rotation
+     * @param text   The text to be positioned, which has to be prepared for
+     * a rotated graphics, matching the rotation angle 
+     * @param angle The rotation angle, in radians. The angle should be comprised
+     * in the [0, 2*PI[ range, result is otherwise unexpected
+     * (a convenience method is provided to normalize it:
+     *  {@link RotatedTextUtils#normalizeAngle(double)}
+     * @param relativePosition The position of the text compared with the origin point.
+     *  See {@link #PLACEMENT_TOP}, {@link #PLACEMENT_LEFT}, {@link #PLACEMENT_RIGHT} and
+     *  {@value #PLACEMENT_BOTTOM}.
+     * @param anchor Whether the center of the label should be aligned with the
+     * point ({@link #ANCHOR_CENTER}) or a corner of the label should be used
+     * ({@link #ANCHOR_CORNER}).
+     * @return The position in which the text should be drawn.
+     */
+    public static Point2D getPosition(Point2D origin, TextLayout text, double angle, int relativePosition, int anchor) {
+    	if (anchor==ANCHOR_CORNER) {
+    		switch (relativePosition) {
+    		case PLACEMENT_RIGHT:
+    			return getPositionRightCorner(origin, text, angle);
+    		case PLACEMENT_BOTTOM:
+    			return getPositionBottomCorner(origin, text, angle);
+    		case PLACEMENT_LEFT:
+    			return getPositionLeftCorner(origin, text, angle);
+    		case PLACEMENT_TOP:
+    		default:
+    			return getPositionTopCorner(origin, text, angle);
+    		}
+    	}
+    	else {
+    		switch (relativePosition) {
+    		case PLACEMENT_RIGHT:
+    			return getPositionRightCenter(origin, text, angle);
+    		case PLACEMENT_BOTTOM:
+    			return getPositionBottomCenter(origin, text, angle);
+    		case PLACEMENT_LEFT:
+    			return getPositionLeftCenter(origin, text, angle);
+    		case PLACEMENT_TOP:
+    		default:
+    			return getPositionTopCenter(origin, text, angle);
+    		}
+    	}
+    }
+
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the top of the
+     * point and using a corner of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_TOP
+     * @see RotatedTextUtils#ANCHOR_CORNER
+     */
+    public static Point2D getPositionTopCorner(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+    	
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+
+    	if (angle>0.0d && angle<PI_HALF) { // first quadrant
+    		xOffset = -getRotatedWidth1(width, angle)-getRotatedWidth2(height, angle)/2.0d;
+    		yOffset = -getRotatedHeight1(width, angle);
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = 0.0d;
+    		yOffset = 0.0d;
+    	}
+    	else if (angle>PI_HALF3) {  // fourth quadrant
+    		xOffset = getRotatedWidth2(height, angle)/2.0d;
+    		yOffset = 0.0d;
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = getRotatedWidth1(width, angle)-getRotatedWidth2(height, angle)/2.0d;
+    		yOffset = -(getRotatedHeight1(width, angle)+getRotatedHeight2(height, angle));
+    	}
+    	else { // third quadrant
+    		xOffset = getRotatedWidth2(height, angle)/2.0d; 
+    		yOffset = -getRotatedHeight2(height, angle);
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+        return result;
+    }
+
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the top of the
+     * point and using the center of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_TOP
+     * @see RotatedTextUtils#ANCHOR_CENTER
+     */
+    public static Point2D getPositionTopCenter(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+    	
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+
+    	if (angle>0.0d && angle<PI_HALF) { // first quadrant
+    		xOffset = -(getRotatedWidth1(width, angle)+getRotatedWidth2(height, angle))/2.0d;
+    		yOffset = -getRotatedHeight1(width, angle);
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = -width/2.0d;
+    		yOffset = 0.0d;
+    	}
+    	else if (angle>PI_HALF3) {  // fourth quadrant
+    		xOffset = (getRotatedWidth2(height, angle)-getRotatedWidth1(width, angle))/2.0d;
+    		yOffset = 0.0d;
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = (getRotatedWidth1(width, angle)-getRotatedWidth2(height, angle))/2.0d;
+    		yOffset = -(getRotatedHeight1(width, angle)+getRotatedHeight2(height, angle));
+    	}
+    	else { // third quadrant
+    		xOffset = (getRotatedWidth1(width, angle) + getRotatedWidth2(height, angle))/2.0d; 
+    		yOffset = -getRotatedHeight2(height, angle);
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+        return result;
+    }
+
+
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the right of the
+     * point and using a corner of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_RIGHT
+     * @see RotatedTextUtils#ANCHOR_CORNER
+     */
+    public static Point2D getPositionRightCorner(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+		
+    	if (angle>0.0d && angle<PI_HALF) { // first quadrant
+    		xOffset = 0.0d;
+    		yOffset = getRotatedHeight2(height, angle)/2.0d;
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = 0.0d;
+    		yOffset = height/2.0d;
+    	}
+    	else if (angle>PI_HALF3) {  // fourth quadrant
+    		xOffset = getRotatedWidth2(height, angle);
+    		yOffset = getRotatedHeight2(height, angle)/2.0d;
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = getRotatedWidth1(width, angle);
+    		yOffset = -getRotatedHeight1(width, angle)-(getRotatedHeight2(height, angle))/2.0d;
+    	}
+    	else { // third quadrant
+    		xOffset = getRotatedWidth1(width, angle) + getRotatedWidth2(height, angle);
+    		yOffset = -getRotatedHeight2(height, angle)/2.0d +getRotatedHeight1(width, angle);
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+    	return result;
+    }
+
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the right of the
+     * point and using the center of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_RIGHT
+     * @see RotatedTextUtils#ANCHOR_CENTER
+     */
+    public static Point2D getPositionRightCenter(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+    	
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+		
+    	if (angle>0.0d && angle<PI_HALF) { // first quadrant
+    		xOffset = 0.0;
+    		yOffset = (getRotatedHeight2(height, angle)-getRotatedHeight1(width, angle))/2.0d;
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = 0.0;
+    		yOffset = height/2.0d;
+    	}
+    	else if (angle>PI_HALF3) {  // fourth quadrant
+    		xOffset = (getRotatedWidth2(height, angle));
+    		yOffset = (getRotatedHeight1(width, angle)+getRotatedHeight2(height, angle))/2.0d;
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = getRotatedWidth1(width, angle);
+    		yOffset = -(getRotatedHeight2(height, angle)+getRotatedHeight1(width, angle))/2.0d;
+    	}
+    	else { // third quadrant
+    		xOffset = getRotatedWidth1(width, angle)+getRotatedWidth2(height, angle); 
+    		yOffset = (getRotatedHeight1(width, angle)-getRotatedHeight2(height, angle))/2.0d;
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+    	return result;
+    }
+
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the bottom of the
+     * point and using a corner of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_BOTTOM
+     * @see RotatedTextUtils#ANCHOR_CORNER
+     */
+    public static Point2D getPositionBottomCorner(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+		
+    	if (angle>0.0d && angle<=PI_HALF) { // first quadrant
+    		xOffset = -getRotatedWidth2(height, angle)/2.0d;
+    		yOffset = getRotatedHeight2(height, angle);
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = 0.0d;
+    		yOffset = height;
+    	}
+    	else if (angle>=PI_HALF3) {  // fourth quadrant
+    		xOffset = getRotatedWidth2(height, angle)/2.0d-getRotatedWidth1(width, angle);
+    		yOffset = getRotatedHeight1(width, angle)+getRotatedHeight2(height, angle);
+
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = -getRotatedWidth2(height, angle)/2.0d;
+    		yOffset = 0.0d;
+    	}
+    	else { // third quadrant
+    		xOffset = getRotatedWidth1(width, angle) + getRotatedWidth2(height, angle)/2.0d; 
+    		yOffset = getRotatedHeight1(width, angle);
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+    	return result;
+    }
+
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the bottom of the
+     * point and using the center of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_BOTTOM
+     * @see RotatedTextUtils#ANCHOR_CENTER
+     */
+    public static Point2D getPositionBottomCenter(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+
+    	if (angle>0.0d && angle<PI_HALF) { // first quadrant
+    		xOffset = -(getRotatedWidth1(width, angle)+getRotatedWidth2(height, angle))/2.0d;
+    		yOffset = getRotatedHeight2(height, angle);
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = -width/2.0d;
+    		yOffset = height;
+    	}
+    	else if (angle>PI_HALF3) {  // fourth quadrant
+    		xOffset = (getRotatedWidth2(height, angle)-getRotatedWidth1(width, angle))/2.0d;
+    		yOffset = getRotatedHeight1(width, angle)+getRotatedHeight2(height, angle);
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = (getRotatedWidth1(width, angle)-getRotatedWidth2(height, angle))/2.0d;
+    		yOffset = 0.0d;
+    	}
+    	else { // third quadrant
+    		xOffset = (getRotatedWidth1(width, angle) + getRotatedWidth2(height, angle))/2.0d; 
+    		yOffset = getRotatedHeight1(width, angle);
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+    	return result;
+    }
+
+
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the left of the
+     * point and using a corner of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_LEFT
+     * @see RotatedTextUtils#ANCHOR_CORNER
+     */
+    public static Point2D getPositionLeftCorner(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+		
+    	if (angle>0.0d && angle<PI_HALF) { // first quadrant
+    		xOffset = -(getRotatedWidth1(width, angle)+getRotatedWidth2(height, angle));
+    		yOffset = getRotatedHeight2(height, angle)/2.0d -getRotatedHeight1(width, angle);
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = -width;
+    		yOffset = height/2.0d;
+    	}
+    	else if (angle>PI_HALF3) {  // fourth quadrant
+    		xOffset = (-getRotatedWidth1(width, angle));
+    		yOffset = getRotatedHeight1(width, angle)+(getRotatedHeight2(height, angle))/2.0d;
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = -(getRotatedWidth2(height, angle));
+    		yOffset = -getRotatedHeight2(height, angle)/2.0d;
+    	}
+    	else { // third quadrant
+    		xOffset = 0.0d; 
+    		yOffset = -getRotatedHeight2(height, angle)/2.0d;
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+    	return result;
+    }
+    /**
+     * <p>Gets the position in which the text should be drawn according to the
+     * provided origin point and angle, placing the text at the left of the
+     * point and using the center of the text as anchor.</p>
+     * 
+     * <p>This method deals with coordinates in 2 different coordinate spaces
+     * (the original, non-rotated space and the rotated space). The origin point
+     * coordinates has to be referred to the non-rotated space, while the returned
+     * position is referred to the rotated space.</p>
+     *  
+     * @param origin The center point of the rotation
+     * @param text   The text to be drawn, created for the rotated Graphics2D
+     * @param angle  The rotation angle, in radians. Angle is assumed to be normalized (see
+     * {@link #normalizeAngle(double)}) 
+     * @return The position in which the text should be drawn, referenced to the rotated
+     * coordinate space
+     * 
+     * @throws NoninvertibleTransformException
+     * @see {@link RotatedTextUtils#getPosition(Point2D, double, TextLayout, int, int)}
+     * @see RotatedTextUtils#PLACEMENT_LEFT
+     * @see RotatedTextUtils#ANCHOR_CENTER
+     */
+    public static Point2D getPositionLeftCenter(Point2D origin, TextLayout text, double angle) {
+    	double height = text.getBounds().getHeight();
+    	double descent = text.getBounds().getHeight()+text.getBounds().getY();
+    	double width = text.getAdvance();
+    	double yOffset;
+    	double xOffset;
+		double correctedOriginX = origin.getX()+getRotatedDescent2(descent, angle);
+		double correctedOriginY = origin.getY()-getRotatedDescent1(descent, angle);
+		
+    	if (angle>0.0d && angle<PI_HALF) { // first quadrant
+    		xOffset = -(getRotatedWidth1(width, angle)+getRotatedWidth2(height, angle));
+    		yOffset = (getRotatedHeight2(height, angle)-getRotatedHeight1(width, angle))/2.0d;
+    	}
+    	else if (angle<0.1d) { // when is 0
+    		xOffset = -width;
+    		yOffset = height/2.0d;
+    	}
+    	else if (angle>PI_HALF3) {  // fourth quadrant
+    		xOffset = (-getRotatedWidth1(width, angle));
+    		yOffset = (getRotatedHeight1(width, angle)+getRotatedHeight2(height, angle))/2.0d;
+    	}
+    	else if (angle<Math.PI) { // second quadrant
+    		xOffset = -(getRotatedWidth2(height, angle));
+    		yOffset = -(getRotatedHeight2(height, angle)+getRotatedHeight1(width, angle))/2.0d;
+    	}
+    	else { // third quadrant
+    		xOffset = 0.0d; 
+    		yOffset = (getRotatedHeight1(width, angle)-getRotatedHeight2(height, angle))/2.0d;
+    	}
+    	Point2D result = new Point2D.Double(correctedOriginX+xOffset, correctedOriginY+yOffset);
+    	// Transform the calculated drawing point from the non-rotated coordinate space
+    	// to the final (rotated) coordinate space.
+    	// All the above calculations have been made using the non-rotated coordinate space
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+    	return result;
+    }
+    
+    /**
+     * Draws the provided text rotated by angle radians using location as rotation center
+     * without any positioning or anchoring adjustments.
+     * Use the Graphics2D options (font, color, etc) to style the text before calling
+     * this method.
+     * 
+     * @param location The rotation center
+     * @param g        The Graphics2D on which the text should be drawn
+     * @param strText  The text to be drawn
+     * @param angle    The rotation angle, in radians
+     */
+    public static void drawRotated(Point2D location, Graphics2D g, String strText, double angle) {
+    	AffineTransform defaultAt = g.getTransform();
+    	AffineTransform at = AffineTransform.getRotateInstance(angle);
+        g.setTransform(at);
+        TextLayout text = new TextLayout(strText, g.getFont(), g.getFontRenderContext());
+        Point2D result = new Point2D.Double(location.getX(), location.getY());
+    	try {
+			at.inverseTransform(result, result);
+		} catch (NoninvertibleTransformException e) {
+			// can't happen: rotation always has inverste tranform
+		}
+        text.draw(g, (float)result.getX(), (float)result.getY());
+        g.setTransform(defaultAt);
+    }
+
+	/**
+	 * Normalizes an angle, in radians. A normalized angle
+	 * is an angle contained in the range [0, 2*PI[.
+	 * 
+	 * @param angle The angle to normalize, in radians
+	 * @return Normalized angled, in radians
+	 */
+	public static double normalizeAngle(double angle) {
+		double module = angle%(PI_HALF4);
+		if (module>=0) {
+			return module;
+		}
+		else {
+			return (angle + PI_HALF4);
+		}
+	}
+    
+    private static double getRotatedHeight1(double width, double angle) {
+    	return Math.abs(width*Math.sin(angle));
+    }
+    
+    private static double getRotatedHeight2(double height, double angle) {
+    	return Math.abs(height*Math.cos(angle));
+    }
+    
+    private static double getRotatedWidth1(double width, double angle) {
+    	return Math.abs(width*Math.cos(angle));
+    }
+    
+    private static double getRotatedWidth2(double height, double angle) {
+    	return Math.abs(height*Math.sin(angle));
+    }
+    
+    private static double getRotatedDescent1(double descent, double angle) {
+    	return descent*Math.sin(angle+PI_HALF);
+    }
+    
+    private static double getRotatedDescent2(double descent, double angle) {
+    	return descent*Math.sin(angle);
+    }
+    
+    
+    private static double getRotatedOffsetX1(double baseOffsetX, double angle) {
+    	return Math.abs(baseOffsetX*Math.cos(angle+PI_HALF));
+    }
+    
+    private static double getRotatedOffsetX2(double baseOffsetX, double angle) {
+    	return Math.abs(baseOffsetX*Math.sin(angle));
+    }
+}
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ca.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [ca]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=un panell
+abrir...=
+aceptar=Acceptar
+Anadir_al_conjunto=Afegir al conjunt
+anterior=Anterior
+aplicar=Aplicar
+ayuda=Ajuda
+ayuda_0=Espai, 0\: veure-ho tot
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Mostrar/Ocultar fons
+ayuda_c=C\: centrar
+ayuda_h=H\: esta ajuda
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=Roda ratol\u00ed\: Zoom +/-
+bajar=
+borrar_todos=Esborrar tots els punts
+borrar_uno=Esborrar punt seleccionat
+calendarBackOneMonth=Retrocedix un mes
+calendarBackOneYear=Retrocedix un any
+calendarForwardOneMonth=Avan\u00e7a un mes
+calendarForwardOneYear=Avan\u00e7a un any
+calendarSelectDate=Seleccione una data
+calendarTitle=Calendari
+Campos=Camps
+cancel=Cancel\u00b7lar
+cancelar=Cancel\u00b7lar
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Tancar
+date_button_explanation=Permet seleccionar una data
+de=de
+de\ 0=de 0
+deleteText=Esborrar text
+deleteText_on_filter_use_explanation=Esborrar la sent\u00e8ncia del filtratge
+edit_copy=Copiar
+edit_cut=Tallar
+edit_delete=Eliminar
+edit_paste=Apegar
+edit_redo=Refer
+edit_select_all=Seleccionar tot
+edit_undo=Desfer
+Error=Error
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3 del comportament inv\u00e0lida.
+espere=Per favor, espereu
+exportJOP2Title=Exportar a JOP2T
+Failed_pausing_the_process=Ha fallat en pausar el proc\u00e9s.
+Failed_resuming_the_process=Ha fallat en reprendre el proc\u00e9s.
+Failed_the_process=Ha fallat el proc\u00e9s.
+fields_uppercase_first=Camps
+filter_by_sentence=Filtratge per sent\u00e8ncia
+filter_of_Table=Filtre de taula
+filterOnAWFSLayer=
+filtros=Filtres
+guardar=Guardar
+Information=Informaci\u00f3
+known_values=Valors coneguts
+msg_cancel_incrementable=Est\u00e0 segur que vol cancel\u00b7lar este proc\u00e9s?
+no=No
+No=No
+no_image_available=Imatge no disponible.
+nuevo=Nou
+Nuevo_conjunto=Nou conjunt
+numero_incorrecto=N\u00famero incorrecte
+ocultardetalles=Ocultar detalls
+ok=D'acord
+Open=
+open_file=Obrir arxiu
+operator_and_explanation=Operador Y.\nActua com una intersecci\u00f3 en conjunts;\nsin\u00f3, com a operador l\u00f2gic, d\u00f3na cert si\nambd\u00f3s operants s\u00f3n certs.
+operator_distinct_explanation=Operador DISTINT DE.\nActua seleccionant aquells elements que\nno coincidixen entre ambd\u00f3s conjunts.
+operator_equal_explanation=Operador IGUAL.\nActua seleccionant aquell elements\nque coincidixen entre ambd\u00f3s conjunts.
+operator_equal_greater_explanation=Operador MAJOR O IGUAL QUE.\nActua seleccionant aquells elements de\nl'operant/conjunt a l'esquerra de l'operador\nque tenen major o igual valor que el de la seua dreta.
+operator_equal_smaller_explanation=Operador MENOR O IGUAL QUE.\nActua seleccionant aquells elements de\nl'operant/conjunt a l'esquerra de l'operador\nque tenen menor o igual valor que el de la seua dreta.
+operator_greater_explanation=Operador MAJOR QUE.\nActua seleccionant aquells elements de\nl'operant/conjunt a l'esquerra de l'operador que\ntenen major valor que el de la seua dreta.
+operator_not_explanation=Operador NO.\nActua com un complementari en conjunts;\nsin\u00f3, com a operador l\u00f2gic, canvi cert\nper fals o viceversa.
+operator_or_explanation=Operador O.\nActua com una uni\u00f3 en conjunts;\nsin\u00f3, com a operador l\u00f2gic, d\u00f3na fals si\nambd\u00f3s operandos s\u00f3n falsos.
+operator_smaller_explanation=Operador MENOR QUE.\nActua seleccionant aquells elements de\nl'operant/conjunt a l'esquerra de l'operador\nque tenen menor valor que el de la seua dreta.
+panel_adding_exception=Error en agregar capa\:
+panel_loading_exception=Error en carregar capa\:
+parenthesis_explanation=Afig els s\u00edmbols par\u00e8ntesis.\n(\u00datil per a agrupar operacions).
+pausar=Pausar
+Percent=Percentatge
+primero=Primer
+Process_canceled=Proc\u00e9s cancel\u00b7lat.
+Process_failed=Ha fallat el proc\u00e9s.
+Process_finished=Proc\u00e9s finalitzat.
+Process_finished_wont_be_cancelled=El proc\u00e9s ha finalitzat, no es cancel\u00b7lar\u00e0.
+reanudar=Reprendre
+registro=Registre\:
+salir=Eixir
+seleccion_alpha=Selecci\u00f3 de transpar\u00e8ncia
+Seleccionar_del_conjunto=Seleccionar del conjunt
+select_color=Seleccione un color
+si=s\u00ed
+siguiente=Seg\u00fcent
+subir=
+teclas=Tecles
+text_preview_text=Vista pr\u00e8via
+the_panel=el panell
+The_process_cant_be_cancelled=El proc\u00e9s no es pot cancel\u00b7lar
+The_process_cant_be_paused=El proc\u00e9s no es pot pausar.
+tiempo_transcurrido=Temps transcorregut
+title_cancel_incrementable=Confirmaci\u00f3
+ultimo=\u00daltim
+validate_expression=Validar expressi\u00f3
+validate_filter_expression_explanation=Validar o no l'expressi\u00f3 de filtre.
+Valores=Valors
+verdetalles=Veure detalls
+Warning=Av\u00eds
+write_here_a_filter_expression=Escriga ac\u00ed una expressi\u00f3 de filtratge.
+Yes=S\u00ed

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [pt]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=
+abrir...=
+aceptar=Aceitar
+Anadir_al_conjunto=Adicionar ao conjunto
+anterior=Anterior
+aplicar=Aplicar
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=Eliminar todos
+borrar_uno=Eliminar ponto seleccionado
+calendarBackOneMonth=Retrocede um m\u00eas
+calendarBackOneYear=Retrocede um ano
+calendarForwardOneMonth=Avan\u00e7a um m\u00eas
+calendarForwardOneYear=Avan\u00e7a um ano
+calendarSelectDate=Seleccionar data
+calendarTitle=Calend\u00e1rio
+Campos=Campos
+cancel=Cancelar
+cancelar=Cancelar
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Fechar
+date_button_explanation=Permite seleccionar uma data.
+de=of
+de\ 0=de 0
+deleteText=Eliminar texto
+deleteText_on_filter_use_explanation=Eliminar a express\u00e3o de filtro
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_paste=Colar
+edit_redo=Refazer
+edit_select_all=Selecionar tudo
+edit_undo=Anular
+Error=
+errorMessageJComboBoxItemsSeekerConfigurable=Configura\u00e7\u00e3o do comportamento inv\u00e1lido.
+espere=Por favor, espere
+exportJOP2Title=Exportar para JOP2T
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filterOnAWFSLayer=Filtro sobre um tema WFS
+filtros=
+guardar=Guardar
+Information=
+known_values=
+msg_cancel_incrementable=
+no=No
+No=
+no_image_available=
+nuevo=Novo
+Nuevo_conjunto=Novo conjunto
+numero_incorrecto=N\u00famero inv\u00e1lido
+ocultardetalles=
+ok=Aceitar
+Open=
+open_file=
+operator_and_explanation=Operador E (Intersecta os conjuntos como operador l\u00f3gico, d\u00e1 certo se ambos operandos s\u00e3o certos).
+operator_distinct_explanation=Operador DIFERENTE (Selecciona os elementos que nao coincidam entre ambos os conjuntos).
+operator_equal_explanation=Operador IGUAL (Selecciona os elementos que coincidam entre ambos os conjuntos).
+operator_equal_greater_explanation=Operador MAIOR OU IGUAL (Selecciona os elementos \u00e0 esquerda do operador que tem maior ou igual valor).
+operator_equal_smaller_explanation=Operador MENOR OU IGUAL (Selecciona os elementos \u00e0 direita do operador que tem menor ou igual valor).
+operator_greater_explanation=Operador MAIOR (Selecciona os elementos \u00e0 esquerda do operador).
+operator_not_explanation=Operador N\u00c3O (Complemento para conjuntos como operador l\u00f3gico, muda certo por falso ou vice-versa).
+operator_or_explanation=Operador OU (Uni\u00e3o em conjuntos como operador l\u00f3gico, d\u00e1 falso se ambos operadores s\u00e3o falsos).
+operator_smaller_explanation=Operador MENOR (Selecciona os elementos \u00e0 direita do operador).
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=Adicionar os par\u00eanteses () (utilidade para agrupar opera\u00e7\u00f5es)
+pausar=
+Percent=
+primero=Primeiro
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=Fechar
+seleccion_alpha=
+Seleccionar_del_conjunto=Seleccionar o conjunto
+select_color=
+si=Sim
+siguiente=Seguinte
+subir=
+teclas=
+text_preview_text=Pr\u00e9-visualizar
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=Ultimo
+validate_expression=
+validate_filter_expression_explanation=
+Valores=Valores
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sr.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [sr]
+#Mon Nov 02 08:36:03 CET 2009
+a_panel=panel
+abrir...=
+aceptar=Prihvati
+Anadir_al_conjunto=Dodaj skupu
+anterior=Prethodni
+aplicar=Primeni
+ayuda=Pomo\u0107
+ayuda_0=Prostor, 0\: Pogledaj sve
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Prika\u017ei/Sakrij podlogu
+ayuda_c=C\: Centriraj
+ayuda_h=H\:Ova pomo\u0107
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=To\u010dki\u0107 na mi\u0161u\: Zoom +/-
+bajar=
+borrar_todos=Izbri\u0161i sve ta\u010dke
+borrar_uno=Izbri\u0161i obele\u017eenu ta\u010dku
+calendarBackOneMonth=Jedan mesec unazad
+calendarBackOneYear=Godinu dana unazad
+calendarForwardOneMonth=Mesec dana unapred
+calendarForwardOneYear=Godinu dana unapred
+calendarSelectDate=Izaberi datum
+calendarTitle=Kalendar
+cancel=Odustani
+cancelar=Odustani
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Zatvori
+date_button_explanation=Omogu\u0107ava izbor datuma.
+de=od
+de\ 0=od 0
+deleteText=Izbri\u0161i tekst
+deleteText_on_filter_use_explanation=Izbri\u0161i re\u010denicu iz filtera.
+edit_copy=Iskopiraj
+edit_cut=Iseci
+edit_delete=Izbri\u0161i
+edit_paste=Nalepi
+edit_redo=Ponovi
+edit_select_all=Obele\u017ei sve
+edit_undo=Ponovi
+Error=Gre\u0161ka
+espere=Molimo, sa\u010dekajte
+Failed_pausing_the_process=Neuspe\u0161no zaustavljanje procesa.
+Failed_resuming_the_process=Neuspe\u0161no obnavljanje procesa.
+Failed_the_process=Neuspe\u0161an proces.
+fields_uppercase_first=Polja
+filter_by_sentence=Filtrirano po re\u010denici
+filter_of_Table=Filter tabele
+filtros=Filter
+guardar=Sa\u010duvaj
+Information=Podaci
+known_values=Poznate vrednosti
+msg_cancel_incrementable=Sigurno \u017eelite da odustanete od ovog procesa?
+no=Ne
+No=Ne
+no_image_available=Slika nije na raspolaganju.
+nuevo=Nov
+Nuevo_conjunto=Novi skup
+numero_incorrecto=Pogre\u0161na vrednost
+ocultardetalles=Prikrij detalje
+ok=ok
+Open=
+open_file=Otvori datoteku
+operator_and_explanation=Operater Y (Ima funkciju preseka u skupovima; kao logi\u010dki operater, funkcioni\u0161e ukoliko su oba operandusa ispravna).
+operator_distinct_explanation=Operater RAZLI\u010cITO OD. (Radi tako \u0161to obele\u017eava one elemente koji se ne podudaraju u oba skupa).
+operator_equal_explanation=Operater ISTO. (Radi tako \u0161to obele\u017eava one elemente koji se podudaraju u oba skupa).
+operator_equal_greater_explanation=Operator VE\u0106I OD ili ISTI KAO. (Radi tako \u0161to obele\u017eava one elemente operanduma/skupa sa leve strane operatora koji imaju ve\u0107u ili istovetnu vrednost od onog sa desne strane).
+operator_equal_smaller_explanation=Operator MANJI OD ili ISTI KAO. (Radi tako \u0161to obele\u017eava one elemente operanduma/skupa sa leve strane operatora koji imaju manju ili istovetnu vrednost od onog sa desne strane).
+operator_greater_explanation=Operator VE\u0106I OD. (Radi tako \u0161to obele\u017eava one elemente operanduma/skupa sa leve strane operatora koji imaju ve\u0107u vrednost od onog sa desne strane).
+operator_not_explanation=Operator NE. (Radi kao Komplementaran u skupovima; kao logi\u010dki operater, menja ispravno za pogre\u0161no ili obrnuto).
+operator_or_explanation=Operator ILI. (Radi kao Sveza u skupovima; kao logi\u010dki operater, daje pogre\u0161no ako su oba operandusa pogre\u0161na).
+operator_smaller_explanation=Operator MANJI OD. (Radi tako \u0161to obele\u017eava one elemente operanduma/skupa sa leve strane operatora koji imaju manju vrednost od onog sa desne strane).
+panel_adding_exception=Gre\u0161ka u dodavanju lejera\:
+panel_loading_exception=Gre\u0161ka pri u\u010ditavanju lejera\:
+parenthesis_explanation=Dodaj zagrade () (Korisno je za grupisanje operacija).
+pausar=Pauza
+Percent=Procenat
+primero=Prvi
+Process_canceled=Proces otkazan.
+Process_failed=Neuspe\u0161an proces.
+Process_finished=Proces je zavr\u0161en.
+Process_finished_wont_be_cancelled=Proces je zavr\u0161en, ne\u0107e biti otkazan.
+reanudar=Obnoviti 
+registro=Registar\:
+salir=Izla\u0111i
+seleccion_alpha=Izbor prozirnosti
+Seleccionar_del_conjunto=Izaberi iz skupa
+select_color=Izaberite boju
+si=da
+siguiente=Slede\u0107i
+subir=
+teclas=Tasteri
+text_preview_text=Prethodni pregled
+the_panel=Panel
+The_process_cant_be_cancelled=Ne mo\u017ee se odustati od procesa.
+The_process_cant_be_paused=Proces se ne mo\u017ee pauzirati.
+tiempo_transcurrido=Proteklo vreme
+title_cancel_incrementable=Potvrda
+ultimo=Poslednji
+validate_expression=Vrednovati izraz
+validate_filter_expression_explanation=Vrednovati ili ne vrednovati izraz filtera.
+verdetalles=Pogledaj detalje
+Warning=Upozorenje
+write_here_a_filter_expression=Zabele\u017ei ovde jedan izraz filtera.
+Yes=Da

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_tr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_tr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_tr.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [tr]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=
+abrir...=
+aceptar=Kabul et
+Anadir_al_conjunto=Tak\u0131ma ekle
+anterior=\u00d6nceki
+aplicar=Uygula
+ayuda=Yard\u0131m
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=T\u00fcm\u00fcn\u00fc sil
+borrar_uno=Se\u00e7ilen noktay\u0131 sil
+calendarBackOneMonth=Bir ay geri
+calendarBackOneYear=Bir y\u0131l geri
+calendarForwardOneMonth=Bir ay ileri
+calendarForwardOneYear=Bir y\u0131l ileri
+calendarSelectDate=Tarihi se\u00e7
+calendarTitle=Takvim
+cancel=\u0130ptal
+cancelar=\u0130ptal
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Kapat
+date_button_explanation=
+de=
+de\ 0=
+deleteText=Metni sil
+deleteText_on_filter_use_explanation=
+edit_copy=Kopyala
+edit_cut=Kes
+edit_delete=Sil
+edit_paste=Yap\u0131\u015ft\u0131r
+edit_redo=Yinele
+edit_select_all=T\u00fcm\u00fcn\u00fc se\u00e7
+edit_undo=Geri al
+Error=Hata
+espere=L\u00fctfen bekleyin...
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=\u0130\u015flemde hata
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filtros=S\u00fczge\u00e7
+guardar=Kaydet
+Information=Bilgi
+known_values=
+msg_cancel_incrementable=
+no=Hay\u0131r
+No=
+no_image_available=
+nuevo=Yeni
+Nuevo_conjunto=Yeni tak\u0131m
+numero_incorrecto=Ge\u00e7ersiz de\u011fer
+ocultardetalles=
+ok=Tamam
+Open=
+open_file=
+operator_and_explanation=
+operator_distinct_explanation=
+operator_equal_explanation=
+operator_equal_greater_explanation=
+operator_equal_smaller_explanation=
+operator_greater_explanation=
+operator_not_explanation=
+operator_or_explanation=
+operator_smaller_explanation=
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=
+pausar=
+Percent=Y\u00fczde
+primero=Birinci
+Process_canceled=\u0130\u015flem iptal edildi
+Process_failed=\u0130\u015flemde hata
+Process_finished=\u0130\u015flem tamamland\u0131
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=\u00c7\u0131k
+seleccion_alpha=
+Seleccionar_del_conjunto=
+select_color=Renk se\u00e7
+si=evet
+siguiente=Sonraki
+subir=
+teclas=
+text_preview_text=\u00d6ng\u00f6r\u00fcn\u00fc\u015f
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=En son
+validate_expression=
+validate_filter_expression_explanation=
+verdetalles=
+Warning=Uyar\u0131
+write_here_a_filter_expression=
+Yes=Evet

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_tr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ru.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ru.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ru.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [ru]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=
+abrir...=
+aceptar=\u041e\u041a
+Anadir_al_conjunto=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0430\u0431\u043e\u0440\u0443
+anterior=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439
+aplicar=
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435
+borrar_uno=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438
+calendarBackOneMonth=\u041d\u0430 \u043c\u0435\u0441\u044f\u0446 \u043d\u0430\u0437\u0430\u0434
+calendarBackOneYear=\u041d\u0430 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434
+calendarForwardOneMonth=\u041d\u0430 \u043c\u0435\u0441\u044f\u0446 \u0432\u043f\u0435\u0440\u0435\u0434
+calendarForwardOneYear=\u041d\u0430 \u0433\u043e\u0434 \u0432\u043f\u0435\u0440\u0435\u0434
+calendarSelectDate=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u0442\u0443
+calendarTitle=\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c
+cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+cancelar=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
+date_button_explanation=\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u0434\u0430\u0442\u044b
+de=\u0438\u0437
+de\ 0=\u0438\u0437 0
+deleteText=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442
+deleteText_on_filter_use_explanation=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430
+edit_copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+edit_cut=\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c
+edit_delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+edit_paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c
+edit_redo=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c
+edit_select_all=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435
+edit_undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+Error=
+espere=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filtros=
+guardar=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
+Information=
+known_values=
+msg_cancel_incrementable=
+no=\u041d\u0435\u0442
+No=
+no_image_available=
+nuevo=\u041d\u043e\u0432\u044b\u0439
+Nuevo_conjunto=\u041d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440
+numero_incorrecto=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+ocultardetalles=
+ok=\u041e\u041a
+Open=
+open_file=
+operator_and_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 AND  (\u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432; \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0418\u0441\u0442\u0438\u043d\u0430, \u0435\u0441\u043b\u0438 \u043e\u0431\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0418\u0441\u0442\u0438\u043d\u0430)
+operator_distinct_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 DISTINCT (\u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044d\u0442\u0438\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432)
+operator_equal_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 EQUAL (\u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044d\u0442\u0438\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432)
+operator_equal_greater_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 EQUAL OR GREATER (\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043b\u0435\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430).
+operator_equal_smaller_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 EQUAL OR SMALLER (\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043b\u0435\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430).
+operator_greater_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 GREATER (\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043b\u0435\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430).
+operator_not_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 NOT (\u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432; \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0418\u0441\u0442\u0438\u043d\u0430 \u043d\u0430 \u041b\u043e\u0436\u044c \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442).
+operator_or_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 OR (\u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432; \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u041b\u043e\u0436\u044c, \u0435\u0441\u043b\u0438 \u043e\u0431\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u041b\u043e\u0436\u044c)
+operator_smaller_explanation=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SMALLER (\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043b\u0435\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430).
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=\u041a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 () (\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439)
+pausar=
+Percent=
+primero=\u041f\u0435\u0440\u0432\u044b\u0439
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=\u0412\u044b\u0445\u043e\u0434
+seleccion_alpha=
+Seleccionar_del_conjunto=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430
+select_color=
+si=\u0434\u0430
+siguiente=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439
+subir=
+teclas=
+text_preview_text=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439
+validate_expression=
+validate_filter_expression_explanation=
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ru.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_de.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [de]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=Eingabefeld
+abrir...=
+aceptar=OK
+Anadir_al_conjunto=Zum Datensatz hinzuf\u00fcgen
+anterior=Zur\u00fcck
+aplicar=Anwenden
+ayuda=Hilfe
+ayuda_0=Leerzeichen, 0\: Alles anzeigen
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Anzeigen/Verbergen des Hintergrundes
+ayuda_c=C\: Zentrieren
+ayuda_h=H\: Diese Hilfe
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=Rotierung mit Maus\: Zoom +/-
+bajar=nach unten
+borrar_todos=Alle Passpunkte l\u00f6schen
+borrar_uno=Ausgew\u00e4hlten Passpunkt l\u00f6schen
+calendarBackOneMonth=Einen Monat zur\u00fcck
+calendarBackOneYear=Ein Jahr zur\u00fcck
+calendarForwardOneMonth=Einen Monat vor
+calendarForwardOneYear=Ein Jahr vor
+calendarSelectDate=Datum ausw\u00e4hlen
+calendarTitle=Kalender
+Campos=Felder
+cancel=Abbrechen
+cancelar=Abbrechen
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=schlie\u00dfen
+date_button_explanation=Erm\u00f6glicht die Eingabe eines Datums 
+de=von
+de\ 0=von 0
+deleteText=Text l\u00f6schen
+deleteText_on_filter_use_explanation=Filterergebnisse l\u00f6schen
+edit_copy=Kopieren
+edit_cut=Ausschneiden
+edit_delete=L\u00f6schen
+edit_paste=Einf\u00fcgen
+edit_redo=Wiederholen
+edit_select_all=Alles ausw\u00e4hlen
+edit_undo=Zur\u00fccksetzen
+Error=Fehler
+errorMessageJComboBoxItemsSeekerConfigurable=Fehlerhaftes Verhalten der Konfiguration. 
+espere=Warten sie bitte.
+exportJOP2Title=Als JOP2T exportieren
+Failed_pausing_the_process=Vorgang konnte nicht angehalten werden.
+Failed_resuming_the_process=Fehler beim Wiederholen des Vorgangs.
+Failed_the_process=Vorgang abgebrochen
+fields_uppercase_first=Felder
+filter_by_sentence=Filter durch Ausdruck
+filter_of_Table=Filter f\u00fcr Tabelle
+filterOnAWFSLayer=Filter auf einen WFS Layer erzeugen
+filtros=Filter
+guardar=Speichern
+Information=Information
+known_values=Inhalte
+msg_cancel_incrementable=Sind Sie sicher, dass Sie diesen Prozess beenden m\u00f6chten?
+no=Nein
+No=Nein
+no_image_available=Kein Bild verf\u00fcgbar
+nuevo=Neu
+Nuevo_conjunto=Neuer Datensatz
+numero_incorrecto=Falsche Nummer
+ocultardetalles=Details ausblenden
+ok=Ok
+Open=
+open_file=Datei \u00f6ffnen
+operator_and_explanation=AND (logisches UND) Operator. (Gibt die Schnittmenge wieder; ist ein logischer Operator; zeigt"wahr", wenn beide Rechengr\u00f6\u00dfen wahr sind)
+operator_distinct_explanation=Ungleichheit (\!\=) Operator. (W\u00e4hlt diejenigen Elemente aus, die nicht zwischen zwei Mengen liegen)
+operator_equal_explanation=GLEICH (\=) Operator. (W\u00e4hlt diejenigen Elemente aus, die mit beiden Mengen \u00fcbereinstimmen)
+operator_equal_greater_explanation=GROESSER GLEICH (>\=) Operator. (W\u00e4hlt diejenigen Elemente der Rechengr\u00f6\u00dfe/Menge, die links vom Operator stehen und einen h\u00f6heren oder gleichen Wert haben, als der Wert rechts vom Operator) 
+operator_equal_smaller_explanation=KLEINER GLEICH (<\=)Operator.(W\u00e4hlt diejenigen Elemente der Rechengr\u00f6\u00dfe/Menge, die links vom Operator stehen und einen kleineren oder gleichen Wert haben, als der Wert rechts vom Operator)\t
+operator_greater_explanation=GROESSER ALS (>) Operator. (W\u00e4hlt diejenigen Elemente der Rechengr\u00f6\u00dfe/Menge, die links vom Operator stehen und einen h\u00f6heren Wert haben, als der Wert rechts vom Operator)
+operator_not_explanation=LOGISCHE NEGATION (not) Operator. (Verh\u00e4lt sich wie ein Komplement zwischen Mengen, ist ein logischer Operator, \u00e4ndert richtig in falsch und umgekehrt)
+operator_or_explanation=LOGISCHES ODER (||) Operator. (Vereinigung von Mengen; ist ein logischer Operator; zeigt "nicht wahr", wenn beide Rechengr\u00f6\u00dfen nicht wahr sind)\n
+operator_smaller_explanation=KLEINER ALS (<) Operator. (W\u00e4hlt diejenigen Elemente der Rechengr\u00f6\u00dfe/Menge, die links vom Operator stehen und einen niedrigeren Wert, als der Wert rechts vom Operator)
+panel_adding_exception=Fehler beim Hinzuf\u00fcgen eines Layers\:
+panel_loading_exception=Fehler beim Laden eines Layers\:
+parenthesis_explanation=Klammern hinzuf\u00fcgen () (Hilfreich  beim Zusammenfassen mehrerer Arbeitsabl\u00e4ufe).
+pausar=stoppen
+Percent=Prozent
+primero=Erster
+Process_canceled=Prozess wurde abgebrochen.
+Process_failed=Prozess fehlgeschlagen.
+Process_finished=Prozess beendet.
+Process_finished_wont_be_cancelled=Vorgang ist bereits beendet. Er wird nicht abgebrochen. 
+reanudar=neustarten
+registro=Datensatz\:
+salir=Schlie\u00dfen
+seleccion_alpha=Transparenz ausw\u00e4hlen
+Seleccionar_del_conjunto=Aus dem Datensatz ausw\u00e4hlen
+select_color=Farbe ausw\u00e4hlen
+si=ja
+siguiente=Weiter
+subir=
+teclas=Tasten\t
+text_preview_text=Vorschau
+the_panel=Die Eingabe
+The_process_cant_be_cancelled=Der Prozess kann nicht abgebrochen werden
+The_process_cant_be_paused=Der Prozess kann nicht angehalten werden
+tiempo_transcurrido=Zeit abgelaufen
+title_cancel_incrementable=Best\u00e4tigung
+ultimo=Letzte
+validate_expression=Ausdruck pr\u00fcfen
+validate_filter_expression_explanation=Pr\u00fcfen des Ausdrucks f\u00fcr den Filter. 
+Valores=Werte
+verdetalles=Details anzeigen
+Warning=Warnung
+write_here_a_filter_expression=Definieren Sie hier einen Ausdruck f\u00fcr den Filter. 
+Yes=Ja

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sw.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sw.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sw.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [sw]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=
+abrir...=
+aceptar=Idhinisha
+Anadir_al_conjunto=Ongeza kwenye Seti
+anterior=ya awali (kabla)
+aplicar=
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=Futa Yote
+borrar_uno=Futa Pointi Iliyochaguliwa
+calendarBackOneMonth=Nyuma Mwezi Mmoja
+calendarBackOneYear=Nyuma Mwaka Mmoja
+calendarForwardOneMonth=Mbele Mwezi Mmoja
+calendarForwardOneYear=Mbele Mwaka Mmoja
+calendarSelectDate=Chagua Tarehe
+calendarTitle=Kalenda
+cancel=Futa
+cancelar=Futa
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Funga
+date_button_explanation=Maelezo ya Kitufe cha Tarehe
+de=ya
+de\ 0=ya 0
+deleteText=Futa Maandishi
+deleteText_on_filter_use_explanation=Futa Maandishi Kwenye Chujio Tumia Maelekezo
+edit_copy=Kivuli
+edit_cut=Kata
+edit_delete=Futa
+edit_paste=Gandamanisha
+edit_redo=Fanya Tena
+edit_select_all=Chagua Yote
+edit_undo=Tangua
+Error=
+espere=Tafahali Subiri
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filtros=
+guardar=Weka Akiba
+Information=
+known_values=
+msg_cancel_incrementable=
+no=Hapana
+No=Hapana
+no_image_available=
+nuevo=Mpya
+Nuevo_conjunto=Seti Mpya
+numero_incorrecto=Kiwango ni Batili
+ocultardetalles=
+ok=ok
+Open=
+open_file=
+operator_and_explanation=Fanya Tendo na Kutoa Maelezo
+operator_distinct_explanation=Fanya Tendo na Kutoa Maelezo yakina
+operator_equal_explanation=Fanya Tendo na Kutoa Maelezo
+operator_equal_greater_explanation=Fanya Tendo sawa  na Maelezo
+operator_equal_smaller_explanation=Fanya Tendo  na Maelezo kiasi
+operator_greater_explanation=Fanya Tendo  na Maelezo ya Kutosha
+operator_not_explanation=Fanya Tendo bila ya  Maelezo
+operator_or_explanation=Fanya Tendo au  Maelezo
+operator_smaller_explanation=Fanya Tendo na Maelezo kidogo
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=Maelezo ya Mabano
+pausar=
+Percent=
+primero=Kwanza
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=Toka/Ondoka
+seleccion_alpha=
+Seleccionar_del_conjunto=Chagua Kutoka Kwenye Seti
+select_color=
+si=Ndio
+siguiente=Inayofuata
+subir=
+teclas=
+text_preview_text=Onyesho la Awali
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=Ya Mwisho
+validate_expression=
+validate_filter_expression_explanation=
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_sw.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_el.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_el.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_el.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [el]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=
+abrir...=
+aceptar=\u0391\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae
+Anadir_al_conjunto=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03bf \u03c3\u03cd\u03bd\u03bf\u03bb\u03bf
+anterior=\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2
+aplicar=
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03cc\u03bb\u03c9\u03bd
+borrar_uno=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03b7\u03bc\u03b5\u03af\u03bf\u03c5
+calendarBackOneMonth=\u03a0\u03af\u03c3\u03c9 \u03ad\u03bd\u03b1 \u03bc\u03ae\u03bd\u03b1
+calendarBackOneYear=\u03a0\u03af\u03c3\u03c9 \u03ad\u03bd\u03b1 \u03ad\u03c4\u03bf\u03c2
+calendarForwardOneMonth=\u039c\u03c0\u03c1\u03bf\u03c3\u03c4\u03ac \u03ad\u03bd\u03b1 \u03bc\u03ae\u03bd\u03b1
+calendarForwardOneYear=\u039c\u03c0\u03c1\u03bf\u03c3\u03c4\u03ac \u03ad\u03bd\u03b1 \u03ad\u03c4\u03bf\u03c2
+calendarSelectDate=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
+calendarTitle=\u0397\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf
+cancel=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
+cancelar=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+date_button_explanation=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
+de=\u03c4\u03bf\u03c5
+de\ 0=\u03c4\u03bf\u03c5 0
+deleteText=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+deleteText_on_filter_use_explanation=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c4\u03bf\u03c5 \u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03ad\u03c3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c4\u03bf\u03c5 \u03c6\u03af\u03bb\u03c4\u03c1\u03bf\u03c5
+edit_copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
+edit_cut=\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae
+edit_delete=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae
+edit_paste=\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7
+edit_redo=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 \u03b1\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7\u03c2
+edit_select_all=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd
+edit_undo=\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+Error=
+espere=\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c0\u03b5\u03c1\u03b9\u03bc\u03ad\u03bd\u03b5\u03c4\u03b5
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filtros=
+guardar=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+Information=
+known_values=
+msg_cancel_incrementable=
+no=\u038c\u03c7\u03b9
+No=
+no_image_available=
+nuevo=\u039d\u03ad\u03bf
+Nuevo_conjunto=\u039d\u03ad\u03bf \u03c3\u03cd\u03bd\u03bf\u03bb\u03bf
+numero_incorrecto=\u0386\u03ba\u03c5\u03c1\u03b7 \u03c4\u03b9\u03bc\u03ae
+ocultardetalles=
+ok=\u0391\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae
+Open=
+open_file=
+operator_and_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u039a\u0391\u0399 (\u0395\u03bd\u03b5\u03c1\u03b3\u03b5\u03af \u03c3\u03b1\u03bd \u03bc\u03b9\u03b1 \u0394\u03b9\u03b1\u03c4\u03bf\u03bc\u03ae \u03c3\u03c5\u03bd\u03cc\u03bb\u03c9\u03bd; \u03c9\u03c2 \u03bb\u03bf\u03b3\u03b9\u03ba\u03cc\u03c2 \u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2, \u03b1\u03bb\u03b7\u03b8\u03b5\u03cd\u03b5\u03b9 \u03cc\u03c4\u03b1\u03bd \u03ba\u03b1\u03b9 \u03bf\u03b9 \u03b4\u03cd\u03bf \u03c3\u03c5\u03bd\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ad\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03bb\u03b7\u03b8\u03b5\u03af\u03c2).
+operator_distinct_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2  \u0394\u0399\u0391\u03a6\u039f\u03a1\u039f \u0391\u03a0\u039f. (\u0395\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03b5\u03ba\u03b5\u03af\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03c3\u03c5\u03bc\u03c0\u03af\u03c0\u03c4\u03bf\u03c5\u03bd \u03bc\u03b5\u03c4\u03b1\u03be\u03cd \u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd \u03b4\u03cd\u03bf \u03c3\u03c5\u03bd\u03cc\u03bb\u03c9\u03bd).
+operator_equal_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u0399\u03a3\u039f\u03a3. (\u0395\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03b5\u03ba\u03b5\u03af\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03c3\u03c5\u03bc\u03c0\u03af\u03c0\u03c4\u03bf\u03c5\u03bd \u03bc\u03b5\u03c4\u03b1\u03be\u03cd \u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd \u03b4\u03cd\u03bf \u03c3\u03c5\u03bd\u03cc\u03bb\u03c9\u03bd).
+operator_equal_greater_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u039c\u0395\u0393\u0391\u039b\u03a5\u03a4\u0395\u03a1\u039f \u0389 \u0399\u03a3\u039f. (\u0395\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03b5\u03ba\u03b5\u03af\u03bd\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03b5\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9/\u03c3\u03c5\u03bd\u03b4\u03c5\u03ac\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c4\u03bf\u03c5 \u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03ba\u03b1\u03b9 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03bc\u03b5\u03b3\u03b1\u03bb\u03cd\u03c4\u03b5\u03c1\u03b7 \u03b1\u03c0\u03cc \u03ae \u03af\u03c3\u03b7 \u03c4\u03b9\u03bc\u03ae \u03bc\u03b5 \u03b1\u03c5\u03c4\u03ac \u03c3\u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac \u03c4\u03bf\u03c5).
+operator_equal_smaller_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u039c\u0399\u039a\u03a1\u039f\u03a4\u0395\u03a1\u039f \u0397\u0384\u0399\u03a3\u039f. (\u0395\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03b5\u03ba\u03b5\u03af\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03c4\u03b5\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9/\u03c3\u03c5\u03bd\u03b4\u03c5\u03ac\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c4\u03bf\u03c5 \u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03ba\u03b1\u03b9 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03bc\u03b9\u03ba\u03c1\u03cc\u03c4\u03b5\u03c1\u03b7 \u03b1\u03c0\u03cc \u03ae \u03af\u03c3\u03b7 \u03c4\u03b9\u03bc\u03ae \u03bc\u03b5 \u03b1\u03c5\u03c4\u03ac \u03c3\u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac \u03c4\u03bf\u03c5).
+operator_greater_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u039c\u0395\u0393\u0391\u039b\u03a5\u03a4\u0395\u03a1\u039f\u03a3 \u0391\u03a0\u039f. (\u0395\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03b5\u03ba\u03b5\u03af\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03c4\u03b5\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9/\u03c3\u03c5\u03bd\u03b4\u03c5\u03ac\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c4\u03bf\u03c5 \u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03ba\u03b1\u03b9 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03bc\u03b5\u03b3\u03b1\u03bb\u03cd\u03c4\u03b5\u03c1\u03b7 \u03c4\u03b9\u03bc\u03ae \u03b1\u03c0\u03cc \u03b1\u03c5\u03c4\u03ac \u03c3\u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac \u03c4\u03bf\u03c5).
+operator_not_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u039f\u03a7\u0399 (\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b5\u03af \u03c9\u03c2 \u03bf \u03c3\u03c5\u03bc\u03c0\u03bb\u03b7\u03c1\u03c9\u03bc\u03b1\u03c4\u03b9\u03ba\u03cc\u03c2 \u03c3\u03b5 \u03c3\u03cd\u03bd\u03bf\u03bb\u03b1;  \u03c9\u03c2 \u03bb\u03bf\u03b3\u03b9\u03ba\u03cc\u03c2 \u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2, \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03c3\u03b5 \u03b1\u03bb\u03b7\u03b8\u03ae\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03bd \u03c8\u03b5\u03c5\u03b4\u03ae \u03ae \u03b1\u03bd\u03c4\u03af\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1).
+operator_or_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u0389 (\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b5\u03af \u03c9\u03c2 \u03ad\u03bd\u03c9\u03c3\u03b7 \u03c3\u03b5 \u03c3\u03cd\u03bd\u03bf\u03bb\u03b1; \u03c9\u03c2 \u03bb\u03bf\u03b3\u03b9\u03ba\u03cc\u03c2 \u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2, \u03b4\u03af\u03bd\u03b5\u03b9 \u03c8\u03b5\u03c5\u03b4\u03ad\u03c2 \u03b1\u03bd \u03ba\u03b1\u03b9 \u03bf\u03b9 \u03b4\u03cd\u03bf \u03c3\u03c5\u03bd\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ad\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c8\u03b5\u03c5\u03b4\u03b5\u03af\u03c2).
+operator_smaller_explanation=\u03a4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u039c\u0399\u039a\u03a1\u039f\u03a4\u0395\u03a1\u039f\u03a3 \u0391\u03a0\u039f. (\u0395\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03b5\u03ba\u03b5\u03af\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03c4\u03b5\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9/\u03c3\u03c5\u03bd\u03b4\u03c5\u03ac\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c4\u03bf\u03c5 \u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03ba\u03b1\u03b9 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03bc\u03b9\u03ba\u03c1\u03cc\u03c4\u03b5\u03c1\u03b7 \u03c4\u03b9\u03bc\u03ae \u03b1\u03c0\u03cc \u03b1\u03c5\u03c4\u03ac \u03c3\u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac \u03c4\u03bf\u03c5).
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03b1\u03c1\u03b5\u03bd\u03b8\u03ad\u03c3\u03b5\u03c9\u03bd () (\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03bf \u03c3\u03c4\u03b7\u03bd \u03bf\u03bc\u03b1\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b9\u03ce\u03bd).
+pausar=
+Percent=
+primero=\u03a0\u03c1\u03ce\u03c4\u03bf\u03c2
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=\u0388\u03be\u03bf\u03b4\u03bf\u03c2
+seleccion_alpha=
+Seleccionar_del_conjunto=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c0\u03cc \u03c3\u03cd\u03bd\u03bf\u03bb\u03bf
+select_color=
+si=\u03bd\u03b1\u03b9
+siguiente=\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf
+subir=
+teclas=
+text_preview_text=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c2
+validate_expression=
+validate_filter_expression_explanation=
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_el.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en.properties	(revision 42196)
@@ -0,0 +1,123 @@
+#Translations for language [en]
+#Mon Nov 02 08:36:03 CET 2009
+a_panel=a panel
+abrir...=
+aceptar=Accept
+Anadir_al_conjunto=Add to set
+anterior=Previous
+aplicar=Apply
+apply=Apply
+ayuda=Help
+ayuda_0=spacebar, 0\: View all
+ayuda_1_5=1-5\: Zoom levels
+ayuda_background=b\: Show/hide background
+ayuda_c=c\: Centre
+ayuda_h=h\: This help
+ayuda_more_less=+/-\: Zoom in/out
+ayuda_wheel=Mouse wheel\: Zoom in/out
+bajar=Down
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+calendarBackOneMonth=Back one month
+calendarBackOneYear=Back one year
+calendarForwardOneMonth=Forward one month
+calendarForwardOneYear=Forward one year
+calendarSelectDate=Select date
+calendarTitle=Calendar
+Campos=Fields
+cancel=Cancel
+cancelar=Cancel
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Close
+date_button_explanation=Allows date selection
+de=of
+de\ 0=of 0
+deleteText=Delete text
+deleteText_on_filter_use_explanation=Delete filter rule
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+Error=Error
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+espere=\=Wait a moment, please...
+exportJOP2Title=Export to JOP2T
+Failed_pausing_the_process=Failed to pause processing.
+Failed_resuming_the_process=Failed to resume processing.
+Failed_the_process=The process failed
+fields_uppercase_first=Fields
+filter_by_sentence=Filter by phrase
+filter_of_Table=Table filter
+filterOnALayer=Filter on a layer
+filterOnAWFSLayer=Filter on a WFS layer
+filtros=Filter
+guardar=Save
+Information=Information
+known_values=Contents
+ladoVentana=Window side
+largeIcon= Large icons
+list=List
+msg_cancel_incrementable=Cancel the computation?
+no=No
+No=No
+no_image_available=Image not available.
+nuevo=New
+Nuevo_conjunto=New set
+numero_incorrecto=Invalid value
+ocultardetalles=Hide details
+ok=Ok
+Open=
+open_file=Open file
+operator_and_explanation=AND operator.\nCalculates set intersection;\nUsed as a logical operator, "A AND B " returns "true" \nif both "A" and "B" are true.
+operator_distinct_explanation=NOT EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nnot equal to the right-hand side value.
+operator_equal_explanation=EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nequal to the right-hand side value.
+operator_equal_greater_explanation=GREATER OR EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\ngreater than or equal to the right-hand side value.
+operator_equal_smaller_explanation=SMALLER OR EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nsmaller than or equal to the right-hand side value.
+operator_greater_explanation=GREATER THAN operator.\nFilters out those records for which the value \nin the field on the left-hand side is\ngreater than the value on the right-hand side.
+operator_not_explanation=NOT operator.\nCalculates set complement;\nUsed as a logical operator, "NOT A " returns "true" \nif "A" is false and vice versa.
+operator_or_explanation=OR operator.\nCalculates set union;\nUsed as a logical operator, "A OR B " returns "true" \nif either "A" or "B" is true and returns "false" if both\nare false .
+operator_smaller_explanation=SMALLER THAN operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nsmaller than the value on the right-hand side.
+outputType=Data type
+panel_adding_exception=Error adding layer\:
+panel_loading_exception=Error loading layer\:
+parenthesis_explanation=Add parentheses to group operations.
+pausar=Pause
+Percent=Percent
+primero=First
+Process_canceled=Process canceled
+Process_failed=Process failed
+Process_finished=Process finished
+Process_finished_wont_be_cancelled=Process has already finished. Will not be cancelled.
+reanudar=Resume
+registro=Register\:
+salir=Exit
+saturation=Saturation
+seleccion_alpha=Transparency setting
+Seleccionar_del_conjunto=Select from set
+select_color=Select color
+si=yes
+sideLong=Window side
+siguiente=Next
+smallIcon=Small icons
+subir=Up
+teclas=Keys
+text_preview_text=Preview
+the_panel=the panel
+The_process_cant_be_cancelled=Operation cannot be cancelled.
+The_process_cant_be_paused=Operation cannot be paused.
+tiempo_transcurrido=Elapsed time
+title_cancel_incrementable=Confirmation
+ultimo=Last
+validate_expression=Validate expression
+validate_filter_expression_explanation=Choose whether to validate filter expression
+Valores=Values
+verdetalles=Show details
+view=View
+Warning=Warning
+write_here_a_filter_expression=Enter an SQL WHERE style expression manually or use the buttons to compose one.
+yellow=Yellow
+Yes=Yes

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_gl.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [gl]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=un panel
+abrir...=
+aceptar=Aceptar
+Anadir_al_conjunto=Engadir ao conxunto
+anterior=Anterior
+aplicar=Aplicar
+ayuda=Axuda
+ayuda_0=Espacio, 0\: Ver todo
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Amosar/Ocultar fondo
+ayuda_c=C\: Centrar
+ayuda_h=H\: Esta axuda
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=Roda rato\: Zoom +/-
+bajar=
+borrar_todos=Borrar todos os puntos
+borrar_uno=Borrar punto seleccionado
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un ano
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un ano
+calendarSelectDate=Seleccione unha data.
+calendarTitle=Calendario
+Campos=Campos
+cancel=Cancelar
+cancelar=Cancelar
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Pechar
+date_button_explanation=Permite seleccionar unha data.
+de=de
+de\ 0=de 0
+deleteText=Borrar texto
+deleteText_on_filter_use_explanation=Borra a sentencia de filtrado.
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_paste=Colar
+edit_redo=Refacer
+edit_select_all=Seleccionar todo
+edit_undo=Desfacer
+Error=Erro
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n do comportamento non v\u00e1lida.
+espere=Por favor, espere
+exportJOP2Title=Exportar a JOP2T
+Failed_pausing_the_process=Erro ao pausar o proxecto.
+Failed_resuming_the_process=Erro ao reanudar o proceso.
+Failed_the_process=Erro no proceso.
+fields_uppercase_first=Campos
+filter_by_sentence=Filtrado por sentencia
+filter_of_Table=Filtro de T\u00e1boa
+filterOnAWFSLayer=Filtro sobre unha capa WFS
+filtros=Filtros
+guardar=Gardar
+Information=Informaci\u00f3n
+known_values=Valores co\u00f1ecidos
+msg_cancel_incrementable=\u00bfEst\u00e1 seguro de que desexa cancelar este proceso?
+no=Non
+No=Non
+no_image_available=Imaxe non dispo\u00f1ible.
+nuevo=Novo
+Nuevo_conjunto=Novo conxunto
+numero_incorrecto=N\u00famero incorrecto
+ocultardetalles=Ocultar detalles
+ok=Aceptar
+Open=
+open_file=Abrir Arquivo
+operator_and_explanation=Operador Y.\nAct\u00faa coma unha intersecci\u00f3n en conxuntos;\nse non, coma operador l\u00f3xico, da certo si\nambos operandos son certos.
+operator_distinct_explanation=Operador DISINTO DE.\nAct\u00faa seleccionando aqueles elementos que\nnon coinciden entrambos conxuntos.
+operator_equal_explanation=Operador IGUAL.\nAct\u00faa seleccionando aqueles elementos\nque coinciden entrambos conxuntos.
+operator_equal_greater_explanation=Operador MAIOR OU IGUAL QUE.\n Act\u00faa seleccionando aqueles elementos do\n operando/conxunto \u00e1 esquerda do operador\n que te\u00f1en maior ou igual valor que o da s\u00faa dereita.
+operator_equal_smaller_explanation=Operador MENOR OU IGUAL QUE.\n Act\u00faa seleccionando aqueles elementos do\n operando/conxunto \u00e1 esquerda do operador\n que te\u00f1en menor ou igual valor que o da s\u00faa dereita.
+operator_greater_explanation=Operador MAIOR QUE.\n Act\u00faa seleccionando aqueles elementos do\n operando/conxunto \u00e1 esquerda do operador\n que te\u00f1en maiorl valor que o da s\u00faa dereita.
+operator_not_explanation=Operador NON.\n Act\u00faa como un complementario en conxuntos;\n se non, coma operador l\u00f3xico, cambia certo\n por falso e viceversa.
+operator_or_explanation=Act\u00faa coma unha uni\u00f3n en conxuntos;\nse non, coma operador l\u00f3xico, da falso si\nambos operandos son falsos.
+operator_smaller_explanation=Operador MENOR QUE.\n Act\u00faa seleccionando aqueles elementos do\n operando/conxunto \u00e1 esquerda do operador\n que te\u00f1en menor valor que o da s\u00faa dereita.
+panel_adding_exception=Erro ao agregar capa\:
+panel_loading_exception=Erro ao cargar capa\:
+parenthesis_explanation=Engade os s\u00edmbolos par\u00e9ntesis.\n (\u00datil para agrupar operaci\u00f3ns).
+pausar=Pausar
+Percent=Porcentaxe
+primero=Primeiro
+Process_canceled=Proceso cancelado.
+Process_failed=Fallou o proceso.
+Process_finished=Proceso rematado.
+Process_finished_wont_be_cancelled=O proceso rematou, non se cancelar\u00e1.
+reanudar=Reanudar
+registro=Rexistro\:
+salir=Sa\u00edr
+seleccion_alpha=Selecci\u00f3n de Transparencia
+Seleccionar_del_conjunto=Seleccionar do conxunto
+select_color=Seleccione unha cor
+si=s\u00ed
+siguiente=Seguinte
+subir=
+teclas=Tecras
+text_preview_text=Vista previa
+the_panel=o panel
+The_process_cant_be_cancelled=O proceso non se pode cancelar.
+The_process_cant_be_paused=O proceso non se pode pausar.
+tiempo_transcurrido=Tempo transcurrido
+title_cancel_incrementable=Confirmaci\u00f3n
+ultimo=Derradeiro
+validate_expression=Validar expresi\u00f3n
+validate_filter_expression_explanation=Validar ou non a expresi\u00f3n de filtro.
+Valores=Valores
+verdetalles=Ver detalles
+Warning=Aviso
+write_here_a_filter_expression=Escriba aqu\u00ed unha expresion de filtro.
+Yes=Si

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_cs.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [cs]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=
+abrir...=
+aceptar=Budi\u017e
+Anadir_al_conjunto=P\u0159idat do mno\u017einy
+anterior=P\u0159edchoz\u00ed
+aplicar=Pou\u017e\u00edt
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=Sma\u017e v\u0161e
+borrar_uno=Sma\u017e vybran\u00e9 body
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+Campos=Pole
+cancel=Zru\u0161it
+cancelar=Zru\u0161it
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Zav\u0159\u00edt
+date_button_explanation=
+de=of
+de\ 0=z ()
+deleteText=
+deleteText_on_filter_use_explanation=
+edit_copy=Kop\u00edrovat
+edit_cut=Vyjmout
+edit_delete=Smazat
+edit_paste=Vlo\u017e
+edit_redo=Dal\u0161\u00ed zm\u011bna
+edit_select_all=Vyber v\u0161e
+edit_undo=Vra\u0165 zm\u011bnu
+Error=
+errorMessageJComboBoxItemsSeekerConfigurable=Chybn\u00e1 konfigurace chov\u00e1n\u00ed.
+espere=Pros\u00edm \u010dekejte
+exportJOP2Title=
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filterOnAWFSLayer=
+filtros=
+guardar=Ulo\u017eit
+Information=
+known_values=
+msg_cancel_incrementable=
+no=No
+No=
+no_image_available=
+nuevo=Nov\u00fd
+Nuevo_conjunto=Nov\u00e1 skupina
+numero_incorrecto=Neplatn\u00e1 hodnota
+ocultardetalles=
+ok=Budi\u017e
+Open=
+open_file=
+operator_and_explanation=
+operator_distinct_explanation=
+operator_equal_explanation=
+operator_equal_greater_explanation=
+operator_equal_smaller_explanation=
+operator_greater_explanation=
+operator_not_explanation=
+operator_or_explanation=
+operator_smaller_explanation=
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=
+pausar=
+Percent=
+primero=Prvn\u00ed
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=Konec
+seleccion_alpha=
+Seleccionar_del_conjunto=Vybrat ze sady
+select_color=
+si=ano
+siguiente=Dal\u0161\u00ed
+subir=
+teclas=
+text_preview_text=
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=Posledn\u00ed
+validate_expression=
+validate_filter_expression_explanation=
+Valores=Hodnoty
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt_BR.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt_BR.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt_BR.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [pt_BR]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=Painel
+abrir...=
+aceptar=aceitar
+Anadir_al_conjunto=Adicionar ao conjunto
+anterior=Anterior
+aplicar=aplicar
+ayuda=ajuda
+ayuda_0=Espa\u00e7o, 0\: Ver tudo
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Mostrar/Ocultar fundo
+ayuda_c=C\: Centrar
+ayuda_h=H\: Esta ajuda
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=Rolagem do mouse\: Zoom +/-
+bajar=
+borrar_todos=Apagar tudo
+borrar_uno=Apagar ponto selecionado
+calendarBackOneMonth=Retrocede um m\u00eas
+calendarBackOneYear=Retrocede um ano
+calendarForwardOneMonth=Avan\u00e7a um m\u00eas
+calendarForwardOneYear=Avan\u00e7a um ano
+calendarSelectDate=Selecionar data
+calendarTitle=Calend\u00e1rio
+cancel=Cancelar
+cancelar=Cancelar
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Fechar
+date_button_explanation=Permite selecionar uma data.
+de=de
+de\ 0=de 0
+deleteText=Apagar texto
+deleteText_on_filter_use_explanation=Apagar a express\u00e3o de filtro
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Apagar
+edit_paste=Colar
+edit_redo=Refazer
+edit_select_all=Selecionar tudo
+edit_undo=Anular
+Error=Erro
+espere=Por favor, espere
+Failed_pausing_the_process=Falha pausando o processo.
+Failed_resuming_the_process=Falha reanulando o processo.
+Failed_the_process=Falha no processo.
+fields_uppercase_first=Campos
+filter_by_sentence=Filtrado por senten\u00e7a
+filter_of_Table=Filtro da tabela
+filtros=Filtros
+guardar=Salvar
+Information=Informa\u00e7\u00e3o
+known_values=Valores conhecidos
+msg_cancel_incrementable=Tem certeza que deseja cancelar este processo?
+no=N\u00e3o
+No=
+no_image_available=Imagem indispon\u00edvel.
+nuevo=Novo
+Nuevo_conjunto=Novo conjunto
+numero_incorrecto=N\u00famero inv\u00e1lido
+ocultardetalles=Ocultar detalhes
+ok=Aceitar
+Open=
+open_file=Abrir arquivo
+operator_and_explanation=Operador E (Intersecta os conjuntos como operador l\u00f3gico, d\u00e1 certo se ambos operandos s\u00e3o certos).
+operator_distinct_explanation=Operador DIFERENTE (Seleciona os elementos que n\u00e3o coincidam entre ambos os conjuntos).
+operator_equal_explanation=Operador IGUAL (Seleciona os elementos que coincidam entre ambos os conjuntos).
+operator_equal_greater_explanation=Operador MAIOR OU IGUAL (Seleciona os elementos \u00e0 esquerda do operador que tem maior ou igual valor).
+operator_equal_smaller_explanation=Operador MENOR OU IGUAL (Seleciona os elementos \u00e0 direita do operador que tem menor ou igual valor).
+operator_greater_explanation=Operador MAIOR (Seleciona os elementos \u00e0 esquerda do operador).
+operator_not_explanation=Operador N\u00c3O (Complemento para conjuntos como operador l\u00f3gico, muda certo por falso ou vice-versa).
+operator_or_explanation=Operador OU (Uni\u00e3o em conjuntos como operador l\u00f3gico, d\u00e1 falso se ambos operadores s\u00e3o falsos).
+operator_smaller_explanation=Operador MENOR (Seleciona os elementos \u00e0 direita do operador).
+panel_adding_exception=Erro agregando o plano de informa\u00e7\u00e3o\:
+panel_loading_exception=Erro carregando plano de informa\u00e7\u00e3o\:
+parenthesis_explanation=Adicionar os par\u00eanteses () (utilidade para agrupar opera\u00e7\u00f5es)
+pausar=Pausar
+Percent=Porcentagem
+primero=Primeiro
+Process_canceled=Processo cancelado.
+Process_failed=Falha no processo.
+Process_finished=Processo finalizado.
+Process_finished_wont_be_cancelled=O processo finalizou, n\u00e3o ser\u00e1 cancelado.
+reanudar=Resumo
+registro=Registro\:
+salir=Fechar
+seleccion_alpha=Sele\u00e7\u00e3o de transpar\u00eancia
+Seleccionar_del_conjunto=Selecionar o conjunto
+select_color=Selecione uma cor
+si=Sim
+siguiente=Pr\u00f3ximo
+subir=
+teclas=Teclas
+text_preview_text=Pr\u00e9-visualizar
+the_panel=Painel
+The_process_cant_be_cancelled=O processo n\u00e3o pdoe ser cancelado
+The_process_cant_be_paused=O processo n\u00e3o pode parar.
+tiempo_transcurrido=Tempo transcurrido
+title_cancel_incrementable=Confirma\u00e7\u00e3o
+ultimo=\u00daltimo
+validate_expression=Validar expre\u00e7\u00e3o
+validate_filter_expression_explanation=Validar ou n\u00e3o a expre\u00e7\u00e3o do filtro.
+verdetalles=Ver detalhes
+Warning=Aviso
+write_here_a_filter_expression=Escreva aqui uma expre\u00e7\u00e3o de filtro
+Yes=Sim

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pt_BR.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_fr.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [fr]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=un panneau
+abrir...=
+aceptar=Accepter
+Anadir_al_conjunto=Ajouter \u00e0 la s\u00e9lection
+anterior=Pr\u00e9c\u00e9dent
+aplicar=Appliquer
+ayuda=Aide
+ayuda_0=Espace, 0 \: tout voir
+ayuda_1_5=1-5 \: niveaux de zoom
+ayuda_background=B \: afficher/cacher le fond
+ayuda_c=C \: centrer
+ayuda_h=H \: aide
+ayuda_more_less=+/- \: zoom +/-
+ayuda_wheel=Molette de souris \: zoom +/-
+bajar=
+borrar_todos=Supprimer tous les amers
+borrar_uno=Supprimer l'amer s\u00e9lectionn\u00e9
+calendarBackOneMonth=Mois pr\u00e9c\u00e9dent
+calendarBackOneYear=Ann\u00e9e pr\u00e9c\u00e9dente
+calendarForwardOneMonth=Mois suivant
+calendarForwardOneYear=Ann\u00e9e suivante
+calendarSelectDate=S\u00e9lectionner une date
+calendarTitle=Calendrier
+Campos=Champs
+cancel=Annuler
+cancelar=Annuler
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Fermer
+date_button_explanation=S\u00e9lectionner une date
+de=de
+de\ 0=de 0
+deleteText=Effacer le texte
+deleteText_on_filter_use_explanation=Supprimer le filtre
+edit_copy=Copier
+edit_cut=Couper
+edit_delete=Supprimer
+edit_paste=Coller
+edit_redo=R\u00e9p\u00e9ter
+edit_select_all=Tout s\u00e9lectionner
+edit_undo=Annuler
+Error=Erreur
+errorMessageJComboBoxItemsSeekerConfigurable=Configuration du comportement incorrecte
+espere=Patientez s.v.p.
+exportJOP2Title=Exporter vers JOP2T
+Failed_pausing_the_process=Echec lors de la mise en pause du traitement.
+Failed_resuming_the_process=Echec lors du red\u00e9marrage du traitement.
+Failed_the_process=Le traitement a \u00e9chou\u00e9.
+fields_uppercase_first=Champs
+filter_by_sentence=Filtre par phrase
+filter_of_Table=Requ\u00eate de filtre
+filterOnAWFSLayer=Filtre sur une couche WFS
+filtros=Filtres
+guardar=Enregistrer
+Information=Information
+known_values=Valeurs connues
+msg_cancel_incrementable=Voulez-vous annuler le traitement ?
+no=Non
+No=No
+no_image_available=Aucune image disponible.
+nuevo=Nouvel amer
+Nuevo_conjunto=Nouvelle s\u00e9lection
+numero_incorrecto=Nombre incorrect
+ocultardetalles=Cacher d\u00e9tails
+ok=Accepter
+Open=
+open_file=Ouvrir fichier
+operator_and_explanation=Op\u00e9rateur ET
+operator_distinct_explanation=Op\u00e9rateur DIFFERENT DE
+operator_equal_explanation=Op\u00e9rateur EGAL
+operator_equal_greater_explanation=Op\u00e9rateur SUPERIEUR OU EGAL
+operator_equal_smaller_explanation=Op\u00e9rateur INFERIEUR OU EGAL
+operator_greater_explanation=Op\u00e9rateur PLUS GRAND QUE
+operator_not_explanation=Op\u00e9rateur NUL
+operator_or_explanation=Op\u00e9rateur OU
+operator_smaller_explanation=Op\u00e9rateur PLUS PETIT QUE
+panel_adding_exception=Erreur lors de l'ajout de la couche \:
+panel_loading_exception=Erreur de chargement  \:
+parenthesis_explanation=Ajout de parenth\u00e8ses pour regrouper les op\u00e9rations
+pausar=Pause
+Percent=Pourcentage
+primero=Aller au premier amer
+Process_canceled=Traitement annul\u00e9
+Process_failed=Le traitement \u00e0 \u00e9chou\u00e9
+Process_finished=Traitement termin\u00e9
+Process_finished_wont_be_cancelled=Le traitement est termin\u00e9 et ne peut \u00eatre annul\u00e9
+reanudar=Reprendre
+registro=Enregistrements
+salir=Quitter
+seleccion_alpha=Transparence
+Seleccionar_del_conjunto=S\u00e9lection parmi les objets s\u00e9lectionn\u00e9s
+select_color=S\u00e9lection de couleur
+si=oui
+siguiente=Suivant
+subir=
+teclas=Teclas
+text_preview_text=Pr\u00e9c\u00e9dent
+the_panel=le panneau
+The_process_cant_be_cancelled=Le traitement ne peut \u00eatre annul\u00e9
+The_process_cant_be_paused=Le traitement ne peut \u00eatre stopp\u00e9.
+tiempo_transcurrido=D\u00e9lai \u00e9coul\u00e9
+title_cancel_incrementable=Valider
+ultimo=Aller au dernier amer
+validate_expression=Valider
+validate_filter_expression_explanation=Valider l'expression du filtre.
+Valores=Valeurs
+verdetalles=Voir les d\u00e9tails
+Warning=Attention
+write_here_a_filter_expression=Ecrire une expression de filtre.
+Yes=Oui

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_nl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_nl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_nl.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [nl]
+#Tue Aug 11 10:49:16 CEST 2009
+a_panel=
+abrir...=
+aceptar=
+Anadir_al_conjunto=
+anterior=Vorige
+aplicar=
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=
+borrar_uno=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cancel=Afbreken
+cancelar=
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=
+date_button_explanation=
+de=
+de\ 0=
+deleteText=
+deleteText_on_filter_use_explanation=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+Error=
+espere=
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filtros=
+guardar=
+Information=
+known_values=
+msg_cancel_incrementable=
+no=
+No=
+no_image_available=
+nuevo=
+Nuevo_conjunto=
+numero_incorrecto=
+ocultardetalles=
+ok=Ok
+Open=
+open_file=
+operator_and_explanation=
+operator_distinct_explanation=
+operator_equal_explanation=
+operator_equal_greater_explanation=
+operator_equal_smaller_explanation=
+operator_greater_explanation=
+operator_not_explanation=
+operator_or_explanation=
+operator_smaller_explanation=
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=
+pausar=
+Percent=
+primero=
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=
+seleccion_alpha=
+Seleccionar_del_conjunto=
+select_color=
+si=
+siguiente=Volgende
+subir=
+teclas=
+text_preview_text=
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=
+validate_expression=
+validate_filter_expression_explanation=
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_nl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_eu.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [eu]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=panela
+abrir...=
+aceptar=Ados
+Anadir_al_conjunto=Gehitu multzoari
+anterior=Aurrekoa
+aplicar=Aplikatu
+ayuda=Laguntza
+ayuda_0=Lekua, 0\: Dena ikusi
+ayuda_1_5=1-5\: 1-5 Zooma
+ayuda_background=B\: Erakutsi/Ezkutatu atzeko planoa
+ayuda_c=C\: Zentratu
+ayuda_h=H\: Laguntza hau
+ayuda_more_less=+/-\: +/- Zooma
+ayuda_wheel=Saguaren gurpila\: +/- Zooma
+bajar=
+borrar_todos=Ezabatu puntu guztiak
+borrar_uno=Ezabatu hautatutako puntua
+calendarBackOneMonth=Atzeratu hile bat
+calendarBackOneYear=Atzeratu urte bat
+calendarForwardOneMonth=Aurreratu hile bat
+calendarForwardOneYear=Aurreratu urte bat
+calendarSelectDate=Hautatu data bat
+calendarTitle=Egutegia
+Campos=Eremuak
+cancel=Utzi
+cancelar=Utzi
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Itxi
+date_button_explanation=Data aukeratu daiteke
+de=hemendik
+de\ 0=de 0
+deleteText=Ezabatu testua
+deleteText_on_filter_use_explanation=Ezabatu iragazkiaren espresioa
+edit_copy=Kopiatu
+edit_cut=Ebaki
+edit_delete=Ezabatu
+edit_paste=Itsatsi
+edit_redo=Berregin
+edit_select_all=Hautatu dena
+edit_undo=Desegin
+Error=Errorea
+errorMessageJComboBoxItemsSeekerConfigurable=Portaeraren konfigurazio okerra
+espere=Itxaron, mesedez
+exportJOP2Title=JOP2Tra esportatu
+Failed_pausing_the_process=Hutsegitea prozesua pausatzean.
+Failed_resuming_the_process=Hutsegitea prozesuari berrekitean
+Failed_the_process=Hutsegitea prozesuan.
+fields_uppercase_first=Eremuak
+filter_by_sentence=Sententzia bidezko iragazkia
+filter_of_Table=Taula-iragazkia
+filterOnAWFSLayer=WFS geruza-iragazkia
+filtros=Iragazkiak
+guardar=Gorde
+Information=Informazioa
+known_values=Balio ezagunak
+msg_cancel_incrementable=Prozesua ezeztatu nahi duzu?
+no=Ez
+No=Ez
+no_image_available=Irudia ez dago erabilgarri
+nuevo=Berria
+Nuevo_conjunto=Multzo berria
+numero_incorrecto=Zenbakia ez da zuzena
+ocultardetalles=Ezkutatu xehetasunak
+ok=Ados
+Open=
+open_file=Ireki fitxategia
+operator_and_explanation=ETA eragilea.\nMultzoen ebaketa bat da;\neragile logiko honek emaitza egiazkotzat \nhartuko du bi eragileak baieztatzen direnean.
+operator_distinct_explanation=DESBERDIN eragilea.\nMultzoen artean parekotasunik ez duten \nelementuak hautatzeko balio du eragile honek. 
+operator_equal_explanation=BERDIN eragilea.\nMultzoen artean parekotasuna duten \nelementuak hautatzeko balio du eragile honek. 
+operator_equal_greater_explanation=HANDIAGO EDO BERDINA eragilea.\nEragilearen eskumako balioa baino handiagoa \nedo berdina duten ezker-multzoko \nelementuak hautatzeko balio du eragile honek. 
+operator_equal_smaller_explanation=TXIKIAGO EDO BERDINA eragilea.\nEragilearen eskumako balioa baino txikiagoa \nedo berdina duten ezker-multzoko \nelementuak hautatzeko balio du eragile honek. 
+operator_greater_explanation=HANDIAGOA eragilea.\nEragilearen eskumako balioa baino handiagoa \nduten ezker-multzoko elementuak hautatzeko\nbalio du eragile honek. 
+operator_not_explanation=EZ eragilea.\nMultzoen osagarri bat da;\neragile logiko honek emaitza egiazkoak\nfaltsutzat hartuko ditu eta alderantziz.
+operator_or_explanation=EDO eragilea.\nMultzoen elkarketa bat da;\neragile logiko honek emaitza faltsutzat \nhartuko du bi eragileak ezeztatzen direnean.
+operator_smaller_explanation=TXIKIAGOA eragilea.\nEragilearen eskumako balioa baino txikiagoa \nduten ezker-multzoko elementuak hautatzeko\nbalio du eragile honek. 
+panel_adding_exception=Errorea geruza gehitzean\:
+panel_loading_exception=Errorea geruza kargatzean\:
+parenthesis_explanation=Gehitu parentesi ikurrak.\n(Eragiketak taldekatzeko erabilgarria)
+pausar=Pausatu
+Percent=Ehunekoa
+primero=Lehenengoa
+Process_canceled=Prozesua bertan behera utzi da.
+Process_failed=Prozesuak huts egin du.
+Process_finished=Prozesua amaituta
+Process_finished_wont_be_cancelled=Prozesua amaitu da, ez da ezeztatuko.
+reanudar=Berrekin
+registro=Erregistroa\:
+salir=Irten
+seleccion_alpha=Gardentasunaren hautaketa
+Seleccionar_del_conjunto=Multzotik hautatu
+select_color=Hautatu kolore bat
+si=bai
+siguiente=Hurrengoa
+subir=
+teclas=Teklak
+text_preview_text=Aurrebista
+the_panel=Panela
+The_process_cant_be_cancelled=Prozesua ezin da utzi.
+The_process_cant_be_paused=Prozesua ezin da gelditu.
+tiempo_transcurrido=Igarotako denbora
+title_cancel_incrementable=Baieztapena
+ultimo=Azkena
+validate_expression=Balidatu espresioa
+validate_filter_expression_explanation=Iragazkiaren espresioa onartu ala ez onartu
+Valores=Balioak
+verdetalles=Ikusi xehetasunak
+Warning=Oharra
+write_here_a_filter_expression=Idatzi hemen iragazteko espresio bat
+Yes=Bai

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en_US.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en_US.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en_US.properties	(revision 42196)
@@ -0,0 +1,108 @@
+#Translations for language [en_US]
+#Mon Nov 02 08:36:03 CET 2009
+a_panel=a panel
+abrir...=
+aceptar=Ok
+Anadir_al_conjunto=Add to selection
+anterior=Previous
+aplicar=Apply
+ayuda=Help
+ayuda_0=spacebar, 0\: View all
+ayuda_1_5=1-5\: Zoom levels
+ayuda_background=b\: Show/hide background
+ayuda_c=c\: Center
+ayuda_h=h\: This help
+ayuda_more_less=+/-\: Zoom in/out
+ayuda_wheel=Mouse wheel\: Zoom in/out
+bajar=Down
+borrar_todos=Delete all points
+borrar_uno=Delete selected point
+calendarBackOneMonth=Back one month
+calendarBackOneYear=Back one year
+calendarForwardOneMonth=Forward one month
+calendarForwardOneYear=Forward one year
+calendarSelectDate=Select date
+calendarTitle=Calendar
+cancel=Cancel
+cancelar=Cancel
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Close
+date_button_explanation=Allows date selection
+de=of
+de\ 0=of 0
+deleteText=Delete
+deleteText_on_filter_use_explanation=Delete filter rule
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+Error=Error
+espere=Please wait
+Failed_pausing_the_process=Failed to pause processing.
+Failed_resuming_the_process=Failed to resume processing.
+Failed_the_process=The process failed.
+fields_uppercase_first=Fields
+filter_by_sentence=Filter by phrase
+filter_of_Table=Table filter
+filtros=Filters
+guardar=Save
+Information=Information
+known_values=Contents
+msg_cancel_incrementable=Cancel the computation?
+no=No
+No=No
+no_image_available=Image not available.
+nuevo=New
+Nuevo_conjunto=New selection
+numero_incorrecto=Incorrect number.
+ocultardetalles=Hide details
+ok=Ok
+Open=
+open_file=Open file
+operator_and_explanation=AND operator.\nCalculates set intersection;\nUsed as a logical operator, "A AND B " returns "true" \nif both "A" and "B" are true.
+operator_distinct_explanation=NOT EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nnot equal to the right-hand side value.
+operator_equal_explanation=EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nequal to the right-hand side value.
+operator_equal_greater_explanation=GREATER OR EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\ngreater than or equal to the right-hand side value.
+operator_equal_smaller_explanation=SMALLER OR EQUAL operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nsmaller than or equal to the right-hand side value.
+operator_greater_explanation=GREATER THAN operator.\nFilters out those records for which the value \nin the field on the left-hand side is\ngreater than the value on the right-hand side.
+operator_not_explanation=NOT operator.\nCalculates set complement;\nUsed as a logical operator, "NOT A " returns "true" \nif "A" is false and vice versa.
+operator_or_explanation=OR operator.\nCalculates set union;\nUsed as a logical operator, "A OR B " returns "true" \nif either "A" or "B" is true and returns "false" if both\nare false .
+operator_smaller_explanation=SMALLER THAN operator.\nFilters out those records for which the value \nin the field on the left-hand side is\nsmaller than the value on the right-hand side.
+panel_adding_exception=Error adding layer\:
+panel_loading_exception=Error loading layer\:
+parenthesis_explanation=Add parentheses to group operations.
+pausar=Pause
+Percent=Percent
+primero=First
+Process_canceled=Process canceled.
+Process_failed=Process failed.
+Process_finished=Process finished.
+Process_finished_wont_be_cancelled=Process has already finished. Will not be canceled.
+reanudar=Resume
+registro=Register\:
+salir=Exit
+seleccion_alpha=Transparency setting
+Seleccionar_del_conjunto=Subtract from selection
+select_color=Select color
+si=Yes
+sideLong=Window side
+siguiente=Next
+subir=Up
+teclas=Keys
+text_preview_text=Preview
+the_panel=the panel
+The_process_cant_be_cancelled=Operation cannot be canceled.
+The_process_cant_be_paused=Operation cannot be paused.
+tiempo_transcurrido=Elapsed time
+title_cancel_incrementable=Confirmation
+ultimo=Last
+validate_expression=Validate expression
+validate_filter_expression_explanation=Choose whether to validate filter expression
+verdetalles=Show details
+Warning=Warning
+write_here_a_filter_expression=Enter an SQL WHERE style expression manually or use the buttons to compose one.
+Yes=Yes

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_en_US.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pl.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [pl]
+#Thu Oct 29 12:16:22 CET 2009
+a_panel=
+abrir...=
+aceptar=Akceptuj
+Anadir_al_conjunto=Dodaj do zbioru
+anterior=Poprzedni
+aplicar=
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=Usu\u0144 wszystko
+borrar_uno=Usu\u0144 zaznaczone
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cancel=Anuluj
+cancelar=Anuluj
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Zamknij
+date_button_explanation=
+de=z
+de\ 0=z 0
+deleteText=
+deleteText_on_filter_use_explanation=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+Error=
+espere=Prosz\u0119 czeka\u0107
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filtros=
+guardar=Zapisz
+Information=
+known_values=
+msg_cancel_incrementable=
+no=Nie
+No=
+no_image_available=
+nuevo=Nowy
+Nuevo_conjunto=Nowy zestaw
+numero_incorrecto=Niew\u0142a\u015bciwa warto\u015b\u0107
+ocultardetalles=
+ok=Ok
+Open=
+open_file=
+operator_and_explanation=
+operator_distinct_explanation=
+operator_equal_explanation=
+operator_equal_greater_explanation=
+operator_equal_smaller_explanation=
+operator_greater_explanation=
+operator_not_explanation=
+operator_or_explanation=
+operator_smaller_explanation=
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=
+pausar=
+Percent=
+primero=Pierwszy
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=Wyj\u015bcie
+seleccion_alpha=
+Seleccionar_del_conjunto=Wybierz z zestawu
+select_color=
+si=Tak
+siguiente=Nast\u0119pny
+subir=
+teclas=
+text_preview_text=
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=Ostatni
+validate_expression=
+validate_filter_expression_explanation=
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_pl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_it.properties	(revision 42196)
@@ -0,0 +1,112 @@
+#Translations for language [it]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=un pannello
+abrir...=
+aceptar=Accetta
+Anadir_al_conjunto=Aggiungi all'insieme
+anterior=Precedente
+aplicar=Applica
+ayuda=Aiuto
+ayuda_0=Spazio, 0\: mostra tutto
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Mostra/Nascondi sfondo
+ayuda_c=C\: Centra
+ayuda_h=H\: Questo  aiuto
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=Rotellina mouse\: Zoom +/-
+bajar=
+borrar_todos=Elimina tutto
+borrar_uno=Elimina punto selezionato
+calendarBackOneMonth=Indietro un mese
+calendarBackOneYear=Indietro un anno
+calendarForwardOneMonth=Avanti un mese
+calendarForwardOneYear=Avanti un anno
+calendarSelectDate=Seleziona data
+calendarTitle=Calendario
+Campos=Campi
+cancel=Cancella
+cancelar=Cancella
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=Chiudi
+date_button_explanation=Permette la selezione di una data.
+de=di
+de\ 0=di 0
+deleteText=Cancella testo
+deleteText_on_filter_use_explanation=Elimina espressione di filtro
+edit_copy=Copia
+edit_cut=Taglia
+edit_delete=Elimina
+edit_paste=Incolla
+edit_redo=Ripeti
+edit_select_all=Seleziona tutto
+edit_undo=Annulla
+Error=Errore
+errorMessageJComboBoxItemsSeekerConfigurable=Invalida configurazione del comportamento.
+espere=Attendere, per favore
+exportJOP2Title=Esporta come JOP2T
+Failed_pausing_the_process=FALLITA Sospensione del processo.
+Failed_resuming_the_process=FALLITA Ripresa del processo
+Failed_the_process=Processo FALLITO.
+fields_uppercase_first=Campi
+filter_by_sentence=Filtrato tramite espressione
+filter_of_Table=Filtro Tabella
+filterOnAWFSLayer=Filtro su un Livello WFS
+filtros=Filtri
+guardar=Salva
+Information=Informazione
+known_values=Valori noti
+msg_cancel_incrementable=Cancellare il processo?
+no=No
+No=No
+no_image_available=Immagine non disponibile
+nuevo=Nuovo
+Nuevo_conjunto=Nuovo insieme
+numero_incorrecto=Numero non corretto
+ocultardetalles=Nascondi dettagli
+ok=Accetta
+Open=
+open_file=Apri file
+operator_and_explanation=Operatore E (AND).\nAgisce come intersezione tra insiemi;\naltrimenti, come operatore logico, restituisce VERO\nse entrambi gli operandi sono VERI.
+operator_distinct_explanation=Operatore DISTINTO DA.\nAgisce selezionando gli elementi\nnon coincidenti tra i due insiemi.
+operator_equal_explanation=Operatore UGUALE (\=).\nAgisce selezionanto gli elementi \ncoincidenti in entrambi gli insiemi.
+operator_equal_greater_explanation=Operatore MAGGIORE O UGUALE A (>\=).\nAgisce selezionando gli elementi dell'\noperando/insieme a sinistra dell'operatore\ncon valori maggiori o uguali a quelli di destra.
+operator_equal_smaller_explanation=Operatore MINORE O UGUALE A (<\=).\nAgisce selezionando gli elementi dell'\noperando/insieme a sinistra dell'operatore\ncon valori minori o uguali a quelli di destra.
+operator_greater_explanation=Operatore MAGGIORE DI (>).\nAgisce selezionando gli elementi dell'\noperando/insieme a sinistra dell'operatore\ncon valori maggiori di quelli di destra.
+operator_not_explanation=Operatore NO.\nAgisce come il Complementare tra insiemi;\naltrimenti, come operatore logico, cambia VERO\nin FALSO o viceversa.
+operator_or_explanation=Operatore O (OR).\nAgisce come Unione tra insiemi;\naltrimenti, come operatore logico, restituisce falso se\nentrambi gli operandi sono falsi.
+operator_smaller_explanation=Operatore MINORE DI (>).\nAgisce selezionando gli elementi dell'\noperando/insieme a sinistra dell'operatore\ncon valori minori di quelli di destra.
+panel_adding_exception=Errore unendo Livello\:
+panel_loading_exception=Errore caricamento Livello\:
+parenthesis_explanation=Aggiunge i simboli parentesi.\n(Utile per raggruppare operazioni).
+pausar=Sospendere
+Percent=Percentuale
+primero=Primo
+Process_canceled=Processo annullato.
+Process_failed=Processo fallito.
+Process_finished=Processo completato.
+Process_finished_wont_be_cancelled=Processo completato, non sar\u00e0 cancellato.
+reanudar=Riprendere
+registro=Registro\:
+salir=Esci
+seleccion_alpha=Selezione trasparenza
+Seleccionar_del_conjunto=Seleziona dall'insieme
+select_color=Seleziona colore
+si=si
+siguiente=Successivo
+subir=
+teclas=Teclas
+text_preview_text=Anteprima
+the_panel=Il pannello
+The_process_cant_be_cancelled=Il processo non pu\u00f2 essere annullato
+The_process_cant_be_paused=Il processo non pu\u00f2 essere messo in pausa
+tiempo_transcurrido=Tempo trascorso
+title_cancel_incrementable=Conferma
+ultimo=Ultimo
+validate_expression=Validazione espressione
+validate_filter_expression_explanation=Valida o meno l'espressione di filtro
+Valores=Valori
+verdetalles=Mostra dettagli
+Warning=Attenzione
+write_here_a_filter_expression=Scrivere qui un'espressione di filtro
+Yes=Si

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text.properties	(revision 42196)
@@ -0,0 +1,287 @@
+#Translations for language [es]
+#Mon Nov 02 08:36:03 CET 2009
+a_panel=un panel
+abrir...=Abrir...
+abrir_archivo=Abrir Archivo
+aceptar=Aceptar
+all_and_disordered=Todos los items y Desordenados
+all_and_maintain_order=Todos los items y Mantener \u00f3rden
+all_and_ordered=Todos los items y Ordenados
+allowedMEditionPMConfigurationLabel=Permite edici\u00f3n texto con rat\u00f3n
+alphabetical_ordered=Ordenada alfab\u00e9ticamente
+Anadir_al_conjunto=A\u00f1adir al conjunto
+anterior=Anterior
+aplicar=Aplicar
+apply=Aplicar
+area=\u00c1rea
+attributeName=Nombre
+attributeType=Tipo
+ayuda=Ayuda
+ayuda_0=Espacio, 0\: Ver todo
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Mostrar/Ocultar fondo
+ayuda_c=C\: Centrar
+ayuda_h=H\: Esta ayuda
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=Rueda rat\u00f3n\: Zoom +/-
+a\u00f1adir_banda=A\u00f1adir banda
+bajar=Down
+banda=Banda
+bandas=Bandas
+beepConfigurationLabel=Beep (Sonido de alerta)
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+buffer=Buffer
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cancel=Cancelar
+cancelar=Cancelar
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cant_configure_parameters=No se pueden configurar los par\u00e1metros.
+cant_connect=No se puede realizar la conexi\u00f3n
+cant_connect_wfs=No ha sido posible realizar la conexi\u00f3n con el WFS
+cantLoad=No se puede cargar la capa WFS
+cantTestThisMethod=La aplicaci\u00f3n no puede testear esta operaci\u00f3n.
+caseSensitiveConfigurationLabel=Distingue May\u00fasculas / Min\u00fasculas
+cellRendererConfigurationLabel=Renderer de celda
+cerrar=Cerrar
+column=Columna
+completeArrowKeySelectionConfigurationLabel=Completa selecci\u00f3n por cursores
+conection=Conexi\u00f3n
+configuration=configuraci\u00f3n
+configurationParameters=Par\u00e1metros Configuraci\u00f3n de Constructores
+configure=configurar
+confirmation=Confirmaci\u00f3n
+connect=Conectar
+constructors=Constructores
+couldnt_add_some_panel_exception=No se pudieron agregar algunos paneles\:
+couldnt_load_panels_from_extension_point_exception=No se pudieron cargar algunos paneles a partir de un punto de extensi\u00f3n\:
+couldnt_load_panels_from_list_exception=No se pudieron cargar algunos paneles de la lista\:
+couldnt_load_some_panel_exception=No se pudieron cargar algunos paneles\:
+creaction=Creacci\u00f3n
+crear_tabla=Crear Tabla
+date=Fecha
+Date=Fecha
+date_button_explanation=Permite seleccionar una fecha.
+de=de
+de\ 0=de 0
+default=Por defecto
+default_name=Capa WFS
+deleteText=Borrar texto
+deleteText_on_filter_use_explanation=Borra la sentencia de filtrado.
+descripcion=Descripci\u00f3n
+description=Descripci\u00f3n
+disordered=Desordenada
+displayAllItemsWithArrowButtonConfigurationLabel=Todo item via bot\u00f3n-flecha
+dynamic_and_disordered=Coincidencias y Desordenados
+dynamic_and_maintain_order=Coincidencias y Mantener \u00f3rden
+dynamic_and_ordered=Coincidencias y Ordenados
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+elimination=Eliminaci\u00f3n
+empty_panel_group_exception=Ning\u00fan panel cargado.
+empty_panel_group_gui_exception=Ning\u00fan panel en la interfaz gr\u00e1fica de usuario.
+enable/Disable=Habilitar/Deshabilitar
+error=Error
+Error=Error
+error_codifying_numbers=Error codificando los n\u00fameros.
+error_coding_filter_query=Error codificando la consulta SQL
+error_validating_filter_query=Error validando la consulta SQL
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+espere=Por favor, espere
+exportJOP2Title=Exportar a JOP2T
+extraer=Extraer
+Failed_pausing_the_process=Fall\u00f3 pausando el proceso.
+Failed_resuming_the_process=Fall\u00f3 reanudando el proceso.
+Failed_the_process=Fall\u00f3 el proceso.
+feature=Capas
+fields=Campos
+fields_uppercase_first=Campos
+fill=Rellenar
+filter=Filtro
+filter_by_sentence=Filtrado por sentencia
+filter_of_Table=Filtro de Tabla
+filter_with_an_incorrect_format=Filtro con formato incorrecto
+filterOnALayer=Filtro sobre una capa
+filtros=Filtros
+finded=encontrado
+fit_WFS_layer=Ajustar capa WFS
+formato_no_numerico=Formato no num\u00e9rico
+formatos=Formatos
+geometry=Geometr\u00eda
+GeometryPropertyType=Geometr\u00eda
+guardar=Guardar
+has_bad_format=tiene mal formato
+help=Ayuda
+hidePopupIfThereAreNoItemsConfigurationLabel=Oculta popup si no items
+in=en
+incorrect_format_on_date=Formato incorrecto en fecha
+incorrectNumberOfParametersWritten=N\u00famero incorrecto de par\u00e1metros escritos
+incorrectParameter=Par\u00e1metro incorrecto
+info=Informaci\u00f3n
+Information=Informaci\u00f3n
+invoke=Invoca
+isnt_a_field_of_layer=no es un campo de la capa.
+itemsOrderConfigurationLabel=Ordenaci\u00f3n
+jComboBoxConfigurableLookUpByTheUser_frameTitle=Testeo del componente JComboBoxConfigurableLookUp
+jOPMessageFileDoesntExists=El archivo fuente no existe
+jOPMessageFileWithoutReadPermissions=No tienes permisos de lectura para leer el fichero fuente
+jOPMessageIncorrectFile=El archivo fuente no es un fichero
+known_values=Valores conocidos
+ladoVentana=Lado ventana
+languageRulesConfigurationLabel=Reglas de idioma
+largeIcon= Iconos grandes
+layer_abstract=Resumen de la capa
+layer_name=Nombre de la capa
+layer_title=T\u00edtulo de la capa
+layerName=Nombre de la capa
+layerType=Tipo de geometr\u00eda
+left=Izquierda
+like_JTextField=Como JTextField
+limpiar=Limpiar
+line=L\u00ednea
+list=Lista
+log=Log
+maintain_position=Mantener posici\u00f3n
+max_features=M\u00e1x. features
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+maximo=M\u00e1ximo
+media=Media
+mediana=Mediana
+method=Operaci\u00f3n
+minimo=M\u00ednimo
+msg_cancel_incrementable=\u00bfEsta seguro de que desea cancelar este proceso?
+MultiLineStringPropertyType=Multil\u00ednea
+MultiPointPropertyType=Multipunto
+MultiPolygonPropertyType=Multipol\u00edgono
+name=Nombre
+new=Nuevo
+no=No
+No=No
+no_acumulado=No acumulado
+no_filter_will_be_applied_in_the_load_of_the_layer=No se aplicar\u00e1 ning\u00fan filtro en la carga de la capa.
+no_image_available=Imagen no disponible.
+nombre=Nombre
+not_valid_token=Token no v\u00e1lido.
+npixeles=N\u00famero de pixeles
+nuevo=Nuevo
+Nuevo_conjunto=Nuevo conjunto
+numero_incorrecto=N\u00famero incorrecto
+object=Objeto
+objectsCreation=Creacci\u00f3n de Objetos
+ocultardetalles=Ocultar detalles
+ok=Aceptar
+Ongoing_process_please_wait=Proceso en marcha, por favor espere...
+onlyOneColorOnTextConfigurationLabel=Texto s\u00f3lo de un color
+Open=
+open_file=Abrir Archivo
+operator_and_explanation=Operador Y.\nAct\u00faa como una Intersecci\u00f3n en conjuntos;\nsino, como operador l\u00f3gico, da cierto si\nambos operandos son ciertos.
+operator_distinct_explanation=Operador DISTINTO DE.\nAct\u00faa seleccionando aquellos elementos que\nno coinciden entre ambos conjuntos.
+operator_equal_explanation=Operador IGUAL.\nAct\u00faa seleccionando aquellos elementos\nque coinciden entre ambos conjuntos.
+operator_equal_greater_explanation=Operador MAYOR O IGUAL QUE.\nAct\u00faa seleccionando aquellos elementos del\noperando/conjunto a la izquierda del operador\nque tienen mayor o igual valor que el de su derecha.
+operator_equal_smaller_explanation=Operador MENOR O IGUAL QUE.\nAct\u00faa seleccionando aquellos elementos del\noperando/conjunto a la izquierda del operador\nque tienen menor o igual valor que el de su derecha.
+operator_greater_explanation=Operador MAYOR QUE.\nAct\u00faa seleccionando aquellos elementos del\noperando/conjunto a la izquierda del operador que\ntienen mayor valor que el de su derecha.
+operator_not_explanation=Operador NO.\nAct\u00faa como un Complementario en conjuntos;\nsino, como operador l\u00f3gico, cambia cierto\npor falso o viceversa.
+operator_or_explanation=Operador O.\nAct\u00faa como una Uni\u00f3n en conjuntos;\nsino, como operador l\u00f3gico, da falso si\nambos operandos son falsos.
+operator_smaller_explanation=Operador MENOR QUE.\nAct\u00faa seleccionando aquellos elementos del\noperando/conjunto a la izquierda del operador\nque tienen menor valor que el de su derecha.
+options=Opciones
+origen=Origen
+outputType=Tipo de dato
+panel_adding_exception=Error agregando capa\:
+panel_base_exception=Error cargando %(PANEL_LABEL)%(CAUSE_MESSAGE).
+panel_loading_exception=Error cargando capa\:
+panel_without_preferred_size_defined_exception=Panel de etiqueta %(PANEL_LABEL) sin tama\u00f1o inicial definido.
+parameters=Par\u00e1metros
+parenthesis_explanation=A\u00f1ade los s\u00edmbolos par\u00e9ntesis.\n(\u00datil para agrupar operaciones).
+pausar=Pausar
+Percent=Porcentaje
+PointPropertyType=Punto
+primero=Primero
+Process_canceled=Proceso cancelado.
+Process_failed=Fall\u00f3 el proceso.
+Process_finished=Proceso finalizado.
+Process_finished_successfully=Proceso finalizado satisfactoriamente.
+Process_finished_wont_be_cancelled=El proceso finaliz\u00f3, no se cancelar\u00e1.
+proofs=Pruebas
+properties=Propiedades
+propiedades=Propiedades
+puntos=Puntos
+queryIsNull=Consulta nula.
+reanudar=Reanudar
+refresh_capabilities=Refrescar cach\u00e9
+refresh_capabilities_tooltip=Marque esta casilla para sobreescribir los datos anteriores.
+registro=Registro\:
+reproyectar_aviso=La proyecci\u00f3n de la capa no es igual que la de la vista.\nAVISO\: Puede ser inexacto con algunas transformaciones.\nPor favor, lea la documentaci\u00f3n.
+reset=Resetear
+resultOf=Resultado de
+right=Derecha
+salir=Salir
+saturation=Saturaci\u00f3n
+seleccion_alpha=Selecci\u00f3n de Transparencia
+seleccion_color=Selecci\u00f3n de Color
+Seleccionar_del_conjunto=Seleccionar del conjunto
+seleccionar_srs=Seleccionar SRS
+select_color=Seleccione un color
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_features=Selecciona las capas
+select_fields=Seleccionar campos de la capa
+selectAComponent=Seleccione un componente
+selectAMethod=Seleccione una operaci\u00f3n
+selected_layer=Capa seleccionada
+server=Servidor
+server_abstract=Resumen del servidor
+server_timeout=Alcanzado m\u00e1ximo tiempo de espera de respuesta
+server_title=T\u00edtulo del servidor
+server_type=Tipo de servidor
+service_info=Informaci\u00f3n del servicio
+show_layer_names=Mostrar nombres de capas
+showAllItemsInListBoxConfigurationLabel=Mostrar todos los items
+si=s\u00ed
+sideLong=Lado ventana
+siguiente=Siguiente
+smallIcon=Iconos peque\u00f1os
+srs=Srs
+subir=Subir
+teclas=Teclas
+test=Test
+test_TableFilterQueryJPanel_title=Test TableFilterQueryJPanel
+testJComboBoxConfigurableLookUpErrorMessage=Error de ejecuci\u00f3n en el componente JComboBoxConfigurableLookUp
+text_preview_text=Vista previa
+the_panel=el panel
+The_process_cant_be_cancelled=El proceso no se puede cancelar.
+The_process_cant_be_paused=El proceso no se puede pausar.
+the_token=el token
+tiempo_transcurrido=Tiempo transcurrido
+timeout=Timeout
+tipo=Tipo
+title_cancel_incrementable=Confirmaci\u00f3n
+todas=Todas
+toForceSelectAnItemConfigurationLabel=Forzar seleccionar \u00edtem
+ultimo=\u00daltimo
+validate_expression=Validar expresi\u00f3n
+validate_filter_expression_explanation=Validar o no la expresi\u00f3n de filtro.
+verdetalles=Ver detalles
+view=Vista
+vista=Vista
+warning=Aviso
+Warning=Aviso
+wfs_properties=Propiedades WFS
+wfs_server_error=Error del servidor wfs
+WFSLayer=Capa WFS
+will_use_a_default_array_of_items=Usar\u00e1 un array de \u00edtems predefinido.
+will_use_a_default_model=Usar\u00e1 un modelo predefinido.
+will_use_a_default_vector_of_items=Usar\u00e1 un vector de \u00edtems predefinido.
+write_here_a_filter_expression=Escriba aqu\u00ed una expresi\u00f3n de filtrado.
+yellow=Amarillo
+Yes=S\u00ed
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ro.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ro.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ro.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [ro]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=un panou
+abrir...=
+aceptar=Accept
+Anadir_al_conjunto=Adaug\u0103 la set
+anterior=Precedent
+aplicar=Aplic\u0103
+ayuda=Ajutor
+ayuda_0=Spa\u021biu, 0\: Arat\u0103 toate
+ayuda_1_5=1-5\: Zoom 1-5
+ayuda_background=B\: Arat\u0103/Ascunde fundal
+ayuda_c=C\: Centreaz\u0103
+ayuda_h=H\: Acest lucru ajut\u0103 la
+ayuda_more_less=+/-\: Zoom +/-
+ayuda_wheel=Roti\u021b\u0103 mouse\: Zoom +/-
+bajar=
+borrar_todos=Sterge totul
+borrar_uno=Sterge unul
+calendarBackOneMonth=\u00cenapoi o lun\u0103
+calendarBackOneYear=\u00cenapoi un an
+calendarForwardOneMonth=\u00cenainte o lun\u0103
+calendarForwardOneYear=\u00cenainte un an
+calendarSelectDate=Selecteaz\u0103 dat\u0103
+calendarTitle=Calendar
+cancel=Anulez
+cancelar=Anuleaz\u0103
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=\u00cenchide
+date_button_explanation=Permite selectarea unei ferestre
+de=0\=de 0
+de\ 0=de 0
+deleteText=Elimin\u0103 text
+deleteText_on_filter_use_explanation=Elimin\u0103 expresia de filtrare
+edit_copy=Copiaz\u0103
+edit_cut=Taie
+edit_delete=\u0218terge
+edit_paste=Lipe\u0219te
+edit_redo=Ref\u0103
+edit_select_all=Selecteax\u0103 totul
+edit_undo=Anuleaz\u0103
+Error=Eroare
+espere=Asteapta
+Failed_pausing_the_process=E\u0219ec pauzare proces
+Failed_resuming_the_process=E\u0219ec reluare proces
+Failed_the_process=E\u0219ec de procesare
+fields_uppercase_first=C\u00e2mpuri
+filter_by_sentence=Filtare dup\u0103 sentin\u021b\u0103
+filter_of_Table=Filtru de tabel
+filtros=Filtre
+guardar=Salveaz\u0103
+Information=Informa\u021bie
+known_values=Valori cunoscute
+msg_cancel_incrementable=Sunte\u021bi sigur c\u0103 dori\u021bi s\u0103 \u00eentrerupe\u021bi procesul?
+no=Nu
+No=Nu
+no_image_available=Imagine indisponibil\u0103
+nuevo=Nou
+Nuevo_conjunto=Selec\u0163ie nou\u0103
+numero_incorrecto=Valoare incorect\u0103
+ocultardetalles=Ascunde detalii
+ok=Accept
+Open=
+open_file=Deschide fi\u0219ier
+operator_and_explanation=Operator Y
+operator_distinct_explanation=Operator DIFERIT DE.
+operator_equal_explanation=Operator EGAL.
+operator_equal_greater_explanation=Operator MAI MARE SAU EGAL.
+operator_equal_smaller_explanation=Operator MAI MIC SAU EGAL.
+operator_greater_explanation=Operator MAI MARE.
+operator_not_explanation=Operator NU.
+operator_or_explanation=Operator O.
+operator_smaller_explanation=Operator MAI MIC.
+panel_adding_exception=Eroare ad\u0103ugare strat\:
+panel_loading_exception=Eroare \u00eenc\u0103rcare strat\:
+parenthesis_explanation=Adaug\u0103 simboluri paranteze.\r\n (Utile pentru opera\u021biile de grupare).
+pausar=Pauz\u0103
+Percent=Procent
+primero=Primul
+Process_canceled=Proces anulat
+Process_failed=Proces e\u0219uat
+Process_finished=Proces finalizat
+Process_finished_wont_be_cancelled=Procesul s-a terminat, nu anulat.
+reanudar=Reluare
+registro=Registru\:
+salir=Renun\u0163\u0103
+seleccion_alpha=Selec\u021bie transparen\u021b\u0103
+Seleccionar_del_conjunto=Selecteaz\u0103 din set\u0103ri
+select_color=Selecteaz\u0103 culoare
+si=da
+siguiente=Urm\u0103torul
+subir=
+teclas=Chei
+text_preview_text=Previzualizare
+the_panel=panoul
+The_process_cant_be_cancelled=Procesul nu poate fi anulat
+The_process_cant_be_paused=Procesul nu poate fi pauzat
+tiempo_transcurrido=Timp dep\u0103\u0219it
+title_cancel_incrementable=Confirmare
+ultimo=Ultimul
+validate_expression=Validare expresie
+validate_filter_expression_explanation=Validare sau nu a expresiei filtrului.
+verdetalles=Arat\u0103 detalii
+Warning=Avertisment
+write_here_a_filter_expression=Scrie\u021bi aici o extensie de filtrat
+Yes=Da

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_ro.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_zh.properties	(revision 42196)
@@ -0,0 +1,107 @@
+#Translations for language [zh]
+#Mon Sep 21 10:02:19 CEST 2009
+a_panel=
+abrir...=
+aceptar=\u786e\u5b9a
+Anadir_al_conjunto=\u6dfb\u52a0\u5230\u7cfb\u5217\u4e2d
+anterior=\u540e\u9000
+aplicar=
+ayuda=
+ayuda_0=
+ayuda_1_5=
+ayuda_background=
+ayuda_c=
+ayuda_h=
+ayuda_more_less=
+ayuda_wheel=
+bajar=
+borrar_todos=
+borrar_uno=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cancel=\u53d6\u6d88
+cancelar=\u53d6\u6d88
+cannot_get_double_value_from_an_integer_number_field_use_getInteger()_instead=
+cannot_set_a_double_value_from_an_integer_number_field_use_setInteger(int)_instead=
+cerrar=\u5173\u95ed
+date_button_explanation=
+de=
+de\ 0=
+deleteText=
+deleteText_on_filter_use_explanation=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+Error=
+espere=\u8bf7\u7b49\u5f85
+Failed_pausing_the_process=
+Failed_resuming_the_process=
+Failed_the_process=
+fields_uppercase_first=
+filter_by_sentence=
+filter_of_Table=
+filtros=
+guardar=\u5b58\u76d8
+Information=
+known_values=
+msg_cancel_incrementable=
+no=\u5426
+No=
+no_image_available=
+nuevo=\u65b0\u5efa
+Nuevo_conjunto=\u65b0\u5efa\u7cfb\u5217
+numero_incorrecto=\u6570\u636e\u4e0d\u6b63\u786e
+ocultardetalles=
+ok=\u786e\u5b9a
+Open=
+open_file=
+operator_and_explanation=
+operator_distinct_explanation=
+operator_equal_explanation=
+operator_equal_greater_explanation=
+operator_equal_smaller_explanation=
+operator_greater_explanation=
+operator_not_explanation=
+operator_or_explanation=
+operator_smaller_explanation=
+panel_adding_exception=
+panel_loading_exception=
+parenthesis_explanation=
+pausar=
+Percent=
+primero=
+Process_canceled=
+Process_failed=
+Process_finished=
+Process_finished_wont_be_cancelled=
+reanudar=
+registro=
+salir=\u9000\u51fa
+seleccion_alpha=
+Seleccionar_del_conjunto=\u4ece\u7cfb\u5217\u4e2d\u9009\u62e9
+select_color=
+si=\u662f
+siguiente=\u7ee7\u7eed
+subir=
+teclas=
+text_preview_text=
+the_panel=
+The_process_cant_be_cancelled=
+The_process_cant_be_paused=
+tiempo_transcurrido=
+title_cancel_incrementable=
+ultimo=
+validate_expression=
+validate_filter_expression_explanation=
+verdetalles=
+Warning=
+write_here_a_filter_expression=
+Yes=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/src/main/resources/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/pom.xml	(revision 42196)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.ui</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <description>Swing components collection</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.library</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jfree</groupId>
+      <artifactId>jfreechart</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>net.sf</groupId>
+      <artifactId>flib-jcalendar</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jwizardcomponent</groupId>
+      <artifactId>jwizardcomponent</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+<!--
+    <dependency>
+      <groupId>org.gvsig.external</groupId>
+      <artifactId>org.gvsig.external.jump</artifactId>
+      <scope>compile</scope>
+    </dependency>
+-->	
+	<dependency>
+      <groupId>com.vividsolutions</groupId>
+      <artifactId>jts</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+  
+  <!--
+		<sourceDirectory>src</sourceDirectory>
+		<testSourceDirectory>src-test-ui</testSourceDirectory>
+		-->
+		<resources>
+			<resource>
+				<directory>src/main/java</directory>
+				<includes>
+					<include>**/*.gif</include>
+					<include>**/*.png</include>
+					<include>**/*.PNG</include>
+					<include> **/*.bmp</include>
+					<include> **/*.jpg</include>
+					<include> **/*.jpeg</include>
+					<include> **/*.properties</include>
+				</includes>
+			</resource>
+			<resource>
+				<targetPath>org/gvsig/gui/beans/resources/translations</targetPath>
+				<filtering>false</filtering>
+				<directory>src/main/resources</directory>
+				<includes>
+					<include>*.properties</include>
+				</includes>
+			</resource>
+		</resources>
+		
+		  
+    <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <testExcludes>
+            <exclude>**</exclude>
+          </testExcludes>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.ui
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/pom.xml	(revision 42196)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.tools.evaluator.sqljep</artifactId>
+  <name>${project.artifactId}</name>
+
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.library</artifactId>
+    <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>net.sf</groupId>
+      <artifactId>sqljep</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+
+      <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+              <skipTests>true</skipTests>
+          </configuration>
+      </plugin>
+
+    </plugins>        
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.tools.evaluator.sqljep.SQLJEPLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPEvaluator.java	(revision 42196)
@@ -0,0 +1,793 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.tools.evaluator.sqljep;
+
+import java.math.BigDecimal;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+import org.gvsig.tools.evaluator.EvaluatorParseException;
+import org.gvsig.tools.evaluator.EvaluatorWithDescriptions;
+import org.gvsig.tools.evaluator.sqljep.function.Boundary;
+import org.gvsig.tools.evaluator.sqljep.function.Equals;
+import org.gvsig.tools.evaluator.sqljep.function.GeomFromText;
+import org.gvsig.tools.evaluator.sqljep.function.Intersects;
+import org.gvsig.tools.evaluator.sqljep.function.Overlaps;
+
+import org.medfoster.sqljep.ParseException;
+import org.medfoster.sqljep.RowJEP;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SQLJEPEvaluator extends RowJEP
+implements EvaluatorWithDescriptions {
+
+    private static final Logger logger =
+        LoggerFactory.getLogger(SQLJEPEvaluator.class); 
+    
+    public static final String TODATE_FUNCTION_NAME = "to_timestamp"; 
+
+	private String expresion;
+	private EvaluatorData data;
+	private boolean not_parsed;
+	
+
+	public SQLJEPEvaluator(String expresion) {
+
+		super(expresion);
+		this.expresion = expresion;
+		this.data = null;
+		not_parsed = true;
+	}
+
+	public String getName() {
+		return "SQLJEP(" + expresion + ")";
+	}
+
+	public String getSQL() {
+		return expresion;
+	}
+
+	public String getDescription() {
+		return "SQLJEP-based evaluator";
+	}
+
+	/*
+	public EvaluatorFieldValue[] getFieldValues(String name) {
+		return null;
+	}
+	*/
+	
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		this.data = data;
+		Object value = null;
+		try {
+			if (not_parsed) {
+				this.parseExpression();
+				not_parsed = false;
+			}
+		} catch (ParseException e) {
+		    /*
+		     * Notify parse exception
+		     */
+		    throw new EvaluatorParseException(e);
+		}
+		
+        try {
+            value = this.getValue();
+        } catch (Exception e) {
+            /*
+             * Notify evaluation exception
+             * (catching also runtime exceptions)
+             */
+            throw new EvaluatorException(e);
+        }
+		this.data = null;
+		return value;
+	}
+
+	/*
+	public int findColumn(String name) {
+		return -1;
+	}
+	*/
+
+	/*
+	public Comparable getColumnObject(int arg0) throws ParseException {
+		return null;
+	}
+	*/
+
+	public Entry getVariable(String name) throws ParseException {
+		return new MyEntry(name);
+	}
+
+	private class MyEntry implements Map.Entry {
+		private String key;
+
+		public MyEntry(String key) {
+			this.key = key;
+		}
+
+		public Object getKey() {
+			return this.key;
+		}
+
+		public Object getValue() {
+		    
+		    Object resp = null;
+		    
+			if (data.hasDataValue(key)) {
+			    resp = data.getDataValue(key);
+			    resp = fixDecimal(resp);
+				return resp;
+			}
+			resp = data.getDataValue(key);;
+            resp = fixDecimal(resp);
+			return resp;
+		}
+
+		/**
+         * @param resp
+         * @return
+         */
+        private Object fixDecimal(Object obj) {
+            
+            if (obj instanceof Double) {
+                Double dou = (Double) obj;
+                String doustr = Double.toString(dou);
+                return new BigDecimal(doustr);
+            } else {
+                if (obj instanceof Float) {
+                    Float flo = (Float) obj;
+                    String flostr = Float.toString(flo);
+                    return new BigDecimal(flostr);
+                } else {
+                    return obj;
+                }
+            }
+        }
+
+        public Object setValue(Object arg0) {
+			return null;
+		}
+
+	}
+
+	public EvaluatorFieldsInfo getFieldsInfo() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	private static Description[] available_operators;
+	private static Description[] available_functions;
+
+    public Description[] getAvailableOperators() {
+        
+        if (available_operators == null) {
+            available_operators = new Description[] {
+                
+                new DefaultDescription(
+                    "+",
+                    "Returns the sum (addition) of the left operand and"
+                    + " the right operand.",
+                    "<Numeric_value_1> + <Numeric_value_2>",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                new DefaultDescription(
+                        "-",
+                        "Returns the difference (subtraction) of the left operand minus"
+                        + " the right operand. It can be used as unary operator to"
+                        + " change the sign of the right operand.",
+                        "<Numeric_value_1> - <Numeric_value_2>",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                new DefaultDescription(
+                    "*",
+                    "Returns the product (multiplication) of the left operand by"
+                    + " the right operand.",
+                    "<Numeric_value_1> * <Numeric_value_2>",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                new DefaultDescription(
+                        "/",
+                        "Returns the division of the left operand by"
+                        + " the right operand.",
+                        "<Numeric_value_1> / <Numeric_value_2>",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                new DefaultDescription(
+                            ">",
+                            "Returns TRUE if the left operand is greater than "
+                            + "the right operand; FALSE otherwise.",
+                            "<Left_value> > <Right_value>",
+                            EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                            "<",
+                            "Returns TRUE if the left operand is smaller"
+                            + " than the right operand; FALSE otherwise.",
+                            "<Left_value> < <Right_value>",
+                            EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                            ">=",
+                            "Returns TRUE if the left operand is greater or "
+                            + "equal to the right operand; FALSE otherwise.",
+                            "<Left_value> >= <Right_value>",
+                            EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "<=",
+                    "Returns TRUE if the left operand is less or "
+                    + "equal to the right operand; FALSE otherwise.",
+                    "<Left_value> <= <Right_value>",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "==",
+                    "Returns TRUE if the left operand equals "
+                    + "the right operand; FALSE otherwise.",
+                    "<Left_value> == <Right_value>",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                        "!=",
+                        "Returns TRUE if the left operand is not equal to "
+                        + "the right operand; FALSE otherwise.",
+                        "<Left_value> != <Right_value>",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                        | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                        | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                        | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                            "And",
+                            "Returns TRUE if both operands are TRUE"
+                            + "; FALSE otherwise.",
+                            "<Left_value> and <Right_value>",
+                            EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "Or",
+                    "Returns TRUE if the left operand is TRUE or the "
+                    + "right operand is TRUE; FALSE otherwise.",
+                    "<Left_value> or <Right_value>",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "Not",
+                    "Returns the logical inverse of the right operand: TRUE if the right "
+                    + "operand is FALSE; FALSE otherwise.",
+                    "not <Right_value>",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "In",
+                    "Returns TRUE if the left operand equals one of the comma-separated"
+                    + " values; FALSE otherwise.",
+                    "<Left_value> in ( <Comma_separated_values> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "Between",
+                    "Returns TRUE if the left operand is greater or equal than " +
+                    "the first right operand and less or equal than the second " +
+                    "right operand; FALSE otherwise.",
+                    "<Left_value> between <Right_value_1> and <Right_value_2>",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                        "Like",
+                        "Returns TRUE if the left operand matches the pattern expressed " +
+                        "by the right operand; FALSE otherwise. Use '%' as wildcard.",
+                        "<Left_value> like <Right_value>",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                            "Is Null",
+                            "Returns TRUE if the left operand has NULL value;" +
+                            " FALSE otherwise.",
+                            "<Left_value> is null",
+                            EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                            | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                                "Is Not Null",
+                                "Returns TRUE if the left operand does not have NULL value;" +
+                                " FALSE otherwise.",
+                                "<Left_value> is not null",
+                                EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                                | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                                | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                                | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN)
+                            
+                       
+
+            };
+        }
+        return available_operators;
+    }
+
+
+    public Description[] getAvailableFunctions() {
+
+        if (available_functions == null) {
+            available_functions = new Description[] {
+                
+                new DefaultDescription(
+                    "Equals",
+                    "Returns TRUE if the two input values are equal; "
+                    + "FALSE otherwise.",
+                    Equals.NAME + "( <Value_1> , <Value_2> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_GEOMETRY),
+                new DefaultDescription(
+                    GeomFromText.NAME,
+                    "Returns the geometry object equivalent to the "
+                    + "input WKT string (single quotes).",
+                    GeomFromText.NAME + "( <Geometry_in_WKT> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_GEOMETRY),
+                new DefaultDescription(
+                    "Intersects",
+                    "Returns TRUE if the two input geometries intersect; "
+                    + "FALSE otherwise.",
+                    Intersects.NAME + "( <Geometry_1> , <Geometry_2> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_GEOMETRY),
+                new DefaultDescription(
+                    "Overlaps",
+                    "Returns TRUE if the two input geometries overlap; "
+                    + "FALSE otherwise. Geometries overlap when they have some but "
+                    + "not all points in common, they have the same dimension, "
+                    + "and the intersection of the interiors of the two "
+                    + "geometries has the same dimension as the "
+                    + "geometries themselves.",
+                    Overlaps.NAME + "( <Geometry_1> , <Geometry_2> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_GEOMETRY),
+                new DefaultDescription(
+                    "Boundary",
+                    "Returns a geometry which is the bounding box of the "
+                    + "input geometry.",
+                    Boundary.NAME + "( <Geometry> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_GEOMETRY),
+                new DefaultDescription(
+                    "To_timestamp",
+                    "Converts the input value to the timestamp type.",
+                    "to_timestamp( <Value> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                // ===============================================
+                // ===============================================
+                // ===============================================
+
+                    new DefaultDescription(
+                        "Abs",
+                        "Returns the absolute value of the input numeric value.",
+                        "abs( <Numeric_value> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Power",
+                        "Takes two numeric inputs and returns numeric result as "
+                        + "first argument raised to second argument.",
+                        "power( <Base> , <Exponent> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Mod",
+                        "Returns the remainder of the first argument divided by "
+                        + "the second argument.",
+                        "mod( <Numeric_value_1> , <Numeric_value_2> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Substr",
+                        "Returns a substring of the first argument, starting at "
+                        + "the character indicated by the second argument. "
+                        + "The optional third argument indicates the length "
+                        + "of the result.",
+                        "substr( <String> , <Start_index> [ , <Length> ] )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                    new DefaultDescription(
+                        "Sign",
+                        "Returns 1 for positive input values, -1 for negative values"
+                        + " and 0 when input is 0.",
+                        "sign( <Numeric_value> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Ceil",
+                        "Returns the smallest whole number greater than or equal to "
+                        + "the input numeric value.",
+                        "ceil( <Numeric_value> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Floor",
+                        "Returns the largest whole number equal to or less than "
+                        + "the input numeric value.",
+                        "floor( <Numeric_value> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Trunc",
+                        "Returns the first argument truncated to as many decimal "
+                        + "places as indicated by the second optional argument "
+                        + "(defaults to zero).",
+                        "trunc( <Numeric_value> [ , <Integer_value> ] )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Round",
+                        "Returns the first argument rounded to as many places "
+                        + "to the right of the decimal point as "
+                        + "indicated by the second optional argument "
+                        + "(defaults to zero).",
+                        "round( <Numeric_value> [ , <Integer_value> ] )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER),
+                    new DefaultDescription(
+                        "Length",
+                        "Returns the length (number of characters) of the "
+                        + "input string.",
+                        "length( <String> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                        "Concat",
+                        "Returns the concatenation of the two input strings.",
+                        "concat( <String_1> , <String_2> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                            "Instr",
+                            "Searches for a string using some parameters (similar to " +
+                            "same function in Oracle).",
+                            "instr( <String_1> , <String_2> , <Int_1> , <Int_2> )",
+                            EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                                "Trim",
+                                "Removes all leading and trailing spaces from the input" +
+                                " string.",
+                                "trim( <String> )",
+                                EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                                    "Rtrim",
+                                    "Removes all trailing (right-hand) spaces from " +
+                                    "the input string.",
+                                    "Rtrim( <String> )",
+                                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Ltrim",
+                    "Removes all leading (left-hand) spaces from " +
+                    "the input string.",
+                    "Ltrim( <String> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Rpad",
+                    "Appends <String_2> to <String_1> as many times as needed to reach " +
+                    "length <L>. <String_2> defaults to a white space.",
+                    "rpad( <String_1> , <L> [ , <String_2> ] )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                        "Lpad",
+                        "Prepends <String_2> to <String_1> as many times as needed to reach " +
+                        "length <L>. <String_2> defaults to a white space.",
+                        "lpad( <String_1> , <L> [ , <String_2> ] )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                            "Upper",
+                            "Returns the input string in upper case.",
+                            "upper( <String> )",
+                            EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                                "Lower",
+                                "Returns the input string in lower case.",
+                                "lower( <String> )",
+                                EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Translate",
+                    "Replaces characters following the order of the second and third" +
+                    " parameters.",
+                    "translate( <String_1> , <String_2> , <String_3> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Replace",
+                    "Replaces in <String_1> the occurrences of <String_2>" +
+                    " with <String_3>.",
+                    "replace( <String_1> , <String_2> , <String_3> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Initcap",
+                    "Sets the first character in each word to uppercase and the " +
+                    "rest to lowercase.",
+                    "initcap( <String> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Value",
+                    "Returns the first non-null value from the input values. " +
+                    "Can be used to avoid null values in a field.",
+                    "value( <Value_1> , <Value_2> ... )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "Decode",
+                    "This function works like a IF-THEN-ELSE block.",
+                    "decode( <Expression> , <Search> , <Result> ... )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "To_char",
+                    "Converts the input value to string.",
+                    "to_char( <Value> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "To_number",
+                    "Converts the input string to a number.",
+                    "to_number( <String> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Imatch",
+                    "Returns a string representing the phonetic value of the " +
+                    "input string. Similar to Soundex function in Oracle.",
+                    "imatch( <String> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Case",
+                    "This function works like a CASE-WHEN block.",
+                    "case( <Expression> ... )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                    
+                    
+                new DefaultDescription(
+                    "Index",
+                    "Returns the position of a substring in a string.",
+                    "index( <String> , <Substring> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING),
+                new DefaultDescription(
+                    "Num",
+                    "Returns the numeric value of the input string.",
+                    "num( <String> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                new DefaultDescription(
+                    "Chr",
+                    "Converts the input value to string.",
+                    "chr( <Value> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_NUMBER
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_STRING
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME
+                    | EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_BOOLEAN),
+                    /*
+                     * date
+                     */
+                new DefaultDescription(
+                    "Months_between",
+                    "Returns the number of months (as a float-point value) between " +
+                    "<Earliest_date> and <Latest_date>.",
+                    "months_between( <Latest_date> , <Earliest_date>  )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Add_months",
+                    "Adds a number of months to the input date.",
+                    "add_months( <Input_date> , <Number_of_months_integer>)",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Last_day",
+                    "Returns the date corresponding to the last day of the month " +
+                    "of the input date.",
+                    "last_day( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Next_day",
+                    "Returns the date of the first weekday named by the string " +
+                    "<Day_of_the_week> " +
+                    "that is later than <Input_date>.",
+                    "next_day( <Input_date> , <Day_of_the_week> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "To_date",
+                    "Converts the input string to a date following the" +
+                    " optional format.",
+                    "to_date( <Input_string> [ , <Format> ] )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Adddate",
+                    "Returns a date which is <Number_of_days> days after the" +
+                    " input date.",
+                    "adddate( <Input_date> , <Number_of_days> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Subdate",
+                    "Returns a date which is <Number_of_days> days before the" +
+                    " input date.",
+                    "subdate( <Input_date> , <Number_of_days> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Addtime",
+                    "Adds the second input time <Add_time> to the first " +
+                    "input time <Input_date>.",
+                    "addtime( <Input_time> , <Add_time> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Subtime",
+                    "Subtracts the second input time <Sub_time> from the first " +
+                    "input time <Input_date>.",
+                    "subtime( <Input_time> , <Sub_time> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Year",
+                    "Returns a numeric value representing the year of the " +
+                    "input date.",
+                    "year( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Month",
+                    "Returns a numeric value representing the month of the " +
+                    "input date.",
+                    "month( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Day",
+                    "Returns a numeric value representing the day of the " +
+                    "input date.",
+                    "day( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Dayofmonth",
+                    "Returns a numeric value between 1 and 31 corresponding to " +
+                    "the day of the month of the input date.",
+                    "dayofmonth( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Hour",
+                    "Returns a numeric value representing the number " +
+                    "of hours of the input time value.",
+                    "hour( <Time_value> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Minute",
+                    "Returns a numeric value representing the number " +
+                    "of minutes of the input time value.",
+                    "minute( <Time_value> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Second",
+                    "Returns a numeric value representing the number " +
+                    "of seconds of the input time value.",
+                    "second( <Time_value> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Microsecond",
+                    "Returns the number of microseconds of the input " +
+                    "timestamp value",
+                    "microseconds( <Timestamp_value> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Datediff",
+                    "Returns the number of days between the two input dates.",
+                    "datediff( <Date_1> , <Date_2> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Dayofweek",
+                    "Returns a numeric value between 1 (Monday) and 7 " +
+                    "(Sunday) corresponding to " +
+                    "the day of the week of the input date.",
+                    "dayofweek( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Weekofyear",
+                    "Returns a numeric value between 1 and 53 " +
+                    "corresponding to" +
+                    " the number of the week of the input date.",
+                    "weekofyear( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                        "Dayname",
+                        "Returns the name of the day corresponding to the input" +
+                        " date ('Sunday', 'Monday', etc).",
+                        "dayname( <Input_date> )",
+                        EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Monthname",
+                    "Returns the name of the month corresponding to the input" +
+                    " date ('January', 'February', etc).",
+                    "monthname( <Input_date> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Makedate",
+                    "Returns a date corresponding to the day denoted by " +
+                    "<Day_integer> (between 1 and 366) of the year " +
+                    "<Year_integer>.",
+                    "makedate( <Year_integer> , <Day_integer> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME),
+                new DefaultDescription(
+                    "Maketime",
+                    "Creates a time value with the input number of" +
+                    " hours, minutes and seconds.",
+                    "maketime( <Hours> , <Minutes> , <Seconds> )",
+                    EvaluatorWithDescriptions.Description.DATATYPE_CATEGORY_DATETIME)
+                    
+            };
+        }
+        return available_functions;
+    }
+
+    // =======================================================
+    // =======================================================
+    // =======================================================
+    
+    private class DefaultDescription  implements Description{
+        
+        private String name, desc, template;
+        private int categories;
+        
+        public DefaultDescription(
+            String name, String desc, String template,
+            int datatype_categories) {
+            
+            this.name = name;
+            this.desc = desc;
+            this.template = template;
+            this.categories = datatype_categories;
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.tools.evaluator.EvaluatorWithDescriptions.Description#getName()
+         */
+        public String getName() {
+            return name;
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.tools.evaluator.EvaluatorWithDescriptions.Description#getDescription()
+         */
+        public String getDescription() {
+            return desc;
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.tools.evaluator.EvaluatorWithDescriptions.Description#getTemplate()
+         */
+        public String getTemplate() {
+            return template;
+        }
+
+        /* (non-Javadoc)
+         * @see org.gvsig.tools.evaluator.EvaluatorWithDescriptions.Description#getDataTypeCategories()
+         */
+        public int getDataTypeCategories() {
+            return this.categories;
+        }
+        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPLibrary.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+package org.gvsig.tools.evaluator.sqljep;
+
+import org.medfoster.sqljep.BaseJEP;
+import org.medfoster.sqljep.function.ToDate;
+
+import org.gvsig.fmap.geom.GeometryLibrary;
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.evaluator.sqljep.function.Boundary;
+import org.gvsig.tools.evaluator.sqljep.function.Equals;
+import org.gvsig.tools.evaluator.sqljep.function.GeomFromText;
+import org.gvsig.tools.evaluator.sqljep.function.Intersects;
+import org.gvsig.tools.evaluator.sqljep.function.OpenGISFunctions;
+import org.gvsig.tools.evaluator.sqljep.function.Overlaps;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class SQLJEPLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(ToolsLibrary.class);
+        require(GeometryLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		BaseJEP.addFunction(Equals.NAME, new Equals());
+		BaseJEP.addFunction(GeomFromText.NAME, new GeomFromText());
+		BaseJEP.addFunction(Intersects.NAME, new Intersects());
+		BaseJEP.addFunction(Overlaps.NAME, new Overlaps());
+		BaseJEP.addFunction(Boundary.NAME, new Boundary());
+		BaseJEP.addFunction(SQLJEPEvaluator.TODATE_FUNCTION_NAME, new ToDate());
+                OpenGISFunctions.registerFunctions();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/SQLJEPLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Boundary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Boundary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Boundary.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2008 IVER T.I   {{Task}}
+*/
+
+/**
+ *
+ */
+package org.gvsig.tools.evaluator.sqljep.function;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.medfoster.sqljep.ASTFunNode;
+import org.medfoster.sqljep.JepRuntime;
+import org.medfoster.sqljep.ParseException;
+import org.medfoster.sqljep.function.PostfixCommand;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class Boundary extends PostfixCommand {
+
+	public static final String NAME = "boundary";
+
+	final public int getNumberOfParameters() {
+		return 1;
+	}
+	/* (non-Javadoc)
+	 * @see org.medfoster.sqljep.function.PostfixCommand#evaluate(org.medfoster.sqljep.ASTFunNode, org.medfoster.sqljep.JepRuntime)
+	 */
+	public void evaluate(ASTFunNode node, JepRuntime runtime)
+			throws ParseException {
+		node.childrenAccept(runtime.ev, null);
+		Comparable param1 = (Comparable)runtime.stack.pop();
+		if (param1 == null) {
+			runtime.stack.push(null);
+		} else{
+			runtime.stack.push(Boundary.boundary((Geometry) param1));
+		}
+	}
+
+	private static Geometry boundary(Geometry g)
+			throws ParseException {
+                // Oppss esta implementacion parece que no es buena ya que el baundary
+                // no es el envelope.
+		return g.getEnvelope().getGeometry();
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Boundary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Intersects.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Intersects.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Intersects.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 IVER T.I. S.A.   {{Task}}
+ */
+package org.gvsig.tools.evaluator.sqljep.function;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.medfoster.sqljep.ASTFunNode;
+import org.medfoster.sqljep.JepRuntime;
+import org.medfoster.sqljep.ParseException;
+import org.medfoster.sqljep.function.PostfixCommand;
+
+public class Intersects extends PostfixCommand {
+
+    public static final String NAME = "intersects";
+
+    final public int getNumberOfParameters() {
+        return 2;
+    }
+
+    public void evaluate(ASTFunNode node, JepRuntime runtime)
+            throws ParseException {
+        node.childrenAccept(runtime.ev, null);
+        Geometry geom1 = (Geometry) runtime.stack.pop();
+        Geometry geom2 = (Geometry) runtime.stack.pop();
+        try {
+            runtime.stack.push(Boolean.valueOf(geom1.intersects(geom2)));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new ParseException(NAME, e);
+        } catch (GeometryOperationException e) {
+            throw new ParseException(NAME, e);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Intersects.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Equals.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Equals.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Equals.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2008 IVER T.I   {{Task}}
+*/
+
+/**
+ *
+ */
+package org.gvsig.tools.evaluator.sqljep.function;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.medfoster.sqljep.ASTFunNode;
+import org.medfoster.sqljep.JepRuntime;
+import org.medfoster.sqljep.ParseException;
+import org.medfoster.sqljep.function.PostfixCommand;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class Equals extends PostfixCommand {
+
+	public static final String NAME = "equals";
+	
+	final public int getNumberOfParameters() {
+		return 2;
+	}
+	/* (non-Javadoc)
+	 * @see org.medfoster.sqljep.function.PostfixCommand#evaluate(org.medfoster.sqljep.ASTFunNode, org.medfoster.sqljep.JepRuntime)
+	 */
+	public void evaluate(ASTFunNode node, JepRuntime runtime)
+			throws ParseException {
+		node.childrenAccept(runtime.ev, null);
+		Comparable param2 = (Comparable)runtime.stack.pop();
+		Comparable param1 = (Comparable)runtime.stack.pop();
+		if (param1 == null || param2 == null) {
+			runtime.stack.push(Boolean.FALSE);
+		} else if ((param1 instanceof Geometry)
+				&& (param2 instanceof Geometry)) {
+			runtime.stack.push(new Boolean(isEquals((Geometry)param1, (Geometry)param2)));
+		} else{
+			runtime.stack.push(new Boolean(param1.equals(param2)));
+		}
+	}
+
+	private static boolean isEquals(Geometry g1, Geometry g2) throws ParseException {
+		return (g1.equals(g2));
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Equals.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Overlaps.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Overlaps.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Overlaps.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2008 IVER T.I. S.A.   {{Task}}
+*/
+ 
+package org.gvsig.tools.evaluator.sqljep.function;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.medfoster.sqljep.ASTFunNode;
+import org.medfoster.sqljep.JepRuntime;
+import org.medfoster.sqljep.ParseException;
+import org.medfoster.sqljep.function.PostfixCommand;
+
+public class Overlaps extends PostfixCommand {
+
+	public static final String NAME = "overlaps";
+	
+	final public int getNumberOfParameters() {
+		return 2;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.medfoster.sqljep.function.PostfixCommand#evaluate(org.medfoster.sqljep.ASTFunNode, org.medfoster.sqljep.JepRuntime)
+	 */
+	public void evaluate(ASTFunNode node, JepRuntime runtime)
+			throws ParseException {
+		node.childrenAccept(runtime.ev, null);
+		Geometry geom1 = (Geometry)runtime.stack.pop();
+		Geometry geom2 = (Geometry)runtime.stack.pop();
+		try {
+			runtime.stack.push( Boolean.valueOf(geom1.overlaps(geom2)) );
+		} catch (GeometryOperationNotSupportedException e) {
+			throw new ParseException(NAME, e);
+		} catch (GeometryOperationException e) {
+			throw new ParseException(NAME, e);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/Overlaps.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/OpenGISFunctions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/OpenGISFunctions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/OpenGISFunctions.java	(revision 42196)
@@ -0,0 +1,511 @@
+package org.gvsig.tools.evaluator.sqljep.function;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.medfoster.sqljep.ASTFunNode;
+import org.medfoster.sqljep.BaseJEP;
+import org.medfoster.sqljep.JepRuntime;
+import org.medfoster.sqljep.ParseException;
+import org.medfoster.sqljep.function.PostfixCommand;
+
+public class OpenGISFunctions {
+
+    public static BaseFunction[] functions = {
+        new  ST_Distance(),
+        new  ST_Disjoint(),
+        new  ST_Touches(),
+        new  ST_Crosses(),
+        new  ST_Within(),
+        new  ST_Overlaps(),
+        new  ST_Contains(),
+        new  ST_Covers(),
+        new  ST_CoveredBy(),
+        new  ST_Intersects(),
+        new  ST_Centroid(),
+        new  ST_Area(),
+//        new  ST_Length(),
+//        new  ST_Boundary(),
+        new  ST_Buffer(),
+        new  ST_ConvexHull(),
+        new  ST_Intersection(),
+        new  ST_Difference(),
+        new  ST_Union(),
+        new  ST_AsText(),
+//        new  ST_AsBinary(),
+//        new  ST_SRID(),
+        new  ST_Dimension(),
+        new  ST_Envelope(),
+        new  ST_IsSimple(),
+//        new  ST_IsRing(),
+        new  ST_NumGeometries(),
+        new  ST_GeometryN(),
+        new  ST_NumPoints(),
+        new  ST_PointN(),
+        new  ST_StartPoint(),
+        new  ST_EndPoint(),
+        new  ST_X(),
+        new  ST_Y(),
+        new  ST_Z(),
+        new  ST_GeomFromText(),
+        new  ST_isValid()
+    };
+    
+    public static void registerFunctions() {
+      for( int i=0; i<functions.length; i++ ) {
+          BaseFunction f = functions[i];
+          BaseJEP.addFunction(f.getName(),f );
+      } 
+    }
+    
+    
+    public static abstract class BaseFunction extends PostfixCommand {
+
+        public String getName() {
+            String name = this.getClass().getName();
+            int index = name.lastIndexOf(".");
+            if ( index < 1 ) {
+                return name;
+            }
+            return name.substring(index + 1);
+        }
+
+        public Geometry pop_geometry(JepRuntime runtime)
+                throws ParseException {
+            return (Geometry) runtime.stack.pop();
+        }
+
+        public double pop_double(JepRuntime runtime)
+                throws ParseException {
+            Double value = null;
+            try {
+                value = (Double) ToolsLocator.getDataTypesManager().coerce(
+                        DataTypes.DOUBLE, runtime.stack.pop()
+                );
+            } catch (CoercionException ex) {
+                throw new ParseException(this.getName(), ex);
+            }
+            return value.doubleValue();
+        }
+
+        public int pop_int(JepRuntime runtime)
+                throws ParseException {
+            Integer value = null;
+            try {
+                value = (Integer) ToolsLocator.getDataTypesManager().coerce(
+                        DataTypes.INT, runtime.stack.pop()
+                );
+            } catch (CoercionException ex) {
+                throw new ParseException(this.getName(), ex);
+            }
+            return value.intValue();
+        }
+
+        public String pop_string(JepRuntime runtime)
+                throws ParseException {
+            String value = null;
+            try {
+                value = (String) ToolsLocator.getDataTypesManager().coerce(
+                        DataTypes.STRING, runtime.stack.pop()
+                );
+            } catch (CoercionException ex) {
+                throw new ParseException(this.getName(), ex);
+            }
+            return value;
+        }
+
+        public void evaluate(ASTFunNode node, JepRuntime runtime)
+                throws ParseException {
+            try {
+                Comparable value = this.evaluate(runtime);
+                runtime.stack.push(value);
+            } catch (Exception ex) {
+                throw new ParseException(getName(), ex);
+            }
+        }
+
+        public abstract Comparable evaluate(JepRuntime runtime) throws Exception;
+    }
+
+    public static abstract class Function_geom1_geom2 extends BaseFunction {
+
+        final public int getNumberOfParameters() {
+            return 2;
+        }
+
+        public Comparable evaluate(JepRuntime runtime)
+                throws Exception {
+            Geometry geom1 = pop_geometry(runtime);
+            Geometry geom2 = pop_geometry(runtime);
+            return evaluate(geom1, geom2);
+        }
+
+        public abstract Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception;
+    }
+
+    public static abstract class Function_geom1 extends BaseFunction {
+
+        final public int getNumberOfParameters() {
+            return 1;
+        }
+
+        public Comparable evaluate(JepRuntime runtime)
+                throws Exception {
+            Geometry geom1 = pop_geometry(runtime);
+            return evaluate(geom1);
+        }
+
+        public abstract Comparable evaluate(Geometry geom1) throws Exception;
+    }
+
+    public static abstract class Function_geom1_double extends BaseFunction {
+
+        final public int getNumberOfParameters() {
+            return 2;
+        }
+
+        public Comparable evaluate(JepRuntime runtime)
+                throws Exception {
+            Geometry geom1 = pop_geometry(runtime);
+            double value = pop_double(runtime);
+            return evaluate(geom1, value);
+        }
+
+        public abstract Comparable evaluate(Geometry geom1, double value) throws Exception;
+    }
+
+    public static abstract class Function_geom1_int extends BaseFunction {
+
+        final public int getNumberOfParameters() {
+            return 2;
+        }
+
+        public Comparable evaluate(JepRuntime runtime)
+                throws Exception {
+            Geometry geom1 = pop_geometry(runtime);
+            int value = pop_int(runtime);
+            return evaluate(geom1, value);
+        }
+
+        public abstract Comparable evaluate(Geometry geom1, int value) throws Exception;
+    }
+
+    public static abstract class Function_string extends BaseFunction {
+
+        final public int getNumberOfParameters() {
+            return 1;
+        }
+
+        public Comparable evaluate(JepRuntime runtime)
+                throws Exception {
+            String value = pop_string(runtime);
+            return evaluate(value);
+        }
+
+        public abstract Comparable evaluate(String value) throws Exception;
+    }
+
+    public static class ST_Distance extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Double.valueOf(geom1.distance(geom2));
+        }
+    }
+
+    public static class ST_Disjoint extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.disjoint(geom2));
+        }
+    }
+
+    public static class ST_Touches extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.touches(geom2));
+        }
+    }
+
+    public static class ST_Crosses extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.crosses(geom2));
+        }
+    }
+
+    public static class ST_Within extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.within(geom2));
+        }
+    }
+
+    public static class ST_Overlaps extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.overlaps(geom2));
+        }
+    }
+
+    public static class ST_Contains extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.contains(geom2));
+        }
+    }
+
+    public static class ST_Covers extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.covers(geom2));
+        }
+    }
+
+    public static class ST_CoveredBy extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.coveredBy(geom2));
+        }
+    }
+
+    public static class ST_Intersects extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return Boolean.valueOf(geom1.intersects(geom2));
+        }
+    }
+
+    public static class ST_Centroid extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return geom1.centroid();
+        }
+    }
+
+    public static class ST_Area extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return Double.valueOf(geom1.area());
+        }
+    }
+
+//    public static class ST_Length extends Function_geom1 {
+//
+//        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+//            return Double.valueOf(geom1.length());
+//        }
+//    }
+//    public static class ST_Boundary extends Function_geom1 {
+//
+//        public Comparable evaluate(Geometry geom1) throws Exception {
+//            return geom1.boundary();
+//        }
+//    }
+    public static class ST_Buffer extends Function_geom1_double {
+
+        public Comparable evaluate(Geometry geom1, double value) throws Exception {
+            return geom1.buffer(value);
+        }
+    }
+
+    public static class ST_ConvexHull extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return geom1.convexHull();
+        }
+    }
+
+    public static class ST_Intersection extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return geom1.intersection(geom2);
+        }
+    }
+
+    public static class ST_Difference extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return geom1.difference(geom2);
+        }
+    }
+
+    public static class ST_Union extends Function_geom1_geom2 {
+
+        public Comparable evaluate(Geometry geom1, Geometry geom2) throws Exception {
+            return geom1.union(geom2);
+        }
+    }
+
+    public static class ST_AsText extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return geom1.convertToWKT();
+        }
+    }
+
+//    public static class ST_AsBinary extends Function_geom1 {
+//
+//        public Comparable evaluate(Geometry geom1) throws Exception {
+//            byte[] bytes = geom1.convertToWKB();
+//            return bytes;
+//        }
+//    }
+//    public static class ST_SRID extends Function_geom1 {
+//
+//        public Comparable evaluate(Geometry geom1) throws Exception {
+//            return geom1.getCRS();
+//        }
+//    }
+    public static class ST_Dimension extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            GeometryType type = geom1.getGeometryType();
+            if ( type.isSubTypeOf(Geometry.TYPES.POINT)
+                    || type.isSubTypeOf(Geometry.TYPES.MULTIPOINT) ) {
+                return 0;
+            }
+            if ( type.isSubTypeOf(Geometry.TYPES.CURVE)
+                    || type.isSubTypeOf(Geometry.TYPES.MULTICURVE) ) {
+                return 1;
+            }
+            if ( type.isSubTypeOf(Geometry.TYPES.SURFACE)
+                    || type.isSubTypeOf(Geometry.TYPES.MULTISURFACE) ) {
+                return 2;
+            }
+            if ( type.isSubTypeOf(Geometry.TYPES.SOLID) ) {
+                return 3;
+            }
+            return -1;
+        }
+    }
+
+    public static class ST_Envelope extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return geom1.getEnvelope().getGeometry();
+        }
+    }
+
+    public static class ST_IsSimple extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return geom1.isSimple();
+        }
+    }
+
+//    public static class ST_IsRing extends Function_geom1 {
+//        public Comparable evaluate(Geometry geom1) throws Exception {
+//            return geom1.isClosed();
+//        }
+//    }
+    public static class ST_NumGeometries extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            if ( geom1 instanceof Aggregate ) {
+                int n = ((Aggregate) geom1).getPrimitivesNumber();
+                return Integer.valueOf(n);
+            }
+            return null;
+        }
+    }
+
+    public static class ST_GeometryN extends Function_geom1_int {
+
+        public Comparable evaluate(Geometry geom1, int value) throws Exception {
+            if ( geom1 instanceof Aggregate ) {
+                return ((Aggregate) geom1).getPrimitiveAt(value);
+            }
+            return null;
+        }
+    }
+
+    public static class ST_NumPoints extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            if ( geom1 instanceof OrientablePrimitive ) {
+                int n = ((OrientablePrimitive) geom1).getNumVertices();
+                return Integer.valueOf(n);
+            }
+            return null;
+        }
+    }
+
+    public static class ST_PointN extends Function_geom1_int {
+
+        public Comparable evaluate(Geometry geom1, int value) throws Exception {
+            if ( geom1 instanceof OrientablePrimitive ) {
+                return ((OrientablePrimitive) geom1).getVertex(value);
+            }
+            return null;
+        }
+    }
+
+    public static class ST_StartPoint extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            if ( geom1 instanceof OrientablePrimitive ) {
+                return ((OrientablePrimitive) geom1).getVertex(0);
+            }
+            return null;
+        }
+    }
+
+    public static class ST_EndPoint extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            if ( geom1 instanceof OrientablePrimitive ) {
+                int n = ((OrientablePrimitive) geom1).getNumVertices();
+                return ((OrientablePrimitive) geom1).getVertex(n - 1);
+            }
+            return null;
+        }
+    }
+
+    public static class ST_X extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return ((Point) geom1).getX();
+        }
+    }
+
+    public static class ST_Y extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return ((Point) geom1).getX();
+        }
+    }
+
+    public static class ST_Z extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            Point p = (Point) geom1;
+            if ( p.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3D ) {
+                return Double.valueOf(p.getCoordinateAt(2));
+            }
+            return null;
+        }
+    }
+
+    public static class ST_GeomFromText extends Function_string {
+
+        public Comparable evaluate(String value) throws Exception {
+            GeometryManager manager = GeometryLocator.getGeometryManager();
+            return manager.createFrom(value);
+        }
+    }
+
+    public static class ST_isValid extends Function_geom1 {
+
+        public Comparable evaluate(Geometry geom1) throws Exception {
+            return Boolean.valueOf(geom1.isValid());
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/GeomFromText.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/GeomFromText.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/GeomFromText.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 IVER T.I. S.A.   {{Task}}
+ */
+
+package org.gvsig.tools.evaluator.sqljep.function;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.tools.locator.LocatorException;
+import org.medfoster.sqljep.ASTFunNode;
+import org.medfoster.sqljep.JepRuntime;
+import org.medfoster.sqljep.ParseException;
+import org.medfoster.sqljep.function.PostfixCommand;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GeomFromText extends PostfixCommand {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(GeomFromText.class);
+	
+	private static Object lock = new Object();
+
+	public static final String NAME = "GeomFromText";
+	private static String lastTextGeometry="";
+	private static String lastSRS="";
+	private static Geometry lastGeometry=null;
+
+	final public int getNumberOfParameters() {
+		return 2;
+	}
+
+	public GeomFromText() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.medfoster.sqljep.function.PostfixCommand#evaluate(org.medfoster.sqljep.ASTFunNode,
+	 *      org.medfoster.sqljep.JepRuntime)
+	 */
+	public void evaluate(ASTFunNode node, JepRuntime runtime)
+			throws ParseException {
+		node.childrenAccept(runtime.ev, null);
+		String srs = (String) runtime.stack.pop();
+		String text = (String) runtime.stack.pop();
+		runtime.stack.push(geometryFromText(text, srs));
+	}
+
+	private static Geometry geometryFromText(String text, String srs)
+			throws ParseException {
+		if (!lastTextGeometry.equals(text) || !lastSRS.equals(srs)) {
+			try {
+				lastGeometry = geomManager.createFrom(text, srs); 
+			} catch (CreateGeometryException e) {
+				throw new ParseException(NAME, e);
+			} catch (LocatorException e) {
+				throw new ParseException(NAME, e);
+			} catch (GeometryException e) {
+				throw new ParseException(NAME, e);
+			}
+			lastTextGeometry = text;
+			lastSRS = srs;
+		}
+		return lastGeometry;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep/src/main/java/org/gvsig/tools/evaluator/sqljep/function/GeomFromText.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.tools.evaluator.sqljep
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/pom.xml	(revision 42196)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.utils</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.library</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <type>test-jar</type>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>castor</groupId>
+      <artifactId>castor</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+  </dependencies>
+
+  <build>
+    
+    <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/stringNumberUtilities/TestStringNumberUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/stringNumberUtilities/TestStringNumberUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/stringNumberUtilities/TestStringNumberUtilities.java	(revision 42196)
@@ -0,0 +1,1341 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.stringNumberUtilities;
+
+import org.gvsig.utils.stringNumberUtilities.StringNumberUtilities;
+
+import junit.framework.TestCase;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the methods of the class StringNumberUtilities
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestStringNumberUtilities extends TestCase{
+	private String word;
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		word = new String();
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test1() {
+		word = "2.3";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test2() {
+		word = "a as wz rwa";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test3() {
+		word = "2";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test4() {
+		word = "";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test5() {
+		word = "-2.3";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test6() {
+		word = "-300";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test7() {
+		word = "2.3";
+		ShowText.showIsNaturalText(word);
+
+		if (StringNumberUtilities.isNaturalNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test8() {
+		word = "334";
+		ShowText.showIsNaturalText(word);
+
+		if (StringNumberUtilities.isNaturalNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test9() {
+		word = "-2a3";
+		ShowText.showIsIntegerText(word);
+
+		if (StringNumberUtilities.isIntegerNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test10() {
+		word = "-23";
+		ShowText.showIsIntegerText(word);
+
+		if (StringNumberUtilities.isIntegerNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test11() {
+		word = "7";
+		ShowText.showIsIntegerText(word);
+
+		if (StringNumberUtilities.isIntegerNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test12() {
+		word = "2.3";
+		ShowText.showIsIntegerText(word);
+
+		if (StringNumberUtilities.isIntegerNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test13() {
+		word = "2.3";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test14() {
+		word = "37";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test15() {
+		word = "-4.6";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test16() {
+		word = "-8000";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test17() {
+		word = "-80k00";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+		
+	/**
+	 * A test
+	 */
+	public void test18() {
+		word = ".6";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test19() {
+		word = "-.6";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test20() {
+		word = "b-.6";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	
+	/**
+	 * A test
+	 */
+	public void test21() {
+		word = "-c.6";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	
+	/**
+	 * A test
+	 */
+	public void test22() {
+		word = "-.d6";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test23() {
+		word = "-.6e";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test24() {
+		word = "+.6";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test25() {
+		word = "+.6";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	
+	/**
+	 * A test
+	 */
+	public void test26() {
+		word = ".6";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test27() {
+		word = "-.6";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test28() {
+		word = "+6";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test29() {
+		word = "-6";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test30() {
+		word = "6";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test31() {
+		word = "136.13";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	
+	/**
+	 * A test
+	 */
+	public void test32() {
+		word = "+13.42";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test33() {
+		word = "-246.24";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test34() {
+		word = "146.134E+13";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test35() {
+		word = "614.425E-67";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test36() {
+		word = "-8945.1201e48.141";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test37() {
+		word = "-8945.1201e48.141.";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test38() {
+		word = "8945.1201ee48.141";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+		
+	/**
+	 * A test
+	 */
+	public void test39() {
+		word = "8945.1201E";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test40() {
+		word = "8945.1201e+";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test41() {
+		word = "8945.1201e+1";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	
+	/**
+	 * A test
+	 */
+	public void test42() {
+		word = "8945.1201e+.32";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test43() {
+		word = "+.6";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	
+	/**
+	 * A test
+	 */
+	public void test44() {
+		word = ".6";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test45() {
+		word = "-.6";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test46() {
+		word = "+6";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test47() {
+		word = "-6";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	
+	/**
+	 * A test
+	 */
+	public void test48() {
+		word = "6";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test49() {
+		word = "136.13";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	
+	/**
+	 * A test
+	 */
+	public void test50() {
+		word = "+13.42";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test51() {
+		word = "-246.24";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test52() {
+		word = "146.134E+13";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test53() {
+		word = "614.425E-67";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test54() {
+		word = "-8945.1201e48.141";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test55() {
+		word = "-8945.1201e48.141.";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test56() {
+		word = "8945.1201ee48.141";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+		
+	/**
+	 * A test
+	 */
+	public void test57() {
+		word = "8945.1201E";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test58() {
+		word = "8945.1201e+";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test59() {
+		word = "8945.1201e+1";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test60() {
+		word = "8945.1201e+.32";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test61() {
+		word = "-";
+		ShowText.showIsIntegerText(word);
+
+		if (StringNumberUtilities.isIntegerNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test62() {
+		word = "-";
+		ShowText.showIsNaturalText(word);
+
+		if (StringNumberUtilities.isNaturalNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test63() {
+		word = "-";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test64() {
+		word = "-";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test65() {
+		word = "-";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test66() {
+		word = "-";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test67() {
+		word = "+";
+		ShowText.showIsIntegerText(word);
+
+		if (StringNumberUtilities.isIntegerNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test68() {
+		word = "+";
+		ShowText.showIsNaturalText(word);
+
+		if (StringNumberUtilities.isNaturalNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test69() {
+		word = "+";
+		ShowText.showIsNumberText(word);
+
+		if (StringNumberUtilities.isNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test70() {
+		word = "+";
+		ShowText.showIsRealText(word);
+
+		if (StringNumberUtilities.isRealNumber(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test71() {
+		word = "+";
+		ShowText.showIsRealWithIntegerExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithIntegerExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test72() {
+		word = "+";
+		ShowText.showIsRealWithRealExponentText(word);
+
+		if (StringNumberUtilities.isRealNumberWithRealExponent(word)) {
+			ShowText.showYes();
+		}
+		else {
+			ShowText.showNo();
+			fail();
+		}
+	}
+
+	/**
+	 * Shows a text sentence
+	 * 
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	private static class ShowText {
+		/**
+		 * Shows the text: Is number?
+		 * 
+		 * @param word An String
+		 */
+		public static void showIsNumberText(String word) {
+			System.out.print("� Es n�mero \'" + word + "\' ? ");
+		}
+
+		/**
+		 * Shows the text: Is natural number?
+		 * 
+		 * @param word An String
+		 */
+		public static void showIsNaturalText(String word) {
+			System.out.print("� Es n�mero natural \'" + word + "\' ? ");
+		}
+
+		/**
+		 * Shows the text: Is integer number?
+		 * 
+		 * @param word An String
+		 */
+		public static void showIsIntegerText(String word) {
+			System.out.print("� Es n�mero entero \'" + word + "\' ? ");
+		}
+
+		/**
+		 * Shows the text: Is rational number?
+		 * 
+		 * @param word An String
+		 */
+		public static void showIsRealText(String word) {
+			System.out.print("� Es n�mero real \'" + word + "\' ? ");
+		}
+		
+		/**
+		 * Shows the text: Is integer exponent rational number?
+		 * 
+		 * @param word An String
+		 */
+		public static void showIsRealWithIntegerExponentText(String word) {
+			System.out.print("� Es n�mero real con exponente entero \'" + word + "\' ? ");
+		}
+		
+		/**
+		 * Shows the text: Is rational exponent rational number?
+		 * 
+		 * @param word An String
+		 */
+		public static void showIsRealWithRealExponentText(String word) {
+			System.out.print("� Es n�mero real con exponente real \'" + word + "\' ? ");
+		}
+
+		/**
+		 * Shows the text: Yes
+		 * 
+		 * @param word An String
+		 */
+		public static void showYes() {
+			System.out.println("Si.");
+		}
+		
+		/**
+		 * Shows the text: No
+		 * 
+		 * @param word An String
+		 */
+		public static void showNo() {
+			System.out.println("No.");
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/stringNumberUtilities/TestStringNumberUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestXMLEntity.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestXMLEntity.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestXMLEntity.java	(revision 42196)
@@ -0,0 +1,335 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: TestXMLEntity.java 30754 2009-09-09 06:42:28Z cordinyana $
+* $Log$
+* Revision 1.7  2007-03-05 11:15:43  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/03/05 10:03:12  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2007/03/05 09:00:11  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2007/03/02 13:35:56  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2007/03/02 13:27:32  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/02 13:24:53  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2007/03/02 13:23:50  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/08/29 06:18:17  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils;
+
+import java.io.File;
+import java.io.FileReader;
+
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.utils.xmlEntity.generate.XmlTag;
+
+
+public class TestXMLEntity extends AbstractLibraryAutoInitTestCase {
+	private XMLEntity x1, x2, x3, x4;
+	private XMLEntity gvp1;
+	private XMLEntity gvp2;
+
+	@Override
+	protected void doSetUp() throws Exception {
+
+		x1 = new XMLEntity();
+		x2 = new XMLEntity();
+		x3 = new XMLEntity();
+
+		
+		final Object obj1 = new XMLEntity();
+		final Object obj2 = new XMLEntity();
+		final Object obj3 = "StringClass";
+
+		
+		x1.putProperty("boolean1", false);
+		x1.putProperty("boolean2", true);
+
+		x1.putProperty("integer1", Integer.parseInt("123"));
+		x1.putProperty("integer2", Integer.parseInt("321"));
+
+		x1.putProperty("long1", Long.parseLong("123123"));
+		x1.putProperty("long2", Long.parseLong("321321"));
+
+		x1.putProperty("float1", Float.parseFloat("1234.1234"));
+		x1.putProperty("float2", Float.parseFloat("4321.4321"));
+
+		x1.putProperty("double1", Double.parseDouble("12341234.12341234"));
+		x1.putProperty("double2", Double.parseDouble("43214321.43214321"));
+
+		x1.putProperty("string1", "String1");
+		x1.putProperty("string2", "String2");
+
+		x1.putProperty("object1", obj1);
+		x1.putProperty("object2", obj2);
+
+
+		//----- x1 == x2
+		x2.putProperty("boolean1", false);
+		x2.putProperty("boolean2", true);
+
+		x2.putProperty("integer1", Integer.parseInt("123"));
+		x2.putProperty("integer2", Integer.parseInt("321"));
+
+		x2.putProperty("long1", Long.parseLong("123123"));
+		x2.putProperty("long2", Long.parseLong("321321"));
+
+		x2.putProperty("float1", Float.parseFloat("1234.1234"));
+		x2.putProperty("float2", Float.parseFloat("4321.4321"));
+
+		x2.putProperty("double1", Double.parseDouble("12341234.12341234"));
+		x2.putProperty("double2", Double.parseDouble("43214321.43214321"));
+
+		x2.putProperty("string1", "String1");
+		x2.putProperty("string2", "String2");
+
+		x2.putProperty("object1", obj1);
+		x2.putProperty("object2", obj2);
+
+		
+		//----- x1 != x3
+
+		x3.putProperty("boolean1", false);
+		x3.putProperty("boolean2", true);
+
+		x3.putProperty("integer1", Integer.parseInt("123"));
+		x3.putProperty("integer2", Integer.parseInt("321"));
+
+		x3.putProperty("long1", Long.parseLong("123123"));
+		x3.putProperty("long2", Long.parseLong("321321"));
+
+		x3.putProperty("float1", Float.parseFloat("1234.1234"));
+		x3.putProperty("float2", Float.parseFloat("4321.4321"));
+
+		x3.putProperty("double1", Double.parseDouble("12341234.12341234"));
+		x3.putProperty("double2", Double.parseDouble("43214321.43214324"));
+
+		x3.putProperty("string1", "String1");
+		x3.putProperty("string2", "String2");
+
+		x3.putProperty("object1", obj1);
+		x3.putProperty("object2", obj3);
+		
+		
+		XmlTag tag;
+		try {
+			tag = (XmlTag) XmlTag.unmarshal(
+					new FileReader(new File("testdata/sample.gvp")));
+			gvp1 = new XMLEntity(tag);
+			
+			tag = (XmlTag) XmlTag.unmarshal(
+					new FileReader(new File("testdata/sample2.gvp")));
+			gvp2 = new XMLEntity(tag);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		
+		 
+	}
+
+	public void testEquality() {
+		assertEquals(x1, x2);
+
+		assertFalse(x1.equals(x3));
+		assertFalse(x2.equals(x3));
+	}
+
+	
+	public void testHash() {
+		final long x1Hash = x1.hash();
+		final long x2Hash = x2.hash();
+		final long x3Hash = x3.hash();
+		
+		assertTrue("x1 should be equals to x2", x1Hash == x2Hash);
+		assertTrue("x1 should be distinct to x3", x1Hash != x3Hash);
+	}
+	
+	
+	public void testSkippedProperties() {
+		x1.putProperty("skipped1", true, false);
+		x1.putProperty("skipped2", 1, false);
+		x1.putProperty("skipped3", 1D, false);
+		x1.putProperty("skipped4", 1F, false);
+		x1.putProperty("skipped5", 1L, false);
+		x1.putProperty("skipped6", "bla bla", false);
+		
+		x2.putProperty("skipped1", false, false);
+		x2.putProperty("skipped2", 2, false);
+		x2.putProperty("skipped3", 2D, false);
+		x2.putProperty("skipped4", 2F, false);
+		x2.putProperty("skipped5", 2L, false);
+		x2.putProperty("skipped6", "bla bla bleitor", false);
+		
+		x3.putProperty("skipped1", false, false);
+		x3.putProperty("skipped2", 2, false);
+		x3.putProperty("skipped3", 2D, false);
+		x3.putProperty("skipped4", 2F, false);
+		x3.putProperty("skipped5", 2L, false);
+		x3.putProperty("skipped6", "bla bla bleitor", false);
+
+		
+		
+		final long x1Hash = x1.hash();
+		final long x2Hash = x2.hash();
+		final long x3Hash = x3.hash();
+		
+		assertTrue("x1 should be equals to x2", x1Hash == x2Hash);
+		assertTrue("x1 should be distinct to x3", x1Hash != x3Hash);
+		assertTrue("x2 should be distinct to x3", x2Hash != x3Hash);
+		
+		x1.remove("skipped1");
+		x1.remove("skipped2");
+		x1.remove("skipped3");
+		x1.remove("skipped4");
+		x1.remove("skipped5");
+		x1.remove("skipped6");
+		
+		x2.remove("skipped1");
+		x2.remove("skipped2");
+		x2.remove("skipped3");
+		x2.remove("skipped4");
+		x2.remove("skipped5");
+		x2.remove("skipped6");
+		
+		x3.remove("skipped1");
+		x3.remove("skipped2");
+		x3.remove("skipped3");
+		x3.remove("skipped4");
+		x3.remove("skipped5");
+		x3.remove("skipped6");
+	}
+	
+	
+
+	public void testNonSkippedProperties() {
+		x1.putProperty("non_skipped1", true, true);
+		x1.putProperty("non_skipped2", 1, true);
+		x1.putProperty("non_skipped3", 1D, true);
+		x1.putProperty("non_skipped4", 1F, true);
+		x1.putProperty("non_skipped5", 1L, true);
+		x1.putProperty("non_skipped6", "bla bla", true);
+		
+		x3.putProperty("non_skipped1", false, true);
+		x3.putProperty("non_skipped2", 2, true);
+		x3.putProperty("non_skipped3", 2D, true);
+		x3.putProperty("non_skipped4", 2F, true);
+		x3.putProperty("non_skipped5", 2L, true);
+		x3.putProperty("non_skipped6", "bla bla bleitor", true);
+
+		x2.putProperty("non_skipped1", false, true);
+		x2.putProperty("non_skipped2", 2, true);
+		x2.putProperty("non_skipped3", 2D, true);
+		x2.putProperty("non_skipped4", 2F, true);
+		x2.putProperty("non_skipped5", 2L, true);
+		x2.putProperty("non_skipped6", "bla bla bleitor", true);
+		
+		final long x1Hash = x1.hash();
+		final long x2Hash = x2.hash();
+		final long x3Hash = x3.hash();
+		
+		assertFalse("x1 should be distinct to x2", x1Hash == x2Hash);
+		assertFalse("x1 should be distinct to x3", x1Hash == x3Hash);
+		assertFalse("x2 should be distinct to x3", x2Hash == x3Hash);
+		
+		
+		// restore the XMEntities to the initial state and ensure that
+		// passes the tests again
+		x1.remove("non_skipped1");
+		x1.remove("non_skipped2");
+		x1.remove("non_skipped3");
+		x1.remove("non_skipped4");
+		x1.remove("non_skipped5");
+		x1.remove("non_skipped6");
+		
+		x2.remove("non_skipped1");
+		x2.remove("non_skipped2");
+		x2.remove("non_skipped3");
+		x2.remove("non_skipped4");
+		x2.remove("non_skipped5");
+		x2.remove("non_skipped6");
+		
+		x3.remove("non_skipped1");
+		x3.remove("non_skipped2");
+		x3.remove("non_skipped3");
+		x3.remove("non_skipped4");
+		x3.remove("non_skipped5");
+		x3.remove("non_skipped6");
+		
+		testHash();
+		testEquality();
+	}
+	
+
+	public void testEquivalentProjects() {
+		final long x1Hash = gvp1.hash();
+		final long x2Hash = gvp2.hash();
+
+		assertTrue("x1 should be equals to x2", x1Hash == x2Hash);
+	}
+	
+	public void testBenchMark() {
+		long t_ini, t_unmarshal, t_buildXMLEntity, t_computeHash ;
+		t_ini = System.currentTimeMillis();
+		XmlTag tag;
+		try {
+			File f= new File("testdata/big.gvp");
+			tag = (XmlTag) XmlTag.unmarshal(
+					new FileReader(f));
+			t_unmarshal = System.currentTimeMillis() - t_ini;
+			
+			gvp1 = new XMLEntity(tag);
+			t_buildXMLEntity = System.currentTimeMillis() - t_unmarshal- t_ini;
+
+			long hash = gvp1.hash();
+			t_computeHash = System.currentTimeMillis() - t_buildXMLEntity- t_ini;
+			
+			assertTrue("BenchMark ("+f.getAbsolutePath()+" "+f.length()/1024+"Kb):" +
+					"\t-unmarshal time: "+t_unmarshal+" milliseconds\n" +
+					"\t-build XMLEntity time: "+t_buildXMLEntity+" milliseconds\n" +
+					"\t-compute hash time: "+t_computeHash+" milliseconds",t_computeHash < 500);
+			
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestXMLEntity.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringComparator.java	(revision 42196)
@@ -0,0 +1,204 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.text.Collator;
+import java.util.Collections;
+import java.util.Locale;
+import java.util.Vector;
+import java.util.List;
+
+import org.gvsig.utils.StringComparator;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the methods of the class <i>StringComparator</i>
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestStringComparator {
+	/**
+	 * Test method for the TestMathExtension class
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		StringComparator stringComparator = new StringComparator();
+		
+		// Initialize the vector of Strings (for test methods with the parameter Comparator)
+		Vector v = new Vector();
+		v.add("extWMS");
+		v.add("libUI");
+		v.add("extWMS");
+		v.add("libRemoteServices");
+		v.add("extWFS2");
+		v.add("libNomenclatorIGN");
+		v.add("libNomenclatorIGN_GUI");
+		v.add("libIverUtiles");
+		v.add("extWFS2");
+		v.add("EXTWFS2");
+		v.add("extWFS2");
+		v.add("libGDBMS");
+		v.add("libInternationalization");
+		v.add("libFMap");
+		v.add("6");
+		v.add("4");
+		v.add("3");
+		v.add("5");
+		v.add("2");
+		v.add("1");
+		v.add("extWFS2");
+		v.add("libExceptions");
+		v.add("libDriverManager");
+		v.add("libCq CMS for java");
+		v.add("libCorePlugin");
+		v.add("extWFS2");
+		v.add("extAddIDEELayers");
+		v.add("extAlertCClient");
+		v.add("extCAD");
+		v.add("extWFS2");
+		v.add("�and�");
+		v.add("�and�");
+		v.add("extJDBC");
+		v.add("extMyPlugin");
+		v.add("extRasterTools");
+		v.add("extScripting");
+		v.add("extWCS");
+		v.add("extWFS2");
+		v.add("extwfs2");		// If both are null -> true
+		v.add("extWMS");
+		v.add("extWMS");
+		v.add("extWCS");
+		v.add("7");
+		v.add("9");
+		v.add("8");
+		v.add("0");
+		v.add("EXTWCS");
+		v.add("�and�");
+		v.add("extensi�n");
+		v.add("�AND�");
+		v.add("_fwAndami");
+		v.add("abcdefghijklmn�opqrstuvwxyz");
+		v.add("�");
+		v.add("appgvSIG");
+		v.add("la casa");
+		v.add("la monta�a");
+		v.add("la colina");
+		v.add("las abejas");
+		v.add("las nutrias");
+		v.add("las ballenas");
+		v.add("lasa�a");
+		v.add("Vector");
+		v.add("avi�n");
+		v.add("cami�n");
+		v.add("autob�s");
+		
+		// Show the original vector
+		System.out.println("Vector original: " + v.toString() + "\n");
+		
+		// First kind of sort
+		stringComparator.setCaseSensitive(true);
+		List list = v.subList(0, v.size());
+		Collections.sort(list, stringComparator);
+		System.out.println("Ordenaci�n normal con case-sensitive:" + list.toString() + "\n");
+		
+		// Second kind of sort
+		stringComparator.setCaseSensitive(false);
+		list = v.subList(0, v.size());
+		Collections.sort(list, stringComparator);
+		System.out.println("Ordenaci�n normal sin case-sensitive:" + list.toString() + "\n");
+		
+		
+		Collator collator = Collator.getInstance(new Locale("es_ES"));
+		stringComparator.setLocaleRules(stringComparator.new LocaleRules(true, collator));
+		
+		// Third kind of sort
+		stringComparator.setCaseSensitive(true);
+		list = v.subList(0, v.size());
+		Collections.sort(list, stringComparator);
+		System.out.println("Ordenaci�n con reglas locales y con case-sensitive:" + list.toString() + "\n");
+
+		// Fourth kind of sort
+		stringComparator.setCaseSensitive(false);
+		list = v.subList(0, v.size());
+		Collections.sort(list, stringComparator);
+		System.out.println("Ordenaci�n con reglas locales y sin case-sensitive:" + list.toString() + "\n");
+		
+		
+		stringComparator.getLocaleRules().setUseLocaleRules(false);
+		
+		// Fifth kind of sort
+		stringComparator.setCaseSensitive(true);
+		list = v.subList(0, v.size());
+		Collections.sort(list, stringComparator);
+		System.out.println("Ordenaci�n normal con case-sensitive:" + list.toString() + "\n");
+
+		// Sixth kind of sort
+		stringComparator.setCaseSensitive(false);
+		list = v.subList(0, v.size());
+		Collections.sort(list, stringComparator);
+		System.out.println("Ordenaci�n normal sin case-sensitive:" + list.toString() + "\n");
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringComparator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/vectorUtilities/TestVectorUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/vectorUtilities/TestVectorUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/vectorUtilities/TestVectorUtilities.java	(revision 42196)
@@ -0,0 +1,406 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.vectorUtilities;
+
+import java.text.Collator;
+import java.util.Locale;
+import java.util.Vector;
+
+import org.gvsig.utils.StringComparator;
+import org.gvsig.utils.vectorUtilities.VectorUtilities;
+
+
+import junit.framework.TestCase;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the methods of {@link VectorUtilities}
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestVectorUtilities extends TestCase {
+	private static String obj;
+	private static Vector v1 = new Vector();
+	private static Vector v2 = new Vector();
+	private static StringComparator stringComparator;
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		// Initialize the StringComparator
+		stringComparator = new StringComparator();
+
+	    // Set spanish rules and with case sensitive
+		Collator collator = Collator.getInstance(new Locale("es_ES"));		
+		stringComparator.setLocaleRules(stringComparator.new LocaleRules(true, collator));
+		stringComparator.setCaseSensitive(false);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	///// TEST OPERATION: addAlphabeticallyOrdered(Vector, Object) /////
+
+	/**
+	 * A test
+	 */
+	public void test1() {
+		try {
+			// Insert at the beginning
+			obj = new String("First");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 1:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test2() {
+		try {
+			// Insert at the end
+			obj = new String("ZZ����");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 2:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test3() {
+		try {
+			// An insertion
+			obj = new String("�and�");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 3:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test4() {
+		try {
+			// An insertion
+			obj = new String("�AND�");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 4:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test5() {
+		try {
+			// An insertion
+			obj = new String("appgvSIG");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 5:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test6() {
+		try {
+			// An insertion
+			obj = new String("libIverUtiles");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 6:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test7() {
+		try {
+			// An insertion
+			obj = new String("libUI");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 7:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test8() {
+		try {
+			// An insertion
+			obj = new String("libIverUtiles");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 8:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+		
+	/**
+	 * A test
+	 */
+	public void test9() {
+		try {
+			// An insertion
+			obj = new String("extWFS");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v1, obj);
+			
+			System.out.println("Test 9:\nObj: " + obj + "\nResults: " + v1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	///// END TEST OPERATION: addAlphabeticallyOrdered(Vector, Object) /////
+	
+	///// TEST OPERATION: addAlphabeticallyOrdered(Vector, Object, Comparator) /////
+	
+	/**
+	 * A test
+	 */
+	public void test11() {
+		try {
+			// Insert at the beginning
+			obj = new String("First");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 11:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test12() {
+		try {
+			// Insert at the end
+			obj = new String("ZZ����");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 12:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test13() {
+		try {
+			// An insertion
+			obj = new String("�and�");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 13:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test14() {
+		try {
+			// An insertion
+			obj = new String("�AND�");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 14:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test15() {
+		try {
+			// An insertion
+			obj = new String("appgvSIG");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 15:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test16() {
+		try {
+			// An insertion
+			obj = new String("libIverUtiles");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 16:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test17() {
+		try {
+			// An insertion
+			obj = new String("libUI");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 17:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test18() {
+		try {
+			// An insertion
+			obj = new String("libIverUtiles");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 18:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+		
+	/**
+	 * A test
+	 */
+	public void test19() {
+		try {
+			// An insertion
+			obj = new String("extWFS");
+			
+			VectorUtilities.addAlphabeticallyOrdered(v2, obj, stringComparator);
+			
+			System.out.println("Test 19:\nObj: " + obj + "\nResults: " + v2);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	///// END TEST OPERATION: addAlphabeticallyOrdered(Vector, Object, Comparator) /////
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/vectorUtilities/TestVectorUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringUtilities.java	(revision 42196)
@@ -0,0 +1,462 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import org.gvsig.utils.StringUtilities;
+
+import junit.framework.TestCase;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class tests some methods of the 'StringUtilities' class
+ * (Now only tests the methods 'numberOfOccurrencesOfSubStringInString' and 'numberOfOccurrencesOfSubStringInStringUpToPosition')
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestStringUtilities extends TestCase{
+	private String word_String;
+	private String word_subString;
+	private boolean case_Sensitive;
+	private int start_position;
+	private int end_position;
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		word_String = new String();
+		word_subString = new String();
+		case_Sensitive = true; // By default, case sensitive		
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test1() {
+		word_String = "la casa es grande";
+		word_subString = "a";
+		case_Sensitive = true;
+
+		System.out.print("Test1: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test2() {
+		word_String = "la casa es grande";
+		word_subString = "a";
+		case_Sensitive = false;
+
+		System.out.print("Test2: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+
+	/**
+	 * A test
+	 */
+	public void test3() {
+		word_String = "la casa es grande";
+		word_subString = "A";
+		case_Sensitive = true;
+
+		System.out.print("Test3: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+
+	/**
+	 * A test
+	 */
+	public void test4() {
+		word_String = "la casa es grande";
+		word_subString = "A";
+		case_Sensitive = false;
+
+		System.out.print("Test4: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+
+	/**
+	 * A test
+	 */
+	public void test5() {
+		word_String = "la casa es grande";
+		word_subString = "z";
+		case_Sensitive = true;
+
+		System.out.print("Test5: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+
+	/**
+	 * A test
+	 */
+	public void test6() {
+		word_String = "la casa es grande";
+		word_subString = "z";
+		case_Sensitive = false;
+
+		System.out.print("Test6: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test7() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos dos";
+		case_Sensitive = true;
+
+		System.out.print("Test7: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test8() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos Dos";
+		case_Sensitive = true;
+
+		System.out.print("Test8: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test9() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos dos";
+		case_Sensitive = false;
+
+		System.out.print("Test9: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test10() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos Dos";
+		case_Sensitive = false;
+
+		System.out.print("Test10: El n�mero de ocurrencias");
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInString(word_String, word_subString, case_Sensitive));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test11() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos Dos";
+		case_Sensitive = false;
+		start_position = 0;
+		end_position = word_String.length();
+
+		System.out.print("Test11: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test12() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos dos";
+		case_Sensitive = true;
+		start_position = 20;
+		end_position = 72;
+
+		System.out.print("Test12: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+
+	/**
+	 * A test
+	 */
+	public void test13() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos Dos";
+		case_Sensitive = true;
+		start_position = 20;
+		end_position = 72;
+
+		System.out.print("Test13: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test14() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos dos";
+		case_Sensitive = false;
+		start_position = 20;
+		end_position = 72;
+
+		System.out.print("Test14: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test15() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos Dos";
+		case_Sensitive = false;
+		start_position = 20;
+		end_position = 72;
+
+		System.out.print("Test15: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test16() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos dos";
+		case_Sensitive = true;
+		start_position = 21;
+		end_position = 72;
+
+		System.out.print("Test16: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+
+	/**
+	 * A test
+	 */
+	public void test17() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos Dos";
+		case_Sensitive = true;
+		start_position = 21;
+		end_position = 72;
+
+		System.out.print("Test17: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test18() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos dos";
+		case_Sensitive = false;
+		start_position = 21;
+		end_position = 72;
+
+		System.out.print("Test18: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test19() {
+		word_String = "Frasecica: tres mas cuAtro menos dos no es lo mismo que cuatro menos dos mas cinco ni que cuatro menos dos mas dos ni que cuatro menos cuatro mas diez. �Cierto no?";
+		word_subString = "cuatro menos Dos";
+		case_Sensitive = false;
+		start_position = 21;
+		end_position = 72;
+
+		System.out.print("Test19: El n�mero de ocurrencias entre posiciones " + start_position + " y " + end_position);
+		
+		if (case_Sensitive)
+			System.out.print(" con distinci�n min�sculas/may�sculas ");
+		else
+			System.out.print(" sin distinci�n min�sculas/may�sculas ");
+		
+		System.out.println("de '" + word_subString + "' en '" + word_String + " es " + StringUtilities.numberOfOccurrencesOfSubStringInStringBetweenPositions(word_String, word_subString, case_Sensitive, start_position, end_position));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestStringUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/centerComponent/TestCenterComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/centerComponent/TestCenterComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/centerComponent/TestCenterComponent.java	(revision 42196)
@@ -0,0 +1,178 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.centerComponent;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JDesktopPane;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.JPanel;
+
+import org.gvsig.utils.centerComponent.CenterComponent;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the 'centerJComponent' method of the CenterJComponent class
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestCenterComponent {
+	private static JFrame jFrame;
+	private static JDesktopPane jDesktopPane;
+	private static int i;
+	
+	/**
+	 * Test method for the CenterJComponent
+	 * 
+	 * @param args
+	 */
+	public static void main (String args[])
+	{		
+		try {
+			// Creates the main JFrame and configures it for test. Adds a JDesktopPane			
+			jFrame = new JFrame("JFrame: Tests 1, 2 y 3");
+
+			jDesktopPane = new JDesktopPane();
+			jDesktopPane.setPreferredSize(new Dimension(300, 300));
+			jDesktopPane.setSize(new Dimension(300, 300));			
+			jDesktopPane.addMouseListener(new MouseAdapter() {
+
+				/*
+				 *  (non-Javadoc)
+				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+				 */
+				public void mouseClicked(MouseEvent e) {
+					createComponentsForTest();				
+				}
+			});
+			
+			jFrame.getContentPane().add(jDesktopPane);
+			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+			jFrame.pack();
+			jFrame.setVisible(true);
+			
+			// By default: centers the JFrame in the screen
+			Point screenTopLeftCorner = new Point(0, 0);
+			Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
+			Rectangle screenRectangle = new Rectangle(screenTopLeftCorner, screenDimension);
+			CenterComponent.centerComponent(jFrame, screenRectangle);
+//			jFrame.setLocationRelativeTo(null);
+			
+			i = 0;
+			createComponentsForTest();
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}	
+		
+	}
+	
+	/**
+	 * Creates some objects for test
+	 */
+	private static void createComponentsForTest() {
+		
+		// Creates a JInternalFrame with a JPanel, and adds it
+		JInternalFrame jInternalFrame1 = new JInternalFrame("JInternalFrame" + i,
+				true, // resizable
+		        true, // closable
+		        true, // maximizable
+		        false); //iconizable
+		jInternalFrame1.setPreferredSize(new Dimension(200, 200));
+		jInternalFrame1.setSize(new Dimension(200, 200));
+		
+		JPanel jPanel1 = new JPanel();
+		jPanel1.setBackground(Color.BLUE);
+		jInternalFrame1.getContentPane().add(jPanel1);
+		jInternalFrame1.setVisible(true);
+		jDesktopPane.add(jInternalFrame1);				
+
+		// Creates a JDialog with a JPanel, and adds it
+		JDialog jDialog = new JDialog();
+		jDialog.setTitle("JDialog " + i);
+		jDialog.setSize(new Dimension(100, 150));		
+		JPanel jPanel2 = new JPanel();
+		jPanel2.setBackground(Color.GREEN);
+		jDialog.getContentPane().add(jPanel2);			
+		jDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+		jDialog.setVisible(true);
+		
+		// Centers the JInternalFrame
+		CenterComponent.centerComponent(jInternalFrame1, jDesktopPane.getBounds());
+		
+		// Centers the JDialog
+		jDialog.setLocationRelativeTo(jFrame.getContentPane());
+
+		i++;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/centerComponent/TestCenterComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/search/TestBinarySearchUsingFirstCharacters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/search/TestBinarySearchUsingFirstCharacters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/search/TestBinarySearchUsingFirstCharacters.java	(revision 42196)
@@ -0,0 +1,1672 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.search;
+
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Vector;
+
+import org.gvsig.utils.CompareLists;
+import org.gvsig.utils.StringComparator;
+import org.gvsig.utils.search.BinarySearchUsingFirstCharacters;
+
+
+import junit.framework.TestCase;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests the static methods of BinarySearchUsingFirstCharacters
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestBinarySearchUsingFirstCharacters extends TestCase {
+	private static String text;
+	private static Vector v1;
+	private static Vector v2;
+	private static List list;
+	private static List results;
+	private static StringComparator stringComparator;
+//	private static StringComparatorForItems stringComparatorForItems;
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		// Initialize the text
+		text = "";
+		
+		// Initialize the StringComparator
+		stringComparator = new StringComparator();
+
+		// Initialize the StringComparatorForItems
+//		stringComparatorForItems = new StringComparatorForItems();
+
+		// Initialize the vector of Items (for test methods without the parameter Comparator)
+		v1 = new Vector();
+		v1.add(new Item("extWMS"));
+		v1.add(new Item("libUI"));
+		v1.add(new Item("extWMS"));
+		v1.add(new Item("libRemoteServices"));
+		v1.add(new Item("extWFS2"));
+		v1.add(new Item("libNomenclatorIGN"));
+		v1.add(new Item("libNomenclatorIGN_GUI"));
+		v1.add(new Item("libIverUtiles"));
+		v1.add(new Item("extWFS2"));
+		v1.add(new Item("EXTWFS2"));
+		v1.add(new Item("extWFS2"));
+		v1.add(new Item("libGDBMS"));
+		v1.add(new Item("libInternationalization"));
+		v1.add(new Item("libFMap"));
+		v1.add(new Item("libuiDownCase"));
+		v1.add(new Item("6"));
+		v1.add(new Item("4"));
+		v1.add(new Item("3"));
+		v1.add(new Item("5"));
+		v1.add(new Item("2"));
+		v1.add(new Item("1"));
+		v1.add(new Item("extWFS2"));
+		v1.add(new Item("libExceptions"));
+		v1.add(new Item("libDriverManager"));
+		v1.add(new Item("libCq CMS for java"));
+		v1.add(new Item("libCorePlugin"));
+		v1.add(new Item("extWFS2"));
+		v1.add(new Item("extAddIDEELayers"));
+		v1.add(new Item("extAlertCClient"));
+		v1.add(new Item("extCAD"));
+		v1.add(new Item("extWFS2"));
+		v1.add(new Item("�and�"));
+		v1.add(new Item("�and�"));
+		v1.add(new Item("extJDBC"));
+		v1.add(new Item("extMyPlugin"));
+		v1.add(new Item("extRasterTools"));
+		v1.add(new Item("extScripting"));
+		v1.add(new Item("extWCS"));
+		v1.add(new Item("extWFS2"));
+		v1.add(new Item("extwfs2"));
+		v1.add(new Item("extWMS"));
+		v1.add(new Item("extWMS"));
+		v1.add(new Item("extWCS"));
+		v1.add(new Item("7"));
+		v1.add(new Item("9"));
+		v1.add(new Item("8"));
+		v1.add(new Item("0"));
+		v1.add(new Item("EXTWCS"));
+		v1.add(new Item("�and�"));
+		v1.add(new Item("extensi�n"));
+		v1.add(new Item("�AND�"));
+		v1.add(new Item("_fwAndami"));
+		v1.add(new Item("abcdefghijklmn�opqrstuvwxyz"));
+		v1.add(new Item("�"));
+		v1.add(new Item("appgvSIG"));
+		v1.add(new Item("la casa"));
+		v1.add(new Item("la monta�a"));
+		v1.add(new Item("la colina"));
+		v1.add(new Item("las abejas"));
+		v1.add(new Item("las nutrias"));
+		v1.add(new Item("las ballenas"));
+		v1.add(new Item("lasa�a"));
+		v1.add(new Item("Vector"));
+		v1.add(new Item("�e"));
+
+		// Initialize the vector of Strings (for test methods with the parameter Comparator)
+		v2 = new Vector();
+		v2.add("extWMS");
+		v2.add("libUI");
+		v2.add("extWMS");
+		v2.add("libRemoteServices");
+		v2.add("extWFS2");
+		v2.add("libNomenclatorIGN");
+		v2.add("libNomenclatorIGN_GUI");
+		v2.add("libIverUtiles");
+		v2.add("extWFS2");
+		v2.add("EXTWFS2");
+		v2.add("extWFS2");
+		v2.add("libGDBMS");
+		v2.add("libInternationalization");
+		v2.add("libFMap");
+		v2.add("libuiDownCase");
+		v2.add("6");
+		v2.add("4");
+		v2.add("3");
+		v2.add("5");
+		v2.add("2");
+		v2.add("1");
+		v2.add("extWFS2");
+		v2.add("libExceptions");
+		v2.add("libDriverManager");
+		v2.add("libCq CMS for java");
+		v2.add("libCorePlugin");
+		v2.add("extWFS2");
+		v2.add("extAddIDEELayers");
+		v2.add("extAlertCClient");
+		v2.add("extCAD");
+		v2.add("extWFS2");
+		v2.add("�and�");
+		v2.add("�and�");
+		v2.add("extJDBC");
+		v2.add("extMyPlugin");
+		v2.add("extRasterTools");
+		v2.add("extScripting");
+		v2.add("extWCS");
+		v2.add("extWFS2");
+		v2.add("extwfs2");
+		v2.add("extWMS");
+		v2.add("extWMS");
+		v2.add("extWCS");
+		v2.add("7");
+		v2.add("9");
+		v2.add("8");
+		v2.add("0");
+		v2.add("EXTWCS");
+		v2.add("�and�");
+		v2.add("extensi�n");
+		v2.add("�AND�");
+		v2.add("_fwAndami");
+		v2.add("abcdefghijklmn�opqrstuvwxyz");
+		v2.add("�");
+		v2.add("appgvSIG");
+		v2.add("la casa");
+		v2.add("la monta�a");
+		v2.add("la colina");
+		v2.add("las abejas");
+		v2.add("las nutrias");
+		v2.add("las ballenas");
+		v2.add("lasa�a");
+		v2.add("Vector");
+		v2.add("�e");
+		
+		// Sort items of the two vectors
+		Collator collator = Collator.getInstance(new Locale("es_ES"));
+//		stringComparatorForItems.setLocaleRules(stringComparatorForItems.new LocaleRules(true, collator));
+//		Collections.sort(v1.subList(0, v1.size()), stringComparatorForItems);
+		
+		// The algorithm of sort is the default used by Java (that makes some subsets: one for numbers, one for words that starts in big letters,
+		//   another that stats in small letters, another with 'special' characters, etc)
+		Collections.sort(v1.subList(0, v1.size())); 
+		
+		stringComparator.setLocaleRules(stringComparator.new LocaleRules(true, collator));
+		Collections.sort(v2.subList(0, v2.size()), stringComparator);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	///// TEST OPERATION: doSearchConsideringCaseSensitive(String, Vector) /////
+	
+	/**
+	 * A test
+	 */
+	public void test1() {
+		try {
+			text = "";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results
+			results = v1.subList(0, v1.size());
+			
+			System.out.println("Test 1:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test2() {
+		try {
+			text = "ext";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive("ext", v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("extAddIDEELayers"));
+			results.add(new Item("extAlertCClient"));
+			results.add(new Item("extCAD"));
+			results.add(new Item("extJDBC"));
+			results.add(new Item("extMyPlugin"));
+			results.add(new Item("extRasterTools"));
+			results.add(new Item("extScripting"));
+			results.add(new Item("extWCS"));
+			results.add(new Item("extWCS"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extensi�n"));
+			results.add(new Item("extwfs2"));
+
+			System.out.println("\nTest 2:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test3() {
+		try {
+			text = "libUI";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("libUI"));
+			
+			System.out.println("\nTest 3:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test4() {
+		try {
+			text = "extWFS2";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List 4 of results
+			results = new ArrayList();
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));		
+			
+			System.out.println("\nTest 4:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test5() {
+		try {
+			text = "extWFS2a";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results (without elements)
+			results = null;
+			
+			System.out.println("\nTest 5:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test6() {
+		try {
+			text = "�and�";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("�and�"));
+			
+			System.out.println("\nTest 6:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test7() {
+		try {
+			text = "�AND�";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("�AND�"));
+			
+			System.out.println("\nTest 7:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test8() {
+		try {
+			text = "la ";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+	
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("la casa"));
+			results.add(new Item("la colina"));
+			results.add(new Item("la monta�a"));
+			
+			System.out.println("\nTest 8:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test9() {
+		try {
+			text = "livUI";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results (without elements)
+			results = null;
+			
+			System.out.println("\nTest 9:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test9_1() {
+		try {
+			text = "libui";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results (without elements)
+			results = new ArrayList();
+			results.add(new Item("libuiDownCase"));
+			
+			System.out.println("\nTest 9_1:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test10() {
+		try {
+			text = "�";
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v1);
+			
+			// List of results (without elements)
+			results = new ArrayList();
+			results.add(new Item("�"));
+			
+			System.out.println("\nTest 10:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	///// END TEST OPERATION: doSearchConsideringCaseSensitive(String, Vector) /////
+	
+	///// TEST OPERATION: doSearchWithoutConsideringCaseSensitive(String, Vector) /////
+	
+	/**
+	 * A test
+	 */
+	public void test11() {
+		try {
+			text = "";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = v1.subList(0, v1.size());
+				
+			System.out.println("\nTest 11:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test12() {
+		try {
+			text = "ext";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("extAddIDEELayers"));
+			results.add(new Item("extAlertCClient"));
+			results.add(new Item("extCAD"));
+			results.add(new Item("extJDBC"));
+			results.add(new Item("extMyPlugin"));
+			results.add(new Item("extRasterTools"));
+			results.add(new Item("extScripting"));
+			results.add(new Item("extWCS"));
+			results.add(new Item("extWCS"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extWMS"));
+			results.add(new Item("extensi�n"));
+			results.add(new Item("extwfs2"));
+							
+			System.out.println("Test 12:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test13() {
+		try {
+			text = "libUI";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("libUI"));
+			results.add(new Item("libuiDownCase"));
+					
+			System.out.println("Test 13:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test14() {
+		try {
+			text = "extWFS2";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extWFS2"));
+			results.add(new Item("extwfs2"));
+
+			System.out.println("Test 14:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test15() {
+		try {
+			text = "extWFS2a";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results (without elements)
+			results = null;
+							
+			System.out.println("Test 15:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test16() {
+		try {
+			text = "�";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("�e"));
+			results.add(new Item("�"));
+					
+			System.out.println("Test 16:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test17() {
+		try {
+			text = "La ";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("la casa"));
+			results.add(new Item("la colina"));
+			results.add(new Item("la monta�a"));
+
+			System.out.println("Test 17:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test18() {
+		try {
+			text = "livUI";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = null;
+
+			System.out.println("Test 18:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test18_1() {
+		try {
+			text = "libui";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("libUI"));
+			results.add(new Item("libuiDownCase"));
+
+			System.out.println("Test 18_1:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test19() {
+		try {
+			text = "�AND�";
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v1);
+			
+			// List of results
+			results = new ArrayList();
+			results.add(new Item("�AND�"));
+			results.add(new Item("�and�"));
+			results.add(new Item("�and�"));
+			results.add(new Item("�and�"));
+
+			System.out.println("Test 19:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results)) {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> OK");
+			} else {
+				System.out.println("Op: doSearchIgnoringCaseSensitive(String, Vector) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	///// END TEST OPERATION: doSearchWithoutConsideringCaseSensitive(String, Vector) /////
+	
+	///// TEST OPERATION: doSearchConsideringCaseSensitive(String, Vector, Comparator) /////
+	/**
+	 * A test
+	 */
+	public void test21() {
+		try {
+			text = "";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = v2.subList(0, v2.size());
+
+			System.out.println("Test 21:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test22() {
+		try {
+			text = "ext";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("extAddIDEELayers");
+			results.add("extAlertCClient");
+			results.add("extCAD");
+			results.add("extensi�n");
+			results.add("extJDBC");
+			results.add("extMyPlugin");
+			results.add("extRasterTools");
+			results.add("extScripting");
+			results.add("extWCS");
+			results.add("extWCS");
+			results.add("extwfs2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWMS");
+			results.add("extWMS");
+			results.add("extWMS");
+			results.add("extWMS");
+
+						
+			System.out.println("\nTest 22:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test23() {
+		try {
+			text = "libUI";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("libUI");
+						
+			System.out.println("\nTest 23:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test24() {
+		try {
+			text = "extWFS2";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List 4 of results
+			results = new ArrayList();
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");		
+						
+			System.out.println("\nTest 24:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test25() {
+		try {
+			text = "extWFS2a";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results (without elements)
+			results = null;
+						
+			System.out.println("\nTest 25:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test26() {
+		try {
+			text = "�and�";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("�and�");
+						
+			System.out.println("\nTest 26:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test27() {
+		try {
+			text = "�AND�";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("�AND�");
+						
+			System.out.println("\nTest 27:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test28() {
+		try {
+			text = "la ";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("la casa");
+			results.add("la colina");
+			results.add("la monta�a");
+
+			System.out.println("\nTest 28:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test29() {
+		try {
+			text = "livUI";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results (without elements)
+			results = null;
+						
+			System.out.println("\nTest 29:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		 } catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test29_1() {
+		try {
+			text = "libui";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator); //<- Esta b�squeda
+			
+			// List of results (without elements)
+			results = new ArrayList();
+			results.add("libuiDownCase");
+						
+			System.out.println("\nTest 29_1:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		 } catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test30() {
+		try {
+			text = "�";
+			stringComparator.setCaseSensitive(true);
+			list = BinarySearchUsingFirstCharacters.doSearchConsideringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results (without elements)
+			results = new ArrayList();
+			results.add("�");
+						
+			System.out.println("\nTest 30:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compare(list, results, stringComparator)) {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		 } catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	///// END TEST OPERATION: doSearchConsideringCaseSensitive(String, Vector, Comparator) /////
+
+	///// TEST OPERATION: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) /////
+	
+	/**
+	 * A test
+	 */
+	public void test31() {
+		try {
+			text = "";
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = v2.subList(0, v2.size());
+
+			System.out.println("\nTest 31:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+			
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test32() {
+		try {
+			text = "ext";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+		
+			// List of results
+			results = new ArrayList();
+			results.add("extAddIDEELayers");
+			results.add("extAlertCClient");
+			results.add("extCAD");
+			results.add("extensi�n");
+			results.add("extJDBC");
+			results.add("extMyPlugin");
+			results.add("extRasterTools");
+			results.add("extScripting");
+			results.add("extWCS");
+			results.add("extWCS");
+			results.add("EXTWCS");
+			results.add("extwfs2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("EXTWFS2");
+			results.add("extWMS");
+			results.add("extWMS");
+			results.add("extWMS");
+			results.add("extWMS");
+							
+			System.out.println("Test 32:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test33() {
+		try {
+			text = "LIBui";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+				
+			// List of results
+			results = new ArrayList();
+			results.add("libUI");
+			results.add("libuiDownCase");
+			
+			System.out.println("Test 33:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test34() {
+		try {
+			text = "extWFS2";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("extwfs2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("extWFS2");
+			results.add("EXTWFS2");
+
+			System.out.println("Test 34:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test35() {
+		try {
+			text = "extWFS2a";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results (without elements)
+			results = null;
+							
+			System.out.println("Test 35:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test36() {
+		try {
+			text = "�aNd�";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("�and�");
+			results.add("�and�");
+			results.add("�and�");
+			results.add("�AND�");
+					
+			System.out.println("Test 36:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test37() {
+		try {
+			text = "La ";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("la casa");
+			results.add("la colina");
+			results.add("la monta�a");
+
+			System.out.println("Test 37:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test38() {
+		try {
+			text = "livUI";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = null;
+
+			System.out.println("Test 38:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * A test
+	 */
+	public void test38_1() {
+		try {
+			text = "libui";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("libUI");
+			results.add("libuiDownCase");
+
+			System.out.println("Test 38_1:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * A test
+	 */
+	public void test39() {
+		try {
+			text = "�";		
+			stringComparator.setCaseSensitive(false);
+			list = BinarySearchUsingFirstCharacters.doSearchIgnoringCaseSensitive(text, v2, stringComparator);
+			
+			// List of results
+			results = new ArrayList();
+			results.add("�");
+			results.add("�e");
+
+			System.out.println("Test 38:\nText: " + text + "\nResults of the search: " + list + "\nResults expected: " + results);
+				
+			if (CompareLists.compareIgnoringCaseSensitive(list, results, stringComparator)) {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> OK");
+			} else {
+				System.out.println("Op: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) -> FAILED");
+				fail();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}	
+	
+	///// END TEST OPERATION: doSearchWithoutConsideringCaseSensitive(String, Vector, Comparator) /////
+
+	///// AUXILIAR CLASS THAT REPRESENTS AN ITEM WITH AN STRING VALUE AND IMPLEMENTING THE COMPARABLE INTERFACE /////
+	
+	/**
+	 * This class is used for represent an item, with an string value, and implementing the interface Comparable for allow searches.
+	 * 
+	 * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+	 */
+	private static class Item implements Comparable {
+		String value;
+
+		/**
+		 * Default contructor with 1 parameter
+		 * 
+		 * @param v1 Text value
+		 */
+		public Item (String v) {
+			value = v;
+		}
+		
+		/*
+		 * (non-Javadoc)
+		 * @see java.lang.Object#toString()
+		 */
+		public String toString() {
+			return value;
+		}
+
+		/*
+		 *  (non-Javadoc)
+		 * @see java.lang.Comparable#compareTo(java.lang.Object)
+		 */
+		public int compareTo(Object o) {
+			if (!(o instanceof Item))
+				throw new ClassCastException("Se esperaba un objeto de tipo Item.");
+
+			return this.value.compareTo(o.toString());
+		}
+	}
+	
+	///// AUXILIAR CLASS THAT REPRESENTS AN ITEM WITH AN STRING VALUE AND IMPLEMENTING THE COMPARABLE INTERFACE /////
+	
+    ///// END AUXILIAR CLASS THAT HAS A METHOD FOR COMPARE TWO ITEMS /////
+
+	/**
+	 * Compares two items (with String value) alphabetically
+	 *
+	 * @author Pablo Piqueras Bartolom�
+	 */
+	public class StringComparatorForItems implements Comparator {
+		private boolean caseSensitive = true;
+		private LocaleRules localeRules = null;
+
+	    /**
+	     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+	     */
+	    public int compare(Object o1, Object o2) {
+	        String s1 = ((Item) o1).toString();
+	        String s2 = ((Item) o2).toString();
+
+	        // If localeRules is null -> use the default rules
+	        if (localeRules == null) {
+	        	if (caseSensitive) {
+	        		return s1.compareTo(s2);
+	        	}
+	        	else {
+	        		return s1.compareToIgnoreCase(s2);
+	        	}
+	        }
+	        else {
+	        	if (localeRules.isUseLocaleRules()) {
+	        		Collator collator = localeRules.getCollator();
+	        		
+	        		if (caseSensitive) {
+	        			return collator.compare(s1, s2);
+	        		}
+	        		else {
+	        			return collator.compare(s1.toLowerCase(), s2.toLowerCase());
+	        		}
+	        	}
+	        	else {
+	            	if (caseSensitive) {
+	            		return s1.compareTo(s2);
+	            	}
+	            	else {
+	            		return s1.compareToIgnoreCase(s2);
+	            	}
+	        	}
+	        }
+	    }
+
+	    /**
+	     * Returns if the comparator is sensitive to small and big letters
+	     *
+	     * @return
+	     */
+	    public boolean isCaseSensitive() {
+	        return caseSensitive;
+	    }
+
+	    /**
+	     * Establece la sensibilidad del comparador a las mayusculas y minusculas
+	     *
+	     * @param b
+	     */
+	    public void setCaseSensitive(boolean b) {
+	        caseSensitive = b;
+	    }
+	    
+	    /**
+	     * Gets an object with the information for use the locale rules in comparation between strings. <br>
+	     * <ul>
+	     * <li>A boolean value -> if want or not use the locale rules</li>
+	     * <li>A reference to the locale rules</li>
+	     * </ul>
+	     * 
+	     * @return @see LocaleRules
+	     */
+	    public LocaleRules getLocaleRules() {
+	    	return localeRules;
+	    }    
+	    /**
+	     * Sets an object with the information for use the locale rules in comparation between strings. <br>
+	     * <ul>
+	     * <li>A boolean value -> if want or not use the locale rules</li>
+	     * <li>A reference to the locale rules</li>
+	     * </ul>
+	     * 
+	     * @param @see LocaleRules
+	     */
+	    public void setLocaleRules(LocaleRules locRules) {
+	    	localeRules = locRules;
+	    }
+	    
+	    /**
+	     * Represents the information needed by <i>StringComparator</i> for use or not locale-sensitive String comparison-rules in the <b><i>compare</i></b> method
+	     * 
+	     * @author Pablo Piqueras Bartolom�
+	     */
+	    public class LocaleRules {
+	    	 private boolean useLocaleRules;
+	    	 private Collator _collator;
+	    	 
+	    	 /**
+	    	  * Default constructor without parameters
+	    	  */
+	    	 public LocaleRules() {
+	    		 useLocaleRules = false;
+	    		 _collator = null;
+	    	 }
+	    	 
+	    	 /**
+	    	  * Default constructor with two parameters
+	    	  * 
+	    	  * @param b Use locale rules
+	    	  * @param collator A reference to an object configurated for locale-sensitive String comparison
+	    	  */
+	    	 public LocaleRules(boolean b, Collator collator) {
+	    		 useLocaleRules = b;
+	    		 _collator = collator;
+	    	 }
+	    	 
+	 		/**
+	 		 * Gets the value of the inner attribute <i>_collator</i>
+	 		 * 
+	 		 * @return Returns A reference to an object configurated for locale-sensitive String comparison
+	 		 */
+	 		public Collator getCollator() {
+	 			return _collator;
+	 		}
+
+	 		/**
+	 		 * Sets a value to the inner attribute <i>_collator</i>
+	 		 * 
+	 		 * @param collator A reference to an object configurated for locale-sensitive String comparison
+	 		 */
+	 		public void setCollator(Collator collator) {
+	 			this._collator = collator;
+	 		}
+
+			/**
+			 * Gets the value of the inner attribute <i>useLocaleRules</i>
+			 * 
+			 * @return Returns the useLocaleRules.
+			 */
+			public boolean isUseLocaleRules() {
+				return useLocaleRules;
+			}
+
+			/**
+			 * Sets a value to the inner attribute <i>useLocaleRules</i>
+			 * 
+			 * @param useLocaleRules The useLocaleRules to set.
+			 */
+			public void setUseLocaleRules(boolean useLocaleRules) {
+				this.useLocaleRules = useLocaleRules;
+			}
+	    }
+	}
+	///// END AUXILIAR CLASS THAT HAS A METHOD FOR COMPARE TWO ITEMS /////
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/search/TestBinarySearchUsingFirstCharacters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/DoubleUtilitiesTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/DoubleUtilitiesTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/DoubleUtilitiesTest.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import org.gvsig.utils.DoubleUtilities;
+
+import junit.framework.TestCase;
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: DoubleUtilitiesTest.java 29631 2009-06-29 16:56:19Z jpiera $
+ * $Log$
+ * Revision 1.2  2006-11-06 07:29:59  jaume
+ * organize imports
+ *
+ * Revision 1.1  2006/05/16 13:02:41  jorpiell
+ * Se ha a�adido la clase DoubleUtiles, donde ha un metodo para limitar el tama�o de los decimales de un double y para quitar los "puntos" de la parte entera
+ *
+ *
+ */
+/**
+ * Para probar los double utilities
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class DoubleUtilitiesTest extends TestCase {
+	public void testDouble(){
+		double numero = 1.36645345645;
+		numero = DoubleUtilities.format(numero,".".charAt(0),4);
+		assertEquals(numero,1.3665,0.00000000001);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/DoubleUtilitiesTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestMathExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestMathExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestMathExtension.java	(revision 42196)
@@ -0,0 +1,123 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import org.gvsig.utils.MathExtension;
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Tests for the MathExtension class
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestMathExtension {
+	/**
+	 * Test method for the TestMathExtension class
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args)
+	{
+		// Test 1
+		System.out.println("Test 1 -> log2(1)");
+		showResultState(0, MathExtension.log2(1), 1);
+
+		// Test 2
+		System.out.println("Test 2 -> log2(16)");
+		showResultState(4, MathExtension.log2(16), 2);
+
+		// Test 3
+		System.out.println("Test 3 -> log2Integer(15)");
+		showResultState(3, MathExtension.log2Integer(15), 3);
+		
+		// Test 4
+		System.out.println("Test 4 -> log2Integer(64)");
+		showResultState(6, MathExtension.log2Integer(64), 4);
+		
+		// Test 5
+		System.out.println("Test 5 -> logX(e2, e6)");
+		showResultState(3, MathExtension.logX(Math.pow(Math.E, 2), Math.pow(Math.E, 6)), 5);
+		
+		// Test 6
+		System.out.println("Test 6 -> logXInteger(5, 137.43)");
+		showResultState(3, MathExtension.logXInteger(5, 137.43), 6);
+
+		
+		// There might be more tests
+		
+	}
+	
+	/**
+	 * Indicates if the result of the current test has been successfull or not
+	 * 
+	 * @param correct The correct result
+	 * @param result The result of the operation
+	 * @param testNumber The numer of the current test
+	 */
+	private static void showResultState(double correct, double result, int testNumber) {
+		if (correct == result)
+			System.out.println("Test " + testNumber + " OK    (Result: " + result + ")");
+		else
+			System.out.println("Test " + testNumber + " FAILED    (Result: " + result + ")");
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/java/org/gvsig/utils/TestMathExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+
+	<category name="org.gvsig.utils">
+		<priority value="DEBUG" />
+	</category>
+
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.tools.IverUtilesLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/resources/images/up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/resources/images/up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/resources/images/down.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/resources/images/down.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/IverUtilesLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/IverUtilesLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/IverUtilesLibrary.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.tools;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.utils.swing.jcomboServer.ServerData;
+
+public class IverUtilesLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(IverUtilesLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		// Nothing to do
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		ServerData.registerPersistence();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/IverUtilesLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGeneratorFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGeneratorFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGeneratorFactory.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.tools.backup;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+ 
+/**
+ * <p>Generic factory that creates a {@link BackupGenerator BackupGenerator} that performs a particular
+ *  kind of backup.</p>
+ *
+ * @author Jose Ignacio Yarza (jiyarza@opensistemas.com)
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public abstract class BackupGeneratorFactory {
+	/**
+	 * <p>Gets an instance of a backup generator that performs a particular kind of backup.</p>
+	 * 
+	 * @return an instance of a backup generator that performs a particular kind of backup
+	 */
+	public abstract BackupGenerator getBackupGenerator();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGeneratorFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGeneratorFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGeneratorFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGeneratorFactory.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.tools.backup;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * <p>Factory that gets a {@link DefaultBackupGenerator DefaultBackupGenerator} as a particular version of
+ *  backup generator.</p>
+ *
+ * @author Jose Ignacio Yarza (jiyarza@opensistemas.com)
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class DefaultBackupGeneratorFactory extends BackupGeneratorFactory {
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.utiles.backup.BackupGeneratorFactory#getBackupGenerator()
+	 */
+	public BackupGenerator getBackupGenerator() {		
+		return new DefaultBackupGenerator();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGeneratorFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGenerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGenerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGenerator.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.tools.backup;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.io.File;
+
+import org.gvsig.tools.backup.exceptions.BackupException;
+
+
+/**
+ * <p>A tagging interface that all file backups must implement.</p>
+ *
+ * @author Jose Ignacio Yarza (jiyarza@opensistemas.com)
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public interface BackupGenerator {
+	/**
+	 * <p>Performs a backup of <code>source</code>.</p>
+	 * 
+	 * @param source the source file
+	 */
+	public void backup(File source) throws BackupException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/BackupGenerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGenerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGenerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGenerator.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.tools.backup;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */ 
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.nio.channels.FileChannel;
+
+import org.gvsig.tools.backup.exceptions.BackupException;
+
+
+/**
+ * <p>Performs a backup of a file, into another file at the same path (directory), with the file extension 
+ *  changed to <i>.bak</i>.</p>
+ *
+ * @author Jose Ignacio Yarza (jiyarza@opensistemas.com)
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class DefaultBackupGenerator implements BackupGenerator {
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.utiles.backup.BackupGenerator#backup(java.io.File)
+	 */
+	public void backup(File source) throws BackupException {
+		try {
+			int index = source.getAbsolutePath().lastIndexOf(".");
+
+			if (index == -1)
+				return;
+
+			File dest = new File(source.getAbsolutePath().substring(0, index) + ".bak");
+
+	        // Create channel on the source
+	        FileChannel srcChannel = new FileInputStream(source).getChannel();
+
+	        // Create channel on the destination
+	        FileChannel dstChannel = new FileOutputStream(dest).getChannel();
+
+	        // Copy file contents from source to destination
+	        dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
+
+	        // Close the channels
+	        srcChannel.close();
+	        dstChannel.close();
+	    } catch (Exception ex) {
+	    	throw new BackupException(ex.getMessage(), ex, source);
+	    }
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/DefaultBackupGenerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/exceptions/BackupException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/exceptions/BackupException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/exceptions/BackupException.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.tools.backup.exceptions;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+import java.io.File;
+
+/**
+ * <p>Exception to report that a backup process has failed.</p>
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class BackupException extends Exception {
+	private static final long serialVersionUID = -2846421984617208883L;
+
+	/**
+	 * <p>The source file to be backup.</p>
+	 */
+	protected File source;
+
+	/**
+	 * <p>Constructs a new backup exception with the specified detail message and cause.</p>
+	 * 
+	 * @param message the detail message (which is saved for later retrieval by the <code>getMessage()</code> method).
+	 * @param cause the cause (which is saved for later retrieval by the <code>getCause()</code> method). (A <code>null</code>
+	 *  value is permitted, and indicates that the cause is nonexistent or unknown.)
+	 * @param source the file from that was going to be done a backup
+	 * 
+	 * @see Exception#Exception(String, Throwable)
+	 */
+	public BackupException(String message, Throwable cause, File source) {
+		super(message, cause);
+		this.source = source;
+	}
+
+	/**
+	 * <p>Gets the source file to be backup.</p> 
+	 * 
+	 * @return the source file
+	 */
+	public File getSource() {
+		return source;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/tools/backup/exceptions/BackupException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NotExistInXMLEntity.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NotExistInXMLEntity.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NotExistInXMLEntity.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+
+public class NotExistInXMLEntity extends RuntimeException {
+	
+	public NotExistInXMLEntity(){
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NotExistInXMLEntity.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Queue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Queue.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Queue.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: Queue.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-03-14 19:23:07  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils;
+import java.util.Vector;
+
+	/**
+	 * A simple FIFO queue class which causes the calling thread to wait if the
+	 * queue is empty and notifies threads that are waiting when it is not
+	 * empty.
+	 * 
+	 * @author Anil V (akv@eng.sun.com)
+	 */
+	public class Queue {
+	    private Vector vector = new Vector();
+
+	    /**
+		 * Put the object into the queue.
+		 * 
+		 * @param object
+		 *            the object to be appended to the queue.
+		 */
+	    public synchronized void put(Object object) {
+	        vector.addElement(object);
+	        notify();
+	    }
+
+	    /**
+		 * Pull the first object out of the queue. Wait if the queue is empty.
+		 */
+	    public synchronized Object pull() {
+	        while (isEmpty())
+	            try {
+	                wait();
+	            } catch (InterruptedException ex) {
+	            }
+	        return get();
+	    }
+
+	    /**
+		 * Get the first object out of the queue. Return null if the queue is
+		 * empty.
+		 */
+	    public synchronized Object get() {
+	        Object object = peek();
+	        if (object != null)
+	            vector.removeElementAt(0);
+	        return object;
+	    }
+
+	    /**
+		 * Peek to see if something is available.
+		 */
+	    public Object peek() {
+	        if (isEmpty())
+	            return null;
+	        return vector.elementAt(0);
+	    }
+
+	    /**
+		 * Is the queue empty?
+		 */
+	    public boolean isEmpty() {
+	        return vector.isEmpty();
+	    }
+
+	    /**
+		 * How many elements are there in this queue?
+		 */
+	    public int size() {
+	        return vector.size();
+	    }
+	}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Queue.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistenceObject.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistenceObject.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistenceObject.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+/**
+ * Add Object before call setXMLEntity.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface IPersistenceObject extends IPersistence {
+    void setObject(Object obj);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistenceObject.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/MathExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/MathExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/MathExtension.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Some more mathematical functions that 'java.lang.Math' doesn't have:
+ * - Logarithm operations: log2, log2Integer, logX, logXInteger
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public final class MathExtension {
+	
+	/**
+	 * 2-base logarithm of a
+	 * @param a The value to do the calculations
+	 * @return Logarithm in 2 base of 'a'
+	 */
+	public static double log2(double a) {
+		return (Math.log(a) / Math.log(2));
+	}
+	
+	/**
+	 * 2-base logarithm of a, but the result doesn't have decimals (approximated to the integer number most near by below)
+	 * @param a The value to do the calculations
+	 * @return Logarithm in 2 base of 'a', as an integer
+	 */
+	public static int log2Integer(double a) {
+		return (int) Math.floor(log2(a));
+	}
+	
+	/**
+	 * X-base logarithm of a
+	 * @param a The value to do the calculations
+	 * @return Logarithm in X base of 'a'
+	 */
+	public static double logX(double x_base, double a) {
+		return (Math.log(a) / Math.log(x_base));
+	}
+	
+	/**
+	 * X-base logarithm of a, but the result doesn't have decimals (approximated to the integer number most near by below)
+	 * @param a The value to do the calculations
+	 * @return Logarithm in X base of 'a', as an integer
+	 */
+	public static int logXInteger(double x_base, double a) {
+		return (int) Math.floor(logX(x_base, a));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/MathExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionBuilder.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.extensionPointsOld;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+/**
+ * Clase de utilidad usada para crear las extensiones.
+ * 
+ * Esta clase presenta un par de metodos estaticos para permitir crear un objeto
+ * a partir de una clase.
+ * 
+ * @author jjdelcerro
+ * @deprecated @see org.gvsig.tools.extensionPoint.ExtensionBuilder
+ */
+public abstract class ExtensionBuilder implements IExtensionBuilder {
+
+	/**
+	 * Crea un objeto de la clase indicada.
+	 * 
+	 * @param cls Clase de la que crear la instancia
+	 * @return
+	 * 
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 */
+	public static Object create(Class cls) throws InstantiationException, IllegalAccessException {
+		Object obj = null;
+
+		if( cls == null ) {
+			return null;
+		}
+		obj = cls.newInstance();
+		return obj;
+	}
+	
+	/**
+	 * Crea un objeto de la clase indicada.
+	 * 
+	 * Crea un objeto de la clase indicada pasandole al constructor
+	 * los argumentos indicados en <i>args</i>.
+	 * <br>
+	 * @param cls Clase de la que crear la instancia
+	 * @param args Argumentos que pasar al constructor.
+	 * @return
+	 * 
+	 * @throws SecurityException
+	 * @throws NoSuchMethodException
+	 * @throws IllegalArgumentException
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 * @throws InvocationTargetException
+	 */
+	public static Object create(Class cls, Object [] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+		Object obj = null;
+		Constructor create = null;
+		Class [] types = new Class[args.length];
+		
+		if( cls == null ) {
+			return null;
+		}
+		for( int n=0 ; n<args.length ; n++ ) {
+			Object arg = args[n]; 
+			types[n] = arg.getClass();
+		}
+		create = cls.getConstructor(types);
+		obj = create.newInstance(args);
+		return obj;
+	}
+	/**
+	 * Crea un objeto de la clase indicada.
+	 * 
+	 * Crea un objeto de la clase indicada pasandole al constructor
+	 * un como argumento un Map..
+	 * <br>
+	 * @param cls Clase de la que crear la instancia
+	 * @param args Map a pasar como argumento al constructor.
+	 * @return
+	 * 
+	 * @throws SecurityException
+	 * @throws NoSuchMethodException
+	 * @throws IllegalArgumentException
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 * @throws InvocationTargetException
+	 */
+	public static Object create(Class cls, Map args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+		Object obj = null;
+		Constructor create = null;
+		Class [] types = new Class[1];
+		Object [] argsx = new Object[1];
+		
+		if( cls == null ) {
+			return null;
+		}
+		types[0] = Map.class;
+		argsx[0] = args;
+		create = cls.getConstructor(types);
+		obj = create.newInstance(argsx);
+		return obj;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionBuilder.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoint.java	(revision 42196)
@@ -0,0 +1,270 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.extensionPointsOld;
+
+import java.lang.reflect.InvocationTargetException;
+import java.security.KeyException;
+import java.util.*;
+
+/**
+ * Esta clase permite registrar extensiones para un punto de extension. <br>
+ * <br>
+ * La clase se comporta como un Map que mantiene el orden de insercion de los
+ * elementos, para que puedan ser recorridos en ese orden. <br>
+ * Ademas de registrar las extensiones para un punto de extension, presenta
+ * metodos para facilitar la creacion de la extension. <br>
+ * A la hora de registrar una extension, mediante el metodo <i>put</i>, podremos
+ * suministrarle una clase o una instancia que implemente el interface
+ * IExtensionBuilder. Si le suministramos una clase, cuando queramos crear la
+ * extension mediante el metodo <i>create</i>, se creara una instancia de la
+ * clase y se retornara. Si lo que se suministro fue una instancia que
+ * implementa el interface IExtensionBuilder, se invocara al metodo
+ * <i>create</i> de esta para crear la extension. <br>
+ * 
+ * @author jjdelcerro
+ * 
+ * @deprecated @see org.gvsig.tools.extensionPoint.ExtensionPoint
+ */
+public class ExtensionPoint extends LinkedHashMap {
+
+    private static final long serialVersionUID = -5908427725588553371L;
+
+	private String name;
+	private String description;
+	private Hashtable extensionDescriptions = new Hashtable();
+	private Hashtable aliases = new Hashtable();
+
+	/**
+	 * Construye un punto de extension.
+	 * <br>
+	 * @param extensionPointName Nombre del punto de extension.
+	 */
+	public ExtensionPoint(String extensionPointName) {
+		this.name = extensionPointName;
+	}
+	
+	/**
+	 * Construye un punto de extension.
+	 * <br>
+	 * @param extensionPointName Nombre del punto de extension
+	 * @param description Descripcion del punto de extension
+	 */
+	public ExtensionPoint(String extensionPointName, String description) {
+		this.name = extensionPointName;
+		this.description = description;
+	}
+	
+	/**
+	 * Retorna el nombre de punto de extension.
+	 * <br>
+	 * @return Nombre del punto de extension
+	 */
+	public String getName() {
+		return this.name;
+	}
+	
+	/**
+	 * Retorna la descripcion asociada al punto de extension.
+	 * <br>
+	 * @return descripcion del punto de extension
+	 */
+	public String getDescription() {
+		return this.description;
+	}
+	
+	/**
+	 * Asocia una descripcion al punto de extension.
+	 * <br>
+	 * 
+	 * @param description
+	 */
+	public void setDescripcion(String description) {
+		this.description = description;
+	}
+	
+	/**
+	 * Retorna la descripcion asociada a una extension.
+	 * <br>
+	 * @param key 
+	 * <br>
+	 * @return descripcion del punto de extension
+	 */
+	public String getExtensionDescription(String key) {
+		return (String)this.extensionDescriptions.get(key);
+	}
+	
+	/**
+	 * Asocia una descripcion a una extension registrada.
+	 * <br>
+	 * 
+	 * @param key Nombre de la extension
+	 * @param description
+	 */	
+	public void setExtensionDescription(String key,String description) {
+		if (this.containsKey(key)) {
+			this.extensionDescriptions.put(key,description);
+		}
+	}
+	
+	/**
+	 * A�ade una extension con su descripcion asociada
+	 * 
+	 * @param key clave de la extension
+	 * @param decription descripcion de la extension
+	 * @param value extension
+	 */
+	
+	public Object put(String key, String description,Object value) {		
+		this.extensionDescriptions.put(key,description);
+		return super.put(key,value);
+	}
+
+	/**
+	 * A�ade una extension antes de la indicada con beforeKey,
+	 * con su descripcion asociada
+	 * 
+	 * @param key clave de la extension
+	 * @param decription descripcion de la extension
+	 * @param value extension
+	 */
+	
+	public Object insert(String beforeKey, String key, String description,Object value) {		
+		boolean mover = false;
+		Map tmp = new LinkedHashMap();
+
+		for (Iterator i = this.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry e = (Map.Entry)i.next();
+            if ( e.getKey().equals(beforeKey) ) {
+            	mover = true;
+            }
+            if( mover ) {
+            	tmp.put(e.getKey(), e.getValue());
+            }
+        }
+		for (Iterator i = tmp.keySet().iterator(); i.hasNext(); ) {
+			String key1 = (String)i.next();
+			this.remove(key1);
+		}
+		if ( description!= null ) {
+			this.extensionDescriptions.put(key,description);
+		}
+		Object returnValue = super.put(key,value);
+		this.putAll(tmp);
+		return returnValue;
+	}
+	
+	/**
+	 * Crea una extension.
+	 * <br>
+	 * Dado un nombre de extension asociada a este punto de extension, crea
+	 * el objeto registrado para manejar la extension.
+	 * <br>
+	 * Si el objeto registrado para esa extension implementa el interface
+	 * <i>IExtensionBuilder</i>, se invoca al metodo create para crear la instancia
+	 * de la extension. 
+	 * <br>
+	 * Si no implementa este interface, debera ser una clase, y se creara una
+	 * instancia de esa clase.
+	 * <br>
+	 * @param name Nombre de la extension a crear.
+	 * @return La instancia creada de la extension.
+	 * 
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 */
+	public Object create(String name) throws InstantiationException, IllegalAccessException {
+		Object extension = this.get(name);
+		if (extension == null) {
+			extension = this.get(this.aliases.get(name));
+		}
+		
+		if( extension instanceof IExtensionBuilder ) {
+			return ((IExtensionBuilder)extension).create();
+		}
+		return ExtensionBuilder.create((Class) extension);
+	}
+	
+	/**
+	 * Crea una extension.
+	 * <br>
+	 * Dado un nombre de extension asociada a este punto de extension, crea
+	 * el objeto registrado para manejar la extension.
+	 * <br>
+	 * A la hora de crear la instancia de la extension, le pasara los parametros
+	 * indicados en <i>args</i>.
+	 * <br>
+	 * Debido a que los argumentos se pasan como un array de objetos, no es posible
+	 * pasar al constructor de la extension parametros de tipos basicos como <i>int</i>
+	 * o <i>long</i>. Se deberan pasar como objetos y existir un constructor de la clase
+	 * que los pueda recibir de esta manera.
+	 * <br>
+	 * @param name Nombre de la extension a crear.
+	 * @param args Array de objetos a pasar como parametros en la construccion de la instancia de la extension.
+	 * @return La instancia creada de la extension.
+	 * 
+	 * @throws SecurityException
+	 * @throws NoSuchMethodException
+	 * @throws IllegalArgumentException
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 * @throws InvocationTargetException
+	 */
+	public Object create(String name, Object [] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+		Object extension = this.get(name);
+		if (extension == null) {
+			extension = this.get(this.aliases.get(name));
+		}
+		
+		if( extension instanceof IExtensionBuilder ) {
+			return ((IExtensionBuilder)extension).create(args);
+		}
+		return ExtensionBuilder.create((Class) extension, args);
+	}	
+
+	public Object create(String name, Map args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+		Object extension = this.get(name);
+		if (extension == null) {
+			extension = this.get(this.aliases.get(name));
+		}
+		
+		if( extension instanceof IExtensionBuilder ) {
+			return ((IExtensionBuilder)extension).create(args);
+		}
+		return ExtensionBuilder.create((Class) extension, args);
+	}
+	
+	/**
+	 * Crea un alias para una extension registrada.
+	 * <br>
+	 * @param item Nombre de la extension registrada.
+	 * @param alias alias a a�adir.
+	 * 
+	 **/	
+	public void addAlias(String item, String alias) throws KeyException{
+		if (!this.containsKey(item)) {
+			throw new KeyException(item);
+		}
+		this.aliases.put(alias,item);		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoints.java	(revision 42196)
@@ -0,0 +1,174 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.extensionPointsOld;
+
+import java.util.TreeMap;
+
+/**
+ * Clase para registro de puntos de extension. <br>
+ * <br>
+ * 
+ * @author jjdelcerro
+ * @deprecated @see org.gvsig.tools.extensionPoint.ExtensionPoints
+ */
+public class ExtensionPoints extends TreeMap {
+
+
+	private static final long serialVersionUID = -798417910971607414L;
+
+	/**
+	 * Evita que se a�adan elementos que no son puntos de extension.
+	 * <br>
+	 * <br>
+	 * Aunque la clase se comporta como un <i>Map</i>, no esta permitido
+	 * a�adir a esta objetos que no sean de la clase <i>ExtensionPoint</i>.
+	 * Si intentamos a�adir un elemento que no sea de esta clase, se disparara 
+	 * una excepcion ClassCastException.
+	 * <br>
+	 * <br>
+	 * @see java.util.Map#put(java.lang.Object, java.lang.Object)
+	 */
+	public Object put(Object key, Object value) throws ClassCastException  {
+		throw  new ClassCastException();
+	}
+	
+	/**
+	 * A�ade un punto de extension al registro de puntos de extension.
+	 * <br>
+	 * <br>
+	 * Mediante este metodo puede a�adir un punto de extension al registro
+	 * de puntos de extension, llevandose detras todas las extensiones que
+	 * esten registradas en el.
+	 * <br>
+	 * <br>
+	 * En caso de que ya existiese un punto de extension con el nombre dado,
+	 * a�adira a este las extensiones del punto de extension suministrado.
+	 * <br>
+	 * <br>  
+	 * @param value Punto de extension a registrar 
+	 * @return
+	 *  
+	 */	
+	public Object put(ExtensionPoint value) {
+		return put(value.getName(),value);
+	}
+	
+	/**
+	 * A�ade un punto de extension al registro de puntos de extension.
+	 * <br>
+	 * <br>
+	 * Mediante este metodo puede a�adir un punto de extension al registro
+	 * de puntos de extension, llevandose detras todas las extensiones que
+	 * esten registradas en el.
+	 * <br>
+	 * <br>
+	 * En caso de que ya existiese un punto de extension con el nombre dado,
+	 * a�adira a este las extensiones del punto de extension suministrado.
+	 * <br>
+	 * <br>
+	 * Cuando se a�ade un punto de extension, es imprescindible que <i>key</i> y 
+	 * el nombre del punto de extension que se este a�adiendo coincidan.
+	 * <br>
+	 * <br>
+	 * @param key Nombre del punto de extension 
+	 * @param value Punto de extension a registrar 
+	 * @return
+	 *  
+	 */
+	public Object put(String key, ExtensionPoint value) {
+		if ( !value.getName().equals(key) ) {
+			throw new IllegalArgumentException ();
+		}
+		ExtensionPoint n = (ExtensionPoint)super.get(key);
+		if( n == null ) {
+			return super.put(key,value);
+		}
+		// Como estamos actualizando un punto de extension, a�adimos a este las
+		// extensiones del que nos acaban de suministrar.
+		n.putAll(value);
+		return value;
+	}
+	
+	/**
+	 * Registra una extension en un punto de extension.
+	 * <br>
+	 * <br>
+	 * Mediante este metodo puede registrar sobre un punto de extension
+	 * una extension. La extension esta identificada mediante un nombre
+	 * unico, y una clase que se usara para manejar la extension o una
+	 * clase que contruira el objeto que maneje la extension. 
+	 * <br>
+	 * <br>
+	 * Si ya existe en el punto de extension indicado por <i>extensionPointName</i>
+	 * una extension con el nombre <i>name</i>, esta sera sustituida por la
+	 * nueva extension.
+	 * <br>
+	 * @param extensionPointName Nombre del punto de extension
+	 * @param name Nombre o identificador de la extension
+	 * @param data Clase que implementa la extension o que la construye. 
+	 * 
+	 *  
+	 */
+	public void add(String extensionPointName, String name, Object data) {
+		ExtensionPoint extensionPoint = (ExtensionPoint)super.get(extensionPointName);
+		if( extensionPoint == null ) {
+			extensionPoint = new ExtensionPoint(extensionPointName);
+			super.put(extensionPoint.getName(), extensionPoint);
+		}
+		
+		extensionPoint.put(name, data);
+	}
+
+	/**
+	 * Registra una extension en un punto de extension.
+	 * <br>
+	 * <br>
+	 * Mediante este metodo puede registrar sobre un punto de extension
+	 * una extension. La extension esta identificada mediante un nombre
+	 * unico, y una clase que se usara para manejar la extension o una
+	 * clase que contruira el objeto que maneje la extension. 
+	 * <br>
+	 * <br>
+	 * Si ya existe en el punto de extension indicado por <i>extensionPointName</i>
+	 * una extension con el nombre <i>name</i>, esta sera sustituida por la
+	 * nueva extension.
+	 * <br>
+	 * @param extensionPointName Nombre del punto de extension
+	 * @param name Nombre o identificador de la extension
+	 * @param description descripcion de la extension.
+	 * @param data Clase que implementa la extension o que la construye. 
+	 * 
+	 *  
+	 */
+	public void add(String extensionPointName, String name, String description, Object data) {
+		ExtensionPoint extensionPoint = (ExtensionPoint)super.get(extensionPointName);
+		if( extensionPoint == null ) {
+			extensionPoint = new ExtensionPoint(extensionPointName);			
+			super.put(extensionPoint.getName(), extensionPoint);
+		}
+		
+		extensionPoint.put(name,description, data);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPoints.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPointsSingleton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPointsSingleton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPointsSingleton.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.extensionPointsOld;
+
+/**
+ * @deprecated @see org.gvsig.tools.extensionPoint.ExtensionPointsSingleton
+ */
+public class ExtensionPointsSingleton extends ExtensionPoints {
+
+	private static final long serialVersionUID = -630976693542039111L;
+	
+	private static ExtensionPoints extensionPoints = new ExtensionPointsSingleton();
+
+	private ExtensionPointsSingleton() {
+		super();
+	}
+
+	public static ExtensionPoints getInstance() {
+		return ExtensionPointsSingleton.extensionPoints;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/ExtensionPointsSingleton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/IExtensionBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/IExtensionBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/IExtensionBuilder.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.extensionPointsOld;
+
+import java.util.Map;
+
+/**
+ * Interface utilizado para indicar al registro de extensiones que no se trata
+ * de una clase lo que hey registrado, si no una instancia de un objeto a usar
+ * para crear la extension.
+ * 
+ * 
+ * @author jjdelcerro
+ * @deprecated @see org.gvsig.tools.extensionPoint.IExtensionBuilder
+ */
+public interface IExtensionBuilder {
+	/**
+	 * Crea una instancia de la extension y la retorna.
+	 * <br>
+	 * @return
+	 */
+	public Object create();
+	
+	/**
+	 * Crea una instancia de la extension y la retorna.
+	 * <br>
+	 * En <i>args</i> recibira la lista de argumeentos a utilizar
+	 * para crear la extension.
+	 * <br>
+	 * @param args
+	 * @return
+	 */
+	public Object create(Object [] args);
+	
+	public Object create(Map args);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/IExtensionBuilder.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/package.html	(revision 42196)
@@ -0,0 +1,141 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<html>
+<body>
+<p>
+Este paquete expone un mecanismo para registro de clases.
+</p>
+<p>
+Permite registrar clases o factorias de clases que luego pueden ser
+recuperadas para construir instancias.
+</p>
+<p>
+La finalidad de este registro es el manejo de puntos de extension a una
+aplicacion. Una aplicacion declara o registra con un nombre los puntos de 
+extension que va a tener. Cada punto de extension puede tener registradas una
+o mas extensiones. Cuando se quiere a�adir una extension a la aplicacion, se
+registra la clase o factoria que gestiona esa extension para el punto de extension
+que se desee. 
+</p>
+<p>
+Veamos esto con un ejemplo.
+</p>
+<p>
+Supongamos que queremos a�adir un punto de extension a la aplicacion gvSIG, que
+permita asignar un mecanismo de presentacion de la informacion asociada a la
+herramienta de "informacion" especializada segun el tipo de tema sobre el que se
+esta trabajando.
+</p>
+<p>
+Lo primero que tendriamos que hacer es darle un nombre al punto de extension.
+Lo llamaremos "InfoByPoint". Para esto, la aplicacion que valla a utilizar
+las extensiones que se registren en este punto deberia hacer lo siguiente:
+</p>
+<pre>
+  ExtensionPoint infoByPoint = new ExtensionPoint("InfoByPoint","Registra las distintas extensiones que se pueden a�adir al 'InfoByPoint'");
+  ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
+  
+  extensionPoints.put(infoByPoint);
+</pre>
+<p>
+Con esto creamos un punto de extension de nombre "InfoByPoint", recogemos la 
+instancia del registro de extensiones e insertamos el nuevo punto de extenstion
+en el.<br>
+Normalmente esta operacion, en el contexto de gvSIG, se realizaria en la
+inicializacion de la extension de andami en la que vallamos a a�adir
+la herramienta de informacion.
+</p>
+<p>
+Las extensiones a registrar en el "InfoByPoint" podrian consistir un un 
+JPanel que gestione la presentacion a usar para el tema.
+</p>
+<p>
+Luego, desde la parte de la aplicacion que necesite a�adir nueva funcionalidad
+en este punto de extension, se deberia a�adir la extension. Por ejemplo
+en la extension de andami de WMS, se podria a�adir a "InfoByPoint" la posibilidad
+de usar una forma especial de presentacion. Podria hacerse:
+</p>
+<pre>
+    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
+    extensionPoints.add("InfoByPoint","WMS",PanelQueGestionaLaExtension);
+</pre>
+<p>
+Donde "PanelQueGestionaLaExtension" sera el JPanel que gestiona la extension para 
+"InfoByPoint" de WMS.
+</p>
+<p>
+Si quieran acceder a la extension de nombre "WMS"
+se haria:
+</p>
+<pre>
+    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
+    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
+    Object ext = infoByPoint.create("WMS");
+</pre>
+<p>
+Y esto nos devolberia un objeto JPanel que gestiona la extension "WMS"
+para el "InfoByPoint".
+</p>
+<p>
+Si quisiesemos recorrer las distintas extensiones de ese punto podriamos
+hacerlo asi:
+</p>
+<pre>
+    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
+    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
+    Iterator infoByPoint =infoByPoint.keySet().iterator();
+    while( i.hasNext() ) {
+      String nombre = (String)i.next();
+      ...
+      // Y para crear los JPanel asociados a la extension...
+      Object panel = infoByPoint.create(nombre);
+      ...
+    }
+</pre>  
+<p>
+Ademas de registrar clases en un punto de extension, se pueden registrar
+instancias que implementen el interface de IExtensionBuilder. En este caso, 
+cuando se invoque al metodo "create" del punto de extension, en lugar
+de crear una instancia, como no tiene la clase, este invocara al metodo
+create del objeto que ha sido registrado.
+</p>
+
+<p>
+Podemos encontrar un ejemplo de esto en la extension de JDBC para el 
+catalogo. Como no existe una capa especifica para las capas JDBC, en lugar
+de registrar en el punto de extension una clase "capa JDBC", se registra
+una clase que implementa el interface IExtensionBuilder, que en su
+metodo create construye una capa vectorial y la inicializa de la forma
+apropiada para funcionar con la fuente de datos de JDBC.
+</p>
+<p>
+Hay que tener en cuenta que para un punto de extension dado, deberia ser
+trasparente que se registren en el clases o instancias que contruyen las clases.
+E incluso que es posible mezclar en un punto de extension los dos
+mecanismos, como es el caso del catalogo.
+</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/extensionPointsOld/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DateTime.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DateTime.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DateTime.java	(revision 42196)
@@ -0,0 +1,218 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ib��ez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.utils;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+
+/**
+ * This class contains static methods to manage Dates. It was principally 
+ * created because of some problems doing the "String do DateTime" 
+ * and the "DateTime to String" conversions.  
+ * 
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class DateTime {
+
+/**
+ * returns the current date
+ * 
+ * 
+ * @return java.util.Date
+ */
+    public static Date getCurrentDate() {        
+        Calendar cal = new GregorianCalendar();
+ 
+        return cal.getTime();
+    } 
+
+/**
+ * It trnasforms one date in one String
+ * 
+ * 
+ * @return A String
+ * @param dtK Date
+ * @param sFormat Date format. Example: "Y-m-d H:i:s.Z";
+ */
+    public static String dateToString(Date dtK, String sFormat) {        
+        String sDate;
+        int nYear;
+        int nMonth;
+        int nDay;
+        int nHour;
+        int nMinute;
+        int nSecond;
+        int nMS;
+        Calendar clnK;
+        String sf;
+        int jc;
+        clnK = Calendar.getInstance(Locale.US);
+        clnK.setTime(dtK);
+        nYear = clnK.get(Calendar.YEAR);
+        nMonth = 1 + clnK.get(Calendar.MONTH);
+        nDay = clnK.get(Calendar.DAY_OF_MONTH);
+        nHour = clnK.get(Calendar.HOUR_OF_DAY);
+        nMinute = clnK.get(Calendar.MINUTE);
+        nSecond = clnK.get(Calendar.SECOND);
+        nMS = clnK.get(Calendar.MILLISECOND);
+        sDate = "";
+        for (jc = 0; jc < sFormat.length(); jc++) {
+            switch (sFormat.charAt(jc)) {
+                case 'Y':
+                    sDate += nYear;
+                    break;
+                case 'm':
+                    sf = "" + nMonth;
+                    if (nMonth < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'd':
+                    sf = "" + nDay;
+                    if (nDay < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'H':
+                    sf = "" + nHour;
+                    if (nHour < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'i':
+                    sf = "" + nMinute;
+                    if (nMinute < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 's':
+                    sf = "" + nSecond;
+                    if (nSecond < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'Z':
+                    sf = "" + nMS;
+                    if (nMS < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                default:
+                    sDate += sFormat.substring(jc, jc + 1);
+            }
+        }
+        return sDate;
+    } 
+   
+/**
+ * It transfoms one String in one Date
+ * 
+ * 
+ * @return Date
+ * @param sDate String
+ */
+    public static Date stringToDate(String sDate) {        
+        Date dtRes;
+        Calendar clnK;
+        int nYear;
+        int nMonth;
+        int nDay;
+        int nHour;
+        int nMinute;
+        int nSecond;
+        int nMS;
+        String sf;
+        for (; sDate.length() < 23;)
+            sDate += "0";
+        sf = sDate.substring(0, 4);
+        nYear = Integer.parseInt(sf);
+        sf = sDate.substring(5, 7);
+        nMonth = Integer.parseInt(sf) - 1;
+        sf = sDate.substring(8, 10);
+        nDay = Integer.parseInt(sf);
+        sf = sDate.substring(11, 13);
+        nHour = Integer.parseInt(sf);
+        sf = sDate.substring(14, 16);
+        nMinute = Integer.parseInt(sf);
+        sf = sDate.substring(17, 19);
+        nSecond = Integer.parseInt(sf);
+        sf = sDate.substring(20, 23);
+        nMS = Integer.parseInt(sf);
+        clnK = Calendar.getInstance(Locale.US);
+        clnK.set(nYear, nMonth, nDay, nHour, nMinute, nSecond);
+        clnK.set(Calendar.MILLISECOND, nMS);
+        dtRes = new Date();
+        dtRes = clnK.getTime();
+        //	    sf=dateToString(dtRes,"Y-m-d H:i:s.Z");
+        return dtRes;
+    } 
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DateTime.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLEntity.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLEntity.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLEntity.java	(revision 42196)
@@ -0,0 +1,1478 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Vector;
+
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.gvsig.utils.xmlEntity.generate.Property;
+import org.gvsig.utils.xmlEntity.generate.XmlTag;
+
+
+/**
+ * Adaptador de las llamadas a sus m�todos sobre los generados por castor para
+ * generar despu�s los XML.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class XMLEntity {
+	private Vector whiteAttrList;
+	private XmlTag xmltag;
+
+	/**
+	 * Crea un nuevo XMLEntity.
+	 *
+	 * @param tag
+	 *            DOCUMENT ME!
+	 */
+	public XMLEntity(XmlTag tag) {
+		xmltag = tag;
+	}
+
+	/**
+	 * Crea un nuevo XMLEntity.
+	 */
+	public XMLEntity() {
+		xmltag = new XmlTag();
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un String como valor.
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @param matters, if false this property will not take effect to the
+	 * result of toHashCode() method
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, String value, boolean matters) {
+		if ((key == null)) {
+			return;
+		}
+
+		Property p = new Property();
+		p.setKey(key);
+		p.setValue(value);
+		putProperty(p, matters);
+	}
+
+	public void putProperty(String key, String value) {
+		putProperty(key, value, true);
+	}
+	/**
+	 * A�ade una propiedad con un String como clave y un Object como valor.
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @param matters, if false this property will not take effect to the
+	 * result of toHashCode() method
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, Object value, boolean matters) {
+		String ret = "";
+
+		if (key == null) {
+			return;
+		}
+
+		Class valueClass = value.getClass();
+
+		if (valueClass.isArray()) {
+			Class compType = valueClass.getComponentType();
+
+			if (compType == byte.class) {
+				byte[] array = (byte[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						ret += (" ," + ("" + array[i]).replaceAll("[,]",
+								"\\\\,"));
+					}
+				}
+			} else if (compType == short.class) {
+				short[] array = (short[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						ret += (" ," + ("" + array[i]).replaceAll("[,]",
+								"\\\\,"));
+					}
+				}
+			} else if (compType == int.class) {
+				int[] array = (int[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						ret += (" ," + ("" + array[i]).replaceAll("[,]",
+								"\\\\,"));
+					}
+				}
+			} else if (compType == long.class) {
+				long[] array = (long[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						ret += (" ," + ("" + array[i]).replaceAll("[,]",
+								"\\\\,"));
+					}
+				}
+			} else if (compType == float.class) {
+				float[] array = (float[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						ret += (" ," + ("" + array[i]).replaceAll("[,]",
+								"\\\\,"));
+					}
+				}
+			} else if (compType == double.class) {
+				double[] array = (double[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						ret += (" ," + ("" + array[i]).replaceAll("[,]",
+								"\\\\,"));
+					}
+				}
+			} else if (compType == boolean.class) {
+				boolean[] array = (boolean[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						ret += (" ," + ("" + array[i]).replaceAll("[,]",
+								"\\\\,"));
+					}
+				}
+			} else if (compType == String.class) {
+				String[] array = (String[]) value;
+
+				if (!(array.length == 0)) {
+					if (array[0] == null) {
+						array[0] = "null";
+					}
+
+					ret += array[0].replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						if (array[i] == null) {
+							array[i] = "null";
+						}
+
+						array[i] = array[i].replaceAll("[,]", "\\\\,");
+						ret += (" ," + array[i]);
+					}
+				}
+			} else {
+				Object[] array = (Object[]) value;
+
+				if (!(array.length == 0)) {
+					ret += ("" + array[0]).replaceAll("[,]", "\\\\,");
+
+					for (int i = 1; i < array.length; i++) {
+						array[i] = ("" + array[i]).replaceAll("[,]", "\\\\,");
+						ret += (" ," + array[i]);
+					}
+				}
+			}
+		} else {
+			ret = value.toString();
+		}
+
+		Property p = new Property();
+		p.setKey(key);
+		p.setValue(ret);
+		putProperty(p, matters);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un double como valor.
+	 * La propiedad a�adida afecta al valor calculado por toHashCode()
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, Object value) {
+		putProperty(key, value, true);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un entero como valor.
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @param matters, if false this property will not take effect to the
+	 * result of toHashCode() method
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, int value, boolean matters) {
+		if (key == null) {
+			return;
+		}
+
+		Property p = new Property();
+		p.setKey(key);
+		p.setValue(new Integer(value).toString());
+		putProperty(p, matters);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un double como valor.
+	 * La propiedad a�adida afecta al valor calculado por toHashCode()
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, int value) {
+		putProperty(key, value, true);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un long como valor.
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @param matters, if false this property will not take effect to the
+	 * result of toHashCode() method
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, long value, boolean matters) {
+		if (key == null) {
+			return;
+		}
+
+		Property p = new Property();
+		p.setKey(key);
+		p.setValue(new Long(value).toString());
+		putProperty(p, matters);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un double como valor.
+	 * La propiedad a�adida afecta al valor calculado por toHashCode()
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, long value) {
+		putProperty(key, value, true);
+
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un boolean como valor.
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @param matters, if false this property will not take effect to the
+	 * result of toHashCode() method
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, boolean value, boolean matters) {
+		if (key == null) {
+			return;
+		}
+
+		Property p = new Property();
+		p.setKey(key);
+		p.setValue(new Boolean(value).toString());
+		putProperty(p, matters);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un double como valor.
+	 * La propiedad a�adida afecta al valor calculado por toHashCode()
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, boolean value) {
+		putProperty(key, value, true);
+	}
+
+
+	/**
+	 * A�ade una propiedad con un String como clave y un float como valor.
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @param matters, if false this property will not take effect to the
+	 * result of toHashCode() method
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, float value, boolean matters) {
+		if (key == null) {
+			return;
+		}
+
+		Property p = new Property();
+		p.setKey(key);
+		p.setValue(new Float(value).toString());
+		putProperty(p, matters);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un double como valor.
+	 * La propiedad a�adida afecta al valor calculado por toHashCode()
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, float value) {
+		putProperty(key, value, true);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un double como valor.
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @param matters, if false this property will not take effect to the
+	 * result of toHashCode() method
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, double value, boolean matters) {
+		if (key == null) {
+			return;
+		}
+
+		Property p = new Property();
+		p.setKey(key);
+		p.setValue(new Double(value).toString());
+		putProperty(p, matters);
+	}
+
+	/**
+	 * A�ade una propiedad con un String como clave y un double como valor.
+	 * La propiedad a�adida afecta al valor calculado por toHashCode()
+	 *
+	 * @param key
+	 *            clave.
+	 * @param value
+	 *            valor.
+	 * @see toHashCode()
+	 */
+	public void putProperty(String key, double value) {
+		putProperty(key, value, true);
+	}
+	/**
+	 * Devuelve el String que corresponda a la clave que se pasa como par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public String getStringProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		String res = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				res = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (exists) {
+			return res;
+		}
+
+		throw new NotExistInXMLEntity();
+	}
+
+	/**
+	 * Devuelve el double que corresponda a la clave que se pasa como par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public double getDoubleProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		double res = 0;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				res = Double.parseDouble(properties[i].getValue());
+				exists = true;
+			}
+		}
+
+		if (exists) {
+			return res;
+		}
+
+		throw new NotExistInXMLEntity();
+	}
+
+	/**
+	 * Devuelve el array de doubles que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public double[] getDoubleArrayProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		String value = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				value = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (!exists) {
+			throw new NotExistInXMLEntity();
+		}
+
+		if (value.compareTo("") == 0) {
+			return new double[0];
+		}
+
+		String[] aux = (String[]) value.split(" ,");
+		double[] ret = new double[aux.length];
+
+		for (int i = 0; i < aux.length; i++) {
+			ret[i] = Double.parseDouble(aux[i].replaceAll("\\\\,", ","));
+		}
+
+		return ret;
+	}
+
+	/**
+	 * Devuelve el Object que corresponda a la clave que se pasa como par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public Object getObjectProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		Object res = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				res = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (exists) {
+			return res;
+		}
+
+		throw new NotExistInXMLEntity();
+	}
+
+	/**
+	 * Devuelve el array de float que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public float[] getFloatArrayProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		String value = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				value = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (!exists) {
+			throw new NotExistInXMLEntity();
+		}
+
+		if (value.compareTo("") == 0) {
+			return new float[0];
+		}
+
+		String[] aux = (String[]) value.split(" ,");
+		float[] ret = new float[aux.length];
+
+		for (int i = 0; i < aux.length; i++) {
+			ret[i] = Float.parseFloat(aux[i].replaceAll("\\\\,", ","));
+		}
+
+		return ret;
+	}
+
+	/**
+	 * Devuelve el array de long que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public long[] getLongArrayProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		String value = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				value = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (!exists) {
+			throw new NotExistInXMLEntity();
+		}
+
+		if (value.compareTo("") == 0) {
+			return new long[0];
+		}
+
+		String[] aux = (String[]) value.split(" ,");
+		long[] ret = new long[aux.length];
+
+		for (int i = 0; i < aux.length; i++) {
+			ret[i] = Long.parseLong(aux[i].replaceAll("\\\\,", ","));
+		}
+
+		return ret;
+	}
+
+	/**
+	 * Devuelve el array de bytes que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public byte[] getByteArrayProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		String value = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				value = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (!exists) {
+			throw new NotExistInXMLEntity();
+		}
+
+		if (value.compareTo("") == 0) {
+			return new byte[0];
+		}
+
+		String[] aux = (String[]) value.split(" ,");
+		byte[] ret = new byte[aux.length];
+
+		for (int i = 0; i < aux.length; i++) {
+			ret[i] = Byte.parseByte(aux[i].replaceAll("\\\\,", ","));
+		}
+
+		return ret;
+	}
+
+	/**
+	 * Devuelve el array de enteros que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public int[] getIntArrayProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		String value = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				value = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (!exists) {
+			throw new NotExistInXMLEntity();
+		}
+
+		if (value.compareTo("") == 0) {
+			return new int[0];
+		}
+
+		String[] aux = (String[]) value.split(" ,");
+		int[] ret = new int[aux.length];
+
+		for (int i = 0; i < aux.length; i++) {
+			ret[i] = Integer.parseInt(aux[i].replaceAll("\\\\,", ","));
+		}
+
+		return ret;
+	}
+
+	/**
+	 * Devuelve el array de boolean que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public boolean[] getBooleanArrayProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		String value = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				value = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (!exists) {
+			throw new NotExistInXMLEntity();
+		}
+
+		if (value.compareTo("") == 0) {
+			return new boolean[0];
+		}
+
+		String[] aux = (String[]) value.split(" ,");
+		boolean[] ret = new boolean[aux.length];
+
+		for (int i = 0; i < aux.length; i++) {
+			ret[i] = Boolean.valueOf(aux[i].replaceAll("\\\\,", ","))
+					.booleanValue();
+		}
+
+		return ret;
+	}
+
+	/**
+	 * Devuelve el array de String que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public String[] getStringArrayProperty(String key) {
+		// /String value = (String) properties.get(key);
+		Property[] properties = xmltag.getProperty();
+		String value = null;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				value = properties[i].getValue();
+				exists = true;
+			}
+		}
+
+		if (!exists) {
+			throw new NotExistInXMLEntity();
+		}
+
+		if (value.compareTo("") == 0) {
+			return new String[0];
+		}
+
+		String[] aux = (String[]) value.split(" ,");
+
+		for (int i = 0; i < aux.length; i++) {
+			aux[i] = aux[i].replaceAll("\\\\,", ",");
+		}
+
+		return aux;
+	}
+
+	/**
+	 * Devuelve el boolean que corresponda a la clave que se pasa como
+	 * par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public boolean getBooleanProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		boolean res = false;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				res = (boolean) Boolean.valueOf(properties[i].getValue())
+						.booleanValue();
+				exists = true;
+			}
+		}
+
+		if (exists) {
+			return res;
+		}
+
+		throw new NotExistInXMLEntity();
+	}
+
+	/**
+	 * Devuelve el entero que corresponda a la clave que se pasa como par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public int getIntProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		int res = 0;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				res = Integer.parseInt(properties[i].getValue());
+				exists = true;
+			}
+		}
+
+		if (exists) {
+			return res;
+		}
+
+		throw new NotExistInXMLEntity();
+	}
+
+	/**
+	 * Devuelve el long que corresponda a la clave que se pasa como par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public long getLongProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		long res = 0;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				res = Long.valueOf(properties[i].getValue()).longValue();
+				exists = true;
+			}
+		}
+
+		if (exists) {
+			return res;
+		}
+
+		throw new NotExistInXMLEntity();
+	}
+
+	/**
+	 * Devuelve el float que corresponda a la clave que se pasa como par�metro.
+	 *
+	 * @param key
+	 *            clave
+	 *
+	 * @return valor.
+	 *
+	 * @throws NotExistInXMLEntity
+	 *             Lanza esta excepci�n si no se encuentra ning�n elemento con
+	 *             esa clave.
+	 */
+	public float getFloatProperty(String key) {
+		Property[] properties = xmltag.getProperty();
+		float res = 0;
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				res = Float.valueOf(properties[i].getValue()).floatValue();
+				exists = true;
+			}
+		}
+
+		if (exists) {
+			return res;
+		}
+
+		throw new NotExistInXMLEntity();
+	}
+
+	/**
+	 * A�ade el nombre con clave name y valor el String que se pasa como
+	 * par�metro.
+	 *
+	 * @param name
+	 *            nombre.
+	 */
+	public void setName(String name) {
+		Property p = new Property();
+		p.setKey("name");
+		p.setValue(name);
+		xmltag.addProperty(p);
+	}
+
+	/**
+	 * Devuelve el nombre.
+	 *
+	 * @return nombre.
+	 */
+	public String getName() {
+		Property p = getProperty("name");
+
+		return (String) p.getValue();
+	}
+
+	/**
+	 * Devuelve la clase que implementa.
+	 *
+	 * @return clase.
+	 */
+	public Class getImplementingClass() {
+		Property p = getProperty("class");
+		Object ob = p.getValue();
+
+		return (Class) ob;
+	}
+
+	/**
+	 * A�ade la clase que implementa
+	 *
+	 * @param c
+	 */
+	/*
+	 * public void setImplementingClass(Class c) { Property p = new Property();
+	 * p.setKey("class"); p.setValue(c.toString()); xmltag.addProperty(p); }
+	 */
+
+	/**
+	 * A�ade un hijo al XMLEntity.
+	 *
+	 * @param entity
+	 *            xml para a�adir.
+	 */
+	public void addChild(XMLEntity entity) {
+		xmltag.addXmlTag(entity.getXmlTag());
+	}
+
+	/**
+	 * Devuelve un hijo a partir de un indice.
+	 *
+	 * @param i
+	 *            indice.
+	 *
+	 * @return hijo.
+	 */
+	public XMLEntity getChild(int i) {
+		return new XMLEntity(xmltag.getXmlTag(i));
+	}
+
+	/**
+	 * Devuelve el n�mero de hijos que contiene el XMLEntity.
+	 *
+	 * @return n�mero de hijos.
+	 */
+	public int getChildrenCount() {
+		return xmltag.getXmlTagCount();
+	}
+
+	/**
+	 * Devuelve el Property a partir de la clave.
+	 *
+	 * @param key
+	 *            clave.
+	 *
+	 * @return Property.
+	 */
+	private Property getProperty(String key) {
+		Property[] ps = xmltag.getProperty();
+
+		for (int i = 0; i < ps.length; i++) {
+			if (ps[i].getKey().compareTo(key) == 0) {
+				return ps[i];
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * Devuelve el xmltag.
+	 *
+	 * @return xmltag.
+	 */
+	public XmlTag getXmlTag() {
+		return xmltag;
+	}
+
+	/**
+	 * A�ade el property que se pasa como par�metro.
+	 *
+	 * @param p
+	 *            property.
+	 */
+	private void putProperty(Property p, boolean matters) {
+		if (!matters) {
+			getWhiteAttrList().add(p.getKey());
+		}
+		for (int i = 0; i < xmltag.getPropertyCount(); i++) {
+			if (xmltag.getProperty(i).getKey().compareTo(p.getKey()) == 0) {
+				xmltag.getProperty(i).setValue(p.getValue());
+
+				return;
+			}
+		}
+
+		xmltag.addProperty(p);
+	}
+
+	private Vector getWhiteAttrList() {
+		if (whiteAttrList == null) {
+			whiteAttrList = new Vector();
+
+		}
+
+		return whiteAttrList;
+	}
+
+	public boolean contains(String key) {
+		Property[] properties = xmltag.getProperty();
+		boolean exists = false;
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				exists = true;
+			}
+		}
+		return exists;
+	}
+
+	public int getPropertyCount() {
+		return xmltag.getPropertyCount();
+	}
+
+	public String getPropertyValue(int index) {
+		return xmltag.getProperty(index).getValue();
+	}
+
+	public String getPropertyName(int index) {
+		return xmltag.getProperty(index).getKey();
+	}
+
+	/**
+	 * Removes a property of this XML-Entity.
+	 *
+	 * @param p
+	 *            property.
+	 */
+	public void remove(String key) {
+		Property[] properties = xmltag.getProperty();
+
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i].getKey().compareTo(key) == 0) {
+				Property[] newProperties = new Property[properties.length - 1];
+				int k = 0;
+				for (int j = 0; j < newProperties.length; j++) {
+					if (j == i)
+						k = 1;
+					newProperties[j] = properties[j + k];
+				}
+				xmltag.setProperty(newProperties);
+				return;
+			}
+		}
+	}
+
+	/**
+	 * Elimina el hijo n del XMLEntity.
+	 *
+	 * @param indice
+	 *            del hijo a eliminar.
+	 */
+	public void removeChild(int index) {
+		xmltag.removeXmlTag(index);
+	}
+
+	/**
+	 * Elimina todos los hijos de XMLEntity.
+	 *
+	 */
+	public void removeAllChildren() {
+		xmltag.removeAllXmlTag();
+	}
+
+	// Jaume (en proves)
+	public boolean equals(Object obj) {
+		if (obj instanceof XMLEntity) {
+			XMLEntity other = (XMLEntity) obj;
+
+			Property[] thisProperties;
+			Property[] otherProperties;
+
+			thisProperties = xmltag.getProperty();
+			otherProperties = other.xmltag.getProperty();
+
+			if (thisProperties.length != otherProperties.length)
+				return false;
+
+			for (int i = 0; i < thisProperties.length; i++) {
+				if (!thisProperties[i].getKey().equals(
+						otherProperties[i].getKey()))
+					return false;
+				if (!thisProperties[i].getValue().equals(
+						otherProperties[i].getValue()))
+					return false;
+			}
+
+			if (this.getChildrenCount() != other.getChildrenCount())
+				return false;
+
+			for (int i = 0; i < this.getChildrenCount(); i++) {
+				if (!this.getChild(i).equals(other.getChild(i)))
+					return false;
+			}
+
+			return true;
+		}
+
+		return false;
+	}
+
+	// jaume (en proves)
+	/**
+	 * <p>
+	 * <code>hash()</code> method is used to know if this <b>XMLEntity</b>
+	 * can be considered as changed. At the loading of the <b>XMLEntity</b> tree
+	 * you can invoke this method. The result of it is a <code>int</code> hash
+	 * value calculated from the contents of this and its children. Then, if you
+	 * store this value you can recognize if the <b>XMLEntity</b> has changed
+	 * since the last time you called <code>hash()</code> just by comparing
+	 * the previous calculated value to the new calculated one.<br>
+	 * </p>
+	 * <p>
+	 * Doing so, you can automatically detect if your persistent data has changed
+	 * and you are required to save it.<br>
+	 * </p>
+	 * <p>
+	 * <b>Notice</b> that you can mark the properties that you are using during
+	 * the session but you don't care about the values between sessions as
+	 * properties which don't matter to detect if your XMLEntity has changed.<br>
+	 * </p>
+	 *
+	 */
+	public long hash() {
+		long result = 17;
+
+		if (xmltag.getName()!=null) {
+			char[] name = xmltag.getName().toCharArray();
+
+			for (int i = 0; i<name.length; i++) {
+				result = 37 + result + (int) name[i];
+			}
+		}
+
+		Property[] properties = xmltag.getProperty();
+		for (int i = 0; i < properties.length; i++) {
+			String strKey = properties[i].getKey();
+			// if this key was put with the matter value set to false
+			// then it will not take effect in the hash calculation
+			if (whiteAttrList!=null && whiteAttrList.contains(strKey))
+				continue;
+
+			char[] key = strKey.toCharArray();
+			for (int j = 0; j < key.length; j++) {
+				result = 37 + result + (int) key[j];
+			}
+
+			if (properties[i]!=null) {
+				String value = properties[i].getValue();
+				char[] chars = (value!=null)? value.toCharArray() : new char[0];
+				for (int j = 0; j < chars.length; j++) {
+					result = 37 + result + (int) chars[j];
+				}
+			} else {
+				result += 37;
+			}
+		}
+
+		for (int i = 0; i < this.getChildrenCount(); i++) {
+			result = 37 + result + this.getChild(i).hash();
+		}
+		return result;
+	}
+
+	/**
+	 * Devuelve el primer hijo que el valor de su propieda 'key'
+	 * es igual a 'value'
+	 *
+	 * @param key propiedad a comparar
+	 * @param value valor a comparar
+	 * @return XMLEntity hijo o null si no se encuentra
+	 */
+	public XMLEntity firstChild(String key, String value) {
+		int num = this.getChildrenCount();
+		XMLEntity child;
+		for (int i=0;i < num; i++) {
+			child = this.getChild(i);
+			try {
+				if (child.getStringProperty(key).equals(value)) {
+					return child;
+				}
+			} catch (NotExistInXMLEntity e) {
+				// Nothing to do
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Devuelve el primer hijo cuyo nombre es igual a 'value'.
+	 * El nombre de un XMLEntity viene determinado por el valor del
+	 * atributo 'name' del xml-tag.
+	 *
+	 * @param value valor a comparar
+	 * @return XMLEntity hijo o null si no se encuentra
+	 */
+	public XMLEntity firstChild(String value) {
+		int num = this.getChildrenCount();
+		XMLEntity child;
+		for (int i=0;i < num; i++) {
+			child = this.getChild(i);
+			try {
+				if (child.getXmlTag().getName().equals(value)) {
+					return child;
+				}
+			} catch (NotExistInXMLEntity e) {
+				// Nothing to do
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Devuelve el indice del primer hijo que el valor de su propieda 'key'
+	 * es igual a 'value'
+	 *
+	 * @param key propiedad a comparar
+	 * @param value valor a comparar
+	 * @return int indice del hijo o -1 si no se encuentra
+	 */
+	public int firstIndexOfChild(String key, String value) {
+		int num = this.getChildrenCount();
+		XMLEntity child;
+		for (int i=0;i < num; i++) {
+			try {
+				child = this.getChild(i);
+				if (child.getStringProperty(key).equals(value)) {
+					return i;
+				}
+			} catch (NotExistInXMLEntity e) {
+				// Nothing to do
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Devuelve el indice del primer hijo cuyo nombre es igual a 'value'.
+	 * El nombre de un XMLEntity viene determinado por el valor del
+	 * atributo 'name' del xml-tag.
+	 *
+	 * @param value valor a comparar
+	 * @return int indice del hijo o -1 si no se encuentra
+	 */
+	public int firstIndexOfChild(String value) {
+		int num = this.getChildrenCount();
+		XMLEntity child;
+		for (int i=0;i < num; i++) {
+			try {
+				child = this.getChild(i);
+				if (child.getXmlTag().getName().equals(value)) {
+					return i;
+				}
+			} catch (NotExistInXMLEntity e) {
+				// Nothing to do
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Devuelve un iterador sobre los hijos que cumplen la condicion
+	 * que el valor de su propiedad 'key' es igual a 'value'
+	 *
+	 * El iterador no permite eliminacion
+	 *
+	 * @param key nombre de la propidedad
+	 * @param value valor de la propiedad
+	 * @return
+	 */
+	public Iterator findChildren(String key, String value) {
+		return new XMLEntityIterator(this,key,value);
+	}
+
+	public String toString() {
+		StringWriter buffer = new StringWriter();
+
+		Marshaller m;
+		try {
+			m = new Marshaller(buffer);
+		} catch (IOException e4) {
+			// TODO Auto-generated catch block
+			e4.printStackTrace();
+			return null;
+		}
+		m.setEncoding("ISO-8859-1");
+
+		try {
+			m.marshal(this.getXmlTag());
+		} catch (MarshalException e2) {
+			// TODO Auto-generated catch block
+			e2.printStackTrace();
+			return null;
+		} catch (ValidationException e3) {
+			// TODO Auto-generated catch block
+			e3.printStackTrace();
+			return null;
+		}
+
+		return buffer.toString();
+	}
+
+	public static XMLEntity parse(String data) throws MarshalException, ValidationException {
+		StringReader reader = new StringReader(data);
+
+		XmlTag tag;
+		tag = (XmlTag) XmlTag.unmarshal(reader);
+		return new XMLEntity(tag);
+	}
+
+}
+
+class XMLEntityIterator implements Iterator {
+	private int lastIndex;
+	private int lastHasNextIndex;
+	private XMLEntity entity;
+	private String key;
+	private String value;
+
+	public XMLEntityIterator(XMLEntity entity,String key,String value) {
+		this.entity = entity;
+		this.key = key;
+		this.value = value;
+		this.lastIndex = -1;
+		this.lastHasNextIndex = -1;
+	}
+	public void remove() {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean hasNext() {
+		if (entity.getChildrenCount() == 0 || entity.getChildrenCount() <= this.lastIndex){
+			return false;
+		}
+		int num = this.entity.getChildrenCount();
+		XMLEntity child;
+		for (int i=this.lastIndex+1;i < num; i++) {
+			child = this.entity.getChild(i);
+			try {
+				if (child.getStringProperty(key).equals(value)) {
+					this.lastHasNextIndex = i;
+					return true;
+				}
+			} catch (NotExistInXMLEntity e) {
+				// Nothing to do
+			}
+		}
+		return false;
+	}
+
+	public Object next() {
+		if (entity.getChildrenCount() == 0 || entity.getChildrenCount() <= this.lastIndex){
+			throw new NoSuchElementException();
+		}
+
+		XMLEntity child;
+
+		if (this.lastHasNextIndex > -1) {
+			if (this.entity.getChildrenCount() > this.lastHasNextIndex) {
+				child = this.entity.getChild(this.lastHasNextIndex);
+				try {
+					if (child.getStringProperty(key).equals(value)) {
+						this.lastIndex = this.lastHasNextIndex;
+						this.lastHasNextIndex = -1;
+						return child;
+					}
+				} catch (NotExistInXMLEntity e) {
+					// Nothing to do
+				}
+			}
+		}
+
+
+		int num = this.entity.getChildrenCount();
+
+		for (int i=this.lastIndex+1;i < num; i++) {
+			child = this.entity.getChild(i);
+			try {
+				if (child.getStringProperty(key).equals(value)) {
+					this.lastIndex = i;
+					this.lastHasNextIndex = -1;
+					return child;
+				}
+			} catch (NotExistInXMLEntity e) {
+				// Nothing to do
+			}
+		}
+		this.lastHasNextIndex = -1;
+		throw new NoSuchElementException();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLEntity.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistence.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistence.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistence.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+/**
+ * <p>Any object that needs store its data to restore it after, should implement <code>IPersistence</code>.</p>
+ *
+ * <p>The process of persisting (for instance in a file) the information of an object using XML is named <i>Marshall</i>,
+ *  whereas the inverse process in named <i>Unmarshall</i>.</p>
+ *
+ * <p>It's necessary specify the name of the class that will be persisted or restored.</p>
+ *
+ * @author fjp
+ */
+public interface IPersistence {
+	/**
+	 * <p>Gets the class name of the object.</p>
+	 *
+	 * @return the class name of the object
+	 */
+    String getClassName();
+
+    /**
+     * <p>Returns an XML entity with all necessary information of the object to <i>marshall</i>.</p>
+     *
+     * @return the XML entity with all necessary information of the object
+     */
+    XMLEntity getXMLEntity() throws XMLException;
+
+    /**
+     * <p>Sets an XML entity with all necessary information of the object.</p>
+     *
+     * @param xml the XML entity with all necessary information of the object
+     */
+    void setXMLEntity(XMLEntity xml) throws XMLException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IPersistence.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultCharSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultCharSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultCharSet.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class DefaultCharSet implements SymbolSet {
+    private HashSet caracteres = new HashSet();
+    private ArrayList intervalos = new ArrayList();
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param c DOCUMENT ME!
+     */
+    public void addCharacter(char c) {
+        caracteres.add(new Character(c));
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param c1 DOCUMENT ME!
+     * @param c2 DOCUMENT ME!
+     */
+    public void addInterval(char c1, char c2) {
+        intervalos.add(new Interval(c1, c2));
+    }
+
+    /**
+     * @see org.gvsig.utils.SymbolSet#contains(char)
+     */
+    public boolean contains(char c) {
+        if (caracteres.contains(new Character(c))) {
+            return true;
+        }
+
+        for (int i = 0; i < intervalos.size(); i++) {
+            if (((Interval) intervalos.get(i)).contains(c)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class Interval implements SymbolSet {
+        public int ini;
+        public int fin;
+
+        /**
+         * Crea un nuevo Interval.
+         *
+         * @param c1 DOCUMENT ME!
+         * @param c2 DOCUMENT ME!
+         */
+        public Interval(char c1, char c2) {
+            ini = c1;
+            fin = c2;
+        }
+
+        /**
+         * @see org.gvsig.utils.SymbolSet#contains(char)
+         */
+        public boolean contains(char c) {
+            if ((ini <= c) && (c <= fin)) {
+                return true;
+            }
+
+            return false;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultCharSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/FileUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/FileUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/FileUtils.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+
+/**
+ * Utility class that contains some useful function related
+ * to file management
+ *
+ * @author wolf
+ */
+public class FileUtils {
+    private FileUtils() {
+    }
+
+    public static String getFileExtension(File f) {
+        String fileName = f.getName();
+        int extensionStart = fileName.lastIndexOf('.');
+        String extension = "";
+
+        if (extensionStart >= 0) {
+            extension = fileName.substring(extensionStart + 1);
+        }
+
+        return extension;
+    }
+    
+    public static String getFileWithoutExtension(File f){
+    	String fileName = f.getAbsolutePath();
+    	int extensionStart = fileName.lastIndexOf('.');
+    	if(extensionStart != -1)
+    		return fileName.substring(0, extensionStart);
+    	else
+    		return fileName;
+    }
+    
+    public static void copy(File src, File dst) throws IOException {
+        InputStream in = new FileInputStream(src);
+        OutputStream out = new FileOutputStream(dst);
+    
+        // Transfer bytes from in to out
+        byte[] buf = new byte[10240];
+        int len;
+        while ((len = in.read(buf)) > 0) {
+            out.write(buf, 0, len);
+        }
+        in.close();
+        out.close();
+    }
+   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/FileUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Utils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Utils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Utils.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 19-oct-2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils;
+
+/**
+ * @author FJP
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+import java.io.File;
+
+import javax.swing.ImageIcon;
+/* Utils.java is a 1.4
+example used by FileChooserDemo2.java. */
+public class Utils
+{
+	public final static String jpeg = "jpeg";
+	public final static String jpg = "jpg";
+	public final static String gif = "gif";
+	public final static String tiff = "tiff";
+	public final static String tif = "tif";
+	public final static String png = "png";
+/* * Get the extension of a file. */
+	public static String getExtension(File f)
+	{
+		String ext = null;
+		String s = f.getName();
+		int i = s.lastIndexOf('.');
+		if (i > 0 && i < s.length() - 1)
+		{
+			ext = s.substring(i+1).toLowerCase();
+		}
+		return ext;
+	}
+/** Returns an ImageIcon, or null if the path was invalid. */
+	protected static ImageIcon createImageIcon(String path)
+	{
+		java.net.URL imgURL = Utils.class.getResource(path);
+		if (imgURL != null) {
+			return new ImageIcon(imgURL);
+		} else {
+			System.err.println("Couldn't find file: " + path);
+			return null;
+		}
+	}
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/Utils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultListModel.java	(revision 42196)
@@ -0,0 +1,532 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.AbstractListModel;
+
+
+/**
+ * Esta es la misma clase que javax.swing.DefaultListModel
+ * pero tiene un constructor que toma como par�metro una
+ * collection.
+ */
+public class DefaultListModel extends AbstractListModel
+{
+	private Vector delegate;
+
+	public DefaultListModel(Collection c){
+		delegate = new Vector(c);
+	}
+	
+	public DefaultListModel(){
+		delegate = new Vector();	
+	}
+
+	/**
+	 * Returns the number of components in this list.
+	 * <p>
+	 * This method is identical to <code>size</code>, which implements the
+	 * <code>List</code> interface defined in the 1.2 Collections framework.
+	 * This method exists in conjunction with <code>setSize</code> so that
+	 * <code>size</code> is identifiable as a JavaBean property.
+	 *
+	 * @return  the number of components in this list
+	 * @see #size()
+	 */
+	public int getSize() {
+	return delegate.size();
+	}
+
+	/**
+	 * Returns the component at the specified index.
+	 * <blockquote>
+	 * <b>Note:</b> Although this method is not deprecated, the preferred
+	 *    method to use is <code>get(int)</code>, which implements the
+	 *    <code>List</code> interface defined in the 1.2 Collections framework.
+	 * </blockquote>
+	 * @param      index   an index into this list
+	 * @return     the component at the specified index
+	 * @exception  ArrayIndexOutOfBoundsException  if the <code>index</code>
+	 *             is negative or greater than the current size of this
+	 *             list
+	 * @see #get(int)
+	 */
+	public Object getElementAt(int index) {
+	return delegate.elementAt(index);
+	}
+
+	/**
+	 * Copies the components of this list into the specified array.
+	 * The array must be big enough to hold all the objects in this list,
+	 * else an <code>IndexOutOfBoundsException</code> is thrown.
+	 *
+	 * @param   anArray   the array into which the components get copied
+	 * @see Vector#copyInto(Object[])
+	 */
+	public void copyInto(Object anArray[]) {
+	delegate.copyInto(anArray);
+	}
+
+	/**
+	 * Trims the capacity of this list to be the list's current size.
+	 *
+	 * @see Vector#trimToSize()
+	 */
+	public void trimToSize() {
+	delegate.trimToSize();
+	}
+
+	/**
+	 * Increases the capacity of this list, if necessary, to ensure
+	 * that it can hold at least the number of components specified by
+	 * the minimum capacity argument.
+	 *
+	 * @param   minCapacity   the desired minimum capacity
+	 * @see Vector#ensureCapacity(int)
+	 */
+	public void ensureCapacity(int minCapacity) {
+	delegate.ensureCapacity(minCapacity);
+	}
+
+	/**
+	 * Sets the size of this list.
+	 *
+	 * @param   newSize   the new size of this list
+	 * @see Vector#setSize(int)
+	 */
+	public void setSize(int newSize) {
+	int oldSize = delegate.size();
+	delegate.setSize(newSize);
+	if (oldSize > newSize) {
+		fireIntervalRemoved(this, newSize, oldSize-1);
+	}
+	else if (oldSize < newSize) {
+		fireIntervalAdded(this, oldSize, newSize-1);
+	}
+	}
+
+	/**
+	 * Returns the current capacity of this list.
+	 *
+	 * @return  the current capacity
+	 * @see Vector#capacity()
+	 */
+	public int capacity() {
+	return delegate.capacity();
+	}
+
+	/**
+	 * Returns the number of components in this list.
+	 *
+	 * @return  the number of components in this list
+	 * @see Vector#size()
+	 */
+	public int size() {
+	return delegate.size();
+	}
+
+	/**
+	 * Tests whether this list has any components.
+	 *
+	 * @return  <code>true</code> if and only if this list has
+	 *          no components, that is, its size is zero;
+	 *          <code>false</code> otherwise
+	 * @see Vector#isEmpty()
+	 */
+	public boolean isEmpty() {
+	return delegate.isEmpty();
+	}
+
+	/**
+	 * Returns an enumeration of the components of this list.
+	 *
+	 * @return  an enumeration of the components of this list
+	 * @see Vector#elements()
+	 */
+	public Enumeration elements() {
+	return delegate.elements();
+	}
+
+	/**
+	 * Tests whether the specified object is a component in this list.
+	 *
+	 * @param   elem   an object
+	 * @return  <code>true</code> if the specified object
+	 *          is the same as a component in this list
+	 * @see Vector#contains(Object)
+	 */
+	public boolean contains(Object elem) {
+	return delegate.contains(elem);
+	}
+
+	/**
+	 * Searches for the first occurrence of <code>elem</code>.
+	 *
+	 * @param   elem   an object
+	 * @return  the index of the first occurrence of the argument in this
+	 *          list; returns <code>-1</code> if the object is not found
+	 * @see Vector#indexOf(Object)
+	 */
+	public int indexOf(Object elem) {
+	return delegate.indexOf(elem);
+	}
+
+	/**
+	 * Searches for the first occurrence of <code>elem</code>, beginning
+	 * the search at <code>index</code>.
+	 *
+	 * @param   elem    an desired component
+	 * @param   index   the index from which to begin searching
+	 * @return  the index where the first occurrence of <code>elem</code>
+	 *          is found after <code>index</code>; returns <code>-1</code>
+	 *          if the <code>elem</code> is not found in the list
+	 * @see Vector#indexOf(Object,int)
+	 */
+	 public int indexOf(Object elem, int index) {
+	return delegate.indexOf(elem, index);
+	}
+
+	/**
+	 * Returns the index of the last occurrence of <code>elem</code>.
+	 *
+	 * @param   elem   the desired component
+	 * @return  the index of the last occurrence of <code>elem</code>
+	 *          in the list; returns <code>-1</code> if the object is not found
+	 * @see Vector#lastIndexOf(Object)
+	 */
+	public int lastIndexOf(Object elem) {
+	return delegate.lastIndexOf(elem);
+	}
+
+	/**
+	 * Searches backwards for <code>elem</code>, starting from the
+	 * specified index, and returns an index to it.
+	 *
+	 * @param  elem    the desired component
+	 * @param  index   the index to start searching from
+	 * @return the index of the last occurrence of the <code>elem</code>
+	 *          in this list at position less than <code>index</code>;
+	 *          returns <code>-1</code> if the object is not found
+	 * @see Vector#lastIndexOf(Object,int)
+	 */
+	public int lastIndexOf(Object elem, int index) {
+	return delegate.lastIndexOf(elem, index);
+	}
+
+	/**
+	 * Returns the component at the specified index.
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+	 * is negative or not less than the size of the list.
+	 * <blockquote>
+	 * <b>Note:</b> Although this method is not deprecated, the preferred
+	 *    method to use is <code>get(int)</code>, which implements the
+	 *    <code>List</code> interface defined in the 1.2 Collections framework.
+	 * </blockquote>
+	 *
+	 * @param      index   an index into this list
+	 * @return     the component at the specified index
+	 * @see #get(int)
+	 * @see Vector#elementAt(int)
+	 */
+	public Object elementAt(int index) {
+	return delegate.elementAt(index);
+	}
+
+	/**
+	 * Returns the first component of this list.
+	 * Throws a <code>NoSuchElementException</code> if this
+	 * vector has no components.
+	 * @return     the first component of this list
+	 * @see Vector#firstElement()
+	 */
+	public Object firstElement() {
+	return delegate.firstElement();
+	}
+
+	/**
+	 * Returns the last component of the list.
+	 * Throws a <code>NoSuchElementException</code> if this vector
+	 * has no components.
+	 *
+	 * @return  the last component of the list
+	 * @see Vector#lastElement()
+	 */
+	public Object lastElement() {
+	return delegate.lastElement();
+	}
+
+	/**
+	 * Sets the component at the specified <code>index</code> of this
+	 * list to be the specified object. The previous component at that
+	 * position is discarded.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+	 * is invalid.
+	 * <blockquote>
+	 * <b>Note:</b> Although this method is not deprecated, the preferred
+	 *    method to use is <code>set(int,Object)</code>, which implements the
+	 *    <code>List</code> interface defined in the 1.2 Collections framework.
+	 * </blockquote>
+	 *
+	 * @param      obj     what the component is to be set to
+	 * @param      index   the specified index
+	 * @see #set(int,Object)
+	 * @see Vector#setElementAt(Object,int)
+	 */
+	public void setElementAt(Object obj, int index) {
+	delegate.setElementAt(obj, index);
+	fireContentsChanged(this, index, index);
+	}
+
+	/**
+	 * Deletes the component at the specified index.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+	 * is invalid.
+	 * <blockquote>
+	 * <b>Note:</b> Although this method is not deprecated, the preferred
+	 *    method to use is <code>remove(int)</code>, which implements the
+	 *    <code>List</code> interface defined in the 1.2 Collections framework.
+	 * </blockquote>
+	 *
+	 * @param      index   the index of the object to remove
+	 * @see #remove(int)
+	 * @see Vector#removeElementAt(int)
+	 */
+	public void removeElementAt(int index) {
+	delegate.removeElementAt(index);
+	fireIntervalRemoved(this, index, index);
+	}
+
+	/**
+	 * Inserts the specified object as a component in this list at the
+	 * specified <code>index</code>.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+	 * is invalid.
+	 * <blockquote>
+	 * <b>Note:</b> Although this method is not deprecated, the preferred
+	 *    method to use is <code>add(int,Object)</code>, which implements the
+	 *    <code>List</code> interface defined in the 1.2 Collections framework.
+	 * </blockquote>
+	 *
+	 * @param      obj     the component to insert
+	 * @param      index   where to insert the new component
+	 * @exception  ArrayIndexOutOfBoundsException  if the index was invalid
+	 * @see #add(int,Object)
+	 * @see Vector#insertElementAt(Object,int)
+	 */
+	public void insertElementAt(Object obj, int index) {
+	delegate.insertElementAt(obj, index);
+	fireIntervalAdded(this, index, index);
+	}
+
+	/**
+	 * Adds the specified component to the end of this list.
+	 *
+	 * @param   obj   the component to be added
+	 * @see Vector#addElement(Object)
+	 */
+	public void addElement(Object obj) {
+	int index = delegate.size();
+	delegate.addElement(obj);
+	fireIntervalAdded(this, index, index);
+	}
+
+	/**
+	 * Removes the first (lowest-indexed) occurrence of the argument
+	 * from this list.
+	 *
+	 * @param   obj   the component to be removed
+	 * @return  <code>true</code> if the argument was a component of this
+	 *          list; <code>false</code> otherwise
+	 * @see Vector#removeElement(Object)
+	 */
+	public boolean removeElement(Object obj) {
+	int index = indexOf(obj);
+	boolean rv = delegate.removeElement(obj);
+	if (index >= 0) {
+		fireIntervalRemoved(this, index, index);
+	}
+	return rv;
+	}
+
+
+	/**
+	 * Removes all components from this list and sets its size to zero.
+	 * <blockquote>
+	 * <b>Note:</b> Although this method is not deprecated, the preferred
+	 *    method to use is <code>clear</code>, which implements the
+	 *    <code>List</code> interface defined in the 1.2 Collections framework.
+	 * </blockquote>
+	 *
+	 * @see #clear()
+	 * @see Vector#removeAllElements()
+	 */
+	public void removeAllElements() {
+	int index1 = delegate.size()-1;
+	delegate.removeAllElements();
+	if (index1 >= 0) {
+		fireIntervalRemoved(this, 0, index1);
+	}
+	}
+
+
+	/**
+	 * Returns a string that displays and identifies this
+	 * object's properties.
+	 *
+	 * @return a String representation of this object
+	 */
+   public String toString() {
+	return delegate.toString();
+	}
+
+
+	/* The remaining methods are included for compatibility with the
+	 * Java 2 platform Vector class.
+	 */
+
+	/**
+	 * Returns an array containing all of the elements in this list in the
+	 * correct order.
+	 *
+	 * @return an array containing the elements of the list
+	 * @see Vector#toArray()
+	 */
+	public Object[] toArray() {
+	Object[] rv = new Object[delegate.size()];
+	delegate.copyInto(rv);
+	return rv;
+	}
+
+	/**
+	 * Returns the element at the specified position in this list.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code>
+	 * if the index is out of range
+	 * (<code>index &lt; 0 || index &gt;= size()</code>).
+	 *
+	 * @param index index of element to return
+	 */
+	public Object get(int index) {
+	return delegate.elementAt(index);
+	}
+
+	/**
+	 * Replaces the element at the specified position in this list with the
+	 * specified element.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code>
+	 * if the index is out of range
+	 * (<code>index &lt; 0 || index &gt;= size()</code>).
+	 *
+	 * @param index index of element to replace
+	 * @param element element to be stored at the specified position
+	 * @return the element previously at the specified position
+	 */
+	public Object set(int index, Object element) {
+	Object rv = delegate.elementAt(index);
+	delegate.setElementAt(element, index);
+	fireContentsChanged(this, index, index);
+	return rv;
+	}
+
+	/**
+	 * Inserts the specified element at the specified position in this list.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code> if the
+	 * index is out of range
+	 * (<code>index &lt; 0 || index &gt; size()</code>).
+	 *
+	 * @param index index at which the specified element is to be inserted
+	 * @param element element to be inserted
+	 */
+	public void add(int index, Object element) {
+	delegate.insertElementAt(element, index);
+	fireIntervalAdded(this, index, index);
+	}
+
+	/**
+	 * Removes the element at the specified position in this list.
+	 * Returns the element that was removed from the list.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code>
+	 * if the index is out of range
+	 * (<code>index &lt; 0 || index &gt;= size()</code>).
+	 *
+	 * @param index the index of the element to removed
+	 */
+	public Object remove(int index) {
+	Object rv = delegate.elementAt(index);
+	delegate.removeElementAt(index);
+	fireIntervalRemoved(this, index, index);
+	return rv;
+	}
+
+	/**
+	 * Removes all of the elements from this list.  The list will
+	 * be empty after this call returns (unless it throws an exception).
+	 */
+	public void clear() {
+	int index1 = delegate.size()-1;
+	delegate.removeAllElements();
+	if (index1 >= 0) {
+		fireIntervalRemoved(this, 0, index1);
+	}
+	}
+
+	/**
+	 * Deletes the components at the specified range of indexes.
+	 * The removal is inclusive, so specifying a range of (1,5)
+	 * removes the component at index 1 and the component at index 5,
+	 * as well as all components in between.
+	 * <p>
+	 * Throws an <code>ArrayIndexOutOfBoundsException</code>
+	 * if the index was invalid.
+	 * Throws an <code>IllegalArgumentException</code> if
+	 * <code>fromIndex &gt; toIndex</code>.
+	 *
+	 * @param      fromIndex the index of the lower end of the range
+	 * @param      toIndex   the index of the upper end of the range
+	 * @see	   #remove(int)
+	 */
+	public void removeRange(int fromIndex, int toIndex) {
+	for(int i = toIndex; i >= fromIndex; i--) {
+		delegate.removeElementAt(i);
+	}
+	fireIntervalRemoved(this, fromIndex, toIndex);
+	}
+
+	/*
+	public void addAll(Collection c) {
+	}
+
+	public void addAll(int index, Collection c) {
+	}
+	*/
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DefaultListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringUtilities.java	(revision 42196)
@@ -0,0 +1,517 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.awt.Color;
+import java.awt.geom.Rectangle2D;
+import java.util.Iterator;
+import java.util.Random;
+import java.util.TreeSet;
+
+
+/**
+ * Clase de utilidad para Strings
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class StringUtilities {
+    /**
+     * Inserta una string en otra en la posici�n indicada
+     *
+     * @param base String donde se inserta
+     * @param position posici�n de "base" donde se inserta la String
+     * @param injerto String que se inserta en "base"
+     *
+     * @return String con la inserci�n hecha
+     */
+    public static String insert(String base, int position, String injerto) {
+        return base.substring(0, position) + injerto +
+        base.substring(position);
+    }
+
+    /**
+     * Busca en la cadena si la posici�n se encuentra entre un s�mbolo de
+     * apertura y su correspondiente s�mbolo de clausura
+     *
+     * @param string Cadena donde se busca
+     * @param position posici�n que se est� evaluando
+     * @param startSymbol s�mbolo de apertura
+     * @param endSymbol s�mbolo de clausura
+     *
+     * @return true si la posici�n dada est� entre un s�mbolo de apertura y
+     *         otro de clausura
+     */
+    public static boolean isBetweenSymbols(String string, int position,
+        String startSymbol, String endSymbol) {
+        TreeSet startSymbolIndexes = new TreeSet();
+        TreeSet endSymbolIndexes = new TreeSet();
+        boolean sameSymbolOpen = true;
+
+        int pos = 0;
+
+        //Itera sobre la cadena almacenando las posiciones de los s�mbolos de apertura hasta posici�n
+        while ((pos = string.indexOf(startSymbol, pos)) < position) {
+            if (pos == -1) {
+                break;
+            }
+
+            startSymbolIndexes.add(new Integer(pos));
+            pos++;
+        }
+
+        pos = 0;
+
+        //Itera sobre la cadena almacenando las posiciones de los s�mbolos de clausura hasta posici�n
+        while ((pos = string.indexOf(endSymbol, pos)) < position) {
+            if (pos == -1) {
+                break;
+            }
+
+            endSymbolIndexes.add(new Integer(pos));
+            pos++;
+        }
+
+        Iterator startIndexesIterator = startSymbolIndexes.iterator();
+        Iterator endIndexesIterator = endSymbolIndexes.iterator();
+        Integer startIndex = null;
+        Integer endIndex = null;
+        int count = 0;
+
+        while (startIndexesIterator.hasNext() || endIndexesIterator.hasNext()) {
+            if (startIndexesIterator.hasNext()) {
+                startIndex = (Integer) startIndexesIterator.next();
+            }
+
+            if (endIndexesIterator.hasNext()) {
+                endIndex = (Integer) endIndexesIterator.next();
+            }
+
+            if (startIndex == null) {
+                if (endIndexesIterator.hasNext()) {
+                    endIndex = (Integer) startIndexesIterator.next();
+                }
+
+                count--;
+            } else if (endIndex == null) {
+                if (startIndexesIterator.hasNext()) {
+                    startIndex = (Integer) startIndexesIterator.next();
+                }
+
+                count++;
+            } else {
+                if (endIndex.intValue() < startIndex.intValue()) {
+                    if (endIndexesIterator.hasNext()) {
+                        endIndex = (Integer) startIndexesIterator.next();
+                    } else {
+                        endIndex = null;
+                    }
+
+                    count--;
+                } else {
+                    if (startIndexesIterator.hasNext()) {
+                        startIndex = (Integer) startIndexesIterator.next();
+                    } else {
+                        startIndex = null;
+                    }
+
+                    count++;
+                }
+            }
+        }
+
+        if (count == 0) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Busca en la cadena si la posici�n tiene un n�mero par de symbol delante
+     * de ella o impar.
+     *
+     * @param string Cadena donde se busca
+     * @param position posici�n que se est� evaluando
+     * @param symbol s�mbolo que se toma para la comprobaci�n
+     *
+     * @return true si hay un n�mero impar de s�mbolos delante de la posici�n
+     *         pos y false en caso contrario
+     */
+    public static boolean isBetweenSymbols(String string, int position,
+        String symbol) {
+        int pos = 0;
+
+        int count = 0;
+
+        while ((pos = string.indexOf(symbol, pos)) < position) {
+            if (pos == -1) {
+                break;
+            }
+
+            count = 1 - count;
+            pos++;
+        }
+
+        if (count == 0) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Obtiene una cadena delimitada por s�mbolos
+     *
+     * @param string Cadena de la que se obtendr� la subcadena
+     * @param symbolSet Conjunto de s�mbolos delimitadores
+     * @param position Posici�n a partir de la cual se busca la subcadena
+     *
+     * @return Cadena delimitada por cualquier combinaci�n de los s�mbolos
+     * definidos en el SimbolSet, o null si no se encuentra ninguna
+     */
+    public static String substringWithSymbols(String string,
+        SymbolSet symbolSet, int position) {
+        char[] characters = new char[string.length() - position];
+        string.getChars(position, string.length(), characters, 0);
+
+        for (int i = position; i < characters.length; i++) {
+            if (symbolSet.contains(characters[i])) {
+                char[] buff = new char[string.length() - i];
+                int j = 0;
+
+                while (symbolSet.contains(characters[i])) {
+                    buff[j] = characters[i];
+                    j++;
+                    i++;
+
+                    if (i == characters.length) {
+                        break;
+                    }
+                }
+
+                char[] ret = new char[j];
+                System.arraycopy(buff, 0, ret, 0, j);
+
+                return new String(ret);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Encuentra una cadena delimitada por otras dos
+     *
+     * @param string Cadena en la que se busca
+     * @param start Cadena de inicio de la delimitaci�n
+     * @param end Cadena de final de la delimitaci�n
+     * @param startingPosition Posici�n en la que se empieza a buscar
+     *
+     * @return String cadena delimitada por start y por end
+     */
+    public static String substringDelimited(String string, String start,
+        String end, int startingPosition) {
+        int startIndex = string.indexOf(start, startingPosition);
+
+        if (startIndex == -1) {
+            return null;
+        }
+
+        startIndex += start.length();
+
+        int endIndex = string.indexOf(end, startIndex);
+
+        if ((startIndex < endIndex) && (endIndex != -1) && (startIndex != -1)) {
+            return string.substring(startIndex, endIndex);
+        }
+
+        return null;
+    }
+
+    /**
+     * Obtiene una rect�ngulo como String
+     *
+     * @param rect Rect�ngulo a transformar
+     *
+     * @return String
+     */
+    public static String rect2String(Rectangle2D rect) {
+        return rect.getMinX() + "," + rect.getMinY() + "," + rect.getWidth() +
+        "," + rect.getHeight();
+    }
+
+    /**
+     * Convierte un String en un rect�ngulo. El string ha de haber sido
+     * convertida a previamente desde un rectangulo mediante el m�todo
+     * rect2String
+     *
+     * @param rect String
+     *
+     * @return Rectangle2D
+     */
+    public static Rectangle2D string2Rect(String rect) {
+        String[] coords = new String[4];
+        coords = rect.split(",");
+
+        Rectangle2D.Double ret = new Rectangle2D.Double(new Double(coords[0]).doubleValue(),
+                new Double(coords[1]).doubleValue(),
+                new Double(coords[2]).doubleValue(),
+                new Double(coords[3]).doubleValue());
+
+        return ret;
+    }
+
+    /**
+     * Obtiene la representaci�n de un color como String
+     *
+     * @param c Color
+     *
+     * @return String
+     */
+    public static String color2String(Color c) {
+    	if (c == null) return null;
+        return c.getRed() + "," + c.getGreen() + "," + c.getBlue() + "," +
+        c.getAlpha();
+    }
+
+    /**
+     * Obtiene el color de un string generado con color2String 
+     *
+     * @param stringColor string 
+     *
+     * @return Color
+     */
+    public static Color string2Color(String stringColor) {
+    	if (stringColor == null || stringColor.equals("null")) return null;
+        String[] ints = new String[4];
+        ints = stringColor.split(",");
+
+        int[] ret = new int[4];
+
+        for (int i = 0; i < ret.length; i++) {
+            ret[i] = new Integer(ints[i]).intValue();
+        }
+
+        return new Color(ret[0], ret[1], ret[2], ret[3]);
+
+        /*
+           long color = new Long(stringColor).longValue();
+           long alpha = color / 16777216;
+           color = color % 16777216;
+        
+           long red = color / 65536;
+           color = color % 65536;
+           long green = color / 256;
+           color = color % 256;
+           long blue = color;
+           return new Color(red, green, blue, alpha);*/
+    }
+
+    /*
+     * DOCUMENT ME!
+     *
+     * @param array DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public static String floatArray2String(float[] array) {
+        String aux = "" + array[0];
+
+        for (int i = 1; i < array.length; i++) {
+            aux += ("," + array[i]);
+        }
+
+        return aux;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param array DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public static float[] string2FloatArray(String array) {
+        String[] floats = new String[4];
+        floats = array.split(",");
+
+        float[] ret = new float[floats.length];
+
+        for (int i = 0; i < ret.length; i++) {
+            ret[i] = new Float(floats[i]).floatValue();
+        }
+
+        return ret;
+    }
+
+    /**
+     * returns a list (comma-separated) in one unique string
+     * 
+     * 
+     * @return 
+     * @param input 
+     */
+        public static String getComaSeparated(String[] input) {        
+            return getXSeparated("," , input);
+        } 
+
+    /**
+     * returns a list (blanck-separated) in one unique string
+     * 
+     * 
+     * @return 
+     * @param input 
+     */
+        public static String getBlankSeparated(String[] input) {        
+          return getXSeparated(" " , input);
+        } 
+
+    /**
+     * returns a list (X-Character-separated) in one unique string
+     * 
+     * 
+     * @return 
+     * @param X 
+     * @param input 
+     */
+        private static String getXSeparated(String X, String[] input) {        
+            String output = "";
+            if (input.length == 0) {
+                return "";
+            }
+            output = input[0];
+            for (int i = 1; i < input.length; i++)
+                output = output + X + input[i];
+            return output;
+        } 
+
+    /**
+     * Replace a part of a String
+     * 
+     * 
+     * @return 
+     * @param str String to find the pattern
+     * @param pattern Pattern to find
+     * @param replace String to replace
+     */
+        public static String replace(String str, String pattern, String replace) {        
+            int s = 0;
+            int e = 0;
+            StringBuffer result = new StringBuffer();
+            while ((e = str.indexOf(pattern, s)) >= 0) {
+                result.append(str.substring(s, e));
+                result.append(replace);
+                s = e + pattern.length();
+            }
+            result.append(str.substring(s));
+            return result.toString();
+        } 
+        
+        /**
+         * Generates one random string
+         * @param length
+         * String length
+         * @return
+         */
+        public static String generateRandomString(int length) {
+    		int rnd;
+    		final Random r = new Random();
+    		final String sorigen = 
+    			"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
+    			"abcdefghijklmnopqrstuvwxyz";
+    		final char fuente[] = sorigen.toCharArray();
+    		char buffer[] = new char[length];
+    		
+    		for( int i=0; i < length; i++ ) {
+    			rnd = Math.abs( r.nextInt() ) % fuente.length;
+    			buffer[i] = fuente[rnd];
+    		}
+    		return( new String( buffer ) );
+    	}
+
+    /**
+     * Returns the number of occurrences of a chain of characters in an String
+     * 
+     * @param str The string where find into
+     * @param subStr The chain of characters that we want to know how many times occurs
+     * @param caseSensitive <code>true</code> if has to do case sensitive each search or <code>false</code> if not
+     * 
+     * @return An integer value >= 0
+     * 
+     * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+     */
+    public static int numberOfOccurrencesOfSubStringInString(String str, String subStr, boolean caseSensitive) {
+    	int aux = 0;
+    	int numberOfOccurrences = 0;
+    	
+    	if (!caseSensitive) {
+    		str = str.toLowerCase();
+    		subStr = subStr.toLowerCase();
+    	}
+    	
+    	while (((aux = str.indexOf(subStr, aux)) != -1)) {
+    		aux = aux + subStr.length();
+    		numberOfOccurrences++;
+    	}
+    	
+    	return numberOfOccurrences;
+    }
+    
+
+    /**
+     * Returns the number of occurrences of a chain of characters in an String, between a rank of positions
+     * (If the subString finishes before 'end_position' -> don't count that occurrence)
+     * 
+     * @param str The string where find into
+     * @param subStr The chain of characters that we want to know how many times occurs
+     * @param caseSensitive <code>true<code> if has to do case sensitive at each search or <code>false</code> if not
+     * @param start_position the initial position used by the search
+     * @param end_position the final position used by the search 
+     * 
+     * @return An integer value >= 0
+     * 
+     * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+     */
+    public static int numberOfOccurrencesOfSubStringInStringBetweenPositions(String str, String subStr, boolean caseSensitive, int start_position, int end_position) {
+    	int aux = start_position;
+    	int numberOfOccurrences = 0;
+    	boolean finish = false;
+    	
+    	if (!caseSensitive) {
+    		str = str.toLowerCase();
+    		subStr = subStr.toLowerCase();
+    	}
+    	
+    	while ((!finish) && ((aux = str.indexOf(subStr, aux)) != -1)) {
+    		aux = aux + subStr.length();
+    	
+    		if (aux > end_position)
+    			finish = true;
+    		else
+    			numberOfOccurrences++;
+    	}
+    	
+    	return numberOfOccurrences;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/TextXMLContent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/TextXMLContent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/TextXMLContent.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.xmlViewer;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+
+/**
+ * Clase que sirve de XMLContent al control XMLViewer a partir de un string con
+ * un fichero XML
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class TextXMLContent implements XMLContent {
+    private String text;
+    private ContentHandler handler;
+
+    /**
+     * Crea un nuevo TextXMLContent.
+     *
+     * @param text Texto con el XML
+     */
+    public TextXMLContent(String text) {
+        this.text = text;
+    }
+
+    /**
+     * @see org.gvsig.utils.xmlViewer.XMLContent#setContentHandler(org.xml.sax.ContentHandler)
+     */
+    public void setContentHandler(ContentHandler handler) {
+        this.handler = handler;
+    }
+
+    /**
+     * @see org.gvsig.utils.xmlViewer.XMLContent#parse()
+     */
+    public void parse() throws SAXException {
+    	XMLReader reader = XMLReaderFactory.createXMLReader();
+    	reader.setFeature("http://xml.org/sax/features/namespaces", false);
+        reader.setContentHandler(handler);
+
+        if (text == null) {
+            text = "<?xml version='1.0'?>";
+        }
+
+        try {
+            reader.parse(new InputSource(
+                    new ByteArrayInputStream(text.getBytes())));
+        } catch (IOException e) {
+            //Una IO exception en un array de bytes???
+        }
+    }
+    
+    public String toString(){
+    	return text;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/TextXMLContent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/sample/Sample.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/sample/Sample.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/sample/Sample.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.xmlViewer.sample;
+
+import javax.swing.JFrame;
+
+import org.gvsig.utils.xmlViewer.MultipleXMLContent;
+import org.gvsig.utils.xmlViewer.XMLViewer;
+import org.xml.sax.SAXException;
+
+public class Sample extends JFrame {
+
+	private javax.swing.JPanel jContentPane = null;
+
+	private XMLViewer XMLViewer = null;
+	/**
+	 * This method initializes XMLViewer	
+	 * 	
+	 * @return com.iver.utiles.xmlViewer.XMLViewer	
+	 */    
+	private XMLViewer getXMLViewer() {
+		if (XMLViewer == null) {
+			XMLViewer = new XMLViewer();
+			XMLViewer.getXmlTree().setRootVisible(false);
+			MultipleXMLContent model = new MultipleXMLContent();
+			model.addXML("<?xml version='1.0'?><hola><adios/></hola>");
+			model.addXML("<?xml version='1.0'?><adios><hola/></adios>");
+			try {
+				XMLViewer.setModel(model);
+			} catch (SAXException e) {
+				e.printStackTrace();
+			}
+		}
+		return XMLViewer;
+	}
+ 	public static void main(String[] args) {
+ 		Sample s = new Sample();
+ 		s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ 		s.show();
+	}
+	/**
+	 * This is the default constructor
+	 */
+	public Sample() {
+		super();
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		this.setSize(300,200);
+		this.setContentPane(getJContentPane());
+		this.setTitle("JFrame");
+	}
+	/**
+	 * This method initializes jContentPane
+	 * 
+	 * @return javax.swing.JPanel
+	 */
+	private javax.swing.JPanel getJContentPane() {
+		if(jContentPane == null) {
+			jContentPane = new javax.swing.JPanel();
+			jContentPane.setLayout(new java.awt.BorderLayout());
+			jContentPane.add(getXMLViewer(), java.awt.BorderLayout.CENTER);
+		}
+		return jContentPane;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/sample/Sample.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLViewer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLViewer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLViewer.java	(revision 42196)
@@ -0,0 +1,488 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 13-sep-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils.xmlViewer;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Stack;
+
+import javax.swing.JPanel;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+
+
+/**
+ * Control que visualiza los contenidos de un XML jerarquicamente en un arbol,
+ * los attributos de cada nodo en una tabla y el texto contenido entre los
+ * tags en un area de texto
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class XMLViewer extends JPanel {
+
+    private javax.swing.JScrollPane jScrollPane = null;
+    private javax.swing.JTree xmlTree = null;
+    private javax.swing.JScrollPane jScrollPane1 = null;
+    private javax.swing.JTable attributeTable = null;
+    private javax.swing.JSplitPane jSplitPane = null;
+    private javax.swing.JScrollPane jScrollPane2 = null;
+    private javax.swing.JTextArea txtContent = null;
+    private javax.swing.JSplitPane jSplitPane1 = null;
+    private DefaultTreeModel treeModel = null;
+    private XMLContent content;
+    private javax.swing.JPanel jPanel = null;
+    private javax.swing.JPanel jPanel1 = null;
+    private String[] namesColumn;
+
+    /**
+     * This is the default constructor
+     */
+    public XMLViewer() {
+        super();
+        initialize();
+    }
+
+    /**
+     * Establece el origen XML del control
+     *
+     * @param content Objeto que lanzar� los eventos del XML a representar
+     *
+     * @throws SAXException Si se produce alg�n error en el parseado del
+     *         contenido
+     */
+    public synchronized void setModel(XMLContent content) throws SAXException {
+        this.content = content;
+        parse();
+    }
+
+    /**
+     * Parsea el modelo rellenando los controles con la informaci�n
+     *
+     * @throws SAXException Si se produce un error de SAX parseando el
+     *         XMLContent
+     */
+    private void parse() throws SAXException {
+        MyContentHandler contentHandler = new MyContentHandler();
+        content.setContentHandler(contentHandler);
+        content.parse();
+        treeModel = new DefaultTreeModel(contentHandler.getRoot());
+        xmlTree.setModel(treeModel);
+        xmlTree.clearSelection();
+		// getJSplitPane().setDividerLocation(1.0); // Por defecto
+
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(new java.awt.BorderLayout());
+        this.add(getJSplitPane1(), java.awt.BorderLayout.CENTER);
+        //this.setPreferredSize(new Dimension(600, 600));
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private javax.swing.JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new javax.swing.JScrollPane();
+            jScrollPane.setViewportView(getJPanel());
+        }
+
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes xmlTree
+     *
+     * @return javax.swing.JTree
+     */
+    public javax.swing.JTree getXmlTree() {
+        if (xmlTree == null) {
+            xmlTree = new javax.swing.JTree();
+            xmlTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
+
+					public void valueChanged(
+                        javax.swing.event.TreeSelectionEvent e) {
+                        DefaultTableModel tableModel = new DefaultTableModel();
+                        for (int i=0;i<namesColumn.length;i++){
+                        	tableModel.addColumn(namesColumn[i]);
+                        }
+
+                        Node selected = (Node) e.getPath().getLastPathComponent();
+                        xmlTree.expandPath(e.getPath());
+                        HashMap map = selected.attributes;
+                        boolean hasAtts = false;
+                        Iterator i = map.keySet().iterator();
+
+                        while (i.hasNext()) {
+                            hasAtts = true;
+
+                            Object key = i.next();
+                            tableModel.addRow(new Object[] { key, map.get(key) });
+                        }
+
+                        getAttributeTable().setModel(tableModel);
+                        getAttributeTable().getTableHeader().setVisible(true);
+
+                        if (selected.content == null) {
+                            getTxtContent().setVisible( false);
+                        } else {
+                        	getTxtContent().setVisible(true);
+                        	getTxtContent().setText(selected.content);
+                        	getTxtContent().setEditable( false);
+                        	getJSplitPane().setDividerLocation(0);//(jSplitPane.getHeight());
+                        }
+
+                    }
+                });
+        }
+        xmlTree.setShowsRootHandles(true);
+        xmlTree.setExpandsSelectedPaths(true);
+        // xmlTree.setToggleClickCount(1);
+        return xmlTree;
+    }
+
+    /**
+     * This method initializes attributeTable
+     *
+     * @return javax.swing.JTable
+     */
+    private javax.swing.JTable getAttributeTable() {
+        if (attributeTable == null) {
+            attributeTable = new javax.swing.JTable();
+            attributeTable.getTableHeader().setVisible(true);
+        }
+
+        return attributeTable;
+    }
+
+    /**
+     * This method initializes jScrollPane1
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private javax.swing.JScrollPane getJScrollPane1() {
+        if (jScrollPane1 == null) {
+            jScrollPane1 = new javax.swing.JScrollPane();
+            jScrollPane1.setViewportView(getAttributeTable());
+        }
+
+        return jScrollPane1;
+    }
+
+    /**
+     * This method initializes jSplitPane
+     *
+     * @return javax.swing.JSplitPane
+     */
+    private javax.swing.JSplitPane getJSplitPane() {
+        if (jSplitPane == null) {
+            jSplitPane = new javax.swing.JSplitPane();
+            jSplitPane.setTopComponent(getJScrollPane1());
+            jSplitPane.setBottomComponent(getJScrollPane2());
+            jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
+            //jSplitPane.setOrientation(javax.swing.JSplitPane.HORIZONTAL_SPLIT);
+            jSplitPane.setDividerLocation(0.9);
+            jSplitPane.setResizeWeight(0.9);
+            jSplitPane.setDividerSize(5);
+        }
+
+        return jSplitPane;
+    }
+
+    /**
+     * This method initializes jScrollPane2
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private javax.swing.JScrollPane getJScrollPane2() {
+        if (jScrollPane2 == null) {
+            jScrollPane2 = new javax.swing.JScrollPane();
+            jScrollPane2.setViewportView(getTxtContent());
+        }
+
+        return jScrollPane2;
+    }
+
+    /**
+     * This method initializes txtContent
+     *
+     * @return javax.swing.JTextArea
+     */
+    private javax.swing.JTextArea getTxtContent() {
+        if (txtContent == null) {
+            txtContent = new javax.swing.JTextArea();
+        }
+
+        return txtContent;
+    }
+
+    /**
+     * This method initializes jSplitPane1
+     *
+     * @return javax.swing.JSplitPane
+     */
+    private javax.swing.JSplitPane getJSplitPane1() {
+        if (jSplitPane1 == null) {
+        	jSplitPane1 = new javax.swing.JSplitPane();
+        	jSplitPane1.setLeftComponent(getJScrollPane());
+        	jSplitPane1.setRightComponent(getJSplitPane());
+            jSplitPane1.setDividerSize(5);
+            jSplitPane1.setDividerLocation(0.3);
+            jSplitPane1.setResizeWeight(0.2);
+        }
+
+        return jSplitPane1;
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private javax.swing.JPanel getJPanel() {
+        if (jPanel == null) {
+            jPanel = new javax.swing.JPanel();
+            jPanel.setLayout(new java.awt.BorderLayout());
+            jPanel.add(getXmlTree(), java.awt.BorderLayout.CENTER);
+        }
+
+        return jPanel;
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    /* private javax.swing.JPanel getJPanel1() {
+        if (jPanel1 == null) {
+            jPanel1 = new javax.swing.JPanel();
+            jPanel1.setLayout(new java.awt.BorderLayout());
+            jPanel1.add(getAttributeTable(), java.awt.BorderLayout.CENTER);
+        }
+
+        return jPanel1;
+    } */
+
+    /**
+     * Clase nodo que almacena los datos de cada nodo de un XML
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class Node extends DefaultMutableTreeNode {
+        public HashMap attributes = new HashMap();
+        public String content;
+        public String name;
+
+        /**
+         * Representaci�n de texto de este objeto
+         *
+         * @return String
+         */
+        public String toString() {
+            return name;
+        }
+    }
+
+    /**
+     * Handler que recibe los SAXEvents del XMLContent y se guarda la
+     * informaci�n de forma jer�rquica en objetos Node
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class MyContentHandler implements ContentHandler {
+        private Stack node = new Stack();
+        private boolean betweenTags = false;
+        private Node root = null;
+
+        /**
+         * @see org.xml.sax.ContentHandler#endDocument()
+         */
+        public void endDocument() throws SAXException {
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#startDocument()
+         */
+        public void startDocument() throws SAXException {
+            root = new Node();
+            node.push(root);
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#characters(char[], int, int)
+         */
+        public void characters(char[] ch, int start, int length)
+            throws SAXException {
+            if (!betweenTags) {
+                return;
+            }
+
+            Node actual = (Node) node.peek();
+            actual.content = new String(ch, start, length).trim();
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int,
+         *      int)
+         */
+        public void ignorableWhitespace(char[] ch, int start, int length)
+            throws SAXException {
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
+         */
+        public void endPrefixMapping(String prefix) throws SAXException {
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
+         */
+        public void skippedEntity(String name) throws SAXException {
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
+         */
+        public void setDocumentLocator(Locator locator) {
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String,
+         *      java.lang.String)
+         */
+        public void processingInstruction(String target, String data)
+            throws SAXException {
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String,
+         *      java.lang.String)
+         */
+        public void startPrefixMapping(String prefix, String uri)
+            throws SAXException {
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#endElement(java.lang.String,
+         *      java.lang.String, java.lang.String)
+         */
+        public void endElement(String namespaceURI, String localName,
+            String qName) throws SAXException {
+            Node n = (Node) node.pop();
+            ((Node) node.peek()).add(n);
+            betweenTags = false;
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#startElement(java.lang.String,
+         *      java.lang.String, java.lang.String, org.xml.sax.Attributes)
+         */
+        public void startElement(String namespaceURI, String localName,
+            String qName, Attributes atts) throws SAXException {
+            Node nuevo = new Node();
+            nuevo.name = qName;
+
+            for (int i = 0; i < atts.getLength(); i++) {
+                nuevo.attributes.put(atts.getQName(i), atts.getValue(i));
+            }
+
+            node.push(nuevo);
+            betweenTags = true;
+        }
+
+        /**
+         * Obtiene la raiz del arbol generado o null si no se ha realizado
+         * ning�n parseado
+         *
+         * @return
+         */
+        public Node getRoot() {
+            return root;
+        }
+    }
+public void setNamesColumn(String[] names){
+	namesColumn=names;
+}
+}
+
+//  @jve:visual-info  decl-index=0 visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLViewer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/MultipleXMLContent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/MultipleXMLContent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/MultipleXMLContent.java	(revision 42196)
@@ -0,0 +1,255 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.xmlViewer;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+
+/**
+ * XMLContent al que se le pueden a�adir varios ficheros XML en forma de String
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class MultipleXMLContent implements XMLContent {
+    private ContentHandler handler;
+    private ArrayList xmls = new ArrayList();
+
+    /**
+     * A�ade un fichero XML al modelo
+     *
+     * @param xmlContent String con el contenido xml
+     */
+    public void addXML(String xmlContent) {
+        xmls.add(xmlContent);
+    }
+
+    /**
+     * @see org.gvsig.utils.xmlViewer.XMLContent#setContentHandler(org.xml.sax.ContentHandler)
+     */
+    public void setContentHandler(ContentHandler handler) {
+        this.handler = handler;
+    }
+
+    /**
+     * Genera un evento de startDocument, luego genera todos los eventos de los
+     * XML que han sido a�adidos a la clase filtrando los startDocument y
+     * endDocument de cada uno de  ellos y luego genera un endDocument
+     *
+     * @see org.gvsig.utils.xmlViewer.XMLContent#parse()
+     */
+    public void parse() throws SAXException {
+   	XMLReader reader;
+
+        //Empieza el documento
+        handler.startDocument();
+
+        for (int i = 0; i < xmls.size(); i++) {
+            String text = (String) xmls.get(i);
+
+            //Handler que filtra los eventos de startDocument y end Document
+            FilterHandler filter = new FilterHandler();
+            filter.setHandler(handler);
+
+            //Generamos los eventos del XML i-�simo
+            reader = XMLReaderFactory.createXMLReader();
+            reader.setFeature("http://xml.org/sax/features/namespaces", false);
+            reader.setContentHandler(filter);
+
+            if (text == null) {
+                continue;
+            }
+
+            try {
+                reader.parse(new InputSource(
+                        new ByteArrayInputStream(text.getBytes())));
+            } catch (IOException e) {
+                //Una IO exception en un array de bytes???
+            }
+        }
+
+        //Finalizamos el documento
+        handler.endDocument();
+    }
+
+    /**
+     * Manejador que delega en otro manejador todos los eventos excepto el
+     * startDocument y el endDocument. "Filtra" los eventos de startDocument y
+     * endDocument
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class FilterHandler implements ContentHandler {
+        private ContentHandler handler;
+
+        /**
+         * Establece el handler al que se le van a filtrar los eventos de
+         * comienzo y fin de documento
+         *
+         * @param handler The handler to set.
+         */
+        public void setHandler(ContentHandler handler) {
+            this.handler = handler;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         * @param arg1
+         * @param arg2
+         *
+         * @throws SAXException
+         */
+        public void characters(char[] arg0, int arg1, int arg2)
+            throws SAXException {
+            handler.characters(arg0, arg1, arg2);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @throws SAXException
+         */
+        public void endDocument() throws SAXException {
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         * @param arg1
+         * @param arg2
+         *
+         * @throws SAXException
+         */
+        public void endElement(String arg0, String arg1, String arg2)
+            throws SAXException {
+            handler.endElement(arg0, arg1, arg2);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         *
+         * @throws SAXException
+         */
+        public void endPrefixMapping(String arg0) throws SAXException {
+            handler.endPrefixMapping(arg0);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         * @param arg1
+         * @param arg2
+         *
+         * @throws SAXException
+         */
+        public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
+            throws SAXException {
+            handler.ignorableWhitespace(arg0, arg1, arg2);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         * @param arg1
+         *
+         * @throws SAXException
+         */
+        public void processingInstruction(String arg0, String arg1)
+            throws SAXException {
+            handler.processingInstruction(arg0, arg1);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         */
+        public void setDocumentLocator(Locator arg0) {
+            handler.setDocumentLocator(arg0);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         *
+         * @throws SAXException
+         */
+        public void skippedEntity(String arg0) throws SAXException {
+            handler.skippedEntity(arg0);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @throws SAXException
+         */
+        public void startDocument() throws SAXException {
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         * @param arg1
+         * @param arg2
+         * @param arg3
+         *
+         * @throws SAXException
+         */
+        public void startElement(String arg0, String arg1, String arg2,
+            Attributes arg3) throws SAXException {
+            handler.startElement(arg0, arg1, arg2, arg3);
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param arg0
+         * @param arg1
+         *
+         * @throws SAXException
+         */
+        public void startPrefixMapping(String arg0, String arg1)
+            throws SAXException {
+            handler.startPrefixMapping(arg0, arg1);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/MultipleXMLContent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLContent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLContent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLContent.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.xmlViewer;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+
+/**
+ * Interfaz que surte de datos al control XMLViewer
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface XMLContent {
+    /**
+     * Mediante este m�todo el control se registra como handler de los eventos
+     * SAX disparados en el evento parse
+     *
+     * @param handler Handler de los eventos del m�todo parse que meter� toda
+     *        la informaci�n en el control
+     */
+    public void setContentHandler(ContentHandler handler);
+
+    /**
+     * Debe de lanzar los eventos SAX del contenido XML que representa
+     *
+     * @throws SAXException Si se produce alg�n error relacionado con los
+     *         eventos
+     */
+    public void parse() throws SAXException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlViewer/XMLContent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/JEPUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/JEPUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/JEPUtilities.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class JEPUtilities {
+    /**
+     * Transforma una expresion en funcion de variables con nombre de la forma
+     * xix  (donde i es un n�mero cualquiera) en una expresi�n donde dichas
+     * variables han sido sustituidas por los valores que se pasan como
+     * par�metros.
+     *
+     * @param expression Expresion en funcion de xi
+     * @param values Valores que toman las distintas variables x
+     * @param cadena cadena[i] = true si xi es alfanum�rica y false en caso
+     *        contrario
+     *
+     * @return La nueva expresion
+     */
+    public static String fillExpression(String expression, String[] values,
+        boolean[] cadena) {
+        String expresionReal = expression;
+
+        for (int i = 0; i < values.length; i++) {
+            if (cadena[i]) {
+                expresionReal = expresionReal.replaceAll("x" + i + "x",
+                        "\"" + values[i] + "\"");
+            } else {
+                expresionReal = expresionReal.replaceAll("x" + i + "x",
+                        values[i]);
+            }
+        }
+
+        return expresionReal;
+    }
+
+    /*
+     * DOCUMENT ME!
+     *
+     * @param o DOCUMENT ME!
+     * @param type DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     *
+     * @throws IllegalStateException DOCUMENT ME!
+     *
+       public static String getOrdinalValue(Object o, int type) {
+               switch (type) {
+               case FRecordset.STRING:
+                       return (String) o;
+               case FRecordset.DECIMAL:
+               case FRecordset.INTEGER:
+                       return ((Number) o).toString();
+               case FRecordset.DATE:
+                       return new Long(((Date) o).getTime()).toString();
+               case FRecordset.BOOLEAN:
+                       if (((Boolean) o).booleanValue()) {
+                               return "1";
+                       } else {
+                               return "0";
+                       }
+               }
+               throw new IllegalStateException("No se conoce el tipo del campo");
+       }
+     */
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/JEPUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExtentsHistory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExtentsHistory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExtentsHistory.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Clase que representa un array circular de rect�ngulos
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ExtentsHistory {
+    private int NUMREC;
+    private Rectangle2D.Double[] extents;
+    private int num = 0;
+
+    /**
+     * Creates a new ExtentsHistory object.
+     */
+    public ExtentsHistory() {
+        NUMREC = 4;
+        extents = new Rectangle2D.Double[NUMREC];
+    }
+
+    /**
+     * Creates a new ExtentsHistory object.
+     *
+     * @param numEntries Numero de entradas que se guardan en el historico de
+     *        rect�ngulos, por defecto 20
+     */
+    public ExtentsHistory(int numEntries) {
+        NUMREC = numEntries;
+    }
+
+    /**
+     * Pone un nuevo rect�ngulo al final del array
+     *
+     * @param ext Rect�ngulo que se a�ade al hist�rico
+     */
+    public void put(Rectangle2D.Double ext) {
+        if ((ext != null) && ((num < 1) || (ext != extents[num - 1]))) {
+            if (num < (NUMREC)) {
+                extents[num] = ext;
+                num = num + 1;
+            } else {
+                for (int i = 0; i < (NUMREC - 1); i++) {
+                    extents[i] = extents[i + 1];
+                }
+
+                extents[num - 1] = ext;
+            }
+        }
+    }
+
+    /**
+     * Devuelve true si hay alg�n rect�ngulo en el hist�rico
+     *
+     * @return true o false en caso de que haya o no haya rect�ngulos
+     */
+    public boolean hasPrevious() {
+        return num > 0;
+    }
+
+    /**
+     * Obtiene el �ltimo rect�ngulo que se a�adi� al hist�rico
+     *
+     * @return Ultimo rect�ngulo a�adido
+     */
+    public Rectangle2D.Double get() {
+        Rectangle2D.Double ext = extents[num - 1];
+
+        return ext;
+    }
+
+    /**
+     * Devuelve el �ltimo rect�ngulo del hist�rico y lo elimina del mismo
+     *
+     * @return Ultimo rect�ngulo a�adido
+     */
+    public Rectangle2D.Double removePrev() {
+        Rectangle2D.Double ext = extents[num - 1];
+        num = num - 1;
+
+        return ext;
+    }
+}
+
+/*
+   public class Extents{
+           private final int NUMREC=20;
+           private Rectangle2D.Double[] extents;
+           private int num=0;
+           public Extents(){
+             extents = new Rectangle2D.Double[NUMREC];
+           }
+           public void put (Rectangle2D.Double ext){
+           if((ext!=null)&&((num<1)||(ext!=extents[num-1]))){
+            if (num<(NUMREC)){
+             extents[num]=ext;
+             num=num+1;
+            }else{
+                    for (int i=0;i<(NUMREC-1);i++){
+                            extents[i]=extents[i+1];
+                    }
+                    extents[num-1]=ext;
+            }
+           }
+           }
+
+           public Rectangle2D.Double get(){
+                   if(num>1){
+                   Rectangle2D.Double ext = extents[num-2];
+                     return ext;
+                   }
+
+             return null;
+           }
+           public Rectangle2D.Double getPrev(){
+                           if(num>1){
+                           Rectangle2D.Double ext = extents[num-2];
+                           num=num-1;
+                           return ext;
+                           }
+
+                     return null;
+                   }
+     }
+ */

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExtentsHistory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingListener.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.save;
+
+import java.util.EventListener;
+
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * The listener object created from that class is then registered with a
+ * component using the component's <code>addAfterSavingListener</code> 
+ * method. A save event is generated when an object that provides support of notification
+ * about saving files, has save a file. The relevant method in the listener 
+ * object is then invoked, and the <code>SaveEvent</code> is passed to it.
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public interface AfterSavingListener extends EventListener {
+	/**
+     * Invoked after saving a file.
+     * See the class description of {@link SaveEvent SaveEvent} for a definition of 
+     * has saved an event.
+     */
+    public void afterSaving(SaveEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingListener.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.save;
+
+import java.util.EventListener;
+
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * The listener object created from that class is then registered with a
+ * component using the component's <code>addBeforeSavingListener</code> 
+ * method. A save event is generated when an object that provides support of notification
+ * about saving files, is going to save a file. The relevant method in the listener 
+ * object is then invoked, and the <code>SaveEvent</code> is passed to it.
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public interface BeforeSavingListener extends EventListener {
+	/**
+     * Invoked after saving a file.
+     * See the class description of {@link SaveEvent SaveEvent} for a definition of 
+     * is going to save an event.
+     */
+    public void beforeSaving(SaveEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/SaveEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/SaveEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/SaveEvent.java	(revision 42196)
@@ -0,0 +1,139 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.save;
+
+import java.io.File;
+import java.util.EventObject;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * Event which indicates that a file is going to be saved, or has been saved.
+ *
+ * @see BeforeSavingListener
+ * @see AfterSavingListener
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class SaveEvent extends EventObject {
+	private static final long serialVersionUID = -4477418408438214208L;
+
+	/**
+     * Determines that's going to save a file.
+     */
+    public static final short BEFORE_SAVING = 0;
+
+    /**
+     * Determines that has saved a file.
+     */
+    public static final short AFTER_SAVING = 1;
+
+    /**
+     * Identifies the type of this event.
+     */
+    private short id;
+
+    /**
+     * File to be saved or saved.
+     */
+    private File file;
+
+    /**
+     * <p>Creates a new <code>SaveEvent</code> instance.</p>
+     * 
+     * @param source 
+     * @param id identifies this event
+     * @param file path of the associated file
+     */
+    public SaveEvent(Object source, short id, File file) {
+		super(source);
+		this.id = id;
+		this.file = file;
+	}
+
+    /**
+     * Returns a String representation of this EventObject.
+     *
+     * @return  A a String representation of this EventObject.
+     */
+    public String toString() {
+        return getClass().getName() + " [" + paramString() + "] on " + (source != null? source.getClass().toString() : "");
+    }
+
+    /**
+     * Returns a string representing the kind of this <code>Event</code>.
+     * 
+     * @return  a string representation of this event
+     */
+    protected String paramString() {
+    	String s_id = null;
+    	
+    	switch(id) {
+    		case BEFORE_SAVING:
+    			s_id = "BEFORE SAVE";
+    			break;
+    		case AFTER_SAVING:
+    			s_id = "AFTER SAVE";
+    			break;
+    	}
+
+        return "ID: " + s_id + " File Absolute Path: " + file.getAbsolutePath();
+    }
+
+    /**
+     * Returns the event type.
+     */
+    public int getID() {
+        return id;
+    }
+
+    /**
+     * Gets the file saved or going to be saved.
+     * 
+     * @return the referenced file
+     */
+    public File getFile() {
+    	return file;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/SaveEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingAdapter.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.save;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * An abstract adapter class for receiving save file events.
+ * The methods in this class are empty. This class exists as
+ * convenience for creating listener objects.
+ * <P>
+ * Extend this class to create a <code>SaveEvent</code> listener 
+ * and override the methods for the events of interest. (If you implement the 
+ * <code>AfterSavingListener</code> interface, you have to define all of
+ * the methods in it. This abstract class defines null methods for them
+ * all, so you can only have to define methods for events you care about.)
+ * <P>
+ * Create a listener object using the extended class and then register it with 
+ * a component using the component's <code>addAfterSavingListener</code> 
+ * method. When an object that provides support of notification
+ * about has saved a file,
+ * the relevant method in the listener object is invoked,
+ * and the <code>SaveEvent</code> is passed to it.
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ *
+ * @see SaveEvent
+ * @see AfterSavingListener
+ */
+public abstract class AfterSavingAdapter implements AfterSavingListener {
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.utiles.save.AfterSavingListener#afterSaving(com.iver.utiles.save.SaveEvent)
+	 */
+    public abstract void afterSaving(SaveEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/AfterSavingAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingAdapter.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.save;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/**
+ * An abstract adapter class for receiving save file events.
+ * The methods in this class are empty. This class exists as
+ * convenience for creating listener objects.
+ * <P>
+ * Extend this class to create a <code>SaveEvent</code> listener 
+ * and override the methods for the events of interest. (If you implement the 
+ * <code>BeforeSavingListener</code> interface, you have to define all of
+ * the methods in it. This abstract class defines null methods for them
+ * all, so you can only have to define methods for events you care about.)
+ * <P>
+ * Create a listener object using the extended class and then register it with 
+ * a component using the component's <code>addBeforeSavingListener</code> 
+ * method. When an object that provides support of notification
+ * about saving files, is going to save a file,
+ * the relevant method in the listener object is invoked,
+ * and the <code>SaveEvent</code> is passed to it.
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ *
+ * @see SaveEvent
+ * @see BeforeSavingListener
+ */
+public abstract class BeforeSavingAdapter implements BeforeSavingListener {
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.utiles.save.BeforeSavingListener#beforeSaving(com.iver.utiles.save.SaveEvent)
+	 */
+    public abstract void beforeSaving(SaveEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/save/BeforeSavingAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLException.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import org.gvsig.tools.exception.BaseException;
+
+public abstract class XMLException extends BaseException {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/XMLException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xml/XMLEncodingUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xml/XMLEncodingUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xml/XMLEncodingUtils.java	(revision 42196)
@@ -0,0 +1,243 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.xml;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * A set of methods to detect XML encoding. The class is able to autodetect
+ * certain encodings, and it reads the XML header for the rest of encodings.
+ * 
+ * @author C�sar Mart�nez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public class XMLEncodingUtils {
+	InputStream _is;
+	
+	/**
+	 * Creates a new XMLEncodingUtils object.
+	 * 
+	 * @param is An InputStream connected to the XML file to process.
+	 */
+	public XMLEncodingUtils(InputStream is) {
+		if (is == null)
+			throw new IllegalArgumentException();
+		_is = is;
+	}
+	
+	/**
+	 * Gets the encoding of the XML file.
+	 * 
+	 * The following encodings can be detected: UTF-32BE, UTF-32LE,
+	 * UTF-16BE, UTF-16-LE, UTF-8. The rest of the encodings are
+	 * read from the XML header.
+	 * 
+	 * @return Returns the encoding of the XML file, or null if the
+	 * encoding couldn't be correctly detected or read from the XML
+	 * header.
+	 */
+	public String getEncoding() {
+		int srcCount = 0;
+		String enc=null;
+		char[] srcBuf = new char[128];
+		
+		// read four bytes 
+		int chk = 0;
+		try {
+			while (srcCount < 4) {
+				int i = _is.read();
+				if (i == -1)
+					break;
+				chk = (chk << 8) | i;
+				srcBuf[srcCount++] = (char) i;
+			}
+			
+			if (srcCount == 4) {
+				switch (chk) {
+				case 0x00000FEFF :
+					enc = "UTF-32BE";
+					srcCount = 0;
+					break;
+					
+				case 0x0FFFE0000 :
+					enc = "UTF-32LE";
+					srcCount = 0;
+					break;
+					
+				case 0x03c :
+					enc = "UTF-32BE";
+					srcBuf[0] = '<';
+					srcCount = 1;
+					break;
+					
+				case 0x03c000000 :
+					enc = "UTF-32LE";
+					srcBuf[0] = '<';
+					srcCount = 1;
+					break;
+					
+				case 0x0003c003f :
+					enc = "UTF-16BE";
+					srcBuf[0] = '<';
+					srcBuf[1] = '?';
+					srcCount = 2;
+					break;
+					
+				case 0x03c003f00 :
+					enc = "UTF-16LE";
+					srcBuf[0] = '<';
+					srcBuf[1] = '?';
+					srcCount = 2;
+					break;
+					
+				case 0x03c3f786d :
+					while (true) {
+						int i = _is.read();
+						if (i == -1)
+							break;
+						srcBuf[srcCount++] = (char) i;
+						if (i == '>') {
+							String s = new String(srcBuf, 0, srcCount);
+							int i0 = s.indexOf("encoding");
+							if (i0 != -1) {
+								while (s.charAt(i0) != '"'
+									&& s.charAt(i0) != '\'')
+									i0++;
+								char deli = s.charAt(i0++);
+								int i1 = s.indexOf(deli, i0);
+								enc = s.substring(i0, i1);
+							}
+							break;
+						}
+					}
+					
+				default :
+					if ((chk & 0x0ffff0000) == 0x0FEFF0000) {
+						enc = "UTF-16BE";
+						srcBuf[0] =
+							(char) ((srcBuf[2] << 8) | srcBuf[3]);
+						srcCount = 1;
+					}
+					else if ((chk & 0x0ffff0000) == 0x0fffe0000) {
+						enc = "UTF-16LE";
+						srcBuf[0] =
+							(char) ((srcBuf[3] << 8) | srcBuf[2]);
+						srcCount = 1;
+					}
+					else if ((chk & 0x0ffffff00) == 0x0EFBBBF00) {
+						enc = "UTF-8";
+						srcBuf[0] = srcBuf[3];
+						srcCount = 1;
+					}
+				}
+			}
+		}
+		catch (IOException ex) {
+			return null;
+		}
+		return enc;
+	}
+	
+	/**
+	 * Gets an InputStreamReader for the provided XML file.
+	 * The reader uses the right encoding, as specified in
+	 * the XML header (or autodetected). 
+	 * 
+	 * @return A reader which uses the right encoding, or null
+	 * if the encoding couldn't be correctly detected or read
+	 * from the XML header.
+	 */
+	public InputStreamReader getReader() {
+		String encoding = getEncoding();
+		if (encoding==null)
+			return null;
+		try {
+			return new InputStreamReader(_is, encoding);
+		} catch (UnsupportedEncodingException e) {
+			return null;
+		}
+	}
+	
+	/**
+	 * Gets an InputStreamReader for the provided XML file.
+	 * The reader uses the right encoding, as specified in
+	 * the XML header (or autodetected).
+	 * 
+	 * @param is An InputStream connected to the XML file to process
+	 * @return A reader for the provided XML file.
+	 * @see getReader()
+	 */
+	public static InputStreamReader getReader(InputStream is) {
+		XMLEncodingUtils util = new XMLEncodingUtils(is);
+		return util.getReader();
+	}
+
+	/**
+	 * Gets the character encoding of the XML file.
+	 * 
+	 * @param is An InputStream connected to the XML file to process
+	 * @see getEncoding()
+	 * @return The encoding of the file
+	 */
+	public static String getEncoding(InputStream is) {
+		XMLEncodingUtils util = new XMLEncodingUtils(is);
+		return util.getEncoding();
+	}
+	
+	/**
+	 * Gets an InputStreamReader for the provided XML file.
+	 * The reader uses the right encoding, as specified in
+	 * the XML header (or autodetected).
+	 * 
+	 * @param file The XML file to process
+	 * @return A reader for the provided XML file.
+	 * @see getReader()
+	 */
+	public static InputStreamReader getReader(File file) throws FileNotFoundException {
+		BufferedInputStream bs = new BufferedInputStream(new FileInputStream(file));
+		XMLEncodingUtils util = new XMLEncodingUtils(bs);
+		return util.getReader();
+	}
+	
+	/**
+	 * Gets the character encoding of the XML file.
+	 * 
+	 * @param File The XML file to process
+	 * @see getEncoding()
+	 * @return The encoding of the file
+	 * @throws FileNotFoundException 
+	 */
+	public static String getEncoding(File file) throws FileNotFoundException {
+		BufferedInputStream bs = new BufferedInputStream(new FileInputStream(file));
+		XMLEncodingUtils util = new XMLEncodingUtils(bs);
+		return util.getEncoding();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xml/XMLEncodingUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer.java	(revision 42196)
@@ -0,0 +1,331 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.bigfile;
+
+import java.io.IOException;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.CharBuffer;
+import java.nio.DoubleBuffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+import java.nio.LongBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.ShortBuffer;
+import java.nio.channels.FileChannel;
+
+/**
+ * @author Fjp
+ *
+ * Clase para trabajar con ficheros grandes. Mapea solo un trozo
+ * de fichero en memoria, y cuando intentas acceder fuera de esa
+ * zona, se ocupa de leer autom�ticamente el trozo que le falta.
+ */
+public class BigByteBuffer {
+
+    private static long DEFAULT_SIZE = 50*1024*1024; // 50 Megas m�ximo
+    
+    MappedByteBuffer bb;
+    FileChannel fc;
+    long minAbs, maxAbs, posAbs;
+    int minRel,  maxRel, posRel;
+    long sizeChunk, amountMem;
+    long fileSize;
+    FileChannel.MapMode mode;
+    
+    /**
+     * Revisa la posici�n absoluta, y si hace falta, carga el buffer
+     * con la parte de fichero que toca.
+     * @throws IOException 
+     */
+    private void prepareBuffer(long posActual, int numBytesToRead) 
+    {
+        long desiredPos = posActual + numBytesToRead;
+        if ((desiredPos > maxAbs) || (posActual < minAbs))
+        {
+            // Quiero leer fuera:
+            sizeChunk = Math.min(fileSize-posActual, amountMem);
+            try {
+                ByteOrder lastOrder = bb.order();
+                bb = fc.map(mode, posActual, sizeChunk);
+                minAbs = posActual;
+                maxAbs = sizeChunk + posActual;
+                bb.order(lastOrder);
+                // System.out.println("BigByteBuffer: min=" + minAbs 
+                //     + " maxAbs=" + maxAbs + " posAbs = " + posAbs);
+                
+            } catch (IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+                
+        }
+        // Dejamos posAbs apuntando a donde va a quedar
+        // "a priori", antes de leer de verdad, que se hace
+        // al salir de esta funci�n.
+        posAbs = desiredPos;
+        
+    }
+    
+    public BigByteBuffer(FileChannel fc, FileChannel.MapMode mode, long amountMem) throws IOException
+    {
+        this.amountMem = amountMem;
+        this.fc = fc;
+        this.fileSize = fc.size();
+        this.mode = mode;
+        sizeChunk = Math.min(fc.size(), amountMem);
+        bb = fc.map(mode, 0L, sizeChunk);
+        minAbs = 0;
+        maxAbs = sizeChunk;
+    }
+    public BigByteBuffer(FileChannel fc, FileChannel.MapMode mode) throws IOException
+    {
+        this.amountMem = DEFAULT_SIZE;
+        this.fc = fc;
+        this.fileSize = fc.size();
+        this.mode = mode;
+        sizeChunk = Math.min(fc.size(), amountMem);
+        bb = fc.map(mode, 0L, sizeChunk);
+        minAbs = 0;
+        maxAbs = sizeChunk;
+    }
+
+    
+    public synchronized byte get() {
+        prepareBuffer(posAbs,1);
+        return bb.get();
+    }
+    public synchronized ByteBuffer get(byte[] dst)
+    {
+        prepareBuffer(posAbs, dst.length);
+        return bb.get(dst);
+    }
+
+    public synchronized char getChar() {
+        prepareBuffer(posAbs,2);
+        return bb.getChar();
+    }
+
+    public synchronized double getDouble() {
+        prepareBuffer(posAbs,8);
+        return bb.getDouble();
+    }
+
+    public synchronized float getFloat() {
+        prepareBuffer(posAbs,4);
+        return bb.getFloat();
+    }
+
+    public synchronized int getInt() {
+        prepareBuffer(posAbs,4);
+        return bb.getInt();
+    }
+
+    public synchronized long getLong() {
+        prepareBuffer(posAbs,8);
+        return bb.getLong();
+    }
+
+    public synchronized short getShort() {
+        prepareBuffer(posAbs,2);
+        return bb.getShort();
+    }
+
+    public boolean isDirect() {
+        return bb.isDirect();
+    }
+
+    public synchronized byte get(int index) {
+        prepareBuffer(index,1);
+        return bb.get(index - (int) minAbs);
+    }
+
+    public synchronized char getChar(int index) {
+        prepareBuffer(index,2);
+        return bb.getChar(index - (int) minAbs);
+    }
+
+    public synchronized double getDouble(int index) {
+        prepareBuffer(index,8);
+        return bb.getDouble(index - (int) minAbs);
+    }
+
+    public synchronized float getFloat(int index) {
+        prepareBuffer(index,4);
+        return bb.getFloat(index - (int) minAbs);
+    }
+
+    public synchronized int getInt(int index) {
+        prepareBuffer(index,4);
+        return bb.getInt(index - (int) minAbs);
+    }
+
+    public synchronized long getLong(int index) {
+        prepareBuffer(index,8);
+        return bb.getLong(index - (int) minAbs);
+    }
+
+    public synchronized short getShort(int index) {
+        prepareBuffer(index,2);
+        return bb.getShort(index - (int) minAbs);
+    }
+
+    public ByteBuffer asReadOnlyBuffer() { 
+        return bb.asReadOnlyBuffer();
+    }
+
+    public ByteBuffer compact() {
+        return bb.compact();
+    }
+
+    public ByteBuffer duplicate() {
+        return bb.duplicate();
+    }
+
+    public ByteBuffer slice() {
+        return bb.slice();
+    }
+
+    public synchronized ByteBuffer put(byte b) {
+        prepareBuffer(posAbs,1);
+        return bb.put(b);
+    }
+
+    public synchronized ByteBuffer putChar(char value) {
+        prepareBuffer(posAbs,2);
+        return bb.putChar(value);
+    }
+
+    public synchronized ByteBuffer putDouble(double value) {
+        prepareBuffer(posAbs,8);
+        return bb.putDouble(value);
+    }
+
+    public synchronized ByteBuffer putFloat(float value) {
+        prepareBuffer(posAbs,4);
+        return bb.putFloat(value);
+    }
+
+    public synchronized ByteBuffer putInt(int value) {
+        prepareBuffer(posAbs,4);
+        return bb.putInt(value);
+    }
+
+    public synchronized ByteBuffer put(int index, byte b) {
+        prepareBuffer(index,1);
+        return bb.put(index- (int) minAbs, b);
+    }
+
+    public synchronized ByteBuffer putChar(int index, char value) {
+        prepareBuffer(index,2);
+        return bb.putChar(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putDouble(int index, double value) {
+        prepareBuffer(index,8);
+        return bb.putDouble(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putFloat(int index, float value) {
+        prepareBuffer(index,4);
+        return bb.putFloat(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putInt(int index, int value) {
+        prepareBuffer(index,4);
+        return bb.putInt(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putLong(int index, long value) {
+        prepareBuffer(index,8);
+        return bb.putLong(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putShort(int index, short value) {
+        prepareBuffer(index,2);
+        return bb.putShort(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putLong(long value) {
+        prepareBuffer(posAbs,8);
+        return bb.putLong(value);
+    }
+
+    public synchronized ByteBuffer putShort(short value) {
+        prepareBuffer(posAbs,2);
+        return bb.putShort(value);
+    }
+
+    public CharBuffer asCharBuffer() {
+        return bb.asCharBuffer();
+    }
+
+    public DoubleBuffer asDoubleBuffer() {
+        return bb.asDoubleBuffer();
+    }
+
+    public FloatBuffer asFloatBuffer() {
+        return bb.asFloatBuffer();
+    }
+
+    public IntBuffer asIntBuffer() {
+        return bb.asIntBuffer();
+    }
+
+    public LongBuffer asLongBuffer() {
+        return bb.asLongBuffer();
+    }
+
+    public ShortBuffer asShortBuffer() {
+        return bb.asShortBuffer();
+    }
+
+    public boolean isReadOnly() {
+        return bb.isReadOnly();
+    }
+    
+    public final ByteOrder order()
+    {
+        return bb.order();
+    }
+
+    public final ByteBuffer order(ByteOrder bo)
+    {
+        return bb.order(bo);
+    }
+    public final long position()
+    {
+        return posAbs;
+    }
+    
+    public synchronized final Buffer position(long newPosition)
+    {
+        prepareBuffer(newPosition,0);
+        int relPos = (int) (newPosition - minAbs);
+        // System.out.println("Position=" + newPosition);
+        return bb.position(relPos);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/TestBigByteBuffer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/TestBigByteBuffer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/TestBigByteBuffer.java	(revision 42196)
@@ -0,0 +1,247 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ * 
+ * $Id: TestBigByteBuffer.java 29631 2009-06-29 16:56:19Z jpiera $
+ * $Log$
+ * Revision 1.3  2006-11-06 07:29:59  jaume
+ * organize imports
+ *
+ * Revision 1.2  2006/05/12 12:40:29  fjp
+ * Driver thread-safe. Se evitan errores aleatorios que aparec�an a veces.
+ *
+ * Revision 1.1  2006/01/18 13:01:08  fjp
+ * BigByteBuffer2 que usa solo 8K y es adecuado para los �ndices espaciales
+ *
+ *
+ */
+package org.gvsig.utils.bigfile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.Random;
+
+/**
+ * @author fjp
+ *
+ */
+public class TestBigByteBuffer {
+    File f = new File("D:/Fjp/chiara/plano/vias.shp");
+    FileInputStream fin;
+    FileInputStream fin2;
+    FileChannel channel2;
+
+    BigByteBuffer2 bb;
+    // Hacemos varias pruebas para ver si funciona
+    // exactamente igual que el original
+    static int numPruebas = 50000;
+	
+	public class MyThread extends Thread
+	{
+
+		String name;
+		public MyThread(String string) {
+			name = string;
+
+		}
+
+		public void run() {
+			try {
+				prueba2(name, f, numPruebas);
+			} catch (FileNotFoundException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		
+	}
+
+    /**
+     * @param args
+     * @throws IOException 
+     */
+    public static void main(String[] args) throws IOException {
+        // TODO Auto-generated method stub
+        
+            // prueba1(f, numPruebas);
+    	    TestBigByteBuffer test = new TestBigByteBuffer();
+    	    test.test();
+
+    }
+    
+    public void test() throws IOException
+    {
+        fin2 = new FileInputStream(f);
+        channel2 = fin2.getChannel();
+        bb = new BigByteBuffer2(channel2, 
+                   FileChannel.MapMode.READ_ONLY, 1024*8);
+    	MyThread th = new MyThread("T1:");
+    	th.start();
+    	MyThread th2 = new MyThread("T2: ");
+    	th2.start();
+
+       
+    System.out.println("Fin de la prueba. " + numPruebas + " iteraciones.");
+
+    }
+
+    /**
+     * @param name 
+     * @param f
+     * @param numPruebas
+     * @throws Exception 
+     */
+    private void prueba2(String name, File f, int numPruebas) throws Exception {
+        FileInputStream fin;
+        fin = new FileInputStream(f);
+        // Open the file and then get a channel from the stream
+        FileChannel channel = fin.getChannel();
+        int size = (int) channel.size();
+        // Get the file's size and then map it into memory
+        ByteBuffer bbCorrect = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+           // Chunkeo a 1KB
+        Random rnd = new Random();
+        long t1 = System.currentTimeMillis();
+
+        for (int i=0; i < numPruebas; i++)
+           {
+               int pos = rnd.nextInt(size-10);
+               // pos = 0;
+               bbCorrect.position(pos);
+               int bCorrect = bbCorrect.getInt();
+//            	   bb.position(pos);               
+            	   int bPrueba = bb.getInt(pos);
+               if (bCorrect != bPrueba)
+               {
+                   System.err.println(name + "Error de lectura. " + bCorrect + " " + bPrueba);
+                   throw new Exception("Error con pos=" + pos);
+               }
+               else
+               {
+                   System.out.println(name + "Correcto: pos=" + pos + " byte= " + bPrueba);
+               } 
+               
+           }
+        close(channel2, fin2, bb);
+        long t2 = System.currentTimeMillis();
+        System.out.println("T=" + (t2-t1) + "mseconds");
+    }
+
+    /**
+     * @param f
+     * @param numPruebas
+     * @throws FileNotFoundException
+     * @throws IOException
+     */
+    private static void prueba1(File f, int numPruebas) throws FileNotFoundException, IOException {
+        FileInputStream fin;
+        fin = new FileInputStream(f);
+        // Open the file and then get a channel from the stream
+        FileChannel channel = fin.getChannel();
+        int size = (int) channel.size();
+        // Get the file's size and then map it into memory
+           ByteBuffer bbCorrect = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+           // Chunkeo a 1KB
+        Random rnd = new Random();
+        long t1 = System.currentTimeMillis();
+        FileInputStream fin2 = new FileInputStream(f);
+        FileChannel channel2 = fin2.getChannel();
+        BigByteBuffer bb = new BigByteBuffer(channel2, 
+                   FileChannel.MapMode.READ_ONLY, 1024*1024);
+        for (int i=0; i < numPruebas; i++)
+           {
+               int pos = rnd.nextInt(size-10);
+               // pos = 2;
+               
+               byte bCorrect = bbCorrect.get(pos);
+               byte bPrueba = bb.get(pos);
+               if (bCorrect != bPrueba)
+               {
+                   System.err.println("Error de lectura. " + bCorrect + " " + bPrueba);
+               }
+               else
+               {
+                   // System.out.println("Correcto: pos=" + pos + " byte= " + bPrueba);
+               }
+               
+           }
+        close(channel2, fin2, bb);
+        System.gc();
+        long t2 = System.currentTimeMillis();
+        System.out.println("T=" + (t2-t1) + "mseconds");
+    }
+    
+    static public synchronized void close(FileChannel channel, FileInputStream fin, BigByteBuffer2 bb) throws IOException {
+        IOException ret = null;
+        
+        try {
+            channel.close();
+        } catch (IOException e) {
+            ret = e;
+        } finally {
+            try {
+                fin.close();
+            } catch (IOException e1) {
+                ret = e1;
+            }
+        }
+
+        if (ret != null) {
+            throw ret;
+        }
+        // else // Si todo ha ido bien, preparamos para liberar memoria.
+        //     bb = null;
+    }
+    static public synchronized void close(FileChannel channel, FileInputStream fin, BigByteBuffer bb) throws IOException {
+        IOException ret = null;
+        
+        try {
+            channel.close();
+        } catch (IOException e) {
+            ret = e;
+        } finally {
+            try {
+                fin.close();
+            } catch (IOException e1) {
+                ret = e1;
+            }
+        }
+
+        if (ret != null) {
+            throw ret;
+        }
+        else // Si todo ha ido bien, preparamos para liberar memoria.
+            bb = null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/TestBigByteBuffer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer2.java	(revision 42196)
@@ -0,0 +1,356 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.bigfile;
+
+import java.io.IOException;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.CharBuffer;
+import java.nio.DoubleBuffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+import java.nio.LongBuffer;
+import java.nio.ShortBuffer;
+import java.nio.channels.FileChannel;
+
+/**
+ * @author Fjp
+ *
+ * Clase para trabajar con ficheros grandes. Mapea solo un trozo
+ * de fichero en memoria, y cuando intentas acceder fuera de esa
+ * zona, se ocupa de leer autom�ticamente el trozo que le falta.
+ */
+public class BigByteBuffer2 {
+
+	private static long DEFAULT_SIZE = 60*1024; // 60 Kbytes
+
+    ByteBuffer bb;
+    // byte[] buff = new byte[1024 * 1024];;
+    FileChannel fc;
+    long minAbs, maxAbs, posAbs;
+    int minRel,  maxRel, posRel;
+    long sizeChunk, amountMem;
+    long fileSize;
+    FileChannel.MapMode mode;
+
+    /**
+     * Revisa la posici�n absoluta, y si hace falta, carga el buffer
+     * con la parte de fichero que toca.
+     * @throws IOException
+     */
+    private synchronized void prepareBuffer(long posActual, int numBytesToRead)
+    {
+        long desiredPos = posActual + numBytesToRead;
+        if ((desiredPos > maxAbs) || (posActual < minAbs))
+        {
+            // Quiero leer fuera:
+            sizeChunk = Math.min(fileSize-posActual, amountMem);
+            try {
+                mapFrom(posActual);
+                // System.out.println("BigByteBuffer: min=" + minAbs
+                //     + " maxAbs=" + maxAbs + " posAbs = " + posAbs);
+
+            } catch (IOException e) {
+                e.printStackTrace();
+
+            }
+
+        }
+        // Dejamos posAbs apuntando a donde va a quedar
+        // "a priori", antes de leer de verdad, que se hace
+        // al salir de esta funci�n.
+        posAbs = desiredPos;
+
+    }
+
+    /**
+     * @param posActual
+     * @throws IOException
+     */
+    private synchronized ByteBuffer mapFrom(long newPos) throws IOException {
+        ByteOrder lastOrder = bb.order();
+        // bb = fc.map(mode, newPos, sizeChunk);
+        fc.position(newPos);
+        // bb = ByteBuffer.wrap(buff);
+        // bb = ByteBuffer.allocate((int)sizeChunk);
+        bb.position(0);
+        int numRead = fc.read(bb);
+        bb.position(0);
+        // System.out.println("Mapeo desde " + newPos + " con sizeChunk= " + sizeChunk + " numRead = " + numRead);
+        minAbs = newPos;
+        maxAbs = sizeChunk + newPos;
+        bb.order(lastOrder);
+        return bb;
+    }
+
+    public BigByteBuffer2(FileChannel fc, FileChannel.MapMode mode, long amountMem) throws IOException
+    {
+        this.amountMem = amountMem;
+        // this.buff = new byte[(int) amountMem];
+        this.fc = fc;
+        this.fileSize = fc.size();
+        this.mode = mode;
+        sizeChunk = Math.min(fc.size(), amountMem);
+        // bb = fc.map(mode, 0L, sizeChunk);
+        // bb = ByteBuffer.wrap(buff);
+        bb = ByteBuffer.allocateDirect((int)sizeChunk);
+        int numRead = fc.read(bb);
+        bb.position(0);
+        minAbs = 0;
+        maxAbs = sizeChunk;
+    }
+    public BigByteBuffer2(FileChannel fc, FileChannel.MapMode mode) throws IOException
+    {
+        this.amountMem = DEFAULT_SIZE;
+        this.fc = fc;
+        this.fileSize = fc.size();
+        this.mode = mode;
+        sizeChunk = Math.min(fc.size(), amountMem);
+        // bb = fc.map(mode, 0L, sizeChunk);
+        bb = ByteBuffer.allocateDirect((int)sizeChunk);
+        int numRead = fc.read(bb);
+        bb.position(0);
+        minAbs = 0;
+        maxAbs = sizeChunk;
+    }
+
+
+    public synchronized byte get() {
+        prepareBuffer(posAbs,1);
+        return bb.get();
+    }
+    public synchronized ByteBuffer get(byte[] dst)
+    {
+        prepareBuffer(posAbs, dst.length);
+        return bb.get(dst);
+    }
+
+    public synchronized char getChar() {
+        prepareBuffer(posAbs,2);
+        return bb.getChar();
+    }
+
+    public synchronized double getDouble() {
+        prepareBuffer(posAbs,8);
+        return bb.getDouble();
+    }
+
+    public synchronized float getFloat() {
+        prepareBuffer(posAbs,4);
+        return bb.getFloat();
+    }
+
+    public synchronized int getInt() {
+        prepareBuffer(posAbs,4);
+        return bb.getInt();
+    }
+
+    public synchronized long getLong() {
+        prepareBuffer(posAbs,8);
+        return bb.getLong();
+    }
+
+    public synchronized short getShort() {
+        prepareBuffer(posAbs,2);
+        return bb.getShort();
+    }
+
+    public boolean isDirect() {
+        return bb.isDirect();
+    }
+
+    public synchronized byte get(int index) {
+        prepareBuffer(index,1);
+        return bb.get(index - (int) minAbs);
+    }
+
+    public synchronized char getChar(int index) {
+        prepareBuffer(index,2);
+        return bb.getChar(index - (int) minAbs);
+    }
+
+    public synchronized double getDouble(int index) {
+        prepareBuffer(index,8);
+        return bb.getDouble(index - (int) minAbs);
+    }
+
+    public synchronized float getFloat(int index) {
+        prepareBuffer(index,4);
+        return bb.getFloat(index - (int) minAbs);
+    }
+
+    public synchronized int getInt(int index) {
+        prepareBuffer(index,4);
+        return bb.getInt(index - (int) minAbs);
+    }
+
+    public synchronized long getLong(int index) {
+        prepareBuffer(index,8);
+        return bb.getLong(index - (int) minAbs);
+    }
+
+    public synchronized short getShort(int index) {
+        prepareBuffer(index,2);
+        return bb.getShort(index - (int) minAbs);
+    }
+
+    public ByteBuffer asReadOnlyBuffer() {
+        return bb.asReadOnlyBuffer();
+    }
+
+    public ByteBuffer compact() {
+        return bb.compact();
+    }
+
+    public ByteBuffer duplicate() {
+        return bb.duplicate();
+    }
+
+    public synchronized ByteBuffer slice() {
+        return bb.slice();
+    }
+
+    public synchronized ByteBuffer put(byte b) {
+        prepareBuffer(posAbs,1);
+        return bb.put(b);
+    }
+
+    public synchronized ByteBuffer putChar(char value) {
+        prepareBuffer(posAbs,2);
+        return bb.putChar(value);
+    }
+
+    public synchronized ByteBuffer putDouble(double value) {
+        prepareBuffer(posAbs,8);
+        return bb.putDouble(value);
+    }
+
+    public synchronized ByteBuffer putFloat(float value) {
+        prepareBuffer(posAbs,4);
+        return bb.putFloat(value);
+    }
+
+    public synchronized ByteBuffer putInt(int value) {
+        prepareBuffer(posAbs,4);
+        return bb.putInt(value);
+    }
+
+    public synchronized ByteBuffer put(int index, byte b) {
+        prepareBuffer(index,1);
+        return bb.put(index- (int) minAbs, b);
+    }
+
+    public synchronized ByteBuffer putChar(int index, char value) {
+        prepareBuffer(index,2);
+        return bb.putChar(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putDouble(int index, double value) {
+        prepareBuffer(index,8);
+        return bb.putDouble(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putFloat(int index, float value) {
+        prepareBuffer(index,4);
+        return bb.putFloat(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putInt(int index, int value) {
+        prepareBuffer(index,4);
+        return bb.putInt(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putLong(int index, long value) {
+        prepareBuffer(index,8);
+        return bb.putLong(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putShort(int index, short value) {
+        prepareBuffer(index,2);
+        return bb.putShort(index- (int) minAbs, value);
+    }
+
+    public synchronized ByteBuffer putLong(long value) {
+        prepareBuffer(posAbs,8);
+        return bb.putLong(value);
+    }
+
+    public synchronized ByteBuffer putShort(short value) {
+        prepareBuffer(posAbs,2);
+        return bb.putShort(value);
+    }
+
+    public CharBuffer asCharBuffer() {
+        return bb.asCharBuffer();
+    }
+
+    public DoubleBuffer asDoubleBuffer() {
+        return bb.asDoubleBuffer();
+    }
+
+    public FloatBuffer asFloatBuffer() {
+        return bb.asFloatBuffer();
+    }
+
+    public IntBuffer asIntBuffer() {
+        return bb.asIntBuffer();
+    }
+
+    public LongBuffer asLongBuffer() {
+        return bb.asLongBuffer();
+    }
+
+    public ShortBuffer asShortBuffer() {
+        return bb.asShortBuffer();
+    }
+
+    public boolean isReadOnly() {
+        return bb.isReadOnly();
+    }
+
+    public synchronized final ByteOrder order()
+    {
+        return bb.order();
+    }
+
+    public synchronized final ByteBuffer order(ByteOrder bo)
+    {
+        return bb.order(bo);
+    }
+    public synchronized final long position()
+    {
+        return posAbs;
+    }
+
+    public synchronized final Buffer position(long newPosition)
+    {
+        prepareBuffer(newPosition,0);
+        int relPos = (int) (newPosition - minAbs);
+        if (relPos < 0)
+            System.out.println("Position=" + newPosition);
+        return bb.position(relPos);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/bigfile/BigByteBuffer2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/PostProcessSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/PostProcessSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/PostProcessSupport.java	(revision 42196)
@@ -0,0 +1,166 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+/**
+ * @author fjp
+ *
+ * Clase que recibe las llamadas que tiene que hacer cuando termine
+ * la lectura de proyecto, por ejemplo. Recibir�a algo as� como Clase,
+ * Nombre de funci�n a invocar, Par�metros y Prioridad.
+ * Lo guarda en un array, ordena por prioridad y empieza a invocar.
+ */
+public class PostProcessSupport
+{
+    private static ArrayList callList = new ArrayList();
+    private static class Call
+    {
+        private Object obj;
+        private Method method;
+        private Object[] parameters;
+        private int priority;
+        public Call(Object obj, String strMethod, Object[] parameters, int priority)
+        {
+            this.obj = obj;
+            this.parameters = parameters;
+            Class[] classParams = new Class[parameters.length];
+            for (int i=0; i< parameters.length; i++)
+                classParams[i] = parameters[i].getClass();
+            try {
+                method = obj.getClass().getMethod(strMethod, classParams);
+            } catch (SecurityException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } catch (NoSuchMethodException e) {
+                // Resulta que con getMethod no pilla bien el superinterface VectorialLegend,
+                // as� que lo hacemos manual
+                Method[] list = obj.getClass().getMethods();
+                for (int i=0; i< list.length; i++)
+                {
+                    // System.err.println(list[i].toString());
+                    if (list[i].getName().compareTo(strMethod) == 0)
+                    {
+                        boolean encontrado = true;
+                        Class[] params = list[i].getParameterTypes();
+                        // En cada par�metro del m�todo, miramos si
+                        // el par�metro correspondiente implementa la interfaz
+                        // adecuada.
+                        for (int j=0; j < params.length; j++) // for de los par�metros del m�todo.
+                        {
+                        	// Miramos primero si es de la clase que buscamos, y si no lo es, pasamos
+                        	// a revisar sus interfaces.
+                        	boolean bParamOK = false;
+//                        	if (params[j].getName().compareTo(parameters[j].getClass().getName()) == 0)
+                        	if ( params[j].isInstance(parameters[j]) )
+                        	{
+                        		bParamOK = true;
+                        		continue;
+                        	}
+                            // Interfaces que implementa el par�metro j-�simo que le pasamos.
+                            Class[] theInterfaces = parameters[j].getClass().getInterfaces();
+
+                            for (int k=0; k< theInterfaces.length; k++)
+                            {
+                                // Si alguno de estos interfaces cuadra con lo que
+                                // espera el m�todo, podemos comprobar el siguiente par�metro.
+                                // Si al salir del for externo, encontrado sigue siendo true,
+                                // hemos encontrado el m�todo que busc�bamos.
+                                if (theInterfaces[k].getName().compareTo(params[j].getName()) == 0)
+                                {
+                                    bParamOK = true;
+                                    break;
+                                }
+                            }
+                            if (bParamOK == false)
+                            {
+                                encontrado = false;
+                                break; // Vamos a por otro m�todo
+                            }
+                        }
+                        if (encontrado)
+                        {
+                            method = list[i];
+                            return;
+                        }
+                    }
+                }
+                e.printStackTrace();
+            }
+        }
+
+        public Object executeMethod() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
+        {
+            return method.invoke(obj,parameters);
+        }
+    }
+    public static void addToPostProcess(Object obj, String strMethod, Object[] parameters, int priority)
+    {
+        Call newCall = new Call(obj, strMethod, parameters, priority);
+        callList.add(newCall);
+    }
+    public static void addToPostProcess(Object obj, String strMethod, Object parameter, int priority)
+    {
+        Object[] parameters = new Object[1];
+        parameters[0] = parameter;
+        Call newCall = new Call(obj, strMethod, parameters, priority);
+        callList.add(newCall);
+    }
+
+    private static void orderByPriority()
+    {
+        // TODO
+    }
+    public static void executeCalls()
+    {
+        // TODO: Primero deber�amos ordenar por prioridad
+        // por ahora no lo hago.
+        orderByPriority();
+
+        for (int i=0; i < callList.size(); i++)
+        {
+            Call call = (Call) callList.get(i);
+            try {
+                call.executeMethod();
+            } catch (IllegalArgumentException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } catch (IllegalAccessException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } catch (InvocationTargetException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+        clearList();
+    }
+    public static void clearList()
+    {
+        callList.clear();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/PostProcessSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxUtilities.java	(revision 42196)
@@ -0,0 +1,185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * SyntaxUtilities.java - Utility functions used by syntax colorizing
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+
+import javax.swing.text.Segment;
+import javax.swing.text.TabExpander;
+import javax.swing.text.Utilities;
+
+/**
+ * Class with several utility functions used by jEdit's syntax colorizing
+ * subsystem.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class SyntaxUtilities
+{
+	/**
+	 * Checks if a subregion of a <code>Segment</code> is equal to a
+	 * string.
+	 * @param ignoreCase True if case should be ignored, false otherwise
+	 * @param text The segment
+	 * @param offset The offset into the segment
+	 * @param match The string to match
+	 */
+	public static boolean regionMatches(boolean ignoreCase, Segment text,
+					    int offset, String match)
+	{
+		int length = offset + match.length();
+		char[] textArray = text.array;
+		if(length > text.offset + text.count)
+			return false;
+		for(int i = offset, j = 0; i < length; i++, j++)
+		{
+			char c1 = textArray[i];
+			char c2 = match.charAt(j);
+			if(ignoreCase)
+			{
+				c1 = Character.toUpperCase(c1);
+				c2 = Character.toUpperCase(c2);
+			}
+			if(c1 != c2)
+				return false;
+		}
+		return true;
+	}
+	
+	/**
+	 * Checks if a subregion of a <code>Segment</code> is equal to a
+	 * character array.
+	 * @param ignoreCase True if case should be ignored, false otherwise
+	 * @param text The segment
+	 * @param offset The offset into the segment
+	 * @param match The character array to match
+	 */
+	public static boolean regionMatches(boolean ignoreCase, Segment text,
+					    int offset, char[] match)
+	{
+		int length = offset + match.length;
+		char[] textArray = text.array;
+		if(length > text.offset + text.count)
+			return false;
+		for(int i = offset, j = 0; i < length; i++, j++)
+		{
+			char c1 = textArray[i];
+			char c2 = match[j];
+			if(ignoreCase)
+			{
+				c1 = Character.toUpperCase(c1);
+				c2 = Character.toUpperCase(c2);
+			}
+			if(c1 != c2)
+				return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Returns the default style table. This can be passed to the
+	 * <code>setStyles()</code> method of <code>SyntaxDocument</code>
+	 * to use the default syntax styles.
+	 */
+	public static SyntaxStyle[] getDefaultSyntaxStyles()
+	{
+		SyntaxStyle[] styles = new SyntaxStyle[Token.ID_COUNT];
+
+		styles[Token.COMMENT1] = new SyntaxStyle(Color.black,true,false);
+		styles[Token.COMMENT2] = new SyntaxStyle(new Color(0x990033),true,false);
+		styles[Token.KEYWORD1] = new SyntaxStyle(Color.black,false,true);
+		styles[Token.KEYWORD2] = new SyntaxStyle(Color.magenta,false,false);
+		styles[Token.KEYWORD3] = new SyntaxStyle(new Color(0x009600),false,false);
+		styles[Token.LITERAL1] = new SyntaxStyle(new Color(0x650099),false,false);
+		styles[Token.LITERAL2] = new SyntaxStyle(new Color(0x650099),false,true);
+		styles[Token.LABEL] = new SyntaxStyle(new Color(0x990033),false,true);
+		styles[Token.OPERATOR] = new SyntaxStyle(Color.black,false,true);
+		styles[Token.INVALID] = new SyntaxStyle(Color.red,false,true);
+
+		return styles;
+	}
+
+	/**
+	 * Paints the specified line onto the graphics context. Note that this
+	 * method munges the offset and count values of the segment.
+	 * @param line The line segment
+	 * @param tokens The token list for the line
+	 * @param styles The syntax style list
+	 * @param expander The tab expander used to determine tab stops. May
+	 * be null
+	 * @param gfx The graphics context
+	 * @param x The x co-ordinate
+	 * @param y The y co-ordinate
+	 * @return The x co-ordinate, plus the width of the painted string
+	 */
+	public static int paintSyntaxLine(Segment line, Token tokens,
+		SyntaxStyle[] styles, TabExpander expander, Graphics gfx,
+		int x, int y)
+	{
+		Font defaultFont = gfx.getFont();
+		Color defaultColor = gfx.getColor();
+
+		int offset = 0;
+		for(;;)
+		{
+			byte id = tokens.id;
+			if(id == Token.END)
+				break;
+
+			int length = tokens.length;
+			if(id == Token.NULL)
+			{
+				if(!defaultColor.equals(gfx.getColor()))
+					gfx.setColor(defaultColor);
+				if(!defaultFont.equals(gfx.getFont()))
+					gfx.setFont(defaultFont);
+			}
+			else
+				styles[id].setGraphicsFlags(gfx,defaultFont);
+
+			line.count = length;
+			x = Utilities.drawTabbedText(line,x,y,gfx,expander,0);
+			line.offset += length;
+			offset += length;
+
+			tokens = tokens.next;
+		}
+
+		return x;
+	}
+
+	// private members
+	private SyntaxUtilities() {}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PythonTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PythonTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PythonTokenMarker.java	(revision 42196)
@@ -0,0 +1,262 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * PythonTokenMarker.java - Python token marker
+ * Copyright (C) 1999 Jonathan Revusky
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Python token marker.
+ *
+ * @author Jonathan Revusky
+ * @version $Id$
+ */
+public class PythonTokenMarker extends TokenMarker
+{
+	private static final byte TRIPLEQUOTE1 = Token.INTERNAL_FIRST;
+	private static final byte TRIPLEQUOTE2 = Token.INTERNAL_LAST;
+
+	public PythonTokenMarker()
+	{
+		this.keywords = getKeywords();
+	}
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		lastOffset = offset;
+		lastKeyword = offset;
+		int length = line.count + offset;
+		boolean backslash = false;
+
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			if(c == '\\')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(c)
+				{
+				case '#':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						doKeyword(line,i,c);
+						addToken(i - lastOffset,token);
+						addToken(length - i,Token.COMMENT1);
+						lastOffset = lastKeyword = length;
+						break loop;
+					}
+					break;
+				case '"':
+					doKeyword(line,i,c);
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						if(SyntaxUtilities.regionMatches(false,
+							line,i1,"\"\""))
+						{
+							token = TRIPLEQUOTE1;
+						}
+						else
+						{
+							token = Token.LITERAL1;
+						}
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case '\'':
+					doKeyword(line,i,c);
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						if(SyntaxUtilities.regionMatches(false,
+							line,i1,"''"))
+						{
+							token = TRIPLEQUOTE2;
+						}
+						else
+						{
+							token = Token.LITERAL2;
+						}
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				default:
+					backslash = false;
+					if(!Character.isLetterOrDigit(c)
+						&& c != '_')
+						doKeyword(line,i,c);
+					break;
+				}
+				break;
+			case Token.LITERAL1:
+				if(backslash)
+					backslash = false;
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			case Token.LITERAL2:
+				if(backslash)
+					backslash = false;
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			case TRIPLEQUOTE1:
+				if(backslash)
+					backslash = false;
+				else if(SyntaxUtilities.regionMatches(false,
+					line,i,"\"\"\""))
+				{
+					addToken((i+=4) - lastOffset,
+						Token.LITERAL1);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i;
+				}
+				break;
+			case TRIPLEQUOTE2:
+				if(backslash)
+					backslash = false;
+				else if(SyntaxUtilities.regionMatches(false,
+					line,i,"'''"))
+				{
+					addToken((i+=4) - lastOffset,
+						Token.LITERAL1);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: "
+					+ token);
+			}
+		}
+
+		switch(token)
+		{
+			case TRIPLEQUOTE1:
+			case TRIPLEQUOTE2:
+				addToken(length - lastOffset,Token.LITERAL1);
+				break;
+			case Token.NULL:
+				doKeyword(line,length,'\0');
+			default:
+				addToken(length - lastOffset,token);
+				break;
+		}
+
+		return token;
+	}
+
+	public static KeywordMap getKeywords()
+	{
+		if (pyKeywords == null)
+		{
+			pyKeywords = new KeywordMap(false);
+			pyKeywords.add("and",Token.KEYWORD3);
+			pyKeywords.add("not",Token.KEYWORD3);
+			pyKeywords.add("or",Token.KEYWORD3);
+			pyKeywords.add("if",Token.KEYWORD1);
+			pyKeywords.add("for",Token.KEYWORD1);
+			pyKeywords.add("assert",Token.KEYWORD1);
+			pyKeywords.add("break",Token.KEYWORD1);
+			pyKeywords.add("continue",Token.KEYWORD1);
+			pyKeywords.add("elif",Token.KEYWORD1);
+			pyKeywords.add("else",Token.KEYWORD1);
+			pyKeywords.add("except",Token.KEYWORD1);
+			pyKeywords.add("exec",Token.KEYWORD1);
+			pyKeywords.add("finally",Token.KEYWORD1);
+			pyKeywords.add("raise",Token.KEYWORD1);
+			pyKeywords.add("return",Token.KEYWORD1);
+			pyKeywords.add("try",Token.KEYWORD1);
+			pyKeywords.add("while",Token.KEYWORD1);
+			pyKeywords.add("def",Token.KEYWORD2);
+			pyKeywords.add("class",Token.KEYWORD2);
+			pyKeywords.add("del",Token.KEYWORD2);
+			pyKeywords.add("from",Token.KEYWORD2);
+			pyKeywords.add("global",Token.KEYWORD2);
+			pyKeywords.add("import",Token.KEYWORD2);
+			pyKeywords.add("in",Token.KEYWORD2);
+			pyKeywords.add("is",Token.KEYWORD2);
+			pyKeywords.add("lambda",Token.KEYWORD2);
+			pyKeywords.add("pass",Token.KEYWORD2);
+			pyKeywords.add("print",Token.KEYWORD2);
+		}
+		return pyKeywords;
+	}
+
+	// private members
+	private static KeywordMap pyKeywords;
+
+	private KeywordMap keywords;
+	private int lastOffset;
+	private int lastKeyword;
+
+	private boolean doKeyword(Segment line, int i, char c)
+	{
+		int i1 = i+1;
+
+		int len = i - lastKeyword;
+		byte id = keywords.lookup(line,lastKeyword,len);
+		if(id != Token.NULL)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.NULL);
+			addToken(len,id);
+			lastOffset = i;
+		}
+		lastKeyword = i1;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PythonTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CTokenMarker.java	(revision 42196)
@@ -0,0 +1,295 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * CTokenMarker.java - C token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * C token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class CTokenMarker extends TokenMarker
+{
+	public CTokenMarker()
+	{
+		this(true,getKeywords());
+	}
+
+	public CTokenMarker(boolean cpp, KeywordMap keywords)
+	{
+		this.cpp = cpp;
+		this.keywords = keywords;
+	}
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		lastOffset = offset;
+		lastKeyword = offset;
+		int length = line.count + offset;
+		boolean backslash = false;
+
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			if(c == '\\')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(c)
+				{
+				case '#':
+					if(backslash)
+						backslash = false;
+					else if(cpp)
+					{
+						if(doKeyword(line,i,c))
+							break;
+						addToken(i - lastOffset,token);
+						addToken(length - i,Token.KEYWORD2);
+						lastOffset = lastKeyword = length;
+						break loop;
+					}
+					break;
+				case '"':
+					doKeyword(line,i,c);
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL1;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case '\'':
+					doKeyword(line,i,c);
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL2;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case ':':
+					if(lastKeyword == offset)
+					{
+						if(doKeyword(line,i,c))
+							break;
+						backslash = false;
+						addToken(i1 - lastOffset,Token.LABEL);
+						lastOffset = lastKeyword = i1;
+					}
+					else if(doKeyword(line,i,c))
+						break;
+					break;
+				case '/':
+					backslash = false;
+					doKeyword(line,i,c);
+					if(length - i > 1)
+					{
+						switch(array[i1])
+						{
+						case '*':
+							addToken(i - lastOffset,token);
+							lastOffset = lastKeyword = i;
+							if(length - i > 2 && array[i+2] == '*')
+								token = Token.COMMENT2;
+							else
+								token = Token.COMMENT1;
+							break;
+						case '/':
+							addToken(i - lastOffset,token);
+							addToken(length - i,Token.COMMENT1);
+							lastOffset = lastKeyword = length;
+							break loop;
+						}
+					}
+					break;
+				default:
+					backslash = false;
+					if(!Character.isLetterOrDigit(c)
+						&& c != '_')
+						doKeyword(line,i,c);
+					break;
+				}
+				break;
+			case Token.COMMENT1:
+			case Token.COMMENT2:
+				backslash = false;
+				if(c == '*' && length - i > 1)
+				{
+					if(array[i1] == '/')
+					{
+						i++;
+						addToken((i+1) - lastOffset,token);
+						token = Token.NULL;
+						lastOffset = lastKeyword = i+1;
+					}
+				}
+				break;
+			case Token.LITERAL1:
+				if(backslash)
+					backslash = false;
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			case Token.LITERAL2:
+				if(backslash)
+					backslash = false;
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: "
+					+ token);
+			}
+		}
+
+		if(token == Token.NULL)
+			doKeyword(line,length,'\0');
+
+		switch(token)
+		{
+		case Token.LITERAL1:
+		case Token.LITERAL2:
+			addToken(length - lastOffset,Token.INVALID);
+			token = Token.NULL;
+			break;
+		case Token.KEYWORD2:
+			addToken(length - lastOffset,token);
+			if(!backslash)
+				token = Token.NULL;
+		default:
+			addToken(length - lastOffset,token);
+			break;
+		}
+
+		return token;
+	}
+
+	public static KeywordMap getKeywords()
+	{
+		if(cKeywords == null)
+		{
+			cKeywords = new KeywordMap(false);
+			cKeywords.add("char",Token.KEYWORD3);
+			cKeywords.add("double",Token.KEYWORD3);
+			cKeywords.add("enum",Token.KEYWORD3);
+			cKeywords.add("float",Token.KEYWORD3);
+			cKeywords.add("int",Token.KEYWORD3);
+			cKeywords.add("long",Token.KEYWORD3);
+			cKeywords.add("short",Token.KEYWORD3);
+			cKeywords.add("signed",Token.KEYWORD3);
+			cKeywords.add("struct",Token.KEYWORD3);
+			cKeywords.add("typedef",Token.KEYWORD3);
+			cKeywords.add("union",Token.KEYWORD3);
+			cKeywords.add("unsigned",Token.KEYWORD3);
+			cKeywords.add("void",Token.KEYWORD3);
+			cKeywords.add("auto",Token.KEYWORD1);
+			cKeywords.add("const",Token.KEYWORD1);
+			cKeywords.add("extern",Token.KEYWORD1);
+			cKeywords.add("register",Token.KEYWORD1);
+			cKeywords.add("static",Token.KEYWORD1);
+			cKeywords.add("volatile",Token.KEYWORD1);
+			cKeywords.add("break",Token.KEYWORD1);
+			cKeywords.add("case",Token.KEYWORD1);
+			cKeywords.add("continue",Token.KEYWORD1);
+			cKeywords.add("default",Token.KEYWORD1);
+			cKeywords.add("do",Token.KEYWORD1);
+			cKeywords.add("else",Token.KEYWORD1);
+			cKeywords.add("for",Token.KEYWORD1);
+			cKeywords.add("goto",Token.KEYWORD1);
+			cKeywords.add("if",Token.KEYWORD1);
+			cKeywords.add("return",Token.KEYWORD1);
+			cKeywords.add("sizeof",Token.KEYWORD1);
+			cKeywords.add("switch",Token.KEYWORD1);
+			cKeywords.add("while",Token.KEYWORD1);
+			cKeywords.add("asm",Token.KEYWORD2);
+			cKeywords.add("asmlinkage",Token.KEYWORD2);
+			cKeywords.add("far",Token.KEYWORD2);
+			cKeywords.add("huge",Token.KEYWORD2);
+			cKeywords.add("inline",Token.KEYWORD2);
+			cKeywords.add("near",Token.KEYWORD2);
+			cKeywords.add("pascal",Token.KEYWORD2);
+			cKeywords.add("true",Token.LITERAL2);
+			cKeywords.add("false",Token.LITERAL2);
+			cKeywords.add("NULL",Token.LITERAL2);
+		}
+		return cKeywords;
+	}
+
+	// private members
+	private static KeywordMap cKeywords;
+
+	private boolean cpp;
+	private KeywordMap keywords;
+	private int lastOffset;
+	private int lastKeyword;
+
+	private boolean doKeyword(Segment line, int i, char c)
+	{
+		int i1 = i+1;
+
+		int len = i - lastKeyword;
+		byte id = keywords.lookup(line,lastKeyword,len);
+		if(id != Token.NULL)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.NULL);
+			addToken(len,id);
+			lastOffset = i;
+		}
+		lastKeyword = i1;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxDocument.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxDocument.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxDocument.java	(revision 42196)
@@ -0,0 +1,191 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * SyntaxDocument.java - Document that can be tokenized
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.event.DocumentEvent;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Element;
+import javax.swing.text.PlainDocument;
+import javax.swing.text.Segment;
+import javax.swing.undo.UndoableEdit;
+
+/**
+ * A document implementation that can be tokenized by the syntax highlighting
+ * system.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class SyntaxDocument extends PlainDocument
+{
+	/**
+	 * Returns the token marker that is to be used to split lines
+	 * of this document up into tokens. May return null if this
+	 * document is not to be colorized.
+	 */
+	public TokenMarker getTokenMarker()
+	{
+		return tokenMarker;
+	}
+
+	/**
+	 * Sets the token marker that is to be used to split lines of
+	 * this document up into tokens. May throw an exception if
+	 * this is not supported for this type of document.
+	 * @param tm The new token marker
+	 */
+	public void setTokenMarker(TokenMarker tm)
+	{
+		tokenMarker = tm;
+		if(tm == null)
+			return;
+		tokenMarker.insertLines(0,getDefaultRootElement()
+			.getElementCount());
+		tokenizeLines();
+	}
+
+	/**
+	 * Reparses the document, by passing all lines to the token
+	 * marker. This should be called after the document is first
+	 * loaded.
+	 */
+	public void tokenizeLines()
+	{
+		tokenizeLines(0,getDefaultRootElement().getElementCount());
+	}
+
+	/**
+	 * Reparses the document, by passing the specified lines to the
+	 * token marker. This should be called after a large quantity of
+	 * text is first inserted.
+	 * @param start The first line to parse
+	 * @param len The number of lines, after the first one to parse
+	 */
+	public void tokenizeLines(int start, int len)
+	{
+		if(tokenMarker == null || !tokenMarker.supportsMultilineTokens())
+			return;
+
+		Segment lineSegment = new Segment();
+		Element map = getDefaultRootElement();
+
+		len += start;
+
+		try
+		{
+			for(int i = start; i < len; i++)
+			{
+				Element lineElement = map.getElement(i);
+				int lineStart = lineElement.getStartOffset();
+				getText(lineStart,lineElement.getEndOffset()
+					- lineStart - 1,lineSegment);
+				tokenMarker.markTokens(lineSegment,i);
+			}
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+		}
+	}
+
+	/**
+	 * Starts a compound edit that can be undone in one operation.
+	 * Subclasses that implement undo should override this method;
+	 * this class has no undo functionality so this method is
+	 * empty.
+	 */
+	public void beginCompoundEdit() {}
+
+	/**
+	 * Ends a compound edit that can be undone in one operation.
+	 * Subclasses that implement undo should override this method;
+	 * this class has no undo functionality so this method is
+	 * empty.
+	 */
+	public void endCompoundEdit() {}
+
+	/**
+	 * Adds an undoable edit to this document's undo list. The edit
+	 * should be ignored if something is currently being undone.
+	 * @param edit The undoable edit
+	 *
+	 * @since jEdit 2.2pre1
+	 */
+	public void addUndoableEdit(UndoableEdit edit) {}
+
+	// protected members
+	protected TokenMarker tokenMarker;
+
+	/**
+	 * We overwrite this method to update the token marker
+	 * state immediately so that any event listeners get a
+	 * consistent token marker.
+	 */
+	protected void fireInsertUpdate(DocumentEvent evt)
+	{
+		if(tokenMarker != null)
+		{
+			DocumentEvent.ElementChange ch = evt.getChange(
+				getDefaultRootElement());
+			if(ch != null)
+			{
+				tokenMarker.insertLines(ch.getIndex() + 1,
+					ch.getChildrenAdded().length -
+					ch.getChildrenRemoved().length);
+			}
+		}
+
+		super.fireInsertUpdate(evt);
+	}
+	
+	/**
+	 * We overwrite this method to update the token marker
+	 * state immediately so that any event listeners get a
+	 * consistent token marker.
+	 */
+	protected void fireRemoveUpdate(DocumentEvent evt)
+	{
+		if(tokenMarker != null)
+		{
+			DocumentEvent.ElementChange ch = evt.getChange(
+				getDefaultRootElement());
+			if(ch != null)
+			{
+				tokenMarker.deleteLines(ch.getIndex() + 1,
+					ch.getChildrenRemoved().length -
+					ch.getChildrenAdded().length);
+			}
+		}
+
+		super.fireRemoveUpdate(evt);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxDocument.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TSQLTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TSQLTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TSQLTokenMarker.java	(revision 42196)
@@ -0,0 +1,991 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * TSQLTokenMarker.java - Transact-SQL token marker
+ * Copyright (C) 1999 mike dillon
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+
+/**
+ * Transact-SQL token marker.
+ *
+ * @author mike dillon
+ * @version $Id$
+ */
+public class TSQLTokenMarker extends SQLTokenMarker
+{
+	// public members
+	public TSQLTokenMarker()
+	{
+		super(getKeywordMap(), true);
+	}
+
+	public static KeywordMap getKeywordMap()
+	{
+		if (tsqlKeywords == null) {
+			tsqlKeywords = new KeywordMap(true);
+			addKeywords();
+			addDataTypes();
+			addSystemFunctions();
+			addOperators();
+	  		addSystemStoredProcedures();
+			addSystemTables();
+		}
+		return tsqlKeywords;
+	}	
+
+	private static void addKeywords()
+	{
+		tsqlKeywords.add("ADD",Token.KEYWORD1);
+		tsqlKeywords.add("ALTER",Token.KEYWORD1);
+		tsqlKeywords.add("ANSI_NULLS",Token.KEYWORD1);
+		tsqlKeywords.add("AS",Token.KEYWORD1);
+		tsqlKeywords.add("ASC",Token.KEYWORD1);
+		tsqlKeywords.add("AUTHORIZATION",Token.KEYWORD1);
+		tsqlKeywords.add("BACKUP",Token.KEYWORD1);
+		tsqlKeywords.add("BEGIN",Token.KEYWORD1);
+		tsqlKeywords.add("BREAK",Token.KEYWORD1);
+		tsqlKeywords.add("BROWSE",Token.KEYWORD1);
+		tsqlKeywords.add("BULK",Token.KEYWORD1);
+		tsqlKeywords.add("BY",Token.KEYWORD1);
+		tsqlKeywords.add("CASCADE",Token.KEYWORD1);
+		tsqlKeywords.add("CHECK",Token.KEYWORD1);
+		tsqlKeywords.add("CHECKPOINT",Token.KEYWORD1);
+		tsqlKeywords.add("CLOSE",Token.KEYWORD1);
+		tsqlKeywords.add("CLUSTERED",Token.KEYWORD1);
+		tsqlKeywords.add("COLUMN",Token.KEYWORD1);
+		tsqlKeywords.add("COMMIT",Token.KEYWORD1);
+		tsqlKeywords.add("COMMITTED",Token.KEYWORD1);
+		tsqlKeywords.add("COMPUTE",Token.KEYWORD1);
+		tsqlKeywords.add("CONFIRM",Token.KEYWORD1);
+		tsqlKeywords.add("CONSTRAINT",Token.KEYWORD1);
+		tsqlKeywords.add("CONTAINS",Token.KEYWORD1);
+		tsqlKeywords.add("CONTAINSTABLE",Token.KEYWORD1);
+		tsqlKeywords.add("CONTINUE",Token.KEYWORD1);
+		tsqlKeywords.add("CONTROLROW",Token.KEYWORD1);
+		tsqlKeywords.add("CREATE",Token.KEYWORD1);
+		tsqlKeywords.add("CURRENT",Token.KEYWORD1);
+		tsqlKeywords.add("CURRENT_DATE",Token.KEYWORD1);
+		tsqlKeywords.add("CURRENT_TIME",Token.KEYWORD1);
+		tsqlKeywords.add("CURSOR",Token.KEYWORD1);
+		tsqlKeywords.add("DATABASE",Token.KEYWORD1);
+		tsqlKeywords.add("DBCC",Token.KEYWORD1);
+		tsqlKeywords.add("DEALLOCATE",Token.KEYWORD1);
+		tsqlKeywords.add("DECLARE",Token.KEYWORD1);
+		tsqlKeywords.add("DEFAULT",Token.KEYWORD1);
+		tsqlKeywords.add("DELETE",Token.KEYWORD1);
+		tsqlKeywords.add("DENY",Token.KEYWORD1);
+		tsqlKeywords.add("DESC",Token.KEYWORD1);
+		tsqlKeywords.add("DISK",Token.KEYWORD1);
+		tsqlKeywords.add("DISTINCT",Token.KEYWORD1);
+		tsqlKeywords.add("DISTRIBUTED",Token.KEYWORD1);
+		tsqlKeywords.add("DOUBLE",Token.KEYWORD1);
+		tsqlKeywords.add("DROP",Token.KEYWORD1);
+		tsqlKeywords.add("DUMMY",Token.KEYWORD1);
+		tsqlKeywords.add("DUMP",Token.KEYWORD1);
+		tsqlKeywords.add("ELSE",Token.KEYWORD1);
+		tsqlKeywords.add("END",Token.KEYWORD1);
+		tsqlKeywords.add("ERRLVL",Token.KEYWORD1);
+		tsqlKeywords.add("ERROREXIT",Token.KEYWORD1);
+		tsqlKeywords.add("ESCAPE",Token.KEYWORD1);
+		tsqlKeywords.add("EXCEPT",Token.KEYWORD1);
+		tsqlKeywords.add("EXEC",Token.KEYWORD1);
+		tsqlKeywords.add("EXECUTE",Token.KEYWORD1);
+		tsqlKeywords.add("EXIT",Token.KEYWORD1);
+		tsqlKeywords.add("FETCH",Token.KEYWORD1);
+		tsqlKeywords.add("FILE",Token.KEYWORD1);
+		tsqlKeywords.add("FILLFACTOR",Token.KEYWORD1);
+		tsqlKeywords.add("FLOPPY",Token.KEYWORD1);
+		tsqlKeywords.add("FOR",Token.KEYWORD1);
+		tsqlKeywords.add("FOREIGN",Token.KEYWORD1);
+		tsqlKeywords.add("FREETEXT",Token.KEYWORD1);
+		tsqlKeywords.add("FREETEXTTABLE",Token.KEYWORD1);
+		tsqlKeywords.add("FROM",Token.KEYWORD1);
+		tsqlKeywords.add("FULL",Token.KEYWORD1);
+		tsqlKeywords.add("GOTO",Token.KEYWORD1);
+		tsqlKeywords.add("GRANT",Token.KEYWORD1);
+		tsqlKeywords.add("GROUP",Token.KEYWORD1);
+		tsqlKeywords.add("HAVING",Token.KEYWORD1);
+		tsqlKeywords.add("HOLDLOCK",Token.KEYWORD1);
+		tsqlKeywords.add("IDENTITY_INSERT",Token.KEYWORD1);
+		tsqlKeywords.add("IDENTITYCOL",Token.KEYWORD1);
+		tsqlKeywords.add("ID",Token.KEYWORD1);
+		tsqlKeywords.add("IF",Token.KEYWORD1);
+		tsqlKeywords.add("INDEX",Token.KEYWORD1);
+		tsqlKeywords.add("INNER",Token.KEYWORD1);
+		tsqlKeywords.add("INSERT",Token.KEYWORD1);
+		tsqlKeywords.add("INTO",Token.KEYWORD1);
+		tsqlKeywords.add("IS",Token.KEYWORD1);
+		tsqlKeywords.add("ISOLATION",Token.KEYWORD1);
+		tsqlKeywords.add("KEY",Token.KEYWORD1);
+		tsqlKeywords.add("KILL",Token.KEYWORD1);
+		tsqlKeywords.add("LEVEL",Token.KEYWORD1);
+		tsqlKeywords.add("LINENO",Token.KEYWORD1);
+		tsqlKeywords.add("LOAD",Token.KEYWORD1);
+		tsqlKeywords.add("MAX",Token.KEYWORD1);
+		tsqlKeywords.add("MIN",Token.KEYWORD1);
+		tsqlKeywords.add("MIRROREXIT",Token.KEYWORD1);
+		tsqlKeywords.add("NATIONAL",Token.KEYWORD1);
+		tsqlKeywords.add("NOCHECK",Token.KEYWORD1);
+		tsqlKeywords.add("NONCLUSTERED",Token.KEYWORD1);
+		tsqlKeywords.add("OF",Token.KEYWORD1);
+		tsqlKeywords.add("OFF",Token.KEYWORD1);
+		tsqlKeywords.add("OFFSETS",Token.KEYWORD1);
+		tsqlKeywords.add("ON",Token.KEYWORD1);
+		tsqlKeywords.add("ONCE",Token.KEYWORD1);
+		tsqlKeywords.add("ONLY",Token.KEYWORD1);
+		tsqlKeywords.add("OPEN",Token.KEYWORD1);
+		tsqlKeywords.add("OPENDATASOURCE",Token.KEYWORD1);
+		tsqlKeywords.add("OPENQUERY",Token.KEYWORD1);
+		tsqlKeywords.add("OPENROWSET",Token.KEYWORD1);
+		tsqlKeywords.add("OPTION",Token.KEYWORD1);
+		tsqlKeywords.add("ORDER",Token.KEYWORD1);
+		tsqlKeywords.add("OVER",Token.KEYWORD1);
+		tsqlKeywords.add("PERCENT",Token.KEYWORD1);
+		tsqlKeywords.add("PERM",Token.KEYWORD1);
+		tsqlKeywords.add("PERMANENT",Token.KEYWORD1);
+		tsqlKeywords.add("PIPE",Token.KEYWORD1);
+		tsqlKeywords.add("PLAN",Token.KEYWORD1);
+		tsqlKeywords.add("PRECISION",Token.KEYWORD1);
+		tsqlKeywords.add("PREPARE",Token.KEYWORD1);
+		tsqlKeywords.add("PRIMARY",Token.KEYWORD1);
+		tsqlKeywords.add("PRINT",Token.KEYWORD1);
+		tsqlKeywords.add("PRIVILEGES",Token.KEYWORD1);
+		tsqlKeywords.add("PROC",Token.KEYWORD1);
+		tsqlKeywords.add("PROCEDURE",Token.KEYWORD1);
+		tsqlKeywords.add("PROCESSEXIT",Token.KEYWORD1);
+		tsqlKeywords.add("PUBLIC",Token.KEYWORD1);
+		tsqlKeywords.add("QUOTED_IDENTIFIER",Token.KEYWORD1);
+		tsqlKeywords.add("RAISERROR",Token.KEYWORD1);
+		tsqlKeywords.add("READ",Token.KEYWORD1);
+		tsqlKeywords.add("READTEXT",Token.KEYWORD1);
+		tsqlKeywords.add("RECONFIGURE",Token.KEYWORD1);
+		tsqlKeywords.add("REFERENCES",Token.KEYWORD1);
+		tsqlKeywords.add("REPEATABLE",Token.KEYWORD1);
+		tsqlKeywords.add("REPLICATION",Token.KEYWORD1);
+		tsqlKeywords.add("RESTORE",Token.KEYWORD1);
+		tsqlKeywords.add("RESTRICT",Token.KEYWORD1);
+		tsqlKeywords.add("RETURN",Token.KEYWORD1);
+		tsqlKeywords.add("REVOKE",Token.KEYWORD1);
+		tsqlKeywords.add("ROLLBACK",Token.KEYWORD1);
+		tsqlKeywords.add("ROWGUIDCOL",Token.KEYWORD1);
+		tsqlKeywords.add("RULE",Token.KEYWORD1);
+		tsqlKeywords.add("SAVE",Token.KEYWORD1);
+		tsqlKeywords.add("SCHEMA",Token.KEYWORD1);
+		tsqlKeywords.add("SELECT",Token.KEYWORD1);
+		tsqlKeywords.add("SERIALIZABLE",Token.KEYWORD1);
+		tsqlKeywords.add("SET",Token.KEYWORD1);
+		tsqlKeywords.add("SETUSER",Token.KEYWORD1);
+		tsqlKeywords.add("SHUTDOWN",Token.KEYWORD1);
+		tsqlKeywords.add("STATISTICS",Token.KEYWORD1);
+		tsqlKeywords.add("TABLE",Token.KEYWORD1);
+		tsqlKeywords.add("TAPE",Token.KEYWORD1);
+		tsqlKeywords.add("TEMP",Token.KEYWORD1);
+		tsqlKeywords.add("TEMPORARY",Token.KEYWORD1);
+		tsqlKeywords.add("TEXTIMAGE_ON",Token.KEYWORD1);
+		tsqlKeywords.add("THEN",Token.KEYWORD1);
+		tsqlKeywords.add("TO",Token.KEYWORD1);
+		tsqlKeywords.add("TOP",Token.KEYWORD1);
+		tsqlKeywords.add("TRAN",Token.KEYWORD1);
+		tsqlKeywords.add("TRANSACTION",Token.KEYWORD1);
+		tsqlKeywords.add("TRIGGER",Token.KEYWORD1);
+		tsqlKeywords.add("TRUNCATE",Token.KEYWORD1);
+		tsqlKeywords.add("TSEQUAL",Token.KEYWORD1);
+		tsqlKeywords.add("UNCOMMITTED",Token.KEYWORD1);
+		tsqlKeywords.add("UNION",Token.KEYWORD1);
+		tsqlKeywords.add("UNIQUE",Token.KEYWORD1);
+		tsqlKeywords.add("UPDATE",Token.KEYWORD1);
+		tsqlKeywords.add("UPDATETEXT",Token.KEYWORD1);
+		tsqlKeywords.add("USE",Token.KEYWORD1);
+		tsqlKeywords.add("VALUES",Token.KEYWORD1);
+		tsqlKeywords.add("VARYING",Token.KEYWORD1);
+		tsqlKeywords.add("VIEW",Token.KEYWORD1);
+		tsqlKeywords.add("WAITFOR",Token.KEYWORD1);
+		tsqlKeywords.add("WHEN",Token.KEYWORD1);
+		tsqlKeywords.add("WHERE",Token.KEYWORD1);
+		tsqlKeywords.add("WHILE",Token.KEYWORD1);
+		tsqlKeywords.add("WITH",Token.KEYWORD1);
+		tsqlKeywords.add("WORK",Token.KEYWORD1);
+		tsqlKeywords.add("WRITETEXT",Token.KEYWORD1);
+	}
+
+	private static void addDataTypes()
+	{
+		tsqlKeywords.add("binary",Token.KEYWORD1);
+		tsqlKeywords.add("bit",Token.KEYWORD1);
+		tsqlKeywords.add("char",Token.KEYWORD1);
+		tsqlKeywords.add("character",Token.KEYWORD1);
+		tsqlKeywords.add("datetime",Token.KEYWORD1);
+		tsqlKeywords.add("decimal",Token.KEYWORD1);
+		tsqlKeywords.add("float",Token.KEYWORD1);
+		tsqlKeywords.add("image",Token.KEYWORD1);
+		tsqlKeywords.add("int",Token.KEYWORD1);
+		tsqlKeywords.add("integer",Token.KEYWORD1);
+		tsqlKeywords.add("money",Token.KEYWORD1);
+		tsqlKeywords.add("name",Token.KEYWORD1);
+		tsqlKeywords.add("numeric",Token.KEYWORD1);
+		tsqlKeywords.add("nchar",Token.KEYWORD1);
+		tsqlKeywords.add("nvarchar",Token.KEYWORD1);
+		tsqlKeywords.add("ntext",Token.KEYWORD1);
+		tsqlKeywords.add("real",Token.KEYWORD1);
+		tsqlKeywords.add("smalldatetime",Token.KEYWORD1);
+		tsqlKeywords.add("smallint",Token.KEYWORD1);
+		tsqlKeywords.add("smallmoney",Token.KEYWORD1);
+		tsqlKeywords.add("text",Token.KEYWORD1);
+		tsqlKeywords.add("timestamp",Token.KEYWORD1);
+		tsqlKeywords.add("tinyint",Token.KEYWORD1);
+		tsqlKeywords.add("uniqueidentifier",Token.KEYWORD1);
+		tsqlKeywords.add("varbinary",Token.KEYWORD1);
+		tsqlKeywords.add("varchar",Token.KEYWORD1);
+	}
+
+	private static void addSystemFunctions()
+	{
+		tsqlKeywords.add("@@CONNECTIONS",Token.KEYWORD2);
+		tsqlKeywords.add("@@CPU_BUSY",Token.KEYWORD2);
+		tsqlKeywords.add("@@CURSOR_ROWS",Token.KEYWORD2);
+		tsqlKeywords.add("@@DATEFIRST",Token.KEYWORD2);
+		tsqlKeywords.add("@@DBTS",Token.KEYWORD2);
+		tsqlKeywords.add("@@ERROR",Token.KEYWORD2);
+		tsqlKeywords.add("@@FETCH_STATUS",Token.KEYWORD2);
+		tsqlKeywords.add("@@IDENTITY",Token.KEYWORD2);
+		tsqlKeywords.add("@@IDLE",Token.KEYWORD2);
+		tsqlKeywords.add("@@IO_BUSY",Token.KEYWORD2);
+		tsqlKeywords.add("@@LANGID",Token.KEYWORD2);
+		tsqlKeywords.add("@@LANGUAGE",Token.KEYWORD2);
+		tsqlKeywords.add("@@LOCK_TIMEOUT",Token.KEYWORD2);
+		tsqlKeywords.add("@@MAX_CONNECTIONS",Token.KEYWORD2);
+		tsqlKeywords.add("@@MAX_PRECISION",Token.KEYWORD2);
+		tsqlKeywords.add("@@NESTLEVEL",Token.KEYWORD2);
+		tsqlKeywords.add("@@OPTIONS",Token.KEYWORD2);
+		tsqlKeywords.add("@@PACK_RECEIVED",Token.KEYWORD2);
+		tsqlKeywords.add("@@PACK_SENT",Token.KEYWORD2);
+		tsqlKeywords.add("@@PACKET_ERRORS",Token.KEYWORD2);
+		tsqlKeywords.add("@@PROCID",Token.KEYWORD2);
+		tsqlKeywords.add("@@REMSERVER",Token.KEYWORD2);
+		tsqlKeywords.add("@@ROWCOUNT",Token.KEYWORD2);
+		tsqlKeywords.add("@@SERVERNAME",Token.KEYWORD2);
+		tsqlKeywords.add("@@SERVICENAME",Token.KEYWORD2);
+		tsqlKeywords.add("@@SPID",Token.KEYWORD2);
+		tsqlKeywords.add("@@TEXTSIZE",Token.KEYWORD2);
+		tsqlKeywords.add("@@TIMETICKS",Token.KEYWORD2);
+		tsqlKeywords.add("@@TOTAL_ERRORS",Token.KEYWORD2);
+		tsqlKeywords.add("@@TOTAL_READ",Token.KEYWORD2);
+		tsqlKeywords.add("@@TOTAL_WRITE",Token.KEYWORD2);
+		tsqlKeywords.add("@@TRANCOUNT",Token.KEYWORD2);
+		tsqlKeywords.add("@@VERSION",Token.KEYWORD2);
+		tsqlKeywords.add("ABS",Token.KEYWORD2);
+		tsqlKeywords.add("ACOS",Token.KEYWORD2);
+		tsqlKeywords.add("APP_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("ASCII",Token.KEYWORD2);
+		tsqlKeywords.add("ASIN",Token.KEYWORD2);
+		tsqlKeywords.add("ATAN",Token.KEYWORD2);
+		tsqlKeywords.add("ATN2",Token.KEYWORD2);
+		tsqlKeywords.add("CASE",Token.KEYWORD2);
+		tsqlKeywords.add("CAST",Token.KEYWORD2);
+		tsqlKeywords.add("CEILING",Token.KEYWORD2);
+//				tsqlKeywords.add("CHAR",Token.KEYWORD2);
+		tsqlKeywords.add("CHARINDEX",Token.KEYWORD2);
+		tsqlKeywords.add("COALESCE",Token.KEYWORD2);
+		tsqlKeywords.add("COL_LENGTH",Token.KEYWORD2);
+		tsqlKeywords.add("COL_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("COLUMNPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("CONVERT",Token.KEYWORD2);
+		tsqlKeywords.add("COS",Token.KEYWORD2);
+		tsqlKeywords.add("COT",Token.KEYWORD2);
+		tsqlKeywords.add("CURRENT_TIME",Token.KEYWORD2);
+		tsqlKeywords.add("CURRENT_DATE",Token.KEYWORD2);
+		tsqlKeywords.add("CURRENT_TIMESTAMP",Token.KEYWORD2);
+		tsqlKeywords.add("CURRENT_USER",Token.KEYWORD2);
+		tsqlKeywords.add("CURSOR_STATUS",Token.KEYWORD2);
+		tsqlKeywords.add("DATABASEPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("DATALENGTH",Token.KEYWORD2);
+		tsqlKeywords.add("DATEADD",Token.KEYWORD2);
+		tsqlKeywords.add("DATEDIFF",Token.KEYWORD2);
+		tsqlKeywords.add("DATENAME",Token.KEYWORD2);
+		tsqlKeywords.add("DATEPART",Token.KEYWORD2);
+		tsqlKeywords.add("DAY",Token.KEYWORD2);
+		tsqlKeywords.add("DB_ID",Token.KEYWORD2);
+		tsqlKeywords.add("DB_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("DEGREES",Token.KEYWORD2);
+		tsqlKeywords.add("DIFFERENCE",Token.KEYWORD2);
+		tsqlKeywords.add("EXP",Token.KEYWORD2);
+		tsqlKeywords.add("FILE_ID",Token.KEYWORD2);
+		tsqlKeywords.add("FILE_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("FILEGROUP_ID",Token.KEYWORD2);
+		tsqlKeywords.add("FILEGROUP_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("FILEGROUPPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("FILEPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("FLOOR",Token.KEYWORD2);
+		tsqlKeywords.add("FORMATMESSAGE",Token.KEYWORD2);
+		tsqlKeywords.add("FULLTEXTCATALOGPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("FULLTEXTSERVICEPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("GETANSINULL",Token.KEYWORD2);
+		tsqlKeywords.add("GETDATE",Token.KEYWORD2);
+		tsqlKeywords.add("HOST_ID",Token.KEYWORD2);
+		tsqlKeywords.add("HOST_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("IDENT_INCR",Token.KEYWORD2);
+		tsqlKeywords.add("IDENT_SEED",Token.KEYWORD2);
+//				tsqlKeywords.add("IDENTITY",Token.KEYWORD2);
+		tsqlKeywords.add("IDENTITY_INSERT",Token.KEYWORD2);
+		tsqlKeywords.add("INDEX_COL",Token.KEYWORD2);
+		tsqlKeywords.add("INDEXPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("IS_MEMBER",Token.KEYWORD2);
+		tsqlKeywords.add("IS_SRVROLEMEMBER",Token.KEYWORD2);
+		tsqlKeywords.add("ISDATE",Token.KEYWORD2);
+		tsqlKeywords.add("ISNULL",Token.KEYWORD2);
+		tsqlKeywords.add("ISNUMERIC",Token.KEYWORD2);
+		tsqlKeywords.add("LEFT",Token.KEYWORD2);
+		tsqlKeywords.add("LEN",Token.KEYWORD2);
+		tsqlKeywords.add("LOG",Token.KEYWORD2);
+		tsqlKeywords.add("LOG10",Token.KEYWORD2);
+		tsqlKeywords.add("LOWER",Token.KEYWORD2);
+		tsqlKeywords.add("LTRIM",Token.KEYWORD2);
+		tsqlKeywords.add("MONTH",Token.KEYWORD2);
+//				tsqlKeywords.add("NCHAR",Token.KEYWORD2);
+		tsqlKeywords.add("NEWID",Token.KEYWORD2);
+		tsqlKeywords.add("NULLIF",Token.KEYWORD2);
+		tsqlKeywords.add("OBJECT_ID",Token.KEYWORD2);
+		tsqlKeywords.add("OBJECT_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("OBJECTPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("PARSENAME",Token.KEYWORD2);
+		tsqlKeywords.add("PATINDEX",Token.KEYWORD2);
+		tsqlKeywords.add("PERMISSIONS",Token.KEYWORD2);
+		tsqlKeywords.add("PI",Token.KEYWORD2);
+		tsqlKeywords.add("POWER",Token.KEYWORD2);
+		tsqlKeywords.add("QUOTENAME",Token.KEYWORD2);
+		tsqlKeywords.add("RADIANS",Token.KEYWORD2);
+		tsqlKeywords.add("RAND",Token.KEYWORD2);
+		tsqlKeywords.add("REPLACE",Token.KEYWORD2);
+		tsqlKeywords.add("REPLICATE",Token.KEYWORD2);
+		tsqlKeywords.add("REVERSE",Token.KEYWORD2);
+		tsqlKeywords.add("RIGHT",Token.KEYWORD2);
+		tsqlKeywords.add("ROUND",Token.KEYWORD2);
+		tsqlKeywords.add("RTRIM",Token.KEYWORD2);
+		tsqlKeywords.add("SESSION_USER",Token.KEYWORD2);
+		tsqlKeywords.add("SIGN",Token.KEYWORD2);
+		tsqlKeywords.add("SIN",Token.KEYWORD2);
+		tsqlKeywords.add("SOUNDEX",Token.KEYWORD2);
+		tsqlKeywords.add("SPACE",Token.KEYWORD2);
+		tsqlKeywords.add("SQRT",Token.KEYWORD2);
+		tsqlKeywords.add("SQUARE",Token.KEYWORD2);
+		tsqlKeywords.add("STATS_DATE",Token.KEYWORD2);
+		tsqlKeywords.add("STR",Token.KEYWORD2);
+		tsqlKeywords.add("STUFF",Token.KEYWORD2);
+		tsqlKeywords.add("SUBSTRING",Token.KEYWORD2);
+		tsqlKeywords.add("SUSER_ID",Token.KEYWORD2);
+		tsqlKeywords.add("SUSER_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("SUSER_SID",Token.KEYWORD2);
+		tsqlKeywords.add("SUSER_SNAME",Token.KEYWORD2);
+		tsqlKeywords.add("SYSTEM_USER",Token.KEYWORD2);
+		tsqlKeywords.add("TAN",Token.KEYWORD2);
+		tsqlKeywords.add("TEXTPTR",Token.KEYWORD2);
+		tsqlKeywords.add("TEXTVALID",Token.KEYWORD2);
+		tsqlKeywords.add("TYPEPROPERTY",Token.KEYWORD2);
+		tsqlKeywords.add("UNICODE",Token.KEYWORD2);
+		tsqlKeywords.add("UPPER",Token.KEYWORD2);
+		tsqlKeywords.add("USER_ID",Token.KEYWORD2);
+		tsqlKeywords.add("USER_NAME",Token.KEYWORD2);
+		tsqlKeywords.add("USER",Token.KEYWORD2);
+		tsqlKeywords.add("YEAR",Token.KEYWORD2);
+	}
+
+	private static void addOperators()
+	{
+		tsqlKeywords.add("ALL",Token.KEYWORD1);
+		tsqlKeywords.add("AND",Token.KEYWORD1);
+		tsqlKeywords.add("ANY",Token.KEYWORD1);
+		tsqlKeywords.add("BETWEEN",Token.KEYWORD1);
+		tsqlKeywords.add("CROSS",Token.KEYWORD1);
+		tsqlKeywords.add("EXISTS",Token.KEYWORD1);
+		tsqlKeywords.add("IN",Token.KEYWORD1);
+		tsqlKeywords.add("INTERSECT",Token.KEYWORD1);
+		tsqlKeywords.add("JOIN",Token.KEYWORD1);
+		tsqlKeywords.add("LIKE",Token.KEYWORD1);
+		tsqlKeywords.add("NOT",Token.KEYWORD1);
+		tsqlKeywords.add("NULL",Token.KEYWORD1);
+		tsqlKeywords.add("OR",Token.KEYWORD1);
+		tsqlKeywords.add("OUTER",Token.KEYWORD1);
+		tsqlKeywords.add("SOME",Token.KEYWORD1);
+	}
+
+	private static void addSystemStoredProcedures()
+	{
+		tsqlKeywords.add("sp_add_agent_parameter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_agent_profile",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_alert",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_category",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_data_file_recover_suspect_db",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_job",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_jobschedule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_jobserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_jobstep",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_log_file_recover_suspect_db",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_notification",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_operator",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_targetservergroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_add_targetsvrgrp_member",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addalias",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addapprole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addarticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_adddistpublisher",Token.KEYWORD3);
+		tsqlKeywords.add("sp_adddistributiondb",Token.KEYWORD3);
+		tsqlKeywords.add("sp_adddistributor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addextendedproc",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addgroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addlinkedserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addlinkedsrvlogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addlinkedsrvlogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addlogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addmergearticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addmergefilter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addmergepublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addmergepullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addmergepullsubscription_agent",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addmergesubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addmessage",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addpublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addpublication_snapshot",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addpublisher70",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addpullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addpullsubscription_agent",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addremotelogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addrole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addrolemember",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addsrvrolemember",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addsubscriber",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addsubscriber_schedule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addsynctriggers",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addtabletocontents",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addtask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addtype",Token.KEYWORD3);
+		tsqlKeywords.add("sp_addumpdevice",Token.KEYWORD3);
+		tsqlKeywords.add("sp_adduser",Token.KEYWORD3);
+		tsqlKeywords.add("sp_altermessage",Token.KEYWORD3);
+		tsqlKeywords.add("sp_apply_job_to_targets",Token.KEYWORD3);
+		tsqlKeywords.add("sp_approlepassword",Token.KEYWORD3);
+		tsqlKeywords.add("sp_article_validation",Token.KEYWORD3);
+		tsqlKeywords.add("sp_articlecolumn",Token.KEYWORD3);
+		tsqlKeywords.add("sp_articlefilter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_articlesynctranprocs",Token.KEYWORD3);
+		tsqlKeywords.add("sp_articleview",Token.KEYWORD3);
+		tsqlKeywords.add("sp_attach_db",Token.KEYWORD3);
+		tsqlKeywords.add("sp_attach_single_file_db",Token.KEYWORD3);
+		tsqlKeywords.add("sp_autostats",Token.KEYWORD3);
+		tsqlKeywords.add("sp_bindefault",Token.KEYWORD3);
+		tsqlKeywords.add("sp_bindrule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_bindsession",Token.KEYWORD3);
+		tsqlKeywords.add("sp_browsereplcmds",Token.KEYWORD3);
+		tsqlKeywords.add("sp_catalogs",Token.KEYWORD3);
+		tsqlKeywords.add("sp_certify_removable",Token.KEYWORD3);
+		tsqlKeywords.add("sp_change_agent_parameter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_change_agent_profile",Token.KEYWORD3);
+		tsqlKeywords.add("sp_change_subscription_properties",Token.KEYWORD3);
+		tsqlKeywords.add("sp_change_users_login",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changearticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changedbowner",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changedistpublisher",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changedistributiondb",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changedistributor_password",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changedistributor_property",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changegroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changemergearticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changemergefilter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changemergepublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changemergepullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changemergesubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changeobjectowner",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changepublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changesubscriber",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changesubscriber_schedule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_changesubstatus",Token.KEYWORD3);
+		tsqlKeywords.add("sp_check_for_sync_trigger",Token.KEYWORD3);
+		tsqlKeywords.add("sp_column_privileges",Token.KEYWORD3);
+		tsqlKeywords.add("sp_column_privileges_ex",Token.KEYWORD3);
+		tsqlKeywords.add("sp_columns",Token.KEYWORD3);
+		tsqlKeywords.add("sp_columns_ex",Token.KEYWORD3);
+		tsqlKeywords.add("sp_configure",Token.KEYWORD3);
+		tsqlKeywords.add("sp_create_removable",Token.KEYWORD3);
+		tsqlKeywords.add("sp_createorphan",Token.KEYWORD3);
+		tsqlKeywords.add("sp_createstats",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursor_list",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursorclose",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursorexecute",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursorfetch",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursoropen",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursoroption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursorprepare",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cursorunprepare",Token.KEYWORD3);
+		tsqlKeywords.add("sp_cycle_errorlog",Token.KEYWORD3);
+		tsqlKeywords.add("sp_databases",Token.KEYWORD3);
+		tsqlKeywords.add("sp_datatype_info",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dbcmptlevel",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dbfixedrolepermission",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dboption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_defaultdb",Token.KEYWORD3);
+		tsqlKeywords.add("sp_defaultlanguage",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_alert",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_backuphistory",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_category",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_job",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_jobschedule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_jobserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_jobstep",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_notification",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_operator",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_targetserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_targetservergroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_delete_targetsvrgrp_member",Token.KEYWORD3);
+		tsqlKeywords.add("sp_deletemergeconflictrow",Token.KEYWORD3);
+		tsqlKeywords.add("sp_denylogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_depends",Token.KEYWORD3);
+		tsqlKeywords.add("sp_describe_cursor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_describe_cursor_columns",Token.KEYWORD3);
+		tsqlKeywords.add("sp_describe_cursor_tables",Token.KEYWORD3);
+		tsqlKeywords.add("sp_detach_db",Token.KEYWORD3);
+		tsqlKeywords.add("sp_drop_agent_parameter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_drop_agent_profile",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropalias",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropapprole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droparticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropdevice",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropdistpublisher",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropdistributiondb",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropdistributor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropextendedproc",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropgroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droplinkedsrvlogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droplinkedsrvlogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droplogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropmergearticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropmergefilter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropmergepublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropmergepullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropmergesubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropmessage",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droporphans",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droppublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droppullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropremotelogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droprole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droprolemember",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropsrvrolemember",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropsubscriber",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droptask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_droptype",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropuser",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dropwebtask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dsninfo",Token.KEYWORD3);
+		tsqlKeywords.add("sp_dumpparamcmd",Token.KEYWORD3);
+		tsqlKeywords.add("sp_enumcodepages",Token.KEYWORD3);
+		tsqlKeywords.add("sp_enumcustomresolvers",Token.KEYWORD3);
+		tsqlKeywords.add("sp_enumdsn",Token.KEYWORD3);
+		tsqlKeywords.add("sp_enumfullsubscribers",Token.KEYWORD3);
+		tsqlKeywords.add("sp_execute",Token.KEYWORD3);
+		tsqlKeywords.add("sp_executesql",Token.KEYWORD3);
+		tsqlKeywords.add("sp_expired_subscription_cleanup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_fkeys",Token.KEYWORD3);
+		tsqlKeywords.add("sp_foreignkeys",Token.KEYWORD3);
+		tsqlKeywords.add("sp_fulltext_catalog",Token.KEYWORD3);
+		tsqlKeywords.add("sp_fulltext_column",Token.KEYWORD3);
+		tsqlKeywords.add("sp_fulltext_database",Token.KEYWORD3);
+		tsqlKeywords.add("sp_fulltext_service",Token.KEYWORD3);
+		tsqlKeywords.add("sp_fulltext_table",Token.KEYWORD3);
+		tsqlKeywords.add("sp_generatefilters",Token.KEYWORD3);
+		tsqlKeywords.add("sp_get_distributor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_getbindtoken",Token.KEYWORD3);
+		tsqlKeywords.add("sp_getmergedeletetype",Token.KEYWORD3);
+		tsqlKeywords.add("sp_grant_publication_access",Token.KEYWORD3);
+		tsqlKeywords.add("sp_grantdbaccess",Token.KEYWORD3);
+		tsqlKeywords.add("sp_grantlogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_agent_default",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_agent_parameter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_agent_profile",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_alert",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_category",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_downloadlist",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_fulltext_catalogs",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_fulltext_catalogs_cursor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_fulltext_columns",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_fulltext_columns_cursor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_fulltext_tables",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_fulltext_tables_cursor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_job",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_jobhistory",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_jobschedule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_jobserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_jobstep",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_notification",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_operator",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_publication_access",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_targetserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_help_targetservergroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helparticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helparticlecolumns",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpconstraint",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpdb",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpdbfixedrole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpdevice",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpdistpublisher",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpdistributiondb",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpdistributor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpextendedproc",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpfile",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpfilegroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpgroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helphistory",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpindex",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helplanguage",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helplinkedsrvlogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helplogins",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergearticle",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergearticleconflicts",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergeconflictrows",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergedeleteconflictrows",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergefilter",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergepublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergepullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpmergesubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpntgroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helppublication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helppullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpremotelogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpreplicationdboption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helprole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helprolemember",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helprotect",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpsort",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpsrvrole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpsrvrolemember",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpsubscriberinfo",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpsubscription_properties",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helptask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helptext",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helptrigger",Token.KEYWORD3);
+		tsqlKeywords.add("sp_helpuser",Token.KEYWORD3);
+		tsqlKeywords.add("sp_indexes",Token.KEYWORD3);
+		tsqlKeywords.add("sp_indexoption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_link_publication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_linkedservers",Token.KEYWORD3);
+		tsqlKeywords.add("sp_lock",Token.KEYWORD3);
+		tsqlKeywords.add("sp_makewebtask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_manage_jobs_by_login",Token.KEYWORD3);
+		tsqlKeywords.add("sp_mergedummyupdate",Token.KEYWORD3);
+		tsqlKeywords.add("sp_mergesubscription_cleanup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_monitor",Token.KEYWORD3);
+		tsqlKeywords.add("sp_msx_defect",Token.KEYWORD3);
+		tsqlKeywords.add("sp_msx_enlist",Token.KEYWORD3);
+		tsqlKeywords.add("sp_OACreate",Token.KEYWORD3);
+		tsqlKeywords.add("sp_OADestroy",Token.KEYWORD3);
+		tsqlKeywords.add("sp_OAGetErrorInfo",Token.KEYWORD3);
+		tsqlKeywords.add("sp_OAGetProperty",Token.KEYWORD3);
+		tsqlKeywords.add("sp_OAMethod",Token.KEYWORD3);
+		tsqlKeywords.add("sp_OASetProperty",Token.KEYWORD3);
+		tsqlKeywords.add("sp_OAStop",Token.KEYWORD3);
+		tsqlKeywords.add("sp_password",Token.KEYWORD3);
+		tsqlKeywords.add("sp_pkeys",Token.KEYWORD3);
+		tsqlKeywords.add("sp_post_msx_operation",Token.KEYWORD3);
+		tsqlKeywords.add("sp_prepare",Token.KEYWORD3);
+		tsqlKeywords.add("sp_primarykeys",Token.KEYWORD3);
+		tsqlKeywords.add("sp_processmail",Token.KEYWORD3);
+		tsqlKeywords.add("sp_procoption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_publication_validation",Token.KEYWORD3);
+		tsqlKeywords.add("sp_purge_jobhistory",Token.KEYWORD3);
+		tsqlKeywords.add("sp_purgehistory",Token.KEYWORD3);
+		tsqlKeywords.add("sp_reassigntask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_recompile",Token.KEYWORD3);
+		tsqlKeywords.add("sp_refreshsubscriptions",Token.KEYWORD3);
+		tsqlKeywords.add("sp_refreshview",Token.KEYWORD3);
+		tsqlKeywords.add("sp_reinitmergepullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_reinitmergesubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_reinitpullsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_reinitsubscription",Token.KEYWORD3);
+		tsqlKeywords.add("sp_remoteoption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_remove_job_from_targets",Token.KEYWORD3);
+		tsqlKeywords.add("sp_removedbreplication",Token.KEYWORD3);
+		tsqlKeywords.add("sp_rename",Token.KEYWORD3);
+		tsqlKeywords.add("sp_renamedb",Token.KEYWORD3);
+		tsqlKeywords.add("sp_replcmds",Token.KEYWORD3);
+		tsqlKeywords.add("sp_replcounters",Token.KEYWORD3);
+		tsqlKeywords.add("sp_repldone",Token.KEYWORD3);
+		tsqlKeywords.add("sp_replflush",Token.KEYWORD3);
+		tsqlKeywords.add("sp_replication_agent_checkup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_replicationdboption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_replsetoriginator",Token.KEYWORD3);
+		tsqlKeywords.add("sp_replshowcmds",Token.KEYWORD3);
+		tsqlKeywords.add("sp_repltrans",Token.KEYWORD3);
+		tsqlKeywords.add("sp_reset_connection",Token.KEYWORD3);
+		tsqlKeywords.add("sp_resync_targetserver",Token.KEYWORD3);
+		tsqlKeywords.add("sp_revoke_publication_access",Token.KEYWORD3);
+		tsqlKeywords.add("sp_revokedbaccess",Token.KEYWORD3);
+		tsqlKeywords.add("sp_revokelogin",Token.KEYWORD3);
+		tsqlKeywords.add("sp_runwebtask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_script_synctran_commands",Token.KEYWORD3);
+		tsqlKeywords.add("sp_scriptdelproc",Token.KEYWORD3);
+		tsqlKeywords.add("sp_scriptinsproc",Token.KEYWORD3);
+		tsqlKeywords.add("sp_scriptmappedupdproc",Token.KEYWORD3);
+		tsqlKeywords.add("sp_scriptupdproc",Token.KEYWORD3);
+		tsqlKeywords.add("sp_sdidebug",Token.KEYWORD3);
+		tsqlKeywords.add("sp_server_info",Token.KEYWORD3);
+		tsqlKeywords.add("sp_serveroption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_serveroption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_setapprole",Token.KEYWORD3);
+		tsqlKeywords.add("sp_setnetname",Token.KEYWORD3);
+		tsqlKeywords.add("sp_spaceused",Token.KEYWORD3);
+		tsqlKeywords.add("sp_special_columns",Token.KEYWORD3);
+		tsqlKeywords.add("sp_sproc_columns",Token.KEYWORD3);
+		tsqlKeywords.add("sp_srvrolepermission",Token.KEYWORD3);
+		tsqlKeywords.add("sp_start_job",Token.KEYWORD3);
+		tsqlKeywords.add("sp_statistics",Token.KEYWORD3);
+		tsqlKeywords.add("sp_stop_job",Token.KEYWORD3);
+		tsqlKeywords.add("sp_stored_procedures",Token.KEYWORD3);
+		tsqlKeywords.add("sp_subscription_cleanup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_table_privileges",Token.KEYWORD3);
+		tsqlKeywords.add("sp_table_privileges_ex",Token.KEYWORD3);
+		tsqlKeywords.add("sp_table_validation",Token.KEYWORD3);
+		tsqlKeywords.add("sp_tableoption",Token.KEYWORD3);
+		tsqlKeywords.add("sp_tables",Token.KEYWORD3);
+		tsqlKeywords.add("sp_tables_ex",Token.KEYWORD3);
+		tsqlKeywords.add("sp_unbindefault",Token.KEYWORD3);
+		tsqlKeywords.add("sp_unbindrule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_unprepare",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_agent_profile",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_alert",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_category",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_job",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_jobschedule",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_jobstep",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_notification",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_operator",Token.KEYWORD3);
+		tsqlKeywords.add("sp_update_targetservergroup",Token.KEYWORD3);
+		tsqlKeywords.add("sp_updatestats",Token.KEYWORD3);
+		tsqlKeywords.add("sp_updatetask",Token.KEYWORD3);
+		tsqlKeywords.add("sp_validatelogins",Token.KEYWORD3);
+		tsqlKeywords.add("sp_validname",Token.KEYWORD3);
+		tsqlKeywords.add("sp_who",Token.KEYWORD3);
+		tsqlKeywords.add("xp_cmdshell",Token.KEYWORD3);
+		tsqlKeywords.add("xp_deletemail",Token.KEYWORD3);
+		tsqlKeywords.add("xp_enumgroups",Token.KEYWORD3);
+		tsqlKeywords.add("xp_findnextmsg",Token.KEYWORD3);
+		tsqlKeywords.add("xp_findnextmsg",Token.KEYWORD3);
+		tsqlKeywords.add("xp_grantlogin",Token.KEYWORD3);
+		tsqlKeywords.add("xp_logevent",Token.KEYWORD3);
+		tsqlKeywords.add("xp_loginconfig",Token.KEYWORD3);
+		tsqlKeywords.add("xp_logininfo",Token.KEYWORD3);
+		tsqlKeywords.add("xp_msver",Token.KEYWORD3);
+		tsqlKeywords.add("xp_readmail",Token.KEYWORD3);
+		tsqlKeywords.add("xp_revokelogin",Token.KEYWORD3);
+		tsqlKeywords.add("xp_sendmail",Token.KEYWORD3);
+		tsqlKeywords.add("xp_sprintf",Token.KEYWORD3);
+		tsqlKeywords.add("xp_sqlinventory",Token.KEYWORD3);
+		tsqlKeywords.add("xp_sqlmaint",Token.KEYWORD3);
+		tsqlKeywords.add("xp_sqltrace",Token.KEYWORD3);
+		tsqlKeywords.add("xp_sscanf",Token.KEYWORD3);
+		tsqlKeywords.add("xp_startmail",Token.KEYWORD3);
+		tsqlKeywords.add("xp_stopmail",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_addnewqueue",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_deletequeuedefinition",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_destroyqueue",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_enumqueuedefname",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_enumqueuehandles",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_eventclassrequired",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_flushqueryhistory",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_generate_event",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getappfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getconnectionidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getcpufilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getdbidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getdurationfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_geteventfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_geteventnames",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getevents",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_gethostfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_gethpidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getindidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getntdmfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getntnmfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getobjidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getqueueautostart",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getqueuedestination",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getqueueproperties",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getreadfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getserverfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getseverityfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getspidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getsysobjectsfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_gettextfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getuserfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_getwritefilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_loadqueuedefinition",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_pausequeue",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_restartqueue",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_savequeuedefinition",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setappfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setconnectionidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setcpufilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setdbidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setdurationfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_seteventclassrequired",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_seteventfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_sethostfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_sethpidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setindidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setntdmfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setntnmfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setobjidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setqueryhistory",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setqueueautostart",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setqueuecreateinfo",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setqueuedestination",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setreadfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setserverfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setseverityfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setspidfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setsysobjectsfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_settextfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setuserfilter",Token.KEYWORD3);
+		tsqlKeywords.add("xp_trace_setwritefilter",Token.KEYWORD3);
+	}
+
+	private static void addSystemTables()
+	{
+		tsqlKeywords.add("backupfile",Token.KEYWORD3);
+		tsqlKeywords.add("backupmediafamily",Token.KEYWORD3);
+		tsqlKeywords.add("backupmediaset",Token.KEYWORD3);
+		tsqlKeywords.add("backupset",Token.KEYWORD3);
+		tsqlKeywords.add("MSagent_parameters",Token.KEYWORD3);
+		tsqlKeywords.add("MSagent_profiles",Token.KEYWORD3);
+		tsqlKeywords.add("MSarticles",Token.KEYWORD3);
+		tsqlKeywords.add("MSdistpublishers",Token.KEYWORD3);
+		tsqlKeywords.add("MSdistribution_agents",Token.KEYWORD3);
+		tsqlKeywords.add("MSdistribution_history",Token.KEYWORD3);
+		tsqlKeywords.add("MSdistributiondbs",Token.KEYWORD3);
+		tsqlKeywords.add("MSdistributor",Token.KEYWORD3);
+		tsqlKeywords.add("MSlogreader_agents",Token.KEYWORD3);
+		tsqlKeywords.add("MSlogreader_history",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_agents",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_contents",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_delete_conflicts",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_genhistory",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_history",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_replinfo",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_subscriptions",Token.KEYWORD3);
+		tsqlKeywords.add("MSmerge_tombstone",Token.KEYWORD3);
+		tsqlKeywords.add("MSpublication_access",Token.KEYWORD3);
+		tsqlKeywords.add("Mspublications",Token.KEYWORD3);
+		tsqlKeywords.add("Mspublisher_databases",Token.KEYWORD3);
+		tsqlKeywords.add("MSrepl_commands",Token.KEYWORD3);
+		tsqlKeywords.add("MSrepl_errors",Token.KEYWORD3);
+		tsqlKeywords.add("Msrepl_originators",Token.KEYWORD3);
+		tsqlKeywords.add("MSrepl_transactions",Token.KEYWORD3);
+		tsqlKeywords.add("MSrepl_version",Token.KEYWORD3);
+		tsqlKeywords.add("MSreplication_objects",Token.KEYWORD3);
+		tsqlKeywords.add("MSreplication_subscriptions",Token.KEYWORD3);
+		tsqlKeywords.add("MSsnapshot_agents",Token.KEYWORD3);
+		tsqlKeywords.add("MSsnapshot_history",Token.KEYWORD3);
+		tsqlKeywords.add("MSsubscriber_info",Token.KEYWORD3);
+		tsqlKeywords.add("MSsubscriber_schedule",Token.KEYWORD3);
+		tsqlKeywords.add("MSsubscription_properties",Token.KEYWORD3);
+		tsqlKeywords.add("MSsubscriptions",Token.KEYWORD3);
+		tsqlKeywords.add("restorefile",Token.KEYWORD3);
+		tsqlKeywords.add("restorefilegroup",Token.KEYWORD3);
+		tsqlKeywords.add("restorehistory",Token.KEYWORD3);
+		tsqlKeywords.add("sysalerts",Token.KEYWORD3);
+		tsqlKeywords.add("sysallocations",Token.KEYWORD3);
+		tsqlKeywords.add("sysaltfiles",Token.KEYWORD3);
+		tsqlKeywords.add("sysarticles",Token.KEYWORD3);
+		tsqlKeywords.add("sysarticleupdates",Token.KEYWORD3);
+		tsqlKeywords.add("syscacheobjects",Token.KEYWORD3);
+		tsqlKeywords.add("syscategories",Token.KEYWORD3);
+		tsqlKeywords.add("syscharsets",Token.KEYWORD3);
+		tsqlKeywords.add("syscolumns",Token.KEYWORD3);
+		tsqlKeywords.add("syscomments",Token.KEYWORD3);
+		tsqlKeywords.add("sysconfigures",Token.KEYWORD3);
+		tsqlKeywords.add("sysconstraints",Token.KEYWORD3);
+		tsqlKeywords.add("syscurconfigs",Token.KEYWORD3);
+		tsqlKeywords.add("sysdatabases",Token.KEYWORD3);
+		tsqlKeywords.add("sysdatabases",Token.KEYWORD3);
+		tsqlKeywords.add("sysdepends",Token.KEYWORD3);
+		tsqlKeywords.add("sysdevices",Token.KEYWORD3);
+		tsqlKeywords.add("sysdownloadlist",Token.KEYWORD3);
+		tsqlKeywords.add("sysfilegroups",Token.KEYWORD3);
+		tsqlKeywords.add("sysfiles",Token.KEYWORD3);
+		tsqlKeywords.add("sysforeignkeys",Token.KEYWORD3);
+		tsqlKeywords.add("sysfulltextcatalogs",Token.KEYWORD3);
+		tsqlKeywords.add("sysindexes",Token.KEYWORD3);
+		tsqlKeywords.add("sysindexkeys",Token.KEYWORD3);
+		tsqlKeywords.add("sysjobhistory",Token.KEYWORD3);
+		tsqlKeywords.add("sysjobs",Token.KEYWORD3);
+		tsqlKeywords.add("sysjobschedules",Token.KEYWORD3);
+		tsqlKeywords.add("sysjobservers",Token.KEYWORD3);
+		tsqlKeywords.add("sysjobsteps",Token.KEYWORD3);
+		tsqlKeywords.add("syslanguages",Token.KEYWORD3);
+		tsqlKeywords.add("syslockinfo",Token.KEYWORD3);
+		tsqlKeywords.add("syslogins",Token.KEYWORD3);
+		tsqlKeywords.add("sysmembers",Token.KEYWORD3);
+		tsqlKeywords.add("sysmergearticles",Token.KEYWORD3);
+		tsqlKeywords.add("sysmergepublications",Token.KEYWORD3);
+		tsqlKeywords.add("sysmergeschemachange",Token.KEYWORD3);
+		tsqlKeywords.add("sysmergesubscriptions",Token.KEYWORD3);
+		tsqlKeywords.add("sysmergesubsetfilters",Token.KEYWORD3);
+		tsqlKeywords.add("sysmessages",Token.KEYWORD3);
+		tsqlKeywords.add("sysnotifications",Token.KEYWORD3);
+		tsqlKeywords.add("sysobjects",Token.KEYWORD3);
+		tsqlKeywords.add("sysobjects",Token.KEYWORD3);
+		tsqlKeywords.add("sysoledbusers",Token.KEYWORD3);
+		tsqlKeywords.add("sysoperators",Token.KEYWORD3);
+		tsqlKeywords.add("sysperfinfo",Token.KEYWORD3);
+		tsqlKeywords.add("syspermissions",Token.KEYWORD3);
+		tsqlKeywords.add("sysprocesses",Token.KEYWORD3);
+		tsqlKeywords.add("sysprotects",Token.KEYWORD3);
+		tsqlKeywords.add("syspublications",Token.KEYWORD3);
+		tsqlKeywords.add("sysreferences",Token.KEYWORD3);
+		tsqlKeywords.add("sysremotelogins",Token.KEYWORD3);
+		tsqlKeywords.add("sysreplicationalerts",Token.KEYWORD3);
+		tsqlKeywords.add("sysservers",Token.KEYWORD3);
+		tsqlKeywords.add("sysservers",Token.KEYWORD3);
+		tsqlKeywords.add("syssubscriptions",Token.KEYWORD3);
+		tsqlKeywords.add("systargetservergroupmembers",Token.KEYWORD3);
+		tsqlKeywords.add("systargetservergroups",Token.KEYWORD3);
+		tsqlKeywords.add("systargetservers",Token.KEYWORD3);
+		tsqlKeywords.add("systaskids",Token.KEYWORD3);
+		tsqlKeywords.add("systypes",Token.KEYWORD3);
+		tsqlKeywords.add("sysusers",Token.KEYWORD3);
+	}
+
+	private static KeywordMap tsqlKeywords;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TSQLTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CCTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CCTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CCTokenMarker.java	(revision 42196)
@@ -0,0 +1,137 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * CCTokenMarker.java - C++ token marker
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+
+/**
+ * C++ token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class CCTokenMarker extends CTokenMarker
+{
+	public CCTokenMarker()
+	{
+		super(true,getKeywords());
+	}
+
+	public static KeywordMap getKeywords()
+	{
+		if(ccKeywords == null)
+		{
+			ccKeywords = new KeywordMap(false);
+
+			ccKeywords.add("and", Token.KEYWORD3);
+			ccKeywords.add("and_eq", Token.KEYWORD3);
+			ccKeywords.add("asm", Token.KEYWORD2);         //
+			ccKeywords.add("auto", Token.KEYWORD1);        //
+			ccKeywords.add("bitand", Token.KEYWORD3);
+			ccKeywords.add("bitor", Token.KEYWORD3);
+			ccKeywords.add("bool",Token.KEYWORD3);
+			ccKeywords.add("break", Token.KEYWORD1);	   //
+			ccKeywords.add("case", Token.KEYWORD1);		   //
+			ccKeywords.add("catch", Token.KEYWORD1);
+			ccKeywords.add("char", Token.KEYWORD3);		   //
+			ccKeywords.add("class", Token.KEYWORD3);
+			ccKeywords.add("compl", Token.KEYWORD3);
+			ccKeywords.add("const", Token.KEYWORD1);	   //
+			ccKeywords.add("const_cast", Token.KEYWORD3);
+			ccKeywords.add("continue", Token.KEYWORD1);	   //
+			ccKeywords.add("default", Token.KEYWORD1);	   //
+			ccKeywords.add("delete", Token.KEYWORD1);
+			ccKeywords.add("do",Token.KEYWORD1);           //
+			ccKeywords.add("double" ,Token.KEYWORD3);	   //
+			ccKeywords.add("dynamic_cast", Token.KEYWORD3);
+			ccKeywords.add("else", 	Token.KEYWORD1);	   //
+			ccKeywords.add("enum",  Token.KEYWORD3);	   //
+			ccKeywords.add("explicit", Token.KEYWORD1);			
+			ccKeywords.add("export", Token.KEYWORD2);
+			ccKeywords.add("extern", Token.KEYWORD2);	   //
+			ccKeywords.add("false", Token.LITERAL2);
+			ccKeywords.add("float", Token.KEYWORD3);	   //
+			ccKeywords.add("for", Token.KEYWORD1);		   //
+			ccKeywords.add("friend", Token.KEYWORD1);			
+			ccKeywords.add("goto", Token.KEYWORD1);        //
+			ccKeywords.add("if", Token.KEYWORD1);		   //
+			ccKeywords.add("inline", Token.KEYWORD1);
+			ccKeywords.add("int", Token.KEYWORD3);		   //
+			ccKeywords.add("long", Token.KEYWORD3);		   //
+			ccKeywords.add("mutable", Token.KEYWORD3);
+			ccKeywords.add("namespace", Token.KEYWORD2);
+			ccKeywords.add("new", Token.KEYWORD1);
+			ccKeywords.add("not", Token.KEYWORD3);
+			ccKeywords.add("not_eq", Token.KEYWORD3);
+			ccKeywords.add("operator", Token.KEYWORD3);
+			ccKeywords.add("or", Token.KEYWORD3);
+			ccKeywords.add("or_eq", Token.KEYWORD3);
+			ccKeywords.add("private", Token.KEYWORD1);
+			ccKeywords.add("protected", Token.KEYWORD1);
+			ccKeywords.add("public", Token.KEYWORD1);
+			ccKeywords.add("register", Token.KEYWORD1);
+			ccKeywords.add("reinterpret_cast", Token.KEYWORD3);
+			ccKeywords.add("return", Token.KEYWORD1);      //
+			ccKeywords.add("short", Token.KEYWORD3);	   //
+			ccKeywords.add("signed", Token.KEYWORD3);	   //
+			ccKeywords.add("sizeof", Token.KEYWORD1);	   //
+			ccKeywords.add("static", Token.KEYWORD1);	   //
+			ccKeywords.add("static_cast", Token.KEYWORD3);
+			ccKeywords.add("struct", Token.KEYWORD3);	   //
+			ccKeywords.add("switch", Token.KEYWORD1);	   //
+			ccKeywords.add("template", Token.KEYWORD3);
+			ccKeywords.add("this", Token.LITERAL2);
+			ccKeywords.add("throw", Token.KEYWORD1);
+			ccKeywords.add("true", Token.LITERAL2);
+			ccKeywords.add("try", Token.KEYWORD1);
+			ccKeywords.add("typedef", Token.KEYWORD3);	   //
+			ccKeywords.add("typeid", Token.KEYWORD3);
+			ccKeywords.add("typename", Token.KEYWORD3);
+			ccKeywords.add("union", Token.KEYWORD3);	   //
+			ccKeywords.add("unsigned", Token.KEYWORD3);	   //
+			ccKeywords.add("using", Token.KEYWORD2);
+			ccKeywords.add("virtual", Token.KEYWORD1);
+			ccKeywords.add("void", Token.KEYWORD1);		   //
+			ccKeywords.add("volatile", Token.KEYWORD1);	   //
+			ccKeywords.add("wchar_t", Token.KEYWORD3);
+			ccKeywords.add("while", Token.KEYWORD1);	   //
+			ccKeywords.add("xor", Token.KEYWORD3);
+			ccKeywords.add("xor_eq", Token.KEYWORD3);            
+
+			// non ANSI keywords
+			ccKeywords.add("NULL", Token.LITERAL2);
+		}
+		return ccKeywords;
+	}
+
+	// private members
+	private static KeywordMap ccKeywords;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/CCTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JEditTextArea.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JEditTextArea.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JEditTextArea.java	(revision 42196)
@@ -0,0 +1,2190 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * JEditTextArea.java - jEdit's text component
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import java.awt.AWTEvent;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Insets;
+import java.awt.LayoutManager;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.AdjustmentListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionListener;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollBar;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.EventListenerList;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Element;
+import javax.swing.text.Segment;
+import javax.swing.text.Utilities;
+import javax.swing.undo.AbstractUndoableEdit;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.UndoableEdit;
+
+/**
+ * jEdit's text area component. It is more suited for editing program
+ * source code than JEditorPane, because it drops the unnecessary features
+ * (images, variable-width lines, and so on) and adds a whole bunch of
+ * useful goodies such as:
+ * <ul>
+ * <li>More flexible key binding scheme
+ * <li>Supports macro recorders
+ * <li>Rectangular selection
+ * <li>Bracket highlighting
+ * <li>Syntax highlighting
+ * <li>Command repetition
+ * <li>Block caret can be enabled
+ * </ul>
+ * It is also faster and doesn't have as many problems. It can be used
+ * in other applications; the only other part of jEdit it depends on is
+ * the syntax package.<p>
+ *
+ * To use it in your app, treat it like any other component, for example:
+ * <pre>JEditTextArea ta = new JEditTextArea();
+ * ta.setTokenMarker(new JavaTokenMarker());
+ * ta.setText("public class Test {\n"
+ *     + "    public static void main(String[] args) {\n"
+ *     + "        System.out.println(\"Hello World\");\n"
+ *     + "    }\n"
+ *     + "}");</pre>
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class JEditTextArea extends JComponent
+{
+	/**
+	 * Adding components with this name to the text area will place
+	 * them left of the horizontal scroll bar. In jEdit, the status
+	 * bar is added this way.
+	 */
+	public static String LEFT_OF_SCROLLBAR = "los";
+
+	/**
+	 * Creates a new JEditTextArea with the default settings.
+	 */
+	public JEditTextArea()
+	{
+		this(TextAreaDefaults.getDefaults());
+	}
+
+	/**
+	 * Creates a new JEditTextArea with the specified settings.
+	 * @param defaults The default settings
+	 */
+	public JEditTextArea(TextAreaDefaults defaults)
+	{
+		// Enable the necessary events
+		enableEvents(AWTEvent.KEY_EVENT_MASK);
+
+		// Initialize some misc. stuff
+		painter = new TextAreaPainter(this,defaults);
+		documentHandler = new DocumentHandler();
+		listenerList = new EventListenerList();
+		caretEvent = new MutableCaretEvent();
+		lineSegment = new Segment();
+		bracketLine = bracketPosition = -1;
+		blink = true;
+
+		// Initialize the GUI
+		setLayout(new ScrollLayout());
+		add(CENTER,painter);
+		add(RIGHT,vertical = new JScrollBar(JScrollBar.VERTICAL));
+		add(BOTTOM,horizontal = new JScrollBar(JScrollBar.HORIZONTAL));
+
+		// Add some event listeners
+		vertical.addAdjustmentListener(new AdjustHandler());
+		horizontal.addAdjustmentListener(new AdjustHandler());
+		painter.addComponentListener(new ComponentHandler());
+		painter.addMouseListener(new MouseHandler());
+		painter.addMouseMotionListener(new DragHandler());
+		addFocusListener(new FocusHandler());
+
+		// Load the defaults
+		setInputHandler(defaults.inputHandler);
+		setDocument(defaults.document);
+		editable = defaults.editable;
+		caretVisible = defaults.caretVisible;
+		caretBlinks = defaults.caretBlinks;
+		electricScroll = defaults.electricScroll;
+
+		popup = defaults.popup;
+
+		// We don't seem to get the initial focus event?
+		focusedComponent = this;
+	}
+
+	/**
+	 * Returns if this component can be traversed by pressing
+	 * the Tab key. This returns false.
+	 */
+	public final boolean isManagingFocus()
+	{
+		return true;
+	}
+
+	/**
+	 * Returns the object responsible for painting this text area.
+	 */
+	public final TextAreaPainter getPainter()
+	{
+		return painter;
+	}
+
+	/**
+	 * Returns the input handler.
+	 */
+	public final InputHandler getInputHandler()
+	{
+		return inputHandler;
+	}
+
+	/**
+	 * Sets the input handler.
+	 * @param inputHandler The new input handler
+	 */
+	public void setInputHandler(InputHandler inputHandler)
+	{
+		this.inputHandler = inputHandler;
+	}
+
+	/**
+	 * Returns true if the caret is blinking, false otherwise.
+	 */
+	public final boolean isCaretBlinkEnabled()
+	{
+		return caretBlinks;
+	}
+
+	/**
+	 * Toggles caret blinking.
+	 * @param caretBlinks True if the caret should blink, false otherwise
+	 */
+	public void setCaretBlinkEnabled(boolean caretBlinks)
+	{
+		this.caretBlinks = caretBlinks;
+		if(!caretBlinks)
+			blink = false;
+
+		painter.invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns true if the caret is visible, false otherwise.
+	 */
+	public final boolean isCaretVisible()
+	{
+		return (!caretBlinks || blink) && caretVisible;
+	}
+
+	/**
+	 * Sets if the caret should be visible.
+	 * @param caretVisible True if the caret should be visible, false
+	 * otherwise
+	 */
+	public void setCaretVisible(boolean caretVisible)
+	{
+		this.caretVisible = caretVisible;
+		blink = true;
+
+		painter.invalidateSelectedLines();
+	}
+
+	/**
+	 * Blinks the caret.
+	 */
+	public final void blinkCaret()
+	{
+		if(caretBlinks)
+		{
+			blink = !blink;
+			painter.invalidateSelectedLines();
+		}
+		else
+			blink = true;
+	}
+
+	/**
+	 * Returns the number of lines from the top and button of the
+	 * text area that are always visible.
+	 */
+	public final int getElectricScroll()
+	{
+		return electricScroll;
+	}
+
+	/**
+	 * Sets the number of lines from the top and bottom of the text
+	 * area that are always visible
+	 * @param electricScroll The number of lines always visible from
+	 * the top or bottom
+	 */
+	public final void setElectricScroll(int electricScroll)
+	{
+		this.electricScroll = electricScroll;
+	}
+
+	/**
+	 * Updates the state of the scroll bars. This should be called
+	 * if the number of lines in the document changes, or when the
+	 * size of the text are changes.
+	 */
+	public void updateScrollBars()
+	{
+		if(vertical != null && visibleLines != 0)
+		{
+			vertical.setValues(firstLine,visibleLines,0,getLineCount());
+			vertical.setUnitIncrement(2);
+			vertical.setBlockIncrement(visibleLines);
+		}
+
+		int width = painter.getWidth();
+		if(horizontal != null && width != 0)
+		{
+			horizontal.setValues(-horizontalOffset,width,0,width * 5);
+			horizontal.setUnitIncrement(painter.getFontMetrics()
+				.charWidth('w'));
+			horizontal.setBlockIncrement(width / 2);
+		}
+	}
+
+	/**
+	 * Returns the line displayed at the text area's origin.
+	 */
+	public final int getFirstLine()
+	{
+		return firstLine;
+	}
+
+	/**
+	 * Sets the line displayed at the text area's origin without
+	 * updating the scroll bars.
+	 */
+	public void setFirstLine(int firstLine)
+	{
+		if(firstLine == this.firstLine)
+			return;
+		int oldFirstLine = this.firstLine;
+		this.firstLine = firstLine;
+		if(firstLine != vertical.getValue())
+			updateScrollBars();
+		painter.repaint();
+	}
+
+	/**
+	 * Returns the number of lines visible in this text area.
+	 */
+	public final int getVisibleLines()
+	{
+		return visibleLines;
+	}
+
+	/**
+	 * Recalculates the number of visible lines. This should not
+	 * be called directly.
+	 */
+	public final void recalculateVisibleLines()
+	{
+		if(painter == null)
+			return;
+		int height = painter.getHeight();
+		int lineHeight = painter.getFontMetrics().getHeight();
+		int oldVisibleLines = visibleLines;
+		visibleLines = height / lineHeight;
+		updateScrollBars();
+	}
+
+	/**
+	 * Returns the horizontal offset of drawn lines.
+	 */
+	public final int getHorizontalOffset()
+	{
+		return horizontalOffset;
+	}
+
+	/**
+	 * Sets the horizontal offset of drawn lines. This can be used to
+	 * implement horizontal scrolling.
+	 * @param horizontalOffset offset The new horizontal offset
+	 */
+	public void setHorizontalOffset(int horizontalOffset)
+	{
+		if(horizontalOffset == this.horizontalOffset)
+			return;
+		this.horizontalOffset = horizontalOffset;
+		if(horizontalOffset != horizontal.getValue())
+			updateScrollBars();
+		painter.repaint();
+	}
+
+	/**
+	 * A fast way of changing both the first line and horizontal
+	 * offset.
+	 * @param firstLine The new first line
+	 * @param horizontalOffset The new horizontal offset
+	 * @return True if any of the values were changed, false otherwise
+	 */
+	public boolean setOrigin(int firstLine, int horizontalOffset)
+	{
+		boolean changed = false;
+		int oldFirstLine = this.firstLine;
+
+		if(horizontalOffset != this.horizontalOffset)
+		{
+			this.horizontalOffset = horizontalOffset;
+			changed = true;
+		}
+
+		if(firstLine != this.firstLine)
+		{
+			this.firstLine = firstLine;
+			changed = true;
+		}
+
+		if(changed)
+		{
+			updateScrollBars();
+			painter.repaint();
+		}
+
+		return changed;
+	}
+
+	/**
+	 * Ensures that the caret is visible by scrolling the text area if
+	 * necessary.
+	 * @return True if scrolling was actually performed, false if the
+	 * caret was already visible
+	 */
+	public boolean scrollToCaret()
+	{
+		int line = getCaretLine();
+		int lineStart = getLineStartOffset(line);
+		int offset = Math.max(0,Math.min(getLineLength(line) - 1,
+			getCaretPosition() - lineStart));
+
+		return scrollTo(line,offset);
+	}
+
+	/**
+	 * Ensures that the specified line and offset is visible by scrolling
+	 * the text area if necessary.
+	 * @param line The line to scroll to
+	 * @param offset The offset in the line to scroll to
+	 * @return True if scrolling was actually performed, false if the
+	 * line and offset was already visible
+	 */
+	public boolean scrollTo(int line, int offset)
+	{
+		// visibleLines == 0 before the component is realized
+		// we can't do any proper scrolling then, so we have
+		// this hack...
+		if(visibleLines == 0)
+		{
+			setFirstLine(Math.max(0,line - electricScroll));
+			return true;
+		}
+
+		int newFirstLine = firstLine;
+		int newHorizontalOffset = horizontalOffset;
+
+		if(line < firstLine + electricScroll)
+		{
+			newFirstLine = Math.max(0,line - electricScroll);
+		}
+		else if(line + electricScroll >= firstLine + visibleLines)
+		{
+			newFirstLine = (line - visibleLines) + electricScroll + 1;
+			if(newFirstLine + visibleLines >= getLineCount())
+				newFirstLine = getLineCount() - visibleLines;
+			if(newFirstLine < 0)
+				newFirstLine = 0;
+		}
+
+		int x = _offsetToX(line,offset);
+		int width = painter.getFontMetrics().charWidth('w');
+
+		if(x < 0)
+		{
+			newHorizontalOffset = Math.min(0,horizontalOffset
+				- x + width + 5);
+		}
+		else if(x + width >= painter.getWidth())
+		{
+			newHorizontalOffset = horizontalOffset +
+				(painter.getWidth() - x) - width - 5;
+		}
+
+		return setOrigin(newFirstLine,newHorizontalOffset);
+	}
+
+	/**
+	 * Converts a line index to a y co-ordinate.
+	 * @param line The line
+	 */
+	public int lineToY(int line)
+	{
+		FontMetrics fm = painter.getFontMetrics();
+		return (line - firstLine) * fm.getHeight()
+			- (fm.getLeading() + fm.getMaxDescent());
+	}
+
+	/**
+	 * Converts a y co-ordinate to a line index.
+	 * @param y The y co-ordinate
+	 */
+	public int yToLine(int y)
+	{
+		FontMetrics fm = painter.getFontMetrics();
+		int height = fm.getHeight();
+		return Math.max(0,Math.min(getLineCount() - 1,
+			y / height + firstLine));
+	}
+
+	/**
+	 * Converts an offset in a line into an x co-ordinate. This is a
+	 * slow version that can be used any time.
+	 * @param line The line
+	 * @param offset The offset, from the start of the line
+	 */
+	public final int offsetToX(int line, int offset)
+	{
+		// don't use cached tokens
+		painter.currentLineTokens = null;
+		return _offsetToX(line,offset);
+	}
+
+	/**
+	 * Converts an offset in a line into an x co-ordinate. This is a
+	 * fast version that should only be used if no changes were made
+	 * to the text since the last repaint.
+	 * @param line The line
+	 * @param offset The offset, from the start of the line
+	 */
+	public int _offsetToX(int line, int offset)
+	{
+		TokenMarker tokenMarker = getTokenMarker();
+
+		/* Use painter's cached info for speed */
+		FontMetrics fm = painter.getFontMetrics();
+
+		getLineText(line,lineSegment);
+
+		int segmentOffset = lineSegment.offset;
+		int x = horizontalOffset;
+
+		/* If syntax coloring is disabled, do simple translation */
+		if(tokenMarker == null)
+		{
+			lineSegment.count = offset;
+			return x + Utilities.getTabbedTextWidth(lineSegment,
+				fm,x,painter,0);
+		}
+		/* If syntax coloring is enabled, we have to do this because
+		 * tokens can vary in width */
+		else
+		{
+			Token tokens;
+			if(painter.currentLineIndex == line
+				&& painter.currentLineTokens != null)
+				tokens = painter.currentLineTokens;
+			else
+			{
+				painter.currentLineIndex = line;
+				tokens = painter.currentLineTokens
+					= tokenMarker.markTokens(lineSegment,line);
+			}
+
+			Toolkit toolkit = painter.getToolkit();
+			Font defaultFont = painter.getFont();
+			SyntaxStyle[] styles = painter.getStyles();
+
+			for(;;)
+			{
+				byte id = tokens.id;
+				if(id == Token.END)
+				{
+					return x;
+				}
+
+				if(id == Token.NULL)
+					fm = painter.getFontMetrics();
+				else
+					fm = styles[id].getFontMetrics(defaultFont);
+
+				int length = tokens.length;
+
+				if(offset + segmentOffset < lineSegment.offset + length)
+				{
+					lineSegment.count = offset - (lineSegment.offset - segmentOffset);
+					return x + Utilities.getTabbedTextWidth(
+						lineSegment,fm,x,painter,0);
+				}
+				else
+				{
+					lineSegment.count = length;
+					x += Utilities.getTabbedTextWidth(
+						lineSegment,fm,x,painter,0);
+					lineSegment.offset += length;
+				}
+				tokens = tokens.next;
+			}
+		}
+	}
+
+	/**
+	 * Converts an x co-ordinate to an offset within a line.
+	 * @param line The line
+	 * @param x The x co-ordinate
+	 */
+	public int xToOffset(int line, int x)
+	{
+		TokenMarker tokenMarker = getTokenMarker();
+
+		/* Use painter's cached info for speed */
+		FontMetrics fm = painter.getFontMetrics();
+
+		getLineText(line,lineSegment);
+
+		char[] segmentArray = lineSegment.array;
+		int segmentOffset = lineSegment.offset;
+		int segmentCount = lineSegment.count;
+
+		int width = horizontalOffset;
+
+		if(tokenMarker == null)
+		{
+			for(int i = 0; i < segmentCount; i++)
+			{
+				char c = segmentArray[i + segmentOffset];
+				int charWidth;
+				if(c == '\t')
+					charWidth = (int)painter.nextTabStop(width,i)
+						- width;
+				else
+					charWidth = fm.charWidth(c);
+
+				if(painter.isBlockCaretEnabled())
+				{
+					if(x - charWidth <= width)
+						return i;
+				}
+				else
+				{
+					if(x - charWidth / 2 <= width)
+						return i;
+				}
+
+				width += charWidth;
+			}
+
+			return segmentCount;
+		}
+		else
+		{
+			Token tokens;
+			if(painter.currentLineIndex == line && painter
+				.currentLineTokens != null)
+				tokens = painter.currentLineTokens;
+			else
+			{
+				painter.currentLineIndex = line;
+				tokens = painter.currentLineTokens
+					= tokenMarker.markTokens(lineSegment,line);
+			}
+
+			int offset = 0;
+			Toolkit toolkit = painter.getToolkit();
+			Font defaultFont = painter.getFont();
+			SyntaxStyle[] styles = painter.getStyles();
+
+			for(;;)
+			{
+				byte id = tokens.id;
+				if(id == Token.END)
+					return offset;
+
+				if(id == Token.NULL)
+					fm = painter.getFontMetrics();
+				else
+					fm = styles[id].getFontMetrics(defaultFont);
+
+				int length = tokens.length;
+
+				for(int i = 0; i < length; i++)
+				{
+					char c = segmentArray[segmentOffset + offset + i];
+					int charWidth;
+					if(c == '\t')
+						charWidth = (int)painter.nextTabStop(width,offset + i)
+							- width;
+					else
+						charWidth = fm.charWidth(c);
+
+					if(painter.isBlockCaretEnabled())
+					{
+						if(x - charWidth <= width)
+							return offset + i;
+					}
+					else
+					{
+						if(x - charWidth / 2 <= width)
+							return offset + i;
+					}
+
+					width += charWidth;
+				}
+
+				offset += length;
+				tokens = tokens.next;
+			}
+		}
+	}
+
+	/**
+	 * Converts a point to an offset, from the start of the text.
+	 * @param x The x co-ordinate of the point
+	 * @param y The y co-ordinate of the point
+	 */
+	public int xyToOffset(int x, int y)
+	{
+		int line = yToLine(y);
+		int start = getLineStartOffset(line);
+		return start + xToOffset(line,x);
+	}
+
+	/**
+	 * Returns the document this text area is editing.
+	 */
+	public final Document getDocument()
+	{
+		return document;
+	}
+
+	/**
+	 * Sets the document this text area is editing.
+	 * @param document The document
+	 */
+	public void setDocument(SyntaxDocument document)
+	{
+		if(this.document == document)
+			return;
+		if(this.document != null)
+			this.document.removeDocumentListener(documentHandler);
+		this.document = document;
+
+		document.addDocumentListener(documentHandler);
+
+		select(0,0);
+		updateScrollBars();
+		painter.repaint();
+	}
+
+	/**
+	 * Returns the document's token marker. Equivalent to calling
+	 * <code>getDocument().getTokenMarker()</code>.
+	 */
+	public final TokenMarker getTokenMarker()
+	{
+		return document.getTokenMarker();
+	}
+
+	/**
+	 * Sets the document's token marker. Equivalent to caling
+	 * <code>getDocument().setTokenMarker()</code>.
+	 * @param tokenMarker The token marker
+	 */
+	public final void setTokenMarker(TokenMarker tokenMarker)
+	{
+		document.setTokenMarker(tokenMarker);
+	}
+
+	/**
+	 * Returns the length of the document. Equivalent to calling
+	 * <code>getDocument().getLength()</code>.
+	 */
+	public final int getDocumentLength()
+	{
+		return document.getLength();
+	}
+
+	/**
+	 * Returns the number of lines in the document.
+	 */
+	public final int getLineCount()
+	{
+		return document.getDefaultRootElement().getElementCount();
+	}
+
+	/**
+	 * Returns the line containing the specified offset.
+	 * @param offset The offset
+	 */
+	public final int getLineOfOffset(int offset)
+	{
+		return document.getDefaultRootElement().getElementIndex(offset);
+	}
+
+	/**
+	 * Returns the start offset of the specified line.
+	 * @param line The line
+	 * @return The start offset of the specified line, or -1 if the line is
+	 * invalid
+	 */
+	public int getLineStartOffset(int line)
+	{
+		Element lineElement = document.getDefaultRootElement()
+			.getElement(line);
+		if(lineElement == null)
+			return -1;
+		else
+			return lineElement.getStartOffset();
+	}
+
+	/**
+	 * Returns the end offset of the specified line.
+	 * @param line The line
+	 * @return The end offset of the specified line, or -1 if the line is
+	 * invalid.
+	 */
+	public int getLineEndOffset(int line)
+	{
+		Element lineElement = document.getDefaultRootElement()
+			.getElement(line);
+		if(lineElement == null)
+			return -1;
+		else
+			return lineElement.getEndOffset();
+	}
+
+	/**
+	 * Returns the length of the specified line.
+	 * @param line The line
+	 */
+	public int getLineLength(int line)
+	{
+		Element lineElement = document.getDefaultRootElement()
+			.getElement(line);
+		if(lineElement == null)
+			return -1;
+		else
+			return lineElement.getEndOffset()
+				- lineElement.getStartOffset() - 1;
+	}
+
+	/**
+	 * Returns the entire text of this text area.
+	 */
+	public String getText()
+	{
+		try
+		{
+			return document.getText(0,document.getLength());
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+			return null;
+		}
+	}
+
+	/**
+	 * Sets the entire text of this text area.
+	 */
+	public void setText(String text)
+	{
+		try
+		{
+			document.beginCompoundEdit();
+			document.remove(0,document.getLength());
+			document.insertString(0,text,null);
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+		}
+		finally
+		{
+			document.endCompoundEdit();
+		}
+	}
+
+	/**
+	 * Returns the specified substring of the document.
+	 * @param start The start offset
+	 * @param len The length of the substring
+	 * @return The substring, or null if the offsets are invalid
+	 */
+	public final String getText(int start, int len)
+	{
+		try
+		{
+			return document.getText(start,len);
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+			return null;
+		}
+	}
+
+	/**
+	 * Copies the specified substring of the document into a segment.
+	 * If the offsets are invalid, the segment will contain a null string.
+	 * @param start The start offset
+	 * @param len The length of the substring
+	 * @param segment The segment
+	 */
+	public final void getText(int start, int len, Segment segment)
+	{
+		try
+		{
+			document.getText(start,len,segment);
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+			segment.offset = segment.count = 0;
+		}
+	}
+
+	/**
+	 * Returns the text on the specified line.
+	 * @param lineIndex The line
+	 * @return The text, or null if the line is invalid
+	 */
+	public final String getLineText(int lineIndex)
+	{
+		int start = getLineStartOffset(lineIndex);
+		return getText(start,getLineEndOffset(lineIndex) - start - 1);
+	}
+
+	/**
+	 * Copies the text on the specified line into a segment. If the line
+	 * is invalid, the segment will contain a null string.
+	 * @param lineIndex The line
+	 */
+	public final void getLineText(int lineIndex, Segment segment)
+	{
+		int start = getLineStartOffset(lineIndex);
+		getText(start,getLineEndOffset(lineIndex) - start - 1,segment);
+	}
+
+	/**
+	 * Returns the selection start offset.
+	 */
+	public final int getSelectionStart()
+	{
+		return selectionStart;
+	}
+
+	/**
+	 * Returns the offset where the selection starts on the specified
+	 * line.
+	 */
+	public int getSelectionStart(int line)
+	{
+		if(line == selectionStartLine)
+			return selectionStart;
+		else if(rectSelect)
+		{
+			Element map = document.getDefaultRootElement();
+			int start = selectionStart - map.getElement(selectionStartLine)
+				.getStartOffset();
+
+			Element lineElement = map.getElement(line);
+			int lineStart = lineElement.getStartOffset();
+			int lineEnd = lineElement.getEndOffset() - 1;
+			return Math.min(lineEnd,lineStart + start);
+		}
+		else
+			return getLineStartOffset(line);
+	}
+
+	/**
+	 * Returns the selection start line.
+	 */
+	public final int getSelectionStartLine()
+	{
+		return selectionStartLine;
+	}
+
+	/**
+	 * Sets the selection start. The new selection will be the new
+	 * selection start and the old selection end.
+	 * @param selectionStart The selection start
+	 * @see #select(int,int)
+	 */
+	public final void setSelectionStart(int selectionStart)
+	{
+		select(selectionStart,selectionEnd);
+	}
+
+	/**
+	 * Returns the selection end offset.
+	 */
+	public final int getSelectionEnd()
+	{
+		return selectionEnd;
+	}
+
+	/**
+	 * Returns the offset where the selection ends on the specified
+	 * line.
+	 */
+	public int getSelectionEnd(int line)
+	{
+		if(line == selectionEndLine)
+			return selectionEnd;
+		else if(rectSelect)
+		{
+			Element map = document.getDefaultRootElement();
+			int end = selectionEnd - map.getElement(selectionEndLine)
+				.getStartOffset();
+
+			Element lineElement = map.getElement(line);
+			int lineStart = lineElement.getStartOffset();
+			int lineEnd = lineElement.getEndOffset() - 1;
+			return Math.min(lineEnd,lineStart + end);
+		}
+		else
+			return getLineEndOffset(line) - 1;
+	}
+
+	/**
+	 * Returns the selection end line.
+	 */
+	public final int getSelectionEndLine()
+	{
+		return selectionEndLine;
+	}
+
+	/**
+	 * Sets the selection end. The new selection will be the old
+	 * selection start and the bew selection end.
+	 * @param selectionEnd The selection end
+	 * @see #select(int,int)
+	 */
+	public final void setSelectionEnd(int selectionEnd)
+	{
+		select(selectionStart,selectionEnd);
+	}
+
+	/**
+	 * Returns the caret position. This will either be the selection
+	 * start or the selection end, depending on which direction the
+	 * selection was made in.
+	 */
+	public final int getCaretPosition()
+	{
+		return (biasLeft ? selectionStart : selectionEnd);
+	}
+
+	/**
+	 * Returns the caret line.
+	 */
+	public final int getCaretLine()
+	{
+		return (biasLeft ? selectionStartLine : selectionEndLine);
+	}
+
+	/**
+	 * Returns the mark position. This will be the opposite selection
+	 * bound to the caret position.
+	 * @see #getCaretPosition()
+	 */
+	public final int getMarkPosition()
+	{
+		return (biasLeft ? selectionEnd : selectionStart);
+	}
+
+	/**
+	 * Returns the mark line.
+	 */
+	public final int getMarkLine()
+	{
+		return (biasLeft ? selectionEndLine : selectionStartLine);
+	}
+
+	/**
+	 * Sets the caret position. The new selection will consist of the
+	 * caret position only (hence no text will be selected)
+	 * @param caret The caret position
+	 * @see #select(int,int)
+	 */
+	public final void setCaretPosition(int caret)
+	{
+		select(caret,caret);
+	}
+
+	/**
+	 * Selects all text in the document.
+	 */
+	public final void selectAll()
+	{
+		select(0,getDocumentLength());
+	}
+
+	/**
+	 * Moves the mark to the caret position.
+	 */
+	public final void selectNone()
+	{
+		select(getCaretPosition(),getCaretPosition());
+	}
+
+	/**
+	 * Selects from the start offset to the end offset. This is the
+	 * general selection method used by all other selecting methods.
+	 * The caret position will be start if start &lt; end, and end
+	 * if end &gt; start.
+	 * @param start The start offset
+	 * @param end The end offset
+	 */
+	public void select(int start, int end)
+	{
+		int newStart, newEnd;
+		boolean newBias;
+		if(start <= end)
+		{
+			newStart = start;
+			newEnd = end;
+			newBias = false;
+		}
+		else
+		{
+			newStart = end;
+			newEnd = start;
+			newBias = true;
+		}
+
+		if(newStart < 0 || newEnd > getDocumentLength())
+		{
+			throw new IllegalArgumentException("Bounds out of"
+				+ " range: " + newStart + "," +
+				newEnd);
+		}
+
+		// If the new position is the same as the old, we don't
+		// do all this crap, however we still do the stuff at
+		// the end (clearing magic position, scrolling)
+		if(newStart != selectionStart || newEnd != selectionEnd
+			|| newBias != biasLeft)
+		{
+			int newStartLine = getLineOfOffset(newStart);
+			int newEndLine = getLineOfOffset(newEnd);
+
+			if(painter.isBracketHighlightEnabled())
+			{
+				if(bracketLine != -1)
+					painter.invalidateLine(bracketLine);
+				updateBracketHighlight(end);
+				if(bracketLine != -1)
+					painter.invalidateLine(bracketLine);
+			}
+
+			painter.invalidateLineRange(selectionStartLine,selectionEndLine);
+			painter.invalidateLineRange(newStartLine,newEndLine);
+
+			document.addUndoableEdit(new CaretUndo(
+				selectionStart,selectionEnd));
+
+			selectionStart = newStart;
+			selectionEnd = newEnd;
+			selectionStartLine = newStartLine;
+			selectionEndLine = newEndLine;
+			biasLeft = newBias;
+
+			fireCaretEvent();
+		}
+
+		// When the user is typing, etc, we don't want the caret
+		// to blink
+		blink = true;
+		caretTimer.restart();
+
+		// Disable rectangle select if selection start = selection end
+		if(selectionStart == selectionEnd)
+			rectSelect = false;
+
+		// Clear the `magic' caret position used by up/down
+		magicCaret = -1;
+
+		scrollToCaret();
+	}
+
+	/**
+	 * Returns the selected text, or null if no selection is active.
+	 */
+	public final String getSelectedText()
+	{
+		if(selectionStart == selectionEnd)
+			return null;
+
+		if(rectSelect)
+		{
+			// Return each row of the selection on a new line
+
+			Element map = document.getDefaultRootElement();
+
+			int start = selectionStart - map.getElement(selectionStartLine)
+				.getStartOffset();
+			int end = selectionEnd - map.getElement(selectionEndLine)
+				.getStartOffset();
+
+			// Certain rectangles satisfy this condition...
+			if(end < start)
+			{
+				int tmp = end;
+				end = start;
+				start = tmp;
+			}
+
+			StringBuffer buf = new StringBuffer();
+			Segment seg = new Segment();
+
+			for(int i = selectionStartLine; i <= selectionEndLine; i++)
+			{
+				Element lineElement = map.getElement(i);
+				int lineStart = lineElement.getStartOffset();
+				int lineEnd = lineElement.getEndOffset() - 1;
+				int lineLen = lineEnd - lineStart;
+
+				lineStart = Math.min(lineStart + start,lineEnd);
+				lineLen = Math.min(end - start,lineEnd - lineStart);
+
+				getText(lineStart,lineLen,seg);
+				buf.append(seg.array,seg.offset,seg.count);
+
+				if(i != selectionEndLine)
+					buf.append('\n');
+			}
+
+			return buf.toString();
+		}
+		else
+		{
+			return getText(selectionStart,
+				selectionEnd - selectionStart);
+		}
+	}
+
+	/**
+	 * Replaces the selection with the specified text.
+	 * @param selectedText The replacement text for the selection
+	 */
+	public void setSelectedText(String selectedText)
+	{
+		if(!editable)
+		{
+			throw new InternalError("Text component"
+				+ " read only");
+		}
+
+		document.beginCompoundEdit();
+
+		try
+		{
+			if(rectSelect)
+			{
+				Element map = document.getDefaultRootElement();
+
+				int start = selectionStart - map.getElement(selectionStartLine)
+					.getStartOffset();
+				int end = selectionEnd - map.getElement(selectionEndLine)
+					.getStartOffset();
+
+				// Certain rectangles satisfy this condition...
+				if(end < start)
+				{
+					int tmp = end;
+					end = start;
+					start = tmp;
+				}
+
+				int lastNewline = 0;
+				int currNewline = 0;
+
+				for(int i = selectionStartLine; i <= selectionEndLine; i++)
+				{
+					Element lineElement = map.getElement(i);
+					int lineStart = lineElement.getStartOffset();
+					int lineEnd = lineElement.getEndOffset() - 1;
+					int rectStart = Math.min(lineEnd,lineStart + start);
+
+					document.remove(rectStart,Math.min(lineEnd - rectStart,
+						end - start));
+
+					if(selectedText == null)
+						continue;
+
+					currNewline = selectedText.indexOf('\n',lastNewline);
+					if(currNewline == -1)
+						currNewline = selectedText.length();
+
+					document.insertString(rectStart,selectedText
+						.substring(lastNewline,currNewline),null);
+
+					lastNewline = Math.min(selectedText.length(),
+						currNewline + 1);
+				}
+
+				if(selectedText != null &&
+					currNewline != selectedText.length())
+				{
+					int offset = map.getElement(selectionEndLine)
+						.getEndOffset() - 1;
+					document.insertString(offset,"\n",null);
+					document.insertString(offset + 1,selectedText
+						.substring(currNewline + 1),null);
+				}
+			}
+			else
+			{
+				document.remove(selectionStart,
+					selectionEnd - selectionStart);
+				if(selectedText != null)
+				{
+					document.insertString(selectionStart,
+						selectedText,null);
+				}
+			}
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+			throw new InternalError("Cannot replace"
+				+ " selection");
+		}
+		// No matter what happends... stops us from leaving document
+		// in a bad state
+		finally
+		{
+			document.endCompoundEdit();
+		}
+
+		setCaretPosition(selectionEnd);
+	}
+
+	/**
+	 * Returns true if this text area is editable, false otherwise.
+	 */
+	public final boolean isEditable()
+	{
+		return editable;
+	}
+
+	/**
+	 * Sets if this component is editable.
+	 * @param editable True if this text area should be editable,
+	 * false otherwise
+	 */
+	public final void setEditable(boolean editable)
+	{
+		this.editable = editable;
+	}
+
+	/**
+	 * Returns the right click popup menu.
+	 */
+	public final JPopupMenu getRightClickPopup()
+	{
+		return popup;
+	}
+
+	/**
+	 * Sets the right click popup menu.
+	 * @param popup The popup
+	 */
+	public final void setRightClickPopup(JPopupMenu popup)
+	{
+		this.popup = popup;
+	}
+
+	/**
+	 * Returns the `magic' caret position. This can be used to preserve
+	 * the column position when moving up and down lines.
+	 */
+	public final int getMagicCaretPosition()
+	{
+		return magicCaret;
+	}
+
+	/**
+	 * Sets the `magic' caret position. This can be used to preserve
+	 * the column position when moving up and down lines.
+	 * @param magicCaret The magic caret position
+	 */
+	public final void setMagicCaretPosition(int magicCaret)
+	{
+		this.magicCaret = magicCaret;
+	}
+
+	/**
+	 * Similar to <code>setSelectedText()</code>, but overstrikes the
+	 * appropriate number of characters if overwrite mode is enabled.
+	 * @param str The string
+	 * @see #setSelectedText(String)
+	 * @see #isOverwriteEnabled()
+	 */
+	public void overwriteSetSelectedText(String str)
+	{
+		// Don't overstrike if there is a selection
+		if(!overwrite || selectionStart != selectionEnd)
+		{
+			setSelectedText(str);
+			return;
+		}
+
+		// Don't overstrike if we're on the end of
+		// the line
+		int caret = getCaretPosition();
+		int caretLineEnd = getLineEndOffset(getCaretLine());
+		if(caretLineEnd - caret <= str.length())
+		{
+			setSelectedText(str);
+			return;
+		}
+
+		document.beginCompoundEdit();
+
+		try
+		{
+			document.remove(caret,str.length());
+			document.insertString(caret,str,null);
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+		}
+		finally
+		{
+			document.endCompoundEdit();
+		}
+	}
+
+	/**
+	 * Returns true if overwrite mode is enabled, false otherwise.
+	 */
+	public final boolean isOverwriteEnabled()
+	{
+		return overwrite;
+	}
+
+	/**
+	 * Sets if overwrite mode should be enabled.
+	 * @param overwrite True if overwrite mode should be enabled,
+	 * false otherwise.
+	 */
+	public final void setOverwriteEnabled(boolean overwrite)
+	{
+		this.overwrite = overwrite;
+		painter.invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns true if the selection is rectangular, false otherwise.
+	 */
+	public final boolean isSelectionRectangular()
+	{
+		return rectSelect;
+	}
+
+	/**
+	 * Sets if the selection should be rectangular.
+	 * @param overwrite True if the selection should be rectangular,
+	 * false otherwise.
+	 */
+	public final void setSelectionRectangular(boolean rectSelect)
+	{
+		this.rectSelect = rectSelect;
+		painter.invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns the position of the highlighted bracket (the bracket
+	 * matching the one before the caret)
+	 */
+	public final int getBracketPosition()
+	{
+		return bracketPosition;
+	}
+
+	/**
+	 * Returns the line of the highlighted bracket (the bracket
+	 * matching the one before the caret)
+	 */
+	public final int getBracketLine()
+	{
+		return bracketLine;
+	}
+
+	/**
+	 * Adds a caret change listener to this text area.
+	 * @param listener The listener
+	 */
+	public final void addCaretListener(CaretListener listener)
+	{
+		listenerList.add(CaretListener.class,listener);
+	}
+
+	/**
+	 * Removes a caret change listener from this text area.
+	 * @param listener The listener
+	 */
+	public final void removeCaretListener(CaretListener listener)
+	{
+		listenerList.remove(CaretListener.class,listener);
+	}
+
+	/**
+	 * Deletes the selected text from the text area and places it
+	 * into the clipboard.
+	 */
+	public void cut()
+	{
+		if(editable)
+		{
+			copy();
+			setSelectedText("");
+		}
+	}
+
+	/**
+	 * Places the selected text into the clipboard.
+	 */
+	public void copy()
+	{
+		if(selectionStart != selectionEnd)
+		{
+			Clipboard clipboard = getToolkit().getSystemClipboard();
+
+			String selection = getSelectedText();
+
+			int repeatCount = inputHandler.getRepeatCount();
+			StringBuffer buf = new StringBuffer();
+			for(int i = 0; i < repeatCount; i++)
+				buf.append(selection);
+
+			clipboard.setContents(new StringSelection(buf.toString()),null);
+		}
+	}
+
+	/**
+	 * Inserts the clipboard contents into the text.
+	 */
+	public void paste()
+	{
+		if(editable)
+		{
+			Clipboard clipboard = getToolkit().getSystemClipboard();
+			try
+			{
+				// The MacOS MRJ doesn't convert \r to \n,
+				// so do it here
+				String selection = ((String)clipboard
+					.getContents(this).getTransferData(
+					DataFlavor.stringFlavor))
+					.replace('\r','\n');
+
+				int repeatCount = inputHandler.getRepeatCount();
+				StringBuffer buf = new StringBuffer();
+				for(int i = 0; i < repeatCount; i++)
+					buf.append(selection);
+				selection = buf.toString();
+				setSelectedText(selection);
+			}
+			catch(Exception e)
+			{
+				getToolkit().beep();
+				System.err.println("Clipboard does not"
+					+ " contain a string");
+			}
+		}
+	}
+
+	/**
+	 * Called by the AWT when this component is removed from it's parent.
+	 * This stops clears the currently focused component.
+	 */
+	public void removeNotify()
+	{
+		super.removeNotify();
+		if(focusedComponent == this)
+			focusedComponent = null;
+	}
+
+	/**
+	 * Forwards key events directly to the input handler.
+	 * This is slightly faster than using a KeyListener
+	 * because some Swing overhead is avoided.
+	 */
+	public void processKeyEvent(KeyEvent evt)
+	{
+		if(inputHandler == null)
+			return;
+		switch(evt.getID())
+		{
+		case KeyEvent.KEY_TYPED:
+			inputHandler.keyTyped(evt);
+			break;
+		case KeyEvent.KEY_PRESSED:
+			inputHandler.keyPressed(evt);
+			break;
+		case KeyEvent.KEY_RELEASED:
+			inputHandler.keyReleased(evt);
+			break;
+		}
+	}
+
+	// protected members
+	protected static String CENTER = "center";
+	protected static String RIGHT = "right";
+	protected static String BOTTOM = "bottom";
+
+	protected static JEditTextArea focusedComponent;
+	protected static Timer caretTimer;
+
+	protected TextAreaPainter painter;
+
+	protected JPopupMenu popup;
+
+	protected EventListenerList listenerList;
+	protected MutableCaretEvent caretEvent;
+
+	protected boolean caretBlinks;
+	protected boolean caretVisible;
+	protected boolean blink;
+
+	protected boolean editable;
+
+	protected int firstLine;
+	protected int visibleLines;
+	protected int electricScroll;
+
+	protected int horizontalOffset;
+
+	protected JScrollBar vertical;
+	protected JScrollBar horizontal;
+	protected boolean scrollBarsInitialized;
+
+	protected InputHandler inputHandler;
+	protected SyntaxDocument document;
+	protected DocumentHandler documentHandler;
+
+	protected Segment lineSegment;
+
+	protected int selectionStart;
+	protected int selectionStartLine;
+	protected int selectionEnd;
+	protected int selectionEndLine;
+	protected boolean biasLeft;
+
+	protected int bracketPosition;
+	protected int bracketLine;
+
+	protected int magicCaret;
+	protected boolean overwrite;
+	protected boolean rectSelect;
+
+	protected void fireCaretEvent()
+	{
+		Object[] listeners = listenerList.getListenerList();
+		for(int i = listeners.length - 2; i >= 0; i--)
+		{
+			if(listeners[i] == CaretListener.class)
+			{
+				((CaretListener)listeners[i+1]).caretUpdate(caretEvent);
+			}
+		}
+		super.validate();
+	}
+
+	protected void updateBracketHighlight(int newCaretPosition)
+	{
+		if(newCaretPosition == 0)
+		{
+			bracketPosition = bracketLine = -1;
+			return;
+		}
+
+		try
+		{
+			int offset = TextUtilities.findMatchingBracket(
+				document,newCaretPosition - 1);
+			if(offset != -1)
+			{
+				bracketLine = getLineOfOffset(offset);
+				bracketPosition = offset - getLineStartOffset(bracketLine);
+				return;
+			}
+		}
+		catch(BadLocationException bl)
+		{
+			bl.printStackTrace();
+		}
+
+		bracketLine = bracketPosition = -1;
+	}
+
+	protected void documentChanged(DocumentEvent evt)
+	{
+		DocumentEvent.ElementChange ch = evt.getChange(
+			document.getDefaultRootElement());
+
+		int count;
+		if(ch == null)
+			count = 0;
+		else
+			count = ch.getChildrenAdded().length -
+				ch.getChildrenRemoved().length;
+
+		int line = getLineOfOffset(evt.getOffset());
+		if(count == 0)
+		{
+			painter.invalidateLine(line);
+		}
+		// do magic stuff
+		else if(line < firstLine)
+		{
+			setFirstLine(firstLine + count);
+		}
+		// end of magic stuff
+		else
+		{
+			painter.invalidateLineRange(line,firstLine + visibleLines);
+			updateScrollBars();
+		}
+	}
+
+	class ScrollLayout implements LayoutManager
+	{
+		public void addLayoutComponent(String name, Component comp)
+		{
+			if(name.equals(CENTER))
+				center = comp;
+			else if(name.equals(RIGHT))
+				right = comp;
+			else if(name.equals(BOTTOM))
+				bottom = comp;
+			else if(name.equals(LEFT_OF_SCROLLBAR))
+				leftOfScrollBar.addElement(comp);
+		}
+
+		public void removeLayoutComponent(Component comp)
+		{
+			if(center == comp)
+				center = null;
+			if(right == comp)
+				right = null;
+			if(bottom == comp)
+				bottom = null;
+			else
+				leftOfScrollBar.removeElement(comp);
+		}
+
+		public Dimension preferredLayoutSize(Container parent)
+		{
+			Dimension dim = new Dimension();
+			Insets insets = getInsets();
+			dim.width = insets.left + insets.right;
+			dim.height = insets.top + insets.bottom;
+
+			Dimension centerPref = center.getPreferredSize();
+			dim.width += centerPref.width;
+			dim.height += centerPref.height;
+			Dimension rightPref = right.getPreferredSize();
+			dim.width += rightPref.width;
+			Dimension bottomPref = bottom.getPreferredSize();
+			dim.height += bottomPref.height;
+
+			return dim;
+		}
+
+		public Dimension minimumLayoutSize(Container parent)
+		{
+			Dimension dim = new Dimension();
+			Insets insets = getInsets();
+			dim.width = insets.left + insets.right;
+			dim.height = insets.top + insets.bottom;
+
+			Dimension centerPref = center.getMinimumSize();
+			dim.width += centerPref.width;
+			dim.height += centerPref.height;
+			Dimension rightPref = right.getMinimumSize();
+			dim.width += rightPref.width;
+			Dimension bottomPref = bottom.getMinimumSize();
+			dim.height += bottomPref.height;
+
+			return dim;
+		}
+
+		public void layoutContainer(Container parent)
+		{
+			Dimension size = parent.getSize();
+			Insets insets = parent.getInsets();
+			int itop = insets.top;
+			int ileft = insets.left;
+			int ibottom = insets.bottom;
+			int iright = insets.right;
+
+			int rightWidth = right.getPreferredSize().width;
+			int bottomHeight = bottom.getPreferredSize().height;
+			int centerWidth = size.width - rightWidth - ileft - iright;
+			int centerHeight = size.height - bottomHeight - itop - ibottom;
+
+			center.setBounds(
+				ileft,
+				itop,
+				centerWidth,
+				centerHeight);
+
+			right.setBounds(
+				ileft + centerWidth,
+				itop,
+				rightWidth,
+				centerHeight);
+
+			// Lay out all status components, in order
+			Enumeration status = leftOfScrollBar.elements();
+			while(status.hasMoreElements())
+			{
+				Component comp = (Component)status.nextElement();
+				Dimension dim = comp.getPreferredSize();
+				comp.setBounds(ileft,
+					itop + centerHeight,
+					dim.width,
+					bottomHeight);
+				ileft += dim.width;
+			}
+
+			bottom.setBounds(
+				ileft,
+				itop + centerHeight,
+				size.width - rightWidth - ileft - iright,
+				bottomHeight);
+		}
+
+		// private members
+		private Component center;
+		private Component right;
+		private Component bottom;
+		private Vector leftOfScrollBar = new Vector();
+	}
+
+	static class CaretBlinker implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			if(focusedComponent != null
+				&& focusedComponent.hasFocus())
+				focusedComponent.blinkCaret();
+		}
+	}
+
+	class MutableCaretEvent extends CaretEvent
+	{
+		MutableCaretEvent()
+		{
+			super(JEditTextArea.this);
+		}
+
+		public int getDot()
+		{
+			return getCaretPosition();
+		}
+
+		public int getMark()
+		{
+			return getMarkPosition();
+		}
+	}
+
+	class AdjustHandler implements AdjustmentListener
+	{
+		public void adjustmentValueChanged(final AdjustmentEvent evt)
+		{
+			if(!scrollBarsInitialized)
+				return;
+
+			// If this is not done, mousePressed events accumilate
+			// and the result is that scrolling doesn't stop after
+			// the mouse is released
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run()
+				{
+					if(evt.getAdjustable() == vertical)
+						setFirstLine(vertical.getValue());
+					else
+						setHorizontalOffset(-horizontal.getValue());
+				}
+			});
+		}
+	}
+
+	class ComponentHandler extends ComponentAdapter
+	{
+		public void componentResized(ComponentEvent evt)
+		{
+			recalculateVisibleLines();
+			scrollBarsInitialized = true;
+		}
+	}
+
+	class DocumentHandler implements DocumentListener
+	{
+		public void insertUpdate(DocumentEvent evt)
+		{
+			documentChanged(evt);
+
+			int offset = evt.getOffset();
+			int length = evt.getLength();
+
+			int newStart;
+			int newEnd;
+
+			if(selectionStart > offset || (selectionStart
+				== selectionEnd && selectionStart == offset))
+				newStart = selectionStart + length;
+			else
+				newStart = selectionStart;
+
+			if(selectionEnd >= offset)
+				newEnd = selectionEnd + length;
+			else
+				newEnd = selectionEnd;
+
+			select(newStart,newEnd);
+		}
+
+		public void removeUpdate(DocumentEvent evt)
+		{
+			documentChanged(evt);
+
+			int offset = evt.getOffset();
+			int length = evt.getLength();
+
+			int newStart;
+			int newEnd;
+
+			if(selectionStart > offset)
+			{
+				if(selectionStart > offset + length)
+					newStart = selectionStart - length;
+				else
+					newStart = offset;
+			}
+			else
+				newStart = selectionStart;
+
+			if(selectionEnd > offset)
+			{
+				if(selectionEnd > offset + length)
+					newEnd = selectionEnd - length;
+				else
+					newEnd = offset;
+			}
+			else
+				newEnd = selectionEnd;
+
+			select(newStart,newEnd);
+		}
+
+		public void changedUpdate(DocumentEvent evt)
+		{
+		}
+	}
+
+	class DragHandler implements MouseMotionListener
+	{
+		public void mouseDragged(MouseEvent evt)
+		{
+			if(popup != null && popup.isVisible())
+				return;
+
+			setSelectionRectangular((evt.getModifiers()
+				& InputEvent.CTRL_MASK) != 0);
+			select(getMarkPosition(),xyToOffset(evt.getX(),evt.getY()));
+		}
+
+		public void mouseMoved(MouseEvent evt) {}
+	}
+
+	class FocusHandler implements FocusListener
+	{
+		public void focusGained(FocusEvent evt)
+		{
+			setCaretVisible(true);
+			focusedComponent = JEditTextArea.this;
+		}
+
+		public void focusLost(FocusEvent evt)
+		{
+			setCaretVisible(false);
+			focusedComponent = null;
+		}
+	}
+
+	class MouseHandler extends MouseAdapter
+	{
+		public void mousePressed(MouseEvent evt)
+		{
+			requestFocus();
+
+			// Focus events not fired sometimes?
+			setCaretVisible(true);
+			focusedComponent = JEditTextArea.this;
+
+			if((evt.getModifiers() & InputEvent.BUTTON3_MASK) != 0
+				&& popup != null)
+			{
+				popup.show(painter,evt.getX(),evt.getY());
+				return;
+			}
+
+			int line = yToLine(evt.getY());
+			int offset = xToOffset(line,evt.getX());
+			int dot = getLineStartOffset(line) + offset;
+
+			switch(evt.getClickCount())
+			{
+			case 1:
+				doSingleClick(evt,line,offset,dot);
+				break;
+			case 2:
+				// It uses the bracket matching stuff, so
+				// it can throw a BLE
+				try
+				{
+					doDoubleClick(evt,line,offset,dot);
+				}
+				catch(BadLocationException bl)
+				{
+					bl.printStackTrace();
+				}
+				break;
+			case 3:
+				doTripleClick(evt,line,offset,dot);
+				break;
+			}
+		}
+
+		private void doSingleClick(MouseEvent evt, int line,
+			int offset, int dot)
+		{
+			if((evt.getModifiers() & InputEvent.SHIFT_MASK) != 0)
+			{
+				rectSelect = (evt.getModifiers() & InputEvent.CTRL_MASK) != 0;
+				select(getMarkPosition(),dot);
+			}
+			else
+				setCaretPosition(dot);
+		}
+
+		private void doDoubleClick(MouseEvent evt, int line,
+			int offset, int dot) throws BadLocationException
+		{
+			// Ignore empty lines
+			if(getLineLength(line) == 0)
+				return;
+
+			try
+			{
+				int bracket = TextUtilities.findMatchingBracket(
+					document,Math.max(0,dot - 1));
+				if(bracket != -1)
+				{
+					int mark = getMarkPosition();
+					// Hack
+					if(bracket > mark)
+					{
+						bracket++;
+						mark--;
+					}
+					select(mark,bracket);
+					return;
+				}
+			}
+			catch(BadLocationException bl)
+			{
+				bl.printStackTrace();
+			}
+
+			// Ok, it's not a bracket... select the word
+			String lineText = getLineText(line);
+			char ch = lineText.charAt(Math.max(0,offset - 1));
+
+			String noWordSep = (String)document.getProperty("noWordSep");
+			if(noWordSep == null)
+				noWordSep = "";
+
+			// If the user clicked on a non-letter char,
+			// we select the surrounding non-letters
+			boolean selectNoLetter = (!Character
+				.isLetterOrDigit(ch)
+				&& noWordSep.indexOf(ch) == -1);
+
+			int wordStart = 0;
+
+			for(int i = offset - 1; i >= 0; i--)
+			{
+				ch = lineText.charAt(i);
+				if(selectNoLetter ^ (!Character
+					.isLetterOrDigit(ch) &&
+					noWordSep.indexOf(ch) == -1))
+				{
+					wordStart = i + 1;
+					break;
+				}
+			}
+
+			int wordEnd = lineText.length();
+			for(int i = offset; i < lineText.length(); i++)
+			{
+				ch = lineText.charAt(i);
+				if(selectNoLetter ^ (!Character
+					.isLetterOrDigit(ch) &&
+					noWordSep.indexOf(ch) == -1))
+				{
+					wordEnd = i;
+					break;
+				}
+			}
+
+			int lineStart = getLineStartOffset(line);
+			select(lineStart + wordStart,lineStart + wordEnd);
+
+			/*
+			String lineText = getLineText(line);
+			String noWordSep = (String)document.getProperty("noWordSep");
+			int wordStart = TextUtilities.findWordStart(lineText,offset,noWordSep);
+			int wordEnd = TextUtilities.findWordEnd(lineText,offset,noWordSep);
+
+			int lineStart = getLineStartOffset(line);
+			select(lineStart + wordStart,lineStart + wordEnd);
+			*/
+		}
+
+		private void doTripleClick(MouseEvent evt, int line,
+			int offset, int dot)
+		{
+			select(getLineStartOffset(line),getLineEndOffset(line)-1);
+		}
+	}
+
+	class CaretUndo extends AbstractUndoableEdit
+	{
+		private int start;
+		private int end;
+
+		CaretUndo(int start, int end)
+		{
+			this.start = start;
+			this.end = end;
+		}
+
+		public boolean isSignificant()
+		{
+			return false;
+		}
+
+		public String getPresentationName()
+		{
+			return "caret move";
+		}
+
+		public void undo() throws CannotUndoException
+		{
+			super.undo();
+
+			select(start,end);
+		}
+
+		public void redo() throws CannotRedoException
+		{
+			super.redo();
+
+			select(start,end);
+		}
+
+		public boolean addEdit(UndoableEdit edit)
+		{
+			if(edit instanceof CaretUndo)
+			{
+				CaretUndo cedit = (CaretUndo)edit;
+				start = cedit.start;
+				end = cedit.end;
+				cedit.die();
+
+				return true;
+			}
+			else
+				return false;
+		}
+	}
+
+	static
+	{
+		caretTimer = new Timer(500,new CaretBlinker());
+		caretTimer.setInitialDelay(500);
+		caretTimer.start();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JEditTextArea.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ShellScriptTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ShellScriptTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ShellScriptTokenMarker.java	(revision 42196)
@@ -0,0 +1,292 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * ShellScriptTokenMarker.java - Shell script token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Shell script token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class ShellScriptTokenMarker extends TokenMarker
+{
+	// public members
+	public static final byte LVARIABLE = Token.INTERNAL_FIRST;
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		byte cmdState = 0; // 0 = space before command, 1 = inside
+				// command, 2 = after command
+		int offset = line.offset;
+		int lastOffset = offset;
+		int length = line.count + offset;
+
+		if(token == Token.LITERAL1 && lineIndex != 0
+			&& lineInfo[lineIndex - 1].obj != null)
+		{
+			String str = (String)lineInfo[lineIndex - 1].obj;
+			if(str != null && str.length() == line.count
+				&& SyntaxUtilities.regionMatches(false,line,
+				offset,str))
+			{
+				addToken(line.count,Token.LITERAL1);
+				return Token.NULL;
+			}
+			else
+			{
+				addToken(line.count,Token.LITERAL1);
+				lineInfo[lineIndex].obj = str;
+				return Token.LITERAL1;
+			}
+		}
+
+		boolean backslash = false;
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+
+			if(c == '\\')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(c)
+				{
+				case ' ': case '\t': case '(': case ')':
+					backslash = false;
+					if(cmdState == 1/*insideCmd*/)
+					{
+						addToken(i - lastOffset,Token.KEYWORD1);
+						lastOffset = i;
+						cmdState = 2; /*afterCmd*/
+					}
+					break;
+				case '=':
+					backslash = false;
+					if(cmdState == 1/*insideCmd*/)
+					{
+						addToken(i - lastOffset,token);
+						lastOffset = i;
+						cmdState = 2; /*afterCmd*/
+					}
+					break;
+				case '&': case '|': case ';':
+					if(backslash)
+						backslash = false;
+					else
+						cmdState = 0; /*beforeCmd*/
+					break;
+				case '#':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						addToken(length - i,Token.COMMENT1);
+						lastOffset = length;
+						break loop;
+					}
+					break;
+				case '$':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						cmdState = 2; /*afterCmd*/
+						lastOffset = i;
+						if(length - i >= 2)
+						{
+							switch(array[i1])
+							{
+							case '(':
+								continue;
+							case '{':
+								token = LVARIABLE;
+								break;
+							default:
+								token = Token.KEYWORD2;
+								break;
+							}
+						}
+						else
+							token = Token.KEYWORD2;
+					}
+					break;
+				case '"':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL1;
+						lineInfo[lineIndex].obj = null;
+						cmdState = 2; /*afterCmd*/
+						lastOffset = i;
+					}
+					break;
+				case '\'':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL2;
+						cmdState = 2; /*afterCmd*/
+						lastOffset = i;
+					}
+					break;
+				case '<':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						if(length - i > 1 && array[i1] == '<')
+						{
+							addToken(i - lastOffset,
+								token);
+							token = Token.LITERAL1;
+							lastOffset = i;
+							lineInfo[lineIndex].obj =
+								new String(array,i + 2,
+									length - (i+2));
+						}
+					}
+					break;
+				default:
+					backslash = false;
+					if(Character.isLetter(c))
+					{
+						if(cmdState == 0 /*beforeCmd*/)
+						{
+							addToken(i - lastOffset,token);
+							lastOffset = i;
+							cmdState++; /*insideCmd*/
+						}
+					}
+					break;
+				}
+				break;
+			case Token.KEYWORD2:
+				backslash = false;
+				if(!Character.isLetterOrDigit(c) && c != '_')
+				{
+					if(i != offset && array[i-1] == '$')
+					{
+						addToken(i1 - lastOffset,token);
+						lastOffset = i1;
+						token = Token.NULL;
+						continue;
+					}
+					else
+					{
+						addToken(i - lastOffset,token);
+						lastOffset = i;
+						token = Token.NULL;
+					}
+				}
+				break;
+			case Token.LITERAL1:
+				if(backslash)
+					backslash = false;
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,token);
+					cmdState = 2; /*afterCmd*/
+					lastOffset = i1;
+					token = Token.NULL;
+				}
+				else
+					backslash = false;
+				break;
+			case Token.LITERAL2:
+				if(backslash)
+					backslash = false;
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					cmdState = 2; /*afterCmd*/
+					lastOffset = i1;
+					token = Token.NULL;
+				}
+				else
+					backslash = false;
+				break;
+			case LVARIABLE:
+				backslash = false;
+				if(c == '}')
+				{
+					addToken(i1 - lastOffset,Token.KEYWORD2);
+					lastOffset = i1;
+					token = Token.NULL;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: " + token);
+			}
+		}
+
+		switch(token)
+		{
+		case Token.NULL:
+			if(cmdState == 1)
+				addToken(length - lastOffset,Token.KEYWORD1);
+			else
+				addToken(length - lastOffset,token);
+			break;
+		case Token.LITERAL2:
+			addToken(length - lastOffset,Token.LITERAL1);
+			break;
+		case Token.KEYWORD2:
+			addToken(length - lastOffset,token);
+			token = Token.NULL;
+			break;
+		case LVARIABLE:
+			addToken(length - lastOffset,Token.INVALID);
+			token = Token.NULL;
+			break;
+		default:
+			addToken(length - lastOffset,token);
+			break;
+		}
+		return token;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ShellScriptTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SQLTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SQLTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SQLTokenMarker.java	(revision 42196)
@@ -0,0 +1,227 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * SQLTokenMarker.java - Generic SQL token marker
+ * Copyright (C) 1999 mike dillon
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * SQL token marker.
+ *
+ * @author mike dillon
+ * @version $Id$
+ */
+public class SQLTokenMarker extends TokenMarker
+{
+	private int offset, lastOffset, lastKeyword, length;
+
+	// public members
+	public SQLTokenMarker(KeywordMap k)
+	{
+		this(k, false);
+	}
+
+	public SQLTokenMarker(KeywordMap k, boolean tsql)
+	{
+		keywords = k;
+		isTSQL = tsql;
+	}
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		offset = lastOffset = lastKeyword = line.offset;
+		length = line.count + offset;
+
+loop:
+		for(int i = offset; i < length; i++)
+		{
+			switch(line.array[i])
+			{
+			case '*':
+				if(token == Token.COMMENT1 && length - i >= 1 && line.array[i+1] == '/')
+				{
+					token = Token.NULL;
+					i++;
+					addToken((i + 1) - lastOffset,Token.COMMENT1);
+					lastOffset = i + 1;
+				}
+				else if (token == Token.NULL)
+				{
+					searchBack(line, i);
+					addToken(1,Token.OPERATOR);
+					lastOffset = i + 1;
+				}
+				break;
+			case '[':
+				if(token == Token.NULL)
+				{
+					searchBack(line, i);
+					token = Token.LITERAL1;
+					literalChar = '[';
+					lastOffset = i;
+				}
+				break;
+			case ']':
+				if(token == Token.LITERAL1 && literalChar == '[')
+				{
+					token = Token.NULL;
+					literalChar = 0;
+					addToken((i + 1) - lastOffset,Token.LITERAL1);
+					lastOffset = i + 1;
+				}
+				break;
+			case '.': case ',': case '(': case ')':
+				if (token == Token.NULL) {
+					searchBack(line, i);
+					addToken(1, Token.NULL);
+					lastOffset = i + 1;
+				}
+				break;
+			case '+': case '%': case '&': case '|': case '^':
+			case '~': case '<': case '>': case '=':
+				if (token == Token.NULL) {
+					searchBack(line, i);
+					addToken(1,Token.OPERATOR);
+					lastOffset = i + 1;
+				}
+				break;
+			case ' ': case '\t':
+				if (token == Token.NULL) {
+					searchBack(line, i, false);
+				}
+				break;
+			case ':':
+				if(token == Token.NULL)
+				{
+					addToken((i+1) - lastOffset,Token.LABEL);
+					lastOffset = i + 1;
+				}
+				break;
+			case '/':
+				if(token == Token.NULL)
+				{
+					if (length - i >= 2 && line.array[i + 1] == '*')
+					{
+						searchBack(line, i);
+						token = Token.COMMENT1;
+						lastOffset = i;
+						i++;
+					}
+					else
+					{
+						searchBack(line, i);
+						addToken(1,Token.OPERATOR);
+						lastOffset = i + 1;
+					}
+				}
+				break;
+			case '-':
+				if(token == Token.NULL)
+				{
+					if (length - i >= 2 && line.array[i+1] == '-')
+					{
+						searchBack(line, i);
+						addToken(length - i,Token.COMMENT1);
+						lastOffset = length;
+						break loop;
+					}
+					else
+					{
+						searchBack(line, i);
+						addToken(1,Token.OPERATOR);
+						lastOffset = i + 1;
+					}
+				}
+				break;
+			case '!':
+				if(isTSQL && token == Token.NULL && length - i >= 2 &&
+				(line.array[i+1] == '=' || line.array[i+1] == '<' || line.array[i+1] == '>'))
+				{
+					searchBack(line, i);
+					addToken(1,Token.OPERATOR);
+					lastOffset = i + 1;
+				}
+				break;
+			case '"': case '\'':
+				if(token == Token.NULL)
+				{
+					token = Token.LITERAL1;
+					literalChar = line.array[i];
+					addToken(i - lastOffset,Token.NULL);
+					lastOffset = i;
+				}
+				else if(token == Token.LITERAL1 && literalChar == line.array[i])
+				{
+					token = Token.NULL;
+					literalChar = 0;
+					addToken((i + 1) - lastOffset,Token.LITERAL1);
+					lastOffset = i + 1;
+				}
+				break;
+			default:
+				break;
+			}
+		}
+		if(token == Token.NULL)
+			searchBack(line, length, false);
+		if(lastOffset != length)
+			addToken(length - lastOffset,token);
+		return token;
+	}
+
+	// protected members
+	protected boolean isTSQL = false;
+
+	// private members
+	private KeywordMap keywords;
+	private char literalChar = 0;
+
+	private void searchBack(Segment line, int pos)
+	{
+		searchBack(line, pos, true);
+	}
+
+	private void searchBack(Segment line, int pos, boolean padNull)
+	{
+		int len = pos - lastKeyword;
+		byte id = keywords.lookup(line,lastKeyword,len);
+		if(id != Token.NULL)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.NULL);
+			addToken(len,id);
+			lastOffset = pos;
+		}
+		lastKeyword = pos + 1;
+		if (padNull && lastOffset < pos)
+			addToken(pos - lastOffset, Token.NULL);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SQLTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/XMLTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/XMLTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/XMLTokenMarker.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * XMLTokenMarker.java - XML token marker
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+/**
+ * XML token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class XMLTokenMarker extends HTMLTokenMarker
+{
+	public XMLTokenMarker()
+	{
+		super(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/XMLTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PropsTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PropsTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PropsTokenMarker.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * PropsTokenMarker.java - Java props/DOS INI token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Java properties/DOS INI token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class PropsTokenMarker extends TokenMarker
+{
+	public static final byte VALUE = Token.INTERNAL_FIRST;
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		int lastOffset = offset;
+		int length = line.count + offset;
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(array[i])
+				{
+				case '#': case ';':
+					if(i == offset)
+					{
+						addToken(line.count,Token.COMMENT1);
+						lastOffset = length;
+						break loop;
+					}
+					break;
+				case '[':
+					if(i == offset)
+					{
+						addToken(i - lastOffset,token);
+						token = Token.KEYWORD2;
+						lastOffset = i;
+					}
+					break;
+				case '=':
+					addToken(i - lastOffset,Token.KEYWORD1);
+					token = VALUE;
+					lastOffset = i;
+					break;
+				}
+				break;
+			case Token.KEYWORD2:
+				if(array[i] == ']')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = i1;
+				}
+				break;
+			case VALUE:
+				break;
+			default:
+				throw new InternalError("Invalid state: "
+					+ token);
+			}
+		}
+		if(lastOffset != length)
+			addToken(length - lastOffset,Token.NULL);
+		return Token.NULL;
+	}
+
+	public boolean supportsMultilineTokens()
+	{
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PropsTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxStyle.java	(revision 42196)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * SyntaxStyle.java - A simple text style class
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Toolkit;
+
+/**
+ * A simple text style class. It can specify the color, italic flag,
+ * and bold flag of a run of text.
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class SyntaxStyle
+{
+	/**
+	 * Creates a new SyntaxStyle.
+	 * @param color The text color
+	 * @param italic True if the text should be italics
+	 * @param bold True if the text should be bold
+	 */
+	public SyntaxStyle(Color color, boolean italic, boolean bold)
+	{
+		this.color = color;
+		this.italic = italic;
+		this.bold = bold;
+	}
+
+	/**
+	 * Returns the color specified in this style.
+	 */
+	public Color getColor()
+	{
+		return color;
+	}
+
+	/**
+	 * Returns true if no font styles are enabled.
+	 */
+	public boolean isPlain()
+	{
+		return !(bold || italic);
+	}
+
+	/**
+	 * Returns true if italics is enabled for this style.
+	 */
+	public boolean isItalic()
+	{
+		return italic;
+	}
+
+	/**
+	 * Returns true if boldface is enabled for this style.
+	 */
+	public boolean isBold()
+	{
+		return bold;
+	}
+
+	/**
+	 * Returns the specified font, but with the style's bold and
+	 * italic flags applied.
+	 */
+	public Font getStyledFont(Font font)
+	{
+		if(font == null)
+			throw new NullPointerException("font param must not"
+				+ " be null");
+		if(font.equals(lastFont))
+			return lastStyledFont;
+		lastFont = font;
+		lastStyledFont = new Font(font.getFamily(),
+			(bold ? Font.BOLD : 0)
+			| (italic ? Font.ITALIC : 0),
+			font.getSize());
+		return lastStyledFont;
+	}
+
+	/**
+	 * Returns the font metrics for the styled font.
+	 */
+	public FontMetrics getFontMetrics(Font font)
+	{
+		if(font == null)
+			throw new NullPointerException("font param must not"
+				+ " be null");
+		if(font.equals(lastFont) && fontMetrics != null)
+			return fontMetrics;
+		lastFont = font;
+		lastStyledFont = new Font(font.getFamily(),
+			(bold ? Font.BOLD : 0)
+			| (italic ? Font.ITALIC : 0),
+			font.getSize());
+		fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(
+			lastStyledFont);
+		return fontMetrics;
+	}
+
+	/**
+	 * Sets the foreground color and font of the specified graphics
+	 * context to that specified in this style.
+	 * @param gfx The graphics context
+	 * @param font The font to add the styles to
+	 */
+	public void setGraphicsFlags(Graphics gfx, Font font)
+	{
+		Font _font = getStyledFont(font);
+		gfx.setFont(_font);
+		gfx.setColor(color);
+	}
+
+	/**
+	 * Returns a string representation of this object.
+	 */
+	public String toString()
+	{
+		return getClass().getName() + "[color=" + color +
+			(italic ? ",italic" : "") +
+			(bold ? ",bold" : "") + "]";
+	}
+
+	// private members
+	private Color color;
+	private boolean italic;
+	private boolean bold;
+	private Font lastFont;
+	private Font lastStyledFont;
+	private FontMetrics fontMetrics;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/SyntaxStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/IDLTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/IDLTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/IDLTokenMarker.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * IDLTokenMarker.java - IDL token marker
+ * Copyright (C) 1999 Slava Pestov
+ * Copyright (C) 1999 Juha Lindfors
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+
+/**
+ * IDL token marker.
+ *
+ * @author Slava Pestov
+ * @author Juha Lindfors
+ * @version $Id$
+ */
+public class IDLTokenMarker extends CTokenMarker
+{
+	public IDLTokenMarker()
+	{
+		super(true,getKeywords());
+	}
+
+	public static KeywordMap getKeywords()
+	{
+		if(idlKeywords == null)
+		{
+			idlKeywords = new KeywordMap(false);
+
+			idlKeywords.add("any",      Token.KEYWORD3);
+			idlKeywords.add("attribute",Token.KEYWORD1);
+			idlKeywords.add("boolean",  Token.KEYWORD3);
+			idlKeywords.add("case",     Token.KEYWORD1);
+			idlKeywords.add("char",     Token.KEYWORD3);
+			idlKeywords.add("const",    Token.KEYWORD1);
+			idlKeywords.add("context",  Token.KEYWORD1);
+			idlKeywords.add("default",  Token.KEYWORD1);
+			idlKeywords.add("double",   Token.KEYWORD3);
+			idlKeywords.add("enum",     Token.KEYWORD3);
+			idlKeywords.add("exception",Token.KEYWORD1);
+			idlKeywords.add("FALSE",    Token.LITERAL2);
+			idlKeywords.add("fixed",    Token.KEYWORD1);
+			idlKeywords.add("float",    Token.KEYWORD3);
+			idlKeywords.add("in",       Token.KEYWORD1);
+			idlKeywords.add("inout",    Token.KEYWORD1);
+			idlKeywords.add("interface",Token.KEYWORD1);
+			idlKeywords.add("long",     Token.KEYWORD3);
+			idlKeywords.add("module",   Token.KEYWORD1);
+			idlKeywords.add("Object",   Token.KEYWORD3);
+			idlKeywords.add("octet",    Token.KEYWORD3);
+			idlKeywords.add("oneway",   Token.KEYWORD1);
+			idlKeywords.add("out",      Token.KEYWORD1);
+			idlKeywords.add("raises",   Token.KEYWORD1);
+			idlKeywords.add("readonly", Token.KEYWORD1);
+			idlKeywords.add("sequence", Token.KEYWORD3);
+			idlKeywords.add("short",    Token.KEYWORD3);
+			idlKeywords.add("string",   Token.KEYWORD3);
+			idlKeywords.add("struct",   Token.KEYWORD3);
+			idlKeywords.add("switch",   Token.KEYWORD1);
+			idlKeywords.add("TRUE",     Token.LITERAL2);
+			idlKeywords.add("typedef",  Token.KEYWORD3);
+			idlKeywords.add("unsigned", Token.KEYWORD3);
+			idlKeywords.add("union",    Token.KEYWORD3);
+			idlKeywords.add("void",     Token.KEYWORD3);
+			idlKeywords.add("wchar",    Token.KEYWORD3);
+			idlKeywords.add("wstring",  Token.KEYWORD3);
+		}
+		return idlKeywords;
+	}
+
+	// private members
+	private static KeywordMap idlKeywords;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/IDLTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextUtilities.java	(revision 42196)
@@ -0,0 +1,207 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * TextUtilities.java - Utility functions used by the text area classes
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+
+/**
+ * Class with several utility functions used by the text area component.
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class TextUtilities
+{
+	/**
+	 * Returns the offset of the bracket matching the one at the
+	 * specified offset of the document, or -1 if the bracket is
+	 * unmatched (or if the character is not a bracket).
+	 * @param doc The document
+	 * @param offset The offset
+	 * @exception BadLocationException If an out-of-bounds access
+	 * was attempted on the document text
+	 */
+	public static int findMatchingBracket(Document doc, int offset)
+		throws BadLocationException
+	{
+		if(doc.getLength() == 0)
+			return -1;
+		char c = doc.getText(offset,1).charAt(0);
+		char cprime; // c` - corresponding character
+		boolean direction; // true = back, false = forward
+
+		switch(c)
+		{
+		case '(': cprime = ')'; direction = false; break;
+		case ')': cprime = '('; direction = true; break;
+		case '[': cprime = ']'; direction = false; break;
+		case ']': cprime = '['; direction = true; break;
+		case '{': cprime = '}'; direction = false; break;
+		case '}': cprime = '{'; direction = true; break;
+		default: return -1;
+		}
+
+		int count;
+
+		// How to merge these two cases is left as an exercise
+		// for the reader.
+
+		// Go back or forward
+		if(direction)
+		{
+			// Count is 1 initially because we have already
+			// `found' one closing bracket
+			count = 1;
+
+			// Get text[0,offset-1];
+			String text = doc.getText(0,offset);
+
+			// Scan backwards
+			for(int i = offset - 1; i >= 0; i--)
+			{
+				// If text[i] == c, we have found another
+				// closing bracket, therefore we will need
+				// two opening brackets to complete the
+				// match.
+				char x = text.charAt(i);
+				if(x == c)
+					count++;
+
+				// If text[i] == cprime, we have found a
+				// opening bracket, so we return i if
+				// --count == 0
+				else if(x == cprime)
+				{
+					if(--count == 0)
+						return i;
+				}
+			}
+		}
+		else
+		{
+			// Count is 1 initially because we have already
+			// `found' one opening bracket
+			count = 1;
+
+			// So we don't have to + 1 in every loop
+			offset++;
+
+			// Number of characters to check
+			int len = doc.getLength() - offset;
+
+			// Get text[offset+1,len];
+			String text = doc.getText(offset,len);
+
+			// Scan forwards
+			for(int i = 0; i < len; i++)
+			{
+				// If text[i] == c, we have found another
+				// opening bracket, therefore we will need
+				// two closing brackets to complete the
+				// match.
+				char x = text.charAt(i);
+
+				if(x == c)
+					count++;
+
+				// If text[i] == cprime, we have found an
+				// closing bracket, so we return i if
+				// --count == 0
+				else if(x == cprime)
+				{
+					if(--count == 0)
+						return i + offset;
+				}
+			}
+		}
+
+		// Nothing found
+		return -1;
+	}
+
+	/**
+	 * Locates the start of the word at the specified position.
+	 * @param line The text
+	 * @param pos The position
+	 */
+	public static int findWordStart(String line, int pos, String noWordSep)
+	{
+		char ch = line.charAt(pos - 1);
+
+		if(noWordSep == null)
+			noWordSep = "";
+		boolean selectNoLetter = (!Character.isLetterOrDigit(ch)
+			&& noWordSep.indexOf(ch) == -1);
+
+		int wordStart = 0;
+		for(int i = pos - 1; i >= 0; i--)
+		{
+			ch = line.charAt(i);
+			if(selectNoLetter ^ (!Character.isLetterOrDigit(ch) &&
+				noWordSep.indexOf(ch) == -1))
+			{
+				wordStart = i + 1;
+				break;
+			}
+		}
+
+		return wordStart;
+	}
+
+	/**
+	 * Locates the end of the word at the specified position.
+	 * @param line The text
+	 * @param pos The position
+	 */
+	public static int findWordEnd(String line, int pos, String noWordSep)
+	{
+		char ch = line.charAt(pos);
+
+		if(noWordSep == null)
+			noWordSep = "";
+		boolean selectNoLetter = (!Character.isLetterOrDigit(ch)
+			&& noWordSep.indexOf(ch) == -1);
+
+		int wordEnd = line.length();
+		for(int i = pos; i < line.length(); i++)
+		{
+			ch = line.charAt(i);
+			if(selectNoLetter ^ (!Character.isLetterOrDigit(ch) &&
+				noWordSep.indexOf(ch) == -1))
+			{
+				wordEnd = i;
+				break;
+			}
+		}
+		return wordEnd;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/KeywordMap.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/KeywordMap.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/KeywordMap.java	(revision 42196)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * KeywordMap.java - Fast keyword->id map
+ * Copyright (C) 1998, 1999 Slava Pestov
+ * Copyright (C) 1999 Mike Dillon
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * A <code>KeywordMap</code> is similar to a hashtable in that it maps keys
+ * to values. However, the `keys' are Swing segments. This allows lookups of
+ * text substrings without the overhead of creating a new string object.
+ * <p>
+ * This class is used by <code>CTokenMarker</code> to map keywords to ids.
+ *
+ * @author Slava Pestov, Mike Dillon
+ * @version $Id$
+ */
+public class KeywordMap
+{
+	/**
+	 * Creates a new <code>KeywordMap</code>.
+	 * @param ignoreCase True if keys are case insensitive
+	 */
+	public KeywordMap(boolean ignoreCase)
+	{
+		this(ignoreCase, 52);
+		this.ignoreCase = ignoreCase;
+	}
+
+	/**
+	 * Creates a new <code>KeywordMap</code>.
+	 * @param ignoreCase True if the keys are case insensitive
+	 * @param mapLength The number of `buckets' to create.
+	 * A value of 52 will give good performance for most maps.
+	 */
+	public KeywordMap(boolean ignoreCase, int mapLength)
+	{
+		this.mapLength = mapLength;
+		this.ignoreCase = ignoreCase;
+		map = new Keyword[mapLength];
+	}
+
+	/**
+	 * Looks up a key.
+	 * @param text The text segment
+	 * @param offset The offset of the substring within the text segment
+	 * @param length The length of the substring
+	 */
+	public byte lookup(Segment text, int offset, int length)
+	{
+		if(length == 0)
+			return Token.NULL;
+		Keyword k = map[getSegmentMapKey(text, offset, length)];
+		while(k != null)
+		{
+			if(length != k.keyword.length)
+			{
+				k = k.next;
+				continue;
+			}
+			if(SyntaxUtilities.regionMatches(ignoreCase,text,offset,
+				k.keyword))
+				return k.id;
+			k = k.next;
+		}
+		return Token.NULL;
+	}
+
+	/**
+	 * Adds a key-value mapping.
+	 * @param keyword The key
+	 * @Param id The value
+	 */
+	public void add(String keyword, byte id)
+	{
+		int key = getStringMapKey(keyword);
+		map[key] = new Keyword(keyword.toCharArray(),id,map[key]);
+	}
+
+	/**
+	 * Returns true if the keyword map is set to be case insensitive,
+	 * false otherwise.
+	 */
+	public boolean getIgnoreCase()
+	{
+		return ignoreCase;
+	}
+
+	/**
+	 * Sets if the keyword map should be case insensitive.
+	 * @param ignoreCase True if the keyword map should be case
+	 * insensitive, false otherwise
+	 */
+	public void setIgnoreCase(boolean ignoreCase)
+	{
+		this.ignoreCase = ignoreCase;
+	}
+
+	// protected members
+	protected int mapLength;
+
+	protected int getStringMapKey(String s)
+	{
+		return (Character.toUpperCase(s.charAt(0)) +
+				Character.toUpperCase(s.charAt(s.length()-1)))
+				% mapLength;
+	}
+
+	protected int getSegmentMapKey(Segment s, int off, int len)
+	{
+		return (Character.toUpperCase(s.array[off]) +
+				Character.toUpperCase(s.array[off + len - 1]))
+				% mapLength;
+	}
+
+	// private members
+	class Keyword
+	{
+		public Keyword(char[] keyword, byte id, Keyword next)
+		{
+			this.keyword = keyword;
+			this.id = id;
+			this.next = next;
+		}
+
+		public char[] keyword;
+		public byte id;
+		public Keyword next;
+	}
+
+	private Keyword[] map;
+	private boolean ignoreCase;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/KeywordMap.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TokenMarker.java	(revision 42196)
@@ -0,0 +1,366 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * TokenMarker.java - Generic token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * A token marker that splits lines of text into tokens. Each token carries
+ * a length field and an indentification tag that can be mapped to a color
+ * for painting that token.<p>
+ *
+ * For performance reasons, the linked list of tokens is reused after each
+ * line is tokenized. Therefore, the return value of <code>markTokens</code>
+ * should only be used for immediate painting. Notably, it cannot be
+ * cached.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ *
+ * @see org.gjt.sp.jedit.syntax.Token
+ */
+public abstract class TokenMarker
+{
+	/**
+	 * A wrapper for the lower-level <code>markTokensImpl</code> method
+	 * that is called to split a line up into tokens.
+	 * @param line The line
+	 * @param lineIndex The line number
+	 */
+	public Token markTokens(Segment line, int lineIndex)
+	{
+		if(lineIndex >= length)
+		{
+			throw new IllegalArgumentException("Tokenizing invalid line: "
+				+ lineIndex);
+		}
+
+		lastToken = null;
+
+		LineInfo info = lineInfo[lineIndex];
+		LineInfo prev;
+		if(lineIndex == 0)
+			prev = null;
+		else
+			prev = lineInfo[lineIndex - 1];
+
+		byte oldToken = info.token;
+		byte token = markTokensImpl(prev == null ?
+			Token.NULL : prev.token,line,lineIndex);
+
+		info.token = token;
+
+		/*
+		 * This is a foul hack. It stops nextLineRequested
+		 * from being cleared if the same line is marked twice.
+		 *
+		 * Why is this necessary? It's all JEditTextArea's fault.
+		 * When something is inserted into the text, firing a
+		 * document event, the insertUpdate() method shifts the
+		 * caret (if necessary) by the amount inserted.
+		 *
+		 * All caret movement is handled by the select() method,
+		 * which eventually pipes the new position to scrollTo()
+		 * and calls repaint().
+		 *
+		 * Note that at this point in time, the new line hasn't
+		 * yet been painted; the caret is moved first.
+		 *
+		 * scrollTo() calls offsetToX(), which tokenizes the line
+		 * unless it is being called on the last line painted
+		 * (in which case it uses the text area's painter cached
+		 * token list). What scrollTo() does next is irrelevant.
+		 *
+		 * After scrollTo() has done it's job, repaint() is
+		 * called, and eventually we end up in paintLine(), whose
+		 * job is to paint the changed line. It, too, calls
+		 * markTokens().
+		 *
+		 * The problem was that if the line started a multiline
+		 * token, the first markTokens() (done in offsetToX())
+		 * would set nextLineRequested (because the line end
+		 * token had changed) but the second would clear it
+		 * (because the line was the same that time) and therefore
+		 * paintLine() would never know that it needed to repaint
+		 * subsequent lines.
+		 *
+		 * This bug took me ages to track down, that's why I wrote
+		 * all the relevant info down so that others wouldn't
+		 * duplicate it.
+		 */
+		 if(!(lastLine == lineIndex && nextLineRequested))
+			nextLineRequested = (oldToken != token);
+
+		lastLine = lineIndex;
+
+		addToken(0,Token.END);
+
+		return firstToken;
+	}
+
+	/**
+	 * An abstract method that splits a line up into tokens. It
+	 * should parse the line, and call <code>addToken()</code> to
+	 * add syntax tokens to the token list. Then, it should return
+	 * the initial token type for the next line.<p>
+	 *
+	 * For example if the current line contains the start of a 
+	 * multiline comment that doesn't end on that line, this method
+	 * should return the comment token type so that it continues on
+	 * the next line.
+	 *
+	 * @param token The initial token type for this line
+	 * @param line The line to be tokenized
+	 * @param lineIndex The index of the line in the document,
+	 * starting at 0
+	 * @return The initial token type for the next line
+	 */
+	protected abstract byte markTokensImpl(byte token, Segment line,
+		int lineIndex);
+
+	/**
+	 * Returns if the token marker supports tokens that span multiple
+	 * lines. If this is true, the object using this token marker is
+	 * required to pass all lines in the document to the
+	 * <code>markTokens()</code> method (in turn).<p>
+	 *
+	 * The default implementation returns true; it should be overridden
+	 * to return false on simpler token markers for increased speed.
+	 */
+	public boolean supportsMultilineTokens()
+	{
+		return true;
+	}
+
+	/**
+	 * Informs the token marker that lines have been inserted into
+	 * the document. This inserts a gap in the <code>lineInfo</code>
+	 * array.
+	 * @param index The first line number
+	 * @param lines The number of lines 
+	 */
+	public void insertLines(int index, int lines)
+	{
+		if(lines <= 0)
+			return;
+		length += lines;
+		ensureCapacity(length);
+		int len = index + lines;
+		System.arraycopy(lineInfo,index,lineInfo,len,
+			lineInfo.length - len);
+
+		for(int i = index + lines - 1; i >= index; i--)
+		{
+			lineInfo[i] = new LineInfo();
+		}
+	}
+	
+	/**
+	 * Informs the token marker that line have been deleted from
+	 * the document. This removes the lines in question from the
+	 * <code>lineInfo</code> array.
+	 * @param index The first line number
+	 * @param lines The number of lines
+	 */
+	public void deleteLines(int index, int lines)
+	{
+		if (lines <= 0)
+			return;
+		int len = index + lines;
+		length -= lines;
+		System.arraycopy(lineInfo,len,lineInfo,
+			index,lineInfo.length - len);
+	}
+
+	/**
+	 * Returns the number of lines in this token marker.
+	 */
+	public int getLineCount()
+	{
+		return length;
+	}
+
+	/**
+	 * Returns true if the next line should be repainted. This
+	 * will return true after a line has been tokenized that starts
+	 * a multiline token that continues onto the next line.
+	 */
+	public boolean isNextLineRequested()
+	{
+		return nextLineRequested;
+	}
+
+	// protected members
+
+	/**
+	 * The first token in the list. This should be used as the return
+	 * value from <code>markTokens()</code>.
+	 */
+	protected Token firstToken;
+
+	/**
+	 * The last token in the list. New tokens are added here.
+	 * This should be set to null before a new line is to be tokenized.
+	 */
+	protected Token lastToken;
+
+	/**
+	 * An array for storing information about lines. It is enlarged and
+	 * shrunk automatically by the <code>insertLines()</code> and
+	 * <code>deleteLines()</code> methods.
+	 */
+	protected LineInfo[] lineInfo;
+
+	/**
+	 * The number of lines in the model being tokenized. This can be
+	 * less than the length of the <code>lineInfo</code> array.
+	 */
+	protected int length;
+
+	/**
+	 * The last tokenized line.
+	 */
+	protected int lastLine;
+
+	/**
+	 * True if the next line should be painted.
+	 */
+	protected boolean nextLineRequested;
+
+	/**
+	 * Creates a new <code>TokenMarker</code>. This DOES NOT create
+	 * a lineInfo array; an initial call to <code>insertLines()</code>
+	 * does that.
+	 */
+	protected TokenMarker()
+	{
+		lastLine = -1;
+	}
+
+	/**
+	 * Ensures that the <code>lineInfo</code> array can contain the
+	 * specified index. This enlarges it if necessary. No action is
+	 * taken if the array is large enough already.<p>
+	 *
+	 * It should be unnecessary to call this under normal
+	 * circumstances; <code>insertLine()</code> should take care of
+	 * enlarging the line info array automatically.
+	 *
+	 * @param index The array index
+	 */
+	protected void ensureCapacity(int index)
+	{
+		if(lineInfo == null)
+			lineInfo = new LineInfo[index + 1];
+		else if(lineInfo.length <= index)
+		{
+			LineInfo[] lineInfoN = new LineInfo[(index + 1) * 2];
+			System.arraycopy(lineInfo,0,lineInfoN,0,
+					 lineInfo.length);
+			lineInfo = lineInfoN;
+		}
+	}
+
+	/**
+	 * Adds a token to the token list.
+	 * @param length The length of the token
+	 * @param id The id of the token
+	 */
+	protected void addToken(int length, byte id)
+	{
+		if(id >= Token.INTERNAL_FIRST && id <= Token.INTERNAL_LAST)
+			throw new InternalError("Invalid id: " + id);
+
+		if(length == 0 && id != Token.END)
+			return;
+
+		if(firstToken == null)
+		{
+			firstToken = new Token(length,id);
+			lastToken = firstToken;
+		}
+		else if(lastToken == null)
+		{
+			lastToken = firstToken;
+			firstToken.length = length;
+			firstToken.id = id;
+		}
+		else if(lastToken.next == null)
+		{
+			lastToken.next = new Token(length,id);
+			lastToken = lastToken.next;
+		}
+		else
+		{
+			lastToken = lastToken.next;
+			lastToken.length = length;
+			lastToken.id = id;
+		}
+	}
+
+	/**
+	 * Inner class for storing information about tokenized lines.
+	 */
+	public class LineInfo
+	{
+		/**
+		 * Creates a new LineInfo object with token = Token.NULL
+		 * and obj = null.
+		 */
+		public LineInfo()
+		{
+		}
+
+		/**
+		 * Creates a new LineInfo object with the specified
+		 * parameters.
+		 */
+		public LineInfo(byte token, Object obj)
+		{
+			this.token = token;
+			this.obj = obj;
+		}
+
+		/**
+		 * The id of the last token of the line.
+		 */
+		public byte token;
+
+		/**
+		 * This is for use by the token marker implementations
+		 * themselves. It can be used to store anything that
+		 * is an object and that needs to exist on a per-line
+		 * basis.
+		 */
+		public Object obj;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/BatchFileTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/BatchFileTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/BatchFileTokenMarker.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * BatchFileTokenMarker.java - Batch file token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Batch file token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class BatchFileTokenMarker extends TokenMarker
+{
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		int lastOffset = offset;
+		int length = line.count + offset;
+
+		if(SyntaxUtilities.regionMatches(true,line,offset,"rem"))
+		{
+			addToken(line.count,Token.COMMENT1);
+			return Token.NULL;
+		}
+
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(array[i])
+				{
+				case '%':
+					addToken(i - lastOffset,token);
+					lastOffset = i;
+					if(length - i <= 3 || array[i+2] == ' ')
+					{
+						addToken(2,Token.KEYWORD2);
+						i += 2;
+						lastOffset = i;
+					}
+					else
+						token = Token.KEYWORD2;
+					break;
+				case '"':
+					addToken(i - lastOffset,token);
+					token = Token.LITERAL1;
+					lastOffset = i;
+					break;
+				case ':':
+					if(i == offset)
+					{
+						addToken(line.count,Token.LABEL);
+						lastOffset = length;
+						break loop;
+					}
+					break;
+				case ' ':
+					if(lastOffset == offset)
+					{
+						addToken(i - lastOffset,Token.KEYWORD1);
+						lastOffset = i;
+					}
+					break;
+				}
+				break;
+			case Token.KEYWORD2:
+				if(array[i] == '%')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = i1;
+				}
+				break;
+			case Token.LITERAL1:
+				if(array[i] == '"')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = i1;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: " + token);
+			}
+		}
+
+		if(lastOffset != length)
+		{
+			if(token != Token.NULL)
+				token = Token.INVALID;
+			else if(lastOffset == offset)
+				token = Token.KEYWORD1;
+			addToken(length - lastOffset,token);
+		}
+		return Token.NULL;
+	}
+
+	public boolean supportsMultilineTokens()
+	{
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/BatchFileTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaTokenMarker.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * JavaTokenMarker.java - Java token marker
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+
+/**
+ * Java token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class JavaTokenMarker extends CTokenMarker
+{
+	public JavaTokenMarker()
+	{
+		super(false,getKeywords());
+	}
+
+	public static KeywordMap getKeywords()
+	{
+		if(javaKeywords == null)
+		{
+			javaKeywords = new KeywordMap(false);
+			javaKeywords.add("package",Token.KEYWORD2);
+			javaKeywords.add("import",Token.KEYWORD2);
+			javaKeywords.add("byte",Token.KEYWORD3);
+			javaKeywords.add("char",Token.KEYWORD3);
+			javaKeywords.add("short",Token.KEYWORD3);
+			javaKeywords.add("int",Token.KEYWORD3);
+			javaKeywords.add("long",Token.KEYWORD3);
+			javaKeywords.add("float",Token.KEYWORD3);
+			javaKeywords.add("double",Token.KEYWORD3);
+			javaKeywords.add("boolean",Token.KEYWORD3);
+			javaKeywords.add("void",Token.KEYWORD3);
+			javaKeywords.add("class",Token.KEYWORD3);
+			javaKeywords.add("interface",Token.KEYWORD3);
+			javaKeywords.add("abstract",Token.KEYWORD1);
+			javaKeywords.add("final",Token.KEYWORD1);
+			javaKeywords.add("private",Token.KEYWORD1);
+			javaKeywords.add("protected",Token.KEYWORD1);
+			javaKeywords.add("public",Token.KEYWORD1);
+			javaKeywords.add("static",Token.KEYWORD1);
+			javaKeywords.add("synchronized",Token.KEYWORD1);
+			javaKeywords.add("native",Token.KEYWORD1);
+			javaKeywords.add("volatile",Token.KEYWORD1);
+			javaKeywords.add("transient",Token.KEYWORD1);
+			javaKeywords.add("break",Token.KEYWORD1);
+			javaKeywords.add("case",Token.KEYWORD1);
+			javaKeywords.add("continue",Token.KEYWORD1);
+			javaKeywords.add("default",Token.KEYWORD1);
+			javaKeywords.add("do",Token.KEYWORD1);
+			javaKeywords.add("else",Token.KEYWORD1);
+			javaKeywords.add("for",Token.KEYWORD1);
+			javaKeywords.add("if",Token.KEYWORD1);
+			javaKeywords.add("instanceof",Token.KEYWORD1);
+			javaKeywords.add("new",Token.KEYWORD1);
+			javaKeywords.add("return",Token.KEYWORD1);
+			javaKeywords.add("switch",Token.KEYWORD1);
+			javaKeywords.add("while",Token.KEYWORD1);
+			javaKeywords.add("throw",Token.KEYWORD1);
+			javaKeywords.add("try",Token.KEYWORD1);
+			javaKeywords.add("catch",Token.KEYWORD1);
+			javaKeywords.add("extends",Token.KEYWORD1);
+			javaKeywords.add("finally",Token.KEYWORD1);
+			javaKeywords.add("implements",Token.KEYWORD1);
+			javaKeywords.add("throws",Token.KEYWORD1);
+			javaKeywords.add("this",Token.LITERAL2);
+			javaKeywords.add("null",Token.LITERAL2);
+			javaKeywords.add("super",Token.LITERAL2);
+			javaKeywords.add("true",Token.LITERAL2);
+			javaKeywords.add("false",Token.LITERAL2);
+		}
+		return javaKeywords;
+	}
+
+	// private members
+	private static KeywordMap javaKeywords;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PHPTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PHPTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PHPTokenMarker.java	(revision 42196)
@@ -0,0 +1,381 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * PHPTokenMarker.java - Token marker for PHP
+ * Copyright (C) 1999 Clancy Malcolm
+ * Based on HTMLTokenMarker.java Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * PHP token marker.
+ *
+ * @author Clancy Malcolm
+ * @version $Id$
+ */
+public class PHPTokenMarker extends TokenMarker
+{
+	public static final byte SCRIPT = Token.INTERNAL_FIRST;
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		lastOffset = offset;
+		lastKeyword = offset;
+		int length = line.count + offset;
+		boolean backslash = false;
+
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			if(c == '\\')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL: // HTML text
+				backslash = false;
+				switch(c)
+				{
+				case '<':
+					addToken(i - lastOffset,token);
+					lastOffset = lastKeyword = i;
+					if(SyntaxUtilities.regionMatches(false,
+						line,i1,"!--"))
+					{
+						i += 3;
+						token = Token.COMMENT1;
+					}
+					else if(SyntaxUtilities.regionMatches(
+						true,line,i1,"?php"))
+					{
+						addToken(5,Token.LABEL);
+						lastOffset = lastKeyword = (i += 4) + 1;
+						token = SCRIPT;
+					}
+					else if(SyntaxUtilities.regionMatches(
+						true,line,i1,"?"))
+					{
+						addToken(2,Token.LABEL);
+						lastOffset = lastKeyword = (i += 1) + 1;
+						token = SCRIPT;
+					}
+					else if(SyntaxUtilities.regionMatches(
+						true,line,i1,"script>"))
+					{
+						addToken(8,Token.LABEL);
+						lastOffset = lastKeyword = (i += 7) + 1;
+						token = SCRIPT;
+					}
+					else
+					{
+						token = Token.KEYWORD1;
+					}
+					break;
+				case '&':
+					addToken(i - lastOffset,token);
+					lastOffset = lastKeyword = i;
+					token = Token.KEYWORD2;
+					break;
+				}
+				break;
+			case Token.KEYWORD1: // Inside a tag
+				backslash = false;
+				if(c == '>')
+				{
+					addToken(i1 - lastOffset,token);
+					lastOffset = lastKeyword = i1;
+					token = Token.NULL;
+				}
+				break;
+			case Token.KEYWORD2: // Inside an entity
+				backslash = false;
+				if(c == ';')
+				{
+					addToken(i1 - lastOffset,token);
+					lastOffset = lastKeyword = i1;
+					token = Token.NULL;
+					break;
+				}
+				break;
+			case Token.COMMENT1: // Inside a comment
+				backslash = false;
+				if(SyntaxUtilities.regionMatches(false,line,i,"-->"))
+				{
+					addToken(i + 3 - lastOffset,token);
+					i += 2;
+					lastOffset = lastKeyword = i + 1;
+					token = Token.NULL;
+				}
+				break;
+			case SCRIPT: // Inside a JavaScript or PHP
+				switch(c)
+				{
+				case '<':
+					backslash = false;
+					doKeyword(line,i,c);
+					if(SyntaxUtilities.regionMatches(true,
+						line,i1,"/script>"))
+					{
+						//Ending the script
+						addToken(i - lastOffset,
+							Token.KEYWORD3);
+						addToken(9,Token.LABEL);
+						lastOffset = lastKeyword = (i += 8) + 1;
+						token = Token.NULL;
+					}
+					else
+					{
+						// < operator
+						addToken(i - lastOffset,
+							Token.KEYWORD3);
+						addToken(1,Token.OPERATOR);
+						lastOffset = lastKeyword = i1;
+					}
+					break;
+				case '?':
+					backslash = false;
+					doKeyword(line, i, c);
+					if (array[i1] == '>')
+					{
+						//Ending the script
+						addToken(i - lastOffset,
+						Token.KEYWORD3);
+						addToken(2,Token.LABEL);
+						lastOffset = lastKeyword = (i += 1) + 1;
+						token = Token.NULL;
+					}
+					else
+					{
+						//? operator
+						addToken(i - lastOffset, Token.KEYWORD3);
+						addToken(1,Token.OPERATOR);
+						lastOffset = lastKeyword = i1;
+					}
+					break;
+				case '"':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						doKeyword(line,i,c);
+						addToken(i - lastOffset,Token.KEYWORD3);
+						lastOffset = lastKeyword = i;
+						token = Token.LITERAL1;
+					}
+					break;
+				case '\'':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						doKeyword(line,i,c);
+						addToken(i - lastOffset,Token.KEYWORD3);
+						lastOffset = lastKeyword = i;
+						token = Token.LITERAL2;
+					}
+					break;
+				case '#':
+					doKeyword(line,i,c);
+					addToken(i - lastOffset,Token.KEYWORD3);
+					addToken(length - i,Token.COMMENT2);
+					lastOffset = lastKeyword = length;
+					break loop;
+				case '/':
+					backslash = false;
+					doKeyword(line,i,c);
+					if(length - i > 1)  /*This is the same as if(length > i + 1) */
+					{
+						addToken(i - lastOffset,Token.KEYWORD3);
+						lastOffset = lastKeyword = i;
+						if(array[i1] == '/')
+						{
+							addToken(length - i,Token.COMMENT2);
+							lastOffset = lastKeyword = length;
+							break loop;
+						}
+						else if(array[i1] == '*')
+						{
+							token = Token.COMMENT2;
+						}
+						else
+						{
+							// / operator
+							addToken(i - lastOffset, Token.KEYWORD3);
+							addToken(1,Token.OPERATOR);
+							lastOffset = lastKeyword = i1;
+						}
+	 				}
+					else
+					{
+						// / operator
+						addToken(i - lastOffset, Token.KEYWORD3);
+						addToken(1,Token.OPERATOR);
+						lastOffset = lastKeyword = i1;
+					}
+					break;
+				default:
+					backslash = false;
+					if(!Character.isLetterOrDigit(c)
+						&& c != '_' && c != '$')
+					{
+						doKeyword(line,i,c);
+						if (c != ' ')
+						{
+							//assume non alphanumeric characters are operators
+							addToken(i - lastOffset, Token.KEYWORD3);
+							addToken(1,Token.OPERATOR);
+							lastOffset = lastKeyword = i1;
+						}
+					}
+					break;
+				}
+				break;
+			case Token.LITERAL1: // Script "..."
+				if(backslash)
+					backslash = false;
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					lastOffset = lastKeyword = i1;
+					token = SCRIPT;
+				}
+				break;
+			case Token.LITERAL2: // Script '...'
+				if(backslash)
+					backslash = false;
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					lastOffset = lastKeyword = i1;
+					token = SCRIPT;
+				}
+				break;
+			case Token.COMMENT2: // Inside a Script comment
+				backslash = false;
+				if(c == '*' && length - i > 1 && array[i1] == '/')
+				{
+					addToken(i + 2 - lastOffset,Token.COMMENT2);
+					i += 1;
+					lastOffset = lastKeyword = i + 1;
+					token = SCRIPT;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: "
+					+ token);
+			}
+		}
+
+		switch(token)
+		{
+		case Token.LITERAL1:
+			addToken(length - lastOffset,Token.LITERAL1);
+			break;
+		case Token.LITERAL2:
+			addToken(length - lastOffset,Token.LITERAL2);
+			break;
+		case Token.KEYWORD2:
+			addToken(length - lastOffset,Token.INVALID);
+			token = Token.NULL;
+			break;
+		case SCRIPT:
+			doKeyword(line,length,'\0');
+			addToken(length - lastOffset,Token.KEYWORD3);
+			break;
+		default:
+			addToken(length - lastOffset,token);
+			break;
+		}
+
+		return token;
+	}
+
+	// private members
+	private static KeywordMap keywords;
+	private int lastOffset;
+	private int lastKeyword;
+
+	static
+	{
+		keywords = new KeywordMap(false);
+		keywords.add("function",Token.KEYWORD2);
+		keywords.add("class",Token.KEYWORD2);
+		keywords.add("var",Token.KEYWORD2);
+		keywords.add("require",Token.KEYWORD2);
+		keywords.add("include",Token.KEYWORD2);
+		keywords.add("else",Token.KEYWORD1);
+		keywords.add("elseif",Token.KEYWORD1);
+		keywords.add("do",Token.KEYWORD1);
+		keywords.add("for",Token.KEYWORD1);
+		keywords.add("if",Token.KEYWORD1);
+		keywords.add("endif",Token.KEYWORD1);
+		keywords.add("in",Token.KEYWORD1);
+		keywords.add("new",Token.KEYWORD1);
+		keywords.add("return",Token.KEYWORD1);
+		keywords.add("while",Token.KEYWORD1);
+		keywords.add("endwhile",Token.KEYWORD1);
+		keywords.add("with",Token.KEYWORD1);
+		keywords.add("break",Token.KEYWORD1);
+		keywords.add("switch",Token.KEYWORD1);
+		keywords.add("case",Token.KEYWORD1);
+		keywords.add("continue",Token.KEYWORD1);
+		keywords.add("default",Token.KEYWORD1);
+		keywords.add("echo",Token.KEYWORD1);
+		keywords.add("false",Token.KEYWORD1);
+		keywords.add("this",Token.KEYWORD1);
+		keywords.add("true",Token.KEYWORD1);
+		keywords.add("array",Token.KEYWORD1);
+		keywords.add("extends",Token.KEYWORD1);
+	}
+
+	private boolean doKeyword(Segment line, int i, char c)
+	{
+		int i1 = i+1;
+
+		int len = i - lastKeyword;
+		byte id = keywords.lookup(line,lastKeyword,len);
+		if(id != Token.NULL)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.KEYWORD3);
+			addToken(len,id);
+			lastOffset = i;
+		}
+		lastKeyword = i1;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PHPTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/EiffelTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/EiffelTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/EiffelTokenMarker.java	(revision 42196)
@@ -0,0 +1,293 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * EiffelTokenMarker.java - Eiffel token marker
+ * Copyright (C) 1999 Slava Pestov
+ * Copyright (C) 1999 Artur Biesiadowski
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Eiffel token Marker.
+ *
+ * @author Artur Biesiadowski
+ */
+public class EiffelTokenMarker extends TokenMarker
+{
+
+	public EiffelTokenMarker()
+	{
+		this.keywords = getKeywords();
+	}
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		lastOffset = offset;
+		lastKeyword = offset;
+		int length = line.count + offset;
+		boolean backslash = false;
+
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			if(c == '%')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(c)
+				{
+				case '"':
+					doKeyword(line,i,c);
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL1;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case '\'':
+					doKeyword(line,i,c);
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL2;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case ':':
+					if(lastKeyword == offset)
+					{
+						if(doKeyword(line,i,c))
+							break;
+						backslash = false;
+						addToken(i1 - lastOffset,Token.LABEL);
+						lastOffset = lastKeyword = i1;
+					}
+					else if(doKeyword(line,i,c))
+						break;
+					break;
+				case '-':
+					backslash = false;
+					doKeyword(line,i,c);
+					if(length - i > 1)
+					{
+						switch(array[i1])
+						{
+						case '-':
+							addToken(i - lastOffset,token);
+							addToken(length - i,Token.COMMENT1);
+							lastOffset = lastKeyword = length;
+							break loop;
+						}
+					}
+					break;
+				default:
+					backslash = false;
+					if(!Character.isLetterOrDigit(c)
+						&& c != '_')
+						doKeyword(line,i,c);
+					break;
+				}
+				break;
+			case Token.COMMENT1:
+			case Token.COMMENT2:
+				throw new RuntimeException("Wrong eiffel parser state");
+			case Token.LITERAL1:
+				if(backslash)
+					backslash = false;
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			case Token.LITERAL2:
+				if(backslash)
+					backslash = false;
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: "
+					+ token);
+			}
+		}
+
+		if(token == Token.NULL)
+			doKeyword(line,length,'\0');
+
+		switch(token)
+		{
+		case Token.LITERAL1:
+		case Token.LITERAL2:
+			addToken(length - lastOffset,Token.INVALID);
+			token = Token.NULL;
+			break;
+		case Token.KEYWORD2:
+			addToken(length - lastOffset,token);
+			if(!backslash)
+				token = Token.NULL;
+		default:
+			addToken(length - lastOffset,token);
+			break;
+		}
+
+		return token;
+	}
+
+	public static KeywordMap getKeywords()
+	{
+		if(eiffelKeywords == null)
+		{
+			eiffelKeywords = new KeywordMap(true);
+			eiffelKeywords.add("alias", Token.KEYWORD1);
+			eiffelKeywords.add("all", Token.KEYWORD1);
+			eiffelKeywords.add("and", Token.KEYWORD1);
+			eiffelKeywords.add("as", Token.KEYWORD1);
+			eiffelKeywords.add("check", Token.KEYWORD1);
+			eiffelKeywords.add("class", Token.KEYWORD1);
+			eiffelKeywords.add("creation", Token.KEYWORD1);
+			eiffelKeywords.add("debug", Token.KEYWORD1);
+			eiffelKeywords.add("deferred", Token.KEYWORD1);
+			eiffelKeywords.add("do", Token.KEYWORD1);
+			eiffelKeywords.add("else",Token.KEYWORD1);
+			eiffelKeywords.add("elseif", Token.KEYWORD1);
+			eiffelKeywords.add("end", Token.KEYWORD1);
+			eiffelKeywords.add("ensure", Token.KEYWORD1);
+			eiffelKeywords.add("expanded", Token.KEYWORD1);
+			eiffelKeywords.add("export", Token.KEYWORD1);
+			eiffelKeywords.add("external", Token.KEYWORD1);
+			eiffelKeywords.add("feature", Token.KEYWORD1);
+			eiffelKeywords.add("from", Token.KEYWORD1);
+			eiffelKeywords.add("frozen", Token.KEYWORD1);
+			eiffelKeywords.add("if", Token.KEYWORD1);
+			eiffelKeywords.add("implies",Token.KEYWORD1);
+			eiffelKeywords.add("indexing", Token.KEYWORD1);
+			eiffelKeywords.add("infix", Token.KEYWORD1);
+			eiffelKeywords.add("inherit", Token.KEYWORD1);
+			eiffelKeywords.add("inspect", Token.KEYWORD1);
+			eiffelKeywords.add("invariant", Token.KEYWORD1);
+			eiffelKeywords.add("is", Token.KEYWORD1);
+			eiffelKeywords.add("like", Token.KEYWORD1);
+			eiffelKeywords.add("local", Token.KEYWORD1);
+			eiffelKeywords.add("loop", Token.KEYWORD1);
+			eiffelKeywords.add("not", Token.KEYWORD1);
+			eiffelKeywords.add("obsolete", Token.KEYWORD1);
+			eiffelKeywords.add("old",Token.KEYWORD1);
+			eiffelKeywords.add("once", Token.KEYWORD1);
+			eiffelKeywords.add("or", Token.KEYWORD1);
+			eiffelKeywords.add("prefix", Token.KEYWORD1);
+			eiffelKeywords.add("redefine", Token.KEYWORD1);
+			eiffelKeywords.add("rename", Token.KEYWORD1);
+			eiffelKeywords.add("require", Token.KEYWORD1);
+			eiffelKeywords.add("rescue", Token.KEYWORD1);
+			eiffelKeywords.add("retry", Token.KEYWORD1);
+			eiffelKeywords.add("select", Token.KEYWORD1);
+			eiffelKeywords.add("separate", Token.KEYWORD1);
+			eiffelKeywords.add("then",Token.KEYWORD1);
+			eiffelKeywords.add("undefine", Token.KEYWORD1);
+			eiffelKeywords.add("until", Token.KEYWORD1);
+			eiffelKeywords.add("variant", Token.KEYWORD1);
+			eiffelKeywords.add("when", Token.KEYWORD1);
+			eiffelKeywords.add("xor", Token.KEYWORD1);
+
+			eiffelKeywords.add("current",Token.LITERAL2);
+			eiffelKeywords.add("false",Token.LITERAL2);
+			eiffelKeywords.add("precursor",Token.LITERAL2);
+			eiffelKeywords.add("result",Token.LITERAL2);
+			eiffelKeywords.add("strip",Token.LITERAL2);
+			eiffelKeywords.add("true",Token.LITERAL2);
+			eiffelKeywords.add("unique",Token.LITERAL2);
+			eiffelKeywords.add("void",Token.LITERAL2);
+
+		}
+		return eiffelKeywords;
+	}
+
+	// private members
+	private static KeywordMap eiffelKeywords;
+
+	private boolean cpp;
+	private KeywordMap keywords;
+	private int lastOffset;
+	private int lastKeyword;
+
+	private boolean doKeyword(Segment line, int i, char c)
+	{
+		int i1 = i+1;
+		boolean klassname = false;
+
+		int len = i - lastKeyword;
+		byte id = keywords.lookup(line,lastKeyword,len);
+		if ( id == Token.NULL )
+		{
+			klassname = true;
+			for ( int at = lastKeyword; at < lastKeyword + len; at++ )
+			{
+				char ch = line.array[at];
+				if ( ch != '_' && !Character.isUpperCase(ch) )
+				{
+					klassname = false;
+					break;
+				}
+			}
+			if ( klassname )
+				id = Token.KEYWORD3;
+		}
+
+		if(id != Token.NULL)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.NULL);
+			addToken(len,id);
+			lastOffset = i;
+		}
+		lastKeyword = i1;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/EiffelTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/InputHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/InputHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/InputHandler.java	(revision 42196)
@@ -0,0 +1,1099 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * InputHandler.java - Manages key bindings and executes actions
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.util.Enumeration;
+import java.util.EventObject;
+import java.util.Hashtable;
+
+import javax.swing.JPopupMenu;
+import javax.swing.text.BadLocationException;
+
+/**
+ * An input handler converts the user's key strokes into concrete actions.
+ * It also takes care of macro recording and action repetition.<p>
+ *
+ * This class provides all the necessary support code for an input
+ * handler, but doesn't actually do any key binding logic. It is up
+ * to the implementations of this class to do so.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ * @see org.gjt.sp.jedit.textarea.DefaultInputHandler
+ */
+public abstract class InputHandler extends KeyAdapter
+{
+	/**
+	 * If this client property is set to Boolean.TRUE on the text area,
+	 * the home/end keys will support 'smart' BRIEF-like behaviour
+	 * (one press = start/end of line, two presses = start/end of
+	 * viewscreen, three presses = start/end of document). By default,
+	 * this property is not set.
+	 */
+	public static final String SMART_HOME_END_PROPERTY = "InputHandler.homeEnd";
+
+	public static final ActionListener BACKSPACE = new backspace();
+	public static final ActionListener BACKSPACE_WORD = new backspace_word();
+	public static final ActionListener DELETE = new delete();
+	public static final ActionListener DELETE_WORD = new delete_word();
+	public static final ActionListener END = new end(false);
+	public static final ActionListener DOCUMENT_END = new document_end(false);
+	public static final ActionListener SELECT_END = new end(true);
+	public static final ActionListener SELECT_DOC_END = new document_end(true);
+	public static final ActionListener INSERT_BREAK = new insert_break();
+	public static final ActionListener INSERT_TAB = new insert_tab();
+	public static final ActionListener HOME = new home(false);
+	public static final ActionListener DOCUMENT_HOME = new document_home(false);
+	public static final ActionListener SELECT_HOME = new home(true);
+	public static final ActionListener SELECT_DOC_HOME = new document_home(true);
+	public static final ActionListener NEXT_CHAR = new next_char(false);
+	public static final ActionListener NEXT_LINE = new next_line(false);
+	public static final ActionListener NEXT_PAGE = new next_page(false);
+	public static final ActionListener NEXT_WORD = new next_word(false);
+	public static final ActionListener SELECT_NEXT_CHAR = new next_char(true);
+	public static final ActionListener SELECT_NEXT_LINE = new next_line(true);
+	public static final ActionListener SELECT_NEXT_PAGE = new next_page(true);
+	public static final ActionListener SELECT_NEXT_WORD = new next_word(true);
+	public static final ActionListener OVERWRITE = new overwrite();
+	public static final ActionListener PREV_CHAR = new prev_char(false);
+	public static final ActionListener PREV_LINE = new prev_line(false);
+	public static final ActionListener PREV_PAGE = new prev_page(false);
+	public static final ActionListener PREV_WORD = new prev_word(false);
+	public static final ActionListener SELECT_PREV_CHAR = new prev_char(true);
+	public static final ActionListener SELECT_PREV_LINE = new prev_line(true);
+	public static final ActionListener SELECT_PREV_PAGE = new prev_page(true);
+	public static final ActionListener SELECT_PREV_WORD = new prev_word(true);
+	public static final ActionListener REPEAT = new repeat();
+	public static final ActionListener TOGGLE_RECT = new toggle_rect();
+
+	// Default action
+	public static final ActionListener INSERT_CHAR = new insert_char();
+
+	private static Hashtable actions;
+
+	static
+	{
+		actions = new Hashtable();
+		actions.put("backspace",BACKSPACE);
+		actions.put("backspace-word",BACKSPACE_WORD);
+		actions.put("delete",DELETE);
+		actions.put("delete-word",DELETE_WORD);
+		actions.put("end",END);
+		actions.put("select-end",SELECT_END);
+		actions.put("document-end",DOCUMENT_END);
+		actions.put("select-doc-end",SELECT_DOC_END);
+		actions.put("insert-break",INSERT_BREAK);
+		actions.put("insert-tab",INSERT_TAB);
+		actions.put("home",HOME);
+		actions.put("select-home",SELECT_HOME);
+		actions.put("document-home",DOCUMENT_HOME);
+		actions.put("select-doc-home",SELECT_DOC_HOME);
+		actions.put("next-char",NEXT_CHAR);
+		actions.put("next-line",NEXT_LINE);
+		actions.put("next-page",NEXT_PAGE);
+		actions.put("next-word",NEXT_WORD);
+		actions.put("select-next-char",SELECT_NEXT_CHAR);
+		actions.put("select-next-line",SELECT_NEXT_LINE);
+		actions.put("select-next-page",SELECT_NEXT_PAGE);
+		actions.put("select-next-word",SELECT_NEXT_WORD);
+		actions.put("overwrite",OVERWRITE);
+		actions.put("prev-char",PREV_CHAR);
+		actions.put("prev-line",PREV_LINE);
+		actions.put("prev-page",PREV_PAGE);
+		actions.put("prev-word",PREV_WORD);
+		actions.put("select-prev-char",SELECT_PREV_CHAR);
+		actions.put("select-prev-line",SELECT_PREV_LINE);
+		actions.put("select-prev-page",SELECT_PREV_PAGE);
+		actions.put("select-prev-word",SELECT_PREV_WORD);
+		actions.put("repeat",REPEAT);
+		actions.put("toggle-rect",TOGGLE_RECT);
+		actions.put("insert-char",INSERT_CHAR);
+	}
+
+	/**
+	 * Returns a named text area action.
+	 * @param name The action name
+	 */
+	public static ActionListener getAction(String name)
+	{
+		return (ActionListener)actions.get(name);
+	}
+
+	/**
+	 * Returns the name of the specified text area action.
+	 * @param listener The action
+	 */
+	public static String getActionName(ActionListener listener)
+	{
+		Enumeration enumeration = getActions();
+		while(enumeration.hasMoreElements())
+		{
+			String name = (String)enumeration.nextElement();
+			ActionListener _listener = getAction(name);
+			if(_listener == listener)
+				return name;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns an enumeration of all available actions.
+	 */
+	public static Enumeration getActions()
+	{
+		return actions.keys();
+	}
+
+	/**
+	 * Adds the default key bindings to this input handler.
+	 * This should not be called in the constructor of this
+	 * input handler, because applications might load the
+	 * key bindings from a file, etc.
+	 */
+	public abstract void addDefaultKeyBindings();
+
+	/**
+	 * Adds a key binding to this input handler.
+	 * @param keyBinding The key binding (the format of this is
+	 * input-handler specific)
+	 * @param action The action
+	 */
+	public abstract void addKeyBinding(String keyBinding, ActionListener action);
+
+	/**
+	 * Removes a key binding from this input handler.
+	 * @param keyBinding The key binding
+	 */
+	public abstract void removeKeyBinding(String keyBinding);
+
+	/**
+	 * Removes all key bindings from this input handler.
+	 */
+	public abstract void removeAllKeyBindings();
+
+	/**
+	 * Grabs the next key typed event and invokes the specified
+	 * action with the key as a the action command.
+	 * @param action The action
+	 */
+	public void grabNextKeyStroke(ActionListener listener)
+	{
+		grabAction = listener;
+	}
+
+	/**
+	 * Returns if repeating is enabled. When repeating is enabled,
+	 * actions will be executed multiple times. This is usually
+	 * invoked with a special key stroke in the input handler.
+	 */
+	public boolean isRepeatEnabled()
+	{
+		return repeat;
+	}
+
+	/**
+	 * Enables repeating. When repeating is enabled, actions will be
+	 * executed multiple times. Once repeating is enabled, the input
+	 * handler should read a number from the keyboard.
+	 */
+	public void setRepeatEnabled(boolean repeat)
+	{
+		this.repeat = repeat;
+	}
+
+	/**
+	 * Returns the number of times the next action will be repeated.
+	 */
+	public int getRepeatCount()
+	{
+		return (repeat ? Math.max(1,repeatCount) : 1);
+	}
+
+	/**
+	 * Sets the number of times the next action will be repeated.
+	 * @param repeatCount The repeat count
+	 */
+	public void setRepeatCount(int repeatCount)
+	{
+		this.repeatCount = repeatCount;
+	}
+
+	/**
+	 * Returns the macro recorder. If this is non-null, all executed
+	 * actions should be forwarded to the recorder.
+	 */
+	public InputHandler.MacroRecorder getMacroRecorder()
+	{
+		return recorder;
+	}
+
+	/**
+	 * Sets the macro recorder. If this is non-null, all executed
+	 * actions should be forwarded to the recorder.
+	 * @param recorder The macro recorder
+	 */
+	public void setMacroRecorder(InputHandler.MacroRecorder recorder)
+	{
+		this.recorder = recorder;
+	}
+
+	/**
+	 * Returns a copy of this input handler that shares the same
+	 * key bindings. Setting key bindings in the copy will also
+	 * set them in the original.
+	 */
+	public abstract InputHandler copy();
+
+	/**
+	 * Executes the specified action, repeating and recording it as
+	 * necessary.
+	 * @param listener The action listener
+	 * @param source The event source
+	 * @param actionCommand The action command
+	 */
+	public void executeAction(ActionListener listener, Object source,
+		String actionCommand)
+	{
+		// create event
+		ActionEvent evt = new ActionEvent(source,
+			ActionEvent.ACTION_PERFORMED,
+			actionCommand);
+
+		// don't do anything if the action is a wrapper
+		// (like EditAction.Wrapper)
+		if(listener instanceof Wrapper)
+		{
+			listener.actionPerformed(evt);
+			return;
+		}
+
+		// remember old values, in case action changes them
+		boolean _repeat = repeat;
+		int _repeatCount = getRepeatCount();
+
+		// execute the action
+		if(listener instanceof InputHandler.NonRepeatable)
+			listener.actionPerformed(evt);
+		else
+		{
+			for(int i = 0; i < Math.max(1,repeatCount); i++)
+				listener.actionPerformed(evt);
+		}
+
+		// do recording. Notice that we do no recording whatsoever
+		// for actions that grab keys
+		if(grabAction == null)
+		{
+			if(recorder != null)
+			{
+				if(!(listener instanceof InputHandler.NonRecordable))
+				{
+					if(_repeatCount != 1)
+						recorder.actionPerformed(REPEAT,String.valueOf(_repeatCount));
+
+					recorder.actionPerformed(listener,actionCommand);
+				}
+			}
+
+			// If repeat was true originally, clear it
+			// Otherwise it might have been set by the action, etc
+			if(_repeat)
+			{
+				repeat = false;
+				repeatCount = 0;
+			}
+		}
+	}
+
+	/**
+	 * Returns the text area that fired the specified event.
+	 * @param evt The event
+	 */
+	public static JEditTextArea getTextArea(EventObject evt)
+	{
+		if(evt != null)
+		{
+			Object o = evt.getSource();
+			if(o instanceof Component)
+			{
+				// find the parent text area
+				Component c = (Component)o;
+				for(;;)
+				{
+					if(c instanceof JEditTextArea)
+						return (JEditTextArea)c;
+					else if(c == null)
+						break;
+					if(c instanceof JPopupMenu)
+						c = ((JPopupMenu)c)
+							.getInvoker();
+					else
+						c = c.getParent();
+				}
+			}
+		}
+
+		// this shouldn't happen
+		System.err.println("BUG: getTextArea() returning null");
+		System.err.println("Report this to Slava Pestov <sp@gjt.org>");
+		return null;
+	}
+
+	// protected members
+
+	/**
+	 * If a key is being grabbed, this method should be called with
+	 * the appropriate key event. It executes the grab action with
+	 * the typed character as the parameter.
+	 */
+	protected void handleGrabAction(KeyEvent evt)
+	{
+		// Clear it *before* it is executed so that executeAction()
+		// resets the repeat count
+		ActionListener _grabAction = grabAction;
+		grabAction = null;
+		executeAction(_grabAction,evt.getSource(),
+			String.valueOf(evt.getKeyChar()));
+	}
+
+	// protected members
+	protected ActionListener grabAction;
+	protected boolean repeat;
+	protected int repeatCount;
+	protected InputHandler.MacroRecorder recorder;
+
+	/**
+	 * If an action implements this interface, it should not be repeated.
+	 * Instead, it will handle the repetition itself.
+	 */
+	public interface NonRepeatable {}
+
+	/**
+	 * If an action implements this interface, it should not be recorded
+	 * by the macro recorder. Instead, it will do its own recording.
+	 */
+	public interface NonRecordable {}
+
+	/**
+	 * For use by EditAction.Wrapper only.
+	 * @since jEdit 2.2final
+	 */
+	public interface Wrapper {}
+
+	/**
+	 * Macro recorder.
+	 */
+	public interface MacroRecorder
+	{
+		void actionPerformed(ActionListener listener,
+			String actionCommand);
+	}
+
+	public static class backspace implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+
+			if(!textArea.isEditable())
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			if(textArea.getSelectionStart()
+			   != textArea.getSelectionEnd())
+			{
+				textArea.setSelectedText("");
+			}
+			else
+			{
+				int caret = textArea.getCaretPosition();
+				if(caret == 0)
+				{
+					textArea.getToolkit().beep();
+					return;
+				}
+				try
+				{
+					textArea.getDocument().remove(caret - 1,1);
+				}
+				catch(BadLocationException bl)
+				{
+					bl.printStackTrace();
+				}
+			}
+		}
+	}
+
+	public static class backspace_word implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int start = textArea.getSelectionStart();
+			if(start != textArea.getSelectionEnd())
+			{
+				textArea.setSelectedText("");
+			}
+
+			int line = textArea.getCaretLine();
+			int lineStart = textArea.getLineStartOffset(line);
+			int caret = start - lineStart;
+
+			String lineText = textArea.getLineText(textArea
+				.getCaretLine());
+
+			if(caret == 0)
+			{
+				if(lineStart == 0)
+				{
+					textArea.getToolkit().beep();
+					return;
+				}
+				caret--;
+			}
+			else
+			{
+				String noWordSep = (String)textArea.getDocument().getProperty("noWordSep");
+				caret = TextUtilities.findWordStart(lineText,caret,noWordSep);
+			}
+
+			try
+			{
+				textArea.getDocument().remove(
+						caret + lineStart,
+						start - (caret + lineStart));
+			}
+			catch(BadLocationException bl)
+			{
+				bl.printStackTrace();
+			}
+		}
+	}
+
+	public static class delete implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+
+			if(!textArea.isEditable())
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			if(textArea.getSelectionStart()
+			   != textArea.getSelectionEnd())
+			{
+				textArea.setSelectedText("");
+			}
+			else
+			{
+				int caret = textArea.getCaretPosition();
+				if(caret == textArea.getDocumentLength())
+				{
+					textArea.getToolkit().beep();
+					return;
+				}
+				try
+				{
+					textArea.getDocument().remove(caret,1);
+				}
+				catch(BadLocationException bl)
+				{
+					bl.printStackTrace();
+				}
+			}
+		}
+	}
+
+	public static class delete_word implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int start = textArea.getSelectionStart();
+			if(start != textArea.getSelectionEnd())
+			{
+				textArea.setSelectedText("");
+			}
+
+			int line = textArea.getCaretLine();
+			int lineStart = textArea.getLineStartOffset(line);
+			int caret = start - lineStart;
+
+			String lineText = textArea.getLineText(textArea
+				.getCaretLine());
+
+			if(caret == lineText.length())
+			{
+				if(lineStart + caret == textArea.getDocumentLength())
+				{
+					textArea.getToolkit().beep();
+					return;
+				}
+				caret++;
+			}
+			else
+			{
+				String noWordSep = (String)textArea.getDocument().getProperty("noWordSep");
+				caret = TextUtilities.findWordEnd(lineText,caret,noWordSep);
+			}
+
+			try
+			{
+				textArea.getDocument().remove(start,
+					(caret + lineStart) - start);
+			}
+			catch(BadLocationException bl)
+			{
+				bl.printStackTrace();
+			}
+		}
+	}
+
+	public static class end implements ActionListener
+	{
+		private boolean select;
+
+		public end(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+
+			int caret = textArea.getCaretPosition();
+
+			int lastOfLine = textArea.getLineEndOffset(
+				textArea.getCaretLine()) - 1;
+			int lastVisibleLine = textArea.getFirstLine()
+				+ textArea.getVisibleLines();
+			if(lastVisibleLine >= textArea.getLineCount())
+			{
+				lastVisibleLine = Math.min(textArea.getLineCount() - 1,
+					lastVisibleLine);
+			}
+			else
+				lastVisibleLine -= (textArea.getElectricScroll() + 1);
+
+			int lastVisible = textArea.getLineEndOffset(lastVisibleLine) - 1;
+			int lastDocument = textArea.getDocumentLength();
+
+			if(caret == lastDocument)
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+			else if(!Boolean.TRUE.equals(textArea.getClientProperty(
+				SMART_HOME_END_PROPERTY)))
+				caret = lastOfLine;
+			else if(caret == lastVisible)
+				caret = lastDocument;
+			else if(caret == lastOfLine)
+				caret = lastVisible;
+			else
+				caret = lastOfLine;
+
+			if(select)
+				textArea.select(textArea.getMarkPosition(),caret);
+			else
+				textArea.setCaretPosition(caret);
+		}
+	}
+
+	public static class document_end implements ActionListener
+	{
+		private boolean select;
+
+		public document_end(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			if(select)
+				textArea.select(textArea.getMarkPosition(),
+					textArea.getDocumentLength());
+			else
+				textArea.setCaretPosition(textArea
+					.getDocumentLength());
+		}
+	}
+
+	public static class home implements ActionListener
+	{
+		private boolean select;
+
+		public home(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+
+			int caret = textArea.getCaretPosition();
+
+			int firstLine = textArea.getFirstLine();
+
+			int firstOfLine = textArea.getLineStartOffset(
+				textArea.getCaretLine());
+			int firstVisibleLine = (firstLine == 0 ? 0 :
+				firstLine + textArea.getElectricScroll());
+			int firstVisible = textArea.getLineStartOffset(
+				firstVisibleLine);
+
+			if(caret == 0)
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+			else if(!Boolean.TRUE.equals(textArea.getClientProperty(
+				SMART_HOME_END_PROPERTY)))
+				caret = firstOfLine;
+			else if(caret == firstVisible)
+				caret = 0;
+			else if(caret == firstOfLine)
+				caret = firstVisible;
+			else
+				caret = firstOfLine;
+
+			if(select)
+				textArea.select(textArea.getMarkPosition(),caret);
+			else
+				textArea.setCaretPosition(caret);
+		}
+	}
+
+	public static class document_home implements ActionListener
+	{
+		private boolean select;
+
+		public document_home(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			if(select)
+				textArea.select(textArea.getMarkPosition(),0);
+			else
+				textArea.setCaretPosition(0);
+		}
+	}
+
+	public static class insert_break implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+
+			if(!textArea.isEditable())
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			textArea.setSelectedText("\n");
+		}
+	}
+
+	public static class insert_tab implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+
+			if(!textArea.isEditable())
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			textArea.overwriteSetSelectedText("\t");
+		}
+	}
+
+	public static class next_char implements ActionListener
+	{
+		private boolean select;
+
+		public next_char(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int caret = textArea.getCaretPosition();
+			if(caret == textArea.getDocumentLength())
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			if(select)
+				textArea.select(textArea.getMarkPosition(),
+					caret + 1);
+			else
+				textArea.setCaretPosition(caret + 1);
+		}
+	}
+
+	public static class next_line implements ActionListener
+	{
+		private boolean select;
+
+		public next_line(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int caret = textArea.getCaretPosition();
+			int line = textArea.getCaretLine();
+
+			if(line == textArea.getLineCount() - 1)
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			int magic = textArea.getMagicCaretPosition();
+			if(magic == -1)
+			{
+				magic = textArea.offsetToX(line,
+					caret - textArea.getLineStartOffset(line));
+			}
+
+			caret = textArea.getLineStartOffset(line + 1)
+				+ textArea.xToOffset(line + 1,magic);
+			if(select)
+				textArea.select(textArea.getMarkPosition(),caret);
+			else
+				textArea.setCaretPosition(caret);
+			textArea.setMagicCaretPosition(magic);
+		}
+	}
+
+	public static class next_page implements ActionListener
+	{
+		private boolean select;
+
+		public next_page(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int lineCount = textArea.getLineCount();
+			int firstLine = textArea.getFirstLine();
+			int visibleLines = textArea.getVisibleLines();
+			int line = textArea.getCaretLine();
+
+			firstLine += visibleLines;
+
+			if(firstLine + visibleLines >= lineCount - 1)
+				firstLine = lineCount - visibleLines;
+
+			textArea.setFirstLine(firstLine);
+
+			int caret = textArea.getLineStartOffset(
+				Math.min(textArea.getLineCount() - 1,
+				line + visibleLines));
+			if(select)
+				textArea.select(textArea.getMarkPosition(),caret);
+			else
+				textArea.setCaretPosition(caret);
+		}
+	}
+
+	public static class next_word implements ActionListener
+	{
+		private boolean select;
+
+		public next_word(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int caret = textArea.getCaretPosition();
+			int line = textArea.getCaretLine();
+			int lineStart = textArea.getLineStartOffset(line);
+			caret -= lineStart;
+
+			String lineText = textArea.getLineText(textArea
+				.getCaretLine());
+
+			if(caret == lineText.length())
+			{
+				if(lineStart + caret == textArea.getDocumentLength())
+				{
+					textArea.getToolkit().beep();
+					return;
+				}
+				caret++;
+			}
+			else
+			{
+				String noWordSep = (String)textArea.getDocument().getProperty("noWordSep");
+				caret = TextUtilities.findWordEnd(lineText,caret,noWordSep);
+			}
+
+			if(select)
+				textArea.select(textArea.getMarkPosition(),
+					lineStart + caret);
+			else
+				textArea.setCaretPosition(lineStart + caret);
+		}
+	}
+
+	public static class overwrite implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			textArea.setOverwriteEnabled(
+				!textArea.isOverwriteEnabled());
+		}
+	}
+
+	public static class prev_char implements ActionListener
+	{
+		private boolean select;
+
+		public prev_char(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int caret = textArea.getCaretPosition();
+			if(caret == 0)
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			if(select)
+				textArea.select(textArea.getMarkPosition(),
+					caret - 1);
+			else
+				textArea.setCaretPosition(caret - 1);
+		}
+	}
+
+	public static class prev_line implements ActionListener
+	{
+		private boolean select;
+
+		public prev_line(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int caret = textArea.getCaretPosition();
+			int line = textArea.getCaretLine();
+
+			if(line == 0)
+			{
+				textArea.getToolkit().beep();
+				return;
+			}
+
+			int magic = textArea.getMagicCaretPosition();
+			if(magic == -1)
+			{
+				magic = textArea.offsetToX(line,
+					caret - textArea.getLineStartOffset(line));
+			}
+
+			caret = textArea.getLineStartOffset(line - 1)
+				+ textArea.xToOffset(line - 1,magic);
+			if(select)
+				textArea.select(textArea.getMarkPosition(),caret);
+			else
+				textArea.setCaretPosition(caret);
+			textArea.setMagicCaretPosition(magic);
+		}
+	}
+
+	public static class prev_page implements ActionListener
+	{
+		private boolean select;
+
+		public prev_page(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int firstLine = textArea.getFirstLine();
+			int visibleLines = textArea.getVisibleLines();
+			int line = textArea.getCaretLine();
+
+			if(firstLine < visibleLines)
+				firstLine = visibleLines;
+
+			textArea.setFirstLine(firstLine - visibleLines);
+
+			int caret = textArea.getLineStartOffset(
+				Math.max(0,line - visibleLines));
+			if(select)
+				textArea.select(textArea.getMarkPosition(),caret);
+			else
+				textArea.setCaretPosition(caret);
+		}
+	}
+
+	public static class prev_word implements ActionListener
+	{
+		private boolean select;
+
+		public prev_word(boolean select)
+		{
+			this.select = select;
+		}
+
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			int caret = textArea.getCaretPosition();
+			int line = textArea.getCaretLine();
+			int lineStart = textArea.getLineStartOffset(line);
+			caret -= lineStart;
+
+			String lineText = textArea.getLineText(textArea
+				.getCaretLine());
+
+			if(caret == 0)
+			{
+				if(lineStart == 0)
+				{
+					textArea.getToolkit().beep();
+					return;
+				}
+				caret--;
+			}
+			else
+			{
+				String noWordSep = (String)textArea.getDocument().getProperty("noWordSep");
+				caret = TextUtilities.findWordStart(lineText,caret,noWordSep);
+			}
+
+			if(select)
+				textArea.select(textArea.getMarkPosition(),
+					lineStart + caret);
+			else
+				textArea.setCaretPosition(lineStart + caret);
+		}
+	}
+
+	public static class repeat implements ActionListener,
+		InputHandler.NonRecordable
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			textArea.getInputHandler().setRepeatEnabled(true);
+			String actionCommand = evt.getActionCommand();
+			if(actionCommand != null)
+			{
+				textArea.getInputHandler().setRepeatCount(
+					Integer.parseInt(actionCommand));
+			}
+		}
+	}
+
+	public static class toggle_rect implements ActionListener
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			textArea.setSelectionRectangular(
+				!textArea.isSelectionRectangular());
+		}
+	}
+
+	public static class insert_char implements ActionListener,
+		InputHandler.NonRepeatable
+	{
+		public void actionPerformed(ActionEvent evt)
+		{
+			JEditTextArea textArea = getTextArea(evt);
+			String str = evt.getActionCommand();
+			int repeatCount = textArea.getInputHandler().getRepeatCount();
+
+			if(textArea.isEditable())
+			{
+				StringBuffer buf = new StringBuffer();
+				for(int i = 0; i < repeatCount; i++)
+					buf.append(str);
+				textArea.overwriteSetSelectedText(buf.toString());
+			}
+			else
+			{
+				textArea.getToolkit().beep();
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/InputHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaPainter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaPainter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaPainter.java	(revision 42196)
@@ -0,0 +1,727 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * TextAreaPainter.java - Paints the text area
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JComponent;
+import javax.swing.ToolTipManager;
+import javax.swing.text.PlainDocument;
+import javax.swing.text.Segment;
+import javax.swing.text.TabExpander;
+import javax.swing.text.Utilities;
+
+/**
+ * The text area repaint manager. It performs double buffering and paints
+ * lines of text.
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class TextAreaPainter extends JComponent implements TabExpander
+{
+	/**
+	 * Creates a new repaint manager. This should be not be called
+	 * directly.
+	 */
+	public TextAreaPainter(JEditTextArea textArea, TextAreaDefaults defaults)
+	{
+		this.textArea = textArea;
+
+		setAutoscrolls(true);
+		setDoubleBuffered(true);
+		setOpaque(true);
+
+		ToolTipManager.sharedInstance().registerComponent(this);
+
+		currentLine = new Segment();
+		currentLineIndex = -1;
+
+		setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
+
+		setFont(new Font("Monospaced",Font.PLAIN,14));
+		setForeground(Color.black);
+		setBackground(Color.white);
+
+		blockCaret = defaults.blockCaret;
+		styles = defaults.styles;
+		cols = defaults.cols;
+		rows = defaults.rows;
+		caretColor = defaults.caretColor;
+		selectionColor = defaults.selectionColor;
+		lineHighlightColor = defaults.lineHighlightColor;
+		lineHighlight = defaults.lineHighlight;
+		bracketHighlightColor = defaults.bracketHighlightColor;
+		bracketHighlight = defaults.bracketHighlight;
+		paintInvalid = defaults.paintInvalid;
+		eolMarkerColor = defaults.eolMarkerColor;
+		eolMarkers = defaults.eolMarkers;
+	}
+
+	/**
+	 * Returns if this component can be traversed by pressing the
+	 * Tab key. This returns false.
+	 */
+	public final boolean isManagingFocus()
+	{
+		return false;
+	}
+
+	/**
+	 * Returns the syntax styles used to paint colorized text. Entry <i>n</i>
+	 * will be used to paint tokens with id = <i>n</i>.
+	 * @see org.gjt.sp.jedit.syntax.Token
+	 */
+	public final SyntaxStyle[] getStyles()
+	{
+		return styles;
+	}
+
+	/**
+	 * Sets the syntax styles used to paint colorized text. Entry <i>n</i>
+	 * will be used to paint tokens with id = <i>n</i>.
+	 * @param styles The syntax styles
+	 * @see org.gjt.sp.jedit.syntax.Token
+	 */
+	public final void setStyles(SyntaxStyle[] styles)
+	{
+		this.styles = styles;
+		repaint();
+	}
+
+	/**
+	 * Returns the caret color.
+	 */
+	public final Color getCaretColor()
+	{
+		return caretColor;
+	}
+
+	/**
+	 * Sets the caret color.
+	 * @param caretColor The caret color
+	 */
+	public final void setCaretColor(Color caretColor)
+	{
+		this.caretColor = caretColor;
+		invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns the selection color.
+	 */
+	public final Color getSelectionColor()
+	{
+		return selectionColor;
+	}
+
+	/**
+	 * Sets the selection color.
+	 * @param selectionColor The selection color
+	 */
+	public final void setSelectionColor(Color selectionColor)
+	{
+		this.selectionColor = selectionColor;
+		invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns the line highlight color.
+	 */
+	public final Color getLineHighlightColor()
+	{
+		return lineHighlightColor;
+	}
+
+	/**
+	 * Sets the line highlight color.
+	 * @param lineHighlightColor The line highlight color
+	 */
+	public final void setLineHighlightColor(Color lineHighlightColor)
+	{
+		this.lineHighlightColor = lineHighlightColor;
+		invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns true if line highlight is enabled, false otherwise.
+	 */
+	public final boolean isLineHighlightEnabled()
+	{
+		return lineHighlight;
+	}
+
+	/**
+	 * Enables or disables current line highlighting.
+	 * @param lineHighlight True if current line highlight should be enabled,
+	 * false otherwise
+	 */
+	public final void setLineHighlightEnabled(boolean lineHighlight)
+	{
+		this.lineHighlight = lineHighlight;
+		invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns the bracket highlight color.
+	 */
+	public final Color getBracketHighlightColor()
+	{
+		return bracketHighlightColor;
+	}
+
+	/**
+	 * Sets the bracket highlight color.
+	 * @param bracketHighlightColor The bracket highlight color
+	 */
+	public final void setBracketHighlightColor(Color bracketHighlightColor)
+	{
+		this.bracketHighlightColor = bracketHighlightColor;
+		invalidateLine(textArea.getBracketLine());
+	}
+
+	/**
+	 * Returns true if bracket highlighting is enabled, false otherwise.
+	 * When bracket highlighting is enabled, the bracket matching the
+	 * one before the caret (if any) is highlighted.
+	 */
+	public final boolean isBracketHighlightEnabled()
+	{
+		return bracketHighlight;
+	}
+
+	/**
+	 * Enables or disables bracket highlighting.
+	 * When bracket highlighting is enabled, the bracket matching the
+	 * one before the caret (if any) is highlighted.
+	 * @param bracketHighlight True if bracket highlighting should be
+	 * enabled, false otherwise
+	 */
+	public final void setBracketHighlightEnabled(boolean bracketHighlight)
+	{
+		this.bracketHighlight = bracketHighlight;
+		invalidateLine(textArea.getBracketLine());
+	}
+
+	/**
+	 * Returns true if the caret should be drawn as a block, false otherwise.
+	 */
+	public final boolean isBlockCaretEnabled()
+	{
+		return blockCaret;
+	}
+
+	/**
+	 * Sets if the caret should be drawn as a block, false otherwise.
+	 * @param blockCaret True if the caret should be drawn as a block,
+	 * false otherwise.
+	 */
+	public final void setBlockCaretEnabled(boolean blockCaret)
+	{
+		this.blockCaret = blockCaret;
+		invalidateSelectedLines();
+	}
+
+	/**
+	 * Returns the EOL marker color.
+	 */
+	public final Color getEOLMarkerColor()
+	{
+		return eolMarkerColor;
+	}
+
+	/**
+	 * Sets the EOL marker color.
+	 * @param eolMarkerColor The EOL marker color
+	 */
+	public final void setEOLMarkerColor(Color eolMarkerColor)
+	{
+		this.eolMarkerColor = eolMarkerColor;
+		repaint();
+	}
+
+	/**
+	 * Returns true if EOL markers are drawn, false otherwise.
+	 */
+	public final boolean getEOLMarkersPainted()
+	{
+		return eolMarkers;
+	}
+
+	/**
+	 * Sets if EOL markers are to be drawn.
+	 * @param eolMarkers True if EOL markers should be drawn, false otherwise
+	 */
+	public final void setEOLMarkersPainted(boolean eolMarkers)
+	{
+		this.eolMarkers = eolMarkers;
+		repaint();
+	}
+
+	/**
+	 * Returns true if invalid lines are painted as red tildes (~),
+	 * false otherwise.
+	 */
+	public boolean getInvalidLinesPainted()
+	{
+		return paintInvalid;
+	}
+
+	/**
+	 * Sets if invalid lines are to be painted as red tildes.
+	 * @param paintInvalid True if invalid lines should be drawn, false otherwise
+	 */
+	public void setInvalidLinesPainted(boolean paintInvalid)
+	{
+		this.paintInvalid = paintInvalid;
+	}
+
+	/**
+	 * Adds a custom highlight painter.
+	 * @param highlight The highlight
+	 */
+	public void addCustomHighlight(Highlight highlight)
+	{
+		highlight.init(textArea,highlights);
+		highlights = highlight;
+	}
+
+	/**
+	 * Highlight interface.
+	 */
+	public interface Highlight
+	{
+		/**
+		 * Called after the highlight painter has been added.
+		 * @param textArea The text area
+		 * @param next The painter this one should delegate to
+		 */
+		void init(JEditTextArea textArea, Highlight next);
+
+		/**
+		 * This should paint the highlight and delgate to the
+		 * next highlight painter.
+		 * @param gfx The graphics context
+		 * @param line The line number
+		 * @param y The y co-ordinate of the line
+		 */
+		void paintHighlight(Graphics gfx, int line, int y);
+
+		/**
+		 * Returns the tool tip to display at the specified
+		 * location. If this highlighter doesn't know what to
+		 * display, it should delegate to the next highlight
+		 * painter.
+		 * @param evt The mouse event
+		 */
+		String getToolTipText(MouseEvent evt);
+	}
+
+	/**
+	 * Returns the tool tip to display at the specified location.
+	 * @param evt The mouse event
+	 */
+	public String getToolTipText(MouseEvent evt)
+	{
+		if(highlights != null)
+			return highlights.getToolTipText(evt);
+		else
+			return null;
+	}
+
+	/**
+	 * Returns the font metrics used by this component.
+	 */
+	public FontMetrics getFontMetrics()
+	{
+		return fm;
+	}
+
+	/**
+	 * Sets the font for this component. This is overridden to update the
+	 * cached font metrics and to recalculate which lines are visible.
+	 * @param font The font
+	 */
+	public void setFont(Font font)
+	{
+		super.setFont(font);
+		fm = Toolkit.getDefaultToolkit().getFontMetrics(font);
+		textArea.recalculateVisibleLines();
+	}
+
+	/**
+	 * Repaints the text.
+	 * @param g The graphics context
+	 */
+	public void paint(Graphics gfx)
+	{
+		tabSize = fm.charWidth(' ') * ((Integer)textArea
+			.getDocument().getProperty(
+			PlainDocument.tabSizeAttribute)).intValue();
+
+		Rectangle clipRect = gfx.getClipBounds();
+
+		gfx.setColor(getBackground());
+		gfx.fillRect(clipRect.x,clipRect.y,clipRect.width,clipRect.height);
+
+		// We don't use yToLine() here because that method doesn't
+		// return lines past the end of the document
+		int height = fm.getHeight();
+		int firstLine = textArea.getFirstLine();
+		int firstInvalid = firstLine + clipRect.y / height;
+		// Because the clipRect's height is usually an even multiple
+		// of the font height, we subtract 1 from it, otherwise one
+		// too many lines will always be painted.
+		int lastInvalid = firstLine + (clipRect.y + clipRect.height - 1) / height;
+
+		try
+		{
+			TokenMarker tokenMarker = ((SyntaxDocument)textArea.getDocument())
+				.getTokenMarker();
+			int x = textArea.getHorizontalOffset();
+
+			for(int line = firstInvalid; line <= lastInvalid; line++)
+			{
+				paintLine(gfx,tokenMarker,line,x);
+			}
+
+			if(tokenMarker != null && tokenMarker.isNextLineRequested())
+			{
+				int h = clipRect.y + clipRect.height;
+				repaint(0,h,getWidth(),getHeight() - h);
+			}
+		}
+		catch(Exception e)
+		{
+			System.err.println("Error repainting line"
+				+ " range {" + firstInvalid + ","
+				+ lastInvalid + "}:");
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Marks a line as needing a repaint.
+	 * @param line The line to invalidate
+	 */
+	public final void invalidateLine(int line)
+	{
+		repaint(0,textArea.lineToY(line) + fm.getMaxDescent() + fm.getLeading(),
+			getWidth(),fm.getHeight());
+	}
+
+	/**
+	 * Marks a range of lines as needing a repaint.
+	 * @param firstLine The first line to invalidate
+	 * @param lastLine The last line to invalidate
+	 */
+	public final void invalidateLineRange(int firstLine, int lastLine)
+	{
+		repaint(0,textArea.lineToY(firstLine) + fm.getMaxDescent() + fm.getLeading(),
+			getWidth(),(lastLine - firstLine + 1) * fm.getHeight());
+	}
+
+	/**
+	 * Repaints the lines containing the selection.
+	 */
+	public final void invalidateSelectedLines()
+	{
+		invalidateLineRange(textArea.getSelectionStartLine(),
+			textArea.getSelectionEndLine());
+	}
+
+	/**
+	 * Implementation of TabExpander interface. Returns next tab stop after
+	 * a specified point.
+	 * @param x The x co-ordinate
+	 * @param tabOffset Ignored
+	 * @return The next tab stop after <i>x</i>
+	 */
+	public float nextTabStop(float x, int tabOffset)
+	{
+		int offset = textArea.getHorizontalOffset();
+		int ntabs = ((int)x - offset) / tabSize;
+		return (ntabs + 1) * tabSize + offset;
+	}
+
+	/**
+	 * Returns the painter's preferred size.
+	 */
+	public Dimension getPreferredSize()
+	{
+		Dimension dim = new Dimension();
+		dim.width = fm.charWidth('w') * cols;
+		dim.height = fm.getHeight() * rows;
+		return dim;
+	}
+
+
+	/**
+	 * Returns the painter's minimum size.
+	 */
+	public Dimension getMinimumSize()
+	{
+		return getPreferredSize();
+	}
+
+	// package-private members
+	int currentLineIndex;
+	Token currentLineTokens;
+	Segment currentLine;
+
+	// protected members
+	protected JEditTextArea textArea;
+
+	protected SyntaxStyle[] styles;
+	protected Color caretColor;
+	protected Color selectionColor;
+	protected Color lineHighlightColor;
+	protected Color bracketHighlightColor;
+	protected Color eolMarkerColor;
+
+	protected boolean blockCaret;
+	protected boolean lineHighlight;
+	protected boolean bracketHighlight;
+	protected boolean paintInvalid;
+	protected boolean eolMarkers;
+	protected int cols;
+	protected int rows;
+
+	protected int tabSize;
+	protected FontMetrics fm;
+
+	protected Highlight highlights;
+
+	protected void paintLine(Graphics gfx, TokenMarker tokenMarker,
+		int line, int x)
+	{
+		Font defaultFont = getFont();
+		Color defaultColor = getForeground();
+
+		currentLineIndex = line;
+		int y = textArea.lineToY(line);
+
+		if(line < 0 || line >= textArea.getLineCount())
+		{
+			if(paintInvalid)
+			{
+				paintHighlight(gfx,line,y);
+				styles[Token.INVALID].setGraphicsFlags(gfx,defaultFont);
+				gfx.drawString("~",0,y + fm.getHeight());
+			}
+		}
+		else if(tokenMarker == null)
+		{
+			paintPlainLine(gfx,line,defaultFont,defaultColor,x,y);
+		}
+		else
+		{
+			paintSyntaxLine(gfx,tokenMarker,line,defaultFont,
+				defaultColor,x,y);
+		}
+	}
+
+	protected void paintPlainLine(Graphics gfx, int line, Font defaultFont,
+		Color defaultColor, int x, int y)
+	{
+		paintHighlight(gfx,line,y);
+		textArea.getLineText(line,currentLine);
+
+		gfx.setFont(defaultFont);
+		gfx.setColor(defaultColor);
+
+		y += fm.getHeight();
+		x = Utilities.drawTabbedText(currentLine,x,y,gfx,this,0);
+
+		if(eolMarkers)
+		{
+			gfx.setColor(eolMarkerColor);
+			gfx.drawString(".",x,y);
+		}
+	}
+
+	protected void paintSyntaxLine(Graphics gfx, TokenMarker tokenMarker,
+		int line, Font defaultFont, Color defaultColor, int x, int y)
+	{
+		textArea.getLineText(currentLineIndex,currentLine);
+		currentLineTokens = tokenMarker.markTokens(currentLine,
+			currentLineIndex);
+
+		paintHighlight(gfx,line,y);
+
+		gfx.setFont(defaultFont);
+		gfx.setColor(defaultColor);
+		y += fm.getHeight();
+		x = SyntaxUtilities.paintSyntaxLine(currentLine,
+			currentLineTokens,styles,this,gfx,x,y);
+
+		if(eolMarkers)
+		{
+			gfx.setColor(eolMarkerColor);
+			gfx.drawString(".",x,y);
+		}
+	}
+
+	protected void paintHighlight(Graphics gfx, int line, int y)
+	{
+		if(line >= textArea.getSelectionStartLine()
+			&& line <= textArea.getSelectionEndLine())
+			paintLineHighlight(gfx,line,y);
+
+		if(highlights != null)
+			highlights.paintHighlight(gfx,line,y);
+
+		if(bracketHighlight && line == textArea.getBracketLine())
+			paintBracketHighlight(gfx,line,y);
+
+		if(line == textArea.getCaretLine())
+			paintCaret(gfx,line,y);
+	}
+
+	protected void paintLineHighlight(Graphics gfx, int line, int y)
+	{
+		int height = fm.getHeight();
+		y += fm.getLeading() + fm.getMaxDescent();
+
+		int selectionStart = textArea.getSelectionStart();
+		int selectionEnd = textArea.getSelectionEnd();
+
+		if(selectionStart == selectionEnd)
+		{
+			if(lineHighlight)
+			{
+				gfx.setColor(lineHighlightColor);
+				gfx.fillRect(0,y,getWidth(),height);
+			}
+		}
+		else
+		{
+			gfx.setColor(selectionColor);
+
+			int selectionStartLine = textArea.getSelectionStartLine();
+			int selectionEndLine = textArea.getSelectionEndLine();
+			int lineStart = textArea.getLineStartOffset(line);
+
+			int x1, x2;
+			if(textArea.isSelectionRectangular())
+			{
+				int lineLen = textArea.getLineLength(line);
+				x1 = textArea._offsetToX(line,Math.min(lineLen,
+					selectionStart - textArea.getLineStartOffset(
+					selectionStartLine)));
+				x2 = textArea._offsetToX(line,Math.min(lineLen,
+					selectionEnd - textArea.getLineStartOffset(
+					selectionEndLine)));
+				if(x1 == x2)
+					x2++;
+			}
+			else if(selectionStartLine == selectionEndLine)
+			{
+				x1 = textArea._offsetToX(line,
+					selectionStart - lineStart);
+				x2 = textArea._offsetToX(line,
+					selectionEnd - lineStart);
+			}
+			else if(line == selectionStartLine)
+			{
+				x1 = textArea._offsetToX(line,
+					selectionStart - lineStart);
+				x2 = getWidth();
+			}
+			else if(line == selectionEndLine)
+			{
+				x1 = 0;
+				x2 = textArea._offsetToX(line,
+					selectionEnd - lineStart);
+			}
+			else
+			{
+				x1 = 0;
+				x2 = getWidth();
+			}
+
+			// "inlined" min/max()
+			gfx.fillRect(x1 > x2 ? x2 : x1,y,x1 > x2 ?
+				(x1 - x2) : (x2 - x1),height);
+		}
+
+	}
+
+	protected void paintBracketHighlight(Graphics gfx, int line, int y)
+	{
+		int position = textArea.getBracketPosition();
+		if(position == -1)
+			return;
+		y += fm.getLeading() + fm.getMaxDescent();
+		int x = textArea._offsetToX(line,position);
+		gfx.setColor(bracketHighlightColor);
+		// Hack!!! Since there is no fast way to get the character
+		// from the bracket matching routine, we use ( since all
+		// brackets probably have the same width anyway
+		gfx.drawRect(x,y,fm.charWidth('(') - 1,
+			fm.getHeight() - 1);
+	}
+
+	protected void paintCaret(Graphics gfx, int line, int y)
+	{
+		if(textArea.isCaretVisible())
+		{
+			int offset = textArea.getCaretPosition()
+				- textArea.getLineStartOffset(line);
+			int caretX = textArea._offsetToX(line,offset);
+			int caretWidth = ((blockCaret ||
+				textArea.isOverwriteEnabled()) ?
+				fm.charWidth('w') : 1);
+			y += fm.getLeading() + fm.getMaxDescent();
+			int height = fm.getHeight();
+
+			gfx.setColor(caretColor);
+
+			if(textArea.isOverwriteEnabled())
+			{
+				gfx.fillRect(caretX,y + height - 1,
+					caretWidth,1);
+			}
+			else
+			{
+				gfx.drawRect(caretX,y,caretWidth - 1,height - 1);
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaPainter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/DefaultInputHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/DefaultInputHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/DefaultInputHandler.java	(revision 42196)
@@ -0,0 +1,373 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * DefaultInputHandler.java - Default implementation of an input handler
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import java.awt.Toolkit;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import javax.swing.KeyStroke;
+
+/**
+ * The default input handler. It maps sequences of keystrokes into actions
+ * and inserts key typed events into the text area.
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class DefaultInputHandler extends InputHandler
+{
+	/**
+	 * Creates a new input handler with no key bindings defined.
+	 */
+	public DefaultInputHandler()
+	{
+		bindings = currentBindings = new Hashtable();
+	}
+
+	/**
+	 * Sets up the default key bindings.
+	 */
+	public void addDefaultKeyBindings()
+	{
+		addKeyBinding("BACK_SPACE",BACKSPACE);
+		addKeyBinding("C+BACK_SPACE",BACKSPACE_WORD);
+		addKeyBinding("DELETE",DELETE);
+		addKeyBinding("C+DELETE",DELETE_WORD);
+
+		addKeyBinding("ENTER",INSERT_BREAK);
+		addKeyBinding("TAB",INSERT_TAB);
+
+		addKeyBinding("INSERT",OVERWRITE);
+		addKeyBinding("C+\\",TOGGLE_RECT);
+
+		addKeyBinding("HOME",HOME);
+		addKeyBinding("END",END);
+		addKeyBinding("S+HOME",SELECT_HOME);
+		addKeyBinding("S+END",SELECT_END);
+		addKeyBinding("C+HOME",DOCUMENT_HOME);
+		addKeyBinding("C+END",DOCUMENT_END);
+		addKeyBinding("CS+HOME",SELECT_DOC_HOME);
+		addKeyBinding("CS+END",SELECT_DOC_END);
+
+		addKeyBinding("PAGE_UP",PREV_PAGE);
+		addKeyBinding("PAGE_DOWN",NEXT_PAGE);
+		addKeyBinding("S+PAGE_UP",SELECT_PREV_PAGE);
+		addKeyBinding("S+PAGE_DOWN",SELECT_NEXT_PAGE);
+
+		addKeyBinding("LEFT",PREV_CHAR);
+		addKeyBinding("S+LEFT",SELECT_PREV_CHAR);
+		addKeyBinding("C+LEFT",PREV_WORD);
+		addKeyBinding("CS+LEFT",SELECT_PREV_WORD);
+		addKeyBinding("RIGHT",NEXT_CHAR);
+		addKeyBinding("S+RIGHT",SELECT_NEXT_CHAR);
+		addKeyBinding("C+RIGHT",NEXT_WORD);
+		addKeyBinding("CS+RIGHT",SELECT_NEXT_WORD);
+		addKeyBinding("UP",PREV_LINE);
+		addKeyBinding("S+UP",SELECT_PREV_LINE);
+		addKeyBinding("DOWN",NEXT_LINE);
+		addKeyBinding("S+DOWN",SELECT_NEXT_LINE);
+
+		addKeyBinding("C+ENTER",REPEAT);
+	}
+
+	/**
+	 * Adds a key binding to this input handler. The key binding is
+	 * a list of white space separated key strokes of the form
+	 * <i>[modifiers+]key</i> where modifier is C for Control, A for Alt,
+	 * or S for Shift, and key is either a character (a-z) or a field
+	 * name in the KeyEvent class prefixed with VK_ (e.g., BACK_SPACE)
+	 * @param keyBinding The key binding
+	 * @param action The action
+	 */
+	public void addKeyBinding(String keyBinding, ActionListener action)
+	{
+	        Hashtable current = bindings;
+
+		StringTokenizer st = new StringTokenizer(keyBinding);
+		while(st.hasMoreTokens())
+		{
+			KeyStroke keyStroke = parseKeyStroke(st.nextToken());
+			if(keyStroke == null)
+				return;
+
+			if(st.hasMoreTokens())
+			{
+				Object o = current.get(keyStroke);
+				if(o instanceof Hashtable)
+					current = (Hashtable)o;
+				else
+				{
+					o = new Hashtable();
+					current.put(keyStroke,o);
+					current = (Hashtable)o;
+				}
+			}
+			else
+				current.put(keyStroke,action);
+		}
+	}
+
+	/**
+	 * Removes a key binding from this input handler. This is not yet
+	 * implemented.
+	 * @param keyBinding The key binding
+	 */
+	public void removeKeyBinding(String keyBinding)
+	{
+		throw new InternalError("Not yet implemented");
+	}
+
+	/**
+	 * Removes all key bindings from this input handler.
+	 */
+	public void removeAllKeyBindings()
+	{
+		bindings.clear();
+	}
+
+	/**
+	 * Returns a copy of this input handler that shares the same
+	 * key bindings. Setting key bindings in the copy will also
+	 * set them in the original.
+	 */
+	public InputHandler copy()
+	{
+		return new DefaultInputHandler(this);
+	}
+
+	/**
+	 * Handle a key pressed event. This will look up the binding for
+	 * the key stroke and execute it.
+	 */
+	public void keyPressed(KeyEvent evt)
+	{
+		int keyCode = evt.getKeyCode();
+		int modifiers = evt.getModifiers();
+
+		if(keyCode == KeyEvent.VK_CONTROL ||
+			keyCode == KeyEvent.VK_SHIFT ||
+			keyCode == KeyEvent.VK_ALT ||
+			keyCode == KeyEvent.VK_META)
+			return;
+
+		if((modifiers & ~KeyEvent.SHIFT_MASK) != 0
+			|| evt.isActionKey()
+			|| keyCode == KeyEvent.VK_BACK_SPACE
+			|| keyCode == KeyEvent.VK_DELETE
+			|| keyCode == KeyEvent.VK_ENTER
+			|| keyCode == KeyEvent.VK_TAB
+			|| keyCode == KeyEvent.VK_ESCAPE)
+		{
+			if(grabAction != null)
+			{
+				handleGrabAction(evt);
+				return;
+			}
+
+			KeyStroke keyStroke = KeyStroke.getKeyStroke(keyCode,
+				modifiers);
+			Object o = currentBindings.get(keyStroke);
+			if(o == null)
+			{
+				// Don't beep if the user presses some
+				// key we don't know about unless a
+				// prefix is active. Otherwise it will
+				// beep when caps lock is pressed, etc.
+				if(currentBindings != bindings)
+				{
+					Toolkit.getDefaultToolkit().beep();
+					// F10 should be passed on, but C+e F10
+					// shouldn't
+					repeatCount = 0;
+					repeat = false;
+					evt.consume();
+				}
+				currentBindings = bindings;
+				return;
+			}
+			else if(o instanceof ActionListener)
+			{
+				currentBindings = bindings;
+
+				executeAction(((ActionListener)o),
+					evt.getSource(),null);
+
+				evt.consume();
+				return;
+			}
+			else if(o instanceof Hashtable)
+			{
+				currentBindings = (Hashtable)o;
+				evt.consume();
+				return;
+			}
+		}
+	}
+
+	/**
+	 * Handle a key typed event. This inserts the key into the text area.
+	 */
+	public void keyTyped(KeyEvent evt)
+	{
+		int modifiers = evt.getModifiers();
+		char c = evt.getKeyChar();
+		if(c != KeyEvent.CHAR_UNDEFINED &&
+			(modifiers & KeyEvent.ALT_MASK) == 0)
+		{
+			if(c >= 0x20 && c != 0x7f)
+			{
+				KeyStroke keyStroke = KeyStroke.getKeyStroke(
+					Character.toUpperCase(c));
+				Object o = currentBindings.get(keyStroke);
+
+				if(o instanceof Hashtable)
+				{
+					currentBindings = (Hashtable)o;
+					return;
+				}
+				else if(o instanceof ActionListener)
+				{
+					currentBindings = bindings;
+					executeAction((ActionListener)o,
+						evt.getSource(),
+						String.valueOf(c));
+					return;
+				}
+
+				currentBindings = bindings;
+
+				if(grabAction != null)
+				{
+					handleGrabAction(evt);
+					return;
+				}
+
+				// 0-9 adds another 'digit' to the repeat number
+				if(repeat && Character.isDigit(c))
+				{
+					repeatCount *= 10;
+					repeatCount += (c - '0');
+					return;
+				}
+
+				executeAction(INSERT_CHAR,evt.getSource(),
+					String.valueOf(evt.getKeyChar()));
+
+				repeatCount = 0;
+				repeat = false;
+			}
+		}
+	}
+
+	/**
+	 * Converts a string to a keystroke. The string should be of the
+	 * form <i>modifiers</i>+<i>shortcut</i> where <i>modifiers</i>
+	 * is any combination of A for Alt, C for Control, S for Shift
+	 * or M for Meta, and <i>shortcut</i> is either a single character,
+	 * or a keycode name from the <code>KeyEvent</code> class, without
+	 * the <code>VK_</code> prefix.
+	 * @param keyStroke A string description of the key stroke
+	 */
+	public static KeyStroke parseKeyStroke(String keyStroke)
+	{
+		if(keyStroke == null)
+			return null;
+		int modifiers = 0;
+		int index = keyStroke.indexOf('+');
+		if(index != -1)
+		{
+			for(int i = 0; i < index; i++)
+			{
+				switch(Character.toUpperCase(keyStroke
+					.charAt(i)))
+				{
+				case 'A':
+					modifiers |= InputEvent.ALT_MASK;
+					break;
+				case 'C':
+					modifiers |= InputEvent.CTRL_MASK;
+					break;
+				case 'M':
+					modifiers |= InputEvent.META_MASK;
+					break;
+				case 'S':
+					modifiers |= InputEvent.SHIFT_MASK;
+					break;
+				}
+			}
+		}
+		String key = keyStroke.substring(index + 1);
+		if(key.length() == 1)
+		{
+			char ch = Character.toUpperCase(key.charAt(0));
+			if(modifiers == 0)
+				return KeyStroke.getKeyStroke(ch);
+			else
+				return KeyStroke.getKeyStroke(ch,modifiers);
+		}
+		else if(key.length() == 0)
+		{
+			System.err.println("Invalid key stroke: " + keyStroke);
+			return null;
+		}
+		else
+		{
+			int ch;
+
+			try
+			{
+				ch = KeyEvent.class.getField("VK_".concat(key))
+					.getInt(null);
+			}
+			catch(Exception e)
+			{
+				System.err.println("Invalid key stroke: "
+					+ keyStroke);
+				return null;
+			}
+
+			return KeyStroke.getKeyStroke(ch,modifiers);
+		}
+	}
+
+	// private members
+	private Hashtable bindings;
+	private Hashtable currentBindings;
+
+	private DefaultInputHandler(DefaultInputHandler copy)
+	{
+		bindings = currentBindings = copy.bindings;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/DefaultInputHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PatchTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PatchTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PatchTokenMarker.java	(revision 42196)
@@ -0,0 +1,70 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * PatchTokenMarker.java - DIFF patch token marker
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Patch/diff token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class PatchTokenMarker extends TokenMarker
+{
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		if(line.count == 0)
+			return Token.NULL;
+		switch(line.array[line.offset])
+		{
+		case '+': case '>':
+			addToken(line.count,Token.KEYWORD1);
+			break;
+		case '-': case '<':
+			addToken(line.count,Token.KEYWORD2);
+			break;
+		case '@': case '*':
+			addToken(line.count,Token.KEYWORD3);
+			break;
+	        default:
+			addToken(line.count,Token.NULL);
+			break;
+		}
+		return Token.NULL;
+	}
+
+	public boolean supportsMultilineTokens()
+	{
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PatchTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TeXTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TeXTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TeXTokenMarker.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * TeXTokenMarker.java - TeX/LaTeX/AMS-TeX token marker
+ * Copyright (C) 1998 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * TeX token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class TeXTokenMarker extends TokenMarker
+{
+	// public members
+	public static final byte BDFORMULA = Token.INTERNAL_FIRST;
+	public static final byte EDFORMULA = (byte)(Token.INTERNAL_FIRST + 1);
+	
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		int lastOffset = offset;
+		int length = line.count + offset;
+		boolean backslash = false;
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			// if a backslash is followed immediately
+			// by a non-alpha character, the command at
+			// the non-alpha char. If we have a backslash,
+			// some text, and then a non-alpha char,
+			// the command ends before the non-alpha char.
+			if(Character.isLetter(c))
+			{
+				backslash = false;
+			}
+			else
+			{
+				if(backslash)
+				{
+					// \<non alpha>
+					// we skip over this character,
+					// hence the `continue'
+					backslash = false;
+					if(token == Token.KEYWORD2 || token == EDFORMULA)
+						token = Token.KEYWORD2;
+					addToken(i1 - lastOffset,token);
+					lastOffset = i1;
+					if(token == Token.KEYWORD1)
+						token = Token.NULL;
+					continue;
+				}
+				else
+				{
+					//\blah<non alpha>
+					// we leave the character in
+					// the stream, and it's not
+					// part of the command token
+					if(token == BDFORMULA || token == EDFORMULA)
+						token = Token.KEYWORD2;
+					addToken(i - lastOffset,token);
+					if(token == Token.KEYWORD1)
+						token = Token.NULL;
+					lastOffset = i;
+				}
+			}
+			switch(c)
+			{
+			case '%':
+				if(backslash)
+				{
+					backslash = false;
+					break;
+				}
+				addToken(i - lastOffset,token);
+				addToken(length - i,Token.COMMENT1);
+				lastOffset = length;
+				break loop;
+			case '\\':
+				backslash = true;
+				if(token == Token.NULL)
+				{
+					token = Token.KEYWORD1;
+					addToken(i - lastOffset,Token.NULL);
+					lastOffset = i;
+				}
+				break;
+			case '$':
+				backslash = false;
+				if(token == Token.NULL) // singe $
+				{
+					token = Token.KEYWORD2;
+					addToken(i - lastOffset,Token.NULL);
+					lastOffset = i;
+				}
+				else if(token == Token.KEYWORD1) // \...$
+				{
+					token = Token.KEYWORD2;
+					addToken(i - lastOffset,Token.KEYWORD1);
+					lastOffset = i;
+				}
+				else if(token == Token.KEYWORD2) // $$aaa
+				{
+					if(i - lastOffset == 1 && array[i-1] == '$')
+					{
+						token = BDFORMULA;
+						break;
+					}
+					token = Token.NULL;
+					addToken(i1 - lastOffset,Token.KEYWORD2);
+					lastOffset = i1;
+				}
+				else if(token == BDFORMULA) // $$aaa$
+				{
+					token = EDFORMULA;
+				}
+				else if(token == EDFORMULA) // $$aaa$$
+				{
+					token = Token.NULL;
+					addToken(i1 - lastOffset,Token.KEYWORD2);
+					lastOffset = i1;
+				}
+				break;
+			}
+		}
+		if(lastOffset != length)
+			addToken(length - lastOffset,token == BDFORMULA
+				|| token == EDFORMULA ? Token.KEYWORD2 :
+				token);
+		return (token != Token.KEYWORD1 ? token : Token.NULL);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TeXTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PerlTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PerlTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PerlTokenMarker.java	(revision 42196)
@@ -0,0 +1,736 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * PerlTokenMarker.java - Perl token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Perl token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class PerlTokenMarker extends TokenMarker
+{
+	// public members
+	public static final byte S_ONE = Token.INTERNAL_FIRST;
+	public static final byte S_TWO = (byte)(Token.INTERNAL_FIRST + 1);
+	public static final byte S_END = (byte)(Token.INTERNAL_FIRST + 2);
+
+	public PerlTokenMarker()
+	{
+		this(getKeywords());
+	}
+
+	public PerlTokenMarker(KeywordMap keywords)
+	{
+		this.keywords = keywords;
+	}
+
+	public byte markTokensImpl(byte _token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		token = _token;
+		lastOffset = offset;
+		lastKeyword = offset;
+		matchChar = '\0';
+		matchCharBracket = false;
+		matchSpacesAllowed = false;
+		int length = line.count + offset;
+
+		if(token == Token.LITERAL1 && lineIndex != 0
+			&& lineInfo[lineIndex - 1].obj != null)
+		{
+			String str = (String)lineInfo[lineIndex - 1].obj;
+			if(str != null && str.length() == line.count
+				&& SyntaxUtilities.regionMatches(false,line,
+				offset,str))
+			{
+				addToken(line.count,token);
+				return Token.NULL;
+			}
+			else
+			{
+				addToken(line.count,token);
+				lineInfo[lineIndex].obj = str;
+				return token;
+			}
+		}
+
+		boolean backslash = false;
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			if(c == '\\')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(c)
+				{
+				case '#':
+					if(doKeyword(line,i,c))
+						break;
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						addToken(length - i,Token.COMMENT1);
+						lastOffset = lastKeyword = length;
+						break loop;
+					}
+					break;
+				case '=':
+					backslash = false;
+					if(i == offset)
+					{
+						token = Token.COMMENT2;
+						addToken(length - i,token);
+						lastOffset = lastKeyword = length;
+						break loop;
+					}
+					else
+						doKeyword(line,i,c);
+					break;
+				case '$': case '&': case '%': case '@':
+					backslash = false;
+					if(doKeyword(line,i,c))
+						break;
+					if(length - i > 1)
+					{
+						if(c == '&' && (array[i1] == '&'
+							|| Character.isWhitespace(
+							array[i1])))
+							i++;
+						else
+						{
+							addToken(i - lastOffset,token);
+							lastOffset = lastKeyword = i;
+							token = Token.KEYWORD2;
+						}
+					}
+					break;
+				case '"':
+					if(doKeyword(line,i,c))
+						break;
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL1;
+						lineInfo[lineIndex].obj = null;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case '\'':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						int oldLastKeyword = lastKeyword;
+						if(doKeyword(line,i,c))
+							break;
+						if(i != oldLastKeyword)
+							break;
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL2;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case '`':
+					if(doKeyword(line,i,c))
+						break;
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.OPERATOR;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				case '<':
+					if(doKeyword(line,i,c))
+						break;
+					if(backslash)
+						backslash = false;
+					else
+					{
+						if(length - i > 2 && array[i1] == '<'
+							&& !Character.isWhitespace(array[i+2]))
+						{
+							addToken(i - lastOffset,token);
+							lastOffset = lastKeyword = i;
+							token = Token.LITERAL1;
+							int len = length - (i+2);
+							if(array[length - 1] == ';')
+								len--;
+							lineInfo[lineIndex].obj =
+								createReadinString(array,i + 2,len);
+						}
+					}
+					break;
+				case ':':
+					backslash = false;
+					if(doKeyword(line,i,c))
+						break;
+					// Doesn't pick up all labels,
+					// but at least doesn't mess up
+					// XXX::YYY
+					if(lastKeyword != 0)
+						break;
+					addToken(i1 - lastOffset,Token.LABEL);
+					lastOffset = lastKeyword = i1;
+					break;
+				case '-':
+					backslash = false;
+					if(doKeyword(line,i,c))
+						break;
+					if(i != lastKeyword || length - i <= 1)
+						break;
+					switch(array[i1])
+					{
+					case 'r': case 'w': case 'x':
+					case 'o': case 'R': case 'W':
+					case 'X': case 'O': case 'e':
+					case 'z': case 's': case 'f':
+					case 'd': case 'l': case 'p':
+					case 'S': case 'b': case 'c':
+					case 't': case 'u': case 'g':
+					case 'k': case 'T': case 'B':
+					case 'M': case 'A': case 'C':
+						addToken(i - lastOffset,token);
+						addToken(2,Token.KEYWORD3);
+						lastOffset = lastKeyword = i+2;
+						i++;
+					}
+					break;
+				case '/': case '?':
+					if(doKeyword(line,i,c))
+						break;
+					if(length - i > 1)
+					{
+						backslash = false;
+						char ch = array[i1];
+						if(Character.isWhitespace(ch))
+							break;
+						matchChar = c;
+						matchSpacesAllowed = false;
+						addToken(i - lastOffset,token);
+						token = S_ONE;
+						lastOffset = lastKeyword = i;
+					}
+					break;
+				default:
+					backslash = false;
+					if(!Character.isLetterOrDigit(c)
+						&& c != '_')
+						doKeyword(line,i,c);
+					break;
+				}
+				break;
+			case Token.KEYWORD2:
+				backslash = false;
+				// This test checks for an end-of-variable
+				// condition
+				if(!Character.isLetterOrDigit(c) && c != '_'
+					&& c != '#' && c != '\'' && c != ':'
+					&& c != '&')
+				{
+					// If this is the first character
+					// of the variable name ($'aaa)
+					// ignore it
+					if(i != offset && array[i-1] == '$')
+					{
+						addToken(i1 - lastOffset,token);
+						lastOffset = lastKeyword = i1;
+					}
+					// Otherwise, end of variable...
+					else
+					{
+						addToken(i - lastOffset,token);
+						lastOffset = lastKeyword = i;
+						// Wind back so that stuff
+						// like $hello$fred is picked
+						// up
+						i--;
+						token = Token.NULL;
+					}
+				}
+				break;
+			case S_ONE: case S_TWO:
+				if(backslash)
+					backslash = false;
+				else
+				{
+					if(matchChar == '\0')
+					{
+						if(Character.isWhitespace(matchChar)
+							&& !matchSpacesAllowed)
+							break;
+						else
+							matchChar = c;
+					}
+					else
+					{
+						switch(matchChar)
+						{
+						case '(':
+							matchChar = ')';
+							matchCharBracket = true;
+							break;
+						case '[':
+							matchChar = ']';
+							matchCharBracket = true;
+							break;
+						case '{':
+							matchChar = '}';
+							matchCharBracket = true;
+							break;
+						case '<':
+							matchChar = '>';
+							matchCharBracket = true;
+							break;
+						default:
+							matchCharBracket = false;
+							break;
+						}
+						if(c != matchChar)
+							break;
+						if(token == S_TWO)
+						{
+							token = S_ONE;
+							if(matchCharBracket)
+								matchChar = '\0';
+						}
+						else
+						{
+							token = S_END;
+							addToken(i1 - lastOffset,
+								Token.LITERAL2);
+							lastOffset = lastKeyword = i1;
+						}
+					}
+				}
+				break;
+			case S_END:
+				backslash = false;
+				if(!Character.isLetterOrDigit(c)
+					&& c != '_')
+					doKeyword(line,i,c);
+				break;
+			case Token.COMMENT2:
+				backslash = false;
+				if(i == offset)
+				{
+					addToken(line.count,token);
+					if(length - i > 3 && SyntaxUtilities
+						.regionMatches(false,line,offset,"=cut"))
+						token = Token.NULL;
+					lastOffset = lastKeyword = length;
+					break loop;
+				}
+				break;
+			case Token.LITERAL1:
+				if(backslash)
+					backslash = false;
+				/* else if(c == '$')
+					backslash = true; */
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			case Token.LITERAL2:
+				if(backslash)
+					backslash = false;
+				/* else if(c == '$')
+					backslash = true; */
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			case Token.OPERATOR:
+				if(backslash)
+					backslash = false;
+				else if(c == '`')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = lastKeyword = i1;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: "
+					+ token);
+			}
+		}
+
+		if(token == Token.NULL)
+			doKeyword(line,length,'\0');
+
+		switch(token)
+		{
+		case Token.KEYWORD2:
+			addToken(length - lastOffset,token);
+			token = Token.NULL;
+			break;
+		case Token.LITERAL2:
+			addToken(length - lastOffset,Token.LITERAL1);
+			break;
+		case S_END:
+			addToken(length - lastOffset,Token.LITERAL2);
+			token = Token.NULL;
+			break;
+		case S_ONE: case S_TWO:
+			addToken(length - lastOffset,Token.INVALID); // XXX
+			token = Token.NULL;
+			break;
+		default:
+			addToken(length - lastOffset,token);
+			break;
+		}
+		return token;
+	}
+
+	// private members
+	private KeywordMap keywords;
+	private byte token;
+	private int lastOffset;
+	private int lastKeyword;
+	private char matchChar;
+	private boolean matchCharBracket;
+	private boolean matchSpacesAllowed;
+
+	private boolean doKeyword(Segment line, int i, char c)
+	{
+		int i1 = i+1;
+
+		if(token == S_END)
+		{
+			addToken(i - lastOffset,Token.LITERAL2);
+			token = Token.NULL;
+			lastOffset = i;
+			lastKeyword = i1;
+			return false;
+		}
+
+		int len = i - lastKeyword;
+		byte id = keywords.lookup(line,lastKeyword,len);
+		if(id == S_ONE || id == S_TWO)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.NULL);
+			addToken(len,Token.LITERAL2);
+			lastOffset = i;
+			lastKeyword = i1;
+			if(Character.isWhitespace(c))
+				matchChar = '\0';
+			else
+				matchChar = c;
+			matchSpacesAllowed = true;
+			token = id;
+			return true;
+		}
+		else if(id != Token.NULL)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.NULL);
+			addToken(len,id);
+			lastOffset = i;
+		}
+		lastKeyword = i1;
+		return false;
+	}
+
+	// Converts < EOF >, < 'EOF' >, etc to <EOF>
+	private String createReadinString(char[] array, int start, int len)
+	{
+		int idx1 = start;
+		int idx2 = start + len - 1;
+
+		while((idx1 <= idx2) && (!Character.isLetterOrDigit(array[idx1])))
+			idx1++;
+
+		while((idx1 <= idx2) && (!Character.isLetterOrDigit(array[idx2])))
+			idx2--;
+
+		return new String(array, idx1, idx2 - idx1 + 1);
+	}
+
+	private static KeywordMap perlKeywords;
+
+	private static KeywordMap getKeywords()
+	{
+		if(perlKeywords == null)
+		{
+			perlKeywords = new KeywordMap(false);
+			perlKeywords.add("my",Token.KEYWORD1);
+			perlKeywords.add("local",Token.KEYWORD1);
+			perlKeywords.add("new",Token.KEYWORD1);
+			perlKeywords.add("if",Token.KEYWORD1);
+			perlKeywords.add("until",Token.KEYWORD1);
+			perlKeywords.add("while",Token.KEYWORD1);
+			perlKeywords.add("elsif",Token.KEYWORD1);
+			perlKeywords.add("else",Token.KEYWORD1);
+			perlKeywords.add("eval",Token.KEYWORD1);
+			perlKeywords.add("unless",Token.KEYWORD1);
+			perlKeywords.add("foreach",Token.KEYWORD1);
+			perlKeywords.add("continue",Token.KEYWORD1);
+			perlKeywords.add("exit",Token.KEYWORD1);
+			perlKeywords.add("die",Token.KEYWORD1);
+			perlKeywords.add("last",Token.KEYWORD1);
+			perlKeywords.add("goto",Token.KEYWORD1);
+			perlKeywords.add("next",Token.KEYWORD1);
+			perlKeywords.add("redo",Token.KEYWORD1);
+			perlKeywords.add("goto",Token.KEYWORD1);
+			perlKeywords.add("return",Token.KEYWORD1);
+			perlKeywords.add("do",Token.KEYWORD1);
+			perlKeywords.add("sub",Token.KEYWORD1);
+			perlKeywords.add("use",Token.KEYWORD1);
+			perlKeywords.add("require",Token.KEYWORD1);
+			perlKeywords.add("package",Token.KEYWORD1);
+			perlKeywords.add("BEGIN",Token.KEYWORD1);
+			perlKeywords.add("END",Token.KEYWORD1);
+			perlKeywords.add("eq",Token.OPERATOR);
+			perlKeywords.add("ne",Token.OPERATOR);
+			perlKeywords.add("not",Token.OPERATOR);
+			perlKeywords.add("and",Token.OPERATOR);
+			perlKeywords.add("or",Token.OPERATOR);
+
+			perlKeywords.add("abs",Token.KEYWORD3);
+			perlKeywords.add("accept",Token.KEYWORD3);
+			perlKeywords.add("alarm",Token.KEYWORD3);
+			perlKeywords.add("atan2",Token.KEYWORD3);
+			perlKeywords.add("bind",Token.KEYWORD3);
+			perlKeywords.add("binmode",Token.KEYWORD3);
+			perlKeywords.add("bless",Token.KEYWORD3);
+			perlKeywords.add("caller",Token.KEYWORD3);
+			perlKeywords.add("chdir",Token.KEYWORD3);
+			perlKeywords.add("chmod",Token.KEYWORD3);
+			perlKeywords.add("chomp",Token.KEYWORD3);
+			perlKeywords.add("chr",Token.KEYWORD3);
+			perlKeywords.add("chroot",Token.KEYWORD3);
+			perlKeywords.add("chown",Token.KEYWORD3);
+			perlKeywords.add("closedir",Token.KEYWORD3);
+			perlKeywords.add("close",Token.KEYWORD3);
+			perlKeywords.add("connect",Token.KEYWORD3);
+			perlKeywords.add("cos",Token.KEYWORD3);
+			perlKeywords.add("crypt",Token.KEYWORD3);
+			perlKeywords.add("dbmclose",Token.KEYWORD3);
+			perlKeywords.add("dbmopen",Token.KEYWORD3);
+			perlKeywords.add("defined",Token.KEYWORD3);
+			perlKeywords.add("delete",Token.KEYWORD3);
+			perlKeywords.add("die",Token.KEYWORD3);
+			perlKeywords.add("dump",Token.KEYWORD3);
+			perlKeywords.add("each",Token.KEYWORD3);
+			perlKeywords.add("endgrent",Token.KEYWORD3);
+			perlKeywords.add("endhostent",Token.KEYWORD3);
+			perlKeywords.add("endnetent",Token.KEYWORD3);
+			perlKeywords.add("endprotoent",Token.KEYWORD3);
+			perlKeywords.add("endpwent",Token.KEYWORD3);
+			perlKeywords.add("endservent",Token.KEYWORD3);
+			perlKeywords.add("eof",Token.KEYWORD3);
+			perlKeywords.add("exec",Token.KEYWORD3);
+			perlKeywords.add("exists",Token.KEYWORD3);
+			perlKeywords.add("exp",Token.KEYWORD3);
+			perlKeywords.add("fctnl",Token.KEYWORD3);
+			perlKeywords.add("fileno",Token.KEYWORD3);
+			perlKeywords.add("flock",Token.KEYWORD3);
+			perlKeywords.add("fork",Token.KEYWORD3);
+			perlKeywords.add("format",Token.KEYWORD3);
+			perlKeywords.add("formline",Token.KEYWORD3);
+			perlKeywords.add("getc",Token.KEYWORD3);
+			perlKeywords.add("getgrent",Token.KEYWORD3);
+			perlKeywords.add("getgrgid",Token.KEYWORD3);
+			perlKeywords.add("getgrnam",Token.KEYWORD3);
+			perlKeywords.add("gethostbyaddr",Token.KEYWORD3);
+			perlKeywords.add("gethostbyname",Token.KEYWORD3);
+			perlKeywords.add("gethostent",Token.KEYWORD3);
+			perlKeywords.add("getlogin",Token.KEYWORD3);
+			perlKeywords.add("getnetbyaddr",Token.KEYWORD3);
+			perlKeywords.add("getnetbyname",Token.KEYWORD3);
+			perlKeywords.add("getnetent",Token.KEYWORD3);
+			perlKeywords.add("getpeername",Token.KEYWORD3);
+			perlKeywords.add("getpgrp",Token.KEYWORD3);
+			perlKeywords.add("getppid",Token.KEYWORD3);
+			perlKeywords.add("getpriority",Token.KEYWORD3);
+			perlKeywords.add("getprotobyname",Token.KEYWORD3);
+			perlKeywords.add("getprotobynumber",Token.KEYWORD3);
+			perlKeywords.add("getprotoent",Token.KEYWORD3);
+			perlKeywords.add("getpwent",Token.KEYWORD3);
+			perlKeywords.add("getpwnam",Token.KEYWORD3);
+			perlKeywords.add("getpwuid",Token.KEYWORD3);
+			perlKeywords.add("getservbyname",Token.KEYWORD3);
+			perlKeywords.add("getservbyport",Token.KEYWORD3);
+			perlKeywords.add("getservent",Token.KEYWORD3);
+			perlKeywords.add("getsockname",Token.KEYWORD3);
+			perlKeywords.add("getsockopt",Token.KEYWORD3);
+			perlKeywords.add("glob",Token.KEYWORD3);
+			perlKeywords.add("gmtime",Token.KEYWORD3);
+			perlKeywords.add("grep",Token.KEYWORD3);
+			perlKeywords.add("hex",Token.KEYWORD3);
+			perlKeywords.add("import",Token.KEYWORD3);
+			perlKeywords.add("index",Token.KEYWORD3);
+			perlKeywords.add("int",Token.KEYWORD3);
+			perlKeywords.add("ioctl",Token.KEYWORD3);
+			perlKeywords.add("join",Token.KEYWORD3);
+			perlKeywords.add("keys",Token.KEYWORD3);
+			perlKeywords.add("kill",Token.KEYWORD3);
+			perlKeywords.add("lcfirst",Token.KEYWORD3);
+			perlKeywords.add("lc",Token.KEYWORD3);
+			perlKeywords.add("length",Token.KEYWORD3);
+			perlKeywords.add("link",Token.KEYWORD3);
+			perlKeywords.add("listen",Token.KEYWORD3);
+			perlKeywords.add("log",Token.KEYWORD3);
+			perlKeywords.add("localtime",Token.KEYWORD3);
+			perlKeywords.add("lstat",Token.KEYWORD3);
+			perlKeywords.add("map",Token.KEYWORD3);
+			perlKeywords.add("mkdir",Token.KEYWORD3);
+			perlKeywords.add("msgctl",Token.KEYWORD3);
+			perlKeywords.add("msgget",Token.KEYWORD3);
+			perlKeywords.add("msgrcv",Token.KEYWORD3);
+			perlKeywords.add("no",Token.KEYWORD3);
+			perlKeywords.add("oct",Token.KEYWORD3);
+			perlKeywords.add("opendir",Token.KEYWORD3);
+			perlKeywords.add("open",Token.KEYWORD3);
+			perlKeywords.add("ord",Token.KEYWORD3);
+			perlKeywords.add("pack",Token.KEYWORD3);
+			perlKeywords.add("pipe",Token.KEYWORD3);
+			perlKeywords.add("pop",Token.KEYWORD3);
+			perlKeywords.add("pos",Token.KEYWORD3);
+			perlKeywords.add("printf",Token.KEYWORD3);
+			perlKeywords.add("print",Token.KEYWORD3);
+			perlKeywords.add("push",Token.KEYWORD3);
+			perlKeywords.add("quotemeta",Token.KEYWORD3);
+			perlKeywords.add("rand",Token.KEYWORD3);
+			perlKeywords.add("readdir",Token.KEYWORD3);
+			perlKeywords.add("read",Token.KEYWORD3);
+			perlKeywords.add("readlink",Token.KEYWORD3);
+			perlKeywords.add("recv",Token.KEYWORD3);
+			perlKeywords.add("ref",Token.KEYWORD3);
+			perlKeywords.add("rename",Token.KEYWORD3);
+			perlKeywords.add("reset",Token.KEYWORD3);
+			perlKeywords.add("reverse",Token.KEYWORD3);
+			perlKeywords.add("rewinddir",Token.KEYWORD3);
+			perlKeywords.add("rindex",Token.KEYWORD3);
+			perlKeywords.add("rmdir",Token.KEYWORD3);
+			perlKeywords.add("scalar",Token.KEYWORD3);
+			perlKeywords.add("seekdir",Token.KEYWORD3);
+			perlKeywords.add("seek",Token.KEYWORD3);
+			perlKeywords.add("select",Token.KEYWORD3);
+			perlKeywords.add("semctl",Token.KEYWORD3);
+			perlKeywords.add("semget",Token.KEYWORD3);
+			perlKeywords.add("semop",Token.KEYWORD3);
+			perlKeywords.add("send",Token.KEYWORD3);
+			perlKeywords.add("setgrent",Token.KEYWORD3);
+			perlKeywords.add("sethostent",Token.KEYWORD3);
+			perlKeywords.add("setnetent",Token.KEYWORD3);
+			perlKeywords.add("setpgrp",Token.KEYWORD3);
+			perlKeywords.add("setpriority",Token.KEYWORD3);
+			perlKeywords.add("setprotoent",Token.KEYWORD3);
+			perlKeywords.add("setpwent",Token.KEYWORD3);
+			perlKeywords.add("setsockopt",Token.KEYWORD3);
+			perlKeywords.add("shift",Token.KEYWORD3);
+			perlKeywords.add("shmctl",Token.KEYWORD3);
+			perlKeywords.add("shmget",Token.KEYWORD3);
+			perlKeywords.add("shmread",Token.KEYWORD3);
+			perlKeywords.add("shmwrite",Token.KEYWORD3);
+			perlKeywords.add("shutdown",Token.KEYWORD3);
+			perlKeywords.add("sin",Token.KEYWORD3);
+			perlKeywords.add("sleep",Token.KEYWORD3);
+			perlKeywords.add("socket",Token.KEYWORD3);
+			perlKeywords.add("socketpair",Token.KEYWORD3);
+			perlKeywords.add("sort",Token.KEYWORD3);
+			perlKeywords.add("splice",Token.KEYWORD3);
+			perlKeywords.add("split",Token.KEYWORD3);
+			perlKeywords.add("sprintf",Token.KEYWORD3);
+			perlKeywords.add("sqrt",Token.KEYWORD3);
+			perlKeywords.add("srand",Token.KEYWORD3);
+			perlKeywords.add("stat",Token.KEYWORD3);
+			perlKeywords.add("study",Token.KEYWORD3);
+			perlKeywords.add("substr",Token.KEYWORD3);
+			perlKeywords.add("symlink",Token.KEYWORD3);
+			perlKeywords.add("syscall",Token.KEYWORD3);
+			perlKeywords.add("sysopen",Token.KEYWORD3);
+			perlKeywords.add("sysread",Token.KEYWORD3);
+			perlKeywords.add("syswrite",Token.KEYWORD3);
+			perlKeywords.add("telldir",Token.KEYWORD3);
+			perlKeywords.add("tell",Token.KEYWORD3);
+			perlKeywords.add("tie",Token.KEYWORD3);
+			perlKeywords.add("tied",Token.KEYWORD3);
+			perlKeywords.add("time",Token.KEYWORD3);
+			perlKeywords.add("times",Token.KEYWORD3);
+			perlKeywords.add("truncate",Token.KEYWORD3);
+			perlKeywords.add("uc",Token.KEYWORD3);
+			perlKeywords.add("ucfirst",Token.KEYWORD3);
+			perlKeywords.add("umask",Token.KEYWORD3);
+			perlKeywords.add("undef",Token.KEYWORD3);
+			perlKeywords.add("unlink",Token.KEYWORD3);
+			perlKeywords.add("unpack",Token.KEYWORD3);
+			perlKeywords.add("unshift",Token.KEYWORD3);
+			perlKeywords.add("untie",Token.KEYWORD3);
+			perlKeywords.add("utime",Token.KEYWORD3);
+			perlKeywords.add("values",Token.KEYWORD3);
+			perlKeywords.add("vec",Token.KEYWORD3);
+			perlKeywords.add("wait",Token.KEYWORD3);
+			perlKeywords.add("waitpid",Token.KEYWORD3);
+			perlKeywords.add("wantarray",Token.KEYWORD3);
+			perlKeywords.add("warn",Token.KEYWORD3);
+			perlKeywords.add("write",Token.KEYWORD3);
+
+			perlKeywords.add("m",S_ONE);
+			perlKeywords.add("q",S_ONE);
+			perlKeywords.add("qq",S_ONE);
+			perlKeywords.add("qw",S_ONE);
+			perlKeywords.add("qx",S_ONE);
+			perlKeywords.add("s",S_TWO);
+			perlKeywords.add("tr",S_TWO);
+			perlKeywords.add("y",S_TWO);
+		}
+		return perlKeywords;
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/PerlTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaDefaults.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaDefaults.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaDefaults.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * TextAreaDefaults.java - Encapsulates default values for various settings
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import java.awt.Color;
+
+import javax.swing.JPopupMenu;
+
+/**
+ * Encapsulates default settings for a text area. This can be passed
+ * to the constructor once the necessary fields have been filled out.
+ * The advantage of doing this over calling lots of set() methods after
+ * creating the text area is that this method is faster.
+ */
+public class TextAreaDefaults
+{
+	private static TextAreaDefaults DEFAULTS;
+
+	public InputHandler inputHandler;
+	public SyntaxDocument document;
+	public boolean editable;
+
+	public boolean caretVisible;
+	public boolean caretBlinks;
+	public boolean blockCaret;
+	public int electricScroll;
+
+	public int cols;
+	public int rows;
+	public SyntaxStyle[] styles;
+	public Color caretColor;
+	public Color selectionColor;
+	public Color lineHighlightColor;
+	public boolean lineHighlight;
+	public Color bracketHighlightColor;
+	public boolean bracketHighlight;
+	public Color eolMarkerColor;
+	public boolean eolMarkers;
+	public boolean paintInvalid;
+
+	public JPopupMenu popup;
+
+	/**
+	 * Returns a new TextAreaDefaults object with the default values filled
+	 * in.
+	 */
+	public static TextAreaDefaults getDefaults()
+	{
+		if(DEFAULTS == null)
+		{
+			DEFAULTS = new TextAreaDefaults();
+
+			DEFAULTS.inputHandler = new ConsoleInputHandler();
+			DEFAULTS.inputHandler.addDefaultKeyBindings();
+			DEFAULTS.document = new SyntaxDocument();
+			DEFAULTS.editable = true;
+
+			DEFAULTS.caretVisible = true;
+			DEFAULTS.caretBlinks = true;
+			DEFAULTS.electricScroll = 3;
+
+			DEFAULTS.cols = 40;
+			DEFAULTS.rows = 4;
+			DEFAULTS.styles = SyntaxUtilities.getDefaultSyntaxStyles();
+			DEFAULTS.caretColor = Color.blue;
+			DEFAULTS.selectionColor = new Color(0xccccff);
+			DEFAULTS.lineHighlightColor = new Color(0xe0e0e0);
+			DEFAULTS.lineHighlight = true;
+			DEFAULTS.bracketHighlightColor = Color.black;
+			DEFAULTS.bracketHighlight = true;
+			DEFAULTS.eolMarkerColor = new Color(0x009999);
+			DEFAULTS.eolMarkers = true;
+			DEFAULTS.paintInvalid = true;
+		}
+
+		return DEFAULTS;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/TextAreaDefaults.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/HTMLTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/HTMLTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/HTMLTokenMarker.java	(revision 42196)
@@ -0,0 +1,283 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * HTMLTokenMarker.java - HTML token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * HTML token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class HTMLTokenMarker extends TokenMarker
+{
+	public static final byte JAVASCRIPT = Token.INTERNAL_FIRST;
+
+	public HTMLTokenMarker()
+	{
+		this(true);
+	}
+
+	public HTMLTokenMarker(boolean js)
+	{
+		this.js = js;
+		keywords = JavaScriptTokenMarker.getKeywords();
+	}
+
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		lastOffset = offset;
+		lastKeyword = offset;
+		int length = line.count + offset;
+		boolean backslash = false;
+
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			if(c == '\\')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL: // HTML text
+				backslash = false;
+				switch(c)
+				{
+				case '<':
+					addToken(i - lastOffset,token);
+					lastOffset = lastKeyword = i;
+					if(SyntaxUtilities.regionMatches(false,
+						line,i1,"!--"))
+					{
+						i += 3;
+						token = Token.COMMENT1;
+					}
+					else if(js && SyntaxUtilities.regionMatches(
+						true,line,i1,"script>"))
+					{
+						addToken(8,Token.KEYWORD1);
+						lastOffset = lastKeyword = (i += 8);
+						token = JAVASCRIPT;
+					}
+					else
+					{
+						token = Token.KEYWORD1;
+					}
+					break;
+				case '&':
+					addToken(i - lastOffset,token);
+					lastOffset = lastKeyword = i;
+					token = Token.KEYWORD2;
+					break;
+				}
+				break;
+			case Token.KEYWORD1: // Inside a tag
+				backslash = false;
+				if(c == '>')
+				{
+					addToken(i1 - lastOffset,token);
+					lastOffset = lastKeyword = i1;
+					token = Token.NULL;
+				}
+				break;
+			case Token.KEYWORD2: // Inside an entity
+				backslash = false;
+				if(c == ';')
+				{
+					addToken(i1 - lastOffset,token);
+					lastOffset = lastKeyword = i1;
+					token = Token.NULL;
+					break;
+				}
+				break;
+			case Token.COMMENT1: // Inside a comment
+				backslash = false;
+				if(SyntaxUtilities.regionMatches(false,line,i,"-->"))
+				{
+					addToken((i + 3) - lastOffset,token);
+					lastOffset = lastKeyword = i + 3;
+					token = Token.NULL;
+				}
+				break;
+			case JAVASCRIPT: // Inside a JavaScript
+				switch(c)
+				{
+				case '<':
+					backslash = false;
+					doKeyword(line,i,c);
+					if(SyntaxUtilities.regionMatches(true,
+						line,i1,"/script>"))
+					{
+						addToken(i - lastOffset,
+							Token.NULL);
+						addToken(9,Token.KEYWORD1);
+						lastOffset = lastKeyword = (i += 9);
+						token = Token.NULL;
+					}
+					break;
+				case '"':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						doKeyword(line,i,c);
+						addToken(i - lastOffset,Token.NULL);
+						lastOffset = lastKeyword = i;
+						token = Token.LITERAL1;
+					}
+					break;
+				case '\'':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						doKeyword(line,i,c);
+						addToken(i - lastOffset,Token.NULL);
+						lastOffset = lastKeyword = i;
+						token = Token.LITERAL2;
+					}
+					break;
+				case '/':
+					backslash = false;
+					doKeyword(line,i,c);
+					if(length - i > 1)
+					{
+						addToken(i - lastOffset,Token.NULL);
+						lastOffset = lastKeyword = i;
+						if(array[i1] == '/')
+						{
+							addToken(length - i,Token.COMMENT2);
+							lastOffset = lastKeyword = length;
+							break loop;
+						}
+						else if(array[i1] == '*')
+						{
+							token = Token.COMMENT2;
+						}
+					}
+					break;
+				default:					backslash = false;
+					if(!Character.isLetterOrDigit(c)
+						&& c != '_')
+						doKeyword(line,i,c);
+					break;
+				}
+				break;
+			case Token.LITERAL1: // JavaScript "..."
+				if(backslash)
+					backslash = false;
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					lastOffset = lastKeyword = i1;
+					token = JAVASCRIPT;
+				}
+				break;
+			case Token.LITERAL2: // JavaScript '...'
+				if(backslash)
+					backslash = false;
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					lastOffset = lastKeyword = i1;
+					token = JAVASCRIPT;
+				}
+				break;
+			case Token.COMMENT2: // Inside a JavaScript comment
+				backslash = false;
+				if(c == '*' && length - i > 1 && array[i1] == '/')
+				{
+					addToken((i+=2) - lastOffset,Token.COMMENT2);
+					lastOffset = lastKeyword = i;
+					token = JAVASCRIPT;
+				}
+				break;
+			default:
+				throw new InternalError("Invalid state: "
+					+ token);
+			}
+		}
+
+		switch(token)
+		{
+		case Token.LITERAL1:
+		case Token.LITERAL2:
+			addToken(length - lastOffset,Token.INVALID);
+			token = JAVASCRIPT;
+			break;
+		case Token.KEYWORD2:
+			addToken(length - lastOffset,Token.INVALID);
+			token = Token.NULL;
+			break;
+		case JAVASCRIPT:
+			doKeyword(line,length,'\0');
+			addToken(length - lastOffset,Token.NULL);
+			break;
+		default:
+			addToken(length - lastOffset,token);
+			break;
+		}
+
+		return token;
+	}
+
+	// private members
+	private KeywordMap keywords;
+	private boolean js;
+	private int lastOffset;
+	private int lastKeyword;
+
+	private boolean doKeyword(Segment line, int i, char c)
+	{
+		int i1 = i+1;
+
+		int len = i - lastKeyword;
+		byte id = keywords.lookup(line,lastKeyword,len);
+		if(id != Token.NULL)
+		{
+			if(lastKeyword != lastOffset)
+				addToken(lastKeyword - lastOffset,Token.NULL);
+			addToken(len,id);
+			lastOffset = i;
+		}
+		lastKeyword = i1;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/HTMLTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaScriptTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaScriptTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaScriptTokenMarker.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * JavaScriptTokenMarker.java - JavaScript token marker
+ * Copyright (C) 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+
+/**
+ * JavaScript token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class JavaScriptTokenMarker extends CTokenMarker
+{
+	public JavaScriptTokenMarker()
+	{
+		super(false,getKeywords());
+	}
+
+	public static KeywordMap getKeywords()
+	{
+		if(javaScriptKeywords == null)
+		{
+			javaScriptKeywords = new KeywordMap(false);
+			javaScriptKeywords.add("function",Token.KEYWORD3);
+			javaScriptKeywords.add("var",Token.KEYWORD3);
+			javaScriptKeywords.add("else",Token.KEYWORD1);
+			javaScriptKeywords.add("for",Token.KEYWORD1);
+			javaScriptKeywords.add("if",Token.KEYWORD1);
+			javaScriptKeywords.add("in",Token.KEYWORD1);
+			javaScriptKeywords.add("new",Token.KEYWORD1);
+			javaScriptKeywords.add("return",Token.KEYWORD1);
+			javaScriptKeywords.add("while",Token.KEYWORD1);
+			javaScriptKeywords.add("with",Token.KEYWORD1);
+			javaScriptKeywords.add("break",Token.KEYWORD1);
+			javaScriptKeywords.add("case",Token.KEYWORD1);
+			javaScriptKeywords.add("continue",Token.KEYWORD1);
+			javaScriptKeywords.add("default",Token.KEYWORD1);
+			javaScriptKeywords.add("false",Token.LABEL);
+			javaScriptKeywords.add("this",Token.LABEL);
+			javaScriptKeywords.add("true",Token.LABEL);
+		}
+		return javaScriptKeywords;
+	}
+
+	// private members
+	private static KeywordMap javaScriptKeywords;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/JavaScriptTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/MakefileTokenMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/MakefileTokenMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/MakefileTokenMarker.java	(revision 42196)
@@ -0,0 +1,182 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * MakefileTokenMarker.java - Makefile token marker
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+import javax.swing.text.Segment;
+
+/**
+ * Makefile token marker.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class MakefileTokenMarker extends TokenMarker
+{
+	// public members
+	public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	{
+		char[] array = line.array;
+		int offset = line.offset;
+		int lastOffset = offset;
+		int length = line.count + offset;
+		boolean backslash = false;
+loop:		for(int i = offset; i < length; i++)
+		{
+			int i1 = (i+1);
+
+			char c = array[i];
+			if(c == '\\')
+			{
+				backslash = !backslash;
+				continue;
+			}
+
+			switch(token)
+			{
+			case Token.NULL:
+				switch(c)
+				{
+				case ':': case '=': case ' ': case '\t':
+					backslash = false;
+					if(lastOffset == offset)
+					{
+						addToken(i1 - lastOffset,Token.KEYWORD1);
+						lastOffset = i1;
+					}
+					break;
+				case '#':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						addToken(length - i,Token.COMMENT1);
+						lastOffset = length;
+						break loop;
+					}
+					break;
+				case '$':
+					if(backslash)
+						backslash = false;
+					else if(lastOffset != offset)
+					{
+						addToken(i - lastOffset,token);
+						lastOffset = i;
+						if(length - i > 1)
+						{
+							char c1 = array[i1];
+							if(c1 == '(' || c1 == '{')
+								token = Token.KEYWORD2;
+							else
+							{
+								addToken(2,Token.KEYWORD2);
+								lastOffset += 2;
+								i++;
+							}
+						}
+					}
+					break;
+				case '"':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL1;
+						lastOffset = i;
+					}
+					break;
+				case '\'':
+					if(backslash)
+						backslash = false;
+					else
+					{
+						addToken(i - lastOffset,token);
+						token = Token.LITERAL2;
+						lastOffset = i;
+					}
+					break;
+				default:
+					backslash = false;
+					break;
+				}
+			case Token.KEYWORD2:
+				backslash = false;
+				if(c == ')' || c == '}')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = i1;
+				}
+				break;
+			case Token.LITERAL1:
+				if(backslash)
+					backslash = false;
+				else if(c == '"')
+				{
+					addToken(i1 - lastOffset,token);
+					token = Token.NULL;
+					lastOffset = i1;
+				}
+				else
+					backslash = false;
+				break;
+			case Token.LITERAL2:
+				if(backslash)
+					backslash = false;
+				else if(c == '\'')
+				{
+					addToken(i1 - lastOffset,Token.LITERAL1);
+					token = Token.NULL;
+					lastOffset = i1;
+				}
+				else
+					backslash = false;
+				break;
+			}
+		}
+		switch(token)
+		{
+		case Token.KEYWORD2:
+			addToken(length - lastOffset,Token.INVALID);
+			token = Token.NULL;
+			break;
+		case Token.LITERAL2:
+			addToken(length - lastOffset,Token.LITERAL1);
+			break;
+		default:
+			addToken(length - lastOffset,token);
+			break;
+		}
+		return token;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/MakefileTokenMarker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ConsoleInputHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ConsoleInputHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ConsoleInputHandler.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+
+import org.gvsig.utils.console.JConsole;
+
+
+public class ConsoleInputHandler extends DefaultInputHandler {
+
+	private ArrayList listeners=new ArrayList();
+	public void keyPressed(KeyEvent evt) {
+		super.keyPressed(evt);
+		callConsolePressed(evt);
+	}
+
+	public void keyTyped(KeyEvent evt) {
+		super.keyTyped(evt);
+	}
+
+	public void keyReleased(KeyEvent arg0) {
+		callConsoleReleased(arg0);
+	}
+
+	public void addConsoleListener(JConsole console) {
+		listeners.add(console);
+	}
+	private void callConsolePressed(KeyEvent e){
+		for (int i=0;i<listeners.size();i++){
+			((JConsole)listeners.get(i)).keyPressed(e);
+		}
+	}
+	private void callConsoleReleased(KeyEvent e){
+		for (int i=0;i<listeners.size();i++){
+			((JConsole)listeners.get(i)).keyReleased(e);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/ConsoleInputHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/Token.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/Token.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/Token.java	(revision 42196)
@@ -0,0 +1,171 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console.jedit;
+/*
+ * Token.java - Generic token
+ * Copyright (C) 1998, 1999 Slava Pestov
+ *
+ * You may use and modify this package for any purpose. Redistribution is
+ * permitted, in both source and binary form, provided that this notice
+ * remains intact in all source distributions of this package.
+ */
+
+/**
+ * A linked list of tokens. Each token has three fields - a token
+ * identifier, which is a byte value that can be looked up in the
+ * array returned by <code>SyntaxDocument.getColors()</code>
+ * to get a color value, a length value which is the length of the
+ * token in the text, and a pointer to the next token in the list.
+ *
+ * @author Slava Pestov
+ * @version $Id$
+ */
+public class Token
+{
+	/**
+	 * Normal text token id. This should be used to mark
+	 * normal text.
+	 */
+	public static final byte NULL = 0;
+
+	/**
+	 * Comment 1 token id. This can be used to mark a comment.
+	 */
+	public static final byte COMMENT1 = 1;
+
+	/**
+	 * Comment 2 token id. This can be used to mark a comment.
+	 */
+	public static final byte COMMENT2 = 2;
+
+	
+	/**
+	 * Literal 1 token id. This can be used to mark a string
+	 * literal (eg, C mode uses this to mark "..." literals)
+	 */
+	public static final byte LITERAL1 = 3;
+
+	/**
+	 * Literal 2 token id. This can be used to mark an object
+	 * literal (eg, Java mode uses this to mark true, false, etc)
+	 */
+	public static final byte LITERAL2 = 4;
+
+	/**
+	 * Label token id. This can be used to mark labels
+	 * (eg, C mode uses this to mark ...: sequences)
+	 */
+	public static final byte LABEL = 5;
+
+	/**
+	 * Keyword 1 token id. This can be used to mark a
+	 * keyword. This should be used for general language
+	 * constructs.
+	 */
+	public static final byte KEYWORD1 = 6;
+
+	/**
+	 * Keyword 2 token id. This can be used to mark a
+	 * keyword. This should be used for preprocessor
+	 * commands, or variables.
+	 */
+	public static final byte KEYWORD2 = 7;
+
+	/**
+	 * Keyword 3 token id. This can be used to mark a
+	 * keyword. This should be used for data types.
+	 */
+	public static final byte KEYWORD3 = 8;
+
+	/**
+	 * Operator token id. This can be used to mark an
+	 * operator. (eg, SQL mode marks +, -, etc with this
+	 * token type)
+	 */
+	public static final byte OPERATOR = 9;
+
+	/**
+	 * Invalid token id. This can be used to mark invalid
+	 * or incomplete tokens, so the user can easily spot
+	 * syntax errors.
+	 */
+	public static final byte INVALID = 10;
+
+	/**
+	 * The total number of defined token ids.
+	 */
+	public static final byte ID_COUNT = 11;
+
+	/**
+	 * The first id that can be used for internal state
+	 * in a token marker.
+	 */
+	public static final byte INTERNAL_FIRST = 100;
+
+	/**
+	 * The last id that can be used for internal state
+	 * in a token marker.
+	 */
+	public static final byte INTERNAL_LAST = 126;
+
+	/**
+	 * The token type, that along with a length of 0
+	 * marks the end of the token list.
+	 */
+	public static final byte END = 127;
+
+	/**
+	 * The length of this token.
+	 */
+	public int length;
+
+	/**
+	 * The id of this token.
+	 */
+	public byte id;
+
+	/**
+	 * The next token in the linked list.
+	 */
+	public Token next;
+
+	/**
+	 * Creates a new token.
+	 * @param length The length of the token
+	 * @param id The id of the token
+	 */
+	public Token(int length, byte id)
+	{
+		this.length = length;
+		this.id = id;
+	}
+
+	/**
+	 * Returns a string representation of this token.
+	 */
+	public String toString()
+	{
+		return "[id=" + id + ",length=" + length + "]";
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/jedit/Token.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/test/JConsoleTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/test/JConsoleTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/test/JConsoleTest.java	(revision 42196)
@@ -0,0 +1,147 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.utils.console.test;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.UIManager;
+
+import org.gvsig.utils.console.JConsole;
+import org.gvsig.utils.console.JDockPanel;
+import org.gvsig.utils.console.ResponseListener;
+
+public class JConsoleTest extends JFrame {
+
+	private javax.swing.JPanel jContentPane = null;
+
+	private JConsole jConsole = null;
+	private JButton jButton = null;
+	/**
+	 * This is the default constructor
+	 */
+	public JConsoleTest() {
+		super();
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		this.setSize(300,200);
+		this.setContentPane(getJContentPane());
+		this.setTitle("JFrame");
+	}
+	/**
+	 * This method initializes jContentPane
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private javax.swing.JPanel getJContentPane() {
+		if(jContentPane == null) {
+			jContentPane = new javax.swing.JPanel();
+			jContentPane.setLayout(new java.awt.BorderLayout());
+			JDockPanel dock = new JDockPanel(getJConsole());
+			jContentPane.add(dock, java.awt.BorderLayout.SOUTH);
+		}
+		return jContentPane;
+	}
+	/**
+	 * This method initializes jConsole
+	 *
+	 * @return com.iver.utiles.console.JConsole
+	 */
+	private JConsole getJConsole() {
+		if (jConsole == null) {
+			jConsole = new JConsole();
+			// jConsole.add(getJButton(), java.awt.BorderLayout.NORTH);
+		}
+		return jConsole;
+	}
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setPreferredSize(new java.awt.Dimension(34,25));
+		}
+		return jButton;
+	}
+
+	public static void main(String[] args) {
+		MyBoolean responsed = new MyBoolean();
+		
+		//Se pone el lookAndFeel
+		try {
+			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+		} catch (Exception e) {
+
+		}
+
+
+		JConsoleTest ct = new JConsoleTest();
+		ct.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		ct.show();
+		ResponseHandler listener = new ResponseHandler(responsed, ct);
+		ct.getJConsole().addResponseListener(listener);
+		while (true){
+			responsed.value = false;
+			ct.getJConsole().addText("Como vas? ",JConsole.MESSAGE);
+
+			while (!responsed.value){
+
+			}
+		}
+	}
+
+	private static class MyBoolean{
+		public boolean value;
+	}
+
+	private static class ResponseHandler implements ResponseListener {
+
+		private MyBoolean responsed;
+		private JConsoleTest ct;
+
+		public ResponseHandler(MyBoolean responsed, JConsoleTest ct){
+			this.responsed = responsed;
+			this.ct = ct;
+		}
+
+		/**
+		 * @throws InvalidResponseException
+		 * @see org.gvsig.utils.console.ResponseListener#acceptResponse(java.lang.String)
+		 */
+		public void acceptResponse(String response){
+			ct.jButton.setText(response);
+			responsed.value = true;
+		}
+
+	}
+  }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/test/JConsoleTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListenerSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListenerSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListenerSupport.java	(revision 42196)
@@ -0,0 +1,70 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ResponseListenerSupport {
+	private ArrayList listeners = new ArrayList();
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param listener DOCUMENT ME!
+	 */
+	public void addResponseListener(ResponseListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param listener DOCUMENT ME!
+	 */
+	public void removeResponseListener(ResponseListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param arg0 DOCUMENT ME!
+	 *
+	 * @throws InvalidResponseException DOCUMENT ME!
+	 */
+	public void callAcceptResponse(java.lang.String arg0) {
+		Iterator i = listeners.iterator();
+
+		while (i.hasNext()) {
+			((ResponseListener) i.next()).acceptResponse(arg0);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListenerSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ConsoleStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ConsoleStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ConsoleStyle.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console;
+
+import java.awt.Color;
+
+public class ConsoleStyle {
+	private int start=0;
+	private int stop=0;
+	private Color color=Color.black;
+	public Color getColor() {
+		return color;
+	}
+	public void setColor(Color color) {
+		this.color = color;
+	}
+	public int getStart() {
+		return start;
+	}
+	public void setStart(int start) {
+		this.start = start;
+	}
+	public int getStop() {
+		return stop;
+	}
+	public void setStop(int stop) {
+		this.stop = stop;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ConsoleStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListener.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.utils.console;
+
+/**
+ * Objeto que recibir� invocaciones en el m�todo acceptResponse cuando se
+ * escriba una respuesta en la consola
+ */
+public interface ResponseListener {
+	/**
+	 * Invocado cuando el usuario pulsa intro en la consola despues de haber
+	 * una pregunta en al mismas
+	 *
+	 * @param response Texto introducido por el usuario. Null si se puls� ESC
+	 */
+	public void acceptResponse(String response);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/ResponseListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JDockPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JDockPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JDockPanel.java	(revision 42196)
@@ -0,0 +1,247 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.console;
+
+import java.awt.BorderLayout;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Point;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.SwingUtilities;
+
+public class JDockPanel extends JPanel {
+
+	private JPanel jPanelNorth = null;
+	private JPanel jPanelButtons = null;
+	private JComponent centerComponent;
+	private JButton jButtonUp = null;
+	private JButton jButtonDown = null;
+	private JPanel jPanelCenterNorth = null;
+	private JSeparator jSeparator1 = null;
+	private JDockPanel the;
+	private int originalCenterComponentHeight;
+
+	public JDockPanel(JComponent centerComponent) {
+		super();	
+		the = this;
+		initialize();
+		this.centerComponent = centerComponent;
+		this.originalCenterComponentHeight = centerComponent.getPreferredSize().height;
+		this.add(centerComponent, BorderLayout.CENTER);
+		
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(new java.awt.Dimension(388,225));
+        this.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
+        this.add(getJPanelNorth(), java.awt.BorderLayout.NORTH);
+			
+	}
+
+	/**
+	 * This method initializes jPanelNorth	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanelNorth() {
+		if (jPanelNorth == null) {
+			jPanelNorth = new JPanel();
+			jPanelNorth.setLayout(new BorderLayout());
+			jPanelNorth.setPreferredSize(new java.awt.Dimension(100,12));
+			jPanelNorth.add(getJPanelCenterNorth(), java.awt.BorderLayout.CENTER);
+			jPanelNorth.add(getJPanelButtons(), java.awt.BorderLayout.EAST);
+			
+			
+		}
+		return jPanelNorth;
+	}
+
+	/**
+	 * This method initializes jPanelButtons	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanelButtons() {
+		if (jPanelButtons == null) {
+			jPanelButtons = new JPanel();
+			jPanelButtons.setLayout(null);
+			jPanelButtons.setPreferredSize(new java.awt.Dimension(51,12));
+			jPanelButtons.add(getJButtonUp(), null);
+			jPanelButtons.add(getJButtonDown(), null);
+		}
+		return jPanelButtons;
+	}
+
+	/**
+	 * This method initializes jButtonUp	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getJButtonUp() {
+		if (jButtonUp == null) {
+			jButtonUp = new JButton();
+			jButtonUp.setCursor(Cursor.getDefaultCursor());
+			jButtonUp.setIcon(new ImageIcon(getClass().getResource("/images/up" +
+					".png")));
+			jButtonUp.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
+			jButtonUp.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+			jButtonUp.setBounds(new java.awt.Rectangle(3,0,20,12));
+			jButtonUp.setPreferredSize(new java.awt.Dimension(20,12));
+			jButtonUp.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					// UP
+					centerComponent.setPreferredSize(new Dimension(centerComponent.getWidth(), originalCenterComponentHeight));
+					int hTot = centerComponent.getPreferredSize().height + getJPanelNorth().getHeight();
+					
+					// the.setLocation(0, the.getParent().getHeight()-hTot);
+//					the.centerComponent.setLocation(0, getJPanelNorth().getHeight());
+					the.reshape(0, the.getParent().getHeight()-hTot, the.getWidth(), hTot);
+					the.validate();
+					the.doLayout();
+//					centerComponent.validate();
+//					centerComponent.doLayout();
+
+				}
+			});
+		}
+		return jButtonUp;
+	}
+
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getJButtonDown() {
+		if (jButtonDown == null) {
+			jButtonDown = new JButton();
+			jButtonDown.setCursor(Cursor.getDefaultCursor());
+			jButtonDown.setPreferredSize(new java.awt.Dimension(20,12));
+			jButtonDown.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
+			jButtonDown.setIcon(new ImageIcon(getClass().getResource("/images/down.png")));
+			jButtonDown.setBounds(new java.awt.Rectangle(26,0,20,12));
+			jButtonDown.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+			jButtonDown.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					// DOWN
+					centerComponent.setPreferredSize(new Dimension(centerComponent.getWidth(), 0));
+					
+					int hTot = getJPanelNorth().getHeight();
+					// the.setLocation(0, the.getParent().getHeight()-hTot);
+					the.reshape(0, the.getParent().getHeight()-hTot, the.getWidth(), hTot);
+					// the.setPreferredSize()
+					the.validate();
+					the.doLayout();
+				}
+			});
+		}
+		return jButtonDown;
+	}
+
+	/**
+	 * This method initializes jPanelCenterNorth	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanelCenterNorth() {
+		if (jPanelCenterNorth == null) {
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.insets = new java.awt.Insets(2,0,2,0);
+			gridBagConstraints.weightx = 90.0D;
+			gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			jPanelCenterNorth = new JPanel();
+			jPanelCenterNorth.setLayout(new GridBagLayout());
+			jPanelCenterNorth.add(getJSeparator1(), gridBagConstraints);
+		}
+		return jPanelCenterNorth;
+	}
+
+	/**
+	 * This method initializes jSeparator1	
+	 * 	
+	 * @return javax.swing.JSeparator	
+	 */
+	private JSeparator getJSeparator1() {
+		if (jSeparator1 == null) {
+			jSeparator1 = new JSeparator();
+			jSeparator1.setPreferredSize(new java.awt.Dimension(100,5));
+			jSeparator1.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
+			jSeparator1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
+				public void mouseDragged(java.awt.event.MouseEvent e) {
+					Point pExt = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), the.getParent());
+					Dimension sizeFather = the.getParent().getSize();
+					int heightFather = sizeFather.height;
+					Dimension newDimension = new Dimension(the.getSize().width, heightFather - pExt.y);
+					Dimension newCDimension = new Dimension(the.getSize().width, heightFather - pExt.y - getJPanelNorth().getHeight());
+					Point actualOrigin = the.getLocation();
+//					the.setSize(newDimension);
+//					the.setBounds(actualOrigin.x, pExt.y, newDimension.width, newDimension.height);
+					the.reshape(actualOrigin.x, pExt.y, newDimension.width, newDimension.height);
+//					centerComponent.reshape(0, newDimension.width, getJPanelNorth().getHeight(), newDimension.height-getJPanelNorth().getHeight());
+//					the.doLayout();
+//			        ComponentEvent ev = new ComponentEvent(the,
+//                            ComponentEvent.COMPONENT_RESIZED);
+//			        the.dispatchEvent(ev);					
+//					invalidate();
+//					repaint();
+					originalCenterComponentHeight = newDimension.height;
+					centerComponent.setPreferredSize(newCDimension);
+					the.validate();
+					the.doLayout();
+				}
+			});
+		}
+		return jSeparator1;
+	}
+
+	public JComponent getCenterComponent() {
+		return centerComponent;
+	}
+
+	public void setCenterComponent(JComponent centerComponent) {
+		if (this.centerComponent != null)
+		{
+			this.remove(this.centerComponent);
+		}
+		this.centerComponent = centerComponent;
+		this.originalCenterComponentHeight = centerComponent.getPreferredSize().height;
+		this.add(centerComponent, BorderLayout.CENTER);
+
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JDockPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JConsole.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JConsole.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JConsole.java	(revision 42196)
@@ -0,0 +1,287 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.utils.console;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.swing.JPanel;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+
+import org.gvsig.utils.console.jedit.ConsoleInputHandler;
+import org.gvsig.utils.console.jedit.JEditTextArea;
+import org.gvsig.utils.console.jedit.TextAreaDefaults;
+import org.gvsig.utils.console.jedit.TokenMarker;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class JConsole extends JPanel {
+	private JEditTextArea txt;
+	private int startingCaretPosition = 0;
+	private ArrayList entries = new ArrayList();
+	private int currentEntry = -1;
+	private ResponseListenerSupport listenerSupport = new ResponseListenerSupport();
+	public static int MESSAGE=0;
+	public static int COMMAND=1;
+	public static int INSERT=2;
+	public static int ERROR=3;
+	private static TextAreaDefaults defaults;
+	private JConsole theContainer = null;
+	
+	private boolean redispatch_key_events = false;
+	/**
+	 * This is the default constructor
+	 */
+	public JConsole() {
+		super();
+		initialize();
+		defaults=TextAreaDefaults.getDefaults();
+		((ConsoleInputHandler)defaults.inputHandler).addConsoleListener(this);
+		theContainer = this;
+	}
+	
+
+	/**
+	 * With this constructor, we decide whether the key events
+	 * are re-dispatched to the parent of this component.
+	 * This is necessary to prevent the console from consuming
+	 * key events (short-cuts) while editing. the component
+	 * which originally receives the key event is the JEditTextArea
+	 * but this console is receiving also key-pressed notifications.
+	 * 
+	 * @param redisp_key_events
+	 */
+	public JConsole(boolean redisp_key_events) {
+	    this();
+	    redispatch_key_events = redisp_key_events;
+	}
+
+
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.setSize(300, 200);
+		this.setPreferredSize(new Dimension(300,200));
+		this.add(getTxt(), java.awt.BorderLayout.CENTER);
+	}
+
+	public void setTokenMarker(TokenMarker tm){
+		txt.setTokenMarker(tm);
+	}
+	/**
+	 * Obtiene una referencia al JTextArea de la consola
+	 *
+	 * @return javax.swing.JTextArea
+	 */
+	public JEditTextArea getTxt() {
+		if (txt == null) {
+			txt = new JEditTextArea();
+			//txt.setTokenMarker(new JavaTokenMarker());
+			txt.addCaretListener(new CaretListener() {
+					public void caretUpdate(CaretEvent e) {
+						if (txt.getCaretPosition() < startingCaretPosition) {
+							if (startingCaretPosition <= txt.getText().length()) {
+								txt.setCaretPosition(startingCaretPosition);
+							}
+						}
+					}
+				}
+			);
+		}
+
+		return txt;
+	}
+
+	/**
+	 * A�ade un texto a la consola
+	 *
+	 * @param text Texto que se a�ade a la consola
+	 */
+	public void addText(String text,int type) {
+		txt.setText(txt.getText() + text);
+		txt.setCaretPosition(txt.getText().length());
+		startingCaretPosition = txt.getText().length();
+
+	}
+	/**
+	 * A�ade un texto a la consola que es tomado como si lo
+	 * hubiese escrito el usuario. Formar� parte de la respuesta
+	 *
+	 * @param text Texto que se a�ade a la consola
+	 */
+	public void addResponseText(String text) {
+		txt.setText(txt.getText() + text);
+		txt.setCaretPosition(txt.getText().length());
+	}
+
+	public void addResponseListener(ResponseListener listener) {
+		listenerSupport.addResponseListener(listener);
+	}
+	public void removeResponseListener(ResponseListener listener) {
+		listenerSupport.removeResponseListener(listener);
+	}
+
+	/**
+	 * Useful to know from where it comes a key event. See CADExtension
+	 * @param name
+	 */
+	public void setJTextName(String name)
+	{
+		txt.setName(name);
+	}
+
+	public void keyPressed(KeyEvent e) {
+		if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
+			if (startingCaretPosition >= txt.getCaretPosition()) {
+				int caretPos = txt.getCaretPosition();
+				String text = txt.getText();
+				text = text.substring(0, caretPos) + " " +
+					text.substring(caretPos);
+				txt.setText(text);
+
+				txt.setCaretPosition(caretPos);
+
+			}else{
+			}
+		}
+		
+		if (redispatch_key_events) {
+	        Container cont = this.getParent();
+	        if (cont != null && cont instanceof Component) {
+	            Component comp = (Component) cont;
+	            comp.dispatchEvent(e);
+	        }
+		}
+	}
+
+	public void keyReleased(KeyEvent e) {
+		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+			String texto = txt.getText();
+			String response = texto.substring(startingCaretPosition);
+
+			listenerSupport.callAcceptResponse(response);
+
+			if (response.trim().length() > 0) {
+				entries.add(response.trim());
+			}
+
+			currentEntry = -1;
+
+		} else if (e.getKeyCode() == KeyEvent.VK_UP) {
+			if (entries.size() == 0) {
+				return;
+			}
+
+			if (currentEntry == -1) {
+				currentEntry = entries.size() - 1;
+			} else {
+				currentEntry--;
+
+				if (currentEntry < 0) {
+					currentEntry = 0;
+				}
+			}
+
+			putEntry();
+		} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
+			if (entries.size() == 0) {
+				return;
+			}
+
+			if (currentEntry != -1) {
+				currentEntry++;
+
+				if (currentEntry >= entries.size()) {
+					currentEntry = entries.size() - 1;
+				}
+			}
+
+			putEntry();
+		} else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+			txt.setText(txt.getText());
+			listenerSupport.callAcceptResponse(null);
+			
+		} else if (e.getKeyCode() == KeyEvent.VK_V) {
+			if ((e.getModifiers() & InputEvent.CTRL_MASK) != 0) {
+				String clipb = "";
+				try {
+		            clipb = (String) Toolkit.getDefaultToolkit()
+		            .getSystemClipboard()
+		            .getContents(null)
+		            .getTransferData(DataFlavor.stringFlavor);
+		        } catch (UnsupportedFlavorException ex) {
+		        } catch (IOException ex) {
+		            // TODO Auto-generated catch block
+		        }
+				
+				
+				if (clipb != null && clipb.length() > 0) {
+					String[] parts = clipb.split("\n");
+					for (int i = 0; i < parts.length; i++) {
+						String part = parts[i];
+						if (part != null && part.length() > 0) {
+							txt.setText(txt.getText()+part);
+							String texto = txt.getText();
+							String response = texto.substring(startingCaretPosition);
+
+							listenerSupport.callAcceptResponse(response);
+
+							if (response.trim().length() > 0) {
+								entries.add(response.trim());
+							}
+
+							currentEntry = -1;
+						}
+					}		
+				}
+			}
+		}
+	}
+	private void putEntry() {
+		String anterior = txt.getText();
+		anterior = anterior.substring(0, startingCaretPosition);
+		txt.setText(anterior + entries.get(currentEntry));
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/console/JConsole.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/GenericFileFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/GenericFileFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/GenericFileFilter.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+
+/**
+ * Filtro de fichero gen�rico para los JFileChooser
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class GenericFileFilter extends FileFilter {
+	private String[] extensiones=new String[1];
+	private String description;
+	private boolean dirs = true;
+
+	/**
+	 * Crea un nuevo GenericFileFilter.
+	 *
+	 * @param ext DOCUMENT ME!
+	 * @param desc DOCUMENT ME!
+	 */
+	public GenericFileFilter(String[] ext, String desc) {
+		extensiones = ext;
+		description = desc;
+	}
+	/**
+	 * Crea un nuevo GenericFileFilter.
+	 *
+	 * @param ext DOCUMENT ME!
+	 * @param desc DOCUMENT ME!
+	 */
+	public GenericFileFilter(String ext, String desc) {
+		extensiones[0] = ext;
+		description = desc;
+	}
+
+	/**
+	 * Crea un nuevo GenericFileFilter.
+	 *
+	 * @param ext DOCUMENT ME!
+	 * @param desc DOCUMENT ME!
+	 * @param dirs DOCUMENT ME!
+	 */
+	public GenericFileFilter(String ext, String desc, boolean dirs) {
+		extensiones[0] = ext;
+		description = desc;
+		this.dirs = dirs;
+	}
+
+	/**
+	 * @see javax.swing.filechooser.FileFilter#accept(java.io.File)
+	 */
+	public boolean accept(File f) {
+		if (f.isDirectory()) {
+			if (dirs) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+		boolean endsWith=false;
+		for (int i=0;i<extensiones.length;i++){
+			if (f.getName().toUpperCase().endsWith(extensiones[i].toUpperCase())){
+				endsWith=true;
+			}
+		}
+		
+		return endsWith;
+	}
+
+	/**
+	 * @see javax.swing.filechooser.FileFilter#getDescription()
+	 */
+	public String getDescription() {
+		return description;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/GenericFileFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/centerComponent/CenterComponent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/centerComponent/CenterComponent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/centerComponent/CenterComponent.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.centerComponent;
+
+import java.awt.Component;
+import java.awt.Point;
+import java.awt.Rectangle;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * Allows center a component (Ex. JInternalFrame, JFrame, etc.) respect its parent component
+ * 
+ * Exceptions:<br>
+ * <ul>
+ *  <li>If the component is a JDialog -> better use:<br>
+ *      jDialog.setLocationRelativeTo(parentComponent);</li>
+ *  <li>If the component is a JFrame or a JWindow -> better use:<br>
+ *      jFrame.setSize(width, height);<br>
+ *      jFrame.setLocationRelativeTo(null);<br>
+ *    or<br>
+ *      jWindow.setSize(width, height);<br>
+ *      jWindow.setLocationRelativeTo(null);</li> 
+ * </ul>
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class CenterComponent {
+
+	/**
+	 * Centers a component (Ex. JInternalFrame, JFrame, etc.) according its size and the bounds of its parent<br>
+	 * 
+	 * Exceptions:<br>
+	 * <ul>
+	 *  <li>If the component is a JDialog -> better use:<br>
+	 *      jDialog.setLocationRelativeTo(parentComponent);</li>
+	 *  <li>If the component is a JFrame or a JWindow -> better use:<br>
+	 *      jFrame.setSize(width, height);<br>
+	 *      jFrame.setLocationRelativeTo(null);<br>
+	 *    or<br>
+	 *      jWindow.setSize(width, height);<br>
+	 *      jWindow.setLocationRelativeTo(null);</li>
+	 * </ul>
+	 *
+  	 * @param component The component to center 
+	 * @param parentBounds Bounds of the parent of the component.
+	 */
+	public static void centerComponent(Component component, Rectangle parentBounds) {
+		final int DefaultXMargin = 20;
+		final int DefaultYMargin = 20;
+		final int MinimumXMargin = 10;
+		final int MinimumYMargin = 10;
+		
+		// The top-left square of JComponent reference
+		Point newReferencePoint = new Point();
+		newReferencePoint.x = (parentBounds.x + (parentBounds.width - component.getWidth()) / 2);
+		newReferencePoint.y = (parentBounds.y + (parentBounds.height - component.getHeight()) / 2);
+		
+		// Calculate the new point reference (Assure that the top-left corner is showed)
+		if (newReferencePoint.x < 0)
+		{
+			if (newReferencePoint.x > MinimumXMargin)
+				newReferencePoint.x = DefaultXMargin;
+			else
+				newReferencePoint.x = 0;
+		}
+			
+			
+		if (newReferencePoint.y < 0)
+		{
+			if (newReferencePoint.y > MinimumYMargin)
+				newReferencePoint.y = DefaultYMargin;
+			else
+				newReferencePoint.y = 0;
+		}			
+
+		// Set the new location for this JComponent object
+		component.setLocation(newReferencePoint);
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/centerComponent/CenterComponent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionHandlingSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionHandlingSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionHandlingSupport.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.exceptionHandling;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * <p>Stores a group of <code>ExceptionListener</code> that, in whatever moment
+ * could be notified a <code>Throwable</code> Java error or exception.</p>
+ * 
+ * <p><code>ExceptionHandlingSupport</code> is useful to manage a set of listeners
+ * that need to be executed when a particular error or exception in a object is produced. For
+ * instance, when user drags the mouse over a geometrical object in a view, it's possible that
+ * some <code>ExceptionLister</code> of that object and other nearby, must be notified. Using
+ * <code>ExceptionHandlingSupport</code> the developer can manage easily a set of that kind of
+ * listeners, that can change according to an external factor. (In the previous sample, for intance,
+ * can change according the closed objects to the one which this <code>ExceptionHandlingSupport</code>
+ * refers).</p>
+ */
+public class ExceptionHandlingSupport {
+	/**
+	 * <p>List with a group of <code>ExceptionListener</code>.</p>
+	 */
+	private ArrayList exceptionListeners = new ArrayList();
+
+    /**
+     * <p>Adds a new <code>ExceptionListener</code> for adding support to it.</p>
+     *
+     * @param o listener adapted to be notified by the <code>ExceptionHandlingSupport</code>
+     */
+    public void addExceptionListener(ExceptionListener o) {
+        exceptionListeners.add(o);
+    }
+
+    /**
+     * <p>Removes an <code>ExceptionListener</code> for finishing the support to it.</p>
+     *
+     * @param o listener adapted to be notified by the <code>ExceptionHandlingSupport</code>
+     *
+     * @return <code>true</code> if the list contained the specified element, <code>false</code> otherwise
+     */
+    public boolean removeExceptionListener(ExceptionListener o) {
+        return exceptionListeners.remove(o);
+    }
+
+    /**
+     * <p>Notifies all registered listeners that an error or exception
+     *  throwable by the Java Virtual Machine has been produced.</p>
+     *
+     * @param t an error or exception in the Java language
+     */
+    public void throwException(Throwable t) {
+        for (Iterator iter = exceptionListeners.iterator(); iter.hasNext();) {
+            ExceptionListener listener = (ExceptionListener) iter.next();
+            listener.exceptionThrown(t);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionHandlingSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionListener.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.exceptionHandling;
+
+/**
+ * <p><code>ExceptionListener</code> defines the way to notify a listener
+ *  that an error or exception throwable by the Java Virtual Machine
+ *  has been produced.</p>
+ * 
+ * @see Throwable
+ */
+public interface ExceptionListener {
+	/**
+	 * <p>Notifies a listener that an error or exception throwable by the Java Virtual Machine
+     *  has been produced.</p> 
+	 * 
+	 * @param t an error or exception in the Java language
+	 */
+	public void exceptionThrown(Throwable t);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/exceptionHandling/ExceptionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/BrowserControl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/BrowserControl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/BrowserControl.java	(revision 42196)
@@ -0,0 +1,226 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 18-oct-2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+ 
+/**
+* <p>A simple, static class to display a URL in the system browser.<br></p>
+*
+* <p>Under <b>Unix</b> systems, it will open one of the browser set through the
+* <b>setBrowserCommand(String)</b>. The argument of this method
+* must be a fully qualified command or one of the commands returned
+* by <b>getSupportedBrowsers()</b>.<br>By default, the browser is Firefox,
+* which is included in the list of supported browsers.<br></p>
+*
+* <p>Under <b>Windows</b>, this will bring up the default browser under windows,
+* usually either Netscape or Microsoft IE.  The default browser is
+* determined by the OS so no config is necessary.<br>This has been tested under Windows 95/98/NT/XP.</p>
+* <p>Notice that <b>you must include</b> the url type -- either "http://" or  "file://".</p>
+*
+* <p>Under <b>Mac</b>, the usability of this class is pending of test. So probably it does not work</p>
+* Examples:
+* BrowserControl.displayURL("http://www.javaworld.com")
+* BrowserControl.displayURL("file://c:\\docs\\index.html")
+* BrowserContorl.displayURL("file:///user/joe/index.html");
+*
+* @author jaume dominguez faus - jaume.dominguez@iver.es
+*/
+public class BrowserControl
+{
+	private static Logger logger = LoggerFactory.getLogger(BrowserControl.class.getName());
+	public static final String OPERA = "Opera";
+	public static final String NETSCAPE = "Netscape";
+	public static final String MOZILLA = "Mozilla";
+	public static final String GALEON = "Galeon";
+	public static final String EPIPHANY = "Epiphany";
+	public static final String FIREFOX = "Firefox";
+	public static final String KONQUEROR = "Konqueror";
+	private static String browserCommand = FIREFOX;
+	private static ArrayList supportedBrowsers;
+
+    /**
+     * Display a file in the system browser.  If you want to display a
+     * file, you must include the absolute path name.
+     *
+     * @param url the file's url (the url must start with either "http://" or  "file://").
+     */
+    public static void displayURL(String url) {
+        boolean windows = isWindowsPlatform();
+        String cmd = null;
+        try {
+        	if (windows) {
+        		// cmd = 'rundll32 url.dll,FileProtocolHandler http://...'
+        		cmd = WIN_PATH + " " + WIN_FLAG + " " + url;
+        		Process p = Runtime.getRuntime().exec(cmd);
+        	} else {
+        		url = "'" + url.replace("'", "\'") + "'";
+        		if (browserCommand.equals(NETSCAPE) ||
+        			browserCommand.equals(FIREFOX) ||
+        			browserCommand.equals(OPERA) ||
+        			browserCommand.equals(MOZILLA)) {
+        			// Under Unix, Netscape has to be running for the "-remote"
+        			// command to work.  So, we try sending the command and
+        			// check for an exit value.  If the exit command is 0,
+        			// it worked, otherwise we need to start the browser.
+        			// cmd = 'netscape -remote openURL(http://www.javaworld.com)'
+        			cmd = browserCommand.toLowerCase() + " -remote openURL\\(" + url + "\\)";
+        			Process p = exec(cmd);
+        			try
+        			{
+        				// wait for exit code -- if it's 0, command worked,
+        				// otherwise we need to start the browser up.
+        				int exitCode = p.waitFor();
+        				if (exitCode != 0)
+        				{
+        					// Command failed, start up the browser
+        					// cmd = 'netscape http://www.javaworld.com'
+        					cmd = browserCommand.toLowerCase() + " "  + url;
+        					p = exec(cmd);
+        				}
+        			} catch(InterruptedException x) {
+        				logger.info("Error bringing up browser, cmd='" + cmd + "'");
+        				logger.info("Caught: " + x);
+        			}
+        		} else if (browserCommand.equals(KONQUEROR)) {
+        			cmd = "konqueror "+ url;
+        			exec(cmd);
+        		} else if (browserCommand.equals(EPIPHANY)) {
+        			cmd = "epiphany "+ url;
+        			exec(cmd);
+        		} else {
+        			cmd = browserCommand.replaceAll("%url|%URL", url);
+        			exec(cmd);
+        		}
+
+        	}
+        } catch(IOException x) {
+            // couldn't exec browser
+        	logger.warn("Could not invoke browser, command=" + cmd);
+        	logger.info("Caught: " + x);
+        }
+
+    }
+    
+    private static Process exec(String cmd) throws IOException {
+    	logger.info(cmd);
+		return Runtime.getRuntime().exec(cmd);
+    }
+
+    /**
+     * Try to determine whether this application is running under Windows
+     * or some other platform by examing the "os.name" property.
+     *
+     * @return true if this application is running under a Windows OS
+     */
+    public static boolean isWindowsPlatform()
+    {
+        String os = System.getProperty("os.name");
+        if ( os != null && os.startsWith(WIN_ID))
+            return true;
+        else
+            return false;
+    }
+
+
+    public static void setBrowserCommand(String browserCommand) {
+    	BrowserControl.browserCommand = browserCommand;
+    }
+    /**
+     * Returns a list of supported browsers.
+     * @return
+     */
+    public static ArrayList getSupportedBrowsers() {
+    	if (supportedBrowsers == null) {
+    		supportedBrowsers = new ArrayList();
+    		supportedBrowsers.add(KONQUEROR);
+    		supportedBrowsers.add(FIREFOX);
+    		supportedBrowsers.add(EPIPHANY);
+    		supportedBrowsers.add(MOZILLA);
+    		supportedBrowsers.add(NETSCAPE);
+    		supportedBrowsers.add(OPERA);
+    	}
+    	return supportedBrowsers;
+    }
+    // Used to identify the windows platform.
+    private static final String WIN_ID = "Windows";
+    // The default system browser under windows.
+    private static final String WIN_PATH = "rundll32";
+    // The flag to display a url.
+    private static final String WIN_FLAG = "url.dll,FileProtocolHandler";
+    // The default browser under unix.
+//    private static final String UNIX_PATH = "netscape";
+    // The flag to display a url.
+//    private static final String UNIX_FLAG = "-remote openURL";
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/BrowserControl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberUtilities.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.sql.Types;
+
+
+public class NumberUtilities {
+	public static boolean isNumeric(int sqlType) {
+
+		switch (sqlType) {
+		case Types.DOUBLE:
+		case Types.FLOAT:
+		case Types.INTEGER:
+		case Types.SMALLINT:
+		case Types.BIGINT:
+		case Types.NUMERIC:
+		case Types.REAL:
+		case Types.TINYINT:
+			return true;
+		}
+
+		return false;
+	}
+	public static boolean isNumericInteger(int sqlType) {
+
+		switch (sqlType) {
+		
+		case Types.INTEGER:
+		case Types.SMALLINT:
+		case Types.BIGINT:
+		case Types.TINYINT:
+			return true;
+		}
+
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/search/BinarySearchUsingFirstCharacters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/search/BinarySearchUsingFirstCharacters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/search/BinarySearchUsingFirstCharacters.java	(revision 42196)
@@ -0,0 +1,480 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.search;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Vector;
+
+import org.gvsig.utils.MathExtension;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class has static methods that return items that their beginning text value matches with a text pattern. <br>
+ * It's necessary that items of the parameter array (Vector) were sort ordered according to their text value. <br>
+ * Supports Vectors with and without repeated items.
+ * 
+ * There are four methods, that are a modification of a binary search algorithm of search, getting a rank of items:
+ * <ul>
+ * <li>Considering case sensitive in the search.</li>
+ * <li>Ignoring case sensitive in the search.</li>
+ * <li>Considering case sensitive in the search and an object which implements the Comparable interface</li>
+ * <li>Ignoring case sensitive in the search, but yes an objecth which implements the Comparable interface</li>
+ * </ul>
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class BinarySearchUsingFirstCharacters {
+	/**
+	 * This method should be used when is wanted to distinguish small letters from capital letters during the search.
+	 *
+	 * It's necessary that all items of the array implement the {@link Comparable} interface.<br>
+	 * And it's also necessary that the value returned by the <i>toString()</i> method of each item (supposing
+	 *   they inherit from Object) would be the expected value user saw (that would be used to compare the items).
+	 *
+	 * @param text java.lang.String
+	 * @param sortOrderedItems java.util.Vector
+	 */
+	public synchronized static List doSearchConsideringCaseSensitive(String text, Vector sortOrderedItems) {
+		int currentIteration = 0;
+		int size = sortOrderedItems.size();
+		int maxNumberOfIterations = (int) MathExtension.log2(size);
+		int lowIndex = 0;
+		int highIndex = sortOrderedItems.size() - 1;
+		int mIndx;
+
+		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+			mIndx = ( lowIndex + highIndex ) / 2;
+
+			if ( sortOrderedItems.get( mIndx ).toString().startsWith( text ) ) {
+				lowIndex = highIndex = mIndx;
+				highIndex ++;
+
+				// Expand the rank to up
+				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().startsWith( text ) ) ) {
+					highIndex ++;
+				}
+
+				// Expand the rank to down
+				while ( ( (lowIndex - 1) > -1 ) && ( sortOrderedItems.get( (lowIndex - 1) ).toString().startsWith( text ) ) ) {
+					lowIndex --;
+				}
+
+				// It's possible that items with different case, should be between the same case, then this item will be added individually:
+				List list = new Vector(sortOrderedItems.subList(lowIndex, highIndex));
+
+				// Expand to down
+				lowIndex --;
+				while ( ( lowIndex > -1 ) && ( sortOrderedItems.get( (lowIndex ) ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					if (sortOrderedItems.get( lowIndex ).toString().startsWith( text )) {
+						list.add(0, sortOrderedItems.get( lowIndex ));
+					}
+
+					lowIndex --;
+				}
+
+				// Expand to up
+				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					if (sortOrderedItems.get( highIndex ).toString().startsWith( text )) {
+						list.add(list.size(), sortOrderedItems.get( highIndex ));
+					}
+
+					highIndex ++;
+				}
+
+				// Returns all items in the rank
+				return list; // Breaks the loop
+			}
+			else {
+				if ( sortOrderedItems.get( mIndx ).toString().compareTo( text ) > 0 ) {
+					highIndex = mIndx - 1;
+				}
+				else {
+					lowIndex = mIndx + 1;
+				}
+			}
+
+			currentIteration ++;
+		}
+
+		// If no item has been found -> return null
+		return null;
+	}
+
+	/**
+	 * This method should be used when is wanted not to distinguish small letters from capital letters during the search.
+	 *
+	 * It's necessary that all items of the array implement the {@link Comparable} interface.<br>
+	 * And it's also necessary that the value returned by the <i>toString()</i> method of each item (supposing
+	 *   they inherit from Object) would be the expected value user saw (that would be used to compare the items).
+	 *
+	 * In this particular situation, it's supposed that the vector is sort ordered according the default algorithm of Java; this has the problem that
+	 *   it doesn't consideres the special characters and the orthographic rules of languages that aren't English, and then, for a particular
+	 *   <i>text</i> search, an incorrect result could be obtained. The solution decided for this problem has been to modify the algorithm, for seach
+	 *   into two ranks.
+	 *
+	 * @param text java.lang.String
+	 * @param sortOrderedItems java.util.Vector
+	 */
+	public synchronized static List doSearchIgnoringCaseSensitive(String text, Vector sortOrderedItems) {
+		int currentIteration = 0;
+		int size = sortOrderedItems.size();
+		int maxNumberOfIterations = (int) MathExtension.log2(size);
+		int lowIndex = 0;
+		int highIndex = sortOrderedItems.size() - 1;
+		int mIndx;
+		List list = null;
+		List list2 = null;
+
+		// FIRST RANK
+		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+			mIndx = ( lowIndex + highIndex ) / 2;
+
+			if ( sortOrderedItems.get( mIndx ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) {
+				lowIndex = highIndex = mIndx;
+				highIndex ++;
+
+				// Expand the rank to up
+				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					highIndex ++;
+				}
+
+				// Expand the rank to down
+				while ( ( (lowIndex - 1) > -1 ) && ( sortOrderedItems.get( (lowIndex - 1) ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					lowIndex --;
+				}
+
+				// Returns all items in the rank
+				list = Arrays.asList((sortOrderedItems.subList(lowIndex, highIndex)).toArray());
+				break;
+			}
+			else {
+				if ( sortOrderedItems.get( mIndx ).toString().compareTo( text ) > 0 ) {
+					highIndex = mIndx - 1;
+				}
+				else {
+					lowIndex = mIndx + 1;
+				}
+			}
+
+			currentIteration ++;
+		}
+
+		// SECOND RANK
+		currentIteration = 0;
+		lowIndex = 0;
+		highIndex = sortOrderedItems.size() - 1;
+
+		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+			mIndx = ( lowIndex + highIndex ) / 2;
+
+			if ( sortOrderedItems.get( mIndx ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) {
+				lowIndex = highIndex = mIndx;
+				highIndex ++;
+
+				// Expand the rank to up
+				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					highIndex ++;
+				}
+
+				// Expand the rank to down
+				while ( ( (lowIndex - 1) > -1 ) && ( sortOrderedItems.get( (lowIndex - 1) ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					lowIndex --;
+				}
+
+				// Returns all items in the rank
+				list2 = Arrays.asList((sortOrderedItems.subList(lowIndex, highIndex)).toArray()); // Breaks the loop
+
+				if (list == null)
+					return list2;
+				else {
+					if (list2 == null)
+						return null;
+
+					Object obj;
+					int j;
+
+					list = new ArrayList(list.subList(0, list.size()));
+
+					for (int i = 0; i < list2.size(); i ++) {
+						obj = list2.get(i);
+
+						// Don't add items which are already in the list
+						if (!list.contains(obj)) {
+							// Adds in sort order the new item:
+							for (j = 0; j < list.size(); j ++) {
+								if (list.get(j).toString().compareTo(obj.toString()) > 0)
+									break;
+							}
+
+							list.add(j, obj);
+						}
+					}
+
+					// It's possible that some elements at the end wouldn't be found -> another small search
+					size = list.size();
+					if (size == 0) {
+						j = 0;
+					}
+					else {
+						j = sortOrderedItems.indexOf(list.get(size - 1));
+					}
+
+					j++;
+
+					if (j < sortOrderedItems.size()) {
+						do {
+							obj = sortOrderedItems.get( j );
+
+							if (obj.toString().toLowerCase().startsWith( text.toLowerCase())) {
+								list.add(size, obj);
+							}
+
+							j++;
+						}
+						while (j < sortOrderedItems.size());
+					}
+
+					return list;
+				}
+			}
+			else {
+				if ( sortOrderedItems.get( mIndx ).toString().toLowerCase().compareTo( text.toLowerCase() ) > 0 ) {
+					highIndex = mIndx - 1;
+				}
+				else {
+					lowIndex = mIndx + 1;
+				}
+			}
+
+			currentIteration ++;
+		}
+
+		return null;
+	}
+
+//	/** THIS VERSION FAILURES IN SOME PARTICULAR SITUATIONS
+//	 * This method should be used when is wanted distinguish small letters from capital letters during the search, and the comparation of items
+//	 *   done according an algorithm we define.
+//	 *
+//	 * And it's also necessary that the value returned by the <i>toString()</i> method of each item (supposing
+//	 *   they inherit from Object) would be the expected value user saw (that would be used to compare the items).
+//	 *
+//	 * @param text java.lang.String
+//	 * @param sortOrderedItems java.util.Vector
+//	 * @param comp An Comparator object which implements the <i><b>compareTo()</b><i>  method.
+//	 */
+//	public synchronized static List doSearchConsideringCaseSensitive(String text, Vector sortOrderedItems, Comparator comp) {
+//		int currentIteration = 0;
+//		int size = sortOrderedItems.size();
+//		int maxNumberOfIterations = (int) MathExtension.log2(size);
+//		int lowIndex = 0;
+//		int highIndex = sortOrderedItems.size() - 1;
+//		int mIndx;
+//
+//
+//		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+//			mIndx = ( lowIndex + highIndex ) / 2;
+//
+//			if ( sortOrderedItems.get( mIndx ).toString().startsWith( text ) ) {
+//				lowIndex = highIndex = mIndx;
+//				highIndex ++;
+//
+//				// Expand the rank to up
+//				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().startsWith( text ) ) ) {
+//					highIndex ++;
+//				}
+//
+//				// Expand the rank to down
+//				while ( ( (lowIndex - 1) > -1 ) && ( sortOrderedItems.get( (lowIndex - 1) ).toString().startsWith( text ) ) ) {
+//					lowIndex --;
+//				}
+//
+//				// It's possible that items with different case, should be between the same case, then this item will be added individually:
+//				List list = new Vector(sortOrderedItems.subList(lowIndex, highIndex));
+//
+//
+//				// Expand to down
+//				lowIndex --;
+//				while ( ( lowIndex > -1 ) && ( sortOrderedItems.get( (lowIndex ) ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+//					if (sortOrderedItems.get( lowIndex ).toString().startsWith( text )) {
+//						list.add(0, sortOrderedItems.get( lowIndex ));
+//					}
+//
+//					lowIndex --;
+//				}
+//
+//				// Expand to up
+//				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+//					if (sortOrderedItems.get( highIndex ).toString().startsWith( text )) {
+//						list.add(list.size(), sortOrderedItems.get( highIndex ));
+//					}
+//
+//					highIndex ++;
+//				}
+//
+//				// Returns all items in the rank
+//				return list; // Breaks the loop
+//			}
+//			else {
+//				if ( comp.compare(sortOrderedItems.get( mIndx ), text ) > 0 ) {
+//					highIndex = mIndx - 1;
+//				}
+//				else {
+//					lowIndex = mIndx + 1;
+//				}
+//			}
+//
+//			currentIteration ++;
+//		}
+//
+//		// If no item has been found -> return null
+//		return null;
+//	}
+
+	/**
+	 * This method should be used when is wanted distinguish small letters from capital letters during the search, and the comparation of items
+	 *   done according an algorithm we define.
+	 *
+	 * And it's also necessary that the value returned by the <i>toString()</i> method of each item (supposing
+	 *   they inherit from Object) would be the expected value user saw (that would be used to compare the items).
+	 *
+	 * @param text java.lang.String
+	 * @param sortOrderedItems java.util.Vector
+	 * @param comp An Comparator object which implements the <i><b>compareTo()</b><i>  method.
+	 */
+	public synchronized static List doSearchConsideringCaseSensitive(String text, Vector sortOrderedItems, Comparator comp) {
+		List results_list = doSearchIgnoringCaseSensitive(text, sortOrderedItems, comp);
+
+		if (results_list == null)
+			return null;
+
+		List results = new ArrayList();
+
+		for (int i = 0; i < (results_list.size()); i++) {
+			if (results_list.get(i).toString().startsWith(text)) {
+				results.add(results_list.get(i));
+			}
+		}
+
+		return results;
+	}
+
+	/**
+	 * This method should be used when is wanted not to distinguish small letters from capital letters during the search, and the comparation of items
+	 *   done according an algorithm we define.
+	 *
+	 * And it's also necessary that the value returned by the <i>toString()</i> method of each item (supposing
+	 *   they inherit from Object) would be the expected value user saw (that would be used to compare the items).
+	 *
+	 * @param text java.lang.String
+	 * @param sortOrderedItems java.util.Vector
+	 * @param comp An Comparator object which implements the <i><b>compareTo()</b><i>  method.
+	 */
+	public synchronized static List doSearchIgnoringCaseSensitive(String text, Vector sortOrderedItems, Comparator comp) {
+		int currentIteration = 0;
+		int size = sortOrderedItems.size();
+		int maxNumberOfIterations = (int) MathExtension.log2(size);
+		int lowIndex = 0;
+		int highIndex = sortOrderedItems.size() - 1;
+		int mIndx;
+
+		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+			mIndx = ( lowIndex + highIndex ) / 2;
+
+			if ( sortOrderedItems.get( mIndx ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) {
+				lowIndex = highIndex = mIndx;
+				highIndex ++;
+
+				// Expand the rank to up
+				while ( ( highIndex < size ) && ( sortOrderedItems.get( highIndex ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					highIndex ++;
+				}
+
+				// Expand the rank to down
+				while ( ( (lowIndex - 1) > -1 ) && ( sortOrderedItems.get( (lowIndex - 1) ).toString().toLowerCase().startsWith( text.toLowerCase() ) ) ) {
+					lowIndex --;
+				}
+
+				// Returns all items in the rank
+				return Arrays.asList((sortOrderedItems.subList(lowIndex, highIndex)).toArray()); // Breaks the loop
+			}
+			else {
+				if ( comp.compare(sortOrderedItems.get( mIndx ).toString().toLowerCase(), text.toLowerCase() ) > 0 ) {
+					highIndex = mIndx - 1;
+				}
+				else {
+					lowIndex = mIndx + 1;
+				}
+			}
+
+			currentIteration ++;
+		}
+
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/search/BinarySearchUsingFirstCharacters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/DefaultListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/DefaultListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/DefaultListModel.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.listManager;
+
+import java.util.Vector;
+
+import javax.swing.AbstractListModel;
+/**
+ * Implementaci�n por defecto de ListModel
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class DefaultListModel extends AbstractListModel implements ListModel {
+    private Vector v;
+    private boolean down=true;
+    /**
+     * Crea un nuevo DefaultListModel con un par�metro que indica si la lista
+     * se crea en el orden que se van introcuciendo(true) o al contrario.
+     */
+    public DefaultListModel(boolean down) {
+        v = new Vector();
+        this.down=down;
+    }
+
+    /**
+     * @see org.gvsig.utils.listManager.ListModel#remove(int)
+     */
+    public Object remove(int i) throws ArrayIndexOutOfBoundsException {
+        Object o = v.remove(i);
+        super.fireIntervalRemoved(this, i, i);
+
+        return o;
+    }
+
+    /**
+     * @see org.gvsig.utils.listManager.ListModel#insertAt(int,
+     *      java.lang.Object)
+     */
+    public void insertAt(int i, Object o) {
+        v.add(i, o);
+        super.fireIntervalAdded(this, i, i);
+    }
+
+    /**
+     * @see javax.swing.ListModel#getSize()
+     */
+    public int getSize() {
+        return v.size();
+    }
+
+    /**
+     * @see javax.swing.ListModel#getElementAt(int)
+     */
+    public Object getElementAt(int arg0) {
+        return v.get(arg0);
+    }
+
+    /**
+     * @see org.gvsig.utils.listManager.ListModel#add(java.lang.Object)
+     */
+    public void add(Object o) {
+      if (down) {
+        v.add(o);
+        super.fireIntervalAdded(this, v.size() - 1, v.size() - 1);
+      } else {
+        insertAt(0, o);
+      }
+    }
+
+	/**
+	 * @see org.gvsig.utils.listManager.ListModel#getObjects()
+	 */
+	public Vector getObjects() {
+		return v;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/DefaultListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManager.java	(revision 42196)
@@ -0,0 +1,285 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.listManager;
+
+import java.util.ResourceBundle;
+
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+
+/**
+ * Control de gesti�n de una lista
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ListManager {
+    private JScrollPane jScrollPane = null;
+    private JList list = null;
+    private JButton btnAdd = null;
+    private JButton btnDel = null;
+    private JPanel jPanel = null;
+    private JButton btnProperties = null;
+    private JButton btnUp = null;
+    private JButton btnDown = null;
+    private ListModel listModel;// = new DefaultListModel();
+    private ListManagerListener listener;
+    private ResourceBundle bundle;
+
+    /**
+     * This is the default constructor
+     * down==true if list is in order.
+     */
+    public ListManager(boolean down) {
+        super();
+        listModel = new DefaultListModel(down);
+    }
+
+    /**
+     * This method initializes this
+     */
+    public void initialize() {
+        actualizar();
+    }
+
+    /**
+     * Obtiene la traducci�n de una palabra
+     *
+     * @param key Clave en el resource bundle
+     *
+     * @return valor de la clave
+     */
+    private String getText(String key) {
+        if (bundle == null) {
+            return key;
+        }
+
+        String ret = bundle.getString(key);
+
+        if (ret == null) {
+            ret = key;
+        }
+
+        return ret;
+    }
+
+    /**
+     * Habilita/Deshabilita los botones
+     */
+    private void actualizar() {
+        int index = list.getSelectedIndex();
+
+        if (index != -1) {
+            if (btnUp != null) {
+                btnUp.setEnabled(index > 0);
+            }
+
+            if (btnDown != null) {
+                btnDown.setEnabled(index < (listModel.getSize() - 1));
+            }
+
+            if (btnDel != null) {
+                btnDel.setEnabled(true);
+            }
+
+            if (btnProperties != null) {
+                btnProperties.setEnabled(listModel.getElementAt(index) instanceof Propertiable);
+            }
+        } else {
+            if (btnUp != null) {
+                btnUp.setEnabled(false);
+            }
+
+            if (btnDown != null) {
+                btnDown.setEnabled(false);
+            }
+
+            if (btnDel != null) {
+                btnDel.setEnabled(false);
+            }
+
+            if (btnProperties != null) {
+                btnProperties.setEnabled(false);
+            }
+        }
+    }
+
+    /**
+     * This method initializes list
+     *
+     * @param list DOCUMENT ME!
+     */
+    public void setList(JList list) {
+        this.list = list;
+        list.setModel(listModel);
+        list.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+                public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+                    actualizar();
+                }
+            });
+    }
+
+    /**
+     * This method initializes btnAdd
+     *
+     * @param btn DOCUMENT ME!
+     */
+    public void setBtnAdd(JButton btn) {
+        btnAdd = btn;
+        btnAdd.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    Object[] objs = listener.addObjects();
+
+                    for (int i = 0; i < objs.length; i++) {
+                        listModel.add(objs[i]);
+                    }
+                    actualizar();
+                }
+            });
+    }
+
+    /**
+     * This method initializes btnDel
+     *
+     * @param btn DOCUMENT ME!
+     */
+    public void setBtnDel(JButton btn) {
+        btnDel = btn;
+        btnDel.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    int i = list.getSelectedIndex();
+                    listModel.remove(i);
+
+                    if (i < listModel.getSize()) {
+                        list.setSelectedIndex(i);
+                    }
+
+                    actualizar();
+                }
+            });
+    }
+
+    /**
+     * This method initializes btnProperties
+     *
+     * @param btn DOCUMENT ME!
+     */
+    public void setBtnProperties(JButton btn) {
+        btnProperties = btn;
+        btnProperties.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    int index = list.getSelectedIndex();
+                    Object prop = listener.getProperties(listModel.getElementAt(
+                                index));
+                    ((Propertiable) listModel.getElementAt(index)).setProperties(prop);
+                    list.repaint();
+                }
+            });
+    }
+
+    /**
+     * This method initializes btnUp
+     *
+     * @param btn DOCUMENT ME!
+     */
+    public void setBtnUp(JButton btn) {
+        btnUp = btn;
+        btnUp.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    int index = list.getSelectedIndex();
+                    Object o1=listModel.getElementAt(index-1);
+                    Object o2=listModel.getElementAt(index);
+                    listModel.remove(index-1);
+                    listModel.insertAt(index-1,o2);
+                    listModel.remove(index);
+                    listModel.insertAt(index,o1);
+                    list.setSelectedIndex(index - 1);
+                }
+            });
+    }
+
+    /**
+     * This method initializes btnDown
+     *
+     * @param btn DOCUMENT ME!
+     */
+    public void setBtnDown(JButton btn) {
+        btnDown = btn;
+        btnDown.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    int index = list.getSelectedIndex();
+                    Object o = listModel.remove(index);
+                    listModel.insertAt(index + 1, o);
+                    list.setSelectedIndex(index + 1);
+                }
+            });
+    }
+
+    /**
+     * Obtiene el listModel
+     *
+     * @return Returns the listModel.
+     */
+    public ListModel getListModel() {
+        return listModel;
+    }
+
+    /**
+     * Establece el listModel
+     *
+     * @param listModel The listModel to set.
+     */
+    public void setListModel(ListModel listModel) {
+        this.listModel = listModel;
+    }
+
+    /**
+     * Obtiene el listener de eventos del control
+     *
+     * @return Returns the listener.
+     */
+    public ListManagerListener getListener() {
+        return listener;
+    }
+
+    /**
+     * Establece el listener de eventos del control
+     *
+     * @param listener The listener to set.
+     */
+    public void setListener(ListManagerListener listener) {
+        this.listener = listener;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param bundle The bundle to set.
+     */
+    public void setBundle(ResourceBundle bundle) {
+        this.bundle = bundle;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/Propertiable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/Propertiable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/Propertiable.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.listManager;
+
+/**
+ * Indica si este objeto admite alg�n tipo de propiedad. De los objetos que se
+ * a�aden al listManager, los que implementan esta interfaz tendr�n el boton
+ * "Propiedades" activo
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface Propertiable {
+    /**
+     * Establece la propiedad del elemento de la lista. Como esta propiedad se
+     * establece por medio de la implementaci�n de la interfaz
+     * ListManagerListener, que implementa el usuario, en la implementaci�n de
+     * esta interfaz se sabr� qu� clase tiene el objeto que se pasa como
+     * par�metro.
+     *
+     * @param o El objeto que se devuelve en el m�todo getProperties de
+     *        ListManagerListener
+     */
+    public void setProperties(Object o);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/Propertiable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManagerListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManagerListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManagerListener.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.listManager;
+
+/**
+ * Interfaz listener de los eventos que lanza el control listManager
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface ListManagerListener {
+    /**
+     * Invocado cuando se pulsa el bot�n de a�adir, deber� retornar el objeto
+     * que se a�ade y se mostrar� en la lista el resultado de su m�todo
+     * toString(). Si implementa la interfaz Propertiable se habilitar� el
+     * control Properties cuando se seleccione dicho elemento
+     *
+     * @return Objetos que se a�ade.
+     */
+    public Object[] addObjects();
+
+    /**
+     * Invocado cuando se selecciona un elemento Propertiable de la lista y
+     * luego se pincha en el boton de propiedades
+     *
+     * @param selected Objeto seleccionado
+     *
+     * @return retornar� las propiedades de dicho objeto
+     */
+    public Object getProperties(Object selected);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListManagerListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListModel.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.listManager;
+
+import java.util.Vector;
+
+/**
+ * Modelo del control ListManager
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface ListModel extends javax.swing.ListModel {
+	/**
+	 * Removes the element at the specified position in this Vector. shifts any
+	 * subsequent elements to the left (subtracts one from their indices).
+	 * Returns the element that was removed from the Vector.
+	 *
+	 * @param i �ndice del elemento que se quiere eliminar
+	 *
+	 * @return Objeto eliminado
+	 *
+	 * @throws ArrayIndexOutOfBoundsException Si el �ndice est� fuera del array
+	 */
+	public Object remove(int i) throws ArrayIndexOutOfBoundsException;
+
+	/**
+	 * Inserts the specified element at the specified position in this Vector.
+	 * Shifts the element currently at that position (if any) and any
+	 * subsequent elements to the right (adds one to their indices).
+	 *
+	 * @param i index at which the specified element is to be inserted.
+	 * @param o element to be inserted.
+	 */
+	public void insertAt(int i, Object o);
+
+	/**
+	 * Appends the specified element to the end of this Vector
+	 *
+	 * @param o element to be appended to this Vector
+	 */
+	public void add(Object o);
+
+	/**
+	 * Obtains the objects that are in the model
+	 * @return Vector with the objetos
+	 */
+	public Vector getObjects();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/listManager/ListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ImageFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ImageFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ImageFilter.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 19-oct-2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils;
+
+/**
+ * @author FJP
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Generation - Code and Comments
+ */
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+/*
+ * ImageFilter.java
+ * 
+ */
+public class ImageFilter extends FileFilter
+{
+	//Accept all directories and all gif, jpg, tiff, or png files.
+	public boolean accept(File f)
+	{
+		if (f.isDirectory()) { 
+			return true; }
+		String extension = Utils.getExtension(f);
+		if (extension != null) 
+		{
+			if (extension.equals(Utils.tiff) || extension.equals(Utils.tif) || 
+					extension.equals(Utils.gif) || extension.equals(Utils.jpeg) || 
+					extension.equals(Utils.jpg) || extension.equals(Utils.png))
+			{
+				return true;
+			} 
+			else
+			{
+				return false;
+			}
+		}
+		return false; } //The description of this filter
+
+	public String getDescription() { return "Just Images"; }
+	} 
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ImageFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IDescriptableException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IDescriptableException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IDescriptableException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: IDescriptableException.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-09-21 17:04:52  azabala
+* First version in cvs
+*
+*
+*/
+package org.gvsig.utils;
+
+/**
+ * <p>All specialized exceptions that can offer more information about
+ *  their cause should implement this interface to add the type that identifies it.</p>
+ * 
+ * @author azabala
+ */
+public interface IDescriptableException {
+	/**
+	 * <p>Gets the exception type which caused this one and has detailed information about the causes.</p>
+	 * 
+	 * @return the exception type which caused this one and has detailed information about the causes
+	 */
+	public ExceptionDescription getExceptionType();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/IDescriptableException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/stringNumberUtilities/StringNumberUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/stringNumberUtilities/StringNumberUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/stringNumberUtilities/StringNumberUtilities.java	(revision 42196)
@@ -0,0 +1,371 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.stringNumberUtilities;
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class has methods for verify if an string is a number, and which kind of number.
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class StringNumberUtilities {
+	
+	/**
+	 * Returns true if the word is a number; else returns false
+	 * 
+	 * @param word An string
+	 * @return A boolean value
+	 */	
+	public static boolean isNumber(String word) {
+		return isRealNumberWithRealExponent(word);
+	}
+	
+	/**
+	 * Returns true if the word is a natural number; else returns false
+	 * 
+	 * @param word An string
+	 * @return A boolean value
+	 */
+	public static boolean isNaturalNumber(String word) {
+		// Remove all spaces and tabs at beginning and end
+		word = word.trim();
+		
+		// If no word
+		if (word.length() == 0)
+			return false;
+
+		// If first symbol is '+'
+		if (word.charAt(0) == '+')
+			word = word.substring(1, word.length());
+		
+		if (word.length() == 0)
+			return false;
+		
+		// Analyse the word
+		for (int i = 0; i < word.length(); i++) {
+			switch (word.charAt(i)) {
+				case '0': case '1': case '2': case '3': case '4':
+				case '5': case '6': case '7': case '8': case '9':
+					// do nothing (continue)
+					break;
+				default:
+					return false;
+			}
+		}
+		
+		return true;
+	}
+
+	/**
+	 * Returns true if the word is an integer number; else returns false
+	 * 
+	 * If it's a natural number, it's an integer number
+	 * 
+	 * @param word An string
+	 * @return A boolean value
+	 */
+	public static boolean isIntegerNumber(String word) {
+		// Remove all spaces and tabs at beginning and end
+		word = word.trim();
+		
+		// If no word
+		if (word.length() == 0)
+			return false;
+
+		// Try to extract the natural number
+		if ((word.charAt(0) == '-') || (word.charAt(0) == '+'))
+			word = word.substring(1, word.length());
+		
+		return isNaturalNumber(word);
+	}
+	
+	/**
+	 * Returns true if the word is a real number; else returns false
+	 * It's supposed that '.' is the symbol for separate integer from decimal part
+	 *
+	 * If it's a natural or integer, it's a real number
+	 * 
+	 * @param word An string
+	 * @return A boolean value
+	 */
+	public static boolean isRealNumber(String word) {
+		// Remove all spaces and tabs at beginning and end
+		word = word.trim();
+		
+		int numberOfPoints = 0;
+		
+		// If no word
+		if (word.length() == 0)
+			return false;
+	
+		// Try to remove the sign of the number
+		if ((word.charAt(0) == '-') || (word.charAt(0) == '+'))
+			word = word.substring(1, word.length());
+		
+		if (word.length() == 0)
+			return false;
+		
+		// Analize the word
+		for (int i = 0; i < word.length(); i++) {
+			switch (word.charAt(i)) {
+				case '0': case '1': case '2': case '3': case '4':
+				case '5': case '6': case '7': case '8': case '9':
+					// do nothing (continue)
+					break;
+				case '.':
+					// If there was another point -> fail
+					if (numberOfPoints == 1)
+						return false;
+					else
+						numberOfPoints ++;
+					
+					break;
+				default:
+					return false;
+			}
+		}
+		
+		return true;
+	}
+	
+	
+	/**
+	 * Returns true if the word is a real number with or without the 'E' (or 'e') symbol for the exponent; else returns false <br>
+	 * It's supposed that '.' is the symbol for separate integer from decimal part in the base. <br>
+	 * The exponent must be an integer number
+	 * 
+	 * If it's a natural, integer or real number, it's a real number with integer exponent
+	 *  
+	 * @param word An string
+	 * @return A boolean value
+	 */
+	public static boolean isRealNumberWithIntegerExponent(String word) {
+		// Remove all spaces and tabs at beginning and end
+		word = word.trim();
+		
+		int numberOfPoints = 0;
+		
+		// If no word
+		if (word.length() == 0)
+			return false;
+	
+		// Try to remove the sign of the number
+		if ((word.charAt(0) == '-') || (word.charAt(0) == '+'))
+			word = word.substring(1, word.length());
+
+		if (word.length() == 0)
+			return false;
+		
+		// Analize the word
+		int i = 0;
+//		for (int i = 0; i < word.length(); i++) {
+		while ((i < word.length()) && (Character.toUpperCase(word.charAt(i)) != 'E')) {
+			switch (word.charAt(i)) {
+				case '0': case '1': case '2': case '3': case '4':
+				case '5': case '6': case '7': case '8': case '9':
+					// do nothing (continue)
+					break;
+				case '.':
+					// If there was another point -> fail
+					if (numberOfPoints == 1)
+						return false;
+					else
+						numberOfPoints ++;
+					
+					break;
+				default:
+					return false;
+			}
+			
+			i++;
+		}
+		
+		if (i == word.length())
+			return true;
+		
+		numberOfPoints = 0;
+		
+		// Jump the symbol E
+		i++;
+		
+		if (i == word.length())
+			return false;
+
+		// Try to remove the sign of the number
+		if ((word.charAt(i) == '-') || (word.charAt(i) == '+')) {
+			word = word.substring(++i, word.length());
+			i = 0;
+		}
+		
+		if (word.length() == 0)
+			return false;
+		
+		while (i < word.length()) {
+			switch (word.charAt(i)) {
+				case '0': case '1': case '2': case '3': case '4':
+				case '5': case '6': case '7': case '8': case '9':
+					// do nothing (continue)
+					break;
+				default:
+					return false;
+			}
+			i++;
+		}
+		
+		return true;
+	}
+	
+	
+	/**
+	 * Returns true if the word is a real number with or without the 'E' (or 'e') symbol for the exponent; else returns false
+	 * It's supposed that '.' is the symbol for separate integer from decimal part, in the base and the exponent of the number
+	 * 
+	 * If it's a natural, integer, real number or real number with integer exponent, it's a real number with real exponent
+	 *  
+	 * @param word An string
+	 * @return A boolean value
+	 */
+	public static boolean isRealNumberWithRealExponent(String word) {
+		// Remove all spaces and tabs at beginning and end
+		word = word.trim();
+		
+		int numberOfPoints = 0;
+		
+		// If no word
+		if (word.length() == 0)
+			return false;
+	
+		// Try to remove the sign of the number
+		if ((word.charAt(0) == '-') || (word.charAt(0) == '+'))
+			word = word.substring(1, word.length());
+		
+		if (word.length() == 0)
+			return false;
+		
+		// Analize the word
+		int i = 0;
+//		for (int i = 0; i < word.length(); i++) {
+		while ((i < word.length()) && (Character.toUpperCase(word.charAt(i)) != 'E')) {
+			switch (word.charAt(i)) {
+				case '0': case '1': case '2': case '3': case '4':
+				case '5': case '6': case '7': case '8': case '9':
+					// do nothing (continue)
+					break;
+				case '.':
+					// If there was another point -> fail
+					if (numberOfPoints == 1)
+						return false;
+					else
+						numberOfPoints ++;
+					
+					break;
+				default:
+					return false;
+			}
+			
+			i++;
+		}
+		
+		if (i == word.length())
+			return true;
+		
+		numberOfPoints = 0;
+		
+		// Jump the symbol E
+		i++;
+		
+		if (i == word.length())
+			return false;
+
+		// Try to remove the sign of the number
+		if ((word.charAt(i) == '-') || (word.charAt(i) == '+')) {
+			word = word.substring(++i, word.length());
+			i = 0;
+		}
+		
+		if (word.length() == 0)
+			return false;
+		
+		while (i < word.length()) {
+			switch (word.charAt(i)) {
+				case '0': case '1': case '2': case '3': case '4':
+				case '5': case '6': case '7': case '8': case '9':
+					// do nothing (continue)
+					break;
+				case '.':
+					// If there was another point -> fail
+					if (numberOfPoints == 1)
+						return false;
+					else
+						numberOfPoints ++;
+					
+					break;
+				default:
+					return false;
+			}
+			i++;
+		}
+		
+		return true;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/stringNumberUtilities/StringNumberUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringComparator.java	(revision 42196)
@@ -0,0 +1,185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.text.Collator;
+import java.util.Comparator;
+
+/**
+ * Compares two chain of characters alphabetically
+ *
+ * @author Fernando Gonz�lez Cort�s
+ * @author Pablo Piqueras Bartolom�
+ */
+public class StringComparator implements Comparator {
+	protected boolean caseSensitive = true;
+	protected LocaleRules localeRules = null;
+
+    /**
+     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+     */
+    public int compare(Object o1, Object o2) {
+        String s1 = o1.toString();
+        String s2 = o2.toString();
+
+        // If localeRules is null -> use the default rules
+        if (localeRules == null) {
+        	if (caseSensitive) {
+        		return s1.compareTo(s2);
+        	}
+        	else {
+        		return s1.compareToIgnoreCase(s2);
+        	}
+        }
+        else {
+        	if (localeRules.isUseLocaleRules()) {
+        		Collator collator = localeRules.getCollator();
+        		
+        		if (caseSensitive) {
+        			return collator.compare(s1, s2);
+        		}
+        		else {
+        			//return collator.compare(s1.toLowerCase(), s2.toLowerCase());
+        			return collator.compare(s1.toUpperCase(), s2.toUpperCase());
+        		}
+        	}
+        	else {
+            	if (caseSensitive) {
+            		return s1.compareTo(s2);
+            	}
+            	else {
+            		return s1.compareToIgnoreCase(s2);
+            	}
+        	}
+        }
+    }
+
+    /**
+     * Returns if the comparator is sensitive to small and big letters
+     *
+     * @return
+     */
+    public boolean isCaseSensitive() {
+        return caseSensitive;
+    }
+
+    /**
+     * Establece la sensibilidad del comparador a las mayusculas y minusculas
+     *
+     * @param b
+     */
+    public void setCaseSensitive(boolean b) {
+        caseSensitive = b;
+    }
+    
+    /**
+     * Gets an object with the information for use the locale rules in comparation between strings. <br>
+     * <ul>
+     * <li>A boolean value -> if want or not use the locale rules</li>
+     * <li>A reference to the locale rules</li>
+     * </ul>
+     * 
+     * @return @see LocaleRules
+     */
+    public LocaleRules getLocaleRules() {
+    	return localeRules;
+    }    
+    /**
+     * Sets an object with the information for use the locale rules in comparation between strings. <br>
+     * <ul>
+     * <li>A boolean value -> if want or not use the locale rules</li>
+     * <li>A reference to the locale rules</li>
+     * </ul>
+     * 
+     * @param @see LocaleRules
+     */
+    public void setLocaleRules(LocaleRules locRules) {
+    	localeRules = locRules;
+    }
+    
+    /**
+     * Represents the information needed by <i>StringComparator</i> for use or not locale-sensitive String comparison-rules in the <b><i>compare</i></b> method
+     * 
+     * @author Pablo Piqueras Bartolom�
+     */
+    public class LocaleRules {
+    	 private boolean useLocaleRules;
+    	 private Collator _collator;
+    	 
+    	 /**
+    	  * Default constructor without parameters
+    	  */
+    	 public LocaleRules() {
+    		 useLocaleRules = false;
+    		 _collator = null;
+    	 }
+    	 
+    	 /**
+    	  * Default constructor with two parameters
+    	  * 
+    	  * @param b Use locale rules
+    	  * @param collator A reference to an object configurated for locale-sensitive String comparison
+    	  */
+    	 public LocaleRules(boolean b, Collator collator) {
+    		 useLocaleRules = b;
+    		 _collator = collator;
+    	 }
+    	 
+ 		/**
+ 		 * Gets the value of the inner attribute <i>_collator</i>
+ 		 * 
+ 		 * @return Returns A reference to an object configurated for locale-sensitive String comparison
+ 		 */
+ 		public Collator getCollator() {
+ 			return _collator;
+ 		}
+
+ 		/**
+ 		 * Sets a value to the inner attribute <i>_collator</i>
+ 		 * 
+ 		 * @param collator A reference to an object configurated for locale-sensitive String comparison
+ 		 */
+ 		public void setCollator(Collator collator) {
+ 			this._collator = collator;
+ 		}
+
+		/**
+		 * Gets the value of the inner attribute <i>useLocaleRules</i>
+		 * 
+		 * @return Returns the useLocaleRules.
+		 */
+		public boolean isUseLocaleRules() {
+			return useLocaleRules;
+		}
+
+		/**
+		 * Sets a value to the inner attribute <i>useLocaleRules</i>
+		 * 
+		 * @param useLocaleRules The useLocaleRules to set.
+		 */
+		public void setUseLocaleRules(boolean useLocaleRules) {
+			this.useLocaleRules = useLocaleRules;
+		}
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/StringComparator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SimpleFileFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SimpleFileFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SimpleFileFilter.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+
+/**
+ * A simple file filter implementation that allow to specify one or more file
+ * extensions
+ *
+ * @author wolf
+ */
+public class SimpleFileFilter extends FileFilter implements java.io.FileFilter {
+    String[] extensions;
+    String description;
+
+    public SimpleFileFilter(String extension, String description) {
+        this.extensions = new String[] { extension };
+        this.description = description;
+    }
+
+    public SimpleFileFilter(String[] extensions, String description) {
+        this.extensions = extensions;
+        this.description = description;
+    }
+
+    /**
+     * @see javax.swing.filechooser.FileFilter#accept(java.io.File)
+     */
+    public boolean accept(File f) {
+        if (f.isDirectory()) {
+            return true;
+        }
+
+        String extension = FileUtils.getFileExtension(f);
+
+        for (int i = 0; i < extensions.length; i++) {
+            if (extension.equals(extensions[i])) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * @see javax.swing.filechooser.FileFilter#getDescription()
+     */
+    public String getDescription() {
+        return description;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SimpleFileFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExceptionDescription.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExceptionDescription.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExceptionDescription.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: ExceptionDescription.java 29631 2009-06-29 16:56:19Z jpiera $
+ * $Log$
+ * Revision 1.2  2006-09-22 08:08:04  ldiaz
+ * layerName y driverName gestionados/almacenados desde esta clase
+ *
+ * Revision 1.1  2006/09/21 17:04:52  azabala
+ * First version in cvs
+ *
+ *
+ */
+package org.gvsig.utils;
+
+/**
+ * <p>Most exceptions produced in a layer, has common information (layer name, driver name, error description, error code).</p>
+ * 
+ * <p>An <code>ExceptionDescription</code> can provide this extra information describing the cause of the
+ *  error, and more useful information to give to the user that works with a layer.<p>
+ * 
+ * @author azabala
+ */
+public abstract class ExceptionDescription {
+	/**
+	 * <p>Code which identifies the kind of error which is the cause of this exception.</p>
+	 */
+	private int errorCode;
+
+	/**
+	 * <p>A description about the error which produced this exception.</p>
+	 */
+	private String errorDescription;
+
+	/**
+	 * <p>If this exception was produced using a driver, this attribute describes that driver.</p>
+	 */
+	private String driverName;
+
+	/**
+	 * <p>If this exception was produced using a layer, this attribute describes that layer.</p> 
+	 */
+	private String layerName;
+	
+	/**
+	 * <p>Gets the name of the driver (if a driver was using) which this exception was produced.</p>
+	 * 
+	 * @return the name of the driver (if a driver was using) which this exception was produced
+	 */	
+	public String getDriverName() {
+		return driverName;
+	}
+
+	/**
+	 * <p>Sets the name of the driver (if a driver was using) which this exception was produced.</p>
+	 * 
+	 * @param driverName the name of the driver (if a driver was using) which this exception was produced
+	 */
+	public void setDriverName(String driverName){
+		this.driverName = driverName;
+	}	
+
+	/**
+	 * <p>Gets the name of the layer (if a layer was using) with that this exception was produced.</p>
+	 * 
+	 * @return the name of the layer (if a layer was using) with that this exception was produced
+	 */
+	public String getLayerName() {
+		return driverName;
+	}
+
+	/**
+	 * <p>Sets the name of the layer (if a layer was using) with that this exception was produced.</p>
+	 * 
+	 * @param layerName the name of the layer (if a layer was using) with that this exception was produced
+	 */
+	public void setLayerName(String layerName){
+		this.layerName = layerName;
+	}	
+
+	/**
+	 * <p>Sets the name of the layer (if a layer was using) with that this exception was produced.</p>
+	 * 
+	 * @param layerName the name of the layer (if a layer was using) with that this exception was produced
+	 */
+	public ExceptionDescription() {
+	}
+
+	/**
+	 * <p>Creates a new <code>ExceptionDescription</code> with the useful values initialized.</p>
+	 * 
+	 * @param errorCode code which identifies the kind of error which is the cause of this exception
+	 * @param errorDescription description about the error which produced this exception
+	 */
+	public ExceptionDescription(int errorCode, String errorDescription) {
+		this.errorCode = errorCode;
+		this.errorDescription = errorDescription;
+	}
+
+	/**
+	 * <p>Sets the code which identifies the kind of error which is the cause of this exception.</p>
+	 * 
+	 * @param errorCode code which identifies the kind of error which is the cause of this exception
+	 */
+	public void setCode(int errorCode) {
+		this.errorCode = errorCode;
+	}
+
+	/**
+	 * <p>Sets the description about the error which produced this exception.</p>
+	 * 
+	 * @param description description about the error which produced this exception
+	 */
+	public void setDescription(String description) {
+		this.errorDescription = description;
+	}
+
+	/**
+	 * <p>Gets the code which identifies the kind of error which is the cause of this exception.</p>
+	 * 
+	 * @return code which identifies the kind of error which is the cause of this exception
+	 */
+	public int getErrorCode() {
+		return errorCode;
+	}
+
+	/**
+	 * <p>Gets the description about the error which produced this exception.</p>
+	 * 
+	 * @return description about the error which produced this exception
+	 */
+	public String getErrorDescription() {
+		return errorDescription;
+	}
+
+	/**
+	 * <p>Returns a message that describes the error which produced this exception, formatted in HTML code.</p>
+	 * 
+	 * @return message that describes the error which produced this exception, formatted in HTML code
+	 */
+	public abstract String getHtmlErrorMessage();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/ExceptionDescription.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/CompareLists.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/CompareLists.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/CompareLists.java	(revision 42196)
@@ -0,0 +1,208 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.util.Comparator;
+import java.util.List;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * This class has methods to compare lists of objects
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class CompareLists {
+	/**
+	 * Compares two lists of elements, using the value returned of the <i><b>toString()</b></i> method
+	 *   of each element. <br>
+	 * Each element must also implement the {@link Comparable} interface. <br>
+	 * This method considers case sensitive .
+	 * 
+	 * @param l1 First list of items. @see java.util.List
+	 * @param l2 Second list of items. @see java.util.List
+	 * @return True if the two lists have the same number of elements, and elements are in the same
+	 *   position of the two lists and have the same <i>String</i> value .
+	 */
+	public synchronized static boolean compare(List l1, List l2) {
+		// If both are null -> true; if one yes but the other no -> return false
+		if ((l1 == null) || (l2 == null)) {
+			if (l1 == l2)
+				return true;
+			else
+				return false;
+		}
+		
+		// If the length isn't equal
+		if (l1.size() != l2.size())
+			return false;
+
+		// Compares each item: must have the same value in the same position in the list
+		for (int i = 0; i < l1.size(); i++) {
+			if ( l1.get(i).toString().compareTo(l2.get(i).toString()) != 0 )
+				return false;
+		}
+		
+		return true;
+	}
+	
+	/**
+	 * Compares two lists of elements, using the value returned of the <i><b>toString()</b></i> method
+	 *   of each element. <br>
+	 * Each element must also implement the {@link Comparable} interface. <br>
+	 * This method ignores case sensitive during the comparation.
+	 * 
+	 * @param l1 First list of items. @see java.util.List
+	 * @param l2 Second list of items. @see java.util.List
+	 * @return True if the two lists have the same number of elements, and elements are in the same
+	 *   position of the two lists and have the same <i>String</i> value .
+	 */
+	public synchronized static boolean compareIgnoringCaseSensitive(List l1, List l2) {
+		// If both are null -> true; if one yes but the other no -> return false
+		if ((l1 == null) || (l2 == null)) {
+			if (l1 == l2)
+				return true;
+			else
+				return false;
+		}
+
+		// If the length isn't equal
+		if (l1.size() != l2.size())
+			return false;
+
+		// Compares each item: must have the same value in the same position in the list
+		for (int i = 0; i < l1.size(); i++) {
+			if ( l1.get(i).toString().compareToIgnoreCase(l2.get(i).toString()) != 0 )
+				return false;
+		}
+		
+		return true;
+	}
+	
+	/**
+	 * Compares two lists of elements, using the value returned of the <i><b>toString()</b></i> method
+	 *   of each element. <br>
+	 * Each element must also implement the {@link Comparable} interface. <br>
+	 * 
+	 * @param l1 First list of items. @see java.util.List
+	 * @param l2 Second list of items. @see java.util.List
+	 * @param comp A class which implements the <i><b>compare</b></i> method of the <i>Comparator</i> interface . 
+	 * @return True if the two lists have the same number of elements, and elements are in the same
+	 *   position of the two lists and have the same <i>String</i> value .
+	 */
+	public synchronized static boolean compare(List l1, List l2, Comparator comp) {
+		// If both are null -> true; if one yes but the other no -> return false
+		if ((l1 == null) || (l2 == null)) {
+			if (l1 == l2)
+				return true;
+			else
+				return false;
+		}
+
+		// If the length isn't equal
+		if (l1.size() != l2.size())
+			return false;
+
+		// Compares each item: must have the same value in the same position in the list
+		for (int i = 0; i < l1.size(); i++) {
+			if ( comp.compare(l1.get(i).toString(), (l2.get(i).toString())) != 0 )
+				return false;
+		}
+
+		return true;
+	}
+	
+	/**
+	 * Compares two lists of elements, using the value returned of the <i><b>toString()</b></i> method
+	 *   of each element. <br>
+	 * Each element must also implement the {@link Comparable} interface. <br>
+	 * This method ignores case sensitive during the comparation.
+	 * 
+	 * @param l1 First list of items. @see java.util.List
+	 * @param l2 Second list of items. @see java.util.List
+	 * @param comp A class which implements the <i><b>compare</b></i> method of the <i>Comparator</i> interface . 
+	 * @return True if the two lists have the same number of elements, and elements are in the same
+	 *   position of the two lists and have the same <i>String</i> value .
+	 */
+	public synchronized static boolean compareIgnoringCaseSensitive(List l1, List l2, Comparator comp) {
+		// If both are null -> true; if one yes but the other no -> return false
+		if ((l1 == null) || (l2 == null)) {
+			if (l1 == l2)
+				return true;
+			else
+				return false;
+		}
+
+		// If the length isn't equal
+		if (l1.size() != l2.size())
+			return false;
+
+		// Compares each item: must have the same value in the same position in the list
+		for (int i = 0; i < l1.size(); i++) {
+			if ( comp.compare(l1.get(i).toString().toLowerCase(), (l2.get(i).toString().toLowerCase())) != 0 )
+				return false;
+		}
+
+		return true;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/CompareLists.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DoubleUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DoubleUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DoubleUtilities.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: DoubleUtilities.java 29631 2009-06-29 16:56:19Z jpiera $
+ * $Log$
+ * Revision 1.3  2006-10-30 11:59:47  nacho
+ * formateado de double
+ *
+ * Revision 1.2  2006/09/13 08:10:07  jorpiell
+ * Se limita el n�mero de decimales por arriba y por abajo
+ *
+ * Revision 1.1  2006/05/16 13:02:41  jorpiell
+ * Se ha a�adido la clase DoubleUtiles, donde ha un metodo para limitar el tama�o de los decimales de un double y para quitar los "puntos" de la parte entera
+ *
+ *
+ */
+/**
+ * This class has some methods to manage "Doubles"
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class DoubleUtilities {
+	/**
+	 * Formats a double with an specified number of decimals. It 
+	 * removes the separator character of the integer part. 
+	 * @param value
+	 * Separator char of the integer part
+	 * @param decimalSeparator
+	 * Separator char of the decimal part
+	 * @param decimalsNumber
+	 * Number of decimals
+	 * @return
+	 * The formatted double
+	 */
+	public static double format(double value,
+			char decimalSeparator,
+			int decimalsNumber){
+			
+		DecimalFormat dFormat = new DecimalFormat("#");
+		DecimalFormatSymbols dFormatSymbols = new DecimalFormatSymbols();
+		
+		dFormatSymbols.setDecimalSeparator(decimalSeparator);
+		dFormat.setMaximumFractionDigits(decimalsNumber);
+		dFormat.setMaximumFractionDigits(decimalsNumber);
+		dFormat.setDecimalFormatSymbols(dFormatSymbols);
+		double d = Double.parseDouble(dFormat.format(value));
+		return Double.parseDouble(dFormat.format(value));		
+	}
+
+	/**
+	 * Formats a double with an specified number of decimals. 
+	 * @param num
+	 * Value to tail
+	 * @param n
+	 * Number of decimals
+	 * @return
+	 * The formatted double
+	 */
+    public static double format(double num, int n){
+    	long m = (long)Math.pow(10, n);
+        num *= m;
+        long aux = ((long)num);
+        num = (double)((double)aux / (double)m);
+        return num;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/DoubleUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/fileFilter/ExampleFileFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/fileFilter/ExampleFileFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/fileFilter/ExampleFileFilter.java	(revision 42196)
@@ -0,0 +1,298 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.fileFilter;
+
+/*
+ * Copyright (c) 2003 Sun Microsystems, Inc. All  Rights Reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * -Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ * 
+ * -Redistribution in binary form must reproduct the above copyright
+ *  notice, this list of conditions and the following disclaimer in
+ *  the documentation and/or other materials provided with the distribution.
+ * 
+ * Neither the name of Sun Microsystems, Inc. or the names of contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * This software is provided "AS IS," without a warranty of any kind. ALL
+ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
+ * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+ * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT
+ * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT
+ * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS
+ * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
+ * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
+ * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
+ * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN
+ * IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ * 
+ * You acknowledge that Software is not designed, licensed or intended for
+ * use in the design, construction, operation or maintenance of any nuclear
+ * facility.
+ */
+
+/*
+ * @(#)ExampleFileFilter.java	1.14 03/01/23
+ */
+import java.io.File;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import javax.swing.filechooser.FileFilter;
+
+/**
+ * A convenience implementation of FileFilter that filters out
+ * all files except for those type extensions that it knows about.
+ *
+ * Extensions are of the type ".foo", which is typically found on
+ * Windows and Unix boxes, but not on Macinthosh. Case is ignored.
+ *
+ * Example - create a new filter that filerts out all files
+ * but gif and jpg image files:
+ *
+ *     JFileChooser chooser = new JFileChooser();
+ *     ExampleFileFilter filter = new ExampleFileFilter(
+ *                   new String{"gif", "jpg"}, "JPEG & GIF Images")
+ *     chooser.addChoosableFileFilter(filter);
+ *     chooser.showOpenDialog(this);
+ *
+ * @version 1.14 01/23/03
+ * @author Jeff Dinkins
+ */
+public class ExampleFileFilter extends FileFilter {
+
+    private static String TYPE_UNKNOWN = "Type Unknown";
+    private static String HIDDEN_FILE = "Hidden File";
+
+    private Hashtable filters = null;
+    private String description = null;
+    private String fullDescription = null;
+    private boolean useExtensionsInDescription = true;
+
+    /**
+     * Creates a file filter. If no filters are added, then all
+     * files are accepted.
+     *
+     * @see #addExtension
+     */
+    public ExampleFileFilter() {
+	this.filters = new Hashtable();
+    }
+
+    /**
+     * Creates a file filter that accepts files with the given extension.
+     * Example: new ExampleFileFilter("jpg");
+     *
+     * @see #addExtension
+     */
+    public ExampleFileFilter(String extension) {
+	this(extension,null);
+    }
+
+    /**
+     * Creates a file filter that accepts the given file type.
+     * Example: new ExampleFileFilter("jpg", "JPEG Image Images");
+     *
+     * Note that the "." before the extension is not needed. If
+     * provided, it will be ignored.
+     *
+     * @see #addExtension
+     */
+    public ExampleFileFilter(String extension, String description) {
+	this();
+	if(extension!=null) addExtension(extension);
+ 	if(description!=null) setDescription(description);
+    }
+
+    /**
+     * Creates a file filter from the given string array.
+     * Example: new ExampleFileFilter(String {"gif", "jpg"});
+     *
+     * Note that the "." before the extension is not needed adn
+     * will be ignored.
+     *
+     * @see #addExtension
+     */
+    public ExampleFileFilter(String[] filters) {
+	this(filters, null);
+    }
+
+    /**
+     * Creates a file filter from the given string array and description.
+     * Example: new ExampleFileFilter(String {"gif", "jpg"}, "Gif and JPG Images");
+     *
+     * Note that the "." before the extension is not needed and will be ignored.
+     *
+     * @see #addExtension
+     */
+    public ExampleFileFilter(String[] filters, String description) {
+	this();
+	for (int i = 0; i < filters.length; i++) {
+	    // add filters one by one
+	    addExtension(filters[i]);
+	}
+ 	if(description!=null) setDescription(description);
+    }
+
+    /**
+     * Return true if this file should be shown in the directory pane,
+     * false if it shouldn't.
+     *
+     * Files that begin with "." are ignored.
+     *
+     * @see #getExtension
+     * @see FileFilter#accepts
+     */
+    public boolean accept(File f) {
+	if(f != null) {
+	    if(f.isDirectory()) {
+		return true;
+	    }
+	    String extension = getExtension(f);
+	    if(extension != null && filters.get(getExtension(f)) != null) {
+		return true;
+	    };
+	}
+	return false;
+    }
+
+    /**
+     * Return the extension portion of the file's name .
+     *
+     * @see #getExtension
+     * @see FileFilter#accept
+     */
+     public String getExtension(File f) {
+	if(f != null) {
+	    String filename = f.getName();
+	    int i = filename.lastIndexOf('.');
+	    if(i>0 && i<filename.length()-1) {
+		return filename.substring(i+1).toLowerCase();
+	    };
+	}
+	return null;
+    }
+
+    /**
+     * Adds a filetype "dot" extension to filter against.
+     *
+     * For example: the following code will create a filter that filters
+     * out all files except those that end in ".jpg" and ".tif":
+     *
+     *   ExampleFileFilter filter = new ExampleFileFilter();
+     *   filter.addExtension("jpg");
+     *   filter.addExtension("tif");
+     *
+     * Note that the "." before the extension is not needed and will be ignored.
+     */
+    public void addExtension(String extension) {
+	if(filters == null) {
+	    filters = new Hashtable(5);
+	}
+	filters.put(extension.toLowerCase(), this);
+	fullDescription = null;
+    }
+
+
+    /**
+     * Returns the human readable description of this filter. For
+     * example: "JPEG and GIF Image Files (*.jpg, *.gif)"
+     *
+     * @see setDescription
+     * @see setExtensionListInDescription
+     * @see isExtensionListInDescription
+     * @see FileFilter#getDescription
+     */
+    public String getDescription() {
+	if(fullDescription == null) {
+	    if(description == null || isExtensionListInDescription()) {
+ 		fullDescription = description==null ? "(" : description + " (";
+		// build the description from the extension list
+		Enumeration extensions = filters.keys();
+		if(extensions != null) {
+		    fullDescription += "." + (String) extensions.nextElement();
+		    while (extensions.hasMoreElements()) {
+			fullDescription += ", ." + (String) extensions.nextElement();
+		    }
+		}
+		fullDescription += ")";
+	    } else {
+		fullDescription = description;
+	    }
+	}
+	return fullDescription;
+    }
+
+    /**
+     * Sets the human readable description of this filter. For
+     * example: filter.setDescription("Gif and JPG Images");
+     *
+     * @see setDescription
+     * @see setExtensionListInDescription
+     * @see isExtensionListInDescription
+     */
+    public void setDescription(String description) {
+	this.description = description;
+	fullDescription = null;
+    }
+
+    /**
+     * Determines whether the extension list (.jpg, .gif, etc) should
+     * show up in the human readable description.
+     *
+     * Only relevent if a description was provided in the constructor
+     * or using setDescription();
+     *
+     * @see getDescription
+     * @see setDescription
+     * @see isExtensionListInDescription
+     */
+    public void setExtensionListInDescription(boolean b) {
+	useExtensionsInDescription = b;
+	fullDescription = null;
+    }
+
+    /**
+     * Returns whether the extension list (.jpg, .gif, etc) should
+     * show up in the human readable description.
+     *
+     * Only relevent if a description was provided in the constructor
+     * or using setDescription();
+     *
+     * @see getDescription
+     * @see setDescription
+     * @see setExtensionListInDescription
+     */
+    public boolean isExtensionListInDescription() {
+	return useExtensionsInDescription;
+    }
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/fileFilter/ExampleFileFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/PipeTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/PipeTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/PipeTask.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 10-nov-2006 by azabala
+ *
+ */
+package org.gvsig.utils.swing.threads;
+
+
+/**
+ * @author alzabord
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class PipeTask implements IMonitorableTask {
+
+	private IPipedTask task1;
+	private IPipedTask task2;
+	private boolean canceled = false;
+	
+	private IPipedTask currentTask = null;
+	
+	
+	public PipeTask(IPipedTask task1, IPipedTask task2){
+		this.task1 = task1;
+		this.task2 = task2;
+		this.currentTask = task1;
+	}
+	
+	
+	public int getInitialStep() {
+		return 0;
+	}
+
+	public int getFinishStep() {
+		return currentTask.getFinishStep();
+	}
+
+	public int getCurrentStep() {
+		return currentTask.getCurrentStep();
+	}
+
+	public String getStatusMessage() {
+		return currentTask.getStatusMessage();
+	}
+
+	public String getNote() {
+		if(currentTask != null){
+			return currentTask.getNote();
+		}else{
+			return "";
+		}
+	}
+
+	public boolean isDefined() {
+		return currentTask.isDefined();
+	}
+
+	public void cancel() {
+		currentTask.cancel();
+		canceled = true;
+	}
+
+	public void run() throws Exception {
+		currentTask.run();
+		if(currentTask.isCanceled())
+			return;
+		Object result = currentTask.getResult();
+		currentTask = task2;
+		currentTask.setEntry(result);
+		currentTask.run();
+	}
+
+	public boolean isCanceled() {
+		return currentTask.isCanceled();
+	}
+
+	public boolean isFinished() {
+		return task1.isFinished() && task2.isFinished();
+	}
+
+	public void finished() {
+		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/PipeTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/TaskMonitorTimerListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/TaskMonitorTimerListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/TaskMonitorTimerListener.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: TaskMonitorTimerListener.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.4  2006-11-13 20:46:37  azabala
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/06 07:29:59  jaume
+* organize imports
+*
+* Revision 1.2  2006/03/14 19:24:07  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/07 21:00:29  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.Timer;
+
+/**
+ * It receives timer events sended by a swing Timer and does:
+ * a) Reads task advances from a IMonitorableTask.
+ * b) refresh task status info of a ProgressMonitor.
+ * @author azabala
+ *
+ */
+public class TaskMonitorTimerListener implements ActionListener {
+	private IProgressMonitorIF progressMonitor;
+	private IMonitorableTask task;
+	private Timer timer;
+	
+	public TaskMonitorTimerListener(IProgressMonitorIF progressMonitor,
+			IMonitorableTask task){
+		this.progressMonitor = progressMonitor;
+		this.task = task;
+	}
+	
+	public void setTimer(Timer timer){
+		this.timer = timer;
+	}
+	
+	public void actionPerformed(ActionEvent arg0) {
+		int currentStep = task.getCurrentStep();
+		String statusNote = task.getNote();
+        progressMonitor.setCurrentStep(currentStep);
+        progressMonitor.setNote(statusNote);
+        if(progressMonitor.isCanceled()){
+        	 progressMonitor.close();
+             task.cancel();
+             timer.stop();
+        }
+        if (task.isFinished()) {
+           progressMonitor.close();
+           timer.stop();
+        }
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/TaskMonitorTimerListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/SwingWorker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/SwingWorker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/SwingWorker.java	(revision 42196)
@@ -0,0 +1,155 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.threads;
+
+import javax.swing.SwingUtilities;
+
+/**
+ * This is the 3rd version of SwingWorker (also known as
+ * SwingWorker 3), an abstract class that you subclass to
+ * perform GUI-related work in a dedicated thread.  For
+ * instructions on and examples of using this class, see:
+ * 
+ * http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
+ *
+ * Note that the API changed slightly in the 3rd version:
+ * You must now invoke start() on the SwingWorker after
+ * creating it.
+ */
+public abstract class SwingWorker {
+    private Object value;  // see getValue(), setValue()
+
+    /** 
+     * Class to maintain reference to current worker thread
+     * under separate synchronization control.
+     */
+    private static class ThreadVar {
+        private Thread thread;
+        ThreadVar(Thread t) { thread = t; }
+        synchronized Thread get() { return thread; }
+        synchronized void clear() { thread = null; }
+    }
+
+    private ThreadVar threadVar;
+
+    /** 
+     * Get the value produced by the worker thread, or null if it 
+     * hasn't been constructed yet.
+     */
+    protected synchronized Object getValue() { 
+        return value; 
+    }
+
+    /** 
+     * Set the value produced by worker thread 
+     */
+    private synchronized void setValue(Object x) { 
+        value = x; 
+    }
+
+    /** 
+     * Compute the value to be returned by the <code>get</code> method. 
+     */
+    public abstract Object construct();
+
+    /**
+     * Called on the event dispatching thread (not on the worker thread)
+     * after the <code>construct</code> method has returned.
+     */
+    public void finished() {
+    }
+
+    /**
+     * A new method that interrupts the worker thread.  Call this method
+     * to force the worker to stop what it's doing.
+     */
+    public void interrupt() {
+        Thread t = threadVar.get();
+        if (t != null) {
+            t.interrupt();
+        }
+        threadVar.clear();
+    }
+
+    /**
+     * Return the value created by the <code>construct</code> method.  
+     * Returns null if either the constructing thread or the current
+     * thread was interrupted before a value was produced.
+     * 
+     * @return the value created by the <code>construct</code> method
+     */
+    public Object get() {
+        while (true) {  
+            Thread t = threadVar.get();
+            if (t == null) {
+                return getValue();
+            }
+            try {
+                t.join();
+            }
+            catch (InterruptedException e) {
+                Thread.currentThread().interrupt(); // propagate
+                return null;
+            }
+        }
+    }
+
+
+    /**
+     * Start a thread that will call the <code>construct</code> method
+     * and then exit.
+     */
+    public SwingWorker() {
+        final Runnable doFinished = new Runnable() {
+           public void run() { finished(); }
+        };
+
+        Runnable doConstruct = new Runnable() { 
+            public void run() {
+                try {
+                    setValue(construct());
+                }
+                finally {
+                    threadVar.clear();
+                }
+
+                SwingUtilities.invokeLater(doFinished);
+            }
+        };
+
+        Thread t = new Thread(doConstruct);
+        threadVar = new ThreadVar(t);
+    }
+
+    /**
+     * Start the worker thread.
+     */
+    public void start() {
+        Thread t = threadVar.get();
+        if (t != null) {
+            t.start();
+        }
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/SwingWorker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/CancellableMonitorable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/CancellableMonitorable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/CancellableMonitorable.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: CancellableMonitorable.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-05-22 10:31:55  fjp
+* Monitorable tasks easy
+*
+* Revision 1.1  2006/03/09 18:26:19  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * Marked interface to model classes that
+ * must be Cancellable (cancels processes)
+ * and Monitorable (monitor processes)
+ * @author azabala
+ *
+ */
+public interface CancellableMonitorable extends
+		org.gvsig.tools.task.Cancellable, Monitorable {
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/CancellableMonitorable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/AbstractMonitorableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/AbstractMonitorableTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/AbstractMonitorableTask.java	(revision 42196)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.threads;
+
+
+/**
+ * @author fjp
+ * 
+ * Basada en el trabajo de A. Zabala.
+ * Para usarla, extender de AbstractMonitorableTask e implementar el m�todo run().
+ * Ejemplo:
+ * 
+La tarea se lanza con:
+
+PluginServices.cancelableBackgroundExecution(new WriterTask(layer, writer)); <br>
+
+private class WriterTask extends AbstractMonitorableTask <br>
+	{ <br>
+		FLyrVect lyrVect; <br>
+		IWriter writer; <br>
+		int rowCount; <br>
+		public WriterTask(FLyrVect lyr, IWriter writer) throws DriverException, DriverIOException <br>
+		{ <br>
+			this.lyrVect = lyr; <br>
+			this.writer = writer; <br>
+			
+			setInitialStep(0); <br>
+			setDeterminatedProcess(true); <br>
+			setStatusMessage(PluginServices.getText(this, "exportando_features")); <br>
+ 
+			setFinalStep(rowCount); // Importante: Fijarlo en el constructor, para que est� establecido antes del run() <br>
+			
+		} <br>
+		public void run() throws Exception { <br>
+ 
+			// Creamos la tabla. <br>
+			writer.preProcess(); <br>
+ 
+			rowCount = va.getShapeCount(); <br>
+			for (int i = 0; i < rowCount; i++) { <br>
+				IGeometry geom = va.getShape(i); <br>
+ 
+				// DO PROGRESS STUFF <br>
+				reportStep(); <br>
+				setNote(PluginServices.getText(this, "exporting_") + i); <br>
+				if (isCanceled()) <br>
+					break; <br>
+					
+				// END DO PROGRESS STUFF <br>
+ 
+				if (geom != null) { <br>
+					Value[] values = sds.getRow(i); <br>
+					IFeature feat = new DefaultFeature(geom, values, "" + i); <br>
+					DefaultRowEdited edRow = new DefaultRowEdited(feat, <br>
+							DefaultRowEdited.STATUS_ADDED, i); <br>
+					writer.process(edRow); <br>
+				} <br>
+			} <br>
+			writer.postProcess(); <br>
+						
+			JOptionPane.showMessageDialog( <br>
+					(JComponent) PluginServices.getMDIManager().getActiveView() <br>
+					, PluginServices.getText(this, "capa_exportada"), "Export", <br>
+					JOptionPane.INFORMATION_MESSAGE); <br>
+ 
+		} <br>
+		
+	}  <br>
+ */
+public abstract class AbstractMonitorableTask extends DefaultCancellableMonitorable implements IMonitorableTask {
+
+	String statusMessage;
+
+	String note;
+
+	public String getNote() {
+		return note;
+	}
+
+	public void setNote(String note) {
+		this.note = note;
+	}
+
+	public String getStatusMessage() {
+		return statusMessage;
+	}
+
+	public void setStatusMessage(String statusMessage) {
+		this.statusMessage = statusMessage;
+	}
+
+	public int getFinishStep() {
+		return getFinalStep();
+	}
+
+	public boolean isDefined() {
+		return isDeterminatedProcess();
+	}
+
+
+	public boolean isFinished() {
+		return (getCurrentStep() >= getFinalStep());
+	}
+
+	public void cancel() {
+		setCanceled(true);
+	}
+	
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.utiles.swing.threads.IMonitorableTask#finished()
+	 */
+	public void finished() {
+	
+		
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/AbstractMonitorableTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Cancellable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Cancellable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Cancellable.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.threads;
+
+/**
+ * <p>
+ * <code>Cancellable</code> interface is designed for adding support to notify
+ * that a task must be cancelled.
+ * </p>
+ * 
+ * <p>
+ * This is useful if a process is hung up, blocking, or simply if user wants
+ * cancel it, for instance, a drawing process of a heavy layer.
+ * </p>
+ * 
+ * <p>
+ * The classes which implement this interface are force to share the canceling
+ * information, in order to be notified about the current status of it. This
+ * implies a synchronous canceling process, that could be implemented by another
+ * object.
+ * </p>
+ * 
+ * @deprecated @see org.gvsig.tools.task.Cancellable
+ */
+public interface Cancellable {
+	/**
+	 * <p>Determines if the related task must be canceled.</p>
+	 * 
+	 * @return <code>true</code> if task must been canceled; otherwise <code>false</code>
+	 * 
+	 * @see #setCanceled(boolean)
+	 */
+	boolean isCanceled();
+
+	/**
+	 * <p>Sets if the related task must be canceled.</p>
+	 * 
+	 * @param canceled <code>true</code> if the task must be canceled; otherwise <code>false</code>
+	 * 
+	 * @see #isCanceled()
+	 */
+	void setCanceled(boolean canceled);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Cancellable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/DefaultCancellableMonitorable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/DefaultCancellableMonitorable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/DefaultCancellableMonitorable.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: DefaultCancellableMonitorable.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-05-22 10:31:55  fjp
+* Monitorable tasks easy
+*
+* Revision 1.4  2006/05/15 14:56:23  azabala
+* A�adida la posibilidad de modificar el paso actual (para que en tareas que constan de varios pasos, para cada paso se pueda mostrar una barra llenandose)
+*
+* Revision 1.3  2006/03/14 19:29:15  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/03/09 18:43:29  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/09 18:41:32  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * Default very easy implementation of 
+ * CancellableMonitorable
+ * @author azabala
+ *
+ */
+public class DefaultCancellableMonitorable implements CancellableMonitorable {
+	
+	private boolean canceled = false;
+	private int currentStep = 0;
+	private int initialStep = 0;
+	private int lastStep = 0;
+	private boolean determinated = false;
+	
+	
+	
+	
+	public boolean isCanceled() {
+		return canceled;
+	}
+
+	public void reportStep() {
+		currentStep++;
+	}
+
+	public int getCurrentStep() {
+		return currentStep;
+	}
+
+	public void setInitialStep(int step) {
+		initialStep = step;
+	}
+
+	public void setFinalStep(int step) {
+		lastStep = step;
+	}
+
+	public void setDeterminatedProcess(boolean determinated) {
+		this.determinated = determinated;
+	}
+
+	public boolean isDeterminatedProcess() {
+		return determinated;
+	}
+
+	public void setCanceled(boolean canceled) {
+		this.canceled = canceled;
+	}
+
+	public void reset() {
+		canceled = false;
+		currentStep = 0;
+		initialStep = 0;
+		lastStep = 0;
+		determinated = false;
+	}
+
+	public int getInitialStep() {
+		return initialStep;
+	}
+
+	public int getFinalStep() {
+		return lastStep;
+	}
+
+	public void setCurrentStep(int currentStep) {
+		this.currentStep = currentStep;
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/DefaultCancellableMonitorable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableDecoratorMainFirst.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableDecoratorMainFirst.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableDecoratorMainFirst.java	(revision 42196)
@@ -0,0 +1,161 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: MonitorableDecoratorMainFirst.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.2  2007-05-15 07:21:20  cesar
+* Add the finished method for execution from Event Dispatch Thread
+*
+* Revision 1.1  2006/05/08 15:52:30  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/04/18 15:17:20  azabala
+* a�adidos comentarios a metodos
+*
+* Revision 1.1  2006/03/14 19:23:42  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * Task that wraps a main task, executing it and doing some preprocess
+ * stuff after main task, by executing a secondary task
+ * @author azabala
+ *
+ */
+public class MonitorableDecoratorMainFirst implements IMonitorableTask {
+
+	/**
+	 * main task
+	 */
+	private IMonitorableTask mainTask;
+	/**
+	 * preprocess task 
+	 */
+	private IMonitorableTask secondaryTask;
+	/**
+	 * task that is currently in execution
+	 */
+	private IMonitorableTask currentTask;
+	/**
+	 * flag for cancelations
+	 */
+	private boolean canceled = false;
+	/**
+	 * flag for finalization
+	 */
+	private boolean finished = false;
+	
+	/**
+	 * Constructor
+	 * @param mainTask
+	 * @param secondaryTask
+	 */
+	public MonitorableDecoratorMainFirst(IMonitorableTask mainTask, IMonitorableTask secondaryTask){
+		this.mainTask = mainTask;
+		this.secondaryTask = secondaryTask;
+		this.currentTask = mainTask;
+	}
+	
+	/**
+	 * Makes some preprocess steps, and return a boolean flag that
+	 * indicates if this task can be launched.
+	 * @return
+	 */
+	public boolean preprocess(){
+		if(mainTask != null  && secondaryTask != null)
+			return true;
+		else 
+			return false;
+	}
+	
+	
+	public int getInitialStep() {
+		return mainTask.getInitialStep();
+	}
+
+	public int getFinishStep() {
+		//we add 1 because secondaryTask is consideered as
+		//a step
+		return mainTask.getFinishStep() + 1;
+	}
+
+	public int getCurrentStep() {
+		if(currentTask == mainTask){
+			return mainTask.getCurrentStep();
+		}else{
+			return getFinishStep();
+		}
+	}
+
+	public String getStatusMessage() {
+		return mainTask.getStatusMessage();
+	}
+
+	public String getNote() {
+		return mainTask.getNote();
+	}
+
+	public boolean isDefined() {
+		return mainTask.isDefined();
+	}
+
+	public void cancel() {
+		canceled = true;
+		currentTask.cancel();
+
+	}
+
+	public void run() throws Exception {
+		currentTask = mainTask;
+		if(! canceled)
+			mainTask.run();
+		if(! canceled){
+			currentTask = secondaryTask;
+			secondaryTask.run();
+		}
+		finished  = true;
+		
+
+	}
+
+	public boolean isCanceled() {
+		return canceled == true;
+	}
+
+	public boolean isFinished() {
+		if(currentTask == mainTask){
+			return currentTask.isFinished();
+		}else
+			return finished == true;
+	}
+	
+	public void finished() {
+		
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableDecoratorMainFirst.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IPipedTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IPipedTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IPipedTask.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: 
+* $Log:
+*/
+package org.gvsig.utils.swing.threads;
+
+/**
+ * 
+ * This task is useful for pipes.
+ * Its methods getResult and setEntry are useful for pipes
+ * process.
+ * @author alzabord
+ *
+ */
+public interface IPipedTask extends IMonitorableTask {
+	public Object getResult();
+	public void setEntry(Object object);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IPipedTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/UndefinedProgressMonitor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/UndefinedProgressMonitor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/UndefinedProgressMonitor.java	(revision 42196)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: UndefinedProgressMonitor.java 29631 2009-06-29 16:56:19Z jpiera $
+ * $Log$
+ * Revision 1.4  2006-11-06 07:29:59  jaume
+ * organize imports
+ *
+ * Revision 1.3  2006/04/18 15:16:14  azabala
+ * a�adida la posibilidad de personalizar el titulo del dialogo de proceso
+ *
+ * Revision 1.2  2006/03/20 16:04:21  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/03/14 19:23:58  azabala
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.utils.swing.threads;
+
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+
+/**
+ * Dialog that shows the evolution of the execution of a
+ * ITask.
+ * If this ITask is a defined task (we know the number of steps
+ * it must do) it shows a progress bar.
+ * 
+ * If it doesnt, progress bar is filling and emptying
+ * @author azabala
+ *
+ */
+public class UndefinedProgressMonitor extends JDialog 
+	implements IProgressMonitorIF{
+
+	
+	private static final long serialVersionUID = 8776505862813807891L;
+	private JPanel jContentPane = null;
+	private JLabel mainTitleLabel = null;
+	private JLabel noteLabel = null;
+	private JProgressBar jProgressBar = null;
+	private JButton cancelButton = null;
+	boolean canceled = false;
+	private String title = "Processing...";
+
+	/**
+	 * This is the default constructor
+	 */
+	public UndefinedProgressMonitor() {
+		super();
+		initialize();
+	}
+	/**
+	 * Constructor which specify the dialog title 
+	 * (for example:processing, etc)
+	 * @param parent
+	 * @param title
+	 */
+	public UndefinedProgressMonitor(Frame parent, String title){
+		super(parent, false);
+		this.title = title;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 * 
+	 * FIXME Internationalize this
+	 */
+	private void initialize() {
+		this.setSize(318, 181);
+		this.setTitle(title);
+		this.setContentPane(getJContentPane());
+	}
+
+	/**
+	 * This method initializes jContentPane
+	 * 
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJContentPane() {
+		if (jContentPane == null) {
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.insets = new java.awt.Insets(6,97,18,125);
+			gridBagConstraints3.gridy = 3;
+			gridBagConstraints3.ipadx = 4;
+			gridBagConstraints3.ipady = -4;
+			gridBagConstraints3.gridx = 0;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.insets = new java.awt.Insets(11,43,5,32);
+			gridBagConstraints2.gridy = 2;
+			gridBagConstraints2.ipadx = 109;
+			gridBagConstraints2.ipady = 4;
+			gridBagConstraints2.fill = java.awt.GridBagConstraints.NONE;
+			gridBagConstraints2.gridwidth = 2;
+			gridBagConstraints2.anchor = java.awt.GridBagConstraints.CENTER;
+			gridBagConstraints2.gridx = 0;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(9,43,8,32);
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.ipadx = 180;
+			gridBagConstraints1.ipady = 0;
+			gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints1.gridx = 0;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.insets = new java.awt.Insets(10,43,8,32);
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.ipadx = 148;
+			gridBagConstraints.ipady = 11;
+			gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints.gridx = 0;
+			noteLabel = new JLabel();
+			noteLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12));
+			noteLabel.setText("noteLabel");
+			mainTitleLabel = new JLabel();
+			mainTitleLabel.setText("mainTittleLabel");
+			mainTitleLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 12));
+			jContentPane = new JPanel();
+			jContentPane.setLayout(new GridBagLayout());
+			jContentPane.add(mainTitleLabel, gridBagConstraints);
+			jContentPane.add(noteLabel, gridBagConstraints1);
+			jContentPane.add(getJProgressBar(), gridBagConstraints2);
+			jContentPane.add(getCancelButton(), gridBagConstraints3);
+		}
+		return jContentPane;
+	}
+
+	/**
+	 * This method initializes jProgressBar	
+	 * 	
+	 * @return javax.swing.JProgressBar	
+	 */
+	private JProgressBar getJProgressBar() {
+		if (jProgressBar == null) {
+			jProgressBar = new JProgressBar();
+		}
+		return jProgressBar;
+	}
+
+	/**
+	 * This method initializes cancelButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getCancelButton() {
+		if (cancelButton == null) {
+			cancelButton = new JButton();
+			cancelButton.setText("cancelar");
+			cancelButton.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					cancel();
+				}
+			});
+			cancelButton.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					cancel();
+				}
+			});
+		}
+		return cancelButton;
+	}
+
+	public void setInitialStep(int step) {
+		jProgressBar.setMinimum(step);
+	}
+
+	public void setLastStep(int step) {
+		jProgressBar.setMaximum(step);
+	}
+
+	public void setCurrentStep(int step) {
+		jProgressBar.setValue(step);
+	}
+
+	public int getInitialStep() {
+		return jProgressBar.getMinimum();
+	}
+
+	public int getLastStep() {
+		return jProgressBar.getMaximum();
+	}
+
+	public int getCurrentStep() {
+		return jProgressBar.getValue();
+	}
+
+	public void setIndeterminated(boolean indeterminated) {
+		jProgressBar.setIndeterminate(indeterminated);
+	}
+
+	public boolean isIndeterminated() {
+		return jProgressBar.isIndeterminate();
+	}
+
+	public void setBarStringDrawed(boolean stringDrawed) {
+		jProgressBar.setStringPainted(stringDrawed);
+	}
+
+	public void setBarString(String barString) {
+		jProgressBar.setString(barString);
+	}
+
+	public void setMainTitleLabel(String text) {
+		mainTitleLabel.setText(text);
+	}
+
+	public void setNote(String note) {
+		noteLabel.setText(note);
+	}
+
+	public void cancel() {
+		canceled = true;
+	}
+
+//	public void taskInBackground() {
+//		//setModal(false);
+//	}
+
+	public boolean isCanceled() {
+		return canceled == true;
+	}
+
+	public void close() {
+		this.dispose();
+	}
+
+	public void open() {
+		this.setVisible(true);
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="30,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/UndefinedProgressMonitor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableTaskQueue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableTaskQueue.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableTaskQueue.java	(revision 42196)
@@ -0,0 +1,168 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: MonitorableTaskQueue.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.2  2007-05-15 07:21:20  cesar
+* Add the finished method for execution from Event Dispatch Thread
+*
+* Revision 1.1  2006/03/14 19:23:42  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+/**
+ * A task that could enqueue tasks.
+ * @author azabala
+ *
+ */
+public class MonitorableTaskQueue implements IMonitorableTask {
+
+	private ArrayList taskQueue;
+	private boolean canceled = false;
+	private IMonitorableTask currentTask = null;
+	
+	public MonitorableTaskQueue(){
+		taskQueue = new ArrayList();
+	}
+	
+	public void addTask(IMonitorableTask task){
+		taskQueue.add(task);
+	}
+	
+	
+	public int getInitialStep() {
+		return 0;
+	}
+
+	public int getFinishStep() {
+		int lastStep = 0;
+		if(isDefined()){
+			for(int i = 0; i < taskQueue.size(); i++){
+				IMonitorableTask task = 
+					(IMonitorableTask) taskQueue.get(i);
+				lastStep += task.getFinishStep();
+			}
+		}else{
+			lastStep += taskQueue.size();
+		}
+		return lastStep;
+	}
+
+	public int getCurrentStep() {
+		int currentStep = 0;
+		
+			for(int i = 0; i < taskQueue.size(); i++){
+				IMonitorableTask task = 
+					(IMonitorableTask) taskQueue.get(i);
+				
+					if(task == currentTask)
+					{
+						if(isDefined()){
+							currentStep += currentTask.getCurrentStep();
+							
+						}else{
+							currentStep = i;
+						}	
+						break;
+					}else{
+						if(isDefined())
+							currentStep += currentTask.getFinishStep();
+					}
+		}
+		return currentStep++;
+	}
+
+	public String getStatusMessage() {
+		if(currentTask != null){
+			return currentTask.getStatusMessage();
+		}else{
+			return "Waiting for new tasks...";
+		}
+	}
+
+	public String getNote() {
+		if(currentTask != null){
+			return currentTask.getNote();
+		}else{
+			return "";
+		}
+	}
+
+	public boolean isDefined() {
+		for(int i = 0; i < taskQueue.size(); i++){
+			IMonitorableTask task = 
+				(IMonitorableTask) taskQueue.get(i);
+			if(!task.isDefined())
+				return false;
+		}
+		return true;
+	}
+
+	public void cancel() {
+		if(currentTask != null){
+			currentTask.cancel();
+		}
+		canceled = true;
+
+	}
+
+	public void run() throws Exception {
+		System.out.println("lanzando procesos encolados...");
+		Iterator taskIterator = taskQueue.iterator();
+		while (taskIterator.hasNext() && (! canceled)){
+			currentTask = (IMonitorableTask) taskIterator.next();
+			System.out.println("proceso " + currentTask.toString());
+			currentTask.run();
+		}
+		System.out.println("Se finalizo la cola de procesos");
+		
+
+	}
+
+	public boolean isCanceled() {
+		if(currentTask != null){
+			return currentTask.isCanceled();
+		}
+		return false;
+	}
+
+	public boolean isFinished() {
+		if(currentTask != null){
+			return currentTask.isFinished();
+		}
+		return false;
+	}
+
+	public void finished() {
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/MonitorableTaskQueue.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IProgressMonitorIF.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IProgressMonitorIF.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IProgressMonitorIF.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: IProgressMonitorIF.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.2  2006-03-20 16:04:11  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/14 19:23:42  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * IProgressMonitorIF must be all classes which
+ * monitors the process of a long costly task.
+ * <br>
+ * It is designed to monitor defined tasks (those
+ * which we know what number of steps have) and 
+ * undefined tasks.
+ * <br>
+ * It must has associated a GUI component to show
+ * progress of the task (usually a Progress Bar and
+ * a cancel button).
+ * 
+ * @author azabala
+ *
+ */
+public interface IProgressMonitorIF {
+	/**
+	 * sets initial step number of the task
+	 * monitored
+	 * @param step
+	 */
+	public void setInitialStep(int step);
+	/**
+	 * sets final step number of the task
+	 * monitored
+	 * @param step
+	 */
+	public void setLastStep(int step);
+	/**
+	 * sets current step number of the task
+	 * monitored
+	 * @param step
+	 */
+	public void setCurrentStep(int step);
+	public int getInitialStep();
+	public int getLastStep();
+	public int getCurrentStep();
+	/**
+	 * Sets if the monitored task is defined (known
+	 * number of steps) or undefined (unknown)
+	 * @param indeterminated
+	 */
+	public void setIndeterminated(boolean indeterminated);
+	public boolean isIndeterminated();
+	/**
+	 * Sets if the progress bar associated to monitor
+	 * must draw a complementary text to progress bar
+	 * @param stringDrawed
+	 */
+	public void setBarStringDrawed(boolean stringDrawed);
+	/**
+	 * Sets complementary text to progress bar.
+	 * @param barString
+	 */
+	public void setBarString(String barString);
+	/**
+	 * Set main text of GUI component
+	 * @param text
+	 */
+	public void setMainTitleLabel(String text);
+	public void setNote(String note);
+	/**
+	 * Sends cancel message to monitored task.
+	 *
+	 */
+	public void cancel();
+	/**
+	 * Returns if has received cancel message
+	 * @return
+	 */
+	public boolean isCanceled();
+	/**
+	 * Says if associated task is running in background
+	 *
+	 */
+//	public void taskInBackground();
+	/**
+	 * Closes associated GUI component
+	 *
+	 */
+	public void close();
+	/**
+	 * Sets associated gui component visible
+	 *
+	 */
+	public void open();
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IProgressMonitorIF.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelableTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelableTask.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ICancelableTask.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-03-14 19:23:42  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/07 21:00:29  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * Runnable task that could be canceled.
+ * 
+ * @author azabala
+ *
+ */
+public interface ICancelableTask extends ITask {
+	public void cancel();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelableTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelMonitor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelMonitor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelMonitor.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ICancelMonitor.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-03-14 19:23:42  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/07 21:00:29  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * It monitors cancelation of task, informing
+ * to interested in cancelation
+ * @author azabala
+ *
+ */
+public interface ICancelMonitor {
+	public boolean isCanceled();
+	public boolean isFinished();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ICancelMonitor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IMonitorableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IMonitorableTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IMonitorableTask.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: IMonitorableTask.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.3  2007-06-06 14:02:39  cesar
+* Include the finished method in the abstract class. Add comments in the interface.
+*
+* Revision 1.2  2007/05/15 07:21:20  cesar
+* Add the finished method for execution from Event Dispatch Thread
+*
+* Revision 1.1  2006/03/14 19:23:42  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/03/09 18:57:39  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/07 21:00:29  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+
+/**
+ * Long time task that could be monitored. The monitorization
+ * information that this task could offer is:<br>
+ * <ul>
+ * <li>Defined (number of steps known) or Undefined task</li>
+ * <li>Number of steps (for defined tasks)</li>
+ * <li>Initial and final step</li>
+ * <li>Description of the task (status)</li>
+ * <li>Description of subtasks (note)</li>
+ * </ul>
+ * @author azabala
+ *
+ */
+public interface IMonitorableTask extends ICancelableTask, 
+									ICancelMonitor {
+	public int getInitialStep();
+	public int getFinishStep();
+	public int getCurrentStep();
+	public String getStatusMessage();
+	public String getNote();
+	public boolean isDefined();
+	/**
+	 * This method is executed <b>from the Event Dispatch Thread</b>
+	 * when the background task finishes. Any interaction with SWing
+	 * objects should be placed here.
+	 */
+	public void finished();
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IMonitorableTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ITask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ITask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ITask.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ITask.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-03-14 19:23:42  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * Base interface for generic tasks.
+ * At origin we are going to use Runnable,
+ * but we are interested in the possibility
+ * of launch explicit exceptions
+ * @author azabala
+ *
+ */
+public interface ITask {
+	public void run() throws Exception;
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ITask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Monitorable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Monitorable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Monitorable.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: Monitorable.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-05-22 10:31:55  fjp
+* Monitorable tasks easy
+*
+* Revision 1.3  2006/05/15 14:56:23  azabala
+* A�adida la posibilidad de modificar el paso actual (para que en tareas que constan de varios pasos, para cada paso se pueda mostrar una barra llenandose)
+*
+* Revision 1.2  2006/03/09 18:43:29  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/09 18:26:19  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * Interface to monitorize a long process, which operates
+ * in many individual steps
+ * @author azabala
+ *
+ */
+public interface Monitorable {
+	/**
+	 * Report to monitor that an individual step
+	 * was processed.
+	 *
+	 */
+	public void reportStep();
+	/**
+	 * Return the number of steps processed
+	 * @return
+	 */
+	public int getCurrentStep();
+	/**
+	 * Allows to modify current step.
+	 *
+	 */
+	public void setCurrentStep(int currentStep);
+	
+	/**
+	 * report monitor what number has the initial
+	 * step of the process is monitoring
+	 * @param step
+	 */
+	public void setInitialStep(int step);
+	
+	public int getInitialStep();
+	
+	public int getFinalStep();
+	/**
+	 * report monitor what number has the final
+	 * step of the process is monitoring
+	 * (no apply to undefined process)
+	 * @param step
+	 */
+	public void setFinalStep(int step);
+	/**
+	 * Reports to the monitor that the process  is
+	 * monitoring is (or not) a defined process. A defined
+	 * process is a process whose number of step is predefined
+	 * (in front of not defined process, which may run in
+	 * an unknown number of steps)
+	 * @param defined
+	 */
+	public void setDeterminatedProcess(boolean defined);
+	/**
+	 * Tells if the process is monitoring is defined
+	 * @return
+	 */
+	public boolean isDeterminatedProcess();
+	/**
+	 * Sets initial default monitorization values
+	 */
+	public void reset();
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/Monitorable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IBackgroundExecution.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IBackgroundExecution.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IBackgroundExecution.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: IBackgroundExecution.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.1  2006-03-14 19:23:42  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/03/07 21:00:29  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+/**
+ * This interface must be implemented by all classes
+ * that could create a background, cancelable, GUI based
+ * thread.
+ * 
+ * @author azabala
+ *
+ */
+public interface IBackgroundExecution {
+	public IMonitorableTask createTask();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/IBackgroundExecution.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ProgressMonitorAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ProgressMonitorAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ProgressMonitorAdapter.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ProgressMonitorAdapter.java 29631 2009-06-29 16:56:19Z jpiera $
+* $Log$
+* Revision 1.2  2006-04-18 15:16:44  azabala
+* a�adido comentario de cabecera de la clase
+*
+* Revision 1.1  2006/03/14 19:23:42  azabala
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.utils.swing.threads;
+
+import java.awt.Component;
+
+import javax.swing.ProgressMonitor;
+
+/**
+ * It is a try to launch tasks in background and to report its evolution
+ * with javax.swing.ProgressMonitor.
+ * It isnt satisfactory at all (because we cant control
+ * when dialog is showed, etc)
+ * @author azabala
+ *
+ */
+public class ProgressMonitorAdapter implements IProgressMonitorIF {
+	
+	private ProgressMonitor progressMonitor;
+	
+	public ProgressMonitorAdapter(Component parent,
+			String statusMessage,
+			String note,
+			int minimum,
+			int maximum,
+			int currentValue){
+		progressMonitor = new ProgressMonitor(parent,statusMessage,
+				note, minimum, maximum);
+		progressMonitor.setProgress(currentValue);
+		progressMonitor.setMillisToDecideToPopup(0);
+		progressMonitor.setMillisToPopup(0);
+		
+	}
+	
+	
+	public void setInitialStep(int step) {
+		progressMonitor.setMinimum(step);
+
+	}
+
+	public void setLastStep(int step) {
+		progressMonitor.setMaximum(step);
+	}
+
+	public void setCurrentStep(int step) {
+		progressMonitor.setProgress(step);
+	}
+
+	public int getInitialStep() {
+		return progressMonitor.getMinimum();
+	}
+
+	public int getLastStep() {
+		return progressMonitor.getMaximum();
+	}
+
+	//ProgressMonitor recibe el step, no lo devuelve
+	public int getCurrentStep() {
+		return -1;
+	}
+
+	public void setIndeterminated(boolean indeterminated) {
+	}
+
+	public boolean isIndeterminated() {
+		return false;
+	}
+
+	public void setBarStringDrawed(boolean stringDrawed) {
+	}
+
+	public void setBarString(String barString) {
+	}
+
+	public void setMainTitleLabel(String text) {
+	}
+
+	public void setNote(String note) {
+		progressMonitor.setNote(note);
+	}
+
+	public void cancel() {
+	}
+
+	public boolean isCanceled() {
+		return progressMonitor.isCanceled();
+	}
+
+	public void taskInBackground() {
+		// TODO Auto-generated method stub
+
+	}
+
+
+
+	public void close() {
+		progressMonitor.close();
+		
+	}
+
+
+	public void open() {
+		progressMonitor.setMillisToPopup(0);
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/threads/ProgressMonitorAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelection.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.objectSelection;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.utils.swing.JComboBox;
+
+
+
+/**
+ * Control consistente en un texto y un combo autocompletable
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ObjectSelection extends JPanel {
+	private JLabel jLabel = null;
+	private JComboBox combo = null;
+	private ObjectSelectionModel model;
+	private DefaultComboBoxModel cmbModel = new DefaultComboBoxModel();
+	private Object selected;
+	/**
+	 * This is the default constructor
+	 */
+	public ObjectSelection() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		jLabel = new JLabel();
+		this.setSize(504, 265);
+		this.add(jLabel, null);
+		this.add(getCombo(), null);
+	}
+
+	/**
+	 * Obtiene una referencia al combo
+	 *
+	 * @return com.iver.utiles.swing.JComboBox
+	 */
+	protected JComboBox getCombo() {
+		if (combo == null) {
+			combo = new JComboBox();
+			combo.setModel(cmbModel);
+			combo.setEditable(true);
+			combo.addItemListener(new java.awt.event.ItemListener() {
+					public void itemStateChanged(java.awt.event.ItemEvent e) {
+						seleccion();
+					}
+				});
+		}
+
+		return combo;
+	}
+
+	/**
+	 * M�todo invocado cuando cambia la selecci�n del combo
+	 */
+	protected void seleccion() {
+	}
+
+	/**
+	 * Establece el modelo del control
+	 *
+	 * @param model The model to set.
+	 *
+	 * @throws SelectionException Si hay alg�n error leyendo los
+	 * datos del modelo
+	 */
+	public void setModel(ObjectSelectionModel model) throws SelectionException {
+		this.model = model;
+
+		Object[] objects = model.getObjects();
+		cmbModel.removeAllElements();
+
+		for (int i = 0; i < objects.length; i++) {
+			cmbModel.addElement(objects[i]);
+		}
+		
+		getCombo().setSelectedIndex(-1);
+
+		jLabel.setText(model.getMsg());
+	}
+
+	/**
+	 * Obtiene el elemento actualmente seleccionado
+	 *
+	 * @return Returns the selected item.
+	 */
+	public Object getSelected() {
+		return cmbModel.getSelectedItem();
+	}
+} //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelectionModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelectionModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelectionModel.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.objectSelection;
+
+/**
+ * Modelo del control ObjectSelection
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface ObjectSelectionModel {
+	/**
+	 * Obtiene las referencias a los objetos que aparecer�n
+	 * seleccionables en el combo
+	 *
+	 * @return array de objetos
+	 *
+	 * @throws SelectionException Si se produce alg�n error
+	 */
+	public Object[] getObjects() throws SelectionException;
+
+	/**
+	 * Obtiene el mensaje que se mostrar� al usuario
+	 *
+	 * @return String
+	 *
+	 */
+	public String getMsg();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/ObjectSelectionModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/SelectionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/SelectionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/SelectionException.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.objectSelection;
+
+/**
+ * Excepci�n que indica que el modelo del control ObjectSelection no puede
+ * proporcionar la informaci�n requerida.
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class SelectionException extends Exception {
+	/**
+	 *
+	 */
+	public SelectionException() {
+		super();
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * constructor
+	 *
+	 * @param message
+	 */
+	public SelectionException(String message) {
+		super(message);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * constructor
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public SelectionException(String message, Throwable cause) {
+		super(message, cause);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * constructor
+	 *
+	 * @param cause
+	 */
+	public SelectionException(Throwable cause) {
+		super(cause);
+
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/objectSelection/SelectionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/JComboServer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/JComboServer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/JComboServer.java	(revision 42196)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ib��ez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.utils.swing.jcomboServer;
+import javax.swing.JComboBox;
+
+/**
+ * This class is a user interface component that looks equal to
+ * a JComboBox component, but it contains ServerData objects and 
+ * it is able to show them in last access order.It has methods to 
+ * add ServerData objects and to retrieve them.
+ * 
+ * @see java.swing.JComboBox
+ * @see es.gva.cit.catalogClient.utils.comboserver.ServerData
+ * @author Jorge Piera Llodra (piera_jor@gva.es)
+ */
+public class JComboServer extends JComboBox {
+
+/**
+ * Just a simple constructor
+ * 
+ */
+    public  JComboServer() {        
+        super();
+    } 
+
+/**
+ * A constructor
+ * 
+ * 
+ * @param servers Array with all the rervers to show
+ */
+    public  JComboServer(ServerData[] servers) {        
+        super(setLastAccessOrder(servers));
+    } 
+
+/**
+ * This method returns the selected server
+ * 
+ * 
+ * @return A Server
+ */
+    public ServerData getSelectedServer() {        
+        try {
+            return (ServerData) getSelectedItem();
+        }catch(ClassCastException e){
+            return new ServerData((String)getSelectedItem(),"","");
+        }
+    } 
+
+/**
+ * This method adds a new Server in order
+ * 
+ * 
+ * @param server New Server
+ */
+    public void addServer(ServerData server) {        
+        ServerData[] servers = getAllServers();
+        ServerData[] newServers = new ServerData[servers.length + 1];
+        System.arraycopy(servers, 0, newServers, 0, servers.length);
+        newServers[servers.length] = server;
+        newServers = setLastAccessOrder(newServers);
+        setServerList(newServers);
+    } 
+
+/**
+ * This method returns an array with all the servers that the
+ * combo contains
+ * 
+ * 
+ * @return An array of servers
+ */
+    public ServerData[] getAllServers() {        
+        ServerData[] servers = new ServerData[getItemCount()];
+        for (int i=0 ; i<getItemCount() ; i++){
+            servers[i] = (ServerData) this.getItemAt(i);
+        }
+        return servers;
+    } 
+
+/**
+ * It adds a server list
+ * 
+ * 
+ * @param servers Array with servers
+ */
+    public void setServerList(ServerData[] servers) {        
+        removeAllItems();
+        servers = setLastAccessOrder(servers);
+        for (int i=0 ; i<servers.length ; i++){
+           try{
+        	   if (!(servers[i].getServerAddress().equals(""))){
+        		   addItem(servers[i]);
+        	   }
+           }catch(java.lang.NullPointerException e){
+        	   //Server is null
+           }
+        }
+    } 
+
+/**
+ * This method order all the servers in the combo
+ * 
+ */
+    public void setServersOrder() {        
+        ServerData[] servers = getAllServers();
+        servers = setLastAccessOrder(servers);
+        setServerList(servers);
+    } 
+
+/**
+ * This static method ordered an array of servers by last access
+ * 
+ * 
+ * @return A new array
+ * @param servers Array of servers
+ */
+    private static ServerData[] setLastAccessOrder(ServerData[] servers) {        
+    	ServerData[] orderedServerData = new ServerData[servers.length];
+                
+    	for (int i=0 ; i<servers.length ; i++){
+    	    int pos = getServerPosition(servers, i);
+    	    orderedServerData[pos] = servers[i];
+        }
+    	return orderedServerData;
+    } 
+
+/**
+ * This static function return the ordered position of a server. The algorithm to
+ * order can be changed.
+ * 
+ * 
+ * @return Number with the new position
+ * @param servers Array that contains all the servers
+ * @param serverPos Server position
+ */
+    private static int getServerPosition(ServerData[] servers, int serverPos) {        
+        int pos=0;
+        for (int i=0 ; i<servers.length ; i++){
+            if (!(servers[serverPos].getServerAddress().equals(servers[i].getServerAddress()))){
+                if (servers[serverPos].getLastAccess().before(servers[i].getLastAccess())){
+                    pos++;
+                }
+                if (servers[serverPos].getLastAccess().equals(servers[i].getLastAccess())){
+                    if (serverPos < i){
+                        pos++;
+                    }
+                }
+                
+            }
+        }
+        return pos;
+    } 
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/JComboServer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/ServerData.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/ServerData.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/ServerData.java	(revision 42196)
@@ -0,0 +1,452 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.jcomboServer;
+import java.util.Date;
+import java.util.Properties;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.utils.DateTime;
+
+
+/**
+ * This class represents a data server, that can be a WMS, WFS, Catalog or
+ * any kind of server. It contains the server URL and has a couple of 
+ * attributes that describe the server type (serverType and serverSubType).
+ * It contains the date when the server was created and the date when the server
+ * was accessed last time. * 
+ * 
+ * @author Jorge Piera Llodra (piera_jor@gva.es)
+ */
+
+public class ServerData implements Persistent {
+	public static final String              PERSISTENT_NAME        = "ServerData_Persistent";
+    public static final String              PERSISTENT_DESCRIPTION = "ServerData Persistent";
+    
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_TYPE_CATALOG = "CATALOG";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_TYPE_GAZETTEER = "GAZETTEER";
+	
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_TYPE_MULTIPLE = "MULTIPLE";
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_TYPE_WMS = "WMS";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_TYPE_WCS = "WCS";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_TYPE_WFS = "WFS";
+	
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_TYPE_WMTS = "WMTS";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_SUBTYPE_CATALOG_Z3950 = "Z3950";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_SUBTYPE_CATALOG_SRW = "SRW";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_SUBTYPE_CATALOG_CSW = "CSW";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_SUBTYPE_GAZETTEER_WFSG = "WFS-G";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_SUBTYPE_GAZETTEER_ADL = "ADL";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_SUBTYPE_GAZETTEER_IDEC = "IDEC";
+
+	/**
+	 * 
+	 * 
+	 */
+	public static final String SERVER_SUBTYPE_GAZETTEER_WFS = "WFS";
+
+	/**
+	 * 
+	 * 
+	 */
+	private Date added = null;
+
+	/**
+	 * 
+	 * 
+	 */
+	private Date lastAccess = null;
+
+	/**
+	 * 
+	 * 
+	 */
+	private String serviceType = null;
+
+	/**
+	 * 
+	 * 
+	 */
+	private String serviceSubType = null;
+
+	/**
+	 * 
+	 * 
+	 */
+	private String serverAddress = null;
+
+	/**
+	 * 
+	 * 
+	 */
+	private String database = null;
+	
+	private Properties properies = new Properties();
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @param serverAddress Server address
+	 * @param added When the server was added
+	 * @param lastAccess When the server was used last time
+	 * @param serviceType Service type
+	 * @param serviceSubType Service subtype
+	 */
+	public  ServerData(String serverAddress, Date added, Date lastAccess, String serviceType, String serviceSubType) {        
+		this.added = added;
+		this.lastAccess = lastAccess;
+		this.serviceType = serviceType;
+		this.serviceSubType = serviceSubType;
+		this.serverAddress = serverAddress;
+	} 
+	
+	public  ServerData() {        
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @param serverAddress Server address
+	 * @param added When the server was added
+	 * @param lastAccess When the server was used last time
+	 * @param serviceType Service type
+	 * @param serviceSubType Service subtype
+	 * @param database Database name
+	 */
+	public  ServerData(String serverAddress, Date added, Date lastAccess, String serviceType, String serviceSubType,String database) {        
+		this.added = added;
+		this.lastAccess = lastAccess;
+		this.serviceType = serviceType;
+		this.serviceSubType = serviceSubType;
+		this.serverAddress = serverAddress;
+		this.database = database;
+	} 
+
+	/**
+	 * Constructor for a new Server
+	 * 
+	 * 
+	 * @param serverAddress Server Address
+	 * @param serviceType Server Type
+	 * @param serviceSubType Server Subtype
+	 */
+	public  ServerData(String serverAddress, String serviceType, String serviceSubType) {        
+
+		this.serverAddress = serverAddress;
+		this.added = DateTime.getCurrentDate();
+		this.lastAccess = DateTime.getCurrentDate();
+		this.serviceType = serviceType;
+		this.serviceSubType = serviceSubType;
+	} 
+
+	/**
+	 * Constructor for a new Server
+	 * 
+	 * 
+	 * @param serverAddress Server Address
+	 * @param serviceType Server Type
+	 * @param serviceSubType Server Subtype
+	 */
+	public  ServerData(String serverAddress, String serviceType, String serviceSubType,String database) {        
+
+		this.serverAddress = serverAddress;
+		this.added = DateTime.getCurrentDate();
+		this.lastAccess = DateTime.getCurrentDate();
+		this.serviceType = serviceType;
+		this.serviceSubType = serviceSubType;
+		this.database = database;
+	} 
+	
+	/**
+	 * Constructor for a new Server
+	 * 
+	 * 
+	 * @param serverAddress Server Address
+	 * @param serviceType Server Type
+	 */
+	public  ServerData(String serverAddress, String serviceType) {        
+
+		this.serverAddress = serverAddress;
+		this.added = DateTime.getCurrentDate();
+		this.lastAccess = DateTime.getCurrentDate();
+		this.serviceType = serviceType;
+		this.serviceSubType = "";
+		this.database = "";
+	} 
+
+	/**
+	 * This method updates the last access attribute. New value
+	 * is the current time.
+	 * 
+	 */
+	public void updateLastAccess() {        
+		lastAccess = DateTime.getCurrentDate();
+	} 
+
+	/**
+	 * The server address field have to be showed in the combo
+	 * 
+	 * 
+	 * @return String
+	 */
+	public String toString() {        
+		return getServerAddress();
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @return Returns the added.
+	 */
+	public Date getAdded() {        
+		return added;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @param added The added to set.
+	 */
+	public void setAdded(Date added) {        
+		this.added = added;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @return Returns the lastAccess.
+	 */
+	public Date getLastAccess() {        
+		return lastAccess;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @param lastAccess The lastAccess to set.
+	 */
+	public void setLastAccess(Date lastAccess) {        
+		this.lastAccess = lastAccess;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @return Returns the serverAddress.
+	 */
+	public String getServerAddress() {        
+		return serverAddress;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @param serverAddress The serverAddress to set.
+	 */
+	public void setServerAddress(String serverAddress) {        
+		this.serverAddress = serverAddress;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @return Returns the serviceSubType.
+	 */
+	public String getServiceSubType() {        
+		return serviceSubType;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @param serviceSubType The serviceSubType to set.
+	 */
+	public void setServiceSubType(String serviceSubType) {        
+		this.serviceSubType = serviceSubType;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @return Returns the serviceType.
+	 */
+	public String getServiceType() {        
+		return serviceType;
+	} 
+
+	/**
+	 * 
+	 * 
+	 * 
+	 * @param serviceType The serviceType to set.
+	 */
+	public void setServiceType(String serviceType) {        
+		this.serviceType = serviceType;
+	}
+
+	public String getDatabase() {
+		return database;
+	}
+
+	public void setDatabase(String database) {
+		this.database = database;
+	}
+
+	/**
+	 * @return Returns the properies.
+	 */
+	public Properties getProperies() {
+		return properies;
+	}
+
+	/**
+	 * @param properies The properies to set.
+	 */
+	public void setProperies(Properties properies) {
+		this.properies = properies;
+	} 
+	
+	/**
+	 * 
+	 * @param propertyName
+	 * @return
+	 */
+	public String getProperty(String propertyName){
+		return (String)getProperies().getProperty(propertyName);
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("serverAddress", serverAddress);
+		state.set("serviceType", serviceType);
+		state.set("serviceSubType", serviceSubType);
+		state.set("added", added.getTime());
+		state.set("lastAccess", lastAccess.getTime());
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		serverAddress = state.getString("serverAddress");
+		serviceType = state.getString("serviceType");
+		serviceSubType = state.getString("serviceSubType");
+		added = new Date(state.getLong("added"));
+		lastAccess = new Date(state.getLong("lastAccess"));
+	}
+	
+	public static void registerPersistence() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
+		if( definition == null ) {
+			definition = manager.addDefinition(
+					ServerData.class,
+					PERSISTENT_NAME,
+					PERSISTENT_DESCRIPTION,
+					null, 
+					null
+			);
+		}
+		
+		definition.addDynFieldString("serverAddress").setMandatory(true);
+		definition.addDynFieldString("serviceType").setMandatory(true);
+		definition.addDynFieldString("serviceSubType").setMandatory(false);
+		definition.addDynFieldLong("added").setMandatory(false);
+		definition.addDynFieldLong("lastAccess").setMandatory(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jcomboServer/ServerData.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardListener.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.wizard;
+
+/**
+ * Listener de los eventos del asistente
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface WizardListener {
+	/**
+	 * Evento disparado cuando se cancela el asistente
+	 *
+	 * @param w objeto con la informaci�n del evento
+	 */
+	public void cancel(WizardEvent w);
+
+	/**
+	 * Evento disparado cuando se finaliza el asistente
+	 *
+	 * @param w objeto con la informaci�n del evento
+	 */
+	public void finished(WizardEvent w);
+
+	/**
+	 * Evento disparado cuando se avanza un paso el asistente
+	 *
+	 * @param w objeto con la informaci�n del evento
+	 */
+	public void next(WizardEvent w);
+
+	/**
+	 * Evento disparado cuando se da un paso atr�s en el asistente
+	 *
+	 * @param w objeto con la informaci�n del evento
+	 */
+	public void back(WizardEvent w);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Step.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Step.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Step.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.wizard;
+
+/**
+ * Interfaz a implementar por todas las p�ginas del wizard.
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface Step {
+	/**
+	 * Recibe la referencia al Wizard del que forman parte
+	 *
+	 * @param w Referencia al wizard
+	 */
+	public void init(WizardControl w);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Step.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Wizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Wizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Wizard.java	(revision 42196)
@@ -0,0 +1,361 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.wizard;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+
+/**
+ * Clase wizard con la gesti�n de los botones y los paneles a�adidos al mismo.
+ * Al avanzar o retrasar un paso el asistente se desactivan todos los botones
+ * menos el de cancelar, que est� activo siempre por defecto
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class Wizard extends JPanel implements WizardControl {
+	private JPanel jPanel = null;
+	private JButton btnBack = null;
+	private JButton btnNext = null;
+	private JButton btnFinish = null;
+	private JButton btnCancel = null;
+	private ArrayList steps = new ArrayList();
+	private int currentStep = 0;
+	private JPanel pnlSteps = null;
+	private ArrayList listeners = new ArrayList();
+
+	/**
+	 * This is the default constructor
+	 */
+	public Wizard(String backText, String nextText, String finishText, String cancelText) {
+		super();
+		initialize(backText, nextText, finishText, cancelText);
+	}
+
+	/**
+	 * A�ade un l�stener de eventos del wizard
+	 *
+	 * @param listener
+	 */
+	public void addWizardListener(WizardListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * Elimina un listener de eventos del wizard
+	 *
+	 * @param listener
+	 */
+	public void removeWizardListener(WizardListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * Invoca en los listeners el evento cancel
+	 */
+	private void callCancelListener() {
+		for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+			WizardListener element = (WizardListener) iter.next();
+			element.cancel(new WizardEvent(this, currentStep));
+		}
+	}
+
+	/**
+	 * Invoca en los listeners el evento finish
+	 */
+	private void callFinishListener() {
+		for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+			WizardListener element = (WizardListener) iter.next();
+			element.finished(new WizardEvent(this, currentStep));
+		}
+	}
+
+	/**
+	 * Invoca en los listeners el evento next
+	 */
+	private void callNextListener() {
+		for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+			WizardListener element = (WizardListener) iter.next();
+			element.next(new WizardEvent(this, currentStep));
+		}
+	}
+
+	/**
+	 * Invoca en los listeners el evento back
+	 */
+	private void callBackListener() {
+		for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+			WizardListener element = (WizardListener) iter.next();
+			element.back(new WizardEvent(this, currentStep));
+		}
+	}
+
+	/**
+	 * This method initializes this
+	 */
+	private void initialize(String backText, String nextText, String finishText, String cancelText) {
+		this.setLayout(new BorderLayout());
+		this.setSize(300, 200);
+		this.add(getJPanel(backText, nextText, finishText, cancelText), java.awt.BorderLayout.SOUTH);
+		this.add(getPnlSteps(), java.awt.BorderLayout.CENTER);
+	}
+
+	/**
+	 * A�ade un paso al asistente. Inicializa el paso
+	 *
+	 * @param s Paso a a�adir
+	 *
+	 * @throws RuntimeException DOCUMENT ME!
+	 */
+	public void addStep(Step s) {
+		if (!(s instanceof JComponent)) {
+			throw new RuntimeException(
+				"Step must be a visual component (descend from JComponent)");
+		}
+
+		getPnlSteps().add((JComponent) s, BorderLayout.CENTER);
+		steps.add(s);
+		disableButtons();
+		s.init(this);
+	}
+
+	/**
+	 * Habilita o deshabilita los botones en funci�n del paso en el que se
+	 * encuentre el asistente
+	 */
+	private void disableButtons() {
+		btnNext.setEnabled(false);
+		btnBack.setEnabled(false);
+		btnFinish.setEnabled(false);
+	}
+
+	/**
+	 * Activa el paso al siguiente paso del asistente
+	 */
+	public void enableNext(boolean enabled) {
+		if (currentStep == (steps.size() - 1)) {
+			btnFinish.setEnabled(enabled);
+		} else {
+			btnNext.setEnabled(enabled);
+		}
+	}
+
+	/**
+	 * Activa el paso al paso anterior del asistente
+	 */
+	public void enableBack(boolean enabled) {
+		if (currentStep != 0) {
+			btnBack.setEnabled(enabled);
+		}
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel(String backText, String nextText, String finishText, String cancelText) {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.add(getBtnBack(backText), null);
+			jPanel.add(getBtnNext(nextText), null);
+			jPanel.add(getBtnFinish(finishText), null);
+			jPanel.add(getBtnCancel(cancelText), null);
+		}
+
+		return jPanel;
+	}
+
+	private JButton newJButton(String text){
+        return ToolsSwingLocator.getUsabilitySwingManager().createJButton(text);
+	}
+	
+	/**
+	 * Obtiene una referencia al bot�n de dar un paso atr�s
+	 * @param text
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBtnBack(String text) {
+		if (btnBack == null) {
+			btnBack = newJButton(text);
+			btnBack.setText(text);
+			btnBack.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnBack.setEnabled(false);
+			btnBack.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						backStep();
+					}
+				});
+		}
+
+		return btnBack;
+	}
+
+	/**
+	 * Obtiene una referencia al bot�n de dar un paso adelante
+	 * @param text
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBtnNext(String text) {
+		if (btnNext == null) {
+			btnNext = newJButton(text);
+			btnNext.setText(text);
+			btnNext.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnNext.setEnabled(false);
+			btnNext.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						nextStep();
+					}
+				});
+		}
+
+		return btnNext;
+	}
+
+	/**
+	 * Obtiene una referencia al bot�n de finalizar
+	 * @param finishText
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBtnFinish(String text) {
+		if (btnFinish == null) {
+			btnFinish = newJButton(text);
+			btnFinish.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnFinish.setText(text);
+			btnFinish.setEnabled(false);
+			btnFinish.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						callFinishListener();
+					}
+				});
+		}
+
+		return btnFinish;
+	}
+
+	/**
+	 * Obtiene una referencia al bot�n de cancelar
+	 * @param cancelText
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBtnCancel(String text) {
+		if (btnCancel == null) {
+			btnCancel = newJButton(text);
+			btnCancel.setMargin(new java.awt.Insets(2, 2, 2, 2));
+			btnCancel.setText(text);
+			btnCancel.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						callCancelListener();
+					}
+				});
+		}
+
+		return btnCancel;
+	}
+
+	/**
+	 * This method initializes pnlSteps
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlSteps() {
+		if (pnlSteps == null) {
+			pnlSteps = new JPanel();
+			pnlSteps.setLayout(new CardLayout());
+		}
+
+		return pnlSteps;
+	}
+
+	/**
+	 * Muestra el panel del siguiente paso del asistente
+	 */
+	public void nextStep() {
+		currentStep++;
+		((CardLayout) getPnlSteps().getLayout()).next(getPnlSteps());
+		disableButtons();
+		callNextListener();
+	}
+
+	/**
+	 * Muestra el panel del paso anterior del asistente
+	 */
+	public void backStep() {
+		currentStep--;
+		((CardLayout) getPnlSteps().getLayout()).previous(getPnlSteps());
+		disableButtons();
+		callBackListener();
+	}
+
+	/**
+	 * Se cancela el asistente. Esta operaci�n no tiene ning�n efecto, salvo
+	 * que se disparar� el evento de cancelado. El resultado de esto depender�
+	 * de las implementaciones que haya escuchando el evento. Generalmente
+	 * deber� haber un objeto que al escuchar este evento cerrar� el
+	 * asistente.
+	 */
+	public void cancel() {
+		callCancelListener();
+	}
+
+	/**
+	 * Se finaliza el asistente. Esta operaci�n no tiene ning�n efecto, salvo
+	 * que se disparar� el evento de finalizaci�n. El resultado de esto
+	 * depender� de las implementaciones que haya escuchando el evento.
+	 * Generalmente deber� haber un objeto que al escuchar este evento cerrar�
+	 * el asistente.
+	 */
+	public void finish() {
+		callFinishListener();
+	}
+
+	/**
+	 * Obtiene un array con los pasos del asistente
+	 *
+	 * @return array de pasos
+	 */
+	public Step[] getSteps() {
+		return (Step[]) steps.toArray(new Step[0]);
+	}
+
+	/**
+	 * Obtiene el paso actual del asistente
+	 *
+	 * @return Paso actual del asistente
+	 */
+	public Step getCurrentStep() {
+		return getSteps()[currentStep];
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/Wizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardControl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardControl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardControl.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.wizard;
+
+/**
+ * Visi�n que tienen los escuchadores de eventos sobre el Wizard
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface WizardControl {
+	/**
+	 * Activa el paso al siguiente paso del asistente
+	 *
+	 * @param enabled si se habilita o no
+	 */
+	public abstract void enableNext(boolean enabled);
+
+	/**
+	 * Activa el paso al paso anterior del asistente
+	 *
+	 * @param enabled si se habilita o no
+	 */
+	public abstract void enableBack(boolean enabled);
+
+	/**
+	 * Muestra el panel del siguiente paso del asistente
+	 */
+	public abstract void nextStep();
+
+	/**
+	 * Muestra el panel del paso anterior del asistente
+	 */
+	public abstract void backStep();
+
+	/**
+	 * Se cancela el asistente. Esta operaci�n no tiene ning�n efecto, salvo
+	 * que se disparar� el evento de cancelado. El resultado de esto depender�
+	 * de las implementaciones que haya escuchando el evento. Generalmente
+	 * deber� haber un objeto que al escuchar este evento cerrar� el
+	 * asistente.
+	 */
+	public abstract void cancel();
+
+	/**
+	 * Se finaliza el asistente. Esta operaci�n no tiene ning�n efecto, salvo
+	 * que se disparar� el evento de finalizaci�n. El resultado de esto
+	 * depender� de las implementaciones que haya escuchando el evento.
+	 * Generalmente deber� haber un objeto que al escuchar este evento cerrar�
+	 * el asistente.
+	 */
+	public abstract void finish();
+
+	/**
+	 * Obtiene el paso actual del asistente
+	 *
+	 * @return Paso actual del asistente
+	 */
+	public abstract Step getCurrentStep();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardControl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardEvent.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.wizard;
+
+/**
+ * Evento con la informaci�n del estado del asistente
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class WizardEvent {
+	public WizardControl wizard;
+	public int currentStep;
+
+	/**
+	 * Crea un nuevo WizardEvent.
+	 *
+	 * @param w referencia al asistente donde se gener� el evento
+	 * @param currentStep paso actual del asistente
+	 */
+	public WizardEvent(Wizard w, int currentStep) {
+		this.wizard = w;
+		this.currentStep = currentStep;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/wizard/WizardEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionEvent.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.jtable;
+
+import java.util.BitSet;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class FieldSelectionEvent {
+    private BitSet selectedIndices;
+    private int selectedField;
+    public int getSelectedField() {
+        return selectedField;
+    }
+    public void setSelectedField(int selectedField) {
+        this.selectedField = selectedField;
+    }
+    public BitSet getSelectedIndices() {
+        return selectedIndices;
+    }
+    public void setSelectedIndices(BitSet selectedIndices) {
+        this.selectedIndices = selectedIndices;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/SelectionHeaderSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/SelectionHeaderSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/SelectionHeaderSupport.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.jtable;
+
+import java.awt.Component;
+import java.awt.Insets;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.BitSet;
+
+import javax.swing.JTable;
+import javax.swing.JToggleButton;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class SelectionHeaderSupport {
+    private SelectionCellRenderer cellRenderer = new SelectionCellRenderer();
+    private FieldSelectionListenerSupport listenerSupport = new FieldSelectionListenerSupport();
+
+    public void setTableHeader(final JTableHeader header){
+		header.setDefaultRenderer(cellRenderer);
+		header.addMouseListener(new MouseAdapter() {
+            public void mouseClicked(MouseEvent e) {
+                for (int i = 0; i < header.getColumnModel().getColumnCount(); i++) {
+                    if (header.getHeaderRect(i).contains(e.getPoint())){
+                        if ((e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == MouseEvent.CTRL_DOWN_MASK){
+                            cellRenderer.toggleSelection(i);
+                        }else{
+                            cellRenderer.setSelection(i);
+                        }
+                        
+                        FieldSelectionEvent evt = new FieldSelectionEvent();
+                        evt.setSelectedField(i);
+                        evt.setSelectedIndices(cellRenderer.selectedColumnIndices);
+                        callFieldSelected(evt);
+                        break;
+                    }
+                }
+            }
+        });
+    }
+    
+    public BitSet getSelectedColumns(){
+        return cellRenderer.selectedColumnIndices;
+    }
+
+    /**
+     * Deja todas las columnas sin seleccionar.
+     */
+    public void clearSelectedColumns()
+    {
+        cellRenderer.selectedColumnIndices.clear();
+    }
+    public class SelectionCellRenderer extends JToggleButton implements TableCellRenderer {
+        
+        private BitSet selectedColumnIndices = new BitSet();
+        
+        public SelectionCellRenderer(){
+            this.setMargin(new Insets(0, 0, 0, 0));
+        }
+        
+        /**
+         * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
+         */
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+            this.setText(table.getModel().getColumnName(column));
+            this.setSelected(false);
+            for (int i = 0; i < selectedColumnIndices.cardinality(); i++) {
+                if (selectedColumnIndices.get(column)){
+                    this.setSelected(true);
+                }
+            }
+            return this;
+        }
+    
+        /**
+         * @param i
+         */
+        public void setSelection(int i) {
+            selectedColumnIndices.clear();
+            selectedColumnIndices.set(i);
+        }
+        
+        public void toggleSelection(int i) {
+            selectedColumnIndices.flip(i);
+        }
+        
+    }
+    public void addFieldSelectionListener(FieldSelectionListener listener) {
+        listenerSupport.addFieldSelectionListener(listener);
+    }
+    private void callFieldSelected(FieldSelectionEvent arg0) {
+        listenerSupport.callFieldSelected(arg0);
+    }
+    public void removeFieldSelectionListener(FieldSelectionListener listener) {
+        listenerSupport.removeFieldSelectionListener(listener);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/SelectionHeaderSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListenerSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListenerSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListenerSupport.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.jtable;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class FieldSelectionListenerSupport {
+    private ArrayList listeners = new ArrayList();
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param listener DOCUMENT ME!
+     */
+    public void addFieldSelectionListener(FieldSelectionListener listener) {
+        listeners.add(listener);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param listener DOCUMENT ME!
+     */
+    public void removeFieldSelectionListener(FieldSelectionListener listener) {
+        listeners.remove(listener);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param arg0 DOCUMENT ME!
+     */
+    public void callFieldSelected(FieldSelectionEvent arg0) {
+        Iterator i = listeners.iterator();
+
+        while (i.hasNext()) {
+            ((FieldSelectionListener) i.next()).fieldSelected(arg0);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListenerSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListener.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.jtable;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface FieldSelectionListener {
+    public void fieldSelected(FieldSelectionEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/FieldSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/TextFieldCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/TextFieldCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/TextFieldCellEditor.java	(revision 42196)
@@ -0,0 +1,127 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.jtable;
+
+import java.awt.Component;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class TextFieldCellEditor extends JTextField implements TableCellEditor{
+
+    private ArrayList listeners = new ArrayList();
+    private String initialValue;
+    
+    public TextFieldCellEditor() {
+        addKeyListener(new KeyAdapter() {
+            public void keyReleased(KeyEvent e) {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER){
+                    stopCellEditing();
+                }else if (e.getKeyCode() == KeyEvent.VK_ESCAPE){
+                    cancelCellEditing();
+                }
+            }
+        });
+    }
+    
+    /**
+     * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
+     */
+    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+        this.setText(value == null ? "" : value.toString());
+        return this;
+    }
+
+    /**
+     * @see javax.swing.CellEditor#cancelCellEditing()
+     */
+    public void cancelCellEditing() {
+        setText(initialValue);
+        for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingCanceled(evt);
+        }
+    }
+
+    /**
+     * @see javax.swing.CellEditor#stopCellEditing()
+     */
+    public boolean stopCellEditing() {
+        for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingStopped(evt);
+        }
+        
+        return true;
+    }
+
+    /**
+     * @see javax.swing.CellEditor#getCellEditorValue()
+     */
+    public Object getCellEditorValue() {
+        return getText();
+    }
+
+    /**
+     * @see javax.swing.CellEditor#isCellEditable(java.util.EventObject)
+     */
+    public boolean isCellEditable(EventObject anEvent) {
+        return true;
+    }
+
+    /**
+     * @see javax.swing.CellEditor#shouldSelectCell(java.util.EventObject)
+     */
+    public boolean shouldSelectCell(EventObject anEvent) {
+        return false;
+    }
+
+    /**
+     * @see javax.swing.CellEditor#addCellEditorListener(javax.swing.event.CellEditorListener)
+     */
+    public void addCellEditorListener(CellEditorListener l) {
+        listeners.add(l);
+    }
+
+    /**
+     * @see javax.swing.CellEditor#removeCellEditorListener(javax.swing.event.CellEditorListener)
+     */
+    public void removeCellEditorListener(CellEditorListener l) {
+        listeners.remove(l);
+    }
+    
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/TextFieldCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/JTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/JTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/JTable.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.jtable;
+
+import java.awt.event.KeyEvent;
+
+import javax.swing.KeyStroke;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class JTable extends javax.swing.JTable{
+    protected boolean processKeyBinding(KeyStroke ks, KeyEvent e,
+            int condition, boolean pressed) {
+        boolean value = super.processKeyBinding( ks, e, 
+                condition, pressed );
+
+        // Make sure that the editor component has focus.
+        if ( isEditing() ) {
+            getEditorComponent().requestFocus();
+        }
+        return value;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/jtable/JTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/sample/Sample.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/sample/Sample.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/sample/Sample.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing.sample;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.Locale;
+
+
+public class Sample {
+	
+    /**
+     * DOCUMENT ME!
+     *
+     * @param args DOCUMENT ME!
+     */
+    public static void main(String[] args) {
+        /* JFrame f = new JFrame("AutoCompleteComboBox");
+        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        JComboBox box = new JComboBox(new Object[] {"", "bos d�as","ata logo","deica logo"});
+        box.setEditable(true);
+        f.getContentPane().add(box);
+        f.pack();
+        f.setLocationRelativeTo(null);
+        f.setVisible(true); */
+        /* JPasswordDlg dlg = new JPasswordDlg();
+        dlg.setMessage("Hola");
+        dlg.show(); */
+        Locale ukLocale = new Locale("en", "UK"); // English, UK version
+        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, ukLocale);
+        /* Calendar c = Calendar.getInstance();
+        c.clear();
+        c.set(Integer.parseInt(year), Integer.parseInt(month),
+            Integer.parseInt(day));
+        c.set(Calendar.MILLISECOND, 0); */
+        String strAux = "12/06/1996";
+        Date dat = null;
+        try {
+            dat = df.parse(strAux);
+        } catch (ParseException e) {
+            e.printStackTrace();            
+        } 
+        System.out.println(dat.getYear() + " " + dat.getMonth() + " " + dat.getDate());
+        
+        String aux = "Ja�n";
+        StringBuffer strBuf = new StringBuffer(aux);
+        ByteArrayOutputStream out = new ByteArrayOutputStream(strBuf.length());
+        PrintStream printStream = new PrintStream(out);
+        printStream.print(aux);
+        try {
+            String aux2 = out.toString("UTF-8");
+            System.out.println(aux + " " + aux2);
+        } catch (UnsupportedEncodingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }                
+    }}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/sample/Sample.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JComboBox.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JComboBox.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JComboBox.java	(revision 42196)
@@ -0,0 +1,189 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.Vector;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JTextField;
+import javax.swing.plaf.basic.BasicComboBoxEditor;
+
+
+/**
+ * ComboBox autocompletable
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class JComboBox extends javax.swing.JComboBox {
+    /**
+     * Construye un combobox
+     */
+    public JComboBox() {
+        super();
+        init();
+    }
+
+    /**
+     * Construye un combobox
+     *
+     * @param arg0
+     */
+    public JComboBox(Object[] arg0) {
+        super(arg0);
+        init();
+    }
+
+    /**
+     * Construye un combobox
+     *
+     * @param arg0
+     */
+    public JComboBox(Vector arg0) {
+        super(arg0);
+        init();
+    }
+
+    /**
+     * Construye un combobox
+     *
+     * @param arg0
+     */
+    public JComboBox(ComboBoxModel arg0) {
+        super(arg0);
+        init();
+    }
+
+    /**
+     * Inicializa el combo
+     */
+    private void init() {
+        this.setEditor(new BasicComboBoxEditor());
+
+        JTextField jtext = (JTextField) JComboBox.this.getEditor()
+                                                      .getEditorComponent();
+        jtext.addKeyListener(new MyKeyListener());
+        jtext.setText("");
+    }
+
+    /**
+     * Manejador de los eventos Key para hacer el autocompletado
+     *
+     * @author Fernando Gonz�lez Cort�s
+     */
+    public class MyKeyListener implements KeyListener {
+        private int lastCaretPosition = 0;
+        private String lastText = "";
+        private boolean bAutocompletar=true;
+
+        /**
+         * Devuelve dada una String, la String del modelo que empieza por dicha
+         * String si hay alguna, o null si no hay ninguna
+         *
+         * @param text texto que se busca en el modelo
+         *
+         * @return String del modelo o null
+         */
+        private String isInModel(String text) {
+            DefaultComboBoxModel model = (DefaultComboBoxModel) JComboBox.this.getModel();
+
+            for (int i = 0; i < model.getSize(); i++) {
+                if ((model.getElementAt(i).toString()).startsWith(text)) {
+                    return model.getElementAt(i).toString();
+                }
+            }
+
+            return null;
+        }
+
+        /**
+         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+         */
+        public void actionPerformed(ActionEvent arg0) {
+            JTextField jtext = (JTextField) JComboBox.this.getEditor()
+                                                          .getEditorComponent();
+            String texto = jtext.getText();
+
+            String text = isInModel(texto);
+            
+            if (text != null) {
+                int caretPos = texto.length();
+                jtext.setText(text);
+                jtext.setCaretPosition(caretPos);
+                jtext.setSelectionStart(caretPos);
+                jtext.setSelectionEnd(text.length());
+            }
+        }
+
+        /**
+         * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
+         */
+        public void keyPressed(KeyEvent e) {
+            JTextField jtext = (JTextField) JComboBox.this.getEditor()
+                                                          .getEditorComponent();
+            bAutocompletar = true;
+            if ((e.getKeyCode() == KeyEvent.VK_BACK_SPACE)
+                    || (e.getKeyCode() == KeyEvent.VK_DELETE))
+            {
+                bAutocompletar = false;
+                /* if ((lastCaretPosition >=0) && 
+                        (lastCaretPosition <= jtext.getText().length()))
+                        	jtext.setCaretPosition(lastCaretPosition); */
+            }
+        }
+
+        /**
+         * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
+         */
+        public void keyReleased(KeyEvent e) {
+            JTextField jtext = (JTextField) JComboBox.this.getEditor()
+                                                          .getEditorComponent();
+            String texto = jtext.getText().substring(0, jtext.getCaretPosition());
+
+            if (!bAutocompletar) return;
+            String text = isInModel(texto);
+
+            if (!jtext.getText().equals(lastText) && (text != null)) {
+                int caretPos = texto.length();
+                jtext.setText(text);
+                jtext.setCaretPosition(text.length());
+                jtext.moveCaretPosition(caretPos);
+                lastText = text;
+                lastCaretPosition = caretPos;
+                JComboBox.this.setSelectedItem(text);
+            } else {
+                lastCaretPosition = jtext.getCaretPosition();
+            }
+        }
+
+        /**
+         * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
+         */
+        public void keyTyped(KeyEvent e) {
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JComboBox.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JPasswordDlg.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JPasswordDlg.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JPasswordDlg.java	(revision 42196)
@@ -0,0 +1,220 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.swing;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextArea;
+
+public class JPasswordDlg extends JDialog {
+
+    private JPanel jContentPane = null;
+
+    private JButton jButtonOK = null;
+
+    private JButton jButton1 = null;
+
+    private JPasswordField jPasswordField = null;
+
+    private String password = null;
+
+    private JEditorPane jEditorPane = null;
+
+    private JTextArea jLblMensaje = null;
+    
+    private WindowEventsHandler windowHandler = new WindowEventsHandler();
+
+    /**
+     * This is the default constructor
+     */
+    public JPasswordDlg() {
+        super();
+        initialize();
+    }
+
+    class WindowEventsHandler extends WindowAdapter
+    {
+
+        /* (non-Javadoc)
+         * @see java.awt.event.WindowAdapter#windowActivated(java.awt.event.WindowEvent)
+         */
+        public void windowActivated(WindowEvent e) {
+            // TODO Auto-generated method stub
+            super.windowActivated(e);
+            jPasswordField.requestFocus();
+        }
+        
+    }
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+private void initialize() {
+        this.setSize(287, 172);
+        this.setModal(true);
+        this.setResizable(false);
+        this.setTitle("Enter Password");
+        this.setContentPane(getJContentPane());
+        
+        addWindowListener(windowHandler);
+    }
+    /**
+     * This method initializes jContentPane
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJContentPane() {
+        if (jContentPane == null) {
+            jContentPane = new JPanel();
+            jContentPane.setLayout(null);
+            jContentPane.add(getJButton1(), null);
+            jContentPane.add(getJButtonOK(), null);
+            jContentPane.add(getJPasswordField(), null);
+            jContentPane.add(getJLblMensaje(), null);
+
+        }
+        return jContentPane;
+    }
+
+    /**
+     * This method initializes jButton
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJButtonOK() {
+        if (jButtonOK == null) {
+            jButtonOK = new JButton();
+            jButtonOK.setText("OK");
+            jButtonOK.setPreferredSize(new java.awt.Dimension(65, 23));
+            jButtonOK.setBounds(35, 110, 101, 22);
+            jButtonOK.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    System.out.println("actionPerformed()"); // TODO
+                    // Auto-generated
+                    // Event stub
+                    // actionPerformed()
+                    password = String.copyValueOf(getJPasswordField()
+                            .getPassword());
+                    dispose();
+                }
+            });
+        }
+        return jButtonOK;
+    }
+
+    /**
+     * This method initializes jButton1
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJButton1() {
+        if (jButton1 == null) {
+            jButton1 = new JButton();
+            jButton1.setText("Cancel");
+            jButton1.setBounds(136, 110, 99, 22);
+            jButton1.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    password = null;
+                    dispose();
+                }
+            });
+        }
+        return jButton1;
+    }
+
+    /**
+     * This method initializes jPasswordField
+     * 
+     * @return javax.swing.JPasswordField
+     */
+    private JPasswordField getJPasswordField() {
+        if (jPasswordField == null) {
+            jPasswordField = new JPasswordField();
+            jPasswordField.setPreferredSize(new java.awt.Dimension(60, 22));
+            jPasswordField.setBounds(65, 78, 145, 21);
+            jPasswordField.addKeyListener(new java.awt.event.KeyAdapter() {
+                public void keyTyped(java.awt.event.KeyEvent e) {
+                    if (e.getKeyChar() == KeyEvent.VK_ENTER) {
+                        // System.out.println("INTRO");
+                        getJButtonOK().doClick();
+                    }
+                }
+            });
+        }
+        return jPasswordField;
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    public String getPassword() {
+        return password;
+    }
+
+    public void setMessage(String str) {
+        getJLblMensaje().setText(str);
+    }
+
+    /**
+     * This method initializes jEditorPane
+     * 
+     * @return javax.swing.JEditorPane
+     */
+    private JEditorPane getJEditorPane() {
+        if (jEditorPane == null) {
+            jEditorPane = new JEditorPane();
+        }
+        return jEditorPane;
+    }
+
+    /**
+     * This method initializes jTextArea
+     * 
+     * @return javax.swing.JTextArea
+     */
+    private JTextArea getJLblMensaje() {
+        if (jLblMensaje == null) {
+            jLblMensaje = new JTextArea();
+            jLblMensaje.setEditable(false);
+            jLblMensaje.setForeground(java.awt.Color.black);
+            jLblMensaje.setBackground(java.awt.SystemColor.control);
+            jLblMensaje.setText("Mensaje");
+            jLblMensaje.setLineWrap(true);
+            jLblMensaje.setFont(new java.awt.Font("SansSerif",
+                    java.awt.Font.PLAIN, 12));
+            jLblMensaje.setPreferredSize(new java.awt.Dimension(270, 50));
+            jLblMensaje.setBounds(9, 6, 266, 68);
+            jLblMensaje.setWrapStyleWord(true);
+        }
+        return jLblMensaje;
+    }
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/swing/JPasswordDlg.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/PropertyDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/PropertyDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/PropertyDescriptor.java	(revision 42196)
@@ -0,0 +1,272 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PropertyDescriptor.java 29631 2009-06-29 16:56:19Z jpiera $
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils.xmlEntity.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class PropertyDescriptor.
+ * 
+ * @version $Revision: 29631 $ $Date: 2009-06-29 18:56:19 +0200 (lun, 29 jun 2009) $
+ */
+public class PropertyDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PropertyDescriptor() {
+        super();
+        nsURI = "http://www.gvsig.gva.es";
+        xmlName = "property";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _key
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_key", "key", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Property target = (Property) object;
+                return target.getKey();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Property target = (Property) object;
+                    target.setKey( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _key
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _value
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_value", "value", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Property target = (Property) object;
+                return target.getValue();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Property target = (Property) object;
+                    target.setValue( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _value
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.utiles.xmlEntity.generate.PropertyDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.utils.xmlEntity.generate.Property.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/PropertyDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/Property.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/Property.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/Property.java	(revision 42196)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Property.java 29631 2009-06-29 16:56:19Z jpiera $
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils.xmlEntity.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Property.
+ * 
+ * @version $Revision: 29631 $ $Date: 2009-06-29 18:56:19 +0200 (lun, 29 jun 2009) $
+ */
+public class Property implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _key
+     */
+    private java.lang.String _key;
+
+    /**
+     * Field _value
+     */
+    private java.lang.String _value;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Property() {
+        super();
+    } //-- com.iver.utiles.xmlEntity.generate.Property()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'key'.
+     * 
+     * @return the value of field 'key'.
+     */
+    public java.lang.String getKey()
+    {
+        return this._key;
+    } //-- java.lang.String getKey() 
+
+    /**
+     * Returns the value of field 'value'.
+     * 
+     * @return the value of field 'value'.
+     */
+    public java.lang.String getValue()
+    {
+        return this._value;
+    } //-- java.lang.String getValue() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'key'.
+     * 
+     * @param key the value of field 'key'.
+     */
+    public void setKey(java.lang.String key)
+    {
+        this._key = key;
+    } //-- void setKey(java.lang.String) 
+
+    /**
+     * Sets the value of field 'value'.
+     * 
+     * @param value the value of field 'value'.
+     */
+    public void setValue(java.lang.String value)
+    {
+        this._value = value;
+    } //-- void setValue(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.utils.xmlEntity.generate.Property) Unmarshaller.unmarshal(org.gvsig.utils.xmlEntity.generate.Property.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/Property.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastorDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastorDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastorDescriptor.java	(revision 42196)
@@ -0,0 +1,234 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: XmlCastorDescriptor.java 29631 2009-06-29 16:56:19Z jpiera $
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils.xmlEntity.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class XmlCastorDescriptor.
+ * 
+ * @version $Revision: 29631 $ $Date: 2009-06-29 18:56:19 +0200 (lun, 29 jun 2009) $
+ */
+public class XmlCastorDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlCastorDescriptor() {
+        super();
+        nsURI = "http://www.gvsig.gva.es";
+        xmlName = "xmlCastor";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _xmlTagList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.utils.xmlEntity.generate.XmlTag.class, "_xmlTagList", "xml-tag", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                XmlCastor target = (XmlCastor) object;
+                return target.getXmlTag();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    XmlCastor target = (XmlCastor) object;
+                    target.addXmlTag( (org.gvsig.utils.xmlEntity.generate.XmlTag) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.utils.xmlEntity.generate.XmlTag();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xmlTagList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.utiles.xmlEntity.generate.XmlCastorDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.utils.xmlEntity.generate.XmlCastor.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastorDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTagDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTagDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTagDescriptor.java	(revision 42196)
@@ -0,0 +1,305 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: XmlTagDescriptor.java 29631 2009-06-29 16:56:19Z jpiera $
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils.xmlEntity.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class XmlTagDescriptor.
+ * 
+ * @version $Revision: 29631 $ $Date: 2009-06-29 18:56:19 +0200 (lun, 29 jun 2009) $
+ */
+public class XmlTagDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlTagDescriptor() {
+        super();
+        nsURI = "http://www.gvsig.gva.es";
+        xmlName = "xml-tag";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                XmlTag target = (XmlTag) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    XmlTag target = (XmlTag) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _propertyList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.utils.xmlEntity.generate.Property.class, "_propertyList", "property", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                XmlTag target = (XmlTag) object;
+                return target.getProperty();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    XmlTag target = (XmlTag) object;
+                    target.addProperty( (org.gvsig.utils.xmlEntity.generate.Property) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.utils.xmlEntity.generate.Property();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _propertyList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _xmlTagList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.utils.xmlEntity.generate.XmlTag.class, "_xmlTagList", "xml-tag", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                XmlTag target = (XmlTag) object;
+                return target.getXmlTag();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    XmlTag target = (XmlTag) object;
+                    target.addXmlTag( (org.gvsig.utils.xmlEntity.generate.XmlTag) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.utils.xmlEntity.generate.XmlTag();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xmlTagList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTagDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.utils.xmlEntity.generate.XmlTag.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTagDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastor.java	(revision 42196)
@@ -0,0 +1,291 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: XmlCastor.java 29631 2009-06-29 16:56:19Z jpiera $
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils.xmlEntity.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class XmlCastor.
+ * 
+ * @version $Revision: 29631 $ $Date: 2009-06-29 18:56:19 +0200 (lun, 29 jun 2009) $
+ */
+public class XmlCastor implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _xmlTagList
+     */
+    private java.util.Vector _xmlTagList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlCastor() {
+        super();
+        _xmlTagList = new Vector();
+    } //-- com.iver.utiles.xmlEntity.generate.XmlCastor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addXmlTag
+     * 
+     * @param vXmlTag
+     */
+    public void addXmlTag(org.gvsig.utils.xmlEntity.generate.XmlTag vXmlTag)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _xmlTagList.addElement(vXmlTag);
+    } //-- void addXmlTag(com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method addXmlTag
+     * 
+     * @param index
+     * @param vXmlTag
+     */
+    public void addXmlTag(int index, org.gvsig.utils.xmlEntity.generate.XmlTag vXmlTag)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _xmlTagList.insertElementAt(vXmlTag, index);
+    } //-- void addXmlTag(int, com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method enumerateXmlTag
+     */
+    public java.util.Enumeration enumerateXmlTag()
+    {
+        return _xmlTagList.elements();
+    } //-- java.util.Enumeration enumerateXmlTag() 
+
+    /**
+     * Method getXmlTag
+     * 
+     * @param index
+     */
+    public org.gvsig.utils.xmlEntity.generate.XmlTag getXmlTag(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _xmlTagList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.utils.xmlEntity.generate.XmlTag) _xmlTagList.elementAt(index);
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTag getXmlTag(int) 
+
+    /**
+     * Method getXmlTag
+     */
+    public org.gvsig.utils.xmlEntity.generate.XmlTag[] getXmlTag()
+    {
+        int size = _xmlTagList.size();
+        org.gvsig.utils.xmlEntity.generate.XmlTag[] mArray = new org.gvsig.utils.xmlEntity.generate.XmlTag[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.utils.xmlEntity.generate.XmlTag) _xmlTagList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTag[] getXmlTag() 
+
+    /**
+     * Method getXmlTagCount
+     */
+    public int getXmlTagCount()
+    {
+        return _xmlTagList.size();
+    } //-- int getXmlTagCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllXmlTag
+     */
+    public void removeAllXmlTag()
+    {
+        _xmlTagList.removeAllElements();
+    } //-- void removeAllXmlTag() 
+
+    /**
+     * Method removeXmlTag
+     * 
+     * @param index
+     */
+    public org.gvsig.utils.xmlEntity.generate.XmlTag removeXmlTag(int index)
+    {
+        java.lang.Object obj = _xmlTagList.elementAt(index);
+        _xmlTagList.removeElementAt(index);
+        return (org.gvsig.utils.xmlEntity.generate.XmlTag) obj;
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTag removeXmlTag(int) 
+
+    /**
+     * Method setXmlTag
+     * 
+     * @param index
+     * @param vXmlTag
+     */
+    public void setXmlTag(int index, org.gvsig.utils.xmlEntity.generate.XmlTag vXmlTag)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _xmlTagList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _xmlTagList.setElementAt(vXmlTag, index);
+    } //-- void setXmlTag(int, com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method setXmlTag
+     * 
+     * @param xmlTagArray
+     */
+    public void setXmlTag(org.gvsig.utils.xmlEntity.generate.XmlTag[] xmlTagArray)
+    {
+        //-- copy array
+        _xmlTagList.removeAllElements();
+        for (int i = 0; i < xmlTagArray.length; i++) {
+            _xmlTagList.addElement(xmlTagArray[i]);
+        }
+    } //-- void setXmlTag(com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.utils.xmlEntity.generate.XmlCastor) Unmarshaller.unmarshal(org.gvsig.utils.xmlEntity.generate.XmlCastor.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlCastor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTag.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTag.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTag.java	(revision 42196)
@@ -0,0 +1,440 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: XmlTag.java 29631 2009-06-29 16:56:19Z jpiera $
+ */
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.utils.xmlEntity.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class XmlTag.
+ * 
+ * @version $Revision: 29631 $ $Date: 2009-06-29 18:56:19 +0200 (lun, 29 jun 2009) $
+ */
+public class XmlTag implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _propertyList
+     */
+    private java.util.Vector _propertyList;
+
+    /**
+     * Field _xmlTagList
+     */
+    private java.util.Vector _xmlTagList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlTag() {
+        super();
+        _propertyList = new Vector();
+        _xmlTagList = new Vector();
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTag()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addProperty
+     * 
+     * @param vProperty
+     */
+    public void addProperty(org.gvsig.utils.xmlEntity.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _propertyList.addElement(vProperty);
+    } //-- void addProperty(com.iver.utiles.xmlEntity.generate.Property) 
+
+    /**
+     * Method addProperty
+     * 
+     * @param index
+     * @param vProperty
+     */
+    public void addProperty(int index, org.gvsig.utils.xmlEntity.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _propertyList.insertElementAt(vProperty, index);
+    } //-- void addProperty(int, com.iver.utiles.xmlEntity.generate.Property) 
+
+    /**
+     * Method addXmlTag
+     * 
+     * @param vXmlTag
+     */
+    public void addXmlTag(org.gvsig.utils.xmlEntity.generate.XmlTag vXmlTag)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _xmlTagList.addElement(vXmlTag);
+    } //-- void addXmlTag(com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method addXmlTag
+     * 
+     * @param index
+     * @param vXmlTag
+     */
+    public void addXmlTag(int index, org.gvsig.utils.xmlEntity.generate.XmlTag vXmlTag)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _xmlTagList.insertElementAt(vXmlTag, index);
+    } //-- void addXmlTag(int, com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method enumerateProperty
+     */
+    public java.util.Enumeration enumerateProperty()
+    {
+        return _propertyList.elements();
+    } //-- java.util.Enumeration enumerateProperty() 
+
+    /**
+     * Method enumerateXmlTag
+     */
+    public java.util.Enumeration enumerateXmlTag()
+    {
+        return _xmlTagList.elements();
+    } //-- java.util.Enumeration enumerateXmlTag() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method getProperty
+     * 
+     * @param index
+     */
+    public org.gvsig.utils.xmlEntity.generate.Property getProperty(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _propertyList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.utils.xmlEntity.generate.Property) _propertyList.elementAt(index);
+    } //-- com.iver.utiles.xmlEntity.generate.Property getProperty(int) 
+
+    /**
+     * Method getProperty
+     */
+    public org.gvsig.utils.xmlEntity.generate.Property[] getProperty()
+    {
+        int size = _propertyList.size();
+        org.gvsig.utils.xmlEntity.generate.Property[] mArray = new org.gvsig.utils.xmlEntity.generate.Property[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.utils.xmlEntity.generate.Property) _propertyList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.utiles.xmlEntity.generate.Property[] getProperty() 
+
+    /**
+     * Method getPropertyCount
+     */
+    public int getPropertyCount()
+    {
+        return _propertyList.size();
+    } //-- int getPropertyCount() 
+
+    /**
+     * Method getXmlTag
+     * 
+     * @param index
+     */
+    public org.gvsig.utils.xmlEntity.generate.XmlTag getXmlTag(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _xmlTagList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.utils.xmlEntity.generate.XmlTag) _xmlTagList.elementAt(index);
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTag getXmlTag(int) 
+
+    /**
+     * Method getXmlTag
+     */
+    public org.gvsig.utils.xmlEntity.generate.XmlTag[] getXmlTag()
+    {
+        int size = _xmlTagList.size();
+        org.gvsig.utils.xmlEntity.generate.XmlTag[] mArray = new org.gvsig.utils.xmlEntity.generate.XmlTag[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.utils.xmlEntity.generate.XmlTag) _xmlTagList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTag[] getXmlTag() 
+
+    /**
+     * Method getXmlTagCount
+     */
+    public int getXmlTagCount()
+    {
+        return _xmlTagList.size();
+    } //-- int getXmlTagCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllProperty
+     */
+    public void removeAllProperty()
+    {
+        _propertyList.removeAllElements();
+    } //-- void removeAllProperty() 
+
+    /**
+     * Method removeAllXmlTag
+     */
+    public void removeAllXmlTag()
+    {
+        _xmlTagList.removeAllElements();
+    } //-- void removeAllXmlTag() 
+
+    /**
+     * Method removeProperty
+     * 
+     * @param index
+     */
+    public org.gvsig.utils.xmlEntity.generate.Property removeProperty(int index)
+    {
+        java.lang.Object obj = _propertyList.elementAt(index);
+        _propertyList.removeElementAt(index);
+        return (org.gvsig.utils.xmlEntity.generate.Property) obj;
+    } //-- com.iver.utiles.xmlEntity.generate.Property removeProperty(int) 
+
+    /**
+     * Method removeXmlTag
+     * 
+     * @param index
+     */
+    public org.gvsig.utils.xmlEntity.generate.XmlTag removeXmlTag(int index)
+    {
+        java.lang.Object obj = _xmlTagList.elementAt(index);
+        _xmlTagList.removeElementAt(index);
+        return (org.gvsig.utils.xmlEntity.generate.XmlTag) obj;
+    } //-- com.iver.utiles.xmlEntity.generate.XmlTag removeXmlTag(int) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Method setProperty
+     * 
+     * @param index
+     * @param vProperty
+     */
+    public void setProperty(int index, org.gvsig.utils.xmlEntity.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _propertyList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _propertyList.setElementAt(vProperty, index);
+    } //-- void setProperty(int, com.iver.utiles.xmlEntity.generate.Property) 
+
+    /**
+     * Method setProperty
+     * 
+     * @param propertyArray
+     */
+    public void setProperty(org.gvsig.utils.xmlEntity.generate.Property[] propertyArray)
+    {
+        //-- copy array
+        _propertyList.removeAllElements();
+        for (int i = 0; i < propertyArray.length; i++) {
+            _propertyList.addElement(propertyArray[i]);
+        }
+    } //-- void setProperty(com.iver.utiles.xmlEntity.generate.Property) 
+
+    /**
+     * Method setXmlTag
+     * 
+     * @param index
+     * @param vXmlTag
+     */
+    public void setXmlTag(int index, org.gvsig.utils.xmlEntity.generate.XmlTag vXmlTag)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _xmlTagList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _xmlTagList.setElementAt(vXmlTag, index);
+    } //-- void setXmlTag(int, com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method setXmlTag
+     * 
+     * @param xmlTagArray
+     */
+    public void setXmlTag(org.gvsig.utils.xmlEntity.generate.XmlTag[] xmlTagArray)
+    {
+        //-- copy array
+        _xmlTagList.removeAllElements();
+        for (int i = 0; i < xmlTagArray.length; i++) {
+            _xmlTagList.addElement(xmlTagArray[i]);
+        }
+    } //-- void setXmlTag(com.iver.utiles.xmlEntity.generate.XmlTag) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.utils.xmlEntity.generate.XmlTag) Unmarshaller.unmarshal(org.gvsig.utils.xmlEntity.generate.XmlTag.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/xmlEntity/generate/XmlTag.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/vectorUtilities/VectorUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/vectorUtilities/VectorUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/vectorUtilities/VectorUtilities.java	(revision 42196)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils.vectorUtilities;
+
+import java.util.Comparator;
+import java.util.Vector;
+
+import org.gvsig.utils.MathExtension;
+
+
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/**
+ * New functionality to work with vectors (of elements).
+ *
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class VectorUtilities {
+	/**
+	 * Adds an item in alphabetical order.
+	 *
+	 * @param v java.util.Vector in alphabetical order.
+	 * @param obj java.lang.Object
+	 */
+	public static synchronized void addAlphabeticallyOrdered(Vector v, Object obj) {
+		int size = v.size();
+		int currentIteration = 0;
+		int index, aux_index;
+		int lowIndex = 0;
+		int highIndex = size -1;
+		int maxNumberOfIterations = (int) MathExtension.log2(size);
+
+		// If there are no items
+		if (size == 0) {
+			v.add(obj);
+			return;
+		}
+
+		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+			index = ( lowIndex + highIndex ) / 2;
+
+			// If the item in the index position has the same value as obj
+			if (v.get(index).toString().compareTo(obj.toString()) == 0) {
+				v.add(index, obj);
+				return;
+			}
+
+			// If the item in the index position has a lower value than the obj
+			if (v.get(index).toString().compareTo(obj.toString()) < 0) {
+				aux_index = index + 1;
+
+				if ((aux_index) >= size) {
+					v.add(v.size() , obj);
+					return;
+				}
+
+				if (v.get(aux_index).toString().compareTo(obj.toString()) > 0) {
+					v.add(aux_index, obj);
+					return;
+				}
+
+				lowIndex = aux_index;
+			}
+			else {
+				// If the item in the index position has a higher value than the obj
+				if (v.get(index).toString().compareTo(obj.toString()) > 0) {
+					aux_index = index - 1;
+
+					if ((aux_index) < 0) {
+						v.add(0 , obj);
+						return;
+					}
+
+					if (v.get(aux_index).toString().compareTo(obj.toString()) < 0) {
+						v.add(index, obj);
+						return;
+					}
+
+					highIndex = aux_index;
+				}
+			}
+
+			currentIteration ++;
+		}
+	}
+
+	/**
+	 * Adds an item in alphabetical order using a comparator for compare the objects. The vector must be alhabetically ordered.
+	 *
+	 * @param v java.util.Vector in alphabetical order.
+	 * @param obj java.lang.Object
+	 * @param comp java.util.Comparator
+	 */
+	public static synchronized void addAlphabeticallyOrdered(Vector v, Object obj, Comparator comp) {
+		int size = v.size();
+		int currentIteration = 0;
+		int index, aux_index;
+		int lowIndex = 0;
+		int highIndex = size -1;
+		int maxNumberOfIterations = (int) MathExtension.log2(size);
+
+		// If there are no items
+		if (size == 0) {
+			v.add(obj);
+			return;
+		}
+
+		while ((lowIndex <= highIndex) && (currentIteration <= maxNumberOfIterations)) {
+			index = ( lowIndex + highIndex ) / 2;
+
+			// If the item in the index position has the same value as obj
+			if (comp.compare(v.get(index), obj) == 0) {
+				v.add(index, obj);
+				return;
+			}
+
+			// If the item in the index position has a lower value than the obj
+			if (comp.compare(v.get(index), obj) < 0) {
+				aux_index = index + 1;
+
+				if ((aux_index) >= size) {
+					v.add(v.size() , obj);
+					return;
+				}
+
+				if (comp.compare(v.get(aux_index), obj) > 0) {
+					v.add(aux_index, obj);
+					return;
+				}
+
+				lowIndex = aux_index;
+			}
+			else {
+				// If the item in the index position has a higher value than the obj
+				if (comp.compare(v.get(index), obj) > 0) {
+					aux_index = index - 1;
+
+					if ((aux_index) < 0) {
+						v.add(0 , obj);
+						return;
+					}
+
+					if (comp.compare(v.get(aux_index), obj) < 0) {
+						v.add(index, obj);
+						return;
+					}
+
+					highIndex = aux_index;
+				}
+			}
+
+			currentIteration ++;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/vectorUtilities/VectorUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberComparator.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+import java.util.Comparator;
+
+
+/**
+ * Comparador de numeros en orden habitual
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class NumberComparator implements Comparator {
+    /**
+     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+     */
+    public int compare(Object o1, Object o2) {
+        double d1 = ((Number) o1).doubleValue();
+        double d2 = ((Number) o2).doubleValue();
+
+        return (int) (d1 - d2);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/NumberComparator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SymbolSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SymbolSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SymbolSet.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.utils;
+
+/**
+ * Conjunto de s�mbolos
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface SymbolSet {
+    /**
+     * Devuelve true si el caracter c est� en el conjunto
+     *
+     * @param c caracter
+     *
+     * @return true si est� en el conjunto y false en caso contrario
+     */
+    public boolean contains(char c);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/java/org/gvsig/utils/SymbolSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/config/xml-entity.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/config/xml-entity.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/config/xml-entity.xsd	(revision 42196)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+
+<xs:schema targetNamespace="http://www.gvsig.gva.es"
+        xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="xmlCastor">
+    <xs:complexType>
+    <xs:sequence>
+        <xs:element ref="xml-tag" minOccurs="0" maxOccurs="unbounded" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  
+  <xs:element name="property">
+    <xs:complexType>
+      <xs:attribute name="key" type="xs:string" use="required" />
+      <xs:attribute name="value" type="xs:string" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="xml-tag">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="property" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="xml-tag" minOccurs="0" maxOccurs="unbounded" />
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:string" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+</xs:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils/src/main/config/xml-entity.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library/org.gvsig.utils
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.library
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/pom.xml	(revision 42196)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <build>
+      <plugins>
+          <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-compiler-plugin</artifactId>
+              <configuration>
+                  <source>1.4</source>
+                  <target>1.4</target>
+                  <encoding>ISO-8859-1</encoding>
+              </configuration>
+          </plugin>
+    
+      </plugins>
+  </build>
+
+  <modules>
+      <module>org.gvsig.i18n</module>
+      <module>org.gvsig.compat</module>
+      <module>org.gvsig.projection</module>
+      <module>org.gvsig.fmap.geometry</module>
+      <module>org.gvsig.remoteclient</module>
+      <module>org.gvsig.fmap.dal</module>
+      <module>org.gvsig.fmap.mapcontext</module>
+      <module>org.gvsig.metadata.basic</module>
+  </modules>
+
+  <description>This project group the gvSIG libraries that haven java 1.4 compatibility.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+                      
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.remoteclient</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+    <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.api</artifactId>
+        <scope>compile</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>net.sf.kxml</groupId>
+          <artifactId>kxml2</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>xmlpull</groupId>
+          <artifactId>xmlpull</artifactId>
+          <scope>compile</scope>
+      </dependency>
+    <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    
+    <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <description>Contains utility clases to manage the access to remote data sources how WMS, WCS or WFS.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DescribeCoverageTags.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DescribeCoverageTags.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DescribeCoverageTags.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.utils;
+
+public class DescribeCoverageTags {
+	private DescribeCoverageTags() {};
+    public static final String COVERAGE_DESCRIPTION = "CoverageDescription";
+    public static final String COVERAGE_OFFERING = "CoverageOffering";
+    public static final String NAME = "name";
+    public static final String LABEL = "label";
+    public static final String LONLAT_ENVELOPE = "lonLatEnvelope";
+	public static final String WGS84 = "WGS84(DD)"; // Decimal Degree
+	public static final String GML_ENVELOPE = "gml:Envelope";
+	public static final String GML_POS = "gml:pos";
+	public static final String SRSNAME = "srsName";
+
+	public static final String DOMAINSET = "domainSet";
+	public static final String SPATIALDOMAIN = "spatialDomain";
+	public static final String GRID = "gml:Grid";
+	public static final String RECTIFIEDGRID = "gml:RectifiedGrid";
+	public static final String GML_GRIDENVELOPE = "gml:GridEnvelope";
+	public static final String GML_LIMITS = "gml:limits";
+	public static final String GML_AXISNAME = "gml:axisName";
+	public static final String GML_ORIGIN = "gml:origin";
+	public static final String DIMENSION = "dimension";
+	public static final String GML_LOW = "gml:low";
+	public static final String GML_HIGH = "gml:high";
+	public static final String OFFSETVECTOR = "gml:offsetVector";
+	public static final String TEMPORALDOMAIN = "temporalDomain";
+	public static final String GML_TIMEPOSITION = "gml:timePosition";
+	public static final String TIMEPERIOD = "timePeriod";
+	public static final String BEGINPOSITION = "beginPosition";
+	public static final String ENDPOSITION = "endPosition";
+	public static final String TIMERESOLUTION = "timeResolution";
+
+	public static final String RANGESET = "RangeSet";
+	/* TODO this can cause eventually problems if in a future the "rangeSet" (not "RangeSet")
+	 * has more than one sub RangeSet subelement since I'm assuming it and a "rangeSet" tag is
+	 * simply ignored since it has no effect if it just contains one, and only one, RangeSet
+	 * subelement.
+	 */
+	public static final String AXISDESCRIPTION = "AxisDescription" ;
+	public static final String VALUES = "values";
+	public static final String SINGLEVALUE = "singleValue";
+	public static final String INTERVAL = "interval";
+	public static final String DEFAULT = "default";
+	public static final String NULLVALUES = "NullValues";
+
+	public static final String SUPPORTED_CRSS = "supportedCRSs";
+	public static final String REQUEST_RESPONSE_CRSS = "requestResponseCRSs";
+	public static final String NATIVE_CRS = "nativeCRSs";
+	public static final String REQUEST_CRSS = "requestCRSs";
+	public static final String RESPONSE_CRSS = "responseCRSs";
+
+	public static final String SUPPORTED_FORMATS = "supportedFormats";
+	public static final String NATIVE_FORMAT = "nativeFormat";
+	public static final String FORMATS = "formats";
+	public static final String SUPPORTED_INTERPOLATIONS = "supportedInterpolations";
+	public static final String INTERPOLATION_METHOD = "interpolationMethod";
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DescribeCoverageTags.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/Utilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/Utilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/Utilities.java	(revision 42196)
@@ -0,0 +1,508 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.utils;
+
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ConnectException;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.net.Downloader;
+import org.gvsig.compat.net.ICancellable;
+
+
+
+
+/**
+ * Clase con m�todos de utilidad en el protocolo WMS
+ *
+ * @authors Laura D�az, jaume dominguez faus
+ */
+public class Utilities {
+	private static final Downloader downloader = CompatLocator.getDownloader();
+    private static String characters;
+	static boolean canceled;
+	static final long latency = 500;
+	/**
+	 * Used to cancel a group of files
+	 * <b>key</b>: Group id, <b>value</b>: Boolean (true if
+	 * the group has to be canceled. Otherwise it is
+	 * false)
+	 */
+	static Hashtable canceledGroup = new Hashtable();
+	/**
+	 * <b>key</b>: URL, <b>value</b>: path to the downloaded file.
+	 */
+	private static Hashtable downloadedFiles;
+	static Exception downloadException;
+	private static final String tempDirectoryPath = System.getProperty("java.io.tmpdir")+"/tmp-andami";
+
+
+	static {
+		characters = "";
+		for (int j = 32; j<=127; j++){
+			characters += (char) j;
+		}
+		characters += "�������������������������������������������ǡ�����\n\r\f\t��";
+	}
+
+
+	/**
+	 * Checks a File and tries to figure if the file is a text or a binary file.<br>
+	 * Keep in mind that binary files are those that contains at least one
+	 * non-printable character.
+	 *
+	 * @param file
+	 * @return <b>true</b> when the file is <b>pretty problably</b> text,
+	 * <b>false</b> if the file <b>is</b> binary.
+	 */
+	public static boolean isTextFile(File file){
+		return isTextFile(file, 1024);
+	}
+
+	/**
+	 * Checks a File and tries to figure if the file is a text or a binary file.<br>
+	 * Keep in mind that binary files are those that contains at least one
+	 * non-printable character.
+	 *
+	 * @param file
+	 * @param byteAmount, number of bytes to check.
+	 * @return <b>true</b> when the file is <b>pretty problably</b> text,
+	 * <b>false</b> if the file <b>is</b> binary.
+	 */
+	public static boolean isTextFile(File file, int byteAmount){
+		int umbral = byteAmount;
+		try {
+			FileReader fr = new FileReader(file);
+			for (int i = 0; i < umbral; i++) {
+				int c = fr.read();
+				if (c==-1){
+					// End of file. If we reach this
+					// everything before is printable data.
+					return true;
+				}
+				char ch = (char) c;
+				if (characters.indexOf(ch)==-1){
+					// We've found a non-printable character.
+					// Then we'll assume that this file is binary.
+					return false;
+				}
+			}
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return true;
+	}
+
+	/**
+	 * Checks a byte array and tells if it contains only text or contains
+	 * any binary data.
+	 *
+	 * @param file
+	 * @return <b>true</b> when the data is <b>only</b> text, <b>false</b> otherwise.
+	 * @deprecated
+	 */
+	public static boolean isTextData(byte[] data){
+		char[] charData = new char[data.length];
+		for (int i = 0; i<data.length; i++){
+			charData[i] = (char) data[i];
+		}
+
+		for (int i = 0; i < data.length; i++) {
+			int c = charData[i];
+
+
+			if (c==-1){
+				// End of file. If we reach this
+				// everything before is printable data.
+				return true;
+			}
+			char ch = (char) c;
+			if (characters.indexOf(ch)==-1){
+				// We've found a non-printable character.
+				// Then we'll assume that this file is binary.
+
+				//System.out.println(ch+" at "+i);
+				return false;
+			}
+		}
+		return true;
+	}
+
+
+
+
+	/**
+	 * Copia el contenido de un InputStream en un OutputStream
+	 *
+	 * @param in InputStream
+	 * @param out OutputStream
+	 */
+	public static void serializar(InputStream in, OutputStream out) {
+		byte[] buffer = new byte[102400];
+
+		int n;
+
+		try {
+			while ((n = in.read(buffer)) != -1) {
+				out.write(buffer, 0, n);
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Elimina del xml la declaraci�n del DTD
+	 *
+	 * @param bytes bytes del fichero XML de respuesta a getCapabilities
+	 * @param startTag Tag raiz del xml respuesta a getCapabilities
+	 *
+	 * @return bytes del fichero XML sin la declaraci�n del DTD
+	 */
+	public static byte[] eliminarDTD(byte[] bytes, String startTag) {
+		String text = new String(bytes);
+		int index1 = text.indexOf("?>") + 2;
+		int index2;
+
+		try {
+			index2 = findBeginIndex(bytes, startTag);
+		} catch (Exception e) {
+			return bytes;
+		}
+
+		byte[] buffer = new byte[bytes.length - (index2 - index1)];
+		System.arraycopy(bytes, 0, buffer, 0, index1);
+		System.arraycopy(bytes, index2, buffer, index1, bytes.length - index2);
+
+		return buffer;
+	}
+
+	/**
+	 * Obtiene el �ndice del comienzo del xml
+	 *
+	 * @param bytes bytes del fichero XML en el que se busca
+	 * @param tagRaiz Tag raiz del xml respuesta a getCapabilities
+	 *
+	 * @return �ndice donde empieza el tag raiz
+	 *
+	 * @throws Exception Si no se encuentra el tag
+	 */
+	private static int findBeginIndex(byte[] bytes, String tagRaiz)
+	throws Exception {
+		try {
+			int nodo = 0;
+			int ret = -1;
+
+			int i = 0;
+
+			while (true) {
+				switch (nodo) {
+				case 0:
+
+					if (bytes[i] == '<') {
+						ret = i;
+						nodo = 1;
+					}
+
+					break;
+
+				case 1:
+
+					if (bytes[i] == ' ') {
+					} else if (bytes[i] == tagRaiz.charAt(0)) {
+						nodo = 2;
+					} else {
+						nodo = 0;
+					}
+
+					break;
+
+				case 2:
+
+					String aux = new String(bytes, i, 18);
+
+					if (aux.equalsIgnoreCase(tagRaiz.substring(1))) {
+						return ret;
+					}
+
+					nodo = 0;
+
+					break;
+				}
+
+				i++;
+			}
+		} catch (Exception e) {
+			throw new Exception("No se pudo parsear el xml", e);
+		}
+	}
+
+	/**
+	 * Converts the contents of a Vector to a comma separated list
+	 *
+	 * */
+	public static String Vector2CS(Vector v)
+	{
+		String str = new String();
+		if (v != null)
+		{
+			int i;
+			for (i=0; i<v.size() ;i++)
+			{
+				str = str + v.elementAt(i);
+				if (i<v.size()-1)
+					str = str + ",";
+			}
+		}
+		return str;
+	}
+
+	public static boolean isValidVersion(String version)
+	{
+		if(version.trim().length() == 5)
+		{
+			if ( (version.charAt(1)=='.') && (version.charAt(3)=='.'))
+			{
+				char x = version.charAt(0);
+				char y = version.charAt(2);
+				char z = version.charAt(4);
+
+				if ((Character.isDigit(x)) && (Character.isDigit(y)) && (Character.isDigit(z)))
+				{
+					return true;
+				}
+				else
+				{
+					return false;
+				}
+			}
+			else
+			{
+				return false;
+			}
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+	/**
+	 * Crea un fichero temporal con un nombre concreto y unos datos pasados por
+	 * par�metro.
+	 * @param fileName Nombre de fichero
+	 * @param data datos a guardar en el fichero
+	 */
+	public static void createTemp(String fileName, String data)throws IOException{
+		File f = new File(fileName);
+		DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)) );
+		dos.writeBytes(data);
+		dos.close();
+		f.deleteOnExit();
+	}
+
+	/**
+	 * Checks if a String is a number or not
+	 *
+	 * @param String, s
+	 * @return boolean, true if s is a number
+	 */
+	public static boolean isNumber(String s)
+	{
+		try
+		{
+			//double d = Double.parseDouble(s);
+			return true;
+		}
+		catch(NumberFormatException e)
+		{
+			return false;
+		}
+
+	}
+
+	/**
+	 * Parses the String containing different items [character] separated and
+	 * creates a vector with them.
+	 * @param str String contains item1[c]item2[c]item3...
+	 * @param c is the string value for separating the items
+	 * @return Vector containing all the items
+	 */
+	public static Vector createVector(String str, String c)
+	{
+		StringTokenizer tokens = new StringTokenizer(str, c);
+		Vector v = new Vector();
+		try
+		{
+			while (tokens.hasMoreTokens())
+			{
+				v.addElement(tokens.nextToken());
+			}
+			return v;
+		}
+		catch (Exception e)
+		{
+			return new Vector();
+		}
+	}
+
+	/**
+	 * @param dimensions
+	 * @return
+	 */
+	public static String Vector2URLParamString(Vector v) {
+		if (v==null) return "";
+		String s = "";
+		for (int i = 0; i < v.size(); i++) {
+			s += v.get(i);
+			if (i<v.size()-1)
+				s += "&";
+		}
+		return s;
+	}
+	
+	/**
+	 * Downloads an URL into a temporary file that is removed the next time the
+	 * tempFileManager class is called, which means the next time gvSIG is launched.
+	 *
+	 * @param url
+	 * @param name
+	 * @return
+	 * @throws IOException
+	 * @throws ServerErrorResponseException
+	 * @throws ConnectException
+	 * @throws UnknownHostException
+	 */
+	public static synchronized File downloadFile(URL url, String name, ICancellable cancel) throws IOException,ConnectException, UnknownHostException{
+	    return downloader.downloadFile(url, name, cancel);
+	}
+	
+	private static String calculateFileName(String name){
+		int index = name.lastIndexOf(".");
+		if (index > 0){
+			return tempDirectoryPath + "/" + name.substring(0,index) + System.currentTimeMillis() + 
+				name.substring(index, name.length());
+		}
+		return tempDirectoryPath+"/"+name+System.currentTimeMillis();
+	}
+
+	/**
+	 * Downloads a URL using the HTTP Post protocol
+	 * @param url
+	 * The server URL
+	 * @param data
+	 * The data to send in the request
+	 * @param name
+	 * A common name for all the retrieved files
+	 * @param cancel
+	 * Used to cancel the downloads
+	 * @return
+	 * The retrieved file
+	 * @throws IOException
+	 * @throws ConnectException
+	 * @throws UnknownHostException
+	 */
+	public static synchronized File downloadFile(URL url, String data, String name, ICancellable cancel) throws IOException,ConnectException, UnknownHostException{
+	    return downloader.downloadFile(url, data, name, cancel);
+	}
+        
+	public static synchronized File downloadFile(URL url, String data, String name, ICancellable cancel, int maxbytes) throws IOException,ConnectException, UnknownHostException{
+	    return downloader.downloadFile(url, data, name, cancel,maxbytes);
+	}
+
+	/**
+	 * Cleans every temporal file previously downloaded.
+	 */
+	public static void cleanUpTempFiles() {
+		downloader.cleanUpTempFiles();
+	}
+
+
+	/**
+	 * Remove an URL from the system cache. The file will remain in the file
+	 * system for further eventual uses.
+	 * @param request
+	 */
+	public static void removeURL(URL url) {
+		downloader.removeURL(url);
+	}
+
+	/**
+	 * Remove an URL from the system cache. The file will remain in the file
+	 * system for further eventual uses.
+	 * @param request
+	 */
+	public static void removeURL(Object url) {
+	    downloader.removeURL(url);
+	}
+	
+        
+        public static String getAbsolutePathOrEmpty(File f) {
+            if( f==null ) {
+                return "";
+            }
+            return f.getAbsolutePath();
+        }
+        
+        /**
+	 * This class has to be deleted when all the classes uses the ICancellable
+	 * method from libCompat
+	 * @author gvSIG Team
+	 * @version $Id: Utilities.java 33983 2010-10-27 12:37:48Z nbrodin $
+	 * @deprecated You should use always org.gvsig.compat.net.ICancellable
+	 */
+	/*private static class CancellableAdapter implements org.gvsig.compat.net.ICancellable {
+	    private ICancellable cancellable = null;
+
+        public CancellableAdapter(
+            org.gvsig.remoteclient.wms.ICancellable cancellable) {
+            super();
+            this.cancellable = cancellable;
+        }
+
+        public Object getID() {            
+            return cancellable.getID();
+        }
+
+        public boolean isCanceled() {     
+            return cancellable.isCanceled();
+        } 	    
+	}*/
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/Utilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/BoundaryBox.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/BoundaryBox.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/BoundaryBox.java	(revision 42196)
@@ -0,0 +1,138 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient.utils;
+
+public class BoundaryBox {
+    
+    private double xmin;
+
+    private double xmax;
+    private double ymin;
+    private double ymax;
+    private String srs;
+    public double getXmin() {        
+        return xmin;
+    } 
+    public void setXmin(double _xmin) {        
+        xmin = _xmin;
+    } 
+    public double getXmax() {        
+        return xmax;
+    } 
+    public void setXmax(double _xmax) {        
+        xmax = _xmax;
+    } 
+    public double getYmin() {        
+        return ymin;
+    } 
+    public void setYmin(double _ymin) {        
+        ymin = _ymin;
+    } 
+    public double getYmax() {        
+        return ymax;
+    } 
+    public void setYmax(double _ymax) {        
+        ymax = _ymax;
+    } 
+    public String getSrs() {        
+        return srs;
+    } 
+    public void setSrs(String _srs) {        
+        srs = _srs;
+    }
+    
+    public String toString(){
+        String s = srs + " (" + xmin + ", " + ymin + ", " + xmax + ", " + ymax + ")";
+        
+        return s;
+    }
+    
+    public static boolean validLat(double v) {
+        return v >= -90 && v <= 90;
+    }
+    
+    public static boolean validLon(double v) {
+        return v >= -180 && v <= 180;
+    }
+    
+    public static BoundaryBox clipGeodeticBBox(BoundaryBox bbox) {
+        
+        BoundaryBox resp = new BoundaryBox();
+        resp.setSrs(bbox.getSrs());
+        resp.setXmin(bbox.getXmin());
+        resp.setXmax(bbox.getXmax());
+        resp.setYmin(bbox.getYmin());
+        resp.setYmax(bbox.getYmax());
+        
+        // ==================================================
+        // Fix longitude
+        // ==================================================
+        if (resp.getXmax() > resp.getXmin()
+            && validLon(resp.getXmin()) && !validLon(resp.getXmax())) {
+            // only xmax is wrong:
+            resp.setXmax(180);
+        } else {
+            if (resp.getXmax() > resp.getXmin()
+                && !validLon(resp.getXmin()) && validLon(resp.getXmax())) {
+                // only xmin is wrong:
+                resp.setXmin(-180);
+            } else {
+                if (resp.getXmax() > resp.getXmin()
+                    && validLon(resp.getXmin()) && validLon(resp.getXmax())) {
+                    // OK, do nothing
+                } else {
+                    resp.setXmax(180);
+                    resp.setXmin(-180);
+                }
+            }
+        }
+        // ==================================================
+        // Fix latitude
+        // ==================================================
+        if (resp.getYmax() > resp.getYmin()
+            && validLat(resp.getYmin()) && !validLat(resp.getYmax())) {
+            // only ymax is wrong:
+            resp.setYmax(90);
+        } else {
+            if (resp.getYmax() > resp.getYmin()
+                && !validLat(resp.getYmin()) && validLat(resp.getYmax())) {
+                // only ymin is wrong:
+                resp.setYmin(-90);
+            } else {
+                if (resp.getYmax() > resp.getYmin()
+                    && validLat(resp.getYmin()) && validLat(resp.getYmax())) {
+                    // OK, do nothing
+                } else {
+                    // box was a mess, let's fix it
+                    resp.setYmax(90);
+                    resp.setYmin(-90);
+                }
+            }
+        }
+        // ===============================================
+        return resp;
+        
+    }
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/BoundaryBox.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DateTime.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DateTime.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DateTime.java	(revision 42196)
@@ -0,0 +1,178 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient.utils;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+
+/**
+ * This class contains static methods to manage Dates. It was principally 
+ * created because of some problems doing the "String do DateTime" 
+ * and the "DateTime to String" conversions.  
+ * 
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class DateTime {
+
+/**
+ * returns the current date
+ * 
+ * 
+ * @return java.util.Date
+ */
+    public static Date getCurrentDate() {        
+        Calendar cal = new GregorianCalendar();
+ 
+        return cal.getTime();
+    } 
+
+/**
+ * It trnasforms one date in one String
+ * 
+ * 
+ * @return A String
+ * @param dtK Date
+ * @param sFormat Date format. Example: "Y-m-d H:i:s.Z";
+ */
+    public static String dateToString(Date dtK, String sFormat) {        
+        String sDate;
+        int nYear;
+        int nMonth;
+        int nDay;
+        int nHour;
+        int nMinute;
+        int nSecond;
+        int nMS;
+        Calendar clnK;
+        String sf;
+        int jc;
+        clnK = Calendar.getInstance(Locale.US);
+        clnK.setTime(dtK);
+        nYear = clnK.get(Calendar.YEAR);
+        nMonth = 1 + clnK.get(Calendar.MONTH);
+        nDay = clnK.get(Calendar.DAY_OF_MONTH);
+        nHour = clnK.get(Calendar.HOUR_OF_DAY);
+        nMinute = clnK.get(Calendar.MINUTE);
+        nSecond = clnK.get(Calendar.SECOND);
+        nMS = clnK.get(Calendar.MILLISECOND);
+        sDate = "";
+        for (jc = 0; jc < sFormat.length(); jc++) {
+            switch (sFormat.charAt(jc)) {
+                case 'Y':
+                    sDate += nYear;
+                    break;
+                case 'm':
+                    sf = "" + nMonth;
+                    if (nMonth < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'd':
+                    sf = "" + nDay;
+                    if (nDay < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'H':
+                    sf = "" + nHour;
+                    if (nHour < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'i':
+                    sf = "" + nMinute;
+                    if (nMinute < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 's':
+                    sf = "" + nSecond;
+                    if (nSecond < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                case 'Z':
+                    sf = "" + nMS;
+                    if (nMS < 10) {
+                        sf = "0" + sf;
+                    }
+                    sDate += sf;
+                    break;
+                default:
+                    sDate += sFormat.substring(jc, jc + 1);
+            }
+        }
+        return sDate;
+    } 
+   
+/**
+ * It transfoms one String in one Date
+ * 
+ * 
+ * @return Date
+ * @param sDate String
+ */
+    public static Date stringToDate(String sDate) {        
+        Date dtRes;
+        Calendar clnK;
+        int nYear;
+        int nMonth;
+        int nDay;
+        int nHour;
+        int nMinute;
+        int nSecond;
+        int nMS;
+        String sf;
+        for (; sDate.length() < 23;)
+            sDate += "0";
+        sf = sDate.substring(0, 4);
+        nYear = Integer.parseInt(sf);
+        sf = sDate.substring(5, 7);
+        nMonth = Integer.parseInt(sf) - 1;
+        sf = sDate.substring(8, 10);
+        nDay = Integer.parseInt(sf);
+        sf = sDate.substring(11, 13);
+        nHour = Integer.parseInt(sf);
+        sf = sDate.substring(14, 16);
+        nMinute = Integer.parseInt(sf);
+        sf = sDate.substring(17, 19);
+        nSecond = Integer.parseInt(sf);
+        sf = sDate.substring(20, 23);
+        nMS = Integer.parseInt(sf);
+        clnK = Calendar.getInstance(Locale.US);
+        clnK.set(nYear, nMonth, nDay, nHour, nMinute, nSecond);
+        clnK.set(Calendar.MILLISECOND, nMS);
+        dtRes = new Date();
+        dtRes = clnK.getTime();
+        //	    sf=dateToString(dtRes,"Y-m-d H:i:s.Z");
+        return dtRes;
+    } 
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DateTime.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/ExceptionTags.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/ExceptionTags.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/ExceptionTags.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.utils;
+
+/**
+ * @author jaume
+ *
+ */
+public class ExceptionTags {
+	private ExceptionTags() {};
+    public final static String EXCEPTION_ROOT="ServiceExceptionReport";
+    public final static String SERVICE_EXCEPTION="ServiceException";
+    public final static String CODE="code";
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/ExceptionTags.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/PropertyManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/PropertyManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/PropertyManager.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.utils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Hashtable;
+import java.util.Properties;
+
+/**
+ * Description: Loads the configuration files
+ *
+ * @author  Laura Diaz
+ * @version 1.0 
+ */
+public class PropertyManager
+{
+ public final static String LOGGER_PROPERTIES = "org/gvsig/remoteClient/conf/logger.properties";
+ 
+ //The property file names to load
+ private final static String[] s_propertyFileNames = new String[]{LOGGER_PROPERTIES};
+ 																	
+
+ //Hashtable containing all properties objects that are loaded
+ private static Hashtable s_propertyFiles = null;
+
+ /**
+ * Gets a properties object
+ * If the the property files are not yet loaded, then loads them first
+ *
+ * @param propertyFileName, String
+ * @return Properties
+ * @throws java.io.IOException
+ */
+ public static Properties getProperties(String propertyFileName) throws IOException
+ {
+   if (s_propertyFiles == null)
+   {
+     loadProperties();
+   }
+
+   return (Properties)s_propertyFiles.get(propertyFileName);
+ }
+
+ //Loads the property files
+ private static synchronized void loadProperties() throws IOException
+ {
+   s_propertyFiles = new Hashtable(s_propertyFileNames.length);
+   ClassLoader loader = PropertyManager.class.getClassLoader();
+
+   for (int i = 0; i < s_propertyFileNames.length; i++)
+   {
+     try
+     {
+       InputStream input = loader.getResourceAsStream(s_propertyFileNames[i]);
+       Properties props = new Properties();
+       props.load(input);
+       s_propertyFiles.put(s_propertyFileNames[i], props);
+     }
+     catch(Exception e)
+     {
+     	System.err.println("\n[PropertyManager] ERROR - Failed to read properties file \""
+                          + s_propertyFileNames[i] + "\": "
+                          + e.getMessage());       
+     }
+   }
+ }
+ 
+ //Loads the property files
+ /*
+ public static synchronized void saveProperties(String propsName) throws IOException
+ {  
+     try
+     {	 
+	  //ClassLoader loader = PropertyManager.class.getClassLoader();    	  
+	  //InputStream input = loader.getResourceAsStream(propsName);    	      	
+	   FileOutputStream output = new FileOutputStream(propsName);
+	   Properties props = new Properties();
+	   props.store(output, propsName);
+	   output.close();            
+     }
+     catch(Exception e)
+     {
+     	System.err.println("\n[PropertyManager] ERROR - Failed to save properties file \""
+                          + propsName + "\": "
+                          + e.getMessage());       
+     }
+ }
+*/
+ 
+ 
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/PropertyManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/EncodingXMLParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/EncodingXMLParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/EncodingXMLParser.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.StringReader;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * This class is a XML pull parser that discover and manage
+ * the file encoding
+ * @author Jorge Piera LLodr� (jorge.piera@iver.es)
+ */
+public class EncodingXMLParser extends KXmlParser{
+
+	/**
+	 * This method reads the first bytes of the file and
+	 * try to discover the file encoding. It parses the file
+	 * with retrieved encoding.
+	 * @param file
+	 * @throws XmlPullParserException 
+	 * @throws IOException 
+	 */
+	public void setInput(File file) throws XmlPullParserException, IOException{
+		FileReader reader = null;
+		reader = new FileReader(file);
+		BufferedReader br = new BufferedReader(reader);
+		String encoding = "UTF-8";
+
+		char[] buffer = new char[(int) file.length()];
+		reader.read(buffer);
+		String string = new String(buffer);
+
+		// patch for ArcIMS + WMS connector > 9.0 bug
+		int a = string.toLowerCase().indexOf("<?xml");
+		if (a !=-1){
+			string = string.substring(a, string.length());
+		}
+		// end patch
+
+		StringBuffer st = new StringBuffer(string);
+		String searchText = "encoding=\"";
+		int index = st.indexOf(searchText);
+		if (index>-1) {
+			st.delete(0, index+searchText.length());
+			encoding = st.substring(0, st.indexOf("\""));
+		}			
+		
+		if (a > 0){
+			// patch for ArcIMS + WMS connector > 9.0 bug
+			super.setInput(new StringReader(string));
+			// end patch
+		}else{
+			super.setInput( new FileInputStream(file), encoding);
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/EncodingXMLParser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DumbXMLParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DumbXMLParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DumbXMLParser.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.utils;
+import java.awt.geom.Rectangle2D;
+import java.util.TreeMap;
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class DumbXMLParser {
+	public Rectangle2D getBoundingBox(String l) {
+		// System.out.println("l='"+l+"'");
+		TreeMap pairs = getPairs(l);
+		return getBoundingBox(pairs);
+	}
+
+	public Rectangle2D getBoundingBox(TreeMap pairs) {
+		double minX = Double.parseDouble((String)pairs.get("minx"));
+		double minY = Double.parseDouble((String)pairs.get("miny"));
+		double maxX = Double.parseDouble((String)pairs.get("maxx"));
+		double maxY = Double.parseDouble((String)pairs.get("maxy"));
+
+		return new Rectangle2D.Double(minX, minY, maxX-minX, maxY-minY);
+	}
+	
+	public TreeMap getPairs(String l) {
+		TreeMap data = new TreeMap();
+		int pos = l.indexOf("=");
+		while (pos>0) {
+			String cmd = l.substring(l.lastIndexOf(" ", pos)+1,
+				l.indexOf("\"", pos+2)+1);
+			//System.out.println(cmd);
+			int comilla = cmd.indexOf("\"");
+			if (comilla > 0) {
+				String key = l.substring(l.lastIndexOf(" ", pos)+1, pos);
+				String value = cmd.substring(comilla+1,cmd.length()-1);
+				data.put(key.toLowerCase(), value);
+			}
+			pos = l.indexOf("=", pos+1);
+		}
+		return data;
+	}
+	
+	/**
+	 * saca un valor double de una linea del tipo 
+	 * <westBoundLongitude>-180</westBoundLongitude>
+	 * @param l
+	 * @return
+	 */
+	public double getValueDouble(String l) {
+		return Double.parseDouble(getValue(l));	
+	}
+	
+	/**
+	 * saca un valor double de una linea del tipo 
+	 * <westBoundLongitude>-180</westBoundLongitude>
+	 * @param l
+	 * @return
+	 */
+	public String getValue(String l) {
+		int pos = l.indexOf(">");
+		return l.substring(pos+1, l.indexOf("<", pos));	
+	}
+	
+	public String getToken(String l, int num) {
+		int pos = l.indexOf("<");
+		for (int i=0; i<num; i++)
+			pos = l.indexOf("<", pos+1);
+		return l.substring(pos+1, l.indexOf(">", pos));	
+	}
+	
+	public int countTokens(String l) {
+		int times = 0;
+		int pos = l.indexOf("<");
+		while (pos >= 0) {
+			times ++; pos = l.indexOf("<", pos+1);
+		}
+		return times;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DumbXMLParser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/CapabilitiesTags.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/CapabilitiesTags.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/CapabilitiesTags.java	(revision 42196)
@@ -0,0 +1,303 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.utils;
+
+/**
+ * Class containing a description for all the TAGS defined in the Capabilities Object returned from a WMS
+ * note: this describes the WMT_MS_Capabilitites 1.1.1
+ * */
+public class CapabilitiesTags
+{
+	private CapabilitiesTags () {};
+	public final static String CAPABILITIES_ROOT1_1_0="WMT_MS_Capabilities";
+	public final static String CAPABILITIES_ROOT1_1_1="WMT_MS_Capabilities";
+	public final static String CAPABILITIES_ROOT1_3_0="WMS_Capabilities";
+	public final static String CAPABILITY="Capability";
+	public final static String SERVICE ="Service";
+	public final static String NAME ="Name";
+	public final static String TITLE ="Title";
+	public final static String ABSTRACT ="Abstract";
+	public final static String KEYWORDLIST ="KeywordList";
+	public final static String KEYWORD ="Keyword";
+	public final static String ONLINERESOURCE ="OnlineResource";
+
+	public final static String CONTACTINFORMATION ="ContactInformation";
+	public final static String CONTACTPOSITION ="ContactPosition";
+	public final static String CONTACTADRESS ="ContactAddress";
+	public final static String CONTACTVOICETELEPHONE ="ContactVoiceTelephone";
+	public final static String CONTACTFACSIMILETELEPHONE ="ContactFacsimileTelephone";
+	public final static String CONTACTPERSONPRIMARY ="ContactPersonPrimary";
+	public final static String CONTACTPERSON ="ContactPerson";
+	public final static String CONTACTORGANIZATION ="ContactOrganization";
+	public final static String CONTACTEMAILADRESS ="ContactElectronicMailAddress";
+	public final static String FEES ="Fees";
+	public final static String ACCESSCONSTRAINTS ="AccessConstraints";
+	public final static String REQUEST ="Request";
+	public final static String GETCAPABILITIES ="GetCapabilities";
+	public final static String FORMAT ="Format";
+	public final static String DCPTYPE ="DCPType";
+	public final static String XMLNS_XLINK ="xmlns:xlink";
+	public final static String XLINK_TYPE ="xlink:type";
+	public final static String XLINK_HREF ="xlink:href";
+	public final static String HTTP ="HTTP";
+	public final static String GET ="Get";
+	public final static String POST ="Post";
+	public final static String GETMAP ="GetMap";
+	public final static String GETFEATUREINFO ="GetFeatureInfo";
+	public final static String DESCRIBELAYER ="DescribeLayer";
+	public final static String GETLEGENDGRAPHIC ="GetLegendGraphic";
+	public final static String EXCEPTION ="Exception";
+	public final static String VENDORSPECIFICCAPABILITIES ="VendorSpecificCapabilities";
+	public final static String USERDEFINEDSYMBOLIZATION ="UserDefinedSymbolization";
+	public final static String LAYER ="Layer";
+	public final static String EXCEPTIONS_1_1_x = "application/vnd.ogc.se_xml";
+	public final static String EXCEPTIONS_1_3_0 = "XML";
+//	<!ELEMENT Layer ( Name?, Title, Abstract?, KeywordList?, SRS*,
+//			LatLonBoundingBox?, BoundingBox*, Dimension*, Extent*,
+//			Attribution?, AuthorityURL*, Identifier*, MetadataURL*, DataURL*,
+//			FeatureListURL*, Style*, ScaleHint?, Layer* ) >
+	public final static String SRS ="SRS";
+	public final static String CRS ="CRS";
+	public final static String DEAFAULTSRS ="DefaultSRS";	
+    public final static String OTHERSRS ="OtherSRS";   
+
+	public final static String BOUNDINGBOX ="BoundingBox";
+	public final static String WGS84BOUNDINGBOX = "WGS84BoundingBox";
+	public final static String LOWERCORNER = "LowerCorner";
+	public final static String UPPERCORNER = "UpperCorner";
+	// Used in the WMS as "LatLonBoundingBox" don't change it and create your own one
+	public final static String LATLONBOUNDINGBOX ="LatLonBoundingBox";
+	public final static String EX_GEOGRAPHICBOUNDINGBOX ="EX_GeographicBoundingBox";
+	public final static String METADATAURL ="MetadataURL";
+	public final static String LOGOURL ="LogoURL";
+	public final static String AUTHORITYURL ="AuthorityURL";
+	public final static String STYLE ="Style";
+	public final static String LEGENDURL="LegendURL";
+	public final static String SCALEHINT ="ScaleHint";
+	public final static String MINSCALEDENOMINATOR ="MinScaleDenominator";
+	public final static String DIMENSION ="Dimension";
+	public final static String TIME ="Time";
+	public final static String CONSTRAINT = "Constraint";
+
+	// capabilities attributes
+	public final static String VERSION ="version";
+	public final static String UPDATESEQUENCE ="updatesequence";
+	public final static String ENCODING ="encoding";
+	public final static String STANDALONE ="standalone";
+	public final static String SUPPORTSLD ="SupportSLD";
+	public final static String USERLAYER ="UserLayer";
+	public final static String USERSTYLE ="UserStyle";
+	public final static String QUERYABLE ="queryable";
+	public final static String CASCADED ="cascaded";
+	public final static String NOSUBSETS ="noSubsets";
+	public final static String OPAQUE ="opaque";
+	public final static String FIXEDWIDTH ="fixedWidth";
+	public final static String FIXEDHEIGHT ="fixedHeight";
+    public static final String ATTRIBUTION = "Attribution";
+    
+    //LegendURL attributes
+    public static final String WIDTH = "width";
+    public static final String HEIGHT = "height";
+
+	public final static String MINX ="minx";
+	public final static String MINY ="miny";
+	public final static String MAXX ="maxx";
+	public final static String MAXY ="maxy";
+	public final static String RESX ="resx";
+	public final static String RESY ="rexy";
+	public final static String WESTBOUNDLONGITUDE ="westBoundLongitude";
+	public final static String EASTBOUNDLONGITUDE ="eastBoundLongitude";
+	public final static String SOUTHBOUNDLATITUDE ="southBoundLatitude";
+	public final static String NORTHBOUNDLATITUDE ="northBoundLatitude";
+
+	public final static String TYPE ="type";
+	public final static String MIN ="min";
+	public final static String MAX ="max";
+	public final static String DIMENSION_NAME ="name";
+    public final static String DIMENSION_UNITS ="units";
+    public final static String DIMENSION_UNIT_SYMBOL ="unitSymbol";
+
+    // WMS Extent specifics
+    public static final String EXTENT="Extent";
+    public static final String EXTENT_MULTIPLE_VALUES = "multipleValues";
+    public static final String EXTENT_NEAREST_VALUE = "nearestValue";
+    public static final String EXTENT_CURRENT="current";
+
+
+    // WCS specific
+    public static final String WCS_CAPABILITIES_ROOT1_0_0 = "WCS_Capabilities";
+    public static final String WCS_CONTENTMETADATA = "ContentMetadata";
+    public static final String WCS_LABEL = "label";
+    public static final String WCS_KEYWORDS = "keywords";
+    public static final String WCS_DESCRIPTION = "description";
+    public static final String DESCRIBECOVERAGE = "DescribeCoverage";
+    public static final String GETCOVERAGE = "GetCoverage";
+    public static final String WCS_COVERAGEOFFERING = "CoverageOffering";
+    public static final String WCS_COVERAGEOFFERINGBRIEF = "CoverageOfferingBrief";
+
+    // Miscelaneous
+    public final static String DEFAULT ="default";
+
+    public final static String EPSG_4326="EPSG:4326";
+    public final static String CRS_84 ="CRS:84";
+
+    //WFS specific
+    public static final String WFS_NAMESPACE_PREFIX = "wfs";
+    public static final String WFS_CAPABILITIES_ROOT1_0_0 = "WFS_Capabilities";
+    public static final String WFS_TITLE = "Title";
+    public static final String WFS_ABSTRACT = "Abstract";
+	public final static String WFS_ONLINERESOURCE ="OnlineResource";
+	public final static String WFS_FEATURETYPELIST="FeatureTypeList";
+	public final static String WFS_FEATURETYPE="FeatureType";
+	public final static String WFS_SCHEMAROOT="schema";
+	public final static String WFS_DESCRIBEFEATURETYPE ="DescribeFeatureType";
+	public final static String WFS_GETFEATURE="GetFeature";
+	public final static String WFS_TRANSACTION = "Transaction";
+	public final static String WFS_LOCKFEATURE ="LockFeature";
+	public final static String WFS_KEYWORDS ="Keywords";
+	public final static String WFS_FEATURE_COLLECTION ="FeatureCollection";
+    public final static String WFS_RESULT_COLLECTION ="ResultCollection";
+	public final static String LATLONGBOUNDINGBOX ="LatLongBoundingBox";
+	public final static String COMPLEXTYPE="complexType";
+	public final static String COMPLEXCONTENT = "complexContent";
+	public final static String EXTENSION = "extension";
+	public final static String SEQUENCE = "sequence";
+	public final static String ELEMENT = "element";
+	public final static String ELEMENT_NAME = "name";
+	public final static String ELEMENT_TYPE = "type";
+	public final static String ELEMENT_MINOCCURS = "minOccurs";
+	public final static String ELEMENT_MAXOCCURS = "maxOccurs";
+	public final static String ELEMENT_REF = "ref";
+	public final static String SIMPLETYPE = "simpleType";
+	public final static String RESTRICTION  = "restriction";
+	public final static String TOTAL_DIGITS = "totalDigits";
+	public final static String FRACTION_DIGITS = "fractionDigits";
+	public final static String VALUE = "value";
+	public final static String BASE = "base";
+	public final static String CHOICE = "choice";
+	public final static String SERVICE_EXCEPTION_REPORT = "ServiceExceptionReport"; 
+    public final static String EXCEPTION_REPORT = "ExceptionReport"; 
+	public final static String SERVICE_EXCEPTION = "ServiceException";
+	public final static String CODE = "code";
+    public final static String EXCEPTION_CODE = "exceptionCode";
+    public final static String EXCEPTION_TEXT = "ExceptionText";
+    public final static String MAXFEATURES = "maxFeatures";
+    
+	 //WFS specific (1.1.0)
+	public final static String SERVICE_IDENTIFICATION = "ServiceIdentification";
+	public final static String SERVICE_PROVIDER = "ServiceProvider";
+	public final static String OPERATIONS_METADATA = "OperationsMetadata";
+	public final static String FEATURE_TYPE_LIST = "FeatureTypeList";
+	public final static String FILTER_CAPABILITIES = "Filter_Capabilities";
+	public final static String OPERATION = "Operation";
+	public final static String DCP = "DCP";
+	public final static String HREF = "xlink:href";
+	public final static String OPERATION_NAME = "name";
+	public final static String DEFAULTMAXFEATURES = "DefaultMaxFeatures";
+	
+	
+	//WFS Code errors
+	public final static String INVALID_FORMAT = "InvalidFormat";
+	
+	//WMTS
+	public final static String WMTS_GMLTAG = "ows:";
+	public final static String WMTS_CAPABILITIES = "Capabilities";
+	public final static String WMTS_SERVICEID = "ServiceIdentification";
+	public final static String WMTS_SERVICEPROV = "ServiceProvider";
+	public final static String WMTS_OPMETADATA = "OperationsMetadata";
+	public final static String WMTS_CONTENTS = "Contents";
+	//Themes
+	public final static String WMTS_THEMES = "Themes";
+	public final static String WMTS_THEME = "Theme";
+	public final static String WMTS_LAYERREF = "LayerRef";
+	//Content
+	public final static String WMTS_LAYER = "Layer";
+	public final static String WMTS_OTHERSRC = "OtherSource";
+	public final static String WMTS_TILEMATRIXSET = "TileMatrixSet";
+	//Style
+	public final static String WMTS_IDENTIFIER = "Identifier";
+	public final static String WMTS_TITLE = "Title";
+	public final static String WMTS_ABSTRACT = "Abstract";
+	public final static String WMTS_KEYWORDS = "Keywords";
+	public final static String WMTS_KEYWORD = "Keyword";
+	public final static String WMTS_LEGENDURL = "LegendURL";
+	public final static String WMTS_ISDEFAULT = "isDefault";
+	//Layer
+	public final static String WMTS_WGS84BOUNDINGBOX = "WGS84BoundingBox";
+	public final static String WMTS_BOUNDINGBOX = "BoundingBox";
+	public final static String WMTS_STYLE = "Style";
+	public final static String WMTS_FORMAT = "Format";
+	public final static String WMTS_INFOFORMAT = "InfoFormat";
+	public final static String WMTS_DIMENSION = "Dimension";
+	public final static String WMTS_METADATA = "Metadata";
+	public final static String WMTS_RESOURCEURL = "ResourceURL";
+	public final static String WMTS_TILEMATRIXSETLINK = "TileMatrixSetLink";
+	public final static String WMTS_TILEMATRIXLIMITS = "TileMatrixLimits";
+	//LegendURL
+	public final static String WMTS_MINSCALEDEN = "MinScaleDenominator";
+	public final static String WMTS_MAXSCALEDEN = "MaxScaleDenominator";
+	public final static String WMTS_HREF = "href";
+	public final static String WMTS_WIDTH = "width";
+	public final static String WMTS_HEIGHT = "height";
+	//WGS84BoundingBox
+	public final static String WMTS_LOWERCORNER = "LowerCorner";
+	public final static String WMTS_UPPERCORNER = "UpperCorner";
+	public final static String WMTS_CRS = "crs";
+	public final static String WMTS_DIMENSIONS = "dimensions";
+	//Tiles
+	public final static String WMTS_TILEMATRIX = "TileMatrix";
+	public final static String WMTS_MINTILEROW = "MinTileRow";
+	public final static String WMTS_MAXTILEROW = "MaxTileRow";
+	public final static String WMTS_MINTILECOL = "MinTileCol";
+	public final static String WMTS_MAXTILECOL = "MaxTileCol";
+	//TileMatrixSet
+	public final static String WMTS_SUPPORTEDCRS = "SupportedCRS";
+	public final static String WMTS_WELLKNOWNSCALESET = "WellKnownScaleSet";
+	//TileMatrix
+	public final static String WMTS_SCALEDENOMINATOR = "ScaleDenominator";
+	public final static String WMTS_TOPLEFTCORNER = "TopLeftCorner";
+	public final static String WMTS_TILEWIDTH = "TileWidth";
+	public final static String WMTS_TILEHEIGHT = "TileHeight";
+	public final static String WMTS_MATRIXWIDTH = "MatrixWidth";
+	public final static String WMTS_MATRIXHEIGHT = "MatrixHeight";
+	
+	public final static String WMTS_UNITSYMBOL = "UnitsSymbol";
+	public final static String WMTS_DEFAULTVALUE = "Default";
+	public final static String WMTS_CURRENT = "Current";
+	public final static String WMTS_AVAILABLEVALUE = "Value";
+	//ServiceIdentification
+	public final static String WMTS_SERVICETYPE = "ServiceType";
+	public final static String WMTS_SERVICETYPEVERSION = "ServiceTypeVersion";
+	public final static String WMTS_PROFILE = "Profile";
+	public final static String WMTS_FEES = "Fees";
+	public final static String WMTS_ACCESSCONSTRAINTS = "AccessConstraints";
+	
+	//ServiceProvider
+	public final static String WMTS_PROVIDERNAME = "ProviderName";
+	public final static String WMTS_PROVIDERSITE = "ProviderSite";
+	public final static String WMTS_SERVICECONTACT = "ServiceContact";
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/CapabilitiesTags.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/WCSException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/WCSException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/WCSException.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.exceptions;
+
+/**
+ * Excepci�n provocada por el WCS.
+ *
+ * @author Jaume Dominguez Faus - jaume.dominguez@iver.es
+ */
+public class WCSException extends Exception 
+{	
+	private String wcs_message = null;
+	
+	/**
+	 *
+	 */
+	public WCSException() {
+		super();
+	}
+
+	/**
+	 * Creates a new WCS Exception
+	 *
+	 * @param message
+	 */
+	public WCSException(String message) {
+		super(message);
+	}
+
+	/**
+	 * Creates a new WCS Exception
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public WCSException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	/**
+	 * Creates a new WCSException
+	 *
+	 * @param cause
+	 */
+	public WCSException(Throwable cause) {
+		super(cause);
+	}
+	
+	public String getWCSMessage()
+	{
+		if (wcs_message == null)
+			return "";
+		else
+			return wcs_message;
+	}
+	
+	public void setWCSMessage(String mes)
+	{
+		wcs_message = mes;
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/WCSException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/ServerErrorException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/ServerErrorException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/ServerErrorException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.exceptions;
+
+/**
+ * <p>
+ * Exception thrown when an unexpected response to a request was obtained
+ * from a server. It denotes that the server could not process the request
+ * by a critical error and it could not answer a service-specific defined
+ * exception.
+ * </p>
+ * <p>
+ * Use it to distinguish a server exception that is not part of a service
+ * exception definition.
+ * </p>
+ * @author jaume
+ *
+ */
+public class ServerErrorException extends Exception {
+	private static final long serialVersionUID = 1L;
+
+	public ServerErrorException(){
+        super();
+    }
+    
+    public ServerErrorException(String message){
+        super(message);
+    }
+    
+    public ServerErrorException(String message, Throwable e){
+        super(message, e);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/ServerErrorException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ILayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ILayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ILayer.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient;
+/**
+ * <p></p>
+ * 
+ */
+public interface ILayer {
+/**
+ * <p>Does ...</p>
+ * 
+ * 
+ * @return 
+ */
+    public String getName();
+/**
+ * <p>Does ...</p>
+ * 
+ * 
+ * @param _name 
+ */
+    public void setName(String _name);
+/**
+ * <p>Does ...</p>
+ * 
+ * 
+ * @param _title 
+ */
+    public void setTitle(String _title);
+/**
+ * <p>Does ...</p>
+ * 
+ * 
+ * @return 
+ */
+    public String getTitle();
+/**
+ * <p>Does ...</p>
+ * 
+ * 
+ * @return 
+ */
+    public String getAbstract();
+/**
+ * <p>Does ...</p>
+ * 
+ * 
+ * @param _abstract 
+ */
+    public void setAbstract(String _abstract);
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ILayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/conf/logger.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/conf/logger.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/conf/logger.properties	(revision 42196)
@@ -0,0 +1,66 @@
+# LOGGER PROPERTIES
+
+## limit is ignored if its value is empty or if its value is set to zero.
+## Note: this property only affects info messages.
+#log4j.info.maxsize=
+
+## Set root category priority to DEBUG and its only appender to stdout.
+## on a windows machine:
+#log4j.rootCategory=DEBUG, stdout
+# on the freya:
+log4j.rootCategory=DEBUG, file
+#log4j.rootCategory=FATAL
+
+## stdout is set to be a ConsoleAppender which outputs to System.out.
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
+
+log4j.appender.file=org.apache.log4j.RollingFileAppender
+log4j.appender.file.File=C:\\projects\\gvsig\\RemoteMapClients.log
+log4j.appender.file.MaxBackupIndex=1
+log4j.appender.file.MaxFileSize=100KB
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
+
+
+##
+## Package Logging 
+##
+## Each package can have its own appender
+##
+## Priorities are as follows :
+##
+## 1. FATAL
+## 2. ERROR
+## 3. WARN
+## 4. INFO
+## 5. DEBUG
+##
+## If a package has a priority of DEBUG, this means all
+## messages will be shown in the log. If the priority is
+## INFO, then all messages with a minimum priory of INFO will
+## be shown i.e. INFO, WARN, ERROR and FATAL
+##
+## For minimum log output, set the priority to FATAL
+##
+
+
+#log4j.category.nl.rivm.rrgs.log.NogEenTester=DEBUG, R1
+ 
+#log4j.appender.R1=org.apache.log4j.RollingFileAppender
+#log4j.appender.R1.File=d:\\Test1.log
+#log4j.appender.R1.MaxBackupIndex=1
+#log4j.appender.R1.MaxFileSize=100KB
+#log4j.appender.R1.layout=org.apache.log4j.PatternLayout
+#log4j.appender.R1.layout.ConversionPattern=%d %p %t %c - %m%n
+
+
+#log4j.category.nl.rivm.rrgs.log.Tester=DEBUG, R
+
+#log4j.appender.R=org.apache.log4j.RollingFileAppender
+#log4j.appender.R.File=d:\\Test.log
+#log4j.appender.R.MaxBackupIndex=1
+#log4j.appender.R.MaxFileSize=100KB
+#log4j.appender.R.layout=org.apache.log4j.PatternLayout
+#log4j.appender.R.layout.ConversionPattern=%d %p %t %c - %m%n
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/conf/logger.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/IRasterClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/IRasterClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/IRasterClient.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient;
+/**
+ * <p></p>
+ * 
+ */
+public interface IRasterClient {
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/IRasterClient.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCServiceInformation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCServiceInformation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCServiceInformation.java	(revision 42196)
@@ -0,0 +1,142 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.remoteclient.ogc;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+
+
+public abstract class OGCServiceInformation {
+	public String online_resource = null;
+	protected HashMap operationsGet = new HashMap();
+	protected HashMap operationsPost = new HashMap();
+	
+
+	/**
+	 * @return Returns the online_resource.
+	 */
+	 public String getOnline_resource() {
+		return online_resource;
+	}
+
+	 public abstract OGCClientOperation createOperation(String name);
+	 public abstract OGCClientOperation createOperation(String name, String onlineResource);
+	/**
+	 * Add a new supported operation
+	 * @param operation
+	 * The operation to support
+	 * @param protocol
+	 * The HTTP protocol (Get or Post)
+	 */
+	public void addOperation(String operation, int protocol){
+		if (protocol == OGCClientOperation.PROTOCOL_GET){
+			operationsGet.put(operation, createOperation(operation));			
+		}else if (protocol == OGCClientOperation.PROTOCOL_POST){
+			operationsPost.put(operation, createOperation(operation));
+		}
+	}
+	
+	/**
+	 * Add a new supported operation
+	 * @param operation
+	 * The operation to support
+	 * @param protocol
+	 * The HTTP protocol (Get or Post)
+	 * @param onlineResource
+	 * The online resource
+	 */
+	public void addOperation(String operation, int protocol, String onlineResource){
+		if (protocol == OGCClientOperation.PROTOCOL_GET){
+			operationsGet.put(operation, createOperation(operation, onlineResource));
+		}else if (protocol == OGCClientOperation.PROTOCOL_POST){
+			operationsPost.put(operation, createOperation(operation, onlineResource));
+		}
+	}
+	
+	/**
+	 * Gest the online resource for a concrete operation
+	 * @param operation
+	 * The operation
+	 * @param protocol
+	 * The HTTP protocol (Get or Post)
+	 * @return
+	 * The online resource
+	 */
+	public String getOnlineResource(String operation, int protocol){
+		OGCClientOperation op = null;
+		if (protocol == OGCClientOperation.PROTOCOL_GET){
+			op = (OGCClientOperation)operationsGet.get(operation);
+		}else if (protocol == OGCClientOperation.PROTOCOL_POST){
+			op = (OGCClientOperation)operationsPost.get(operation);
+		}
+		if ((op == null) ||
+				(op.getOnlineResource() == null) || 
+				(op.getOnlineResource().equals(""))){
+			return null;
+		}
+		return op.getOnlineResource();
+	}
+	
+	/**
+	 * Gets the online resource for a concrete operation.
+	 * The default protocol is GET
+	 * @param operation
+	 * The operation
+	 * @return
+	 * The online resource
+	 */
+	public String getOnlineResource(String operation){
+		return getOnlineResource(operation, OGCClientOperation.PROTOCOL_GET);
+	}
+	
+	/**
+	 * Get a hash map with the supported operations
+	 * @return
+	 */
+	public Hashtable getSupportedOperationsByName(){
+		Hashtable operations = new Hashtable();
+		Iterator getIt = operationsGet.keySet().iterator();
+		while (getIt.hasNext()){
+			String id = (String)getIt.next();
+			OGCClientOperation operation = (OGCClientOperation)operationsGet.get(id);
+			operations.put(operation.getOperationName(),
+					operation.getOnlineResource());
+		}
+		return operations;
+	}
+	
+	public boolean isOperationSupported(String operationName){
+	    if (operationsGet.containsKey(operationName)){
+	        return true;
+	    }
+	    if (operationsPost.containsKey(operationName)){
+            return true;
+        }
+	    return false;
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCServiceInformation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCClientOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCClientOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCClientOperation.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.remoteclient.ogc;
+
+import java.util.Hashtable;
+
+public abstract class OGCClientOperation {
+	public static final int PROTOCOL_UNDEFINED = -1;
+	public static final int PROTOCOL_GET = 0;
+	public static final int PROTOCOL_POST = 1;
+	protected String operationName;
+	protected String onlineResource;
+		
+	public OGCClientOperation(String operationName) {
+		super();
+		this.operationName = operationName;		
+	}		
+
+	public OGCClientOperation(String operationName, String onlineResource) {
+		this.onlineResource = onlineResource;
+		this.operationName = operationName;
+	}	
+	
+	public abstract Hashtable getOperations(); 
+	
+	/**
+	 * @return Returns the onlineResource.
+	 */
+	public String getOnlineResource() {
+		return onlineResource;
+	}
+	/**
+	 * @param onlineResource The onlineResource to set.
+	 */
+	public void setOnlineResource(String onlineResource) {
+		this.onlineResource = onlineResource;
+	}	
+
+	/**
+	 * @return Returns the operationName.
+	 */
+	public String getOperationName() {
+		return operationName;
+	}
+	
+	/**
+	 * @param operationName The operationName to set.
+	 */
+	public void setOperationName(String operationName) {
+		this.operationName = operationName;
+	}		
+}
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCClientOperation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCProtocolHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCProtocolHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCProtocolHandler.java	(revision 42196)
@@ -0,0 +1,270 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.ogc;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.net.Downloader;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+
+public abstract class OGCProtocolHandler {
+    protected static final Downloader downloader = CompatLocator.getDownloader();
+    
+    /**
+     * procotol handler name
+     */
+    protected String name;
+    /**
+     * protocol handler version
+     */
+    protected String version;
+    /**
+     * host of the WMS to connect
+     */
+    protected String host;
+    /**
+     *  port number of the comunication channel of the WMS to connect
+     */
+    protected String port;    
+
+    /**
+     * @return Returns the host.
+     */
+    public String getHost() {
+        return host;
+    }
+    /**
+     * @param host The host to set.
+     */
+    public void setHost(String host) {
+        this.host = host;
+    }
+    /**
+     * @return Returns the name.
+     */
+    public String getName() {
+        return name;
+    }
+    /**
+     * @param name The name to set.
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+    /**
+     * @return Returns the port.
+     */
+    public String getPort() {
+        return port;
+    }
+    /**
+     * @param port The port to set.
+     */
+    public void setPort(String port) {
+        this.port = port;
+    }
+    /**
+     * @return Returns the version.
+     */
+    public String getVersion() {
+        return version;
+    }
+    /**
+     * @param version The version to set.
+     */
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    /**
+     * parses the data retrieved by the Capabilities XML document
+     */
+    public abstract boolean parseCapabilities(File f);
+
+    public abstract OGCServiceInformation getServiceInformation();
+
+    /**
+     * Just for not repeat code. Gets the correct separator according 
+     * to the server URL
+     * @param h
+     * @return
+     */
+    protected static String getSymbol(String h) {
+        String symbol;
+        if (h.indexOf("?")==-1) 
+            symbol = "?";
+        else if (h.indexOf("?")!=h.length()-1)
+            symbol = "&";
+        else
+            symbol = "";
+        return symbol;
+    }  
+
+    /**
+     * Parse an operation into a DcpType tag
+     * @param parser
+     * The KXMLParser
+     * @param operation
+     * The WFS operation to parse
+     * @throws IOException 
+     * @throws XmlPullParserException 
+     */
+    protected void parserDcpType(KXmlParser parser, String operation) throws XmlPullParserException, IOException {        
+        int currentTag;
+        boolean end = false;
+
+        currentTag = parser.next();
+
+        while (!end) 
+        {
+            switch(currentTag)
+            {
+            case KXmlParser.START_TAG:
+                if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0){
+                    parseHTTPTag(parser, operation);
+                }	         
+                break;
+            case KXmlParser.END_TAG:
+                if (parser.getName().compareTo(CapabilitiesTags.DCPTYPE) == 0)
+                    end = true;
+                break;
+            case KXmlParser.TEXT:                   
+                break;
+            }
+            if (!end){
+                currentTag = parser.next();
+            }
+        }     
+    }
+
+    /**
+     * Parse an operation into a HTTP tag
+     * @param parser
+     * The KXMLParser
+     * @param operation
+     * The WFS operation to parse
+     * @throws IOException 
+     * @throws XmlPullParserException 
+     */
+    protected void parseHTTPTag(KXmlParser parser, String operation) throws XmlPullParserException, IOException {        
+        int currentTag;
+        boolean end = false;
+
+        currentTag = parser.next();
+        int protocol = -1;
+
+        while (!end) 
+        {
+            switch(currentTag)
+            {
+            case KXmlParser.START_TAG:
+                String value = null;
+                if(parser.getName().compareTo(CapabilitiesTags.GET)==0){
+                    protocol = OGCClientOperation.PROTOCOL_GET;
+                    addOperationByAttribute(parser, operation, protocol);
+                }else if(parser.getName().compareTo(CapabilitiesTags.POST)==0){
+                    protocol = OGCClientOperation.PROTOCOL_POST;
+                    addOperationByAttribute(parser, operation, protocol);
+                }else if(parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0){
+                    addOperationByAttribute(parser, operation, protocol);
+                }				
+                break;
+            case KXmlParser.END_TAG:
+                if (parser.getName().compareTo(CapabilitiesTags.HTTP) == 0)
+                    end = true;
+                break;
+            case KXmlParser.TEXT:                   
+                break;
+            }
+            if (!end){
+                currentTag = parser.next();
+            }
+        }     
+    }
+
+    /**
+     * Add an operation and the online resource 
+     * @param parser
+     * The parser
+     * @param operation
+     * The operation to add
+     * @param protocol
+     * The parser to add
+     */
+    protected void addOperationByAttribute(KXmlParser parser, String operation, int protocol){
+        String value = null;
+        if (protocol > -1){
+            for (int i=0 ; i<parser.getAttributeCount() ; i++){
+                if ((parser.getAttributeName(i).toUpperCase().compareTo(CapabilitiesTags.ONLINERESOURCE.toUpperCase()) == 0) ||
+                    (parser.getAttributeName(i).equals(CapabilitiesTags.XLINK_HREF))){					
+                    value = parser.getAttributeValue(i);
+                }
+            }								
+            if (value == null){
+                getServiceInformation().addOperation(operation, protocol);
+            }else{
+                getServiceInformation().addOperation(operation, protocol, value);
+            }
+        }  
+    }
+
+    /**
+     * Copy the file in a byte array
+     * @param file
+     * The file to copy
+     * @return
+     * An array of bytes
+     * @throws IOException
+     */
+    protected byte[] fileToBytes(File file) throws IOException{
+        FileInputStream fis = null;
+        byte[] bytes = null;
+        try{
+            fis = new FileInputStream(file);
+
+            long length = file.length(); 
+            bytes = new byte[(int)file.length()];
+
+            int offset = 0;
+            int numRead = 0; 
+            while (offset < bytes.length && (numRead=fis.read(bytes, offset, bytes.length-offset)) >= 0) 
+            { 
+                offset += numRead; 
+            }
+        }catch (IOException e) {
+            throw e;
+        }finally{
+            if (fis != null){
+                fis.close();
+            }
+        }         
+        return bytes;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCProtocolHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/request/OGCRequest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/request/OGCRequest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/request/OGCRequest.java	(revision 42196)
@@ -0,0 +1,197 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient.ogc.request;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.UnknownHostException;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.remoteclient.RemoteClientStatus;
+import org.gvsig.remoteclient.ogc.OGCClientOperation;
+import org.gvsig.remoteclient.ogc.OGCProtocolHandler;
+import org.gvsig.remoteclient.utils.Utilities;
+
+public abstract class OGCRequest {
+	protected RemoteClientStatus status = null;
+	protected OGCProtocolHandler protocolHandler = null;
+	protected boolean isDeleted = false;
+	protected static final String XMLTAG_STARTCHARACTER = "<";
+	protected static final String XMLTAG_FINISHCHARACTER = "</";
+	protected static final String XMLTAG_ENDCHARACTER = ">";
+	
+	private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+
+	public OGCRequest(RemoteClientStatus status, OGCProtocolHandler protocolHandler) {
+		super();
+		this.status = status;
+		this.protocolHandler = protocolHandler;
+	}	
+
+	/**
+	 * Send a request to the server.
+	 * @return
+	 * The server reply
+	 * @throws IOException 
+	 * @throws UnknownHostException 
+	 * @throws ConnectException 
+	 */
+	public File sendRequest(ICancellable cancel) throws ConnectException, UnknownHostException, IOException{
+		//if the status is null is because is a GetCapabilities operation
+		if (status != null){
+			if (status.getProtocol() != OGCClientOperation.PROTOCOL_UNDEFINED){
+				if (status.getProtocol() == OGCClientOperation.PROTOCOL_GET){
+					String onlineResource = protocolHandler.getHost();
+					String symbol = getSymbol(onlineResource);
+					onlineResource = onlineResource + symbol;
+					return sendHttpGetRequest(onlineResource, cancel);
+				}else{
+					String onlineResource = protocolHandler.getHost();
+					return sendHttpPostRequest(onlineResource);
+				}
+			}
+		}
+
+		//if exists an online resource for the GET operation
+		String onlineResource = protocolHandler.getServiceInformation().getOnlineResource(getOperationName(), OGCClientOperation.PROTOCOL_GET);
+		if (onlineResource != null){
+			String symbol = getSymbol(onlineResource);
+			onlineResource = onlineResource + symbol;
+			return sendHttpGetRequest(onlineResource, cancel);
+		}
+		//if exists an online resource for the POST operation
+		onlineResource =  protocolHandler.getServiceInformation().getOnlineResource(getOperationName(), OGCClientOperation.PROTOCOL_POST);
+		if (onlineResource != null){
+			return sendHttpPostRequest(onlineResource);
+		}
+		//If the online resource doesn't exist, it tries with the server URL and GET
+		onlineResource = protocolHandler.getHost();
+		String symbol = getSymbol(onlineResource);
+		onlineResource = onlineResource + symbol;
+		return sendHttpGetRequest(onlineResource, cancel);
+	}
+
+	protected abstract String getHttpGetRequest(String onlineResource);
+
+	protected abstract String getHttpPostRequest(String onlineResource);
+
+	protected abstract String getTempFilePrefix();
+
+	protected abstract String getOperationName();
+
+	protected abstract String getSchemaLocation();	
+
+	/**
+	 * @return the URL used in the HTTP get operation
+	 * @throws MalformedURLException
+	 */
+	public URL getURL() throws MalformedURLException{
+		String onlineResource = protocolHandler.getServiceInformation().getOnlineResource(getOperationName(), OGCClientOperation.PROTOCOL_GET);
+		if (onlineResource != null){
+			String symbol = getSymbol(onlineResource);
+			onlineResource = onlineResource + symbol;
+			return new URL(getHttpGetRequest(onlineResource));
+		}
+		
+		//If the online resource doesn't exist, it tries with the server URL and GET
+		onlineResource = protocolHandler.getHost();
+		String symbol = getSymbol(onlineResource);
+		onlineResource = onlineResource + symbol;
+		return new URL(getHttpGetRequest(onlineResource));
+	}
+
+	/**
+	 * Send a Http request using the get protocol
+	 * @param onlineResource
+	 * @return
+	 * @throws ConnectException
+	 * @throws UnknownHostException
+	 * @throws IOException
+	 */
+	private File sendHttpGetRequest(String onlineResource, ICancellable cancel) throws ConnectException, UnknownHostException, IOException{
+		URL url = new URL(stringUtils.replaceAll(getHttpGetRequest(onlineResource), " ", "%20"));
+		if (isDeleted()){
+			Utilities.removeURL(url);
+		}
+		return Utilities.downloadFile(url, getTempFilePrefix(), cancel);		
+	}
+
+	/**
+	 * Send a Http request using the post protocol
+	 * @param onlineResource
+	 * @return
+	 * @throws ConnectException
+	 * @throws UnknownHostException
+	 * @throws IOException
+	 */
+	private File sendHttpPostRequest(String onlineResource) throws ConnectException, UnknownHostException, IOException{
+		URL url = new URL(onlineResource);
+		String data = getHttpPostRequest(onlineResource);
+		if (isDeleted()){
+			Utilities.removeURL(url+data);
+		}
+		return Utilities.downloadFile(url, data, getTempFilePrefix(), null);		
+	}
+
+	/**
+	 * Just for not repeat code. Gets the correct separator according 
+	 * to the server URL
+	 * @param h
+	 * @return
+	 */
+	protected static String getSymbol(String h) {
+		String symbol;
+		if (h.indexOf("?")==-1) 
+			symbol = "?";
+		else if (h.indexOf("?")!=h.length()-1)
+			symbol = "&";
+		else
+			symbol = "";
+		return symbol;
+	}
+
+	public boolean isDeleted() {
+		return isDeleted;
+	}
+
+	public void setDeleted(boolean isDeleted) {
+		this.isDeleted = isDeleted;
+	}
+	
+	protected String createXMLStartTag(String tagName){
+	    return XMLTAG_STARTCHARACTER + tagName + XMLTAG_ENDCHARACTER;
+	}
+	
+   protected String createXMLEndtTag(String tagName){
+        return XMLTAG_FINISHCHARACTER + tagName + XMLTAG_ENDCHARACTER;
+    }
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/request/OGCRequest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/FIFOTaskPlanner.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/FIFOTaskPlanner.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/FIFOTaskPlanner.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning;
+
+/**
+ * A simple FIFO task planner. The tasks returned by this planner are executed
+ * enterely. It does not issue another task until the current is finished. 
+ * @author jaume
+ *
+ */
+public class FIFOTaskPlanner implements ITaskPlanner {
+	IQueue queue;
+	
+	/**
+	 * Creates a new instance of FIFOTaskPlanner that will work against the
+	 * queue passed as paramenter 
+	 * @param queue, the IQueue to be planned
+	 */
+	public FIFOTaskPlanner(IQueue queue) {
+		this.queue = queue;
+	}
+
+	
+	public IRunnableTask nextTask() {
+		synchronized (this) {
+			return (IRunnableTask) queue.getTasks().remove(0);
+		}
+	}
+	/**
+	 * FIFO plans have no previous tasks so, null is always returned.
+	 */
+	public IRunnableTask previousTask() {
+		return null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/FIFOTaskPlanner.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/ITaskPlanner.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/ITaskPlanner.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/ITaskPlanner.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning;
+
+/**
+ * <p>
+ * ITaskPlanner provides an interface to program your own task planning. It gives
+ * you operations for pick a task from the queue according on the criteria that
+ * you designed.<br>
+ * </p>
+ * <p>
+ * The simplest implementation of ITaskPlanner would be a FIFO task planner (see
+ * FIFOTaskPlanner.java) which takes jobs from a task queue in the same order
+ * they were put. But any kind of planner is possible (SJF, LIFO, RoundRobin, etc.). 
+ * </p>
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public interface ITaskPlanner {
+	/**
+	 * Takes the next task to be executed.
+	 * @return IRunnableTask representing the next task to be executed
+	 */
+	public IRunnableTask nextTask();
+	
+	/**
+	 * Takes the previous executed task. Notice that it may or may not have
+	 * sense for specific implementations. For example, in a FIFO-like planner,
+	 * the task is taken from the queue, executed until it is finished and 
+	 * removed from the queue. So, there is no previous task.
+	 * 
+	 * @return IRunnableTask representing the previous executed task, or null
+	 * if none.
+	 * @deprecated (probably this is unuseful and i'll remove it)
+	 */
+	public IRunnableTask previousTask();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/ITaskPlanner.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IQueue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IQueue.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IQueue.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning;
+
+import java.util.Vector;
+
+/**
+ *  <p>
+ *  You should write your own concrete Queue implementation to hold the tasks in
+ *  a specific kind of queue.<br>
+ *  </p>
+ *  <p>
+ *  Following the contract, you should also write a task planner that does what 
+ *  you desire. Task planners are a concrete class of the ITaskPlanner that would 
+ *  plannify which is the next, the previous,.. task to be done. However, if
+ *  you don't want to write anything special, just guess a simple FIFO queue<br>
+ *  </p>
+ *  
+ *  @author jaume dominguez faus - jaume.dominguez@iver.es
+ *  @see ITaskPlanner
+ */
+public interface IQueue {
+	
+	/**
+	 * Adds a new task to the queue. The place where the new task will be put its
+	 * left to the concrete implementation of this interface.
+	 * @param IRunnableTask task
+	 */
+	IRunnableTask put(IRunnableTask task);
+	
+	/**
+	 * Returns the next task by calling the task planner's nextTask() method.
+	 * @return IRunnableTask with the next task to be executed.
+	 */
+	IRunnableTask take();
+	
+	/**
+	 * Returns true if the Queue has no (more) jobs to do.
+	 * @return
+	 */
+	boolean isEmpty();
+	
+	/**
+	 * Returns the task planner currently defined by this queue.
+	 * @return ITaskPlanner
+	 */
+	ITaskPlanner getTaskPlanner();
+	
+	/**
+	 * Sets the TaskPlanner that will decide which of the tasks in the queue will
+	 * be executed next. A null value should represent a FIFO planner. 
+	 * @param planner
+	 */
+	void setTaskPlanner(ITaskPlanner planner);
+	
+	/**
+	 * Causes the execution of this queue to be paused. The task currently in execution
+	 * finishes and after it the planner will not issue more tasks until resume() is
+	 * invoked.
+	 */
+	void pause();
+	
+	/**
+	 * Causes the execution of this queue to be resumed. The execution will continue
+	 * with the next task issued by the planner. It has no effect if the queue was not
+	 * paused yet. 
+	 */
+	void resume();
+
+	/**
+	 * Returns the set of tasks in a Vector (thread-safe).
+	 * @return Vector containing the tasks in this queue.
+	 */
+	Vector getTasks();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IQueue.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveEvent.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning.retrieving;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class RetrieveEvent {
+	public static final int NOT_STARTED = 0;
+	public static final int CONNECTING = 1;
+	public static final int TRANSFERRING = 2;
+	public static final int REQUEST_FINISHED = 3;
+	public static final int REQUEST_FAILED = 4;
+	public static final int REQUEST_CANCELLED = 5;
+	public static final int POSTPROCESSING = 6;
+	
+	/**
+	 * redundant; use REQUEST_FAILED
+	 * @deprecated ?
+	 */
+	public static final int ERROR = 11;
+	
+	private int eventType;
+	
+	public void setType(int type) {
+		eventType = type;
+	}
+
+	public int getType() {
+		return eventType;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveQueue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveQueue.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveQueue.java	(revision 42196)
@@ -0,0 +1,145 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning.retrieving;
+
+import java.util.Date;
+import java.util.Vector;
+
+import org.gvsig.remoteclient.taskplanning.FIFOTaskPlanner;
+import org.gvsig.remoteclient.taskplanning.IQueue;
+import org.gvsig.remoteclient.taskplanning.IRunnableTask;
+import org.gvsig.remoteclient.taskplanning.ITaskPlanner;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * 		   Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class RetrieveQueue implements IQueue {
+	private String hostName;
+	private Date startTime;
+	private Vector tasks = new Vector();
+	private boolean waiting;
+	private ITaskPlanner taskPlanner;
+	private Worker worker;
+	
+	/**
+	 * 
+	 */
+	public RetrieveQueue(String hName) {
+		hostName = hName;
+		startTime = new Date();
+		worker = new Worker();
+		new Thread(worker).start();
+	}
+	
+	
+	public IRunnableTask put(IRunnableTask task) {
+		tasks.add(task);
+		if (waiting) {
+			synchronized (this) {
+				notifyAll();
+			}
+		}
+		return task;
+	}
+	
+	public IRunnableTask take() {
+		if (tasks.isEmpty()) {
+			synchronized (this) {
+				waiting = true;
+				try {
+					wait();
+				} catch (InterruptedException ie) {
+					waiting = false;
+				}
+			}
+		}
+		return getTaskPlanner().nextTask() ;
+	}
+	
+	
+	
+	public boolean isEmpty() {
+		synchronized (this) {
+			return tasks.isEmpty() && !worker.r.isRunning();
+		}
+	}
+	
+	
+
+	public ITaskPlanner getTaskPlanner() {
+		if (taskPlanner == null) {
+			taskPlanner = new FIFOTaskPlanner(this);
+		}
+		return taskPlanner;
+	}
+
+
+	public void setTaskPlanner(ITaskPlanner planner) {
+		taskPlanner = planner;
+	}
+
+
+	public void pause() {
+		waiting = true;
+	}
+
+
+	public void resume() {
+		waiting = false;
+	}
+
+
+	public Vector getTasks() {
+		return tasks;
+	}
+
+	private class Worker implements Runnable {
+		URLRetrieveTask r;
+		int i = 0; 
+		public void run() {
+			while (true) {
+				r = (URLRetrieveTask) take();
+				r.execute();
+			}
+		}
+	}
+
+	protected URLRetrieveTask getURLPreviousRequest(URLRequest request) {
+		// Is the one currently running?
+		/*URLRetrieveTask aux = (URLRetrieveTask) worker.r;
+		if (request.equals(aux.getRequest())) {
+				return aux;
+		}*/	
+		// Is one of those in the queue?
+		for (int i = 0; i < tasks.size(); i++) {
+			URLRetrieveTask task = (URLRetrieveTask) tasks.get(i);
+			URLRequest aWorkingRequest = task.getRequest();
+			if (aWorkingRequest.equals(request)) {
+				return task;
+			}
+		}
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveQueue.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveListener.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning.retrieving;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public interface RetrieveListener {
+	public void transferEventReceived(RetrieveEvent event);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRequest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRequest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRequest.java	(revision 42196)
@@ -0,0 +1,178 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning.retrieving;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class URLRequest{
+	public static final String HTTP = "http";
+	private volatile int hashCode = 0;
+	public static final int GET = 1;
+	public static final int POST = 2;
+	
+	private int requestType = GET;
+	private String protocol;
+	private String host;
+	private int port = -1;
+	private String file;
+	private String fileName;
+	
+	public URL getUrl() throws MalformedURLException {
+		String u = protocol;
+		u += "://"+host;
+		if (port != -1)
+			u += ":"+port;
+		u += "/"+file;
+		return new URL(u);
+	}
+	/**
+	 * @return Returns the fileName.
+	 */
+	public String getFileName() {
+		return fileName;
+	}
+	/**
+	 * @param fileName The fileName to set.
+	 */
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	/**
+	 * @return Returns the host.
+	 */
+	public String getHost() {
+		return host;
+	}
+	/**
+	 * @param host The host to set.
+	 */
+	public void setHost(String host) {
+		this.host = host;
+	}
+	/**
+	 * @return Returns the file.
+	 */
+	public String getFile() {
+		return file;
+	}
+	/**
+	 * @param page The file to set.
+	 */
+	public void setFile(String page) {
+		this.file = page;
+	}
+	/**
+	 * @return Returns the protocol.
+	 */
+	public String getProtocol() {
+		return protocol;
+	}
+	/**
+	 * @param protocol The protocol to set.
+	 */
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+	/**
+	 * @return Returns the requestType.
+	 */
+	public int getRequestType() {
+		return requestType;
+	}
+	/**
+	 * @param requestType The requestType to set.
+	 */
+	public void setRequestType(int requestType) {
+		this.requestType = requestType;
+	}
+	/**
+	 * @return Returns the port.
+	 */
+	public int getPort() {
+		return port;
+	}
+	/**
+	 * @param port The port to set.
+	 */
+	public void setPort(int port) {
+		this.port = port;
+	}
+
+	public int hashCode() {
+		if (hashCode == 0) {
+			int result = 17;
+			String[] stringFields = new String[] {
+					fileName,
+					host,
+					file,
+					protocol
+			};
+			for (int i = 0; i < stringFields.length; i++) {
+				if (stringFields[i] != null)
+					for (int j = 0; j < stringFields[i].length(); j++) 
+						result = 37*result + (int) stringFields[i].charAt(j);
+				
+			}
+			result = 37*result + port;
+			result = 37*result + requestType;
+		}
+		return hashCode;
+	}
+	
+	public boolean equals(Object o) {
+		if (this == o)
+			return true;
+		if (!(o instanceof URLRequest))
+			return false;
+
+		URLRequest other = (URLRequest) o;
+		
+		String[] stringFields = new String[] {
+				// this.fileName, NO!!! Do not check file name
+				this.host,
+				this.file,
+				this.protocol
+		};
+		String[] othersStringField = new String[] {
+				// other.fileName, NO!!! Do not check file name
+				other.host,
+				other.file,
+				other.protocol
+		};
+		for (int i = 0; i < stringFields.length; i++) {
+			if (stringFields[i] == null && othersStringField[i]!=null) return false;
+			if (stringFields[i] == null && othersStringField[i]!=null) return false;
+			if (stringFields[i] != null && othersStringField[i]!=null) 
+				if (!stringFields[i].equals(othersStringField[i])) return false;
+		}
+		
+		if (this.port != other.port) return false;
+		if (this.requestType != other.requestType) return false;
+		return true;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRequest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTask.java	(revision 42196)
@@ -0,0 +1,353 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning.retrieving;
+
+/*
+ * Based on portions of code from EarthFlicks
+ * http://today.java.net/lpt/a/212
+ */
+
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.gvsig.remoteclient.taskplanning.IRunnableTask;
+
+/**
+ * Clase para bajar ficheros en un thread independiente.
+ */
+public class URLRetrieveTask  implements IRunnableTask {
+	
+	private boolean running, cancelled;
+	private URLRequest request;
+	private Vector listeners = new Vector();
+	private RetrieveEvent event = new RetrieveEvent();
+	private InputStream is;
+	
+	/**
+	 * 
+	 */
+	public URLRetrieveTask(URLRequest request, RetrieveListener listener) {
+		this.request = request;
+		addRetrieveListener(listener);
+		running = cancelled = false;
+	}
+	
+
+	public void execute() {
+		event.setType(RetrieveEvent.NOT_STARTED);
+		fireEvent();
+		cancelled = false;
+		running= true;
+		
+		long t = System.currentTimeMillis();
+		File f = new File(request.getFileName()+System.currentTimeMillis());
+		while (f.exists()) {
+			t++;
+			f = new File(request.getFileName()+t);
+		}
+		URL url;
+		try {
+			event.setType(RetrieveEvent.CONNECTING);
+			fireEvent();
+			url = request.getUrl();
+			request.setFileName(f.getAbsolutePath());
+			System.out.println("downloading '"+url+"' to: "+f.getAbsolutePath());
+			
+			DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)));
+			byte[] buffer = new byte[1024*256];
+			fireEvent();
+			is = url.openStream();
+			event.setType(RetrieveEvent.TRANSFERRING);
+			fireEvent();
+			if (!cancelled) {
+				long readed = 0;
+				for (int i = is.read(buffer); !cancelled && i>0; i = is.read(buffer)){
+					dos.write(buffer, 0, i);
+					readed += i;
+				}
+				
+				dos.close();
+			}
+			
+			if (cancelled) {
+				// Bad incomplete file, delete it.
+				System.out.println("download cancelled ("+url+")");
+				f.delete();
+			} else {
+				// register job in the cache
+				// TODO aix� deuria d'estar al principi per a poder capturar
+				// treballs que s'estan fent per� que encara no s'han acabat
+				synchronized (this) {
+					RequestManager.getInstance().addDownloadedURLRequest(request, f.getAbsolutePath());
+				}
+			}
+			
+			running = false;
+			if (cancelled)
+				event.setType(RetrieveEvent.REQUEST_CANCELLED);
+			else
+				event.setType(RetrieveEvent.REQUEST_FINISHED);
+			
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+			event.setType(RetrieveEvent.REQUEST_FAILED);
+		} catch (IOException e) {
+			e.printStackTrace();
+			event.setType(RetrieveEvent.REQUEST_FAILED);
+		}
+		fireEvent();
+	}
+
+	private void fireEvent() {
+		Iterator it = listeners.iterator();
+		while (it.hasNext()) {
+			RetrieveListener listener = (RetrieveListener) it.next();
+			listener.transferEventReceived(event);		
+		}
+	}
+
+	public void addRetrieveListener(RetrieveListener l) {
+		if (l!=null)
+			listeners.add(l);
+	}
+
+	public void cancel() {
+		cancelled = true;
+		try {
+			if (is != null) {
+				is.close();
+				is = null;
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public boolean isRunning() {
+		return running && !cancelled;
+	}
+
+
+	public URLRequest getRequest() {
+		return request;
+	}
+
+
+	public Vector getListeners() {
+		return listeners;
+	}
+
+
+	public long getTaskTimeout() {
+		return 30*1000;
+	}
+}
+
+
+//static private String makeSuffix(String contentType) {
+//	contentType = contentType.toLowerCase();
+//    if (contentType.indexOf("png") >= 0)
+//        return ".png";
+//
+//    if (contentType.indexOf("xml") >= 0)
+//        return ".xml";
+//
+//    if (contentType.indexOf("gif") >= 0)
+//        return ".gif";
+//
+//    if (contentType.indexOf("tif") >= 0)
+//        return ".tif";
+//
+//    if (contentType.indexOf("jpg") >= 0
+//        || contentType.indexOf("jpeg") >= 0)
+//        return ".jpg";
+//
+//    if (contentType.indexOf("html") >= 0)
+//        return ".html";
+//
+//    return "";
+//}
+///**
+// * 
+// */
+//private void end() {
+//}
+//
+///**
+// * 
+// */
+//private void inThreadEnd() {
+//}
+//
+///**
+// * 
+// */
+//private void update() {
+//}
+//
+///**
+// * 
+// */
+//private void begin() {
+//}
+
+//public void start() {
+//// this.reset();
+//this.thread = new Thread(this);
+//this.thread.start();
+//}
+
+/* (non-Javadoc)
+* @see java.lang.Runnable#run()
+* /
+public void run() {
+try {
+	URL url = request.getUrl();
+	this.status = Status.CONNECTING;
+	this.begin();
+	
+    {
+        // Retrieve the contents.
+        int numBytesRead = 0;
+//        System.out.println("File being retrieved. " + this.getUrl().toString());
+        java.net.URLConnection connection = url.openConnection();
+        connection.setAllowUserInteraction(true);
+        java.io.InputStream incoming = connection.getInputStream();
+        this.contentLength = connection.getContentLength();
+        this.contentType = connection.getContentType();
+
+        java.io.File destFile = java.io.File.createTempFile("Cq_", makeSuffix(this.contentType));
+        destFile.deleteOnExit(); // It's copied later if it's to be persisted.
+        this.destination = destFile.getPath();
+        java.io.FileOutputStream outgoing = new java.io.FileOutputStream(destFile);
+
+        this.status = Status.RETRIEVING;
+
+        byte[] buffer = new byte[4096];
+
+        try {
+            while (!Thread.currentThread().isInterrupted() && numBytesRead >= 0) {
+                numBytesRead = incoming.read(buffer);
+                if (numBytesRead > 0) {
+                    this.bytesRead += numBytesRead;
+                    outgoing.write(buffer, 0, numBytesRead);
+                    this.update();
+                }
+            }
+        } finally {
+            if (incoming != null)
+                try {incoming.close();} catch (java.io.IOException e) {}; // TODO: log it maybe
+            if (outgoing != null)
+                try {outgoing.close();} catch (java.io.IOException e) {}; // TODO: log it maybe
+        }
+        this.status = Status.POSTPROCESSING;
+    }
+} catch (Exception e) {
+    this.status = Status.ERROR;
+    this.error = e;
+    e.printStackTrace();
+} finally {
+    if (Thread.currentThread().isInterrupted())
+        this.status = Status.INTERRUPTED;
+    this.update();
+    this.inThreadEnd();
+    if (this.status == Status.POSTPROCESSING)
+        this.status = Status.DONE;
+    this.end();
+}
+}*/
+
+//File tempDirectory = new File(tempDirectoryPath);
+//if (!tempDirectory.exists())
+//tempDirectory.mkdir();
+//
+//f = new File(tempDirectoryPath+"/"+name+System.currentTimeMillis());
+//if (cancelled)
+//throw new TaskCancelledException(); 
+//addDownloadedURL(url, f.getAbsolutePath());
+//try {
+//URL url = request.getUrl();
+//System.out.println(url);
+//this.status = Status.CONNECTING;
+//this.begin();
+//
+//{
+//// Retrieve the contents.
+//int numBytesRead = 0;
+////System.out.println("File being retrieved. " + this.getUrl().toString());
+//java.net.URLConnection connection = url.openConnection();
+//connection.setAllowUserInteraction(true);
+//java.io.InputStream incoming = connection.getInputStream();
+//this.contentLength = connection.getContentLength();
+//this.contentType = connection.getContentType();
+//
+//java.io.File destFile = java.io.File.createTempFile("Cq_", makeSuffix(this.contentType));
+//System.out.println(destFile.getAbsolutePath());
+////destFile.deleteOnExit(); // It's copied later if it's to be persisted.
+//this.destination = destFile.getPath();
+//java.io.FileOutputStream outgoing = new java.io.FileOutputStream(destFile);
+//
+//this.status = Status.RETRIEVING;
+//
+//byte[] buffer = new byte[4096];
+//
+//try {
+//while (!Thread.currentThread().isInterrupted() && numBytesRead >= 0) {
+//numBytesRead = incoming.read(buffer);
+//if (numBytesRead > 0) {
+//this.bytesRead += numBytesRead;
+//outgoing.write(buffer, 0, numBytesRead);
+//this.update();
+//}
+//}
+//} finally {
+//if (incoming != null)
+//try {incoming.close();} catch (java.io.IOException e) {}; // TODO: log it maybe
+//if (outgoing != null)
+//try {outgoing.close();} catch (java.io.IOException e) {}; // TODO: log it maybe
+//}
+//this.status = Status.POSTPROCESSING;
+//}
+//} catch (Exception e) {
+//this.status = Status.ERROR;
+//this.error = e;
+//e.printStackTrace();
+//} finally {
+//if (Thread.currentThread().isInterrupted())
+//this.status = Status.INTERRUPTED;
+//this.update();
+//this.inThreadEnd();
+//if (this.status == Status.POSTPROCESSING)
+//this.status = Status.DONE;
+//this.end();
+//}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/package.html	(revision 42196)
@@ -0,0 +1,56 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<body>
+<h4>Gestor de downloads multihilo</h4>
+<p>Permite mantener en threads separados las peticiones a servidores remotos
+(http, ftp, etc), de manera que el flujo normal de ejecuci�n del programa
+no se quede detenido cuando se realiza una petici�n.</p>
+
+<p>RetrieveManager es el gestor de peticiones. Tiene una tabla de colas
+ de petici�n que son las que atienden esas peticiones. Se crea una cola
+ para cada server que se invoque, y esta es la que gestionar� las
+ peticiones que se realicen a ese server, hasta el fin de la ejecuci�n
+ del programa.</p>
+ 
+<p>RetrieveQueue es la clase que realiza las peticiones. Mantiene las
+prioridades, resuelve los timeouts, etc. Solo mantiene una petici�n
+'activa' simultaneamente. Las dem�s esperan a que esta termine.</p>
+
+<p>Retriever es la clase 'petici�n' propiamente dicha. Habla con el server,
+se baja los datos, y le comunica al listener lo que est� pasando</p>
+
+<p>RetrieveRequest es la clase que contiene los datos de la conexi�n. En
+principio permite GET y POST sobre HTTP, pero se puede extender si hace
+falta algo distinto</p>
+
+<p>RetrieveListener es el interface que implementa el objeto que vaya a
+monitorizar el progreso del Retriever, y el que deber� actuar en consecuencia.</p>
+
+<p>RetrieveEvent es la clase mediante la que se notifica al Listener
+la evoluci�n de la petici�n.</p>
+
+<p>RetrieveException excepci�n gen�rica de este package.</p>
+</body>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RequestManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RequestManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RequestManager.java	(revision 42196)
@@ -0,0 +1,205 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning.retrieving;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.Hashtable;
+import java.util.TreeMap;
+
+import org.gvsig.remoteclient.taskplanning.IQueue;
+
+/**
+ * pa administrar les tasques (la hist�ria aquella
+ *  de que hi haja una cola per a cada servidor)
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class RequestManager {
+	private boolean debug = true;
+    
+	private static RequestManager instance;
+	private TreeMap serversTable = new TreeMap();
+	private RequestManager() {} // Avoid public instantiation
+	 
+	public static RequestManager getInstance() {
+		if (instance == null)
+			instance = new RequestManager();
+		return instance;
+	}
+	
+	
+	public URLRetrieveTask addURLRequest(URLRequest request, RetrieveListener listener) {
+		try {
+			
+			// TODO canviar per a quetorne el Request antic, que la request guarde el
+			// seu estat aix� com la llista de listeners
+			File f = getPreviousDownloadedURLRequest(request);
+			
+			if (f!=null) {
+				// The file was already requested and it is in the cache or
+				// the download is in process
+				
+				// Overwrite the file name with the file in the cache's one.
+				request.setFileName(f.getAbsolutePath());
+				System.out.println(request.getUrl()+" is cached at '"+f.getAbsolutePath()+"'");
+				
+
+				// get this server's task queue
+				RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost());
+				
+				// Look up the previous cached jobs
+				
+				URLRetrieveTask workingTask = serverQueue.getURLPreviousRequest(request);
+				if (workingTask == null) {
+					// Task already done. Notify listener
+					if (debug)
+						System.err.println("done job found: "+request.getUrl());
+					RetrieveEvent event = new RetrieveEvent();
+					event.setType(RetrieveEvent.REQUEST_FINISHED);
+					listener.transferEventReceived(event);
+					
+				} else {
+					// The task is working yet, will register the listener
+					
+					// TODO no va b�... perqu� la cola va buidant-se molt r�pidament
+					// per a fer que vaja tamb� hi hauria que registrar en cache
+					// lo que s'est� baixant al principi de l'execute();
+					if (debug)
+						System.err.println("working job found: "+request.getUrl());
+					workingTask.addRetrieveListener(listener);
+					
+				}
+			} else {
+				// Pick an unrepeatable fileName
+				String host = request.getHost();
+				String fileName = request.getFileName();
+				File tempDir = new File(tempDirectoryPath);
+				if (!tempDir.exists())
+					tempDir.mkdir();
+				String fileNamePrefix = tempDirectoryPath + 
+											File.separator + host + 
+											"-" ;
+				if (fileName.startsWith(fileNamePrefix))
+					fileName = fileName.substring(fileNamePrefix.length(), fileName.length());
+				
+				// get this server's task queue
+				RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost());
+				
+				
+				fileName = fileNamePrefix + fileName;
+				
+				request.setFileName(fileName);
+				
+				// TODO
+				// jo ac� comprovaria quin protocol, m�tode, host, etc... i crearia un
+				// objecte que tractara la desc�rrega segons el m�tode que li toca.
+				// algo en plan Strategy's
+				//
+				// per exemple si fem URLRetrieveTask una abstracta i tenim
+				// 
+				// GET de tota la vida
+				// serverQueue.put(new HTTPGetRetrieveTask(request, listener));
+				//
+				// POST
+				// serverQueue.put(new HTTPPostRetrieveTask(request, listener));
+				//
+				// FTP
+				// serverQueue.put(new FTPRetrieveTask(request, listener));
+				//
+				// ????Xarxa local?????
+				// serverQueue.put(new SMBRetrieveTask(request, listener));
+				
+				// Enqueue the request and the listener will be notified when done.
+				URLRetrieveTask task = new URLRetrieveTask(request, listener);
+				return (URLRetrieveTask) serverQueue.put(task);
+			}
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private IQueue getQueue(String hostName) {
+		RetrieveQueue queue = null;
+		if (serversTable.containsKey(hostName))
+			queue = (RetrieveQueue) serversTable.get(hostName);
+		else {
+			// crea la cola
+			queue = new RetrieveQueue(hostName);
+			// pone la cola del server en marcha.
+		}
+		return queue;
+	}
+
+
+	private Hashtable downloadedFiles;
+	private final String tempDirectoryPath = System.getProperty("java.io.tmpdir")+"tmp-andami";
+	/**
+     * Remove an URL from the system cache. The file will remain in the file
+     * system for further eventual uses.
+     * @param request
+     */
+	public void removeURLRequest(URLRequest request) {
+		if (downloadedFiles != null && downloadedFiles.containsKey(request))
+			downloadedFiles.remove(request);
+	}
+	/**
+     * Adds an URL to the table of downloaded files for further uses. If the URL
+     * already exists in the table its filePath value is updated to the new one and
+     * the old file itself is removed from the file system.
+     * 
+     * @param url
+     * @param filePath
+     */
+    protected void addDownloadedURLRequest(URLRequest request, String filePath){
+        if (downloadedFiles==null)
+            downloadedFiles = new Hashtable();
+        String fileName = (String) downloadedFiles.put(request, filePath);
+        if (fileName!=null){
+            File f = new File(fileName);
+            if (f.exists())
+                f.delete();
+        }
+    }
+    /**
+     * Returns the content of this URL as a file from the file system.<br>
+     * <p>
+     * If the URL has been already downloaded in this session and notified 
+     * to the system using the static <b>Utilities.addDownloadedURL(URL)</b>
+     * method, it can be restored faster from the file system avoiding to
+     * download it again.
+     * </p>
+     * @param url
+     * @return File containing this URL's content or null if no file was found.
+     */
+    private File getPreviousDownloadedURLRequest(URLRequest request){
+        File f = null;
+        if (downloadedFiles!=null && downloadedFiles.containsKey(request)){
+            String filePath = (String) downloadedFiles.get(request);
+            f = new File(filePath);
+        }
+        return f;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RequestManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IRunnableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IRunnableTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IRunnableTask.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning;
+
+/**
+ * Interface implemented by those tasks that can be background-executed,
+ * cancelled or any other thing.
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IRunnableTask {
+	/**
+	 * Executes this task's operations.
+	 */
+	public void execute();
+	
+	/**
+	 * Cancels the current execution, if any, of this task. Should have no
+	 * effect if the task is not executing anything.
+	 */
+	public void cancel();
+	
+	/**
+	 * Tells if the task is on execution.
+	 * @return true if the task is busy, false otherwise.
+	 */
+	public boolean isRunning();
+	
+	/**
+	 * Returns the timeout set to this task in milliseconds
+	 * @return the amount of milliseconds to wait until the task
+	 * 		   will be considered as unsuccessful, or 0 or less to
+	 * 		   say that task can wait forever.
+	 */
+	public long getTaskTimeout();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IRunnableTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClient.java	(revision 42196)
@@ -0,0 +1,179 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient;
+
+import org.gvsig.compat.net.ICancellable;
+
+
+/**
+ * <p></p>
+ *
+ */
+public abstract class RemoteClient {
+
+/**
+ * <p>Represents ...</p>
+ *
+ */
+    protected String hostName;
+
+/**
+ * <p>Represents ...</p>
+ *
+ */
+    protected int port;
+
+/**
+ * <p>Represents ...</p>
+ *
+ */
+    protected String serviceName;
+
+/**
+ * <p>Represents ...</p>
+ *
+ */
+    private String type;
+
+/**
+ * <p>Represents ...</p>
+ *
+ */
+    private String subtype;
+
+/**
+ * <p>Represents ...</p>
+ *
+ *
+ * @return
+ */
+    public String getHost() {
+        return hostName;
+    }
+
+/**
+ * <p>Represents ...</p>
+ *
+ *
+ * @param _hostName
+ */
+    public void setHost(String _hostName) {
+        hostName = _hostName;
+    }
+
+/**
+ * <p>Represents ...</p>
+ *
+ *
+ * @return
+ */
+    public int getPort() {
+        // your code here
+        return port;
+    }
+
+/**
+ * <p>Does ...</p>
+ *
+ *
+ * @param _port
+ */
+    public void setPort(int _port) {
+        port = _port;
+    }
+
+/**
+ * <p>Does ...</p>
+ *
+ *
+ * @return
+ */
+    public String getServiceName() {
+        // your code here
+        return serviceName;
+    }
+
+/**
+ * <p>Does ...</p>
+ *
+ *
+ * @param _serviceName
+ */
+    public void setServiceName(String _serviceName) {
+        serviceName = _serviceName;
+    }
+
+/**
+ * <p>Does ...</p>
+ *
+ */
+    public abstract boolean connect(boolean override, ICancellable cancel);
+
+/**
+ * <p>Does ...</p>
+ *
+ */
+    public abstract void close();
+
+/**
+ * <p>Represents ...</p>
+ *
+ *
+ * @return
+ */
+    public String getType() {
+        return type;
+    }
+
+/**
+ * <p>Represents ...</p>
+ *
+ *
+ * @param _type
+ */
+    public void setType(String _type) {
+        type = _type;
+    }
+
+/**
+ * <p>Represents ...</p>
+ *
+ *
+ * @return
+ */
+    public String getSubtype() {
+        return subtype;
+    }
+
+/**
+ * <p>Represents ...</p>
+ *
+ *
+ * @param _subtype
+ */
+    public void setSubtype(String _subtype) {
+        subtype = _subtype;
+    }
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClient.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandler.java	(revision 42196)
@@ -0,0 +1,374 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.remoteclient.exceptions.ServerErrorException;
+import org.gvsig.remoteclient.exceptions.WCSException;
+//import org.gvsig.remoteclient.exceptions.WMSException;
+import org.gvsig.remoteclient.ogc.OGCProtocolHandler;
+import org.gvsig.remoteclient.ogc.OGCServiceInformation;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.ExceptionTags;
+import org.gvsig.remoteclient.utils.Utilities;
+import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
+import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+/**
+ *
+ * @author jaume
+ *
+ */
+public abstract class WCSProtocolHandler extends OGCProtocolHandler {
+	/**
+	 * Encoding used to parse different xml documents.
+	 */
+	protected String encoding = "UTF-8";
+	protected Hashtable layerPool = new Hashtable();
+
+	/**
+     * WCS metadata
+     */
+    protected WCSServiceInformation serviceInfo = new WCSServiceInformation();
+    
+    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.OGCProtocolHandler#setHost(java.lang.String)
+	 */
+	public void setHost(String host) {
+		try {
+			// Validates the URL if doesn't produces an exception
+			new URL(host);
+
+			int index = host.indexOf("?");
+			
+			if (index == -1)
+				super.setHost(host);
+			else
+				super.setHost(host.substring(0, index));
+		}
+		catch (MalformedURLException m) {
+			// Bad URL -> hold it
+			super.setHost(host);
+		}
+	}
+
+	/**
+     * <p>
+     * Builds a GetCapabilities request that is sent to the WCS
+     * the response will be parse to extract the data needed by the
+     * WCS client.
+     * </p>
+     * @param override, if true the cache is ignored
+     */
+    public void getCapabilities(WCSStatus status, boolean override, ICancellable cancel) {
+           URL request = null;
+            try {
+                request = new URL(buildCapabilitiesRequest(status));
+            }
+            catch(Exception e) {
+                e.printStackTrace();
+            }
+            try {
+            	if (override)
+            	    downloader.removeURL(request);
+            	File f =  downloader.downloadFile(request,"wcs_capabilities.xml", cancel);
+            	if (f!=null)
+            		parseCapabilities(f);
+            } catch(Exception e) {
+            	e.printStackTrace();
+            }
+    }
+
+    /**
+     * Builds a complete URL-string that can be used to send a GetCapabilities request.
+     * @return String
+     */
+    private String buildCapabilitiesRequest(WCSStatus status) {
+    	StringBuffer req = new StringBuffer();
+		String symbol = null;
+
+		String onlineResource;
+		if (status == null || status.getOnlineResource() == null)
+			onlineResource = getHost();
+		else
+			onlineResource = status.getOnlineResource();
+		symbol = getSymbol(onlineResource);
+
+		req.append(onlineResource).append(symbol).append("REQUEST=GetCapabilities&SERVICE=WCS&");
+		req.append("VERSION=").append(getVersion()).append("&EXCEPTIONS=XML");
+		return req.toString();
+    }
+
+
+
+    /**
+     * parses the data retrieved by the DescribeCoverage XML document
+     */
+    public abstract boolean parseDescribeCoverage(File f);
+
+    /**
+     * Send a DescribeCoverage request using the settings passed in the status argument.
+     * If status is null, then default settings are used.
+     * @param override
+     * @return String
+     */
+    public void describeCoverage(WCSStatus status, boolean override, ICancellable cancel) {
+       try {
+    	   WCSDescribeCoverageRequest request = createDescribeCoverageRequest(status);
+           File f = request.sendRequest(cancel);
+        	if (f!=null)
+        		parseDescribeCoverage(f);
+        } catch(Exception e) {
+        	e.printStackTrace();
+        }
+    }
+
+    /**
+     * Send a GetCoverage request using the settings passed in the status.
+     * @return String
+     */
+    public File getCoverage(WCSStatus status, ICancellable cancel) throws ServerErrorException, WCSException {
+    	try
+		{
+			//TODO:
+			//pass this buildXXXRequest to the WCSProtocolHandlerXXX: The request can depend on the WCS version.
+			WCSGetCoverageRequest request = createGetCoverageRequest(status);
+            File f = request.sendRequest(cancel);
+
+            if (f!=null && Utilities.isTextFile(f)) {
+                byte[] data = fileToBytes(f);
+
+	    		WCSException wcsEx = null;
+
+            	String exceptionMessage = parseException(data);
+                if (exceptionMessage==null)
+                {
+                 	String error = new String(data);
+                	int pos = error.indexOf("<?xml");
+                	if (pos!= -1)
+                	{
+                		String xml = error.substring(pos,error.length());
+                		exceptionMessage = parseException(xml.getBytes());
+                	}
+                    if (exceptionMessage == null)
+                    	exceptionMessage = new String(data);
+
+                }
+             	wcsEx = new WCSException(exceptionMessage);
+            	wcsEx.setWCSMessage(new String(data));
+
+            	// Since it is an error file, It must be deleted from the cache
+            	downloader.removeURL(request);
+                throw wcsEx;
+            }
+			return f;
+		}
+		catch(IOException e)
+		{
+			e.printStackTrace();
+            throw new ServerErrorException();
+		}
+    }
+    
+//    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws ServerErrorException, WMSException {
+    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws ServerErrorException {
+    	try {
+			WCSGetCoverageRequest request = createGetCoverageRequest(status);
+			return request.getURL();
+		} catch(IOException e) {
+			e.printStackTrace();
+            throw new ServerErrorException();
+		}
+    }
+    
+    /**
+     * Returns the exception message if the file is a XML instead of a image.
+     * @param file3
+     * @return
+     * @throws IOException 
+     */
+    public String getExceptionMessage(File f) throws IOException {
+    	if (f == null)
+    		return null;
+    	
+        if (Utilities.isTextFile(f)) {
+            byte[] data = fileToBytes(f);
+
+        	String exceptionMessage = parseException(data);
+            if (exceptionMessage == null) {
+             	String error = new String(data);
+            	int pos = error.indexOf("<?xml");
+            	if (pos!= -1) {
+            		String xml = error.substring(pos,error.length());
+            		exceptionMessage = parseException(xml.getBytes());
+            	}
+                if (exceptionMessage == null)
+                	exceptionMessage = new String(data);
+            }
+         	return exceptionMessage;
+        }
+        return null;
+    }
+
+    /**
+     * Parses the WCS Exception document.
+     * @param bytes, byte[]
+     * @return
+     */
+    private String parseException(byte[] data) {
+    	// TODO: a�� est� fusilat del WMS, comprovar que funciona.
+    	ArrayList errors = new ArrayList();
+        KXmlParser kxmlParser = new KXmlParser();
+        boolean end = false;
+        try
+        {
+            kxmlParser.setInput(new ByteArrayInputStream(data), encoding);
+            kxmlParser.nextTag();
+            int tag;
+            if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT )
+            {
+                kxmlParser.require(KXmlParser.START_TAG, null, ExceptionTags.EXCEPTION_ROOT);
+                tag = kxmlParser.nextTag();
+                 while(!end)
+                 {
+                     switch(tag)
+                     {
+                        case KXmlParser.START_TAG:
+                            if (kxmlParser.getName().compareTo(ExceptionTags.SERVICE_EXCEPTION)==0){
+                                String errorCode = kxmlParser.getAttributeValue("", ExceptionTags.CODE);
+                                errorCode = (errorCode != null) ? "["+errorCode+"] " : "";
+                                String errorMessage = kxmlParser.nextText();
+                                errors.add(errorCode+errorMessage);
+                            }
+                            break;
+                        case KXmlParser.END_TAG:
+                        	 if (kxmlParser.getName().compareTo(ExceptionTags.SERVICE_EXCEPTION) == 0 ||
+                        			 kxmlParser.getName().compareTo(ExceptionTags.EXCEPTION_ROOT) == 0)
+                                 end = true;
+                            break;
+
+                     }
+                     if (!end)
+                    	 tag = kxmlParser.nextTag();
+                 }
+                 //kxmlParser.require(KXmlParser.END_DOCUMENT, null, null);
+            }
+        }
+        catch(XmlPullParserException parser_ex){
+            parser_ex.printStackTrace();
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+        }
+        String message = errors.size()>0? "" : null;
+        for (int i = 0; i < errors.size(); i++) {
+            message += (String) errors.get(i)+"\n";
+        }
+        return message;
+	}	
+
+    /**
+     * Builds the GetCapabilitiesRequest according to the OGC WCS Specifications
+     * without a VERSION, to get the highest version than a WCS supports.
+     */
+    public static String buildCapabilitiesSuitableVersionRequest(String _host, String _version) {
+		int index = _host.indexOf('?');
+		
+		if (index > -1) {
+			String host = _host.substring(0, index + 1);
+			String query = _host.substring(index + 1, _host.length());
+			
+			StringTokenizer tokens = new StringTokenizer(query, "&");
+			String newQuery = "", token;
+
+			// If there is a field or a value with spaces, (and then it's on different tokens) -> unify them
+			while (tokens.hasMoreTokens()) {
+				token = tokens.nextToken().trim();
+
+				if (token.toUpperCase().compareTo("REQUEST=GETCAPABILITIES") == 0)
+					continue;
+
+				if (token.toUpperCase().compareTo("SERVICE=WCS") == 0)
+					continue;
+
+				if ((_version != null) && (_version.length() > 0)) {
+    				if (token.toUpperCase().compareTo("VERSION=" + _version) == 0)
+    					continue;
+				}
+
+				if (token.toUpperCase().compareTo("EXCEPTIONS=XML") == 0)
+					continue;
+
+				newQuery += token + "&";
+			}
+
+        	_host = host + newQuery;
+		}
+		else {
+			_host += "?";
+		}
+
+    	if ((_version != null) && (_version.compareTo("") != 0))
+    		_host += "REQUEST=GetCapabilities&SERVICE=WCS&VERSION=" + _version + "&EXCEPTIONS=XML";
+    	else
+    		_host += "REQUEST=GetCapabilities&SERVICE=WCS&EXCEPTIONS=XML";
+
+    	return stringUtils.replaceAll(_host, " ", "%20");
+    }
+
+	public ArrayList getFormats() {
+		return new ArrayList(serviceInfo.formats);
+	}       
+
+	public Hashtable getLayers() {
+		return layerPool;
+	}
+	
+	public abstract WCSDescribeCoverageRequest createDescribeCoverageRequest(WCSStatus status);
+	
+	public abstract WCSGetCoverageRequest createGetCoverageRequest(WCSStatus status);
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.remoteclient.ogc.OGCProtocolHandler#getServiceInformation()
+	 */	
+	public OGCServiceInformation getServiceInformation() {
+		return serviceInfo;
+	}	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSOperation.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.util.Hashtable;
+
+import org.gvsig.remoteclient.ogc.OGCClientOperation;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSOperation extends OGCClientOperation{ 
+	protected static Hashtable operations = new Hashtable();
+
+	static{
+		operations.put(CapabilitiesTags.GETCAPABILITIES, new WCSOperation(CapabilitiesTags.GETCAPABILITIES));
+		operations.put(CapabilitiesTags.DESCRIBECOVERAGE, new WCSOperation(CapabilitiesTags.DESCRIBECOVERAGE));
+		operations.put(CapabilitiesTags.GETCOVERAGE, new WCSOperation(CapabilitiesTags.GETCOVERAGE));
+	}
+	
+	public WCSOperation(String operationName) {
+		super(operationName);		
+	}
+
+	public WCSOperation(String operationName, String onlineResource) {
+		super(operationName, onlineResource);		
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.OGCClientOperation#getOperations()
+	 */
+	public Hashtable getOperations() {
+		return operations;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSOperation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSStatus.java	(revision 42196)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.remoteclient.RemoteClientStatus;
+/**
+ * Describes the status of a WCSclient, so it adds to the Remote client status
+ * a list of layers, a list of layer styles, the extent of the map.
+ * Provides the functionality to modify these lists.
+ * 
+ * @author jaume dom�nguez faus - jaume.dominguez@iver.es
+ */
+public class WCSStatus extends RemoteClientStatus {
+	//private String		resolution		= null; TODO do I need it?
+	private Rectangle2D	bBox			= null;
+	private String		coverageName	= null;
+	private String		onlineResource	= null;
+	private String		depth			= null;
+	private String		times			= null;
+	private String		parameters		= null;
+	private String		message			= null;
+	
+	/**
+	 * Sets the Bounding Box that is going to be requested to the server.
+	 * @param bBox, Rectangle2D containing the edges of the bounding box
+	 */
+	public void setExtent(Rectangle2D bBox) {
+		this.bBox = bBox;
+	}
+	
+	/**
+	 * Sets the name of the coverage requested to the server.
+	 * @param coverageName, String containing the name of the requesting coverage
+	 */
+	public void setCoveraName(String coverageName) {
+		this.coverageName = coverageName;
+	}
+
+	/**
+	 * Sets the parameter string. The parameter string is the part of the request 
+	 * containing the value for the axis as described in the DescribeCoverage
+	 * document.
+	 * @param parameters
+	 */
+	public void setParameters(String parameters) {
+		this.parameters = parameters;
+	}
+
+	/**
+	 * Will set the address of the host that serves the following request
+	 * @param onlineResources
+	 */
+	public void setOnlineResource(String onlineResources) {
+		this.onlineResource = onlineResources;
+	}
+	
+	/**
+	 * Sets the depth. The depth is the third dimension for the size. 
+	 * @param depth, String
+	 */
+	public void setDepth(String depth) {
+		this.depth = depth;
+	}
+
+	/**
+	 * Returns the address host that will serve the request 
+	 * @return String
+	 */
+	public String getOnlineResource() {
+		return onlineResource;
+	}
+
+	/**
+	 * Return the name of the coverage requested to the server.
+	 * @return String containing the name of the requesting coverage
+	 */
+	public String getCoverageName() {
+		return this.coverageName;
+	}
+	
+	/**
+	 * Returns the Bounding Box that is going to be requested to the server.
+	 * @return Rectangle2D containing the edges of the bounding box
+	 */
+	public Rectangle2D getExtent() {
+		return this.bBox;
+	}
+
+	/**
+	 * Returns the depth of the next request.
+	 * @return String
+	 */
+	public String getDepth() {
+		return depth;
+	}
+
+	/**
+	 * Returns the value for the time parameter that will be used in the next request
+	 * @return String
+	 */
+	public String getTime() {
+		return times;
+	}
+	
+	/**
+	 * Returns the parameter string.
+	 * The parameter string is the part of the request containing the value for the
+	 * axis as described in the DescribeCoverage.
+	 * @return String
+	 */
+	public String getParameters() {
+		return parameters;
+	}
+
+	/**
+	 * Sets the value(s) for the time that will be used in the next request. 
+	 * @param times
+	 */
+	public void setTime(String times) {
+		this.times = times;
+	}
+
+	/**
+	 * Returns the message string
+	 * @return String
+	 */
+	public String getMessage() {
+		return message;
+	}
+	
+	/**
+	 * Sets the message string 
+	 * @param message
+	 */
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSStatus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/CoverageOfferingBrief.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/CoverageOfferingBrief.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/CoverageOfferingBrief.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.IOException;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.DescribeCoverageTags;
+
+public class CoverageOfferingBrief {
+	private String name;
+	private String label;
+	private BoundaryBox		lonLatBbox;
+    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+    
+	public String getLabel() {
+		return label;
+	}
+	public void setLabel(String label) {
+		this.label = label;
+	}
+	public BoundaryBox getLonLatBbox() {
+		return lonLatBbox;
+	}
+	public void setLonLatBbox(BoundaryBox lonLatBbox) {
+		this.lonLatBbox = lonLatBbox;
+	}
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void parse(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+		boolean end = false;
+
+		parser.require(KXmlParser.START_TAG, null, "wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF);
+		currentTag = parser.next();
+
+		while (!end)
+		{
+			switch(currentTag)
+			{
+			case KXmlParser.START_TAG:
+
+				if (parser.getName().toLowerCase().compareTo(CapabilitiesTags.NAME.toLowerCase())==0) {
+					this.name = parser.nextText();
+				} else if (parser.getName().compareTo(CapabilitiesTags.WCS_LABEL)==0) {
+					this.label = parser.nextText();
+				} else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0) {
+					parser.nextTag();
+					this.lonLatBbox = new BoundaryBox();
+					this.lonLatBbox.setSrs(DescribeCoverageTags.WGS84);
+					parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+					String[][] coord = new String[2][2];
+					coord[0] = stringUtils.split(parser.nextText(), WCSCoverage.SEPARATOR);
+					parser.nextTag();
+					parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+					coord[1] = stringUtils.split(parser.nextText(), WCSCoverage.SEPARATOR);
+					this.lonLatBbox.setXmin(Double.parseDouble(coord[0][0]));
+					this.lonLatBbox.setYmin(Double.parseDouble(coord[0][1]));
+					this.lonLatBbox.setXmax(Double.parseDouble(coord[1][0]));
+					this.lonLatBbox.setYmax(Double.parseDouble(coord[1][1]));
+				}
+
+			case KXmlParser.END_TAG:
+				if (parser.getName().compareTo("wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF) == 0)
+					end = true;
+				break;
+			case KXmlParser.TEXT:
+				break;
+			}
+			currentTag = parser.next();
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/CoverageOfferingBrief.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSServiceInformation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSServiceInformation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSServiceInformation.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.util.HashMap;
+import java.util.Vector;
+
+import org.gvsig.remoteclient.ogc.OGCClientOperation;
+import org.gvsig.remoteclient.ogc.OGCServiceInformation;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSServiceInformation extends OGCServiceInformation {
+	 public String online_resource = null;
+     public String version;
+     public String name;
+     public String scope;
+     public String title;
+     public String abstr;
+     public String keywords;
+     public String fees;
+     public String operationsInfo;
+     public String personname;
+     public String organization;
+     public String function;
+     public String addresstype;
+     public String address;
+     public String place;
+     public String province;
+     public String postcode;
+     public String country;
+     public String phone;
+     public String fax;
+     public String email;
+     public Vector formats;
+     public HashMap operations; // operations that WCS supports
+
+     public WCSServiceInformation()
+     {
+         version = new String();
+         name = new String();
+         scope = new String();
+         title = new String();
+         abstr = new String();
+         keywords = new String();
+         fees = new String();
+         operationsInfo = new String();
+         personname = new String();
+         organization = new String();
+         function = new String();
+         addresstype = new String();
+         address = new String();
+         place = new String();
+         province = new String();
+         postcode = new String();
+         country = new String();
+         phone = new String();
+         fax = new String();
+         email = new String();
+         operations = new HashMap();
+     }
+
+	public OGCClientOperation createOperation(String name) {
+		return new WCSOperation(name); 
+	}
+
+	public OGCClientOperation createOperation(String name, String onlineResource) {
+		return new WCSOperation(name, onlineResource);
+	}
+
+  
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSServiceInformation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandlerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandlerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandlerFactory.java	(revision 42196)
@@ -0,0 +1,263 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.ConnectException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jaume dominguez faus
+ *
+ */
+public class WCSProtocolHandlerFactory {
+        private static final Logger logger = LoggerFactory.getLogger(WCSProtocolHandlerFactory.class);
+
+	public org.gvsig.remoteclient.wcs.WCSProtocolHandler wCSProtocolHandler;
+
+	private static ArrayList supportedVersions = new ArrayList();
+
+	static {
+		supportedVersions.add("1.0.0");
+	}
+
+	/**
+	 * M�todo que dada una respuesta de getCapabilities y un iterador sobre una
+	 * coleccion de WCSClient's ordenada descendentemente devuelve el cliente
+	 * cuya version es igual o inmediatamente inferior
+	 *
+	 * @param caps Capabilities con la respuesta del servidor
+	 * @param clients Iterador de conjunto ordenado descendientemente
+	 *
+	 * @return cliente cuya version es igual o inmediatamente inferior
+	 * @throws IllegalAccessException
+	 * @throws InstantiationException
+	 *
+	 */
+	private static String getDriverVersion(String version, Iterator clients) throws InstantiationException, IllegalAccessException {
+		while (clients.hasNext()) {
+			String clientVersion = (String)clients.next();
+			int ret = version.compareTo(clientVersion);
+
+			if (ret >= 0) {
+				return clientVersion;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Establece la versi�n con la que se comunicar� con el servidor y devuelve
+	 * el objeto Capabilities obtenido con dicha versi�n
+	 *
+	 * @param host maquina con la que se negocia
+	 *
+	 * @return instancia de un cliente capaz de negociar con el host que se
+	 *         pasa como par�metro
+	 */
+	public static WCSProtocolHandler negotiate(String host) throws ConnectException, IOException {
+
+		if (supportedVersions.size() == 0)
+		{
+			return null;
+		}
+
+		try
+		{
+			String highestVersionSupportedByServer  = getSuitableWCSVersion(host,"");
+			if (supportedVersions.contains(highestVersionSupportedByServer))
+			{
+				// we support the highest version supported by the server
+				// this is the best case
+				return createVersionDriver(highestVersionSupportedByServer);
+			}
+			else
+			{
+				// in case we dont support the highest version from the server
+				// we start the negotiation process in which we have to get the higest version
+				// the WCS supports and we are able to read.
+				Iterator iVersion = supportedVersions.iterator();
+				String wcsVersion;
+				String gvSIGVersion;
+
+				while (iVersion.hasNext()) {
+					gvSIGVersion = (String)iVersion.next();
+					wcsVersion = getSuitableWCSVersion(host,gvSIGVersion);
+					//TODO:
+					//compare with the version returned by the WMS!!!!!
+					// send GetCapabilities and read the version to compare.
+					int res = wcsVersion.compareTo(gvSIGVersion);
+
+					if (res == 0) { //Si es la misma que nuestra version
+						return createVersionDriver(gvSIGVersion);
+					} else if (res > 0) { //Si es mayor que nuestra version
+						throw new Exception("Server Version too high: " + wcsVersion);
+					} else { //Si es menor que nuestra version
+						//Obtenemos la primera version menor o igual que tengamos
+						String lowerVersion = WCSProtocolHandlerFactory.getDriverVersion(wcsVersion, iVersion);
+
+						if (lowerVersion == null) { //Si no hay ninguna
+							throw new Exception("Lowest server version is " + wcsVersion);
+						} else {
+							if (lowerVersion.equals(wcsVersion)) {
+								return createVersionDriver(lowerVersion);
+							} else { //Si hay una version menor que la que retorno el servidor
+								//iV = lower;
+							}
+						}
+					}
+				}
+			}//case we had to start the negotiation process.
+			return null; // if it did not find any suitable version.
+		}
+		catch(ConnectException conEx)
+		{
+			throw conEx;
+		}
+		catch(IOException ioEx)
+		{
+			throw ioEx;
+		}
+		catch(Exception e)
+		{
+//			e.printStackTrace();
+			return null;
+		}
+	}
+
+	/**
+	 * Sends a GetCapabilities to the WCS server to get the version
+	 * if the version parameter is null, the WCS will return the highest version supported
+	 * if not it will return the lower highest version than the one requested.
+	 * @param host
+	 * @param version
+	 * @return suitable version supported by the server
+	 */
+     private static String getSuitableWCSVersion(String host, String _version) throws ConnectException, IOException
+     {
+         int sizes[] = new int[] { 1024, 1024*10, 1024*50, 1024*100 };
+         XmlPullParserException  xmlEx = null;
+         for( int i=0; i<sizes.length; i++ ) {
+             String version;
+             try {
+                 version = getSuitableWCSVersion(host, _version, sizes[i]);
+                 return version;
+             } catch (XmlPullParserException ex) {
+                 xmlEx = ex;
+                 // Try with other size
+             }
+         }
+         logger.warn("Can't determine server version",xmlEx);
+         return "";
+     }
+             
+	private static String getSuitableWCSVersion(String host, String _version, int size) throws ConnectException, IOException, XmlPullParserException {
+		String request = WCSProtocolHandler.buildCapabilitiesSuitableVersionRequest(host, _version);
+		String version = new String();
+		StringReader reader = null;
+		//InputStreamReader reader;
+		//InputStream is = null;
+		DataInputStream dis = null;
+		try {
+			URL url = new URL(request);
+			byte[] buffer = new byte[size];//new byte[1024*256];
+//			is = url.openStream();
+//			reader = new InputStreamReader(is);
+			//int numberOfBytes = is.read(buffer);
+			//String readed = new String(buffer);
+			dis = new DataInputStream(url.openStream());
+			dis.readFully(buffer);
+
+			reader = new StringReader(new String(buffer));
+			KXmlParser kxmlParser = null;
+			kxmlParser = new KXmlParser();
+			kxmlParser.setInput(reader);
+			kxmlParser.nextTag();
+			if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT ) {
+				if ((kxmlParser.getName().compareTo(CapabilitiesTags.WCS_CAPABILITIES_ROOT1_0_0)==0)) {
+					version = kxmlParser.getAttributeValue("", CapabilitiesTags.VERSION);
+				}
+			}
+			// do not forget to close the Stream.
+			reader.close();
+			dis.close();
+			return version;
+		} catch(ConnectException conEx) {
+			throw new ConnectException(conEx.getMessage());
+		} catch(IOException ioEx) {
+			throw new IOException(ioEx.getMessage());
+		} catch(XmlPullParserException xmlEx) {
+                        throw  xmlEx;
+//			xmlEx.printStackTrace();
+//			return "";
+		} finally {
+			if (reader != null) {
+				try {
+					reader.close();
+				} catch(Exception ex) {
+					ex.printStackTrace();
+				}
+			} if (dis != null) {
+				try {
+					dis.close();
+				} catch(Exception ex){
+					ex.printStackTrace();
+				}
+			}
+		}
+	}
+
+	/**
+	 * It creates an instance of a WCSDriver class.
+	 *
+	 * @param String, with the version of the driver to be created
+	 * @return WCSDriver.
+	 */
+	private static WCSProtocolHandler createVersionDriver(String version) {
+		try {
+			Class driver;
+			version = version.replace('.', '_');
+			driver = Class.forName("org.gvsig.remoteclient.wcs.wcs_"+version+".WCSProtocolHandler" + version);
+			return (WCSProtocolHandler)driver.newInstance();
+		} catch (Exception e) {
+			e.printStackTrace();
+			//throw new Exception("WCSDriverFactory. Unknown driver version " + e);
+			return null;
+		}
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandlerFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSCoverage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSCoverage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSCoverage.java	(revision 42196)
@@ -0,0 +1,393 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.remoteclient.ILayer;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+
+/**
+ * Describes a coverage in a WCS server.
+ *
+ * @author jaume dominguez faus - jaume.domingue@iver.es
+ *
+ */
+public abstract class WCSCoverage implements ILayer{
+	public static final String SEPARATOR = " +"; // separator used to split list of values, usually is just a space
+    private	String			name;
+    private String			title;
+    private String			_abstract;
+    private Hashtable		bBoxes = new Hashtable();
+	private BoundaryBox		lonLatBbox;
+	public  RectifiedGrid	rg;
+	private ArrayList 		timePositions = new ArrayList();
+	public  String 			timePeriod;
+	private String 			rangeSetName;
+	private String 			rangeSetLabel;
+	public  Hashtable 		axisPool = new Hashtable();
+	private String 			nativeSRS;
+	private ArrayList 		supportedSRSs = new ArrayList();
+	private ArrayList		interpolationMethods;
+	private String 			nativeFormat;
+	private ArrayList 		formats = new ArrayList();
+
+	public ArrayList getTimePositions() {
+		return timePositions;
+	}
+
+	public void addTimePosition(String timeExpr) {
+		if (timePositions == null)
+			timePositions = new ArrayList();
+		timePositions.add(timeExpr);
+	}
+
+	public ArrayList getFormats() {
+		return formats;
+	}
+
+	public void addFormat(String format) {
+		formats.add(format);
+	}
+
+    public void setNativeFormat(String nativeFormat) {
+    	this.nativeFormat = nativeFormat;
+    }
+
+    public String getNativeFormat() {
+    	return nativeFormat;
+    }
+
+	public String getNativeSRS() {
+		return nativeSRS;
+	}
+
+	public void setNativeSRS(String nativeSRS) {
+		this.nativeSRS = nativeSRS;
+	}
+
+	public ArrayList getSRSs() {
+		return supportedSRSs;
+	}
+
+	public void addSRSs(String srs) {
+		supportedSRSs.add(srs);
+	}
+
+	public String getRangeSetLabel() {
+		return rangeSetLabel;
+	}
+
+	public void setRangeSetLabel(String rangeSetLabel) {
+		this.rangeSetLabel = rangeSetLabel;
+	}
+
+	public String getRangeSetName() {
+		return rangeSetName;
+	}
+
+	public void setRangeSetName(String rangeSetName) {
+		this.rangeSetName = rangeSetName;
+	}
+
+	/* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#getName()
+     */
+    public String getName() {
+        return name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#setName(java.lang.String)
+     */
+    public void setName(String _name) {
+        name = _name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#setTitle(java.lang.String)
+     */
+    public void setTitle(String _title) {
+        title = _title;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#getTitle()
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#getAbstract()
+     */
+    public String getAbstract() {
+        return _abstract;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#setAbstract(java.lang.String)
+     */
+    public void setAbstract(String _abstract) {
+     this._abstract = _abstract;
+    }
+
+    public void addBBox(BoundaryBox bBox) {
+    	bBoxes.put(bBox.getSrs(), bBox);
+    }
+
+    public ArrayList getAllSrs() {
+    	ArrayList mySrs = new ArrayList();
+    	mySrs.addAll(supportedSRSs);
+    	if (!mySrs.contains(nativeSRS))
+    		mySrs.add(nativeSRS);
+    	return mySrs;
+    }
+    /**
+     * <p>returns the bbox with that id in the Bboxes vector</p>
+     * @param id
+     */
+    public BoundaryBox getBbox(String id) {
+    	if ((id.compareToIgnoreCase( CapabilitiesTags.EPSG_4326 )==0)
+    		||(id.compareToIgnoreCase( CapabilitiesTags.CRS_84)==0))
+    	{
+    		if (lonLatBbox != null)
+    		return lonLatBbox;
+    	}
+
+        return (BoundaryBox)bBoxes.get(id);
+    }
+
+    public BoundaryBox getLatLonBox() {
+        return lonLatBbox;
+    }
+
+    public void setLonLatBox(BoundaryBox box) {
+        lonLatBbox = box;
+    }
+
+    public void addInterpolationMethod(String method) {
+    	if (interpolationMethods==null) interpolationMethods = new ArrayList();
+    	interpolationMethods.add(method);
+    }
+
+    public ArrayList getInterpolationMethods() {
+    	return interpolationMethods;
+    }
+    /**
+     * Parses the fragment of the XML document that describes this layer (or coverage)
+     * @param parser
+     * @throws IOException
+     * @throws XmlPullParserException
+     */
+    public abstract void parse(KXmlParser parser) throws XmlPullParserException, IOException;
+
+    /**
+     * Gets the RectifiedGrid structure
+     * @return
+     */
+    public RectifiedGrid getRectifiedGrid() {
+    	return rg;
+    }
+    
+    /**
+     * Inner class describing the Rectified Grid of this coverage.
+     *
+     * @author jaume dominguez faus - jaume.dominguez@iver.es
+     */
+    public class RectifiedGrid {
+    	private int	       dimensions;
+    	private String[]   axisNames;
+    	private int[][]    lowGridEnvelopLimits;
+    	private int[][]    highGridEnvelopLimits;
+    	private double[]   origins;
+    	private double[][] offsetVector;
+
+		public RectifiedGrid(int dimensions) {
+			this.dimensions = dimensions;
+		}
+
+		public void addAxisName(String axisName) {
+			if (axisNames == null) {
+				axisNames = new String[1];
+				axisNames[0] = axisName;
+			} else {
+				String[] aux = axisNames;
+				axisNames = new String[axisNames.length+1];
+				for (int i = 0; i < aux.length; i++) {
+					axisNames[i] = aux[i];
+				}
+				axisNames[axisNames.length-1] = axisName;
+			}
+		}
+
+		public String[] getAxisNames() {
+			return axisNames;
+		}
+
+		public void addLowGridEnvelopLimit(int[] lowLimit) {
+			if (lowGridEnvelopLimits == null) {
+				lowGridEnvelopLimits = new int[1][1];
+				lowGridEnvelopLimits[0] = lowLimit;
+			} else {
+				int[][] aux = lowGridEnvelopLimits;
+				lowGridEnvelopLimits = new int[lowGridEnvelopLimits.length+1][1];
+				for (int i = 0; i < aux.length; i++) {
+					lowGridEnvelopLimits[i] = aux[i];
+				}
+				lowGridEnvelopLimits[lowGridEnvelopLimits.length-1] = lowLimit;
+			}
+		}
+
+		public int[][] getLowGridEnvelopLimits() {
+			return lowGridEnvelopLimits;
+		}
+
+		public void addHighGridEnvelopLimit(int[] highLimit) {
+			if (highGridEnvelopLimits == null) {
+				highGridEnvelopLimits = new int[1][1];
+				highGridEnvelopLimits[0] = highLimit;
+			} else {
+				int[][] aux = highGridEnvelopLimits;
+				highGridEnvelopLimits = new int[highGridEnvelopLimits.length+1][1];
+				for (int i = 0; i < aux.length; i++) {
+					highGridEnvelopLimits[i] = aux[i];
+				}
+				highGridEnvelopLimits[highGridEnvelopLimits.length-1] = highLimit;
+			}
+		}
+
+		public int[][] getHighGridEnvelopLimits() {
+			return highGridEnvelopLimits;
+		}
+
+		public void setOrigin(double[] _origins) {
+			origins = _origins;
+		}
+
+		public double[] getOrigins() {
+			return origins;
+		}
+
+		public void addToOffsetVector(double[] _offsetVector) {
+			if (offsetVector == null) {
+				offsetVector = new double[1][1];
+				offsetVector[0] = _offsetVector;
+			} else {
+				double[][] aux = offsetVector;
+				offsetVector = new double[offsetVector.length+1][1];
+				for (int i = 0; i < aux.length; i++) {
+					offsetVector[i] = aux[i];
+				}
+				offsetVector[offsetVector.length-1] = _offsetVector;
+			}
+		}
+
+		public double[][] getOffsetVector(){
+			return offsetVector;
+		}
+
+		public int getDimensionCount() {
+			return dimensions;
+		}
+    }
+
+    /**
+     * Inner class describing the Axis Description of this coverage.
+     *
+     * @author jaume dominguez faus - jaume.dominguez@iver.es
+     */
+    public class AxisDescription {
+    	private String _name;
+    	private String label;
+    	private ArrayList singleValues = new ArrayList();
+    	private String interval;
+    	private String defaultValue;
+
+		public String getDefaultValue() {
+			return defaultValue;
+		}
+
+		public void setDefaultValue(String defaultValue) {
+			this.defaultValue = defaultValue;
+		}
+
+		public String getInterval() {
+			return interval;
+		}
+
+		public void setInterval(String interval) {
+			this.interval = interval;
+		}
+
+		public String getLabel() {
+			return label;
+		}
+		public void setLabel(String label) {
+			this.label = label;
+		}
+
+		public String getName() {
+			return _name;
+		}
+
+		public void setName(String name) {
+			this._name = name;
+		}
+
+		public ArrayList getSingleValues() {
+			return singleValues;
+		}
+
+		public void addSingleValues(String singleValue) {
+			this.singleValues.add(singleValue);
+		}
+    }
+
+	public double getResX() {
+		if (rg.offsetVector== null)
+			return -1;
+		return Math.abs(rg.offsetVector[0][0]);
+	}
+
+	public double getResY() {
+		if (rg.offsetVector== null)
+			return -1;
+
+		return Math.abs(rg.offsetVector[1][1]);
+	}
+
+	public Hashtable getBBoxes() {
+		if (bBoxes == null) return new Hashtable();
+		else return bBoxes;
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSCoverage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSGetCoverageRequest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSGetCoverageRequest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSGetCoverageRequest.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.request;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.Utilities;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class WCSGetCoverageRequest extends WCSRequest{
+
+	public WCSGetCoverageRequest(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getHttpPostRequest(java.lang.String)
+	 */
+	protected String getHttpPostRequest(String onlineResource) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getOperationCode()
+	 */
+	protected String getOperationName() {
+		return CapabilitiesTags.GETCOVERAGE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getSchemaLocation()
+	 */
+	protected String getSchemaLocation() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getTempFilePrefix()
+	 */
+	protected String getTempFilePrefix() {
+		return "wcsGetCoverage" + System.currentTimeMillis();
+		//return "wcs_getCoverage.xml";
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSGetCoverageRequest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSDescribeCoverageRequest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSDescribeCoverageRequest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSDescribeCoverageRequest.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.request;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class WCSDescribeCoverageRequest extends WCSRequest{
+
+	public WCSDescribeCoverageRequest(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getHttpPostRequest(java.lang.String)
+	 */
+	protected String getHttpPostRequest(String onlineResource) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getOperationCode()
+	 */
+	protected String getOperationName() {
+		return CapabilitiesTags.DESCRIBECOVERAGE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getSchemaLocation()
+	 */
+	protected String getSchemaLocation() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getTempFilePrefix()
+	 */
+	protected String getTempFilePrefix() {
+		return "wcs_describeCoverage.xml";
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSDescribeCoverageRequest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSRequest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSRequest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSRequest.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.request;
+
+import org.gvsig.remoteclient.ogc.request.OGCRequest;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class WCSRequest extends OGCRequest{
+	protected WCSStatus status = null;
+
+	public WCSRequest(WCSStatus status, WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);	
+		this.status = status;
+	}
+
+	protected String getPartialQuery(WCSStatus status)
+	{
+		StringBuffer req = new StringBuffer();
+		req.append( (status.getTime() != null) ? "&TIME=" + status.getTime() : "" )
+		.append( "&COVERAGE=" + status.getCoverageName())
+		.append( "&CRS=" + status.getSrs())
+		.append( "&FORMAT=" + status.getFormat() )
+		.append( "&HEIGHT=" + status.getHeight())
+		.append( "&WIDTH=" + status.getWidth())
+		.append( (status.getDepth() != null) ? "&DEPTH=" + status.getDepth() : "" )
+		.append( "&BBOX=" + status.getExtent().getMinX() + "," )
+		.append( status.getExtent().getMinY() + ",")
+		.append( status.getExtent().getMaxX() + ",")
+		.append( status.getExtent().getMaxY())
+		.append( (status.getParameters() != null) ? "&" + status.getParameters() : "");
+
+		return req.toString();
+	}
+}
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSRequest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java	(revision 42196)
@@ -0,0 +1,709 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0;
+
+
+import java.io.IOException;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.gvsig.remoteclient.utils.DescribeCoverageTags;
+import org.gvsig.remoteclient.wcs.WCSCoverage;
+
+/**
+ * @author jaume
+ *
+ */
+public class WCSCoverage1_0_0 extends WCSCoverage{
+	String axisDescriptionName;
+
+    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+    
+	/* (non-Javadoc)
+     * @see org.gvsig.remoteClient.wcs.WCSLayer#parse(org.kxml2.io.KXmlParser)
+     */
+    public void parse(KXmlParser parser) throws XmlPullParserException, IOException {
+        int currentTag;
+        String value;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
+                    {
+                        value = parser.nextText();
+                        if (value != null) setName(value);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL)==0){
+                        value = parser.nextText();
+                        if (value != null) setTitle(value);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0){
+                    	BoundaryBox bBox = parseLonLatGMLEnvelope(parser);
+                        bBox.setSrs(DescribeCoverageTags.WGS84);
+                        addBBox(bBox);
+                        setLonLatBox(bBox);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0) {
+                    	parseDomainSet(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0) {
+                    	parseRangeSet(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0) {
+                    	parseSupportedCRSS(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_FORMATS) == 0) {
+                    	setNativeFormat(parser.getAttributeValue("", DescribeCoverageTags.NATIVE_FORMAT));
+                    	parser.nextTag();
+                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.FORMATS);
+                    	while (parser.getName().compareTo(DescribeCoverageTags.FORMATS) == 0) {
+                    		String[] formats = stringUtils.split(parser.nextText(), SEPARATOR);
+                    		for (int i = 0; i < formats.length; i++) {
+                    			addFormat(formats[i]);
+                    		}
+                    		parser.nextTag();
+                    	}
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0) {
+                    	boolean bInterpolationsEnd = false;
+                    	int interpolationsTag = parser.next();
+                    	while (!bInterpolationsEnd) {
+                    		switch(interpolationsTag) {
+	                    		case KXmlParser.START_TAG:
+	                    			if (parser.getName().compareTo(DescribeCoverageTags.INTERPOLATION_METHOD)==0) {
+	                    				addInterpolationMethod(parser.nextText());
+	                    			}
+	                    			break;
+	                    		case KXmlParser.END_TAG:
+	                    			if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0)
+	                    				bInterpolationsEnd = true;
+	                    			break;
+	                    		case KXmlParser.TEXT:
+	                    			if (parser.getName()!=null)
+	                    				System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+	                    			break;
+                    		}
+                    		interpolationsTag = parser.next();
+                    	}
+                    } else {
+                    	if (!parser.getName().equals("rangeSet")) // just a patch to avoid too much messages
+                    		System.out.println("Skiped "+parser.getName());
+                    }
+
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+    }
+
+    private void parseSupportedCRSS(KXmlParser parser) throws XmlPullParserException, IOException {
+    	int currentTag;
+    	boolean end = false;
+
+    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SUPPORTED_CRSS);
+    	currentTag = parser.next();
+
+    	while (!end)
+    	{
+    		switch(currentTag)
+    		{
+	    		case KXmlParser.START_TAG:
+	    			if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_RESPONSE_CRSS)==0) {
+	    				String[] values = stringUtils.split(parser.nextText(), SEPARATOR);
+	    				for (int i = 0; i < values.length; i++) {
+							addSRSs(values[i]);
+						}
+	    			}
+	    			else if (parser.getName().compareTo(DescribeCoverageTags.NATIVE_CRS) == 0) {
+	    				setNativeSRS(parser.nextText());
+	    			} else if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_CRSS) == 0) {
+	    				// TODO
+                    	System.out.println("Skiped "+parser.getName());
+	    			} else if (parser.getName().compareTo(DescribeCoverageTags.RESPONSE_CRSS) == 0) {
+	    				// TODO
+                    	System.out.println("Skiped "+parser.getName());
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+	    			}
+
+	    			break;
+	    		case KXmlParser.END_TAG:
+	    			if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0)
+	    				return;//end = true;
+	    			break;
+	    		case KXmlParser.TEXT:
+	    			if (parser.getName()!=null)
+	    				System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+	    			break;
+    		}
+    		currentTag = parser.next();
+    	}
+    }
+
+	private void parseRangeSet(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RANGESET);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
+                    	setRangeSetName(parser.nextText());
+                    else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0)
+                    	setRangeSetLabel(parser.nextText());
+                    else if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0) {
+                    	// Reading all axe description
+                    	int axisTag = parser.nextTag();
+                    	boolean endAxe = false;
+                    	while (!endAxe) {
+                            switch(axisTag)
+                            {
+                               case KXmlParser.START_TAG:
+                            	   if (parser.getName().compareTo(DescribeCoverageTags.AXISDESCRIPTION)==0) {
+                            		   AxisDescription as = parseAxisDescription(parser);
+                            		   axisPool.put(as.getName(), as);
+                            		   axisDescriptionName = as.getName();
+                            	   }
+                            	   break;
+                               case KXmlParser.END_TAG:
+                                   if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
+                                	   endAxe = true;
+                                   break;
+                               case KXmlParser.TEXT:
+                            	   if (parser.getName()!=null)
+                            		   System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                            	   break;
+                            }
+                            axisTag = parser.next();
+                    	}
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+	}
+
+	private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
+        AxisDescription as = new AxisDescription();
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                	if (parser.getName().compareTo(DescribeCoverageTags.NAME) == 0) {
+                		as.setName(parser.nextText());
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) {
+                		as.setLabel(parser.nextText());
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) {
+                		int valuesTag = parser.nextTag();
+                		boolean valuesEnd = false;
+                		while (!valuesEnd) {
+                			switch(valuesTag)	{
+	                			case KXmlParser.START_TAG:
+	                				if (parser.getName().compareTo(DescribeCoverageTags.SINGLEVALUE) == 0) {
+	                					as.addSingleValues(parser.nextText());
+	                				} else if (parser.getName().compareTo(DescribeCoverageTags.INTERVAL) == 0) {
+	                					as.setInterval(parser.nextText());
+	                				} else if (parser.getName().compareTo(DescribeCoverageTags.DEFAULT) == 0) {
+	                					as.setDefaultValue(parser.nextText());
+	                				}
+	                				break;
+	                			case KXmlParser.END_TAG:
+	                				if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0)
+	                					valuesEnd = true;
+	                				break;
+	                			case KXmlParser.TEXT:
+	                				if (parser.getName()!=null)
+	                					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+	                				break;
+	                			}
+                			valuesTag = parser.next();
+                		}
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.NULLVALUES)==0) {
+                		// TODO
+                		System.err.println("Missing NULL VALUE PARSING on WCS 1.0.0 Client");
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                	}
+
+                	break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+        return as;
+	}
+
+	private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN)==0)
+                    {
+                    	parseSpatialDomain(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN)==0) {
+                    	parseTemporalDomain(parser);
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+	}
+
+	private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                	if (parser.getName().compareTo(DescribeCoverageTags.GML_TIMEPOSITION) == 0) {
+                		addTimePosition(parser.nextText());
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.TIMEPERIOD) == 0) {
+                		boolean timePeriodEnd = false;
+                		int timePeriodTag = parser.next();
+                		String[] myTimePeriod = new String[3];
+                		while (!timePeriodEnd) {
+                			switch (timePeriodTag) {
+                			case KXmlParser.START_TAG:
+                				if (parser.getName().compareTo(DescribeCoverageTags.BEGINPOSITION) == 0) {
+                					myTimePeriod[0] = parser.nextText();
+                				} else if (parser.getName().compareTo(DescribeCoverageTags.ENDPOSITION) == 0) {
+                					myTimePeriod[1] = parser.nextText();
+                				} else if (parser.getName().compareTo(DescribeCoverageTags.TIMERESOLUTION) == 0) {
+                					myTimePeriod[2] = parser.nextText();
+                                } else {
+                                	System.out.println("Unrecognized "+parser.getName());
+                				}
+                				break;
+                			case KXmlParser.END_TAG:
+                				if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
+                					end = true;
+                				break;
+                			case KXmlParser.TEXT:
+                				if (parser.getName()!=null)
+                					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                				break;
+                			}
+                			timePeriodTag = parser.next();
+                		}
+                		super.timePeriod = "";
+                		for (int i = 0; i < myTimePeriod.length-1; i++) {
+                			if (myTimePeriod[i]!=null) {
+                				super.timePeriod += myTimePeriod[i];
+                			}
+                			if (myTimePeriod[i+1]!=null) {
+                				super.timePeriod += "/";
+                			}
+						}
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                	}
+                	break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+	}
+
+	private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE)==0) {
+                    	BoundaryBox bBox = parseGMLEnvelope(parser);
+                    	addBBox(bBox);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.GRID)==0) {
+                    	parseGrid(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID)==0) {
+                    	parseRectifiedGrid(parser);
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN) == 0)
+                        return;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+ 	}
+
+	private void parseGrid(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+		String value;
+		boolean end = false;
+		parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GRID);
+		rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
+
+		currentTag = parser.next();
+
+		while (!end)
+		{
+			switch(currentTag)	{
+			case KXmlParser.START_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
+					parser.nextTag();
+					if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
+						boolean gridEnd = false;
+						int gridCurrentTag = parser.next();
+						while (!gridEnd){
+							switch (gridCurrentTag) {
+							case KXmlParser.START_TAG:
+
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
+									value = parser.nextText();
+									String[] ss = stringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addLowGridEnvelopLimit(limits);
+								} else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
+									value = parser.nextText();
+									String[] ss = stringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addHighGridEnvelopLimit(limits);
+								} else {
+									System.out.println("Unrecognized "+parser.getName());
+								}
+								break;
+							case KXmlParser.END_TAG:
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
+									gridEnd = true;
+								break;
+							case KXmlParser.TEXT:
+								if (parser.getName()!=null)
+									System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+								break;
+							}
+							gridCurrentTag = parser.next();
+						}
+					}
+				} else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
+					rg.addAxisName(parser.nextText());
+				} else {
+					System.out.println("Unrecognized "+parser.getName());
+				}
+				break;
+			case KXmlParser.END_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.GRID) == 0)
+					return;//end = true;
+				break;
+			case KXmlParser.TEXT:
+				if (parser.getName()!=null)
+					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+				break;
+			}
+			currentTag = parser.next();
+		}
+	}
+
+	private void parseRectifiedGrid(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+		String value;
+		boolean end = false;
+		parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RECTIFIEDGRID);
+		rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
+
+		// TODO maybe this is wrong
+		rg.addToOffsetVector(new double[] { -1, -1});
+		rg.addToOffsetVector(new double[] { -1, -1});
+
+		currentTag = parser.next();
+
+		while (!end)
+		{
+			switch(currentTag)
+			{
+			case KXmlParser.START_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
+					parser.nextTag();
+					if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
+						boolean gridEnd = false;
+						int gridCurrentTag = parser.next();
+						while (!gridEnd)
+						{
+							switch (gridCurrentTag) {
+							case KXmlParser.START_TAG:
+
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
+									value = parser.nextText();
+									String[] ss = stringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addLowGridEnvelopLimit(limits);
+								} else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
+									value = parser.nextText();
+									String[] ss = stringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addHighGridEnvelopLimit(limits);
+								} else {
+									System.out.println("Unrecognized "+parser.getName());
+								}
+								break;
+							case KXmlParser.END_TAG:
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
+									gridEnd = true;
+								break;
+							case KXmlParser.TEXT:
+								if (parser.getName()!=null)
+									System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+								break;
+							}
+							gridCurrentTag = parser.next();
+						}
+					}
+				} else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
+					rg.addAxisName(parser.nextText());
+				} else if (parser.getName().compareTo(DescribeCoverageTags.GML_ORIGIN)==0) {
+					parser.nextTag();
+					if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
+						value = parser.nextText();
+						String[] ss = stringUtils.split(value, SEPARATOR);
+						double[] ori = new double[ss.length];
+						for (int i = 0; i < ori.length; i++) {
+							ori[i] = Double.parseDouble(ss[i]);
+						}
+						rg.setOrigin(ori);
+					}
+				} else if (parser.getName().compareTo(DescribeCoverageTags.OFFSETVECTOR) == 0) {
+					value = parser.nextText();
+					String[] ss = stringUtils.split(value, SEPARATOR);
+					double[] offset = new double[ss.length];
+					for (int i = 0; i < offset.length; i++) {
+						offset[i] = Double.parseDouble(ss[i]);
+					}
+					rg.addToOffsetVector(offset);
+				} else {
+					System.out.println("Unrecognized "+parser.getName());
+				}
+				break;
+			case KXmlParser.END_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID) == 0)
+					end = true;
+				break;
+			case KXmlParser.TEXT:
+				if (parser.getName()!=null)
+					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+				break;
+			}
+			currentTag = parser.next();
+		}
+	}
+
+
+	private BoundaryBox parseLonLatGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
+		BoundaryBox bBox = new BoundaryBox();
+		int currentTag;
+        String value;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
+                    	bBox.setSrs(DescribeCoverageTags.WGS84);
+                    	String[] coordinates;
+                    	double minx, miny, maxx, maxy;
+                    	value = parser.nextText();
+                    	coordinates = stringUtils.split(value, SEPARATOR);
+                    	minx = Double.parseDouble(coordinates[0]);
+                    	miny = Double.parseDouble(coordinates[1]);
+
+                    	parser.nextTag();
+
+                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+                    	value = parser.nextText();
+                    	coordinates = stringUtils.split(value, SEPARATOR);
+                    	maxx = Double.parseDouble(coordinates[0]);
+                    	maxy = Double.parseDouble(coordinates[1]);
+
+                    	bBox.setXmin(minx);
+                    	bBox.setYmin(miny);
+                    	bBox.setXmax(maxx);
+                    	bBox.setYmax(maxy);
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+        return bBox;
+	}
+
+	private BoundaryBox parseGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
+		BoundaryBox bBox = new BoundaryBox();
+		int currentTag;
+        String value;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
+        bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                	if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
+
+                    	String[] coordinates;
+                    	double minx, miny, maxx, maxy;
+                    	value = parser.nextText();
+                    	coordinates = stringUtils.split(value, SEPARATOR);
+                    	minx = Double.parseDouble(coordinates[0]);
+                    	miny = Double.parseDouble(coordinates[1]);
+
+                    	parser.nextTag();
+                    	//parser.nextTag();
+                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+                    	value = parser.nextText();
+                    	coordinates = stringUtils.split(value, SEPARATOR);
+                    	maxx = Double.parseDouble(coordinates[0]);
+                    	maxy = Double.parseDouble(coordinates[1]);
+
+                    	bBox.setXmin(minx);
+                    	bBox.setYmin(miny);
+                    	bBox.setXmax(maxx);
+                    	bBox.setYmax(maxy);
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+
+        return bBox;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSGetCoverageRequest1_0_0.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSGetCoverageRequest1_0_0.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSGetCoverageRequest1_0_0.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0.request;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSGetCoverageRequest1_0_0 extends WCSGetCoverageRequest{
+   
+    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+    
+	public WCSGetCoverageRequest1_0_0(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.ogc.request.OGCRequest#getHttpGetRequest(java.lang.String)
+	 */
+	protected String getHttpGetRequest(String onlineResource) {
+		StringBuffer req = new StringBuffer();
+		req.append(onlineResource);
+		req.append("service=WCS&version=").append(protocolHandler.getVersion()).append("&request=GetCoverage");
+		req.append(getPartialQuery(status));
+		if (status.getExceptionFormat() != null) {
+			req.append("&EXCEPTIONS=" + status.getExceptionFormat());
+		} else {
+			req.append("&EXCEPTIONS=XML");
+		}
+		return req.toString();
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSGetCoverageRequest1_0_0.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSDescribeCoverageRequest1_0_0.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSDescribeCoverageRequest1_0_0.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSDescribeCoverageRequest1_0_0.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0.request;
+
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSDescribeCoverageRequest1_0_0 extends WCSDescribeCoverageRequest{
+
+	public WCSDescribeCoverageRequest1_0_0(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);	
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.ogc.request.OGCRequest#getHttpGetRequest(java.lang.String)
+	 */
+	protected String getHttpGetRequest(String onlineResource) {
+		StringBuffer req = new StringBuffer();
+		req.append(onlineResource).append("REQUEST=DescribeCoverage&SERVICE=WCS&");
+		if (status != null && status.getCoverageName()!= null)
+			req.append("COVERAGE="+status.getCoverageName()+"&");
+		req.append("VERSION=").append(protocolHandler.getVersion()).append("&EXCEPTIONS=XML");
+		return req.toString();
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSDescribeCoverageRequest1_0_0.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java	(revision 42196)
@@ -0,0 +1,409 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.DescribeCoverageTags;
+import org.gvsig.remoteclient.utils.EncodingXMLParser;
+import org.gvsig.remoteclient.wcs.CoverageOfferingBrief;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
+import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
+import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSDescribeCoverageRequest1_0_0;
+import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSGetCoverageRequest1_0_0;
+
+/**
+ * @author jaume
+ *
+ */
+public class WCSProtocolHandler1_0_0 extends WCSProtocolHandler{
+
+	public WCSProtocolHandler1_0_0() {
+		super();
+		this.version = "1.0.0";
+		this.name = "WCS1.0.0";
+	}
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
+     */
+    /**
+     * <p>Parse the xml data retrieved from the WCS, it will parse the WCS Capabilities</p>
+     *
+     */
+    public boolean parseCapabilities(File f)
+    {
+    	int tag;
+    	EncodingXMLParser parser = null;
+      	parser = new EncodingXMLParser();
+    	try
+    	{
+    		parser.setInput(f);
+    		parser.nextTag();
+
+            if ( parser.getEventType() != KXmlParser.END_DOCUMENT )
+            {
+                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CAPABILITIES_ROOT1_0_0);
+                tag = parser.nextTag();
+                while(tag != KXmlParser.END_DOCUMENT)
+                {
+                    switch(tag)
+                    {
+                        case KXmlParser.START_TAG:
+                            if (parser.getName().compareTo(CapabilitiesTags.SERVICE)==0)
+                            {
+                                parseServiceTag(parser);
+                            }
+                            else if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY)==0)
+                            {
+                                parseCapabilityTag(parser);
+                            }
+                            else if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA)==0)
+                            {
+                            	parseContentMetadataTag(parser);
+                            }
+                            break;
+                        case KXmlParser.END_TAG:
+                            break;
+                        case KXmlParser.TEXT:
+                        	if (parser.getName()!=null)
+                        		System.out.println("[TEXT]["+parser.getText().trim()+"]");
+                            break;
+                    }
+                    tag = parser.next();
+                }
+                parser.require(KXmlParser.END_DOCUMENT, null, null);
+            }
+        }
+        catch(XmlPullParserException parser_ex){
+            System.out.println(parser_ex.getMessage());
+            parser_ex.printStackTrace();
+            return false;
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#parseDescribeCoverage(java.io.File)
+     */
+    public boolean parseDescribeCoverage(File f) {
+    	int tag;
+    	EncodingXMLParser parser = null;
+      	parser = new EncodingXMLParser();
+    	try
+    	{
+    		parser.setInput(f);
+    		parser.nextTag();
+            if (parser.getEventType() != KXmlParser.END_DOCUMENT){
+                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_DESCRIPTION);
+                tag = parser.nextTag();
+                while (tag != KXmlParser.END_DOCUMENT){
+                    switch (tag){
+                        case KXmlParser.START_TAG:
+                            if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING)==0){
+                                WCSCoverage1_0_0 lyr = new WCSCoverage1_0_0();
+                                lyr.parse(parser);
+                                if (lyr!=null){
+                                    layerPool.put(lyr.getName(), lyr);
+                                }
+                            }
+                            break;
+                    }
+                    tag = parser.next();
+                }
+                parser.require(KXmlParser.END_DOCUMENT, null, null);
+            }
+        } catch (XmlPullParserException e) {
+            System.out.println(e.getMessage());
+            e.printStackTrace();
+            return false;
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * <p>Parses the Capability Tag </p>
+     */
+    private void parseCapabilityTag(KXmlParser parser) throws IOException, XmlPullParserException
+    {
+        int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITY);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(CapabilitiesTags.REQUEST)==0)
+                    {
+                        parseRequestTag(parser);
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.EXCEPTION)==0)
+                    {
+                        //TODO Parse exception tags...
+                    	parser.skipSubTree();
+                    }
+                    else if ((parser.getName().compareTo(CapabilitiesTags.VENDORSPECIFICCAPABILITIES)==0) ||
+                            (parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION )==0))
+                    {
+                        parser.skipSubTree();
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                break;
+             }
+             currentTag = parser.next();
+        }
+    }
+
+
+    /**
+     * <p>Parses the Service Information </p>
+     */
+    private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException
+    {
+        int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.SERVICE);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareToIgnoreCase(CapabilitiesTags.NAME)==0)
+                    {
+                        serviceInfo.name = parser.nextText();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_LABEL)==0)
+                    {
+                        serviceInfo.title = parser.nextText();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_DESCRIPTION)==0)
+                    {
+                        serviceInfo.abstr = parser.nextText();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_KEYWORDS)==0)
+                    {
+                        parser.skipSubTree();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.ACCESSCONSTRAINTS)==0)
+                    {
+                        parser.skipSubTree();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.FEES)==0)
+                    {
+                        parser.skipSubTree();
+                    }
+
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(CapabilitiesTags.SERVICE) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                break;
+             }
+             currentTag = parser.next();
+        }
+//      parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.SERVICE);
+    }
+
+    /**
+     * <p>Parses the Request tag </p>
+     */
+    private void parseRequestTag(KXmlParser parser) throws IOException, XmlPullParserException
+    {
+    	int currentTag;
+    	boolean end = false;
+
+    	parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.REQUEST);
+    	currentTag = parser.next();
+
+    	while (!end)
+    	{
+    		switch(currentTag)
+    		{
+    		case KXmlParser.START_TAG:
+    			if (parser.getName().compareTo(CapabilitiesTags.GETCAPABILITIES)==0)
+    			{
+    				currentTag = parser.nextTag();
+    				parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
+    				{
+						currentTag = parser.nextTag();
+						if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
+						{
+							currentTag = parser.nextTag();
+							if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
+							{
+								currentTag = parser.nextTag();
+								if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
+								{
+									String value = new String();
+									value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
+									if (value != null){
+										serviceInfo.operations.put(value, null);
+									}
+								}
+							}
+						}
+					}
+
+    			}
+    			else if (parser.getName().compareTo(CapabilitiesTags.DESCRIBECOVERAGE)==0)
+    			{
+    				currentTag = parser.nextTag();
+    				parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
+    				{
+						currentTag = parser.nextTag();
+						if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
+						{
+							currentTag = parser.nextTag();
+							if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
+							{
+								currentTag = parser.nextTag();
+								if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
+								{
+									String value = new String();
+									value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
+									if (value != null){
+										serviceInfo.operations.put(value, null);
+									}
+								}
+							}
+						}
+					}
+    			}
+    			else if (parser.getName().compareTo(CapabilitiesTags.GETCOVERAGE)==0)
+    			{
+    				currentTag = parser.nextTag();
+    				parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
+    				{
+						currentTag = parser.nextTag();
+						if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
+						{
+							currentTag = parser.nextTag();
+							if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
+							{
+								currentTag = parser.nextTag();
+								if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
+								{
+									String value = new String();
+									value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
+									if (value != null){
+										serviceInfo.operations.put(value, null);
+									}
+								}
+							}
+						}
+					}
+    			}
+    			break;
+    		case KXmlParser.END_TAG:
+    			if (parser.getName().compareTo(CapabilitiesTags.REQUEST) == 0)
+    				end = true;
+    			break;
+    		case KXmlParser.TEXT:
+    			break;
+    		}
+    		currentTag = parser.next();
+    	}
+    	// TODO: does not get such a tag when arrives here!!!!!!
+    	//parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
+    }
+
+    private void parseContentMetadataTag(KXmlParser parser) throws XmlPullParserException, IOException {
+    	int currentTag;
+    	boolean end = false;
+
+    	parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CONTENTMETADATA);
+    	currentTag = parser.next();
+
+    	while (!end)
+    	{
+    		switch(currentTag)
+    		{
+    		case KXmlParser.START_TAG:
+    			if (parser.getName().compareTo("wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF)==0) {
+    				CoverageOfferingBrief cob = new CoverageOfferingBrief();
+    				cob.parse(parser);
+    				layerPool.put(cob.getName(), cob);
+    			}
+    			break;
+    		case KXmlParser.END_TAG:
+    			if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA) == 0)
+    				end = true;
+    			break;
+    		case KXmlParser.TEXT:
+    			break;
+    		}
+    		currentTag = parser.next();
+    	}
+    	// TODO: does not get such a tag when arrives here!!!!!!
+    	//parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createDescribeCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
+	 */
+	public WCSDescribeCoverageRequest createDescribeCoverageRequest(
+			WCSStatus status) {
+		return new WCSDescribeCoverageRequest1_0_0(status, this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createGetCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
+	 */
+	public WCSGetCoverageRequest createGetCoverageRequest(WCSStatus status) {
+		return new WCSGetCoverageRequest1_0_0(status, this);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSClient.java	(revision 42196)
@@ -0,0 +1,267 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.remoteclient.exceptions.ServerErrorException;
+import org.gvsig.remoteclient.exceptions.WCSException;
+//import org.gvsig.remoteclient.exceptions.WMSException;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * WCSClient managing the low-level comunication to the server. It is used
+ * as a bridge between a standard WCS server and other high-level clients.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class WCSClient extends org.gvsig.remoteclient.RasterClient{
+
+    private WCSProtocolHandler handler   = null;
+    private Hashtable          layerPool = null;
+    private Logger             log       = LoggerFactory.getLogger(WCSClient.class);
+
+    /**
+     * Constructor.
+     * the parameter host, indicates the WCS host to connect.
+     * @throws IOException
+     *
+     */
+    public WCSClient(String host) throws ConnectException, IOException {
+        setHost(host);
+        try {
+        	handler = WCSProtocolHandlerFactory.negotiate(hostName);
+        	handler.setHost(hostName);
+        } catch(ConnectException conE) {
+        	throw conE;
+        } catch(IOException ioE) {
+        	throw ioE;
+        } catch(Exception e) {
+        	log.info("Error getting handler for " + hostName, e);
+        }
+    }
+
+    /**
+     * <p>Checks the connection to de remote WMS and requests its capabilities.</p>
+     * @param override
+     *
+     */
+    public boolean connect(boolean override, ICancellable cancel)
+    {
+        try {
+            if (handler == null) {
+                if (getHost().trim().length() > 0) {
+                	handler = WCSProtocolHandlerFactory.negotiate(getHost());
+                    handler.setHost(getHost());
+                } else {
+                    // must to specify host first!!!!
+                    return false;
+                }
+            }
+            getCapabilities(null, override, cancel);
+
+            describeCoverage(null, override, cancel); //TODO falta posar el onlineresource del describe coverage
+            return true;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * Sends a GetCapabilities request using the properties contained by
+     * the status. If status is null, then it uses the default configuration.
+     * @param override
+     * @param WCSStatus, containing the status properties
+     */
+    private void getCapabilities(WCSStatus status, boolean override, ICancellable cancel) {
+        handler.getCapabilities(status, override, cancel);
+    }
+
+    /**
+     * Sends a DescribeCoverage request using the properties contained by
+     * the status.
+     * @param override, if true the cache is ignored
+     * @param WCSStatus, containing the status properties
+     */
+    private void describeCoverage(WCSStatus status, boolean override, ICancellable cancel) {
+        handler.describeCoverage(status, override, cancel);
+        // check it was response or if we need to perform a specific DescribeCoverage for each coverage
+        Hashtable layers = handler.getLayers();
+        Iterator it = layers.keySet().iterator();
+        while (it.hasNext()) {
+        	Object obj = layers.get(it.next());
+        	if (obj instanceof CoverageOfferingBrief) {
+        		if (status == null)
+        			status = new WCSStatus();
+        		status.setCoveraName( ((CoverageOfferingBrief) obj).getName());
+        		handler.describeCoverage(status, override, cancel);
+        	}
+        }
+
+        layerPool = handler.getLayers();
+    }
+    
+    private Hashtable getLayerPool() {
+    	if(layerPool == null || layerPool.isEmpty()) {
+    		layerPool = getHandLer().getLayers();
+    		if(layerPool.isEmpty()) {
+    			describeCoverage(null, true, null);
+    			layerPool = getHandLer().getLayers();
+    		}
+    	}
+    	return layerPool;
+    }
+    
+    private WCSProtocolHandler getHandLer() {
+    	if(handler == null) {
+    		try {
+            	handler = WCSProtocolHandlerFactory.negotiate(hostName);
+            	handler.setHost(hostName);
+            } catch(ConnectException conE) {
+            	log.debug("Error getting handler for " + hostName, conE);
+            } catch(IOException ioE) {
+            	log.debug("Error getting handler for " + hostName, ioE);
+            } catch(Exception e) {
+            	log.debug("Error getting handler for " + hostName, e);
+            }
+    	}
+    	return handler;
+    }
+    
+    public void close() {
+    }
+
+    /**
+     * Returns the title of the service. The title is a human-readable string format
+     * used to label the service connection.
+     * @return String
+     */
+	public String getServiceTitle() {
+		return getHandLer().serviceInfo.title;
+	}
+
+	/**
+	 * Returns the service version (1.0.0, 1.1.0, ...).
+	 * @return String
+	 */
+	public String getVersion() {
+		return getHandLer().getVersion();
+	}
+
+	/**
+	 * Returns a brief description of the service, it is a human-readable string.
+	 * @return String
+	 */
+	public String getDescription() {
+		return getHandLer().serviceInfo.abstr;
+	}
+
+	/**
+	 *
+	 * @return
+	 */
+	public ArrayList getFormats() {
+		return getHandLer().getFormats();
+	}
+
+	/**
+	 * Returns a hash table containing the WCSCoverage's produced at parse time using
+	 * the coverage names as the Hashtable's keys
+	 * @return Hashtable.
+	 */
+	public Hashtable getCoverageList() {
+		return getLayerPool();
+	}
+
+	/**
+	 * Given a coverage name, it returns the coverage's title.
+	 * @param coverageName
+	 * @return String
+	 */
+	public String getLabel(String coverageName) {
+		return ((WCSCoverage) getLayerPool().get(coverageName)).getTitle();
+	}
+
+	/**
+	 * Given a coverage name and the CRS name, it returns the extent defined by the
+	 * server in the DescribeCoverage document.
+	 *
+	 * @param coverageName
+	 * @param crs
+	 * @return Rectangle2D
+	 */
+	public Rectangle2D getExtent(String coverageName, String crs) {
+		BoundaryBox bbox = (BoundaryBox) ((WCSCoverage) getLayerPool().get(coverageName)).getBbox(crs);
+        if (bbox == null) return null;
+        double xmin = bbox.getXmin();
+        double xmax = bbox.getXmax();
+        double ymin = bbox.getYmin();
+        double ymax = bbox.getYmax();
+		return new Rectangle2D.Double(xmin, ymin, xmax-xmin, ymax-ymin);
+	}
+
+	/**
+	 * Sends the GetCoverage request according to the settings passed in the status
+	 * argument.
+	 * @param status
+	 * @return File
+	 * @throws ServerErrorException
+	 * @throws WCSException
+	 */
+	public File getCoverage(WCSStatus status, ICancellable cancel) throws ServerErrorException, WCSException {
+		return getHandLer().getCoverage(status, cancel);
+	}
+	
+	/**
+     * <p>Gets the GetMap URL. The final client should download the file</p> 
+     * @throws ServerErrorException 
+     */
+//    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws WMSException, ServerErrorException{   
+    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws ServerErrorException{   
+       return getHandLer().getCoverageURL(status, cancel);
+    } 
+    
+    /**
+     * Returns the exception message if the file is a XML instead of a image.
+     * @param file
+     * @return
+     * @throws IOException 
+     */
+    public String getExceptionMessage(File file) throws IOException {
+    	return getHandLer().getExceptionMessage(file);
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSClient.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClientStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClientStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClientStatus.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient;
+
+import org.gvsig.remoteclient.ogc.OGCClientOperation;
+
+/**
+ * This class represents the client status at a certain moment
+ * it describes the "graphic" situation or the requirements of the data
+ * to be retrieved.
+ * 
+ */
+public abstract class RemoteClientStatus {
+
+	// width and heigh of the map
+    private int width;
+    private int height;
+    
+    //format of the image to be retrieved
+    private String format;
+    private String infoFormat;
+    // spatial reference system of the image to be retrieved
+    private String srs;
+    // exception format, to be retrieved in case of error
+    private String exceptionFormat;
+    
+    //To set if the client has to use GET or POST
+	private int protocol = OGCClientOperation.PROTOCOL_UNDEFINED;
+
+	public int getWidth() {        
+        return width;
+    }
+    
+    public void setWidth(int _width) {        
+    	width = _width;
+    } 
+
+    public int getHeight() {                
+        return height;
+    } 
+    public void setHeight(int _height) {        
+        height = _height;
+    } 
+
+    public String getFormat() {        
+        return format;
+    }
+    
+    public void setFormat(String _format) {        
+        format = _format;
+    } 
+    
+    public String getInfoFormat() {        
+        return infoFormat;
+    } 
+    
+    public void setInfoFormat(String _format) {        
+        infoFormat = _format;
+    } 
+
+    public String getSrs() {        
+        return srs;
+    } 
+
+    public void setSrs(String _srs) {        
+        srs = _srs;
+    } 
+
+    public void setExceptionFormat(String _format) {        
+        exceptionFormat = _format;
+    } 
+    
+    public String getExceptionFormat() {        
+        return exceptionFormat;
+    }
+    
+    /**
+	 * @return the protocol
+	 */
+	public int getProtocol() {
+		return protocol;
+	}
+
+	/**
+	 * @param protocol the protocol to set
+	 */
+	public void setProtocol(int protocol) {
+		this.protocol = protocol;
+	}
+ 
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClientStatus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RasterClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RasterClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RasterClient.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.remoteclient;
+
+/**
+ * <p></p>
+ * 
+ */
+public abstract class RasterClient extends org.gvsig.remoteclient.RemoteClient implements org.gvsig.remoteclient.IRasterClient {
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RasterClient.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/Discovery_Networks.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/Discovery_Networks.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/Discovery_Networks.kml	(revision 42196)
@@ -0,0 +1,1725 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<kml xmlns="http://earth.google.com/kml/2.1">
+<Document>
+	<name>Discovery Networks</name>
+	<open>1</open>
+	<description>Zoom into real life.</description>
+	<StyleMap id="discoveryPOIMap">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#discoveryPOIMapMouseout</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#discoveryPOIMapMouseover</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="discoveryPOIMapMouseout">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://www.discovery.com/common/sgallery/googleearth/globe_white.png</href>
+				<w>32</w>
+				<h>32</h>
+			</Icon>
+		</IconStyle>
+		<BalloonStyle>
+			<color>ffa56a</color>
+			<text>&lt;img src=&quot;http://www.discovery.com/utilities/googleearth/logos/discoverynetworks.gif&quot; width=&quot;100&quot; height=&quot;47&quot; border=&quot;0&quot; alt=&quot;discovery communications inc&quot; /&gt;&lt;br /&gt;&lt;font face=&quot;Verdana&quot; size=&quot;3&quot; color=&quot;#FFFFFF&quot;&gt;$[description]&lt;/font&gt;&lt;font face=&quot;Verdana&quot; size=&quot;3&quot; color=&quot;#000000&quot;&gt;Copyright &amp;copy; 2006 Discovery Communications Inc.&lt;/font&gt;</text>
+		</BalloonStyle>
+	</Style>
+	<Style id="discoveryPOIMapMouseover">
+		<IconStyle>
+			<Icon>
+				<href>http://www.discovery.com/common/sgallery/googleearth/globe_white.png</href>
+				<w>32</w>
+				<h>32</h>
+			</Icon>
+		</IconStyle>
+		<BalloonStyle>
+			<color>ffa56a</color>
+			<text>&lt;img src=&quot;http://www.discovery.com/utilities/googleearth/logos/discoverynetworks.gif&quot; width=&quot;100&quot; height=&quot;47&quot; border=&quot;0&quot; alt=&quot;discovery communications inc&quot; /&gt;&lt;br /&gt;&lt;font face=&quot;Verdana&quot; size=&quot;3&quot; color=&quot;#FFFFFF&quot;&gt;$[description]&lt;/font&gt;&lt;font face=&quot;Verdana&quot; size=&quot;3&quot; color=&quot;#000000&quot;&gt;Copyright &amp;copy; 2006 Discovery Communications Inc.&lt;/font&gt;</text>
+		</BalloonStyle>
+		
+			<scale>1.4</scale>
+	</Style>
+	<Folder>
+		<name>Discovery National Parks Tour</name>
+		<open>1</open>
+		<description>Watch exclusive video of America&apos;s scenic wonders.</description>
+		<Placemark>
+			<name>Glacier National Park</name>
+			<Snippet maxLines="2">
+Glacier			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920284&bctid=86232580"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/glacierpark.jpg" width="320" height="240" border="0" alt="Glacier National Park" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Inside Glacier National Park</strong></font><br />
+Explore through video the gem of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920284&bctid=86232580">Big Sky Country</a>.<br />
+&nbsp;<br />
+<strong>More Glacier videos:</strong><br />
+Watch how <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920284&bctid=86232578">glaciers shaped</a> the park.<br />
+Learn Glacier's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920284&bctid=16938885">history and legends</a>.<br />
+Check out the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920284&bctid=86232576">"Going to the Sun" Road</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-113.654822</longitude>
+				<latitude>48.756675</latitude>
+				<altitude>0</altitude>
+				<range>9444</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-113.654822,48.756675,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Yellowstone National Park</name>
+			<Snippet maxLines="2">
+Yellowstone			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16934806&bctid=17197352"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/yellowstonepark.jpg" width="320" height="240" border="0" alt="Yellowstone National Park" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>The Wonder of Yellowstone</strong></font><br />
+Take a video tour of America's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16934806&bctid=17197352">first national park</a>.<br />
+&nbsp;<br />
+<strong>More Yellowstone videos:</strong><br />
+Check out the park's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16934806&bctid=17197351">hydrothermal wonders</a>.<br />
+<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16934806&bctid=86232579">Watch wildlife roaming</a> the park's forests and roads.<br />
+Find out why <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16934806&bctid=16927314">fires are so critical</a> for Yellowstone.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-110.8334056</longitude>
+				<latitude>44.4596722</latitude>
+				<altitude>0</altitude>
+				<range>5191</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-110.8334056,44.4596722,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Arches National Park</name>
+			<Snippet maxLines="2">
+Arches			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920785&bctid=37046645"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/archespark.jpg" width="320" height="240" border="0" alt="Arches National Park" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Explore Amazing Arches</strong></font><br />
+See what created the park's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920785&bctid=37046645">stunning rock formations</a>.<br />
+&nbsp;<br />
+<strong>More Arches videos:</strong><br />
+Visit the park's most <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920785&bctid=16938865">famous arches</a>.<br />
+Check out the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920785&bctid=16938853">unearthly terrain</a> of nearby Canyonlands.<br />
+Explore a geological mystery of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920785&bctid=16938866">Canyonlands</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-109.5625</longitude>
+				<latitude>38.7083278</latitude>
+				<altitude>0</altitude>
+				<range>9109</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-109.5625,38.7083278,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Mt. Rushmore National Park</name>
+			<Snippet maxLines="2">
+Mt. Rushmore			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924793&bctid=86232577"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/mountrushmore.jpg" width="320" height="240" border="0" alt="Mount Rushmore National Park" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Up on Mt. Rushmore</strong></font><br />
+Get up close to the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924793&bctid=86232577">colossal stone carvings</a>.<br />
+&nbsp;<br />
+<strong>More Mt. Rushmore videos:</strong><br />
+See how <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924793&bctid=17197362">flaws in the rock face</a> changed the design.<br />
+Watch how dynamite was used to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924793&bctid=17197359">carve the mountain</a>.<br />
+Get the story on what it was like to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924793&bctid=17197360">work on Rushmore</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-103.45983056</longitude>
+				<latitude>43.87894722</latitude>
+				<altitude>0</altitude>
+				<range>2722</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-103.45983056,43.87894722000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Everglades National Park</name>
+			<Snippet maxLines="2">
+Everglades			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920784&bctid=17041216"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/evergladespark.jpg" width="320" height="240" border="0" alt="Everglades National Park" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Inside the Everglades</strong></font><br />
+See what makes Florida's large national park <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920784&bctid=17041216">so unique</a>.<br />
+&nbsp;<br />
+<strong>More Everglades videos:</strong><br />
+Watch how <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920784&bctid=16938871">cypress trees</a> fuel the park's ecosystem.<br />
+Enter the world of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920784&bctid=16927376">manatees</a>.<br />
+Go inside the park's huge <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920784&bctid=16927364">mangrove forests</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-81.0324944</longitude>
+				<latitude>25.473822</latitude>
+				<altitude>0</altitude>
+				<range>31266</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-81.0324944,25.473822,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Pt. Reyes National Seashore</name>
+			<Snippet maxLines="2">
+Point Reyes			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17013949&bctid=16927304"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/pointreyes.jpg" width="320" height="240" border="0" alt="Point Reyes National Seashore" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Cruising Point Reyes Seashore</strong></font><br />
+Visit a park along the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17013949&bctid=16927304">San Andreas Fault</a>.<br />
+&nbsp;<br />
+<strong>More Point Reyes videos:</strong><br />
+Go underneath the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17013949&bctid=16927321">coastal waters</a>.<br />
+Watch <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17013949&bctid=16927357">sharks and whales</a> near the coast.<br />
+See the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17013949&bctid=86232574">range of wildlife</a> along the seashore.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-122.9917944</longitude>
+				<latitude>37.99874167</latitude>
+				<altitude>0</altitude>
+				<range>7950</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-122.9917944,37.99874167,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Santa Monica Mountains</name>
+			<Snippet maxLines="2">
+Santa Monica			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16919791&bctid=16938861"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/santamonica.jpg" width="320" height="240" border="0" alt="Santa Monica Mountains" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Santa Monica Mountains</strong></font><br />
+Get a good look at the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16919791&bctid=16938861">largest urban park</a> in America.<br />
+&nbsp;<br />
+<strong>More Santa Monica videos:</strong><br />
+<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16919791&bctid=16938890">Watch the wildlife</a> that roams close to Los Angeles.<br />
+Find out about the area's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16919791&bctid=16927368">Native-American history</a>.<br />
+Learn about the women who <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16919791&bctid=17041267">fought for the park</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-118.5764389</longitude>
+				<latitude>34.06768056</latitude>
+				<altitude>0</altitude>
+				<range>3428</range>
+				<tilt>63</tilt>
+				<heading>150</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-118.5764389,34.06768056000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Alaska National Parks</name>
+			<Snippet maxLines="2">
+Denali			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16938910&bctid=16927307"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/denali.jpg" width="320" height="240" border="0" alt="Denali" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Into Alaska</strong></font><br />
+See the range of Alaska's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16938910&bctid=16927307">spectacular scenery</a>.<br />
+&nbsp;<br />
+<strong>More Alaska National Parks videos:</strong><br />
+<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16938910&bctid=16927318">Explore Denali</a> and the highest peak in America.<br />
+Watch the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16938910&bctid=16927313">bears of Katmai</a> National Park.<br />
+Go above the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16938910&bctid=86232575">Arctic Circle</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-151.04334166</longitude>
+				<latitude>63.130722</latitude>
+				<altitude>0</altitude>
+				<range>28567</range>
+				<tilt>63</tilt>
+				<heading>165</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-151.04334166,63.13072200000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Dinosaur National Monument</name>
+			<Snippet maxLines="2">
+Dinosaur Park			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17197350&bctid=17041262"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/dinosaurpark.jpg" width="320" height="240" border="0" alt="Dinosaur National Monument" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Dinosaur National Monument</strong></font><br />
+Go where <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17197350&bctid=17041262">giant monsters</a> used to roam.<br />
+&nbsp;<br />
+<strong>More Dinosaur videos:</strong><br />
+See what <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17197350&bctid=16927330">geological layers</a> say about the past.<br />
+Watch the strange creatures of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17197350&bctid=17041234">Triassic Period</a>.<br />
+Return to the age of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=17197350&bctid=16927296">dinosaur giants</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-108.67355833</longitude>
+				<latitude>40.6918167</latitude>
+				<altitude>0</altitude>
+				<range>22976</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-108.67355833,40.6918167,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Carlsbad Caverns</name>
+			<Snippet maxLines="2">
+Carlsbad			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924795&bctid=16938844"><img src="http://dsc.discovery.com/utilities/googleearth/nationalparks/gallery/carlsbadcaves.jpg" width="320" height="240" border="0" alt="Carlsbad Caverns" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Into Carlsbad Caverns</strong></font><br />
+Enter a stunning <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924795&bctid=16938844">underground world</a>.<br />
+&nbsp;<br />
+<strong>More Carlsbad videos:</strong><br />
+Watch the nightly swarm of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924795&bctid=16938886">Carlsbad's bats</a>.<br />
+See how <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16924795&bctid=17041293">sulfuric acid</a> helped form the caverns.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-104.441056</longitude>
+				<latitude>32.176991666</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-104.441056,32.176991666,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Great Smoky Mountains</name>
+			<Snippet maxLines="2">
+Great Smoky Mountains			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147268&bctid=67269066"><img src="http://dsc.discovery.com/utilities/googleearth/us_landmarks/gallery/greatsmokymtns.jpg" width="320" height="240" border="0" alt="Great Smoky Mountains" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Great Smoky Mountains</strong></font><br />
+Take a look at America's most <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147268&bctid=67269066">popular national park</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-83.60833890000001</longitude>
+				<latitude>35.99110833</latitude>
+				<altitude>0</altitude>
+				<range>225211</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-83.60833890000002,35.99110833,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Hoover Dam</name>
+			<Snippet maxLines="2">
+Hoover Dam			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147268&bctid=37046646"><img src="http://dsc.discovery.com/utilities/googleearth/us_landmarks/gallery/hooverdam.jpg" width="320" height="240" border="0" alt="Hoover Dam" /></a><br />
+<font size="3" color="#000000">Picture:  iStockphoto |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Inside Hoover Dam</strong></font><br />
+Explore this model of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147268&bctid=37046646">American ingenuity</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-114.73770278</longitude>
+				<latitude>36.01605833</latitude>
+				<altitude>0</altitude>
+				<range>1086</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-114.73770278,36.01605833,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Niagara Falls</name>
+			<Snippet maxLines="2">
+Niagara Falls			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147268&bctid=37046644"><img src="http://dsc.discovery.com/utilities/googleearth/us_landmarks/gallery/niagrafalls.jpg" width="320" height="240" border="0" alt="Niagra Falls" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Over Niagara Falls</strong></font><br />
+Get a close-up view of this <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147268&bctid=37046644">natural wonder</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Niagara Falls video:</strong><br />
+Take a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147268&bctid=37046643">wild ride</a> on the river.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-79.07533056</longitude>
+				<latitude>43.07725834</latitude>
+				<altitude>0</altitude>
+				<range>2371</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-79.07533056,43.07725834000001,0</coordinates>
+			</Point>
+		</Placemark>
+	</Folder>
+	<Folder>
+		<name>American Cities Tour</name>
+		<description>See exclusive video of major American cities.</description>
+		<Placemark>
+			<name>New York</name>
+			<Snippet maxLines="2">
+New York			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818959&bctid=16861717"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/newyork.jpg" width="320" height="240" border="0" alt="New York" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Inside New York</strong></font><br />
+Follow the rise of the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818959&bctid=16861717">skyscrapers</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><!--</td><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" />--></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More New York videos:</strong><br />
+Explore the secrets of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818959&bctid=16861748">Central Park</a>.<br />
+Find out about the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818959&bctid=16861750">bright lights</a> of the big city.<br />
+See how the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818959&bctid=67269177">Brooklyn Bridge</a> became an icon.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-73.9881833</longitude>
+				<latitude>40.7522944</latitude>
+				<altitude>0</altitude>
+				<range>14264</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-73.9881833,40.7522944,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Washington DC</name>
+			<Snippet maxLines="2">
+Washington DC			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164241&bctid=24465932"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/washingtondc.jpg" width="320" height="240" border="0" alt="Washington DC" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Take a Washington, D.C., Tour</strong></font><br />
+See what it means to go to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164241&bctid=24465932">The Mall</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Washington, D.C., videos:</strong><br />
+Enter the world of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164241&bctid=24465939">Smithsonian museums</a>.<br />
+Take a video tour of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164241&bctid=24465938">Lincoln Memorial</a>.<br />
+Get the inside story of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164241&bctid=24465934">Washington Monument</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-77.0366944</longitude>
+				<latitude>38.89500833</latitude>
+				<altitude>0</altitude>
+				<range>6220</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-77.0366944,38.89500833,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Las Vegas</name>
+			<Snippet maxLines="2">
+Las Vegas			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818958&bctid=17041132"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/vegas.jpg" width="320" height="240" border="0" alt="Las Vegas" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>The Marvels of Las Vegas</strong></font><br />
+Get the scoop on <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818958&bctid=17041132">Bellagio's</a> amazing fountain.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Las Vegas videos:</strong><br />
+Find out what makes the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818958&bctid=17041122">Luxor</a> so special.<br />
+See how Vegas' <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818958&bctid=17041131">"Eiffel Tower"</a> came to be.<br />
+Check out the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818958&bctid=17041244">Shark Reef</a> at Mandalay Bay.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-115.1729389</longitude>
+				<latitude>36.100911</latitude>
+				<altitude>0</altitude>
+				<range>2595</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-115.1729389,36.100911,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Seattle</name>
+			<Snippet maxLines="2">
+Seattle			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818960&bctid=32951094"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/seattle.jpg" width="320" height="240" border="0" alt="Seattle" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>A Taste of Seattle</strong></font><br />
+Make a video visit to the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818960&bctid=32951094">Space Needle</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Seattle videos:</strong><br />
+Get a taste of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818960&bctid=32951091">Pike Place Market</a>.<br />
+Take a trip to nearby <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818960&bctid=32951092">Mount St. Helens</a>.<br />
+Stop by <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818960&bctid=32951090">Ye Olde Curiosity Shoppe</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-122.330844</longitude>
+				<latitude>47.6063944</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-122.330844,47.60639440000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Miami</name>
+			<Snippet maxLines="2">
+Miami			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=70349676&bctid=70349669"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/miami.jpg" width="320" height="240" border="0" alt="Miami" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Explore Old and New Miami</strong></font><br />
+Go back to the era of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=70349676&bctid=170349669">Art Deco</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Miami videos:</strong><br />
+Visit one of the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=70349676&bctid=70349672">famous hotels</a>.<br />
+Find out what turned around <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=70349676&bctid=170349672">South Beach</a>.<br />
+Spend some time in <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=70349676&bctid=16938886">Little Havana</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-80.19390833</longitude>
+				<latitude>25.77390833</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-80.19390833000001,25.77390833,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>San Francisco</name>
+			<Snippet maxLines="2">
+San Francisco			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818957&bctid=44410202"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/sanfran.jpg" width="320" height="240" border="0" alt="San Francisco" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Savor San Francisco</strong></font><br />
+Explore the roots of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818957&bctid=44410202">City by the Bay</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More San Francisco videos:</strong><br />
+Go inside <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818957&bctid=44410281">Alcatraz</a>.<br />
+Meet the people who take care of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818957&bctid=44410208">famous bridge</a>.<br />
+Take a tour of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60818957&bctid=44410206">Chinatown</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-122.4008944</longitude>
+				<latitude>37.79390278</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-122.4008944,37.79390278,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Chicago</name>
+			<Snippet maxLines="2">
+Chicago			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124703&bctid=44410292"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/chicago.jpg" width="320" height="240" border="0" alt="Chicago" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Check Out Chicago</strong></font><br />
+Take in the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124703&bctid=44410292">skyscrapers of Chicago</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Chicago videos:</strong><br />
+See how African-Americans <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124703&bctid=44410305">shaped its culture</a>.<br />
+Spend some time in historic <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124703&bctid=44410293">Wrigley Field</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-87.633225</longitude>
+				<latitude>41.880589</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-87.633225,41.880589,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Philadelphia</name>
+			<Snippet maxLines="2">
+Philadelphia			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124657&bctid=44410205"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/philadelphia.jpg" width="320" height="240" border="0" alt="Philadelphia" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Fun in Philadelphia</strong></font><br />
+Get a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124657&bctid=44410205">taste</a> of Philly.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Philadelphia videos:</strong><br />
+Take a cruise down <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124657&bctid=44410207">Boathouse Row</a>.<br />
+Celebrate with the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124657&bctid=44410204">Mummers</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-75.16417800000001</longitude>
+				<latitude>39.9522278</latitude>
+				<altitude>0</altitude>
+				<range>13641</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-75.16417800000001,39.9522278,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Los Angeles</name>
+			<Snippet maxLines="2">
+Los Angeles			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132263&bctid=67269029"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/losangeles.jpg" width="320" height="240" border="0" alt="Los Angeles" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>The LA Scene</strong></font><br />
+Learn about <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132263&bctid=67269029">the city that shouldn't be</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Los Angeles videos:</strong><br />
+Discover the two sides of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132263&bctid=67269028">Venice Beach</a>.<br />
+Take to the road in <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132263&bctid=67269061">a set of cool wheels</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-118.2490083</longitude>
+				<latitude>34.04505278</latitude>
+				<altitude>0</altitude>
+				<range>17236</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-118.2490083,34.04505278,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Boston</name>
+			<Snippet maxLines="2">
+Boston			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164235&bctid=44410302"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/boston.jpg" width="320" height="240" border="0" alt="Boston" /></a><br />
+<font size="3" color="#000000">Picture: iStockphoto |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Discover Boston</strong></font><br />
+Find the many ways to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164235&bctid=44410302">explore the city</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Boston videos:</strong><br />
+Sample the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164235&bctid=44410301">foods of Boston</a>.<br />
+Visit the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164235&bctid=44410303">oldest ballpark</a> in America.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-71.05678611</longitude>
+				<latitude>42.35593056</latitude>
+				<altitude>0</altitude>
+				<range>9156</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-71.05678611,42.35593056,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Denver</name>
+			<Snippet maxLines="2">
+Denver			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160729&bctid=44410291"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/denver.jpg" width="320" height="240" border="0" alt="Denver" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Dive into Denver</strong></font><br />
+Get to the heart of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160729&bctid=44410291">Mile High City</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Denver videos:</strong><br />
+Climb aboard the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160729&bctid=44410296">ski train</a>.<br />
+Fly into the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160729&bctid=44410294">iconic airport</a>.<br />
+Visit the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160729&bctid=44410295">Hammond's Candies Factory</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-104.9890361</longitude>
+				<latitude>39.74380278</latitude>
+				<altitude>0</altitude>
+				<range>7563</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-104.9890361,39.74380278,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>San Diego</name>
+			<Snippet maxLines="2">
+San Diego			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132261&bctid=67269030"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/sandiego.jpg" width="320" height="240" border="0" alt="San Diego" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Go Wild in San Diego</strong></font><br />
+Get up close to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132261&bctid=67269030">San Diego's animals</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More San Diego videos:</strong><br />
+Get the lowdown on the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132261&bctid=67269022">surf scene</a>.<br />
+Hop aboard the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132261&bctid=67269024">historic ships</a>.<br />
+Check out a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132261&bctid=67269026">tequila restaurant/museum</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-117.1650139</longitude>
+				<latitude>32.71605278</latitude>
+				<altitude>0</altitude>
+				<range>8736</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-117.1650139,32.71605278,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Atlanta</name>
+			<Snippet maxLines="2">
+Atlanta			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160833&bctid=67269182"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/atlanta.jpg" width="320" height="240" border="0" alt="Atlanta" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Discover the Real Atlanta</strong></font><br />
+Uncover Atlanta's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160833&bctid=67269182">historical past</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Atlanta videos:</strong><br />
+Visit the ever-popular <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160833&bctid=67269174">Stone Mountain Park</a>.<br />
+Follow the footsteps of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160833&bctid=67269176">Martin Luther King Jr</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-84.38874167</longitude>
+				<latitude>33.75485</latitude>
+				<altitude>0</altitude>
+				<range>7438</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-84.38874167,33.75485,0</coordinates>
+			</Point>
+		</Placemark>
+	</Folder>
+	<Folder>
+		<name>European Cities Tour</name>
+		<description>Watch exclusive video of the great cities of Europe.</description>
+		<Placemark>
+			<name>Paris</name>
+			<Snippet maxLines="2">
+Paris			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124689&bctid=16938845"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/paris.jpg" width="320" height="240" border="0" alt="Paris" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Explore Paris</strong></font><br />
+Go inside the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124689&bctid=16938845">markets</a> of Paris.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Paris videos:</strong><br />
+Make a video visit to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124689&bctid=16938869">Notre Dame</a>.<br />
+Get a taste of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124689&bctid=16938854">city's bistros</a>.<br />
+Take in the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124689&bctid=16938874">fashion</a> of Paris.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>2.3508389</longitude>
+				<latitude>48.8567</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>2.3508389,48.8567,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>London</name>
+			<Snippet maxLines="2">
+London			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147234&bctid=169273404"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/london.jpg" width="320" height="240" border="0" alt="London" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>A Taste of London</strong></font><br />
+Take a look around London's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147234&bctid=169273404">Theater District</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More London videos:</strong><br />
+Cruise among the celebrities at <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147234&bctid=16927329">Madame Tussaud's</a>.<br />
+Take a side trip to the neighborhood of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147234&bctid=16927323">Notting Hill</a>.<br />
+Find out the best way to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147234&bctid=16927334">get around</a> the city.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-0.12618611</longitude>
+				<latitude>51.50026944</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-0.12618611,51.50026944,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Edinburgh</name>
+			<Snippet maxLines="2">
+Edinburgh			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147233&bctid=16938844"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/edinburgh.jpg" width="320" height="240" border="0" alt="Edinburgh" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>The Flavor of Edinburgh</strong></font><br />
+Take a video tour of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147233&bctid=16938857">famous castles</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Edinburgh videos:</strong><br />
+Go inside the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147233&bctid=16938894">city's pubs</a>.<br />
+Get in tune with a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147233&bctid=16938876">Scottish piper</a>.<br />
+Experience the spectacle of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147233&bctid=16938849">Military Tattoo</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-3.187567</longitude>
+				<latitude>55.95014167</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-3.187567000000001,55.95014167000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Dublin</name>
+			<Snippet maxLines="2">
+Dublin			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819286&bctid=44410312"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/dublin.jpg" width="320" height="240" border="0" alt="Dublin" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Enjoy the Traditions of Dublin</strong></font><br />
+Visit the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819286&bctid=44410312">churches and cathedrals</a> of Dublin.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Dublin Videos:</strong><br />
+Find a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819286&bctid=44410319">budget hotel and a good pint</a>.<br />
+Walk through <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819286&bctid=44410319">Dublin's neighborhoods</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-6.24425833</longitude>
+				<latitude>53.34385278</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-6.24425833,53.34385278,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Brussels</name>
+			<Snippet maxLines="2">
+Brussels			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160751&bctid=16927294"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/brussels.jpg" width="320" height="240" border="0" alt="Brussels" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Take a Trip to Brussels</strong></font><br />
+Explore the city, including its <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160751&bctid=16927294">boyish icon</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Brussels videos:</strong><br />
+Check out a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160751&bctid=16927338">chocolate factory</a>.<br />
+Sample the nightlife of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160751&bctid=16927326">Brussels</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>4.34671389</longitude>
+				<latitude>50.84643611</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>4.34671389,50.84643611,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Amsterdam</name>
+			<Snippet maxLines="2">
+Amsterdam			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160752&bctid=16927305"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/amsterdam.jpg" width="320" height="240" border="0" alt="Amsterdam" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Cruise Amsterdam</strong></font><br />
+Explore the city <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160752&bctid=16927305">by bike</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Amsterdam videos:</strong><br />
+Stop by one of Amsterdam's famous <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160752&bctid=16927335">"coffeehouses"</a>.<br />
+Tiptoe through <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160752&bctid=16927309">fields of tulips</a>.<br />
+Take a stroll through the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44160752&bctid=16927343">Red Light District</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>4.8914722</longitude>
+				<latitude>52.37309167</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>4.8914722,52.37309167,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Berlin</name>
+			<Snippet maxLines="2">
+Berlin			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147231&bctid=44147231"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/berlin.jpg" width="320" height="240" border="0" alt="Berlin" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Tour Berlin</strong></font><br />
+Take a swing around the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147231&bctid=44147231">fast-changing city</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Berlin videos:</strong><br />
+Pay a visit to the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147231&bctid=16927356">Brandenburg Gate</a>.<br />
+Check out a communal <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147231&bctid=16927303">art gallery</a>.<br />
+Get a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147231&bctid=16927324">river view</a> of the city.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>13.38556944</longitude>
+				<latitude>52.512225</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>13.38556944,52.512225,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Bavaria</name>
+			<Snippet maxLines="2">
+Bavaria			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147230&bctid=16938875"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/bavaria.jpg" width="320" height="240" border="0" alt="Bavaria" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Inside Bavaria</strong></font><br />
+Watch video of a land made <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147230&bctid=16938875">for postcards</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Bavaria videos:</strong><br />
+Go inside one of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147230&bctid=16938884">grandest castles</a> in Europe.<br />
+Visit the spot of a world-famous <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147230&bctid=16938882">Passion Play</a>.<br />
+Get a taste of a full <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147230&bctid=16938873">Bavarian meal</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>11.5536</longitude>
+				<latitude>48.1323611</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>11.5536,48.1323611,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Lisbon</name>
+			<Snippet maxLines="2">
+Lisbon			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164259&bctid=16927367"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/lisbon.jpg" width="320" height="240" border="0" alt="Lisbon" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Inside Lisbon</strong></font><br />
+Get into the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164259&bctid=16927367">heart</a> of the city.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Lisbon videos:</strong><br />
+Explore the famous <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164259&bctid=16927292">Pestana Palace</a>.<br />
+Stroll through <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164259&bctid=16927349">the streets</a> of Portugal's capital.<br />
+Check out a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164259&bctid=16927327">monastery</a> tied to Lisbon's past.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-9.140027699999999</longitude>
+				<latitude>38.72000833</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-9.140027699999999,38.72000833,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Naples</name>
+			<Snippet maxLines="2">
+Naples			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164258&bctid=16927337"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/naples.jpg" width="320" height="240" border="0" alt="Naples" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Plunge Into Naples</strong></font><br />
+Sample the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164258&bctid=16927337">energy and chaos</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Naples videos:</strong><br />
+Savor a video taste of Naples' <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164258&bctid=16927325">famous pizza</a>.<br />
+Slow it down in <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164258&bctid=16927344">Santa Lucia</a>.<br />
+Go inside an <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164258&bctid=16927379">opera house</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>14.26583056</longitude>
+				<latitude>40.84834167</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>14.26583056,40.84834167,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Florence</name>
+			<Snippet maxLines="2">
+Florence			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147235&bctid=16938856"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/florence.jpg" width="320" height="240" border="0" alt="Florence" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Explore Florence</strong></font><br />
+Take in the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147235&bctid=16938856">spectacular architecture</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Florence videos:</strong><br />
+Escape to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147235&bctid=16938858">the countryside</a>.<br />
+Find the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147235&bctid=16938889">perfect hotel</a> in Florence.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>11.2568611</longitude>
+				<latitude>43.768725</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>11.2568611,43.76872500000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Rome</name>
+			<Snippet maxLines="2">
+Rome			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132196&bctid=52338027"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/rome.jpg" width="320" height="240" border="0" alt="Rome" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Discover Rome</strong></font><br />
+Wander through the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132196&bctid=52338027">historic district</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Rome videos:</strong><br />
+Experience a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132196&bctid=52338024">unique restaurant</a>.<br />
+Walk in the footsteps of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132196&bctid=52338026">gladiators</a>.<br />
+One way to really <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132196&bctid=52338036">see the city</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>12.47899167</longitude>
+				<latitude>41.8990611</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>12.47899167,41.8990611,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Amalfi Coast</name>
+			<Snippet maxLines="2">
+Amalfi Coast			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124687&bctid=16938844"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/amalficoast.jpg" width="320" height="240" border="0" alt="Analfi Coast" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Travel the Amalfi Coast</strong></font><br />
+Start your journey at <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124687&bctid=16938844">Sorrento</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Amalfi Coast videos:</strong><br />
+Soak in the atmosphere at a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124687&bctid=44410315">luxury hotel</a>.<br />
+Go hiking in <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124687&bctid=44410304">Positano</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>14.35284</longitude>
+				<latitude>40.352184</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>14.375767,40.6263083,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Madrid</name>
+			<Snippet maxLines="2">
+Madrid			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819285&bctid=44410316"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/madrid.jpg" width="320" height="240" border="0" alt="Madrid" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Explore Madrid</strong></font><br />
+Get to know the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819285&bctid=44410316">"the center of Spain"</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Madrid videos:</strong><br />
+Discover Spanish art at the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819285&bctid=16938886">Prado</a>.<br />
+Stroll the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819285&bctid=44410311">old city</a>.<br />
+Experience the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=60819285&bctid=44410320">nightlife</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-3.7033</longitude>
+				<latitude>40.416725</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-3.703300000000001,40.416725,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Barcelona</name>
+			<Snippet maxLines="2">
+Barcelona			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132198&bctid=16938862"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/barcelona.jpg" width="320" height="240" border="0" alt="Barcelona" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Tour Barcelona</strong></font><br />
+See why the Spanish city is <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132198&bctid=16938862">one of a kind</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Barcelona videos:</strong><br />
+Explore Barcelona's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132198&bctid=16938883">signature architecture</a>.<br />
+Sample the food of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44132198&bctid=17041229">Barcelona</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>2.190422</longitude>
+				<latitude>41.39014722</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>2.190422,41.39014722,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Zurich</name>
+			<Snippet maxLines="2">
+Zurich			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124693&bctid=52337975"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/zurich.jpg" width="320" height="240" border="0" alt="Zurich" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Take a Walk in Zurich</strong></font><br />
+Experience <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124693&bctid=152337975">traditional Zurich</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Zurich videos:</strong><br />
+Shop and stay in the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124693&bctid=44410313">Old Town</a>.<br />
+Find out about Zurich <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124693&bctid=44410317">from the locals</a>.<br />
+Explore the city's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44124693&bctid=44410314">neighborhoods</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>8.539967000000001</longitude>
+				<latitude>47.38005278</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>8.539967000000001,47.38005278000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Interloken</name>
+			<Snippet maxLines="2">
+Interlaken			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164305&bctid=67269031"><img src="http://dsc.discovery.com/utilities/googleearth/cities/gallery/interlocken.jpg" width="320" height="240" border="0" alt="Interlocken" /></a><br />
+<font size="3" color="#000000">Picture: DCI |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>The Heights of Interlaken</strong></font><br />
+<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164305&bctid=67269031">Climb a mountain</a> - by train.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Interlaken videos:</strong><br />
+Uncover the many aspects of <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164305&bctid=65595398">Wegen</a>.<br />
+Take in the view at a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164305&bctid=60819289">grand hotel</a>.<br />
+Before the fondue, take a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44164305&bctid=52338025">ride in a bubble</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>7.84256944</longitude>
+				<latitude>46.689722</latitude>
+				<altitude>0</altitude>
+				<range>12643</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>7.84256944,46.689722,0</coordinates>
+			</Point>
+		</Placemark>
+	</Folder>
+	<Folder>
+		<name>African Tour</name>
+		<description>See exclusive video of African landmarks.</description>
+		<Placemark>
+			<name>Ghana</name>
+			<Snippet maxLines="2">
+Ghana			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=67269067"><img src="http://dsc.discovery.com/utilities/googleearth/africa/gallery/ghana.jpg" width="320" height="240" border="0" alt="Ghana" /></a><br />
+<font size="3" color="#000000">Picture: DCI |</font><br />
+&nbsp;<br />
+<table cellpadding="0" cellspacing="0" border="0" width="320">
+<tr>
+	<td width="210" align="left" valign="top">
+<font size="4"><strong>Find Adventure in Ghana</strong></font><br />
+Join Forrest Sawyer as he <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=67269067">explores Ghana</a>.<br />
+	</td>
+	<td width="110" align="right" valign="top"><img src="http://www.discovery.com/utilities/googleearth/logos/travelchannel.gif" width="100" height="47" border="0" alt="discovery communications inc" /></td>
+</tr>
+</table>
+&nbsp;<br />
+<strong>More Ghana videos:</strong><br />
+<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=67269025">Get up close</a> to an elephant herd.<br />
+Walk through a <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=67269027">rainforest canopy</a>.<br />
+Go swimming with <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=67269023">crocodiles</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-1.97739722</longitude>
+				<latitude>8.02238056</latitude>
+				<altitude>0</altitude>
+				<range>949335</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-1.97739722,8.02238056,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Great Pyramid</name>
+			<Snippet maxLines="2">
+Great Pyramid			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=17013928"><img src="http://dsc.discovery.com/utilities/googleearth/africa/gallery/pyramids.jpg" width="320" height="240" border="0" alt="Great Pyramid" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>The Wonder of the Pyramids</strong></font><br />
+See for yourself the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=17013928">marvels of ancient Egypt</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>31.131289</longitude>
+				<latitude>29.97614167</latitude>
+				<altitude>0</altitude>
+				<range>1610</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>31.131289,29.97614167,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Valley of the Kings</name>
+			<Snippet maxLines="2">
+Valley of the Kings			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=17013933"><img src="http://dsc.discovery.com/utilities/googleearth/africa/gallery/valleykings.jpg" width="320" height="240" border="0" alt="Valley of the KIngs" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |
+</font><br />
+&nbsp;<br />
+<font size="4"><strong>In the Valley of the Kings</strong></font><br />
+Make a video visit to <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=17013933">King Tut's tomb</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>32.60220278</longitude>
+				<latitude>25.7346</latitude>
+				<altitude>0</altitude>
+				<range>19344</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>32.60220278,25.7346,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Great Zimbabwe</name>
+			<Snippet maxLines="2">
+Great Zimbabwe			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=17013934"><img src="http://dsc.discovery.com/utilities/googleearth/africa/gallery/zimbabwe.jpg" width="320" height="240" border="0" alt="Zimbabwe" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Great Zimbabwe</strong></font><br />
+Find out about this <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=16920290&bctid=17013934">mystery</a> from ancient Africa.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>31.055267</longitude>
+				<latitude>-17.84068611</latitude>
+				<altitude>0</altitude>
+				<range>4694</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>31.055267,-17.84068611,0</coordinates>
+			</Point>
+		</Placemark>
+	</Folder>
+	<Folder>
+		<name>World Landmarks</name>
+		<description>Watch exclusive video of some of the world&apos;s most amazing sites.</description>
+		<Placemark>
+			<name>Taj Mahal</name>
+			<Snippet maxLines="2">
+Taj Mahal			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=78564395"><img src="http://dsc.discovery.com/utilities/googleearth/world_landmarks/gallery/tajmahal.jpg" width="320" height="240" border="0" alt="Taj Mahal" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>The Majesty of the Taj Mahal</strong></font><br />
+Take a video tour of the great <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=78564395">monument to love</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>78.04286389000001</longitude>
+				<latitude>27.1748611</latitude>
+				<altitude>0</altitude>
+				<range>7698</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>78.04286389000001,27.17486110000001,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Great Wall</name>
+			<Snippet maxLines="2">
+Great Wall			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17013932"><img src="http://dsc.discovery.com/utilities/googleearth/world_landmarks/gallery/grwallofchina.jpg" width="320" height="240" border="0" alt="Great Wall of China" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Explore the Great Wall</strong></font><br />
+Follow the story of China's <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17013932">amazing landmark</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>116.4792083</longitude>
+				<latitude>40.333775</latitude>
+				<altitude>0</altitude>
+				<range>15795</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>116.4792083,40.333775,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Terra Cotta Army</name>
+			<Snippet maxLines="2">
+Terra Cotta Army			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17041268"><img src="http://dsc.discovery.com/utilities/googleearth/world_landmarks/gallery/china_tombsoldiers.jpg" width="320" height="240" border="0" alt="Terra Cotta Amy" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>The Terra Cotta Army</strong></font><br />
+Learn about the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17041268">mysterious sculptures</a> from China's past.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>108.878478</longitude>
+				<latitude>34.27733056</latitude>
+				<altitude>0</altitude>
+				<range>17702</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>108.878478,34.27733056,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>Isukushima</name>
+			<Snippet maxLines="2">
+Isukushima			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17013937"><img src="http://dsc.discovery.com/utilities/googleearth/world_landmarks/gallery/itsukushima.jpg" width="320" height="240" border="0" alt="Isukushima" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Inside Itsukushima</strong></font><br />
+Take in the beauty of the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17013937">famous Japanese shrine</a>.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>132.3194833</longitude>
+				<latitude>34.29613611</latitude>
+				<altitude>0</altitude>
+				<range>14890</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>132.3194833,34.29613611,0</coordinates>
+			</Point>
+		</Placemark>
+		<Placemark>
+			<name>El Tajin</name>
+			<Snippet maxLines="2">
+El Tajin			</Snippet>
+			<description><![CDATA[<a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17013936"><img src="http://dsc.discovery.com/utilities/googleearth/world_landmarks/gallery/el_tajin.jpg" width="320" height="240" border="0" alt="El Tajin" /></a><br />
+<font size="3" color="#000000">Picture: PhotoDisc |</font><br />
+&nbsp;<br />
+<font size="4"><strong>Explore El Tajin</strong></font><br />
+Learn more about the <a href="http://www.discovery.com/googleearth/?dcitc=w02-530-aj-0000&autoplay=true&bclid=44147238&bctid=17013936">ruins</a> from ancient Mexico.<br />
+&nbsp;<br />]]></description>
+			<LookAt>
+				<longitude>-97.366722</longitude>
+				<latitude>20.4667056</latitude>
+				<altitude>0</altitude>
+				<range>66803</range>
+				<tilt>0</tilt>
+				<heading>0</heading>
+			</LookAt>
+			<styleUrl>#discoveryPOIMap</styleUrl>
+			<Point>
+				<coordinates>-97.366722,20.4667056,0</coordinates>
+			</Point>
+		</Placemark>
+	</Folder>
+</Document>
+</kml>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/geography_awareness_quiz.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/geography_awareness_quiz.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/geography_awareness_quiz.kml	(revision 42196)
@@ -0,0 +1,1907 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<kml xmlns="http://earth.google.com/kml/2.1">
+<Document>
+	<name>Test Your Africa IQ</name>
+	<open>1</open>
+	<StyleMap id="default_copy:0_copy20">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy133</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy11</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="default_copy154">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy24">
+		<IconStyle>
+			<scale>1.1</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy47">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy16">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy84">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy37">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy:0_copy32">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy115</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy12</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy:0_copy8">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy47">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy234</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy98</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy98">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy:0_copy6">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy7</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy89</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy40">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy242</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy44</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy225">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy74</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy17</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy:0_copy50">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy51</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy27</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy:0_copy3">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy13">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy28">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy:0_copy48">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy49</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy28</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy:0_copy15">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy5">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy7">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy75">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy62">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy27</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy8</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy44">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy49">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy:0_copy4">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy5</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy88</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy:0_copy33">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy143</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy26</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy:0_copy11">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy86">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy35">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy:0_copy40">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy154</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy20</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy:0_copy41">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy42</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy21</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="default_copy102">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy14">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy183">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy81</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy18</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="default_copy81">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy205">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy84</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy19</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="default_copy:0_copy18">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy20">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy163">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy172">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy18">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy12">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy99">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy143">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy234">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy21">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy51">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy288">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy18</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy97</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy279">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy280</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy67</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy81">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy27">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy213">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy73</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy99</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy:0_copy22">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy97">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy295">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy47</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy24</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy02">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy97</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy81</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy83">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy193</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="default_copy133">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy67">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy74">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy:0_copy43">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy44</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy22</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy82">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy172</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy75</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy305">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy21</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy25</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="default_copy280">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy73">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy42">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy91">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy163</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy3</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy:0_copy1">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy102</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy86</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy:0_copy25">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy39">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy193">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy287">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy37</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy16</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy:0_copy34">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy35</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy13</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy:0_copy27">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy19">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy88">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy97">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy17">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy21">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy242">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy44">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy:0_copy36">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="default_copy115">
+		<IconStyle>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Style id="hl_copy:0_copy26">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<StyleMap id="default_copy286">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy36</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy15</styleUrl>
+		</Pair>
+	</StyleMap>
+	<StyleMap id="default_copy:0_copy38">
+		<Pair>
+			<key>normal</key>
+			<styleUrl>#default_copy:0_copy39</styleUrl>
+		</Pair>
+		<Pair>
+			<key>highlight</key>
+			<styleUrl>#hl_copy:0_copy14</styleUrl>
+		</Pair>
+	</StyleMap>
+	<Style id="hl_copy89">
+		<IconStyle>
+			<scale>1.2</scale>
+			<Icon>
+				<href>http://services.google.com/earth/layers/gaw/mww_quiz.png</href>
+			</Icon>
+		</IconStyle>
+	</Style>
+	<Folder>
+		<name>Geography Awareness Quiz</name>
+		<visibility>0</visibility>
+		<open>1</open>
+		<Snippet maxLines="2">
+To begin, please click text above for full instructions and then select a question below.		</Snippet>
+		<description><![CDATA[<table width="375" border="0" cellspacing="0" cellpadding="0">
+<tr><td><br>
+<font style="font-size: 12pt;">
+<br><b>Test Your Africa IQ</b><br>  How much do you know about Africa? Test yourself with this Geography Awareness quiz from My Wonderful World, a new National Geographic-led campaign for geographic literacy. <br><br>
+
+Why Africa? It's rich in wildlife and natural resources, diverse in peoples and cultures, and complicated in its history. And it's the first stop on My Wonderful World's multiyear exploration of our planet's people and places. <br><br>
+
+<b>How to Play</b><br>
+There are ten questions. You can double click each question to expand it and see the answers. Click on your answer to see if you are correct. Double clicking on an answer will take you to the specific location where you can take control and zoom in further and explore the geography in more detail. 
+
+<br><br>
+This quiz is best seen using Google Earth v.4 (beta).  This version provides the best viewing experience.  It is available for all major computing platforms including Windows, Linux and Macintosh.  Click <a href="http://earth.google.com"> here </a> if you need to download the latest version. </font>
+
+<br> <br>
+</b></td>
+</tr>
+</table>
+
+
+
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div>]]></description>
+		<Style>
+			<ListStyle>
+				<listItemType>radioFolder</listItemType>
+				<bgColor>ffffff</bgColor>
+			</ListStyle>
+		</Style>
+		<Folder>
+			<name>1) Which African city. . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+<b><font style="font-size: 12pt;">Which city's metropolitan area has the highest population in Africa?</b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+</b>
+</td>
+</tr></table>
+<br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /><br><br></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>1a. Johannesburg</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#ffffff"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/1a_joburg_southafrica.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Tomasz Tomaszewski/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><b><br>Wrong.</b><br><font style="font-size: 10pt;">Johannesburg, South Africa, and its suburbs are home to about 8 million people, who alone generate about 9 percent of the continent's economic activity. The modern city is a center for high-tech equipment production.</font><br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif"  border="0" /></a></div> <br><center><font style="font-size: 10pt;">
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><br> <center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>28.05018888888889</longitude>
+					<latitude>-26.14411388888889</latitude>
+					<altitude>0</altitude>
+					<range>999.9999999999999</range>
+					<tilt>0</tilt>
+					<heading>0</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy34</styleUrl>
+				<Point>
+					<coordinates>28.05018888888889,-26.14411388888889,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>1b. Cairo</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center> 
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#ffffff"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/1b_cairo.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Martin Gray/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">About 11,146,000 people live in the Cairo metropolitan area, making it the most populous in Africa. The Egyptian capital sits in the shadow of the millennia-old Pyramids of Giza. Most Egyptians are Arab Muslims, and Cairo has the largest population of any city in the Arab world.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<styleUrl>#default_copy62</styleUrl>
+				<Point>
+					<coordinates>31.24950833333334,30.064742,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>1c. Lagos</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#ffffff"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/1c_lagos_nigeria.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Stuart Franklin/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">The Lagos metropolitan area is the second most populous in Africa. About 11,135,000 people live in and around Lagos, a sprawling city crowded around a lagoon along Nigeria's Atlantic coast. Lagos was the country's capital until 1991, when the government seat was moved inland to Abuja. <br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif"  border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>3.422446507503461</longitude>
+					<latitude>6.458419085691453</latitude>
+					<altitude>0</altitude>
+					<range>46359.10429990524</range>
+					<tilt>39.34423981047778</tilt>
+					<heading>-13.57707817538443</heading>
+				</LookAt>
+				<styleUrl>#default_copy286</styleUrl>
+				<Point>
+					<coordinates>3.417977777777778,6.441158333333333,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>2) Which animal lives . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+<b><font style="font-size: 12pt;">Which animal lives in the wild only in Africa's tropical rain forests? </font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>2a. Lion</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/2a_kenya_savanna.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Jodi Cobb/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><font style="font-size: 10pt;"><br>African lions live in a range of habitats, including savanna grasslands and wooded forests. They are one of the only cat species to live in groups, usually centered on a pride of related females. In the open grasslands, lionesses do most of the hunting. Above: Lions rest on a Kenyan savanna.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>40.13362700507292</longitude>
+					<latitude>0.2350180723933065</latitude>
+					<altitude>0</altitude>
+					<range>45191.95155255838</range>
+					<tilt>0</tilt>
+					<heading>5.535850264770003</heading>
+				</LookAt>
+				<styleUrl>#default_copy40</styleUrl>
+				<Point>
+					<coordinates>40.1237844040148,0.2368,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>2b. Mountain Gorilla</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/2b_parc_des_volcans_rwanda.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Michael Nichols/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><b><br>Right!</b><br><font style="font-size: 10pt;">Mountain gorillas live in a small area of dense, moist mountain forests on the borders of Uganda, Rwanda, and the Democratic Republic of the Congo. They are the most endangered of all gorilla subspecies--only a few hundred survive in the wild today. Deforestation, competition with humans for natural resources, and poaching have contributed to their decline. Above, a male silverback gorilla keeps watch in Rwanda's Volcanoes National Park.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div><br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>29.44290765645494</longitude>
+					<latitude>-1.602569203064072</latitude>
+					<altitude>0</altitude>
+					<range>19842.62814931445</range>
+					<tilt>44.45112680976986</tilt>
+					<heading>5.166926154576439</heading>
+				</LookAt>
+				<styleUrl>#default_copy287</styleUrl>
+				<Point>
+					<coordinates>29.43263917992738,-1.548661896974892,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>2c. Hippopotamus</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center> 
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/2c_gabon_coast.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Michael Nichols/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><b><br>Wrong.</b><br><font style="font-size: 10pt;">Hippos are found in and around the rivers, lakes, and streams of sub-Saharan Africa. And as this photo shows, they sometimes take a swim in the ocean, as this one did in the Atlantic off the coast of Gabon. One of the largest land animals, hippos can weigh in at 8,000 pounds (3,600 kilograms). <br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>9.277398140274512</longitude>
+					<latitude>0.1449498612301484</latitude>
+					<altitude>0</altitude>
+					<range>95017.84906346114</range>
+					<tilt>51.14756320062427</tilt>
+					<heading>49.59047372189583</heading>
+				</LookAt>
+				<styleUrl>#default_copy279</styleUrl>
+				<Point>
+					<coordinates>9.294385745192528,0.2765590260623104,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>3) Which North Africa city was . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+<b><font style="font-size: 12pt;">Which West African city was once a major trans-Saharan trade center?</font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center><font style="font-size: 10pt;">
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>3a. Tripoli</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/3a_tripoli_libya.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Maynard Owen Williams/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><b><br>Wrong.</b><br><font style="font-size: 10pt;">Though important to trans-Saharan trade, Tripoli is a seaport located in North Africa's Libya. Known in ancient days as Oea, Tripoli was founded by the Phoenicians in the 7th century B.C. Many groups have since had control of the city, including the Romans (Roman carvings are pictured above), Turks, British, and Italians. Libya gained its independence in 1951 from the British with Tripoli serving as the present day capital.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>13.21541666615903</longitude>
+					<latitude>32.86058967667702</latitude>
+					<altitude>0</altitude>
+					<range>20339.99555879106</range>
+					<tilt>0</tilt>
+					<heading>-1.874836776633003</heading>
+				</LookAt>
+				<styleUrl>#default_copy47</styleUrl>
+				<Point>
+					<coordinates>13.187507,32.876175,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>3b. Kairouan</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/3b_quairouan_tunisia.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Martin Gray/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><b><br>Wrong.</b><br><font style="font-size: 10pt;">Founded in 670, Kairouan--in today's north-central Tunisia--was at one time the capital of northwest Africa. After losing the title to Tunis, Kairouan declined to an isolated market town. Today it remains a holy city and a major destination for many Muslims. Its great mosques (such as Sidi Oqba, above) have helped establish Kairouan as a UNESCO World Heritage site. <br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>10.80870196142269</longitude>
+					<latitude>35.62670278933847</latitude>
+					<altitude>0</altitude>
+					<range>191303.6432307965</range>
+					<tilt>47.80339288669114</tilt>
+					<heading>-55.00590108379907</heading>
+				</LookAt>
+				<styleUrl>#default_copy225</styleUrl>
+				<Point>
+					<coordinates>10.09723888888889,35.67713899999998,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>3c. Timbuktu</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/3c_timbuktu.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by James L. Stanfield/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">Timbuktu--located by the Niger River in the West African nation of
+Mali--was once a major trans-Saharan trade center, as well as a hub of
+Muslim learning. Timbuktu rose to prosperity as the capital of the
+Empire of Mali in the 14th century.  Today, the city is no longer a
+major commerce center, although local markets do lively business (as pictured above).
+<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>-2.987747311518331</longitude>
+					<latitude>16.77820437211259</latitude>
+					<altitude>0</altitude>
+					<range>55976.01041228427</range>
+					<tilt>0</tilt>
+					<heading>-0.4118112901784637</heading>
+				</LookAt>
+				<styleUrl>#default_copy213</styleUrl>
+				<Point>
+					<coordinates>-3.008263888888889,16.77532,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>4) Which African river . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+<b><font style="font-size: 12pt;">Which African river empties into the Mediterranean Sea?</font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>4a. Nile River</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center> 
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/4a_aswan_egypt.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Kenneth Garrett/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">The mighty Nile River--at 4,241 miles (6,825 kilometers) the longest river in the world--empties into the Mediterranean Sea in northern Egypt. Some 300 million people in ten countries&#151;Burundi, Democratic Republic of the Congo, Egypt, Eritrea, Ethiopia, Kenya, Rwanda, Sudan, Tanzania, and Uganda&#151;depend on the Nile for fresh water, irrigation, and other uses. Above, traditional boats called feluccas sail past ancient Egyptian tombs near Aswan.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>31.12945111553966</longitude>
+					<latitude>30.34250567523952</latitude>
+					<altitude>0</altitude>
+					<range>435968.4555239792</range>
+					<tilt>36.00051121596822</tilt>
+					<heading>172.2554257290521</heading>
+				</LookAt>
+				<styleUrl>#default_copy205</styleUrl>
+				<Point>
+					<coordinates>31.14034936106998,30.27329771849455,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>4b. Niger River</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/4b_niger.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Steve Raymer/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">The Niger River flows 2,591 miles (4,170 kilometers) through four countries--Guinea, Mali, Niger, and Nigeria--before emptying into the Atlantic Ocean. It's the continent's third-largest river basin, behind the Nile and the Congo. Above: A man bathes in the Niger near Niamey, Nigeria.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>2.082873039321956</longitude>
+					<latitude>13.49724028097576</latitude>
+					<altitude>0</altitude>
+					<range>36865.26533778878</range>
+					<tilt>3.322116455333664e-012</tilt>
+					<heading>3.368410835005136e-015</heading>
+				</LookAt>
+				<styleUrl>#default_copy83</styleUrl>
+				<Point>
+					<coordinates>2.06695,13.51942638776926,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>4c. Zambezi River</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/4c_zambezi_victoriafalls.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Michael Lewis/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">The approximately 2,200-mile-long (3,500-kilometer-long) Zambezi River collects water from eight countries, (Angola, Zambia, Namibia, Botswana, Zimbabwe, Tanzania, Malawi, and Mozambique) before emptying into the Indian Ocean. Its most spectacular feature is Victoria Falls (pictured above), some of the largest in the world. Its basin is the fourth largest in Africa.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>25.8587528393824</longitude>
+					<latitude>-17.92600493027436</latitude>
+					<altitude>0</altitude>
+					<range>935.2791040815609</range>
+					<tilt>39.54073429769228</tilt>
+					<heading>-32.59552950932385</heading>
+				</LookAt>
+				<styleUrl>#default_copy183</styleUrl>
+				<Point>
+					<coordinates>25.8567254073994,-17.924975766454,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>5) Which of the following peoples . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+<b><font style="font-size: 12pt;">Which of the following peoples are Pygmies?</font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>5a. Mbuti</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/5a_mbuti.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Randy Olson/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">The Mbuti are one of several Pygmy groups who still follow traditional, semi-nomadic ways in the Democratic Republic of the Congo's Ituri forest. Mbuti hunt antelope and other game and trade with Bantu farmers for vegetables and other goods. Above, a Mbuti boy takes part in a manhood initiation rite.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>28.62684451671583</longitude>
+					<latitude>1.905749860922417</latitude>
+					<altitude>0</altitude>
+					<range>239840.4344635223</range>
+					<tilt>4.124103886389701e-014</tilt>
+					<heading>-1.660736884512395</heading>
+				</LookAt>
+				<styleUrl>#default_copy82</styleUrl>
+				<Point>
+					<coordinates>28.5,2,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>5b. Tuareg</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center> 
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/5b_tuareg.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Thomas J. Abercrombie/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">The Tuareg live in northern Africa and are known for their distinctive indigo-blue veils. For centuries Tuareg ran camel caravans carrying salt, gold, and other goods across the Sahara. Today about 1.5 million Tuareg live in the desert regions of Mali, Algeria, and Nigeria. Most live in villages, but some still follow a semi-nomadic way of life. Pictured above: a Tuareg man near Hirafok, Algeria.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>5.74131878874518</longitude>
+					<latitude>23.60952214758823</latitude>
+					<altitude>0</altitude>
+					<range>49315.35969569878</range>
+					<tilt>55.67306173384687</tilt>
+					<heading>-3.103884572861034</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy40</styleUrl>
+				<Point>
+					<coordinates>5.756638888888888,23.66465000000002,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>5c. Maasai</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/5c_maasai.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Bruce Dale/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">The Maasai are the tall, traditional herdsmen of the African plains, distinctive for their red clothing. Also known as fierce warriors, the Maasai believe they are a chosen people because their god, Enkai, blessed them with cattle. Recently, the loss of grazing lands has threatened the Maasai's way of life. Above, a Maasai boy walks through Kenya's Amboseli National Park.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>36.78967706598959</longitude>
+					<latitude>-2.423666960962571</latitude>
+					<altitude>0</altitude>
+					<range>54867.80336366323</range>
+					<tilt>0</tilt>
+					<heading>-5.936028113719563</heading>
+				</LookAt>
+				<styleUrl>#default_copy91</styleUrl>
+				<Point>
+					<coordinates>36.8565782088114,-2.475678174297126,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>6) Lemurs are found . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+<b><font style="font-size: 12pt;">Lemurs are found in the wild in what African nation?</font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>6a. Ethiopia</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/6a_simen_np_ethiopia.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Michael Nichols/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">Ethiopia is home to many species, but not lemurs. Gelada monkeys (pictured above in Simen Mountains National Park) are found only in Ethiopia's high mountain meadows. They are the world's most terrestrial primates, except for humans, and spend most of their time sitting down, munching grass.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>37.99983897236904</longitude>
+					<latitude>13.07493340318747</latitude>
+					<altitude>0</altitude>
+					<range>158833.1247047728</range>
+					<tilt>51.59401306341926</tilt>
+					<heading>41.79018973534632</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy41</styleUrl>
+				<Point>
+					<coordinates>38.0666708301093,13.18328888888889,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>6b. Madagascar</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/6b_madagascar_lemur.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Tim Layman/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">Lemurs are found only on the large African island of Madagascar and on the tiny neighboring Comoros islands. Because of their isolation from the African mainland, these primates--like the ring-tailed lemur above--have few natural enemies and little competition for food.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>47.01026779511219</longitude>
+					<latitude>-20.29584049446486</latitude>
+					<altitude>0</altitude>
+					<range>473137.9701624967</range>
+					<tilt>42.69036973613356</tilt>
+					<heading>-12.89962144843126</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy43</styleUrl>
+				<Point>
+					<coordinates>47,-20,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>6c. Tanzania</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/6c_ngorongoro_tanzania.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Michael Melford/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">No lemurs live in the wild in Tanzania, but this east African nation is rich is other wildlife. The vast Serengeti Plain is home to cheetahs, wildebeests, giraffes, lions, leopards, and, of course, zebras (pictured above in Ngorongoro Crater National Park). Tanzania's wildlife also includes chimpanzees and elephants.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>35.41228145726366</longitude>
+					<latitude>-3.0197570675008</latitude>
+					<altitude>0</altitude>
+					<range>37056.80243859122</range>
+					<tilt>57.03791275551627</tilt>
+					<heading>-169.0465026119817</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy48</styleUrl>
+				<Point>
+					<coordinates>35.39800554327493,-2.987027357741647,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>7) Which desert is . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+<b><font style="font-size: 12pt;">Which desert is the largest in Africa?</font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>7a. Kalahari</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/7a_kalahari.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 10pt;">Photograph by Chris Johns/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">The Kalahari covers about 360,000 square miles (930,000 square kilometers) in Botswana, Namibia, and South Africa. Many San tribe people (pictured above) live a traditional life in the desert, tracking game for days across the dunes.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>21.50707212289631</longitude>
+					<latitude>-24.01869672631802</latitude>
+					<altitude>0</altitude>
+					<range>35903.32845437207</range>
+					<tilt>0</tilt>
+					<heading>0.06715631439127373</heading>
+				</LookAt>
+				<styleUrl>#default_copy02</styleUrl>
+				<Point>
+					<coordinates>21.5,-24,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>7b. Namib</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/7b_namib.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Bobby Haas/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;"><font style="font-size: 10pt;">Africa's unusual Namib Desert is a thin strip stretching 1,300 miles (2,100 kilometers) along the Atlantic coast. Though rain hardly ever falls in the Namib, a coastal fog frequently blankets the desert, and the misty condensation nourishes insect and plant life. Above, a gemsbok darts across the sand.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>11.99327363371217</longitude>
+					<latitude>-18.1097177807115</latitude>
+					<altitude>0</altitude>
+					<range>88089.35480627691</range>
+					<tilt>59.80525040142904</tilt>
+					<heading>30.58291347937831</heading>
+				</LookAt>
+				<styleUrl>#default_copy288</styleUrl>
+				<Point>
+					<coordinates>12,-18,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>7c. Sahara</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/7c_sahara.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Bruce Dale/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">It's not only the largest desert in Africa--it's the largest sandy desert in the world. The Sahara (which means "desert" in Arabic) sprawls across 3.5 million square miles  (9 million square kilometers) of northern Africa. Temperatures here can reach 130 degrees Fahrenheit (54 degrees Celsius) in the summer.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>10.39995678206803</longitude>
+					<latitude>20.72163722642274</latitude>
+					<altitude>0</altitude>
+					<range>222798.1056065551</range>
+					<tilt>60.08866378395121</tilt>
+					<heading>132.8433688148318</heading>
+				</LookAt>
+				<styleUrl>#default_copy295</styleUrl>
+				<Point>
+					<coordinates>10.452375,20.83769027222241,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>8) Darfur, the site of an ongoing . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+<b><font style="font-size: 12pt;">Darfur, the site of an ongoing armed conflict, is in what African country?</font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>8a. Liberia</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/8a_monrovia_liberia.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Chris Hamilton/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">Darfur is not in Liberia, although the West African nation is no stranger to violence. A 1989 revolt by guerrilla leader (and later President) Charles Taylor sent the country into seven years of civil war. Recently, rebels attempting to oust Taylor waged attacks on government forces and the capital, Monrovia, leaving thousands dead and the economy in ruins.  Above, bullet holes scar a pole on a Monrovia street.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>-10.7709649676627</longitude>
+					<latitude>6.323300598190295</latitude>
+					<altitude>0</altitude>
+					<range>11135.56299821363</range>
+					<tilt>56.85244112115768</tilt>
+					<heading>36.1406600489798</heading>
+				</LookAt>
+				<styleUrl>#default_copy305</styleUrl>
+				<Point>
+					<coordinates>-10.79716111111111,6.300773999999998,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>8b. Sudan</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/8b_darfur_sudan.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Randy Olson/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">Darfur, a France-size province in western Sudan, is the site of an ongoing conflict between government-backed Arab militiamen (the Janjaweed) and non-Arab villagers. Thousands have been killed and millions displaced since the conflict began in July 2003, and famine caused by the civil war threatens countless more lives. Above, refugees from Darfur wait in line for food in Khartoum, the Sudanese capital.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>25.91507190292168</longitude>
+					<latitude>13.41436458026717</latitude>
+					<altitude>0</altitude>
+					<range>1927746.929124755</range>
+					<tilt>7.669574746621892e-013</tilt>
+					<heading>0.1064578705162231</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy20</styleUrl>
+				<Point>
+					<coordinates>25.22645669376122,14.15929921797515,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>8c. Angola</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/8c_chela_escarpment_angola.jpg" width="320" height="225
+" border="0"><br><i><font style="font-size: 9pt;">Photograph by Volkmar K. Wentzel/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">Darfur is not in Angola, but a 27-year-old civil war devastated the southwest African country before its end in 2002. The fighting between different factions began after the nation achieved its independence from Portugal in 1975. As many as one million people may have been killed in the conflict, and millions more were driven from their homes. Above: An Angolan man on the Chela escarpment.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>13.50869627912583</longitude>
+					<latitude>-15.50536548061268</latitude>
+					<altitude>0</altitude>
+					<range>322785.6618196241</range>
+					<tilt>0</tilt>
+					<heading>-1.590877448495523</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy1</styleUrl>
+				<Point>
+					<coordinates>13.5,-15.5,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>9) Botswana is . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+
+<b><font style="font-size: 12pt;">Botswana is the world's largest producer of which natural resource?</font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>9a. Gold</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/9a_joburg_gold.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 10pt;">Photograph by Tomasz Tomaszewski/National Geographic Image Collection</font></i><br><font style="font-size: 14pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">South Africa, not Botswana, leads the world in gold production. In 2004, the country's mines produced 342 tons of gold (shown formed into bars, above). The TauTona gold mine near Johannesburg is the deepest operating mine in the world--it takes workers two hours to descend in three different elevators to the deepest level, 2.2 miles (3.5 kilometers) beneath the Earth. <br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>28.05018888888889</longitude>
+					<latitude>-26.14411388888889</latitude>
+					<altitude>0</altitude>
+					<range>19460.11903319473</range>
+					<tilt>0</tilt>
+					<heading>-2.105967123948718</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy38</styleUrl>
+				<Point>
+					<coordinates>28.05018888888889,-26.14411388888889,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>9b. Diamonds</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/9b_botswana_diamonds.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Cary Wolinsky/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">Botswana leads the world in the production of gemstone-quality diamonds by value. Above, colossus company De Beers' massive mine in Orapa lights up the sky. In some countries, "blood diamonds" or "conflict diamonds" have been linked to atrocities committed by rebel groups or corrupt governments.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>25.39553772543582</longitude>
+					<latitude>-21.3098488725086</latitude>
+					<altitude>0</altitude>
+					<range>11937.81034555814</range>
+					<tilt>3.622602342458578e-012</tilt>
+					<heading>-0.5290069183789953</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy4</styleUrl>
+				<Point>
+					<coordinates>25.3697851749283,-21.30724444444445,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>9c. Oil</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+ 
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/9c_hassi_messaoud_algeria.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Robert Sisson/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><font style="font-size: 10pt;"><br>Nigeria is the largest producer of crude oil in Africa and the 10th-largest in the world. Oil in Africa is often associated with problems: pollution, environmental impact, and corruption. Above, natural gas that can't be used is burned off in Hassi Messaoud, Algeria.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>6.118180190041279</longitude>
+					<latitude>31.67916983273997</latitude>
+					<altitude>0</altitude>
+					<range>16317.44742823764</range>
+					<tilt>0</tilt>
+					<heading>-0.8748470438642249</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy6</styleUrl>
+				<Point>
+					<coordinates>6.072809999999999,31.67927777777778,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+		<Folder>
+			<name>10) What African nation was . . .</name>
+			<visibility>0</visibility>
+			<open>1</open>
+			<Snippet maxLines="2">
+Double-click the text to see the full question and answers.			</Snippet>
+			<description><![CDATA[<table width="350" border="0" cellspacing="2" cellpadding="1">
+<tr>
+<td>
+
+<b><font style="font-size: 12pt;">Which African nation was a German colony at the onset of World War I?  </font></b> <br><br>
+Please select your answer at left.  Double-click on your answer to fly to the location.
+
+</b></td>
+</tr>
+</table><br><br><div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></div></a><br />
+<hr>
+<center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/lindblad_sweeps.html">win a great family adventure</a>
+ from My Wonderful World! <br>
+
+© 2006 National Geographic Society. All rights reserved. </center>]]></description>
+			<LookAt>
+				<longitude>21.73180395266385</longitude>
+				<latitude>3.697984095493815</latitude>
+				<altitude>0</altitude>
+				<range>9439873.881185547</range>
+				<tilt>3.768213458211803e-014</tilt>
+				<heading>-0.8503261966065551</heading>
+			</LookAt>
+			<Style>
+				<ListStyle>
+					<listItemType>radioFolder</listItemType>
+					<bgColor>ffffff</bgColor>
+				</ListStyle>
+			</Style>
+			<Placemark>
+				<name>10a. Cameroon</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/10a_cameroon.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Michael Lewis/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Right!</b><br><font style="font-size: 10pt;">Germany took control of the West African nation it called Kamerun in 1884. After Germany's defeat in World War I, Cameroon became a League of Nations mandate territory and was split between Britain and France. French Cameroun became independent in 1960, and southern British Cameroons joined it a year later. (Northern British Cameroons joined Nigeria.) Above, a Baka woman works in a cassava field in Bosquet.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>11.99976297302654</longitude>
+					<latitude>6.001077388930634</latitude>
+					<altitude>0</altitude>
+					<range>357501.3937127187</range>
+					<tilt>0</tilt>
+					<heading>2.102259821597294e-005</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy50</styleUrl>
+				<Point>
+					<coordinates>12,6,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>10b. Senegal</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/10b_senegal.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Bobby Haas/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">As part of French West Africa, Senegal was in France's possession for three centuries until its independence in 1960. French is still the main language spoken in the coastal nation. Above, pits filled with dyes for coloring fabrics dot the Sine-Saloum Delta.  <br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>-16.59994637604361</longitude>
+					<latitude>13.78771599238869</latitude>
+					<altitude>0</altitude>
+					<range>102743.2661134889</range>
+					<tilt>42.09771229863505</tilt>
+					<heading>101.7336774856064</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy32</styleUrl>
+				<Point>
+					<coordinates>-16.66485940148185,13.75088079491031,0</coordinates>
+				</Point>
+			</Placemark>
+			<Placemark>
+				<name>10c. Mozambique</name>
+				<visibility>0</visibility>
+				<Snippet maxLines="2">
+Double-click the answer to fly there and see if you&apos;re right.				</Snippet>
+				<description><![CDATA[<center><b>Geography Awareness Quiz<br>
+Test Your Africa IQ</b></center>
+<table width="340" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF"> <tr border="0"> <td border="0"><img src="http://services.google.com/earth/layers/gaw/10c_mozambique.jpg" width="320" height="225" border="0"><br><i><font style="font-size: 9pt;">Photograph by Chris Johns/National Geographic Image Collection</font></i><br><font style="font-size: 12pt;"><br><b>Wrong.</b><br><font style="font-size: 10pt;">Portugal set up trading posts in Mozambique as early as the 1500s, gradually expanding until it was in control of the southeast African country. Its possession lasted until Mozambique achieved independence in 1975. Above, a fisherman heads to sea off the coast of Vilanculos.<br><br><br><hr>
+<div align="center"><a href="http://www.mywonderfulworld.org"><img src="http://services.google.com/earth/layers/gaw/mww_logo.gif" border="0" /></a></div> <br><center>
+<a href="http://www.mywonderfulworld.org/gaw.html">Learn more about Africa</a> and enter to <a href="http://www.mywonderfulworld.org/gaw.html">win a great family adventure</a>
+ from My Wonderful World! </font><br><center><font style="font-size: 7pt;">&copy; 2006 National Geographic Society.  All rights reserved.</font></center> </td> </tr> </table>]]></description>
+				<LookAt>
+					<longitude>35.35753907164581</longitude>
+					<latitude>-22.01315240306674</latitude>
+					<altitude>0</altitude>
+					<range>65382.25062820967</range>
+					<tilt>52.32471077300583</tilt>
+					<heading>-46.30054175825062</heading>
+				</LookAt>
+				<styleUrl>#default_copy:0_copy33</styleUrl>
+				<Point>
+					<coordinates>35.3167,-22.0167,0</coordinates>
+				</Point>
+			</Placemark>
+		</Folder>
+	</Folder>
+</Document>
+</kml>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/TurnHere_films.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/TurnHere_films.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/TurnHere_films.kml	(revision 42196)
@@ -0,0 +1,1911 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<?xml version="1.0"?>
+<kml xmlns="http://earth.google.com/kml/2.0">
+<Document>
+
+ <LookAt>
+    <longitude>-97.05580139178142</longitude>
+    <latitude>38.870832443487</latitude>
+    <range>6997742.0552506670548</range>
+    <tilt>0.09646074797388</tilt>
+    <heading>0.88865561738225</heading>
+  </LookAt>
+
+<Style id="turnhere-A">
+<IconStyle>
+<scale>1</scale>
+<Icon>
+<href>http://www.turnhere.com/images_logo/TH_bug_120.jpg</href>
+<x>30</x>
+<w>120</w>
+<h>120</h>
+</Icon>
+</IconStyle>
+<LabelStyle>
+<scale>1</scale>
+</LabelStyle>
+<BalloonStyle>
+<text><![CDATA[<b>$[name]</b><br><br>$[description]]]></text>
+</BalloonStyle>
+</Style>
+<Style id="turnhere-B">
+<IconStyle>
+<scale>1.2</scale>
+<Icon>
+<href>http://www.turnhere.com/images_logo/TH_bug_120.jpg</href>
+<x>30</x>
+<w>120</w>
+<h>120</h>
+</Icon>
+</IconStyle>
+<LabelStyle>
+<scale>1.2</scale>
+</LabelStyle>
+<BalloonStyle>
+<text><![CDATA[<b>$[name]</b><br><br>$[description]]]></text>
+</BalloonStyle>
+</Style>
+<StyleMap id="turnhere-C">
+<Pair>
+<key>normal</key>
+<styleUrl>#turnhere-A</styleUrl>
+</Pair>
+<Pair>
+<key>highlight</key>
+<styleUrl>#turnhere-B</styleUrl>
+</Pair>
+</StyleMap>
+
+<Placemark>
+<name>22nd &amp; Mission</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/22ndmission.jpg"></div>The Mission's musical history includes legends such as Santana, Jonathan Richman and Herbie Hancock.  And you still might see Norah Jones performing live for $5.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=22ndmission">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.4187,37.7555,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Palace Hotel</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/thepalace.jpg"></div>Dubbed the Gateway to the West, the luxurious Palace Hotel is a San Francisco icon dating back to the early 1900s.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=thepalace">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.402017,37.788601,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Nob Hill</name>
+<description>
+<![CDATA[Albuquerque, NM<div align="center"><img src="http://www.turnhere.com/jpg/albuquerque_nob.jpg"></div>The neighborhood's gone crazy!  Located just off Route 66, Nob Hill's finally on the map.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=albuquerque_nob">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-106.606707,35.079839,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Allston Rocks!</name>
+<description>
+<![CDATA[Boston MA<div align="center"><img src="http://www.turnhere.com/jpg/allston.jpg"></div>Allston is Boston's Rock City-- go underground with local musicians and check out this town's indie rock scene.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=allston">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.130579,42.350193,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Little 5 Points</name>
+<description>
+<![CDATA[Atlanta, GA<div align="center"><img src="http://www.turnhere.com/jpg/atl_little5.jpg"></div>If you're looking for fun and a little counter-culture, come to Little 5 Points, a "bohemian jewel" just outside Atlanta.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=atl_little5">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-84.349567,33.765078,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>McLendon Avenue</name>
+<description>
+<![CDATA[Atlanta, GA<div align="center"><img src="http://www.turnhere.com/jpg/atl_mclendon.jpg"></div>McLendon Avenue isn't just a street, it's a lifetyle.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=atl_mclendon">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-84.333374,33.764663,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Small Town Atwater</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/atwater.jpg"></div>Atwater-- a small town in the the big city.  This up &amp; coming neighborhood boasts family-owned coffee shops, galleries and quirky boutiques.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=atwater">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.2605,34.07812,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Luxury in Baan Kata Villa</name>
+<description>
+<![CDATA[Phuket, Thailand<div align="center"><img src="http://www.turnhere.com/jpg/baankatavilla.jpg"></div>Everything is different once you step into this luxurious and welcoming villa on the Thai coast.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=baankatavilla">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>98.4, 7.883333,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Ballard - Seattle</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/ballard.jpg"></div>Ballard is fiercely proud and protective of its heritage and local character.  Enjoy fish caught straight from the sea or take in a roots &amp; Americana music show.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ballard">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.33128,47.676,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Belltown Music Scene</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/belltown.jpg"></div>Come dig through the roots of the Seattle music scene in this relaxed yet vibrant neighborhood.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=belltown">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.34302,47.61608,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Belmont Shore</name>
+<description>
+<![CDATA[Long Beach, CA<div align="center"><img src="http://www.turnhere.com/jpg/belmont_longbeach_ca_us.jpg"></div>Shop 'til you drop in Belmont Shore-- for a sweetie, a doggie or  yourself.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=belmont_longbeach_ca_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.134473,33.759893,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Bleecker Street</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/bleecker.jpg"></div>There's nothing bleak about this famous stretch of Manhattan where you can shop designer labels and find 300 kinds of cheese.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=bleecker">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.003343,40.731518,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Venice Boardwalk</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/boardwalk_venice_ca_us.jpg"></div>With 360 days of sun and fun, Venice has something for everyone.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=boardwalk_venice_ca_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.473852,33.987349,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Kenmore Square</name>
+<description>
+<![CDATA[Boston, MA<div align="center"><img src="http://www.turnhere.com/jpg/bost_kenmore.jpg"></div>Don't let the boring name fool you-- the nightlife and singles scene in Kenmore Square is hoTT-- with two Ts.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=bost_kenmore">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.094297,42.347454,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Brattleboro</name>
+<description>
+<![CDATA[Brattleboro, VT<div align="center"><img src="http://www.turnhere.com/jpg/brattleboro_vt_us.jpg"></div>Is Brattleboro really the San Francisco of the east?  You decide for yourself.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=brattleboro_vt_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-72.558665,42.852108,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Central Market</name>
+<description>
+<![CDATA[Sao Paulo, Brazil<div align="center"><img src="http://www.turnhere.com/jpg/brazil_market.jpg"></div>The Central Market in Sao Paulo is the best place to learn about authentic Brazilian cuisine.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=brazil_market">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-46.374801,-23.314800,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Bronzeville's New Song</name>
+<description>
+<![CDATA[Chicago, IL<div align="center"><img src="http://www.turnhere.com/jpg/bronzeville.jpg"></div>The historic Bronzeville neighborhood of Chicago was the birthplace of the Negro Baseball League, and it's the home of soul legend Otis Clay.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=bronzeville">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-87.619583,41.816463,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Burlington</name>
+<description>
+<![CDATA[Burlington, VT<div align="center"><img src="http://www.turnhere.com/jpg/burlington_tour.jpg"></div>Burlington may be Vermont's largest city, but in spirit it's small and hip.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=burlington_tour">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.216447,44.480437,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Swift Street</name>
+<description>
+<![CDATA[Santa Cruz, CA<div align="center"><img src="http://www.turnhere.com/jpg/ca_cruz_swift.jpg"></div>The new scene on Santa Cruz's west side offers socially and environmentally conscious decadence.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ca_cruz_swift">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.047418,36.958779,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Gangster L.A.</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/ca_la_gangster.jpg"></div>Before gangstas, there were gangsters in Los Angeles.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ca_la_gangster">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.287519,34.111734,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>MacArthur Park</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/ca_la_macarthur.jpg"></div>Everything is everything in the friendly, undiscovered neighborhood of MacArthur Park in Los Angeles.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ca_la_macarthur">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.274069,34.056959,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Geary Gallery Stroll</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/ca_sf_gearyart.jpg"></div>Dozens of art galleries on Geary Street highlight their new works and installations on the first Thursday of each month.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ca_sf_gearyart">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.404194,37.787719,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>San Francisco Tango Life</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/ca_sf_tango.jpg"></div>Do the tango and dance cheek to cheek with a stranger in San Francisco.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ca_sf_tango">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.407652,37.763302,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Inman Square</name>
+<description>
+<![CDATA[Cambridge, MA<div align="center"><img src="http://www.turnhere.com/jpg/cambridge_inman.jpg"></div>Inman Square's the place to satisfy sophisicated palettes-- whether your medium is food, clothing or jazz.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=cambridge_inman">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.10008,42.373511,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Canter's Deli</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/canters.jpg"></div>You haven't experienced food utopia until you've experienced Canter's in the Fairfax District of L.A.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=canters">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.361665,34.078652,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Cardiff by the Sea</name>
+<description>
+<![CDATA[Cardiff, CA<div align="center"><img src="http://www.turnhere.com/jpg/Cardiff.jpg"></div>It's always sun and surf time in this beachfront community nestled between L.A. and San Diego.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=Cardiff">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.282523,33.021429,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Carlisle</name>
+<description>
+<![CDATA[Carlisle, PA<div align="center"><img src="http://www.turnhere.com/jpg/carlisle_tour.jpg"></div>The "greatest small town in the world" features the largest Corvette car show in the world.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=carlisle_tour">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-77.190547,40.201505,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Castro</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/castro.jpg"></div>A gay and lesbian mecca, the Castro is a friendly, welcoming place with a one-of-a-kind movie theater, unique shops, great dining and one of San Francisco's sunnier micro-climates.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=castro">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.43496,37.762059,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Cedros Design District</name>
+<description>
+<![CDATA[Solana Beach, CA<div align="center"><img src="http://www.turnhere.com/jpg/cedrosdesign.jpg"></div>For the beachgoer who has everything and the dog who wants it all, there's the Cedros Design District.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=cedrosdesign">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.270373,32.990298,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Central Park Hookup</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/centralpark.jpg"></div>If you need a nature fix in the concrete jungle, head to Central Park for some boarding, blading or boogeying.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=centralpark">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.979255,40.766972,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Gold Coast</name>
+<description>
+<![CDATA[Chicago, IL<div align="center"><img src="http://www.turnhere.com/jpg/chic_goldcoast.jpg"></div>If you've got money to blow, Chicago's Gold Coast is the place to go.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=chic_goldcoast">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-87.62838,41.902956,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Chicano Park</name>
+<description>
+<![CDATA[San Diego, CA<div align="center"><img src="http://www.turnhere.com/jpg/chicanopark.jpg"></div>Skateboarders and families mingle in Chicano Park and its farmers market, located just 20 minutes from the Mexican border.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=chicanopark">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.1449,32.7063,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Chinatown</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/chinatown.jpg"></div>San Francisco's Chinatown is the largest and most commercial in North America.  This touristy district is an explosion of exotic smells, sights and tastes.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=chinatown">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.405323,37.796444,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Canal Street</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/chinatown_NY.jpg"></div>New York private eye Dempster Leech weaves a tale of the restaurants, shops and people of Chinatown from the early 1800s to the present.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=chinatown_NY">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.009765,40.725231,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Chinatown L.A.</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/chinatownla.jpg"></div>It's east meets west and old meets new in L.A.'s Chinatown.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=chinatownla">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.237124,34.06439,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Mt. Adams</name>
+<description>
+<![CDATA[Cincinnati, OH<div align="center"><img src="http://www.turnhere.com/jpg/cin_mtadams.jpg"></div>Get a bird's eye view of Cincinnati's best from Mt. Adams.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=cin_mtadams">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-84.496699,39.107163,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Coconut Grove</name>
+<description>
+<![CDATA[Miami, FL<div align="center"><img src="http://www.turnhere.com/jpg/coconutgrove.jpg"></div>It's a slick, hip tourist spot, but there's room for history and science geeks in Coconut Grove.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=coconutgrove">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-80.237588,25.73052,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Downtown Columbia</name>
+<description>
+<![CDATA[Columbia, MO<div align="center"><img src="http://www.turnhere.com/jpg/columbia_mo_us.jpg"></div>Although it's technically a small town, there are big city things to do in Columbia.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=columbia_mo_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-92.327775,38.949179,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Concord</name>
+<description>
+<![CDATA[Concord, MA<div align="center"><img src="http://www.turnhere.com/jpg/concord_historic.jpg"></div>Hop a train to Concord and explore the nexus of the American Revolution and revolutionary philosophy.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=concord_historic">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.356778,42.456563,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Coyoacan</name>
+<description>
+<![CDATA[Mexico City, NA<div align="center"><img src="http://www.turnhere.com/jpg/coyoacan_mexicocity_mx.jpg"></div>Take the cobblestone streets of this bohemian neighborhood past historic churches and colonial houses to the Mercado de Coyoacan and then head to a traditional cantina and quench your thirst with some pulke-- if you dare.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=coyoacan_mexicocity_mx">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-99.130588,19.410636,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>One World: Crown Heights</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/crownheights.jpg"></div>There are many worlds and cultures in Crown Heights and somehow, they all manage to get along.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=crownheights">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.0044,40.7204,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Cruzin' in Santa Cruz</name>
+<description>
+<![CDATA[Santa Cruz, CA<div align="center"><img src="http://www.turnhere.com/jpg/cruz.jpg"></div>Feed your inner vegan and cruise over to this university beach town for surfing, restored Victorians, outdoor cafes and a funky, hippie vibe.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=cruz">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.0248,36.9692,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Davis</name>
+<description>
+<![CDATA[Davis, CA<div align="center"><img src="http://www.turnhere.com/jpg/davis_uc.jpg"></div>Is there more to Davis than Aggie culture?<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=davis_uc">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-121.748027,38.540629,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Decatur</name>
+<description>
+<![CDATA[Decatur, GA<div align="center"><img src="http://www.turnhere.com/jpg/decatur_downhome.jpg"></div>For a low-key, downhome day or night on the town, head to Decatur.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=decatur_downhome">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-84.295934,33.775096,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hamlet's Elsinore</name>
+<description>
+<![CDATA[Elsinore, Denmark<div align="center"><img src="http://www.turnhere.com/jpg/den_elsinore.jpg"></div>Immortalized by Shakespeare's play, Kronberg Castle lures Hamlet buffs and tourists to the small town of Elsinore.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=den_elsinore">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>10,56,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Dog Beach</name>
+<description>
+<![CDATA[San Diego, CA<div align="center"><img src="http://www.turnhere.com/jpg/dogbeach.jpg"></div>Take your best friend to pooch paradise at San Diego's only off-leash dog-friendly beach.<br/><a href=http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=dogbeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.245603,32.751249,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Downtown Santa Barbara</name>
+<description>
+<![CDATA[Santa Barbara, CA<div align="center"><img src="http://www.turnhere.com/jpg/downtownsantabarbara.jpg"></div>This beautiful coastal town has beaches, shopping, dining and did I mention beaches?<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=downtownsantabarbara">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-119.70466,34.42358,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Downtown Sarasota</name>
+<description>
+<![CDATA[Sarasota, FL<div align="center"><img src="http://www.turnhere.com/jpg/downtownsarasota.jpg"></div>Sarasota has big city culture and a small town feel. And it's one of the only cities in Florida with a downtown that's right on the waterfront.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=downtownsarasota">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-82.5358,27.35854,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Dupont Circle</name>
+<description>
+<![CDATA[Washington, DC<div align="center"><img src="http://www.turnhere.com/jpg/dupontcircle.jpg"></div>In the heart of Washington DC, DuPont Circle is an upscale neighborhood, attracting a diverse group of professionals and creatives.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=dupontcircle">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-77.0415,38.9074,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Eastside Nashville</name>
+<description>
+<![CDATA[Nashville, TN<div align="center"><img src="http://www.turnhere.com/jpg/eastside_nashville_tn_us.jpg"></div>Nashville owes its reputation as "Music City USA" in large part to the hard-working muscians on the Eastside who are fueled by great beer and cool bars.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=eastside_nashville_tn_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-86.750182,36.176687,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Echo Park</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/EchoPark.jpg"></div>Located between North Hollywood and downtown L.A., Echo Park had a bad rep, but it's now a magnet for hipsters and celebrities.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=EchoPark">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.2648,34.078,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Fernandina Beach</name>
+<description>
+<![CDATA[Fernandina Beach, FL<div align="center"><img src="http://www.turnhere.com/jpg/FernandinaBeach.jpg"></div>Head north to this shrimping community for spectacular surfing, undeveloped beaches and the oldest--and possibly haunted-- saloon in Florida.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=FernandinaBeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-81.464798,30.671537,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Lamarck-Caulaincourt</name>
+<description>
+<![CDATA[Paris, France<div align="center"><img src="http://www.turnhere.com/jpg/fr_lamarck.jpg"></div>Get away from the tourist hordes and visit this unspoiled slice of Montmartre called Lamarck-Caulaincourt.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=fr_lamarck">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>2.338159,48.889138,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Fremont</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/fremont.jpg"></div>Ever seen a SCUD missile up close and personal or been to the center of the universe?  Then you've never been to Fremont.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=fremont">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.3499,47.6505,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Georgetown Revealed</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/georgetown.jpg"></div>Planes, trains &amp;... art?  In the shadow of an airport, railroad tracks and freeway, Georgetown is nevertheless a thriving arts community with great bars and historic buildings.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=georgetown">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.316844,47.549004,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Little Armenia-Glendale</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/glendale.jpg"></div>Take a large ethnic Armenian community, add a small town feel, mix in one of the biggest malls in the nation, and you get the melting pot of Glendale.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=glendale">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.2639,34.1537,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Gourmet Ghetto</name>
+<description>
+<![CDATA[Berkeley, CA<div align="center"><img src="http://www.turnhere.com/jpg/gourmetghetto.jpg"></div>Eat your way through this Berkeley foodie mecca.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=gourmetghetto">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.26945,37.87999,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Grand Lake Movie Palace</name>
+<description>
+<![CDATA[Oakland, CA<div align="center"><img src="http://www.turnhere.com/jpg/grandlake.jpg"></div>An historic theater built in 1926 with beautiful architecture and live organ recitals before each film.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=grandlake">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.247666,37.811472,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Greenpoint - Brooklyn</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/greenpoint.jpg"></div>A spit away from Manhattan is Greenpoint, an authentic Brooklyn neighborhood of tough guys and families with kids. Oh and then there's the &amp;quot;Murder Bar...&amp;quot;<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=greenpoint">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.946,40.7264,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Haight Ashbury</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/haight.jpg"></div>The 60's are long gone, but the psychedelic vibe and pipe shops remain in this colorful neighborhood.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=haight">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.4469,37.77,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hale'iwa</name>
+<description>
+<![CDATA[Oahu, HI<div align="center"><img src="http://www.turnhere.com/jpg/haleiwa_oahu_hi_us.jpg"></div>Aloha!  Hale'iwa, a small, quaint town on the North Shore of Oahu, welcomes visitors with spectacular beaches, great surfing, fragrant pineapple fields and Hawaii's ubiquitous delicacy, shave ice.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=haleiwa_oahu_hi_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-158.0673,21.621,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hamakua Coast</name>
+<description>
+<![CDATA[Hilo, HI<div align="center"><img src="http://www.turnhere.com/jpg/hamakuacoast.jpg"></div>Tucked off the beaten path, the Hamakua Coast is a hidden treasure on the Big Island of Hawaii.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hamakuacoast">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-155.064445,19.719763,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Rockin' in Hamtramck</name>
+<description>
+<![CDATA[Detroit, MI<div align="center"><img src="http://www.turnhere.com/jpg/hamtramck.jpg"></div>This blue-collar enclave in the middle of Detroit has evolved into Mo-Town's rock 'n roll epicenter.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hamtramck">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-83.0465,42.3799,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Harlem Arts</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/HARLEM.jpg"></div>Harlem's rich arts history and world famous School of the Arts makes it the destination for aspiring dancers and performers.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=HARLEM">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.945867,40.822183,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hayes Valley</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/hayesvalley.jpg"></div>Expect the unexpected in this now upscale neighborhood-- hip salons, indie boutiques and beer with breakfast.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hayesvalley">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.426402,37.776139,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hell's Kitchen</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/HellsKitchen.jpg"></div>Take a walk on the wild side through the edgy and colorful Hell's Kitchen 
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9912,40.7604,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>High Street Caffe</name>
+<description>
+<![CDATA[West Chester, PA<div align="center"><img src="http://www.turnhere.com/jpg/highstreet.jpg"></div>An exotic Cajun menu that includes ostrich, wild boar, rattlesnake,elk and kangaroo.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=highstreet">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-75.601811,39.957019,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Half Moon Bay</name>
+<description>
+<![CDATA[Half Moon Bay, CA<div align="center"><img src="http://www.turnhere.com/jpg/hmb_coffee.jpg"></div>Half Moon Bay can't rival Seattle in the sheer number of coffee houses within its limits, but maybe it's not all about quantity.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hmb_coffee">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.428846,37.465258,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hoboken Days</name>
+<description>
+<![CDATA[Hoboken, NJ<div align="center"><img src="http://206.14.210.5/movies/peter/turnhere/jpg/hoboken_day.jpg"></div>Get re-energized by Hoboken.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hoboken_day">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.029182,40.742626,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hoboken Nights</name>
+<description>
+<![CDATA[Hoboken, NJ<div align="center"><img src="http://www.turnhere.com/jpg/hobokennights.jpg"></div>You can play hard, work hard and get stuck on Hoboken.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hobokennights">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.027142,40.739701,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hollywood &amp; Highland</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/HOLLYWOODANDHIGHLAND.jpg"></div>Join Quacker for a tour through the heart of Hollywood and its qwacky characters.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=HOLLYWOODANDHIGHLAND">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.3387,34.1016,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Million Bucks: Hollywood</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/hollywoodblvd.jpg"></div>It's Day of the Locust meets The Wizard of Oz in this trippy look at Hollywood Boulevard's past and present.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hollywoodblvd">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.337949,34.101737,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Party Time in Hongdae</name>
+<description>
+<![CDATA[Seoul, South Korea<div align="center"><img src="http://www.turnhere.com/jpg/hongdae.jpg"></div>Put on your drinking caps and get ready to paaaaarty in the college town of Hongdae!<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=hongdae">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>126.95744,37.532308,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Houston Street</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/houston_ny_ny_us.jpg"></div>It's pronounced HOW-ston and it's not to be confused with any place that's not authentically New York.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=houston_ny_ny_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.990124,40.723193,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Reykjavik</name>
+<description>
+<![CDATA[Reykjavik, Iceland<div align="center"><img src="http://www.turnhere.com/jpg/ice_reykjavik.jpg"></div>Despite its name, Iceland is a hot and happenin' place.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ice_reykjavik">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-21.950137,64.150121,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Indian Rocks Beach</name>
+<description>
+<![CDATA[Indian Rocks Beach, FL<div align="center"><img src="http://www.turnhere.com/jpg/indianrockbeach.jpg"></div>In the idyllic coastal town of Indian Rocks Beach, the fish is fresh and the Cuban sandwiches a thing of beauty.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=indianrockbeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-82.8504,27.8826,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Isla Vista</name>
+<description>
+<![CDATA[Isla Vista, CA<div align="center"><img src="http://www.turnhere.com/jpg/islavista.jpg"></div>You can always find a party and a cold one in Isla Vista, the quintessential college town.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=islavista">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-119.857912,34.411763,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Italian Market</name>
+<description>
+<![CDATA[Philadelphia, PA<div align="center"><img src="http://www.turnhere.com/jpg/italianmarket.jpg"></div>Customers of Philly's outdoor Italian Market have been treated to fresh, authentic food and personalized attention for generations.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=italianmarket">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-75.158204,39.937978,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Koreatown, L.A.</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/koreatown.jpg"></div>It may look like a bunch of strip malls to outsiders, but it's as authentically Korean as you can get outside of Korea.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=koreatown">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.3091,34.0559,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Mardi Gras-New Orleans</name>
+<description>
+<![CDATA[New Orleans, LA<div align="center"><img src="http://www.turnhere.com/jpg/krewe_neworleans_la_us.jpg"></div>Recovering from the country's worst natural disaster, residents of the Big Easy are putting their best foot forward to continue the tradition of Mardi Gras.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=krewe_neworleans_la_us">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-90.07228,29.9437,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>L.A. Without a Car</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/la.jpg"></div>Can you live without a car in L.A, the epicenter of America's automobile obsession?<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.24126,34.02956,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Artist District</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/la_artistdistrict.jpg"></div>The artists and businesses in this L.A. neighborhood support each other.  Come support both.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la_artistdistrict">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.236889,34.045563,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Little Ethiopia</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/la_ethiopia.jpg"></div>Forget what your mama told you-- it's OK eat with your hands, at least in Little Ethiopia.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la_ethiopia">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.364185,34.057068,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Fairfax District</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/la_fairfaxfood.jpg"></div>Generations of Angelenos have come to the Fairfax District to patronize institutions like Canter's Deli and the Farmer's Market.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la_fairfaxfood">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.360023,34.071495,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Leimert Park</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/la_leimert.jpg"></div>This neighborhood in South Los Angeles awaits discovery by a new generation.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la_leimert">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.331577,34.005793,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>West Hollywood</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/la_weho.jpg"></div>Where does Angelina Jolie get her nails done?  Master the fine art of name-dropping in this tour of West Hollywood.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la_weho">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.378719,34.088468,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>West on Wilshire Blvd.</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/la_wilshire.jpg"></div>It's amazing the new sights you see and the people you meet when you two-wheel it west on Wilshire.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la_wilshire">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.296941,34.061937,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Tourist in NYC</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/la-ny.jpg"></div>Do the Big Apple in 12 hours with L.A. visitor Damon Epps as he hits all the top tourist spots and offers  essential survival tips, including how to hail a cab.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=la-ny">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.987948,40.75748,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Lee</name>
+<description>
+<![CDATA[Lee, MA<div align="center"><img src="http://www.turnhere.com/jpg/lee.jpg"></div>You never know who you might meet when you live in a small town like Lee-- your high school alegbra teacher or an Oscar winner.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=lee">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.249768,42.305843,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Lexington</name>
+<description>
+<![CDATA[Lexington, MA<div align="center"><img src="http://www.turnhere.com/jpg/lexington_highschool.jpg"></div>History's so booooring!  Traipse through this historic town with two Lexington High students.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=lexington_highschool">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.230388,42.450378,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Liberty Village</name>
+<description>
+<![CDATA[Toronto, ON<div align="center"><img src="http://www.turnhere.com/jpg/liberty_toronto_on_ca.jpg"></div>Liberty Street in downtown Toronto has become a haven for artists, actors and other madly creative types.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=liberty_toronto_on_ca">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-79.4241,43.6376,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Zooetrope: Lincoln Park</name>
+<description>
+<![CDATA[Chicago, IL<div align="center"><img src="http://www.turnhere.com/jpg/lincolnpark.jpg"></div>This isn't a walk in the Park-- at least not the kind you expect.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=lincolnpark">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-87.636013,41.918594,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Little Havana</name>
+<description>
+<![CDATA[Miami, FL<div align="center"><img src="http://www.turnhere.com/jpg/littlehavana.jpg"></div>The rhythm and energy of Miami's most authentically Cuban neighborhood will have you literally dancing in the streets.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=littlehavana">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-80.217049,25.765663,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Long Island City</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/longislandcity.jpg"></div>Take refuge from the anonymity of New York and visit a place where you actually know your neighbor's name.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=longislandcity">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9862,40.7632,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Los Feliz</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/losfeliz.jpg"></div>Los Feliz is a bohemian hangout once known as East Hollywood and you can still see L.A. history in it's historic buildings.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=losfeliz">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.2917,34.0912,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Louisville - Southside</name>
+<description>
+<![CDATA[Louisville, KY<div align="center"><img src="http://www.turnhere.com/jpg/louisville_southside.jpg"></div>Louisville is best known as the home of the Kentucky Derby, but for a different type of ride, check out the skateboard park and more.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=louisville_southside">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-85.765455,38.204804,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Lowell's Public Arts</name>
+<description>
+<![CDATA[Lowell, MA<div align="center"><img src="http://www.turnhere.com/jpg/lowell.jpg"></div>Once the site of the industrial revolution, Lowell is now in the midst of an artistic, cultural revolution.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=lowell">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.312173,42.6458,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Lower East Side</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/lowereastside.jpg"></div>Food and history.  You can't separate the two on the Lower East Side.  Competitive eater Crazy Legs Conti takes a mouth-watering swing through his favorite joints.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=lowereastside">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.990219,40.718487,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Jamaica Plain</name>
+<description>
+<![CDATA[Boston, MA<div align="center"><img src="http://www.turnhere.com/jpg/ma_bost_jamaica.jpg"></div>Everybody feels welcome in the melting pot of Jamaica Plain, Boston.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ma_bost_jamaica">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.110471,42.321352,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Huron Village</name>
+<description>
+<![CDATA[Cambridge, MA<div align="center"><img src="http://www.turnhere.com/jpg/ma_camb_huron.jpg"></div>Is that Woody?  Nope, it's novelist Jay Cantor visiting the charming characters of Huron Village.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ma_camb_huron">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.127356,42.378978,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Madeira Beach</name>
+<description>
+<![CDATA[Madeira Beach, FL<div align="center"><img src="http://www.turnhere.com/jpg/madeirabeach.jpg"></div>Check out the saltwater cowboys at Madeira Beach before they go the way of the western.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=madeirabeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-82.781383,27.785875,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Main Street</name>
+<description>
+<![CDATA[Vancouver, BC<div align="center"><img src="http://www.turnhere.com/jpg/mainstreet.jpg"></div>It runs right through the heart of Vancouver and there's a little something for everyone on Main Street.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=mainstreet">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-123.1011,49.2574,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Manayunk</name>
+<description>
+<![CDATA[Philadelphia, PA<div align="center"><img src="http://www.turnhere.com/jpg/manayunk.jpg"></div>Its name means "where you come to drink," but there's much more to do than just drink in Manayunk.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=manayunk">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-75.222202,40.024763,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Marietta Street 24/7</name>
+<description>
+<![CDATA[Atlanta, GA<div align="center"><img src="http://www.turnhere.com/jpg/marietta.jpg"></div>City girls (and boys) can eat, play and get their hair done anytime of the night in this newly hip neighborhood.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=marietta">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-84.39701,33.76376,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Marina District</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/marina.jpg"></div>The Marina is where beautiful people sit, drink coffee and watch other beautiful people shop.  Watch them all in this movie.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=marina">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.42254,37.80258,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Tijuana</name>
+<description>
+<![CDATA[Tijuana, Mexico<div align="center"><img src="http://www.turnhere.com/jpg/mex_tijuana.jpg"></div>Go where few tourists have gone-- deep into the heart of Tijuana, Mexico.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=mex_tijuana">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.01667,32.533333,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Mission</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/mission.jpg"></div>The best thing about this neighborhood, besides the mural art, cool clubs and authentic Mexican food, is that it stays open late.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=mission">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.421207,37.764833,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Montauk in Winter</name>
+<description>
+<![CDATA[Montauk, NY<div align="center"><img src="http://www.turnhere.com/jpg/montauk.jpg"></div>You might feel as if your troubles have come to the end in this leisurely coastal neighborhood.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=montauk">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.9433,41.0451,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Lower Montclair</name>
+<description>
+<![CDATA[Montclair, NJ<div align="center"><img src="http://www.turnhere.com/jpg/montclair.jpg"></div>If you need to escape the New York hustle and bustle but want to stay close to home, come visit this family-oriented suburb.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=montclair">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.2177,40.814,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Broadway: Music &amp; Ink</name>
+<description>
+<![CDATA[Nashville, TN<div align="center"><img src="http://www.turnhere.com/jpg/nashville_broadway.jpg"></div>The heart and soul of Nashville's country music scene is here on Broadway, from a historic print shop to corner buskers to world-renown stages.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nashville_broadway">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-86.777627,36.160976,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Yo-Yo Museum of Chico</name>
+<description>
+<![CDATA[Chico, CA<div align="center"><img src="http://www.turnhere.com/jpg/natyoyo.jpg"></div>YO!  Y'all gotta come check out the National Yo-Yo Museum in Chico.  It's totally dope.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=natyoyo">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-121.840386,39.728724,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Morristown</name>
+<description>
+<![CDATA[Morristown, NJ<div align="center"><img src="http://www.turnhere.com/jpg/nj_morri_blind.jpg"></div>Take an unique "sight-seeing" tour of Morristown with Dave Loux of The Seeing Eye.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nj_morri_blind">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.483489,40.797556,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Noe Valley</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/noevalley.jpg"></div>The family-oriented neighborhood of Noe Valley offers fine dining, fun cafes and plenty of places for the kids.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=noevalley">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.430066,37.751698,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>North Beach</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/northbeach.jpg"></div>It's Italy on the West Coast and a landmark for the Beat culture. Get a taste of great food and history in North Beach.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=northbeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.408874,37.799738,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Little Italy in North End</name>
+<description>
+<![CDATA[Boston, MA<div align="center"><img src="http://www.turnhere.com/jpg/northend.jpg"></div>New England has its own Little Italy in Boston's historic North End.  Find out where to get the best cannoli and best laughs.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=northend">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.05422,42.36406,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Northern Liberties</name>
+<description>
+<![CDATA[Philadelphia, PA<div align="center"><img src="http://www.turnhere.com/jpg/northernliberties.jpg"></div>Get your groove on and check out this neighborhood's hopping all-night live music scene.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=northernliberties">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-75.1423,39.95652,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Day-Day in North Hollywood</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/northhollywood.jpg"></div>An actor's-- or wannabe actor's-- paradise.  
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.3719,34.1682,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Hunter Mountain</name>
+<description>
+<![CDATA[Tannersville, NY<div align="center"><img src="http://www.turnhere.com/jpg/ny_hunter.jpg"></div>Come to Hunter Mountain in New York for extreme partying on and off the slopes.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ny_hunter">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.1536,42.1946,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Chelsea</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/ny_nyc_chelsea.jpg"></div>What's a single gal to do in New York?  Go to Chelsea, that's what.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ny_nyc_chelsea">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.001972,40.745335,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Astoria Opera</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_astoria.jpg"></div>Baritone Ross Benoliel's tour of Astoria's Greek &amp; Italian bakeries will take your taste buds to operatic heights.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_astoria">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.0303,40.6218,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>BB Sandwich Bar</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_bbsandwich.jpg"></div>(Sponsored) The best damn cheesesteak.  Period.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_bbsandwich">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.000411,40.730402,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>NYC Burlesque Bunny</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_bunny.jpg"></div>Forget Bugs and Playboy.  Hop through New York's best burlesque clubs with Scotty the 7-foot Blue Bunny.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_bunny">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.988801,40.72128,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Curry Lane</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_curry.jpg"></div>Curry Lane earns its name from the twenty-four East Indian restaurants packed into one block in  New York City.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_curry">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9862,40.7264,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>East Village</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_eastvillage.jpg"></div>Follow Anna for adventures in the East Village-- and you'll follow whether you like it or not.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_eastvillage">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.98357,40.728239,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Intoxicating East Village</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_eastvillagepoet.jpg"></div>Get your creative juices flowing in the East Village with your friendly neighborhood Drunken Poet.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_eastvillagepoet">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.989554,40.728755,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Greenwich Village</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_greenwich.jpg"></div>Located in the bohemian Greenwich Village neighborhood, Washington Square Park is New York in a nutshell.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_greenwich">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9889,40.7313,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Inwood</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_inwood.jpg"></div>If you like your travel films on the classical side and with a bit of flair, this movie's for you.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_inwood">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9212,40.8677,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Jackson Heights</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_jackson.jpg"></div>Come to Little India in Jackson Heights for authentic Southeast Asian cuisine and groceries, sari shops and the best of Bollywood.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_jackson">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.8847,40.7515,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Kensington</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_kensington.jpg"></div>Space is a rare commodity in New York and Kensington has plenty of it for unexpected and exotic activities.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_kensington">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9759,40.6444,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>St. Patrick's Day</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_patricks.jpg"></div>Skip the crowds and get the low down on New York's most famous parade.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_patricks">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.989279,40.749715,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Peanut Butter &amp; Co.</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_pbco.jpg"></div>(Sponsored) The ultimate comfort food-- just like mom used to make.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_pbco">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.999775,40.729885,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>I Love NYC Pizza pt.1</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_pizzapt1.jpg"></div>Everybody loves pizza, whether you're an amateur diner or a professional competitive eater like Crazy Legs Conti.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_pizzapt1">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.966189,40.804385,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>I Love NYC Pizza pt.2</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_pizzapt2.jpg"></div>Continue your culinary journey with competitive eater Crazy Legs Conti to the birthplace of New York pizza.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_pizzapt2">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.934835,40.797102,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Prospect Heights</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_prospect.jpg"></div>This Brooklyn neighborhood's "not fancy," but it's building itself up, literally.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_prospect">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9641,40.6798,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Sammy's Roumanian</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_sammys.jpg"></div>(Sponsored) Carnivores and party animals only.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_sammys">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.992795,40.720618,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Upper East Side</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_uppereast.jpg"></div>Treat yourself to the delights of the Upper East Side, including an old-fashioned soda fountain, Central Park, and Museum Mile.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_uppereast">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9533,40.7766,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Upper West Side Story</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_upperwest.jpg"></div>Put your finger on the musical pulse of the Upper West Side, the neighborhood where opera stars work and play.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_upperwest">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.98,40.7655,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>West Village</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/nyc_westvillage.jpg"></div>The West Village is "the center of everything."  Need we say more?<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=nyc_westvillage">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.004179,40.738284,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Temescal District</name>
+<description>
+<![CDATA[Oakland, CA<div align="center"><img src="http://www.turnhere.com/jpg/oak_temescal.jpg"></div>Go early for a spot at the gourmet eateries springing up in Oakland's Temescal District.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=oak_temescal">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.262292,37.836437,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>West Oakland</name>
+<description>
+<![CDATA[Oakland, CA<div align="center"><img src="http://www.turnhere.com/jpg/oak_west.jpg"></div>A terrific farmer's market, artist studios, a major port and a center devoted to capoeira.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=oak_west">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.290655,37.804498,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Ocean Beach</name>
+<description>
+<![CDATA[San Diego, CA<div align="center"><img src="http://www.turnhere.com/jpg/oceanbeach.jpg"></div>Despite a bad rep, Ocean Beach's laid back surf &amp;amp; hippie community is &amp;quot;a piece of cake&amp;quot; to live in.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=oceanbeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.24446,32.74282,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Oceanside 101</name>
+<description>
+<![CDATA[Oceanside, CA<div align="center"><img src="http://www.turnhere.com/jpg/oceanside.jpg"></div>Take a trip back to the 1940's in this funky surf town that's got three and a half miles of sandy beaches.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=oceanside">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.38408,33.1985,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Nest: Ojai</name>
+<description>
+<![CDATA[Ojai, CA<div align="center"><img src="http://www.turnhere.com/jpg/ojai.jpg"></div>It's &amp;quot;not on the way to anywhere&amp;quot; and that's why the locals love it.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ojai">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-119.241653,34.448059,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Old City</name>
+<description>
+<![CDATA[Philadelphia, PA<div align="center"><img src="http://www.turnhere.com/jpg/oldcity.jpg"></div>The Old City is family-friendly and a popular bohemian hangout, offering history lessons and museums by day and plenty of clubs by night.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=oldcity">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-75.16218,39.95886,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Oxford Square</name>
+<description>
+<![CDATA[Oxford, MS<div align="center"><img src="http://www.turnhere.com/jpg/oxford_square.jpg"></div>Oxford Square is the heart of this quaint Southern town, from homages to native son William Faulkner to a kickin' live music scene.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=oxford_square">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-89.518897,34.366288,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Pacific Beach Surf</name>
+<description>
+<![CDATA[San Diego, CA<div align="center"><img src="http://www.turnhere.com/jpg/pacificbeach.jpg"></div>Take a "safari ride" with surf legend Bobby Challenger Thomas and other locals to discover Pacific Beach, past and present.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=pacificbeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-117.256795,32.796123,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Parkdale</name>
+<description>
+<![CDATA[Toronto, ON<div align="center"><img src="http://www.turnhere.com/jpg/parkdale.jpg"></div>Parkdale is one of the oldest neighborhoods in Toronto. In fact, it might actually be one of the elemental neighborhoods to the Milky Way.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=parkdale">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-79.4286,43.6422,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Philly Arts</name>
+<description>
+<![CDATA[Philadelphia, PA<div align="center"><img src="http://www.turnhere.com/jpg/phil_arts.jpg"></div>Art in Philadelphia ranges from indie galleries and coffee houses displaying do-it-yourself urban art to traditional museums.<br/><a href="http://206.14.210.5/movies/peter/turnherehttp://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=phil_arts">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-75.151605,39.940893,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Mt. Airy</name>
+<description>
+<![CDATA[Philadelphia, PA<div align="center"><img src="http://www.turnhere.com/jpg/philly_mtairy.jpg"></div>The coffee joints, shops and clubs on Germantown Avenue bring this close-knit community even closer.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=philly_mtairy">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-75.19008,40.059427,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Pike Place Market</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/pikeplace.jpg"></div>This public market takes friendly customer service to a new level.  It's all about fresh food, fun and fish-throwing.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=pikeplace">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.341477,47.608504,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Pioneer Square</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/PioneerSquare.jpg"></div>Pioneer Square - the heart of old Seattle - is the place to go to experience Seattle's early history. Seattle's first neighborhood, Pioneer Square is lined with turn-of-the-century street lamps, mom and  pop stores, lots of bars and restaurants and a Tlingit totem pole standing guard over a drinking fountain adorned with a bust of Chief Seattle. But there's a secret to this neighborhood, underground...<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=PioneerSquare">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.334425,47.601941,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Plateau</name>
+<description>
+<![CDATA[Montreal, QC<div align="center"><img src="http://www.turnhere.com/jpg/plateau.jpg"></div>East meets west and French meets English in this neighborhood.  Experience multiculturalism at it's coolest.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=plateau">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-123.113968544183,49.2604376149667,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Old Town Portland</name>
+<description>
+<![CDATA[Portland, OR<div align="center"><img src="http://www.turnhere.com/jpg/port_old.jpg"></div>Discover the sordid history of Portland's Old Town -- and it's not-so-sordid present.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=port_old">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.672755,45.524463,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Sandy Boulevard</name>
+<description>
+<![CDATA[Portland, OR<div align="center"><img src="http://www.turnhere.com/jpg/portland_sandy.jpg"></div>Venture into Portland's underbelly-- and watch your back.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=portland_sandy">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.588633,45.548665,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Provincetown</name>
+<description>
+<![CDATA[Provincetown, MA<div align="center"><img src="http://www.turnhere.com/jpg/ptown.jpg"></div>In Provincetown you'll find museum docents frequenting an underground cross-dressing cabaret revival and septuagenarians looking for the next dance party.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ptown">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-70.18487,42.052735,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Punxsutawney</name>
+<description>
+<![CDATA[Punxsutawney, PA<div align="center"><img src="http://www.turnhere.com/jpg/punxsutawney.jpg"></div>Join the small town of Punxsutawney as it revs up for its annual Big Event-- Groundhog's Day.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=punxsutawney">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-78.970611,40.943502,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Queen of the Hudson</name>
+<description>
+<![CDATA[Poughkeepsie, NY<div align="center"><img src="http://www.turnhere.com/jpg/queenhudson.jpg"></div>Take a stroll along the Hudson River or join the diverse crowd at food pioneering Soul Dog and sample 20 different hot dog toppings.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=queenhudson">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.922791,41.700748,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Queen West</name>
+<description>
+<![CDATA[Toronto, ON<div align="center"><img src="http://www.turnhere.com/jpg/queenwest.jpg"></div>This beat driven street defies the ordinary Canadian stereotype with its live lingerie models and progressive music scene.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=queenwest">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-79.4027,43.6475,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Richmond District</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/richmond.jpg"></div>Located next to Golden Gate Park and the Presidio, this diverse district has a friendly neighborhood atmosphere and lots of good eating and shopping, usually just a quick walk away.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=richmond">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.492649,37.781536,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Richmond</name>
+<description>
+<![CDATA[Richmond, VA<div align="center"><img src="http://www.turnhere.com/jpg/richmondva.jpg"></div>Don't be blinded by the smoke-- Richmond is much more than Tobacco Town.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=richmondva">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-77.477743,37.552318,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Rockaway Beach</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/rockaways.jpg"></div>Once a playground for the rich, the Rockaways are now a playground for hardcore surfers and New Yorkers looking for a beach close to home.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=rockaways">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.847,40.5771,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Rockridge</name>
+<description>
+<![CDATA[Oakland, CA<div align="center"><img src="http://www.turnhere.com/jpg/rockridge.jpg"></div>Rockridge is a quaint neighborhood in Oakland with great shopping and restaurants.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=rockridge">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.25182,37.84528,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Rogers Park</name>
+<description>
+<![CDATA[Chicago, IL<div align="center"><img src="http://www.turnhere.com/jpg/rogerspark.jpg"></div>This neighborhood in north Chicago is one of the most culturally diverse in the country.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=rogerspark">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-87.666384,42.009239,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Russ &amp; Daughters</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/russdaughters.jpg"></div>(Sponsored Film) Founded in 1914, this &amp;quot;appetizer&amp;quot; store is famous
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.988319,40.722606,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Sausalito</name>
+<description>
+<![CDATA[Sausalito, CA<div align="center"><img src="http://www.turnhere.com/jpg/Sausalito.jpg"></div>A quaint town of only 7500 people, Sausalito is just north of the Golden Gate Bridge. With views of the City, Sausalito is full of artists, history, walking paths and urban lore.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=Sausalito">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.50347,37.869772,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>ScrapHouse</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/scraphouse.jpg"></div>Built entirely of recycled materials, the ScrapHouse was designed and built as the centerpiece of World Environment Day 2005.  Visit www.scraphouse.org for more information.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=scraphouse">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.417798,37.780256,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Broadway - Seattle</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/seattlebroadway.jpg"></div>I didn't know different streets had different frequencies, but apparently they do - and Broadway St. in Seattle, WA has a high frequency - which is good.  Learn more about the area.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=seattlebroadway">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.32092,47.62222,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Caffe Trieste</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/sf_caffetrieste.jpg"></div>(Sponsored) Have a piece of history with your cappucino.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sf_caffetrieste">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.407346,37.798639,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>D Street</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/sf_dstreet.jpg"></div>It's not your usual San Francisco tourist spot, but for the basic necessities of life, head to D Street.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sf_dstreet">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.438,37.7759,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Mars Attacks Golden Gate</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/sf_ggpark.jpg"></div>Rediscover San Francisco's Golden Gate Park through the acoustic freestyling of Mars.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sf_ggpark">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.45066,37.77718,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Upper Grant - North Beach</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/sf_northbeach.jpg"></div>Mal Sharpe walks where Beat poets Kerouac and Ginsberg walked in San Francisco's North Beach.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sf_northbeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.407463,37.799199,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Not So Russian Hill</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/sf_russianhill.jpg"></div>Where's the borscht?  Superstar Vladic Pavlov searches the scenic Russian Hill neighborhood in San Francisco for his native cuisine.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sf_russianhill">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.417,37.7976,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Nob Hill Vampire Tour</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/sf_vampire.jpg"></div>Take a tour with vampiress Mina Harker to the top tourist spots in  Nob Hill.  Lestat, where art thou?<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sf_vampire">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.4078,37.7918,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Living the SLO Life</name>
+<description>
+<![CDATA[San Luis Obispo, CA<div align="center"><img src="http://www.turnhere.com/jpg/slolife.jpg"></div>Take it nice and SLO in San Luis Obispo and stay late at the Farmers Market 'til the nightlife begins.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=slolife">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-120.666125,35.278836,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Solvang</name>
+<description>
+<![CDATA[Solvang, CA<div align="center"><img src="http://www.turnhere.com/jpg/solvang.jpg"></div>Solvang is "more Danish than Denmark."  Explore the marketed mystique of this Disneyesque town and get a behind-the-scenes glimpse that most visitors don't see.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=solvang">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-120.1366,34.5958,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>SOMA</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/ca_sf_soma.jpg"></div>Take a tour of San Francisco's South Of Market district with Mr. Lexicon, The Foreign Rap Sensation. These SOMA residents know how to show America a good time!<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=ca_sf_soma">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.402624,37.78109,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Somerville</name>
+<description>
+<![CDATA[Somerville, MA<div align="center"><img src="http://www.turnhere.com/jpg/somerville.jpg"></div>No matter who you are, there's a coffee shop and a place for you in Davis Square, the hip center of suburban Somerville.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=somerville">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.11794,42.2607,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Haunted Sonoma</name>
+<description>
+<![CDATA[Sonoma, CA<div align="center"><img src="http://www.turnhere.com/jpg/sonoma_haunted.jpg"></div>Although Sonoma is best known for its beautiful wine country, it has a darker side-- as California's most haunted town.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sonoma_haunted">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.457724,38.293841,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Sopranos Tour</name>
+<description>
+<![CDATA[Hoboken, NJ<div align="center"><img src="http://www.turnhere.com/jpg/sopranos_tour.jpg"></div>Take a tour of the real-life "Sopranos" locations with Vito Spatafore-- if ya' know what's good for ya'.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sopranos_tour">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-74.067022,40.882882,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>South Beach</name>
+<description>
+<![CDATA[Miami Beach, FL<div align="center"><img src="http://www.turnhere.com/jpg/southbeach.jpg"></div>Miami's South Beach may be the most fashionable seaside resort in the nation.  Watch it sizzle.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=southbeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-80.131471,25.777488,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>South End Tails</name>
+<description>
+<![CDATA[Boston, MA<div align="center"><img src="http://www.turnhere.com/jpg/southend.jpg"></div>Once known for its mean streets, the South End of Boston now offers cool places for canines and their humans alike.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=southend">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-71.075642,42.338764,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>St. Helena</name>
+<description>
+<![CDATA[St. Helena, CA<div align="center"><img src="http://www.turnhere.com/jpg/sthelena.jpg"></div>Located in the center of the famous wine growing Napa Valley, St. Helena is home to more than 300 wineries, glamorous boutiques, galleries, gourmet restaurants and cafes.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sthelena">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.467229,38.503249,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>St. Henri</name>
+<description>
+<![CDATA[Montreal, QC<div align="center"><img src="http://www.turnhere.com/jpg/sthenri.jpg"></div>St-Henri (pronounced "san ahn-ree") is the next Austin, TX, but with snow and - well - Canadians say "ay."<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sthenri">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.5544027945157,45.5123576475438,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Sundance Square</name>
+<description>
+<![CDATA[Fort Worth, TX<div align="center"><img src="http://www.turnhere.com/jpg/sundancesquare.jpg"></div>Old-timer Ted Klein tours Fort Worth's main square, home to street musicians, the all-American burger and sleeping panthers.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sundancesquare">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-97.331232,32.754269,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Sunset</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/sunset.jpg"></div>Residents of the Sunset neighborhood in San Francisco love easy access to the beach, Golden Gate Park and one of the world's best stocked video stores.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=sunset">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.49684,37.755494,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Tara Bella Vineyard</name>
+<description>
+<![CDATA[Santa Rosa, CA<div align="center"><img src="http://www.turnhere.com/jpg/tarabella.jpg"></div>Meet the great folks at the Tara Bella Vineyards and see how they get the great flavor from the bud into the bottle.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=tarabella">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.813262,38.482031,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Tarzana</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/tarz_burbs.jpg"></div>The suburb of Tarzana was founded by the creator of the Tarzan legend, but it's a long way from the jungle.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=tarz_burbs">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.5461,34.1623,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Brewery</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/thebrewery.jpg"></div>Artist loft housing in Los Angeles at The Brewery art colony, a former Pabst brewery converted to lofts.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=thebrewery">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.218811,34.065821,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Palace Hotel</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/thepalace.jpg"></div>Dubbed the Gateway to the West, the luxurious Palace Hotel is a San Francisco icon dating back to the early 1900s.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=thepalace">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.402017,37.788601,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Great Outdoors: Tiburon</name>
+<description>
+<![CDATA[Tiburon, CA<div align="center"><img src="http://www.turnhere.com/jpg/tiburontour.jpg"></div>The great outdoors beckons in Tiburon, the place to go for biking, hiking, rock climbing and spectacular views of the Golden Gate Bridge.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=tiburontour">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.456149,37.873168,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>The Annex</name>
+<description>
+<![CDATA[Toronto, ON<div align="center"><img src="http://www.turnhere.com/jpg/toronto_annex.jpg"></div>No other neighborhood has quite as much charm as The Annex in Toronto.  Unique shops and abundant ethnic restaurants reflect its artsy, diverse population.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=toronto_annex">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-79.3853352889556,43.6485936834387,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Kensington Market</name>
+<description>
+<![CDATA[Toronto, ON<div align="center"><img src="http://www.turnhere.com/jpg/toronto_kensington.jpg"></div>In the 1920's, it was know as the Jewish Market.  Today, you can sense the city's funky, multicultural mix in shops packed with goods from Europe, the Caribbean, the Middle East, South America and Asia.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=toronto_kensington">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-79.386757,43.670235,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Tulsa's Best:  Elmer's BBQ</name>
+<description>
+<![CDATA[Tulsa, OK<div align="center"><img src="http://www.turnhere.com/jpg/tulsa.jpg"></div>Elmer's is not what most people think of when they think of Tulsa, but those in the know always stop by for its landmark BBQ.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=tulsa">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-95.975869,36.103345,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Tumbleweed</name>
+<description>
+<![CDATA[Paris, France<div align="center"><img src="http://www.turnhere.com/jpg/tumbleweed.jpg"></div>No matter what your age, you'll want to visit this whimsical toy store in Paris.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=tumbleweed">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>2.34125843355591,48.8569407746536,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Union Square</name>
+<description>
+<![CDATA[San Francisco, CA<div align="center"><img src="http://www.turnhere.com/jpg/UnionSquare.jpg"></div>Union Square is a popular upscale shopping destination easily accessible via the famous San Francisco cable car.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=UnionSquare">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.405796,37.786851,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Uptown Minneapolis</name>
+<description>
+<![CDATA[Minneapolis, MN<div align="center"><img src="http://www.turnhere.com/jpg/uptownminneapolis.jpg"></div>Live. Work. Eat. Play. You can do it all in Uptown Minneapolis, where the punk rockers are sharing coffee with the suits.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=uptownminneapolis">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-93.2647,45.0124,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Venice Canals</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/venice_canals.jpg"></div>Bring a canoe and enjoy a leisurely row through this idyllic residential neighborhood in the middle of L.A.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=venice_canals">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.39555,34.0068,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Venice Beach</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/VeniceBeach.jpg"></div>Dude.  Catch some hippie vibes strolling down Ocean Front Walk-- smoke a hooka, exercise your free speech and let the eclectic street performers inspire your inner muse.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=VeniceBeach">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.467046,33.979916,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Watts Towers</name>
+<description>
+<![CDATA[Los Angeles, CA<div align="center"><img src="http://www.turnhere.com/jpg/wattstowers.jpg"></div>You'll be moved and inspired by this visit to a oft-maligned neighborhood and one man's obsessive, visionary art.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=wattstowers">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-118.241527,33.938776,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>It's Easy: West Seattle</name>
+<description>
+<![CDATA[Seattle, WA<div align="center"><img src="http://www.turnhere.com/jpg/westseattle.jpg"></div>The vibe is easy on Easy Street in West Seattle-- far enough from downtown for families and seniors but close enough to keep life interesting for local musicians.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=westseattle">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-122.386896,47.551871,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Wicker Park</name>
+<description>
+<![CDATA[Chicago, IL<div align="center"><img src="http://www.turnhere.com/jpg/WickerPark.jpg"></div>Wicker Park, Chicago's bohemian neighborhood, draws Chicagoland hipsters from near and far. Just northwest of Chicago's loop, near Bucktown, Wicker Park features many bars, live music venues, clothing shops and eclectic dining.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=WickerPark">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-87.676544,41.909969,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Williamsburg</name>
+<description>
+<![CDATA[New York, NY<div align="center"><img src="http://www.turnhere.com/jpg/williamsburg.jpg"></div>Step off the beaten path in Williamsburg to visit an anti-perfume store and try southern-style grits in the Big Apple.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=williamsburg">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-73.9904,40.7314,0</coordinates></Point>
+</Placemark>
+<Placemark>
+<name>Shire Town: Woodstock</name>
+<description>
+<![CDATA[Woodstock, VT<div align="center"><img src="http://www.turnhere.com/jpg/Woodstock.jpg"></div>You won't run into any hobbitts, but you'll go back in time when you visit this shire town.<br/><a href="http://206.14.210.5/movies/peter/turnhere/player_earth.cfm?name=Woodstock">Watch this film on TURNHERE.COM</a>
+]]>
+</description>
+<styleUrl>#turnhere-C</styleUrl>
+<Point><coordinates>-72.518689,43.625351,0</coordinates></Point>
+</Placemark>
+</Document>
+</kml>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gorliz.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gorliz.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gorliz.kml	(revision 42196)
@@ -0,0 +1,783 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<kml xmlns="http://earth.google.com/kml/2.0">
+<Document>
+  <name>Gorliz.kml</name>
+  <Style id="khStyle615">
+    <IconStyle id="khIconStyle616">
+      <Icon>
+        <href>root://icons/palette-3.png</href>
+        <x>224</x>
+        <w>32</w>
+        <h>32</h>
+      </Icon>
+    </IconStyle>
+  </Style>
+  <Folder>
+    <name>Gorliz</name>
+    <open>1</open>
+    <Folder>
+      <name>Alojamientos</name>
+      <open>1</open>
+      <Placemark>
+        <name>Alojamientos - Camping Arrien</name>
+        <LookAt>
+          <longitude>-2.935547902482675</longitude>
+          <latitude>43.41884927185296</latitude>
+          <range>406.2340631356369</range>
+          <tilt>5.122096682951607e-010</tilt>
+          <heading>-0.005135845406706679</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.936268833136865,43.41926047637818,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Alojamientos - Pensión Entrepinos</name>
+        <LookAt>
+          <longitude>-2.93517453665758</longitude>
+          <latitude>43.42062150684817</latitude>
+          <range>406.2340631356369</range>
+          <tilt>4.599889538208079e-010</tilt>
+          <heading>-0.00487921238522037</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.935189106769116,43.42042647859394,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Alojamientos - Pensión Artebikondo</name>
+        <LookAt>
+          <longitude>-2.93517453665758</longitude>
+          <latitude>43.42062150684817</latitude>
+          <range>406.2340631356369</range>
+          <tilt>4.599889538208079e-010</tilt>
+          <heading>-0.00487921238522037</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.93518328550374,43.42056215016096,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Alojamientos - Albergue de Gorliz</name>
+        <LookAt id="khLookAt636">
+          <longitude>-2.94132656841086</longitude>
+          <latitude>43.41358472875452</latitude>
+          <range>406.2340631370516</range>
+          <tilt>5.35603681069404e-010</tilt>
+          <heading>-0.009107304660893947</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point id="khPoint637">
+          <coordinates>-2.942981204582623,43.41347853228795,0</coordinates>
+        </Point>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Deportes</name>
+      <open>1</open>
+      <Placemark>
+        <name>Deportes - Frontón</name>
+        <LookAt>
+          <longitude>-2.932058308171641</longitude>
+          <latitude>43.41547669033486</latitude>
+          <range>182.4648019713863</range>
+          <tilt>1.446043893572151e-009</tilt>
+          <heading>-0.004277677354662907</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.932819883028729,43.41539476051816,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Deportes - Golf</name>
+        <LookAt>
+          <longitude>-2.938276508740721</longitude>
+          <latitude>43.41834024579609</latitude>
+          <range>581.0283983978843</range>
+          <tilt>8.066062839812635e-010</tilt>
+          <heading>-0.00855087252521936</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.940150873097779,43.41881908440737,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Deportes - Pistas de Skate</name>
+        <LookAt>
+          <longitude>-2.938159497987565</longitude>
+          <latitude>43.41770959804097</latitude>
+          <range>581.0283983978843</range>
+          <tilt>8.5783114572008e-010</tilt>
+          <heading>-0.008470443499407246</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.937487228546104,43.41657569871795,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Deportes - Polideportivo</name>
+        <LookAt>
+          <longitude>-2.938276508740721</longitude>
+          <latitude>43.41834024579609</latitude>
+          <range>581.0283983978843</range>
+          <tilt>8.066062839812635e-010</tilt>
+          <heading>-0.00855087252521936</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.939123882228103,43.41832802281763,0</coordinates>
+        </Point>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Salud</name>
+      <open>1</open>
+      <Placemark>
+        <name>Salud - Centro de salud</name>
+        <LookAt>
+          <longitude>-2.93416478861011</longitude>
+          <latitude>43.41360224153243</latitude>
+          <range>336.821496984514</range>
+          <tilt>1.258373833327365e-009</tilt>
+          <heading>-0.005725331743930797</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.93438498856986,43.41370065345845,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Salud - Consultorio médico</name>
+        <LookAt>
+          <longitude>-2.940305713451375</longitude>
+          <latitude>43.4039631203373</latitude>
+          <range>550.2208080340929</range>
+          <tilt>8.430321681777639e-010</tilt>
+          <heading>-0.00994537611803992</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.942372557637185,43.40375036902094,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Salud - Hospital</name>
+        <LookAt>
+          <longitude>-2.943117211933795</longitude>
+          <latitude>43.41689590446056</latitude>
+          <range>343.0014201008715</range>
+          <tilt>8.444804186908483e-010</tilt>
+          <heading>-0.01187782190835416</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.943967340081841,43.41687429454986,0</coordinates>
+        </Point>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Servicios</name>
+      <open>1</open>
+      <Placemark>
+        <name>Servicios - Andra Mari eskola</name>
+        <LookAt>
+          <longitude>-2.940305713451375</longitude>
+          <latitude>43.4039631203373</latitude>
+          <range>550.2208080340929</range>
+          <tilt>8.430321681777639e-010</tilt>
+          <heading>-0.00994537611803992</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.940957748610984,43.40378501977141,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Ayuntamiento</name>
+        <LookAt>
+          <longitude>-2.932058308171239</longitude>
+          <latitude>43.41547668989463</latitude>
+          <range>113.7043184267217</range>
+          <tilt>1.994968172974165e-009</tilt>
+          <heading>-0.004277677354792927</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.932590058725495,43.41533781657785,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Casa de cultura</name>
+        <LookAt>
+          <longitude>-2.933160009938151</longitude>
+          <latitude>43.41388542286957</latitude>
+          <range>173.0500637689367</range>
+          <tilt>2.386794866637494e-010</tilt>
+          <heading>-0.005034845137515134</heading>
+        </LookAt>
+        <styleUrl>#khStyle615</styleUrl>
+        <Point>
+          <coordinates>-2.933668462705526,43.41392692878615,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Correos</name>
+        <LookAt>
+          <longitude>-2.933135658118878</longitude>
+          <latitude>43.41429784903769</latitude>
+          <range>182.464801762726</range>
+          <tilt>3.354952372782424e-010</tilt>
+          <heading>-0.00501811500012795</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.933181545658841,43.41437973196447,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Cementerio</name>
+        <LookAt>
+          <longitude>-2.931543882917146</longitude>
+          <latitude>43.40934042753542</latitude>
+          <range>384.9978139054546</range>
+          <tilt>2.78987738263714e-010</tilt>
+          <heading>-0.002384388006715487</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.932420537721086,43.40913145680668,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Estación depuradora</name>
+        <LookAt>
+          <longitude>-2.939042345373437</longitude>
+          <latitude>43.41227940670556</latitude>
+          <range>384.9978139068693</range>
+          <tilt>6.823770322745813e-010</tilt>
+          <heading>-0.00753753269774789</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.939908005183611,43.41233155592721,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Hogar del Jubilado</name>
+        <LookAt>
+          <longitude>-2.935196247185845</longitude>
+          <latitude>43.41297143252557</latitude>
+          <range>314.9660240916574</range>
+          <tilt>5.382447088124337e-011</tilt>
+          <heading>-0.006434267411033926</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.935963234759825,43.41276427409475,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Ikastetxea</name>
+        <LookAt>
+          <longitude>-2.929258226794424</longitude>
+          <latitude>43.41238418277283</latitude>
+          <range>182.464801762726</range>
+          <tilt>1.67075647346387e-009</tilt>
+          <heading>-0.002353297053469445</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.929374901960117,43.41270220121167,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Kzgunea</name>
+        <LookAt>
+          <longitude>-2.932476440202668</longitude>
+          <latitude>43.41536282630887</latitude>
+          <range>173.0500637307413</range>
+          <tilt>1.309016387308863e-009</tilt>
+          <heading>-0.004565038292282945</heading>
+        </LookAt>
+        <styleUrl>#khStyle615</styleUrl>
+        <Point>
+          <coordinates>-2.932611951965754,43.41541158211112,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Policía Local</name>
+        <LookAt>
+          <longitude>-2.932058308171286</longitude>
+          <latitude>43.41547669000245</latitude>
+          <range>182.4648012209165</range>
+          <tilt>5.43985650341073e-010</tilt>
+          <heading>-0.004277677354777117</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.931718783210073,43.41523105020027,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Sala de exposiciones</name>
+        <LookAt>
+          <longitude>-2.936268804853604</longitude>
+          <latitude>43.41344140893003</latitude>
+          <range>314.9660240944867</range>
+          <tilt>2.418077110392235e-010</tilt>
+          <heading>-0.007171376622743631</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.937687506188425,43.41362206732327,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - Urezarantza ikastola</name>
+        <LookAt>
+          <longitude>-2.93371877031344</longitude>
+          <latitude>43.42113436472176</latitude>
+          <range>199.4918880325978</range>
+          <tilt>4.501550021361037e-010</tilt>
+          <heading>-0.005418727901630786</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.933204246679395,43.42130304331438,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Servicios - WIFI gratuito</name>
+        <LookAt>
+          <longitude>-2.933160009938151</longitude>
+          <latitude>43.41388542286957</latitude>
+          <range>173.0500637689367</range>
+          <tilt>2.386794866637494e-010</tilt>
+          <heading>-0.005034845137515134</heading>
+        </LookAt>
+        <styleUrl>#khStyle615</styleUrl>
+        <Point>
+          <coordinates>-2.933660994930406,43.41385829882006,0</coordinates>
+        </Point>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Transportes</name>
+      <open>1</open>
+      <Placemark>
+        <name>Transportes - Metro</name>
+        <LookAt>
+          <longitude>-2.945482062802131</longitude>
+          <latitude>43.40184926552313</latitude>
+          <range>287.0861231129363</range>
+          <tilt>4.892899632077996e-010</tilt>
+          <heading>-0.01350219887272927</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.94630886220537,43.40172927207721,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Transportes - Taxi</name>
+        <LookAt>
+          <longitude>-2.933901142585107</longitude>
+          <latitude>43.41417401675951</latitude>
+          <range>182.464801762726</range>
+          <tilt>9.037838075825481e-010</tilt>
+          <heading>-0.005544206167899747</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.934303560992333,43.41422350016668,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Andra Mari</name>
+        <LookAt>
+          <longitude>-2.941717582141439</longitude>
+          <latitude>43.40431274859269</latitude>
+          <range>287.0861231115216</range>
+          <tilt>3.376440257640804e-010</tilt>
+          <heading>-0.01091551335991611</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.94307646186286,43.40431255246405,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Arteaga</name>
+        <LookAt>
+          <longitude>-2.933910272511698</longitude>
+          <latitude>43.42024112998878</latitude>
+          <range>792.1235998797019</range>
+          <tilt>6.375303680515432e-010</tilt>
+          <heading>-0.005550025871885789</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.934872116481088,43.42066268177712,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Iberre</name>
+        <LookAt>
+          <longitude>-2.93547617829706</longitude>
+          <latitude>43.41327873231531</latitude>
+          <range>336.8214968204151</range>
+          <tilt>7.634475116851655e-010</tilt>
+          <heading>-0.00662658616051641</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.93600126665183,43.41346851274145,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Iglesia</name>
+        <LookAt>
+          <longitude>-2.932330912886271</longitude>
+          <latitude>43.41505201059012</latitude>
+          <range>182.464801762726</range>
+          <tilt>1.800898894145091e-009</tilt>
+          <heading>-0.004465034890780842</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.932956161063943,43.41499674808969,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Playa inicio</name>
+        <LookAt>
+          <longitude>-2.939987264982864</longitude>
+          <latitude>43.41208286467484</latitude>
+          <range>715.0095228453104</range>
+          <tilt>1.801608208659258e-010</tilt>
+          <heading>-0.009726864685485229</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.944348216577979,43.41267177462898,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Kautela</name>
+        <LookAt>
+          <longitude>-2.938567764096112</longitude>
+          <latitude>43.40237609738733</latitude>
+          <range>550.2208077921885</range>
+          <tilt>4.399251306314635e-010</tilt>
+          <heading>-0.008751126649369818</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.939559763025032,43.40269756139234,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Playa centro</name>
+        <LookAt>
+          <longitude>-2.942963881494472</longitude>
+          <latitude>43.41492703459706</latitude>
+          <range>343.0014200980422</range>
+          <tilt>8.712501657737681e-010</tilt>
+          <heading>-0.01177247434092282</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.944050638988359,43.41525262858324,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Polideportivo</name>
+        <LookAt>
+          <longitude>-2.937428930821957</longitude>
+          <latitude>43.41746433863369</latitude>
+          <range>546.6847907001388</range>
+          <tilt>9.034970198938007e-010</tilt>
+          <heading>-0.007968281258965407</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.937974674401303,43.41658562444776,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Puente</name>
+        <LookAt>
+          <longitude>-2.941210349892714</longitude>
+          <latitude>43.40188153811569</latitude>
+          <range>340.6882369649391</range>
+          <tilt>6.97648876709117e-010</tilt>
+          <heading>-0.01056686886171971</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.943052855834935,43.40173193855287,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Puerto</name>
+        <LookAt>
+          <longitude>-2.943092720753532</longitude>
+          <latitude>43.40761417459258</latitude>
+          <range>384.99781390404</range>
+          <tilt>8.242417687013088e-010</tilt>
+          <heading>-0.01032097017927405</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.945152921535467,43.40739289030511,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Rotonda</name>
+        <LookAt>
+          <longitude>-2.932093498154772</longitude>
+          <latitude>43.40491137691294</latitude>
+          <range>550.2208080383368</range>
+          <tilt>9.874716633763286e-010</tilt>
+          <heading>-0.004302475806691194</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.932927363414379,43.40474479680209,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parada BUS - Urezarantza</name>
+        <LookAt>
+          <longitude>-2.937994819153103</longitude>
+          <latitude>43.41910748487965</latitude>
+          <range>546.6847906994316</range>
+          <tilt>1.015278394959013e-009</tilt>
+          <heading>-0.008357237745640921</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.939192932030409,43.4200031271631,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Argiñena</name>
+        <LookAt>
+          <longitude>-2.932265264055677</longitude>
+          <latitude>43.41405414600818</latitude>
+          <range>182.4648017641406</range>
+          <tilt>1.164936265082863e-009</tilt>
+          <heading>-0.004419929372693812</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.932007051696573,43.41417222819033,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Hospital</name>
+        <LookAt>
+          <longitude>-2.94311721193408</longitude>
+          <latitude>43.41689590449035</latitude>
+          <range>670.7705606000105</range>
+          <tilt>7.836218634163569e-010</tilt>
+          <heading>-0.01187782190842535</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.943787392902209,43.41809290725953,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Iglesia</name>
+        <LookAt id="khLookAt625">
+          <longitude>-2.932058308171549</longitude>
+          <latitude>43.41547669025639</latitude>
+          <range>182.4648017613113</range>
+          <tilt>8.070569793963523e-010</tilt>
+          <heading>-0.004277677354734663</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point id="khPoint626">
+          <coordinates>-2.932153980531041,43.41531291329675,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Playa - Astondo</name>
+        <LookAt>
+          <longitude>-2.946741621368627</longitude>
+          <latitude>43.41849143986052</latitude>
+          <range>670.7705600482985</range>
+          <tilt>5.41229008410101e-010</tilt>
+          <heading>-0.01436885931575611</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.94881859136254,43.41841403586574,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Playa - Busterri</name>
+        <LookAt>
+          <longitude>-2.939987264982864</longitude>
+          <latitude>43.41208286467484</latitude>
+          <range>715.0095228453104</range>
+          <tilt>1.801608208659258e-010</tilt>
+          <heading>-0.009726864685485229</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.943084515814462,43.41224661282211,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Playa - 1</name>
+        <LookAt id="khLookAt721">
+          <longitude>-2.942032320942325</longitude>
+          <latitude>43.41442241897772</latitude>
+          <range>343.001420095213</range>
+          <tilt>6.912466940152978e-010</tilt>
+          <heading>-0.01113224947904498</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point id="khPoint722">
+          <coordinates>-2.943212705740464,43.41476948653725,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Playa - 2</name>
+        <LookAt>
+          <longitude>-2.942032320942325</longitude>
+          <latitude>43.41442241897772</latitude>
+          <range>343.001420095213</range>
+          <tilt>6.912466940152978e-010</tilt>
+          <heading>-0.01113224947904498</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.943434232766066,43.41393893951057,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Parking - Puerto</name>
+        <LookAt>
+          <longitude>-2.943092720753532</longitude>
+          <latitude>43.40761417459258</latitude>
+          <range>384.99781390404</range>
+          <tilt>8.242417687013088e-010</tilt>
+          <heading>-0.01032097017927405</heading>
+        </LookAt>
+        <styleUrl>root://styles#default</styleUrl>
+        <Point>
+          <coordinates>-2.944152024421726,43.40813638382826,0</coordinates>
+        </Point>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Turismo</name>
+      <open>1</open>
+      <Placemark>
+        <name>Turismo - Ermita Andra Mari</name>
+        <LookAt>
+          <longitude>-2.940305713451375</longitude>
+          <latitude>43.4039631203373</latitude>
+          <range>550.2208080340929</range>
+          <tilt>8.430321681777639e-010</tilt>
+          <heading>-0.00994537611803992</heading>
+        </LookAt>
+        <styleUrl>#khStyle615</styleUrl>
+        <Point>
+          <coordinates>-2.940293814967035,43.40378510542252,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Turismo - Faro - Inicio paseo</name>
+        <LookAt>
+          <longitude>-2.943199760709583</longitude>
+          <latitude>43.41905623051854</latitude>
+          <range>303.674395260038</range>
+          <tilt>2.329931269877457e-011</tilt>
+          <heading>-0.01193481738797425</heading>
+        </LookAt>
+        <styleUrl>#khStyle615</styleUrl>
+        <Point>
+          <coordinates>-2.943468150986917,43.41919564079756,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Turismo - Faro</name>
+        <LookAt>
+          <longitude>-2.942672814190128</longitude>
+          <latitude>43.432784469639</latitude>
+          <range>1012.605278356069</range>
+          <tilt>3.910905057829635e-010</tilt>
+          <heading>-0.01157256284532201</heading>
+        </LookAt>
+        <styleUrl>#khStyle615</styleUrl>
+        <Point>
+          <coordinates>-2.943422408089973,43.4331542448143,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Turismo - Iglesia</name>
+        <LookAt>
+          <longitude>-2.932058308171641</longitude>
+          <latitude>43.41547669033486</latitude>
+          <range>182.4648019713863</range>
+          <tilt>1.446043893572151e-009</tilt>
+          <heading>-0.004277677354662907</heading>
+        </LookAt>
+        <styleUrl>#khStyle615</styleUrl>
+        <Point>
+          <coordinates>-2.932174934024957,43.41512628843511,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Turismo - Oficina de información</name>
+        <LookAt id="khLookAt616">
+          <longitude>-2.933160009938157</longitude>
+          <latitude>43.41388542280848</latitude>
+          <range>173.0500637293266</range>
+          <tilt>2.523651958516305e-010</tilt>
+          <heading>-0.00503484513755832</heading>
+        </LookAt>
+        <styleUrl>root://styleMaps#default+nicon=0x307+hicon=0x317</styleUrl>
+        <Point id="khPoint617">
+          <coordinates>-2.933755470282719,43.41382758915147,0</coordinates>
+        </Point>
+      </Placemark>
+    </Folder>
+  </Folder>
+</Document>
+</kml>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_Samples.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_Samples.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_Samples.kml	(revision 42196)
@@ -0,0 +1,940 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<kml xmlns="http://earth.google.com/kml/2.1">
+  <Document>
+    <name>KML Samples</name>
+    <open>1</open>
+    <description>Unleash your creativity with the help of these examples!</description>
+    <Style id="downArrowIcon">
+      <IconStyle>
+        <Icon>
+          <href>http://maps.google.com/mapfiles/kml/pal4/icon28.png</href>
+        </Icon>
+      </IconStyle>
+    </Style>
+    <Style id="globeIcon">
+      <IconStyle>
+        <Icon>
+          <href>http://maps.google.com/mapfiles/kml/pal3/icon19.png</href>
+        </Icon>
+      </IconStyle>
+      <LineStyle>
+        <width>2</width>
+      </LineStyle>
+    </Style>
+    <Style id="transPurpleLineGreenPoly">
+      <LineStyle>
+        <color>7fff00ff</color>
+        <width>4</width>
+      </LineStyle>
+      <PolyStyle>
+        <color>7f00ff00</color>
+      </PolyStyle>
+    </Style>
+    <Style id="yellowLineGreenPoly">
+      <LineStyle>
+        <color>7f00ffff</color>
+        <width>4</width>
+      </LineStyle>
+      <PolyStyle>
+        <color>7f00ff00</color>
+      </PolyStyle>
+    </Style>
+    <Style id="thickBlackLine">
+      <LineStyle>
+        <color>87000000</color>
+        <width>10</width>
+      </LineStyle>
+    </Style>
+    <Style id="redLineBluePoly">
+      <LineStyle>
+        <color>ff0000ff</color>
+      </LineStyle>
+      <PolyStyle>
+        <color>ffff0000</color>
+      </PolyStyle>
+    </Style>
+    <Style id="blueLineRedPoly">
+      <LineStyle>
+        <color>ffff0000</color>
+      </LineStyle>
+      <PolyStyle>
+        <color>ff0000ff</color>
+      </PolyStyle>
+    </Style>
+    <Style id="transRedPoly">
+      <LineStyle>
+        <width>1.5</width>
+      </LineStyle>
+      <PolyStyle>
+        <color>7d0000ff</color>
+      </PolyStyle>
+    </Style>
+    <Style id="transBluePoly">
+      <LineStyle>
+        <width>1.5</width>
+      </LineStyle>
+      <PolyStyle>
+        <color>7dff0000</color>
+      </PolyStyle>
+    </Style>
+    <Style id="transGreenPoly">
+      <LineStyle>
+        <width>1.5</width>
+      </LineStyle>
+      <PolyStyle>
+        <color>7d00ff00</color>
+      </PolyStyle>
+    </Style>
+    <Style id="transYellowPoly">
+      <LineStyle>
+        <width>1.5</width>
+      </LineStyle>
+      <PolyStyle>
+        <color>7d00ffff</color>
+      </PolyStyle>
+    </Style>
+    <Style id="noDrivingDirections">
+      <BalloonStyle>
+        <text><![CDATA[
+          <b>$[name]</b>
+          <br /><br />
+          $[description]
+        ]]></text>
+      </BalloonStyle>
+    </Style>
+    <Folder>
+      <name>Placemarks</name>
+      <description>These are just some of the different kinds of placemarks with
+        which you can mark your favorite places</description>
+      <LookAt>
+        <longitude>-122.0839597145766</longitude>
+        <latitude>37.42222904525232</latitude>
+        <altitude>0</altitude>
+        <range>500.6566641072245</range>
+        <tilt>40.5575073395506</tilt>
+        <heading>-148.4122922628044</heading>
+      </LookAt>
+      <Placemark>
+        <name>Simple placemark</name>
+        <description>Attached to the ground. Intelligently places itself at the
+          height of the underlying terrain.</description>
+        <Point>
+          <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Floating placemark</name>
+        <visibility>0</visibility>
+        <description>Floats a defined distance above the ground.</description>
+        <LookAt>
+          <longitude>-122.0839597145766</longitude>
+          <latitude>37.42222904525232</latitude>
+          <altitude>0</altitude>
+          <range>500.6566641072245</range>
+          <tilt>40.5575073395506</tilt>
+          <heading>-148.4122922628044</heading>
+        </LookAt>
+        <styleUrl>#downArrowIcon</styleUrl>
+        <Point>
+          <altitudeMode>relativeToGround</altitudeMode>
+          <coordinates>-122.084075,37.4220033612141,50</coordinates>
+        </Point>
+      </Placemark>
+      <Placemark>
+        <name>Extruded placemark</name>
+        <visibility>0</visibility>
+        <description>Tethered to the ground by a customizable
+          &quot;tail&quot;</description>
+        <LookAt>
+          <longitude>-122.0845787421525</longitude>
+          <latitude>37.42215078737763</latitude>
+          <altitude>0</altitude>
+          <range>365.2646606980322</range>
+          <tilt>40.55750733918048</tilt>
+          <heading>-148.4126684946234</heading>
+        </LookAt>
+        <styleUrl>#globeIcon</styleUrl>
+        <Point>
+          <extrude>1</extrude>
+          <altitudeMode>relativeToGround</altitudeMode>
+          <coordinates>-122.0857667006183,37.42156927867553,50</coordinates>
+        </Point>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Styles and Markup</name>
+      <visibility>0</visibility>
+      <description>With KML it is easy to create rich, descriptive markup to
+        annotate and enrich your placemarks</description>
+      <LookAt>
+        <longitude>-122.0845787422371</longitude>
+        <latitude>37.42215078726837</latitude>
+        <altitude>0</altitude>
+        <range>365.2646826292919</range>
+        <tilt>40.55750733930874</tilt>
+        <heading>-148.4126777488172</heading>
+      </LookAt>
+      <styleUrl>#noDrivingDirections</styleUrl>
+      <Document>
+        <name>Highlighted Icon</name>
+        <visibility>0</visibility>
+        <description>Place your mouse over the icon to see it display the new
+          icon</description>
+        <LookAt>
+          <longitude>-122.0856552124024</longitude>
+          <latitude>37.4224281311035</latitude>
+          <altitude>0</altitude>
+          <range>265.8520424250024</range>
+          <tilt>0</tilt>
+          <heading>0</heading>
+        </LookAt>
+        <Style id="highlightPlacemark">
+          <IconStyle>
+            <Icon>
+              <href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>
+            </Icon>
+          </IconStyle>
+        </Style>
+        <Style id="normalPlacemark">
+          <IconStyle>
+            <Icon>
+              <href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
+            </Icon>
+          </IconStyle>
+        </Style>
+        <StyleMap id="exampleStyleMap">
+          <Pair>
+            <key>normal</key>
+            <styleUrl>#normalPlacemark</styleUrl>
+          </Pair>
+          <Pair>
+            <key>highlight</key>
+            <styleUrl>#highlightPlacemark</styleUrl>
+          </Pair>
+        </StyleMap>
+        <Placemark>
+          <name>Roll over this icon</name>
+          <visibility>0</visibility>
+          <styleUrl>#exampleStyleMap</styleUrl>
+          <Point>
+            <coordinates>-122.0856545755255,37.42243077405461,0</coordinates>
+          </Point>
+        </Placemark>
+      </Document>
+      <Placemark>
+        <name>Descriptive HTML</name>
+        <visibility>0</visibility>
+        <description><![CDATA[Click on the blue link!<br><br>
+Placemark descriptions can be enriched by using many standard HTML tags.<br>
+For example:
+<hr>
+Styles:<br>
+<i>Italics</i>, 
+<b>Bold</b>, 
+<u>Underlined</u>, 
+<s>Strike Out</s>, 
+subscript<sub>subscript</sub>, 
+superscript<sup>superscript</sup>, 
+<big>Big</big>, 
+<small>Small</small>, 
+<tt>Typewriter</tt>, 
+<em>Emphasized</em>, 
+<strong>Strong</strong>, 
+<code>Code</code>
+<hr>
+Fonts:<br> 
+<font color="red">red by name</font>, 
+<font color="#408010">leaf green by hexadecimal RGB</font>
+<br>
+<font size=1>size 1</font>, 
+<font size=2>size 2</font>, 
+<font size=3>size 3</font>, 
+<font size=4>size 4</font>, 
+<font size=5>size 5</font>, 
+<font size=6>size 6</font>, 
+<font size=7>size 7</font>
+<br>
+<font face=times>Times</font>, 
+<font face=verdana>Verdana</font>, 
+<font face=arial>Arial</font><br>
+<hr>
+Links: 
+<br>
+<a href="http://earth.google.com/">Google Earth!</a>
+<br>
+ or:  Check out our website at www.google.com
+<hr>
+Alignment:<br>
+<p align=left>left</p>
+<p align=center>center</p>
+<p align=right>right</p>
+<hr>
+Ordered Lists:<br>
+<ol><li>First</li><li>Second</li><li>Third</li></ol>
+<ol type="a"><li>First</li><li>Second</li><li>Third</li></ol>
+<ol type="A"><li>First</li><li>Second</li><li>Third</li></ol>
+<hr>
+Unordered Lists:<br>
+<ul><li>A</li><li>B</li><li>C</li></ul>
+<ul type="circle"><li>A</li><li>B</li><li>C</li></ul>
+<ul type="square"><li>A</li><li>B</li><li>C</li></ul>
+<hr>
+Definitions:<br>
+<dl>
+<dt>Google:</dt><dd>The best thing since sliced bread</dd>
+</dl>
+<hr>
+Centered:<br><center>
+Time present and time past<br>
+Are both perhaps present in time future,<br>
+And time future contained in time past.<br>
+If all time is eternally present<br>
+All time is unredeemable.<br>
+</center>
+<hr>
+Block Quote:
+<br>
+<blockquote>
+We shall not cease from exploration<br>
+And the end of all our exploring<br>
+Will be to arrive where we started<br>
+And know the place for the first time.<br>
+<i>-- T.S. Eliot</i>
+</blockquote>
+<br>
+<hr>
+Headings:<br>
+<h1>Header 1</h1>
+<h2>Header 2</h2>
+<h3>Header 3</h3>
+<h3>Header 4</h4>
+<h3>Header 5</h5>
+<hr>
+Images:<br>
+<i>Remote image</i><br>
+<img src="http://code.google.com/apis/kml/documentation/googleSample.png"><br>
+<i>Scaled image</i><br>
+<img src="http://code.google.com/apis/kml/documentation/googleSample.png" width=100><br>
+<hr>
+Simple Tables:<br>
+<table border="1" padding="1">
+<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
+<tr><td>a</td><td>b</td><td>c</td><td>d</td><td>e</td></tr>
+</table>
+<br>
+[Did you notice that double-clicking on the placemark doesn't cause the viewer to take you anywhere? This is because it is possible to directly author a "placeless placemark". If you look at the code for this example, you will see that it has neither a point coordinate nor a LookAt element.]]]></description>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Ground Overlays</name>
+      <visibility>0</visibility>
+      <description>Examples of ground overlays</description>
+      <GroundOverlay>
+        <name>Large-scale overlay on terrain</name>
+        <visibility>0</visibility>
+        <description>Overlay shows Mount Etna erupting on July 13th, 2001.</description>
+        <LookAt>
+          <longitude>15.02468937557116</longitude>
+          <latitude>37.67395167941667</latitude>
+          <altitude>0</altitude>
+          <range>30350.36838438907</range>
+          <tilt>58.31228652890705</tilt>
+          <heading>-16.5581842842829</heading>
+        </LookAt>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/etna.jpg</href>
+        </Icon>
+        <LatLonBox>
+          <north>37.91904192681665</north>
+          <south>37.46543388598137</south>
+          <east>15.35832653742206</east>
+          <west>14.60128369746704</west>
+          <rotation>-0.1556640799496235</rotation>
+        </LatLonBox>
+      </GroundOverlay>
+    </Folder>
+    <Folder>
+      <name>Screen Overlays</name>
+      <visibility>0</visibility>
+      <description>Screen overlays have to be authored directly in KML. These
+        examples illustrate absolute and dynamic positioning in screen space.</description>
+      <ScreenOverlay>
+        <name>Simple crosshairs</name>
+        <visibility>0</visibility>
+        <description>This screen overlay uses fractional positioning to put the
+          image in the exact center of the screen</description>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/crosshairs.png</href>
+        </Icon>
+        <overlayXY x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
+        <screenXY x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
+        <rotationXY x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
+        <size x="0" y="0" xunits="pixels" yunits="pixels"/>
+      </ScreenOverlay>
+      <ScreenOverlay>
+        <name>Absolute Positioning: Top left</name>
+        <visibility>0</visibility>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/top_left.jpg</href>
+        </Icon>
+        <overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
+        <screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
+        <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
+        <size x="0" y="0" xunits="fraction" yunits="fraction"/>
+      </ScreenOverlay>
+      <ScreenOverlay>
+        <name>Absolute Positioning: Top right</name>
+        <visibility>0</visibility>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/top_right.jpg</href>
+        </Icon>
+        <overlayXY x="1" y="1" xunits="fraction" yunits="fraction"/>
+        <screenXY x="1" y="1" xunits="fraction" yunits="fraction"/>
+        <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
+        <size x="0" y="0" xunits="fraction" yunits="fraction"/>
+      </ScreenOverlay>
+      <ScreenOverlay>
+        <name>Absolute Positioning: Bottom left</name>
+        <visibility>0</visibility>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/bottom_left.jpg</href>
+        </Icon>
+        <overlayXY x="0" y="-1" xunits="fraction" yunits="fraction"/>
+        <screenXY x="0" y="0" xunits="fraction" yunits="fraction"/>
+        <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
+        <size x="0" y="0" xunits="fraction" yunits="fraction"/>
+      </ScreenOverlay>
+      <ScreenOverlay>
+        <name>Absolute Positioning: Bottom right</name>
+        <visibility>0</visibility>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/bottom_right.jpg</href>
+        </Icon>
+        <overlayXY x="1" y="-1" xunits="fraction" yunits="fraction"/>
+        <screenXY x="1" y="0" xunits="fraction" yunits="fraction"/>
+        <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
+        <size x="0" y="0" xunits="fraction" yunits="fraction"/>
+      </ScreenOverlay>
+      <ScreenOverlay>
+        <name>Dynamic Positioning: Top of screen</name>
+        <visibility>0</visibility>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/dynamic_screenoverlay.jpg</href>
+        </Icon>
+        <overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
+        <screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
+        <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
+        <size x="1" y="0.2" xunits="fraction" yunits="fraction"/>
+      </ScreenOverlay>
+      <ScreenOverlay>
+        <name>Dynamic Positioning: Right of screen</name>
+        <visibility>0</visibility>
+        <Icon>
+          <href>http://code.google.com/apis/kml/documentation/dynamic_right.jpg</href>
+        </Icon>
+        <overlayXY x="1" y="1" xunits="fraction" yunits="fraction"/>
+        <screenXY x="1" y="1" xunits="fraction" yunits="fraction"/>
+        <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
+        <size x="0" y="1" xunits="fraction" yunits="fraction"/>
+      </ScreenOverlay>
+    </Folder>
+    <Folder>
+      <name>Paths</name>
+      <visibility>0</visibility>
+      <description>Examples of paths. Note that the tessellate tag is by default
+        set to 0. If you want to create tessellated lines, they must be authored
+        (or edited) directly in KML.</description>
+      <Placemark>
+        <name>Tessellated</name>
+        <visibility>0</visibility>
+        <description><![CDATA[If the <tessellate> tag has a value of 1, the line will contour to the underlying terrain]]></description>
+        <LookAt>
+          <longitude>-112.0822680013139</longitude>
+          <latitude>36.09825589333556</latitude>
+          <altitude>0</altitude>
+          <range>2889.145007690472</range>
+          <tilt>62.04855796276328</tilt>
+          <heading>103.8120432044965</heading>
+        </LookAt>
+        <LineString>
+          <tessellate>1</tessellate>
+          <coordinates> -112.0814237830345,36.10677870477137,0
+            -112.0870267752693,36.0905099328766,0 </coordinates>
+        </LineString>
+      </Placemark>
+      <Placemark>
+        <name>Untessellated</name>
+        <visibility>0</visibility>
+        <description><![CDATA[If the <tessellate> tag has a value of 0, the line follow a simple straight-line path from point to point]]></description>
+        <LookAt>
+          <longitude>-112.0822680013139</longitude>
+          <latitude>36.09825589333556</latitude>
+          <altitude>0</altitude>
+          <range>2889.145007690472</range>
+          <tilt>62.04855796276328</tilt>
+          <heading>103.8120432044965</heading>
+        </LookAt>
+        <LineString>
+          <tessellate>0</tessellate>
+          <coordinates> -112.080622229595,36.10673460007995,0
+            -112.085242575315,36.09049598612422,0 </coordinates>
+        </LineString>
+      </Placemark>
+      <Placemark>
+        <name>Absolute</name>
+        <visibility>0</visibility>
+        <description>Transparent purple line</description>
+        <LookAt>
+          <longitude>-112.2719329043177</longitude>
+          <latitude>36.08890633450894</latitude>
+          <altitude>0</altitude>
+          <range>2569.386744398339</range>
+          <tilt>44.60763714063257</tilt>
+          <heading>-106.8161545998597</heading>
+        </LookAt>
+        <styleUrl>#transPurpleLineGreenPoly</styleUrl>
+        <LineString>
+          <tessellate>1</tessellate>
+          <altitudeMode>absolute</altitudeMode>
+          <coordinates> -112.265654928602,36.09447672602546,2357
+            -112.2660384528238,36.09342608838671,2357
+            -112.2668139013453,36.09251058776881,2357
+            -112.2677826834445,36.09189827357996,2357
+            -112.2688557510952,36.0913137941187,2357
+            -112.2694810717219,36.0903677207521,2357
+            -112.2695268555611,36.08932171487285,2357
+            -112.2690144567276,36.08850916060472,2357
+            -112.2681528815339,36.08753813597956,2357
+            -112.2670588176031,36.08682685262568,2357
+            -112.2657374587321,36.08646312301303,2357 </coordinates>
+        </LineString>
+      </Placemark>
+      <Placemark>
+        <name>Absolute Extruded</name>
+        <visibility>0</visibility>
+        <description>Transparent green wall with yellow outlines</description>
+        <LookAt>
+          <longitude>-112.2643334742529</longitude>
+          <latitude>36.08563154742419</latitude>
+          <altitude>0</altitude>
+          <range>4451.842204068102</range>
+          <tilt>44.61038665812578</tilt>
+          <heading>-125.7518698668815</heading>
+        </LookAt>
+        <styleUrl>#yellowLineGreenPoly</styleUrl>
+        <LineString>
+          <extrude>1</extrude>
+          <tessellate>1</tessellate>
+          <altitudeMode>absolute</altitudeMode>
+          <coordinates> -112.2550785337791,36.07954952145647,2357
+            -112.2549277039738,36.08117083492122,2357
+            -112.2552505069063,36.08260761307279,2357
+            -112.2564540158376,36.08395660588506,2357
+            -112.2580238976449,36.08511401044813,2357
+            -112.2595218489022,36.08584355239394,2357
+            -112.2608216347552,36.08612634548589,2357
+            -112.262073428656,36.08626019085147,2357
+            -112.2633204928495,36.08621519860091,2357
+            -112.2644963846444,36.08627897945274,2357
+            -112.2656969554589,36.08649599090644,2357 </coordinates>
+        </LineString>
+      </Placemark>
+      <Placemark>
+        <name>Relative</name>
+        <visibility>0</visibility>
+        <description>Black line (10 pixels wide), height tracks terrain</description>
+        <LookAt>
+          <longitude>-112.2580438551384</longitude>
+          <latitude>36.1072674824385</latitude>
+          <altitude>0</altitude>
+          <range>2927.61105910266</range>
+          <tilt>44.61324882043339</tilt>
+          <heading>4.947421249553717</heading>
+        </LookAt>
+        <styleUrl>#thickBlackLine</styleUrl>
+        <LineString>
+          <tessellate>1</tessellate>
+          <altitudeMode>relativeToGround</altitudeMode>
+          <coordinates> -112.2532845153347,36.09886943729116,645
+            -112.2540466121145,36.09919570465255,645
+            -112.254734666947,36.09984998366178,645
+            -112.255493345654,36.10051310621746,645
+            -112.2563157098468,36.10108441943419,645
+            -112.2568033076439,36.10159722088088,645
+            -112.257494011321,36.10204323542867,645
+            -112.2584106072308,36.10229131995655,645
+            -112.2596588987972,36.10240001286358,645
+            -112.2610581199487,36.10213176873407,645
+            -112.2626285262793,36.10157011437219,645 </coordinates>
+        </LineString>
+      </Placemark>
+      <Placemark>
+        <name>Relative Extruded</name>
+        <visibility>0</visibility>
+        <description>Opaque blue walls with red outline, height tracks terrain</description>
+        <LookAt>
+          <longitude>-112.2683594333433</longitude>
+          <latitude>36.09884362144909</latitude>
+          <altitude>0</altitude>
+          <range>2184.193522571467</range>
+          <tilt>44.60855445139561</tilt>
+          <heading>-72.24271551768405</heading>
+        </LookAt>
+        <styleUrl>#redLineBluePoly</styleUrl>
+        <LineString>
+          <extrude>1</extrude>
+          <tessellate>1</tessellate>
+          <altitudeMode>relativeToGround</altitudeMode>
+          <coordinates> -112.2656634181359,36.09445214722695,630
+            -112.2652238941097,36.09520916122063,630
+            -112.2645079986395,36.09580763864907,630
+            -112.2638827428817,36.09628572284063,630
+            -112.2635746835406,36.09679275951239,630
+            -112.2635711822407,36.09740038871899,630
+            -112.2640296531825,36.09804913435539,630
+            -112.264327720538,36.09880337400301,630
+            -112.2642436562271,36.09963644790288,630
+            -112.2639148687042,36.10055381117246,630
+            -112.2626894973474,36.10149062823369,630 </coordinates>
+        </LineString>
+      </Placemark>
+    </Folder>
+    <Folder>
+      <name>Polygons</name>
+      <visibility>0</visibility>
+      <description>Examples of polygon shapes</description>
+      <Folder>
+        <name>Google Campus</name>
+        <visibility>0</visibility>
+        <description>A collection showing how easy it is to create 3-dimensional
+          buildings</description>
+        <LookAt>
+          <longitude>-122.084120030116</longitude>
+          <latitude>37.42174011925477</latitude>
+          <altitude>0</altitude>
+          <range>276.7870053764046</range>
+          <tilt>53.454348562403</tilt>
+          <heading>-34.82469740081282</heading>
+        </LookAt>
+        <Placemark>
+          <name>Building 40</name>
+          <visibility>0</visibility>
+          <styleUrl>#transRedPoly</styleUrl>
+          <Polygon>
+            <extrude>1</extrude>
+            <altitudeMode>relativeToGround</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -122.0848938459612,37.42257124044786,17
+                  -122.0849580979198,37.42211922626856,17
+                  -122.0847469573047,37.42207183952619,17
+                  -122.0845725380962,37.42209006729676,17
+                  -122.0845954886723,37.42215932700895,17
+                  -122.0838521118269,37.42227278564371,17
+                  -122.083792243335,37.42203539112084,17
+                  -122.0835076656616,37.42209006957106,17
+                  -122.0834709464152,37.42200987395161,17
+                  -122.0831221085748,37.4221046494946,17
+                  -122.0829247374572,37.42226503990386,17
+                  -122.0829339169385,37.42231242843094,17
+                  -122.0833837359737,37.42225046087618,17
+                  -122.0833607854248,37.42234159228745,17
+                  -122.0834204551642,37.42237075460644,17
+                  -122.083659133885,37.42251292011001,17
+                  -122.0839758438952,37.42265873093781,17
+                  -122.0842374743331,37.42265143972521,17
+                  -122.0845036949503,37.4226514386435,17
+                  -122.0848020460801,37.42261133916315,17
+                  -122.0847882750515,37.42256395055121,17
+                  -122.0848938459612,37.42257124044786,17 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+        <Placemark>
+          <name>Building 41</name>
+          <visibility>0</visibility>
+          <styleUrl>#transBluePoly</styleUrl>
+          <Polygon>
+            <extrude>1</extrude>
+            <altitudeMode>relativeToGround</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -122.0857412771483,37.42227033155257,17
+                  -122.0858169768481,37.42231408832346,17
+                  -122.085852582875,37.42230337469744,17
+                  -122.0858799945639,37.42225686138789,17
+                  -122.0858860101409,37.4222311076138,17
+                  -122.0858069157288,37.42220250173855,17
+                  -122.0858379542653,37.42214027058678,17
+                  -122.0856732640519,37.42208690214408,17
+                  -122.0856022926407,37.42214885429042,17
+                  -122.0855902778436,37.422128290487,17
+                  -122.0855841672237,37.42208171967246,17
+                  -122.0854852065741,37.42210455874995,17
+                  -122.0855067264352,37.42214267949824,17
+                  -122.0854430712915,37.42212783846172,17
+                  -122.0850990714904,37.42251282407603,17
+                  -122.0856769818632,37.42281815323651,17
+                  -122.0860162273783,37.42244918858722,17
+                  -122.0857260327004,37.42229239604253,17
+                  -122.0857412771483,37.42227033155257,17 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+        <Placemark>
+          <name>Building 42</name>
+          <visibility>0</visibility>
+          <styleUrl>#transGreenPoly</styleUrl>
+          <Polygon>
+            <extrude>1</extrude>
+            <altitudeMode>relativeToGround</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -122.0857862287242,37.42136208886969,25
+                  -122.0857312990603,37.42136935989481,25
+                  -122.0857312992918,37.42140934910903,25
+                  -122.0856077073679,37.42138390166565,25
+                  -122.0855802426516,37.42137299550869,25
+                  -122.0852186221971,37.42137299504316,25
+                  -122.0852277765639,37.42161656508265,25
+                  -122.0852598189347,37.42160565894403,25
+                  -122.0852598185499,37.42168200156,25
+                  -122.0852369311478,37.42170017860346,25
+                  -122.0852643957828,37.42176197982575,25
+                  -122.0853239032746,37.42176198013907,25
+                  -122.0853559454324,37.421852864452,25
+                  -122.0854108752463,37.42188921823734,25
+                  -122.0854795379357,37.42189285337048,25
+                  -122.0855436229819,37.42188921797546,25
+                  -122.0856260178042,37.42186013499926,25
+                  -122.085937287963,37.42186013453605,25
+                  -122.0859428718666,37.42160898590042,25
+                  -122.0859655469861,37.42157992759144,25
+                  -122.0858640462341,37.42147115002957,25
+                  -122.0858548911215,37.42140571326184,25
+                  -122.0858091162768,37.4214057134039,25
+                  -122.0857862287242,37.42136208886969,25 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+        <Placemark>
+          <name>Building 43</name>
+          <visibility>0</visibility>
+          <styleUrl>#transYellowPoly</styleUrl>
+          <Polygon>
+            <extrude>1</extrude>
+            <altitudeMode>relativeToGround</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -122.0844371128284,37.42177253003091,19
+                  -122.0845118855746,37.42191111542896,19
+                  -122.0850470999805,37.42178755121535,19
+                  -122.0850719913391,37.42143663023161,19
+                  -122.084916406232,37.42137237822116,19
+                  -122.0842193868167,37.42137237801626,19
+                  -122.08421938659,37.42147617161496,19
+                  -122.0838086419991,37.4214613409357,19
+                  -122.0837899728564,37.42131306410796,19
+                  -122.0832796534698,37.42129328840593,19
+                  -122.0832609819207,37.42139213944298,19
+                  -122.0829373621737,37.42137236399876,19
+                  -122.0829062425667,37.42151569778871,19
+                  -122.0828502269665,37.42176282576465,19
+                  -122.0829435788635,37.42176776969635,19
+                  -122.083217411188,37.42179248552686,19
+                  -122.0835970430103,37.4217480074456,19
+                  -122.0839455556771,37.42169364237603,19
+                  -122.0840077894637,37.42176283815853,19
+                  -122.084113587521,37.42174801104392,19
+                  -122.0840762473784,37.42171341292375,19
+                  -122.0841447047739,37.42167881534569,19
+                  -122.084144704223,37.42181720660197,19
+                  -122.0842503333074,37.4218170700446,19
+                  -122.0844371128284,37.42177253003091,19 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+      </Folder>
+      <Folder>
+        <name>Extruded Polygon</name>
+        <description>A simple way to model a building</description>
+        <Placemark>
+          <name>The Pentagon</name>
+          <LookAt>
+            <longitude>-77.05580139178142</longitude>
+            <latitude>38.870832443487</latitude>
+            <range>742.0552506670548</range>
+            <tilt>48.09646074797388</tilt>
+            <heading>59.88865561738225</heading>
+          </LookAt>
+          <Polygon>
+            <extrude>1</extrude>
+            <altitudeMode>relativeToGround</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -77.05788457660967,38.87253259892824,100
+                  -77.05465973756702,38.87291016281703,100
+                  -77.05315536854791,38.87053267794386,100
+                  -77.05552622493516,38.868757801256,100
+                  -77.05844056290393,38.86996206506943,100
+                  -77.05788457660967,38.87253259892824,100 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+            <innerBoundaryIs>
+              <LinearRing>
+                <coordinates> -77.05668055019126,38.87154239798456,100
+                  -77.05542625960818,38.87167890344077,100
+                  -77.05485125901024,38.87076535397792,100
+                  -77.05577677433152,38.87008686581446,100
+                  -77.05691162017543,38.87054446963351,100
+                  -77.05668055019126,38.87154239798456,100 </coordinates>
+              </LinearRing>
+            </innerBoundaryIs>
+          </Polygon>
+        </Placemark>
+      </Folder>
+      <Folder>
+        <name>Absolute and Relative</name>
+        <visibility>0</visibility>
+        <description>Four structures whose roofs meet exactly. Turn on/off
+          terrain to see the difference between relative and absolute
+          positioning.</description>
+        <LookAt>
+          <longitude>-112.3348969157552</longitude>
+          <latitude>36.14845533214919</latitude>
+          <altitude>0</altitude>
+          <range>990.6761201087104</range>
+          <tilt>49.30695423894192</tilt>
+          <heading>-86.91235037566909</heading>
+        </LookAt>
+        <Placemark>
+          <name>Absolute</name>
+          <visibility>0</visibility>
+          <styleUrl>#transBluePoly</styleUrl>
+          <Polygon>
+            <tessellate>1</tessellate>
+            <altitudeMode>absolute</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -112.3372510731295,36.14888505105317,1784
+                  -112.3356128688403,36.14781540589019,1784
+                  -112.3368169371048,36.14658677734382,1784
+                  -112.3384408457543,36.14762778914076,1784
+                  -112.3372510731295,36.14888505105317,1784 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+        <Placemark>
+          <name>Absolute Extruded</name>
+          <visibility>0</visibility>
+          <styleUrl>#transRedPoly</styleUrl>
+          <Polygon>
+            <extrude>1</extrude>
+            <tessellate>1</tessellate>
+            <altitudeMode>absolute</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -112.3396586818843,36.14637618647505,1784
+                  -112.3380597654315,36.14531751871353,1784
+                  -112.3368254237788,36.14659596244607,1784
+                  -112.3384555043203,36.14762621763982,1784
+                  -112.3396586818843,36.14637618647505,1784 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+        <Placemark>
+          <name>Relative</name>
+          <visibility>0</visibility>
+          <LookAt>
+            <longitude>-112.3350152490417</longitude>
+            <latitude>36.14943123077423</latitude>
+            <altitude>0</altitude>
+            <range>345.5169113679813</range>
+            <tilt>37.92486261093203</tilt>
+            <heading>-118.9214100848499</heading>
+          </LookAt>
+          <styleUrl>#transGreenPoly</styleUrl>
+          <Polygon>
+            <tessellate>1</tessellate>
+            <altitudeMode>relativeToGround</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -112.3349463145932,36.14988705767721,100
+                  -112.3354019540677,36.14941108398372,100
+                  -112.3344428289146,36.14878490381308,100
+                  -112.3331289492913,36.14780840132443,100
+                  -112.3317019516947,36.14680755678357,100
+                  -112.331131440106,36.1474173426228,100
+                  -112.332616324338,36.14845453364654,100
+                  -112.3339876620524,36.14926570522069,100
+                  -112.3349463145932,36.14988705767721,100 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+        <Placemark>
+          <name>Relative Extruded</name>
+          <visibility>0</visibility>
+          <LookAt>
+            <longitude>-112.3351587892382</longitude>
+            <latitude>36.14979247129029</latitude>
+            <altitude>0</altitude>
+            <range>401.0997279712519</range>
+            <tilt>56.10280503739589</tilt>
+            <heading>-55.42811560891606</heading>
+          </LookAt>
+          <styleUrl>#transYellowPoly</styleUrl>
+          <Polygon>
+            <extrude>1</extrude>
+            <tessellate>1</tessellate>
+            <altitudeMode>relativeToGround</altitudeMode>
+            <outerBoundaryIs>
+              <LinearRing>
+                <coordinates> -112.3348783983763,36.1514008468736,100
+                  -112.3372535345629,36.14888517553886,100
+                  -112.3356068927954,36.14781612679284,100
+                  -112.3350034807972,36.14846469024177,100
+                  -112.3358353861232,36.1489624162954,100
+                  -112.3345888301373,36.15026229372507,100
+                  -112.3337937856278,36.14978096026463,100
+                  -112.3331798208424,36.1504472788618,100
+                  -112.3348783983763,36.1514008468736,100 </coordinates>
+              </LinearRing>
+            </outerBoundaryIs>
+          </Polygon>
+        </Placemark>
+      </Folder>
+    </Folder>
+  </Document>
+</kml>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/earthquake_public.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/earthquake_public.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/earthquake_public.kml	(revision 42196)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!-- (c) 2006 CBS Broadcasting Inc. -->
+<!--     All rights reserved        -->
+<!-- Author: J. Andrew Rogers (jrogers@neopolitan.com) for CBS News -->
+<kml xmlns="http://earth.google.com/kml/2.0">
+	<Document>
+		<name>CBS News Seismic Monitor (Source: USGS)</name>
+		<NetworkLink>
+			<name>CBS News Seismic Monitor (Source: USGS)</name>
+			<description>Earthquake list updates every 5 minutes</description>
+			<refreshVisibility>1</refreshVisibility>
+			<Url>
+				<href>http://seismic.cbsnews.google.neopolitan.com/cbs/recent_earthquakes_public.kml</href>
+				<refreshMode>onInterval</refreshMode>
+				<refreshInterval>300</refreshInterval>
+			</Url>
+		</NetworkLink>
+
+		<Folder>
+			<name>Layers and Legends</name>
+			<open>0</open>
+			<visibility>1</visibility>
+			<ScreenOverlay>
+				<name>Earthquake Legend</name>
+				<visibility>1</visibility>
+				<Icon><href>http://seismic.cbsnews.google.neopolitan.com/cbs/images/EarthquakeLegend_public.png</href></Icon>
+				<overlayXY x="1" xunits="fraction" y="1" yunits="fraction"/>
+				<screenXY x="1" xunits="fraction" y="0.7" yunits="fraction"/>
+				<rotationXY x="0" xunits="fraction" y="0" yunits="fraction"/>
+				<size x="0" xunits="fraction" y="0" yunits="fraction"/>
+			</ScreenOverlay>
+			<Folder>
+				<name>Plate Tectonics</name>
+				<visibility>0</visibility>
+				<open>0</open>
+				<NetworkLink>
+					<visibility>0</visibility>
+					<name>Plate Tectonics Layer</name>
+					<Url>
+						<href>http://seismic.cbsnews.google.neopolitan.com/cbs/plates.kml</href>
+					</Url>
+				</NetworkLink>
+				<ScreenOverlay>
+					<name>Plate Legend</name>
+					<visibility>0</visibility>
+					<Icon><href>http://seismic.cbsnews.google.neopolitan.com/cbs/images/PlateLegend.png</href></Icon>
+					<overlayXY x="1" xunits="fraction" y="1" yunits="fraction"/>
+					<screenXY x="0.20" xunits="fraction" y="0.5" yunits="fraction"/>
+					<rotationXY x="0" xunits="fraction" y="0" yunits="fraction"/>
+					<size x="0" xunits="fraction" y="0" yunits="fraction"/>
+				</ScreenOverlay>
+			</Folder>	
+			<ScreenOverlay>
+				<name>Shakemap Legend</name>
+				<visibility>0</visibility>
+				<Icon><href>http://seismic.cbsnews.google.neopolitan.com/cbs/images/ShakemapLegend_public.png</href></Icon>
+				<overlayXY x="1" xunits="fraction" y="0" yunits="fraction"/>
+				<screenXY x="1" xunits="fraction" y="0.1" yunits="fraction"/>
+				<rotationXY x="0" xunits="fraction" y="0" yunits="fraction"/>
+				<size x="0" xunits="fraction" y="0" yunits="fraction"/>
+			</ScreenOverlay>
+		</Folder>
+		
+	</Document>
+</kml>
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/searchwithin.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/searchwithin.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/searchwithin.kml	(revision 42196)
@@ -0,0 +1,730 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<kml xmlns="http://earth.google.com/kml/2.0">
+<Folder><name>Latest entries on Placeopedia</name><description>The 50 latest additions to placeopedia.com</description>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/The_Sphinx_of_Egypt">Wikipedia article</a>.]]></description>
+	<name>The Sphinx of Egypt</name>
+	<LookAt>
+		<longitude>12.9630088806152</longitude>
+		<latitude>55.6287712569481</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>12.9630088806152,55.6287712569481,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/The_Sphinx_of_Egypt">Wikipedia article</a>.]]></description>
+	<name>The Sphinx of Egypt</name>
+	<LookAt>
+		<longitude>13.0074691772461</longitude>
+		<latitude>55.6224714786872</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>13.0074691772461,55.6224714786872,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Barabati_Stadium">Wikipedia article</a>.]]></description>
+	<name>Barabati Stadium</name>
+	<LookAt>
+		<longitude>85.8684593439102</longitude>
+		<latitude>20.4810093586788</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>85.8684593439102,20.4810093586788,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Hoher_Meissner_transmitter">Wikipedia article</a>.]]></description>
+	<name>Hoher Meissner transmitter</name>
+	<LookAt>
+		<longitude>9.8476767539978</longitude>
+		<latitude>51.2072497274211</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>9.8476767539978,51.2072497274211,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Mediumwave_transmitter_Mainflingen">Wikipedia article</a>.]]></description>
+	<name>Mediumwave transmitter Mainflingen</name>
+	<LookAt>
+		<longitude>8.97538483142853</longitude>
+		<latitude>50.0005432798678</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.97538483142853,50.0005432798678,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Weiskirchen_transmitter">Wikipedia article</a>.]]></description>
+	<name>Weiskirchen transmitter</name>
+	<LookAt>
+		<longitude>8.86245846748352</longitude>
+		<latitude>50.0554718115323</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.86245846748352,50.0554718115323,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Golden_gate_bridge">Wikipedia article</a>.]]></description>
+	<name>Golden gate bridge</name>
+	<LookAt>
+		<longitude>-122.478332519531</longitude>
+		<latitude>37.8162934802451</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-122.478332519531,37.8162934802451,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Asea_Brown_Boveri">Wikipedia article</a>.]]></description>
+	<name>Asea Brown Boveri</name>
+	<LookAt>
+		<longitude>8.95613193511963</longitude>
+		<latitude>50.0982297247924</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.95613193511963,50.0982297247924,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Samson_AG">Wikipedia article</a>.]]></description>
+	<name>Samson AG</name>
+	<LookAt>
+		<longitude>8.73416036367416</longitude>
+		<latitude>50.1170885719846</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.73416036367416,50.1170885719846,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Johann_Wolfgang_Goethe_University_of_Frankfurt_am_Main">Wikipedia article</a>.]]></description>
+	<name>Johann Wolfgang Goethe University of Frankfurt am Main</name>
+	<LookAt>
+		<longitude>8.65225374698639</longitude>
+		<latitude>50.1193398527015</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.65225374698639,50.1193398527015,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Senckenberg_Natural_History_Museum">Wikipedia article</a>.]]></description>
+	<name>Senckenberg Natural History Museum</name>
+	<LookAt>
+		<longitude>8.65215986967087</longitude>
+		<latitude>50.1174996234989</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.65215986967087,50.1174996234989,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Internationale_Automobil-Ausstellung">Wikipedia article</a>.]]></description>
+	<name>Internationale Automobil-Ausstellung</name>
+	<LookAt>
+		<longitude>8.64718437194824</longitude>
+		<latitude>50.1114143246192</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.64718437194824,50.1114143246192,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Commerzbank_Tower">Wikipedia article</a>.]]></description>
+	<name>Commerzbank Tower</name>
+	<LookAt>
+		<longitude>8.67458581924438</longitude>
+		<latitude>50.1108501311128</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.67458581924438,50.1108501311128,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/R%C3%BCsselsheim">Wikipedia article</a>.]]></description>
+	<name>Rüsselsheim</name>
+	<LookAt>
+		<longitude>8.41319918632507</longitude>
+		<latitude>49.9930291902804</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.41319918632507,49.9930291902804,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Opel">Wikipedia article</a>.]]></description>
+	<name>Opel</name>
+	<LookAt>
+		<longitude>8.3924388885498</longitude>
+		<latitude>49.9895872830961</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.3924388885498,49.9895872830961,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Vennesla">Wikipedia article</a>.]]></description>
+	<name>Vennesla</name>
+	<LookAt>
+		<longitude>7.96978712081909</longitude>
+		<latitude>58.2698103923775</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>7.96978712081909,58.2698103923775,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Bengtsfors">Wikipedia article</a>.]]></description>
+	<name>Bengtsfors</name>
+	<LookAt>
+		<longitude>12.227783203125</longitude>
+		<latitude>59.0279242565678</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>12.227783203125,59.0279242565678,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Angelholm">Wikipedia article</a>.]]></description>
+	<name>Angelholm</name>
+	<LookAt>
+		<longitude>12.8624153137207</longitude>
+		<latitude>56.2437791610249</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>12.8624153137207,56.2437791610249,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Volvo">Wikipedia article</a>.]]></description>
+	<name>Volvo</name>
+	<LookAt>
+		<longitude>11.8357086181641</longitude>
+		<latitude>57.7250527094531</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>11.8357086181641,57.7250527094531,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Gifhorn">Wikipedia article</a>.]]></description>
+	<name>Gifhorn</name>
+	<LookAt>
+		<longitude>10.5484628677368</longitude>
+		<latitude>52.4847142019527</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>10.5484628677368,52.4847142019527,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Gifhorn_(district)">Wikipedia article</a>.]]></description>
+	<name>Gifhorn (district)</name>
+	<LookAt>
+		<longitude>10.5461883544922</longitude>
+		<latitude>52.487170756492</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>10.5461883544922,52.487170756492,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Phaeno_Science_Center">Wikipedia article</a>.]]></description>
+	<name>Phaeno Science Center</name>
+	<LookAt>
+		<longitude>10.7899045944214</longitude>
+		<latitude>52.4288821024602</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>10.7899045944214,52.4288821024602,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Autostadt">Wikipedia article</a>.]]></description>
+	<name>Autostadt</name>
+	<LookAt>
+		<longitude>10.7938098907471</longitude>
+		<latitude>52.4328593749091</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>10.7938098907471,52.4328593749091,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Volkswagen_Arena">Wikipedia article</a>.]]></description>
+	<name>Volkswagen Arena</name>
+	<LookAt>
+		<longitude>10.8016955852509</longitude>
+		<latitude>52.4322771979116</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>10.8016955852509,52.4322771979116,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Volkswagen">Wikipedia article</a>.]]></description>
+	<name>Volkswagen</name>
+	<LookAt>
+		<longitude>10.7776737213135</longitude>
+		<latitude>52.4344554162235</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>10.7776737213135,52.4344554162235,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Dunlop_Tyres">Wikipedia article</a>.]]></description>
+	<name>Dunlop Tyres</name>
+	<LookAt>
+		<longitude>8.94227027893066</longitude>
+		<latitude>50.121321029742</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>8.94227027893066,50.121321029742,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Bragan%C3%A7a%2C_Portugal">Wikipedia article</a>.]]></description>
+	<name>Bragança, Portugal</name>
+	<LookAt>
+		<longitude>-6.76774978637695</longitude>
+		<latitude>41.7970398866702</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-6.76774978637695,41.7970398866702,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Qasr_al-Hosn">Wikipedia article</a>.]]></description>
+	<name>Qasr al-Hosn</name>
+	<LookAt>
+		<longitude>54.3548154830933</longitude>
+		<latitude>24.4823934915118</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>54.3548154830933,24.4823934915118,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Arzamas">Wikipedia article</a>.]]></description>
+	<name>Arzamas</name>
+	<LookAt>
+		<longitude>43.8224029541016</longitude>
+		<latitude>55.3974415286888</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>43.8224029541016,55.3974415286888,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Anticosti_Island">Wikipedia article</a>.]]></description>
+	<name>Anticosti Island</name>
+	<LookAt>
+		<longitude>-62.9296875</longitude>
+		<latitude>49.3823727870096</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-62.9296875,49.3823727870096,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Rathenow">Wikipedia article</a>.]]></description>
+	<name>Rathenow</name>
+	<LookAt>
+		<longitude>12.337474822998</longitude>
+		<latitude>52.6058623477012</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>12.337474822998,52.6058623477012,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Azure_Solutions">Wikipedia article</a>.]]></description>
+	<name>Azure Solutions</name>
+	<LookAt>
+		<longitude>-0.0901758670806885</longitude>
+		<latitude>51.5226764290955</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.0901758670806885,51.5226764290955,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Schweriner_See">Wikipedia article</a>.]]></description>
+	<name>Schweriner See</name>
+	<LookAt>
+		<longitude>11.4800262451172</longitude>
+		<latitude>53.7454624107403</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>11.4800262451172,53.7454624107403,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/St._George's_Hall%2C_Liverpool">Wikipedia article</a>.]]></description>
+	<name>St. George's Hall, Liverpool</name>
+	<LookAt>
+		<longitude>-2.98038482666016</longitude>
+		<latitude>53.4085469553325</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-2.98038482666016,53.4085469553325,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Toxteth">Wikipedia article</a>.]]></description>
+	<name>Toxteth</name>
+	<LookAt>
+		<longitude>-2.97480583190918</longitude>
+		<latitude>53.3875261046533</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-2.97480583190918,53.3875261046533,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/The_National_Art_Center%2C_Tokyo">Wikipedia article</a>.]]></description>
+	<name>The National Art Center, Tokyo</name>
+	<LookAt>
+		<longitude>139.726341962814</longitude>
+		<latitude>35.6652809642413</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>139.726341962814,35.6652809642413,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Harpenden%2C_England">Wikipedia article</a>.]]></description>
+	<name>Harpenden, England</name>
+	<LookAt>
+		<longitude>-0.354480743408203</longitude>
+		<latitude>51.8144518843551</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.354480743408203,51.8144518843551,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Herlev">Wikipedia article</a>.]]></description>
+	<name>Herlev</name>
+	<LookAt>
+		<longitude>12.4325752258301</longitude>
+		<latitude>55.7254183488036</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>12.4325752258301,55.7254183488036,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Scunthorpe">Wikipedia article</a>.]]></description>
+	<name>Scunthorpe</name>
+	<LookAt>
+		<longitude>-0.6591796875</longitude>
+		<latitude>53.5566260048246</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.6591796875,53.5566260048246,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Southwark_Street">Wikipedia article</a>.]]></description>
+	<name>Southwark Street</name>
+	<LookAt>
+		<longitude>-0.097503662109375</longitude>
+		<latitude>51.5051097125178</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.097503662109375,51.5051097125178,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Play.com">Wikipedia article</a>.]]></description>
+	<name>Play.com</name>
+	<LookAt>
+		<longitude>-2.10207939147949</longitude>
+		<latitude>49.1898378405126</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-2.10207939147949,49.1898378405126,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Channel_Television">Wikipedia article</a>.]]></description>
+	<name>Channel Television</name>
+	<LookAt>
+		<longitude>-2.10233688354492</longitude>
+		<latitude>49.1964005276006</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-2.10233688354492,49.1964005276006,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Cenacle">Wikipedia article</a>.]]></description>
+	<name>Cenacle</name>
+	<LookAt>
+		<longitude>35.229012966156</longitude>
+		<latitude>31.7717764817998</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>35.229012966156,31.7717764817998,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/States_of_Jersey">Wikipedia article</a>.]]></description>
+	<name>States of Jersey</name>
+	<LookAt>
+		<longitude>-2.10765838623047</longitude>
+		<latitude>49.181535074563</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-2.10765838623047,49.181535074563,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/BBC_Radio_Jersey">Wikipedia article</a>.]]></description>
+	<name>BBC Radio Jersey</name>
+	<LookAt>
+		<longitude>-2.10817337036133</longitude>
+		<latitude>49.1870891060557</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-2.10817337036133,49.1870891060557,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Tring_Park">Wikipedia article</a>.]]></description>
+	<name>Tring Park</name>
+	<LookAt>
+		<longitude>-0.65669059753418</longitude>
+		<latitude>51.7864267537299</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.65669059753418,51.7864267537299,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/The_Arts_Educational_School%2C_Tring_Park">Wikipedia article</a>.]]></description>
+	<name>The Arts Educational School, Tring Park</name>
+	<LookAt>
+		<longitude>-0.656347274780273</longitude>
+		<latitude>51.7928507181446</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.656347274780273,51.7928507181446,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Tring_Brewery">Wikipedia article</a>.]]></description>
+	<name>Tring Brewery</name>
+	<LookAt>
+		<longitude>-0.662269592285156</longitude>
+		<latitude>51.7920544085999</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.662269592285156,51.7920544085999,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/Walter_Rothschild_Zoological_Museum">Wikipedia article</a>.]]></description>
+	<name>Walter Rothschild Zoological Museum</name>
+	<LookAt>
+		<longitude>-0.660295486450195</longitude>
+		<latitude>51.7930099783663</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.660295486450195,51.7930099783663,0</coordinates>
+	</Point>
+</Placemark>
+<Placemark>
+	<description><![CDATA[<a href="http://en.wikipedia.org/wiki/English_Channel">Wikipedia article</a>.]]></description>
+	<name>English Channel</name>
+	<LookAt>
+		<longitude>-0.17578125</longitude>
+		<latitude>50.2542298823062</latitude>
+		<range>0</range>
+		<tilt>0</tilt>
+		<heading>3</heading>
+	</LookAt>
+	<Point>
+		<coordinates>-0.17578125,50.2542298823062,0</coordinates>
+	</Point>
+</Placemark>
+</Folder>
+</kml>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_PlaceMarket.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_PlaceMarket.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_PlaceMarket.kml	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<kml xmlns="http://earth.google.com/kml/2.1">
+  <Placemark>
+    <name>gggg</name>
+    <description>Attached to the ground. Intelligently places itself 
+       at the height of the underlying terrain.</description>
+    <Point>
+      <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
+    </Point>
+  </Placemark>
+</kml>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gcb-feed.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gcb-feed.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gcb-feed.kml	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<kml xmlns="http://earth.google.com/kml/2.1">
+<NetworkLink>
+	<name>Gombe Chimpanzee Blog</name>
+	<open>1</open>
+	<flyToView>1</flyToView>
+	<Url>
+		<href>http://www.janegoodall.org/news/gombe-blog/feed/gcb-feed2.kml</href>
+		<refreshMode>onInterval</refreshMode>
+		<refreshInterval>21600</refreshInterval>
+	</Url>
+</NetworkLink>
+</kml>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms.xml	(revision 42196)
@@ -0,0 +1,165 @@
+<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE WMT_MS_Capabilities SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_MS_Capabilities.dtd"
+ [
+ <!ELEMENT VendorSpecificCapabilities EMPTY>
+ ]>  <!-- end of DOCTYPE declaration -->
+
+<WMT_MS_Capabilities version="1.3.0">
+
+<!-- MapServer version 4.10.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS INPUT=JPEG INPUT=SDE INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG -->
+
+<Service>
+  <Name>OGC:WMS</Name>
+  <Title>WMS Server</Title>
+  <Abstract>CHG WMS Server</Abstract>
+        <KeywordList>
+          <Keyword>WMS</Keyword>
+          <Keyword> Servidor de mapas en red</Keyword>
+        </KeywordList>
+  <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/>
+  <ContactInformation>
+    <ContactAddress>
+<!-- WARNING: Mandatory metadata '..._addresstype' was missing in this context. -->
+        <Address>Avda. de Portugal s/n</Address>
+        <City>Sevilla</City>
+        <StateOrProvince>Sevilla</StateOrProvince>
+        <PostCode>41004</PostCode>
+        <Country>Spain</Country>
+    </ContactAddress>
+  </ContactInformation>
+</Service>
+
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <Format>application/vnd.ogc.wms_xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <GetMap>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png</Format>
+      <Format>image/png; mode=24bit</Format>
+      <Format>image/wbmp</Format>
+      <Format>image/tiff</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetMap>
+    <GetFeatureInfo>
+      <Format>text/plain</Format>
+      <Format>application/vnd.ogc.gml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetFeatureInfo>
+    <DescribeLayer>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeLayer>
+    <GetLegendGraphic>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png</Format>
+      <Format>image/png; mode=24bit</Format>
+      <Format>image/wbmp</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetLegendGraphic>
+    <GetStyles>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetStyles>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+    <Format>application/vnd.ogc.se_inimage</Format>
+    <Format>application/vnd.ogc.se_blank</Format>
+  </Exception>
+  <VendorSpecificCapabilities />
+  <UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0"/>
+  <Layer>
+    <Name>CHG</Name>
+    <Title>WMS Server</Title>
+    <SRS>epsg:23030</SRS>
+    <LatLonBoundingBox minx="-6.84474" miny="36.6506" maxx="-2.09263" maxy="38.5449" />
+    <BoundingBox SRS="EPSG:23030"
+                minx="164590" miny="4.06274e+006" maxx="579080" maxy="4.26635e+006" />
+    <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>time_idx</Name>
+        <Title>TIME INDEX</Title>
+        <SRS>EPSG:23030</SRS>
+        <LatLonBoundingBox minx="-6.8471" miny="36.682" maxx="-2.16907" maxy="38.75" />
+        <BoundingBox SRS="EPSG:23030"
+                    minx="165338" miny="4.0662e+006" maxx="572211" maxy="4.2891e+006" />
+        <Dimension name="time" units="ISO8601"/>
+        <Extent name="time" nearestValue="0">2004-01-01/2004-12-1/15D</Extent>
+    </Layer>
+    <Layer>
+      <Name>NDVI</Name>
+      <Title>NDVI</Title>
+      <Abstract>NDVI</Abstract>
+      <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>NDVI</Name>
+        <Title>NDVI</Title>
+        <SRS>EPSG:23030</SRS>
+        <LatLonBoundingBox minx="-6.8471" miny="36.682" maxx="-2.16907" maxy="38.75" />
+        <BoundingBox SRS="EPSG:23030"
+                    minx="165338" miny="4.0662e+006" maxx="572211" maxy="4.2891e+006" />
+        <Dimension name="time" units="ISO8601"/>
+        <Extent name="time" default="2004-01-01" nearestValue="0">2004-01-01/2004-12-1/15D</Extent>
+      </Layer>
+    </Layer>
+  </Layer>
+</Capability>
+</WMT_MS_Capabilities>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms	(revision 42196)
@@ -0,0 +1,140 @@
+<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<!DOCTYPE WMT_MS_Capabilities SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_MS_Capabilities.dtd"
+ [
+ <!ELEMENT VendorSpecificCapabilities EMPTY>
+ ]>  <!-- end of DOCTYPE declaration -->
+
+<WMT_MS_Capabilities version="1.1.1">
+
+<!-- MapServer version 4.10.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS INPUT=JPEG INPUT=SDE INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG -->
+
+<Service>
+  <Name>OGC:WMS</Name>
+  <Title>WMS Server</Title>
+  <Abstract>CHG WMS Server</Abstract>
+        <KeywordList>
+          <Keyword>WMS</Keyword>
+          <Keyword> Servidor de mapas en red</Keyword>
+        </KeywordList>
+  <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/>
+  <ContactInformation>
+    <ContactAddress>
+<!-- WARNING: Mandatory metadata '..._addresstype' was missing in this context. -->
+        <Address>Avda. de Portugal s/n</Address>
+        <City>Sevilla</City>
+        <StateOrProvince>Sevilla</StateOrProvince>
+        <PostCode>41004</PostCode>
+        <Country>Spain</Country>
+    </ContactAddress>
+  </ContactInformation>
+</Service>
+
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <Format>application/vnd.ogc.wms_xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <GetMap>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png</Format>
+      <Format>image/png; mode=24bit</Format>
+      <Format>image/wbmp</Format>
+      <Format>image/tiff</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetMap>
+    <GetFeatureInfo>
+      <Format>text/plain</Format>
+      <Format>application/vnd.ogc.gml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetFeatureInfo>
+    <DescribeLayer>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeLayer>
+    <GetLegendGraphic>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png</Format>
+      <Format>image/png; mode=24bit</Format>
+      <Format>image/wbmp</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetLegendGraphic>
+    <GetStyles>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sanlucar:81/cgi-bin/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetStyles>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+    <Format>application/vnd.ogc.se_inimage</Format>
+    <Format>application/vnd.ogc.se_blank</Format>
+  </Exception>
+  <VendorSpecificCapabilities />
+  <UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0"/>
+  <Layer>
+    <Name>CHG</Name>
+    <Title>WMS Server</Title>
+    <SRS>epsg:23030</SRS>
+    <LatLonBoundingBox minx="-6.84474" miny="36.6506" maxx="-2.09263" maxy="38.5449" />
+    <BoundingBox SRS="EPSG:23030"
+                minx="164590" miny="4.06274e+006" maxx="579080" maxy="4.26635e+006" />
+    <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>time_idx</Name>
+        <Title>TIME INDEX</Title>
+        <SRS>EPSG:23030</SRS>
+        <LatLonBoundingBox minx="-6.8471" miny="36.682" maxx="-2.16907" maxy="38.75" />
+        <BoundingBox SRS="EPSG:23030"
+                    minx="165338" miny="4.0662e+006" maxx="572211" maxy="4.2891e+006" />
+        <Dimension name="time" units="ISO8601"/>
+        <Extent name="time" nearestValue="0">2004-01-01/2004-12-1/15D</Extent>
+    </Layer>
+    <Layer>
+      <Name>NDVI</Name>
+      <Title>NDVI</Title>
+      <Abstract>NDVI</Abstract>
+      <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>NDVI</Name>
+        <Title>NDVI</Title>
+        <SRS>EPSG:23030</SRS>
+        <LatLonBoundingBox minx="-6.8471" miny="36.682" maxx="-2.16907" maxy="38.75" />
+        <BoundingBox SRS="EPSG:23030"
+                    minx="165338" miny="4.0662e+006" maxx="572211" maxy="4.2891e+006" />
+        <Dimension name="time" units="ISO8601"/>
+        <Extent name="time" default="2004-01-01" nearestValue="0">2004-01-01/2004-12-1/15D</Extent>
+      </Layer>
+    </Layer>
+  </Layer>
+</Capability>
+</WMT_MS_Capabilities>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml	(revision 42196)
@@ -0,0 +1,237 @@
+<?xml version='1.0' encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription
+   version="1.0.0" 
+   updateSequence="0" 
+   xmlns="http://www.opengis.net/wcs" 
+   xmlns:xlink="http://www.w3.org/1999/xlink" 
+   xmlns:gml="http://www.opengis.net/gml" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/describeCoverage.xsd">
+  <CoverageOffering>
+  <name>ndvi</name>
+  <label>North Central US MODIS-based NDVI Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+          <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:26915">
+          <gml:pos>159707 4597895</gml:pos>
+          <gml:pos>1400207 5501395</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>2480 1806</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>159707 5501395</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>500 0</gml:offsetVector>
+          <gml:offsetVector>0 -500</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+      <temporalDomain>
+        <gml:timePosition>2002-001</gml:timePosition>
+        <gml:timePosition>2002-033</gml:timePosition>
+        <gml:timePosition>2002-049</gml:timePosition>
+        <gml:timePosition>2002-065</gml:timePosition>
+        <gml:timePosition>2002-081</gml:timePosition>
+        <gml:timePosition>2002-097</gml:timePosition>
+        <gml:timePosition>2002-113</gml:timePosition>
+        <gml:timePosition>2002-129</gml:timePosition>
+        <gml:timePosition>2002-145</gml:timePosition>
+        <gml:timePosition>2002-161</gml:timePosition>
+        <gml:timePosition>2002-177</gml:timePosition>
+        <gml:timePosition>2002-193</gml:timePosition>
+      </temporalDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+<!-- WARNING: Mandatory metadata '..._rangeset_name' was missing in this context. -->
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:26915 EPSG:2163 EPSG:4269 EPSG:4326</requestResponseCRSs>
+      <nativeCRSs>EPSG:26915</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="raw binary">
+      <formats>GEOTIFF_INT16 HFA_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>fpar</name>
+  <label>North Central US MODIS-based FPAR Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+          <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:26915">
+          <gml:pos>159707 4597895</gml:pos>
+          <gml:pos>1400207 5501395</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>1240 903</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>159707 5501395</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>1000 0</gml:offsetVector>
+          <gml:offsetVector>0 -1000</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+      <temporalDomain>
+        <gml:timePosition>2002-001</gml:timePosition>
+        <gml:timePosition>2002-033</gml:timePosition>
+        <gml:timePosition>2002-057</gml:timePosition>
+        <gml:timePosition>2002-073</gml:timePosition>
+        <gml:timePosition>2002-089</gml:timePosition>
+        <gml:timePosition>2002-097</gml:timePosition>
+        <gml:timePosition>2002-105</gml:timePosition>
+        <gml:timePosition>2002-121</gml:timePosition>
+        <gml:timePosition>2002-137</gml:timePosition>
+        <gml:timePosition>2002-153</gml:timePosition>
+        <gml:timePosition>2002-169</gml:timePosition>
+        <gml:timePosition>2002-185</gml:timePosition>
+        <gml:timePosition>2002-201</gml:timePosition>
+      </temporalDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>rangeset name</name>
+        <label>rangeset label</label>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:26915 EPSG:2163 EPSG:4269 EPSG:4326</requestResponseCRSs>
+      <nativeCRSs>EPSG:26915</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="raw binary">
+      <formats>GEOTIFF_INT16 HFA_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>modis</name>
+  <label>North Central US MODIS Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+          <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:26915">
+          <gml:pos>159707 4597895</gml:pos>
+          <gml:pos>1400207 5501395</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>2480 1806</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>159707 5501395</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>500 0</gml:offsetVector>
+          <gml:offsetVector>0 -500</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+      <temporalDomain>
+        <gml:timePosition>2002-001</gml:timePosition>
+        <gml:timePosition>2002-033</gml:timePosition>
+        <gml:timePosition>2002-057</gml:timePosition>
+        <gml:timePosition>2002-073</gml:timePosition>
+        <gml:timePosition>2002-089</gml:timePosition>
+        <gml:timePosition>2002-097</gml:timePosition>
+        <gml:timePosition>2002-105</gml:timePosition>
+        <gml:timePosition>2002-121</gml:timePosition>
+        <gml:timePosition>2002-153</gml:timePosition>
+        <gml:timePosition>2002-169</gml:timePosition>
+        <gml:timePosition>2002-185</gml:timePosition>
+        <gml:timePosition>2002-201</gml:timePosition>
+      </temporalDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>rangeset name</name>
+        <label>rangeset label</label>
+        <axisDescription>
+          <AxisDescription semantic="http://terrasip.gis.umn.edu/" refSys="UTM Zone 15N, NAD83">
+            <name>bands</name>
+            <label>MODIS Bands</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+              <singleValue>5</singleValue>
+              <singleValue>6</singleValue>
+              <singleValue>7</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:26915 EPSG:2163 EPSG:4269 EPSG:4326</requestResponseCRSs>
+      <nativeCRSs>EPSG:26915</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="raw binary">
+      <formats>GEOTIFF_RGB HFA_RGB GEOTIFF_16BIT HFA_16BIT</formats>
+    </supportedFormats>
+  </CoverageOffering>
+</CoverageDescription>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml	(revision 42196)
@@ -0,0 +1,286 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription version="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengis.net/wcs/1.0.0/describeCoverage.xsd" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml">
+    <CoverageOffering>
+      <description>
+      Coverage Data
+      </description>
+      <name>VNIR_Swath</name>
+      <label>0 / VNIR_Swath</label>
+      <lonLatEnvelope srsName="WGS84(DD)">
+        <gml:pos>-87.052103 34.541414</gml:pos>
+        <gml:pos>-86.310148 35.082561</gml:pos>
+      </lonLatEnvelope>
+      <domainSet>
+        <spatialDomain>
+          <gml:Envelope srsName="EPSG:4326">
+            <gml:pos>-87.052103 34.541414</gml:pos>
+            <gml:pos>-86.310148 35.082561</gml:pos>
+          </gml:Envelope>
+          <gml:RectifiedGrid dimension="2" srsName="EPSG:4326">
+            <gml:limits>
+              <gml:GridEnvelope>
+                <gml:low>0 0</gml:low>
+                <gml:high>4980 4200</gml:high>
+              </gml:GridEnvelope>
+            </gml:limits>
+            <gml:axisName>X</gml:axisName>
+            <gml:axisName>Y</gml:axisName>
+            <gml:origin srsName="EPSG:4326">
+              <gml:pos>-87.052103 35.082561</gml:pos>
+            </gml:origin>
+            <gml:offsetVector>1.5E-4 0</gml:offsetVector>
+            <gml:offsetVector>0 -1.3E-4</gml:offsetVector>
+          </gml:RectifiedGrid>
+        </spatialDomain>
+        <temporalDomain>
+          <gml:timePosition>2003-06-08T16:36:15Z</gml:timePosition>
+        </temporalDomain>
+      </domainSet>
+      <rangeSet>
+        <RangeSet>
+          <name>Range Set</name>
+          <label>Range Set Description</label>
+          <axisDescription>
+            <AxisDescription>
+              <name>Fields</name>
+              <label>Field Sequence</label>
+              <values>
+                <singleValue>ImageData1</singleValue>
+                <singleValue>ImageData2</singleValue>
+                <singleValue>ImageData3N</singleValue>
+                <singleValue>ImageData3B</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <axisDescription>
+            <AxisDescription>
+              <description>
+              percent of area that is covered with clouds
+              </description>
+              <name>Cloud</name>
+              <label>Percent of Cloud Cover</label>
+              <values>
+                <singleValue>3.0</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <nullValues>
+            <singleValue>0</singleValue>
+          </nullValues>
+        </RangeSet>
+      </rangeSet>
+      <supportedCRSs>
+        <requestResponseCRSs>EPSG:4326
+        </requestResponseCRSs>
+        <requestResponseCRSs>Image</requestResponseCRSs>
+        <nativeCRSs>EPSG:4326</nativeCRSs>
+      </supportedCRSs>
+      <supportedFormats>
+        <formats>GeoTIFF</formats>
+        <formats>HDF-EOS</formats>
+      </supportedFormats>
+      <supportedInterpolations>
+        <interpolationMethod>nearest neighbor</interpolationMethod>
+        <interpolationMethod>bilinear</interpolationMethod>
+        <interpolationMethod>bicubic</interpolationMethod>
+      </supportedInterpolations>
+    </CoverageOffering>
+    <CoverageOffering>
+      <description>
+      Coverage Data
+      </description>
+      <name>SWIR_Swath</name>
+      <label>1 / SWIR_Swath</label>
+      <lonLatEnvelope srsName="WGS84(DD)">
+        <gml:pos>-87.052048 34.541351</gml:pos>
+        <gml:pos>-86.310093 35.082498</gml:pos>
+      </lonLatEnvelope>
+      <domainSet>
+        <spatialDomain>
+          <gml:Envelope srsName="EPSG:4326">
+            <gml:pos>-87.052048 34.541351</gml:pos>
+            <gml:pos>-86.310093 35.082498</gml:pos>
+          </gml:Envelope>
+          <gml:RectifiedGrid dimension="2" srsName="EPSG:4326">
+            <gml:limits>
+              <gml:GridEnvelope>
+                <gml:low>0 0</gml:low>
+                <gml:high>2490 2100</gml:high>
+              </gml:GridEnvelope>
+            </gml:limits>
+            <gml:axisName>X</gml:axisName>
+            <gml:axisName>Y</gml:axisName>
+            <gml:origin srsName="EPSG:4326">
+              <gml:pos>-87.052048 35.082498</gml:pos>
+            </gml:origin>
+            <gml:offsetVector>3.0E-4 0</gml:offsetVector>
+            <gml:offsetVector>0 -2.6E-4</gml:offsetVector>
+          </gml:RectifiedGrid>
+        </spatialDomain>
+        <temporalDomain>
+          <gml:timePosition>2003-06-08T16:36:15Z</gml:timePosition>
+        </temporalDomain>
+      </domainSet>
+      <rangeSet>
+        <RangeSet>
+          <name>Range Set</name>
+          <label>Range Set Description</label>
+          <axisDescription>
+            <AxisDescription>
+              <name>Fields</name>
+              <label>Field Sequence</label>
+              <values>
+                <singleValue>ImageData4</singleValue>
+                <singleValue>ImageData5</singleValue>
+                <singleValue>ImageData6</singleValue>
+                <singleValue>ImageData7</singleValue>
+                <singleValue>ImageData8</singleValue>
+                <singleValue>ImageData9</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <axisDescription>
+            <AxisDescription>
+              <description>
+              percent of area that is covered with clouds
+              </description>
+              <name>Cloud</name>
+              <label>Percent of Cloud Cover</label>
+              <values>
+                <singleValue>3.0</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <nullValues>
+            <singleValue>0</singleValue>
+          </nullValues>
+        </RangeSet>
+      </rangeSet>
+      <supportedCRSs>
+        <requestResponseCRSs>EPSG:4326
+        </requestResponseCRSs>
+        <requestResponseCRSs>Image</requestResponseCRSs>
+        <nativeCRSs>EPSG:4326</nativeCRSs>
+      </supportedCRSs>
+      <supportedFormats>
+        <formats>GeoTIFF</formats>
+        <formats>HDF-EOS</formats>
+      </supportedFormats>
+      <supportedInterpolations>
+        <interpolationMethod>nearest neighbor</interpolationMethod>
+        <interpolationMethod>bilinear</interpolationMethod>
+        <interpolationMethod>bicubic</interpolationMethod>
+      </supportedInterpolations>
+    </CoverageOffering>
+    <CoverageOffering>
+      <description>
+      Coverage Data
+      </description>
+      <name>TIR_Swath</name>
+      <label>2 / TIR_Swath</label>
+      <lonLatEnvelope srsName="WGS84(DD)">
+        <gml:pos>-87.051827 34.541099</gml:pos>
+        <gml:pos>-86.309874 35.082247</gml:pos>
+      </lonLatEnvelope>
+      <domainSet>
+        <spatialDomain>
+          <gml:Envelope srsName="EPSG:4326">
+            <gml:pos>-87.051827 34.541099</gml:pos>
+            <gml:pos>-86.309874 35.082247</gml:pos>
+          </gml:Envelope>
+          <gml:RectifiedGrid dimension="2" srsName="EPSG:4326">
+            <gml:limits>
+              <gml:GridEnvelope>
+                <gml:low>0 0</gml:low>
+                <gml:high>830 700</gml:high>
+              </gml:GridEnvelope>
+            </gml:limits>
+            <gml:axisName>X</gml:axisName>
+            <gml:axisName>Y</gml:axisName>
+            <gml:origin srsName="EPSG:4326">
+              <gml:pos>-87.051827 35.082247</gml:pos>
+            </gml:origin>
+            <gml:offsetVector>8.9E-4 0</gml:offsetVector>
+            <gml:offsetVector>0 -7.7E-4</gml:offsetVector>
+          </gml:RectifiedGrid>
+        </spatialDomain>
+        <temporalDomain>
+          <gml:timePosition>2003-06-08T16:36:15Z</gml:timePosition>
+        </temporalDomain>
+      </domainSet>
+      <rangeSet>
+        <RangeSet>
+          <name>Range Set</name>
+          <label>Range Set Description</label>
+          <axisDescription>
+            <AxisDescription>
+              <name>Fields</name>
+              <label>Field Sequence</label>
+              <values>
+                <singleValue>ImageData10</singleValue>
+                <singleValue>ImageData11</singleValue>
+                <singleValue>ImageData12</singleValue>
+                <singleValue>ImageData13</singleValue>
+                <singleValue>ImageData14</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <axisDescription>
+            <AxisDescription>
+              <description>
+              percent of area that is covered with clouds
+              </description>
+              <name>Cloud</name>
+              <label>Percent of Cloud Cover</label>
+              <values>
+                <singleValue>3.0</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <nullValues>
+            <singleValue>0</singleValue>
+          </nullValues>
+        </RangeSet>
+      </rangeSet>
+      <supportedCRSs>
+        <requestResponseCRSs>EPSG:4326
+        </requestResponseCRSs>
+        <requestResponseCRSs>Image</requestResponseCRSs>
+        <nativeCRSs>EPSG:4326</nativeCRSs>
+      </supportedCRSs>
+      <supportedFormats>
+        <formats>GeoTIFF</formats>
+        <formats>HDF-EOS</formats>
+      </supportedFormats>
+      <supportedInterpolations>
+        <interpolationMethod>nearest neighbor</interpolationMethod>
+        <interpolationMethod>bilinear</interpolationMethod>
+        <interpolationMethod>bicubic</interpolationMethod>
+      </supportedInterpolations>
+    </CoverageOffering>
+  </CoverageDescription>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml	(revision 42196)
@@ -0,0 +1,2389 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/describeCoverage.xsd">
+  <CoverageOffering>
+  <description>Quickbird costas 2004</description>
+  <name>Costas</name>
+  <label>Costas</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8184338945691</gml:pos>
+      <gml:pos>0.506868538627119 40.525456338613</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.769215668705582 37.8184338945691</gml:pos>
+          <gml:pos>0.506868538627119 40.525456338613</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>696287.65 4191112.35</gml:pos>
+          <gml:pos>797213.426521 4488737.845669</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>144179 425177</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>696287.65 4488737.845669</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats>
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop01_311104</name>
+  <label>orthop01_311104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.411953859600099 40.3952692250145</gml:pos>
+      <gml:pos>0.506868538627582 40.498144970273</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.411953859600099 40.3952692250145</gml:pos>
+          <gml:pos>0.506868538627582 40.498144970273</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>789586.421644 4477596.64567</gml:pos>
+          <gml:pos>797213.426521 4488737.84567</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10887 15914</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>789586.421644 4488737.84567</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.700496406856 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop02_041004</name>
+  <label>orthop02_041004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.161142185520058 40.1342857176869</gml:pos>
+      <gml:pos>0.292548896326785 40.2560681974345</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.161142185520058 40.1342857176869</gml:pos>
+          <gml:pos>0.292548896326785 40.2560681974345</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>769326.530394 4447918.95274</gml:pos>
+          <gml:pos>780051.230394 4461067.75274</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15320 18782</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>769326.530394 4461067.75274</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop03n_311004</name>
+  <label>orthop03n_311004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.147236128086632 40.111252474887</gml:pos>
+      <gml:pos>0.209262927539442 40.1866363257871</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.147236128086632 40.111252474887</gml:pos>
+          <gml:pos>0.209262927539442 40.1866363257871</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>768239.61427 4445109.29255</gml:pos>
+          <gml:pos>773240.41427 4453310.49255</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7143 11714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>768239.61427 4453310.49255</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop03s_311004_01</name>
+  <label>orthop03s_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0872101105503621 40.0818258206747</gml:pos>
+      <gml:pos>0.22114471507211 40.1932962005782</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.0872101105503621 40.0818258206747</gml:pos>
+          <gml:pos>0.22114471507211 40.1932962005782</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>763228.894619 4441873.68658</gml:pos>
+          <gml:pos>774230.094619 4453874.48658</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15715 17142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>763228.894619 4453874.48658</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop03s_311004_02</name>
+  <label>orthop03s_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.030134915894617 40.0087916305901</gml:pos>
+      <gml:pos>0.16383554256875 40.1202004185233</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.030134915894617 40.0087916305901</gml:pos>
+          <gml:pos>0.16383554256875 40.1202004185233</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>758638.064359 4433590.23199</gml:pos>
+          <gml:pos>769639.264359 4445591.03199</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15715 17142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>758638.064359 4445591.03199</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop04_311004_01</name>
+  <label>orthop04_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.064429002189167 39.8686021111024</gml:pos>
+      <gml:pos>0.0391632263460172 39.9701456674512</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.064429002189167 39.8686021111024</gml:pos>
+          <gml:pos>0.0391632263460172 39.9701456674512</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>751080.89797 4417658.15575</gml:pos>
+          <gml:pos>759581.69797 4428659.35575</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12143 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>751080.89797 4428659.35575</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop04_311004_02</name>
+  <label>orthop04_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0059801589732133 39.9589210820855</gml:pos>
+      <gml:pos>0.0861765725681437 40.0602012338313</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.0059801589732133 39.9589210820855</gml:pos>
+          <gml:pos>0.0861765725681437 40.0602012338313</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>755745.300367 4427822.77831</gml:pos>
+          <gml:pos>763246.500367 4438823.97831</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10715 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>755745.300367 4438823.97831</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop05_311004_01</name>
+  <label>orthop05_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.184109898221608 39.7358685309031</gml:pos>
+      <gml:pos>-0.0750466714741807 39.8374622821562</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.184109898221608 39.7358685309031</gml:pos>
+          <gml:pos>-0.0750466714741807 39.8374622821562</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>741306.868269 4402597.33799</gml:pos>
+          <gml:pos>750308.168269 4413598.53799</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12858 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>741306.868269 4413598.53799</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop05_311004_02</name>
+  <label>orthop05_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117821241552359 39.8165947273632</gml:pos>
+      <gml:pos>-0.00269513638604592 39.9183962094939</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.117821241552359 39.8165947273632</gml:pos>
+          <gml:pos>-0.00269513638604592 39.9183962094939</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>746698.87415 4411763.74799</gml:pos>
+          <gml:pos>756199.97415 4422764.94799</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>13572 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>746698.87415 4422764.94799</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop06_311004_01</name>
+  <label>orthop06_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.275219416965276 39.5950920024498</gml:pos>
+      <gml:pos>-0.184155536472809 39.6871833112806</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.275219416965276 39.5950920024498</gml:pos>
+          <gml:pos>-0.184155536472809 39.6871833112806</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>733974.65 4386671.49606</gml:pos>
+          <gml:pos>741489.15 4396672.39606</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10734 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>733974.65 4396672.39606</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop06_311004_02</name>
+  <label>orthop06_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.215882735212665 39.6816925812939</gml:pos>
+      <gml:pos>-0.153792859579015 39.7776035452773</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.215882735212665 39.6816925812939</gml:pos>
+          <gml:pos>-0.153792859579015 39.7776035452773</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>738774.65 4396366.75502</gml:pos>
+          <gml:pos>743775.45 4406867.45502</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7143 14999</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>738774.65 4406867.45502</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop07_311004_01</name>
+  <label>orthop07_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.314134220213874 39.5389645252734</gml:pos>
+      <gml:pos>-0.208807505395484 39.6457600608977</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.314134220213874 39.5389645252734</gml:pos>
+          <gml:pos>-0.208807505395484 39.6457600608977</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>730817.802996 4380373.34965</gml:pos>
+          <gml:pos>739518.802996 4391974.44965</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12429 16571</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>730817.802996 4391974.44965</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop07_311004_02</name>
+  <label>orthop07_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.342128552498647 39.4528266976444</gml:pos>
+      <gml:pos>-0.274745188591142 39.5443190026711</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.342128552498647 39.4528266976444</gml:pos>
+          <gml:pos>-0.274745188591142 39.5443190026711</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>728696.99189 4370639.57047</gml:pos>
+          <gml:pos>734198.29189 4380640.47047</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7858 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>728696.99189 4380640.47047</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop08_081104</name>
+  <label>orthop08_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.12173136235497 38.7060005480509</gml:pos>
+      <gml:pos>0.244722293013489 38.8396720246421</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.12173136235497 38.7060005480509</gml:pos>
+          <gml:pos>0.244722293013489 38.8396720246421</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>771460.955047 4289205.04396</gml:pos>
+          <gml:pos>781662.055047 4303706.24396</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14572 20714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>771460.955047 4303706.24396</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop09_081104_01</name>
+  <label>orthop09_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.088804767492067 38.6613849297483</gml:pos>
+      <gml:pos>0.207196405070599 38.7454726610249</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.088804767492067 38.6613849297483</gml:pos>
+          <gml:pos>0.207196405070599 38.7454726610249</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>768764.515211 4284144.38515</gml:pos>
+          <gml:pos>778765.415211 4293145.68515</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14286 12857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>768764.515211 4293145.68515</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop09_081104_02</name>
+  <label>orthop09_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.00632349885466636 38.6164934605806</gml:pos>
+      <gml:pos>0.106715050330735 38.6865464583593</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.00632349885466636 38.6164934605806</gml:pos>
+          <gml:pos>0.106715050330735 38.6865464583593</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>761751.532381 4278862.44211</gml:pos>
+          <gml:pos>770252.332381 4286363.64211</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12143 10714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>761751.532381 4286363.64211</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop10_081104_01</name>
+  <label>orthop10_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.136980485807463 38.5170546860605</gml:pos>
+      <gml:pos>-0.0371101117727906 38.5806924900864</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.136980485807463 38.5170546860605</gml:pos>
+          <gml:pos>-0.0371101117727906 38.5806924900864</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>749616.691491 4267411.89295</gml:pos>
+          <gml:pos>758117.491491 4274213.09295</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12143 9714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>749616.691491 4274213.09295</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop10_081104_02</name>
+  <label>orthop10_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.076735106882625 38.5664797341347</gml:pos>
+      <gml:pos>0.0816807635068847 38.6559597659495</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.076735106882625 38.5664797341347</gml:pos>
+          <gml:pos>0.0816807635068847 38.6559597659495</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>754690.263295 4273235.06968</gml:pos>
+          <gml:pos>768191.163295 4282736.16968</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>19286 13571</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>754690.263295 4282736.16968</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop11_081104</name>
+  <label>orthop11_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.311501790904784 38.4707367989647</gml:pos>
+      <gml:pos>-0.0783292130480387 38.5509769105466</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.311501790904784 38.4707367989647</gml:pos>
+          <gml:pos>-0.0783292130480387 38.5509769105466</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>734538.428657 4262154.30552</gml:pos>
+          <gml:pos>754639.628657 4270455.60552</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>28715 11857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>734538.428657 4270455.60552</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop12_081104_01</name>
+  <label>orthop12_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119927724276 38.3464080099809</gml:pos>
+      <gml:pos>-0.361629767927456 38.4559730050029</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.434119927724276 38.3464080099809</gml:pos>
+          <gml:pos>-0.361629767927456 38.4559730050029</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>724236.374588 4247606.91505</gml:pos>
+          <gml:pos>730237.474588 4259607.71505</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8572 17142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>724236.374588 4259607.71505</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop12_081104_02</name>
+  <label>orthop12_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.378614997044234 38.4352112413258</gml:pos>
+      <gml:pos>-0.255874384616388 38.5054927088623</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.378614997044234 38.4352112413258</gml:pos>
+          <gml:pos>-0.255874384616388 38.5054927088623</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>728803.681867 4257735.98862</gml:pos>
+          <gml:pos>739304.381867 4265237.18862</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15000 10714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>728803.681867 4265237.18862</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop13_131104</name>
+  <label>orthop13_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.348041797937859 39.3383153088596</gml:pos>
+      <gml:pos>-0.281041463417471 39.5461928127946</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.348041797937859 39.3383153088596</gml:pos>
+          <gml:pos>-0.281041463417471 39.5461928127946</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>728562.190304 4357900.07124</gml:pos>
+          <gml:pos>733650.466178 4380844.67124</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7266 32776</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>728562.190304 4380844.67124</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.700189331784 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop14_131104</name>
+  <label>orthop14_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.339955238250429 39.2232477387865</gml:pos>
+      <gml:pos>-0.232429279860554 39.4011207166876</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.339955238250429 39.2232477387865</gml:pos>
+          <gml:pos>-0.232429279860554 39.4011207166876</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>729631.752439 4345256.97718</gml:pos>
+          <gml:pos>738332.752439 4364758.27718</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12429 27857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>729631.752439 4364758.27718</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop15_131104</name>
+  <label>orthop15_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.289235759595255 39.0872233017579</gml:pos>
+      <gml:pos>-0.198718862025195 39.2746110942999</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.289235759595255 39.0872233017579</gml:pos>
+          <gml:pos>-0.198718862025195 39.2746110942999</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>734463.516741 4330245.63376</gml:pos>
+          <gml:pos>741664.416741 4350846.63376</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10286 29428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>734463.516741 4350846.63376</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop16_131104_01</name>
+  <label>orthop16_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.247058054572741 39.0510556962122</gml:pos>
+      <gml:pos>-0.174196293066241 39.1427258689371</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.247058054572741 39.0510556962122</gml:pos>
+          <gml:pos>-0.174196293066241 39.1427258689371</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>738234.899481 4326306.57698</gml:pos>
+          <gml:pos>744235.999481 4336307.47698</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8572 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>738234.899481 4336307.47698</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop16_131104_02</name>
+  <label>orthop16_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.210822301766025 38.9726237490186</gml:pos>
+      <gml:pos>-0.126828888562913 39.0555974632164</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.210822301766025 38.9726237490186</gml:pos>
+          <gml:pos>-0.126828888562913 39.0555974632164</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>741637.171116 4317729.61723</gml:pos>
+          <gml:pos>748637.871116 4326730.91723</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10000 12857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>741637.171116 4326730.91723</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop17_131104_01</name>
+  <label>orthop17_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.181657602795786 38.9357185021325</gml:pos>
+      <gml:pos>-0.0746335106867938 39.0192845975789</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.181657602795786 38.9357185021325</gml:pos>
+          <gml:pos>-0.0746335106867938 39.0192845975789</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>744289.003556 4313776.8392</gml:pos>
+          <gml:pos>753290.303556 4322778.1392</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12858 12857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>744289.003556 4322778.1392</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop17_131104_02</name>
+  <label>orthop17_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117943002348703 38.868294412074</gml:pos>
+      <gml:pos>-0.00576191400621702 38.9385565931551</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.117943002348703 38.868294412074</gml:pos>
+          <gml:pos>-0.00576191400621702 38.9385565931551</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>750048.579806 4306487.66742</gml:pos>
+          <gml:pos>759549.679806 4313988.86742</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>13572 10714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>750048.579806 4313988.86742</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop18_131104</name>
+  <label>orthop18_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0746928352616706 38.849326950655</gml:pos>
+      <gml:pos>0.0832043718423081 38.9118300407968</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.0746928352616706 38.849326950655</gml:pos>
+          <gml:pos>0.0832043718423081 38.9118300407968</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>753864.751737 4304639.94641</gml:pos>
+          <gml:pos>767365.651737 4311140.84641</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>19286 9285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>753864.751737 4311140.84641</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop19_081104_01</name>
+  <label>orthop19_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.528755271098844 38.2508371352818</gml:pos>
+      <gml:pos>-0.430862375100228 38.3735051096161</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.528755271098844 38.2508371352818</gml:pos>
+          <gml:pos>-0.430862375100228 38.3735051096161</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>716247.100187 4236828.43859</gml:pos>
+          <gml:pos>724448.300187 4250229.23859</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>11715 19142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>716247.100187 4250229.23859</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop19_081104_02</name>
+  <label>orthop19_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119991295443 38.3464062094665</gml:pos>
+      <gml:pos>-0.362213489804466 38.4388675293538</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.434119991295443 38.3464062094665</gml:pos>
+          <gml:pos>-0.362213489804466 38.4388675293538</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>724236.374588 4247606.71505</gml:pos>
+          <gml:pos>730237.474588 4257707.71505</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8572 14428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>724236.374588 4257707.71505</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop20_181104_01</name>
+  <label>orthop20_181104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.649715059513851 38.1131199164285</gml:pos>
+      <gml:pos>-0.505465344489574 38.2015894747853</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.649715059513851 38.1131199164285</gml:pos>
+          <gml:pos>-0.505465344489574 38.2015894747853</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>706046.2921 4221368.81784</gml:pos>
+          <gml:pos>718447.4921 4230869.91784</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>17715 13571</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>706046.2921 4230869.91784</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop20_181104_02</name>
+  <label>orthop20_181104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.542876572296919 38.1796186626201</gml:pos>
+      <gml:pos>-0.490783803978381 38.3021933075773</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.542876572296919 38.1796186626201</gml:pos>
+          <gml:pos>-0.490783803978381 38.3021933075773</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>715223.996887 4228780.75028</gml:pos>
+          <gml:pos>719424.696887 4242281.65028</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>6000 19285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>715223.996887 4242281.65028</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop21_181104</name>
+  <label>orthop21_181104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.70999963728032 37.9537566817542</gml:pos>
+      <gml:pos>-0.618069622814675 38.1598790871345</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.70999963728032 37.9537566817542</gml:pos>
+          <gml:pos>-0.618069622814675 38.1598790871345</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>701199.65 4203415.35</gml:pos>
+          <gml:pos>708700.85 4226116.35</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10715 32428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>701199.65 4226116.35</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop22_1811004</name>
+  <label>orthop22_1811004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8434482545183</gml:pos>
+      <gml:pos>-0.647530102352871 37.9934296541121</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.769215668705582 37.8434482545183</gml:pos>
+          <gml:pos>-0.647530102352871 37.9934296541121</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>696287.65 4191112.35</gml:pos>
+          <gml:pos>706588.85 4207513.35</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14715 23428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>696287.65 4207513.35</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop23_261104</name>
+  <label>orthop23_261104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.37345887604184 40.3368089707198</gml:pos>
+      <gml:pos>0.448414395595265 40.4485879556897</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.37345887604184 40.3368089707198</gml:pos>
+          <gml:pos>0.448414395595265 40.4485879556897</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>786569.11427 4470909.19255</gml:pos>
+          <gml:pos>792470.81427 4483110.89255</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8430 17429</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>786569.11427 4483110.89255</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop24_261104_01</name>
+  <label>orthop24_261104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.234463105473658 40.1856768191399</gml:pos>
+      <gml:pos>0.356188772135398 40.278972533725</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.234463105473658 40.1856768191399</gml:pos>
+          <gml:pos>0.356188772135398 40.278972533725</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>775367.216691 4453831.6651</gml:pos>
+          <gml:pos>785368.116691 4463832.5651</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14286 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>775367.216691 4463832.5651</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop24_261104_02</name>
+  <label>orthop24_261104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.296938622582628 40.2681463248799</gml:pos>
+      <gml:pos>0.419350322091118 40.3705009241081</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.296938622582628 40.2681463248799</gml:pos>
+          <gml:pos>0.419350322091118 40.3705009241081</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>780346.11427 4463191.69255</gml:pos>
+          <gml:pos>790347.01427 4474192.89255</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14286 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>780346.11427 4474192.89255</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop25_191204</name>
+  <label>orthop25_191204</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0631186665735442 38.8067199905354</gml:pos>
+      <gml:pos>0.197563116913112 38.863410634572</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.0631186665735442 38.8067199905354</gml:pos>
+          <gml:pos>0.197563116913112 38.863410634572</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>765987.140492 4300252.05875</gml:pos>
+          <gml:pos>777471.340492 4306158.65875</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>16405 8436</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>765987.140492 4306158.65875</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+</CoverageDescription>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/wcsCapabilities.xsd">
+<Service>
+  <name>MapServer WCS</name>
+  <label>Servidor wcs simon</label>
+  <keywords>
+    <keyword>WCS</keyword>
+  </keywords>
+  <fees>NONE</fees>
+  <accessConstraints>
+    NONE
+  </accessConstraints>
+</Service>
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <DescribeCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeCoverage>
+    <GetCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCoverage>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+  </Exception>
+  <VendorSpecificCapabilities/>
+</Capability>
+<ContentMetadata>
+  <CoverageOfferingBrief>
+  <description>Spot 5</description>
+  <name>Spot</name>
+  <label>Spot</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.86475368381057 37.7142167257884</gml:pos>
+      <gml:pos>0.677809422798979 40.9142896237773</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./039_269/043_269_mer_orto.img</name>
+  <label>039_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./039_270/039_270_mer_orto.img</name>
+  <label>039_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.54676197706921 39.4606972490718</gml:pos>
+      <gml:pos>-0.868435651917331 40.1294628581342</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./039_271/orto_merge_039_271.img</name>
+  <label>039_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.55664772339341 38.9844120265197</gml:pos>
+      <gml:pos>-1.00604599751678 39.6311355126439</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_268/orto_040_268_merge.img</name>
+  <label>040_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.882933131536222 40.4206286697068</gml:pos>
+      <gml:pos>0.042917112220084 40.8557286661707</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_269/040_269_mer_orto.img</name>
+  <label>040_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.06017669544974 39.9335886073308</gml:pos>
+      <gml:pos>-0.134746821581555 40.6209906108597</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_270/ortho40_270_merged.img</name>
+  <label>040_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.23314927175127 39.4500113294251</gml:pos>
+      <gml:pos>-0.316543057947295 40.1334195871412</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_271/040_271_mer_orto.img</name>
+  <label>040_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.40711287394984 38.9630942019202</gml:pos>
+      <gml:pos>-0.498591247901213 39.6452000314982</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_272/ortho040_272_pc.img</name>
+  <label>040_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.50661519738613 38.4858384680425</gml:pos>
+      <gml:pos>-0.660854303698855 39.1453819916464</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_273/ortho040_273.img</name>
+  <label>040_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.78560250629897 37.9946383011098</gml:pos>
+      <gml:pos>-0.890457811165821 38.6569004835813</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_268/ortho041_268.img</name>
+  <label>041_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.356449851947824 40.3956240488913</gml:pos>
+      <gml:pos>0.615718364079852 41.1332339337031</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_269/ortho041_269_pc.img</name>
+  <label>041_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.479653469782083 39.9492494682236</gml:pos>
+      <gml:pos>0.445247142510061 40.6096049622214</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_270/ortho041_270.img</name>
+  <label>041_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.662681099922943 39.4610007000431</gml:pos>
+      <gml:pos>0.202247054039875 40.1227571570735</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_272/orto_041_272_merge.img</name>
+  <label>041_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.93884828048088 38.4867392539068</gml:pos>
+      <gml:pos>-0.0710677786125404 39.1455128669135</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_273/ortho041_273_merged.img</name>
+  <label>041_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.13731938812606 37.9970045311446</gml:pos>
+      <gml:pos>-0.183220235614133 38.6589793948757</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_274/041_274_mer_orto.img</name>
+  <label>041_274</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.25887586160928 37.6979338310255</gml:pos>
+      <gml:pos>-0.622777299800351 38.1698074145459</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./042_271/orto_merge_042_271.img</name>
+  <label>042_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.804013057066019 38.9718975937575</gml:pos>
+      <gml:pos>0.218694462599702 39.6378615837972</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_268/043_268_ortho_merged.img</name>
+  <label>043_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.242968471591328 40.4967322631042</gml:pos>
+      <gml:pos>1.00471450204767 41.1066346476233</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_269/043_269_mer_orto.img</name>
+  <label>043_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_272/merge_3_043_272.img</name>
+  <label>043_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.448386272181648 38.4482532754791</gml:pos>
+      <gml:pos>0.472227389196073 39.1897082589744</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_273/ortho_043_273_merged.img</name>
+  <label>043_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.414198033729193 38.3348922719083</gml:pos>
+      <gml:pos>-0.0239423986897304 38.6577076893867</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+</ContentMetadata>
+</WCS_Capabilities>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml	(revision 42196)
@@ -0,0 +1,1277 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/describeCoverage.xsd">
+  <CoverageOffering>
+  <description>Spot 5</description>
+  <name>Spot</name>
+  <label>Spot</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.86475368381057 37.7142167257884</gml:pos>
+      <gml:pos>0.677809422798979 40.9142896237773</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.86475368381057 37.7142167257884</gml:pos>
+          <gml:pos>0.677809422798979 40.9142896237773</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>600000 4180000</gml:pos>
+          <gml:pos>810000 4530000</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>299999 499998</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>600000 4530000</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+<!-- WARNING: Mandatory metadata '..._rangeset_name' was missing in this context. -->
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats>
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./039_269/043_269_mer_orto.img</name>
+  <label>039_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+          <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>755591.5 4439401.5</gml:pos>
+          <gml:pos>800011.5 4502461.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8883 12610</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>755591.5 4502461.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./039_270/039_270_mer_orto.img</name>
+  <label>039_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.54676197706921 39.4606972490718</gml:pos>
+      <gml:pos>-0.868435651917331 40.1294628581342</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.54676197706921 39.4606972490718</gml:pos>
+          <gml:pos>-0.868435651917331 40.1294628581342</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>625008.5 4370104.5</gml:pos>
+          <gml:pos>681648.5 4443234.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>11327 14624</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>625008.5 4443234.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./039_271/orto_merge_039_271.img</name>
+  <label>039_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.55664772339341 38.9844120265197</gml:pos>
+      <gml:pos>-1.00604599751678 39.6311355126439</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.55664772339341 38.9844120265197</gml:pos>
+          <gml:pos>-1.00604599751678 39.6311355126439</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>625004.5 4316976.5</gml:pos>
+          <gml:pos>671149.5 4387906.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>9228 14184</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>625004.5 4387906.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_268/orto_040_268_merge.img</name>
+  <label>040_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.882933131536222 40.4206286697068</gml:pos>
+      <gml:pos>0.042917112220084 40.8557286661707</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.882933131536222 40.4206286697068</gml:pos>
+          <gml:pos>0.042917112220084 40.8557286661707</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>679559.5 4478914.5</gml:pos>
+          <gml:pos>756579.5 4525004.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15403 9216</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>679559.5 4525004.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_269/040_269_mer_orto.img</name>
+  <label>040_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.06017669544974 39.9335886073308</gml:pos>
+      <gml:pos>-0.134746821581555 40.6209906108597</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.06017669544974 39.9335886073308</gml:pos>
+          <gml:pos>-0.134746821581555 40.6209906108597</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>665711.5 4424317.5</gml:pos>
+          <gml:pos>742466.5 4498607.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15350 14856</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>665711.5 4498607.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_270/ortho40_270_merged.img</name>
+  <label>040_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.23314927175127 39.4500113294251</gml:pos>
+      <gml:pos>-0.316543057947295 40.1334195871412</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.23314927175127 39.4500113294251</gml:pos>
+          <gml:pos>-0.316543057947295 40.1334195871412</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>651995.5 4370162.5</gml:pos>
+          <gml:pos>728695.5 4444167.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15339 14799</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>651995.5 4444167.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_271/040_271_mer_orto.img</name>
+  <label>040_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.40711287394984 38.9630942019202</gml:pos>
+      <gml:pos>-0.498591247901213 39.6452000314982</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.40711287394984 38.9630942019202</gml:pos>
+          <gml:pos>-0.498591247901213 39.6452000314982</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>637982.5 4315674.5</gml:pos>
+          <gml:pos>714712.5 4389689.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15345 14801</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>637982.5 4389689.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_272/ortho040_272_pc.img</name>
+  <label>040_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.50661519738613 38.4858384680425</gml:pos>
+      <gml:pos>-0.660854303698855 39.1453819916464</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.50661519738613 38.4858384680425</gml:pos>
+          <gml:pos>-0.660854303698855 39.1453819916464</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>630230.5 4262339.5</gml:pos>
+          <gml:pos>702195.5 4334064.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14392 14343</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>630230.5 4334064.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_273/ortho040_273.img</name>
+  <label>040_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.78560250629897 37.9946383011098</gml:pos>
+      <gml:pos>-0.890457811165821 38.6569004835813</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.78560250629897 37.9946383011098</gml:pos>
+          <gml:pos>-0.890457811165821 38.6569004835813</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>606617.5 4207352.5</gml:pos>
+          <gml:pos>683597.5 4279487.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15395 14425</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>606617.5 4279487.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_268/ortho041_268.img</name>
+  <label>041_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.356449851947824 40.3956240488913</gml:pos>
+      <gml:pos>0.615718364079852 41.1332339337031</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.356449851947824 40.3956240488913</gml:pos>
+          <gml:pos>0.615718364079852 41.1332339337031</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>724284.5 4477893.5</gml:pos>
+          <gml:pos>803634.5 4557068.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15869 15833</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>724284.5 4557068.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_269/ortho041_269_pc.img</name>
+  <label>041_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.479653469782083 39.9492494682236</gml:pos>
+      <gml:pos>0.445247142510061 40.6096049622214</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.479653469782083 39.9492494682236</gml:pos>
+          <gml:pos>0.445247142510061 40.6096049622214</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>715245.5 4427780.5</gml:pos>
+          <gml:pos>791595.5 4498610.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15269 14164</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>715245.5 4498610.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_270/ortho041_270.img</name>
+  <label>041_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.662681099922943 39.4610007000431</gml:pos>
+      <gml:pos>0.202247054039875 40.1227571570735</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.662681099922943 39.4610007000431</gml:pos>
+          <gml:pos>0.202247054039875 40.1227571570735</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>701035.5 4372816.5</gml:pos>
+          <gml:pos>772970.5 4444126.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14386 14260</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>701035.5 4444126.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_272/orto_041_272_merge.img</name>
+  <label>041_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.93884828048088 38.4867392539068</gml:pos>
+      <gml:pos>-0.0710677786125404 39.1455128669135</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.93884828048088 38.4867392539068</gml:pos>
+          <gml:pos>-0.0710677786125404 39.1455128669135</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>679733.5 4263887.5</gml:pos>
+          <gml:pos>753223.5 4335057.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14697 14232</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>679733.5 4335057.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_273/ortho041_273_merged.img</name>
+  <label>041_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.13731938812606 37.9970045311446</gml:pos>
+      <gml:pos>-0.183220235614133 38.6589793948757</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.13731938812606 37.9970045311446</gml:pos>
+          <gml:pos>-0.183220235614133 38.6589793948757</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>663518.5 4209231.5</gml:pos>
+          <gml:pos>745173.5 4280681.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>16330 14288</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>663518.5 4280681.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_274/041_274_mer_orto.img</name>
+  <label>041_274</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.25887586160928 37.6979338310255</gml:pos>
+      <gml:pos>-0.622777299800351 38.1698074145459</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.25887586160928 37.6979338310255</gml:pos>
+          <gml:pos>-0.622777299800351 38.1698074145459</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>653481.5 4174996.5</gml:pos>
+          <gml:pos>708286.5 4226176.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10960 10234</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>653481.5 4226176.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./042_271/orto_merge_042_271.img</name>
+  <label>042_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.804013057066019 38.9718975937575</gml:pos>
+      <gml:pos>0.218694462599702 39.6378615837972</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.804013057066019 38.9718975937575</gml:pos>
+          <gml:pos>0.218694462599702 39.6378615837972</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>690186.5 4318571.5</gml:pos>
+          <gml:pos>776351.5 4389986.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>17232 14281</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>690186.5 4389986.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_268/043_268_ortho_merged.img</name>
+  <label>043_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.242968471591328 40.4967322631042</gml:pos>
+      <gml:pos>1.00471450204767 41.1066346476233</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.242968471591328 40.4967322631042</gml:pos>
+          <gml:pos>1.00471450204767 41.1066346476233</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>774745.475904 4490544.41566</gml:pos>
+          <gml:pos>836430.475904 4555834.41566</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12336 13056</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>774745.475904 4555834.41566</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_269/043_269_mer_orto.img</name>
+  <label>043_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+          <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>755591.5 4439401.5</gml:pos>
+          <gml:pos>800011.5 4502461.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8883 12610</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>755591.5 4502461.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_272/merge_3_043_272.img</name>
+  <label>043_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.448386272181648 38.4482532754791</gml:pos>
+      <gml:pos>0.472227389196073 39.1897082589744</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.448386272181648 38.4482532754791</gml:pos>
+          <gml:pos>0.472227389196073 39.1897082589744</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>722611.5 4261222.5</gml:pos>
+          <gml:pos>800011.5 4341067.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15479 15967</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>722611.5 4341067.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_273/ortho_043_273_merged.img</name>
+  <label>043_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.414198033729193 38.3348922719083</gml:pos>
+      <gml:pos>-0.0239423986897304 38.6577076893867</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.414198033729193 38.3348922719083</gml:pos>
+          <gml:pos>-0.0239423986897304 38.6577076893867</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>725990.403226 4247200.5</gml:pos>
+          <gml:pos>759020.403226 4282065.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>6605 6971</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>725990.403226 4282065.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+</CoverageDescription>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,118 @@
+<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities
+   version="1.0.0" 
+   updateSequence="0" 
+   xmlns="http://www.opengis.net/wcs" 
+   xmlns:xlink="http://www.w3.org/1999/xlink" 
+   xmlns:gml="http://www.opengis.net/gml" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/wcsCapabilities.xsd">
+<Service>
+  <name>MapServer WCS</name>
+  <label>UMN Test WCS Server</label>
+  <keywords>
+    <keyword>WCS</keyword>
+    <keyword>MODIS</keyword>
+    <keyword>NDVI</keyword>
+  </keywords>
+  <fees>NONE</fees>
+  <accessConstraints>
+    NONE
+  </accessConstraints>
+</Service>
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <DescribeCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeCoverage>
+    <GetCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Post>
+        </HTTP>
+      </DCPType>
+    </GetCoverage>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+  </Exception>
+  <VendorSpecificCapabilities />
+</Capability>
+<ContentMetadata>
+  <CoverageOfferingBrief>
+  <name>ndvi</name>
+  <label>North Central US MODIS-based NDVI Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>fpar</name>
+  <label>North Central US MODIS-based FPAR Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>modis</name>
+  <label>North Central US MODIS Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+</ContentMetadata>
+</WCS_Capabilities>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities version="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengis.net/wcs/1.0.0/wcsCapabilities.xsd" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml">
+    <Service>
+      <description>
+      AST_L1B Data
+      </description>
+      <name>AST_L1B</name>
+      <label>AST_L1B Coverage Server</label>
+      <keywords>
+        <keyword>Nasa</keyword>
+        <keyword>Terra</keyword>
+        <keyword>ASTER</keyword>
+        <keyword>AST_L1B</keyword>
+        <keyword>Coverage</keyword>
+      </keywords>
+      <responsibleParty>
+        <individualName>Luc Donea</individualName>
+        <organisationName>Ionic Software s.a.</organisationName>
+        <contactInfo>
+          <phone>
+            <voice>+32 4 364 0 364</voice>
+          </phone>
+          <address>
+            <deliveryPoint>Rue de Wallonie, 18</deliveryPoint>
+            <city>Grace-Hollogne</city>
+            <administrativeArea>Liege</administrativeArea>
+            <postalCode>4460</postalCode>
+            <country>Belgium</country>
+            <electronicMailAddress>ld@ionicsoft.com</electronicMailAddress>
+          </address>
+          <onlineResource xlink:href="http://www.ionicsoft.com" xlink:type="simple"/>
+        </contactInfo>
+      </responsibleParty>
+      <fees>none</fees>
+      <accessConstraints>none</accessConstraints>
+    </Service>
+    <Capability>
+      <Request>
+        <GetCapabilities>
+          <DCPType>
+            <HTTP>
+              <Get>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Get>
+              <Post>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Post>
+            </HTTP>
+          </DCPType>
+        </GetCapabilities>
+        <DescribeCoverage>
+          <DCPType>
+            <HTTP>
+              <Get>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Get>
+              <Post>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Post>
+            </HTTP>
+          </DCPType>
+        </DescribeCoverage>
+        <GetCoverage>
+          <DCPType>
+            <HTTP>
+              <Get>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Get>
+              <Post>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Post>
+            </HTTP>
+          </DCPType>
+        </GetCoverage>
+      </Request>
+      <Exception>
+        <Format>application/vnd.ogc.se_xml</Format>
+      </Exception>
+      <VendorSpecificCapabilities>
+        <supportDataSrs/>
+      </VendorSpecificCapabilities>
+    </Capability>
+    <ContentMetadata>
+      <CoverageOfferingBrief>
+        <description>
+        Coverage Data
+        </description>
+        <name>VNIR_Swath</name>
+        <label>0 / VNIR_Swath</label>
+        <lonLatEnvelope srsName="WGS84(DD)">
+          <gml:pos>-87.052103 34.541414</gml:pos>
+          <gml:pos>-86.310148 35.082561</gml:pos>
+        </lonLatEnvelope>
+      </CoverageOfferingBrief>
+      <CoverageOfferingBrief>
+        <description>
+        Coverage Data
+        </description>
+        <name>SWIR_Swath</name>
+        <label>1 / SWIR_Swath</label>
+        <lonLatEnvelope srsName="WGS84(DD)">
+          <gml:pos>-87.052048 34.541351</gml:pos>
+          <gml:pos>-86.310093 35.082498</gml:pos>
+        </lonLatEnvelope>
+      </CoverageOfferingBrief>
+      <CoverageOfferingBrief>
+        <description>
+        Coverage Data
+        </description>
+        <name>TIR_Swath</name>
+        <label>2 / TIR_Swath</label>
+        <lonLatEnvelope srsName="WGS84(DD)">
+          <gml:pos>-87.051827 34.541099</gml:pos>
+          <gml:pos>-86.309874 35.082247</gml:pos>
+        </lonLatEnvelope>
+      </CoverageOfferingBrief>
+    </ContentMetadata>
+  </WCS_Capabilities>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/wcsCapabilities.xsd">
+<Service>
+  <name>MapServer WCS</name>
+  <label>Servidor wcs simon</label>
+  <keywords>
+    <keyword>WCS</keyword>
+  </keywords>
+  <fees>NONE</fees>
+  <accessConstraints>
+    NONE
+  </accessConstraints>
+</Service>
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <DescribeCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeCoverage>
+    <GetCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCoverage>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+  </Exception>
+  <VendorSpecificCapabilities/>
+</Capability>
+<ContentMetadata>
+  <CoverageOfferingBrief>
+  <description>Quickbird costas 2004</description>
+  <name>Costas</name>
+  <label>Costas</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8184338945691</gml:pos>
+      <gml:pos>0.506868538627119 40.525456338613</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop01_311104</name>
+  <label>orthop01_311104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.411953859600099 40.3952692250145</gml:pos>
+      <gml:pos>0.506868538627582 40.498144970273</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop02_041004</name>
+  <label>orthop02_041004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.161142185520058 40.1342857176869</gml:pos>
+      <gml:pos>0.292548896326785 40.2560681974345</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop03n_311004</name>
+  <label>orthop03n_311004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.147236128086632 40.111252474887</gml:pos>
+      <gml:pos>0.209262927539442 40.1866363257871</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop03s_311004_01</name>
+  <label>orthop03s_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0872101105503621 40.0818258206747</gml:pos>
+      <gml:pos>0.22114471507211 40.1932962005782</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop03s_311004_02</name>
+  <label>orthop03s_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.030134915894617 40.0087916305901</gml:pos>
+      <gml:pos>0.16383554256875 40.1202004185233</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop04_311004_01</name>
+  <label>orthop04_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.064429002189167 39.8686021111024</gml:pos>
+      <gml:pos>0.0391632263460172 39.9701456674512</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop04_311004_02</name>
+  <label>orthop04_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0059801589732133 39.9589210820855</gml:pos>
+      <gml:pos>0.0861765725681437 40.0602012338313</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop05_311004_01</name>
+  <label>orthop05_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.184109898221608 39.7358685309031</gml:pos>
+      <gml:pos>-0.0750466714741807 39.8374622821562</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop05_311004_02</name>
+  <label>orthop05_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117821241552359 39.8165947273632</gml:pos>
+      <gml:pos>-0.00269513638604592 39.9183962094939</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop06_311004_01</name>
+  <label>orthop06_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.275219416965276 39.5950920024498</gml:pos>
+      <gml:pos>-0.184155536472809 39.6871833112806</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop06_311004_02</name>
+  <label>orthop06_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.215882735212665 39.6816925812939</gml:pos>
+      <gml:pos>-0.153792859579015 39.7776035452773</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop07_311004_01</name>
+  <label>orthop07_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.314134220213874 39.5389645252734</gml:pos>
+      <gml:pos>-0.208807505395484 39.6457600608977</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop07_311004_02</name>
+  <label>orthop07_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.342128552498647 39.4528266976444</gml:pos>
+      <gml:pos>-0.274745188591142 39.5443190026711</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop08_081104</name>
+  <label>orthop08_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.12173136235497 38.7060005480509</gml:pos>
+      <gml:pos>0.244722293013489 38.8396720246421</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop09_081104_01</name>
+  <label>orthop09_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.088804767492067 38.6613849297483</gml:pos>
+      <gml:pos>0.207196405070599 38.7454726610249</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop09_081104_02</name>
+  <label>orthop09_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.00632349885466636 38.6164934605806</gml:pos>
+      <gml:pos>0.106715050330735 38.6865464583593</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop10_081104_01</name>
+  <label>orthop10_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.136980485807463 38.5170546860605</gml:pos>
+      <gml:pos>-0.0371101117727906 38.5806924900864</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop10_081104_02</name>
+  <label>orthop10_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.076735106882625 38.5664797341347</gml:pos>
+      <gml:pos>0.0816807635068847 38.6559597659495</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop11_081104</name>
+  <label>orthop11_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.311501790904784 38.4707367989647</gml:pos>
+      <gml:pos>-0.0783292130480387 38.5509769105466</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop12_081104_01</name>
+  <label>orthop12_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119927724276 38.3464080099809</gml:pos>
+      <gml:pos>-0.361629767927456 38.4559730050029</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop12_081104_02</name>
+  <label>orthop12_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.378614997044234 38.4352112413258</gml:pos>
+      <gml:pos>-0.255874384616388 38.5054927088623</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop13_131104</name>
+  <label>orthop13_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.348041797937859 39.3383153088596</gml:pos>
+      <gml:pos>-0.281041463417471 39.5461928127946</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop14_131104</name>
+  <label>orthop14_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.339955238250429 39.2232477387865</gml:pos>
+      <gml:pos>-0.232429279860554 39.4011207166876</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop15_131104</name>
+  <label>orthop15_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.289235759595255 39.0872233017579</gml:pos>
+      <gml:pos>-0.198718862025195 39.2746110942999</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop16_131104_01</name>
+  <label>orthop16_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.247058054572741 39.0510556962122</gml:pos>
+      <gml:pos>-0.174196293066241 39.1427258689371</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop16_131104_02</name>
+  <label>orthop16_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.210822301766025 38.9726237490186</gml:pos>
+      <gml:pos>-0.126828888562913 39.0555974632164</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop17_131104_01</name>
+  <label>orthop17_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.181657602795786 38.9357185021325</gml:pos>
+      <gml:pos>-0.0746335106867938 39.0192845975789</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop17_131104_02</name>
+  <label>orthop17_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117943002348703 38.868294412074</gml:pos>
+      <gml:pos>-0.00576191400621702 38.9385565931551</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop18_131104</name>
+  <label>orthop18_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0746928352616706 38.849326950655</gml:pos>
+      <gml:pos>0.0832043718423081 38.9118300407968</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop19_081104_01</name>
+  <label>orthop19_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.528755271098844 38.2508371352818</gml:pos>
+      <gml:pos>-0.430862375100228 38.3735051096161</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop19_081104_02</name>
+  <label>orthop19_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119991295443 38.3464062094665</gml:pos>
+      <gml:pos>-0.362213489804466 38.4388675293538</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop20_181104_01</name>
+  <label>orthop20_181104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.649715059513851 38.1131199164285</gml:pos>
+      <gml:pos>-0.505465344489574 38.2015894747853</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop20_181104_02</name>
+  <label>orthop20_181104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.542876572296919 38.1796186626201</gml:pos>
+      <gml:pos>-0.490783803978381 38.3021933075773</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop21_181104</name>
+  <label>orthop21_181104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.70999963728032 37.9537566817542</gml:pos>
+      <gml:pos>-0.618069622814675 38.1598790871345</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop22_1811004</name>
+  <label>orthop22_1811004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8434482545183</gml:pos>
+      <gml:pos>-0.647530102352871 37.9934296541121</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop23_261104</name>
+  <label>orthop23_261104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.37345887604184 40.3368089707198</gml:pos>
+      <gml:pos>0.448414395595265 40.4485879556897</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop24_261104_01</name>
+  <label>orthop24_261104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.234463105473658 40.1856768191399</gml:pos>
+      <gml:pos>0.356188772135398 40.278972533725</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop24_261104_02</name>
+  <label>orthop24_261104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.296938622582628 40.2681463248799</gml:pos>
+      <gml:pos>0.419350322091118 40.3705009241081</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop25_191204</name>
+  <label>orthop25_191204</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0631186665735442 38.8067199905354</gml:pos>
+      <gml:pos>0.197563116913112 38.863410634572</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+</ContentMetadata>
+</WCS_Capabilities>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.xsd	(revision 42196)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><xs:schema targetNamespace="http://www.gvsig.com/cit" xmlns:cit="http://www.gvsig.com/cit" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.1.2"><xs:import namespace="http://www.opengis.net/gml" schemaLocation="feature.xsd"/><xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="cities_Type"><xs:complexContent><xs:extension base="gml:AbstractFeatureType"><xs:sequence><xs:element name="the_geom" minOccurs="0" nillable="true" type="gml:PointPropertyType"/><xs:element name="NAME" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="CAPITAL" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="PROV_NAME" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="POPULATION" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="PK" minOccurs="0" nillable="true" type="xs:double"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType><xs:element name="cities" type="cit:cities_Type" substitutionGroup="gml:_Feature"/></xs:schema><!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.gml	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><ResultCollection xmlns="http://www.idee.es/mne" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.idee.es/mne GMLNomenclatorIdee.xsd">
+	<gml:boundedBy>
+		<gml:Box>
+			<gml:coord>
+				<gml:X>-1.13</gml:X>
+				<gml:Y>42.12</gml:Y>
+			</gml:coord>
+			<gml:coord>
+				<gml:X>-1.13</gml:X>
+				<gml:Y>42.12</gml:Y>
+			</gml:coord>
+		</gml:Box>
+	</gml:boundedBy>
+	<gml:featureMember>
+		<Entidad fid="Entidad.382806">
+			<nombreEntidad>
+				<nombre>Ejea de los Caballeros</nombre>
+				<idioma>und</idioma>
+				<claseNombre>Preferente</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>La Capital de Cinco Villas</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>Segeda</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>Segia</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>Setia</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<tipoEntidad>
+				<tipo>Poblaci�</tipo>
+				<catalogoEntidades>Entidades del Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</catalogoEntidades>
+			</tipoEntidad>
+			<posicionEspacial>
+				<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
+					<gml:coordinates cs="," decimal="." ts=" ">-1.13,42.12</gml:coordinates>
+				</gml:Point>
+			</posicionEspacial>
+			<entidadLocal>
+				<provincia>Zaragoza</provincia>
+			</entidadLocal>
+			<entidadLocal>
+				<municipio>Ejea de los Caballeros</municipio>
+			</entidadLocal>
+			<mapa>
+				<serie>MTN25</serie>
+				<hoja>0284-1</hoja>
+			</mapa>
+		</Entidad>
+	</gml:featureMember>
+</ResultCollection>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.gml	(revision 42196)
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><gml:FeatureCollection xmlns:cit="http://www.gvsig.com/cit" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gvsig.com/cit GML-points.xsd"><gml:boundedBy><gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#23030"><gml:coordinates decimal="." cs="," ts=" ">-135.15989685058594,43.97196475963302 -41.46491900991063,76.32874354251143</gml:coordinates></gml:Box></gml:boundedBy><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-123.06999969482422,49.411192817494346 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Vancouver</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>British Columbia</cit:PROV_NAME>
+<cit:POPULATION>1380729.0</cit:POPULATION>
+<cit:PK>0.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-114.05000305175781,51.28119174937911 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Calgary</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Alberta</cit:PROV_NAME>
+<cit:POPULATION>671326.0</cit:POPULATION>
+<cit:PK>1.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-113.27999877929688,53.581194801136924 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Edmonton</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Alberta</cit:PROV_NAME>
+<cit:POPULATION>785465.0</cit:POPULATION>
+<cit:PK>2.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-97.12444305419922,50.172362251088096 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Winnipeg</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Manitoba</cit:PROV_NAME>
+<cit:POPULATION>625304.0</cit:POPULATION>
+<cit:PK>3.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-79.41264343261719,43.97196475963302 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Toronto</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Ontario</cit:PROV_NAME>
+<cit:POPULATION>3427168.0</cit:POPULATION>
+<cit:PK>4.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-75.65074920654297,45.62541477184005 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Ottawa</cit:NAME>
+<cit:CAPITAL>C</cit:CAPITAL>
+<cit:PROV_NAME>Ontario</cit:PROV_NAME>
+<cit:POPULATION>819263.0</cit:POPULATION>
+<cit:PK>5.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-73.65352630615234,45.7922124097795 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Montreal</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Quebec</cit:PROV_NAME>
+<cit:POPULATION>2921357.0</cit:POPULATION>
+<cit:PK>6.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-71.24492645263672,47.05326358775802 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Quebec</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Quebec</cit:PROV_NAME>
+<cit:POPULATION>603267.0</cit:POPULATION>
+<cit:PK>7.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-123.34989929199219,48.70318119029708 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Victoria</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>British Columbia</cit:PROV_NAME>
+<cit:POPULATION>255547.0</cit:POPULATION>
+<cit:PK>8.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-135.15989685058594,60.88318149547286 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Whitehorse</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Yukon Territory</cit:PROV_NAME>
+<cit:POPULATION>15199.0</cit:POPULATION>
+<cit:PK>9.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-95.31895763571492,75.40770265220989 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Yellowknife</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Northwest Territories</cit:PROV_NAME>
+<cit:POPULATION>11753.0</cit:POPULATION>
+<cit:PK>10.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-104.5198974609375,50.70318119029708 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Regina</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Saskatchewan</cit:PROV_NAME>
+<cit:POPULATION>186521.0</cit:POPULATION>
+<cit:PK>11.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-66.51985168457031,46.03318302135177 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Fredericton</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>New Brunswick</cit:PROV_NAME>
+<cit:POPULATION>65768.0</cit:POPULATION>
+<cit:PK>12.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-63.120399475097656,46.506094856068565 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Charlottetown</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Prince Edward Island</cit:PROV_NAME>
+<cit:POPULATION>53868.0</cit:POPULATION>
+<cit:PK>13.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-63.61201858520508,44.89517108897872 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Halifax</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Nova Scotia</cit:PROV_NAME>
+<cit:POPULATION>295990.0</cit:POPULATION>
+<cit:PK>14.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-52.684871673583984,47.82076160411544 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>St. John's</cit:NAME>
+<cit:CAPITAL>Y</cit:CAPITAL>
+<cit:PROV_NAME>Newfoundland and Labrador</cit:PROV_NAME>
+<cit:POPULATION>161901.0</cit:POPULATION>
+<cit:PK>15.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-133.6699981689453,68.52118961314865 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Inuvik</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Northwest Territories</cit:PROV_NAME>
+<cit:POPULATION>-99.0</cit:POPULATION>
+<cit:PK>16.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-130.04808044433594,54.671473426625205 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Prince Rupert</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>British Columbia</cit:PROV_NAME>
+<cit:POPULATION>16197.0</cit:POPULATION>
+<cit:PK>17.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-106.62999725341797,52.3611935804338 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Saskatoon</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Saskatchewan</cit:PROV_NAME>
+<cit:POPULATION>200665.0</cit:POPULATION>
+<cit:PK>18.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-94.18000030517578,58.96195880870528 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Churchill</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Manitoba</cit:PROV_NAME>
+<cit:POPULATION>1304.0</cit:POPULATION>
+<cit:PK>19.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-80.7300033569336,51.581194801136924 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Moosonee</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Ontario</cit:PROV_NAME>
+<cit:POPULATION>-99.0</cit:POPULATION>
+<cit:PK>20.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-66.99620819091797,55.119238776967 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Schefferville</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Quebec</cit:PROV_NAME>
+<cit:POPULATION>1997.0</cit:POPULATION>
+<cit:PK>21.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-60.54999923706055,53.56119434337325 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Goose Bay</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Newfoundland and Labrador</cit:PROV_NAME>
+<cit:POPULATION>-99.0</cit:POPULATION>
+<cit:PK>22.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-66.40254211425781,50.53373996715255 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Sept-Iles</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>Quebec</cit:PROV_NAME>
+<cit:POPULATION>29262.0</cit:POPULATION>
+<cit:PK>23.0</cit:PK>
+</cit:cities></gml:featureMember><gml:featureMember>
+<cit:cities><cit:the_geom><gml:Point srsName='0'>
+  <gml:coordinates>
+-65.64994812011719,45.589327735707236 
+  </gml:coordinates>
+</gml:Point>
+</cit:the_geom>
+<cit:NAME>Saint John</cit:NAME>
+<cit:CAPITAL>N</cit:CAPITAL>
+<cit:PROV_NAME>New Brunswick</cit:PROV_NAME>
+<cit:POPULATION>121265.0</cit:POPULATION>
+<cit:PK>24.0</cit:PK>
+</cit:cities></gml:featureMember></gml:FeatureCollection>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/PeticionWFS.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/PeticionWFS.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/PeticionWFS.gml	(revision 42196)
@@ -0,0 +1,4125 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<wfs:FeatureCollection xmlns:wfsdgc="http://ovc2.catastro.meh.es/Cartografia/WFS" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://www.opengis.net/wfs
+http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd
+https://ovc2.catastro.meh.es/Cartografia/WFS/ServidorWFS.aspx
+https://ovc2.catastro.meh.es/Cartografia/WFS/ServidorWFS.aspx?DELEGACIONDGC=28&amp;MUNICIPIODGC=900&amp;typeName=PARCELA&amp;request=DescribeFeatureType&amp;outputFormat=GML2&amp;SERVICE=WFS">
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552109">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441553.09,4472655.46
+                        441559.09,4472654.99
+                        441589.95,4472652.57
+                        441589.29,4472644.64
+                        441586.66,4472613.24
+                        441585.98,4472605.1
+                        441583.13,4472571.03
+                        441580.56,4472540.27
+                        441580.28,4472536.97
+                        441577.31,4472534.24
+                        441559.09,4472535.61
+                        441525.1,4472538.17
+                        441520.78,4472538.49
+                        441515.92,4472543.93
+                        441510.64,4472545.2
+                        441506.8,4472547.63
+                        441506.39,4472547.89
+                        441505.73,4472548.33
+                        441505.08,4472548.73
+                        441500,4472551.95
+                        441488.06,4472559.53
+                        441483.75,4472562.15
+                        441480.09,4472569.3
+                        441480.66,4472574.83
+                        441481.72,4472588.35
+                        441482.19,4472594.38
+                        441483.13,4472606.42
+                        441483.22,4472607.52
+                        441483.67,4472613.24
+                        441484.26,4472620.84
+                        441484.65,4472625.81
+                        441486.06,4472643.8
+                        441487.14,4472657.51
+                        441490.27,4472660.38
+                        441500,4472659.62
+                        441525.96,4472657.58
+                        441553.09,4472655.46
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15254</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712F</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441581.07</wfsdgc:COORX>
+       <wfsdgc:COORY>4472640.26</wfsdgc:COORY>
+       <wfsdgc:VIA>2502</wfsdgc:VIA>
+       <wfsdgc:NUMERO>25</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>11691</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552109</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441480.09,4472534.24 441589.95,4472660.38</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552144">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441393.08,4472531.41
+                        441390.69,4472534.88
+                        441400.99,4472542
+                        441410.41,4472528.44
+                        441422.02,4472511.73
+                        441430.17,4472500
+                        441437.4,4472489.59
+                        441438.17,4472488.48
+                        441443.08,4472492.11
+                        441446.57,4472494.7
+                        441469.59,4472461.44
+                        441466.01,4472459
+                        441460.94,4472455.55
+                        441461.01,4472455.44
+                        441477.19,4472431.73
+                        441484.12,4472421.58
+                        441490.41,4472412.36
+                        441493.95,4472407.17
+                        441500,4472398.3
+                        441500.03,4472398.26
+                        441500,4472398.24
+                        441490.41,4472391.51
+                        441489.92,4472391.17
+                        441484.1,4472387.08
+                        441482.74,4472386.12
+                        441480.2,4472384.34
+                        441478.83,4472383.38
+                        441472.58,4472378.99
+                        441472.05,4472378.63
+                        441471.2,4472378.03
+                        441468.9,4472376.41
+                        441467.54,4472375.45
+                        441464.07,4472373.03
+                        441461.69,4472371.36
+                        441461.49,4472371.22
+                        441451.22,4472364.01
+                        441447.89,4472361.67
+                        441438.94,4472355.38
+                        441437.4,4472354.36
+                        441434.95,4472352.73
+                        441416.65,4472378.63
+                        441410.41,4472387.46
+                        441398.71,4472404.03
+                        441394.56,4472401.04
+                        441385.37,4472394.4
+                        441366.67,4472421.58
+                        441359.69,4472431.73
+                        441331.41,4472472.83
+                        441343.51,4472481.39
+                        441360.99,4472493.74
+                        441356.6,4472500
+                        441351.25,4472507.62
+                        441357.2,4472511.73
+                        441361.57,4472514.75
+                        441363.69,4472511.73
+                        441363.99,4472511.3
+                        441364.61,4472511.73
+                        441393.08,4472531.41
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>16224</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712D</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441384.48</wfsdgc:COORX>
+       <wfsdgc:COORY>4472410.04</wfsdgc:COORY>
+       <wfsdgc:VIA>1675</wfsdgc:VIA>
+       <wfsdgc:NUMERO>61</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>M</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>15518</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552144</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441331.41,4472352.73 441500.03,4472542</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552170">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441672.6,4472511.6
+                        441680.89,4472510.95
+                        441715.41,4472508.23
+                        441744.14,4472505.9
+                        441743.68,4472500
+                        441741.21,4472468.51
+                        441712.48,4472470.78
+                        441711.87,4472463.3
+                        441692.26,4472465.11
+                        441655.56,4472468.51
+                        441656.13,4472476.48
+                        441658.26,4472500
+                        441659.41,4472512.64
+                        441672.6,4472511.6
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>16245</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441704.41</wfsdgc:COORX>
+       <wfsdgc:COORY>4472467.68</wfsdgc:COORY>
+       <wfsdgc:VIA>5084</wfsdgc:VIA>
+       <wfsdgc:NUMERO>2</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>3604</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552170</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441655.56,4472463.3 441744.14,4472512.64</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552194">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441815.6,4472483.94
+                        441815.73,4472484
+                        441820.55,4472486.15
+                        441824.54,4472485.76
+                        441827.41,4472485.48
+                        441827.02,4472479.5
+                        441826.83,4472476.46
+                        441826.75,4472475.24
+                        441826.1,4472465.16
+                        441825.92,4472462.31
+                        441825.59,4472457.25
+                        441825.21,4472451.26
+                        441825.03,4472448.53
+                        441824.27,4472436.74
+                        441824.09,4472433.96
+                        441823.64,4472427.12
+                        441822.58,4472410.62
+                        441821.89,4472399.91
+                        441821.65,4472396.24
+                        441816.17,4472400.01
+                        441815.73,4472400.3
+                        441809.42,4472404.49
+                        441805.6,4472407.06
+                        441802.5,4472409.15
+                        441797.15,4472412.77
+                        441794.85,4472414.32
+                        441785.08,4472420.9
+                        441782.78,4472422.46
+                        441777.37,4472426.11
+                        441772.04,4472429.7
+                        441769.71,4472431.28
+                        441768.89,4472431.83
+                        441766.52,4472433.42
+                        441765.68,4472433.99
+                        441763.34,4472435.57
+                        441763.08,4472435.74
+                        441760.31,4472437.61
+                        441754.77,4472441.35
+                        441747.28,4472446.4
+                        441744.95,4472447.97
+                        441738.8,4472452.12
+                        441736.73,4472453.52
+                        441740.34,4472454.43
+                        441744.84,4472455.57
+                        441749.4,4472456.73
+                        441752.24,4472457.43
+                        441753.01,4472457.63
+                        441757.54,4472459.64
+                        441758.77,4472460.18
+                        441772.49,4472466.27
+                        441786.58,4472472.11
+                        441794.46,4472475.24
+                        441798.77,4472476.95
+                        441800.18,4472477.52
+                        441805.53,4472479.43
+                        441814.9,4472483.62
+                        441815.31,4472483.81
+                        441815.6,4472483.94
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>16245</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712D</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>02</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441752.69</wfsdgc:COORX>
+       <wfsdgc:COORY>4472447.95</wfsdgc:COORY>
+       <wfsdgc:VIA>3249</wfsdgc:VIA>
+       <wfsdgc:NUMERO>4</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>4008</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552194</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441736.73,4472396.24 441827.41,4472486.15</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552211">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441500.03,4472398.26
+                        441542.58,4472428.03
+                        441545.47,4472430.05
+                        441567.28,4472445.31
+                        441576,4472451.41
+                        441590.66,4472461.67
+                        441610.28,4472449.58
+                        441632.18,4472435.39
+                        441649.33,4472425.37
+                        441651.38,4472423.87
+                        441654.5,4472421.58
+                        441655,4472421.2
+                        441657.49,4472419.38
+                        441659.18,4472418.11
+                        441673.46,4472407.49
+                        441687.78,4472396.82
+                        441702.54,4472378.63
+                        441713.37,4472365.28
+                        441717.39,4472360.32
+                        441724.02,4472352.15
+                        441734.11,4472339.37
+                        441738.13,4472334.24
+                        441742.95,4472328.22
+                        441753.05,4472314.17
+                        441753.46,4472313.54
+                        441758.37,4472305.99
+                        441762.48,4472299.67
+                        441771.22,4472284.74
+                        441773.7,4472280.02
+                        441774.58,4472278.34
+                        441779.26,4472269.42
+                        441786.59,4472253.75
+                        441788.13,4472250
+                        441793.17,4472237.75
+                        441800.98,4472214.3
+                        441807.49,4472194.76
+                        441818.62,4472161.37
+                        441821.03,4472145.23
+                        441822.54,4472135.1
+                        441826.37,4472109.5
+                        441827.47,4472102.08
+                        441831.76,4472073.42
+                        441830.53,4472072.56
+                        441797.48,4472049.64
+                        441794.14,4472047.32
+                        441792.5,4472046.19
+                        441789.51,4472044.11
+                        441781.91,4472038.84
+                        441779.43,4472037.12
+                        441777.95,4472036.09
+                        441762.3,4472025.24
+                        441753.46,4472038
+                        441703.94,4472109.5
+                        441673.46,4472153.5
+                        441646.16,4472192.91
+                        441646.56,4472193.19
+                        441647.89,4472194.11
+                        441648.83,4472194.76
+                        441673.46,4472211.82
+                        441728.58,4472250
+                        441753.46,4472267.23
+                        441768.27,4472277.49
+                        441766.52,4472280.02
+                        441754.3,4472297.66
+                        441753.46,4472297.08
+                        441728.83,4472280.02
+                        441685.5,4472250
+                        441679,4472245.5
+                        441673.46,4472241.71
+                        441662.46,4472234.17
+                        441648.6,4472224.02
+                        441632.37,4472212.79
+                        441606.58,4472250
+                        441593.46,4472268.92
+                        441586.93,4472278.34
+                        441585.77,4472280.02
+                        441574.86,4472295.76
+                        441571.94,4472299.98
+                        441544.39,4472339.78
+                        441526.74,4472365.28
+                        441514.46,4472383.01
+                        441500.03,4472398.26
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>16224</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712D</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>02</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441797.45</wfsdgc:COORX>
+       <wfsdgc:COORY>4472193.15</wfsdgc:COORY>
+       <wfsdgc:VIA>1675</wfsdgc:VIA>
+       <wfsdgc:NUMERO>61</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>A</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>58584</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552211</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441500.03,4472025.24 441831.76,4472461.67</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552245">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441479.46,4472319.01
+                        441482.12,4472320.82
+                        441484.51,4472317.3
+                        441485.77,4472315.44
+                        441486.21,4472314.81
+                        441486.56,4472314.27
+                        441487.48,4472312.91
+                        441487.85,4472312.38
+                        441489.14,4472310.48
+                        441489.48,4472309.97
+                        441490.86,4472307.93
+                        441494.44,4472302.66
+                        441495.75,4472300.75
+                        441496.14,4472300.16
+                        441497.43,4472298.27
+                        441497.83,4472297.67
+                        441499.16,4472295.73
+                        441499.28,4472295.55
+                        441499.6,4472295.08
+                        441500,4472294.49
+                        441500.93,4472293.12
+                        441503.15,4472289.84
+                        441504.72,4472287.51
+                        441506.01,4472285.63
+                        441506.37,4472285.1
+                        441507.67,4472283.19
+                        441507.94,4472282.79
+                        441508.01,4472282.69
+                        441509.33,4472280.75
+                        441509.71,4472280.2
+                        441511.17,4472278.06
+                        441511.59,4472277.43
+                        441513.96,4472273.93
+                        441511.39,4472272.19
+                        441511.31,4472272.13
+                        441509.29,4472270.76
+                        441508.58,4472270.28
+                        441506.54,4472268.9
+                        441505.87,4472268.45
+                        441504.18,4472267.32
+                        441503.32,4472266.73
+                        441502.95,4472266.48
+                        441502.27,4472266.02
+                        441500,4472264.48
+                        441498.36,4472263.37
+                        441496.66,4472262.22
+                        441493.35,4472267.09
+                        441474.86,4472294.34
+                        441467.45,4472305.26
+                        441464.86,4472309.08
+                        441468.73,4472311.72
+                        441471.12,4472313.34
+                        441473.55,4472314.99
+                        441476.02,4472316.68
+                        441477.14,4472317.44
+                        441479.46,4472319.01
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712C</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441495.53</wfsdgc:COORX>
+       <wfsdgc:COORY>4472267.6</wfsdgc:COORY>
+       <wfsdgc:VIA>45276</wfsdgc:VIA>
+       <wfsdgc:NUMERO>20</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1183</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552245</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441464.86,4472262.22 441513.96,4472320.82</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552254">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441467.45,4472305.26
+                        441474.86,4472294.34
+                        441468.32,4472289.85
+                        441450.04,4472277.41
+                        441438.9,4472278.49
+                        441431.83,4472279.17
+                        441431.63,4472279.1
+                        441431.43,4472279
+                        441431.24,4472278.9
+                        441431.07,4472278.77
+                        441430.9,4472278.63
+                        441430.75,4472278.48
+                        441430.61,4472278.31
+                        441430.49,4472278.13
+                        441430.38,4472277.94
+                        441430.29,4472277.75
+                        441430.22,4472277.54
+                        441430.16,4472277.33
+                        441430.13,4472277.12
+                        441430.11,4472276.9
+                        441430.11,4472276.68
+                        441430.14,4472276.47
+                        441430.18,4472276.25
+                        441430.24,4472276.05
+                        441430.32,4472275.84
+                        441430.41,4472275.65
+                        441425.77,4472282.68
+                        441464.86,4472309.08
+                        441467.45,4472305.26
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>35</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441434.17</wfsdgc:COORX>
+       <wfsdgc:COORY>4472282.67</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>51</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>729</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552254</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441425.77,4472275.65 441474.86,4472309.08</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552266">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441471.07,4472285.89
+                        441472.99,4472283.14
+                        441469.01,4472280.42
+                        441454.75,4472270.65
+                        441451.71,4472275.01
+                        441450.04,4472277.41
+                        441468.32,4472289.85
+                        441471.07,4472285.89
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>17</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441455.42</wfsdgc:COORX>
+       <wfsdgc:COORY>4472273.19</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>2</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>181</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552266</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441450.04,4472270.65 441472.99,4472289.85</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552268">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441472.99,4472283.14
+                        441477.53,4472276.61
+                        441473.79,4472274.08
+                        441459.24,4472264.22
+                        441455,4472270.29
+                        441454.75,4472270.65
+                        441469.01,4472280.42
+                        441472.99,4472283.14
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>18</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441460.29</wfsdgc:COORX>
+       <wfsdgc:COORY>4472266.69</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>4</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>175</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552268</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441454.75,4472264.22 441477.53,4472283.14</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552269">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441450.04,4472277.41
+                        441451.71,4472275.01
+                        441454.75,4472270.65
+                        441455,4472270.29
+                        441459.24,4472264.22
+                        441463.85,4472257.61
+                        441464.95,4472256.02
+                        441468.4,4472251.06
+                        441469.14,4472250
+                        441469.42,4472249.59
+                        441470.43,4472248.14
+                        441472.98,4472244.49
+                        441475.59,4472240.74
+                        441477.34,4472238.24
+                        441482.2,4472231.27
+                        441484.41,4472228.1
+                        441486.79,4472224.68
+                        441491.27,4472218.25
+                        441493.16,4472215.54
+                        441495.91,4472211.59
+                        441498.14,4472208.39
+                        441499.51,4472206.43
+                        441500,4472205.73
+                        441500.34,4472205.24
+                        441503.45,4472200.78
+                        441505.06,4472198.46
+                        441509.11,4472192.65
+                        441509.68,4472191.83
+                        441514.16,4472185.4
+                        441517.27,4472180.93
+                        441518.82,4472178.71
+                        441523.31,4472172.27
+                        441524.54,4472170.5
+                        441515.97,4472164.53
+                        441515.18,4472163.98
+                        441511.5,4472161.39
+                        441509.11,4472159.72
+                        441508.42,4472159.24
+                        441500,4472171.81
+                        441462.28,4472228.1
+                        441455.48,4472238.24
+                        441447.6,4472250
+                        441430.41,4472275.65
+                        441430.32,4472275.84
+                        441430.24,4472276.05
+                        441430.18,4472276.25
+                        441430.14,4472276.47
+                        441430.11,4472276.68
+                        441430.11,4472276.9
+                        441430.13,4472277.12
+                        441430.16,4472277.33
+                        441430.22,4472277.54
+                        441430.29,4472277.75
+                        441430.38,4472277.94
+                        441430.49,4472278.13
+                        441430.61,4472278.31
+                        441430.75,4472278.48
+                        441430.9,4472278.63
+                        441431.07,4472278.77
+                        441431.24,4472278.9
+                        441431.43,4472279
+                        441431.63,4472279.1
+                        441431.83,4472279.17
+                        441438.9,4472278.49
+                        441450.04,4472277.41
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>16</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441463.05</wfsdgc:COORX>
+       <wfsdgc:COORY>4472253.78</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>53</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>2528</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552269</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441430.11,4472159.24 441524.54,4472279.17</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552270">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441473.79,4472274.08
+                        441477.53,4472276.61
+                        441482.09,4472270.04
+                        441478.36,4472267.5
+                        441463.85,4472257.61
+                        441459.24,4472264.22
+                        441473.79,4472274.08
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>19</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441464.63</wfsdgc:COORX>
+       <wfsdgc:COORY>4472260.43</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>6</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>177</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552270</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441459.24,4472257.61 441482.09,4472276.61</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552274">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441482.09,4472270.04
+                        441486.64,4472263.49
+                        441475.68,4472256.02
+                        441468.4,4472251.06
+                        441464.95,4472256.02
+                        441463.85,4472257.61
+                        441478.36,4472267.5
+                        441482.09,4472270.04
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>20</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441469.34</wfsdgc:COORX>
+       <wfsdgc:COORY>4472253.24</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>8</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>176</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552274</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441463.85,4472251.06 441486.64,4472270.04</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552275">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441509.92,4472257.72
+                        441520.56,4472265.12
+                        441530.73,4472250.48
+                        441531.06,4472250
+                        441546.22,4472228.21
+                        441550.52,4472222.02
+                        441548.11,4472220.35
+                        441546.48,4472219.21
+                        441546.24,4472219.04
+                        441546.19,4472219
+                        441541.44,4472215.71
+                        441541.14,4472215.49
+                        441540.65,4472215.16
+                        441540.44,4472215
+                        441538.39,4472213.59
+                        441534.7,4472211.01
+                        441533.85,4472210.41
+                        441530.65,4472214.99
+                        441521.59,4472228.03
+                        441506.31,4472250
+                        441506.29,4472250.03
+                        441505.84,4472250.69
+                        441503.87,4472253.52
+                        441506.26,4472255.18
+                        441508.64,4472256.83
+                        441509.92,4472257.72
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>02</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441532.42</wfsdgc:COORX>
+       <wfsdgc:COORY>4472216.33</wfsdgc:COORY>
+       <wfsdgc:VIA>45276</wfsdgc:VIA>
+       <wfsdgc:NUMERO>26</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1067</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552275</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441503.87,4472210.41 441550.52,4472265.12</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552276">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441491.13,4472257.03
+                        441489.67,4472256.02
+                        441487.24,4472254.34
+                        441480.95,4472250
+                        441480.36,4472249.59
+                        441472.98,4472244.49
+                        441470.43,4472248.14
+                        441469.42,4472249.59
+                        441469.14,4472250
+                        441468.4,4472251.06
+                        441475.68,4472256.02
+                        441486.64,4472263.49
+                        441491.13,4472257.03
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>21</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441473.07</wfsdgc:COORX>
+       <wfsdgc:COORY>4472246.33</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>10</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>175</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552276</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441468.4,4472244.49 441491.13,4472263.49</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552277">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441487.24,4472254.34
+                        441489.67,4472256.02
+                        441491.13,4472257.03
+                        441491.84,4472256.02
+                        441493.16,4472254.12
+                        441496.02,4472250
+                        441496.31,4472249.59
+                        441499.47,4472245.04
+                        441500,4472244.28
+                        441500.34,4472243.79
+                        441500,4472243.56
+                        441499.47,4472243.19
+                        441496.45,4472241.1
+                        441493.16,4472238.83
+                        441482.2,4472231.27
+                        441477.34,4472238.24
+                        441475.59,4472240.74
+                        441472.98,4472244.49
+                        441480.36,4472249.59
+                        441480.95,4472250
+                        441487.24,4472254.34
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>22</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441482.29</wfsdgc:COORX>
+       <wfsdgc:COORY>4472234.86</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>12</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>356</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552277</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441472.98,4472231.27 441500.34,4472257.03</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552279">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441496.45,4472241.1
+                        441499.47,4472243.19
+                        441500,4472243.56
+                        441500.34,4472243.79
+                        441504.95,4472237.16
+                        441502.22,4472235.28
+                        441500,4472233.76
+                        441499.48,4472233.4
+                        441497.13,4472231.78
+                        441493.16,4472229.06
+                        441492.77,4472228.79
+                        441491.76,4472228.1
+                        441489.85,4472226.78
+                        441486.79,4472224.68
+                        441484.41,4472228.1
+                        441482.2,4472231.27
+                        441493.16,4472238.83
+                        441496.45,4472241.1
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>23</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441487.58</wfsdgc:COORX>
+       <wfsdgc:COORY>4472227.81</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>16</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>177</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552279</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441482.2,4472224.68 441504.95,4472243.79</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552280">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441502.22,4472235.28
+                        441504.95,4472237.16
+                        441509.11,4472231.18
+                        441509.43,4472230.72
+                        441509.11,4472230.5
+                        441506.7,4472228.84
+                        441505.62,4472228.1
+                        441500,4472224.24
+                        441499.49,4472223.89
+                        441493.16,4472219.54
+                        441491.27,4472218.25
+                        441486.79,4472224.68
+                        441489.85,4472226.78
+                        441491.76,4472228.1
+                        441492.77,4472228.79
+                        441493.16,4472229.06
+                        441497.13,4472231.78
+                        441499.48,4472233.4
+                        441500,4472233.76
+                        441502.22,4472235.28
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>24</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441492.02</wfsdgc:COORX>
+       <wfsdgc:COORY>4472220.17</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>18</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>173</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552280</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441486.79,4472218.25 441509.43,4472237.16</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552282">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441506.7,4472228.84
+                        441509.11,4472230.5
+                        441509.43,4472230.72
+                        441510.9,4472228.6
+                        441511.25,4472228.1
+                        441513.95,4472224.22
+                        441509.11,4472220.83
+                        441500,4472214.45
+                        441499.5,4472214.1
+                        441495.91,4472211.59
+                        441493.16,4472215.54
+                        441491.27,4472218.25
+                        441493.16,4472219.54
+                        441499.49,4472223.89
+                        441500,4472224.24
+                        441505.62,4472228.1
+                        441506.7,4472228.84
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>25</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441497.65</wfsdgc:COORX>
+       <wfsdgc:COORY>4472214.71</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>20</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>177</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552282</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441491.27,4472211.59 441513.95,4472230.72</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552284">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441518.8,4472217.24
+                        441509.11,4472210.94
+                        441500.34,4472205.24
+                        441500,4472205.73
+                        441499.51,4472206.43
+                        441498.14,4472208.39
+                        441495.91,4472211.59
+                        441499.5,4472214.1
+                        441500,4472214.45
+                        441509.11,4472220.83
+                        441513.95,4472224.22
+                        441518.8,4472217.24
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>26</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441501.19</wfsdgc:COORX>
+       <wfsdgc:COORY>4472207.45</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>22</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>179</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552284</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441495.91,4472205.24 441518.8,4472224.22</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552286">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441548.11,4472220.35
+                        441550.52,4472222.02
+                        441580.2,4472178.82
+                        441569.9,4472171.64
+                        441564.63,4472167.98
+                        441563.29,4472166.99
+                        441561.7,4472169.27
+                        441561.63,4472169.21
+                        441533.45,4472210.12
+                        441533.85,4472210.41
+                        441534.7,4472211.01
+                        441538.39,4472213.59
+                        441540.44,4472215
+                        441540.65,4472215.16
+                        441541.14,4472215.49
+                        441541.44,4472215.71
+                        441546.19,4472219
+                        441546.24,4472219.04
+                        441546.48,4472219.21
+                        441548.11,4472220.35
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>03</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441564.85</wfsdgc:COORX>
+       <wfsdgc:COORY>4472170.14</wfsdgc:COORY>
+       <wfsdgc:VIA>45276</wfsdgc:VIA>
+       <wfsdgc:NUMERO>32</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1089</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552286</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441533.45,4472166.99 441580.2,4472222.02</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552288">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441523.18,4472210.94
+                        441509.11,4472201.25
+                        441505.06,4472198.46
+                        441503.45,4472200.78
+                        441500.34,4472205.24
+                        441509.11,4472210.94
+                        441518.8,4472217.24
+                        441523.18,4472210.94
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>27</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441505.67</wfsdgc:COORX>
+       <wfsdgc:COORY>4472200.99</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>24</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>175</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552288</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441500.34,4472198.46 441523.18,4472217.24</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552290">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441527.8,4472204.29
+                        441509.68,4472191.83
+                        441509.11,4472192.65
+                        441505.06,4472198.46
+                        441509.11,4472201.25
+                        441523.18,4472210.94
+                        441527.8,4472204.29
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>28</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441510.18</wfsdgc:COORX>
+       <wfsdgc:COORY>4472194.35</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>26</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>178</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552290</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441505.06,4472191.83 441527.8,4472210.94</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552291">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441532.34,4472197.76
+                        441514.16,4472185.4
+                        441509.68,4472191.83
+                        441527.8,4472204.29
+                        441532.34,4472197.76
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>29</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441515</wfsdgc:COORX>
+       <wfsdgc:COORY>4472187.85</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>28</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>174</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552291</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441509.68,4472185.4 441532.34,4472204.29</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552293">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441536.87,4472191.25
+                        441518.82,4472178.71
+                        441517.27,4472180.93
+                        441514.16,4472185.4
+                        441532.34,4472197.76
+                        441536.87,4472191.25
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>30</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441519.31</wfsdgc:COORX>
+       <wfsdgc:COORY>4472181.01</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>30</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>177</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552293</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441514.16,4472178.71 441536.87,4472197.76</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552295">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441541.37,4472184.78
+                        441523.31,4472172.27
+                        441518.82,4472178.71
+                        441536.87,4472191.25
+                        441541.37,4472184.78
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>31</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441523.87</wfsdgc:COORX>
+       <wfsdgc:COORY>4472174.24</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>32</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>173</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552295</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441518.82,4472172.27 441541.37,4472191.25</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552296">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441546.02,4472178.09
+                        441527.88,4472165.71
+                        441524.54,4472170.5
+                        441523.31,4472172.27
+                        441541.37,4472184.78
+                        441546.02,4472178.09
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>32</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441528.35</wfsdgc:COORX>
+       <wfsdgc:COORY>4472168.33</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>34</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>177</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552296</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441523.31,4472165.71 441546.02,4472184.78</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552298">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441527.88,4472165.71
+                        441546.02,4472178.09
+                        441555.27,4472164.79
+                        441555.22,4472164.75
+                        441546.16,4472158.66
+                        441537.06,4472152.55
+                        441532.8,4472158.66
+                        441527.88,4472165.71
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>33</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441537.92</wfsdgc:COORX>
+       <wfsdgc:COORY>4472157</wfsdgc:COORY>
+       <wfsdgc:VIA>8387</wfsdgc:VIA>
+       <wfsdgc:NUMERO>36</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>354</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552298</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441527.88,4472152.55 441555.27,4472178.09</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552301">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441527.88,4472165.71
+                        441532.8,4472158.66
+                        441537.06,4472152.55
+                        441540.19,4472148.06
+                        441531.17,4472141.83
+                        441527.61,4472139.37
+                        441526.67,4472138.72
+                        441523.58,4472136.59
+                        441517.11,4472146.26
+                        441514.9,4472149.56
+                        441509.11,4472158.21
+                        441508.42,4472159.24
+                        441509.11,4472159.72
+                        441511.5,4472161.39
+                        441515.18,4472163.98
+                        441515.97,4472164.53
+                        441524.54,4472170.5
+                        441527.88,4472165.71
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>15</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441524.26</wfsdgc:COORX>
+       <wfsdgc:COORY>4472166.43</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>55</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>544</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552301</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441508.42,4472136.59 441540.19,4472170.5</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552302">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441563.29,4472166.99
+                        441569.1,4472158.66
+                        441570.2,4472157.08
+                        441573.16,4472152.85
+                        441583.32,4472138.26
+                        441580.03,4472136.13
+                        441579.1,4472135.53
+                        441576.69,4472133.97
+                        441573.16,4472131.69
+                        441545.32,4472113.7
+                        441543.01,4472112.21
+                        441541.21,4472111.05
+                        441523.9,4472136.13
+                        441523.58,4472136.59
+                        441526.67,4472138.72
+                        441527.61,4472139.37
+                        441531.17,4472141.83
+                        441540.19,4472148.06
+                        441537.06,4472152.55
+                        441546.16,4472158.66
+                        441555.22,4472164.75
+                        441555.27,4472164.79
+                        441555.38,4472164.87
+                        441557.73,4472166.5
+                        441561.63,4472169.21
+                        441561.7,4472169.27
+                        441563.29,4472166.99
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>14</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441554.4</wfsdgc:COORX>
+       <wfsdgc:COORY>4472160.26</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>57</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1749</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552302</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441523.58,4472111.05 441583.32,4472169.27</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552307">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441579.1,4472135.53
+                        441580.03,4472136.13
+                        441583.32,4472138.26
+                        441584.8,4472136.13
+                        441589.11,4472129.93
+                        441604.09,4472108.37
+                        441620.21,4472085.17
+                        441621.93,4472082.7
+                        441630.06,4472071
+                        441636.71,4472061.48
+                        441636.83,4472061.3
+                        441640.23,4472056.01
+                        441640.26,4472055.97
+                        441648.43,4472044.16
+                        441653.16,4472037.32
+                        441656.35,4472032.71
+                        441653.16,4472030.46
+                        441648.56,4472027.21
+                        441620.21,4472007.17
+                        441617.39,4472005.17
+                        441617.05,4472004.93
+                        441615.3,4472003.7
+                        441614.35,4472005.07
+                        441589.11,4472041.65
+                        441587.38,4472044.16
+                        441560.78,4472082.7
+                        441541.21,4472111.05
+                        441543.01,4472112.21
+                        441545.32,4472113.7
+                        441573.16,4472131.69
+                        441576.69,4472133.97
+                        441579.1,4472135.53
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>13</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441581.01</wfsdgc:COORX>
+       <wfsdgc:COORY>4472132.4</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>61</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>6503</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552307</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441541.21,4472003.7 441656.35,4472138.26</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552319">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441656.35,4472032.71
+                        441660.15,4472027.21
+                        441668.68,4472014.87
+                        441668.86,4472014.61
+                        441669.11,4472014.26
+                        441679.32,4472000
+                        441679.36,4471999.94
+                        441685.47,4471991.4
+                        441684.68,4471990.84
+                        441678.79,4471986.65
+                        441677.41,4471975.25
+                        441669.11,4471971.78
+                        441653.16,4471965.11
+                        441650.36,4471963.94
+                        441625.48,4471953.54
+                        441622.25,4471952.19
+                        441618.18,4471950.49
+                        441612.72,4471948.21
+                        441612.91,4471952.19
+                        441613.57,4471966.47
+                        441614.23,4471980.7
+                        441615.13,4472000
+                        441615.3,4472003.7
+                        441617.05,4472004.93
+                        441617.39,4472005.17
+                        441620.21,4472007.17
+                        441648.56,4472027.21
+                        441653.16,4472030.46
+                        441656.35,4472032.71
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>12</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441655.99</wfsdgc:COORX>
+       <wfsdgc:COORY>4472020.19</wfsdgc:COORY>
+       <wfsdgc:VIA>1374</wfsdgc:VIA>
+       <wfsdgc:NUMERO>1</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>3607</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552319</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441612.72,4471948.21 441685.47,4472032.71</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552325">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441710.92,4471989.21
+                        441710.99,4471989.11
+                        441715.54,4471982.73
+                        441716.57,4471981.28
+                        441717.08,4471980.53
+                        441721.23,4471974.51
+                        441725.67,4471968.06
+                        441727.33,4471965.66
+                        441728.51,4471963.94
+                        441729.07,4471963.12
+                        441730.02,4471961.74
+                        441730.83,4471960.59
+                        441732.4,4471958.35
+                        441733.42,4471956.63
+                        441734.37,4471954.87
+                        441735.24,4471953.07
+                        441735.62,4471952.19
+                        441736.04,4471951.24
+                        441736.76,4471949.37
+                        441737.4,4471947.48
+                        441737.66,4471946.58
+                        441737.96,4471945.56
+                        441738.43,4471943.62
+                        441738.59,4471942.82
+                        441738.83,4471941.66
+                        441739.14,4471939.68
+                        441739.15,4471939.63
+                        441739.25,4471938.76
+                        441739.37,4471937.7
+                        441739.48,4471936.13
+                        441739.51,4471935.7
+                        441739.57,4471933.7
+                        441739.51,4471931.44
+                        441739.34,4471929.2
+                        441739.18,4471927.61
+                        441736.96,4471927.87
+                        441736.24,4471927.97
+                        441733.43,4471928.3
+                        441729.05,4471928.82
+                        441727.33,4471929.03
+                        441727.12,4471929.06
+                        441724.81,4471929.33
+                        441721.84,4471929.69
+                        441721.4,4471929.74
+                        441719.43,4471929.98
+                        441717.42,4471930.22
+                        441716.06,4471930.38
+                        441706.89,4471931.48
+                        441698.1,4471932.53
+                        441672.62,4471935.59
+                        441674.63,4471952.19
+                        441676.01,4471963.56
+                        441676.05,4471963.91
+                        441677,4471971.12
+                        441677.41,4471975.25
+                        441678.79,4471986.65
+                        441684.68,4471990.84
+                        441691.91,4471980
+                        441692.28,4471980.26
+                        441703.17,4471987.89
+                        441708.97,4471991.95
+                        441710.92,4471989.21
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>07</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441675.03</wfsdgc:COORX>
+       <wfsdgc:COORY>4471937.3</wfsdgc:COORY>
+       <wfsdgc:VIA>45276</wfsdgc:VIA>
+       <wfsdgc:NUMERO>56</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>2992</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552325</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441672.62,4471927.61 441739.57,4471991.95</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552326">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441425.47,4471967.4
+                        441427.36,4471968.63
+                        441428.83,4471969.59
+                        441448.41,4471982.34
+                        441452.07,4471984.72
+                        441455.01,4471986.63
+                        441462.7,4471968.63
+                        441464.21,4471965.1
+                        441473.08,4471944.32
+                        441479.39,4471929.53
+                        441482.01,4471923.39
+                        441482.03,4471923.35
+                        441486.56,4471912.73
+                        441494.01,4471895.28
+                        441478.29,4471888.63
+                        441441.51,4471873.07
+                        441374.27,4471844.59
+                        441336.38,4471933.66
+                        441336.33,4471933.9
+                        441336.31,4471934.14
+                        441336.3,4471934.38
+                        441336.32,4471934.63
+                        441336.36,4471934.87
+                        441336.42,4471935.1
+                        441336.5,4471935.33
+                        441336.6,4471935.55
+                        441336.71,4471935.76
+                        441336.85,4471935.96
+                        441337,4471936.15
+                        441337.17,4471936.33
+                        441337.35,4471936.49
+                        441337.55,4471936.63
+                        441337.75,4471936.76
+                        441337.97,4471936.87
+                        441338.2,4471936.95
+                        441338.43,4471937.02
+                        441338.67,4471937.07
+                        441338.91,4471937.1
+                        441339.15,4471937.11
+                        441339.39,4471937.09
+                        441339.63,4471937.06
+                        441339.87,4471937
+                        441348.83,4471936.21
+                        441367.54,4471934.56
+                        441368.69,4471934.61
+                        441369.83,4471934.71
+                        441370.97,4471934.86
+                        441372.07,4471935.04
+                        441372.11,4471935.05
+                        441373.23,4471935.3
+                        441374.34,4471935.6
+                        441375.44,4471935.94
+                        441376.52,4471936.33
+                        441377.58,4471936.77
+                        441378.62,4471937.26
+                        441379.64,4471937.79
+                        441380.64,4471938.36
+                        441384.45,4471940.78
+                        441389.91,4471944.32
+                        441411.07,4471958.03
+                        441411.48,4471958.3
+                        441425.47,4471967.4
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>14191</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711G</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441452.71</wfsdgc:COORX>
+       <wfsdgc:COORY>4471892.14</wfsdgc:COORY>
+       <wfsdgc:VIA>219</wfsdgc:VIA>
+       <wfsdgc:NUMERO>6</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>11840</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552326</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441336.3,4471844.59 441494.01,4471986.63</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552331">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441676.01,4471963.56
+                        441674.63,4471952.19
+                        441672.62,4471935.59
+                        441671.16,4471923.6
+                        441669.11,4471928.5
+                        441666.42,4471934.92
+                        441653.16,4471929.34
+                        441631.08,4471920.04
+                        441629.1,4471919.2
+                        441620.24,4471915.47
+                        441613.22,4471932.1
+                        441613.22,4471932.14
+                        441612.72,4471948.21
+                        441618.18,4471950.49
+                        441622.25,4471952.19
+                        441625.48,4471953.54
+                        441650.36,4471963.94
+                        441653.16,4471965.11
+                        441669.11,4471971.78
+                        441677.41,4471975.25
+                        441677,4471971.12
+                        441676.05,4471963.91
+                        441676.01,4471963.56
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>11</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441671.7</wfsdgc:COORX>
+       <wfsdgc:COORY>4471968.63</wfsdgc:COORY>
+       <wfsdgc:VIA>1374</wfsdgc:VIA>
+       <wfsdgc:NUMERO>3</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>2196</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552331</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441612.72,4471915.47 441677.41,4471975.25</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552338">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441579.86,4471913.95
+                        441583,4471915.28
+                        441592.32,4471919.24
+                        441594.5,4471920.16
+                        441597.89,4471921.6
+                        441601.7,4471912.64
+                        441602.88,4471909.88
+                        441604.74,4471905.5
+                        441606.3,4471901.83
+                        441607.8,4471898.31
+                        441608.23,4471897.3
+                        441610.58,4471891.71
+                        441612.44,4471887.41
+                        441613.92,4471883.93
+                        441614.46,4471882.67
+                        441615.5,4471880.22
+                        441616.67,4471877.47
+                        441617.27,4471876.06
+                        441617.34,4471875.9
+                        441617.39,4471875.79
+                        441619.19,4471871.57
+                        441620.69,4471868.04
+                        441624.62,4471858.8
+                        441628.56,4471849.53
+                        441631.29,4471843.12
+                        441633.13,4471838.79
+                        441628.1,4471836.66
+                        441627.75,4471836.51
+                        441625.47,4471835.55
+                        441625.06,4471835.37
+                        441619.73,4471833.1
+                        441619.29,4471832.91
+                        441611.26,4471829.5
+                        441608.23,4471828.21
+                        441606.18,4471827.32
+                        441604.39,4471826.55
+                        441603.29,4471826.07
+                        441594.62,4471822.43
+                        441590.57,4471820.71
+                        441588.86,4471819.99
+                        441588.73,4471819.93
+                        441584.62,4471818.18
+                        441580.86,4471816.59
+                        441580.63,4471816.49
+                        441571.64,4471812.67
+                        441566.46,4471810.47
+                        441562.83,4471808.93
+                        441559.21,4471807.39
+                        441556.33,4471806.16
+                        441555.74,4471805.91
+                        441553.1,4471804.79
+                        441550.47,4471803.67
+                        441549.36,4471806.23
+                        441548.9,4471807.29
+                        441548.85,4471807.4
+                        441547.75,4471809.95
+                        441547.07,4471811.51
+                        441544.18,4471818.18
+                        441541.5,4471824.37
+                        441540.74,4471826.12
+                        441536.67,4471835.51
+                        441533.83,4471842.06
+                        441533.29,4471843.3
+                        441532.99,4471843.99
+                        441531.88,4471846.56
+                        441531.86,4471846.61
+                        441529.23,4471852.69
+                        441532.21,4471853.96
+                        441533.14,4471854.35
+                        441537.47,4471856.19
+                        441543.32,4471858.68
+                        441548.66,4471860.95
+                        441548.69,4471860.96
+                        441551.42,4471862.12
+                        441556.75,4471864.39
+                        441575.77,4471872.47
+                        441578.09,4471867.12
+                        441591.75,4471872.92
+                        441587.52,4471882.67
+                        441584.86,4471888.81
+                        441584.34,4471890.01
+                        441583.43,4471892.11
+                        441583.31,4471892.4
+                        441581.32,4471897.09
+                        441578.38,4471903.75
+                        441576.14,4471908.93
+                        441574.88,4471911.83
+                        441579.86,4471913.95
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15185</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711H</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>02</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441616.44</wfsdgc:COORX>
+       <wfsdgc:COORY>4471835.9</wfsdgc:COORY>
+       <wfsdgc:VIA>859</wfsdgc:VIA>
+       <wfsdgc:NUMERO>17</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>5631</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552338</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441529.23,4471803.67 441633.13,4471921.6</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552340">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441574.88,4471911.83
+                        441576.14,4471908.93
+                        441578.38,4471903.75
+                        441581.32,4471897.09
+                        441583.31,4471892.4
+                        441583.43,4471892.11
+                        441584.34,4471890.01
+                        441584.86,4471888.81
+                        441587.52,4471882.67
+                        441591.75,4471872.92
+                        441578.09,4471867.12
+                        441575.77,4471872.47
+                        441561.22,4471906.03
+                        441574.88,4471911.83
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15185</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711H</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>03</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441576.74</wfsdgc:COORX>
+       <wfsdgc:COORY>4471880.52</wfsdgc:COORY>
+       <wfsdgc:VIA>45697</wfsdgc:VIA>
+       <wfsdgc:NUMERO>34</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>630</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552340</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441561.22,4471867.12 441591.75,4471911.83</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="552341">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441575.77,4471872.47
+                        441556.75,4471864.39
+                        441551.42,4471862.12
+                        441548.69,4471860.96
+                        441548.66,4471860.95
+                        441543.32,4471858.68
+                        441537.47,4471856.19
+                        441533.14,4471854.35
+                        441532.21,4471853.96
+                        441529.23,4471852.69
+                        441528.74,4471853.8
+                        441524,4471864.75
+                        441516.23,4471882.67
+                        441514.68,4471886.25
+                        441561.22,4471906.03
+                        441575.77,4471872.47
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15185</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711H</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>04</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441532.92</wfsdgc:COORX>
+       <wfsdgc:COORY>4471872.26</wfsdgc:COORY>
+       <wfsdgc:VIA>4859</wfsdgc:VIA>
+       <wfsdgc:NUMERO>16</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1850</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>552341</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441514.68,4471852.69 441575.77,4471906.03</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="553112">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441388.07,4472366.93
+                        441401.22,4472376.04
+                        441444.16,4472314.12
+                        441430.97,4472305.05
+                        441429.19,4472307.61
+                        441427.66,4472309.81
+                        441425.27,4472313.25
+                        441423.1,4472316.38
+                        441418.8,4472322.59
+                        441418.67,4472322.77
+                        441417.94,4472323.82
+                        441414.06,4472329.42
+                        441412.26,4472332.01
+                        441406.76,4472339.95
+                        441401.14,4472348.06
+                        441400.47,4472349.03
+                        441400.26,4472349.34
+                        441394.68,4472357.4
+                        441393.81,4472358.65
+                        441391.26,4472362.33
+                        441388.07,4472366.93
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>12249</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712C</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>23</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441399.49</wfsdgc:COORX>
+       <wfsdgc:COORY>4472369.48</wfsdgc:COORY>
+       <wfsdgc:VIA>45277</wfsdgc:VIA>
+       <wfsdgc:NUMERO>5</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1206</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>553112</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441388.07,4472305.05 441444.16,4472376.04</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="553169">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441390.41,4472282.9
+                        441398.19,4472282.12
+                        441402.95,4472281.64
+                        441403.02,4472281.64
+                        441403.59,4472281.64
+                        441404.23,4472281.58
+                        441404.86,4472281.47
+                        441405.48,4472281.3
+                        441406.08,4472281.08
+                        441406.66,4472280.8
+                        441407.21,4472280.47
+                        441407.73,4472280.1
+                        441408.22,4472279.68
+                        441408.66,4472279.22
+                        441410.5,4472276.44
+                        441423.01,4472257.59
+                        441428.04,4472250
+                        441431.34,4472244.92
+                        441435.05,4472239.21
+                        441440.14,4472231.37
+                        441442.84,4472227.21
+                        441446.67,4472221.31
+                        441447.1,4472220.65
+                        441448.72,4472218.16
+                        441448.78,4472218.07
+                        441448.72,4472218.08
+                        441443.57,4472218.6
+                        441421.97,4472220.8
+                        441411.13,4472221.91
+                        441398.19,4472223.23
+                        441383.3,4472224.75
+                        441369.72,4472226.14
+                        441370.22,4472231.37
+                        441371.45,4472244.16
+                        441371.73,4472247.09
+                        441372.01,4472250
+                        441372.3,4472253
+                        441377.25,4472252.47
+                        441387.36,4472251.38
+                        441387.78,4472255.74
+                        441387.97,4472257.74
+                        441388.06,4472258.68
+                        441388.34,4472261.52
+                        441389.12,4472269.55
+                        441389.46,4472273.08
+                        441389.89,4472277.54
+                        441390.41,4472282.9
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>13227</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>05</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441376.21</wfsdgc:COORX>
+       <wfsdgc:COORY>4472229.45</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>50</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>2797</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>553169</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441369.72,4472218.07 441448.78,4472282.9</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="553844">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441418.3,4472144.21
+                        441419.92,4472144.06
+                        441451.98,4472141.12
+                        441452.66,4472141.05
+                        441463.37,4472129.01
+                        441464.41,4472127.84
+                        441470.58,4472120.9
+                        441472.35,4472118.91
+                        441477.71,4472112.89
+                        441486.51,4472103
+                        441491.95,4472096.88
+                        441497.39,4472090.77
+                        441500,4472087.84
+                        441502.41,4472085.13
+                        441500,4472083.55
+                        441480.37,4472070.71
+                        441478.53,4472069.51
+                        441475.18,4472067.32
+                        441473.42,4472066.17
+                        441470.58,4472064.31
+                        441464.41,4472060.28
+                        441460.74,4472057.88
+                        441454.56,4472053.84
+                        441446.94,4472048.85
+                        441433.63,4472040.15
+                        441433.26,4472039.91
+                        441432.02,4472040.03
+                        441420.94,4472041.09
+                        441390.58,4472043.99
+                        441389.64,4472044.08
+                        441388.84,4472044.16
+                        441384.41,4472044.58
+                        441374.35,4472045.54
+                        441331.81,4472049.59
+                        441322.78,4472050.45
+                        441316.9,4472051.01
+                        441311.58,4472051.52
+                        441311.76,4472054.3
+                        441311.91,4472056.59
+                        441312.93,4472072.46
+                        441313.49,4472081.13
+                        441314.11,4472090.77
+                        441315.93,4472118.91
+                        441317.91,4472149.63
+                        441321.8,4472153.05
+                        441328.96,4472152.4
+                        441384.41,4472147.32
+                        441390.58,4472146.75
+                        441418.3,4472144.21
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>14202</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441496.13</wfsdgc:COORX>
+       <wfsdgc:COORY>4472086.27</wfsdgc:COORY>
+       <wfsdgc:VIA>754</wfsdgc:VIA>
+       <wfsdgc:NUMERO>11</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>16209</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>553844</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441311.58,4472039.91 441502.41,4472153.05</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="553856">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441452.66,4472141.05
+                        441464.41,4472139.81
+                        441500,4472136.05
+                        441503.84,4472135.64
+                        441505.41,4472133.39
+                        441527.49,4472101.68
+                        441525.58,4472100.42
+                        441512.62,4472091.87
+                        441510.96,4472090.77
+                        441502.41,4472085.13
+                        441500,4472087.84
+                        441497.39,4472090.77
+                        441491.95,4472096.88
+                        441486.51,4472103
+                        441477.71,4472112.89
+                        441472.35,4472118.91
+                        441470.58,4472120.9
+                        441464.41,4472127.84
+                        441463.37,4472129.01
+                        441452.66,4472141.05
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>14202</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>02</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441463.55</wfsdgc:COORX>
+       <wfsdgc:COORY>4472133.19</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>60</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1918</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>553856</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441452.66,4472085.13 441527.49,4472141.05</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="553879">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441525.58,4472100.42
+                        441527.49,4472101.68
+                        441535.09,4472090.77
+                        441544.41,4472077.39
+                        441552.42,4472065.89
+                        441567.9,4472043.67
+                        441568.4,4472042.95
+                        441590.63,4472010.77
+                        441596.62,4472002.09
+                        441593.64,4472000
+                        441552.42,4471971.05
+                        441544.41,4471965.42
+                        441543.34,4471964.67
+                        441538.63,4471971.5
+                        441528.6,4471986.06
+                        441525.94,4471989.93
+                        441525.01,4471991.28
+                        441519,4472000
+                        441518.58,4472000.61
+                        441517.68,4472000
+                        441515.51,4471998.52
+                        441514.54,4471997.86
+                        441513.07,4472000
+                        441505.68,4472010.77
+                        441500,4472019.05
+                        441494.76,4472026.68
+                        441498.74,4472029.29
+                        441492.59,4472038.34
+                        441492.37,4472038.68
+                        441490.96,4472040.75
+                        441488.98,4472043.67
+                        441486.88,4472046.76
+                        441486.83,4472046.81
+                        441486.04,4472047.97
+                        441476.31,4472061.99
+                        441474.34,4472064.84
+                        441473.42,4472066.17
+                        441475.18,4472067.32
+                        441478.53,4472069.51
+                        441480.37,4472070.71
+                        441500,4472083.55
+                        441502.41,4472085.13
+                        441510.96,4472090.77
+                        441512.62,4472091.87
+                        441525.58,4472100.42
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>14202</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>03</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441479.21</wfsdgc:COORX>
+       <wfsdgc:COORY>4472061.15</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>62</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>8106</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>553879</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441473.42,4471964.67 441596.62,4472101.68</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="553907">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441473.42,4472066.17
+                        441474.34,4472064.84
+                        441476.31,4472061.99
+                        441486.04,4472047.97
+                        441486.83,4472046.81
+                        441486.88,4472046.76
+                        441488.98,4472043.67
+                        441490.96,4472040.75
+                        441492.37,4472038.68
+                        441492.59,4472038.34
+                        441498.74,4472029.29
+                        441494.76,4472026.68
+                        441500,4472019.05
+                        441505.68,4472010.77
+                        441513.07,4472000
+                        441514.54,4471997.86
+                        441515.51,4471998.52
+                        441517.68,4472000
+                        441518.58,4472000.61
+                        441519,4472000
+                        441525.01,4471991.28
+                        441525.94,4471989.93
+                        441528.6,4471986.06
+                        441538.63,4471971.5
+                        441543.34,4471964.67
+                        441525.94,4471952.46
+                        441500,4471934.27
+                        441496.44,4471931.77
+                        441493.91,4471937.98
+                        441492.17,4471937.25
+                        441470.62,4471987.16
+                        441472.89,4471988.09
+                        441472.77,4471988.36
+                        441467.8,4472000
+                        441464.41,4472007.94
+                        441463.2,4472010.77
+                        441452.85,4472035.01
+                        441452.79,4472035.14
+                        441450.72,4472039.99
+                        441446.94,4472048.85
+                        441454.56,4472053.84
+                        441460.74,4472057.88
+                        441464.41,4472060.28
+                        441470.58,4472064.31
+                        441473.42,4472066.17
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>14202</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>04</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441472.06</wfsdgc:COORX>
+       <wfsdgc:COORY>4472060.81</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>62</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>D</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>5441</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>553907</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441446.94,4471931.77 441543.34,4472066.17</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="553931">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441432.84,4472039.63
+                        441438.29,4472026.28
+                        441444.63,4472010.77
+                        441449.03,4472000
+                        441449.79,4471998.14
+                        441425.91,4471982.71
+                        441384.41,4471955.89
+                        441374.7,4471949.61
+                        441373.66,4471948.99
+                        441372.57,4471948.47
+                        441371.44,4471948.03
+                        441370.29,4471947.69
+                        441369.1,4471947.45
+                        441367.9,4471947.31
+                        441366.69,4471947.28
+                        441365.49,4471947.34
+                        441310.38,4471952.07
+                        441308.3,4471952.25
+                        441305.41,4471956.38
+                        441311.93,4471960.64
+                        441312.29,4471960.88
+                        441312.9,4471961.28
+                        441313.63,4471961.76
+                        441314.23,4471962.15
+                        441321.7,4471967.03
+                        441322.15,4471967.32
+                        441322.38,4471967.47
+                        441330.76,4471972.95
+                        441334.92,4471975.66
+                        441338.53,4471978.02
+                        441339.87,4471978.9
+                        441341.43,4471979.92
+                        441342.83,4471980.83
+                        441344.25,4471981.76
+                        441345.66,4471982.68
+                        441346.77,4471983.4
+                        441347.37,4471983.79
+                        441348.75,4471984.69
+                        441349.11,4471984.93
+                        441349.67,4471985.3
+                        441351.84,4471986.71
+                        441353.52,4471987.81
+                        441354.9,4471988.71
+                        441355.65,4471989.2
+                        441356.08,4471989.48
+                        441357.72,4471990.55
+                        441367.57,4471996.99
+                        441368.87,4471997.83
+                        441370.28,4471998.75
+                        441371.77,4471999.72
+                        441372.2,4472000
+                        441373.18,4472000.64
+                        441374.69,4472001.63
+                        441375.78,4472002.34
+                        441376.33,4472002.7
+                        441377.72,4472003.61
+                        441378.05,4472003.83
+                        441380.81,4472005.64
+                        441380.97,4472005.74
+                        441382.7,4472006.87
+                        441383.73,4472007.55
+                        441384.41,4472007.99
+                        441384.97,4472008.36
+                        441386.69,4472009.48
+                        441388.08,4472010.38
+                        441388.67,4472010.77
+                        441396.57,4472015.93
+                        441398.13,4472016.95
+                        441399.4,4472017.78
+                        441400.84,4472018.72
+                        441402.16,4472019.58
+                        441403.78,4472020.64
+                        441404.76,4472021.28
+                        441405.3,4472021.63
+                        441406.71,4472022.55
+                        441407,4472022.74
+                        441409.76,4472024.54
+                        441411.6,4472025.74
+                        441412.42,4472026.28
+                        441412.63,4472026.42
+                        441412.96,4472026.63
+                        441413.94,4472027.27
+                        441415.55,4472028.32
+                        441420.03,4472031.25
+                        441427.11,4472035.88
+                        441432.84,4472039.63
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>14202</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>05</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441431.19</wfsdgc:COORX>
+       <wfsdgc:COORY>4472036.41</wfsdgc:COORY>
+       <wfsdgc:VIA>219</wfsdgc:VIA>
+       <wfsdgc:NUMERO>31</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>5510</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020123</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>553931</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441305.41,4471947.28 441449.79,4472039.63</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="1281234">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441451.6105,4471849.4505
+                        441449.6465,4471854.0685
+                        441448.0105,4471857.916
+                        441454.32,4471860.59
+                        441456.55,4471861.54
+                        441462.69,4471864.15
+                        441467.84,4471866.33
+                        441472.73,4471868.41
+                        441475.62,4471869.64
+                        441480.63,4471871.76
+                        441485.77,4471873.94
+                        441491.92,4471876.55
+                        441494.15,4471877.5
+                        441500.4465,4471880.1685
+                        441504.0505,4471871.69
+                        441504.981,4471869.5005
+                        441505.1125,4471869.191
+                        441506.706,4471865.4425
+                        441508.806,4471860.5025
+                        441510.0135,4471857.6615
+                        441511.5385,4471854.0735
+                        441512.1205,4471852.7045
+                        441515.3495,4471845.108
+                        441517.4615,4471840.139
+                        441518.634,4471837.3805
+                        441520.7255,4471832.461
+                        441523.48,4471825.98
+                        441523.9555,4471824.861
+                        441526.0585,4471819.912
+                        441527.052,4471817.5735
+                        441527.2815,4471817.0335
+                        441529.3845,4471812.0845
+                        441530.986,4471808.3155
+                        441531.114,4471808.0145
+                        441532.048,4471805.8165
+                        441535.65,4471797.34
+                        441529.298,4471794.644
+                        441527.0175,4471793.6765
+                        441520.917,4471791.087
+                        441515.7775,4471788.906
+                        441510.84,4471786.8105
+                        441507.928,4471785.5745
+                        441502.9905,4471783.479
+                        441500,4471782.21
+                        441497.8595,4471781.301
+                        441491.7015,4471778.6865
+                        441489.491,4471777.748
+                        441483.23,4471775.09
+                        441479.628,4471783.5605
+                        441478.6935,4471785.7585
+                        441478.578,4471786.0305
+                        441476.9665,4471789.82
+                        441474.871,4471794.7475
+                        441473.6505,4471797.6175
+                        441471.538,4471802.586
+                        441468.3115,4471810.1735
+                        441466.195,4471815.1505
+                        441465.0185,4471817.918
+                        441462.918,4471822.8575
+                        441461.59,4471825.98
+                        441460.63,4471828.24
+                        441459.701,4471830.4245
+                        441457.588,4471835.3935
+                        441456.3765,4471838.243
+                        441454.2725,4471843.191
+                        441452.6995,4471846.89
+                        441452.547,4471847.2485
+                        441451.6105,4471849.4505
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>14189</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711G</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441491.84</wfsdgc:COORX>
+       <wfsdgc:COORY>4471826.18</wfsdgc:COORY>
+       <wfsdgc:VIA>859</wfsdgc:VIA>
+       <wfsdgc:NUMERO>15</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>A</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>5126</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20020930</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>1281234</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441448.0105,4471775.09 441535.65,4471880.1685</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="1498255">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441772.1795,4471558.5835
+                        441774.56,4471552.94
+                        441787.01,4471557.86
+                        441797.33,4471562.06
+                        441808,4471566.39
+                        441812.77,4471568.33
+                        441823.47,4471572.84
+                        441824.56,4471573.3
+                        441824.17,4471585.06
+                        441824.69,4471585.25
+                        441824.92,4471589.96
+                        441825.5,4471601.63
+                        441825.13,4471607.19
+                        441823.62,4471630.12
+                        441813.55,4471641.07
+                        441803.13,4471723.48
+                        441801.13,4471737.8
+                        441799.69,4471750
+                        441797.39,4471769.54
+                        441796.32,4471786.9
+                        441795.67,4471788.46
+                        441759.01,4471877.27
+                        441752.15,4471891.9
+                        441752.08,4471892.08
+                        441751.23,4471894.33
+                        441747.38,4471903.16
+                        441747.38,4471903.17
+                        441747.08,4471903.92
+                        441746.85,4471904.69
+                        441746.62,4471905.88
+                        441746.57,4471906.28
+                        441746.54,4471906.68
+                        441746.58,4471908.29
+                        441746.63,4471908.69
+                        441746.78,4471909.48
+                        441747.12,4471910.64
+                        441747.46,4471911.46
+                        441748.13,4471913.24
+                        441748.45,4471914.13
+                        441748.75,4471915.03
+                        441749.03,4471915.94
+                        441749.56,4471917.77
+                        441750.02,4471919.61
+                        441750.42,4471921.46
+                        441750.59,4471922.4
+                        441750.9,4471924.27
+                        441751.03,4471925.21
+                        441751.24,4471927.1
+                        441751.38,4471928.99
+                        441751.43,4471929.94
+                        441751.47,4471930.89
+                        441751.48,4471931.84
+                        441751.47,4471933.74
+                        441751.44,4471934.68
+                        441751.33,4471936.58
+                        441751.29,4471937.43
+                        441751.22,4471938.38
+                        441751.15,4471939.34
+                        441751.05,4471940.29
+                        441750.94,4471941.24
+                        441750.81,4471942.19
+                        441750.67,4471943.14
+                        441750.51,4471944.08
+                        441750.32,4471945.34
+                        441749.95,4471946.89
+                        441750,4471947.5
+                        441755.78,4471949.55
+                        441759.11,4471944.66
+                        441793.85,4471894.88
+                        441799.92,4471886.28
+                        441807.15,4471873.76
+                        441815.17,4471857.72
+                        441820.72,4471847.28
+                        441828.95,4471828.92
+                        441833.76,4471817.06
+                        441838.64,4471803.74
+                        441842.92,4471790.76
+                        441847.44,4471776.46
+                        441850.96,4471762.16
+                        441853.76,4471750
+                        441854.36,4471747.39
+                        441856.63,4471736.31
+                        441858.26,4471726.8
+                        441860.07,4471714.83
+                        441861.34,4471704.86
+                        441862.35,4471694.24
+                        441863.08,4471686.35
+                        441863.67,4471678.29
+                        441864.05,4471668.51
+                        441864.2,4471655.26
+                        441864.21,4471645.64
+                        441864.09,4471627.79
+                        441863.97,4471611.87
+                        441863.68,4471598.68
+                        441863.33,4471593.6
+                        441862.07,4471580.07
+                        441860.58,4471565.83
+                        441857.89,4471537.67
+                        441855.45,4471510.92
+                        441854.25,4471500
+                        441852.82,4471489.22
+                        441852.32,4471484.4
+                        441753.31,4471376.15
+                        441750.87,4471373.48
+                        441751.24,4471371.58
+                        441714.71,4471331.45
+                        441692.63,4471306.46
+                        441671.25,4471282.08
+                        441670.9,4471282.89
+                        441670.26,4471284.39
+                        441658.6,4471314.59
+                        441658.57,4471314.67
+                        441655.79,4471321.74
+                        441651.63,4471332.33
+                        441646.76,4471344.72
+                        441644.65,4471349.46
+                        441732.23,4471441.94
+                        441742.83,4471485.3
+                        441745.53,4471497.02
+                        441746.19,4471500
+                        441757.73,4471551.94
+                        441772.04,4471558.52
+                        441772.1795,4471558.5835
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+                <gml:innerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441760.49,4471455.22
+                        441764.73,4471459.57
+                        441761.11,4471463.04
+                        441757.56,4471466.44
+                        441757.49,4471466.51
+                        441753.88,4471469.98
+                        441750.35,4471473.36
+                        441749.41,4471472.38
+                        441743.72,4471466.44
+                        441743.39,4471466.1
+                        441746.86,4471462.73
+                        441749.41,4471460.26
+                        441750.46,4471459.25
+                        441754.05,4471455.76
+                        441756.87,4471453.03
+                        441757.64,4471452.29
+                        441751.32,4471445.78
+                        441750.5,4471444.94
+                        441749.41,4471443.81
+                        441749.06,4471443.45
+                        441748.94,4471443.33
+                        441747.12,4471441.45
+                        441746.94,4471441.27
+                        441739.84,4471433.95
+                        441739.07,4471434.69
+                        441737.81,4471435.91
+                        441732.78,4471440.78
+                        441729.26,4471437.14
+                        441725.34,4471433.1
+                        441721.51,4471429.14
+                        441717.64,4471425.14
+                        441719.37,4471423.48
+                        441709.1,4471412.72
+                        441707.29,4471414.47
+                        441703.05,4471409.79
+                        441712.45,4471400.85
+                        441711.48,4471399.85
+                        441711.25,4471399.62
+                        441710.51,4471398.85
+                        441707.99,4471401.32
+                        441702.15,4471395.39
+                        441701.28,4471394.48
+                        441699.92,4471393.04
+                        441697.9,4471390.92
+                        441693.49,4471386.44
+                        441690.43,4471383.33
+                        441694.75,4471379.08
+                        441698.87,4471375.03
+                        441698.11,4471374.25
+                        441694.71,4471370.74
+                        441694.11,4471370.12
+                        441692.62,4471368.59
+                        441690.34,4471366.24
+                        441684.33,4471360.06
+                        441688.2,4471356.3
+                        441692.5,4471352.13
+                        441691.64,4471351.24
+                        441689.22,4471348.73
+                        441688.53,4471348.02
+                        441687.1,4471346.54
+                        441684.88,4471344.26
+                        441677.73,4471336.88
+                        441680.03,4471334.64
+                        441679.27,4471333.86
+                        441676.34,4471330.85
+                        441672.06,4471326.45
+                        441678,4471320.67
+                        441678.2,4471320.48
+                        441680.26,4471318.47
+                        441681.66,4471317.11
+                        441682.42,4471316.37
+                        441689.98,4471309.02
+                        441694.26,4471313.42
+                        441697.95,4471317.21
+                        441690.6,4471324.36
+                        441688.39,4471326.51
+                        441685.88,4471328.95
+                        441686.83,4471329.93
+                        441693.45,4471336.76
+                        441696.13,4471339.53
+                        441697.77,4471341.23
+                        441698.02,4471341.48
+                        441703.17,4471346.79
+                        441704.07,4471345.91
+                        441709.88,4471340.28
+                        441724.57,4471355.42
+                        441713.78,4471365.89
+                        441699.84,4471351.54
+                        441699.08,4471350.75
+                        441698.9,4471350.93
+                        441695.93,4471353.82
+                        441695.01,4471354.71
+                        441698.88,4471358.7
+                        441699.49,4471359.32
+                        441701.44,4471361.32
+                        441703.27,4471363.2
+                        441709.86,4471370
+                        441705.56,4471374.17
+                        441702.53,4471377.12
+                        441701.69,4471377.93
+                        441703.67,4471379.96
+                        441704.51,4471379.13
+                        441713.42,4471370.32
+                        441716.75,4471373.78
+                        441728.03,4471362.4
+                        441739.75,4471374.78
+                        441733.68,4471380.43
+                        441737.41,4471384.27
+                        441739.53,4471386.44
+                        441741.67,4471388.64
+                        441749.41,4471396.59
+                        441749.66,4471396.85
+                        441750.28,4471397.71
+                        441749.41,4471398.53
+                        441744.33,4471403.3
+                        441743.67,4471403.92
+                        441748.22,4471408.6
+                        441749.41,4471409.82
+                        441750.51,4471410.95
+                        441752.7,4471413.2
+                        441759.13,4471419.81
+                        441754.52,4471424.3
+                        441750.62,4471428.1
+                        441751.45,4471428.95
+                        441755.44,4471433.05
+                        441757.82,4471435.51
+                        441759.89,4471437.64
+                        441768.16,4471446.16
+                        441764.02,4471450.18
+                        441759.68,4471454.39
+                        441760.49,4471455.22
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:innerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>18159</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711F</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>Z9</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441836.01</wfsdgc:COORX>
+       <wfsdgc:COORY>4471712.89</wfsdgc:COORY>
+       <wfsdgc:VIA>490</wfsdgc:VIA>
+       <wfsdgc:NUMERO>20</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>36029</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20021218</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>1498255</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441644.65,4471282.08 441864.21,4471949.55</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="1896954">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441603.7,4472633.1
+                        441604.32,4472640.59
+                        441604.92,4472647.9
+                        441608.78,4472651.16
+                        441674.6,4472645.71
+                        441674.78,4472645.7
+                        441700.42,4472643.65
+                        441703.73,4472643.39
+                        441706.5,4472640.01
+                        441707.23,4472639.12
+                        441706.93,4472635.56
+                        441704.28,4472603.86
+                        441701.4,4472569.35
+                        441700.34,4472556.65
+                        441699.83,4472550.57
+                        441699.64,4472548.33
+                        441698.12,4472530.07
+                        441690.6,4472524.86
+                        441674.6,4472526.19
+                        441600.79,4472532.31
+                        441595.6,4472538.75
+                        441601.11,4472603.86
+                        441601.16,4472604.45
+                        441603.7,4472633.1
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>16254</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712F</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441642.55</wfsdgc:COORX>
+       <wfsdgc:COORY>4472578.74</wfsdgc:COORY>
+       <wfsdgc:VIA>5084</wfsdgc:VIA>
+       <wfsdgc:NUMERO>5</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>12194</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20040406</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>1896954</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441595.6,4472524.86 441707.23,4472651.16</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="1929474">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441721.25,4472638.23
+                        441725.04,4472641.45
+                        441820,4472633.89
+                        441823.23,4472630.11
+                        441814.48,4472520.65
+                        441809.15,4472516.03
+                        441717.03,4472523.44
+                        441712.47,4472528.71
+                        441721.25,4472638.23
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>17255</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712F</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>02</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441753.82</wfsdgc:COORX>
+       <wfsdgc:COORY>4472601.27</wfsdgc:COORY>
+       <wfsdgc:VIA>923</wfsdgc:VIA>
+       <wfsdgc:NUMERO>26</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>12068</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20040421</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>1929474</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441712.47,4472516.03 441823.23,4472641.45</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2027975">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441422.36,4472220.76
+                        441443.57,4472218.6
+                        441448.72,4472218.08
+                        441448.78,4472218.07
+                        441457.32,4472205.39
+                        441444.95,4472196.92
+                        441437.86,4472197.76
+                        441434.49,4472202.75
+                        441422.36,4472220.76
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>13227</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>06</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441448.6</wfsdgc:COORX>
+       <wfsdgc:COORY>4472204.78</wfsdgc:COORY>
+       <wfsdgc:VIA>6045</wfsdgc:VIA>
+       <wfsdgc:NUMERO>56</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>474</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20040707</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2027975</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441422.36,4472196.92 441457.32,4472220.76</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2111702">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441664.6,4471870.31
+                        441665.57,4471878.04
+                        441665.99,4471881.37
+                        441667.31,4471891.94
+                        441667.71,4471895.21
+                        441669.23,4471907.71
+                        441670.77,4471920.41
+                        441671.16,4471923.6
+                        441672.62,4471935.59
+                        441698.1,4471932.53
+                        441706.89,4471931.48
+                        441716.06,4471930.38
+                        441717.42,4471930.22
+                        441719.43,4471929.98
+                        441721.4,4471929.74
+                        441721.84,4471929.69
+                        441724.81,4471929.33
+                        441727.12,4471929.06
+                        441727.33,4471929.03
+                        441729.05,4471928.82
+                        441733.43,4471928.3
+                        441736.24,4471927.97
+                        441736.96,4471927.87
+                        441739.18,4471927.61
+                        441739.07,4471926.96
+                        441738.83,4471925.56
+                        441738.69,4471924.73
+                        441738.43,4471923.56
+                        441738.21,4471922.53
+                        441737.64,4471920.35
+                        441736.96,4471918.2
+                        441736.35,4471916.56
+                        441736.18,4471916.09
+                        441735.53,4471914.52
+                        441735.4,4471914.2
+                        441735.04,4471913.42
+                        441734.54,4471912.35
+                        441733.6,4471910.53
+                        441732.58,4471908.76
+                        441731.48,4471907.04
+                        441730.3,4471905.37
+                        441729.05,4471903.75
+                        441728.24,4471902.8
+                        441727.73,4471902.19
+                        441727.68,4471902.13
+                        441726.35,4471900.69
+                        441724.89,4471899.26
+                        441723.38,4471897.89
+                        441721.8,4471896.58
+                        441720.17,4471895.35
+                        441719.44,4471894.85
+                        441718.78,4471894.4
+                        441718.49,4471894.2
+                        441716.75,4471893.09
+                        441716.61,4471893
+                        441714.68,4471891.88
+                        441712.69,4471890.85
+                        441710.67,4471889.91
+                        441708.6,4471889.05
+                        441706.95,4471888.34
+                        441706.17,4471888.01
+                        441697.19,4471884.19
+                        441696.31,4471883.81
+                        441694.15,4471882.89
+                        441684.85,4471878.93
+                        441681.39,4471877.46
+                        441673.52,4471874.11
+                        441669.11,4471872.23
+                        441664.6,4471870.31
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>34</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441696.98</wfsdgc:COORX>
+       <wfsdgc:COORY>4471906.42</wfsdgc:COORY>
+       <wfsdgc:VIA>45276</wfsdgc:VIA>
+       <wfsdgc:NUMERO>66</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>2992</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20040914</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2111702</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441664.6,4471870.31 441739.18,4471935.59</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2114291">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441634.5885,4471881.462
+                        441634.5765,4471881.491
+                        441626.06,4471901.68
+                        441620.24,4471915.47
+                        441629.1,4471919.2
+                        441631.08,4471920.04
+                        441653.16,4471929.34
+                        441666.42,4471934.92
+                        441669.11,4471928.5
+                        441671.16,4471923.6
+                        441670.77,4471920.41
+                        441669.23,4471907.71
+                        441667.721,4471895.3
+                        441667.71,4471895.21
+                        441634.5885,4471881.462
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>37</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441648.15</wfsdgc:COORX>
+       <wfsdgc:COORY>4471906.81</wfsdgc:COORY>
+       <wfsdgc:VIA>1374</wfsdgc:VIA>
+       <wfsdgc:NUMERO>5</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1678</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20040922</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2114291</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441620.24,4471881.462 441671.16,4471934.92</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2114292">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441667.31,4471891.94
+                        441665.99,4471881.37
+                        441665.57,4471878.04
+                        441664.6,4471870.31
+                        441644.19,4471861.62
+                        441643.25,4471861.22
+                        441640.44,4471867.58
+                        441635.8,4471878.59
+                        441634.5885,4471881.462
+                        441667.71,4471895.21
+                        441667.31,4471891.94
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>36</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441652.64</wfsdgc:COORX>
+       <wfsdgc:COORY>4471874.63</wfsdgc:COORY>
+       <wfsdgc:VIA>1374</wfsdgc:VIA>
+       <wfsdgc:NUMERO>7</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>647</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20040922</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2114292</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441634.5885,4471861.22 441667.71,4471895.21</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2141216">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441583.32,4472138.26
+                        441573.2505,4472152.7205
+                        441573.16,4472152.85
+                        441570.2,4472157.08
+                        441574.759,4472160.2615
+                        441576.59,4472161.539
+                        441576.75,4472161.6505
+                        441577.994,4472162.5185
+                        441581.506,4472164.969
+                        441582.075,4472165.366
+                        441582.5695,4472165.711
+                        441582.9615,4472165.985
+                        441583.4605,4472166.333
+                        441583.6485,4472166.464
+                        441583.782,4472166.5575
+                        441584.8125,4472167.2765
+                        441585.7695,4472167.944
+                        441586.1115,4472168.1825
+                        441586.279,4472168.2995
+                        441586.792,4472168.6575
+                        441589.5,4472164.76
+                        441590.06,4472163.96
+                        441591.54,4472161.83
+                        441592.03,4472161.13
+                        441592.59,4472160.31
+                        441592.89,4472159.89
+                        441598.99,4472151.11
+                        441607.97,4472138.2
+                        441608.31,4472137.72
+                        441608.87,4472136.9
+                        441609.2,4472136.44
+                        441624.24,4472114.81
+                        441624.56,4472114.35
+                        441625.13,4472113.53
+                        441625.46,4472113.05
+                        441634.49,4472100.06
+                        441640.55,4472091.35
+                        441640.85,4472090.92
+                        441641.4,4472090.12
+                        441641.9,4472089.41
+                        441643.38,4472087.28
+                        441643.94,4472086.48
+                        441646.487,4472082.8145
+                        441646.65,4472082.58
+                        441644.67,4472081.2
+                        441643.63,4472080.47
+                        441642.48,4472079.67
+                        441636.61,4472075.57
+                        441632.84,4472072.94
+                        441630.06,4472071
+                        441626.981,4472075.431
+                        441621.93,4472082.7
+                        441620.21,4472085.17
+                        441615.401,4472092.091
+                        441604.09,4472108.37
+                        441589.11,4472129.93
+                        441584.841,4472136.071
+                        441584.8,4472136.13
+                        441583.32,4472138.26
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>04</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441608.44</wfsdgc:COORX>
+       <wfsdgc:COORY>4472118.33</wfsdgc:COORY>
+       <wfsdgc:VIA>45276</wfsdgc:VIA>
+       <wfsdgc:NUMERO>40</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>2120</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20041122</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2141216</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441570.2,4472071 441646.65,4472168.6575</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2158462">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441502.4,4471914.66
+                        441501.63,4471916.48
+                        441513.78,4471924.89
+                        441518.37,4471928.07
+                        441521.5,4471930.24
+                        441530.97,4471936.79
+                        441536.79,4471940.82
+                        441541.35,4471943.97
+                        441544.46,4471946.13
+                        441553.97,4471952.71
+                        441559.74,4471956.71
+                        441564.26,4471959.84
+                        441574.29,4471966.78
+                        441594.83,4471981
+                        441598.26,4471975.94
+                        441597,4471950.22
+                        441592.65,4471956.41
+                        441582.8,4471949.44
+                        441526.14,4471909.37
+                        441509.62,4471897.68
+                        441506.29,4471905.52
+                        441504.08,4471910.72
+                        441502.4,4471914.66
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15185</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711H</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441551.52</wfsdgc:COORX>
+       <wfsdgc:COORY>4471937.66</wfsdgc:COORY>
+       <wfsdgc:VIA>4859</wfsdgc:VIA>
+       <wfsdgc:NUMERO>18</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>2198</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20050111</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2158462</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441501.63,4471897.68 441598.26,4471981</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2167531">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441324.1405,4472208.243
+                        441321.72,4472208.48
+                        441321.7875,4472209.58
+                        441322.139,4472215.31
+                        441322.286,4472217.7
+                        441322.6215,4472223.17
+                        441322.88,4472227.38
+                        441325.09,4472227.17
+                        441325.87,4472227.097
+                        441327.2695,4472226.9665
+                        441334.72,4472226.2715
+                        441334.95,4472226.25
+                        441340.28,4472225.7495
+                        441340.9,4472225.6915
+                        441359.56,4472223.94
+                        441363.75,4472223.5485
+                        441369.41,4472223.02
+                        441369.72,4472226.14
+                        441383.3,4472224.75
+                        441398.19,4472223.23
+                        441401.8495,4472222.8565
+                        441411.13,4472221.91
+                        441421.97,4472220.8
+                        441422.36,4472220.76
+                        441427.0765,4472213.7575
+                        441434.14,4472203.27
+                        441434.49,4472202.75
+                        441437.166,4472198.7875
+                        441437.86,4472197.76
+                        441444.95,4472196.92
+                        441445.1215,4472197.0375
+                        441447.122,4472198.407
+                        441447.3645,4472198.5735
+                        441457.32,4472205.39
+                        441460.4,4472200.8
+                        441460.63,4472200.45
+                        441461.69,4472198.87
+                        441462.02,4472198.38
+                        441463.08,4472196.79
+                        441468.05,4472189.37
+                        441469.05,4472187.88
+                        441469.31,4472187.5
+                        441466.34,4472182.48
+                        441465.98,4472181.88
+                        441465.26,4472180.65
+                        441464.95,4472180.13
+                        441464.19,4472178.85
+                        441463.89,4472178.35
+                        441460.85,4472173.21
+                        441460.42,4472173.25
+                        441458.64,4472173.42
+                        441441.54,4472175.02
+                        441439.32,4472175.23
+                        441438.75,4472175.28
+                        441436.58,4472175.49
+                        441418.92,4472177.14
+                        441416.71,4472177.35
+                        441416.12,4472177.41
+                        441413.92,4472177.61
+                        441393.34,4472179.54
+                        441391.18,4472179.74
+                        441390.59,4472179.8
+                        441388.41,4472180
+                        441380.27,4472180.77
+                        441379.082,4472180.88
+                        441379.278,4472182.918
+                        441379.321,4472183.363
+                        441379.3275,4472183.4305
+                        441379.369,4472183.86
+                        441379.491,4472185.127
+                        441379.5955,4472186.213
+                        441379.6145,4472186.4085
+                        441379.6595,4472186.8795
+                        441379.6765,4472187.053
+                        441379.705,4472187.3495
+                        441380.232,4472192.82
+                        441380.7,4472197.68
+                        441381.18,4472202.66
+                        441369.45,4472203.808
+                        441367.2405,4472204.0245
+                        441366.6305,4472204.084
+                        441364.45,4472204.2975
+                        441349.81,4472205.7305
+                        441347.6095,4472205.946
+                        441347.0105,4472206.0045
+                        441344.81,4472206.22
+                        441324.1405,4472208.243
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>13227</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712A</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>12</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441409.14</wfsdgc:COORX>
+       <wfsdgc:COORY>4472195.08</wfsdgc:COORY>
+       <wfsdgc:VIA>3282</wfsdgc:VIA>
+       <wfsdgc:NUMERO>19</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>4226</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20050125</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2167531</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441321.72,4472173.21 441469.31,4472227.38</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2184671">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441656.35,4472032.71
+                        441654.42,4472035.5
+                        441653.16,4472037.32
+                        441648.43,4472044.16
+                        441647.4,4472045.65
+                        441640.26,4472055.97
+                        441640.23,4472056.01
+                        441636.83,4472061.3
+                        441636.71,4472061.48
+                        441636.64,4472061.58
+                        441639.43,4472063.52
+                        441642.29,4472065.51
+                        441652.97,4472072.94
+                        441656.02,4472068.55
+                        441657.43,4472066.52
+                        441657.91,4472065.83
+                        441659.34,4472063.78
+                        441659.72,4472063.23
+                        441662.56,4472059.14
+                        441662.94,4472058.6
+                        441664.37,4472056.55
+                        441664.84,4472055.86
+                        441666.25,4472053.83
+                        441672.26,4472045.2
+                        441673.67,4472043.17
+                        441674.15,4472042.48
+                        441675.57,4472040.43
+                        441675.95,4472039.89
+                        441678.8,4472035.79
+                        441679.17,4472035.25
+                        441680.6,4472033.2
+                        441681.08,4472032.51
+                        441682.49,4472030.48
+                        441688.5,4472021.85
+                        441689.91,4472019.82
+                        441690.38,4472019.13
+                        441691.81,4472017.08
+                        441692.19,4472016.54
+                        441695.03,4472012.45
+                        441695.41,4472011.9
+                        441696.84,4472009.85
+                        441697.32,4472009.16
+                        441698.73,4472007.13
+                        441701.78,4472002.74
+                        441691.11,4471995.32
+                        441685.47,4471991.4
+                        441679.52,4471999.72
+                        441679.36,4471999.94
+                        441679.32,4472000
+                        441671.25,4472011.27
+                        441669.11,4472014.26
+                        441668.86,4472014.61
+                        441668.68,4472014.87
+                        441662.27,4472024.15
+                        441660.15,4472027.21
+                        441656.35,4472032.71
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>15217</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4712B</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>06</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441671.58</wfsdgc:COORX>
+       <wfsdgc:COORY>4472027.72</wfsdgc:COORY>
+       <wfsdgc:VIA>45276</wfsdgc:VIA>
+       <wfsdgc:NUMERO>46</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>0</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>1721</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20050228</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2184671</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441636.64,4471991.4 441701.78,4472072.94</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:featureMember>
+    <wfsdgc:PARCELA fid="2617591">
+        <wfsdgc:wfsdgcGeometry>
+            <gml:Polygon srsName="EPSG:23030">
+                <gml:outerBoundaryIs>
+                    <gml:LinearRing>
+                        <gml:coordinates>
+                        441647.99,4471850.19
+                        441715.3,4471878.74
+                        441743.48,4471890.49
+                        441744.32,4471888.48
+                        441769.01,4471829.3
+                        441674.12,4471789.39
+                        441647.99,4471850.19
+                        </gml:coordinates>
+                    </gml:LinearRing>
+                </gml:outerBoundaryIs>
+            </gml:Polygon>
+        </wfsdgc:wfsdgcGeometry>
+       <wfsdgc:MAPA>1</wfsdgc:MAPA>
+       <wfsdgc:DELEGACIO>28</wfsdgc:DELEGACIO>
+       <wfsdgc:MUNICIPIO>900</wfsdgc:MUNICIPIO>
+       <wfsdgc:MASA>17181</wfsdgc:MASA>
+       <wfsdgc:HOJA>VK4711H</wfsdgc:HOJA>
+       <wfsdgc:TIPO>U</wfsdgc:TIPO>
+       <wfsdgc:PARCELA>01</wfsdgc:PARCELA>
+       <wfsdgc:COORX>441687.28</wfsdgc:COORX>
+       <wfsdgc:COORY>4471819.67</wfsdgc:COORY>
+       <wfsdgc:VIA>895</wfsdgc:VIA>
+       <wfsdgc:NUMERO>1</wfsdgc:NUMERO>
+       <wfsdgc:NUMERODUP>A</wfsdgc:NUMERODUP>
+       <wfsdgc:NUMSYMBOL>6</wfsdgc:NUMSYMBOL>
+       <wfsdgc:AREA>6849</wfsdgc:AREA>
+       <wfsdgc:FECHAALTA>20070119</wfsdgc:FECHAALTA>
+       <wfsdgc:FECHABAJA>99999999</wfsdgc:FECHABAJA>
+       <wfsdgc:NINTERNO>&lt;shape&gt;</wfsdgc:NINTERNO>
+       <wfsdgc:SE_ROW_ID>2617591</wfsdgc:SE_ROW_ID>
+        <gml:boundedBy>
+            <gml:Box srsName="EPSG:23030">
+                <gml:coordinates>441647.99,4471789.39 441769.01,4471890.49</gml:coordinates>
+            </gml:Box>
+        </gml:boundedBy>
+    </wfsdgc:PARCELA>
+</gml:featureMember>
+<gml:boundedBy>
+    <gml:Box srsName="EPSG:23030">
+        <gml:coordinates>441305.41,4471282.08 441864.21,4472660.38</gml:coordinates>
+    </gml:Box>
+</gml:boundedBy>
+</wfs:FeatureCollection>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdeeWithoutSchema.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdeeWithoutSchema.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdeeWithoutSchema.gml	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><ResultCollection xmlns="http://www.idee.es/mne" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.idee.es/mne noSchema.xsd">
+	<gml:boundedBy>
+		<gml:Box>
+			<gml:coord>
+				<gml:X>-1.13</gml:X>
+				<gml:Y>42.12</gml:Y>
+			</gml:coord>
+			<gml:coord>
+				<gml:X>-1.13</gml:X>
+				<gml:Y>42.12</gml:Y>
+			</gml:coord>
+		</gml:Box>
+	</gml:boundedBy>
+	<gml:featureMember>
+		<Entidad fid="Entidad.382806">
+			<nombreEntidad>
+				<nombre>Ejea de los Caballeros</nombre>
+				<idioma>und</idioma>
+				<claseNombre>Preferente</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>La Capital de Cinco Villas</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>Segeda</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>Segia</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<nombreEntidad>
+				<nombre>Setia</nombre>
+				<idioma>und</idioma>
+				<claseNombre>No disponible</claseNombre>
+				<estatus>No disponible</estatus>
+				<fuente>Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</fuente>
+			</nombreEntidad>
+			<tipoEntidad>
+				<tipo>Poblaci�</tipo>
+				<catalogoEntidades>Entidades del Nomencl�or Geogr�ico Versi� 16.06, Instituto Geogr�ico Nacional (Espa�)</catalogoEntidades>
+			</tipoEntidad>
+			<posicionEspacial>
+				<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
+					<gml:coordinates cs="," decimal="." ts=" ">-1.13,42.12</gml:coordinates>
+				</gml:Point>
+			</posicionEspacial>
+			<entidadLocal>
+				<provincia>Zaragoza</provincia>
+			</entidadLocal>
+			<entidadLocal>
+				<municipio>Ejea de los Caballeros</municipio>
+			</entidadLocal>
+			<mapa>
+				<serie>MTN25</serie>
+				<hoja>0284-1</hoja>
+			</mapa>
+		</Entidad>
+	</gml:featureMember>
+</ResultCollection>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/Municipis_NOschema.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/Municipis_NOschema.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/Municipis_NOschema.xml	(revision 42196)
@@ -0,0 +1,18591 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<collection xmlns:gml="http://www.opengis.net/gml" >
+<gml:boundedBy><gml:box><gml:coord><gml:X>260422.092189937</gml:X>
+<gml:Y>4488999.69</gml:Y></gml:coord>
+<gml:coord><gml:X>527466.55</gml:X>
+<gml:Y>4748098.29</gml:Y></gml:coord></gml:box></gml:boundedBy>
+<gml:featureMember>
+
+<testtype gid="0">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309440.29,4744357.47 309038.81,4744668.04 308787.49,4745676.36 310118.86,4746562.93 310363.24,4747445.11 311109.89,4747560.09 312741.84,4748098.29 313455.53,4747914.19 313826.07,4747983.22 314751.32,4747409.2 315101.36,4746665.19 314669.21,4745891.07 314634.08,4745328.8 314430.04,4744509.57 314178.03,4744080.86 309440.29,4744357.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18384038.19425]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[1]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[1]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25045]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bausen]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bausen]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bausen]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bausen]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="1">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">314430.04,4744509.57 314634.08,4745328.8 314669.21,4745891.07 315101.36,4746665.19 317122.75,4746008.47 318004.34,4745457.54 318890.73,4745274.03 319860.92,4745541.8 320639.2,4745578.13 322813.35,4744365.58 323583.05,4744299.59 324975.85,4743962.64 326070.88,4742760.3 326587.86,4742637.55 326392.02,4741652.23 325763.39,4741313.92 325343.52,4741402.86 324593.77,4741210.82 323978.03,4740987.99 321199.74,4740350.31 320292.41,4740342.27 319951.38,4739931.83 318604.31,4740108.25 317514.17,4739943.05 317089.18,4740354.69 316360.57,4740836.23 316137.18,4741272.24 315324.26,4744131.15 314430.04,4744509.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[48435013.22015]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[2]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[2]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25063]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Canejan]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Canejan]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Canejan]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Canejan]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="2">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309555.16,4741724.57 309456.87,4742558.58 309226,4743324.07 309531.05,4744257.86 309440.29,4744357.47 314178.03,4744080.86 314430.04,4744509.57 315324.26,4744131.15 316137.18,4741272.24 316360.57,4740836.23 317089.18,4740354.69 317514.17,4739943.05 316545.36,4739602.18 315997.31,4739623.4 315579.74,4739813.9 315072.26,4740435.51 313117.58,4740637.59 312248.15,4740932.47 311870.79,4741594.82 311038.29,4741422.71 309555.16,4741724.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22428481.6634]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[3]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[3]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25121]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="3">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333196.98,4718981.11 332185.19,4718753.81 332106.71,4717943.53 331374.39,4717441.16 330884.3,4717476.24 330005.33,4717656.35 329182.59,4718148.39 329021.31,4718852.89 328547.29,4719565.53 327890.83,4719871 327402.9,4720022.82 327354.64,4720137.09 327365.23,4720473.45 327514.14,4720821.97 327589.85,4721364.41 327189.9,4721696.44 326501.82,4722007.93 325996.98,4722360.27 325709.69,4721635.62 324351.54,4721138.13 323736.98,4720703.33 323278.54,4720125.43 322584.88,4719710.9 321775.49,4719416.44 321355.59,4720280.78 320719.96,4720864.02 320160.89,4721058.58 320036.06,4722170.66 318847.94,4723243.81 319414.81,4723933.58 320890.06,4723937.04 323023.46,4724405.08 323177.28,4725477.99 324171.81,4726941.51 323732.86,4726859.45 323343.71,4726899.52 323061.98,4727221.74 323322.41,4729764.21 322534.44,4730082.95 322179.97,4731463.57 323222.69,4732234.33 324042.39,4732671.05 325598.5,4733930.77 326041.73,4734526.57 326255.36,4735077.8 327078.13,4735779.67 328224.5,4737067.21 328761.66,4737418.62 328677.08,4738103.02 327692.24,4739580.18 327655.11,4739939.06 327471.8,4740459.2 326884.64,4740991.67 326392.02,4741652.23 326587.86,4742637.55 327935.41,4741782.56 328787.43,4741103.16 329258.57,4740555.02 329782.5,4740220.2 330865.06,4739629.76 331204.2,4739601.47 331336.17,4740222.43 332047.17,4740804.87 333243.25,4741428.87 333812.723,4741041.861 334060.68,4740685.57 334609.598,4740315.299 334717.61,4739851.73 335148.661,4739307.486 335558.72,4739173.79 336927.61,4739712.99 338711.9,4739092.96 339589.24,4739124.24 339349.89,4738456.74 338833.42,4737544.02 338847.11,4736585.42 338740.72,4735946.67 339099.51,4735825.31 338965.37,4735476.9 338679.9,4733953.77 338586.87,4733098.18 338074.64,4732488.05 338581.75,4731002.85 337386.89,4730666.81 336798.51,4731077.87 335945.95,4730047.98 334762.41,4729615.15 334150.98,4728808.79 335169.89,4727769.05 334763.56,4727109.9 334021.08,4724183.95 333873.76,4724164.85 333594.19,4723024.44 333183.8,4722303.41 332932.05,4721526.89 332702.9,4721162.19 333012.81,4720379.59 333494,4720301.61 333196.98,4718981.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[255546818.15501]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[4]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[4]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25025]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Naut Aran]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Salardu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Naut Aran]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Salard£]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="4">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">308859.2,4735843.54 308349.79,4736154.99 306850.25,4736409.43 307843.94,4737476.88 308480.38,4738026.85 309196.63,4738531.01 308469.01,4738890.12 307665.36,4739529.1 308078.27,4740079.81 308642.55,4741101.07 309555.16,4741724.57 311038.29,4741422.71 311870.79,4741594.82 312248.15,4740932.47 313117.58,4740637.59 315072.26,4740435.51 315579.74,4739813.9 315997.31,4739623.4 316358.98,4739377.73 316383.21,4739002.54 316778.6,4738655.83 316182.21,4738157.71 315624.95,4738673.54 313180.92,4738909.75 312689.17,4738160.46 311563.09,4738140.22 311436.4,4737641.52 311151.02,4737341.31 311329.47,4736264 308859.2,4735843.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27858225.74485]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[5]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[5]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25059]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bossost]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bossost]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Boss•st]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Boss•st]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="5">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">320160.89,4721058.58 318996.07,4720613.67 317077.25,4720209.01 316128.18,4720368.32 315294.42,4720616.93 314859.54,4720481.07 313591.4,4720806.06 312537.18,4721380.89 311505.56,4722107.54 311404.91,4724097.31 311143.18,4725761.2 310533.54,4726150.76 309942.27,4726797.58 309368.77,4728254.61 308906.92,4728427.1 308409.21,4729349.81 308881.43,4729285.73 309062.723,4729162.955 309684.75,4729302.22 311440.47,4728997 312462.74,4728964.59 312654.69,4730235.14 314076.01,4732671.68 314520.46,4732667.74 314554.99,4733353.97 314382.82,4733810.91 315647.63,4734757.41 315679.6,4735127.7 316353.75,4735497.35 317399.45,4737385.96 317906.17,4739026.96 317924.14,4739385.3 317514.17,4739943.05 318604.31,4740108.25 319951.38,4739931.83 320292.41,4740342.27 321199.74,4740350.31 323978.03,4740987.99 324593.77,4741210.82 325343.52,4741402.86 325763.39,4741313.92 326392.02,4741652.23 326884.64,4740991.67 327471.8,4740459.2 327655.11,4739939.06 327692.24,4739580.18 328677.08,4738103.02 328761.66,4737418.62 328224.5,4737067.21 327078.13,4735779.67 326255.36,4735077.8 326041.73,4734526.57 325598.5,4733930.77 324042.39,4732671.05 323222.69,4732234.33 322179.97,4731463.57 322534.44,4730082.95 323322.41,4729764.21 323061.98,4727221.74 323343.71,4726899.52 323732.86,4726859.45 324171.81,4726941.51 323177.28,4725477.99 323023.46,4724405.08 320890.06,4723937.04 319414.81,4723933.58 318847.94,4723243.81 320036.06,4722170.66 320160.89,4721058.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[211895839.53091]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[6]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[6]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25243]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vielha e Mijaran]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vielha]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vielha e Mijaran]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vielha]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="6">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">316182.21,4738157.71 316778.6,4738655.83 316383.21,4739002.54 316358.98,4739377.73 315997.31,4739623.4 316545.36,4739602.18 317514.17,4739943.05 317924.14,4739385.3 317906.17,4739026.96 317399.45,4737385.96 316353.75,4735497.35 315679.6,4735127.7 314906.66,4734940.03 312793.1,4735373.7 312440.31,4734953.45 311496.78,4734356.42 310558.56,4733821.2 310446.91,4734314.21 310089.92,4734623.08 310728.99,4735178.34 311815.71,4735749.55 311771.91,4735988.18 311849.43,4736199.12 312650.91,4735571.67 314361.56,4737440.44 315305,4737625.57 316182.21,4738157.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310144.06,4732888.18 309679.44,4733601.67 309410.91,4733742.56 310558.56,4733821.2 310845.43,4733652.36 311063.33,4732985.48 310144.06,4732888.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[15134392.7372]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[7]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[7]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25247]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilamos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilamos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilam•s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilam•s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="7">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347169.96,4723280.99 346015.32,4723181.52 345381.35,4723029.51 345302.03,4722780.15 345775.26,4722218.31 345977.74,4721638.84 345535.97,4721669.56 345256.11,4721221.94 345781.473,4719854.361 344117.411,4719159.049 344343.973,4719541.861 344095.3,4719630.03 343349.31,4719043.64 342876.69,4718338.52 342587.88,4717745.08 341936.3,4717668.12 339081.61,4718318.86 338583.02,4718297.03 337827.52,4717917.29 337236.41,4717717.96 336589.24,4718191.43 336734.59,4718828.26 336393.04,4719198.5 335858.98,4719295.85 335260.71,4719631.29 334296.19,4719455.92 333196.98,4718981.11 333494,4720301.61 333012.81,4720379.59 332702.9,4721162.19 332932.05,4721526.89 333183.8,4722303.41 333594.19,4723024.44 333873.76,4724164.85 334021.08,4724183.95 334763.56,4727109.9 335169.89,4727769.05 334150.98,4728808.79 334762.41,4729615.15 335945.95,4730047.98 336798.51,4731077.87 337386.89,4730666.81 338581.75,4731002.85 338074.64,4732488.05 338586.87,4733098.18 338679.9,4733953.77 338965.37,4735476.9 339099.51,4735825.31 338740.72,4735946.67 338847.11,4736585.42 338833.42,4737544.02 339349.89,4738456.74 339589.24,4739124.24 340073.96,4738885.61 340231.01,4738595.28 342734.57,4739122.8 343047.23,4739250.61 343388.72,4738578.35 343890.58,4738040.97 345437.1,4737172.65 345761.23,4736631.65 346444.12,4736047.35 347135.16,4735101 347214.39,4733697.21 347358.09,4733184.05 347409.91,4732407.54 348345.31,4731851.74 348888,4731145.83 349438.07,4730611.2 350294.55,4730261.92 348709.3,4728480.34 348053.23,4727928.13 347044.55,4727505.62 346526.9,4726508.78 345996.75,4725641.27 346806.69,4724178.59 347086.35,4723408.74 347169.96,4723280.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[218963027.07837]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[8]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[8]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25024]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alt Aneu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Valencia d'Aneu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alt ·neu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[ValŠncia d'·neu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="8">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310089.92,4734623.08 309145.35,4734601.18 308835.12,4735140.49 308859.2,4735843.54 311329.47,4736264 311151.02,4737341.31 311436.4,4737641.52 311563.09,4738140.22 312689.17,4738160.46 313180.92,4738909.75 315624.95,4738673.54 316182.21,4738157.71 315305,4737625.57 314361.56,4737440.44 312650.91,4735571.67 311849.43,4736199.12 311771.91,4735988.18 311815.71,4735749.55 310728.99,4735178.34 310089.92,4734623.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11533432.33595]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[9]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[9]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25031]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arres de Jos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arres de Jos]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="9">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309684.75,4729302.22 309557.73,4729928.62 309846.33,4730680.54 310302.32,4731306.25 309586.01,4732522.82 310144.06,4732888.18 311063.33,4732985.48 310845.43,4733652.36 310558.56,4733821.2 311496.78,4734356.42 312440.31,4734953.45 312793.1,4735373.7 314906.66,4734940.03 315679.6,4735127.7 315647.63,4734757.41 314382.82,4733810.91 314554.99,4733353.97 314520.46,4732667.74 314076.01,4732671.68 312654.69,4730235.14 312462.74,4728964.59 311440.47,4728997 309684.75,4729302.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309410.91,4733742.56 309120.85,4734511.59 309145.35,4734601.18 310089.92,4734623.08 310446.91,4734314.21 310558.56,4733821.2 309410.91,4733742.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[21748622.9271]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[10]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[10]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25057]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[39]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bordes, es]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bordes, es]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[B•rdes, es]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[B•rdes, es]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="10">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360209.02,4718397.42 359483.34,4718455.64 358202.04,4718321.09 356779.09,4718913.68 356454.6,4719003.18 356338.39,4719268.02 355320.68,4719369.71 354510.23,4720078.23 354164.45,4720001.37 354020.77,4721650.86 354329.61,4722379.29 353672.63,4723014.23 353635.33,4723366.9 352562.15,4725046.41 353091.06,4725502.73 353426.21,4726017.91 352699.13,4726720.64 351933.21,4726841.59 351810.37,4727102.55 351893.18,4728269.81 351280.92,4728225.72 350608.88,4729194.97 350323.06,4730262.83 351011.54,4730780.86 351958.48,4731229.09 353385.4,4731563.79 354300.64,4731631.88 355084.88,4732236.44 356124.43,4731894.38 356854.07,4731142.62 357063.72,4730800.92 357753.11,4730824.18 358300.13,4731152.35 359074.46,4731002.07 359383.98,4730739.65 360643.4,4731236.63 362308.96,4731239.87 363306.05,4731757.7 363784.23,4731569.17 364193.06,4731134.34 365616.62,4731211.22 365496.96,4730585.15 365186.29,4729863.37 365258.25,4729061.45 366090.92,4728450.97 367370.14,4728143.43 368109.61,4727367.33 368027.63,4726303.67 367929.4,4725512.28 367951.7,4725476.37 366755.26,4725256.54 366365.84,4724559.37 365441.87,4724142.67 365109.7,4723496.84 363885.28,4723018.88 363512.33,4723404.1 362023.43,4723149.66 361087.65,4721865.69 360569.66,4720807.69 360876.43,4719715.9 360209.02,4718397.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[147112539.06306]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[11]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[11]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25123]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Lladorre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lladorre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lladorre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lladorre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="11">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">342580.56,4717635.71 343078.348,4717924.674 343883.036,4718151.236 344063.12,4718348.99 344648.661,4718627.799 344795.97,4718954.44 344570.536,4719010.611 345320.536,4719448.111 345930.49,4719628.5 346468.973,4718971.549 346640.848,4718698.111 346789.286,4718260.611 346798.83,4718614.92 346703.348,4719143.424 346758.036,4719448.111 346557.37,4719709.64 346651.69,4720368.01 347453.4,4720188.45 347407.43,4721725.65 347313,4722995.72 347169.96,4723280.99 347086.35,4723408.74 346806.69,4724178.59 345996.75,4725641.27 346526.9,4726508.78 347044.55,4727505.62 348053.23,4727928.13 348709.3,4728480.34 350294.55,4730261.92 350323.06,4730262.83 350608.88,4729194.97 351280.92,4728225.72 351893.18,4728269.81 351810.37,4727102.55 351933.21,4726841.59 352699.13,4726720.64 353426.21,4726017.91 353091.06,4725502.73 352562.15,4725046.41 352070.39,4725045.03 351658.14,4723497.58 351604.23,4721807.49 351250.64,4721502.4 350896.23,4721003.61 351209.5,4720668.93 351726.82,4719541.5 350791.57,4718726.83 350697.74,4718173.27 351040.56,4717554.23 351466.99,4715970.3 350626.47,4714296.19 350897.92,4714046.7 352082.84,4713350.45 352487.05,4712352.61 353209.86,4711325.73 351149.06,4709405.96 350631.24,4710007.53 349660.47,4710425.62 347554.3,4710239.45 346399.47,4709950.44 345320.56,4709170.28 345183.56,4709010.6 344895.53,4708993.88 343998.02,4708281.9 343297.84,4708617.81 342827.25,4708797.65 342466.19,4709544.8 347144.5,4714095.37 347501.04,4713975.44 347897.43,4714012.68 347820.89,4714813.4 347667.1,4715180.01 347069.91,4716893.72 345183.35,4716267.37 344088.68,4716359.95 342580.56,4717635.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[108723478.91171]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[12]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[12]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25903]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Guingueta d'Aneu, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guingueta d'Aneu, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Guingueta d'·neu, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Guingueta d'·neu, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="12">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355838.27,4710485.14 356061.87,4711545.43 356729.34,4713241.06 357756.69,4713874.2 358177.59,4714299.82 359945.19,4714529.92 360657.02,4715443.51 360071.24,4716927.31 360232.64,4717523.43 360209.02,4718397.42 360876.43,4719715.9 360569.66,4720807.69 361087.65,4721865.69 362023.43,4723149.66 363512.33,4723404.1 363885.28,4723018.88 365109.7,4723496.84 365441.87,4724142.67 366365.84,4724559.37 366755.26,4725256.54 367951.7,4725476.37 368887.8,4725260.9 369445.33,4724119.92 370061.67,4723887.29 370110.5,4722743.19 370192.86,4721957.07 370757.53,4720324.21 371152.85,4719901.77 371236.94,4719398.52 371501.89,4718893.09 372029.55,4718118.11 372391.05,4718082.17 371677.31,4716676.4 371043.26,4716404.09 371097.97,4715603.55 371955.56,4714733.84 372325.56,4714450.29 372120.81,4713825.35 370656.36,4712934.64 370283.16,4711772.16 369841.91,4710652.33 369433.56,4710044.62 368480.65,4709681.73 367925.23,4708962.41 366797.75,4708330.29 366354.16,4708741.77 365703.12,4708921.33 364912.45,4708803.43 364942.88,4708261.47 364378.28,4707914.75 362508.78,4707629.72 360439.42,4707934.3 358438.79,4708271.25 357189.23,4708692.17 357131.38,4708741.08 356961.9,4709327.84 356297.55,4710398.08 355838.27,4710485.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[182810154.57809]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[13]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[13]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25017]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alins]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alins]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alins]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alins]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="13">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355838.27,4710485.14 355523.87,4710200.89 354893.64,4710684.07 353519.35,4709842.19 353209.86,4711325.73 352487.05,4712352.61 352082.84,4713350.45 350897.92,4714046.7 350626.47,4714296.19 351466.99,4715970.3 351040.56,4717554.23 350697.74,4718173.27 350791.57,4718726.83 351726.82,4719541.5 351209.5,4720668.93 350896.23,4721003.61 351250.64,4721502.4 351604.23,4721807.49 351658.14,4723497.58 352070.39,4725045.03 352562.15,4725046.41 353635.33,4723366.9 353672.63,4723014.23 354329.61,4722379.29 354020.77,4721650.86 354164.45,4720001.37 354510.23,4720078.23 355320.68,4719369.71 356338.39,4719268.02 356454.6,4719003.18 356779.09,4718913.68 356259.91,4717787.13 355452.43,4717976.3 354313.38,4717874.64 354199.93,4716980.42 355296.66,4717027.82 355685.55,4716732.63 356593.44,4716231.24 357149.53,4715237.39 358177.59,4714299.82 357756.69,4713874.2 356729.34,4713241.06 356061.87,4711545.43 355838.27,4710485.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[55889417.52631]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[14]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[14]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25901]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vall de Cardos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ribera de Cardos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vall de Card¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ribera de Card¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="14">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">342587.88,4717745.08 342876.69,4718338.52 343349.31,4719043.64 344095.3,4719630.03 344343.973,4719541.861 344117.411,4719159.049 345781.473,4719854.361 345256.11,4721221.94 345535.97,4721669.56 345977.74,4721638.84 345775.26,4722218.31 345302.03,4722780.15 345381.35,4723029.51 346015.32,4723181.52 347169.96,4723280.99 347313,4722995.72 347407.43,4721725.65 347453.4,4720188.45 346651.69,4720368.01 346557.37,4719709.64 346758.036,4719448.111 346703.348,4719143.424 346798.83,4718614.92 346789.286,4718260.611 346640.848,4718698.111 346468.973,4718971.549 345930.49,4719628.5 345320.536,4719448.111 344570.536,4719010.611 344795.97,4718954.44 344648.661,4718627.799 344063.12,4718348.99 343883.036,4718151.236 343078.348,4717924.674 342580.56,4717635.71 342587.88,4717745.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8583405.40512]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[15]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[15]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25086]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Esterri d'Aneu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Esterri d'Aneu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Esterri d'·neu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Esterri d'·neu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="15">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">321775.49,4719416.44 322584.88,4719710.9 323278.54,4720125.43 323736.98,4720703.33 324351.54,4721138.13 325709.69,4721635.62 325996.98,4722360.27 326501.82,4722007.93 327189.9,4721696.44 327589.85,4721364.41 327514.14,4720821.97 327365.23,4720473.45 327354.64,4720137.09 327402.9,4720022.82 327890.83,4719871 328547.29,4719565.53 329021.31,4718852.89 329182.59,4718148.39 330005.33,4717656.35 330884.3,4717476.24 331226.89,4716630.79 331468.33,4716436.49 332562.25,4716429.49 333455.42,4715560.2 333685.39,4713294.36 333558.36,4713257.56 332947.97,4712661.37 332643.43,4712212.15 332226.68,4711884.41 332392.11,4711148.04 332008.05,4710633.92 331283.87,4710235.44 331292.37,4709571.09 330196.6,4709386.96 329934.28,4708902.19 329278.5,4708016.59 329266.2,4707608.28 329523.87,4706775.87 329264.38,4705889.59 327828.94,4705503.11 326852.11,4705158.87 325871.15,4703334.62 325632.75,4703212.95 324716.1,4703381.35 324179.28,4702831.55 323921.55,4702766.14 323860.11,4702748.22 322325.12,4703426.68 321543.24,4703530.47 320580.53,4703103.7 319601.26,4703757.38 317255.84,4704083.71 316571.26,4703535.09 315884.46,4703949.56 315122.85,4705485.15 315125.222,4705912.955 315265.847,4706170.767 315171.3,4706851.7 314849.14,4707169.71 314425.48,4707495.97 314420.81,4707839.72 314764.86,4708690.41 315760.14,4708571.89 316520.34,4709992.91 316713.85,4710974.42 316478,4711563.93 317490.68,4712802.36 318537.92,4713114.87 318944.22,4713345.36 318801.76,4714966.17 319346.36,4715122.62 319028.28,4716106.54 319172.5,4716761.87 319589.76,4717594.54 320228.34,4717953.26 320625.87,4718247.3 321800.73,4718083.55 321775.49,4719416.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[220401750.87844]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[16]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[16]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25043]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[05]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vall de Boi, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Barruera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vall de Bo¡, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Barruera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="16">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">321775.49,4719416.44 321800.73,4718083.55 320625.87,4718247.3 320228.34,4717953.26 319589.76,4717594.54 319172.5,4716761.87 319028.28,4716106.54 319346.36,4715122.62 318801.76,4714966.17 318944.22,4713345.36 318537.92,4713114.87 317490.68,4712802.36 316478,4711563.93 316713.85,4710974.42 316520.34,4709992.91 315760.14,4708571.89 314764.86,4708690.41 314420.81,4707839.72 314425.48,4707495.97 314849.14,4707169.71 315171.3,4706851.7 315265.847,4706170.767 315125.222,4705912.955 315122.85,4705485.15 313546.63,4703325.02 312448.39,4702932.92 311550.65,4702439.33 311656.48,4703576.69 310349.64,4706436.91 310461.22,4706620.58 310963.84,4706555.06 311083.6,4707455.38 311702.69,4707167.13 312276.93,4706698.82 313580.13,4707757.75 313992.32,4708512 314331.99,4708715.92 313605.2,4709287.66 312872.92,4709645.69 313155.51,4710349.97 313162.24,4711178.79 314100.19,4712590.38 314647.11,4711999.27 315228.88,4711975.49 314642.02,4713041.91 315370.14,4713913.09 315659.13,4715037.01 316162.26,4716316.83 316302.63,4718242.82 317026.61,4719991.81 317077.25,4720209.01 318996.07,4720613.67 320160.89,4721058.58 320719.96,4720864.02 321355.59,4720280.78 321775.49,4719416.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">313931.5,4705891.35 314140.847325549,4705881.70468717 314282.56,4706018.93 314216.12,4706233.65 314042.84,4706344.16 313841.72,4706229.16 313828.347320855,4706037.95468951 313931.5,4705891.35</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[58424438.79338]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[17]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[17]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25245]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[05]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilaller]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilaller]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilaller]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilaller]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="17">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">342580.56,4717635.71 344088.68,4716359.95 345183.35,4716267.37 347069.91,4716893.72 347667.1,4715180.01 347820.89,4714813.4 347897.43,4714012.68 347501.04,4713975.44 347144.5,4714095.37 342466.19,4709544.8 341752.63,4708767.26 341269.79,4708311.99 340472.11,4709224.84 340155.84,4709893.38 340000,4710642.2 338482.17,4710503.8 338022.69,4710084.58 337766.34,4710237.06 337462.42,4711066.48 336899.18,4711860.53 335851.34,4711619.08 334880.28,4713474.24 334223.72,4713429.26 333685.39,4713294.36 333455.42,4715560.2 332562.25,4716429.49 331468.33,4716436.49 331226.89,4716630.79 330884.3,4717476.24 331374.39,4717441.16 332106.71,4717943.53 332185.19,4718753.81 333196.98,4718981.11 334296.19,4719455.92 335260.71,4719631.29 335858.98,4719295.85 336393.04,4719198.5 336734.59,4718828.26 336589.24,4718191.43 337236.41,4717717.96 337827.52,4717917.29 338583.02,4718297.03 339081.61,4718318.86 341936.3,4717668.12 342587.88,4717745.08 342580.56,4717635.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[96113595.7997]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[18]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[18]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25082]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Espot]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Espot]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Espot]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Espot]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="18">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">358177.59,4714299.82 357149.53,4715237.39 356593.44,4716231.24 355685.55,4716732.63 355296.66,4717027.82 354199.93,4716980.42 354313.38,4717874.64 355452.43,4717976.3 356259.91,4717787.13 356779.09,4718913.68 358202.04,4718321.09 359483.34,4718455.64 360209.02,4718397.42 360232.64,4717523.43 360071.24,4716927.31 360657.02,4715443.51 359945.19,4714529.92 358177.59,4714299.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16653286.68895]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[19]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[19]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25087]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Esterri de Cardos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Esterri de Cardos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Esterri de Card¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Esterri de Card¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="19">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">330064.2,4689638.35 329536.69,4690266.36 329717.6,4690441.12 329484.97,4690935.66 329248.93,4691308.27 329236.35,4692036.61 329378.26,4693315.04 329758.74,4693201.9 329441.18,4694363.57 329760.45,4694533.39 329135.95,4694558.21 329336.44,4694690.69 328516.19,4695645.27 329025.68,4696302.29 329562.56,4697216.78 330328.86,4700000 330115.11,4700535.23 329358.38,4701273.95 328786.38,4702116.21 328938.69,4702975.11 329476.21,4704070.04 329966.17,4704555.85 329582.37,4705698.54 329264.38,4705889.59 329523.87,4706775.87 329266.2,4707608.28 329278.5,4708016.59 329934.28,4708902.19 330196.6,4709386.96 331292.37,4709571.09 331283.87,4710235.44 332008.05,4710633.92 332392.11,4711148.04 332226.68,4711884.41 332643.43,4712212.15 332947.97,4712661.37 333558.36,4713257.56 333685.39,4713294.36 334223.72,4713429.26 334880.28,4713474.24 335851.34,4711619.08 336899.18,4711860.53 337462.42,4711066.48 337766.34,4710237.06 338022.69,4710084.58 337849.24,4709333.03 337760.55,4708782.08 338280.85,4708128.99 338322.74,4707716.02 337885.43,4707402.55 337646.49,4706976.67 337781.86,4705647.68 337279.89,4704913.02 337236.38,4703307.58 337356.13,4702318.14 337046.36,4700379.31 338302.87,4698880.91 338678.25,4699063.73 339104.94,4698264.66 337801.02,4697864.15 337406.79,4696216.98 336767.79,4695668.48 335966.19,4695230.02 335879.65,4694427.15 335534.36,4693933.75 335202.01,4692664.39 334919.17,4692106.96 334797.95,4690777.34 334046.66,4690173.61 333801.57,4689473.73 332177.92,4689644.86 331739.57,4689132.74 331645.27,4688588.59 331701.86,4688129.21 330669.54,4688619.98 330064.2,4689638.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[165786408.27481]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[20]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[20]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25227]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torre de Cabdella, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torre de Cabdella, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torre de Cabdella, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torre de Cabdella, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="20">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">356715.09,4701646.56 356329.48,4700679.57 356509.66,4698754.6 355307.7,4698345.44 354764.12,4698901.91 354276.9,4699190.63 353624.83,4698967.13 353721.69,4700479.88 353523.68,4701329.99 353513.95,4702801.83 352921.67,4702272.62 352481.09,4701953.38 352268.6,4702911.44 351822.46,4703399.48 351038.11,4703324.72 350400.84,4703106.75 348979.18,4704799.67 348770.1,4705134.11 347124.83,4704965.75 346193,4705931.16 344987.95,4707925.17 345183.56,4709010.6 345320.56,4709170.28 346399.47,4709950.44 347554.3,4710239.45 349660.47,4710425.62 350631.24,4710007.53 351149.06,4709405.96 353209.86,4711325.73 353519.35,4709842.19 353459.75,4709701.62 353426.59,4708992.28 353258.91,4707989.23 353766.57,4707378.7 354431.91,4706957.18 354618.37,4706535.52 355488.94,4705115.78 355909.91,4704338.94 356064.98,4703247.75 356218.11,4701811.17 356715.09,4701646.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[68119868.8143]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[21]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[21]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25126]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llavorsi]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llavorsi]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llavors¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llavors¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="21">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354431.91,4706957.18 353766.57,4707378.7 353258.91,4707989.23 353426.59,4708992.28 353459.75,4709701.62 353519.35,4709842.19 354893.64,4710684.07 355523.87,4710200.89 355838.27,4710485.14 356297.55,4710398.08 356961.9,4709327.84 357131.38,4708741.08 356632.21,4708230.77 354550.98,4707887.08 354431.91,4706957.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8570738.0595]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[22]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[22]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25221]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tirvia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tirvia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[T¡rvia]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[T¡rvia]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="22">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">341269.79,4708311.99 342210.55,4705981.24 342743.07,4705349.34 342236.55,4704211.94 343506.49,4703508.48 344109.83,4703112.18 344574.6,4702387.24 344860.96,4702130.67 344879.8,4701640.77 345436.97,4701357.98 346573.72,4700890.04 346505.92,4700637.31 346189.8,4700745.22 346141,4699168.4 346533.77,4699767.88 347854.52,4699604.23 349059.49,4698764.17 351822.54,4697945.98 352320.93,4697345.26 351540.77,4697784.29 349989.53,4697035.91 348812.46,4696793.88 347401.25,4696358.21 346338.04,4695342.22 345818.19,4694982.95 345384.87,4694349.49 344867.33,4693757.09 344525.63,4692873.15 343860.67,4693178.29 342333.67,4694869.14 341218.18,4695791.99 340289.66,4696296.07 339201.8,4697345.51 339104.94,4698264.66 338678.25,4699063.73 338302.87,4698880.91 337046.36,4700379.31 337356.13,4702318.14 337236.38,4703307.58 337279.89,4704913.02 337781.86,4705647.68 337646.49,4706976.67 337885.43,4707402.55 338322.74,4707716.02 338280.85,4708128.99 337760.55,4708782.08 337849.24,4709333.03 338022.69,4710084.58 338482.17,4710503.8 340000,4710642.2 340155.84,4709893.38 340472.11,4709224.84 341269.79,4708311.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[104647426.20816]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[23]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[23]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25209]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sort]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sort]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sort]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sort]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="23">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">341269.79,4708311.99 341752.63,4708767.26 342466.19,4709544.8 342827.25,4708797.65 343297.84,4708617.81 343998.02,4708281.9 344895.53,4708993.88 345183.56,4709010.6 344987.95,4707925.17 346193,4705931.16 347124.83,4704965.75 348770.1,4705134.11 348979.18,4704799.67 350400.84,4703106.75 351038.11,4703324.72 351822.46,4703399.48 352268.6,4702911.44 352481.09,4701953.38 352921.67,4702272.62 353513.95,4702801.83 353523.68,4701329.99 353721.69,4700479.88 353624.83,4698967.13 353829.08,4697821.98 353586.52,4697557.47 352784.22,4696978.65 352320.93,4697345.26 351822.54,4697945.98 349059.49,4698764.17 347854.52,4699604.23 346533.77,4699767.88 346141,4699168.4 346189.8,4700745.22 346505.92,4700637.31 346573.72,4700890.04 345436.97,4701357.98 344879.8,4701640.77 344860.96,4702130.67 344574.6,4702387.24 344109.83,4703112.18 343506.49,4703508.48 342236.55,4704211.94 342743.07,4705349.34 342210.55,4705981.24 341269.79,4708311.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[63375638.76149]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[24]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[24]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25183]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rialp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rialp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rialp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rialp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="24">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">356715.09,4701646.56 356218.11,4701811.17 356064.98,4703247.75 355909.91,4704338.94 355488.94,4705115.78 354618.37,4706535.52 354431.91,4706957.18 354550.98,4707887.08 356632.21,4708230.77 357131.38,4708741.08 357189.23,4708692.17 358438.79,4708271.25 360439.42,4707934.3 362508.78,4707629.72 364378.28,4707914.75 364942.88,4708261.47 364912.45,4708803.43 365703.12,4708921.33 365789.37,4707863.7 365651.96,4706811.45 365685.78,4706528.18 365480.66,4705955.17 365367.59,4705289.16 364100.74,4704771.56 364070.08,4704074.47 363640.05,4703248.09 362277.72,4701252.25 361696.73,4700804.35 360841.58,4701370.01 359976.06,4701197.26 359564.9,4701207.75 358795.58,4700767.11 357916.07,4700571.38 357641.06,4701054.07 357098.41,4701266.68 356715.09,4701646.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[61983706.55845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[25]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[25]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25089]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Farrera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Burg]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Farrera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Burg]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="25">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395145.85,4698682.44 394674.11,4696208.88 393922.32,4695338.07 393682.66,4695435.25 393226.47,4695955.59 393312.7,4694855.96 393606,4693643 392766.73,4691697.09 392681.54,4691179.26 392301.27,4690961.04 391648,4690672 391082.04,4691425.94 390374.14,4690965.81 389925.36,4691166.49 389786,4691022 389593.45,4691422.7 389178.61,4691445.62 389539.89,4692644.3 389265.43,4694303.23 388571.11,4695226.46 386805.28,4696273.34 386066.69,4697094.05 385012.19,4698057.67 385089.52,4698250.7 384730.9,4700054.18 383434.67,4700905.2 384201.27,4702456.13 384861.6,4702860.49 385882.71,4702520.72 386790,4702576.69 387588.79,4702252.56 388084.53,4702777.28 388613.07,4702774.55 389176.78,4702684.25 389662.23,4702700.64 390134.93,4703425.55 390141.79,4704283.87 390339.01,4705818.66 390913.17,4706771.24 391586.79,4705760.55 392330.87,4705807.43 393670.31,4705375.73 394873.42,4706370.56 395366.54,4706592.02 395800.46,4705450.56 395245.13,4704641.76 395650.74,4703908.37 395675.46,4703739.83 395531.76,4703304.56 393928.08,4701607.02 394057.23,4700697.42 394465.06,4699623.63 394530.92,4698967.78 395145.85,4698682.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[102632783.40704]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[26]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[26]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25127]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Lles de Cerdanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lles de Cerdanya]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="26">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">325993.98,4686119.69 324831.94,4685348.19 323571.53,4686311.96 322661.82,4687106.03 320259.24,4687438.46 319358.68,4687991.76 318763.3,4688127.76 318375.01,4688600.52 316648.659,4689498.892 316998.82,4690233.96 316242.409,4690600.454 315808.07,4691085.73 316121.46,4691161.34 316633.034,4690897.329 317150.95,4690849.29 318643.22,4691192.2 318847.23,4691497.64 319411.94,4691663.29 319534.44,4692130.34 318704.6,4693061.03 318250.222,4693694.204 318096.16,4693623.39 317914.284,4693631.704 317670.27,4693794.47 316747.49,4694061.2 316255.3,4693566.22 315779.7,4692907.83 315645.1,4692254.09 315704.26,4692068.99 315550.1,4692101.79 314761.67,4692146.72 313926.01,4692475.64 313347.38,4692725.29 312597.51,4693362.06 313520.87,4693692.16 313679.96,4694108.44 314090.25,4694380.71 314472.31,4695016.57 313944.39,4696789.22 313023.93,4697461.85 313319.97,4697755.51 313728.42,4698300 313330,4699450 312143.28,4700521.69 311550.65,4702439.33 312448.39,4702932.92 313546.63,4703325.02 315122.85,4705485.15 315884.46,4703949.56 316571.26,4703535.09 317255.84,4704083.71 319601.26,4703757.38 320580.53,4703103.7 321543.24,4703530.47 322325.12,4703426.68 323860.11,4702748.22 323921.55,4702766.14 325078.06,4701359.7 324155.83,4699840.67 323636.78,4699469.22 321623.36,4699497.06 321014.95,4698416.07 321844.21,4697035.64 320872.54,4696099.47 321804.85,4694440.23 322046.86,4694550.4 322318.02,4693719.72 322876,4693123.74 324171.12,4693043.75 324432.09,4692112.13 324451.08,4691578.36 324707.19,4690902.97 324918.04,4690758.26 324874.82,4690019.31 325095.66,4690115.12 326403.89,4689300.35 326105.64,4688449.87 325960.86,4687623.47 325993.98,4686119.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313931.5,4705891.35 313828.347,4706037.955 313841.72,4706229.16 314042.84,4706344.16 314216.12,4706233.65 314282.56,4706018.93 314140.847,4705881.705 313931.5,4705891.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[146864800.49966]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[27]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[27]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25173]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[05]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pont de Suert, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pont de Suert, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pont de Suert, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pont de Suert, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="27">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323921.55,4702766.14 324179.28,4702831.55 324716.1,4703381.35 325632.75,4703212.95 325871.15,4703334.62 326852.11,4705158.87 327828.94,4705503.11 329264.38,4705889.59 329582.37,4705698.54 329966.17,4704555.85 329476.21,4704070.04 328938.69,4702975.11 328786.38,4702116.21 329358.38,4701273.95 330115.11,4700535.23 330328.86,4700000 329562.56,4697216.78 329025.68,4696302.29 328516.19,4695645.27 329336.44,4694690.69 329135.95,4694558.21 328318.52,4694662.19 327884.76,4693700.89 328212.91,4692673.94 329248.93,4691308.27 329484.97,4690935.66 329717.6,4690441.12 329536.69,4690266.36 330064.2,4689638.35 329869.31,4689318.97 329257.14,4689466.84 328862.17,4689673.92 328480,4689950 327723.9,4690037.33 324918.04,4690758.26 324707.19,4690902.97 324451.08,4691578.36 324432.09,4692112.13 324171.12,4693043.75 322876,4693123.74 322318.02,4693719.72 322046.86,4694550.4 321804.85,4694440.23 320872.54,4696099.47 321844.21,4697035.64 321014.95,4698416.07 321623.36,4699497.06 323636.78,4699469.22 324155.83,4699840.67 325078.06,4701359.7 323921.55,4702766.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[87578402.5002]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[28]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[28]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25201]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sarroca de Bellera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sarroca de Bellera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sarroca de Bellera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sarroca de Bellera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="28">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">401870.18,4697178.76 401007.05,4698326.69 400496.53,4698558.9 398992.86,4698448.4 398387.7,4698657.69 396760.39,4698847.79 396008.09,4699462.34 395635.34,4700379.2 395403.68,4701776.18 395886.23,4703177.57 395675.46,4703739.83 395650.74,4703908.37 395245.13,4704641.76 395800.46,4705450.56 397203.69,4705655.24 397846.86,4705246.08 398401.68,4704772 399578.349,4704295.768 400133.037,4704108.268 400846.07,4703364.62 401957.23,4700335.89 402123.87,4699517.26 402509.08,4698026.9 401870.18,4697178.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37254446.29739]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[29]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[29]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17099]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Meranges]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Meranges]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Meranges]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Meranges]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="29">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">414267.63,4701337.72 414792.1,4703373.35 415554.92,4704167.14 415963.87,4704383.34 416046.54,4704743.84 416183.2,4705139.09 416202,4705326.79 416781.97,4705317.45 417753.99,4704364.8 417418.71,4704287.9 416786.43,4703013.18 417154.37,4702265.11 418503.05,4701187.94 418783.64,4700785.78 419006.26,4700612.9 418873.97,4700278.96 416581.36,4700083.83 414555.28,4700896.29 414267.63,4701337.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12987474.73705]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[30]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[30]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17094]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llivia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llivia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ll¡via]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ll¡via]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="30">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">410384.42,4700239.54 411085.87,4698494.8 410985.34,4697554.88 409392.07,4697149.57 409319.73,4697702.82 407734.25,4698468.9 406971.17,4698540.1 406188.97,4699445.95 405644,4699943.04 404969.09,4701192.86 404345.83,4701568.16 403796.74,4702641.5 402633.037,4704014.518 402625.224,4704202.018 402125.03,4704528.29 401365.49,4704680.55 400845.78,4704426.32 398401.68,4704772 398922.099,4704952.018 400312.724,4704678.58 401796.97,4705090.79 402925.07,4704292.24 403532.29,4704523.62 404211.05,4704226.93 405220.66,4703110.37 405628.97,4702462.72 406376.19,4702029.56 406767.6,4702249.15 408209.01,4701444.96 408516.57,4700504.23 408967.9,4700286.14 409645.08,4700522.73 410249.67,4700389.83 410384.42,4700239.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22202805.5041]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[31]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[31]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17082]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Guils de Cerdanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guils de Cerdanya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Guils de Cerdanya]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Guils de Cerdanya]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="31">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">406906.04,4695104.69 406989.7,4694858.74 406661.43,4694459.68 406283.87,4694564.27 406193.38,4694229.22 405718.04,4694783.29 404036.77,4695624.53 403343.38,4695251.79 402911.09,4695891.39 402557.29,4696085.69 402293.8,4696803.37 401922.09,4697062.53 401870.18,4697178.76 402509.08,4698026.9 402123.87,4699517.26 401957.23,4700335.89 400846.07,4703364.62 400133.037,4704108.268 399578.349,4704295.768 398401.68,4704772 400845.78,4704426.32 401365.49,4704680.55 402125.03,4704528.29 402625.224,4704202.018 402633.037,4704014.518 403796.74,4702641.5 404345.83,4701568.16 404969.09,4701192.86 405644,4699943.04 405526.11,4699627.04 405818.97,4699128.14 405606.24,4698676.78 406602.93,4697964.25 406993.18,4697012.37 406845.82,4695231.68 406906.04,4695104.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33173607.35417]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[32]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[32]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17078]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ger]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ger]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ger]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ger]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="32">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495704.2,4697624.52 495249.91,4697893.47 494771.58,4698528.76 494317.63,4699013.86 493972.2,4699285.19 493452.26,4700028.34 492623.11,4699486.26 492047.59,4698776.96 491950.04,4698382.6 492108.9,4697800.11 492557.62,4695421.37 493322.12,4694289.6 492135.92,4693191.6 491593.07,4692895.19 491072.58,4693033.12 490725.13,4693863.91 490387.47,4693783.36 489845.34,4695130.87 489417.43,4695075.41 488690.95,4696565.41 489088.69,4696785.1 488780.88,4697028.82 488209.49,4697024.01 487928.8,4697410.85 487039.21,4696876.34 486183.7,4697977.46 485009.27,4698869.22 485760.26,4698704.08 486256.75,4699329.93 486411.62,4700258.01 486831.3,4700918.61 488616.22,4700487.06 488859.45,4701467.78 489394.44,4701900.81 490284.56,4701265.11 491846.95,4700974.89 493086.36,4700704.97 493901.7,4700973.68 494288.4,4702219.99 495734.18,4703514.66 496367.35,4702879.03 497496.67,4701661.19 498471.83,4701963.2 498798.29,4701356.54 499098.06,4699956.66 497694.33,4698349.59 496375.95,4698182.65 496186.29,4697764.67 495704.2,4697624.52</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[56972546.4069]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[33]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[34]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17086]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Jonquera, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Jonquera, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Jonquera, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Jonquera, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="33">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">371916.22,4693805.78 371198.6,4692390.92 371313.11,4691799.42 370683.29,4691227 370568.77,4690457.42 371740.45,4689527.35 371573.48,4689428.14 370707.75,4688470.04 369631.8,4688120.25 368714.68,4689093.87 366762.1,4688842.02 364735.84,4689538.7 363940.03,4689150.05 363999.46,4688399.97 363201.19,4688311.66 362544.3,4687997.29 362325.49,4687470.97 361229.96,4688311.93 360077.16,4688549.55 359517.9,4689312.31 359189,4688627.75 358714.47,4688250.01 358251.86,4688552.09 357313.69,4689578.38 356650.33,4689410.17 356921.49,4688914.72 356875.81,4687422.78 355701.29,4686926.98 355762.84,4687289.04 355172.66,4687987.83 354976.08,4688912.43 354387.43,4690952.92 354451.13,4691533.95 355050.46,4691972.91 354880.97,4692618.81 355612.51,4694220.04 355689.76,4697524.17 355939.04,4697973.07 356976.786,4697971.548 356758.036,4699393.423 356329.48,4700679.57 356715.09,4701646.56 357098.41,4701266.68 357641.06,4701054.07 357916.07,4700571.38 358795.58,4700767.11 359564.9,4701207.75 359976.06,4701197.26 360841.58,4701370.01 361696.73,4700804.35 362277.72,4701252.25 363640.05,4703248.09 363576.46,4702234.09 364825.74,4701306.69 365817.47,4699992.37 366410.96,4699138.3 366478.99,4698684.94 366547.5,4697648.87 366885.54,4696857.27 367801.58,4696654.07 368538.59,4696642.5 369202.62,4696120.85 370783.34,4696271.26 371012.73,4694667.58 371916.22,4693805.78</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">363069.7,4685338.55 362703.95,4685169.67 361905.29,4684956.7 361742.6,4685506.87 362554.45,4686310.98 363069.7,4685338.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[175822536.46912]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[34]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[35]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25140]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montferrer i Castellbo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montferrer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montferrer i Castellb•]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montferrer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="34">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">500691.92,4691110.19 500157.67,4691188.75 499951.71,4691140.32 499154.12,4692312.01 498488.85,4694579.79 498668.85,4695241.96 498200.6,4695779.85 497701.77,4696187.58 497620.81,4697963.33 497694.33,4698349.59 499098.06,4699956.66 498798.29,4701356.54 498471.83,4701963.2 499269.16,4702734.79 500315.06,4702367.1 501226.02,4701875.6 501939.69,4702356.75 502693.26,4702706.75 503350.41,4702621.03 503889.02,4701224.93 503724.53,4701161.47 502758.94,4698953.03 503280.07,4697416.52 503296.08,4697071.67 502970.67,4696807.18 502021.18,4696458.58 501783.56,4695483.5 501584.99,4694836.55 501730.73,4693082.97 501063.08,4691930.64 500691.92,4691110.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43688111.45565]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[35]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[36]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17064]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Espolla]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Espolla]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Espolla]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Espolla]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="35">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">501244.54,4689203.11 500691.92,4691110.19 501063.08,4691930.64 501730.73,4693082.97 501584.99,4694836.55 501783.56,4695483.5 502021.18,4696458.58 502970.67,4696807.18 503296.08,4697071.67 503280.07,4697416.52 502758.94,4698953.03 503724.53,4701161.47 503889.02,4701224.93 504305.15,4700391.26 505240.31,4699327.34 505693.43,4698870.59 506100.58,4698320.59 506391.18,4698181.93 507172.86,4697238.71 507078.47,4696713.37 507301.53,4695571.94 507733.63,4694146.77 507345.05,4693810.52 506633.75,4693978.88 506390.52,4693509.55 505665.62,4692997.71 503854.99,4691570.81 503951.3,4690957.46 504004.06,4690815.91 504068.5,4690351.79 503778.18,4689917.5 503910.13,4689458.52 503928,4688793 502925.51,4688187.82 501675.29,4688168.13 501221.14,4688236.94 501244.54,4689203.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[45287698.41075]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[36]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[37]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17143]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rabos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rabos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rab¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rab¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="36">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">410384.42,4700239.54 411408.41,4700277 412250.28,4700795.57 412819.03,4700693.4 413091.61,4699259.28 412988.64,4698289.89 414386.42,4697541.67 414210.37,4695891.34 414614.04,4695021.33 414634.74,4693801.38 414848.37,4693508.13 415046.84,4692599.06 415723.9,4691803.99 416171.19,4691551.45 416630.85,4690692.66 415587.11,4690988.32 415239.96,4691330.01 414342.81,4692037.64 414209.51,4692723.38 413897.61,4693227.71 413617.8,4693838.83 413265.14,4695328.96 413179.05,4696377.46 411457.24,4696200.57 410607.4,4695798.66 409769.88,4696241.58 409392.07,4697149.57 410985.34,4697554.88 411085.87,4698494.8 410384.42,4700239.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18927414.50639]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[37]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[38]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17141]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Puigcerda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Puigcerda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Puigcerd…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Puigcerd…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="37">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354880.97,4692618.81 354818.68,4692557.91 352640.99,4691496.97 351852.56,4690527.84 350883.17,4690308.17 350469.91,4689215.93 349510.38,4688112.83 348616.93,4689050.21 348155.18,4689475.97 347901.22,4689584.79 346258.98,4689626.59 344345.62,4689601.35 341038.62,4688957.29 340817.91,4689136.23 341212.34,4689803.73 340429.13,4691161.18 340000,4691451.79 339342.94,4691584.13 339259.85,4691914.69 338828.83,4691890.4 338531.21,4691651.59 337913.88,4692516.24 337521.26,4693158.42 338021.06,4693769.86 338858.42,4696239.59 339201.8,4697345.51 340289.66,4696296.07 341218.18,4695791.99 342333.67,4694869.14 343860.67,4693178.29 344525.63,4692873.15 344867.33,4693757.09 345384.87,4694349.49 345818.19,4694982.95 346338.04,4695342.22 347401.25,4696358.21 348812.46,4696793.88 349989.53,4697035.91 351540.77,4697784.29 352320.93,4697345.26 352784.22,4696978.65 353586.52,4697557.47 353829.08,4697821.98 353624.83,4698967.13 354276.9,4699190.63 354764.12,4698901.91 355307.7,4698345.44 356509.66,4698754.6 356329.48,4700679.57 356758.036,4699393.423 356976.786,4697971.548 355939.04,4697973.07 355689.76,4697524.17 355612.51,4694220.04 354880.97,4692618.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[105511971.97737]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[38]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[39]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25208]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Soriguera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Soriguera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Soriguera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Soriguera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="38">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495292.93,4693001.72 493759.89,4693960.54 493322.12,4694289.6 492557.62,4695421.37 492108.9,4697800.11 491950.04,4698382.6 492047.59,4698776.96 492623.11,4699486.26 493452.26,4700028.34 493972.2,4699285.19 494317.63,4699013.86 494771.58,4698528.76 495249.91,4697893.47 495704.2,4697624.52 496155.9,4696383.94 496053.5,4696017.26 496559.54,4694889.92 495292.93,4693001.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18982761.73175]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[39]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[40]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17041]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cantallops]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cantallops]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cantallops]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cantallops]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="39">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">405644,4699943.04 406188.97,4699445.95 406971.17,4698540.1 407734.25,4698468.9 409319.73,4697702.82 409392.07,4697149.57 409769.88,4696241.58 410607.4,4695798.66 410589.36,4695146.44 409863.69,4694802.01 409045.38,4694962.02 408891.04,4695217.66 407242.1,4695173.8 406906.04,4695104.69 406845.82,4695231.68 406993.18,4697012.37 406602.93,4697964.25 405606.24,4698676.78 405818.97,4699128.14 405526.11,4699627.04 405644,4699943.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10629177.45295]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[40]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[41]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17024]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bolvir]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bolvir]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bolvir]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bolvir]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="40">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">445922.94,4692254.32 445174.12,4691382.91 443926.41,4690505.15 442904.24,4690257.81 441259.51,4690983.79 440660.85,4691643.4 439900.47,4692958.23 439188.02,4693808.92 438154.58,4694240.55 437481.29,4695603.26 437993.29,4696283.21 438138.97,4696363.02 437638.74,4696790.05 437146.99,4697599.07 437993.73,4697900.99 438600.15,4698747.46 439169.24,4698874.99 440223.43,4698410.09 441024.85,4697843.98 442190.79,4697196.06 443358.23,4697828.19 444086.48,4697216.42 444761.86,4696513.15 445957.93,4696441.04 446149.56,4696317.69 446267.9,4695601.67 446070.47,4694583.16 446184.61,4693178.67 445922.94,4692254.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[49068517.11535]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[41]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[42]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17192]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Setcases]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Setcases]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Setcases]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Setcases]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="41">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">491593.07,4692895.19 490832.06,4692590.16 490725.12,4692727.51 489107.23,4692393.62 488236.16,4692596.45 487649.39,4692104.56 486370.75,4692004.52 485445.47,4693308.55 485361.7,4693779.9 485304.28,4694093.78 484797.13,4695243.86 484367.06,4695344.78 483504.46,4695615.26 483207.16,4695939.72 483077.33,4696458.59 483363.05,4696436.54 484097.58,4697956.37 484259.61,4697894.87 485009.27,4698869.22 486183.7,4697977.46 487039.21,4696876.34 487928.8,4697410.85 488209.49,4697024.01 488780.88,4697028.82 489088.69,4696785.1 488690.95,4696565.41 489417.43,4695075.41 489845.34,4695130.87 490387.47,4693783.36 490725.13,4693863.91 491072.58,4693033.12 491593.07,4692895.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28100496.88061]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[42]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[43]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17001]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Agullana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Agullana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Agullana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Agullana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="42">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392681.54,4691179.26 392766.73,4691697.09 393606,4693643 393312.7,4694855.96 393226.47,4695955.59 393682.66,4695435.25 393922.32,4695338.07 394674.11,4696208.88 395145.85,4698682.44 395551.89,4698502.68 395757.02,4697540.28 395497.42,4697066.03 395854.3,4696284.41 396336.56,4695928.18 396950.38,4695062.65 397222.57,4694861.27 398036.52,4693172.43 397731,4692002 397227,4691770 396823,4691378 396213.31,4691321.41 395981.56,4691418.3 394150.66,4691419.36 393912.07,4691287.67 393508.62,4690922.62 393028.38,4691182.63 392681.54,4691179.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21152857.6801]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[43]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[44]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25179]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Prullans]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Prullans]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Prullans]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Prullans]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="43">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">508494.97,4697382.68 508586.29,4697649.17 509075.58,4698302.73 509822.01,4698499.16 510311.19,4698297.3 511803.4,4698174.19 512330.22,4698188.97 513037.52,4698133.65 513462.49,4698359.36 514413.97,4698364.55 514435.84,4698172.5 514093.93,4697893 513551.93,4697807.5 513375.17,4697575.02 514046.37,4697194 513922.78,4696690 513951.97,4696646.36 513600.85,4696694.53 512648,4696312.15 511631.96,4696215.13 510904.56,4696613.7 509415.54,4696549.39 509247.84,4696923.87 508494.97,4697382.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9029914.55025]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[44]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[45]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17138]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Portbou]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Portbou]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Portbou]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Portbou]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="44">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">496115.45,4689551.66 495842.95,4690854.36 495929.31,4691245.36 495101.41,4692040.67 495292.93,4693001.72 496559.54,4694889.92 496053.5,4696017.26 496155.9,4696383.94 495704.2,4697624.52 496186.29,4697764.67 496375.95,4698182.65 497694.33,4698349.59 497620.81,4697963.33 497701.77,4696187.58 498200.6,4695779.85 498668.85,4695241.96 498488.85,4694579.79 499154.12,4692312.01 499951.71,4691140.32 499766.14,4691130.55 499176.18,4690380.12 499373.51,4689434.71 498195.07,4689691.62 497181.68,4689122.97 496115.45,4689551.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24458004.8428]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[45]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[46]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17158]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Climent Sescebes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Climent Sescebes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Climent Sescebes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Climent Sescebes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="45">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333127.31,4686775.71 332561.59,4686772.73 332178.48,4687805.19 331701.86,4688129.21 331645.27,4688588.59 331739.57,4689132.74 332177.92,4689644.86 333801.57,4689473.73 334046.66,4690173.61 334797.95,4690777.34 334919.17,4692106.96 335202.01,4692664.39 335534.36,4693933.75 335879.65,4694427.15 335966.19,4695230.02 336767.79,4695668.48 337406.79,4696216.98 337801.02,4697864.15 339104.94,4698264.66 339201.8,4697345.51 338858.42,4696239.59 338021.06,4693769.86 337521.26,4693158.42 337913.88,4692516.24 338531.21,4691651.59 338828.83,4691890.4 339259.85,4691914.69 339342.94,4691584.13 340000,4691451.79 340429.13,4691161.18 341212.34,4689803.73 340817.91,4689136.23 341038.62,4688957.29 344345.62,4689601.35 346258.98,4689626.59 347901.22,4689584.79 348155.18,4689475.97 348616.93,4689050.21 349510.38,4688112.83 349736.03,4687971.33 348652.65,4686368.99 348615.99,4685873.96 347247.32,4685678.62 346240.57,4685712.52 345974.09,4685095.88 345299.98,4684481.32 347261.13,4683282.52 347766.99,4682932.56 348157.49,4682198.98 348123.73,4681453.74 347759.12,4680978.65 347627.54,4680435.09 347280.09,4680570.11 345967.66,4680892.58 345271.46,4681675.3 344684.49,4682144.86 344282.02,4682344.67 344416.94,4681738.28 344254.04,4681767.48 342785.6,4682298.75 341626.25,4682441.53 340750.29,4682446.41 339768.14,4682999.77 338400,4683100 338121.81,4683416.3 337355.5,4683743.65 337208.56,4683325.92 336401.36,4684206.64 335461.84,4684198.15 335022.51,4684796.69 334332.78,4684902.39 333274.08,4684943.52 333127.31,4686775.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[128844028.09415]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[46]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[47]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25039]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[26]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Baix Pallars]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gerri de la Sal]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Baix Pallars]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gerri de la Sal]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="46">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">389786,4691022 389140.52,4689691.13 388769.1,4689713.2 387903.41,4689126.12 387376.17,4688347.4 386607.85,4688142.83 386240.85,4688243.82 386354.43,4689531.55 385748.42,4689944.42 384594.84,4691744.22 383903.56,4691363.79 383884.24,4691229.56 383166.24,4691590.8 382809.5,4691870.85 382457.59,4691718.58 382271.64,4692041.29 381999.76,4691652.5 381741.49,4691612.54 381545.26,4692095.41 381856.19,4692485.55 382106.46,4693340.91 382153.51,4694470.39 382689.77,4694462.66 383207.24,4695712.01 384178.35,4696487.45 385012.19,4698057.67 386066.69,4697094.05 386805.28,4696273.34 388571.11,4695226.46 389265.43,4694303.23 389539.89,4692644.3 389178.61,4691445.62 389593.45,4691422.7 389786,4691022</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43193020.94081]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[47]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[48]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25030]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pont de Bar, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pont de Bar, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pont de Bar, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pont de Bar, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="47">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428393.59,4687579.05 426843.05,4688697.47 425978.45,4689925.96 425538.49,4690345.73 424882.83,4690786.01 425079.81,4691790.7 426397.32,4692571.61 427379.99,4693048.07 427288.74,4694245.75 427824.39,4694617.88 428281.58,4695960.74 429119,4696502.88 429826.15,4696789.72 430487.44,4697125.28 431605.68,4697451.32 432650.47,4696740.04 434253.84,4696549.83 434891.38,4696841.28 435509.91,4697247.86 437146.99,4697599.07 437638.74,4696790.05 438138.97,4696363.02 437993.29,4696283.21 437481.29,4695603.26 438154.58,4694240.55 437349.87,4693212.07 437122.12,4692047.33 436245.99,4691541.16 435819.36,4691208.01 435913.01,4690409.86 435909.7,4688028.11 435401.99,4687445.7 435057.27,4687681.59 434130.78,4688012.65 433613.03,4688334.75 432877.92,4687802.9 431804.81,4687692.16 431705.52,4687344.99 429768.49,4687312.79 428393.59,4687579.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[93112797.94838]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[48]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[49]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17043]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Queralbs]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Queralbs]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Queralbs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Queralbs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="48">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">381301,4690807 380465.31,4690766.65 380027.67,4690649.67 379668.19,4690681.82 379474.56,4690986.07 378757.47,4691330.19 378312.85,4690759.96 377951.39,4690849.76 377258.41,4690727.77 377023.13,4691572.84 376684,4692178.14 376848.9,4693145.46 376537.48,4693987.48 376538.42,4694615.33 376583.5,4695110.72 377187.68,4696519.02 377188.22,4696925.19 377547.8,4697043.35 378390.73,4697483.16 378958.8,4696860.29 378975.8,4696102.34 379135.17,4694205.38 379703.01,4693812.67 379860,4693227 380624,4693202 381295.41,4693378.19 382106.46,4693340.91 381856.19,4692485.55 381545.26,4692095.41 381741.49,4691612.54 381474.82,4690819.42 381301,4690807</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20975817.66514]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[49]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[50]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25088]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Estamariu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Estamariu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Estamariu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Estamariu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="49">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">513951.97,4696646.36 514093.93,4696205 513727.84,4695939 513471.82,4695603.09 513081.17,4694907.58 513523.679,4694791.12 513758.054,4694559.87 513071.15,4693948.5 512740.81,4693526.71 513352.28,4693319.5 513770.17,4693238.98 513426.94,4693022.35 512737.68,4693077.03 512172.22,4692915.22 510718.5,4692349.99 509299.58,4691578.37 508640.9,4692399.38 507733.63,4694146.77 507301.53,4695571.94 507078.47,4696713.37 507172.86,4697238.71 507243.43,4697206.31 507639.86,4697231.31 508494.97,4697382.68 509247.84,4696923.87 509415.54,4696549.39 510904.56,4696613.7 511631.96,4696215.13 512648,4696312.15 513600.85,4696694.53 513951.97,4696646.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24634996.03687]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[50]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[51]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17054]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Colera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Colera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Colera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Colera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="50">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">479668.92,4687900.99 479107.16,4688047.35 478499.57,4687904.48 477575.26,4688126.96 477404.22,4688863.02 477243.16,4689155.28 475522.08,4690020.57 474924.22,4690037.34 474234.56,4690358.48 473466,4690916.61 472716.27,4691594.21 472106.05,4692092.47 471923.84,4692285.11 471470.57,4693128.12 472545.47,4692859.9 473057.56,4693089.75 473044.55,4694637.36 473748.15,4695172.8 474682.81,4695102.38 475976.51,4696070.23 477211.73,4696920.77 478591.52,4697102.9 480153.61,4697007.09 480679.56,4696228.01 481238.81,4695723.34 481757.65,4695546.89 482356.67,4695028.81 482469.63,4694628.99 482862.69,4694316 483001.76,4693654.4 483098.55,4692226.88 483203.86,4691626.03 482902.68,4691037.95 482579.53,4691268.99 481913.96,4690420.74 481642.27,4690319.17 481661.09,4689578.07 481910.46,4689160.9 480721.75,4688748.12 480281.99,4688070.68 479668.92,4687900.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[67723859.9016]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[51]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[52]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17102]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Macanet de Cabrenys]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Macanet de Cabrenys]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ma‡anet de Cabrenys]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ma‡anet de Cabrenys]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="51">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">403974.16,4692703 403780.14,4693033.92 402949.97,4692564.39 402611.36,4692095.04 401945.29,4691794.9 401694.84,4692445.81 401405.24,4692348.03 401726.34,4693551.05 402034.92,4695218.49 401743.93,4696055.48 402222.16,4696228.39 401922.09,4697062.53 402293.8,4696803.37 402557.29,4696085.69 402911.09,4695891.39 403343.38,4695251.79 404036.77,4695624.53 405718.04,4694783.29 406193.38,4694229.22 405802.92,4694225.7 404777.37,4693733.61 403974.16,4692703</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10560529.67815]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[52]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[53]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17084]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Isovol]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[All]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Is•vol]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[All]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="52">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">485361.7,4693779.9 484821.37,4693627.88 484398.47,4693693.58 483705.04,4694468.13 483143.99,4694716.83 482862.69,4694316 482469.63,4694628.99 482356.67,4695028.81 481757.65,4695546.89 481238.81,4695723.34 481692.31,4695797.85 482249.46,4696389.28 483077.33,4696458.59 483207.16,4695939.72 483504.46,4695615.26 484367.06,4695344.78 484797.13,4695243.86 485304.28,4694093.78 485361.7,4693779.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4824971.8524]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[53]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[54]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17014]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vajol, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vajol, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vajol, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vajol, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="53">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">410607.4,4695798.66 411457.24,4696200.57 413179.05,4696377.46 413265.14,4695328.96 413617.8,4693838.83 413897.61,4693227.71 414209.51,4692723.38 414342.81,4692037.64 415239.96,4691330.01 414498.35,4691373.97 414181.01,4690310.19 413961.86,4690544.11 413913.7,4690098.29 413507.53,4690015.88 412732.05,4690102.2 411237.74,4691064.23 409959.18,4692148.81 409218.71,4692250.55 409071.54,4692839.11 408749.69,4692761.21 408597.79,4692862.45 407403.89,4692808.42 406961.31,4693711.11 406470.24,4694196.16 406661.43,4694459.68 406989.7,4694858.74 406906.04,4695104.69 407242.1,4695173.8 408891.04,4695217.66 409045.38,4694962.02 409863.69,4694802.01 410589.36,4695146.44 410607.4,4695798.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28041413.91735]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[54]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[55]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17069]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fontanals de Cerdanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilar d'Urtx, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fontanals de Cerdanya]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilar d'Urtx, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="54">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">446267.9,4695601.67 447341.65,4694988.88 448787.14,4694650.13 449778.66,4694484.45 450994.94,4693825.35 453457.53,4693734.09 453475.4,4692202.82 454186.7,4691312.23 455171.52,4691138.47 455381.16,4690460.2 454255.42,4689654.84 454243.64,4688952.33 453978.91,4688079.04 453351.66,4688161.07 453114.66,4687159 453190.78,4686827.67 453594.7,4686812.86 453619.09,4686297.51 452415.74,4686043.2 452072.97,4687370.08 450716.17,4687541.63 450311.94,4687670.03 449155.41,4688686.68 448754.5,4689467.22 448568.54,4689997.02 448733.82,4690994.2 448303.62,4691462.67 447545.75,4691786.67 446255.52,4692264.33 445922.94,4692254.32 446184.61,4693178.67 446070.47,4694583.16 446267.9,4695601.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43607002.00691]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[55]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[56]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17107]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mollo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mollo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Moll¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Moll¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="55">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">491913.01,4689423.66 491437.36,4688814.45 490525.34,4688528.4 490019.61,4688449.3 489580.89,4687824.62 489365.12,4687662.61 488476.69,4688459.84 488070.45,4688576.67 487413.1,4688390.9 486583.31,4687553.92 485789.4,4687888.36 485561.51,4688030.22 484052.77,4688043.2 482911.3,4688617.02 482636.96,4689014.69 481910.46,4689160.9 481661.09,4689578.07 481642.27,4690319.17 481913.96,4690420.74 482579.53,4691268.99 482902.68,4691037.95 483203.86,4691626.03 483098.55,4692226.88 483001.76,4693654.4 482862.69,4694316 483143.99,4694716.83 483705.04,4694468.13 484398.47,4693693.58 484821.37,4693627.88 485361.7,4693779.9 485445.47,4693308.55 486370.75,4692004.52 487649.39,4692104.56 487600.37,4691644.33 487871.68,4691435.91 488404.62,4690782.18 488603.41,4690488.29 488996.27,4690050.64 489685.62,4690557.71 490929.28,4690183.77 491902.61,4690068.06 491913.01,4689423.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34934106.43255]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[56]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[57]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17060]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Darnius]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Darnius]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Darnius]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Darnius]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="56">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">403974.16,4692703 404777.37,4693733.61 405802.92,4694225.7 406193.38,4694229.22 406283.87,4694564.27 406661.43,4694459.68 406470.24,4694196.16 406961.31,4693711.11 407403.89,4692808.42 407017.56,4691980.35 408216.98,4690063.34 408396.18,4689236.29 409109.31,4688633.35 409619.92,4688032.25 409047.13,4686405.65 408856.14,4686170.77 408472.54,4687603.39 408029.5,4688257.54 407233.46,4688382.29 406582.09,4688998.58 406397.16,4689824.97 405100.25,4690470.46 405158.09,4690725.93 405757.87,4691582.31 405503.99,4692082.03 405007.49,4692266.15 404686.42,4692088.32 404050.89,4692353.25 403974.16,4692703</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15000410.86585]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[57]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[58]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17061]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Das]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Das]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Das]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Das]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="57">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">487649.39,4692104.56 488236.16,4692596.45 489107.23,4692393.62 490725.12,4692727.51 490832.06,4692590.16 491593.07,4692895.19 492135.92,4693191.6 493322.12,4694289.6 493759.89,4693960.54 495292.93,4693001.72 495101.41,4692040.67 495929.31,4691245.36 495842.95,4690854.36 496115.45,4689551.66 495551.76,4689453.58 494954.23,4689161.34 494501.16,4688404.23 494545.24,4687608.83 493242.13,4688741.6 492898.58,4689198.85 491913.01,4689423.66 491902.61,4690068.06 490929.28,4690183.77 489685.62,4690557.71 488996.27,4690050.64 488603.41,4690488.29 488404.62,4690782.18 487871.68,4691435.91 487600.37,4691644.33 487649.39,4692104.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26769048.0395]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[58]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[59]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17042]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Capmany]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Capmany]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Capmany]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Capmany]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="58">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">443941,4683099.79 443587.69,4683016.39 440591.49,4682926.57 440562.5,4683265.97 440181.01,4683642.28 439197.72,4684730.38 439235.88,4685112.03 438979.63,4685785.37 438617.07,4686543.22 437428.34,4687333.97 436529.42,4687296.4 435909.7,4688028.11 435913.01,4690409.86 435819.36,4691208.01 436245.99,4691541.16 437122.12,4692047.33 437349.87,4693212.07 438154.58,4694240.55 439188.02,4693808.92 439900.47,4692958.23 440660.85,4691643.4 441259.51,4690983.79 442904.24,4690257.81 443926.41,4690505.15 444656.18,4689292.66 445590.52,4688346.55 445515.31,4686941.19 445087.72,4686211.25 445244.98,4685902.03 444511.12,4684960.87 443921.7,4683861.76 443941,4683099.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[64349594.53919]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[59]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[60]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17224]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilallonga de Ter]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilallonga de Ter]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilallonga de Ter]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilallonga de Ter]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="59">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">508012.12,4689208.56 507664.19,4689903.5 507558.56,4690766.24 507176.03,4691393.51 506566.89,4692802.6 506390.52,4693509.55 506633.75,4693978.88 507345.05,4693810.52 507733.63,4694146.77 508640.9,4692399.38 509299.58,4691578.37 510718.5,4692349.99 512172.22,4692915.22 512737.68,4693077.03 513426.94,4693022.35 513770.17,4693238.98 513822.93,4693200.5 513461.62,4692734.5 512971.96,4692276.7 513147.87,4691731.5 513252.46,4691232.5 513423.075,4691236.433 513566.825,4691314.558 513563.7,4691483.308 513623.075,4691520.808 513698.99,4691212 513705.43,4690653.42 513616.62,4690182 513907.59,4689860 514205.49,4689725.71 514477.72,4689430.63 514181.19,4688827.28 513755.93,4688279.34 513086.75,4687893.62 511653.25,4688234.73 511010.6,4687988.83 510396.67,4688543.55 509247.32,4688293.98 508848.96,4688588.4 508703.47,4689144.83 508012.12,4689208.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28001515.41643]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[60]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[61]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17092]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llanca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llanca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llan‡…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llan‡…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="60">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">507176.03,4691393.51 505163.76,4690599.52 504004.06,4690815.91 503951.3,4690957.46 503854.99,4691570.81 505665.62,4692997.71 506390.52,4693509.55 506566.89,4692802.6 507176.03,4691393.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5334627.57425]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[61]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[62]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17227]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilamaniscle]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilamaniscle]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilamaniscle]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilamaniscle]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="61">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">414071.56,4685114.44 413722.84,4685408.4 412950.5,4684674.05 412653.02,4685614.11 411159.96,4685750.64 409916.8,4686386.01 408856.14,4686170.77 409047.13,4686405.65 409619.92,4688032.25 409109.31,4688633.35 408396.18,4689236.29 408216.98,4690063.34 407017.56,4691980.35 407403.89,4692808.42 408597.79,4692862.45 408749.69,4692761.21 409071.54,4692839.11 409218.71,4692250.55 409959.18,4692148.81 411237.74,4691064.23 412732.05,4690102.2 413507.53,4690015.88 413913.7,4690098.29 413961.86,4690544.11 414181.01,4690310.19 414498.35,4691373.97 415239.96,4691330.01 415587.11,4690988.32 416630.85,4690692.66 417242.33,4690432.95 417631.29,4689986.72 418001.65,4690005.33 418686.99,4689625.49 419004.77,4689073.4 418025.75,4688442.01 417353.09,4688462.14 416971.76,4688661.47 416999.69,4687719.49 416101.57,4687257.27 415532.3,4687321.08 414853.25,4687454.96 414328.41,4686982.18 414071.56,4685114.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[44543353.5929]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[62]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[64]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17006]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="62">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">349510.38,4688112.83 350469.91,4689215.93 350883.17,4690308.17 351852.56,4690527.84 352640.99,4691496.97 354818.68,4692557.91 354880.97,4692618.81 355050.46,4691972.91 354451.13,4691533.95 354387.43,4690952.92 354976.08,4688912.43 355172.66,4687987.83 355762.84,4687289.04 355701.29,4686926.98 356875.81,4687422.78 356921.49,4688914.72 356650.33,4689410.17 357313.69,4689578.38 358251.86,4688552.09 358714.47,4688250.01 359189,4688627.75 359517.9,4689312.31 360077.16,4688549.55 361229.96,4688311.93 362325.49,4687470.97 362554.45,4686310.98 361742.6,4685506.87 361905.29,4684956.7 362703.95,4685169.67 363069.7,4685338.55 363519.25,4684939.3 363811.58,4685377.77 364902.96,4684700.98 365264.16,4684535.14 365104.89,4684084.93 365476.45,4683620.47 364566.86,4681890.33 364709.57,4680813.54 364461.53,4680184.49 364114.707,4679779.883 363852.207,4679529.883 363796.39,4679060.13 363674.082,4679154.883 363642.832,4679345.508 363661.582,4679508.008 364321.96,4680425.39 364246.16,4681234.15 363437.96,4681127.55 363579.29,4681925.9 363446.93,4682058.64 362615.81,4682238.03 361396.44,4681805.28 360078.8,4681748.97 359083.71,4681996.78 359145.38,4682264.53 358568.16,4682651.68 357561.42,4682408.17 357169.92,4682006.71 356378.65,4682026.95 356104.47,4681071.66 356263.15,4680818.57 355384.76,4680694.39 354646.74,4681060.7 353636.87,4680950.42 352721.12,4681226.95 352275.39,4681050.55 351876.59,4680488.29 350537.25,4680551.14 349792.98,4680887.69 348964.94,4680975 348241.54,4680956.13 347627.54,4680435.09 347759.12,4680978.65 348123.73,4681453.74 348157.49,4682198.98 347766.99,4682932.56 347261.13,4683282.52 345299.98,4684481.32 345974.09,4685095.88 346240.57,4685712.52 347247.32,4685678.62 348615.99,4685873.96 348652.65,4686368.99 349736.03,4687971.33 349510.38,4688112.83</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[123993005.08874]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[63]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[65]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25906]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Valls d'Aguilar, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Noves de Segre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Valls d'Aguilar, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Noves de Segre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="63">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">477932.95,4679303.13 477781.31,4678998.53 477622.02,4677896.85 477169.8,4677375.44 476793.33,4677925.09 475710.62,4677782.44 475463.6,4678161.54 475701.92,4678824.54 476037,4679504.62 475562.71,4680111.24 473894.89,4680289.17 473504.32,4680093.89 474532.73,4679316.57 473233.77,4679259.78 473262.13,4679097.57 473163.14,4678619.76 472923.64,4678795.16 473004.8,4679320.86 472287.46,4679521.27 472245.55,4679769.99 472682.23,4680322.69 472292.54,4681991.42 471824.87,4682905 470855.72,4683106.32 469445.59,4682851.95 469612.48,4683724.39 469690.84,4684678.54 468757.27,4684371.49 468526.75,4684505.73 468120.32,4684958.31 468263.64,4685330.82 466495.11,4686475.21 465549.19,4686292.68 465306.7,4685830.03 464127.56,4685406.58 463592.22,4685832.01 462300.27,4687140.61 463037.43,4688031.08 463302.09,4688696.49 463469.84,4689377.48 465248.94,4689839.88 466125.53,4689675.93 466229.01,4689376.88 467322.11,4688856.14 468032.89,4688589.3 469752.25,4688535.6 470297.9,4688247.69 471093.07,4688219 471756.58,4688015.93 472429.66,4687944.9 473387.14,4688009.07 473383.5,4688972.65 473078.6,4689991.72 472537.58,4690304.26 472194.04,4691129.09 472204.68,4691545.21 471923.84,4692285.11 472106.05,4692092.47 472716.27,4691594.21 473466,4690916.61 474234.56,4690358.48 474924.22,4690037.34 475522.08,4690020.57 477243.16,4689155.28 477404.22,4688863.02 477575.26,4688126.96 478499.57,4687904.48 479107.16,4688047.35 479668.92,4687900.99 478913.17,4687238.03 478172.43,4686999.32 477848.02,4686728.16 476940.42,4686747.9 476188.47,4686515.41 475920.86,4686243.73 476441,4685258.9 477540.95,4685490.47 478255.97,4685154.19 478416.58,4683331.58 477077.28,4683257.25 476406.81,4682864.53 476940.32,4682149.61 477333.72,4680766.19 478081.63,4679813.99 477932.95,4679303.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[94731524.84142]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[64]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[66]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17003]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albanya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albany…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albany…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="64">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">443941,4683099.79 443921.7,4683861.76 444511.12,4684960.87 445244.98,4685902.03 445087.72,4686211.25 445515.31,4686941.19 445590.52,4688346.55 444656.18,4689292.66 443926.41,4690505.15 445174.12,4691382.91 445922.94,4692254.32 446255.52,4692264.33 447545.75,4691786.67 448303.62,4691462.67 448212.91,4690702.69 448513.99,4689868.34 448350.58,4688772.47 447977.29,4687931.51 447636.43,4686919.06 447619.65,4686638.19 447961.63,4685523.46 447732.65,4685257.08 447105.5,4685641.72 446810.69,4685179.97 447003.19,4685114.88 446639.82,4684398.13 446660.67,4684070.75 443941,4683099.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24635131.7782]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[65]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[67]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17091]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llanars]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llanars]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llanars]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llanars]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="65">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382106.46,4693340.91 381295.41,4693378.19 380624,4693202 379860,4693227 379703.01,4693812.67 379135.17,4694205.38 378975.8,4696102.34 378958.8,4696860.29 378390.73,4697483.16 377547.8,4697043.35 377188.22,4696925.19 377187.68,4696519.02 376583.5,4695110.72 376538.42,4694615.33 376537.48,4693987.48 376848.9,4693145.46 376684,4692178.14 376537.82,4691518.08 376198.35,4691082.95 373850.89,4691533.05 372891.07,4692636.84 372764.83,4692360.39 372493.72,4692250.05 372001.73,4692973.75 372051.63,4693423.81 371916.22,4693805.78 371012.73,4694667.58 370783.34,4696271.26 369202.62,4696120.85 368538.59,4696642.5 367801.58,4696654.07 366885.54,4696857.27 366547.5,4697648.87 366478.99,4698684.94 366410.96,4699138.3 365817.47,4699992.37 364825.74,4701306.69 363576.46,4702234.09 363640.05,4703248.09 364070.08,4704074.47 364100.74,4704771.56 365367.59,4705289.16 365480.66,4705955.17 365685.78,4706528.18 365651.96,4706811.45 365789.37,4707863.7 365703.12,4708921.33 366354.16,4708741.77 366797.75,4708330.29 367925.23,4708962.41 368480.65,4709681.73 369433.56,4710044.62 369841.91,4710652.33 370326.97,4710744.56 372118.32,4711496.66 372975.57,4710840.77 373253.6,4709679.16 374201.69,4707908.41 372286.37,4706246.82 370615.81,4705835.21 370143.02,4704960.32 371053.78,4704741.47 371950.48,4703921.1 371857.13,4702802.69 372358.58,4702306.52 371968.51,4701204.6 372318.7,4700496.66 372018.6,4700509.82 372403.01,4699800.36 373604.64,4699451.61 375077.46,4699269.26 376502.08,4699209.73 378112.32,4698677.92 379477.49,4699000.21 380897.52,4699144.57 381078.15,4699962.35 381562.21,4700716.87 381449.93,4701273.89 381640,4701735.76 382085.34,4701882.15 382726.59,4701321.25 383434.67,4700905.2 384730.9,4700054.18 385089.52,4698250.7 385012.19,4698057.67 384178.35,4696487.45 383207.24,4695712.01 382689.77,4694462.66 382153.51,4694470.39 382106.46,4693340.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382457.59,4691718.58 382006.52,4690748.51 381474.82,4690819.42 381741.49,4691612.54 381999.76,4691652.5 382271.64,4692041.29 382457.59,4691718.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[170800530.82161]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[66]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[68]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25239]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Valls de Valira, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Anserall]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Valls de Valira, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Anserall]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="66">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">381932.11,4687865.36 382244.24,4689498.11 381577.05,4689883 381301,4690807 381474.82,4690819.42 382006.52,4690748.51 382457.59,4691718.58 382809.5,4691870.85 383166.24,4691590.8 383884.24,4691229.56 383903.56,4691363.79 384594.84,4691744.22 385748.42,4689944.42 386354.43,4689531.55 384398.3,4688843.49 383950.41,4688363.02 383558.04,4688322.72 383129.64,4688836.5 382724.67,4688584.09 381932.11,4687865.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10393317.58235]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[67]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[69]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25032]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arseguel]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arseguel]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[ArsŠguel]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[ArsŠguel]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="67">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">445796.61,4680612.58 445131.23,4680663.45 443773.48,4681060.25 443494.47,4681723.69 443587.69,4683016.39 443941,4683099.79 446660.67,4684070.75 446639.82,4684398.13 447003.19,4685114.88 446810.69,4685179.97 447105.5,4685641.72 447732.65,4685257.08 447961.63,4685523.46 447619.65,4686638.19 447636.43,4686919.06 447977.29,4687931.51 448350.58,4688772.47 448513.99,4689868.34 448212.91,4690702.69 448303.62,4691462.67 448733.82,4690994.2 448568.54,4689997.02 448754.5,4689467.22 449155.41,4688686.68 450311.94,4687670.03 450716.17,4687541.63 452072.97,4687370.08 452415.74,4686043.2 453619.09,4686297.51 453594.7,4686812.86 453190.78,4686827.67 453114.66,4687159 453351.66,4688161.07 453978.91,4688079.04 454243.64,4688952.33 454255.42,4689654.84 455381.16,4690460.2 456227.97,4689960.05 456681,4688866.87 457270.76,4688079.96 457646.82,4687883.39 458305.72,4688066.42 459721.08,4687794.31 460972.81,4687110.24 460512.44,4686029.45 460928.77,4685395.08 461240.6,4684156.8 460807.65,4682442.34 462712.08,4682315.18 463544.89,4681816.38 462581.28,4681388.98 461917.96,4681186.36 461169.44,4681103.63 459528.73,4681449.68 459259.61,4681951.16 459242.18,4683829.25 458487.08,4683440.08 457309.21,4683591.64 457623.55,4682078.95 455831.55,4681172.5 455750.13,4681163.85 454907.4,4681565.5 454596.39,4681279.24 453878.75,4681837.58 453128.36,4682007.62 452973,4681809.19 451871.25,4681970.64 451150.43,4681450.03 451125.73,4680804.41 449628.88,4680365.13 448568.37,4679582.37 448477.33,4679647.53 448264.97,4680059.67 448098.65,4681857.03 447643.08,4681984.85 446985.37,4681455.93 446158.4,4681135.51 445796.61,4680612.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[102537802.46106]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[68]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[70]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17039]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Camprodon]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Camprodon]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Camprodon]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Camprodon]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="68">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">394431.8,4682206.5 394329.41,4682256.03 394067.77,4682689.56 393072.28,4682257.61 392866.95,4682415.11 392297.29,4682410.76 391398.19,4682478.37 390734.54,4682348.68 390539,4681963.89 389728.3,4681979.61 388903.5,4682621.88 389458.91,4687882.28 389775.38,4688472.38 389140.52,4689691.13 389786,4691022 389925.36,4691166.49 390374.14,4690965.81 391082.04,4691425.94 391648,4690672 392301.27,4690961.04 392681.54,4691179.26 393028.38,4691182.63 393508.62,4690922.62 393912.07,4691287.67 394608.95,4690195 395487.97,4689352.67 395881.7,4688630.99 395878.48,4688062.08 395651.96,4687044.6 395437.64,4685464.69 396121.39,4684326.76 395718.87,4682272.28 394431.8,4682206.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[54823792.57385]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[69]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[71]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25139]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montella i Martinet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Martinet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montell… i Martinet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Martinet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="69">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">506324.47,4685931.68 505593.08,4685394.93 504935,4685402.81 504369.79,4685146.97 503986.11,4684882.47 502933.18,4686409.61 502265.2,4686416.95 502136.52,4686417.497 502687.07,4686972.05 502337.43,4687315.3 502781.53,4687777.19 502925.51,4688187.82 503928,4688793 503910.13,4689458.52 503778.18,4689917.5 504068.5,4690351.79 504004.06,4690815.91 505163.76,4690599.52 507176.03,4691393.51 507558.56,4690766.24 507664.19,4689903.5 508012.12,4689208.56 507540.7,4688684.2 506565.77,4686651.07 506677.74,4686515.47 506554.85,4685930.72 506324.47,4685931.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21477685.60318]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[70]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[72]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17077]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Garriguella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Garriguella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Garriguella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Garriguella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="70">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">374159.34,4683073.16 372801.56,4683762.74 372804.73,4685092.04 373616.72,4685381.09 373624.37,4685680.65 374134.78,4686041.19 373451.49,4687873.21 373406.08,4688357.74 374266.59,4688839.97 374843.21,4688810.76 375751.61,4689796.3 375991.04,4690813.59 377258.41,4690727.77 377951.39,4690849.76 378312.85,4690759.96 378757.47,4691330.19 379474.56,4690986.07 379668.19,4690681.82 380027.67,4690649.67 380465.31,4690766.65 381301,4690807 381577.05,4689883 382244.24,4689498.11 381932.11,4687865.36 382088.76,4685579.12 383069.59,4682699.14 382738.87,4682750.09 381669.88,4682346.47 380835.75,4682311.1 380681.04,4683184.3 379839.68,4683334.87 379436.48,4683534.19 377917.26,4684786.43 376148.68,4684432.17 374278.76,4683262.55 374159.34,4683073.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">375916.22,4689035.18 376536.54,4688656.52 376716.37,4689042.3 376403.97,4689728.02 376248.82,4689919.01 376155.87,4689772.09 376022.37,4689736.89 376078.18,4689543.73 375916.22,4689035.18</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[57518856.34349]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[71]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[73]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25005]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alas i Cerc]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alas]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Al…s i Cerc]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Al…s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="71">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">501244.54,4689203.11 500524.25,4689413.33 500178.54,4688829.13 499430.57,4688263.69 499489.63,4689163.21 499373.51,4689434.71 499176.18,4690380.12 499766.14,4691130.55 499951.71,4691140.32 500157.67,4691188.75 500691.92,4691110.19 501244.54,4689203.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">502136.52,4686417.497 501138.24,4686421.74 501107.92,4687007.23 500986.72,4687318.05 501228.92,4687666.39 501221.14,4688236.94 501675.29,4688168.13 502925.51,4688187.82 502781.53,4687777.19 502337.43,4687315.3 502687.07,4686972.05 502136.52,4686417.497</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[6043081.85762]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[72]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[74]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17106]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mollet de Peralada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mollet de Peralada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mollet de Peralada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mollet de Peralada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="72">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">414071.56,4685114.44 414328.41,4686982.18 414853.25,4687454.96 415532.3,4687321.08 416101.57,4687257.27 416999.69,4687719.49 416971.76,4688661.47 417353.09,4688462.14 418025.75,4688442.01 419004.77,4689073.4 420009.18,4689985.21 421147.25,4690202.89 422529.56,4690202.04 423382.14,4690600.84 423921.57,4690961.55 424692.33,4690618.93 424882.83,4690786.01 425538.49,4690345.73 425878.61,4688562.12 426013.65,4687176.29 425834.39,4685036.52 425488.93,4685218.78 425030.16,4684466.75 424895.16,4683766.37 424301.13,4682108.31 423663.39,4682594.53 423469.18,4682680.43 422935.63,4682739.48 422270.83,4683165.3 421428.87,4683644.52 420893.35,4684093.97 419720.41,4684587.32 418743.09,4684652.81 417803.7,4684355.16 417030.16,4683825.34 416151.06,4683719.61 414071.56,4685114.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[62685581.85189]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[73]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[75]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17201]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Toses]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Toses]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Toses]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Toses]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="73">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">325993.98,4686119.69 325960.86,4687623.47 326105.64,4688449.87 326403.89,4689300.35 325095.66,4690115.12 324874.82,4690019.31 324918.04,4690758.26 327723.9,4690037.33 328480,4689950 328862.17,4689673.92 329257.14,4689466.84 329869.31,4689318.97 330064.2,4689638.35 330669.54,4688619.98 331701.86,4688129.21 332178.48,4687805.19 332561.59,4686772.73 333127.31,4686775.71 332473.5,4686259.09 332138.94,4684147.08 331290.11,4683836.56 331126.05,4683687.03 330048.59,4684121.73 329975.94,4684646.57 329417.88,4684293.9 328590.15,4684478.04 327750.15,4684982.31 326660.32,4685141.37 326169.75,4685971.28 325993.98,4686119.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">329248.93,4691308.27 328212.91,4692673.94 327884.76,4693700.89 328318.52,4694662.19 329135.95,4694558.21 329760.45,4694533.39 329441.18,4694363.57 329758.74,4693201.9 329378.26,4693315.04 329236.35,4692036.61 329248.93,4691308.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[35119375.41391]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[74]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[76]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25202]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Senterada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Senterada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Senterada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Senterada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="74">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">404694.9,4684624.32 404155.68,4686483.61 404099.61,4687520.54 404395.82,4688139.7 404450.84,4688385.63 404216.94,4688645.06 404413.28,4689554.17 404197.01,4690132.65 405064.53,4690105.87 405100.25,4690470.46 406397.16,4689824.97 406582.09,4688998.58 407233.46,4688382.29 408029.5,4688257.54 408472.54,4687603.39 408856.14,4686170.77 408619.54,4685786.76 408025.32,4685647.04 407485.75,4685360.92 407252.54,4685401.08 406620.58,4685247.06 406232.64,4685426.76 405638.19,4685069.01 404694.9,4684624.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17376244.8141]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[75]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[77]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17206]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Urus]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Urus]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ur£s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ur£s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="75">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428143.95,4684964.51 427921.57,4684397.49 426837.95,4683537.81 426176.66,4683137.01 425757.25,4681936.71 425702.11,4681659.21 424749.01,4682136.74 424301.13,4682108.31 424895.16,4683766.37 425030.16,4684466.75 425488.93,4685218.78 425834.39,4685036.52 426013.65,4687176.29 425878.61,4688562.12 425538.49,4690345.73 425978.45,4689925.96 426843.05,4688697.47 428393.59,4687579.05 427531.55,4685096.5 428143.95,4684964.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14386361.24255]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[76]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[78]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17134]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Planoles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Planoles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Planoles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Planoles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="76">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">373406.08,4688357.74 372528.52,4689582.36 372304.95,4689691.47 371740.45,4689527.35 370568.77,4690457.42 370683.29,4691227 371313.11,4691799.42 371198.6,4692390.92 371916.22,4693805.78 372051.63,4693423.81 372001.73,4692973.75 372493.72,4692250.05 372764.83,4692360.39 372891.07,4692636.84 373850.89,4691533.05 376198.35,4691082.95 376537.82,4691518.08 376684,4692178.14 377023.13,4691572.84 377258.41,4690727.77 375991.04,4690813.59 375751.61,4689796.3 374843.21,4688810.76 374266.59,4688839.97 373406.08,4688357.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">375916.22,4689035.18 376078.18,4689543.73 376022.37,4689736.89 376155.87,4689772.09 376248.82,4689919.01 376403.97,4689728.02 376716.37,4689042.3 376536.54,4688656.52 375916.22,4689035.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[15519900.1328]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[77]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[79]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25203]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Seu d'Urgell, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Seu d'Urgell, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Seu d'Urgell, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Seu d'Urgell, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="77">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">384332.07,4682642.09 383069.59,4682699.14 382088.76,4685579.12 381932.11,4687865.36 382724.67,4688584.09 383129.64,4688836.5 383558.04,4688322.72 383950.41,4688363.02 384398.3,4688843.49 386354.43,4689531.55 386240.85,4688243.82 386607.85,4688142.83 387376.17,4688347.4 387903.41,4689126.12 388769.1,4689713.2 389140.52,4689691.13 389775.38,4688472.38 389458.91,4687882.28 388903.5,4682621.88 387967.78,4682944.79 385404.92,4682671.75 384332.07,4682642.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[42641299.2211]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[78]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[80]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25071]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cava]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cava]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cava]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cava]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="78">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">494545.24,4687608.83 494501.16,4688404.23 494954.23,4689161.34 495551.76,4689453.58 496115.45,4689551.66 497181.68,4689122.97 498195.07,4689691.62 499373.51,4689434.71 499489.63,4689163.21 499430.57,4688263.69 498963.52,4687162.89 498520.99,4686923.91 497869.81,4687231.13 498102.21,4685799.08 496452.86,4686722.6 495398.74,4686766.55 495257.19,4686756 495158.31,4686917.07 494545.24,4687608.83</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12532389.4578]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[79]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[81]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17100]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masarac]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masarac]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Masarac]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Masarac]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="79">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">513950.95,4685487.01 513171.08,4686114.08 512240.13,4685881.31 511640.57,4686117.63 511494.57,4686614.34 510816.72,4686445.3 510754.3,4686870.41 511228.32,4687657.68 511010.6,4687988.83 511653.25,4688234.73 513086.75,4687893.62 513755.93,4688279.34 514181.19,4688827.28 514477.72,4689430.63 514716.12,4689345 514923.075,4689158.308 515013.7,4689158.308 515151.3,4689252 515091.825,4689070.808 515144.95,4688970.808 515316.825,4688914.558 515379.325,4689027.058 515486.05,4689069.5 515554.325,4688958.308 515393.37,4688122 516362.36,4687240.37 516641.825,4687353.62 516821.38,4687652.1 516813.7,4687866.12 516693.03,4687968.5 516581.59,4687836.5 516777.87,4688441.9 516994.95,4688469.245 517300.8,4688333 517401.2,4688219.245 517578.56,4688530 517817.75,4688715 518434.96,4688701.5 518856.71,4689015 519155.03,4688946.5 519167.03,4688821.5 519398.5,4688778.5 519686.53,4688566 519568.21,4688074 519952.09,4687498 519967.03,4687259.5 520370.62,4687369 520633.43,4686676.26 520731.492,4686712.995 520739.21,4687107 521052.56,4687149.5 521511.4,4687047.5 521515.65,4687204 521581.9,4687383 521635.9,4687787.5 521774.78,4687794.5 522977.49,4687189 523046.4,4687059 523237.91,4686856.44 523692.24,4685352.42 522531.96,4684622.76 522096.91,4684481.58 521036.26,4683488.29 519691,4683170.64 517674.55,4681955.19 517147.4,4683036.23 516845.14,4683211.24 516076.7,4683486.58 516176.34,4683525.1 516681.24,4684138.92 516594.24,4684597.88 516902.29,4685088.19 516909.59,4686052.09 516530.06,4686297.76 515842.62,4686485.14 515456.89,4686838.6 514701.17,4686435.74 513950.95,4685487.01</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">520130.09,4687670 520004.31,4687732.5 520017.12,4687887 520051.21,4687876.5 520130.09,4687670</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[41933039.12182]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[80]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[82]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17140]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Port de la Selva, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Port de la Selva, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Port de la Selva, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Port de la Selva, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="80">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495257.19,4686756 494311.59,4687249.38 493872.41,4687147.93 493882.74,4686705.26 492866.5,4686886.85 491981.19,4686396.44 491760.49,4686158.47 491292.77,4686302.73 490740.58,4686546.88 490009.47,4686818.56 489658.58,4687417.62 489580.89,4687824.62 490019.61,4688449.3 490525.34,4688528.4 491437.36,4688814.45 491913.01,4689423.66 492898.58,4689198.85 493242.13,4688741.6 494545.24,4687608.83 495158.31,4686917.07 495257.19,4686756</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9828503.52175]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[81]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[83]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17234]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Biure]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Biure]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Biure]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Biure]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="81">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">499295.86,4681927.21 499720.91,4682267.9 499812.01,4683799.47 499722.62,4684134.77 499056.31,4684856.33 499158.89,4685089.13 498769.43,4685382.58 498102.21,4685799.08 497869.81,4687231.13 498520.99,4686923.91 498963.52,4687162.89 499430.57,4688263.69 500178.54,4688829.13 500524.25,4689413.33 501244.54,4689203.11 501221.14,4688236.94 501228.92,4687666.39 500986.72,4687318.05 501107.92,4687007.23 501138.24,4686421.74 502136.52,4686417.497 502265.2,4686416.95 502933.18,4686409.61 503986.11,4684882.47 504048.03,4684674.36 504210.79,4683564.07 504384.79,4683105.06 504925.95,4682619 505868.73,4682955.37 507308.99,4683073.77 507549.86,4682874.5 507763.67,4682604.45 508314.25,4681769.82 507621.29,4681245.71 507134.9,4680611.55 507146.44,4680414.96 504252.6,4679172.2 504183.01,4679119.52 503901.03,4678833.23 503223.04,4679291.14 502567.33,4680441.67 502208.97,4681066.88 501520.52,4681281.99 501462.26,4681253.05 500623.93,4681453.42 500453.19,4681804.55 500166.2,4681615.84 499397.48,4681503.74 499409.07,4681546.26 499295.86,4681927.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43516330.56524]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[82]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[84]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17132]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Peralada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Peralada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Peralada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Peralada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="82">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">507654.14,4684237 507188.44,4684732.8 506600.96,4685138.53 506324.47,4685931.68 506554.85,4685930.72 506677.74,4686515.47 506565.77,4686651.07 507540.7,4688684.2 508012.12,4689208.56 508703.47,4689144.83 508848.96,4688588.4 509247.32,4688293.98 510396.67,4688543.55 511010.6,4687988.83 511228.32,4687657.68 510754.3,4686870.41 510816.72,4686445.3 509848.39,4686062.17 509076.59,4686164.41 508728.47,4685455.23 508653.56,4685158.48 508311.16,4684789.66 507654.14,4684237</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13129380.1068]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[83]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[85]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17223]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilajuiga]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilajuiga]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilaju‹ga]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilaju‹ga]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="83">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">478416.58,4683331.58 478255.97,4685154.19 477540.95,4685490.47 476441,4685258.9 475920.86,4686243.73 476188.47,4686515.41 476940.42,4686747.9 477848.02,4686728.16 478172.43,4686999.32 478913.17,4687238.03 479668.92,4687900.99 480281.99,4688070.68 480721.75,4688748.12 481910.46,4689160.9 482636.96,4689014.69 482911.3,4688617.02 484052.77,4688043.2 485561.51,4688030.22 485789.4,4687888.36 483784.77,4684655.31 482674.09,4684074.53 482341.2,4684057.65 479859.5,4683451.3 479438.49,4683414.64 479272.9,4683606.57 478416.58,4683331.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31257159.91011]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[84]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[86]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17171]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Llorenc de la Muga]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Llorenc de la Muga]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Lloren‡ de la Muga]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Lloren‡ de la Muga]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="84">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">490522.39,4684470.05 489900.27,4684725.35 489404.34,4685391.75 489122.21,4685677.98 488227.93,4685839.47 487156.34,4686454.9 486627.61,4686941.29 486583.31,4687553.92 487413.1,4688390.9 488070.45,4688576.67 488476.69,4688459.84 489365.12,4687662.61 489580.89,4687824.62 489658.58,4687417.62 490009.47,4686818.56 490740.58,4686546.88 491292.77,4686302.73 491760.49,4686158.47 491789.64,4685450.26 491582.98,4685377.26 491287.16,4684612.67 490522.39,4684470.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10492212.7859]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[85]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[87]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17029]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Boadella d'Emporda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Boadella d'Emporda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Boadella d'Empord…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Boadella d'Empord…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="85">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428143.95,4684964.51 427531.55,4685096.5 428393.59,4687579.05 429768.49,4687312.79 431705.52,4687344.99 431804.81,4687692.16 432877.92,4687802.9 433613.03,4688334.75 434130.78,4688012.65 435057.27,4687681.59 435401.99,4687445.7 434497.72,4686572 433649.09,4685590.9 433429.16,4685039.51 433652.23,4684667.21 433840.74,4682961.21 434945,4681489.94 434734.07,4679736.12 434104.12,4679667.76 433559.02,4679139.18 432028.82,4678523.06 431817.18,4677970.8 430971.83,4677794.99 431009.07,4678005.05 430698.84,4678230.49 429094.83,4678576.27 428990.7,4679191.34 430139.64,4678882.32 431006.74,4678912.2 430863.34,4679697.63 430611.82,4680162.66 430907.84,4680751.97 431096.1,4682612.21 430456.57,4682854.13 430299.81,4683342.5 429482.68,4683677.61 429512.67,4684819.94 428143.95,4684964.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[41861319.23786]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[86]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[88]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17145]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ribes de Freser]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ribes de Freser]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ribes de Freser]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ribes de Freser]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="86">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">435401.99,4687445.7 435909.7,4688028.11 436529.42,4687296.4 437428.34,4687333.97 438617.07,4686543.22 438979.63,4685785.37 439235.88,4685112.03 439197.72,4684730.38 440181.01,4683642.28 440562.5,4683265.97 440591.49,4682926.57 439533.31,4682127.53 436384.65,4681501.25 435416.33,4681265.44 434945,4681489.94 433840.74,4682961.21 433652.23,4684667.21 433429.16,4685039.51 433649.09,4685590.9 434497.72,4686572 435401.99,4687445.7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30500312.5697]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[87]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[89]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17125]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pardines]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pardines]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pardines]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pardines]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="87">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">482359.37,4683677.13 482341.2,4684057.65 482674.09,4684074.53 483784.77,4684655.31 485789.4,4687888.36 486583.31,4687553.92 486627.61,4686941.29 487156.34,4686454.9 488227.93,4685839.47 489122.21,4685677.98 489404.34,4685391.75 489900.27,4684725.35 490522.39,4684470.05 490163.41,4683606.97 490388.45,4682562.52 489627.77,4681368.26 489181.2,4681519.73 489126.56,4682293.82 488129.85,4682585.71 487595.67,4683070.72 485741.73,4683534.18 482359.37,4683677.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22103906.2848]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[88]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[90]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17196]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Terrades]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Terrades]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Terrades]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Terrades]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="88">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">496216.19,4683599.84 495299.13,4683693.98 495198.02,4683998.51 494180.34,4684402.83 493299.67,4684400.36 492987.8,4684783.7 492344.84,4685216.8 491915.57,4685321.79 491789.64,4685450.26 491760.49,4686158.47 491981.19,4686396.44 492866.5,4686886.85 493882.74,4686705.26 493872.41,4687147.93 494311.59,4687249.38 495257.19,4686756 495398.74,4686766.55 495420.16,4686655.16 495244.2,4685103.62 496216.19,4683599.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8538468.39631]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[89]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[91]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17135]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pont de Molins]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pont de Molins]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pont de Molins]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pont de Molins]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="89">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">467690.81,4674738.35 466868.42,4674919.88 466043.62,4675539.96 465488.69,4674547.77 465337.74,4674382.62 465815.35,4673964.1 465661.67,4673266.4 466062.77,4672797.62 466013.28,4672719.42 464751.31,4672242.9 464329.77,4672501.92 464011.93,4672461.86 463914.14,4672965.21 463378.02,4674216.68 463359.95,4674456.61 462848.88,4674902.9 462661.5,4674810.18 462924.66,4675456.99 462099.58,4675901.28 461538.09,4675945.73 461384.43,4676082.3 460081.68,4677537.7 459362.04,4677769.99 458690.49,4678077.05 458068.84,4678978.13 456422.12,4679636.33 456192.08,4680797.36 455831.55,4681172.5 457623.55,4682078.95 457309.21,4683591.64 458487.08,4683440.08 459242.18,4683829.25 459259.61,4681951.16 459528.73,4681449.68 461169.44,4681103.63 461917.96,4681186.36 462581.28,4681388.98 463544.89,4681816.38 462712.08,4682315.18 460807.65,4682442.34 461240.6,4684156.8 460928.77,4685395.08 460512.44,4686029.45 460972.81,4687110.24 462300.27,4687140.61 463592.22,4685832.01 464127.56,4685406.58 465306.7,4685830.03 465549.19,4686292.68 466495.11,4686475.21 468263.64,4685330.82 468120.32,4684958.31 468526.75,4684505.73 468757.27,4684371.49 469690.84,4684678.54 469612.48,4683724.39 469445.59,4682851.95 467742.2,4682559.14 466420.16,4681898.78 466359.48,4679881.72 465495.64,4679479.11 465535.27,4678799.93 465815.92,4678790.6 466023.39,4678386.9 466636.78,4677988.74 467368.6,4677132.62 467862.9,4675608 467841.56,4675260.32 467690.81,4674738.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[92875753.12885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[90]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[92]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17109]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montagut]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montagut]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montagut]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montagut]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="90">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">514447.04,4684153.14 513950.95,4685487.01 514701.17,4686435.74 515456.89,4686838.6 515842.62,4686485.14 516530.06,4686297.76 516909.59,4686052.09 516902.29,4685088.19 516594.24,4684597.88 516681.24,4684138.92 516176.34,4683525.1 516076.7,4683486.58 514886.54,4683544.42 514447.04,4684153.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7091826.45615]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[91]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[93]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17188]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Selva de Mar, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Selva de Mar, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Selva de Mar, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Selva de Mar, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="91">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338400,4683100 337980,4682750 337870,4682240 337580,4682120 337470,4681580 336260,4681000 335160,4680820 334540,4680940 333370,4680660 333264.065,4679628.896 332830.492,4679307.662 332655.441,4679035.36 332610.057,4678425.921 332812.83,4677452.21 332442.01,4676448.08 331935.68,4676588.67 330464.79,4681949.61 331126.05,4683687.03 331290.11,4683836.56 332138.94,4684147.08 332473.5,4686259.09 333127.31,4686775.71 333274.08,4684943.52 334332.78,4684902.39 335022.51,4684796.69 335461.84,4684198.15 336401.36,4684206.64 337208.56,4683325.92 337355.5,4683743.65 338121.81,4683416.3 338400,4683100</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32007904.29383]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[92]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[94]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25171]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pobla de Segur, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pobla de Segur, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pobla de Segur, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pobla de Segur, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="92">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">499295.86,4681927.21 498871.41,4682328.52 498182,4682117.31 497793.67,4681170.81 497546.3,4680662.26 496914.62,4682088.82 496216.19,4683599.84 495244.2,4685103.62 495420.16,4686655.16 495398.74,4686766.55 496452.86,4686722.6 498102.21,4685799.08 498769.43,4685382.58 499158.89,4685089.13 499056.31,4684856.33 499722.62,4684134.77 499812.01,4683799.47 499720.91,4682267.9 499295.86,4681927.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15382044.3979]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[93]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[95]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17030]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabanes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabanes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="93">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">508314.25,4681769.82 507763.67,4682604.45 507549.86,4682874.5 507825.89,4683244.4 507654.14,4684237 508311.16,4684789.66 508653.56,4685158.48 508728.47,4685455.23 509076.59,4686164.41 509848.39,4686062.17 510816.72,4686445.3 511494.57,4686614.34 511640.57,4686117.63 512240.13,4685881.31 511803.14,4686009.73 511044.14,4685207.4 510798.07,4684516 510311.04,4683991.08 510187.11,4683566.18 509122.16,4681689.52 508794.42,4681983.36 508314.25,4681769.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10334541.21195]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[94]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[96]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17128]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pau]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pau]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pau]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pau]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="94">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">510854.87,4679982.32 510912.18,4680204.03 509122.16,4681689.52 510187.11,4683566.18 510311.04,4683991.08 510798.07,4684516 511044.14,4685207.4 511803.14,4686009.73 512240.13,4685881.31 513171.08,4686114.08 513950.95,4685487.01 514447.04,4684153.14 513862.63,4683318.32 512824.75,4682476.71 511799.04,4681128.41 510854.87,4679982.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16635044.44115]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[95]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[97]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17120]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palau-saverdera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palau-saverdera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palau-saverdera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palau-saverdera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="95">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">507549.86,4682874.5 507308.99,4683073.77 505868.73,4682955.37 504925.95,4682619 504384.79,4683105.06 504210.79,4683564.07 504048.03,4684674.36 503986.11,4684882.47 504369.79,4685146.97 504935,4685402.81 505593.08,4685394.93 506324.47,4685931.68 506600.96,4685138.53 507188.44,4684732.8 507654.14,4684237 507825.89,4683244.4 507549.86,4682874.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8135830.07225]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[96]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[98]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17129]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pedret i Marza]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Marza]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pedret i Marz…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Marz…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="96">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">521113.25,4678154.24 520592.74,4679380.28 520525.07,4679830.98 520818.85,4680135.96 520416.6,4680614.52 520098.89,4680762.87 520314.69,4681649.55 519705.36,4682456.25 519691,4683170.64 521036.26,4683488.29 522096.91,4684481.58 522531.96,4684622.76 523692.24,4685352.42 523237.91,4686856.44 523620.554,4686870.808 523692.429,4686170.808 523934.62,4686559.5 524187.28,4686360.5 524211.37,4686541.5 525243.5,4686159.5 525223.679,4686353.62 525358.054,4686303.62 525461.179,4686217.683 525486.179,4685930.183 525414.304,4685836.433 525701.804,4685623.933 525758.054,4686020.808 526488.25,4685548.5 526579.3,4685351.5 526056.31,4685288.5 526226.804,4684958.307 525758.054,4685298.933 525857.5,4684842.5 525476.804,4684805.182 525373.679,4684567.682 525045.554,4684502.057 524711.179,4684114.557 524761.179,4683823.932 524433.054,4683869.245 524226.804,4684056.745 523916.37,4683980.5 523857.06,4683676 524184.12,4683575.5 523938.62,4683203 524080.31,4683031.5 524026.804,4682742.682 523777.24,4682674.12 524073.46,4682262.5 524431.81,4682234 524641.75,4681714.5 524554.17,4681519.5 524289.304,4681406.745 524208.054,4681281.745 524049.25,4681363 523644.46,4681765.5 523236.179,4681966.12 522951.804,4681812.995 522936.179,4681531.745 523076.804,4681378.62 523151.804,4681362.995 523192.429,4681278.62 522945.554,4681194.245 522921.37,4681090 523227.49,4680499.5 523439.47,4680208.44 523594.93,4680150 523706.93,4679650 523251.65,4678697.5 523286.03,4678233.5 522888,4678087.5 522275.62,4678168 521760.84,4678013 521371.13,4678028.66 521113.25,4678154.24</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">524504.5,4682250 524270.93,4682518.5 524420.554,4682802.057 524520.554,4682764.557 524545.554,4682695.807 524504.5,4682250</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">526755.5,4685713.5 526557.18,4685744.5 526536.179,4685819.245 526412,4685891.5 526311.81,4686051 526416.12,4685989.5 526641,4685936.5 526642.429,4685819.245 526755.5,4685713.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">525564.304,4682358.307 525501.804,4682386.432 525514.304,4682483.307 525583.054,4682498.932 525620.554,4682442.682 525564.304,4682358.307</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">527425.75,4685469.5 527398.5,4685592 527466.55,4685561 527425.75,4685469.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[25393401.58403]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[97]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[99]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17032]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cadaques]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cadaques]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cadaqu‚s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cadaqu‚s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="97">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">496914.62,4682088.82 495761.92,4682226.17 495464.15,4681789.78 494682.95,4681895.95 494466.84,4681307.16 494363.95,4680569.84 494147.88,4680286.6 494032.28,4679973.02 493671.35,4680101.8 493101,4680388.12 492650.4,4680671.38 492383.52,4680622.45 491631.05,4680899.18 490695.39,4680812.28 489627.77,4681368.26 490388.45,4682562.52 490163.41,4683606.97 490522.39,4684470.05 491287.16,4684612.67 491582.98,4685377.26 491789.64,4685450.26 491915.57,4685321.79 492344.84,4685216.8 492987.8,4684783.7 493299.67,4684400.36 494180.34,4684402.83 495198.02,4683998.51 495299.13,4683693.98 496216.19,4683599.84 496914.62,4682088.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21602137.41454]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[98]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[100]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17093]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llers]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llers]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llers]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llers]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="98">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">413087.42,4679308.89 413118.26,4680195.32 413291.71,4681262.09 413627.77,4681283.78 413716.68,4681931.3 413567.81,4683137.9 412703.45,4684025.22 412950.5,4684674.05 413722.84,4685408.4 414071.56,4685114.44 416151.06,4683719.61 417030.16,4683825.34 417803.7,4684355.16 418743.09,4684652.81 419720.41,4684587.32 420893.35,4684093.97 421428.87,4683644.52 422270.83,4683165.3 422935.63,4682739.48 423469.18,4682680.43 423181.79,4681861.95 422043.51,4681301.65 421877.88,4680888.05 421176.55,4680316.61 420750.72,4679240.99 420007.7,4678470.21 420033.57,4678309.8 419177.8,4678865.11 418207.52,4678638.08 417762.01,4678910.73 415111.49,4679114.98 414062.96,4679098.01 413087.42,4679308.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47012256.32191]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[99]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[101]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08052]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellar de n'Hug]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellar de n'Hug]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellar de n'Hug]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellar de n'Hug]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="99">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428990.7,4679191.34 428939.86,4679829.78 428280.51,4680714.14 427868.15,4680845.59 426234.29,4681482.65 425702.11,4681659.21 425757.25,4681936.71 426176.66,4683137.01 426837.95,4683537.81 427921.57,4684397.49 428143.95,4684964.51 429512.67,4684819.94 429482.68,4683677.61 430299.81,4683342.5 430456.57,4682854.13 431096.1,4682612.21 430907.84,4680751.97 430611.82,4680162.66 430863.34,4679697.63 431006.74,4678912.2 430139.64,4678882.32 428990.7,4679191.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18660453.4174]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[100]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[102]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17037]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Campelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Campelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Campelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Campelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="100">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">384332.07,4682642.09 383831.7,4680683.44 384032.06,4680212.74 383095.6,4679648.69 382301.66,4679411.32 381756.95,4679091.3 380845.99,4679074.05 380298.77,4678397.59 379126.8,4677956.22 378410.19,4674573.65 378512.41,4673686.97 378439.2,4672295.89 378033.42,4672034.69 377861.5,4671489.09 377470.36,4671863.17 377187.37,4671745.84 376010.33,4671527.13 375709.84,4671582.21 375314.89,4672480.87 373995.3,4672509.76 373295.7,4672792.05 373211.87,4673572.38 373008.38,4673675.71 372047.07,4673833.76 371781.03,4674382.88 371059.12,4675510.22 370513.89,4675897.53 369806.89,4675977.87 368781.8,4676174.88 369266.76,4676685.15 368735.51,4677495.06 368785.42,4678388.41 368359.53,4678642.94 368329.58,4679285.08 368753.81,4679198.57 369386.9,4679847.13 369966.88,4679555.84 370264.15,4679679.36 370832.6,4680083.19 372632.33,4680718.7 374210.95,4681221.68 374416.45,4681553.05 374669.14,4682385.69 374159.34,4683073.16 374278.76,4683262.55 376148.68,4684432.17 377917.26,4684786.43 379436.48,4683534.19 379839.68,4683334.87 380681.04,4683184.3 380835.75,4682311.1 381669.88,4682346.47 382738.87,4682750.09 383069.59,4682699.14 384332.07,4682642.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[106004157.48545]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[101]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[103]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25909]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vansa i Fornols, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sorribes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vansa i F¢rnols, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sorribes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="101">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">510854.87,4679982.32 511799.04,4681128.41 512824.75,4682476.71 513862.63,4683318.32 514447.04,4684153.14 514886.54,4683544.42 516076.7,4683486.58 516845.14,4683211.24 517147.4,4683036.23 517674.55,4681955.19 519691,4683170.64 519705.36,4682456.25 520314.69,4681649.55 520098.89,4680762.87 520416.6,4680614.52 520818.85,4680135.96 520525.07,4679830.98 520592.74,4679380.28 521113.25,4678154.24 521172.4,4677497 521053.53,4677326 521186.81,4677068.5 521545.25,4677144 521784.65,4677144 522019.71,4676903 521853.09,4676495.5 521621,4676382.5 521091.37,4676539 520506.87,4677010.5 520217.81,4677686 519805.34,4677866 519641.43,4677515 519002.95,4677917.84 518807.45,4677678.71 518941.61,4677094 518785.09,4676937.5 518955.25,4676720 518584.3,4676570 518621.75,4676413.5 518276.804,4676177.057 518101.804,4675827.057 517876.804,4676105.182 517236.179,4676430.182 517273.679,4676567.682 516916.71,4676767.5 516413.06,4676931 516181.61,4677482 515763.03,4677305 515223.679,4677272.37 515076.804,4677345.807 515011.179,4677589.557 514945.554,4678583.307 514853.35,4678730.68 514484.53,4678992.03 514264.304,4679302.057 513873.87,4679370.21 513023.679,4679086.432 512564.304,4678811.432 512460.49,4678712.86 511532.04,4679528.68 511410.21,4679834.76 511006.44,4679856.34 510854.87,4679982.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[46335809.35788]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[102]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[104]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17152]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Roses]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Roses]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Roses]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Roses]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="102">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">481959.99,4675279.37 481109,4676414.74 481293.94,4677989.94 479482.66,4678790.68 477932.95,4679303.13 478081.63,4679813.99 477333.72,4680766.19 476940.32,4682149.61 476406.81,4682864.53 477077.28,4683257.25 478416.58,4683331.58 479272.9,4683606.57 479438.49,4683414.64 479859.5,4683451.3 482341.2,4684057.65 482359.37,4683677.13 481955.77,4683136.95 482540.73,4682826.65 483886.44,4680668.23 483582.53,4680368.2 482961.06,4680243.91 482733.78,4679931.4 482262.04,4679807.8 481806.9,4680005.97 481950.63,4679525.88 483049.84,4678262.31 482854.52,4677761.58 483102.7,4676988.26 483764.33,4676302.85 484246.93,4675882.26 484720.13,4676217.65 485233.25,4676401.74 485546.25,4676117.12 486419.54,4676149.44 486587.35,4675098.12 486955.2,4674482.02 487156.22,4673916.67 486983.04,4672916.16 486490.38,4672422.72 486011.75,4672220.15 484674.25,4672096.7 484180.19,4672537.42 482450.55,4672095.88 482212.5,4672424.36 482313.68,4672608.67 481940.59,4673619.04 481633.46,4674681.7 481959.99,4675279.37</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">488603.85,4671814.68 488156.56,4670723.69 487769.18,4670211.79 487522.08,4670013.98 486548.42,4669912.85 485898.29,4670326.9 486329.33,4671224.75 486353.22,4672182.22 486458.33,4672272.55 487026.58,4672415.43 487759.11,4672499.74 488603.85,4671814.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[55334193.76761]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[103]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[105]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17031]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabanelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabanelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabanelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabanelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="103">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">483886.44,4680668.23 482540.73,4682826.65 481955.77,4683136.95 482359.37,4683677.13 485741.73,4683534.18 487595.67,4683070.72 488129.85,4682585.71 489126.56,4682293.82 489181.2,4681519.73 488401.93,4681100.94 488666.35,4680036.24 488195.23,4677309.19 487926.37,4677219.32 487982,4677034.73 487522.89,4677072.42 487508.62,4677358.9 487258.94,4677468.822 487016.752,4677421.947 486808.27,4677236.73 486758.94,4677468.822 486897.57,4677554 486641.67,4677781.27 485704.38,4679166.56 484898.28,4679921.77 484393.84,4680667.71 483886.44,4680668.23</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24880756.74875]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[104]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[107]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17051]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cistella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cistella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cistella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cistella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="104">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">399452.1,4682973.01 400259.74,4682347.43 401110.13,4682606.8 402159.07,4681844.76 403056.15,4681565.18 403750.55,4681871.15 403732.29,4681422.46 403366.15,4680119.46 402777.93,4679006.37 402867.91,4678641.33 403312.74,4678268.8 403359.63,4677726.31 404269.26,4677262.45 404773.45,4676938.04 404266.69,4676460.65 404028.29,4676010.86 403713.65,4676201.14 402971.4,4676406.72 402344.39,4676845.68 401739.61,4676958.88 401001.68,4677329 400803.37,4677407.58 400298.6,4677466.94 397845.93,4678247.95 398019.52,4679017.82 397723.42,4679533.04 396169.55,4679700.59 396279.37,4680003.52 395772.57,4680076.91 395887.29,4680442.33 395466.28,4681910.26 394409.13,4681869.45 394431.8,4682206.5 395718.87,4682272.28 395791.89,4682317.96 396350.28,4683076.29 397587.05,4683169.99 398807.13,4683114.76 399452.1,4682973.01</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[36668999.9161]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[105]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[108]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08093]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gisclareny]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Barri del Roser]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gisclareny]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Barri del Roser]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="105">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">466636.78,4677988.74 466023.39,4678386.9 465815.92,4678790.6 465535.27,4678799.93 465495.64,4679479.11 466359.48,4679881.72 466420.16,4681898.78 467742.2,4682559.14 469445.59,4682851.95 470855.72,4683106.32 471824.87,4682905 472292.54,4681991.42 472682.23,4680322.69 472245.55,4679769.99 472287.46,4679521.27 473004.8,4679320.86 472923.64,4678795.16 473163.14,4678619.76 473117.78,4678332.56 473393.28,4677964.87 473670.22,4677899.69 473242.55,4677472.86 472762.86,4676838.85 472317.64,4675727.84 472143.68,4675466.85 472257.12,4675220.85 472142.94,4674477.84 471918.12,4673722.73 471380.57,4674178.16 471430.73,4674380.22 470850.4,4674709.72 470619.53,4675011.62 470308.91,4676032.87 470409.13,4676151.61 470035.53,4676889.24 469788.78,4677885.98 470313.72,4679192.74 469566.18,4679683.33 468758.5,4679268.01 467893.72,4678771.37 466636.78,4677988.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35505127.41025]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[106]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[109]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17154]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sales de Llierca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sales de Llierca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sales de Llierca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sales de Llierca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="106">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">331720.4,4674829.59 332418.99,4676088.09 332442.01,4676448.08 332812.83,4677452.21 332610.057,4678425.921 332655.441,4679035.36 332830.492,4679307.662 333264.065,4679628.896 333370,4680660 334540,4680940 335160,4680820 336260,4681000 337470,4681580 337580,4682120 337870,4682240 337980,4682750 338400,4683100 339768.14,4682999.77 340750.29,4682446.41 341626.25,4682441.53 342785.6,4682298.75 344254.04,4681767.48 344416.94,4681738.28 344282.02,4682344.67 344684.49,4682144.86 345271.46,4681675.3 345967.66,4680892.58 347280.09,4680570.11 347627.54,4680435.09 347586.21,4680274.59 348159.28,4679001.47 346690.04,4678047.9 346702.75,4677308.94 345496.56,4677111.05 344892.27,4676417.41 343131.78,4675543.61 342645.22,4674608.91 342723.56,4673722.66 343161.77,4673106.06 341372.62,4672271.52 340116.23,4672396.5 339943.86,4672160 339169.66,4671748.24 338013.85,4671903.93 337402.05,4672041.21 336290.99,4672530.27 335203.36,4672259.23 334142.15,4672393.3 333514.53,4672509.37 332921.17,4673222.44 332189.57,4673955.18 331720.4,4674829.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">331935.68,4676588.67 330994.19,4677013.47 329984.61,4677339.07 329410,4678010 328719.06,4679626.03 328486.24,4678641.27 328256.77,4678184.38 326801.37,4678686.63 325454.68,4678851.11 324421.55,4679726.1 323750.71,4680850.88 323268.35,4681119.37 323315.28,4681629.67 322998.59,4682755.12 323231.38,4683601.22 323794.87,4684395.03 324426.15,4684660.76 324831.94,4685348.19 325993.98,4686119.69 326169.75,4685971.28 326660.32,4685141.37 327750.15,4684982.31 328590.15,4684478.04 329417.88,4684293.9 329975.94,4684646.57 330048.59,4684121.73 331126.05,4683687.03 330464.79,4681949.61 331935.68,4676588.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[167539983.10574]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[107]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[110]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25161]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Conca de Dalt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pont de Claverol, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Conca de Dalt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pont de Claverol, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="107">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433583.17,4677146.97 433303.48,4677952.25 431817.18,4677970.8 432028.82,4678523.06 433559.02,4679139.18 434104.12,4679667.76 434734.07,4679736.12 434945,4681489.94 435416.33,4681265.44 436384.65,4681501.25 439533.31,4682127.53 440591.49,4682926.57 443587.69,4683016.39 443494.47,4681723.69 443773.48,4681060.25 445131.23,4680663.45 444064.33,4680291.54 443546.19,4680041.4 441775.49,4678785.75 441036.94,4678657.65 440139.45,4678864.61 440147.82,4678250.93 439613.67,4677985.28 439638.59,4677750.78 439421.68,4677721.47 438653.1,4676815.3 437939.17,4676791.31 437153.94,4676324.2 436697.89,4676507.03 436411.83,4676176.05 435242.66,4676178.73 433918.07,4676855.96 433583.17,4677146.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[45570606.90599]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[108]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[111]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17112]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ogassa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ogassa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ogassa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ogassa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="108">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">384332.07,4682642.09 385404.92,4682671.75 387967.78,4682944.79 388903.5,4682621.88 389728.3,4681979.61 390539,4681963.89 392054.06,4681552.72 392338.63,4680067.49 391587.44,4679562.46 391595.72,4679276.81 390412.5,4679179.83 389647.21,4678911.05 389456.66,4678970.43 387743.7,4678344.24 387398.65,4677959.36 386709.72,4677367.23 386611.03,4676627.23 385389.86,4674533.3 385627.39,4673231.04 384334.29,4673162.1 382818.36,4673583.84 381707.41,4674030.94 380007.5,4674173.47 378512.41,4673686.97 378410.19,4674573.65 379126.8,4677956.22 380298.77,4678397.59 380845.99,4679074.05 381756.95,4679091.3 382301.66,4679411.32 383095.6,4679648.69 384032.06,4680212.74 383831.7,4680683.44 384332.07,4682642.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[68789870.28431]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[109]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[112]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25910]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Josa i Tuixen]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tuixen]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Josa i Tuix‚n]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tuix‚n]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="109">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">404773.45,4676938.04 404269.26,4677262.45 403359.63,4677726.31 403312.74,4678268.8 402867.91,4678641.33 402777.93,4679006.37 403366.15,4680119.46 403732.29,4681422.46 403750.55,4681871.15 403056.15,4681565.18 402159.07,4681844.76 401110.13,4682606.8 400259.74,4682347.43 399452.1,4682973.01 400288.04,4683424.01 400938.81,4683394.44 402194.65,4682326.59 402741.77,4682081.09 403408.87,4682362.31 404982.1,4681430.92 405553.84,4681320.3 406765.13,4681814.66 407634.9,4681823.58 407966.63,4682220.54 407236.58,4683829.47 407363.41,4684500.82 407252.54,4685401.08 407485.75,4685360.92 408025.32,4685647.04 408619.54,4685786.76 408856.14,4686170.77 409916.8,4686386.01 411159.96,4685750.64 412653.02,4685614.11 412950.5,4684674.05 412703.45,4684025.22 412198.14,4683372.8 410933.35,4683830.39 409553.34,4683440.98 409229.28,4682153.81 409185.92,4681439.91 409000.07,4681515.46 408640.96,4680755.31 407894.75,4680002.98 407852.1,4678707.92 407610.51,4678498.37 407070.01,4677679.12 407409.17,4677534.25 407444.41,4676780.91 406897.1,4676966.91 406820.19,4676740.61 405859.25,4676607.85 404773.45,4676938.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">390539,4681963.89 390734.54,4682348.68 391398.19,4682478.37 392297.29,4682410.76 392866.95,4682415.11 393072.28,4682257.61 394067.77,4682689.56 394329.41,4682256.03 394431.8,4682206.5 394409.13,4681869.45 392054.06,4681552.72 390539,4681963.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[42836915.87059]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[110]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[113]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08016]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Baga]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Baga]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bag…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bag…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="110">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">421952.26,4674744.02 421250.72,4674966.01 420298.74,4674578.11 420077.83,4674393.54 419525.74,4675536.35 419081.8,4676208.16 419657.63,4676588.76 419858.17,4677198.69 420055.9,4678274.04 420033.57,4678309.8 420007.7,4678470.21 420750.72,4679240.99 421176.55,4680316.61 421877.88,4680888.05 422043.51,4681301.65 423181.79,4681861.95 423469.18,4682680.43 423663.39,4682594.53 424301.13,4682108.31 424749.01,4682136.74 425702.11,4681659.21 426234.29,4681482.65 427868.15,4680845.59 427359.61,4679502.46 426945.28,4679013.94 426015.58,4677748.56 425585.67,4677485.4 425761.41,4676774.67 425487.57,4676549.38 425424.09,4674971.73 424013.65,4674308.45 423427.3,4674313.04 421952.26,4674744.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43367546.06524]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[111]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[114]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17080]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gombren]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gombren]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[GombrŠn]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[GombrŠn]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="111">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">346702.75,4677308.94 346690.04,4678047.9 348159.28,4679001.47 347586.21,4680274.59 347627.54,4680435.09 348241.54,4680956.13 348964.94,4680975 349792.98,4680887.69 350537.25,4680551.14 351876.59,4680488.29 352275.39,4681050.55 352721.12,4681226.95 353636.87,4680950.42 354646.74,4681060.7 355384.76,4680694.39 356263.15,4680818.57 356104.47,4681071.66 356378.65,4682026.95 357169.92,4682006.71 357561.42,4682408.17 358568.16,4682651.68 359145.38,4682264.53 359083.71,4681996.78 359130.7,4681232.34 359880.77,4680613.65 360320.49,4679961.79 359983.78,4679790.91 360048.11,4679322.11 360296.42,4678902.92 360721.69,4678436.94 361737.83,4678224.42 360882.7,4676244.24 361164.43,4675886.04 360369.04,4675541.37 359747.29,4674569.12 359011.53,4674695.02 358783.07,4674615.23 357830.74,4674997.69 355899.77,4675087.41 354936.79,4674844.06 353444.94,4674644.94 352145.72,4674845.72 350003.62,4675466.64 348732.05,4676015.81 348490.98,4676060.16 347007.38,4676711.76 346702.75,4677308.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">361477.78,4673334.1 361050.39,4672910.22 361121.86,4672793.29 360896.61,4672674.21 360679.909,4673053.579 360378.72,4673164.69 360037.71,4673587.03 360383.034,4673639.517 360606.37,4673530.87 360804.909,4673397.329 361140.847,4673483.267 361477.78,4673334.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[80895599.28589]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[112]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[115]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25061]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cab¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cab¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="112">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">499397.48,4681503.74 499065.13,4680871.45 498167.85,4680523.17 497546.3,4680662.26 497793.67,4681170.81 498182,4682117.31 498871.41,4682328.52 499295.86,4681927.21 499409.07,4681546.26 499397.48,4681503.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[2090992.7082]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[113]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[116]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17214]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilabertran]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilabertran]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilabertran]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilabertran]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="113">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">363796.39,4679060.13 363852.207,4679529.883 364114.707,4679779.883 364461.53,4680184.49 364709.57,4680813.54 364566.86,4681890.33 365476.45,4683620.47 365104.89,4684084.93 365264.16,4684535.14 364902.96,4684700.98 363811.58,4685377.77 363519.25,4684939.3 363069.7,4685338.55 362554.45,4686310.98 362325.49,4687470.97 362544.3,4687997.29 363201.19,4688311.66 363999.46,4688399.97 363940.03,4689150.05 364735.84,4689538.7 366762.1,4688842.02 368714.68,4689093.87 369631.8,4688120.25 370707.75,4688470.04 371573.48,4689428.14 371740.45,4689527.35 372304.95,4689691.47 372528.52,4689582.36 373406.08,4688357.74 373451.49,4687873.21 374134.78,4686041.19 373624.37,4685680.65 373616.72,4685381.09 372804.73,4685092.04 372801.56,4683762.74 374159.34,4683073.16 374669.14,4682385.69 374416.45,4681553.05 374210.95,4681221.68 372632.33,4680718.7 370832.6,4680083.19 370264.15,4679679.36 369966.88,4679555.84 369386.9,4679847.13 368753.81,4679198.57 368329.58,4679285.08 368359.53,4678642.94 368785.42,4678388.41 368735.51,4677495.06 369266.76,4676685.15 368781.8,4676174.88 366897.17,4676255.16 366044.5,4676664.69 365478.81,4677016.01 364938.63,4677015.15 364322.34,4677137.8 364185.47,4678084.41 363586.15,4678469.36 363796.39,4679060.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">359083.71,4681996.78 360078.8,4681748.97 361396.44,4681805.28 362615.81,4682238.03 363446.93,4682058.64 363579.29,4681925.9 363437.96,4681127.55 362959.84,4680811.37 362277.68,4680440.34 359880.77,4680613.65 359130.7,4681232.34 359083.71,4681996.78</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[107814084.22959]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[114]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[117]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25185]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ribera d'Urgellet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pla de Sant Tirs, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ribera d'Urgellet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pla de Sant Tirs, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="114">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">502567.33,4680441.67 502100.98,4680473.56 501161.35,4680019.88 500604.23,4679882.53 500033.64,4679376.07 498998.21,4679053.82 498647.77,4678771.49 498450.86,4678082.34 498524.46,4677020.89 497965.4,4676958.56 497722.53,4676377.9 497583.97,4676430.74 497542.28,4677171.28 497037.7,4677411.29 496964.46,4677623.73 496222.72,4678836.61 495959.94,4678896.91 495262.4,4679539.96 494863.28,4680236.22 494363.95,4680569.84 494466.84,4681307.16 494682.95,4681895.95 495464.15,4681789.78 495761.92,4682226.17 496914.62,4682088.82 497546.3,4680662.26 498167.85,4680523.17 499065.13,4680871.45 499397.48,4681503.74 500166.2,4681615.84 500453.19,4681804.55 500623.93,4681453.42 501462.26,4681253.05 501520.52,4681281.99 502208.97,4681066.88 502567.33,4680441.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19268348.14981]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[115]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[118]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17066]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Figueres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Figueres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Figueres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Figueres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="115">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">445796.61,4680612.58 446158.4,4681135.51 446985.37,4681455.93 447643.08,4681984.85 448098.65,4681857.03 448264.97,4680059.67 448477.33,4679647.53 448568.37,4679582.37 448790.99,4679320.25 449179.54,4678543.15 448777.23,4678183.82 448213.32,4677989.55 447498.12,4677633.67 446569.73,4677341.39 446512.99,4677472.06 446857.84,4677903.53 446663.96,4678293.71 446442.17,4678514.23 446222.28,4679855.17 445796.61,4680612.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8737530.32055]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[116]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[119]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17177]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pau de Seguries]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pau de Seguries]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pau de Seg£ries]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pau de Seg£ries]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="116">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">505624.13,4673455.51 505479.27,4674378.81 505302.01,4674493.92 504977.92,4675304.65 505347.01,4676099.39 505100.67,4676490.67 505346.7,4676928.91 504433.16,4678591.72 504183.01,4679119.52 504252.6,4679172.2 507146.44,4680414.96 507134.9,4680611.55 507621.29,4681245.71 508314.25,4681769.82 508794.42,4681983.36 509122.16,4681689.52 510912.18,4680204.03 510854.87,4679982.32 511006.44,4679856.34 511410.21,4679834.76 511532.04,4679528.68 512460.49,4678712.86 511611.179,4677894.245 511214.304,4677384.87 510389.12,4676163.5 509829.929,4674798.932 509452.53,4673454 509283.09,4672573.16 508487.59,4672688.08 506875.05,4673972.08 506120.53,4674247.4 505734.76,4674028.85 505812.76,4673412.93 505624.13,4673455.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[42505137.43713]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[117]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[120]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17047]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castello d'Empuries]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castello d'Empuries]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castell¢ d'Emp£ries]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castell¢ d'Emp£ries]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="117">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395885.03,4671784.67 394397.15,4672473.27 393910.88,4671947.52 393370.31,4671872.67 391983.58,4672839.51 391574.7,4673753.13 391106.64,4673746.01 391455.93,4675521.07 391232.45,4675622.77 393110.72,4676752.77 393078.44,4677404.04 392684.16,4677807.22 392064.59,4678254.94 391595.72,4679276.81 391587.44,4679562.46 392338.63,4680067.49 392054.06,4681552.72 394409.13,4681869.45 395466.28,4681910.26 395887.29,4680442.33 395772.57,4680076.91 396279.37,4680003.52 396169.55,4679700.59 397723.42,4679533.04 398019.52,4679017.82 397845.93,4678247.95 400298.6,4677466.94 400803.37,4677407.58 401001.68,4677329 400886.87,4677048.03 400680.83,4676079.59 400276.32,4674574.43 399927.33,4673688.3 398739.07,4673629.71 398412.53,4672207.53 398538.16,4672137.31 399109,4671613.53 398983.56,4671273.84 397915.26,4670918.87 397724.36,4670705.54 397349.07,4670690.08 396677.48,4671318.81 395885.03,4671784.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[67213455.54119]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[118]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[121]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08190]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Saldes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Saldes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Saldes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Saldes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="118">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">489181.2,4681519.73 489627.77,4681368.26 490695.39,4680812.28 491631.05,4680899.18 491886.85,4679731.97 491467.39,4679105.66 491724.01,4678060.39 491479.35,4677576.35 488928.23,4677008.4 488545.62,4677068.96 488195.23,4677309.19 488666.35,4680036.24 488401.93,4681100.94 489181.2,4681519.73</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12375027.27715]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[119]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[122]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17228]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanant]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanant]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanant]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanant]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="119">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">368781.8,4676174.88 369806.89,4675977.87 370513.89,4675897.53 371059.12,4675510.22 371781.03,4674382.88 372047.07,4673833.76 373008.38,4673675.71 373211.87,4673572.38 373295.7,4672792.05 373995.3,4672509.76 375314.89,4672480.87 375709.84,4671582.21 376010.33,4671527.13 377187.37,4671745.84 377470.36,4671863.17 377861.5,4671489.09 376216.31,4670162.31 374217.81,4668755.05 371916.88,4667338.49 370706.24,4668273.42 370452,4668830 369293.59,4668893.59 367669.02,4667961.78 366890.25,4667990.11 366295.55,4668308.83 365165.57,4667935.38 364623.9,4667980.53 363755.69,4668386.74 364229.63,4669072.59 363341.16,4670614.67 363675.78,4671141.95 363674.04,4672358.68 362845.32,4672195.64 362314.26,4671650.07 362256.87,4672061.7 362393.61,4672540.55 362467.52,4673964.8 362654.89,4675050.02 362753.09,4676239.37 363330.32,4676656.52 361737.83,4678224.42 360721.69,4678436.94 360296.42,4678902.92 360048.11,4679322.11 359983.78,4679790.91 360320.49,4679961.79 359880.77,4680613.65 362277.68,4680440.34 362959.84,4680811.37 363437.96,4681127.55 364246.16,4681234.15 364321.96,4680425.39 363661.582,4679508.008 363642.832,4679345.508 363674.082,4679154.883 363796.39,4679060.13 363586.15,4678469.36 364185.47,4678084.41 364322.34,4677137.8 364938.63,4677015.15 365478.81,4677016.01 366044.5,4676664.69 366897.17,4676255.16 368781.8,4676174.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[100960740.7965]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[120]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[123]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25908]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Figols i Alinya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Figols]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[F¡gols i Aliny…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[F¡gols]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="120">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">331720.4,4674829.59 329584.08,4673666.87 328805.62,4674149.1 328467.63,4674154.14 327732.91,4675072.48 327568.03,4675499.37 327684.85,4675897.83 327146.99,4676284.34 325917.16,4678104.34 324796.38,4678530.09 323743.66,4679439.62 323409.68,4680463.48 322766.07,4680816.24 322651.98,4680959.24 323268.35,4681119.37 323750.71,4680850.88 324421.55,4679726.1 325454.68,4678851.11 326801.37,4678686.63 328256.77,4678184.38 328486.24,4678641.27 328719.06,4679626.03 329410,4678010 329984.61,4677339.07 330994.19,4677013.47 331935.68,4676588.67 332442.01,4676448.08 332418.99,4676088.09 331720.4,4674829.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20803416.76944]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[121]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[124]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25190]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Salas de Pallars]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Salas de Pallars]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sal…s de Pallars]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sal…s de Pallars]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="121">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">491724.01,4678060.39 491467.39,4679105.66 491886.85,4679731.97 491631.05,4680899.18 492383.52,4680622.45 492650.4,4680671.38 493101,4680388.12 493671.35,4680101.8 494032.28,4679973.02 494147.88,4680286.6 494658.6,4679401.29 494679.72,4678810.49 494088.1,4676927.8 494305.37,4676163.07 493506.49,4675797.92 492910.78,4675289.1 492698.73,4675254.73 492633.49,4674966.9 492598.29,4675063.92 492096.85,4675107.93 491698.87,4675363.63 491996.26,4675896.58 492138.72,4677208.31 491724.01,4678060.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12516112.3454]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[122]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[125]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17012]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Avinyonet de Puigventos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Avinyonet de Puigventos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Avinyonet de Puigvent¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Avinyonet de Puigvent¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="122">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">425424.09,4674971.73 425487.57,4676549.38 425761.41,4676774.67 425585.67,4677485.4 426015.58,4677748.56 426945.28,4679013.94 427359.61,4679502.46 427868.15,4680845.59 428280.51,4680714.14 428939.86,4679829.78 428990.7,4679191.34 429094.83,4678576.27 430698.84,4678230.49 431009.07,4678005.05 430971.83,4677794.99 431817.18,4677970.8 433303.48,4677952.25 433583.17,4677146.97 433257.21,4676455.94 432657.45,4675941 432046.63,4674938.31 431005.2,4674427.4 430255.66,4674736.1 429659.58,4674447.9 429291.91,4673750.14 428874.39,4673326.02 428207.32,4673457.14 427795.53,4674121.6 426974.89,4674262.03 426317.73,4674605.73 425424.09,4674971.73</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32206124.88675]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[123]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[126]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17036]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Campdevanol]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Campdevanol]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Campdev…nol]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Campdev…nol]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="123">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">483886.44,4680668.23 484393.84,4680667.71 484898.28,4679921.77 485704.38,4679166.56 486641.67,4677781.27 486897.57,4677554 486758.94,4677468.822 486808.27,4677236.73 486419.54,4676149.44 485546.25,4676117.12 485233.25,4676401.74 484720.13,4676217.65 484246.93,4675882.26 483764.33,4676302.85 483102.7,4676988.26 482854.52,4677761.58 483049.84,4678262.31 481950.63,4679525.88 481806.9,4680005.97 482262.04,4679807.8 482733.78,4679931.4 482961.06,4680243.91 483582.53,4680368.2 483886.44,4680668.23</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13784428.07534]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[124]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[127]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17088]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llado]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llado]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llad¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llad¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="124">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">444999.27,4673593.89 444095.46,4673598.73 442458.56,4673382.34 441094.34,4673412.02 439753.23,4673382.93 439011.36,4672892.57 437049.88,4673624.89 436713.4,4674362.86 436931.99,4674882.58 436411.83,4676176.05 436697.89,4676507.03 437153.94,4676324.2 437939.17,4676791.31 438653.1,4676815.3 439421.68,4677721.47 439638.59,4677750.78 439613.67,4677985.28 440147.82,4678250.93 440139.45,4678864.61 441036.94,4678657.65 441775.49,4678785.75 443546.19,4680041.4 444064.33,4680291.54 445131.23,4680663.45 445796.61,4680612.58 446222.28,4679855.17 446442.17,4678514.23 446663.96,4678293.71 446857.84,4677903.53 446512.99,4677472.06 446569.73,4677341.39 445973.15,4676963.16 446076.42,4676143.42 446052.32,4675806.87 446576.69,4675382.2 447991.59,4675494.64 448603.9,4675254.05 447889.3,4674108.01 447442.14,4674123.26 445882.66,4673725.98 444999.27,4673593.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[53717790.90826]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[125]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[128]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17167]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Joan de les Abadesses]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Joan de les Abadesses]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Joan de les Abadesses]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Joan de les Abadesses]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="125">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495161.36,4675930.52 494982.09,4676002.6 494305.37,4676163.07 494088.1,4676927.8 494679.72,4678810.49 494658.6,4679401.29 494147.88,4680286.6 494363.95,4680569.84 494863.28,4680236.22 495262.4,4679539.96 495959.94,4678896.91 496222.72,4678836.61 496964.46,4677623.73 497037.7,4677411.29 497542.28,4677171.28 497583.97,4676430.74 495765.44,4676299.55 495161.36,4675930.52</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8330760.8324]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[126]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[129]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17221]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilafant]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilafant]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilafant]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilafant]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="126">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">501144.98,4677985.14 500645.56,4678487.49 500262.45,4678953.71 500033.64,4679376.07 500604.23,4679882.53 501161.35,4680019.88 502100.98,4680473.56 502567.33,4680441.67 503223.04,4679291.14 503901.03,4678833.23 503039.09,4678282.88 502429.17,4678249.55 501505.15,4677726.79 501144.98,4677985.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5976683.595]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[127]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[130]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17230]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vila-sacra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vila-sacra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vila-sacra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vila-sacra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="127">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">474432.68,4673348.7 474297.87,4673993.06 474242.94,4675315.93 473597.15,4675203.73 472856.46,4675586.47 472143.68,4675466.85 472317.64,4675727.84 472762.86,4676838.85 473242.55,4677472.86 473670.22,4677899.69 473393.28,4677964.87 473117.78,4678332.56 473163.14,4678619.76 473262.13,4679097.57 473233.77,4679259.78 474532.73,4679316.57 473504.32,4680093.89 473894.89,4680289.17 475562.71,4680111.24 476037,4679504.62 475701.92,4678824.54 475463.6,4678161.54 475710.62,4677782.44 476793.33,4677925.09 477169.8,4677375.44 477622.02,4677896.85 477781.31,4678998.53 477932.95,4679303.13 479482.66,4678790.68 481293.94,4677989.94 481109,4676414.74 481959.99,4675279.37 481658.6,4675350.33 480764.58,4675203.08 480193.09,4675442.59 479543.93,4675149.5 478203.42,4676026.16 477767.31,4676062.92 477399.21,4675134.06 477466.22,4674446.83 476883.35,4673801.85 477194.35,4673524.96 477563.35,4672677.78 477231.65,4671830.68 476717.59,4672019.32 476869.71,4672429.54 476312.16,4673286.32 475970.42,4673277.95 475366.81,4673434.24 475002.33,4673215.81 474432.68,4673348.7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35994067.94871]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[128]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[131]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17021]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Beuda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Beuda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Beuda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Beuda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="128">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">467841.56,4675260.32 467862.9,4675608 467368.6,4677132.62 466636.78,4677988.74 467893.72,4678771.37 468758.5,4679268.01 469566.18,4679683.33 470313.72,4679192.74 469788.78,4677885.98 470035.53,4676889.24 470409.13,4676151.61 470308.91,4676032.87 470619.53,4675011.62 470145.72,4675340.67 468904.88,4674753.66 467841.56,4675260.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11317716.85355]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[129]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[132]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17200]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tortella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tortella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tortell…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tortell…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="129">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">501067.44,4676029.27 499874.66,4675615.02 497471.52,4675924.27 497436.06,4676258.76 497583.97,4676430.74 497722.53,4676377.9 497965.4,4676958.56 498524.46,4677020.89 498450.86,4678082.34 498647.77,4678771.49 498998.21,4679053.82 500033.64,4679376.07 500262.45,4678953.71 500645.56,4678487.49 501144.98,4677985.14 500820.05,4677788.4 501180.55,4677415.93 500783.24,4676616.89 501067.44,4676029.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8834151.3677]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[130]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[133]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17005]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Far d'Emporda, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Far d'Emporda, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Far d'Empord…, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Far d'Empord…, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="130">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">414661.26,4672549.28 413570.33,4672787.71 412677.02,4673089.39 412174.82,4673106.17 412110.42,4673905.97 412420.65,4674248.46 412272.44,4675396.18 411939.57,4675825.96 411379.56,4675947.87 410861.4,4675866.24 410523.78,4675949.76 410617.47,4677462.79 410563.67,4677887.31 412783.47,4679314.27 413087.42,4679308.89 414062.96,4679098.01 415111.49,4679114.98 417762.01,4678910.73 418207.52,4678638.08 419177.8,4678865.11 420033.57,4678309.8 420055.9,4678274.04 419858.17,4677198.69 419657.63,4676588.76 419081.8,4676208.16 419525.74,4675536.35 420077.83,4674393.54 419493.77,4673866.04 418540.42,4673541.63 418282.69,4673276.85 418161.23,4671957.3 416484.92,4672014.21 415410.23,4672417.97 414661.26,4672549.28</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[51541646.96659]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[131]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[134]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08166]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pobla de Lillet, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pobla de Lillet, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pobla de Lillet, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pobla de Lillet, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="131">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">388672.73,4670577.57 387960.75,4672193.25 388006.92,4672635.26 386975.33,4672890.85 386557.67,4672828.66 385837.97,4673409.4 385627.39,4673231.04 385389.86,4674533.3 386611.03,4676627.23 386709.72,4677367.23 387398.65,4677959.36 387743.7,4678344.24 389456.66,4678970.43 389647.21,4678911.05 390412.5,4679179.83 391595.72,4679276.81 392064.59,4678254.94 392684.16,4677807.22 393078.44,4677404.04 393110.72,4676752.77 391232.45,4675622.77 391455.93,4675521.07 391106.64,4673746.01 391574.7,4673753.13 391983.58,4672839.51 393370.31,4671872.67 393910.88,4671947.52 394397.15,4672473.27 395885.03,4671784.67 395865.81,4671218.58 395599.22,4671088.99 395301.8,4671178.18 394850.31,4670125.88 394994.89,4669484.83 394001.59,4669126.82 393365.93,4668654.55 392986.83,4669315.08 392524.53,4669626.01 391784.09,4670188.43 391398.78,4670176.34 391468.974,4669631.705 391340.6,4669427.94 391180.23,4670170.79 390846.35,4669591.96 390557.86,4670035.27 390217.95,4669851.5 390205.93,4669057.63 389905.78,4668960.53 389682.7,4669186.36 389356.24,4669197.71 388755.7,4669668.12 389054.95,4669797.49 388672.73,4670577.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[55337444.55414]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[132]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[135]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25100]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gosol]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gosol]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[G¢sol]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[G¢sol]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="132">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">501067.44,4676029.27 500783.24,4676616.89 501180.55,4677415.93 500820.05,4677788.4 501144.98,4677985.14 501505.15,4677726.79 502429.17,4678249.55 503039.09,4678282.88 503901.03,4678833.23 504183.01,4679119.52 504433.16,4678591.72 505346.7,4676928.91 505100.67,4676490.67 504311.37,4675891.08 504218.55,4676029.61 503513.68,4676010.95 502627.4,4675482.39 501833.76,4674887.14 501253.19,4675666.95 501067.44,4676029.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10585462.1942]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[133]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[136]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17074]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fortia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fortia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Forti…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Forti…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="133">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">361737.83,4678224.42 363330.32,4676656.52 362753.09,4676239.37 362654.89,4675050.02 362467.52,4673964.8 362393.61,4672540.55 362256.87,4672061.7 361462.5,4672330.53 360986.9,4671994.69 359959.33,4672461.5 359232.41,4672903.15 359689.67,4674334.74 358963.67,4674589.29 359011.53,4674695.02 359747.29,4674569.12 360369.04,4675541.37 361164.43,4675886.04 360882.7,4676244.24 361737.83,4678224.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">361477.78,4673334.1 361140.84659942,4673483.2666863 360804.909094375,4673397.3289466 360606.37,4673530.87 360383.034088039,4673639.51668865 360037.71,4673587.03 360378.72,4673164.69 360679.909092498,4673053.57917985 360896.61,4672674.21 361121.86,4672793.29 361050.39,4672910.22 361477.78,4673334.1</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12785657.16606]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[134]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[137]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25155]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Organya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Organya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Organy…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Organy…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="134">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486458.33,4672272.55 486490.38,4672422.72 486983.04,4672916.16 487156.22,4673916.67 486955.2,4674482.02 486587.35,4675098.12 486419.54,4676149.44 486808.27,4677236.73 487016.752,4677421.947 487258.94,4677468.822 487508.62,4677358.9 487522.89,4677072.42 487982,4677034.73 487926.37,4677219.32 488195.23,4677309.19 488545.62,4677068.96 488928.23,4677008.4 491479.35,4677576.35 491724.01,4678060.39 492138.72,4677208.31 491996.26,4675896.58 491698.87,4675363.63 490475.73,4675842.28 490074.95,4675791.55 490312.73,4674622.99 490218.2,4673945.04 489913.93,4673192.76 490059.43,4672607.38 490637.55,4672287.85 491282.61,4672361.05 491082.57,4670544.06 490950.94,4669879.24 490146.08,4670306.35 489864.7,4670374.25 490089.41,4671568.07 489507.86,4671756.8 488744.32,4672171.97 488603.85,4671814.68 487759.11,4672499.74 487026.58,4672415.43 486458.33,4672272.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23328378.953]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[135]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[138]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17111]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Navata]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Navata]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Navata]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Navata]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="135">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">399109,4671613.53 398538.16,4672137.31 398412.53,4672207.53 398739.07,4673629.71 399927.33,4673688.3 400276.32,4674574.43 400680.83,4676079.59 400886.87,4677048.03 401001.68,4677329 401739.61,4676958.88 402344.39,4676845.68 402971.4,4676406.72 403713.65,4676201.14 404028.29,4676010.86 404347.22,4675618.54 404803.52,4675362.79 404497.61,4675215.39 404308.13,4674850.97 403791.06,4674902.39 403385.89,4674296.66 404560.78,4674009.13 405185.44,4673682.45 405377.56,4673058.87 405236.56,4672345.49 404673.95,4671772.41 403884.17,4671368.97 402669.82,4670985.82 401129.12,4670573.02 400323.58,4670909.18 399772.64,4671499.39 399109,4671613.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27561014.94305]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[136]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[139]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08293]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallcebre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallcebre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallcebre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallcebre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="136">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347616.34,4666559.51 346863.14,4666597.29 346472.9,4667854.85 346064.48,4667942.68 345985.25,4668186.46 342793.3,4666893.99 341508.73,4666696.37 339643.13,4666197.72 339363.74,4667172.09 339662.2,4668313.74 339229.92,4669089.89 338370.14,4669581.56 339038.67,4670245.78 339749.94,4671480.78 340019.76,4672012.93 340116.23,4672396.5 341372.62,4672271.52 343161.77,4673106.06 342723.56,4673722.66 342645.22,4674608.91 343131.78,4675543.61 344892.27,4676417.41 345496.56,4677111.05 346702.75,4677308.94 347007.38,4676711.76 348490.98,4676060.16 348732.05,4676015.81 348830.41,4673950.38 348166.11,4673379.36 347986.37,4672907.95 348530.44,4672694.12 349748.71,4671803.07 350235.53,4671032.04 350216,4670463.07 349851.76,4670304.29 349891.23,4670095.57 349613,4669339 349212.24,4668650.52 348745,4668779.95 348585.33,4668413.51 348170,4668431 348164,4667899 348069,4667181 347616.34,4666559.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[76581742.2815]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[137]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[140]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25001]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Abella de la Conca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Abella de la Conca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Abella de la Conca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Abella de la Conca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="137">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">439364.96,4668503.16 439920.78,4668301.38 440780.54,4667896.55 440845.25,4667606.37 441444.96,4667495.54 441022.75,4667133.8 440809.94,4666875.64 441340.18,4666781.77 441735.32,4666981.08 441887.7,4666929.67 441144.67,4665876.89 440728.01,4665853.34 440063.65,4665971.76 439751.48,4666334.43 439291.05,4665971.63 438779.76,4665655 437515.77,4665586.14 437185.99,4666166.87 435106.59,4665946.06 434957.04,4665712.25 434854.72,4665814.14 434371.22,4666295.44 434613.23,4666692.17 433967.83,4667398.53 433969.8,4667763.26 433143.82,4668023.64 432637.01,4668310.55 432059.65,4668209.86 432367.81,4668799.16 432531.13,4669297.7 431532.32,4669434.53 431684.79,4669618.5 431400.73,4670091.37 431156.18,4670385.02 431213.28,4670679.11 430441.38,4671054.17 430363.15,4671254.59 430929.94,4671619.53 430520.34,4671963.57 430158.64,4672543.06 429542.77,4672199.11 429265.96,4672278.64 428938.14,4673220.39 428874.39,4673326.02 429291.91,4673750.14 429659.58,4674447.9 430255.66,4674736.1 431005.2,4674427.4 432046.63,4674938.31 432657.45,4675941 433257.21,4676455.94 433583.17,4677146.97 433918.07,4676855.96 435242.66,4676178.73 436411.83,4676176.05 436931.99,4674882.58 436713.4,4674362.86 437049.88,4673624.89 439011.36,4672892.57 438714.42,4672015.69 438400.53,4671657.03 438696.03,4671481.38 438282.6,4670271.81 439364.96,4668503.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[73766569.74941]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[138]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[141]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17147]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ripoll]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ripoll]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ripoll]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ripoll]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="138">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">412174.82,4673106.17 411440.24,4672979.17 411055.35,4673196.66 410104.81,4673487.02 408322.94,4673795.1 408481.72,4674303.93 407709.08,4674829.26 407253.41,4674987.12 407308.83,4675667.09 407713.7,4675982.05 408755.9,4676539.58 408974.5,4676034.42 409406.23,4676101.05 410523.78,4675949.76 410861.4,4675866.24 411379.56,4675947.87 411939.57,4675825.96 412272.44,4675396.18 412420.65,4674248.46 412110.42,4673905.97 412174.82,4673106.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11591768.04675]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[139]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[142]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08903]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Julia de Cerdanyola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Julia de Cerdanyola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Juli… de Cerdanyola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Juli… de Cerdanyola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="139">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">504406.54,4673674.59 503232.11,4673996.27 502946.68,4673211.14 501833.76,4674887.14 502627.4,4675482.39 503513.68,4676010.95 504218.55,4676029.61 504311.37,4675891.08 505100.67,4676490.67 505347.01,4676099.39 504977.92,4675304.65 505302.01,4674493.92 505479.27,4674378.81 505624.13,4673455.51 504406.54,4673674.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6898817.7764]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[140]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[143]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17151]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riumors]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riumors]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riumors]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riumors]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="140">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">497436.06,4676258.76 496199.08,4674985.74 495715.11,4675115.31 495130.65,4675751.95 495161.36,4675930.52 495765.44,4676299.55 497583.97,4676430.74 497436.06,4676258.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[1935457.05495]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[141]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[144]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17182]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Llogaia d'Alguema]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Llogaia d'Alguema]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Llogaia d'·lguema]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Llogaia d'·lguema]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="141">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">501253.19,4675666.95 499946.61,4675103.76 499260.35,4674710.19 499210.48,4674437.96 498661.03,4673709.03 498416.23,4673562.54 498238.13,4673662.07 497495.46,4673080.08 496430.95,4672771.57 496018.24,4673533.62 495713.38,4673499.05 496199.08,4674985.74 497436.06,4676258.76 497471.52,4675924.27 499874.66,4675615.02 501067.44,4676029.27 501253.19,4675666.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8732432.36185]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[142]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[145]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17226]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilamalla]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilamalla]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilamalla]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilamalla]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="142">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">493150.13,4672930.87 492990.68,4673321.83 492986.39,4673861.94 493076.94,4674258.84 492609.76,4674902.36 492633.49,4674966.9 492698.73,4675254.73 492910.78,4675289.1 493506.49,4675797.92 494305.37,4676163.07 494982.09,4676002.6 495161.36,4675930.52 495130.65,4675751.95 495715.11,4675115.31 496199.08,4674985.74 495713.38,4673499.05 494991.42,4672255.66 494498.66,4672155.62 493170.77,4672512.02 493150.13,4672930.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9608972.4776]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[143]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[146]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17026]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Borrassa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Borrassa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Borrass…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Borrass…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="143">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">481226.76,4671090.99 481128.37,4671053.56 480307.19,4670763.39 478817.51,4671044.33 478866.72,4671667.88 477560.41,4671863.6 477231.65,4671830.68 477563.35,4672677.78 477194.35,4673524.96 476883.35,4673801.85 477466.22,4674446.83 477399.21,4675134.06 477767.31,4676062.92 478203.42,4676026.16 479543.93,4675149.5 480193.09,4675442.59 480764.58,4675203.08 481658.6,4675350.33 481959.99,4675279.37 481633.46,4674681.7 481940.59,4673619.04 481200.3,4672997.6 480899.41,4672625.53 480844.84,4672005.55 481226.76,4671090.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17306787.29419]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[144]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[147]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17098]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Maia de Montcal]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Maia de Montcal]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mai… de Montcal]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mai… de Montcal]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="144">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347727.87,4665297.16 347616.34,4666559.51 348069,4667181 348164,4667899 348170,4668431 348585.33,4668413.51 348745,4668779.95 349212.24,4668650.52 349613,4669339 349891.23,4670095.57 349851.76,4670304.29 350216,4670463.07 350235.53,4671032.04 349748.71,4671803.07 348530.44,4672694.12 347986.37,4672907.95 348166.11,4673379.36 348830.41,4673950.38 348732.05,4676015.81 350003.62,4675466.64 352145.72,4674845.72 353444.94,4674644.94 354936.79,4674844.06 355899.77,4675087.41 357830.74,4674997.69 358783.07,4674615.23 359011.53,4674695.02 358963.67,4674589.29 359689.67,4674334.74 359232.41,4672903.15 359959.33,4672461.5 360986.9,4671994.69 361462.5,4672330.53 362256.87,4672061.7 362314.26,4671650.07 362845.32,4672195.64 363674.04,4672358.68 363675.78,4671141.95 363341.16,4670614.67 364229.63,4669072.59 363755.69,4668386.74 363536.68,4668102.73 362107.22,4667080.44 361117.12,4666019.13 360582.19,4665934.14 359748.4,4665760.8 359475.91,4665379.27 357913.07,4665287.32 357724,4664823 354693.85,4664361.04 354438.65,4663233.38 353283,4662731 352468.22,4662176.85 352262.04,4661736.81 351178.33,4661539.72 350156.29,4661225.35 349778.06,4661377.3 349703.57,4661239.43 349377.12,4660893.54 348461.79,4660759.03 348487.4,4661764.67 348365.78,4662834.36 348156.61,4663357.83 348545.53,4664701.51 348400,4665249 347727.87,4665297.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[150887553.78641]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[145]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[148]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25077]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Coll de Nargo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Coll de Nargo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Coll de Narg¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Coll de Narg¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="145">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">466013.28,4672719.42 465548.09,4672232.06 465649.85,4671208.19 465644.4,4670924.98 465434.3,4669787.38 464630.42,4669339.22 464079.8,4669189.92 463810.59,4669487.23 462701.09,4669201.57 462462.63,4669552.98 461616.12,4670035.89 460890.12,4670233.3 460059.9,4670590.73 460143.4,4671481.7 459147.8,4671863.77 459598.92,4672391.43 459399.46,4672886.05 458942.25,4672999.51 458275.77,4672876.06 458176.64,4672951.66 457807.73,4673052.55 457610.12,4673508.37 457592.17,4674139.71 457364.92,4674256.4 458063.27,4674848.57 458593.35,4675840.64 460087.95,4675411.58 461538.09,4675945.73 462099.58,4675901.28 462924.66,4675456.99 462661.5,4674810.18 461512.11,4674417.42 462017.89,4673833.38 462234.6,4674143.13 463378.02,4674216.68 463914.14,4672965.21 464011.93,4672461.86 464329.77,4672501.92 464751.31,4672242.9 466013.28,4672719.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31825271.15804]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[146]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[149]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17185]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Joan les Fonts]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Joan les Fonts]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Joan les Fonts]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Joan les Fonts]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="146">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">493150.13,4672930.87 492619.42,4672841.8 492429.66,4672743.13 492010.17,4672739.97 491669.77,4672381.88 491282.61,4672361.05 490637.55,4672287.85 490059.43,4672607.38 489913.93,4673192.76 490218.2,4673945.04 490312.73,4674622.99 490074.95,4675791.55 490475.73,4675842.28 491698.87,4675363.63 492096.85,4675107.93 492598.29,4675063.92 492633.49,4674966.9 492609.76,4674902.36 493076.94,4674258.84 492986.39,4673861.94 492990.68,4673321.83 493150.13,4672930.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8078843.59795]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[147]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[150]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17115]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ordis]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ordis]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ordis]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ordis]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="147">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327177.78,4669987.3 327267.608,4669664.236 327117.62,4669117.17 326278.53,4668820.84 326068.86,4668098.17 326074.68,4667363.84 326994.51,4666706.89 326530,4665597.18 326069.16,4665526.2 326011.11,4666197.03 325905,4666902 324397,4667429 324201.31,4667900.87 324830,4669536 324387,4669863 324546,4670428 325159.87,4671206.59 324284.81,4671894.2 323248.35,4672358.72 323262.51,4673514.73 323906.5,4673899.45 325598.76,4675703.75 327269.49,4675094.44 327568.03,4675499.37 327732.91,4675072.48 328467.63,4674154.14 328805.62,4674149.1 329584.08,4673666.87 329998.45,4673328.87 329686.56,4672790.21 329417.48,4672238.95 328499.95,4671922.64 328841.12,4670993.71 328337.76,4670737.53 327995.733,4670651.736 327323.858,4670242.361 327177.78,4669987.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">327177.78,4669987.3 327058.232659434,4670173.61106661 327083.232659809,4670370.48606957 327173.36,4670776.21 326987.22,4671168.05 326619.33,4671703.83 326371.65,4671703.83 325508.39,4671237.3 325522.1,4670818.96 325398.26,4670522.57 325175.14,4670245.51 325263.31,4670055.83 326222.12,4669828.65 326504.25,4669713.96 326848.1,4669766.9 326895.732656993,4669901.73606253 327177.78,4669987.3</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28538929.25698]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[148]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[151]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25215]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Talarn]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Talarn]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Talarn]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Talarn]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="148">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">498661.03,4673709.03 499210.48,4674437.96 499260.35,4674710.19 499946.61,4675103.76 501253.19,4675666.95 501833.76,4674887.14 502946.68,4673211.14 502445.04,4673187.48 502195.18,4672934.66 501793.15,4672054.68 500963.39,4671934.15 500263.48,4671454.22 499980.1,4671938.64 499314.64,4671579.69 499282.21,4671762.91 499320.73,4672216.39 498661.03,4673709.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10643428.8371]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[149]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[152]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17052]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Siurana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Siurana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Siurana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Siurana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="149">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">480307.19,4670763.39 478482.42,4670128.65 477199.13,4670646.3 475873.18,4669370.63 475690.91,4669366.38 473454.8,4669047.1 473964.25,4669394.87 473810.68,4669597.17 472607.46,4669557.3 472718.01,4667738 471763.99,4667344.59 471818.71,4666627.05 472182.42,4665863.66 471092.96,4666400.01 470339.02,4667166.72 469586.1,4666975.43 469379.64,4668102.67 469454.15,4668884.05 468700.29,4669189.77 468831.8,4669623.47 468138.21,4669704.95 467646.56,4669725.74 466776.11,4670998.35 466470.69,4670958.54 466428.3,4671678.65 466615.39,4671297.29 467015.1,4671260.79 467460.59,4671693.72 467907.22,4672296.04 469452.87,4672021.26 470749.61,4671118.29 471152.9,4671666.06 471241.44,4672303.12 471565.1,4673146.07 471918.12,4673722.73 472142.94,4674477.84 472257.12,4675220.85 472143.68,4675466.85 472856.46,4675586.47 473597.15,4675203.73 474242.94,4675315.93 474297.87,4673993.06 474432.68,4673348.7 473329.56,4672631.53 474295.22,4671917.63 474527.86,4671621.88 475143.71,4671383.16 475823.71,4671578.43 476208.94,4671619.21 476717.59,4672019.32 477231.65,4671830.68 477560.41,4671863.6 478866.72,4671667.88 478817.51,4671044.33 480307.19,4670763.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[42473472.79134]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[150]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[153]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17162]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Ferriol]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Ferriol]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Ferriol]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Ferriol]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="150">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">466428.3,4671678.65 466022.96,4671349.52 465649.85,4671208.19 465548.09,4672232.06 466013.28,4672719.42 466062.77,4672797.62 465661.67,4673266.4 465815.35,4673964.1 465337.74,4674382.62 465488.69,4674547.77 466043.62,4675539.96 466868.42,4674919.88 467690.81,4674738.35 467364.95,4674477.21 467911.41,4673963.42 467826.65,4673388.89 467303.91,4672925.57 467460.59,4671693.72 467015.1,4671260.79 466615.39,4671297.29 466428.3,4671678.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6883461.25145]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[151]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[154]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17165]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Jaume de Llierca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Jaume de Llierca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Jaume de Llierca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Jaume de Llierca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="151">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">467460.59,4671693.72 467303.91,4672925.57 467826.65,4673388.89 467911.41,4673963.42 467364.95,4674477.21 467690.81,4674738.35 467841.56,4675260.32 468904.88,4674753.66 470145.72,4675340.67 470619.53,4675011.62 470850.4,4674709.72 471430.73,4674380.22 471380.57,4674178.16 471918.12,4673722.73 471565.1,4673146.07 471241.44,4672303.12 471152.9,4671666.06 470749.61,4671118.29 469452.87,4672021.26 467907.22,4672296.04 467460.59,4671693.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12162481.8663]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[152]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[155]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17010]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Argelaguer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Argelaguer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Argelaguer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Argelaguer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="152">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">418161.23,4671957.3 418282.69,4673276.85 418540.42,4673541.63 419493.77,4673866.04 420077.83,4674393.54 420298.74,4674578.11 421250.72,4674966.01 421952.26,4674744.02 421754.16,4674396.35 421685.54,4673798.79 421899.89,4672221.11 422303.95,4672085.18 422746.79,4671804.33 422544.8,4671488.69 422668.25,4670509.74 422254.54,4669823.57 421219.2,4669894.3 420591.34,4670310.36 420085.81,4669928.87 419862.52,4669268.92 419406.71,4668689.96 417970.72,4668466.07 417902.02,4668816.91 417178.15,4669558.6 417942.43,4670705.17 417720.97,4670952.29 417369.42,4671740.17 418161.23,4671957.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21198351.18484]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[153]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[156]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08216]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Jaume de Frontanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Jaume de Frontanya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Jaume de Frontany…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Jaume de Frontany…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="153">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">462661.5,4674810.18 462848.88,4674902.9 463359.95,4674456.61 463378.02,4674216.68 462234.6,4674143.13 462017.89,4673833.38 461512.11,4674417.42 462661.5,4674810.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[952893.08205]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[154]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[157]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17046]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellfollit de la Roca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellfollit de la Roca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellfollit de la Roca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellfollit de la Roca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="154">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">505362.64,4669808.88 505101.37,4670615.09 505532.67,4670676.74 505719.8,4671475.62 505866.11,4671817.17 505760.85,4672545.97 505812.76,4673412.93 505734.76,4674028.85 506120.53,4674247.4 506875.05,4673972.08 508487.59,4672688.08 509283.09,4672573.16 509342.429,4669348.932 509762.81,4666144.02 509693.58,4666130.92 509395.554,4665736.432 509077.98,4665718.39 508964.304,4666233.307 508675.84,4666627.32 509188.06,4667062.77 509227.65,4667162.31 509173.679,4667511.432 508966.21,4667726.83 508645.554,4667764.557 508322.1,4667621.59 507595.73,4667685.09 507300.42,4668354.77 507655.75,4668814.97 507575.5,4670104.17 507139.94,4670116.22 506727.95,4670336.75 506919.64,4669858.44 505362.64,4669808.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18235646.60538]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[155]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[158]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17178]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pere Pescador]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pere Pescador]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pere Pescador]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pere Pescador]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="155">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">383649.35,4667327.15 383277.58,4667111.32 382590.85,4667350.17 381966.24,4668009.72 381319.09,4668890.35 379605.89,4667903.86 377632.05,4667912.66 378167.48,4668369.5 378174.47,4668660.71 377859.597,4668819.204 377866.64,4669147.1 377961.159,4669381.704 377734.01,4669557.42 377578.347,4669827.017 377641.72,4670705.36 377979.94,4670975.71 377861.5,4671489.09 378033.42,4672034.69 378439.2,4672295.89 378512.41,4673686.97 380007.5,4674173.47 381707.41,4674030.94 382818.36,4673583.84 384334.29,4673162.1 385627.39,4673231.04 385837.97,4673409.4 386557.67,4672828.66 386975.33,4672890.85 388006.92,4672635.26 387960.75,4672193.25 388672.73,4670577.57 388248.88,4670193.82 388124.25,4669572.37 387854.76,4668876.02 386644.88,4666292.88 385865.46,4666417.61 385909.38,4666305.65 385328.59,4666233.57 384897.89,4666329.01 384768.64,4666728.64 384571.95,4667105.57 384286.27,4667206.43 384213.94,4667863.45 383847.82,4667695.49 383649.35,4667327.15</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[60275172.00093]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[156]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[159]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25163]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Coma i la Pedra, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Coma, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Coma i la Pedra, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Coma, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="156">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">447315.07,4669214.21 446859.03,4671640.83 446293.99,4671950.07 446288.64,4672290.06 446052.29,4672658.86 445305.92,4672933.26 444999.27,4673593.89 445882.66,4673725.98 447442.14,4674123.26 447889.3,4674108.01 447667.93,4672865.73 450452.6,4672575.58 453234.96,4672081.4 454437.49,4672110.27 454342.49,4671027.06 454261.6,4670854.7 453913.28,4670549.61 453436.26,4670783.29 453104.42,4670419.74 451389.29,4669834.73 450160.51,4668712.52 449361.77,4668745.13 448689.19,4669108.77 447836.698,4669355.746 448000.76,4669676.059 447315.07,4669214.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24483480.65144]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[157]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[160]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17149]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riudaura]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riudaura]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riudaura]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riudaura]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="157">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">505362.64,4669808.88 504975.67,4669424.47 504517.88,4668636.84 503826.51,4668879.91 503975.81,4668500.97 503613.14,4668155.12 501944.21,4668762.69 501563.43,4668463.57 500922.86,4668438.64 500602.57,4668623.81 501149.71,4669196.2 500508.54,4669663.05 499969.52,4670646.25 500263.48,4671454.22 500963.39,4671934.15 501793.15,4672054.68 502195.18,4672934.66 502445.04,4673187.48 502946.68,4673211.14 503232.11,4673996.27 504406.54,4673674.59 504245.56,4673240.07 504325.68,4672948.31 503378.79,4672641.16 503624.87,4671815.72 504387.77,4670340.39 505101.37,4670615.09 505362.64,4669808.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16977288.9152]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[158]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[161]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17198]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torroella de Fluvia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torroella de Fluvia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torroella de Fluvi…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torroella de Fluvi…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="158">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">410120.03,4669185.79 409265.95,4666729.66 408367.32,4665558.44 407583.6,4666246.85 406684.53,4668167.24 406787.95,4669115.29 406945.26,4669955.65 406432.99,4671275.09 406705.37,4672407.67 406524.84,4672566.3 406641.46,4673085.84 407550.1,4673445.47 408322.94,4673795.1 410104.81,4673487.02 411055.35,4673196.66 411440.24,4672979.17 411199.29,4672819.55 410422.23,4671729.02 410206.54,4670868.24 410527.5,4670048.04 410120.03,4669185.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24960248.1401]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[159]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[162]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08142]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Nou de Bergueda, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Nou de Bergueda, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Nou de Bergued…, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Nou de Bergued…, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="159">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">497652.87,4666993.63 496688.66,4666786.45 496369.05,4666837.37 495887.45,4666589.53 495565.33,4666247.72 495032.24,4666630.66 494612.91,4668281.37 493605.18,4668476 493749.26,4668854.18 494142.64,4669293.58 494520.98,4670810.42 494694.57,4671757.16 494991.42,4672255.66 495713.38,4673499.05 496018.24,4673533.62 496430.95,4672771.57 497495.46,4673080.08 498238.13,4673662.07 498416.23,4673562.54 498661.03,4673709.03 499320.73,4672216.39 499282.21,4671762.91 499314.64,4671579.69 498691.11,4671666.66 498014.87,4671290.22 497610.15,4671134.5 496518.9,4671172.23 496571.25,4670816.93 496608.34,4669924.08 497006.76,4668779.61 497207.13,4668329.67 497862.35,4667447.53 497652.87,4666993.63</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20124022.6094]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[160]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[163]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17075]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Garrigas]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Garrigas]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Garrig…s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Garrig…s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="160">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">505101.37,4670615.09 504387.77,4670340.39 503624.87,4671815.72 503378.79,4672641.16 504325.68,4672948.31 504245.56,4673240.07 504406.54,4673674.59 505624.13,4673455.51 505812.76,4673412.93 505760.85,4672545.97 505866.11,4671817.17 505719.8,4671475.62 505532.67,4670676.74 505101.37,4670615.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5585905.3675]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[161]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[164]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17225]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilamacolum]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilamacolum]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilamacolum]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilamacolum]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="161">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">485898.29,4670326.9 485240.95,4670463.67 484932.9,4670440.44 484482.82,4669803.99 484113.2,4669932.02 483530.64,4669771.79 483055.4,4670558.48 482107.53,4670530.47 481324.76,4671131.42 481226.76,4671090.99 480844.84,4672005.55 480899.41,4672625.53 481200.3,4672997.6 481940.59,4673619.04 482313.68,4672608.67 482212.5,4672424.36 482450.55,4672095.88 484180.19,4672537.42 484674.25,4672096.7 486011.75,4672220.15 486490.38,4672422.72 486458.33,4672272.55 486353.22,4672182.22 486329.33,4671224.75 485898.29,4670326.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11067605.84266]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[162]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[165]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17058]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Crespia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Crespia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Crespi…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Crespi…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="162">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">439011.36,4672892.57 439753.23,4673382.93 441094.34,4673412.02 442458.56,4673382.34 444095.46,4673598.73 444999.27,4673593.89 445305.92,4672933.26 446052.29,4672658.86 446288.64,4672290.06 446293.99,4671950.07 446859.03,4671640.83 447315.07,4669214.21 447101.87,4669240.6 445934.3,4668907.78 445322.38,4668770.58 444726.39,4668345.38 444314.33,4668275.58 443720.88,4668270.71 442852.26,4667782.89 442422.09,4668140.58 441668.05,4668536.03 441188.19,4668415.72 440575.05,4668557.13 439364.96,4668503.16 438282.6,4670271.81 438696.03,4671481.38 438400.53,4671657.03 438714.42,4672015.69 439011.36,4672892.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[39061076.62945]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[163]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[166]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17170]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallfogona de Ripolles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallfogona de Ripolles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallfogona de RipollŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallfogona de RipollŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="163">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">476717.59,4672019.32 476208.94,4671619.21 475823.71,4671578.43 475143.71,4671383.16 474527.86,4671621.88 474295.22,4671917.63 473329.56,4672631.53 474432.68,4673348.7 475002.33,4673215.81 475366.81,4673434.24 475970.42,4673277.95 476312.16,4673286.32 476869.71,4672429.54 476717.59,4672019.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4700828.39045]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[164]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[167]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17019]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Besalu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Besalu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Besal£]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Besal£]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="164">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">410120.03,4669185.79 410527.5,4670048.04 410206.54,4670868.24 410422.23,4671729.02 411199.29,4672819.55 411440.24,4672979.17 412174.82,4673106.17 412677.02,4673089.39 413570.33,4672787.71 414661.26,4672549.28 414657.26,4670347.25 415941.52,4670585.86 416811.11,4670523.88 416626.82,4670043.56 416794.08,4669536.13 416606.68,4669038 416263.98,4668762.34 415336.93,4668964.68 414516.18,4668510.29 414034.99,4668499.44 413377,4667768.3 412439.5,4666846.12 410645.43,4668276.07 411023.83,4669063.92 410673.29,4669545.67 410120.03,4669185.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24297285.21575]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[165]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[168]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08057]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castell de l'Areny]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castell de l'Areny]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castell de l'Areny]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castell de l'Areny]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="165">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">458176.64,4672951.66 457978.18,4672340.42 457368.51,4671769.09 456558.47,4672279.01 455873.77,4672419.51 455366.22,4672149.07 454437.49,4672110.27 453234.96,4672081.4 450452.6,4672575.58 447667.93,4672865.73 447889.3,4674108.01 448603.9,4675254.05 447991.59,4675494.64 446576.69,4675382.2 446052.32,4675806.87 446076.42,4676143.42 445973.15,4676963.16 446569.73,4677341.39 447498.12,4677633.67 448213.32,4677989.55 448777.23,4678183.82 449179.54,4678543.15 448790.99,4679320.25 448568.37,4679582.37 449628.88,4680365.13 451125.73,4680804.41 451150.43,4681450.03 451871.25,4681970.64 452973,4681809.19 453128.36,4682007.62 453878.75,4681837.58 454596.39,4681279.24 454907.4,4681565.5 455750.13,4681163.85 455831.55,4681172.5 456192.08,4680797.36 456422.12,4679636.33 458068.84,4678978.13 458690.49,4678077.05 459362.04,4677769.99 460081.68,4677537.7 461384.43,4676082.3 461538.09,4675945.73 460087.95,4675411.58 458593.35,4675840.64 458063.27,4674848.57 457364.92,4674256.4 457592.17,4674139.71 457610.12,4673508.37 457807.73,4673052.55 458176.64,4672951.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">459147.8,4671863.77 458651.47,4672604.37 458275.77,4672876.06 458942.25,4672999.51 459399.46,4672886.05 459598.92,4672391.43 459147.8,4671863.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[93866710.63229]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[166]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[169]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17208]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vall de Bianya, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Hostalnou de Bianya, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vall de Bianya, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Hostalnou de Bianya, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="166">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">454342.49,4671027.06 454437.49,4672110.27 455366.22,4672149.07 455873.77,4672419.51 456558.47,4672279.01 457368.51,4671769.09 457978.18,4672340.42 458176.64,4672951.66 458275.77,4672876.06 458651.47,4672604.37 459147.8,4671863.77 460143.4,4671481.7 460059.9,4670590.73 460890.12,4670233.3 461616.12,4670035.89 462462.63,4669552.98 462701.09,4669201.57 462316.87,4668598.83 462272.59,4667194.25 461576,4667140.15 461180.07,4667472.91 460270.74,4667185.24 460011.22,4667651.16 459540.41,4667886.57 458466.5,4666754.27 457460.78,4667551.19 457253.09,4668048.72 456198.8,4668473.34 455995.37,4668719.68 455571.4,4668563.44 455371.3,4668087.93 455326.62,4668054.69 455193.32,4668155.1 454839.31,4669341.52 454903.39,4670202.26 454342.49,4671027.06</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29790712.44025]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[167]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[170]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17114]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olot]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Olot]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Olot]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Olot]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="167">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">493605.18,4668476 493222.09,4668484.01 492420.54,4667826.13 491653.28,4668054.19 491576.91,4668122.3 491407.72,4668503.99 491333.92,4669526.57 490950.94,4669879.24 491082.57,4670544.06 491282.61,4672361.05 491669.77,4672381.88 492010.17,4672739.97 492429.66,4672743.13 492619.42,4672841.8 493150.13,4672930.87 493170.77,4672512.02 494498.66,4672155.62 494991.42,4672255.66 494694.57,4671757.16 494520.98,4670810.42 494142.64,4669293.58 493749.26,4668854.18 493605.18,4668476</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13540045.892]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[168]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[171]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17136]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pontos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pontos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pont¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pont¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="168">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">409794.42,4661197.74 408887.94,4661160.71 407375.47,4660116.69 407765.23,4661018.6 407676.38,4661206.21 408063.26,4661779.56 407156.45,4662245.99 406719.14,4662657.72 406418.63,4663189.84 407531.28,4663584.65 406674.18,4664298.97 406072.59,4664075.35 405643.42,4663463.72 403935.66,4664038.14 402875.67,4664152.59 400604.37,4665606.35 399478.92,4665625.34 399045.5,4666571.69 399341.33,4667151.34 400891.06,4667663.46 401416.47,4667598.42 401504.59,4668465.63 402004.61,4668698.76 403381.46,4668551.33 403885.3,4668920.94 404693.86,4669258.46 404473.21,4669989.3 404697.01,4670326.73 404701.65,4671480.04 404673.95,4671772.41 405236.56,4672345.49 405821.7,4671573.37 406432.99,4671275.09 406945.26,4669955.65 406787.95,4669115.29 406684.53,4668167.24 407583.6,4666246.85 408367.32,4665558.44 407901.96,4664682.16 407823.87,4664441.45 408465.46,4664513.24 408634.29,4663638.04 409104.93,4663673.93 409444.72,4663444.83 410820.77,4662761.24 410781.87,4662493.44 410535.11,4661882.81 409794.42,4661197.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47526744.1714]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[169]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[172]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08268]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cercs]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cercs]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cercs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cercs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="169">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">492161.06,4662294.3 492124.82,4661794.69 491240.5,4660400.1 491556.29,4659696 491282.377,4659296.947 491298.002,4658148.509 490981.77,4657391.97 490575.44,4657272.17 490360.502,4657437.572 490438.627,4657843.822 490367.83,4657938.9 489954.252,4657554.759 489574.57,4657394.6 489212.54,4658110.01 488963.52,4658268.71 488204.03,4658608.8 488265.26,4659143.23 488117.29,4660007.75 487939.05,4660190.86 487091.99,4660752.51 487417.98,4661286.86 487262.3,4661649.96 487088.51,4662258.53 486935.83,4663264.94 487270.17,4663681.11 487349.59,4664162.18 487189.36,4664857.24 487212.76,4665041.91 487179.98,4665239.55 486262.45,4665540.98 485551.24,4666749.33 484819.73,4666141.5 483996.38,4666192.46 483417.99,4666639.26 483341.5,4666980.99 483511.28,4667904.61 483855.07,4667760.22 484099.15,4668366.98 484461.71,4668584.77 484883.1,4668111.03 485419.11,4668247.49 485519.93,4668459.19 485837.75,4668390.5 486812.18,4668038.07 487249.31,4668161.03 487522.08,4670013.98 487769.18,4670211.79 488156.56,4670723.69 488603.85,4671814.68 488744.32,4672171.97 489507.86,4671756.8 490089.41,4671568.07 489864.7,4670374.25 490146.08,4670306.35 490950.94,4669879.24 491333.92,4669526.57 491407.72,4668503.99 491576.91,4668122.3 491653.28,4668054.19 491532.62,4667934.82 490863.02,4667061.59 491269.24,4666465.67 491288.44,4665992.98 491824.49,4665550.96 491812.67,4664400.29 491857.43,4663738.55 492161.06,4662294.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[61656049.28545]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[170]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[173]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17218]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilademuls]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilademuls]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilademuls]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilademuls]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="170">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">497862.35,4667447.53 497207.13,4668329.67 497006.76,4668779.61 496608.34,4669924.08 496571.25,4670816.93 496518.9,4671172.23 497610.15,4671134.5 498014.87,4671290.22 498691.11,4671666.66 499314.64,4671579.69 499980.1,4671938.64 500263.48,4671454.22 499969.52,4670646.25 499686.64,4670819.68 499001.97,4670911.25 498835.51,4670583.87 498694.47,4669404.75 498805.2,4669010.57 499124.02,4668504.04 498612.84,4668545.16 497965.15,4668520.23 497993.62,4668217.55 498746.86,4667786.01 498391.99,4667340.99 497862.35,4667447.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7959538.06805]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[171]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[174]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17119]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palau de Santa Eulalia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Eulalia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palau de Santa Eul…lia]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Eul…lia]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="171">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">397934,4666808.87 396107.34,4668170.33 395660.07,4667876.8 395449.88,4668104.8 395668.45,4668258.43 395576.1,4668454.19 395901.29,4668959.03 395698.7,4669903.58 395852.5,4670503.53 395599.22,4671088.99 395865.81,4671218.58 395885.03,4671784.67 396677.48,4671318.81 397349.07,4670690.08 397724.36,4670705.54 397915.26,4670918.87 398983.56,4671273.84 399109,4671613.53 399772.64,4671499.39 400323.58,4670909.18 401129.12,4670573.02 402669.82,4670985.82 403884.17,4671368.97 404673.95,4671772.41 404701.65,4671480.04 404697.01,4670326.73 404473.21,4669989.3 404693.86,4669258.46 403885.3,4668920.94 403381.46,4668551.33 402004.61,4668698.76 401504.59,4668465.63 401416.47,4667598.42 400891.06,4667663.46 399341.33,4667151.34 399045.5,4666571.69 397934,4666808.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29285587.5696]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[172]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[175]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08080]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Figols]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Figols]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[F¡gols]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[F¡gols]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="172">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">458621.73,4665230.94 458248.95,4666172.61 458466.5,4666754.27 459540.41,4667886.57 460011.22,4667651.16 460270.74,4667185.24 461180.07,4667472.91 461576,4667140.15 462272.59,4667194.25 462316.87,4668598.83 462701.09,4669201.57 463810.59,4669487.23 464079.8,4669189.92 464630.42,4669339.22 465434.3,4669787.38 465644.4,4670924.98 465649.85,4671208.19 466022.96,4671349.52 466428.3,4671678.65 466470.69,4670958.54 466776.11,4670998.35 467646.56,4669725.74 468138.21,4669704.95 468831.8,4669623.47 468700.29,4669189.77 469454.15,4668884.05 469379.64,4668102.67 469586.1,4666975.43 468859.39,4666696.72 468182.78,4665589.04 467772.81,4664647.39 467321.2,4664557.7 466866.89,4664853.37 466554.35,4664895.67 466579.67,4664227.62 466508.73,4662935 465503.97,4663220.82 464876.02,4663748.77 464435.47,4664012.44 463567.12,4663994.23 463148.52,4663786.74 462733.75,4663908.32 462328.56,4664168.33 461613.68,4664719.94 460338.37,4664520.42 459374.78,4664974.81 458621.73,4665230.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[48742660.1191]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[173]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[176]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17184]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Pau]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Pau]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Pau]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Pau]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="173">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365236,4660051 364552,4659954 364362,4659640 364144,4659755 363767.45,4659440.03 363388.54,4659506.75 362225.8,4659960.22 361469.33,4661821.26 361713,4663904 362393.36,4664518.67 362909.37,4664675.53 363030.16,4664940.51 363587.34,4665037.93 363793.84,4665532.82 364226.34,4665509.44 364495.19,4665645.82 365091.33,4666715.48 364604.28,4667027.22 364491.29,4667572.77 363536.68,4668102.73 363755.69,4668386.74 364623.9,4667980.53 365165.57,4667935.38 366295.55,4668308.83 366890.25,4667990.11 367669.02,4667961.78 369293.59,4668893.59 370452,4668830 370706.24,4668273.42 371916.88,4667338.49 374217.81,4668755.05 376216.31,4670162.31 377861.5,4671489.09 377979.94,4670975.71 377641.72,4670705.36 377578.347,4669827.017 377734.01,4669557.42 377961.159,4669381.704 377866.64,4669147.1 377859.597,4668819.204 378174.47,4668660.71 378167.48,4668369.5 377632.05,4667912.66 377664.284,4667522.329 377929.84,4667327.11 378047.097,4666967.642 378380.7,4666770.49 378703.347,4666725.454 378814.31,4666513.77 378793.08,4665782.01 379341.82,4665492.86 380478.4,4664149.6 380480.07,4663160.81 379857.6,4662681.36 379333.2,4662114.48 378468.13,4662022.99 377932.62,4663078.29 377291.07,4662900.97 376655.96,4661654.65 375369,4661991.02 374337.42,4661819.09 373742.69,4660587.34 373039.54,4660577.92 371558.36,4661465.08 370828.77,4661007.36 370335.06,4661556.02 370101.97,4662770.33 369239.08,4663292.29 368496.42,4663363.26 368250.45,4663694.45 367995.01,4663344.33 367579.92,4663380.03 367190.86,4663079.38 366846,4662928 366845.46,4662040.19 365999,4660886 365704.96,4660304.7 365236,4660051</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[114815974.86201]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[174]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[177]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25148]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Oden]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Oden]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[OdŠn]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[OdŠn]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="174">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">394444.42,4667573.85 393819.37,4667925.57 392550.02,4665622.76 392601.25,4665051.76 393337.55,4664451.22 393642.01,4664039.69 393600.3,4663700.32 393422.43,4662918.5 393042.47,4662576.08 392814.74,4662205.55 391812.11,4662345.42 391698.33,4662577.05 392055.52,4663191.31 390765.62,4663485.81 388060.12,4663379.42 386345.73,4663034.18 386065.15,4663388.66 385273.71,4663536.93 385288.96,4663917.68 385462.45,4664092.53 385315.29,4664211.65 382633.034,4664838.735 382863.02,4664523.91 382438.76,4664440.46 382321.94,4664889.78 380478.4,4664149.6 379341.82,4665492.86 378793.08,4665782.01 378814.31,4666513.77 378703.347,4666725.454 378380.7,4666770.49 378047.097,4666967.642 377929.84,4667327.11 377664.284,4667522.329 377632.05,4667912.66 379605.89,4667903.86 381319.09,4668890.35 381966.24,4668009.72 382590.85,4667350.17 383277.58,4667111.32 383242.409,4666729.36 382707.17,4666707.82 382767.55,4666435.6 382562.722,4666057.485 382177.55,4665865.68 382211.159,4665635.61 381966.31,4665554.84 382250.222,4665362.173 383114.2,4665286.94 383891.54,4665052.08 384172.67,4665340.6 384854.56,4665436.5 384861.39,4665692.26 384611.91,4665781.5 384219.24,4666137.22 384022.21,4666551.61 384121.44,4666914.92 384043.99,4667207.93 383814.74,4667423.55 383649.35,4667327.15 383847.82,4667695.49 384213.94,4667863.45 384286.27,4667206.43 384571.95,4667105.57 384768.64,4666728.64 384897.89,4666329.01 385328.59,4666233.57 385909.38,4666305.65 385865.46,4666417.61 386644.88,4666292.88 387854.76,4668876.02 388124.25,4669572.37 388248.88,4670193.82 388672.73,4670577.57 389054.95,4669797.49 388755.7,4669668.12 389356.24,4669197.71 389682.7,4669186.36 389905.78,4668960.53 390205.93,4669057.63 390217.95,4669851.5 390557.86,4670035.27 390846.35,4669591.96 391180.23,4670170.79 391340.6,4669427.94 391468.974,4669631.705 391398.78,4670176.34 391784.09,4670188.43 392524.53,4669626.01 392986.83,4669315.08 393365.93,4668654.55 394001.59,4669126.82 394994.89,4669484.83 394850.31,4670125.88 395301.8,4671178.18 395599.22,4671088.99 395852.5,4670503.53 395698.7,4669903.58 395901.29,4668959.03 395576.1,4668454.19 394444.42,4667573.85</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[66556341.716]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[175]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[178]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25111]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Guixers]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Casa Nova de Valls, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Guixers]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Casa Nova de Valls, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="175">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">481128.37,4671053.56 481226.76,4671090.99 481324.76,4671131.42 482107.53,4670530.47 483055.4,4670558.48 483530.64,4669771.79 484113.2,4669932.02 484482.82,4669803.99 484932.9,4670440.44 485240.95,4670463.67 485898.29,4670326.9 486548.42,4669912.85 487522.08,4670013.98 487249.31,4668161.03 486812.18,4668038.07 485837.75,4668390.5 485519.93,4668459.19 485419.11,4668247.49 484883.1,4668111.03 484461.71,4668584.77 484099.15,4668366.98 483855.07,4667760.22 483511.28,4667904.61 483341.5,4666980.99 483417.99,4666639.26 481243.01,4667564.36 480937.15,4667548.77 481025.26,4668347.78 480835.77,4669989.81 480945.27,4670529.32 481128.37,4671053.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16140704.41565]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[176]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[179]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17065]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Esponella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Esponella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Esponell…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Esponell…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="176">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">475690.91,4669366.38 475873.18,4669370.63 477199.13,4670646.3 478482.42,4670128.65 480307.19,4670763.39 481128.37,4671053.56 480945.27,4670529.32 480835.77,4669989.81 481025.26,4668347.78 480937.15,4667548.77 479120.03,4666690.42 478892.07,4666169.87 477450.61,4666441.23 477386.23,4667194.61 476762.92,4667543.74 476045.6,4667354.83 475484.78,4667075.96 475406.68,4667328.2 475670.97,4667637.88 475690.91,4669366.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17935900.3478]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[177]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[180]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17190]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Serinya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Serinya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Seriny…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Seriny…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="177">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">457589.8,4665182.91 458066.05,4663480.14 457277.65,4662557.69 456620.77,4661945.66 456665.47,4661183.31 456904.27,4660485.68 456987.98,4659778.11 457131.48,4659446.74 456736.73,4658803.24 455990.47,4658195.66 455558.6,4658476.75 454647.59,4658695.66 454253.94,4658271.47 452842.26,4657213.58 452491.73,4657095.21 451658.52,4657800.5 451169.44,4658044.74 450771.99,4658958.43 450110.09,4659798.91 450018.34,4660262.03 450386.03,4661402.16 450364.32,4661619.27 448827.67,4661638.57 448587.2,4662228.4 448320.74,4663139.06 448820.5,4663844.85 448376.36,4664468.42 447913.91,4664434.45 446566.75,4665399.77 446339.1,4666567.81 446618.2,4666938.12 447012.21,4667761.86 448130.28,4668116.62 448459.06,4668482.22 448962.47,4668195.06 449361.77,4668745.13 450160.51,4668712.52 451389.29,4669834.73 453104.42,4670419.74 453436.26,4670783.29 453913.28,4670549.61 454261.6,4670854.7 454342.49,4671027.06 454903.39,4670202.26 454839.31,4669341.52 455193.32,4668155.1 455326.62,4668054.69 455553.27,4667420.32 455395.69,4666672.19 455379.63,4666015.88 455192.11,4665601.88 454942.61,4665359.94 454914.42,4664985.62 455912.26,4664606.88 456431.08,4664577.3 457410.38,4665265.52 457589.8,4665182.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[90562606.1631]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[178]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[181]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17207]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vall d'en Bas, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Privat d'en Bas]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vall d'en Bas, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Privat d'en Bas]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="178">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">499798.3,4668666.54 499124.02,4668504.04 498805.2,4669010.57 498694.47,4669404.75 498835.51,4670583.87 499001.97,4670911.25 499686.64,4670819.68 499969.52,4670646.25 500508.54,4669663.05 501149.71,4669196.2 500602.57,4668623.81 499798.3,4668666.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3765054.93895]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[179]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[182]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17175]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Miquel de Fluvia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Miquel de Fluvia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Miquel de Fluvi…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Miquel de Fluvi…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="179">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">507820.52,4666726.71 507032.62,4666550.37 505362.64,4669808.88 506919.64,4669858.44 506727.95,4670336.75 507139.94,4670116.22 507575.5,4670104.17 507655.75,4668814.97 507300.42,4668354.77 507595.73,4667685.09 508322.1,4667621.59 508645.554,4667764.557 508966.21,4667726.83 509173.679,4667511.432 509227.65,4667162.31 509188.06,4667062.77 508751.804,4667170.807 507820.52,4666726.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5829256.96435]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[180]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[183]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17011]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Armentera, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Armentera, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Armentera, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Armentera, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="180">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">500588.4,4665460.6 499810.79,4668525.94 499798.3,4668666.54 500602.57,4668623.81 500922.86,4668438.64 501563.43,4668463.57 501944.21,4668762.69 503613.14,4668155.12 503975.81,4668500.97 503826.51,4668879.91 504517.88,4668636.84 504975.67,4669424.47 505362.64,4669808.88 507032.62,4666550.37 507820.52,4666726.71 507878.87,4666272.87 507598.25,4666199.95 507492.71,4665627.7 506990.5,4665354.32 505087.68,4665116.39 504367.27,4665403.15 504456.14,4665803.28 504197.21,4666003.42 503767.19,4665823.2 503339.32,4665313.76 502873.93,4664162.79 503155.85,4663435.44 502040.6,4664125.76 501544.55,4664203.92 501428.5,4664336.48 501322.37,4664825.56 500870.01,4664917.8 500588.4,4665460.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24951677.5035]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[181]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[184]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17210]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ventallo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ventallo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ventall¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ventall¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="181">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">449361.77,4668745.13 448962.47,4668195.06 448459.06,4668482.22 448130.28,4668116.62 447012.21,4667761.86 446618.2,4666938.12 446339.1,4666567.81 446566.75,4665399.77 447913.91,4664434.45 448376.36,4664468.42 448820.5,4663844.85 448320.74,4663139.06 447860.77,4663216.9 447451.28,4663629.48 445700.02,4663549.94 443746.26,4662968.61 443340.83,4662473.93 441776.32,4661690.01 441764.04,4661921.92 442475.34,4662688.32 442134.5,4663146.6 442324.47,4663610.29 442489.06,4664395.9 442233.4,4665071.44 441603.08,4664711.13 440640.55,4665065.85 440325.32,4665414.75 440728.01,4665853.34 441144.67,4665876.89 441887.7,4666929.67 441735.32,4666981.08 441340.18,4666781.77 440809.94,4666875.64 441022.75,4667133.8 441444.96,4667495.54 440845.25,4667606.37 440780.54,4667896.55 439920.78,4668301.38 439364.96,4668503.16 440575.05,4668557.13 441188.19,4668415.72 441668.05,4668536.03 442422.09,4668140.58 442852.26,4667782.89 443720.88,4668270.71 444314.33,4668275.58 444726.39,4668345.38 445322.38,4668770.58 445934.3,4668907.78 447101.87,4669240.6 447315.07,4669214.21 448000.76,4669676.059 447836.698,4669355.746 448689.19,4669108.77 449361.77,4668745.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34033665.09796]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[182]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[185]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17212]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vidra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vidra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vidr…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vidr…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="182">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">472182.42,4665863.66 471818.71,4666627.05 471763.99,4667344.59 472718.01,4667738 472607.46,4669557.3 473810.68,4669597.17 473964.25,4669394.87 473454.8,4669047.1 475690.91,4669366.38 475670.97,4667637.88 475406.68,4667328.2 475484.78,4667075.96 475272.17,4666428.86 475345.99,4666076.53 475851.74,4664618.77 475179.38,4664134.1 475309.69,4662977.78 475182.94,4662888.16 474592.7,4661842.49 474458.36,4660752.78 474612.43,4660306.79 473899.04,4659298.26 473478.84,4659381.29 472863.68,4659493.76 471410.37,4659437.22 470102.97,4659704.37 469951.63,4659776.37 470748.27,4660267.41 471176.44,4661096.14 471454.45,4662353.87 471734.93,4662444.75 471725.16,4663077.84 472490.11,4663709.33 472336.61,4664692.7 471747.99,4665087.89 472182.42,4665863.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33290154.81425]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[183]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[186]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17174]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Miquel de Campmajor]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Miquel de Campmajor]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Miquel de Campmajor]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Miquel de Campmajor]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="183">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">414436.24,4664822.54 412663.79,4664938.53 412107.17,4664559.87 412179.07,4664234.43 412136.2,4663653.25 411521.45,4662959.72 410820.77,4662761.24 409444.72,4663444.83 409104.93,4663673.93 408634.29,4663638.04 408465.46,4664513.24 407823.87,4664441.45 407901.96,4664682.16 408367.32,4665558.44 409265.95,4666729.66 410120.03,4669185.79 410673.29,4669545.67 411023.83,4669063.92 410645.43,4668276.07 412439.5,4666846.12 413377,4667768.3 413684.35,4666889.17 414704.71,4666813.74 414509.89,4665542.97 414436.24,4664822.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22348539.4891]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[184]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[187]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08299]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="184">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">414436.24,4664822.54 414509.89,4665542.97 414704.71,4666813.74 413684.35,4666889.17 413377,4667768.3 414034.99,4668499.44 414516.18,4668510.29 415336.93,4668964.68 416263.98,4668762.34 416606.68,4669038 416794.08,4669536.13 417626.43,4667939.9 417821.4,4667488.12 417822.76,4667116.37 419614.57,4667419.26 420330.66,4666855.44 420822.54,4666229.94 421429.4,4666351.08 421887.69,4665974.94 422257.63,4665523.98 422480.15,4665420.87 423027.94,4665439 423287.35,4664937.56 423086.45,4664396.51 422672.47,4663917.38 421476.54,4663904.44 421887.75,4662350.45 421174.56,4661995.29 422565.98,4661356.45 422152.78,4660110.27 421792.97,4660916.98 420878.19,4660659.86 420717.57,4660203.47 420961.72,4659454.61 420254.96,4659020.72 419559.45,4660741.01 419484.55,4661119.53 418718.43,4660915.58 418086.79,4659801.99 417951.51,4660815.92 418011.26,4662062.19 417002.28,4662342.22 416501.65,4662772.53 416260.08,4664024.73 415764.3,4664171.11 415523.93,4664777.09 414436.24,4664822.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">417990.78,4662445.87 418212.87,4662322.62 418675.33,4662430.54 418869.23,4662641.04 419075.96,4663101.32 419043.53,4663867.1 419970.03,4664365.11 419946.25,4664591.52 419592.3,4664839.09 419086.43,4664986.37 419197.63,4664824.99 419069.2,4664566.45 418886.74,4664457.17 417732.88,4664237.81 417712.52,4663875.08 417651.44,4663710.18 417955.27,4662681.54 417990.78,4662445.87</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43766407.4287]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[185]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[188]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08024]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Borreda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Borreda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Borred…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Borred…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="185">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">458621.73,4665230.94 457589.8,4665182.91 457410.38,4665265.52 456431.08,4664577.3 455912.26,4664606.88 454914.42,4664985.62 454942.61,4665359.94 455192.11,4665601.88 455379.63,4666015.88 455395.69,4666672.19 455553.27,4667420.32 455326.62,4668054.69 455371.3,4668087.93 455571.4,4668563.44 455995.37,4668719.68 456198.8,4668473.34 457253.09,4668048.72 457460.78,4667551.19 458466.5,4666754.27 458248.95,4666172.61 458621.73,4665230.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9444381.45275]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[186]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[189]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17139]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Preses, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Preses, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Preses, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Preses, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="186">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">500588.4,4665460.6 500168.97,4665430.95 499930.62,4664952.15 499753.77,4664910.64 498237.08,4665549.76 497682.54,4666108.3 497599.91,4666714.94 497652.87,4666993.63 497862.35,4667447.53 498391.99,4667340.99 498746.86,4667786.01 497993.62,4668217.55 497965.15,4668520.23 498612.84,4668545.16 499124.02,4668504.04 499798.3,4668666.54 499810.79,4668525.94 500588.4,4665460.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7340382.34265]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[187]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[190]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17176]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Mori]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Mori]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mori]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mori]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="187">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495179.63,4665070.86 494751.67,4664761.47 493900.94,4664521.19 494046.29,4663857.6 494199.03,4663703.33 494186.24,4662875.02 493560.47,4662787 492635.23,4662294.88 492161.06,4662294.3 491857.43,4663738.55 491812.67,4664400.29 491824.49,4665550.96 491288.44,4665992.98 491269.24,4666465.67 490863.02,4667061.59 491532.62,4667934.82 491653.28,4668054.19 492420.54,4667826.13 493222.09,4668484.01 493605.18,4668476 494612.91,4668281.37 495032.24,4666630.66 495565.33,4666247.72 495179.63,4665070.86</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17563625.9156]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[188]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[191]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17016]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bascara]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bascara]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[B…scara]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[B…scara]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="188">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360582.19,4665934.14 361117.12,4666019.13 362107.22,4667080.44 363536.68,4668102.73 364491.29,4667572.77 364604.28,4667027.22 365091.33,4666715.48 364495.19,4665645.82 364226.34,4665509.44 363793.84,4665532.82 363587.34,4665037.93 363030.16,4664940.51 362909.37,4664675.53 362393.36,4664518.67 361713,4663904 361469.33,4661821.26 362225.8,4659960.22 363388.54,4659506.75 363767.45,4659440.03 362635.36,4658169.06 362076,4657345 361582,4657002 360694,4656057 360201,4655828 359080.15,4656001.08 359631.02,4656734.03 359551.41,4657378.58 359188.78,4658473.66 359518.17,4659192.25 359544.41,4659764.41 358896.25,4661134.58 359272.76,4662245.21 359661.13,4662371.02 359721.68,4662821.61 359988.08,4663948.07 360084.96,4664826.71 360327.15,4665491.33 360582.19,4665934.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32077483.88116]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[189]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[192]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25149]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Oliana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Oliana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Oliana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Oliana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="189">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">326075.08,4663063.35 325821.99,4662190.75 325786,4660738 325708,4659711 325243,4658807 325336,4658266 325861,4657675 325858.06,4657252.88 325528.14,4656795.2 325389.11,4656723.11 325322,4656791 324054,4656262 322340.41,4656183.98 321077.39,4656665.89 323130,4660224 322369.15,4660870.24 322380.93,4661594.17 322033.1,4662449.94 321083.1,4663152.79 320355.1,4663168.95 319910.93,4662753.06 319044,4662972 318226,4663482 317353.81,4662903.55 316285,4664921 316080.79,4665738.35 316235,4665936 316677,4665858 317164,4665890 317609,4667036 318079,4666902 318462.1,4667041.57 319123,4667149 319958.23,4667228.48 321068,4667511 321537,4667798 323006.77,4667935.9 324201.31,4667900.87 324397,4667429 324998.53,4666236.25 325416.8,4665846.86 325922.35,4665574.04 326069.16,4665526.2 326530,4665597.18 326519.28,4665174.73 326392.97,4664826.98 326455.01,4664087.84 326075.08,4663063.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[63010607.53566]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[190]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[193]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25904]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castell de Mur]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guardia de Tremp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castell de Mur]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gu…rdia de Tremp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="190">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">394444.42,4667573.85 394313.91,4667103.78 395026.54,4666439.75 395774.4,4666267.09 396272.01,4665927.52 397098.26,4665895.87 397331.25,4665964.93 397531.11,4666453.39 398004.68,4666449.84 397934,4666808.87 399045.5,4666571.69 399478.92,4665625.34 400604.37,4665606.35 402875.67,4664152.59 402429.11,4663838.01 402564.54,4662760.42 400776.24,4662338.1 399776.54,4662379.43 398003.5,4661940.78 395787.04,4662505.26 395904.46,4663076.41 395722.34,4663883.76 394765.4,4663493.2 394524.48,4663052.7 394170.73,4663545.57 393600.3,4663700.32 393642.01,4664039.69 393337.55,4664451.22 392601.25,4665051.76 392550.02,4665622.76 393819.37,4667925.57 394444.42,4667573.85</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32900285.86855]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[191]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[194]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08050]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellar del Riu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellar del Riu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellar del Riu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellar del Riu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="191">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486935.83,4663264.94 486100.56,4663800.79 485381.06,4663376.73 484753.86,4662806.64 483996.98,4662709.92 483957.1,4662944.93 483618.64,4663861.17 483034.48,4663835.19 482478.02,4663956.99 481647.39,4664726.45 481004.65,4665919.88 480732.14,4665819.26 480676.43,4666512.5 480937.15,4667548.77 481243.01,4667564.36 483417.99,4666639.26 483996.38,4666192.46 484819.73,4666141.5 485551.24,4666749.33 486262.45,4665540.98 487179.98,4665239.55 487212.76,4665041.91 487189.36,4664857.24 487349.59,4664162.18 487270.17,4663681.11 486935.83,4663264.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17501674.3329]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[192]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[195]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17071]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fontcoberta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fontcoberta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fontcoberta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fontcoberta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="192">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">474612.43,4660306.79 474458.36,4660752.78 474592.7,4661842.49 475182.94,4662888.16 475309.69,4662977.78 475179.38,4664134.1 475851.74,4664618.77 475345.99,4666076.53 475272.17,4666428.86 475484.78,4667075.96 476045.6,4667354.83 476762.92,4667543.74 477386.23,4667194.61 477450.61,4666441.23 478892.07,4666169.87 479120.03,4666690.42 480937.15,4667548.77 480676.43,4666512.5 480732.14,4665819.26 480173.09,4665559.35 479609.29,4664846.8 479825.43,4664221.74 479198.75,4663148.23 479291.72,4662289.76 480136.1,4662061.65 481431.25,4661832.65 482538.24,4662760.39 483349.83,4662665.78 482786.33,4661656.62 482861.6,4661215.42 481956.6,4661005.25 480514.82,4661447.52 478870.65,4661276.05 477914.99,4660562.01 477852.05,4659532.81 477085.06,4659881.82 476334.84,4660273.1 474612.43,4660306.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33610583.4637]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[193]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[196]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17137]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Porqueres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Porqueres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Porqueres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Porqueres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="193">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340833.87,4656838.24 340193.95,4655858.03 338186.59,4655604.53 336902.75,4655338.66 336281.84,4655559.24 335247.27,4654348.5 334219.09,4654276.1 331874.02,4654211.39 331164.52,4654361.73 332115.05,4655493.69 333024.8,4656104.71 333269.37,4656390.19 330707,4656957 329520.19,4657138.04 329779.3,4657917.88 329854.43,4658618.13 329773.78,4659330.5 330160,4660526 330897.07,4660649.71 330311.6,4660921.95 329841.37,4662101.72 328877.28,4662256.06 328168.76,4662327.53 326755.27,4663174.33 326075.08,4663063.35 326455.01,4664087.84 326392.97,4664826.98 326519.28,4665174.73 326530,4665597.18 326917.79,4665847.74 327562.11,4665902.75 327612.95,4666722.26 328097.31,4667098.65 329614.85,4667460.88 329816.38,4667189.08 329475.67,4666518.52 329733.36,4666463.54 330366.08,4665849.24 331058.16,4665058.13 331177.98,4665260.96 331604.5,4665099.82 332505.21,4664480.3 332981.87,4664648.3 333119.59,4663783.47 333412.28,4663307.2 333335.35,4662700.54 332249.06,4660961.15 332643.23,4660459.74 333439.5,4659173.32 333775.54,4659061.13 333755.13,4660713.17 334207.85,4661514.25 334947.27,4661351.67 337496.52,4662625.7 338749.23,4662087.34 339093.26,4661858.39 339461.63,4661157.74 339963.57,4660665.39 340298.24,4660423.77 340609.04,4658849.93 341665.73,4657598.66 340833.87,4656838.24</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[90760190.90256]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[194]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[197]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25098]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gavet de la Conca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gavet de la Conca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gavet de la Conca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gavet de la Conca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="194">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">315808.07,4691085.73 316242.409,4690600.454 316998.82,4690233.96 316648.659,4689498.892 318375.01,4688600.52 318763.3,4688127.76 319358.68,4687991.76 320259.24,4687438.46 322661.82,4687106.03 323571.53,4686311.96 324831.94,4685348.19 324426.15,4684660.76 323794.87,4684395.03 323231.38,4683601.22 322998.59,4682755.12 323315.28,4681629.67 323268.35,4681119.37 322651.98,4680959.24 322766.07,4680816.24 323409.68,4680463.48 323743.66,4679439.62 324796.38,4678530.09 325917.16,4678104.34 327146.99,4676284.34 327684.85,4675897.83 327568.03,4675499.37 327269.49,4675094.44 325598.76,4675703.75 323906.5,4673899.45 323262.51,4673514.73 323248.35,4672358.72 324284.81,4671894.2 325159.87,4671206.59 324546,4670428 324387,4669863 324830,4669536 324201.31,4667900.87 323006.77,4667935.9 321537,4667798 321068,4667511 319958.23,4667228.48 319123,4667149 318462.1,4667041.57 318079,4666902 317609,4667036 317164,4665890 316677,4665858 316235,4665936 316080.79,4665738.35 315184,4665693 314309.93,4665734.5 313854,4665362 313190,4665040 312318,4664815 311711,4664802 311003,4665457 310730,4666084 309953,4666779 309876,4666576.98 309738.85,4666836.39 309794.53,4668503.01 309774,4669301 310401,4670177 311229,4670677 310095.22,4671365.62 309950,4671760 310825.93,4673990.35 310905.75,4674922.43 311366.41,4675841.6 311625.62,4676890.64 311481.08,4677546.8 312360.79,4678683.57 312691.81,4679805.42 313179.04,4680401.77 313461.13,4681887.68 313682.52,4683605.63 314127.61,4684226.73 314215.28,4685646.38 315185.53,4686717.15 315148.64,4687202.55 316046.82,4688252.06 315622,4688460.89 315069.96,4688525.43 314337.36,4688732.85 314061.92,4689744.2 314112.02,4689966.62 314469.06,4690244.38 315053.39,4690625.85 315313.67,4690949.81 315808.07,4691085.73</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327177.78,4669987.3 327323.858,4670242.361 327995.733,4670651.736 328337.76,4670737.53 328841.12,4670993.71 329027.36,4670889.49 329732.92,4670976.14 330778.64,4670802.37 331035.83,4670466.6 332412.14,4671060.71 332290.99,4670626.34 332234.59,4669414.24 331090,4667308 330847.82,4666310.85 330366.08,4665849.24 329733.36,4666463.54 329475.67,4666518.52 329816.38,4667189.08 329614.85,4667460.88 328097.31,4667098.65 327612.95,4666722.26 327562.11,4665902.75 326917.79,4665847.74 326530,4665597.18 326994.51,4666706.89 326074.68,4667363.84 326068.86,4668098.17 326278.53,4668820.84 327117.62,4669117.17 327267.608,4669664.236 327177.78,4669987.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">316121.46,4691161.34 316370.83,4691494.63 315704.26,4692068.99 315645.1,4692254.09 315779.7,4692907.83 316255.3,4693566.22 316747.49,4694061.2 317670.27,4693794.47 317914.284,4693631.704 318096.16,4693623.39 318250.222,4693694.204 318704.6,4693061.03 319534.44,4692130.34 319411.94,4691663.29 318847.23,4691497.64 318643.22,4691192.2 317150.95,4690849.29 316633.034,4690897.329 316121.46,4691161.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327177.78,4669987.3 326895.733,4669901.736 326848.1,4669766.9 326504.25,4669713.96 326222.12,4669828.65 325263.31,4670055.83 325175.14,4670245.51 325398.26,4670522.57 325522.1,4670818.96 325508.39,4671237.3 326371.65,4671703.83 326619.33,4671703.83 326987.22,4671168.05 327173.36,4670776.21 327083.233,4670370.486 327058.233,4670173.611 327177.78,4669987.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">324397,4667429 325905,4666902 326011.11,4666197.03 326069.16,4665526.2 325922.35,4665574.04 325416.8,4665846.86 324998.53,4666236.25 324397,4667429</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[303200060.04177]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[195]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[198]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25234]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tremp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tremp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tremp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tremp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="195">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">383649.35,4667327.15 383814.74,4667423.55 384043.99,4667207.93 384121.44,4666914.92 384022.21,4666551.61 384219.24,4666137.22 384611.91,4665781.5 384861.39,4665692.26 384854.56,4665436.5 384172.67,4665340.6 383891.54,4665052.08 383114.2,4665286.94 382250.222,4665362.173 381966.31,4665554.84 382211.159,4665635.61 382177.55,4665865.68 382562.722,4666057.485 382767.55,4666435.6 382707.17,4666707.82 383242.409,4666729.36 383277.58,4667111.32 383649.35,4667327.15</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382863.02,4664523.91 383205.11,4664224.61 383070.534,4663916.86 383297.097,4663518.423 383210.68,4663407.08 382906.471,4663440.298 382522.3,4663726.39 382302.95,4664073.52 382234.597,4664502.798 382321.94,4664889.78 382438.76,4664440.46 382863.02,4664523.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[4115938.44158]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[196]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[199]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25193]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Llorenc de Morunys]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Llorenc de Morunys]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Lloren‡ de Morunys]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Lloren‡ de Morunys]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="196">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">507930.65,4664066.99 507904.4,4665041.48 507844.61,4665265.52 507492.71,4665627.7 507598.25,4666199.95 507878.87,4666272.87 507820.52,4666726.71 508751.804,4667170.807 509188.06,4667062.77 508675.84,4666627.32 508964.304,4666233.307 509077.98,4665718.39 509395.554,4665736.432 509693.58,4666130.92 509762.81,4666144.02 510074.34,4665209.5 510202.71,4665030.5 510211.179,4664791.12 510447.99,4664125.87 510961.78,4664089.5 511158.054,4664142.682 511367.34,4664056 511476.804,4663519.245 511410.12,4662988 511704.929,4662841.12 512048.679,4662825.495 512176.804,4662941.12 512371.36,4662990.5 512414.304,4663212.995 512633.054,4663259.87 513376.56,4662801 513690.3,4662561.5 513974.68,4662654 514256.84,4662699.5 514326.804,4662445.807 514516.43,4662349.5 514617.429,4662248.932 514534.5,4662069.5 514142.65,4661984 513785.61,4662014.32 513197.59,4661898.02 511017.31,4660906.83 510611.52,4661981.98 509058.32,4661441.26 508974.76,4662190.71 509002.43,4662837.32 508391.16,4663093.82 507930.65,4664066.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16159479.6647]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[197]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[200]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17062]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Escala, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Escala, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Escala, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Escala, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="197">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">472182.42,4665863.66 471747.99,4665087.89 472336.61,4664692.7 472490.11,4663709.33 471725.16,4663077.84 471734.93,4662444.75 471454.45,4662353.87 471176.44,4661096.14 470748.27,4660267.41 469951.63,4659776.37 469629.5,4659933.71 468359.35,4661047.89 467993.38,4661188.58 468296.89,4661728.96 467673.05,4662033.79 467020.25,4662639.64 466508.73,4662935 466579.67,4664227.62 466554.35,4664895.67 466866.89,4664853.37 467321.2,4664557.7 467772.81,4664647.39 468182.78,4665589.04 468859.39,4666696.72 469586.1,4666975.43 470339.02,4667166.72 471092.96,4666400.01 472182.42,4665863.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26665129.2384]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[198]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[201]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17105]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mieres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mieres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mieres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mieres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="198">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495179.63,4665070.86 495565.33,4666247.72 495887.45,4666589.53 496369.05,4666837.37 496688.66,4666786.45 497652.87,4666993.63 497599.91,4666714.94 497682.54,4666108.3 497667.09,4665749.92 497099.06,4665076.25 497318.35,4664117.65 497228.91,4663769.99 495840.36,4663755.41 495717.04,4664010.3 495777.535,4664317.351 495768.63,4665002.42 495683.785,4665298.601 495496.79,4665176.54 495528.83,4664648.46 495280.32,4664673.34 495161.91,4664732.976 495179.63,4665070.86</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5579419.13499]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[199]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[202]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17222]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilaur]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilaur]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vila�?r]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vila�?r]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="199">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">316080.79,4665738.35 316285,4664921 317353.81,4662903.55 318226,4663482 319044,4662972 319910.93,4662753.06 320355.1,4663168.95 321083.1,4663152.79 322033.1,4662449.94 322380.93,4661594.17 322369.15,4660870.24 323130,4660224 321077.39,4656665.89 318608.19,4657010.54 317824.19,4657234.54 315630,4656858 314651,4657011 313531,4657632 313386,4658119 311080,4658315 309684,4659013 308527.42,4659900.86 308131,4660866 308486,4662077 308914,4663147 309508,4663743 309877,4664990 310132.24,4666016.64 309876,4666576.98 309953,4666779 310730,4666084 311003,4665457 311711,4664802 312318,4664815 313190,4665040 313854,4665362 314309.93,4665734.5 315184,4665693 316080.79,4665738.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[92182546.91815]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[200]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[203]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25196]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Esteve de la Sarga]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Esteve de la Sarga]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Esteve de la Sarga]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Esteve de la Sarga]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="200">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428138.1,4661599.81 428133.49,4661455.6 427446.12,4661498.94 426696.61,4661449.95 426446.11,4662171.41 426190.17,4662583.18 425562.26,4662707.56 425610.95,4662347.18 425310.7,4662145.57 423852.21,4662474.5 423449.4,4662827.11 423061.87,4662676.14 422477.96,4663517.96 422672.47,4663917.38 423086.45,4664396.51 423287.35,4664937.56 423027.94,4665439 422480.15,4665420.87 422591.26,4665551.65 423264.99,4665815.51 423360.57,4666147.3 424477.47,4666081.56 425095.32,4666360.27 425670.96,4665908.42 425578.09,4664946.64 425771.32,4664760.05 425778,4664378.06 426045.45,4664065.04 427172.39,4663179.96 427866.65,4662909.1 428413.76,4661995.75 428138.1,4661599.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14197512.8559]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[201]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[204]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08004]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alpens]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alpens]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alpens]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alpens]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="201">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440728.01,4665853.34 440325.32,4665414.75 440640.55,4665065.85 441603.08,4664711.13 442233.4,4665071.44 442489.06,4664395.9 442324.47,4663610.29 442134.5,4663146.6 442475.34,4662688.32 441764.04,4661921.92 441776.32,4661690.01 441600.78,4661763.66 440107.29,4661395.5 439386.39,4661379.69 438707.05,4661748.92 437293.79,4661498.3 436684.76,4661234.82 436743.76,4664504.13 436500.73,4664794.81 435309.46,4664694.45 434953.21,4664602.74 434703.21,4665262.86 434917.69,4665676.32 434854.72,4665814.14 434957.04,4665712.25 435106.59,4665946.06 437185.99,4666166.87 437515.77,4665586.14 438779.76,4665655 439291.05,4665971.63 439751.48,4666334.43 440063.65,4665971.76 440728.01,4665853.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24666938.29165]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[202]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[205]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08253]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Maria de Besora]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Maria de Besora]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Maria de Besora]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Maria de Besora]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="202">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">494186.24,4662875.02 494199.03,4663703.33 494046.29,4663857.6 493900.94,4664521.19 494751.67,4664761.47 495179.63,4665070.86 495161.91,4664732.976 495280.32,4664673.34 495528.83,4664648.46 495496.79,4665176.54 495683.785,4665298.601 495768.63,4665002.42 495777.535,4664317.351 495717.04,4664010.3 495840.36,4663755.41 497228.91,4663769.99 497318.35,4664117.65 497099.06,4665076.25 497667.09,4665749.92 497682.54,4666108.3 498237.08,4665549.76 499753.77,4664910.64 499850.05,4664464.77 499795.45,4663653.03 498720.39,4663261.35 498150.8,4662772.5 496827.34,4662449.04 496335.41,4662490.02 495569.91,4662625.72 494505,4662715.07 494186.24,4662875.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11396503.39241]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[203]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[206]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17187]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Saus]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Camallera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Saus]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Camallera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="203">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">504269.91,4662174.92 503836.83,4662315.22 503242.96,4663440.03 503155.85,4663435.44 502873.93,4664162.79 503339.32,4665313.76 503767.19,4665823.2 504197.21,4666003.42 504456.14,4665803.28 504367.27,4665403.15 505087.68,4665116.39 506990.5,4665354.32 507492.71,4665627.7 507844.61,4665265.52 507904.4,4665041.48 507930.65,4664066.99 507596.77,4663795.08 507274.84,4663439.75 506473.81,4662996.13 506290.64,4663140.48 505191.59,4662905.34 504380.95,4662524.09 504269.91,4662174.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11561928.54505]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[204]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[207]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17217]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[02]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Viladamat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Viladamat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Viladamat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Viladamat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="204">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">351178.33,4661539.72 352262.04,4661736.81 352468.22,4662176.85 353283,4662731 354438.65,4663233.38 354693.85,4664361.04 357724,4664823 357913.07,4665287.32 359475.91,4665379.27 359748.4,4665760.8 360582.19,4665934.14 360327.15,4665491.33 360084.96,4664826.71 359988.08,4663948.07 359721.68,4662821.61 359661.13,4662371.02 359272.76,4662245.21 358896.25,4661134.58 359544.41,4659764.41 359518.17,4659192.25 359188.78,4658473.66 359551.41,4657378.58 359631.02,4656734.03 359080.15,4656001.08 358765.13,4655669.86 358020.6,4655905.35 355954.57,4654972.7 355300,4655352 354648.19,4655444.2 354353.85,4655525.55 353748.83,4656795.82 354447,4657129 354271.88,4658274.63 353961.86,4658612.91 353970.48,4658996.16 352798.53,4659338.84 352886.75,4660147.61 352419,4660409 352143.06,4660191.37 351725.44,4660468.59 351178.33,4661539.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[56669296.92459]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[205]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[208]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25165]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Peramola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Peramola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Peramola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Peramola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="205">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">483349.83,4662665.78 482538.24,4662760.39 481431.25,4661832.65 480136.1,4662061.65 479291.72,4662289.76 479198.75,4663148.23 479825.43,4664221.74 479609.29,4664846.8 480173.09,4665559.35 480732.14,4665819.26 481004.65,4665919.88 481647.39,4664726.45 482478.02,4663956.99 483034.48,4663835.19 483618.64,4663861.17 483957.1,4662944.93 483996.98,4662709.92 483349.83,4662665.78</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10655846.95285]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[206]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[209]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17015]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Banyoles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Banyoles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Banyoles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Banyoles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="206">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">500327.49,4660357.93 500298.54,4660309.94 498793.2,4660207.98 498136.46,4660519.02 498110.54,4659887.68 497668.36,4659369.22 497646.15,4658762.23 497448.47,4659423.3 496568.08,4660691.63 496160.81,4660637.03 496335.41,4662490.02 496827.34,4662449.04 498150.8,4662772.5 498720.39,4663261.35 499795.45,4663653.03 499850.05,4664464.77 499753.77,4664910.64 499930.62,4664952.15 500168.97,4665430.95 500588.4,4665460.6 500870.01,4664917.8 501322.37,4664825.56 501428.5,4664336.48 501544.55,4664203.92 501602.32,4663612.99 501299.9,4662357.94 500738.14,4662300.62 500569.34,4661840.36 500410.19,4660696.44 500327.49,4660357.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16008139.49294]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[207]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[210]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17232]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilopriu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilopriu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilopriu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilopriu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="207">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">430584.48,4659206.89 429995.18,4659051.1 429667.03,4659442.73 429979.8,4660287.55 429385.35,4661188.65 428576.96,4661172.49 428138.1,4661599.81 428413.76,4661995.75 427866.65,4662909.1 428844.65,4663824.9 429388.18,4664959.04 430825.94,4665351.56 432749.63,4665221.45 432983.85,4664867.99 432954.06,4664202.46 433341.7,4664153.83 433483.37,4663559.23 434261.58,4662969.89 434361.41,4661860.65 434171.3,4661657.6 434499.47,4661152.53 435375.55,4660658.05 435072.92,4660287.38 433931.08,4659666.35 433366.11,4658975.4 433012.33,4658964.64 432484.37,4658604.9 431988.65,4658350.85 431321.15,4659062.24 431333.73,4659182.54 430584.48,4659206.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31529503.12445]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[208]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[211]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08272]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sora]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sora]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sora]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sora]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="208">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347622.07,4646153.04 348200.77,4647000 348342.37,4647942.37 348255.03,4648394.96 348397.7,4649047.7 347736.39,4649982.58 347151.45,4650126.49 346822.06,4651196.69 346860.79,4651585.38 346432.73,4652029.9 347426.65,4652735.05 347535.66,4652989.56 346591.69,4654079.47 345477.59,4654898.73 345077.9,4655520.79 344639.8,4655794.35 344463.34,4656050.74 343671.62,4656090.97 343726.19,4656691.55 342830.94,4658332.67 342736.21,4658712.36 342926.97,4659445.36 343650,4660861.38 344325,4661426.43 344807.57,4662150 345203.71,4663077.33 345979.32,4664344.79 346419.69,4664859.66 346808,4664418 346983.4,4664589.27 347302,4664437 347727.87,4665297.16 348400,4665249 348545.53,4664701.51 348156.61,4663357.83 348365.78,4662834.36 348487.4,4661764.67 348461.79,4660759.03 349377.12,4660893.54 349703.57,4661239.43 349778.06,4661377.3 350156.29,4661225.35 351178.33,4661539.72 351725.44,4660468.59 352143.06,4660191.37 352419,4660409 352886.75,4660147.61 352798.53,4659338.84 353970.48,4658996.16 353961.86,4658612.91 354271.88,4658274.63 354447,4657129 353748.83,4656795.82 354353.85,4655525.55 354043.15,4654273.36 354060.04,4653898.46 355104.46,4652532.58 354997.03,4652346.75 355441.24,4652082.53 356272.45,4651456 355946.16,4650414.98 355919.37,4650705.59 355645.59,4650904.03 355467.78,4650166.46 355247.35,4649433.3 354622.43,4649350.25 354007.37,4648978.74 353491.41,4648094.75 353138.71,4646936.88 351519.43,4646319.97 351117.15,4645696.28 350461.28,4645411.56 350340.3,4644829.9 350946.41,4644455.89 350796.04,4643533.41 349159.73,4643053.77 348696.25,4642649.74 348323.12,4642720.23 347684.74,4643213.74 348465.95,4644349.9 347831.68,4646160.27 347622.07,4646153.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[143819892.2719]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[209]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[212]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25042]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Baronia de Rialb, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torre de Rialb, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Baronia de Rialb, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torre de Rialb, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="209">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">457589.8,4665182.91 458621.73,4665230.94 459374.78,4664974.81 460338.37,4664520.42 461613.68,4664719.94 462328.56,4664168.33 462733.75,4663908.32 462510.79,4663007.35 461342.97,4662422.52 461077.28,4662140.71 461255.56,4660985.24 461536.63,4660644.74 461376.93,4660211.52 461202.84,4659239.04 460972.97,4658812.27 460246.65,4658450 460477.48,4658286.94 460818.02,4657881.45 461269.86,4658171.61 461091.97,4657065.26 460363.7,4656417.35 459008.72,4657247.27 458745.71,4656777.76 458360.27,4656890.05 457903.43,4657603.7 456909.62,4657549.1 456441.92,4657304.24 455990.47,4658195.66 456736.73,4658803.24 457131.48,4659446.74 456987.98,4659778.11 456904.27,4660485.68 456665.47,4661183.31 456620.77,4661945.66 457277.65,4662557.69 458066.05,4663480.14 457589.8,4665182.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34820311.35685]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[210]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[213]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17161]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Feliu de Pallerols]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Feliu de Pallerols]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Feliu de Pallerols]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Feliu de Pallerols]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="210">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">434953.21,4664602.74 434654.13,4664462.95 434292.08,4664667.71 434134.86,4664240.48 433341.7,4664153.83 432954.06,4664202.46 432983.85,4664867.99 432749.63,4665221.45 430825.94,4665351.56 429388.18,4664959.04 428844.65,4663824.9 427866.65,4662909.1 427172.39,4663179.96 426045.45,4664065.04 425778,4664378.06 425771.32,4664760.05 425578.09,4664946.64 425670.96,4665908.42 425095.32,4666360.27 424477.47,4666081.56 423360.57,4666147.3 423264.99,4665815.51 422591.26,4665551.65 422480.15,4665420.87 422257.63,4665523.98 421887.69,4665974.94 421429.4,4666351.08 420822.54,4666229.94 420330.66,4666855.44 419614.57,4667419.26 417822.76,4667116.37 417821.4,4667488.12 417626.43,4667939.9 416794.08,4669536.13 416626.82,4670043.56 416811.11,4670523.88 415941.52,4670585.86 414657.26,4670347.25 414661.26,4672549.28 415410.23,4672417.97 416484.92,4672014.21 418161.23,4671957.3 417369.42,4671740.17 417720.97,4670952.29 417942.43,4670705.17 417178.15,4669558.6 417902.02,4668816.91 417970.72,4668466.07 419406.71,4668689.96 419862.52,4669268.92 420085.81,4669928.87 420591.34,4670310.36 421219.2,4669894.3 422254.54,4669823.57 422668.25,4670509.74 422544.8,4671488.69 422746.79,4671804.33 422303.95,4672085.18 421899.89,4672221.11 421685.54,4673798.79 421754.16,4674396.35 421952.26,4674744.02 423427.3,4674313.04 424013.65,4674308.45 425424.09,4674971.73 426317.73,4674605.73 426974.89,4674262.03 427795.53,4674121.6 428207.32,4673457.14 428874.39,4673326.02 428938.14,4673220.39 429265.96,4672278.64 429542.77,4672199.11 430158.64,4672543.06 430520.34,4671963.57 430929.94,4671619.53 430363.15,4671254.59 430441.38,4671054.17 431213.28,4670679.11 431156.18,4670385.02 431400.73,4670091.37 431684.79,4669618.5 431532.32,4669434.53 432531.13,4669297.7 432367.81,4668799.16 432059.65,4668209.86 432637.01,4668310.55 433143.82,4668023.64 433969.8,4667763.26 433967.83,4667398.53 434613.23,4666692.17 434371.22,4666295.44 434854.72,4665814.14 434917.69,4665676.32 434703.21,4665262.86 434953.21,4664602.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">417990.78,4662445.87 417955.27,4662681.54 417651.44,4663710.18 417712.52,4663875.08 417732.88,4664237.81 418886.74,4664457.17 419069.2,4664566.45 419197.63,4664824.99 419086.43,4664986.37 419592.3,4664839.09 419946.25,4664591.52 419970.03,4664365.11 419043.53,4663867.1 419075.96,4663101.32 418869.23,4662641.04 418675.33,4662430.54 418212.87,4662322.62 417990.78,4662445.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[113691229.23241]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[211]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[214]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17096]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[31]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llosses, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llosses, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llosses, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llosses, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="211">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">418086.79,4659801.99 418147.75,4658655.89 417712.73,4658149.39 417173.49,4658154.67 416744.49,4657864.75 415743.03,4657910.23 414771.39,4657252.23 414394.96,4657265.02 413287.31,4657909.53 413248.69,4658211.31 413290.78,4658428.23 413757.92,4658875.5 413726,4659384.38 413108.4,4659610.71 412945.48,4660258.15 412071.34,4660288.61 411085.6,4660400.27 409794.42,4661197.74 410535.11,4661882.81 410781.87,4662493.44 410820.77,4662761.24 411521.45,4662959.72 412136.2,4663653.25 412179.07,4664234.43 412107.17,4664559.87 412663.79,4664938.53 414436.24,4664822.54 415523.93,4664777.09 415764.3,4664171.11 416260.08,4664024.73 416501.65,4662772.53 417002.28,4662342.22 418011.26,4662062.19 417951.51,4660815.92 418086.79,4659801.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38355192.201]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[212]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[215]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08177]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Quar, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Quar, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Quar, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Quar, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="212">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392286.54,4654889.8 392025.67,4654644.71 392421.8,4654072.09 392272.23,4653743.78 391578.1,4653877.91 391623.25,4653749.35 390959.9,4653354.98 390465.11,4652910.84 389815.09,4652247.05 389978.44,4651610.59 389618.97,4651177.63 389255.26,4651538.25 389599.72,4651956.87 389315.28,4652354.86 389583.24,4653317.84 389128.23,4653292.58 388746.64,4652892.37 388413.8,4652215.69 388456.25,4651397.45 388107.32,4650774.51 388321.9,4650527.07 388421.33,4649956.07 388824.66,4650664.54 388650.53,4650873.79 388915.49,4651201.61 389314.04,4650863.28 389410.63,4649840.78 389962.81,4649913.71 390644,4650126 391440.37,4649941.35 391788.64,4649733.21 391862.54,4649220.19 392096.93,4649066.06 392153,4649807 392457,4650006.2 391694.03,4651346.65 391992.42,4652290.71 392414.286,4652350.454 393041.17,4651429.06 392963.71,4651076.7 393861.18,4650791.26 393720.75,4650347.48 393712.87,4649879.21 394006.66,4649152.61 392844.53,4648389.46 391873.27,4647876.63 391843.52,4647683.09 390917.63,4647239.32 390123.49,4647375.73 389798.32,4647721.03 390332.82,4648915.31 389578.26,4649160.16 389078.93,4648817.29 388909.57,4648467.02 388558.02,4648654.86 388326.03,4648489.91 387885,4647041 388004.53,4646214.29 388072.02,4646038.93 387804.68,4645580.91 388006.1,4645270.91 386318.7,4646624.11 385797.097,4646975.454 385198.63,4646803.81 384854,4647714 384518.94,4649600.45 383999,4649996 383819,4650387 383881.22,4650655.58 384058.87,4651077.66 383426.18,4651951.34 383490.48,4652394.23 383483.59,4652601.73 382731.98,4653651.35 383063.47,4654246.52 382573.24,4655266.35 381991.33,4655577.9 381829.15,4655949.65 381270.47,4656238.11 381655.98,4657609.45 381907.71,4659562.9 381664.95,4660169.28 381467.63,4660822.03 382078.76,4661364.75 382648.88,4662356.24 381205.08,4662890.89 381206,4662620.63 380795.57,4662759.28 380588.44,4662880.4 380507.62,4662430.75 380275.75,4662934.29 380480.07,4663160.81 380478.4,4664149.6 382321.94,4664889.78 382234.597,4664502.798 382302.95,4664073.52 382522.3,4663726.39 382906.471,4663440.298 383210.68,4663407.08 383297.097,4663518.423 383070.534,4663916.86 383205.11,4664224.61 382863.02,4664523.91 382633.034,4664838.735 385315.29,4664211.65 385462.45,4664092.53 385288.96,4663917.68 385273.71,4663536.93 386065.15,4663388.66 386345.73,4663034.18 388060.12,4663379.42 388310.87,4663188.42 389424.65,4662512.25 391812.11,4662345.42 392814.74,4662205.55 393042.47,4662576.08 393531.86,4662037.54 394528.18,4661906.8 394442.9,4660932.07 394036.42,4660361.88 393431.06,4660037.51 391907.44,4660540.09 391664.86,4659910.9 391703.95,4659399.25 391765.6,4659056.98 390524.73,4657468.38 390354.89,4656626.65 390143.44,4655952.88 390235,4655437.81 390765.24,4655073.07 390904.53,4655617.97 391190.65,4656254.42 391703.49,4655884.6 391990.72,4655549.3 392286.54,4654889.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[145467597.63896]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[213]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[216]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25146]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Naves]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Naves]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[NavŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[NavŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="213">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">436743.76,4664504.13 435976.66,4663367.65 435607.93,4663289.73 434998.96,4662657 434833.44,4661866.65 434361.41,4661860.65 434261.58,4662969.89 433483.37,4663559.23 433341.7,4664153.83 434134.86,4664240.48 434292.08,4664667.71 434654.13,4664462.95 434953.21,4664602.74 435309.46,4664694.45 436500.73,4664794.81 436743.76,4664504.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4836647.9307]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[214]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[217]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08131]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montesquiu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montesquiu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montesquiu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montesquiu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="214">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">439516.23,4660944.79 437681.91,4660735.19 437295.29,4660614.76 436555.31,4660295.47 436119.11,4660568.16 435924.31,4660373.62 435072.92,4660287.38 435375.55,4660658.05 434499.47,4661152.53 434171.3,4661657.6 434361.41,4661860.65 434833.44,4661866.65 434998.96,4662657 435607.93,4663289.73 435976.66,4663367.65 436743.76,4664504.13 436684.76,4661234.82 437293.79,4661498.3 438707.05,4661748.92 439386.39,4661379.69 440107.29,4661395.5 439516.23,4660944.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8163583.1121]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[215]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[218]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08237]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Quirze de Besora]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Quirze de Besora]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Quirze de Besora]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Quirze de Besora]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="215">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">407375.47,4660116.69 406430.37,4658483.28 406232.54,4658777.29 405367.2,4659762.74 403508.88,4660526.91 402931.24,4660410.18 402406.09,4660721.42 402058.86,4660572.08 401604.22,4661015.71 401769.22,4661225.96 401240.77,4661438.02 400776.24,4662338.1 402564.54,4662760.42 402429.11,4663838.01 402875.67,4664152.59 403935.66,4664038.14 405643.42,4663463.72 406072.59,4664075.35 406674.18,4664298.97 407531.28,4663584.65 406418.63,4663189.84 406719.14,4662657.72 407156.45,4662245.99 408063.26,4661779.56 407676.38,4661206.21 407765.23,4661018.6 407375.47,4660116.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22211219.7191]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[216]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[219]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08022]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Berga]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Berga]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Berga]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Berga]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="216">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">503836.83,4662315.22 503515.27,4662245.79 503440.08,4661652.18 503220.36,4661317.96 502950.83,4659844.4 501822.73,4659623.67 501293.33,4660332.27 500327.49,4660357.93 500410.19,4660696.44 500569.34,4661840.36 500738.14,4662300.62 501299.9,4662357.94 501602.32,4663612.99 501544.55,4664203.92 502040.6,4664125.76 503155.85,4663435.44 503242.96,4663440.03 503836.83,4662315.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9486789.2896]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[217]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[220]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17076]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Garrigoles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Garrigoles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Garrigoles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Garrigoles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="217">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">509058.32,4661441.26 508301.53,4661057.33 507494.84,4660147.69 506643.28,4659934.59 506345.71,4660182.12 506201.34,4660561.56 505776.96,4661046.67 505639.28,4660904.04 504709.09,4661107.67 504269.91,4662174.92 504380.95,4662524.09 505191.59,4662905.34 506290.64,4663140.48 506473.81,4662996.13 507274.84,4663439.75 507596.77,4663795.08 507930.65,4664066.99 508391.16,4663093.82 509002.43,4662837.32 508974.76,4662190.71 509058.32,4661441.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11274797.73995]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[218]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[221]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17004]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albons]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albons]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albons]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albons]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="218">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">462510.79,4663007.35 462733.75,4663908.32 463148.52,4663786.74 463567.12,4663994.23 464435.47,4664012.44 464876.02,4663748.77 465503.97,4663220.82 466508.73,4662935 467020.25,4662639.64 467673.05,4662033.79 468296.89,4661728.96 467993.38,4661188.58 468359.35,4661047.89 469629.5,4659933.71 469749.89,4659308.32 469754.92,4658556 470117.55,4657755.33 470038.16,4656885.17 470126.16,4656550.14 470106.38,4655924.71 469674.85,4655304.68 469609.08,4654320.12 470359.12,4654190.67 470542.52,4653435.49 471378.18,4652753.37 472139.71,4651860.5 472068.64,4651814.95 471173.97,4651625.44 470468.8,4651971.65 470156.8,4651925.52 469966.64,4651559.96 469718.24,4651573.76 469153.12,4652505.85 468233.05,4652716.96 468040,4653025.94 467240.11,4654112.04 466922.04,4654671.04 467137.58,4655189.63 466744.58,4655648.92 466900.36,4656471.15 467067.77,4656848.78 466612.54,4657000.21 465644.58,4657422.04 464638.55,4658610.99 464174.72,4659698.68 463719.03,4660069.38 463056.58,4661404.16 462510.79,4663007.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47547744.23766]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[219]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[222]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17183]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Aniol de Finestres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Aniol de Finestres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Aniol de Finestres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Aniol de Finestres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="219">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">420828.37,4652942.88 419996.64,4652271.56 418933.87,4651891.01 418566.76,4652341.86 419068.3,4653286.21 419022.62,4653569.66 418272.35,4653816.69 417125.23,4653871.16 417326.8,4654092.45 417182.51,4654527.28 417622.8,4655002.34 417958.86,4656407.64 418147.75,4658655.89 418086.79,4659801.99 418718.43,4660915.58 419484.55,4661119.53 419559.45,4660741.01 420254.96,4659020.72 420961.72,4659454.61 420717.57,4660203.47 420878.19,4660659.86 421792.97,4660916.98 422152.78,4660110.27 422565.98,4661356.45 421174.56,4661995.29 421887.75,4662350.45 421476.54,4663904.44 422672.47,4663917.38 422477.96,4663517.96 423061.87,4662676.14 423449.4,4662827.11 423852.21,4662474.5 425310.7,4662145.57 425610.95,4662347.18 425562.26,4662707.56 426190.17,4662583.18 426446.11,4662171.41 426696.61,4661449.95 426055.66,4659856.73 426279.21,4659107.38 425728.86,4658710.92 425159.14,4658786.78 424476.22,4658744.38 424556.49,4657642.92 424843.42,4656807.17 424438.46,4656473.42 424338.7,4657093.67 423632.61,4656771.49 423104.27,4657091.72 421719.82,4657077.43 422026.26,4655815.62 422056.48,4655403.8 422244.81,4655126.93 422078.28,4654531.86 421360.64,4654052.31 421392.09,4653477.34 420828.37,4652942.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52295778.18125]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[220]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[223]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08109]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Lluca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lluca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llu‡…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llu‡…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="220">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">393093.47,4658123.15 393031.2,4658580.8 392146.83,4658719.8 391765.6,4659056.98 391703.95,4659399.25 391664.86,4659910.9 391907.44,4660540.09 393431.06,4660037.51 394036.42,4660361.88 394442.9,4660932.07 394528.18,4661906.8 393531.86,4662037.54 393042.47,4662576.08 393422.43,4662918.5 393600.3,4663700.32 394170.73,4663545.57 394524.48,4663052.7 394765.4,4663493.2 395722.34,4663883.76 395904.46,4663076.41 395787.04,4662505.26 398003.5,4661940.78 399776.54,4662379.43 400776.24,4662338.1 401240.77,4661438.02 401769.22,4661225.96 401604.22,4661015.71 402058.86,4660572.08 401440.01,4660665.45 401058.72,4659679.87 400815.41,4659171.44 400522.65,4658983.53 400143.18,4658802.53 399400.85,4658784.16 399257.25,4657780.7 399380.79,4657506.7 399259.32,4657510.67 398001.23,4658041.35 397595.48,4657630.35 397094.54,4657974.09 396322.76,4658063.94 395764.86,4658962.16 395606.01,4658745.43 394920.86,4658606.97 393921.83,4658595.26 393093.47,4658123.15</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34565869.42065]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[221]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[224]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08045]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Capolat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Capolat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Capolat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Capolat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="221">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486935.83,4663264.94 487088.51,4662258.53 487262.3,4661649.96 487417.98,4661286.86 487091.99,4660752.51 487939.05,4660190.86 488117.29,4660007.75 488265.26,4659143.23 488204.03,4658608.8 488369.19,4657923.02 488113.01,4657551.01 487719.89,4657089.54 487593.21,4656807.78 487569.44,4656153.8 486232.82,4655982.58 485967.68,4656865.18 485806.99,4657183.34 484841.8,4657332.64 485119.21,4657851.61 485603.83,4658438.85 483714.75,4658694.34 483342.68,4658924.36 483267.39,4658976.66 482605.1,4659035.34 482340.24,4660032.66 481956.6,4661005.25 482861.6,4661215.42 482786.33,4661656.62 483349.83,4662665.78 483996.98,4662709.92 484753.86,4662806.64 485381.06,4663376.73 486100.56,4663800.79 486935.83,4663264.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27885458.95115]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[222]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[225]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17056]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cornella del Terri]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cornella del Terri]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cornell… del Terri]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cornell… del Terri]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="222">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365236,4660051 365704.96,4660304.7 365999,4660886 366845.46,4662040.19 366846,4662928 367190.86,4663079.38 367579.92,4663380.03 367995.01,4663344.33 368250.45,4663694.45 368496.42,4663363.26 369239.08,4663292.29 370101.97,4662770.33 370335.06,4661556.02 370828.77,4661007.36 371558.36,4661465.08 373039.54,4660577.92 373742.69,4660587.34 374337.42,4661819.09 375369,4661991.02 376655.96,4661654.65 377291.07,4662900.97 377932.62,4663078.29 378468.13,4662022.99 379333.2,4662114.48 379857.6,4662681.36 380480.07,4663160.81 380275.75,4662934.29 380507.62,4662430.75 380588.44,4662880.4 380795.57,4662759.28 381206,4662620.63 381205.08,4662890.89 382648.88,4662356.24 382078.76,4661364.75 381467.63,4660822.03 381664.95,4660169.28 381907.71,4659562.9 381655.98,4657609.45 381270.47,4656238.11 381234.91,4655618 381073.66,4655050.76 380561.91,4655024.23 380205.6,4654735.56 379426.4,4654837.87 379012.05,4654577.44 378652.77,4654082.92 378238.82,4653996.66 378182.45,4653401.74 377765.36,4653108.98 377001.3,4652735.13 376573.99,4652841.24 375959.9,4652762.72 376019.93,4652340.24 375815.24,4652688.06 375767,4652398 375240.83,4652113.79 372925.04,4653030.81 371888,4653250 371112.79,4653757.2 370593.93,4653806.05 369294.5,4654982.47 368472.99,4655025.83 368215.26,4655291.63 367835.81,4655993.6 367507.92,4656110.71 367775.59,4656549.06 367491.19,4656893.72 366273.3,4656288.06 366172.29,4656687.39 366360.05,4657624.44 366847.91,4658454.5 366501,4658538 366494,4658712 365600.09,4657466.82 365329.34,4657873.78 365361.52,4659288.39 365236,4660051</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[127801649.3965]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[223]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[226]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25124]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Lladurs]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lladurs]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lladurs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lladurs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="223">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">441390.04,4655582.04 441115.46,4656078.81 441208.8,4656751.85 440446.02,4657770.35 439904.67,4658260.12 439177.26,4658675.5 439058.86,4659320.89 440321.5,4660319.9 440364.52,4660764.2 439516.23,4660944.79 440107.29,4661395.5 441600.78,4661763.66 441776.32,4661690.01 443340.83,4662473.93 443746.26,4662968.61 445700.02,4663549.94 447451.28,4663629.48 447860.77,4663216.9 448320.74,4663139.06 448587.2,4662228.4 448827.67,4661638.57 450364.32,4661619.27 450386.03,4661402.16 450018.34,4660262.03 450110.09,4659798.91 448997.17,4659335.12 448774.88,4658012.76 447500.96,4657573.43 446439.12,4656743.88 446195.9,4656984.66 445245.86,4657159.95 444913.48,4656842.92 444704.83,4656532.22 444192.99,4656386.09 443172.61,4656469.13 442338.41,4656100.48 441742.29,4655551.33 441390.04,4655582.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[55367478.20461]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[224]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[227]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08233]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pere de Torello]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pere de Torello]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pere de Torell¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pere de Torell¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="224">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">462405.77,4653415.04 461527.93,4653136.46 460284.52,4654402.39 459660.53,4655336.55 458917.87,4656029.48 458436.79,4656646.38 458360.27,4656890.05 458745.71,4656777.76 459008.72,4657247.27 460363.7,4656417.35 461091.97,4657065.26 461269.86,4658171.61 460818.02,4657881.45 460477.48,4658286.94 460246.65,4658450 460972.97,4658812.27 461202.84,4659239.04 461376.93,4660211.52 461536.63,4660644.74 461255.56,4660985.24 461077.28,4662140.71 461342.97,4662422.52 462510.79,4663007.35 463056.58,4661404.16 463719.03,4660069.38 464174.72,4659698.68 464638.55,4658610.99 465644.58,4657422.04 466612.54,4657000.21 467067.77,4656848.78 466900.36,4656471.15 466744.58,4655648.92 466703.8,4655519.94 466271.33,4654835.2 465965.95,4654139.08 465276.95,4653887.54 464546.21,4654271.55 463913.57,4654770.01 463126.15,4654985.76 462589.67,4654309.49 462405.77,4653415.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37188531.33725]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[225]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[228]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17133]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[19]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Planes d'Hostoles, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Planes d'Hostoles, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Planes d'Hostoles, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Planes d'Hostoles, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="225">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">492161.06,4662294.3 492635.23,4662294.88 493560.47,4662787 494186.24,4662875.02 494505,4662715.07 495569.91,4662625.72 496335.41,4662490.02 496160.81,4660637.03 495841.92,4660655.84 495259.43,4659969.89 494613.49,4658247.16 494136.11,4658543.3 493718.76,4658919.34 493166.5,4658594.16 492503.15,4658869.53 491904.6,4658814.46 491651.08,4659519.22 491556.29,4659696 491240.5,4660400.1 492124.82,4661794.69 492161.06,4662294.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15612065.03234]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[226]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[229]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17216]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Viladasens]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Viladasens]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Viladasens]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Viladasens]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="226">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">328016.6,4654527.37 326006.69,4655920.61 325437.09,4656246.31 325282.9,4656653.63 325389.11,4656723.11 325528.14,4656795.2 325858.06,4657252.88 325861,4657675 325336,4658266 325243,4658807 325708,4659711 325786,4660738 325821.99,4662190.75 326075.08,4663063.35 326755.27,4663174.33 328168.76,4662327.53 328877.28,4662256.06 329841.37,4662101.72 330311.6,4660921.95 330897.07,4660649.71 330160,4660526 329773.78,4659330.5 329854.43,4658618.13 329779.3,4657917.88 329520.19,4657138.04 330707,4656957 333269.37,4656390.19 333024.8,4656104.71 332115.05,4655493.69 331164.52,4654361.73 330347.36,4654638.54 328016.6,4654527.37</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333335.35,4662700.54 333592.98,4662263.98 334207.85,4661514.25 333755.13,4660713.17 333775.54,4659061.13 333439.5,4659173.32 332643.23,4660459.74 332249.06,4660961.15 333335.35,4662700.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[41465199.6695]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[227]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[230]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25128]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llimiana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llimiana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llimiana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llimiana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="227">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">506435.5,4654524.48 505275.65,4654980.7 505194.03,4655060.1 504832.53,4655728.58 505540.91,4656449.65 505920.99,4657609.58 505113.5,4657571.55 504571.41,4658020.98 504290.27,4657844.02 503620.19,4658905 502950.83,4659844.4 503220.36,4661317.96 503440.08,4661652.18 503515.27,4662245.79 503836.83,4662315.22 504269.91,4662174.92 504709.09,4661107.67 505639.28,4660904.04 505776.96,4661046.67 506201.34,4660561.56 506345.71,4660182.12 506643.28,4659934.59 506241.74,4659511.27 506228.66,4658898.66 506611.97,4658443.63 506849.07,4658350.07 506575.86,4657758.92 507498.5,4657060.47 507923.65,4656807.61 507445.41,4656386.14 507005.27,4655526.53 507102.02,4654569.48 507394.04,4654409.93 506435.5,4654524.48</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16718369.96771]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[228]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[231]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17195]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tallada d'Emporda, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tallada d'Emporda, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tallada d'Empord…, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tallada d'Empord…, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="228">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">508560.4,4657162.44 507923.65,4656807.61 507498.5,4657060.47 506575.86,4657758.92 506849.07,4658350.07 506611.97,4658443.63 506228.66,4658898.66 506241.74,4659511.27 506643.28,4659934.59 507494.84,4660147.69 508301.53,4661057.33 509058.32,4661441.26 510611.52,4661981.98 511017.31,4660906.83 510880.06,4659171.68 509848.84,4659021.22 508611.57,4658906.77 508375.1,4658068.96 508560.4,4657162.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12684574.3232]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[229]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[232]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17018]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellcaire d'Emporda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellcaire d'Emporda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellcaire d'Empord…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellcaire d'Empord…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="229">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428569.73,4656707.42 427573.38,4657866.84 427142.52,4658121.78 426279.21,4659107.38 426055.66,4659856.73 426696.61,4661449.95 427446.12,4661498.94 428133.49,4661455.6 428138.1,4661599.81 428576.96,4661172.49 429385.35,4661188.65 429979.8,4660287.55 429667.03,4659442.73 429995.18,4659051.1 430584.48,4659206.89 429714.87,4658271.28 429119.12,4656697.55 428569.73,4656707.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13115324.71975]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[230]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[233]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08195]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Agusti de Llucanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Agusti de Llucanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Agust¡ de Llu‡anŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Agust¡ de Llu‡anŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="230">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">480864.2,4656491.47 479988.03,4658056.03 479117.67,4658331.4 477698.85,4658853.54 477852.05,4659532.81 477914.99,4660562.01 478870.65,4661276.05 480514.82,4661447.52 481956.6,4661005.25 482340.24,4660032.66 482605.1,4659035.34 483267.39,4658976.66 483342.68,4658924.36 481680.78,4657339.95 480864.2,4656491.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15683726.31145]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[231]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[234]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17035]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Camos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Camos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cam¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cam¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="231">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">407750.05,4650772.05 408076.36,4650785.21 408333.26,4652396.61 408300.31,4652905.3 408959.43,4653564.73 409194.83,4654522.67 407821.27,4655580.4 407289.06,4655086.26 407357.28,4654897.72 406707.44,4655931.53 406752.97,4657119.76 406430.37,4658483.28 407375.47,4660116.69 408887.94,4661160.71 409794.42,4661197.74 411085.6,4660400.27 412071.34,4660288.61 412945.48,4660258.15 413108.4,4659610.71 413726,4659384.38 413757.92,4658875.5 413290.78,4658428.23 413248.69,4658211.31 413175.15,4657702.01 411776.25,4656262.46 411414.53,4655538.14 411199.92,4654799.16 410927.45,4654856.35 410735.23,4655117.76 410467.26,4655144.14 409579.26,4654687.79 409432.42,4654167.29 408969.74,4653027.11 409530.45,4651501.86 408245.98,4650385.64 407750.05,4650772.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35848762.52735]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[232]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[235]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08144]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olvan]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Olvan]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Olvan]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Olvan]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="232">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433366.11,4658975.4 433931.08,4659666.35 435072.92,4660287.38 435924.31,4660373.62 436119.11,4660568.16 436555.31,4660295.47 437295.29,4660614.76 437681.91,4660735.19 439516.23,4660944.79 440364.52,4660764.2 440321.5,4660319.9 439058.86,4659320.89 438495.42,4658599.99 437884.73,4658123.8 437153.78,4657797.3 437090.49,4657327.7 438035.25,4657262.71 438164.4,4656921.1 438042.49,4656282.16 437527.56,4656344.35 437377.22,4656202.25 436541.93,4656120.83 433774.25,4654862.94 432808.78,4653936.1 432194.32,4655005.2 432526.21,4655372.71 432317.48,4656160.3 432521.93,4656424.8 433372.31,4656775.09 433224.97,4657216.54 433044.87,4657473.53 433116.29,4658790.15 433366.11,4658975.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27025128.06836]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[233]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[236]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08150]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Oris]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Can Branques]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Or¡s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Can Branques]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="233">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">318821.01,4648566.11 317697.57,4647778.28 316321.49,4647791.08 315207.28,4647363.74 314209.87,4645957.62 313215.15,4645400.99 313161.76,4644822.72 312417.34,4644753.31 311928.44,4645049.68 311387.81,4645801.71 310724.07,4646221.01 309966.91,4646395.57 309113.57,4646096.64 308120.07,4645671.53 306923.59,4646032.71 306813.1,4646701.42 305954.68,4647183.3 305472.46,4647860.86 306617.82,4648233.75 306654.51,4649308.1 306396.61,4649865.36 304833.13,4650721.19 305094.07,4652077.88 305993.16,4652643.13 306655,4654036 306469,4654283 306133,4654235 305945,4655059 305769,4655592 306378,4657164 307183,4657587 307476,4659683 308131,4660866 308527.42,4659900.86 309684,4659013 311080,4658315 313386,4658119 313531,4657632 314651,4657011 315630,4656858 317824.19,4657234.54 318608.19,4657010.54 321077.39,4656665.89 322340.41,4656183.98 324054,4656262 325322,4656791 325389.11,4656723.11 325282.9,4656653.63 325004.02,4656503.89 324772.85,4655250.4 324428.7,4654856.32 324245.91,4653735.41 324023.78,4653015.55 323557.88,4652825.52 322525.93,4652886.6 322324.06,4652623.69 322031.16,4652907.18 322045.63,4653706.2 321313.47,4655038.76 320053.34,4655146.23 318128,4654732 318094,4654551 318492,4653761 318997.62,4653068.79 319243,4652474 318625.28,4652066.67 318821.01,4648566.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[161881014.70361]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[234]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[237]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25002]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ager]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ager]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[·ger]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[·ger]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="234">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">406430.37,4658483.28 406752.97,4657119.76 406707.44,4655931.53 406300.93,4656130.51 405795.5,4655698.36 405367.92,4654994.66 404027.76,4655890.42 403709.32,4655801.61 403389.1,4655381.07 402989.08,4655478.85 402850.34,4655078.75 401962.92,4655483.95 401864.6,4656258.68 401584.31,4656517.96 401373.59,4656506.51 401022.32,4657173.3 400244.36,4657295.92 399380.79,4657506.7 399257.25,4657780.7 399400.85,4658784.16 400143.18,4658802.53 400522.65,4658983.53 400815.41,4659171.44 401058.72,4659679.87 401440.01,4660665.45 402058.86,4660572.08 402406.09,4660721.42 402931.24,4660410.18 403508.88,4660526.91 405367.2,4659762.74 406232.54,4658777.29 406430.37,4658483.28</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27215078.43485]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[235]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[238]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08011]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Avia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Avia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Avi…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Avi…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="235">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495111.53,4656479.87 494424.29,4658002.77 494613.49,4658247.16 495259.43,4659969.89 495841.92,4660655.84 496160.81,4660637.03 496568.08,4660691.63 497448.47,4659423.3 497646.15,4658762.23 497759.31,4658267.18 498282.9,4658127.09 498024.53,4657037.31 497852.92,4656730.46 497155.58,4656349.85 496752.61,4656573.8 496245.24,4656144.34 495998.59,4655761.15 495753.64,4655950.7 495416.85,4656015.38 495096.95,4655986.87 495111.53,4656479.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11819184.7086]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[236]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[239]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17166]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Jordi Desvalls]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Jordi Desvalls]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Jordi Desvalls]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Jordi Desvalls]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="236">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">500050.48,4657968.39 498920.57,4659077.7 498165.75,4659237.65 498282.9,4658127.09 497759.31,4658267.18 497646.15,4658762.23 497668.36,4659369.22 498110.54,4659887.68 498136.46,4660519.02 498793.2,4660207.98 500298.54,4660309.94 500374.65,4658429.03 500050.48,4657968.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4247019.8179]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[237]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[240]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17055]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Colomers]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Colomers]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Colomers]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Colomers]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="237">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">502352.41,4656506.46 501432.23,4656444.95 500317.94,4656202.6 500133.08,4656489.22 500438.53,4657624.31 500050.48,4657968.39 500374.65,4658429.03 500298.54,4660309.94 500327.49,4660357.93 501293.33,4660332.27 501822.73,4659623.67 502296.24,4657415.18 502352.41,4656506.46</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6894579.48625]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[238]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[241]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17085]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Jafre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Jafre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Jafre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Jafre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="238">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">481922.33,4654929.09 481089.8,4654719.05 480806.12,4653825.66 480489.21,4653472.76 480609.4,4653318.23 479901.14,4652824.49 477996.64,4652352.63 477997.78,4652207.53 477455.07,4652265.54 477480.16,4652549.94 476707.09,4652757.07 476483.5,4653289.28 476024.56,4653698.28 475145.74,4654070.55 474576.39,4654399.76 474417.8,4655294.7 474294.09,4655578.7 473726.66,4655850.01 473381.79,4657018.14 473505.15,4658461.84 473478.84,4659381.29 473899.04,4659298.26 474612.43,4660306.79 476334.84,4660273.1 477085.06,4659881.82 477852.05,4659532.81 477698.85,4658853.54 479117.67,4658331.4 479988.03,4658056.03 480864.2,4656491.47 481761.67,4656518.2 481898.66,4656232.22 481743.24,4655732.5 481922.33,4654929.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[44099373.27435]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[239]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[242]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17040]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Canet d'Adri]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Canet d'Adri]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Canet d'Adri]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Canet d'Adri]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="239">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">372416.28,4648813.44 371667.43,4648693.67 371357.5,4648299.17 370701.67,4647623.26 370142.2,4647224.24 369325.65,4648517.25 369325.19,4649254.6 368984.64,4649081.26 368658.89,4649683.06 367993.14,4650096.76 366165.92,4649716.68 366240.35,4649443.64 365592.37,4648991.33 364829.03,4648733.44 363747.02,4650421.78 363474.5,4650638.7 364656,4651615 364334,4652594.7 364069,4653651 364250.02,4654650.14 364422.65,4654652.47 364169.73,4655677.28 364645.1,4656179.46 364271.21,4656323.7 364441.31,4657134.86 364329.34,4659257.96 364362,4659640 364552,4659954 365236,4660051 365361.52,4659288.39 365329.34,4657873.78 365600.09,4657466.82 366494,4658712 366501,4658538 366847.91,4658454.5 366360.05,4657624.44 366172.29,4656687.39 366273.3,4656288.06 367491.19,4656893.72 367775.59,4656549.06 367507.92,4656110.71 367835.81,4655993.6 368215.26,4655291.63 368472.99,4655025.83 369294.5,4654982.47 370593.93,4653806.05 371112.79,4653757.2 371888,4653250 372925.04,4653030.81 373048.44,4652511.8 373121.04,4651811.12 373489.61,4650213.17 372598.74,4649299.71 372416.28,4648813.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[59454725.13055]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[240]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[243]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25064]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellar de la Ribera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellar de la Ribera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellar de la Ribera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellar de la Ribera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="240">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">472068.64,4651814.95 472139.71,4651860.5 471378.18,4652753.37 470542.52,4653435.49 470359.12,4654190.67 469609.08,4654320.12 469674.85,4655304.68 470106.38,4655924.71 470126.16,4656550.14 470038.16,4656885.17 470117.55,4657755.33 469754.92,4658556 469749.89,4659308.32 469629.5,4659933.71 469951.63,4659776.37 470102.97,4659704.37 471410.37,4659437.22 472863.68,4659493.76 473478.84,4659381.29 473505.15,4658461.84 473381.79,4657018.14 473726.66,4655850.01 474294.09,4655578.7 474417.8,4655294.7 474576.39,4654399.76 475145.74,4654070.55 476024.56,4653698.28 476483.5,4653289.28 476707.09,4652757.07 476695.61,4652296.29 476619.14,4651615.88 476463.4,4651069 476127.06,4650461.2 475057.65,4649631.08 474819.1,4649685.02 474330.94,4649602.72 473788.82,4648837.98 472977.44,4648987.35 472379.48,4648828.04 471923.22,4649493.73 471945.74,4649722.42 471815.04,4650896.94 472150.92,4651053.59 472068.64,4651814.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43661701.16315]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[241]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[244]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17172]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti de Llemena]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti de Llemena]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ de Ll‚mena]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ de Ll‚mena]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="241">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">503779.37,4655948.3 502352.41,4656506.46 502296.24,4657415.18 501822.73,4659623.67 502950.83,4659844.4 503620.19,4658905 504290.27,4657844.02 504571.41,4658020.98 505113.5,4657571.55 505920.99,4657609.58 505540.91,4656449.65 504832.53,4655728.58 505194.03,4655060.1 504180.79,4655630.54 503779.37,4655948.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9366836.59995]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[242]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[245]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17211]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Verges]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Verges]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Verges]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Verges]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="242">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">442762.51,4650458.15 443018.59,4650639.22 442761.7,4652577.51 441687.11,4653574.46 441742.29,4655551.33 442338.41,4656100.48 443172.61,4656469.13 444192.99,4656386.09 444704.83,4656532.22 444913.48,4656842.92 445245.86,4657159.95 446195.9,4656984.66 446439.12,4656743.88 447500.96,4657573.43 448774.88,4658012.76 448997.17,4659335.12 450110.09,4659798.91 450771.99,4658958.43 451169.44,4658044.74 451658.52,4657800.5 452491.73,4657095.21 452842.26,4657213.58 452600.98,4656798.05 452222.68,4656636.94 452318.94,4654682.13 452095.26,4654184.47 451613.57,4652880.57 450515.53,4652997.19 450248.02,4652018.18 449911.32,4651131.69 449349.07,4651821.76 447165.19,4651855.66 445885.05,4651636.03 446082.28,4650202.67 446535.93,4649505.48 446508.45,4649413.3 446383.574,4649340.121 446250.761,4649379.184 445696.35,4649963.04 445688.261,4650379.184 445578.26,4650546.98 445391.386,4650480.746 445349.03,4650153.07 444913.73,4649689.19 443711.699,4649769.809 443578.886,4649957.309 443318.46,4649814.46 443157.011,4650051.059 442917.77,4650038.95 442762.51,4650458.15</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[62437966.2613]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[243]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[246]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08254]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Maria de Corco]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Maria de Corco]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Maria de Corc¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Maria de Corc¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="243">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495111.53,4656479.87 494361.43,4656466.25 494349.25,4656079.39 493996.315,4655857.086 493868.64,4655927.93 493811.94,4656116.461 494090.065,4656516.461 494374.44,4656722.711 494399.44,4656797.711 494265.065,4656866.461 494091.93,4656874.01 493483.815,4656491.461 493070.32,4656351.02 492761.94,4656407.086 492575.35,4656664.61 492299.44,4656860.211 492098.22,4656765.88 492055.69,4656578.961 492297.02,4656170.36 492193.19,4655860.211 491852.81,4655682.68 491133.16,4655909 490423.7,4656189.48 490435.59,4656628.04 490575.44,4657272.17 490981.77,4657391.97 491298.002,4658148.509 491282.377,4659296.947 491556.29,4659696 491651.08,4659519.22 491904.6,4658814.46 492503.15,4658869.53 493166.5,4658594.16 493718.76,4658919.34 494136.11,4658543.3 494613.49,4658247.16 494424.29,4658002.77 495111.53,4656479.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9824955.30007]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[244]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[247]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17050]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cervia de Ter]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cervia de Ter]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cervi… de Ter]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cervi… de Ter]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="244">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">441390.04,4655582.04 439370.5,4656497.22 439046.74,4656674.24 438286.3,4656955.95 438164.4,4656921.1 438035.25,4657262.71 437090.49,4657327.7 437153.78,4657797.3 437884.73,4658123.8 438495.42,4658599.99 439058.86,4659320.89 439177.26,4658675.5 439904.67,4658260.12 440446.02,4657770.35 441208.8,4656751.85 441115.46,4656078.81 441390.04,4655582.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6391442.33745]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[245]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[248]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08265]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Vicenc de Torello]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Vicenc de Torello]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Vicen‡ de Torell¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Vicen‡ de Torell¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="245">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">502241.17,4653111.21 501918,4652987.44 501546.27,4653097.88 500068.18,4653194.82 499449.29,4652672.97 499115.92,4653182.25 498600.25,4653517.62 498324.15,4654020.08 498406.14,4654271.92 498150.65,4656093.16 497852.92,4656730.46 498024.53,4657037.31 498282.9,4658127.09 498165.75,4659237.65 498920.57,4659077.7 500050.48,4657968.39 500438.53,4657624.31 500133.08,4656489.22 500317.94,4656202.6 501432.23,4656444.95 502352.41,4656506.46 503779.37,4655948.3 503090.06,4655839.44 502283.23,4654455.43 502081.29,4653846.84 502241.17,4653111.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18882562.2863]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[246]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[249]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17068]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Foixa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Foixa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Foix…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Foix…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="246">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428569.73,4656707.42 429119.12,4656697.55 429714.87,4658271.28 430584.48,4659206.89 431333.73,4659182.54 431321.15,4659062.24 431988.65,4658350.85 432484.37,4658604.9 433012.33,4658964.64 433366.11,4658975.4 433116.29,4658790.15 433044.87,4657473.53 433224.97,4657216.54 433372.31,4656775.09 432521.93,4656424.8 432317.48,4656160.3 432526.21,4655372.71 432194.32,4655005.2 430696.22,4654368.97 429569.55,4653523.88 428574.23,4653169.79 428194.69,4653211.61 427402.06,4654321.3 427112.47,4654632.3 426525.65,4655056.63 427669.83,4655494.53 427708.79,4655979.34 428584.83,4656057.37 428418.63,4656336.26 428569.73,4656707.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20829728.8353]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[247]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[250]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08201]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Boi de Llucanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Boi de Llucanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Boi de Llu‡anŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Boi de Llu‡anŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="247">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">425075.28,4652638.09 425160.91,4653033.83 425412.42,4653875.52 424090.6,4654421.79 424474.14,4655070.99 424334.59,4656248.12 424438.46,4656473.42 424843.42,4656807.17 424556.49,4657642.92 424476.22,4658744.38 425159.14,4658786.78 425728.86,4658710.92 426279.21,4659107.38 427142.52,4658121.78 427573.38,4657866.84 428569.73,4656707.42 428418.63,4656336.26 428584.83,4656057.37 427708.79,4655979.34 427669.83,4655494.53 426525.65,4655056.63 427112.47,4654632.3 427402.06,4654321.3 428194.69,4653211.61 427217.37,4652631.89 427006.93,4652994.78 425790.35,4652216.5 425075.28,4652638.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18577211.60655]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[248]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[251]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08160]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Perafita]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Perafita]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Perafita]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Perafita]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="248">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">483506.18,4653572.55 481922.33,4654929.09 481743.24,4655732.5 481898.66,4656232.22 481761.67,4656518.2 480864.2,4656491.47 481680.78,4657339.95 483342.68,4658924.36 483714.75,4658694.34 485603.83,4658438.85 485119.21,4657851.61 484841.8,4657332.64 485806.99,4657183.34 485967.68,4656865.18 486232.82,4655982.58 486496.56,4654768.76 485028.64,4654270.59 483886.38,4654373.92 483682.78,4653995.99 483506.18,4653572.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17263510.23105]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[249]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[252]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17123]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[28]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palol de Revardit]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palol de Revardit]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palol de Revardit]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palol de Revardit]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="249">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">344046,4634955 343627.63,4635162.42 343587,4635513 342559.3,4635413.14 342727.6,4635716.22 342285.77,4635847.85 340968.16,4633264.48 340276.54,4632170.37 339721.52,4631004.32 339333.53,4631196.67 339289.41,4632149 339564.77,4633563.22 339371.2,4634385.19 339160.74,4635033.97 338883.34,4635018.6 338754.84,4635532.38 338767.79,4635976.19 337855.94,4636103.48 337820.13,4636242.19 337431.99,4636029.5 337609.1,4637171.85 337528.43,4637991.63 337568,4638415 337674.73,4638659.86 337667.17,4639003.93 337421.39,4639634.88 337249,4640308 336648.55,4640504.67 335969.36,4640011.16 335698.26,4639929.81 335246.44,4640287.74 335326.59,4641167.64 334726.1,4641785.89 334170.08,4641501.91 333450,4642335 333347,4643375 333733,4644956 333445,4646189 332624,4646572 332003,4647125 331501,4647967 330686,4648782 331884,4650576 332786,4650482 333244,4650590 333588.86,4650765.75 334203.58,4650481.53 333544.24,4649590.67 334726,4648625 336334,4646731 336959.63,4646327.5 336699.15,4645977.15 336462.8,4644822.88 336643,4644447 337155,4644824 337897,4644192 339069,4644706 339872,4645692 340626.5,4647752.24 342012.6,4648786.52 342632.32,4649993.61 342830,4651151 341823,4652533 341383.77,4652660.58 342153.18,4654850.5 341824.1,4655697.45 340833.87,4656838.24 341665.73,4657598.66 342115.76,4657792.08 342736.21,4658712.36 342830.94,4658332.67 343726.19,4656691.55 343671.62,4656090.97 344463.34,4656050.74 344639.8,4655794.35 345077.9,4655520.79 345477.59,4654898.73 346591.69,4654079.47 347535.66,4652989.56 347426.65,4652735.05 346432.73,4652029.9 346860.79,4651585.38 346822.06,4651196.69 347151.45,4650126.49 347736.39,4649982.58 348397.7,4649047.7 348255.03,4648394.96 348342.37,4647942.37 348200.77,4647000 347622.07,4646153.04 347046.24,4645855.35 346720.99,4645019.57 345916,4645661 345579,4644716 344819,4643812 344279.87,4639962.71 345763.5,4639886.27 345198.41,4638973.88 345320.58,4638567.62 344988.14,4637923.44 345036.34,4636410.65 345481.16,4635974.43 344386.89,4635598.72 344593.22,4635199.31 344046,4634955</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[176372048.57181]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[250]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[253]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25034]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Artesa de Segre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Artesa de Segre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Artesa de Segre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Artesa de Segre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="250">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">458436.79,4656646.38 458007.13,4656360.44 457245.88,4655760.72 457550.28,4655091.21 459064.55,4653616.44 459187.53,4653437.62 458978.28,4652877.23 458655.06,4652514.68 458247.37,4652400.59 458261.54,4651445.52 458996.02,4651162.33 458653.44,4650826.59 458660.29,4650250.05 457791.76,4650053.33 457297.55,4649746.64 457069.85,4649921.46 456880.49,4650274.05 456743.76,4649890.46 456095.99,4649504.46 457642.93,4648426.23 456981.63,4648164.49 456953.57,4647681.94 456388.38,4647410.99 456536.37,4646763.49 455572.57,4646625.28 455154.37,4646385.55 454883.73,4646524.93 454646.11,4646464.07 454474.78,4646750.48 454144.33,4647433.39 454409.73,4647539.35 454062.39,4647897.21 453635.43,4647785.7 453741.68,4648429.92 454850.06,4649696.6 454797.57,4650802.41 454574.06,4651677.04 454886.45,4651843.52 454873.87,4652206.83 454458.73,4652177.27 454690.19,4652909.7 453837.97,4653230.57 453363.77,4653113.66 452785.71,4653486.29 452167.25,4653576.46 452095.26,4654184.47 452318.94,4654682.13 452222.68,4656636.94 452600.98,4656798.05 452842.26,4657213.58 454253.94,4658271.47 454647.59,4658695.66 455558.6,4658476.75 455990.47,4658195.66 456441.92,4657304.24 456909.62,4657549.1 457903.43,4657603.7 458360.27,4656890.05 458436.79,4656646.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47958188.13185]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[251]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[254]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08901]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rupit i Pruit]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rupit]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rupit i Pruit]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rupit]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="251">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">411055.35,4649015.42 409259.83,4648112.59 408375.12,4648105.49 408397.91,4649233.84 408705.19,4650080.48 408245.98,4650385.64 409530.45,4651501.86 408969.74,4653027.11 409432.42,4654167.29 409579.26,4654687.79 410467.26,4655144.14 410735.23,4655117.76 410927.45,4654856.35 411199.92,4654799.16 411414.53,4655538.14 411776.25,4656262.46 413175.15,4657702.01 413248.69,4658211.31 413287.31,4657909.53 414394.96,4657265.02 414771.39,4657252.23 415743.03,4657910.23 416744.49,4657864.75 417173.49,4658154.67 417712.73,4658149.39 418147.75,4658655.89 417958.86,4656407.64 417330.8,4656262.5 417085.94,4655833.8 417349.75,4654807.8 416454.89,4655193.39 415114.2,4654546.18 415362.08,4654111.05 415134.23,4652859.35 414277.31,4652519.55 414007.9,4651951.24 413497.2,4651013.34 412863.62,4651465.71 411580.9,4650394.01 411373.22,4649566.25 411055.35,4649015.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[44460352.67795]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[252]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[255]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08188]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sagas]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sagas]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sag…s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sag…s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="252">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">487858.94,4652743.87 487471.05,4653209.01 486346.15,4653012.55 485834.15,4652247.47 485522.41,4652307.09 485138.48,4652672.15 484757.47,4652675.55 483667.91,4652800.08 483506.18,4653572.55 483682.78,4653995.99 483886.38,4654373.92 485028.64,4654270.59 486496.56,4654768.76 486232.82,4655982.58 487569.44,4656153.8 487593.21,4656807.78 487719.89,4657089.54 488113.01,4657551.01 488369.19,4657923.02 488204.03,4658608.8 488963.52,4658268.71 489212.54,4658110.01 489574.57,4657394.6 489954.252,4657554.759 490367.83,4657938.9 490438.627,4657843.822 490360.502,4657437.572 490575.44,4657272.17 490435.59,4656628.04 490423.7,4656189.48 491133.16,4655909 490695.79,4655578.21 490166.18,4655551.83 489232.82,4654940.38 488786.39,4654371.16 489154.88,4654067.18 488454.38,4652797.88 487858.94,4652743.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19279817.35492]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[253]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[256]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17169]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Julia de Ramis]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Julia de Ramis]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Juli… de Ramis]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Juli… de Ramis]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="253">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">508560.4,4657162.44 509242.15,4657114.54 510652.68,4655988.91 510664.69,4655837.39 510101.37,4655217.36 509680.93,4654326.51 508100.85,4654464.15 507887.74,4654437.89 507394.04,4654409.93 507102.02,4654569.48 507005.27,4655526.53 507445.41,4656386.14 507923.65,4656807.61 508560.4,4657162.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7406226.96905]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[254]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[257]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17204]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ulla]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ulla]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ull…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ull…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="254">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">421723.64,4652031.27 420828.37,4652942.88 421392.09,4653477.34 421360.64,4654052.31 422078.28,4654531.86 422244.81,4655126.93 422056.48,4655403.8 422026.26,4655815.62 421719.82,4657077.43 423104.27,4657091.72 423632.61,4656771.49 424338.7,4657093.67 424438.46,4656473.42 424334.59,4656248.12 424474.14,4655070.99 424090.6,4654421.79 425412.42,4653875.52 425160.91,4653033.83 425075.28,4652638.09 423231.27,4651707.53 421723.64,4652031.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15110285.01234]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[255]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[258]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08225]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti d'Albars]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti d'Albars]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ d'Albars]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ d'Albars]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="255">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">441742.29,4655551.33 441687.11,4653574.46 441325.1,4653829.29 441435.3,4653863.79 441052.84,4654076.15 440534.34,4653072.91 439984.24,4653178.07 439858.09,4652460.33 439652.57,4652146.15 439021.39,4651824.53 438681.02,4651725.02 438653.64,4652076.18 438165.44,4652365.9 438644.17,4653443.69 437566.55,4653212.91 437383.69,4653453.97 437319.62,4654139.91 436843.97,4654972.25 436899.12,4655371.59 437243.07,4655208.95 438520.62,4654908.63 438445.18,4655402.71 437377.22,4656202.25 437527.56,4656344.35 438042.49,4656282.16 438164.4,4656921.1 438286.3,4656955.95 439046.74,4656674.24 439370.5,4656497.22 441390.04,4655582.04 441742.29,4655551.33</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14001764.06375]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[256]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[259]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08285]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torello]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torello]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torell¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torell¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="256">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">493196.59,4654126.04 491604.94,4653826.52 490707.32,4655214.91 490695.79,4655578.21 491133.16,4655909 491852.81,4655682.68 492193.19,4655860.211 492297.02,4656170.36 492055.69,4656578.961 492098.22,4656765.88 492299.44,4656860.211 492575.35,4656664.61 492761.94,4656407.086 493070.32,4656351.02 493483.815,4656491.461 494091.93,4656874.01 494265.065,4656866.461 494399.44,4656797.711 494374.44,4656722.711 494090.065,4656516.461 493811.94,4656116.461 493868.64,4655927.93 493996.315,4655857.086 494349.25,4656079.39 494421.38,4654904.57 493984.6,4654591.97 493196.59,4654126.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7097750.19326]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[257]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[260]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17025]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bordils]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bordils]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bordils]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bordils]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="257">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333335.35,4662700.54 333412.28,4663307.2 333119.59,4663783.47 332981.87,4664648.3 332505.21,4664480.3 331604.5,4665099.82 331177.98,4665260.96 331058.16,4665058.13 330366.08,4665849.24 330847.82,4666310.85 331090,4667308 332234.59,4669414.24 332290.99,4670626.34 332412.14,4671060.71 331035.83,4670466.6 330778.64,4670802.37 329732.92,4670976.14 329027.36,4670889.49 328841.12,4670993.71 328499.95,4671922.64 329417.48,4672238.95 329686.56,4672790.21 329998.45,4673328.87 329584.08,4673666.87 331720.4,4674829.59 332189.57,4673955.18 332921.17,4673222.44 333514.53,4672509.37 334142.15,4672393.3 335203.36,4672259.23 336290.99,4672530.27 337402.05,4672041.21 338013.85,4671903.93 339169.66,4671748.24 339943.86,4672160 340116.23,4672396.5 340019.76,4672012.93 339749.94,4671480.78 339038.67,4670245.78 338370.14,4669581.56 339229.92,4669089.89 339662.2,4668313.74 339363.74,4667172.09 339643.13,4666197.72 341508.73,4666696.37 342793.3,4666893.99 345985.25,4668186.46 346064.48,4667942.68 346472.9,4667854.85 346863.14,4666597.29 347616.34,4666559.51 347727.87,4665297.16 347302,4664437 346983.4,4664589.27 346808,4664418 346419.69,4664859.66 345979.32,4664344.79 345203.71,4663077.33 344807.57,4662150 344325,4661426.43 343650,4660861.38 342926.97,4659445.36 342736.21,4658712.36 342115.76,4657792.08 341665.73,4657598.66 340609.04,4658849.93 340298.24,4660423.77 339963.57,4660665.39 339461.63,4661157.74 339093.26,4661858.39 338749.23,4662087.34 337496.52,4662625.7 334947.27,4661351.67 334207.85,4661514.25 333592.98,4662263.98 333335.35,4662700.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">341383.77,4652660.58 340651,4652477 340709.05,4654614.94 340193.95,4655858.03 340833.87,4656838.24 341824.1,4655697.45 342153.18,4654850.5 341383.77,4652660.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[139293046.05786]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[258]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[261]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25115]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[25]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Isona i Conca Della]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Isona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Isona i Conca Dell…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Isona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="258">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">498324.15,4654020.08 497518.61,4653965.12 497102.31,4654077.19 496242.63,4653575.57 496166.82,4653468.41 495525.51,4653559.5 495753.64,4655950.7 495998.59,4655761.15 496245.24,4656144.34 496752.61,4656573.8 497155.58,4656349.85 497852.92,4656730.46 498150.65,4656093.16 498406.14,4654271.92 498324.15,4654020.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6571409.0639]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[259]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[262]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17067]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Flaca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Flaca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fla‡…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fla‡…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="259">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">464655.55,4648406.01 463945.48,4647986.04 463867.56,4647574.22 463656.48,4647404.6 462998.79,4648234.34 463264.71,4648704.56 462944.15,4649090.93 462295.9,4650198.5 462171.88,4649832.71 461466.46,4649228.65 460684.08,4648333.53 460862.28,4647739.05 461801.28,4645830.96 461861.07,4645287.74 461592.87,4644770.14 461249.51,4645675.5 460760.95,4645226.23 461144.09,4645042.55 461002.1,4644671.44 460853.58,4643752.56 460467.13,4643287.38 459047.56,4643656.36 458334.12,4644166.09 458056.27,4644469.84 458100.07,4644982.18 457847.16,4646056.88 457521.82,4647714.06 457166.93,4647745.6 456981.63,4648164.49 457642.93,4648426.23 456095.99,4649504.46 456743.76,4649890.46 456880.49,4650274.05 457069.85,4649921.46 457297.55,4649746.64 457791.76,4650053.33 458660.29,4650250.05 458653.44,4650826.59 458996.02,4651162.33 458261.54,4651445.52 458247.37,4652400.59 458655.06,4652514.68 458978.28,4652877.23 459187.53,4653437.62 459064.55,4653616.44 457550.28,4655091.21 457245.88,4655760.72 458007.13,4656360.44 458436.79,4656646.38 458917.87,4656029.48 459660.53,4655336.55 460284.52,4654402.39 461527.93,4653136.46 462405.77,4653415.04 463079.86,4652650.16 463814.02,4651408.17 464106.66,4651202.73 464375.95,4650918.64 464992.98,4650466.78 464887.6,4649866.34 464617.67,4649644.61 464695.51,4649207.89 464415.13,4648783.28 464655.55,4648406.01</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[50373375.55926]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[260]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[263]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17194]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Susqueda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti Sacalm]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Susqueda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ Sacalm]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="260">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392421.8,4654072.09 392025.67,4654644.71 392286.54,4654889.8 392839.04,4655296.99 392831.82,4655729.06 393104.65,4655982.25 394274.41,4655785.59 394538.19,4656412.01 394029.44,4656565.05 393153.87,4656762.39 393093.47,4658123.15 393921.83,4658595.26 394920.86,4658606.97 395606.01,4658745.43 395764.86,4658962.16 396322.76,4658063.94 397094.54,4657974.09 397595.48,4657630.35 398001.23,4658041.35 399259.32,4657510.67 399380.79,4657506.7 400244.36,4657295.92 401022.32,4657173.3 401373.59,4656506.51 401275.73,4655963.99 400885.87,4655903.66 400944.34,4655621.19 400257,4654322.94 400597.58,4654401.46 400942.9,4654584.27 401924.61,4654284.01 401181.71,4653166.16 401481.54,4652692.92 400696.83,4652073.67 401106.02,4651450.84 399189.98,4651356.77 399480.6,4652053.36 399916.98,4652957.95 399748.17,4653594.05 400026.71,4653886.27 399605.14,4654202.45 399777.48,4654738.98 399478.74,4654455.41 398854.76,4654256.97 398401.82,4654349.45 398114.54,4654683.98 397934.65,4654768.94 398317.36,4655696.45 398175.72,4656051.17 397920.32,4655902.38 397552.07,4655917.02 396864.84,4655022.63 396021.44,4654592.82 395769.64,4654243.62 395533.38,4653604.29 395145.85,4653295.27 393672.099,4652803.579 393479.17,4652950.62 393981.1,4653238.47 393715.76,4653462.26 393650.8,4654187.26 393118.61,4654004.36 392977.17,4654199.79 392421.8,4654072.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">391190.65,4656254.42 390904.53,4655617.97 390765.24,4655073.07 390235,4655437.81 390143.44,4655952.88 390354.89,4656626.65 390439.97,4656625.64 391190.65,4656254.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[34984438.05744]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[261]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[264]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08078]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Espunyola, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Espunyola, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Espunyola, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Espunyola, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="261">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495525.51,4653559.5 494696.1,4654040.01 494476.67,4654405.8 493993.83,4654532.25 493984.6,4654591.97 494421.38,4654904.57 494349.25,4656079.39 494361.43,4656466.25 495111.53,4656479.87 495096.95,4655986.87 495416.85,4656015.38 495753.64,4655950.7 495525.51,4653559.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3090663.3933]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[262]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[265]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17168]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Joan de Mollet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Joan de Mollet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Joan de Mollet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Joan de Mollet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="262">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">416003.68,4642066.77 415806.33,4641509.49 414709.93,4641595.01 413540.59,4646766.85 411962.05,4646673.11 410716.06,4645421.98 409202.67,4644605.1 408957.43,4644820.6 409266.29,4644956.32 409339.77,4645917.94 409804.41,4646230.25 410022.81,4646703.39 409494.05,4647057.48 410003.69,4647118.41 409895.11,4647508.3 409973.65,4647701.53 410708.31,4648529.3 411055.35,4649015.42 411373.22,4649566.25 411580.9,4650394.01 412863.62,4651465.71 413497.2,4651013.34 414007.9,4651951.24 414277.31,4652519.55 415134.23,4652859.35 415362.08,4654111.05 415114.2,4654546.18 416454.89,4655193.39 417349.75,4654807.8 417085.94,4655833.8 417330.8,4656262.5 417958.86,4656407.64 417622.8,4655002.34 417182.51,4654527.28 417326.8,4654092.45 417125.23,4653871.16 418272.35,4653816.69 419022.62,4653569.66 419068.3,4653286.21 418566.76,4652341.86 417883.5,4651109.11 417701.11,4650329.86 417864.92,4649905.58 417276.5,4649266.78 416960.44,4649307.7 416859.99,4648739.22 417053.15,4647778.48 416061.66,4647091.99 416929.75,4646083.86 415592.24,4645333.03 415254.67,4643787.34 414901.91,4643370.66 416003.68,4642066.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52843984.32835]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[263]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[266]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08255]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Maria de Merles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Maria de Merles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Maria de MerlŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Maria de MerlŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="263">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">379751.76,4647019.47 379070.93,4646751.14 379213.03,4646472.91 378929,4646127 378586,4646097 377413.89,4645302.09 377010.59,4645283.55 376053.22,4644529.54 375556.08,4644742.03 375080.23,4645798.47 374914.52,4646574.14 373199.6,4646807.55 373107.3,4646793.52 372778.55,4648334.33 372448.48,4648421.27 372416.28,4648813.44 372598.74,4649299.71 373489.61,4650213.17 373121.04,4651811.12 373048.44,4652511.8 372925.04,4653030.81 375240.83,4652113.79 375429.909,4651694.204 375457.31,4651390.49 375414.284,4651084.829 375552.21,4650906.6 375948.64,4651074.96 376189.37,4650376.01 375440.88,4649996.3 375664.284,4649827.016 376093.972,4650045.766 376234.73,4649786.03 376143.9,4649571.26 375454.49,4649545.13 374573.81,4649164.67 374820.61,4648413.85 375164.59,4648438.73 375266.6,4647866.35 376309.96,4647526.36 377328.69,4647958.58 377838,4648416 379121.72,4648386.76 379608.24,4648505.89 379661.17,4648900.41 380096,4649508 378650.21,4651464.77 378927.69,4651875.74 378557.96,4652418.06 378287.86,4652558.11 378182.45,4653401.74 378238.82,4653996.66 378652.77,4654082.92 379012.05,4654577.44 379426.4,4654837.87 380205.6,4654735.56 380561.91,4655024.23 381073.66,4655050.76 381234.91,4655618 381270.47,4656238.11 381829.15,4655949.65 381991.33,4655577.9 382573.24,4655266.35 383063.47,4654246.52 382731.98,4653651.35 383483.59,4652601.73 383490.48,4652394.23 383426.18,4651951.34 384058.87,4651077.66 383881.22,4650655.58 383819,4650387 383999,4649996 382433.97,4649501.84 381749.96,4649772.37 380887.01,4648786.86 381156.29,4648307.18 381124.48,4647684.55 379751.76,4647019.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">375906.93,4651410.83 375930.69,4651806.52 376295.89,4651882.09 376354.83,4651839.5 376360.85,4651679.43 375952.07,4651373.21 375906.93,4651410.83</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[54066217.87555]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[264]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[267]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25151]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olius]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Olius]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Olius]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Olius]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="264">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438681.02,4651725.02 437768.84,4651170.53 437580.04,4650052.21 437877.68,4649615.04 437587.68,4648620.28 437106.17,4648286.2 436943.17,4648474.02 436409.74,4649583.39 436244.21,4650281.64 434651.01,4651509.53 434277.45,4651242.34 433977.55,4651792.18 433692.33,4651789.7 433651.56,4652021.23 433912.82,4652363.53 433770.73,4652935.21 433249.56,4653564.36 432808.78,4653936.1 433774.25,4654862.94 436541.93,4656120.83 437377.22,4656202.25 438445.18,4655402.71 438520.62,4654908.63 437243.07,4655208.95 436899.12,4655371.59 436843.97,4654972.25 437319.62,4654139.91 437383.69,4653453.97 437566.55,4653212.91 438644.17,4653443.69 438165.44,4652365.9 438653.64,4652076.18 438681.02,4651725.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">437489.84,4651643.76 437326.07,4652413.79 436930.37,4652372.12 436339.21,4652401.19 436404.83,4652057.98 436627.68,4651622.9 437013.08,4651356.86 437489.84,4651643.76</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22294001.6657]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[265]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[268]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08117]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masies de Voltrega, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Can Bondia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Masies de Voltreg…, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Can Bondia]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="265">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">401106.02,4651450.84 400696.83,4652073.67 401481.54,4652692.92 401181.71,4653166.16 401924.61,4654284.01 402621.23,4654125.05 402850.34,4655078.75 402989.08,4655478.85 403389.1,4655381.07 403709.32,4655801.61 404027.76,4655890.42 405367.92,4654994.66 405795.5,4655698.36 406300.93,4656130.51 406707.44,4655931.53 407357.28,4654897.72 406551.25,4654040.95 406504.31,4653176.08 407750.05,4650772.05 407962.49,4650060.39 407902.47,4649784.79 405103.29,4651455.54 402474.84,4650385.1 402585.46,4649269.97 402771.32,4648656.1 402933.15,4647861.51 402340.2,4647979.45 401354.89,4648314.7 401254.89,4649983.12 401350.11,4650282.97 401106.02,4651450.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29194331.01335]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[266]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[269]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08049]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Casserres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Casserres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Casserres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Casserres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="266">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395533.38,4653604.29 395769.64,4654243.62 396021.44,4654592.82 396864.84,4655022.63 397552.07,4655917.02 397920.32,4655902.38 398175.72,4656051.17 398317.36,4655696.45 397934.65,4654768.94 398114.54,4654683.98 398401.82,4654349.45 398854.76,4654256.97 399478.74,4654455.41 399777.48,4654738.98 399605.14,4654202.45 400026.71,4653886.27 399748.17,4653594.05 399916.98,4652957.95 399480.6,4652053.36 399189.98,4651356.77 401106.02,4651450.84 401350.11,4650282.97 401254.89,4649983.12 400484.2,4649496.78 400157.74,4649066.24 399614.32,4649919.43 400089.13,4650515.15 399926.59,4650820.08 399011.41,4650556.63 398487.11,4650718 398695.99,4649883.17 397754.4,4649430.97 397233.86,4650361.49 397432.61,4650734.71 397112.28,4651069.4 396140.8,4651875.63 395747.66,4652403.85 396094.09,4652751.75 395533.38,4653604.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">402850.34,4655078.75 402621.23,4654125.05 401924.61,4654284.01 400942.9,4654584.27 400597.58,4654401.46 400257,4654322.94 400944.34,4655621.19 400885.87,4655903.66 401275.73,4655963.99 401373.59,4656506.51 401584.31,4656517.96 401864.6,4656258.68 401962.92,4655483.95 402850.34,4655078.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[22217086.96235]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[267]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[270]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08130]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montclar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montclar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montclar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montclar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="267">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">503779.37,4655948.3 504180.79,4655630.54 504061.02,4655031.74 503957.81,4653479.16 503107.09,4653101.07 502241.17,4653111.21 502081.29,4653846.84 502283.23,4654455.43 503090.06,4655839.44 503779.37,4655948.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4255500.15815]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[268]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[271]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17203]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ultramort]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ultramort]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ultramort]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ultramort]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="268">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323557.88,4652825.52 324023.78,4653015.55 324245.91,4653735.41 324428.7,4654856.32 326691.59,4653695.66 327550.18,4653542.04 328016.6,4654527.37 330347.36,4654638.54 331164.52,4654361.73 331874.02,4654211.39 334219.09,4654276.1 335247.27,4654348.5 336281.84,4655559.24 336902.75,4655338.66 338186.59,4655604.53 340193.95,4655858.03 340709.05,4654614.94 340651,4652477 341383.77,4652660.58 341823,4652533 342830,4651151 342632.32,4649993.61 342012.6,4648786.52 340626.5,4647752.24 339872,4645692 339069,4644706 337897,4644192 337155,4644824 336643,4644447 336462.8,4644822.88 336699.15,4645977.15 336959.63,4646327.5 336334,4646731 334726,4648625 333544.24,4649590.67 334203.58,4650481.53 333588.86,4650765.75 333244,4650590 332786,4650482 331884,4650576 330686,4648782 329982,4648985 329538,4649603 328441,4648911 328217,4649871 327428,4650409 326733,4651263 326858.49,4651864.99 324410.1,4651919.87 323916.26,4652082.5 323557.88,4652825.52</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[106033532.30079]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[269]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[272]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25250]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova de Meia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova de Meia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova de Mei…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova de Mei…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="269">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">462405.77,4653415.04 462589.67,4654309.49 463126.15,4654985.76 463913.57,4654770.01 464546.21,4654271.55 465276.95,4653887.54 465965.95,4654139.08 466271.33,4654835.2 466703.8,4655519.94 466744.58,4655648.92 467137.58,4655189.63 466922.04,4654671.04 467240.11,4654112.04 468040,4653025.94 468233.05,4652716.96 469153.12,4652505.85 469718.24,4651573.76 469966.64,4651559.96 470156.8,4651925.52 470468.8,4651971.65 471173.97,4651625.44 472068.64,4651814.95 472150.92,4651053.59 471815.04,4650896.94 471945.74,4649722.42 471923.22,4649493.73 471475.66,4649762.8 470568.32,4649121.69 469293.15,4647850.49 469178.11,4648191.46 468385.79,4648733.43 467343.69,4648512.25 466985.42,4647751.51 467166.31,4647332.23 465894.98,4648005.66 464655.55,4648406.01 464415.13,4648783.28 464695.51,4649207.89 464617.67,4649644.61 464887.6,4649866.34 464992.98,4650466.78 464375.95,4650918.64 464106.66,4651202.73 463814.02,4651408.17 463079.86,4652650.16 462405.77,4653415.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[39211370.35074]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[270]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[273]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17007]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Amer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Amer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Amer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Amer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="270">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">506435.5,4654524.48 506818.62,4654058.31 507143.32,4653906.14 507030.3,4653146.33 507032.35,4652926.3 506724.94,4652915.74 506878.71,4652422.83 506866.41,4652363.55 506339.04,4651303.11 505998.56,4650951.8 505784.56,4650960.71 505314.08,4651527.07 505509.99,4652266.56 505429.81,4652718.15 504932.42,4652680.93 504516.67,4653094.03 504175.76,4653143.42 504083.31,4653353.4 503957.81,4653479.16 504061.02,4655031.74 504180.79,4655630.54 505194.03,4655060.1 505275.65,4654980.7 506435.5,4654524.48</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8139498.014]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[271]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[274]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17191]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Serra de Daro]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Serra de Daro]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Serra de Dar¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Serra de Dar¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="271">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">407357.28,4654897.72 407289.06,4655086.26 407821.27,4655580.4 409194.83,4654522.67 408959.43,4653564.73 408300.31,4652905.3 408333.26,4652396.61 408076.36,4650785.21 407750.05,4650772.05 406504.31,4653176.08 406551.25,4654040.95 407357.28,4654897.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7089533.8333]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[272]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[275]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08092]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gironella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gironella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gironella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gironella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="272">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">491604.94,4653826.52 491795.06,4653203.41 491656.59,4652076.03 491731.28,4650049.26 491493.3,4648628.94 489709.38,4649131.04 489249.58,4649011.14 488973.07,4649454.11 488699.31,4650014.24 488610.64,4650792.77 488015.22,4650720.32 487479.11,4651038 487627.59,4652200.18 487858.94,4652743.87 488454.38,4652797.88 489154.88,4654067.18 488786.39,4654371.16 489232.82,4654940.38 490166.18,4655551.83 490695.79,4655578.21 490707.32,4655214.91 491604.94,4653826.52</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19646243.2749]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[273]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[276]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17049]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Celra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Celra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Celr…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Celr…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="273">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">512266.91,4650651.2 511676.42,4652637.51 510583.84,4653790.07 509680.93,4654326.51 510101.37,4655217.36 510664.69,4655837.39 510652.68,4655988.91 509242.15,4657114.54 508560.4,4657162.44 508375.1,4658068.96 508611.57,4658906.77 509848.84,4659021.22 510880.06,4659171.68 511017.31,4660906.83 513197.59,4661898.02 513785.61,4662014.32 514142.65,4661984 514101.804,4661702.057 514263.61,4661469 514901.804,4661506.745 515114.59,4661665.5 515139.304,4661509.87 515344.84,4661313.5 515354.929,4661056.745 515526.804,4660887.995 515904.929,4660222.37 515959.9,4659957 516164.304,4659681.745 516239.81,4659300 516426.804,4659203.62 516571.62,4659036 516676.804,4659087.995 516695.75,4658979.5 516558.054,4658817.682 516501.804,4658586.432 516946.31,4658300 516898.679,4658192.682 517036.179,4658123.932 517138.15,4658004.5 517278.11,4657722.5 517520.554,4657652.057 517567.429,4657508.307 517436.179,4657448.932 517431.61,4656968.5 517508.054,4656780.182 517745.37,4656806 517754.4,4656612 517542.429,4656048.932 517329.929,4655936.432 517092.429,4656030.182 516851.53,4656025 516695.78,4655896 516520.554,4655364.557 516367.429,4654764.557 516264.68,4653959.5 516236.179,4653108.307 516245.554,4652220.807 516385.85,4650787.92 516127.66,4650707.37 515628.98,4650818.16 514809.7,4651130.08 513791.22,4650482.56 513595,4650754 512772.709,4650326.688 512266.91,4650651.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">518489.304,4655047.369 518363.59,4655089 518190.3,4655338.5 518248.06,4655460 518476.09,4655420.5 518617.429,4655512.994 518780.12,4655457 518751.804,4655319.244 518489.304,4655047.369</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">518698.03,4654745.5 518636.179,4654889.557 518842.429,4654948.932 518851.804,4654905.182 518698.03,4654745.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[65457500.62104]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[274]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[277]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17199]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torroella de Montgri]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torroella de Montgri]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torroella de Montgr¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torroella de Montgr¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="274">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">319458.34,4632562.63 319495.25,4633204.47 319858.74,4633704.25 319695.86,4634258.34 317301.26,4635440.38 316041.07,4636608.21 316128.63,4637458.67 317003.23,4637859.85 317064.67,4638506.17 317478.56,4638504.78 317977.49,4638911.14 319196.37,4639089.92 319069.57,4639866.84 319467.38,4640355.65 321262.15,4640830.25 322565.27,4640405.08 323945,4641036 324408,4641958 322068.97,4642024.27 322256.49,4642683.59 322908,4643289 322462,4643610 322394,4644234 322519.73,4645508.5 321905.49,4645734.34 321841.94,4646757.46 321234.65,4648506.15 321176.68,4649886.84 320202,4649281 319869,4649039 318821.01,4648566.11 318625.28,4652066.67 319243,4652474 318997.62,4653068.79 318492,4653761 318094,4654551 318128,4654732 320053.34,4655146.23 321313.47,4655038.76 322045.63,4653706.2 322031.16,4652907.18 322324.06,4652623.69 322525.93,4652886.6 323557.88,4652825.52 323916.26,4652082.5 324410.1,4651919.87 326858.49,4651864.99 326733,4651263 327428,4650409 328217,4649871 328441,4648911 327572,4648345 327344,4648010 326868,4648081 326368,4647095 326054,4645954 326338.04,4644415.03 325562.46,4642778.94 325542.85,4642349.6 325436.63,4641807.29 325790.5,4641936.11 326144,4640932 327510,4639707.05 328383.15,4639410.51 328755.53,4638092.36 328835.75,4637122.98 328452.14,4634648.51 327942.33,4633323.92 326686.31,4633033.28 325326.1,4633419.19 324693.1,4632826.65 324239.62,4631933.86 323237.91,4632233.51 323114.97,4631943.8 321862.47,4632355.3 321692.56,4632045.78 320957.1,4632335.79 320121.41,4632304.27 319458.34,4632562.63</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">328016.6,4654527.37 327550.18,4653542.04 326691.59,4653695.66 324428.7,4654856.32 324772.85,4655250.4 325004.02,4656503.89 325282.9,4656653.63 325437.09,4656246.31 326006.69,4655920.61 328016.6,4654527.37</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[156883726.29721]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[275]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[278]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25062]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Camarasa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Camarasa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Camarasa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Camarasa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="275">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428574.23,4653169.79 429569.55,4653523.88 430696.22,4654368.97 432194.32,4655005.2 432808.78,4653936.1 433249.56,4653564.36 433770.73,4652935.21 433912.82,4652363.53 433651.56,4652021.23 433283.3,4651835.21 433390.27,4651246.24 432830.4,4651376.61 432473.79,4650939.49 432232.53,4650878.8 431791.01,4650619.46 430056.58,4651529.99 429442.23,4651494.26 428948.26,4652137.14 428574.23,4653169.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13771675.72885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[276]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[279]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08271]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sobremunt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sobremunt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sobremunt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sobremunt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="276">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">473041.28,4647084.37 472678.21,4647302.54 472462.87,4648567.49 472379.48,4648828.04 472977.44,4648987.35 473788.82,4648837.98 474330.94,4649602.72 474819.1,4649685.02 475057.65,4649631.08 476127.06,4650461.2 476463.4,4651069 476619.14,4651615.88 476695.61,4652296.29 476707.09,4652757.07 477480.16,4652549.94 477455.07,4652265.54 477997.78,4652207.53 477996.64,4652352.63 479901.14,4652824.49 480609.4,4653318.23 480489.21,4653472.76 480806.12,4653825.66 481089.8,4654719.05 481922.33,4654929.09 483506.18,4653572.55 483667.91,4652800.08 483917.76,4652582.43 483525.62,4651689.35 483874.66,4650480.57 484211.2,4650403.5 482660.18,4648797.72 482366.2,4648388.2 480731.17,4647718.37 480012.59,4646937.51 479719,4646831.56 478326.93,4646709.07 477192.93,4646554.7 476138.03,4648025.68 475191.44,4647690 474468.53,4647361.98 473717.22,4647256.53 473041.28,4647084.37</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[49922459.52561]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[277]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[280]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17163]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Gregori]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Gregori]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Gregori]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Gregori]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="277">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">492108.93,4648031.74 492992.9,4650253.37 493752.18,4652853.09 493257.54,4653801.39 493196.59,4654126.04 493984.6,4654591.97 493993.83,4654532.25 494476.67,4654405.8 494696.1,4654040.01 495525.51,4653559.5 496166.82,4653468.41 496449.12,4653164.5 496055.53,4650694.83 495330.67,4650392.62 494972.49,4649923.25 494022.37,4647914.7 494092.08,4647443.15 494298.5,4646960.58 493691.26,4646842.09 493248.64,4646686.07 493220.4,4646468.17 493030.2,4646381.57 492210.82,4646776.38 492037.65,4647570.54 492108.93,4648031.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17740779.3541]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[278]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[281]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17173]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti Vell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti Vell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ Vell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ Vell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="278">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">511693.83,4650048.27 509483.11,4650510.02 509202.6,4650187.52 508255.5,4649971.81 508283.23,4650394.94 508153.14,4650843.24 507586.5,4651065.95 506928.02,4652047.71 506866.41,4652363.55 506878.71,4652422.83 506724.94,4652915.74 507032.35,4652926.3 507030.3,4653146.33 507143.32,4653906.14 506818.62,4654058.31 506435.5,4654524.48 507394.04,4654409.93 507887.74,4654437.89 507899.81,4652890.14 507982.84,4652077.97 508459.18,4651724.69 508676.15,4651842.94 510152.68,4652061.94 511186.02,4651089.82 511566.459,4650771.219 512266.91,4650651.2 512772.709,4650326.688 513595,4650754 513791.22,4650482.56 513735.57,4650423.17 512344.584,4650021.219 511693.83,4650048.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9233066.65016]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[279]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[282]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17070]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fontanilles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fontanilles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fontanilles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fontanilles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="279">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">512266.91,4650651.2 511566.459,4650771.219 511186.02,4651089.82 510152.68,4652061.94 508676.15,4651842.94 508459.18,4651724.69 507982.84,4652077.97 507899.81,4652890.14 507887.74,4654437.89 508100.85,4654464.15 509680.93,4654326.51 510583.84,4653790.07 511676.42,4652637.51 512266.91,4650651.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9133479.13904]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[280]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[283]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17081]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gualta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gualta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gualta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gualta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="280">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">393748.76,4644243.53 393747.61,4644362.42 392615.28,4643991.24 391159.96,4643902.67 390438.19,4644386.98 390540.67,4644875.91 390225.96,4645025.38 389695.59,4646236.6 388953,4646489 388072.02,4646038.93 388004.53,4646214.29 387885,4647041 388326.03,4648489.91 388558.02,4648654.86 388909.57,4648467.02 389078.93,4648817.29 389578.26,4649160.16 390332.82,4648915.31 389798.32,4647721.03 390123.49,4647375.73 390917.63,4647239.32 391843.52,4647683.09 391873.27,4647876.63 392844.53,4648389.46 394006.66,4649152.61 393712.87,4649879.21 393720.75,4650347.48 393861.18,4650791.26 392963.71,4651076.7 393041.17,4651429.06 392414.286,4652350.454 391992.42,4652290.71 391694.03,4651346.65 392457,4650006.2 392153,4649807 392096.93,4649066.06 391862.54,4649220.19 391788.64,4649733.21 391440.37,4649941.35 390644,4650126 389962.81,4649913.71 389410.63,4649840.78 389314.04,4650863.28 388915.49,4651201.61 388650.53,4650873.79 388824.66,4650664.54 388421.33,4649956.07 388321.9,4650527.07 388107.32,4650774.51 388456.25,4651397.45 388413.8,4652215.69 388746.64,4652892.37 389128.23,4653292.58 389583.24,4653317.84 389315.28,4652354.86 389599.72,4651956.87 389255.26,4651538.25 389618.97,4651177.63 389978.44,4651610.59 389815.09,4652247.05 390465.11,4652910.84 390959.9,4653354.98 391623.25,4653749.35 391578.1,4653877.91 392272.23,4653743.78 392421.8,4654072.09 392977.17,4654199.79 393118.61,4654004.36 393650.8,4654187.26 393715.76,4653462.26 393981.1,4653238.47 393479.17,4652950.62 393672.099,4652803.579 395145.85,4653295.27 395533.38,4653604.29 396094.09,4652751.75 395747.66,4652403.85 396140.8,4651875.63 397112.28,4651069.4 397432.61,4650734.71 397233.86,4650361.49 397754.4,4649430.97 396879.73,4648700.15 396561.6,4647839.17 396592.35,4647163.09 396984.99,4646856.93 396966.59,4646066.73 396712.81,4645316.98 396476.74,4645055.84 396425.54,4644699.03 395517.78,4644152.58 394693.3,4644705.57 393748.76,4644243.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">393093.47,4658123.15 393153.87,4656762.39 394029.44,4656565.05 394538.19,4656412.01 394274.41,4655785.59 393104.65,4655982.25 392831.82,4655729.06 392839.04,4655296.99 392286.54,4654889.8 391990.72,4655549.3 391703.49,4655884.6 391190.65,4656254.42 390439.97,4656625.64 390354.89,4656626.65 390524.73,4657468.38 391765.6,4659056.98 392146.83,4658719.8 393031.2,4658580.8 393093.47,4658123.15</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">394444.42,4667573.85 395576.1,4668454.19 395668.45,4668258.43 395449.88,4668104.8 395660.07,4667876.8 396107.34,4668170.33 397934,4666808.87 398004.68,4666449.84 397531.11,4666453.39 397331.25,4665964.93 397098.26,4665895.87 396272.01,4665927.52 395774.4,4666267.09 395026.54,4666439.75 394313.91,4667103.78 394444.42,4667573.85</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">391812.11,4662345.42 389424.65,4662512.25 388310.87,4663188.42 388060.12,4663379.42 390765.62,4663485.81 392055.52,4663191.31 391698.33,4662577.05 391812.11,4662345.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[76072160.46646]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[281]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[284]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08132]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montmajor]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montmajor]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montmajor]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montmajor]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="281">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">453741.68,4648429.92 453562.13,4648711 453423.14,4649235.47 452214.93,4649400.72 451430.97,4648905.74 450950.55,4648354.19 450323.03,4648128.56 449491.62,4647950.38 449787.07,4648637.92 449673.23,4648972.8 449278.35,4649160.27 448747.83,4648481.15 448020.76,4647970.16 447870.89,4647595.33 447333.03,4648602.86 446660.87,4649160.44 446535.93,4649505.48 446082.28,4650202.67 445885.05,4651636.03 447165.19,4651855.66 449349.07,4651821.76 449911.32,4651131.69 450248.02,4652018.18 450515.53,4652997.19 451613.57,4652880.57 452095.26,4654184.47 452167.25,4653576.46 452785.71,4653486.29 453363.77,4653113.66 453837.97,4653230.57 454690.19,4652909.7 454458.73,4652177.27 454873.87,4652206.83 454886.45,4651843.52 454574.06,4651677.04 454797.57,4650802.41 454850.06,4649696.6 453741.68,4648429.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32097200.4302]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[282]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[285]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08280]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tavertet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tavertet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tavertet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tavertet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="282">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">492108.93,4648031.74 491715.99,4648271.07 491493.3,4648628.94 491731.28,4650049.26 491656.59,4652076.03 491795.06,4653203.41 491604.94,4653826.52 493196.59,4654126.04 493257.54,4653801.39 493752.18,4652853.09 492992.9,4650253.37 492108.93,4648031.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8327001.9185]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[283]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[286]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17087]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Juia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Juia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Jui…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Jui…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="283">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">496055.53,4650694.83 496449.12,4653164.5 496166.82,4653468.41 496242.63,4653575.57 497102.31,4654077.19 497518.61,4653965.12 498324.15,4654020.08 498600.25,4653517.62 499115.92,4653182.25 499449.29,4652672.97 499697.38,4651926.13 499369.85,4651301.67 499225.13,4650893.32 499277.17,4650600.49 498884.18,4650295.35 498471.48,4649734.07 497930.75,4650213.37 497083.9,4649997.6 496537.86,4649997.74 496055.53,4650694.83</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11512913.9596]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[284]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[287]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17130]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pera, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pera, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pera, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pera, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="284">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">442762.51,4650458.15 441298.21,4649369.75 441508.85,4649218.98 441487.97,4648841.91 441049.13,4649174.73 441035.84,4649299.74 440669.37,4648895.44 439374.23,4648522.42 438992.86,4649320.02 438906.15,4649687.85 437877.68,4649615.04 437580.04,4650052.21 437768.84,4651170.53 438681.02,4651725.02 439021.39,4651824.53 439652.57,4652146.15 439858.09,4652460.33 439984.24,4653178.07 440534.34,4653072.91 441052.84,4654076.15 441435.3,4653863.79 441325.1,4653829.29 441687.11,4653574.46 442761.7,4652577.51 443018.59,4650639.22 442762.51,4650458.15</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17015832.37856]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[285]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[288]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08112]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Manlleu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Manlleu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Manlleu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Manlleu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="285">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">502421.64,4651187.16 501965.98,4651492.67 501757.83,4652131.87 501918,4652987.44 502241.17,4653111.21 503107.09,4653101.07 503957.81,4653479.16 504083.31,4653353.4 504175.76,4653143.42 504516.67,4653094.03 504932.42,4652680.93 505429.81,4652718.15 505509.99,4652266.56 505314.08,4651527.07 504239.39,4650807.62 504142.81,4651139.76 503524.99,4651482.72 502945.67,4651563.46 502421.64,4651187.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6298241.73275]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[286]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[289]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17126]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Parlava]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Parlava]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Parlav…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Parlav…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="286">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">375240.83,4652113.79 375767,4652398 375815.24,4652688.06 376019.93,4652340.24 375959.9,4652762.72 376573.99,4652841.24 377001.3,4652735.13 377765.36,4653108.98 378182.45,4653401.74 378287.86,4652558.11 378557.96,4652418.06 378927.69,4651875.74 378650.21,4651464.77 380096,4649508 379661.17,4648900.41 379608.24,4648505.89 379121.72,4648386.76 377838,4648416 377328.69,4647958.58 376309.96,4647526.36 375266.6,4647866.35 375164.59,4648438.73 374820.61,4648413.85 374573.81,4649164.67 375454.49,4649545.13 376143.9,4649571.26 376234.73,4649786.03 376093.972,4650045.766 375664.284,4649827.016 375440.88,4649996.3 376189.37,4650376.01 375948.64,4651074.96 375552.21,4650906.6 375414.284,4651084.829 375457.31,4651390.49 375429.909,4651694.204 375240.83,4652113.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">375906.93,4651410.83 375952.07,4651373.21 376360.85,4651679.43 376354.83,4651839.5 376295.89,4651882.09 375930.69,4651806.52 375906.93,4651410.83</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18168500.90265]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[287]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[290]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25207]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Solsona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Solsona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Solsona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Solsona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="287">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">421723.64,4652031.27 423231.27,4651707.53 425075.28,4652638.09 425790.35,4652216.5 427006.93,4652994.78 427217.37,4652631.89 428194.69,4653211.61 428574.23,4653169.79 428948.26,4652137.14 429442.23,4651494.26 428880.95,4650720.13 428324.55,4650349.25 427589.94,4649275.81 427852.38,4648830.8 427414.7,4648339.71 426972.8,4647993.07 426734.34,4647989.84 426308.99,4647607.02 425530.06,4647909.72 424883.39,4648108.41 424353.81,4648156.55 423180.32,4648842.7 423080.57,4649898.99 421551.74,4648927.69 420686.65,4648792.93 420499.78,4649029.45 420113.24,4648985.92 420828.94,4650102.67 421295.26,4651051.96 421723.64,4652031.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29013113.34605]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[288]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[291]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08149]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olost]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Olost]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Olost]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Olost]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="288">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">483734.41,4644251.76 483775.32,4645117.56 483411.64,4645606.23 483567.03,4645956.73 483772.92,4646649.25 483614.09,4646988.77 483357.55,4648313.5 482366.2,4648388.2 482660.18,4648797.72 484211.2,4650403.5 484455.35,4650500.65 484637.25,4650095.25 485058.29,4650016.8 485053.43,4650810.14 485494.49,4651394.42 485834.15,4652247.47 486346.15,4653012.55 487471.05,4653209.01 487858.94,4652743.87 487627.59,4652200.18 487479.11,4651038 488015.22,4650720.32 488610.64,4650792.77 488699.31,4650014.24 488973.07,4649454.11 489249.58,4649011.14 489709.38,4649131.04 491493.3,4648628.94 491715.99,4648271.07 488960.18,4646359.74 488313.86,4646580.18 486475.77,4646228.04 486356.05,4645434.72 486394.39,4644982.29 485977.97,4644318.39 485715.94,4643546.41 485203.57,4643146.43 484971.55,4643414.6 484611.89,4643737.74 484875.07,4644207.68 483734.41,4644251.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38839996.8605]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[289]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[292]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17079]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Girona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Girona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Girona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Girona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="289">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">502421.64,4651187.16 502074.79,4650876.81 501397.9,4650628.36 501012.49,4650324.73 500619.19,4650554.71 500287.72,4651281.91 500021.06,4651620.44 499697.38,4651926.13 499449.29,4652672.97 500068.18,4653194.82 501546.27,4653097.88 501918,4652987.44 501757.83,4652131.87 501965.98,4651492.67 502421.64,4651187.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5115381.34605]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[290]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[293]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17153]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rupia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rupia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rupi…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rupi…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="290">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">418566.76,4652341.86 418933.87,4651891.01 419996.64,4652271.56 420828.37,4652942.88 421723.64,4652031.27 421295.26,4651051.96 420828.94,4650102.67 420113.24,4648985.92 418753.07,4648121.01 417791.68,4647385.72 417053.15,4647778.48 416859.99,4648739.22 416960.44,4649307.7 417276.5,4649266.78 417864.92,4649905.58 417701.11,4650329.86 417883.5,4651109.11 418566.76,4652341.86</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">419847.17,4645897.56 419982.357,4645734.003 419922.982,4645615.253 419742.66,4645586.99 419738.607,4645762.128 419847.17,4645897.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[13803191.73118]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[291]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[294]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08171]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Prats de Llucanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Prats de Llucanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Prats de Llu‡anŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Prats de Llu‡anŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="291">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">485834.15,4652247.47 485494.49,4651394.42 485053.43,4650810.14 485058.29,4650016.8 484637.25,4650095.25 484455.35,4650500.65 484211.2,4650403.5 483874.66,4650480.57 483525.62,4651689.35 483917.76,4652582.43 483667.91,4652800.08 484757.47,4652675.55 485138.48,4652672.15 485522.41,4652307.09 485834.15,4652247.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4014413.0057]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[292]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[295]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17186]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sarria de Ter]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sarria de Ter]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sarri… de Ter]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sarri… de Ter]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="292">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437489.84,4651643.76 437013.08,4651356.86 436627.68,4651622.9 436404.83,4652057.98 436339.21,4652401.19 436930.37,4652372.12 437326.07,4652413.79 437489.84,4651643.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[844104.77575]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[293]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[296]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08215]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Hipolit de Voltrega]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Hipolit de Voltrega]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Hip•lit de Voltreg…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Hip•lit de Voltreg…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="293">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">503895.32,4648974.97 503433.73,4649705.35 504239.39,4650807.62 505314.08,4651527.07 505784.56,4650960.71 505998.56,4650951.8 506339.04,4651303.11 506866.41,4652363.55 506928.02,4652047.71 507586.5,4651065.95 508153.14,4650843.24 508283.23,4650394.94 508255.5,4649971.81 508170.99,4649094.35 507627.92,4648759.04 507128.23,4648738.19 506439.76,4648888.84 506327.68,4648530.68 505862.42,4648407.34 505646.02,4648310.16 505374.52,4648569.96 504803.58,4648626.94 504259.27,4648889.49 503895.32,4648974.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11248570.3419]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[294]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[297]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17205]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ullastret]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ullastret]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ullastret]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ullastret]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="294">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">308120.07,4645671.53 307920.54,4644811.24 306929.39,4643971.58 308713.17,4642997.91 309828.43,4641894.46 310315.16,4641237.09 311469.72,4641284.19 312299.54,4641377.95 312551.16,4640975.24 313367.77,4640793.57 313880.76,4640198.87 314348.31,4640000 314582.35,4639698.18 314757.68,4638771.71 314740.96,4638252.59 314271.46,4637547.4 314304.18,4636906.77 314835.32,4636322.9 314888.39,4635943.48 313879.82,4635909.12 312580.06,4635605.14 312157.66,4635265.23 310865.19,4635314.05 309954.91,4635104.11 307514.47,4635151.03 306562.43,4635774.92 306116.4,4636122.22 306054.15,4636375.58 305940.47,4636471.75 306096.14,4638646.14 305665.19,4639524.1 305448.83,4639732.36 304060.44,4640534.9 303310.57,4641504.32 303194.92,4641960.02 302470,4642340 301093.11,4642508.82 300685.17,4643391.09 300979.56,4643794.25 301616.09,4643842.48 299489.82,4644826.56 299039.67,4645141.95 298325.57,4645350.64 297986.62,4645538.92 298401.6,4646796.17 299421.04,4648129.44 300059.47,4648865.43 300702.38,4649212.22 301673.03,4648521.82 302129.92,4649258.91 302374.88,4650445.5 302765,4651012.13 302908.82,4651542.49 304450.51,4652031.55 304784.92,4650772.89 304833.13,4650721.19 306396.61,4649865.36 306654.51,4649308.1 306617.82,4648233.75 305472.46,4647860.86 305954.68,4647183.3 306813.1,4646701.42 306923.59,4646032.71 308120.07,4645671.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">319458.34,4632562.63 318848.95,4632018.1 318189.21,4631877.35 318059.68,4631002.63 317892.05,4630403.09 316335.47,4632068.83 314439.21,4633261.55 314441.46,4634642.82 314888.39,4635943.48 315909.53,4636248.14 316041.07,4636608.21 317301.26,4635440.38 319695.86,4634258.34 319858.74,4633704.25 319495.25,4633204.47 319458.34,4632562.63</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[135960608.3879]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[295]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[298]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25156]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Os de Balaguer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Os de Balaguer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Os de Balaguer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Os de Balaguer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="295">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">436943.17,4648474.02 436090.13,4648075.5 435737.37,4648778.92 433977.76,4648881.81 433469.14,4649734.95 433506.74,4650026.82 432733.92,4649815.66 432861.76,4650424.52 432473.79,4650939.49 432830.4,4651376.61 433390.27,4651246.24 433283.3,4651835.21 433651.56,4652021.23 433692.33,4651789.7 433977.55,4651792.18 434277.45,4651242.34 434651.01,4651509.53 436244.21,4650281.64 436409.74,4649583.39 436943.17,4648474.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8391083.01645]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[296]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[299]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08243]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Cecilia de Voltrega]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Cecilia de Voltrega]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Cec¡lia de Voltreg…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Cec¡lia de Voltreg…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="296">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">499011.01,4648720.19 498471.48,4649734.07 498884.18,4650295.35 499277.17,4650600.49 499225.13,4650893.32 499369.85,4651301.67 499697.38,4651926.13 500021.06,4651620.44 500287.72,4651281.91 500619.19,4650554.71 501012.49,4650324.73 501397.9,4650628.36 502074.79,4650876.81 502421.64,4651187.16 502945.67,4651563.46 503524.99,4651482.72 504142.81,4651139.76 504239.39,4650807.62 503433.73,4649705.35 503895.32,4648974.97 503056,4648087.49 502754.72,4647137.94 502416.17,4646979.56 502459.88,4646762.24 501113.14,4646835.91 500733.47,4647844.7 500020.99,4648508.52 499456.74,4648910.22 499011.01,4648720.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16420030.83574]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[297]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[300]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17057]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Corca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Corca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cor‡…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cor‡…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="297">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">431165.45,4642933.03 431158.72,4642585.92 430977.78,4642577.42 430866.92,4642796.26 430508.67,4642528.93 430146.14,4642689.61 430196.02,4642234.69 429339.73,4641161.04 428909.69,4640863.36 428698.02,4640289.14 428372.29,4640705.25 428141.56,4642190.71 427786.58,4642846.04 428785.75,4644120.32 428593.34,4644346.01 428515.7,4645302.94 428600.3,4646402.38 428700.71,4646667.59 428120.95,4646983.58 427887.96,4647239.92 427852.38,4648830.8 427589.94,4649275.81 428324.55,4650349.25 428880.95,4650720.13 429442.23,4651494.26 430056.58,4651529.99 431791.01,4650619.46 432232.53,4650878.8 432473.79,4650939.49 432861.76,4650424.52 432733.92,4649815.66 433160.33,4649467.95 432949.86,4648920.31 433147.21,4648456.95 432329.83,4647949.67 431965.95,4647284.27 431691.37,4646683.63 431518.29,4646545.66 430966.81,4644254.66 431536.55,4643279.85 431033.81,4643425.17 431165.45,4642933.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34271092.46619]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[298]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[301]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08199]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Bartomeu del Grau]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Bartomeu del Grau]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Bartomeu del Grau]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Bartomeu del Grau]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="298">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">402933.15,4647861.51 402771.32,4648656.1 402585.46,4649269.97 402474.84,4650385.1 405103.29,4651455.54 407902.47,4649784.79 407962.49,4650060.39 407750.05,4650772.05 408245.98,4650385.64 408705.19,4650080.48 408397.91,4649233.84 408375.12,4648105.49 409259.83,4648112.59 411055.35,4649015.42 410708.31,4648529.3 409973.65,4647701.53 409895.11,4647508.3 410003.69,4647118.41 409494.05,4647057.48 410022.81,4646703.39 409804.41,4646230.25 409339.77,4645917.94 409266.29,4644956.32 408957.43,4644820.6 409202.67,4644605.1 408605.28,4644238.42 408766,4643954 407714.01,4643631.69 407471.46,4642531.87 407729.38,4641821.77 407478.15,4640847.8 407660.59,4640167.58 407227.86,4640194.03 405840.37,4641331.72 404616.59,4643692.75 405342.04,4643875.12 405118.74,4644438.4 404859.63,4644660.51 404847.71,4645331.08 404443.22,4645660.32 404575.04,4645855.84 404185.6,4645930.83 403623.74,4647367.68 403351.39,4647352.16 402933.15,4647861.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[45568336.05134]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[299]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[302]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08175]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Puig-reig]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Puig-reig]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Puig-reig]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Puig-reig]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="299">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">517260.97,4647958.21 517074.18,4647796.09 516895.22,4647528.09 516703.91,4647471.41 516312.57,4646708.2 515144.97,4645810.31 512428.27,4644418.98 512009.47,4645784.01 511676.45,4645781.04 511689.91,4646264.83 511617.43,4648135.84 511269.91,4649567.96 511693.83,4650048.27 512344.584,4650021.219 513735.57,4650423.17 513791.22,4650482.56 514809.7,4651130.08 515628.98,4650818.16 516127.66,4650707.37 516385.85,4650787.92 516467.429,4650336.432 516894.21,4648806.5 517260.97,4647958.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25814159.33532]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[300]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[303]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17124]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pals]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pals]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pals]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pals]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="300">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354830.37,4644770.6 354226.64,4644313.25 353841.23,4644382.53 353182.03,4644280.92 352526.33,4645162.21 351851.19,4644695.8 350946.41,4644455.89 350340.3,4644829.9 350461.28,4645411.56 351117.15,4645696.28 351519.43,4646319.97 353138.71,4646936.88 353491.41,4648094.75 354007.37,4648978.74 354622.43,4649350.25 355247.35,4649433.3 355467.78,4650166.46 355645.59,4650904.03 355919.37,4650705.59 355946.16,4650414.98 355763.19,4650266.14 355813.88,4648795.88 356178.81,4648581.21 355196.2,4645150.42 354830.37,4644770.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15797636.58321]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[301]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[304]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25222]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tiurana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tiurana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tiurana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tiurana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="301">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">394073.62,4643054.89 393748.76,4644243.53 394693.3,4644705.57 395517.78,4644152.58 396425.54,4644699.03 396476.74,4645055.84 396712.81,4645316.98 396966.59,4646066.73 396984.99,4646856.93 396592.35,4647163.09 396561.6,4647839.17 396879.73,4648700.15 397754.4,4649430.97 398695.99,4649883.17 398487.11,4650718 399011.41,4650556.63 399926.59,4650820.08 400089.13,4650515.15 399614.32,4649919.43 400157.74,4649066.24 400484.2,4649496.78 401254.89,4649983.12 401354.89,4648314.7 402340.2,4647979.45 402933.15,4647861.51 403351.39,4647352.16 403623.74,4647367.68 404185.6,4645930.83 404575.04,4645855.84 404443.22,4645660.32 404847.71,4645331.08 404859.63,4644660.51 405118.74,4644438.4 405342.04,4643875.12 404616.59,4643692.75 405840.37,4641331.72 404555.25,4641252.48 404456.3,4640728.55 404530.8,4640225.7 404489.75,4639382.8 403951.45,4639582.05 404181.2,4640246.18 403492.87,4640671.31 403152.74,4641155.91 402692.81,4641626.55 401503.92,4642362.29 400634.53,4641758.16 399536.75,4641783.58 397900.88,4640982.1 397680.75,4641599.24 397280.52,4641381.87 396879,4642032 396597.9,4641609.39 395660.21,4641511.51 394859,4641798 395160.87,4642398.76 394879.12,4642632.01 394073.62,4643054.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[66695001.43141]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[302]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[305]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08308]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Viver i Serrateix]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Serrateix]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Viver i Serrateix]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Serrateix]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="302">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">368120.46,4641920.77 367529.01,4641674.25 367344.9,4641754.16 366104.87,4643158.25 365634.1,4643076.98 365195.88,4642890.43 364765.49,4642804.06 363791.54,4642361.28 363227.09,4640683.54 362517.72,4641055.75 362043.08,4640486.06 362032.05,4640264.99 361814.78,4639788.87 361118.22,4639217.61 360986.26,4639061.47 360609.67,4639541.94 360582.38,4639648.82 360635.75,4640326.68 360523.69,4641330.02 360167.2,4642202.38 359850.74,4642863.39 358734.44,4642618.57 359891.83,4644189.05 360301.41,4645435.23 359947.84,4646028.19 358634.94,4646371.61 358531.69,4646692.64 358335.16,4647250.54 358638.29,4647625.31 358797.097,4647772.329 358898.659,4648319.204 358812.722,4648491.079 359043.03,4648526.46 359398.61,4649425.97 360059.69,4650085.9 359727.08,4650528.59 359836.159,4650709.829 360120.97,4650739.3 361039.284,4650530.141 361437.722,4650319.204 362258.034,4650366.079 363142.1,4650655.48 363474.5,4650638.7 363747.02,4650421.78 364829.03,4648733.44 365592.37,4648991.33 366240.35,4649443.64 366165.92,4649716.68 367993.14,4650096.76 368658.89,4649683.06 368984.64,4649081.26 369325.19,4649254.6 369325.65,4648517.25 370142.2,4647224.24 370701.67,4647623.26 371357.5,4648299.17 371667.43,4648693.67 372416.28,4648813.44 372448.48,4648421.27 372778.55,4648334.33 373107.3,4646793.52 372855.67,4646363.39 372509.45,4645869.61 371991.83,4645347.34 371481.64,4645193.54 371174.52,4644884.93 370215.74,4644353.06 370041.35,4643893.49 369022.87,4643445.01 368547.29,4642879.4 368120.46,4641920.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">360396.2,4649774.37 360739.69,4649340.32 360871.65,4649403.78 361086.159096209,4649530.14106534 361077.26,4649909.32 361017.93,4650287.97 360835.85,4650357.56 360398.03,4650179.49 360396.2,4649774.37</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[92039171.51838]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[303]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[306]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25166]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pinell de Solsones]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pinell de Solsones]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pinell de SolsonŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pinell de SolsonŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="303">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495589.99,4646264.9 494356.43,4646692.91 493656.34,4646332.03 493220.4,4646468.17 493248.64,4646686.07 493691.26,4646842.09 494298.5,4646960.58 494092.08,4647443.15 494022.37,4647914.7 494972.49,4649923.25 495330.67,4650392.62 496055.53,4650694.83 496537.86,4649997.74 497083.9,4649997.6 497930.75,4650213.37 498471.48,4649734.07 499011.01,4648720.19 498103.87,4648067.09 498092.51,4647726.58 497243.34,4647201.26 495916.98,4646975.56 495589.99,4646264.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13532312.54015]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[304]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[307]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17097]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Madremanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Madremanya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Madremanya]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Madremanya]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="304">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">442072.46,4647192.02 441244.09,4648436.63 441471.48,4648411.63 440669.37,4648895.44 441035.84,4649299.74 441049.13,4649174.73 441487.97,4648841.91 441508.85,4649218.98 441298.21,4649369.75 442762.51,4650458.15 442917.77,4650038.95 443157.011,4650051.059 443318.46,4649814.46 443578.886,4649957.309 443711.699,4649769.809 444913.73,4649689.19 445349.03,4650153.07 445391.386,4650480.746 445578.26,4650546.98 445688.261,4650379.184 445696.35,4649963.04 446250.761,4649379.184 446383.574,4649340.121 446508.45,4649413.3 446535.93,4649505.48 446660.87,4649160.44 447333.03,4648602.86 447870.89,4647595.33 447457.71,4647317.62 447537.65,4647171.71 447645.48,4646966.55 447165.44,4647188.46 446238.39,4648226.11 445822.31,4647660.29 445571.75,4647475.22 445511.66,4646296.52 445218,4646298.56 444237.24,4646019.32 443647.34,4646339.15 442812.31,4646092.95 441737,4646314.32 441690.83,4646346.47 442033.18,4646939.17 442614.04,4646926.72 442581.56,4646779.2 442737.93,4646634.02 442870.18,4647314.85 443155.9,4647579.35 443555.86,4648202.64 443590.84,4648465.18 443463.41,4649010.26 443106.08,4649117.77 442626.31,4648990.26 442490.55,4648500.66 442300.9,4648136.38 442408.05,4647834.96 442072.46,4647192.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16231050.86195]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[305]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[308]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08116]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masies de Roda, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masies de Roda, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Masies de Roda, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Masies de Roda, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="305">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">511689.91,4646264.83 509584.42,4645841.21 509326.27,4645459.75 508696.66,4645598.5 509396.05,4646558.51 509303.22,4646750.69 508755.28,4647389.57 508845.03,4648363.9 508490.81,4648553.98 508170.99,4649094.35 508255.5,4649971.81 509202.6,4650187.52 509483.11,4650510.02 511693.83,4650048.27 511269.91,4649567.96 511617.43,4648135.84 511689.91,4646264.83</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12383094.64525]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[306]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[309]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17121]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palau-sator]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palau-sator]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palau-sator]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palau-sator]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="306">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">358531.69,4646692.64 358327.92,4646525.8 358131.23,4646698.82 355885.53,4645112.09 355368.75,4644841.92 354830.37,4644770.6 355196.2,4645150.42 356178.81,4648581.21 355813.88,4648795.88 355763.19,4650266.14 355946.16,4650414.98 356272.45,4651456 355441.24,4652082.53 354997.03,4652346.75 355104.46,4652532.58 354060.04,4653898.46 354043.15,4654273.36 354353.85,4655525.55 354648.19,4655444.2 355300,4655352 355954.57,4654972.7 358020.6,4655905.35 358765.13,4655669.86 359080.15,4656001.08 360201,4655828 360694,4656057 361582,4657002 362076,4657345 362635.36,4658169.06 363767.45,4659440.03 364144,4659755 364362,4659640 364329.34,4659257.96 364441.31,4657134.86 364271.21,4656323.7 364645.1,4656179.46 364169.73,4655677.28 364422.65,4654652.47 364250.02,4654650.14 364069,4653651 364334,4652594.7 364656,4651615 363474.5,4650638.7 363142.1,4650655.48 362258.034,4650366.079 361437.722,4650319.204 361039.284,4650530.141 360120.97,4650739.3 359836.159,4650709.829 359727.08,4650528.59 360059.69,4650085.9 359398.61,4649425.97 359043.03,4648526.46 358812.722,4648491.079 358898.659,4648319.204 358797.097,4647772.329 358638.29,4647625.31 358335.16,4647250.54 358531.69,4646692.64</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360396.2,4649774.37 360398.03,4650179.49 360835.85,4650357.56 361017.93,4650287.97 361077.26,4649909.32 361086.159,4649530.141 360871.65,4649403.78 360739.69,4649340.32 360396.2,4649774.37</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[71669805.46553]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[307]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[310]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25044]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[04]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bassella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bassella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bassella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bassella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="307">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">468258.83,4641611.11 468014.49,4640390.58 467800.29,4640329.73 467469.14,4640150.48 466763.46,4640067.46 466306.51,4640137.87 465578.24,4639682.54 465312.62,4639146.9 465079.52,4638893.74 462397.65,4639886.59 461379.75,4641568.74 458644.81,4642349.19 459047.56,4643656.36 460467.13,4643287.38 460853.58,4643752.56 461002.1,4644671.44 461144.09,4645042.55 460760.95,4645226.23 461249.51,4645675.5 461592.87,4644770.14 461861.07,4645287.74 461801.28,4645830.96 460862.28,4647739.05 460684.08,4648333.53 461466.46,4649228.65 462171.88,4649832.71 462295.9,4650198.5 462944.15,4649090.93 463264.71,4648704.56 462998.79,4648234.34 463656.48,4647404.6 463867.56,4647574.22 463797.52,4646850 463972.16,4646774.02 464504.47,4646318.85 464436.73,4646077.79 465265.98,4645960.94 466097.24,4645965.96 467229.39,4645437.9 467156.64,4644919.81 467138.95,4644022.53 467721.46,4643316.99 468356.44,4642271.45 468258.83,4641611.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[51808639.2115]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[308]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[311]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17116]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Osor]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Osor]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Osor]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Osor]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="308">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">441690.83,4646346.47 441238.97,4645832.87 440744.02,4645358.11 440210.52,4645692.69 439292.2,4645023.34 438527.49,4645086.18 438610.61,4644679.77 438164.99,4644341.76 437803.23,4643665.25 437156.57,4643585.88 436990.43,4642984.41 436404.13,4642939.55 436364.19,4642679.19 435924.19,4642510.62 435295.61,4643002.05 434438.47,4643227.76 433661.17,4641977.32 432375.91,4642505.01 432074.02,4642880.18 431877.37,4642665.75 431542.6,4642714.82 431165.45,4642933.03 431033.81,4643425.17 431536.55,4643279.85 430966.81,4644254.66 431518.29,4646545.66 431691.37,4646683.63 431965.95,4647284.27 432329.83,4647949.67 433147.21,4648456.95 432949.86,4648920.31 433160.33,4649467.95 432733.92,4649815.66 433506.74,4650026.82 433469.14,4649734.95 433977.76,4648881.81 435737.37,4648778.92 436090.13,4648075.5 436943.17,4648474.02 437106.17,4648286.2 437587.68,4648620.28 437877.68,4649615.04 438906.15,4649687.85 438992.86,4649320.02 439374.23,4648522.42 440669.37,4648895.44 441471.48,4648411.63 441244.09,4648436.63 442072.46,4647192.02 442033.18,4646939.17 441690.83,4646346.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[51988138.6888]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[309]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[312]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08100]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gurb]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gurb]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gurb]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gurb]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="309">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">379751.76,4647019.47 381124.48,4647684.55 381156.29,4648307.18 380887.01,4648786.86 381749.96,4649772.37 382433.97,4649501.84 383999,4649996 384518.94,4649600.45 384854,4647714 385198.63,4646803.81 385797.097,4646975.454 386318.7,4646624.11 388006.1,4645270.91 388118,4644721 387541.05,4644303.17 388362.07,4642940.91 388124.02,4642685.71 387539.284,4642881.704 387279.96,4642811.02 386602.15,4642021.84 385797,4641304 385210.71,4640471.5 384217.22,4640098.82 383964.65,4640274.72 382773,4638539 382550.42,4638535.01 382542.74,4639067.57 382541.06,4639782.04 382316.53,4639951.44 382671.1,4640758.77 383715.55,4641957.21 383733.95,4642887.51 384163.35,4643146.02 384138.27,4643340.11 384740,4644127 385015.89,4645364.29 384636.21,4645869.77 384492.409,4646272.328 383920,4646208 383877.01,4645686.62 383523,4645499 383261.03,4644059.32 383213.47,4644266.08 382421.57,4644217.52 382341.34,4644682.51 380814.01,4644907.49 380776.37,4644681.77 380453.92,4644826.35 380213.49,4645055.35 379814.12,4645687.92 379751.76,4647019.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[40856676.16016]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[310]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[313]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25075]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Clariana de Cardener]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Clariana de Cardener]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Clariana de Cardener]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Clariana de Cardener]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="310">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428515.7,4645302.94 428593.34,4644346.01 428785.75,4644120.32 427420.73,4644014.6 426881.12,4643388.98 426500.86,4642492.87 425665.67,4641600.25 425303.19,4641657.18 424725.03,4640891.54 424700.71,4640196.09 423997.88,4640000 423348.53,4639293.92 422404.77,4639262.97 421053.89,4639043.86 420557.74,4639603.94 420825.22,4639449.62 421009.67,4639845.78 420132.36,4640520.67 419899.27,4641805.72 419636.15,4642511.5 419413.96,4643424.06 419263.3,4643900.02 419742.66,4645586.99 419922.982,4645615.253 419982.357,4645734.003 419847.17,4645897.56 419851.107,4646087.128 419731.63,4646151.14 418359.53,4646690.96 417466.03,4646616.24 416995.13,4647089.92 416061.66,4647091.99 417053.15,4647778.48 417791.68,4647385.72 418753.07,4648121.01 420113.24,4648985.92 420499.78,4649029.45 420686.65,4648792.93 421551.74,4648927.69 423080.57,4649898.99 423180.32,4648842.7 424353.81,4648156.55 424883.39,4648108.41 425530.06,4647909.72 426308.99,4647607.02 426734.34,4647989.84 426972.8,4647993.07 427414.7,4648339.71 427852.38,4648830.8 427887.96,4647239.92 427331.05,4646641.49 428020.25,4646394.81 427847.41,4646031.55 428137.9,4645467.08 428515.7,4645302.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">418046.77,4643591.32 418402.35,4643956.97 418635.63,4644126.6 418713.43,4644242.57 418788.51,4644171.28 418789.3,4643748.47 419052.1,4643496.77 418626.59,4643308.36 418046.77,4643591.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[69182007.02391]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[311]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[314]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08151]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Orista]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Orista]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Orist…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Orist…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="311">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">316041.07,4636608.21 315909.53,4636248.14 314888.39,4635943.48 314835.32,4636322.9 314304.18,4636906.77 314271.46,4637547.4 314740.96,4638252.59 314757.68,4638771.71 314582.35,4639698.18 314348.31,4640000 313880.76,4640198.87 313367.77,4640793.57 312551.16,4640975.24 312299.54,4641377.95 311469.72,4641284.19 310315.16,4641237.09 309828.43,4641894.46 308713.17,4642997.91 306929.39,4643971.58 307920.54,4644811.24 308120.07,4645671.53 309113.57,4646096.64 309966.91,4646395.57 310724.07,4646221.01 311387.81,4645801.71 311928.44,4645049.68 312417.34,4644753.31 313161.76,4644822.72 313215.15,4645400.99 314209.87,4645957.62 315207.28,4647363.74 316321.49,4647791.08 317697.57,4647778.28 318821.01,4648566.11 319869,4649039 320202,4649281 321176.68,4649886.84 321234.65,4648506.15 321841.94,4646757.46 321905.49,4645734.34 322519.73,4645508.5 322394,4644234 322462,4643610 322908,4643289 322256.49,4642683.59 322068.97,4642024.27 324408,4641958 323945,4641036 322565.27,4640405.08 321262.15,4640830.25 319467.38,4640355.65 319069.57,4639866.84 319196.37,4639089.92 317977.49,4638911.14 317478.56,4638504.78 317064.67,4638506.17 317003.23,4637859.85 316128.63,4637458.67 316041.07,4636608.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[102590368.4796]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[312]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[315]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25037]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Avellanes i Santa Linya, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Avellanes, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Avellanes i Santa Linya, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Avellanes, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="312">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">469293.15,4647850.49 470568.32,4649121.69 471475.66,4649762.8 471923.22,4649493.73 472379.48,4648828.04 472462.87,4648567.49 472678.21,4647302.54 473041.28,4647084.37 472873.09,4646393.13 472626.98,4646098.96 472064.17,4645852.01 471036.01,4645858.93 469740.46,4645934.26 469367.2,4646104.21 469293.15,4647850.49</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10466492.77605]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[313]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[316]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17903]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Julia del Llor i Bonmati]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bonmati]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Juli… del Llor i Bonmat¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bonmat¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="313">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">334170.08,4641501.91 333268.61,4641815.71 332624,4641075 332334,4639861 332358.21,4639449.63 332238.44,4639038.55 332954.89,4637923 331579,4637485.13 329566.11,4637746.69 328937.35,4637869.63 328755.53,4638092.36 328383.15,4639410.51 327510,4639707.05 326144,4640932 325790.5,4641936.11 325436.63,4641807.29 325542.85,4642349.6 325562.46,4642778.94 326338.04,4644415.03 326054,4645954 326368,4647095 326868,4648081 327344,4648010 327572,4648345 328441,4648911 329538,4649603 329982,4648985 330686,4648782 331501,4647967 332003,4647125 332624,4646572 333445,4646189 333733,4644956 333347,4643375 333450,4642335 334170.08,4641501.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[68313830.894]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[314]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[317]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25022]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alos de Balaguer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alos de Balaguer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Al•s de Balaguer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Al•s de Balaguer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="314">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">447754.17,4642854.4 447859.44,4643977.5 447750.78,4644800.49 447912.39,4645292.59 448728.73,4645496.71 448922.77,4645805.25 448508.84,4646132.54 448473.9,4646616.38 447850,4647135.4 447537.65,4647171.71 447457.71,4647317.62 447870.89,4647595.33 448020.76,4647970.16 448747.83,4648481.15 449278.35,4649160.27 449673.23,4648972.8 449787.07,4648637.92 449491.62,4647950.38 450323.03,4648128.56 450950.55,4648354.19 451430.97,4648905.74 452214.93,4649400.72 453423.14,4649235.47 453562.13,4648711 453741.68,4648429.92 453635.43,4647785.7 454062.39,4647897.21 454409.73,4647539.35 454144.33,4647433.39 454474.78,4646750.48 453880.26,4646782.88 453591.05,4647208.17 452846.63,4646714.93 452792.43,4646270.17 453260.8,4646137.72 453818.15,4645545.34 453774.79,4644984.61 453471.72,4644270.45 453872.86,4643592.24 454170.22,4643897.69 454597.18,4643820.96 455037.73,4643736.71 455502.85,4643540.13 455515.12,4643238.91 456345.41,4643136.48 456991.44,4641962.32 456847.28,4641229.02 456976.06,4640727.9 456036.55,4639912.64 455976.65,4639532.4 455319.18,4639147.76 454780.63,4638553.14 454129.44,4638325.6 454006.73,4637627.03 453585.89,4637667.66 452910.78,4637944.6 452725,4638435.51 452460.58,4638671.05 452424.43,4638901.8 451934.65,4639183.35 451102.35,4640485.19 451097.16,4640923.1 451353.25,4640900.32 451702.77,4641190.31 451545.17,4641713.77 450942.72,4642550.9 449391.86,4642338.49 448676.14,4642306.35 448512.07,4642142.3 448060.39,4642283.75 447754.17,4642854.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[58415215.86689]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[315]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[318]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08303]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova de Sau]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova de Sau]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova de Sau]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova de Sau]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="315">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">442072.46,4647192.02 442408.05,4647834.96 442300.9,4648136.38 442490.55,4648500.66 442626.31,4648990.26 443106.08,4649117.77 443463.41,4649010.26 443590.84,4648465.18 443555.86,4648202.64 443155.9,4647579.35 442870.18,4647314.85 442737.93,4646634.02 442581.56,4646779.2 442614.04,4646926.72 442033.18,4646939.17 442072.46,4647192.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[2053396.15355]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[316]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[319]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08183]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Roda de Ter]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Roda de Ter]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Roda de Ter]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Roda de Ter]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="316">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">510532,4640237.02 510427.95,4638741.47 510689.94,4638247.95 509441.47,4638797.23 508282.31,4637715.95 508066.77,4637632.07 507631.52,4638288.33 506390.38,4638888.87 505758.49,4638667.4 504590.9,4638650.82 504498.64,4638979.57 504873.88,4640000 504755.44,4641267.4 505196.73,4641791.14 505111.85,4642617.3 504719.38,4643079.63 504380.05,4643109.91 504212.28,4643962.6 504226.04,4644749.81 503819.96,4645477.05 503758.41,4645831.04 503894.48,4646413.65 505396.91,4646942.66 505646.02,4648310.16 505862.42,4648407.34 506327.68,4648530.68 506439.76,4648888.84 507128.23,4648738.19 507627.92,4648759.04 508170.99,4649094.35 508490.81,4648553.98 508845.03,4648363.9 508755.28,4647389.57 509303.22,4646750.69 509396.05,4646558.51 508696.66,4645598.5 509326.27,4645459.75 509564.15,4643197.63 509913.01,4642963.81 509979.41,4642682.65 510038.18,4641094.33 510532,4640237.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[50551210.75045]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[317]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[320]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17902]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Forallac]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vulpellac]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Forallac]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vulpellac]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="317">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">505646.02,4648310.16 505396.91,4646942.66 503894.48,4646413.65 503758.41,4645831.04 503819.96,4645477.05 504226.04,4644749.81 504212.28,4643962.6 504380.05,4643109.91 504719.38,4643079.63 505111.85,4642617.3 505196.73,4641791.14 504755.44,4641267.4 504873.88,4640000 504498.64,4638979.57 502856.94,4639480.53 502758.15,4640112.75 502273.63,4640771.11 501975.41,4641486.41 502510.6,4642763.64 502042.13,4643478.34 502138.75,4644018.65 502356.26,4644239.92 502523.34,4645380.43 502459.88,4646762.24 502416.17,4646979.56 502754.72,4647137.94 503056,4648087.49 503895.32,4648974.97 504259.27,4648889.49 504803.58,4648626.94 505374.52,4648569.96 505646.02,4648310.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20987759.362]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[318]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[321]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17022]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bisbal d'Emporda, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bisbal d'Emporda, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bisbal d'Empord…, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bisbal d'Empord…, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="318">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">496408.15,4637156.5 495221.09,4638048.23 493769.19,4638764.06 492169.65,4639188.2 491296.75,4639147.33 490594.45,4639914.95 492014.35,4640918.48 491664.97,4642567.18 492780.81,4642360.13 493110.25,4642334.81 493563.95,4642836.44 494024.09,4643063.68 495117.25,4643291.11 495629.77,4643278.29 495682.33,4644203.37 495874.6,4644203.46 495589.99,4646264.9 495916.98,4646975.56 497243.34,4647201.26 498092.51,4647726.58 498103.87,4648067.09 499011.01,4648720.19 499456.74,4648910.22 500020.99,4648508.52 500733.47,4647844.7 501113.14,4646835.91 502459.88,4646762.24 502523.34,4645380.43 502356.26,4644239.92 502138.75,4644018.65 502042.13,4643478.34 502510.6,4642763.64 501975.41,4641486.41 502273.63,4640771.11 502758.15,4640112.75 502856.94,4639480.53 504498.64,4638979.57 504590.9,4638650.82 505319.99,4637209.21 505011.9,4636681.51 503847.66,4635777.04 502010.79,4635401.87 500608.04,4635999.53 498887.81,4637216.86 496408.15,4637156.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[99351120.8178]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[319]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[322]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17901]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cruilles, Monells i Sant Sadurni de l'Heura]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Sadurni de l'Heura]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cru‹lles, Monells i Sant Sadurn¡ de l'Heura]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Sadurn¡ de l'Heura]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="319">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">467156.64,4644919.81 467229.39,4645437.9 466097.24,4645965.96 465265.98,4645960.94 464436.73,4646077.79 464504.47,4646318.85 463972.16,4646774.02 463797.52,4646850 463867.56,4647574.22 463945.48,4647986.04 464655.55,4648406.01 465894.98,4648005.66 467166.31,4647332.23 466985.42,4647751.51 467343.69,4648512.25 468385.79,4648733.43 469178.11,4648191.46 469293.15,4647850.49 469367.2,4646104.21 469740.46,4645934.26 467987.41,4644543.55 467156.64,4644919.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14380641.99415]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[320]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[323]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17189]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cellera de Ter, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cellera de Ter, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cellera de Ter, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cellera de Ter, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="320">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">483411.64,4645606.23 483125.68,4645434.45 482089.73,4646127.47 481650.96,4645958.93 481418.28,4646302.53 481305.69,4646315.65 481125.11,4646813.53 480005.37,4646867.68 479719,4646831.56 480012.59,4646937.51 480731.17,4647718.37 482366.2,4648388.2 483357.55,4648313.5 483614.09,4646988.77 483772.92,4646649.25 483567.03,4645956.73 483411.64,4645606.23</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6420244.3336]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[321]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[324]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17155]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Salt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Salt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Salt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Salt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="321">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">491664.97,4642567.18 490826.05,4643198.27 489930.63,4642990.16 488438.94,4643096.21 487736.3,4642198.57 486756.29,4642050.51 486877.14,4642609.01 486271.95,4642655.26 485713.36,4642835.97 485284.71,4642903.89 485203.57,4643146.43 485715.94,4643546.41 485977.97,4644318.39 486394.39,4644982.29 486356.05,4645434.72 486475.77,4646228.04 488313.86,4646580.18 488960.18,4646359.74 491715.99,4648271.07 492108.93,4648031.74 492037.65,4647570.54 492210.82,4646776.38 493030.2,4646381.57 493220.4,4646468.17 493656.34,4646332.03 494356.43,4646692.91 495589.99,4646264.9 495874.6,4644203.46 495682.33,4644203.37 495629.77,4643278.29 495117.25,4643291.11 494024.09,4643063.68 493563.95,4642836.44 493110.25,4642334.81 492780.81,4642360.13 491664.97,4642567.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38419808.73305]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[322]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[325]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17142]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Quart]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Quart]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Quart]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Quart]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="322">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">447754.17,4642854.4 447127.69,4643180.81 447194.16,4642939.95 446650.77,4642950.29 446626.85,4642755.67 445082.52,4643363.7 443837.06,4644590.11 442735.84,4644692.48 442729.17,4644923.74 441957.88,4645141.21 441238.97,4645832.87 441690.83,4646346.47 441737,4646314.32 442812.31,4646092.95 443647.34,4646339.15 444237.24,4646019.32 445218,4646298.56 445511.66,4646296.52 445571.75,4647475.22 445822.31,4647660.29 446238.39,4648226.11 447165.44,4647188.46 447645.48,4646966.55 447537.65,4647171.71 447850,4647135.4 448473.9,4646616.38 448508.84,4646132.54 448922.77,4645805.25 448728.73,4645496.71 447912.39,4645292.59 447750.78,4644800.49 447859.44,4643977.5 447754.17,4642854.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18851339.31795]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[323]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[326]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08275]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tavernoles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tavernoles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[TavŠrnoles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[TavŠrnoles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="323">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">454249.17,4634852.48 454654.23,4635896.37 454576.98,4636926.22 453945.66,4637438.36 454006.73,4637627.03 454129.44,4638325.6 454780.63,4638553.14 455319.18,4639147.76 455976.65,4639532.4 456036.55,4639912.64 456976.06,4640727.9 456847.28,4641229.02 456991.44,4641962.32 456345.41,4643136.48 455515.12,4643238.91 455502.85,4643540.13 455037.73,4643736.71 454597.18,4643820.96 454170.22,4643897.69 453872.86,4643592.24 453471.72,4644270.45 453774.79,4644984.61 453818.15,4645545.34 453260.8,4646137.72 452792.43,4646270.17 452846.63,4646714.93 453591.05,4647208.17 453880.26,4646782.88 454474.78,4646750.48 454646.11,4646464.07 454883.73,4646524.93 455154.37,4646385.55 455572.57,4646625.28 456536.37,4646763.49 456388.38,4647410.99 456953.57,4647681.94 456981.63,4648164.49 457166.93,4647745.6 457521.82,4647714.06 457847.16,4646056.88 458100.07,4644982.18 458056.27,4644469.84 458334.12,4644166.09 459047.56,4643656.36 458644.81,4642349.19 461379.75,4641568.74 462397.65,4639886.59 465079.52,4638893.74 465026.76,4638518.11 466129.56,4637803.01 466347.83,4637587.61 465807.91,4636685.84 465569.55,4636588.19 465219.18,4636645.63 464369.1,4636467.57 463670.61,4636801.43 462626.65,4634677.14 461897.71,4634568.7 461275.32,4635217.61 460767.05,4635849.24 459901.31,4635783.24 459510.1,4634282.46 459760.9,4632929.27 458983.62,4633204.28 456998.09,4633349.09 455871.54,4633978.81 455429.1,4634813.62 454249.17,4634852.48</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[83622541.55995]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[324]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[327]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17164]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Hilari Sacalm]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Hilari Sacalm]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Hilari Sacalm]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Hilari Sacalm]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="324">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">479750.76,4644384.75 479062.28,4641817.36 477386.84,4641529.59 475502.65,4641510.85 475152.68,4641590.81 475109.35,4641890.53 475374.87,4642489.38 474986,4643126.85 473602.05,4644296.71 472985.64,4644347.3 472131.77,4645177.81 472064.17,4645852.01 472626.98,4646098.96 472873.09,4646393.13 473041.28,4647084.37 473717.22,4647256.53 474468.53,4647361.98 475191.44,4647690 476138.03,4648025.68 477192.93,4646554.7 478326.93,4646709.07 479719,4646831.56 480005.37,4646867.68 481125.11,4646813.53 481305.69,4646315.65 481418.28,4646302.53 481650.96,4645958.93 480529.32,4645306.57 479750.76,4644384.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35567075.05735]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[325]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[328]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17020]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bescano]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bescano]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bescan¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bescan¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="325">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">518167.24,4641985.5 513846.37,4641481.34 513369.84,4641892.73 512982.79,4643001.21 515013.67,4643708.81 516375.17,4643894.53 515709.07,4645541.59 515144.97,4645810.31 516312.57,4646708.2 516703.91,4647471.41 516895.22,4647528.09 517074.18,4647796.09 517260.97,4647958.21 517536.179,4647464.557 517501.804,4647042.682 517658.55,4646984 518094.9,4647082 518408.054,4647097.369 518682.65,4646978 518957.25,4646672.5 519144.25,4646361 519176.804,4646250.494 519089.304,4646191.119 519025.49,4646064 518929.929,4645981.744 519154.929,4645784.869 519127.75,4645613.13 519267.429,4645550.494 519346.09,4645645.5 519483.054,4645675.494 519390.62,4645440.5 519129.4,4645144 519325.3,4644600.5 518874.11,4644179 518093.43,4643630 518120.554,4643386.432 517953.9,4643101 517998.93,4642879 518203.78,4642860.5 518276.804,4642711.432 518170.554,4642573.932 518264.303,4642439.557 517955.03,4642253 518167.24,4641985.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20097830.81266]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[326]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[329]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17013]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Begur]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Begur]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Begur]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Begur]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="326">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">436275.81,4636474.66 435942.61,4636090.68 435053.95,4635715.2 434253.43,4635676.46 433960.38,4635859.48 432819.81,4635153.68 432518.03,4634921.7 432419.2,4634596.89 431977.76,4633929.15 430845.62,4634254.15 430324.19,4634367.25 429879.8,4634095.16 429199.86,4634103.37 428810.79,4634791.33 428331.89,4634894.27 428209.67,4634962.34 427830.37,4635859.61 428070.98,4636753.71 427750.45,4637099.19 427462.05,4637140.1 427334.91,4637649.59 428113.17,4637697.23 428676.99,4637982.06 428763.37,4639216.47 429144.82,4639257.14 429402.03,4639071.59 430109.72,4638885.21 431249.28,4639401.65 432496.22,4639260.33 432704.95,4639078.23 432957.06,4639146.3 433114.64,4639032.71 433044.29,4638783.29 433389.25,4638773.53 433181.37,4637691.01 433442.89,4637165.08 434544.11,4637995.17 434978.76,4637854.42 435846.1,4637040.47 436043.22,4637158.8 436275.81,4636474.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">424700.71,4640196.09 424725.03,4640891.54 425303.19,4641657.18 425665.67,4641600.25 426500.86,4642492.87 426881.12,4643388.98 427420.73,4644014.6 428785.75,4644120.32 427786.58,4642846.04 428141.56,4642190.71 428372.29,4640705.25 427901.39,4640344.38 426243.4,4639791.94 425043.07,4639722.82 424700.71,4640196.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428515.7,4645302.94 428137.9,4645467.08 427847.41,4646031.55 428020.25,4646394.81 427331.05,4646641.49 427887.96,4647239.92 428120.95,4646983.58 428700.71,4646667.59 428600.3,4646402.38 428515.7,4645302.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433461.857,4638957.119 433030.26,4639729.18 433182.04,4639795.26 433138.83,4639936.32 433679.89,4639679.91 433567.76,4639224.9 433461.857,4638957.119</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[40169082.69438]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[327]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[330]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08129]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Muntanyola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Muntanyola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Muntanyola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Muntanyola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="327">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">418163.28,4640631.34 418071.94,4641085.99 417444.41,4641160.23 417785.24,4642414.79 417249.26,4642289.18 416704.4,4641843.59 416569,4641694 416003.68,4642066.77 414901.91,4643370.66 415254.67,4643787.34 415592.24,4645333.03 416929.75,4646083.86 416061.66,4647091.99 416995.13,4647089.92 417466.03,4646616.24 418359.53,4646690.96 419731.63,4646151.14 419851.107,4646087.128 419847.17,4645897.56 419738.607,4645762.128 419742.66,4645586.99 419263.3,4643900.02 419413.96,4643424.06 419636.15,4642511.5 419899.27,4641805.72 420132.36,4640520.67 421009.67,4639845.78 420825.22,4639449.62 420557.74,4639603.94 420034.06,4639502.89 419319.14,4640300.58 418163.28,4640631.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">418046.77,4643591.32 418626.59,4643308.36 419052.1,4643496.77 418789.3,4643748.47 418788.51,4644171.28 418713.43,4644242.57 418635.63,4644126.6 418402.35,4643956.97 418046.77,4643591.32</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22019814.84042]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[328]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[331]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08212]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Feliu Sasserra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Feliu Sasserra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Feliu Sasserra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Feliu Sasserra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="328">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382542.74,4639067.57 381940.02,4638769.93 381316.21,4637673.03 380233.78,4636910.48 379386.61,4637992.85 378998.58,4639654.35 378546.01,4640062.71 378311.62,4640461.35 377640.41,4640756.8 377343.3,4641016.34 376678.9,4641271.07 376120.43,4641731.54 375693.32,4642286.9 375732,4643897 376053.22,4644529.54 377010.59,4645283.55 377413.89,4645302.09 378586,4646097 378929,4646127 379213.03,4646472.91 379070.93,4646751.14 379751.76,4647019.47 379814.12,4645687.92 380213.49,4645055.35 380453.92,4644826.35 380776.37,4644681.77 380814.01,4644907.49 382341.34,4644682.51 382421.57,4644217.52 383213.47,4644266.08 383261.03,4644059.32 383523,4645499 383877.01,4645686.62 383920,4646208 384492.409,4646272.328 384636.21,4645869.77 385015.89,4645364.29 384740,4644127 384138.27,4643340.11 384163.35,4643146.02 383733.95,4642887.51 383715.55,4641957.21 382671.1,4640758.77 382316.53,4639951.44 382541.06,4639782.04 382542.74,4639067.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47157311.26895]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[329]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[332]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25186]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riner]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riner]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riner]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riner]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="329">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">376120.43,4641731.54 375713.07,4640292 374414,4640679 373688.65,4640000 372622.73,4638403.93 371126.28,4638885.35 370624.33,4639972.03 369576.08,4639559.94 369818.05,4640594.16 368120.46,4641920.77 368547.29,4642879.4 369022.87,4643445.01 370041.35,4643893.49 370215.74,4644353.06 371174.52,4644884.93 371481.64,4645193.54 371991.83,4645347.34 372509.45,4645869.61 372855.67,4646363.39 373107.3,4646793.52 373199.6,4646807.55 374914.52,4646574.14 375080.23,4645798.47 375556.08,4644742.03 376053.22,4644529.54 375732,4643897 375693.32,4642286.9 376120.43,4641731.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[39656213.96081]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[330]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[333]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25129]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llobera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llobera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llobera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llobera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="330">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">407227.86,4640194.03 407660.59,4640167.58 407478.15,4640847.8 407729.38,4641821.77 407471.46,4642531.87 407714.01,4643631.69 408766,4643954 408605.28,4644238.42 409202.67,4644605.1 410716.06,4645421.98 411962.05,4646673.11 413540.59,4646766.85 414709.93,4641595.01 414701.76,4641403.16 415088.23,4641214.78 415002.78,4640761.93 413938.97,4640071.35 412445.72,4639811.47 411932.2,4639880.43 410605.54,4639261.05 410104.61,4639560.87 409795.18,4639352.72 409509.13,4639550.61 409182.99,4639373.98 407758.8,4639428.03 407227.86,4640194.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[39550323.51154]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[331]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[334]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08090]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gaia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gaia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gai…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gai…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="331">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355617.18,4635454.42 355472.69,4635609.1 353688.89,4633658.62 353784.07,4633170.19 353413.39,4632667.58 352636.11,4631435.73 351697.4,4630680.65 350839.58,4631011.39 351605.85,4632382.23 352408.05,4633308.3 352982.41,4634491.85 353071.03,4635086.23 353385.17,4635571.24 353391.02,4636169.23 353604.98,4636490.14 353690.99,4637098.64 353536.2,4637447.54 353475.4,4637891.9 353780.25,4638625.79 353555.55,4639247.93 353492.49,4640703.86 354470,4643778.9 354152.13,4643923.31 354226.64,4644313.25 354830.37,4644770.6 355368.75,4644841.92 355885.53,4645112.09 358131.23,4646698.82 358327.92,4646525.8 358531.69,4646692.64 358634.94,4646371.61 359947.84,4646028.19 360301.41,4645435.23 359891.83,4644189.05 358734.44,4642618.57 358859.66,4641992.96 358355.95,4641179.22 358393.81,4640120.25 358067.46,4639060.45 357643.36,4638331.63 357679.84,4637795.56 357258.38,4637166.17 356206.89,4636103.53 355988,4635822.95 355617.18,4635454.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[53539917.16885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[332]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[335]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25249]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova de l'Aguda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova de l'Aguda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova de l'Aguda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova de l'Aguda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="332">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382542.74,4639067.57 382550.42,4638535.01 382773,4638539 383964.65,4640274.72 384217.22,4640098.82 385210.71,4640471.5 385797,4641304 386602.15,4642021.84 387279.96,4642811.02 387539.284,4642881.704 388124.02,4642685.71 388362.07,4642940.91 387541.05,4644303.17 388118,4644721 388006.1,4645270.91 387804.68,4645580.91 388072.02,4646038.93 388953,4646489 389695.59,4646236.6 390225.96,4645025.38 390540.67,4644875.91 390438.19,4644386.98 391159.96,4643902.67 392615.28,4643991.24 393747.61,4644362.42 393748.76,4644243.53 394073.62,4643054.89 394340,4642299 393738,4640240 393822.68,4639241.67 393586.75,4638744.94 393260.08,4639255.05 392909.35,4639191.17 393211.45,4638499.55 392802.12,4638566.07 391793.22,4638395.28 391337,4637645 389628.69,4636225.01 388756.65,4636062.54 387847.9,4636384.71 387257.86,4636642.98 386000.1,4636283.58 385448.8,4637544.49 384502.79,4637956.32 383945,4638030 383000.78,4637327.53 382488.52,4636906.64 381316.21,4637673.03 381940.02,4638769.93 382542.74,4639067.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[66342007.59934]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[333]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[336]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08047]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cardona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cardona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cardona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cardona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="333">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">509913.01,4642963.81 509564.15,4643197.63 509326.27,4645459.75 509584.42,4645841.21 511689.91,4646264.83 511676.45,4645781.04 512009.47,4645784.01 512428.27,4644418.98 512425.21,4643790.89 511661.95,4643541.74 511160.85,4643289.43 510672.88,4642948.76 509913.01,4642963.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7789050.2102]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[334]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[337]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17197]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrent]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torrent]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrent]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torrent]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="334">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347622.07,4646153.04 347831.68,4646160.27 348465.95,4644349.9 347684.74,4643213.74 348323.12,4642720.23 348696.25,4642649.74 349159.73,4643053.77 350796.04,4643533.41 350946.41,4644455.89 351851.19,4644695.8 351372.49,4644174.93 351094.87,4643222.7 351864.03,4642925.06 352730.92,4642161.55 352034.02,4641823.9 351766.08,4640565.26 351208.72,4639650.96 350670.68,4639578.12 348790.23,4639765.4 347601.23,4639424.58 347772.5,4640777.75 347442.36,4640962.67 346094,4640687 345763.5,4639886.27 344279.87,4639962.71 344819,4643812 345579,4644716 345916,4645661 346720.99,4645019.57 347046.24,4645855.35 347622.07,4646153.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31139810.4366]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[335]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[338]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25172]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ponts]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ponts]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ponts]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ponts]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="335">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">483734.41,4644251.76 482952.75,4643556.44 482251.63,4644201.34 481712.31,4643838.22 481120.38,4643801.66 480453.2,4644316.81 479750.76,4644384.75 480529.32,4645306.57 481650.96,4645958.93 482089.73,4646127.47 483125.68,4645434.45 483411.64,4645606.23 483775.32,4645117.56 483734.41,4644251.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6103142.7879]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[336]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[339]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17215]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilablareix]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Perello, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilablareix]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Perell¢, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="336">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">467156.64,4644919.81 467987.41,4644543.55 469740.46,4645934.26 471036.01,4645858.93 472064.17,4645852.01 472131.77,4645177.81 472985.64,4644347.3 473161.49,4643635.88 472617.44,4643081.21 471961.14,4643094.44 471340.77,4642976.22 470935.86,4642479.6 470669.61,4642076.34 470303.21,4642202.76 469289.41,4641188.96 468258.83,4641611.11 468356.44,4642271.45 467721.46,4643316.99 467138.95,4644022.53 467156.64,4644919.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16878770.1358]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[337]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[340]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17008]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Angles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Angles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[AnglŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[AnglŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="337">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">515144.97,4645810.31 515709.07,4645541.59 516375.17,4643894.53 515013.67,4643708.81 512982.79,4643001.21 512760.01,4643763.4 512425.21,4643790.89 512428.27,4644418.98 515144.97,4645810.31</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6244325.8659]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[338]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[342]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17144]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Regencos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Regencos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Regenc¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Regenc¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="338">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">349109.53,4629125.95 348015.59,4627945.09 347465.62,4627358.18 346170.68,4627755.95 345499.41,4627909.59 345459.52,4628907.99 345412.3,4630001.01 346424.56,4630969.18 346614,4631569.89 346059.25,4631685.36 345481.32,4631071.73 345048.93,4629974.31 344435.88,4630063.22 344154.82,4630339.72 342335.35,4630769.92 342140.15,4631277.5 342392.03,4631956.77 342562.08,4632535.31 343359.88,4631919.91 344198.79,4632675.69 344232,4633461.39 344046,4634955 344593.22,4635199.31 344386.89,4635598.72 345481.16,4635974.43 345036.34,4636410.65 344988.14,4637923.44 345320.58,4638567.62 345198.41,4638973.88 345763.5,4639886.27 346094,4640687 347442.36,4640962.67 347772.5,4640777.75 347601.23,4639424.58 348790.23,4639765.4 350670.68,4639578.12 351208.72,4639650.96 351766.08,4640565.26 352034.02,4641823.9 352730.92,4642161.55 351864.03,4642925.06 351094.87,4643222.7 351372.49,4644174.93 351851.19,4644695.8 352526.33,4645162.21 353182.03,4644280.92 353841.23,4644382.53 354226.64,4644313.25 354152.13,4643923.31 354470,4643778.9 353492.49,4640703.86 353555.55,4639247.93 353780.25,4638625.79 353475.4,4637891.9 353536.2,4637447.54 353266.46,4637334.23 353318.26,4636527.69 352742.11,4636295.49 351825.33,4635837.24 350131.02,4635406.3 349726.89,4634955.56 349573.98,4634233.01 349844.95,4633069.84 349728.46,4631830.1 349346.94,4631378.23 349109.53,4629125.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[85735913.16316]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[339]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[344]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25150]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Oliola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Oliola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Oliola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Oliola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="339">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">479062.28,4641817.36 479750.76,4644384.75 480453.2,4644316.81 481120.38,4643801.66 481712.31,4643838.22 482251.63,4644201.34 482952.75,4643556.44 482652.15,4641470.52 482858.6,4640084.06 481854.02,4639205 481124.61,4639720.48 480328.93,4640456.49 479062.28,4641817.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13691477.35315]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[340]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[345]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17002]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aiguaviva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Aiguaviva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aiguaviva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aiguaviva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="340">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">475152.68,4641590.81 475232.98,4641242.39 475907.39,4641029.9 476458.78,4641244.42 476500.14,4640490.98 476646.1,4639838.12 476462.98,4639251.6 476059.09,4638844.14 475446.53,4636990.46 475387.9,4636675.84 475126.83,4636454.39 474631.92,4636464.61 473719.91,4637045.83 472504.38,4637660.59 471482.28,4637815.58 470781.77,4638564.87 469618.63,4639085.68 468014.49,4640390.58 468258.83,4641611.11 469289.41,4641188.96 470303.21,4642202.76 470669.61,4642076.34 470935.86,4642479.6 471340.77,4642976.22 471961.14,4643094.44 472617.44,4643081.21 473161.49,4643635.88 472985.64,4644347.3 473602.05,4644296.71 474986,4643126.85 475374.87,4642489.38 475109.35,4641890.53 475152.68,4641590.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37011372.1395]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[341]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[346]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17028]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Brunyola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Brunyola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Brunyola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Brunyola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="341">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486468.37,4640721.51 485803.85,4640542.09 484872.96,4640169.95 483752.83,4640271.04 482858.6,4640084.06 482652.15,4641470.52 482952.75,4643556.44 483734.41,4644251.76 484875.07,4644207.68 484611.89,4643737.74 484971.55,4643414.6 485203.57,4643146.43 485284.71,4642903.89 485713.36,4642835.97 486271.95,4642655.26 486877.14,4642609.01 486756.29,4642050.51 486383.37,4641252.7 486468.37,4640721.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12104939.30155]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[342]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[347]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17073]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fornells de la Selva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fornells de la Selva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fornells de la Selva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fornells de la Selva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="342">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">510532,4640237.02 510038.18,4641094.33 509979.41,4642682.65 509913.01,4642963.81 510672.88,4642948.76 511160.85,4643289.43 511661.95,4643541.74 512425.21,4643790.89 512760.01,4643763.4 512982.79,4643001.21 513369.84,4641892.73 513846.37,4641481.34 518167.24,4641985.5 518075.61,4641703.5 518324.09,4641378 518019.21,4641202 517894.53,4640902 517369.11,4640905 517428.5,4640537 517425.53,4640246 517624.4,4639910.5 517271.17,4639720.5 517413.65,4639150.5 517066.37,4638928 516889.303,4638002.057 516733.9,4637945.5 516377.98,4638184.26 516142.428,4638123.932 516057.12,4638014 516074.9,4637847.5 515771.4,4637591.5 515354.928,4637486.432 515144.62,4637263 515158.053,4636897.369 514908.053,4636562.994 515104,4636211.5 514879.59,4636112.5 514011.41,4637174.95 513479.91,4638119.13 512922.1,4638555.46 513255.04,4639006.33 512952.31,4640042.88 512677.57,4640508.37 512197.15,4640965.61 510532,4640237.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26938278.91508]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[343]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[348]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17117]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palafrugell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palafrugell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palafrugell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palafrugell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="343">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486468.37,4640721.51 486383.37,4641252.7 486756.29,4642050.51 487736.3,4642198.57 488438.94,4643096.21 489930.63,4642990.16 490826.05,4643198.27 491664.97,4642567.18 492014.35,4640918.48 490594.45,4639914.95 489881.34,4639833.71 489223.74,4640000 487726.24,4639656.41 487343.66,4639715 486971.08,4640092.48 486468.37,4640721.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14573010.5421]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[344]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[350]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17090]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llambilles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llambilles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llambilles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llambilles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="344">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">446988.94,4642198.21 446912.84,4642676.72 446626.85,4642755.67 446650.77,4642950.29 447194.16,4642939.95 447127.69,4643180.81 447754.17,4642854.4 448060.39,4642283.75 448512.07,4642142.3 448676.14,4642306.35 449391.86,4642338.49 450942.72,4642550.9 451545.17,4641713.77 451702.77,4641190.31 451353.25,4640900.32 451097.16,4640923.1 451102.35,4640485.19 451934.65,4639183.35 452424.43,4638901.8 452460.58,4638671.05 452106.81,4638303.08 450904.57,4638558.18 450729.35,4637785.69 450072.83,4637478.28 449444.49,4636673.26 449169.39,4636649.4 448915.78,4635861.18 448265.35,4636275.73 447807.41,4637150.95 447827.7,4637341.6 447544.83,4636893.7 447133.88,4637200.51 446727.52,4637005.51 446420.89,4637263.89 445858.46,4637614.91 445081.09,4637970.55 445148.85,4638566 446203.4,4641329.16 446663.94,4641241.98 447137.68,4641855.61 446988.94,4642198.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30366973.48225]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[345]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[351]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08241]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Sadurni d'Osormort]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Sadurni d'Osormort]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Sadurn¡ d'Osormort]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Sadurn¡ d'Osormort]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="345">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365129.68,4630879.56 364693.42,4630781.53 363471.1,4630927.72 363005.89,4631255.65 362534.1,4631396.74 361865.3,4631446.36 361177.02,4631952.61 360597.77,4632505.97 360969.51,4632617.5 361167.79,4633167.5 361335.64,4634014.1 362562.92,4635915.97 362542.56,4636951.89 362414.49,4639502.77 362032.05,4640264.99 362043.08,4640486.06 362517.72,4641055.75 363227.09,4640683.54 363791.54,4642361.28 364765.49,4642804.06 365195.88,4642890.43 365634.1,4643076.98 366104.87,4643158.25 367344.9,4641754.16 367529.01,4641674.25 368120.46,4641920.77 369818.05,4640594.16 369576.08,4639559.94 368446.84,4638519.79 368320.85,4638115.71 367871.73,4637535.26 367877.82,4636385.55 367575.34,4635455.86 367350.88,4634592.21 367157.52,4632317.42 366653.53,4632298.13 366188.75,4631922.63 365636.46,4631267.26 365257.12,4630685.99 365129.68,4630879.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[65838203.06759]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[346]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[352]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25055]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Biosca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Biosca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Biosca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Biosca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="346">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">389628.69,4636225.01 391337,4637645 391793.22,4638395.28 392802.12,4638566.07 393481.19,4638197.29 393751.1,4637700.09 394318,4638929 393822.68,4639241.67 393738,4640240 394340,4642299 394073.62,4643054.89 394879.12,4642632.01 395160.87,4642398.76 394859,4641798 395660.21,4641511.51 396597.9,4641609.39 396879,4642032 397280.52,4641381.87 397680.75,4641599.24 397900.88,4640982.1 399536.75,4641783.58 400634.53,4641758.16 401503.92,4642362.29 402692.81,4641626.55 403152.74,4641155.91 403492.87,4640671.31 404181.2,4640246.18 403951.45,4639582.05 404489.75,4639382.8 404530.8,4640225.7 404456.3,4640728.55 404555.25,4641252.48 405840.37,4641331.72 407227.86,4640194.03 407758.8,4639428.03 407314.19,4639238.46 406271.13,4638603.37 405582.27,4637969.53 404717.39,4637760.97 403395.7,4637506.12 401583.04,4636888.49 400112,4635949 400478.38,4635407.77 400353.78,4635347.6 399566,4635297 399290.54,4634431.9 399069.43,4634401.13 398879.97,4635061.25 398418.63,4635132.27 398215,4635550 396903,4635405 396593.84,4635619.88 395631,4635156 395723,4634921 395510.85,4634383.47 395368,4634538 394758.53,4634105.52 393879.11,4633911.42 393621.22,4633522.92 393077.09,4634268.68 392407.45,4634450.68 391844,4634277 391043.76,4634654.86 391021.58,4635053.37 389628.69,4636225.01</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[81460248.49105]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[347]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[353]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08141]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Navas]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Navas]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Nav…s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Nav…s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="347">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">429144.82,4639257.14 428698.02,4640289.14 428909.69,4640863.36 429339.73,4641161.04 430196.02,4642234.69 430146.14,4642689.61 430508.67,4642528.93 430866.92,4642796.26 430977.78,4642577.42 431164.99,4642290.97 432284.56,4641824.29 431888.22,4640883.74 433281.36,4641084.78 434126.76,4642164.73 434732.47,4641881.21 434957.46,4642139.05 435308.82,4641696.99 434204.09,4641017.77 433893.8,4640862.74 433557.15,4640850.23 433933,4640293.18 433899.19,4639744.15 434078.03,4638614.01 433645.97,4638609.54 433389.25,4638773.53 433044.29,4638783.29 433114.64,4639032.71 432957.06,4639146.3 432704.95,4639078.23 432496.22,4639260.33 431249.28,4639401.65 430109.72,4638885.21 429402.03,4639071.59 429144.82,4639257.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">433461.856524587,4638957.11863371 433567.76,4639224.9 433679.89,4639679.91 433138.83,4639936.32 433182.04,4639795.26 433030.26,4639729.18 433461.856524587,4638957.11863371</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13756311.25052]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[348]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[355]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08247]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Eulalia de Riuprimer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Eulalia de Riuprimer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Eul…lia de Riuprimer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Eul…lia de Riuprimer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="348">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">305448.83,4639732.36 304057.07,4638487.41 303406.53,4638601.78 302800.8,4638042.67 302542.25,4634859.01 301742.46,4634253.06 299828.89,4633934.93 298959.32,4633461.34 299030.82,4635340.12 299231.61,4636324.43 299422.29,4637122.92 299266.6,4637583.39 299694.24,4637835.81 300235.59,4637959.75 301211.84,4638288.82 301587.95,4639076.98 300372.6,4640075.77 301093.11,4642508.82 302470,4642340 303194.92,4641960.02 303310.57,4641504.32 304060.44,4640534.9 305448.83,4639732.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26854288.94486]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[349]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[356]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25112]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ivars de Noguera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ivars de Noguera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ivars de Noguera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ivars de Noguera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="349">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">419758.1,4629674.59 420000,4628916.06 419388.74,4628482.66 418585.45,4628472.08 417925.76,4628752.36 417552.71,4629183 416616.49,4628840.88 416079.03,4628957.51 415593.74,4629767.62 414800.25,4629623.8 414180.48,4629916.83 413512.31,4629680.44 413503.44,4629818.09 412649.9,4630976.92 411941.54,4631872.21 411717.62,4632993.45 411123.14,4633289.32 409818.66,4633497.28 409913.88,4634734.51 411355.64,4635055.38 411482.48,4635606.65 411957.02,4635866.41 412937.59,4638071.65 413509.52,4638583.51 414047.54,4638825.79 414167.86,4639884.7 413938.97,4640071.35 415002.78,4640761.93 415088.23,4641214.78 414701.76,4641403.16 414709.93,4641595.01 415806.33,4641509.49 416003.68,4642066.77 416569,4641694 416704.4,4641843.59 417249.26,4642289.18 417785.24,4642414.79 417444.41,4641160.23 418071.94,4641085.99 418163.28,4640631.34 418030.45,4640015.92 418379.64,4638947.54 418251.74,4637607.12 417233.38,4637468.91 418034.27,4637034.32 418264.07,4636638.58 418047.26,4636222.31 416566.73,4634678.42 415288.71,4633911.23 414967.23,4632835.35 415133.34,4632458.56 416684.92,4632196.63 417357.76,4631904.69 418044.4,4630693.37 418727.47,4630812.28 418861.54,4630517 419106.46,4630524.93 419758.1,4629674.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[63136968.4601]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[350]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[357]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08012]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Avinyo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Avinyo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aviny¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aviny¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="350">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">475664.97,4634831.89 475609.03,4636135.5 475387.9,4636675.84 475446.53,4636990.46 476059.09,4638844.14 476462.98,4639251.6 476646.1,4639838.12 476500.14,4640490.98 476458.78,4641244.42 475907.39,4641029.9 475232.98,4641242.39 475152.68,4641590.81 475502.65,4641510.85 477386.84,4641529.59 479062.28,4641817.36 480328.93,4640456.49 481124.61,4639720.48 481142.13,4637967.44 481223.68,4636915.65 481421.15,4636493.02 480907.47,4636261.59 480555.06,4634981.91 480096.84,4634667.24 479939.4,4634728.08 479911.36,4634209.48 479522.78,4633911.61 479350.44,4634167.95 478978.74,4634330.12 478177.26,4635213.06 477998.03,4635502.88 477266.49,4635537.72 476748.47,4635067.67 475664.97,4634831.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32835678.0951]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[351]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[359]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17233]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilobi d'Onyar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilobi d'Onyar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilob¡ d'Onyar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilob¡ d'Onyar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="351">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">335748.84,4632801.97 335492.2,4632826.12 334972.52,4631128.38 334804.62,4632138.35 334587.03,4632118.44 334557,4633555 334563.83,4633826.9 334303.7,4636194.52 333928.97,4637072.31 332954.89,4637923 332238.44,4639038.55 332358.21,4639449.63 332334,4639861 332624,4641075 333268.61,4641815.71 334170.08,4641501.91 334726.1,4641785.89 335326.59,4641167.64 335246.44,4640287.74 335698.26,4639929.81 335969.36,4640011.16 336648.55,4640504.67 337249,4640308 337421.39,4639634.88 337667.17,4639003.93 337674.73,4638659.86 337568,4638415 337528.43,4637991.63 337609.1,4637171.85 337431.99,4636029.5 337379.57,4635700.22 336858.95,4635493.53 336509.96,4635843.28 335857.33,4635255.03 335749.68,4634141.19 336066.09,4633942.39 335748.84,4632801.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28238657.5054]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[352]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[360]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25094]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Foradada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Foradada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Foradada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Foradada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="352">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">373538.9,4629278.9 374850.7,4630226.14 376515.848,4631323.11 376462.52,4631475.19 375100.58,4630977.99 374812.49,4631555.03 373582.35,4632656.01 374665.1,4633317.74 375250.15,4634046.57 375942.27,4635218.72 375574.01,4636626.78 375820.93,4636949.7 375773.88,4638214.02 375847.41,4639077.27 375713.07,4640292 376120.43,4641731.54 376678.9,4641271.07 377343.3,4641016.34 377640.41,4640756.8 378311.62,4640461.35 378546.01,4640062.71 378998.58,4639654.35 379386.61,4637992.85 380233.78,4636910.48 381316.21,4637673.03 382488.52,4636906.64 383000.78,4637327.53 383945,4638030 384502.79,4637956.32 385448.8,4637544.49 386000.1,4636283.58 386062,4636036 386421.84,4635181.26 386103.28,4634067.47 386384.19,4633695.69 385893.64,4633187.75 384826.37,4632859.66 385120.95,4632064.69 384810.13,4630721.34 383194.48,4629981.33 378290.01,4628068.57 375851.59,4627520.34 374091.83,4627872.76 373538.9,4629278.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">393822.68,4639241.67 394318,4638929 393751.1,4637700.09 393481.19,4638197.29 392802.12,4638566.07 393211.45,4638499.55 392909.35,4639191.17 393260.08,4639255.05 393586.75,4638744.94 393822.68,4639241.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[104435512.13196]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[353]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[361]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25167]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pinos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pinos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pin¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pin¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="353">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">514879.59,4636112.5 514724.71,4635581 514854.928,4635298.932 513271.62,4635794.24 512257,4636353.65 511858.13,4636590.03 511885.62,4637344.69 511374.65,4637594.92 510882.01,4638310.26 510689.94,4638247.95 510427.95,4638741.47 510532,4640237.02 512197.15,4640965.61 512677.57,4640508.37 512952.31,4640042.88 513255.04,4639006.33 512922.1,4638555.46 513479.91,4638119.13 514011.41,4637174.95 514879.59,4636112.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11982315.54227]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[354]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[362]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17110]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mont-ras]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mont-ras]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mont-ras]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mont-ras]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="354">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486140,4636410.94 485694.18,4636734.82 485541.51,4637217.59 484823.62,4637605.03 484918.98,4638305.32 484975.56,4639234.16 484472.15,4639860.05 484894.26,4639830.52 484872.96,4640169.95 485803.85,4640542.09 486468.37,4640721.51 486971.08,4640092.48 487343.66,4639715 487333.93,4639203.89 487748.05,4638799.31 487676.21,4638181.5 486951.1,4637475.61 486729,4636596.3 486153.57,4636520.25 486140,4636410.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8627524.7476]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[355]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[363]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17038]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Campllong]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Campllong]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Campllong]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Campllong]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="355">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">423934.83,4635299.19 422578.08,4634242 421750.52,4632693.21 421351.64,4632064.57 421102.78,4631099.75 420695.94,4630046.21 419758.1,4629674.59 419106.46,4630524.93 418861.54,4630517 418727.47,4630812.28 418044.4,4630693.37 417357.76,4631904.69 416684.92,4632196.63 415133.34,4632458.56 414967.23,4632835.35 415288.71,4633911.23 416566.73,4634678.42 418047.26,4636222.31 418264.07,4636638.58 418034.27,4637034.32 417233.38,4637468.91 418251.74,4637607.12 418379.64,4638947.54 418030.45,4640015.92 418163.28,4640631.34 419319.14,4640300.58 420034.06,4639502.89 420557.74,4639603.94 421053.89,4639043.86 422404.77,4639262.97 423348.53,4639293.92 423997.88,4640000 424700.71,4640196.09 425043.07,4639722.82 426243.4,4639791.94 427901.39,4640344.38 428372.29,4640705.25 428698.02,4640289.14 429144.82,4639257.14 428763.37,4639216.47 428676.99,4637982.06 428113.17,4637697.23 427334.91,4637649.59 426942.09,4637382.5 425305.3,4638112.39 424935.46,4637771.57 424914.63,4637136.21 424337.62,4636791.82 423934.83,4635299.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[65555396.9016]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[356]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[364]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08258]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Maria d'Olo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Maria d'Olo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Maria d'Ol¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Maria d'Ol¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="356">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">364937.51,4626668.21 364242.93,4627568.87 363861.07,4627941.09 364380.81,4628786.9 364325.08,4629139.08 364744.9,4629779.31 365129.68,4630879.56 365257.12,4630685.99 365636.46,4631267.26 366188.75,4631922.63 366653.53,4632298.13 367157.52,4632317.42 367350.88,4634592.21 367575.34,4635455.86 367877.82,4636385.55 367871.73,4637535.26 368320.85,4638115.71 368446.84,4638519.79 369576.08,4639559.94 370624.33,4639972.03 371126.28,4638885.35 372622.73,4638403.93 373688.65,4640000 374414,4640679 375713.07,4640292 375847.41,4639077.27 375773.88,4638214.02 375820.93,4636949.7 375574.01,4636626.78 375942.27,4635218.72 375250.15,4634046.57 374665.1,4633317.74 373582.35,4632656.01 374812.49,4631555.03 375100.58,4630977.99 376462.52,4631475.19 376515.848,4631323.11 374850.7,4630226.14 373538.9,4629278.9 373100.81,4628978.93 372009.39,4628728.25 370784.54,4628997.9 369270.14,4629074.9 368627.93,4628243.76 368850.51,4627900.36 368295.36,4626306.46 368106.6,4626422.7 367840.76,4626986.99 367303.7,4627451.03 367482.27,4629213.49 367299.4,4629408.02 366571.4,4628840.49 364937.51,4626668.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[92994337.56209]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[357]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[365]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25223]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tora]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tora]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tor…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tor…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="357">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">465418.08,4631642.18 464718.6,4632216.64 464180.5,4632751.19 463797.92,4632910.58 462980.56,4634234.05 462626.65,4634677.14 463670.61,4636801.43 464369.1,4636467.57 465219.18,4636645.63 465569.55,4636588.19 465807.91,4636685.84 466347.83,4637587.61 466129.56,4637803.01 465026.76,4638518.11 465079.52,4638893.74 465312.62,4639146.9 465578.24,4639682.54 466306.51,4640137.87 466763.46,4640067.46 467469.14,4640150.48 467800.29,4640329.73 468014.49,4640390.58 469618.63,4639085.68 470781.77,4638564.87 471482.28,4637815.58 472504.38,4637660.59 473719.91,4637045.83 474631.92,4636464.61 475126.83,4636454.39 475387.9,4636675.84 475609.03,4636135.5 475664.97,4634831.89 475350.8,4633813.4 475362.09,4633356.13 473128.26,4632257.08 472230.07,4632730.27 470948.9,4632977.63 471097.8,4633142.06 470493.56,4633298.04 470173.79,4633526.55 469126.26,4633434.35 468914.88,4632812 468837.59,4631864.95 468453.34,4631827.5 468070.78,4631523.34 467551.19,4631044.09 466747.56,4631226.15 466052.62,4631561.34 465418.08,4631642.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[70448103.2086]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[358]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[366]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17180]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Coloma de Farners]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Coloma de Farners]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Coloma de Farners]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Coloma de Farners]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="358">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437101.93,4636300.07 436275.81,4636474.66 436043.22,4637158.8 435846.1,4637040.47 434978.76,4637854.42 434544.11,4637995.17 435649.14,4638731.12 435929.35,4639113.07 436439.55,4639598.42 436576.14,4639653.85 437250.58,4640368.95 438773.03,4639490.91 438704.27,4639289.96 439011.21,4638664.76 438742.12,4637921.99 438323.15,4638356.66 437709.76,4637212.18 437780.18,4637010.75 437429.53,4636602.23 437289.65,4636315.65 437101.93,4636300.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437099.9,4633580.1 437569.05,4634124.64 437966.11,4634626.69 438629.45,4634745.18 438621.59,4634399.55 438874.32,4634385.76 438165.38,4633190.27 437099.9,4633580.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[10688590.67875]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[359]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[367]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08111]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Malla]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Malla]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Malla]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Malla]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="359">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">481223.68,4636915.65 481142.13,4637967.44 481124.61,4639720.48 481854.02,4639205 482858.6,4640084.06 483752.83,4640271.04 484872.96,4640169.95 484894.26,4639830.52 484472.15,4639860.05 484975.56,4639234.16 484918.98,4638305.32 484823.62,4637605.03 484323.69,4636433.07 484096.66,4635388.88 483585.83,4635565.07 482921.7,4636082.12 482661.55,4636186.9 482379.04,4636965.07 481223.68,4636915.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12998272.8269]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[360]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[368]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17150]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riudellots de la Selva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riudellots de la Selva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riudellots de la Selva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riudellots de la Selva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="360">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360597.77,4632505.97 360251.48,4632166.66 360158.84,4632251.82 359325.34,4632883.37 358612.88,4633604.85 357761.08,4634141.39 357224.77,4634865.56 356112.08,4634897.87 355617.18,4635454.42 355988,4635822.95 356206.89,4636103.53 357258.38,4637166.17 357679.84,4637795.56 357643.36,4638331.63 358067.46,4639060.45 358393.81,4640120.25 358793.16,4640110.75 359300.33,4639974.41 360257.03,4639362.56 360609.67,4639541.94 360986.26,4639061.47 361118.22,4639217.61 361814.78,4639788.87 362032.05,4640264.99 362414.49,4639502.77 362542.56,4636951.89 362562.92,4635915.97 361335.64,4634014.1 361167.79,4633167.5 360969.51,4632617.5 360597.77,4632505.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32841992.24479]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[361]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[369]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25191]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sanauja]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sanauja]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sana�?ja]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sana�?ja]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="361">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">413512.31,4629680.44 412605.9,4629429.02 411781.94,4629257.01 411445.95,4628850.08 411591.05,4628240.19 410563.9,4627686.21 410308.67,4627006.69 409143.09,4626032.27 408999.39,4625469.92 409043.09,4625254.51 406001.68,4626457 405813.31,4626650.51 405599.17,4627362.4 405782.47,4627797.93 404697,4628458.39 404318.71,4629450.81 405244.22,4630297.5 404705.05,4631534.6 404780.85,4631971.93 405949.55,4632009.99 406459.61,4632102.97 406936.87,4632319.85 407357.72,4633124.09 408329.45,4634204.78 408535.44,4635023.05 408998.24,4635968.27 409096.93,4636597.37 409485.23,4637499.59 409972.33,4638114.48 409485.23,4638844.3 409182.99,4639373.98 409509.13,4639550.61 409795.18,4639352.72 410104.61,4639560.87 410605.54,4639261.05 411932.2,4639880.43 412445.72,4639811.47 413938.97,4640071.35 414167.86,4639884.7 414047.54,4638825.79 413509.52,4638583.51 412937.59,4638071.65 411957.02,4635866.41 411482.48,4635606.65 411355.64,4635055.38 409913.88,4634734.51 409818.66,4633497.28 411123.14,4633289.32 411717.62,4632993.45 411941.54,4631872.21 412649.9,4630976.92 413503.44,4629818.09 413512.31,4629680.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[64838587.27019]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[362]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[370]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08191]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sallent]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sallent]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sallent]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sallent]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="362">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486662.74,4634460.43 486859.75,4634472.68 486558.75,4635706.18 486140,4636410.94 486153.57,4636520.25 486729,4636596.3 486951.1,4637475.61 487676.21,4638181.5 487748.05,4638799.31 487333.93,4639203.89 487343.66,4639715 487726.24,4639656.41 489223.74,4640000 489881.34,4639833.71 490594.45,4639914.95 491296.75,4639147.33 492169.65,4639188.2 493769.19,4638764.06 495221.09,4638048.23 496408.15,4637156.5 496009.89,4636498.4 495496.49,4635749.02 495341.33,4635022.79 494878.4,4634831.17 493441.84,4634528.8 492931.69,4634528 492699.41,4634906.91 491647.88,4634390.79 490552.91,4634370.72 489486.85,4633173.84 488566.71,4633195.57 487987.2,4633088.85 487157.48,4633642.95 486662.74,4634460.43</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[44791635.4411]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[363]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[371]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17044]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cassa de la Selva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cassa de la Selva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cass… de la Selva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cass… de la Selva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="363">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">307514.47,4635151.03 307222.9,4634830.41 306630.02,4633208.5 306934.48,4631103.24 306621.73,4629736.66 306264.13,4629507.97 303101.44,4628457.56 301884.67,4627782.92 301325.84,4629098.08 300636.13,4629797.85 299826.53,4631113.5 299717.36,4631406.8 298959.32,4633461.34 299828.89,4633934.93 301742.46,4634253.06 302542.25,4634859.01 302800.8,4638042.67 303406.53,4638601.78 304057.07,4638487.41 305448.83,4639732.36 305665.19,4639524.1 306096.14,4638646.14 305940.47,4636471.75 306054.15,4636375.58 306116.4,4636122.22 306562.43,4635774.92 307514.47,4635151.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[54662172.67065]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[364]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[372]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25015]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Algerri]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Algerri]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Algerri]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Algerri]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="364">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">409182.99,4639373.98 409485.23,4638844.3 409972.33,4638114.48 409485.23,4637499.59 409096.93,4636597.37 408998.24,4635968.27 408535.44,4635023.05 408329.45,4634204.78 407357.72,4633124.09 406936.87,4632319.85 406459.61,4632102.97 405949.55,4632009.99 404780.85,4631971.93 404167.14,4632153.66 403545.05,4633359.16 402931.18,4634191.49 402390.14,4634505.26 402270.49,4635599.62 401583.04,4636888.49 403395.7,4637506.12 404717.39,4637760.97 405582.27,4637969.53 406271.13,4638603.37 407314.19,4639238.46 407758.8,4639428.03 409182.99,4639373.98</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37034072.0008]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[365]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[373]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08018]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Balsareny]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Balsareny]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Balsareny]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Balsareny]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="365">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">444130.05,4634168.12 443373.83,4634472.62 442785.37,4634204.97 441940.4,4633568.36 440628.67,4633668.18 440293.72,4633641.72 439515.85,4634307.48 439630.815,4634743.041 439949.565,4634905.541 439931.38,4635084.86 439547.98,4635982.15 439121.51,4635539.87 438736.89,4635469.04 438812.065,4635196.166 438590.19,4635164.916 438571.44,4635024.291 438768.315,4634993.041 438758.94,4634830.541 438629.45,4634745.18 437966.11,4634626.69 437569.05,4634124.64 437366.13,4634718.81 437484.57,4635306.21 437101.93,4636300.07 437289.65,4636315.65 437429.53,4636602.23 437780.18,4637010.75 437709.76,4637212.18 438323.15,4638356.66 438742.12,4637921.99 439011.21,4638664.76 438704.27,4639289.96 439217.09,4638621.86 439407.14,4638820.38 440081.65,4638552.29 440456.38,4638656.66 441171.07,4639170.8 441069.17,4639378.37 442157.77,4638931.2 442218,4638826.75 442836.12,4638660.53 442720.22,4638165.72 443366.08,4637067.67 443985.01,4636356.26 444365.77,4635513.09 444637.32,4635249.84 444130.05,4634168.12</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26940892.55679]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[366]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[374]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08278]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Taradell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Taradell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Taradell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Taradell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="366">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">502844,4633150 502193.37,4633752.48 502010.79,4635401.87 503847.66,4635777.04 505011.9,4636681.51 505319.99,4637209.21 504590.9,4638650.82 505758.49,4638667.4 506390.38,4638888.87 507631.52,4638288.33 508066.77,4637632.07 508147.15,4636475.21 508989.67,4635867.09 509069.23,4634473.71 509609.73,4633939.54 509802.64,4633170.2 509022.534,4633014.721 508460.034,4632658.471 507816.284,4631899.096 507725.659,4631464.721 507544.409,4631427.221 506800.78,4630568.5 506452.22,4631159.79 506422.92,4631841.37 504804.62,4632447.54 504859.65,4632756.6 502844,4633150</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33458214.78694]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[367]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[375]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17034]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Calonge]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Calonge]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Calonge]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Calonge]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="367">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">512257,4636353.65 511543.17,4636346.35 510967,4635663.41 510863.95,4635687.98 510454.24,4636384.49 510123.54,4636380.7 509585.99,4637118.24 508282.31,4637715.95 509441.47,4638797.23 510689.94,4638247.95 510882.01,4638310.26 511374.65,4637594.92 511885.62,4637344.69 511858.13,4636590.03 512257,4636353.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5466516.1961]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[368]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[376]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17209]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vall-llobrega]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vall-llobrega]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vall-llobrega]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vall-llobrega]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="368">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">451827.27,4633438.97 450968.34,4633881.76 450664.04,4634788.88 450293.19,4635602.92 449899.96,4635996.15 449444.49,4636673.26 450072.83,4637478.28 450729.35,4637785.69 450904.57,4638558.18 452106.81,4638303.08 452460.58,4638671.05 452725,4638435.51 452910.78,4637944.6 453585.89,4637667.66 454006.73,4637627.03 453945.66,4637438.36 454576.98,4636926.22 454654.23,4635896.37 454249.17,4634852.48 453729.61,4634842.77 453332.26,4633994.09 452391.58,4633998.86 451827.27,4633438.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17002383.39095]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[369]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[377]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17063]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Espinelves]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Espinelves]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Espinelves]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Espinelves]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="369">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">423934.83,4635299.19 424337.62,4636791.82 424914.63,4637136.21 424935.46,4637771.57 425305.3,4638112.39 426942.09,4637382.5 427334.91,4637649.59 427462.05,4637140.1 427750.45,4637099.19 428070.98,4636753.71 427830.37,4635859.61 428209.67,4634962.34 427958.18,4634885.69 427592.93,4634267.58 427114.88,4634114.56 426280.85,4634324.74 426230.72,4634772.9 425464.03,4635216.3 424483.29,4635212.01 423934.83,4635299.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10441482.40875]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[370]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[378]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08079]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Estany, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Estany, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Estany, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Estany, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="370">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327942.33,4633323.92 328452.14,4634648.51 328835.75,4637122.98 328755.53,4638092.36 328937.35,4637869.63 329566.11,4637746.69 331579,4637485.13 332954.89,4637923 333928.97,4637072.31 334303.7,4636194.52 334563.83,4633826.9 334557,4633555 334108.59,4632748.23 333411.56,4632243.87 332929.7,4632529.62 332307.62,4633059.39 331653.21,4632172.69 331220.88,4631519.18 330960.4,4631276.98 330693.66,4630179.1 329678.05,4629891.86 329371.57,4629562.52 328976.39,4629575.58 328919.42,4629914.7 328640.24,4630100.64 328308.07,4630015.65 327975.39,4629223.68 327534.92,4627695.9 326809.5,4627926.01 327911.95,4630515.68 328269.44,4632586.86 327942.33,4633323.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[39260344.4189]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[371]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[379]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25079]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cubells]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cubells]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cubells]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cubells]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="371">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">451827.27,4633438.97 451917.94,4633166.57 451896.99,4632841.77 452323.09,4632174.82 452110.64,4631888.58 451587.7,4631652.65 451130,4631025 450942.58,4630110.6 451196.11,4629403.15 451518.58,4629026.49 451330.8,4628613.65 451730.55,4628458.55 451143.65,4628129.72 449513,4628547 449065.37,4628730.29 448800,4628925 447789.1,4628450.26 446245.55,4629076.99 445992.28,4629772.17 445609.8,4630400.16 445726.09,4630980.35 445886.02,4631584.66 444900.05,4632739.58 444130.05,4634168.12 444637.32,4635249.84 444365.77,4635513.09 443985.01,4636356.26 444064.66,4636436.27 444339.61,4637202.78 444579.93,4637234.75 445081.09,4637970.55 445858.46,4637614.91 446420.89,4637263.89 446727.52,4637005.51 447133.88,4637200.51 447544.83,4636893.7 447827.7,4637341.6 447807.41,4637150.95 448265.35,4636275.73 448915.78,4635861.18 449169.39,4636649.4 449444.49,4636673.26 449899.96,4635996.15 450293.19,4635602.92 450664.04,4634788.88 450968.34,4633881.76 451827.27,4633438.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[50695168.05486]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[372]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[380]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17220]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Viladrau]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Viladrau]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Viladrau]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Viladrau]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="372">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">509802.64,4633170.2 509609.73,4633939.54 509069.23,4634473.71 508989.67,4635867.09 508147.15,4636475.21 508066.77,4637632.07 508282.31,4637715.95 509585.99,4637118.24 510123.54,4636380.7 510454.24,4636384.49 510863.95,4635687.98 510967,4635663.41 511543.17,4636346.35 512257,4636353.65 513271.62,4635794.24 514854.928,4635298.932 514740.42,4635210.5 514448.68,4635114 514342.428,4634916.119 513892.428,4634825.494 513728.28,4634678.5 513439.303,4634587.994 513255.86,4634420.5 513148.678,4634691.119 512926.803,4634694.244 512826.803,4634619.244 512683.053,4634644.244 512530.18,4634578.5 512551.803,4634391.119 512339.303,4634262.994 512204.928,4634312.994 512063.86,4634227 511987.71,4633784.5 512165.4,4633523.5 511967.428,4633331.744 511465.5,4633168 511073.678,4632934.869 511086.178,4632616.119 511033.053,4632500.494 510920.553,4632422.369 510758.053,4632391.119 510714.303,4632469.244 510110.75,4632368.01 510108.053,4632409.869 510620.553,4632519.244 510692.428,4632612.994 510673.678,4632741.119 510583.053,4632784.869 510654.928,4632859.869 510551.803,4632991.119 510289.303,4633112.994 509802.64,4633170.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13991160.17065]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[373]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[381]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17118]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palamos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palamos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palam¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palam¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="373">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">486662.74,4634460.43 485939.5,4634251.69 485129.61,4633551.06 485017.87,4633345.04 484492.12,4634584.39 484517.32,4636114.94 484323.69,4636433.07 484823.62,4637605.03 485541.51,4637217.59 485694.18,4636734.82 486140,4636410.94 486558.75,4635706.18 486859.75,4634472.68 486662.74,4634460.43</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6153982.52925]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[374]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[382]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17157]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Andreu Salou]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Andreu Salou]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Andreu Salou]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Andreu Salou]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="374">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">349109.53,4629125.95 349346.94,4631378.23 349728.46,4631830.1 349844.95,4633069.84 349573.98,4634233.01 349726.89,4634955.56 350131.02,4635406.3 351825.33,4635837.24 352742.11,4636295.49 353318.26,4636527.69 353266.46,4637334.23 353536.2,4637447.54 353690.99,4637098.64 353604.98,4636490.14 353391.02,4636169.23 353385.17,4635571.24 353071.03,4635086.23 352982.41,4634491.85 352408.05,4633308.3 351605.85,4632382.23 350839.58,4631011.39 349765.54,4629671.09 349109.53,4629125.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14439036.38345]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[375]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[383]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25060]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabanabona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabanabona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabanabona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabanabona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="375">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">498787.25,4623390.5 498273.43,4623130 498018.65,4622694 497681.89,4622576.08 497219.4,4622838.75 496798.95,4623217.43 496402.57,4623751.78 495903.88,4624313.61 496773.01,4624958.02 496373.76,4626328.74 495402.54,4626637.1 494730.14,4629220.74 494300.09,4630641.56 495120.01,4630822.29 496069.07,4630647.23 497264.56,4630611.41 497618.1,4631070.45 497051.26,4632872.84 496431.5,4634072.43 495341.33,4635022.79 495496.49,4635749.02 496009.89,4636498.4 496408.15,4637156.5 498887.81,4637216.86 500608.04,4635999.53 502010.79,4635401.87 502193.37,4633752.48 502844,4633150 502389.14,4631646.47 501610.35,4631492.22 501406.73,4631242.29 501637.09,4630069.1 501921.29,4629155.2 502052.97,4628591.33 502290.58,4628456.03 502351.61,4627937.08 498598.43,4626895.92 498754.39,4626616.5 498097.74,4625664.21 498661.85,4624962.99 498787.25,4623390.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[67802315.27295]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[376]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[384]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17181]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Cristina d'Aro]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Cristina d'Aro]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Cristina d'Aro]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Cristina d'Aro]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="376">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">488566.71,4633195.57 488226.82,4630941.59 487549.34,4629878.29 487951.18,4628983.96 488991.41,4629054.43 488877.68,4629406.72 489510.16,4629397.61 489465.93,4628700.61 488504.32,4628498.7 488383.67,4628094.44 487954.26,4627845.71 487953.45,4627078.87 488571.17,4626135.91 489459.09,4624875.12 489349.25,4624751.11 486380.02,4626953.75 486289.32,4627734.15 485291.68,4628261.71 484796.72,4628161.5 483880.34,4628371.83 482237.84,4628555.39 481747.13,4629090.67 481322.96,4629180.22 480847.87,4629600.42 480453.32,4629475.76 480084.98,4629976.98 479930.78,4631717.34 480492.85,4633295.05 479507.73,4633445.86 479522.78,4633911.61 479911.36,4634209.48 479939.4,4634728.08 480096.84,4634667.24 480555.06,4634981.91 480907.47,4636261.59 481421.15,4636493.02 481223.68,4636915.65 482379.04,4636965.07 482661.55,4636186.9 482921.7,4636082.12 483585.83,4635565.07 484096.66,4635388.88 484323.69,4636433.07 484517.32,4636114.94 484492.12,4634584.39 485017.87,4633345.04 485129.61,4633551.06 485939.5,4634251.69 486662.74,4634460.43 487157.48,4633642.95 487987.2,4633088.85 488566.71,4633195.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[58055834.40225]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[377]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[385]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17033]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Caldes de Malavella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Caldes de Malavella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Caldes de Malavella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Caldes de Malavella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="377">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">404780.85,4631971.93 404705.05,4631534.6 405244.22,4630297.5 404318.71,4629450.81 403005.26,4628176.84 400645.18,4628138.34 400797,4628912 400781.23,4629972.68 400462,4630942 400099,4631403 399913.99,4632111.75 399822.05,4632392.11 400195.54,4633304.7 399258.72,4633384.22 399040.35,4633694.08 399069.43,4634401.13 399290.54,4634431.9 399566,4635297 400353.78,4635347.6 400478.38,4635407.77 400112,4635949 401583.04,4636888.49 402270.49,4635599.62 402390.14,4634505.26 402931.18,4634191.49 403545.05,4633359.16 404167.14,4632153.66 404780.85,4631971.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29429386.2066]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[378]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[386]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08062]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellnou de Bages]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellnou de Bages]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellnou de Bages]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellnou de Bages]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="378">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">299717.36,4631406.8 299072.39,4631333.96 297545.51,4632105.24 296090.69,4632987.66 296888.09,4634452.93 296869.39,4635429.99 297310.84,4636653.5 299231.61,4636324.43 299030.82,4635340.12 298959.32,4633461.34 299717.36,4631406.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11150400.06925]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[379]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[387]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25013]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alfarras]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alfarras]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alfarr…s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alfarr…s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="379">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">383194.48,4629981.33 384810.13,4630721.34 385120.95,4632064.69 384826.37,4632859.66 385893.64,4633187.75 386384.19,4633695.69 386103.28,4634067.47 386421.84,4635181.26 386062,4636036 386000.1,4636283.58 387257.86,4636642.98 387847.9,4636384.71 388756.65,4636062.54 389628.69,4636225.01 391021.58,4635053.37 391043.76,4634654.86 391844,4634277 392407.45,4634450.68 393077.09,4634268.68 393621.22,4633522.92 393879.11,4633911.42 394758.53,4634105.52 395368,4634538 395510.85,4634383.47 395119.7,4633973.05 395336,4633137 395221,4632768 395633.02,4632482.33 394934.47,4631133.33 396667.14,4629383.58 396275.09,4628848.5 397176.94,4627987.61 397701.77,4626994.98 398132,4626688 397879.77,4626666.37 397174.89,4626814.28 395061.69,4626265.9 393375.16,4626418.94 392206.31,4627518.88 392060.01,4627347.37 392010,4627942 391209.67,4628821.62 390905.94,4628675.17 391063.3,4628064.23 390557,4627657 389760,4628083 389544.66,4628349.32 388895.13,4628570.81 388703.93,4628234.91 388890.93,4627693.62 389489.33,4627441.33 389490.01,4626739 388881.93,4626270.82 387360.05,4625740.61 387305.37,4625337.35 386853.21,4625342.96 386143.23,4624877.07 386058.93,4624984.25 384530.97,4625263.95 384413.83,4625146.76 383255.34,4624786.19 383172.63,4625365.04 382355.24,4625757.62 382237.21,4625991.81 383272.05,4626217.51 383141.55,4626574.23 383787.09,4627485.28 383503.49,4628074.41 383551.71,4628328.69 383337.31,4628307.7 383283.71,4628662.1 382934.14,4629064.86 383194.48,4629981.33</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[101557657.47281]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[380]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[388]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08229]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Mateu de Bages]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Mateu de Bages]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mateu de Bages]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mateu de Bages]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="380">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437099.9,4633580.1 436576.52,4633358.9 436415.34,4632919.67 435983.06,4632911.8 435888.92,4632130.9 434959.84,4632059.69 434012.43,4632305.76 433371.92,4632075.3 432847.87,4632502.18 432831.09,4633207.7 432518.03,4634921.7 432819.81,4635153.68 433960.38,4635859.48 434253.43,4635676.46 435053.95,4635715.2 435942.61,4636090.68 436275.81,4636474.66 437101.93,4636300.07 437484.57,4635306.21 437366.13,4634718.81 437569.05,4634124.64 437099.9,4633580.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">439515.85,4634307.48 439197.78,4634742.2 439130.815,4634996.166 438812.065,4635196.166 438736.89,4635469.04 439121.51,4635539.87 439547.98,4635982.15 439931.38,4635084.86 439949.565,4634905.541 439630.815,4634743.041 439515.85,4634307.48</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438812.065,4635196.166 438768.315,4634993.041 438571.44,4635024.291 438590.19,4635164.916 438812.065,4635196.166</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[16600120.09193]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[381]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[389]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08283]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="381">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">334181.3,4626533.25 334615.19,4626543.04 335106.29,4627078.6 335520.94,4627090.37 336616.03,4626194.39 338581.05,4628384.44 340507.66,4631990.28 340678.17,4632249.99 340276.54,4632170.37 340968.16,4633264.48 342285.77,4635847.85 342727.6,4635716.22 342559.3,4635413.14 343587,4635513 343627.63,4635162.42 344046,4634955 344232,4633461.39 344198.79,4632675.69 343359.88,4631919.91 342562.08,4632535.31 342392.03,4631956.77 342140.15,4631277.5 342335.35,4630769.92 344154.82,4630339.72 344435.88,4630063.22 345048.93,4629974.31 345481.32,4631071.73 346059.25,4631685.36 346614,4631569.89 346424.56,4630969.18 345412.3,4630001.01 345459.52,4628907.99 343878.79,4628311.21 343649.38,4628520.02 341864.26,4624503.68 341341.69,4624550.42 340972.79,4624465.76 339633.8,4622248.99 338473.27,4621631.34 336115.5,4620473.8 336039.43,4620881.02 335907.91,4620848.12 336030.46,4621398.46 333756.44,4622043.44 332480.26,4622185.9 336540.65,4624518.81 336939.76,4624550.54 336935.46,4624770 335365.84,4625191.7 334222.29,4625614.56 333730.11,4624860.36 333412.15,4625172.31 334304.09,4626490.71 334181.3,4626533.25</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">339564.77,4633563.22 338562.49,4633789.27 338282.06,4632959.96 337002.97,4632511.95 336410.22,4631821.02 336082.31,4632170.3 336035.61,4632742.04 335748.84,4632801.97 336066.09,4633942.39 335749.68,4634141.19 335857.33,4635255.03 336509.96,4635843.28 336858.95,4635493.53 337379.57,4635700.22 337431.99,4636029.5 337820.13,4636242.19 337855.94,4636103.48 338767.79,4635976.19 338754.84,4635532.38 338883.34,4635018.6 339160.74,4635033.97 339371.2,4634385.19 339564.77,4633563.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[79996932.01856]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[382]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[390]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25003]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Agramunt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Agramunt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Agramunt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Agramunt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="382">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">311683.66,4627179.27 310026.8,4626877 309853.4,4626684.95 309741.43,4627101.31 309372.68,4627074.11 309337.23,4627351.96 309000.49,4627511.57 307753.68,4628411.02 306621.73,4629736.66 306934.48,4631103.24 306630.02,4633208.5 307222.9,4634830.41 307514.47,4635151.03 309954.91,4635104.11 310865.19,4635314.05 312157.66,4635265.23 312580.06,4635605.14 313879.82,4635909.12 314888.39,4635943.48 314441.46,4634642.82 314439.21,4633261.55 314240.13,4632094.23 313866.77,4631345.13 314006.78,4630831.54 313092.03,4629668.17 312245,4629465.84 312270.38,4629185.03 311851.57,4628370.31 311683.66,4627179.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52227992.55131]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[383]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[391]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25069]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castello de Farfanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castello de Farfanya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castell¢ de Farfanya]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castell¢ de Farfanya]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="383">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">456214,4626720 454917.45,4626158.32 453880.41,4626733.67 453847.56,4627719.38 452778.43,4628428.67 451730.55,4628458.55 451330.8,4628613.65 451518.58,4629026.49 451196.11,4629403.15 450942.58,4630110.6 451130,4631025 451587.7,4631652.65 452110.64,4631888.58 452323.09,4632174.82 451896.99,4632841.77 451917.94,4633166.57 451827.27,4633438.97 452391.58,4633998.86 453332.26,4633994.09 453729.61,4634842.77 454249.17,4634852.48 455429.1,4634813.62 455871.54,4633978.81 456998.09,4633349.09 458983.62,4633204.28 459760.9,4632929.27 459510.1,4634282.46 459901.31,4635783.24 460767.05,4635849.24 461275.32,4635217.61 461897.71,4634568.7 462626.65,4634677.14 462980.56,4634234.05 463797.92,4632910.58 464180.5,4632751.19 464718.6,4632216.64 465418.08,4631642.18 465199.03,4631612.24 463242.54,4631679.72 463350.68,4630912.99 463228.08,4630069.2 463139.19,4628381.62 462659.36,4627165.05 462037.17,4626479.49 461370.62,4626020.16 461345.01,4625809.31 460418.03,4625936.48 459925.45,4627125.24 458058.58,4626861.77 457399.98,4627442.38 456214,4626720</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[86631013.8546]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[384]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[392]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17009]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arbucies]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arbucies]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arb£cies]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arb£cies]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="384">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395510.85,4634383.47 395723,4634921 395631,4635156 396593.84,4635619.88 396903,4635405 398215,4635550 398418.63,4635132.27 398879.97,4635061.25 399069.43,4634401.13 399040.35,4633694.08 399258.72,4633384.22 400195.54,4633304.7 399822.05,4632392.11 399913.99,4632111.75 399567.84,4630251.38 398634.28,4629874.44 397784.14,4629060.86 397403.16,4628779.78 396791.49,4629376.19 396667.14,4629383.58 394934.47,4631133.33 395633.02,4632482.33 395221,4632768 395336,4633137 395119.7,4633973.05 395510.85,4634383.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23844267.77735]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[385]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[393]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08274]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Suria]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Suria]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[S£ria]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[S£ria]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="385">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">361515.37,4623486.74 361211.17,4622170.1 360312.15,4622230.49 359980.5,4621768.09 358010.68,4620788.93 358233.78,4621605.5 358076.52,4623002.59 357205.84,4622931.12 356360.48,4621897.15 355184.61,4619012.58 353668.04,4618262 353446.4,4618805.63 353614.44,4619615.67 353011.35,4620084.87 353409.57,4620793 354180.7,4621742.93 354558.2,4623307.15 354314.21,4623474.1 354337.22,4624425.76 353326.7,4624236.92 352845.61,4624877.12 352471.61,4624968.89 352961.15,4625883.23 352261.51,4626855.28 352666.64,4627584.13 353209.88,4627811.54 354169.1,4628534.86 354419.16,4628872.38 353889.89,4628990.01 352757.44,4628906.53 351894.94,4628538.73 351744.97,4628238.66 350722.06,4627648.38 350329.89,4627460.59 349178.88,4627647.34 348757.63,4627157.33 348252.47,4625742.69 347785.49,4625926.53 347686.36,4626625.67 348459.89,4627918.92 348015.59,4627945.09 349109.53,4629125.95 349765.54,4629671.09 350839.58,4631011.39 351697.4,4630680.65 352636.11,4631435.73 353413.39,4632667.58 353784.07,4633170.19 353688.89,4633658.62 355472.69,4635609.1 355617.18,4635454.42 356112.08,4634897.87 357224.77,4634865.56 357761.08,4634141.39 358612.88,4633604.85 359325.34,4632883.37 360158.84,4632251.82 359313.89,4631514.43 358322.14,4630867.14 357591.08,4630799.32 356121.49,4630907.79 356241.81,4630361.09 355902.4,4630349.68 355509.81,4629977.19 355991.79,4629235.74 356194.6,4628054.37 356355.97,4627690.03 356456.28,4627315.87 356850.99,4626747 357047.26,4626186.31 356978.57,4625668.71 357179.2,4625627.26 357419.08,4625646.9 358397.13,4625895.61 358754.23,4625825.79 359395.36,4625417.82 359937.51,4625126.41 359652.24,4623739.64 361698.88,4624176.81 361515.37,4623486.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">358393.81,4640120.25 358355.95,4641179.22 358859.66,4641992.96 358734.44,4642618.57 359850.74,4642863.39 360167.2,4642202.38 360523.69,4641330.02 360635.75,4640326.68 360582.38,4639648.82 360609.67,4639541.94 360257.03,4639362.56 359300.33,4639974.41 358793.16,4640110.75 358393.81,4640120.25</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[88537668.7348]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[386]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[394]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25907]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrefeta i Florejacs]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torrefeta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrefeta i Florejacs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torrefeta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="386">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">475362.09,4633356.13 475350.8,4633813.4 475664.97,4634831.89 476748.47,4635067.67 477266.49,4635537.72 477998.03,4635502.88 478177.26,4635213.06 478978.74,4634330.12 479350.44,4634167.95 479522.78,4633911.61 479507.73,4633445.86 480492.85,4633295.05 479930.78,4631717.34 480084.98,4629976.98 480453.32,4629475.76 480847.87,4629600.42 481322.96,4629180.22 481747.13,4629090.67 482237.84,4628555.39 481637.12,4627999.3 480088.34,4627354.87 479717.77,4626659.92 479102.36,4627312.26 478674.79,4627025.62 478671.93,4626748.48 478304.08,4626844.53 478080.58,4626620.47 477724.86,4627117.24 477453.79,4627272.96 477216.65,4627132.96 476978.08,4627118.67 476888.08,4626821.53 476676.8,4626896.34 476386.24,4627167.73 475368.64,4627195.15 475682.88,4627604.75 476461.29,4628186.41 477331.54,4629093.91 477916.8,4630024.48 478059.66,4631029.82 477950.73,4631135.17 477890.65,4631402.79 476682.59,4631921.13 476213.32,4632748.05 475362.09,4633356.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29893698.08435]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[387]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[395]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17193]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sils]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sils]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sils]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sils]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="387">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">419870.72,4627226.56 419952.28,4627820.26 419388.74,4628482.66 420000,4628916.06 419758.1,4629674.59 420695.94,4630046.21 421102.78,4631099.75 421351.64,4632064.57 421750.52,4632693.21 422578.08,4634242 423934.83,4635299.19 424483.29,4635212.01 425464.03,4635216.3 426230.72,4634772.9 426280.85,4634324.74 427114.88,4634114.56 427592.93,4634267.58 427958.18,4634885.69 428209.67,4634962.34 428331.89,4634894.27 428810.79,4634791.33 429199.86,4634103.37 429879.8,4634095.16 430096.65,4632455.08 429703.39,4631365.7 429541.41,4631081.61 429863.37,4630809.53 430008,4631091 430992.48,4629533.27 430728,4628723 430868.34,4628455.39 431304.57,4628494.42 431206.89,4628269.42 430412.59,4627569.63 430327.33,4627422.33 429870.43,4627572.73 429573.22,4627569.55 429530.1,4627971.78 429134.61,4627519.86 428420.87,4627106.24 427610.35,4626032.09 427315.15,4626264.85 425474.45,4625696.51 425148.78,4625912.47 424953.33,4625479.46 424568.06,4625478.04 424488.27,4625707.25 423996.73,4626354.5 423803.91,4627102.82 423504.68,4627271.55 423270.99,4626965.06 422763.5,4627110.09 422100.75,4627353 421109.41,4627165.21 420402.58,4626478.92 419870.72,4627226.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[75289203.1092]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[388]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[396]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08138]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Moia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Moia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Moi…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Moi…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="388">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">495903.88,4624313.61 495225.98,4623467.56 494158.66,4623064.93 493134.81,4624304.16 492329.26,4624704.78 489459.09,4624875.12 488571.17,4626135.91 487953.45,4627078.87 487954.26,4627845.71 488383.67,4628094.44 488504.32,4628498.7 489465.93,4628700.61 489510.16,4629397.61 488877.68,4629406.72 488991.41,4629054.43 487951.18,4628983.96 487549.34,4629878.29 488226.82,4630941.59 488566.71,4633195.57 489486.85,4633173.84 490552.91,4634370.72 491647.88,4634390.79 492699.41,4634906.91 492931.69,4634528 493441.84,4634528.8 494878.4,4634831.17 495341.33,4635022.79 496431.5,4634072.43 497051.26,4632872.84 497618.1,4631070.45 497264.56,4630611.41 496069.07,4630647.23 495120.01,4630822.29 494300.09,4630641.56 494730.14,4629220.74 495402.54,4626637.1 496373.76,4626328.74 496773.01,4624958.02 495903.88,4624313.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[76326220.90955]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[389]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[397]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17089]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[20]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llagostera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llagostera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llagostera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llagostera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="389">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433371.92,4632075.3 432598.22,4629305.33 431856.54,4628139.04 431626.31,4627846.89 431206.89,4628269.42 431304.57,4628494.42 430868.34,4628455.39 430728,4628723 430992.48,4629533.27 430008,4631091 429863.37,4630809.53 429541.41,4631081.61 429703.39,4631365.7 430096.65,4632455.08 429879.8,4634095.16 430324.19,4634367.25 430845.62,4634254.15 431977.76,4633929.15 432419.2,4634596.89 432518.03,4634921.7 432831.09,4633207.7 432847.87,4632502.18 433371.92,4632075.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15287313.56275]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[390]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[398]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08070]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Collsuspina]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Collsuspina]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Collsuspina]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Collsuspina]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="390">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">332837.99,4626870.47 333301.89,4627629.11 334405.89,4629225.43 334878.73,4630999.21 334972.52,4631128.38 335492.2,4632826.12 335748.84,4632801.97 336035.61,4632742.04 336082.31,4632170.3 336410.22,4631821.02 337002.97,4632511.95 338282.06,4632959.96 338562.49,4633789.27 339564.77,4633563.22 339289.41,4632149 339333.53,4631196.67 339721.52,4631004.32 340276.54,4632170.37 340678.17,4632249.99 340507.66,4631990.28 338581.05,4628384.44 336616.03,4626194.39 335520.94,4627090.37 335106.29,4627078.6 334615.19,4626543.04 334181.3,4626533.25 333802.61,4626481.77 332851.85,4626555.73 332837.99,4626870.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28588151.27865]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[391]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[399]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25177]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Preixens]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Preixens]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Preixens]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Preixens]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="391">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">330548.49,4626328.67 330595.74,4626490.2 330197.45,4626793.666 330251.75,4627038.74 330262.31,4627323.21 329609.95,4627309.291 329238.1,4627163.96 328602.52,4626381.08 327464.29,4626925.66 327607.49,4627632.3 327534.92,4627695.9 327975.39,4629223.68 328308.07,4630015.65 328640.24,4630100.64 328919.42,4629914.7 328976.39,4629575.58 329371.57,4629562.52 329678.05,4629891.86 330693.66,4630179.1 330960.4,4631276.98 331220.88,4631519.18 331653.21,4632172.69 332307.62,4633059.39 332929.7,4632529.62 333411.56,4632243.87 334108.59,4632748.23 334557,4633555 334587.03,4632118.44 334804.62,4632138.35 334972.52,4631128.38 334878.73,4630999.21 334405.89,4629225.43 333301.89,4627629.11 332837.99,4626870.47 332155.25,4627068.65 331890.26,4627098.4 331711.74,4626081.55 330548.49,4626328.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29030163.13646]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[392]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[400]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25138]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montgai]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montgai]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montgai]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montgai]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="392">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">475368.64,4627195.15 474428.32,4626992.15 473534.14,4625980.59 473382.16,4626711.35 473016.12,4627083.38 473028.59,4627598.9 472415.85,4627859.37 471243.76,4628109.16 470617.74,4627756.54 469855.29,4628050.07 469307.36,4627976.78 468969.21,4627999.48 468396.23,4628807.81 467551.19,4631044.09 468070.78,4631523.34 468453.34,4631827.5 468837.59,4631864.95 468914.88,4632812 469126.26,4633434.35 470173.79,4633526.55 470493.56,4633298.04 471097.8,4633142.06 470948.9,4632977.63 472230.07,4632730.27 473128.26,4632257.08 475362.09,4633356.13 476213.32,4632748.05 476682.59,4631921.13 477890.65,4631402.79 477950.73,4631135.17 478059.66,4631029.82 477916.8,4630024.48 477331.54,4629093.91 476461.29,4628186.41 475682.88,4627604.75 475368.64,4627195.15</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47893191.2856]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[393]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[401]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17148]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riudarenes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riudarenes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riudarenes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riudarenes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="393">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">321701.93,4627582.16 322317.48,4628906.27 322021.42,4628941.13 322213.96,4629218.98 319846.4,4629656.68 319875.31,4629978.49 321084.54,4630283.35 321112.26,4630516.37 320048.96,4630259.5 319589.29,4630410.89 320072.19,4631827.65 320121.41,4632304.27 320957.1,4632335.79 321692.56,4632045.78 321862.47,4632355.3 323114.97,4631943.8 323237.91,4632233.51 324239.62,4631933.86 324693.1,4632826.65 325326.1,4633419.19 326686.31,4633033.28 327942.33,4633323.92 326863.71,4631234.91 326376.77,4630195.39 326281.18,4629631.25 326809.3,4629474.26 326451.27,4628200.88 325457.46,4628424.97 324583.03,4628692.96 323994.78,4626565.62 323665.54,4626545.44 321701.93,4627582.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29641006.39085]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[394]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[402]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25035]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sentiu de Sio, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sentiu de Sio, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sentiu de Si¢, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sentiu de Si¢, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="394">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">316603.99,4624995.17 315102.75,4624501.07 314772.79,4623945.26 314851.22,4623448.27 314847.35,4622564.19 314184.62,4622593.87 313860.35,4622731.56 313093.52,4623535.14 312104.17,4624930.82 311812.11,4626661.22 311683.66,4627179.27 311851.57,4628370.31 312270.38,4629185.03 312245,4629465.84 313092.03,4629668.17 314006.78,4630831.54 313866.77,4631345.13 314240.13,4632094.23 314439.21,4633261.55 316335.47,4632068.83 317892.05,4630403.09 318059.68,4631002.63 318189.21,4631877.35 318848.95,4632018.1 319458.34,4632562.63 320121.41,4632304.27 320072.19,4631827.65 319589.29,4630410.89 320048.96,4630259.5 321112.26,4630516.37 321084.54,4630283.35 319875.31,4629978.49 319846.4,4629656.68 319093.57,4629792.62 318882.16,4628089.02 320338.56,4627301.22 320498.44,4626897.95 320142.76,4626928.09 319923.76,4626550.12 319533.21,4626452.83 319152.01,4625902.85 317854.04,4626274.79 316603.99,4624995.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327942.33,4633323.92 328269.44,4632586.86 327911.95,4630515.68 326809.5,4627926.01 326451.27,4628200.88 326809.3,4629474.26 326281.18,4629631.25 326376.77,4630195.39 326863.71,4631234.91 327942.33,4633323.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[56930570.1154]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[395]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[403]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25040]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Balaguer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Balaguer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Balaguer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Balaguer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="395">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">302435.72,4626769.89 301151.52,4626170.36 295255.44,4626549.26 293413.81,4626460.15 292339.66,4626080.5 292170.72,4625689.98 291718.34,4625349.6 291693.29,4624743.88 290686.48,4625158.16 290434.2,4625821.2 289301.71,4626839.27 289794.28,4627255.74 290206.22,4629572.88 290821.86,4630396.06 291410.97,4631289.35 292351.72,4631603.6 292674.58,4632463.21 293881.46,4633168.67 294519.01,4633169.24 296090.69,4632987.66 297545.51,4632105.24 299072.39,4631333.96 299717.36,4631406.8 299826.53,4631113.5 300636.13,4629797.85 301325.84,4629098.08 301884.67,4627782.92 302105.2,4627314.96 302435.72,4626769.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[65266498.88381]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[396]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[404]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25021]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Almenar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Almenar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Almenar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Almenar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="396">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">504485.88,4626662.4 504213.18,4627474.49 503962.68,4627107.22 503596.15,4627524.81 503195.78,4627691.22 503040.85,4627877.55 502592.27,4627636.6 502351.61,4627937.08 502290.58,4628456.03 502052.97,4628591.33 501921.29,4629155.2 501637.09,4630069.1 501406.73,4631242.29 501610.35,4631492.22 502389.14,4631646.47 502844,4633150 504859.65,4632756.6 504804.62,4632447.54 506422.92,4631841.37 506452.22,4631159.79 506800.78,4630568.5 506320.09,4630235.5 505963.159,4629745.971 505683.15,4629094.5 505456.909,4628113.158 505491.284,4628006.908 505406.909,4627906.908 505363.28,4627770 505150.659,4627506.908 505188.159,4627272.533 505000.659,4626950.658 504983.93,4626748 504744.409,4626506.908 504763.159,4626341.283 504681.909,4626335.033 504540.66,4626424.91 504485.88,4626662.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21312291.42932]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[397]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[405]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17048]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castell - Platja d'Aro]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castell d'Aro]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castell - Platja d'Aro]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castell d'Aro]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="397">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433371.92,4632075.3 434012.43,4632305.76 434959.84,4632059.69 435888.92,4632130.9 435983.06,4632911.8 436415.34,4632919.67 436527.38,4632823.03 436720.54,4632208.38 437381.15,4631902.99 437063.89,4630644.67 437197.65,4630393.3 436518.85,4628916.09 436390.48,4628891.01 434345.18,4629104.66 433815.83,4628024.98 433462.12,4628197.47 433256.77,4627948.97 433469.8,4626889.89 432840.58,4626722.96 432476.9,4626586.67 432262.2,4627389.29 431626.31,4627846.89 431856.54,4628139.04 432598.22,4629305.33 433371.92,4632075.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16956619.967]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[398]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[406]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08017]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Balenya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Hostalets de Balenya, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Baleny…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Hostalets de Baleny…, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="398">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365129.68,4630879.56 364744.9,4629779.31 364325.08,4629139.08 364380.81,4628786.9 363861.07,4627941.09 363740.23,4627819.33 363098.13,4626651.74 361979.51,4624793.29 361913.03,4625071.25 360894.13,4626489.3 360188.81,4627688.82 359363.23,4628387.74 358484.4,4629961.77 358322.14,4630867.14 359313.89,4631514.43 360158.84,4632251.82 360251.48,4632166.66 360597.77,4632505.97 361177.02,4631952.61 361865.3,4631446.36 362534.1,4631396.74 363005.89,4631255.65 363471.1,4630927.72 364693.42,4630781.53 365129.68,4630879.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26414057.7097]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[399]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[407]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25132]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Massoteres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Massoteres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Massoteres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Massoteres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="399">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440993.86,4626855.22 439479.34,4627527.35 439240.28,4627758.45 439213.5,4628477.03 439419.94,4629410.45 439727.1,4629678.52 439641.29,4630378.98 438540.35,4629915.87 437197.65,4630393.3 437063.89,4630644.67 437381.15,4631902.99 437752.02,4632247.04 437902.68,4632076.95 438524.66,4632165.86 439474.91,4631180.89 440204.47,4630601.71 441922.57,4630963.97 443395.47,4631493.3 444074.23,4631546.79 445108.44,4630503.54 445726.09,4630980.35 445609.8,4630400.16 445992.28,4629772.17 446245.55,4629076.99 447789.1,4628450.26 448800,4628925 447811,4627497 447222.93,4627050.1 447418.8,4626263.32 447264.97,4625612.05 447330.07,4624640.15 445878.65,4624001.59 444825.25,4623941.03 444179,4626463 443551,4626990 442162,4627827 441232.96,4627259.31 440993.86,4626855.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[40765086.4589]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[400]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[408]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08026]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Brull, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Brull, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Brull, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Brull, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="400">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">398132,4626688 397701.77,4626994.98 397176.94,4627987.61 396275.09,4628848.5 396667.14,4629383.58 396791.49,4629376.19 397403.16,4628779.78 397784.14,4629060.86 398634.28,4629874.44 399567.84,4630251.38 399913.99,4632111.75 400099,4631403 400462,4630942 400781.23,4629972.68 400797,4628912 400645.18,4628138.34 400517.73,4627594.7 400131,4626371 399694,4626201 399458,4626281 398838.46,4625977.69 398836.88,4626511.94 398149,4626901 398132,4626688</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12503132.8786]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[401]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[409]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08038]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Callus]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Callus]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Call£s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Call£s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="401">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">468472.81,4620190.21 466662.67,4619858.86 464783.17,4619486.72 464533.99,4619656 464263.5,4620208.78 464319.8,4621151.97 464181.33,4621831.87 463923.77,4622667.96 463527.32,4623237.76 463708.04,4624123.22 462456.52,4624360.31 461956.56,4624722.38 461445.98,4625570.2 461370.62,4626020.16 462037.17,4626479.49 462659.36,4627165.05 463139.19,4628381.62 463228.08,4630069.2 463350.68,4630912.99 463242.54,4631679.72 465199.03,4631612.24 465418.08,4631642.18 466052.62,4631561.34 466747.56,4631226.15 467551.19,4631044.09 468396.23,4628807.81 468969.21,4627999.48 468198.06,4626047.3 468630.82,4625610.52 468307.94,4624652.92 468779.67,4623968.12 469115.05,4623158.14 469616.39,4622595.1 468939.56,4621695.64 468035.53,4621149.87 468472.81,4620190.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[62262234.32885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[402]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[410]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17159]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Feliu de Buixalleu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Feliu de Buixalleu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Feliu de Buixalleu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Feliu de Buixalleu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="402">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360894.13,4626489.3 360155.36,4625507.64 359937.51,4625126.41 359395.36,4625417.82 358754.23,4625825.79 358397.13,4625895.61 357419.08,4625646.9 357179.2,4625627.26 356978.57,4625668.71 357047.26,4626186.31 356850.99,4626747 356456.28,4627315.87 356355.97,4627690.03 356194.6,4628054.37 355991.79,4629235.74 355509.81,4629977.19 355902.4,4630349.68 356241.81,4630361.09 356121.49,4630907.79 357591.08,4630799.32 358322.14,4630867.14 358484.4,4629961.77 359363.23,4628387.74 360188.81,4627688.82 360894.13,4626489.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">353209.88,4627811.54 352757.44,4628906.53 353889.89,4628990.01 354419.16,4628872.38 354169.1,4628534.86 353209.88,4627811.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[18227648.46775]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[403]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[411]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25110]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Guissona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guissona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Guissona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Guissona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="403">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437381.15,4631902.99 436720.54,4632208.38 436527.38,4632823.03 436415.34,4632919.67 436576.52,4633358.9 437099.9,4633580.1 438165.38,4633190.27 438874.32,4634385.76 438621.59,4634399.55 438629.45,4634745.18 438758.94,4634830.541 438768.315,4634993.041 438812.065,4635196.166 439130.815,4634996.166 439197.78,4634742.2 439515.85,4634307.48 440293.72,4633641.72 440628.67,4633668.18 441940.4,4633568.36 442785.37,4634204.97 443373.83,4634472.62 444130.05,4634168.12 444900.05,4632739.58 445886.02,4631584.66 445726.09,4630980.35 445108.44,4630503.54 444074.23,4631546.79 443395.47,4631493.3 441922.57,4630963.97 440204.47,4630601.71 439474.91,4631180.89 438524.66,4632165.86 437902.68,4632076.95 437752.02,4632247.04 437381.15,4631902.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437487.46,4625882.5 436471.42,4627612.31 436324.83,4628388.22 436390.48,4628891.01 436518.85,4628916.09 437197.65,4630393.3 438540.35,4629915.87 439641.29,4630378.98 439727.1,4629678.52 439419.94,4629410.45 439213.5,4628477.03 438925.41,4627711.88 438161.98,4626826.39 437487.46,4625882.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[31002183.52014]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[404]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[412]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08269]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Seva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Seva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Seva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Seva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="404">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">383194.48,4629981.33 382934.14,4629064.86 383283.71,4628662.1 383337.31,4628307.7 383551.71,4628328.69 383503.49,4628074.41 383787.09,4627485.28 383141.55,4626574.23 383272.05,4626217.51 382237.21,4625991.81 381630.49,4626737.83 381383.02,4626469.21 380800.14,4626215.67 380484.55,4626275.19 380519.27,4625598.66 379569.5,4625504.08 379105.05,4624034.79 378183.86,4624017.19 378304.91,4623592.641 377976.21,4623576.2 377806.4,4624091.78 378106.54,4624739.11 377686.34,4624821.33 377236.99,4625092.18 377030.64,4625600.25 376289.41,4625616.05 376276.14,4625921.16 375851.59,4627520.34 378290.01,4628068.57 383194.48,4629981.33</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">374091.83,4627872.76 374253.51,4627623.94 374116.82,4627331.58 374255.33,4626296.73 373945.64,4625931.12 373947.31,4625730.52 373586.16,4625952.016 373229.32,4625896.1 373031.473,4625741.078 372644.84,4625739.29 372178.28,4626230.96 372891.23,4626571.89 373048.92,4626990.94 372950.49,4627734.44 373100.81,4628978.93 373538.9,4629278.9 374091.83,4627872.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[27103160.5962]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[405]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[413]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25136]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[35]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Molsosa, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Molsosa, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Molsosa, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Molsosa, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="405">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">413512.31,4629680.44 414180.48,4629916.83 414800.25,4629623.8 415593.74,4629767.62 416079.03,4628957.51 416616.49,4628840.88 417552.71,4629183 417925.76,4628752.36 418585.45,4628472.08 415230.07,4627316.3 413982.6,4626789.48 412479.95,4626260.06 410779.76,4625931.26 408999.39,4625469.92 409143.09,4626032.27 410308.67,4627006.69 410563.9,4627686.21 411591.05,4628240.19 411445.95,4628850.08 411781.94,4629257.01 412605.9,4629429.02 413512.31,4629680.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18123375.37301]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[406]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[414]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08010]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Artes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Artes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Art‚s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Art‚s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="406">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">319572.87,4620303.13 319734.53,4621381.35 319022.11,4622438.53 317103.89,4624036.88 316603.99,4624995.17 317854.04,4626274.79 319152.01,4625902.85 319533.21,4626452.83 319923.76,4626550.12 320142.76,4626928.09 320498.44,4626897.95 320338.56,4627301.22 318882.16,4628089.02 319093.57,4629792.62 319846.4,4629656.68 322213.96,4629218.98 322021.42,4628941.13 322317.48,4628906.27 321701.93,4627582.16 321616.53,4627344.29 321001.67,4626909.99 320993.93,4626119.99 320459.88,4625279.65 320475.36,4624737.49 321285.92,4623943.63 322453.43,4623415.99 321526.83,4621885.82 322513.7,4621551.96 321796.7,4620132.45 320461.29,4619812.96 320255.43,4620350.01 319572.87,4620303.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27326708.07725]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[407]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[415]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25240]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallfogona de Balaguer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallfogona de Balaguer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallfogona de Balaguer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallfogona de Balaguer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="407">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309853.4,4626684.95 309484.49,4624857.75 308843.19,4622079.58 307946.74,4622432.62 306459.64,4621348.79 305837.1,4622106.1 305976.64,4622701.34 304560.82,4624222.35 303588.37,4625472.67 302936.71,4626165.17 302435.72,4626769.89 302105.2,4627314.96 301884.67,4627782.92 303101.44,4628457.56 306264.13,4629507.97 306621.73,4629736.66 307753.68,4628411.02 309000.49,4627511.57 309337.23,4627351.96 309372.68,4627074.11 309741.43,4627101.31 309853.4,4626684.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37504586.01554]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[408]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[416]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25008]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albesa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albesa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albesa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albesa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="408">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">400517.73,4627594.7 400645.18,4628138.34 403005.26,4628176.84 404318.71,4629450.81 404697,4628458.39 405782.47,4627797.93 405599.17,4627362.4 405813.31,4626650.51 405098.48,4624628.46 404400.35,4624857.9 403394.01,4624392.35 402691.73,4624446.66 402645.95,4624874.33 402107.24,4624486.9 401024.52,4624922.71 401018.84,4625335.08 401536.22,4626051.99 401389.56,4627368.53 400517.73,4627594.7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16633019.1863]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[409]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[417]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08192]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santpedor]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santpedor]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santpedor]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santpedor]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="409">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">367341.42,4622932.1 367205.06,4622771.89 366483.44,4623236.9 365442.92,4623445.21 363895.48,4624227.4 364937.51,4626668.21 366571.4,4628840.49 367299.4,4629408.02 367482.27,4629213.49 367303.7,4627451.03 367840.76,4626986.99 368106.6,4626422.7 368295.36,4626306.46 367984.12,4626045.98 368049.6,4625218 367341.42,4622932.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15655401.698]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[410]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[418]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25114]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ivorra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ivorra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ivorra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ivorra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="410">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437487.46,4625882.5 437579.47,4624793.5 437625.76,4624121.371 437189.18,4623901.6 436203.96,4623720.66 436174,4623446 435654.08,4623477 435103.96,4624534.94 435412.53,4625680.66 434136.82,4625996.37 433267.53,4625862.79 432578.25,4626038.85 432470.39,4626096.71 432476.9,4626586.67 432840.58,4626722.96 433469.8,4626889.89 433256.77,4627948.97 433462.12,4628197.47 433815.83,4628024.98 434345.18,4629104.66 436390.48,4628891.01 436324.83,4628388.22 436471.42,4627612.31 437487.46,4625882.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15386412.95775]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[411]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[419]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08067]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Centelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Centelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Centelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Centelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="411">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">370029,4621698.59 369122.8,4621487.77 368747.93,4621999.3 367910.47,4622432.21 367341.42,4622932.1 368049.6,4625218 367984.12,4626045.98 368295.36,4626306.46 368850.51,4627900.36 368627.93,4628243.76 369270.14,4629074.9 370784.54,4628997.9 372009.39,4628728.25 373100.81,4628978.93 372950.49,4627734.44 373048.92,4626990.94 372891.23,4626571.89 372178.28,4626230.96 372144.1,4625842.13 371837.24,4625531.16 371936.12,4625308.58 371605.42,4625128.07 370920.44,4624072.34 371237.46,4623593.74 370727.95,4622936.75 370063.71,4622184.4 370029,4621698.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26198042.17585]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[412]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[420]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08060]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellfollit de Riubregos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellfollit de Riubregos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellfollit de Riubreg¢s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellfollit de Riubreg¢s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="412">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">450135.14,4622621.84 449436,4622388 449214.68,4622605.01 449414.41,4623072.28 449115.08,4623128.67 448434.61,4623423.99 448074,4623485.38 447734.26,4623135.99 447379.62,4622946.7 446970,4622606 446597,4622521 446222.62,4621957.5 445694.26,4622318.85 445571.4,4622753.14 444825.25,4623941.03 445878.65,4624001.59 447330.07,4624640.15 447264.97,4625612.05 447418.8,4626263.32 447222.93,4627050.1 447811,4627497 448800,4628925 449065.37,4628730.29 449513,4628547 451143.65,4628129.72 451730.55,4628458.55 452778.43,4628428.67 453847.56,4627719.38 453880.41,4626733.67 453023.03,4625918.51 452410,4625969 451764,4626746 451118.53,4626401.35 450621.29,4625671.3 450850.88,4624423.71 450304.61,4623764.31 450212.2,4623328.89 450135.14,4622621.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27252669.2454]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[413]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[421]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08137]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montseny]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montseny]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montseny]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montseny]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="413">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">335308.08,4618110.07 339473.47,4621103.98 341048.89,4623139.87 341341.69,4624550.42 341864.26,4624503.68 343649.38,4628520.02 343878.79,4628311.21 345459.52,4628907.99 345499.41,4627909.59 346170.68,4627755.95 347465.62,4627358.18 345996.19,4626205.78 345326.84,4625365.81 344811.5,4625450.69 343750.49,4625132.23 343019.54,4623629.47 342712.17,4623218.7 342395.42,4622633.8 341860.28,4621905.31 340417.18,4620863.97 336001.1,4617722.83 335308.08,4618110.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21671737.7586]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[414]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[422]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25181]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Puigverd d'Agramunt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Puigverd d'Agramunt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Puigverd d'Agramunt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Puigverd d'Agramunt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="414">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">353668.04,4618262 353351.23,4617347.37 352744.38,4616684.99 351628.69,4616538.85 350897.06,4615678.9 350179.93,4615854.89 349822.43,4615269.64 349386.03,4615393.28 349192.94,4615510.91 349144.96,4615700.89 349132.73,4616669.96 349463.81,4616734.84 349804.14,4617214.02 350348.44,4619182.57 350959.4,4620083.44 349925.42,4620516.07 348577.4,4619369.94 347838.81,4619262.57 346792.69,4619691.86 348622.85,4623364.95 348725.44,4624158.01 348014.55,4624614.26 347554.18,4624781.31 347823.35,4624974.16 348335.45,4625214.35 348252.47,4625742.69 348757.63,4627157.33 349178.88,4627647.34 350329.89,4627460.59 350722.06,4627648.38 351744.97,4628238.66 351894.94,4628538.73 352757.44,4628906.53 353209.88,4627811.54 352666.64,4627584.13 352261.51,4626855.28 352961.15,4625883.23 352471.61,4624968.89 352845.61,4624877.12 353326.7,4624236.92 354337.22,4624425.76 354314.21,4623474.1 354558.2,4623307.15 354180.7,4621742.93 353409.57,4620793 353011.35,4620084.87 353614.44,4619615.67 353446.4,4618805.63 353668.04,4618262</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[55964499.4699]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[415]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[423]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25911]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Plans de Sio, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pallargues, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Plans de Si¢, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pallargues, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="415">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">398656.9,4621970.58 397982.25,4622274.75 397770.04,4622236.57 396999.14,4622182.72 396235.77,4621801.44 394259.07,4621235.27 393872.43,4621689.77 393327.89,4621935.24 392632.98,4622011.26 392186.59,4622961.47 391646.8,4623223.57 391446.17,4622986.73 390949.51,4623031.94 390294.57,4622899.31 389501.91,4623525.64 387844.75,4623303.17 387489.09,4623297.94 386429.03,4624441.8 386143.23,4624877.07 386853.21,4625342.96 387305.37,4625337.35 387360.05,4625740.61 388881.93,4626270.82 389490.01,4626739 389489.33,4627441.33 388890.93,4627693.62 388703.93,4628234.91 388895.13,4628570.81 389544.66,4628349.32 389760,4628083 390557,4627657 391063.3,4628064.23 390905.94,4628675.17 391209.67,4628821.62 392010,4627942 392060.01,4627347.37 392206.31,4627518.88 393375.16,4626418.94 395061.69,4626265.9 397174.89,4626814.28 397879.77,4626666.37 397590.2,4625995.39 397869.56,4626004.82 397698.42,4624889.2 398290.62,4624564.01 399137.66,4623776.32 399442.99,4623714.73 399454.69,4623173.99 398656.9,4621970.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[51136157.63814]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[416]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[424]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08084]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fonollosa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fonollosa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fonollosa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fonollosa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="416">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323348.71,4623236.68 322453.43,4623415.99 321285.92,4623943.63 320475.36,4624737.49 320459.88,4625279.65 320993.93,4626119.99 321001.67,4626909.99 321616.53,4627344.29 321701.93,4627582.16 323665.54,4626545.44 323994.78,4626565.62 324583.03,4628692.96 325457.46,4628424.97 326451.27,4628200.88 326809.5,4627926.01 327534.92,4627695.9 327607.49,4627632.3 327464.29,4626925.66 328602.52,4626381.08 327877.51,4624525.06 327655.9,4624136.01 327979.64,4623984.05 327497,4622952.62 326577.53,4622953.68 324921.22,4622991.88 324835.36,4623313.11 323348.71,4623236.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31096871.91235]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[417]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[425]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25047]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellcaire d'Urgell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellcaire d'Urgell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellcaire d'Urgell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellcaire d'Urgell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="417">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">489236.36,4621938.97 487426.52,4623552.44 486800.72,4623023.84 484214.61,4621597.67 482634.1,4621073.18 482601.56,4621389.63 481837.19,4622079.81 481686.21,4622640.5 481141.13,4623658.73 480241.12,4624191.94 479599.11,4625712.02 479717.77,4626659.92 480088.34,4627354.87 481637.12,4627999.3 482237.84,4628555.39 483880.34,4628371.83 484796.72,4628161.5 485291.68,4628261.71 486289.32,4627734.15 486380.02,4626953.75 489349.25,4624751.11 490394.78,4623588.21 490577.31,4622932.81 489236.36,4621938.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[48180391.00889]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[418]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[426]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17213]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vidreres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vidreres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vidreres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vidreres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="418">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">415206.15,4623120.71 413795.13,4622701.87 411748.11,4622220.71 411030.15,4622220.18 410584.34,4622834.08 410248.74,4623604.42 409972.34,4623860.5 410161.06,4624069.03 410096.82,4625097.42 409761.21,4625132.25 409671.79,4625497.87 408999.39,4625469.92 410779.76,4625931.26 412479.95,4626260.06 413982.6,4626789.48 415230.07,4627316.3 418585.45,4628472.08 419388.74,4628482.66 419952.28,4627820.26 419870.72,4627226.56 419367.73,4627167.73 419026.9,4625894.47 418606.91,4625887.22 418427.76,4626182.57 417583.85,4625932.52 417777.48,4625780.29 417425.05,4625696 416875.66,4625303.89 417040.35,4623984.76 416147.5,4624020.57 416072.46,4623398.44 415206.15,4623120.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32654681.99845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[419]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[427]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08034]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Calders]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Calders]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Calders]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Calders]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="419">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440993.86,4626855.22 440668.57,4626206.88 439813.01,4625135.23 439424.48,4624747.48 439070.53,4624275.5 437766.14,4623912.94 437819.47,4624109.42 437797.635,4624379.183 437579.47,4624793.5 437487.46,4625882.5 438161.98,4626826.39 438925.41,4627711.88 439213.5,4628477.03 439240.28,4627758.45 439479.34,4627527.35 440993.86,4626855.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7899391.19424]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[420]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[428]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08014]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aiguafreda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Aiguafreda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aiguafreda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aiguafreda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="420">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428721.27,4620471.18 428435.85,4621171.23 428333.72,4621828.48 428762.55,4623259.85 427721.77,4624333.22 427582.62,4625245.25 427142.21,4625513.61 427610.35,4626032.09 428420.87,4627106.24 429134.61,4627519.86 429530.1,4627971.78 429573.22,4627569.55 429870.43,4627572.73 430327.33,4627422.33 430412.59,4627569.63 431206.89,4628269.42 431626.31,4627846.89 432262.2,4627389.29 432476.9,4626586.67 432470.39,4626096.71 432749.17,4625256.05 432641.52,4623317.2 431782.02,4623822.92 430379.31,4621679.31 429860.22,4620455.19 428721.27,4620471.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">420402.58,4626478.92 421109.41,4627165.21 422100.75,4627353 422763.5,4627110.09 423270.99,4626965.06 423504.68,4627271.55 423803.91,4627102.82 423996.73,4626354.5 424488.27,4625707.25 423718.56,4625399.95 423315.45,4624770.29 422509.23,4624702.24 422265.54,4624179.71 421422.33,4623857.68 420491.21,4624511.74 420684.78,4624942.05 420402.58,4626478.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[35013613.2261]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[421]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[429]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08055]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellcir]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellcir]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellcir]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellcir]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="421">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">469616.39,4622595.1 469115.05,4623158.14 468779.67,4623968.12 468307.94,4624652.92 468630.82,4625610.52 468198.06,4626047.3 468969.21,4627999.48 469307.36,4627976.78 469855.29,4628050.07 470617.74,4627756.54 471243.76,4628109.16 472415.85,4627859.37 473028.59,4627598.9 473016.12,4627083.38 473382.16,4626711.35 473534.14,4625980.59 473339.11,4625663.62 472908.14,4624443.58 473114.51,4622563.42 472618.88,4621834.19 471619.54,4621953.43 471380.7,4621515.86 470737.55,4621595.72 470752.86,4621685.05 469616.39,4622595.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26061066.82395]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[422]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[430]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17101]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Massanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Massanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Massanes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Massanes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="422">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348252.47,4625742.69 348335.45,4625214.35 347823.35,4624974.16 347554.18,4624781.31 348014.55,4624614.26 348725.44,4624158.01 348622.85,4623364.95 346792.69,4619691.86 346085.23,4619960.59 345300.74,4619471.45 345019.03,4620567.99 344154.33,4620932.32 344452.07,4622427.3 343364.41,4623019.88 342395.42,4622633.8 342712.17,4623218.7 343019.54,4623629.47 343750.49,4625132.23 344811.5,4625450.69 345326.84,4625365.81 345996.19,4626205.78 347465.62,4627358.18 348015.59,4627945.09 348459.89,4627918.92 347686.36,4626625.67 347785.49,4625926.53 348252.47,4625742.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25995789.98475]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[423]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[431]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25157]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Osso de Sio]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Osso de Sio]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Oss¢ de Si¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Oss¢ de Si¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="423">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">364937.51,4626668.21 363895.48,4624227.4 363823.55,4623335.55 362339.07,4623237.36 361515.37,4623486.74 361698.88,4624176.81 359652.24,4623739.64 359937.51,4625126.41 360155.36,4625507.64 360894.13,4626489.3 361913.03,4625071.25 361979.51,4624793.29 363098.13,4626651.74 363740.23,4627819.33 363861.07,4627941.09 364242.93,4627568.87 364937.51,4626668.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11982378.00415]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[424]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[432]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25197]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Guim de la Plana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Guim de la Plana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Guim de la Plana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Guim de la Plana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="424">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">498787.25,4623390.5 498661.85,4624962.99 498097.74,4625664.21 498754.39,4626616.5 498598.43,4626895.92 502351.61,4627937.08 502592.27,4627636.6 503040.85,4627877.55 503195.78,4627691.22 503596.15,4627524.81 503962.68,4627107.22 504213.18,4627474.49 504485.88,4626662.4 504147.534,4626581.908 503960.034,4626456.908 503928.94,4626384.72 504134.68,4626060 504160.15,4625794 503850.659,4625738.158 503741.21,4625587 503719.409,4625441.283 503241.284,4625360.033 503169.37,4625564.5 503047.65,4625581.5 503000.659,4625516.283 502925.659,4625566.283 502619.409,4625525.658 502510.034,4625422.533 502672.534,4624875.658 502669.409,4624763.158 502725.659,4624672.533 502600.659,4624660.033 502569.409,4624588.158 502369.81,4624664.85 502275.659,4624813.158 502144.62,4624831.5 501527.5,4624791.5 500841.284,4624575.658 500213.159,4624113.158 500185.034,4623994.408 499875.659,4623891.283 499891.28,4623775.5 499853.784,4623700.658 499656.909,4623678.783 499519.409,4623566.283 498787.25,4623390.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16211210.24108]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[425]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[433]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17160]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[10]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Feliu de Guixols]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Feliu de Guixols]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Feliu de Gu¡xols]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Feliu de Gu¡xols]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="425">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">370029,4621698.59 370063.71,4622184.4 370727.95,4622936.75 371237.46,4623593.74 370920.44,4624072.34 371605.42,4625128.07 371936.12,4625308.58 371837.24,4625531.16 372144.1,4625842.13 372178.28,4626230.96 372644.84,4625739.29 373031.473,4625741.078 373229.32,4625896.1 373586.16,4625952.016 373947.31,4625730.52 373945.64,4625931.12 374255.33,4626296.73 374116.82,4627331.58 374253.51,4627623.94 374091.83,4627872.76 375851.59,4627520.34 376276.14,4625921.16 376289.41,4625616.05 377030.64,4625600.25 377236.99,4625092.18 377686.34,4624821.33 378106.54,4624739.11 377806.4,4624091.78 377976.21,4623576.2 377341.51,4621782.44 376611.65,4621904.68 375866.07,4621605.36 375479.73,4621286.63 375523.66,4620737.172 375289.02,4620454.6 374953.348,4620002.797 374773.74,4620062.91 371414.285,4618940.297 371334.1,4618812.27 370778.49,4619055.22 370709.94,4619334.57 370796.87,4619757.74 371850.38,4620050.69 373214.45,4621199 373218.973,4621526.234 373625.26,4621649.31 373729.25,4621997.94 373317.86,4621973.97 373336.16,4621854.359 372937.723,4621573.109 372382.32,4621991.1 370658.7,4621386.51 370029,4621698.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37437282.94639]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[426]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[434]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08036]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Calonge de Segarra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Calonge de Segarra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Calonge de Segarra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Calonge de Segarra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="426">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438243.8,4620123.19 438827,4620596 438547.19,4620887.67 438198.92,4620993.92 438597.36,4621773.1 438403.56,4622176.47 437705.06,4622564.07 437766.14,4623912.94 439070.53,4624275.5 439424.48,4624747.48 439813.01,4625135.23 440668.57,4626206.88 440993.86,4626855.22 441232.96,4627259.31 442162,4627827 443551,4626990 444179,4626463 444825.25,4623941.03 445571.4,4622753.14 445694.26,4622318.85 446222.62,4621957.5 445066.17,4620380.63 444609.96,4619355.21 443720.22,4619080.57 441800.47,4620798.55 439643.2,4619815.41 439374.24,4620073.28 438243.8,4620123.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43491116.3272]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[427]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[435]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08276]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tagamanent]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tagamanent]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tagamanent]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tagamanent]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="427">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">402719.92,4623778.87 401913.96,4622967.44 401430.7,4622909.48 401039.6,4622593.3 400745,4621406.59 400391.25,4621388.3 400005.51,4621199.91 398656.9,4621970.58 399454.69,4623173.99 399442.99,4623714.73 399137.66,4623776.32 398290.62,4624564.01 397698.42,4624889.2 397869.56,4626004.82 397590.2,4625995.39 397879.77,4626666.37 398132,4626688 398149,4626901 398836.88,4626511.94 398838.46,4625977.69 399458,4626281 399694,4626201 400131,4626371 400517.73,4627594.7 401389.56,4627368.53 401536.22,4626051.99 401018.84,4625335.08 401024.52,4624922.71 402107.24,4624486.9 402645.95,4624874.33 402691.73,4624446.66 402719.92,4623778.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16366271.07789]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[428]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[436]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08218]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Joan de Vilatorrada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Joan de Vilatorrada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Joan de Vilatorrada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Joan de Vilatorrada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="428">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">462456.52,4624360.31 462004.98,4624146.02 461916.97,4623377.18 462573.08,4622943.46 462893.03,4622461.86 462641.23,4622365.76 463257.07,4621254.42 464263.5,4620208.78 464533.99,4619656 463835.52,4619553.16 462529.16,4618957.92 461400.01,4619452.56 460990.73,4620279.69 461207.16,4620762.53 460712.16,4621376.1 459915.61,4622012.14 459993.48,4622254.54 459779.3,4622706.8 460075.01,4623075.36 459884.73,4623679.43 458300.72,4624091.08 458069.3,4623936.79 457040.82,4624752.83 455933.82,4625443.53 456214,4626720 457399.98,4627442.38 458058.58,4626861.77 459925.45,4627125.24 460418.03,4625936.48 461345.01,4625809.31 461370.62,4626020.16 461445.98,4625570.2 461956.56,4624722.38 462456.52,4624360.31</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27014017.55114]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[429]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[437]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17146]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riells i Viabrea]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Can Salva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riells i Viabrea]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Can Salv…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="429">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327979.64,4623984.05 327655.9,4624136.01 327877.51,4624525.06 328602.52,4626381.08 329238.1,4627163.96 329609.95,4627309.291 330262.31,4627323.21 330251.75,4627038.74 330197.45,4626793.666 330595.74,4626490.2 330548.49,4626328.67 330280.81,4625267.79 329984.95,4624442.103 329611.2,4623790.11 329296.18,4623937.7 329372.45,4624679.603 329386.16,4625170.71 329253.7,4624979.603 329012.5,4624029.3 328703.77,4624014.05 329250.575,4625715.541 329027.12,4625647.15 329106.54,4625946.31 329013.075,4625971.791 328826.25,4625721.94 327979.64,4623984.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5003056.8726]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[430]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[438]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25049]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellmunt d'Urgell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellmunt d'Urgell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellmunt d'Urgell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellmunt d'Urgell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="430">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">479717.77,4626659.92 479599.11,4625712.02 480241.12,4624191.94 481141.13,4623658.73 481686.21,4622640.5 481837.19,4622079.81 482601.56,4621389.63 482634.1,4621073.18 481526.96,4620634.61 478833.97,4620599.94 477162.24,4621629.64 475738.28,4621294.27 474352.23,4621413.84 474269.42,4621936.96 473661.03,4622054.13 473588.15,4621504.92 473783.14,4621600.98 473964.07,4621308.43 473515.94,4621141.42 472618.88,4621834.19 473114.51,4622563.42 472908.14,4624443.58 473339.11,4625663.62 473534.14,4625980.59 474428.32,4626992.15 475368.64,4627195.15 476386.24,4627167.73 476676.8,4626896.34 476888.08,4626821.53 476978.08,4627118.67 477216.65,4627132.96 477453.79,4627272.96 477724.86,4627117.24 478080.58,4626620.47 478304.08,4626844.53 478671.93,4626748.48 478674.79,4627025.62 479102.36,4627312.26 479717.77,4626659.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[44956194.6232]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[431]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[439]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17103]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Macanet de la Selva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Macanet de la Selva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ma‡anet de la Selva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ma‡anet de la Selva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="431">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">415206.15,4623120.71 416072.46,4623398.44 416147.5,4624020.57 417040.35,4623984.76 416875.66,4625303.89 417425.05,4625696 417777.48,4625780.29 417583.85,4625932.52 418427.76,4626182.57 418606.91,4625887.22 419026.9,4625894.47 419367.73,4627167.73 419870.72,4627226.56 420402.58,4626478.92 420684.78,4624942.05 420491.21,4624511.74 421422.33,4623857.68 420608.02,4623431.68 420773.99,4622585.11 420695.23,4622576.87 420103.64,4621950.89 419827.83,4621223.48 419115.78,4620760.36 419124.73,4620162.22 418193.69,4619905.84 417943.39,4620555.72 417260.43,4620336.58 417280.37,4620807.14 417152.49,4621843.41 416693.16,4622110.73 416096.1,4622740.49 415206.15,4623120.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21904272.71485]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[432]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[440]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08128]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Monistrol de Calders]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Monistrol de Calders]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Monistrol de Calders]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Monistrol de Calders]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="432">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">311994.17,4620673.82 311646.12,4620051.21 310826.7,4620992.96 308843.19,4622079.58 309484.49,4624857.75 309853.4,4626684.95 310026.8,4626877 311683.66,4627179.27 311812.11,4626661.22 312104.17,4624930.82 313093.52,4623535.14 313860.35,4622731.56 314184.62,4622593.87 314062.75,4621532.77 311994.17,4620673.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21074897.69845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[433]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[441]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25134]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Menarguens]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Menarguens]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Men…rguens]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Men…rguens]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="433">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327619.86,4619438.68 326688.91,4620936.39 326577.53,4622953.68 327497,4622952.62 327979.64,4623984.05 328826.25,4625721.94 329013.075,4625971.791 329106.54,4625946.31 329027.12,4625647.15 329250.575,4625715.541 328703.77,4624014.05 329012.5,4624029.3 329253.7,4624979.603 329386.16,4625170.71 329372.45,4624679.603 329296.18,4623937.7 329611.2,4623790.11 329984.95,4624442.103 330280.81,4625267.79 330548.49,4626328.67 331711.74,4626081.55 331167.762,4625014.76 330136.513,4624147.572 329895.87,4623833.45 329972.45,4623749.135 330582.68,4624217.91 331203.7,4624745.228 331490.42,4625164.94 331819.325,4625713.978 332155.25,4627068.65 332837.99,4626870.47 331675.575,4625017.103 331449.013,4624694.447 330300.575,4623624.135 329963.34,4623438.15 330534.02,4622198.85 331461.18,4622559.66 331815.99,4622016.46 332363.67,4622161.85 332039.82,4619793.32 331548.21,4619356.5 331272.11,4619075.88 330483.58,4619245.55 329411.26,4618893.99 328619.74,4618944.72 327619.86,4619438.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25613504.66455]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[434]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[442]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25164]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Penelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Penelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Penelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Penelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="434">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">292281.42,4619014.7 289743.79,4619715.19 287042.28,4621534.01 283483.45,4623546.15 283820.12,4625521.43 283873.93,4626350.39 284412.73,4626379.27 287911.32,4627047.05 289301.71,4626839.27 290434.2,4625821.2 290686.48,4625158.16 291693.29,4624743.88 292432.82,4622713.56 292744.65,4622341.19 293357.97,4622447.08 293647.3,4621657.22 292281.42,4619014.7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47987376.83696]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[435]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[443]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25019]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Almacelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Almacelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Almacelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Almacelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="435">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">332480.26,4622185.9 332363.67,4622161.85 331815.99,4622016.46 331461.18,4622559.66 330534.02,4622198.85 329963.34,4623438.15 330300.575,4623624.135 331449.013,4624694.447 331675.575,4625017.103 332837.99,4626870.47 332851.85,4626555.73 333802.61,4626481.77 334181.3,4626533.25 334304.09,4626490.71 333412.15,4625172.31 333730.11,4624860.36 334222.29,4625614.56 335365.84,4625191.7 336935.46,4624770 336939.76,4624550.54 336540.65,4624518.81 332480.26,4622185.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">332155.25,4627068.65 331819.325,4625713.978 331490.42,4625164.94 331203.7,4624745.228 330582.68,4624217.91 329972.45,4623749.135 329895.87,4623833.45 330136.513,4624147.572 331167.762,4625014.76 331711.74,4626081.55 331890.26,4627098.4 332155.25,4627068.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[15969252.27938]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[436]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[444]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25070]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellsera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellsera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellser…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellser…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="436">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">291693.29,4624743.88 291718.34,4625349.6 292170.72,4625689.98 292339.66,4626080.5 293413.81,4626460.15 295255.44,4626549.26 301151.52,4626170.36 302435.72,4626769.89 302936.71,4626165.17 302552.95,4625881.09 302831.37,4625523.44 302265.03,4624227.74 302467.99,4623236.58 302570.38,4622020.75 302173.17,4621785.57 301403.52,4621817.02 301181.12,4621932.14 301016.43,4621624.81 300624.33,4621395.47 300107.17,4620667.8 299729.38,4620668.61 298883.75,4620757.67 298609.595,4620819.202 298273.52,4620626.76 297676.29,4620998.7 296092.8,4621172.81 294972.25,4621435.26 293647.3,4621657.22 293357.97,4622447.08 292744.65,4622341.19 292432.82,4622713.56 291693.29,4624743.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52306150.06496]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[437]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[445]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25016]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alguaire]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alguaire]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alguaire]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alguaire]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="437">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">456265.37,4617606.3 455715,4617507 455399.41,4617249 454289.89,4617843.3 454098.19,4618142.97 453936.04,4617929.58 453630.69,4618086.01 453313.19,4619165.28 453018.9,4619641.01 452751,4619339 452447.55,4619422.28 452506.96,4619793.15 452385.04,4620083.54 451753.45,4620751.16 450819.82,4620318.93 450051.07,4621308.18 450370.72,4622083.62 450135.14,4622621.84 450212.2,4623328.89 450304.61,4623764.31 450850.88,4624423.71 450621.29,4625671.3 451118.53,4626401.35 451764,4626746 452410,4625969 453023.03,4625918.51 453880.41,4626733.67 454917.45,4626158.32 456214,4626720 455933.82,4625443.53 457040.82,4624752.83 456425.5,4623617.13 456365.25,4622887.75 456725.5,4622143.08 456277.43,4621879.71 455079,4620947 454740.86,4619571.26 455678.96,4618314.15 456265.37,4617606.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[40017667.05095]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[438]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[446]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08081]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fogars de Montclus]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mosqueroles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fogars de Montcl£s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mosqueroles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="438">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382529.82,4621141 382029.73,4621028.92 380994.28,4621086.32 379766.36,4621062.18 379061.87,4620608.9 378763.92,4620850.85 378313.41,4621407.33 377341.51,4621782.44 377976.21,4623576.2 378304.91,4623592.641 378183.86,4624017.19 379105.05,4624034.79 379569.5,4625504.08 380519.27,4625598.66 380484.55,4626275.19 380800.14,4626215.67 381383.02,4626469.21 381630.49,4626737.83 382237.21,4625991.81 382355.24,4625757.62 383172.63,4625365.04 383255.34,4624786.19 383294.52,4624404.39 383098.63,4623300.03 382860,4623040 382577.7,4622544.79 382389.07,4621635.3 382529.82,4621141</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22091327.33152]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[439]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[447]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08189]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pere Sallavinera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pere Sallavinera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pere Sallavinera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pere Sallavinera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="439">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">406674.62,4619824.69 406060.05,4619589.36 405543.54,4620875.73 405781.63,4621431.88 405354.85,4621671.46 405162.503,4621613.27 404865.628,4621667.957 404709.378,4621816.395 404484.23,4621905.96 404307.44,4622688.58 403576.17,4622860.44 402719.92,4623778.87 402691.73,4624446.66 403394.01,4624392.35 404400.35,4624857.9 405098.48,4624628.46 405813.31,4626650.51 406001.68,4626457 409043.09,4625254.51 409007.89,4624219.39 408098.08,4623121.01 408566.43,4622585.61 408941.3,4622235.82 408852.11,4622104.42 408482.815,4621535.145 408240.628,4621457.02 407982.85,4621562.22 407646.878,4621472.645 406860.9,4620650.3 406323.98,4620633.26 406221.34,4620424.5 406674.62,4619824.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22360417.70095]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[440]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[448]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08213]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Fruitos de Bages]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Fruitos de Bages]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Fruit¢s de Bages]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Fruit¢s de Bages]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="440">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">420773.99,4622585.11 420608.02,4623431.68 421422.33,4623857.68 422265.54,4624179.71 422509.23,4624702.24 423315.45,4624770.29 423718.56,4625399.95 424488.27,4625707.25 424568.06,4625478.04 424953.33,4625479.46 425148.78,4625912.47 425474.45,4625696.51 427315.15,4626264.85 427610.35,4626032.09 427142.21,4625513.61 427582.62,4625245.25 427721.77,4624333.22 428762.55,4623259.85 428333.72,4621828.48 428435.85,4621171.23 428721.27,4620471.18 427649.27,4620305.57 427385.76,4619490.19 427979.43,4618762.32 427258.7,4618414.91 426132.16,4618967.41 426064.51,4619356.05 426120.37,4619882.91 425809.8,4620235.52 425556.21,4619917.96 425105.73,4619258.41 424823.26,4619691.97 425068.18,4619969.58 425289.24,4621058.23 424841.39,4621300.17 424558.31,4621615.28 423694.97,4621477.27 423380.96,4621795.56 423491.21,4622227.96 422371.37,4622263.47 422030.52,4622112.33 421651.09,4622300.72 420773.99,4622585.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32226527.47516]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[441]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[449]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08064]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castelltercol]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castelltercol]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellter‡ol]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellter‡ol]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="441">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">306459.64,4621348.79 304658.86,4620567.07 304545.13,4620459.75 303385.23,4621609.47 302570.38,4622020.75 302467.99,4623236.58 302265.03,4624227.74 302831.37,4625523.44 302552.95,4625881.09 302936.71,4626165.17 303588.37,4625472.67 304560.82,4624222.35 305976.64,4622701.34 305837.1,4622106.1 306459.64,4621348.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12143183.77405]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[442]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[450]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25174]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Portella, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Portella, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Portella, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Portella, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="442">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438243.8,4620123.19 438071.07,4620330.08 437382.04,4620422.57 436966.13,4620246.26 436590.24,4620544.53 436019.39,4620237.34 435549.52,4620290.43 434829.16,4620074.01 434024.52,4620195.43 432987.56,4620254.97 432339.06,4621737.68 432560.65,4622501.39 432641.52,4623317.2 432749.17,4625256.05 432470.39,4626096.71 432578.25,4626038.85 433267.53,4625862.79 434136.82,4625996.37 435412.53,4625680.66 435103.96,4624534.94 435654.08,4623477 436174,4623446 436203.96,4623720.66 437189.18,4623901.6 437625.76,4624121.371 437579.47,4624793.5 437797.635,4624379.183 437819.47,4624109.42 437766.14,4623912.94 437705.06,4622564.07 438403.56,4622176.47 438597.36,4621773.1 438198.92,4620993.92 438547.19,4620887.67 438827,4620596 438243.8,4620123.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25218994.79246]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[443]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[451]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08224]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti de Centelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Abella, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ de Centelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Abella, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="443">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">409043.09,4625254.51 408999.39,4625469.92 409671.79,4625497.87 409761.21,4625132.25 410096.82,4625097.42 410161.06,4624069.03 409972.34,4623860.5 410248.74,4623604.42 410584.34,4622834.08 411030.15,4622220.18 409538.15,4621664.94 408852.11,4622104.42 408941.3,4622235.82 408566.43,4622585.61 408098.08,4623121.01 409007.89,4624219.39 409043.09,4625254.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5697913.0816]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[444]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[452]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08140]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Navarcles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Navarcles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Navarcles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Navarcles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="444">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">384875.87,4617169.85 383994,4616802 383822,4616789 383465.36,4617632.19 382380.84,4617417.41 381194.53,4617897.1 380553.24,4618590.18 379963.21,4618582.79 379577.49,4618822.81 380321.49,4619166.64 380893.99,4619916.77 381940.86,4620194.76 382875.59,4620061.81 383225,4619787 384182,4619426 384282.14,4619780.33 383645.71,4621050.37 383043.63,4621050.45 382529.82,4621141 382389.07,4621635.3 382577.7,4622544.79 382860,4623040 383098.63,4623300.03 383294.52,4624404.39 383255.34,4624786.19 384413.83,4625146.76 384530.97,4625263.95 386058.93,4624984.25 386143.23,4624877.07 386429.03,4624441.8 387489.09,4623297.94 387844.75,4623303.17 389051.3,4622203.04 389272.21,4621559.72 389795.63,4621136 389593.02,4621099.4 389072.61,4620868.18 389301.9,4619724.43 389088.4,4618578.43 387991.82,4619083.98 387642.36,4618769.88 387433,4618795 387438,4618311 386717.71,4618333.88 385819.96,4618260.59 385394.64,4617815.99 384856.45,4617901.84 384875.87,4617169.85</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43461990.861]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[445]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[453]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08002]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aguilar de Segarra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Raval, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aguilar de Segarra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Raval, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="445">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">319572.87,4620303.13 317928.9,4620166.3 317654.64,4619133.62 317161.4,4619283.23 316348.1,4619227.49 314893.3,4618828.46 314921.8,4617759.96 313965.48,4617497.69 313525.07,4618502.05 312863.3,4619592.91 311994.17,4620673.82 314062.75,4621532.77 314184.62,4622593.87 314847.35,4622564.19 314851.22,4623448.27 314772.79,4623945.26 315102.75,4624501.07 316603.99,4624995.17 317103.89,4624036.88 319022.11,4622438.53 319734.53,4621381.35 319572.87,4620303.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27913459.31285]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[446]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[454]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25220]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Termens]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Termens]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[T‚rmens]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[T‚rmens]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="446">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">489349.25,4624751.11 489459.09,4624875.12 492329.26,4624704.78 493134.81,4624304.16 494158.66,4623064.93 495225.98,4623467.56 495903.88,4624313.61 496402.57,4623751.78 496798.95,4623217.43 497219.4,4622838.75 497681.89,4622576.08 497288.31,4621944 496593.27,4621156.57 496647.534,4620941.283 496761.78,4620842.5 496591.284,4620656.908 496481.53,4620743.5 496328.784,4620760.033 496252.21,4620684 496285.034,4620300.658 496216.284,4620216.283 496144.82,4620275.46 495900.659,4620100.658 495788.159,4620085.033 495677.56,4620002 495776.65,4619860.5 495572.84,4619721.5 495589.81,4619512 495325.659,4619483.471 495068.93,4619274.5 495019.409,4619152.221 494893.43,4619101.5 494631.909,4618820.97 494664.12,4618595 494600.659,4618420.971 494477.31,4618442 493975.659,4618205.346 493863,4618080 493728.784,4618036.596 493575.659,4618105.346 493416.284,4618089.721 492916.284,4617680.346 492648.59,4617689 492235.034,4617777.221 492000.1,4617771.7 491750.659,4617530.346 491782.34,4617324 491496.43,4617256 491259.64,4617382.66 491111.49,4618313.18 490710.8,4619013.84 490143.03,4619063.63 490176.02,4620266.88 489026.83,4621795.94 489236.36,4621938.97 490577.31,4622932.81 490394.78,4623588.21 489349.25,4624751.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38311829.63943]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[447]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[455]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17202]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tossa de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tossa de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tossa de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tossa de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="447">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">456277.43,4621879.71 456725.5,4622143.08 456365.25,4622887.75 456425.5,4623617.13 457040.82,4624752.83 458069.3,4623936.79 458300.72,4624091.08 459884.73,4623679.43 460075.01,4623075.36 459779.3,4622706.8 459993.48,4622254.54 459915.61,4622012.14 460712.16,4621376.1 461207.16,4620762.53 460990.73,4620279.69 461107.87,4619878.27 461428.59,4619229.71 461852.68,4618519.49 460415.12,4617452.45 460121.48,4617547.38 459204.24,4618052.81 458535.25,4618289.93 457764.03,4618804.47 457825.78,4619135.72 456746.32,4620657.17 456277.43,4621879.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23070144.1559]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[448]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[456]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08097]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gualba]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gualba]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gualba]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gualba]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="448">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">297685.72,4605835.19 296967.89,4605119.34 295497.46,4608784.27 295161.83,4609202.44 295165.23,4610068.38 293562.22,4612433.57 293263.41,4612707.16 293384.79,4613911.4 292846.15,4614471.4 292501.8,4614320.03 290038.3,4615086.06 288407.04,4614687.94 287804.96,4614829.47 287106.83,4615430.29 287358.97,4617166.01 286268.69,4617643.59 283365.02,4619134.98 280775.81,4621343.49 281157.03,4621639.52 281281.74,4622878.78 281448.51,4622769.69 282487.61,4624489.44 283483.45,4623546.15 287042.28,4621534.01 289743.79,4619715.19 292281.42,4619014.7 293519.46,4618105.55 293886.92,4617438.93 294425.92,4617074.04 294123.72,4615931.03 294931.8,4615053.41 297640.19,4613737.9 297638.58,4614314.75 298222.91,4614443.01 298761.57,4614342.67 298456.17,4614923.66 298399.27,4615344.58 298712.59,4615473.74 298958.96,4615824.7 299165.66,4616269.5 300719.71,4615437.07 301651.7,4615991.79 301760.8,4616203.5 302162.99,4616213.51 302863.73,4615702.56 303897.33,4615635.77 305091.06,4615083.28 305326.71,4614706.2 305282.71,4614243.83 306621.2,4613097.06 305832.1,4611990.24 306753.91,4611689.67 307868.17,4611978.7 308620.24,4611383.96 309650.22,4611957.9 310927.81,4612165.67 310897.31,4611818.22 310325.29,4611208.98 310100.19,4610000.73 310419.84,4607873.73 311799.89,4606345.2 311557.2,4606306.62 310933.72,4604801.38 310412.68,4605004.91 309986.16,4604646.8 307522.18,4604623.61 306261.57,4605377.23 305599.12,4604606.28 305956.5,4603095.23 306733.35,4601910.65 306647.21,4601003.28 307086.64,4599982.56 306662.62,4599044.5 306120.02,4598326.51 306025.17,4598237.04 305106.26,4598863.93 304487.3,4600515.56 304759.71,4601214.07 304626.48,4602734.17 302589.18,4603157.07 302691.63,4603973.56 303638.62,4605084.48 303455.68,4605676.05 302001.2,4605898.83 301240.94,4606375.03 299936.6,4605907.85 299471.98,4605556.1 299163.71,4605598.01 298800.9,4605525.22 297685.72,4605835.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[213295285.5376]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[449]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[457]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25120]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Lleida]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lleida]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lleida]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lleida]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="449">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">462456.52,4624360.31 463708.04,4624123.22 463527.32,4623237.76 463923.77,4622667.96 464181.33,4621831.87 464319.8,4621151.97 464263.5,4620208.78 463257.07,4621254.42 462641.23,4622365.76 462893.03,4622461.86 462573.08,4622943.46 461916.97,4623377.18 462004.98,4624146.02 462456.52,4624360.31</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4632012.3466]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[450]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[458]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17027]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Breda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Breda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Breda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Breda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="450">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">361211.17,4622170.1 361515.37,4623486.74 362339.07,4623237.36 363823.55,4623335.55 363895.48,4624227.4 365442.92,4623445.21 366483.44,4623236.9 367205.06,4622771.89 366584.8,4621491.77 366171.84,4621229.9 365287.47,4621208.12 364713.51,4620789.13 363687.33,4619752.52 362876.99,4618843.73 362460,4618859.08 361476.25,4619671.15 361258.02,4619672.16 361273.8,4620165.34 360612.33,4620786.24 361064.62,4621223.17 361211.17,4622170.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18777285.6793]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[451]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[459]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25194]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Ramon]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Ramon]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Ramon]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Ramon]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="451">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">427979.43,4618762.32 427385.76,4619490.19 427649.27,4620305.57 428721.27,4620471.18 429860.22,4620455.19 430379.31,4621679.31 431782.02,4623822.92 432641.52,4623317.2 432560.65,4622501.39 432339.06,4621737.68 432987.56,4620254.97 434024.52,4620195.43 434829.16,4620074.01 435549.52,4620290.43 436019.39,4620237.34 436590.24,4620544.53 436966.13,4620246.26 437207.18,4619850.8 436925.14,4619144.37 437062.51,4617839.44 436885.65,4617528.97 436651.78,4618009.3 434693.1,4617403.14 434715.94,4617768.58 434498,4618019 434259.14,4617843.62 433318,4617618 433120,4617906 432871,4618598 432570.43,4618667.87 432400.59,4618924.66 431299.09,4618516.22 430729.68,4618443.98 428623.71,4618579.49 427979.43,4618762.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25990423.5778]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[452]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[460]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08239]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Quirze Safaja]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Quirze Safaja]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Quirze Safaja]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Quirze Safaja]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="452">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">398410.9,4618663.95 398117.68,4618928.73 398297.43,4619400.48 397770.04,4622236.57 397982.25,4622274.75 398656.9,4621970.58 400005.51,4621199.91 400391.25,4621388.3 400745,4621406.59 401039.6,4622593.3 401430.7,4622909.48 401913.96,4622967.44 402719.92,4623778.87 403576.17,4622860.44 404307.44,4622688.58 404484.23,4621905.96 404709.378,4621816.395 404865.628,4621667.957 405162.503,4621613.27 405354.85,4621671.46 405781.63,4621431.88 405543.54,4620875.73 406060.05,4619589.36 406013.87,4619504.98 406045.315,4619218.739 406314.4,4619089.66 406412.503,4618984.364 406435.94,4618812.489 406140.27,4618699.4 406107.815,4618531.238 406185.94,4617874.988 406053.128,4617648.426 406045.315,4617070.301 406217.19,4616882.801 406249.83,4616244.8 405941.29,4616044.36 405102.97,4616539.48 404264.065,4616589.832 403798.16,4616772.96 403404.86,4616374.31 403198.17,4616615.04 402826.4,4616592.49 402507.83,4616940.9 401701.05,4616538.04 401396.878,4616722.645 401180,4616693 401009,4616209 400340,4616434 399628.74,4618208.97 399287.48,4618407.13 399183.63,4618836.55 398410.9,4618663.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[41627529.19481]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[453]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[461]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08113]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Manresa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Manresa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Manresa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Manresa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="453">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">489236.36,4621938.97 489026.83,4621795.94 490176.02,4620266.88 490143.03,4619063.63 490710.8,4619013.84 491111.49,4618313.18 491259.64,4617382.66 491496.43,4617256 491179.37,4617075 491063.31,4617077.5 490896.28,4616944.5 490656.909,4616910.033 490511.28,4617089 490140.43,4617026.5 490025.659,4617000.658 489963.159,4616885.033 489797.9,4616848.5 489639.4,4616888 489356.909,4616719.408 489081.71,4616656 488866.59,4616545.5 488393.84,4616667 488028.784,4616653.783 487303.93,4616361.5 487117.12,4616152 486913.159,4616003.783 486675.5,4615922.5 486435.034,4616038.158 486151.81,4615982 485747,4615687.5 485676.21,4615569 485254.43,4615450 484957.18,4615300 484772.75,4615129 482613.95,4617114.44 482319.72,4617861.89 481953.33,4619720.98 481530.28,4620133.92 481526.96,4620634.61 482634.1,4621073.18 484214.61,4621597.67 486800.72,4623023.84 487426.52,4623552.44 489236.36,4621938.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[48564634.97367]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[454]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[462]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17095]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Lloret de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lloret de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lloret de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lloret de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="454">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">398410.9,4618663.95 397502.41,4618511.36 396374.77,4617819.67 395624.81,4617437.3 394795.19,4616840.23 394179.11,4616837.77 394091.2,4617170.98 393571.04,4616998.15 392501.11,4617048.4 392131.84,4616906.31 390778.84,4616129.4 390431.29,4616704.46 389762.39,4616723.75 389581.64,4617404.04 389275.87,4617640.16 389088.4,4618578.43 389301.9,4619724.43 389072.61,4620868.18 389593.02,4621099.4 389795.63,4621136 389272.21,4621559.72 389051.3,4622203.04 387844.75,4623303.17 389501.91,4623525.64 390294.57,4622899.31 390949.51,4623031.94 391446.17,4622986.73 391646.8,4623223.57 392186.59,4622961.47 392632.98,4622011.26 393327.89,4621935.24 393872.43,4621689.77 394259.07,4621235.27 396235.77,4621801.44 396999.14,4622182.72 397770.04,4622236.57 398297.43,4619400.48 398117.68,4618928.73 398410.9,4618663.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[45797943.11805]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[455]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[463]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08178]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rajadell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rajadell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rajadell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rajadell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="455">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">452300.29,4614211.79 452180.58,4614097.77 449987.7,4614282.9 448465.03,4613539.59 447267.29,4613514.93 447219.72,4616143.37 447617.55,4616596.73 447642.83,4618270.29 446965.69,4619613.15 446595,4620560 446964,4621238 446222.62,4621957.5 446597,4622521 446970,4622606 447379.62,4622946.7 447734.26,4623135.99 448074,4623485.38 448434.61,4623423.99 449115.08,4623128.67 449414.41,4623072.28 449214.68,4622605.01 449436,4622388 450135.14,4622621.84 450370.72,4622083.62 450051.07,4621308.18 450819.82,4620318.93 450782.95,4620049.15 449963.17,4619551.13 450350,4619129 450834.66,4617434.02 451159.76,4616684.35 451498.06,4616455.46 452241.3,4615661.61 452705.63,4615003.88 452300.29,4614211.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34986496.5366]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[456]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[464]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08234]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pere de Vilamajor]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pere de Vilamajor]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pere de Vilamajor]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pere de Vilamajor]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="456">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">322367.79,4617173.77 321791.4,4617874.31 320947.46,4617839.23 321056.05,4617168.45 320411.56,4616735.85 320144,4615792.43 321974.38,4615194.59 321117.13,4613906.68 319030.86,4612607.55 317295.4,4613098.78 316738.28,4613108.53 315486.46,4613988.21 313849.21,4615278.26 313972.63,4616065.93 314154.87,4616742.12 313965.48,4617497.69 314921.8,4617759.96 314893.3,4618828.46 316348.1,4619227.49 317161.4,4619283.23 317654.64,4619133.62 317928.9,4620166.3 319572.87,4620303.13 320255.43,4620350.01 320461.29,4619812.96 321796.7,4620132.45 322367.79,4617173.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">322513.7,4621551.96 321526.83,4621885.82 322453.43,4623415.99 323348.71,4623236.68 323592.1,4622237.85 322620.26,4621576.99 322513.7,4621551.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[46361753.60904]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[457]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[465]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25052]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellvis]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellvis]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellv¡s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellv¡s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="457">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327619.86,4619438.68 326766.31,4618803.51 326618.4,4616826.11 326140.56,4616509.97 323966.24,4616350.8 324026.07,4616829.99 323267.44,4616505.76 322346.04,4616652.94 322367.79,4617173.77 321796.7,4620132.45 322513.7,4621551.96 322620.26,4621576.99 323592.1,4622237.85 323348.71,4623236.68 324835.36,4623313.11 324921.22,4622991.88 326577.53,4622953.68 326688.91,4620936.39 327619.86,4619438.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29017151.36805]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[458]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[466]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25122]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Linyola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Linyola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Linyola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Linyola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="458">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">406674.62,4619824.69 406221.34,4620424.5 406323.98,4620633.26 406860.9,4620650.3 407646.878,4621472.645 407982.85,4621562.22 408240.628,4621457.02 408482.815,4621535.145 408852.11,4622104.42 409538.15,4621664.94 411030.15,4622220.18 411748.11,4622220.71 413795.13,4622701.87 415206.15,4623120.71 416096.1,4622740.49 416693.16,4622110.73 417152.49,4621843.41 417280.37,4620807.14 417260.43,4620336.58 417177.12,4619764.92 416369.6,4619250.18 416256.66,4618707.33 415909.32,4618719.49 415623.78,4618883.72 414803.59,4618761.37 413740.41,4618689 413188.64,4618593.84 412973.4,4618452.95 412162.48,4618273.3 411902.18,4618277.13 411800.86,4618878.43 411899.33,4619389.31 411280.44,4619757.54 410869.83,4619367.58 410607.04,4619496.9 410269.46,4619916.6 409430.37,4620254.88 409326.565,4620605.457 409024.58,4620735.78 408787.503,4620660.145 408046.22,4620834.44 407842.62,4620602.54 408084.378,4620355.457 408062.89,4620111.75 407756.253,4619988.27 407467.19,4619660.145 407115.628,4619667.957 406843.56,4619549.42 406674.62,4619824.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29616426.51339]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[459]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[467]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08277]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Talamanca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Talamanca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Talamanca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Talamanca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="459">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">349029.3,4609367 347498.21,4608704.53 347223.08,4608308.1 346841.25,4608934.59 346488.7,4609009.54 345637.95,4609884.68 344403.25,4609728.27 342626.76,4608786.34 341275.85,4608379.19 340905.08,4608503.2 341744.51,4609553.87 341473.94,4610391.88 341846.09,4611708.86 342420.06,4611564.52 342691.29,4611767.16 342713.87,4612685.58 342900.73,4613131.39 342528.01,4613618.94 342446.52,4614101.92 344102.2,4615412.83 343218.48,4615997.59 342798.58,4616971.24 342578.346,4617065.296 340907.29,4615802.75 338523.2,4616363.55 338842.96,4616542.47 340000,4617081.79 342062.04,4618713.04 341958.16,4619007.57 342243.26,4620050.95 341800.8,4621237.71 340381.75,4620206.67 340417.18,4620863.97 341860.28,4621905.31 342395.42,4622633.8 343364.41,4623019.88 344452.07,4622427.3 344154.33,4620932.32 345019.03,4620567.99 345300.74,4619471.45 346085.23,4619960.59 346792.69,4619691.86 347838.81,4619262.57 348577.4,4619369.94 349925.42,4620516.07 350959.4,4620083.44 350348.44,4619182.57 349804.14,4617214.02 349463.81,4616734.84 349132.73,4616669.96 349144.96,4615700.89 349192.94,4615510.91 349386.03,4615393.28 349326.25,4615046.25 349582.75,4613949.38 349428.55,4613669.84 349640.31,4612922.63 349150.47,4612763.92 349319.95,4610917.75 349029.3,4609367</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[88692323.19857]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[460]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[468]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25217]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tarrega]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tarrega]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[T…rrega]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[T…rrega]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="460">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355184.61,4619012.58 356360.48,4621897.15 357205.84,4622931.12 358076.52,4623002.59 358233.78,4621605.5 358010.68,4620788.93 357782.22,4620232.32 356830.25,4619437.88 356654.75,4618051.72 355194,4618665.23 355184.61,4619012.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7923462.42405]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[461]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[469]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25219]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tarroja de Segarra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tarroja de Segarra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tarroja de Segarra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tarroja de Segarra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="461">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362876.99,4618843.73 363687.33,4619752.52 364713.51,4620789.13 365287.47,4621208.12 366171.84,4621229.9 366584.8,4621491.77 367205.06,4622771.89 367341.42,4622932.1 367910.47,4622432.21 368747.93,4621999.3 369122.8,4621487.77 368603,4621403.75 365601.784,4618608.265 366978.13,4618405.37 366621.46,4617460.34 367246.68,4617293.43 367234.27,4616400.32 366171.02,4615493.9 365228.83,4615393.98 364816.56,4615062.32 364725.8,4615338.14 362385.27,4613937.11 361496.86,4614189.88 361656.34,4614612.78 361418.02,4614575.01 361619.36,4614786.87 363082.5,4615908.31 363613.61,4615979.42 363740.54,4615771.99 364347.18,4615699.69 364548.25,4616814.91 365325.25,4617764.41 365312.721,4618475.452 364890.846,4618756.702 364018.03,4618724.04 363026.64,4618253.5 362876.99,4618843.73</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20627068.57386]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[462]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[470]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25085]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Estaras]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Estaras]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Estar…s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Estar…s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="462">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">468472.81,4620190.21 468035.53,4621149.87 468939.56,4621695.64 469616.39,4622595.1 470752.86,4621685.05 470737.55,4621595.72 470308.77,4621600.29 469825.27,4620667.08 468472.81,4620190.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3039231.13135]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[463]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[471]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17083]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Hostalric]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Hostalric]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Hostalric]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Hostalric]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="463">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">424135.27,4617964.58 423728.26,4618203.58 422945.5,4618351.12 422338.59,4618438.59 421476.54,4618429.57 420665.5,4618546.71 419847.34,4618951.41 419446.47,4618738.98 418798.67,4617960.73 418664.49,4617885.37 418303.46,4619160.01 418193.69,4619905.84 419124.73,4620162.22 419115.78,4620760.36 419827.83,4621223.48 420103.64,4621950.89 420695.23,4622576.87 420773.99,4622585.11 421651.09,4622300.72 422030.52,4622112.33 422371.37,4622263.47 423491.21,4622227.96 423380.96,4621795.56 423694.97,4621477.27 424558.31,4621615.28 424841.39,4621300.17 425289.24,4621058.23 425068.18,4619969.58 424823.26,4619691.97 425105.73,4619258.41 425556.21,4619917.96 425809.8,4620235.52 426120.37,4619882.91 426064.51,4619356.05 426132.16,4618967.41 425144.59,4618610.87 424925.27,4618100.44 424135.27,4617964.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23326837.55424]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[464]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[472]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08095]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="464">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">311646.12,4620051.21 310652.99,4619110.01 309868.14,4619370.41 309748.57,4619148.83 309344.12,4618617.63 308994.57,4619110.83 308290.42,4618609.47 307608.36,4620081.67 306979.94,4620597.13 306459.64,4621348.79 307946.74,4622432.62 308843.19,4622079.58 310826.7,4620992.96 311646.12,4620051.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10788674.355]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[465]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[473]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25231]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[23]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrelameu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torrelameu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrelameu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torrelameu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="465">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355296.35,4610722.36 354908.53,4611265.78 353830.01,4611122.66 353569.92,4611266.89 353788.99,4611561.92 353081.93,4612957.18 353087.59,4613826.09 353886.95,4614763.12 354041.3,4615745.42 352895.68,4616453.95 352744.38,4616684.99 353351.23,4617347.37 353668.04,4618262 355184.61,4619012.58 355194,4618665.23 356654.75,4618051.72 356830.25,4619437.88 357782.22,4620232.32 358010.68,4620788.93 359980.5,4621768.09 360312.15,4622230.49 361211.17,4622170.1 361064.62,4621223.17 360612.33,4620786.24 361273.8,4620165.34 361258.02,4619672.16 361087.36,4619611.03 360968.15,4619164.03 358322.22,4617118.62 358490.86,4616784.11 358683.71,4616524.35 359469.19,4615996.27 360412.06,4615716.47 360322.17,4615531.36 360947.24,4615417.21 361619.36,4614786.87 361418.02,4614575.01 361298.56,4614439.02 360965.71,4613718.88 360004.44,4611935.93 358727.36,4613537.15 357449.98,4613002.16 357093.6,4612068.47 356645.27,4611688.11 356646.09,4610342.21 356936.48,4609570.96 356775.47,4609552.87 356043.33,4609886.05 355394.86,4610575.49 355296.35,4610722.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[55687297.95179]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[466]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[474]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25072]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cervera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cervera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cervera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cervera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="466">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">332363.67,4622161.85 332480.26,4622185.9 333756.44,4622043.44 336030.46,4621398.46 335907.91,4620848.12 336039.43,4620881.02 336115.5,4620473.8 335700.09,4620072.21 334872.26,4619192.18 333534.88,4618398.07 332752.26,4618876.94 331891.55,4619164.91 331548.21,4619356.5 332039.82,4619793.32 332363.67,4622161.85</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10966110.16785]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[467]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[475]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25096]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fuliola, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fuliola, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fuliola, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fuliola, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="467">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">468472.81,4620190.21 469825.27,4620667.08 470308.77,4621600.29 470737.55,4621595.72 471380.7,4621515.86 471619.54,4621953.43 472618.88,4621834.19 473515.94,4621141.42 473964.07,4621308.43 473783.14,4621600.98 473588.15,4621504.92 473661.03,4622054.13 474269.42,4621936.96 474352.23,4621413.84 475738.28,4621294.27 477162.24,4621629.64 475298.45,4619840.19 472682.67,4618358.41 472370.08,4618700.78 471241.24,4619179.87 470866.95,4618667.85 470313.01,4618176.78 469400.97,4615536.89 468132.23,4615795.26 466771.23,4614958.16 466487.32,4615133.15 466204.96,4615766.75 465836.23,4616741.79 466296.06,4617515.43 466801.51,4618530.17 466467.25,4619006.42 466662.67,4619858.86 468472.81,4620190.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32553657.33215]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[468]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[476]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08082]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fogars de la Selva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fogars de la Selva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fogars de la Selva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fogars de la Selva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="468">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">304545.13,4620459.75 304473,4620118.56 303321,4619411.95 302228.95,4619424.14 302064.17,4619720.22 301823.24,4619418.97 301742.18,4619270.55 301144.29,4620062.82 300750.22,4620287.952 299593.97,4620436.389 298695.532,4620381.702 298274.45,4620526.29 298273.52,4620626.76 298609.595,4620819.202 298883.75,4620757.67 299729.38,4620668.61 300107.17,4620667.8 300624.33,4621395.47 301016.43,4621624.81 301181.12,4621932.14 301403.52,4621817.02 302173.17,4621785.57 302570.38,4622020.75 303385.23,4621609.47 304545.13,4620459.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8236085.73793]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[469]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[477]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25251]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova de Segria]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova de Segria]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova de Segri…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova de Segri…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="469">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">369122.8,4621487.77 370029,4621698.59 370658.7,4621386.51 372382.32,4621991.1 372937.723,4621573.109 373336.16,4621854.359 373317.86,4621973.97 373729.25,4621997.94 373625.26,4621649.31 373218.973,4621526.234 373214.45,4621199 371850.38,4620050.69 370796.87,4619757.74 370709.94,4619334.57 370778.49,4619055.22 371334.1,4618812.27 372532.99,4618980.89 372796.74,4618793.52 374250.48,4618622.18 374073.92,4617761.56 374254.57,4617385.27 373641.18,4617377.08 371790.28,4617531.13 371072.69,4617170.56 370643.31,4615102.21 370315.11,4614528.43 368501.3,4615320.55 368750,4616176.93 367234.27,4616400.32 367246.68,4617293.43 366621.46,4617460.34 366978.13,4618405.37 365601.784,4618608.265 368603,4621403.75 369122.8,4621487.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31008671.3138]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[470]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[478]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08176]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pujalt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pujalt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pujalt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pujalt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="470">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">442160.97,4613823.04 441797.88,4614307.68 441873.02,4615523.3 442037.56,4616648.02 441762.46,4617321.95 442687.48,4617789.52 442997.6,4618085.71 443006.83,4618601.62 443720.22,4619080.57 444609.96,4619355.21 445066.17,4620380.63 446222.62,4621957.5 446964,4621238 446595,4620560 446965.69,4619613.15 447642.83,4618270.29 447617.55,4616596.73 447219.72,4616143.37 447267.29,4613514.93 446227,4613973 445822,4613950.9 445174.69,4615137.32 444314.76,4615205.29 443356.9,4614064.24 443089.13,4613871.91 442160.97,4613823.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29344974.98315]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[471]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[479]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08042]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Canoves i Samalus]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Canoves]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[C…noves i Samal£s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[C…noves]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="471">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">376636.8,4619190.51 374250.48,4618622.18 372796.74,4618793.52 372532.99,4618980.89 371334.1,4618812.27 371414.285,4618940.297 374773.74,4620062.91 374953.348,4620002.797 375289.02,4620454.6 375523.66,4620737.172 375479.73,4621286.63 375866.07,4621605.36 376611.65,4621904.68 377341.51,4621782.44 378313.41,4621407.33 378763.92,4620850.85 377720.21,4620396.37 376636.8,4619190.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9362578.27685]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[472]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[480]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08031]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Calaf]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Calaf]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Calaf]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Calaf]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="472">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">456265.37,4617606.3 455678.96,4618314.15 454740.86,4619571.26 455079,4620947 456277.43,4621879.71 456746.32,4620657.17 457825.78,4619135.72 457764.03,4618804.47 457156.2,4618734.75 456265.37,4617606.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6893613.3011]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[473]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[481]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08039]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Campins]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Campins]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Campins]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Campins]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="473">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">292281.42,4619014.7 293647.3,4621657.22 294972.25,4621435.26 296092.8,4621172.81 297676.29,4620998.7 298273.52,4620626.76 298274.45,4620526.29 297944.79,4619190.71 297824.37,4618452.99 296432.19,4618972.2 295874.85,4618262.5 294425.92,4617074.04 293886.92,4617438.93 293519.46,4618105.55 292281.42,4619014.7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">299165.66,4616269.5 298079.46,4616974.67 297476.73,4617862.94 297824.37,4618452.99 298475.81,4617666.29 298930.65,4617263.24 299713.42,4617228.82 301054.19,4617636.37 301518.6,4617864.53 301579.75,4618708.22 301950,4618625.06 302039.97,4618436.85 302229.07,4617847.84 302249.63,4617280.22 302437.72,4616944.202 302332.98,4616817.58 301914.282,4617131.702 301686.1,4617099.42 301760.8,4616203.5 301651.7,4615991.79 300719.71,4615437.07 299165.66,4616269.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[23098880.6919]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[474]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[482]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25228]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrefarrera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torrefarrera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrefarrera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torrefarrera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="474">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">474614.73,4613453.17 474055.55,4613554.26 472371.57,4612804.38 471769.71,4612798.13 471837.48,4612531.72 472057.95,4612107.69 472741.88,4611755.91 473566.89,4611182.7 473246.23,4610516.1 469924.2,4610468.72 468997.65,4610991.95 468889.04,4610923.83 467976.94,4610814.95 467463.49,4611042.89 467333.48,4612062.88 466301.17,4612213.42 466662.17,4613438.93 467577.21,4614009 467332.05,4614231.02 466771.23,4614958.16 468132.23,4615795.26 469400.97,4615536.89 470313.01,4618176.78 470866.95,4618667.85 471241.24,4619179.87 472370.08,4618700.78 472682.67,4618358.41 475298.45,4619840.19 477162.24,4621629.64 478833.97,4620599.94 481526.96,4620634.61 481530.28,4620133.92 480653.04,4619612.62 481167.37,4616319.04 480982.91,4615330.51 479870.98,4614451.67 479628.07,4614964.46 478428.4,4615568.44 477502.72,4615921.1 477066.7,4615770.66 476625.32,4615165.99 474614.73,4613453.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[83756728.34085]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[475]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[483]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08284]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tordera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tordera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tordera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tordera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="475">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">304744.19,4616723.84 305409.98,4617674.67 305637.91,4618612.71 305495.5,4619180.95 304473,4620118.56 304545.13,4620459.75 304658.86,4620567.07 306459.64,4621348.79 306979.94,4620597.13 307608.36,4620081.67 308290.42,4618609.47 308994.57,4619110.83 309344.12,4618617.63 310027.12,4617690.17 309948.53,4617304.43 309650.34,4616513 308788.08,4616007.69 308323.61,4615612.29 308213.74,4615662.31 308050.36,4615811.74 307417.91,4615375.15 306909.98,4615333.57 306174.48,4614592.69 305326.71,4614706.2 305091.06,4615083.28 305184.34,4615666.08 304823.71,4616349.04 304744.19,4616723.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21183360.65115]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[476]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[484]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25078]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Corbins]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Corbins]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Corbins]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Corbins]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="476">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">280775.81,4621343.49 283365.02,4619134.98 286268.69,4617643.59 287358.97,4617166.01 287106.83,4615430.29 287804.96,4614829.47 286733.08,4612905.36 285550.32,4613596.29 284924.36,4613038.62 282583.24,4613225.33 280461.82,4612744.89 280069.62,4612448.16 279594.01,4612790.12 278121.01,4615654.03 277565.41,4615927.4 277546.95,4617651.08 278616.72,4619219.38 280775.81,4621343.49</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[56602397.80195]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[477]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[485]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25912]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gimenells i el Pla de la Font]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gimenells]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gimenells i el Pla de la Font]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gimenells]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="477">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338221.27,4616592.44 337052.34,4617917.04 336516.98,4617434.61 336001.1,4617722.83 340417.18,4620863.97 340381.75,4620206.67 341800.8,4621237.71 342243.26,4620050.95 341958.16,4619007.57 340607.67,4618517.08 340335.08,4618753.28 338221.27,4616592.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">335308.08,4618110.07 334815.26,4617857.9 334516.19,4617268 333592.44,4617568.64 336096.46,4619816.05 335700.09,4620072.21 336115.5,4620473.8 338473.27,4621631.34 339633.8,4622248.99 340972.79,4624465.76 341341.69,4624550.42 341048.89,4623139.87 339473.47,4621103.98 335308.08,4618110.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[19998110.33985]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[478]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[486]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25225]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tornabous]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tornabous]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tornabous]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tornabous]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="478">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">371072.69,4617170.56 371790.28,4617531.13 373641.18,4617377.08 374254.57,4617385.27 376554.41,4617325 376689.24,4617676.44 376824.26,4618627.31 376636.8,4619190.51 377720.21,4620396.37 378763.92,4620850.85 379061.87,4620608.9 379766.36,4621062.18 380994.28,4621086.32 382029.73,4621028.92 382529.82,4621141 383043.63,4621050.45 383645.71,4621050.37 384282.14,4619780.33 384182,4619426 383225,4619787 382875.59,4620061.81 381940.86,4620194.76 380893.99,4619916.77 380321.49,4619166.64 379577.49,4618822.81 379963.21,4618582.79 380553.24,4618590.18 381194.53,4617897.1 382380.84,4617417.41 383465.36,4617632.19 383822,4616789 383554.26,4616735.81 382403.69,4616363.31 381955.21,4616037.85 382069.66,4615798.93 381204.61,4614589.15 379781.28,4613959.57 377741,4615172 378026.93,4615566.26 378021.4,4615820.73 377905,4616190 377375.38,4616764.55 376660.41,4616933.5 375126.49,4617027.3 371072.69,4617170.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32464257.12666]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[479]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[487]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08170]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Prats de Rei, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Prats de Rei, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Prats de Rei, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Prats de Rei, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="479">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">409642.11,4614930.7 409417.09,4614959.92 408868,4614718.03 408192.01,4615472.07 407916.64,4615518.68 407145.52,4615729.28 406249.83,4616244.8 406217.19,4616882.801 406045.315,4617070.301 406053.128,4617648.426 406185.94,4617874.988 406107.815,4618531.238 406140.27,4618699.4 406435.94,4618812.489 406412.503,4618984.364 406314.4,4619089.66 406045.315,4619218.739 406013.87,4619504.98 406060.05,4619589.36 406674.62,4619824.69 406843.56,4619549.42 407115.628,4619667.957 407467.19,4619660.145 407756.253,4619988.27 408062.89,4620111.75 408084.378,4620355.457 407842.62,4620602.54 408046.22,4620834.44 408787.503,4620660.145 409024.58,4620735.78 409326.565,4620605.457 409430.37,4620254.88 410269.46,4619916.6 410607.04,4619496.9 410869.83,4619367.58 411280.44,4619757.54 411899.33,4619389.31 411800.86,4618878.43 411902.18,4618277.13 412162.48,4618273.3 412507.23,4616940.37 412542.18,4616156.66 411781.01,4615723.61 411497.48,4615498.68 410701.34,4615697.74 410432.55,4615196.74 410169.42,4615391.77 409642.11,4614930.7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27173126.325]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[480]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[488]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08182]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pont de Vilomara i Rocafort, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pont de Vilomara, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pont de Vilomara i Rocafort, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pont de Vilomara, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="480">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437008.95,4617286.91 436885.65,4617528.97 437062.51,4617839.44 436925.14,4619144.37 437207.18,4619850.8 436966.13,4620246.26 437382.04,4620422.57 438071.07,4620330.08 438243.8,4620123.19 439374.24,4620073.28 439643.2,4619815.41 441800.47,4620798.55 443720.22,4619080.57 443006.83,4618601.62 442997.6,4618085.71 442687.48,4617789.52 441201.27,4619028.02 440613.98,4618724.39 440378.26,4618244.97 440122.57,4618540.61 439240.46,4618432.23 438608.4,4617314.09 437955.17,4615355.32 437621.44,4616413.88 437008.95,4617286.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14694528.01235]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[481]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[489]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08134]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Figaro-Montmany]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Figaro]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Figar¢-Montmany]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Figar¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="481">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">453936.04,4617929.58 454190.33,4617395.29 453556.76,4616902.79 453247.57,4617050.02 452269.74,4616213.44 452041.62,4616371.75 451498.06,4616455.46 451159.76,4616684.35 450834.66,4617434.02 450350,4619129 449963.17,4619551.13 450782.95,4620049.15 450819.82,4620318.93 451753.45,4620751.16 452385.04,4620083.54 452506.96,4619793.15 452447.55,4619422.28 452751,4619339 453018.9,4619641.01 453313.19,4619165.28 453630.69,4618086.01 453936.04,4617929.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10517067.05315]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[482]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[490]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08207]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Esteve de Palautordera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Esteve de Palautordera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Esteve de Palautordera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Esteve de Palautordera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="482">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313849.21,4615278.26 312087.31,4614893.67 311661.24,4614846.09 311693.52,4614568.36 310330.5,4614567.46 309323.59,4615011.89 308977.27,4615233.19 308512.28,4615150.61 308213.74,4615662.31 308323.61,4615612.29 308788.08,4616007.69 309650.34,4616513 309948.53,4617304.43 310027.12,4617690.17 309344.12,4618617.63 309748.57,4619148.83 309868.14,4619370.41 310652.99,4619110.01 311646.12,4620051.21 311994.17,4620673.82 312863.3,4619592.91 313525.07,4618502.05 313965.48,4617497.69 314154.87,4616742.12 313972.63,4616065.93 313849.21,4615278.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20933822.23835]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[483]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[491]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25254]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova de la Barca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova de la Barca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova de la Barca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova de la Barca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="483">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">417731.48,4612540.56 417048.63,4612124.19 415957.56,4612097.27 415408.7,4611407.61 414363.63,4611496.24 413527.77,4611035.18 413269.39,4611251.58 412561.23,4611254.27 412264.56,4611583.89 411867.9,4611770.31 411822.45,4612510.36 411522.86,4612971.36 411252.31,4613091.44 410703.91,4613620.83 409929.07,4614774.06 409642.11,4614930.7 410169.42,4615391.77 410432.55,4615196.74 410701.34,4615697.74 411497.48,4615498.68 411781.01,4615723.61 412542.18,4616156.66 412507.23,4616940.37 412162.48,4618273.3 412973.4,4618452.95 413188.64,4618593.84 413740.41,4618689 414803.59,4618761.37 415623.78,4618883.72 415909.32,4618719.49 416256.66,4618707.33 416369.6,4619250.18 417177.12,4619764.92 417260.43,4620336.58 417943.39,4620555.72 418193.69,4619905.84 418303.46,4619160.01 418664.49,4617885.37 418438.24,4616605.48 417668.91,4616246.59 417939.56,4614997.66 417343.84,4614655.96 417358.16,4614139.48 417732.91,4613078.89 417731.48,4612540.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47630117.9659]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[484]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[492]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08139]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mura]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mura]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mura]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mura]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="484">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">298274.45,4620526.29 298695.532,4620381.702 299593.97,4620436.389 300750.22,4620287.952 301144.29,4620062.82 301742.18,4619270.55 301579.75,4618708.22 301518.6,4617864.53 301054.19,4617636.37 299713.42,4617228.82 298930.65,4617263.24 298475.81,4617666.29 297824.37,4618452.99 297944.79,4619190.71 298274.45,4620526.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9987574.65426]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[485]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[493]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25189]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rossello]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rossello]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rossell¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rossell¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="485">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">466771.23,4614958.16 467332.05,4614231.02 467577.21,4614009 466662.17,4613438.93 466301.17,4612213.42 466197.85,4612209.31 465174.44,4612486.24 463589.07,4612162.63 462749.38,4612338.7 462198.56,4611748.01 461925.49,4611133.11 460930.46,4611855.61 459762.6,4612086.83 459647.9,4612322.59 458982.94,4612133.92 458333.92,4612458.43 457561.96,4612777.25 457053.15,4613432.99 456675.06,4613435.48 456668.62,4613630.57 457346.41,4614358.55 457100.01,4614561.71 456830.37,4614992.09 456484.17,4615909.33 455399.41,4617249 455715,4617507 456265.37,4617606.3 457156.2,4618734.75 457764.03,4618804.47 458535.25,4618289.93 459204.24,4618052.81 460121.48,4617547.38 460415.12,4617452.45 461852.68,4618519.49 461428.59,4619229.71 461107.87,4619878.27 460990.73,4620279.69 461400.01,4619452.56 462529.16,4618957.92 463835.52,4619553.16 464533.99,4619656 464783.17,4619486.72 466662.67,4619858.86 466467.25,4619006.42 466801.51,4618530.17 466296.06,4617515.43 465836.23,4616741.79 466204.96,4615766.75 466487.32,4615133.15 466771.23,4614958.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[65606716.78811]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[486]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[494]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08202]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Celoni]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Celoni]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Celoni]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Celoni]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="486">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">481617.04,4611164.95 480627.64,4612761.43 480532.04,4612958.4 479870.98,4614451.67 480982.91,4615330.51 481167.37,4616319.04 480653.04,4619612.62 481530.28,4620133.92 481953.33,4619720.98 482319.72,4617861.89 482613.95,4617114.44 484772.75,4615129 484770.37,4614983 484619.409,4614758.47 484108.28,4614388 484047.534,4614224.095 483721.06,4614036.5 483700.659,4613845.97 483625.659,4613764.72 483553.784,4613802.22 483500.659,4613764.72 483353.784,4613970.97 482919.409,4613742.845 482691.284,4613492.845 482128.784,4612505.345 481617.04,4611164.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18023364.77341]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[487]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[495]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[17023]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[34]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[17]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Blanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Blanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Blanes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Blanes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="487">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">304744.19,4616723.84 303410.73,4617587.43 303004.84,4617581.35 302734.595,4618459.827 302461.157,4618475.452 302398.27,4618734.18 302623.93,4618907.04 302276.44,4619008.49 301950,4618625.06 301579.75,4618708.22 301742.18,4619270.55 301823.24,4619418.97 302064.17,4619720.22 302228.95,4619424.14 303321,4619411.95 304473,4620118.56 305495.5,4619180.95 305637.91,4618612.71 305409.98,4617674.67 304744.19,4616723.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7266120.20861]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[488]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[496]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25053]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Benavent de Segria]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Benavent de Segria]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Benavent de Segri…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Benavent de Segri…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="488">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">329518.2,4615810.9 329189.07,4615870.25 329014.19,4617412.73 327021.82,4616865.97 326618.4,4616826.11 326766.31,4618803.51 327619.86,4619438.68 328619.74,4618944.72 329411.26,4618893.99 330483.58,4619245.55 331272.11,4619075.88 331548.21,4619356.5 331891.55,4619164.91 332752.26,4618876.94 333534.88,4618398.07 334872.26,4619192.18 335700.09,4620072.21 336096.46,4619816.05 333592.44,4617568.64 334516.19,4617268 334088.74,4616129.31 333579.68,4615387.83 332792.34,4614941.2 331947.53,4615011.65 329518.2,4615810.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23873188.1881]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[489]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[497]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25113]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ivars d'Urgell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ivars d'Urgell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ivars d'Urgell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ivars d'Urgell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="489">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">361619.36,4614786.87 360947.24,4615417.21 360322.17,4615531.36 360412.06,4615716.47 359469.19,4615996.27 358683.71,4616524.35 358490.86,4616784.11 358322.22,4617118.62 360968.15,4619164.03 361087.36,4619611.03 361258.02,4619672.16 361476.25,4619671.15 362460,4618859.08 362876.99,4618843.73 363026.64,4618253.5 364018.03,4618724.04 364890.846,4618756.702 365312.721,4618475.452 365325.25,4617764.41 364548.25,4616814.91 364347.18,4615699.69 363740.54,4615771.99 363613.61,4615979.42 363082.5,4615908.31 361619.36,4614786.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18913523.11689]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[490]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[498]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25152]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Oluges, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Oluges, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Oluges, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Oluges, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="490">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">376636.8,4619190.51 376824.26,4618627.31 376689.24,4617676.44 376554.41,4617325 374254.57,4617385.27 374073.92,4617761.56 374250.48,4618622.18 376636.8,4619190.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3974050.69795]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[491]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[499]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08228]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti Sesgueioles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti Sesgueioles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ Sesgueioles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ Sesgueioles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="491">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">393948.44,4610965.88 393573.82,4610555.46 393115.01,4610173.61 392761.54,4609760.96 392756.06,4609484.41 392191.52,4608889 391859.86,4608495.8 391133.83,4608839.08 390335.07,4608645.92 390230.7,4608582.93 388804.45,4610977.67 389091.39,4611758.6 388318.35,4612618.35 387675,4612538.35 387068.72,4612418.72 387044.34,4611450 386766.72,4611375 386080.94,4612717 385931.14,4613464.58 386326.08,4614049.64 385608.52,4614571.24 385845.43,4615273.04 385235.46,4615472.69 385234.55,4615962.58 385546.52,4616575.92 384875.87,4617169.85 384856.45,4617901.84 385394.64,4617815.99 385819.96,4618260.59 386717.71,4618333.88 387438,4618311 387433,4618795 387642.36,4618769.88 387991.82,4619083.98 389088.4,4618578.43 389275.87,4617640.16 389581.64,4617404.04 389762.39,4616723.75 390431.29,4616704.46 390778.84,4616129.4 392131.84,4616906.31 392501.11,4617048.4 393571.04,4616998.15 394091.2,4617170.98 394179.11,4616837.77 394795.19,4616840.23 394514.66,4616075.64 394561.01,4614950.22 395048.99,4614455.2 394866.34,4613751.51 392035.18,4612044.51 393948.44,4610965.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[59190667.42086]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[492]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[500]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08059]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellfollit del Boix]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellfollit del Boix]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellfollit del Boix]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellfollit del Boix]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="492">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">442160.97,4613823.04 440718.63,4612415.96 439979.93,4612221.24 439733.03,4613308.93 438788.17,4614259.78 438585.65,4614784.25 437955.17,4615355.32 438608.4,4617314.09 439240.46,4618432.23 440122.57,4618540.61 440378.26,4618244.97 440613.98,4618724.39 441201.27,4619028.02 442687.48,4617789.52 441762.46,4617321.95 442037.56,4616648.02 441873.02,4615523.3 441797.88,4614307.68 442160.97,4613823.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18911409.9486]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[493]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[501]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08088]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Garriga, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Garriga, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Garriga, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Garriga, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="493">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">304744.19,4616723.84 304823.71,4616349.04 305184.34,4615666.08 305091.06,4615083.28 303897.33,4615635.77 302863.73,4615702.56 302162.99,4616213.51 301760.8,4616203.5 301686.1,4617099.42 301914.282,4617131.702 302332.98,4616817.58 302437.72,4616944.202 302249.63,4617280.22 302229.07,4617847.84 302039.97,4618436.85 301950,4618625.06 302276.44,4619008.49 302623.93,4618907.04 302398.27,4618734.18 302461.157,4618475.452 302734.595,4618459.827 303004.84,4617581.35 303410.73,4617587.43 304744.19,4616723.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5867312.35165]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[494]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[502]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25233]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torre-serona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torre-serona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torre-serona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torre-serona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="494">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">294425.92,4617074.04 295874.85,4618262.5 296432.19,4618972.2 297824.37,4618452.99 297476.73,4617862.94 298079.46,4616974.67 299165.66,4616269.5 298958.96,4615824.7 298712.59,4615473.74 298399.27,4615344.58 298456.17,4614923.66 298761.57,4614342.67 298222.91,4614443.01 297638.58,4614314.75 297640.19,4613737.9 294931.8,4615053.41 294123.72,4615931.03 294425.92,4617074.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14945348.15805]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[495]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[503]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25023]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alpicat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alpicat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alpicat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alpicat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="495">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428318,4615943.19 427941.8,4615472.08 427737.79,4614862.57 427958.05,4613597.75 426792.02,4613659.38 426251.29,4613392.34 425980.01,4613929.23 425415.46,4614761.51 424955.35,4615026.92 424642.66,4616155.02 424076.45,4616545.27 424050.68,4617569.63 424135.27,4617964.58 424925.27,4618100.44 425144.59,4618610.87 426132.16,4618967.41 427258.7,4618414.91 427979.43,4618762.32 428002.75,4618097.92 428419.71,4616362.83 428318,4615943.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16450715.0514]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[496]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[504]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08087]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gallifa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gallifa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gallifa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gallifa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="496">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">418664.49,4617885.37 418798.67,4617960.73 419446.47,4618738.98 419847.34,4618951.41 420665.5,4618546.71 421476.54,4618429.57 422338.59,4618438.59 422945.5,4618351.12 423728.26,4618203.58 424135.27,4617964.58 424050.68,4617569.63 424076.45,4616545.27 424642.66,4616155.02 424955.35,4615026.92 425415.46,4614761.51 425980.01,4613929.23 426251.29,4613392.34 425463.31,4613017.06 424908.89,4612562.21 424360,4612634.44 424204.6,4612829.03 423942.55,4613347.65 422824.87,4613069.71 421803.5,4612455.46 420230.1,4611926.44 419612.37,4612143.79 418911.12,4612322.46 418015.74,4612348.59 417768.89,4612245.96 417731.48,4612540.56 417732.91,4613078.89 417358.16,4614139.48 417343.84,4614655.96 417939.56,4614997.66 417668.91,4616246.59 418438.24,4616605.48 418664.49,4617885.37</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[41129414.11845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[497]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[505]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08223]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Llorenc Savall]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Llorenc Savall]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Lloren‡ Savall]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Lloren‡ Savall]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="497">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">432570.43,4618667.87 432385.26,4617030.59 432541,4616199.01 431692.74,4615302.02 431037,4614931 430600.5,4614481.76 430079.48,4614631.53 429482.66,4614466.91 428318,4615943.19 428419.71,4616362.83 428002.75,4618097.92 427979.43,4618762.32 428623.71,4618579.49 430729.68,4618443.98 431299.09,4618516.22 432400.59,4618924.66 432570.43,4618667.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14992678.21895]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[498]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[506]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08210]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Feliu de Codines]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Feliu de Codines]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Feliu de Codines]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Feliu de Codines]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="498">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">399219.47,4612171.57 398474.78,4612207.75 397843.74,4612160.2 397369.49,4611606.47 396478.72,4611231.21 394202.8,4611477.38 393948.44,4610965.88 392035.18,4612044.51 394866.34,4613751.51 395048.99,4614455.2 394561.01,4614950.22 394514.66,4616075.64 394795.19,4616840.23 395624.81,4617437.3 396374.77,4617819.67 397502.41,4618511.36 398410.9,4618663.95 399183.63,4618836.55 399287.48,4618407.13 399628.74,4618208.97 400340,4616434 401009,4616209 401476.67,4615898.9 400479.02,4615453.63 399833.38,4614905.47 399976.28,4614211.49 399544.28,4613330.36 399391.96,4612931.93 399219.47,4612171.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37288131.93915]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[499]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[507]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08098]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Salvador de Guardiola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Salvador de Guardiola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Salvador de Guardiola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Salvador de Guardiola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="499">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437008.95,4617286.91 436421.51,4616591.74 436794.27,4616135.89 436652.75,4615869.53 437132.75,4615300.25 437308.46,4614512.39 436368,4613591 436025.85,4613112.86 435762.99,4613120.23 435760.53,4612820.39 434130.76,4612500.53 433768.89,4613265.42 433242.85,4612811.85 433188.49,4612138.13 432998.09,4611674.81 432459.91,4611482 431644.23,4612465.21 430667.93,4612293.46 430495.27,4612461.3 430536.14,4614221.53 430600.5,4614481.76 431037,4614931 431692.74,4615302.02 432541,4616199.01 432385.26,4617030.59 432570.43,4618667.87 432871,4618598 433120,4617906 433318,4617618 434259.14,4617843.62 434498,4618019 434715.94,4617768.58 434693.1,4617403.14 436651.78,4618009.3 436885.65,4617528.97 437008.95,4617286.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28392759.6899]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[500]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[508]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08023]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bigues i Riells]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bigues]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bigues i Riells]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bigues]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="500">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">455399.41,4617249 456484.17,4615909.33 456830.37,4614992.09 457100.01,4614561.71 457346.41,4614358.55 456668.62,4613630.57 456675.06,4613435.48 456145.55,4613356.96 455724.83,4613046.78 453828.58,4612039.83 454201.18,4613126.39 454054.53,4613539.79 452822.5,4614142.22 452300.29,4614211.79 452705.63,4615003.88 452241.3,4615661.61 451498.06,4616455.46 452041.62,4616371.75 452269.74,4616213.44 453247.57,4617050.02 453556.76,4616902.79 454190.33,4617395.29 453936.04,4617929.58 454098.19,4618142.97 454289.89,4617843.3 455399.41,4617249</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16559079.60355]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[501]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[509]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08259]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Maria de Palautordera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Maria de Palautordera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Maria de Palautordera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Maria de Palautordera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="501">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">334516.19,4617268 334815.26,4617857.9 335308.08,4618110.07 336001.1,4617722.83 336516.98,4617434.61 336983.12,4617259.22 337035.49,4616858.51 336451.83,4616234.17 335911.49,4616149.37 335963.77,4615923.57 335788.15,4615774.4 335718.42,4615355.99 334711.49,4615933.18 334088.74,4616129.31 334516.19,4617268</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338221.27,4616592.44 340335.08,4618753.28 340607.67,4618517.08 341958.16,4619007.57 342062.04,4618713.04 340000,4617081.79 338842.96,4616542.47 338523.2,4616363.55 338221.27,4616592.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[7685024.90495]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[502]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[510]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25041]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Barbens]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Barbens]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Barbens]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Barbens]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="502">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">336516.98,4617434.61 337052.34,4617917.04 338221.27,4616592.44 338523.2,4616363.55 340907.29,4615802.75 342578.346,4617065.296 342798.58,4616971.24 341231.1,4615730.36 341370.56,4615549.41 341165.73,4614518.54 341298.91,4613436.11 340216.05,4612415.55 337173.64,4611345.95 337028.18,4611328.72 336632.15,4612224.2 335966.73,4613537.9 336023.87,4615006.05 335718.42,4615355.99 335788.15,4615774.4 335963.77,4615923.57 335911.49,4616149.37 336451.83,4616234.17 337035.49,4616858.51 336983.12,4617259.22 336516.98,4617434.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23103862.26567]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[503]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[511]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25027]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Anglesola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Anglesola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Anglesola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Anglesola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="503">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">326140.56,4616509.97 325882.37,4615154.28 324358.52,4615139.28 323568.06,4614836.5 322898.13,4615460.15 322486.44,4615663.14 321974.38,4615194.59 320144,4615792.43 320411.56,4616735.85 321056.05,4617168.45 320947.46,4617839.23 321791.4,4617874.31 322367.79,4617173.77 322346.04,4616652.94 323267.44,4616505.76 324026.07,4616829.99 323966.24,4616350.8 326140.56,4616509.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9001664.3369]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[504]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[512]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25168]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Poal, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Poal, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Poal, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Poal, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="504">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323568.06,4614836.5 324358.52,4615139.28 325882.37,4615154.28 326140.56,4616509.97 326618.4,4616826.11 327021.82,4616865.97 329014.19,4617412.73 329189.07,4615870.25 329518.2,4615810.9 329098.1,4613685.38 328850.45,4611985.16 327716.74,4612414.07 327307.33,4612667.12 324860.28,4612439.91 324638.34,4612438.15 324731.7,4613097.07 323568.06,4614836.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19169387.68015]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[505]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[513]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25252]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vila-sana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vila-sana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vila-sana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vila-sana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="505">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438277.37,4610181.91 437391.24,4610339.86 437461.98,4611432.48 437142.19,4611849.11 437078.61,4612611.96 436285.07,4612939.6 436025.85,4613112.86 436368,4613591 437308.46,4614512.39 437132.75,4615300.25 436652.75,4615869.53 436794.27,4616135.89 436421.51,4616591.74 437008.95,4617286.91 437621.44,4616413.88 437955.17,4615355.32 438585.65,4614784.25 438788.17,4614259.78 439733.03,4613308.93 439979.93,4612221.24 439782.07,4610746.11 439952.63,4609743.25 438661.41,4610201.83 438277.37,4610181.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14386270.25005]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[506]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[514]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08005]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ametlla del Valles, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ametlla del Valles, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ametlla del VallŠs, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ametlla del VallŠs, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="506">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">378266.52,4609295.29 378425.59,4610079.1 378466.27,4611251.79 379100.96,4613008.45 379369.46,4613628.97 379781.28,4613959.57 381204.61,4614589.15 382069.66,4615798.93 381955.21,4616037.85 382403.69,4616363.31 383554.26,4616735.81 383822,4616789 383994,4616802 384875.87,4617169.85 385546.52,4616575.92 385234.55,4615962.58 385235.46,4615472.69 385845.43,4615273.04 385608.52,4614571.24 386326.08,4614049.64 385931.14,4613464.58 385637.39,4613492.77 383723.33,4613076.39 383626.83,4612195.97 382808.55,4611442.97 383548.75,4609582.84 383026.83,4608632.98 381845.15,4608694.45 381358.86,4608539.02 381246.59,4608922.6 379725.36,4608009.44 378715.03,4608569.41 378266.52,4609295.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38246280.0878]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[507]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[515]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08185]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rubio]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rubio]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rubi¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rubi¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="507">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">342798.58,4616971.24 343218.48,4615997.59 344102.2,4615412.83 342446.52,4614101.92 342528.01,4613618.94 342900.73,4613131.39 342713.87,4612685.58 342691.29,4611767.16 342420.06,4611564.52 341846.09,4611708.86 341473.94,4610391.88 341744.51,4609553.87 340905.08,4608503.2 340040.81,4608548.52 339731.94,4609086.62 339141.33,4609111.42 339077.31,4609504.04 338451.93,4610068.22 337975.12,4610225.45 338128.4,4610794.32 337010.62,4610759.69 337173.64,4611345.95 340216.05,4612415.55 341298.91,4613436.11 341165.73,4614518.54 341370.56,4615549.41 341231.1,4615730.36 342798.58,4616971.24</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20113377.4918]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[508]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[516]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25244]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilagrassa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilagrassa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilagrassa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilagrassa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="508">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">400927.32,4612773.28 400152.83,4612756.85 399219.47,4612171.57 399391.96,4612931.93 399544.28,4613330.36 399976.28,4614211.49 399833.38,4614905.47 400479.02,4615453.63 401476.67,4615898.9 401009,4616209 401180,4616693 401396.878,4616722.645 401701.05,4616538.04 402507.83,4616940.9 402826.4,4616592.49 403198.17,4616615.04 403404.86,4616374.31 403798.16,4616772.96 404264.065,4616589.832 405102.97,4616539.48 405941.29,4616044.36 406034.4,4615474.15 405855.14,4615138.67 404964.09,4614753.75 404726.14,4614568.54 404561.23,4613909.08 403526.14,4613629.27 403159.63,4613141.86 402250.89,4613328.21 401695.11,4612906.71 400927.32,4612773.28</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17448476.61346]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[509]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[517]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08061]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellgali]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellgali]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellgal¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellgal¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="509">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">353569.92,4611266.89 351332.85,4610556.25 349029.3,4609367 349319.95,4610917.75 349150.47,4612763.92 349640.31,4612922.63 349428.55,4613669.84 349582.75,4613949.38 349326.25,4615046.25 349386.03,4615393.28 349822.43,4615269.64 350179.93,4615854.89 350897.06,4615678.9 351628.69,4616538.85 352744.38,4616684.99 352895.68,4616453.95 354041.3,4615745.42 353886.95,4614763.12 353087.59,4613826.09 353081.93,4612957.18 353788.99,4611561.92 353569.92,4611266.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23522676.89075]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[510]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[518]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25103]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granyanella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granyanella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granyanella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granyanella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="510">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365823.25,4610267.17 365182.12,4610475.4 364604.32,4612135.3 365094.34,4614714.19 364816.56,4615062.32 365228.83,4615393.98 366171.02,4615493.9 367234.27,4616400.32 368750,4616176.93 368501.3,4615320.55 368224.37,4615099.18 369091.89,4614568.6 369029.8,4613605.34 369469.02,4612840.66 370318.48,4611979.74 371051.49,4611863.42 370902.95,4610777.73 370350.77,4610632.33 369873.64,4610616.2 369454.59,4610367.23 369394.69,4610023.11 368641.36,4610619.64 366188.17,4610623.9 365823.25,4610267.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25375519.9413]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[511]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[519]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25192]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Guim de Freixenet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Guim de Freixenet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Guim de Freixenet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Guim de Freixenet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="511">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">401928.47,4612489.82 401614.81,4612648.57 400927.32,4612773.28 401695.11,4612906.71 402250.89,4613328.21 403159.63,4613141.86 403526.14,4613629.27 404561.23,4613909.08 404726.14,4614568.54 404964.09,4614753.75 405855.14,4615138.67 406034.4,4615474.15 405941.29,4616044.36 406249.83,4616244.8 407145.52,4615729.28 407916.64,4615518.68 408192.01,4615472.07 408868,4614718.03 409417.09,4614959.92 409642.11,4614930.7 409929.07,4614774.06 410703.91,4613620.83 411252.31,4613091.44 410908.72,4612623.41 410001.82,4613481.34 408955.87,4613168.6 408224.21,4612424.62 408054.31,4612320.52 407986.38,4612388.46 408177.65,4613095.88 407765.67,4613202.61 407980.06,4613539.01 407276.13,4613436.82 407020.84,4612963.19 405183.96,4612522.79 404365.61,4612364.4 401928.47,4612489.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16650961.4332]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[512]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[520]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08262]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Vicenc de Castellet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Vicenc de Castellet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Vicen‡ de Castellet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Vicen‡ de Castellet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="512">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">331118.43,4606363.56 331343.69,4606656.3 331247.04,4607203.48 331439.69,4607649.43 331133.46,4608319.05 331420.09,4609008.91 330987.2,4609257.94 331157.49,4609854.65 330775,4610143.35 330948.24,4610837.63 331252.1,4610765.55 331520.76,4611449.7 331907.7,4611516.59 332223.65,4611689.48 332406.63,4612008.58 332703.81,4612998.34 333539.84,4613224.22 334057.21,4614994.56 333579.68,4615387.83 334088.74,4616129.31 334711.49,4615933.18 335718.42,4615355.99 336023.87,4615006.05 335966.73,4613537.9 336632.15,4612224.2 337028.18,4611328.72 337173.64,4611345.95 337010.62,4610759.69 338128.4,4610794.32 337975.12,4610225.45 337848.78,4610276.34 336917.51,4609712.35 336782.9,4609449.69 336547.34,4609382.35 336127.53,4609547.35 336035.12,4609342.41 335372.77,4609472.63 334571.13,4608451.68 334030.2,4607109.97 333598.51,4606132.28 333270.83,4606307.87 333736.43,4607323.05 333456.86,4607429.94 332867.76,4606535.38 332446.6,4606718.95 331763.48,4605784.35 331416.11,4605780.87 331198.5,4606311.5 331118.43,4606363.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34923074.8972]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[513]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[521]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25050]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellpuig]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellpuig]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellpuig]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellpuig]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="513">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433766.17,4609138.61 433299.97,4608915.75 433386.91,4607608.74 432658.65,4607208.25 432290.48,4607093.95 432430.18,4606625.74 432153.46,4606383.83 430503.54,4606006.98 429873.62,4608209.31 428829.94,4609554.29 428499.15,4609934.66 428072.41,4610249.85 427803.19,4610301.43 427105.82,4610658.52 426760.7,4611002.72 426496.51,4610917.84 426175.74,4611245.92 425664.31,4612102.15 424908.89,4612562.21 425463.31,4613017.06 426251.29,4613392.34 426792.02,4613659.38 427958.05,4613597.75 427737.79,4614862.57 427941.8,4615472.08 428318,4615943.19 429482.66,4614466.91 430079.48,4614631.53 430600.5,4614481.76 430536.14,4614221.53 430495.27,4612461.3 430667.93,4612293.46 431644.23,4612465.21 432459.91,4611482 433025.45,4610881.91 433747.69,4609303.07 433766.17,4609138.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37441827.65191]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[514]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[522]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08033]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Caldes de Montbui]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Caldes de Montbui]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Caldes de Montbui]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Caldes de Montbui]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="514">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">480532.04,4612958.4 479797.68,4612407.92 479254.46,4612094.76 478566.44,4612345.41 478430.32,4612050.06 477679.61,4611848.24 476900.78,4611461.07 476336.88,4611368.74 475860.65,4611578.16 475516.85,4611951.9 474614.73,4613453.17 476625.32,4615165.99 477066.7,4615770.66 477502.72,4615921.1 478428.4,4615568.44 479628.07,4614964.46 479870.98,4614451.67 480532.04,4612958.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16539703.186]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[515]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[523]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08155]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palafolls]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palafolls]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palafolls]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palafolls]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="515">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310927.81,4612165.67 309650.22,4611957.9 308620.24,4611383.96 307868.17,4611978.7 306753.91,4611689.67 305832.1,4611990.24 306621.2,4613097.06 305282.71,4614243.83 305326.71,4614706.2 306174.48,4614592.69 306909.98,4615333.57 307417.91,4615375.15 308050.36,4615811.74 308213.74,4615662.31 308512.28,4615150.61 308977.27,4615233.19 309323.59,4615011.89 310330.5,4614567.46 311693.52,4614568.36 311657.78,4613720.95 311283.51,4613235.29 310927.81,4612165.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17159088.2964]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[516]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[524]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25012]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alcoletge]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alcoletge]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alcoletge]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alcoletge]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="516">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">330948.24,4610837.63 330171.9,4610875.99 328850.45,4611985.16 329098.1,4613685.38 329518.2,4615810.9 331947.53,4615011.65 332792.34,4614941.2 333579.68,4615387.83 334057.21,4614994.56 333539.84,4613224.22 332703.81,4612998.34 332406.63,4612008.58 332223.65,4611689.48 331907.7,4611516.59 331520.76,4611449.7 331252.1,4610765.55 330948.24,4610837.63</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16605300.92946]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[517]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[525]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25068]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellnou de Seana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellnou de Seana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellnou de Seana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellnou de Seana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="517">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323974.99,4612198.03 322197.32,4612234.2 321366,4612117.39 319333.49,4612010.13 318511.82,4612045.4 319030.86,4612607.55 321117.13,4613906.68 321974.38,4615194.59 322486.44,4615663.14 322898.13,4615460.15 323568.06,4614836.5 324731.7,4613097.07 324638.34,4612438.15 323974.99,4612198.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11633133.4277]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[518]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[526]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25158]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palau d'Anglesola, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palau d'Anglesola, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palau d'Anglesola, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palau d'Anglesola, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="518">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">318690.09,4609495.27 318130.04,4609499.44 315190.89,4608884.99 313949.79,4606609.31 313464.15,4606571.71 313387.43,4607653.08 312531.41,4611174.95 311324.22,4611558.27 310897.31,4611818.22 310927.81,4612165.67 311283.51,4613235.29 311657.78,4613720.95 311693.52,4614568.36 311661.24,4614846.09 312087.31,4614893.67 313849.21,4615278.26 315486.46,4613988.21 316738.28,4613108.53 317295.4,4613098.78 319030.86,4612607.55 318511.82,4612045.4 317879.17,4611846.96 317328.55,4610442.71 318594.21,4610297.54 318690.09,4609495.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34913005.9446]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[519]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[527]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25048]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bell-lloc d'Urgell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bell-lloc d'Urgell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bell-lloc d'Urgell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bell-lloc d'Urgell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="519">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">439952.63,4609743.25 439782.07,4610746.11 439979.93,4612221.24 440718.63,4612415.96 442160.97,4613823.04 443089.13,4613871.91 443356.9,4614064.24 444314.76,4615205.29 445174.69,4615137.32 445822,4613950.9 445782.76,4612499.95 445168.36,4612170.27 445046.58,4611151.33 444296.76,4609662.21 443542.31,4608339.08 443238.53,4607723.7 443354.46,4607198.62 442636.31,4606631.26 441988.71,4606631.41 441917.23,4607408.33 441302.96,4607621.32 441257.97,4608276.58 440888.35,4608324.34 440769.92,4608254.54 440875.8,4609205.74 439952.63,4609743.25</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29324962.43885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[520]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[528]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08086]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Franqueses del Valles, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Corro d'Avall]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Franqueses del VallŠs, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Corr¢ d'Avall]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="520">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">374335.67,4610353.22 374087.06,4611073.92 372026.16,4611539.41 371480.54,4611434.15 371051.49,4611863.42 370318.48,4611979.74 369469.02,4612840.66 370374.19,4613127.07 372908.99,4612295.12 374040.83,4611637.11 375770.39,4612272.57 375364.12,4612846.77 375411.9,4613279.38 376540.76,4613277.97 376635.65,4613515.91 377540.66,4613179.29 377555.51,4613532.33 377346.73,4613787.13 377741,4615172 379781.28,4613959.57 379369.46,4613628.97 379100.96,4613008.45 378466.27,4611251.79 378425.59,4610079.1 378266.52,4609295.29 377009.65,4608651.57 376497.54,4608847.14 375946.4,4609720.61 375459.12,4610071.29 374335.67,4610353.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22216184.29851]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[521]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[529]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08071]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Copons]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Copons]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Copons]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Copons]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="521">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">448038.52,4610041.39 447708.46,4610738.91 447267.29,4613514.93 448465.03,4613539.59 449987.7,4614282.9 452180.58,4614097.77 452095.11,4613143.18 451911.29,4612753.53 452132.18,4612290.51 451372.03,4611368.37 450981.29,4610695.56 449893.96,4611399.98 449182.32,4611262.71 448900.56,4610619.7 448038.52,4610041.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13577025.9468]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[522]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[530]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08198]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Antoni de Vilamajor]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Antoni de Vilamajor]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Antoni de Vilamajor]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Antoni de Vilamajor]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="522">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">448038.52,4610041.39 448900.56,4610619.7 449182.32,4611262.71 449893.96,4611399.98 450981.29,4610695.56 451372.03,4611368.37 452132.18,4612290.51 451911.29,4612753.53 452095.11,4613143.18 452180.58,4614097.77 452300.29,4614211.79 452822.5,4614142.22 454054.53,4613539.79 454201.18,4613126.39 453828.58,4612039.83 453772.17,4611985.22 453577.07,4612198.94 453102.04,4611804.36 453164.04,4611142.4 453351.87,4610998.34 454165.71,4610144.94 454445.78,4609902.35 454800.02,4609356.39 454710.26,4609182.52 454236.65,4608716.91 454118.75,4609112.58 453555.1,4609132.81 453005.25,4608949.97 452656.37,4609032.33 452075.01,4609080.84 451886.6,4608994.68 451697.76,4608608.6 451392.96,4608629.37 450602.15,4607294.5 450190.61,4606733.4 450011.96,4606679.31 449613.4,4606714.65 449018.53,4605858.65 448692.62,4605784.04 448675.39,4605484.13 448132.52,4605621.85 448094.55,4606519.98 446872.12,4608066.11 447323.26,4608536.2 448038.52,4610041.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27252960.56834]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[523]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[531]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08106]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llinars del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llinars del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llinars del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llinars del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="523">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">448038.52,4610041.39 447323.26,4608536.2 446872.12,4608066.11 446053.06,4607740.12 445750.759,4608043.245 445524.197,4608426.058 445546.52,4608763.94 445680.447,4608761.995 445700.57,4608504.5 446594.509,4608605.745 446556.5,4608806.34 446688.259,4609301.058 446506.31,4609513.36 446203.77,4609585.99 446041.39,4609789.92 445359.56,4609574.43 445501.35,4609333.46 444532.03,4609536.6 444296.76,4609662.21 445046.58,4611151.33 445168.36,4612170.27 445782.76,4612499.95 445822,4613950.9 446227,4613973 447267.29,4613514.93 447708.46,4610738.91 448038.52,4610041.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12149172.37596]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[524]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[532]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08046]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cardedeu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cardedeu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cardedeu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cardedeu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="524">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">475392.34,4608355 474764.5,4609765.39 474228.23,4610257.64 473566.89,4611182.7 472741.88,4611755.91 472057.95,4612107.69 471837.48,4612531.72 471769.71,4612798.13 472371.57,4612804.38 474055.55,4613554.26 474614.73,4613453.17 475516.85,4611951.9 475860.65,4611578.16 476336.88,4611368.74 477448.06,4609511.5 477227.87,4609372.01 476728.784,4608936.595 476325.659,4608805.345 475392.34,4608355</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12442111.35453]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[525]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[533]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08261]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Susanna]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Susanna]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Susanna]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Susanna]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="525">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">402729.75,4608887.84 400821.44,4609522.31 400736.89,4608674.64 400455.9,4607969.78 400219.99,4607969.78 400523.5,4609640.96 400598.04,4611570.68 400698.68,4611826.31 401053.2,4611857.84 401220.05,4612008.51 402134.52,4611730.5 401933.22,4612319.43 401928.47,4612489.82 404365.61,4612364.4 405183.96,4612522.79 407020.84,4612963.19 407276.13,4613436.82 407980.06,4613539.01 407765.67,4613202.61 408177.65,4613095.88 407986.38,4612388.46 408054.31,4612320.52 407417.51,4611491.65 407654.4,4611307.67 407705.24,4609431.61 407910.18,4608263.18 407222.6,4607716.07 406138.08,4607502.66 405493.71,4608175.05 405351.34,4608313.66 405056.63,4608974.57 404141.1,4608732.9 402729.75,4608887.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28744978.2318]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[526]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[534]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08053]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellbell i el Vilar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Borras, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellbell i el Vilar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Borr…s, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="526">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">389521.89,4604851.58 389298.08,4604656 388731.22,4604497.33 388631.14,4603748.75 387917.39,4603451.15 386457.99,4604006.46 386278.53,4603854.72 386616.82,4604853.03 386174.63,4605208.44 386252.22,4605484.54 386667.97,4605757.02 386228.84,4605961.84 385668.9,4606528.91 385278.2,4606221.81 384838.27,4605780.46 384209.48,4605596.77 383649.86,4605327.54 382940.2,4605460.11 382501.18,4605918.79 381007.16,4607203.21 381358.86,4608539.02 381845.15,4608694.45 383026.83,4608632.98 383548.75,4609582.84 382808.55,4611442.97 383626.83,4612195.97 383723.33,4613076.39 385637.39,4613492.77 385931.14,4613464.58 386080.94,4612717 386766.72,4611375 387044.34,4611450 387068.72,4612418.72 387675,4612538.35 388318.35,4612618.35 389091.39,4611758.6 388804.45,4610977.67 390230.7,4608582.93 389455.56,4607614.82 389329.15,4606927.2 389518.74,4605610.96 389288.52,4605105.46 389521.89,4604851.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[53064233.8596]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[527]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[535]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08143]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Odena]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Odena]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[ãdena]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[ãdena]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="527">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">413269.39,4611251.58 413364.88,4610723.24 413117.73,4610936.82 412176.08,4610054.26 411791.07,4608867.51 410903.2,4608795.15 409869.86,4609311.06 408973.42,4609351.53 408433.81,4608804.16 408016.56,4608301.02 407910.18,4608263.18 407705.24,4609431.61 407654.4,4611307.67 407417.51,4611491.65 408054.31,4612320.52 408224.21,4612424.62 408955.87,4613168.6 410001.82,4613481.34 410908.72,4612623.41 411252.31,4613091.44 411522.86,4612971.36 411822.45,4612510.36 411867.9,4611770.31 412264.56,4611583.89 412561.23,4611254.27 413269.39,4611251.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18018635.93079]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[528]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[536]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08179]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rellinars]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rellinars]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rellinars]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rellinars]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="528">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">453828.58,4612039.83 455724.83,4613046.78 456145.55,4613356.96 456675.06,4613435.48 457053.15,4613432.99 457561.96,4612777.25 458333.92,4612458.43 458982.94,4612133.92 459647.9,4612322.59 459762.6,4612086.83 460930.46,4611855.61 461925.49,4611133.11 461527.46,4610299.13 461293.31,4610111.06 461387.23,4609730.45 461283.09,4609346.07 460891.75,4608992.97 460312.75,4608549.78 459892.79,4608631.52 459181.1,4608461.43 458718.5,4608438.77 458433.39,4608362.92 458187.37,4608356.98 457872.4,4608366.57 457220.65,4609032.22 457343.44,4609233.46 457461.1,4609968.77 457091.39,4610632.69 456286.63,4610907.06 456161.6,4610558.36 455381.47,4610518.85 454932,4610763.99 454623.81,4610865.2 454084.95,4611434.17 453828.58,4612039.83</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22191502.11845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[529]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[537]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08294]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallgorguina]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallgorguina]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallgorguina]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallgorguina]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="529">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">421964.07,4604671.64 421342.63,4605629.76 420401.69,4606425.14 420644.48,4606941.79 420358.08,4607206.83 419785.17,4608492.58 418976.75,4609326.85 420230.1,4611926.44 421803.5,4612455.46 422824.87,4613069.71 423942.55,4613347.65 424204.6,4612829.03 424360,4612634.44 424504.32,4611919.98 424923.82,4611482.79 424953.15,4609994.24 425703.9,4608342.22 426337.48,4607872.07 426399.06,4607540.76 426108.54,4607159.67 426606.52,4606461.96 426562.13,4605152.31 426520.73,4604866.14 425599.24,4604983.62 425569.17,4604524.09 425461.77,4604459.62 424047.68,4604129.74 423852.79,4603844.74 423380.39,4604116.93 421964.07,4604671.64</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[44893945.28425]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[530]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[538]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08051]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellar del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellar del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellar del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellar del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="530">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433766.17,4609138.61 433747.69,4609303.07 433025.45,4610881.91 432459.91,4611482 432998.09,4611674.81 433188.49,4612138.13 433242.85,4612811.85 433768.89,4613265.42 434130.76,4612500.53 435760.53,4612820.39 435762.99,4613120.23 436025.85,4613112.86 436285.07,4612939.6 437078.61,4612611.96 437142.19,4611849.11 437461.98,4611432.48 437391.24,4610339.86 438277.37,4610181.91 438152.67,4609183.33 437362.32,4609373.56 436108.51,4609377.07 435501.82,4609824.82 434873.78,4609747.9 434703.77,4609580.79 433766.17,4609138.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14679271.12954]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[531]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[539]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08248]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Eulalia de Roncana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sagrera, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Eul…lia de Ron‡ana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sagrera, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="531">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">481617.04,4611164.95 481463.159,4610953.783 481322.46,4610848.5 479588.159,4610528.783 478987.62,4610333.13 477448.06,4609511.5 476336.88,4611368.74 476900.78,4611461.07 477679.61,4611848.24 478430.32,4612050.06 478566.44,4612345.41 479254.46,4612094.76 479797.68,4612407.92 480532.04,4612958.4 480627.64,4612761.43 481617.04,4611164.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8673215.56048]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[532]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[540]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08110]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Malgrat de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Malgrat de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Malgrat de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Malgrat de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="532">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">402729.75,4608887.84 402029.09,4608269.75 402081.81,4607615.43 402569.37,4607629.48 402047.08,4606325.04 401045.27,4606847.97 400226.48,4606995.69 398982.58,4607651.58 399048.73,4608967.97 399205.64,4609581.96 399392.07,4610628.54 398493.89,4610902.76 398344.97,4611532.56 398474.78,4612207.75 399219.47,4612171.57 400152.83,4612756.85 400927.32,4612773.28 401614.81,4612648.57 401220.05,4612008.51 401053.2,4611857.84 400698.68,4611826.31 400598.04,4611570.68 400523.5,4609640.96 400219.99,4607969.78 400455.9,4607969.78 400736.89,4608674.64 400821.44,4609522.31 402729.75,4608887.84</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13387786.00335]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[533]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[541]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08242]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Marganell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Marganell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Marganell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Marganell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="533">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327407.12,4607761.55 326898.97,4608242.02 326191.89,4608384.54 325475.26,4609069.58 325273.31,4609538.11 325569.96,4610660.36 325364.05,4611943.73 324860.28,4612439.91 327307.33,4612667.12 327716.74,4612414.07 328850.45,4611985.16 330171.9,4610875.99 329528.99,4610501.28 328789.32,4608616.65 328148.09,4607696.92 327407.12,4607761.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16338881.5019]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[534]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[542]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25099]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Golmes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Golmes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Golm‚s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Golm‚s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="534">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">405493.71,4608175.05 405274.08,4607597.32 405424.45,4605912.85 405342.82,4605351.96 404413.48,4605235.6 402761.4,4605256.78 401684.47,4606179.63 401202.17,4606691.83 401045.27,4606847.97 402047.08,4606325.04 402569.37,4607629.48 402081.81,4607615.43 402029.09,4608269.75 402729.75,4608887.84 404141.1,4608732.9 405056.63,4608974.57 405351.34,4608313.66 405493.71,4608175.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">401220.05,4612008.51 401614.81,4612648.57 401928.47,4612489.82 401933.22,4612319.43 402134.52,4611730.5 401220.05,4612008.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[11727244.31631]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[535]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[543]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08127]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[07]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Monistrol de Montserrat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Monistrol de Montserrat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Monistrol de Montserrat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Monistrol de Montserrat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="535">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">430503.54,4606006.98 429672.7,4605097.1 429558.43,4603915.24 429447.34,4603554.07 429433.7,4603342.59 429315.73,4603318.72 428390.37,4603083.96 427222.56,4603163.05 426561.69,4603435.26 426448.49,4604198.62 426569.57,4604792.36 426520.73,4604866.14 426562.13,4605152.31 426606.52,4606461.96 426108.54,4607159.67 426399.06,4607540.76 426337.48,4607872.07 425703.9,4608342.22 424953.15,4609994.24 424923.82,4611482.79 424504.32,4611919.98 424360,4612634.44 424908.89,4612562.21 425664.31,4612102.15 426175.74,4611245.92 426496.51,4610917.84 426760.7,4611002.72 427105.82,4610658.52 427803.19,4610301.43 428072.41,4610249.85 428499.15,4609934.66 428829.94,4609554.29 429873.62,4608209.31 430503.54,4606006.98</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28564628.47669]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[536]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[544]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08267]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sentmenat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sentmenat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sentmenat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sentmenat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="536">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">420230.1,4611926.44 418976.75,4609326.85 419785.17,4608492.58 420358.08,4607206.83 420644.48,4606941.79 420401.69,4606425.14 419067.85,4605322.91 418435.82,4605534.35 418547.52,4605978.84 417361.43,4606638.28 416456.15,4607361.83 415110.15,4608719.95 415408.7,4611407.61 415957.56,4612097.27 417048.63,4612124.19 417731.48,4612540.56 417768.89,4612245.96 418015.74,4612348.59 418911.12,4612322.46 419612.37,4612143.79 420230.1,4611926.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25165771.42085]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[537]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[545]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08120]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Matadepera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Matadepera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Matadepera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Matadepera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="537">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">465242.4,4606790.22 464732.7,4606899.26 464216.99,4606929.19 463696.15,4607310.75 463242.94,4607133.41 463075.68,4608064.06 462787.6,4608824.28 461527.46,4610299.13 461925.49,4611133.11 462198.56,4611748.01 462749.38,4612338.7 463589.07,4612162.63 465174.44,4612486.24 466197.85,4612209.31 466185.12,4610367.36 465613.23,4608929.66 465188.17,4607734.31 465078.42,4607571.82 465242.4,4606790.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17831327.077]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[538]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[546]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08193]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Iscle de Vallalta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Iscle de Vallalta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Iscle de Vallalta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Iscle de Vallalta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="538">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323974.99,4612198.03 324638.34,4612438.15 324860.28,4612439.91 325364.05,4611943.73 325569.96,4610660.36 325273.31,4609538.11 325475.26,4609069.58 324584.12,4609625.15 323587.62,4609671.41 321968.14,4608522.17 321075.23,4609043.12 323516.72,4610697.86 323974.99,4612198.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7110423.50505]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[539]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[547]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25137]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mollerussa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mollerussa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mollerussa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mollerussa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="539">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323974.99,4612198.03 323516.72,4610697.86 321075.23,4609043.12 321022.13,4609239.74 321366,4612117.39 322197.32,4612234.2 323974.99,4612198.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5679878.87975]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[540]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[548]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25093]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fondarella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fondarella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fondarella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fondarella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="540">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">465242.4,4606790.22 465078.42,4607571.82 465188.17,4607734.31 465613.23,4608929.66 466185.12,4610367.36 466197.85,4612209.31 466301.17,4612213.42 467333.48,4612062.88 467463.49,4611042.89 467976.94,4610814.95 468889.04,4610923.83 468997.65,4610991.95 469170.68,4609874.72 469201.52,4608867.39 468774.35,4608390.78 468679.69,4607466.22 467748.83,4607165.71 466458.28,4606421.17 465771.88,4605620.31 465242.4,4606790.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15537196.54145]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[541]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[549]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08203]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Cebria de Vallalta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Cebria de Vallalta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Cebri… de Vallalta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Cebri… de Vallalta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="541">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395256.04,4603539.85 394782.69,4604004.5 394503.39,4604129.79 394673.28,4604777.5 395391.52,4605118.84 395553.25,4605584.9 394861.62,4606018.66 394464.11,4607362.46 393864.35,4607923.38 393000.69,4608280.89 392489.38,4609067.85 392191.52,4608889 392756.06,4609484.41 392761.54,4609760.96 393115.01,4610173.61 393573.82,4610555.46 393948.44,4610965.88 394202.8,4611477.38 396478.72,4611231.21 397369.49,4611606.47 397843.74,4612160.2 398474.78,4612207.75 398344.97,4611532.56 398493.89,4610902.76 399392.07,4610628.54 399205.64,4609581.96 399048.73,4608967.97 398982.58,4607651.58 400226.48,4606995.69 401045.27,4606847.97 401202.17,4606691.83 401089.02,4606555.27 400480.33,4603037.22 399827.94,4602460.91 399824.59,4602651.49 399491.66,4603508.71 398032.77,4603401.66 397988.96,4603244.6 397638.49,4603558.6 397036.33,4603675.45 395256.04,4603539.85</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[46905908.45426]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[542]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[550]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08025]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bruc, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bruc, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bruc, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bruc, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="542">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">457343.44,4609233.46 456886.91,4608973.34 456347.64,4609131.98 455405.69,4609102.59 454872.13,4608980.69 454710.26,4609182.52 454800.02,4609356.39 454445.78,4609902.35 454165.71,4610144.94 453351.87,4610998.34 453164.04,4611142.4 453102.04,4611804.36 453577.07,4612198.94 453772.17,4611985.22 453828.58,4612039.83 454084.95,4611434.17 454623.81,4610865.2 454932,4610763.99 455381.47,4610518.85 456161.6,4610558.36 456286.63,4610907.06 457091.39,4610632.69 457461.1,4609968.77 457343.44,4609233.46</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6079339.8611]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[543]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[551]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08306]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilalba Sasserra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilalba Sasserra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilalba Sasserra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilalba Sasserra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="543">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">321366,4612117.39 321022.13,4609239.74 319686.16,4609355.04 318690.09,4609495.27 318594.21,4610297.54 317328.55,4610442.71 317879.17,4611846.96 318511.82,4612045.4 319333.49,4612010.13 321366,4612117.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8541780.20525]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[544]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[552]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25205]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sidamon]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sidamon]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sidamon]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sidamon]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="544">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">368501.3,4615320.55 370315.11,4614528.43 370643.31,4615102.21 371072.69,4617170.56 375126.49,4617027.3 376660.41,4616933.5 377375.38,4616764.55 377905,4616190 378021.4,4615820.73 378026.93,4615566.26 377741,4615172 377346.73,4613787.13 377555.51,4613532.33 377540.66,4613179.29 376635.65,4613515.91 376540.76,4613277.97 375411.9,4613279.38 375364.12,4612846.77 375770.39,4612272.57 374040.83,4611637.11 372908.99,4612295.12 370374.19,4613127.07 369469.02,4612840.66 369029.8,4613605.34 369091.89,4614568.6 368224.37,4615099.18 368501.3,4615320.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">373956.37,4609514.66 373886,4609805.63 373609.24,4609608.52 373101.99,4609847.14 372396.14,4610279.81 371283.04,4610343.21 370902.95,4610777.73 371051.49,4611863.42 371480.54,4611434.15 372026.16,4611539.41 374087.06,4611073.92 374335.67,4610353.22 374376.97,4610081.69 373956.37,4609514.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[38169056.22879]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[545]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[553]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08297]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Veciana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Veciana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Veciana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Veciana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="545">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">413537.78,4603825.75 412797.84,4603687.58 411936.21,4603937.14 410718.28,4602963.26 409991.53,4602911.25 409046.01,4602920.83 407096.66,4603852.65 407591.52,4604218.76 406877.26,4604600.6 406311.79,4605072.23 405728.03,4605048.24 405342.82,4605351.96 405424.45,4605912.85 405274.08,4607597.32 405493.71,4608175.05 406138.08,4607502.66 407222.6,4607716.07 407910.18,4608263.18 408016.56,4608301.02 408433.81,4608804.16 408973.42,4609351.53 409869.86,4609311.06 410903.2,4608795.15 411791.07,4608867.51 412176.08,4610054.26 413117.73,4610936.82 413364.88,4610723.24 413269.39,4611251.58 413527.77,4611035.18 414363.63,4611496.24 414416.49,4610768.45 414791.39,4610016.03 413264.72,4609000.78 412923.33,4608241.33 412886.04,4607981.22 413039.66,4607549.58 413026.67,4607173.37 412134.55,4606240.72 413010.76,4605183.22 412781.54,4604476.72 413537.78,4603825.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[40599843.68101]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[546]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[554]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08291]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vacarisses]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vacarisses]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vacarisses]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vacarisses]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="546">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">413233.01,4599425.88 414426,4600240.42 414987.59,4600739.75 415729.03,4601752.85 415092.15,4602968.84 413847.36,4603146.95 413537.78,4603825.75 412781.54,4604476.72 413010.76,4605183.22 412134.55,4606240.72 413026.67,4607173.37 413039.66,4607549.58 412886.04,4607981.22 412923.33,4608241.33 413264.72,4609000.78 414791.39,4610016.03 414416.49,4610768.45 414363.63,4611496.24 415408.7,4611407.61 415110.15,4608719.95 416456.15,4607361.83 417361.43,4606638.28 418547.52,4605978.84 418435.82,4605534.35 419067.85,4605322.91 420401.69,4606425.14 421342.63,4605629.76 421964.07,4604671.64 420754.4,4604712.65 420718.6,4604442.42 421012.16,4603948.15 421772.91,4603646.57 422159.55,4603305.95 421949.04,4603065.62 421928.99,4602624.72 422298.69,4601557.68 421919.39,4601321.55 422104.81,4600988.8 421984.4,4600815.92 421785.93,4600754.03 422170.57,4599661.72 421903.55,4599294.95 421466.92,4599412.8 420946.03,4598969.38 420860.49,4598470.55 421356.03,4597915.75 420325.71,4597638.27 419847.82,4597894.26 419603.05,4597941.36 419326.9,4597379.29 419632.08,4597302.11 419543.83,4596798.06 418815.34,4597959.63 418303.04,4598358.27 417232.21,4598526.41 416678.61,4599392.71 416176.83,4599562.37 415983.64,4599745.66 415479.98,4598836.55 414980.36,4598779.12 414390.91,4598977.48 413713.05,4599337.91 413233.01,4599425.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[69918980.4522]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[547]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[555]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08279]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Terrassa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Terrassa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Terrassa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Terrassa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="547">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355296.35,4610722.36 354687.08,4609160.02 354468.84,4608808.81 354613.88,4608609.34 354302.58,4608585.92 354205.46,4608246.26 352676.88,4608027.13 351345.21,4607755.82 350666.54,4607778.57 350624.2,4608308.02 350241.05,4608176.71 350114.04,4608481.68 349279.99,4608348.26 348288.23,4607992.47 347390.68,4607957.52 347223.08,4608308.1 347498.21,4608704.53 349029.3,4609367 351332.85,4610556.25 353569.92,4611266.89 353830.01,4611122.66 354908.53,4611265.78 355296.35,4610722.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16115381.31415]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[548]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[556]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25104]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granyena de Segarra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granyena de Segarra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granyena de Segarra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granyena de Segarra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="548">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">472746.13,4607295.66 471848.9,4608524.35 470797.18,4609256.22 470900.68,4610189 470139.25,4610117.57 469170.68,4609874.72 468997.65,4610991.95 469924.2,4610468.72 473246.23,4610516.1 473566.89,4611182.7 474228.23,4610257.64 474764.5,4609765.39 475392.34,4608355 472746.13,4607295.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11057543.8903]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[549]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[557]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08163]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pineda de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pineda de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pineda de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pineda de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="549">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327407.12,4607761.55 328148.09,4607696.92 328789.32,4608616.65 329528.99,4610501.28 330171.9,4610875.99 330948.24,4610837.63 330775,4610143.35 331157.49,4609854.65 330987.2,4609257.94 331420.09,4609008.91 331133.46,4608319.05 331439.69,4607649.43 331247.04,4607203.48 331343.69,4606656.3 331118.43,4606363.56 330408.53,4605268.89 328977.52,4605868.66 327663.31,4606044.15 327122.57,4606272.51 326956.35,4606301.67 327459.15,4607139.61 327407.12,4607761.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14086772.74745]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[550]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[558]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25248]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova de Bellpuig]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova de Bellpuig]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova de Bellpuig]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova de Bellpuig]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="550">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">367351.76,4606812.82 367372.79,4607570.28 368262.26,4608587.73 370132.62,4609362.05 369394.69,4610023.11 369454.59,4610367.23 369873.64,4610616.2 370350.77,4610632.33 370902.95,4610777.73 371283.04,4610343.21 372396.14,4610279.81 373101.99,4609847.14 373609.24,4609608.52 373886,4609805.63 373956.37,4609514.66 374017.34,4609151.95 374369.12,4608660.03 373644.59,4608326.57 372407.95,4608426.96 372176.16,4608181.57 372817.36,4607279.4 373408.17,4606877.7 375338.1,4606047.77 376510.4,4605761.44 377222.65,4605040.95 377051.33,4604696.04 376345.79,4604619.18 375124.55,4603711.24 373305.79,4603555.45 372121.01,4603336.22 372102.42,4602480.16 370550.01,4601464.52 369488.42,4601254.18 369236.71,4601813.72 371135.34,4603347.28 368481.41,4604800.22 367712.19,4604566.4 367408.36,4604087.91 366128.25,4604135.62 366108.85,4604664.23 367204.9,4605491.93 367351.76,4606812.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[46947719.31885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[551]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[559]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08008]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Argencola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Argencola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Argen‡ola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Argen‡ola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="551">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">364309.39,4609180.89 363228.93,4609260.13 362466.43,4609259.5 362691.12,4608581.72 361918.59,4607802.81 362270.92,4607232.31 361373.64,4606210.13 360715.91,4606109 360141.92,4606401.22 360003.31,4606425.46 358691.25,4606827.88 357780.07,4607311.66 357534.79,4608662.04 356936.48,4609570.96 356646.09,4610342.21 356645.27,4611688.11 357093.6,4612068.47 357449.98,4613002.16 358727.36,4613537.15 360004.44,4611935.93 360965.71,4613718.88 361298.56,4614439.02 361418.02,4614575.01 361656.34,4614612.78 361496.86,4614189.88 362385.27,4613937.11 364725.8,4615338.14 364816.56,4615062.32 365094.34,4614714.19 364604.32,4612135.3 365182.12,4610475.4 365823.25,4610267.17 365720.03,4609690.11 364309.39,4609180.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">356775.47,4609552.87 356317.7,4608581.98 355027.7,4607710.86 354535.58,4607924.36 354205.46,4608246.26 354302.58,4608585.92 354613.88,4608609.34 354468.84,4608808.81 354687.08,4609160.02 355296.35,4610722.36 355394.86,4610575.49 356043.33,4609886.05 356775.47,4609552.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365524.74,4607118.22 365106.72,4606864.65 363958.04,4607020.98 363622.52,4607660.89 363524.33,4608192.13 364232.35,4607989.9 364525.2,4608177.01 364700.54,4607651.39 365524.74,4607118.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[54064349.26331]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[552]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[560]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25905]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ribera d'Ondara]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Antoli i Vilanova]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ribera d'Ondara]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Antol¡ i Vilanova]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="552">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365524.74,4607118.22 364700.54,4607651.39 364525.2,4608177.01 364232.35,4607989.9 363524.33,4608192.13 363434.9,4608374.02 364292.86,4608756.95 364309.39,4609180.89 365720.03,4609690.11 365823.25,4610267.17 366188.17,4610623.9 368641.36,4610619.64 369394.69,4610023.11 370132.62,4609362.05 368262.26,4608587.73 367372.79,4607570.28 367351.76,4606812.82 366260.74,4606731.79 365524.74,4607118.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13714142.507]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[553]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[561]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08133]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montmaneu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montmaneu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montmaneu]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montmaneu]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="553">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382501.18,4605918.79 381876.68,4605111.51 381497.99,4604795.23 380899.1,4605104.04 380113.73,4604950.07 378814.91,4604419.53 378869.29,4604151.75 378336.94,4604387.11 377728.64,4604704.35 377439.03,4605145.39 377222.65,4605040.95 376510.4,4605761.44 375338.1,4606047.77 373408.17,4606877.7 372817.36,4607279.4 372176.16,4608181.57 372407.95,4608426.96 373644.59,4608326.57 374369.12,4608660.03 374017.34,4609151.95 373956.37,4609514.66 374376.97,4610081.69 374335.67,4610353.22 375459.12,4610071.29 375946.4,4609720.61 376497.54,4608847.14 377009.65,4608651.57 378266.52,4609295.29 378715.03,4608569.41 379725.36,4608009.44 381246.59,4608922.6 381358.86,4608539.02 381007.16,4607203.21 382501.18,4605918.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30848918.86665]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[554]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[562]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08103]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Jorba]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Jorba]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Jorba]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Jorba]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="554">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">464073.13,4605224.27 462032.18,4604746.61 460177.58,4603644.3 460342.34,4604468.68 460092.6,4604985.56 459152.51,4605163.29 458723.33,4605510.75 458340.28,4605927.81 458471,4606143.65 458228.7,4606312.96 457959.58,4606815.44 458187.37,4608356.98 458433.39,4608362.92 458718.5,4608438.77 459181.1,4608461.43 459892.79,4608631.52 460312.75,4608549.78 460891.75,4608992.97 461283.09,4609346.07 461387.23,4609730.45 461293.31,4610111.06 461527.46,4610299.13 462787.6,4608824.28 463075.68,4608064.06 463242.94,4607133.41 464073.13,4605224.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21572952.1173]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[555]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[563]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08007]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arenys de Munt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arenys de Munt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arenys de Munt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arenys de Munt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="555">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340040.81,4608548.52 339922.54,4607190.57 340338.6,4606114.98 340272.76,4604832.31 339122.33,4605553.71 337938.61,4605584.2 336805.9,4606378.87 334807.59,4605966 334158.57,4605730.29 333627.96,4606105.27 333598.51,4606132.28 334030.2,4607109.97 334571.13,4608451.68 335372.77,4609472.63 336035.12,4609342.41 336127.53,4609547.35 336547.34,4609382.35 336782.9,4609449.69 336917.51,4609712.35 337848.78,4610276.34 337975.12,4610225.45 338451.93,4610068.22 339077.31,4609504.04 339141.33,4609111.42 339731.94,4609086.62 340040.81,4608548.52</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21775639.2318]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[556]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[564]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25176]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Preixana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Preixana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Preixana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Preixana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="556">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438886.12,4607413.61 438097.31,4607829.41 437793.31,4608109.52 438152.67,4609183.33 438277.37,4610181.91 438661.41,4610201.83 439952.63,4609743.25 440875.8,4609205.74 440769.92,4608254.54 440684.9,4607657.3 438886.12,4607413.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6261974.45515]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[557]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[565]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08041]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Canovelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Canovelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Canovelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Canovelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="557">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">470039.78,4606182.56 469674.35,4607525.09 469544.94,4608623.98 469201.52,4608867.39 469170.68,4609874.72 470139.25,4610117.57 470900.68,4610189 470797.18,4609256.22 471848.9,4608524.35 472746.13,4607295.66 470039.78,4606182.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7773520.48005]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[558]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[566]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08035]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Calella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Calella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Calella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Calella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="558">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">341625.36,4604127.32 340272.76,4604832.31 340338.6,4606114.98 339922.54,4607190.57 340040.81,4608548.52 340905.08,4608503.2 341275.85,4608379.19 342626.76,4608786.34 344403.25,4609728.27 345637.95,4609884.68 346488.7,4609009.54 346841.25,4608934.59 347223.08,4608308.1 347390.68,4607957.52 347334.01,4607438 348262.64,4606715.23 346550.49,4604475.55 346120.29,4604311.82 344438.76,4604134.42 343455.25,4603710.87 341625.36,4604127.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35499674.75015]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[559]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[567]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25242]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Verdu]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Verdu]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Verd£]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Verd£]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="559">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438606.23,4605454.6 437151.06,4605620.35 436725.93,4605986.82 436359.65,4606119.88 435742.08,4606531.76 435388.69,4606482.63 434691.41,4606033.91 434707.42,4605513.28 434461.84,4604745.19 434358.87,4604004.42 433917.84,4603922.3 433753.56,4603642.49 433529.88,4603753.78 433099.07,4604549.89 432807.05,4605250.73 432508.3,4605717.23 432430.18,4606625.74 432290.48,4607093.95 432658.65,4607208.25 433386.91,4607608.74 433299.97,4608915.75 433766.17,4609138.61 434703.77,4609580.79 434873.78,4609747.9 435501.82,4609824.82 436108.51,4609377.07 437362.32,4609373.56 438152.67,4609183.33 437793.31,4608109.52 438097.31,4607829.41 438886.12,4607413.61 438984.76,4606580.05 438612.15,4605623.47 438606.23,4605454.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22282268.1072]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[560]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[568]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08107]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llica d'Amunt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llica d'Amunt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lli‡… d'Amunt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lli‡… d'Amunt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="560">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">446439.99,4602909.33 445225.15,4601492.33 444831.93,4601605.19 442903.18,4601642.96 442348.31,4602178.6 442422.3,4602674.68 442073.53,4602718.35 441912.93,4603227.69 441292.3,4603202.71 441035.5,4603249.1 441060.81,4603874.43 441787.41,4606567.24 441988.71,4606631.41 442636.31,4606631.26 443354.46,4607198.62 443238.53,4607723.7 443542.31,4608339.08 444296.76,4609662.21 444532.03,4609536.6 445501.35,4609333.46 445359.56,4609574.43 446041.39,4609789.92 446203.77,4609585.99 446506.31,4609513.36 446688.259,4609301.058 446556.5,4608806.34 446594.509,4608605.745 445700.57,4608504.5 445680.447,4608761.995 445546.52,4608763.94 445524.197,4608426.058 445750.759,4608043.245 446053.06,4607740.12 446872.12,4608066.11 448094.55,4606519.98 448132.52,4605621.85 448675.39,4605484.13 448045.72,4605240.21 446439.99,4602909.33</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37055716.91859]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[561]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[569]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08181]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Roca del Valles, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Roca del Valles, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Roca del VallŠs, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Roca del VallŠs, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="561">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323573.32,4605690.04 323591.66,4605925 323235.77,4606361.28 322802.57,4607029.79 322605.31,4607613.03 321968.14,4608522.17 323587.62,4609671.41 324584.12,4609625.15 325475.26,4609069.58 326191.89,4608384.54 326898.97,4608242.02 327407.12,4607761.55 327459.15,4607139.61 326956.35,4606301.67 326446.21,4606504.34 324086,4604869.45 323573.32,4605690.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14922794.245]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[562]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[570]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25135]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Miralcamp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Miralcamp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Miralcamp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Miralcamp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="562">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">351665.21,4603721.4 351153.88,4605161.37 351180,4605437.6 353074.85,4605494.07 353320.35,4606024.13 354535.58,4607924.36 355027.7,4607710.86 356317.7,4608581.98 356775.47,4609552.87 356936.48,4609570.96 357534.79,4608662.04 357780.07,4607311.66 358691.25,4606827.88 360003.31,4606425.46 360108.96,4605608.02 359918.1,4604999.5 358737.04,4603747.39 357768.79,4603235.55 356038.79,4603935.59 354912.79,4603429.65 354660.41,4603910.04 354133.9,4603767.19 353653.66,4603532.58 352711.53,4603791.01 351665.21,4603721.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29357535.04075]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[563]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[571]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25141]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montoliu de Segarra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montoliu de Segarra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montoliu de Segarra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montoliu de Segarra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="563">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313464.15,4606571.71 311869.11,4606586.29 311799.89,4606345.2 310419.84,4607873.73 310100.19,4610000.73 310325.29,4611208.98 310897.31,4611818.22 311324.22,4611558.27 312531.41,4611174.95 313387.43,4607653.08 313464.15,4606571.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313949.79,4606609.31 315190.89,4608884.99 318130.04,4609499.44 317878.58,4608834.52 317265.04,4607673.05 316677.56,4606823.8 315046,4605828.45 314626.24,4606182.35 313949.79,4606609.31</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[20515454.63545]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[564]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[572]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25004]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alamus, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alamus, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alam£s, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alam£s, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="564">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">311799.89,4606345.2 311869.11,4606586.29 313464.15,4606571.71 313949.79,4606609.31 314626.24,4606182.35 315046,4605828.45 316677.56,4606823.8 317265.04,4607673.05 317878.58,4608834.52 318130.04,4609499.44 318690.09,4609495.27 319686.16,4609355.04 321022.13,4609239.74 321075.23,4609043.12 321968.14,4608522.17 322605.31,4607613.03 322802.57,4607029.79 323235.77,4606361.28 323591.66,4605925 323075.55,4606098.88 321727.83,4605041.99 321519.46,4604860.52 320934.82,4604893.81 321053.65,4604594.17 319857.48,4603858.49 319492.69,4604086.18 319691.34,4604288.57 319205.55,4604593.97 319123.07,4604317.53 318636.68,4604546.99 316900.83,4604768.56 315933.4,4604393.91 315688.95,4603623.92 314924.32,4604112.75 314705.48,4603943.65 314882.37,4603341.31 314640.66,4602376.44 313565.87,4602406.19 313542.69,4603292.11 311727.68,4603978.12 311055.26,4604344.18 310933.34,4604379.18 310933.72,4604801.38 311557.2,4606306.62 311799.89,4606345.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[40834907.53105]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[565]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[573]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25230]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[27]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torregrossa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torregrossa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torregrossa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torregrossa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="565">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360003.31,4606425.46 360141.92,4606401.22 360715.91,4606109 361373.64,4606210.13 362270.92,4607232.31 361918.59,4607802.81 362691.12,4608581.72 362466.43,4609259.5 363228.93,4609260.13 364309.39,4609180.89 364292.86,4608756.95 363434.9,4608374.02 363524.33,4608192.13 363622.52,4607660.89 363958.04,4607020.98 365106.72,4606864.65 365524.74,4607118.22 366260.74,4606731.79 367351.76,4606812.82 367204.9,4605491.93 366108.85,4604664.23 366128.25,4604135.62 366283.57,4603185.08 366879.69,4602858.7 366927.16,4602145.62 365953.69,4601965.31 365240.92,4602098.37 364923.73,4602600.29 363919.59,4603103.32 359370.16,4603465.05 358737.04,4603747.39 359918.1,4604999.5 360108.96,4605608.02 360003.31,4606425.46</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30492662.93345]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[566]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[574]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25216]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Talavera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Talavera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Talavera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Talavera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="566">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">454780.52,4603514.88 454100.67,4603615.78 453046.55,4603252.29 452605.17,4603402.88 451447.2,4603158.82 450667.27,4603424.43 450061.94,4603028.94 449354.37,4603661.18 449015.39,4604791.12 448575.12,4604917.82 448045.72,4605240.21 448675.39,4605484.13 448692.62,4605784.04 449018.53,4605858.65 449613.4,4606714.65 450011.96,4606679.31 450190.61,4606733.4 450602.15,4607294.5 451392.96,4608629.37 451697.76,4608608.6 451886.6,4608994.68 452075.01,4609080.84 452656.37,4609032.33 453005.25,4608949.97 453555.1,4609132.81 454118.75,4609112.58 454236.65,4608716.91 454710.26,4609182.52 454872.13,4608980.69 455405.69,4609102.59 456347.64,4609131.98 456886.91,4608973.34 457343.44,4609233.46 457220.65,4609032.22 457872.4,4608366.57 458187.37,4608356.98 457959.58,4606815.44 458228.7,4606312.96 458098.85,4606154.88 457317.84,4605983.62 456495.97,4605480.13 455699,4604385.37 454780.52,4603514.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[40820934.03455]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[567]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[575]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08075]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Dosrius]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Dosrius]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Dosrius]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Dosrius]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="567">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">394503.39,4604129.79 394064.28,4604432.23 393456.48,4604256.33 393360.78,4603564.85 393140.76,4602580.55 392844.96,4602544 391535.36,4603224.65 391211.68,4603343.78 390859.32,4603340.9 389521.89,4604851.58 389288.52,4605105.46 389518.74,4605610.96 389329.15,4606927.2 389455.56,4607614.82 390230.7,4608582.93 390335.07,4608645.92 391133.83,4608839.08 391859.86,4608495.8 392191.52,4608889 392489.38,4609067.85 393000.69,4608280.89 393864.35,4607923.38 394464.11,4607362.46 394861.62,4606018.66 395553.25,4605584.9 395391.52,4605118.84 394673.28,4604777.5 394503.39,4604129.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25500161.2893]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[568]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[576]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08063]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castelloli]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castelloli]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellol¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellol¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="568">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">470039.78,4606182.56 469381.908,4605963.158 468885.5,4605676 467360.033,4604953.783 466358.6,4604551.5 465964.79,4605324.51 465771.88,4605620.31 466458.28,4606421.17 467748.83,4607165.71 468679.69,4607466.22 468774.35,4608390.78 469201.52,4608867.39 469544.94,4608623.98 469674.35,4607525.09 470039.78,4606182.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7948098.54211]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[569]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[577]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08235]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pol de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pol de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pol de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pol de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="569">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354535.58,4607924.36 353320.35,4606024.13 353074.85,4605494.07 351180,4605437.6 351035.18,4605798.77 350498.11,4605908.17 348469.06,4606811.82 348262.64,4606715.23 347334.01,4607438 347390.68,4607957.52 348288.23,4607992.47 349279.99,4608348.26 350114.04,4608481.68 350241.05,4608176.71 350624.2,4608308.02 350666.54,4607778.57 351345.21,4607755.82 352676.88,4608027.13 354205.46,4608246.26 354535.58,4607924.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13083267.97515]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[570]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[578]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25143]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[32]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montornes de Segarra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montornes de Segarra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[MontornŠs de Segarra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[MontornŠs de Segarra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="570">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440246.29,4602878.98 439134.75,4601902.53 438156.43,4602992.58 438366.55,4603830.44 438431.07,4605134.88 438606.23,4605454.6 438612.15,4605623.47 438984.76,4606580.05 438886.12,4607413.61 440684.9,4607657.3 440769.92,4608254.54 440888.35,4608324.34 441257.97,4608276.58 441302.96,4607621.32 441917.23,4607408.33 441988.71,4606631.41 441787.41,4606567.24 441060.81,4603874.43 441035.5,4603249.1 440767.28,4602651.94 440246.29,4602878.98</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14809854.1152]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[571]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[579]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08096]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granollers]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granollers]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granollers]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granollers]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="571">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">297688.12,4597011.07 296509.02,4597625.55 295568.28,4597549.67 294512.6,4597570.43 293067.51,4597878.28 293168.66,4596589.5 293577.41,4595927.19 294965.62,4594274.62 294237.26,4593963.17 293580.76,4594330.26 293035.89,4595384.53 292129.43,4596296.16 291884.79,4596823.03 290513.03,4596855.29 289927.37,4597340.76 290013.79,4597413.72 290040.69,4598018.12 290561.89,4598631.52 290375.03,4599156.7 291412.01,4600342.96 291690.85,4601063.79 291751.56,4601391.94 292051.66,4601974.05 292146.93,4602293.62 292312.96,4602546.52 291433.04,4603803.66 290886.09,4603986.14 288057.73,4604739.62 286378.69,4607022.4 286225.45,4607936.85 286251.45,4608032.87 288232.72,4606824.71 292438.1,4604431.32 293882.76,4603413.19 294488.99,4603291.55 294873.63,4603662.92 295813.79,4602633.64 297047.26,4602307.57 297477.55,4602374.37 298282.82,4602076.82 297633.89,4601813.29 297729.77,4601487.08 297331.22,4600609.6 297387.6,4599769.03 297926.9,4597811.37 297688.12,4597011.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[51035339.59245]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[572]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[580]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25232]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torres de Segre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torres de Segre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torres de Segre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torres de Segre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="572">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">335463.82,4602829.74 334733.36,4602334.17 333768.31,4602314.63 332541.83,4602204.35 332173.2,4602009.47 331607.77,4602717.2 330887.4,4603105.39 330705.47,4603698.06 330160.46,4603999.64 330513.6,4604408.42 330518.09,4605196.04 330408.53,4605268.89 331118.43,4606363.56 331198.5,4606311.5 331416.11,4605780.87 331763.48,4605784.35 332446.6,4606718.95 332867.76,4606535.38 333456.86,4607429.94 333736.43,4607323.05 333270.83,4606307.87 333598.51,4606132.28 333627.96,4606105.27 333978.84,4605350.24 334289.64,4605179.25 334243.9,4604905.95 334852.04,4604289.33 335463.82,4602829.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15738209.3605]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[573]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[581]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25046]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Belianes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Belianes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Belianes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Belianes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="573">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">466358.6,4604551.5 464442.46,4603700.93 464292.74,4604764.99 464400.6,4604799.42 464073.13,4605224.27 463242.94,4607133.41 463696.15,4607310.75 464216.99,4606929.19 464732.7,4606899.26 465242.4,4606790.22 465771.88,4605620.31 465964.79,4605324.51 466358.6,4604551.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5526669.26695]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[574]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[582]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08040]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Canet de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Canet de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Canet de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Canet de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="574">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">292146.93,4602293.62 292051.66,4601974.05 291751.56,4601391.94 291690.85,4601063.79 291412.01,4600342.96 290375.03,4599156.7 290561.89,4598631.52 290040.69,4598018.12 290013.79,4597413.72 289927.37,4597340.76 289269.85,4597739.05 288836.68,4598867.81 288498.22,4599067.43 287765.04,4599316.24 287195.48,4599601.02 286276.52,4600230.36 285993.77,4601142.98 287026.02,4602263.26 287070.09,4602651.25 286298.87,4604167.9 285858.17,4604890.96 286111.51,4605372.14 285844.95,4606184.97 286378.69,4607022.4 288057.73,4604739.62 290886.09,4603986.14 290778.55,4603734.55 292146.93,4602293.62</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30169577.19406]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[575]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[583]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25210]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Soses]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Soses]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Soses]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Soses]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="575">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">351665.21,4603721.4 351173.27,4602679.24 350863.4,4601411.2 349338.91,4600765.12 347437.118,4600520.274 347283.993,4600154.649 347934.69,4599931.25 347968.368,4599801.524 347815.23,4599743.6 347155.868,4599704.649 347408.993,4599576.524 347630.868,4599585.899 347740.243,4599548.399 347482.84,4598131.89 347347.39,4598059.35 346838.3,4598947.39 346752.743,4599529.649 347230.868,4600564.024 347171.15,4600883.32 346397.54,4602022.31 346120.29,4604311.82 346550.49,4604475.55 348262.64,4606715.23 348469.06,4606811.82 350498.11,4605908.17 351035.18,4605798.77 351180,4605437.6 351153.88,4605161.37 351665.21,4603721.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26089872.55595]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[576]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[584]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25109]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Guimera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guimera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Guimer…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Guimer…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="576">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">404413.48,4605235.6 405093.82,4604156.57 405343.35,4603309.78 404320.82,4602897.8 403722.98,4602888.25 402745.23,4600286.36 402207.25,4599472.47 402007.06,4599599.93 402109.26,4599913.28 401824.28,4600022.85 401514.64,4601098.88 401010.71,4601316.5 400525.29,4601403.18 400138.25,4601536.66 399718.87,4602000.14 399827.94,4602460.91 400480.33,4603037.22 401089.02,4606555.27 401202.17,4606691.83 401684.47,4606179.63 402761.4,4605256.78 404413.48,4605235.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18695059.1874]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[577]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[585]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08069]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Collbato]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Collbato]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Collbat¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Collbat¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="577">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433123.52,4603082.38 432290.24,4602530.77 432388.26,4602107.39 432533.89,4601151.75 431642.35,4600947.83 431222.08,4600953.91 430861.48,4601142 430451.18,4602070.77 429844.98,4602034.71 429315.73,4603318.72 429433.7,4603342.59 429447.34,4603554.07 429558.43,4603915.24 429672.7,4605097.1 430503.54,4606006.98 432153.46,4606383.83 432430.18,4606625.74 432508.3,4605717.23 432807.05,4605250.73 433099.07,4604549.89 433529.88,4603753.78 433597.18,4603295.81 433634.21,4603163.27 433123.52,4603082.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15199049.19695]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[578]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[586]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08156]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palau de Plegamans]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palau de Plegamans]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palau de Plegamans]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palau de Plegamans]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="578">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433634.21,4603163.27 433597.18,4603295.81 433968.64,4603416.71 434358.87,4604004.42 434461.84,4604745.19 434707.42,4605513.28 434691.41,4606033.91 435388.69,4606482.63 435742.08,4606531.76 436359.65,4606119.88 436725.93,4605986.82 437151.06,4605620.35 438606.23,4605454.6 438431.07,4605134.88 438366.55,4603830.44 435484.24,4603226.11 434396.89,4602536.34 433735.57,4602396.28 433634.21,4603163.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11073315.3046]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[579]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[587]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08108]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llica de Vall]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llica de Vall]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lli‡… de Vall]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lli‡… de Vall]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="579">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">386113.6,4603382.78 384592.15,4603784.18 383842.71,4604383.77 382976.93,4604208.07 382443.05,4604766.39 381777.77,4604603.32 381497.99,4604795.23 381876.68,4605111.51 382501.18,4605918.79 382940.2,4605460.11 383649.86,4605327.54 384209.48,4605596.77 384838.27,4605780.46 385278.2,4606221.81 385668.9,4606528.91 386228.84,4605961.84 386667.97,4605757.02 386252.22,4605484.54 386174.63,4605208.44 386616.82,4604853.03 386278.53,4603854.72 386113.6,4603382.78</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7824168.82209]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[580]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[588]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08102]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Igualada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Igualada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Igualada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Igualada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="580">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">325971.54,4598213.44 325515.844,4598436.388 325481.07,4598661.34 325172.24,4599101.71 324181.06,4599636.44 324273.17,4600360.03 324473.46,4601210.23 324487.36,4603155.1 324115.56,4603484.22 323955.88,4604524.11 324086,4604869.45 326446.21,4606504.34 326956.35,4606301.67 327122.57,4606272.51 327663.31,4606044.15 328977.52,4605868.66 330408.53,4605268.89 330518.09,4605196.04 330513.6,4604408.42 330160.46,4603999.64 330705.47,4603698.06 330887.4,4603105.39 331607.77,4602717.2 332173.2,4602009.47 332259.54,4601593.69 331903.39,4601559.49 332261.95,4600482.43 331886.5,4599845.79 331423.66,4598389.5 331390.25,4598085.42 331122.33,4597685.86 330478.3,4597386.83 329049.83,4597724.53 328423.12,4596527.74 328388.17,4595570.93 327902.04,4594068.09 327171.71,4594561.64 327177.09,4594999.13 327302.57,4595746.24 327659.05,4597321.41 326788.66,4597790.65 326464.14,4598107.48 326382.54,4598951.7 325966.17,4599447.49 325505.08,4599208.76 325859.81,4598555.52 326054.907,4598428.576 325971.54,4598213.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[58568243.06233]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[581]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[589]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25029]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arbeca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arbeca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arbeca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arbeca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="581">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">342279.12,4599076.32 341329.99,4599603.08 340727.03,4600352.59 340137.6,4599837.49 340337.92,4599383.39 339481.82,4599342.79 338587.08,4598716.71 338543.32,4598439.41 337876.86,4598435.09 338490.25,4600958.24 339099.26,4601372.59 338476.12,4601626.25 338027.69,4601878.9 337827.99,4602436.88 336645.52,4602755.93 335800,4602472.84 335463.82,4602829.74 334852.04,4604289.33 334243.9,4604905.95 334289.64,4605179.25 333978.84,4605350.24 333627.96,4606105.27 334158.57,4605730.29 334807.59,4605966 336805.9,4606378.87 337938.61,4605584.2 339122.33,4605553.71 340272.76,4604832.31 341625.36,4604127.32 341708.3,4603683.28 341416.05,4602679.17 341849.33,4602613.62 342376.03,4600655.48 342279.12,4599076.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32920378.26645]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[582]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[590]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25902]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti de Riucorb]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti de Malda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ de Riucorb]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ de Mald…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="582">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301820.01,4602283.93 301229.86,4602834.45 300335.49,4602895.01 299902.39,4604569.78 299163.71,4605598.01 299471.98,4605556.1 299936.6,4605907.85 301240.94,4606375.03 302001.2,4605898.83 303455.68,4605676.05 303638.62,4605084.48 302691.63,4603973.56 302589.18,4603157.07 301820.01,4602283.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10269562.0928]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[583]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[591]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25007]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albatarrec]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albatarrec]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albat…rrec]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albat…rrec]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="583">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">460480.94,4602950.99 459862.15,4602773.52 460276.79,4601827.11 459770.48,4601398.11 459531.48,4601270.6 459203.07,4601232.16 458484.16,4601934.95 458314.04,4602226.08 458060.62,4602377.78 458098.85,4606154.88 458228.7,4606312.96 458471,4606143.65 458340.28,4605927.81 458723.33,4605510.75 459152.51,4605163.29 460092.6,4604985.56 460342.34,4604468.68 460177.58,4603644.3 460480.94,4602950.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8017594.75605]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[584]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[592]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08264]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Vicenc de Montalt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Vicenc de Montalt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Vicen‡ de Montalt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Vicen‡ de Montalt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="584">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">459203.07,4601232.16 459172.533,4601052.22 459025.658,4601074.095 458625.658,4600877.22 458650.658,4600742.845 458478.783,4600714.72 457913.158,4600355.345 457403.2,4600225.91 455966.65,4602722.05 455130.7,4602808.44 454780.52,4603514.88 455699,4604385.37 456495.97,4605480.13 457317.84,4605983.62 458098.85,4606154.88 458060.62,4602377.78 458314.04,4602226.08 458484.16,4601934.95 459203.07,4601232.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12249649.48128]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[585]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[593]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08197]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Andreu de Llavaneres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Andreu de Llavaneres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Andreu de Llavaneres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Andreu de Llavaneres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="585">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">317391.93,4598869.99 317847.09,4600247.05 316863.12,4601437.81 314592.39,4601869.44 314015.57,4599712.63 313630.36,4599195.12 313130.29,4601115.8 312816.19,4601413.95 312971.22,4602414.69 313565.87,4602406.19 314640.66,4602376.44 314882.37,4603341.31 314705.48,4603943.65 314924.32,4604112.75 315688.95,4603623.92 315933.4,4604393.91 316900.83,4604768.56 318636.68,4604546.99 319123.07,4604317.53 319205.55,4604593.97 319691.34,4604288.57 319492.69,4604086.18 319857.48,4603858.49 321053.65,4604594.17 321716.36,4604629.11 321665.01,4603638.2 322260.3,4603373.98 322764.97,4603498.78 322463.62,4602867.68 322832.55,4602477.89 322335.93,4601035.64 322728.34,4600663.66 322118.86,4599481.05 320742.6,4600195.33 319829.19,4600380.45 318953.17,4600128.1 319153.47,4599468.85 319631.3,4599534.05 319546.84,4599439.87 319545.17,4595611.57 320014.13,4594927.98 320051.52,4593381.53 320132.54,4592716.09 318187.67,4592840 317903.55,4593083.39 317976.7,4593309.77 317706.19,4594986.73 317881.43,4595923.72 317697.26,4597277.33 317391.93,4598869.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323573.32,4605690.04 322664.282,4605483.263 322211.157,4604920.763 321966.83,4604941.17 321727.83,4605041.99 323075.55,4606098.88 323591.66,4605925 323573.32,4605690.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[47365024.69058]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[586]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[594]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25119]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Juneda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Juneda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Juneda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Juneda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="586">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">299756.62,4601478.18 299382.45,4601836.41 298753.98,4602321.13 298282.82,4602076.82 297477.55,4602374.37 297047.26,4602307.57 295813.79,4602633.64 294873.63,4603662.92 295534.44,4603845.49 295619.81,4604218.28 296292.92,4604605.74 296967.89,4605119.34 297685.72,4605835.19 298416.85,4603830.1 299882.34,4601789.72 299756.62,4601478.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8684937.93495]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[587]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[595]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25211]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sudanell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sudanell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sudanell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sudanell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="587">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">300571.59,4601170.77 299756.62,4601478.18 299882.34,4601789.72 298416.85,4603830.1 297685.72,4605835.19 298800.9,4605525.22 299163.71,4605598.01 299902.39,4604569.78 300335.49,4602895.01 301229.86,4602834.45 301820.01,4602283.93 301082.57,4600820.89 300737.33,4600827.08 300571.59,4601170.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7676549.34895]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[588]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[596]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25142]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montoliu de Lleida]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montoliu de Lleida]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montoliu de Lleida]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montoliu de Lleida]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="588">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">322728.34,4600663.66 322335.93,4601035.64 322832.55,4602477.89 322463.62,4602867.68 322764.97,4603498.78 322260.3,4603373.98 321665.01,4603638.2 321716.36,4604629.11 321053.65,4604594.17 320934.82,4604893.81 321519.46,4604860.52 321727.83,4605041.99 321966.83,4604941.17 322211.157,4604920.763 322664.282,4605483.263 323573.32,4605690.04 324086,4604869.45 323955.88,4604524.11 324115.56,4603484.22 324487.36,4603155.1 324473.46,4601210.23 324273.17,4600360.03 322728.34,4600663.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9990684.78197]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[589]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[597]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25180]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Puiggros]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Puiggros]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Puiggr•s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Puiggr•s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="589">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">308931.9,4599818.48 308097.28,4597681.69 307699.42,4597023.95 306491.34,4597679.91 306120.02,4598326.51 306662.62,4599044.5 307086.64,4599982.56 306647.21,4601003.28 306733.35,4601910.65 305956.5,4603095.23 305599.12,4604606.28 306261.57,4605377.23 307522.18,4604623.61 309986.16,4604646.8 310412.68,4605004.91 310933.72,4604801.38 310933.34,4604379.18 309231.92,4600152.68 308931.9,4599818.48</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23497490.61135]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[590]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[598]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25033]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Artesa de Lleida]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Artesa de Lleida]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Artesa de Lleida]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Artesa de Lleida]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="590">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">407096.66,4603852.65 406915.51,4603270.44 406609,4602777.82 406517.87,4601394.72 406228.36,4599987.46 407441.67,4599054.75 407952.75,4598854.71 409256.95,4598735.22 409064.32,4598414.3 406142.26,4597639.3 405853.53,4597707.32 405351.59,4596995.05 404480.85,4597044.63 404467.52,4597150.34 403544.9,4597812.74 403010.75,4598381.47 402207.25,4599472.47 402745.23,4600286.36 403722.98,4602888.25 404320.82,4602897.8 405343.35,4603309.78 405093.82,4604156.57 404413.48,4605235.6 405342.82,4605351.96 405728.03,4605048.24 406311.79,4605072.23 406877.26,4604600.6 407591.52,4604218.76 407096.66,4603852.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26256478.64455]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[591]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[599]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08076]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Esparreguera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Esparreguera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Esparreguera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Esparreguera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="591">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">448112.71,4599205.6 447400.98,4599451.83 446714.29,4600316.01 446990.03,4601612.36 446439.99,4602909.33 448045.72,4605240.21 448575.12,4604917.82 449015.39,4604791.12 449354.37,4603661.18 450061.94,4603028.94 450667.27,4603424.43 451447.2,4603158.82 451956.09,4602888.8 452305.43,4602181.5 452012.83,4601732.51 452176.08,4600062.29 451392.71,4599206.94 451841.19,4598201.17 451532.55,4597923.46 450707.53,4598552.84 450711.23,4598913.31 449002.66,4598929.02 448112.71,4599205.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25692329.70195]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[592]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[600]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08009]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Argentona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Argentona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Argentona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Argentona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="592">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">464442.46,4603700.93 464131.908,4603541.283 463694.408,4603163.158 463491.283,4602822.533 463250.658,4602728.783 463228.783,4602781.908 463444.408,4602881.908 463616.283,4603278.783 463506.57,4603353.98 463381.908,4603335.033 463238.158,4603260.033 463103.783,4603269.408 463099.48,4603159.49 463010.38,4603195.99 462403.783,4602942.845 461047.37,4602228.22 460816.24,4602584.47 460947.48,4602673.98 460538.1,4602973.69 460480.94,4602950.99 460177.58,4603644.3 462032.18,4604746.61 464073.13,4605224.27 464400.6,4604799.42 464292.74,4604764.99 464442.46,4603700.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7031683.176]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[593]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[601]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08006]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arenys de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arenys de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arenys de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arenys de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="593">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">377918.49,4599147.32 377244.65,4600000.32 376931.41,4600031.41 376300.16,4598833.69 375289.71,4597961.57 374026.26,4597778.38 373816.13,4598222.95 372940.8,4598439.01 371545.57,4599500.12 370676.08,4599728.01 370635.53,4601004.67 370550.01,4601464.52 372102.42,4602480.16 372121.01,4603336.22 373305.79,4603555.45 375124.55,4603711.24 376345.79,4604619.18 377051.33,4604696.04 377222.65,4605040.95 377439.03,4605145.39 377728.64,4604704.35 378336.94,4604387.11 378869.29,4604151.75 379049.7,4604074.77 379131.19,4603855.25 378469.39,4603069.16 379116.87,4601102.59 378930.13,4600610.39 378127.06,4599274.54 377918.49,4599147.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[39239843.24105]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[594]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[602]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08226]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti de Tous]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti de Tous]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ de Tous]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ de Tous]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="594">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">377918.49,4599147.32 378127.06,4599274.54 378930.13,4600610.39 379116.87,4601102.59 378469.39,4603069.16 379131.19,4603855.25 379049.7,4604074.77 378869.29,4604151.75 378814.91,4604419.53 380113.73,4604950.07 380899.1,4605104.04 381497.99,4604795.23 381777.77,4604603.32 382443.05,4604766.39 382976.93,4604208.07 383842.71,4604383.77 384592.15,4603784.18 386113.6,4603382.78 384716.05,4603094.44 384844.84,4602015.63 384241.91,4601559.22 384376.98,4601297.45 382064.12,4600040.77 380848.61,4599508.27 378098.51,4598690.9 377918.49,4599147.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27963499.41481]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[595]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[603]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08250]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Margarida de Montbui]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Maure]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Margarida de Montbui]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Maure]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="595">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">422170.57,4599661.72 421785.93,4600754.03 421984.4,4600815.92 422104.81,4600988.8 421919.39,4601321.55 422298.69,4601557.68 421928.99,4602624.72 421949.04,4603065.62 422159.55,4603305.95 421772.91,4603646.57 421012.16,4603948.15 420718.6,4604442.42 420754.4,4604712.65 421964.07,4604671.64 423380.39,4604116.93 423852.79,4603844.74 424047.68,4604129.74 425461.77,4604459.62 425569.17,4604524.09 425599.24,4604983.62 426520.73,4604866.14 426569.57,4604792.36 426448.49,4604198.62 426561.69,4603435.26 427222.56,4603163.05 427682.19,4601784.78 428241.43,4601634.74 428421.28,4601271.31 428523.53,4600859.31 428815.66,4600462.81 429018.84,4599650.91 429191.08,4599375.78 428916.36,4599441.26 428747.3,4599098.88 428352.24,4598745.9 428269.22,4598311.88 427804.48,4598392.2 427591.56,4598501.5 426928.55,4598415.87 427098.33,4597837.63 425813.98,4597189.44 425995.58,4596893.99 425856.35,4596127.7 425586.06,4595681.03 425143.91,4595866.01 424381.77,4595942.11 424052.94,4596149.34 424483.61,4596568.4 424821.2,4597016.65 424915.04,4598081.7 424353.2,4599183.71 423897.21,4599062.69 423575.27,4599365.72 422170.57,4599661.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38249655.06245]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[596]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[604]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08187]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sabadell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sabadell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sabadell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sabadell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="596">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392973.05,4601124.03 392582.65,4600743.15 391841.14,4599935.2 391546.54,4600220.73 388558.05,4600065.33 388074.91,4599780.41 387684.83,4599646.97 387602.56,4600097.24 386700.44,4600212.7 386493.36,4600905.97 386368.71,4601214.31 387052.26,4601388.98 387605.77,4601411.61 387998.08,4601642.83 388406.78,4603067.86 389268.45,4604013.47 389298.08,4604656 389521.89,4604851.58 390859.32,4603340.9 391211.68,4603343.78 391535.36,4603224.65 392844.96,4602544 393140.76,4602580.55 393560.36,4601849.22 392973.05,4601124.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18485831.36395]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[597]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[605]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08165]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pobla de Claramunt, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pobla de Claramunt, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pobla de Claramunt, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pobla de Claramunt, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="597">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360849.34,4597861.19 359489.74,4598851.82 360429.84,4600674.25 360984.19,4600235.19 361878.21,4600114.03 361810.66,4599792.23 363293.15,4599804.52 364042.38,4601032.53 363825.76,4601515.79 364154.73,4601496.55 364807.56,4600797.86 365549.97,4600709.77 365762.52,4601283.91 366047.94,4601229.23 365953.69,4601965.31 366927.16,4602145.62 366879.69,4602858.7 366283.57,4603185.08 366128.25,4604135.62 367408.36,4604087.91 367712.19,4604566.4 368481.41,4604800.22 371135.34,4603347.28 369236.71,4601813.72 369488.42,4601254.18 370550.01,4601464.52 370635.53,4601004.67 370676.08,4599728.01 369674.61,4599982.51 368823.17,4599199.26 367114.8,4599462.85 366605.06,4598568.47 366428.67,4597912.93 366364.16,4597815.29 365200.84,4597794 364145.72,4598169.29 362429.54,4599053.32 361686.12,4598334.76 361118.39,4598699.09 360849.34,4597861.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33868678.18486]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[598]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[606]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43139]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Coloma de Queralt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Coloma de Queralt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Coloma de Queralt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Coloma de Queralt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="598">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">386113.6,4603382.78 386278.53,4603854.72 386457.99,4604006.46 387917.39,4603451.15 388631.14,4603748.75 388731.22,4604497.33 389298.08,4604656 389268.45,4604013.47 388406.78,4603067.86 387998.08,4601642.83 387605.77,4601411.61 387052.26,4601388.98 386368.71,4601214.31 386493.36,4600905.97 385216.7,4600885.97 384148.09,4600487.1 382081.05,4599951.97 382064.12,4600040.77 384376.98,4601297.45 384241.91,4601559.22 384844.84,4602015.63 384716.05,4603094.44 386113.6,4603382.78</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10344869.9032]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[599]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[607]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08302]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova del Cami]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova del Cami]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova del Cam¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova del Cam¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="599">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">399776.8,4591489.16 398751.94,4591393.65 398199.36,4591082.01 397840.03,4591178.34 397789.53,4590099.27 397874.93,4589721.36 397294.76,4589194.57 395611.78,4590116.08 395796.56,4590556.93 395462.53,4590609.62 395461.49,4590977.94 395692.8,4591170.53 395883.43,4591391.58 395224.05,4591718.03 395274.6,4592093.92 394728.41,4592267.61 395160.06,4592556.18 394612.18,4593176.36 394350.22,4593638.46 393786.17,4594359.1 392514.86,4595284.45 391848.03,4595992.44 392218.77,4596344.68 392887.09,4596421.62 393339.56,4596784.83 393163.74,4597430.74 393356.57,4597626.49 393089.92,4598641.26 392973.05,4601124.03 393560.36,4601849.22 393140.76,4602580.55 393360.78,4603564.85 393456.48,4604256.33 394064.28,4604432.23 394503.39,4604129.79 394782.69,4604004.5 395256.04,4603539.85 395361.46,4603401.48 395316.17,4602944.24 395586.68,4602372.72 396192.36,4601981.01 396274.08,4601291.05 396538.2,4600340.72 396710,4599468.53 397639.99,4598473.5 398128.11,4597827.27 398446.04,4597411.56 398682.62,4596743.78 398606.74,4596414.96 398391.12,4596037.96 398694.54,4594852.36 399107.23,4593676.9 399328.34,4592256.73 399336.95,4592079.09 399776.8,4591489.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[57224033.1954]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[600]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[608]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08161]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Piera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Piera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Piera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Piera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="600">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310933.34,4604379.18 311055.26,4604344.18 311727.68,4603978.12 313542.69,4603292.11 313565.87,4602406.19 312971.22,4602414.69 312816.19,4601413.95 313130.29,4601115.8 312486.87,4600442 312231.58,4600521.39 312017.5,4600102.64 311691.52,4600207.76 310411.41,4599049.22 308931.9,4599818.48 309231.92,4600152.68 310933.34,4604379.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13083432.5067]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[601]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[609]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25182]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Puigverd de Lleida]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Puigverd de Lleida]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Puigverd de Lleida]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Puigverd de Lleida]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="601">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347347.39,4598059.35 347072.61,4598038.47 346740.67,4597741.93 346241.72,4598054.91 345189.57,4597828.08 344263.37,4598417.35 343740.26,4599636.1 344053.21,4601360.3 343643.22,4603229.2 343455.25,4603710.87 344438.76,4604134.42 346120.29,4604311.82 346397.54,4602022.31 347171.15,4600883.32 347230.868,4600564.024 346752.743,4599529.649 346838.3,4598947.39 347347.39,4598059.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17416580.64706]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[602]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[610]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25074]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ciutadilla]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ciutadilla]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ciutadilla]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ciutadilla]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="602">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">344263.37,4598417.35 342819.34,4598647.54 342279.12,4599076.32 342376.03,4600655.48 341849.33,4602613.62 341416.05,4602679.17 341708.3,4603683.28 341625.36,4604127.32 343455.25,4603710.87 343643.22,4603229.2 344053.21,4601360.3 343740.26,4599636.1 344263.37,4598417.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9418824.11045]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[603]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[611]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25145]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Nalec]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Nalec]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Nalec]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Nalec]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="603">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">438156.43,4602992.58 437332.27,4602037.33 437369.41,4600991.62 436826.65,4600455.08 435983.78,4599692.7 436097.85,4600820.85 434361.53,4601198.89 433735.57,4602396.28 434396.89,4602536.34 435484.24,4603226.11 438366.55,4603830.44 438156.43,4602992.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433597.18,4603295.81 433529.88,4603753.78 433753.56,4603642.49 433917.84,4603922.3 434358.87,4604004.42 433968.64,4603416.71 433597.18,4603295.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[9160552.2098]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[604]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[612]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08159]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Parets del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Parets del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Parets del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Parets del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="604">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">296967.89,4605119.34 296292.92,4604605.74 295619.81,4604218.28 295534.44,4603845.49 294873.63,4603662.92 294488.99,4603291.55 293882.76,4603413.19 292438.1,4604431.32 288232.72,4606824.71 286251.45,4608032.87 285835.53,4609053.1 283635.99,4608044.87 279208.89,4608909.07 279053.43,4611117.6 279148.94,4611527.01 280069.62,4612448.16 280461.82,4612744.89 282583.24,4613225.33 284924.36,4613038.62 285550.32,4613596.29 286733.08,4612905.36 287804.96,4614829.47 288407.04,4614687.94 290038.3,4615086.06 292501.8,4614320.03 292846.15,4614471.4 293384.79,4613911.4 293263.41,4612707.16 293562.22,4612433.57 295165.23,4610068.38 295161.83,4609202.44 295497.46,4608784.27 296967.89,4605119.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">292146.93,4602293.62 290778.55,4603734.55 290886.09,4603986.14 291433.04,4603803.66 292312.96,4602546.52 292146.93,4602293.62</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[112470017.7148]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[605]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[613]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25011]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alcarras]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alcarras]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alcarr…s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alcarr…s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="605">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">411781.67,4598179.39 411341.31,4598474.33 411045.75,4599136.6 410855.99,4599887.97 410533.1,4600688.43 410478.28,4600984.44 410098.91,4601273.46 410261.94,4601994.79 410086.85,4602240.85 409991.53,4602911.25 410718.28,4602963.26 411936.21,4603937.14 412797.84,4603687.58 413537.78,4603825.75 413847.36,4603146.95 415092.15,4602968.84 415729.03,4601752.85 414987.59,4600739.75 414426,4600240.42 413233.01,4599425.88 412567.08,4599021.29 411781.67,4598179.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19671973.46985]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[606]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[614]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08300]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Viladecavalls]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Viladecavalls]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Viladecavalls]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Viladecavalls]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="606">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360429.84,4600674.25 359640.41,4601716.67 359176.94,4601271.55 358634.4,4601237.63 357990.14,4601610.78 358141.35,4602522.01 357676.7,4602606.59 357181.38,4601948.2 355031.16,4602431.16 355103.91,4603267.42 354912.79,4603429.65 356038.79,4603935.59 357768.79,4603235.55 358737.04,4603747.39 359370.16,4603465.05 363919.59,4603103.32 364923.73,4602600.29 365240.92,4602098.37 365953.69,4601965.31 366047.94,4601229.23 365762.52,4601283.91 365549.97,4600709.77 364807.56,4600797.86 364154.73,4601496.55 363825.76,4601515.79 364042.38,4601032.53 363293.15,4599804.52 361810.66,4599792.23 361878.21,4600114.03 360984.19,4600235.19 360429.84,4600674.25</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23255118.4934]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[607]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[615]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43073]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llorac]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llorac]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llorac]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llorac]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="607">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355031.16,4602431.16 353717.61,4600967.61 353525.82,4600521.95 352926.67,4600542.11 351928.31,4600430.52 350863.4,4601411.2 351173.27,4602679.24 351665.21,4603721.4 352711.53,4603791.01 353653.66,4603532.58 354133.9,4603767.19 354660.41,4603910.04 354912.79,4603429.65 355103.91,4603267.42 355031.16,4602431.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10560983.91655]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[608]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[616]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43159]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallfogona de Riucorb]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallfogona de Riucorb]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallfogona de Riucorb]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallfogona de Riucorb]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="608">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">411045.75,4599136.6 410084.04,4599146.89 409607.72,4598774.76 409256.95,4598735.22 407952.75,4598854.71 407441.67,4599054.75 406228.36,4599987.46 406517.87,4601394.72 406609,4602777.82 406915.51,4603270.44 407096.66,4603852.65 409046.01,4602920.83 409991.53,4602911.25 410086.85,4602240.85 410261.94,4601994.79 410098.91,4601273.46 410478.28,4600984.44 410533.1,4600688.43 410855.99,4599887.97 411045.75,4599136.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16589968.7335]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[609]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[617]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08147]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olesa de Montserrat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Olesa de Montserrat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Olesa de Montserrat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Olesa de Montserrat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="609">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">404528.48,4596054.97 403998.65,4595888.24 403522.32,4595876.24 403241.78,4596254.98 402467.66,4596426.33 401443.87,4596463.3 400162.9,4597229.21 399692.92,4597670.27 398287.44,4598294.09 398128.11,4597827.27 397639.99,4598473.5 396710,4599468.53 396538.2,4600340.72 396274.08,4601291.05 396192.36,4601981.01 395586.68,4602372.72 395316.17,4602944.24 395361.46,4603401.48 395256.04,4603539.85 397036.33,4603675.45 397638.49,4603558.6 397988.96,4603244.6 398032.77,4603401.66 399491.66,4603508.71 399824.59,4602651.49 399827.94,4602460.91 399718.87,4602000.14 400138.25,4601536.66 400525.29,4601403.18 401010.71,4601316.5 401514.64,4601098.88 401824.28,4600022.85 402109.26,4599913.28 402007.06,4599599.93 402207.25,4599472.47 403010.75,4598381.47 403544.9,4597812.74 404467.52,4597150.34 404480.85,4597044.63 404528.48,4596054.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33363175.8646]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[610]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[618]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08162]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Hostalets de Pierola, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Hostalets de Pierola, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Hostalets de Pierola, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Hostalets de Pierola, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="610">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">457403.2,4600225.91 455991.283,4599724.095 455245.67,4599282.55 454881.908,4598942.845 454639.36,4598618.91 454397.533,4598595.97 454001.98,4598264.91 454197.533,4597953.783 454197.533,4597856.908 453860.033,4597541.283 453841.283,4597569.408 454138.158,4597888.158 453903.39,4598174.4 453638.158,4597878.783 452118.69,4596819.69 451841.19,4598201.17 451392.71,4599206.94 452176.08,4600062.29 452012.83,4601732.51 452305.43,4602181.5 451956.09,4602888.8 451447.2,4603158.82 452605.17,4603402.88 453046.55,4603252.29 454100.67,4603615.78 454780.52,4603514.88 455130.7,4602808.44 455966.65,4602722.05 457403.2,4600225.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22608810.81281]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[611]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[619]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08121]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mataro]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mataro]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Matar¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Matar¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="611">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">427222.56,4603163.05 428390.37,4603083.96 429315.73,4603318.72 429844.98,4602034.71 430451.18,4602070.77 430861.48,4601142 431222.08,4600953.91 431128.52,4600099.33 430879.36,4600067.38 430786.13,4599615.55 429860.32,4598904.6 429809.21,4599013.21 429191.08,4599375.78 429018.84,4599650.91 428815.66,4600462.81 428523.53,4600859.31 428421.28,4601271.31 428241.43,4601634.74 427682.19,4601784.78 427222.56,4603163.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8904602.1081]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[612]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[620]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08167]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Polinya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Polinya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Poliny…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Poliny…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="612">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">444831.93,4601605.19 444874.6,4600972.47 444794.93,4600207.69 444624.8,4600115.52 444556.95,4599656.4 444591.75,4599523.98 444063.67,4599063.05 443123.41,4598414.05 442441.9,4599110.61 441247.99,4598961.38 440432.31,4599658.28 440481.03,4599950.07 439743.43,4600954.75 440040.73,4601202.36 439974.97,4601483.27 440086.56,4601902.71 440246.29,4602878.98 440767.28,4602651.94 441035.5,4603249.1 441292.3,4603202.71 441912.93,4603227.69 442073.53,4602718.35 442422.3,4602674.68 442348.31,4602178.6 442903.18,4601642.96 444831.93,4601605.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15037517.37515]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[613]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[621]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08902]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="613">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">435920.13,4599209.09 435184.21,4598131.27 434791.09,4597379.36 433907.12,4597821.53 434033.39,4598074 433340.55,4599407.13 432866.02,4600028.23 432533.89,4601151.75 432388.26,4602107.39 432823.35,4602290.05 432971.49,4602623.35 433123.52,4603082.38 433634.21,4603163.27 433735.57,4602396.28 434361.53,4601198.89 436097.85,4600820.85 435983.78,4599692.7 435920.13,4599209.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10811544.3947]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[614]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[622]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08124]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mollet del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mollet del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mollet del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mollet del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="614">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">305747.64,4594814.51 305468.77,4594212.55 305098.6,4594116.16 304904.43,4594163.01 303778.38,4594662.5 302272.48,4596206.11 301013.64,4596428.52 299358.99,4595953.03 299710.81,4597985.99 300252.89,4600317.12 300571.59,4601170.77 300737.33,4600827.08 301082.57,4600820.89 301820.01,4602283.93 302589.18,4603157.07 304626.48,4602734.17 304759.71,4601214.07 304487.3,4600515.56 305106.26,4598863.93 304132.31,4598209.05 304530.42,4596056.42 305517.12,4596002.9 305889.45,4595293.35 305747.64,4594814.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32616242.61385]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[615]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[623]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25014]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alfes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alfes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alf‚s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alf‚s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="615">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">434246.89,4591571.05 433623.71,4591591.64 433205.7,4591819.8 432219.41,4591291.62 432205.71,4591195.33 432093.92,4591167.31 431673.45,4591167.06 431206.15,4590735.25 430647.03,4590404.38 430344.18,4589572.32 429622.27,4589253.12 429817.21,4591200.6 429584.33,4591087.82 429623.64,4591909.58 429812.98,4592858.36 429318.11,4593609.69 429755.45,4593445.16 429940.37,4593776.62 430810.43,4593586.94 431043.91,4593859.2 430866.23,4594214.91 429916.65,4595624.05 430139.76,4596053.5 430233.02,4596573.46 430954.7,4596556.36 431392.55,4597072.63 432229.03,4596688.84 432347.81,4596530.82 432653.09,4595825.66 433375.61,4594919.37 433598.74,4595198.94 434196.26,4594692.69 435325.18,4594140.29 435384.41,4593915.06 434624.54,4593430.35 434351.74,4592698.75 434543.15,4592299.48 434718.82,4592071.08 434246.89,4591571.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433123.52,4603082.38 432971.49,4602623.35 432823.35,4602290.05 432388.26,4602107.39 432290.24,4602530.77 433123.52,4603082.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[23336755.7635]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[616]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[624]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08125]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montcada i Reixac]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montcada]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montcada i Reixac]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montcada]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="616">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">436154.8,4599418.9 435920.13,4599209.09 435983.78,4599692.7 436826.65,4600455.08 437369.41,4600991.62 437332.27,4602037.33 438156.43,4602992.58 439134.75,4601902.53 438646.72,4601757.19 438366.28,4601056.3 438238.34,4600538.73 437968.32,4599886.59 436800.42,4599774.61 436154.8,4599418.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4003083.7203]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[617]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[625]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08135]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montmelo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montmelo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montmel¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montmel¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="617">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">460480.94,4602950.99 460538.1,4602973.69 460947.48,4602673.98 460816.24,4602584.47 461047.37,4602228.22 460276.79,4601827.11 459862.15,4602773.52 460480.94,4602950.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[791322.0217]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[618]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[626]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08032]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Caldes d'Estrac]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Caldes d'Estrac]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Caldes d'Estrac]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Caldes d'Estrac]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="618">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">445994.05,4599234.71 445329.13,4599596.15 445343.84,4599827.49 444591.75,4599523.98 444556.95,4599656.4 444624.8,4600115.52 444794.93,4600207.69 444874.6,4600972.47 444831.93,4601605.19 445225.15,4601492.33 446439.99,4602909.33 446990.03,4601612.36 446714.29,4600316.01 447400.98,4599451.83 445994.05,4599234.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5758977.2506]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[619]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[627]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08153]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Orrius]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Orrius]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[ãrrius]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[ãrrius]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="619">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437809.05,4598248.4 437489.16,4598667.63 436154.8,4599418.9 436800.42,4599774.61 437968.32,4599886.59 438238.34,4600538.73 438366.28,4601056.3 438646.72,4601757.19 439134.75,4601902.53 440246.29,4602878.98 440086.56,4601902.71 439974.97,4601483.27 440040.73,4601202.36 439743.43,4600954.75 440481.03,4599950.07 440432.31,4599658.28 440201.25,4598978.61 439758.43,4598241.25 439413.52,4597947.37 439189.87,4597122.2 438082.17,4597983.15 437809.05,4598248.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10163385.77775]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[620]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[628]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08136]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montornes del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montornes del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[MontornŠs del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[MontornŠs del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="620">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338358.18,4597859.64 337622.42,4597546.66 337150.15,4596940.32 336282.55,4596917.18 334728.79,4596873.63 334359.92,4597275.99 334101.01,4597724.53 332132.4,4598231.88 331423.66,4598389.5 331886.5,4599845.79 332261.95,4600482.43 331903.39,4601559.49 332259.54,4601593.69 332173.2,4602009.47 332541.83,4602204.35 333768.31,4602314.63 334733.36,4602334.17 335463.82,4602829.74 335800,4602472.84 336645.52,4602755.93 337827.99,4602436.88 338027.69,4601878.9 338476.12,4601626.25 339099.26,4601372.59 338490.25,4600958.24 337876.86,4598435.09 338358.18,4597859.64</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31661746.41185]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[621]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[629]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25130]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Malda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Malda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mald…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mald…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="621">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360429.84,4600674.25 359489.74,4598851.82 358793.03,4598716.29 358121.55,4599232.34 357551.72,4599218.9 356799.42,4599715.8 356241.53,4599527.2 355052.15,4600311.05 354421.88,4600314.24 353525.82,4600521.95 353717.61,4600967.61 355031.16,4602431.16 357181.38,4601948.2 357676.7,4602606.59 358141.35,4602522.01 357990.14,4601610.78 358634.4,4601237.63 359176.94,4601271.55 359640.41,4601716.67 360429.84,4600674.25</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14661174.5267]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[622]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[630]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43143]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Savalla del Comtat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Savalla del Comtat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Savall… del Comtat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Savall… del Comtat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="622">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">299358.99,4595953.03 297688.12,4597011.07 297926.9,4597811.37 297387.6,4599769.03 297331.22,4600609.6 297729.77,4601487.08 297633.89,4601813.29 298282.82,4602076.82 298753.98,4602321.13 299382.45,4601836.41 299756.62,4601478.18 300571.59,4601170.77 300252.89,4600317.12 299710.81,4597985.99 299358.99,4595953.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12754508.38845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[623]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[631]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25212]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sunyer]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sunyer]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sunyer]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sunyer]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="623">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">349710.93,4595002.74 348161.86,4594796.6 347829.65,4596208.18 347139.14,4596642.43 346961.36,4597539.52 347072.61,4598038.47 347347.39,4598059.35 347482.84,4598131.89 347740.243,4599548.399 347630.868,4599585.899 347408.993,4599576.524 347155.868,4599704.649 347815.23,4599743.6 347968.368,4599801.524 347934.69,4599931.25 347283.993,4600154.649 347437.118,4600520.274 349338.91,4600765.12 350863.4,4601411.2 351928.31,4600430.52 352926.67,4600542.11 353685.83,4598711.16 352674.31,4597919.61 352600.76,4598092.9 352002.05,4598281.01 352145.96,4596876.81 351541.43,4596595.41 351047.9,4596880.69 350850.49,4596544.21 350957.7,4596062.41 349710.93,4595002.74</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27141705.11023]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[624]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[632]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43101]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Passanant]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Passanant]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Passanant]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Passanant]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="624">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">428269.22,4598311.88 428352.24,4598745.9 428747.3,4599098.88 428916.36,4599441.26 429191.08,4599375.78 429809.21,4599013.21 429860.32,4598904.6 430786.13,4599615.55 430879.36,4600067.38 431128.52,4600099.33 431222.08,4600953.91 431642.35,4600947.83 432533.89,4601151.75 432866.02,4600028.23 433340.55,4599407.13 434033.39,4598074 433907.12,4597821.53 433223.84,4596571.88 432347.81,4596530.82 432229.03,4596688.84 431392.55,4597072.63 430954.7,4596556.36 430233.02,4596573.46 430022.82,4596788.05 429555.94,4596912.79 429117.39,4597407.43 428710.59,4598040.23 428269.22,4598311.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15736299.27595]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[625]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[633]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08260]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Perpetua de Mogoda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Perpetua de Mogoda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa PerpŠtua de Mogoda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa PerpŠtua de Mogoda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="625">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">294237.26,4593963.17 294067.95,4593032.89 294392.18,4591932.42 294678.13,4591392.69 293630.82,4589799.53 293088.79,4589662.77 290880.32,4590783.34 290903.46,4591351.41 290574.61,4591160.57 289641.07,4589751.43 288867.45,4589534.51 288008.92,4590035.1 287532.57,4591063.11 287766.85,4591849.71 286723.69,4593173.09 284777.03,4594979.4 284298.99,4595633.35 282571.6,4596602.08 282819.76,4596652.36 283963.71,4598185.16 284576.43,4599467.32 285613.71,4600594.38 285993.77,4601142.98 286276.52,4600230.36 287195.48,4599601.02 287765.04,4599316.24 288498.22,4599067.43 288836.68,4598867.81 289269.85,4597739.05 289927.37,4597340.76 290513.03,4596855.29 291884.79,4596823.03 292129.43,4596296.16 293035.89,4595384.53 293580.76,4594330.26 294237.26,4593963.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[67515534.54005]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[626]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[634]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25038]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aitona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Aitona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aitona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aitona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="626">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392218.77,4596344.68 391675.36,4596558.27 391332.34,4596943.43 391826,4597514.9 390957.36,4597716.61 390955.4,4597846 391374.94,4598669.49 391835,4599306.23 391853.66,4599874.33 391841.14,4599935.2 392582.65,4600743.15 392973.05,4601124.03 393089.92,4598641.26 393356.57,4597626.49 393163.74,4597430.74 393339.56,4596784.83 392887.09,4596421.62 392218.77,4596344.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6574189.9767]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[627]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[635]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08292]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallbona d'Anoia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallbona d'Anoia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallbona d'Anoia]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallbona d'Anoia]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="627">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">317391.93,4598869.99 317697.26,4597277.33 317881.43,4595923.72 317706.19,4594986.73 317976.7,4593309.77 317903.55,4593083.39 318187.67,4592840 317789.56,4591748.11 317302.58,4591323.44 316074.41,4590820.16 315334.95,4592934.59 314902.19,4593200.06 314426.37,4593069.59 312764.91,4592816.78 311717.86,4593087.75 311101.6,4593441.19 310012.64,4593645.56 307648.39,4594386.63 307406.25,4594431.88 307915.19,4595889.34 307699.42,4597023.95 308097.28,4597681.69 308931.9,4599818.48 310411.41,4599049.22 311691.52,4600207.76 312017.5,4600102.64 312231.58,4600521.39 312486.87,4600442 313130.29,4601115.8 313630.36,4599195.12 314015.57,4599712.63 314803.9,4599339.15 315572.03,4598741.03 316534.85,4599011 317391.93,4598869.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[65111847.43645]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[628]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[636]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25067]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castelldans]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castelldans]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castelldans]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castelldans]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="628">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">384507.37,4596867.08 383767.92,4596866.26 383648.82,4596934.19 384043.63,4597009.99 383803.4,4597887.8 383608.15,4597984.13 384125.68,4598556.81 384527.22,4598736.62 384211.55,4599138.67 383228.12,4599329.03 383111.91,4599960.53 382081.05,4599951.97 384148.09,4600487.1 385216.7,4600885.97 386493.36,4600905.97 386700.44,4600212.7 387602.56,4600097.24 387684.83,4599646.97 387635.44,4599622.83 387524.53,4599205.73 386561.23,4597640.52 384606.62,4597610.71 384507.37,4596867.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11336652.80785]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[629]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[637]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08048]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Carme]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Carme]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Carme]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Carme]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="629">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327376.27,4592741.82 327146.63,4592252.21 327101.36,4592157.74 325872.32,4592890.58 324082.48,4592767.95 323853.28,4591599.85 324412.56,4590899.51 323440.04,4590267.94 322808.01,4590509 322313.19,4591597.28 320132.54,4592716.09 320051.52,4593381.53 320014.13,4594927.98 319545.17,4595611.57 319546.84,4599439.87 319631.3,4599534.05 319153.47,4599468.85 318953.17,4600128.1 319829.19,4600380.45 320742.6,4600195.33 322118.86,4599481.05 322728.34,4600663.66 324273.17,4600360.03 324181.06,4599636.44 325172.24,4599101.71 325481.07,4598661.34 325515.844,4598436.388 325971.54,4598213.44 326258.032,4597436.388 326465.59,4595245.54 326789.86,4594962.89 326879.91,4594390.01 326831.93,4593470.58 327376.27,4592741.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">317391.93,4598869.99 316534.85,4599011 315572.03,4598741.03 314803.9,4599339.15 314015.57,4599712.63 314592.39,4601869.44 316863.12,4601437.81 317847.09,4600247.05 317391.93,4598869.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[61735048.02663]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[630]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[638]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25058]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Borges Blanques, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Borges Blanques, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Borges Blanques, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Borges Blanques, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="630">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">359778.98,4595281.87 358932.87,4595108.71 358402.66,4594682.35 357559.4,4594534.8 356535.69,4595438.05 356080.26,4595918.75 355619.64,4595754.68 354564.56,4595676.27 353993.75,4595962.22 353476.81,4596526.09 353016.65,4597221.67 352674.31,4597919.61 353685.83,4598711.16 352926.67,4600542.11 353525.82,4600521.95 354421.88,4600314.24 355052.15,4600311.05 356241.53,4599527.2 356799.42,4599715.8 357551.72,4599218.9 358121.55,4599232.34 358793.03,4598716.29 359489.74,4598851.82 360849.34,4597861.19 360205.52,4597090.34 360310.63,4596827.16 359707.93,4595912.13 359778.98,4595281.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29185947.0667]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[631]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[639]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43046]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Conesa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Conesa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Conesa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Conesa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="631">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338358.18,4597859.64 337876.86,4598435.09 338543.32,4598439.41 338587.08,4598716.71 339481.82,4599342.79 340337.92,4599383.39 340137.6,4599837.49 340727.03,4600352.59 341329.99,4599603.08 342279.12,4599076.32 342819.34,4598647.54 344263.37,4598417.35 345189.57,4597828.08 346241.72,4598054.91 346740.67,4597741.93 347072.61,4598038.47 346961.36,4597539.52 347139.14,4596642.43 347829.65,4596208.18 348161.86,4594796.6 347563.46,4594691.06 345992.28,4593979.6 343884.54,4593523.57 343896.79,4593293.54 343049.58,4592880.2 342035.33,4592593.59 341885.81,4593450.29 341449.82,4593572.58 341424.25,4594731.38 341833.27,4595013.92 341967.97,4596249.5 340553.11,4597311.24 338358.18,4597859.64</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34796997.28576]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[632]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[640]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25238]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallbona de les Monges]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallbona de les Monges]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallbona de les Monges]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallbona de les Monges]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="632">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">389952.83,4596832.5 389919.83,4596105.9 388179.65,4596045.06 385869.56,4596247.69 384507.37,4596867.08 384606.62,4597610.71 386561.23,4597640.52 387524.53,4599205.73 387635.44,4599622.83 387684.83,4599646.97 388074.91,4599780.41 388558.05,4600065.33 391546.54,4600220.73 391841.14,4599935.2 391853.66,4599874.33 390819.93,4599225.77 390778.56,4599518.96 389797.47,4598868.87 390040.74,4598025 389440.35,4597265.74 389952.83,4596832.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15126390.08425]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[633]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[641]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08286]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torre de Claramunt, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torre de Claramunt, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torre de Claramunt, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torre de Claramunt, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="633">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">379824.45,4596670.13 379727.93,4596962.07 378944.92,4596999.81 378604.04,4597774.36 378098.51,4598690.9 380848.61,4599508.27 382064.12,4600040.77 382081.05,4599951.97 383111.91,4599960.53 383228.12,4599329.03 384211.55,4599138.67 384527.22,4598736.62 384125.68,4598556.81 383608.15,4597984.13 383803.4,4597887.8 384043.63,4597009.99 383648.82,4596934.19 383609.59,4596595.83 383224.57,4596863.89 382374.52,4596725.88 381608.25,4596225.34 381243.92,4596728.81 380323.03,4596549.83 379824.45,4596670.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15027574.95175]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[634]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[642]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08152]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Orpi]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Candia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Orp¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa C…ndia]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="634">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">372771.25,4593282.54 372667.02,4594053.42 373667.1,4594682.6 374420.2,4595346.82 374190.42,4595864.26 373736.24,4596566.75 373743.51,4597070.77 374026.26,4597778.38 375289.71,4597961.57 376300.16,4598833.69 376931.41,4600031.41 377244.65,4600000.32 377918.49,4599147.32 378098.51,4598690.9 378604.04,4597774.36 378944.92,4596999.81 379727.93,4596962.07 379824.45,4596670.13 379390.09,4596496.41 378830.24,4595341 378892.34,4595181 377989.42,4594787.32 377481.6,4593887.78 376410.45,4593650.87 375895.62,4594242.85 375285.08,4593844.78 373666.61,4592289.67 373584.87,4592858.67 372771.25,4593282.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25421000.03025]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[635]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[643]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08257]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Maria de Miralles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Maria de Miralles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Maria de Miralles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Maria de Miralles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="635">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">372667.02,4594053.42 371954.1,4594013.8 371546.73,4594305.06 370839.99,4594347.16 370881.68,4594597.4 369788.64,4595445.39 368451.96,4595679.44 368207.09,4595988.58 368026.07,4595905.79 367525.69,4596221.13 366822.74,4596522.72 366663.02,4597080.67 366360.05,4597194.63 366364.16,4597815.29 366428.67,4597912.93 366605.06,4598568.47 367114.8,4599462.85 368823.17,4599199.26 369674.61,4599982.51 370676.08,4599728.01 371545.57,4599500.12 372940.8,4598439.01 373816.13,4598222.95 374026.26,4597778.38 373743.51,4597070.77 373736.24,4596566.75 374190.42,4595864.26 374420.2,4595346.82 373667.1,4594682.6 372667.02,4594053.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30596768.9172]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[636]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[644]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08021]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellprat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellprat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellprat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellprat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="636">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">389952.83,4596832.5 389440.35,4597265.74 390040.74,4598025 389797.47,4598868.87 390778.56,4599518.96 390819.93,4599225.77 391853.66,4599874.33 391835,4599306.23 391374.94,4598669.49 390955.4,4597846 390073.83,4597476.99 389952.83,4596832.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[2804518.6673]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[637]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[645]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08044]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Capellades]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Capellades]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Capellades]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Capellades]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="637">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">445994.05,4599234.71 445338.53,4598371.03 445348.1,4598092.25 446135.55,4597703.96 446953.39,4597059.26 447565.1,4596444.89 448016.58,4596234.97 448374.61,4595901.03 447526.86,4594978.8 447178.43,4594752.07 445903.32,4596014.4 444633.4,4596803.33 444575.07,4597426.94 444241.29,4597317.91 444098.79,4597805.41 443433.84,4598025.74 443123.41,4598414.05 444063.67,4599063.05 444591.75,4599523.98 445343.84,4599827.49 445329.13,4599596.15 445994.05,4599234.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9170338.32335]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[638]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[646]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08214]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilassar de Dalt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilassar de Dalt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilassar de Dalt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilassar de Dalt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="638">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">416812,4590682 417001.38,4590855.86 416929.41,4591827.82 416479.68,4591824.02 416389.4,4592796.23 416141.62,4593338.35 415833.99,4593787.35 415557.63,4595383.26 415460.26,4596379.32 415016.23,4596665.95 414901.14,4597538.44 415172.29,4597743.47 415449.31,4597776.22 415414.07,4598351.4 415479.98,4598836.55 415983.64,4599745.66 416176.83,4599562.37 416678.61,4599392.71 417232.21,4598526.41 418303.04,4598358.27 418815.34,4597959.63 419543.83,4596798.06 419592.04,4596308.41 419995.24,4596321.13 420393.33,4596044.32 420921.29,4596334.35 421258.54,4595551.48 421032.11,4594966.13 420655.98,4593416.52 419826,4592632 419201.57,4591423.49 418322.65,4591525.45 417760,4591165 416812,4590682</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32092828.12696]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[639]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[647]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08184]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rubi]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rubi]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rub¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rub¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="639">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">424052.94,4596149.34 423307.05,4595737.8 422976.71,4595624.26 422280.74,4596000.81 422031.12,4596860.66 421827.56,4597039.65 420921.29,4596334.35 420393.33,4596044.32 419995.24,4596321.13 419592.04,4596308.41 419543.83,4596798.06 419632.08,4597302.11 419326.9,4597379.29 419603.05,4597941.36 419847.82,4597894.26 420325.71,4597638.27 421356.03,4597915.75 420860.49,4598470.55 420946.03,4598969.38 421466.92,4599412.8 421903.55,4599294.95 422170.57,4599661.72 423575.27,4599365.72 423897.21,4599062.69 424353.2,4599183.71 424915.04,4598081.7 424821.2,4597016.65 424483.61,4596568.4 424052.94,4596149.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13822104.128]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[640]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[648]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08238]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Quirze del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Quirze del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Quirze del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Quirze del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="640">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440177.74,4596288.82 439714.23,4596844.11 439189.87,4597122.2 439413.52,4597947.37 439758.43,4598241.25 440201.25,4598978.61 440432.31,4599658.28 441247.99,4598961.38 442441.9,4599110.61 443123.41,4598414.05 443433.84,4598025.74 444098.79,4597805.41 444241.29,4597317.91 443725.28,4596534.86 443620.86,4596544.96 443032.21,4596654.47 442288.48,4596205.17 442235.32,4596179.43 440177.74,4596288.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10903398.30304]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[641]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[649]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08296]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallromanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallromanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallromanes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallromanes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="641">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">449409.71,4596333.75 448374.61,4595901.03 448016.58,4596234.97 447565.1,4596444.89 446953.39,4597059.26 446135.55,4597703.96 445348.1,4598092.25 445338.53,4598371.03 445994.05,4599234.71 447400.98,4599451.83 448112.71,4599205.6 448120.25,4598702.32 448232.38,4598437.93 448235.15,4598054.48 448781.82,4597381.61 449409.71,4596333.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7299310.5252]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[642]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[650]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08030]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabrils]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabrils]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabrils]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabrils]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="642">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">328001.5,4593650.32 327643.1,4593648.85 327376.27,4592741.82 326831.93,4593470.58 326879.91,4594390.01 326789.86,4594962.89 326465.59,4595245.54 326258.032,4597436.388 325971.54,4598213.44 326054.907,4598428.576 325859.81,4598555.52 325505.08,4599208.76 325966.17,4599447.49 326382.54,4598951.7 326464.14,4598107.48 326788.66,4597790.65 327659.05,4597321.41 327302.57,4595746.24 327177.09,4594999.13 327171.71,4594561.64 327902.04,4594068.09 328001.5,4593650.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5079065.51388]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[643]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[651]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25092]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Floresta, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Floresta, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Floresta, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Floresta, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="643">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">411382.08,4596030.7 412579.81,4596383.93 412409.96,4597866.8 411908.02,4597982.47 411781.67,4598179.39 412567.08,4599021.29 413233.01,4599425.88 413713.05,4599337.91 414390.91,4598977.48 414980.36,4598779.12 415479.98,4598836.55 415414.07,4598351.4 415449.31,4597776.22 415172.29,4597743.47 414901.14,4597538.44 414100.28,4596548.86 413363.81,4596449.88 411696.83,4595783.14 411382.08,4596030.7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7481377.90625]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[644]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[652]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08290]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ullastrell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ullastrell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ullastrell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ullastrell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="644">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">437809.05,4598248.4 437560.43,4597683.88 436959.39,4597178.25 436886.88,4597068.26 436704.68,4597264.49 436348.67,4597525.39 435660.14,4597696.36 435184.21,4598131.27 435920.13,4599209.09 436154.8,4599418.9 437489.16,4598667.63 437809.05,4598248.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3430339.47045]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[645]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[653]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08115]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Martorelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Martorelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Martorelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Martorelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="645">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">450281.69,4595311.8 449409.71,4596333.75 448781.82,4597381.61 448235.15,4598054.48 448232.38,4598437.93 448120.25,4598702.32 448112.71,4599205.6 449002.66,4598929.02 450711.23,4598913.31 450707.53,4598552.84 451532.55,4597923.46 451841.19,4598201.17 452118.69,4596819.69 450281.69,4595311.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8852178.5533]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[646]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[654]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08029]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabrera de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabrera de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabrera de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabrera de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="646">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">404528.48,4596054.97 404480.85,4597044.63 405351.59,4596995.05 405853.53,4597707.32 406142.26,4597639.3 409064.32,4598414.3 409256.95,4598735.22 409607.72,4598774.76 410084.04,4599146.89 411045.75,4599136.6 411341.31,4598474.33 411781.67,4598179.39 411908.02,4597982.47 412409.96,4597866.8 412579.81,4596383.93 411382.08,4596030.7 411015,4594869 410453.42,4594475.05 410316.47,4594707.25 409989.31,4594916.61 409635.53,4594882.35 408828.17,4595220.1 408200.74,4595677.29 405097.96,4595809.23 404528.48,4596054.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20731221.7987]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[647]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[655]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08001]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Abrera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Abrera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Abrera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Abrera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="647">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360378.86,4592421.22 360377.1,4592971.51 360479.29,4593539.98 359778.98,4595281.87 359707.93,4595912.13 360310.63,4596827.16 360205.52,4597090.34 360849.34,4597861.19 361118.39,4598699.09 361686.12,4598334.76 362429.54,4599053.32 364145.72,4598169.29 365200.84,4597794 366364.16,4597815.29 366360.05,4597194.63 365998.58,4596807.24 364922.36,4596264.08 364326.92,4596160.64 363298.33,4595446.91 363607.53,4594996.37 363255.38,4594435.52 362957.26,4593680.32 362256.69,4593206.27 361896.59,4592555.15 360925.04,4592308.1 360378.86,4592421.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22944128.01469]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[648]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[656]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43105]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Piles, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Piles, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Piles, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Piles, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="648">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">307699.42,4597023.95 307915.19,4595889.34 307406.25,4594431.88 305967.61,4594710.75 305747.64,4594814.51 305889.45,4595293.35 305517.12,4596002.9 304530.42,4596056.42 304132.31,4598209.05 305106.26,4598863.93 306025.17,4598237.04 306120.02,4598326.51 306491.34,4597679.91 307699.42,4597023.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9777488.38195]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[649]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[657]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25036]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aspa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Aspa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aspa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aspa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="649">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">425995.58,4596893.99 425813.98,4597189.44 427098.33,4597837.63 426928.55,4598415.87 427591.56,4598501.5 427804.48,4598392.2 428269.22,4598311.88 428710.59,4598040.23 429117.39,4597407.43 429555.94,4596912.79 430022.82,4596788.05 430233.02,4596573.46 430139.76,4596053.5 429916.65,4595624.05 429546.9,4596022.59 429274.35,4595873.86 429063.75,4595926.53 428182.43,4595549.9 427950.7,4595389.23 427150.43,4595513.02 426970.24,4595603.17 426148.78,4596172.14 426163.49,4596426.84 425995.58,4596893.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8313965.86225]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[650]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[658]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08252]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Barbera del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Barbera del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Barber… del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Barber… del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="650">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">328001.5,4593650.32 327902.04,4594068.09 328388.17,4595570.93 328423.12,4596527.74 329049.83,4597724.53 330478.3,4597386.83 331122.33,4597685.86 331390.25,4598085.42 331423.66,4598389.5 332132.4,4598231.88 331989.98,4597646.9 331601.26,4597639.5 331547.9,4596454.52 331237.7,4595126.36 330729.32,4594595.46 330830.62,4594032.87 330510.35,4594330.79 329593.57,4594012.26 329238.18,4593504.48 328920.08,4593742.34 328001.5,4593650.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11205729.19805]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[651]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[659]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25153]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Omellons, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Omellons, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Omellons, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Omellons, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="651">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">398128.11,4597827.27 398287.44,4598294.09 399692.92,4597670.27 400162.9,4597229.21 401443.87,4596463.3 402467.66,4596426.33 403241.78,4596254.98 403522.32,4595876.24 403116.81,4594982.23 403060.54,4594963.02 402016.68,4593521.05 400958.94,4593036.05 400449.13,4592575.9 400414.84,4592232.92 399563.13,4592561.75 399328.34,4592256.73 399107.23,4593676.9 398694.54,4594852.36 398391.12,4596037.96 398606.74,4596414.96 398682.62,4596743.78 398446.04,4597411.56 398128.11,4597827.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17161349.0331]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[652]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[660]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08119]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masquefa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masquefa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Masquefa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Masquefa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="652">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354321.09,4593726.61 353928.49,4593612.31 353184.33,4593470.9 352969.83,4593256.71 351833.45,4593270.14 350952.72,4593000.95 350272.81,4592985.21 350001.43,4594408.59 349710.93,4595002.74 350957.7,4596062.41 350850.49,4596544.21 351047.9,4596880.69 351541.43,4596595.41 352145.96,4596876.81 352002.05,4598281.01 352600.76,4598092.9 352674.31,4597919.61 353016.65,4597221.67 353476.81,4596526.09 353993.75,4595962.22 354564.56,4595676.27 355619.64,4595754.68 354321.09,4593726.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15850217.981]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[653]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[661]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43061]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fores]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fores]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[ForŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[ForŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="653">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440177.74,4596288.82 439290.98,4595934.39 438899.6,4595273.29 438597.3,4595188.72 438128.52,4595676.43 437553.83,4596523.78 437200.08,4596772.31 436886.88,4597068.26 436959.39,4597178.25 437560.43,4597683.88 437809.05,4598248.4 438082.17,4597983.15 439189.87,4597122.2 439714.23,4596844.11 440177.74,4596288.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4485782.5757]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[654]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[662]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08256]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Maria de Martorelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Maria de Martorelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Maria de Martorelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Maria de Martorelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="654">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">330830.62,4594032.87 330729.32,4594595.46 331237.7,4595126.36 331547.9,4596454.52 331601.26,4597639.5 331989.98,4597646.9 332132.4,4598231.88 334101.01,4597724.53 334359.92,4597275.99 334728.79,4596873.63 336282.55,4596917.18 336314.12,4596226.7 337200.64,4594906.98 336947.66,4594480.32 336241.91,4594113.02 335876.61,4594309.55 334572.06,4593541.96 334058.58,4593576.68 332370.76,4592608.88 331951.86,4593171.26 330830.62,4594032.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21245501.54041]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[655]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[663]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25081]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Espluga Calba, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Espluga Calba, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Espluga Calba, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Espluga Calba, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="655">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433598.74,4595198.94 434791.09,4597379.36 435184.21,4598131.27 435660.14,4597696.36 436348.67,4597525.39 436704.68,4597264.49 436886.88,4597068.26 437200.08,4596772.31 437553.83,4596523.78 438128.52,4595676.43 438597.3,4595188.72 438547.13,4594816.82 437940.57,4594277.21 437696.3,4593847.7 437174.59,4593495.68 436836.53,4593704.58 435626.45,4593813.51 435384.41,4593915.06 435325.18,4594140.29 434196.26,4594692.69 433598.74,4595198.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13266609.5334]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[656]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[664]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08209]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Fost de Campsentelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Fost de Campsentelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Fost de Campsentelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Fost de Campsentelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="656">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">294237.26,4593963.17 294965.62,4594274.62 293577.41,4595927.19 293168.66,4596589.5 293067.51,4597878.28 294512.6,4597570.43 295568.28,4597549.67 296509.02,4597625.55 297688.12,4597011.07 299358.99,4595953.03 299441.95,4595694.36 299330.64,4594020.82 299538.09,4592032.54 296913.65,4590077 296455.91,4587285.08 294717.29,4588190.13 294267.2,4588625.45 293630.82,4589799.53 294678.13,4591392.69 294392.18,4591932.42 294067.95,4593032.89 294237.26,4593963.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[41863460.25676]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[657]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[665]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25200]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sarroca de Lleida]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sarroca de Lleida]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sarroca de Lleida]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sarroca de Lleida]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="657">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338358.18,4597859.64 340553.11,4597311.24 341967.97,4596249.5 341833.27,4595013.92 341424.25,4594731.38 341449.82,4593572.58 340891.11,4593655.03 340021.67,4594014 339002.44,4594800.64 338339.71,4594990.69 337659.67,4595631.46 336461.17,4596515.75 336314.12,4596226.7 336282.55,4596917.18 337150.15,4596940.32 337622.42,4597546.66 338358.18,4597859.64</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13572433.41255]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[658]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[666]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25154]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[38]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Omells de na Gaia, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Omells de na Gaia, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Omells de na Gaia, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Omells de na Gaia, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="658">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392498.65,4591731.93 391812.99,4592397.31 391619.54,4592398.62 389919.83,4596105.9 389952.83,4596832.5 390073.83,4597476.99 390955.4,4597846 390957.36,4597716.61 391826,4597514.9 391332.34,4596943.43 391675.36,4596558.27 392218.77,4596344.68 391848.03,4595992.44 392514.86,4595284.45 393786.17,4594359.1 394350.22,4593638.46 394612.18,4593176.36 395160.06,4592556.18 394728.41,4592267.61 395274.6,4592093.92 395224.05,4591718.03 395883.43,4591391.58 395692.8,4591170.53 395461.49,4590977.94 395462.53,4590609.62 394667.18,4590881.97 393989.29,4591310.23 393111.26,4591485.3 392683.83,4591718.1 392498.65,4591731.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16950444.0314]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[659]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[667]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08028]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabrera d'Igualada]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Canaletes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabrera d'Igualada]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Canaletes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="659">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">433598.74,4595198.94 433375.61,4594919.37 432653.09,4595825.66 432347.81,4596530.82 433223.84,4596571.88 433907.12,4597821.53 434791.09,4597379.36 433598.74,4595198.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[2979549.1969]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[660]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[668]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08105]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[41]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llagosta, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llagosta, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llagosta, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llagosta, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="660">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">415858.96,4588462.04 415337.31,4588951.57 415045.47,4589240.04 414686.11,4590185.4 414109.1,4590865.3 413481.74,4590598.07 412776.99,4591079.91 412496.13,4591481.28 412510.45,4591954.97 412099.92,4591370.44 411280.68,4592306.42 410992.62,4593182.39 410359.41,4593707.93 410060.61,4594387.19 410316.47,4594707.25 410453.42,4594475.05 411015,4594869 411382.08,4596030.7 411696.83,4595783.14 413363.81,4596449.88 414100.28,4596548.86 414901.14,4597538.44 415016.23,4596665.95 415460.26,4596379.32 415557.63,4595383.26 415833.99,4593787.35 416141.62,4593338.35 416389.4,4592796.23 416479.68,4591824.02 416929.41,4591827.82 417001.38,4590855.86 416812,4590682 416548,4590463 416314.87,4589789.22 416102.69,4588979.38 416106.23,4587892.1 415858.96,4588462.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30667900.922]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[661]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[669]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08054]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellbisbal]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellbisbal]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellbisbal]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellbisbal]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="661">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">447748.16,4594280.57 446765.67,4594326.25 446511.68,4594387.42 445717.02,4593959.7 445316.23,4593308.08 444787.43,4593784.96 444553.96,4594859.75 444052.97,4595557.11 443620.86,4596544.96 443725.28,4596534.86 444241.29,4597317.91 444575.07,4597426.94 444633.4,4596803.33 445903.32,4596014.4 447178.43,4594752.07 447748.16,4594280.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6492558.9297]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[662]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[670]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08230]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Premia de Dalt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Premia de Dalt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Premi… de Dalt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Premi… de Dalt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="662">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360378.86,4592421.22 360925.04,4592308.1 361896.59,4592555.15 362256.69,4593206.27 362957.26,4593680.32 363255.38,4594435.52 363607.53,4594996.37 363298.33,4595446.91 364326.92,4596160.64 364922.36,4596264.08 365998.58,4596807.24 366360.05,4597194.63 366663.02,4597080.67 366822.74,4596522.72 367525.69,4596221.13 368026.07,4595905.79 368207.09,4595988.58 368451.96,4595679.44 369788.64,4595445.39 370881.68,4594597.4 370839.99,4594347.16 371546.73,4594305.06 371954.1,4594013.8 372667.02,4594053.42 372771.25,4593282.54 372293.07,4593011.37 371698.98,4592252.34 371268.97,4592351.14 370980.28,4592222.11 371007.73,4591576.6 370745.41,4591057.53 370168.78,4590366.55 369245.17,4589963.08 368231.82,4589964.95 367182.49,4589110.64 366673.41,4588588.04 365111.62,4589956.17 363876.85,4589250.17 364022.26,4588770.58 363535.26,4588147.02 362410.51,4587767.38 361574.57,4588071.18 360341.42,4587820.44 360238.46,4589424.53 360029.33,4589985.81 359872.65,4590060.36 359683.68,4590525.14 359993.98,4590894.02 360013.93,4591779.25 360378.86,4592421.22</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[67101298.93722]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[663]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[671]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43141]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pontils]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pontils]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pontils]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pontils]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="663">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">422664.05,4585687.75 422419.26,4585870.59 422355.2,4586550.56 422180.31,4586931.59 421901.85,4587164.13 421504.59,4587674.6 421521.28,4587808.48 421732.9,4588028.47 421813.44,4588629.05 420106.23,4588739.56 419299.47,4588439.61 419150.9,4588898.29 418710.13,4589253.88 418587.83,4590112.25 417615.9,4590334.27 416548,4590463 416812,4590682 417760,4591165 418322.65,4591525.45 419201.57,4591423.49 419826,4592632 420655.98,4593416.52 421032.11,4594966.13 421258.54,4595551.48 420921.29,4596334.35 421827.56,4597039.65 422031.12,4596860.66 422280.74,4596000.81 422976.71,4595624.26 422821.67,4594653.01 423551.86,4593628.5 424987.28,4592128.7 425435.55,4591425.48 426171.6,4591057.05 426383.2,4590917.43 426371.91,4590318.89 426545.31,4589605.16 427387.74,4588530.92 427152.15,4587284.68 426356.61,4586687.56 425060.52,4587021.5 424682.05,4587400.15 424084.49,4586924.09 423439.82,4587265.03 423255.71,4587280.05 422513.65,4587739.42 422758.37,4587109.62 422637.72,4586753.22 423237.63,4586482.99 422964.37,4586251.23 422930.12,4585852.57 423124.83,4585424.05 422785.89,4585591.34 422664.05,4585687.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[48674690.89455]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[664]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[672]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08205]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Cugat del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Cugat del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Cugat del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Cugat del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="664">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">380818.28,4589164.34 380216.56,4589948.49 379318.91,4590027.82 379111.14,4589578.79 378340.28,4589405.76 378315.53,4588997.87 377657.34,4589310.96 377889.41,4588845.39 375775.19,4588302.78 374968.42,4587617.37 374386.82,4588493.65 372745.87,4588492.76 372670.16,4588698.93 372217.5,4589441.78 373620.53,4591223.43 373666.61,4592289.67 375285.08,4593844.78 375895.62,4594242.85 376410.45,4593650.87 377481.6,4593887.78 377989.42,4594787.32 378892.34,4595181 378830.24,4595341 379390.09,4596496.41 379824.45,4596670.13 380323.03,4596549.83 381243.92,4596728.81 381608.25,4596225.34 382374.52,4596725.88 383224.57,4596863.89 383609.59,4596595.83 383648.82,4596934.19 383767.92,4596866.26 383814.3,4596830.54 384152.4,4595925.71 383682.87,4595947.42 383238.82,4595615.09 383225,4595028.31 383258.01,4594698.87 381794.23,4594337.67 381015.17,4593526.38 380718.47,4592372.74 381695.72,4591277.06 382365.69,4591137.9 382752,4589984.83 380818.28,4589164.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52934887.21156]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[665]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[673]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08104]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[06]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llacuna, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llacuna, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llacuna, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llacuna, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="665">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">427150.43,4595513.02 426438.92,4595200.52 425586.06,4595681.03 425856.35,4596127.7 425995.58,4596893.99 426163.49,4596426.84 426148.78,4596172.14 426970.24,4595603.17 427150.43,4595513.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[914451.9751]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[666]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[674]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08904]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Badia del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Badia del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Badia del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Badia del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="666">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382752,4589984.83 382365.69,4591137.9 381695.72,4591277.06 380718.47,4592372.74 381015.17,4593526.38 381794.23,4594337.67 383258.01,4594698.87 383225,4595028.31 383238.82,4595615.09 383682.87,4595947.42 384152.4,4595925.71 383814.3,4596830.54 383767.92,4596866.26 384507.37,4596867.08 385869.56,4596247.69 388179.65,4596045.06 389919.83,4596105.9 391619.54,4592398.62 391221.85,4592273.07 390264,4592117.68 388643.82,4592146.5 388398.09,4592440.59 388333.84,4591911.64 387441.97,4591489.02 386783.97,4591401.39 386328.52,4590939.59 386692.4,4590347.38 386972.44,4590281.95 386302.91,4589143.58 385500.3,4589422.63 384413.02,4590075.29 383724.4,4590220.32 382919.8,4589923 382752,4589984.83</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47566255.91135]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[667]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[675]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08122]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mediona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mediona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mediona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mediona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="667">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">445316.23,4593308.08 444803.04,4592929.09 444697.533,4592922.532 444491.283,4593419.407 444303.13,4593275.73 444031.908,4593438.157 443966.283,4593347.532 443887.38,4593346.59 443753.783,4593260.032 443669.408,4593444.407 443374.62,4593282.13 443169.408,4593566.282 443134.3,4593422.9 442778.45,4593419.53 442447.28,4593590.98 442228.24,4595770.06 442288.48,4596205.17 443032.21,4596654.47 443620.86,4596544.96 444052.97,4595557.11 444553.96,4594859.75 444787.43,4593784.96 445316.23,4593308.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6601597.46604]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[668]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[676]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08281]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Teia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Teia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tei…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tei…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="668">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">279308.84,4583433.26 280516.79,4583909.03 280796.08,4584273.01 281566.09,4584985.36 282615.55,4585746.1 282574.53,4586374.74 283275.83,4586399.58 284182.23,4586008.17 284683.57,4586852.47 284133.09,4588545.79 283368.37,4590046.12 282569.18,4591018.2 281338.02,4591168.67 281090.96,4590788.95 280373.8,4591862.77 280518.92,4592071.05 280842.81,4592941.61 281201.38,4594280.77 280356.58,4594982.47 280166.17,4596103.15 281793.05,4596234.34 282571.6,4596602.08 284298.99,4595633.35 284777.03,4594979.4 286723.69,4593173.09 287766.85,4591849.71 287532.57,4591063.11 288008.92,4590035.1 288867.45,4589534.51 288781.02,4588407.29 288913.26,4586811.22 288769.55,4585197.18 287803.17,4583927.21 288648.4,4582050.35 288119.26,4580087.15 287999.98,4579926.79 287302.02,4580852.16 286017.29,4581958.2 284647.32,4582217.97 283160.09,4582220.6 282816.19,4581779.78 282186.42,4581505.27 281628.02,4581490.69 280789.75,4581277.08 280423.25,4581064.81 280304.77,4581160.69 280341.46,4581215.66 279308.84,4583433.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[86425717.57311]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[669]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[677]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25204]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Seros]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Seros]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ser•s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ser•s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="669">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">339405.76,4591811.38 338669.01,4592237.93 337761.59,4592561.72 336784.85,4593473.25 336241.91,4594113.02 336947.66,4594480.32 337200.64,4594906.98 336314.12,4596226.7 336461.17,4596515.75 337659.67,4595631.46 338339.71,4594990.69 339002.44,4594800.64 340021.67,4594014 340891.11,4593655.03 341449.82,4593572.58 341885.81,4593450.29 342035.33,4592593.59 340817.37,4592168.07 340060.53,4592276.19 339405.76,4591811.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11589006.1921]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[670]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[678]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43146]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Senan]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Senan]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Senan]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Senan]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="670">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">304913.83,4592451.79 304445.16,4592176.14 303213.17,4592170 302398.45,4591597.48 301895.6,4591856.99 301664.12,4591329.47 300126.13,4591605.8 299538.09,4592032.54 299330.64,4594020.82 299441.95,4595694.36 299358.99,4595953.03 301013.64,4596428.52 302272.48,4596206.11 303778.38,4594662.5 304904.43,4594163.01 305098.6,4594116.16 304913.83,4592451.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21114539.51475]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[671]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[679]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25010]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alcano]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alcano]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alcan¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alcan¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="671">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">447748.16,4594280.57 447178.43,4594752.07 447526.86,4594978.8 448374.61,4595901.03 449409.71,4596333.75 450281.69,4595311.8 449985.31,4595052.3 449144.53,4594472.03 448071.9,4593904.29 447748.16,4594280.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3786303.7815]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[672]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[680]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08219]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilassar de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilassar de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilassar de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilassar de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="672">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440964.8,4592741.69 438899.6,4595273.29 439290.98,4595934.39 440177.74,4596288.82 442235.32,4596179.43 442288.48,4596205.17 442228.24,4595770.06 442447.28,4593590.98 442091.06,4593343.9 441956.64,4593013.77 442274.95,4592726.55 441953.52,4592413.27 441761.96,4592023.21 441435.98,4592028.91 441302.25,4591949.5 441155.03,4592349.33 440964.8,4592741.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9430427.41905]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[673]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[681]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08003]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="673">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">278558.76,4589808.36 278744.51,4590596.74 278222.08,4590909.93 279226.65,4592321.23 279142.13,4592768.43 278390.42,4593420.86 278268.51,4594430.63 278053.73,4595229.81 277989.88,4595672.6 278053.73,4596288.18 280166.17,4596103.15 280356.58,4594982.47 281201.38,4594280.77 280842.81,4592941.61 280518.92,4592071.05 280373.8,4591862.77 281090.96,4590788.95 280595.31,4590403.06 280604.3,4590061.53 280137.82,4589592.56 279446.42,4590046.83 278558.76,4589808.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13834661.8308]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[674]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[682]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25131]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Massalcoreig]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Massalcoreig]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Massalcoreig]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Massalcoreig]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="674">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">429318.11,4593609.69 429812.98,4592858.36 429623.64,4591909.58 429584.33,4591087.82 429817.21,4591200.6 429622.27,4589253.12 429219.66,4588959.53 427795.92,4588940.68 427387.74,4588530.92 426545.31,4589605.16 426371.91,4590318.89 426383.2,4590917.43 426171.6,4591057.05 425435.55,4591425.48 424987.28,4592128.7 423551.86,4593628.5 422821.67,4594653.01 422976.71,4595624.26 423307.05,4595737.8 424052.94,4596149.34 424381.77,4595942.11 425143.91,4595866.01 425586.06,4595681.03 426438.92,4595200.52 427150.43,4595513.02 427950.7,4595389.23 429122.22,4594193.25 429318.11,4593609.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30745347.4857]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[675]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[683]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08266]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cerdanyola del Valles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cerdanyola del Valles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cerdanyola del VallŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cerdanyola del VallŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="675">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">406151.65,4590352.55 405916.31,4590783.8 405863,4591718 405751,4592622 404969.33,4593235.71 403836.94,4594027.93 403116.81,4594982.23 403522.32,4595876.24 403998.65,4595888.24 404528.48,4596054.97 405097.96,4595809.23 408200.74,4595677.29 408828.17,4595220.1 408565.96,4595279.83 407552.3,4595317.59 407866.76,4594837.2 408102.6,4594308.57 407659.6,4593950.98 408099.07,4593435.96 408076.22,4592790.3 408387.1,4592393.18 408761.14,4592042.79 409062.59,4591590.27 408573.97,4591176 407058.36,4590558.26 406307.72,4590030.36 406151.65,4590352.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18286709.1244]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[676]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[684]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08208]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Esteve Sesrovires]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Esteve Sesrovires]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Esteve Sesrovires]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Esteve Sesrovires]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="676">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">429916.65,4595624.05 430866.23,4594214.91 431043.91,4593859.2 430810.43,4593586.94 429940.37,4593776.62 429755.45,4593445.16 429318.11,4593609.69 429122.22,4594193.25 427950.7,4595389.23 428182.43,4595549.9 429063.75,4595926.53 429274.35,4595873.86 429546.9,4596022.59 429916.65,4595624.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4070017.891]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[677]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[685]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08180]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[40]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ripollet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ripollet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ripollet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ripollet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="677">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">357559.4,4594534.8 357432.58,4593924.56 356416,4592769 356264.79,4592521.3 356085.6,4592766.82 355735.95,4592649.33 354770.08,4591550.23 354360.94,4591352.75 353960,4591521 354321.09,4593726.61 355619.64,4595754.68 356080.26,4595918.75 356535.69,4595438.05 357559.4,4594534.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8525272.7379]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[678]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[686]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43130]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rocafort de Queralt]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rocafort de Queralt]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rocafort de Queralt]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rocafort de Queralt]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="678">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">412776.99,4591079.91 412197.6,4590737.14 411477.33,4590908.77 410837.63,4591224.72 409784.91,4590236.33 409323.09,4590146.54 408972.26,4590039.4 408573.97,4591176 409062.59,4591590.27 408761.14,4592042.79 408387.1,4592393.18 408076.22,4592790.3 408099.07,4593435.96 407659.6,4593950.98 408102.6,4594308.57 407866.76,4594837.2 407552.3,4595317.59 408565.96,4595279.83 408828.17,4595220.1 409635.53,4594882.35 409989.31,4594916.61 410316.47,4594707.25 410060.61,4594387.19 410359.41,4593707.93 410992.62,4593182.39 411280.68,4592306.42 412099.92,4591370.44 412510.45,4591954.97 412496.13,4591481.28 412776.99,4591079.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12836849.4029]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[679]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[687]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08114]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Martorell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Martorell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Martorell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Martorell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="679">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">359872.65,4590060.36 359252.62,4589330.86 358972.77,4588874.71 358671.81,4588576.85 358414.52,4587949.84 357667.02,4587665.06 357172.08,4587283.57 356710.38,4586657.86 356483.38,4586592.09 355935.52,4586479.73 353565.49,4587265.78 350450.72,4590044.14 350843.2,4590378.71 350606.8,4590896.44 350493.76,4591744.2 350829.22,4592375.14 350481.95,4592528.19 350859.37,4592724.8 350952.72,4593000.95 351833.45,4593270.14 352969.83,4593256.71 353184.33,4593470.9 353928.49,4593612.31 354321.09,4593726.61 353960,4591521 354360.94,4591352.75 354770.08,4591550.23 355735.95,4592649.33 356085.6,4592766.82 356264.79,4592521.3 356416,4592769 357432.58,4593924.56 357559.4,4594534.8 358402.66,4594682.35 358932.87,4595108.71 359778.98,4595281.87 360479.29,4593539.98 360377.1,4592971.51 360378.86,4592421.22 360013.93,4591779.25 359993.98,4590894.02 359683.68,4590525.14 359872.65,4590060.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52662437.78409]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[680]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[688]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43142]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sarral]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sarral]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sarral]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sarral]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="680">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">440964.8,4592741.69 440043.11,4592082.3 439790.84,4592027.14 439592.11,4591692.93 439089.7,4591589.53 438384.52,4591497.29 437174.59,4593495.68 437696.3,4593847.7 437940.57,4594277.21 438547.13,4594816.82 438597.3,4595188.72 438899.6,4595273.29 440964.8,4592741.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7729895.8559]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[681]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[689]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08282]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tiana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tiana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tiana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tiana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="681">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">350450.72,4590044.14 349076.49,4589824.74 348876.91,4589674.97 348843.72,4589111.29 347848.87,4588950.79 347575.94,4588948.02 346375.7,4590947.7 346139.05,4592567.97 345818.26,4593304.72 345992.28,4593979.6 347563.46,4594691.06 348161.86,4594796.6 349710.93,4595002.74 350001.43,4594408.59 350272.81,4592985.21 350952.72,4593000.95 350859.37,4592724.8 350481.95,4592528.19 350829.22,4592375.14 350493.76,4591744.2 350606.8,4590896.44 350843.2,4590378.71 350450.72,4590044.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21513728.85065]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[682]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[690]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43147]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Solivella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Solivella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Solivella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Solivella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="682">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">406151.65,4590352.55 404993.36,4590545.71 404474.92,4590846.1 404191,4590779 403497.83,4591117.58 402992.13,4591034.51 402637.51,4590036.33 402363.74,4589604.27 402017.14,4589323.92 401268.53,4588907.55 401151.6,4588871.96 400712.57,4589486.07 400534.17,4590242.34 399994.4,4591375.12 399776.8,4591489.16 399336.95,4592079.09 399328.34,4592256.73 399563.13,4592561.75 400414.84,4592232.92 400449.13,4592575.9 400958.94,4593036.05 402016.68,4593521.05 403060.54,4594963.02 403116.81,4594982.23 403836.94,4594027.93 404969.33,4593235.71 405751,4592622 405863,4591718 405916.31,4590783.8 406151.65,4590352.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19742692.40201]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[683]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[691]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08222]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Llorenc d'Hortons]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Llorenc d'Hortons]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Lloren‡ d'Hortons]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Lloren‡ d'Hortons]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="683">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310012.64,4593645.56 309251.19,4592206.68 309280.52,4591711.11 309676.51,4591286.64 309737.33,4590506.21 308811.43,4590927.05 308105.92,4590017.32 308252.06,4589017.74 307853.83,4588588.14 307035.93,4589225.8 306836.54,4590064.72 306589.82,4590665.23 304913.83,4592451.79 305098.6,4594116.16 305468.77,4594212.55 305747.64,4594814.51 305967.61,4594710.75 307406.25,4594431.88 307648.39,4594386.63 310012.64,4593645.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17743394.9208]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[684]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[692]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25076]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cogul, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cogul, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cogul, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cogul, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="684">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">448071.9,4593904.29 447772.533,4593766.283 447476.84,4593541.55 447406.47,4593631.17 446494.408,4593227.22 445529.06,4592892.77 445316.23,4593308.08 445717.02,4593959.7 446511.68,4594387.42 446765.67,4594326.25 447748.16,4594280.57 448071.9,4593904.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[2210091.40701]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[685]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[693]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08172]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Premia de Mar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Premia de Mar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Premi… de Mar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Premi… de Mar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="685">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333515.63,4590992.72 333305.07,4590446.51 333757.89,4588941.63 333995.16,4588340.65 334128.73,4587746.49 333742.3,4587354.71 332785.95,4586931.78 333182.05,4585786.44 333222.16,4585300.96 332393.78,4584663.02 332454.38,4584276.07 332210.19,4584044.25 331383.65,4584400.91 330798.42,4585243.65 330350.78,4586506.87 329557.76,4587243.07 329257.01,4589097.8 329446.52,4589529.03 328426.34,4590907.72 327146.63,4592252.21 327376.27,4592741.82 327643.1,4593648.85 328001.5,4593650.32 328920.08,4593742.34 329238.18,4593504.48 329593.57,4594012.26 330510.35,4594330.79 330830.62,4594032.87 331951.86,4593171.26 332370.76,4592608.88 332602.1,4592416.05 333108.02,4591538.01 333515.63,4590992.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37865126.8986]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[686]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[694]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25255]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vinaixa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vinaixa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vinaixa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vinaixa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="686">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">339405.76,4591811.38 338306.01,4591098.34 337853.22,4590140.03 337640.08,4589957.09 336971.2,4589762.33 336918.99,4589695.95 335898,4590707.55 334926.15,4590688.82 334636.73,4591180.98 333912.54,4591240.66 333515.63,4590992.72 333108.02,4591538.01 332602.1,4592416.05 332370.76,4592608.88 334058.58,4593576.68 334572.06,4593541.96 335876.61,4594309.55 336241.91,4594113.02 336784.85,4593473.25 337761.59,4592561.72 338669.01,4592237.93 339405.76,4591811.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16028352.24894]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[687]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[695]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25097]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fulleda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fulleda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fulleda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fulleda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="687">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">345366.32,4587076.59 345170.02,4588110.96 344399.09,4590494.25 343896.79,4593293.54 343884.54,4593523.57 345992.28,4593979.6 345818.26,4593304.72 346139.05,4592567.97 346375.7,4590947.7 347575.94,4588948.02 347848.87,4588950.79 347407.31,4587961.74 347136.38,4587337.67 346541.46,4587785.26 345954.13,4587937.59 345802.96,4587528.83 345366.32,4587076.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13844720.77845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[688]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[696]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43029]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Blancafort]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Blancafort]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Blancafort]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Blancafort]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="688">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">434481.87,4587543.93 434353.68,4588072.92 435184.22,4589070.41 434820.47,4590200.59 434939.64,4590614.65 435051.8,4590880.07 434246.89,4591571.05 434718.82,4592071.08 434543.15,4592299.48 434351.74,4592698.75 434624.54,4593430.35 435384.41,4593915.06 435626.45,4593813.51 436836.53,4593704.58 437174.59,4593495.68 438384.52,4591497.29 439149.49,4590304.65 437975.24,4589309.05 436367.93,4586536.89 435777.65,4587037.85 435312.33,4586905.64 435010.32,4587188.9 434479.23,4587459.29 434481.87,4587543.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21585033.7845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[689]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[697]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08015]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[13]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Badalona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Badalona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Badalona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Badalona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="689">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309957.38,4587651.89 309853.27,4588100.92 309800.92,4590026.26 309840.42,4590458.6 309737.33,4590506.21 309676.51,4591286.64 309280.52,4591711.11 309251.19,4592206.68 310012.64,4593645.56 311101.6,4593441.19 311717.86,4593087.75 312764.91,4592816.78 314426.37,4593069.59 314902.19,4593200.06 315334.95,4592934.59 316074.41,4590820.16 315538.99,4590435.65 315676.4,4589992.65 315271.83,4589668.84 315070.08,4589053.75 314115.44,4590041.11 313410.04,4590692.26 313160.63,4590526.41 313120.07,4590099.62 312627.8,4589441.01 313166.88,4588169.61 313170.03,4587621.66 310788.64,4588368.84 309957.38,4587651.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25600993.6261]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[690]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[698]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25006]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albages, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albages, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albag‚s, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albag‚s, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="690">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">445529.06,4592892.77 444088.158,4592455.345 443119.408,4592020.97 443073.59,4592147.38 442632.97,4591998.13 442367.12,4591950.75 441439.25,4591557.19 441302.25,4591949.5 441435.98,4592028.91 441761.96,4592023.21 441953.52,4592413.27 442274.95,4592726.55 441956.64,4593013.77 442091.06,4593343.9 442447.28,4593590.98 442778.45,4593419.53 443134.3,4593422.9 443169.408,4593566.282 443374.62,4593282.13 443669.408,4593444.407 443753.783,4593260.032 443887.38,4593346.59 443966.283,4593347.532 444031.908,4593438.157 444303.13,4593275.73 444491.283,4593419.407 444697.533,4592922.532 444803.04,4592929.09 445316.23,4593308.08 445529.06,4592892.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3673019.69626]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[691]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[699]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08118]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masnou, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masnou, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Masnou, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Masnou, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="691">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">343896.79,4593293.54 344399.09,4590494.25 345170.02,4588110.96 345366.32,4587076.59 344684.5,4586882.8 344065.53,4586222.06 344405.15,4585642.38 343728.5,4584041.44 343201.57,4581992.4 343129.79,4581472.74 341729.03,4580877.43 340988.14,4580607.85 340796.92,4581281.56 340989.78,4581728.54 340546.31,4582174.86 339962.92,4583031.35 339680.32,4584248.01 339057.01,4585788.47 338936.8,4586929.01 338971.84,4587871.35 338531.78,4589045.05 338258.38,4589294.06 337640.08,4589957.09 337853.22,4590140.03 338306.01,4591098.34 339405.76,4591811.38 340060.53,4592276.19 340817.37,4592168.07 342035.33,4592593.59 343049.58,4592880.2 343896.79,4593293.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[57302101.44445]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[692]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[700]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43054]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Espluga de Francoli, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Espluga de Francoli, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Espluga de Francol¡, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Espluga de Francol¡, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="692">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">364682.36,4584068.29 363654.91,4584290.15 362744.65,4584746.07 362268.56,4585541.85 362514.24,4586474.45 362603.72,4587079.77 362410.51,4587767.38 363535.26,4588147.02 364022.26,4588770.58 363876.85,4589250.17 365111.62,4589956.17 366673.41,4588588.04 367182.49,4589110.64 368231.82,4589964.95 369245.17,4589963.08 370168.78,4590366.55 370745.41,4591057.53 371007.73,4591576.6 370980.28,4592222.11 371268.97,4592351.14 371698.98,4592252.34 372293.07,4593011.37 372771.25,4593282.54 373584.87,4592858.67 373666.61,4592289.67 373620.53,4591223.43 372217.5,4589441.78 372670.16,4588698.93 372745.87,4588492.76 374386.82,4588493.65 374371.16,4588338.51 373438.83,4587970.32 372938.34,4588148.68 372802.1,4587235.49 373443.82,4586978.08 373384.33,4586671.46 373198.31,4586332.24 373485.12,4585897.58 373917.08,4584634.48 373342.07,4584297.95 373071.81,4583468.85 372717.48,4582733.42 372428.5,4582226.69 372154.88,4582824.03 371740.16,4582781.19 370978.28,4582221.52 370482.18,4582284.54 369097.63,4582690.95 368869.31,4581816.23 367209.36,4581309.72 367279.96,4581686.78 367653.79,4581995.29 367817,4582548.94 367933.06,4583293.03 368124.93,4583568.71 368395.86,4583783.37 368432.1,4584834.92 367832.28,4584671.34 367156.31,4585051.62 366739.61,4584291.18 366679.907,4584006.7 366215.5,4584065.89 365927.05,4584352.44 365524.7,4584197.59 364877.08,4584482.6 364682.36,4584068.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[72478248.37865]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[693]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[701]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43120]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Querol]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Querol]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Querol]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Querol]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="693">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">325438.24,4585930.11 324863,4586536 323776,4587392 324210.76,4588230.45 324224.05,4588659.96 324572.83,4589269.34 323895.2,4589554.3 323440.04,4590267.94 324412.56,4590899.51 323853.28,4591599.85 324082.48,4592767.95 325872.32,4592890.58 327101.36,4592157.74 327146.63,4592252.21 328426.34,4590907.72 329446.52,4589529.03 329257.01,4589097.8 329557.76,4587243.07 330350.78,4586506.87 329000.75,4585992.34 328049.49,4585978.36 326197.27,4585570.1 325438.24,4585930.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32489361.44605]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[694]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[702]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25009]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albi, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albi, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albi, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albi, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="694">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">323776,4587392 323260,4587696 322687,4587342 321790,4587818 321387,4587874 320972,4588157 320189.99,4588195.68 319450.75,4588134.04 317949.19,4589118.24 317541.25,4589294.43 317942.37,4588312.11 318315.85,4587742.95 318538.24,4587038.9 318828.77,4586339.89 318790.24,4586220.24 318037.48,4586206.01 316550.08,4586271.83 316317.93,4587616.63 315836.17,4588093.96 315676.4,4589992.65 315538.99,4590435.65 316074.41,4590820.16 317302.58,4591323.44 317789.56,4591748.11 318187.67,4592840 320132.54,4592716.09 322313.19,4591597.28 322808.01,4590509 323440.04,4590267.94 323895.2,4589554.3 324572.83,4589269.34 324224.05,4588659.96 324210.76,4588230.45 323776,4587392</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34496774.16961]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[695]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[703]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25073]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cervia de les Garrigues]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cervia de les Garrigues]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cervi… de les Garrigues]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cervi… de les Garrigues]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="695">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">439149.49,4590304.65 438384.52,4591497.29 439089.7,4591589.53 439592.11,4591692.93 439790.84,4592027.14 440043.11,4592082.3 440964.8,4592741.69 441155.03,4592349.33 441302.25,4591949.5 441439.25,4591557.19 439149.49,4590304.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3244131.9781]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[696]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[704]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08126]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[21]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montgat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montgat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montgat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montgat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="696">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">307035.93,4589225.8 304972.63,4587983 304808.07,4587707.13 305033.38,4587481.82 304847.54,4587399.96 304651.97,4587316.4 303652.52,4587762.64 302351.07,4587837.44 301903.37,4588279.91 301297.9,4589346.67 301664.12,4591329.47 301895.6,4591856.99 302398.45,4591597.48 303213.17,4592170 304445.16,4592176.14 304913.83,4592451.79 306589.82,4590665.23 306836.54,4590064.72 307035.93,4589225.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19883246.00235]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[697]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[705]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25105]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granyena de les Garrigues]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granyena de les Garrigues]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granyena de les Garrigues]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granyena de les Garrigues]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="697">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">389670.23,4587701.94 387825.15,4588267.11 386645.81,4588730.4 386302.91,4589143.58 386972.44,4590281.95 386692.4,4590347.38 386328.52,4590939.59 386783.97,4591401.39 387441.97,4591489.02 388333.84,4591911.64 388398.09,4592440.59 388643.82,4592146.5 390264,4592117.68 391221.85,4592273.07 390911.06,4591957.23 390735.5,4591060.8 390906.7,4590358.11 390085.89,4590603.45 389976.3,4590232.04 389595.15,4589843.72 390099.04,4589336.33 390277.45,4588902.39 389670.23,4587701.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14011833.0308]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[698]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[706]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08236]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Quinti de Mediona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Quinti de Mediona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Quint¡ de Mediona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Quint¡ de Mediona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="698">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">390099.04,4589336.33 389595.15,4589843.72 389976.3,4590232.04 390085.89,4590603.45 390906.7,4590358.11 390735.5,4591060.8 390911.06,4591957.23 391221.85,4592273.07 391619.54,4592398.62 391812.99,4592397.31 392498.65,4591731.93 392421.11,4591032.24 392156.55,4590530.64 392245.97,4590182.25 392065.54,4589140.65 391710.28,4589151.82 391439.29,4589508.01 390906.36,4589186.93 390687.55,4589614.57 390099.04,4589336.33</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5322243.05855]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[699]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[707]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08232]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pere de Riudebitlles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pere de Riudebitlles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pere de Riudebitlles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pere de Riudebitlles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="699">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301903.37,4588279.91 302016.89,4587220.65 301469.48,4585834.45 300508.67,4585039.41 299965.08,4585022.76 298990.6,4585239.8 298298.72,4586034.39 296747.9,4587193.54 296455.91,4587285.08 296913.65,4590077 299538.09,4592032.54 300126.13,4591605.8 301664.12,4591329.47 301297.9,4589346.67 301903.37,4588279.91</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27200130.2902]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[700]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[708]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25226]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrebesses]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torrebesses]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrebesses]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torrebesses]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="700">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">434481.87,4587543.93 434295.54,4587463.86 433499.27,4589104.64 432223.94,4590919.77 432205.71,4591195.33 432219.41,4591291.62 433205.7,4591819.8 433623.71,4591591.64 434246.89,4591571.05 435051.8,4590880.07 434939.64,4590614.65 434820.47,4590200.59 435184.22,4589070.41 434353.68,4588072.92 434481.87,4587543.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6673172.37895]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[701]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[709]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08245]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[13]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Coloma de Gramenet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Coloma de Gramenet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Coloma de Gramenet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Coloma de Gramenet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="701">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395765.75,4586777.88 395515.88,4586144.59 393890.46,4587992.62 393216.84,4588139.31 391922.95,4586080.18 391165.18,4585990.07 390412.76,4586469.44 389684.79,4587576.62 389670.23,4587701.94 390277.45,4588902.39 390099.04,4589336.33 390687.55,4589614.57 390906.36,4589186.93 391439.29,4589508.01 391710.28,4589151.82 392065.54,4589140.65 392245.97,4590182.25 392156.55,4590530.64 392421.11,4591032.24 392498.65,4591731.93 392683.83,4591718.1 393111.26,4591485.3 393989.29,4591310.23 394667.18,4590881.97 395462.53,4590609.62 395796.56,4590556.93 395611.78,4590116.08 397294.76,4589194.57 397273.37,4588342.79 396374.02,4587825.51 395765.75,4586777.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23319636.0559]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[702]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[710]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08287]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrelavit]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lavit]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrelavit]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lavit]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="702">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">397294.76,4589194.57 397874.93,4589721.36 397789.53,4590099.27 397840.03,4591178.34 398199.36,4591082.01 398751.94,4591393.65 399776.8,4591489.16 399994.4,4591375.12 400534.17,4590242.34 400712.57,4589486.07 401151.6,4588871.96 401175,4588256.63 400891.43,4588112.35 400441.52,4588103.56 400341.77,4587557.42 399851.25,4587007.03 399967.51,4585850 398997.31,4585232.33 398304.5,4585573.89 398083.12,4585872.99 396863.5,4586543.3 395765.75,4586777.88 396374.02,4587825.51 397273.37,4588342.79 397294.76,4589194.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18480360.74925]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[703]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[711]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08240]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Sadurni d'Anoia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Sadurni d'Anoia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Sadurn¡ d'Anoia]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Sadurn¡ d'Anoia]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="703">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">288769.55,4585197.18 288913.26,4586811.22 288781.02,4588407.29 288867.45,4589534.51 289641.07,4589751.43 290574.61,4591160.57 290903.46,4591351.41 290880.32,4590783.34 293088.79,4589662.77 293630.82,4589799.53 294267.2,4588625.45 294717.29,4588190.13 296455.91,4587285.08 296747.9,4587193.54 298298.72,4586034.39 298990.6,4585239.8 299965.08,4585022.76 299728.43,4584742.64 298120.24,4583472.54 298191.81,4581799.24 297902.45,4581153.03 298131.34,4580446.67 298065.51,4578850.29 297575.66,4577203.95 297052.2,4577149.9 295438.51,4578119.27 294330.91,4580953.49 293383.91,4582693.55 293391.95,4583371.83 292915.28,4585416.72 288769.55,4585197.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[66704338.77255]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[704]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[712]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25125]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llardecans]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llardecans]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Llardecans]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Llardecans]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="704">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">336918.99,4589695.95 336566.01,4588608.94 336205.33,4587681.3 335577.52,4587607.26 335550.3,4587021.74 335290.29,4586261.93 334941.22,4586240.48 334274.29,4585675.38 333182.05,4585786.44 332785.95,4586931.78 333742.3,4587354.71 334128.73,4587746.49 333995.16,4588340.65 333757.89,4588941.63 333305.07,4590446.51 333515.63,4590992.72 333912.54,4591240.66 334636.73,4591180.98 334926.15,4590688.82 335898,4590707.55 336918.99,4589695.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13173180.338]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[705]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[713]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25218]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tarres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tarres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tarr‚s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tarr‚s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="705">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">407751.14,4587298.27 407888.41,4587490.63 406307.72,4590030.36 407058.36,4590558.26 408573.97,4591176 408972.26,4590039.4 409323.09,4590146.54 409784.91,4590236.33 410837.63,4591224.72 411477.33,4590908.77 412197.6,4590737.14 412506.13,4590057.9 412193.09,4589117.32 412329.22,4588503.5 411962.84,4588138.3 411423.56,4587730.29 407751.14,4587298.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16491604.3471]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[706]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[714]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08066]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellvi de Rosanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellvi de Rosanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellv¡ de Rosanes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellv¡ de Rosanes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="706">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">279308.84,4583433.26 276071.44,4586253.21 277505.67,4587783.73 278148.44,4588904.84 278558.76,4589808.36 279446.42,4590046.83 280137.82,4589592.56 280604.3,4590061.53 280595.31,4590403.06 281090.96,4590788.95 281338.02,4591168.67 282569.18,4591018.2 283368.37,4590046.12 284133.09,4588545.79 284683.57,4586852.47 284182.23,4586008.17 283275.83,4586399.58 282574.53,4586374.74 282615.55,4585746.1 281566.09,4584985.36 280796.08,4584273.01 280516.79,4583909.03 279308.84,4583433.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37218945.85806]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[707]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[715]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25102]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granja d'Escarp, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granja d'Escarp, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granja d'Escarp, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granja d'Escarp, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="707">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">407751.14,4587298.27 407447.61,4587115.18 407125.59,4586503.12 407265.89,4586330.07 406568.02,4585224.7 406885.53,4584844 406319.17,4584408.25 406089.73,4583822.42 405356.26,4585213.2 405186.01,4584645.65 403968.49,4585289.82 402752.92,4587285.63 401175,4588256.63 401151.6,4588871.96 401268.53,4588907.55 402017.14,4589323.92 402363.74,4589604.27 402637.51,4590036.33 402992.13,4591034.51 403497.83,4591117.58 404191,4590779 404474.92,4590846.1 404993.36,4590545.71 406151.65,4590352.55 406307.72,4590030.36 407888.41,4587490.63 407751.14,4587298.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26115400.59089]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[708]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[716]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08091]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gelida]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gelida]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gelida]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gelida]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="708">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">412329.22,4588503.5 412193.09,4589117.32 412506.13,4590057.9 412197.6,4590737.14 412776.99,4591079.91 413481.74,4590598.07 414109.1,4590865.3 414686.11,4590185.4 415045.47,4589240.04 415337.31,4588951.57 414812.55,4588537.78 414317.32,4588635.07 413024.25,4588371.62 412329.22,4588503.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5802922.32155]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[709]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[717]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08196]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Andreu de la Barca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Andreu de la Barca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Andreu de la Barca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Andreu de la Barca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="709">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309957.38,4587651.89 309867.55,4587280.19 309149.93,4586958.05 307703.28,4587137.53 306947.7,4586390.94 307210.63,4585655.03 306523.4,4586249.8 304847.54,4587399.96 305033.38,4587481.82 304808.07,4587707.13 304972.63,4587983 307035.93,4589225.8 307853.83,4588588.14 308252.06,4589017.74 308105.92,4590017.32 308811.43,4590927.05 309737.33,4590506.21 309840.42,4590458.6 309800.92,4590026.26 309853.27,4588100.92 309957.38,4587651.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12366464.077]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[710]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[718]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25206]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Soleras, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Soleras, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Soler…s, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Soler…s, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="710">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313296.02,4578441.59 311094.94,4580819.24 311049.27,4581410.34 310600.24,4582465.6 311533.76,4583404.72 311017.84,4584241.19 311764.53,4585693.3 309957.38,4587651.89 310788.64,4588368.84 313170.03,4587621.66 313166.88,4588169.61 312627.8,4589441.01 313120.07,4590099.62 313160.63,4590526.41 313410.04,4590692.26 314115.44,4590041.11 315070.08,4589053.75 315271.83,4589668.84 315676.4,4589992.65 315836.17,4588093.96 316317.93,4587616.63 316550.08,4586271.83 318037.48,4586206.01 318790.24,4586220.24 319148.98,4585784.75 319460.51,4585057.49 319565.61,4583963.23 319523.32,4583267.95 319663.87,4582782.38 319916.36,4582313.27 319870.98,4581519.55 318760.28,4581109.87 318490.79,4580660.54 318295.9,4580144.33 317659.2,4577726.46 316988.83,4577544.76 315846.4,4577725.34 315584.08,4577608.72 314803.27,4578045.46 313555.24,4578411.82 313296.02,4578441.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[77461899.07649]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[711]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[719]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25118]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Juncosa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Juncosa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Juncosa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Juncosa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="711">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">419299.47,4588439.61 418967.27,4587735.94 418329.28,4587184.62 417972.37,4586920.67 416899.62,4586224.23 416106.23,4587892.1 416102.69,4588979.38 416314.87,4589789.22 416548,4590463 417615.9,4590334.27 418587.83,4590112.25 418710.13,4589253.88 419150.9,4588898.29 419299.47,4588439.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9221668.73745]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[712]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[720]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08158]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Papiol, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Papiol, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Papiol, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Papiol, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="712">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392152.49,4583612.08 391520.22,4583297.96 391573.45,4582885.74 391817.67,4582672.7 391577.99,4582317.56 391300.49,4582383.81 390299.97,4582481.26 389409.87,4583170.74 388586.01,4583602.76 386878.29,4585048.5 386485.67,4585459.35 385478.78,4586200.51 384791.83,4586188.58 383359.94,4586638.84 382988.59,4586578.27 382203.32,4587489.81 381164.06,4588289.61 380818.28,4589164.34 382752,4589984.83 382919.8,4589923 383724.4,4590220.32 384413.02,4590075.29 385500.3,4589422.63 386302.91,4589143.58 386645.81,4588730.4 387825.15,4588267.11 389670.23,4587701.94 389684.79,4587576.62 390412.76,4586469.44 391165.18,4585990.07 391922.95,4586080.18 391563.12,4585056.43 390885.19,4585121.99 390836.159,4584705.921 391039.16,4584530.62 391144.83,4584247.08 392152.49,4583612.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37012532.75712]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[713]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[721]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08085]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Font-rubi]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guardiola de Font-rubi]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Font-rub¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Guardiola de Font-rub¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="713">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362220.87,4581761.28 361166.65,4583188.53 360599.29,4584691.88 360209,4585156 359688.19,4586073.32 358859.77,4585626.19 358783.92,4586235.88 358783.45,4586763.79 358466.3,4587160.94 358414.52,4587949.84 358671.81,4588576.85 358972.77,4588874.71 359252.62,4589330.86 359872.65,4590060.36 360029.33,4589985.81 360238.46,4589424.53 360341.42,4587820.44 361574.57,4588071.18 362410.51,4587767.38 362603.72,4587079.77 362514.24,4586474.45 362268.56,4585541.85 362744.65,4584746.07 363654.91,4584290.15 364682.36,4584068.29 364864.49,4583458.29 364424.83,4583326.9 363641.65,4583005.86 363262.74,4582403.85 363353,4580419 362885.55,4580601.48 362435.95,4580974.86 362482.48,4581559.94 362220.87,4581761.28</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21684097.16015]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[714]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[722]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43113]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pont d'Armentera, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pont d'Armentera, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pont d'Armentera, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pont d'Armentera, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="714">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">356483.38,4586592.09 355577.2,4585703.08 354600.16,4585255.6 354738.9,4584668.63 353969.01,4583481.78 354119.83,4583132.99 352972.95,4583068.02 352860.88,4582607.38 349344,4584627 349554.82,4585321.71 349640,4586262 349865.97,4587217.94 351025.2,4587229.58 350068.5,4588747.58 349579.62,4588600.85 348843.72,4589111.29 348876.91,4589674.97 349076.49,4589824.74 350450.72,4590044.14 353565.49,4587265.78 355935.52,4586479.73 356483.38,4586592.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26306315.6526]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[715]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[723]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43021]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Barbera de la Conca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Barbera de la Conca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Barber… de la Conca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Barber… de la Conca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="715">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">379917,4581016.01 379535.6,4580843.05 378901.96,4581047.33 378649.76,4581756.25 377801.53,4582783.29 377981.5,4583999.98 378341.11,4585229.85 377996.1,4585255.5 377628.12,4585744.54 378460.92,4587080.79 378605.42,4588584.56 377889.41,4588845.39 377657.34,4589310.96 378315.53,4588997.87 378340.28,4589405.76 379111.14,4589578.79 379318.91,4590027.82 380216.56,4589948.49 380818.28,4589164.34 381164.06,4588289.61 382203.32,4587489.81 382988.59,4586578.27 383359.94,4586638.84 384791.83,4586188.58 385478.78,4586200.51 386485.67,4585459.35 385692.11,4585678.65 384655.02,4584938.41 382835.87,4584128.83 382153.55,4582901.76 380002.15,4581465.39 379917,4581016.01</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[36783746.45995]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[716]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[724]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08288]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrelles de Foix]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torrelles de Foix]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrelles de Foix]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torrelles de Foix]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="716">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333271.63,4579309.1 333894.25,4580144.58 333641.96,4582321.18 334175.3,4583736.76 333057.72,4584243.16 332454.38,4584276.07 332393.78,4584663.02 333222.16,4585300.96 333182.05,4585786.44 334274.29,4585675.38 334941.22,4586240.48 335290.29,4586261.93 335550.3,4587021.74 335577.52,4587607.26 336205.33,4587681.3 336566.01,4588608.94 336918.99,4589695.95 336971.2,4589762.33 337640.08,4589957.09 338258.38,4589294.06 338531.78,4589045.05 338971.84,4587871.35 338936.8,4586929.01 339057.01,4585788.47 339680.32,4584248.01 339962.92,4583031.35 340546.31,4582174.86 340989.78,4581728.54 340796.92,4581281.56 340988.14,4580607.85 340000,4580041.31 340040.1,4579301.71 340026.56,4578585.29 339138.47,4578635.35 338706.93,4578308.42 338207.4,4577535.72 338162.73,4576997.02 336677.88,4576883.1 335725.69,4577276.73 335396.92,4577213.82 334892.97,4577190 334564.2,4577285.26 334415.77,4577756.89 333836.59,4577258.3 332958.05,4577178.32 332956.25,4577715.73 333107.39,4578900.43 333271.63,4579309.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[66406640.6655]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[717]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[725]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43176]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vimbodi]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vimbodi]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vimbod¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vimbod¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="717">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">325438.24,4585930.11 325921,4584502 326467,4584145 327715.63,4582821.4 328031.73,4581757.36 328788,4580526 328737.68,4580040.44 328307.82,4579944.02 327226.73,4579890.93 325544.54,4579861.07 324865.51,4579697.09 324395.44,4579459.71 323117.7,4579024.33 321313.5,4578685.93 320007.92,4580567.25 319870.98,4581519.55 319916.36,4582313.27 319663.87,4582782.38 319523.32,4583267.95 319565.61,4583963.23 319460.51,4585057.49 319148.98,4585784.75 318790.24,4586220.24 318828.77,4586339.89 318538.24,4587038.9 318315.85,4587742.95 317942.37,4588312.11 317541.25,4589294.43 317949.19,4589118.24 319450.75,4588134.04 320189.99,4588195.68 320972,4588157 321387,4587874 321790,4587818 322687,4587342 323260,4587696 323776,4587392 324863,4586536 325438.24,4585930.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[61591724.8339]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[718]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[726]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25169]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pobla de Cervoles, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pobla de Cervoles, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pobla de C‚rvoles, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pobla de C‚rvoles, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="718">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348843.72,4589111.29 349579.62,4588600.85 350068.5,4588747.58 351025.2,4587229.58 349865.97,4587217.94 349640,4586262 349554.82,4585321.71 349344,4584627 348841.14,4584335.86 348448.5,4585270.62 348825.32,4585496.82 348169.47,4586366.45 347953.73,4586361.85 347981.13,4586934.4 348092.13,4587253.96 347407.31,4587961.74 347848.87,4588950.79 348843.72,4589111.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8065468.64915]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[719]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[727]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43107]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pira]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pira]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pira]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pira]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="719">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">372428.5,4582226.69 372717.48,4582733.42 373071.81,4583468.85 373342.07,4584297.95 373917.08,4584634.48 373485.12,4585897.58 373198.31,4586332.24 373384.33,4586671.46 373443.82,4586978.08 372802.1,4587235.49 372938.34,4588148.68 373438.83,4587970.32 374371.16,4588338.51 374386.82,4588493.65 374968.42,4587617.37 375775.19,4588302.78 377889.41,4588845.39 378605.42,4588584.56 378460.92,4587080.79 377628.12,4585744.54 377996.1,4585255.5 378341.11,4585229.85 377981.5,4583999.98 377801.53,4582783.29 376236.39,4583173.1 375448.05,4583792.79 372428.5,4582226.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25345479.51229]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[720]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[729]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08168]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pontons]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pontons]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pontons]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pontons]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="720">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">417283.47,4585081.34 416899.62,4586224.23 417972.37,4586920.67 418329.28,4587184.62 418967.27,4587735.94 419299.47,4588439.61 420106.23,4588739.56 421813.44,4588629.05 421732.9,4588028.47 421521.28,4587808.48 421504.59,4587674.6 421355.3,4587622.29 421283.96,4586660.18 421036.29,4586393.96 421280.29,4585627.5 421093.88,4585375.09 420905.16,4585426.58 420522.54,4585089.5 419945.48,4584713.8 419418.7,4583937.69 419543.44,4583595.4 418196.37,4582564.78 418215.32,4583067.89 417859.09,4583718.61 417283.47,4585081.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15791782.0209]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[721]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[730]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08123]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Molins de Rei]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Molins de Rei]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Molins de Rei]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Molins de Rei]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="721">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">417283.47,4585081.34 416366.6,4584731.04 415581.72,4584810.35 415252.21,4585127.51 415014.41,4585289.76 415055.42,4585542.98 414550.64,4585560.37 413819.51,4585812.28 412151.77,4585765.57 412000.75,4585819.69 412016.95,4586117.05 412731.21,4586184.23 413150.07,4586295.35 414344.08,4587315.11 415526.6,4587756.5 415858.96,4588462.04 416106.23,4587892.1 416899.62,4586224.23 417283.47,4585081.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8241431.31205]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[722]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[731]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08157]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palleja]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palleja]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pallej…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pallej…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="722">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">307241.19,4576312.65 306769.21,4576227.01 306627.72,4576332.94 306715.44,4576965.74 306523.69,4577922.24 306262.98,4578166.71 305532.03,4578591.39 305072.14,4578729.06 304458.13,4578660.2 302335.43,4579484.44 301203.73,4579100.87 300658.93,4579205.1 300439.61,4578729.75 299341.05,4577584.66 298663.91,4577156.06 298405.4,4576372.9 297944.35,4575882.62 297592.87,4576922.54 297575.66,4577203.95 298065.51,4578850.29 298131.34,4580446.67 297902.45,4581153.03 298191.81,4581799.24 298120.24,4583472.54 299728.43,4584742.64 299965.08,4585022.76 300508.67,4585039.41 301469.48,4585834.45 302016.89,4587220.65 301903.37,4588279.91 302351.07,4587837.44 303652.52,4587762.64 304651.97,4587316.4 304847.54,4587399.96 306523.4,4586249.8 307210.63,4585655.03 308802.99,4584342.88 309255.23,4583542.8 310600.24,4582465.6 310521.58,4582237.03 309112.39,4580159.59 309274.16,4579622.1 308732.77,4578851.99 308369.54,4578132.14 308204.83,4577462.78 307918.53,4577066.81 307241.19,4576312.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[88777387.29596]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[723]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[732]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25101]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granadella, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granadella, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granadella, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granadella, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="723">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">396188.05,4582774.78 395663.24,4583284.34 395596.65,4583387.72 395320.534,4583588.734 394624.34,4583550.75 394484.43,4583451.29 393468.05,4583390.29 392468.5,4583583.96 392930.35,4584245.69 393990.1,4584995.19 395515.88,4586144.59 395765.75,4586777.88 396863.5,4586543.3 398083.12,4585872.99 398304.5,4585573.89 398997.31,4585232.33 399967.51,4585850 399851.25,4587007.03 400341.77,4587557.42 400441.52,4588103.56 400891.43,4588112.35 401175,4588256.63 402752.92,4587285.63 403968.49,4585289.82 405186.01,4584645.65 405356.26,4585213.2 406089.73,4583822.42 406230.57,4582916.08 405455.87,4582535.03 405067.45,4582593.9 404701.49,4582180.57 402574.96,4581240.09 402403.97,4580785.46 401820.85,4579748.28 400010.04,4578709.04 400105.05,4579577.21 400293.08,4579888.74 400117.87,4580213.73 399324.81,4581154.95 397447.47,4582000.75 396188.05,4582774.78</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[56327109.65908]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[724]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[733]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08273]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Subirats]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pau d'Ordal]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Subirats]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pau d'Ordal]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="724">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">392152.49,4583612.08 391144.83,4584247.08 391602.22,4584550.24 391563.12,4585056.43 391922.95,4586080.18 393216.84,4588139.31 393890.46,4587992.62 395515.88,4586144.59 393990.1,4584995.19 392930.35,4584245.69 392468.5,4583583.96 392152.49,4583612.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9650120.26405]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[725]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[734]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08164]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pla del Penedes, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pla del Penedes, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pla del PenedŠs, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pla del PenedŠs, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="725">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348742.02,4575635.07 348443.41,4575657.45 348098.92,4576104.47 347951.78,4577240.08 348059,4578388 348336.56,4579079.91 347713.63,4579495.33 347254.33,4580084.98 346497.45,4580071.84 346125.52,4580353.83 345476.4,4580176.46 345444.07,4579755.21 345485.75,4579540.27 345604.1,4579231.64 345507,4578786.79 345169.86,4577761.51 344682.51,4577497.06 344682.48,4576551.67 344583.81,4575903.75 345244.05,4575402.48 345318.37,4575224.02 344730.09,4574899.6 344243,4574910 343536,4574561 342164,4574899 341389,4575026 341618,4575377 341248.37,4575731.83 338314.77,4576280.66 338233.22,4576474.6 338162.73,4576997.02 338207.4,4577535.72 338706.93,4578308.42 339138.47,4578635.35 340026.56,4578585.29 340040.1,4579301.71 340000,4580041.31 340988.14,4580607.85 341729.03,4580877.43 343129.79,4581472.74 343201.57,4581992.4 343728.5,4584041.44 344405.15,4585642.38 344065.53,4586222.06 344684.5,4586882.8 345366.32,4587076.59 345802.96,4587528.83 345954.13,4587937.59 346541.46,4587785.26 347136.38,4587337.67 347407.31,4587961.74 348092.13,4587253.96 347981.13,4586934.4 347953.73,4586361.85 348169.47,4586366.45 348825.32,4585496.82 348448.5,4585270.62 348841.14,4584335.86 349344,4584627 352860.88,4582607.38 352822.7,4582128 352064.89,4581910.17 351671.97,4580064.03 351587.16,4579541.51 351568.09,4579192.45 351230.84,4578477.94 350843.94,4578100.12 349390.38,4577114.63 348742.02,4575635.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[90820422.35424]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[726]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[735]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43086]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montblanc]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montblanc]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montblanc]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montblanc]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="726">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362220.87,4581761.28 360668.69,4581672.79 358868.48,4582288.61 358679,4581489 358575,4581614 357576.33,4582445.81 356941.12,4582299.95 355611.65,4582981.94 354119.83,4583132.99 353969.01,4583481.78 354738.9,4584668.63 354600.16,4585255.6 355577.2,4585703.08 356483.38,4586592.09 356710.38,4586657.86 357172.08,4587283.57 357667.02,4587665.06 358414.52,4587949.84 358466.3,4587160.94 358783.45,4586763.79 358783.92,4586235.88 358859.77,4585626.19 359688.19,4586073.32 360209,4585156 360599.29,4584691.88 361166.65,4583188.53 362220.87,4581761.28</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26364261.4192]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[727]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[736]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43036]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabra del Camp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabra del Camp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabra del Camp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabra del Camp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="727">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">435457.5,4584982.5 434745.03,4583980.69 434420.19,4583634 434100.658,4583166.282 434022.533,4583188.157 433800.658,4582997.532 433606.908,4582700.657 433439.9,4582618.31 433331.908,4582469.407 433467.53,4582334.63 433478.783,4582253.782 433241.283,4581860.032 433197.533,4581885.032 433405.78,4582215.06 433244.408,4582369.407 433163.158,4582325.657 432803.783,4581628.782 432588.84,4581371.75 432100.658,4579888.157 432003.783,4579781.907 431816.41,4579708.75 431100.658,4578194.407 430825.658,4576505.344 430766.283,4576517.844 431028.783,4578266.282 431766.283,4579805.344 431981.908,4579892.844 432128.783,4580374.094 431994.408,4580399.094 432019.408,4580461.594 432116.283,4580445.969 432161.69,4580631.13 432172.533,4580860.032 432053.783,4580842.844 432025.658,4580889.719 432102.63,4580994.63 432141.283,4581197.532 432050.658,4581460.032 431917.35,4581408.91 431835.033,4581313.157 431456.07,4580731.73 431731.908,4580588.157 431653.783,4580431.907 431353.29,4580593.79 431205.4,4580172.99 431573.28,4579922.3 431496.03,4579699.69 431082.56,4579876.88 430910.033,4579506.907 431227.94,4579336.19 431114.38,4579118.05 430747.533,4579252.219 430664.53,4579127.19 430918.94,4578872.69 430700.84,4578463.75 430444.99,4578668.67 430319.408,4578427.219 430464.41,4578225.04 430584.16,4578242.84 430435.27,4578017.8 430050.658,4578345.969 429905.48,4578303.24 429822.533,4578195.969 429951.13,4577873.05 429283.19,4577450.5 429210.033,4577720.969 429124.16,4577695.88 428925.658,4576700.657 428597.533,4576688.157 428492.59,4576487.25 428806.13,4576282.75 428691.283,4576006.907 428868.88,4575940 429513.158,4577235.032 429653.783,4577356.907 430225.658,4577228.782 430216.283,4577191.282 429828.44,4577264.18 429181.19,4575141.75 428876.5,4574965 428747.12,4574793.45 427150.94,4574979.07 425584.72,4575742.31 424885.92,4576670.09 427941.32,4578031.03 427498.49,4578822.87 427674.33,4579352.86 427513.4,4580022.47 426834.82,4580846.04 425906.35,4581064.51 425116.8,4581535.05 424900.83,4581863.65 424965.02,4582253.46 424724.81,4583134.49 425094.44,4583821.94 425035.35,4584321.45 424763.43,4584757 423527.27,4584813.11 422991.44,4584116.38 422446.73,4584440.87 422542.56,4584979.04 423117.47,4585355.96 423124.83,4585424.05 422930.12,4585852.57 422964.37,4586251.23 423237.63,4586482.99 422637.72,4586753.22 422758.37,4587109.62 422513.65,4587739.42 423255.71,4587280.05 423439.82,4587265.03 424084.49,4586924.09 424682.05,4587400.15 425060.52,4587021.5 426356.61,4586687.56 427152.15,4587284.68 427387.74,4588530.92 427795.92,4588940.68 429219.66,4588959.53 429622.27,4589253.12 430344.18,4589572.32 430647.03,4590404.38 431206.15,4590735.25 431673.45,4591167.06 432093.92,4591167.31 432205.71,4591195.33 432223.94,4590919.77 433499.27,4589104.64 434295.54,4587463.86 433745.24,4587293.62 433755.23,4586519.8 435457.5,4584982.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">421504.59,4587674.6 421901.85,4587164.13 422180.31,4586931.59 422355.2,4586550.56 422419.26,4585870.59 421941.73,4585636.77 421525.64,4585207.17 421356.99,4584960.74 421114,4585258.24 421093.88,4585375.09 421280.29,4585627.5 421036.29,4586393.96 421283.96,4586660.18 421355.3,4587622.29 421504.59,4587674.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">422785.89,4585591.34 422375.759,4585129.183 422367.946,4585410.433 422664.05,4585687.75 422785.89,4585591.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[101029638.66952]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[728]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[737]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08019]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[13]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Barcelona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Barcelona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Barcelona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Barcelona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="728">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310600.24,4582465.6 309255.23,4583542.8 308802.99,4584342.88 307210.63,4585655.03 306947.7,4586390.94 307703.28,4587137.53 309149.93,4586958.05 309867.55,4587280.19 309957.38,4587651.89 311764.53,4585693.3 311017.84,4584241.19 311533.76,4583404.72 310600.24,4582465.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13300251.18455]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[729]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[738]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25224]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torms, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torms, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torms, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torms, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="729">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">435457.5,4584982.5 433755.23,4586519.8 433745.24,4587293.62 434295.54,4587463.86 434481.87,4587543.93 434479.23,4587459.29 435010.32,4587188.9 435312.33,4586905.64 435777.65,4587037.85 436367.93,4586536.89 436066.22,4585894.19 435457.5,4584982.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3662829.815]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[730]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[739]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08194]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[13]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Adria de Besos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Adria de Besos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Adri… de Bes•s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Adri… de Bes•s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="730">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">329989.17,4580758.92 329452.35,4580364.95 328737.68,4580040.44 328788,4580526 328031.73,4581757.36 327715.63,4582821.4 326467,4584145 325921,4584502 325438.24,4585930.11 326197.27,4585570.1 328049.49,4585978.36 329000.75,4585992.34 330350.78,4586506.87 330798.42,4585243.65 331383.65,4584400.91 331042.08,4583612.96 330584.44,4582866.48 330408.68,4582340.63 329685.74,4581577.56 329599.51,4581110.59 329682.42,4580880.02 329989.17,4580758.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18888060.00531]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[731]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[740]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25253]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilosell, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilosell, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilosell, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilosell, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="731">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">418656.72,4581929.69 418196.37,4582564.78 419543.44,4583595.4 419418.7,4583937.69 419945.48,4584713.8 420522.54,4585089.5 420905.16,4585426.58 421093.88,4585375.09 421114,4585258.24 421356.99,4584960.74 421525.64,4585207.17 421941.73,4585636.77 422419.26,4585870.59 422664.05,4585687.75 422367.946,4585410.433 422375.759,4585129.183 422785.89,4585591.34 423124.83,4585424.05 423117.47,4585355.96 422542.56,4584979.04 422446.73,4584440.87 422991.44,4584116.38 422985.73,4583957.95 421966.61,4583413.23 421464.85,4582985.18 421407.9,4582624.97 421376.73,4582049.74 420850.37,4581501.11 419403.23,4580534.87 418870.23,4581445.86 418656.72,4581929.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11826416.07189]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[732]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[741]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08211]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Feliu de Llobregat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Feliu de Llobregat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Feliu de Llobregat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Feliu de Llobregat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="732">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">388191.38,4581005.2 386953.56,4580542.45 387179.909,4579580.921 387489.66,4579270.52 387867.409,4578877.796 387892.18,4578473.3 387974.4,4578217.43 387898.659,4577905.14 387968.972,4577225.452 387779.34,4576915.69 387410.23,4577408.26 386781.48,4577445.11 386271.97,4577112.36 385880.62,4577901.65 383956.11,4579819.69 383623.59,4580246.37 382962.17,4580213.83 381568.85,4579452.67 381387.02,4579307.18 381225.47,4579393.56 381161.8,4580190.54 380790.6,4580262.48 380559.25,4580179.95 380555.8,4580674.67 379917,4581016.01 380002.15,4581465.39 382153.55,4582901.76 382835.87,4584128.83 384655.02,4584938.41 385692.11,4585678.65 386485.67,4585459.35 386878.29,4585048.5 386727.65,4584758.29 386234.34,4584137.74 388191.38,4581005.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35270876.60668]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[733]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[743]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08227]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Marti Sarroca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Marti Sarroca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Mart¡ Sarroca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Mart¡ Sarroca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="733">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">291096.23,4574167.18 290680.21,4574968.07 290331.17,4575813.36 290002.63,4576414.05 289246.5,4577556.43 288404.81,4578527.18 287704.03,4579277.03 287999.98,4579926.79 288119.26,4580087.15 288648.4,4582050.35 287803.17,4583927.21 288769.55,4585197.18 292915.28,4585416.72 293391.95,4583371.83 293383.91,4582693.55 294330.91,4580953.49 295438.51,4578119.27 294618.44,4577353 294397.97,4576431.44 293360,4575251.05 292889.39,4574095.84 291096.23,4574167.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[57346894.35505]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[734]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[744]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25133]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Maials]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Maials]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Maials]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Maials]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="734">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">391563.12,4585056.43 391602.22,4584550.24 391144.83,4584247.08 391039.16,4584530.62 390836.159,4584705.921 390885.19,4585121.99 391563.12,4585056.43</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[465688.23853]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[735]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[745]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08174]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Puigdalber]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Puigdalber]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Puigd…lber]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Puigd…lber]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="735">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360926.39,4576927.77 362096.68,4579164.1 362270.99,4580653.63 362435.95,4580974.86 362885.55,4580601.48 363353,4580419 363262.74,4582403.85 363641.65,4583005.86 364424.83,4583326.9 364864.49,4583458.29 364682.36,4584068.29 364877.08,4584482.6 365524.7,4584197.59 365927.05,4584352.44 366215.5,4584065.89 366679.907,4584006.7 366739.61,4584291.18 367156.31,4585051.62 367832.28,4584671.34 368432.1,4584834.92 368395.86,4583783.37 368124.93,4583568.71 367933.06,4583293.03 367817,4582548.94 367653.79,4581995.29 367279.96,4581686.78 367209.36,4581309.72 368869.31,4581816.23 369097.63,4582690.95 370482.18,4582284.54 370978.28,4582221.52 371740.16,4582781.19 372154.88,4582824.03 372428.5,4582226.69 375448.05,4583792.79 376236.39,4583173.1 377801.53,4582783.29 376985.54,4580947.53 376121.17,4580498.59 375710.5,4579859.8 374879.81,4580045.62 374102.84,4579480.17 371480.68,4579634.52 366391.93,4576216.76 364080.21,4577012.55 363029.39,4576656.17 362629.63,4576239.22 362356.06,4575589.23 360926.39,4576927.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[72761240.3878]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[736]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[747]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43001]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aiguamurcia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santes Creus]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aiguam£rcia]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santes Creus]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="736">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">391227.93,4581643.69 390659.89,4581750.47 390143.84,4581483.81 390343.2,4580986.02 389676.56,4580732.02 389120.14,4581048 388191.38,4581005.2 386234.34,4584137.74 386727.65,4584758.29 386878.29,4585048.5 388586.01,4583602.76 389409.87,4583170.74 390299.97,4582481.26 391300.49,4582383.81 391227.93,4581643.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9307022.35165]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[737]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[748]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08304]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilobi del Penedes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilobi del Penedes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilob¡ del PenedŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilob¡ del PenedŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="737">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">422762.76,4580732.58 422093.9,4581267.58 421463.25,4581516.65 421185.98,4581363.79 420850.37,4581501.11 421376.73,4582049.74 421407.9,4582624.97 421464.85,4582985.18 421966.61,4583413.23 422985.73,4583957.95 422991.44,4584116.38 423527.27,4584813.11 424763.43,4584757 425035.35,4584321.45 425094.44,4583821.94 424724.81,4583134.49 423535.26,4582418.65 423172.9,4581286.35 422762.76,4580732.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8233060.78855]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[738]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[749]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08221]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Just Desvern]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Just Desvern]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Just Desvern]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Just Desvern]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="738">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333271.63,4579309.1 332703.18,4579887.09 332333.95,4580039.33 331752.07,4580745.96 330719.8,4580914.74 330081.2,4580812.72 329989.17,4580758.92 329682.42,4580880.02 329599.51,4581110.59 329685.74,4581577.56 330408.68,4582340.63 330584.44,4582866.48 331042.08,4583612.96 331383.65,4584400.91 332210.19,4584044.25 332454.38,4584276.07 333057.72,4584243.16 334175.3,4583736.76 333641.96,4582321.18 333894.25,4580144.58 333271.63,4579309.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13440465.5204]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[739]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[750]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43158]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallclara]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallclara]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallclara]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallclara]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="739">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">412556.32,4580314.06 412133.92,4579764.15 411999.17,4578605.09 411769.7,4578350.41 410604.4,4578413.4 409097.53,4578827.32 408398.72,4578785.15 407903.68,4578922.03 407329.43,4579814.55 407133.45,4580736.67 406190.72,4581280.18 405664.14,4581789.33 405455.87,4582535.03 406230.57,4582916.08 406482.96,4582901.99 408529.13,4583007.69 409509.52,4582727.61 409835.65,4582860.87 410312.94,4583238.55 410394.11,4583437.36 410764.77,4583745.91 411717.06,4583316.31 412314.43,4580788.84 412556.32,4580314.06</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24302983.24195]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[740]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[751]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08295]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallirana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallirana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallirana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallirana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="740">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">394624.34,4583550.75 394861.04,4583229.9 394158.21,4582451.15 393908.98,4582518.8 393364,4581912.37 392069.94,4582419.36 391817.67,4582672.7 391573.45,4582885.74 391520.22,4583297.96 392152.49,4583612.08 392468.5,4583583.96 393468.05,4583390.29 394484.43,4583451.29 394624.34,4583550.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3464659.21305]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[741]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[752]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08249]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Fe del Penedes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Fe del Penedes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Fe del PenedŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Fe del PenedŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="741">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">396598.05,4577366.68 397306.44,4577865.62 396994.02,4578505.09 396500.35,4578700.59 396443.6,4579275.16 397110.43,4579620.22 396911.66,4579838.14 396959.82,4580086.18 394998.88,4580963.71 394051.44,4581593.27 394074.5,4582024.56 394218.38,4582351.93 394158.21,4582451.15 394861.04,4583229.9 394624.34,4583550.75 395320.534,4583588.734 395596.65,4583387.72 395663.24,4583284.34 394639.28,4582414.1 394912.58,4582241.53 395551.01,4582216.55 396188.05,4582774.78 397447.47,4582000.75 399324.81,4581154.95 400117.87,4580213.73 400293.08,4579888.74 400105.05,4579577.21 400010.04,4578709.04 400112.91,4578411.99 400628.19,4578352.29 401277.54,4577776.06 400864.44,4577213.05 401744.17,4576758.66 401756.67,4576038.21 402500.35,4575372.24 403345.12,4575037.9 403666.93,4575034.2 403006.43,4574685.01 401989.6,4575247.23 401672.05,4575072.38 400982.5,4575308.2 399832.98,4575576.11 399097.22,4575586.63 398761.37,4575710.08 397985.3,4576069.32 397511.66,4576033.73 397012.59,4575670.13 396187.03,4576076.78 396081.21,4576698.69 396349.71,4576820.9 396598.05,4577366.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[29433554.12502]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[742]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[753]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08013]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Avinyonet del Penedes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabories, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Avinyonet del PenedŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cab•ries, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="742">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">425116.8,4581535.05 424764.31,4580267.46 424260.57,4580165.48 423872.34,4580331.78 423734.45,4580090.68 423329.45,4580151.31 423078.17,4580407.27 422762.76,4580732.58 423172.9,4581286.35 423535.26,4582418.65 424724.81,4583134.49 424965.02,4582253.46 424900.83,4581863.65 425116.8,4581535.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4418829.3146]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[743]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[754]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08077]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Esplugues de Llobregat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Esplugues de Llobregat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Esplugues de Llobregat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Esplugues de Llobregat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="743">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355611.65,4582981.94 355511.07,4582831.04 356268.77,4581475.5 356397.09,4580721.06 356262,4580420 356737.41,4579199.9 356399.21,4578170.79 355693.12,4577831.35 352844.68,4577688.41 351230.84,4578477.94 351568.09,4579192.45 351587.16,4579541.51 351671.97,4580064.03 352064.89,4581910.17 352822.7,4582128 352860.88,4582607.38 352972.95,4583068.02 354119.83,4583132.99 355611.65,4582981.94</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22664860.6475]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[744]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[755]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43059]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Figuerola del Camp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Figuerola del Camp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Figuerola del Camp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Figuerola del Camp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="744">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">356828.4,4575116.45 355885.26,4575793.5 356262.74,4576629.24 356331,4577827 356399.21,4578170.79 356737.41,4579199.9 356262,4580420 356397.09,4580721.06 356268.77,4581475.5 355511.07,4582831.04 355611.65,4582981.94 356941.12,4582299.95 357576.33,4582445.81 358575,4581614 358679,4581489 358868.48,4582288.61 360668.69,4581672.79 362220.87,4581761.28 362482.48,4581559.94 362435.95,4580974.86 362270.99,4580653.63 362096.68,4579164.1 360926.39,4576927.77 360409.27,4577273.14 360022.81,4576874.38 359691.29,4576042.68 359612.7,4575630.48 359353.5,4575498.79 358891.63,4575046.84 358987.86,4574081.11 356828.4,4575116.45</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35718058.36105]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[745]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[756]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43108]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pla de Santa Maria, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pla de Santa Maria, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pla de Santa Maria, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pla de Santa Maria, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="745">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">366391.93,4576216.76 371480.68,4579634.52 374102.84,4579480.17 374879.81,4580045.62 375710.5,4579859.8 376121.17,4580498.59 376985.54,4580947.53 377801.53,4582783.29 378649.76,4581756.25 378901.96,4581047.33 379535.6,4580843.05 379917,4581016.01 380555.8,4580674.67 380559.25,4580179.95 380790.6,4580262.48 381161.8,4580190.54 381225.47,4579393.56 380564.81,4579184.5 379552.45,4578042.25 377913.58,4575712.17 376173.35,4575144.52 372879.03,4573102.21 371930.75,4573233.05 371368.63,4573276.54 371053.97,4573529.91 369132.31,4571880.87 368133.7,4571891.82 366065.31,4572670.89 366928.21,4573306.71 367542.66,4573556.15 367947.96,4573867.62 368246.14,4574405.6 366735.91,4575703.84 366391.93,4576216.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[73389739.7319]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[746]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[757]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43090]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montmell, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Juncosa del Montmell, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montmell, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Juncosa del Montmell, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="746">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">391227.93,4581643.69 391300.49,4582383.81 391577.99,4582317.56 391817.67,4582672.7 392069.94,4582419.36 393364,4581912.37 393908.98,4582518.8 394158.21,4582451.15 394218.38,4582351.93 394074.5,4582024.56 394051.44,4581593.27 394998.88,4580963.71 394173.75,4580123.86 393277.73,4580970.09 392823.07,4580458.63 391040.78,4580815.5 390994.84,4580895.22 391227.93,4581643.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">396188.05,4582774.78 395551.01,4582216.55 394912.58,4582241.53 394639.28,4582414.1 395663.24,4583284.34 396188.05,4582774.78</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[6383423.6764]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[747]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[758]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08094]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Granada, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Granada, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Granada, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Granada, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="747">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">400010.04,4578709.04 401820.85,4579748.28 402403.97,4580785.46 402574.96,4581240.09 404701.49,4582180.57 405067.45,4582593.9 405455.87,4582535.03 405664.14,4581789.33 406190.72,4581280.18 407133.45,4580736.67 407329.43,4579814.55 407903.68,4578922.03 407344.65,4578390.73 406447.32,4577708.38 405573.88,4577619.78 405644.87,4577128.57 404692.34,4576433.23 404285.99,4575673.01 403774.1,4574995.27 403666.93,4575034.2 403345.12,4575037.9 402500.35,4575372.24 401756.67,4576038.21 401744.17,4576758.66 400864.44,4577213.05 401277.54,4577776.06 400628.19,4578352.29 400112.91,4578411.99 400010.04,4578709.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31029637.13699]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[748]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[759]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08146]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olesa de Bonesvalls]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Olesa de Bonesvalls]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Olesa de Bonesvalls]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Olesa de Bonesvalls]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="748">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">307241.19,4576312.65 307918.53,4577066.81 308204.83,4577462.78 308369.54,4578132.14 308732.77,4578851.99 309274.16,4579622.1 309112.39,4580159.59 310521.58,4582237.03 310600.24,4582465.6 311049.27,4581410.34 311094.94,4580819.24 313296.02,4578441.59 312630.65,4578275.94 312245.97,4577896.76 311978.92,4577150.63 311985.64,4576695.38 310043.92,4576451.93 309058.57,4576244.62 308435.55,4576295.63 307910.78,4576239.06 307241.19,4576312.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17146304.0509]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[749]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[760]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25170]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellaguarda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellaguarda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellaguarda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellaguarda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="749">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">280304.77,4581160.69 280423.25,4581064.81 280789.75,4581277.08 281628.02,4581490.69 282186.42,4581505.27 282816.19,4581779.78 283160.09,4582220.6 284647.32,4582217.97 286017.29,4581958.2 287302.02,4580852.16 287999.98,4579926.79 287704.03,4579277.03 287501.41,4579072.58 286267.44,4578348.35 285378.64,4577358.83 285461.24,4574935.28 285249.15,4572897.47 284512.2,4572568.46 281260.86,4573086.06 279580.24,4575891.64 279686.15,4576213.69 279901.25,4577376.1 278498.58,4578296.95 278192.08,4578728.88 279059.17,4580086.99 279646.12,4580278.67 280304.77,4581160.69</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[57663655.90459]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[750]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[761]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25020]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[33]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Almatret]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Almatret]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Almatret]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Almatret]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="750">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">416429.28,4580758.71 416702.81,4581359.45 417477.63,4581497.04 418656.72,4581929.69 418870.23,4581445.86 419403.23,4580534.87 420504.15,4579508.56 419150.7,4579520.14 418369.13,4579034.62 418256.32,4579343.44 417852.01,4578848.45 417585.18,4578931.34 416340.46,4578994.94 416223.98,4579036.16 416329.86,4579869.54 416678.02,4580245.14 416429.28,4580758.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7546408.3131]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[751]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[762]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08244]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Coloma de Cervello]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Coloma de Cervello]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Coloma de Cervell¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Coloma de Cervell¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="751">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">391040.78,4580815.5 390383.07,4580235.09 389676.56,4580732.02 390343.2,4580986.02 390143.84,4581483.81 390659.89,4581750.47 391227.93,4581643.69 390994.84,4580895.22 391040.78,4580815.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[1181268.61355]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[752]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[763]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08027]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabanyes, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabanyes, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabanyes, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabanyes, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="752">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">425116.8,4581535.05 425906.35,4581064.51 426834.82,4580846.04 427513.4,4580022.47 427674.33,4579352.86 427498.49,4578822.87 427941.32,4578031.03 424885.92,4576670.09 424124.72,4577140.56 424390.1,4577400.93 423896.94,4577764.92 424793.39,4578430.96 424441.15,4579213.28 423961.53,4579724.04 423734.45,4580090.68 423872.34,4580331.78 424260.57,4580165.48 424764.31,4580267.46 425116.8,4581535.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12077927.70115]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[753]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[764]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08101]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[13]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Hospitalet de Llobregat, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Hospitalet de Llobregat, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Hospitalet de Llobregat, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Hospitalet de Llobregat, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="753">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">316988.83,4577544.76 317659.2,4577726.46 318295.9,4580144.33 318490.79,4580660.54 318760.28,4581109.87 319870.98,4581519.55 320007.92,4580567.25 321313.5,4578685.93 323117.7,4579024.33 324395.44,4579459.71 324865.51,4579697.09 325065.76,4578989.25 324929.07,4577936.64 324966.4,4577345.72 324949.25,4576268.21 324651.24,4576437.65 323532.66,4575251.01 323064.51,4574108.1 322485.13,4574393.47 321358.57,4574703.38 320841.46,4574892.4 320237.84,4575016.37 319523,4574977.4 319121.72,4575050.73 318044.24,4574942.72 317333.28,4574935.36 316432.45,4575059.95 315762.38,4575927.44 315659.18,4575923.44 315598.03,4576125.66 315938.98,4576493.76 316081.03,4576959.41 316615.07,4577160.77 316988.83,4577544.76</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37890044.47499]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[754]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[765]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43157]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ulldemolins]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ulldemolins]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ulldemolins]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ulldemolins]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="754">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">419403.23,4580534.87 420850.37,4581501.11 421185.98,4581363.79 421463.25,4581516.65 422093.9,4581267.58 422762.76,4580732.58 423078.17,4580407.27 421749.73,4579758.26 421381.88,4579716.67 421333.55,4579397.48 421036.69,4578939.54 421272.19,4578682.12 420639.96,4578030.81 420293.48,4578399.18 420504.87,4579356.78 420504.15,4579508.56 419403.23,4580534.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5451556.44255]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[755]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[766]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08217]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Joan Despi]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Joan Despi]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Joan Desp¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Joan Desp¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="755">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">412556.32,4580314.06 413167.78,4580106.95 414529.13,4580218.8 415078.09,4580779.84 415753.86,4581220.94 416429.28,4580758.71 416678.02,4580245.14 416329.86,4579869.54 416223.98,4579036.16 415944.56,4578763.52 415356.48,4577737.12 414126.06,4577312.49 412994.67,4576492.5 411722.74,4576928.34 411769.7,4578350.41 411999.17,4578605.09 412133.92,4579764.15 412556.32,4580314.06</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13648920.164]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[756]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[767]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08289]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torrelles de Llobregat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torrelles de Llobregat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torrelles de Llobregat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torrelles de Llobregat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="756">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">388475.63,4578223.14 387974.4,4578217.43 387892.18,4578473.3 387867.409,4578877.796 387489.66,4579270.52 387179.909,4579580.921 386953.56,4580542.45 388191.38,4581005.2 389120.14,4581048 389676.56,4580732.02 390383.07,4580235.09 389503.53,4579197.49 389429.74,4578658.28 389074.75,4578308.44 388475.63,4578223.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6228770.08912]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[757]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[768]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08154]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pacs del Penedes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pacs del Penedes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pacs del PenedŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pacs del PenedŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="757">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">390383.07,4580235.09 391040.78,4580815.5 392823.07,4580458.63 393277.73,4580970.09 394173.75,4580123.86 394095.22,4579815.39 393810.24,4579766.24 393037.03,4579860.73 393131.5,4579409.3 393553.09,4579071.61 393717.75,4578741.08 393796.25,4578950.88 394392.77,4578539.7 394300.34,4577666.72 393854.03,4577230.94 393392.11,4577535.5 393331.37,4577656 393181.13,4577468.64 392938.71,4577384.74 393131.34,4577122.03 392814.95,4576848.82 393060.13,4576867.51 393037.12,4576621.73 392691.08,4576298.74 392436.18,4576321.4 391797.4,4575852.52 391413.77,4575940.99 390966.2,4576799.95 390052.22,4577038.07 390096.64,4576612.53 389830.79,4575785.87 388337.84,4576592.89 388424.58,4577874.92 388475.63,4578223.14 389074.75,4578308.44 389429.74,4578658.28 389503.53,4579197.49 390383.07,4580235.09</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19508781.9049]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[758]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[769]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08305]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilafranca del Penedes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilafranca del Penedes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilafranca del PenedŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilafranca del PenedŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="758">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">396598.05,4577366.68 395739.04,4577437.96 395377.22,4578453.49 394773.99,4579463.36 394378.05,4579467.56 394095.22,4579815.39 394173.75,4580123.86 394998.88,4580963.71 396959.82,4580086.18 396911.66,4579838.14 397110.43,4579620.22 396443.6,4579275.16 396500.35,4578700.59 396994.02,4578505.09 397306.44,4577865.62 396598.05,4577366.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6082639.57445]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[759]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[770]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08206]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Cugat Sesgarrigues]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Cugat Sesgarrigues]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Cugat Sesgarrigues]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Cugat Sesgarrigues]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="759">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">324966.4,4577345.72 324929.07,4577936.64 325065.76,4578989.25 324865.51,4579697.09 325544.54,4579861.07 327226.73,4579890.93 328307.82,4579944.02 328737.68,4580040.44 329452.35,4580364.95 329989.17,4580758.92 330081.2,4580812.72 330719.8,4580914.74 331752.07,4580745.96 332333.95,4580039.33 332035,4579550.32 331327.3,4578776.77 330907.17,4577739.33 330156.41,4577391.26 329150.58,4576431.81 327340.63,4576589.86 324966.4,4577345.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21548227.4602]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[760]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[771]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43168]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova de Prades]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova de Prades]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova de Prades]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova de Prades]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="760">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">423734.45,4580090.68 423961.53,4579724.04 424441.15,4579213.28 424793.39,4578430.96 423896.94,4577764.92 424390.1,4577400.93 424124.72,4577140.56 423175.14,4577894.4 422599.54,4577922.29 422440.65,4577607.88 422216.8,4577633.38 420639.96,4578030.81 421272.19,4578682.12 421036.69,4578939.54 421333.55,4579397.48 421381.88,4579716.67 421749.73,4579758.26 423078.17,4580407.27 423329.45,4580151.31 423734.45,4580090.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7519359.6557]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[761]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[772]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08073]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cornella de Llobregat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cornella de Llobregat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cornell… de Llobregat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cornell… de Llobregat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="761">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348098.92,4576104.47 347165.39,4576092.03 346503.46,4575682.1 345318.37,4575224.02 345244.05,4575402.48 344583.81,4575903.75 344682.48,4576551.67 344682.51,4577497.06 345169.86,4577761.51 345507,4578786.79 345604.1,4579231.64 345485.75,4579540.27 345444.07,4579755.21 345476.4,4580176.46 346125.52,4580353.83 346497.45,4580071.84 347254.33,4580084.98 347713.63,4579495.33 348336.56,4579079.91 348059,4578388 347951.78,4577240.08 348098.92,4576104.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12718851.5238]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[762]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[773]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43172]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[16]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilaverd]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilaverd]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilaverd]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilaverd]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="762">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">385818.92,4574611.31 385008.92,4574684.65 384630.53,4574669.33 383942.01,4574772.51 382506.66,4574243.16 382431.68,4574397.32 381068.59,4575084.47 380814.18,4575026.02 380761.14,4575711.55 380324.99,4576581.15 380158.89,4577560.87 379552.45,4578042.25 380564.81,4579184.5 381225.47,4579393.56 381387.02,4579307.18 381568.85,4579452.67 382962.17,4580213.83 383623.59,4580246.37 383956.11,4579819.69 385880.62,4577901.65 386271.97,4577112.36 386912.38,4575885.99 386457.78,4574621.16 385818.92,4574611.31</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28492493.0725]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[763]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[774]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08065]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellvi de la Marca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Munia, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellv¡ de la Marca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[M£nia, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="763">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">327340.63,4576589.86 329150.58,4576431.81 330156.41,4577391.26 330907.17,4577739.33 331327.3,4578776.77 332035,4579550.32 332333.95,4580039.33 332703.18,4579887.09 333271.63,4579309.1 333107.39,4578900.43 332956.25,4577715.73 332958.05,4577178.32 333836.59,4577258.3 334415.77,4577756.89 334564.2,4577285.26 334892.97,4577190 335396.92,4577213.82 335725.69,4577276.73 336677.88,4576883.1 338162.73,4576997.02 336236.96,4576144.3 335822.02,4576322.77 335551.11,4575727.18 335235.05,4575178.44 334837.13,4574071.67 334029.16,4573742.02 333402.72,4573123.04 332263.86,4573085.69 330427.63,4573735.07 329348.73,4574182.74 329204.98,4574100.98 328176.18,4573261.33 327652.08,4573969.52 328001.7,4574851.1 327340.63,4576589.86</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32609988.47835]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[764]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[775]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43116]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Prades]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Prades]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Prades]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Prades]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="764">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">389912.97,4571814.71 390414.03,4573945.99 390642.07,4574296.65 389915.36,4574972.08 389830.79,4575785.87 390096.64,4576612.53 390052.22,4577038.07 390966.2,4576799.95 391413.77,4575940.99 391797.4,4575852.52 392436.18,4576321.4 392691.08,4576298.74 393037.12,4576621.73 393060.13,4576867.51 392814.95,4576848.82 393131.34,4577122.03 392938.71,4577384.74 393181.13,4577468.64 393331.37,4577656 393392.11,4577535.5 393854.03,4577230.94 394300.34,4577666.72 394392.77,4578539.7 393796.25,4578950.88 393717.75,4578741.08 393553.09,4579071.61 393131.5,4579409.3 393037.03,4579860.73 393810.24,4579766.24 394095.22,4579815.39 394378.05,4579467.56 394773.99,4579463.36 395377.22,4578453.49 395739.04,4577437.96 396598.05,4577366.68 396349.71,4576820.9 396081.21,4576698.69 396187.03,4576076.78 397012.59,4575670.13 396558.56,4575261.64 396670.55,4574189.78 396144.37,4573932.39 396177.7,4573336.26 395740.2,4573208.09 395014.76,4572886.2 394887.23,4572720.21 394492.66,4572594.5 393743.82,4572972.49 392036.79,4573346.31 391428.06,4572804.83 391610.74,4572330.34 391231.39,4571612.07 390647.63,4570934.92 389912.97,4571814.71</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30099712.87286]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[765]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[776]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08145]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olerdola]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Miquel d'Olerdola]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[OlŠrdola]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Miquel d'OlŠrdola]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="765">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">417346.68,4576932.57 416909.27,4577910.42 416352.41,4578785.12 416340.46,4578994.94 417585.18,4578931.34 417852.01,4578848.45 418256.32,4579343.44 418369.13,4579034.62 419150.7,4579520.14 420504.15,4579508.56 420504.87,4579356.78 420293.48,4578399.18 420639.96,4578030.81 422216.8,4577633.38 422301.21,4577222.25 422535.45,4577027.47 422803.59,4577347.13 423051.18,4577117.92 422652.57,4576720.4 422046.78,4575908.43 422485.43,4575305.71 422304.98,4574848.48 421776.1,4574544.34 421947.73,4573677.02 421257.46,4573297.27 421340.14,4573064.63 421112.77,4572981.91 421665.69,4571699.8 422125.222,4571256.702 422151.45,4571005.63 421351.785,4571647.327 420896.25,4572404.25 420495.98,4573259.37 420029,4573943.48 420000,4574151.49 417849.18,4576699.7 417346.68,4576932.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22052981.27048]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[766]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[777]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08200]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Boi de Llobregat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Boi de Llobregat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Boi de Llobregat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Boi de Llobregat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="766">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">306769.21,4576227.01 306232.95,4575915.05 305904.8,4575776.84 305102.34,4575942.2 304218.79,4575235.53 303186.78,4574983.4 302155.07,4574682.94 301514.61,4573992.87 300685.76,4574046.86 299856.61,4574149.18 298780.82,4574512.33 297944.35,4575882.62 298405.4,4576372.9 298663.91,4577156.06 299341.05,4577584.66 300439.61,4578729.75 300658.93,4579205.1 301203.73,4579100.87 302335.43,4579484.44 304458.13,4578660.2 305072.14,4578729.06 305532.03,4578591.39 306262.98,4578166.71 306523.69,4577922.24 306715.44,4576965.74 306627.72,4576332.94 306769.21,4576227.01</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30941342.18714]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[767]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[778]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25056]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[18]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bovera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bovera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bovera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bovera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="767">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">291096.23,4574167.18 291206.06,4573434.92 291128.66,4572177.48 291309.2,4571232.66 291120.04,4570863.94 290762.92,4570456.88 291097.77,4568239.49 289873.84,4567734.43 289597.34,4567256.86 289043.92,4566723.97 289276.34,4566146.89 289261.49,4565597.79 289773.35,4564569.83 290244.01,4563894.98 290092.78,4563674.51 289998.65,4563687.64 289294.53,4564017.59 288735.49,4564643.14 287093.84,4564766.7 286932.81,4565624.18 286624.34,4566006.3 286161.25,4566513.38 284780.83,4567445.67 283642.58,4566963.32 282401.89,4566497.3 282320.13,4566229.39 281162.3,4565954.79 280864.08,4565896.83 280312.719,4565854.355 279289.281,4565299.667 279304.906,4565627.792 279359.42,4565916.46 279633.031,4566198.105 279839.71,4566866.14 279929.906,4567221.542 279762.37,4567679.99 280070.531,4568057.48 280587.64,4568267.46 280364.68,4568629.16 280059.02,4569451.94 280252.96,4570168.48 280342.44,4571282.83 281179.02,4573062.6 281260.86,4573086.06 284512.2,4572568.46 285249.15,4572897.47 285461.24,4574935.28 285378.64,4577358.83 286267.44,4578348.35 287501.41,4579072.58 287704.03,4579277.03 288404.81,4578527.18 289246.5,4577556.43 290002.63,4576414.05 290331.17,4575813.36 290680.21,4574968.07 291096.23,4574167.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[98836848.23292]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[768]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[779]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43125]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riba-roja d'Ebre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riba-roja d'Ebre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riba-roja d'Ebre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riba-roja d'Ebre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="768">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">412994.67,4576492.5 414126.06,4577312.49 415356.48,4577737.12 415944.56,4578763.52 416223.98,4579036.16 416340.46,4578994.94 416352.41,4578785.12 416909.27,4577910.42 417346.68,4576932.57 417084.57,4576229.08 416221.86,4575320.3 415490.79,4575095.11 415404.49,4574420.53 415095.57,4574427.47 413644.31,4575061.38 413393.49,4575294.07 412961.94,4575140.42 412860.36,4575304.02 412666.92,4575408.26 413101.92,4575709.75 413127.1,4575991.32 412994.67,4576492.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10903356.01225]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[769]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[780]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08204]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Climent de Llobregat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Climent de Llobregat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Climent de Llobregat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Climent de Llobregat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="769">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">409342.31,4571651.33 408752.49,4570964.15 408454.54,4571000.77 408037.47,4570525.36 406911.04,4570943.46 406744.24,4570893.63 406813.56,4570510.2 405701.75,4570566.68 405559.43,4570511.59 405412.44,4570744.67 405727.65,4572187.47 403948.11,4572851.78 403660.27,4573957.45 403867.76,4574788.4 403666.93,4575034.2 403774.1,4574995.27 404285.99,4575673.01 404692.34,4576433.23 405644.87,4577128.57 405573.88,4577619.78 406447.32,4577708.38 407344.65,4578390.73 407903.68,4578922.03 408398.72,4578785.15 409097.53,4578827.32 410604.4,4578413.4 411769.7,4578350.41 411722.74,4576928.34 412994.67,4576492.5 413127.1,4575991.32 413101.92,4575709.75 412666.92,4575408.26 411813.77,4574725.72 410627.47,4573026.96 410473.81,4572142.21 409342.31,4571651.33</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[50523847.1714]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[770]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[781]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08020]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Begues]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Begues]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Begues]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Begues]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="770">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348904.82,4574495.99 348742.02,4575635.07 349390.38,4577114.63 350843.94,4578100.12 351230.84,4578477.94 352844.68,4577688.41 355693.12,4577831.35 356399.21,4578170.79 356331,4577827 356262.74,4576629.24 355885.26,4575793.5 356828.4,4575116.45 356716.79,4574115.12 356617.94,4573523.33 356369.22,4573315.97 356093.39,4573344.68 355947.12,4572882.37 356191.7,4572606.71 355946.54,4571424.87 355330.52,4570984.13 355045.89,4571153.38 354754.7,4570910.88 353971.59,4571080.75 354124.72,4569896.62 353780.97,4569677.77 352754.68,4570048.82 352357.48,4569404.2 352102.26,4568289.45 351815.18,4567339.08 351519.36,4568273.33 351150.26,4568203.28 350874.85,4569240.98 350888.27,4569519.73 350361.65,4569432.93 349981.36,4571429.5 350516.1,4571520.8 350663.08,4572203.94 349068.1,4572102.78 348815.6,4572396.9 348880.8,4573134.49 349352.46,4573106.29 349308.47,4573836.69 348904.82,4574495.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[55016556.14035]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[771]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[782]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43161]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Valls]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Valls]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Valls]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Valls]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="771">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310773.76,4575639.6 311140.93,4575904.66 312016.21,4576313.31 311985.64,4576695.38 311978.92,4577150.63 312245.97,4577896.76 312630.65,4578275.94 313296.02,4578441.59 313555.24,4578411.82 314803.27,4578045.46 315584.08,4577608.72 315846.4,4577725.34 316988.83,4577544.76 316615.07,4577160.77 316081.03,4576959.41 315938.98,4576493.76 315598.03,4576125.66 315659.18,4575923.44 315762.38,4575927.44 315880.14,4574806.66 316368.63,4574259.89 316664.57,4573681.5 316977.73,4572818.17 316962.23,4572343.06 316189.48,4571987.15 315083.74,4571355.01 314144.16,4571022.13 313412.3,4571159.32 312601.65,4571486.36 312153.59,4571452.36 311696.48,4571664 310741.98,4572737.99 310589.17,4573797.97 310730.05,4574483.08 310773.76,4575639.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33881058.9933]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[772]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[783]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43075]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Margalef]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Margalef]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Margalef]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Margalef]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="772">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">386457.78,4574621.16 386912.38,4575885.99 386271.97,4577112.36 386781.48,4577445.11 387410.23,4577408.26 387779.34,4576915.69 387968.972,4577225.452 387898.659,4577905.14 387974.4,4578217.43 388475.63,4578223.14 388424.58,4577874.92 388337.84,4576592.89 389830.79,4575785.87 389915.36,4574972.08 390642.07,4574296.65 390414.03,4573945.99 389912.97,4571814.71 389162.3,4571782.17 388746.06,4571491.24 387864,4572212.94 386551.54,4572973.94 386247.15,4573825.34 386469.37,4574526.3 386457.78,4574621.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17200638.19335]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[773]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[784]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08251]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Margarida i els Monjos]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Monjos, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Margarida i els Monjos]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Monjos, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="773">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301575.42,4567706.34 301427.14,4567610.78 301078.97,4567895.09 300309.5,4568734.87 298535.18,4566077.9 296950.06,4565497.63 295234.28,4565688.19 295213.25,4565132.9 295145.86,4564640.82 293886.46,4564239.77 291463.66,4564094.59 290244.01,4563894.98 289773.35,4564569.83 289261.49,4565597.79 289276.34,4566146.89 289043.92,4566723.97 289597.34,4567256.86 289873.84,4567734.43 291097.77,4568239.49 290762.92,4570456.88 291120.04,4570863.94 291309.2,4571232.66 291128.66,4572177.48 291206.06,4573434.92 291096.23,4574167.18 292889.39,4574095.84 293360,4575251.05 294397.97,4576431.44 294618.44,4577353 295438.51,4578119.27 297052.2,4577149.9 297575.66,4577203.95 297592.87,4576922.54 297944.35,4575882.62 298780.82,4574512.33 299856.61,4574149.18 300685.76,4574046.86 301514.61,4573992.87 302155.07,4574682.94 303186.78,4574983.4 304218.79,4575235.53 305102.34,4575942.2 305904.8,4575776.84 306232.95,4575915.05 306769.21,4576227.01 307241.19,4576312.65 307910.78,4576239.06 308435.55,4576295.63 309058.57,4576244.62 310043.92,4576451.93 311985.64,4576695.38 312016.21,4576313.31 311140.93,4575904.66 310773.76,4575639.6 310186.68,4575760.44 309273.34,4575408.32 308613.6,4575113.08 308159.6,4575150.39 307138.34,4575053.19 306381.14,4575320.63 304721.9,4574530.77 303681.02,4574280.09 303340.36,4573582.57 302768.31,4573457.18 302597.08,4573004.22 302446.7,4572741.22 302027.67,4572781.92 300560.64,4572312.22 300621.53,4571990.48 300437.88,4571246.17 300603.16,4570950.56 300307.99,4570177.07 301103.59,4569543.85 301575.42,4567706.34</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[116879892.06965]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[774]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[785]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43060]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Flix]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Flix]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Flix]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Flix]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="774">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">381915.32,4571620.1 381262.48,4572233.6 380629.88,4571779.53 380113.01,4571336.77 379141.53,4572204.69 378744.45,4572716.4 378598,4573015.49 377515.07,4572726.96 377177.01,4571757.95 376834.61,4570947.8 376123.84,4572076.83 376195.84,4575011.6 376173.35,4575144.52 377913.58,4575712.17 379552.45,4578042.25 380158.89,4577560.87 380324.99,4576581.15 380761.14,4575711.55 380814.18,4575026.02 381068.59,4575084.47 382431.68,4574397.32 382506.66,4574243.16 381975.52,4572962.3 381883.5,4572573.47 382138.45,4572457.92 382136.77,4572129.77 381915.32,4571620.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24000759.3183]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[775]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[786]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43137]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Jaume dels Domenys]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Jaume dels Domenys]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Jaume dels Domenys]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Jaume dels Domenys]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="775">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">422151.45,4571005.63 422125.222,4571256.702 421665.69,4571699.8 421112.77,4572981.91 421340.14,4573064.63 421257.46,4573297.27 421947.73,4573677.02 421776.1,4574544.34 422304.98,4574848.48 422485.43,4575305.71 422046.78,4575908.43 422652.57,4576720.4 423051.18,4577117.92 422803.59,4577347.13 422535.45,4577027.47 422301.21,4577222.25 422216.8,4577633.38 422440.65,4577607.88 422599.54,4577922.29 423175.14,4577894.4 424124.72,4577140.56 424885.92,4576670.09 425584.72,4575742.31 427150.94,4574979.07 428747.12,4574793.45 428241.22,4573727.93 426297.25,4571768.75 424935.032,4571047.532 422418.89,4570083.46 422151.45,4571005.63</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31066470.56366]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[776]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[787]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08169]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Prat de Llobregat, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Prat de Llobregat, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Prat de Llobregat, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Prat de Llobregat, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="776">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">330526.65,4569885.67 330057.93,4570068.97 329247.22,4569437.23 328277.43,4568765.46 327743.46,4568146.75 327120.37,4567923.69 325699.16,4567757.37 324943.99,4567465.2 325802.95,4565013.23 325834.26,4564787.06 325579.58,4564862.5 324374.99,4564966.18 322695.75,4564410.81 321186.06,4564198.96 322462.44,4567816.16 322575.31,4570401.07 322572.86,4572251.07 322973.42,4572812.29 323657.08,4573072.79 323941.71,4573458.2 323146.71,4574019.73 323064.51,4574108.1 323532.66,4575251.01 324651.24,4576437.65 324949.25,4576268.21 324966.4,4577345.72 327340.63,4576589.86 328001.7,4574851.1 327652.08,4573969.52 328176.18,4573261.33 329204.98,4574100.98 329348.73,4574182.74 330427.63,4573735.07 330210.89,4573128.96 330008.84,4571580.86 330539,4570226 330526.65,4569885.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[64352310.7657]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[777]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[788]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43049]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cornudella de Montsant]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cornudella de Montsant]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cornudella de Montsant]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cornudella de Montsant]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="777">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362624.83,4572034.17 361862.49,4572416.54 360864.96,4572661.33 359221.83,4573948.98 358987.86,4574081.11 358891.63,4575046.84 359353.5,4575498.79 359612.7,4575630.48 359691.29,4576042.68 360022.81,4576874.38 360409.27,4577273.14 360926.39,4576927.77 362356.06,4575589.23 362629.63,4576239.22 363029.39,4576656.17 364080.21,4577012.55 366391.93,4576216.76 366735.91,4575703.84 368246.14,4574405.6 367947.96,4573867.62 367542.66,4573556.15 366928.21,4573306.71 366065.31,4572670.89 365360.28,4571929.17 364976.13,4571948.37 364520.94,4571725.91 364279.64,4571540.44 363027.37,4571962.1 362624.83,4572034.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33125066.30649]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[778]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[789]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43170]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vila-rodona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vila-rodona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vila-rodona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vila-rodona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="778">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340884.19,4570212.29 340000,4570009.06 337031.62,4570539.97 337552.15,4571231.69 337402.59,4573363.75 338223.73,4574581.87 337179.49,4574781.59 336236.96,4576144.3 338162.73,4576997.02 338233.22,4576474.6 338314.77,4576280.66 341248.37,4575731.83 341618,4575377 341389,4575026 342164,4574899 343536,4574561 344243,4574910 344730.09,4574899.6 344867.72,4574719.32 344687.86,4574134.78 343961.05,4573215.78 343289.06,4572881.39 343568.04,4572340.31 343857.54,4572419.3 344045.9,4571936.59 344236.08,4570804.41 343693.29,4570841.36 342877,4570479 342330,4570950 341626.39,4571386.11 340907.31,4570866.34 340960.51,4570696.04 340884.19,4570212.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34864887.171]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[779]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[790]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43091]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mont-ral]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mont-ral]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mont-ral]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mont-ral]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="779">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">420181.25,4569423.81 419436.06,4570017.48 418548.13,4571286.46 418398.1,4571878.28 418014.29,4572832.67 416997.38,4573532.56 416479.63,4574075.01 415404.49,4574420.53 415490.79,4575095.11 416221.86,4575320.3 417084.57,4576229.08 417346.68,4576932.57 417849.18,4576699.7 420000,4574151.49 420029,4573943.48 420495.98,4573259.37 420896.25,4572404.25 421351.785,4571647.327 422151.45,4571005.63 422418.89,4570083.46 420181.25,4569423.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20347310.82552]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[780]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[791]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08301]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Viladecans]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Viladecans]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Viladecans]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Viladecans]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="780">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">337031.62,4570539.97 335876.53,4571357.4 335523.13,4571398.29 334417.25,4572059.15 333810.18,4572847.88 333402.72,4573123.04 334029.16,4573742.02 334837.13,4574071.67 335235.05,4575178.44 335551.11,4575727.18 335822.02,4576322.77 336236.96,4576144.3 337179.49,4574781.59 338223.73,4574581.87 337402.59,4573363.75 337552.15,4571231.69 337031.62,4570539.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13547210.91225]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[781]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[792]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43039]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Capafonts]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Capafonts]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Capafonts]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Capafonts]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="781">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348904.82,4574495.99 348357.41,4574168.25 347953.15,4573517.22 347362.51,4572771.69 346670.16,4573261.52 346337.67,4573769.57 345733.56,4574143.54 344687.86,4574134.78 344867.72,4574719.32 344730.09,4574899.6 345318.37,4575224.02 346503.46,4575682.1 347165.39,4576092.03 348098.92,4576104.47 348443.41,4575657.45 348742.02,4575635.07 348904.82,4574495.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7942711.003]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[782]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[793]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43124]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riba, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riba, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riba, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riba, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="782">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">405559.43,4570511.59 404560.32,4569696.74 404578.83,4569457.72 403268.53,4569809.81 403065.33,4569452.32 402489.98,4569399.44 402137.01,4569626.32 401774.24,4570169.15 401518.07,4570718.6 401143.97,4570577.67 400809.13,4571262.66 400893.03,4571895.3 399836.45,4572068.79 398356.41,4572417.13 397308.43,4571764 396583.29,4571109.15 395682.04,4571017.38 395346.45,4571655.22 395260.8,4571983.98 395089.5,4572415.72 394887.23,4572720.21 395014.76,4572886.2 395740.2,4573208.09 396177.7,4573336.26 396144.37,4573932.39 396670.55,4574189.78 396558.56,4575261.64 397012.59,4575670.13 397511.66,4576033.73 397985.3,4576069.32 398761.37,4575710.08 399097.22,4575586.63 399832.98,4575576.11 400982.5,4575308.2 401672.05,4575072.38 401989.6,4575247.23 403006.43,4574685.01 403666.93,4575034.2 403867.76,4574788.4 403660.27,4573957.45 403948.11,4572851.78 405727.65,4572187.47 405412.44,4570744.67 405559.43,4570511.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38579887.78625]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[783]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[794]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08148]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[17]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Olivella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Olivella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Olivella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Olivella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="783">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">315771.23,4567874.02 314954.38,4568019.32 314683.18,4568121.57 314151.13,4569030.41 313806.48,4568324.07 313250.27,4567842.11 313117.01,4568357.37 313325.57,4569184.8 313042.22,4569694.26 313823.4,4570050.76 314144.16,4571022.13 315083.74,4571355.01 316189.48,4571987.15 316962.23,4572343.06 316977.73,4572818.17 316664.57,4573681.5 316368.63,4574259.89 315880.14,4574806.66 315762.38,4575927.44 316432.45,4575059.95 317333.28,4574935.36 318044.24,4574942.72 319121.72,4575050.73 319523,4574977.4 320237.84,4575016.37 320841.46,4574892.4 321358.57,4574703.38 322485.13,4574393.47 323064.51,4574108.1 323146.71,4574019.73 323941.71,4573458.2 323657.08,4573072.79 322973.42,4572812.29 322572.86,4572251.07 322575.31,4570401.07 322462.44,4567816.16 321186.06,4564198.96 320858.63,4565951.71 321005.44,4566596.08 321507.82,4567385.28 321128.58,4568695.01 320080.75,4569282.53 320050.56,4568790.37 319169.68,4568484.77 318047.25,4569046.22 317441.94,4568773.78 316917.22,4568407.22 316726.25,4567331.62 315771.23,4567874.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52685868.61065]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[784]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[795]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43096]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Morera de Montsant, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Morera de Montsant, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Morera de Montsant, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Morera de Montsant, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="784">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">308613.6,4575113.08 309273.34,4575408.32 310186.68,4575760.44 310773.76,4575639.6 310730.05,4574483.08 310589.17,4573797.97 310741.98,4572737.99 311696.48,4571664 311098.79,4571600.11 310507.52,4571127.7 309798.71,4571336.9 309393.97,4571055.29 308790.52,4570499.27 308750.35,4570260.13 307776.75,4570016.58 307440.01,4570398.7 307470.99,4571307.36 307126.46,4572503.56 307706.05,4573010.48 308373.1,4574201.07 308613.6,4575113.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14377921.31315]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[785]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[796]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43027]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bisbal de Falset, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bisbal de Falset, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bisbal de Falset, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bisbal de Falset, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="785">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">415404.49,4574420.53 416479.63,4574075.01 416997.38,4573532.56 418014.29,4572832.67 418398.1,4571878.28 418548.13,4571286.46 419436.06,4570017.48 420181.25,4569423.81 418297.532,4568985.032 416573.22,4568803.64 415387.94,4571729.19 414388.66,4572365.44 413926.3,4572020.07 411572.51,4570615.96 410197.66,4571583.22 410039.07,4571836.6 409342.31,4571651.33 410473.81,4572142.21 410627.47,4573026.96 411813.77,4574725.72 412666.92,4575408.26 412860.36,4575304.02 412961.94,4575140.42 413393.49,4575294.07 413644.31,4575061.38 415095.57,4574427.47 415404.49,4574420.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30047822.18228]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[786]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[797]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08089]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gava]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gava]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gav…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gav…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="786">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">306147.29,4568747.93 305120.03,4568921.74 304328.45,4568743.49 303370.56,4568511.45 301575.42,4567706.34 301103.59,4569543.85 300307.99,4570177.07 300603.16,4570950.56 300437.88,4571246.17 300621.53,4571990.48 300560.64,4572312.22 302027.67,4572781.92 302446.7,4572741.22 302597.08,4573004.22 302768.31,4573457.18 303340.36,4573582.57 303681.02,4574280.09 304721.9,4574530.77 306381.14,4575320.63 307138.34,4575053.19 308159.6,4575150.39 308613.6,4575113.08 308373.1,4574201.07 307706.05,4573010.48 307126.46,4572503.56 307470.99,4571307.36 307440.01,4570398.7 306872.35,4569789.79 306546.28,4568933 306147.29,4568747.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37323429.61465]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[787]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[798]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43099]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palma d'Ebre, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palma d'Ebre, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palma d'Ebre, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palma d'Ebre, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="787">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">376658.89,4569975.6 376361.09,4570239.28 375196.77,4570029.26 374871.19,4569623.82 371947.38,4568123.39 371437.31,4567549.47 370669.96,4567873.43 370317.52,4568677.08 369517.48,4569861.51 369363.53,4570375.46 368844.47,4571446.69 369132.31,4571880.87 371053.97,4573529.91 371368.63,4573276.54 371930.75,4573233.05 372879.03,4573102.21 376173.35,4575144.52 376195.84,4575011.6 376123.84,4572076.83 376834.61,4570947.8 376676.42,4570450.83 376658.89,4569975.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32707759.39935]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[788]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[799]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43028]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bisbal del Penedes, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bisbal del Penedes, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bisbal del PenedŠs, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bisbal del PenedŠs, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="788">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">361862.49,4572416.54 359917.59,4572264.27 358727.12,4572718.37 358346.84,4572357.94 357029.14,4572621.83 356191.7,4572606.71 355947.12,4572882.37 356093.39,4573344.68 356369.22,4573315.97 356617.94,4573523.33 356716.79,4574115.12 356828.4,4575116.45 358987.86,4574081.11 359221.83,4573948.98 360864.96,4572661.33 361862.49,4572416.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7326616.73795]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[789]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[800]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43010]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alio]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alio]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ali¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ali¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="789">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">388541.09,4567043.13 386184.25,4565974.2 385607.27,4565552.07 385442.23,4565207.81 385295.08,4564721.86 384566.94,4564671.77 384017.19,4565136.13 383634.13,4565549.02 382855.23,4566000.22 382212.22,4565874.97 381384.87,4566141.84 380769.36,4567532.96 380757.31,4568190.54 380341.13,4568872.74 380888.22,4568719.95 382207.46,4568630.02 382415.6,4568441.77 382632.47,4568297.9 382628.48,4568123.41 382921.9,4568069.71 383665.22,4567717.95 384323.62,4568209.57 384674.03,4568231.48 384817.91,4569019.29 384702.6,4569167.65 385174.18,4569857.77 384701.9,4570586.79 385296.64,4571265.21 385350.84,4571970.22 385195.534,4572100.452 385337.44,4572570.36 385664.284,4572569.202 385997.85,4572816.33 385519.63,4573089.42 385289.47,4572740.1 385062.721,4572787.952 384266.15,4572420.13 383948.91,4571581.13 383101.04,4571858.14 382138.45,4572457.92 381883.5,4572573.47 381975.52,4572962.3 382506.66,4574243.16 383942.01,4574772.51 384630.53,4574669.33 385008.92,4574684.65 385818.92,4574611.31 385363.83,4574292.63 385923.95,4574202.28 386469.37,4574526.3 386247.15,4573825.34 386551.54,4572973.94 387864,4572212.94 388746.06,4571491.24 389162.3,4571782.17 389912.97,4571814.71 390647.63,4570934.92 390400.78,4570152.36 390413.08,4569998.64 389282.82,4568783.03 388933.42,4568213.42 388715.46,4567732.35 388541.09,4567043.13</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47955288.87694]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[790]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[801]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08058]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[03]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellet i la Gornal]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gornal, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellet i la Gornal]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gornal, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="790">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382138.45,4572457.92 383101.04,4571858.14 383948.91,4571581.13 384266.15,4572420.13 385062.721,4572787.952 385289.47,4572740.1 385519.63,4573089.42 385997.85,4572816.33 385664.284,4572569.202 385337.44,4572570.36 385195.534,4572100.452 385350.84,4571970.22 385296.64,4571265.21 384701.9,4570586.79 385174.18,4569857.77 384702.6,4569167.65 384817.91,4569019.29 384674.03,4568231.48 384323.62,4568209.57 383665.22,4567717.95 382921.9,4568069.71 382628.48,4568123.41 382632.47,4568297.9 382415.6,4568441.77 382207.46,4568630.02 380888.22,4568719.95 380341.13,4568872.74 380848.74,4569164 381089.94,4569620.96 381419.08,4569571.56 381360.29,4569989.11 381891.4,4570445.69 382047.77,4571113.25 382281.64,4571115.45 381915.32,4571620.1 382136.77,4572129.77 382138.45,4572457.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">386469.37,4574526.3 385923.95,4574202.28 385363.83,4574292.63 385818.92,4574611.31 386457.78,4574621.16 386469.37,4574526.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[14056044.54762]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[791]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[802]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43016]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arboc, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arboc, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arbo‡, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arbo‡, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="791">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">350081.71,4565903.55 349582.74,4565728.15 349351.782,4565854.356 349197.36,4565747.13 348862.51,4565364.42 348164.86,4566322.6 347546.47,4565394.87 347097.45,4565618.94 346972.18,4565401.35 345340.44,4566388.14 345799.35,4566946.81 344570,4568106.56 344254.68,4568637.61 344315.52,4569129.56 342983.51,4569329.88 342508.12,4569631.76 342255.49,4569522 341352.62,4569256.94 340884.19,4570212.29 340960.51,4570696.04 340907.31,4570866.34 341626.39,4571386.11 342330,4570950 342877,4570479 343693.29,4570841.36 344236.08,4570804.41 344045.9,4571936.59 343857.54,4572419.3 343568.04,4572340.31 343289.06,4572881.39 343961.05,4573215.78 344687.86,4574134.78 345733.56,4574143.54 346337.67,4573769.57 346670.16,4573261.52 347362.51,4572771.69 347953.15,4573517.22 348357.41,4574168.25 348904.82,4574495.99 349308.47,4573836.69 349352.46,4573106.29 348880.8,4573134.49 348815.6,4572396.9 349068.1,4572102.78 350663.08,4572203.94 350516.1,4571520.8 349981.36,4571429.5 350361.65,4569432.93 348901.65,4569336.23 348661.15,4568091.28 350083.3,4566725.64 350081.71,4565903.55</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[46153183.75939]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[792]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[803]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43005]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alcover]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alcover]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alcover]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alcover]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="792">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">335876.53,4571357.4 335901.03,4570928.78 335566.3,4570892.93 334833.39,4570180.18 333908.03,4570274.39 333867.09,4569700.91 333155.56,4570092.7 332777,4569665 332215,4569539 330739,4569505 330526.65,4569885.67 330539,4570226 330008.84,4571580.86 330210.89,4573128.96 330427.63,4573735.07 332263.86,4573085.69 333402.72,4573123.04 333810.18,4572847.88 334417.25,4572059.15 335523.13,4571398.29 335876.53,4571357.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15876911.3229]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[793]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[804]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43057]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Febro, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Febro, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Febr¢, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Febr¢, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="793">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395682.04,4571017.38 394775.06,4570484.74 394672.31,4570073.25 394293.83,4569475.95 393157.97,4569298.98 392462.45,4569606.53 391287.47,4569399.07 390958.91,4569805.96 390413.08,4569998.64 390400.78,4570152.36 390647.63,4570934.92 391231.39,4571612.07 391610.74,4572330.34 391428.06,4572804.83 392036.79,4573346.31 393743.82,4572972.49 394492.66,4572594.5 394887.23,4572720.21 395089.5,4572415.72 395260.8,4571983.98 395346.45,4571655.22 395682.04,4571017.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14274201.446]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[794]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[805]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08043]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[17]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Canyelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Canyelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Canyelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Canyelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="794">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">376834.61,4570947.8 377177.01,4571757.95 377515.07,4572726.96 378598,4573015.49 378744.45,4572716.4 379141.53,4572204.69 380113.01,4571336.77 378919.26,4571134.47 378133.16,4570479.33 376676.42,4570450.83 376834.61,4570947.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4771422.59645]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[795]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[806]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43074]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Llorenc del Penedes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Llorenc del Penedes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lloren‡ del PenedŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lloren‡ del PenedŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="795">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360086.92,4570563.18 359457.26,4570559.11 358472.95,4570490.61 358064.38,4570394.26 356395.24,4570050.57 356083.75,4569838.34 355634.12,4570314.18 355045.89,4571153.38 355330.52,4570984.13 355946.54,4571424.87 356191.7,4572606.71 357029.14,4572621.83 358346.84,4572357.94 358727.12,4572718.37 359917.59,4572264.27 359972.7,4572034.8 360086.92,4570563.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9337904.0213]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[796]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[807]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43119]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Puigpelat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Puigpelat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Puigpelat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Puigpelat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="796">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365939.36,4569366.1 365356.84,4569308.38 364960.52,4569984.24 364924.49,4570388.26 364507.92,4571172.02 364805.93,4571289.65 364976.13,4571948.37 365360.28,4571929.17 366065.31,4572670.89 368133.7,4571891.82 369132.31,4571880.87 368844.47,4571446.69 369363.53,4570375.46 368966.63,4570468 368311.89,4570391.66 366819.47,4570714.55 366355.93,4570292.57 366314.17,4570016.82 365939.36,4569366.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8401219.27515]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[797]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[808]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43132]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rodonya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rodonya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rodony…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rodony…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="797">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395842.03,4564085.18 395454.74,4563993.08 394620.59,4565239.42 394474.65,4565969.06 393313.3,4568576.44 393157.97,4569298.98 394293.83,4569475.95 394672.31,4570073.25 394775.06,4570484.74 395682.04,4571017.38 396583.29,4571109.15 397308.43,4571764 398356.41,4572417.13 399836.45,4572068.79 400893.03,4571895.3 400809.13,4571262.66 401143.97,4570577.67 401518.07,4570718.6 401774.24,4570169.15 402137.01,4569626.32 402489.98,4569399.44 402590.62,4568892.05 402395.13,4568544.37 401025.88,4568096.33 399695.76,4567518.19 398851.82,4566710.2 398547.23,4566370.62 398290.5,4565488.21 397516.71,4566070.98 397057.2,4566208.25 396423.83,4565648.02 395852.7,4564466.13 395842.03,4564085.18</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[41047577.5485]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[798]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[809]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08231]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[17]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Pere de Ribes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Pere de Ribes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Pere de Ribes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Pere de Ribes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="798">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362624.83,4572034.17 362312.18,4571240.58 362046.72,4570410.52 362043.98,4569626.25 361038.56,4569261.15 360104.04,4570144.93 360086.92,4570563.18 359972.7,4572034.8 359917.59,4572264.27 361862.49,4572416.54 362624.83,4572034.17</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6081141.9155]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[799]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[810]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43034]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Brafim]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Brafim]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Br…fim]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Br…fim]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="799">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">411572.51,4570615.96 413926.3,4572020.07 414388.66,4572365.44 415387.94,4571729.19 416573.22,4568803.64 411700.67,4568758.18 411217.94,4569665.53 411214.67,4570202.6 411572.51,4570615.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12945000.61105]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[800]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[811]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08056]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castelldefels]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castelldefels]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castelldefels]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castelldefels]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="800">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">377466.75,4568607.65 376763.43,4568891.67 376658.89,4569975.6 376676.42,4570450.83 378133.16,4570479.33 378919.26,4571134.47 380113.01,4571336.77 380629.88,4571779.53 381262.48,4572233.6 381915.32,4571620.1 382281.64,4571115.45 382047.77,4571113.25 381891.4,4570445.69 381360.29,4569989.11 381419.08,4569571.56 381089.94,4569620.96 380848.74,4569164 380341.13,4568872.74 380017.57,4568603.07 379500.48,4568479.27 378818.03,4568439.65 378561.74,4568453.61 378241.6,4568311.4 378085.12,4568434.93 377637.33,4568074.54 377466.75,4568607.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12278717.42725]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[801]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[812]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43020]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Banyeres del Penedes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Banyeres del Penedes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Banyeres del PenedŠs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Banyeres del PenedŠs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="801">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">368967.15,4568037.82 367725.66,4567708.98 367300.44,4567444.75 367106.19,4566942.38 366206.88,4566786.04 365549.18,4566823.31 364892.62,4567070.67 363370.21,4567338.55 363202.55,4567769.23 363218.41,4568082.04 362481.84,4568527.97 362391.05,4569025.01 362230.91,4569245.78 362043.98,4569626.25 362046.72,4570410.52 362312.18,4571240.58 362624.83,4572034.17 363027.37,4571962.1 364279.64,4571540.44 364520.94,4571725.91 364976.13,4571948.37 364805.93,4571289.65 364507.92,4571172.02 364924.49,4570388.26 364960.52,4569984.24 365356.84,4569308.38 365939.36,4569366.1 367703.76,4569252.21 368930,4568514.88 368967.15,4568037.82</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18848098.86265]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[802]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[813]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43089]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montferri]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montferri]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montferri]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montferri]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="802">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">411572.51,4570615.96 411214.67,4570202.6 411217.94,4569665.53 411700.67,4568758.18 411075.657,4568642.844 410394.407,4568430.344 410303.88,4568475 408738.157,4567850.657 408354.03,4567764.69 408147.532,4567566.282 407962.94,4567495.41 407588.61,4567258.61 407053.782,4567035.032 406456.57,4566924.42 405347.532,4566475.657 405349.78,4566334.76 405247.532,4566211.594 405053.782,4566095.969 404797.532,4566149.094 404606.907,4565792.844 404241.92,4565580.97 403834.09,4565679.06 403541.282,4565669.407 403322.532,4565597.532 403043.87,4565695.88 402803.782,4565616.282 401941.282,4565861.594 401798.62,4565735.16 401306.907,4565736.594 401110.13,4565842.75 400775.657,4565795.969 400507,4565611.71 400181.907,4565645.969 399381.907,4565306.907 399035.032,4565116.282 398788.157,4564925.657 398553.782,4564697.532 398541.282,4564616.282 398403.782,4564506.907 398331.907,4564572.532 398056.907,4564491.282 397621.34,4564538.55 397169.407,4564339.719 397080.13,4564215.8 396841.282,4564249.094 396672.94,4564091.69 396444.407,4564105.344 396280.69,4564002.3 395842.03,4564085.18 395852.7,4564466.13 396423.83,4565648.02 397057.2,4566208.25 397516.71,4566070.98 398290.5,4565488.21 398547.23,4566370.62 398851.82,4566710.2 399695.76,4567518.19 401025.88,4568096.33 402395.13,4568544.37 402590.62,4568892.05 402489.98,4569399.44 403065.33,4569452.32 403268.53,4569809.81 404578.83,4569457.72 404560.32,4569696.74 405559.43,4570511.59 405701.75,4570566.68 406813.56,4570510.2 406744.24,4570893.63 406911.04,4570943.46 408037.47,4570525.36 408454.54,4571000.77 408752.49,4570964.15 409342.31,4571651.33 410039.07,4571836.6 410197.66,4571583.22 411572.51,4570615.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43876415.31836]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[803]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[814]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08270]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[17]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sitges]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sitges]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sitges]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sitges]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="803">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310475.25,4566805.66 309984.594,4567006.699 309742.407,4566889.512 309570.532,4566991.074 309395.51,4566794.91 309094.17,4567036 309068.62,4566379.4 308213.22,4565365.66 307805.27,4565493.62 306866.73,4566223.9 306273.36,4566081.88 306043.97,4566689.73 306169.19,4567056.04 306375.83,4567662.22 306115.28,4568609.97 306147.29,4568747.93 306546.28,4568933 306872.35,4569789.79 307440.01,4570398.7 307776.75,4570016.58 308750.35,4570260.13 308790.52,4570499.27 309393.97,4571055.29 309798.71,4571336.9 310507.52,4571127.7 311098.79,4571600.11 311696.48,4571664 312153.59,4571452.36 312601.65,4571486.36 313412.3,4571159.32 314144.16,4571022.13 313823.4,4570050.76 313042.22,4569694.26 313325.57,4569184.8 313117.01,4568357.37 313250.27,4567842.11 313121.67,4567577.69 312129.99,4566739.72 311275.9,4566929.03 310475.25,4566805.66</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30788252.40752]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[804]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[815]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43035]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cabaces]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cabaces]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cabac‚s]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cabac‚s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="804">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340000,4570009.06 339126.25,4569287.84 337716.78,4568490.59 337485.12,4567324.44 335371.77,4565429.18 333266.55,4566782.08 332707.93,4566771.07 332339.77,4567081.78 332282.12,4567286.18 331968.76,4567536.97 331901,4567541 332376.37,4568205.16 332602.73,4569037.73 332215,4569539 332777,4569665 333155.56,4570092.7 333867.09,4569700.91 333908.03,4570274.39 334833.39,4570180.18 335566.3,4570892.93 335901.03,4570928.78 335876.53,4571357.4 337031.62,4570539.97 340000,4570009.06</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23686013.28351]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[805]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[816]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43169]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilaplana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilaplana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilaplana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilaplana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="805">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">351911.63,4564612.73 351720.67,4565664.45 351637.18,4566406.17 351729.67,4567167.95 351815.18,4567339.08 352102.26,4568289.45 352357.48,4569404.2 352754.68,4570048.82 353780.97,4569677.77 354124.72,4569896.62 353971.59,4571080.75 354754.7,4570910.88 355045.89,4571153.38 355634.12,4570314.18 354966.8,4569429.71 355428.17,4568939.95 355292.22,4568746.05 355949.63,4568280.84 355437.02,4567669.79 355047.52,4567092.35 354808.54,4566539.78 354984.08,4566305.92 354818.06,4565873.6 354249.59,4565129.97 353179.907,4565526.231 352820.47,4565070.49 352405.07,4564501.6 351905.32,4564496.59 351911.63,4564612.73</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16775187.39432]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[806]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[817]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43160]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vallmoll]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vallmoll]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vallmoll]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vallmoll]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="806">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">370669.96,4567873.43 370384.15,4567611.77 368967.15,4568037.82 368930,4568514.88 367703.76,4569252.21 365939.36,4569366.1 366314.17,4570016.82 366355.93,4570292.57 366819.47,4570714.55 368311.89,4570391.66 368966.63,4570468 369363.53,4570375.46 369517.48,4569861.51 370317.52,4568677.08 370669.96,4567873.43</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6603746.56695]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[807]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[818]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43079]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masllorenc]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masllorenc]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Maslloren‡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Maslloren‡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="807">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362052.89,4565200.56 361844.28,4564806.7 361492.11,4564892.16 361242.3,4564579.72 361059.86,4564128.02 360945.72,4564065.36 360651.75,4564746.29 359876.33,4564534.32 359021.48,4565598.29 358644.11,4565904.6 357958.49,4566557 357427.37,4566724.9 357310.54,4566915.53 357409.06,4567076.53 357889.73,4567083.01 358050.69,4567560.34 358449.63,4567757.11 358689.62,4568091.24 358900.73,4568479.63 358677.87,4568845.98 358672.84,4569141.5 357997.51,4569991.8 358064.38,4570394.26 358472.95,4570490.61 359457.26,4570559.11 360086.92,4570563.18 360104.04,4570144.93 361038.56,4569261.15 362043.98,4569626.25 362230.91,4569245.78 362391.05,4569025.01 362481.84,4568527.97 361796.31,4567396.33 361855.82,4566979.23 361537.64,4566615.19 361278.4,4566771.6 361023.75,4566623.44 360531.23,4566672.48 360907.5,4566108.19 361047.45,4565702.52 361517.62,4565768.95 361380.04,4566001.86 361748.21,4565906.31 362052.89,4565200.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18168350.5148]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[808]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[819]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43165]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilabella]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilabella]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilabella]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilabella]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="808">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">357105.67,4566673.59 356250.26,4566536.63 355990.71,4566306.4 355586.06,4566502.14 354984.08,4566305.92 354808.54,4566539.78 355047.52,4567092.35 355437.02,4567669.79 355949.63,4568280.84 355292.22,4568746.05 355428.17,4568939.95 354966.8,4569429.71 355634.12,4570314.18 356083.75,4569838.34 356395.24,4570050.57 358064.38,4570394.26 357997.51,4569991.8 358672.84,4569141.5 358677.87,4568845.98 358900.73,4568479.63 358689.62,4568091.24 358449.63,4567757.11 358050.69,4567560.34 357889.73,4567083.01 357409.06,4567076.53 357310.54,4566915.53 357217.19,4567010.79 357105.67,4566673.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10712379.6773]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[809]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[820]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43098]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Nulles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Nulles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Nulles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Nulles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="809">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">380017.57,4568603.07 379841.66,4567347.09 378047.73,4565459.22 377112.59,4565043.74 377179.93,4565679 376762.96,4566730.43 376978.45,4567505.71 376850.69,4568172.62 377466.75,4568607.65 377637.33,4568074.54 378085.12,4568434.93 378241.6,4568311.4 378561.74,4568453.61 378818.03,4568439.65 379500.48,4568479.27 380017.57,4568603.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">376763.43,4568891.67 375470.7,4568706.39 375217.74,4569432.51 374871.19,4569623.82 375196.77,4570029.26 376361.09,4570239.28 376658.89,4569975.6 376763.43,4568891.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[9166046.1406]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[810]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[821]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43140]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Oliva]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Oliva]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa Oliva]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa Oliva]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="810">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338493.89,4566186.04 337485.12,4567324.44 337716.78,4568490.59 339126.25,4569287.84 340000,4570009.06 340884.19,4570212.29 341352.62,4569256.94 342255.49,4569522 342508.12,4569631.76 342983.51,4569329.88 344315.52,4569129.56 344254.68,4568637.61 344570,4568106.56 345799.35,4566946.81 345340.44,4566388.14 345252.49,4566161.71 344661.29,4566456.79 344212.09,4566885.37 343351.27,4566758.93 341980.95,4567272.47 341678.72,4566939.01 340665.33,4566628.15 340525.44,4566189.99 339976,4566229 338493.89,4566186.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20171670.3545]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[811]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[822]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43003]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albiol, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albiol, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albiol, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albiol, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="811">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">325834.26,4564787.06 325802.95,4565013.23 324943.99,4567465.2 325699.16,4567757.37 327120.37,4567923.69 327743.46,4568146.75 328277.43,4568765.46 329247.22,4569437.23 330057.93,4570068.97 330526.65,4569885.67 330739,4569505 332215,4569539 332602.73,4569037.73 332376.37,4568205.16 331901,4567541 331856.33,4567288.49 331591.1,4566865.48 330962.62,4567130.82 331397.93,4566406.41 331445.98,4566091.07 330288.01,4566462.17 330118.88,4566267.97 329635.82,4565896.66 329097.73,4565740.55 328553.3,4565495.9 327368.42,4565602.22 327010.05,4565872.76 326422.01,4565364.35 325834.26,4564787.06</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20580053.4272]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[812]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[823]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43015]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arboli]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arboli]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arbol¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arbol¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="812">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">395454.74,4563993.08 395123.72,4564012.25 394681.907,4563892.844 394373.94,4563674.63 394210.39,4563484.65 394302.52,4563130.84 393981.907,4563030.344 393919.407,4562824.094 393564.59,4562582.19 393553.781,4562633.469 393891.282,4562864.719 393953.782,4563061.594 394254.78,4563153.25 394088.157,4563708.469 393435.031,4563570.969 393541.281,4563036.594 393494.406,4563024.094 393435.47,4563257.5 392650.94,4563252.55 392159.38,4563143.31 391419.5,4562860.25 390620.06,4562756 390078.84,4562458.05 389666.72,4562319.05 388541.09,4567043.13 388715.46,4567732.35 388933.42,4568213.42 389282.82,4568783.03 390413.08,4569998.64 390958.91,4569805.96 391287.47,4569399.07 392462.45,4569606.53 393157.97,4569298.98 393313.3,4568576.44 394474.65,4565969.06 394620.59,4565239.42 395454.74,4563993.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33604683.11785]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[813]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[824]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08307]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[17]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova i la Geltru]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova i la Geltru]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova i la Geltr£]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova i la Geltr£]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="813">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">376762.96,4566730.43 376267.87,4566541.84 375192.01,4566542 374833.9,4566264.61 373963.95,4565435.03 373845.68,4564247.18 372995.45,4563836.99 372363.1,4563272.52 372010.25,4564927.32 371550.13,4565655.46 371759.99,4566116.59 370878.41,4566805.11 370384.15,4567611.77 370669.96,4567873.43 371437.31,4567549.47 371947.38,4568123.39 374871.19,4569623.82 375217.74,4569432.51 375470.7,4568706.39 376763.43,4568891.67 377466.75,4568607.65 376850.69,4568172.62 376978.45,4567505.71 376762.96,4566730.43</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19628152.40975]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[814]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[825]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43002]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Albinyana]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Albinyana]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Albinyana]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Albinyana]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="814">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">350361.65,4569432.93 350888.27,4569519.73 350874.85,4569240.98 351150.26,4568203.28 350695.34,4568164.87 350417.95,4567847.84 350083.3,4566725.64 348661.15,4568091.28 348901.65,4569336.23 350361.65,4569432.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4145416.09885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[815]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[826]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43083]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mila, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mila, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mil…, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mil…, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="815">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">321186.06,4564198.96 319095.67,4564756.3 318964.1,4565418.64 318607.84,4565701.66 318000.65,4566019.94 317308.43,4566513.59 317176.82,4567086.33 317411.96,4567413.73 317655.87,4568038.71 317441.94,4568773.78 318047.25,4569046.22 319169.68,4568484.77 320050.56,4568790.37 320080.75,4569282.53 321128.58,4568695.01 321507.82,4567385.28 321005.44,4566596.08 320858.63,4565951.71 321186.06,4564198.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13799229.7776]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[816]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[827]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43112]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Poboleda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Poboleda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Poboleda]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Poboleda]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="816">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">315771.23,4567874.02 315166.11,4567550.76 314554.08,4566505.29 314405.45,4564928.84 313878.23,4564678.99 313346.01,4565524.26 313250.31,4566637.18 313121.67,4567577.69 313250.27,4567842.11 313806.48,4568324.07 314151.13,4569030.41 314683.18,4568121.57 314954.38,4568019.32 315771.23,4567874.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5158653.7332]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[817]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[828]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43173]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilella Alta, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilella Alta, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilella Alta, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilella Alta, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="817">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">300220.9,4561485.14 299244.64,4560784.46 298443.93,4561081.24 297370.74,4561831.37 297847.17,4562391.29 297408.33,4563131.61 296950.06,4565497.63 298535.18,4566077.9 300309.5,4568734.87 301078.97,4567895.09 301427.14,4567610.78 301575.42,4567706.34 303370.56,4568511.45 304328.45,4568743.49 305120.03,4568921.74 306147.29,4568747.93 306115.28,4568609.97 306375.83,4567662.22 306169.19,4567056.04 305790.83,4566885.8 304968.11,4567055.39 303761.6,4566783.97 303486.78,4566579.8 302539.73,4566318.29 301525.85,4565703.33 300831.97,4565137.73 300115.27,4564206.87 299244.77,4563758.84 299455.17,4563072.32 299315.01,4562574.65 300220.9,4561485.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26983005.17025]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[818]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[829]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43177]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vinebre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vinebre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vinebre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vinebre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="818">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">382212.22,4565874.97 381965.32,4565376.56 381071.88,4565647.99 380496.88,4564926.3 380692.71,4563956.06 379850.91,4564137.51 379400.6,4563384.11 379143.79,4564178.94 379053.71,4564829.96 379192.92,4565333.59 378047.73,4565459.22 379841.66,4567347.09 380017.57,4568603.07 380341.13,4568872.74 380757.31,4568190.54 380769.36,4567532.96 381384.87,4566141.84 382212.22,4565874.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8108154.83755]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[819]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[830]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43024]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellvei]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellvei]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellvei]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellvei]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="819">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">319095.67,4564756.3 318546.43,4564527.76 318430.8,4564551.42 316175.8,4563894.25 315874.44,4563681.38 315203.344,4564084.824 314649.66,4564116.23 314297.094,4564162.949 313929.59,4564460.48 313878.23,4564678.99 314405.45,4564928.84 314554.08,4566505.29 315166.11,4567550.76 315771.23,4567874.02 316726.25,4567331.62 316917.22,4568407.22 317441.94,4568773.78 317655.87,4568038.71 317411.96,4567413.73 317176.82,4567086.33 317308.43,4566513.59 318000.65,4566019.94 318607.84,4565701.66 318964.1,4565418.64 319095.67,4564756.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13379266.15708]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[820]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[831]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43154]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torroja del Priorat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torroja del Priorat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torroja del Priorat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torroja del Priorat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="820">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">277268.26,4559434.54 277270.12,4560131.69 275897.9,4560702.15 275722.62,4561039.95 274630,4561020 273794.56,4560686.22 273985.72,4562033.14 274201.46,4562644.67 274320.41,4563215.12 275194.32,4565866.8 275375.219,4566912.949 275624.53,4567309.85 275765.844,4567327.011 276281.469,4567131.699 276687.5,4567252.29 276781.469,4567452.011 276929.906,4567842.636 277173.42,4567967.79 277875.219,4567616.074 278570.531,4567405.136 278901.24,4567357.03 279101.781,4567577.011 279196.86,4568104.51 279308.78,4568754.31 280364.68,4568629.16 280587.64,4568267.46 280070.531,4568057.48 279762.37,4567679.99 279929.906,4567221.542 279839.71,4566866.14 279633.031,4566198.105 279359.42,4565916.46 279304.906,4565627.792 279289.281,4565299.667 280312.719,4565854.355 280864.08,4565896.83 281162.3,4565954.79 281429.906,4565803.573 281445.531,4565459.823 281703.344,4565420.761 281723,4565241 281640.844,4565123.886 281384,4565169 281203.344,4565014.511 281284,4564275 281508,4564413 281726.781,4564280.136 281839,4564059 281473.02,4563905.07 281218.969,4563647.323 280886.7,4563516.02 280508.031,4562928.573 280184,4562733 279820.531,4562748.886 279701,4562607 279976.781,4562295.761 280109,4561828 279968.969,4561717.636 279828.344,4561920.761 279605,4561958 279492.406,4561389.511 279552,4560635 279250.219,4560366.073 279148.656,4559834.823 278990,4559740 279150,4559370 278989,4559091 278404.91,4559067.26 277268.26,4559434.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[42938503.27287]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[821]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[832]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43110]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pobla de Massaluca, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pobla de Massaluca, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pobla de Massaluca, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pobla de Massaluca, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="821">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">367106.19,4566942.38 366512.28,4566589.51 366390.45,4565259.5 365845.9,4564746.33 365162.81,4564694.06 362963.36,4565248.25 362052.89,4565200.56 361748.21,4565906.31 361380.04,4566001.86 361517.62,4565768.95 361047.45,4565702.52 360907.5,4566108.19 360531.23,4566672.48 361023.75,4566623.44 361278.4,4566771.6 361537.64,4566615.19 361855.82,4566979.23 361796.31,4567396.33 362481.84,4568527.97 363218.41,4568082.04 363202.55,4567769.23 363370.21,4567338.55 364892.62,4567070.67 365549.18,4566823.31 366206.88,4566786.04 367106.19,4566942.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[11962822.86475]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[822]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[833]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43135]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Salomo]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Salomo]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Salom¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Salom¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="822">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">351815.18,4567339.08 351729.67,4567167.95 351637.18,4566406.17 351720.67,4565664.45 350081.71,4565903.55 350083.3,4566725.64 350417.95,4567847.84 350695.34,4568164.87 351150.26,4568203.28 351519.36,4568273.33 351815.18,4567339.08</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3518680.04295]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[823]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[834]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43080]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Maso, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Maso, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mas¢, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mas¢, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="823">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">365639.02,4563011.41 365162.81,4564694.06 365845.9,4564746.33 366390.45,4565259.5 366512.28,4566589.51 367106.19,4566942.38 367300.44,4567444.75 367725.66,4567708.98 368967.15,4568037.82 370384.15,4567611.77 370878.41,4566805.11 371759.99,4566116.59 371550.13,4565655.46 372010.25,4564927.32 372363.1,4563272.52 370461.45,4562811.76 369450.66,4562636.45 368994.5,4562642.32 368148.9,4563626.91 367412.32,4563665.66 366583.23,4563786.19 366002.08,4563053.49 365639.02,4563011.41</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24983940.3117]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[824]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[835]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43030]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bonastre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bonastre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bonastre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bonastre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="824">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313346.01,4565524.26 312854.61,4565196.21 312527.99,4565158.84 312403.44,4565261.69 312191.66,4564209.66 311396.23,4564191 311025.46,4564966.79 310683.66,4565792.86 310475.25,4566805.66 311275.9,4566929.03 312129.99,4566739.72 313121.67,4567577.69 313250.31,4566637.18 313346.01,4565524.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5763480.2304]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[825]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[836]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43174]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilella Baixa, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilella Baixa, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilella Baixa, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilella Baixa, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="825">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">325856.46,4561554.68 325090.01,4560967.18 324670.86,4560924.94 324537.75,4561022 323424.35,4561159.68 322278.13,4561456.8 322129.87,4562067.71 322192.97,4562570.8 322668.09,4562680.05 325377.29,4563018.95 325885.1,4563519.85 325834.26,4564787.06 326422.01,4565364.35 327010.05,4565872.76 327368.42,4565602.22 328553.3,4565495.9 329097.73,4565740.55 329635.82,4565896.66 330118.88,4566267.97 330288.01,4566462.17 331445.98,4566091.07 331397.93,4566406.41 330962.62,4567130.82 331591.1,4566865.48 331856.33,4567288.49 331901,4567541 331968.76,4567536.97 332282.12,4567286.18 332339.77,4567081.78 332707.93,4566771.07 333266.55,4566782.08 333859.12,4563009.58 333743.36,4562896.75 333337.77,4562714.43 332938.19,4562307.34 332284.27,4561364.02 332061.64,4560828.38 331444.2,4561470.8 330290.63,4562127 330033.8,4561920.8 329459.52,4562076.08 329150.43,4561771.37 328694.68,4561903.42 328029.12,4561903.41 327211.27,4562393.21 327195.48,4562187.81 326705.89,4562485.75 326214.05,4562280.36 325856.46,4561554.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[38455671.5552]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[826]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[837]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43009]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alforja]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alforja]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alforja]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alforja]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="826">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">293085.76,4552815.97 292376.4,4553112.58 292213.84,4552841.91 291584.67,4553197.67 291124.8,4553840.46 291015.25,4554395.38 290271.68,4555541.12 290024.18,4556463.62 289687.718,4556795.761 289194.52,4557528.67 288550.91,4557345.62 288001.61,4557592.59 287466.83,4557412.64 286892.17,4558194.17 286907.41,4558665.03 286353.02,4559344.26 285748.86,4560015.9 285559.47,4560332.37 285371.88,4560513.25 284800,4561473 284143.16,4561336.5 282320.13,4566229.39 282401.89,4566497.3 283642.58,4566963.32 284780.83,4567445.67 286161.25,4566513.38 286624.34,4566006.3 286932.81,4565624.18 287093.84,4564766.7 288735.49,4564643.14 289294.53,4564017.59 289998.65,4563687.64 290092.78,4563674.51 290184.43,4563460 290554.98,4561093.25 290088.94,4560451.26 290208.59,4559555.76 289922.85,4559181.17 289682.35,4558613.8 289347.99,4558040.93 289664.28,4557436.386 290248.93,4557065.64 291366.05,4556690.02 292522.18,4555846.17 293611.96,4555330.2 294646,4554993.28 294384.8,4554578.78 293650.83,4553787.54 293085.76,4552815.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[56008151.88478]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[827]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[838]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43056]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Fatarella, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Fatarella, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Fatarella, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Fatarella, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="827">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">333859.12,4563009.58 333266.55,4566782.08 335371.77,4565429.18 337485.12,4567324.44 338493.89,4566186.04 338754.47,4565250.86 339568.08,4564843.87 340041.37,4564887.81 339960.71,4564561.59 339633.79,4564585.12 338753.41,4563884.48 339211.46,4563403.32 338849.04,4563015.83 339004,4561208.49 338830.11,4561023.59 338094.06,4560634.35 337171.28,4560315.76 336166.13,4560319.39 336368.13,4560928.82 336382.47,4561146.41 335714.68,4561931.12 335202.87,4562773.91 333859.12,4563009.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25833607.17615]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[828]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[839]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43007]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aleixar, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Aleixar, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aleixar, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aleixar, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="828">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340041.37,4564887.81 339568.08,4564843.87 338754.47,4565250.86 338493.89,4566186.04 339976,4566229 340525.44,4566189.99 340665.33,4566628.15 341678.72,4566939.01 341980.95,4567272.47 343351.27,4566758.93 344212.09,4566885.37 344661.29,4566456.79 345252.49,4566161.71 345340.44,4566388.14 346972.18,4565401.35 347539.77,4565110.62 347348.27,4564312.3 347485.2,4564148.26 347172.43,4562852.34 346911.59,4562312.94 346820.47,4562060.86 345624.68,4560636.2 345378.76,4560557.89 344206.8,4561685.46 342811.62,4560717.76 343083.71,4560429.25 343381.19,4559625.74 342959.07,4559832.92 342472.53,4560646.85 342007.02,4561769.94 342249.16,4562469.16 341497,4563483 340041.37,4564887.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34738226.1297]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[829]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[840]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43145]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Selva del Camp, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Selva del Camp, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Selva del Camp, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Selva del Camp, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="829">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">300220.9,4561485.14 299315.01,4562574.65 299455.17,4563072.32 299244.77,4563758.84 300115.27,4564206.87 300831.97,4565137.73 301525.85,4565703.33 302539.73,4566318.29 303486.78,4566579.8 303761.6,4566783.97 304968.11,4567055.39 305790.83,4566885.8 306169.19,4567056.04 306043.97,4566689.73 306273.36,4566081.88 306866.73,4566223.9 307805.27,4565493.62 305973.9,4563791.65 305630.01,4563691.92 304732.18,4562780.8 304472.15,4562617.02 303757.08,4562261.7 303319.25,4561914.64 302528.07,4561503.66 300220.9,4561485.14</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28072839.91805]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[830]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[841]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43152]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torre de l'Espanyol, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torre de l'Espanyol, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torre de l'Espanyol, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torre de l'Espanyol, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="830">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">386520.04,4561514.57 386160.1,4562604.49 386210.76,4563389.76 386622.71,4563383.81 386703.68,4563043.4 387135.62,4562885.76 386685.15,4563888.19 386452.43,4564265.76 386642.79,4565193.82 386184.25,4565974.2 388541.09,4567043.13 389666.72,4562319.05 389353.88,4562085.68 388831.906,4561841.281 387469.5,4561594.06 387375.656,4561456.906 387449.63,4561350.75 386638.156,4561228.781 386628.781,4561266.281 387141.281,4561381.906 387275.656,4561600.656 386800.656,4561572.531 386520.04,4561514.57</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13361399.35884]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[831]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[842]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08074]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[17]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cubelles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cubelles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cubelles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cubelles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="831">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">308182.76,4560627.72 307583.63,4560599.88 306851.52,4561928.22 304900.96,4562262.25 304472.15,4562617.02 304732.18,4562780.8 305630.01,4563691.92 305973.9,4563791.65 307805.27,4565493.62 308213.22,4565365.66 309068.62,4566379.4 309094.17,4567036 309395.51,4566794.91 309570.532,4566991.074 309742.407,4566889.512 309984.594,4567006.699 310475.25,4566805.66 310683.66,4565792.86 311025.46,4564966.79 310925.82,4564350 310406.65,4563204.19 309308.33,4563067.89 308881.31,4562626.5 309166.11,4561936.42 308834.6,4561315.01 308182.76,4560627.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19478704.55663]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[832]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[843]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43058]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Figuera, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Figuera, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Figuera, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Figuera, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="832">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360945.72,4564065.36 360856.84,4563627.59 361028.53,4563279.06 360100.45,4562499.27 359828.99,4562379.36 359558.24,4562565.8 359198.97,4562718.97 358574.69,4563072.67 358154.72,4564276.01 357613.45,4564690.63 357113.33,4564904.36 356879.26,4565910.05 357105.67,4566673.59 357217.19,4567010.79 357310.54,4566915.53 357427.37,4566724.9 357958.49,4566557 358644.11,4565904.6 359021.48,4565598.29 359876.33,4564534.32 360651.75,4564746.29 360945.72,4564065.36</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8674314.37135]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[833]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[844]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43122]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Renau]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Renau]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Renau]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Renau]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="833">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">380106.21,4560623.45 377613.92,4560276.24 376894.406,4560088.156 376472.531,4559844.406 376330.5,4559875.2 373930.44,4559305.16 373840.67,4559506.89 373103.31,4560379.61 372461.47,4562351.07 372363.1,4563272.52 372995.45,4563836.99 373845.68,4564247.18 373963.95,4565435.03 374833.9,4566264.61 375192.01,4566542 376267.87,4566541.84 376762.96,4566730.43 377179.93,4565679 377112.59,4565043.74 378047.73,4565459.22 379192.92,4565333.59 379053.71,4564829.96 379143.79,4564178.94 379400.6,4563384.11 379220.77,4562704.63 379251.79,4562039.58 379446.94,4561509.8 380106.21,4560623.45</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[37232675.38101]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[834]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[845]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43163]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vendrell, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vendrell, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vendrell, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vendrell, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="834">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354554.05,4560726.61 354136.31,4562586.61 354082.91,4563096.55 353657.95,4564094.84 352820.47,4565070.49 353179.907,4565526.231 354249.59,4565129.97 354818.06,4565873.6 354984.08,4566305.92 355586.06,4566502.14 355990.71,4566306.4 356250.26,4566536.63 357105.67,4566673.59 356879.26,4565910.05 357113.33,4564904.36 357613.45,4564690.63 358154.72,4564276.01 358574.69,4563072.67 357564.62,4563606.78 357110.06,4562776.78 356979.51,4563492.5 356415.57,4563861.5 356527.65,4563145.01 356290.62,4561991.92 356368.46,4561168.84 355854.5,4560208.66 355791.59,4559890.4 354951.77,4560060.51 354488.4,4560491.41 354554.05,4560726.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17681790.21048]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[835]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[846]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43144]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Secuita, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Secuita, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Secuita, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Secuita, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="835">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348364.95,4562032.98 348688.8,4562569.51 348293.28,4562786.06 347924.67,4562083.33 347271.02,4562284.45 347412.85,4562781.06 347172.43,4562852.34 347485.2,4564148.26 347348.27,4564312.3 347539.77,4565110.62 346972.18,4565401.35 347097.45,4565618.94 347546.47,4565394.87 348164.86,4566322.6 348862.51,4565364.42 348689.55,4565155.34 348940.93,4564690.1 349603.57,4565653.32 350527.92,4564704.93 350854.06,4564422.37 350606.88,4563338.79 351101.782,4563237.168 351023.657,4562955.918 349784.83,4563324.55 349510.99,4562833.02 349269.15,4562920.45 348935.85,4562566.15 348675.1,4562019.21 348364.95,4562032.98</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9227393.71149]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[836]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[847]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43166]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilallonga del Camp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilallonga del Camp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilallonga del Camp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilallonga del Camp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="836">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">277268.26,4559434.54 278404.91,4559067.26 278989,4559091 279150,4559370 278990,4559740 279148.656,4559834.823 279250.219,4560366.073 279552,4560635 279492.406,4561389.511 279605,4561958 279828.344,4561920.761 279968.969,4561717.636 280109,4561828 279976.781,4562295.761 279701,4562607 279820.531,4562748.886 280184,4562733 280508.031,4562928.573 280886.7,4563516.02 281218.969,4563647.323 281473.02,4563905.07 281839,4564059 281726.781,4564280.136 281508,4564413 281284,4564275 281203.344,4565014.511 281384,4565169 281640.844,4565123.886 281723,4565241 281703.344,4565420.761 281445.531,4565459.823 281429.906,4565803.573 281162.3,4565954.79 282320.13,4566229.39 284143.16,4561336.5 284800,4561473 285371.88,4560513.25 285559.47,4560332.37 285748.86,4560015.9 286353.02,4559344.26 286907.41,4558665.03 286892.17,4558194.17 287466.83,4557412.64 286924.68,4557328.9 285751.4,4556202.27 285330.12,4555654.98 285021.95,4555000.83 283706.2,4554378.2 283169.83,4553560.41 281607.35,4553763.71 280136.12,4554699.46 279827.95,4554993.63 278179.34,4555273.92 277204.07,4555008.74 276683.19,4556073.49 277205.04,4557929.94 277054.69,4559016.89 277268.26,4559434.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[68322553.13578]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[837]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[848]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43175]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilalba dels Arcs]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilalba dels Arcs]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilalba dels Arcs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilalba dels Arcs]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="837">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">384086.11,4561092.04 383368.41,4560810.69 383199.22,4560779.75 380955.4,4560727.18 380106.21,4560623.45 379446.94,4561509.8 379251.79,4562039.58 379220.77,4562704.63 379400.6,4563384.11 379850.91,4564137.51 380692.71,4563956.06 380496.88,4564926.3 381071.88,4565647.99 381965.32,4565376.56 382212.22,4565874.97 382855.23,4566000.22 383634.13,4565549.02 384017.19,4565136.13 384566.94,4564671.77 384048.46,4563285.39 383600.29,4561750.29 383956.31,4561377.7 384086.11,4561092.04</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[20511430.52915]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[838]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[849]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43037]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Calafell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Calafell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Calafell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Calafell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="838">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">384566.94,4564671.77 385295.08,4564721.86 385442.23,4565207.81 385607.27,4565552.07 386184.25,4565974.2 386642.79,4565193.82 386452.43,4564265.76 386685.15,4563888.19 387135.62,4562885.76 386703.68,4563043.4 386622.71,4563383.81 386210.76,4563389.76 386160.1,4562604.49 386520.04,4561514.57 386193.38,4561345.8 385145.66,4561157.13 385071.19,4561206.75 384812.99,4561080.57 384594.5,4561167.05 384296.59,4561008.13 384086.11,4561092.04 383956.31,4561377.7 383600.29,4561750.29 384048.46,4563285.39 384566.94,4564671.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9673733.7434]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[839]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[850]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43051]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[12]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cunit]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cunit]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cunit]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cunit]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="839">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">351911.63,4564612.73 351500.48,4564760.43 351378.05,4564224.88 350854.06,4564422.37 350527.92,4564704.93 349603.57,4565653.32 349582.74,4565728.15 350081.71,4565903.55 351720.67,4565664.45 351911.63,4564612.73</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[2226234.0637]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[840]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[851]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43134]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rourell, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rourell, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rourell, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rourell, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="840">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354554.05,4560726.61 354082.65,4560538.38 353640.845,4559514.512 353269.02,4559220.79 353076.05,4559055.75 352617.407,4559264.512 352000.91,4559320.3 351775.33,4561437.73 351037.72,4561316.24 350484.52,4561755.03 351866.35,4562014.49 352040.03,4563094.3 352963.58,4563101.31 354136.31,4562586.61 354554.05,4560726.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">349603.57,4565653.32 348940.93,4564690.1 348689.55,4565155.34 348862.51,4565364.42 349197.36,4565747.13 349351.782,4565854.356 349582.74,4565728.15 349603.57,4565653.32</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347200.49,4562147.47 347841.73,4561742.92 346820.47,4562060.86 346911.59,4562312.94 347200.49,4562147.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">350803.65,4560507.51 351108.24,4560419.77 351119.32,4560164.76 350647.05,4560229.68 350803.65,4560507.51</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[9613691.40273]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[841]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[852]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43103]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Perafort]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Perafort]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Perafort]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Perafort]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="841">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">299244.64,4560784.46 299632.32,4559938.26 300029.66,4559221.42 300088.84,4558218.77 299452.95,4557545.98 298282.69,4557315.72 297458.52,4556789.05 297039.281,4556553.574 296636.87,4555965.84 295853.58,4555243.02 295590.86,4555099.06 295617.5,4555489.62 295086.156,4555412.949 294777.69,4555192.26 294646,4554993.28 293611.96,4555330.2 292522.18,4555846.17 291366.05,4556690.02 290248.93,4557065.64 289664.28,4557436.386 289347.99,4558040.93 289682.35,4558613.8 289922.85,4559181.17 290208.59,4559555.76 290088.94,4560451.26 290554.98,4561093.25 290184.43,4563460 290092.78,4563674.51 290244.01,4563894.98 291463.66,4564094.59 293886.46,4564239.77 295145.86,4564640.82 295213.25,4565132.9 295234.28,4565688.19 296950.06,4565497.63 297408.33,4563131.61 297847.17,4562391.29 297370.74,4561831.37 298443.93,4561081.24 299244.64,4560784.46</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[72464071.88663]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[842]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[853]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43019]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Asco]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Asco]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Asc¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Asc¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="842">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">314778.26,4562361.99 314679.907,4561647.324 315023.657,4561287.949 314711.157,4560920.762 314827.25,4560630.06 314226.781,4560662.949 313838.65,4560463.56 313807.45,4560428.26 313152.37,4560203.34 312651.29,4560242.36 312128.91,4560503.07 311336.54,4560375.12 311194.23,4560690.04 311022.19,4560723.5 311232.05,4561147.98 311147.95,4561400.45 311517.88,4561404.06 311890.844,4561858.262 311884.78,4562089.1 311883.032,4562858.262 311987.43,4563051.22 312211.157,4563178.574 312191.66,4564209.66 312403.44,4565261.69 312527.99,4565158.84 312854.61,4565196.21 313346.01,4565524.26 313878.23,4564678.99 313929.59,4564460.48 314297.094,4564162.949 314649.66,4564116.23 315203.344,4564084.824 315874.44,4563681.38 313808.44,4562543.89 314181.39,4562318.73 314778.26,4562361.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13226489.81704]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[843]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[854]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43069]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gratallops]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gratallops]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gratallops]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gratallops]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="843">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362976.43,4560739.79 362092.57,4559921.2 360937.84,4559485.44 361152.1,4560716.54 360776.15,4561312.35 360634.61,4561845.81 359828.99,4562379.36 360100.45,4562499.27 361028.53,4563279.06 360856.84,4563627.59 360945.72,4564065.36 361059.86,4564128.02 361242.3,4564579.72 361492.11,4564892.16 361844.28,4564806.7 362052.89,4565200.56 362963.36,4565248.25 365162.81,4564694.06 365639.02,4563011.41 365473.14,4562832.01 365031.63,4562359.57 364328.42,4562098.05 363156.21,4560859.5 362976.43,4560739.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18504391.0753]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[844]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[855]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43164]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vespella de Gaia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masos de Vespella, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vespella de Gai…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Masos de Vespella, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="844">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">354136.31,4562586.61 352963.58,4563101.31 352040.03,4563094.3 351902.07,4564193.64 351905.32,4564496.59 352405.07,4564501.6 352820.47,4565070.49 353657.95,4564094.84 354082.91,4563096.55 354136.31,4562586.61</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3069427.52665]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[845]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[856]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43066]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[01]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Garidells, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Garidells, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Garidells, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Garidells, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="845">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">308182.76,4560627.72 308834.6,4561315.01 309166.11,4561936.42 308881.31,4562626.5 309308.33,4563067.89 310406.65,4563204.19 310925.82,4564350 311025.46,4564966.79 311396.23,4564191 312191.66,4564209.66 312211.157,4563178.574 311987.43,4563051.22 311883.032,4562858.262 311884.78,4562089.1 311890.844,4561858.262 311517.88,4561404.06 311147.95,4561400.45 311074.41,4561547.9 310562.99,4562193.73 310230.85,4562489.28 310099.65,4561684.71 308182.76,4560627.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6269261.46834]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[846]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[857]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43072]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Lloar, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Lloar, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Lloar, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Lloar, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="846">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">322278.13,4561456.8 321588.47,4561011 321142.55,4560533.8 320632.11,4560118.77 320441.85,4560714.99 320012.56,4561046.85 319371.08,4560745.9 318997.07,4561046.04 318520.81,4561279.44 317860.71,4561480.75 316865.67,4561315.03 316374.1,4562017.85 315396.47,4562194.46 314778.26,4562361.99 314181.39,4562318.73 313808.44,4562543.89 315874.44,4563681.38 316175.8,4563894.25 318430.8,4564551.42 318546.43,4564527.76 319095.67,4564756.3 321186.06,4564198.96 322695.75,4564410.81 324374.99,4564966.18 325579.58,4564862.5 325834.26,4564787.06 325885.1,4563519.85 325377.29,4563018.95 322668.09,4562680.05 322192.97,4562570.8 322129.87,4562067.71 322278.13,4561456.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[28572926.03285]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[847]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[858]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43114]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Porrera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Porrera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Porrera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Porrera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="847">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340041.37,4564887.81 341497,4563483 342249.16,4562469.16 342007.02,4561769.94 342472.53,4560646.85 341844.88,4560021.78 341661.16,4560496.03 341549.25,4561397.76 341357.53,4561223.62 340981.87,4562070.2 340547.61,4562207.45 339852.81,4563094.89 339211.46,4563403.32 338753.41,4563884.48 339633.79,4564585.12 339960.71,4564561.59 340041.37,4564887.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6227559.77455]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[848]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[859]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43011]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Almoster]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Almoster]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Almoster]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Almoster]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="848">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">364460.54,4559397.75 364397.92,4559531.45 364986.58,4560350 364832.48,4561385.93 364990.34,4561698.03 365639.63,4562535.9 365473.14,4562832.01 365639.02,4563011.41 366002.08,4563053.49 366583.23,4563786.19 367412.32,4563665.66 367344.25,4563541.32 366941,4562358.34 367229.13,4561835.29 367353.68,4560862.33 367744.49,4559495.52 367940.8,4558350.4 367906.61,4558101.91 366303.75,4557850.9 365540.74,4558841.7 364866.67,4559386.79 364460.54,4559397.75</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12303839.91925]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[849]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[860]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43111]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pobla de Montornes, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pobla de Montornes, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pobla de MontornŠs, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pobla de MontornŠs, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="849">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">369226.08,4557354.44 368515.08,4558087.56 367940.8,4558350.4 367744.49,4559495.52 367353.68,4560862.33 367229.13,4561835.29 366941,4562358.34 367344.25,4563541.32 367412.32,4563665.66 368148.9,4563626.91 368994.5,4562642.32 368611.18,4561795.28 368512.63,4561823.97 368756.32,4560989.49 368437.58,4560407.78 368845.91,4559693.42 369661.87,4559650.35 370085.97,4559506.45 370320.33,4559308.23 370766.6,4558684.89 370637.53,4558649.68 370848.34,4558227.5 369226.08,4557354.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10288930.2794]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[850]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[861]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43050]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Creixell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Creixell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Creixell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Creixell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="850">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">338830.11,4561023.59 339004,4561208.49 338849.04,4563015.83 339211.46,4563403.32 339852.81,4563094.89 340547.61,4562207.45 340981.87,4562070.2 341357.53,4561223.62 341275.26,4560459.8 340663.31,4560127.45 340478.26,4560235.51 340106.66,4560263.4 339634.72,4560772.14 339358.09,4560980.99 338830.11,4561023.59</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5112071.53995]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[851]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[862]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43042]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Castellvell del Camp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Castellvell del Camp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Castellvell del Camp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Castellvell del Camp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="851">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">373930.44,4559305.16 372975.37,4558922.63 370848.34,4558227.5 370637.53,4558649.68 370766.6,4558684.89 370320.33,4559308.23 370085.97,4559506.45 369661.87,4559650.35 368845.91,4559693.42 368437.58,4560407.78 368756.32,4560989.49 368512.63,4561823.97 368611.18,4561795.28 368994.5,4562642.32 369450.66,4562636.45 370461.45,4562811.76 372363.1,4563272.52 372461.47,4562351.07 373103.31,4560379.61 373840.67,4559506.89 373930.44,4559305.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16755938.97175]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[852]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[863]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43131]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Roda de Bara]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Roda de Bara]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Roda de Bar…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Roda de Bar…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="852">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">336166.13,4560319.39 335483.28,4560257.93 335113.59,4560635.98 334375.44,4561765.75 334376.8,4562585.13 333743.36,4562896.75 333859.12,4563009.58 335202.87,4562773.91 335714.68,4561931.12 336382.47,4561146.41 336368.13,4560928.82 336166.13,4560319.39</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[3336277.48665]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[853]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[864]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43081]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Maspujols]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Maspujols]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Maspujols]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Maspujols]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="853">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">335483.28,4560257.93 334102.16,4557412.73 333899.34,4559098.92 333133.3,4559416.24 332061.64,4560828.38 332284.27,4561364.02 332938.19,4562307.34 333337.77,4562714.43 333743.36,4562896.75 334376.8,4562585.13 334375.44,4561765.75 335113.59,4560635.98 335483.28,4560257.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8770520.563]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[854]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[865]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43031]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Borges del Camp, les]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Borges del Camp, les]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Borges del Camp, les]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Borges del Camp, les]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="854">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">350484.52,4561755.03 349869.01,4561468.27 349303.93,4561575.3 349157.12,4561972.29 348675.1,4562019.21 348935.85,4562566.15 349269.15,4562920.45 349510.99,4562833.02 349784.83,4563324.55 351023.657,4562955.918 351101.782,4563237.168 350606.88,4563338.79 350854.06,4564422.37 351378.05,4564224.88 351500.48,4564760.43 351911.63,4564612.73 351905.32,4564496.59 351902.07,4564193.64 352040.03,4563094.3 351866.35,4562014.49 350484.52,4561755.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348364.95,4562032.98 347924.67,4562083.33 348293.28,4562786.06 348688.8,4562569.51 348364.95,4562032.98</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347200.49,4562147.47 346911.59,4562312.94 347172.43,4562852.34 347412.85,4562781.06 347271.02,4562284.45 347200.49,4562147.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[6091172.49705]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[855]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[866]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43095]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Morell, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Morell, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Morell, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Morell, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="855">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">364092.5,4559188.97 363037.51,4559803.44 362976.43,4560739.79 363156.21,4560859.5 364328.42,4562098.05 365031.63,4562359.57 365473.14,4562832.01 365639.63,4562535.9 364990.34,4561698.03 364832.48,4561385.93 364986.58,4560350 364397.92,4559531.45 364460.54,4559397.75 364092.5,4559188.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4329593.9526]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[856]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[867]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43097]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Nou de Gaia, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Nou de Gaia, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Nou de Gai…, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Nou de Gai…, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="856">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309931.27,4558740.72 309900.28,4558536.07 308960.74,4557383.62 307696.3,4556666.82 306912,4556382 306871.05,4556612.28 306297.26,4557897.71 305694.25,4558739.75 305392.5,4559452.2 305317.48,4560348.57 304484.97,4561484.89 303757.08,4562261.7 304472.15,4562617.02 304900.96,4562262.25 306851.52,4561928.22 307583.63,4560599.88 308182.76,4560627.72 310099.65,4561684.71 310230.85,4562489.28 310562.99,4562193.73 311074.41,4561547.9 311147.95,4561400.45 311232.05,4561147.98 311022.19,4560723.5 311194.23,4560690.04 311336.54,4560375.12 310967.31,4560105.03 309931.27,4558740.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22453182.08964]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[857]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[868]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43085]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Molar, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Molar, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Molar, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Molar, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="857">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">332061.64,4560828.38 332111.41,4560532.98 332147.97,4558919.78 331895.41,4558697.68 331702.72,4558293.03 331350.89,4557182.63 330589.35,4557854.58 329847.92,4558414.16 329209.36,4558456.74 328371.87,4558609.45 327657.79,4559050.08 326959.11,4559665.81 326720.17,4560562.69 325856.46,4561554.68 326214.05,4562280.36 326705.89,4562485.75 327195.48,4562187.81 327211.27,4562393.21 328029.12,4561903.41 328694.68,4561903.42 329150.43,4561771.37 329459.52,4562076.08 330033.8,4561920.8 330290.63,4562127 331444.2,4561470.8 332061.64,4560828.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19199850.41554]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[858]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[869]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43128]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riudecols]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riudecols]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riudecols]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riudecols]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="858">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">312246.97,4557061.1 312817.02,4557283.91 313231.05,4557988.35 313375.08,4558789.03 314050.4,4558955.47 314314.64,4559335.62 313807.45,4560428.26 313838.65,4560463.56 314226.781,4560662.949 314827.25,4560630.06 314711.157,4560920.762 315023.657,4561287.949 314679.907,4561647.324 314778.26,4562361.99 315396.47,4562194.46 316374.1,4562017.85 316865.67,4561315.03 317860.71,4561480.75 318520.81,4561279.44 318997.07,4561046.04 319371.08,4560745.9 320012.56,4561046.85 320441.85,4560714.99 320632.11,4560118.77 320635.36,4559915.42 320823.33,4559298.38 320854.03,4558816.02 320210.7,4558207.31 319406.57,4557518.25 319158.74,4557210.97 318473.49,4556047.56 316705.36,4556959.31 315914.15,4557232.12 315451.48,4557189.17 314785.58,4557045.38 314282.02,4556523.16 313703.23,4556482.85 312139.44,4556555.27 312246.97,4557061.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31298602.98265]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[859]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[870]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43055]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Falset]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Falset]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Falset]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Falset]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="859">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">350484.52,4561755.03 351037.72,4561316.24 351775.33,4561437.73 352000.91,4559320.3 350194.66,4559688.87 350063.9,4560101.78 349645.32,4560123.33 349146.96,4560289.21 348742.89,4561024.84 347841.73,4561742.92 347200.49,4562147.47 347271.02,4562284.45 347924.67,4562083.33 348364.95,4562032.98 348675.1,4562019.21 349157.12,4561972.29 349303.93,4561575.3 349869.01,4561468.27 350484.52,4561755.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>
+<gml:innerBoundaryIs>
+<gml:LinearRing srsName="EPSG:23031">
+<gml:coordinates cs="," decimal="." ts=" ">350803.65,4560507.51 350647.05,4560229.68 351119.32,4560164.76 351108.24,4560419.77 350803.65,4560507.51</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6033020.94665]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[860]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[871]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43109]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pobla de Mafumet, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pobla de Mafumet, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pobla de Mafumet, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pobla de Mafumet, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="860">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">308048.67,4554462.02 308177.66,4553983.77 308463.03,4553594.04 308014.63,4553218.91 306811.62,4553141.41 306098.56,4553685.03 305322.34,4553820.02 304999.11,4553756.16 304302.69,4553837.85 303111.96,4554220.19 302797.094,4554018.418 301907.45,4553937.37 301505.35,4554763.4 301423.48,4554785.88 300491.9,4555626.52 300072.12,4555905.19 299349.54,4555954.44 298800.94,4555317.79 298257.3,4555237.29 297435.43,4555789.15 297376.84,4556403.88 297458.52,4556789.05 298282.69,4557315.72 299452.95,4557545.98 300088.84,4558218.77 300029.66,4559221.42 299632.32,4559938.26 299244.64,4560784.46 300220.9,4561485.14 302528.07,4561503.66 303319.25,4561914.64 303757.08,4562261.7 304484.97,4561484.89 305317.48,4560348.57 305392.5,4559452.2 305694.25,4558739.75 306297.26,4557897.71 306871.05,4556612.28 306912,4556382 306586.41,4556391.24 306471.6,4556234.17 306609.67,4555796.45 306883.82,4555602.33 307064.32,4555316.34 307442.8,4555292.6 307577.57,4554763.44 308048.67,4554462.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52641864.05513]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[861]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[872]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43065]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Garcia]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Garcia]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Garcia]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Garcia]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="861">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">352189.56,4558598.53 352136.88,4557108.61 351432.73,4556369.24 351142.78,4556764.42 350447.47,4556027.58 349630.24,4555269.19 349307.43,4555495.89 348737.37,4555021.88 348289.56,4555162.38 347435.83,4555710.84 347005.82,4556640.68 346294.12,4557121.96 345791.34,4557239.74 344678.11,4559120.84 344393.82,4559540.81 345142.19,4560153.41 345378.76,4560557.89 345624.68,4560636.2 346820.47,4562060.86 347841.73,4561742.92 348742.89,4561024.84 349146.96,4560289.21 349645.32,4560123.33 350063.9,4560101.78 350194.66,4559688.87 352000.91,4559320.3 352189.56,4558598.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31480467.7323]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[862]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[873]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43047]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Constanti]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Constanti]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Constant¡]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Constant¡]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="862">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340688.23,4553311.95 339834.66,4554788.58 339432.72,4555281.2 339664.43,4556260.32 337505.11,4558623.77 337286.17,4559574.46 337171.28,4560315.76 338094.06,4560634.35 338830.11,4561023.59 339358.09,4560980.99 339634.72,4560772.14 340106.66,4560263.4 340478.26,4560235.51 340663.31,4560127.45 341275.26,4560459.8 341357.53,4561223.62 341549.25,4561397.76 341661.16,4560496.03 341844.88,4560021.78 342472.53,4560646.85 342959.07,4559832.92 343381.19,4559625.74 343083.71,4560429.25 342811.62,4560717.76 344206.8,4561685.46 345378.76,4560557.89 345142.19,4560153.41 344393.82,4559540.81 344678.11,4559120.84 345791.34,4557239.74 346294.12,4557121.96 347005.82,4556640.68 347435.83,4555710.84 348289.56,4555162.38 348106.34,4554813.83 347053.2,4555036.26 346619.55,4555444.66 347125.22,4555577.012 347129.72,4555849.41 346153.11,4555944.21 345883.032,4555366.075 346233.28,4554901.34 346375.22,4555131.7 346648.657,4554827.012 346861.25,4554022.63 346319.87,4553550.68 346773.657,4553096.543 346957.01,4552639.18 346017.63,4552658.96 345024.4,4554167.39 344385.8,4554392.84 343455.16,4555026.81 342528.82,4555137.16 342359.595,4554983.262 342217.14,4554390.23 342609.98,4554138.1 342789.282,4553545.762 342742.407,4553069.2 342922.095,4552623.887 342846.16,4552142.54 342575.89,4551999.06 341573.98,4552363.86 341545.42,4552502.69 341656.47,4552577.012 341261.62,4553067.16 340688.23,4553311.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52141452.27405]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[863]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[874]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43123]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Reus]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Reus]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Reus]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Reus]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="863">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">326016.24,4556486.41 325251.21,4557355.54 324530.24,4557896.09 324131.37,4558013.46 323836.18,4558223.75 324377.66,4559386.31 324110.6,4559934.78 324214.88,4560685.06 324537.75,4561022 324670.86,4560924.94 325090.01,4560967.18 325856.46,4561554.68 326720.17,4560562.69 326959.11,4559665.81 327657.79,4559050.08 328371.87,4558609.45 327546.48,4556786.17 327312.21,4556634.85 326067.78,4556204.09 326016.24,4556486.41</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[13654851.67506]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[864]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[875]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43053]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Duesaigues]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Duesaigues]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Duesaig�?es]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Duesaig�?es]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="864">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">318209.63,4554688.96 317678.94,4554453.41 318473.49,4556047.56 319158.74,4557210.97 319406.57,4557518.25 320210.7,4558207.31 320854.03,4558816.02 320823.33,4559298.38 320635.36,4559915.42 320632.11,4560118.77 321142.55,4560533.8 321588.47,4561011 322278.13,4561456.8 323424.35,4561159.68 324537.75,4561022 324214.88,4560685.06 324110.6,4559934.78 324377.66,4559386.31 323836.18,4558223.75 323081.12,4556839.62 322906.84,4555379.28 322202.88,4554897.26 321704.26,4554627.54 321318.541,4554947.707 320646.666,4554869.582 320284.61,4554705.5 318901,4555085 318209.63,4554688.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[24387820.35573]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[865]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[876]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43115]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pradell de la Teixeta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pradell de la Teixeta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pradell de la Teixeta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pradell de la Teixeta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="865">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">278188.26,4547492.92 277239.77,4547037.08 276714.16,4547078.6 276301.35,4547402.17 273285.04,4548635.66 272457.02,4549162.2 271908.6,4549458.71 270612.62,4550595.2 269530.28,4550632.99 268283.88,4550371.76 267504.14,4550602.43 266708.35,4551026.87 266524.5,4550980.56 266213,4551164 266195.531,4551307.48 266398.656,4551409.042 266686,4551488 266758.031,4551729.355 266609,4552065 266086.156,4552127.792 265437.718,4552010.605 265104.63,4552070.49 264976.781,4552307.48 265004.35,4554451.65 265388.58,4554675.17 265704,4555788 265132,4556513 265156.468,4556752.792 265371,4556946 266453.343,4557143.417 266647.34,4557323.1 266656.468,4557463.729 266492.406,4557580.917 266130.46,4557810.11 266211.156,4557877.792 266726.781,4557737.167 268098.27,4557066.31 268476.781,4556994.98 268888,4557026.63 269211.156,4557284.042 269361.11,4557702.21 269375.219,4558080.917 269689.22,4558386.76 269711.156,4558791.854 269557.37,4559083.07 269640.844,4559229.355 269883.031,4559198.105 270693.66,4559067.96 271273.656,4559104.354 272007.27,4559443.57 273794.56,4560686.22 274630,4561020 275722.62,4561039.95 275897.9,4560702.15 277270.12,4560131.69 277268.26,4559434.54 277054.69,4559016.89 277205.04,4557929.94 276683.19,4556073.49 277204.07,4555008.74 278179.34,4555273.92 279827.95,4554993.63 280136.12,4554699.46 280118.76,4552045.97 278365.2,4550202 278183.97,4549702.45 278442.07,4549230.94 278486.24,4548902.98 278124.05,4548535.52 278188.26,4547492.92</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[128172240.56493]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[866]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[877]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43022]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Batea]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Batea]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Batea]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Batea]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="866">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">334251.49,4555671.45 332530.25,4555428.78 332329.97,4554734.7 331348.67,4554296.75 330638.45,4555767.58 331227.23,4556387.34 331478.6,4557031.2 331350.89,4557182.63 331702.72,4558293.03 331895.41,4558697.68 332147.97,4558919.78 332111.41,4560532.98 332061.64,4560828.38 333133.3,4559416.24 333899.34,4559098.92 334102.16,4557412.73 334051.69,4556417.43 334429.907,4555850.45 334251.49,4555671.45</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12034928.2104]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[867]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[878]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43033]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Botarell]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Botarell]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Botarell]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Botarell]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="867">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355074.26,4558000.23 355527.8,4559294.7 355780.8,4559700.16 355791.59,4559890.4 355854.5,4560208.66 356368.46,4561168.84 356290.62,4561991.92 356527.65,4563145.01 356415.57,4563861.5 356979.51,4563492.5 357110.06,4562776.78 357564.62,4563606.78 358574.69,4563072.67 359198.97,4562718.97 359558.24,4562565.8 359828.99,4562379.36 360634.61,4561845.81 360776.15,4561312.35 361152.1,4560716.54 360937.84,4559485.44 359919.1,4558464.01 359260.72,4557731.26 359050.12,4557140.91 358690,4557091 358578.345,4557373.887 358588.67,4557924.71 358271,4558062 358088.88,4558677.41 357883.14,4558805.71 357082.23,4557660.49 356963.99,4557269.98 356454.9,4556736.68 355953.345,4556709.825 355417.79,4556947.58 355133.032,4557272.325 355074.26,4558000.23</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">362976.43,4560739.79 363037.51,4559803.44 362092.57,4559921.2 362976.43,4560739.79</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[26062790.41717]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[868]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[879]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43043]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Catllar, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Catllar, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Catllar, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Catllar, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="868">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">355074.26,4558000.23 353953.53,4558055.67 353804.32,4557929.75 353218.97,4557991.075 353062.64,4558102.47 352866.08,4558314.47 353034.57,4558514.81 353179.907,4558358.262 353305.55,4558468.74 353133.032,4558741.075 352964.34,4558834.57 352500.87,4558861.81 352527.77,4558283.91 352189.56,4558598.53 352000.91,4559320.3 352617.407,4559264.512 353076.05,4559055.75 353269.02,4559220.79 353640.845,4559514.512 354082.65,4560538.38 354554.05,4560726.61 354488.4,4560491.41 354951.77,4560060.51 355791.59,4559890.4 355780.8,4559700.16 355527.8,4559294.7 355074.26,4558000.23</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5228498.34189]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[869]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[880]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43100]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pallaresos, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pallaresos, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pallaresos, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pallaresos, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="869">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313807.45,4560428.26 314314.64,4559335.62 314050.4,4558955.47 313375.08,4558789.03 313231.05,4557988.35 312817.02,4557283.91 312246.97,4557061.1 310873.2,4558054.01 310339.3,4558516.86 309931.27,4558740.72 310967.31,4560105.03 311336.54,4560375.12 312128.91,4560503.07 312651.29,4560242.36 313152.37,4560203.34 313807.45,4560428.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8932239.6215]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[870]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[881]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43023]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellmunt del Priorat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellmunt del Priorat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellmunt del Priorat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellmunt del Priorat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="870">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340688.23,4553311.95 340079.11,4552740.13 340088.67,4552342 339109.26,4551906.96 338062.85,4551616.17 335395.46,4555010.36 334412.62,4554398.18 334251.49,4555671.45 334429.907,4555850.45 334051.69,4556417.43 334102.16,4557412.73 335483.28,4560257.93 336166.13,4560319.39 337171.28,4560315.76 337286.17,4559574.46 337505.11,4558623.77 339664.43,4556260.32 339432.72,4555281.2 339834.66,4554788.58 340688.23,4553311.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[31988584.74795]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[871]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[882]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43129]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riudoms]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riudoms]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riudoms]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riudoms]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="871">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">360937.84,4559485.44 362092.57,4559921.2 363037.51,4559803.44 364092.5,4559188.97 363924.2,4558428.17 364045.54,4558249.02 363582.43,4557630.42 363420.93,4557022.74 362813.01,4556469.29 362260.5,4557200.43 361347.96,4557278.29 360211.67,4557737.95 359919.1,4558464.01 360937.84,4559485.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8969367.50575]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[872]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[883]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43126]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riera de Gaia, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riera de Gaia, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riera de Gai…, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riera de Gai…, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="872">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">363656.71,4555035.5 363737.58,4555566.42 362555,4555858 362813.01,4556469.29 363420.93,4557022.74 363582.43,4557630.42 364045.54,4558249.02 363924.2,4558428.17 364092.5,4559188.97 364460.54,4559397.75 364866.67,4559386.79 365540.74,4558841.7 365294.95,4558163.21 365017.09,4557641.43 364801.89,4556623.73 364594.92,4555846.85 364953.54,4555733.75 364969.9,4554877.5 364622.15,4554933.5 364481.906,4555111.594 363656.71,4555035.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6529567.33598]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[873]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[884]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43012]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Altafulla]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Altafulla]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Altafulla]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Altafulla]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="873">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">348289.56,4555162.38 348737.37,4555021.88 349307.43,4555495.89 349630.24,4555269.19 350447.47,4556027.58 351142.78,4556764.42 351432.73,4556369.24 352136.88,4557108.61 352189.56,4558598.53 352527.77,4558283.91 352500.87,4558861.81 352964.34,4558834.57 353133.032,4558741.075 353305.55,4558468.74 353179.907,4558358.262 353034.57,4558514.81 352866.08,4558314.47 353062.64,4558102.47 353218.97,4557991.075 353804.32,4557929.75 353953.53,4558055.67 355074.26,4558000.23 355133.032,4557272.325 355417.79,4556947.58 355953.345,4556709.825 356454.9,4556736.68 356963.99,4557269.98 357082.23,4557660.49 357883.14,4558805.71 358088.88,4558677.41 358271,4558062 358588.67,4557924.71 358578.345,4557373.887 358690,4557091 359050.12,4557140.91 359260.72,4557731.26 359919.1,4558464.01 360211.67,4557737.95 361347.96,4557278.29 362260.5,4557200.43 362813.01,4556469.29 362555,4555858 363737.58,4555566.42 363656.71,4555035.5 362504.12,4554589.5 361815.65,4554396.5 361188.156,4554414.719 361011.28,4554143.5 360468.59,4554491 359488.59,4554498 358728.781,4554599.094 357438.86,4554488.72 356766.281,4554277.219 355869.406,4553830.344 355213.84,4553441 355197.531,4553258.469 355010.031,4553136.594 354916.281,4553014.719 354823.93,4552956 354663.156,4552964.719 354528.87,4552889.5 354422.531,4553061.594 354197.51,4553099.33 353788.156,4552930.344 353225.656,4552486.594 353110.031,4552245.969 352941.281,4552008.469 352685.031,4551742.844 351881.905,4551428.781 351135.031,4550166.281 350640.53,4549760 350610.031,4549806.906 351113.156,4550328.781 350913.88,4550561.3 351369.406,4551113.156 351469.406,4551066.281 351713.156,4551510.031 352741.281,4552045.969 352674.6,4552201.93 352738.156,4552267.844 352894.406,4552211.594 353059.52,4552521.21 352569.406,4552642.844 352251.32,4552475.19 352225.656,4552361.594 352428.781,4552249.094 352381.906,4552167.844 352047.531,4552311.594 351985.031,4552224.094 352078.3,4551965.89 351461.25,4551691.77 351319.406,4552186.594 351131.906,4552152.219 351249.24,4551661.79 351234.94,4551504.42 351033.36,4551486.08 350953.781,4551767.843 350790.23,4551748.97 350935.031,4552105.344 350766.48,4552172.85 349670.54,4551251.01 349484.28,4551554.85 348795.05,4550961.46 348093.97,4551776.231 347456.24,4551388.88 347151.27,4551687.43 346729.49,4551405.1 346209.92,4551891.44 346017.63,4552658.96 346957.01,4552639.18 346773.657,4553096.543 346319.87,4553550.68 346861.25,4554022.63 346648.657,4554827.012 346375.22,4555131.7 346233.28,4554901.34 345883.032,4555366.075 346153.11,4555944.21 347129.72,4555849.41 347125.22,4555577.012 346619.55,4555444.66 347053.2,4555036.26 348106.34,4554813.83 348289.56,4555162.38</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[65051857.95137]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[874]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[885]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43148]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tarragona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tarragona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tarragona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tarragona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="874">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">364969.9,4554877.5 364953.54,4555733.75 364594.92,4555846.85 364801.89,4556623.73 365017.09,4557641.43 365294.95,4558163.21 365540.74,4558841.7 366303.75,4557850.9 367906.61,4558101.91 367940.8,4558350.4 368515.08,4558087.56 369226.08,4557354.44 365948.97,4555414.97 365996.61,4555293.57 365663.156,4555019.406 365331.906,4554866.281 364969.9,4554877.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[8803213.44206]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[875]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[886]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43153]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torredembarra]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torredembarra]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torredembarra]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torredembarra]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="875">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">312139.44,4556555.27 311962.56,4555776.55 311720.61,4555403.47 312003.87,4555099.84 312040.29,4554994.58 311205.86,4554454.66 310605.65,4554123.44 309458.83,4554419.1 308048.67,4554462.02 307577.57,4554763.44 307442.8,4555292.6 307064.32,4555316.34 306883.82,4555602.33 306609.67,4555796.45 306471.6,4556234.17 306586.41,4556391.24 306912,4556382 307696.3,4556666.82 308960.74,4557383.62 309900.28,4558536.07 309931.27,4558740.72 310339.3,4558516.86 310873.2,4558054.01 312246.97,4557061.1 312139.44,4556555.27</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15459749.0019]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[876]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[887]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43082]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masroig, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masroig, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Masroig, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Masroig, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="876">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">330638.45,4555767.58 330322.11,4554508.69 330063,4554290 330158.94,4553711.14 329889.43,4554143.59 329677.08,4553263.65 328508.73,4553629.03 328117.407,4553643.418 327593.969,4553940.293 327453.58,4554137.87 327453.344,4554252.793 327956.22,4554089.14 328036.26,4554178.78 327734.594,4554541.856 327212.04,4554760.02 326692.91,4555028.5 326015.04,4555307.26 325633.032,4555018.418 325091.94,4554983.03 324906.96,4555469.26 325239.36,4555677.9 325256.3,4555497.94 325587.39,4555654.1 325806.38,4556143.44 325776.4,4556479.89 326016.24,4556486.41 326067.78,4556204.09 327312.21,4556634.85 327546.48,4556786.17 328371.87,4558609.45 329209.36,4558456.74 329847.92,4558414.16 330589.35,4557854.58 331350.89,4557182.63 331478.6,4557031.2 331227.23,4556387.34 330638.45,4555767.58</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17390033.71885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[877]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[888]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43127]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riudecanyes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riudecanyes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riudecanyes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riudecanyes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="877">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">322906.84,4555379.28 323081.12,4556839.62 323836.18,4558223.75 324131.37,4558013.46 324530.24,4557896.09 325251.21,4557355.54 326016.24,4556486.41 325776.4,4556479.89 325806.38,4556143.44 325587.39,4555654.1 325256.3,4555497.94 325239.36,4555677.9 324906.96,4555469.26 325091.94,4554983.03 324637.18,4553841.03 323475.27,4553073.24 323147.29,4553221.04 322923.37,4553695.56 323116.63,4553952.11 322531.28,4554162.19 322906.84,4555379.28</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9955565.17535]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[878]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[889]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43017]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Argentera, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Argentera, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Argentera, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Argentera, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="878">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">292816.02,4552024.47 292090.51,4551100.96 291592.49,4550225.68 291019.97,4549824.52 290452.95,4549554.04 289895.86,4548991.24 287931.57,4548162.49 287226.04,4548691.04 287374.51,4549622.14 286207.86,4550429.76 285487.51,4551290.58 283332.59,4552245.54 283169.83,4553560.41 283706.2,4554378.2 285021.95,4555000.83 285330.12,4555654.98 285751.4,4556202.27 286924.68,4557328.9 287466.83,4557412.64 288001.61,4557592.59 288550.91,4557345.62 289194.52,4557528.67 289687.718,4556795.761 290024.18,4556463.62 290271.68,4555541.12 291015.25,4554395.38 291124.8,4553840.46 291584.67,4553197.67 292213.84,4552841.91 292376.4,4553112.58 293085.76,4552815.97 293051.32,4552417.96 292816.02,4552024.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[52111268.59096]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[879]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[890]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43048]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Corbera d'Ebre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Corbera d'Ebre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Corbera d'Ebre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Corbera d'Ebre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="879">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">318473.49,4556047.56 317678.94,4554453.41 317948,4553926.29 317941.49,4553249.47 317344.48,4552675.66 316425.17,4553525.59 315657.38,4553977.78 315117.09,4554157.56 314569.2,4554282.89 314412.24,4554653.45 313013.89,4554797.89 312003.87,4555099.84 311720.61,4555403.47 311962.56,4555776.55 312139.44,4556555.27 313703.23,4556482.85 314282.02,4556523.16 314785.58,4557045.38 315451.48,4557189.17 315914.15,4557232.12 316705.36,4556959.31 318473.49,4556047.56</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16133519.74925]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[880]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[891]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43076]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Marca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Marca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mar‡…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mar‡…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="880">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301505.35,4554763.4 301523.657,4554010.605 301656.469,4553291.855 302047.094,4552713.73 302069.79,4552143.35 303013.48,4551108.71 303336.17,4550526.56 303519.73,4548935 303201.79,4548801.59 299608.76,4550152.31 297978.84,4550573.73 295948.54,4550388.19 295513,4550588.47 294039.94,4551140.99 292816.02,4552024.47 293051.32,4552417.96 293085.76,4552815.97 293650.83,4553787.54 294384.8,4554578.78 294646,4554993.28 294777.69,4555192.26 295086.156,4555412.949 295617.5,4555489.62 295590.86,4555099.06 295853.58,4555243.02 296636.87,4555965.84 297039.281,4556553.574 297458.52,4556789.05 297376.84,4556403.88 297435.43,4555789.15 298257.3,4555237.29 298800.94,4555317.79 299349.54,4555954.44 300072.12,4555905.19 300491.9,4555626.52 301423.48,4554785.88 301505.35,4554763.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[45971218.00498]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[881]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[892]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43093]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mora d'Ebre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mora d'Ebre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[M¢ra d'Ebre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[M¢ra d'Ebre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="881">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">334766.56,4553669.11 332548.29,4552564.27 330836.58,4552100.55 330402,4552935 330158.94,4553711.14 330063,4554290 330322.11,4554508.69 330638.45,4555767.58 331348.67,4554296.75 332329.97,4554734.7 332530.25,4555428.78 334251.49,4555671.45 334412.62,4554398.18 334766.56,4553669.11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10388551.7728]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[882]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[893]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43088]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Montbrio del Camp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Montbrio del Camp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Montbri¢ del Camp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Montbri¢ del Camp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="882">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">322531.28,4554162.19 321708.56,4553512.21 321250.35,4553556.49 319822.48,4553510.18 319190.14,4553873.46 318513,4554374 318209.63,4554688.96 318901,4555085 320284.61,4554705.5 320646.666,4554869.582 321318.541,4554947.707 321704.26,4554627.54 322202.88,4554897.26 322906.84,4555379.28 322531.28,4554162.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4906824.44457]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[883]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[894]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43151]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Torre de Fontaubella, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Torre de Fontaubella, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Torre de Fontaubella, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Torre de Fontaubella, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="883">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">324767.54,4550211.47 324682.06,4551050.05 324236,4551248.41 323923.86,4551726.54 323670.14,4552343.46 323475.27,4553073.24 324637.18,4553841.03 325091.94,4554983.03 325633.032,4555018.418 326015.04,4555307.26 326692.91,4555028.5 327212.04,4554760.02 327734.594,4554541.856 328036.26,4554178.78 327956.22,4554089.14 327453.344,4554252.793 327453.58,4554137.87 327593.969,4553940.293 328117.407,4553643.418 328508.73,4553629.03 329677.08,4553263.65 329820,4552332 330233.93,4551787.22 329499.92,4551464.26 328551.31,4552360.43 327859.594,4552604.356 327186.07,4552563.27 326640.844,4551994.981 326364.66,4551273.5 326598.55,4550098.9 325843.45,4549807.78 324767.54,4550211.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[17269062.05229]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[884]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[895]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43167]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vilanova d'Escornalbou]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vilanova d'Escornalbou]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vilanova d'Escornalbou]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vilanova d'Escornalbou]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="884">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">340088.67,4552342 340079.11,4552740.13 340688.23,4553311.95 341261.62,4553067.16 341656.47,4552577.012 341545.42,4552502.69 341573.98,4552363.86 342575.89,4551999.06 342846.16,4552142.54 342922.095,4552623.887 342742.407,4553069.2 342789.282,4553545.762 342609.98,4554138.1 342217.14,4554390.23 342359.595,4554983.262 342528.82,4555137.16 343455.16,4555026.81 344385.8,4554392.84 345024.4,4554167.39 346017.63,4552658.96 346209.92,4551891.44 346729.49,4551405.1 347151.27,4551687.43 347456.24,4551388.88 348093.97,4551776.231 348795.05,4550961.46 348233.5,4550314 347613.156,4549245.968 347191.281,4548141.281 347234.54,4547918.54 346852.51,4547820.32 346707.8,4548112.62 346421.24,4549678.57 346359.595,4549991.075 346093.41,4549852.24 345846.42,4550672.46 344819.39,4550490.43 344899.82,4551044.57 344451.44,4551133.88 343718.11,4551382.77 343484.595,4551873.887 343036.43,4551227.47 342616.47,4551224.42 342125.22,4551162.95 341226.782,4550506.7 340496.88,4550299.34 340176.54,4550786.93 340116.64,4551458.71 340088.67,4552342</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[22051110.48885]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[885]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[896]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43171]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vila-seca]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vila-seca]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vila-seca]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vila-seca]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="885">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313013.89,4554797.89 313366.48,4554416.59 312675.26,4551860.35 312492.16,4551356.46 312032.98,4550792.73 311281.06,4550894.71 311028.77,4551605.23 309971.5,4552501.71 309694,4552934 309489,4552822 308878,4552886 308014.63,4553218.91 308463.03,4553594.04 308177.66,4553983.77 308048.67,4554462.02 309458.83,4554419.1 310605.65,4554123.44 311205.86,4554454.66 312040.29,4554994.58 312003.87,4555099.84 313013.89,4554797.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12216056.99545]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[886]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[897]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43070]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Guiamets, els]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guiamets, els]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Guiamets, els]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Guiamets, els]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="886">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">339109.26,4551906.96 338112.89,4549320.15 337352.9,4548872.81 337588.155,4548364.718 337385.03,4548317.843 336909.29,4548852.16 337235.98,4549020.78 334766.56,4553669.11 334412.62,4554398.18 335395.46,4555010.36 338062.85,4551616.17 339109.26,4551906.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10968781.3403]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[887]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[898]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43178]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vinyols i els Arcs]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vinyols]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vinyols i els Arcs]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vinyols]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="887">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313013.89,4554797.89 314412.24,4554653.45 314569.2,4554282.89 315117.09,4554157.56 315657.38,4553977.78 316425.17,4553525.59 317344.48,4552675.66 317941.49,4553249.47 317948,4553926.29 318266.06,4554055.4 318491.71,4553747.52 318940.49,4552311.9 318242.407,4552037.95 317820.18,4552037.11 317679.907,4552139.512 317510.52,4552043.7 317000.219,4551053.575 317053.73,4550860.57 317265.844,4550912.95 317320.28,4550770 317341.66,4550233.98 317210.08,4549483.23 316594.94,4549058.69 316562.719,4548702.012 316363.83,4548618.71 315867.407,4548616.074 315660.32,4548765.6 315326.52,4549077.9 314629.19,4549287.88 313943.9,4550142.74 312938.2,4550833.36 312675.26,4551860.35 313366.48,4554416.59 313013.89,4554797.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[21883318.25188]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[888]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[899]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43040]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[29]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Capcanes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Capcanes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cap‡anes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cap‡anes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="888">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301505.35,4554763.4 301907.45,4553937.37 302797.094,4554018.418 303111.96,4554220.19 304302.69,4553837.85 304999.11,4553756.16 305322.34,4553820.02 306098.56,4553685.03 306811.62,4553141.41 306274.86,4551397.05 305602,4549989.75 304962.76,4549675.18 303693.15,4549213.47 303519.73,4548935 303336.17,4550526.56 303013.48,4551108.71 302069.79,4552143.35 302047.094,4552713.73 301656.469,4553291.855 301523.657,4554010.605 301505.35,4554763.4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16344375.23321]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[889]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[900]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43094]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mora la Nova]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mora la Nova]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[M¢ra la Nova]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[M¢ra la Nova]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="889">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">282914.49,4543347.16 279769.33,4547445.05 278782.99,4547823.69 278188.26,4547492.92 278124.05,4548535.52 278486.24,4548902.98 278442.07,4549230.94 278183.97,4549702.45 278365.2,4550202 280118.76,4552045.97 280136.12,4554699.46 281607.35,4553763.71 283169.83,4553560.41 283332.59,4552245.54 285487.51,4551290.58 286207.86,4550429.76 287374.51,4549622.14 287226.04,4548691.04 287931.57,4548162.49 289895.86,4548991.24 290196.2,4548536.56 290097.72,4548504.77 288416.46,4547182.96 287843.55,4545950.39 286402.1,4545048.31 285634.09,4544053 285851.87,4543096.53 286106,4542178 285742.405,4542162.948 285406.468,4541936.385 285242.405,4541483.26 284772,4541485 284180,4541839 283549,4542433 282914.49,4543347.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[71230967.38642]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[890]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[901]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43064]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Gandesa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Gandesa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Gandesa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Gandesa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="890">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">321502.25,4550513.05 320303.28,4551580.13 319261.59,4551891.93 318940.49,4552311.9 318491.71,4553747.52 318266.06,4554055.4 317948,4553926.29 317678.94,4554453.41 318209.63,4554688.96 318513,4554374 319190.14,4553873.46 319822.48,4553510.18 321250.35,4553556.49 321708.56,4553512.21 322531.28,4554162.19 323116.63,4553952.11 322923.37,4553695.56 323147.29,4553221.04 323475.27,4553073.24 323670.14,4552343.46 323923.86,4551726.54 324236,4551248.41 324682.06,4551050.05 324767.54,4550211.47 323708.09,4550460.13 323255.05,4550415.22 322618.24,4550722.22 321961.53,4550509.99 321502.25,4550513.05</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14335769.30405]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[891]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[902]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43045]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Colldejou]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Colldejou]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Colldejou]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Colldejou]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="891">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">324767.54,4550211.47 325843.45,4549807.78 326598.55,4550098.9 326364.66,4551273.5 326640.844,4551994.981 327186.07,4552563.27 327859.594,4552604.356 328551.31,4552360.43 329499.92,4551464.26 330233.93,4551787.22 329820,4552332 329677.08,4553263.65 329889.43,4554143.59 330158.94,4553711.14 330402,4552935 330836.58,4552100.55 331422,4551171 331767,4550107 332063,4549033 333978.32,4546666.05 333738.155,4546569.406 333547.53,4546591.281 333091.81,4546352 332333.64,4545685.5 332038.155,4545675.656 331794.405,4545600.656 331419.405,4545653.781 330976.58,4545467 330194.405,4544885.031 329500.78,4544223.5 329194.405,4544124.093 328428.33,4543406 327011.87,4541757.5 326863.155,4541625.656 326706.905,4541391.281 326184.59,4540108 325791.28,4540205.343 325563,4540144 325469.405,4540264.718 325440.13,4541122.92 325367,4541436 324845.98,4542034.07 324843,4542941 324060,4543868 325177.67,4545636.06 325410.24,4546961.58 324989.2,4548153.88 324565.39,4548960.99 324767.54,4550211.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[63713193.98648]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[892]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[903]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43092]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mont-roig del Camp]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mont-roig del Camp]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mont-roig del Camp]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mont-roig del Camp]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="892">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">339109.26,4551906.96 340088.67,4552342 340116.64,4551458.71 340176.54,4550786.93 340496.88,4550299.34 341898.7,4549040.87 342020.89,4548704.19 341052.91,4548453.05 339978.78,4548230.343 339162.28,4547833.5 339050.655,4547805.343 338741.28,4547842.843 338228.78,4548100.5 337813.155,4548070.968 337516.5,4547944 337513.155,4547774.093 337288.155,4547530.343 337260.03,4547545.968 337466.28,4547792.843 337463.155,4548024.093 337263.155,4548049.093 336978.78,4547939.718 337022.53,4547817.843 337128.78,4547780.343 337119.405,4547745.968 337019.405,4547761.593 336888.155,4547889.718 336560.03,4547842.843 336500.655,4547964.718 336325.655,4547964.718 335760.03,4547681.906 335710.03,4547563.156 335617.12,4547598.5 335394.405,4547447.531 335331.905,4547335.031 335166.28,4547353.781 335085.62,4547299 334919.405,4547269.406 334863.155,4547110.031 334685.03,4547147.531 334530.08,4547055.27 334438.155,4546888.156 334241.28,4546866.281 334113.155,4546728.781 333978.32,4546666.05 332063,4549033 331767,4550107 331422,4551171 330836.58,4552100.55 332548.29,4552564.27 334766.56,4553669.11 337235.98,4549020.78 336909.29,4548852.16 337385.03,4548317.843 337588.155,4548364.718 337352.9,4548872.81 338112.89,4549320.15 339109.26,4551906.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35506553.81537]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[893]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[904]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43038]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cambrils]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cambrils]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cambrils]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cambrils]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="893">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301043,4542030 302576.13,4542402.71 302919.71,4544202.88 303706.32,4545964.52 302853.59,4546734.22 302567.97,4547250.12 303154.67,4547693.95 302455.24,4548522.45 302956.61,4548476.9 303201.79,4548801.59 303519.73,4548935 303693.15,4549213.47 304962.76,4549675.18 305602,4549989.75 306274.86,4551397.05 306811.62,4553141.41 308014.63,4553218.91 308878,4552886 309489,4552822 309694,4552934 309971.5,4552501.71 311028.77,4551605.23 311281.06,4550894.71 312032.98,4550792.73 312492.16,4551356.46 312675.26,4551860.35 312938.2,4550833.36 313943.9,4550142.74 314629.19,4549287.88 315326.52,4549077.9 315660.32,4548765.6 315867.407,4548616.074 316363.83,4548618.71 316562.719,4548702.012 316594.94,4549058.69 317210.08,4549483.23 317341.66,4550233.98 317320.28,4550770 317265.844,4550912.95 317053.73,4550860.57 317000.219,4551053.575 317510.52,4552043.7 317679.907,4552139.512 317820.18,4552037.11 318242.407,4552037.95 318940.49,4552311.9 319261.59,4551891.93 320303.28,4551580.13 321502.25,4550513.05 321359.67,4550385.7 321250.219,4549983.262 321274.98,4549510.26 321187.719,4549459.824 321070.532,4549514.512 320902.48,4549891.2 321031.469,4550147.325 321117.7,4550374.28 321031.469,4550561.387 320571.37,4550755.22 320218.969,4550592.637 319961.157,4550014.512 319753.47,4549953.13 319874.65,4549550.28 319786.36,4549243.87 319937.719,4548506.699 319932.6,4547949.22 319570.532,4547467.637 318942.03,4547372.29 318875.219,4547162.949 318367.407,4547194.199 318151.53,4547055.4 317135.58,4547726.9 316650.66,4548162.47 315578.92,4546797.65 315384.08,4546337.21 314789.95,4545542.83 314111.45,4544954.81 313724.75,4544446.6 313948.1,4543974.23 313889.74,4543081.45 313725.33,4542499.15 313096.55,4540766.97 313291.84,4540367.14 313555.57,4540175.37 314465.23,4538147.29 314726.41,4537664.53 315435.45,4535720.01 316546.89,4534868.27 316405.86,4534553.83 314543.84,4534507.12 310925.96,4533885.01 310624.69,4533857.55 309816.4,4534625.15 305631.87,4535289.5 305289.96,4535020.54 304925.97,4535165.12 304567.42,4535487.48 304025.2,4535458.35 303665,4535310 303383,4535520 303188,4536578 303047.3,4537120.9 302872,4537611 302989.99,4537903 302620,4538286 302422,4539545 301998,4540154 301771,4541106.76 301043,4542030</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[210902496.60986]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[894]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[905]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43150]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tivissa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tivissa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tivissa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tivissa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="894">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">292206.08,4548844.1 291385.73,4548844.74 290887.01,4548782.29 290196.2,4548536.56 289895.86,4548991.24 290452.95,4549554.04 291019.97,4549824.52 291592.49,4550225.68 292090.51,4551100.96 292816.02,4552024.47 294039.94,4551140.99 295513,4550588.47 295948.54,4550388.19 297978.84,4550573.73 299608.76,4550152.31 303201.79,4548801.59 302956.61,4548476.9 302455.24,4548522.45 303154.67,4547693.95 302567.97,4547250.12 300599,4547489 300419,4547587 300232.65,4547633.41 299918,4547274 299329.58,4547312.49 298793.52,4547960.8 297783.14,4548219.72 297739.32,4548587.74 297304.6,4549105.5 296410.74,4549398.63 294646.76,4549459.84 293757.49,4549337.58 292206.08,4548844.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23942448.04845]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[895]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[906]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43026]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Benissanet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Benissanet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Benissanet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Benissanet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="895">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">347234.54,4547918.54 347288.156,4547702.218 347155.68,4547460 346941.281,4547345.968 346448,4546685 346275.655,4546677.218 346128.781,4546808.468 345742.21,4546773.5 345575.656,4546811.593 345627.12,4546942 345610.031,4547161.593 345506.906,4547345.968 345347.12,4547444.5 345306.906,4547680.343 345105.46,4547855 344503.78,4547916.281 344522.531,4548135.031 344260.031,4548338.156 344069.406,4548647.531 343520.87,4548810 343235.031,4548814.718 343019.32,4548898.93 342547.531,4548864.718 342020.89,4548704.19 341898.7,4549040.87 340496.88,4550299.34 341226.782,4550506.7 342125.22,4551162.95 342616.47,4551224.42 343036.43,4551227.47 343484.595,4551873.887 343718.11,4551382.77 344451.44,4551133.88 344899.82,4551044.57 344819.39,4550490.43 345846.42,4550672.46 346093.41,4549852.24 346359.595,4549991.075 346421.24,4549678.57 346707.8,4548112.62 346852.51,4547820.32 347234.54,4547918.54</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15006889.68205]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[896]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[907]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43905]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[36]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Salou]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Salou]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Salou]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Salou]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="896">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">276714.16,4547078.6 275940.63,4546404.05 276083.08,4545744.78 275919.85,4544626.69 276248.14,4544417.71 275842.69,4543790.72 275961.79,4543218.79 275552.69,4543178.57 274416.85,4543369.75 273488.26,4543822.92 272399.28,4544425.87 271305.73,4544660.85 271320.531,4544901.229 270964,4545286 270593.968,4545448.104 270256,4545358 269458,4545978 268883.031,4546534.042 268711.156,4546971.542 268577.68,4547170.82 268461.156,4547135.604 268377.99,4546985.94 268390.843,4546612.167 268272.85,4546460.79 268078.343,4546409.042 267445.531,4546549.667 267259,4546702 267187.718,4546924.667 267336.156,4547190.292 267564.7,4547481.28 267562.718,4547666.854 267428.95,4547834.9 267258.031,4547823.104 266968.968,4547721.542 266587.69,4547332.12 266297.093,4547448.104 266224.84,4547703.88 266297.093,4547948.104 266570.531,4548190.292 266878,4548359 267133.031,4548596.542 267159.66,4548776.9 267015.843,4548955.917 266585.39,4549290.94 266291,4550057 266594.84,4550603.71 266524.5,4550980.56 266708.35,4551026.87 267504.14,4550602.43 268283.88,4550371.76 269530.28,4550632.99 270612.62,4550595.2 271908.6,4549458.71 272457.02,4549162.2 273285.04,4548635.66 276301.35,4547402.17 276714.16,4547078.6</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[42847448.83421]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[897]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[908]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43041]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Caseres]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Caseres]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Caseres]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Caseres]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="897">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">324767.54,4550211.47 324565.39,4548960.99 324989.2,4548153.88 325410.24,4546961.58 325177.67,4545636.06 324060,4543868 323187.85,4544136.87 322431,4544250 321813,4544010 321145.86,4544259.38 320847.27,4544071.61 320431.65,4544465.15 319239.16,4544768.59 318726.7,4544929.32 318070.21,4545877.08 318049.03,4546835.27 318151.53,4547055.4 318367.407,4547194.199 318875.219,4547162.949 318942.03,4547372.29 319570.532,4547467.637 319932.6,4547949.22 319937.719,4548506.699 319786.36,4549243.87 319874.65,4549550.28 319753.47,4549953.13 319961.157,4550014.512 320218.969,4550592.637 320571.37,4550755.22 321031.469,4550561.387 321117.7,4550374.28 321031.469,4550147.325 320902.48,4549891.2 321070.532,4549514.512 321187.719,4549459.824 321274.98,4549510.26 321250.219,4549983.262 321359.67,4550385.7 321502.25,4550513.05 321961.53,4550509.99 322618.24,4550722.22 323255.05,4550415.22 323708.09,4550460.13 324767.54,4550211.47</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35874261.7651]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[898]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[909]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43118]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pratdip]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pratdip]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pratdip]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pratdip]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="898">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">298761,4544509 298289.17,4543994.47 297873.03,4543652.6 296869.07,4542192.46 295958.81,4541901.77 295217.23,4542630.19 294959.05,4542719.16 294597.43,4543343.33 294953.25,4543560.92 295689.75,4543895.37 295456.36,4544486.09 295160.95,4544864.84 294744.16,4545482.23 294566.72,4545634.41 293919.38,4545979.85 293953.85,4546997.62 293621.43,4547539.76 292920.25,4547635.52 292384.51,4548073.01 292206.08,4548844.1 293757.49,4549337.58 294646.76,4549459.84 296410.74,4549398.63 297304.6,4549105.5 297739.32,4548587.74 297783.14,4548219.72 298793.52,4547960.8 299329.58,4547312.49 299918,4547274 300232.65,4547633.41 300419,4547587 300449.57,4547309.61 300290.08,4546648.29 299898.01,4546121.99 299968.969,4545678.574 299811.3,4545223.95 298797.094,4545014.511 298627.66,4545095.97 298453.344,4545084.824 298465.08,4544655.63 298761,4544509</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32170599.16132]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[899]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[910]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43084]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Miravet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Miravet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Miravet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Miravet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="899">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">285926.86,4539681.97 285428.23,4540416.54 284772,4541485 285242.405,4541483.26 285406.468,4541936.385 285742.405,4542162.948 286106,4542178 285851.87,4543096.53 285634.09,4544053 286402.1,4545048.31 287843.55,4545950.39 288416.46,4547182.96 290097.72,4548504.77 290196.2,4548536.56 290887.01,4548782.29 291385.73,4548844.74 292206.08,4548844.1 292384.51,4548073.01 292920.25,4547635.52 293621.43,4547539.76 293953.85,4546997.62 293919.38,4545979.85 294566.72,4545634.41 294744.16,4545482.23 295160.95,4544864.84 295456.36,4544486.09 295689.75,4543895.37 294953.25,4543560.92 294597.43,4543343.33 294067.45,4542910.73 292967.53,4542416 291515.48,4541598.27 290567.57,4541399.54 290140.14,4541005.82 289603.84,4540576.52 289144.29,4540119.15 288242.29,4539316.51 287359.593,4539678.573 287023.655,4539498.885 285926.86,4539681.97</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[56985025.79068]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[900]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[911]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43106]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pinell de Brai, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pinell de Brai, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pinell de Brai, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pinell de Brai, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="900">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">319606.86,4533927.77 318739,4534137 317870.84,4534549.43 316405.86,4534553.83 316546.89,4534868.27 315435.45,4535720.01 314726.41,4537664.53 314465.23,4538147.29 313555.57,4540175.37 313291.84,4540367.14 313096.55,4540766.97 313725.33,4542499.15 313889.74,4543081.45 313948.1,4543974.23 313724.75,4544446.6 314111.45,4544954.81 314789.95,4545542.83 315384.08,4546337.21 315578.92,4546797.65 316650.66,4548162.47 317135.58,4547726.9 318151.53,4547055.4 318049.03,4546835.27 318070.21,4545877.08 318726.7,4544929.32 319239.16,4544768.59 320431.65,4544465.15 320847.27,4544071.61 321145.86,4544259.38 321813,4544010 322431,4544250 323187.85,4544136.87 324060,4543868 324843,4542941 324845.98,4542034.07 325367,4541436 325440.13,4541122.92 325469.405,4540264.718 325563,4540144 325791.28,4540205.343 326184.59,4540108 325900.655,4539958.468 326028.78,4539695.968 325722.53,4539539.718 325700.655,4539570.968 325956.905,4539711.593 325844.405,4539933.468 325410.03,4539727.218 325187.5,4539808.5 325000.655,4539789.718 324797.53,4539695.968 324014.45,4538934 323744.405,4538556.905 323395.03,4538433 323088.155,4538153.78 322164.87,4536891 321787.06,4536724 321660.03,4536506.905 321631.905,4536278.78 321303.78,4535860.03 321091.28,4535675.655 320713.155,4535547.53 320150.655,4535283.468 319825.655,4534633.468 319606.86,4533927.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[101616534.61913]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[901]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[912]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43162]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[08]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vandellos i l'Hospitalet de l'Infant]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vandellos]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vandell•s i l'Hospitalet de l'Infant]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vandell•s]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="901">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">279275.08,4539572.16 277146.13,4540853.93 278478.92,4542524.87 277665.39,4542963.44 276170.31,4543009.51 275961.79,4543218.79 275842.69,4543790.72 276248.14,4544417.71 275919.85,4544626.69 276083.08,4545744.78 275940.63,4546404.05 276714.16,4547078.6 277239.77,4547037.08 278188.26,4547492.92 278782.99,4547823.69 279769.33,4547445.05 282914.49,4543347.16 282606.27,4542602.04 281929.905,4542405.135 281512.93,4541999.56 281289.28,4541616.073 281289.9,4541067.75 280533.15,4540447.1 279275.08,4539572.16</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[34548544.03033]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[902]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[913]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43032]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bot]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bot]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bot]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bot]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="902">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301043,4542030 300359.594,4542358.261 300283,4542664 300534,4542699 300703.344,4543248.886 300520,4543374 300258,4543396 300372,4543840 299718.969,4544366.074 299235,4544545 298761,4544509 298465.08,4544655.63 298453.344,4545084.824 298627.66,4545095.97 298797.094,4545014.511 299811.3,4545223.95 299968.969,4545678.574 299898.01,4546121.99 300290.08,4546648.29 300449.57,4547309.61 300419,4547587 300599,4547489 302567.97,4547250.12 302853.59,4546734.22 303706.32,4545964.52 302919.71,4544202.88 302576.13,4542402.71 301043,4542030</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15521098.63745]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[903]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[914]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43067]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ginestar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ginestar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ginestar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ginestar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="903">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">278788.72,4535968.31 278837.55,4535288.61 278355.64,4534603.53 278340.92,4533323.3 278156.468,4533092.635 278211.155,4532514.51 278013.65,4532201.73 278250.218,4531389.51 278075.04,4531038.42 278432.81,4530169.19 277806.23,4529482.81 277821.85,4529026.24 276224.15,4527071.84 275375.06,4526118.18 274913.91,4525276.41 273427.1,4524635.33 272939.42,4524800.45 272656.51,4525671.7 271921.78,4526453.73 271890.843,4526909.042 271541.9,4527525.02 271586.155,4527963.729 272054.71,4528669.36 272000.218,4528979.354 272065.02,4529356.14 272689.54,4530024.69 273203.02,4531241.98 273179.905,4531483.26 272877.67,4531632.66 272554.905,4531787.948 271645.82,4533568.42 271049.26,4535237.27 270599,4535499 270356,4536326 270773.655,4536717.636 270832.48,4536995.4 271242.405,4537053.573 271398.655,4537428.573 271523.655,4537756.698 271620.67,4537948.97 271609.593,4538526.229 271715,4538669 272263.29,4539190.59 272140.843,4539455.917 271821.18,4539541.24 271437.718,4539627.792 271327.01,4540016.57 271406.468,4540530.136 271278,4541210 270664.281,4541772.323 270599,4542148 270453.343,4542303.573 270393.03,4542569.58 270547.093,4542873.886 270845.48,4543068.85 270797.093,4543358.261 270533,4543679 270008.031,4543694.198 269691,4543896 269633.031,4544373.886 269736.82,4544630.22 270015.843,4544741.073 270234.593,4544741.073 270672.093,4544709.823 271113.3,4544630.22 271305.73,4544660.85 272399.28,4544425.87 273488.26,4543822.92 274416.85,4543369.75 275552.69,4543178.57 275961.79,4543218.79 276170.31,4543009.51 277665.39,4542963.44 278478.92,4542524.87 277146.13,4540853.93 279275.08,4539572.16 279221.4,4539395.11 278979.08,4537934.71 279262.72,4536715.73 278788.72,4535968.31</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[118131517.58927]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[904]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[915]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43071]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Horta de Sant Joan]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Horta de Sant Joan]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Horta de Sant Joan]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Horta de Sant Joan]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="904">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">295958.81,4541901.77 296869.07,4542192.46 297873.03,4543652.6 298289.17,4543994.47 298761,4544509 299235,4544545 299718.969,4544366.074 300372,4543840 300258,4543396 300520,4543374 300703.344,4543248.886 300534,4542699 300283,4542664 300359.594,4542358.261 301043,4542030 301771,4541106.76 301998,4540154 302422,4539545 302620,4538286 302989.99,4537903 302872,4537611 303047.3,4537120.9 303188,4536578 303383,4535520 303665,4535310 302628.93,4535273.88 300039.13,4534394.81 298877.5,4534091.02 298586.155,4534463.729 298193.12,4534582.13 298125.218,4535049.666 297832.77,4535164.22 297804.8,4535163.47 297005.54,4535199.8 297384.26,4536051.1 297332.59,4536666.12 296931.01,4536942.48 296790.19,4537768.01 296381.4,4538281.92 296772.06,4539054.49 296038.28,4539313.28 295280.52,4540121.62 295418.68,4540700.38 296202.44,4541326.16 295691.75,4541611.45 295958.81,4541901.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[50960498.56858]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[905]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[916]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43121]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[30]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Rasquera]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Rasquera]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Rasquera]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Rasquera]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="905">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">285076.88,4538163.26 284324.47,4537843.31 283617.405,4537846.542 283015.843,4537557.479 282304.905,4537604.354 281281.91,4537149.88 280906.468,4537190.292 280569.28,4537034.31 280559.42,4536721.18 279819.61,4536022.84 279311.74,4536043.66 278788.72,4535968.31 279262.72,4536715.73 278979.08,4537934.71 279221.4,4539395.11 279275.08,4539572.16 280533.15,4540447.1 281289.9,4541067.75 281289.28,4541616.073 281512.93,4541999.56 281929.905,4542405.135 282606.27,4542602.04 282914.49,4543347.16 283549,4542433 284180,4541839 284772,4541485 285428.23,4540416.54 285926.86,4539681.97 285076.88,4538163.26</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[26586617.47967]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[906]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[917]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43117]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Prat de Comte]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Prat de Comte]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Prat de Comte]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Prat de Comte]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="906">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">295958.81,4541901.77 295691.75,4541611.45 296202.44,4541326.16 295418.68,4540700.38 295280.52,4540121.62 296038.28,4539313.28 296772.06,4539054.49 296381.4,4538281.92 296790.19,4537768.01 296931.01,4536942.48 297332.59,4536666.12 297384.26,4536051.1 297005.54,4535199.8 296606.95,4535064.01 295255.43,4535522.91 294567.85,4535870.16 293243.03,4535630.24 292311.73,4535727.12 291990.79,4535276.91 290623.23,4535003.87 289171.4,4534432.54 289091.43,4533747.66 288869.61,4533607.06 288566.81,4534056.38 288869.34,4535530.67 286927,4535911 286187,4536762 285312.718,4536866.073 285030.15,4537024.17 284976.78,4537420.76 285166.81,4537781.96 285076.88,4538163.26 285926.86,4539681.97 287023.655,4539498.885 287359.593,4539678.573 288242.29,4539316.51 289144.29,4540119.15 289603.84,4540576.52 290140.14,4541005.82 290567.57,4541399.54 291515.48,4541598.27 292967.53,4542416 294067.45,4542910.73 294597.43,4543343.33 294959.05,4542719.16 295217.23,4542630.19 295958.81,4541901.77</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[62815373.1049]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[907]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[918]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43025]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Benifallet]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Benifallet]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Benifallet]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Benifallet]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="907">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">277821.85,4529026.24 277806.23,4529482.81 278432.81,4530169.19 278075.04,4531038.42 278250.218,4531389.51 278013.65,4532201.73 278211.155,4532514.51 278156.468,4533092.635 278340.92,4533323.3 278355.64,4534603.53 278837.55,4535288.61 278788.72,4535968.31 279311.74,4536043.66 279819.61,4536022.84 280559.42,4536721.18 280569.28,4537034.31 280906.468,4537190.292 281281.91,4537149.88 282304.905,4537604.354 283015.843,4537557.479 283617.405,4537846.542 284324.47,4537843.31 285076.88,4538163.26 285166.81,4537781.96 284976.78,4537420.76 285030.15,4537024.17 285312.718,4536866.073 286187,4536762 286927,4535911 284807,4533071.65 284028.15,4531731.24 282818.86,4531808.36 277821.85,4529026.24</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[44410623.97486]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[908]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[919]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43102]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Pauls]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Pauls]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Pa�?ls]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Pa�?ls]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="908">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">284807,4533071.65 286927,4535911 288869.34,4535530.67 288566.81,4534056.38 288869.61,4533607.06 289992.15,4532061.25 290279.63,4531410.21 289260.69,4531375.21 288362.13,4530889.25 289225.37,4530070.07 288552.08,4529979.55 286251,4528524.04 285661.02,4527813.93 285252.57,4527144.84 284551.26,4526826.67 283086.38,4526797.59 282622.35,4526916.81 282464.06,4527246.47 282465.07,4528137.04 283506.7,4528714.72 284695.27,4530324.02 284969.47,4532362.33 284807,4533071.65</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[32233987.9434]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[909]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[920]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43052]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Xerta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Xerta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Xerta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Xerta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="909">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">299373.79,4529464.88 297881,4530296 297072,4530181 295999,4529734 295338,4529732 294477.08,4529453.09 293185,4529647 292898,4529797 289998.51,4529177.94 289225.37,4530070.07 288362.13,4530889.25 289260.69,4531375.21 290279.63,4531410.21 289992.15,4532061.25 288869.61,4533607.06 289091.43,4533747.66 289171.4,4534432.54 290623.23,4535003.87 291990.79,4535276.91 292311.73,4535727.12 293243.03,4535630.24 294567.85,4535870.16 295255.43,4535522.91 296606.95,4535064.01 297005.54,4535199.8 297804.8,4535163.47 297820.66,4535014.63 298099.39,4533974.54 298425.75,4533613.76 298539.28,4533346.541 299093.21,4533243.12 298897.62,4531629.61 299532.37,4530208.02 299373.79,4529464.88</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[53215897.2267]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[910]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[921]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43149]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tivenys]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tivenys]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tivenys]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tivenys]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="910">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">273427.1,4524635.33 271770.73,4522102.53 270095.05,4522333.01 270187.717,4522537.948 270400.27,4522520.78 270633.03,4522662.948 270420.22,4523010.38 269869.96,4523606.97 269187,4524451 268781.468,4526166.854 268504.6,4526523.37 268570.53,4527041.854 268476.78,4527346.542 268693,4528240 268795,4528631 268420,4529202 268062.718,4529295.76 267500.218,4529662.948 267438,4529805 267625.218,4529991.073 268058,4530139 268146.65,4530684.84 268476.78,4531037.948 268429.905,4531795.76 268707,4532067 268398.655,4532436.385 268439,4532705 268633.03,4532811.385 268856,4532824 268984,4533936 269585,4534665 269946,4534620 270599,4535499 271049.26,4535237.27 271645.82,4533568.42 272554.905,4531787.948 272877.67,4531632.66 273179.905,4531483.26 273203.02,4531241.98 272689.54,4530024.69 272065.02,4529356.14 272000.218,4528979.354 272054.71,4528669.36 271586.155,4527963.729 271541.9,4527525.02 271890.843,4526909.042 271921.78,4526453.73 272656.51,4525671.7 272939.42,4524800.45 273427.1,4524635.33</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[43365356.03674]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[911]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[922]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43018]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[37]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Arnes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Arnes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Arnes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Arnes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="911">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309175.75,4521908.43 308514.59,4522886.87 308051.77,4523503.99 307852.45,4523999.65 307305.13,4524292.65 307155,4524171 306733.36,4524456.66 306051.82,4524711.06 305337.48,4524777.9 304828.57,4523921.88 304477.92,4523722.57 304070.14,4523251.05 303557.83,4522862.87 302874.18,4522170.61 302415.39,4521956.89 301424.35,4521860.3 301142.13,4522675.92 300894.31,4523884.93 301576.08,4524914.38 302196.33,4525311.1 302527.84,4526417.69 303174.39,4527030.36 302499.95,4528470.75 302139.13,4528841.22 301958.95,4529562.77 302183.72,4529784.93 302049.68,4529984.39 299925.92,4529492.61 299373.79,4529464.88 299532.37,4530208.02 298897.62,4531629.61 299093.21,4533243.12 298539.28,4533346.541 298425.75,4533613.76 298099.39,4533974.54 297820.66,4535014.63 297804.8,4535163.47 297832.77,4535164.22 298125.218,4535049.666 298193.12,4534582.13 298586.155,4534463.729 298877.5,4534091.02 300039.13,4534394.81 302628.93,4535273.88 303665,4535310 304025.2,4535458.35 304567.42,4535487.48 304925.97,4535165.12 305289.96,4535020.54 305880.27,4534585.53 306011.19,4534378.42 306160.91,4533881.15 306497.73,4533501 307129.54,4533059.58 307607.93,4532395.96 309381.15,4532060.04 310558.33,4529380.02 310495,4528632.55 310337.57,4527537.3 310006.46,4526052.55 309941.23,4524777.35 310060,4524507 310561.59,4524294.25 310337.262,4524004.844 310348.34,4523770.5 310174.762,4523561.094 310009.137,4523532.969 309941.87,4523364 309684.137,4522617.344 309646.637,4522354.844 309706.21,4522227 309609.137,4521895.469 309517.71,4521803 309421.637,4521867.344 309175.75,4521908.43</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[100987413.04903]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[912]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[923]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43104]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Perello, el]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Perello, el]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Perell¢, el]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Perell¢, el]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="912">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">310561.59,4524294.25 310060,4524507 309941.23,4524777.35 310006.46,4526052.55 310337.57,4527537.3 310495,4528632.55 310558.33,4529380.02 309381.15,4532060.04 307607.93,4532395.96 307129.54,4533059.58 306497.73,4533501 306160.91,4533881.15 306011.19,4534378.42 305880.27,4534585.53 305289.96,4535020.54 305631.87,4535289.5 309816.4,4534625.15 310624.69,4533857.55 310925.96,4533885.01 314543.84,4534507.12 316405.86,4534553.83 317870.84,4534549.43 318739,4534137 319606.86,4533927.77 319274.762,4533628.281 319209.137,4533387.656 319024.762,4533214.219 319052.887,4533131.406 318881.012,4533042.344 318434.137,4532522.031 318331.012,4532534.531 318059.137,4532281.406 317909.87,4531777 317756.12,4531838.5 317734.15,4531663 317543.512,4531582.969 317567.2,4531399.5 317449.762,4531289.219 317321.637,4531301.719 317290.39,4531223.5 317031.2,4531065.5 317018.03,4530846 317096.637,4530800.156 317006.012,4530653.281 317031.2,4530490 316893.512,4530436.094 316824.762,4530257.969 316653.21,4530009.5 316456.012,4529864.219 316164.12,4529279.5 315896.637,4529214.219 315806.012,4529057.969 315627.887,4528973.594 315485.21,4528827 315386.64,4528601 315209.137,4528476.719 315162.262,4528292.344 314921.637,4528248.594 314712.262,4527839.219 314593.512,4527732.969 314584.137,4527623.594 314459.137,4527501.719 314444.02,4527372.5 314312.262,4527317.344 314334.52,4527161 314057.12,4526730 313981.012,4526518.906 313810.75,4526401.5 313668.512,4526362.656 313521.637,4526193.906 313040.62,4525887 312343.46,4525657 312109.137,4525476.719 311862.84,4525239.5 311627.887,4524798.594 311628.43,4524633.5 311484.137,4524351.719 311199.762,4524451.719 310962.262,4524439.219 310899.762,4524376.719 310712.262,4524367.344 310561.59,4524294.25</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[66448206.60907]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[913]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[924]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43013]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ametlla de Mar, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ametlla de Mar, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ametlla de Mar, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ametlla de Mar, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="913">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">274646.31,4520666.29 274056.95,4521625.16 273194.63,4522144.23 271890.13,4521634.49 270974.61,4521469.58 269951.47,4520925.81 269834.27,4520332.19 269156.467,4520174.666 268849,4520394.12 269629.31,4521978.48 270095.05,4522333.01 271770.73,4522102.53 273427.1,4524635.33 274913.91,4525276.41 275375.06,4526118.18 276224.15,4527071.84 277821.85,4529026.24 282818.86,4531808.36 284028.15,4531731.24 284807,4533071.65 284969.47,4532362.33 284695.27,4530324.02 283506.7,4528714.72 282465.07,4528137.04 282464.06,4527246.47 282622.35,4526916.81 282416.81,4526036.96 282482.05,4525089.1 282475.88,4525059.71 277736.14,4523088.54 277783.56,4522591.9 277392.15,4522400.67 276656.467,4521795.76 275682.64,4521261.48 275351.78,4520881.698 274646.31,4520666.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[62777353.21299]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[914]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[925]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43008]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alfara de Carles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alfara de Carles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alfara de Carles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alfara de Carles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="914">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">282622.35,4526916.81 283086.38,4526797.59 284551.26,4526826.67 285252.57,4527144.84 285661.02,4527813.93 286251,4528524.04 288552.08,4529979.55 289225.37,4530070.07 289998.51,4529177.94 290162.24,4527809.19 290410.59,4526253.7 289519,4526122.58 288832.76,4525915.13 286977.62,4525706.36 286639.73,4525213.3 285398,4525573 283989.52,4525678.45 282416.81,4526036.96 282622.35,4526916.81</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[19776910.85445]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[915]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[926]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43006]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aldover]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Aldover]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aldover]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aldover]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="915">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">282482.05,4525089.1 284828.97,4523901.09 285674.27,4523579.93 287300.59,4522872.79 288624,4522636 289295,4522768 290101.67,4521853.23 289725.21,4520861.76 289959.49,4520717.53 288963.45,4519087.29 288684.68,4519148.45 288443.54,4518661.1 288063.48,4518422.64 287257.35,4518037.99 287052.97,4517034.15 286988.59,4514983.44 286413.27,4513895.1 286101.96,4513546.48 286257.49,4512970.33 284110.68,4512885.16 283279.45,4513091.72 281639.68,4513402.92 279217.93,4515535.44 279192.83,4515832.84 275777.39,4515509.72 274818.9,4515877.11 274498.44,4514814.85 274077.83,4514798.98 273326.19,4514060.14 272227.54,4514756.57 271601.6,4514836.06 271390.24,4515198.28 271280.92,4515532.27 271156.02,4516779.53 270545.99,4516513.45 270351.78,4516299.666 270202.92,4516401.18 270062.01,4516839.35 269949.19,4517016.92 270472.86,4517288.97 272258.03,4517905.135 272519.73,4518161.39 272023.56,4518896.36 271001.09,4519817.63 270937.717,4520241.073 271090.41,4520414.89 271593.967,4520459.823 272109.592,4520639.51 272751.66,4520634.31 272875.217,4520842.635 273267.07,4521120.52 273554.63,4521082.42 274056.95,4521625.16 274646.31,4520666.29 275117.15,4520304.53 277515.842,4522061.385 277766.49,4522090.73 280102.5,4522460.99 281501.13,4522886.17 282338.01,4524541.21 282475.88,4525059.71 282482.05,4525089.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[135964293.57613]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[916]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[927]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43133]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Roquetes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Roquetes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Roquetes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Roquetes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="916">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">295162.93,4512128.8 294496.35,4514118.65 294267.1,4514238.73 293423.58,4513438.72 292558.27,4513657.78 291996.44,4513886.23 291726.78,4513678.572 291047.093,4513725.447 290726.78,4513452.01 289351,4512979 288848,4512924 288028,4512979 286891.07,4512839.99 286257.49,4512970.33 286101.96,4513546.48 286413.27,4513895.1 286988.59,4514983.44 287052.97,4517034.15 287257.35,4518037.99 288063.48,4518422.64 288443.54,4518661.1 288684.68,4519148.45 288963.45,4519087.29 289959.49,4520717.53 289725.21,4520861.76 290101.67,4521853.23 289295,4522768 288624,4522636 287300.59,4522872.79 285674.27,4523579.93 284828.97,4523901.09 282482.05,4525089.1 282416.81,4526036.96 283989.52,4525678.45 285398,4525573 286639.73,4525213.3 286977.62,4525706.36 288832.76,4525915.13 289519,4526122.58 290410.59,4526253.7 290162.24,4527809.19 289998.51,4529177.94 292898,4529797 293185,4529647 294477.08,4529453.09 295338,4529732 295999,4529734 297072,4530181 297881,4530296 299373.79,4529464.88 299925.92,4529492.61 302049.68,4529984.39 302183.72,4529784.93 301958.95,4529562.77 302139.13,4528841.22 302499.95,4528470.75 303174.39,4527030.36 302527.84,4526417.69 302196.33,4525311.1 301576.08,4524914.38 300894.31,4523884.93 301142.13,4522675.92 301424.35,4521860.3 299984.593,4521084.823 299319.51,4521029.5 298390.16,4520394.46 298397.14,4519216.74 298358.25,4517913.59 297916.18,4517108.94 298252,4516499 298031.67,4515354.21 297285.08,4514774.23 296909.61,4514707.03 296322.85,4514213.97 296185.95,4512548.06 295162.93,4512128.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">268849,4520394.12 269156.467,4520174.666 269834.27,4520332.19 269951.47,4520925.81 270974.61,4521469.58 271890.13,4521634.49 273194.63,4522144.23 274056.95,4521625.16 273554.63,4521082.42 273267.07,4521120.52 272875.217,4520842.635 272751.66,4520634.31 272109.592,4520639.51 271593.967,4520459.823 271090.41,4520414.89 270937.717,4520241.073 271001.09,4519817.63 272023.56,4518896.36 272519.73,4518161.39 272258.03,4517905.135 270472.86,4517288.97 270124.53,4518093.2 269636.6,4518218.14 268444.18,4518367.13 266686.81,4518230.44 266753.88,4519009.32 267585.18,4519531.42 268089.71,4520164.44 268849,4520394.12</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">274646.31,4520666.29 275351.78,4520881.698 275682.64,4521261.48 276656.467,4521795.76 277392.15,4522400.67 277783.56,4522591.9 277736.14,4523088.54 282475.88,4525059.71 282338.01,4524541.21 281501.13,4522886.17 280102.5,4522460.99 277766.49,4522090.73 277515.842,4522061.385 275117.15,4520304.53 274646.31,4520666.29</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[220773502.11236]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[917]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[928]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43155]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Tortosa]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Tortosa]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Tortosa]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Tortosa]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="917">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">306141.04,4515919.72 304561.8,4517048.36 303779,4517376 302503,4519387 301424.35,4521860.3 302415.39,4521956.89 302874.18,4522170.61 303557.83,4522862.87 304070.14,4523251.05 304477.92,4523722.57 304828.57,4523921.88 305337.48,4524777.9 306051.82,4524711.06 306733.36,4524456.66 307155,4524171 307305.13,4524292.65 307852.45,4523999.65 308051.77,4523503.99 308514.59,4522886.87 309175.75,4521908.43 308915.387,4521723.594 308837.262,4521320.469 308318.512,4521186.094 308227.59,4521202 307943.512,4521023.594 307809.137,4520786.094 307628.33,4520747.77 307196.637,4520542.344 307059.137,4520561.094 306721.637,4520404.844 306593.512,4520173.594 306430.02,4520002.78 306068.512,4519717.344 306056.81,4519454 306534.137,4518215.781 306973.4,4517533.5 307468.512,4517020.469 307700.81,4516879.38 307062.67,4516481.22 306787.262,4516109.531 306649.08,4515498.85 306141.04,4515919.72</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35188585.91126]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[918]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[929]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43906]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ampolla, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ampolla, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ampolla, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ampolla, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="918">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">301877.98,4512892.3 302073.95,4514373.77 300697.97,4516292.83 300417.48,4517525.89 300148.79,4518450.79 299557.63,4519274.66 298789.49,4520120.26 298390.16,4520394.46 299319.51,4521029.5 299984.593,4521084.823 301424.35,4521860.3 302503,4519387 303779,4517376 304561.8,4517048.36 306141.04,4515919.72 301877.98,4512892.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[25587959.27173]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[919]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[930]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43903]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Camarles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Camarles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Camarles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Camarles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="919">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">297184.51,4509260.07 295595.1,4510368.96 295162.93,4512128.8 296185.95,4512548.06 296322.85,4514213.97 296909.61,4514707.03 297285.08,4514774.23 298031.67,4515354.21 298252,4516499 297916.18,4517108.94 298358.25,4517913.59 298397.14,4519216.74 298390.16,4520394.46 298789.49,4520120.26 299557.63,4519274.66 300148.79,4518450.79 300417.48,4517525.89 300697.97,4516292.83 302073.95,4514373.77 301877.98,4512892.3 298518.83,4510529.55 298512.36,4509685.09 297359.93,4509791.85 297184.51,4509260.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[35526280.7347]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[920]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[931]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43904]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Aldea, l']]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Aldea, l']]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Aldea, l']]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Aldea, l']]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="920">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">297184.51,4509260.07 297359.93,4509791.85 298512.36,4509685.09 298518.83,4510529.55 301877.98,4512892.3 306141.04,4515919.72 306649.08,4515498.85 306787.262,4516109.531 307062.67,4516481.22 307700.81,4516879.38 308468.512,4515906.406 308905.68,4515663.5 310181.012,4515156.406 311322.07,4514980.4 311721.637,4515111.094 311818.512,4515048.594 312759.137,4515570.469 312899.18,4515516 313164.03,4515801.5 313052.887,4516029.844 312288.87,4516653.5 311059.137,4517123.594 310706.39,4517481 309891.27,4517855.5 309631.012,4517740.781 309459.137,4517881.406 309020.81,4517892.5 309146.637,4518168.906 309277.887,4518231.406 309357.06,4518344 311006.012,4518404.844 311701.59,4518229 312131.012,4517979.844 312562.262,4517651.719 312866.93,4517294 313759.137,4515761.094 315825.4,4512863.5 316499.762,4512043.906 317059.137,4511518.906 317417.12,4511321.5 317834.137,4511265.781 318237.262,4511350.156 318590.387,4511515.781 319187.262,4511640.781 319593.512,4511787.656 319792.18,4511767 320037.262,4511409.531 320348.85,4511323.86 320449.762,4511690.781 320567.38,4511723 320952.887,4510861.094 321161.62,4510023 319449.46,4510019.9 317467.18,4509406.95 315832.29,4508697.96 313922.61,4507461.05 312644.41,4507524.64 310662.9,4508835.82 309895.99,4509177.57 305245.24,4509827.93 304859.593,4509811.385 304222,4510099.73 303592.36,4510566.95 302384.72,4510359.15 300826.91,4509915.32 298385.59,4509044.45 297184.51,4509260.07</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[105830630.25205]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[921]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[932]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43901]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[09]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Deltebre]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Deltebre]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Deltebre]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Deltebre]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="921">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">274126.67,4499203.03 272655,4499861 271749,4500605 271601.78,4500795.76 271321.88,4500797.14 271054.905,4500702.01 270822.69,4500780.29 270117.405,4501229.353 269830.46,4501699.31 269718.967,4502205.916 269524.65,4502270.68 269242.405,4502494.978 269177.81,4502753.2 268985.1,4503323.93 269265.842,4503494.978 269263,4503734 269151.21,4504671.89 269750.217,4505932.479 269958.83,4506030.21 270437.717,4506221.541 270554.48,4506433.28 271244.61,4507420.46 271091.57,4507994.24 270094.7,4508503.32 269508.03,4509518.416 269204.54,4509619.19 268812.717,4509893.416 268435.81,4509924.54 267663.25,4509669.97 267025.32,4509238.12 266651.01,4509539.44 265737.68,4512030.93 265890.842,4513022.322 265164.28,4512936.385 264730.12,4512712.3 264312.717,4512600.447 264035.08,4512322.29 263349.05,4512197.96 262932.02,4512883.61 262402.19,4512393.84 261088.33,4513112.5 260730.71,4514030.07 260732.64,4514376.21 260461.155,4514877.791 260422.092,4515112.166 260566.29,4515045.96 260898.654,4514791.854 261304.905,4514229.354 261604.38,4514104.95 261656.467,4514487.166 261555.52,4514845.18 261725.16,4515543.64 262248.25,4515405.84 262452.75,4515623.05 262562.717,4515307.479 262804.905,4515112.166 262937.25,4515148.76 263304.905,4515541.854 263394.9,4515883.64 263586.155,4515932.479 263838.84,4515839.35 264822.98,4516921.82 265781.467,4516764.51 266095.85,4516811.65 266351.78,4516928.572 266801.63,4517982.78 266686.81,4518230.44 268444.18,4518367.13 269636.6,4518218.14 270124.53,4518093.2 270472.86,4517288.97 269949.19,4517016.92 270062.01,4516839.35 270202.92,4516401.18 270351.78,4516299.666 270545.99,4516513.45 271156.02,4516779.53 271280.92,4515532.27 271390.24,4515198.28 271601.6,4514836.06 270943.5,4514117.46 270253.41,4512977.49 270525.54,4512233.6 271042.35,4512032.42 271492.76,4511135.05 272512.13,4510561.4 272382.68,4509354.75 272734.53,4509267.01 273078.342,4508932.479 273508.84,4508349.19 274218.967,4508049.666 275214.97,4507194.69 275016.8,4506541.42 275234.592,4505994.979 275778.26,4505470.79 276266.73,4504569.68 276740,4503230 276151.7,4502207.77 275297.7,4501054.52 274126.67,4499203.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[109556613.90626]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[922]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[933]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43044]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Senia, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Senia, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[S‚nia, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[S‚nia, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="922">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">276266.73,4504569.68 275778.26,4505470.79 275234.592,4505994.979 275016.8,4506541.42 275214.97,4507194.69 274218.967,4508049.666 273508.84,4508349.19 273078.342,4508932.479 272734.53,4509267.01 272382.68,4509354.75 272512.13,4510561.4 271492.76,4511135.05 271042.35,4512032.42 270525.54,4512233.6 270253.41,4512977.49 270943.5,4514117.46 271601.6,4514836.06 272227.54,4514756.57 273326.19,4514060.14 274077.83,4514798.98 274498.44,4514814.85 274818.9,4515877.11 275777.39,4515509.72 279192.83,4515832.84 279217.93,4515535.44 281639.68,4513402.92 283279.45,4513091.72 284110.68,4512885.16 283450.01,4511815.34 282826.85,4511234.8 281801.05,4510557.2 280184.17,4509286.76 279234.92,4508390.56 276266.73,4504569.68</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[78493665.37328]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[923]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[934]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43077]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Mas de Barberans]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Mas de Barberans]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Mas de Barberans]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Mas de Barberans]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="923">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309796.71,4500842.89 309340.36,4501122.87 308465.346,4501405.826 308268.77,4501365 306899.721,4501390.201 304856.81,4501146.5 303849.721,4500830.826 303150.84,4500435.5 302384.91,4500167.86 302200.8,4500700.7 299515.35,4503223.81 297437.26,4502049.67 294821.93,4502723.52 293988.76,4502186.07 293391.56,4502558.54 292020.57,4502703.41 292316.73,4504037.69 291504.22,4506317.91 291683.29,4507300.08 291672.56,4508150.82 292942.14,4509864.22 292799.95,4510956.02 293380.76,4512214.64 293423.58,4513438.72 294267.1,4514238.73 294496.35,4514118.65 295162.93,4512128.8 295595.1,4510368.96 297184.51,4509260.07 298385.59,4509044.45 300826.91,4509915.32 302384.72,4510359.15 303592.36,4510566.95 303972.35,4509813.68 304320.69,4509715 304561.97,4509329.42 304088.35,4508268.35 304323.54,4507818.09 305340.1,4506814.87 306289.66,4506691.54 310158.62,4504510.48 311553.66,4504160.89 313203.24,4503851.26 313538.19,4503337.99 312479.957,4502849.349 310999.5,4501980 310292.457,4501447.787 309796.71,4500842.89</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[137792268.26204]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[924]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[935]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43014]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Amposta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Amposta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Amposta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Amposta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="924">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">289212.19,4508909.93 288844.83,4509078.53 287992.404,4508674.666 287851.779,4508807.479 287593.967,4508744.979 287476.779,4508955.916 287238.06,4508793.26 285947.2,4509188.65 285076.91,4509271.44 284652.76,4509267.85 284601.779,4509565.291 284334.32,4509659.76 283919.24,4510022.4 283468.967,4510416.854 283156.467,4511088.729 282973.85,4511102.96 282826.85,4511234.8 283450.01,4511815.34 284110.68,4512885.16 286257.49,4512970.33 286891.07,4512839.99 288028,4512979 288848,4512924 289351,4512979 290726.78,4513452.01 291047.093,4513725.447 291726.78,4513678.572 291996.44,4513886.23 292558.27,4513657.78 292236.1,4513112.5 291868.45,4513171.63 290914.56,4511426.77 289170.65,4509558.8 289212.19,4508909.93</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27739065.59052]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[925]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[936]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43138]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Barbara]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Barbara]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa B…rbara]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa B…rbara]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="925">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">289391.82,4508453.95 289212.19,4508909.93 289170.65,4509558.8 290914.56,4511426.77 291868.45,4513171.63 292236.1,4513112.5 292558.27,4513657.78 293423.58,4513438.72 293380.76,4512214.64 292799.95,4510956.02 292942.14,4509864.22 291672.56,4508150.82 291683.29,4507300.08 291504.22,4506317.91 290250.95,4506601.53 290336.79,4507161.08 290225,4507408 290706,4508472 290453.91,4508685.31 289391.82,4508453.95</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[14820179.9863]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[926]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[937]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43078]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Masdenverge]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Masdenverge]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Masdenverge]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Masdenverge]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="926">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">280771.2,4506997.02 279234.92,4508390.56 280184.17,4509286.76 281801.05,4510557.2 282826.85,4511234.8 282973.85,4511102.96 283156.467,4511088.729 283468.967,4510416.854 283919.24,4510022.4 284334.32,4509659.76 284601.779,4509565.291 284652.76,4509267.85 285076.91,4509271.44 285947.2,4509188.65 287238.06,4508793.26 287476.779,4508955.916 287593.967,4508744.979 287851.779,4508807.479 287992.404,4508674.666 288844.83,4509078.53 289212.19,4508909.93 289391.82,4508453.95 288303.14,4507678.91 286467.49,4506763.27 285783.62,4506141.82 285391.46,4505681.51 283888.74,4506305.56 283247.57,4506287.64 282633.029,4506682.479 282287.45,4506105.68 280771.2,4506997.02</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[27263871.60454]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[927]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[938]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43063]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Galera, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Galera, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Galera, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Galera, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="927">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">313538.19,4503337.99 313203.24,4503851.26 311553.66,4504160.89 310158.62,4504510.48 306289.66,4506691.54 305340.1,4506814.87 304323.54,4507818.09 304088.35,4508268.35 304561.97,4509329.42 304320.69,4509715 303972.35,4509813.68 303592.36,4510566.95 304222,4510099.73 304859.593,4509811.385 305245.24,4509827.93 309895.99,4509177.57 310662.9,4508835.82 312644.41,4507524.64 313922.61,4507461.05 315832.29,4508697.96 317467.18,4509406.95 319449.46,4510019.9 321161.62,4510023 321144.31,4509625.5 321067.457,4509288.412 320629.957,4508171.224 320009.93,4507072 318998.707,4506086.849 318446.31,4505640 316964.332,4504766.537 313538.19,4503337.99</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[62566458.27032]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[928]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[939]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43902]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Jaume d'Enveja]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Jaume d'Enveja]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Jaume d'Enveja]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Jaume d'Enveja]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="928">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">287814.2,4503276.96 287047.55,4502094.69 286276.59,4501468.99 285240.56,4500782.57 283928.88,4500482.85 283720.17,4501324.86 282311.68,4501967.73 283402.15,4503586.22 283543,4503966 282891,4504416 282734.592,4504733.26 282078,4505050 281414.279,4505631.697 280928.86,4505823.73 280484.592,4506022.322 280427.9,4506240.06 280445.529,4506616.072 280771.2,4506997.02 282287.45,4506105.68 282633.029,4506682.479 283247.57,4506287.64 283888.74,4506305.56 285391.46,4505681.51 285783.62,4506141.82 286467.49,4506763.27 288303.14,4507678.91 289391.82,4508453.95 290453.91,4508685.31 290706,4508472 290225,4507408 290336.79,4507161.08 288890.16,4505770.45 288145.76,4504156.25 287814.2,4503276.96</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[33908959.36312]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[929]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[940]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43068]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Godall]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Godall]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Godall]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Godall]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="929">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">274126.67,4499203.03 275297.7,4501054.52 276151.7,4502207.77 276740,4503230 276266.73,4504569.68 279234.92,4508390.56 280771.2,4506997.02 280445.529,4506616.072 280427.9,4506240.06 280484.592,4506022.322 280928.86,4505823.73 281414.279,4505631.697 282078,4505050 282734.592,4504733.26 282891,4504416 283543,4503966 283402.15,4503586.22 282311.68,4501967.73 283720.17,4501324.86 283928.88,4500482.85 285240.56,4500782.57 286276.59,4501468.99 287047.55,4502094.69 287814.2,4503276.96 288640.12,4502534.7 290099.18,4501721.23 291681.72,4501192.17 292236.93,4501071.07 292280.99,4501003.79 292148.46,4500844.39 290777.04,4498493.48 290264.37,4497148.04 290328.66,4496185.33 290199,4495439.18 289945.78,4494540.07 289431.98,4493894.41 289476.78,4493522.322 289298.58,4493353.45 289078.343,4493412.947 288791.49,4493823.71 288508.03,4493741.072 288156.24,4493889.02 287961.155,4493991.072 287406.468,4494045.76 286969.4,4493928.4 286883.03,4493639.51 286541.71,4493436.91 286429.905,4493272.322 286481.5,4492952.69 286054.905,4492631.697 285788.32,4492628.15 284679.85,4492661.07 283570.13,4492227.06 283095,4491955 283058,4493040 282897.53,4493950.08 283192,4494550 283250.218,4494842.635 283476.78,4495037.947 283712,4495232 283570.53,4495405.135 282708.44,4495459.22 281793,4496178 280680,4497116 280563.1,4497539.47 280173.48,4498063.19 279327.38,4498331.96 278961.155,4498483.26 278145.55,4498528.21 275451.52,4498773.36 274126.67,4499203.03</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[127230919.13313]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[930]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[941]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43156]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Ulldecona]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Ulldecona]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Ulldecona]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Ulldecona]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="930">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">292386.16,4501037.98 292280.99,4501003.79 292236.93,4501071.07 291681.72,4501192.17 290099.18,4501721.23 288640.12,4502534.7 287814.2,4503276.96 288145.76,4504156.25 288890.16,4505770.45 290336.79,4507161.08 290250.95,4506601.53 291504.22,4506317.91 292316.73,4504037.69 292020.57,4502703.41 291585.75,4502112.96 291838.38,4501946.21 292386.16,4501037.98</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[16685925.89895]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[931]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[942]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43062]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Freginals]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Freginals]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Freginals]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Freginals]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="931">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">309340.36,4501122.87 309796.71,4500842.89 306508.53,4495958 305626.832,4494747.787 305095.582,4494163.412 304507.65,4493632 303229.957,4492885.287 302511.9,4492608.5 301054.957,4492185.287 300192.457,4492060.286 299496.5,4492008 298758.082,4492066.537 298077.75,4492334.5 297436.207,4492793.099 296959.58,4493402 296692.457,4493979.037 296516.12,4494866 296789.332,4494700.912 297123.707,4494619.662 297339.332,4494757.162 297395.93,4494864 297523.707,4494869.662 297658.082,4494788.412 297873.62,4494519 298118.56,4494580 298361.207,4494585.287 298434.95,4494804.5 298348.707,4494971.224 298414.332,4495246.224 298394.15,4495825.5 298923.707,4495449.349 299539.332,4495286.849 299881.67,4495265.51 301254.99,4495634.5 301598.707,4495802.474 302073.707,4496239.974 302193.93,4496280 302430.97,4496204.264 303150.84,4496373 304202.846,4495962.076 304427.846,4496127.701 304587.221,4497318.326 304615.345,4497315.201 304471.596,4496118.326 304762.221,4495883.951 304990.345,4495962.076 305296.596,4495887.076 305409.06,4495979.5 305755.971,4495988.639 306349.56,4496214.5 306505.97,4496330.826 308153.95,4498740.5 309049.721,4500316.764 309221.596,4500685.514 309340.36,4501122.87</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">302384.91,4500167.86 301830.97,4500102.701 301384.68,4499900 298715.44,4499777.82 297774.72,4499910.513 297796.595,4499438.638 297762.22,4499441.763 297730.97,4499904.263 297055.97,4499782.388 297068.47,4499648.013 296939.31,4499550 297265.345,4499151.138 297668.47,4499163.638 297665.345,4499123.013 297262.22,4499094.888 297059.095,4498951.138 297037.22,4498969.888 297209.095,4499110.513 296952.845,4499441.763 296512.22,4499151.138 296924.72,4498679.263 297387.22,4498385.513 297374.72,4498357.388 296905.97,4498651.138 296630.97,4498916.763 296259.095,4498794.888 295564.25,4497870.19 294976.24,4498287.5 295234.593,4498545.76 294383.03,4499053.572 294898.655,4499217.635 294679.905,4499991.072 294484.593,4500022.322 294195.53,4499967.634 292386.16,4501037.98 291838.38,4501946.21 291585.75,4502112.96 292020.57,4502703.41 293391.56,4502558.54 293988.76,4502186.07 294821.93,4502723.52 297437.26,4502049.67 299515.35,4503223.81 302200.8,4500700.7 302384.91,4500167.86</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[54565071.20299]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[932]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[943]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43136]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Carles de la Rapita]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Carles de la Rapita]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Carles de la R…pita]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Carles de la R…pita]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="932">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">295564.25,4497870.19 293669.5,4495744 292515.75,4494596 292843.84,4494104 293212.22,4494263.638 293234.095,4494241.763 292821.95,4494049 292549.72,4494441.763 292362.54,4494376.93 291812.62,4493905.67 291301.87,4492605.5 291106.33,4492266.5 290295.06,4491185 290221.595,4490977.701 290246.595,4490758.951 289730.56,4489603 289562.92,4488999.69 289217,4489072 288490,4489365 287613,4489636 286466,4490083 284914.96,4490898.49 283986,4491275 283095,4491955 283570.13,4492227.06 284679.85,4492661.07 285788.32,4492628.15 286054.905,4492631.697 286481.5,4492952.69 286429.905,4493272.322 286541.71,4493436.91 286883.03,4493639.51 286969.4,4493928.4 287406.468,4494045.76 287961.155,4493991.072 288156.24,4493889.02 288508.03,4493741.072 288791.49,4493823.71 289078.343,4493412.947 289298.58,4493353.45 289476.78,4493522.322 289431.98,4493894.41 289945.78,4494540.07 290199,4495439.18 290328.66,4496185.33 290264.37,4497148.04 290777.04,4498493.48 292148.46,4500844.39 292280.99,4501003.79 292386.16,4501037.98 294195.53,4499967.634 294484.593,4500022.322 294679.905,4499991.072 294898.655,4499217.635 294383.03,4499053.572 295234.593,4498545.76 294976.24,4498287.5 295564.25,4497870.19</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[47551041.2665]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[933]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[944]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[43004]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[22]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[43]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Alcanar]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Alcanar]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Alcanar]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Alcanar]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="933">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">400938.81,4683394.44 400288.04,4683424.01 399452.1,4682973.01 398807.13,4683114.76 397587.05,4683169.99 396350.28,4683076.29 395791.89,4682317.96 395718.87,4682272.28 396121.39,4684326.76 395437.64,4685464.69 395651.96,4687044.6 395878.48,4688062.08 395881.7,4688630.99 395487.97,4689352.67 394608.95,4690195 393912.07,4691287.67 394150.66,4691419.36 395981.56,4691418.3 396213.31,4691321.41 396823,4691378 397227,4691770 397731,4692002 398036.52,4693172.43 397222.57,4694861.27 396950.38,4695062.65 396336.56,4695928.18 395854.3,4696284.41 395497.42,4697066.03 395757.02,4697540.28 395551.89,4698502.68 395145.85,4698682.44 394530.92,4698967.78 394465.06,4699623.63 394057.23,4700697.42 393928.08,4701607.02 395531.76,4703304.56 395675.46,4703739.83 395886.23,4703177.57 395403.68,4701776.18 395635.34,4700379.2 396008.09,4699462.34 396760.39,4698847.79 398387.7,4698657.69 398992.86,4698448.4 400496.53,4698558.9 401007.05,4698326.69 401870.18,4697178.76 401922.09,4697062.53 402222.16,4696228.39 401743.93,4696055.48 402034.92,4695218.49 401726.34,4693551.05 401405.24,4692348.03 401694.84,4692445.81 401945.29,4691794.9 402611.36,4692095.04 402468.83,4691727.92 402889.4,4691127.07 403032.73,4690431.87 403250.389,4689705.859 402766.7,4689443.79 402587.55,4688927.92 402293.22,4687524.27 402280.43,4686204.6 401942.75,4685861.17 401624.76,4685836.32 401435.84,4685568.76 401474.23,4684668.99 401691.542,4684197.145 400885.13,4683725.87 400947.05,4683456.23 400938.81,4683394.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[98090016.24914]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[934]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[33]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25051]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Bellver de Cerdanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Bellver de Cerdanya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Bellver de Cerdanya]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Bellver de Cerdanya]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="934">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">403250.389,4689705.859 403032.73,4690431.87 402889.4,4691127.07 402468.83,4691727.92 402611.36,4692095.04 402949.97,4692564.39 403780.14,4693033.92 403974.16,4692703 404050.89,4692353.25 404686.42,4692088.32 405007.49,4692266.15 405503.99,4692082.03 405757.87,4691582.31 405158.09,4690725.93 405100.25,4690470.46 405064.53,4690105.87 404197.01,4690132.65 403250.389,4689705.859</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[6299403.32117]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[935]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[63]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25175]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Prats i Sansor]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Prats]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Prats i Sansor]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Prats]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="935">
+<gml:multiPolygonProperty>
+<gml:MultiPolygon srsName="EPSG:23031">
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">404028.29,4676010.86 404266.69,4676460.65 404773.45,4676938.04 405859.25,4676607.85 406820.19,4676740.61 406897.1,4676966.91 407444.41,4676780.91 407409.17,4677534.25 407070.01,4677679.12 407610.51,4678498.37 407852.1,4678707.92 407894.75,4680002.98 408640.96,4680755.31 409000.07,4681515.46 409185.92,4681439.91 409229.28,4682153.81 409553.34,4683440.98 410933.35,4683830.39 412198.14,4683372.8 412703.45,4684025.22 413567.81,4683137.9 413716.68,4681931.3 413627.77,4681283.78 413291.71,4681262.09 413118.26,4680195.32 413087.42,4679308.89 412783.47,4679314.27 410563.67,4677887.31 410617.47,4677462.79 410523.78,4675949.76 409406.23,4676101.05 408974.5,4676034.42 408755.9,4676539.58 407713.7,4675982.05 407308.83,4675667.09 407253.41,4674987.12 407709.08,4674829.26 408481.72,4674303.93 408322.94,4673795.1 407550.1,4673445.47 406641.46,4673085.84 406524.84,4672566.3 406705.37,4672407.67 406432.99,4671275.09 405821.7,4671573.37 405236.56,4672345.49 405377.56,4673058.87 405185.44,4673682.45 404560.78,4674009.13 403385.89,4674296.66 403791.06,4674902.39 404308.13,4674850.97 404497.61,4675215.39 404803.52,4675362.79 404347.22,4675618.54 404028.29,4676010.86</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember>
+<gml:geometryMember>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">400938.81,4683394.44 400947.05,4683456.23 400885.13,4683725.87 401691.542,4684197.145 402220.31,4684165.96 402667.68,4683947.35 403362.39,4683950.84 403887.4,4684054.21 403927.26,4684226.89 404177.84,4684554.32 404694.9,4684624.32 405638.19,4685069.01 406232.64,4685426.76 406620.58,4685247.06 407252.54,4685401.08 407363.41,4684500.82 407236.58,4683829.47 407966.63,4682220.54 407634.9,4681823.58 406765.13,4681814.66 405553.84,4681320.3 404982.1,4681430.92 403408.87,4682362.31 402741.77,4682081.09 402194.65,4682326.59 400938.81,4683394.44</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:geometryMember></gml:MultiPolygon></gml:multiPolygonProperty>
+<wfs:AREA><![CDATA[61682634.65079]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[936]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[106]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08099]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[14]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Guardiola de Bergueda]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Guardiola de Bergueda]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Guardiola de Bergued…]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Guardiola de Bergued…]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="936">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">446626.85,4642755.67 446912.84,4642676.72 446988.94,4642198.21 446567.67,4642317.83 446079.26,4641716.3 445784.54,4641632.9 444404.56,4642532.37 443416.31,4642706.09 443299.77,4642922.95 443140.46,4642812.22 442022.62,4643260.09 441254.05,4642777.24 441049.77,4643167.58 440633.17,4643285.92 440631.57,4643584.25 441117.74,4644479.4 440744.02,4645358.11 441238.97,4645832.87 441957.88,4645141.21 442729.17,4644923.74 442735.84,4644692.48 443837.06,4644590.11 445082.52,4643363.7 446626.85,4642755.67</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[10153108.99075]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[937]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[341]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08083]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Folgueroles]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Folgueroles]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Folgueroles]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Folgueroles]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="937">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">430977.78,4642577.42 431158.72,4642585.92 431165.45,4642933.03 431542.6,4642714.82 431877.37,4642665.75 432074.02,4642880.18 432375.91,4642505.01 433661.17,4641977.32 434438.47,4643227.76 435295.61,4643002.05 435924.19,4642510.62 436364.19,4642679.19 436404.13,4642939.55 436990.43,4642984.41 437156.57,4643585.88 437803.23,4643665.25 438164.99,4644341.76 438610.61,4644679.77 438527.49,4645086.18 439292.2,4645023.34 440210.52,4645692.69 440744.02,4645358.11 441117.74,4644479.4 440631.57,4643584.25 440633.17,4643285.92 440441.8,4642545.73 440515.89,4642013.93 440187.98,4642053.63 440184.44,4641907.5 439572.19,4641190.31 439143.06,4641312.42 439033.87,4640951.86 439274.99,4640426 439256.95,4640263.26 439091.78,4640257.16 439149.04,4640000 439199.15,4639587.47 438913.46,4639350.21 438773.03,4639490.91 437250.58,4640368.95 436576.14,4639653.85 436439.55,4639598.42 435929.35,4639113.07 435649.14,4638731.12 434544.11,4637995.17 433442.89,4637165.08 433181.37,4637691.01 433389.25,4638773.53 433645.97,4638609.54 434078.03,4638614.01 433899.19,4639744.15 433933,4640293.18 433557.15,4640850.23 433893.8,4640862.74 434204.09,4641017.77 435308.82,4641696.99 434957.46,4642139.05 434732.47,4641881.21 434126.76,4642164.73 433281.36,4641084.78 431888.22,4640883.74 432284.56,4641824.29 431164.99,4642290.97 430977.78,4642577.42</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[30658180.5353]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[938]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[343]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08298]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Vic]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Vic]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Vic]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Vic]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="938">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">446988.94,4642198.21 447137.68,4641855.61 446663.94,4641241.98 446203.4,4641329.16 445148.85,4638566 445081.09,4637970.55 444579.93,4637234.75 444339.61,4637202.78 444064.66,4636436.27 443985.01,4636356.26 443366.08,4637067.67 442720.22,4638165.72 442836.12,4638660.53 442218,4638826.75 442157.77,4638931.2 442381.16,4638997.79 442112.66,4640000 441862.54,4640523.2 442238.24,4640592.03 443387.11,4641492.55 443140.46,4642812.22 443299.77,4642922.95 443416.31,4642706.09 444404.56,4642532.37 445784.54,4641632.9 446079.26,4641716.3 446567.67,4642317.83 446988.94,4642198.21</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[15805275.7729]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[939]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[354]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08220]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Julia de Vilatorta]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Julia de Vilatorta]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Juli… de Vilatorta]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Juli… de Vilatorta]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="939">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">441862.54,4640523.2 442112.66,4640000 442381.16,4638997.79 442157.77,4638931.2 441069.17,4639378.37 441171.07,4639170.8 440456.38,4638656.66 440081.65,4638552.29 439407.14,4638820.38 439217.09,4638621.86 438704.27,4639289.96 438773.03,4639490.91 438913.46,4639350.21 439199.15,4639587.47 439149.04,4640000 439091.78,4640257.16 439256.95,4640263.26 439274.99,4640426 439033.87,4640951.86 439143.06,4641312.42 439572.19,4641190.31 440184.44,4641907.5 440467.1,4641479.2 440634,4641464.38 440644.76,4641607.15 441862.54,4640523.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[7230154.8973]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[940]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[358]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08246]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Santa Eugenia de Berga]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Santa Eugenia de Berga]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Santa EugŠnia de Berga]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Santa EugŠnia de Berga]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="940">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">411288.29,4585489.5 410831.97,4585396.78 409778.46,4584595.83 408789.11,4584365.88 408287.23,4584596.37 406962.55,4584855.81 406885.53,4584844 406568.02,4585224.7 407265.89,4586330.07 407125.59,4586503.12 407447.61,4587115.18 407751.14,4587298.27 411423.56,4587730.29 411962.84,4588138.3 412329.22,4588503.5 413024.25,4588371.62 414317.32,4588635.07 414812.55,4588537.78 415337.31,4588951.57 415858.96,4588462.04 415526.6,4587756.5 414344.08,4587315.11 413150.07,4586295.35 412731.21,4586184.23 412016.95,4586117.05 412000.75,4585819.69 411941.26,4585865.85 411500.42,4585974.43 411306.77,4585841.47 411288.29,4585489.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[18973828.19034]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[941]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[728]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08072]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Corbera de Llobregat]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Corbera de Llobregat]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Corbera de Llobregat]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Corbera de Llobregat]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="941">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">415656.39,4584526.53 416126.14,4584131.73 416067.34,4583505.57 415424.57,4583182.99 414900,4582028.94 414944.08,4581623.35 414670.11,4581623.35 414672.63,4581485.33 415302.86,4581118.27 415753.86,4581220.94 415078.09,4580779.84 414529.13,4580218.8 413167.78,4580106.95 412556.32,4580314.06 412314.43,4580788.84 411717.06,4583316.31 410764.77,4583745.91 410394.11,4583437.36 410312.94,4583238.55 409835.65,4582860.87 409509.52,4582727.61 408529.13,4583007.69 406482.96,4582901.99 406230.57,4582916.08 406089.73,4583822.42 406319.17,4584408.25 406885.53,4584844 406962.55,4584855.81 408287.23,4584596.37 408789.11,4584365.88 409778.46,4584595.83 410831.97,4585396.78 411288.29,4585489.5 411619.34,4585478.21 411690.47,4584988.21 411329.32,4584615.77 411389.51,4584502.91 411908.94,4584711.05 412143.01,4584450.84 412448.89,4584452.12 412664.05,4584771.37 413327.7,4585055.92 414482.3,4584046.07 415047.12,4583858.44 415656.39,4584526.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[23699082.80795]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[942]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[742]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08068]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Cervello]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Cervello]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Cervell¢]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Cervell¢]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="942">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">415656.39,4584526.53 415581.72,4584810.35 416366.6,4584731.04 417283.47,4585081.34 417859.09,4583718.61 418215.32,4583067.89 418196.37,4582564.78 418656.72,4581929.69 417477.63,4581497.04 416702.81,4581359.45 416429.28,4580758.71 415753.86,4581220.94 415302.86,4581118.27 414672.63,4581485.33 414670.11,4581623.35 414944.08,4581623.35 414900,4582028.94 415424.57,4583182.99 416067.34,4583505.57 416126.14,4584131.73 415656.39,4584526.53</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[9251675.4007]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[943]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[746]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08263]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Sant Vicenc dels Horts]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Sant Vicenc dels Horts]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Sant Vicen‡ dels Horts]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Sant Vicen‡ dels Horts]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="943">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">441862.54,4640523.2 440644.76,4641607.15 440634,4641464.38 440467.1,4641479.2 440184.44,4641907.5 440187.98,4642053.63 440515.89,4642013.93 440441.8,4642545.73 440633.17,4643285.92 441049.77,4643167.58 441254.05,4642777.24 442022.62,4643260.09 443140.46,4642812.22 443387.11,4641492.55 442238.24,4640592.03 441862.54,4640523.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[5814432.04205]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[944]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[945]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08037]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[24]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Calldetenes]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Calldetenes]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Calldetenes]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Calldetenes]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="944">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">403250.389,4689705.859 404197.01,4690132.65 404413.28,4689554.17 404216.94,4688645.06 404450.84,4688385.63 404395.82,4688139.7 404099.61,4687520.54 404155.68,4686483.61 404694.9,4684624.32 404177.84,4684554.32 403927.26,4684226.89 403887.4,4684054.21 403362.39,4683950.84 402667.68,4683947.35 402220.31,4684165.96 401691.542,4684197.145 401474.23,4684668.99 401435.84,4685568.76 401624.76,4685836.32 401942.75,4685861.17 402280.43,4686204.6 402293.22,4687524.27 402587.55,4688927.92 402766.7,4689443.79 403250.389,4689705.859</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[12428585.69332]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[945]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[947]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[25913]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[15]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[25]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Riu de Cerdanya]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Riu de Cerdanya]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Riu de Cerdanya]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Riu de Cerdanya]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+<gml:featureMember>
+
+<testtype gid="945">
+<gml:polygonProperty>
+<gml:Polygon srsName="EPSG:23031">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:coordinates cs="," decimal="." ts=" ">415581.72,4584810.35 415656.39,4584526.53 415047.12,4583858.44 414482.3,4584046.07 413327.7,4585055.92 412664.05,4584771.37 412448.89,4584452.12 412143.01,4584450.84 411908.94,4584711.05 411389.51,4584502.91 411329.32,4584615.77 411690.47,4584988.21 411619.34,4585478.21 411288.29,4585489.5 411306.77,4585841.47 411500.42,4585974.43 411941.26,4585865.85 412000.75,4585819.69 412151.77,4585765.57 413819.51,4585812.28 414550.64,4585560.37 415055.42,4585542.98 415014.41,4585289.76 415252.21,4585127.51 415581.72,4584810.35</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonProperty>
+<wfs:AREA><![CDATA[4848437.33785]]></wfs:AREA>
+<wfs:MUNICIPI_><![CDATA[946]]></wfs:MUNICIPI_>
+<wfs:MUNICIPI_I><![CDATA[946]]></wfs:MUNICIPI_I>
+<wfs:CODI_INE><![CDATA[08905]]></wfs:CODI_INE>
+<wfs:COMARCA><![CDATA[11]]></wfs:COMARCA>
+<wfs:PROVINCIA><![CDATA[08]]></wfs:PROVINCIA>
+<wfs:MUN7BIT><![CDATA[Palma de Cervello, la]]></wfs:MUN7BIT>
+<wfs:CMUN7BIT><![CDATA[Palma de Cervello, la]]></wfs:CMUN7BIT>
+<wfs:MUN850><![CDATA[Palma de Cervell¢, la]]></wfs:MUN850>
+<wfs:CMUN850><![CDATA[Palma de Cervell¢, la]]></wfs:CMUN850></testtype>
+</gml:featureMember>
+</collection>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/Municipis_NOschema.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.xsd	(revision 42196)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><xs:schema targetNamespace="http://www.gvsig.com/cit" xmlns:cit="http://www.gvsig.com/cit" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.1.2"><xs:import namespace="http://www.opengis.net/gml" schemaLocation="feature.xsd"/><xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="lines_Type"><xs:complexContent><xs:extension base="gml:AbstractFeatureType"><xs:sequence><xs:element name="the_geom" minOccurs="0" nillable="true" type="gml:GeometryPropertyType"/><xs:element name="ENTITY" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="LAYER" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="LEVEL" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="ELEVATION" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="COLOR" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="ID" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="ID_PONT" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="NOMBRE" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="ANCHO_C" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="CARRIL_D" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="CARRIL_I" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="ANCHO_M" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="ARCEN" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="TUNEL" minOccurs="0" nillable="true" type="xs:boolean"/><xs:element name="URBANA" minOccurs="0" nillable="true" type="xs:boolean"/><xs:element name="TIPO" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="ANCHO_BUF" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="FROM_NODE" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="TO_NODE" minOccurs="0" nillable="true" type="xs:double"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType><xs:element name="lines" type="cit:lines_Type" substitutionGroup="gml:_Feature"/></xs:schema><!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.xsd	(revision 42196)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><xs:schema targetNamespace="http://www.gvsig.com/cit" xmlns:cit="http://www.gvsig.com/cit" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.1.2"><xs:import namespace="http://www.opengis.net/gml" schemaLocation="feature.xsd"/><xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="polygons_Type"><xs:complexContent><xs:extension base="gml:AbstractFeatureType"><xs:sequence><xs:element name="the_geom" minOccurs="0" nillable="true" type="gml:GeometryPropertyType"/><xs:element name="level" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="color" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="entity" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="layer" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="mslink_dmr" minOccurs="0" nillable="true" type="xs:double"/><xs:element name="tipo" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="codigo" minOccurs="0" nillable="true" type="xs:string"/><xs:element name="elevation" minOccurs="0" nillable="true" type="xs:double"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType><xs:element name="polygons" type="cit:polygons_Type" substitutionGroup="gml:_Feature"/></xs:schema><!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.gml	(revision 42196)
@@ -0,0 +1,1527 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><gml:FeatureCollection xmlns:cit="http://www.gvsig.com/cit" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gvsig.com/cit GML-lines.xsd"><gml:boundedBy><gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#23030"><gml:coordinates decimal="." cs="," ts=" ">627820.0,4191291.0 797117.0,4519166.0</gml:coordinates></gml:Box></gml:boundedBy><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+685442.45,4209825.64 685445.64,4209832.3 
+        685450.18,4209842.27 685452.54,4209848.61 
+        685454.35,4209855.13 685454.85,4209858.27 
+        685455.09,4209862.0 685454.91,4209874.11 
+        685454.53,4209898.4 685454.28,4209907.47 
+        685454.16,4209919.58 685454.28,4209927.52 
+        685454.59,4209935.16 685455.15,4209941.24 
+        685455.71,4209947.12 685456.71,4209953.46 
+        685458.2,4209959.42 685460.37,4209966.78 
+        685463.29,4209976.35 685467.33,4209986.88 
+        685472.11,4209999.24 685481.62,4210024.05 
+        685492.81,4210052.4 685505.24,4210084.23 
+        685518.53,4210118.29 685532.01,4210152.78 
+        685546.0,4210188.26 685558.49,4210220.89 
+        685567.62,4210243.65 685580.8,4210277.59 
+        685595.08,4210313.87 685611.48,4210355.63 
+        685629.36,4210402.89 685636.82,4210425.32 
+        685641.98,4210442.14 685647.76,4210465.16 
+        685651.17,4210482.16 685654.96,4210501.95 
+        685659.5,4210529.06 685666.03,4210565.48 
+        685673.49,4210609.46 685679.64,4210645.81 
+        685687.96,4210693.82 685694.74,4210732.84 
+        685703.62,4210787.18 685705.1,4210802.29 
+        685706.78,4210822.51 685707.28,4210846.57 
+        685707.29,4210885.98 685706.54,4210924.01 
+        685706.17,4210959.12 685705.62,4210997.7 
+        685705.12,4211037.34 685705.05,4211052.13 
+        685705.11,4211060.57 685705.36,4211065.16 
+        685705.98,4211071.62 685706.85,4211076.71 
+        685707.65,4211079.79 685709.46,4211085.82 
+        685712.01,4211092.34 685715.33,4211099.63 
+        685717.79,4211103.89 685721.01,4211108.76 
+        685726.04,4211114.97 685733.19,4211121.81 
+        685741.13,4211127.81 685762.0,4211141.13 
+        685790.6,4211159.76 685819.92,4211178.05 
+        685840.13,4211191.4 685876.04,4211214.73 
+        685910.26,4211236.36 685947.84,4211260.81 
+        685970.7,4211275.18 685978.54,4211280.33 
+        685984.57,4211284.24 685990.04,4211287.91 
+        685995.32,4211291.82 686000.5,4211296.25 
+        686006.29,4211301.77 686011.51,4211307.92 
+        686015.49,4211313.64 686018.54,4211319.1 
+        686021.77,4211326.0 686024.38,4211332.37 
+        686025.68,4211337.71 686026.68,4211342.12 
+        686027.24,4211347.59 686027.55,4211353.28 
+        686027.49,4211359.18 686027.24,4211365.01 
+        686026.37,4211371.47 686025.13,4211377.54 
+        686022.95,4211386.23 686018.55,4211400.12 
+        686012.83,4211417.17 686006.31,4211433.05 
+        686001.96,4211441.8 685996.38,4211450.98 
+        685990.48,4211459.42 685982.62,4211470.37 
+        685977.53,4211477.95 685973.24,4211484.78 
+        685970.06,4211491.12 685967.28,4211497.98 
+        685965.48,4211503.69 685963.98,4211509.47 
+        685962.55,4211515.8 685962.06,4211521.7 
+        685961.87,4211527.75 685962.0,4211535.89 
+        685962.74,4211544.27 685964.79,4211553.55 
+        685968.4,4211565.73 685976.23,4211587.05 
+        685987.17,4211614.13 686000.84,4211647.18 
+        686005.87,4211656.89 686010.28,4211663.85 
+        686015.32,4211669.62 686020.98,4211674.96 
+        686027.32,4211679.12 686034.91,4211682.97 
+        686043.53,4211686.18 686050.06,4211687.99 
+        686055.1,4211688.79 686061.23,4211689.03 
+        686068.94,4211688.72 686074.1,4211687.98 
+        686081.25,4211686.17 686087.69,4211683.94 
+        686094.72,4211680.71 686102.31,4211676.73 
+        686116.9,4211668.17 686123.41,4211664.76 
+        686128.88,4211662.15 686136.47,4211659.23 
+        686144.84,4211656.69 686152.18,4211655.2 
+        686160.14,4211654.09 686169.28,4211653.53 
+        686175.29,4211653.78 686182.69,4211654.71 
+        686191.02,4211656.89 686202.4,4211660.61 
+        686247.0,4211676.13 686294.0,4211692.61 
+        686339.89,4211708.57 686374.31,4211720.73 
+        686427.25,4211739.29 686518.08,4211771.05 
+        686623.13,4211807.59 686707.63,4211837.12 
+        686801.38,4211869.74 686866.31,4211892.58 
+        686889.95,4211900.29 686899.83,4211903.21 
+        686909.04,4211905.13 686917.55,4211906.13 
+        686924.77,4211906.25 686932.54,4211905.88 
+        686940.59,4211904.95 686948.37,4211902.71 
+        686954.65,4211900.35 686960.06,4211897.5 
+        686965.56,4211893.86 686971.47,4211888.95 
+        686975.57,4211884.85 686980.05,4211878.89 
+        686984.76,4211871.46 686989.85,4211862.76 
+        687003.83,4211836.83 687024.51,4211797.26 
+        687038.8,4211769.41 687050.79,4211747.02 
+        687063.59,4211722.16 687070.43,4211709.98 
+        687074.96,4211703.48 687081.43,4211695.03 
+        687088.44,4211686.91 687099.2,4211675.98 
+        687110.31,4211665.63 687115.41,4211661.53 
+        687120.88,4211657.81 687124.47,4211655.6 
+        687130.13,4211652.68 687136.16,4211650.14 
+        687141.2,4211648.52 687146.05,4211647.47 
+        687151.34,4211646.66 687155.94,4211646.22 
+        687162.71,4211646.04 687168.54,4211646.54 
+        687174.01,4211647.35 687179.85,4211649.02 
+        687186.19,4211651.38 687191.73,4211653.43 
+        687203.46,4211659.44 687215.77,4211667.14 
+        687237.09,4211680.73 687250.24,4211688.9 
+        687256.52,4211692.57 687263.36,4211695.73 
+        687268.64,4211697.85 687275.48,4211699.59 
+        687285.04,4211701.62 687303.26,4211705.23 
+        687347.55,4211713.78 687371.19,4211718.48 
+        687379.77,4211720.34 687385.62,4211722.02 
+        687389.97,4211723.69 687394.07,4211725.43 
+        687397.3,4211727.1 687401.09,4211729.4 
+        687404.7,4211731.88 687408.31,4211734.74 
+        687413.28,4211739.4 687419.12,4211745.28 
+        687432.18,4211758.95 687440.92,4211767.43 
+        687447.08,4211772.71 687451.8,4211776.12 
+        687455.28,4211778.36 687460.94,4211781.34 
+        687467.66,4211784.2 687475.9,4211786.54 
+        687483.11,4211788.22 687491.2,4211788.9 
+        687497.29,4211789.27 687503.6,4211789.08 
+        687510.81,4211788.46 687518.03,4211787.22 
+        687526.05,4211785.17 687533.57,4211782.81 
+        687539.08,4211780.63 687547.41,4211776.47 
+        687557.8,4211770.39 687580.23,4211756.79 
+        687620.42,4211732.47 687657.45,4211710.51 
+        687693.86,4211688.98 687736.42,4211664.12 
+        687766.42,4211646.38 687777.99,4211639.99 
+        687791.39,4211633.11 687797.17,4211630.51 
+        687804.69,4211627.77 687811.53,4211625.97 
+        687818.74,4211624.67 687828.59,4211623.94 
+        687838.98,4211623.69 687848.8,4211624.19 
+        687857.51,4211625.43 687867.56,4211627.97 
+        687877.26,4211631.7 687885.91,4211635.55 
+        687894.09,4211639.88 687901.8,4211644.53 
+        687912.81,4211651.74 687926.27,4211660.97 
+        687946.23,4211674.45 687974.31,4211693.56 
+        687982.6,4211698.98 687990.62,4211703.45 
+        687997.08,4211706.68 688003.92,4211709.04 
+        688009.77,4211710.53 688015.61,4211711.34 
+        688021.4,4211711.58 688027.8,4211711.46 
+        688034.24,4211711.08 688040.27,4211710.4 
+        688046.11,4211709.16 688053.08,4211707.05 
+        688061.29,4211703.76 688067.17,4211701.04 
+        688073.14,4211697.62 688077.36,4211694.83 
+        688083.01,4211690.44 688089.04,4211684.91 
+        688093.02,4211680.07 688097.55,4211674.24 
+        688101.16,4211668.46 688104.2,4211662.69 
+        688107.61,4211653.76 688110.23,4211645.62 
+        688117.74,4211617.83 688126.86,4211585.46 
+        688135.74,4211553.45 688141.28,4211533.13 
+        688142.4,4211528.09 688143.39,4211522.01 
+        688143.83,4211516.67 688143.7,4211511.36 
+        688143.21,4211505.58 688142.09,4211500.24 
+        688140.15,4211494.58 688137.64,4211489.57 
+        688134.18,4211484.32 688129.23,4211477.66 
+        688123.45,4211470.89 688118.35,4211465.3 
+        688113.65,4211459.68 688110.79,4211455.39 
+        688107.55,4211449.74 688104.75,4211444.15 
+        688103.26,4211440.3 688102.39,4211437.16 
+        688101.96,4211433.12 688101.52,4211429.27 
+        688101.58,4211423.68 688101.77,4211419.77 
+        688102.38,4211415.31 688103.88,4211409.35 
+        688106.24,4211402.83 688111.59,4211391.55 
+        688117.93,4211378.88 688133.52,4211348.17 
+        688143.77,4211327.58 688160.61,4211294.7 
+        688166.81,4211283.94 688171.72,4211276.55 
+        688176.44,4211270.96 688181.05,4211266.3 
+        688186.08,4211262.14 688190.61,4211259.42 
+        688197.45,4211255.82 688205.66,4211252.53 
+        688212.63,4211250.54 688222.87,4211248.32 
+        688237.18,4211246.09 688260.72,4211243.3 
+        688277.19,4211241.01 688288.69,4211238.46 
+        688301.78,4211235.05 688309.54,4211231.96 
+        688318.12,4211227.61 688329.94,4211220.4 
+        688345.15,4211210.11 688361.75,4211198.94 
+        688414.62,4211163.09 688457.52,4211133.97 
+        688473.81,4211123.29 688481.15,4211117.95 
+        688487.8,4211112.54 688491.21,4211108.77 
+        688495.07,4211104.17 688499.05,4211098.71 
+        688501.72,4211094.3 688504.26,4211089.29 
+        688507.19,4211082.33 688509.36,4211075.69 
+        688511.97,4211065.34 688513.9,4211056.34 
+        688516.5,4211043.7 688518.06,4211037.24 
+        688519.68,4211031.8 688521.79,4211026.15 
+        688524.22,4211021.3 688526.57,4211017.15 
+        688530.55,4211012.25 688534.47,4211007.9 
+        688540.55,4211002.52 688546.83,4210997.3 
+        688570.02,4210981.48 688602.57,4210959.46 
+        688625.68,4210944.03 688634.88,4210938.75 
+        688644.75,4210933.61 688652.83,4210930.19 
+        688659.92,4210927.71 688665.64,4210926.34 
+        688671.54,4210925.54 688677.19,4210925.29 
+        688684.16,4210925.47 688690.06,4210926.34 
+        688696.06,4210927.7 688702.46,4210929.94 
+        688708.56,4210932.73 688715.12,4210936.71 
+        688721.65,4210941.3 688726.38,4210945.4 
+        688731.29,4210950.43 688736.39,4210956.46 
+        688741.36,4210963.32 688746.02,4210971.02 
+        688752.55,4210985.16 688762.43,4211009.48 
+        688776.16,4211042.4 688789.34,4211074.67 
+        688796.04,4211089.3 688800.39,4211097.31 
+        688802.99,4211101.45 688806.47,4211106.48 
+        688811.63,4211112.13 688817.23,4211117.35 
+        688823.92,4211122.48 688829.89,4211125.9 
+        688836.3,4211129.0 688842.2,4211131.24 
+        688848.67,4211133.17 688853.89,4211134.53 
+        688863.38,4211135.88 688871.9,4211136.99 
+        688882.22,4211137.86 688899.31,4211138.67 
+        688938.64,4211140.72 688963.03,4211142.21 
+        688974.03,4211142.21 688979.2,4211141.83 
+        688985.91,4211140.84 688990.76,4211139.6 
+        688996.78,4211137.61 689002.68,4211134.94 
+        689009.58,4211131.34 689017.02,4211126.46 
+        689022.62,4211122.42 689029.64,4211116.52 
+        689034.17,4211112.19 689037.92,4211107.63 
+        689042.19,4211101.39 689045.11,4211095.74 
+        689049.02,4211087.0 689052.37,4211077.88 
+        689054.49,4211070.61 689064.48,4211028.67 
+        689068.77,4211009.6 689072.5,4210995.94 
+        689075.98,4210984.32 689080.76,4210972.12 
+        689085.73,4210960.51 689090.76,4210950.34 
+        689097.23,4210939.35 689109.9,4210918.32 
+        689120.83,4210900.23 689126.55,4210890.05 
+        689132.52,4210878.37 689141.52,4210861.39 
+        689146.44,4210853.01 689151.41,4210844.93 
+        689160.61,4210832.84 689169.24,4210823.54 
+        689175.77,4210817.45 689189.94,4210806.12 
+        689198.52,4210800.78 689206.35,4210796.8 
+        689214.5,4210793.76 689224.25,4210791.16 
+        689233.33,4210789.36 689243.69,4210788.18 
+        689251.77,4210787.93 689260.6,4210788.37 
+        689271.58,4210789.98 689283.52,4210792.52 
+        689295.89,4210795.57 689343.54,4210807.48 
+        689383.49,4210818.14 689428.28,4210829.74 
+        689468.72,4210839.91 689484.6,4210844.37 
+        689500.81,4210849.7 689523.2,4210858.09 
+        689552.52,4210870.32 689609.49,4210894.01 
+        689641.29,4210907.35 689650.68,4210911.63 
+        689657.02,4210915.05 689661.09,4210917.27 
+        689665.38,4210920.26 689669.61,4210923.8 
+        689673.09,4210927.65 689676.93,4210932.95 
+        689680.97,4210940.41 689685.57,4210950.03 
+        689699.31,4210982.99 689711.61,4211011.72 
+        689728.01,4211050.55 689735.41,4211066.84 
+        689739.07,4211073.61 689741.81,4211077.83 
+        689746.41,4211083.48 689750.45,4211087.77 
+        689754.84,4211091.15 689760.38,4211094.32 
+        689767.78,4211097.73 689782.58,4211103.7 
+        689810.88,4211114.74 689831.77,4211123.12 
+        689857.07,4211133.36 689883.65,4211145.14 
+        689887.45,4211146.63 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12106.0</cit:ID>
+<cit:ID_PONT></cit:ID_PONT>
+<cit:NOMBRE>CV-950</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1390.0</cit:FROM_NODE>
+<cit:TO_NODE>1607.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+682619.4,4214407.51 682627.47,4214397.34 
+        682637.04,4214385.27 682653.65,4214366.59 
+        682669.84,4214350.52 682676.29,4214344.84 
+        682679.89,4214342.24 682683.67,4214339.72 
+        682687.03,4214337.63 682691.56,4214335.62 
+        682696.77,4214333.69 682702.64,4214332.43 
+        682709.27,4214331.34 682717.08,4214330.5 
+        682727.07,4214329.75 682755.64,4214328.25 
+        682763.54,4214327.58 682768.57,4214326.83 
+        682774.7,4214325.65 682781.67,4214323.89 
+        682790.14,4214321.38 682802.45,4214316.95 
+        682810.76,4214313.6 682825.09,4214307.32 
+        682832.98,4214303.38 682838.94,4214299.77 
+        682845.55,4214295.18 682852.26,4214289.23 
+        682860.32,4214281.26 682869.11,4214272.81 
+        682873.9,4214269.04 682878.77,4214265.68 
+        682883.36,4214262.95 682888.9,4214260.1 
+        682896.7,4214256.83 682905.18,4214254.14 
+        682921.86,4214249.96 682928.66,4214248.2 
+        682934.37,4214246.44 682940.92,4214244.17 
+        682947.3,4214241.49 682956.34,4214236.98 
+        682969.18,4214230.11 682991.4,4214217.8 
+        683002.03,4214211.1 683007.24,4214207.24 
+        683010.84,4214204.06 683014.79,4214199.28 
+        683018.9,4214193.41 683022.24,4214187.59 
+        683026.61,4214178.28 683032.48,4214163.44 
+        683049.34,4214117.8 683068.38,4214064.12 
+        683087.4,4214011.12 683102.25,4213966.4 
+        683117.77,4213910.21 683125.14,4213884.22 
+        683129.59,4213871.64 683134.55,4213859.32 
+        683146.03,4213834.79 683157.43,4213813.96 
+        683170.02,4213791.82 683193.92,4213750.96 
+        683204.23,4213732.4 683209.52,4213722.09 
+        683212.0,4213716.79 683213.46,4213712.86 
+        683217.24,4213702.55 683220.93,4213689.88 
+        683224.62,4213676.88 683227.89,4213662.63 
+        683234.01,4213633.4 683242.07,4213595.82 
+        683251.04,4213553.85 683260.76,4213510.09 
+        683268.9,4213472.7 683281.39,4213415.25 
+        683293.31,4213361.24 683296.24,4213348.14 
+        683298.1,4213341.38 683300.77,4213334.13 
+        683302.86,4213329.45 683306.39,4213322.66 
+        683315.03,4213307.91 683334.5,4213276.93 
+        683371.32,4213219.22 683401.93,4213170.75 
+        683438.83,4213111.79 683446.11,4213099.87 
+        683450.73,4213090.06 683452.91,4213083.86 
+        683454.42,4213078.16 683455.1,4213072.2 
+        683455.35,4213065.92 683455.18,4213060.38 
+        683454.26,4213053.88 683452.92,4213045.58 
+        683452.33,4213038.54 683452.25,4213034.26 
+        683452.33,4213029.9 683452.92,4213024.54 
+        683454.09,4213020.21 683455.77,4213014.76 
+        683457.28,4213011.16 683459.79,4213006.88 
+        683463.08,4213002.7 683464.35,4213001.49 
+        683465.73,4213000.37 683469.09,4212997.77 
+        683473.54,4212995.25 683477.9,4212993.91 
+        683482.52,4212993.15 683487.3,4212992.99 
+        683493.85,4212993.24 683501.91,4212994.75 
+        683515.0,4212998.52 683533.34,4213004.02 
+        683541.9,4213006.54 683548.53,4213008.05 
+        683553.55,4213008.63 683558.25,4213008.8 
+        683563.96,4213008.47 683569.25,4213007.63 
+        683574.2,4213005.95 683580.16,4213003.44 
+        683585.59,4213000.19 683590.38,4212996.25 
+        683595.67,4212991.05 683600.03,4212985.77 
+        683603.97,4212979.5 683607.41,4212972.87 
+        683609.93,4212966.92 683611.94,4212960.47 
+        683613.12,4212955.02 683615.54,4212942.64 
+        683617.89,4212931.83 683620.65,4212922.3 
+        683623.59,4212914.84 683626.69,4212908.55 
+        683629.88,4212903.52 683638.66,4212892.69 
+        683652.51,4212877.01 683662.66,4212866.53 
+        683667.87,4212860.24 683673.24,4212852.86 
+        683678.78,4212845.18 683684.65,4212834.95 
+        683691.43,4212821.74 683692.61,4212819.39 
+        683697.14,4212810.08 683711.24,4212781.68 
+        683724.9,4212753.63 683743.27,4212715.1 
+        683761.54,4212677.37 683771.45,4212657.09 
+        683783.19,4212632.7 683799.37,4212599.71 
+        683804.82,4212588.61 683813.3,4212573.27 
+        683824.88,4212553.65 683852.14,4212506.93 
+        683882.41,4212457.27 683917.58,4212399.84 
+        683937.77,4212365.57 683955.9,4212334.55 
+        683982.82,4212285.38 684005.72,4212242.16 
+        684031.05,4212195.44 684065.86,4212130.88 
+        684085.57,4212094.49 684089.51,4212087.02 
+        684096.56,4212073.86 684107.79,4212052.53 
+        684126.25,4212018.37 684139.27,4211995.31 
+        684148.38,4211980.62 684156.44,4211968.54 
+        684163.83,4211959.41 684183.95,4211935.88 
+        684221.53,4211894.09 684253.22,4211858.85 
+        684258.59,4211852.48 684263.04,4211847.19 
+        684266.87,4211841.63 684271.49,4211834.17 
+        684274.35,4211828.64 684277.28,4211821.76 
+        684279.63,4211814.55 684281.23,4211807.84 
+        684283.16,4211798.85 684285.0,4211785.94 
+        684287.69,4211766.49 684291.55,4211739.88 
+        684293.22,4211729.52 684294.65,4211721.31 
+        684297.04,4211713.39 684299.22,4211707.35 
+        684302.04,4211701.73 684304.43,4211697.36 
+        684307.66,4211692.58 684311.62,4211687.48 
+        684316.1,4211682.69 684321.41,4211677.59 
+        684330.68,4211668.96 684344.93,4211657.54 
+        684357.63,4211648.28 684368.99,4211640.06 
+        684395.21,4211622.89 684418.45,4211608.58 
+        684444.64,4211592.06 684496.9,4211559.58 
+        684524.21,4211542.35 684538.23,4211533.97 
+        684548.01,4211529.04 684555.9,4211525.86 
+        684561.02,4211524.26 684566.06,4211523.43 
+        684572.36,4211522.84 684582.68,4211522.67 
+        684618.82,4211523.76 684628.14,4211523.76 
+        684634.27,4211523.51 684643.25,4211522.67 
+        684652.99,4211520.99 684665.95,4211518.24 
+        684681.73,4211513.62 684705.15,4211506.25 
+        684722.55,4211499.74 684730.19,4211496.13 
+        684736.74,4211492.11 684739.68,4211490.09 
+        684749.67,4211481.29 684759.87,4211470.61 
+        684771.21,4211457.61 684792.1,4211434.33 
+        684802.74,4211421.27 684810.8,4211410.63 
+        684818.91,4211397.94 684824.28,4211388.46 
+        684829.49,4211378.15 684837.2,4211360.65 
+        684852.04,4211324.98 684856.56,4211316.04 
+        684858.66,4211312.26 684861.94,4211307.57 
+        684865.71,4211302.79 684872.76,4211294.57 
+        684888.45,4211277.41 684902.19,4211263.36 
+        684908.49,4211257.99 684915.04,4211253.3 
+        684920.58,4211249.52 684926.66,4211245.95 
+        684933.88,4211242.18 684939.75,4211240.0 
+        684947.3,4211237.65 684959.47,4211234.47 
+        684984.07,4211229.02 684998.45,4211225.94 
+        685024.14,4211219.4 685038.91,4211214.87 
+        685047.26,4211211.72 685055.15,4211207.86 
+        685061.19,4211203.83 685066.65,4211199.06 
+        685070.85,4211194.36 685074.88,4211188.74 
+        685079.24,4211181.78 685081.17,4211178.12 
+        685084.94,4211167.98 685090.57,4211151.46 
+        685101.46,4211120.35 685108.59,4211103.02 
+        685113.3,4211093.04 685117.99,4211084.68 
+        685123.95,4211075.96 685131.17,4211066.32 
+        685137.19,4211060.05 685144.92,4211052.01 
+        685153.87,4211044.0 685168.32,4211032.15 
+        685188.02,4211017.76 685205.48,4211005.94 
+        685221.14,4210995.33 685229.03,4210989.38 
+        685233.56,4210985.44 685237.76,4210982.0 
+        685242.96,4210977.14 685249.51,4210970.6 
+        685256.8,4210963.0 685266.2,4210952.52 
+        685299.75,4210916.09 685347.64,4210864.0 
+        685390.42,4210817.19 685419.18,4210785.99 
+        685426.9,4210776.68 685431.26,4210770.98 
+        685433.95,4210766.7 685437.03,4210760.31 
+        685440.3,4210752.51 685442.32,4210745.72 
+        685443.83,4210737.17 685445.26,4210726.43 
+        685447.19,4210701.74 685449.96,4210667.07 
+        685451.47,4210651.83 685452.81,4210643.7 
+        685454.32,4210636.91 685457.26,4210627.66 
+        685460.86,4210618.88 685465.81,4210610.16 
+        685474.71,4210595.49 685488.36,4210576.17 
+        685505.49,4210551.27 685529.39,4210516.26 
+        685535.67,4210506.23 685540.37,4210497.18 
+        685543.31,4210490.39 685546.25,4210481.92 
+        685548.66,4210473.25 685550.51,4210465.78 
+        685551.26,4210459.75 685551.68,4210453.12 
+        685552.02,4210446.12 685552.02,4210439.58 
+        685551.68,4210433.29 685550.68,4210426.67 
+        685548.91,4210418.79 685546.73,4210412.77 
+        685540.61,4210397.68 685529.54,4210371.89 
+        685512.61,4210333.46 685495.83,4210294.93 
+        685474.11,4210243.85 685450.53,4210189.51 
+        685422.45,4210125.01 685412.88,4210102.79 
+        685408.43,4210091.47 685405.93,4210084.13 
+        685402.9,4210075.75 685399.88,4210066.36 
+        685397.95,4210058.31 685396.28,4210047.3 
+        685395.36,4210039.5 685394.86,4210032.55 
+        685394.77,4210022.99 685395.95,4210009.66 
+        685397.04,4209999.52 685398.3,4209990.21 
+        685400.97,4209972.33 685405.0,4209945.0 
+        685409.95,4209914.53 685413.48,4209895.19 
+        685415.07,4209886.75 685417.42,4209878.53 
+        685419.77,4209870.73 685423.05,4209862.35 
+        685426.48,4209854.66 685429.76,4209847.62 
+        685434.2,4209839.75 685438.57,4209832.21 
+        685442.45,4209825.64 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12187.0</cit:ID>
+<cit:ID_PONT>3076</cit:ID_PONT>
+<cit:NOMBRE>CV-925</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1259.0</cit:FROM_NODE>
+<cit:TO_NODE>1390.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+679289.43,4207945.31 679295.33,4207945.36 
+        679300.3,4207945.75 679304.6,4207946.14 
+        679308.6,4207946.74 679313.49,4207947.82 
+        679318.87,4207949.65 679323.02,4207951.33 
+        679326.66,4207953.19 679331.99,4207955.86 
+        679336.39,4207958.57 679340.39,4207960.99 
+        679347.19,4207965.22 679356.09,4207971.84 
+        679399.05,4208005.57 679423.1,4208024.36 
+        679500.43,4208083.05 679510.95,4208090.68 
+        679518.54,4208095.99 679526.84,4208101.42 
+        679536.52,4208107.14 679546.2,4208112.17 
+        679558.64,4208118.09 679577.89,4208126.66 
+        679609.84,4208140.34 679630.74,4208149.91 
+        679639.83,4208154.05 679644.37,4208156.31 
+        679651.38,4208159.76 679659.78,4208164.69 
+        679666.88,4208169.03 679690.47,4208183.42 
+        679723.25,4208203.25 679790.97,4208245.25 
+        679818.25,4208261.95 679837.51,4208273.58 
+        679851.04,4208281.77 679861.31,4208288.47 
+        679868.42,4208292.42 679874.25,4208295.48 
+        679879.97,4208298.04 679885.31,4208299.92 
+        679892.4,4208302.07 679910.08,4208305.42 
+        679950.54,4208313.5 679961.15,4208315.46 
+        679977.35,4208319.31 680002.54,4208326.41 
+        680028.39,4208334.59 680041.79,4208339.21 
+        680049.99,4208342.07 680059.47,4208345.52 
+        680064.61,4208347.88 680071.22,4208351.54 
+        680079.52,4208356.27 680094.91,4208365.63 
+        680113.87,4208378.16 680133.7,4208391.36 
+        680141.9,4208396.39 680147.92,4208399.85 
+        680153.85,4208402.9 680161.45,4208405.86 
+        680171.3,4208409.39 680192.73,4208416.1 
+        680222.84,4208425.36 680253.02,4208434.32 
+        680265.07,4208437.87 680271.79,4208439.55 
+        680280.98,4208441.13 680287.0,4208442.11 
+        680300.27,4208443.28 680324.86,4208445.06 
+        680358.45,4208447.23 680420.52,4208451.68 
+        680456.7,4208454.82 680479.22,4208457.49 
+        680544.65,4208469.9 680602.98,4208480.95 
+        680637.92,4208489.71 680710.69,4208509.14 
+        680797.25,4208532.31 680891.4,4208558.04 
+        680959.37,4208577.53 680968.55,4208579.6 
+        680976.95,4208580.68 680986.23,4208581.18 
+        681012.87,4208580.29 681061.34,4208575.95 
+        681135.27,4208569.94 681189.53,4208565.99 
+        681221.28,4208564.61 681269.92,4208563.13 
+        681306.96,4208563.33 681323.43,4208562.83 
+        681335.38,4208562.14 681346.64,4208560.86 
+        681356.32,4208559.38 681372.48,4208556.44 
+        681408.04,4208549.73 681463.23,4208538.89 
+        681499.03,4208533.0 681508.22,4208531.81 
+        681518.59,4208531.42 681531.13,4208531.71 
+        681539.88,4208532.41 681549.56,4208533.98 
+        681562.3,4208537.14 681613.63,4208550.35 
+        681733.76,4208581.0 681816.32,4208602.89 
+        681835.56,4208607.4 681849.49,4208610.56 
+        681858.18,4208612.14 681865.59,4208612.93 
+        681874.85,4208613.22 681884.33,4208613.13 
+        681891.84,4208612.34 681905.56,4208610.17 
+        681976.72,4208599.9 682048.07,4208589.07 
+        682137.7,4208575.75 682214.49,4208564.03 
+        682246.01,4208559.51 682260.33,4208558.03 
+        682272.68,4208557.24 682285.91,4208556.94 
+        682310.01,4208557.83 682367.77,4208560.2 
+        682418.76,4208562.27 682447.09,4208562.95 
+        682464.52,4208563.53 682475.59,4208564.52 
+        682488.43,4208566.2 682508.18,4208569.16 
+        682553.28,4208579.3 682622.88,4208594.39 
+        682665.29,4208604.24 682675.46,4208607.0 
+        682684.06,4208609.96 682690.28,4208612.52 
+        682695.71,4208615.58 682700.55,4208618.74 
+        682705.75,4208622.74 682711.19,4208627.18 
+        682716.62,4208633.0 682728.27,4208647.1 
+        682750.1,4208676.31 682789.36,4208726.86 
+        682828.15,4208777.72 682876.41,4208840.69 
+        682918.74,4208895.95 682932.46,4208912.9 
+        682938.88,4208920.69 682944.02,4208925.73 
+        682951.13,4208932.14 682963.53,4208942.65 
+        682981.71,4208957.05 683017.16,4208984.96 
+        683036.86,4209000.39 683045.95,4209007.0 
+        683051.97,4209010.85 683057.6,4209013.71 
+        683063.33,4209016.27 683069.95,4209018.44 
+        683076.08,4209020.02 683083.16,4209020.89 
+        683101.04,4209021.29 683130.94,4209021.09 
+        683143.65,4209021.47 683150.47,4209022.06 
+        683158.08,4209023.05 683164.4,4209023.93 
+        683172.69,4209025.91 683188.07,4209030.85 
+        683209.39,4209039.23 683264.28,4209061.4 
+        683276.98,4209067.01 683284.09,4209070.26 
+        683288.34,4209072.44 683291.5,4209074.61 
+        683295.65,4209077.57 683299.31,4209080.43 
+        683303.85,4209084.67 683307.6,4209088.91 
+        683312.64,4209094.54 683328.22,4209115.7 
+        683343.02,4209135.8 683347.47,4209141.52 
+        683352.61,4209147.34 683357.15,4209151.69 
+        683362.29,4209155.53 683367.68,4209159.15 
+        683375.29,4209162.7 683384.18,4209166.15 
+        683405.97,4209172.44 683456.05,4209186.26 
+        683492.53,4209196.58 683511.99,4209202.1 
+        683557.39,4209214.62 683578.27,4209220.03 
+        683589.92,4209222.5 683601.48,4209224.57 
+        683611.55,4209225.76 683624.89,4209226.84 
+        683641.88,4209227.83 683672.95,4209229.89 
+        683684.6,4209230.68 683690.92,4209231.57 
+        683696.65,4209232.36 683701.69,4209233.35 
+        683705.44,4209234.43 683709.1,4209236.41 
+        683712.36,4209238.48 683718.15,4209242.83 
+        683724.47,4209248.65 683731.48,4209255.85 
+        683739.85,4209265.28 683749.04,4209275.05 
+        683755.56,4209281.37 683761.19,4209286.2 
+        683766.72,4209290.15 683771.92,4209293.07 
+        683776.86,4209295.34 683782.99,4209297.02 
+        683788.62,4209298.0 683792.96,4209298.5 
+        683800.37,4209298.4 683809.06,4209297.02 
+        683827.63,4209294.06 683866.21,4209287.44 
+        683928.39,4209276.9 683964.19,4209270.99 
+        683972.39,4209269.91 683978.81,4209269.51 
+        683984.34,4209269.51 683989.18,4209269.81 
+        683994.02,4209270.4 683999.06,4209271.68 
+        684005.18,4209274.05 684018.27,4209280.76 
+        684060.83,4209303.73 684110.26,4209330.53 
+        684120.81,4209336.13 684125.35,4209338.59 
+        684129.4,4209341.46 684133.95,4209344.81 
+        684139.68,4209349.15 684145.0,4209353.99 
+        684151.81,4209360.7 684183.89,4209394.48 
+        684205.11,4209415.48 684212.52,4209422.48 
+        684219.23,4209427.91 684224.47,4209431.56 
+        684230.98,4209434.9 684237.3,4209437.47 
+        684246.29,4209440.13 684255.54,4209441.99 
+        684268.28,4209443.96 684281.81,4209445.54 
+        684298.57,4209447.2 684310.52,4209448.39 
+        684318.82,4209448.39 684326.92,4209447.5 
+        684333.91,4209445.92 684342.28,4209443.26 
+        684355.82,4209437.93 684358.46,4209436.71 
+        684392.81,4209421.95 684417.42,4209411.41 
+        684434.87,4209403.83 684442.08,4209401.27 
+        684446.63,4209400.18 684450.18,4209399.79 
+        684455.1,4209399.59 684460.04,4209399.89 
+        684463.69,4209400.68 684467.35,4209401.96 
+        684475.15,4209405.02 684485.29,4209408.66 
+        684489.64,4209410.14 684493.19,4209410.63 
+        684496.55,4209411.13 684500.3,4209411.23 
+        684504.74,4209411.03 684508.39,4209410.24 
+        684512.25,4209409.06 684518.24,4209406.71 
+        684528.22,4209401.68 684539.47,4209395.86 
+        684546.86,4209392.52 684552.59,4209390.44 
+        684557.04,4209390.05 684561.29,4209390.15 
+        684566.03,4209390.64 684568.99,4209391.43 
+        684571.66,4209392.42 684575.3,4209394.1 
+        684578.85,4209396.37 684582.71,4209399.33 
+        684590.9,4209407.21 684625.42,4209445.33 
+        684631.94,4209452.54 684635.5,4209456.29 
+        684639.15,4209459.64 684643.6,4209463.0 
+        684646.66,4209464.87 684650.81,4209466.35 
+        684654.95,4209467.54 684659.89,4209467.83 
+        684664.14,4209468.03 684668.68,4209467.83 
+        684673.82,4209467.04 684681.41,4209465.28 
+        684699.68,4209459.26 684738.63,4209443.11 
+        684771.82,4209428.11 684819.39,4209406.13 
+        684856.89,4209387.8 684877.8,4209376.38 
+        684889.26,4209369.47 684896.27,4209364.64 
+        684903.36,4209358.94 684910.08,4209353.01 
+        684920.45,4209342.36 684934.85,4209326.6 
+        684959.53,4209298.51 684975.02,4209281.56 
+        684981.35,4209275.93 684985.99,4209272.97 
+        684990.14,4209271.0 684994.35,4209269.94 
+        684999.39,4209269.25 685004.13,4209268.96 
+        685007.68,4209269.15 685012.42,4209269.74 
+        685015.78,4209270.53 685021.2,4209272.3 
+        685027.82,4209274.87 685038.18,4209278.61 
+        685062.56,4209287.48 685082.19,4209295.74 
+        685096.11,4209302.65 685134.11,4209323.64 
+        685170.73,4209344.14 685190.37,4209354.49 
+        685197.39,4209358.63 685201.22,4209361.08 
+        685204.67,4209364.04 685208.03,4209367.59 
+        685211.19,4209371.64 685213.76,4209376.47 
+        685215.54,4209380.81 685216.72,4209385.06 
+        685217.42,4209389.5 685217.71,4209402.26 
+        685215.83,4209452.68 685213.95,4209497.19 
+        685211.48,4209546.37 685211.19,4209557.79 
+        685211.19,4209565.78 685211.19,4209571.2 
+        685211.49,4209575.94 685211.98,4209579.89 
+        685212.47,4209582.65 685213.26,4209585.56 
+        685214.64,4209589.6 685216.62,4209593.75 
+        685219.19,4209597.59 685222.45,4209601.74 
+        685225.51,4209605.09 685232.31,4209611.58 
+        685239.41,4209617.69 685247.61,4209623.02 
+        685254.52,4209626.77 685260.05,4209629.24 
+        685265.09,4209630.92 685270.03,4209631.9 
+        685276.55,4209632.4 685281.77,4209632.19 
+        685290.36,4209631.31 685303.79,4209628.74 
+        685336.17,4209621.94 685359.73,4209617.41 
+        685365.96,4209616.62 685371.29,4209616.12 
+        685374.65,4209616.12 685378.6,4209616.32 
+        685383.04,4209616.81 685387.36,4209617.59 
+        685392.89,4209619.47 685397.93,4209621.74 
+        685403.44,4209624.58 685412.03,4209630.0 
+        685435.23,4209647.26 685447.37,4209656.06 
+        685455.86,4209661.38 685461.1,4209664.74 
+        685468.11,4209668.39 685473.72,4209670.94 
+        685479.35,4209673.02 685484.59,4209674.59 
+        685491.01,4209675.68 685498.22,4209676.57 
+        685508.87,4209677.05 685521.59,4209677.93 
+        685536.77,4209679.65 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12652.0</cit:ID>
+<cit:ID_PONT>3140;3141</cit:ID_PONT>
+<cit:NOMBRE>CV-949</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>73.0</cit:FROM_NODE>
+<cit:TO_NODE>1395.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+681918.5,4203788.22 681941.42,4203778.09 
+        681956.47,4203770.65 681964.79,4203765.71 
+        681970.89,4203761.08 681977.83,4203755.51 
+        681986.97,4203747.76 681993.81,4203741.34 
+        682000.86,4203733.46 682013.58,4203718.24 
+        682015.36,4203715.84 682026.61,4203700.61 
+        682037.22,4203686.65 682050.16,4203670.38 
+        682061.93,4203654.24 682073.82,4203637.94 
+        682080.35,4203629.11 682088.13,4203618.6 
+        682102.01,4203600.64 682115.91,4203582.58 
+        682131.46,4203562.0 682160.39,4203524.82 
+        682183.63,4203494.37 682205.38,4203465.53 
+        682219.94,4203447.16 682237.13,4203424.25 
+        682244.4,4203413.95 682254.37,4203399.16 
+        682261.78,4203386.98 682270.85,4203368.84 
+        682276.72,4203355.62 682286.77,4203330.28 
+        682294.65,4203307.82 682297.18,4203301.51 
+        682300.23,4203295.52 682304.23,4203288.48 
+        682310.01,4203280.1 682315.8,4203272.22 
+        682325.05,4203261.2 682335.05,4203251.11 
+        682344.94,4203242.28 682355.44,4203233.9 
+        682362.38,4203229.7 682370.38,4203225.92 
+        682381.64,4203221.18 682392.45,4203217.41 
+        682403.71,4203213.63 682414.96,4203210.59 
+        682424.01,4203209.11 682432.22,4203208.38 
+        682445.48,4203207.96 682479.64,4203209.65 
+        682514.56,4203211.23 682562.41,4203212.79 
+        682597.51,4203214.36 682632.21,4203215.83 
+        682657.12,4203216.35 682670.91,4203216.14 
+        682680.27,4203215.61 682689.01,4203214.77 
+        682701.53,4203213.09 682713.7,4203210.88 
+        682725.38,4203208.36 682740.85,4203204.47 
+        682757.98,4203199.55 682766.29,4203197.34 
+        682771.87,4203196.39 682777.45,4203195.97 
+        682784.25,4203195.77 682791.93,4203196.29 
+        682801.09,4203197.34 682809.72,4203199.34 
+        682822.44,4203203.11 682871.75,4203218.34 
+        682927.48,4203235.04 682982.27,4203251.63 
+        683004.55,4203258.65 683011.18,4203260.55 
+        683016.12,4203262.23 683027.28,4203264.33 
+        683032.02,4203264.86 683038.12,4203265.17 
+        683042.33,4203265.07 683048.81,4203264.53 
+        683057.44,4203262.96 683068.28,4203259.91 
+        683079.72,4203255.6 683100.14,4203246.77 
+        683130.95,4203234.6 683170.68,4203219.07 
+        683201.68,4203206.58 683212.31,4203203.12 
+        683223.04,4203200.28 683235.78,4203197.33 
+        683252.72,4203194.6 683272.02,4203191.59 
+        683280.55,4203189.59 683290.76,4203186.23 
+        683297.39,4203183.07 683305.59,4203177.92 
+        683314.95,4203171.32 683324.95,4203163.43 
+        683334.61,4203155.48 683346.6,4203144.12 
+        683356.49,4203134.03 683366.36,4203122.61 
+        683375.2,4203111.36 683390.96,4203090.69 
+        683398.75,4203081.02 683402.75,4203076.71 
+        683407.78,4203071.7 683412.31,4203068.02 
+        683416.94,4203064.76 683421.78,4203061.92 
+        683427.99,4203058.77 683432.93,4203056.98 
+        683437.25,4203055.83 683441.55,4203054.78 
+        683447.23,4203053.83 683454.92,4203053.41 
+        683464.56,4203053.32 683478.35,4203053.95 
+        683502.95,4203055.51 683554.18,4203057.09 
+        683614.85,4203059.08 683638.59,4203060.22 
+        683650.27,4203060.22 683655.74,4203060.01 
+        683661.95,4203059.38 683666.47,4203058.44 
+        683670.55,4203057.18 683675.13,4203055.07 
+        683681.57,4203051.11 683692.31,4203044.69 
+        683699.45,4203040.9 683705.71,4203038.35 
+        683710.74,4203036.77 683714.71,4203035.8 
+        683719.03,4203035.09 683723.61,4203034.56 
+        683729.12,4203034.48 683734.06,4203034.66 
+        683739.17,4203035.1 683744.11,4203035.89 
+        683749.75,4203037.3 683760.07,4203039.59 
+        683774.23,4203042.85 683794.13,4203047.24 
+        683807.62,4203050.76 683820.94,4203055.25 
+        683831.94,4203058.84 683841.02,4203062.54 
+        683847.45,4203065.27 683854.33,4203068.62 
+        683860.15,4203071.61 683866.15,4203074.87 
+        683872.63,4203078.99 683879.59,4203083.66 
+        683888.41,4203089.91 683895.73,4203096.25 
+        683911.58,4203110.58 683966.49,4203160.04 
+        684033.45,4203219.31 684105.26,4203284.15 
+        684136.14,4203311.48 684146.2,4203320.02 
+        684156.23,4203328.35 684168.66,4203337.06 
+        684182.84,4203345.41 684205.85,4203359.59 
+        684237.05,4203377.7 684252.94,4203386.84 
+        684272.69,4203399.34 684281.68,4203404.0 
+        684290.14,4203407.96 684298.52,4203410.95 
+        684305.92,4203412.98 684316.06,4203414.83 
+        684325.85,4203416.24 684342.39,4203417.18 
+        684362.05,4203416.83 684425.06,4203417.35 
+        684437.8,4203418.23 684445.56,4203419.55 
+        684452.53,4203421.14 684460.11,4203423.16 
+        684467.07,4203425.89 684471.22,4203427.92 
+        684478.6,4203431.95 684487.58,4203437.23 
+        684495.78,4203443.04 684500.63,4203447.09 
+        684505.66,4203451.85 684512.09,4203458.54 
+        684523.09,4203470.31 684540.46,4203490.03 
+        684586.1,4203541.15 684630.95,4203592.17 
+        684662.82,4203628.46 684698.17,4203668.07 
+        684716.45,4203687.73 684727.39,4203697.6 
+        684743.17,4203710.28 684758.21,4203721.78 
+        684776.64,4203735.07 684811.88,4203760.22 
+        684837.77,4203779.29 684866.74,4203800.56 
+        684892.13,4203819.14 684925.36,4203844.14 
+        684956.97,4203867.95 684979.16,4203883.86 
+        685043.23,4203931.73 685052.56,4203938.65 
+        685064.46,4203948.25 685077.11,4203958.43 
+        685089.54,4203969.18 685099.77,4203977.98 
+        685110.88,4203989.08 685139.35,4204016.53 
+        685177.5,4204051.96 685207.28,4204079.4 
+        685244.19,4204114.59 685254.28,4204123.7 
+        685260.8,4204130.39 685266.27,4204136.65 
+        685272.09,4204143.52 685277.02,4204151.18 
+        685283.72,4204162.98 685294.03,4204183.8 
+        685302.94,4204205.11 685320.37,4204249.43 
+        685346.53,4204318.67 685366.96,4204371.21 
+        685393.67,4204440.83 685405.54,4204474.56 
+        685413.48,4204500.36 685416.91,4204513.62 
+        685422.73,4204539.33 685431.2,4204581.64 
+        685438.41,4204621.73 685447.84,4204669.58 
+        685455.86,4204712.16 685468.55,4204776.91 
+        685483.96,4204855.11 685496.91,4204922.63 
+        685510.74,4204998.29 685517.97,4205034.23 
+        685521.58,4205050.87 685524.58,4205062.5 
+        685530.46,4205083.66 685538.4,4205109.73 
+        685551.26,4205151.3 685563.69,4205192.12 
+        685575.84,4205233.38 685584.75,4205260.97 
+        685597.27,4205301.55 685604.56,4205324.63 
+        685607.73,4205334.58 685610.38,4205343.92 
+        685611.88,4205349.55 685613.91,4205358.94 
+        685615.32,4205366.96 685615.87,4205374.94 
+        685615.94,4205381.31 685615.41,4205390.33 
+        685614.53,4205400.37 685613.12,4205409.36 
+        685611.53,4205416.75 685609.24,4205424.33 
+        685606.59,4205431.28 685601.67,4205441.1 
+        685592.94,4205455.54 685570.64,4205489.51 
+        685537.34,4205541.41 685525.81,4205560.27 
+        685520.6,4205568.9 685516.46,4205576.87 
+        685510.91,4205588.28 685508.01,4205596.26 
+        685505.01,4205606.03 685502.98,4205615.89 
+        685502.0,4205624.36 685501.29,4205635.11 
+        685501.38,4205647.88 685502.26,4205666.19 
+        685505.17,4205697.59 685507.46,4205726.01 
+        685509.22,4205745.24 685510.99,4205756.42 
+        685513.19,4205763.56 685514.78,4205768.02 
+        685517.78,4205774.8 685521.57,4205781.76 
+        685525.36,4205787.13 685530.48,4205793.3 
+        685536.71,4205799.88 685546.59,4205809.56 
+        685557.59,4205818.51 685567.02,4205825.46 
+        685578.22,4205832.68 685593.9,4205842.8 
+        685605.53,4205849.56 685631.79,4205865.57 
+        685656.11,4205879.9 685685.89,4205897.48 
+        685725.01,4205921.15 685778.23,4205952.99 
+        685812.93,4205973.75 685839.71,4205990.03 
+        685865.07,4206004.96 685901.02,4206026.17 
+        685916.78,4206035.49 685925.86,4206040.6 
+        685936.62,4206046.33 685948.22,4206052.02 
+        685963.04,4206058.01 685979.44,4206063.73 
+        686000.4,4206070.41 686031.59,4206080.52 
+        686061.47,4206090.9 686082.77,4206097.93 
+        686092.91,4206101.63 686101.2,4206104.89 
+        686113.88,4206109.9 686126.13,4206115.27 
+        686146.73,4206125.55 686159.24,4206131.78 
+        686166.73,4206134.96 686176.85,4206139.0 
+        686188.76,4206142.08 686204.52,4206145.86 
+        686229.19,4206151.93 686254.49,4206157.48 
+        686289.47,4206166.01 686311.1,4206171.2 
+        686325.47,4206174.46 686334.11,4206176.75 
+        686342.13,4206179.3 686349.1,4206181.94 
+        686358.0,4206186.08 686379.75,4206197.77 
+        686389.36,4206202.61 686397.56,4206207.02 
+        686402.5,4206209.66 686407.79,4206212.92 
+        686413.78,4206217.05 686419.82,4206221.68 
+        686426.17,4206227.32 686433.32,4206234.8 
+        686439.84,4206242.55 686447.42,4206252.5 
+        686469.1,4206282.42 686491.65,4206313.36 
+        686523.02,4206355.76 686553.14,4206396.67 
+        686564.04,4206411.85 686571.44,4206422.77 
+        686579.91,4206437.13 686586.5,4206447.83 
+        686593.29,4206457.61 686600.52,4206466.68 
+        686609.76,4206476.68 686618.58,4206484.87 
+        686627.75,4206492.97 686639.47,4206501.69 
+        686659.82,4206515.66 686676.38,4206526.91 
+        686683.52,4206531.93 686693.22,4206538.53 
+        686700.79,4206544.05 686707.49,4206549.6 
+        686714.28,4206555.85 686719.48,4206561.58 
+        686724.94,4206567.92 686734.43,4206580.46 
+        686742.46,4206591.55 686751.19,4206603.71 
+        686765.02,4206623.58 686785.81,4206652.86 
+        686803.5,4206676.75 686811.53,4206686.17 
+        686820.78,4206696.04 686828.28,4206702.46 
+        686836.39,4206709.51 686853.04,4206723.14 
+        686864.38,4206733.04 686869.67,4206738.24 
+        686874.16,4206743.43 686878.04,4206749.51 
+        686881.83,4206756.2 686885.01,4206762.98 
+        686888.89,4206773.11 686893.71,4206787.76 
+        686897.33,4206802.47 686900.94,4206815.57 
+        686906.85,4206833.62 686918.57,4206875.49 
+        686937.52,4206943.03 686939.53,4206951.77 
+        686941.11,4206961.9 686942.08,4206970.88 
+        686942.79,4206981.87 686943.05,4206994.2 
+        686942.7,4207008.29 686941.55,4207031.05 
+        686941.11,4207042.33 686941.11,4207050.22 
+        686941.38,4207055.68 686941.82,4207059.29 
+        686942.88,4207063.57 686944.38,4207067.62 
+        686946.4,4207072.02 686949.58,4207076.95 
+        686953.72,4207082.06 686958.31,4207086.81 
+        686963.69,4207090.78 686970.19,4207094.54 
+        686982.27,4207100.88 687000.59,4207110.28 
+        687010.91,4207115.12 687017.78,4207117.94 
+        687026.07,4207120.84 687034.68,4207123.46 
+        687044.29,4207125.4 687052.58,4207126.1 
+        687063.95,4207126.1 687076.47,4207125.58 
+        687096.11,4207124.08 687121.82,4207122.06 
+        687131.34,4207121.8 687142.54,4207121.36 
+        687151.32,4207121.7 687157.49,4207122.23 
+        687164.45,4207123.38 687171.68,4207124.96 
+        687179.79,4207127.25 687224.1,4207141.67 
+        687264.97,4207155.04 687303.4,4207167.46 
+        687337.2,4207178.53 687349.53,4207182.13 
+        687357.73,4207184.07 687364.17,4207185.22 
+        687369.81,4207185.74 687377.13,4207186.18 
+        687384.45,4207186.62 687400.62,4207187.93 
+        687413.14,4207188.72 687433.85,4207190.22 
+        687453.25,4207192.43 687461.36,4207193.31 
+        687466.27,4207193.39 687470.86,4207192.69 
+        687476.06,4207191.11 687480.14,4207189.45 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>20</cit:LAYER>
+<cit:LEVEL>20.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>7.0</cit:COLOR>
+<cit:ID>12653.0</cit:ID>
+<cit:ID_PONT></cit:ID_PONT>
+<cit:NOMBRE>CV-954</cit:NOMBRE>
+<cit:ANCHO_C>3.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>0.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>Diputaci�n</cit:TIPO>
+<cit:ANCHO_BUF>1.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>80.0</cit:FROM_NODE>
+<cit:TO_NODE>1494.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+687356.01,4207278.16 687380.67,4207272.49 
+        687434.93,4207258.27 687469.47,4207248.94 
+        687476.96,4207247.16 687481.51,4207246.62 
+        687484.45,4207246.36 687487.22,4207246.53 
+        687490.43,4207247.07 687495.33,4207248.41 
+        687500.77,4207249.92 687506.37,4207251.52 
+        687510.56,4207252.41 687513.86,4207252.5 
+        687516.47,4207252.35 687518.87,4207251.82 
+        687520.44,4207251.15 687521.77,4207250.61 
+        687522.84,4207249.94 687523.56,4207248.96 
+        687524.0,4207247.36 687524.09,4207245.36 
+        687523.65,4207243.0 687522.76,4207239.94 
+        687521.33,4207236.02 687519.19,4207232.5 
+        687513.93,4207225.02 687506.62,4207216.43 
+        687499.55,4207209.98 687494.29,4207205.44 
+        687485.43,4207197.98 687483.03,4207195.04 
+        687481.06,4207191.83 687480.14,4207189.45 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Line String</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12657.0</cit:ID>
+<cit:ID_PONT></cit:ID_PONT>
+<cit:NOMBRE>CV-925</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>0.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1487.0</cit:FROM_NODE>
+<cit:TO_NODE>1494.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+685442.45,4209825.64 685453.31,4209807.93 
+        685459.27,4209798.59 685467.37,4209786.23 
+        685483.68,4209761.03 685505.6,4209727.85 
+        685530.26,4209690.24 685536.77,4209679.65 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Line String</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12658.0</cit:ID>
+<cit:ID_PONT></cit:ID_PONT>
+<cit:NOMBRE>CV-925</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1390.0</cit:FROM_NODE>
+<cit:TO_NODE>1395.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+685536.77,4209679.65 685543.08,4209669.61 
+        685548.25,4209661.0 685551.81,4209654.58 
+        685554.31,4209649.51 685556.54,4209643.89 
+        685558.32,4209638.4 685559.48,4209632.97 
+        685560.01,4209627.98 685560.19,4209622.46 
+        685559.75,4209617.2 685558.78,4209611.72 
+        685556.37,4209603.08 685552.89,4209592.84 
+        685539.35,4209558.24 685521.09,4209511.96 
+        685493.92,4209443.37 685479.67,4209407.85 
+        685463.26,4209366.61 685436.71,4209299.88 
+        685430.22,4209282.23 685428.26,4209275.81 
+        685426.92,4209270.91 685425.85,4209265.12 
+        685425.67,4209261.29 685425.5,4209257.64 
+        685425.49,4209252.32 685425.94,4209247.59 
+        685426.38,4209244.03 685427.72,4209239.04 
+        685429.95,4209232.38 685433.08,4209225.08 
+        685438.06,4209216.28 685443.95,4209207.64 
+        685462.66,4209180.5 685471.99,4209165.95 
+        685476.27,4209158.47 685480.63,4209150.1 
+        685483.58,4209142.44 685486.07,4209134.69 
+        685488.29,4209124.83 685489.81,4209114.23 
+        685492.93,4209074.75 685495.69,4209034.95 
+        685500.33,4208972.88 685503.35,4208932.93 
+        685504.24,4208919.24 685504.33,4208904.63 
+        685504.07,4208894.7 685503.35,4208885.62 
+        685500.69,4208866.53 685494.98,4208836.51 
+        685488.11,4208803.94 685484.82,4208787.24 
+        685483.75,4208780.73 685483.04,4208775.3 
+        685482.33,4208769.06 685482.32,4208764.81 
+        685482.32,4208759.83 685482.5,4208755.55 
+        685482.95,4208751.19 685484.02,4208746.2 
+        685485.89,4208740.88 685487.41,4208737.14 
+        685491.87,4208727.71 685508.54,4208699.59 
+        685529.65,4208665.96 685558.08,4208619.42 
+        685574.81,4208591.96 685583.09,4208578.99 
+        685588.27,4208571.42 685592.01,4208566.16 
+        685597.81,4208559.21 685604.75,4208552.11 
+        685610.99,4208546.41 685618.3,4208540.44 
+        685627.4,4208533.5 685678.47,4208497.11 
+        685701.16,4208480.34 685721.31,4208465.02 
+        685747.24,4208444.11 685780.49,4208417.77 
+        685812.75,4208391.6 685863.18,4208351.67 
+        685927.68,4208299.45 685976.87,4208260.57 
+        686010.42,4208233.74 686026.38,4208220.92 
+        686053.65,4208199.2 686074.77,4208182.21 
+        686109.7,4208154.53 686138.84,4208131.5 
+        686164.92,4208110.81 686176.34,4208101.01 
+        686183.65,4208093.08 686187.73,4208088.04 
+        686191.48,4208082.6 686195.76,4208074.32 
+        686199.32,4208066.39 686202.09,4208058.03 
+        686206.01,4208044.31 686212.42,4208018.86 
+        686224.63,4207967.71 686232.28,4207935.35 
+        686242.52,4207892.31 686251.62,4207853.92 
+        686258.11,4207826.73 686269.35,4207780.53 
+        686272.45,4207769.83 686275.74,4207759.77 
+        686280.47,4207747.3 686285.82,4207734.02 
+        686297.31,4207707.24 686312.19,4207671.38 
+        686337.5,4207610.26 686357.89,4207560.44 
+        686368.23,4207536.55 686373.49,4207525.95 
+        686377.05,4207519.53 686380.62,4207514.1 
+        686385.25,4207507.98 686389.71,4207502.81 
+        686395.15,4207497.29 686404.59,4207489.74 
+        686411.37,4207484.75 686419.93,4207478.87 
+        686435.15,4207469.9 686479.8,4207444.54 
+        686557.16,4207400.59 686578.68,4207388.97 
+        686589.02,4207383.81 686598.09,4207379.91 
+        686613.16,4207374.47 686640.9,4207365.92 
+        686707.03,4207348.66 686802.8,4207322.87 
+        686844.12,4207311.57 686854.19,4207308.81 
+        686862.22,4207307.03 686868.64,4207305.87 
+        686875.46,4207304.98 686881.79,4207304.36 
+        686891.15,4207304.0 686907.08,4207304.36 
+        686936.33,4207305.79 686983.56,4207309.52 
+        687038.08,4207313.79 687070.68,4207316.27 
+        687086.63,4207316.89 687099.11,4207317.25 
+        687114.7,4207317.07 687122.19,4207316.62 
+        687131.55,4207315.82 687149.53,4207313.16 
+        687176.28,4207308.44 687213.52,4207302.75 
+        687259.06,4207295.0 687315.99,4207285.57 
+        687349.28,4207279.71 687356.01,4207278.16 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12659.0</cit:ID>
+<cit:ID_PONT></cit:ID_PONT>
+<cit:NOMBRE>CV-925</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1395.0</cit:FROM_NODE>
+<cit:TO_NODE>1487.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+687480.14,4207189.45 687479.38,4207187.49 
+        687478.57,4207182.42 687478.31,4207177.78 
+        687478.66,4207172.08 687479.64,4207160.62 
+        687481.42,4207142.54 687486.42,4207096.04 
+        687489.81,4207062.84 687492.22,4207040.96 
+        687493.38,4207032.41 687494.44,4207026.36 
+        687495.24,4207022.37 687497.03,4207016.04 
+        687499.16,4207009.2 687501.75,4207002.34 
+        687504.69,4206996.2 687507.72,4206991.04 
+        687511.38,4206984.8 687516.09,4206978.05 
+        687521.71,4206971.19 687526.61,4206965.75 
+        687535.51,4206957.31 687554.42,4206941.55 
+        687573.66,4206925.64 687583.54,4206916.67 
+        687587.82,4206912.21 687592.99,4206905.8 
+        687598.52,4206898.14 687606.08,4206886.6 
+        687617.68,4206867.98 687637.54,4206834.08 
+        687668.02,4206783.89 687683.33,4206758.58 
+        687697.15,4206735.95 687719.43,4206699.65 
+        687741.52,4206663.25 687764.51,4206625.44 
+        687774.13,4206609.52 687792.66,4206578.2 
+        687811.73,4206546.53 687820.1,4206533.55 
+        687827.77,4206522.34 687831.6,4206517.62 
+        687836.68,4206512.1 687845.41,4206503.21 
+        687853.71,4206496.62 687865.28,4206488.88 
+        687872.95,4206484.7 687880.98,4206481.04 
+        687889.01,4206477.84 687896.41,4206475.61 
+        687904.84,4206473.76 687914.47,4206472.15 
+        687930.77,4206470.1 687951.91,4206468.5 
+        687986.49,4206464.94 688038.55,4206460.59 
+        688064.47,4206458.19 688107.07,4206454.63 
+        688137.06,4206451.98 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12660.0</cit:ID>
+<cit:ID_PONT></cit:ID_PONT>
+<cit:NOMBRE>CV-925</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1494.0</cit:FROM_NODE>
+<cit:TO_NODE>1533.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+688137.06,4206451.98 688179.37,4206448.24 
+        688229.79,4206443.7 688246.69,4206442.0 
+        688280.4,4206439.42 688338.61,4206433.99 
+        688378.09,4206430.42 688424.43,4206425.79 
+        688480.91,4206421.43 688508.68,4206418.59 
+        688529.37,4206417.43 688550.59,4206416.45 
+        688560.65,4206416.63 688583.48,4206417.96 
+        688606.37,4206419.92 688625.81,4206421.26 
+        688645.52,4206422.5 688681.94,4206425.8 
+        688728.27,4206429.45 688768.37,4206432.74 
+        688820.77,4206436.74 688874.22,4206440.84 
+        688913.11,4206443.96 688946.78,4206446.17 
+        688998.2,4206450.89 689054.96,4206455.16 
+        689100.74,4206458.72 689126.79,4206460.77 
+        689172.14,4206464.23 689238.9,4206469.56 
+        689302.06,4206474.81 689337.98,4206477.39 
+        689348.89,4206477.95 689358.47,4206478.22 
+        689366.4,4206478.13 689372.3,4206477.67 
+        689379.49,4206476.66 689388.62,4206474.26 
+        689397.62,4206471.06 689413.2,4206464.15 
+        689445.81,4206448.78 689497.2,4206424.32 
+        689548.79,4206399.68 689584.75,4206382.41 
+        689605.31,4206372.74 689615.63,4206368.87 
+        689622.82,4206366.76 689629.92,4206365.47 
+        689635.91,4206364.91 689644.11,4206364.36 
+        689651.12,4206364.64 689660.86,4206365.74 
+        689669.16,4206366.94 689675.15,4206368.23 
+        689682.43,4206370.07 689688.15,4206372.1 
+        689694.69,4206374.86 689701.94,4206378.43 
+        689708.03,4206381.84 689713.56,4206385.52 
+        689718.72,4206389.29 689723.88,4206393.33 
+        689729.59,4206398.3 689734.57,4206403.35 
+        689740.1,4206409.43 689744.52,4206414.96 
+        689749.39,4206421.57 689756.58,4206433.53 
+        689783.94,4206481.28 689814.61,4206534.73 
+        689828.12,4206558.32 689833.74,4206567.16 
+        689838.63,4206574.62 689844.07,4206582.26 
+        689848.86,4206588.71 689857.77,4206598.68 
+        689873.07,4206614.15 689891.14,4206630.9 
+        689933.04,4206669.43 689990.26,4206722.41 
+        690042.87,4206770.42 690134.33,4206855.21 
+        690188.01,4206905.21 690223.19,4206937.67 
+        690235.22,4206949.22 690242.69,4206956.77 
+        690248.87,4206963.31 690254.03,4206970.21 
+        690257.24,4206975.15 690260.84,4206982.06 
+        690265.91,4206992.18 690272.27,4207007.01 
+        690288.57,4207046.66 690312.23,4207103.77 
+        690328.34,4207140.88 690336.64,4207161.13 
+        690343.08,4207177.02 690346.12,4207185.03 
+        690348.43,4207192.31 690349.62,4207196.82 
+        690350.82,4207201.79 690351.84,4207207.84 
+        690352.67,4207215.95 690352.76,4207226.26 
+        690352.01,4207248.09 690349.71,4207275.71 
+        690347.04,4207303.86 690344.46,4207333.18 
+        690342.07,4207358.26 690340.13,4207378.86 
+        690338.75,4207399.39 690338.19,4207415.69 
+        690338.11,4207426.87 690338.2,4207435.07 
+        690338.84,4207442.62 690340.13,4207450.07 
+        690342.16,4207458.42 690345.39,4207467.62 
+        690348.71,4207475.36 690354.23,4207485.35 
+        690359.02,4207492.72 690365.47,4207500.79 
+        690371.73,4207507.79 690378.74,4207514.51 
+        690388.86,4207522.86 690409.78,4207538.24 
+        690479.41,4207586.71 690540.02,4207629.48 
+        690603.28,4207674.44 690673.74,4207724.65 
+        690736.18,4207768.6 690765.83,4207789.56 
+        690793.1,4207808.96 690802.87,4207815.77 
+        690815.17,4207823.74 690827.99,4207831.38 
+        690841.35,4207838.75 690852.23,4207844.36 
+        690869.54,4207852.63 690882.17,4207857.97 
+        690900.56,4207864.94 690917.25,4207870.46 
+        690931.26,4207874.6 690947.02,4207878.84 
+        690965.59,4207882.4 690985.5,4207886.17 
+        691017.45,4207891.6 691055.58,4207898.13 
+        691093.81,4207904.75 691119.14,4207909.53 
+        691161.59,4207916.89 691188.69,4207921.49 
+        691223.93,4207927.64 691275.51,4207936.75 
+        691331.43,4207946.22 691399.74,4207958.28 
+        691439.09,4207965.17 691478.03,4207972.07 
+        691506.96,4207977.31 691528.25,4207980.71 
+        691562.12,4207986.69 691585.3,4207990.63 
+        691594.24,4207992.47 691600.33,4207993.94 
+        691605.77,4207995.42 691610.47,4207996.8 
+        691616.18,4207998.64 691621.81,4208001.13 
+        691629.73,4208004.99 691636.09,4208008.22 
+        691645.44,4208013.89 691666.45,4208026.78 
+        691678.06,4208033.4 691705.34,4208050.89 
+        691738.59,4208071.87 691777.83,4208095.96 
+        691816.23,4208119.51 691839.78,4208134.09 
+        691857.66,4208145.42 691872.32,4208154.35 
+        691883.44,4208161.14 691892.66,4208166.48 
+        691902.98,4208171.45 691909.8,4208174.21 
+        691916.16,4208176.33 691921.6,4208178.08 
+        691926.92,4208179.07 691936.32,4208180.27 
+        691949.41,4208180.64 691965.35,4208181.01 
+        691973.99,4208181.0 692002.47,4208181.28 
+        692064.17,4208181.72 692120.99,4208183.1 
+        692127.81,4208183.38 692133.04,4208184.11 
+        692139.86,4208185.21 692146.5,4208186.96 
+        692154.68,4208189.44 692168.97,4208195.24 
+        692187.31,4208203.71 692210.6,4208214.37 
+        692222.84,4208220.53 692243.67,4208230.11 
+        692294.34,4208253.66 692344.35,4208276.83 
+        692418.87,4208311.42 692442.12,4208321.98 
+        692457.52,4208329.08 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12682.0</cit:ID>
+<cit:ID_PONT>3142</cit:ID_PONT>
+<cit:NOMBRE>CV-951</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1533.0</cit:FROM_NODE>
+<cit:TO_NODE>1851.0</cit:TO_NODE>
+</cit:lines></gml:featureMember><gml:featureMember>
+<cit:lines><cit:the_geom><gml:MultiLineString srsName='0'>
+  <gml:lineStringMember>
+    <gml:LineString srsName='0'>
+      <gml:coordinates>
+688137.06,4206451.98 688135.53,4206442.82 
+        688134.96,4206439.78 688134.13,4206436.74 
+        688130.2,4206425.21 688112.62,4206376.15 
+        688094.95,4206327.34 688084.83,4206299.57 
+        688077.52,4206278.92 688073.16,4206266.19 
+        688067.83,4206247.84 688065.03,4206236.09 
+        688063.39,4206227.63 688059.61,4206203.54 
+        688055.58,4206174.3 688051.08,4206143.32 
+        688044.59,4206093.34 688041.3,4206071.04 
+        688039.66,4206062.25 688036.78,4206051.98 
+        688033.9,4206043.31 688029.46,4206033.21 
+        688025.19,4206025.32 688021.4,4206018.34 
+        688016.14,4206009.8 688005.89,4205993.83 
+        687990.67,4205971.16 687965.13,4205932.37 
+        687946.73,4205904.88 687935.22,4205888.7 
+        687927.57,4205878.1 687916.89,4205865.07 
+        687893.48,4205837.93 687849.76,4205787.63 
+        687822.33,4205756.23 687798.24,4205728.47 
+        687769.74,4205696.15 687753.7,4205677.76 
+        687745.08,4205668.65 687741.05,4205664.55 
+        687735.21,4205659.29 687726.66,4205651.9 
+        687714.33,4205641.48 687682.72,4205615.58 
+        687653.72,4205592.13 687644.67,4205584.41 
+        687638.01,4205578.57 687633.49,4205573.89 
+        687628.72,4205568.14 687624.28,4205561.73 
+        687619.68,4205554.29 687615.32,4205545.66 
+        687610.47,4205534.84 687589.45,4205482.43 
+        687566.93,4205425.58 687546.15,4205373.07 
+        687527.74,4205327.24 687517.23,4205302.66 
+        687511.22,4205291.24 687505.8,4205281.96 
+        687500.79,4205274.68 687492.41,4205263.6 
+        687483.85,4205253.08 687476.29,4205244.62 
+        687444.85,4205209.55 687381.16,4205138.41 
+        687325.6,4205076.39 687279.75,4205024.78 
+        687246.69,4204987.98 687223.78,4204962.01 
+        687213.58,4204950.02 687206.43,4204939.5 
+        687200.27,4204929.59 687196.07,4204921.05 
+        687193.04,4204913.59 687188.18,4204901.27 
+        687172.83,4204858.24 687150.07,4204795.39 
+        687138.64,4204763.31 687115.65,4204700.63 
+        687093.14,4204638.36 687081.13,4204605.58 
+        687070.79,4204577.87 687065.45,4204561.36 
+        687062.0,4204548.26 687059.04,4204534.38 
+        687057.31,4204522.64 687056.65,4204512.07 
+        687056.49,4204488.99 687057.56,4204464.15 
+        687059.29,4204437.17 687061.83,4204399.19 
+        687065.53,4204346.59 687065.86,4204332.4 
+        687065.61,4204326.24 687064.79,4204319.99 
+        687064.13,4204315.56 687063.31,4204311.45 
+        687061.83,4204306.69 687059.77,4204301.76 
+        687057.06,4204295.55 687054.1,4204289.72 
+        687049.83,4204282.41 687045.63,4204275.84 
+        687037.82,4204264.58 687009.81,4204225.73 
+        686987.86,4204194.96 686971.1,4204172.09 
+        686934.62,4204121.63 686891.81,4204061.88 
+        686855.26,4204008.98 686823.21,4203962.78 
+        686794.62,4203921.44 686772.92,4203890.75 
+        686762.64,4203876.95 686753.94,4203864.81 
+        686747.36,4203856.27 686738.97,4203846.17 
+        686729.76,4203835.98 686721.58,4203826.99 
+        686675.71,4203779.47 686652.68,4203756.15 
+        686637.18,4203739.95 686598.82,4203699.66 
+        686570.45,4203670.52 686543.98,4203644.0 
+        686528.55,4203627.39 686521.97,4203619.17 
+        686518.76,4203613.94 686516.62,4203609.18 
+        686515.31,4203604.58 686514.65,4203600.22 
+        686514.4,4203594.23 686514.4,4203587.98 
+        686515.14,4203577.01 686517.77,4203548.54 
+        686518.75,4203539.26 686520.4,4203532.36 
+        686522.2,4203527.36 686524.34,4203523.99 
+        686527.14,4203520.13 686531.25,4203515.94 
+        686536.02,4203512.58 686539.88,4203510.85 
+        686547.69,4203508.4 686557.47,4203505.94 
+        686565.28,4203503.8 686572.09,4203501.44 
+        686577.43,4203498.89 686583.27,4203495.44 
+        686587.96,4203491.74 686592.4,4203487.55 
+        686595.1,4203484.29 686598.31,4203479.28 
+        686600.53,4203474.19 686601.84,4203469.34 
+        686602.17,4203463.77 686602.0,4203458.02 
+        686600.85,4203452.68 686598.8,4203447.84 
+        686595.67,4203442.91 686592.24,4203439.23 
+        686589.44,4203437.02 686585.17,4203434.88 
+        686580.15,4203432.91 686573.49,4203431.18 
+        686565.26,4203429.54 686552.93,4203428.23 
+        686536.35,4203427.98 686522.72,4203428.8 
+        686510.71,4203429.54 686503.47,4203429.05 
+        686498.38,4203428.31 686493.19,4203426.91 
+        686483.38,4203422.94 686469.48,4203415.62 
+        686455.75,4203407.99 686443.9,4203400.35 
+        686438.09,4203396.02 686432.99,4203390.85 
+        686426.08,4203383.62 686392.82,4203344.26 
+        686365.03,4203311.89 686355.44,4203300.6 
+        686349.51,4203291.81 686347.21,4203288.11 
+        686344.33,4203282.28 686340.8,4203273.65 
+        686336.79,4203263.73 686331.11,4203248.74 
+        686321.01,4203220.79 686303.67,4203173.03 
+        686290.36,4203136.91 686285.34,4203122.86 
+        686282.22,4203112.64 686280.49,4203103.53 
+        686279.59,4203096.21 686279.18,4203090.22 
+        686279.42,4203082.96 686283.86,4203021.84 
+        686287.23,4202959.48 686287.47,4202939.93 
+        686287.14,4202927.69 686286.57,4202920.09 
+        686285.58,4202913.19 686284.43,4202906.7 
+        686282.54,4202897.17 686275.97,4202869.13 
+        686271.86,4202852.87 686269.88,4202841.65 
+        686269.22,4202835.24 686269.22,4202826.69 
+        686269.38,4202821.48 686269.95,4202816.46 
+        686270.86,4202812.44 686272.83,4202807.26 
+        686274.64,4202802.75 686277.93,4202795.93 
+        686283.11,4202786.73 686303.65,4202750.34 
+        686323.3,4202715.47 686345.06,4202677.02 
+        686378.25,4202615.9 686407.41,4202561.08 
+        686436.75,4202505.13 686465.11,4202450.88 
+        686485.57,4202411.99 686494.94,4202393.68 
+        686500.95,4202380.78 686504.56,4202371.94 
+        686509.14,4202359.44 686529.35,4202292.8 
+        686542.26,4202249.61 686554.68,4202208.36 
+        686558.71,4202195.88 686562.24,4202186.7 
+        686565.45,4202180.21 686569.23,4202174.05 
+        686573.0,4202168.32 686577.11,4202162.82 
+        686581.3,4202157.73 686590.75,4202146.33 
+        686617.45,4202115.72 686636.43,4202094.72 
+        686645.07,4202086.18 686650.17,4202081.49 
+        686656.25,4202076.65 686661.85,4202072.62 
+        686667.03,4202068.92 686693.94,4202053.37 
+        686760.99,4202016.61 686779.49,4202006.02 
+        686795.25,4201996.84 686803.23,4201991.91 
+        686808.82,4201987.64 686813.35,4201983.78 
+        686817.7,4201979.01 686823.53,4201971.98 
+        686828.96,4201963.84 686833.15,4201957.27 
+        686838.4,4201947.69 686855.81,4201914.95 
+        686872.81,4201884.1 686881.2,4201870.14 
+        686890.32,4201856.76 686901.57,4201840.46 
+        686933.04,4201798.39 686964.44,4201756.45 
+        686988.27,4201723.96 686992.87,4201717.47 
+        686996.0,4201712.55 686998.13,4201708.44 
+        686999.77,4201705.17 687000.84,4201702.38 
+        687001.58,4201699.51 
+      </gml:coordinates>
+    </gml:LineString>
+  </gml:lineStringMember>
+</gml:MultiLineString>
+</cit:the_geom>
+<cit:ENTITY>Complex Chain</cit:ENTITY>
+<cit:LAYER>22</cit:LAYER>
+<cit:LEVEL>22.0</cit:LEVEL>
+<cit:ELEVATION>0.0</cit:ELEVATION>
+<cit:COLOR>6.0</cit:COLOR>
+<cit:ID>12811.0</cit:ID>
+<cit:ID_PONT></cit:ID_PONT>
+<cit:NOMBRE>CV-925</cit:NOMBRE>
+<cit:ANCHO_C>5.5</cit:ANCHO_C>
+<cit:CARRIL_D>1.0</cit:CARRIL_D>
+<cit:CARRIL_I>1.0</cit:CARRIL_I>
+<cit:ANCHO_M>0.0</cit:ANCHO_M>
+<cit:ARCEN>1.0</cit:ARCEN>
+<cit:TUNEL>false</cit:TUNEL>
+<cit:URBANA>false</cit:URBANA>
+<cit:TIPO>COPUT</cit:TIPO>
+<cit:ANCHO_BUF>2.75</cit:ANCHO_BUF>
+<cit:FROM_NODE>1533.0</cit:FROM_NODE>
+<cit:TO_NODE>1472.0</cit:TO_NODE>
+</cit:lines></gml:featureMember></gml:FeatureCollection>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.gml	(revision 42196)
@@ -0,0 +1,557 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><gml:FeatureCollection xmlns:cit="http://www.gvsig.com/cit" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gvsig.com/cit GML-polygons.xsd"><gml:boundedBy><gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#23030"><gml:coordinates decimal="." cs="," ts=" ">620344.45,4205001.5 773626.0,4509860.5</gml:coordinates></gml:Box></gml:boundedBy><gml:featureMember>
+<cit:polygons><cit:the_geom><gml:MultiPolygon srsName='0'>
+  <gml:polygonMember>
+    <gml:Polygon srsName='0'>
+      <gml:outerBoundaryIs>
+        <gml:LinearRing srsName='0'>
+          <gml:coordinates>
+686982.31,4209197.5 686900.88,4209196.5 
+            686849.38,4209233.0 686826.0,4209227.0 
+            686805.63,4209199.0 686750.88,4209161.5 
+            686618.25,4209059.0 686481.44,4208965.0 
+            686411.19,4208954.5 686395.75,4208975.0 
+            686370.06,4209045.0 686342.94,4209119.0 
+            686324.56,4209156.0 686282.81,4209180.5 
+            686242.25,4209225.5 686230.94,4209250.0 
+            686231.69,4209301.5 686278.63,4209415.0 
+            686297.25,4209470.5 686292.88,4209491.0 
+            686262.44,4209495.0 686171.81,4209456.5 
+            686129.0,4209463.0 686091.5,4209481.5 
+            686061.19,4209477.0 685996.06,4209386.5 
+            685874.25,4209302.5 685801.19,4209299.0 
+            685766.13,4209342.5 685668.5,4209541.5 
+            685637.13,4209625.5 685683.19,4209696.0 
+            685696.5,4209735.0 685587.0,4209776.5 
+            685558.25,4209868.5 685511.63,4209959.0 
+            685509.88,4209989.5 685648.94,4210354.0 
+            685707.44,4210539.5 685724.88,4210691.5 
+            685719.56,4210900.0 685783.75,4211069.0 
+            685847.88,4211133.5 685912.5,4211150.5 
+            686025.5,4211164.5 686058.19,4211198.0 
+            686077.81,4211285.0 686095.63,4211409.5 
+            686100.38,4211473.0 686191.0,4211623.5 
+            686229.69,4211621.0 686395.88,4211686.5 
+            686574.56,4211745.5 686690.13,4211775.5 
+            686823.38,4211827.0 686886.94,4211819.5 
+            686940.88,4211806.5 686995.63,4211729.5 
+            687147.69,4211596.5 687193.19,4211598.5 
+            687237.06,4211625.0 687283.63,4211652.0 
+            687333.19,4211662.0 687391.0,4211675.0 
+            687401.94,4211685.0 687457.0,4211696.5 
+            687553.75,4211682.5 687587.13,4211664.0 
+            687615.19,4211625.5 687666.44,4211608.0 
+            687799.25,4211582.0 687843.38,4211585.5 
+            687959.63,4211555.0 687983.38,4211530.5 
+            688007.5,4211480.0 688016.0,4211347.5 
+            688034.25,4211320.0 688082.5,4211210.5 
+            688187.56,4211195.0 688252.88,4211157.0 
+            688322.88,4211078.0 688447.13,4211087.5 
+            688510.13,4211072.0 688560.63,4210978.0 
+            688636.44,4210884.0 688731.31,4210845.0 
+            688836.75,4210834.0 688894.81,4210771.5 
+            688924.5,4210675.0 688961.25,4210556.5 
+            689004.06,4210513.0 689076.06,4210423.5 
+            689168.69,4210326.0 689224.44,4210222.5 
+            689202.31,4210109.0 689115.06,4210083.5 
+            689038.19,4210112.5 688937.81,4210167.5 
+            688828.19,4210191.0 688721.63,4210183.5 
+            688725.0,4210120.5 688765.13,4210073.0 
+            688748.0,4210008.5 688685.38,4209983.5 
+            688615.69,4209977.0 688564.06,4209945.0 
+            688563.19,4209896.0 688594.06,4209817.0 
+            688627.5,4209758.5 688602.38,4209677.5 
+            688541.0,4209662.0 688479.81,4209671.0 
+            688446.5,4209651.0 688397.5,4209591.0 
+            688356.5,4209561.5 688355.5,4209531.5 
+            688357.31,4209494.0 688368.75,4209461.0 
+            688367.0,4209378.5 688409.94,4209362.5 
+            688433.88,4209325.5 688488.06,4209313.5 
+            688508.56,4209218.5 688583.0,4209158.0 
+            688626.63,4209174.5 688709.31,4209239.5 
+            688849.63,4209297.0 688900.56,4209393.5 
+            688951.5,4209494.0 688989.5,4209521.5 
+            689038.69,4209527.5 689201.88,4209478.5 
+            689238.13,4209414.5 689273.88,4209259.0 
+            689285.88,4209155.5 689325.88,4209116.0 
+            689390.13,4209122.0 689452.06,4209083.0 
+            689547.38,4209122.5 689603.75,4209090.0 
+            689726.69,4208965.5 689773.63,4208921.0 
+            689721.06,4208845.5 689592.56,4208842.5 
+            689545.0,4208816.0 689556.5,4208759.0 
+            689615.81,4208711.5 689694.0,4208682.5 
+            689763.94,4208666.5 689833.81,4208653.5 
+            689894.56,4208594.0 689920.31,4208481.0 
+            689904.0,4208334.5 689876.75,4208234.0 
+            689822.63,4208198.0 689689.75,4208176.0 
+            689504.0,4208146.5 689409.81,4208059.0 
+            689426.13,4208000.5 689440.38,4207954.0 
+            689491.69,4207925.0 689534.81,4207897.0 
+            689560.38,4207859.0 689573.56,4207798.5 
+            689585.75,4207739.0 689598.94,4207683.0 
+            689613.19,4207627.5 689590.38,4207560.0 
+            689549.25,4207558.0 689514.31,4207566.5 
+            689461.94,4207585.0 689410.44,4207548.0 
+            689377.56,4207545.0 689315.88,4207556.5 
+            689282.0,4207568.0 689296.63,4207650.0 
+            689292.63,4207697.5 689277.38,4207744.0 
+            689246.5,4207751.0 689222.69,4207678.0 
+            689197.81,4207612.5 689109.44,4207617.0 
+            689049.81,4207623.0 689084.06,4207729.0 
+            689104.75,4207791.5 689119.38,4207866.5 
+            689120.56,4207919.0 689060.06,4207974.5 
+            689049.0,4208060.0 688982.31,4208108.5 
+            688857.81,4208070.0 688844.5,4208097.5 
+            688814.81,4208143.0 688707.44,4208163.5 
+            688573.56,4208158.5 688514.75,4208158.5 
+            688490.31,4208151.0 688471.06,4208144.5 
+            688459.38,4208136.0 688445.25,4208117.0 
+            688415.25,4208115.5 688403.25,4208093.5 
+            688422.06,4208084.5 688440.0,4208067.0 
+            688425.88,4208047.5 688411.75,4208026.5 
+            688423.56,4208001.5 688455.0,4207981.5 
+            688444.75,4207922.5 688464.88,4207899.0 
+            688501.56,4207875.5 688505.25,4207844.5 
+            688479.75,4207820.5 688459.81,4207782.0 
+            688463.5,4207750.5 688485.75,4207722.0 
+            688517.19,4207703.0 688524.19,4207659.5 
+            688502.06,4207625.0 688468.81,4207631.5 
+            688438.5,4207646.5 688373.88,4207611.5 
+            688337.0,4207591.0 688327.25,4207556.5 
+            688305.88,4207537.5 688287.94,4207555.0 
+            688252.19,4207585.0 688192.38,4207571.5 
+            688167.31,4207581.5 688160.75,4207601.0 
+            688169.63,4207625.0 688191.13,4207636.0 
+            688227.06,4207654.0 688217.44,4207670.5 
+            688202.63,4207688.0 688210.25,4207721.0 
+            688226.31,4207749.5 688231.94,4207782.5 
+            688203.88,4207785.5 688191.31,4207794.5 
+            688199.13,4207819.5 688216.25,4207844.5 
+            688234.44,4207868.5 688228.88,4207890.5 
+            688211.19,4207895.0 688179.31,4207883.0 
+            688148.56,4207866.0 688104.88,4207820.5 
+            688080.56,4207790.0 688062.38,4207767.0 
+            688035.63,4207756.0 688004.38,4207766.0 
+            687997.31,4207809.5 688003.94,4207846.0 
+            688024.06,4207876.0 688019.31,4207907.0 
+            687998.44,4207916.0 687995.81,4207946.0 
+            688013.06,4207967.0 688019.75,4207996.0 
+            687993.63,4208009.0 687983.75,4208040.0 
+            688004.81,4208075.5 688028.88,4208120.5 
+            687994.13,4208149.0 687937.19,4208167.0 
+            687905.13,4208176.0 687888.63,4208187.0 
+            687863.13,4208256.0 687848.38,4208335.5 
+            687886.44,4208381.5 687940.56,4208472.0 
+            688007.06,4208562.5 688027.13,4208614.0 
+            688015.5,4208664.5 687987.75,4208675.5 
+            687920.19,4208669.0 687892.38,4208691.0 
+            687883.56,4208730.5 687894.25,4208761.0 
+            687880.25,4208779.0 687834.94,4208759.0 
+            687720.06,4208672.0 687501.06,4208523.0 
+            687249.75,4208425.0 687129.81,4208415.0 
+            687064.5,4208453.0 687088.44,4208525.0 
+            687164.75,4208607.5 687326.88,4208778.0 
+            687351.0,4208834.5 687408.13,4208905.5 
+            687435.13,4208955.5 687430.75,4208972.0 
+            687410.0,4208977.5 687324.75,4208951.5 
+            687210.5,4208929.5 687126.06,4208952.0 
+            687046.5,4209024.0 687012.25,4209115.0 
+            687006.06,4209174.0 686982.31,4209197.5 
+            686982.31,4209197.5 
+          </gml:coordinates>
+        </gml:LinearRing>
+      </gml:outerBoundaryIs>
+    </gml:Polygon>
+  </gml:polygonMember>
+</gml:MultiPolygon>
+</cit:the_geom>
+<cit:level>55</cit:level>
+<cit:color>1</cit:color>
+<cit:entity>Complex Shape</cit:entity>
+<cit:layer>55</cit:layer>
+<cit:mslink_dmr>0</cit:mslink_dmr>
+<cit:tipo>Embalses</cit:tipo>
+<cit:codigo>Embalse de la Pedrera</cit:codigo>
+<cit:elevation>0.0</cit:elevation>
+</cit:polygons></gml:featureMember><gml:featureMember>
+<cit:polygons><cit:the_geom><gml:MultiPolygon srsName='0'>
+  <gml:polygonMember>
+    <gml:Polygon srsName='0'>
+      <gml:outerBoundaryIs>
+        <gml:LinearRing srsName='0'>
+          <gml:coordinates>
+697871.19,4207945.5 697888.25,4207982.0 
+            697920.81,4208013.5 697957.38,4208056.0 
+            697973.13,4208108.0 697970.25,4208167.0 
+            697962.25,4208217.5 697967.94,4208252.5 
+            697945.5,4208305.0 697923.13,4208354.0 
+            697928.5,4208410.0 697945.81,4208434.5 
+            697952.69,4208464.5 697958.0,4208500.5 
+            697964.38,4208541.5 697981.13,4208604.5 
+            698022.63,4208663.0 698069.13,4208706.0 
+            698106.31,4208741.5 698191.13,4208822.5 
+            698181.0,4208869.0 698169.88,4208908.0 
+            698150.56,4208958.5 698165.13,4208990.5 
+            698168.44,4209033.0 698159.38,4209086.5 
+            698146.25,4209139.0 698111.44,4209174.0 
+            698123.0,4209222.5 698133.56,4209282.0 
+            698113.25,4209344.0 698072.31,4209391.5 
+            697996.13,4209384.5 697923.94,4209358.0 
+            697873.5,4209357.5 697808.0,4209436.0 
+            697806.13,4209477.0 697802.19,4209513.0 
+            697755.88,4209526.5 697750.88,4209556.5 
+            697779.75,4209566.5 697822.0,4209570.5 
+            697859.06,4209581.0 697878.75,4209601.0 
+            697889.25,4209640.5 697926.25,4209634.0 
+            697947.0,4209666.0 697986.0,4209653.0 
+            698031.31,4209651.0 698048.88,4209671.5 
+            698036.75,4209710.5 698020.5,4209759.0 
+            697995.0,4209806.5 698040.38,4209834.0 
+            698054.63,4209800.0 698082.31,4209772.0 
+            698119.44,4209784.5 698144.38,4209837.0 
+            698158.69,4209822.5 698196.81,4209824.0 
+            698226.69,4209833.5 698240.19,4209860.0 
+            698239.38,4209902.0 698264.13,4209912.5 
+            698280.63,4209926.5 698274.63,4209960.5 
+            698292.25,4209984.5 698316.0,4210005.0 
+            698351.13,4210023.0 698393.31,4210025.0 
+            698449.88,4210014.5 698497.25,4210022.5 
+            698514.88,4210051.0 698505.81,4210087.0 
+            698476.06,4210110.0 698439.0,4210114.5 
+            698415.5,4210144.5 698442.44,4210186.5 
+            698481.69,4210220.0 698530.19,4210240.5 
+            698591.0,4210260.0 698639.38,4210259.5 
+            698665.25,4210282.0 698668.44,4210316.0 
+            698666.63,4210366.5 698683.31,4210404.5 
+            698735.81,4210413.5 698797.63,4210428.5 
+            698853.38,4210456.0 698906.0,4210493.0 
+            698953.5,4210517.5 699006.0,4210524.5 
+            699049.25,4210517.0 699100.75,4210529.0 
+            699146.0,4210525.0 699197.5,4210534.0 
+            699227.5,4210562.5 699295.44,4210562.0 
+            699368.56,4210573.0 699405.75,4210609.0 
+            699474.94,4210650.0 699549.31,4210694.0 
+            699612.25,4210739.0 699664.94,4210793.5 
+            699719.56,4210816.0 699771.25,4210866.0 
+            699828.0,4210900.0 699882.63,4210926.5 
+            699882.44,4210860.5 699949.44,4210891.5 
+            700007.19,4210917.0 700064.88,4210933.0 
+            700118.31,4210901.0 700172.88,4210884.5 
+            700211.88,4210864.5 700248.81,4210822.5 
+            700282.63,4210777.0 700319.56,4210727.5 
+            700369.88,4210690.0 700403.75,4210661.0 
+            700460.25,4210620.0 700525.0,4210581.5 
+            700593.94,4210577.0 700652.56,4210557.5 
+            700719.44,4210540.5 700772.94,4210529.0 
+            700833.63,4210511.5 700899.44,4210490.5 
+            700983.75,4210460.5 701054.75,4210431.5 
+            701080.44,4210422.0 701124.0,4210382.0 
+            701175.38,4210341.0 701240.13,4210310.0 
+            701289.44,4210309.0 701323.31,4210289.5 
+            701344.94,4210256.5 701363.44,4210216.5 
+            701410.69,4210219.5 701424.06,4210171.5 
+            701447.69,4210134.5 701493.94,4210112.0 
+            701500.13,4210059.5 701557.63,4210055.5 
+            701598.75,4210011.0 701648.13,4209957.0 
+            701681.0,4209908.5 701707.75,4209863.5 
+            701735.5,4209812.0 701727.25,4209789.5 
+            701740.63,4209766.5 701763.25,4209747.0 
+            701784.81,4209738.0 701788.94,4209699.0 
+            701799.25,4209653.5 701818.75,4209590.0 
+            701834.19,4209548.0 701855.75,4209505.5 
+            701883.5,4209457.5 701920.5,4209401.0 
+            701953.44,4209348.5 701985.25,4209290.0 
+            702000.69,4209247.0 702021.25,4209195.5 
+            702025.38,4209139.0 702014.13,4209085.5 
+            701964.81,4209063.0 701897.0,4209054.5 
+            701832.25,4209048.5 701774.69,4209056.5 
+            701767.5,4209098.0 701745.94,4209152.5 
+            701727.38,4209201.5 701703.75,4209244.5 
+            701680.13,4209287.0 701651.38,4209320.5 
+            701606.13,4209360.0 701559.88,4209345.5 
+            701551.69,4209318.5 701567.13,4209269.5 
+            701574.31,4209242.5 701593.88,4209175.0 
+            701578.44,4209137.0 701541.44,4209146.0 
+            701502.38,4209153.0 701460.25,4209187.0 
+            701395.5,4209210.5 701343.13,4209207.5 
+            701269.13,4209208.5 701222.94,4209206.5 
+            701156.13,4209218.0 701142.75,4209190.0 
+            701144.81,4209160.5 701153.06,4209113.0 
+            701144.88,4209079.0 701133.56,4209047.5 
+            701121.25,4209017.5 701108.94,4208984.5 
+            701113.06,4208945.5 701136.69,4208910.5 
+            701170.63,4208874.5 701202.44,4208843.0 
+            701227.13,4208816.0 701264.13,4208733.0 
+            701288.81,4208721.5 701322.69,4208704.0 
+            701351.5,4208673.5 701361.75,4208628.0 
+            701384.38,4208608.5 701425.5,4208583.0 
+            701459.38,4208564.5 701497.94,4208522.5 
+            701515.88,4208487.5 701553.63,4208430.0 
+            701602.31,4208417.5 701638.25,4208339.0 
+            701674.06,4208267.5 701771.63,4208122.0 
+            701865.25,4208149.5 701880.44,4208079.5 
+            701902.19,4207980.0 701867.25,4207968.0 
+            701836.94,4207907.0 701824.88,4207877.0 
+            701837.63,4207839.0 701860.63,4207815.5 
+            701838.25,4207782.0 701824.13,4207753.0 
+            701798.75,4207712.5 701782.94,4207652.5 
+            701765.06,4207585.0 701784.44,4207514.0 
+            701770.31,4207483.0 701759.38,4207441.5 
+            701777.75,4207366.5 701789.69,4207313.0 
+            701798.56,4207254.5 701757.25,4207261.0 
+            701749.38,4207224.0 701765.31,4207181.5 
+            701765.88,4207129.0 701788.44,4207050.0 
+            701815.06,4206969.5 701827.13,4206904.5 
+            701845.25,4206852.5 701816.75,4206814.0 
+            701725.69,4206713.5 701684.63,4206723.5 
+            701644.25,4206734.5 701601.0,4206730.0 
+            701469.06,4206616.0 701486.63,4206522.5 
+            701499.0,4206329.5 701509.44,4206222.0 
+            701512.31,4206149.0 701473.13,4206147.5 
+            701365.25,4206104.0 701367.94,4206042.0 
+            701388.06,4205999.0 701451.19,4205982.0 
+            701499.0,4205951.5 701515.0,4205873.0 
+            701515.31,4205871.5 701557.44,4205656.5 
+            701481.5,4205627.0 701445.81,4205602.0 
+            701447.31,4205577.0 701454.0,4205547.0 
+            701427.63,4205518.0 701432.81,4205457.0 
+            701400.25,4205430.5 701403.5,4205362.5 
+            701387.0,4205361.0 701349.75,4205363.5 
+            701270.63,4205341.5 701250.5,4205310.5 
+            701193.06,4205287.5 701163.19,4205284.0 
+            701133.5,4205269.0 701117.25,4205251.0 
+            701091.06,4205214.5 701051.69,4205221.0 
+            701022.75,4205223.5 701003.31,4205212.0 
+            700946.63,4205146.0 700929.63,4205114.5 
+            700930.06,4205087.0 700938.88,4205057.0 
+            700915.69,4205023.5 700895.38,4205001.5 
+            700849.63,4205022.5 700827.5,4205046.0 
+            700795.56,4205041.0 700758.81,4205016.5 
+            700709.31,4205012.0 700660.63,4205020.0 
+            700597.44,4205031.5 700545.69,4205038.0 
+            700494.81,4205052.5 700441.0,4205059.0 
+            700395.63,4205057.0 700359.0,4205085.0 
+            700320.63,4205094.0 700262.75,4205095.0 
+            700208.19,4205083.5 700167.13,4205071.5 
+            700163.19,4205118.0 700138.06,4205138.0 
+            700103.31,4205177.0 700063.19,4205228.0 
+            700025.13,4205281.0 699991.5,4205312.5 
+            699924.44,4205308.0 699854.88,4205328.5 
+            699815.81,4205377.5 699786.25,4205414.0 
+            699763.06,4205443.5 699743.94,4205472.0 
+            699722.25,4205475.0 699712.44,4205503.5 
+            699695.13,4205551.0 699678.63,4205607.5 
+            699652.44,4205627.5 699602.0,4205619.5 
+            699564.56,4205633.5 699520.75,4205658.5 
+            699478.63,4205706.0 699448.81,4205756.5 
+            699439.44,4205823.0 699426.81,4205895.5 
+            699422.38,4205972.5 699405.0,4206021.0 
+            699406.56,4206050.0 699461.0,4206069.5 
+            699503.0,4206086.5 699492.0,4206127.0 
+            699456.25,4206139.5 699412.25,4206172.0 
+            699368.88,4206228.0 699340.31,4206263.5 
+            699310.69,4206244.5 699291.88,4206256.5 
+            699219.56,4206255.0 699175.0,4206261.5 
+            699122.0,4206274.5 699090.63,4206303.0 
+            699060.0,4206348.0 699033.81,4206374.5 
+            699003.88,4206373.0 698979.44,4206353.0 
+            698939.13,4206281.0 698898.25,4206252.5 
+            698885.31,4206291.5 698855.44,4206285.0 
+            698821.63,4206268.0 698828.06,4206324.0 
+            698833.13,4206472.5 698832.13,4206541.5 
+            698799.81,4206564.0 698766.38,4206590.5 
+            698739.81,4206643.5 698696.75,4206694.5 
+            698649.69,4206663.0 698609.5,4206658.5 
+            698605.06,4206679.0 698678.44,4206746.0 
+            698770.13,4206762.0 698821.06,4206806.0 
+            698810.88,4206870.0 698800.69,4206930.5 
+            698796.75,4206989.5 698784.38,4207059.5 
+            698763.88,4207120.0 698740.13,4207190.0 
+            698715.25,4207268.0 698664.06,4207312.5 
+            698621.38,4207333.5 698601.44,4207356.0 
+            698574.0,4207397.0 698545.69,4207429.5 
+            698501.0,4207446.5 698432.0,4207436.5 
+            698374.38,4207423.0 698322.69,4207427.5 
+            698262.75,4207433.0 698209.06,4207431.0 
+            698177.69,4207456.5 698144.13,4207494.0 
+            698106.5,4207524.5 698058.63,4207552.5 
+            697993.31,4207571.5 697944.69,4207578.0 
+            697921.63,4207598.0 697918.5,4207672.5 
+            697939.31,4207732.5 697975.81,4207778.5 
+            697976.38,4207813.0 697934.63,4207846.0 
+            697885.38,4207895.0 697871.19,4207945.5 
+            697871.19,4207945.5 
+          </gml:coordinates>
+        </gml:LinearRing>
+      </gml:outerBoundaryIs>
+    </gml:Polygon>
+  </gml:polygonMember>
+</gml:MultiPolygon>
+</cit:the_geom>
+<cit:level>55</cit:level>
+<cit:color>1</cit:color>
+<cit:entity>Complex Shape</cit:entity>
+<cit:layer>55</cit:layer>
+<cit:mslink_dmr>0</cit:mslink_dmr>
+<cit:tipo>Embalses</cit:tipo>
+<cit:codigo>Salinas de Torrevieja</cit:codigo>
+<cit:elevation>0.0</cit:elevation>
+</cit:polygons></gml:featureMember><gml:featureMember>
+<cit:polygons><cit:the_geom><gml:MultiPolygon srsName='0'>
+  <gml:polygonMember>
+    <gml:Polygon srsName='0'>
+      <gml:outerBoundaryIs>
+        <gml:LinearRing srsName='0'>
+          <gml:coordinates>
+702663.13,4211798.0 702622.06,4211833.0 
+            702587.13,4211841.5 702546.13,4211882.5 
+            702489.69,4211919.5 702440.38,4211956.0 
+            702387.0,4211987.0 702320.38,4212065.0 
+            702274.19,4212093.0 702237.25,4212118.5 
+            702183.88,4212156.0 702141.75,4212165.0 
+            702062.63,4212173.5 702019.56,4212228.0 
+            701899.25,4212229.5 701866.44,4212264.5 
+            701820.25,4212302.5 701735.94,4212292.5 
+            701675.44,4212348.0 701608.63,4212339.0 
+            701517.13,4212339.5 701457.44,4212331.0 
+            701420.5,4212353.0 701378.44,4212384.0 
+            701308.5,4212364.5 701279.88,4212448.0 
+            701250.25,4212515.5 701232.88,4212554.0 
+            701238.06,4212579.5 701213.63,4212685.5 
+            701181.81,4212719.5 701146.94,4212738.0 
+            701122.25,4212747.5 701124.38,4212778.0 
+            701156.31,4212790.5 701246.06,4212933.0 
+            701238.94,4212969.0 701261.63,4213008.0 
+            701290.5,4213035.0 701324.5,4213085.0 
+            701359.5,4213095.5 701397.56,4213110.5 
+            701403.81,4213141.5 701400.81,4213171.5 
+            701415.25,4213185.5 701478.0,4213198.0 
+            701531.44,4213208.0 701579.81,4213226.5 
+            701624.13,4213261.0 701647.81,4213300.0 
+            701669.38,4213292.0 701699.25,4213295.0 
+            701718.81,4213315.5 701732.19,4213332.0 
+            701768.19,4213332.0 701799.0,4213333.0 
+            701845.56,4213349.5 701893.94,4213342.0 
+            701898.13,4213399.0 701913.56,4213405.0 
+            701954.75,4213376.0 702013.44,4213394.5 
+            702104.0,4213358.5 702158.63,4213405.0 
+            702237.88,4213402.5 702260.56,4213429.5 
+            702382.06,4213454.0 702427.31,4213381.0 
+            702488.06,4213408.5 702529.25,4213396.0 
+            702560.19,4213409.5 702603.38,4213409.5 
+            702628.06,4213374.5 702681.63,4213380.5 
+            702713.5,4213343.5 702730.0,4213318.0 
+            702753.63,4213309.5 702789.75,4213406.5 
+            702837.13,4213415.5 702852.63,4213439.0 
+            702892.75,4213422.5 702906.13,4213443.5 
+            702958.63,4213462.0 702989.5,4213446.5 
+            703029.69,4213466.0 703083.25,4213449.5 
+            703128.56,4213453.5 703177.38,4213425.0 
+            703212.5,4213418.0 703249.69,4213422.0 
+            703271.38,4213440.5 703310.63,4213442.5 
+            703353.94,4213413.5 703399.44,4213418.5 
+            703438.69,4213442.5 703463.5,4213446.5 
+            703535.69,4213383.0 703580.06,4213372.0 
+            703670.0,4213401.5 703694.75,4213398.5 
+            703715.38,4213374.5 703737.0,4213360.0 
+            703791.75,4213359.0 703796.94,4213373.5 
+            703752.63,4213418.0 703721.75,4213458.5 
+            703785.75,4213458.0 703867.44,4213524.0 
+            703938.63,4213485.0 703981.0,4213483.5 
+            704030.63,4213500.0 704096.75,4213520.5 
+            704124.56,4213488.5 704151.38,4213484.5 
+            704197.94,4213504.0 704254.75,4213531.5 
+            704284.75,4213557.5 704254.94,4213620.5 
+            704314.81,4213608.0 704348.88,4213613.0 
+            704390.25,4213631.5 704433.69,4213656.5 
+            704460.5,4213632.5 704485.25,4213617.0 
+            704536.0,4213699.5 704561.81,4213693.5 
+            704571.06,4213676.5 704575.13,4213654.0 
+            704579.25,4213631.5 704584.38,4213620.0 
+            704604.0,4213617.0 704614.25,4213581.5 
+            704589.44,4213541.5 704569.75,4213525.0 
+            704572.75,4213480.5 704580.94,4213439.0 
+            704590.19,4213411.5 704576.75,4213385.5 
+            704561.25,4213373.0 704558.06,4213344.0 
+            704547.69,4213320.5 704520.81,4213301.0 
+            704502.19,4213278.0 704489.75,4213249.5 
+            704474.19,4213221.5 704480.69,4213192.5 
+            704486.75,4213174.0 704434.94,4213107.0 
+            704438.88,4213075.5 704434.56,4213041.5 
+            704421.0,4213010.5 704431.13,4212982.0 
+            704450.5,4212954.0 704437.63,4212866.5 
+            704445.75,4212847.0 704460.94,4212812.0 
+            704455.25,4212718.5 704456.25,4212693.5 
+            704457.06,4212674.0 704467.13,4212632.0 
+            704485.38,4212605.5 704491.56,4212596.5 
+            704513.94,4212556.5 704514.69,4212507.0 
+            704505.19,4212462.0 704499.81,4212422.0 
+            704521.25,4212396.0 704554.0,4212374.0 
+            704567.25,4212344.5 704552.5,4212288.0 
+            704527.75,4212279.5 704510.19,4212266.5 
+            704513.13,4212242.0 704624.13,4212230.0 
+            704645.63,4212207.0 704644.13,4212129.0 
+            704684.13,4212115.5 704707.19,4212008.0 
+            704741.06,4211999.5 704784.13,4211970.5 
+            704842.94,4211912.0 704887.88,4211859.5 
+            704925.88,4211852.0 704961.5,4211775.5 
+            704979.94,4211765.5 705007.63,4211754.0 
+            705031.13,4211726.0 705042.13,4211666.5 
+            705039.94,4211644.0 705021.44,4211638.0 
+            704996.69,4211622.5 704979.13,4211602.0 
+            704972.88,4211580.5 705017.06,4211580.5 
+            705036.44,4211553.5 705046.63,4211531.0 
+            705063.06,4211528.5 705078.5,4211530.5 
+            705089.81,4211537.0 705113.44,4211539.0 
+            705123.69,4211530.5 705132.88,4211521.0 
+            705133.88,4211510.0 705131.75,4211498.5 
+            705125.5,4211488.5 705106.94,4211472.0 
+            705123.31,4211450.5 705136.56,4211429.0 
+            705148.81,4211412.5 705153.69,4211399.0 
+            705133.06,4211348.5 705104.19,4211308.5 
+            705082.5,4211296.0 705051.56,4211266.0 
+            705017.5,4211231.0 704978.31,4211209.5 
+            704968.0,4211162.0 704957.69,4211125.0 
+            704920.56,4211095.0 704885.5,4211069.0 
+            704879.31,4211013.5 704871.06,4210981.5 
+            704821.56,4210956.5 704766.88,4210937.0 
+            704729.75,4210933.0 704689.5,4210954.5 
+            704656.5,4210969.0 704594.63,4210963.0 
+            704546.13,4210960.0 704492.5,4210953.5 
+            704445.06,4210932.0 704401.75,4210927.0 
+            704364.63,4210936.0 704322.31,4210921.5 
+            704276.94,4210902.0 704216.13,4210897.0 
+            704163.5,4210909.0 704115.0,4210936.0 
+            704058.25,4210949.5 704004.63,4210956.5 
+            703994.31,4211038.0 703973.69,4211064.0 
+            703946.88,4211091.0 703908.75,4211085.5 
+            703873.63,4211061.0 703827.25,4211055.5 
+            703794.25,4211091.0 703759.13,4211115.5 
+            703714.75,4211155.0 703699.38,4211174.0 
+            703678.88,4211175.0 703662.31,4211167.0 
+            703634.81,4211204.0 703584.63,4211239.5 
+            703534.44,4211277.5 703481.13,4211314.0 
+            703443.31,4211351.0 703390.0,4211384.5 
+            703328.5,4211413.5 703259.81,4211457.0 
+            703201.44,4211499.5 703147.13,4211531.0 
+            703094.88,4211564.0 703040.63,4211613.0 
+            702994.69,4211668.5 702936.31,4211712.0 
+            702859.44,4211755.0 702821.38,4211777.0 
+            702791.63,4211800.0 702762.88,4211803.0 
+            702725.81,4211788.5 702691.88,4211784.5 
+            702663.13,4211798.0 702663.13,4211798.0 
+          </gml:coordinates>
+        </gml:LinearRing>
+      </gml:outerBoundaryIs>
+    </gml:Polygon>
+  </gml:polygonMember>
+</gml:MultiPolygon>
+</cit:the_geom>
+<cit:level>55</cit:level>
+<cit:color>1</cit:color>
+<cit:entity>Complex Shape</cit:entity>
+<cit:layer>55</cit:layer>
+<cit:mslink_dmr>0</cit:mslink_dmr>
+<cit:tipo>Embalses</cit:tipo>
+<cit:codigo>Salinas de la Mata</cit:codigo>
+<cit:elevation>0.0</cit:elevation>
+</cit:polygons></gml:featureMember></gml:FeatureCollection>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.xsd	(revision 42196)
@@ -0,0 +1,1138 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:mne="http://www.idee.es/mne" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="http://www.idee.es/mne" version="1.2.0">
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+	<annotation>
+		<appinfo>mne.xsd v1.2.0 2006-11</appinfo>
+		<documentation xml:lang="es">
+			Especificaci�n del modelo de intercambio en GML del Modelo
+			de Nomencl�tor de Espa�a v 1.2
+		</documentation>
+	</annotation>
+	<import namespace="http://www.opengis.net/gml" schemaLocation="http://10.13.87.19:80/wfs/IDEE-WFS-Nomenclator/schemas/feature.xsd"/>
+	<import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://10.13.87.19:80/wfs/IDEE-WFS-Nomenclator/schemas/xlinks.xsd"/>
+	<!-- ==============================================================
+		declaraciones de elementos globales
+		=================================================================== -->
+	<element name="ResultCollection" substitutionGroup="gml:_FeatureCollection" type="mne:ResultCollectionType"/>
+	<element name="Entidad" substitutionGroup="gml:_Feature" type="mne:EntidadFeatureType">
+		<annotation>
+			<documentation xml:lang="es">
+				Cada entidad de un Nomencl�tor debe tener su propio
+				identificador. Para ello se utiliza el atributo fid
+				heredado de gml:_Feature.
+			</documentation>
+		</annotation>
+	</element>
+
+	<!-- ==============================================================
+		declaraci�n de propiedades adicionales
+		[GML 2.1.2 Implementation Specification 5.2.1 Defining new feature types]
+		EntidadFeatureType
+		=================================================================== -->
+
+	<!-- ==============================================================
+		definici�n de tipos de features
+		EntidadFeatureType
+		=================================================================== -->
+	<complexType name="ResultCollectionType">
+		<complexContent>
+			<extension base="gml:AbstractFeatureCollectionType"/>
+		</complexContent>
+	</complexType>
+	<complexType name="EntidadFeatureType">
+		<annotation>
+			<documentation xml:lang="es">
+				Cada una de las entradas que se realicen en el MNE
+				coresponder� a una entidad geogr�fica, entendiendo como
+				tal, un fen�meno del mundo real que tiene asociada una
+				localizaci�n ligada a la Tierra. Ejemplos de instancias
+				de entidades geogr�ficas ser�an el rio Ebro, el puerto
+				de M�laga, Los Pirineos, o una direcci�n postal. Cada
+				entidad en un nomencl�tor debe tener su propio
+				identificador (IdEntidad). El responsable del
+				nomencl�tor ser� el encargado de asignar los
+				identificadores, que ser�n �nicos en el �mbito del
+				nomencl�tor. En esta implementaci�n, el atributo fid
+				representa este identificador.
+			</documentation>
+		</annotation>
+		<complexContent>
+			<extension base="gml:AbstractFeatureType">
+				<sequence maxOccurs="1" minOccurs="1">
+					<element maxOccurs="unbounded" name="nombreEntidad" type="mne:NombreEntidadType">
+						<annotation>
+							<documentation xml:lang="es">
+								Cada uno de los nombre de la entidad.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="1" name="tipoEntidad" type="mne:TipoEntidadType">
+						<annotation>
+							<documentation xml:lang="es">
+								Los tipos, clases o categor�as de la
+								entidad.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="1" name="posicionEspacial" type="mne:PosicionEspacialType">
+						<annotation>
+							<documentation xml:lang="es">
+								Una entidad puede georrefereciarse
+								mediante un punto, una l�nea, una
+								superficie o mediante un m�nimo
+								rect�ngulo envolvente (bounding box). Al
+								menos se recomienda georreferenciar un
+								top�nimo por medio de un punto.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="1" name="entidadLocal" type="mne:EntidadLocalType">
+						<annotation>
+							<documentation xml:lang="es">
+								Se especifica la ubicaci�n geogr�fica de
+								la entidad. S�lo se utilizan entidades
+								registradas en el Registro de Entidades
+								Locales del MAP y en cada uno de estos
+								campos se deber�a utilizar el c�digo de
+								la entidad Local (INE) para
+								identificarla. Este tipo puede ser
+								extendido si se desea incorporar las
+								Comunidades Aut�nomas, o cualquier otro
+								tipo de entidad territoria.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="0" name="codificacion" type="mne:CodificacionType">
+						<annotation>
+							<documentation xml:lang="es">
+								El c�digo identifica a la entidad, un
+								rio, un municipio, etc. Es una
+								descripci�n alfanum�rica de la entidad,
+								pero este campo no se utiliza para
+								describir las entidades por las que
+								transcurre la entidad, como es en el
+								caso de los campos Mapa o EntidadLocal.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="0" name="mapa" type="mne:MapaType">
+						<annotation>
+							<documentation xml:lang="es">
+								Nombre de la Serie cartogr�fica y Hojas
+								que contienen a la entidad.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="1" minOccurs="0" name="nivel" type="mne:NivelType">
+						<annotation>
+							<documentation xml:lang="es">
+								Valor num�rico asignado a un subconjunto
+								de top�nimos dentro de un nomencl�tor
+								para ordenarlos seg�n una gradaci�n de
+								resoluciones. Si todos los top�nimos de
+								un nomencl�tor han sido extraidos de un
+								mismo mapa o corresponden a una misma
+								resoluci�n tendr�n el mismo nivel.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="0" name="direccion" type="mne:DireccionType">
+						<annotation>
+							<documentation xml:lang="es">
+								Direcci�n f�sica donde se ubica la
+								entidad.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="0" name="entidadRelacionada" type="mne:EntidadRelacionadaType">
+						<annotation>
+							<documentation xml:lang="es">
+								Relaci�n expl�cita con otra entidad que
+								se se encuentra en el modelo
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="0" name="atributoEntidad" type="mne:AtributoEntidadType">
+						<annotation>
+							<documentation xml:lang="es">
+								Permite itnroducir otros datos
+								relacionados con la entidad como son el
+								n�mero de habitantes, el tipo de
+								poblaci�n o la altitud.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="unbounded" minOccurs="0" name="evento" type="mne:EventoType">
+						<annotation>
+							<documentation xml:lang="es">
+								Deja constancia de los eventos o sucesos
+								ocurridos a nivel f�sico en el conjunto
+								de datos y relacionados con la entrada
+								correspondiente.
+							</documentation>
+						</annotation>
+					</element>
+
+					<element maxOccurs="1" minOccurs="0" name="observaciones" type="string">
+						<annotation>
+							<documentation xml:lang="es">
+								Observaciones sobre la entidad
+							</documentation>
+						</annotation>
+					</element>
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<!-- ==============================================================
+		definici�n de tipos complejos
+		NombreEntidadType
+		TipoEntidadType
+		SistemaCodificacionType
+		EntidadLocalType
+		ProvinciaType
+		MunicipioType
+		=================================================================== -->
+	<complexType name="NombreEntidadType">
+		<annotation>
+			<documentation xml:lang="es">
+				Cada uno de los nombre de la entidad.
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="nombre" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre de la entidad, el top�nimo. Se recomienda
+						no utlizar abreviaturas, pero si se utilizan se
+						aconseja describir el significado de estas.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="0" name="etimologia" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						La etimolog�a del nombre es el origen de las
+						palabras, de su significaci�n y de su forma.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="0" name="pronunciacion" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Representaci�n fon�tica del nombre
+						(transcripci�n), seg�n el Alfabeto Fon�tico
+						Internacional, AFI. Si se uitliza un sistema
+						gr�fico indicar cu�l se utiliza en la
+						descripci�n.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="idioma" type="mne:IdiomaType">
+				<annotation>
+					<documentation xml:lang="es">
+						El idioma del nombre de la entidad en funci�n
+						del c�digo dado por la norma ISO639-2
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="claseNombre" type="mne:ClaseNombreType">
+				<annotation>
+					<documentation xml:lang="es">
+						El nombre de la entidad puede tener diferentes
+						apreciaciones, aunque Lleida y L�rida hacen
+						referencia a la misma entidad, el segundo se
+						refiere al nombre anterior, mientras que el
+						primero al preferente, de esta manera en este
+						campo se distingue todas las diferentes
+						apreciaciones de tratamiento que puede tener el
+						nombre de una entidad.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="estatus" type="mne:EstatusType">
+				<annotation>
+					<documentation xml:lang="es">
+						Si el top�nimo es ofical, normalizado o ninguna
+						de las dos cosas. Desde la versi�n 1.2 sustituye
+						a "oficial" y "normalizado".
+					</documentation>
+				</annotation>
+			</element>
+
+			<element maxOccurs="1" minOccurs="1" name="fuente" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Identificador de la fuente de la que se ha
+						obtenido el top�nimo. Si se ha utilizado Dublin
+						Core Metadata Element Set para catalogarla este
+						campo debe corresponder con el campo identifier.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="TipoEntidadType">
+		<annotation>
+			<documentation xml:lang="es">
+				Los tipos, clases o categor�as de la entidad.
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="tipo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						El tipo o clase de la entidad (r�o, cordillera,
+						municipio, etc.)
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="catalogoEntidades" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						El cat�logo de entidades en el que se clasifican
+						jer�rquicamente los tipos de las entidades
+						utilizados en el nomencl�tor. Se recomienda dar
+						la URL de un cat�logo accesible en red.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="EntidadLocalType">
+		<annotation>
+			<documentation xml:lang="es">
+				Se especifica la ubicaci�n geogr�fica de la entidad.
+				S�lo se utilizan entidades registradas en el Registro de
+				Entidades Locales del MAP y en cada uno de estos campos
+				se deber�a utilizar el c�digo de la entidad Local (INE)
+				para identificarla. Este tipo puede ser extendido si se
+				desea incorporar las Comunidades Aut�nomas, o cualquier
+				otro tipo de entidad territoria.
+			</documentation>
+		</annotation>
+		<choice maxOccurs="1" minOccurs="1">
+			<element maxOccurs="unbounded" minOccurs="1" name="provincia" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						La provincia o provincias donde se encuentra la
+						entidad, dando como m�nimo la provincia donde se
+						encuentra el punto que sirve de referencia
+						geogr�fica de la entidad. En el caso de que sean
+						varios puntos (entidades lineales, superficiales
+						o puntuales como Picos situados en el l�mite
+						entre dos o m�s unidades administrativas), se
+						puede especificar una de las provicias, varias o
+						todas. Si no se puede asignar ninguna provincia,
+						se deber� utilizar el valor "no aplica", al ser
+						este un campo obligatorio.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="unbounded" minOccurs="0" name="municipio" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						El municipio o municipios de la entidad. En caso
+						de utilizar un nombre geogr�fico hay que
+						completarlo con el nombre de la entidad local
+						que lo contiene siguiendo el patr�n "nombre de
+						municipio(nombre de provincia)"
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="unbounded" minOccurs="0" name="comarca" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						La comarca o comarcas administrativas. En caso
+						de utilizar un nombre geogr�fico hay que
+						completarlo con el nombre de la entidad local
+						que lo contiene siguiendo el patr�n "nombre de
+						comarca(nombre de comunidad aut�noma)"
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="unbounded" minOccurs="0" name="isla" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						La isla o islas de la entidad. En caso de
+						utilizar un nombre geogr�fico hay que
+						completarlo con el nombre de la entidad local
+						que lo contiene siguiendo el patr�n "nombre de
+						isla(nombre de provincia)"
+
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="unbounded" minOccurs="0" name="EATIM" type="mne:EATIMType">
+				<annotation>
+					<documentation xml:lang="es">
+						Las Entidades de �mbito Territorial Inferior al
+						Municipio (EATIM). En caso de utilizar un nombre
+						geogr�fico hay que completarlo con el nombre de
+						la entidad local que lo contiene siguiendo el
+						patr�n "nombre de EATIM(nombre de Municipio,
+						nombre de Provincia)"
+					</documentation>
+				</annotation>
+			</element>
+		</choice>
+	</complexType>
+	<complexType name="CodificacionType">
+		<annotation>
+			<documentation xml:lang="es">
+				El c�digo identifica a la entidad, un rio, un municipio,
+				etc. Es una descripci�n alfanum�rica de la entidad, pero
+				este campo no se utiliza para describir las entidades
+				por las que transcurre la entidad, como es en el caso de
+				los campos Mapa o EntidadLocal.
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="codigo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Clasifica la entidad de acuerdo con el Sistema
+						de Codificaci�n empleado (si fuese el c�digo
+						postal, por ejemplo, ser�a un n�mero con 5
+						d�gitos).
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="sistemaCodificacion" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Define el sistema al que est� referido el c�digo
+						(por ejemplo, el c�digo postal, el c�digo de una
+						base cartogr�fica num�rica, etc.). Ejemplos de
+						sistema de codificaci�n pueden ser C�digo INE,
+						C�digo Postal, Registro de Entidades Locales y
+						C�digos de r�os del CEDEX.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="EATIMType">
+		<sequence>
+			<element maxOccurs="1" minOccurs="1" name="nombre" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Se indica el nombre de la EATIM. En esta
+						implementaci�n corresponde con "nombreEATIM".
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="tipo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Se indica el tipo de la EATIM, pudiendo ser
+						caser�os, parroquias, aldeas, barrios,
+						anteiglesias, concejo, pedan�as, lugares anejos,
+						etc. En esta implementaci�n corresponde con
+						"tipoEATIM".
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="MapaType">
+		<annotation>
+			<documentation xml:lang="es">
+				Nombre de la Serie cartogr�fica y Hojas que contienen a
+				la entidad.
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="serie" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre de la Serie cartogr�fica.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="unbounded" minOccurs="1" name="hoja" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						N�mero/s de la/s Hoja/s del mapa correspondiente
+						a la serie se�alada, en el que se encuentra el o
+						los punto/s que sirve como referencia geom�trica
+						del top�nimo. Desde la versi�n 1.2 dentro de una
+						Serie cartogr�fica puede darse m�s de una Hoja.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="DireccionType">
+		<annotation>
+			<documentation xml:lang="es">
+				Direcci�n f�sica donde se ubica la entidad.
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="direccionPostal" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Direcci�n f�sica donde se ubica la entidad. Por
+						ejemplo, puede ser el nombre de una calle y el
+						n�mero o el nombre de una carretera y un punto
+						kilom�trico. En los casos de los callejeros, la
+						direcci�n postal es en si misma una Entidad, por
+						lo que en ese caso debe utilizar el
+						NombreEntidad para definir la direcci�n postal
+						como entidad y a su ver para recoger el vial de
+						la direcci�n postal se utilizar� el campo
+						Direcci�n.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="0" name="localidad" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						La Localidad donde se ubica la direcci�n de la
+						entidad.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="0" name="codigoPostal" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						El n�mero del C�digo Postal donde se ubica la
+						entidad. No confundir el el que puede aparecer
+						en el campo Codificaci�n que identifica la
+						entidad.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="EntidadRelacionadaType">
+		<annotation>
+			<documentation xml:lang="es">
+				Relaci�n expl�cita con otra entidad que se se encuentra
+				en el modelo
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="idEntidad" type="NCName">
+				<annotation>
+					<documentation xml:lang="es">
+						El identificador de la entidad con la que se va
+						a relacionar la entidad que se est�
+						introduciendo en el modelo.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="descripcionRelacion" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Se describe la relaci�n que existe entre ambas
+						entidades.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="tipoRelacion" type="mne:RelacionType">
+				<annotation>
+					<documentation xml:lang="es">
+						Se establece el tipo de relaci�n que existe
+						entre las entidades.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="AtributoEntidadType">
+		<annotation>
+			<documentation xml:lang="es">
+				Permite introducir otros datos relacionados con la
+				entidad como son el n�mero de habitantes, el tipo de
+				poblaci�n o la altitud.
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="tipoAtributo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Hace referencia al tipo de dato que se quiere
+						documentar (p.e. la altitud).
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="valorAtributo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Se refiere al valor del atributo (p.e. 580 si la
+						altitud es 580 metros)
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="unidadAtributo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Unidad de medida del dato, pudiendo ser no
+						aplicable o adimensional (p.e metros si hablamos
+						de altitud).
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="0" name="calidadAtributo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Describe la calidad del valor, por ejemplo �0,1
+						en el valor de las unidades.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="0" name="notaAtributo" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						Nota aclaratoria sobre el atributo.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="0" name="fechaAtributo" type="mne:FechaAtributoType">
+				<annotation>
+					<documentation xml:lang="es">
+						Fecha u hora o ambas de la toma de la medida.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="EventoType">
+		<annotation>
+			<documentation xml:lang="es">
+				Deja constancia de los eventos o sucesos ocurridos a
+				nivel f�sico en el conjunto de datos y relacionados con
+				la entrada correspondiente.
+			</documentation>
+		</annotation>
+		<sequence maxOccurs="1" minOccurs="1">
+			<element maxOccurs="1" minOccurs="1" name="tipoEvento" type="mne:TipoEventoType">
+				<annotation>
+					<documentation xml:lang="es">
+						Describe el suceso o evento, puede ser alta,
+						baja, modificaci�n o actualizaci�n.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="descripcion" type="string">
+				<annotation>
+					<documentation xml:lang="es">
+						CDampo de texto libre para indicar a que campo
+						afecta el evento.
+					</documentation>
+				</annotation>
+			</element>
+			<element maxOccurs="1" minOccurs="1" name="fecha" type="mne:FechaType">
+				<annotation>
+					<documentation xml:lang="es">
+						Contiene la fecha de ocurrencia del suceso.
+					</documentation>
+				</annotation>
+			</element>
+		</sequence>
+	</complexType>
+	<complexType name="PosicionEspacialType">
+		<annotation>
+			<documentation xml:lang="es">
+				Una entidad puede georrefereciarse mediante un punto,
+				una l�nea, una superficie o mediante un m�nimo
+				rect�ngulo envolvente (bounding box). Al menos se
+				recomienda georreferenciar un top�nimo por medio de un
+				punto.
+			</documentation>
+		</annotation>
+		<complexContent>
+			<restriction base="gml:GeometryAssociationType">
+				<choice maxOccurs="1" minOccurs="1">
+					<element maxOccurs="1" minOccurs="1" ref="gml:Point">
+						<annotation>
+							<documentation xml:lang="es">
+								En esta implementaci�n se utiliza esta
+								codifiicaci�n para las geometr�as
+								puntuales. El sistema geod�tico y de
+								referencia debe ser expl�cito.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="1" minOccurs="1" ref="gml:LineString">
+						<annotation>
+							<documentation xml:lang="es">
+								En esta implementaci�n se utiliza esta
+								codificaci�n para las geometr�as
+								lineales. El sistema geod�tico y de
+								referencia debe ser expl�cito.
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="1" minOccurs="1" ref="gml:Polygon">
+						<annotation>
+							<documentation xml:lang="es">
+								En esta implementaci�n se utiliza esta
+								codificaci�n para las geometr�as
+								superficiales.El sistema geod�tico y de
+								referencia debe ser expl�cito.
+
+							</documentation>
+						</annotation>
+					</element>
+					<element maxOccurs="1" minOccurs="1" ref="gml:Box">
+						<annotation>
+							<documentation xml:lang="es">
+								En esta implementaci�n se utiliza esta
+								codificaci�n para los rect�ngulos
+								m�nimos envolventes. El sistema
+								geod�tico y de referencia debe ser
+								expl�cito.
+							</documentation>
+						</annotation>
+					</element>
+				</choice>
+				<attributeGroup ref="xlink:simpleLink"/>
+				<attribute ref="gml:remoteSchema" use="optional"/>
+			</restriction>
+		</complexContent>
+	</complexType>
+
+	<!-- ==============================================================
+		definici�n de enumeraciones
+		IdiomaType
+		ClaseNombreType
+		OficialType
+		=================================================================== -->
+	<simpleType name="IdiomaType">
+		<annotation>
+			<documentation xml:lang="es">
+				Contiene los c�digos que son recogidos en la norma ISO
+				639 2 (Alpha-3 Code). Esta lista puede ser extendida con
+				los c�digos de otros idomas. Consultar en
+				http://www.loc.gov/standards/iso639-2/langcodes.html
+			</documentation>
+		</annotation>
+		<restriction base="string">
+			<enumeration value="spa">
+				<annotation>
+					<documentation xml:lang="es">
+						Espa�ol o Castellano
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="cat">
+				<annotation>
+					<documentation xml:lang="es">
+						Catal�n - Valenciano
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="eus">
+				<annotation>
+					<documentation xml:lang="es">Euskera</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="glg">
+				<annotation>
+					<documentation xml:lang="es">Gallego</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="arg">
+				<annotation>
+					<documentation xml:lang="es">
+						Aragon�s
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="ast">
+				<annotation>
+					<documentation xml:lang="es">
+						Asturiano
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="oci">
+				<annotation>
+					<documentation xml:lang="es">
+						Aran�s (a trav�s del c�digo del occitano)
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="mul">
+				<annotation>
+					<documentation xml:lang="es">
+						M�ltiples Lenguas (multiling�e)
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="und">
+				<annotation>
+					<documentation xml:lang="es">
+						Indeterminado (no se dispone del idioma del
+						top�nimo)
+					</documentation>
+				</annotation>
+			</enumeration>
+		</restriction>
+	</simpleType>
+	<simpleType name="ClaseNombreType">
+		<restriction base="string">
+			<enumeration value="Preferente">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre principal de una entidad geogr�fica,
+						necesario para hacer posible la gesti�n interna
+						de nombres �nicos. Si existe un nombre oficial
+						ha de tomarse como nombre preferente. Si existen
+						dos o m�s nombres oficiales, uno de ellos debe
+						tomarse como nombre preferente y el resto como
+						alternativos, aplicando alg�n criterio
+						convencional, uniforme y objetivo.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Alternativo">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre de una entidad geogr�fica que es oficial
+						al mismo nivel que el nombre preferente.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Variante">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre de uso menor o restringido, referido a
+						una entidad geogr�fica con un nombre preferente.
+						No puede ser un nombre oficial.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Ex�nimo">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre que dan a un lugar los hablantes de
+						lenguas ajenas a �l.de uso menor o restringido.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Hist�rico">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre en desuso, utilizado hace m�s de 100
+						a�os.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Anterior">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre en desuso, utilizado hace menos de 100
+						a�os.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Sobrenombre">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre en uso de una entidad geogr�fica
+						metaf�rico, literario o coloquial. Sustituye a
+						"Alias". Introducido en la versi�n 1.2.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="No disponible">
+				<annotation>
+					<documentation xml:lang="es">
+						Nombre geogr�fico incluido provisionalmente en
+						esta clase, por considerarse su clase
+						desconocida o indeterminada.
+					</documentation>
+				</annotation>
+			</enumeration>
+		</restriction>
+	</simpleType>
+	<simpleType name="EstatusType">
+		<annotation>
+			<documentation xml:lang="es">
+				Sustituye a los tipos "OficialType" y "NormalizadoType".
+				Introducido en la versi�n 1.2.
+			</documentation>
+		</annotation>
+		<restriction base="string">
+			<enumeration value="Oficial">
+				<annotation>
+					<documentation xml:lang="es">
+						Cuando el top�nimo es declarado y publicado como
+						tal por un �rgano competente mediante el acto
+						administrativo correspondiente. El acto
+						administrativo que establece la oficialidad de
+						un conjunto de top�nimos es, en general, su
+						publicaci�n en el B.O.E. o en el Bolet�n Oficial
+						de una Comunidad Aut�noma, de un Decreto, Orden
+						o disposici�n de alg�n tipo. Se recomienda que
+						en la interfaz de usuario aparezan los nombres
+						oficiales de una misma entidad ordenados al
+						mismo nivel. Corresponde con OficialType="S�",
+						NormalizadoType="S�" en versiones anteriores a
+						la 1.2.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Normalizado">
+				<annotation>
+					<documentation xml:lang="es">
+						Cuando el top�nimo est� uniformizado de acuerdo
+						a un proceso de normalizaci�n bien definido y no
+						es Oficial. Corresponde con OficialType="No",
+						NormalizadoType="S�" en versiones anteriores a
+						la 1.2.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="No normalizado">
+				<annotation>
+					<documentation xml:lang="es">
+						Si se sabe con certeza que no es ni Oficial ni
+						Normalizado. Corresponde con OficialType="No",
+						NormalizadoType="No" en versiones anteriores a
+						la 1.2.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="No disponible">
+				<annotation>
+					<documentation xml:lang="es">
+						Si no se puede establecer en ninguna de las
+						categor�as anteriores.
+					</documentation>
+				</annotation>
+			</enumeration>
+		</restriction>
+	</simpleType>
+	<simpleType name="NivelType">
+		<annotation>
+			<documentation xml:lang="es">
+				Valor num�rico asignado a un subconjunto de top�nimos
+				dentro de un nomencl�tor para ordenarlos seg�n una
+				gradaci�n de resoluciones. Si todos los top�nimos de un
+				nomencl�tor han sido extraidos de un mismo mapa o
+				corresponden a una misma resoluci�n tendr�n el mismo
+				nivel.
+			</documentation>
+		</annotation>
+		<restriction base="integer">
+			<enumeration value="1">
+				<annotation>
+					<documentation xml:lang="es">
+						&gt;= 1.000.000
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="2">
+				<annotation>
+					<documentation xml:lang="es">
+						&lt;1.000.000 - 500.000
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="3">
+				<annotation>
+					<documentation xml:lang="es">
+						&lt;500.000 - 100.000
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="4">
+				<annotation>
+					<documentation xml:lang="es">
+						&gt;&lt;100.000 - &gt;25.000
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="5">
+				<annotation>
+					<documentation xml:lang="es">
+						&lt;=25.000 - &gt;10.000
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="6">
+				<annotation>
+					<documentation xml:lang="es">
+						&lt;=10.000 - 5.000
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="7">
+				<annotation>
+					<documentation xml:lang="es">
+						&lt;5.000 - 1.000
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="8">
+				<annotation>
+					<documentation xml:lang="es">
+						&lt;=10.000
+					</documentation>
+				</annotation>
+			</enumeration>
+		</restriction>
+	</simpleType>
+	<simpleType name="RelacionType">
+		<restriction base="string">
+			<enumeration value="Jer�rquica.padre">
+				<annotation>
+					<documentation xml:lang="es">
+						Permite la correcta definici�n de un Sistema de
+						Identificadores Geogr�ficos estructurado con
+						varios niveles jer�rquicos.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Jer�rquica.hijo">
+				<annotation>
+					<documentation xml:lang="es">
+						Permite la correcta definici�n de un Sistema de
+						Identificadores Geogr�ficos estructurado con
+						varios niveles jer�rquicos.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="L�gica">
+				<annotation>
+					<documentation xml:lang="es">
+						Permite la definici�n de relaciones
+						significativas o �tiles desde el punto de vista
+						de gesti�n de un nomencl�tor (por ejemplo,
+						recoger la relaci�n l�gica "es capital de")
+					</documentation>
+				</annotation>
+			</enumeration>
+		</restriction>
+	</simpleType>
+	<simpleType name="TipoEventoType">
+		<restriction base="string">
+			<enumeration value="Alta">
+				<annotation>
+					<documentation xml:lang="es">
+						Consiste en introducir una nueva entrada en el
+						nomencl�tor.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Baja">
+				<annotation>
+					<documentation xml:lang="es">
+						Consiste en eliminar una entrada en el
+						nomencl�tor.
+					</documentation>
+				</annotation>
+			</enumeration>
+
+			<enumeration value="Modificaci�n">
+				<annotation>
+					<documentation xml:lang="es">
+						Cambio en los datos almacenados en una entrada
+						del nomencl�tor debido a una mera correcc�n, que
+						puede deberse a la consideraci�n de la
+						informaci�n procedente de una fuente externa,
+						pero que no est� originada por un cambio en la
+						realidad.
+					</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="Actualizaci�n">
+				<annotation>
+					<documentation xml:lang="es">
+						Cambio en los datos almacenados en una entrada
+						del nomencl�tor originado por un cambio acaecido
+						en la realidad.
+					</documentation>
+				</annotation>
+			</enumeration>
+		</restriction>
+	</simpleType>
+	<simpleType name="FechaAtributoType">
+		<annotation>
+			<documentation xml:lang="es">
+				La fecha y la hora. La fecha se debe describir como
+				indica la norma ISO8601 o su equivalente norma espa�ola
+				UNE-EN 28601, donde se establece como formato
+				facultativo CCYY-MM-DD
+			</documentation>
+		</annotation>
+		<union>
+			<simpleType>
+				<restriction base="dateTime"/>
+			</simpleType>
+			<simpleType>
+				<restriction base="mne:FechaType"/>
+			</simpleType>
+		</union>
+	</simpleType>
+	<simpleType name="FechaType">
+		<annotation>
+			<documentation xml:lang="es">
+				La fecha se debe describir como indica la norma ISO8601
+				o su equivalente norma espa�ola UNE-EN 28601, donde se
+				establece como formato facultativo CCYY-MM-DD donde CCYY
+				representa el a�o civil, MM el n�mero ordinal de un mes
+				de ese a�o cilivl y DD el n�mero oridinal de una d�a de
+				ese mes.
+			</documentation>
+		</annotation>
+		<union>
+			<simpleType>
+				<restriction base="date">
+					<annotation>
+						<documentation xml:lang="es">
+							CCYY-MM-DD
+						</documentation>
+					</annotation>
+				</restriction>
+			</simpleType>
+			<simpleType>
+				<restriction base="gYear">
+					<annotation>
+						<documentation xml:lang="es">
+							CCYY
+						</documentation>
+					</annotation>
+				</restriction>
+			</simpleType>
+			<simpleType>
+				<restriction base="gYearMonth">
+					<annotation>
+						<documentation xml:lang="es">
+							CCYY-MM
+						</documentation>
+					</annotation>
+				</restriction>
+			</simpleType>
+		</union>
+	</simpleType>
+</schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetFeature.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetFeature.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetFeature.xml	(revision 42196)
@@ -0,0 +1,883 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:cit="http://www.gvsig.gva.es" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gvsig.gva.es http://sercartlin:8080/geoserver/wfs/DescribeFeatureType?typeName=cit:embalses_pol_300k http://www.opengis.net/wfs http://sercartlin:8080/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd">
+  <gml:boundedBy>
+    <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+      <gml:coordinates decimal="." cs="," ts=" ">620344.4375,4205001.5 773626,4509860.5</gml:coordinates>
+    </gml:Box>
+  </gml:boundedBy>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.1">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>el Fondo d'Elx</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">696796.88,4227041 695734.31,4228055.5 695127.25,4228670 694687.31,4229085 694311.88,4229473.5 696104.63,4230632.5 696736.56,4229568.5 696817.44,4229405 696850.31,4229390 696892.06,4229407.5 696950.31,4229539 697013.56,4229554.5 697055.25,4229543 697118.5,4229455.5 697191.81,4229454.5 697222.19,4229435.5 697249.94,4229322.5 697275.25,4229295 697329.63,4229307.5 697403,4229281 697464.94,4229191 697530.69,4229143 697553.38,4229050.5 697810,4228802.5 697956.69,4228691 698090.75,4228652 698221.38,4228640.5 698304.56,4228513.5 698446.13,4228401.5 698482.63,4228331.5 698560,4228355.5 698632.13,4228316 698701.94,4228354 698846.06,4228242 698951.13,4228220 699098.13,4228209 699274.38,4228234 699352.63,4228154 699565.19,4228054.5 699610.63,4227984.5 699002.63,4227695 698101.69,4227214 698010.38,4227179.5 697975.13,4227148.5 697994.63,4227118.5 697824.31,4226984 697379.69,4226988.5 697360.94,4226961.5 697378.88,4226952.5 697366.69,4226927 697367,4226920 697336.5,4226899 697337.94,4226858.5 697284.44,4226831 697279.5,4226785.5 697187,4226786 697119.5,4226789 697039.38,4226787.5 696962.44,4226784.5 696916,4226806 696871,4226786 696743.94,4226911.5 696720.5,4226936.5 696796.88,4227041</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.2">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>el Fondo de Ponent</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">697750.25,4226644 697776.5,4226775.5 697914.75,4226805 698052.88,4226830.5 698096.81,4226763.5 698314.81,4226788.5 698295.5,4226725.5 698265.88,4226672 698238.56,4226638 698203.19,4226622.5 698140.81,4226612 698061.13,4226626 697957.44,4226626 697861.06,4226629.5 697750.25,4226644</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.3">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>el Fondo de Llevant</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">698442.56,4227090.5 698362.31,4227124.5 698364.63,4227162.5 698421.5,4227208.5 698497.75,4227217 698568.19,4227324 698661.75,4227403.5 698908.75,4227535.5 699278.88,4227690.5 699434.94,4227727 699558.31,4227710 699764.63,4227640 699791.5,4227606 699833.06,4227461.5 699826.94,4227420.5 699754,4227297 699730.44,4227209 699555.81,4227019.5 699519.25,4226981 699505.5,4226969.5 699504.44,4226952.5 699475,4226942 699451.88,4226946.5 699431.88,4226910.5 699455,4226891.5 699453.88,4226882.5 699413.81,4226875.5 699329.69,4226866 699314.19,4226859 699302.5,4226878 699293.31,4226898.5 699274.88,4226905.5 699258.75,4226898.5 699226.5,4226889.5 699175.38,4226880 699128.44,4226857.5 699069.25,4226848 698998.75,4226845.5 698946,4226857.5 698895.31,4226871.5 698813.75,4226807 698839.31,4226771.5 698826.69,4226756 698788.31,4226755.5 698721.44,4226705.5 698676.19,4226743 698682.75,4226771 698666.38,4226797 698629.06,4226797.5 698601.63,4226848.5 698656,4226891.5 698705.13,4226927.5 698754.5,4226893.5 698800.5,4226925.5 698784.94,4226962.5 698704.56,4227055.5 698590.56,4226996 698530.88,4226997 698442.56,4227090.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.4">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de la Pedrera</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">686982.31,4209197.5 686900.88,4209196.5 686849.38,4209233 686826,4209227 686805.63,4209199 686750.88,4209161.5 686618.25,4209059 686481.44,4208965 686411.19,4208954.5 686395.75,4208975 686370.06,4209045 686342.94,4209119 686324.56,4209156 686282.81,4209180.5 686242.25,4209225.5 686230.94,4209250 686231.69,4209301.5 686278.63,4209415 686297.25,4209470.5 686292.88,4209491 686262.44,4209495 686171.81,4209456.5 686129,4209463 686091.5,4209481.5 686061.19,4209477 685996.06,4209386.5 685874.25,4209302.5 685801.19,4209299 685766.13,4209342.5 685668.5,4209541.5 685637.13,4209625.5 685683.19,4209696 685696.5,4209735 685587,4209776.5 685558.25,4209868.5 685511.63,4209959 685509.88,4209989.5 685648.94,4210354 685707.44,4210539.5 685724.88,4210691.5 685719.56,4210900 685783.75,4211069 685847.88,4211133.5 685912.5,4211150.5 686025.5,4211164.5 686058.19,4211198 686077.81,4211285 686095.63,4211409.5 686100.38,4211473 686191,4211623.5 686229.69,4211621 686395.88,4211686.5 686574.56,4211745.5 686690.13,4211775.5 686823.38,4211827 686886.94,4211819.5 686940.88,4211806.5 686995.63,4211729.5 687147.69,4211596.5 687193.19,4211598.5 687237.06,4211625 687283.63,4211652 687333.19,4211662 687391,4211675 687401.94,4211685 687457,4211696.5 687553.75,4211682.5 687587.13,4211664 687615.19,4211625.5 687666.44,4211608 687799.25,4211582 687843.38,4211585.5 687959.63,4211555 687983.38,4211530.5 688007.5,4211480 688016,4211347.5 688034.25,4211320 688082.5,4211210.5 688187.56,4211195 688252.88,4211157 688322.88,4211078 688447.13,4211087.5 688510.13,4211072 688560.63,4210978 688636.44,4210884 688731.31,4210845 688836.75,4210834 688894.81,4210771.5 688924.5,4210675 688961.25,4210556.5 689004.06,4210513 689076.06,4210423.5 689168.69,4210326 689224.44,4210222.5 689202.31,4210109 689115.06,4210083.5 689038.19,4210112.5 688937.81,4210167.5 688828.19,4210191 688721.63,4210183.5 688725,4210120.5 688765.13,4210073 688748,4210008.5 688685.38,4209983.5 688615.69,4209977 688564.06,4209945 688563.19,4209896 688594.06,4209817 688627.5,4209758.5 688602.38,4209677.5 688541,4209662 688479.81,4209671 688446.5,4209651 688397.5,4209591 688356.5,4209561.5 688355.5,4209531.5 688357.31,4209494 688368.75,4209461 688367,4209378.5 688409.94,4209362.5 688433.88,4209325.5 688488.06,4209313.5 688508.56,4209218.5 688583,4209158 688626.63,4209174.5 688709.31,4209239.5 688849.63,4209297 688900.56,4209393.5 688951.5,4209494 688989.5,4209521.5 689038.69,4209527.5 689201.88,4209478.5 689238.13,4209414.5 689273.88,4209259 689285.88,4209155.5 689325.88,4209116 689390.13,4209122 689452.06,4209083 689547.38,4209122.5 689603.75,4209090 689726.69,4208965.5 689773.63,4208921 689721.06,4208845.5 689592.56,4208842.5 689545,4208816 689556.5,4208759 689615.81,4208711.5 689694,4208682.5 689763.94,4208666.5 689833.81,4208653.5 689894.56,4208594 689920.31,4208481 689904,4208334.5 689876.75,4208234 689822.63,4208198 689689.75,4208176 689504,4208146.5 689409.81,4208059 689426.13,4208000.5 689440.38,4207954 689491.69,4207925 689534.81,4207897 689560.38,4207859 689573.56,4207798.5 689585.75,4207739 689598.94,4207683 689613.19,4207627.5 689590.38,4207560 689549.25,4207558 689514.31,4207566.5 689461.94,4207585 689410.44,4207548 689377.56,4207545 689315.88,4207556.5 689282,4207568 689296.63,4207650 689292.63,4207697.5 689277.38,4207744 689246.5,4207751 689222.69,4207678 689197.81,4207612.5 689109.44,4207617 689049.81,4207623 689084.06,4207729 689104.75,4207791.5 689119.38,4207866.5 689120.56,4207919 689060.06,4207974.5 689049,4208060 688982.31,4208108.5 688857.81,4208070 688844.5,4208097.5 688814.81,4208143 688707.44,4208163.5 688573.56,4208158.5 688514.75,4208158.5 688490.31,4208151 688471.06,4208144.5 688459.38,4208136 688445.25,4208117 688415.25,4208115.5 688403.25,4208093.5 688422.06,4208084.5 688440,4208067 688425.88,4208047.5 688411.75,4208026.5 688423.56,4208001.5 688455,4207981.5 688444.75,4207922.5 688464.88,4207899 688501.56,4207875.5 688505.25,4207844.5 688479.75,4207820.5 688459.81,4207782 688463.5,4207750.5 688485.75,4207722 688517.19,4207703 688524.19,4207659.5 688502.06,4207625 688468.81,4207631.5 688438.5,4207646.5 688373.88,4207611.5 688337,4207591 688327.25,4207556.5 688305.88,4207537.5 688287.94,4207555 688252.19,4207585 688192.38,4207571.5 688167.31,4207581.5 688160.75,4207601 688169.63,4207625 688191.13,4207636 688227.06,4207654 688217.44,4207670.5 688202.63,4207688 688210.25,4207721 688226.31,4207749.5 688231.94,4207782.5 688203.88,4207785.5 688191.31,4207794.5 688199.13,4207819.5 688216.25,4207844.5 688234.44,4207868.5 688228.88,4207890.5 688211.19,4207895 688179.31,4207883 688148.56,4207866 688104.88,4207820.5 688080.56,4207790 688062.38,4207767 688035.63,4207756 688004.38,4207766 687997.31,4207809.5 688003.94,4207846 688024.06,4207876 688019.31,4207907 687998.44,4207916 687995.81,4207946 688013.06,4207967 688019.75,4207996 687993.63,4208009 687983.75,4208040 688004.81,4208075.5 688028.88,4208120.5 687994.13,4208149 687937.19,4208167 687905.13,4208176 687888.63,4208187 687863.13,4208256 687848.38,4208335.5 687886.44,4208381.5 687940.56,4208472 688007.06,4208562.5 688027.13,4208614 688015.5,4208664.5 687987.75,4208675.5 687920.19,4208669 687892.38,4208691 687883.56,4208730.5 687894.25,4208761 687880.25,4208779 687834.94,4208759 687720.06,4208672 687501.06,4208523 687249.75,4208425 687129.81,4208415 687064.5,4208453 687088.44,4208525 687164.75,4208607.5 687326.88,4208778 687351,4208834.5 687408.13,4208905.5 687435.13,4208955.5 687430.75,4208972 687410,4208977.5 687324.75,4208951.5 687210.5,4208929.5 687126.06,4208952 687046.5,4209024 687012.25,4209115 687006.06,4209174 686982.31,4209197.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.5">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Salinas de Torrevieja</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">697871.19,4207945.5 697888.25,4207982 697920.81,4208013.5 697957.38,4208056 697973.13,4208108 697970.25,4208167 697962.25,4208217.5 697967.94,4208252.5 697945.5,4208305 697923.13,4208354 697928.5,4208410 697945.81,4208434.5 697952.69,4208464.5 697958,4208500.5 697964.38,4208541.5 697981.13,4208604.5 698022.63,4208663 698069.13,4208706 698106.31,4208741.5 698191.13,4208822.5 698181,4208869 698169.88,4208908 698150.56,4208958.5 698165.13,4208990.5 698168.44,4209033 698159.38,4209086.5 698146.25,4209139 698111.44,4209174 698123,4209222.5 698133.56,4209282 698113.25,4209344 698072.31,4209391.5 697996.13,4209384.5 697923.94,4209358 697873.5,4209357.5 697808,4209436 697806.13,4209477 697802.19,4209513 697755.88,4209526.5 697750.88,4209556.5 697779.75,4209566.5 697822,4209570.5 697859.06,4209581 697878.75,4209601 697889.25,4209640.5 697926.25,4209634 697947,4209666 697986,4209653 698031.31,4209651 698048.88,4209671.5 698036.75,4209710.5 698020.5,4209759 697995,4209806.5 698040.38,4209834 698054.63,4209800 698082.31,4209772 698119.44,4209784.5 698144.38,4209837 698158.69,4209822.5 698196.81,4209824 698226.69,4209833.5 698240.19,4209860 698239.38,4209902 698264.13,4209912.5 698280.63,4209926.5 698274.63,4209960.5 698292.25,4209984.5 698316,4210005 698351.13,4210023 698393.31,4210025 698449.88,4210014.5 698497.25,4210022.5 698514.88,4210051 698505.81,4210087 698476.06,4210110 698439,4210114.5 698415.5,4210144.5 698442.44,4210186.5 698481.69,4210220 698530.19,4210240.5 698591,4210260 698639.38,4210259.5 698665.25,4210282 698668.44,4210316 698666.63,4210366.5 698683.31,4210404.5 698735.81,4210413.5 698797.63,4210428.5 698853.38,4210456 698906,4210493 698953.5,4210517.5 699006,4210524.5 699049.25,4210517 699100.75,4210529 699146,4210525 699197.5,4210534 699227.5,4210562.5 699295.44,4210562 699368.56,4210573 699405.75,4210609 699474.94,4210650 699549.31,4210694 699612.25,4210739 699664.94,4210793.5 699719.56,4210816 699771.25,4210866 699828,4210900 699882.63,4210926.5 699882.44,4210860.5 699949.44,4210891.5 700007.19,4210917 700064.88,4210933 700118.31,4210901 700172.88,4210884.5 700211.88,4210864.5 700248.81,4210822.5 700282.63,4210777 700319.56,4210727.5 700369.88,4210690 700403.75,4210661 700460.25,4210620 700525,4210581.5 700593.94,4210577 700652.56,4210557.5 700719.44,4210540.5 700772.94,4210529 700833.63,4210511.5 700899.44,4210490.5 700983.75,4210460.5 701054.75,4210431.5 701080.44,4210422 701124,4210382 701175.38,4210341 701240.13,4210310 701289.44,4210309 701323.31,4210289.5 701344.94,4210256.5 701363.44,4210216.5 701410.69,4210219.5 701424.06,4210171.5 701447.69,4210134.5 701493.94,4210112 701500.13,4210059.5 701557.63,4210055.5 701598.75,4210011 701648.13,4209957 701681,4209908.5 701707.75,4209863.5 701735.5,4209812 701727.25,4209789.5 701740.63,4209766.5 701763.25,4209747 701784.81,4209738 701788.94,4209699 701799.25,4209653.5 701818.75,4209590 701834.19,4209548 701855.75,4209505.5 701883.5,4209457.5 701920.5,4209401 701953.44,4209348.5 701985.25,4209290 702000.69,4209247 702021.25,4209195.5 702025.38,4209139 702014.13,4209085.5 701964.81,4209063 701897,4209054.5 701832.25,4209048.5 701774.69,4209056.5 701767.5,4209098 701745.94,4209152.5 701727.38,4209201.5 701703.75,4209244.5 701680.13,4209287 701651.38,4209320.5 701606.13,4209360 701559.88,4209345.5 701551.69,4209318.5 701567.13,4209269.5 701574.31,4209242.5 701593.88,4209175 701578.44,4209137 701541.44,4209146 701502.38,4209153 701460.25,4209187 701395.5,4209210.5 701343.13,4209207.5 701269.13,4209208.5 701222.94,4209206.5 701156.13,4209218 701142.75,4209190 701144.81,4209160.5 701153.06,4209113 701144.88,4209079 701133.56,4209047.5 701121.25,4209017.5 701108.94,4208984.5 701113.06,4208945.5 701136.69,4208910.5 701170.63,4208874.5 701202.44,4208843 701227.13,4208816 701264.13,4208733 701288.81,4208721.5 701322.69,4208704 701351.5,4208673.5 701361.75,4208628 701384.38,4208608.5 701425.5,4208583 701459.38,4208564.5 701497.94,4208522.5 701515.88,4208487.5 701553.63,4208430 701602.31,4208417.5 701638.25,4208339 701674.06,4208267.5 701771.63,4208122 701865.25,4208149.5 701880.44,4208079.5 701902.19,4207980 701867.25,4207968 701836.94,4207907 701824.88,4207877 701837.63,4207839 701860.63,4207815.5 701838.25,4207782 701824.13,4207753 701798.75,4207712.5 701782.94,4207652.5 701765.06,4207585 701784.44,4207514 701770.31,4207483 701759.38,4207441.5 701777.75,4207366.5 701789.69,4207313 701798.56,4207254.5 701757.25,4207261 701749.38,4207224 701765.31,4207181.5 701765.88,4207129 701788.44,4207050 701815.06,4206969.5 701827.13,4206904.5 701845.25,4206852.5 701816.75,4206814 701725.69,4206713.5 701684.63,4206723.5 701644.25,4206734.5 701601,4206730 701469.06,4206616 701486.63,4206522.5 701499,4206329.5 701509.44,4206222 701512.31,4206149 701473.13,4206147.5 701365.25,4206104 701367.94,4206042 701388.06,4205999 701451.19,4205982 701499,4205951.5 701515,4205873 701515.31,4205871.5 701557.44,4205656.5 701481.5,4205627 701445.81,4205602 701447.31,4205577 701454,4205547 701427.63,4205518 701432.81,4205457 701400.25,4205430.5 701403.5,4205362.5 701387,4205361 701349.75,4205363.5 701270.63,4205341.5 701250.5,4205310.5 701193.06,4205287.5 701163.19,4205284 701133.5,4205269 701117.25,4205251 701091.06,4205214.5 701051.69,4205221 701022.75,4205223.5 701003.31,4205212 700946.63,4205146 700929.63,4205114.5 700930.06,4205087 700938.88,4205057 700915.69,4205023.5 700895.38,4205001.5 700849.63,4205022.5 700827.5,4205046 700795.56,4205041 700758.81,4205016.5 700709.31,4205012 700660.63,4205020 700597.44,4205031.5 700545.69,4205038 700494.81,4205052.5 700441,4205059 700395.63,4205057 700359,4205085 700320.63,4205094 700262.75,4205095 700208.19,4205083.5 700167.13,4205071.5 700163.19,4205118 700138.06,4205138 700103.31,4205177 700063.19,4205228 700025.13,4205281 699991.5,4205312.5 699924.44,4205308 699854.88,4205328.5 699815.81,4205377.5 699786.25,4205414 699763.06,4205443.5 699743.94,4205472 699722.25,4205475 699712.44,4205503.5 699695.13,4205551 699678.63,4205607.5 699652.44,4205627.5 699602,4205619.5 699564.56,4205633.5 699520.75,4205658.5 699478.63,4205706 699448.81,4205756.5 699439.44,4205823 699426.81,4205895.5 699422.38,4205972.5 699405,4206021 699406.56,4206050 699461,4206069.5 699503,4206086.5 699492,4206127 699456.25,4206139.5 699412.25,4206172 699368.88,4206228 699340.31,4206263.5 699310.69,4206244.5 699291.88,4206256.5 699219.56,4206255 699175,4206261.5 699122,4206274.5 699090.63,4206303 699060,4206348 699033.81,4206374.5 699003.88,4206373 698979.44,4206353 698939.13,4206281 698898.25,4206252.5 698885.31,4206291.5 698855.44,4206285 698821.63,4206268 698828.06,4206324 698833.13,4206472.5 698832.13,4206541.5 698799.81,4206564 698766.38,4206590.5 698739.81,4206643.5 698696.75,4206694.5 698649.69,4206663 698609.5,4206658.5 698605.06,4206679 698678.44,4206746 698770.13,4206762 698821.06,4206806 698810.88,4206870 698800.69,4206930.5 698796.75,4206989.5 698784.38,4207059.5 698763.88,4207120 698740.13,4207190 698715.25,4207268 698664.06,4207312.5 698621.38,4207333.5 698601.44,4207356 698574,4207397 698545.69,4207429.5 698501,4207446.5 698432,4207436.5 698374.38,4207423 698322.69,4207427.5 698262.75,4207433 698209.06,4207431 698177.69,4207456.5 698144.13,4207494 698106.5,4207524.5 698058.63,4207552.5 697993.31,4207571.5 697944.69,4207578 697921.63,4207598 697918.5,4207672.5 697939.31,4207732.5 697975.81,4207778.5 697976.38,4207813 697934.63,4207846 697885.38,4207895 697871.19,4207945.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.6">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Salinas de la Mata</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">702663.13,4211798 702622.06,4211833 702587.13,4211841.5 702546.13,4211882.5 702489.69,4211919.5 702440.38,4211956 702387,4211987 702320.38,4212065 702274.19,4212093 702237.25,4212118.5 702183.88,4212156 702141.75,4212165 702062.63,4212173.5 702019.56,4212228 701899.25,4212229.5 701866.44,4212264.5 701820.25,4212302.5 701735.94,4212292.5 701675.44,4212348 701608.63,4212339 701517.13,4212339.5 701457.44,4212331 701420.5,4212353 701378.44,4212384 701308.5,4212364.5 701279.88,4212448 701250.25,4212515.5 701232.88,4212554 701238.06,4212579.5 701213.63,4212685.5 701181.81,4212719.5 701146.94,4212738 701122.25,4212747.5 701124.38,4212778 701156.31,4212790.5 701246.06,4212933 701238.94,4212969 701261.63,4213008 701290.5,4213035 701324.5,4213085 701359.5,4213095.5 701397.56,4213110.5 701403.81,4213141.5 701400.81,4213171.5 701415.25,4213185.5 701478,4213198 701531.44,4213208 701579.81,4213226.5 701624.13,4213261 701647.81,4213300 701669.38,4213292 701699.25,4213295 701718.81,4213315.5 701732.19,4213332 701768.19,4213332 701799,4213333 701845.56,4213349.5 701893.94,4213342 701898.13,4213399 701913.56,4213405 701954.75,4213376 702013.44,4213394.5 702104,4213358.5 702158.63,4213405 702237.88,4213402.5 702260.56,4213429.5 702382.06,4213454 702427.31,4213381 702488.06,4213408.5 702529.25,4213396 702560.19,4213409.5 702603.38,4213409.5 702628.06,4213374.5 702681.63,4213380.5 702713.5,4213343.5 702730,4213318 702753.63,4213309.5 702789.75,4213406.5 702837.13,4213415.5 702852.63,4213439 702892.75,4213422.5 702906.13,4213443.5 702958.63,4213462 702989.5,4213446.5 703029.69,4213466 703083.25,4213449.5 703128.56,4213453.5 703177.38,4213425 703212.5,4213418 703249.69,4213422 703271.38,4213440.5 703310.63,4213442.5 703353.94,4213413.5 703399.44,4213418.5 703438.69,4213442.5 703463.5,4213446.5 703535.69,4213383 703580.06,4213372 703670,4213401.5 703694.75,4213398.5 703715.38,4213374.5 703737,4213360 703791.75,4213359 703796.94,4213373.5 703752.63,4213418 703721.75,4213458.5 703785.75,4213458 703867.44,4213524 703938.63,4213485 703981,4213483.5 704030.63,4213500 704096.75,4213520.5 704124.56,4213488.5 704151.38,4213484.5 704197.94,4213504 704254.75,4213531.5 704284.75,4213557.5 704254.94,4213620.5 704314.81,4213608 704348.88,4213613 704390.25,4213631.5 704433.69,4213656.5 704460.5,4213632.5 704485.25,4213617 704536,4213699.5 704561.81,4213693.5 704571.06,4213676.5 704575.13,4213654 704579.25,4213631.5 704584.38,4213620 704604,4213617 704614.25,4213581.5 704589.44,4213541.5 704569.75,4213525 704572.75,4213480.5 704580.94,4213439 704590.19,4213411.5 704576.75,4213385.5 704561.25,4213373 704558.06,4213344 704547.69,4213320.5 704520.81,4213301 704502.19,4213278 704489.75,4213249.5 704474.19,4213221.5 704480.69,4213192.5 704486.75,4213174 704434.94,4213107 704438.88,4213075.5 704434.56,4213041.5 704421,4213010.5 704431.13,4212982 704450.5,4212954 704437.63,4212866.5 704445.75,4212847 704460.94,4212812 704455.25,4212718.5 704456.25,4212693.5 704457.06,4212674 704467.13,4212632 704485.38,4212605.5 704491.56,4212596.5 704513.94,4212556.5 704514.69,4212507 704505.19,4212462 704499.81,4212422 704521.25,4212396 704554,4212374 704567.25,4212344.5 704552.5,4212288 704527.75,4212279.5 704510.19,4212266.5 704513.13,4212242 704624.13,4212230 704645.63,4212207 704644.13,4212129 704684.13,4212115.5 704707.19,4212008 704741.06,4211999.5 704784.13,4211970.5 704842.94,4211912 704887.88,4211859.5 704925.88,4211852 704961.5,4211775.5 704979.94,4211765.5 705007.63,4211754 705031.13,4211726 705042.13,4211666.5 705039.94,4211644 705021.44,4211638 704996.69,4211622.5 704979.13,4211602 704972.88,4211580.5 705017.06,4211580.5 705036.44,4211553.5 705046.63,4211531 705063.06,4211528.5 705078.5,4211530.5 705089.81,4211537 705113.44,4211539 705123.69,4211530.5 705132.88,4211521 705133.88,4211510 705131.75,4211498.5 705125.5,4211488.5 705106.94,4211472 705123.31,4211450.5 705136.56,4211429 705148.81,4211412.5 705153.69,4211399 705133.06,4211348.5 705104.19,4211308.5 705082.5,4211296 705051.56,4211266 705017.5,4211231 704978.31,4211209.5 704968,4211162 704957.69,4211125 704920.56,4211095 704885.5,4211069 704879.31,4211013.5 704871.06,4210981.5 704821.56,4210956.5 704766.88,4210937 704729.75,4210933 704689.5,4210954.5 704656.5,4210969 704594.63,4210963 704546.13,4210960 704492.5,4210953.5 704445.06,4210932 704401.75,4210927 704364.63,4210936 704322.31,4210921.5 704276.94,4210902 704216.13,4210897 704163.5,4210909 704115,4210936 704058.25,4210949.5 704004.63,4210956.5 703994.31,4211038 703973.69,4211064 703946.88,4211091 703908.75,4211085.5 703873.63,4211061 703827.25,4211055.5 703794.25,4211091 703759.13,4211115.5 703714.75,4211155 703699.38,4211174 703678.88,4211175 703662.31,4211167 703634.81,4211204 703584.63,4211239.5 703534.44,4211277.5 703481.13,4211314 703443.31,4211351 703390,4211384.5 703328.5,4211413.5 703259.81,4211457 703201.44,4211499.5 703147.13,4211531 703094.88,4211564 703040.63,4211613 702994.69,4211668.5 702936.31,4211712 702859.44,4211755 702821.38,4211777 702791.63,4211800 702762.88,4211803 702725.81,4211788.5 702691.88,4211784.5 702663.13,4211798</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.7">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Laguna de las Salinas</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">683957.5,4263729 683879,4264014 683847.19,4264113 683818.13,4264165.5 683788.56,4264233.5 683761.5,4264263 683731.75,4264298.5 683689.38,4264348 683669.19,4264382 683649.94,4264406 683633.13,4264433 683622.63,4264463.5 683612.56,4264499.5 683604.25,4264581 683577.88,4264669.5 683584.63,4264698.5 683595.44,4264738 683602.63,4264774 683612.69,4264817 683615.38,4264854 683611.5,4264896 683618.31,4264941.5 683630.38,4265004 683646.94,4265064.5 683656,4265120.5 683664.81,4265144 683687.06,4265164 683709.06,4265175 683734.75,4265167.5 683745.5,4265151.5 683755.94,4265123 683787.88,4265080 683802.13,4265052.5 683835.69,4265020 683875.5,4264989 683903.75,4264962 683921.75,4264938 683934,4264913 683943.38,4264897.5 683961.25,4264878 683984.44,4264869.5 684018.69,4264854.5 684057,4264830.5 684098.38,4264812 684153.31,4264768 684204.63,4264737.5 684241.63,4264694.5 684293.88,4264635 684329.5,4264597.5 684355.06,4264593.5 684391.69,4264584.5 684430.38,4264571 684473.31,4264542 684535.25,4264478.5 684595.38,4264430.5 684618.5,4264405 684669.5,4264363 684700.88,4264338 684732.88,4264314 684756.06,4264286 684777.38,4264257.5 684788.69,4264160.5 684805.31,4264099 684819.38,4264017.5 684830.63,4263944 684832.94,4263850 684832.13,4263775.5 684695.44,4263635 684694,4263633 684679.94,4263614 684646.63,4263553.5 684633.75,4263534 684618.38,4263507 684600.44,4263484 684582.5,4263452 684564.56,4263425 684540.19,4263391.5 684515.88,4263356.5 684495.38,4263331 684476.13,4263304 684462,4263287.5 684440.19,4263258 684419.69,4263231 684400.44,4263210 684381.25,4263183 684362,4263164 684340.19,4263147 684321.19,4263120 684317.38,4263116 684304.88,4263101 684301.13,4263093.5 684292.38,4263082 684281.13,4263062.5 684272.31,4263050 684261.06,4263036 684249.69,4263031 684238.31,4263027 684223.13,4263027 684210.5,4263025.5 684199.13,4263026.5 684190.25,4263026.5 684178.88,4263026.5 684168.75,4263024 684161.25,4263016.5 684158.75,4263011.5 684155,4263003.5 684152.5,4262997.5 684148.75,4262989.5 684146.31,4262981 684143.88,4262969.5 684142.63,4262963 684140.25,4262948 684136.5,4262932.5 684132.81,4262925 684124,4262911 684115.25,4262901 684105.19,4262892 684093.88,4262884.5 684078.75,4262876.5 684064.88,4262871.5 684048.44,4262866 684035.75,4262867.5 684025.63,4262870 684016.75,4262873.5 684010.38,4262878.5 684001.5,4262887.5 683990,4262898.5 683982.31,4262911.5 683979.63,4262936.5 683975.63,4262959.5 683974.25,4262976 683974.13,4262996 683974.06,4263008.5 683973.94,4263022.5 683973.81,4263038 683972.44,4263058 683965.88,4263086 683967,4263105 683966.81,4263130 683967.94,4263151.5 683967.75,4263180.5 683964.94,4263217.5 683963.5,4263246.5 683959.38,4263284.5 683955.38,4263314.5 683953.88,4263345 683953.75,4263366.5 683953.63,4263387 683957.19,4263418.5 683958.19,4263452.5 683959.75,4263459.5 683963.13,4263474 683966.69,4263503.5 683984.13,4263540 683994.06,4263569.5 684007.75,4263601 684011,4263620 684014.19,4263669 683990.94,4263698.5 683960.63,4263709 683957.5,4263729</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.9">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament d'Elx</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">699121.69,4242812.5 699080.56,4243019.5 699036.13,4243076.5 699042.25,4243128 699020.69,4243154.5 699023.13,4243196.5 699049.88,4243224 699078.44,4243295 699145.19,4243375 699153.94,4243413 699119.5,4243508 698998.25,4243556.5 698984.88,4243562.5 698942.13,4243603.5 698840.44,4243761 698850.25,4243863.5 698857.81,4243879 698875.56,4243865 698886.69,4243943.5 698870.81,4243973 698922.25,4244059.5 698937.5,4244053.5 698949.88,4244103 698935.75,4244128 698954.44,4244176.5 698911.44,4244342.5 698870.38,4244423.5 698941.81,4244400.5 699022.31,4244335.5 699066.13,4244265.5 699085.94,4244062 699121.06,4243936.5 699240.25,4243713 699362.06,4243578 699433,4243543 699524,4243553.5 699522.88,4243518 699461.13,4243453 699495.69,4243317 699479.56,4243221.5 699432.94,4243156 699384.81,4243180 699353.25,4243168.5 699311.69,4243106.5 699312,4243020.5 699379,4242631 699367.06,4242598 699347.5,4242576.5 699303.31,4242567.5 699241.38,4242600.5 699218.5,4242591.5 699203.25,4242618 699159.81,4242757 699121.69,4242812.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.10">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse del Regajo</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">711318.13,4418500 711266.25,4418423.5 711239.5,4418425.5 711242.88,4418454.5 711250.63,4418503.5 711266.88,4418547.5 711306.25,4418600.5 711330.69,4418628 711355.88,4418651.5 711355.31,4418686 711461,4418662.5 711407.25,4418601.5 711371.13,4418582 711329.75,4418548 711318.13,4418500</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.11">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Salines del Braç del Port</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">708609.13,4227207.5 708609.31,4227207.5 708477.13,4227076 708377.5,4226858.5 708297.56,4226656 708252.31,4226497 708240.06,4226476.5 708197.44,4226405.5 708148.69,4226344 708128.06,4226323.5 707978.75,4226359.5 707813.88,4226407 707835.44,4226628 707871.38,4226784 707900.25,4226922 707841.63,4226950.5 707777.13,4227008.5 707749.44,4227100.5 707712.25,4227185 707712.38,4227185 707813.94,4227376.5 707977.19,4227591 708000.19,4227654.5 707984.69,4227679.5 707970.69,4227688 707930.5,4227673.5 707787.25,4227555.5 707572.75,4227313.5 707314.44,4227294.5 707081.88,4227247 706915.31,4227584 706754.81,4228106 707434,4228277 707065.75,4229245.5 707399.25,4229445 708728.5,4230100 709040.5,4230290.5 709689.25,4230882 709600.44,4230966.5 709760.69,4231120 709817.38,4231219 709694.81,4231632.5 709697.13,4231703 709727.31,4231767.5 709846.06,4231845 709932,4231874.5 710178.63,4231926 710549,4232043 710810.63,4231762.5 710904.63,4231633.5 710827.25,4231585 710850.13,4231533 710822.31,4231424 710835,4231388.5 710918.88,4231289.5 710991.25,4231266.5 711257.75,4231273 711441.81,4231223.5 711578.94,4231168 711789.69,4231117.5 711825.25,4231092 712008.19,4230848.5 712093.13,4231004.5 712109.56,4231095 712178.13,4231049 712241.63,4231030 712291.13,4230974.5 712343.19,4230944 712481.56,4230920 712517.13,4230930 712825.44,4231147.5 712985.19,4231039.5 712938.44,4230986.5 712939.75,4230952 712966.44,4230928 713056.56,4230867 713274.94,4230781 713263.56,4230731.5 713481.81,4230611.5 713441.44,4230527 713343.69,4230542.5 713236.13,4230605 713262.38,4230663 713192.5,4230707.5 712828.13,4230857 712781.31,4230822 712746.88,4230860.5 712693.56,4230865.5 712414.44,4230781.5 712192.31,4230793 712109.81,4230779 712021,4230735.5 711887.75,4230710 711795.19,4230602 711716.5,4230598 711521.13,4230477.5 711413.25,4230449.5 711206.44,4230350.5 711167.13,4230345 711027.56,4230233.5 710825.75,4230243.5 710648.13,4230209 710468,4230079.5 710286.75,4229814.5 710267.88,4229770 710222.44,4229729.5 710037.81,4229696 710011.31,4229676 709918.13,4229522.5 709849.88,4229478 709817.13,4229428.5 709790.81,4229326 709799.88,4229260.5 709839.25,4229192 709830.56,4229134 709781.31,4229098.5 709714.31,4229076.5 709609.88,4229099.5 709449.5,4229211 709390,4229230 709392.44,4229269.5 709144.31,4229319 709003.94,4229297.5 708073.5,4229006.5 708674.56,4228986.5 708895.94,4228999.5 708662.81,4228641 708574.75,4228462.5 709195.44,4228665 709459.5,4228788.5 709430.63,4228711.5 709379,4228635.5 709081,4228394 709062.38,4228267.5 709029.63,4228220.5 708969,4228177.5 708895.69,4228047 708784.88,4227859.5 708711.56,4227538.5 708609.13,4227207.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.8">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>l'Albufera</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">725421.75,4356182.5 725377,4356201.5 725346.88,4356235.5 725298.06,4356278 725254.5,4356278 725222.31,4356301 725196.31,4356345.5 725169.31,4356384.5 725140.25,4356388 725091.56,4356374 725055.25,4356381.5 725034.44,4356416.5 725025.06,4356487 725010.38,4356574.5 725012.44,4356614.5 725037.31,4356629.5 725057,4356646 725081.81,4356684.5 725097.31,4356733 725081.69,4356767.5 725079.63,4356800.5 725098.25,4356802.5 725126.25,4356788 725154.31,4356772.5 725194.75,4356759 725246.56,4356785 725281.81,4356819.5 725311.81,4356863 725361.56,4356900.5 725396.75,4356923.5 725406.75,4356935.5 725423.69,4356956.5 725443.38,4356997 725445.38,4357038.5 725404.88,4357098.5 725344.63,4357146 725320.75,4357182.5 725324.81,4357223 725349.81,4357255 725378.06,4357287 725412.31,4357329 725418.81,4357373.5 725407.94,4357408.5 725419.75,4357441.5 725451.56,4357481.5 725382,4357490 725328.25,4357525 725301.69,4357582.5 725288.06,4357625 725288.19,4357657.5 725288.25,4357670.5 725318.38,4357676 725381.56,4357668.5 725422,4357663.5 725459.88,4357660.5 725481.19,4357665 725482,4357683.5 725501.94,4357693 725532.5,4357680 725571.44,4357686 725591.13,4357705 725590.25,4357741.5 725587.19,4357764.5 725594.63,4357823.5 725603.94,4357855.5 725464.81,4357877.5 725370.94,4357903 725308.75,4357920.5 725333.63,4358039.5 725358.13,4358070 725377.69,4358096 725415.13,4358059 725447.06,4358039.5 725487.81,4358074.5 725552.69,4358102.5 725557.19,4358126.5 725575.5,4358149.5 725605.38,4358165.5 725612.19,4358198.5 725620.06,4358237.5 725638,4358277 725660.5,4358284 725722.44,4358276.5 725771.63,4358276.5 725796.63,4358283.5 725802.19,4358316.5 725771.69,4358326 725723.69,4358331 725669,4358351 725689.25,4358400.5 725798,4358385.5 725839.06,4358354 725844.75,4358351.5 725883.56,4358337 725936.56,4358336 725951,4358363 725942.25,4358413 725938.69,4358457 725968.13,4358493 725999.31,4358505 726041.13,4358494.5 726064.19,4358480 726095.81,4358476 726107.63,4358509 726079.31,4358585 726050.19,4358698 726084,4358706 726085.69,4358740.5 726092.63,4358768 726122.25,4358740 726138.88,4358677.5 726154,4358624.5 726177.13,4358605 726211.13,4358606 726235.56,4358639.5 726243,4358697.5 726221.19,4358767.5 726174.75,4358810.5 726113.38,4358848 726052.5,4358865.5 726008.13,4358876 725950.31,4358974 725966.94,4359071.5 725979.25,4359136 725949.88,4359151.5 725945.63,4359171.5 725979.19,4359191.5 725961.94,4359227.5 725940.69,4359272.5 725935.94,4359314 725954.5,4359328 725981.44,4359307.5 726021.75,4359308.5 726037.69,4359274.5 726139.69,4359277 726157.56,4359267.5 726180.25,4359268 726178.13,4359306 726187.06,4359352.5 726207.88,4359378.5 726221.06,4359407.5 726210,4359446.5 726209.19,4359483 726257.81,4359503 726261.75,4359551 726246.88,4359593.5 726249.94,4359622.5 726321.69,4359627 726374.88,4359616.5 726417.63,4359620.5 726447.69,4359627.5 726466,4359653 726486.75,4359681 726517.38,4359717 726557.38,4359732 726600.13,4359735.5 726631.38,4359746.5 726665.88,4359780 726699.81,4359783.5 726749.56,4359756.5 726825.81,4359678 726856.13,4359676 726816.25,4359763.5 726856.31,4359774.5 726888,4359765 726915.13,4359739 726932.13,4359712 726996.44,4359709.5 727055.06,4359682 727079.69,4359655 727104.63,4359614 727147.5,4359559.5 727182.5,4359517.5 727239.75,4359496 727286.13,4359505 727309.81,4359517 727320,4359563.5 727309,4359655.5 727307.31,4359727 727282.44,4359767 727251.69,4359787.5 727247.25,4359816.5 727271.75,4359846 727303.56,4359884.5 727337.88,4359978.5 727346.13,4360054.5 727359.88,4360113 727397.88,4360159 727417.25,4360192.5 727443.56,4360251 727459.81,4360309 727473.44,4360371.5 727480.88,4360429.5 727484.75,4360477.5 727504.13,4360512 727632.94,4360395.5 727649.13,4360296 727669.25,4360300.5 727708.94,4360326.5 727731.19,4360343.5 727753,4360382 727799.69,4360325 727846,4360284.5 727948.81,4360255.5 728038.88,4360231 728098.38,4360218.5 728142.81,4360204.5 728175.13,4360171.5 728191,4360139 728216.25,4360084 728268.19,4360021 728358.31,4359940 728435.38,4359879 728501.38,4359806 728601.31,4359738 728642.44,4359705 728681.69,4359697 728680.69,4359738.5 728664.13,4359851.5 728609.69,4359970 728571.56,4360087.5 728556.69,4360237 728542.56,4360352.5 728530.69,4360429.5 728582.31,4360430.5 728594,4360321 728600.13,4360263.5 728627.88,4360105 728666.44,4359966 728691.38,4359872.5 728707,4359798.5 728732.06,4359752.5 728780,4359748.5 728814.63,4359777 728813.19,4359837.5 728787.25,4359922.5 728794.5,4359987 728815.31,4360065.5 728792.38,4360130.5 728784.69,4360187 728810.94,4360249.5 728822.88,4360278.5 728815.19,4360336.5 728824,4360389.5 728850.06,4360406.5 728883.56,4360374.5 728924.81,4360336.5 728992.63,4360347 729040.13,4360363.5 729050.25,4360412.5 729134.06,4360441 729171.63,4360398 729164.94,4360360 729161.25,4360304.5 729170.5,4360233 729222,4360239 729238.19,4360195.5 729251.88,4360149 729278.94,4360125.5 729344.75,4360112 729439,4360124.5 729538.25,4360138 729626.38,4360140.5 729714.5,4360146 729801.5,4360143 729852.44,4360122 729878.13,4360102 729893,4360058.5 729905.63,4360057.5 729930.63,4360067 729923.69,4360093 729920.5,4360119.5 729935.31,4360134 729960.5,4360133 729951.69,4360187 729956.88,4360232.5 729989,4360261 730018.56,4360236.5 730025.5,4360210.5 730037.56,4360179 730061.13,4360195 730087.75,4360188 730101.94,4360175.5 730104.25,4360131.5 730138.5,4360122.5 730162.88,4360104 730181.38,4360066.5 730197.5,4360078.5 730225.38,4360071.5 730233.25,4359953 730283,4359979.5 730339.5,4359991 730439.88,4360006 730497.75,4359802 730519.25,4359693 730541.19,4359616.5 730543.75,4359563.5 730529.31,4359533 730531.25,4359506.5 730567.75,4359403 730677,4359101.5 730691,4359095.5 730726.88,4358965.5 730712.13,4358950 730758.44,4358698 730791.06,4358550 730801.94,4358500.5 730775.75,4358446 730755.56,4358394 730716,4358361.5 730675.88,4358355.5 730622.44,4358376 730599.25,4358398 730557.88,4358388 730520.31,4358377 730481.25,4358376 730421.5,4358346 730389.75,4358304.5 730394.56,4358259.5 730391.63,4358224 730377.75,4358172 730353.63,4358127.5 730319.56,4358076 730275.88,4358057.5 730220.69,4358046 730143,4358029 730071.13,4358031 730043.75,4358067 730008,4358087.5 729953.63,4358096.5 729894.38,4358095 729825.81,4358064.5 729789.06,4358020.5 729755.56,4357945.5 729757.94,4357899 729784.63,4357835.5 729808.44,4357789.5 729836.56,4357771 729857.5,4357739 729877.63,4357687.5 729914.56,4357618 729937.56,4357604.5 729980.88,4357639.5 730004.31,4357660.5 730002.56,4357680.5 729999.38,4357709.5 730020.19,4357734 730046.63,4357737 730078.69,4357712.5 730125.06,4357669.5 730192.44,4357644.5 730306.06,4357636 730333.19,4357609 730373.06,4357574.5 730445.88,4357535 730528.94,4357486.5 730536.19,4357446 730563.19,4357406.5 730599.5,4357372 730670,4357357 730643.13,4357347.5 730675.38,4357317.5 730708.63,4357297 730740.75,4357288 730786.38,4357282 730828.88,4357275.5 730853.81,4357255 730872.63,4357215 730902.75,4357194.5 730944.19,4357200.5 730973.19,4357202 730976.13,4357233 730960.44,4357264 730930.25,4357298 730887.63,4357340 730859.44,4357378.5 730833.81,4357414.5 730833.75,4357414.5 730799.56,4357446 730724,4357497.5 730660.06,4357537.5 730638.88,4357579.5 730628.06,4357611 730642.31,4357648 730655.19,4357688.5 730656.94,4357721.5 730633.81,4357739.5 730585.19,4357770 730520.5,4357788.5 730423.19,4357800 730383.31,4357779 730343.38,4357764 730303.31,4357752 730273.88,4357771.5 730240.75,4357785.5 730198.94,4357795 730175.88,4357813 730158.5,4357854.5 730245.63,4357898 730222.5,4357970.5 730280.5,4357968 730333.38,4357973 730383.56,4357980.5 730433.5,4358000.5 730451.88,4358024 730447.13,4358064 730420.13,4358086 730427.31,4358101.5 730446.13,4358107 730491.19,4358118 730557.88,4358122 730574.75,4358155.5 730558.63,4358198 730530.69,4358206 730501.88,4358200 730487.69,4358212.5 730488.06,4358250.5 730521.69,4358266 730567.38,4358253.5 730608.56,4358269.5 730632.63,4358264 730640.63,4358246.5 730654.13,4358210 730712.88,4358176.5 730754.31,4358183.5 730764.69,4358171 730763.19,4358128.5 730771.13,4358059 730783.44,4357965 730817.56,4357908 730867.5,4357873.5 730928.19,4357873 730955.88,4357762.5 731037.06,4357420.5 731052.19,4357354.5 731070.13,4357289.5 731082.25,4357267 731092.06,4357249 731128.5,4357211 731162.75,4357188 731186.63,4357174 731193.13,4357127.5 731158.88,4357128 731136.13,4357125 731121.69,4357115.5 731116.75,4357068 731121.31,4356967.5 731131.13,4356870 731129.31,4356812 731074.56,4356783 731022.81,4356769 730979.25,4356782.5 730932.56,4356796.5 730895.38,4356788 730844.69,4356762 730815.56,4356744.5 730808.56,4356740 730765.19,4356717 730746.63,4356697 730738.38,4356688 730752.06,4356636.5 730804,4356602.5 730846.69,4356560 730885.25,4356512.5 730918.56,4356473.5 730987.13,4356434.5 731053.5,4356408 731106.38,4356394.5 731125.06,4356390.5 731154.06,4356384.5 731179.69,4356225 731188.69,4356076 731203.88,4355929 731224.19,4355789 731233.94,4355693 731205.25,4355628.5 731162.81,4355619 731151.56,4355619.5 731124.5,4355621 731121.06,4355695.5 731104.19,4355760.5 731077.88,4355845.5 731061.06,4355903.5 731028.81,4355930 730993.5,4355947.5 730952.06,4355949.5 730924.13,4355941 730898.38,4355916 730854.88,4355907.5 730816.5,4355927 730768.81,4355940.5 730707.63,4355949.5 730647.63,4355942 730620.69,4355935.5 730606.25,4355923 730604.38,4355883.5 730623.19,4355843.5 730663.75,4355806.5 730711.5,4355785 730759.25,4355759 730782.19,4355736.5 730783.38,4355699 730765.94,4355669 730727.69,4355651 730675.75,4355674 730630.13,4355693.5 730605.25,4355690 730568.38,4355765.5 730499.5,4355860 730463.06,4355907 730422.63,4355932.5 730349.25,4355957.5 730304.81,4355967.5 730273.94,4355968.5 730236.81,4355965 730204.88,4355964.5 730161.5,4355978.5 730126.25,4355999 730094.13,4356018.5 730051.88,4356022 729994,4356039 729971.19,4356042 729958.63,4356044 729943.44,4356046 729881.5,4356053.5 729823.69,4356068.5 729798.88,4356074.5 729775.19,4356074.5 729777.81,4356012.5 729772,4355964 729741.25,4355947.5 729713.56,4355926.5 729694.38,4355885 729674.13,4355836.5 729654,4355779.5 729634.94,4355718.5 729627,4355684.5 729606.44,4355682.5 729600.75,4355742 729601.13,4355822.5 729617.88,4355911 729644,4355988.5 729666.06,4356063 729677.13,4356096 729669.69,4356119 729630.44,4356130 729563.31,4356143.5 729452.75,4356180 729368.06,4356196.5 729307.13,4356210.5 729247.31,4356216 729177.13,4356229 729117.19,4356251 729042.94,4356272.5 729043.75,4356277.5 729056.81,4356316.5 729050.25,4356367 729017,4356399 728976.63,4356419 728933.25,4356423 728880.75,4356421.5 728824,4356426 728744.38,4356457 728694.88,4356458 728650.63,4356452.5 728605.38,4356438.5 728577.69,4356424 728571.69,4356404 728580.13,4356376.5 728621.75,4356336.5 728679.81,4356294 728735.88,4356246 728805.25,4356207.5 728864.25,4356180 728901.5,4356160.5 728914.19,4356123.5 728920.88,4356067 728930.69,4355998 728938.31,4355928.5 728926.44,4355895 728899.5,4355790.5 728868.69,4355653.5 728820.56,4355498.5 728754.5,4355288.5 728752,4355281 728743,4355254.5 728726.38,4355214 728713.81,4355169.5 728719.94,4355144.5 728740.56,4355124 728759.19,4355106 728780.81,4355081.5 728837.69,4355070 728887.38,4355069.5 728932.88,4355060 728964.94,4355037.5 728984.5,4354998 728972.94,4354954.5 728953.13,4354902 728913.75,4354878 728853.69,4354873 728805.13,4354890 728770,4354919 728748.38,4354959.5 728724.69,4354993.5 728696.75,4354999 728675.06,4355004 728667.88,4355032 728622.38,4355049.5 728592.31,4355028 728576.69,4354996 728554.81,4354937 728543,4354904 728518.25,4354896.5 728507.13,4354901 728459.5,4354906.5 728392.25,4354908.5 728316.69,4354906.5 728238.06,4354910 728156.31,4354917.5 728119.13,4354949.5 728067.5,4354982 728008.56,4355012 728001.25,4354986.5 727984.63,4354956.5 727955.5,4354899.5 727924.25,4354834.5 727907.56,4354787 727874.38,4354774.5 727827.81,4354775.5 727746.06,4354770.5 727658,4354748 727591.69,4354716.5 727551.19,4354669 727532.38,4354599.5 727482.69,4354605 727435.06,4354601 727428.81,4354584.5 727423.5,4354518 727395.25,4354426 727368.06,4354333 727343.19,4354316.5 727329.5,4354237 727306.81,4354251.5 727311.13,4354320.5 727277,4354337.5 727288.5,4354369.5 727285.5,4354407.5 727260.81,4354452.5 727257.81,4354488.5 727285.81,4354511 727297.31,4354547.5 727264.25,4354578.5 727207.38,4354601.5 727184.63,4354591 727089.06,4354493.5 726766.31,4354868.5 726697.75,4354946 726633.38,4355005 726578.31,4355070.5 726540,4355062 726506.81,4355055 726437.31,4355038 726364.75,4355014 726302.56,4355004 726272.44,4355025.5 726240.25,4355062 726172.75,4355125 726127.06,4355163 726092.81,4355204.5 726069.94,4355267 726057.44,4355308.5 726034.56,4355330 726000.31,4355355 725971.25,4355390 725923.5,4355432.5 725877.81,4355448 725822.88,4355455.5 725794.81,4355476 725766.75,4355506 725680.69,4355527.5 725628.81,4355514 725572.88,4355492.5 725501.38,4355464 725424.63,4355427 725355.25,4355381 725286.81,4355359 725214.25,4355323 724918.58652923,4355231.56311761 725114.75,4355306 724912.75457253,4355242.06063968 725107.31,4355402.5 725131.13,4355474 725167.31,4355539.5 725197.38,4355540.5 725234.69,4355560.5 725263.69,4355586.5 725221.19,4355590.5 725199.38,4355608 725198.25,4355651.5 725210.63,4355700.5 725245.88,4355746 725279,4355791.5 725291.38,4355832 725284.06,4355875.5 725262.25,4355921.5 725238.31,4355962.5 725226.88,4356011.5 725238.19,4356044.5 725264.13,4356051 725304.56,4356066.5 725359.5,4356082 725406.13,4356101 725443.44,4356133 725460,4356176.5 725421.75,4356182.5 725421.75,4356182.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.12">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Pantà de Tibi</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">712754.06,4264464.95 712743.78,4264466.67 712722.56,4264463.58 712707.48,4264462.37 712608.85,4264460.04 712589.05,4264458.52 712580.04,4264460.4 712563.77,4264455.66 712555.9,4264454.46 712538.43,4264446.35 712528.15,4264442.96 712517.88,4264442.06 712507.67,4264444.97 712491.99,4264455.98 712455.38,4264468.48 712440.82,4264472.31 712423.57,4264479.87 712402.33,4264493.66 712397.52,4264501.23 712405.17,4264505.13 712413.8,4264502.66 712423.1,4264501.92 712430.9,4264506.88 712433.74,4264515.79 712427.95,4264533.95 712448.14,4264526.32 712458.04,4264525.12 712467.41,4264525.65 712477.61,4264527.91 712487.74,4264528.82 712507.92,4264524.86 712528.39,4264528.54 712539.12,4264526.52 712549.25,4264522.79 712559.53,4264521.14 712569.95,4264522.65 712579.4,4264526.48 712588.92,4264527.91 712599.42,4264531 712609.24,4264536.4 712640.13,4264557.73 712656.85,4264568.31 712664.43,4264564.72 712668.26,4264555.79 712686.11,4264556.41 712695.64,4264558.44 712714.01,4264564.45 712723.76,4264566.56 712732.01,4264566.42 712740.19,4264565.22 712749.11,4264567.77 712764.03,4264582.48 712781.5,4264593 712788.02,4264599.08 712793.33,4264616.48 712799.03,4264624.82 712815.82,4264637.43 712825.49,4264639.69 712836.53,4264624.32 712843.36,4264619.22 712859.64,4264613.08 712867.44,4264611.07 712875.02,4264612.35 712879.12,4264641.38 712881.37,4264648.88 712889.84,4264646.18 712897.5,4264640.86 712905.68,4264637.57 712923.98,4264638.41 712928.63,4264631.88 712935.76,4264625.96 712942.81,4264629.12 712950.31,4264630.02 712957.74,4264628 712965.17,4264621.77 712967.2,4264613.98 712967.13,4264603.93 712971.56,4264596.44 712979.36,4264593.59 712987.46,4264593.45 712994.82,4264587.98 712998.72,4264579.95 713005.56,4264560.38 713013.61,4264531.66 713012.19,4264523.33 712999.9,4264512.82 712994.88,4264505.92 712989.03,4264500.44 712986.86,4264493.16 712994.14,4264489.94 713003.36,4264487.32 713008.84,4264480.27 713016.27,4264476.83 713033.38,4264471.22 713042.01,4264467.1 713059.64,4264461.11 713067.37,4264457.44 713071.72,4264450.62 713074.13,4264433.89 713077.21,4264424.52 713079.63,4264419.52 713073.55,4264414.54 713065.68,4264407.04 713053.09,4264383.17 713052.48,4264377.43 713040.42,4264379.94 713032.02,4264382.33 713024.21,4264383.15 713015.06,4264385.85 712998.41,4264388.23 712991.8,4264393.93 712984.75,4264401.73 712943.01,4264454.2 712937.75,4264462.45 712935.12,4264470.32 712929.87,4264476.62 712922.14,4264480.22 712913.96,4264478.56 712906.01,4264478.41 712896.33,4264480.72 712876.61,4264481.38 712833.18,4264474 712822.98,4264473.85 712811.81,4264475.11 712801.08,4264475.25 712783.38,4264469.23 712764.86,4264465.33 712754.06,4264464.95</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.13">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Depósito superior de acumulación</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">678927.75,4345523.62 678928.25,4345523.62 678949.88,4345531.88 678964.25,4345540.38 678960,4345546.25 678982.75,4345562.88 679008.88,4345581.12 679047,4345609.75 679049.62,4345611.5 679073.75,4345629.25 679106.38,4345648.5 679106.38,4345648.62 679106.38,4345648.5 679122,4345656.75 679145.12,4345668.25 679151,4345670.5 679166.62,4345674.5 679183.25,4345678.75 679193.62,4345680.25 679204.75,4345681.25 679222.12,4345682.38 679236.62,4345683 679246.88,4345682.38 679260.88,4345681.5 679276.75,4345679.12 679302.38,4345674 679328.75,4345667.25 679351.38,4345660.12 679367.75,4345652.88 679387.5,4345643.75 679408.62,4345631.25 679428.25,4345616.75 679444.62,4345602.38 679456.75,4345590.5 679466.75,4345579 679482,4345559.75 679490.62,4345545.75 679500.5,4345529.12 679508.75,4345511.12 679514.88,4345493.75 679522.75,4345472.25 679526.62,4345452.5 679529.62,4345432 679530.75,4345412.75 679530.62,4345389.5 679528.75,4345368.38 679524.62,4345343.88 679518.38,4345320.75 679508.5,4345293.5 679494.25,4345266.25 679481.38,4345246.38 679466.62,4345225.38 679447.75,4345205.75 679428.38,4345189.38 679426.75,4345187.75 679406.75,4345173.38 679388.38,4345162 679374,4345154.12 679354.75,4345145.38 679331.62,4345138.25 679313.62,4345134.75 679292.5,4345131.5 679274.25,4345130.5 679261.25,4345129.62 679252.25,4345128.88 679240.88,4345126.12 679240.12,4345125.88 679231.12,4345122.75 679219.5,4345118.75 679204.88,4345111.75 679191,4345104.5 679176.75,4345094.75 679170.5,4345087.75 679154.5,4345073 679140.75,4345055.62 679134.75,4345045.75 679129.75,4345036.75 679126.25,4345027.38 679121.88,4345016.25 679119,4345006.75 679116.38,4344987.5 679118.25,4344961.25 679123.12,4344929.25 679129.12,4344900.62 679134.5,4344871.75 679139.75,4344840.25 679141.25,4344807.25 679142.75,4344776 679143.25,4344735.75 679141.62,4344706 679139.12,4344671.5 679135.88,4344639.25 679127.88,4344592.62 679118.75,4344558.25 679107.88,4344521.25 679097.25,4344490.25 679083.25,4344452.38 679076,4344435.25 679068.5,4344418.12 679061.88,4344404.12 679049.88,4344380.62 679035.62,4344354.62 679019.38,4344330.38 679002.5,4344308.12 678982.75,4344284 678958.75,4344259.5 678936.62,4344238.75 678910.12,4344217.25 678869.12,4344192.75 678821,4344164 678811.5,4344158.38 678803.88,4344154.5 678805.88,4344155 678774.12,4344146.38 678761.75,4344143.12 678723.75,4344136.88 678712.25,4344135.5 678686.62,4344134.62 678666.25,4344134.75 678634.88,4344137.5 678596,4344143.5 678567.88,4344149.88 678557.38,4344153 678518.5,4344166.38 678483.25,4344182.38 678454.12,4344197.62 678420.12,4344221 678387.75,4344248.25 678363,4344273.38 678324.12,4344322.5 678311.75,4344341.25 678303.62,4344356.62 678293.88,4344374.5 678282.25,4344399 678275.5,4344418.25 678273.88,4344422.25 678273,4344424.5 678260.12,4344469.25 678254.25,4344506.88 678252.38,4344536.25 678251.62,4344570.12 678253.38,4344599.25 678257.62,4344631.75 678265.62,4344669.88 678274.25,4344697.75 678286,4344727.5 678300.75,4344757 678318.25,4344787 678333.12,4344807.88 678345.62,4344824 678364.25,4344846.75 678383.88,4344866.12 678400.25,4344880.75 678414.75,4344891.5 678431.75,4344903.25 678453.38,4344920.25 678451.25,4344927.25 678495,4344978.5 678495.25,4344978.75 678509.38,4344996.38 678511.75,4345000.38 678517.88,4345010.12 678521.75,4345016.38 678531.25,4345031.25 678540.75,4345047.25 678549.25,4345064.75 678562,4345092.38 678568.38,4345103.88 678588.25,4345153.75 678592.88,4345165.75 678597.88,4345180 678602.75,4345196.75 678608.75,4345212.5 678614.62,4345224.88 678619.62,4345237.75 678624.5,4345250 678633.12,4345262 678641.25,4345277.75 678651.12,4345290.88 678660,4345303.12 678670.88,4345318 678682.5,4345331.12 678690.12,4345340.25 678703.12,4345353.25 678729.62,4345377.38 678746.25,4345390.25 678783.88,4345417.25 678855.12,4345470.5 678854.62,4345471.25 678881.25,4345432.25 678881.88,4345430.4 678883.09,4345428.86 678884.74,4345427.8 678886.64,4345427.33 678888.59,4345427.52 678890.37,4345428.33 678891.78,4345429.68 678892.68,4345431.42 678892.96,4345433.36 678892.59,4345435.28 678891.61,4345436.97 678889.25,4345439.21 678889.25,4345439.25 678860.88,4345475.88 678861.5,4345476 678920.88,4345518.25 678946.25,4345481.25 678946.88,4345479.4 678948.09,4345477.86 678949.74,4345476.8 678951.64,4345476.33 678953.59,4345476.52 678955.37,4345477.33 678956.78,4345478.68 678957.68,4345480.42 678957.96,4345482.36 678957.59,4345484.28 678956.61,4345485.97 678955.12,4345487.25 678927.75,4345523.62</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.14">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Arenoso</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">707310.88,4441622 707368.63,4441687 707364.44,4441722 707337.44,4441757.5 707223.25,4441876.5 707155.88,4441972 707152.31,4442017.5 707188,4442061 707202.25,4442188.5 707207,4442261 707267.94,4442353 707171.75,4442416 707043.75,4442412.5 706985.94,4442442.5 706932.81,4442304.5 706888.06,4442162.5 706754.38,4441992.5 706686.19,4441993.5 706520.38,4442098.5 706375.88,4442187.5 706294.75,4442203 706181.5,4442191 706032,4442152 705876.31,4442112.5 705751.44,4442018.5 705650.75,4441942.5 705625.13,4441965.5 705616.44,4441985 705553.56,4442126.5 705542.63,4442203.5 705554.94,4442267 705570.13,4442306.5 705553.63,4442367 705405.69,4442464 705397.44,4442466.5 705270,4442505 705185.75,4442552 705150.56,4442613.5 705116.81,4442694 704916.94,4442801 704883.56,4442818.5 704844.69,4442810 704789.31,4442801.5 704737.44,4442843 704679.63,4442907 704636.69,4442929 704639.69,4442930.5 704624.44,4443014.5 704568.56,4443172.5 704509.31,4443339.5 704463.69,4443440 704405.44,4443486 704261.44,4443538 704131.75,4443565.5 704111.69,4443575 704049,4443604 704001.63,4443634.5 703991.69,4443684.5 703989.5,4443779 703989.44,4443873.5 703960.19,4443926 703862.94,4443994 703765.19,4444044 703762.69,4444045 703792.56,4444073 703876.19,4444031 703950.13,4443990.5 703992.19,4443952.5 704005.63,4443910.5 704039.56,4443821 704080.56,4443646 704183.69,4443612.5 704321.31,4443566 704342.5,4443562 704470.63,4443539 704527.38,4443476 704577.88,4443385 704622.5,4443252.5 704651.69,4443121.5 704693.88,4443003.5 704723.63,4442947 704724.69,4442945 704812.19,4442872.5 704865.06,4442927 704986.13,4442953 705082.63,4442970 705198.94,4442953 705287.69,4443106 705303.75,4442939 705392.63,4442846 705482.63,4442721 705576.56,4442633.5 705636.81,4442623 705756.75,4442499 705876.75,4442403 706041.56,4442417.5 706187.56,4442468 706367.88,4442512.5 706379.13,4442577 706495.38,4442620 706529.25,4442687.5 706631.69,4442652.5 706713.44,4442708 706776.13,4442687.5 706882.88,4442710.5 707055.25,4442677 707193.63,4442558.5 707346.69,4442622.5 707423.06,4442445 707589.06,4442416.5 707754.13,4442439.5 707844.44,4442490.5 707951.06,4442494.5 708054.44,4442556.5 708088.13,4442517.5 708053.5,4442446.5 708056.38,4442266.5 707952.94,4442177.5 707862.13,4442060 707861.88,4442011 707893.5,4441970.5 707965.69,4441929 707984.38,4441846.5 708042.13,4441775.5 708090.38,4441809.5 708145.81,4441793 708173.69,4441763.5 708206.25,4441720.5 708307.31,4441671 708355.69,4441679 708395.31,4441671 708461.75,4441605 708707.63,4441618.5 708792.38,4441623.5 708887.88,4441586 708927.25,4441555.5 708972.94,4441520 709008.69,4441473.5 708986.88,4441413.5 709036.75,4441379 709022.88,4441331 709162.81,4441264.5 709227,4441384.5 709281.06,4441409 709317.63,4441339 709339.25,4441311 709421.75,4441290 709473.19,4441238.5 709424.63,4441086 709389.63,4441018.5 709368.19,4440918.5 709358.13,4440849.5 709318.75,4440759.5 709259.56,4440644.5 709217.63,4440569.5 709226.25,4440497.5 709267.75,4440434.5 709331.13,4440367.5 709220.75,4440234 709118.5,4440076.5 708974.69,4440195 708830.69,4440228 708740.56,4440231.5 708704.56,4440284 708599.06,4440282.5 708531.63,4440377.5 708389.81,4440499 708314.31,4440465 708290.19,4440474.5 708339.63,4440635 708294.25,4440660 708150.5,4440533 708059.38,4440650.5 707973.13,4440635.5 707877.13,4440475.5 707851.69,4440430 707835.13,4440431.5 707806.38,4440458.5 707771.63,4440479 707760.38,4440475.5 707679.69,4440382 707589.63,4440419.5 707622.25,4440497 707691.94,4440642 707653.13,4440660 707592.75,4440609.5 707508.81,4440522 707455.38,4440578.5 707479.88,4440714.5 707432.88,4440729.5 707357.56,4440726 707354.25,4440765 707409.81,4440771 707486.38,4440768.5 707574.63,4440787 707606.25,4440862 707597.19,4440950.5 707568.19,4440984 707542.56,4441009 707526.5,4441091 707502.13,4441236 707460.75,4441268.5 707413.44,4441295 707370.19,4441290.5 707301.44,4441276 707175.19,4441251 707139.63,4441296.5 707097.63,4441287 707039.31,4441267.5 706965.19,4441261 707082.81,4441391.5 707086.63,4441433 707109.5,4441459.5 707150.25,4441477.5 707208.63,4441525 707310.88,4441622</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.15">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse del Sitjar</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">734200.75,4432675 734176.38,4432675.5 734147,4432686.5 734141.63,4432701.5 734165.19,4432725 734171.38,4432726.5 734200.44,4432734.5 734229.19,4432754 734245,4432783.5 734224.44,4432797 734182.31,4432809 734141.38,4432825.5 734104.31,4432840 734072.25,4432857 734046.31,4432883 734046.56,4432929 734048.25,4432967 734048.69,4433006 734043.88,4433050.5 734032.88,4433089.5 734019.5,4433121 734001.13,4433149.5 733982.81,4433174.5 733949.69,4433184 733888,4433167 733854.31,4433152 733820.81,4433130 733789.94,4433105.5 733760.31,4433078.5 733734.5,4433051 733706.25,4433021.5 733672.81,4432997 733639.38,4432973.5 733600.81,4432952.5 733567.19,4432938 733533.44,4432926 733497.19,4432917.5 733459.5,4432914 733426.69,4432917 733402.56,4432925.5 733371,4432931 733339.44,4432935.5 733321.63,4432943.5 733305.94,4432968.5 733291.38,4433001 733273,4433034.5 733232.38,4433048.5 733210.81,4433057 733191.63,4433069 733177.06,4433101.5 733167.69,4433126.5 733151.69,4433165 733136.75,4433215 733122,4433252.5 733102.19,4433296 733087.63,4433327.5 733070.56,4433358.5 733056.25,4433378 733033.19,4433398 733006.31,4433415 732978.19,4433434.5 732950.19,4433449 732927.25,4433462 732899.19,4433478 732879.5,4433488 732868.63,4433493.5 732856.88,4433512 732851.25,4433537 732851.94,4433562.5 732853.94,4433587.5 732855.81,4433614 732853.88,4433644.5 732849.5,4433670.5 732831.31,4433695.5 732799.75,4433701 732767,4433702.5 732734.25,4433702 732700.31,4433698.5 732662.75,4433691.5 732623.94,4433682 732583.81,4433676 732547.44,4433670 732511.06,4433665.5 732472.06,4433664.5 732436.81,4433665 732403.94,4433670.5 732374.81,4433678.5 732348.13,4433690.5 732322.44,4433711.5 732304.13,4433742.5 732289.75,4433767.5 732286.5,4433799 732292.13,4433829 732297.81,4433854.5 732298.56,4433877 732291.81,4433896 732269.13,4433899 732245.25,4433898.5 732216.31,4433895.5 732171,4433882 732166.31,4433880.5 732125,4433870.5 732062.31,4433861.5 732057,4433817.5 732003.13,4433806 731967.56,4433819.5 731940.5,4433850 731932.06,4433887.5 731947.69,4433919.5 731981.25,4433939 732013.69,4433951 732048.81,4433956 732074.13,4433950 732108.19,4433948.5 732137,4433954 732174.25,4433975 732211.44,4434000 732236,4434028 732259.44,4434050 732283.19,4434055.5 732314.69,4434053.5 732335.44,4434027.5 732356.56,4433983 732381.5,4433938 732403.56,4433909.5 732429,4433899 732470.75,4433888.5 732511.5,4433868 732544.63,4433850 732584.13,4433828 732612.06,4433816.5 732618.44,4433814 732642.44,4433809.5 732671.19,4433819 732702.44,4433829.5 732732.5,4433836.5 732765.13,4433840 732797.81,4433840.5 732834.38,4433839 732857.13,4433834.5 732890.25,4433817.5 732918.81,4433793 732924.88,4433788 732943.25,4433756 732956.69,4433718.5 732961.5,4433673 732963.75,4433628 732966.13,4433577.5 733000.44,4433564.5 733027.5,4433537.5 733048.25,4433509 733074.19,4433475.5 733103.88,4433443.5 733141.25,4433403 733170.94,4433371 733211.94,4433340 733243.81,4433321 733276,4433289 733304.5,4433254 733329.25,4433216 733361.5,4433184 733398.56,4433157 733443,4433140.5 733486.19,4433123.5 733526.69,4433114.5 733570.69,4433117 733623.44,4433121.5 733673.5,4433134 733700.5,4433165 733717.38,4433198 733731.63,4433235 733742.06,4433273 733751.38,4433306 733777.44,4433323 733812.13,4433349 733853.81,4433391 733880,4433409 733908.69,4433432.5 733934.69,4433458.5 733961.31,4433458 733979.44,4433440.5 733992.75,4433414.5 734007.44,4433380.5 734023.56,4433337.5 734048.5,4433300 734077.06,4433268 734114.5,4433238.5 734154.25,4433217.5 734188.75,4433203 734246.31,4433179 734324.31,4433092 734354.19,4433060 734391.19,4433048 734443.38,4433039 734505.5,4433038 734553.69,4433036.5 734602.88,4433047.5 734646.5,4433079 734666.13,4433111 734664.06,4433145.5 734649.63,4433169 734622.88,4433175 734592.63,4433175 734582.31,4433175 734559.94,4433211.5 734546.5,4433248 734532.94,4433288 734526.44,4433312 734523.25,4433323.5 734535.25,4433354 734556.25,4433377.5 734566.75,4433388.5 734578.56,4433400.5 734590.75,4433422.5 734597.75,4433450.5 734582,4433473 734570.44,4433483 734618.69,4433536 734612.75,4433575 734601.75,4433613 734593.5,4433640.5 734575.5,4433654 734540.31,4433639.5 734508.81,4433630 734475.88,4433630.5 734489.19,4433658.5 734505.25,4433676.5 734521.19,4433701 734545.25,4433704 734583.25,4433705 734631.63,4433694.5 734672.38,4433685.5 734724.44,4433682.5 734770,4433685 734831.81,4433696.5 734894.94,4433708 734953,4433721 735004.5,4433738.5 735044.69,4433756 735080.94,4433780.5 735118.38,4433805.5 735148.56,4433816.5 735181.19,4433774 735208.5,4433741.5 735241.75,4433728.5 735278.5,4433729 735296,4433684 735338.56,4433706.5 735386,4433682 735423.06,4433669 735452.38,4433661 735467.13,4433681.5 735469.13,4433707 735462.19,4433733.5 735450.25,4433757 735435.81,4433778.5 735441.56,4433806.5 735448.5,4433835.5 735422.75,4433854 735409.63,4433874 735410.19,4433906 735406,4433924.5 735395.44,4433943.5 735379.81,4433961 735363.06,4433973 735341.38,4433980.5 735309.75,4433976 735277.13,4433962.5 735240.75,4433946.5 735209.88,4433936.5 735196.81,4433961.5 735220.44,4433980 735200.81,4434016 735225.69,4434038 735253.06,4434060 735274.19,4434080.5 735279.75,4434117.5 735260.5,4434136 735236.19,4434152 735219.19,4434184.5 735214.94,4434209.5 735223.25,4434239 735217.5,4434273 735196.5,4434316.5 735168.13,4434347.5 735143.5,4434381.5 735120.25,4434411 735118.63,4434430 735133.63,4434438 735155.06,4434438.5 735176.63,4434433.5 735203.44,4434418 735225.25,4434401.5 735243.5,4434372 735262.63,4434361 735291.81,4434351 735311,4434340 735329,4434324 735339.5,4434301.5 735334.25,4434243.5 735370.13,4434216 735401.13,4434180 735410.75,4434138.5 735417.94,4434093.5 735429.81,4434063.5 735457.88,4434050 735487.06,4434041.5 735516.25,4434036 735544.19,4434026 735538.5,4433992 735539.19,4433955.5 735539.75,4433924 735541.69,4433888.5 735543.63,4433854.5 735577.75,4433854 735593.38,4433896 735606.19,4433953 735615.5,4433994.5 735632.44,4434034 735661.19,4434052.5 735711.31,4434073.5 735750,4434096 735796.13,4434129.5 735825.88,4434160.5 735849.13,4434200 735854.75,4434238 735852.69,4434282 735841.94,4434316 735815,4434335.5 735757.25,4434387.5 735750.13,4434429 735733.81,4434492 735716.5,4434541 735680.56,4434569.5 735642.25,4434594 735605.19,4434618.5 735574.44,4434639.5 735557.75,4434654 735515.94,4434662.5 735472.69,4434678 735436.81,4434706.5 735419.81,4434737.5 735402.06,4434808 735427.94,4434775.5 735448.56,4434753 735471.63,4434736 735496.81,4434737.5 735535.94,4434742 735556.13,4434741.5 735574.56,4434701.5 735603.44,4434710.5 735626.75,4434679.5 735639.63,4434667 735688.81,4434670.5 735714.56,4434644.5 735737.81,4434614.5 735757.31,4434584.5 735773.13,4434552 735786.38,4434518.5 735800.88,4434484.5 735820.38,4434456 735847.25,4434437.5 735901.88,4434431 735936,4434431.5 735962.56,4434428 735995.5,4434423.5 736025.94,4434415 736055.06,4434411.5 736079,4434420.5 736105.31,4434433.5 736123.06,4434431.5 736132.25,4434403.5 736130.19,4434372 736123,4434339 736155,4434312 736154.31,4434270 736152.38,4434226 736141.69,4434175 736178.38,4434173 736199.69,4434184.5 736212.06,4434202.5 736214.31,4434226.5 736211.38,4434254.5 736209.69,4434288.5 736206.69,4434320 736208.75,4434356.5 736208.31,4434388.5 736223.25,4434403.5 736221.56,4434435 736220,4434458 736232.31,4434479.5 736267.44,4434500.5 736307.63,4434520 736346.56,4434537 736365.63,4434529.5 736370.13,4434512.5 736372.31,4434504.5 736371.38,4434477.5 736352.75,4434457 736331.5,4434435.5 736312.88,4434411 736299.44,4434379.5 736294.94,4434336.5 736295.5,4434294.5 736303.94,4434233 736312.25,4434177.5 736275.19,4434124 736281.25,4434067 736230.69,4434063.5 736208.5,4434028 736186.44,4433987 736170.31,4433967.5 736164.38,4433944.5 736157.25,4433916.5 736137.69,4433879.5 736106.56,4433847.5 736067.5,4433836.5 736037.19,4433831 736005.69,4433823 735998.94,4433776 736037.06,4433765 736040.13,4433736 736045.75,4433705.5 736058.81,4433683 736079.31,4433669.5 736088.5,4433650.5 736078.81,4433628 736066.56,4433603.5 736055.63,4433576.5 736052.19,4433556.5 736062.75,4433532.5 736080.5,4433533 736104.19,4433553.5 736127.88,4433575.5 736151.5,4433600 736164.44,4433586 736157.31,4433555.5 736144.06,4433520 736138.25,4433488 736128.81,4433451.5 736137.94,4433435 736172.06,4433439.5 736202.25,4433451.5 736229.75,4433472 736251,4433487.5 736280.13,4433488 736308.06,4433485 736338.5,4433484 736370.13,4433484.5 736405.44,4433493 736436.88,4433507.5 736454.25,4433528 736453.81,4433549.5 736448.38,4433571 736436.56,4433593.5 736429.81,4433620 736433.06,4433648 736460.63,4433666 736486,4433663 736509,4433653 736535.75,4433644.5 736567.5,4433640 736596.56,4433644.5 736639.31,4433662 736659.06,4433690 736673.69,4433723 736689.56,4433755 736720.69,4433786 736746.94,4433807 736774.81,4433806 736789.13,4433783.5 736787.31,4433744 736775.38,4433703.5 736757.13,4433661.5 736742.44,4433630.5 736729.06,4433599 736723.25,4433569.5 736721.25,4433540.5 736723.06,4433511 736733.75,4433480 736746.69,4433463.5 736777.06,4433465.5 736811.13,4433473.5 736842.63,4433481.5 736860.44,4433479.5 736866.94,4433468 736867.19,4433455.5 736861.25,4433443.5 736847.25,4433433.5 736809.63,4433415 736821.56,4433385 736846.88,4433384 736876,4433386 736909.06,4433377.5 736919.5,4433360 736917.25,4433343.5 736895.94,4433333 736866.88,4433327.5 736837.81,4433323.5 736829.19,4433311.5 736837.06,4433295.5 736875.25,4433283.5 736919.75,4433276.5 736955.38,4433266 736974.69,4433251 736985.5,4433210.5 736996.44,4433164 737025.75,4433155.5 737056.25,4433150 737065.44,4433132 737068.25,4433113.5 737053.44,4433093 737036.19,4433068.5 737077.25,4433037.5 737102.75,4433028 737152.19,4433026 737170.75,4433026.5 737185.06,4433026.5 737215.25,4433040 737244.06,4433057 737271.63,4433074 737291.56,4433093 737308.94,4433114 737327.56,4433133 737346.31,4433148.5 737370.31,4433151.5 737389.63,4433134 737417.31,4433145 737440.06,4433149 737457.81,4433145.5 737472,4433133 737464.88,4433105 737443.75,4433084.5 737417.5,4433065 737387.44,4433045.5 737353.56,4433024.5 737324.81,4433005 737294.81,4432982 737271.13,4432960 737245.06,4432931.5 737229.06,4432903.5 737212,4432867.5 737201,4432843.5 737182.19,4432833 737154.44,4432827.5 737128.94,4432835.5 737102.13,4432849 737084.19,4432860.5 737053.69,4432867.5 737020.81,4432860.5 736993.19,4432848.5 736982.25,4432821.5 736936.81,4432813.5 736903.88,4432812.5 736869.69,4432812 736839.25,4432814 736817.56,4432825 736798.44,4432831 736769.25,4432833 736730.13,4432825 736686.81,4432839.5 736658.75,4432850 736604.56,4432835.5 736566.81,4432822 736527.5,4432822.5 736486,4432805.5 736406.06,4432743 736394.69,4432750 736356.31,4432773 736237.06,4432845 736200.25,4432923 736149.31,4432935 736121.19,4432953.5 736095.31,4432982 736075.94,4433003 736029,4433009 735993.63,4433002 735957.25,4432981 735926.19,4432950 735910.19,4432922 735895.5,4432891 735836.25,4432869.5 735810,4432852.5 735794.31,4432816.5 735774.88,4432778.5 735754.25,4432737.5 735734.88,4432696.5 735710.56,4432650 735686.13,4432609 735664.25,4432566.5 735620.31,4432545.5 735564.69,4432541.5 735511.44,4432540.5 735454.56,4432534 735394,4432521.5 735337.19,4432511.5 735290.63,4432496.5 735236.69,4432471 735189.5,4432428 735133.5,4432382.5 735088.75,4432341 735038.94,4432300.5 734999,4432273 734956.63,4432242 734925.81,4432202 734908.81,4432167 734894.44,4432130 734881.31,4432094.5 734864.25,4432065 734837.88,4432053 734825.81,4432083 734824.75,4432128.5 734834,4432169.5 734870.06,4432259 734889.25,4432308.5 734899.69,4432352 734880.25,4432372 734867.94,4432412 734893.19,4432415 734928.5,4432423.5 734952,4432448 734977.56,4432495.5 735014.25,4432499 735062.25,4432507.5 735102.44,4432524 735143.69,4432551.5 735177.31,4432576 735180.31,4432614.5 735159.69,4432630.5 735120.19,4432639.5 735079.44,4432647.5 735051.25,4432661 735049.38,4432688.5 735071.81,4432704.5 735102.06,4432711.5 735142.44,4432721 735147.94,4432758 735184.69,4432760 735208.25,4432781 735211.19,4432823 735210.13,4432869.5 735209.06,4432918 735212.75,4432980 735264.75,4432977.5 735298.56,4432994.5 735311.56,4433038 735315.63,4433083.5 735314.56,4433132 735308.69,4433169.5 735279.31,4433236 735290,4433268 735302,4433300 735304.81,4433343.5 735292.69,4433376 735269.75,4433380.5 735238.31,4433368.5 735211.69,4433371.5 735202.25,4433395.5 735180.31,4433414 735152.56,4433406 735130.06,4433392.5 735101.94,4433404.5 735068.69,4433419 735028.13,4433418 734997.94,4433408.5 734982,4433381.5 734972.75,4433342 734968.69,4433298 734963.31,4433254.5 734951.5,4433216.5 734938.25,4433185.5 734912.44,4433148 734881.69,4433107 734843.5,4433056.5 734804,4433009 734763.19,4432963.5 734722.25,4432923.5 734683.69,4432891 734640,4432861 734558.81,4432806 734481.13,4432765 734416.13,4432724 734362.25,4432695 734312.13,4432671 734200.75,4432675</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.16">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament de l'Alcora</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">737257.25,4442453.5 737216.63,4442456 737186.13,4442458.5 737163.25,4442463.5 737141.63,4442488 737123.88,4442502 737092.13,4442524.5 737029.88,4442522 737003.25,4442554 736984.25,4442588.5 736972.81,4442615 736957.63,4442661 736913.13,4442644.5 736871.19,4442635.5 736829.25,4442626.5 736788.63,4442626.5 736755.56,4442642 736728.94,4442671 736708.63,4442712 736690.94,4442760 736679.5,4442793.5 736664.31,4442820 736638.94,4442835.5 736603.38,4442857 736565.25,4442875 736524.63,4442885 736477.63,4442886.5 736417.88,4442886.5 736367.06,4442893 736311.19,4442913 736257.88,4442928.5 736207.06,4442946.5 736167.69,4442963 736128.31,4442983.5 736100.38,4443002.5 736078.81,4443039.5 736089,4443057 736113.19,4443066 736141.13,4443064.5 736174.13,4443059.5 736213.56,4443055.5 736246.56,4443046.5 736268.13,4443036.5 736288.5,4443021 736307.5,4443006 736336.69,4442984.5 736377.38,4442966.5 736416.75,4442961.5 736459.94,4442955 736515.81,4442956 736564.13,4442961 736606.06,4442963.5 736648,4442967.5 736688.63,4442967.5 736720.38,4442952 736735.63,4442929 736753.38,4442892.5 736769.81,4442849 736781.25,4442822.5 736797.69,4442790.5 736828.19,4442778 736867.56,4442779 736900.63,4442784 736920.94,4442784 736945.13,4442783 736967.94,4442776.5 736999.69,4442756 737025.06,4442733 737056.81,4442705 737079.63,4442681 737106.31,4442657 737130.38,4442632.5 737157.06,4442617.5 737190.13,4442617.5 737224.38,4442609.5 737266.31,4442602 737305.75,4442595.5 737336.19,4442588 737343.75,4442556 737341.19,4442524.5 737339.88,4442500 737334.75,4442475 737325.88,4442461 737294.13,4442456 737257.25,4442453.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.17">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament de Maria Cristina</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">741109.13,4436220 741123.25,4436179 741133.19,4436149 741151.88,4436119.5 741177.38,4436113 741221.56,4436109.5 741260.75,4436107 741288.5,4436107 741317.44,4436107 741354.06,4436105.5 741394.5,4436103.5 741441.75,4436085 741472.94,4436093.5 741505.88,4436089.5 741528.69,4436085.5 741567.31,4436063 741591.75,4436016 741609.56,4435942 741616.75,4435918.5 741629.06,4435891.5 741649.94,4435872 741679.19,4435864 741707.19,4435856.5 741726.38,4435849.5 741744.5,4435835 741756.5,4435818 741770.25,4435785.5 741808.56,4435773 741832.19,4435781.5 741882.19,4435758 741911.13,4435724 741930.13,4435688 741943.75,4435659.5 741959.75,4435636 741986.06,4435639.5 742011.81,4435659.5 742027.5,4435679 742038.31,4435693.5 742059.13,4435709 742077.25,4435731 742092.44,4435763.5 742105.13,4435796.5 742122.31,4435842.5 742167.5,4435848 742149,4435700 742163.69,4435676.5 742181.44,4435639.5 742125.75,4435575.5 742134.75,4435537 742156.63,4435491 742174.69,4435443.5 742193.06,4435390 742253.31,4435362 742312.63,4435394.5 742364.19,4435431.5 742395.88,4435460.5 742407.38,4435491.5 742406.13,4435526.5 742390.88,4435564 742364.63,4435592 742339.63,4435621 742309,4435665.5 742292.25,4435711.5 742280.88,4435780.5 742283.31,4435851 742287.56,4435908 742297,4435960 742323.44,4436029 742347,4436075 742356.63,4436122 742340.69,4436178 742326.44,4436223 742281.5,4436279.5 742250.06,4436313.5 742247.81,4436340 742255.44,4436373 742261.25,4436387 742282.25,4436398 742302.38,4436400 742320.25,4436391.5 742339.13,4436393.5 742358.63,4436410.5 742373.5,4436419 742400,4436383 742424.88,4436356.5 742447.75,4436352 742464.44,4436378 742467.63,4436430 742473.31,4436480.5 742473.13,4436521 742464.13,4436558 742447.13,4436575.5 742423.06,4436579.5 742389.31,4436572 742354.56,4436557 742302.19,4436542 742255.5,4436544.5 742217.38,4436553 742172.94,4436561.5 742135.38,4436589 742102.13,4436637 742075.06,4436687.5 742056.56,4436745 742054.75,4436794 742033.5,4436894 742000.25,4436941 741965.13,4436971 741919.88,4437002 741959.88,4437080.5 742029.38,4437055 742100.69,4437023.5 742128.88,4437047 742152.19,4437065 742184.63,4437071 742209.75,4437072 742239.94,4437070.5 742264.5,4437089 742271.88,4437134 742282.06,4437129.5 742284.19,4437102 742292.88,4437064.5 742299,4437028.5 742297.44,4436997 742343.88,4436997 742379.44,4436984 742403.81,4436967.5 742423.31,4436945.5 742447.13,4436906 742467.38,4436860 742496.56,4436809.5 742506.19,4436864 742521.63,4436934.5 742539.63,4437003 742564,4437067.5 742597.5,4437124 742626.13,4437172.5 742650.69,4437232.5 742672.63,4437255.5 742690.25,4437295 742699.75,4437353 742700.63,4437407 742701.63,4437457.5 742704.19,4437496.5 742701.63,4437539 742686.63,4437579 742650.13,4437621.5 742604.19,4437687 742625.5,4437730 742643.94,4437783.5 742651.69,4437819 742659.88,4437878 742694,4437871.5 742727.75,4437877.5 742778.44,4437904.5 742826.63,4437931 742861.88,4437967 742881,4438000.5 742893.38,4438047.5 742898.25,4438092.5 742898.19,4438136.5 742894.38,4438179 742895,4438241 742893.44,4438293.5 742882.69,4438357 742863.56,4438408 742834.13,4438466 742789.56,4438529 742745,4438547.5 742691.25,4438580 742648.63,4438619 742604.19,4438676.5 742566.38,4438722 742514,4438751.5 742456.88,4438771 742401.38,4438778.5 742357.31,4438783 742310.75,4438785.5 742243.13,4438821 742167,4438846.5 742098.56,4438867 742047.5,4438894.5 742017.63,4438926 742032.75,4438924 742069.38,4438919 742090.88,4438913.5 742123.81,4438903 742160.63,4438890.5 742207.38,4438880.5 742259.13,4438872 742310.63,4438872 742358.13,4438880 742336.25,4438897 742296.94,4438909.5 742266.56,4438917.5 742223.5,4438930 742190.44,4438942.5 742154.56,4438965.5 742118.75,4438988 742144.63,4439004 742184.69,4439008 742232.38,4439008 742267.5,4439000 742275.38,4438998 742339.31,4438962.5 742416.88,4438931 742523.38,4438896.5 742591.63,4438877.5 742605.75,4438873.5 742686.38,4438824.5 742749.44,4438788.5 742755.38,4438785.5 742835.63,4438747.5 742901.44,4438711.5 742982.75,4438660.5 743062.88,4438608.5 743121.25,4438561 743198.69,4438470.5 743254.63,4438506.5 743317.25,4438532.5 743368.56,4438553 743413.56,4438574.5 743454.63,4438598.5 743493.38,4438618.5 743547.31,4438636.5 743552.13,4438602.5 743494.88,4438565.5 743438.69,4438538.5 743382.69,4438504 743339.38,4438469.5 743293.38,4438438 743246.38,4438401 743209.56,4438359.5 743184.44,4438309 743175.75,4438259.5 743175.13,4438195 743189.69,4438130.5 743198.75,4438081.5 743207.88,4438028.5 743206.69,4437983 743197.38,4437955 743181.38,4437940.5 743180.75,4437939.5 743161.19,4437937.5 743128.44,4437930 743092,4437920 743055.5,4437911.5 743002.88,4437892 742951.63,4437869 742889,4437843 742834.13,4437813.5 742806,4437780 742797.06,4437739 742799.56,4437696 742814.88,4437651 742849.44,4437638 742888.5,4437644 742923.88,4437649 742953,4437648.5 742977.5,4437635.5 742999.69,4437613 743020.63,4437590 743040.13,4437572.5 743117.94,4437599 743135.69,4437555 743081.88,4437532 743036.88,4437510.5 743008.56,4437484 743003.25,4437448.5 742994,4437418 742983.19,4437398.5 742960.31,4437357.5 742947.94,4437286.5 742931.19,4437218.5 742908.75,4437172.5 742883.75,4437125 742849.13,4437066.5 742823.63,4437034 742793.25,4437001.5 742774.13,4436973 742784.06,4436943 742816.69,4436946.5 742847.63,4436961.5 742883.75,4436974.5 742892.31,4436947 742844.63,4436907.5 742776.88,4436863.5 742729.13,4436826.5 742688.5,4436765.5 742662.88,4436706.5 742648.25,4436659.5 742633.81,4436606 742627.94,4436559 742637,4436518 742675.19,4436474 742637.69,4436431 742599.38,4436375.5 742572,4436331.5 742550.94,4436286.5 742565.44,4436166 742496,4436134.5 742514.56,4436076 742542.25,4436043 742586.38,4436007 742625.56,4435969.5 742655.06,4435955 742707.94,4435957 742754.44,4435960 742791.69,4435975.5 742814.25,4436014 742822.38,4436067 742833.88,4436130.5 742841.88,4436187.5 742849.63,4436253.5 742851.25,4436311.5 742860.81,4436395 742884.13,4436412.5 742910.13,4436390.5 742941.44,4436429.5 742978.38,4436489 743009.13,4436543 743039.13,4436585.5 743087.13,4436650.5 743121.38,4436610 743078.19,4436550.5 743049.88,4436496.5 743030.31,4436446.5 743024.63,4436396 743021.31,4436348 743018.69,4436316.5 743019.81,4436300 743021.31,4436278.5 743025.13,4436243.5 743032.75,4436207 743050.44,4436171.5 743081,4436196.5 743110.88,4436138.5 743234.5,4436240 743246.38,4436209 743249.75,4436180 743254.69,4436139.5 743254.13,4436136 743243.44,4436134 743199.69,4436087.5 743147.25,4436109.5 743112.88,4436119.5 743058.88,4436112.5 742984.75,4436107 742930.31,4436010.5 742894.56,4435954 742878.5,4435910.5 742885.06,4435869 742913.88,4435840 742946.19,4435817 742975.19,4435783 742998.13,4435741 743006.5,4435683.5 742957.63,4435676.5 742914.88,4435673.5 742860.06,4435656.5 742814.75,4435619.5 742796.63,4435564.5 742786.75,4435525.5 742835.25,4435507 742830.5,4435431 742740.94,4435399 742687.44,4435380.5 742616.56,4435354 742567.88,4435307 742530.56,4435259 742467,4435239 742446.06,4435225.5 742404.5,4435190 742357.06,4435178 742314.88,4435160 742274.38,4435130 742222.75,4435095 742197.25,4435026.5 742145.13,4435002 742125.25,4434992.5 742108.19,4434975.5 742085.31,4434945.5 742072.75,4434907.5 742060.44,4434864 742070.63,4434850.5 742072.75,4434804 742069.94,4434776 742064.63,4434748 742046.31,4434731 742016.31,4434722 741990.38,4434741.5 741978.13,4434766 741970.88,4434791 741967.56,4434814 741965.38,4434840.5 741965.63,4434867 741951.13,4434884 741933,4434897 741916.13,4434910.5 741906.69,4434926.5 741914.75,4434948.5 741911.5,4434967 741899.69,4434980.5 741877.94,4434988.5 741856.63,4434985.5 741847.06,4434970 741826.19,4434952.5 741797.63,4434939 741769.88,4434939.5 741745.75,4434942 741713.94,4434950 741678.69,4434946 741641.06,4434939.5 741622.75,4434921.5 741604.5,4434903 741582,4434896 741555.69,4434891 741546.19,4434910 741536.56,4434931 741515.13,4434930 741497.38,4434933.5 741485.5,4434947 741473.25,4434971.5 741596.88,4435010 741598.56,4435033 741602.38,4435068.5 741570.06,4435125.5 741593.38,4435178 741681.63,4435177.5 741714.38,4435177.5 741752,4435182.5 741761.38,4435201.5 741786.06,4435215 741804.81,4435219.5 741825.94,4435228 741841.5,4435250 741841.19,4435294 741832.25,4435331.5 741821.13,4435360 741796.5,4435378 741591,4435450 741584.75,4435516.5 741570.88,4435551.5 741540.56,4435588 741488.69,4435629 741454.88,4435658 741399.56,4435757 741402.69,4435808.5 741412.25,4435858 741412.13,4435930 741379.44,4435963 741324.75,4436010 741214.63,4436025 741171.63,4436027 741054.56,4436024 741030.5,4436028 740995.75,4436047 740970.5,4436013.5 740960,4435990.5 740949.75,4435961 740939.5,4435931.5 740922.75,4435907 740824.75,4435863 740908.31,4435991 740925.94,4436061 740952.56,4436091 740999.25,4436227.5 741028.38,4436396.5 741043.94,4436487.5 741026.88,4436609 740995.69,4436656.5 741002.56,4436653.5 741038.63,4436632 741066.19,4436603 741086.69,4436559.5 741095.63,4436522 741105.88,4436482 741110.69,4436454.5 741121.5,4436399.5 741055.5,4436344 741054.63,4436333 741078.88,4436289.5 741096.63,4436253.5 741109.13,4436220</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.18">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Loriguilla</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">678599.69,4392972 678585.31,4392984 678481.13,4393057 678467.38,4393110 678444.63,4393126.5 678399,4393138.5 678348,4393118.5 678311,4393053.5 678301.56,4393032.5 678282.25,4392987 678243.63,4392908 678229.81,4392941.5 678217.31,4392984.5 678213.13,4393051.5 678236.5,4393153.5 678258.63,4393219.5 678289.56,4393274 678329.63,4393353.5 678354.13,4393398 678372.69,4393495.5 678378.31,4393565.5 678396.5,4393613.5 678427.19,4393641 678446.56,4393679 678443.19,4393732.5 678433.44,4393778 678414.94,4393848 678398.94,4393910.5 678393.44,4394020 678396.81,4394120 678407.5,4394189 678402.88,4394244.5 678372.56,4394264 678309.25,4394290 678233.31,4394321 678182.81,4394358.5 678141.13,4394388 678086.75,4394419 678025.88,4394433 677995.31,4394421 677983.69,4394402 677964.31,4394362.5 677916.94,4394317 677873.63,4394297.5 677823.88,4394277.5 677793.13,4394238 677783.88,4394196.5 677784.69,4394141.5 677802,4394084.5 677805.31,4394024.5 677793.44,4393965 677772.81,4393932 677744.69,4393909.5 677720.38,4393889.5 677724,4393864 677728.75,4393824.5 677718.38,4393797 677690.38,4393789.5 677662.5,4393802.5 677634.75,4393824 677608.25,4393848.5 677592,4393875.5 677598.5,4393899.5 677614.06,4393933.5 677642.31,4393972.5 677674.44,4394019.5 677686.19,4394056 677691.38,4394072.5 677701.75,4394099 677686.75,4394125 677671.69,4394146.5 677647.69,4394163 677624.88,4394169.5 677614.94,4394197.5 677599.88,4394220.5 677577.06,4394227.5 677550.25,4394216 677527.31,4394203.5 677497.94,4394181 677491.25,4394145.5 677452.81,4394104 677427.25,4394086 677390.38,4394075 677407.25,4394126 677420.25,4394160 677424.38,4394198 677439.94,4394240 677459.38,4394284 677488.88,4394323.5 677498,4394346 677500.75,4394371.5 677481.88,4394394.5 677436.25,4394405 677404.5,4394406.5 677363.94,4394421 677332.31,4394436.5 677281.69,4394457 677242.5,4394488 677213.56,4394521 677189.75,4394562 677163.38,4394599 677126.81,4394626 677107.94,4394653 677119.63,4394682 677144.06,4394718.5 677147.06,4394773 677137.25,4394823 677134,4394889 677158.19,4394897.5 677148.25,4394918 677127.94,4394927 677098.81,4394935 677109.19,4394963 677128.44,4394983 677152.69,4394998 677178.19,4395008 677193.56,4395027 677199,4395067.5 677200.88,4395147.5 677196.38,4395215 677167.44,4395250.5 677142.06,4395256 677098.88,4395252.5 677044.31,4395260.5 677050.81,4395278.5 677084,4395302 677113.38,4395323.5 677150.44,4395345 677179.56,4395339.5 677208.69,4395325.5 677237.75,4395303.5 677260.38,4395274 677281.88,4395267.5 677299.56,4395251 677332.31,4395215 677366.5,4395208.5 677388.38,4395242.5 677402.81,4395294.5 677390.5,4395341.5 677369.25,4395385 677344.25,4395438.5 677312.94,4395494.5 677353.56,4395485.5 677408.25,4395494 677427.44,4395511.5 677439.19,4395549.5 677472.69,4395620 677493.81,4395683.5 677518.75,4395746.5 677549.56,4395774 677595.38,4395784 677622.06,4395782 677637.5,4395794.5 677670.75,4395813.5 677687.38,4395826 677691.69,4395865 677689.69,4395908.5 677683.63,4395935 677666.44,4395982.5 677646.44,4396008 677613.69,4396032.5 677579.5,4396042 677551.44,4396031 677519.63,4396031 677506.31,4396045.5 677499.63,4396053 677473.75,4396122 677438.94,4396184.5 677399.44,4396279 677362.44,4396368.5 677317.5,4396437.5 677267.13,4396472.5 677216.75,4396506 677151,4396537.5 677094.31,4396574 677038.94,4396619 677005.19,4396665 676960.13,4396717.5 676938.25,4396803 676919.06,4396895 676888,4396948.5 676859.63,4397022.5 676819.63,4397076.5 676769.25,4397109 676729.06,4397150 676690.25,4397197.5 676664.13,4397241 676640.38,4397275.5 676629.25,4397300 676611.5,4397304 676583.75,4397319.5 676548.63,4397355.5 676535.75,4397380 676526.25,4397397.5 676545.81,4397437 676568.25,4397505 676586.06,4397590 676633.88,4397652.5 676668.56,4397685 676730.88,4397699 676779.19,4397707.5 676824,4397709.5 676826,4397701.5 676854.5,4397655.5 676872.63,4397596 676866.88,4397546.5 676851.13,4397510 676849.13,4397459 676857.25,4397404.5 676864.06,4397351.5 676874.69,4397296.5 676929.75,4397142.5 676966.5,4397033 676997.38,4396962.5 677036.19,4396911 677062.56,4396886.5 677103.06,4396873.5 677141.06,4396866.5 677175.06,4396842 677184.88,4396813 677184.25,4396763.5 677170.81,4396698.5 677161.31,4396652 677178.38,4396592 677219.88,4396558.5 677274.25,4396537.5 677321.13,4396526.5 677357.81,4396509.5 677389.25,4396482.5 677461.13,4396442.5 677522.06,4396435 677571.63,4396438.5 677616.5,4396469.5 677653.88,4396511 677695.06,4396559 677707.13,4396575 677728.38,4396581.5 677758.56,4396557 677780.94,4396516 677787.88,4396461 677760.38,4396390.5 677739.19,4396320.5 677715.81,4396278 677686.13,4396244 677683.06,4396198 677692.75,4396157.5 677729.13,4396119 677769.38,4396090.5 677810.06,4396090 677827.44,4396097 677869.56,4396052 677865.44,4396047.5 677848.44,4396009.5 677844,4395957.5 677853.63,4395912.5 677858.25,4395872 677843.75,4395831.5 677807.63,4395786 677784.5,4395763.5 677705.88,4395701 677654.63,4395645.5 677617.06,4395558 677604,4395512.5 677585.63,4395435.5 677578.5,4395346.5 677551.25,4395273 677517.56,4395193 677485,4395094.5 677466.75,4395032.5 677459.75,4394953.5 677456.63,4394886.5 677476.44,4394820 677507.81,4394776.5 677554.56,4394743 677620.56,4394734 677675.25,4394739.5 677720.94,4394738 677761.63,4394743 677787.25,4394766.5 677801.5,4394801 677813.19,4394832.5 677833.69,4394854 677846.31,4394846.5 677867.81,4394833.5 677907.19,4394833 677923.75,4394838 677933.69,4394814 677957.63,4394789.5 677981.63,4394773 678004.5,4394772.5 678025.06,4394803 678031.81,4394847.5 678043.56,4394890.5 678048.88,4394922 678050.38,4394945 678089.63,4394929.5 678121.13,4394901 678114.5,4394864.5 678116.63,4394816 678143.06,4394784 678165.56,4394741 678181.44,4394662 678217.63,4394579 678247.69,4394528 678273.94,4394473 678351.13,4394440.5 678405.56,4394417.5 678434.69,4394403 678459.94,4394382.5 678514.44,4394369.5 678537.5,4394392 678553,4394422.5 678563.31,4394444 678576.19,4394465.5 678602.88,4394463 678598.69,4394421 678620,4394387.5 678635.13,4394367.5 678649.94,4394316.5 678668.75,4394289.5 678692.63,4394256.5 678733.25,4394254.5 678768.81,4394249.5 678801.75,4394239 678833.5,4394242.5 678871.75,4394256 678914.94,4394257 678981,4394254 679015.19,4394245 679046.94,4394244.5 679071.31,4394273.5 679102.06,4394301 679159.5,4394340 679196.56,4394364 679224.81,4394403 679229.06,4394456.5 679210.38,4394500 679205.56,4394534 679198.38,4394587.5 679243.94,4394568 679261.56,4394545 679276.5,4394513 679305.63,4394495 679343.75,4394501.5 679379.38,4394510 679390.75,4394498.5 679387.88,4394455 679388.69,4394403 679394.81,4394372.5 679412.38,4394348.5 679449.06,4394330 679488.38,4394319.5 679512.56,4394323.5 679530.69,4394334 679535.5,4394337 679557.19,4394347 679564.63,4394344.5 679571.13,4394342 679563.25,4394315.5 679556.81,4394300 679564.31,4394285 679561.63,4394267 679542.44,4394253 679527.06,4394235.5 679523.94,4394222.5 679517.88,4394197.5 679508.69,4394161 679498.31,4394136.5 679476.88,4394156 679459.31,4394184 679434.13,4394208.5 679397.38,4394219 679321,4394205.5 679249.69,4394180.5 679194.94,4394164.5 679155.31,4394132 679123.31,4394104 679103.94,4394067.5 679089.69,4394028 679113.31,4393971 679144.63,4393913.5 679185.81,4393823 679232.25,4393754 679259.69,4393690 679274.44,4393629 679268.69,4393551.5 679244.13,4393498.5 679197.81,4393425 679179.69,4393386 679177,4393360.5 679185.06,4393260 679188.06,4393165 679183.88,4393072.5 679154.81,4393047.5 679149.88,4393045.5 679079.06,4393022.5 679070.63,4393020 679034.88,4393002 679014.38,4392977 678989.94,4392931 678960.38,4392877.5 678912.88,4392805.5 678880.88,4392765 678842.5,4392737 678790.19,4392719.5 678749.25,4392679 678744,4392653.5 678748.94,4392621.5 678756.44,4392591 678739.75,4392565.5 678704.13,4392574.5 678681.31,4392590 678666.13,4392614.5 678662.56,4392657.5 678662.75,4392693.5 678670.63,4392735.5 678694.94,4392759.5 678711.63,4392787.5 678725.88,4392832 678719.63,4392863.5 678700.69,4392890.5 678674.06,4392917.5 678634.75,4392942 678599.69,4392972</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.19">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Benagéber</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">660483.13,4401198 660437.56,4401194 660401.06,4401175.5 660363.44,4401145 660340.81,4401132 660329.25,4401140.5 660325.25,4401161 660326.06,4401196.5 660328.38,4401213 660319.44,4401219 660306.56,4401234 660284.56,4401274.5 660268.69,4401327.5 660254.06,4401383 660242.31,4401409.5 660214.19,4401429.5 660192.25,4401466 660165.25,4401496 660122.13,4401499 660064.06,4401479.5 660007.5,4401443 659973.69,4401412.5 659949.63,4401409.5 659927.94,4401424.5 659904.81,4401449.5 659866.38,4401482 659826.69,4401518.5 659785.5,4401568.5 659749.56,4401606 659702.13,4401652.5 659675,4401694 659652.94,4401735.5 659628.63,4401753 659599.5,4401755 659566.5,4401756 659537.63,4401778 659507.44,4401784.5 659473.5,4401786 659434.44,4401786 659379.06,4401783.5 659288.44,4401763.5 659231.75,4401763.5 659144.94,4401763.5 659123.56,4401767.5 659109.75,4401785 659107.25,4401803 659106.06,4401832 659114.88,4401860.5 659131.31,4401886 659146.5,4401915 659146.5,4401941 659164.19,4401971.5 659194.44,4401984 659224.69,4401999 659246.13,4402020.5 659262.56,4402063 659266.44,4402111 659270.25,4402157.5 659280,4402182.5 659313,4402111 659331.75,4402058 659348.06,4402025 659364.38,4402000 659380.75,4401988.5 659421,4401984.5 659472.56,4401968.5 659519.06,4401936.5 659544.25,4401923 659589.5,4401894 659624.69,4401867.5 659653.56,4401851 659678.75,4401844.5 659714,4401844.5 659735.38,4401849.5 659745.5,4401858 659746.81,4401881 659738,4401905 659719.25,4401952.5 659704.19,4401986.5 659700.44,4402009.5 659704.25,4402028 659719.38,4402036 659747.06,4402024.5 659773.44,4401996.5 659798.56,4401964 659817.38,4401933.5 659850.06,4401922 659880.31,4401926 659900.44,4401940 659908.06,4401968.5 659909.38,4401992.5 659914.44,4402028 659920.75,4402040.5 659945.94,4402039 659959.75,4402021.5 659971,4401985 659969.69,4401943.5 659968.38,4401902 659973.31,4401865.5 659988.38,4401826.5 660008.44,4401801 660057.5,4401789.5 660083.94,4401796 660125.56,4401827.5 660157.06,4401857.5 660181,4401886.5 660227.75,4401980.5 660245.44,4402012 660253.06,4402024.5 660268.19,4402056 660326.13,4402049.5 660327.38,4402049.5 660341.19,4402041 660358.81,4402026 660380.19,4401999.5 660397.81,4401967 660401.63,4401940.5 660396.63,4401920.5 660387.88,4401899 660379.13,4401879 660369.13,4401856.5 660360.44,4401820 660360.5,4401787.5 660368.13,4401753.5 660388.25,4401721 660418.38,4401688.5 660447.31,4401676 660481.19,4401671 660523.81,4401675 660557.75,4401658.5 660582.88,4401647.5 660611.75,4401638.5 660636.81,4401633.5 660671.94,4401632.5 660710.88,4401637.5 660747.19,4401654 660768.5,4401664 660792.38,4401654 660818.75,4401640 660852.63,4401641.5 660891.5,4401658 660930.38,4401668 660964.25,4401670.5 660993.13,4401665.5 661023.25,4401640.5 661047.13,4401614.5 661071.06,4401584 661097.44,4401553 661121.31,4401545.5 661142.63,4401551.5 661161.44,4401564.5 661195.25,4401580.5 661214.06,4401588 661246.69,4401591 661283.06,4401594.5 661313.19,4401583.5 661344.63,4401567 661360.94,4401554.5 661383.56,4401541 661397.38,4401529.5 661421.25,4401511 661446.38,4401498.5 661484,4401491 661529.19,4401491 661555.5,4401496 661576.88,4401500 661590.63,4401503.5 661637.06,4401512.5 661688.81,4401521 661718.63,4401516.5 661758.75,4401515 661791.38,4401533 661813.88,4401555.5 661825.13,4401585.5 661843.81,4401644.5 661835,4401681 661822.38,4401715 661823.56,4401752.5 661843.56,4401776.5 661869.88,4401818 661863.5,4401846.5 661848.38,4401887 661850.81,4401933 661862,4401983.5 661877,4402010 661897.06,4402037.5 661922.13,4402061.5 661963.44,4402095.5 661997.25,4402123 662032.31,4402158 662076.19,4402189.5 662113.75,4402223.5 662151.38,4402248.5 662190.25,4402264 662217.81,4402276.5 662244.13,4402304 662275.44,4402325.5 662314.31,4402335.5 662355.69,4402353 662375.69,4402377 662393.19,4402422.5 662410.69,4402460 662431.94,4402486.5 662460.81,4402497.5 662488.38,4402504 662505.94,4402519 662514.63,4402545.5 662523.38,4402574.5 662527.06,4402618.5 662537,4402665 662539.5,4402696 662540.69,4402716 662531.81,4402761.5 662520.5,4402787.5 662505.38,4402824 662487.69,4402865.5 662467.63,4402885.5 662444.94,4402928 662422.31,4402954.5 662378.38,4402974.5 662336.94,4402965.5 662303.06,4402969 662244.06,4402983 662182.63,4402979 662092.31,4402961.5 662048.38,4402951 662002,4402955 661942.94,4402972.5 661897.75,4402990 661862.63,4403006 661833.69,4403021 661798.56,4403028.5 661772.25,4403021 661754.69,4403011 661712.06,4402990.5 661674.44,4402993 661653.06,4402993 661609.19,4402989 661585.31,4402994 661579.06,4403003 661569,4403022 661552.63,4403050.5 661537.5,4403060.5 661518.69,4403065.5 661496.13,4403074.5 661476,4403087 661464.69,4403100.5 661465.88,4403120.5 661480.94,4403137 661522.31,4403152 661566.19,4403161 661600.06,4403162.5 661628.94,4403156 661651.5,4403161 661677.88,4403172.5 661706.69,4403175 661743.13,4403167.5 661775.75,4403167.5 661815.81,4403184 661835.88,4403196.5 661850.94,4403213 661902.38,4403214.5 661918.63,4403222 661933.69,4403230.5 661941.19,4403256 661932.31,4403297 661914.69,4403328.5 661910.88,4403345 661897.06,4403367.5 661888.75,4403407 661886.19,4403425.5 661891.13,4403461 661889.81,4403497.5 661870.94,4403520 661850.75,4403532.5 661828.13,4403545 661810.44,4403580 661783.94,4403605.5 661757.5,4403615.5 661738.63,4403624 661710.94,4403643 661694.5,4403675.5 661668,4403719.5 661645.31,4403751 661627.69,4403768.5 661613.75,4403795 661606.13,4403844 661594.75,4403881.5 661570.81,4403893 661539.38,4403905.5 661515.44,4403914 661492.75,4403936.5 661470.06,4403974.5 661438.5,4404023.5 661409.5,4404067 661403.06,4404122.5 661380.38,4404152.5 661361.44,4404170 661351.38,4404195.5 661351.25,4404234.5 661353.69,4404268.5 661352.38,4404293.5 661358.63,4404317.5 661376.19,4404333.5 661400.06,4404351.5 661418.88,4404368 661417.56,4404388 661416.25,4404428 661418.69,4404456 661436.19,4404486 661458.81,4404511 661467.56,4404532.5 661459.94,4404563 661463.63,4404594 661479.94,4404617 661495,4404627 661517.63,4404639.5 661530.19,4404652 661533.88,4404677.5 661526.31,4404698.5 661509.88,4404730 661497.25,4404751.5 661493.44,4404773 661495.88,4404790.5 661508.44,4404818 661517.13,4404852 661522.13,4404881 661524.56,4404915 661519.44,4404944 661508.06,4404978 661495.44,4404996.5 661475.31,4405013 661440.06,4405024 661403.63,4405023 661373.44,4405025.5 661347,4405040.5 661321.81,4405043 661279.06,4405049 661242.5,4405085.5 661219.81,4405112 661179.5,4405134.5 661141.75,4405149.5 661102.75,4405160.5 661049.94,4405165.5 661032.31,4405169 661010.94,4405170.5 660989.56,4405181.5 660973.13,4405205.5 660954.19,4405244.5 660937.81,4405263.5 660913.88,4405284.5 660903.75,4405302 660881.06,4405321 660879.56,4405321.5 660889.81,4405362.5 660917.38,4405411.5 660961,4405489 661006.56,4405459.5 661068.25,4405428.5 661100.94,4405411 661132.38,4405402 661181.5,4405388.5 661210.44,4405366 661236.94,4405339.5 661259.56,4405337 661291,4405323 661318.75,4405300.5 661332.56,4405295.5 661362.75,4405297 661392.94,4405290.5 661415.63,4405263 661437.06,4405243 661469.81,4405227 661525.13,4405233 661572.88,4405229.5 661601.88,4405209.5 661625.81,4405179.5 661642.19,4405159 661664.88,4405155.5 661698.75,4405177 661727.69,4405187 661754.13,4405172 661740.56,4405117.5 661736.31,4405058 661732.25,4405017.5 661729.31,4404955 661717.5,4404904.5 661710.94,4404875 661703,4404828 661700.06,4404823 661651.56,4404734.5 661630.94,4404692.5 661614.19,4404658.5 661601.31,4404634.5 661582.06,4404606.5 661561.56,4404581.5 661547.38,4404553.5 661551,4404523 661558.44,4404493.5 661563.31,4404465.5 661547.94,4404444 661531.25,4404424 661526.13,4404412.5 661527.25,4404397 661542.44,4404379.5 661533.25,4404344 661528.06,4404321 661536.69,4404288 661550.5,4404253.5 661568.13,4404228 661588.25,4404203.5 661604.69,4404191 661624.94,4404171.5 661645.06,4404139.5 661661.38,4404115.5 661694.44,4404115 661726.25,4404116 661749.06,4404111 661769.13,4404065 661772.75,4404036 661778.88,4404005.5 661814.38,4403995 661847.56,4404013.5 661893.5,4404041.5 661947,4404059 661982.56,4404057.5 662005.38,4404045.5 662019.19,4404021.5 662017.81,4403998.5 661989.69,4403977 661961.5,4403947 661947.25,4403909 661941.94,4403867 661941.63,4403825 661947.75,4403790.5 661960.25,4403755 661971.38,4403710.5 661987.63,4403669.5 662001.31,4403629 662008.81,4403606 662017.44,4403567.5 662023.63,4403539.5 662022.19,4403518 662013.19,4403496.5 662002.94,4403485 661986.25,4403465 661968.31,4403439.5 661958,4403422 661959.19,4403404 661975.5,4403378.5 661993.25,4403371 662009.69,4403359.5 662019.56,4403309.5 662025.69,4403278 662031.88,4403250 662040.63,4403233.5 662058.38,4403224.5 662079.94,4403219 662106.56,4403208.5 662129.38,4403196 662147.06,4403179 662170.06,4403197 662194.31,4403215.5 662213.44,4403222 662227.38,4403219.5 662248.81,4403190 662265.25,4403173.5 662266.5,4403172 662298.38,4403187 662321.31,4403201 662345.5,4403200.5 662363.19,4403184 662382.06,4403157.5 662397.75,4403127.5 662449.56,4403112 662517.81,4403081 662560.75,4403060.5 662603.56,4403025 662637.31,4402951 662659.81,4402909 662683.75,4402887.5 662719.13,4402868 662735.31,4402830 662752.75,4402782 662795.63,4402752.5 662838.63,4402735.5 662870.13,4402715 662881.5,4402707.5 662912.56,4402687 662918.06,4402683 662962.25,4402656 662979.81,4402634.5 662991.06,4402606.5 662992,4402562.5 662976.75,4402548.5 662951.38,4402551 662924.88,4402562.5 662911,4402568 662891.94,4402568 662874.06,4402545.5 662873.88,4402516 662862.38,4402500 662830.75,4402504 662794,4402509 662772.44,4402500.5 662767.06,4402461 662749.13,4402423.5 662709.69,4402402 662658.81,4402377 662604.06,4402333 662572.19,4402304 662544.19,4402281.5 662526.25,4402255 662517.13,4402219.5 662510.5,4402178 662500.06,4402124.5 662475.81,4402098 662440.25,4402093.5 662387,4402087.5 662346.31,4402065 662305.56,4402031 662263.5,4401997 662220.19,4401959.5 662179.38,4401920 662155.19,4401901.5 662094,4401848.5 662074.69,4401803 662063.06,4401764 662056.44,4401721 662056.19,4401681.5 662054.63,4401601 662052.31,4401562.5 662052.44,4401535.5 662059,4401501.5 662078.31,4401473.5 662096.31,4401454.5 662111.81,4401417.5 662122.25,4401385.5 662144.06,4401362.5 662164.56,4401347.5 662187.81,4401301.5 662199.5,4401266 662225.25,4401228 662256.13,4401186 662286.94,4401156.5 662316.38,4401139 662345.94,4401102 662367.75,4401077 662394.69,4401054 662436.94,4401036.5 662477.88,4401016 662516.31,4400989.5 662545.88,4400958 662586.94,4400923.5 662624,4400910 662704.5,4400892.5 662777.38,4400875 662823.31,4400870 662875.81,4400848.5 662918.06,4400822 662966.69,4400803.5 663025.56,4400774 663069.06,4400754 663127.88,4400732.5 663167.5,4400726.5 663212.25,4400713 663260.88,4400686 663301.81,4400675 663340.19,4400662.5 663381.13,4400641 663427.19,4400617 663505.25,4400585.5 663534.69,4400571.5 663548.75,4400568 663566.63,4400564 663598.5,4400568 663615.06,4400576 663652.13,4400573.5 663685.38,4400560 663701.94,4400565 663750.25,4400592 663778.25,4400607.5 663812.63,4400623 663847.06,4400624.5 663873.94,4400612 663899.63,4400589 663908.94,4400583.5 663917.25,4400515 663921.69,4400441.5 663912.19,4400363 663891.56,4400315.5 663857.25,4400289 663779.75,4400242 663731.44,4400202 663696.94,4400155.5 663644.56,4400087.5 663606.13,4400025 663576.75,4399983.5 663531,4399947 663497.75,4399899.5 663472.13,4399863 663440.31,4399834.5 663390.88,4399808 663350.06,4399762 663321.88,4399719 663288.5,4399657.5 663247.81,4399626 663185.81,4399606.5 663146.5,4399588 663117.19,4399560.5 663099.25,4399527.5 663085.06,4399497.5 663076.06,4399477.5 663066.94,4399447 663040.94,4399444 662943.06,4399433 662819.13,4399416.5 662757.25,4399418 662764,4399463.5 662774.63,4399524 662776.19,4399566 662774.13,4399615 662759.5,4399681 662733.38,4399724 662704.56,4399753.5 662668.13,4399777.5 662624.19,4399804.5 662593.94,4399815 662575,4399817.5 662559.88,4399819 662534.81,4399846 662504.63,4399856 662473.06,4399859 662443.94,4399851.5 662412.25,4399835.5 662384.44,4399830.5 662344.06,4399840 662326.5,4399854 662305.19,4399874 662281.38,4399889.5 662229.75,4399910.5 662145.38,4399873 662124.13,4399851.5 662096.63,4399818 662055.25,4399784.5 662012.13,4399788 661995.38,4399808 661977.56,4399815.5 661945.81,4399821.5 661914.19,4399816 661884.06,4399794 661865.25,4399777 661838.81,4399768 661795.75,4399766 661750.19,4399760.5 661717.38,4399751.5 661687.19,4399733 661652.19,4399695 661601.88,4399662.5 661579.13,4399658.5 661562.5,4399673.5 661549.44,4399703.5 661543.63,4399739 661542.56,4399745.5 661549.75,4399781 661545.56,4399811.5 661536.44,4399831.5 661534.75,4399867 661544.56,4399891 661554.5,4399907.5 661575.81,4399927 661599.75,4399940 661624.94,4399951.5 661655.13,4399967 661685.38,4399983 661711.94,4399985.5 661742.19,4399997.5 661752.13,4400015.5 661750.38,4400051 661732.44,4400069.5 661700.44,4400093 661675,4400104.5 661641.94,4400114 661603.75,4400126 661552.94,4400139.5 661503.38,4400150.5 661456.31,4400163.5 661419.38,4400181 661398.63,4400221.5 661400.69,4400255.5 661414.25,4400290 661427.81,4400316.5 661435,4400351 661423.38,4400370 661394.5,4400350.5 661378.06,4400344 661352.81,4400338.5 661332.44,4400347 661308.19,4400359.5 661289.13,4400365.5 661265,4400368 661237.25,4400361 661209.56,4400342 661193.44,4400316.5 661184.75,4400299.5 661171.06,4400279.5 661157.31,4400264 661141,4400252.5 661123.31,4400249.5 661109.19,4400263.5 661103.75,4400292.5 661099.31,4400344.5 661097.56,4400385 661102.13,4400424 661115.69,4400457 661138.19,4400479 661165.94,4400489.5 661206.38,4400499 661235.44,4400504.5 661255.75,4400504.5 661287.25,4400515 661320.06,4400528 661355.38,4400541.5 661374.25,4400551.5 661394.19,4400576 661404.06,4400601.5 661398.63,4400630.5 661379.38,4400649.5 661350,4400670.5 661319.31,4400690.5 661270.81,4400720 661238.94,4400735 661216.13,4400737 661203.5,4400733.5 661177.06,4400719 661155.88,4400691 661132.13,4400662.5 661089.56,4400623 661037.88,4400598 661006.25,4400598 660988.13,4400630.5 660983.81,4400667 660982.19,4400700 660985.5,4400739.5 660988.81,4400777.5 660978,4400833 660954.81,4400863 660922.88,4400885.5 660901.19,4400894 660880.94,4400894 660867.13,4400882.5 660847,4400871 660823.13,4400855.5 660790.31,4400843.5 660738.63,4400826.5 660703.06,4400829.5 660679.88,4400861 660674.31,4400904 660674.94,4400952.5 660674.56,4400985 660670.38,4401018 660654.88,4401039.5 660640.75,4401054.5 660607.5,4401078 660570.5,4401099 660556.06,4401143.5 660522.56,4401185 660483.13,4401198</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.20">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament de Benitandús</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">728178.18,4424302.57 728181.02,4424298.12 728185.54,4424288.63 728191.61,4424273.21 728193.3,4424267.87 728194.41,4424262.67 728194.79,4424257.6 728194.88,4424252.23 728193.51,4424247.42 728191.64,4424246.95 728187.85,4424248.05 728174.09,4424254.91 728169.27,4424256.57 728163.89,4424257.49 728158.38,4424257.1 728153.19,4424255.42 728148.88,4424252.87 728145.03,4424249.32 728141.03,4424245.34 728130.08,4424232.81 728126.52,4424229.27 728122.66,4424225.86 728109.06,4424215.61 728105.21,4424211.92 728101.94,4424207.95 728099.11,4424203.54 728094.64,4424194.18 728091.82,4424189.2 728088.56,4424185.22 728084.7,4424181.96 728080.09,4424179.71 728074.9,4424178.16 728069.25,4424177.78 728064.17,4424177.98 728043.36,4424181.09 728032.29,4424184.09 728017.83,4424189.49 728008.46,4424194.12 727994.66,4424203.3 727981.86,4424213.81 727974.34,4424220.65 727960.3,4424235.49 727952.78,4424242.32 727944.25,4424248.55 727939.85,4424251.23 727935.32,4424253.47 727930.64,4424255.28 727925.39,4424256.93 727920.44,4424257.71 727914.94,4424257.47 727909.88,4424256.22 727905.58,4424253.39 727902.32,4424248.98 727900.09,4424243.86 727899.02,4424238.76 727898.67,4424233.53 727898.91,4424228.17 727901.09,4424211.82 727903.15,4424201.7 727909.16,4424181.64 727917.39,4424150.59 727918.36,4424145.38 727918.3,4424140.3 727915.87,4424130.11 727913.92,4424125.43 727911.1,4424120.74 727907.83,4424116.91 727899.1,4424110.23 727894.22,4424107.38 727884.14,4424102.86 727873.75,4424099.48 727858.15,4424095.87 727847.73,4424094.53 727842.83,4424092.41 727838.24,4424089.57 727829.94,4424083.19 727826.38,4424079.21 727819.86,4424070.39 727817.04,4424065.7 727814.81,4424060.58 727813.3,4424055.77 727811.3,4424045.58 727810.03,4424035.25 727810.07,4424024.66 727810.61,4424019.16 727811.86,4424013.96 727814.41,4424009.36 727820.65,4424000.48 727825.03,4423991.12 727825.49,4423980.98 727825,4423975.89 727823.78,4423970.94 727821.84,4423965.97 727818.43,4423961.85 727813.7,4423958.86 727809.26,4423955.45 727800.07,4423950.21 727785.82,4423943.43 727775.29,4423940.2 727754.19,4423935.62 727748.99,4423934.22 727744.09,4423932.54 727739.19,4423930.42 727725.09,4423923.79 727720.49,4423921.25 727697.83,4423906.34 727681.24,4423893.14 727673.69,4423885.17 727666.87,4423877.07 727663.3,4423873.53 727651.15,4423863.45 727644.31,4423855.93 727641.49,4423851.67 727639.39,4423846.99 727638.03,4423842.04 727637.4,4423836.66 727637.15,4423826.35 727637.77,4423815.77 727641.08,4423800.6 727640.14,4423796.52 727638.66,4423797.94 727635.03,4423806.58 727631.95,4423816.4 727628.64,4423831.57 727627.83,4423836.63 727627.73,4423842.14 727628.07,4423847.23 727629.78,4423857.27 727634.74,4423872.44 727641.16,4423886.92 727646.36,4423896.59 727659.55,4423913.5 727667.1,4423921.32 727679.1,4423931.98 727687.84,4423938.37 727692.58,4423940.92 727697.63,4423942.75 727717.54,4423948.9 727727.78,4423952.56 727732.53,4423954.68 727752.23,4423964.31 727761.28,4423969.84 727765.28,4423973.1 727768.84,4423977.22 727771.95,4423981.78 727774.19,4423986.31 727775.84,4423991.13 727775.66,4424001.86 727774.98,4424007.36 727774.36,4424017.8 727773.94,4424033.6 727775.03,4424070.62 727775.66,4424076 727776.73,4424081.38 727779.45,4424091.73 727782.89,4424101.8 727784.99,4424106.48 727789.9,4424115.85 727795.54,4424125.24 727798.66,4424129.21 727802.51,4424133.34 727813.49,4424143.98 727818.08,4424147.1 727822.68,4424149.22 727838.13,4424153.69 727843.17,4424155.52 727848.06,4424158.08 727851.19,4424161.61 727852,4424165.11 727851.91,4424170.47 727850.8,4424175.53 727850.27,4424180.75 727849.03,4424185.66 727847.25,4424196.07 727844.89,4424206.33 727837.04,4424232.02 727830.83,4424246.85 727823.9,4424261.82 727822.36,4424266.72 727821.83,4424271.93 727821.88,4424277.45 727823.1,4424282.55 727833.59,4424312.62 727837.68,4424327.78 727840.11,4424338.27 727845.36,4424353.3 727849.54,4424363.09 727852.2,4424368.22 727857.85,4424377.17 727861.4,4424381.44 727864.96,4424385.42 727868.81,4424388.82 727879.93,4424400.19 727883.34,4424404.16 727887.2,4424407.71 727890.46,4424411.69 727891.27,4424415.48 727890.32,4424419.67 727887.41,4424424.21 727896.55,4424432.54 727900.93,4424435.38 727906.99,4424437.22 727912.21,4424437.17 727917.17,4424435.81 727930.79,4424428.5 727934.62,4424425.09 727938.17,4424421.38 727955.37,4424400.35 727967.03,4424388.81 727979.4,4424378.43 727987.08,4424370.88 728000.73,4424353.71 728003.7,4424349.41 728013.65,4424336.67 728019.75,4424327.79 728022.87,4424323.78 728029.82,4424316.36 728032.94,4424312.2 728036.48,4424308.64 728040.74,4424305.96 728044.07,4424306.02 728051.98,4424310.22 728056.42,4424313.05 728059.98,4424316.89 728062.08,4424321.57 728062.04,4424324.29 728060.72,4424324.3 728061.08,4424328.8 728168.44,4424328.66 728169.25,4424323.59 728168.6,4424319.23 728171.8,4424311.02 728178.18,4424302.57</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.21">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse del Regajo</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">711069.63,4419526 711021.63,4419623.5 711004.06,4419670.5 711006.75,4419700.5 711032.38,4419749 711062.38,4419779.5 711100.56,4419813 711154.5,4419851.5 711284.31,4419864 711371.75,4419871 711371.19,4419973.5 711359.56,4419996.5 711323.88,4420052 711296.13,4420100.5 711274.25,4420160.5 711221.38,4420234.5 711299.06,4420159 711400.88,4419997.5 711404.38,4419916 711371.75,4419871 711355.75,4419802.5 711264.5,4419795 711206.25,4419790.5 711167.19,4419781.5 711096.31,4419702 711114.5,4419638.5 711141,4419554.5 711168.81,4419506 711199.44,4419468 711249.88,4419442.5 711328.44,4419414 711372.38,4419412.5 711416.19,4419412 711478.56,4419375 711533.75,4419342.5 711565.31,4419311.5 711580.38,4419265 711598.13,4419194 711609.69,4419163 711643.31,4419102 711685.69,4419076.5 711728.06,4419076.5 711767.69,4419102 711812.94,4419135.5 711835.56,4419161 711875.88,4419210 711945.13,4419280.5 712064.69,4419312.5 712139.19,4419263 712150.63,4419262 712163.25,4419265 712195.94,4419283.5 712228.56,4419304.5 712268.63,4419333 712291.19,4419350 712318.69,4419372 712339.94,4419390.5 712362.38,4419411 712384.75,4419437 712404.56,4419462.5 712425.56,4419495 712439,4419523 712451.19,4419547.5 712463.38,4419574.5 712480.56,4419604 712490.13,4419634.5 712507.38,4419664 712520.81,4419691 712537.94,4419725.5 712551.31,4419755 712561.06,4419778 712579.31,4419819 712581.63,4419829.5 712590.56,4419828 712636.5,4419817.5 712624.5,4419779.5 712612.31,4419752.5 712592.56,4419725.5 712572.75,4419699.5 712555.56,4419667.5 712551.06,4419637 712539.19,4419593.5 712517.38,4419541 712506.69,4419502.5 712493.56,4419459.5 712480.31,4419422 712467.06,4419384 712452.69,4419340.5 712434.31,4419303 712416,4419267.5 712397.69,4419227.5 712372.69,4419207 712337.63,4419180.5 712302.69,4419149.5 712274,4419122.5 712245.19,4419100 712209.81,4419090.5 712176.94,4419085 712149,4419083 712138.5,4419100.5 712126.75,4419118 712112.38,4419138 712086.69,4419154 712069.06,4419154 711896.38,4419064.5 711857.69,4419009 711829.44,4418965.5 711817.94,4418932 711818.75,4418892 711850.5,4418856.5 711895.31,4418829.5 711919.06,4418822 711868.5,4418744.5 711842.31,4418714 711829.5,4418698.5 711787.88,4418648 711786.88,4418647 711745.56,4418595 711642.44,4418669.5 711592.13,4418691 711569,4418716.5 711544.88,4418767.5 711487,4418752 711474.44,4418712.5 711366.94,4418733 711345.5,4418782 711308.19,4418811.5 711260.56,4418828 711178.81,4418839.5 711121.38,4418846 711069.19,4418848.5 711002.69,4418860 710951.38,4418839 710920.69,4418808.5 710887.81,4418768.5 710852.56,4418724 710827.13,4418671.5 710782.56,4418603.5 710762.75,4418572 710729.56,4418470 710726.75,4418406 710708.31,4418300.5 710657.69,4418242 710560.81,4418232 710516.5,4418245.5 710484.19,4418279 710403.75,4418554 710375.5,4418614.5 710392.63,4418650.5 710455.13,4418732.5 710451,4418583 710451.06,4418527.5 710466.06,4418446 710486.88,4418398 710522.44,4418363 710575.06,4418348 710617.06,4418347 710639.38,4418362.5 710673.94,4418425.5 710685.69,4418470.5 710690.88,4418503.5 710687,4418540 710688.81,4418578 710697.56,4418617.5 710718.44,4418672.5 710737.19,4418698.5 710773.31,4418736.5 710799.44,4418770 710822.06,4418813 710835.31,4418867.5 710866.5,4418938 710897.69,4418953.5 710942.44,4418963 710997.94,4418976 711076,4418977 711144.69,4418975.5 711194.88,4418975.5 711217.5,4418982.5 711281.13,4418998.5 711344.25,4419028 711373.56,4419061.5 711412.81,4419100.5 711436.38,4419152.5 711452.75,4419190 711457.13,4419228 711443.63,4419251.5 711416.81,4419272.5 711387,4419287 711345,4419290.5 711290.06,4419297 711237.69,4419323.5 711181.38,4419351.5 711149.13,4419382.5 711124.38,4419416 711088.06,4419471.5 711069.63,4419526</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.22">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Forata</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">683400.5,4357161.5 683382.06,4357153 683357.63,4357173 683336.69,4357205.5 683319.56,4357238 683307.5,4357271 683302.88,4357316.5 683297.06,4357352 683285.06,4357384.5 683264.38,4357404.5 683237.56,4357413 683209.5,4357423.5 683172.44,4357437 683138.06,4357445 683103.69,4357453.5 683082,4357458 683056.69,4357457.5 683018.75,4357451.5 682987.31,4357439.5 682959.81,4357417.5 682938.88,4357386.5 682915.31,4357361 682884.19,4357331 682845.38,4357305 682823.19,4357274 682805.94,4357246 682798.94,4357216.5 682795.75,4357185 682801.56,4357147 682809.88,4357111.5 682821.88,4357080 682844.56,4357021 682845.31,4356983 682843.38,4356952.5 682837.69,4356917 682830.69,4356887.5 682817.13,4356866 682801.19,4356839 682782.63,4356815.5 682762.88,4356790 682737.94,4356765.5 682716.63,4356753.5 682684.13,4356731.5 682647.63,4356718 682624.94,4356711 682594.75,4356699 682570.94,4356682.5 682541.38,4356638.5 682501.56,4356600 682463.81,4356585 682432,4356589.5 682402.88,4356589 682375.13,4356582 682353.88,4356568 682335.44,4356537 682313.13,4356508.5 682289.19,4356503 682256.25,4356500 682228.56,4356492 682211.06,4356477.5 682191.13,4356459.5 682167.44,4356440 682123.44,4356421.5 682109,4356381.5 682118.56,4356345 682125.25,4356327.5 682125.75,4356301 682113.63,4356273 682087.38,4356252 682068.75,4356234 682052.75,4356207 682044.69,4356167.5 682033.63,4356149.5 682023.63,4356141.5 682007.25,4356137.5 681981.94,4356134.5 681960.44,4356131.5 681935,4356133.5 681905.75,4356140.5 681887.69,4356157 681882.38,4356168 681885.81,4356186 681893.13,4356202.5 681901.63,4356223 681907.56,4356241 681913.56,4356260 681913,4356290.5 681906.25,4356308 681876.94,4356319 681850.38,4356316 681841.56,4356310.5 681808.81,4356301 681794.94,4356295.5 681779.75,4356296.5 681761.75,4356306.5 681768.75,4356339.5 681770.94,4356356 681772,4356369 681767.44,4356407 681710.44,4356403 681674.75,4356480 681605.13,4356539.5 681601.94,4356572 681601.44,4356599 681599.69,4356623 681576.81,4356625 681552.75,4356624.5 681506.56,4356718.5 681477,4356738.5 681461.69,4356809 681455.13,4356887.5 681452.94,4356933 681452.5,4356957 681452.06,4356979 681450.75,4356980 681446.44,4357006.5 681421.13,4357003.5 681396.06,4357056.5 681381.81,4357071 681368.94,4357081 681343.38,4357091 681316.69,4357094 681292.56,4357096 681270.94,4357099.5 681257,4357100.5 681243,4357101.5 681192.25,4357105.5 681156.63,4357110 681143.94,4357112 681131.19,4357114.5 681115.88,4357119.5 681061.25,4357124.5 681031.75,4357142 681000.94,4357164 680976.5,4357181 680937.06,4357187 680941.5,4357220 680946.25,4357239 680948.06,4357273 680960.31,4357296.5 680988.88,4357328.5 681018.81,4357352 681033.5,4357379 681033.94,4357422 681031.69,4357472.5 681026.75,4357532 681010.75,4357571 681057.38,4357584.5 681068.5,4357601.5 681075.56,4357629.5 681078.88,4357656 681075.63,4357690.5 681070,4357720.5 681061.63,4357760 681054.38,4357805.5 681058.94,4357832 681064.75,4357858.5 681071.5,4357903 681060.63,4357942.5 681041.06,4357968.5 681020.19,4358001 681000.44,4358036 680977.06,4358065 680946.06,4358095 680911.56,4358108 680882.38,4358110 680848.19,4358109.5 680825.31,4358110 680797.44,4358111 680765.88,4358105 680740.63,4358098.5 680713,4358084 680692.88,4358070.5 680680.94,4358135.5 680699.13,4358147 680731.69,4358166.5 680756.63,4358188.5 680785.44,4358207 680819.63,4358209 680851.5,4358200.5 680885.75,4358197.5 680914.81,4358204.5 680947.63,4358210 680987.13,4358201 681016.63,4358185 681039.75,4358166.5 681073.25,4358141.5 681100.38,4358115.5 681121.06,4358094.5 681140.81,4358056.5 681155.38,4358022.5 681172.75,4357978.5 681184.63,4357955 681199.13,4357924.5 681209.88,4357893 681215.75,4357851.5 681215.25,4357814.5 681216.25,4357763 681216.94,4357727.5 681216.13,4357704.5 681215.56,4357667.5 681217.19,4357647.5 681216.63,4357610.5 681215.88,4357585.5 681219,4357556 681213.31,4357520.5 681205.25,4357481 681194.19,4357462 681178.13,4357438.5 681163.38,4357417 681135.38,4357358 681107.13,4357300.5 681091,4357292.5 681045.81,4357267.5 681032.63,4357230.5 681040.63,4357208 681055,4357186.5 681079.38,4357173 681102.31,4357164.5 681146.94,4357151.5 681176.31,4357141 681205.56,4357136 681234.81,4357133 681261.5,4357131 681288.06,4357131.5 681318.44,4357134.5 681354,4357133 681385.81,4357127 681417.69,4357116.5 681480.5,4357082 681517.94,4357046 681527.25,4357023.5 681545.63,4356990.5 681560.31,4356954 681576.06,4356925.5 681587.75,4356910.5 681606.13,4356880.5 681626.88,4356854 681651.5,4356828 681676.13,4356800.5 681700.81,4356769.5 681720.38,4356740.5 681742.56,4356709.5 681759.56,4356683 681782.44,4356678.5 681802.63,4356685 681815.38,4356681.5 681816.88,4356669 681810.94,4356647 681806.31,4356624.5 681809.5,4356592.5 681821.38,4356566.5 681839.63,4356540 681860.56,4356507.5 681885.44,4356467.5 681904.75,4356454 681922.5,4356451.5 681943.94,4356457 681965.38,4356465 681988,4356474.5 682011.88,4356486.5 682037,4356497 682068.13,4356525.5 682090.56,4356547.5 682105.44,4356563 682121.56,4356582.5 682131.25,4356606.5 682135.63,4356642 682154.13,4356668 682179.13,4356687.5 682190.31,4356692.5 682208,4356700.5 682234.56,4356703.5 682262.31,4356712 682279.88,4356719.5 682292.44,4356727.5 682304.44,4356761 682298.63,4356798.5 682293.31,4356812.5 682289.25,4356826.5 682286.31,4356845.5 682288.5,4356865.5 682304,4356915.5 682317.13,4356956.5 682319.06,4356988 682299.31,4357027 682279.81,4357049.5 682261.81,4357063 682242,4357105.5 682241.19,4357145 682242,4357170.5 682245.25,4357198.5 682247.25,4357225 682243,4357249 682228.5,4357276.5 682212.81,4357300.5 682221.44,4357313 682242.75,4357326.5 682263,4357330.5 682280.44,4357343.5 682301.5,4357369.5 682327.88,4357381 682355.94,4357373 682367.88,4357346.5 682367.19,4357317.5 682370.06,4357299.5 682380.44,4357287 682396.13,4357264.5 682415.69,4357234.5 682431.06,4357227 682457.44,4357239 682466.13,4357251 682469.38,4357276 682467.5,4357308 682479.88,4357326 682494.63,4357347.5 682501.75,4357372 682497.38,4357403.5 682486.69,4357431 682473.56,4357453.5 682451.31,4357490 682429.19,4357519 682409.75,4357542.5 682385.25,4357563.5 682358.06,4357592 682335.81,4357627.5 682324.63,4357679 682321.38,4357717 682318.13,4357753.5 682322.56,4357787 682343.63,4357782.5 682358.5,4357766 682371.56,4357743.5 682386.19,4357710.5 682398.31,4357674 682410.38,4357639 682429.69,4357624 682450.06,4357618 682467.94,4357612 682497.25,4357604 682516.5,4357593 682537.25,4357568 682554.13,4357549 682590,4357529.5 682633.19,4357524 682656.88,4357545 682662.63,4357576.5 682662,4357608.5 682653.56,4357651 682657.81,4357694.5 682667.19,4357732.5 682666.5,4357768 682656.88,4357806 682650.06,4357817 682641.19,4357831 682674.69,4357868.5 682687.56,4357858.5 682698.06,4357840.5 682702,4357833.5 682725.69,4357789.5 682750.94,4357729 682776.38,4357661 682796.38,4357609.5 682810.5,4357598.5 682825.88,4357591 682850.13,4357584 682870.44,4357580.5 682888.19,4357581 682908.25,4357593 682939.69,4357606 682972.5,4357614.5 683000.31,4357617.5 683026.94,4357619 683058.69,4357616 683090.5,4357610.5 683119.63,4357609.5 683149.75,4357626.5 683168.38,4357647.5 683178,4357673 683184.94,4357708.5 683183,4357744 683174.81,4357773 683161.75,4357791.5 683151.38,4357803 683133.31,4357819 683118,4357826.5 683092.38,4357841 683071.81,4357854.5 683052.38,4357876 683049.44,4357897.5 683053.13,4357902.5 683068.19,4357910.5 683089.69,4357913 683104.94,4357911 683122.75,4357909 683144.25,4357909 683163.13,4357916 683190.69,4357934 683205.63,4357948.5 683216.38,4357981.5 683198.19,4358005.5 683177.88,4358006 683164,4358002 683151.44,4357997 683141.38,4357991.5 683112.5,4357977 683100.88,4357988.5 683095.38,4358011 683092.31,4358037.5 683082.94,4358062.5 683068.75,4358077.5 683049.44,4358091 683023.69,4358111 683020.63,4358139 683076.06,4358156.5 683086.25,4358154 683107.88,4358150.5 683128.19,4358148.5 683151,4358149 683162.44,4358148 683177.63,4358148 683187.75,4358151 683206.44,4358168 683222.63,4358184.5 683249,4358195.5 683265.81,4358178 683270.13,4358151.5 683280.56,4358136.5 683288.25,4358134 683304.69,4358135.5 683319.81,4358141 683334.88,4358146 683351.19,4358155.5 683368.69,4358168.5 683392.5,4358183 683416.56,4358184.5 683430.94,4358163.5 683428.69,4358149.5 683423.88,4358135.5 683417.75,4358123.5 683402.88,4358107 683399.19,4358099.5 683394.44,4358082.5 683388.5,4358065 683388.94,4358041 683388.13,4358015.5 683388.69,4357989 683403.25,4357957.5 683420,4357941 683431.56,4357934 683440.44,4357935.5 683460.69,4357935.5 683478.63,4357927 683499.25,4357910 683514.81,4357891 683532.94,4357872.5 683554.88,4357854 683583.13,4357835.5 683604.94,4357822 683642.19,4357794.5 683675.56,4357774 683693.56,4357761.5 683725.5,4357748 683740.31,4357768.5 683753.25,4357757.5 683764.81,4357747.5 683781.56,4357735 683802,4357725.5 683827.5,4357718.5 683854.19,4357716.5 683878.19,4357719.5 683904.69,4357726 683923.81,4357721.5 683937.94,4357711.5 683949.75,4357693 683962.81,4357673 683975.69,4357661.5 683992.25,4357658 684007.44,4357658.5 684027.69,4357660 684060.38,4357673.5 684080.38,4357688 684104.13,4357708.5 684127.94,4357720.5 684142.81,4357737 684156.31,4357761.5 684154.63,4357784.5 684145,4357821 684141.88,4357854 684147.69,4357879.5 684160.13,4357892 684176.25,4357910.5 684184.63,4357936 684182.88,4357961 684195.31,4357973 684209.25,4357974.5 684218.5,4357955.5 684222.88,4357926.5 684223.19,4357907.5 684221.13,4357884.5 684216.5,4357860.5 684218.25,4357835 684223.75,4357815 684234.13,4357801 684259.75,4357787.5 684279,4357778 684297.31,4357748 684314,4357735.5 684333.38,4357704 684326.13,4357699.5 684283.88,4357663 684308.31,4357641 684323.81,4357625 684335.69,4357599.5 684342.88,4357553 684342.56,4357507.5 684334.56,4357463 684326.63,4357420 684308.44,4357379.5 684283.81,4357348.5 684253.13,4357301 684221.13,4357260 684206.75,4357220.5 684191.44,4357162 684169.38,4357130 684143.5,4357094.5 684124.13,4357055 684106.06,4357007.5 684102.81,4356981 684114.69,4356954.5 684118.75,4356936.5 684108.19,4356888 684096.13,4356873.5 684074.94,4356858 684041,4356848.5 684018.38,4356844 683985.56,4356842.5 683957.75,4356843 683941.19,4356849 683917,4356857.5 683896.5,4356873.5 683873.31,4356894.5 683859,4356914.5 683845.81,4356944.5 683831.19,4356979.5 683817.88,4357013.5 683807.25,4357039.5 683798.13,4357053.5 683781.81,4357048 683768,4357042.5 683746.63,4357039.5 683730.13,4357043 683719.69,4357060.5 683707.69,4357090.5 683698.44,4357112 683678.25,4357109 683666.94,4357106.5 683632.94,4357102 683611,4357125.5 683592.56,4357161.5 683574.06,4357204.5 683542.44,4357206 683509.81,4357194 683471,4357174.5 683445.88,4357169 683400.5,4357161.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.23">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Buseo</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">676005.38,4383746 675986.5,4383751 675948.75,4383741.5 675913.63,4383726.5 675888,4383695 675924.56,4383788 675938.31,4383806 675954.06,4383838 675959.13,4383844.5 675984.44,4383863.5 675999.63,4383874 676023.63,4383904.5 676046.25,4383940.5 676074.13,4383968.5 676101.94,4383995.5 676137.25,4384039 676158.69,4384070 676191.63,4384093 676210.69,4384099.5 676222.25,4384087 676231.13,4384087 676246.38,4384091 676256.63,4384084.5 676271.94,4384081 676279.5,4384086 676293.31,4384114 676304.5,4384156.5 676309.38,4384188 676314.19,4384225 676319.06,4384254.5 676326.5,4384282.5 676337.81,4384299 676343,4384290.5 676350.63,4384286.5 676357,4384289 676362.06,4384297 676360.63,4384313.5 676361.75,4384335 676353.88,4384370.5 676380.63,4384371 676402.25,4384368.5 676422.69,4384365 676446.88,4384361 676466,4384362.5 676482.5,4384370.5 676490,4384385.5 676496.19,4384413.5 676496,4384438 676494.5,4384466 676486.69,4384489 676489.94,4384504.5 676490.38,4384506.5 676490.25,4384525.5 676482.44,4384551 676472,4384583 676473.13,4384600.5 676470.38,4384631.5 676462.5,4384663 676449.5,4384703.5 676436.56,4384726.5 676408.38,4384754.5 676391.69,4384771 676375,4384784.5 676343,4384815 676342.88,4384829 676341.38,4384858.5 676339.88,4384889 676337.19,4384911.5 676325.44,4384945 676350.81,4384960 676363.5,4384966.5 676373.63,4384977 676413.44,4385014 676439.31,4385005.5 676484.94,4385019 676516.69,4385031.5 676544.56,4385042.5 676568.69,4385055 676581.38,4385061 676585.25,4385071.5 676584.13,4385096.5 676584.25,4385115.5 676640.06,4385133 676685.69,4385146.5 676722.38,4385155 676742.63,4385153.5 676787.06,4385181.5 676827.75,4385205 676854.38,4385220 676872.13,4385225 676879.56,4385203.5 676901.06,4385203.5 676921.31,4385205.5 676944.06,4385199 676973.88,4385217.5 677024.88,4385128.5 677042.56,4385097.5 677032.69,4385058 677007.38,4385034 676982.06,4385013 676952.94,4384991.5 676931.44,4384974.5 676906.13,4384953 676898.63,4384932.5 676919.38,4384881.5 676941.25,4384852.5 676956.75,4384822 676967.13,4384790.5 676975.06,4384752 676975.31,4384720.5 676974.31,4384684.5 676973.75,4384655 676973.38,4384636 676938.88,4384650 676935.06,4384651.5 676913.38,4384660 676896.75,4384666 676870.06,4384658.5 676832.19,4384616 676796.88,4384565 676783.19,4384524 676783.5,4384482 676789,4384425 676780.44,4384372.5 676734.88,4384335 676710.88,4384307 676688.25,4384273.5 676669.38,4384243 676668.25,4384221.5 676683.63,4384207.5 676700.31,4384184.5 676687.75,4384167 676663.63,4384159 676644.69,4384133.5 676629.44,4384128 676602.81,4384111.5 676578.81,4384087 676557.25,4384069 676539.5,4384065 676517.75,4384074 676499.88,4384077.5 676477,4384078.5 676449.19,4384049 676423.81,4384035 676400.88,4384038.5 676375.44,4384032 676343.75,4384010 676333.75,4383986 676318.94,4383926 676298.69,4383908 676275.75,4383906.5 676241.5,4383892 676208.56,4383864 676179.5,4383833 676151.75,4383801 676125.19,4383770.5 676109.81,4383748 676089.81,4383727.5 676066,4383706 676043.5,4383680.5 676029.75,4383669.5 676009.88,4383635 675990.69,4383641 675995.81,4383666.5 676003.13,4383702 676004.31,4383713 676007.94,4383736 676005.38,4383746</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.24">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament de Beniarrés</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">725209.06,4296287.5 725184.69,4296351.5 725166.38,4296400 725168.75,4296450.5 725160.69,4296466 725156.63,4296548 725179.5,4296540 725223.75,4296520.5 725277.19,4296486 725329.69,4296474.5 725360.88,4296516.5 725423.19,4296596.5 725402.88,4296654.5 725398,4296701 725412.75,4296759.5 725450.19,4296818 725495.88,4296876.5 725540.44,4296921 725592.25,4296973 725637.88,4297013 725680.31,4297045 725768.38,4297136 725787.06,4297140 725803.75,4297175 725817.38,4297221.5 725810.38,4297261.5 725769.25,4297277.5 725742.56,4297302 725849.69,4297473 725855.63,4297501 725897.5,4297542.5 725945.06,4297566 726009.06,4297576 726054.44,4297580 726108,4297574.5 726151.25,4297553.5 726201.63,4297535 726174.31,4297507 726211.63,4297487 726251,4297483 726308.06,4297483 726366.13,4297487 726421.13,4297483.5 726473.94,4297446 726489.69,4297519.5 726491.94,4297609 726545.88,4297609 726644.44,4297621 726637.25,4297659.5 726604.06,4297670 726556.38,4297684.5 726512.81,4297678.5 726487.88,4297670 726441.5,4297649 726361.38,4297701 726323.31,4297720 726279.06,4297737.5 726244.06,4297745 726246.25,4297777 726232.13,4297831.5 726269.25,4297790 726305.56,4297789 726334.69,4297818 726385.5,4297800 726442.5,4297789.5 726492.25,4297780 726589.69,4297742.5 726578.38,4297781 726551.5,4297818.5 726524.63,4297862 726522.63,4297900.5 726546.56,4297936.5 726576.75,4297991.5 726593.44,4298038 726694,4298028 726762.31,4298021.5 726824.31,4298035 726867.56,4298061.5 726907.69,4298090.5 726932.25,4298124 726946.5,4298157 727086.13,4298157 727113.56,4298222.5 727110.63,4298300.5 727153.31,4298302.5 727209.13,4298314.5 727255.5,4298333.5 727293.06,4298294.5 727352.81,4298323.5 727401.69,4298297 727418.5,4298261 727341.19,4298219 727386.13,4298166.5 727427.44,4298169 727474.94,4298187 727540.94,4298211.5 727599.63,4298252 727658.25,4298294 727705.56,4298329.5 727752.94,4298358 727803.56,4298369.5 727849.06,4298372 727837.13,4298445.5 727821.31,4298487.5 727764.5,4298477 727730.25,4298489 727683.5,4298515.5 727642.06,4298523.5 727608.75,4298545 727610.63,4298574 727631.13,4298601 727580,4298651.5 727588.75,4298729 727649.75,4298738.5 727722.63,4298679.5 727753.81,4298659 727754.56,4298690 727781.5,4298691 727784.81,4298657 727788.38,4298597 727827.69,4298598.5 727867.94,4298611 727897,4298599 727938.63,4298570 727987.25,4298572.5 728047.19,4298577.5 728108,4298602.5 728199.75,4298650 728129.38,4298725.5 728142.38,4298755.5 728176.38,4298733 728218.5,4298723 728256.5,4298711.5 728305.75,4298700.5 728375.25,4298717.5 728473.25,4298757.5 728505.38,4298713.5 728527.56,4298751.5 728580.75,4298761.5 728629.69,4298784.5 728656.94,4298830 728668.88,4298865.5 728653.19,4298899.5 728696.63,4298961.5 728741.13,4299025 728774.5,4299067.5 728807,4299095.5 728851.88,4299121.5 728884.13,4299172 728901.13,4299220.5 728921.19,4299266.5 728941.75,4299361 728972.56,4299356 729009.44,4299354.5 729043.25,4299356 729073.81,4299374.5 729053.13,4299395 729071.31,4299417.5 729047.5,4299448 729027.63,4299490 729005.75,4299526.5 729008.5,4299560.5 728984.75,4299586 728994.75,4299611.5 729018.19,4299622 729029.75,4299588 729058.44,4299591.5 729075.25,4299541.5 729096.13,4299507 729116.88,4299476.5 729143.75,4299450 729186.88,4299440 729219.63,4299445.5 729242.94,4299466.5 729232.44,4299495 729225,4299522.5 729280.13,4299520 729313.13,4299518 729355.5,4299480.5 729424.13,4299479.5 729464.94,4299499 729510.63,4299540.5 729488.88,4299563 729491.56,4299604 729503.38,4299657.5 729491.69,4299702.5 729503.13,4299745 729549.44,4299748 729574.19,4299754 729587.56,4299755 729622.63,4299752 729668.94,4299763 729710.19,4299773.5 729729.63,4299781.5 729741.81,4299789.5 729755.13,4299793 729766.38,4299792 729788.56,4299719.5 729830.5,4299726 729868.25,4299636 729875.94,4299579 729878.56,4299517.5 729865.75,4299466 729839.44,4299431 729873.75,4299380 729910.38,4299402 729929.75,4299416.5 729945.31,4299394 729936.38,4299366.5 729913.13,4299328 729882.63,4299309.5 729845.88,4299294 729835,4299254 729843.69,4299198.5 729869.75,4299153.5 729894.69,4299112 729856.94,4299096 729876.13,4299017.5 729894.5,4298919.5 729925.44,4298896 729931.44,4298804 729926.88,4298745.5 729938.75,4298684 729979.25,4298623 729973.5,4298573 729969.81,4298540 729976.38,4298493 729967.63,4298446 729941.56,4298490.5 729939.63,4298503.5 729924.13,4298605 729888.75,4298663 729873.06,4298692 729860.56,4298718.5 729843.88,4298751 729826.13,4298786.5 729813.5,4298817 729816.19,4298858 729804.63,4298890 729776.75,4298916 729776.38,4298956 729745.38,4298980.5 729716.19,4299037.5 729691.63,4299035 729664.63,4299069 729588,4299052.5 729605.44,4298941 729655.56,4298945 729644.13,4298853.5 729732.94,4298779.5 729749.56,4298753 729750.94,4298717 729728.63,4298697.5 729694.5,4298732 729657.31,4298763.5 729628.94,4298732.5 729599.13,4298744.5 729564.31,4298741 729535.56,4298749 729561.19,4298850.5 729537.63,4298856.5 729527.94,4298904.5 729459.38,4298899 729436.19,4298858.5 729425.13,4298837 729410,4298808 729394.81,4298788.5 729375.94,4298729 729344.38,4298705 729322.56,4298633.5 729294.5,4298565.5 729243.94,4298497.5 729189.81,4298479.5 729147.63,4298498.5 729096.63,4298476.5 729060.13,4298440.5 728971.06,4298432 728918.88,4298425.5 728873.75,4298435.5 728840.56,4298473 728797.38,4298491 728746.38,4298468 728733.63,4298408.5 728729.94,4298365.5 728692.44,4298324 728680.94,4298239 728664,4298192.5 728634,4298146 728643.19,4298116.5 728632.25,4298079.5 728606,4298043.5 728634.38,4297970 728584,4297874.5 728580.5,4297933 728579.19,4297955.5 728568.56,4297992 728581.5,4298033 728585.25,4298069 728581.75,4298112 728564,4298152 728536,4298188.5 728503.94,4298218 728481.25,4298237 728381.94,4298230 728418.19,4298082 728396.88,4298056 728353.19,4298021 728317.63,4297987.5 728290.19,4297968 728266.75,4297954 728267.94,4297938 728301.25,4297882 728302.75,4297831 728307,4297796.5 728362,4297739 728404.63,4297694 728430.69,4297650 728439.19,4297615 728463.25,4297561.5 728467.75,4297505 728465,4297461.5 728405.38,4297439.5 728386,4297405.5 728363.56,4297369 728351.44,4297333 728339.81,4297287.5 728301.44,4297285.5 728244.31,4297271.5 728177.94,4297274.5 728141.75,4297315 728107.56,4297337 728084.81,4297383.5 728080.81,4297452 728099.56,4297497.5 728135.94,4297535 728181.69,4297567 728181.75,4297592 728142.31,4297594 728147.75,4297716.5 728134.38,4297762 728108.44,4297764.5 728088.63,4297726 728037.75,4297694 728037.88,4297766.5 728057.69,4297796.5 728085.75,4297845.5 728096.19,4297869 728082.88,4297937.5 727973.13,4297921.5 727947.5,4297918 727844.19,4297903 727818.19,4297879 727786,4297862.5 727755.94,4297852 727712.31,4297843 727684.38,4297853.5 727649.13,4297872 727600.31,4297861 727559.88,4297862 727520.5,4297864 727491.44,4297869.5 727458.25,4297893 727376.25,4297867.5 727255.88,4297847 727099.13,4297762 727055.38,4297699 727051.06,4297690 727030.38,4297646 726987.69,4297577 726951.25,4297517.5 726923.13,4297460.5 726875.25,4297385 726827.38,4297280.5 726798.13,4297210 726768.94,4297138.5 726708.81,4297138.5 726665.25,4297145 726611.25,4297133.5 726561.31,4297063 726524,4297064.5 726452.56,4297138 726527.38,4297201 726450.63,4297199.5 726398.75,4297197.5 726348.88,4297170.5 726351.63,4296981.5 726289.13,4296868.5 726283.69,4296747.5 726327.19,4296699.5 726388.25,4296635 726437.94,4296581 726451.75,4296570 726441.94,4296515.5 726478.06,4296433.5 726426.25,4296467 726370.38,4296508.5 726309.25,4296560.5 726265.81,4296610.5 726234.75,4296654 726210,4296715.5 726225.69,4296773.5 726240.31,4296834.5 726257,4296885.5 726261.31,4296948.5 726242.31,4297039.5 726182.25,4296994.5 726151,4296938 726118.75,4296889 726081.38,4296839.5 726027.44,4296787 725989.06,4296742 725871.19,4296687 725803.94,4296640 725786.31,4296627.5 725825.5,4296624.5 725870.88,4296622 725920.31,4296613.5 725924.25,4296584.5 725916.75,4296528 725870.25,4296511.5 725889.63,4296469.5 725934.75,4296425.5 725941.88,4296410 725934.56,4296390.5 725921.06,4296372 725888.5,4296354.5 725884.94,4296370.5 725846.06,4296421 725802.88,4296445 725746.13,4296445.5 725666.69,4296430.5 725617.06,4296411 725594.25,4296382 725578.5,4296334 725566.94,4296288.5 725554.25,4296232 725496.19,4296179.5 725437.13,4296125 725362.56,4296068 725301.5,4296018.5 725269.38,4295992 725240.44,4295988 725216.88,4296011 725194.44,4296054.5 725130.44,4296047.5 725042.75,4296041 724997.38,4296033 724966.25,4296000 724933,4295952.5 724934.94,4295938 724810.81,4295898 724744.69,4295986.5 724849,4296066.5 724921.5,4296124 724992.94,4296172 725027.13,4296202.5 725094.31,4296227 725161.38,4296240 725219.13,4296238 725209.06,4296287.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.25">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament de Guadalest</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">743666.81,4285449.5 743587,4285475 743503,4285510.5 743422.25,4285534 743342.38,4285565.5 743275.06,4285583.5 743208.75,4285605.5 743117.56,4285638 743061.5,4285674 743019.88,4285705.5 742976.44,4285707.5 742914.25,4285737 742896.31,4285784.5 742864,4285817.5 742835.13,4285812 742814.75,4285792 742811.5,4285789 742798.25,4285759 742768.44,4285735 742732.38,4285721.5 742709.5,4285742 742701.94,4285784 742704.88,4285813 742732.75,4285819.5 742743.63,4285888 742827.25,4285897.5 742874.75,4285911.5 742919.13,4285918 742961.63,4285911 743002.06,4285888.5 743024,4285858 743042.88,4285820.5 743063.63,4285804.5 743098.75,4285809.5 743126.56,4285825.5 743152.31,4285841 743179.19,4285840 743207.13,4285833 743236.25,4285808.5 743272.69,4285780 743303.75,4285767.5 743325.5,4285764.5 743349.25,4285769 743364.63,4285786.5 743364.38,4285820 743353.88,4285847.5 743366.06,4285881 743368.88,4285921 743340.81,4285939.5 743343.63,4285983 743347.44,4286027.5 743357.44,4286077 743353,4286119.5 743337.31,4286148.5 743327,4286161 743310.19,4286181.5 743270.63,4286216 743264.5,4286248 743263.13,4286255.5 743254.38,4286330 743286.31,4286342.5 743317.44,4286329 743338.38,4286294 743342.94,4286289 743362.88,4286266.5 743372.75,4286255 743396.75,4286219 743422.88,4286176 743436.75,4286116 743442.25,4286068.5 743456.13,4286012.5 743481.06,4285989 743487,4286024.5 743485.63,4286076 743512.5,4286083.5 743529.25,4286046.5 743541.94,4286006 743530.94,4285958.5 743542.63,4285911 743568.69,4285881 743575.19,4285839 743589.81,4285816 743610.44,4285822.5 743641.31,4285840.5 743654.69,4285854 743684.75,4285844 743699.56,4285792 743756.5,4285779 743779.56,4285736 743807.75,4285702 743858.81,4285787 743853.31,4285837.5 743898.75,4285844 743910.63,4285807 743920.94,4285775 743901.75,4285706.5 743925.88,4285659.5 743973.5,4285649.5 744030.38,4285644.5 744077.88,4285658.5 744110,4285641 744119.5,4285619.5 744203.88,4285673.5 744225.63,4285665.5 744219,4285585 744237.75,4285582 744255.19,4285579 744255.44,4285548 744229.81,4285513.5 744218.56,4285495 744232.19,4285471.5 744269.38,4285469.5 744339.06,4285564 744377.38,4285550 744374.38,4285537.5 744366.5,4285477.5 744368,4285412 744345.5,4285378 744313.63,4285350 744348.06,4285311 744392.94,4285251 744344.19,4285122.5 744316.75,4285058.5 744267.63,4285127 744202.5,4285133 744201.06,4285190 744153.25,4285221.5 744097.13,4285273 744034,4285272.5 744009.88,4285329 743959.19,4285333 743942.31,4285379.5 743884.25,4285397.5 743827.31,4285411.5 743746.5,4285436 743666.81,4285449.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.26">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament de Sella</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">738196.38,4269012.5 738173.44,4269019.5 738142.13,4269048.5 738127.88,4269058 738131.13,4269073.5 738157.25,4269085.5 738196.25,4269088.5 738224,4269088 738273.06,4269092.5 738260.75,4269119.5 738250.06,4269137 738224,4269160 738195.63,4269176.5 738175.13,4269186 738143.13,4269198.5 738114.94,4269211.5 738112,4269223 738116.25,4269244.5 738127.56,4269282.5 738139.25,4269309.5 738153.81,4269325.5 738180,4269334 738201.69,4269327 738220.88,4269320 738244.94,4269317 738261.13,4269323 738268.25,4269337 738269.69,4269367.5 738260.94,4269400 738227.19,4269426.5 738183.31,4269454 738163.81,4269471 738148.69,4269505.5 738128.5,4269541.5 738107.38,4269567 738083.94,4269589 738064.63,4269598.5 738040.56,4269601.5 738018,4269598 738004.56,4269585 737992.38,4269573 737983.06,4269550 737973.38,4269538.5 737955.88,4269534 737934.44,4269534.5 737920.63,4269533 737908.25,4269526 737896.5,4269500.5 737878.94,4269462 737835.5,4269405 737841.19,4269424 737852.38,4269463.5 737862.56,4269496.5 737871.56,4269528.5 737891.5,4269571 737903.31,4269594 737920.63,4269603.5 737944.38,4269610.5 737975.56,4269620.5 738009.81,4269651 738008.19,4269697.5 738048.38,4269666 738112.5,4269672 738144.19,4269669.5 738168.06,4269671.5 738188.69,4269659.5 738195.19,4269653.5 738192.06,4269636 738188.88,4269619.5 738183,4269605 738180.94,4269592.5 738187.88,4269576.5 738197.25,4269559 738212.75,4269549.5 738234.75,4269534 738264,4269527.5 738280.56,4269523 738308.38,4269521.5 738333.5,4269524.5 738354.06,4269514 738364.44,4269507 738377.56,4269492 738385.38,4269486 738393.31,4269475 738403.56,4269470.5 738413.25,4269482 738416.13,4269508.5 738416.88,4269521.5 738412.63,4269536.5 738407.13,4269549 738390.19,4269563.5 738379.88,4269569.5 738379.56,4269578 738389.25,4269591 738408,4269594 738415.75,4269590.5 738430,4269580 738449,4269576.5 738452.44,4269587 738462.06,4269600 738476.88,4269610.5 738492.94,4269620 738511.69,4269624.5 738534.06,4269634 738554.94,4269650 738559.88,4269654 738561.75,4269671.5 738554.88,4269689 738547.75,4269710 738536.88,4269732.5 738520.75,4269761 738502,4269790.5 738482.5,4269809 738446.69,4269821.5 738398.31,4269833.5 738321.31,4269866.5 738292.5,4269938.5 738283.88,4269972.5 738274,4270006 738258.88,4270043.5 738240.31,4270073 738208.19,4270093.5 738179.75,4270116.5 738198.75,4270151 738239.19,4270146 738278.75,4270129.5 738295.88,4270107.5 738304.69,4270067.5 738301.81,4270039.5 738308.5,4270027.5 738338.69,4270029.5 738364.56,4270047 738415,4270043.5 738411,4270090 738478.75,4270098.5 738495.63,4270082.5 738503,4270048.5 738505,4270025 738518.63,4270033 738533.13,4270051 738543.69,4270075 738545.25,4270104 738527.56,4270145 738502.38,4270183.5 738459.25,4270233.5 738445.44,4270271 738441.38,4270318.5 738424.63,4270368.5 738387.88,4270414 738336.75,4270476.5 738306.69,4270550 738275.69,4270613 738247.5,4270628.5 738192.81,4270644.5 738141.75,4270668 738127.19,4270688.5 738131.88,4270699 738160,4270687.5 738190.25,4270684.5 738215.75,4270675 738244,4270657.5 738255.88,4270681.5 738265.06,4270707 738276.25,4270712.5 738290.5,4270700.5 738301.13,4270683 738309.75,4270650.5 738317.13,4270617 738354.44,4270591.5 738408.56,4270553 738445.56,4270499 738483.06,4270468.5 738523.44,4270427 738550.25,4270377.5 738607,4270296.5 738639.63,4270261 738678.75,4270220.5 738694.75,4270192 738721.19,4270153 738752.63,4270116 738761.06,4270088.5 738749.81,4270007.5 738743.25,4269978.5 738730.94,4269969 738704.25,4269976 738723.44,4269928.5 738726.81,4269902.5 738711.94,4269895.5 738692.88,4269901.5 738678.25,4269924.5 738654.13,4269930 738647,4269917.5 738649.19,4269888.5 738700.25,4269858 738699.5,4269845.5 738705.44,4269819 738717.44,4269800.5 738747.13,4269781.5 738781.44,4269775 738814.19,4269777.5 738835.56,4269779.5 738853.63,4269767.5 738862.75,4269760.5 738896.13,4269744 738927.5,4269749 738955.19,4269751 738974.13,4269750.5 738992.44,4269732 739008.19,4269715 739071.88,4269734 739055.5,4269696.5 739107.5,4269689.5 739114.88,4269658.5 739177.88,4269662 739181.13,4269640.5 739200.13,4269640 739213.75,4269610 739230.25,4269571.5 739256.25,4269551 739265.75,4269531 739267.31,4269523.5 739242.25,4269519 739224.13,4269531 739198.25,4269550 739180.38,4269554.5 739153.5,4269566.5 739122.75,4269580.5 739058.75,4269606 739031.31,4269560.5 739053.31,4269545 739083.75,4269541 739094.13,4269532.5 739093.44,4269516 739094.13,4269497.5 739061.13,4269502.5 739036.13,4269495.5 739020.13,4269483.5 739008.25,4269464 738992.75,4269438 738959.75,4269407 738933.25,4269407 738930.13,4269388 738924.56,4269367.5 738915.44,4269339.5 738894,4269303.5 738868.19,4269248.5 738807.38,4269184.5 738775.75,4269151.5 738741.38,4269122.5 738708.56,4269087.5 738675.75,4269053.5 738643.75,4269029.5 738621.63,4269012.5 738606,4268990.5 738605.19,4268978 738616.88,4268969.5 738629.38,4268972.5 738637.13,4268966.5 738628.94,4268948.5 738612.25,4268921.5 738582.31,4268876 738563.13,4268844 738536.44,4268800.5 738523.69,4268784.5 738504.56,4268754.5 738480.38,4268725 738458.06,4268714 738418.63,4268722.5 738385.13,4268743 738346.25,4268772 738331.81,4268786.5 738316.06,4268805 738298.56,4268836 738291.63,4268853 738274.38,4268876.5 738256.06,4268895 738240.75,4268900.5 738221.88,4268898.5 738208.5,4268884.5 738186.06,4268876 738164.88,4268870 738137.25,4268865.5 738120.75,4268867.5 738120.81,4268877.5 738120.81,4268901.5 738148.81,4268931.5 738166.75,4268958.5 738187.94,4268967 738212.75,4268978 738239.25,4268979 738252.75,4268989.5 738251.19,4268998 738242.19,4269003 738223.13,4269007.5 738196.38,4269012.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.27">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament d'Ulldecona</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">773164.56,4507460.5 773178.75,4507498.5 773190.75,4507587.5 773187.63,4507686.5 773175.31,4507750 773162.06,4507796 773147,4507855 773129.38,4507888 773120.94,4507939.5 773120.88,4508006.5 773115.63,4508057 773113.06,4508114 773120,4508168 773129.75,4508210 773131.5,4508248.5 773122.94,4508286.5 773104.38,4508318.5 773074.94,4508374.5 773040.38,4508446 772997,4508509.5 772964.31,4508552 772919.38,4508591.5 772868.88,4508637 772803.13,4508678.5 772747.5,4508706 772697.75,4508739 772658.75,4508766.5 772627.5,4508786.5 772607.44,4508809 772577.38,4508859 772549.44,4508908 772521.06,4508979.5 772458,4509142.5 772417.13,4509242 772396.94,4509302 772371.69,4509360 772352.5,4509400 772349.25,4509406.5 772312.38,4509452.5 772290.06,4509497 772268.44,4509547 772265.75,4509591.5 772270.69,4509629 772287,4509666 772317.63,4509706 772367.75,4509748.5 772429.38,4509789.5 772476.56,4509828.5 772516.94,4509860.5 772542.5,4509849 772502.31,4509812.5 772470.38,4509777.5 772436.25,4509743 772416.94,4509716.5 772414.38,4509713 772397.31,4509687 772387,4509652.5 772383,4509617 772392.75,4509558 772415.81,4509501.5 772426.63,4509481.5 772441.38,4509454.5 772474.75,4509416 772522,4509386 772585.69,4509357.5 772616.75,4509340 772646.31,4509312 772669.19,4509292.5 772683,4509252 772707.38,4509179 772738.25,4509083.5 772766.19,4509001.5 772785.94,4508951 772811.13,4508896.5 772843.44,4508843.5 772886.19,4508806 772925.44,4508775 772966.44,4508749 773001.19,4508723 773057.56,4508699.5 773088.38,4508670.5 773131.63,4508624.5 773170.81,4508578.5 773214.31,4508529.5 773244.5,4508477.5 773275.63,4508410 773299.38,4508362.5 773323.63,4508306.5 773328.63,4508259 773322.56,4508191.5 773316.25,4508127.5 773310.31,4508057 773302.63,4507998.5 773300.69,4507930 773310.81,4507835.5 773330.94,4507778.5 773356.38,4507720 773389.5,4507654 773416.5,4507604 773448.75,4507552 773478.38,4507509.5 773510.38,4507478 773557.75,4507465.5 773566.63,4507463.5 773597.75,4507455.5 773626,4507453 773602.44,4507430 773580.88,4507411 773556.56,4507402.5 773500.69,4507402 773435.13,4507407 773353,4507412.5 773343.81,4507376.5 773331.75,4507338.5 773306.5,4507311 773284.56,4507281.5 773262.5,4507221 773245.5,4507179 773235.19,4507210 773217.75,4507240 773204.13,4507276.5 773168.81,4507294 773134.5,4507296 773100.63,4507292 773070.5,4507276.5 773031.38,4507256.5 772983.94,4507237 772934,4507224.5 772864,4507218 772803.06,4507215 772734.63,4507216 772644.5,4507216.5 772599.63,4507238.5 772551.56,4507261.5 772511.38,4507274.5 772475.75,4507281.5 772445.88,4507279.5 772398.88,4507269.5 772342.94,4507252.5 772291.44,4507231.5 772217.5,4507205.5 772164.06,4507187.5 772093.31,4507167.5 772008.5,4507157 771944.5,4507159 771934.13,4507167 771919.5,4507178.5 771898.75,4507209 771924.31,4507214 771981,4507230 772023.13,4507246.5 772080.5,4507251 772131.88,4507269 772186.06,4507291 772243.31,4507305 772314.75,4507338.5 772393.88,4507364.5 772477.56,4507367.5 772534.88,4507346.5 772576.56,4507341.5 772649.88,4507362 772729.56,4507362.5 772791.38,4507367.5 772849.13,4507371.5 772917.38,4507372.5 772969.19,4507372.5 773018.94,4507388 773085.81,4507395.5 773123.13,4507411.5 773153,4507430 773164.56,4507460.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.28">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embassament de Bellús</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">720069.18,4310807.42 720069.19,4310807.42 720049.88,4310781.12 720035.33,4310769.56 720003.25,4310753.8 719968.89,4310719.37 719943.14,4310675.89 719927.12,4310650.34 719921.54,4310616.71 719939.25,4310580.93 719975.31,4310554.03 719982.37,4310533.77 719985.28,4310495.72 719973.9,4310470.3 719969.72,4310453.45 719976.96,4310425.67 719998.83,4310407.67 720036.02,4310373.36 720075.43,4310359.57 720112.95,4310346.66 720127.13,4310337.75 720159.27,4310318.18 720196.12,4310295.95 720225.55,4310273.52 720259.87,4310241.92 720280.11,4310215.51 720293.93,4310186.13 720310.08,4310173.56 720341.26,4310154.89 720371.9,4310155.74 720410.54,4310169.82 720442.91,4310175.37 720467.18,4310171.39 720490.1,4310148.77 720519.35,4310132.84 720567.6,4310101.63 720589.44,4310084.56 720594.63,4310066.07 720601.59,4310050.99 720628.46,4310025.57 720665.74,4310017.88 720676.88,4310009.46 720701.57,4309983.97 720710.76,4309966.78 720726.2,4309960.67 720746.05,4309952.49 720760.07,4309953.81 720776.46,4309950.64 720789.77,4309941.22 720796.7,4309934.26 720806.17,4309921.89 720816.7,4309911.15 720824.64,4309899.05 720826.23,4309883.4 720822.45,4309867.46 720818.72,4309849.42 720810.84,4309829.15 720810.16,4309815.41 720810.8,4309792.21 720818.11,4309780.95 720842.83,4309766.46 720855.55,4309759.21 720870.52,4309741.64 720873.83,4309720.84 720863.52,4309687.5 720854.24,4309671.36 720845.2,4309645.54 720846.04,4309633.08 720848.73,4309624.76 720865.51,4309607.74 720880.13,4309614.24 720886.9,4309618.41 720893.6,4309611.03 720904.51,4309595.9 720911.98,4309596.61 720927.3,4309602.53 720933.94,4309597.22 720936.12,4309572.29 720931.65,4309535.37 720944.99,4309497.46 720957.08,4309481.48 720991.56,4309455.63 721016.51,4309437.67 721050.28,4309395.49 721062.24,4309384.16 721069.28,4309382.03 721085.35,4309390.63 721109.98,4309384.32 721141.65,4309375.87 721148.92,4309365.58 721145.85,4309350.35 721148.59,4309335.27 721178.23,4309316.28 721239.44,4309292.33 721264.23,4309280.2 721273.73,4309273.47 721306.73,4309259.23 721344.48,4309241.63 721389.34,4309219.56 721419.95,4309205.12 721437.48,4309192.96 721458.81,4309179.57 721489.23,4309174.59 721515.7,4309185.8 721539.91,4309194.62 721554.94,4309198.53 721564.31,4309196.46 721563.34,4309189.44 721560.11,4309180.04 721551.12,4309168.14 721546.91,4309141.24 721558.46,4309123.51 721592.09,4309107.55 721614.68,4309090.71 721639.94,4309061.71 721654.3,4309047.55 721660.47,4309034.91 721678.93,4309020.28 721690.33,4309007.79 721708.67,4308997.23 721730.43,4308989.68 721749.53,4308993.7 721770.55,4308991.37 721784.68,4308985.94 721815.59,4308983.88 721860.62,4308976.97 721876.86,4308979.16 721882.77,4308975.83 721887.26,4308971.1 721886.79,4308968.35 721878.6,4308967.57 721867.59,4308969.46 721856.47,4308975.72 721832.94,4308975.07 721817.02,4308976.82 721797.27,4308977.92 721780.83,4308978.56 721764.84,4308982.5 721748.93,4308983.71 721729.73,4308984.82 721713.76,4308988.21 721698.28,4308993.81 721686.1,4308998.4 721663.81,4309012.57 721644.34,4309029.62 721637.59,4309036.01 721630.87,4309041.31 721620.86,4309047.06 721607.51,4309054.36 721589.73,4309063.73 721575.84,4309071.02 721554.74,4309081.95 721530.89,4309092.79 721511.57,4309102.38 721500.8,4309109.54 721491.26,4309117.36 721482.98,4309124.59 721471.54,4309133.6 721462.65,4309140.19 721450.64,4309147.32 721434.82,4309157.46 721430.26,4309164.79 721417.49,4309176.87 721399.84,4309185.71 721350.04,4309210.45 721334.37,4309214.99 721320.09,4309214.6 721309.49,4309215.55 721287.23,4309233.59 721258.17,4309250.2 721181.63,4309281 721107.96,4309314.43 721068.78,4309337.61 721031.72,4309358.6 721010.74,4309375.44 721003.58,4309387.06 720970.89,4309399.85 720955.74,4309408.14 720942.32,4309421.46 720920.7,4309461.3 720861.75,4309547.4 720850.16,4309562.01 720850.67,4309565.76 720854.85,4309572.1 720860.86,4309579.73 720860.74,4309584.08 720858.06,4309590.85 720835.48,4309620.71 720832.49,4309625.71 720829.38,4309625.63 720825.1,4309623.02 720820.82,4309620.41 720815.07,4309625.86 720801.85,4309677.13 720794.95,4309701.83 720788.77,4309722.81 720784.17,4309732.01 720775.08,4309746.07 720766.62,4309759.53 720760.12,4309769.92 720743.59,4309794.35 720724.4,4309813.73 720700.28,4309831.73 720669.94,4309849.56 720645.99,4309861.34 720638.23,4309872.33 720631.54,4309889.56 720617.46,4309904.1 720599.27,4309932.22 720589.5,4309938.17 720577.42,4309942.32 720567.21,4309946.15 720559.24,4309950.42 720553.15,4309954.37 720548.51,4309959.85 720535.37,4309975.2 720529.63,4309979.9 720522.47,4309981.95 720501.93,4309986.93 720474.95,4309989.18 720444.72,4310000.32 720410.34,4309999.37 720378.95,4309998.51 720362.26,4310007.03 720329.66,4309995.65 720307.53,4309984.56 720274.56,4309986.64 720251.6,4310005.47 720213.16,4310043.33 720179.61,4310066.36 720138.18,4310104.14 720112.15,4310125.87 720070.3,4310124.72 720042.14,4310114.96 720028.9,4310107.11 720024.62,4310099.51 720031.05,4310083.22 720049.69,4310058.28 720111.05,4310003.09 720152.77,4309954.84 720208.11,4309900.98 720220.52,4309884.86 720237.54,4309864.37 720244.02,4309846.58 720250.66,4309822.82 720256.99,4309756.51 720260.47,4309684.75 720268.67,4309550.25 720273.65,4309532.42 720281.37,4309523.65 720293.37,4309522.49 720363.38,4309533.4 720378.5,4309533.61 720389.69,4309533.38 720409.76,4309539.26 720426.72,4309541.86 720441.13,4309540.66 720456.7,4309536.3 720475.52,4309529.36 720490.17,4309519.65 720510.81,4309504.78 720530.35,4309491.47 720545.94,4309486.05 720551.94,4309480.89 720561.02,4309460.37 720570.71,4309437.21 720587.87,4309413.72 720594.49,4309405.39 720594.6,4309401.13 720590.47,4309396.76 720582.1,4309391.2 720580.04,4309388.48 720579.11,4309383.66 720578.8,4309375.67 720581.62,4309369.89 720584.68,4309365.66 720587.46,4309362.7 720591.26,4309359.77 720593.66,4309358.15 720597.34,4309359.27 720603.35,4309361.45 720610.64,4309366.38 720616.89,4309371.95 720620.85,4309375.09 720623.53,4309375.84 720626.26,4309374.57 720627.69,4309371.57 720638.8,4309299.02 720639,4309291.95 720638.23,4309283.16 720637.36,4309278.07 720638.17,4309273.04 720640.39,4309266.01 720650.72,4309246.03 720657.72,4309236.77 720664.36,4309228.18 720669.41,4309216.5 720671.7,4309206.78 720671.54,4309188.21 720668.55,4309174.29 720662.15,4309149.48 720655.57,4309131.41 720653.31,4309127.63 720647.81,4309119.04 720635.2,4309105.44 720623.33,4309095.67 720607.93,4309091.19 720589.19,4309085.95 720578.63,4309077.56 720566.16,4309065.06 720559.53,4309060.83 720543.5,4309054.99 720528.82,4309049.18 720513.37,4309046.73 720501.41,4309040.33 720488.88,4309029.86 720474.97,4309020.7 720463.09,4309010.92 720456.61,4309001.29 720454.27,4308988.4 720455.17,4308980.32 720458.8,4308970.97 720466.64,4308955.66 720473.01,4308945.04 720477.25,4308937.73 720480.54,4308932.41 720484.2,4308927.05 720488.17,4308924.42 720490.97,4308922.16 720498.96,4308915.36 720517.27,4308902.21 720522.06,4308898.44 720529.24,4308892.78 720537.97,4308887.17 720554.61,4308878.26 720574.78,4308868.29 720584.29,4308863.09 720605.39,4308847.67 720617.44,4308835.52 720626.64,4308827.19 720632.61,4308823.06 720636.6,4308819.66 720635.91,4308816.52 720634.78,4308814.92 720634.49,4308811.41 720636.2,4308805.99 720641.46,4308799.11 720646.77,4308790.67 720653.55,4308784.84 720656.78,4308781.02 720658.9,4308774.83 720655.9,4308770.45 720651.36,4308765.25 720645.64,4308760.41 720639.85,4308758.3 720635.58,4308757.4 720629.66,4308759.97 720624.08,4308764.11 720617.92,4308775.26 720604.04,4308797.53 720593.03,4308814.79 720584.04,4308829.38 720575.96,4308839.31 720567.92,4308848.07 720555.56,4308857.49 720545.58,4308865.8 720532.35,4308871.3 720517.32,4308878.69 720491.24,4308890.47 720472.19,4308902.44 720454.62,4308916.79 720438.66,4308929.62 720429.85,4308937.97 720424.04,4308950.3 720420.6,4308963.02 720422.4,4308982.59 720424.48,4308992.02 720433.97,4309015.71 720444.4,4309033.96 720452.84,4309038.87 720461.99,4309046.94 720490.26,4309068.8 720510.14,4309083.4 720520.78,4309093.85 720538.33,4309108.39 720551.8,4309129.07 720563.83,4309145.8 720574.83,4309171.09 720577.87,4309202.41 720577.9,4309229.74 720574.81,4309256.99 720567.01,4309285.98 720556.49,4309299.75 720552.29,4309310.56 720556.04,4309316.13 720564.55,4309318.71 720573.67,4309327.55 720577.42,4309333.12 720570.08,4309344.63 720557.93,4309360.7 720550.57,4309372.99 720544.86,4309382.04 720533.82,4309386.43 720529.9,4309387.1 720515.3,4309378.89 720509.17,4309374.81 720502.93,4309374.64 720492.47,4309386.07 720479.65,4309398.21 720469.36,4309403.39 720456.8,4309406.17 720448.31,4309402.81 720438.32,4309397.07 720403.17,4309398.44 720402.91,4309407.8 720392.66,4309411.42 720353.48,4309417.37 720340.92,4309420.15 720311.61,4309435.74 720294.18,4309445.41 720286.3,4309448.32 720272.35,4309444.81 720249.93,4309437.16 720232.75,4309437.47 720219.34,4309442.56 720212.22,4309446.27 720202.58,4309456.16 720199.53,4309462.79 720198.08,4309473.19 720194.16,4309483.96 720188.81,4309490.03 720181.29,4309499.67 720173.8,4309508.27 720168.89,4309517.45 720166.49,4309529.3 720164.63,4309540.13 720157.94,4309557.56 720149.69,4309574.94 720134.12,4309613.37 720132.27,4309624.19 720130.42,4309635.02 720125.77,4309672.19 720116.97,4309700.75 720110.01,4309727.51 720101.22,4309745.93 720088.68,4309749.73 720067.97,4309749.16 720038.99,4309748.36 720003.39,4309761.9 719951.8,4309783.86 719899.82,4309835.76 719873.83,4309876.51 719856.06,4309919.57 719834.33,4309956.29 719798.33,4309984.33 719766.76,4310002.12 719729.2,4310011.45 719706.21,4310018.7 719668.54,4310032.17 719623.16,4310024.7 719598.77,4310007.44 719553.79,4309985.46 719496.91,4309944.5 719470.62,4309920.96 719454.8,4309893.57 719445.82,4309843.55 719447.25,4309791.76 719451.32,4309719.29 719448.86,4309682.45 719449.26,4309667.94 719439.82,4309634.5 719442.69,4309605.55 719441.65,4309568.2 719431.52,4309559.63 719415.13,4309552.95 719406.51,4309565.16 719389.43,4309583.35 719344.28,4309567.59 719305.62,4309541.64 719269.21,4309509.53 719242.98,4309483.92 719196.56,4309439.1 719162.39,4309400.83 719100.14,4309328.61 719077.83,4309311.41 719053.32,4309298.29 719031.4,4309266.58 718980.56,4309232 718921.37,4309199.27 718885.01,4309165.09 718831,4309095.17 718766.74,4309020.82 718717.01,4308976.7 718676.63,4308938.26 718634.12,4308901.84 718583.27,4308867.26 718565.26,4308843.95 718547.66,4308806.14 718535.29,4308803.73 718532.93,4308814.03 718504.23,4308802.87 718477.43,4308797.98 718474.85,4308816.57 718427.39,4308809.04 718369.93,4308788.8 718326.51,4308785.52 718295.05,4308799.17 718257.67,4308802.29 718216.37,4308797 718204.29,4308784.23 718198.54,4308767.48 718175.7,4308768.92 718145.86,4308799.2 718083,4308824.42 718024.91,4308826.97 717962.74,4308827.33 717921.5,4308819.97 717884.63,4308804.44 717829.3,4308782.17 717790.36,4308766.58 717755.67,4308746.97 717733.76,4308715.26 717705.85,4308675.09 717686.52,4308624.79 717652.79,4308519.11 717608.71,4308389.33 717586.67,4308323.61 717547.52,4308229.75 717544.16,4308216.2 717534.7,4308206.97 717529.47,4308206.83 717527.08,4308211.99 717530.37,4308228.52 717536.93,4308261.59 717540.54,4308293.08 717547.39,4308315.69 717562.07,4308378.21 717571.34,4308432.35 717570.41,4308466.2 717586,4308514.36 717594,4308559.23 717612.67,4308607.48 717625.32,4308650.94 717636.85,4308678.97 717645.31,4308706.92 717662.91,4308738.2 717679.15,4308763.28 717696.79,4308793.02 717721.47,4308822.98 717732.19,4308836.58 717739.23,4308849.34 717741.32,4308853.84 717787.6,4308891.34 717831.32,4308914.73 717884.14,4308929.49 717907.64,4308935.32 717934.34,4308932.36 717992.68,4308934.71 718008.93,4308935.15 718173.32,4308955.61 718176.16,4308955.69 718179.66,4308956.32 718183.16,4308957.06 718187.54,4308957.69 718192.42,4308958.56 718197.79,4308959.69 718203.42,4308960.69 718209.42,4308961.56 718215.54,4308962.56 718221.16,4308963.32 718226.79,4308964.06 718232.04,4308964.69 718237.42,4308964.82 718242.79,4308964.94 718248.04,4308964.94 718253.29,4308965.06 718258.29,4308965.82 718263.04,4308967.19 718267.29,4308969.32 718271.54,4308971.94 718275.66,4308974.19 718280.04,4308976.32 718284.92,4308977.69 718289.92,4308978.69 718295.16,4308979.44 718300.66,4308980.19 718305.92,4308981.06 718311.42,4308982.19 718317.04,4308983.44 718322.54,4308985.06 718328.16,4308986.44 718333.92,4308987.82 718339.54,4308988.82 718345.04,4308989.94 718350.54,4308991.06 718355.92,4308992.32 718361.16,4308993.82 718366.29,4308995.06 718370.79,4308996.82 718375.04,4308998.69 718378.66,4309000.94 718382.04,4309003.19 718385.04,4309005.32 718387.92,4309007.94 718390.29,4309009.94 718392.54,4309011.44 718394.79,4309012.32 718397.04,4309012.19 718400.04,4309012.19 718403.42,4309012.19 718405.42,4309012.32 718407.79,4309012.82 718410.54,4309014.32 718413.29,4309015.82 718416.16,4309017.56 718419.04,4309019.19 718422.16,4309021.06 718425.66,4309023.06 718429.16,4309024.82 718433.04,4309026.44 718436.92,4309027.69 718440.16,4309028.56 718442.66,4309029.06 718445.66,4309030.69 718449.54,4309031.44 718451.92,4309031.94 718454.42,4309032.32 718457.16,4309033.06 718460.04,4309034.06 718463.16,4309035.32 718466.54,4309036.94 718470.04,4309038.69 718473.66,4309040.44 718477.54,4309042.19 718481.16,4309044.06 718484.79,4309045.44 718488.66,4309046.56 718492.29,4309047.44 718496.04,4309048.19 718499.54,4309048.94 718503.04,4309049.94 718506.04,4309050.94 718508.92,4309052.19 718511.42,4309053.32 718513.66,4309054.44 718516.54,4309055.32 718518.16,4309055.82 718519.54,4309058.19 718521.29,4309060.44 718522.29,4309062.94 718523.04,4309065.69 718525.54,4309068.69 718528.29,4309071.06 718530.16,4309073.69 718531.42,4309075.44 718533.16,4309077.44 718535.42,4309079.82 718537.79,4309082.44 718540.54,4309085.19 718543.42,4309088.32 718546.54,4309091.32 718549.92,4309094.32 718553.42,4309097.44 718557.04,4309100.82 718560.54,4309104.19 718563.79,4309107.82 718566.66,4309111.82 718569.16,4309115.82 718571.54,4309119.82 718574.29,4309123.69 718576.79,4309127.69 718579.04,4309131.56 718581.16,4309135.56 718583.16,4309139.82 718585.42,4309143.82 718587.66,4309147.56 718590.16,4309151.06 718592.66,4309154.56 718595.29,4309157.94 718597.92,4309161.44 718600.66,4309165.06 718603.29,4309168.82 718605.79,4309172.94 718608.29,4309177.06 718610.92,4309181.19 718613.42,4309184.69 718615.92,4309188.19 718618.66,4309191.06 718621.16,4309194.06 718623.92,4309196.94 718626.66,4309199.69 718629.29,4309202.56 718632.04,4309205.19 718634.29,4309208.06 718636.16,4309210.82 718637.54,4309213.69 718638.04,4309216.32 718638.29,4309219.19 718638.29,4309222.06 718637.92,4309225.32 718637.29,4309228.44 718636.79,4309231.56 718636.04,4309234.82 718635.42,4309237.69 718634.92,4309240.32 718634.42,4309242.56 718634.29,4309244.69 718634.29,4309247.44 718635.04,4309249.82 718635.79,4309251.94 718637.29,4309254.56 718639.79,4309256.82 718641.29,4309258.32 718643.04,4309259.94 718644.79,4309261.82 718646.66,4309264.06 718648.79,4309266.44 718651.29,4309269.06 718654.04,4309271.19 718657.29,4309273.82 718660.66,4309276.32 718664.04,4309279.06 718667.54,4309281.69 718670.79,4309284.56 718674.29,4309287.44 718677.66,4309290.69 718680.66,4309294.19 718683.42,4309297.82 718686.29,4309301.32 718689.16,4309304.82 718692.16,4309307.94 718695.16,4309311.19 718698.42,4309313.94 718701.42,4309316.56 718704.54,4309319.32 718707.79,4309322.32 718711.04,4309325.69 718714.66,4309329.19 718718.29,4309333.19 718721.92,4309337.32 718725.79,4309341.44 718729.66,4309345.19 718733.66,4309348.94 718737.66,4309352.19 718741.54,4309355.44 718745.04,4309358.94 718748.54,4309362.32 718751.66,4309365.44 718754.66,4309368.32 718757.66,4309370.82 718760.42,4309373.06 718762.92,4309375.19 718765.42,4309377.06 718767.42,4309378.69 718769.79,4309380.19 718772.04,4309381.94 718774.29,4309384.06 718776.54,4309386.06 718778.66,4309388.32 718780.79,4309390.69 718782.42,4309393.56 718783.66,4309396.82 718784.92,4309400.56 718786.04,4309404.44 718787.16,4309408.19 718788.16,4309412.06 718789.42,4309416.06 718790.54,4309420.06 718791.66,4309424.32 718792.66,4309428.94 718793.66,4309433.69 718794.79,4309438.56 718795.92,4309443.06 718796.92,4309447.19 718798.16,4309451.32 718799.29,4309455.44 718800.42,4309459.56 718801.66,4309463.82 718802.92,4309467.56 718804.16,4309471.44 718805.29,4309474.94 718806.66,4309478.56 718808.16,4309482.19 718809.42,4309485.94 718810.66,4309489.44 718811.79,4309492.69 718812.42,4309496.19 718812.92,4309499.56 718813.42,4309503.06 718814.04,4309506.69 718814.79,4309510.19 718816.16,4309514.06 718817.66,4309517.69 718819.42,4309521.56 718821.54,4309525.19 718823.92,4309528.56 718826.04,4309531.82 718827.92,4309535.19 718829.79,4309538.44 718832.04,4309541.44 718834.54,4309544.06 718837.16,4309546.69 718839.29,4309549.19 718841.04,4309551.69 718842.54,4309554.94 718843.66,4309558.32 718844.92,4309561.56 718846.66,4309564.94 718848.54,4309568.32 718851.16,4309571.19 718853.54,4309574.06 718855.79,4309576.94 718857.79,4309580.19 718859.04,4309583.69 718859.92,4309587.56 718860.66,4309591.82 718861.92,4309596.44 718863.04,4309601.19 718864.29,4309606.06 718865.42,4309610.56 718866.42,4309614.94 718867.16,4309619.32 718868.04,4309623.69 718868.92,4309627.94 718870.04,4309631.94 718871.29,4309635.82 718872.79,4309639.56 718874.29,4309643.56 718875.79,4309647.56 718877.42,4309651.82 718879.29,4309656.32 718881.29,4309660.56 718883.42,4309664.69 718885.66,4309668.69 718887.66,4309672.82 718889.79,4309677.06 718891.79,4309681.94 718893.79,4309686.32 718895.54,4309690.94 718897.29,4309695.69 718898.66,4309700.82 718900.16,4309705.94 718901.54,4309711.06 718903.04,4309716.06 718904.92,4309720.94 718906.79,4309725.44 718908.92,4309729.82 718911.04,4309733.82 718913.04,4309738.06 718914.54,4309742.19 718916.04,4309746.69 718917.42,4309750.69 718918.54,4309754.44 718919.66,4309758.44 718920.79,4309762.19 718921.92,4309766.06 718923.29,4309770.32 718924.29,4309774.69 718925.54,4309779.32 718926.54,4309784.32 718927.29,4309789.19 718927.92,4309793.69 718927.92,4309798.32 718927.92,4309802.32 718927.79,4309805.82 718927.16,4309809.19 718926.16,4309812.32 718925.04,4309815.19 718923.66,4309817.94 718922.04,4309820.82 718920.29,4309823.56 718918.92,4309825.94 718917.66,4309828.44 718916.79,4309831.19 718916.54,4309833.82 718916.29,4309836.82 718916.66,4309840.19 718917.66,4309843.69 718919.16,4309846.94 718921.29,4309850.06 718923.66,4309853.06 718926.04,4309855.94 718928.54,4309858.69 718930.79,4309861.32 718932.92,4309864.69 718934.79,4309868.19 718936.54,4309871.82 718938.16,4309875.32 718939.42,4309878.82 718940.42,4309882.69 718941.16,4309886.56 718941.79,4309890.44 718942.66,4309894.44 718943.29,4309898.56 718943.66,4309903.06 718944.42,4309907.69 718945.04,4309912.32 718946.16,4309916.44 718947.16,4309920.44 718948.54,4309924.06 718949.79,4309927.69 718951.04,4309931.69 718952.16,4309935.82 718953.16,4309940.32 718954.04,4309944.94 718954.92,4309949.56 718956.16,4309954.44 718957.04,4309959.44 718957.92,4309963.94 718958.66,4309968.44 718959.29,4309973.19 718959.66,4309978.32 718960.16,4309982.82 718960.16,4309987.44 718960.16,4309992.19 718960.16,4309996.56 718959.92,4310001.19 718959.79,4310005.69 718959.42,4310009.94 718959.04,4310013.69 718958.16,4310017.19 718957.04,4310020.06 718955.54,4310022.82 718953.42,4310025.69 718951.42,4310029.06 718949.29,4310032.44 718947.16,4310035.56 718945.29,4310038.82 718943.66,4310042.32 718942.42,4310045.56 718941.66,4310049.44 718940.66,4310052.94 718940.04,4310056.82 718939.79,4310060.56 718939.54,4310064.06 718939.92,4310067.44 718940.92,4310070.44 718941.92,4310073.56 718943.04,4310076.82 718943.92,4310080.44 718944.16,4310083.82 718944.16,4310087.32 718944.16,4310090.69 718943.92,4310094.19 718943.92,4310097.44 718942.03,4310108.05 718939.79,4310118.39 718936.91,4310128.71 718937.97,4310137.19 718944.54,4310145.43 718945.79,4310147.93 718946.66,4310151.05 718947.04,4310154.17 718947.04,4310157.67 718947.04,4310161.3 718946.42,4310165.05 718945.66,4310168.67 718944.42,4310172.05 718942.92,4310175.8 718941.54,4310179.43 718940.29,4310183.3 718939.42,4310187.05 718938.66,4310191.3 718937.92,4310195.43 718937.16,4310199.8 718936.54,4310204.3 718935.92,4310209.43 718935.66,4310214.43 718935.42,4310219.55 718935.42,4310224.67 718935.42,4310229.43 718935.66,4310234.17 718936.29,4310238.55 718937.16,4310242.43 718938.16,4310245.93 718939.29,4310249.17 718940.54,4310252.17 718942.16,4310254.93 718943.42,4310257.55 718945.04,4310260.17 718946.66,4310262.55 718948.04,4310264.8 718949.42,4310266.67 718950.79,4310268.43 718951.92,4310270.05 718953.66,4310272.67 718954.42,4310273.93 718965.82,4310286.74 718967.95,4310288.86 718971.58,4310291.24 718973.82,4310292.48 718976.32,4310293.86 718979.08,4310295.36 718981.95,4310296.98 718984.82,4310298.48 718987.82,4310300.11 718990.7,4310301.24 718993.7,4310302.48 718996.7,4310304.11 718999.32,4310305.74 719001.7,4310307.48 719004.2,4310309.24 719006.95,4310311.24 719009.95,4310313.61 719013.45,4310315.86 719017.2,4310318.36 719021.32,4310320.74 719025.7,4310323.36 719029.95,4310325.86 719034.08,4310328.74 719038.08,4310331.61 719041.7,4310334.48 719044.58,4310337.61 719047.32,4310340.86 719049.7,4310344.36 719051.95,4310348.11 719053.95,4310352.48 719056.2,4310356.61 719058.32,4310361.11 719060.2,4310365.36 719062.32,4310369.86 719064.32,4310374.36 719066.08,4310379.24 719068.2,4310383.48 719070.08,4310387.36 719071.95,4310390.11 719073.7,4310392.36 719075.32,4310394.61 719076.95,4310396.98 719078.82,4310399.86 719080.58,4310402.86 719082.82,4310406.11 719085.08,4310409.61 719087.45,4310413.11 719089.82,4310416.61 719092.45,4310419.61 719095.32,4310421.86 719098.58,4310423.36 719101.7,4310423.86 719105.2,4310423.74 719108.58,4310423.24 719112.08,4310423.11 719115.2,4310423.61 719118.32,4310425.11 719120.82,4310427.86 719123.2,4310431.11 719125.32,4310434.36 719127.08,4310437.86 719128.32,4310441.61 719129.2,4310445.24 719130.08,4310448.86 719130.32,4310452.74 719130.95,4310456.24 719131.45,4310459.36 719131.82,4310462.11 719132.08,4310464.36 719132.95,4310467.36 719134.45,4310470.98 719135.58,4310473.36 719136.95,4310476.11 719138.2,4310479.24 719139.32,4310482.61 719140.58,4310485.74 719141.82,4310488.61 719142.95,4310491.48 719144.08,4310493.86 719144.82,4310496.24 719146.58,4310499.48 719147.82,4310501.98 719148.95,4310503.98 719150.58,4310505.74 719152.7,4310516.36 719152.32,4310520.48 719151.7,4310522.98 719150.95,4310525.86 719150.2,4310529.11 719150.08,4310532.24 719150.08,4310535.61 719150.2,4310538.98 719150.95,4310542.86 719151.7,4310546.86 719152.82,4310551.36 719154.45,4310555.61 719156.32,4310559.98 719158.58,4310563.74 719160.95,4310567.36 719163.45,4310570.74 719166.2,4310574.24 719168.7,4310577.61 719171.45,4310580.98 719174.45,4310584.11 719177.45,4310587.48 719180.45,4310590.61 719183.58,4310593.86 719186.58,4310596.98 719189.2,4310600.24 719191.45,4310603.48 719193.58,4310606.86 719195.45,4310610.24 719197.2,4310613.74 719198.82,4310617.48 719200.7,4310621.48 719202.58,4310625.86 719204.58,4310630.24 719206.58,4310634.98 719208.45,4310640.48 719210.58,4310645.98 719212.58,4310651.61 719214.58,4310656.86 719216.82,4310661.86 719218.7,4310666.74 719220.58,4310671.36 719222.2,4310675.86 719223.82,4310680.24 719225.32,4310684.24 719226.95,4310687.86 719228.2,4310691.48 719229.45,4310695.36 719230.45,4310698.86 719231.2,4310702.48 719231.7,4310705.98 719231.82,4310709.36 719231.82,4310712.86 719231.58,4310716.36 719231.08,4310719.86 719230.32,4310723.24 719229.32,4310726.48 719227.95,4310729.74 719226.32,4310733.24 719224.45,4310736.74 719222.32,4310740.24 719220.08,4310743.74 719218.08,4310747.24 719215.95,4310750.48 719213.95,4310753.74 719212.2,4310757.11 719210.58,4310760.36 719209.08,4310763.74 719207.82,4310767.24 719206.45,4310770.86 719204.95,4310774.36 719203.58,4310778.24 719201.82,4310781.98 719201.36,4310783.48 719201.28,4310783.48 719200.32,4310785.98 719198.82,4310790.11 719197.08,4310794.36 719195.32,4310798.61 719193.58,4310802.74 719191.45,4310806.36 719189.08,4310809.61 719186.32,4310811.98 719183.32,4310814.24 719180.08,4310815.61 719176.32,4310816.36 719172.58,4310816.74 719168.58,4310816.74 719164.45,4310816.74 719160.32,4310816.74 719156.2,4310816.74 719151.82,4310816.74 719147.45,4310816.86 719142.82,4310817.86 719138.2,4310818.61 719133.45,4310819.48 719128.82,4310820.36 719124.2,4310821.61 719119.7,4310823.61 719115.7,4310825.86 719111.95,4310828.24 719107.95,4310830.24 719103.95,4310831.98 719100.32,4310834.11 719096.82,4310836.36 719093.45,4310838.98 719090.08,4310841.98 719087.08,4310845.11 719084.2,4310848.11 719081.32,4310851.61 719078.82,4310855.11 719076.7,4310859.11 719074.7,4310862.98 719072.58,4310866.86 719070.82,4310870.36 719069.08,4310873.86 719067.58,4310877.24 719065.82,4310880.86 719064.2,4310884.24 719062.45,4310887.74 719060.7,4310891.24 719059.08,4310894.74 719057.45,4310897.86 719055.58,4310900.86 719053.7,4310903.61 719051.45,4310906.11 719048.95,4310908.48 719046.32,4310910.98 719043.7,4310913.11 719040.58,4310915.11 719037.08,4310916.48 719033.45,4310917.74 719029.95,4310918.98 719026.58,4310920.74 719023.58,4310922.74 719020.32,4310924.98 719016.95,4310926.48 719013.45,4310926.98 719009.45,4310926.98 719005.32,4310926.86 719000.82,4310926.86 718996.2,4310926.86 718991.58,4310927.11 718987.08,4310928.11 718982.2,4310929.48 718977.58,4310931.11 718972.82,4310932.61 718967.95,4310934.11 718963.2,4310935.61 718958.32,4310936.98 718953.58,4310937.61 718948.82,4310937.61 718944.2,4310936.86 718939.45,4310935.74 718934.58,4310934.61 718929.58,4310933.86 718924.45,4310933.24 718919.45,4310932.86 718914.45,4310932.86 718909.82,4310933.24 718905.2,4310933.98 718900.82,4310935.24 718896.32,4310936.98 718891.82,4310938.98 718887.45,4310940.86 718882.95,4310942.48 718878.7,4310943.48 718874.32,4310944.86 718870.2,4310946.11 718865.95,4310947.36 718861.7,4310948.61 718857.2,4310950.11 718852.58,4310951.48 718847.82,4310952.74 718842.82,4310954.24 718838.08,4310955.48 718833.32,4310956.61 718828.7,4310957.74 718824.2,4310958.48 718819.82,4310959.48 718815.7,4310960.11 718811.58,4310960.74 718807.58,4310961.36 718803.7,4310961.74 718799.95,4310961.86 718796.2,4310961.74 718792.7,4310961.74 718789.2,4310961.86 718786.2,4310962.11 718783.32,4310962.98 718780.45,4310964.24 718777.45,4310965.36 718774.82,4310966.74 718772.08,4310968.74 718769.58,4310970.74 718766.95,4310973.24 718764.58,4310975.86 718762.2,4310978.36 718760.08,4310981.36 718758.08,4310984.48 718755.95,4310987.74 718753.95,4310991.11 718751.82,4310994.24 718749.95,4310997.48 718748.08,4310999.98 718746.08,4311002.24 718744.2,4311003.98 718742.82,4311005.61 718740.7,4311007.61 718738.82,4311008.98 718738.32,4311009.61 718722.58,4311055.24 718720.82,4311058.74 718719.45,4311060.86 718717.7,4311063.24 718715.95,4311066.11 718713.95,4311069.11 718711.95,4311072.11 718709.95,4311075.24 718707.95,4311078.36 718706.08,4311081.36 718703.82,4311084.36 718703.77,4311084.41 718695.7,4311096.11 718694.08,4311099.74 718684.82,4311125.11 718683.7,4311129.74 718682.7,4311134.61 718681.58,4311139.61 718680.34,4311144.34 718678.95,4311150.36 718677.58,4311155.98 718676.32,4311161.48 718674.95,4311166.98 718673.7,4311171.74 718672.32,4311175.98 718662.7,4311202.11 718659.2,4311209.98 718639.69,4311238.17 718606.04,4311255.54 718572.57,4311266.26 718527.51,4311276.66 718487.59,4311280.55 718454.4,4311281.3 718408.14,4311275.03 718393.31,4311271.29 718366.93,4311265.57 718324.12,4311254.41 718302.8,4311245.51 718269.89,4311236.28 718261.42,4311233.89 718235.18,4311226.92 718190.42,4311212.72 718118.2,4311183.34 718104.93,4311176.73 718094.88,4311172.08 718084.49,4311169.27 718079.03,4311169.54 718076.91,4311170.74 718077.49,4311179.97 718090.12,4311192.89 718113.98,4311208.63 718142.82,4311226.18 718174.76,4311253.04 718199.26,4311277.38 718210.54,4311292.14 718226.68,4311314.79 718238.96,4311335.24 718248.85,4311361.48 718255.86,4311383.95 718264.8,4311420.79 718270.69,4311447.57 718274.93,4311474.3 718279.58,4311486.08 718294.8,4311587.54 718295.8,4311602.35 718293.99,4311611.5 718292.5,4311616.13 718271.6,4311652.14 718247.25,4311693.04 718230.03,4311715.84 718216.22,4311735.42 718209.36,4311743.54 718200.75,4311754.95 718187.12,4311767.87 718175.06,4311784.17 718144.65,4311808.23 718118.84,4311828.32 718077.83,4311861.34 718070.22,4311866.47 718073.85,4311873.53 718073.08,4311872.61 718070.08,4311868.74 718068.99,4311867.3 718046.05,4311882.75 718018.85,4311899.82 717990.24,4311913.88 717964.72,4311923.57 717929.94,4311935.8 717883,4311963.36 717875.56,4311979.04 717875.4,4311984.97 717886,4311998.81 717974.89,4312069.16 718061.15,4312125.25 718100.33,4312147.95 718111.7,4312156.58 718142.6,4312179.05 718145.73,4312185.79 718153.65,4312199.31 718163.19,4312214.54 718177.05,4312253.17 718166.19,4312286.12 718138.07,4312343.55 718105.75,4312372.59 718086.74,4312400.34 718076.24,4312420 718075.51,4312446.59 718088.08,4312471.88 718108.94,4312497.4 718134.68,4312526.38 718162.08,4312555.4 718183.17,4312572.62 718210.85,4312591.67 718227.1,4312603.76 718261.13,4312632.97 718269.38,4312647.39 718272.25,4312669.79 718270.26,4312691.36 718268.13,4312717.81 718259.76,4312742.68 718237.48,4312768.68 718227.26,4312778.37 718192.08,4312790.7 718173.76,4312793.53 718125.6,4312795.52 718085.82,4312794.42 718067.58,4312793.92 718037.84,4312789.78 718018.18,4312780.92 718005.24,4312768.92 717987.1,4312765.09 717975.45,4312766.44 717960.07,4312782.64 717949.85,4312792.34 717932.91,4312805.17 717911.13,4312812.89 717899.34,4312819.21 717892.07,4312842.29 717896.63,4312857.39 717904.78,4312862.6 717922.79,4312871.41 717968.74,4312889.31 718009.81,4312903.74 718040.98,4312916.24 718060.6,4312926.76 718086.89,4312935.8 718121.79,4312933.44 718145.04,4312932.42 718168.02,4312941.37 718183.91,4312966.75 718203.2,4312988.9 718232.67,4313003.02 718255.56,4313015.29 718271.72,4313030.7 718294.56,4313044.63 718312.29,4313063.42 718328.54,4313075.51 718343.05,4313090.87 718359.21,4313106.28 718372.1,4313119.94 718381.5,4313140.16 718387.21,4313173.57 718386.48,4313200.16 718386.46,4313200.96 718934.13,4313364.95 718935.16,4313359.3 718940.18,4313351.71 718951.99,4313342.39 718962.73,4313336.89 718972.38,4313336.19 718991.57,4313338.65 719010.73,4313342.08 719028.98,4313343.55 719045.21,4313348.82 719068.14,4313355.24 719089.09,4313363.54 719106.22,4313370.77 719129.12,4313378.16 719148.26,4313382.55 719168.36,4313386.97 719184.47,4313396.1 719200.67,4313402.33 719214.81,4313413.34 719225.1,4313424.24 719236.46,4313431.31 719248.8,4313437.44 719267.06,4313438.91 719286.7,4313424.98 719290.73,4313418.33 719293.03,4313404.88 719297.14,4313395.34 719307.94,4313387.92 719329.26,4313382.72 719345.83,4313375.45 719352.94,4313362.14 719354.14,4313353.48 719349.76,4313337.92 719337.65,4313323.11 719314.23,4313299.29 719297.1,4313292.06 719286.76,4313283.09 719274.54,4313272.14 719260.3,4313264.99 719242.18,4313258.7 719233.71,4313251.71 719222.35,4313244.64 719209.2,4313232.69 719202.73,4313222.86 719200.08,4313214.1 719194.52,4313206.23 719185.27,4313192.46 719183.59,4313183.73 719184.74,4313177 719194.49,4313172.44 719236.02,4313167.8 719248.63,4313164.29 719262.16,4313162.73 719276.61,4313162.16 719306.44,4313162.99 719315.1,4313163.22 719323.76,4313163.46 719343.05,4313162.07 719351.37,4313141.44 719352.59,4313130.48 719355.69,4313122.84 719362.69,4313113.38 719381.58,4313091.7 719411.29,4313061.64 719423.26,4313046.52 719428.47,4313032.19 719441.43,4313016.14 719461.26,4312995.45 719479.06,4312978.57 719491.91,4312966.38 719515.5,4312948.69 719538.22,4312928.08 719590.25,4312891.88 719606.07,4312876.88 719624.72,4312863.88 719635.46,4312858.38 719660.77,4312848.46 719669.48,4312846.77 719693.82,4312836.83 719723.89,4312828.97 719739.36,4312826.5 719760.61,4312824.19 719790.56,4312820.19 719818.65,4312814.21 719854.41,4312809.41 719889.07,4312809.4 719926.67,4312807.54 719996.21,4312799.81 720053,4312800.41 720085.73,4312800.35 720218.61,4312800.15 720249.39,4312801 720264.73,4312803.35 720283.89,4312806.78 720302.07,4312811.14 720321.18,4312816.49 720344.08,4312823.88 720377.46,4312835.42 720392.72,4312840.66 720431.09,4312854.83 720475.07,4312870.85 720511.33,4312898.5 720537.99,4312925.15 720563.01,4312957.68 720598.48,4313017.19 720622.89,4313047.46 720630.46,4313054.25 720687.42,4313110.09 720695.24,4313119.43 720698.49,4313124.31 720700.92,4313128.33 720702.84,4313130.36 720703.95,4313130.95 720705.08,4313130.98 720706.24,4313129.89 720705.46,4313127.33 720696.9,4313110.16 720687.94,4313097.78 720679.53,4313085.58 720657.99,4313064.06 720642.17,4313042.2 720634.56,4313033.42 720625.3,4313022.04 720617.93,4313005.25 720615.78,4312995.85 720615.89,4312981.07 720618.09,4312966.66 720620.43,4312958.28 720622.62,4312955.32 720628.4,4312953.37 720649.45,4312955.16 720670.07,4312961.68 720670.73,4312961.81 720701.26,4312970.64 720742.51,4312976.78 720770.24,4312981.11 720792.22,4312986.72 720811.84,4313000.13 720838.87,4313003.73 720851.12,4312999.78 720866.12,4312999.48 720890.38,4313000.15 720908.75,4313007.09 720926.33,4313016.86 720937.55,4313024.31 720947.96,4313035.32 720952.16,4313038.29 720953.67,4313035.48 720958.76,4313006.32 720958.99,4312997.75 720957.19,4312985.56 720956.65,4312979.11 720958.18,4312975.58 720957.99,4312972.69 720957.42,4312970.93 720953.36,4312968.5 720949.74,4312964.72 720946.93,4312961.93 720938.66,4312954.54 720930.16,4312948.1 720917.74,4312940.17 720898.53,4312937.5 720862.34,4312929.35 720805.82,4312907.79 720746.61,4312879.72 720709.19,4312864.4 720669.69,4312846.87 720631.6,4312830.1 720601.41,4312811.41 720567.95,4312781.9 720550.21,4312752.12 720536,4312707.56 720528.81,4312689.02 720475.27,4312605.5 720453.09,4312572.08 720420.88,4312552.85 720408.97,4312541.81 720381.27,4312522.8 720337.81,4312492.92 720330.17,4312490.78 720305.53,4312476.58 720284.73,4312462.49 720248.49,4312449.9 720223.74,4312439.56 720208.56,4312431.41 720180.23,4312411.32 720166.98,4312403.23 720159.92,4312379.85 720160.35,4312364.42 720160.67,4312352.84 720166.92,4312335.63 720167.41,4312334.72 720179.95,4312281.91 720178.83,4312252.9 720166.69,4312204.28 720152.2,4312171.05 720144.93,4312155.4 720137.93,4312130.1 720134.5,4312114.55 720091.79,4312057.36 720049.85,4312044.54 720013.55,4312033.89 719990.67,4312025.53 719967.69,4312021.04 719941.06,4312008.72 719931.87,4311993.02 719922.83,4311971.53 719908.45,4311934.45 719899.46,4311911.04 719892.51,4311883.81 719885.61,4311854.66 719882.45,4311829.48 719883.57,4311788.96 719903.61,4311760.56 719929.11,4311743.88 719956.59,4311725.33 719987.86,4311708.82 720040.08,4311700.61 720072.91,4311697.65 720092.47,4311686.61 720127.15,4311671.78 720158.68,4311654.9 720148.51,4311621.33 720120.04,4311594.69 720109.19,4311569.3 720105.82,4311551.83 720106.51,4311526.75 720112.76,4311509.54 720128.64,4311492.6 720164.13,4311457.53 720193.88,4311425.06 720232.19,4311403.92 720303.7,4311385.92 720384.65,4311367.92 720473.17,4311361.66 720526.69,4311352.12 720585.63,4311333.39 720608.88,4311328.24 720645.6,4311323.46 720672.81,4311314.55 720705.9,4311301.95 720731.08,4311296.86 720754.23,4311295.56 720779.3,4311294.32 720806.35,4311291.21 720827.41,4311295.65 720859.81,4311308.13 720878.73,4311320.24 720905.41,4311330.63 720930.05,4311344.82 720958.71,4311353.33 720985.33,4311365.65 721006.39,4311370.09 721023.66,4311372.5 721046.75,4311373.14 721064.13,4311371.69 721081.55,4311368.31 721107.05,4311351.63 721126.51,4311344.45 721140.35,4311331.32 721173.07,4311306.63 721174.51,4311306.67 721181.38,4311302.03 721190.73,4311294.57 721197.12,4311289.92 721199.62,4311286.61 721204.64,4311279.02 721208.71,4311271.41 721215.28,4311260.01 721219.81,4311252.89 721223.32,4311247.68 721225.36,4311243.88 721228.36,4311239.62 721230.91,4311234.38 721234.4,4311230.13 721235.88,4311228.72 721238.8,4311227.84 721241.74,4311225.99 721245.59,4311226.09 721247.95,4311227.61 721252.2,4311230.62 721253.5,4311235.97 721253.79,4311242.73 721253.62,4311249 721254.13,4311265.43 721255.32,4311274.63 721255.52,4311284.77 721258.16,4311294.01 721259.94,4311299.37 721265.43,4311309.66 721271.87,4311320.46 721276.94,4311328.8 721285.21,4311343.03 721291.21,4311352.36 721299.14,4311361.75 721305.29,4311365.78 721339.18,4311376.05 721351.56,4311381.22 721373.64,4311383.76 721393.9,4311382.39 721408.44,4311378.93 721420.12,4311374.42 721436.53,4311372.94 721453.85,4311373.42 721466.33,4311374.73 721482.56,4311380.01 721497.66,4311391.05 721517.6,4311401.26 721527.95,4311410.23 721537.41,4311416.29 721550.23,4311438.9 721567.02,4311458.68 721578.55,4311459.96 721594.59,4311471.99 721612.61,4311482.14 721630.41,4311500.01 721637.98,4311505.05 721649.24,4311515.98 721659.69,4311521.09 721666.13,4311531.89 721673.62,4311539.82 721683.08,4311545.88 721689.63,4311552.82 721698.99,4311562.73 721704.58,4311569.64 721718.75,4311579.69 721728.24,4311584.78 721732.92,4311589.73 721741.45,4311594.8 721752.76,4311603.8 721759.33,4311609.77 721762.17,4311611.78 721771.63,4311617.84 721781.07,4311624.86 721785.8,4311627.88 721795.29,4311632.97 721804.78,4311638.06 721814.28,4311643.15 721828.58,4311648.37 721847.58,4311655.27 721853.3,4311657.36 721861.1,4311659.48 721867.78,4311661.59 721873.08,4311663.43 721878.69,4311665.28 721889.89,4311670.13 721898.3,4311673.2 721912.82,4311680.97 721914.57,4311681.99 722073.55,4311748.9 722093.09,4311759.65 722097.59,4311760.65 722102.22,4311763.65 722104.8,4311766.21 722111.57,4311771.37 722116.19,4311774.24 722123.68,4311780.33 722125.89,4311782.1 722125.24,4311783.41 722128.62,4311784.22 722133.91,4311787.87 722139.91,4311791.52 722143.91,4311794.64 722149.25,4311798.05 722153.17,4311799.86 722157.08,4311800.86 722161.32,4311803.98 722165.7,4311807.24 722169.95,4311810.61 722174.2,4311813.86 722178.45,4311817.11 722182.45,4311820.24 722186.95,4311823.48 722191.32,4311826.48 722195.58,4311829.74 722199.7,4311832.98 722203.82,4311836.36 722208.08,4311839.74 722211.95,4311843.36 722216.08,4311846.74 722219.95,4311849.98 722223.82,4311853.11 722227.95,4311856.11 722231.95,4311858.98 722236.08,4311861.74 722240.32,4311864.48 722244.45,4311867.48 722246.39,4311868.82 722246.65,4311859.74 722246.76,4311859.74 722242.82,4311856.86 722238.7,4311853.61 722234.58,4311850.24 722230.2,4311846.98 722225.95,4311843.98 722221.58,4311840.86 722217.32,4311838.11 722212.82,4311835.36 722208.32,4311832.61 722203.95,4311829.36 722199.58,4311825.98 722195.32,4311822.74 722190.95,4311819.24 722186.95,4311815.98 722182.82,4311812.48 722178.7,4311808.98 722174.95,4311805.24 722171.32,4311801.48 722167.2,4311798.11 722163.08,4311794.86 722159.08,4311791.61 722154.95,4311788.48 722150.95,4311785.24 722146.7,4311781.98 722142.32,4311779.24 722137.7,4311776.36 722133.2,4311773.24 722128.45,4311770.24 722123.95,4311766.98 722119.45,4311763.98 722115.08,4311760.98 722110.58,4311757.86 722106.2,4311754.98 722101.58,4311751.74 722097.32,4311748.61 722092.82,4311745.74 722088.45,4311742.98 722084.08,4311740.36 722079.45,4311737.61 722074.95,4311735.24 722070.32,4311732.86 722065.7,4311730.61 722061.08,4311728.24 722056.7,4311725.86 722052.32,4311723.61 722047.58,4311721.24 722043.2,4311719.11 722038.58,4311716.86 722033.7,4311715.11 722033.4,4311714.99 721986.14,4311693.19 721925.65,4311647.3 721915.06,4311640.77 721903.96,4311632.53 721892.87,4311623.72 721879.16,4311614.91 721868,4311608.94 721855.36,4311602.11 721846.92,4311594.74 721839.64,4311589.46 721829.6,4311583.52 721820.69,4311578.17 721811.78,4311572.26 721803.89,4311565.62 721791.76,4311551.77 721784.24,4311544.81 721775.82,4311535.88 721764.59,4311523.99 721759.97,4311517.1 721752.43,4311511.1 721743.95,4311504.11 721733.68,4311492.24 721726.36,4311478.52 721719.86,4311469.65 721711.41,4311461.69 721707.77,4311453.87 721706.09,4311445.13 721706.3,4311437.41 721710.26,4311433.66 721715.1,4311432.83 721721.89,4311431.09 721739.16,4311433.49 721749.66,4311436.68 721756.37,4311437.83 721759.26,4311437.91 721766.99,4311437.16 721777.73,4311431.66 721782.54,4311431.79 721790.19,4311433.94 721799.76,4311436.13 721807.41,4311438.27 721815.11,4311438.49 721825.69,4311438.78 721832.46,4311438 721844.09,4311435.42 721852.8,4311433.73 721861.46,4311433.97 721870.07,4311436.14 721876.75,4311438.26 721882.42,4311442.27 721891.94,4311446.4 721896.67,4311449.43 721900.47,4311451.46 721908.01,4311457.46 721913.57,4311465.34 721922.9,4311476.22 721930.41,4311483.18 721935.97,4311491.06 721949.26,4311498.19 721963.56,4311503.41 721974.98,4311508.55 721985.46,4311512.7 722074.61,4311510.65 722087.12,4311510.99 722108.27,4311512.54 722125.52,4311515.92 722136.08,4311517.17 722171.59,4311522.02 722190.76,4311525.44 722207.04,4311528.79 722227.26,4311529.34 722242.68,4311528.8 722247.5,4311528.94 722255.95,4311530.14 722258.26,4311448.12 722237.17,4311449.47 722215,4311449.82 722202.41,4311452.37 722189.84,4311453.96 722182.11,4311454.71 722166.66,4311456.21 722153.18,4311455.84 722136.82,4311455.39 722118.64,4311451.03 722101.44,4311445.72 722088.98,4311443.45 722068.9,4311438.07 722055.56,4311432.87 722044.12,4311428.69 722029.12,4311413.79 722025.48,4311405.97 722018.9,4311399.99 722001.81,4311390.83 721988.52,4311383.7 721964.78,4311371.46 721945.82,4311360.31 721929.23,4311351.83 721874.4,4311330.34 721855.28,4311324.98 721843.86,4311319.84 721826.67,4311314.54 721810.41,4311310.23 721790.47,4311300.02 721712.23,4311237.31 721681.81,4311222.94 721672.45,4311213.02 721649.77,4311196.94 721634.85,4311179.14 721625.6,4311165.35 721610.62,4311149.48 721591.9,4311129.64 721582.54,4311119.72 721567.46,4311107.71 721546.66,4311093.61 721529.55,4311085.41 721506.6,4311078.98 721477.73,4311078.18 721460.35,4311079.64 721444.89,4311081.14 721418,4311078.47 721391.31,4311068.07 721381.84,4311062.01 721357.3,4311043.94 721334.73,4311024 721314.19,4311000.24 721291.89,4310970.64 721269.48,4310944.9 721254.61,4310925.17 721236.32,4310889.88 721229.1,4310872.29 721221.72,4310860.49 721206.9,4310838.81 720265.5,4310812.84 720255.69,4310822.13 720216.98,4310844.31 720189.1,4310844.47 720140.09,4310845.91 720110.38,4310845.09 720081.23,4310823.83 720069.18,4310807.42</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.29">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Contreras</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">629485.75,4378782 629509.75,4378782 629538.81,4378785.5 629548.44,4378790 629561.63,4378796.5 629584.56,4378819 629598.63,4378837 629612.75,4378865.5 629620.63,4378902 629618.25,4378921 629613.44,4378945 629614.88,4378965.5 629623.75,4378973 629638.94,4378978 629654.13,4378979 629669.25,4378980 629687,4378985 629706,4378992.5 629722.5,4379003.5 629732.75,4379020 629739.19,4379032.5 629752.19,4379076.5 629758.69,4379097 629767.56,4379107 629784.06,4379111.5 629801.69,4379109 629823.13,4379102.5 629835.69,4379095 629852.06,4379091 629872.25,4379094.5 629888.75,4379102 629905.25,4379112 629926.75,4379118 629940.63,4379116.5 629964.63,4379111.5 629988.63,4379113.5 630007.63,4379120 630026.56,4379125 630044.19,4379119.5 630066.81,4379108 630083.19,4379098 630107,4379081 630119.56,4379069.5 630142.06,4379049.5 630170.94,4379029 630189.75,4379015 630207.44,4379011 630231.31,4379003 630256.5,4378991.5 630272.81,4378978.5 630299.19,4378963.5 630329.38,4378949 630352,4378939 630360.69,4378918.5 630355.56,4378913.5 630332.81,4378910 630310.13,4378911.5 630286.19,4378919.5 630263.56,4378931 630238.38,4378940 630209.5,4378958 630185.63,4378973 630155.44,4378983.5 630122.69,4378995 630068.63,4379023.5 630040.94,4379031 630015.69,4379030 629982.81,4379025.5 629963.75,4379015.5 629927.06,4379008 629895.5,4379002 629862.56,4378990 629843.44,4378973.5 629828.13,4378951 629817.63,4378908 629813.63,4378879 629804.63,4378859 629789.38,4378848 629765.38,4378849 629755.31,4378850.5 629737.56,4378847 629721.06,4378834.5 629712.13,4378820.5 629706.75,4378789 629696.56,4378773 629681.25,4378755.5 629650.81,4378740.5 629633,4378728 629619,4378713 629602.5,4378703 629586,4378695.5 629564.44,4378683 629541.5,4378659 629532.5,4378635.5 629534.75,4378607.5 629544.63,4378577 629555.88,4378563 629570.88,4378548 629588.44,4378537.5 629607.31,4378530 629627.38,4378513.5 629646.25,4378502 629663.75,4378484 629686.38,4378471 629705.19,4378456 629716.44,4378445.5 629725.06,4378416.5 629732.5,4378406.5 629735.5,4378397 629736.25,4378395 629729.19,4378388 629712.13,4378382.5 629688.19,4378389 629668.06,4378395.5 629644.13,4378402 629626.38,4378396 629617.38,4378378.5 629616,4378362 629618.38,4378344 629624.56,4378330 629631.88,4378301 629624.13,4378283.5 629612.75,4378280 629591.5,4378301.5 629572.69,4378319.5 629550.13,4378334.5 629529.94,4378340 629514.75,4378335 629497.13,4378342.5 629472.06,4378364.5 629453.25,4378381 629424.38,4378399 629390.38,4378405.5 629361.31,4378408.5 629327.19,4378405 629289.31,4378400 629246.31,4378396.5 629192.06,4378398.5 629155.44,4378400 629094.88,4378407 629045.63,4378406 629000.19,4378406.5 628961,4378398 628916.69,4378383 628858.31,4378352 628820.5,4378314 628771.06,4378346 628704.09,4378388.87 628772,4378484 628655,4378832 628413.48,4378619.08 628070.12,4378441.37 627371.56,4378453.22 627075.56,4378405.83 626637.47,4378287.36 626495.39,4378085.96 626282.27,4377991.18 625808.67,4377979.33 625583.71,4377920.1 625488.99,4377730.54 625406.11,4377612.07 625311.39,4377612.07 625252.19,4377718.69 625287.71,4377825.32 625228.51,4377967.48 624991.71,4378014.87 624577.3,4378026.72 624222.1,4378121.5 623914.26,4378370.29 623866.9,4378512.45 623926.1,4378607.23 624020.82,4378607.23 624151.06,4378465.06 624352.34,4378311.05 624506.26,4378311.05 624896.98,4378239.97 625110.11,4378299.2 625204.83,4378417.68 625169.31,4378500.61 624968.03,4378595.38 624932.5,4378702.01 624979.87,4378761.24 625169.31,4378702.01 625512.67,4378702.01 625761.31,4378891.56 625749.47,4379164.05 625773.15,4379258.82 625844.19,4379282.52 625950.75,4379258.82 626057.31,4379329.91 626092.83,4379543.15 625962.59,4379851.18 625938.91,4379993.35 626021.79,4380052.58 626152.03,4379993.35 626152.03,4379851.18 626270.43,4379839.33 626376.99,4379898.57 626400.67,4379981.5 626530.91,4379981.5 626578.27,4379851.18 626897.96,4379851.18 626945.32,4379827.49 626945.32,4379720.86 626850.6,4379626.08 626803.23,4379460.22 626874.28,4379318.06 627063.72,4379282.52 627099.24,4379377.29 627051.88,4379566.85 627122.92,4379637.93 627193.96,4379602.39 627300.52,4379472.07 627359.72,4379460.22 627537.32,4379543.15 627691.24,4379507.61 627691.24,4379377.29 627857.64,4379235.5 627881.06,4379235.5 627917.69,4379235 627965.75,4379250 628003.75,4379258.5 628446.5,4379324 628578.43,4379438.26 628599.72,4379725.85 628525.2,4379938.88 628450.68,4380247.78 628471.97,4381014.69 628429.39,4381238.37 628131.33,4381344.88 627631.01,4381451.4 627194.55,4381376.84 626619.72,4381323.58 626587.78,4381387.49 626651.65,4381494.01 626939.07,4381813.55 627034.88,4382037.23 627109.39,4382239.61 627098.75,4382388.73 626704.88,4382612.42 626566.49,4382782.84 626396.17,4382963.92 626268.43,4382868.05 626023.59,4382697.63 625970.36,4382718.93 625959.72,4382825.45 626172.62,4383123.69 626257.78,4383187.6 626428.1,4383230.2 626523.91,4383251.51 626481.33,4383368.67 626140.68,4383421.93 625895.84,4383443.24 625587.13,4383933.21 625470.04,4384007.77 625289.07,4383933.21 625182.62,4384039.72 625203.91,4384263.4 625384.88,4384487.09 625480.68,4384487.09 625576.49,4384561.65 625535.51,4384670.18 625322.6,4384840.6 625067.12,4384872.55 624960.67,4384861.9 624981.96,4385032.33 625109.7,4385245.36 625088.41,4385330.57 624864.86,4385362.53 624790.35,4385256.01 624737.12,4385032.33 624673.25,4384957.77 624545.51,4385042.98 624300.67,4385170.8 624045.18,4385117.54 623832.28,4384904.51 623630.02,4384883.21 623523.57,4384968.42 623566.15,4385085.59 623779.06,4385138.84 623864.22,4385298.62 623917.44,4385479.69 624098.41,4385511.65 624215.51,4385564.9 624268.73,4385820.54 624236.8,4385959.01 624236.8,4386267.91 624279.38,4386470.28 624502.93,4386960.25 624747.77,4387258.5 624673.25,4387386.32 624428.41,4387375.66 624321.96,4387333.06 624236.8,4387716.51 624098.41,4387812.38 623991.96,4387876.29 623991.96,4387940.2 623938.73,4388068.01 623846.4,4388031.01 622962.85,4387615.6 622590.27,4387477.13 622302.85,4387509.09 622238.98,4387679.51 622249.63,4388563.59 622398.66,4388755.32 622388.01,4388947.04 622302.85,4389213.33 622324.14,4389607.44 622143.18,4389735.26 621728.01,4389713.96 621472.53,4389575.49 621366.08,4389330.5 621142.53,4388723.36 621174.47,4388212.09 621131.88,4387967.1 621089.3,4387892.54 621046.72,4387881.89 620940.27,4387967.1 620897.73,4388349.15 620791.27,4388455.66 620865.79,4388871.07 620919.02,4389201.27 621078.69,4389286.48 621068.05,4389424.95 620982.89,4389446.25 620887.08,4389499.51 620929.66,4389606.03 621025.47,4389595.38 621025.47,4389659.28 620961.6,4389776.45 620833.86,4389882.97 620780.63,4390074.69 620908.37,4390596.62 621153.21,4390958.77 621461.92,4391065.29 621632.24,4391331.58 621632.24,4391619.17 621344.82,4391938.71 621131.92,4392013.27 621068.05,4392066.53 621121.55,4392390.14 621036.39,4392752.29 620866.06,4392848.15 620631.87,4392730.99 620344.45,4392667.08 620365.74,4392794.9 620344.45,4392858.8 620759.61,4393007.93 621089.61,4393018.58 621302.52,4392922.71 621408.97,4393050.53 621377.03,4394243.5 621526.07,4394243.5 621696.39,4393572.46 621962.52,4392986.62 621927.86,4392484.14 621938.5,4392260.46 622023.66,4392132.64 622279.15,4391472.24 622385.6,4390897.06 622417.53,4390662.73 622289.79,4390620.12 621895.92,4390588.17 621757.53,4390566.86 621651.08,4390311.23 621736.24,4390002.33 622002.37,4389874.52 622225.92,4390023.64 622300.44,4390172.76 622534.63,4390172.76 622651.73,4390151.46 622683.66,4389981.03 622587.86,4389192.82 622502.7,4388585.68 622406.89,4387893.33 622502.7,4387733.56 622587.86,4387722.91 622662.37,4387786.82 622992.37,4387797.47 623620.44,4388053.1 623833.34,4388202.23 623790.76,4388308.74 623545.92,4388692.2 623279.79,4389341.94 623386.24,4389725.39 623705.6,4390034.29 623854.63,4390204.71 623801.41,4390300.58 623556.57,4390364.49 623535.28,4390609.47 623705.6,4390811.85 623875.92,4390747.94 623875.92,4390641.43 623971.73,4390534.91 624163.34,4390534.91 624291.08,4390385.79 624546.57,4390204.71 624546.57,4390140.8 624269.79,4390172.76 624067.53,4390194.06 623705.54,4389762.36 623545.87,4389581.29 623460.7,4389346.95 623577.8,4389165.88 623694.9,4389229.79 623854.58,4389229.79 623780.06,4388750.47 623950.38,4388580.04 624056.83,4388420.27 624142,4388335.06 624216.51,4388292.45 624291.03,4388271.15 624376.19,4388271.15 624450.7,4388303.1 624461.35,4388367.01 624461.35,4388388.31 624493.29,4388537.44 624578.45,4388601.34 624663.61,4388505.48 624823.29,4388388.31 624887.16,4388153.98 624908.45,4387983.56 624951.03,4387994.21 625046.83,4388079.42 625153.29,4388153.98 625174.58,4388068.77 625057.48,4387845.09 624982.96,4387632.06 625078.77,4387429.68 625312.96,4387376.42 625376.83,4387323.16 625419.41,4386630.81 625536.51,4386513.64 625568.45,4386385.83 625504.58,4386343.22 625536.51,4386055.63 625738.77,4385789.34 625909.09,4385576.31 626026.19,4385416.54 626258.73,4385167.51 626450.34,4385146.21 626567.44,4385220.77 626759.05,4385444.45 626886.79,4385401.85 626940.02,4385252.73 627003.89,4385167.51 627227.44,4385167.51 627270.02,4385103.6 627184.86,4384997.09 627078.41,4384922.53 627078.41,4384837.32 627823.57,4384347.35 627823.57,4384262.13 627876.79,4384198.22 628057.76,4384315.39 628196.15,4384411.25 628313.25,4384358 628291.96,4384230.18 628174.86,4384102.36 628100.34,4384006.5 628079.05,4383931.94 628174.86,4383857.37 628174.86,4383793.47 628057.76,4383665.65 627951.31,4383537.83 627961.96,4383410.01 627972.6,4383346.1 628196.15,4383388.71 628366.47,4383473.92 628483.57,4383335.45 628558.08,4383324.8 628611.31,4383569.78 628834.86,4383729.56 628951.96,4383697.6 628834.86,4383346.1 628611.31,4383111.77 628632.6,4382888.09 628707.12,4382760.27 629122.28,4382760.27 629399.05,4382728.31 629473.57,4382664.4 629484.21,4382632.45 629452.28,4382568.54 629356.47,4382547.24 629186.15,4382568.54 629079.7,4382568.54 629005.18,4382355.51 628951.96,4382142.48 628792.28,4381972.05 628664.54,4381929.45 628664.54,4381759.02 628786.56,4381678.69 629018.56,4381711.86 629217.42,4381546.04 629250.57,4381181.25 629250.57,4380982.27 629051.71,4380915.95 628796.38,4380715 628815.81,4380663 628831.88,4380617 628869.69,4380591.5 628900,4380578.5 628913.69,4380545.5 628933.81,4380526 628956.56,4380514.5 628972.94,4380500.5 628989.25,4380484 629015.88,4380477 629037.5,4380484.5 629061.75,4380503.5 629082.25,4380523.5 629090,4380541 629095.38,4380571.5 629100.75,4380603.5 629104.81,4380630 629120.13,4380643.5 629142.94,4380639.5 629159.31,4380624.5 629169.25,4380604 629184.38,4380588.5 629202.06,4380579.5 629223.75,4380592 629239.06,4380606 629260.69,4380609.5 629274.56,4380601.5 629278.13,4380576.5 629296.81,4380535.5 629311.94,4380526.5 629338.56,4380523.5 629371.56,4380524.5 629413.44,4380524.5 629442.69,4380530.5 629460.63,4380550.5 629476.13,4380577 629489,4380597 629504.25,4380603.5 629524.44,4380589.5 629537,4380572.5 629549.38,4380543.5 629565.81,4380533 629583.56,4380535.5 629598.94,4380547 629614.38,4380569.5 629636.06,4380584.5 629651.31,4380587 629666.5,4380583 629680.31,4380566.5 629695.25,4380538.5 629719.44,4380544.5 629741.19,4380566 629761.63,4380575.5 629783.19,4380575.5 629794.5,4380564 629792.94,4380533.5 629775,4380512 629767.19,4380490.5 629753,4380468 629726.19,4380451.5 629714.63,4380433 629709.38,4380412.5 629707.94,4380395 629709,4380374.5 629724.13,4380360.5 629752,4380359 629783.88,4380372.5 629805.56,4380389 629823.5,4380402.5 629837.5,4380409 629864.13,4380410 629898.31,4380397 629919.63,4380367.5 629948.44,4380333 629983.81,4380315 630005.25,4380300.5 630020.25,4380276.5 630031.56,4380260 630047.94,4380247 630075.88,4380247 630103.88,4380259 630129.44,4380276.5 630152.44,4380297 630167.81,4380313 630180.56,4380317 630190.56,4380306.5 630186.44,4380271 630172.25,4380244.5 630160.69,4380229.5 630149.13,4380213 630145.25,4380204 630147.63,4380189 630160.19,4380175 630176.75,4380178.5 630197.13,4380191 630208.75,4380212.5 630221.69,4380238 630235.81,4380256.5 630252.38,4380266.5 630272.81,4380275.5 630305.81,4380277.5 630338.63,4380261 630355,4380249.5 630370.19,4380243 630385.5,4380250.5 630394.63,4380274.5 630397.38,4380303.5 630397.63,4380325 630402.81,4380344 630406.75,4380353 630416.94,4380361.5 630430.88,4380357.5 630435.81,4380343.5 630440.75,4380324.5 630448.13,4380298 630460.44,4380259.5 630484.25,4380222.5 630503.13,4380206 630519.56,4380203.5 630534.88,4380208.5 630546.38,4380221 630564.13,4380218 630584.5,4380225.5 630597.31,4380238 630602.56,4380257 630598.88,4380273.5 630601.5,4380284 630623.19,4380295 630653.69,4380300 630671.5,4380302 630685.5,4380307 630723.25,4380271.5 630748.56,4380268.5 630767.88,4380297.5 630773.19,4380323 630772.13,4380345.5 630758.31,4380365 630753.44,4380386.5 630756.06,4380395.5 630770.06,4380400.5 630782.69,4380392.5 630796.63,4380388.5 630818.25,4380393.5 630841.38,4380426.5 630861.94,4380455.5 630868.5,4380479.5 630873.69,4380494.5 630891.56,4380500.5 630916.88,4380496.5 630924.38,4380486.5 630907.5,4380445 630885.31,4380377.5 630869.56,4380319.5 630843.69,4380262.5 630819.38,4380240 630793.81,4380221 630779.75,4380210 630770.75,4380196 630776.88,4380173 630795.75,4380155 630825,4380160 630853.13,4380181.5 630898.81,4380186 630956.19,4380214.5 631028.88,4380256 631053.31,4380292.5 631061.19,4380317.5 631072.75,4380331.5 631089.13,4380320 631109.38,4380315 631128.44,4380317 631152.63,4380329.5 631202.25,4380339.5 631176.63,4380316.5 631156.06,4380284 631146.94,4380257.5 631164.44,4380229 631197.44,4380234 631233.13,4380251.5 631258.69,4380271.5 631276.63,4380291.5 631293.13,4380290 631303,4380259.5 631323.31,4380259.5 631349,4380296 631377.25,4380329 631401.63,4380359 631409.5,4380387 631429.94,4380405.5 631450.13,4380389 631457.63,4380376.5 631467.63,4380359.5 631485.5,4380375 631500.94,4380398.5 631543,4380416 631585,4380431 631613,4380439.5 631625.88,4380462.5 631638.88,4380497.5 631648,4380518 631653.13,4380528 631681.13,4380536.5 631635.31,4380381 631612.19,4380349.5 631570.13,4380328.5 631542.06,4380312 631521.63,4380296 631509.94,4380273 631499.5,4380237.5 631486.5,4380201 631466,4380179.5 631427.75,4380164.5 631394.75,4380162.5 631356.63,4380154 631337.44,4380141.5 631318.25,4380125 631308,4380110 631311.69,4380098.5 631328.13,4380088 631359.81,4380084 631392.81,4380089 631419.38,4380078.5 631435.81,4380069.5 631450.94,4380060.5 631466.13,4380056.5 631480.13,4380064 631493,4380081.5 631504.5,4380093 631531.19,4380094 631565.5,4380097.5 631593.44,4380102 631610.06,4380115 631625.31,4380122 631639.31,4380124.5 631644.25,4380112 631644.06,4380085.5 631656.5,4380063.5 631682,4380072 631698.75,4380105 631711.69,4380131.5 631722.13,4380158 631748.88,4380169.5 631783.19,4380180.5 631810,4380193 631824.06,4380206.5 631843.19,4380214 631867.25,4380209 631882.25,4380187 631889.56,4380156.5 631907.06,4380127.5 631928.69,4380129.5 631952.88,4380141 631973.13,4380133 631978.06,4380115 631989.25,4380095 632009,4380085.5 632014.56,4380083 632056.56,4380097 632088.44,4380117 632110.13,4380132 632126.75,4380145.5 632153.44,4380150.5 632190.19,4380145 632220.75,4380151 632241.25,4380179 632250.5,4380214.5 632250.81,4380248.5 632258.63,4380269 632276.44,4380275 632309.5,4380285 632338.81,4380302.5 632353,4380322.5 632369.5,4380327.5 632388.56,4380324.5 632389.63,4380302 632357.5,4380261.5 632332,4380248 632308.94,4380222.5 632308.75,4380201 632322.56,4380184.5 632346.5,4380169 632437.5,4380129 632471.69,4380122 632511.19,4380137 632554.44,4380149.5 632578.63,4380160.5 632599.13,4380179.5 632615.88,4380208.5 632621.44,4380264 632622.13,4380338 632625,4380376 632625.38,4380415 632629.38,4380433 632632.13,4380459.5 632642.38,4380467 632653.63,4380454 632651.81,4380445 632649.63,4380434 632655.81,4380412.5 632674.63,4380389.5 632704.94,4380371.5 632748.06,4380372 632745.44,4380359.5 632713.63,4380351 632691.81,4380328.5 632681.56,4380312 632670,4380296.5 632664.63,4380264 632663,4380227 632651.31,4380198 632629.5,4380171.5 632612.63,4380132.5 632601.13,4380118.5 632581.81,4380089.5 632552.38,4380059 632515.56,4380058.5 632482.56,4380062.5 632437.13,4380084.5 632391.63,4380106.5 632373.94,4380114 632359.94,4380112 632344.56,4380091.5 632307.44,4380057.5 632260.38,4380044 632210.81,4380035.5 632176.25,4380003 632152,4379989.5 632113.88,4379984.5 632101.25,4379987 632079.38,4379958 632043.69,4379937 631988.88,4379911 631954.56,4379906 631893.69,4379910.5 631868.25,4379902 631841.31,4379869 631814.56,4379859 631753.5,4379845.5 631717.81,4379828.5 631689.75,4379813.5 631674.44,4379802 631660.19,4379771.5 631658.75,4379751.5 631678.75,4379717 631726.69,4379686 631764.63,4379674.5 631793.75,4379664 631812.81,4379670 631839.5,4379673.5 631856,4379671 631863.38,4379648 631877.13,4379621.5 631909.94,4379603 631939.06,4379599 631968.38,4379614 631990.13,4379634 632019.38,4379637.5 632006.38,4379607.5 631999.81,4379582 631999.69,4379567 631957.69,4379554.5 631932.25,4379543.5 631918.13,4379527 631897.63,4379509.5 631872.38,4379521 631848.31,4379529 631831.81,4379525 631820.25,4379507.5 631813.81,4379497.5 631814.81,4379471 631808.19,4379441.5 631800.5,4379428 631797.63,4379395 631810.13,4379372 631835.44,4379369 631868.56,4379380.5 631903,4379401.5 631923.44,4379413 631961.5,4379417.5 631989.38,4379409.5 631991.56,4379371.5 631987.56,4379347.5 632005.19,4379334.5 632057.19,4379330.5 632095.31,4379335 632134.5,4379323.5 632169.94,4379309 632204.13,4379302.5 632234.56,4379303.5 632268.88,4379307 632303.13,4379305 632345.13,4379319 632387.19,4379342.5 632425.38,4379355 632478.69,4379355.5 632598.31,4379395 632618.5,4379383.5 632647.5,4379363 632669,4379352.5 632694.38,4379350 632718.5,4379357.5 632742.75,4379372.5 632784.81,4379392 632793.38,4379355.5 632815.94,4379326 632839.94,4379309 632854.69,4379302.5 632846.06,4379286.5 632796.63,4379293 632735.81,4379301.5 632696.44,4379298 632672.44,4379313.5 632638.25,4379321 632609.13,4379326.5 632590,4379319 632559.44,4379306.5 632531.5,4379302 632501,4379299.5 632469.31,4379303.5 632435.13,4379308 632393.06,4379290.5 632331.94,4379245 632336.75,4379225 632348.06,4379214.5 632369.38,4379198 632373.06,4379188 632369.94,4379182 632369.25,4379180.5 632360,4379178.5 632356.56,4379178 632337.63,4379175.5 632317.44,4379178.5 632291,4379185 632244.44,4379201.5 632216.63,4379203 632191.5,4379215 632120.88,4379226.5 632014.69,4379212.5 631984.38,4379211.5 631965.56,4379223 631941.69,4379236 631881.44,4379278 631795.81,4379304 631779.25,4379290.5 631756.56,4379291.5 631733.94,4379307 631722.69,4379320 631702.69,4379345 631662.5,4379366 631632.19,4379363.5 631618.19,4379352.5 631606.81,4379350 631596.69,4379350 631586.63,4379355 631555.38,4379393 631520.5,4379445.5 631504.25,4379464.5 631469.06,4379482.5 631455.19,4379489 631422.63,4379517 631405.06,4379529.5 631380,4379556.5 631342.31,4379572 631310.88,4379590 631281.94,4379601.5 631249.13,4379606.5 631213.88,4379617 631179.94,4379631.5 631143.44,4379650.5 631095.69,4379671 631010.06,4379701 630942,4379715.5 630885.19,4379717 630857.31,4379707.5 630849.63,4379693.5 630850.63,4379660.5 630865.56,4379635 630873,4379621.5 630869.13,4379611 630846.31,4379597.5 630839.88,4379585 630836,4379577.5 630828.44,4379577.5 630818.31,4379575 630807,4379577.5 630794.38,4379581.5 630775.5,4379587 630751.5,4379588 630732.56,4379586 630711.06,4379586 630697.25,4379588.5 630679.75,4379609 630664.75,4379630.5 630651.06,4379651 630632.13,4379653.5 630606.88,4379650 630596.69,4379644 630587.81,4379636.5 630578.81,4379622.5 630574.94,4379607.5 630563.44,4379596 630552.06,4379591 630539.5,4379599 630532,4379609 630525.81,4379622 630522.13,4379637 630513.38,4379646 630498.25,4379648.5 630485.56,4379643.5 630472.88,4379635 630457.69,4379628.5 630442.5,4379629 630427.44,4379639 630406.13,4379658 630393.69,4379678.5 630369.75,4379685 630342,4379685 630315.5,4379690.5 630305.5,4379702 630279.25,4379728.5 630254.13,4379748 630227.69,4379752 630212.56,4379761 630188.69,4379773.5 630145.81,4379776.5 630123.06,4379773 630067.31,4379749.5 630048.38,4379751 630025.69,4379757.5 629991.63,4379760 629964,4379774.5 629949,4379797 629930.38,4379834 629910.31,4379845.5 629873.75,4379856 629848.56,4379860 629827.13,4379865 629807,4379875.5 629774.25,4379883 629738.88,4379880 629700.94,4379871.5 629641.38,4379851.5 629542.56,4379808 629410.81,4379759 629288.13,4379734.5 629233.75,4379727.5 629192.13,4379726.5 629135.25,4379724.5 629058.19,4379715 629006.38,4379712 628996.13,4379694 628992.94,4379672.5 628992.06,4379666.5 628998.31,4379656.5 629008.38,4379650 629030.94,4379633.5 629045.75,4379596.5 629046.94,4379582.5 629055.63,4379566 629067,4379565 629088.44,4379562 629111.19,4379569.5 629133.94,4379568 629154.13,4379568 629174.25,4379561.5 629186.75,4379547.5 629195.44,4379527 629194.06,4379513 629191.38,4379497 629206.44,4379484 629216.5,4379481.5 629235.38,4379472.5 629249.19,4379465 629259.06,4379435.5 629257.63,4379420.5 629244.88,4379405.5 629233.44,4379393 629227,4379380.5 629221.75,4379355 629225.5,4379349 629233,4379343.5 629245.5,4379332 629249.25,4379324.5 629245.38,4379312 629237.69,4379300.5 629230,4379285.5 629224.69,4379259 629229.69,4379250.5 629238.44,4379240 629248.44,4379227.5 629264.69,4379213.5 629282.19,4379193 629327.31,4379152 629342.19,4379120.5 629342.13,4379109 629333.19,4379099 629323,4379094 629301.56,4379094.5 629272.5,4379094.5 629235.94,4379097.5 629201.88,4379103 629175.38,4379099 629143.75,4379098.5 629086.88,4379090 629042.69,4379089 629007.44,4379098 628984.69,4379101 628935.5,4379106.5 628907.75,4379108 628866.13,4379110.5 628830.81,4379101.5 628823.06,4379100 628811.56,4379084.5 628808.94,4379072 628811.31,4379053 628821.25,4379033 628843.63,4378996 628882.31,4378939 628899.81,4378916 628917.31,4378895.5 628922.13,4378874 628931.94,4378840 628940.63,4378822 628955.63,4378805.5 628973.19,4378788 629003.31,4378770 629057.44,4378745.5 629156.88,4378714.5 629237.56,4378699.5 629266.69,4378706 629298.25,4378707 629321.06,4378718 629346.38,4378723 629381.75,4378729 629412.13,4378737.5 629440.06,4378756 629463,4378777.5 629485.75,4378782</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.30">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Estany del Pujol</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">731433.74,4358758 731405.74,4358770 731346.8,4358863 731270.06,4358963.5 731239,4358999 731216.18,4359055.5 731205.06,4359099 731211.12,4359110.5 731234.12,4359097.5 731250.56,4359094 731275.44,4359107 731293.18,4359104 731319.06,4359128.5 731329.5,4359167.5 731350.3,4359192 731379.12,4359199 731406.88,4359198.5 731428.68,4359181.5 731447.5,4359132.5 731461.44,4359076.5 731483.88,4359034 731516.74,4358975.5 731529.5,4358916.5 731529.56,4358862.5 731530.5,4358823.5 731522.38,4358793 731500.38,4358766 731470.18,4358762.5 731433.74,4358758</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.31">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Gola del Pujol</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">731659.69,4359431.5 731679.88,4359377.5 731652.13,4359377 731532.19,4359334 731419.75,4359293.5 730921.75,4359088.5 730773.25,4359028.5 730735.75,4359120.5 731207.06,4359279.5 731500.25,4359378 731659.69,4359431.5</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.32">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Embarcaderos</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">665281.19,4345385.8 665277.35,4345395.4 665273.56,4345405.07 665269.83,4345414.78 665266.14,4345424.54 665262.48,4345434.33 665258.85,4345444.15 665255.24,4345453.98 665251.63,4345463.82 665248.02,4345473.66 665244.4,4345483.49 665240.76,4345493.31 665237.09,4345503.09 665233.38,4345512.84 665229.63,4345522.55 665225.83,4345532.2 665221.96,4345541.8 665218.02,4345551.32 665214,4345560.76 665209.88,4345570.12 665205.67,4345579.38 665201.36,4345588.54 665196.92,4345597.58 665192.36,4345606.51 665187.67,4345615.3 665182.84,4345623.95 665177.85,4345632.46 665172.7,4345640.81 665167.39,4345648.99 665161.89,4345657.01 665156.21,4345664.83 665150.34,4345672.47 665144.26,4345679.91 665137.97,4345687.14 665131.45,4345694.16 665124.71,4345700.95 665117.72,4345707.5 665110.51,4345713.83 665103.07,4345719.95 665095.42,4345725.86 665087.58,4345731.58 665079.55,4345737.12 665071.34,4345742.49 665062.98,4345747.71 665054.46,4345752.79 665045.81,4345757.74 665037.03,4345762.58 665028.14,4345767.3 665019.14,4345771.94 665010.06,4345776.49 665000.89,4345780.98 664991.66,4345785.41 664982.38,4345789.79 664973.05,4345794.15 664963.7,4345798.48 664954.32,4345802.81 664944.94,4345807.14 664935.57,4345811.49 664926.21,4345815.87 664916.88,4345820.29 664907.59,4345824.77 664898.35,4345829.31 664889.18,4345833.93 664880.09,4345838.64 664871.09,4345843.45 664862.18,4345848.38 664853.39,4345853.44 664844.73,4345858.63 664836.2,4345863.98 664827.82,4345869.49 664819.6,4345875.18 664811.55,4345881.05 664803.66,4345887.11 664795.94,4345893.34 664788.38,4345899.75 664780.96,4345906.33 664773.7,4345913.06 664766.57,4345919.96 664759.59,4345927.01 664752.73,4345934.2 664746,4345941.54 664739.4,4345949.01 664732.91,4345956.61 664726.53,4345964.34 664720.26,4345972.19 664714.09,4345980.16 664708.01,4345988.24 664702.03,4345996.42 664696.14,4346004.71 664690.32,4346013.09 664684.58,4346021.56 664678.92,4346030.11 664673.32,4346038.75 664667.78,4346047.46 664662.3,4346056.24 664656.87,4346065.08 664651.48,4346073.99 664646.14,4346082.94 664640.84,4346091.95 664635.56,4346101 664645.83,4346101.76 664656.03,4346102.46 664666.17,4346103.08 664676.25,4346103.64 664686.26,4346104.12 664696.21,4346104.53 664706.08,4346104.86 664715.9,4346105.12 664725.64,4346105.3 664735.32,4346105.41 664744.94,4346105.44 664754.48,4346105.4 664763.96,4346105.28 664773.37,4346105.07 664782.72,4346104.79 664791.99,4346104.43 664801.19,4346103.98 664810.33,4346103.46 664819.4,4346102.85 664828.4,4346102.16 664837.32,4346101.38 664846.18,4346100.52 664854.97,4346099.57 664863.68,4346098.54 664872.33,4346097.42 664880.9,4346096.21 664889.41,4346094.91 664897.84,4346093.52 664906.19,4346092.05 664914.48,4346090.48 664922.69,4346088.82 664930.83,4346087.07 664938.9,4346085.22 664946.89,4346083.28 664954.81,4346081.24 664962.65,4346079.11 664970.42,4346076.89 664978.12,4346074.56 664985.74,4346072.14 664993.28,4346069.62 665000.75,4346067 665008.14,4346064.28 665015.46,4346061.46 665022.69,4346058.54 665029.86,4346055.52 665036.94,4346052.39 665043.95,4346049.16 665050.88,4346045.82 665057.73,4346042.38 665064.5,4346038.83 665071.19,4346035.18 665077.81,4346031.42 665084.35,4346027.55 665090.8,4346023.57 665097.18,4346019.48 665103.47,4346015.28 665109.69,4346010.97 665115.82,4346006.54 665121.88,4346002.01 665127.85,4345997.36 665133.74,4345992.59 665139.55,4345987.71 665145.27,4345982.72 665150.92,4345977.6 665156.48,4345972.38 665161.95,4345967.03 665167.35,4345961.56 665172.66,4345955.97 665177.89,4345950.27 665183.04,4345944.45 665188.11,4345938.53 665193.11,4345932.5 665198.05,4345926.37 665202.92,4345920.16 665207.73,4345913.86 665212.49,4345907.47 665217.2,4345901.02 665221.86,4345894.49 665226.47,4345887.9 665231.05,4345881.25 665235.59,4345874.55 665240.1,4345867.8 665244.58,4345861.01 665249.03,4345854.18 665253.47,4345847.32 665257.89,4345840.43 665262.29,4345833.52 665266.69,4345826.6 665271.08,4345819.67 665275.48,4345812.73 665279.87,4345805.8 665284.28,4345798.87 665288.69,4345791.95 665293.12,4345785.05 665297.57,4345778.18 665302.04,4345771.33 665306.54,4345764.51 665311.07,4345757.74 665315.63,4345751.01 665324.43,4345738.31 665333.38,4345725.79 665342.46,4345713.43 665351.69,4345701.24 665361.05,4345689.2 665370.56,4345677.31 665380.2,4345665.55 665389.99,4345653.93 665399.92,4345642.43 665409.99,4345631.06 665420.2,4345619.79 665430.56,4345608.63 665441.05,4345597.56 665451.69,4345586.58 665462.48,4345575.69 665473.4,4345564.87 665484.47,4345554.12 665495.68,4345543.43 665507.04,4345532.79 665518.54,4345522.2 665530.18,4345511.65 665541.97,4345501.13 665553.91,4345490.64 665565.99,4345480.16 665578.21,4345469.7 665590.55,4345459.25 665603.01,4345448.79 665615.57,4345438.34 665628.21,4345427.87 665640.91,4345417.4 665653.67,4345406.91 665666.46,4345396.4 665679.28,4345385.86 665692.11,4345375.29 665704.92,4345364.68 665717.72,4345354.04 665730.47,4345343.35 665743.17,4345332.61 665755.81,4345321.82 665768.36,4345310.97 665780.81,4345300.05 665793.15,4345289.07 665805.37,4345278.02 665817.44,4345266.88 665829.35,4345255.67 665841.09,4345244.37 665852.64,4345232.98 665863.99,4345221.49 665875.12,4345209.9 665886.01,4345198.2 665896.66,4345186.4 665907.05,4345174.48 665917.16,4345162.44 665926.97,4345150.27 665936.48,4345137.98 665945.66,4345125.55 665954.51,4345112.99 665963,4345100.28 665971.13,4345087.43 665978.87,4345074.42 665986.21,4345061.26 665993.14,4345047.93 665999.64,4345034.44 666005.7,4345020.77 666011.3,4345006.94 666016.43,4344992.92 666021.07,4344978.71 666025.21,4344964.32 666028.83,4344949.73 666031.91,4344934.94 666034.45,4344919.95 666036.42,4344904.75 666037.82,4344889.34 666038.62,4344873.71 666038.83,4344857.86 666038.62,4344841.88 666038.27,4344825.89 666038.06,4344810.02 666038.25,4344794.39 666039.13,4344779.12 666040.97,4344764.36 666044.05,4344750.21 666048.63,4344736.8 666054.75,4344724.14 666062.26,4344712.17 666071.03,4344700.8 666080.94,4344689.98 666091.82,4344679.63 666103.56,4344669.67 666116.02,4344660.05 666129.04,4344650.69 666142.51,4344641.51 666156.28,4344632.45 666170.21,4344623.44 666184.16,4344614.4 666198.01,4344605.27 666211.6,4344595.98 666224.81,4344586.45 666237.5,4344576.62 666238.67,4344575.67 666239.84,4344574.71 666241.01,4344573.75 666242.16,4344572.79 666243.31,4344571.82 666244.46,4344570.85 666245.6,4344569.88 666246.73,4344568.9 666247.86,4344567.92 666248.99,4344566.94 666250.11,4344565.95 666251.22,4344564.97 666252.33,4344563.98 666253.43,4344562.98 666254.53,4344561.98 666255.63,4344560.99 666256.72,4344559.98 666257.8,4344558.98 666258.88,4344557.97 666259.96,4344556.96 666261.03,4344555.95 666262.1,4344554.93 666263.16,4344553.92 666264.22,4344552.9 666265.27,4344551.87 666266.33,4344550.85 666267.37,4344549.82 666268.42,4344548.79 666269.46,4344547.76 666270.49,4344546.73 666271.53,4344545.69 666272.55,4344544.65 666273.58,4344543.61 666274.6,4344542.57 666275.62,4344541.53 666276.64,4344540.48 666277.65,4344539.43 666278.66,4344538.38 666279.67,4344537.33 666280.67,4344536.28 666281.67,4344535.22 666282.67,4344534.17 666283.67,4344533.11 666284.66,4344532.05 666285.66,4344530.99 666286.64,4344529.92 666287.63,4344528.86 666288.62,4344527.79 666289.6,4344526.73 666290.58,4344525.66 666291.56,4344524.59 666292.54,4344523.52 666293.51,4344522.44 666294.48,4344521.37 666295.46,4344520.29 666296.43,4344519.22 666297.4,4344518.14 666298.36,4344517.06 666299.33,4344515.98 666300.3,4344514.9 666301.26,4344513.82 666302.22,4344512.74 666303.19,4344511.66 666304.15,4344510.58 666305.11,4344509.49 666306.07,4344508.41 666307.03,4344507.32 666307.98,4344506.24 666308.94,4344505.15 666309.9,4344504.06 666310.86,4344502.98 666311.82,4344501.89 666312.77,4344500.8 666313.73,4344499.71 666314.69,4344498.62 666315.64,4344497.53 666316.6,4344496.44 666317.56,4344495.35 666318.52,4344494.26 666319.48,4344493.17 666320.44,4344492.08 666321.39,4344490.99 666322.36,4344489.9 666323.32,4344488.81 666324.28,4344487.72 666325.24,4344486.63 666326.21,4344485.54 666327.17,4344484.45 666328.14,4344483.37 666329.1,4344482.28 666330.07,4344481.19 666331.04,4344480.1 666332.01,4344479.01 666332.99,4344477.93 666333.96,4344476.84 666334.94,4344475.75 666335.92,4344474.67 666336.9,4344473.58 666337.88,4344472.5 666343.13,4344443.5 666377.25,4344441 666403.81,4344442.5 666440.56,4344437.5 666463.38,4344430 666486.19,4344420 666510.25,4344421.5 666532.94,4344434 666569.5,4344456 666599.81,4344462.5 666618.81,4344462.5 666637.81,4344462.5 666659.31,4344461.5 666684.63,4344459 666708.63,4344459 666727.63,4344462 666746.56,4344467 666776.88,4344480 666790.75,4344490 666810.88,4344504 666820.88,4344512.5 666827.25,4344518 666837.31,4344538.5 666851.06,4344562.5 666868.69,4344586.5 666879.94,4344607 666888.75,4344623.5 666907.56,4344651.5 666921.75,4344682.5 666923.94,4344668 666931.63,4344641.5 666939.38,4344614.5 666944.56,4344593.5 666958.5,4344589.5 666974.81,4344610 666998.75,4344629 667026.5,4344655.5 667047.81,4344688.5 667070.5,4344709 667085.56,4344723 667100.69,4344739.5 667107,4344747 667118.25,4344763.5 667097.94,4344785 667121.81,4344808 667141.88,4344841 667163.25,4344873 667187.13,4344899.5 667212.31,4344926 667233.69,4344949 667248.81,4344963 667274,4344978.5 667295.5,4344983.5 667334.69,4344990 667365,4345006.5 667396.5,4345029.5 667429.31,4345045 667477.38,4345045 667529.25,4345043 667564.69,4345040.5 667601.38,4345047 667627.88,4345058.5 667646.81,4345069 667674.63,4345073 667688.63,4345060 667707.63,4345046.5 667716.56,4345039 667724.13,4345036.5 667734.25,4345044 667746.81,4345053 667761.94,4345069.5 667772,4345083.5 667790.88,4345105 667804.63,4345129 667823.5,4345147 667839.88,4345161 667855,4345176 667865,4345194 667872.56,4345206.5 667882.56,4345224.5 667891.38,4345237 667902.69,4345256 667910.19,4345271.5 667916.44,4345286.5 667912.56,4345303 667908.63,4345322 667902.19,4345343.5 667893.25,4345362.5 667880.5,4345387.5 667867.69,4345414 667856.31,4345411.5 667844.94,4345407.5 667831.06,4345401.5 667823.82,4345416.99 667898.88,4345501.5 667954.38,4345527 668016.31,4345545 668056.75,4345550.5 668107.31,4345554.5 668150.31,4345558.5 668175.63,4345560 668206,4345562.5 668223.69,4345563 668286.88,4345578.5 668309.63,4345584.5 668334.88,4345596 668363.88,4345611.5 668391.63,4345634.5 668411.75,4345653.5 668431.88,4345676.5 668464.63,4345704.5 668483.5,4345725 668512.56,4345732.5 668568.19,4345741.5 668574.63,4345742 668627.63,4345749.5 668647.81,4345756 668673,4345772.5 668712.13,4345790.5 668751.31,4345799.5 668798.19,4345792 668832.38,4345780 668856.5,4345773.5 668881.75,4345785 668895.5,4345810.5 668909.25,4345838.5 668931.94,4345856 668959.75,4345864 668991.38,4345860.5 669012.94,4345853 669020.63,4345839 669022,4345815 669018.31,4345791 669005.88,4345756.5 669000.88,4345735 669002.25,4345718.5 669032.81,4345684.5 669064.44,4345685 669126.31,4345706.5 669200.88,4345721 669250.19,4345725 669308.38,4345735.5 669352.63,4345739.5 669395.56,4345750 669437.31,4345752.5 669503.06,4345756.5 669575.19,4345763.5 669601.75,4345765 669637.13,4345769 669661.13,4345772.5 669683.94,4345773 669708,4345769 669729.56,4345760.5 669743.5,4345751.5 669763.88,4345730 669776.63,4345712.5 669783.06,4345683.5 669791.52,4345670.38 669800.16,4345657.5 669808.98,4345644.9 669818.02,4345632.6 669827.28,4345620.65 669836.8,4345609.06 669846.6,4345597.88 669856.68,4345587.14 669867.08,4345576.87 669877.82,4345567.09 669888.91,4345557.85 669900.37,4345549.17 669912.24,4345541.09 669924.51,4345533.64 669937.23,4345526.85 669950.35,4345520.66 669963.8,4345514.98 669977.52,4345509.69 669991.43,4345504.68 670005.48,4345499.86 670019.58,4345495.1 670033.67,4345490.3 670047.69,4345485.36 670061.55,4345480.16 670075.19,4345474.6 670088.55,4345468.57 670101.55,4345461.96 670114.12,4345454.66 670126.23,4345446.63 670137.88,4345437.9 670149.08,4345428.5 670159.83,4345418.5 670170.16,4345407.91 670180.05,4345396.78 670189.53,4345385.16 670198.6,4345373.09 670207.27,4345360.59 670215.55,4345347.72 670223.48,4345334.54 670231.11,4345321.11 670238.52,4345307.5 670245.74,4345293.78 670252.85,4345280.02 670259.89,4345266.28 670266.93,4345252.63 670274.02,4345239.14 670281.21,4345225.88 670288.57,4345212.91 670296.14,4345200.31 670304,4345188.13 670312.19,4345176.46 670320.77,4345165.35 670329.81,4345154.87 670339.34,4345145.1 670349.44,4345136.09 670360.16,4345127.92 670371.51,4345120.61 670383.46,4345114.14 670395.96,4345108.47 670408.97,4345103.59 670422.47,4345099.47 670436.39,4345096.07 670450.71,4345093.36 670465.39,4345091.33 670480.38,4345089.95 670495.64,4345089.18 670511.14,4345089 670526.82,4345089.38 670542.67,4345090.29 670558.62,4345091.71 670574.65,4345093.6 670590.7,4345095.95 670606.75,4345098.72 670622.75,4345101.88 670638.66,4345105.41 670654.45,4345109.28 670670.06,4345113.46 670685.49,4345117.92 670700.74,4345122.61 670715.83,4345127.48 670730.76,4345132.51 670745.53,4345137.63 670760.16,4345142.81 670774.66,4345148 670789.02,4345153.16 670803.27,4345158.25 670817.41,4345163.22 670831.44,4345168.03 670845.38,4345172.64 670859.23,4345177 670873,4345181.06 670886.7,4345184.79 670900.33,4345188.13 670913.92,4345191.06 670927.45,4345193.51 670940.95,4345195.46 670954.42,4345196.85 670967.86,4345197.64 670981.29,4345197.79 671016.09,4345195.07 671050.81,4345188.14 671085.43,4345177.44 671119.91,4345163.36 671154.21,4345146.34 671188.3,4345126.78 671222.16,4345105.1 671255.74,4345081.73 671289.02,4345057.06 671321.96,4345031.54 671354.53,4345005.55 671386.74,4344979.5 671418.69,4344953.66 671450.5,4344928.32 671482.28,4344903.77 671514.14,4344880.27 671546.21,4344858.12 671578.59,4344837.59 671611.39,4344818.98 671644.74,4344802.55 671678.75,4344788.6 671713.53,4344777.39 671749.19,4344769.23 671785.86,4344764.37 671823.52,4344763.02 671861.87,4344765.1 671900.57,4344770.51 671939.26,4344779.14 671977.61,4344790.88 672015.25,4344805.64 672051.86,4344823.31 672087.07,4344843.78 672120.53,4344866.94 672151.92,4344892.7 672180.86,4344920.95 672207.02,4344951.58 672230.05,4344984.48 672250.21,4345019.08 672269.13,4345053.73 672288.63,4345086.61 672310.53,4345115.93 672336.63,4345139.9 672367.59,4345157.74 672402.58,4345169.98 672440.68,4345177.23 672480.95,4345180.12 672522.46,4345179.26 672564.27,4345175.26 672605.48,4345168.75 672645.48,4345160.12 672684.21,4345149.47 672721.65,4345136.82 672757.77,4345122.24 672792.56,4345105.78 672825.99,4345087.47 672858.03,4345067.39 672888.67,4345045.56 672917.88,4345022.05 672945.65,4344996.9 672972.02,4344970.23 672997.58,4344942.57 673023.21,4344914.71 673049.74,4344887.39 673078.05,4344861.38 673108.98,4344837.44 673143.25,4344816.34 673180.34,4344798.88 673219.05,4344785.85 673258.16,4344778.09 673296.48,4344776.38 673332.78,4344781.55 673365.97,4344794.29 673396,4344813.96 673423.55,4344839.1 673449.29,4344868.22 673473.9,4344899.82 673498.05,4344932.42 673522.42,4344964.53 673547.69,4344994.67 673574.53,4345021.37 673603.28,4345044.2 673633.87,4345064.14 673666.22,4345082.21 673700.2,4345099.47 673735.74,4345116.98 673772.72,4345135.76 673810.99,4345156.52 673849.99,4345177.94 673889.06,4345198.04 673927.53,4345214.82 673964.71,4345226.32 673999.94,4345230.53 674032.55,4345225.48 674061.89,4345209.27 674088.32,4345182.98 674113.35,4345151.22 674138.58,4345118.8 674165.6,4345090.54 674196,4345071.26 674222.55,4345064.99 674251.15,4345065.81 674280.9,4345072.56 674310.86,4345084.07 674340.13,4345099.21 674367.83,4345116.85 674393.62,4345136.46 674417.45,4345157.86 674439.3,4345180.86 674459.14,4345205.29 674476.94,4345230.97 674492.66,4345257.7 674506.29,4345285.32 674517.78,4345313.64 674527.12,4345342.48 674534.26,4345371.65 674539.18,4345400.99 674541.86,4345430.3 674542.25,4345459.41 674540.36,4345488.16 674536.36,4345516.55 674530.5,4345544.66 674523.02,4345572.57 674514.16,4345600.34 674504.18,4345628.05 674493.31,4345655.77 674481.81,4345683.57 674469.92,4345711.53 674457.88,4345739.71 674445.94,4345768.2 674434.34,4345797.05 674423.27,4345826.23 674412.89,4345855.64 674403.37,4345885.17 674394.85,4345914.73 674387.52,4345944.21 674381.52,4345973.51 674377.01,4346002.54 674374.16,4346031.18 674373.13,4346059.34 674374.07,4346086.92 674377.15,4346113.82 674382.38,4346140.04 674389.58,4346165.72 674398.57,4346191.02 674409.15,4346216.09 674421.13,4346241.07 674434.33,4346266.12 674448.55,4346291.39 674463.6,4346317.03 674479.3,4346343.2 674495.46,4346370.03 674511.87,4346397.69 674528.37,4346426.33 674544.74,4346456.09 674560.82,4346487.12 674576.59,4346519.08 674592.34,4346550.91 674608.39,4346581.47 674625.04,4346609.64 674642.59,4346634.27 674661.36,4346654.25 674681.66,4346668.44 674703.79,4346675.71 674728.01,4346675.23 674754.22,4346668.3 674782.14,4346657.24 674811.5,4346644.33 674842.02,4346631.86 674873.4,4346621.87 674905.16,4346614.24 674936.73,4346607.95 674967.55,4346601.93 674997.04,4346595.16 675024.65,4346586.58 675049.8,4346575.15 675071.93,4346559.82 675090.47,4346539.55 675105.25,4346514.02 675117.08,4346484.75 675126.92,4346453.56 675135.75,4346422.26 675144.53,4346392.64 675154.23,4346366.54 675165.82,4346345.74 675180.13,4346331.81 675197.23,4346324.71 675216.85,4346323.8 675238.75,4346328.41 675262.68,4346337.91 675288.39,4346351.63 675315.62,4346368.93 675344.13,4346389.16 675373.66,4346411.66 675403.97,4346435.79 675434.8,4346460.89 675465.9,4346486.31 675497.01,4346511.4 675527.9,4346535.52 675559.17,4346558.72 675589.97,4346580.27 675620.32,4346600.25 675650.26,4346618.73 675679.81,4346635.78 675709.02,4346651.48 675737.91,4346665.9 675766.51,4346679.11 675794.86,4346691.19 675822.99,4346702.21 675850.93,4346712.24 675878.7,4346721.36 675906.36,4346729.63 675933.91,4346737.15 675961.41,4346743.97 675988.87,4346750.16 676016.34,4346755.82 676043.83,4346761 676071.4,4346765.78 676099.06,4346770.23 676126.84,4346774.43 676154.79,4346778.45 676182.93,4346782.37 676211.3,4346786.25 676239.92,4346790.17 676268.8,4346794.19 676297.93,4346798.32 676327.27,4346802.61 676356.79,4346807.06 676386.47,4346811.7 676416.28,4346816.55 676446.2,4346821.65 676476.18,4346827.01 676506.22,4346832.66 676536.27,4346838.61 676566.31,4346844.9 676596.32,4346851.55 676626.26,4346858.58 676656.12,4346866.02 676685.85,4346873.88 676715.43,4346882.2 676744.85,4346890.99 676774.06,4346900.29 676803.04,4346910.1 676831.76,4346920.47 676860.19,4346931.4 676888.35,4346942.89 676916.26,4346954.84 676943.97,4346967.15 676971.52,4346979.74 676998.97,4346992.52 677026.36,4347005.38 677053.73,4347018.23 677081.13,4347030.98 677108.61,4347043.54 677136.2,4347055.81 677163.96,4347067.69 677191.93,4347079.1 677220.15,4347089.94 677248.67,4347100.12 677277.54,4347109.54 677306.8,4347118.11 677336.5,4347125.73 677366.68,4347132.31 677397.35,4347137.76 677428.4,4347142.01 677459.67,4347144.98 677491.03,4347146.6 677522.33,4347146.81 677553.42,4347145.52 677584.17,4347142.67 677614.41,4347138.19 677644.02,4347132 677672.83,4347124.03 677700.72,4347114.21 677727.53,4347102.47 677753.21,4347088.8 677777.81,4347073.29 677801.37,4347056.01 677823.97,4347037.04 677845.64,4347016.47 677866.45,4346994.38 677886.46,4346970.85 677905.71,4346945.96 677924.26,4346919.79 677942.17,4346892.43 677959.49,4346863.95 677976.28,4346834.45 677992.65,4346804.18 678008.77,4346773.62 678024.85,4346743.27 678041.06,4346713.64 678057.59,4346685.22 678074.63,4346658.51 678092.36,4346634.02 678110.98,4346612.25 678130.66,4346593.69 678151.59,4346578.84 678173.97,4346568.21 678203.01,4346561.48 678233.98,4346561.06 678266.44,4346566.44 678299.97,4346577.06 678334.12,4346592.4 678368.47,4346611.91 678402.56,4346635.06 678435.98,4346661.32 678468.28,4346690.15 678499.03,4346721 678527.8,4346753.35 678554.14,4346786.66 678577.88,4346820.46 678599.41,4346854.46 678619.23,4346888.41 678637.83,4346922.03 678655.7,4346955.05 678673.32,4346987.22 678691.2,4347018.27 678709.8,4347047.93 678729.64,4347075.93 678751.19,4347102.02 678774.95,4347125.93 678801.4,4347147.38 678830.83,4347166.3 678862.55,4347183.42 678895.59,4347199.72 678928.98,4347216.19 678961.75,4347233.79 678992.94,4347253.51 679021.9,4347275.89 679048.49,4347300.87 679072.58,4347328.31 679094.09,4347358.09 679112.88,4347390.07 679128.87,4347424.13 679141.92,4347460.14 679151.94,4347497.97 679158.82,4347537.5 679162.44,4347578.58 679163.17,4347620.77 679162.72,4347662.61 679163,4347702.54 679165.94,4347738.95 679173.45,4347770.28 679187.46,4347794.92 679209.32,4347811.87 679238.35,4347822.18 679273.47,4347827.34 679313.56,4347828.82 679357.52,4347828.13 679404.26,4347826.74 679452.32,4347826.2 679498.62,4347828.39 679539.59,4347835.27 679571.67,4347848.79 679591.26,4347870.91 679595.12,4347903.39 679585.3,4347944.21 679568.44,4347988.19 679551.31,4348030 679540.7,4348064.33 679543.37,4348085.9 679564.84,4348090.77 679601.42,4348085.19 679645.37,4348079.85 679689.27,4348084.47 679729.47,4348096.97 679764.84,4348107.69 679794.22,4348106.86 679816.76,4348086.41 679833.38,4348051.02 679845.74,4348010.8 679853.99,4347971.23 679856.76,4347933.18 679852.62,4347897.31 679840.12,4347864.3 679817.96,4347834.77 679786.73,4347808.72 679748.65,4347785.6 679705.97,4347764.88 679660.96,4347745.99 679615.86,4347728.4 679572.95,4347711.55 679534.47,4347694.9 679502.68,4347677.88 679479.85,4347659.97 679468.22,4347640.59 679470.07,4347619.21 679486.86,4347595.35 679513.93,4347569.18 679543.7,4347541.13 679568.59,4347511.67 679581.08,4347481.24 679577.79,4347450.26 679561.75,4347419.11 679536.49,4347388.14 679505.56,4347357.71 679472.5,4347328.18 679424.56,4347286.05 679379.42,4347246.3 679336.68,4347208.43 679295.95,4347171.98 679256.83,4347136.44 679218.94,4347101.35 679181.87,4347066.21 679145.24,4347030.55 679108.64,4346993.88 679071.69,4346955.72 679034,4346915.58 678995.26,4346873 678957.48,4346827.82 678924.88,4346780.18 678901.75,4346730.25 678892.42,4346678.18 678899.29,4346624.33 678909.7,4346570.55 678908.61,4346518.91 678894.86,4346470.02 678869.79,4346424.23 678834.74,4346381.88 678791.06,4346343.3 678740.1,4346308.85 678683.18,4346278.87 678621.67,4346253.7 678556.9,4346233.69 678490.21,4346219.17 678422.95,4346210.49 678356.44,4346207.98 678291.62,4346211.68 678229.1,4346221.42 678169.5,4346237.01 678113.42,4346258.26 678061.49,4346284.99 678014.3,4346316.99 677972.47,4346354.1 677936.62,4346396.12 677907.35,4346442.86 677885.27,4346494.14 677870.79,4346549.67 677862.1,4346607.98 677856.05,4346666.96 677849.46,4346724.43 677839.17,4346778.24 677821.99,4346826.24 677794.76,4346866.28 677755.66,4346896.82 677706.76,4346918.12 677650.86,4346930.78 677590.72,4346935.39 677529.15,4346932.54 677468.93,4346922.81 677412.53,4346906.9 677359.97,4346886.37 677310.03,4346863.2 677261.46,4346839.39 677213.05,4346816.91 677163.55,4346797.77 677112.02,4346783.42 677058.69,4346772.98 677004.2,4346764.87 676949.15,4346757.53 676894.14,4346749.39 676839.8,4346738.87 676786.72,4346724.4 676735.5,4346704.52 676686,4346679.79 676637.39,4346652.85 676588.81,4346626.39 676539.41,4346603.13 676488.32,4346585.78 676434.89,4346576.44 676379.55,4346574.1 676323.08,4346576.69 676266.24,4346582.17 676209.84,4346588.47 676154.63,4346593.53 676101.41,4346595.3 676050.96,4346591.71 676003.71,4346581.41 675959.28,4346564.8 675917.15,4346542.55 675876.81,4346515.33 675837.73,4346483.8 675799.4,4346448.64 675761.3,4346410.5 675722.91,4346370.07 675683.71,4346328.02 675643.18,4346285 675600.81,4346241.69 675556.07,4346198.76 675508.46,4346156.87 675457.44,4346116.7 675402.52,4346078.92 675344.53,4346045.48 675287.39,4346021.16 675235.46,4346011.17 675193.06,4346020.7 675183.81,4346027.23 675175.45,4346035.4 675167.89,4346045.06 675161.02,4346056.04 675154.74,4346068.2 675148.93,4346081.38 675143.5,4346095.42 675138.34,4346110.18 675133.33,4346125.5 675128.39,4346141.22 675123.39,4346157.19 675118.24,4346173.25 675112.83,4346189.25 675107.05,4346205.04 675100.81,4346220.47 675093.98,4346235.37 675086.5,4346249.62 675078.38,4346263.21 675069.62,4346276.1 675060.24,4346288.29 675050.26,4346299.74 675039.69,4346310.46 675028.55,4346320.41 675016.86,4346329.58 675004.63,4346337.95 674991.87,4346345.51 674978.6,4346352.24 674964.84,4346358.11 674950.6,4346363.12 674935.9,4346367.25 674920.81,4346370.5 674905.4,4346372.91 674889.74,4346374.5 674873.92,4346375.3 674858,4346375.31 674842.07,4346374.58 674826.2,4346373.12 674810.47,4346370.96 674794.96,4346368.12 674779.73,4346364.62 674764.87,4346360.49 674750.46,4346355.75 674736.56,4346350.43 674723.26,4346344.54 674710.63,4346338.12 674698.75,4346331.19 674687.7,4346323.77 674677.53,4346315.87 674668.25,4346307.53 674659.84,4346298.74 674652.26,4346289.53 674645.5,4346279.89 674639.53,4346269.85 674634.32,4346259.41 674629.85,4346248.59 674626.1,4346237.39 674623.05,4346225.83 674620.66,4346213.92 674618.92,4346201.68 674617.8,4346189.1 674617.28,4346176.21 674617.33,4346163.01 674617.93,4346149.52 674619.05,4346135.75 674620.67,4346121.71 674622.77,4346107.41 674625.31,4346092.87 674628.29,4346078.09 674631.67,4346063.08 674635.43,4346047.86 674639.54,4346032.44 674643.99,4346016.83 674648.74,4346001.04 674653.77,4345985.08 674659.06,4345968.97 674664.59,4345952.71 674670.32,4345936.32 674676.24,4345919.81 674682.32,4345903.19 674688.54,4345886.47 674694.88,4345869.66 674701.3,4345852.78 674707.78,4345835.83 674714.31,4345818.83 674720.86,4345801.79 674727.39,4345784.72 674733.9,4345767.63 674740.34,4345750.53 674746.71,4345733.44 674752.97,4345716.37 674759.11,4345699.32 674765.09,4345682.31 674770.9,4345665.35 674776.5,4345648.45 674781.88,4345631.63 674787.01,4345614.89 674791.87,4345598.24 674796.42,4345581.71 674800.66,4345565.29 674804.45,4345549.44 674807.92,4345533.71 674811.05,4345518.1 674813.84,4345502.62 674816.3,4345487.24 674818.41,4345471.98 674820.19,4345456.84 674821.62,4345441.81 674822.7,4345426.88 674823.43,4345412.07 674823.8,4345397.36 674823.83,4345382.76 674823.49,4345368.26 674822.79,4345353.86 674821.73,4345339.56 674820.3,4345325.36 674818.51,4345311.25 674816.34,4345297.24 674813.81,4345283.33 674810.89,4345269.5 674807.6,4345255.76 674803.92,4345242.12 674799.87,4345228.55 674795.42,4345215.08 674790.59,4345201.68 674785.37,4345188.37 674779.75,4345175.14 674773.74,4345161.98 674767.32,4345148.9 674760.51,4345135.9 674753.29,4345122.96 674745.68,4345110.11 674737.67,4345097.36 674729.29,4345084.71 674720.54,4345072.19 674711.44,4345059.82 674701.99,4345047.61 674692.2,4345035.56 674682.09,4345023.71 674671.67,4345012.07 674660.94,4345000.65 674649.93,4344989.46 674638.63,4344978.53 674627.07,4344967.86 674615.24,4344957.48 674603.17,4344947.4 674590.86,4344937.63 674578.32,4344928.2 674565.57,4344919.11 674552.61,4344910.39 674539.46,4344902.04 674526.12,4344894.09 674512.62,4344886.55 674498.95,4344879.43 674485.13,4344872.76 674471.17,4344866.54 674457.08,4344860.79 674442.87,4344855.54 674428.55,4344850.78 674414.14,4344846.55 674399.64,4344842.85 674385.07,4344839.7 674370.43,4344837.12 674355.74,4344835.13 674341,4344833.73 674326.23,4344832.94 674311.44,4344832.78 674296.64,4344833.27 674281.85,4344834.42 674267.06,4344836.25 674252.29,4344838.77 674237.56,4344841.99 674222.86,4344845.87 674208.21,4344850.35 674193.61,4344855.36 674179.07,4344860.84 674164.58,4344866.73 674150.16,4344872.95 674135.82,4344879.46 674121.55,4344886.18 674107.36,4344893.06 674093.25,4344900.02 674079.24,4344907 674065.33,4344913.95 674051.52,4344920.79 674037.82,4344927.46 674024.24,4344933.9 674010.77,4344940.05 673997.43,4344945.84 673984.22,4344951.21 673971.14,4344956.1 673958.2,4344960.43 673945.41,4344964.15 673932.77,4344967.19 673920.29,4344969.5 673907.97,4344971 673895.81,4344971.63 673883.83,4344971.33 673872.03,4344970.04 673865.13,4344968.78 673858.29,4344967.17 673851.51,4344965.21 673844.78,4344962.91 673838.1,4344960.29 673831.47,4344957.36 673824.88,4344954.14 673818.33,4344950.62 673811.82,4344946.84 673805.34,4344942.79 673798.89,4344938.49 673792.47,4344933.95 673786.07,4344929.19 673779.68,4344924.22 673773.32,4344919.05 673766.96,4344913.68 673760.62,4344908.14 673754.27,4344902.44 673747.94,4344896.58 673741.59,4344890.59 673735.25,4344884.46 673728.89,4344878.22 673722.52,4344871.88 673716.14,4344865.44 673709.73,4344858.93 673703.31,4344852.34 673696.86,4344845.7 673690.37,4344839.02 673683.86,4344832.31 673677.31,4344825.58 673670.71,4344818.84 673664.08,4344812.11 673657.39,4344805.4 673650.66,4344798.71 673643.87,4344792.07 673637.03,4344785.48 673630.12,4344778.96 673623.15,4344772.51 673616.11,4344766.16 673609,4344759.91 673601.81,4344753.77 673594.55,4344747.76 673587.2,4344741.89 673579.77,4344736.17 673572.25,4344730.61 673564.65,4344725.21 673556.96,4344719.97 673549.2,4344714.89 673541.36,4344709.97 673533.45,4344705.21 673525.47,4344700.61 673517.42,4344696.16 673509.31,4344691.88 673501.14,4344687.76 673492.91,4344683.79 673484.62,4344679.98 673476.28,4344676.33 673467.9,4344672.84 673459.46,4344669.51 673450.99,4344666.34 673442.47,4344663.33 673433.91,4344660.47 673425.32,4344657.77 673416.7,4344655.23 673408.05,4344652.85 673399.37,4344650.63 673390.67,4344648.56 673381.95,4344646.65 673373.22,4344644.9 673364.47,4344643.31 673355.7,4344641.87 673346.93,4344640.59 673338.15,4344639.47 673329.37,4344638.51 673320.59,4344637.7 673311.82,4344637.05 673303.05,4344636.55 673294.29,4344636.22 673285.54,4344636.04 673276.8,4344636.01 673268.08,4344636.14 673259.39,4344636.43 673250.71,4344636.88 673242.07,4344637.48 673233.45,4344638.23 673224.87,4344639.15 673216.32,4344640.22 673207.8,4344641.44 673199.33,4344642.82 673190.91,4344644.35 673182.53,4344646.04 673174.2,4344647.89 673165.92,4344649.89 673157.7,4344652.05 673149.53,4344654.36 673141.43,4344656.82 673133.39,4344659.44 673125.42,4344662.22 673117.52,4344665.15 673087.26,4344678.06 673057.96,4344693.04 673029.49,4344709.77 673001.68,4344727.95 672974.39,4344747.27 672947.48,4344767.44 672920.77,4344788.14 672894.14,4344809.06 672867.42,4344829.9 672840.47,4344850.35 672813.14,4344870.11 672785.27,4344888.88 672756.72,4344906.33 672727.33,4344922.18 672696.96,4344936.1 672665.45,4344947.8 672632.66,4344956.98 672598.62,4344963.37 672563.81,4344966.86 672528.8,4344967.36 672494.13,4344964.77 672460.34,4344958.99 672427.99,4344949.92 672397.62,4344937.46 672369.78,4344921.52 672344.65,4344902.22 672321.79,4344880.05 672300.66,4344855.55 672280.75,4344829.24 672261.56,4344801.66 672242.55,4344773.34 672223.21,4344744.81 672203.03,4344716.61 672181.49,4344689.26 672158.06,4344663.29 672132.41,4344639.17 672104.71,4344617.07 672075.29,4344597.14 672044.42,4344579.51 672012.41,4344564.31 671979.57,4344551.7 671946.18,4344541.79 671912.56,4344534.73 671879,4344530.66 671845.79,4344529.71 671813.25,4344532.02 671781.66,4344537.72 671751.11,4344546.72 671721.52,4344558.72 671692.75,4344573.41 671664.72,4344590.46 671637.3,4344609.58 671610.39,4344630.45 671583.88,4344652.74 671557.65,4344676.16 671531.6,4344700.39 671505.61,4344725.11 671479.58,4344750.02 671453.45,4344774.87 671427.17,4344799.47 671400.72,4344823.64 671374.07,4344847.21 671347.2,4344870 671320.08,4344891.82 671292.67,4344912.5 671264.95,4344931.86 671236.89,4344949.71 671208.47,4344965.88 671179.66,4344980.19 671150.42,4344992.46 671120.73,4345002.5 671090.56,4345010.15 671059.88,4345015.21 671028.7,4345017.73 670997.05,4345018.02 670964.97,4345016.42 670932.5,4345013.26 670899.68,4345008.87 670866.55,4345003.59 670833.15,4344997.75 670799.52,4344991.69 670765.7,4344985.75 670731.73,4344980.25 670697.65,4344975.54 670663.5,4344971.95 670629.32,4344969.81 670595.14,4344969.45 670561.02,4344971.21 670527.06,4344975.23 670493.39,4344981.47 670460.19,4344989.88 670427.61,4345000.41 670395.8,4345013.02 670364.93,4345027.66 670335.15,4345044.29 670306.61,4345062.86 670279.48,4345083.32 670253.91,4345105.63 670230.06,4345129.74 670225.25,4345135.07 670220.51,4345140.46 670215.84,4345145.92 670211.24,4345151.44 670206.69,4345157 670202.19,4345162.61 670197.74,4345168.25 670193.31,4345173.91 670188.92,4345179.59 670184.55,4345185.29 670180.19,4345190.98 670175.84,4345196.68 670171.48,4345202.36 670167.12,4345208.02 670162.75,4345213.66 670158.36,4345219.26 670153.93,4345224.82 670149.48,4345230.33 670144.98,4345235.78 670140.43,4345241.17 670135.82,4345246.48 670131.16,4345251.72 670126.42,4345256.87 670121.61,4345261.93 670116.71,4345266.88 670111.72,4345271.73 670106.63,4345276.45 670101.44,4345281.06 670096.13,4345285.53 670090.71,4345289.86 670085.16,4345294.05 670079.48,4345298.08 670073.66,4345301.94 670067.69,4345305.64 670061.57,4345309.17 670055.32,4345312.54 670048.93,4345315.76 670042.43,4345318.83 670035.81,4345321.77 670029.08,4345324.58 670022.26,4345327.27 670015.35,4345329.86 670008.37,4345332.34 670001.31,4345334.74 669994.18,4345337.05 669987.01,4345339.28 669979.78,4345341.45 669972.52,4345343.56 669965.23,4345345.63 669957.92,4345347.65 669950.6,4345349.65 669943.27,4345351.62 669935.95,4345353.58 669928.64,4345355.53 669921.35,4345357.48 669914.09,4345359.45 669906.87,4345361.44 669899.69,4345363.46 669892.57,4345365.52 669885.52,4345367.62 669878.53,4345369.78 669871.62,4345372.01 669864.81,4345374.31 669858.09,4345376.68 669851.47,4345379.15 669844.97,4345381.72 669838.59,4345384.4 669832.34,4345387.19 669826.23,4345390.11 669820.26,4345393.16 669814.45,4345396.35 669808.81,4345399.69 669803.34,4345403.19 669798.05,4345406.87 669792.95,4345410.71 669788.04,4345414.75 669783.34,4345418.98 669778.86,4345423.41 669774.6,4345428.05 669770.57,4345432.91 669766.77,4345437.99 669763.19,4345443.29 669759.83,4345448.79 669756.68,4345454.48 669753.73,4345460.37 669750.98,4345466.44 669748.42,4345472.69 669746.04,4345479.11 669743.83,4345485.69 669741.8,4345492.43 669739.92,4345499.31 669738.2,4345506.34 669736.63,4345513.5 669735.2,4345520.79 669733.9,4345528.2 669732.73,4345535.72 669731.68,4345543.35 669730.75,4345551.07 669729.92,4345558.89 669701.63,4345527.5 669668.94,4345494.5 669645.06,4345459 669621.19,4345428.5 669596,4345415.5 669546.69,4345401.5 669501.19,4345392.5 669464.56,4345386 669402.63,4345374 669354.56,4345363.5 669309.06,4345358.5 669262.25,4345352 669219.31,4345344 669167.44,4345342.5 669116.81,4345341 669061.19,4345337 669020.69,4345335.5 668977.75,4345325 668929.75,4345311 668899.44,4345302 668860.25,4345287.5 668807.25,4345262 668772,4345238 668740.5,4345210 668722.94,4345177 668692.75,4345144 668678.94,4345123.5 668653.81,4345088 668625,4345038.5 668597.31,4345005.5 668574.69,4344981.5 668552,4344962 668531.88,4344937 668528.94,4344932 668488.94,4344920 668467.5,4344912.5 668442.19,4344911 668362.63,4344888 668339.81,4344886.5 668310.75,4344882.5 668290.5,4344881 668276.63,4344880 668258.88,4344877 668215.88,4344878 668209.63,4344865.5 668172.94,4344863 668143.88,4344857.5 668121.13,4344850 668087.06,4344832 668067,4344799 668053.19,4344775 668050.88,4344738 668109.13,4344731 668163.5,4344728.5 668221.75,4344724 668288.81,4344718 668333.13,4344714.5 668366,4344714.5 668434.75,4344711.5 668438.25,4344698.5 668471.44,4344644 668484.31,4344599 668501.06,4344539.5 668521.75,4344457.5 668529.56,4344413 668535.63,4344388.5 668537.56,4344331 668541.56,4344290.5 668544.25,4344262.5 668550.81,4344223.5 668553.44,4344204.5 668548.5,4344170 668534.75,4344147.5 668514.63,4344120.5 668486.94,4344091.5 668460.5,4344068.5 668435.31,4344043 668416.44,4344021.5 668395.06,4344005 668369.88,4343982 668351,4343961.5 668328.38,4343927.5 668303.25,4343893 668285.63,4343873 668263,4343848.5 668244.13,4343831 668224,4343803 668201.38,4343776 668182.5,4343754.5 668158.63,4343729 668140.94,4343717.5 668101.75,4343711 668057.56,4343702 668022.13,4343700.5 667963.94,4343695 667932.31,4343695 667900.69,4343695 667864,4343698.5 667846.25,4343702 667812.25,4343713.5 667729.75,4343728 667695.5,4343735 667659.88,4343751.5 667641.56,4343775 667606.19,4343778 667487.69,4343715 667449.25,4343658.5 667451.38,4343606.5 667494,4343570.5 667523.5,4343553 667544.19,4343535.5 667604.63,4343494.5 667662.56,4343454 667698.69,4343425 667742.63,4343385 667779.25,4343323.5 667812.25,4343254 667830.81,4343210 667846.19,4343127.5 667846.44,4343036.5 667830,4342956 667814.69,4342886 667777.81,4342810.5 667734.5,4342737 667690.75,4342690.5 667532.56,4342642.5 667472.81,4342641.5 667432.19,4342638 667408.19,4342627.5 667445.69,4342666.5 667494.88,4342692.5 667535.13,4342718.5 667582.56,4342770.5 667620.69,4342848.5 667671.56,4342925.5 667720.13,4342986 667758.69,4343037.5 667784.44,4343092.5 667788.69,4343143.5 667745.63,4343208.5 667691.44,4343252 667607.75,4343310.5 667535.81,4343354 667479.19,4343392.5 667439.25,4343423.5 667401.88,4343452 667364.25,4343496 667349.5,4343537.5 667342.63,4343570.5 667328.94,4343627.5 667319.31,4343670.5 667299.38,4343721 667281.81,4343779 667278.25,4343861 667278.25,4343929 667298.06,4343984 667307.38,4343991 667315.5,4343997 667322.63,4344002 667328.88,4344006.5 667334.38,4344010 667339.25,4344013 667343.69,4344015.5 667347.88,4344018 667351.81,4344020 667355.56,4344022.5 667359.19,4344024.5 667362.69,4344026.5 667366.13,4344028 667369.44,4344030 667372.63,4344031.5 667375.81,4344033 667379,4344035 667382.13,4344036.5 667385.19,4344038 667388.38,4344039 667391.56,4344040.5 667394.75,4344042 667398.06,4344043.5 667401.5,4344044.5 667405.06,4344046 667408.69,4344047.5 667412.38,4344049 667416.06,4344050 667419.81,4344051.5 667423.56,4344052.5 667427.31,4344054 667431,4344055 667434.56,4344056 667438.06,4344056.5 667441.56,4344057.5 667444.94,4344058 667448.25,4344058.5 667451.44,4344059 667454.63,4344059.5 667457.75,4344060 667460.81,4344060 667463.75,4344060 667466.63,4344060.5 667469.25,4344060.5 667471.69,4344060.5 667473.94,4344060.5 667475.81,4344060.5 667477.44,4344060.5 667478.69,4344060.5 667479.69,4344060.5 667480.5,4344060.5 667481.25,4344060.5 667482,4344060.5 667482.81,4344060.5 667483.81,4344060 667485.06,4344060 667486.63,4344059.5 667488.56,4344059.5 667490.69,4344059 667493.06,4344058.5 667495.63,4344058.5 667498.25,4344058 667500.94,4344057.5 667503.63,4344057 667506.31,4344056.5 667508.94,4344056 667511.56,4344055.5 667514.06,4344055 667516.5,4344054.5 667518.94,4344054 667521.25,4344053.5 667523.5,4344053 667525.69,4344052.5 667527.81,4344052 667529.88,4344051.5 667531.81,4344051 667533.69,4344050.5 667535.5,4344050 667537.31,4344049.5 667539,4344048.5 667540.63,4344048 667542.25,4344047 667543.75,4344046 667545.31,4344044.5 667546.81,4344043.5 667548.31,4344042 667549.81,4344040.5 667551.31,4344039 667552.81,4344037 667554.38,4344035 667555.94,4344033 667557.5,4344031 667559.06,4344028.5 667560.56,4344026.5 667562.13,4344024 667563.69,4344021.5 667565.19,4344019 667566.69,4344016.5 667568.19,4344014 667569.69,4344011 667571.19,4344008.5 667572.69,4344005.5 667574.19,4344003 667575.69,4344000 667577.25,4343997 667578.81,4343994.5 667580.38,4343991.5 667581.94,4343988.5 667583.5,4343985.5 667585.06,4343982 667586.63,4343979 667588.19,4343975.5 667589.69,4343972.5 667591.19,4343969 667592.63,4343965.5 667594,4343962 667595.31,4343958.5 667596.56,4343955.5 667597.69,4343952 667598.75,4343949 667599.63,4343946 667600.44,4343943 667601.19,4343940 667601.94,4343937.5 667602.63,4343934.5 667603.31,4343931.5 667604,4343929 667604.81,4343926 667605.69,4343923 667606.63,4343919.5 667607.69,4343916 667608.88,4343912.5 667610.19,4343908.5 667611.63,4343904 667613.31,4343899 667615.13,4343894 667617.13,4343888 667619.31,4343882 667621.63,4343874.5 667624.13,4343867 667626.81,4343858 667629.63,4343848.5 667632.5,4343838 667635.56,4343826.5 667653.38,4343812.5 667676.19,4343801 667714.19,4343797.5 667745.81,4343798 667783.75,4343799.5 667824.19,4343804.5 667843.25,4343805.5 667869.75,4343807.5 667910.25,4343802.5 667958.31,4343801.5 668003.88,4343803 668046.88,4343811 668094.88,4343825 668126.44,4343834 668163.06,4343847 668185.75,4343866 668209.63,4343901.5 668232.06,4343961 668260.88,4344013 668280.94,4344046 668301,4344078 668336.31,4344111 668382.81,4344164.5 668423.06,4344211.5 668434.31,4344235.5 668445.56,4344260.5 668436.5,4344309 668433.81,4344331.5 668431.19,4344346.5 668422.25,4344372 668410.63,4344406 668399.06,4344441.5 668373.75,4344445 668353.5,4344446.5 668296.56,4344453.5 668264.94,4344451 668218.13,4344453 668154.81,4344461.5 668132,4344464 668097.81,4344469 668064.88,4344474 668013,4344478.5 668011.75,4344472.5 668011.88,4344458.5 668010.63,4344448.5 667970.19,4344435.5 667972.63,4344459.5 667892.94,4344449 667895.63,4344420 667879.25,4344411 667875.31,4344432.5 667866.5,4344431 667850.06,4344428.5 667821,4344423 667793.13,4344420.5 667750.13,4344419 667741.38,4344400 667721.13,4344400 667694.56,4344400 667662.94,4344402 667640.06,4344425 667619.63,4344464 667599.13,4344500.5 667583.81,4344529.5 667562.38,4344522 667495.38,4344510 667485.44,4344477 667406.94,4344487 667458.13,4344700 667461.38,4344713.5 667491.75,4344720 667492.88,4344739 667495.38,4344755.5 667504,4344792.5 667473.75,4344777 667458.56,4344769.5 667433.31,4344759 667409.38,4344742.5 667345.13,4344694 667317.44,4344663.5 667285.94,4344634.5 667252,4344588.5 667213.13,4344534 667184.19,4344496 667161.56,4344463 667142.81,4344425 667118.94,4344388 667100.13,4344357.5 667073.69,4344332 667029.56,4344300 666996.88,4344268.5 666967.88,4344252 666923.63,4344239 666903.38,4344237.5 666870.44,4344246 666836.25,4344258.5 666799.5,4344267.5 666756.44,4344276 666726.06,4344278.5 666694.44,4344277 666660.31,4344273 666637.5,4344270.5 666609.69,4344269 666579.31,4344270 666548.94,4344272.5 666499.56,4344277 666461.63,4344281 666417.31,4344283 666381.88,4344286.5 666328.69,4344299 666295.69,4344311.5 666257.63,4344334 666238.56,4344345.5 666219.56,4344358 666203,4344373 666175.06,4344393 666158.56,4344411 666144.95,4344414.2 666131.43,4344417.54 666118.02,4344421.02 666104.71,4344424.66 666091.51,4344428.47 666078.43,4344432.45 666065.46,4344436.62 666052.62,4344440.98 666039.9,4344445.56 666027.32,4344450.34 666014.87,4344455.36 666002.56,4344460.61 665990.4,4344466.11 665978.39,4344471.86 665966.53,4344477.88 665954.82,4344484.14 665943.25,4344490.66 665931.83,4344497.42 665920.55,4344504.41 665909.4,4344511.64 665898.4,4344519.09 665887.52,4344526.76 665876.78,4344534.64 665866.17,4344542.73 665855.68,4344551.02 665845.31,4344559.51 665835.06,4344568.2 665824.94,4344577.06 665814.92,4344586.11 665805.02,4344595.33 665795.23,4344604.72 665785.55,4344614.27 665775.98,4344623.98 665766.5,4344633.84 665757.13,4344643.85 665747.85,4344653.99 665738.67,4344664.27 665729.58,4344674.68 665720.58,4344685.21 665711.67,4344695.85 665702.84,4344706.61 665694.1,4344717.48 665685.43,4344728.44 665676.85,4344739.5 665668.33,4344750.65 665659.89,4344761.87 665651.52,4344773.18 665643.21,4344784.56 665634.97,4344796 665626.79,4344807.51 665618.67,4344819.06 665610.61,4344830.67 665602.6,4344842.32 665594.64,4344854.01 665586.73,4344865.73 665578.87,4344877.47 665571.05,4344889.23 665563.28,4344901.01 665555.54,4344912.8 665547.83,4344924.59 665540.17,4344936.38 665532.53,4344948.16 665524.92,4344959.92 665517.34,4344971.67 665509.78,4344983.39 665502.24,4344995.08 665494.72,4345006.73 665487.21,4345018.34 665479.73,4345029.92 665472.27,4345041.46 665464.83,4345052.98 665457.42,4345064.47 665450.05,4345075.95 665442.71,4345087.41 665435.42,4345098.87 665428.16,4345110.33 665420.96,4345121.8 665413.8,4345133.27 665406.69,4345144.76 665399.65,4345156.27 665392.66,4345167.81 665385.74,4345179.37 665378.89,4345190.98 665372.1,4345202.62 665365.39,4345214.31 665358.76,4345226.05 665352.21,4345237.85 665345.74,4345249.71 665339.37,4345261.64 665333.08,4345273.64 665326.89,4345285.72 665320.8,4345297.89 665314.81,4345310.14 665308.92,4345322.48 665303.14,4345334.93 665297.48,4345347.48 665291.93,4345360.13 665286.5,4345372.91 665281.19,4345385.8</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.33">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Cortes II</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">685431.38,4350161.75 685468.55,4350092.96 685487.4,4349972.99 685480.72,4349864.41 685453.93,4349768.9 685413.44,4349682.03 685362.64,4349606.39 685303.83,4349547.22 685239.29,4349509.73 685171.26,4349498.98 685100.27,4349513.76 685024.82,4349545.39 684943.31,4349584.78 684854.59,4349622.87 684763.63,4349650.99 684679.76,4349660.74 684612.39,4349643.75 684569.36,4349593.13 684542.91,4349517.1 684516.27,4349432.58 684473.91,4349355.75 684413.82,4349294.32 684341.74,4349251.13 684263.5,4349229 684184.55,4349230.09 684106.89,4349250.54 684030.56,4349283.11 683955.6,4349320.63 683881.5,4349357.93 683807.27,4349391.83 683731.91,4349419.23 683654.39,4349437.02 683573.73,4349442.15 683490.06,4349435 683405.54,4349422.26 683322.58,4349411.25 683243.58,4349409.32 683170.92,4349423.81 683106.57,4349460.52 683050.3,4349517.82 683001.23,4349591.75 682958.14,4349677.02 682917.41,4349758.58 682874.36,4349817.09 682824.47,4349833.99 682766.94,4349807.15 682704.41,4349749.73 682639.64,4349675.47 682575.41,4349598.1 682514.7,4349529.48 682462.19,4349467.27 682423.35,4349402.56 682402.87,4349327.19 682395.13,4349242.87 682387.1,4349158.41 682365.57,4349082.79 682318.04,4349024.74 682245.31,4348987.94 682160.34,4348971.53 682075.85,4348974.34 681996.86,4348994.2 681923.56,4349028.28 681856,4349073.7 681793.05,4349126.74 681732.13,4349182.59 681670.61,4349236.42 681605.83,4349283.37 681535.13,4349318.59 681456.73,4349338.99 681377.87,4349360.18 681311.22,4349408.96 681265.52,4349496.03 681226.85,4349540.89 681181.66,4349479.11 681140.55,4349388.61 681104.18,4349314.67 681062.16,4349257.02 681005.64,4349213.91 680935.8,4349181.33 680857.28,4349154.55 680774.72,4349128.83 680692.75,4349099.41 680615.28,4349062.64 680544.13,4349018.07 680480.74,4348965.81 680426.56,4348906 680383,4348838.76 680350.98,4348764.5 680324.62,4348687.24 680293.43,4348613.49 680247.62,4348549.38 680187.04,4348495.68 680118.11,4348449.6 680046.28,4348408.18 679974.45,4348368.28 679905.18,4348326.73 679840.99,4348280.37 679784.43,4348226.04 679743.29,4348163.5 679739.57,4348100.45 679737.75,4348099.83 679735.96,4348099.21 679734.19,4348098.61 679732.46,4348098.02 679730.75,4348097.44 679729.06,4348096.86 679727.4,4348096.3 679725.77,4348095.75 679724.15,4348095.22 679722.57,4348094.69 679721,4348094.17 679719.46,4348093.66 679717.95,4348093.16 679716.45,4348092.67 679714.98,4348092.2 679713.52,4348091.73 679712.09,4348091.27 679710.68,4348090.82 679709.29,4348090.38 679707.91,4348089.96 679706.56,4348089.54 679705.22,4348089.13 679703.9,4348088.73 679702.6,4348088.34 679701.32,4348087.96 679700.05,4348087.59 679698.8,4348087.23 679697.56,4348086.88 679696.34,4348086.53 679695.14,4348086.2 679693.94,4348085.88 679692.76,4348085.56 679691.6,4348085.25 679690.45,4348084.96 679689.3,4348084.67 679688.18,4348084.39 679687.06,4348084.12 679685.95,4348083.86 679684.85,4348083.6 679683.77,4348083.36 679682.69,4348083.12 679681.62,4348082.9 679680.56,4348082.68 679679.51,4348082.47 679678.46,4348082.27 679677.42,4348082.07 679676.39,4348081.89 679675.37,4348081.71 679674.35,4348081.54 679673.33,4348081.38 679672.32,4348081.22 679671.32,4348081.08 679670.31,4348080.94 679669.31,4348080.81 679668.32,4348080.69 679667.32,4348080.57 679666.33,4348080.47 679665.34,4348080.37 679664.35,4348080.28 679663.36,4348080.19 679662.37,4348080.12 679661.38,4348080.05 679660.39,4348079.98 679659.4,4348079.93 679658.4,4348079.88 679657.4,4348079.84 679656.38,4348079.81 679655.34,4348079.79 679654.28,4348079.78 679653.2,4348079.78 679652.09,4348079.79 679650.95,4348079.81 679649.77,4348079.84 679648.56,4348079.89 679647.29,4348079.95 679645.99,4348080.02 679644.63,4348080.1 679643.21,4348080.2 679641.74,4348080.32 679640.2,4348080.45 679638.6,4348080.59 679636.92,4348080.75 679635.17,4348080.93 679633.35,4348081.13 679631.44,4348081.34 679629.44,4348081.57 679627.36,4348081.83 679625.18,4348082.1 679622.9,4348082.39 679620.53,4348082.7 679618.04,4348083.03 679615.45,4348083.39 679612.75,4348083.76 679609.92,4348084.16 679606.98,4348084.58 679603.92,4348085.03 679600.72,4348085.5 679597.39,4348085.99 679593.93,4348086.51 679595.47,4348097.96 679597,4348109.34 679598.52,4348120.63 679600.05,4348131.83 679601.6,4348142.94 679603.17,4348153.95 679604.76,4348164.85 679606.4,4348175.64 679608.07,4348186.31 679609.8,4348196.86 679611.59,4348207.28 679613.45,4348217.57 679615.38,4348227.71 679617.39,4348237.71 679619.49,4348247.56 679621.7,4348257.26 679624,4348266.79 679626.42,4348276.15 679628.96,4348285.35 679631.63,4348294.36 679634.44,4348303.18 679637.38,4348311.82 679640.48,4348320.26 679643.74,4348328.5 679647.17,4348336.54 679650.77,4348344.36 679654.55,4348351.96 679658.52,4348359.34 679662.69,4348366.49 679667.06,4348373.4 679671.64,4348380.07 679676.45,4348386.5 679681.48,4348392.67 679686.75,4348398.59 679692.26,4348404.25 679698.02,4348409.63 679704.04,4348414.74 679710.33,4348419.57 679716.89,4348424.12 679723.72,4348428.38 679730.83,4348432.36 679738.18,4348436.08 679745.78,4348439.57 679753.6,4348442.82 679761.63,4348445.87 679769.86,4348448.72 679778.27,4348451.39 679786.84,4348453.9 679795.57,4348456.27 679804.44,4348458.51 679813.44,4348460.63 679822.55,4348462.66 679831.75,4348464.61 679841.03,4348466.49 679850.39,4348468.33 679859.8,4348470.14 679869.24,4348471.93 679878.72,4348473.72 679888.2,4348475.53 679897.68,4348477.37 679907.15,4348479.26 679916.59,4348481.22 679925.98,4348483.26 679935.31,4348485.4 679944.56,4348487.65 679953.73,4348490.03 679962.8,4348492.56 679971.75,4348495.26 679980.57,4348498.13 679989.24,4348501.2 679997.76,4348504.48 680006.11,4348507.99 680014.26,4348511.75 680022.22,4348515.76 680029.96,4348520.05 680037.47,4348524.64 680044.73,4348529.53 680051.74,4348534.75 680058.49,4348540.29 680065.01,4348546.14 680071.3,4348552.26 680077.38,4348558.66 680083.26,4348565.29 680088.97,4348572.15 680094.51,4348579.22 680099.91,4348586.47 680105.17,4348593.89 680110.31,4348601.46 680115.36,4348609.16 680120.32,4348616.97 680125.2,4348624.87 680130.03,4348632.84 680134.83,4348640.86 680139.59,4348648.92 680144.35,4348656.98 680149.11,4348665.04 680153.9,4348673.08 680158.72,4348681.07 680163.59,4348689 680166.27,4348693.28 680168.96,4348697.53 680171.68,4348701.76 680174.41,4348705.96 680177.16,4348710.14 680179.93,4348714.3 680182.72,4348718.44 680185.53,4348722.56 680188.36,4348726.65 680191.2,4348730.73 680194.06,4348734.78 680196.94,4348738.82 680199.83,4348742.84 680202.74,4348746.83 680205.67,4348750.81 680208.61,4348754.78 680211.57,4348758.72 680214.55,4348762.65 680217.53,4348766.56 680220.54,4348770.45 680223.56,4348774.33 680226.59,4348778.2 680229.64,4348782.05 680232.7,4348785.88 680235.77,4348789.7 680238.86,4348793.51 680241.96,4348797.31 680245.07,4348801.09 680248.2,4348804.86 680251.34,4348808.62 680254.49,4348812.37 680257.65,4348816.1 680260.82,4348819.83 680264,4348823.55 680267.2,4348827.26 680270.4,4348830.96 680273.62,4348834.65 680276.84,4348838.33 680280.08,4348842.01 680283.32,4348845.67 680286.58,4348849.34 680289.84,4348852.99 680293.11,4348856.64 680296.39,4348860.29 680299.68,4348863.92 680302.98,4348867.56 680306.28,4348871.19 680309.59,4348874.82 680312.91,4348878.44 680316.24,4348882.07 680319.57,4348885.69 680322.91,4348889.31 680326.25,4348892.92 680329.6,4348896.54 680332.95,4348900.16 680336.31,4348903.77 680339.68,4348907.38 680343.05,4348911 680346.43,4348914.61 680349.81,4348918.22 680353.2,4348921.82 680356.6,4348925.42 680360,4348929.02 680363.4,4348932.62 680366.81,4348936.21 680370.23,4348939.79 680373.65,4348943.38 680377.08,4348946.95 680380.51,4348950.52 680383.95,4348954.09 680387.4,4348957.64 680390.85,4348961.2 680394.3,4348964.74 680397.76,4348968.28 680401.23,4348971.81 680404.71,4348975.33 680408.18,4348978.84 680411.67,4348982.34 680415.16,4348985.83 680418.66,4348989.32 680422.16,4348992.79 680425.66,4348996.25 680429.18,4348999.71 680432.7,4349003.15 680436.22,4349006.58 680439.75,4349010 680443.29,4349013.4 680446.83,4349016.79 680450.38,4349020.17 680453.93,4349023.54 680457.49,4349026.89 680461.06,4349030.23 680464.63,4349033.55 680468.21,4349036.86 680471.79,4349040.16 680475.38,4349043.43 680478.97,4349046.7 680482.57,4349049.94 680486.18,4349053.17 680500.34,4349065.63 680514.61,4349077.83 680529.02,4349089.75 680543.59,4349101.4 680558.34,4349112.77 680573.3,4349123.86 680588.48,4349134.65 680603.92,4349145.16 680619.62,4349155.36 680635.63,4349165.27 680651.96,4349174.87 680668.62,4349184.16 680685.66,4349193.13 680703.09,4349201.79 680720.92,4349210.12 680739.2,4349218.12 680757.93,4349225.79 680777.14,4349233.13 680796.86,4349240.12 680817.1,4349246.76 680837.9,4349253.06 680859.18,4349259.05 680880.72,4349264.88 680902.24,4349270.7 680923.49,4349276.69 680944.2,4349283 680964.11,4349289.79 680982.95,4349297.23 681000.46,4349305.46 681016.38,4349314.66 681030.44,4349324.99 681042.38,4349336.6 681051.94,4349349.65 681058.85,4349364.31 681063.15,4349380.58 681065.31,4349398.23 681065.85,4349417 681065.3,4349436.65 681064.17,4349456.91 681063,4349477.54 681062.29,4349498.28 681062.57,4349518.87 681064.36,4349539.06 681068.19,4349558.61 681074.57,4349577.25 681084.02,4349594.73 681096.74,4349610.81 681112.25,4349625.26 681129.94,4349637.88 681149.24,4349648.43 681169.56,4349656.7 681190.32,4349662.47 681210.94,4349665.52 681230.82,4349665.63 681249.39,4349662.59 681266.05,4349656.17 681280.47,4349646.35 681292.9,4349633.57 681303.71,4349618.37 681313.24,4349601.27 681321.86,4349582.8 681329.92,4349563.5 681337.79,4349543.9 681345.82,4349524.51 681354.37,4349505.88 681363.8,4349488.52 681374.47,4349472.98 681386.71,4349459.74 681400.59,4349448.91 681415.96,4349440.23 681432.63,4349433.41 681450.42,4349428.21 681469.18,4349424.34 681488.73,4349421.53 681508.89,4349419.53 681529.49,4349418.05 681550.36,4349416.84 681571.33,4349415.62 681592.22,4349414.11 681612.86,4349412.07 681633.09,4349409.21 681652.71,4349405.26 681671.58,4349399.96 681689.56,4349393.14 681706.71,4349384.88 681723.11,4349375.32 681738.82,4349364.61 681753.91,4349352.86 681768.47,4349340.21 681782.57,4349326.8 681796.27,4349312.76 681809.66,4349298.22 681822.8,4349283.33 681835.77,4349268.21 681848.64,4349252.99 681861.49,4349237.81 681874.39,4349222.81 681887.41,4349208.12 681900.62,4349193.87 681904.04,4349190.32 681907.47,4349186.8 681910.93,4349183.33 681914.4,4349179.89 681917.91,4349176.5 681921.44,4349173.15 681924.99,4349169.84 681928.58,4349166.58 681932.2,4349163.36 681935.85,4349160.19 681939.54,4349157.07 681943.26,4349153.99 681947.03,4349150.97 681950.83,4349148 681954.67,4349145.07 681958.56,4349142.2 681962.5,4349139.38 681966.48,4349136.62 681970.51,4349133.91 681974.59,4349131.26 681978.72,4349128.67 681982.91,4349126.13 681987.15,4349123.66 681991.45,4349121.24 681995.82,4349118.89 682000.24,4349116.59 682004.72,4349114.36 682009.27,4349112.2 682013.89,4349110.1 682018.58,4349108.06 682023.33,4349106.1 682028.16,4349104.2 682033.06,4349102.37 682038.03,4349100.61 682043.09,4349098.92 682048.22,4349097.31 682053.43,4349095.77 682058.72,4349094.3 682064.1,4349092.9 682069.55,4349091.59 682075.06,4349090.36 682080.63,4349089.21 682086.25,4349088.15 682091.91,4349087.18 682097.59,4349086.3 682103.3,4349085.52 682109.02,4349084.84 682114.75,4349084.27 682120.47,4349083.79 682126.18,4349083.43 682131.87,4349083.18 682137.52,4349083.05 682143.14,4349083.03 682148.71,4349083.14 682154.22,4349083.37 682159.67,4349083.72 682165.04,4349084.21 682170.33,4349084.83 682175.54,4349085.58 682180.64,4349086.48 682185.63,4349087.52 682190.51,4349088.7 682195.26,4349090.03 682199.87,4349091.52 682204.34,4349093.16 682208.67,4349094.96 682212.83,4349096.91 682216.82,4349099.03 682220.63,4349101.32 682224.26,4349103.78 682227.69,4349106.41 682230.92,4349109.22 682233.94,4349112.21 682236.74,4349115.38 682239.31,4349118.73 682241.64,4349122.27 682243.74,4349126 682245.62,4349129.89 682247.3,4349133.95 682248.78,4349138.16 682250.08,4349142.52 682251.21,4349147.01 682252.19,4349151.63 682253.02,4349156.37 682253.71,4349161.21 682254.29,4349166.15 682254.76,4349171.19 682255.13,4349176.3 682255.42,4349181.49 682255.63,4349186.73 682255.78,4349192.03 682255.89,4349197.38 682255.96,4349202.76 682256,4349208.16 682256.04,4349213.58 682256.07,4349219.01 682256.12,4349224.44 682256.19,4349229.85 682256.3,4349235.25 682258.32,4349271.44 682262.48,4349306.38 682268.62,4349340.22 682276.6,4349373.08 682286.26,4349405.11 682297.45,4349436.43 682310.01,4349467.19 682323.79,4349497.51 682338.63,4349527.53 682354.39,4349557.39 682370.91,4349587.22 682388.13,4349617.02 682406.1,4349646.64 682424.87,4349675.92 682444.5,4349704.7 682465.06,4349732.82 682486.58,4349760.12 682509.13,4349786.45 682532.77,4349811.63 682557.54,4349835.52 682583.51,4349857.95 682610.73,4349878.75 682639.26,4349897.78 682669.15,4349914.87 682700.46,4349929.85 682733.24,4349942.58 682767.56,4349952.89 682803.39,4349960.6 682840.16,4349965.4 682876.94,4349966.88 682912.81,4349964.63 682946.85,4349958.26 682978.14,4349947.37 683005.75,4349931.54 683028.81,4349910.42 683047.43,4349884.4 683062.63,4349854.59 683075.47,4349822.15 683087.03,4349788.19 683098.35,4349753.87 683110.51,4349720.33 683124.56,4349688.71 683141.56,4349660.14 683162.58,4349635.77 683188.44,4349616.55 683218.5,4349602.28 683251.53,4349592.27 683286.3,4349585.88 683321.59,4349582.41 683356.51,4349581.22 683390.99,4349581.68 683425.07,4349583.15 683458.78,4349585 683492.17,4349586.6 683525.26,4349587.32 683558.11,4349586.54 683590.75,4349583.62 683623.21,4349578.03 683655.52,4349569.88 683687.71,4349559.56 683719.79,4349547.46 683751.8,4349533.96 683783.75,4349519.45 683815.67,4349504.32 683847.59,4349488.94 683879.51,4349473.7 683911.48,4349459 683943.5,4349445.22 683975.61,4349432.73 684007.82,4349421.94 684040.17,4349413.22 684072.67,4349406.96 684105.35,4349403.55 684138.23,4349403.37 684171.33,4349406.81 684204.55,4349414.26 684236.24,4349426.38 684263.68,4349443.92 684286.08,4349466.71 684304.39,4349493.76 684319.65,4349524.01 684332.87,4349556.43 684345.08,4349589.97 684357.31,4349623.61 684370.58,4349656.29 684385.92,4349686.98 684404.34,4349714.63 684426.38,4349738.66 684451.71,4349759.2 684479.92,4349776.49 684510.6,4349790.75 684543.33,4349802.2 684577.72,4349811.08 684613.35,4349817.61 684649.8,4349822.01 684686.67,4349824.51 684723.55,4349825.34 684760.02,4349824.72 684795.68,4349822.88 684801.24,4349822.49 684806.76,4349822.08 684812.26,4349821.64 684817.73,4349821.18 684823.18,4349820.7 684828.6,4349820.2 684833.99,4349819.68 684839.36,4349819.15 684844.71,4349818.59 684850.04,4349818.02 684855.35,4349817.43 684860.64,4349816.83 684865.92,4349816.22 684871.17,4349815.59 684876.41,4349814.95 684881.64,4349814.3 684886.86,4349813.64 684892.06,4349812.97 684897.25,4349812.3 684902.44,4349811.62 684907.61,4349810.93 684912.78,4349810.23 684917.94,4349809.54 684923.09,4349808.83 684928.24,4349808.13 684933.39,4349807.43 684938.54,4349806.72 684943.69,4349806.02 684948.83,4349805.32 684953.98,4349804.62 684959.13,4349803.92 684964.28,4349803.23 684969.44,4349802.55 684974.61,4349801.87 684979.78,4349801.2 684984.96,4349800.54 684990.15,4349799.88 684995.35,4349799.24 685000.57,4349798.61 685005.79,4349797.99 685011.03,4349797.38 685016.28,4349796.79 685021.55,4349796.21 685026.84,4349795.65 685032.15,4349795.11 685037.47,4349794.58 685042.82,4349794.07 685048.18,4349793.59 685053.57,4349793.12 685058.99,4349792.68 685064.43,4349792.26 685069.89,4349791.86 685075.38,4349791.48 685080.9,4349791.14 685086.45,4349790.82 685092.03,4349790.52 685097.65,4349790.26 685103.29,4349790.02 685108.97,4349789.82 685114.69,4349789.64 685120.43,4349789.5 685126.2,4349789.4 685132,4349789.34 685137.81,4349789.32 685143.63,4349789.35 685149.47,4349789.42 685155.31,4349789.55 685161.14,4349789.74 685166.98,4349789.98 685172.8,4349790.28 685178.61,4349790.65 685184.4,4349791.09 685190.16,4349791.59 685195.9,4349792.17 685201.6,4349792.83 685207.27,4349793.56 685212.9,4349794.38 685218.48,4349795.29 685224.01,4349796.28 685229.48,4349797.36 685234.89,4349798.54 685240.24,4349799.82 685245.52,4349801.2 685250.72,4349802.68 685255.85,4349804.27 685260.89,4349805.97 685265.84,4349807.78 685270.71,4349809.71 685275.47,4349811.75 685280.14,4349813.92 685284.69,4349816.22 685289.14,4349818.64 685293.47,4349821.19 685297.69,4349823.88 685301.77,4349826.71 685305.73,4349829.67 685309.56,4349832.78 685313.25,4349836.04 685316.79,4349839.44 685319.01,4349841.73 685321.16,4349844.07 685323.26,4349846.48 685325.3,4349848.96 685327.28,4349851.49 685329.21,4349854.08 685331.09,4349856.72 685332.91,4349859.43 685334.68,4349862.19 685336.4,4349865 685338.08,4349867.87 685339.7,4349870.79 685341.29,4349873.76 685342.82,4349876.78 685344.32,4349879.84 685345.77,4349882.96 685347.18,4349886.13 685348.56,4349889.34 685349.9,4349892.59 685351.2,4349895.89 685352.47,4349899.23 685353.7,4349902.62 685354.9,4349906.04 685356.07,4349909.5 685357.22,4349913 685358.33,4349916.54 685359.42,4349920.12 685360.48,4349923.73 685361.52,4349927.37 685362.54,4349931.05 685363.54,4349934.76 685364.52,4349938.5 685365.48,4349942.27 685366.42,4349946.07 685367.34,4349949.9 685368.26,4349953.75 685369.16,4349957.63 685370.05,4349961.54 685370.92,4349965.47 685371.79,4349969.42 685372.66,4349973.39 685373.51,4349977.38 685374.37,4349981.39 685375.21,4349985.42 685376.06,4349989.47 685376.91,4349993.54 685377.76,4349997.61 685378.61,4350001.71 685379.46,4350005.81 685380.32,4350009.93 685381.18,4350014.06 685382.06,4350018.19 685382.94,4350022.34 685383.83,4350026.49 685384.72,4350030.64 685385.63,4350034.79 685386.54,4350038.93 685387.47,4350043.06 685388.4,4350047.18 685389.33,4350051.28 685390.28,4350055.36 685391.23,4350059.42 685392.19,4350063.46 685393.16,4350067.46 685394.14,4350071.43 685395.12,4350075.36 685396.12,4350079.25 685397.12,4350083.09 685398.12,4350086.89 685399.14,4350090.64 685400.16,4350094.34 685401.18,4350097.97 685402.22,4350101.55 685403.26,4350105.06 685404.31,4350108.5 685405.37,4350111.87 685406.43,4350115.17 685407.5,4350118.39 685408.57,4350121.52 685409.66,4350124.57 685410.75,4350127.53 685411.84,4350130.4 685412.94,4350133.18 685414.05,4350135.85 685415.16,4350138.42 685416.29,4350140.89 685417.41,4350143.25 685418.54,4350145.49 685419.68,4350147.62 685420.83,4350149.63 685421.98,4350151.51 685423.13,4350153.27 685424.29,4350154.9 685425.46,4350156.4 685426.63,4350157.75 685427.81,4350158.97 685429,4350160.05 685430.19,4350160.97 685431.38,4350161.75</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+  <gml:featureMember>
+    <cit:embalses_pol_300k fid="embalses_pol_300k.34">
+      <cit:entity>Complex Shape</cit:entity>
+      <cit:layer>55</cit:layer>
+      <cit:level>55</cit:level>
+      <cit:elevation>0.0</cit:elevation>
+      <cit:color>1</cit:color>
+      <cit:mslink_dmr>0</cit:mslink_dmr>
+      <cit:codigo>Embalse de Tous</cit:codigo>
+      <cit:tipo>Embalses</cit:tipo>
+      <cit:the_geom>
+        <gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#23030">
+          <gml:polygonMember>
+            <gml:Polygon>
+              <gml:outerBoundaryIs>
+                <gml:LinearRing>
+                  <gml:coordinates decimal="." cs="," ts=" ">692971.75,4346764 693178.84,4346666.87 693238.42,4346624.77 693307.02,4346594.09 693354.92,4346583.04 693425.93,4346583.04 693472.23,4346575.73 693514.85,4346568.38 693604.82,4346543.18 693659.19,4346475.2 693693.74,4346423.02 693717.97,4346361.03 693726.04,4346356.97 693798.2,4346312.71 693810.72,4346307.38 693862.57,4346359.03 693927.19,4346395.28 694021.48,4346433.73 694140.72,4346374.18 694240.09,4346311.51 694375.71,4346223.03 694438.23,4346204.93 694664.6,4346136.23 694714.99,4346085.57 694758.1,4346055.47 694816.89,4346021.7 694832.24,4346015 694840,4346014.02 694915.46,4346027.02 695112.9,4345867.56 695157.13,4345834.7 695318.81,4345681.93 695379.68,4345607.95 695421.15,4345571.66 695439.71,4345557.42 695454.38,4345557.42 695467.36,4345557.42 695524.85,4345609.6 695597.15,4345663.39 695668.07,4345683.26 695743.21,4345694.21 695826.7,4345669.88 695920.78,4345607.37 695954.76,4345580.92 696004.67,4345544.58 696059.3,4345490.49 696110.67,4345401.84 696159.89,4345320.79 696210.89,4345274.37 696277.83,4345194.16 696394.1,4345015.81 696469.27,4344859.47 696516.55,4344740.52 696550.09,4344694.04 696575.39,4344674.63 696585.09,4344672.64 696599.17,4344677.41 696694.13,4344702.05 696758.61,4344725.82 696834.45,4344755.34 696898.63,4344763.54 696976.5,4344773.49 697065.34,4344740.01 697168.05,4344671.76 697219.72,4344603.08 697280.84,4344510.46 697313.44,4344406.78 697334.37,4344291.44 697341.76,4344193.81 697334.71,4344121.6 697328.86,4344043.41 697328.86,4343987.59 697336.46,4343948.69 697355.59,4343910.55 697388.28,4343873.2 697395.16,4343866.45 697417.75,4343861.39 697445.67,4343857.82 697496.13,4343868.03 697557.85,4343875.92 697629.06,4343875.92 697673.69,4343875.92 697723.02,4343875.92 697761.26,4343868.18 697837.55,4343859.5 697933.79,4343801.09 698023.75,4343710.45 698043.04,4343610.62 698054.92,4343560.96 698054.69,4343550.07 698091.47,4343495.73 698108.79,4343453.58 698130.81,4343401.09 698197.41,4343326.44 698252.49,4343271.25 698403.53,4343150.51 698483.39,4343090.68 698578.95,4343027.13 698650.16,4342973.65 698698.71,4342877.67 698748.2,4342764.99 698770.65,4342654.5 698819.4,4342517.38 698868.83,4342388.24 698910.73,4342305.67 698962.62,4342181.7 698926.55,4342052.36 698867.55,4341915.51 698761.13,4341874.06 698729.04,4341696.35 698746.49,4341634.36 698766.71,4341582.59 698787.23,4341533.87 698832.27,4341448.06 698878.19,4341379.74 698919.11,4341336.3 698925.95,4341329.28 698985.59,4341294.97 699119.61,4341225.56 699217.86,4341187.43 699229.98,4341185.05 699325.16,4341177.54 699394.15,4341147.4 699474.98,4341120.59 699594.31,4341049.25 699673.04,4340958.8 699711.03,4340902.05 699783.24,4340805.75 699837.12,4340704.26 699871.69,4340635.77 699908.1,4340541.34 699938.92,4340480.9 699985.28,4340367.42 700025.35,4340234.23 700056.54,4340134.58 700092.88,4339953.82 700095.04,4339932.35 700104.69,4339883.09 700114.06,4339835.1 700115.52,4339830.37 700158.76,4339765.33 700200.69,4339661.63 700225.12,4339586.4 700229.62,4339554.01 700265.07,4339554.01 700366.13,4339515.27 700518.06,4339461.65 700594.81,4339385.21 700678.26,4339309.9 700721.74,4339240.86 700749.12,4339208.47 700802.07,4339132.53 700862.98,4339045.19 700915.34,4338930.25 700939.78,4338850.57 700975.32,4338744.37 701031.45,4338503.49 701031.45,4338390.5 701031.45,4338307.5 701031.45,4338201.61 701001.11,4338126.56 701003.25,4338109.07 701017.81,4338083.09 701032.5,4338057.25 701047.3,4338031.49 701062.14,4338005.76 701076.99,4337980.01 701091.78,4337954.2 701106.49,4337928.27 701121.06,4337902.18 701135.44,4337875.87 701149.59,4337849.3 701163.5,4337822.46 701177.23,4337795.4 701190.84,4337768.2 701204.38,4337740.91 701217.91,4337713.59 701231.5,4337686.31 701245.2,4337659.13 701259.07,4337632.12 701273.17,4337605.33 701287.56,4337578.82 701302.3,4337552.67 701317.44,4337526.92 701333.05,4337501.66 701349.18,4337476.93 701365.9,4337452.79 701383.26,4337429.33 701401.32,4337406.58 701420.15,4337384.62 701439.79,4337363.52 701460.29,4337343.3 701481.64,4337323.95 701503.81,4337305.44 701526.78,4337287.75 701550.53,4337270.86 701575.05,4337254.72 701600.3,4337239.33 701626.27,4337224.65 701652.95,4337210.65 701680.3,4337197.31 701708.3,4337184.61 701736.94,4337172.51 701766.2,4337160.98 701796.05,4337150.02 701826.47,4337139.58 701857.43,4337129.67 701888.76,4337120.64 701920.21,4337113.02 701951.53,4337107.35 701982.47,4337104.18 702012.77,4337104.05 702042.19,4337107.49 702070.47,4337115.06 702097.37,4337127.28 702122.64,4337144.68 702146.3,4337166.86 702168.66,4337192.38 702190.05,4337219.71 702210.82,4337247.32 702231.31,4337273.69 702251.85,4337297.3 702272.77,4337316.61 702294.42,4337330.11 702317.13,4337336.27 702341.18,4337333.67 702366.09,4337322.57 702390.72,4337304.58 702413.91,4337281.34 702434.52,4337254.51 702451.4,4337225.72 702463.77,4337196.28 702471.99,4337166.46 702476.62,4337136.34 702478.22,4337106 702477.35,4337075.53 702474.56,4337045 702470.42,4337014.5 702465.48,4336984.12 702460.31,4336953.93 702455.46,4336924.02 702451.48,4336894.47 702448.95,4336865.36 702448.42,4336836.77 702450.44,4336808.79 702455.37,4336781.47 702463.05,4336754.79 702473.29,4336728.71 702485.86,4336703.2 702500.56,4336678.23 702517.16,4336653.76 702535.47,4336629.77 702555.26,4336606.22 702576.33,4336583.08 702598.46,4336560.31 702621.43,4336537.89 702645.04,4336515.78 702669.08,4336493.95 702693.33,4336472.36 702717.58,4336450.98 702741.61,4336429.79 702762.87,4336410.86 702783.74,4336391.98 702804.16,4336373.07 702824.08,4336354.08 702843.45,4336334.93 702862.21,4336315.54 702880.33,4336295.86 702897.74,4336275.8 702914.39,4336255.3 702930.24,4336234.3 702945.23,4336212.71 702959.3,4336190.47 702972.42,4336167.5 702984.52,4336143.75 702995.58,4336119.15 703005.71,4336093.8 703015.11,4336067.84 703024,4336041.44 703032.56,4336014.76 703041.01,4335987.96 703049.54,4335961.19 703058.35,4335934.61 703067.65,4335908.38 703077.63,4335882.67 703088.5,4335857.62 703100.47,4335833.4 703113.72,4335810.16 703128.46,4335788.07 703144.9,4335767.28 703163.24,4335747.95 703183.67,4335730.24 703206.4,4335714.31 703231.61,4335700.31 703259.2,4335688.17 703288.78,4335677.68 703319.98,4335668.57 703352.41,4335660.62 703385.68,4335653.58 703419.42,4335647.21 703453.22,4335641.27 703486.72,4335635.51 703519.52,4335629.69 703551.24,4335623.57 703581.5,4335616.91 703609.9,4335609.47 703636.07,4335601 703659.63,4335591.27 703680.18,4335580.03 703697.34,4335567.03 703710.72,4335552.05 703719.95,4335534.83 703724.63,4335515.13 703724.39,4335492.71 703719.02,4335467.74 703709.03,4335442.04 703695.16,4335417.86 703678.07,4335397.1 703658.3,4335379.77 703636.31,4335365.26 703612.56,4335352.96 703587.52,4335342.24 703561.65,4335332.5 703535.43,4335323.13 703509.31,4335313.51 703483.77,4335303.02 703459.27,4335291.06 703436.27,4335277.01 703415.24,4335260.25 703396.58,4335240.43 703380.49,4335217.89 703367.11,4335193.14 703356.61,4335166.67 703349.14,4335138.98 703344.85,4335110.56 703343.91,4335081.9 703346.47,4335053.5 703352.68,4335025.86 703362.67,4334999.44 703376.01,4334974.32 703391.96,4334950.33 703409.73,4334927.28 703428.55,4334904.97 703447.65,4334883.24 703466.25,4334861.89 703483.59,4334840.73 703498.89,4334819.58 703511.37,4334798.26 703520.27,4334776.57 703524.81,4334754.34 703524.46,4334731.45 703519.59,4334708.03 703510.77,4334684.27 703498.58,4334660.37 703483.59,4334636.5 703466.36,4334612.88 703447.47,4334589.68 703427.49,4334567.1 703406.99,4334545.34 703386.54,4334524.57 703385.24,4334523.28 703383.95,4334521.99 703382.66,4334520.71 703381.37,4334519.43 703380.09,4334518.16 703378.8,4334516.89 703377.52,4334515.62 703376.24,4334514.37 703374.96,4334513.11 703373.69,4334511.86 703372.41,4334510.62 703371.14,4334509.38 703369.87,4334508.14 703368.6,4334506.91 703367.33,4334505.68 703366.06,4334504.46 703364.79,4334503.24 703363.53,4334502.03 703362.26,4334500.82 703361,4334499.61 703359.74,4334498.41 703358.47,4334497.21 703357.21,4334496.02 703355.95,4334494.83 703354.69,4334493.65 703353.43,4334492.47 703352.17,4334491.3 703350.91,4334490.12 703349.65,4334488.96 703348.39,4334487.79 703347.13,4334486.63 703345.87,4334485.48 703344.61,4334484.33 703343.34,4334483.18 703342.08,4334482.03 703340.82,4334480.89 703339.56,4334479.76 703338.29,4334478.63 703337.03,4334477.5 703335.76,4334476.37 703334.49,4334475.25 703333.23,4334474.13 703331.96,4334473.02 703330.69,4334471.91 703329.42,4334470.8 703328.14,4334469.7 703326.87,4334468.6 703325.59,4334467.5 703324.31,4334466.41 703323.03,4334465.32 703321.75,4334464.23 703320.46,4334463.15 703319.18,4334462.07 703317.89,4334461 703316.6,4334459.92 703315.3,4334458.85 703314.01,4334457.79 703312.71,4334456.73 703311.41,4334455.67 703310.1,4334454.61 703308.8,4334453.55 703307.49,4334452.5 703306.18,4334451.46 703304.86,4334450.41 703303.54,4334449.37 703302.22,4334448.33 703300.89,4334447.29 703299.56,4334446.26 703298.23,4334445.23 703296.89,4334444.2 703295.55,4334443.18 703294.21,4334442.16 703292.86,4334441.14 703291.51,4334440.12 703290.15,4334439.11 703288.79,4334438.1 703287.43,4334437.09 703286.06,4334436.08 703284.68,4334435.08 703283.31,4334434.08 703281.92,4334433.08 703280.53,4334432.08 703279.14,4334431.09 703277.75,4334430.1 703276.34,4334429.11 703274.93,4334428.12 703273.52,4334427.14 703272.1,4334426.16 703270.68,4334425.18 703269.25,4334424.2 703267.82,4334423.23 703266.38,4334422.25 703264.93,4334421.28 703263.48,4334420.31 703262.02,4334419.35 703260.56,4334418.38 703259.09,4334417.42 703257.61,4334416.46 703256.13,4334415.5 703239.69,4334330.5 703184.5,4334313.5 703116.69,4334292.5 703030.38,4334265.5 703031.38,4334286 703051.88,4334359.5 703088.94,4334423.5 703002.25,4334452 702923.81,4334472.5 702873.25,4334478 702833,4334466.5 702813.44,4334463.5 702792.81,4334450 702774.31,4334414.5 702749.5,4334411.5 702716.5,4334414.5 702680.38,4334415.5 702659.75,4334409.5 702656.69,4334397 702627.81,4334404 702580.31,4334408.5 702526.69,4334403 702482.31,4334403 702448.25,4334434 702448.19,4334466 702459.5,4334506 702467.69,4334555.5 702449.06,4334589.5 702423.25,4334622.5 702391.19,4334652.5 702335.44,4334689.5 702269.38,4334726.5 702227,4334761.5 702203.25,4334803 702177.94,4334860 702164.38,4334911.5 702125.19,4334959.5 702081.88,4334990.5 702034.5,4334993.5 702030.38,4335009 702054.94,4335041 702074.38,4335087 702068.06,4335140.5 702042.19,4335200.5 702010.19,4335237.5 701967.94,4335262 701918.5,4335263 701865,4335261.5 701780.63,4335248 701731.25,4335241.5 701715.75,4335262.5 701787.69,4335310 701844.25,4335334.5 701896.69,4335355.5 701918.19,4335386.5 701905.81,4335409 701878.94,4335449 701834.5,4335502.5 701798.31,4335570 701741.5,4335644 701690.94,4335696.5 701638.38,4335736.5 701569.31,4335762 701500.31,4335770 701425.19,4335770 701355.25,4335761.5 701282.19,4335747 701228.38,4335732 701227.38,4335731.81 701226.39,4335731.62 701225.4,4335731.43 701224.4,4335731.24 701223.41,4335731.06 701222.42,4335730.87 701221.43,4335730.69 701220.43,4335730.51 701219.44,4335730.33 701218.45,4335730.15 701217.46,4335729.97 701216.47,4335729.8 701215.48,4335729.62 701214.5,4335729.45 701213.51,4335729.28 701212.52,4335729.11 701211.53,4335728.94 701210.54,4335728.77 701209.56,4335728.6 701208.57,4335728.43 701207.58,4335728.27 701206.59,4335728.1 701205.61,4335727.94 701204.62,4335727.78 701203.63,4335727.61 701202.65,4335727.45 701201.66,4335727.29 701200.68,4335727.13 701199.69,4335726.97 701198.7,4335726.81 701197.72,4335726.66 701196.73,4335726.5 701195.74,4335726.34 701194.76,4335726.18 701193.77,4335726.03 701192.79,4335725.87 701191.8,4335725.72 701190.81,4335725.56 701189.83,4335725.41 701188.84,4335725.25 701187.85,4335725.1 701186.86,4335724.95 701185.88,4335724.79 701184.89,4335724.64 701183.9,4335724.49 701182.91,4335724.33 701181.92,4335724.18 701180.93,4335724.03 701179.94,4335723.87 701178.95,4335723.72 701177.96,4335723.57 701176.97,4335723.41 701175.98,4335723.26 701174.99,4335723.1 701173.99,4335722.95 701173,4335722.8 701172.01,4335722.64 701171.01,4335722.49 701170.02,4335722.33 701169.02,4335722.17 701168.03,4335722.02 701167.03,4335721.86 701166.03,4335721.7 701165.04,4335721.54 701164.04,4335721.38 701163.04,4335721.23 701162.04,4335721.06 701161.04,4335720.9 701160.04,4335720.74 701159.03,4335720.58 701158.03,4335720.42 701157.03,4335720.25 701156.02,4335720.09 701155.01,4335719.92 701154.01,4335719.75 701153,4335719.59 701151.99,4335719.42 701150.98,4335719.25 701149.97,4335719.08 701148.96,4335718.9 701147.95,4335718.73 701146.93,4335718.55 701145.92,4335718.38 701144.9,4335718.2 701143.88,4335718.02 701142.86,4335717.84 701141.84,4335717.66 701140.82,4335717.48 701139.8,4335717.29 701138.78,4335717.11 701137.75,4335716.92 701136.73,4335716.73 701135.7,4335716.54 701134.67,4335716.35 701133.64,4335716.15 701132.61,4335715.96 701131.58,4335715.76 701130.55,4335715.56 701129.51,4335715.36 701077.19,4335703.93 701024.13,4335692.72 700973.13,4335686.49 700926.94,4335690.01 700888.17,4335707.74 700856.19,4335739.18 700827.61,4335779.55 700798.98,4335823.93 700766.82,4335867.41 700727.68,4335905.08 700678.96,4335932.44 700623.87,4335947.61 700567.88,4335949.8 700516.47,4335938.19 700475.13,4335911.99 700448.9,4335871 700439.17,4335820.09 700445.52,4335766.63 700467.41,4335717.8 700502.32,4335676.31 700545.66,4335640.44 700592.79,4335608.24 700639.06,4335577.8 700679.8,4335547.19 700710.36,4335514.47 700726.09,4335477.73 700723,4335435.51 700702.34,4335390.31 700667.95,4335346.5 700623.66,4335308.48 700573.33,4335280.64 700520.79,4335267.39 700469.24,4335271.21 700419.1,4335286.38 700370.05,4335304.94 700321.74,4335318.95 700273.86,4335320.44 700226.33,4335301.76 700187.53,4335264.52 700175.65,4335221.23 700195.86,4335179.12 700231.29,4335135.84 700264.38,4335088.53 700288.97,4335037.42 700304.85,4334984.4 700311.83,4334931.34 700309.75,4334880.12 700298.43,4334832.63 700277.68,4334790.73 700247.76,4334755.6 700210.26,4334725.97 700167.07,4334700.09 700120.07,4334676.22 700071.15,4334652.6 700022.2,4334627.49 699974.66,4334599.6 699928.74,4334568.98 699884.41,4334535.94 699841.65,4334500.79 699800.43,4334463.82 699760.74,4334425.33 699722.53,4334385.63 699685.79,4334345.02 699650.49,4334303.81 699616.6,4334262.28 699584.11,4334220.76 699552.98,4334179.53 699523.19,4334138.91 699494.71,4334099.19 699467.52,4334060.67 699441.59,4334023.67 699416.81,4333988.33 699392.7,4333954.23 699368.68,4333920.77 699344.19,4333887.35 699318.64,4333853.4 699291.46,4333818.3 699262.08,4333781.47 699229.91,4333742.32 699194.5,4333700.6 699156.18,4333658.46 699115.63,4333619.11 699073.53,4333585.78 699030.57,4333561.68 698987.43,4333550.02 698944.8,4333554.02 698902.96,4333574.31 698861.04,4333603.73 698817.94,4333633.67 698772.58,4333655.56 698724.54,4333665.28 698674.58,4333666.16 698623.56,4333662.25 698572.33,4333657.59 698521.67,4333655.88 698471.68,4333657.53 698422.09,4333661.29 698372.62,4333665.87 698323,4333670 698340.34,4333732.27 698363.08,4333784.81 698391.89,4333826.59 698427.45,4333856.6 698470.32,4333874 698519.56,4333880.19 698573.15,4333878.21 698629.05,4333871.14 698685.21,4333862.04 698740.15,4333853.19 698793.36,4333845.42 698844.48,4333839.41 698893.1,4333835.85 698938.83,4333835.42 698981.43,4333838.65 699021.07,4333845.54 699058.08,4333855.95 699092.73,4333869.74 699125.34,4333886.77 699156.2,4333906.93 699185.62,4333930.06 699213.89,4333956.04 699241.32,4333984.72 699268.2,4334015.98 699294.83,4334049.69 699321.52,4334085.69 699348.56,4334123.87 699376.26,4334164.09 699404.92,4334206.2 699434.83,4334250.08 699466.29,4334295.6 699499.62,4334342.6 699535.09,4334390.98 699573.03,4334440.58 699613.72,4334491.27 699657.46,4334542.92 699704.56,4334595.39 699755.32,4334648.55 699809.95,4334702.26 699866.63,4334756.19 699921.57,4334809.87 699970.89,4334862.78 700010.7,4334914.45 700037.11,4334964.36 700046.24,4335012.02 700034.86,4335057.07 700007.99,4335100.8 699976.41,4335145.7 699951.02,4335194.25 699941.36,4335248.31 699948.43,4335305.65 699969.83,4335362.41 700003.15,4335414.75 700045.97,4335458.8 700095.89,4335490.71 700150.48,4335506.62 700207.37,4335503.1 700264.46,4335484.08 700319.97,4335459.81 700372.09,4335440.76 700419.03,4335437.39 700459,4335460.15 700485.34,4335506.82 700481.12,4335545 700447.59,4335568.32 700394.15,4335583.18 700330.24,4335596.02 700265.29,4335613.27 700208.71,4335641.36 700167.53,4335684.15 700141.86,4335738.09 700130.58,4335798.34 700132.58,4335860.05 700146.74,4335918.38 700171.95,4335968.47 700207.11,4336005.49 700250.76,4336027.23 700300.65,4336038.41 700354.36,4336044.84 700409.49,4336052.32 700463.68,4336066.54 700515.71,4336088.46 700565.89,4336113.13 700614.57,4336135.2 700662.14,4336149.36 700708.98,4336150.25 700755.04,4336134.28 700798.8,4336104.11 700838.39,4336063.89 700872.01,4336017.72 700900.31,4335969.39 700926.56,4335922.32 700954.12,4335879.89 700986.39,4335845.51 701026.04,4335821.86 701072.83,4335808.72 701125.8,4335805.09 701183.98,4335810.01 701246.37,4335822.5 701246.38,4335822.5 701274.75,4335833.5 701359.13,4335857.5 701430.06,4335874 701499,4335891.5 701554.56,4335888.5 701604,4335877.5 701663.81,4335853 701717.44,4335807 701764.94,4335739 701828.94,4335667 701885.75,4335592 701951.88,4335509 701998.31,4335451.5 702049.94,4335398 702099.5,4335342.5 702180.25,4335249 702259.88,4335138 702325.19,4335036.5 702393.5,4334924.5 702443.56,4334862 702481.25,4334799 702513,4334767 702565.56,4334761.5 702603.81,4334772.5 702620.44,4334789.5 702614.56,4334830 702589.13,4334878.5 702548.38,4334948 702523.19,4335032 702510.44,4335123.5 702476.38,4335260 702410.38,4335413 702350.75,4335579.5 702299.25,4335736 702267.88,4335818.5 702234.19,4335862 702223.06,4335891 702219.88,4335924 702232.19,4335975.5 702259.88,4336027 702290.69,4336064 702300.94,4336100 702286.5,4336139 702248.5,4336195.5 702210.5,4336215 702182.75,4336202.5 702142.69,4336184 702085.19,4336159.5 702004.06,4336126.5 702000,4336124.5 701927.38,4336090.5 701873.5,4336075.5 701805.75,4336072.5 701764.06,4336084 701766.31,4336094.77 701756.31,4336098 701710.44,4336127 701692.06,4336152.5 701677.63,4336184 701658.69,4336244.5 701637.38,4336310 701632.31,4336352 701627.13,4336399.5 701629.44,4336448 701627.88,4336505 701623.75,4336558 701609,4336604.5 701593.63,4336632 701563,4336659.5 701527.56,4336674 701485.19,4336672 701439.19,4336661.5 701363.25,4336646 701270.44,4336634.5 701207.06,4336621.5 701145,4336620 701096.44,4336627 701078.69,4336643 701072,4336665.5 701063.19,4336703 701051.69,4336763.5 701041.5,4336838 701050.88,4336938 701071.25,4337016.5 701086.38,4337047 701120.13,4337061.5 701154.94,4337087.5 701161,4337131 701139.06,4337164.5 701114.44,4337188 701086.44,4337219 701046.38,4337251.5 700984.31,4337295 700908.5,4337346.5 700827.63,4337397.5 700745.81,4337445 700682.88,4337485 700615.38,4337524 700581.75,4337568 700555.31,4337612 700545.5,4337663 700544.06,4337720.5 700547.44,4337776 700569.88,4337831.5 700606.25,4337886.5 700635.63,4337921 700668.13,4337956.5 700688.13,4338006.5 700689.44,4338096.5 700686.31,4338122 700686.31,4338160.5 700692.56,4338198.5 700718.44,4338262.5 700718.44,4338307.5 700718.44,4338390.5 700718.44,4338467.5 700673.81,4338659 700641.69,4338755 700622.06,4338819 700589.94,4338889.5 700545.31,4338953.5 700500.69,4339017.5 700468.56,4339055.5 700436.44,4339106.5 700379.38,4339158 700347.25,4339190 700258,4339221.5 700207.13,4339241 700155.38,4339241 700110.75,4339241 700066.13,4339234.5 700021.5,4339241 699969.75,4339279.5 699944.75,4339337 699931.38,4339401 699925.13,4339471 699918.88,4339516 699906.38,4339554.5 699880.5,4339618.5 699829.63,4339695 699810,4339759 699797.5,4339823 699785.06,4339886.5 699781.44,4339922.5 699770.75,4340081 699749.31,4340149.5 699712.75,4340271 699676.19,4340360.5 699644.06,4340423.5 699607.44,4340518.5 699580.69,4340571.5 699538.75,4340650.5 699475.38,4340735 699443.25,4340783 699406.69,4340825 699354,4340856.5 699290.69,4340877.5 699254.06,4340893.5 699190.69,4340898.5 699137.19,4340909 699000.63,4340962 698847.13,4341041.5 698747.19,4341099 698710.63,4341136.5 698651.75,4341199 698583.88,4341300 698525.88,4341410.5 698499.13,4341474 698472.38,4341542.5 698441.13,4341653.5 698419.69,4341753.5 698409,4341811.5 698409,4341843 698414.38,4341874.5 698419.69,4341912 698435.75,4341927.5 698457.19,4341944 698504.5,4341954 698546.44,4341964.5 698604.44,4341980.5 698656.19,4341982.5 698709.75,4342004 698762.38,4342024.5 698794.5,4342099 698815,4342172.5 698783.81,4342247 698740.94,4342331.5 698688.31,4342469 698635.69,4342617 698614.25,4342722.5 698572.31,4342818 698540.19,4342881.5 698498.25,4342913 698402.75,4342976.5 698318,4343040 698159.13,4343167 698095.75,4343230.5 698011,4343325.5 697979.75,4343400 697958.38,4343452 697947.63,4343495 697948.5,4343535.5 697936.06,4343587.5 697922.63,4343657 697865.56,4343714.5 697801.31,4343753.5 697744.19,4343760 697712.06,4343766.5 697673.69,4343766.5 697629.06,4343766.5 697564.81,4343766.5 697513.94,4343760 697449.69,4343747 697398.81,4343753.5 697340.81,4343766.5 697308.69,4343798 697264.06,4343849 697231.94,4343913 697219.44,4343977 697219.44,4344047.5 697225.69,4344131 697231.94,4344195 697225.69,4344277.5 697207,4344380.5 697181.06,4344463 697130.25,4344540 697091.88,4344591 697015.13,4344642 696963.38,4344661.5 696912.5,4344655 696861.63,4344648.5 696797.38,4344623.5 696726.88,4344597.5 696630.5,4344572.5 696592.13,4344559.5 696528.75,4344572.5 696470.75,4344617 696419.88,4344687.5 696369,4344815.5 696298.56,4344962 696189.69,4345129 696131.69,4345198.5 696074.56,4345250.5 696016.56,4345346 695971.94,4345423 695933.56,4345461 695888.94,4345493.5 695856.81,4345518.5 695780.06,4345569.5 695735.44,4345582.5 695690.81,4345576 695646.19,4345563.5 695594.44,4345525 695523.94,4345461 695485.56,4345448 695454.38,4345448 695402.56,4345448 695351.75,4345487 695300.88,4345531.5 695242.88,4345602 695076,4345725.5 695029.56,4345760 694877.88,4345882.5 694843.06,4345876.5 694795.75,4345882.5 694755.63,4345900 694685.13,4345940.5 694627.13,4345981 694592.31,4346016 694399.56,4346074.5 694318.38,4346098 694166.63,4346197 694073.88,4346255.5 694015.81,4346284.5 693986.38,4346272.5 693945.38,4346249.5 693881.13,4346185.5 693823.06,4346168 693776.69,4346174 693735.63,4346191.5 693659.81,4346238 693625,4346255.5 693601.81,4346284.5 693572.31,4346360 693549.13,4346395 693525.94,4346424 693484.88,4346435.5 693450.06,4346441.5 693415.25,4346447 693339.44,4346447 693263.56,4346464.5 693170.75,4346506 693088.69,4346564 693051.19,4346604.5 692991.38,4346694 692971.75,4346764</gml:coordinates>
+                </gml:LinearRing>
+              </gml:outerBoundaryIs>
+            </gml:Polygon>
+          </gml:polygonMember>
+        </gml:MultiPolygon>
+      </cit:the_geom>
+    </cit:embalses_pol_300k>
+  </gml:featureMember>
+</wfs:FeatureCollection>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetFeature.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEDescribeFeatureType.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEDescribeFeatureType.xml	(revision 42196)
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:deegreewfs="http://www.deegree.org/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:ideewfs="http://www.idee.es/wfs" xmlns:ogc="http://www.opengis.net/ogc" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.idee.es/wfs">
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+	<xsd:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/feature.xsd"/>
+	<xsd:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/geometryAggregates.xsd"/>
+	<!-- configuration for the persistence backend to be used -->
+	
+	<!-- ============================================================== -->
+	<xsd:element name="VerticeRedOrdenInferior" substitutionGroup="gml:_Feature" type="ideewfs:VerticeED50Type">
+		
+	</xsd:element>
+	<xsd:element name="VerticeRedIberia95" substitutionGroup="gml:_Feature" type="ideewfs:VerticeETRS89Type">
+		
+	</xsd:element>
+	<xsd:element name="VerticeRedRegente" substitutionGroup="gml:_Feature" type="ideewfs:VerticeETRS89Type">
+		
+	</xsd:element>
+	<xsd:element name="VerticeRedBalear98" substitutionGroup="gml:_Feature" type="ideewfs:VerticeETRS89Type">
+		
+	</xsd:element>
+	<xsd:element name="VerticeRedRegenteCanarias95" substitutionGroup="gml:_Feature" type="ideewfs:VerticeITRS93Type">
+		
+	</xsd:element>
+		
+	<xsd:complexType name="VerticeED50Type">
+		<xsd:complexContent>
+			<xsd:extension base="ideewfs:VerticeGeodesicoType">
+				<xsd:sequence>
+					<xsd:element maxOccurs="1" minOccurs="0" name="alturaOrtometrica" type="xsd:string">
+						
+					</xsd:element>
+				</xsd:sequence>				
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>				
+	<xsd:complexType name="VerticeETRS89Type">
+		<xsd:complexContent>
+			<xsd:extension base="ideewfs:VerticeGeodesicoType">
+				<xsd:sequence>
+					<xsd:element maxOccurs="1" minOccurs="0" name="alturaElipsoidal" type="xsd:string">
+						
+					</xsd:element>
+				</xsd:sequence>				
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>				
+	<xsd:complexType name="VerticeITRS93Type">
+		<xsd:complexContent>
+			<xsd:extension base="ideewfs:VerticeGeodesicoType">
+				<xsd:sequence>
+					<xsd:element maxOccurs="1" minOccurs="0" name="alturaElipsoidal" type="xsd:string">
+						
+					</xsd:element>
+				</xsd:sequence>				
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>			
+	<xsd:complexType name="VerticeGeodesicoType">
+		<xsd:complexContent>
+			<xsd:extension base="gml:AbstractFeatureType">
+				<xsd:sequence>
+					<xsd:element maxOccurs="1" minOccurs="0" name="nombre" type="xsd:string">
+						
+					</xsd:element>
+
+					<xsd:element maxOccurs="1" minOccurs="0" name="numeroROI" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="husoUTM" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="xUTM" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="yUTM" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="longitud" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="latitud" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="factorEscala" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="convergencia" type="xsd:string">
+						
+					</xsd:element>
+					<xsd:element maxOccurs="1" minOccurs="0" name="fechaCompensacion" type="xsd:date">
+						
+					</xsd:element>
+					<!--xsd:element name="hojaMTN" type="xsd:integer" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="HOJA_MTN" type="INTEGER" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="situacion" type="xsd:string" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="SITUACION" type="VARCHAR" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="observaciones" type="xsd:string" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="OBSERVACIONES" type="VARCHAR" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="fechaConstruccion" type="xsd:string" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="FECHA_DE_CONSTRUCCIóN" type="VARCHAR" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="centradoForzado" type="xsd:string" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="CENTRADO_FORZADO" type="VARCHAR" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="numeroDeCuerpos" type="xsd:integer" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="NUMERO_DE_CUERPOS" type="INTEGER" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="alturaPilar" type="xsd:float" minOccurs="0">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="ALTURA_PILAR" type="FLOAT" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="diametroPilar" type="xsd:float" minOccurs="0">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="DIAMETRO_PILAR" type="FLOAT" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="altoUltimoCuerpo" type="xsd:float" minOccurs="0">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="ALTO_ULTIMO_CUERPO" type="FLOAT" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="anchoUltimoCuerpo" type="xsd:float" minOccurs="0">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="ANCHO_ULTIMO_CUERPO" type="FLOAT" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="alturaTotalCuerpos" type="xsd:float" minOccurs="0">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="ALTURA_TOTAL_DE_LOS_CUERPOS" type="FLOAT" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="horizonteGPS" type="xsd:string" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="HORIZONTE_GPS" type="VARCHAR" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="codINEMunicipio" type="xsd:integer" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="ID_INE" type="INTEGER" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="nombreMunicipio" type="xsd:string" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="NOMBRE_MUNICIPIO" type="VARCHAR" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="nombreProvincia" type="xsd:string" minOccurs="0" maxOccurs="1">
+						<xsd:annotation>
+							<xsd:appinfo>
+								<deegreewfs:Content>
+									<deegreewfs:MappingField field="NOMBRE_DE_LA_PROVINCIA" type="VARCHAR" />
+								</deegreewfs:Content>
+							</xsd:appinfo>
+						</xsd:annotation>
+					</xsd:element-->
+
+					<xsd:element name="geometria" type="gml:GeometryPropertyType">
+						
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+
+	</xsd:complexType>
+</xsd:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEDescribeFeatureType.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType1.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType1.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType1.xml	(revision 42196)
@@ -0,0 +1,1320 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<xs:schema targetNamespace="http://216.229.5.245/tntserver/MII_TNTCB" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wfs="http://www.opengis.net/wfs" xmlns:MII_TNTCB="http://216.229.5.245/tntserver/MII_TNTCB" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="0.1">
+
+  <import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
+
+  <xsd:simpleType name="colorValueType">
+    <xsd:restriction base="unsignedByte"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="colorValueListType">
+    <xsd:list itemType="MII_TNTCB:colorValueType"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="colorRGBAType">
+    <xsd:restriction base="MII_TNTCB:colorValueListType">
+      <xsd:minLength value="3"/>
+      <xsd:maxLength value="4"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="colorUnionType">
+    <xsd:union memberTypes="xsd:string MII_TNTCB:colorRGBAType"/>
+  </xsd:simpleType>
+
+  <xsd:element name="CBSOILS" type="MII_TNTCB:CBSOILS_Type" substitutionGroup="gml:_Feature"/>
+
+  <xsd:complexType name="CBSOILS_Type">
+    <xsd:complexContent>
+      <xsd:extension base="gml:AbstractFeatureType">
+        <xsd:sequence>
+          <xsd:element ref="gml:surfaceProperty" minOccurs="0"/>
+          <xsd:element name="Class" nillable="true" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="79"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CAPRANGE.SYMBOL" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="4"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CAPRANGE.DRYCAP" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CAPRANGE.WETCAP" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CAPRANGE.RANGE" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CAPRANGE.WSG" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="DESCRIPTN.SYMBOL" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="4"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="DESCRIPTN.NAME" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="80"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="DESCRIPTN.ACRES" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.SYMBOL" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="4"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.GRAIN" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.LEGUMES" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.HERBACEOUS" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.TREES" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.PINES" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.WETLAND" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.WATER" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.OPENWILD" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.WOODWILD" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.WETWILD" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POTENTIAL.RANGEWILD" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="YIELD.SYMBOL" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="4"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="YIELD.WHEAT" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="YIELD.OATS" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="YIELD.HAYDRY" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="1"/>
+                <xsd:totalDigits value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="YIELD.HAYWET" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="1"/>
+                <xsd:totalDigits value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="YLDUNITS.cropname" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="23"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="YLDUNITS.yldunits" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CODES_GRPCODE.code" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="6"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CODES_GRPCODE.codename" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="40"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CODES_RATING.code" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="6"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CODES_RATING.codename" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="40"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CODES_RESTCT.code" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="6"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="CODES_RESTCT.codename" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="40"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUCOACRE.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUCOACRE.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUCOACRE.cntycode" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="3"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUCOACRE.mucoacre" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WINDBRK.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WINDBRK.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WINDBRK.seqnum" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WINDBRK.plantsym" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WINDBRK.PlantName" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="61"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WINDBRK.wndbrkht" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.seqnum" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.rsid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.rsname" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="50"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.prodfav" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.prodnorm" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="RSPROD.produnfv" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.Area" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.BoundLen" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.CentX" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.CentY" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.AreaIncI" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.BoundNotIncI" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.CentXNotIncI" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.CentYNotIncI" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.PointInPolyX" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.PointInPolyY" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.MaxDim" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.Roughness" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.CompactRatio" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="POLYSTATS.CompactRatioI" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTCOM.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTCOM.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTCOM.seqnum" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTCOM.plantsym" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTCOM.PlantType" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="61"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTCOM.plantpct" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTNM.plantsym" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTNM.sciname" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="41"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="PLANTNM.comname" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="30"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.seqnum" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlgrain" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlgrass" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlherb" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlhard" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlconif" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlshrub" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlwetplt" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlshlwat" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlopen" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlwood" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlwet" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="WLHABIT.wlrange" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="9"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.clascode" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.class" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="94"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.order" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="1"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.suborder" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="3"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.grtgroup" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.subgroup" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="4"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.partsize" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="3"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.minalogy" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="2"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.reaction" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="2"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.soiltemp" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="2"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="TAXCLASS.otherfam" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="2"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.ssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="3"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.musym" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.muname" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="110"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.mukind" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="1"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.mlra" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="4"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.primfml" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="1"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MAPUNIT.muacres" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="SSACOAC.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="SSACOAC.cntycode" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="3"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="SSACOAC.cntyname" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="SSACOAC.sacoacre" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUYLD.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUYLD.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUYLD.cropname" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="23"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUYLD.nirryld" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUYLD.irryld" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="MUYLD.YieldUnits" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="21"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.seqnum" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.Group" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="81"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.Rating" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="41"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.Restriction1" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="41"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.Restriction2" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="41"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="INTERP.Restriction3" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="41"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.stssaid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.muid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="8"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.seqnum" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.s5id" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="6"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.layernum" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.layerid" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.laydepl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.laydeph" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.texture" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="23"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.kfact" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.tfact" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.weg" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="2"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.inch10l" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.inch10h" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.inch3l" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.inch3h" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no4l" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no4h" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no10l" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no10h" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no40l" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no40h" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no200l" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.no200h" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.clayl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.clayh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.lll" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.llh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.pil" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.pih" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.unified" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.aashto" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="19"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.aashind" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.awcl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.awch" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.bdl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.bdh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.oml" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.omh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.phl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.phh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.salinl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.salinh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.sarl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.sarh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.cecl" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.cech" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.caco3l" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.caco3h" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.gypsuml" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.gypsumh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.perml" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.permh" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="6"/>
+                <xsd:totalDigits value="15"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LAYER.shrinksw" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="10"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+        </xsd:sequence>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+</xs:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType1.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEDescribeFeatureType.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEDescribeFeatureType.xml	(revision 42196)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.idee.es/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" elementFormDefault="qualified" targetNamespace="http://www.idee.es/wfs" version="2.1.2">
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+	<xsd:annotation>
+		<xsd:appinfo>BDLL Province Feature Types</xsd:appinfo>
+		<xsd:documentation xml:lang="en"/>
+	</xsd:annotation>
+	<!-- import constructs from the GML Feature and Geometry schemas -->
+	<xsd:import namespace="http://www.opengis.net/gml" schemaLocation="schemas/feature.xsd"/>
+	<!-- ==============================================================
+		global element declarations
+		=================================================================== -->
+	<xsd:element name="BDLL1000_Provincia" substitutionGroup="gml:_Feature" type="BDLL_ProvinciaType"/>
+	<xsd:element name="BDLL200_Provincia" substitutionGroup="gml:_Feature" type="BDLL_ProvinciaType"/>
+	<xsd:element name="BDLL25_Provincia" substitutionGroup="gml:_Feature" type="BDLL_ProvinciaType"/>
+	<!-- ==============================================================
+		feature types definitions
+		=================================================================== -->
+	<xsd:complexType name="BDLL_ProvinciaType">
+		<xsd:complexContent>
+			<xsd:extension base="gml:AbstractFeatureType">
+				<xsd:sequence>
+					<xsd:element minOccurs="0" name="nombre" type="xsd:string"/>
+					<xsd:element minOccurs="0" name="cod_INE_prov" type="xsd:integer"/>
+					<xsd:element minOccurs="0" name="cod_ccaa" type="xsd:integer"/>
+					<xsd:element minOccurs="0" name="fecha_carga" type="xsd:date"/>
+					<xsd:element ref="gml:multiPolygonProperty"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+</xsd:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEDescribeFeatureType.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinDescribeFeatureType.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinDescribeFeatureType.xml	(revision 42196)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?><xs:schema  targetNamespace="http://www.openplans.org/topp"  xmlns:topp="http://www.openplans.org/topp" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0"><xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://sercartlin:8080/geoserver/schemas/gml/2.1.2/feature.xsd"/><xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="tasmania_cities_Type"><xs:complexContent><xs:extension base="gml:AbstractFeatureType"><xs:sequence><xs:element name="the_geom" minOccurs="0" nillable="true" type="gml:MultiPointPropertyType"/><xs:element name="CITY_NAME" minOccurs="0" nillable="true"><xs:simpleType><xs:restriction base="xs:string"><xs:maxLength value="40"/></xs:restriction></xs:simpleType></xs:element><xs:element name="ADMIN_NAME" minOccurs="0" nillable="true"><xs:simpleType><xs:restriction base="xs:string"><xs:maxLength value="42"/></xs:restriction></xs:simpleType></xs:element><xs:element name="CNTRY_NAME" minOccurs="0" nillable="true"><xs:simpleType><xs:restriction base="xs:string"><xs:maxLength value="40"/></xs:restriction></xs:simpleType></xs:element><xs:element name="STATUS" minOccurs="0" nillable="true"><xs:simpleType><xs:restriction base="xs:string"><xs:maxLength value="50"/></xs:restriction></xs:simpleType></xs:element><xs:element name="POP_CLASS" minOccurs="0" nillable="true"><xs:simpleType><xs:restriction base="xs:string"><xs:maxLength value="22"/></xs:restriction></xs:simpleType></xs:element></xs:sequence></xs:extension></xs:complexContent></xs:complexType><xs:element name='tasmania_cities' type='topp:tasmania_cities_Type' substitutionGroup='gml:_Feature'/></xs:schema><!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinDescribeFeatureType.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType2.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType2.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType2.xml	(revision 42196)
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<xs:schema targetNamespace="http://216.229.5.245/tntserver/MII_GVwhs" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wfs="http://www.opengis.net/wfs" xmlns:MII_GVwhs="http://216.229.5.245/tntserver/MII_GVwhs" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="0.1">
+
+  <import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
+
+  <xsd:simpleType name="colorValueType">
+    <xsd:restriction base="unsignedByte"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="colorValueListType">
+    <xsd:list itemType="MII_GVwhs:colorValueType"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="colorRGBAType">
+    <xsd:restriction base="MII_GVwhs:colorValueListType">
+      <xsd:minLength value="3"/>
+      <xsd:maxLength value="4"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="colorUnionType">
+    <xsd:union memberTypes="xsd:string MII_GVwhs:colorRGBAType"/>
+  </xsd:simpleType>
+
+  <xsd:element name="World_polbndl" type="MII_GVwhs:World_polbndl_Type" substitutionGroup="gml:_Feature"/>
+
+  <xsd:complexType name="World_polbndl_Type">
+    <xsd:complexContent>
+      <xsd:extension base="gml:AbstractFeatureType">
+        <xsd:sequence>
+          <xsd:element ref="gml:curveProperty" minOccurs="0"/>
+          <xsd:element name="BST" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="USE" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="USEDESC" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="50"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="ACCDESC" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="50"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="F_CODE" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="5"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="F_CODEDESC" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="50"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="BSTDESC" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="string">
+                <xsd:maxLength value="50"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="ACC" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="int">
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.Length" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.DistSE" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.CentX" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.CentY" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.CentZ" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.LengthXY" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.MidDistPtX" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.MidDistPtY" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+          <xsd:element name="LINESTATS.MidDistPtZ" minOccurs="0">
+            <xsd:simpleType>
+              <xsd:restriction base="decimal">
+                <xsd:fractionDigits value="8"/>
+                <xsd:totalDigits value="20"/>
+              </xsd:restriction>
+            </xsd:simpleType>
+          </xsd:element>
+        </xsd:sequence>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+</xs:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType2.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,183 @@
+<?xml version='1.0' encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WFS_Capabilities 
+   version="1.0.0" 
+   updateSequence="0" 
+   xmlns="http://www.opengis.net/wfs" 
+   xmlns:ogc="http://www.opengis.net/ogc" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengeospatial.net/wfs/1.0.0/WFS-capabilities.xsd">
+
+<!-- MapServer version 4.6.0 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT INPUT=EPPL7 INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG -->
+
+<Service>
+  <Name>MapServer WFS</Name>
+  <Title>DM Solutions&#39; WFS Demo Server</Title>
+  <Abstract>This demonstration server was setup by DM Solutions Group (http://www.dmsolutions.ca/) and is powered by MapServer (http://mapserver.gis.umn.edu/).  This server uses Canadian source data (c)2000, Government of Canada with permission from Natural Resources Canada from NRCan&#39;s GeoGratis web site (http://geogratis.cgdi.gc.ca/).</Abstract>
+  <OnlineResource>http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?</OnlineResource>
+</Service>
+
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <DCPType>
+        <HTTP>
+          <Get onlineResource="http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?" />
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post onlineResource="http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?" />
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <DescribeFeatureType>
+      <SchemaDescriptionLanguage>
+        <XMLSCHEMA/>
+        <SFE_XMLSCHEMA/>
+      </SchemaDescriptionLanguage>
+      <DCPType>
+        <HTTP>
+          <Get onlineResource="http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?" />
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post onlineResource="http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?" />
+        </HTTP>
+      </DCPType>
+    </DescribeFeatureType>
+    <GetFeature>
+      <ResultFormat>
+        <GML2/>
+        <GML3/>
+      </ResultFormat>
+      <DCPType>
+        <HTTP>
+          <Get onlineResource="http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?" />
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post onlineResource="http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?" />
+        </HTTP>
+      </DCPType>
+    </GetFeature>
+  </Request>
+</Capability>
+
+<FeatureTypeList>
+  <Operations>
+    <Query/>
+  </Operations>
+    <FeatureType>
+        <Name>prov_land</Name>
+        <Title>Canadian Land</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-173.537" miny="35.8775" maxx="-11.9603" maxy="83.8009" />
+    </FeatureType>
+    <FeatureType>
+        <Name>land_fn</Name>
+        <Title>US Land</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-178.838" miny="31.8844" maxx="179.94" maxy="89.8254" />
+    </FeatureType>
+    <FeatureType>
+        <Name>park</Name>
+        <Title>Parks</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-173.433" miny="41.4271" maxx="-13.3643" maxy="83.7466" />
+    </FeatureType>
+    <FeatureType>
+        <Name>drain_fn</Name>
+        <Title>US Lakes</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-179.973" miny="35.2464" maxx="179.92" maxy="88.06" />
+    </FeatureType>
+    <FeatureType>
+        <Name>drainage</Name>
+        <Title>Lakes</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-169.629" miny="39.2232" maxx="-15.1085" maxy="83.0129" />
+    </FeatureType>
+    <FeatureType>
+        <Name>prov_bound</Name>
+        <Title>Provincial Borders</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-173.537" miny="35.8775" maxx="-11.9603" maxy="83.8009" />
+    </FeatureType>
+    <FeatureType>
+        <Name>fedlimit</Name>
+        <Title>Federal Limit</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-179.96" miny="34.2409" maxx="178.833" maxy="89.9051" />
+    </FeatureType>
+    <FeatureType>
+        <Name>rail</Name>
+        <Title>Railroads</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-137.447" miny="37.7146" maxx="-46.6233" maxy="66.7201" />
+    </FeatureType>
+    <FeatureType>
+        <Name>road</Name>
+        <Title>Roads</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-148.059" miny="35.882" maxx="-33.7745" maxy="72.5503" />
+    </FeatureType>
+    <FeatureType>
+        <Name>popplace</Name>
+        <Title>Cities</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-172.301" miny="36.3541" maxx="-12.9698" maxy="83.4832" />
+    </FeatureType>
+    <FeatureType>
+        <Name>grid</Name>
+        <Title>Grid</Title>
+        <SRS>EPSG:42304</SRS>
+        <LatLongBoundingBox minx="-178.838" miny="31.8844" maxx="179.94" maxy="89.8254" />
+    </FeatureType>
+</FeatureTypeList>
+
+<ogc:Filter_Capabilities>
+  <ogc:Spatial_Capabilities>
+    <ogc:Spatial_Operators>
+      <ogc:Intersect/>
+      <ogc:DWithin/>
+      <ogc:BBOX/>
+    </ogc:Spatial_Operators>
+  </ogc:Spatial_Capabilities>
+  <ogc:Scalar_Capabilities>
+    <ogc:Logical_Operators />
+    <ogc:Comparison_Operators>
+      <ogc:Simple_Comparisons />
+      <ogc:Like />
+      <ogc:Between />
+    </ogc:Comparison_Operators>
+  </ogc:Scalar_Capabilities>
+</ogc:Filter_Capabilities>
+
+</WFS_Capabilities>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetFeature.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetFeature.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetFeature.xml	(revision 42196)
@@ -0,0 +1,14396 @@
+<?xml version='1.0' encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<wfs:FeatureCollection
+   xmlns:myns="http://www.ttt.org/myns"
+   xmlns:wfs="http://www.opengis.net/wfs"
+   xmlns:gml="http://www.opengis.net/gml"
+   xmlns:ogc="http://www.opengis.net/ogc"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengeospatial.net/wfs/1.0.0/WFS-basic.xsd 
+                       http://www.ttt.org/myns http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=popplace&amp;OUTPUTFORMAT=XMLSCHEMA">
+      <gml:boundedBy>
+      	<gml:Box srsName="EPSG:42304">
+      		<gml:coordinates>-2196474.000000,-681502.875000 2961766.250000,3798856.750000</gml:coordinates>
+      	</gml:Box>
+      </gml:boundedBy>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2437287.250000,1153656.750000 2437287.250000,1153656.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2437287.250000,1153656.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>1</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AARNV</myns:UNIQUE_KEY>
+        <myns:NAME>Port Hope Simpson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>013A09</myns:NTS50>
+        <myns:LAT>523300</myns:LAT>
+        <myns:LONG>561800</myns:LONG>
+        <myns:SGC_CODE>1010009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2048619.250000,1280178.125000 2048619.250000,1280178.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2048619.250000,1280178.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>2</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAKDE</myns:UNIQUE_KEY>
+        <myns:NAME>Hopedale</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>013N08</myns:NTS50>
+        <myns:LAT>552800</myns:LAT>
+        <myns:LONG>601300</myns:LONG>
+        <myns:SGC_CODE>1010048</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2127675.500000,1282402.125000 2127675.500000,1282402.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2127675.500000,1282402.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>3</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AANQP</myns:UNIQUE_KEY>
+        <myns:NAME>Makkovik</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>013O03</myns:NTS50>
+        <myns:LAT>550500</myns:LAT>
+        <myns:LONG>591100</myns:LONG>
+        <myns:SGC_CODE>1010044</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1942600.375000,984407.437500 1942600.375000,984407.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1942600.375000,984407.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>4</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AADZL</myns:UNIQUE_KEY>
+        <myns:NAME>Churchill Falls</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>023H09</myns:NTS50>
+        <myns:LAT>533300</myns:LAT>
+        <myns:LONG>640100</myns:LONG>
+        <myns:SGC_CODE>1010029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2159318.000000,1112748.125000 2159318.000000,1112748.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2159318.000000,1112748.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>5</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAQAF</myns:UNIQUE_KEY>
+        <myns:NAME>North West River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>013F09</myns:NTS50>
+        <myns:LAT>533200</myns:LAT>
+        <myns:LONG>600800</myns:LONG>
+        <myns:SGC_CODE>1010022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2216958.250000,1224457.500000 2216958.250000,1224457.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2216958.250000,1224457.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>6</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AATJW</myns:UNIQUE_KEY>
+        <myns:NAME>Rigolet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>013J01</myns:NTS50>
+        <myns:LAT>541100</myns:LAT>
+        <myns:LONG>582600</myns:LONG>
+        <myns:SGC_CODE>1010021</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2326879.500000,1231417.125000 2326879.500000,1231417.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2326879.500000,1231417.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>7</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AADQK</myns:UNIQUE_KEY>
+        <myns:NAME>Cartwright</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>013H11</myns:NTS50>
+        <myns:LAT>534200</myns:LAT>
+        <myns:LONG>570100</myns:LONG>
+        <myns:SGC_CODE>1010012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2281604.250000,340848.937500 2281604.250000,340848.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2281604.250000,340848.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>8</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>BACMK</myns:UNIQUE_KEY>
+        <myns:NAME>Tignish</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>11</myns:REG_CODE>
+        <myns:NTS50>021I16</myns:NTS50>
+        <myns:LAT>465700</myns:LAT>
+        <myns:LONG>640200</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2503805.500000,427872.656250 2503805.500000,427872.656250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2503805.500000,427872.656250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>9</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAGYX</myns:UNIQUE_KEY>
+        <myns:NAME>Cheticamp</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011K11</myns:NTS50>
+        <myns:LAT>463800</myns:LAT>
+        <myns:LONG>610100</myns:LONG>
+        <myns:SGC_CODE>1215011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2499190.000000,194088.234375 2499190.000000,194088.234375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2499190.000000,194088.234375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>10</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBIKA</myns:UNIQUE_KEY>
+        <myns:NAME>Sheet Harbour</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011D15</myns:NTS50>
+        <myns:LAT>445500</myns:LAT>
+        <myns:LONG>623200</myns:LONG>
+        <myns:SGC_CODE>1209036</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1453501.875000,-73545.101562 1453501.875000,-73545.101562</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1453501.875000,-73545.101562</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>11</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHDEQ</myns:UNIQUE_KEY>
+        <myns:NAME>Maniwaki</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031J05</myns:NTS50>
+        <myns:LAT>462300</myns:LAT>
+        <myns:LONG>755800</myns:LONG>
+        <myns:SGC_CODE>2483065</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1499988.750000,123844.500000 1499988.750000,123844.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1499988.750000,123844.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>12</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHNWP</myns:UNIQUE_KEY>
+        <myns:NAME>Parent</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031O15</myns:NTS50>
+        <myns:LAT>475500</myns:LAT>
+        <myns:LONG>743700</myns:LONG>
+        <myns:SGC_CODE>2490030</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1833501.500000,275321.750000 1833501.500000,275321.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1833501.500000,275321.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>13</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIFTL</myns:UNIQUE_KEY>
+        <myns:NAME>Tadoussac</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022C04</myns:NTS50>
+        <myns:LAT>480900</myns:LAT>
+        <myns:LONG>694300</myns:LONG>
+        <myns:SGC_CODE>2495005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2253231.000000,731723.312500 2253231.000000,731723.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2253231.000000,731723.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>14</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHJNE</myns:UNIQUE_KEY>
+        <myns:NAME>Natashquan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>012K04</myns:NTS50>
+        <myns:LAT>501200</myns:LAT>
+        <myns:LONG>614900</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2384529.750000,951565.937500 2384529.750000,951565.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2384529.750000,951565.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>15</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHYVN</myns:UNIQUE_KEY>
+        <myns:NAME>Saint-Augustin</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>012O02</myns:NTS50>
+        <myns:LAT>511300</myns:LAT>
+        <myns:LONG>583900</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1720720.750000,1028365.875000 1720720.750000,1028365.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1720720.750000,1028365.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>16</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EICJR</myns:UNIQUE_KEY>
+        <myns:NAME>Schefferville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>023J15</myns:NTS50>
+        <myns:LAT>544800</myns:LAT>
+        <myns:LONG>665000</myns:LONG>
+        <myns:SGC_CODE>2497040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>961407.562500,1588289.500000 961407.562500,1588289.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>961407.562500,1588289.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>17</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJJIY</myns:UNIQUE_KEY>
+        <myns:NAME>Salluit</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>035J04</myns:NTS50>
+        <myns:LAT>621300</myns:LAT>
+        <myns:LONG>753900</myns:LONG>
+        <myns:SGC_CODE>2499887</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1163526.250000,1594987.625000 1163526.250000,1594987.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1163526.250000,1594987.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>18</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJNER</myns:UNIQUE_KEY>
+        <myns:NAME>Kangiqsujuaq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>025E12</myns:NTS50>
+        <myns:LAT>613553</myns:LAT>
+        <myns:LONG>715740</myns:LONG>
+        <myns:SGC_CODE>2499888</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1317319.000000,1469979.750000 1317319.000000,1469979.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1317319.000000,1469979.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>19</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKQQU</myns:UNIQUE_KEY>
+        <myns:NAME>Kangirsuk</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>025D01</myns:NTS50>
+        <myns:LAT>600105</myns:LAT>
+        <myns:LONG>700140</myns:LONG>
+        <myns:SGC_CODE>2499890</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1579395.000000,1428846.125000 1579395.000000,1428846.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1579395.000000,1428846.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>20</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJLMI</myns:UNIQUE_KEY>
+        <myns:NAME>Kangiqsualujjuaq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>024I12</myns:NTS50>
+        <myns:LAT>584128</myns:LAT>
+        <myns:LONG>655715</myns:LONG>
+        <myns:SGC_CODE>2499894</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1374954.875000,1335696.875000 1374954.875000,1335696.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1374954.875000,1335696.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>21</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJLMJ</myns:UNIQUE_KEY>
+        <myns:NAME>Tasiujaq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>024K12</myns:NTS50>
+        <myns:LAT>584200</myns:LAT>
+        <myns:LONG>695600</myns:LONG>
+        <myns:SGC_CODE>2499892</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>846342.812500,1580763.000000 846342.812500,1580763.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>846342.812500,1580763.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>22</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKQQB</myns:UNIQUE_KEY>
+        <myns:NAME>Ivujivik</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>035K05</myns:NTS50>
+        <myns:LAT>622500</myns:LAT>
+        <myns:LONG>775500</myns:LONG>
+        <myns:SGC_CODE>2499140</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1295136.250000,1574896.500000 1295136.250000,1574896.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1295136.250000,1574896.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>23</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJNEV</myns:UNIQUE_KEY>
+        <myns:NAME>Quaqtaq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>025F04</myns:NTS50>
+        <myns:LAT>610200</myns:LAT>
+        <myns:LONG>693700</myns:LONG>
+        <myns:SGC_CODE>2499889</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1093477.000000,991161.687500 1093477.000000,991161.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1093477.000000,991161.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>24</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ELZXX</myns:UNIQUE_KEY>
+        <myns:NAME>Umiujaq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>034C10</myns:NTS50>
+        <myns:LAT>563318</myns:LAT>
+        <myns:LONG>763310</myns:LONG>
+        <myns:SGC_CODE>2499080</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1057423.750000,834306.375000 1057423.750000,834306.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1057423.750000,834306.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>25</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJKNA</myns:UNIQUE_KEY>
+        <myns:NAME>Kuujjuarapik</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>033N05</myns:NTS50>
+        <myns:LAT>551700</myns:LAT>
+        <myns:LONG>774500</myns:LONG>
+        <myns:SGC_CODE>2499075</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1056597.500000,579386.750000 1056597.500000,579386.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1056597.500000,579386.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>26</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKZMY</myns:UNIQUE_KEY>
+        <myns:NAME>Wemindji</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>033D15</myns:NTS50>
+        <myns:LAT>530000</myns:LAT>
+        <myns:LONG>784900</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1098999.875000,502059.375000 1098999.875000,502059.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1098999.875000,502059.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>27</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGFVN</myns:UNIQUE_KEY>
+        <myns:NAME>Eastmain</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>033D02</myns:NTS50>
+        <myns:LAT>521500</myns:LAT>
+        <myns:LONG>783000</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>760894.125000,-51880.125000 760894.125000,-51880.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>760894.125000,-51880.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>28</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGDZ</myns:UNIQUE_KEY>
+        <myns:NAME>Wawa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041N15</myns:NTS50>
+        <myns:LAT>475900</myns:LAT>
+        <myns:LONG>844700</myns:LONG>
+        <myns:SGC_CODE>3557076</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>30951.140625,-28853.761719 30951.140625,-28853.761719</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>30951.140625,-28853.761719</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>29</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCJJL</myns:UNIQUE_KEY>
+        <myns:NAME>Rainy River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052D10</myns:NTS50>
+        <myns:LAT>484300</myns:LAT>
+        <myns:LONG>943400</myns:LONG>
+        <myns:SGC_CODE>3559042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>592502.750000,714152.812500 592502.750000,714152.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>592502.750000,714152.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>30</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FERDZ</myns:UNIQUE_KEY>
+        <myns:NAME>Peawanuck</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>043N03</myns:NTS50>
+        <myns:LAT>550100</myns:LAT>
+        <myns:LONG>852500</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>329838.406250,547961.625000 329838.406250,547961.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>329838.406250,547961.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>31</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAIJC</myns:UNIQUE_KEY>
+        <myns:NAME>Big Trout Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>053H13</myns:NTS50>
+        <myns:LAT>534900</myns:LAT>
+        <myns:LONG>895300</myns:LONG>
+        <myns:SGC_CODE>3560090</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>480922.468750,381071.656250 480922.468750,381071.656250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>480922.468750,381071.656250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>32</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBWGP</myns:UNIQUE_KEY>
+        <myns:NAME>Lansdowne House</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>043D04</myns:NTS50>
+        <myns:LAT>521400</myns:LAT>
+        <myns:LONG>875300</myns:LONG>
+        <myns:SGC_CODE>3560081</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>441133.062500,795571.812500 441133.062500,795571.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>441133.062500,795571.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>33</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBEYY</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Severn</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>043M13</myns:NTS50>
+        <myns:LAT>555900</myns:LAT>
+        <myns:LONG>873800</myns:LONG>
+        <myns:SGC_CODE>3560090</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-284571.062500,475327.812500 -284571.062500,475327.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-284571.062500,475327.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>34</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAJQX</myns:UNIQUE_KEY>
+        <myns:NAME>Grand Rapids</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063G03</myns:NTS50>
+        <myns:LAT>531042</myns:LAT>
+        <myns:LONG>991553</myns:LONG>
+        <myns:SGC_CODE>4621078</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-136275.562500,377548.312500 -136275.562500,377548.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-136275.562500,377548.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>35</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GACFO</myns:UNIQUE_KEY>
+        <myns:NAME>Berens River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063A06</myns:NTS50>
+        <myns:LAT>522155</myns:LAT>
+        <myns:LONG>970145</myns:LONG>
+        <myns:SGC_CODE>4619045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>32349.021484,607018.187500 32349.021484,607018.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>32349.021484,607018.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>36</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAJJI</myns:UNIQUE_KEY>
+        <myns:NAME>Gods Lake Narrows</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>053L09</myns:NTS50>
+        <myns:LAT>543317</myns:LAT>
+        <myns:LONG>942835</myns:LONG>
+        <myns:SGC_CODE>4622046</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-382720.406250,1001426.312500 -382720.406250,1001426.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-382720.406250,1001426.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>37</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GADRG</myns:UNIQUE_KEY>
+        <myns:NAME>Brochet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>064F13</myns:NTS50>
+        <myns:LAT>575247</myns:LAT>
+        <myns:LONG>1014016</myns:LONG>
+        <myns:SGC_CODE>4623062</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-361889.281250,878233.750000 -361889.281250,878233.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-361889.281250,878233.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>38</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAPQK</myns:UNIQUE_KEY>
+        <myns:NAME>Lynn Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>064C14</myns:NTS50>
+        <myns:LAT>565106</myns:LAT>
+        <myns:LONG>1010248</myns:LONG>
+        <myns:SGC_CODE>4623047</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-387338.843750,764024.625000 -387338.843750,764024.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-387338.843750,764024.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>39</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAWIU</myns:UNIQUE_KEY>
+        <myns:NAME>Pukatawagan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063N11</myns:NTS50>
+        <myns:LAT>554432</myns:LAT>
+        <myns:LONG>1011857</myns:LONG>
+        <myns:SGC_CODE>4623062</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-231224.406250,865377.687500 -231224.406250,865377.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-231224.406250,865377.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>40</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAZXJ</myns:UNIQUE_KEY>
+        <myns:NAME>South Indian Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>064B15</myns:NTS50>
+        <myns:LAT>564649</myns:LAT>
+        <myns:LONG>985549</myns:LONG>
+        <myns:SGC_CODE>4623037</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-404038.187500,637434.000000 -404038.187500,637434.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-404038.187500,637434.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>41</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAFRM</myns:UNIQUE_KEY>
+        <myns:NAME>Cranberry Portage</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063K11</myns:NTS50>
+        <myns:LAT>543510</myns:LAT>
+        <myns:LONG>1012238</myns:LONG>
+        <myns:SGC_CODE>4621057</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1007258.125000,325101.781250 -1007258.125000,325101.781250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1007258.125000,325101.781250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>42</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HATYU</myns:UNIQUE_KEY>
+        <myns:NAME>Leader</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072K13</myns:NTS50>
+        <myns:LAT>505300</myns:LAT>
+        <myns:LONG>1093300</myns:LONG>
+        <myns:SGC_CODE>4708058</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-465059.843750,573132.062500 -465059.843750,573132.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-465059.843750,573132.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>43</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAEPO</myns:UNIQUE_KEY>
+        <myns:NAME>Cumberland House</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>063E16</myns:NTS50>
+        <myns:LAT>535800</myns:LAT>
+        <myns:LONG>1021600</myns:LONG>
+        <myns:SGC_CODE>4718005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-453075.312500,747512.000000 -453075.312500,747512.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-453075.312500,747512.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>44</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAHIH</myns:UNIQUE_KEY>
+        <myns:NAME>Sandy Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>063M09</myns:NTS50>
+        <myns:LAT>553100</myns:LAT>
+        <myns:LONG>1021900</myns:LONG>
+        <myns:SGC_CODE>4718058</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-671115.125000,1202309.875000 -671115.125000,1202309.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-671115.125000,1202309.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>45</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAPNW</myns:UNIQUE_KEY>
+        <myns:NAME>Fond-du-Lac</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>074O06</myns:NTS50>
+        <myns:LAT>591900</myns:LAT>
+        <myns:LONG>1071200</myns:LONG>
+        <myns:SGC_CODE>35551</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-596836.625000,1169748.250000 -596836.625000,1169748.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-596836.625000,1169748.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>46</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAEBJ</myns:UNIQUE_KEY>
+        <myns:NAME>Black Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>074P04</myns:NTS50>
+        <myns:LAT>590800</myns:LAT>
+        <myns:LONG>1053600</myns:LONG>
+        <myns:SGC_CODE>4718090</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1177420.000000,1225545.000000 -1177420.000000,1225545.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1177420.000000,1225545.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>47</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAFFY</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Vermilion</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>084K08</myns:NTS50>
+        <myns:LAT>582400</myns:LAT>
+        <myns:LONG>1160000</myns:LONG>
+        <myns:SGC_CODE>4817095</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-898579.875000,1185160.125000 -898579.875000,1185160.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-898579.875000,1185160.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>48</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAFEW</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Chipewyan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>074L11</myns:NTS50>
+        <myns:LAT>584200</myns:LAT>
+        <myns:LONG>1110800</myns:LONG>
+        <myns:SGC_CODE>4816030</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1594893.625000,1120204.375000 -1594893.625000,1120204.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1594893.625000,1120204.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>49</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBAPP</myns:UNIQUE_KEY>
+        <myns:NAME>Hudson&#39;s Hope</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>094A04</myns:NTS50>
+        <myns:LAT>560000</myns:LAT>
+        <myns:LONG>1220000</myns:LONG>
+        <myns:SGC_CODE>5955025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1944708.000000,1194567.375000 -1944708.000000,1194567.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1944708.000000,1194567.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>51</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAPKE</myns:UNIQUE_KEY>
+        <myns:NAME>Hazelton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093M05</myns:NTS50>
+        <myns:LAT>551500</myns:LAT>
+        <myns:LONG>1274000</myns:LONG>
+        <myns:SGC_CODE>5949022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1999979.375000,1782852.000000 -1999979.375000,1782852.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1999979.375000,1782852.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>52</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JARKT</myns:UNIQUE_KEY>
+        <myns:NAME>Atlin</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>104N12</myns:NTS50>
+        <myns:LAT>593400</myns:LAT>
+        <myns:LONG>1334200</myns:LONG>
+        <myns:SGC_CODE>5957020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2108277.250000,2256413.000000 -2108277.250000,2256413.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2108277.250000,2256413.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>53</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAALD</myns:UNIQUE_KEY>
+        <myns:NAME>Beaver Creek</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>115K07</myns:NTS50>
+        <myns:LAT>622300</myns:LAT>
+        <myns:LONG>1405230</myns:LONG>
+        <myns:SGC_CODE>6001042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2090424.250000,2012521.125000 -2090424.250000,2012521.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2090424.250000,2012521.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>54</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KACRQ</myns:UNIQUE_KEY>
+        <myns:NAME>Haines Junction</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>115A13</myns:NTS50>
+        <myns:LAT>604510</myns:LAT>
+        <myns:LONG>1373025</myns:LONG>
+        <myns:SGC_CODE>6001018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1947101.250000,2085327.250000 -1947101.250000,2085327.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1947101.250000,2085327.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>55</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KABBU</myns:UNIQUE_KEY>
+        <myns:NAME>Carmacks</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>115I01</myns:NTS50>
+        <myns:LAT>620520</myns:LAT>
+        <myns:LONG>1361720</myns:LONG>
+        <myns:SGC_CODE>6001012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1912932.875000,2155741.750000 -1912932.875000,2155741.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1912932.875000,2155741.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>56</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAFAF</myns:UNIQUE_KEY>
+        <myns:NAME>Pelly Crossing</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>115I15</myns:NTS50>
+        <myns:LAT>624905</myns:LAT>
+        <myns:LONG>1363410</myns:LONG>
+        <myns:SGC_CODE>6001041</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1836493.750000,2207657.000000 -1836493.750000,2207657.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1836493.750000,2207657.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>57</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAEBA</myns:UNIQUE_KEY>
+        <myns:NAME>Mayo</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105M12</myns:NTS50>
+        <myns:LAT>633535</myns:LAT>
+        <myns:LONG>1355345</myns:LONG>
+        <myns:SGC_CODE>6001022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1931598.750000,2348612.250000 -1931598.750000,2348612.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1931598.750000,2348612.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>58</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KABPC</myns:UNIQUE_KEY>
+        <myns:NAME>Dawson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>116B03</myns:NTS50>
+        <myns:LAT>640345</myns:LAT>
+        <myns:LONG>1392550</myns:LONG>
+        <myns:SGC_CODE>6001029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2007128.375000,1872717.500000 -2007128.375000,1872717.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2007128.375000,1872717.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>59</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KABAL</myns:UNIQUE_KEY>
+        <myns:NAME>Carcross</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105D02</myns:NTS50>
+        <myns:LAT>601000</myns:LAT>
+        <myns:LONG>1344200</myns:LONG>
+        <myns:SGC_CODE>6001045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1916511.875000,1814962.500000 -1916511.875000,1814962.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1916511.875000,1814962.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>60</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAGQJ</myns:UNIQUE_KEY>
+        <myns:NAME>Teslin</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105C02</myns:NTS50>
+        <myns:LAT>601000</myns:LAT>
+        <myns:LONG>1324315</myns:LONG>
+        <myns:SGC_CODE>6001006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1794824.375000,1968506.250000 -1794824.375000,1968506.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1794824.375000,1968506.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>61</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAFPB</myns:UNIQUE_KEY>
+        <myns:NAME>Ross River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105F16</myns:NTS50>
+        <myns:LAT>615900</myns:LAT>
+        <myns:LONG>1322600</myns:LONG>
+        <myns:SGC_CODE>6001037</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1740622.125000,1689746.375000 -1740622.125000,1689746.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1740622.125000,1689746.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>62</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAHDJ</myns:UNIQUE_KEY>
+        <myns:NAME>Watson Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105A02</myns:NTS50>
+        <myns:LAT>600350</myns:LAT>
+        <myns:LONG>1284220</myns:LONG>
+        <myns:SGC_CODE>6001003</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1795865.875000,2212975.500000 -1795865.875000,2212975.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1795865.875000,2212975.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>63</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KABYO</myns:UNIQUE_KEY>
+        <myns:NAME>Elsa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105M14</myns:NTS50>
+        <myns:LAT>635445</myns:LAT>
+        <myns:LONG>1352850</myns:LONG>
+        <myns:SGC_CODE>6001045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1233785.750000,2325235.750000 1233785.750000,2325235.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1233785.750000,2325235.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>64</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LADUC</myns:UNIQUE_KEY>
+        <myns:NAME>Broughton Island</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>026P00</myns:NTS50>
+        <myns:LAT>673300</myns:LAT>
+        <myns:LONG>640200</myns:LONG>
+        <myns:SGC_CODE>6104010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>856073.125000,1786747.625000 856073.125000,1786747.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>856073.125000,1786747.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>65</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAELB</myns:UNIQUE_KEY>
+        <myns:NAME>Cape Dorset</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>036C02</myns:NTS50>
+        <myns:LAT>641400</myns:LAT>
+        <myns:LONG>763230</myns:LONG>
+        <myns:SGC_CODE>6104007</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>380948.625000,1939989.125000 380948.625000,1939989.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>380948.625000,1939989.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>66</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAUCM</myns:UNIQUE_KEY>
+        <myns:NAME>Repulse Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>046L00</myns:NTS50>
+        <myns:LAT>663200</myns:LAT>
+        <myns:LONG>861500</myns:LONG>
+        <myns:SGC_CODE>6105027</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>120429.843750,1443104.250000 120429.843750,1443104.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>120429.843750,1443104.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>67</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAZWJ</myns:UNIQUE_KEY>
+        <myns:NAME>Whale Cove</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>055K00</myns:NTS50>
+        <myns:LAT>621015</myns:LAT>
+        <myns:LONG>923440</myns:LONG>
+        <myns:SGC_CODE>6105016</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>205518.500000,1572117.500000 205518.500000,1572117.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>205518.500000,1572117.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>68</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAEVR</myns:UNIQUE_KEY>
+        <myns:NAME>Chesterfield Inlet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>055O07</myns:NTS50>
+        <myns:LAT>632020</myns:LAT>
+        <myns:LONG>904205</myns:LONG>
+        <myns:SGC_CODE>6105019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>555205.687500,1706447.750000 555205.687500,1706447.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>555205.687500,1706447.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>69</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAFLL</myns:UNIQUE_KEY>
+        <myns:NAME>Coral Harbour</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>046B00</myns:NTS50>
+        <myns:LAT>640800</myns:LAT>
+        <myns:LONG>831000</myns:LONG>
+        <myns:SGC_CODE>6105014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1480152.000000,1566750.500000 -1480152.000000,1566750.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1480152.000000,1566750.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>70</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAIKS</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Liard</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>095B03</myns:NTS50>
+        <myns:LAT>601400</myns:LAT>
+        <myns:LONG>1232800</myns:LONG>
+        <myns:SGC_CODE>6106009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1148508.125000,1563830.125000 -1148508.125000,1563830.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1148508.125000,1563830.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>71</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAILA</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Providence</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>085F05</myns:NTS50>
+        <myns:LAT>612100</myns:LAT>
+        <myns:LONG>1173900</myns:LONG>
+        <myns:SGC_CODE>6106014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1018473.187500,1683098.875000 -1018473.187500,1683098.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1018473.187500,1683098.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>72</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LATRU</myns:UNIQUE_KEY>
+        <myns:NAME>Rae</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>085K16</myns:NTS50>
+        <myns:LAT>625000</myns:LAT>
+        <myns:LONG>1160300</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-958677.250000,1473824.250000 -958677.250000,1473824.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-958677.250000,1473824.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>73</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAILE</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Resolution</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>085H04</myns:NTS50>
+        <myns:LAT>611015</myns:LAT>
+        <myns:LONG>1134015</myns:LONG>
+        <myns:SGC_CODE>6106018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-779908.875000,1560690.750000 -779908.875000,1560690.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-779908.875000,1560690.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>74</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCABE</myns:UNIQUE_KEY>
+        <myns:NAME>{1}utselk&#39;e</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>075L07</myns:NTS50>
+        <myns:LAT>622418</myns:LAT>
+        <myns:LONG>1104415</myns:LONG>
+        <myns:SGC_CODE>6106020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1396023.875000,2259482.750000 -1396023.875000,2259482.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1396023.875000,2259482.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>75</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAIKL</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Good Hope</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>106I07</myns:NTS50>
+        <myns:LAT>661525</myns:LAT>
+        <myns:LONG>1283800</myns:LONG>
+        <myns:SGC_CODE>6107009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1371016.000000,2122388.750000 -1371016.000000,2122388.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1371016.000000,2122388.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>76</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LARCU</myns:UNIQUE_KEY>
+        <myns:NAME>Norman Wells</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>096E00</myns:NTS50>
+        <myns:LAT>651655</myns:LAT>
+        <myns:LONG>1264945</myns:LONG>
+        <myns:SGC_CODE>6107007</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1340793.625000,1865922.250000 -1340793.625000,1865922.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1340793.625000,1865922.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>77</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LBAKM</myns:UNIQUE_KEY>
+        <myns:NAME>Wrigley</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>095O05</myns:NTS50>
+        <myns:LAT>631605</myns:LAT>
+        <myns:LONG>1233640</myns:LONG>
+        <myns:SGC_CODE>6106044</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-982934.937500,2742542.750000 -982934.937500,2742542.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-982934.937500,2742542.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>78</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAUSB</myns:UNIQUE_KEY>
+        <myns:NAME>Sachs Harbour</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>097G15</myns:NTS50>
+        <myns:LAT>715900</myns:LAT>
+        <myns:LONG>1251425</myns:LONG>
+        <myns:SGC_CODE>6107041</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1507323.500000,2588546.750000 -1507323.500000,2588546.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1507323.500000,2588546.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>79</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAATD</myns:UNIQUE_KEY>
+        <myns:NAME>Aklavik</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>107B00</myns:NTS50>
+        <myns:LAT>681310</myns:LAT>
+        <myns:LONG>1350020</myns:LONG>
+        <myns:SGC_CODE>6107025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1544923.875000,2514898.250000 -1544923.875000,2514898.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1544923.875000,2514898.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>80</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAIKT</myns:UNIQUE_KEY>
+        <myns:NAME>Fort McPherson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>106M07</myns:NTS50>
+        <myns:LAT>672620</myns:LAT>
+        <myns:LONG>1345250</myns:LONG>
+        <myns:SGC_CODE>6107015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1512571.875000,2483269.750000 -1512571.875000,2483269.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1512571.875000,2483269.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>81</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCACE</myns:UNIQUE_KEY>
+        <myns:NAME>Tsiigehtchic</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>106N05</myns:NTS50>
+        <myns:LAT>672635</myns:LAT>
+        <myns:LONG>1334420</myns:LONG>
+        <myns:SGC_CODE>6107010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1367443.500000,2647267.000000 -1367443.500000,2647267.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1367443.500000,2647267.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>82</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAYQV</myns:UNIQUE_KEY>
+        <myns:NAME>Tuktoyaktuk</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>107C00</myns:NTS50>
+        <myns:LAT>692715</myns:LAT>
+        <myns:LONG>1330155</myns:LONG>
+        <myns:SGC_CODE>6107036</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1077696.250000,2465230.000000 -1077696.250000,2465230.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1077696.250000,2465230.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>83</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LASFJ</myns:UNIQUE_KEY>
+        <myns:NAME>Paulatuk</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>097C08</myns:NTS50>
+        <myns:LAT>692100</myns:LAT>
+        <myns:LONG>1240400</myns:LONG>
+        <myns:SGC_CODE>6107014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-800101.000000,2513564.000000 -800101.000000,2513564.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-800101.000000,2513564.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>84</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAKQG</myns:UNIQUE_KEY>
+        <myns:NAME>Holman</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>087F10</myns:NTS50>
+        <myns:LAT>704400</myns:LAT>
+        <myns:LONG>1174500</myns:LONG>
+        <myns:SGC_CODE>6108095</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-34505.500000,2140018.750000 -34505.500000,2140018.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-34505.500000,2140018.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>85</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAJCU</myns:UNIQUE_KEY>
+        <myns:NAME>Gjoa Haven</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>057B12</myns:NTS50>
+        <myns:LAT>683730</myns:LAT>
+        <myns:LONG>955240</myns:LONG>
+        <myns:SGC_CODE>6108081</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>58551.257812,2236470.250000 58551.257812,2236470.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>58551.257812,2236470.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>86</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCABD</myns:UNIQUE_KEY>
+        <myns:NAME>Taloyoak</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>057C10</myns:NTS50>
+        <myns:LAT>693210</myns:LAT>
+        <myns:LONG>933115</myns:LONG>
+        <myns:SGC_CODE>6108087</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>207609.062500,2139070.500000 207609.062500,2139070.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>207609.062500,2139070.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>87</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LASJF</myns:UNIQUE_KEY>
+        <myns:NAME>Pelly Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>057A00</myns:NTS50>
+        <myns:LAT>683205</myns:LAT>
+        <myns:LONG>894930</myns:LONG>
+        <myns:SGC_CODE>6108047</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>499196.500000,2273446.000000 499196.500000,2273446.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>499196.500000,2273446.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>88</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LALCB</myns:UNIQUE_KEY>
+        <myns:NAME>Igloolik</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>047D00</myns:NTS50>
+        <myns:LAT>692300</myns:LAT>
+        <myns:LONG>814800</myns:LONG>
+        <myns:SGC_CODE>6104012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>532856.500000,2216305.750000 532856.500000,2216305.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>532856.500000,2216305.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>89</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAJWH</myns:UNIQUE_KEY>
+        <myns:NAME>Hall Beach</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>047A00</myns:NTS50>
+        <myns:LAT>684725</myns:LAT>
+        <myns:LONG>811415</myns:LONG>
+        <myns:SGC_CODE>6104011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>317457.968750,3026733.250000 317457.968750,3026733.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>317457.968750,3026733.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>90</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAJQR</myns:UNIQUE_KEY>
+        <myns:NAME>Grise Fiord</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>049A05</myns:NTS50>
+        <myns:LAT>762500</myns:LAT>
+        <myns:LONG>825345</myns:LONG>
+        <myns:SGC_CODE>6104025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>313456.093750,2644261.000000 313456.093750,2644261.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>313456.093750,2644261.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>91</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LABJT</myns:UNIQUE_KEY>
+        <myns:NAME>Arctic Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>048C00</myns:NTS50>
+        <myns:LAT>730200</myns:LAT>
+        <myns:LONG>851000</myns:LONG>
+        <myns:SGC_CODE>6104018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>553678.437500,2655689.250000 553678.437500,2655689.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>553678.437500,2655689.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>92</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LASXA</myns:UNIQUE_KEY>
+        <myns:NAME>Pond Inlet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>038B00</myns:NTS50>
+        <myns:LAT>724200</myns:LAT>
+        <myns:LONG>775900</myns:LONG>
+        <myns:SGC_CODE>6104020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>937400.937500,2536596.500000 937400.937500,2536596.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>937400.937500,2536596.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>93</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAFDA</myns:UNIQUE_KEY>
+        <myns:NAME>Clyde River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>027F00</myns:NTS50>
+        <myns:LAT>702805</myns:LAT>
+        <myns:LONG>683540</myns:LONG>
+        <myns:SGC_CODE>6104015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>3481.167969,2800051.000000 3481.167969,2800051.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>3481.167969,2800051.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>94</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAUCS</myns:UNIQUE_KEY>
+        <myns:NAME>Resolute</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>058F11</myns:NTS50>
+        <myns:LAT>744145</myns:LAT>
+        <myns:LONG>944945</myns:LONG>
+        <myns:SGC_CODE>6104022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>938477.250000,945390.125000 938477.250000,945390.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>938477.250000,945390.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>95</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAUZB</myns:UNIQUE_KEY>
+        <myns:NAME>Sanikiluaq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>034D00</myns:NTS50>
+        <myns:LAT>563200</myns:LAT>
+        <myns:LONG>791400</myns:LONG>
+        <myns:SGC_CODE>6104001</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2917330.250000,775571.375000 2917330.250000,775571.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2917330.250000,775571.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>96</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AARHJ</myns:UNIQUE_KEY>
+        <myns:NAME>Placentia</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>001N04</myns:NTS50>
+        <myns:LAT>471400</myns:LAT>
+        <myns:LONG>535800</myns:LONG>
+        <myns:SGC_CODE>1001240</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2551633.000000,1014019.187500 2551633.000000,1014019.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2551633.000000,1014019.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>97</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AATPY</myns:UNIQUE_KEY>
+        <myns:NAME>Roddickton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>012I16</myns:NTS50>
+        <myns:LAT>505200</myns:LAT>
+        <myns:LONG>560800</myns:LONG>
+        <myns:SGC_CODE>1009006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2547125.000000,1077419.750000 2547125.000000,1077419.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2547125.000000,1077419.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>98</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAWBN</myns:UNIQUE_KEY>
+        <myns:NAME>St. Anthony</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>002M05</myns:NTS50>
+        <myns:LAT>512200</myns:LAT>
+        <myns:LONG>553500</myns:LONG>
+        <myns:SGC_CODE>1009029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2602023.250000,923168.875000 2602023.250000,923168.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2602023.250000,923168.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>99</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ABAUI</myns:UNIQUE_KEY>
+        <myns:NAME>Baie Verte</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>012H16</myns:NTS50>
+        <myns:LAT>495600</myns:LAT>
+        <myns:LONG>561100</myns:LONG>
+        <myns:SGC_CODE>1008079</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2577520.750000,804009.062500 2577520.750000,804009.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2577520.750000,804009.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>100</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAFKA</myns:UNIQUE_KEY>
+        <myns:NAME>Deer Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>012H03</myns:NTS50>
+        <myns:LAT>491000</myns:LAT>
+        <myns:LONG>572600</myns:LONG>
+        <myns:SGC_CODE>1005004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2634849.500000,794826.625000 2634849.500000,794826.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2634849.500000,794826.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>101</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ACGAI</myns:UNIQUE_KEY>
+        <myns:NAME>Buchans</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>012A15</myns:NTS50>
+        <myns:LAT>484930</myns:LAT>
+        <myns:LONG>565045</myns:LONG>
+        <myns:SGC_CODE>1006031</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2660425.750000,654305.687500 2660425.750000,654305.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2660425.750000,654305.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>102</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AADBW</myns:UNIQUE_KEY>
+        <myns:NAME>Burgeo</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>011P12</myns:NTS50>
+        <myns:LAT>473700</myns:LAT>
+        <myns:LONG>573700</myns:LONG>
+        <myns:SGC_CODE>1003028</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2784306.250000,715322.750000 2784306.250000,715322.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2784306.250000,715322.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>103</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAJKQ</myns:UNIQUE_KEY>
+        <myns:NAME>Harbour Breton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>001M05</myns:NTS50>
+        <myns:LAT>472900</myns:LAT>
+        <myns:LONG>554800</myns:LONG>
+        <myns:SGC_CODE>1003008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2814942.500000,681601.750000 2814942.500000,681601.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2814942.500000,681601.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>104</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAIHR</myns:UNIQUE_KEY>
+        <myns:NAME>Grand Bank</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>001M04</myns:NTS50>
+        <myns:LAT>470600</myns:LAT>
+        <myns:LONG>554600</myns:LONG>
+        <myns:SGC_CODE>1002019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2871589.000000,943141.937500 2871589.000000,943141.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2871589.000000,943141.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>105</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AACKH</myns:UNIQUE_KEY>
+        <myns:NAME>Bonavista</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>002C11</myns:NTS50>
+        <myns:LAT>483900</myns:LAT>
+        <myns:LONG>530700</myns:LONG>
+        <myns:SGC_CODE>1007023</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1910379.125000,1337399.000000 1910379.125000,1337399.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1910379.125000,1337399.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>106</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAPBP</myns:UNIQUE_KEY>
+        <myns:NAME>Nain</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>014C12</myns:NTS50>
+        <myns:LAT>563200</myns:LAT>
+        <myns:LONG>614100</myns:LONG>
+        <myns:SGC_CODE>1010056</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2705753.250000,874096.500000 2705753.250000,874096.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2705753.250000,874096.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>107</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AACMK</myns:UNIQUE_KEY>
+        <myns:NAME>Botwood</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>002E03</myns:NTS50>
+        <myns:LAT>490900</myns:LAT>
+        <myns:LONG>552100</myns:LONG>
+        <myns:SGC_CODE>1006022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2493935.250000,948673.687500 2493935.250000,948673.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2493935.250000,948673.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>108</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAROJ</myns:UNIQUE_KEY>
+        <myns:NAME>Port Saunders</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>012I11</myns:NTS50>
+        <myns:LAT>503900</myns:LAT>
+        <myns:LONG>571800</myns:LONG>
+        <myns:SGC_CODE>1009019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2434957.000000,347013.593750 2434957.000000,347013.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2434957.000000,347013.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>109</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>BACII</myns:UNIQUE_KEY>
+        <myns:NAME>Souris</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>11</myns:REG_CODE>
+        <myns:NTS50>011L08</myns:NTS50>
+        <myns:LAT>462100</myns:LAT>
+        <myns:LONG>621500</myns:LONG>
+        <myns:SGC_CODE>1101036</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2578914.250000,292073.093750 2578914.250000,292073.093750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2578914.250000,292073.093750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>110</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAGBW</myns:UNIQUE_KEY>
+        <myns:NAME>Canso</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011F07</myns:NTS50>
+        <myns:LAT>452000</myns:LAT>
+        <myns:LONG>610000</myns:LONG>
+        <myns:SGC_CODE>1213006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2536072.750000,311524.968750 2536072.750000,311524.968750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2536072.750000,311524.968750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>111</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBELL</myns:UNIQUE_KEY>
+        <myns:NAME>Port Hawkesbury</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011F11</myns:NTS50>
+        <myns:LAT>453700</myns:LAT>
+        <myns:LONG>612100</myns:LONG>
+        <myns:SGC_CODE>1215002</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2494520.000000,285855.406250 2494520.000000,285855.406250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2494520.000000,285855.406250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>112</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAATB</myns:UNIQUE_KEY>
+        <myns:NAME>Antigonish</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011F12</myns:NTS50>
+        <myns:LAT>453700</myns:LAT>
+        <myns:LONG>620000</myns:LONG>
+        <myns:SGC_CODE>1214002</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2348711.750000,204294.062500 2348711.750000,204294.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2348711.750000,204294.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>113</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBKDH</myns:UNIQUE_KEY>
+        <myns:NAME>Springhill</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021H09</myns:NTS50>
+        <myns:LAT>453900</myns:LAT>
+        <myns:LONG>640300</myns:LONG>
+        <myns:SGC_CODE>1211008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2377598.000000,135734.703125 2377598.000000,135734.703125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2377598.000000,135734.703125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>114</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBPAK</myns:UNIQUE_KEY>
+        <myns:NAME>Windsor</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021A16</myns:NTS50>
+        <myns:LAT>445900</myns:LAT>
+        <myns:LONG>640800</myns:LONG>
+        <myns:SGC_CODE>1208002</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2398677.250000,70608.140625 2398677.250000,70608.140625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2398677.250000,70608.140625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>115</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAWAZ</myns:UNIQUE_KEY>
+        <myns:NAME>Lunenburg</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021A08</myns:NTS50>
+        <myns:LAT>442300</myns:LAT>
+        <myns:LONG>641900</myns:LONG>
+        <myns:SGC_CODE>1206006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2388340.000000,19784.322266 2388340.000000,19784.322266</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2388340.000000,19784.322266</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>116</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAUWZ</myns:UNIQUE_KEY>
+        <myns:NAME>Liverpool</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021A02</myns:NTS50>
+        <myns:LAT>440200</myns:LAT>
+        <myns:LONG>644300</myns:LONG>
+        <myns:SGC_CODE>1204006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2313364.750000,98278.921875 2313364.750000,98278.921875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2313364.750000,98278.921875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>117</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAZHC</myns:UNIQUE_KEY>
+        <myns:NAME>Middleton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021A14</myns:NTS50>
+        <myns:LAT>445700</myns:LAT>
+        <myns:LONG>650400</myns:LONG>
+        <myns:SGC_CODE>1205016</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2279399.000000,39858.000000 2279399.000000,39858.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2279399.000000,39858.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>118</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAJOA</myns:UNIQUE_KEY>
+        <myns:NAME>Digby</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021A12</myns:NTS50>
+        <myns:LAT>443700</myns:LAT>
+        <myns:LONG>654600</myns:LONG>
+        <myns:SGC_CODE>1203006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2359906.500000,-30454.435547 2359906.500000,-30454.435547</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2359906.500000,-30454.435547</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>119</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBIKP</myns:UNIQUE_KEY>
+        <myns:NAME>Shelburne</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>020P14</myns:NTS50>
+        <myns:LAT>434600</myns:LAT>
+        <myns:LONG>651900</myns:LONG>
+        <myns:SGC_CODE>1201008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2140538.000000,47770.507812 2140538.000000,47770.507812</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2140538.000000,47770.507812</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>120</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAZBZ</myns:UNIQUE_KEY>
+        <myns:NAME>St. Stephen</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021G03</myns:NTS50>
+        <myns:LAT>451200</myns:LAT>
+        <myns:LONG>671700</myns:LONG>
+        <myns:SGC_CODE>1302037</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2245041.000000,161347.687500 2245041.000000,161347.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2245041.000000,161347.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>121</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DASFF</myns:UNIQUE_KEY>
+        <myns:NAME>Sussex</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021H12</myns:NTS50>
+        <myns:LAT>454300</myns:LAT>
+        <myns:LONG>653100</myns:LONG>
+        <myns:SGC_CODE>1305022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2186960.500000,180620.828125 2186960.500000,180620.828125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2186960.500000,180620.828125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>122</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAVMY</myns:UNIQUE_KEY>
+        <myns:NAME>Minto</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021J01</myns:NTS50>
+        <myns:LAT>460500</myns:LAT>
+        <myns:LONG>660400</myns:LONG>
+        <myns:SGC_CODE>1304022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2073762.125000,134635.718750 2073762.125000,134635.718750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2073762.125000,134635.718750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>123</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAWNW</myns:UNIQUE_KEY>
+        <myns:NAME>Woodstock</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021J04</myns:NTS50>
+        <myns:LAT>460900</myns:LAT>
+        <myns:LONG>673500</myns:LONG>
+        <myns:SGC_CODE>1311006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2066944.875000,365763.593750 2066944.875000,365763.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2066944.875000,365763.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>124</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAAOF</myns:UNIQUE_KEY>
+        <myns:NAME>Dalhousie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>022B01</myns:NTS50>
+        <myns:LAT>480400</myns:LAT>
+        <myns:LONG>662300</myns:LONG>
+        <myns:SGC_CODE>1314017</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1806165.250000,179390.765625 1806165.250000,179390.765625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1806165.250000,179390.765625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>125</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFKJR</myns:UNIQUE_KEY>
+        <myns:NAME>Baie-Saint-Paul</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021M07</myns:NTS50>
+        <myns:LAT>472700</myns:LAT>
+        <myns:LONG>703000</myns:LONG>
+        <myns:SGC_CODE>2416010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1847698.625000,185260.484375 1847698.625000,185260.484375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1847698.625000,185260.484375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>126</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGXQD</myns:UNIQUE_KEY>
+        <myns:NAME>La Pocatiere</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021M08</myns:NTS50>
+        <myns:LAT>472200</myns:LAT>
+        <myns:LONG>700200</myns:LONG>
+        <myns:SGC_CODE>2414085</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1876756.750000,288995.843750 1876756.750000,288995.843750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1876756.750000,288995.843750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>127</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIITL</myns:UNIQUE_KEY>
+        <myns:NAME>Trois-Pistoles</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022C03</myns:NTS50>
+        <myns:LAT>480700</myns:LAT>
+        <myns:LONG>691000</myns:LONG>
+        <myns:SGC_CODE>2411040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2081733.500000,486644.281250 2081733.500000,486644.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2081733.500000,486644.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>128</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHIXC</myns:UNIQUE_KEY>
+        <myns:NAME>Murdochville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022A14</myns:NTS50>
+        <myns:LAT>485800</myns:LAT>
+        <myns:LONG>653000</myns:LONG>
+        <myns:SGC_CODE>2403025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1999036.125000,462719.781250 1999036.125000,462719.781250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1999036.125000,462719.781250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>129</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFTLX</myns:UNIQUE_KEY>
+        <myns:NAME>Cap-Chat</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022G02</myns:NTS50>
+        <myns:LAT>490600</myns:LAT>
+        <myns:LONG>664100</myns:LONG>
+        <myns:SGC_CODE>2404045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2187455.750000,485611.062500 2187455.750000,485611.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2187455.750000,485611.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>130</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHPAM</myns:UNIQUE_KEY>
+        <myns:NAME>Perce</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022A09</myns:NTS50>
+        <myns:LAT>483200</myns:LAT>
+        <myns:LONG>641300</myns:LONG>
+        <myns:SGC_CODE>2402005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2177723.250000,468293.750000 2177723.250000,468293.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2177723.250000,468293.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>131</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EITOF</myns:UNIQUE_KEY>
+        <myns:NAME>Grande-Riviere</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022A08</myns:NTS50>
+        <myns:LAT>482400</myns:LAT>
+        <myns:LONG>643000</myns:LONG>
+        <myns:SGC_CODE>2402015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1170844.875000,-40391.718750 1170844.875000,-40391.718750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1170844.875000,-40391.718750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>132</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EILNZ</myns:UNIQUE_KEY>
+        <myns:NAME>Ville-Marie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031M06</myns:NTS50>
+        <myns:LAT>472000</myns:LAT>
+        <myns:LONG>792600</myns:LONG>
+        <myns:SGC_CODE>2485025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1213644.125000,-101917.742188 1213644.125000,-101917.742188</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1213644.125000,-101917.742188</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>133</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIGKH</myns:UNIQUE_KEY>
+        <myns:NAME>Temiscaming</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031L11</myns:NTS50>
+        <myns:LAT>464300</myns:LAT>
+        <myns:LONG>790600</myns:LONG>
+        <myns:SGC_CODE>2485005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1243342.750000,70735.031250 1243342.750000,70735.031250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1243342.750000,70735.031250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>134</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHCTX</myns:UNIQUE_KEY>
+        <myns:NAME>Malartic</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032D01</myns:NTS50>
+        <myns:LAT>480800</myns:LAT>
+        <myns:LONG>780800</myns:LONG>
+        <myns:SGC_CODE>2489015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1297680.375000,118098.242188 1297680.375000,118098.242188</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1297680.375000,118098.242188</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>135</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EICUR</myns:UNIQUE_KEY>
+        <myns:NAME>Senneterre</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032C06</myns:NTS50>
+        <myns:LAT>482300</myns:LAT>
+        <myns:LONG>771400</myns:LONG>
+        <myns:SGC_CODE>2489040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2136597.750000,679648.562500 2136597.750000,679648.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2136597.750000,679648.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>136</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGQDN</myns:UNIQUE_KEY>
+        <myns:NAME>Havre-Saint-Pierre</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>012L04</myns:NTS50>
+        <myns:LAT>501400</myns:LAT>
+        <myns:LONG>633600</myns:LONG>
+        <myns:SGC_CODE>2498040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2453537.750000,1022090.875000 2453537.750000,1022090.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2453537.750000,1022090.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>137</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHBMK</myns:UNIQUE_KEY>
+        <myns:NAME>Lourdes-de-Blanc-Sablon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>012P06</myns:NTS50>
+        <myns:LAT>512500</myns:LAT>
+        <myns:LONG>571200</myns:LONG>
+        <myns:SGC_CODE>2498005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1481175.625000,1312789.125000 1481175.625000,1312789.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1481175.625000,1312789.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>138</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJJIZ</myns:UNIQUE_KEY>
+        <myns:NAME>Kuujjuaq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>024K01</myns:NTS50>
+        <myns:LAT>580600</myns:LAT>
+        <myns:LONG>682400</myns:LONG>
+        <myns:SGC_CODE>2499893</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1022202.875000,663942.437500 1022202.875000,663942.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1022202.875000,663942.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>139</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJJJC</myns:UNIQUE_KEY>
+        <myns:NAME>Chisasibi</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>033E15</myns:NTS50>
+        <myns:LAT>534700</myns:LAT>
+        <myns:LONG>785300</myns:LONG>
+        <myns:SGC_CODE>2499814</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1105772.875000,417144.156250 1105772.875000,417144.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1105772.875000,417144.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>140</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ELBIF</myns:UNIQUE_KEY>
+        <myns:NAME>Waskaganish</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032M07</myns:NTS50>
+        <myns:LAT>512900</myns:LAT>
+        <myns:LONG>784500</myns:LONG>
+        <myns:SGC_CODE>2499806</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1465023.625000,399733.531250 1465023.625000,399733.531250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1465023.625000,399733.531250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>141</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EPKLO</myns:UNIQUE_KEY>
+        <myns:NAME>Mistissini</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032I05</myns:NTS50>
+        <myns:LAT>502500</myns:LAT>
+        <myns:LONG>735300</myns:LONG>
+        <myns:SGC_CODE>2499804</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1225621.750000,255989.609375 1225621.750000,255989.609375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1225621.750000,255989.609375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>142</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHEOS</myns:UNIQUE_KEY>
+        <myns:NAME>Matagami</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032F13</myns:NTS50>
+        <myns:LAT>494500</myns:LAT>
+        <myns:LONG>773800</myns:LONG>
+        <myns:SGC_CODE>2499015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1295465.250000,188731.406250 1295465.250000,188731.406250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1295465.250000,188731.406250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>143</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGYQT</myns:UNIQUE_KEY>
+        <myns:NAME>Lebel-sur-Quevillon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032F02</myns:NTS50>
+        <myns:LAT>490300</myns:LAT>
+        <myns:LONG>765900</myns:LONG>
+        <myns:SGC_CODE>2499005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1423220.250000,314094.218750 1423220.250000,314094.218750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1423220.250000,314094.218750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>144</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFVWZ</myns:UNIQUE_KEY>
+        <myns:NAME>Chapais</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032G15</myns:NTS50>
+        <myns:LAT>494700</myns:LAT>
+        <myns:LONG>745100</myns:LONG>
+        <myns:SGC_CODE>2499020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>943234.937500,1165669.750000 943234.937500,1165669.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>943234.937500,1165669.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>145</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJNEM</myns:UNIQUE_KEY>
+        <myns:NAME>Inukjuak</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>034L08</myns:NTS50>
+        <myns:LAT>582715</myns:LAT>
+        <myns:LONG>780607</myns:LONG>
+        <myns:SGC_CODE>2499879</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1541914.750000,-239625.390625 1541914.750000,-239625.390625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1541914.750000,-239625.390625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>146</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCIJQ</myns:UNIQUE_KEY>
+        <myns:NAME>Prescott</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031B12</myns:NTS50>
+        <myns:LAT>444300</myns:LAT>
+        <myns:LONG>753100</myns:LONG>
+        <myns:SGC_CODE>3507008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1015589.375000,-235032.171875 1015589.375000,-235032.171875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1015589.375000,-235032.171875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>147</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBYHR</myns:UNIQUE_KEY>
+        <myns:NAME>Little Current</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041H13</myns:NTS50>
+        <myns:LAT>455800</myns:LAT>
+        <myns:LONG>815600</myns:LONG>
+        <myns:SGC_CODE>3551019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1252469.375000,-136787.250000 1252469.375000,-136787.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1252469.375000,-136787.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>148</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEAGX</myns:UNIQUE_KEY>
+        <myns:NAME>Mattawa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031L07</myns:NTS50>
+        <myns:LAT>461900</myns:LAT>
+        <myns:LONG>784200</myns:LONG>
+        <myns:SGC_CODE>3548021</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1346194.000000,-134384.484375 1346194.000000,-134384.484375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1346194.000000,-134384.484375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>149</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDOAY</myns:UNIQUE_KEY>
+        <myns:NAME>Deep River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031K04</myns:NTS50>
+        <myns:LAT>460600</myns:LAT>
+        <myns:LONG>773000</myns:LONG>
+        <myns:SGC_CODE>3547096</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1150281.250000,-30856.812500 1150281.250000,-30856.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1150281.250000,-30856.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>150</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBLAT</myns:UNIQUE_KEY>
+        <myns:NAME>Haileybury</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031M05</myns:NTS50>
+        <myns:LAT>472700</myns:LAT>
+        <myns:LONG>793800</myns:LONG>
+        <myns:SGC_CODE>3554012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>564179.875000,12429.582031 564179.875000,12429.582031</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>564179.875000,12429.582031</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>151</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEBEF</myns:UNIQUE_KEY>
+        <myns:NAME>Schreiber</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042D14</myns:NTS50>
+        <myns:LAT>484800</myns:LAT>
+        <myns:LONG>871500</myns:LONG>
+        <myns:SGC_CODE>3558051</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1008896.187500,119843.281250 1008896.187500,119843.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1008896.187500,119843.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>152</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FARXW</myns:UNIQUE_KEY>
+        <myns:NAME>Cochrane</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042H03</myns:NTS50>
+        <myns:LAT>490400</myns:LAT>
+        <myns:LONG>810100</myns:LONG>
+        <myns:SGC_CODE>3556039</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>932164.062500,-224877.906250 932164.062500,-224877.906250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>932164.062500,-224877.906250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>153</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAJYS</myns:UNIQUE_KEY>
+        <myns:NAME>Blind River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041J02</myns:NTS50>
+        <myns:LAT>461000</myns:LAT>
+        <myns:LONG>825800</myns:LONG>
+        <myns:SGC_CODE>3557038</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>487999.125000,28480.302734 487999.125000,28480.302734</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>487999.125000,28480.302734</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>154</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGEC</myns:UNIQUE_KEY>
+        <myns:NAME>Nipigon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052H01</myns:NTS50>
+        <myns:LAT>490100</myns:LAT>
+        <myns:LONG>881600</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>574951.812500,116559.953125 574951.812500,116559.953125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>574951.812500,116559.953125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>155</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBHCK</myns:UNIQUE_KEY>
+        <myns:NAME>Geraldton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042E10</myns:NTS50>
+        <myns:LAT>494400</myns:LAT>
+        <myns:LONG>865700</myns:LONG>
+        <myns:SGC_CODE>3558074</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>737790.250000,84260.179688 737790.250000,84260.179688</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>737790.250000,84260.179688</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>156</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBOUP</myns:UNIQUE_KEY>
+        <myns:NAME>Hornepayne</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042F02</myns:NTS50>
+        <myns:LAT>491300</myns:LAT>
+        <myns:LONG>844700</myns:LONG>
+        <myns:SGC_CODE>3557096</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>81305.625000,226218.250000 81305.625000,226218.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>81305.625000,226218.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>157</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCKDP</myns:UNIQUE_KEY>
+        <myns:NAME>Red Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052N04</myns:NTS50>
+        <myns:LAT>510100</myns:LAT>
+        <myns:LONG>935000</myns:LONG>
+        <myns:SGC_CODE>3560041</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>121840.140625,186016.750000 121840.140625,186016.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>121840.140625,186016.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>158</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBAXU</myns:UNIQUE_KEY>
+        <myns:NAME>Ear Falls</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052K11</myns:NTS50>
+        <myns:LAT>503800</myns:LAT>
+        <myns:LONG>931300</myns:LONG>
+        <myns:SGC_CODE>3560090</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>217981.531250,128637.976562 217981.531250,128637.976562</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>217981.531250,128637.976562</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>159</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCOPR</myns:UNIQUE_KEY>
+        <myns:NAME>Sioux Lookout</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052J04</myns:NTS50>
+        <myns:LAT>500600</myns:LAT>
+        <myns:LONG>915500</myns:LONG>
+        <myns:SGC_CODE>3560034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>104200.531250,452754.281250 104200.531250,452754.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>104200.531250,452754.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>160</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDVTR</myns:UNIQUE_KEY>
+        <myns:NAME>Sandy Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>053F03</myns:NTS50>
+        <myns:LAT>530300</myns:LAT>
+        <myns:LONG>932000</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>69203.367188,315326.000000 69203.367188,315326.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>69203.367188,315326.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>161</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDQLS</myns:UNIQUE_KEY>
+        <myns:NAME>Pikangikum</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052M16</myns:NTS50>
+        <myns:LAT>514900</myns:LAT>
+        <myns:LONG>940000</myns:LONG>
+        <myns:SGC_CODE>3560090</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>830158.125000,517260.843750 830158.125000,517260.843750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>830158.125000,517260.843750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>162</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAECJ</myns:UNIQUE_KEY>
+        <myns:NAME>Attawapiskat</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>043B16</myns:NTS50>
+        <myns:LAT>525600</myns:LAT>
+        <myns:LONG>822400</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1125892.875000,2922.677002 1125892.875000,2922.677002</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1125892.875000,2922.677002</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>163</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCDXS</myns:UNIQUE_KEY>
+        <myns:NAME>Matachewan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041P15</myns:NTS50>
+        <myns:LAT>475612</myns:LAT>
+        <myns:LONG>803857</myns:LONG>
+        <myns:SGC_CODE>3554056</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>892139.062500,447845.406250 892139.062500,447845.406250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>892139.062500,447845.406250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>164</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAXTL</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Albany</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>043A04</myns:NTS50>
+        <myns:LAT>521200</myns:LAT>
+        <myns:LONG>814000</myns:LONG>
+        <myns:SGC_CODE>3556092</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>979831.875000,366797.281250 979831.875000,366797.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>979831.875000,366797.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>165</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDUPD</myns:UNIQUE_KEY>
+        <myns:NAME>Moosonee</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042P07</myns:NTS50>
+        <myns:LAT>511700</myns:LAT>
+        <myns:LONG>803900</myns:LONG>
+        <myns:SGC_CODE>3556097</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-343562.437500,155532.812500 -343562.437500,155532.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-343562.437500,155532.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>166</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GARKU</myns:UNIQUE_KEY>
+        <myns:NAME>Minnedosa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062J04</myns:NTS50>
+        <myns:LAT>501443</myns:LAT>
+        <myns:LONG>995034</myns:LONG>
+        <myns:SGC_CODE>4615075</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-318615.093750,148279.125000 -318615.093750,148279.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-318615.093750,148279.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>167</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GASYI</myns:UNIQUE_KEY>
+        <myns:NAME>Neepawa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062J03</myns:NTS50>
+        <myns:LAT>501344</myns:LAT>
+        <myns:LONG>992756</myns:LONG>
+        <myns:SGC_CODE>4615020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-142753.250000,186220.250000 -142753.250000,186220.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-142753.250000,186220.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>168</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAJFM</myns:UNIQUE_KEY>
+        <myns:NAME>Gimli</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062I10</myns:NTS50>
+        <myns:LAT>503801</myns:LAT>
+        <myns:LONG>965924</myns:LONG>
+        <myns:SGC_CODE>4618033</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-107006.062500,120511.218750 -107006.062500,120511.218750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-107006.062500,120511.218750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>169</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GABYK</myns:UNIQUE_KEY>
+        <myns:NAME>Beausejour</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062I02</myns:NTS50>
+        <myns:LAT>500344</myns:LAT>
+        <myns:LONG>963058</myns:LONG>
+        <myns:SGC_CODE>4612056</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-426847.875000,115236.093750 -426847.875000,115236.093750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-426847.875000,115236.093750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>170</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBCSD</myns:UNIQUE_KEY>
+        <myns:NAME>Virden</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062F15</myns:NTS50>
+        <myns:LAT>495103</myns:LAT>
+        <myns:LONG>1005554</myns:LONG>
+        <myns:SGC_CODE>4606034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-382680.062500,88739.156250 -382680.062500,88739.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-382680.062500,88739.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>171</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAZUK</myns:UNIQUE_KEY>
+        <myns:NAME>Souris</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062F09</myns:NTS50>
+        <myns:LAT>493702</myns:LAT>
+        <myns:LONG>1001537</myns:LONG>
+        <myns:SGC_CODE>4607053</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-369012.125000,41133.363281 -369012.125000,41133.363281</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-369012.125000,41133.363281</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>172</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GADFN</myns:UNIQUE_KEY>
+        <myns:NAME>Boissevain</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062F01</myns:NTS50>
+        <myns:LAT>491350</myns:LAT>
+        <myns:LONG>1000318</myns:LONG>
+        <myns:SGC_CODE>4605033</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-339300.656250,36160.593750 -339300.656250,36160.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-339300.656250,36160.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>173</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GANKU</myns:UNIQUE_KEY>
+        <myns:NAME>Killarney</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062G04</myns:NTS50>
+        <myns:LAT>491100</myns:LAT>
+        <myns:LONG>993946</myns:LONG>
+        <myns:SGC_CODE>4605027</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-425834.718750,366538.531250 -425834.718750,366538.531250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-425834.718750,366538.531250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>174</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBBDR</myns:UNIQUE_KEY>
+        <myns:NAME>Swan River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063C03</myns:NTS50>
+        <myns:LAT>520621</myns:LAT>
+        <myns:LONG>1011600</myns:LONG>
+        <myns:SGC_CODE>4620048</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-186199.968750,552737.187500 -186199.968750,552737.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-186199.968750,552737.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>175</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GATRO</myns:UNIQUE_KEY>
+        <myns:NAME>Norway House</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063H13</myns:NTS50>
+        <myns:LAT>535925</myns:LAT>
+        <myns:LONG>974856</myns:LONG>
+        <myns:SGC_CODE>4622046</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-301928.187500,834209.625000 -301928.187500,834209.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-301928.187500,834209.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>176</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAOIT</myns:UNIQUE_KEY>
+        <myns:NAME>Leaf Rapids</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>064B05</myns:NTS50>
+        <myns:LAT>562800</myns:LAT>
+        <myns:LONG>994500</myns:LONG>
+        <myns:SGC_CODE>4623034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-238380.218750,757817.937500 -238380.218750,757817.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-238380.218750,757817.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>177</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GASZX</myns:UNIQUE_KEY>
+        <myns:NAME>Nelson House</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063O15</myns:NTS50>
+        <myns:LAT>554700</myns:LAT>
+        <myns:LONG>985318</myns:LONG>
+        <myns:SGC_CODE>4622046</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-69750.625000,801856.562500 -69750.625000,801856.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-69750.625000,801856.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>178</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBACU</myns:UNIQUE_KEY>
+        <myns:NAME>Split Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>064A01</myns:NTS50>
+        <myns:LAT>561443</myns:LAT>
+        <myns:LONG>960538</myns:LONG>
+        <myns:SGC_CODE>4622046</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-318670.312500,664783.250000 -318670.312500,664783.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-318670.312500,664783.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>179</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAZRZ</myns:UNIQUE_KEY>
+        <myns:NAME>Snow Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063K16</myns:NTS50>
+        <myns:LAT>545244</myns:LAT>
+        <myns:LONG>1000212</myns:LONG>
+        <myns:SGC_CODE>4621071</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-18656.708984,653510.500000 -18656.708984,653510.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-18656.708984,653510.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>180</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAUSI</myns:UNIQUE_KEY>
+        <myns:NAME>Oxford House</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>053L14</myns:NTS50>
+        <myns:LAT>545654</myns:LAT>
+        <myns:LONG>951556</myns:LONG>
+        <myns:SGC_CODE>4622046</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-943280.625000,487828.343750 -943280.625000,487828.343750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-943280.625000,487828.343750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>181</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAIRP</myns:UNIQUE_KEY>
+        <myns:NAME>Unity</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073C06</myns:NTS50>
+        <myns:LAT>522700</myns:LAT>
+        <myns:LONG>1091000</myns:LONG>
+        <myns:SGC_CODE>4713074</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-874951.000000,430661.437500 -874951.000000,430661.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-874951.000000,430661.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>182</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HATVI</myns:UNIQUE_KEY>
+        <myns:NAME>Biggar</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073B04</myns:NTS50>
+        <myns:LAT>520400</myns:LAT>
+        <myns:LONG>1080000</myns:LONG>
+        <myns:SGC_CODE>4712046</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-967198.500000,381423.687500 -967198.500000,381423.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-967198.500000,381423.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>183</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAEQZ</myns:UNIQUE_KEY>
+        <myns:NAME>Kindersley</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072N06</myns:NTS50>
+        <myns:LAT>512800</myns:LAT>
+        <myns:LONG>1091000</myns:LONG>
+        <myns:SGC_CODE>4713008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-886627.375000,374317.687500 -886627.375000,374317.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-886627.375000,374317.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>184</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAJHC</myns:UNIQUE_KEY>
+        <myns:NAME>Rosetown</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072O12</myns:NTS50>
+        <myns:LAT>513300</myns:LAT>
+        <myns:LONG>1080000</myns:LONG>
+        <myns:SGC_CODE>4712006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-712917.000000,355907.562500 -712917.000000,355907.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-712917.000000,355907.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>185</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HATOL</myns:UNIQUE_KEY>
+        <myns:NAME>Watrous</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072P11</myns:NTS50>
+        <myns:LAT>514000</myns:LAT>
+        <myns:LONG>1052800</myns:LONG>
+        <myns:SGC_CODE>4711053</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-681049.875000,410903.125000 -681049.875000,410903.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-681049.875000,410903.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>186</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAPOH</myns:UNIQUE_KEY>
+        <myns:NAME>Humboldt</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073A03</myns:NTS50>
+        <myns:LAT>521200</myns:LAT>
+        <myns:LONG>1050700</myns:LONG>
+        <myns:SGC_CODE>4715008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-603079.187500,470242.125000 -603079.187500,470242.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-603079.187500,470242.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>187</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HANSL</myns:UNIQUE_KEY>
+        <myns:NAME>Tisdale</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073A16</myns:NTS50>
+        <myns:LAT>525100</myns:LAT>
+        <myns:LONG>1040300</myns:LONG>
+        <myns:SGC_CODE>4714044</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-589116.937500,526584.125000 -589116.937500,526584.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-589116.937500,526584.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>188</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAMFS</myns:UNIQUE_KEY>
+        <myns:NAME>Nipawin</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073H08</myns:NTS50>
+        <myns:LAT>532200</myns:LAT>
+        <myns:LONG>1040000</myns:LONG>
+        <myns:SGC_CODE>4714076</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-490130.875000,456638.156250 -490130.875000,456638.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-490130.875000,456638.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>189</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAPHU</myns:UNIQUE_KEY>
+        <myns:NAME>Hudson Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>063D16</myns:NTS50>
+        <myns:LAT>525100</myns:LAT>
+        <myns:LONG>1022300</myns:LONG>
+        <myns:SGC_CODE>4714004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-471797.968750,311744.093750 -471797.968750,311744.093750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-471797.968750,311744.093750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>190</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HADDY</myns:UNIQUE_KEY>
+        <myns:NAME>Kamsack</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062N12</myns:NTS50>
+        <myns:LAT>513400</myns:LAT>
+        <myns:LONG>1015400</myns:LONG>
+        <myns:SGC_CODE>4709039</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-509314.875000,321863.031250 -509314.875000,321863.031250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-509314.875000,321863.031250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>191</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HABQM</myns:UNIQUE_KEY>
+        <myns:NAME>Canora</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062M09</myns:NTS50>
+        <myns:LAT>513800</myns:LAT>
+        <myns:LONG>1022600</myns:LONG>
+        <myns:SGC_CODE>4709032</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-543295.625000,248592.406250 -543295.625000,248592.406250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-543295.625000,248592.406250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>192</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HALKT</myns:UNIQUE_KEY>
+        <myns:NAME>Melville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062L15</myns:NTS50>
+        <myns:LAT>505500</myns:LAT>
+        <myns:LONG>1024800</myns:LONG>
+        <myns:SGC_CODE>4705074</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-626627.562500,352223.937500 -626627.562500,352223.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-626627.562500,352223.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>193</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HATMX</myns:UNIQUE_KEY>
+        <myns:NAME>Wynyard</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072P16</myns:NTS50>
+        <myns:LAT>514600</myns:LAT>
+        <myns:LONG>1041100</myns:LONG>
+        <myns:SGC_CODE>4710047</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-616455.375000,237987.375000 -616455.375000,237987.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-616455.375000,237987.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>194</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HACDD</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Qu&#39;Appelle</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062L13</myns:NTS50>
+        <myns:LAT>504600</myns:LAT>
+        <myns:LONG>1034800</myns:LONG>
+        <myns:SGC_CODE>4706051</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-496852.031250,212193.890625 -496852.031250,212193.890625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-496852.031250,212193.890625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>195</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAIPN</myns:UNIQUE_KEY>
+        <myns:NAME>Esterhazy</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062L09</myns:NTS50>
+        <myns:LAT>503900</myns:LAT>
+        <myns:LONG>1020500</myns:LONG>
+        <myns:SGC_CODE>4705052</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-471955.718750,153918.156250 -471955.718750,153918.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-471955.718750,153918.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>196</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HALUK</myns:UNIQUE_KEY>
+        <myns:NAME>Moosomin</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062K04</myns:NTS50>
+        <myns:LAT>500800</myns:LAT>
+        <myns:LONG>1014000</myns:LONG>
+        <myns:SGC_CODE>4705004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1026032.187500,219073.906250 -1026032.187500,219073.906250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1026032.187500,219073.906250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>197</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAOQT</myns:UNIQUE_KEY>
+        <myns:NAME>Maple Creek</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072F14</myns:NTS50>
+        <myns:LAT>495500</myns:LAT>
+        <myns:LONG>1092900</myns:LONG>
+        <myns:SGC_CODE>4704048</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-957311.687500,171996.953125 -957311.687500,171996.953125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-957311.687500,171996.953125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>198</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAOOS</myns:UNIQUE_KEY>
+        <myns:NAME>Shaunavon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072F09</myns:NTS50>
+        <myns:LAT>493900</myns:LAT>
+        <myns:LONG>1082500</myns:LONG>
+        <myns:SGC_CODE>4704036</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-785520.500000,139309.578125 -785520.500000,139309.578125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-785520.500000,139309.578125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>199</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAOOY</myns:UNIQUE_KEY>
+        <myns:NAME>Assiniboia</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072H12</myns:NTS50>
+        <myns:LAT>493800</myns:LAT>
+        <myns:LONG>1055900</myns:LONG>
+        <myns:SGC_CODE>4703036</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-823754.562500,171655.906250 -823754.562500,171655.906250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-823754.562500,171655.906250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>200</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAAQH</myns:UNIQUE_KEY>
+        <myns:NAME>Gravelbourg</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072G15</myns:NTS50>
+        <myns:LAT>495300</myns:LAT>
+        <myns:LONG>1063300</myns:LONG>
+        <myns:SGC_CODE>4703071</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-860366.875000,918597.187500 -860366.875000,918597.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-860366.875000,918597.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>201</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HARBB</myns:UNIQUE_KEY>
+        <myns:NAME>La Loche</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>074C06</myns:NTS50>
+        <myns:LAT>562900</myns:LAT>
+        <myns:LONG>1092600</myns:LONG>
+        <myns:SGC_CODE>4718074</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-820628.687500,843937.187500 -820628.687500,843937.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-820628.687500,843937.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>202</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HASIZ</myns:UNIQUE_KEY>
+        <myns:NAME>Buffalo Narrows</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073N16</myns:NTS50>
+        <myns:LAT>555100</myns:LAT>
+        <myns:LONG>1082900</myns:LONG>
+        <myns:SGC_CODE>4718070</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-795151.500000,795180.125000 -795151.500000,795180.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-795151.500000,795180.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>203</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAATJ</myns:UNIQUE_KEY>
+        <myns:NAME>Ile-a-la-Crosse</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073O05</myns:NTS50>
+        <myns:LAT>552700</myns:LAT>
+        <myns:LONG>1075300</myns:LONG>
+        <myns:SGC_CODE>4718067</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-644348.625000,728240.187500 -644348.625000,728240.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-644348.625000,728240.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>204</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAFJY</myns:UNIQUE_KEY>
+        <myns:NAME>La Ronge</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073P03</myns:NTS50>
+        <myns:LAT>550600</myns:LAT>
+        <myns:LONG>1051700</myns:LONG>
+        <myns:SGC_CODE>4718041</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-856057.875000,655677.437500 -856057.875000,655677.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-856057.875000,655677.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>205</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HARWT</myns:UNIQUE_KEY>
+        <myns:NAME>Meadow Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073K01</myns:NTS50>
+        <myns:LAT>540800</myns:LAT>
+        <myns:LONG>1082600</myns:LONG>
+        <myns:SGC_CODE>4717052</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1045317.187500,554921.062500 -1045317.187500,554921.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1045317.187500,554921.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>206</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAOQH</myns:UNIQUE_KEY>
+        <myns:NAME>Wainwright</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>073D15</myns:NTS50>
+        <myns:LAT>524900</myns:LAT>
+        <myns:LONG>1105200</myns:LONG>
+        <myns:SGC_CODE>4807054</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1179252.375000,535795.562500 -1179252.375000,535795.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1179252.375000,535795.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>207</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAKUR</myns:UNIQUE_KEY>
+        <myns:NAME>Stettler</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083A07</myns:NTS50>
+        <myns:LAT>521900</myns:LAT>
+        <myns:LONG>1124300</myns:LONG>
+        <myns:SGC_CODE>4807026</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1150194.250000,448578.625000 -1150194.250000,448578.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1150194.250000,448578.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>208</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAINF</myns:UNIQUE_KEY>
+        <myns:NAME>Hanna</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>072M12</myns:NTS50>
+        <myns:LAT>513800</myns:LAT>
+        <myns:LONG>1115400</myns:LONG>
+        <myns:SGC_CODE>4804011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1351734.625000,258352.500000 -1351734.625000,258352.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1351734.625000,258352.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>209</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IABJX</myns:UNIQUE_KEY>
+        <myns:NAME>Pincher Creek</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082H05</myns:NTS50>
+        <myns:LAT>492900</myns:LAT>
+        <myns:LONG>1135700</myns:LONG>
+        <myns:SGC_CODE>4803014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1317680.000000,214919.484375 -1317680.000000,214919.484375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1317680.000000,214919.484375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>210</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAKML</myns:UNIQUE_KEY>
+        <myns:NAME>Cardston</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082H03</myns:NTS50>
+        <myns:LAT>491200</myns:LAT>
+        <myns:LONG>1131800</myns:LONG>
+        <myns:SGC_CODE>4803004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-961056.875000,721445.625000 -961056.875000,721445.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-961056.875000,721445.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>211</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAEFD</myns:UNIQUE_KEY>
+        <myns:NAME>Cold Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>073L08</myns:NTS50>
+        <myns:LAT>542700</myns:LAT>
+        <myns:LONG>1101200</myns:LONG>
+        <myns:SGC_CODE>4812006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1039471.375000,686089.187500 -1039471.375000,686089.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1039471.375000,686089.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>212</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAGIL</myns:UNIQUE_KEY>
+        <myns:NAME>St. Paul</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>073E14</myns:NTS50>
+        <myns:LAT>535900</myns:LAT>
+        <myns:LONG>1111700</myns:LONG>
+        <myns:SGC_CODE>4812018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1031355.187500,611072.750000 -1031355.187500,611072.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1031355.187500,611072.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>213</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAOMB</myns:UNIQUE_KEY>
+        <myns:NAME>Vermilion</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>073E07</myns:NTS50>
+        <myns:LAT>532200</myns:LAT>
+        <myns:LONG>1105100</myns:LONG>
+        <myns:SGC_CODE>4810042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1430600.000000,1018985.812500 -1430600.000000,1018985.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1430600.000000,1018985.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>214</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAKPR</myns:UNIQUE_KEY>
+        <myns:NAME>Spirit River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083M15</myns:NTS50>
+        <myns:LAT>554700</myns:LAT>
+        <myns:LONG>1185000</myns:LONG>
+        <myns:SGC_CODE>4819058</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1344863.625000,1033960.000000 -1344863.625000,1033960.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1344863.625000,1033960.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>215</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAHQY</myns:UNIQUE_KEY>
+        <myns:NAME>Grimshaw</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>084C04</myns:NTS50>
+        <myns:LAT>561100</myns:LAT>
+        <myns:LONG>1173600</myns:LONG>
+        <myns:SGC_CODE>4819074</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1368607.375000,911182.375000 -1368607.375000,911182.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1368607.375000,911182.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>216</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAOBD</myns:UNIQUE_KEY>
+        <myns:NAME>Valleyview</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083N03</myns:NTS50>
+        <myns:LAT>550400</myns:LAT>
+        <myns:LONG>1171700</myns:LONG>
+        <myns:SGC_CODE>4818018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1308388.875000,934172.250000 -1308388.875000,934172.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1308388.875000,934172.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>217</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAJVM</myns:UNIQUE_KEY>
+        <myns:NAME>High Prairie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083N08</myns:NTS50>
+        <myns:LAT>552600</myns:LAT>
+        <myns:LONG>1162900</myns:LONG>
+        <myns:SGC_CODE>4817021</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1136371.375000,937276.437500 -1136371.375000,937276.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1136371.375000,937276.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>218</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAAML</myns:UNIQUE_KEY>
+        <myns:NAME>Wabasca-Desmarais</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083P13</myns:NTS50>
+        <myns:LAT>555800</myns:LAT>
+        <myns:LONG>1135100</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1524128.375000,831722.625000 -1524128.375000,831722.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1524128.375000,831722.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>219</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAHMD</myns:UNIQUE_KEY>
+        <myns:NAME>Grande Cache</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083E14</myns:NTS50>
+        <myns:LAT>535300</myns:LAT>
+        <myns:LONG>1190800</myns:LONG>
+        <myns:SGC_CODE>4818005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1498728.500000,705670.812500 -1498728.500000,705670.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1498728.500000,705670.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>220</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAMCJ</myns:UNIQUE_KEY>
+        <myns:NAME>Jasper</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083D16</myns:NTS50>
+        <myns:LAT>525300</myns:LAT>
+        <myns:LONG>1180500</myns:LONG>
+        <myns:SGC_CODE>4815037</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1142798.375000,796399.187500 -1142798.375000,796399.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1142798.375000,796399.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>221</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IARFF</myns:UNIQUE_KEY>
+        <myns:NAME>Athabasca</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083I11</myns:NTS50>
+        <myns:LAT>544300</myns:LAT>
+        <myns:LONG>1131700</myns:LONG>
+        <myns:SGC_CODE>4813048</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1059762.625000,777678.062500 -1059762.625000,777678.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1059762.625000,777678.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>222</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IABSI</myns:UNIQUE_KEY>
+        <myns:NAME>Lac La Biche</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>073L13</myns:NTS50>
+        <myns:LAT>544600</myns:LAT>
+        <myns:LONG>1115800</myns:LONG>
+        <myns:SGC_CODE>4812035</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1229197.125000,1262328.250000 -1229197.125000,1262328.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1229197.125000,1262328.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>223</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAJVJ</myns:UNIQUE_KEY>
+        <myns:NAME>High Level</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>084K11</myns:NTS50>
+        <myns:LAT>583100</myns:LAT>
+        <myns:LONG>1170800</myns:LONG>
+        <myns:SGC_CODE>4817093</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2196474.000000,732860.875000 -2196474.000000,732860.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2196474.000000,732860.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>224</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBUFS</myns:UNIQUE_KEY>
+        <myns:NAME>Port Alice</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092L06</myns:NTS50>
+        <myns:LAT>502300</myns:LAT>
+        <myns:LONG>1272700</myns:LONG>
+        <myns:SGC_CODE>5943017</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1750794.500000,660744.437500 -1750794.500000,660744.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1750794.500000,660744.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>225</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCBMZ</myns:UNIQUE_KEY>
+        <myns:NAME>100 Mile House</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092P11</myns:NTS50>
+        <myns:LAT>513900</myns:LAT>
+        <myns:LONG>1211700</myns:LONG>
+        <myns:SGC_CODE>5941005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1838495.375000,586182.437500 -1838495.375000,586182.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1838495.375000,586182.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>226</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JADLE</myns:UNIQUE_KEY>
+        <myns:NAME>Lillooet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092I12</myns:NTS50>
+        <myns:LAT>504100</myns:LAT>
+        <myns:LONG>1215600</myns:LONG>
+        <myns:SGC_CODE>5931024</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1488251.000000,515472.093750 -1488251.000000,515472.093750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1488251.000000,515472.093750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>227</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBZLB</myns:UNIQUE_KEY>
+        <myns:NAME>Golden</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082N07</myns:NTS50>
+        <myns:LAT>511800</myns:LAT>
+        <myns:LONG>1165800</myns:LONG>
+        <myns:SGC_CODE>5939007</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1458255.750000,413023.968750 -1458255.750000,413023.968750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1458255.750000,413023.968750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>228</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JADJB</myns:UNIQUE_KEY>
+        <myns:NAME>Invermere</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082K09</myns:NTS50>
+        <myns:LAT>503100</myns:LAT>
+        <myns:LONG>1160200</myns:LONG>
+        <myns:SGC_CODE>5901039</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2152107.500000,523978.593750 -2152107.500000,523978.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2152107.500000,523978.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>229</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBRMW</myns:UNIQUE_KEY>
+        <myns:NAME>Ucluelet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092C13</myns:NTS50>
+        <myns:LAT>485600</myns:LAT>
+        <myns:LONG>1253300</myns:LONG>
+        <myns:SGC_CODE>5923019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2040175.875000,446217.062500 -2040175.875000,446217.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2040175.875000,446217.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>230</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBBWA</myns:UNIQUE_KEY>
+        <myns:NAME>Duncan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092B13</myns:NTS50>
+        <myns:LAT>484700</myns:LAT>
+        <myns:LONG>1234200</myns:LONG>
+        <myns:SGC_CODE>5919012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1864551.375000,436943.625000 -1864551.375000,436943.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1864551.375000,436943.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>231</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBFGB</myns:UNIQUE_KEY>
+        <myns:NAME>Hope</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092H06</myns:NTS50>
+        <myns:LAT>492300</myns:LAT>
+        <myns:LONG>1212620</myns:LONG>
+        <myns:SGC_CODE>5909009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1798467.750000,419758.468750 -1798467.750000,419758.468750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1798467.750000,419758.468750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>232</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCCXO</myns:UNIQUE_KEY>
+        <myns:NAME>Princeton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092H07</myns:NTS50>
+        <myns:LAT>492730</myns:LAT>
+        <myns:LONG>1203030</myns:LONG>
+        <myns:SGC_CODE>5907024</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1669987.750000,317805.781250 -1669987.750000,317805.781250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1669987.750000,317805.781250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>233</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAUUX</myns:UNIQUE_KEY>
+        <myns:NAME>Grand Forks</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082E01</myns:NTS50>
+        <myns:LAT>490200</myns:LAT>
+        <myns:LONG>1182600</myns:LONG>
+        <myns:SGC_CODE>5905032</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1538778.375000,277915.281250 -1538778.375000,277915.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1538778.375000,277915.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>234</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAIUJ</myns:UNIQUE_KEY>
+        <myns:NAME>Creston</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082F01</myns:NTS50>
+        <myns:LAT>490600</myns:LAT>
+        <myns:LONG>1163000</myns:LONG>
+        <myns:SGC_CODE>5903004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2030705.625000,1344618.250000 -2030705.625000,1344618.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2030705.625000,1344618.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>235</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCOQV</myns:UNIQUE_KEY>
+        <myns:NAME>Stewart</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>103P13</myns:NTS50>
+        <myns:LAT>555600</myns:LAT>
+        <myns:LONG>1295900</myns:LONG>
+        <myns:SGC_CODE>5949032</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1593412.750000,1076986.875000 -1593412.750000,1076986.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1593412.750000,1076986.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>236</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCPML</myns:UNIQUE_KEY>
+        <myns:NAME>Chetwynd</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093P12</myns:NTS50>
+        <myns:LAT>554200</myns:LAT>
+        <myns:LONG>1213800</myns:LONG>
+        <myns:SGC_CODE>5955010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1895565.875000,1044473.625000 -1895565.875000,1044473.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1895565.875000,1044473.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>238</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAECH</myns:UNIQUE_KEY>
+        <myns:NAME>Burns Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093K04</myns:NTS50>
+        <myns:LAT>541400</myns:LAT>
+        <myns:LONG>1254500</myns:LONG>
+        <myns:SGC_CODE>5951022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1798436.000000,1023457.125000 -1798436.000000,1023457.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1798436.000000,1023457.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>239</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAGOX</myns:UNIQUE_KEY>
+        <myns:NAME>Fort St. James</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093K08</myns:NTS50>
+        <myns:LAT>542635</myns:LAT>
+        <myns:LONG>1241515</myns:LONG>
+        <myns:SGC_CODE>5951013</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1808391.750000,973204.125000 -1808391.750000,973204.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1808391.750000,973204.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>240</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCVCK</myns:UNIQUE_KEY>
+        <myns:NAME>Vanderhoof</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093K01</myns:NTS50>
+        <myns:LAT>540100</myns:LAT>
+        <myns:LONG>1240100</myns:LONG>
+        <myns:SGC_CODE>5951007</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1940480.875000,1085630.625000 -1940480.875000,1085630.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1940480.875000,1085630.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>241</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBANJ</myns:UNIQUE_KEY>
+        <myns:NAME>Houston</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093L07</myns:NTS50>
+        <myns:LAT>542400</myns:LAT>
+        <myns:LONG>1264000</myns:LONG>
+        <myns:SGC_CODE>5951034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1512500.000000,1411805.000000 -1512500.000000,1411805.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1512500.000000,1411805.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>242</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAGOO</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Nelson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>094J15</myns:NTS50>
+        <myns:LAT>584800</myns:LAT>
+        <myns:LONG>1224300</myns:LONG>
+        <myns:SGC_CODE>5959005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1815358.000000,2007931.000000 -1815358.000000,2007931.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1815358.000000,2007931.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>243</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KACBC</myns:UNIQUE_KEY>
+        <myns:NAME>Faro</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105K03</myns:NTS50>
+        <myns:LAT>621400</myns:LAT>
+        <myns:LONG>1332000</myns:LONG>
+        <myns:SGC_CODE>6001004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1704037.875000,2652475.750000 -1704037.875000,2652475.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1704037.875000,2652475.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>244</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAEVF</myns:UNIQUE_KEY>
+        <myns:NAME>Old Crow</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>116O12</myns:NTS50>
+        <myns:LAT>673405</myns:LAT>
+        <myns:LONG>1395000</myns:LONG>
+        <myns:SGC_CODE>6001034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1239140.500000,2155411.500000 1239140.500000,2155411.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1239140.500000,2155411.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>245</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LASAL</myns:UNIQUE_KEY>
+        <myns:NAME>Pangnirtung</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>026I00</myns:NTS50>
+        <myns:LAT>660840</myns:LAT>
+        <myns:LONG>654255</myns:LONG>
+        <myns:SGC_CODE>6104009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1229333.500000,1873084.000000 1229333.500000,1873084.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1229333.500000,1873084.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>246</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LBCFF</myns:UNIQUE_KEY>
+        <myns:NAME>Iqaluit</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>025N10</myns:NTS50>
+        <myns:LAT>634500</myns:LAT>
+        <myns:LONG>683100</myns:LONG>
+        <myns:SGC_CODE>6104003</myns:SGC_CODE>
+        <myns:CAPITAL>3</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-49068.617188,1673024.750000 -49068.617188,1673024.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-49068.617188,1673024.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>247</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LABZD</myns:UNIQUE_KEY>
+        <myns:NAME>Baker Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>066A08</myns:NTS50>
+        <myns:LAT>641910</myns:LAT>
+        <myns:LONG>960115</myns:LONG>
+        <myns:SGC_CODE>6105023</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>50018.878906,1323599.375000 50018.878906,1323599.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>50018.878906,1323599.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>248</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LBCFY</myns:UNIQUE_KEY>
+        <myns:NAME>Arviat</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>055E01</myns:NTS50>
+        <myns:LAT>610630</myns:LAT>
+        <myns:LONG>940330</myns:LONG>
+        <myns:SGC_CODE>6105015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>141264.687500,1514100.500000 141264.687500,1514100.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>141264.687500,1514100.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>249</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LATUP</myns:UNIQUE_KEY>
+        <myns:NAME>Rankin Inlet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>055K00</myns:NTS50>
+        <myns:LAT>624900</myns:LAT>
+        <myns:LONG>920500</myns:LONG>
+        <myns:SGC_CODE>6105017</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1309170.625000,1676659.125000 -1309170.625000,1676659.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1309170.625000,1676659.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>250</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAILM</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Simpson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>095H00</myns:NTS50>
+        <myns:LAT>615145</myns:LAT>
+        <myns:LONG>1212055</myns:LONG>
+        <myns:SGC_CODE>6106038</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1080401.625000,1473917.875000 -1080401.625000,1473917.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1080401.625000,1473917.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>251</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAKGC</myns:UNIQUE_KEY>
+        <myns:NAME>Hay River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>085B13</myns:NTS50>
+        <myns:LAT>604855</myns:LAT>
+        <myns:LONG>1154750</myns:LONG>
+        <myns:SGC_CODE>6106016</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-911007.937500,1329669.125000 -911007.937500,1329669.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-911007.937500,1329669.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>252</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAILN</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Smith</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>075D04</myns:NTS50>
+        <myns:LAT>600000</myns:LAT>
+        <myns:LONG>1115300</myns:LONG>
+        <myns:SGC_CODE>6106001</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1455527.875000,2570230.500000 -1455527.875000,2570230.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1455527.875000,2570230.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>253</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LALNA</myns:UNIQUE_KEY>
+        <myns:NAME>Inuvik</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>107B07</myns:NTS50>
+        <myns:LAT>682100</myns:LAT>
+        <myns:LONG>1334300</myns:LONG>
+        <myns:SGC_CODE>6107017</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-388354.750000,2225200.500000 -388354.750000,2225200.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-388354.750000,2225200.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>254</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAEFV</myns:UNIQUE_KEY>
+        <myns:NAME>Cambridge Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>077D02</myns:NTS50>
+        <myns:LAT>690650</myns:LAT>
+        <myns:LONG>1050310</myns:LONG>
+        <myns:SGC_CODE>6108073</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2566063.250000,584889.187500 2566063.250000,584889.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2566063.250000,584889.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>255</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AADVG</myns:UNIQUE_KEY>
+        <myns:NAME>Channel-Port aux Basques</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>011O11</myns:NTS50>
+        <myns:LAT>473400</myns:LAT>
+        <myns:LONG>590900</myns:LONG>
+        <myns:SGC_CODE>1003034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2846407.000000,715846.125000 2846407.000000,715846.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2846407.000000,715846.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>256</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AASOD</myns:UNIQUE_KEY>
+        <myns:NAME>Marystown</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>001M03</myns:NTS50>
+        <myns:LAT>471000</myns:LAT>
+        <myns:LONG>550900</myns:LONG>
+        <myns:SGC_CODE>1002024</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2760681.750000,902295.250000 2760681.750000,902295.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2760681.750000,902295.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>257</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAHSV</myns:UNIQUE_KEY>
+        <myns:NAME>Gander</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>002D15</myns:NTS50>
+        <myns:LAT>485700</myns:LAT>
+        <myns:LONG>543700</myns:LONG>
+        <myns:SGC_CODE>1006009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2926172.250000,854572.687500 2926172.250000,854572.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2926172.250000,854572.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>258</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AADOD</myns:UNIQUE_KEY>
+        <myns:NAME>Carbonear</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>001N11</myns:NTS50>
+        <myns:LAT>474400</myns:LAT>
+        <myns:LONG>531300</myns:LONG>
+        <myns:SGC_CODE>1001370</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2696058.250000,855130.437500 2696058.250000,855130.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2696058.250000,855130.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>259</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ABYRK</myns:UNIQUE_KEY>
+        <myns:NAME>Grand Falls-Windsor</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>002D13</myns:NTS50>
+        <myns:LAT>485600</myns:LAT>
+        <myns:LONG>554000</myns:LONG>
+        <myns:SGC_CODE>1006017</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1795971.000000,843257.500000 1795971.000000,843257.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1795971.000000,843257.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>260</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ABFQA</myns:UNIQUE_KEY>
+        <myns:NAME>Labrador City</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>023B15</myns:NTS50>
+        <myns:LAT>525700</myns:LAT>
+        <myns:LONG>665500</myns:LONG>
+        <myns:SGC_CODE>1010032</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2159098.750000,1083810.375000 2159098.750000,1083810.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2159098.750000,1083810.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>261</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ABASL</myns:UNIQUE_KEY>
+        <myns:NAME>Happy Valley-Goose Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>013F08</myns:NTS50>
+        <myns:LAT>531900</myns:LAT>
+        <myns:LONG>602000</myns:LONG>
+        <myns:SGC_CODE>1010025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2325561.750000,294362.250000 2325561.750000,294362.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2325561.750000,294362.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>262</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>BADSZ</myns:UNIQUE_KEY>
+        <myns:NAME>Summerside</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>11</myns:REG_CODE>
+        <myns:NTS50>011L05</myns:NTS50>
+        <myns:LAT>462345</myns:LAT>
+        <myns:LONG>634720</myns:LONG>
+        <myns:SGC_CODE>1103025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2600377.000000,419421.718750 2600377.000000,419421.718750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2600377.000000,419421.718750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>263</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBQFA</myns:UNIQUE_KEY>
+        <myns:NAME>Glace Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011J04</myns:NTS50>
+        <myns:LAT>461200</myns:LAT>
+        <myns:LONG>595700</myns:LONG>
+        <myns:SGC_CODE>1217009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2449341.500000,253906.093750 2449341.500000,253906.093750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2449341.500000,253906.093750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>264</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBBJR</myns:UNIQUE_KEY>
+        <myns:NAME>New Glasgow</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011E10</myns:NTS50>
+        <myns:LAT>453500</myns:LAT>
+        <myns:LONG>623900</myns:LONG>
+        <myns:SGC_CODE>1212014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2418051.500000,205002.203125 2418051.500000,205002.203125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2418051.500000,205002.203125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>265</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBMKT</myns:UNIQUE_KEY>
+        <myns:NAME>Truro</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011E06</myns:NTS50>
+        <myns:LAT>452200</myns:LAT>
+        <myns:LONG>631600</myns:LONG>
+        <myns:SGC_CODE>1210006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2329295.750000,218397.281250 2329295.750000,218397.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2329295.750000,218397.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>266</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAAOO</myns:UNIQUE_KEY>
+        <myns:NAME>Amherst</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021H16</myns:NTS50>
+        <myns:LAT>455000</myns:LAT>
+        <myns:LONG>641200</myns:LONG>
+        <myns:SGC_CODE>1211011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2345781.250000,130999.546875 2345781.250000,130999.546875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2345781.250000,130999.546875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>267</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CASWE</myns:UNIQUE_KEY>
+        <myns:NAME>Kentville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021H01</myns:NTS50>
+        <myns:LAT>450500</myns:LAT>
+        <myns:LONG>643000</myns:LONG>
+        <myns:SGC_CODE>1207012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2382666.750000,60910.937500 2382666.750000,60910.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2382666.750000,60910.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>268</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAFBR</myns:UNIQUE_KEY>
+        <myns:NAME>Bridgewater</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>021A07</myns:NTS50>
+        <myns:LAT>442300</myns:LAT>
+        <myns:LONG>643100</myns:LONG>
+        <myns:SGC_CODE>1206004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2294923.750000,-55344.503906 2294923.750000,-55344.503906</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2294923.750000,-55344.503906</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>269</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBPIB</myns:UNIQUE_KEY>
+        <myns:NAME>Yarmouth</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>020O16</myns:NTS50>
+        <myns:LAT>435000</myns:LAT>
+        <myns:LONG>660700</myns:LONG>
+        <myns:SGC_CODE>1202006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2574240.000000,416102.343750 2574240.000000,416102.343750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2574240.000000,416102.343750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>270</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBLHE</myns:UNIQUE_KEY>
+        <myns:NAME>Sydney Mines</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011K01</myns:NTS50>
+        <myns:LAT>461400</myns:LAT>
+        <myns:LONG>601400</myns:LONG>
+        <myns:SGC_CODE>1217019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2167489.500000,140084.562500 2167489.500000,140084.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2167489.500000,140084.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>271</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DATWJ</myns:UNIQUE_KEY>
+        <myns:NAME>Oromocto</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021G16</myns:NTS50>
+        <myns:LAT>455100</myns:LAT>
+        <myns:LONG>662900</myns:LONG>
+        <myns:SGC_CODE>1303012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2024126.000000,217299.312500 2024126.000000,217299.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2024126.000000,217299.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>272</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAICU</myns:UNIQUE_KEY>
+        <myns:NAME></myns:NAME>
+        <myns:NAME_E>Grand Falls</myns:NAME_E>
+        <myns:NAME_F>Grand-Sault</myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021O04</myns:NTS50>
+        <myns:LAT>470300</myns:LAT>
+        <myns:LONG>674400</myns:LONG>
+        <myns:SGC_CODE>1312019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1962234.375000,235432.984375 1962234.375000,235432.984375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1962234.375000,235432.984375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>273</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DALZZ</myns:UNIQUE_KEY>
+        <myns:NAME>Edmundston</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021N08</myns:NTS50>
+        <myns:LAT>472200</myns:LAT>
+        <myns:LONG>682000</myns:LONG>
+        <myns:SGC_CODE>1313029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2136074.000000,346481.968750 2136074.000000,346481.968750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2136074.000000,346481.968750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>274</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAFQX</myns:UNIQUE_KEY>
+        <myns:NAME>Bathurst</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021P12</myns:NTS50>
+        <myns:LAT>473600</myns:LAT>
+        <myns:LONG>653900</myns:LONG>
+        <myns:SGC_CODE>1315011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2051308.750000,350164.437500 2051308.750000,350164.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2051308.750000,350164.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>275</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAHEI</myns:UNIQUE_KEY>
+        <myns:NAME>Campbellton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021O15</myns:NTS50>
+        <myns:LAT>480000</myns:LAT>
+        <myns:LONG>664000</myns:LONG>
+        <myns:SGC_CODE>1314014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2313676.500000,219741.953125 2313676.500000,219741.953125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2313676.500000,219741.953125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>276</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAEAM</myns:UNIQUE_KEY>
+        <myns:NAME>Sackville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021H16</myns:NTS50>
+        <myns:LAT>455400</myns:LAT>
+        <myns:LONG>642200</myns:LONG>
+        <myns:SGC_CODE>1307009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2150522.500000,508104.437500 2150522.500000,508104.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2150522.500000,508104.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>277</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGLSD</myns:UNIQUE_KEY>
+        <myns:NAME>Gaspe</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022A16</myns:NTS50>
+        <myns:LAT>485000</myns:LAT>
+        <myns:LONG>642900</myns:LONG>
+        <myns:SGC_CODE>2403005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1825927.500000,130447.429688 1825927.500000,130447.429688</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1825927.500000,130447.429688</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>278</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKOKZ</myns:UNIQUE_KEY>
+        <myns:NAME>Montmagny</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021L15</myns:NTS50>
+        <myns:LAT>465900</myns:LAT>
+        <myns:LONG>703300</myns:LONG>
+        <myns:SGC_CODE>2418050</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1862239.875000,249217.421875 1862239.875000,249217.421875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1862239.875000,249217.421875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>279</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKMWZ</myns:UNIQUE_KEY>
+        <myns:NAME>Riviere-du-Loup</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021N13</myns:NTS50>
+        <myns:LAT>475000</myns:LAT>
+        <myns:LONG>693200</myns:LONG>
+        <myns:SGC_CODE>2412070</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1921025.750000,363781.687500 1921025.750000,363781.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1921025.750000,363781.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>280</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJBOJ</myns:UNIQUE_KEY>
+        <myns:NAME>Mont-Joli</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022C09</myns:NTS50>
+        <myns:LAT>483500</myns:LAT>
+        <myns:LONG>681100</myns:LONG>
+        <myns:SGC_CODE>2409075</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2007808.625000,472803.343750 2007808.625000,472803.343750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2007808.625000,472803.343750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>281</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHZFR</myns:UNIQUE_KEY>
+        <myns:NAME>Sainte-Anne-des-Monts</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022G01</myns:NTS50>
+        <myns:LAT>490800</myns:LAT>
+        <myns:LONG>663000</myns:LONG>
+        <myns:SGC_CODE>2404040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1952863.000000,411204.187500 1952863.000000,411204.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1952863.000000,411204.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>282</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHEPJ</myns:UNIQUE_KEY>
+        <myns:NAME>Matane</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022B13</myns:NTS50>
+        <myns:LAT>485100</myns:LAT>
+        <myns:LONG>673200</myns:LONG>
+        <myns:SGC_CODE>2408055</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1484201.750000,-43107.593750 1484201.750000,-43107.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1484201.750000,-43107.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>283</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHHSY</myns:UNIQUE_KEY>
+        <myns:NAME>Mont-Laurier</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031J12</myns:NTS50>
+        <myns:LAT>463300</myns:LAT>
+        <myns:LONG>753000</myns:LONG>
+        <myns:SGC_CODE>2479085</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1780558.375000,-92263.445312 1780558.375000,-92263.445312</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1780558.375000,-92263.445312</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>284</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKMVW</myns:UNIQUE_KEY>
+        <myns:NAME>Magog</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031H08</myns:NTS50>
+        <myns:LAT>451600</myns:LAT>
+        <myns:LONG>720800</myns:LONG>
+        <myns:SGC_CODE>2445070</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1652398.875000,-50281.156250 1652398.875000,-50281.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1652398.875000,-50281.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>285</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKJCK</myns:UNIQUE_KEY>
+        <myns:NAME>Joliette</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031I03</myns:NTS50>
+        <myns:LAT>460100</myns:LAT>
+        <myns:LONG>732700</myns:LONG>
+        <myns:SGC_CODE>2461025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1680985.750000,-37357.273438 1680985.750000,-37357.273438</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1680985.750000,-37357.273438</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>286</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EPISQ</myns:UNIQUE_KEY>
+        <myns:NAME>Sorel</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031I03</myns:NTS50>
+        <myns:LAT>460200</myns:LAT>
+        <myns:LONG>730700</myns:LONG>
+        <myns:SGC_CODE>2453057</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1772426.375000,-32858.390625 1772426.375000,-32858.390625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1772426.375000,-32858.390625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>287</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFJGU</myns:UNIQUE_KEY>
+        <myns:NAME>Asbestos</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021E13</myns:NTS50>
+        <myns:LAT>454600</myns:LAT>
+        <myns:LONG>715600</myns:LONG>
+        <myns:SGC_CODE>2440040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1762170.125000,-2770.301514 1762170.125000,-2770.301514</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1762170.125000,-2770.301514</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>288</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EPSTL</myns:UNIQUE_KEY>
+        <myns:NAME>Victoriaville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021L04</myns:NTS50>
+        <myns:LAT>460200</myns:LAT>
+        <myns:LONG>715500</myns:LONG>
+        <myns:SGC_CODE>2439062</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1810387.250000,19848.041016 1810387.250000,19848.041016</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1810387.250000,19848.041016</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>289</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EPXXJ</myns:UNIQUE_KEY>
+        <myns:NAME>Thetford Mines</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021L03</myns:NTS50>
+        <myns:LAT>460500</myns:LAT>
+        <myns:LONG>711800</myns:LONG>
+        <myns:SGC_CODE>2431087</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1853455.750000,37139.546875 1853455.750000,37139.546875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1853455.750000,37139.546875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>290</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJBSM</myns:UNIQUE_KEY>
+        <myns:NAME>Saint-Georges</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021L02</myns:NTS50>
+        <myns:LAT>460700</myns:LAT>
+        <myns:LONG>704000</myns:LONG>
+        <myns:SGC_CODE>2429075</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1754431.625000,69009.312500 1754431.625000,69009.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1754431.625000,69009.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>291</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGEEW</myns:UNIQUE_KEY>
+        <myns:NAME>Donnacona</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021L12</myns:NTS50>
+        <myns:LAT>464000</myns:LAT>
+        <myns:LONG>714500</myns:LONG>
+        <myns:SGC_CODE>2434025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1683527.125000,27560.845703 1683527.125000,27560.845703</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1683527.125000,27560.845703</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>292</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIDEV</myns:UNIQUE_KEY>
+        <myns:NAME>Shawinigan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031I10</myns:NTS50>
+        <myns:LAT>463300</myns:LAT>
+        <myns:LONG>724500</myns:LONG>
+        <myns:SGC_CODE>2436030</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1619024.125000,-88902.875000 1619024.125000,-88902.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1619024.125000,-88902.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>293</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ELCQF</myns:UNIQUE_KEY>
+        <myns:NAME>Saint-Jerome</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031G16</myns:NTS50>
+        <myns:LAT>454700</myns:LAT>
+        <myns:LONG>740000</myns:LONG>
+        <myns:SGC_CODE>2475015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1599381.625000,-110971.843750 1599381.625000,-110971.843750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1599381.625000,-110971.843750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>294</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKCIC</myns:UNIQUE_KEY>
+        <myns:NAME>Lachute</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031G09</myns:NTS50>
+        <myns:LAT>453900</myns:LAT>
+        <myns:LONG>742000</myns:LONG>
+        <myns:SGC_CODE>2476020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1148719.625000,122210.796875 1148719.625000,122210.796875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1148719.625000,122210.796875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>295</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGXZU</myns:UNIQUE_KEY>
+        <myns:NAME>La Sarre</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032D14</myns:NTS50>
+        <myns:LAT>484800</myns:LAT>
+        <myns:LONG>791200</myns:LONG>
+        <myns:SGC_CODE>2487090</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1233483.750000,117386.156250 1233483.750000,117386.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1233483.750000,117386.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>296</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFHXK</myns:UNIQUE_KEY>
+        <myns:NAME>Amos</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032D09</myns:NTS50>
+        <myns:LAT>483400</myns:LAT>
+        <myns:LONG>780700</myns:LONG>
+        <myns:SGC_CODE>2488055</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1266396.750000,75096.203125 1266396.750000,75096.203125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1266396.750000,75096.203125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>297</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIJZE</myns:UNIQUE_KEY>
+        <myns:NAME>Val-d&#39;Or</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032C04</myns:NTS50>
+        <myns:LAT>480600</myns:LAT>
+        <myns:LONG>774700</myns:LONG>
+        <myns:SGC_CODE>2489005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1649522.125000,120873.718750 1649522.125000,120873.718750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1649522.125000,120873.718750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>298</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EPTUN</myns:UNIQUE_KEY>
+        <myns:NAME>La Tuque</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031P07</myns:NTS50>
+        <myns:LAT>472600</myns:LAT>
+        <myns:LONG>724700</myns:LONG>
+        <myns:SGC_CODE>2490007</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1645643.375000,242530.234375 1645643.375000,242530.234375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1645643.375000,242530.234375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>299</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHWMB</myns:UNIQUE_KEY>
+        <myns:NAME>Roberval</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032A09</myns:NTS50>
+        <myns:LAT>483100</myns:LAT>
+        <myns:LONG>721300</myns:LONG>
+        <myns:SGC_CODE>2491025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1626221.125000,250350.859375 1626221.125000,250350.859375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1626221.125000,250350.859375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>300</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHZSO</myns:UNIQUE_KEY>
+        <myns:NAME>Saint-Felicien</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032A09</myns:NTS50>
+        <myns:LAT>483900</myns:LAT>
+        <myns:LONG>722700</myns:LONG>
+        <myns:SGC_CODE>2491040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1630253.250000,282141.375000 1630253.250000,282141.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1630253.250000,282141.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>301</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGDZD</myns:UNIQUE_KEY>
+        <myns:NAME>Dolbeau</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032A16</myns:NTS50>
+        <myns:LAT>485300</myns:LAT>
+        <myns:LONG>721400</myns:LONG>
+        <myns:SGC_CODE>2492025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1942741.625000,553955.687500 1942741.625000,553955.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1942741.625000,553955.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>302</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHSPH</myns:UNIQUE_KEY>
+        <myns:NAME>Port-Cartier</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022J02</myns:NTS50>
+        <myns:LAT>500100</myns:LAT>
+        <myns:LONG>665200</myns:LONG>
+        <myns:SGC_CODE>2497020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1963917.250000,584971.500000 1963917.250000,584971.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1963917.250000,584971.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>303</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJNFQ</myns:UNIQUE_KEY>
+        <myns:NAME>Sept-?les</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022J01</myns:NTS50>
+        <myns:LAT>501200</myns:LAT>
+        <myns:LONG>662300</myns:LONG>
+        <myns:SGC_CODE>2497010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1452203.500000,342438.750000 1452203.500000,342438.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1452203.500000,342438.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>304</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFXAC</myns:UNIQUE_KEY>
+        <myns:NAME>Chibougamau</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032G16</myns:NTS50>
+        <myns:LAT>495500</myns:LAT>
+        <myns:LONG>742200</myns:LONG>
+        <myns:SGC_CODE>2499025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1502301.000000,-231027.765625 1502301.000000,-231027.765625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1502301.000000,-231027.765625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>305</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCPKN</myns:UNIQUE_KEY>
+        <myns:NAME>Smiths Falls</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031C16</myns:NTS50>
+        <myns:LAT>445400</myns:LAT>
+        <myns:LONG>760100</myns:LONG>
+        <myns:SGC_CODE>3509004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1533326.000000,-256181.921875 1533326.000000,-256181.921875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1533326.000000,-256181.921875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>306</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGDV</myns:UNIQUE_KEY>
+        <myns:NAME>Brockville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031B12</myns:NTS50>
+        <myns:LAT>443500</myns:LAT>
+        <myns:LONG>754100</myns:LONG>
+        <myns:SGC_CODE>3507015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1404266.500000,-352605.937500 1404266.500000,-352605.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1404266.500000,-352605.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>307</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDZNE</myns:UNIQUE_KEY>
+        <myns:NAME>Trenton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031C04</myns:NTS50>
+        <myns:LAT>440600</myns:LAT>
+        <myns:LONG>773500</myns:LONG>
+        <myns:SGC_CODE>3512012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1359853.375000,-381128.937500 1359853.375000,-381128.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1359853.375000,-381128.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>308</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FARXE</myns:UNIQUE_KEY>
+        <myns:NAME>Cobourg</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030M16</myns:NTS50>
+        <myns:LAT>435800</myns:LAT>
+        <myns:LONG>781000</myns:LONG>
+        <myns:SGC_CODE>3514021</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1303309.125000,-348911.000000 1303309.125000,-348911.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1303309.125000,-348911.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>309</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGDT</myns:UNIQUE_KEY>
+        <myns:NAME>Lindsay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031D07</myns:NTS50>
+        <myns:LAT>442100</myns:LAT>
+        <myns:LONG>784400</myns:LONG>
+        <myns:SGC_CODE>3516009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1230340.500000,-549706.937500 1230340.500000,-549706.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1230340.500000,-549706.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>310</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDZLB</myns:UNIQUE_KEY>
+        <myns:NAME>Nanticoke</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040I16</myns:NTS50>
+        <myns:LAT>425400</myns:LAT>
+        <myns:LONG>801100</myns:LONG>
+        <myns:SGC_CODE>3528033</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1191953.875000,-456961.843750 1191953.875000,-456961.843750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1191953.875000,-456961.843750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>311</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBDWO</myns:UNIQUE_KEY>
+        <myns:NAME>Fergus</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040P09</myns:NTS50>
+        <myns:LAT>434200</myns:LAT>
+        <myns:LONG>802200</myns:LONG>
+        <myns:SGC_CODE>3523026</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1050574.875000,-681502.875000 1050574.875000,-681502.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1050574.875000,-681502.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>312</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBWVO</myns:UNIQUE_KEY>
+        <myns:NAME>Leamington</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040J02</myns:NTS50>
+        <myns:LAT>420300</myns:LAT>
+        <myns:LONG>823600</myns:LONG>
+        <myns:SGC_CODE>3537006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1176905.875000,-265426.906250 1176905.875000,-265426.906250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1176905.875000,-265426.906250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>313</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDSUS</myns:UNIQUE_KEY>
+        <myns:NAME>Parry Sound</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041H08</myns:NTS50>
+        <myns:LAT>452100</myns:LAT>
+        <myns:LONG>800200</myns:LONG>
+        <myns:SGC_CODE>3549032</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1369414.000000,-154392.265625 1369414.000000,-154392.265625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1369414.000000,-154392.265625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>314</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDSIZ</myns:UNIQUE_KEY>
+        <myns:NAME>Petawawa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031F14</myns:NTS50>
+        <myns:LAT>455400</myns:LAT>
+        <myns:LONG>771700</myns:LONG>
+        <myns:SGC_CODE>3547079</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1386362.500000,-159926.406250 1386362.500000,-159926.406250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1386362.500000,-159926.406250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>315</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCHOC</myns:UNIQUE_KEY>
+        <myns:NAME>Pembroke</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031F14</myns:NTS50>
+        <myns:LAT>454900</myns:LAT>
+        <myns:LONG>770700</myns:LONG>
+        <myns:SGC_CODE>3547064</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1430533.250000,-183377.296875 1430533.250000,-183377.296875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1430533.250000,-183377.296875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>316</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCKPW</myns:UNIQUE_KEY>
+        <myns:NAME>Renfrew</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031F07</myns:NTS50>
+        <myns:LAT>452800</myns:LAT>
+        <myns:LONG>764100</myns:LONG>
+        <myns:SGC_CODE>3547048</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1453011.500000,-183204.125000 1453011.500000,-183204.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1453011.500000,-183204.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>317</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FADTN</myns:UNIQUE_KEY>
+        <myns:NAME>Arnprior</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031F08</myns:NTS50>
+        <myns:LAT>452600</myns:LAT>
+        <myns:LONG>762100</myns:LONG>
+        <myns:SGC_CODE>3547002</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1237492.375000,-255573.656250 1237492.375000,-255573.656250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1237492.375000,-255573.656250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>318</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBPPE</myns:UNIQUE_KEY>
+        <myns:NAME>Huntsville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031E06</myns:NTS50>
+        <myns:LAT>452000</myns:LAT>
+        <myns:LONG>791300</myns:LONG>
+        <myns:SGC_CODE>3544042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1236493.375000,-302025.812500 1236493.375000,-302025.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1236493.375000,-302025.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>319</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBJKJ</myns:UNIQUE_KEY>
+        <myns:NAME>Gravenhurst</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031D14</myns:NTS50>
+        <myns:LAT>445500</myns:LAT>
+        <myns:LONG>792200</myns:LONG>
+        <myns:SGC_CODE>3544002</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1201413.875000,-330936.843750 1201413.875000,-330936.843750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1201413.875000,-330936.843750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>320</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEBJL</myns:UNIQUE_KEY>
+        <myns:NAME>Midland</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031D12</myns:NTS50>
+        <myns:LAT>444500</myns:LAT>
+        <myns:LONG>795300</myns:LONG>
+        <myns:SGC_CODE>3543074</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1185567.750000,-366145.187500 1185567.750000,-366145.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1185567.750000,-366145.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>321</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FASGS</myns:UNIQUE_KEY>
+        <myns:NAME>Collingwood</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041A08</myns:NTS50>
+        <myns:LAT>442900</myns:LAT>
+        <myns:LONG>801300</myns:LONG>
+        <myns:SGC_CODE>3543031</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1124608.125000,-368382.875000 1124608.125000,-368382.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1124608.125000,-368382.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>322</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGEE</myns:UNIQUE_KEY>
+        <myns:NAME>Owen Sound</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041A10</myns:NTS50>
+        <myns:LAT>443400</myns:LAT>
+        <myns:LONG>805600</myns:LONG>
+        <myns:SGC_CODE>3542059</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1082452.750000,-425274.343750 1082452.750000,-425274.343750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1082452.750000,-425274.343750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>323</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBUPC</myns:UNIQUE_KEY>
+        <myns:NAME>Kincardine</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041A04</myns:NTS50>
+        <myns:LAT>441100</myns:LAT>
+        <myns:LONG>813800</myns:LONG>
+        <myns:SGC_CODE>3541022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1085636.875000,-479535.500000 1085636.875000,-479535.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1085636.875000,-479535.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>324</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBIAG</myns:UNIQUE_KEY>
+        <myns:NAME>Goderich</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040P12</myns:NTS50>
+        <myns:LAT>434500</myns:LAT>
+        <myns:LONG>814300</myns:LONG>
+        <myns:SGC_CODE>3540028</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1102346.375000,38478.839844 1102346.375000,38478.839844</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1102346.375000,38478.839844</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>325</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBUYW</myns:UNIQUE_KEY>
+        <myns:NAME>Kirkland Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042A01</myns:NTS50>
+        <myns:LAT>480900</myns:LAT>
+        <myns:LONG>800200</myns:LONG>
+        <myns:SGC_CODE>3554068</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1022290.875000,-200768.640625 1022290.875000,-200768.640625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1022290.875000,-200768.640625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>326</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBCXV</myns:UNIQUE_KEY>
+        <myns:NAME>Espanola</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041I05</myns:NTS50>
+        <myns:LAT>461500</myns:LAT>
+        <myns:LONG>814600</myns:LONG>
+        <myns:SGC_CODE>3552026</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1148385.000000,-22097.912109 1148385.000000,-22097.912109</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1148385.000000,-22097.912109</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>327</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDOQG</myns:UNIQUE_KEY>
+        <myns:NAME>New Liskeard</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031M12</myns:NTS50>
+        <myns:LAT>473000</myns:LAT>
+        <myns:LONG>794000</myns:LONG>
+        <myns:SGC_CODE>3554018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1156823.625000,-155751.890625 1156823.625000,-155751.890625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1156823.625000,-155751.890625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>328</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCTKE</myns:UNIQUE_KEY>
+        <myns:NAME>Sturgeon Falls</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031L05</myns:NTS50>
+        <myns:LAT>462200</myns:LAT>
+        <myns:LONG>795500</myns:LONG>
+        <myns:SGC_CODE>3548052</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1040492.125000,94307.945312 1040492.125000,94307.945312</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1040492.125000,94307.945312</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>329</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBQNV</myns:UNIQUE_KEY>
+        <myns:NAME>Iroquois Falls</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042A15</myns:NTS50>
+        <myns:LAT>484600</myns:LAT>
+        <myns:LONG>804100</myns:LONG>
+        <myns:SGC_CODE>3556031</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>953143.625000,-199573.281250 953143.625000,-199573.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>953143.625000,-199573.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>330</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBCHB</myns:UNIQUE_KEY>
+        <myns:NAME>Elliot Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041J07</myns:NTS50>
+        <myns:LAT>462300</myns:LAT>
+        <myns:LONG>823800</myns:LONG>
+        <myns:SGC_CODE>3557041</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>631614.625000,12948.917969 631614.625000,12948.917969</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>631614.625000,12948.917969</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>331</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCDJZ</myns:UNIQUE_KEY>
+        <myns:NAME>Marathon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042D09</myns:NTS50>
+        <myns:LAT>484300</myns:LAT>
+        <myns:LONG>862300</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>812340.500000,152359.250000 812340.500000,152359.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>812340.500000,152359.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>332</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBMTW</myns:UNIQUE_KEY>
+        <myns:NAME>Hearst</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042G12</myns:NTS50>
+        <myns:LAT>494100</myns:LAT>
+        <myns:LONG>834000</myns:LONG>
+        <myns:SGC_CODE>3556076</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>903953.062500,138010.250000 903953.062500,138010.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>903953.062500,138010.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>333</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBTBP</myns:UNIQUE_KEY>
+        <myns:NAME>Kapuskasing</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042G08</myns:NTS50>
+        <myns:LAT>492500</myns:LAT>
+        <myns:LONG>822600</myns:LONG>
+        <myns:SGC_CODE>3556066</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>36782.281250,87464.632812 36782.281250,87464.632812</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>36782.281250,87464.632812</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>334</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGDQ</myns:UNIQUE_KEY>
+        <myns:NAME>Kenora</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052E16</myns:NTS50>
+        <myns:LAT>494700</myns:LAT>
+        <myns:LONG>942900</myns:LONG>
+        <myns:SGC_CODE>3560016</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>117234.476562,-38629.488281 117234.476562,-38629.488281</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>117234.476562,-38629.488281</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>335</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBEYE</myns:UNIQUE_KEY>
+        <myns:NAME>Fort Frances</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052C11</myns:NTS50>
+        <myns:LAT>483600</myns:LAT>
+        <myns:LONG>932400</myns:LONG>
+        <myns:SGC_CODE>3559012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>155462.843750,91561.804688 155462.843750,91561.804688</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>155462.843750,91561.804688</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>336</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAZWK</myns:UNIQUE_KEY>
+        <myns:NAME>Dryden</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052F15</myns:NTS50>
+        <myns:LAT>494700</myns:LAT>
+        <myns:LONG>925000</myns:LONG>
+        <myns:SGC_CODE>3560026</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-352989.843750,253015.203125 -352989.843750,253015.203125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-352989.843750,253015.203125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>337</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAGDE</myns:UNIQUE_KEY>
+        <myns:NAME>Dauphin</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062N01</myns:NTS50>
+        <myns:LAT>510858</myns:LAT>
+        <myns:LONG>1000258</myns:LONG>
+        <myns:SGC_CODE>4617050</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-135377.437500,132527.000000 -135377.437500,132527.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-135377.437500,132527.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>338</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAYRY</myns:UNIQUE_KEY>
+        <myns:NAME>Selkirk</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062I02</myns:NTS50>
+        <myns:LAT>500837</myns:LAT>
+        <myns:LONG>965302</myns:LONG>
+        <myns:SGC_CODE>4613047</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-227870.281250,28459.660156 -227870.281250,28459.660156</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-227870.281250,28459.660156</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>339</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GASBB</myns:UNIQUE_KEY>
+        <myns:NAME>Morden</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062G01</myns:NTS50>
+        <myns:LAT>491131</myns:LAT>
+        <myns:LONG>980602</myns:LONG>
+        <myns:SGC_CODE>4603053</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-124020.132812,60363.867188 -124020.132812,60363.867188</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-124020.132812,60363.867188</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>340</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBAML</myns:UNIQUE_KEY>
+        <myns:NAME>Steinbach</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062H10</myns:NTS50>
+        <myns:LAT>493133</myns:LAT>
+        <myns:LONG>964102</myns:LONG>
+        <myns:SGC_CODE>4602044</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-232574.671875,114701.593750 -232574.671875,114701.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-232574.671875,114701.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>341</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAWDD</myns:UNIQUE_KEY>
+        <myns:NAME>Portage la Prairie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062G16</myns:NTS50>
+        <myns:LAT>495822</myns:LAT>
+        <myns:LONG>981731</myns:LONG>
+        <myns:SGC_CODE>4609029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-401644.656250,554806.750000 -401644.656250,554806.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-401644.656250,554806.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>342</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBBOH</myns:UNIQUE_KEY>
+        <myns:NAME>The Pas</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063F14</myns:NTS50>
+        <myns:LAT>534930</myns:LAT>
+        <myns:LONG>1011512</myns:LONG>
+        <myns:SGC_CODE>4621045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-177433.125000,747490.500000 -177433.125000,747490.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-177433.125000,747490.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>343</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBBRP</myns:UNIQUE_KEY>
+        <myns:NAME>Thompson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063P12</myns:NTS50>
+        <myns:LAT>554436</myns:LAT>
+        <myns:LONG>975119</myns:LONG>
+        <myns:SGC_CODE>4622026</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-433354.531250,657065.937500 -433354.531250,657065.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-433354.531250,657065.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>344</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAILW</myns:UNIQUE_KEY>
+        <myns:NAME>Flin Flon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>063K13</myns:NTS50>
+        <myns:LAT>544605</myns:LAT>
+        <myns:LONG>1015151</myns:LONG>
+        <myns:SGC_CODE>4621064</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-581017.500000,53671.285156 -581017.500000,53671.285156</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-581017.500000,53671.285156</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>345</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAUQM</myns:UNIQUE_KEY>
+        <myns:NAME>Estevan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062E02</myns:NTS50>
+        <myns:LAT>490800</myns:LAT>
+        <myns:LONG>1025900</myns:LONG>
+        <myns:SGC_CODE>4701024</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-880962.687500,514814.593750 -880962.687500,514814.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-880962.687500,514814.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>346</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAMHJ</myns:UNIQUE_KEY>
+        <myns:NAME>North Battleford</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073C16</myns:NTS50>
+        <myns:LAT>524700</myns:LAT>
+        <myns:LONG>1081700</myns:LONG>
+        <myns:SGC_CODE>4716029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-898194.375000,236871.390625 -898194.375000,236871.390625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-898194.375000,236871.390625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>347</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAPKT</myns:UNIQUE_KEY>
+        <myns:NAME>Swift Current</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072J05</myns:NTS50>
+        <myns:LAT>501700</myns:LAT>
+        <myns:LONG>1074800</myns:LONG>
+        <myns:SGC_CODE>4708004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-633172.375000,474643.968750 -633172.375000,474643.968750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-633172.375000,474643.968750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>348</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAUTW</myns:UNIQUE_KEY>
+        <myns:NAME>Melfort</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073A15</myns:NTS50>
+        <myns:LAT>525200</myns:LAT>
+        <myns:LONG>1043700</myns:LONG>
+        <myns:SGC_CODE>4714051</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-517360.656250,276749.000000 -517360.656250,276749.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-517360.656250,276749.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>349</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAVWM</myns:UNIQUE_KEY>
+        <myns:NAME>Yorkton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062M01</myns:NTS50>
+        <myns:LAT>511300</myns:LAT>
+        <myns:LONG>1022800</myns:LONG>
+        <myns:SGC_CODE>4709012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-636198.687500,115397.093750 -636198.687500,115397.093750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-636198.687500,115397.093750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>350</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAUMZ</myns:UNIQUE_KEY>
+        <myns:NAME>Weyburn</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>062E12</myns:NTS50>
+        <myns:LAT>494000</myns:LAT>
+        <myns:LONG>1035100</myns:LONG>
+        <myns:SGC_CODE>4702047</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1317498.875000,586733.687500 -1317498.875000,586733.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1317498.875000,586733.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>351</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAFOG</myns:UNIQUE_KEY>
+        <myns:NAME>Rocky Mountain House</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083B07</myns:NTS50>
+        <myns:LAT>522200</myns:LAT>
+        <myns:LONG>1145500</myns:LONG>
+        <myns:SGC_CODE>4809015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-978039.000000,589518.687500 -978039.000000,589518.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-978039.000000,589518.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>352</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IADVK</myns:UNIQUE_KEY>
+        <myns:NAME>Lloydminster</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>073E08</myns:NTS50>
+        <myns:LAT>531700</myns:LAT>
+        <myns:LONG>1100000</myns:LONG>
+        <myns:SGC_CODE>4810039</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1164891.125000,610223.500000 -1164891.125000,610223.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1164891.125000,610223.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>353</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAKKF</myns:UNIQUE_KEY>
+        <myns:NAME>Camrose</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083H02</myns:NTS50>
+        <myns:LAT>530100</myns:LAT>
+        <myns:LONG>1125000</myns:LONG>
+        <myns:SGC_CODE>4810011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1206204.000000,443671.812500 -1206204.000000,443671.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1206204.000000,443671.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>354</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IABPA</myns:UNIQUE_KEY>
+        <myns:NAME>Drumheller</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082P07</myns:NTS50>
+        <myns:LAT>512800</myns:LAT>
+        <myns:LONG>1124200</myns:LONG>
+        <myns:SGC_CODE>4805029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1310855.875000,371788.156250 -1310855.875000,371788.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1310855.875000,371788.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>355</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAJVO</myns:UNIQUE_KEY>
+        <myns:NAME>High River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082I12</myns:NTS50>
+        <myns:LAT>503500</myns:LAT>
+        <myns:LONG>1135200</myns:LONG>
+        <myns:SGC_CODE>4806006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1178121.000000,333609.906250 -1178121.000000,333609.906250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1178121.000000,333609.906250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>356</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAIDN</myns:UNIQUE_KEY>
+        <myns:NAME>Brooks</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>072L12</myns:NTS50>
+        <myns:LAT>503500</myns:LAT>
+        <myns:LONG>1115300</myns:LONG>
+        <myns:SGC_CODE>4802034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1218203.125000,254632.562500 -1218203.125000,254632.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1218203.125000,254632.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>357</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAAFM</myns:UNIQUE_KEY>
+        <myns:NAME>Taber</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082H16</myns:NTS50>
+        <myns:LAT>494900</myns:LAT>
+        <myns:LONG>1120900</myns:LONG>
+        <myns:SGC_CODE>4802022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1402195.000000,468952.843750 -1402195.000000,468952.843750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1402195.000000,468952.843750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>358</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IACYE</myns:UNIQUE_KEY>
+        <myns:NAME>Banff</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082O04</myns:NTS50>
+        <myns:LAT>511000</myns:LAT>
+        <myns:LONG>1153400</myns:LONG>
+        <myns:SGC_CODE>4815035</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1293983.500000,671625.625000 -1293983.500000,671625.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1293983.500000,671625.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>359</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IABOA</myns:UNIQUE_KEY>
+        <myns:NAME>Drayton Valley</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083G02</myns:NTS50>
+        <myns:LAT>531300</myns:LAT>
+        <myns:LONG>1145900</myns:LONG>
+        <myns:SGC_CODE>4811031</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1204318.875000,614251.812500 -1204318.875000,614251.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1204318.875000,614251.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>360</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAPBB</myns:UNIQUE_KEY>
+        <myns:NAME>Wetaskiwin</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083A14</myns:NTS50>
+        <myns:LAT>525800</myns:LAT>
+        <myns:LONG>1132200</myns:LONG>
+        <myns:SGC_CODE>4811002</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1202569.875000,648899.875000 -1202569.875000,648899.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1202569.875000,648899.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>361</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IACUJ</myns:UNIQUE_KEY>
+        <myns:NAME>Leduc</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083H05</myns:NTS50>
+        <myns:LAT>531600</myns:LAT>
+        <myns:LONG>1133300</myns:LONG>
+        <myns:SGC_CODE>4811016</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1325625.875000,1031850.875000 -1325625.875000,1031850.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1325625.875000,1031850.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>362</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAEWL</myns:UNIQUE_KEY>
+        <myns:NAME>Peace River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>084C03</myns:NTS50>
+        <myns:LAT>561500</myns:LAT>
+        <myns:LONG>1171700</myns:LONG>
+        <myns:SGC_CODE>4819038</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1212621.875000,883457.250000 -1212621.875000,883457.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1212621.875000,883457.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>363</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAIJK</myns:UNIQUE_KEY>
+        <myns:NAME>Slave Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083O07</myns:NTS50>
+        <myns:LAT>551700</myns:LAT>
+        <myns:LONG>1144600</myns:LONG>
+        <myns:SGC_CODE>4817029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1449160.375000,745803.187500 -1449160.375000,745803.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1449160.375000,745803.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>364</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAJWU</myns:UNIQUE_KEY>
+        <myns:NAME>Hinton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083F05</myns:NTS50>
+        <myns:LAT>532400</myns:LAT>
+        <myns:LONG>1173500</myns:LONG>
+        <myns:SGC_CODE>4814019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1371443.250000,742126.187500 -1371443.250000,742126.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1371443.250000,742126.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>365</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IACMW</myns:UNIQUE_KEY>
+        <myns:NAME>Edson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083F09</myns:NTS50>
+        <myns:LAT>533500</myns:LAT>
+        <myns:LONG>1162600</myns:LONG>
+        <myns:SGC_CODE>4814024</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1311399.625000,780727.375000 -1311399.625000,780727.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1311399.625000,780727.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>366</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAPCL</myns:UNIQUE_KEY>
+        <myns:NAME>Whitecourt</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083J04</myns:NTS50>
+        <myns:LAT>540900</myns:LAT>
+        <myns:LONG>1154100</myns:LONG>
+        <myns:SGC_CODE>4813030</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1103515.625000,647300.562500 -1103515.625000,647300.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1103515.625000,647300.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>367</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAOBT</myns:UNIQUE_KEY>
+        <myns:NAME>Vegreville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083H08</myns:NTS50>
+        <myns:LAT>533000</myns:LAT>
+        <myns:LONG>1120300</myns:LONG>
+        <myns:SGC_CODE>4810028</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1786582.500000,494759.500000 -1786582.500000,494759.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1786582.500000,494759.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>368</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCBSO</myns:UNIQUE_KEY>
+        <myns:NAME>Merritt</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092I02</myns:NTS50>
+        <myns:LAT>500645</myns:LAT>
+        <myns:LONG>1204730</myns:LONG>
+        <myns:SGC_CODE>5933006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1678406.875000,470688.375000 -1678406.875000,470688.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1678406.875000,470688.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>369</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBOAP</myns:UNIQUE_KEY>
+        <myns:NAME>Vernon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082L06</myns:NTS50>
+        <myns:LAT>501530</myns:LAT>
+        <myns:LONG>1191600</myns:LONG>
+        <myns:SGC_CODE>5937014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1665222.625000,511039.031250 -1665222.625000,511039.031250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1665222.625000,511039.031250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>370</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCJTL</myns:UNIQUE_KEY>
+        <myns:NAME>Salmon Arm</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082L11</myns:NTS50>
+        <myns:LAT>504200</myns:LAT>
+        <myns:LONG>1191600</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1579306.750000,514970.937500 -1579306.750000,514970.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1579306.750000,514970.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>371</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBHTI</myns:UNIQUE_KEY>
+        <myns:NAME>Revelstoke</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082L16</myns:NTS50>
+        <myns:LAT>505900</myns:LAT>
+        <myns:LONG>1181200</myns:LONG>
+        <myns:SGC_CODE>5939019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2091906.875000,529072.500000 -2091906.875000,529072.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2091906.875000,529072.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>372</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBIEL</myns:UNIQUE_KEY>
+        <myns:NAME>Port Alberni</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092F02</myns:NTS50>
+        <myns:LAT>491430</myns:LAT>
+        <myns:LONG>1244800</myns:LONG>
+        <myns:SGC_CODE>5923008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2081380.375000,578563.562500 -2081380.375000,578563.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2081380.375000,578563.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>373</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAHJY</myns:UNIQUE_KEY>
+        <myns:NAME>Courtenay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092F10</myns:NTS50>
+        <myns:LAT>494100</myns:LAT>
+        <myns:LONG>1245900</myns:LONG>
+        <myns:SGC_CODE>5925010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2083434.500000,620068.312500 -2083434.500000,620068.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2083434.500000,620068.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>374</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCJEN</myns:UNIQUE_KEY>
+        <myns:NAME>Campbell River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092K03</myns:NTS50>
+        <myns:LAT>500100</myns:LAT>
+        <myns:LONG>1251430</myns:LONG>
+        <myns:SGC_CODE>5925034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2041187.750000,577390.437500 -2041187.750000,577390.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2041187.750000,577390.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>375</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCVCI</myns:UNIQUE_KEY>
+        <myns:NAME>Powell River</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092F15</myns:NTS50>
+        <myns:LAT>495100</myns:LAT>
+        <myns:LONG>1243200</myns:LONG>
+        <myns:SGC_CODE>5927008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1962958.625000,514314.062500 -1962958.625000,514314.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1962958.625000,514314.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>376</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCVCJ</myns:UNIQUE_KEY>
+        <myns:NAME>Squamish</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092G14</myns:NTS50>
+        <myns:LAT>494500</myns:LAT>
+        <myns:LONG>1230800</myns:LONG>
+        <myns:SGC_CODE>5931006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1613210.750000,328042.656250 -1613210.750000,328042.656250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1613210.750000,328042.656250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>377</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCAAC</myns:UNIQUE_KEY>
+        <myns:NAME>Castlegar</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082F05</myns:NTS50>
+        <myns:LAT>491800</myns:LAT>
+        <myns:LONG>1174000</myns:LONG>
+        <myns:SGC_CODE>5903045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1579295.000000,336012.562500 -1579295.000000,336012.562500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1579295.000000,336012.562500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>378</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAYDR</myns:UNIQUE_KEY>
+        <myns:NAME>Nelson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082F06</myns:NTS50>
+        <myns:LAT>493000</myns:LAT>
+        <myns:LONG>1171700</myns:LONG>
+        <myns:SGC_CODE>5903015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1483873.000000,321660.625000 -1483873.000000,321660.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1483873.000000,321660.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>379</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAHBL</myns:UNIQUE_KEY>
+        <myns:NAME>Kimberley</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082G12</myns:NTS50>
+        <myns:LAT>494100</myns:LAT>
+        <myns:LONG>1155900</myns:LONG>
+        <myns:SGC_CODE>5901028</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1476463.250000,302045.718750 -1476463.250000,302045.718750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1476463.250000,302045.718750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>380</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAIQY</myns:UNIQUE_KEY>
+        <myns:NAME>Cranbrook</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082G05</myns:NTS50>
+        <myns:LAT>493000</myns:LAT>
+        <myns:LONG>1154600</myns:LONG>
+        <myns:SGC_CODE>5901022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1426380.375000,285634.343750 -1426380.375000,285634.343750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1426380.375000,285634.343750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>381</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAVIB</myns:UNIQUE_KEY>
+        <myns:NAME>Fernie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082G06</myns:NTS50>
+        <myns:LAT>493000</myns:LAT>
+        <myns:LONG>1150400</myns:LONG>
+        <myns:SGC_CODE>5901012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1693991.000000,1078587.250000 -1693991.000000,1078587.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1693991.000000,1078587.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>382</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAHBY</myns:UNIQUE_KEY>
+        <myns:NAME>Mackenzie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093O06</myns:NTS50>
+        <myns:LAT>551800</myns:LAT>
+        <myns:LONG>1231000</myns:LONG>
+        <myns:SGC_CODE>5953033</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1527466.500000,1113108.625000 -1527466.500000,1113108.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1527466.500000,1113108.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>383</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAGPB</myns:UNIQUE_KEY>
+        <myns:NAME>Fort St. John</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>094A02</myns:NTS50>
+        <myns:LAT>561500</myns:LAT>
+        <myns:LONG>1205100</myns:LONG>
+        <myns:SGC_CODE>5955034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1513434.875000,1048177.812500 -1513434.875000,1048177.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1513434.875000,1048177.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>384</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAPCN</myns:UNIQUE_KEY>
+        <myns:NAME>Dawson Creek</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093P16</myns:NTS50>
+        <myns:LAT>554600</myns:LAT>
+        <myns:LONG>1201400</myns:LONG>
+        <myns:SGC_CODE>5955014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2147817.750000,1194688.000000 -2147817.750000,1194688.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2147817.750000,1194688.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>385</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCNWW</myns:UNIQUE_KEY>
+        <myns:NAME>Prince Rupert</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>103J08</myns:NTS50>
+        <myns:LAT>541900</myns:LAT>
+        <myns:LONG>1301900</myns:LONG>
+        <myns:SGC_CODE>5947012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2040031.750000,1162240.375000 -2040031.750000,1162240.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2040031.750000,1162240.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>386</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBXCK</myns:UNIQUE_KEY>
+        <myns:NAME>Terrace</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>103I10</myns:NTS50>
+        <myns:LAT>543100</myns:LAT>
+        <myns:LONG>1283600</myns:LONG>
+        <myns:SGC_CODE>5949011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2068077.500000,1118855.000000 -2068077.500000,1118855.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2068077.500000,1118855.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>387</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCMDB</myns:UNIQUE_KEY>
+        <myns:NAME>Kitimat</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>103I02</myns:NTS50>
+        <myns:LAT>540300</myns:LAT>
+        <myns:LONG>1283900</myns:LONG>
+        <myns:SGC_CODE>5949005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1948996.750000,1141989.875000 -1948996.750000,1141989.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1948996.750000,1141989.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>388</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBMQO</myns:UNIQUE_KEY>
+        <myns:NAME>Smithers</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093L14</myns:NTS50>
+        <myns:LAT>544650</myns:LAT>
+        <myns:LONG>1271015</myns:LONG>
+        <myns:SGC_CODE>5951043</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1763763.875000,835333.875000 -1763763.875000,835333.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1763763.875000,835333.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>389</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBNTS</myns:UNIQUE_KEY>
+        <myns:NAME>Quesnel</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093B15</myns:NTS50>
+        <myns:LAT>530000</myns:LAT>
+        <myns:LONG>1223000</myns:LONG>
+        <myns:SGC_CODE>5941013</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1782911.625000,736731.062500 -1782911.625000,736731.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1782911.625000,736731.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>390</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBTMB</myns:UNIQUE_KEY>
+        <myns:NAME>Williams Lake</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093B01</myns:NTS50>
+        <myns:LAT>520830</myns:LAT>
+        <myns:LONG>1220830</myns:LONG>
+        <myns:SGC_CODE>5941009</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2587598.000000,404010.531250 2587598.000000,404010.531250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2587598.000000,404010.531250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>391</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CBLGX</myns:UNIQUE_KEY>
+        <myns:NAME>Sydney</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011K01</myns:NTS50>
+        <myns:LAT>460900</myns:LAT>
+        <myns:LONG>601100</myns:LONG>
+        <myns:SGC_CODE>1217014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2437026.000000,130358.351562 2437026.000000,130358.351562</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2437026.000000,130358.351562</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>392</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAIYJ</myns:UNIQUE_KEY>
+        <myns:NAME>Dartmouth</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011D12</myns:NTS50>
+        <myns:LAT>444000</myns:LAT>
+        <myns:LONG>633400</myns:LONG>
+        <myns:SGC_CODE>1209022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2225930.750000,100059.570312 2225930.750000,100059.570312</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2225930.750000,100059.570312</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>393</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAEGW</myns:UNIQUE_KEY>
+        <myns:NAME>Saint John</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021G08</myns:NTS50>
+        <myns:LAT>451600</myns:LAT>
+        <myns:LONG>660300</myns:LONG>
+        <myns:SGC_CODE>1301006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2277680.750000,226813.671875 2277680.750000,226813.671875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2277680.750000,226813.671875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>394</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DADHJ</myns:UNIQUE_KEY>
+        <myns:NAME>Moncton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021I02</myns:NTS50>
+        <myns:LAT>460600</myns:LAT>
+        <myns:LONG>644700</myns:LONG>
+        <myns:SGC_CODE>1307022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1788746.500000,95255.609375 1788746.500000,95255.609375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1788746.500000,95255.609375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>395</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGZSK</myns:UNIQUE_KEY>
+        <myns:NAME>Levis</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021L14</myns:NTS50>
+        <myns:LAT>464800</myns:LAT>
+        <myns:LONG>711100</myns:LONG>
+        <myns:SGC_CODE>2424020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1905956.750000,343422.437500 1905956.750000,343422.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1905956.750000,343422.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>396</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJNFL</myns:UNIQUE_KEY>
+        <myns:NAME>Rimouski</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022C07</myns:NTS50>
+        <myns:LAT>482600</myns:LAT>
+        <myns:LONG>683300</myns:LONG>
+        <myns:SGC_CODE>2410045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2402416.500000,461586.812500 2402416.500000,461586.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2402416.500000,461586.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>397</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGIIG</myns:UNIQUE_KEY>
+        <myns:NAME>Fatima</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>011N05</myns:NTS50>
+        <myns:LAT>472400</myns:LAT>
+        <myns:LONG>615300</myns:LONG>
+        <myns:SGC_CODE>2401025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1500462.375000,-164583.359375 1500462.375000,-164583.359375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1500462.375000,-164583.359375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>398</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ELYOR</myns:UNIQUE_KEY>
+        <myns:NAME>Hull</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031G05</myns:NTS50>
+        <myns:LAT>452600</myns:LAT>
+        <myns:LONG>754400</myns:LONG>
+        <myns:SGC_CODE>2481020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1631541.250000,-144313.281250 1631541.250000,-144313.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1631541.250000,-144313.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>399</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EKJCM</myns:UNIQUE_KEY>
+        <myns:NAME>Salaberry-de-Valleyfield</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031G08</myns:NTS50>
+        <myns:LAT>451500</myns:LAT>
+        <myns:LONG>740800</myns:LONG>
+        <myns:SGC_CODE>2470045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1693094.625000,-119801.523438 1693094.625000,-119801.523438</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1693094.625000,-119801.523438</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>400</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EJIXZ</myns:UNIQUE_KEY>
+        <myns:NAME>Saint-Jean-sur-Richelieu</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031H06</myns:NTS50>
+        <myns:LAT>451900</myns:LAT>
+        <myns:LONG>731600</myns:LONG>
+        <myns:SGC_CODE>2456080</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1729694.250000,-94889.820312 1729694.250000,-94889.820312</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1729694.250000,-94889.820312</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>401</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGNRO</myns:UNIQUE_KEY>
+        <myns:NAME>Granby</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031H07</myns:NTS50>
+        <myns:LAT>452400</myns:LAT>
+        <myns:LONG>724400</myns:LONG>
+        <myns:SGC_CODE>2447015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1701902.625000,-74687.890625 1701902.625000,-74687.890625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1701902.625000,-74687.890625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>402</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHZZL</myns:UNIQUE_KEY>
+        <myns:NAME>Saint-Hyacinthe</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031H10</myns:NTS50>
+        <myns:LAT>453700</myns:LAT>
+        <myns:LONG>725700</myns:LONG>
+        <myns:SGC_CODE>2454045</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1729753.625000,-35490.902344 1729753.625000,-35490.902344</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1729753.625000,-35490.902344</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>403</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EPUWF</myns:UNIQUE_KEY>
+        <myns:NAME>Drummondville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031H16</myns:NTS50>
+        <myns:LAT>455300</myns:LAT>
+        <myns:LONG>722900</myns:LONG>
+        <myns:SGC_CODE>2449057</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1790485.625000,-70567.742188 1790485.625000,-70567.742188</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1790485.625000,-70567.742188</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>404</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIDHN</myns:UNIQUE_KEY>
+        <myns:NAME>Sherbrooke</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021E05</myns:NTS50>
+        <myns:LAT>452500</myns:LAT>
+        <myns:LONG>715400</myns:LONG>
+        <myns:SGC_CODE>2443025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1703127.000000,6984.663086 1703127.000000,6984.663086</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1703127.000000,6984.663086</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>405</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIITR</myns:UNIQUE_KEY>
+        <myns:NAME>Trois-Rivieres</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031I07</myns:NTS50>
+        <myns:LAT>462100</myns:LAT>
+        <myns:LONG>723300</myns:LONG>
+        <myns:SGC_CODE>2437065</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1175907.250000,69454.234375 1175907.250000,69454.234375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1175907.250000,69454.234375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>406</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ELYOQ</myns:UNIQUE_KEY>
+        <myns:NAME>Rouyn-Noranda</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>032D03</myns:NTS50>
+        <myns:LAT>481400</myns:LAT>
+        <myns:LONG>790100</myns:LONG>
+        <myns:SGC_CODE>2486040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1891756.125000,429866.468750 1891756.125000,429866.468750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1891756.125000,429866.468750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>407</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFKHC</myns:UNIQUE_KEY>
+        <myns:NAME>Baie-Comeau</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022F01</myns:NTS50>
+        <myns:LAT>491300</myns:LAT>
+        <myns:LONG>680900</myns:LONG>
+        <myns:SGC_CODE>2496020</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1686807.875000,260775.109375 1686807.875000,260775.109375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1686807.875000,260775.109375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>408</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFHQD</myns:UNIQUE_KEY>
+        <myns:NAME>Alma</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022D12</myns:NTS50>
+        <myns:LAT>483300</myns:LAT>
+        <myns:LONG>713900</myns:LONG>
+        <myns:SGC_CODE>2493040</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1716713.375000,258657.984375 1716713.375000,258657.984375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1716713.375000,258657.984375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>409</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EGUFW</myns:UNIQUE_KEY>
+        <myns:NAME>Jonquiere</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022D06</myns:NTS50>
+        <myns:LAT>482500</myns:LAT>
+        <myns:LONG>711300</myns:LONG>
+        <myns:SGC_CODE>2494070</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1731386.250000,263787.062500 1731386.250000,263787.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1731386.250000,263787.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>410</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFXCL</myns:UNIQUE_KEY>
+        <myns:NAME>Chicoutimi</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>022D06</myns:NTS50>
+        <myns:LAT>482600</myns:LAT>
+        <myns:LONG>710400</myns:LONG>
+        <myns:SGC_CODE>2494050</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1590735.000000,-185404.328125 1590735.000000,-185404.328125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1590735.000000,-185404.328125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>411</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCCOT</myns:UNIQUE_KEY>
+        <myns:NAME>Cornwall</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031G02</myns:NTS50>
+        <myns:LAT>450200</myns:LAT>
+        <myns:LONG>744400</myns:LONG>
+        <myns:SGC_CODE>3501012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1485457.250000,-311546.000000 1485457.250000,-311546.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1485457.250000,-311546.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>412</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBUUF</myns:UNIQUE_KEY>
+        <myns:NAME>Kingston</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031C01</myns:NTS50>
+        <myns:LAT>441400</myns:LAT>
+        <myns:LONG>763000</myns:LONG>
+        <myns:SGC_CODE>3510011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1415516.500000,-341572.437500 1415516.500000,-341572.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1415516.500000,-341572.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>413</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEDAN</myns:UNIQUE_KEY>
+        <myns:NAME>Belleville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031C03</myns:NTS50>
+        <myns:LAT>441000</myns:LAT>
+        <myns:LONG>772300</myns:LONG>
+        <myns:SGC_CODE>3512008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1339317.000000,-344369.531250 1339317.000000,-344369.531250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1339317.000000,-344369.531250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>414</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGEJ</myns:UNIQUE_KEY>
+        <myns:NAME>Peterborough</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031D08</myns:NTS50>
+        <myns:LAT>441800</myns:LAT>
+        <myns:LONG>781900</myns:LONG>
+        <myns:SGC_CODE>3515014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1313640.125000,-495131.656250 1313640.125000,-495131.656250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1313640.125000,-495131.656250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>415</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEDBA</myns:UNIQUE_KEY>
+        <myns:NAME>Niagara Falls</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030M03</myns:NTS50>
+        <myns:LAT>430600</myns:LAT>
+        <myns:LONG>790400</myns:LONG>
+        <myns:SGC_CODE>3526043</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1305243.750000,-510165.375000 1305243.750000,-510165.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1305243.750000,-510165.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>416</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDOAX</myns:UNIQUE_KEY>
+        <myns:NAME>Welland</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030L14</myns:NTS50>
+        <myns:LAT>425900</myns:LAT>
+        <myns:LONG>791500</myns:LONG>
+        <myns:SGC_CODE>3526032</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1208702.375000,-472014.812500 1208702.375000,-472014.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1208702.375000,-472014.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>417</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBKKK</myns:UNIQUE_KEY>
+        <myns:NAME>Guelph</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040P09</myns:NTS50>
+        <myns:LAT>433300</myns:LAT>
+        <myns:LONG>801500</myns:LONG>
+        <myns:SGC_CODE>3523008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1215708.000000,-514284.843750 1215708.000000,-514284.843750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1215708.000000,-514284.843750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>418</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FALJI</myns:UNIQUE_KEY>
+        <myns:NAME>Brantford</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040P01</myns:NTS50>
+        <myns:LAT>430800</myns:LAT>
+        <myns:LONG>801600</myns:LONG>
+        <myns:SGC_CODE>3529006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1182171.625000,-524349.250000 1182171.625000,-524349.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1182171.625000,-524349.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>419</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDFDY</myns:UNIQUE_KEY>
+        <myns:NAME>Woodstock</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040P02</myns:NTS50>
+        <myns:LAT>430800</myns:LAT>
+        <myns:LONG>804500</myns:LONG>
+        <myns:SGC_CODE>3532042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1153428.125000,-503385.312500 1153428.125000,-503385.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1153428.125000,-503385.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>420</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCTBX</myns:UNIQUE_KEY>
+        <myns:NAME>Stratford</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040P07</myns:NTS50>
+        <myns:LAT>432200</myns:LAT>
+        <myns:LONG>805700</myns:LONG>
+        <myns:SGC_CODE>3531011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1152978.375000,-572302.875000 1152978.375000,-572302.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1152978.375000,-572302.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>421</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDTCR</myns:UNIQUE_KEY>
+        <myns:NAME>St. Thomas</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040I14</myns:NTS50>
+        <myns:LAT>424700</myns:LAT>
+        <myns:LONG>811200</myns:LONG>
+        <myns:SGC_CODE>3534021</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1075387.750000,-632403.625000 1075387.750000,-632403.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1075387.750000,-632403.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>422</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAQDA</myns:UNIQUE_KEY>
+        <myns:NAME>Chatham</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040J08</myns:NTS50>
+        <myns:LAT>422400</myns:LAT>
+        <myns:LONG>821100</myns:LONG>
+        <myns:SGC_CODE>3536042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1243695.000000,-339155.718750 1243695.000000,-339155.718750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1243695.000000,-339155.718750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>423</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDMLQ</myns:UNIQUE_KEY>
+        <myns:NAME>Orillia</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031D11</myns:NTS50>
+        <myns:LAT>443700</myns:LAT>
+        <myns:LONG>792500</myns:LONG>
+        <myns:SGC_CODE>3543052</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1075479.500000,-159687.328125 1075479.500000,-159687.328125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1075479.500000,-159687.328125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>424</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCTOV</myns:UNIQUE_KEY>
+        <myns:NAME>Sudbury</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041I07</myns:NTS50>
+        <myns:LAT>463000</myns:LAT>
+        <myns:LONG>810000</myns:LONG>
+        <myns:SGC_CODE>3553007</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1195688.250000,-151212.609375 1195688.250000,-151212.609375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1195688.250000,-151212.609375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>425</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCFUU</myns:UNIQUE_KEY>
+        <myns:NAME>North Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031L06</myns:NTS50>
+        <myns:LAT>461900</myns:LAT>
+        <myns:LONG>792800</myns:LONG>
+        <myns:SGC_CODE>3548044</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1228427.250000,-367510.750000 1228427.250000,-367510.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1228427.250000,-367510.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>426</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAFFD</myns:UNIQUE_KEY>
+        <myns:NAME>Barrie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031D05</myns:NTS50>
+        <myns:LAT>442400</myns:LAT>
+        <myns:LONG>794000</myns:LONG>
+        <myns:SGC_CODE>3543042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1049159.250000,-573174.875000 1049159.250000,-573174.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1049159.250000,-573174.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>427</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEARV</myns:UNIQUE_KEY>
+        <myns:NAME>Sarnia</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040J16</myns:NTS50>
+        <myns:LAT>425800</myns:LAT>
+        <myns:LONG>822300</myns:LONG>
+        <myns:SGC_CODE>3538030</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1003684.500000,51500.613281 1003684.500000,51500.613281</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1003684.500000,51500.613281</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>428</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCWMG</myns:UNIQUE_KEY>
+        <myns:NAME>Timmins</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042A06</myns:NTS50>
+        <myns:LAT>482800</myns:LAT>
+        <myns:LONG>812000</myns:LONG>
+        <myns:SGC_CODE>3556027</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>818651.625000,-204229.296875 818651.625000,-204229.296875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>818651.625000,-204229.296875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>429</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDZCP</myns:UNIQUE_KEY>
+        <myns:NAME>Sault Ste. Marie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041K09</myns:NTS50>
+        <myns:LAT>463100</myns:LAT>
+        <myns:LONG>842000</myns:LONG>
+        <myns:SGC_CODE>3557061</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-353897.093750,107564.750000 -353897.093750,107564.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-353897.093750,107564.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>430</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GADMZ</myns:UNIQUE_KEY>
+        <myns:NAME>Brandon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062G13</myns:NTS50>
+        <myns:LAT>495049</myns:LAT>
+        <myns:LONG>995708</myns:LONG>
+        <myns:SGC_CODE>4607062</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-742387.562500,220949.890625 -742387.562500,220949.890625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-742387.562500,220949.890625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>431</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HALTS</myns:UNIQUE_KEY>
+        <myns:NAME>Moose Jaw</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072I05</myns:NTS50>
+        <myns:LAT>502400</myns:LAT>
+        <myns:LONG>1053200</myns:LONG>
+        <myns:SGC_CODE>4707039</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-702272.250000,523625.062500 -702272.250000,523625.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-702272.250000,523625.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>432</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAPNV</myns:UNIQUE_KEY>
+        <myns:NAME>Prince Albert</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073H04</myns:NTS50>
+        <myns:LAT>531200</myns:LAT>
+        <myns:LONG>1054600</myns:LONG>
+        <myns:SGC_CODE>4715066</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1252385.875000,551463.062500 -1252385.875000,551463.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1252385.875000,551463.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>433</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAEJS</myns:UNIQUE_KEY>
+        <myns:NAME>Red Deer</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083A05</myns:NTS50>
+        <myns:LAT>521600</myns:LAT>
+        <myns:LONG>1134800</myns:LONG>
+        <myns:SGC_CODE>4808011</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1106191.250000,257402.203125 -1106191.250000,257402.203125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1106191.250000,257402.203125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>434</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAIUC</myns:UNIQUE_KEY>
+        <myns:NAME>Medicine Hat</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>072L02</myns:NTS50>
+        <myns:LAT>500300</myns:LAT>
+        <myns:LONG>1104000</myns:LONG>
+        <myns:SGC_CODE>4801006</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1264299.625000,257523.796875 -1264299.625000,257523.796875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1264299.625000,257523.796875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>435</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IADGP</myns:UNIQUE_KEY>
+        <myns:NAME>Lethbridge</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082H10</myns:NTS50>
+        <myns:LAT>494200</myns:LAT>
+        <myns:LONG>1124900</myns:LONG>
+        <myns:SGC_CODE>4802012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1453903.000000,955987.625000 -1453903.000000,955987.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1453903.000000,955987.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>436</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAHMM</myns:UNIQUE_KEY>
+        <myns:NAME>Grande Prairie</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083M02</myns:NTS50>
+        <myns:LAT>551000</myns:LAT>
+        <myns:LONG>1184800</myns:LONG>
+        <myns:SGC_CODE>4819012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-969655.562500,972368.625000 -969655.562500,972368.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-969655.562500,972368.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>437</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAFFI</myns:UNIQUE_KEY>
+        <myns:NAME>Fort McMurray</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>074D11</myns:NTS50>
+        <myns:LAT>564400</myns:LAT>
+        <myns:LONG>1112300</myns:LONG>
+        <myns:SGC_CODE>4816048</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1905895.750000,429360.156250 -1905895.750000,429360.156250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1905895.750000,429360.156250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>438</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCVCB</myns:UNIQUE_KEY>
+        <myns:NAME>Chilliwack</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092H04</myns:NTS50>
+        <myns:LAT>491000</myns:LAT>
+        <myns:LONG>1215700</myns:LONG>
+        <myns:SGC_CODE>0</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1734867.000000,396292.812500 -1734867.000000,396292.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1734867.000000,396292.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>439</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JCVCH</myns:UNIQUE_KEY>
+        <myns:NAME>Penticton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082E05</myns:NTS50>
+        <myns:LAT>493000</myns:LAT>
+        <myns:LONG>1193500</myns:LONG>
+        <myns:SGC_CODE>5907041</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1734156.375000,535460.875000 -1734156.375000,535460.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1734156.375000,535460.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>440</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAFNW</myns:UNIQUE_KEY>
+        <myns:NAME>Kamloops</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092I09</myns:NTS50>
+        <myns:LAT>504000</myns:LAT>
+        <myns:LONG>1201900</myns:LONG>
+        <myns:SGC_CODE>5933042</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2039745.125000,496096.593750 -2039745.125000,496096.593750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2039745.125000,496096.593750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>441</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAQAL</myns:UNIQUE_KEY>
+        <myns:NAME>Nanaimo</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092G04</myns:NTS50>
+        <myns:LAT>491000</myns:LAT>
+        <myns:LONG>1235600</myns:LONG>
+        <myns:SGC_CODE>5921007</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1705492.500000,434917.437500 -1705492.500000,434917.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1705492.500000,434917.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>442</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAFUV</myns:UNIQUE_KEY>
+        <myns:NAME>Kelowna</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082E14</myns:NTS50>
+        <myns:LAT>495300</myns:LAT>
+        <myns:LONG>1192900</myns:LONG>
+        <myns:SGC_CODE>5935010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1739476.750000,930125.062500 -1739476.750000,930125.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1739476.750000,930125.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>443</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBLVS</myns:UNIQUE_KEY>
+        <myns:NAME>Prince George</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>093G15</myns:NTS50>
+        <myns:LAT>535500</myns:LAT>
+        <myns:LONG>1224500</myns:LONG>
+        <myns:SGC_CODE>5953023</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>420685.093750,-42099.390625 420685.093750,-42099.390625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>420685.093750,-42099.390625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>444</myns:POPPLACE_>
+        <myns:POPPLACE_I>5</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCWFX</myns:UNIQUE_KEY>
+        <myns:NAME>Thunder Bay</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052A06</myns:NTS50>
+        <myns:LAT>482400</myns:LAT>
+        <myns:LONG>891900</myns:LONG>
+        <myns:SGC_CODE>3558004</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-784089.000000,421583.062500 -784089.000000,421583.062500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-784089.000000,421583.062500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>445</myns:POPPLACE_>
+        <myns:POPPLACE_I>5</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAHJJ</myns:UNIQUE_KEY>
+        <myns:NAME>Saskatoon</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>073B02</myns:NTS50>
+        <myns:LAT>520700</myns:LAT>
+        <myns:LONG>1063800</myns:LONG>
+        <myns:SGC_CODE>4711066</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1012659.500000,-659435.812500 1012659.500000,-659435.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1012659.500000,-659435.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>446</myns:POPPLACE_>
+        <myns:POPPLACE_I>5</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDEGT</myns:UNIQUE_KEY>
+        <myns:NAME>Windsor</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040J06</myns:NTS50>
+        <myns:LAT>421800</myns:LAT>
+        <myns:LONG>830100</myns:LONG>
+        <myns:SGC_CODE>3537039</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1192185.750000,-489447.250000 1192185.750000,-489447.250000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1192185.750000,-489447.250000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>447</myns:POPPLACE_>
+        <myns:POPPLACE_I>5</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEBWC</myns:UNIQUE_KEY>
+        <myns:NAME>Kitchener</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040P08</myns:NTS50>
+        <myns:LAT>432700</myns:LAT>
+        <myns:LONG>802900</myns:LONG>
+        <myns:SGC_CODE>3530013</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1297745.875000,-491606.718750 1297745.875000,-491606.718750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1297745.875000,-491606.718750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>448</myns:POPPLACE_>
+        <myns:POPPLACE_I>5</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDJFN</myns:UNIQUE_KEY>
+        <myns:NAME>St. Catharines</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030M03</myns:NTS50>
+        <myns:LAT>431000</myns:LAT>
+        <myns:LONG>791500</myns:LONG>
+        <myns:SGC_CODE>3526053</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1309328.000000,-404080.937500 1309328.000000,-404080.937500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1309328.000000,-404080.937500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>449</myns:POPPLACE_>
+        <myns:POPPLACE_I>5</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDMOP</myns:UNIQUE_KEY>
+        <myns:NAME>Oshawa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030M15</myns:NTS50>
+        <myns:LAT>435400</myns:LAT>
+        <myns:LONG>785100</myns:LONG>
+        <myns:SGC_CODE>3518013</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1658632.250000,-103211.906250 1658632.250000,-103211.906250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1658632.250000,-103211.906250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>450</myns:POPPLACE_>
+        <myns:POPPLACE_I>6</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHHUN</myns:UNIQUE_KEY>
+        <myns:NAME>Montreal</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031H12</myns:NTS50>
+        <myns:LAT>453000</myns:LAT>
+        <myns:LONG>733600</myns:LONG>
+        <myns:SGC_CODE>2466025</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1244680.375000,-496792.031250 1244680.375000,-496792.031250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1244680.375000,-496792.031250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>451</myns:POPPLACE_>
+        <myns:POPPLACE_I>6</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBLJL</myns:UNIQUE_KEY>
+        <myns:NAME>Hamilton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030M04</myns:NTS50>
+        <myns:LAT>431500</myns:LAT>
+        <myns:LONG>795100</myns:LONG>
+        <myns:SGC_CODE>3525018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1139664.625000,-551350.625000 1139664.625000,-551350.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1139664.625000,-551350.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>452</myns:POPPLACE_>
+        <myns:POPPLACE_I>6</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCAEN</myns:UNIQUE_KEY>
+        <myns:NAME>London</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>040I14</myns:NTS50>
+        <myns:LAT>425900</myns:LAT>
+        <myns:LONG>811400</myns:LONG>
+        <myns:SGC_CODE>3539036</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1260880.875000,-447407.281250 1260880.875000,-447407.281250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1260880.875000,-447407.281250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>453</myns:POPPLACE_>
+        <myns:POPPLACE_I>6</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FALIF</myns:UNIQUE_KEY>
+        <myns:NAME>Brampton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030M12</myns:NTS50>
+        <myns:LAT>434100</myns:LAT>
+        <myns:LONG>794600</myns:LONG>
+        <myns:SGC_CODE>3521010</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1306228.750000,426995.125000 -1306228.750000,426995.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1306228.750000,426995.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>454</myns:POPPLACE_>
+        <myns:POPPLACE_I>6</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IAKID</myns:UNIQUE_KEY>
+        <myns:NAME>Calgary</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>082O01</myns:NTS50>
+        <myns:LAT>510300</myns:LAT>
+        <myns:LONG>1140500</myns:LONG>
+        <myns:SGC_CODE>4806016</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1980523.000000,475299.437500 -1980523.000000,475299.437500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1980523.000000,475299.437500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>455</myns:POPPLACE_>
+        <myns:POPPLACE_I>6</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBRIK</myns:UNIQUE_KEY>
+        <myns:NAME>Vancouver</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092G03</myns:NTS50>
+        <myns:LAT>491500</myns:LAT>
+        <myns:LONG>1230700</myns:LONG>
+        <myns:SGC_CODE>5915022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-2036923.625000,402635.687500 -2036923.625000,402635.687500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-2036923.625000,402635.687500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>456</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBOBQ</myns:UNIQUE_KEY>
+        <myns:NAME>Victoria</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092B06</myns:NTS50>
+        <myns:LAT>482600</myns:LAT>
+        <myns:LONG>1232200</myns:LONG>
+        <myns:SGC_CODE>5917034</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>5</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-678631.875000,215507.781250 -678631.875000,215507.781250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-678631.875000,215507.781250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>457</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>HAIMP</myns:UNIQUE_KEY>
+        <myns:NAME>Regina</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>47</myns:REG_CODE>
+        <myns:NTS50>072I07</myns:NTS50>
+        <myns:LAT>502700</myns:LAT>
+        <myns:LONG>1043700</myns:LONG>
+        <myns:SGC_CODE>4706027</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1273962.500000,-442015.468750 1273962.500000,-442015.468750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1273962.500000,-442015.468750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>458</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCWYG</myns:UNIQUE_KEY>
+        <myns:NAME>Toronto</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>030M11</myns:NTS50>
+        <myns:LAT>433900</myns:LAT>
+        <myns:LONG>792300</myns:LONG>
+        <myns:SGC_CODE>3520004</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1509069.000000,-172683.109375 1509069.000000,-172683.109375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1509069.000000,-172683.109375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>459</myns:POPPLACE_>
+        <myns:POPPLACE_I>95</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEOLW</myns:UNIQUE_KEY>
+        <myns:NAME>Ottawa</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031G05</myns:NTS50>
+        <myns:LAT>452500</myns:LAT>
+        <myns:LONG>754200</myns:LONG>
+        <myns:SGC_CODE>3506014</myns:SGC_CODE>
+        <myns:CAPITAL>1</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1777534.750000,98693.125000 1777534.750000,98693.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1777534.750000,98693.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>460</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EHTWR</myns:UNIQUE_KEY>
+        <myns:NAME>Quebec</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021L14</myns:NTS50>
+        <myns:LAT>464900</myns:LAT>
+        <myns:LONG>711400</myns:LONG>
+        <myns:SGC_CODE>2423025</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2149669.250000,145278.390625 2149669.250000,145278.390625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2149669.250000,145278.390625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>461</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAFMJ</myns:UNIQUE_KEY>
+        <myns:NAME>Fredericton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021G15</myns:NTS50>
+        <myns:LAT>455800</myns:LAT>
+        <myns:LONG>663900</myns:LONG>
+        <myns:SGC_CODE>1310032</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2378567.250000,305099.781250 2378567.250000,305099.781250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2378567.250000,305099.781250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>462</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>BAARG</myns:UNIQUE_KEY>
+        <myns:NAME>Charlottetown</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>11</myns:REG_CODE>
+        <myns:NTS50>011L03</myns:NTS50>
+        <myns:LAT>461425</myns:LAT>
+        <myns:LONG>630805</myns:LONG>
+        <myns:SGC_CODE>1102075</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2431943.750000,118985.382812 2431943.750000,118985.382812</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2431943.750000,118985.382812</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>463</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>CAPHL</myns:UNIQUE_KEY>
+        <myns:NAME>Halifax</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>12</myns:REG_CODE>
+        <myns:NTS50>011D12</myns:NTS50>
+        <myns:LAT>443900</myns:LAT>
+        <myns:LONG>633600</myns:LONG>
+        <myns:SGC_CODE>1209021</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2961766.250000,864265.625000 2961766.250000,864265.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2961766.250000,864265.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>464</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>ABEFS</myns:UNIQUE_KEY>
+        <myns:NAME>St. John&#39;s</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>001N10</myns:NTS50>
+        <myns:LAT>473400</myns:LAT>
+        <myns:LONG>524400</myns:LONG>
+        <myns:SGC_CODE>1001519</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-160877.171875,103514.203125 -160877.171875,103514.203125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-160877.171875,103514.203125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>465</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBEIN</myns:UNIQUE_KEY>
+        <myns:NAME>Winnipeg</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062H14</myns:NTS50>
+        <myns:LAT>495304</myns:LAT>
+        <myns:LONG>970847</myns:LONG>
+        <myns:SGC_CODE>4611040</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1195485.125000,677676.500000 -1195485.125000,677676.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1195485.125000,677676.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>466</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>IACMP</myns:UNIQUE_KEY>
+        <myns:NAME>Edmonton</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>48</myns:REG_CODE>
+        <myns:NTS50>083H11</myns:NTS50>
+        <myns:LAT>533300</myns:LAT>
+        <myns:LONG>1132800</myns:LONG>
+        <myns:SGC_CODE>4811061</myns:SGC_CODE>
+        <myns:CAPITAL>2</myns:CAPITAL>
+        <myns:POP_RANGE>6</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1991310.375000,1937023.000000 -1991310.375000,1937023.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1991310.375000,1937023.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>467</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>KAHFT</myns:UNIQUE_KEY>
+        <myns:NAME>Whitehorse</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>60</myns:REG_CODE>
+        <myns:NTS50>105D11</myns:NTS50>
+        <myns:LAT>604300</myns:LAT>
+        <myns:LONG>1350300</myns:LONG>
+        <myns:SGC_CODE>6001009</myns:SGC_CODE>
+        <myns:CAPITAL>3</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-961166.562500,1622484.500000 -961166.562500,1622484.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-961166.562500,1622484.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>468</myns:POPPLACE_>
+        <myns:POPPLACE_I>96</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LBAMG</myns:UNIQUE_KEY>
+        <myns:NAME>Yellowknife</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>085J08</myns:NTS50>
+        <myns:LAT>622720</myns:LAT>
+        <myns:LONG>1142100</myns:LONG>
+        <myns:SGC_CODE>6106023</myns:SGC_CODE>
+        <myns:CAPITAL>3</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2178213.500000,387000.812500 2178213.500000,387000.812500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2178213.500000,387000.812500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>469</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DAZVA</myns:UNIQUE_KEY>
+        <myns:NAME>Caraquet</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021P15</myns:NTS50>
+        <myns:LAT>474700</myns:LAT>
+        <myns:LONG>645700</myns:LONG>
+        <myns:SGC_CODE>1315028</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2179239.500000,294844.187500 2179239.500000,294844.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2179239.500000,294844.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>470</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>DBEDJ</myns:UNIQUE_KEY>
+        <myns:NAME>Miramichi</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>13</myns:REG_CODE>
+        <myns:NTS50>021P03</myns:NTS50>
+        <myns:LAT>470015</myns:LAT>
+        <myns:LONG>652800</myns:LONG>
+        <myns:SGC_CODE>1309050</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2374715.250000,872702.187500 2374715.250000,872702.187500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2374715.250000,872702.187500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>471</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EIGSD</myns:UNIQUE_KEY>
+        <myns:NAME>Tete-a-la-Baleine</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>012J11</myns:NTS50>
+        <myns:LAT>504200</myns:LAT>
+        <myns:LONG>591900</myns:LONG>
+        <myns:SGC_CODE>2498015</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1824099.125000,206982.125000 1824099.125000,206982.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1824099.125000,206982.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>472</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EQBIX</myns:UNIQUE_KEY>
+        <myns:NAME>La Malbaie--Pointe-au-Pic</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>021M09</myns:NTS50>
+        <myns:LAT>473900</myns:LAT>
+        <myns:LONG>700900</myns:LONG>
+        <myns:SGC_CODE>2415012</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>421679.312500,164899.093750 421679.312500,164899.093750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>421679.312500,164899.093750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>473</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FADRV</myns:UNIQUE_KEY>
+        <myns:NAME>Armstrong</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052I06</myns:NTS50>
+        <myns:LAT>501800</myns:LAT>
+        <myns:LONG>890200</myns:LONG>
+        <myns:SGC_CODE>3558090</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>246846.015625,-19847.470703 246846.015625,-19847.470703</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>246846.015625,-19847.470703</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>474</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FEFQV</myns:UNIQUE_KEY>
+        <myns:NAME>Atikokan</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>052B13</myns:NTS50>
+        <myns:LAT>484500</myns:LAT>
+        <myns:LONG>913700</myns:LONG>
+        <myns:SGC_CODE>3559001</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1352621.750000,-257314.406250 1352621.750000,-257314.406250</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1352621.750000,-257314.406250</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>475</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDGEF</myns:UNIQUE_KEY>
+        <myns:NAME>Bancroft</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031F04</myns:NTS50>
+        <myns:LAT>450300</myns:LAT>
+        <myns:LONG>775100</myns:LONG>
+        <myns:SGC_CODE>3512062</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>863268.625000,-48685.980469 863268.625000,-48685.980469</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>863268.625000,-48685.980469</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>476</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FAPXO</myns:UNIQUE_KEY>
+        <myns:NAME>Chapleau</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041O14</myns:NTS50>
+        <myns:LAT>475000</myns:LAT>
+        <myns:LONG>832400</myns:LONG>
+        <myns:SGC_CODE>3599999</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>992140.625000,-39673.945312 992140.625000,-39673.945312</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>992140.625000,-39673.945312</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>477</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBIBH</myns:UNIQUE_KEY>
+        <myns:NAME>Gogama</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>041P12</myns:NTS50>
+        <myns:LAT>474000</myns:LAT>
+        <myns:LONG>814300</myns:LONG>
+        <myns:SGC_CODE>3552093</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1579724.625000,-124387.046875 1579724.625000,-124387.046875</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1579724.625000,-124387.046875</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>478</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FBMKO</myns:UNIQUE_KEY>
+        <myns:NAME>Hawkesbury</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>031G10</myns:NTS50>
+        <myns:LAT>453600</myns:LAT>
+        <myns:LONG>743700</myns:LONG>
+        <myns:SGC_CODE>3502008</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>666806.000000,63513.484375 666806.000000,63513.484375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>666806.000000,63513.484375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>479</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FCDVI</myns:UNIQUE_KEY>
+        <myns:NAME>Manitouwadge</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042F04</myns:NTS50>
+        <myns:LAT>490700</myns:LAT>
+        <myns:LONG>855000</myns:LONG>
+        <myns:SGC_CODE>3599999</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>587500.187500,169855.390625 587500.187500,169855.390625</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>587500.187500,169855.390625</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>480</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>FDLNT</myns:UNIQUE_KEY>
+        <myns:NAME>Nakina</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>35</myns:REG_CODE>
+        <myns:NTS50>042L02</myns:NTS50>
+        <myns:LAT>501000</myns:LAT>
+        <myns:LONG>864200</myns:LONG>
+        <myns:SGC_CODE>3558072</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>47679.699219,1069706.375000 47679.699219,1069706.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>47679.699219,1069706.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>481</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAFAB</myns:UNIQUE_KEY>
+        <myns:NAME>Churchill</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>054L16</myns:NTS50>
+        <myns:LAT>584651</myns:LAT>
+        <myns:LONG>941113</myns:LONG>
+        <myns:SGC_CODE>4623056</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>15236.353516,805203.312500 15236.353516,805203.312500</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>15236.353516,805203.312500</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>482</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAJER</myns:UNIQUE_KEY>
+        <myns:NAME>Gillam</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>054D07</myns:NTS50>
+        <myns:LAT>562050</myns:LAT>
+        <myns:LONG>944228</myns:LONG>
+        <myns:SGC_CODE>4623022</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-91105.617188,175262.578125 -91105.617188,175262.578125</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-91105.617188,175262.578125</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>483</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAVMD</myns:UNIQUE_KEY>
+        <myns:NAME>Pine Falls</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062I09</myns:NTS50>
+        <myns:LAT>503359</myns:LAT>
+        <myns:LONG>961303</myns:LONG>
+        <myns:SGC_CODE>4601094</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-164457.343750,7469.030273 -164457.343750,7469.030273</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-164457.343750,7469.030273</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>484</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GAHTD</myns:UNIQUE_KEY>
+        <myns:NAME>Emerson</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062H03</myns:NTS50>
+        <myns:LAT>490025</myns:LAT>
+        <myns:LONG>971253</myns:LONG>
+        <myns:SGC_CODE>4603033</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1620281.250000,305583.125000 -1620281.250000,305583.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1620281.250000,305583.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>485</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JBNDK</myns:UNIQUE_KEY>
+        <myns:NAME>Trail</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>082F04</myns:NTS50>
+        <myns:LAT>490600</myns:LAT>
+        <myns:LONG>1174200</myns:LONG>
+        <myns:SGC_CODE>5905014</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1968311.000000,468153.343750 -1968311.000000,468153.343750</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1968311.000000,468153.343750</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>486</myns:POPPLACE_>
+        <myns:POPPLACE_I>4</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>JAZMR</myns:UNIQUE_KEY>
+        <myns:NAME>New Westminster</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>59</myns:REG_CODE>
+        <myns:NTS50>092G02</myns:NTS50>
+        <myns:LAT>491300</myns:LAT>
+        <myns:LONG>1225500</myns:LONG>
+        <myns:SGC_CODE>5915029</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>4</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1208259.875000,1753350.500000 1208259.875000,1753350.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1208259.875000,1753350.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>487</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCAMG</myns:UNIQUE_KEY>
+        <myns:NAME>Kimmirut</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>025K13</myns:NTS50>
+        <myns:LAT>625048</myns:LAT>
+        <myns:LONG>695219</myns:LONG>
+        <myns:SGC_CODE>6104005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-809578.875000,2179262.000000 -809578.875000,2179262.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-809578.875000,2179262.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>488</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCAME</myns:UNIQUE_KEY>
+        <myns:NAME>Kugluktuk</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>086O14</myns:NTS50>
+        <myns:LAT>674936</myns:LAT>
+        <myns:LONG>1150536</myns:LONG>
+        <myns:SGC_CODE>6108059</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1347829.625000,2068683.625000 -1347829.625000,2068683.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1347829.625000,2068683.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>489</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCAMF</myns:UNIQUE_KEY>
+        <myns:NAME>Tulita</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>096C13</myns:NTS50>
+        <myns:LAT>645406</myns:LAT>
+        <myns:LONG>1253441</myns:LONG>
+        <myns:SGC_CODE>6107005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>1524156.375000,-144374.984375 1524156.375000,-144374.984375</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>1524156.375000,-144374.984375</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>490</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EFRSH</myns:UNIQUE_KEY>
+        <myns:NAME>Buckingham</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>031G11</myns:NTS50>
+        <myns:LAT>453500</myns:LAT>
+        <myns:LONG>752500</myns:LONG>
+        <myns:SGC_CODE>2481005</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>942491.875000,1340999.000000 942491.875000,1340999.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>942491.875000,1340999.000000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>491</myns:POPPLACE_>
+        <myns:POPPLACE_I>2</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>EPWSV</myns:UNIQUE_KEY>
+        <myns:NAME>Puvirnituq</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>24</myns:REG_CODE>
+        <myns:NTS50>035C03</myns:NTS50>
+        <myns:LAT>600200</myns:LAT>
+        <myns:LONG>771700</myns:LONG>
+        <myns:SGC_CODE>2499120</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1063374.000000,1738534.375000 -1063374.000000,1738534.375000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1063374.000000,1738534.375000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>492</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCAMH</myns:UNIQUE_KEY>
+        <myns:NAME>Wha Ti</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>085N03</myns:NTS50>
+        <myns:LAT>630838</myns:LAT>
+        <myns:LONG>1171622</myns:LONG>
+        <myns:SGC_CODE>6106034</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2565337.000000,761705.125000 2565337.000000,761705.125000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2565337.000000,761705.125000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>493</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAEOU</myns:UNIQUE_KEY>
+        <myns:NAME>Corner Brook</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>012A13</myns:NTS50>
+        <myns:LAT>485800</myns:LAT>
+        <myns:LONG>575700</myns:LONG>
+        <myns:SGC_CODE>1005018</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>2548271.250000,699702.625000 2548271.250000,699702.625000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>2548271.250000,699702.625000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>494</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>AAXZD</myns:UNIQUE_KEY>
+        <myns:NAME>Stephenville</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>10</myns:REG_CODE>
+        <myns:NTS50>012B10</myns:NTS50>
+        <myns:LAT>483300</myns:LAT>
+        <myns:LONG>583500</myns:LONG>
+        <myns:SGC_CODE>1004019</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>3</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>476326.531250,3798856.750000 476326.531250,3798856.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>476326.531250,3798856.750000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>495</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LAAWC</myns:UNIQUE_KEY>
+        <myns:NAME>Alert</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>120E00</myns:NTS50>
+        <myns:LAT>823000</myns:LAT>
+        <myns:LONG>622200</myns:LONG>
+        <myns:SGC_CODE>6104030</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>1</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-1250633.750000,2049926.500000 -1250633.750000,2049926.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-1250633.750000,2049926.500000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>496</myns:POPPLACE_>
+        <myns:POPPLACE_I>1</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>LCACC</myns:UNIQUE_KEY>
+        <myns:NAME>Deline</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>61</myns:REG_CODE>
+        <myns:NTS50>096G03</myns:NTS50>
+        <myns:LAT>651120</myns:LAT>
+        <myns:LONG>1232515</myns:LONG>
+        <myns:SGC_CODE>6107003</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+    <gml:featureMember>
+      <myns:popplace>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:42304">
+        		<gml:coordinates>-338500.343750,307585.875000 -338500.343750,307585.875000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <myns:msGeometry>
+        <gml:Point srsName="EPSG:42304">
+          <gml:coordinates>-338500.343750,307585.875000</gml:coordinates>
+        </gml:Point>
+        </myns:msGeometry>
+        <myns:AREA>0.000</myns:AREA>
+        <myns:PERIMETER>0.000</myns:PERIMETER>
+        <myns:POPPLACE_>497</myns:POPPLACE_>
+        <myns:POPPLACE_I>3</myns:POPPLACE_I>
+        <myns:UNIQUE_KEY>GBEIU</myns:UNIQUE_KEY>
+        <myns:NAME>Winnipegosis</myns:NAME>
+        <myns:NAME_E></myns:NAME_E>
+        <myns:NAME_F></myns:NAME_F>
+        <myns:REG_CODE>46</myns:REG_CODE>
+        <myns:NTS50>062O12</myns:NTS50>
+        <myns:LAT>513855</myns:LAT>
+        <myns:LONG>995533</myns:LONG>
+        <myns:SGC_CODE>4617073</myns:SGC_CODE>
+        <myns:CAPITAL>0</myns:CAPITAL>
+        <myns:POP_RANGE>2</myns:POP_RANGE>
+      </myns:popplace>
+    </gml:featureMember>
+</wfs:FeatureCollection>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetFeature.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<wfs:WFS_Capabilities version="1.1.0" updateSequence="1453" xmlns="http://www.opengis.net/wfs" xmlns:tnt="http://www.microimages.com/ogc/extensions" xmlns:ows="http://www.opengis.net/ows" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:MII_GVwhs="http://216.229.5.245/tntserver/MII_GVwhs" xmlns:MII_PVLN="http://216.229.5.245/tntserver/MII_PVLN" xmlns:MII_TNTCB="http://216.229.5.245/tntserver/MII_TNTCB" xmlns:MII_WPpid="http://216.229.5.245/tntserver/MII_WPpid" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd   http://www.opengis.net/ows http://schemas.opengis.net/ows/1.0.0/owsGetCapabilities.xsd">
+<ows:ServiceIdentification>
+  <ows:Title>TNTserver 2007:73 test platform</ows:Title>
+  <ows:Abstract>
+
+  </ows:Abstract>
+  <ows:Keywords>
+    <ows:Keyword>TNTserver 2007:73 Oct  5 2007</ows:Keyword>
+    <ows:Keyword>MicroImages</ows:Keyword>
+    <ows:Type>String</ows:Type>
+  </ows:Keywords>
+  <ows:ServiceType>OGC:WFS</ows:ServiceType>
+  <ows:ServiceTypeVersion>1.1.0</ows:ServiceTypeVersion>
+  <ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+  <ows:Fees>NONE</ows:Fees>
+  <ows:AccessConstraints>NONE</ows:AccessConstraints>
+</ows:ServiceIdentification>
+<ows:ServiceProvider>
+  <ows:ProviderName>MicroImages, Inc</ows:ProviderName>
+  <ows:ProviderSite xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.microimages.com/"/>
+  <ows:ServiceContact>
+    <ows:IndividualName>Steve Cowan</ows:IndividualName>
+    <ows:PositionName>Software Engineer</ows:PositionName>
+    <ows:ContactInfo>
+      <ows:Phone>
+        <ows:Voice/>
+        <ows:Facsimile>(402) 477-9559</ows:Facsimile>
+      </ows:Phone>
+      <ows:Address>
+        <ows:DeliveryPoint>XXX</ows:DeliveryPoint>
+        <ows:City>Lincoln</ows:City>
+        <ows:AdministrativeArea>NE</ows:AdministrativeArea>
+        <ows:PostalCode>68508</ows:PostalCode>
+        <ows:Country>USA</ows:Country>
+        <ows:ElectronicMailAddress>tech@microimages.com</ows:ElectronicMailAddress>
+      </ows:Address>
+      <ows:HoursOfService>
+8:00 am to 6:00 pm, US Central Time
+      </ows:HoursOfService>
+      <ows:ContactInstructions>
+
+      </ows:ContactInstructions>
+    </ows:ContactInfo>
+    <ows:Role>PointOfContact</ows:Role>
+  </ows:ServiceContact>
+</ows:ServiceProvider>
+<ows:OperationsMetadata>
+  <ows:Operation name="GetCapabilities">
+    <ows:DCP>
+      <ows:HTTP>
+        <ows:Get xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi?"/>
+        <ows:Post xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi"/>
+      </ows:HTTP>
+    </ows:DCP>
+    <ows:Parameter name="Format">
+      <ows:Value>text/xml</ows:Value>
+    </ows:Parameter>
+    <ows:Parameter name="AcceptVersions">
+      <ows:Value>1.1.0</ows:Value>
+      <ows:Value>1.0.0</ows:Value>
+    </ows:Parameter>
+    <ows:Parameter name="AcceptFormats">
+      <ows:Value>text/xml</ows:Value>
+    </ows:Parameter>
+    <ows:Parameter name="Sections">
+      <ows:Value>ServiceIdentification</ows:Value>
+      <ows:Value>ServiceProvider</ows:Value>
+      <ows:Value>OperationsMetadata</ows:Value>
+      <ows:Value>FeatureTypeList</ows:Value>
+      <ows:Value>ServesGMLObjectTypeList</ows:Value>
+      <ows:Value>SupportsGMLObjectTypeList</ows:Value>
+      <ows:Value>Filter_Capabilities</ows:Value>
+    </ows:Parameter>
+  </ows:Operation>
+  <ows:Operation name="DescribeFeatureType">
+    <ows:DCP>
+      <ows:HTTP>
+        <ows:Get xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi?"/>
+        <ows:Post xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi"/>
+      </ows:HTTP>
+    </ows:DCP>
+    <ows:Parameter name="outputFormat">
+      <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
+    </ows:Parameter>
+  </ows:Operation>
+  <ows:Operation name="GetFeature">
+    <ows:DCP>
+      <ows:HTTP>
+        <ows:Get xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi?"/>
+        <ows:Post xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi"/>
+      </ows:HTTP>
+    </ows:DCP>
+    <ows:Parameter name="resultType">
+      <ows:Value>results</ows:Value>
+      <ows:Value>hits</ows:Value>
+    </ows:Parameter>
+    <ows:Parameter name="outputFormat">
+      <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
+    </ows:Parameter>
+  </ows:Operation>
+  <ows:Operation name="GetGMLObject">
+    <ows:DCP>
+      <ows:HTTP>
+        <ows:Get xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi?"/>
+        <ows:Post xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://testatlas73.microimages.com/tntgateway/tntgateway.cgi"/>
+      </ows:HTTP>
+    </ows:DCP>
+    <ows:Parameter name="outputFormat">
+      <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
+    </ows:Parameter>
+  </ows:Operation>
+  <ows:Parameter name="srsName">
+    <ows:Value>CRS:84</ows:Value>
+  </ows:Parameter>
+  <ows:Constraint name="DefaultMaxFeatures">
+    <ows:Value>4294967295</ows:Value>
+  </ows:Constraint>
+</ows:OperationsMetadata>
+<wfs:FeatureTypeList>
+  <wfs:Operations>
+    <wfs:Operation>Query</wfs:Operation>
+  </wfs:Operations>
+  <wfs:FeatureType>
+    <wfs:Name>MII_GVwhs:World_polbndl</wfs:Name>
+    <wfs:Title>planar, merged and filtered political boundary lines</wfs:Title>
+    <wfs:DefaultSRS>CRS:84</wfs:DefaultSRS>
+        <wfs:OtherSRS>EPSG:32662</wfs:OtherSRS>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+    <ows:WGS84BoundingBox>
+      <ows:LowerCorner>-141.000000 -55.194279</ows:LowerCorner>
+      <ows:UpperCorner>162.097168 72.001640</ows:UpperCorner>
+    </ows:WGS84BoundingBox>
+  </wfs:FeatureType>
+  <wfs:FeatureType>
+    <wfs:Name>MII_TNTCB:CBSOILS</wfs:Name>
+    <wfs:Title>Crow Butte soil type polygon overlay</wfs:Title>
+    <wfs:DefaultSRS>EPSG:4008</wfs:DefaultSRS>
+        <wfs:OtherSRS>EPSG:4326</wfs:OtherSRS>
+        <wfs:OtherSRS>EPSG:4267</wfs:OtherSRS>
+        <wfs:OtherSRS>EPSG:4269</wfs:OtherSRS>
+        <wfs:OtherSRS>EPSG:4152</wfs:OtherSRS>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+    <ows:WGS84BoundingBox>
+      <ows:LowerCorner>-103.375454 42.624752</ows:LowerCorner>
+      <ows:UpperCorner>-103.249227 42.750265</ows:UpperCorner>
+    </ows:WGS84BoundingBox>
+  </wfs:FeatureType>
+</wfs:FeatureTypeList>
+<wfs:SupportsGMLObjectTypeList>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:AbstractGMLFeatureType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:PointType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:LineStringType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:PolygonType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:MultiPointType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:MultiCurveType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:MultiSurfaceType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:AbstractMetaDataType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+  <wfs:GMLObjectType>
+    <wfs:Name>gml:AbstractTopologyType</wfs:Name>
+    <wfs:OutputFormats>
+      <wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format>
+    </wfs:OutputFormats>
+  </wfs:GMLObjectType>
+</wfs:SupportsGMLObjectTypeList>
+<ogc:Filter_Capabilities>
+  <ogc:Spatial_Capabilities>
+    <ogc:GeometryOperands>
+      <ogc:GeometryOperand>gml:Point</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:Envelope</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:ArcByCenterPoint</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:CircleByCenterPoint</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:Arc</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:Circle</ogc:GeometryOperand>
+      <ogc:GeometryOperand>gml:ArcByBulge</ogc:GeometryOperand>
+    </ogc:GeometryOperands>
+    <ogc:SpatialOperators>
+      <ogc:SpatialOperator name="BBOX"/>
+      <ogc:SpatialOperator name="Disjoint"/>
+      <ogc:SpatialOperator name="Intersects"/>
+      <ogc:SpatialOperator name="Contains"/>
+      <ogc:SpatialOperator name="Overlaps"/>
+    </ogc:SpatialOperators>
+  </ogc:Spatial_Capabilities>
+  <ogc:Scalar_Capabilities>
+    <ogc:LogicalOperators/>
+    <ogc:ComparisonOperators>
+      <ogc:ComparisonOperator>LessThan</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>GreaterThan</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>LessThanEqualTo</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>GreaterThanEqualTo</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>EqualTo</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>NotEqualTo</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>Like</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>Between</ogc:ComparisonOperator>
+      <ogc:ComparisonOperator>NullCheck</ogc:ComparisonOperator>
+    </ogc:ComparisonOperators>
+    <ogc:ArithmeticOperators>
+      <ogc:SimpleArithmetic/>
+      <ogc:Functions>
+        <ogc:FunctionNames>
+          <ogc:FunctionName nArgs="1">MIN</ogc:FunctionName>
+          <ogc:FunctionName nArgs="1">MAX</ogc:FunctionName>
+          <ogc:FunctionName nArgs="1">SIN</ogc:FunctionName>
+          <ogc:FunctionName nArgs="1">COS</ogc:FunctionName>
+          <ogc:FunctionName nArgs="1">TAN</ogc:FunctionName>
+        </ogc:FunctionNames>
+      </ogc:Functions>
+    </ogc:ArithmeticOperators>
+  </ogc:Scalar_Capabilities>
+  <ogc:Id_Capabilities>
+    <ogc:EID/>
+    <ogc:FID/>
+  </ogc:Id_Capabilities>
+</ogc:Filter_Capabilities>
+</wfs:WFS_Capabilities>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-AtlasAvesGetFeature.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-AtlasAvesGetFeature.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-AtlasAvesGetFeature.xml	(revision 42196)
@@ -0,0 +1,5016 @@
+<?xml version='1.0' encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<wfs:FeatureCollection
+   xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
+   xmlns:wfs="http://www.opengis.net/wfs"
+   xmlns:gml="http://www.opengis.net/gml"
+   xmlns:ogc="http://www.opengis.net/ogc"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengeospatial.net/wfs/1.0.0/WFS-basic.xsd 
+                       http://mapserver.gis.umn.edu/mapserver http://161.111.161.171/cgi-bin/AtlasAves.exe?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=Blyr&amp;OUTPUTFORMAT=XMLSCHEMA">
+      <gml:boundedBy>
+      	<gml:Box srsName="EPSG:25830">
+      		<gml:coordinates>3430.373535,4000000.000000 1000500.937500,4864042.000000</gml:coordinates>
+      	</gml:Box>
+      </gml:boundedBy>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>135968.093750,4403976.000000 189009.265625,4457156.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>135968.093750,4406969.500000 139161.390625,4457156.500000 189009.265625,4453718.000000 185795.625000,4403976.000000 135968.093750,4406969.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PE4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>117</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>59.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>57.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>132455.468750,4353834.000000 185795.625000,4406969.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>132455.468750,4357262.000000 135968.093750,4406969.500000 185795.625000,4403976.000000 182381.140625,4353834.000000 132455.468750,4357262.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PD3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>129102.500000,4303892.000000 182381.140625,4357262.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>129102.500000,4307234.500000 132455.468750,4357262.000000 182381.140625,4353834.000000 179167.500000,4303892.000000 129102.500000,4307234.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PD4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>115</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>64.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>19.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>50.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>125909.195313,4253950.000000 179167.500000,4307234.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>125909.195313,4257207.500000 129102.500000,4307234.500000 179167.500000,4303892.000000 175753.000000,4253950.000000 125909.195313,4257207.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PC3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>102</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>50.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>122556.234375,4203935.000000 175753.000000,4257207.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>122556.234375,4207340.000000 125909.195313,4257207.500000 175753.000000,4253950.000000 172790.875000,4203935.000000 122556.234375,4207340.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PC4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>115</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>60.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>19.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>54.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>116329.296875,4104252.500000 169325.734375,4157312.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>116329.296875,4107285.250000 119362.929688,4157312.500000 169325.734375,4154065.750000 166095.937500,4104252.500000 116329.296875,4107285.250000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PB4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>117</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>119362.929688,4154065.750000 172790.875000,4207340.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>119362.929688,4157312.500000 122556.234375,4207340.000000 172790.875000,4203935.000000 169325.734375,4154065.750000 119362.929688,4157312.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PB3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>111</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>3430.373535,4664086.000000 56365.425781,4717596.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>3430.373535,4667379.000000 6713.167480,4717596.500000 56365.425781,4713892.000000 53492.980469,4664086.000000 3430.373535,4667379.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>NG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>98</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>39.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>12.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>53492.980469,4660278.500000 106458.906250,4713892.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>53492.980469,4664086.000000 56365.425781,4713892.000000 106458.906250,4710420.500000 103044.414063,4660278.500000 53492.980469,4664086.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>NG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>65.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>14.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>6713.167480,4713892.000000 60061.980469,4767554.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>6713.167480,4717596.500000 10049.714844,4767554.000000 60061.980469,4763958.500000 56365.425781,4713892.000000 6713.167480,4717596.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>NH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>101</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>40.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>13.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>56365.425781,4710420.500000 110074.250000,4763958.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>56365.425781,4713892.000000 60061.980469,4763958.500000 110074.250000,4760362.500000 106458.906250,4710420.500000 56365.425781,4713892.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>NH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>109</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>42.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>16</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>66.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>60061.980469,4760362.500000 113689.593750,4813900.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>60061.980469,4763958.500000 63677.324219,4813900.500000 113689.593750,4810304.500000 110074.250000,4760362.500000 60061.980469,4763958.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>NH3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>93</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>38.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>12.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>54.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>152855.828125,4653486.500000 206282.578125,4706625.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>152855.828125,4656882.500000 156270.312500,4706625.000000 206282.578125,4703228.500000 203068.937500,4653486.500000 152855.828125,4656882.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>55.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>71.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>103044.414063,4656882.500000 156270.312500,4710420.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>103044.414063,4660278.500000 106458.906250,4710420.500000 156270.312500,4706625.000000 152855.828125,4656882.500000 103044.414063,4660278.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>113</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>50.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>17.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>62.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>156270.312500,4703228.500000 209897.921875,4756766.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>156270.312500,4706625.000000 160086.515625,4756766.500000 209897.921875,4753171.000000 206282.578125,4703228.500000 156270.312500,4706625.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>106458.906250,4706625.000000 160086.515625,4760362.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>106458.906250,4710420.500000 110074.250000,4760362.500000 160086.515625,4756766.500000 156270.312500,4706625.000000 106458.906250,4710420.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>102</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>32.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>17.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>110074.250000,4756766.500000 163501.000000,4810304.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>110074.250000,4760362.500000 113689.593750,4810304.500000 163501.000000,4806708.500000 160086.515625,4756766.500000 110074.250000,4760362.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>103</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>36.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>16</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>66.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>10049.714844,4763958.500000 63677.324219,4817496.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>10049.714844,4767554.000000 13665.059570,4817496.000000 63677.324219,4813900.500000 60061.980469,4763958.500000 10049.714844,4767554.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>NH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>93</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>31.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>13.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>61.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>63677.324219,4810304.500000 117304.937500,4864042.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>63677.324219,4813900.500000 67694.375000,4864042.000000 117304.937500,4860246.500000 113689.593750,4810304.500000 63677.324219,4813900.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>NJ4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>105</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>13.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>56.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>113689.593750,4806708.500000 167116.343750,4860246.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>113689.593750,4810304.500000 117304.937500,4860246.500000 167116.343750,4856650.500000 163501.000000,4806708.500000 113689.593750,4810304.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PJ2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>99</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>42.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>12</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>56.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>163501.000000,4802913.000000 217128.609375,4856650.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>163501.000000,4806708.500000 167116.343750,4856650.500000 217128.609375,4853055.000000 213513.265625,4802913.000000 163501.000000,4806708.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PJ4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>90</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>34.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>12.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>55.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>160086.515625,4753171.000000 213513.265625,4806708.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>160086.515625,4756766.500000 163501.000000,4806708.500000 213513.265625,4802913.000000 209897.921875,4753171.000000 160086.515625,4756766.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>PH3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>116</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>17.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>64.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>213513.265625,4800000.000000 258504.234375,4853055.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>213513.265625,4802913.000000 217128.609375,4853055.000000 258504.234375,4849858.500000 256701.171875,4800000.000000 213513.265625,4802913.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QJ2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>91</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>10.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>45.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>209897.921875,4750000.000000 256701.171875,4802913.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>209897.921875,4753171.000000 213513.265625,4802913.000000 256701.171875,4800000.000000 254911.281250,4750000.000000 209897.921875,4753171.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>59.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>17.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>64.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>206282.578125,4700032.500000 254911.281250,4753171.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>206282.578125,4703228.500000 209897.921875,4753171.000000 254911.281250,4750000.000000 253282.062500,4700032.500000 206282.578125,4703228.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>130</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>67.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>203068.937500,4650000.000000 253282.062500,4703228.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>203068.937500,4653486.500000 206282.578125,4703228.500000 253282.062500,4700032.500000 251376.328125,4650000.000000 203068.937500,4653486.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>134</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>55.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>78.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>199654.453125,4600000.000000 251376.328125,4653486.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>199654.453125,4603544.500000 203068.937500,4653486.500000 251376.328125,4650000.000000 249264.062500,4600000.000000 199654.453125,4603544.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QG2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>134</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>64.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>189009.265625,4449982.500000 246082.812500,4503684.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>189009.265625,4453718.000000 192875.687500,4503684.500000 246082.812500,4500525.500000 244320.984375,4449982.500000 189009.265625,4453718.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QE1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>144</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>82.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>229874.015625,4000000.000000 300000.000000,4050550.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>229874.015625,4000007.250000 231283.484375,4050550.500000 300000.000000,4050000.000000 300000.000000,4000000.000000 229874.015625,4000007.250000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TF4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>117</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>71.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>175753.000000,4249954.500000 239387.875000,4303892.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>175753.000000,4253950.000000 179167.500000,4303892.000000 239387.875000,4300107.500000 238017.281250,4249954.500000 175753.000000,4253950.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QC1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>115</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>58.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>56.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>179167.500000,4300107.500000 241230.906250,4353834.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>179167.500000,4303892.000000 182381.140625,4353834.000000 241230.906250,4349838.500000 239387.875000,4300107.500000 179167.500000,4303892.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QD2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>65</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>57</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>182381.140625,4349838.500000 242911.531250,4403976.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>182381.140625,4353834.000000 185795.625000,4403976.000000 242911.531250,4400141.000000 241230.906250,4349838.500000 182381.140625,4353834.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QD1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>116</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>185795.625000,4400141.000000 244320.984375,4453718.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>185795.625000,4403976.000000 189009.265625,4453718.000000 244320.984375,4449982.500000 242911.531250,4400141.000000 185795.625000,4403976.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QE2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>70.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>162924.640625,4050550.500000 233045.296875,4104252.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>162924.640625,4053709.250000 166095.937500,4104252.500000 233045.296875,4100040.750000 231283.484375,4050550.500000 162924.640625,4053709.250000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QA1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>94</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>14.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>37.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>254911.281250,4750000.000000 300000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>254911.281250,4750000.000000 256701.171875,4800000.000000 300000.000000,4800000.000000 300000.000000,4750000.000000 254911.281250,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TN3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>128</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>59.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>16.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>68.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4750000.000000 350000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4750000.000000 300000.000000,4800000.000000 350000.000000,4800000.000000 350000.000000,4750000.000000 300000.000000,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UN1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>136</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>53.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>82.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4750000.000000 400000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4750000.000000 350000.000000,4800000.000000 400000.000000,4800000.000000 400000.000000,4750000.000000 350000.000000,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UN3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>53.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>79.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4750000.000000 450000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4750000.000000 400000.000000,4800000.000000 450000.000000,4800000.000000 450000.000000,4750000.000000 400000.000000,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VN1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>128</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>18.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>73.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>253136.296875,4700000.000000 300000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>253136.296875,4700000.000000 254911.281250,4750000.000000 300000.000000,4750000.000000 300000.000000,4700000.000000 253136.296875,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TN4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>139</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>90.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4700000.000000 350000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4700000.000000 300000.000000,4750000.000000 350000.000000,4750000.000000 350000.000000,4700000.000000 300000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UN2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>148</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>65.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>82.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4700000.000000 400000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4700000.000000 350000.000000,4750000.000000 400000.000000,4750000.000000 400000.000000,4700000.000000 350000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UN4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>142</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>84.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4700000.000000 450000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4700000.000000 400000.000000,4750000.000000 450000.000000,4750000.000000 450000.000000,4700000.000000 400000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VN2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>138</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>42.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>95.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>251376.328125,4650000.000000 300000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>251376.328125,4650000.000000 253136.296875,4700000.000000 300000.000000,4700000.000000 300000.000000,4650000.000000 251376.328125,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TM3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>41.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>82.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4650000.000000 350000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4650000.000000 300000.000000,4700000.000000 350000.000000,4700000.000000 350000.000000,4650000.000000 300000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UM1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>123</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>47.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>75.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4650000.000000 400000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4650000.000000 350000.000000,4700000.000000 400000.000000,4700000.000000 400000.000000,4650000.000000 350000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UM3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>121</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>46.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4650000.000000 450000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4650000.000000 400000.000000,4700000.000000 450000.000000,4700000.000000 450000.000000,4650000.000000 400000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VM1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>81.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4050000.000000 350000.000000,4100000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4050000.000000 300000.000000,4100000.000000 350000.000000,4100000.000000 350000.000000,4050000.000000 300000.000000,4050000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UF1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>118</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>41.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>76.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4050000.000000 400000.000000,4100000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4050000.000000 350000.000000,4100000.000000 400000.000000,4100000.000000 400000.000000,4050000.000000 350000.000000,4050000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UF3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>112</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>66.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4050000.000000 450000.000000,4100000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4050000.000000 400000.000000,4100000.000000 450000.000000,4100000.000000 450000.000000,4050000.000000 400000.000000,4050000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VF1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>64.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>166095.937500,4100040.750000 234807.125000,4154065.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>166095.937500,4104252.500000 169325.734375,4154065.750000 234807.125000,4149882.000000 233045.296875,4100040.750000 166095.937500,4104252.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QB2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>109</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>65.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>17.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>43.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>233045.296875,4100000.000000 300000.000000,4150000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>233045.296875,4100040.750000 234807.125000,4149882.000000 300000.000000,4150000.000000 300000.000000,4100000.000000 233045.296875,4100040.750000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TG4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>108</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>51.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4100000.000000 350000.000000,4150000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4100000.000000 300000.000000,4150000.000000 350000.000000,4150000.000000 350000.000000,4100000.000000 300000.000000,4100000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UG2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>112</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>55.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>56.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4100000.000000 400000.000000,4150000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4100000.000000 350000.000000,4150000.000000 400000.000000,4150000.000000 400000.000000,4100000.000000 350000.000000,4100000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UG4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>55.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>66.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4100000.000000 450000.000000,4150000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4100000.000000 400000.000000,4150000.000000 450000.000000,4150000.000000 450000.000000,4100000.000000 400000.000000,4100000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VG2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>70.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>169325.734375,4149882.000000 236216.593750,4203935.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>169325.734375,4154065.750000 172790.875000,4203935.000000 236216.593750,4200074.000000 234807.125000,4149882.000000 169325.734375,4154065.750000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QB1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>116</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>64.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>234807.125000,4149882.000000 300000.000000,4200074.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>234807.125000,4149882.000000 236216.593750,4200074.000000 300000.000000,4200000.000000 300000.000000,4150000.000000 234807.125000,4149882.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>118</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>64</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4150000.000000 350000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4150000.000000 300000.000000,4200000.000000 350000.000000,4200000.000000 350000.000000,4150000.000000 300000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>114</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>64.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>49.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4150000.000000 400000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4150000.000000 350000.000000,4200000.000000 400000.000000,4200000.000000 400000.000000,4150000.000000 350000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>117</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>64.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>52.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4150000.000000 450000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4150000.000000 400000.000000,4200000.000000 450000.000000,4200000.000000 450000.000000,4150000.000000 400000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>123</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>53.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>172790.875000,4200074.000000 237978.406250,4253950.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>172790.875000,4203935.000000 175753.000000,4253950.000000 237978.406250,4249915.500000 236216.593750,4200074.000000 172790.875000,4203935.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QC2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>113</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>61.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>236216.593750,4200000.000000 300000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>236216.593750,4200074.000000 237978.406250,4249915.500000 300000.000000,4250000.000000 300000.000000,4200000.000000 236216.593750,4200074.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4200000.000000 350000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4200000.000000 300000.000000,4250000.000000 350000.000000,4250000.000000 350000.000000,4200000.000000 300000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>66.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>55.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4200000.000000 400000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4200000.000000 350000.000000,4250000.000000 400000.000000,4250000.000000 400000.000000,4200000.000000 350000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>55.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>66.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4200000.000000 450000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4200000.000000 400000.000000,4250000.000000 450000.000000,4250000.000000 450000.000000,4200000.000000 400000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>129</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>47.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>32.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>81.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>237978.406250,4249915.500000 300000.000000,4300107.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>237978.406250,4249915.500000 239387.875000,4300107.500000 300000.000000,4300000.000000 300000.000000,4250000.000000 237978.406250,4249915.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TH3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>113</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>63.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>49.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4250000.000000 350000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4250000.000000 300000.000000,4300000.000000 350000.000000,4300000.000000 350000.000000,4250000.000000 300000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>125</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>71</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>54</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4250000.000000 400000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4250000.000000 350000.000000,4300000.000000 400000.000000,4300000.000000 400000.000000,4250000.000000 350000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UH3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>59.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>73.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4250000.000000 450000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4250000.000000 400000.000000,4300000.000000 450000.000000,4300000.000000 450000.000000,4250000.000000 400000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>131</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>75</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>239387.875000,4300000.000000 300000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>239387.875000,4300107.500000 241149.703125,4349949.000000 300000.000000,4350000.000000 300000.000000,4300000.000000 239387.875000,4300107.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TJ4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>118</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>61.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4300000.000000 350000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4300000.000000 300000.000000,4350000.000000 350000.000000,4350000.000000 350000.000000,4300000.000000 300000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UJ2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>70.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4300000.000000 400000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4300000.000000 350000.000000,4350000.000000 400000.000000,4350000.000000 400000.000000,4300000.000000 350000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UJ4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>70.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4300000.000000 450000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4300000.000000 400000.000000,4350000.000000 450000.000000,4350000.000000 450000.000000,4300000.000000 400000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VJ2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>241149.703125,4349949.000000 300000.000000,4400141.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>241149.703125,4349949.000000 242911.531250,4400141.000000 300000.000000,4400000.000000 300000.000000,4350000.000000 241149.703125,4349949.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TJ3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>68.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4350000.000000 350000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4350000.000000 300000.000000,4400000.000000 350000.000000,4400000.000000 350000.000000,4350000.000000 300000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UJ1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>121</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>63.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4350000.000000 400000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4350000.000000 350000.000000,4400000.000000 400000.000000,4400000.000000 400000.000000,4350000.000000 350000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UJ3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>121</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4350000.000000 450000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4350000.000000 400000.000000,4400000.000000 450000.000000,4400000.000000 450000.000000,4350000.000000 400000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VJ1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>69</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>57</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>242911.531250,4400000.000000 300000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>242911.531250,4400141.000000 244320.984375,4449982.500000 300000.000000,4450000.000000 300000.000000,4400000.000000 242911.531250,4400141.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TK4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>142</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>69.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>72.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4400000.000000 350000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4400000.000000 300000.000000,4450000.000000 350000.000000,4450000.000000 350000.000000,4400000.000000 300000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UK2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>132</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>67.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>64.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4400000.000000 400000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4400000.000000 350000.000000,4450000.000000 400000.000000,4450000.000000 400000.000000,4400000.000000 350000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UK4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>128</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>63.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>64.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4400000.000000 450000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4400000.000000 400000.000000,4450000.000000 450000.000000,4450000.000000 450000.000000,4400000.000000 400000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VK2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>112</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>244320.984375,4449982.500000 300000.000000,4500525.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>244320.984375,4449982.500000 246082.812500,4500525.500000 300000.000000,4500000.000000 300000.000000,4450000.000000 244320.984375,4449982.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TK3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>141</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>63.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>77.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4450000.000000 350000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4450000.000000 300000.000000,4500000.000000 350000.000000,4500000.000000 350000.000000,4450000.000000 300000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UK1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>138</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>69.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>68.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4450000.000000 400000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4450000.000000 350000.000000,4500000.000000 400000.000000,4500000.000000 400000.000000,4450000.000000 350000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UK3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>142</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>85.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4450000.000000 450000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4450000.000000 400000.000000,4500000.000000 450000.000000,4500000.000000 450000.000000,4450000.000000 400000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VK1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>139</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>60</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>79</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>192875.687500,4500525.500000 247903.031250,4553602.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>192875.687500,4503684.500000 195838.250000,4553602.500000 247903.031250,4550000.000000 246082.812500,4500525.500000 192875.687500,4503684.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QF2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>47.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>78.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>246082.812500,4500000.000000 300000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>246082.812500,4500525.500000 247903.031250,4550000.000000 300000.000000,4550000.000000 300000.000000,4500000.000000 246082.812500,4500525.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TL4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>77.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4500000.000000 350000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4500000.000000 300000.000000,4550000.000000 350000.000000,4550000.000000 350000.000000,4500000.000000 300000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UL2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>130</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>67.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>62.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4500000.000000 400000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4500000.000000 350000.000000,4550000.000000 400000.000000,4550000.000000 400000.000000,4500000.000000 350000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UL4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>138</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>75.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4500000.000000 450000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4500000.000000 400000.000000,4550000.000000 450000.000000,4550000.000000 450000.000000,4500000.000000 400000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VL2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>142</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>43.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>98.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>195838.250000,4550000.000000 249264.062500,4603544.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>195838.250000,4553602.500000 199654.453125,4603544.500000 249264.062500,4600025.500000 247903.031250,4550000.000000 195838.250000,4553602.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>QF1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>129</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>77.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>247903.031250,4550000.000000 300000.000000,4600025.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>247903.031250,4550000.000000 249264.062500,4600025.500000 300000.000000,4600000.000000 300000.000000,4550000.000000 247903.031250,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TL3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>134</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>49.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>84.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4550000.000000 350000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4550000.000000 300000.000000,4600000.000000 350000.000000,4600000.000000 350000.000000,4550000.000000 300000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UL1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>129</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>67.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4550000.000000 400000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4550000.000000 350000.000000,4600000.000000 400000.000000,4600000.000000 400000.000000,4550000.000000 350000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UL3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>80.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4550000.000000 450000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4550000.000000 400000.000000,4600000.000000 450000.000000,4600000.000000 450000.000000,4550000.000000 400000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VL1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>144</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>32</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>87.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>249264.062500,4600000.000000 300000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>249264.062500,4600025.500000 251376.328125,4650000.000000 300000.000000,4650000.000000 300000.000000,4600000.000000 249264.062500,4600025.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TM4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>131</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>80</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>300000.000000,4600000.000000 350000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>300000.000000,4600000.000000 300000.000000,4650000.000000 350000.000000,4650000.000000 350000.000000,4600000.000000 300000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UM2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>117</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>62.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>350000.000000,4600000.000000 400000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>350000.000000,4600000.000000 350000.000000,4650000.000000 400000.000000,4650000.000000 400000.000000,4600000.000000 350000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>UM4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>49.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>76.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>400000.000000,4600000.000000 450000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>400000.000000,4600000.000000 400000.000000,4650000.000000 450000.000000,4650000.000000 450000.000000,4600000.000000 400000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VM2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>81.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>256701.171875,4799962.500000 300003.593750,4850000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>256701.171875,4800000.000000 258504.234375,4849858.500000 300000.000000,4850000.000000 300003.593750,4799962.500000 256701.171875,4800000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TP4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>98</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>39.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>13.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>231283.484375,4050000.000000 300000.000000,4100040.750000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>231283.484375,4050550.500000 233045.296875,4100040.750000 300000.000000,4100000.000000 300000.000000,4050000.000000 231283.484375,4050550.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>TF3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>121</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>68.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4750000.000000 650000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4750000.000000 600000.000000,4800000.000000 650000.000000,4800000.000000 650000.000000,4750000.000000 600000.000000,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XN1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>55.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>16.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>68.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4750000.000000 600000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4750000.000000 550000.000000,4800000.000000 600000.000000,4800000.000000 600000.000000,4750000.000000 550000.000000,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WN3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>130</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>81.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4750000.000000 550000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4750000.000000 500000.000000,4800000.000000 550000.000000,4800000.000000 550000.000000,4750000.000000 500000.000000,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WN1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>128</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>50</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>18.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>78</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4750000.000000 500000.000000,4800000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4750000.000000 450000.000000,4800000.000000 500000.000000,4800000.000000 500000.000000,4750000.000000 450000.000000,4750000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VN3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>130</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>44.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>85.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>790085.437500,4703183.500000 843890.250000,4757390.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>793618.062500,4703183.500000 790085.437500,4753088.500000 840357.687500,4757390.000000 843890.250000,4706897.500000 793618.062500,4703183.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>121</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>60.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>14</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>745045.187500,4699661.000000 793618.062500,4753088.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>746811.437500,4699661.000000 745045.187500,4749859.500000 790085.437500,4753088.500000 793618.062500,4703183.500000 746811.437500,4699661.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>BH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>18.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>72</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4699661.000000 746811.437500,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4700000.000000 700000.000000,4750000.000000 745045.187500,4749859.500000 746811.437500,4699661.000000 700000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YN2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>63.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>18.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4700000.000000 700000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4700000.000000 650000.000000,4750000.000000 700000.000000,4750000.000000 700000.000000,4700000.000000 650000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XN4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>143</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>58.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>84.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4700000.000000 650000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4700000.000000 600000.000000,4750000.000000 650000.000000,4750000.000000 650000.000000,4700000.000000 600000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XN2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>141</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>42.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>98.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4700000.000000 600000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4700000.000000 550000.000000,4750000.000000 600000.000000,4750000.000000 600000.000000,4700000.000000 550000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WN4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>146</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>97.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4700000.000000 550000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4700000.000000 500000.000000,4750000.000000 550000.000000,4750000.000000 550000.000000,4700000.000000 500000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WN2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>144</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>43.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>100.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4700000.000000 500000.000000,4750000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4700000.000000 450000.000000,4750000.000000 500000.000000,4750000.000000 500000.000000,4700000.000000 450000.000000,4700000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VN4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>141</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>43.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>97.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>793618.062500,4652985.000000 847128.500000,4706897.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>797445.000000,4652985.000000 793618.062500,4703183.500000 843890.250000,4706897.500000 847128.500000,4656992.500000 797445.000000,4652985.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>132</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>746811.437500,4649755.500000 797445.000000,4703183.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>748577.750000,4649755.500000 746811.437500,4699661.000000 793618.062500,4703183.500000 797445.000000,4652985.000000 748577.750000,4649755.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>BG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>147</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>65.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>81.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4649755.500000 748577.750000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4650000.000000 700000.000000,4700000.000000 746811.437500,4699661.000000 748577.750000,4649755.500000 700000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YM1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>138</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>76.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4650000.000000 700000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4650000.000000 650000.000000,4700000.000000 700000.000000,4700000.000000 700000.000000,4650000.000000 650000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XM3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>137</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4650000.000000 650000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4650000.000000 600000.000000,4700000.000000 650000.000000,4700000.000000 650000.000000,4650000.000000 600000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XM1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>130</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>46.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>83.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4650000.000000 600000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4650000.000000 550000.000000,4700000.000000 600000.000000,4700000.000000 600000.000000,4650000.000000 550000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WM3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>143</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>44.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>38.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>98.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4650000.000000 550000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4650000.000000 500000.000000,4700000.000000 550000.000000,4700000.000000 550000.000000,4650000.000000 500000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WM1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>142</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>50.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>91.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4650000.000000 500000.000000,4700000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4650000.000000 450000.000000,4700000.000000 500000.000000,4700000.000000 500000.000000,4650000.000000 450000.000000,4650000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VM3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>138</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>92.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4050000.000000 600000.000000,4100000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4050000.000000 550000.000000,4100000.000000 600000.000000,4100000.000000 600000.000000,4050000.000000 550000.000000,4050000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WF3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>84</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>42.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>41.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4050000.000000 550000.000000,4100000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4050000.000000 500000.000000,4100000.000000 550000.000000,4100000.000000 550000.000000,4050000.000000 500000.000000,4050000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WF1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>101</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>50.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4050000.000000 500000.000000,4100000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4050000.000000 450000.000000,4100000.000000 500000.000000,4100000.000000 500000.000000,4050000.000000 450000.000000,4050000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VF3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>111</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>49.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>61.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4100000.000000 600000.000000,4150000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4100000.000000 550000.000000,4150000.000000 600000.000000,4150000.000000 600000.000000,4100000.000000 550000.000000,4100000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WG4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>108</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>55.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4100000.000000 550000.000000,4150000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4100000.000000 500000.000000,4150000.000000 550000.000000,4150000.000000 550000.000000,4100000.000000 500000.000000,4100000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WG2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>114</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>62.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4100000.000000 500000.000000,4150000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4100000.000000 450000.000000,4150000.000000 500000.000000,4150000.000000 500000.000000,4100000.000000 450000.000000,4100000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VG4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>47.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4150000.000000 700000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4150000.000000 650000.000000,4200000.000000 700000.000000,4200000.000000 700000.000000,4150000.000000 650000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>101</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>64.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>16.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>36.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4150000.000000 650000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4150000.000000 600000.000000,4200000.000000 650000.000000,4200000.000000 650000.000000,4150000.000000 600000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>111</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>70.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>17.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>40.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4150000.000000 600000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4150000.000000 550000.000000,4200000.000000 600000.000000,4200000.000000 600000.000000,4150000.000000 550000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>109</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>50.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4150000.000000 550000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4150000.000000 500000.000000,4200000.000000 550000.000000,4200000.000000 550000.000000,4150000.000000 500000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>68.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4150000.000000 500000.000000,4200000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4150000.000000 450000.000000,4200000.000000 500000.000000,4200000.000000 500000.000000,4150000.000000 450000.000000,4150000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>50.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>75.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4200000.000000 700000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4200000.000000 650000.000000,4250000.000000 700000.000000,4250000.000000 700000.000000,4200000.000000 650000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>123</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>66.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>56.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4200000.000000 650000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4200000.000000 600000.000000,4250000.000000 650000.000000,4250000.000000 650000.000000,4200000.000000 600000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>113</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>66.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>19</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>46.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4200000.000000 600000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4200000.000000 550000.000000,4250000.000000 600000.000000,4250000.000000 600000.000000,4200000.000000 550000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>116</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>64.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4200000.000000 550000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4200000.000000 500000.000000,4250000.000000 550000.000000,4250000.000000 550000.000000,4200000.000000 500000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WH2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>123</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>70.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4200000.000000 500000.000000,4250000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4200000.000000 450000.000000,4250000.000000 500000.000000,4250000.000000 500000.000000,4200000.000000 450000.000000,4200000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VH4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>66.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4249634.500000 762413.687500,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4250000.000000 700000.000000,4300000.000000 760353.000000,4299833.000000 762413.687500,4249634.500000 700000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>119</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>62.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4250000.000000 700000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4250000.000000 650000.000000,4300000.000000 700000.000000,4300000.000000 700000.000000,4250000.000000 650000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XH3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>118</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>73</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4250000.000000 650000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4250000.000000 600000.000000,4300000.000000 650000.000000,4300000.000000 650000.000000,4250000.000000 600000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>114</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>61.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4250000.000000 600000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4250000.000000 550000.000000,4300000.000000 600000.000000,4300000.000000 600000.000000,4250000.000000 550000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WH3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>120</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>60</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4250000.000000 550000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4250000.000000 500000.000000,4300000.000000 550000.000000,4300000.000000 550000.000000,4250000.000000 500000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WH1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>131</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4250000.000000 500000.000000,4300000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4250000.000000 450000.000000,4300000.000000 500000.000000,4300000.000000 500000.000000,4250000.000000 450000.000000,4250000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VH3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>131</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>55</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>76</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4299833.000000 760353.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4300000.000000 700000.000000,4350000.000000 759175.437500,4349738.500000 760353.000000,4299833.000000 700000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YJ2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>106</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>55</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4300000.000000 700000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4300000.000000 650000.000000,4350000.000000 700000.000000,4350000.000000 700000.000000,4300000.000000 650000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XJ4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>113</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>53.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4300000.000000 650000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4300000.000000 600000.000000,4350000.000000 650000.000000,4350000.000000 650000.000000,4300000.000000 600000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XJ2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>59.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4300000.000000 600000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4300000.000000 550000.000000,4350000.000000 600000.000000,4350000.000000 600000.000000,4300000.000000 550000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WJ4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>110</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>19.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>47.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4300000.000000 550000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4300000.000000 500000.000000,4350000.000000 550000.000000,4350000.000000 550000.000000,4300000.000000 500000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WJ2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>120</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4300000.000000 500000.000000,4350000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4300000.000000 450000.000000,4350000.000000 500000.000000,4350000.000000 500000.000000,4300000.000000 450000.000000,4300000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VJ4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>109</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>53.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>55.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4349738.500000 759175.437500,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4350000.000000 700000.000000,4400000.000000 757114.812500,4399937.000000 759175.437500,4349738.500000 700000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YJ1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>111</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>18.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>53.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4350000.000000 700000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4350000.000000 650000.000000,4400000.000000 700000.000000,4400000.000000 700000.000000,4350000.000000 650000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XJ3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>112</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>63.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4350000.000000 650000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4350000.000000 600000.000000,4400000.000000 650000.000000,4400000.000000 650000.000000,4350000.000000 600000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XJ1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>119</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>62.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>56.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4350000.000000 600000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4350000.000000 550000.000000,4400000.000000 600000.000000,4400000.000000 600000.000000,4350000.000000 550000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WJ3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>119</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>57.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4350000.000000 550000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4350000.000000 500000.000000,4400000.000000 550000.000000,4400000.000000 550000.000000,4350000.000000 500000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WJ1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>112</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>54.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4350000.000000 500000.000000,4400000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4350000.000000 450000.000000,4400000.000000 500000.000000,4400000.000000 500000.000000,4350000.000000 450000.000000,4350000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VJ3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>114</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>58.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>55.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4399937.000000 757114.812500,4450135.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4400000.000000 700000.000000,4450000.000000 755642.875000,4450135.500000 757114.812500,4399937.000000 700000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YK2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>43.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>82.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4400000.000000 700000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4400000.000000 650000.000000,4450000.000000 700000.000000,4450000.000000 700000.000000,4400000.000000 650000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XK4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>46.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>80.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4400000.000000 650000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4400000.000000 600000.000000,4450000.000000 650000.000000,4450000.000000 650000.000000,4400000.000000 600000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XK2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>121</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>63.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4400000.000000 600000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4400000.000000 550000.000000,4450000.000000 600000.000000,4450000.000000 600000.000000,4400000.000000 550000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WK4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>66.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4400000.000000 550000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4400000.000000 500000.000000,4450000.000000 550000.000000,4450000.000000 550000.000000,4400000.000000 500000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WK2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>121</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>60.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4400000.000000 500000.000000,4450000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4400000.000000 450000.000000,4450000.000000 500000.000000,4450000.000000 500000.000000,4400000.000000 450000.000000,4400000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VK4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>116</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>61.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>754171.000000,4450135.500000 810986.500000,4503563.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>755642.875000,4450135.500000 754171.000000,4499747.000000 807453.937500,4503563.500000 810986.500000,4453952.000000 755642.875000,4450135.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>BE3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>23.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4450000.000000 755642.875000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4450000.000000 700000.000000,4500000.000000 754171.000000,4499747.000000 755642.875000,4450135.500000 700000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YK1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>125</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>32.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>92.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4450000.000000 700000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4450000.000000 650000.000000,4500000.000000 700000.000000,4500000.000000 700000.000000,4450000.000000 650000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XK3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>123</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>45</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>78</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4450000.000000 650000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4450000.000000 600000.000000,4500000.000000 650000.000000,4500000.000000 650000.000000,4450000.000000 600000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XK1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>43.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>82.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4450000.000000 600000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4450000.000000 550000.000000,4500000.000000 600000.000000,4500000.000000 600000.000000,4450000.000000 550000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WK3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>49.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4450000.000000 550000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4450000.000000 500000.000000,4500000.000000 550000.000000,4500000.000000 550000.000000,4450000.000000 500000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WK1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>129</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>68.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>60.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4450000.000000 500000.000000,4500000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4450000.000000 450000.000000,4500000.000000 500000.000000,4500000.000000 500000.000000,4450000.000000 450000.000000,4450000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VK3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>120</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>26.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>72</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>752404.687500,4499747.000000 807453.937500,4553468.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>754171.000000,4499747.000000 752404.687500,4549652.000000 804215.750000,4553468.500000 807453.937500,4503563.500000 754171.000000,4499747.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>BF4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>128</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>59.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>24.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>68.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4499747.000000 754171.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4500000.000000 700000.000000,4550000.000000 752404.687500,4549652.000000 754171.000000,4499747.000000 700000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YL2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>134</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>48.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>32.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>85.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4500000.000000 700000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4500000.000000 650000.000000,4550000.000000 700000.000000,4550000.000000 700000.000000,4500000.000000 650000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XL4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>123</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>39.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>34.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>83.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4500000.000000 650000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4500000.000000 600000.000000,4550000.000000 650000.000000,4550000.000000 650000.000000,4500000.000000 600000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XL2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>130</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.4</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>73.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4500000.000000 600000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4500000.000000 550000.000000,4550000.000000 600000.000000,4550000.000000 600000.000000,4500000.000000 550000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WL4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>126</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4500000.000000 550000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4500000.000000 500000.000000,4550000.000000 550000.000000,4550000.000000 550000.000000,4500000.000000 500000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WL2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>135</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>56.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>78.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4500000.000000 500000.000000,4550000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4500000.000000 450000.000000,4550000.000000 500000.000000,4550000.000000 500000.000000,4500000.000000 450000.000000,4500000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VL4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>142</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>67.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>25.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>750000.000000,4549652.000000 804215.750000,4603373.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>752404.687500,4549652.000000 750000.000000,4600000.000000 800388.812500,4603373.500000 804215.750000,4553468.500000 752404.687500,4549652.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>BF3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>71.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.9</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>55.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4549652.000000 752404.687500,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4550000.000000 700000.000000,4600000.000000 750000.000000,4600000.000000 752404.687500,4549652.000000 700000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YL1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>31.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4550000.000000 700000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4550000.000000 650000.000000,4600000.000000 700000.000000,4600000.000000 700000.000000,4550000.000000 650000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XL3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>52.2</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>30.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>69.8</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4550000.000000 650000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4550000.000000 600000.000000,4600000.000000 650000.000000,4600000.000000 650000.000000,4550000.000000 600000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XL1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>129</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>50.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>28.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>78.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4550000.000000 600000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4550000.000000 550000.000000,4600000.000000 600000.000000,4600000.000000 600000.000000,4550000.000000 550000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WL3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>128</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>49.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>78.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4550000.000000 550000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4550000.000000 500000.000000,4600000.000000 550000.000000,4600000.000000 550000.000000,4550000.000000 500000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WL1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>44.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>88.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4550000.000000 500000.000000,4600000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4550000.000000 450000.000000,4600000.000000 500000.000000,4600000.000000 500000.000000,4550000.000000 450000.000000,4550000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VL3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>143</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>31.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>88.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>748577.750000,4600000.000000 800388.812500,4652985.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>750000.000000,4600000.000000 748577.750000,4649755.500000 797445.000000,4652985.000000 800388.812500,4603373.500000 750000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>BG4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>128</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>57.9</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>70.1</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>700000.000000,4600000.000000 750000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>700000.000000,4600000.000000 700000.000000,4650000.000000 748577.750000,4649755.500000 750000.000000,4600000.000000 700000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>YM2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>124</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>58.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>27.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>65.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>650000.000000,4600000.000000 700000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>650000.000000,4600000.000000 650000.000000,4650000.000000 700000.000000,4650000.000000 700000.000000,4600000.000000 650000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XM4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>67.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>600000.000000,4600000.000000 650000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>600000.000000,4600000.000000 600000.000000,4650000.000000 650000.000000,4650000.000000 650000.000000,4600000.000000 600000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>XM2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>59.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>29.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>73.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>550000.000000,4600000.000000 600000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>550000.000000,4600000.000000 550000.000000,4650000.000000 600000.000000,4650000.000000 600000.000000,4600000.000000 550000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WM4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>143</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>50.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>34.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>92.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>500000.000000,4600000.000000 550000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>500000.000000,4600000.000000 500000.000000,4650000.000000 550000.000000,4650000.000000 550000.000000,4600000.000000 500000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>WM2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>141</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>46.3</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>31.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>94.7</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>450000.000000,4600000.000000 500000.000000,4650000.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>450000.000000,4600000.000000 450000.000000,4650000.000000 500000.000000,4650000.000000 500000.000000,4600000.000000 450000.000000,4600000.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>VM4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>138</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>43.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>33.7</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>94.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>797445.000000,4603373.500000 850366.687500,4656992.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>800388.812500,4603373.500000 797445.000000,4652985.000000 847128.500000,4656992.500000 850366.687500,4607087.500000 800388.812500,4603373.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CG2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>125</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>61.4</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>21.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>63.6</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>847128.500000,4607087.500000 900638.875000,4660515.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>850366.687500,4607087.500000 847128.500000,4656992.500000 897173.250000,4660515.500000 900638.875000,4610368.000000 850366.687500,4607087.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CG4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>119</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>46.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.6</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>72.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>843890.250000,4656992.500000 897173.250000,4710127.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>847128.500000,4656992.500000 843890.250000,4706897.500000 893346.312500,4710127.000000 897173.250000,4660515.500000 847128.500000,4656992.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>127</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>54.6</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>20.5</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>72.4</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>893346.312500,4660515.500000 946923.625000,4713943.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>897173.250000,4660515.500000 893346.312500,4710127.000000 943685.437500,4713943.000000 946923.625000,4664038.000000 897173.250000,4660515.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>DG1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>133</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>60</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>18.2</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>73</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>943685.437500,4664038.000000 996968.375000,4717466.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>946923.625000,4664038.000000 943685.437500,4713943.000000 993730.187500,4717466.000000 996968.375000,4667267.000000 946923.625000,4664038.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>DG3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>122</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>63.8</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>15</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.2</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>897173.250000,4610368.000000 950456.187500,4664038.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>900638.875000,4610368.000000 897173.250000,4660515.500000 946923.625000,4664038.000000 950456.187500,4613766.000000 900638.875000,4610368.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>DG2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>117</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>42.7</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>19.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74.3</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>946923.625000,4613766.000000 1000500.937500,4667267.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>950456.187500,4613766.000000 946923.625000,4664038.000000 996968.375000,4667267.000000 1000500.937500,4617391.000000 950456.187500,4613766.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>DG4</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>114</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>51</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>15.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>63</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>900638.875000,4560300.000000 953724.125000,4613766.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>904051.062500,4560300.000000 900638.875000,4610368.000000 950456.187500,4613766.000000 953724.125000,4562827.000000 904051.062500,4560300.000000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>DF1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>105</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>37.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>19</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>67.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>850366.687500,4556901.500000 904051.062500,4610368.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>854233.750000,4556901.500000 850366.687500,4607087.500000 900638.875000,4610368.000000 904051.062500,4560300.000000 854233.750000,4556901.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CF3</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>109</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>35</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>22.8</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>74</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>800388.812500,4553468.500000 854233.750000,4607087.500000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>804215.750000,4553468.500000 800388.812500,4603373.500000 850366.687500,4607087.500000 854233.750000,4557128.000000 804215.750000,4553468.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CF1</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>119</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>60.1</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>18.1</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>58.9</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+    <gml:featureMember>
+      <ms:Blyr>
+        <gml:boundedBy>
+        	<gml:Box srsName="EPSG:25830">
+        		<gml:coordinates>804215.750000,4503563.500000 857190.937500,4557128.000000</gml:coordinates>
+        	</gml:Box>
+        </gml:boundedBy>
+        <ms:msGeometry>
+        <gml:Polygon srsName="EPSG:25830">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+              <gml:coordinates>807453.937500,4503563.500000 804215.750000,4553468.500000 854233.750000,4557128.000000 857190.937500,4507060.500000 807453.937500,4503563.500000 </gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+        </ms:msGeometry>
+        <ms:cuadricula>CF2</ms:cuadricula>
+        <ms:BiodivIndex>
+          <ms:Numero_total_de_especies_en_2500_km2>109</ms:Numero_total_de_especies_en_2500_km2>
+          <ms:Beta-diversidad>59.5</ms:Beta-diversidad>
+          <ms:Numero_de_especies_SPEC_1y2y3>17.3</ms:Numero_de_especies_SPEC_1y2y3>
+          <ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>49.5</ms:Numero_medio_de_especies_en_100_km2_dentro_de_su_bloque_de_2500_km2>
+        </ms:BiodivIndex>
+      </ms:Blyr>
+    </gml:featureMember>
+</wfs:FeatureCollection>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-AtlasAvesGetFeature.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsDescribeFeatureType.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsDescribeFeatureType.xml	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version='1.0' encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<schema
+   targetNamespace="http://www.ttt.org/myns" 
+   xmlns:myns="http://www.ttt.org/myns" 
+   xmlns:ogc="http://www.opengis.net/ogc"
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+   xmlns="http://www.w3.org/2001/XMLSchema"
+   xmlns:gml="http://www.opengis.net/gml"
+   elementFormDefault="qualified" version="0.1" >
+
+  <import namespace="http://www.opengis.net/gml"
+          schemaLocation="http://schemas.opengeospatial.net/gml/2.1.2/feature.xsd" />
+
+  <element name="popplace" 
+           type="myns:popplaceType" 
+           substitutionGroup="gml:_Feature" />
+
+  <complexType name="popplaceType">
+    <complexContent>
+      <extension base="gml:AbstractFeatureType">
+        <sequence>
+          <element name="msGeometry" type="gml:GeometryPropertyType" minOccurs="0" maxOccurs="1"/>
+          <element name="AREA" type="string"/>
+          <element name="PERIMETER" type="string"/>
+          <element name="POPPLACE_" type="string"/>
+          <element name="POPPLACE_I" type="string"/>
+          <element name="UNIQUE_KEY" type="string"/>
+          <element name="NAME" type="string"/>
+          <element name="NAME_E" type="string"/>
+          <element name="NAME_F" type="string"/>
+          <element name="REG_CODE" type="string"/>
+          <element name="NTS50" type="string"/>
+          <element name="LAT" type="string"/>
+          <element name="LONG" type="string"/>
+          <element name="SGC_CODE" type="string"/>
+          <element name="CAPITAL" type="string"/>
+          <element name="POP_RANGE" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+
+</schema>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsDescribeFeatureType.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<wfs:WFS_Capabilities 
+	xmlns:wfs="http://www.opengis.net/wfs"
+	xmlns:deegree="http://www.deegree.org/wfs"
+ 	xmlns:gml="http://www.opengis.net/gml"
+	xmlns:ogc="http://www.opengis.net/ogc"
+	xmlns:ows="http://www.opengis.net/ows"
+	xmlns:xlink="http://www.w3.org/1999/xlink"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	updateSequence="0" 
+	version="1.1.0"
+	xsi:schemaLocation="http://www.opengis.net/wfs ../wfs.xsd">
+<ows:ServiceIdentification><ows:ServiceType>WFS</ows:ServiceType><ows:ServiceTypeVersion>1.1.0</ows:ServiceTypeVersion><ows:Title>IDEE-WFS</ows:Title><ows:Abstract>Web Feature Server maintained by the IDEE</ows:Abstract><ows:Keywords><ows:Keyword>IDEE</ows:Keyword><ows:Keyword>Spain</ows:Keyword><ows:Type>String</ows:Type></ows:Keywords><ows:Fees>None</ows:Fees><ows:AccessConstraints>None</ows:AccessConstraints></ows:ServiceIdentification><ows:ServiceProvider><ows:ProviderName>IDE-E</ows:ProviderName><ows:ProviderSite xlink:href="http://www.idee.es" xlink:type="simple"/><ows:ServiceContact><ows:IndividualName/><ows:ContactInfo><ows:Phone><ows:Voice/><ows:Facsimile/></ows:Phone><ows:Address><ows:DeliveryPoint/><ows:ElectronicMailAddress/></ows:Address><ows:OnlineResource xlink:href="http://www.idee.es" xlink:type="simple"/><ows:HoursOfService>24x7</ows:HoursOfService><ows:ContactInstructions/></ows:ContactInfo><ows:Role>PointOfContact</ows:Role></ows:ServiceContact></ows:ServiceProvider><ows:OperationsMetadata><ows:Operation name="GetFeature"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice?" xlink:type="simple"/><ows:Post xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="resultType"><ows:Value>results</ows:Value><ows:Value>hits</ows:Value></ows:Parameter><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="DescribeFeatureType"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice?" xlink:type="simple"/><ows:Post xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="GetCapabilities"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice?" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="AcceptVersions"><ows:Value>1.1.0</ows:Value><ows:Value>1.0.0</ows:Value></ows:Parameter><ows:Parameter name="AcceptFormats"><ows:Value>text/xml</ows:Value></ows:Parameter><ows:Parameter name="Sections"><ows:Value>ServiceIdentification</ows:Value><ows:Value>ServiceProvider</ows:Value><ows:Value>OperationsMetadata</ows:Value><ows:Value>FeatureTypeList</ows:Value><ows:Value>ServesGMLObjectTypeList</ows:Value><ows:Value>SupportsGMLObjectTypeList</ows:Value><ows:Value>Filter_Capabilities</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="GetFeatureWithLock"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice?" xlink:type="simple"/><ows:Post xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="resultType"><ows:Value>results</ows:Value><ows:Value>hits</ows:Value></ows:Parameter><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="GetGMLObject"><ows:DCP><ows:HTTP><ows:Post xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value><ows:Value>text/xhtml</ows:Value></ows:Parameter><ows:Parameter name="LocalTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Parameter><ows:Parameter name="RemoteTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="LockFeature"><ows:DCP><ows:HTTP><ows:Post xlink:href="http://www.idee.es:80/IDEE-WFS/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="lockAction"><ows:Value>ALL</ows:Value><ows:Value>SOME</ows:Value></ows:Parameter></ows:Operation><ows:Parameter name="srsName"><ows:Value>EPSG:4230</ows:Value></ows:Parameter><ows:Constraint name="RemoteTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Constraint><ows:Constraint name="LocalTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Constraint><ows:Constraint name="DefaultMaxFeatures"><ows:Value>10000</ows:Value></ows:Constraint><ows:Constraint name="DefaultLockExpiry"><ows:Value>5</ows:Value></ows:Constraint></ows:OperationsMetadata><wfs:FeatureTypeList><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:VerticeRedOrdenInferior</wfs:Name><wfs:Title>Geodesia - Red de orden inferior</wfs:Title><wfs:Abstract>Geodesia - Red de orden inferior</wfs:Abstract><ows:Keywords><ows:Keyword>geodesia</ows:Keyword></ows:Keywords><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-10.222421 34.632854</ows:LowerCorner><ows:UpperCorner>34.632854 43.844494</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:EGMViaComunicacionLinea</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL1000Municipio</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:VerticeRedRegenteCanarias95</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:EGMConstruccionPunto</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL200CCAA</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:EGMConstruccionArea</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:EGMHidrografiaLinea</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL25Municipio</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:EGMLimiteAdministrativoArea</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL200Municipio</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:EGMViaComunicacionPunto</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL1000CCAA</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL25Provincia</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:EGMGeodesiaPunto</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:VerticeRedRegente</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL200Provincia</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL1000Provincia</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:VerticeRedBalear98</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:BDLL25CCAA</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType><wfs:FeatureType xmlns:ideewfs="http://www.idee.es/wfs"><wfs:Name>ideewfs:VerticeRedIberia95</wfs:Name><wfs:Title/><wfs:DefaultSRS>EPSG:4230</wfs:DefaultSRS><wfs:Operations><wfs:Operation>Query</wfs:Operation></wfs:Operations><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType></wfs:FeatureTypeList><ogc:Filter_Capabilities><ogc:Spatial_Capabilities><ogc:GeometryOperands><ogc:GeometryOperand>gml:Envelope</ogc:GeometryOperand><ogc:GeometryOperand>gml:Point</ogc:GeometryOperand><ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand><ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand></ogc:GeometryOperands><ogc:SpatialOperators><ogc:SpatialOperator name="Within"/><ogc:SpatialOperator name="Intersects"/><ogc:SpatialOperator name="Overlaps"/><ogc:SpatialOperator name="BBOX"/><ogc:SpatialOperator name="Crosses"/><ogc:SpatialOperator name="Contains"/><ogc:SpatialOperator name="Disjoint"/><ogc:SpatialOperator name="Beyond"/><ogc:SpatialOperator name="Equals"/><ogc:SpatialOperator name="Touches"/></ogc:SpatialOperators></ogc:Spatial_Capabilities><ogc:Scalar_Capabilities><ogc:LogicalOperators/><ogc:ComparisonOperators><ogc:ComparisonOperator>LessThanEqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>Between</ogc:ComparisonOperator><ogc:ComparisonOperator>EqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>NotEqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>GreaterThanEqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>Like</ogc:ComparisonOperator><ogc:ComparisonOperator>GreaterThan</ogc:ComparisonOperator><ogc:ComparisonOperator>NullCheck</ogc:ComparisonOperator><ogc:ComparisonOperator>LessThan</ogc:ComparisonOperator></ogc:ComparisonOperators><ogc:ArithmeticOperators><ogc:SimpleArithmetic/><ogc:Functions><ogc:FunctionNames/></ogc:Functions></ogc:ArithmeticOperators></ogc:Scalar_Capabilities><ogc:Id_Capabilities><ogc:EID/><ogc:FID/></ogc:Id_Capabilities></ogc:Filter_Capabilities></wfs:WFS_Capabilities>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0SercartlinGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0SercartlinGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0SercartlinGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?><wfs:WFS_Capabilities xmlns:deegree="http://www.deegree.org/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" updateSequence="0" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs ../wfs.xsd"><ows:ServiceIdentification><ows:ServiceType>WFS</ows:ServiceType><ows:ServiceTypeVersion>1.1.0</ows:ServiceTypeVersion><ows:Title>deegree WFS 2 Test</ows:Title><ows:Abstract>Test Web Feature Service</ows:Abstract><ows:Keywords><ows:Keyword>Persons</ows:Keyword><ows:Keyword>deegree</ows:Keyword><ows:Keyword>Test</ows:Keyword><ows:Type>String</ows:Type></ows:Keywords><ows:Fees>None</ows:Fees><ows:AccessConstraints>None</ows:AccessConstraints></ows:ServiceIdentification><ows:ServiceProvider><ows:ProviderName>lat/lon GmbH</ows:ProviderName><ows:ProviderSite xlink:href="http://www.lat-lon.de" xlink:type="simple"/><ows:ServiceContact><ows:IndividualName>Markus Schneider</ows:IndividualName><ows:PositionName>deegree core developer</ows:PositionName><ows:ContactInfo><ows:Phone><ows:Voice>+49 228 184960</ows:Voice><ows:Facsimile>+49 228 1849629</ows:Facsimile></ows:Phone><ows:Address><ows:DeliveryPoint>Aennchenstr. 19</ows:DeliveryPoint><ows:City>Bonn</ows:City><ows:AdministrativeArea>Northrhine-Westfalia</ows:AdministrativeArea><ows:PostalCode>53177</ows:PostalCode><ows:Country>Germany</ows:Country><ows:ElectronicMailAddress>mschneider@lat-lon.de</ows:ElectronicMailAddress></ows:Address><ows:OnlineResource xlink:href="http://www.lat-lon.de" xlink:type="simple"/><ows:HoursOfService>24x7</ows:HoursOfService><ows:ContactInstructions>Don't call us. We'll call you.</ows:ContactInstructions></ows:ContactInfo><ows:Role>PointOfContact</ows:Role></ows:ServiceContact></ows:ServiceProvider><ows:OperationsMetadata><ows:Operation name="GetFeature"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://sercartlin:9090/deegree/ogcwebservice?" xlink:type="simple"/><ows:Post xlink:href="http://sercartlin:9090/deegree/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="resultType"><ows:Value>results</ows:Value><ows:Value>hits</ows:Value></ows:Parameter><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="DescribeFeatureType"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://sercartlin:9090/deegree/ogcwebservice?" xlink:type="simple"/><ows:Post xlink:href="http://sercartlin:9090/deegree/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="GetCapabilities"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://sercartlin:9090/deegree/ogcwebservice?" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="AcceptVersions"><ows:Value>1.1.0</ows:Value><ows:Value>1.0.0</ows:Value></ows:Parameter><ows:Parameter name="AcceptFormats"><ows:Value>text/xml</ows:Value></ows:Parameter><ows:Parameter name="Sections"><ows:Value>ServiceIdentification</ows:Value><ows:Value>ServiceProvider</ows:Value><ows:Value>OperationsMetadata</ows:Value><ows:Value>FeatureTypeList</ows:Value><ows:Value>ServesGMLObjectTypeList</ows:Value><ows:Value>SupportsGMLObjectTypeList</ows:Value><ows:Value>Filter_Capabilities</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="GetFeatureWithLock"><ows:DCP><ows:HTTP><ows:Get xlink:href="http://sercartlin:9090/deegree/ogcwebservice?" xlink:type="simple"/><ows:Post xlink:href="http://sercartlin:9090/deegree/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="resultType"><ows:Value>results</ows:Value><ows:Value>hits</ows:Value></ows:Parameter><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="GetGMLObject"><ows:DCP><ows:HTTP><ows:Post xlink:href="http://sercartlin:9090/deegree/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="outputFormat"><ows:Value>text/xml; subtype=gml/3.1.1</ows:Value><ows:Value>text/xhtml</ows:Value></ows:Parameter><ows:Parameter name="LocalTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Parameter><ows:Parameter name="RemoteTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Parameter></ows:Operation><ows:Operation name="LockFeature"><ows:DCP><ows:HTTP><ows:Post xlink:href="http://sercartlin:9090/deegree/ogcwebservice" xlink:type="simple"/></ows:HTTP></ows:DCP><ows:Parameter name="lockAction"><ows:Value>ALL</ows:Value><ows:Value>SOME</ows:Value></ows:Parameter></ows:Operation><ows:Parameter name="srsName"><ows:Value>EPSG:4326</ows:Value></ows:Parameter><ows:Constraint name="RemoteTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Constraint><ows:Constraint name="LocalTraverseXLinkScope"><ows:Value>0</ows:Value><ows:Value>*</ows:Value></ows:Constraint><ows:Constraint name="DefaultMaxFeatures"><ows:Value>10000</ows:Value></ows:Constraint><ows:Constraint name="DefaultLockExpiry"><ows:Value>5</ows:Value></ows:Constraint></ows:OperationsMetadata><wfs:FeatureTypeList><wfs:FeatureType xmlns:app="http://www.deegree.org/app"><wfs:Name>app:Philosopher</wfs:Name><wfs:Title>European philosopher</wfs:Title><wfs:Abstract>Describes famous European philosophers</wfs:Abstract><ows:Keywords><ows:Keyword>philosopher</ows:Keyword><ows:Keyword>test</ows:Keyword></ows:Keywords><wfs:DefaultSRS>EPSG:4326</wfs:DefaultSRS><wfs:OutputFormats><wfs:Format>text/xml; subtype=gml/3.1.1</wfs:Format></wfs:OutputFormats><ows:WGS84BoundingBox><ows:LowerCorner>-180.0 -90.0</ows:LowerCorner><ows:UpperCorner>180.0 90.0</ows:UpperCorner></ows:WGS84BoundingBox></wfs:FeatureType></wfs:FeatureTypeList><ogc:Filter_Capabilities><ogc:Spatial_Capabilities><ogc:GeometryOperands><ogc:GeometryOperand>gml:Envelope</ogc:GeometryOperand><ogc:GeometryOperand>gml:Point</ogc:GeometryOperand><ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand><ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand></ogc:GeometryOperands><ogc:SpatialOperators><ogc:SpatialOperator name="Within"/><ogc:SpatialOperator name="Intersects"/><ogc:SpatialOperator name="Overlaps"/><ogc:SpatialOperator name="BBOX"/><ogc:SpatialOperator name="Crosses"/><ogc:SpatialOperator name="Contains"/><ogc:SpatialOperator name="Disjoint"/><ogc:SpatialOperator name="Beyond"/><ogc:SpatialOperator name="Equals"/><ogc:SpatialOperator name="Touches"/></ogc:SpatialOperators></ogc:Spatial_Capabilities><ogc:Scalar_Capabilities><ogc:LogicalOperators/><ogc:ComparisonOperators><ogc:ComparisonOperator>LessThanEqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>Between</ogc:ComparisonOperator><ogc:ComparisonOperator>EqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>NotEqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>GreaterThanEqualTo</ogc:ComparisonOperator><ogc:ComparisonOperator>Like</ogc:ComparisonOperator><ogc:ComparisonOperator>GreaterThan</ogc:ComparisonOperator><ogc:ComparisonOperator>NullCheck</ogc:ComparisonOperator><ogc:ComparisonOperator>LessThan</ogc:ComparisonOperator></ogc:ComparisonOperators><ogc:ArithmeticOperators><ogc:SimpleArithmetic/><ogc:Functions><ogc:FunctionNames/></ogc:Functions></ogc:ArithmeticOperators></ogc:Scalar_Capabilities><ogc:Id_Capabilities><ogc:EID/><ogc:FID/></ogc:Id_Capabilities></ogc:Filter_Capabilities></wfs:WFS_Capabilities><!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0SercartlinGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WFS_Capabilities version="1.0.0" updateSequence="null">
+<Service>
+	<Name>WebFeatureServer</Name>
+	<Title>IDEE-WFS</Title>
+	<Abstract>Web Feature Server maintained by the IDEE</Abstract>
+	<OnlineResource>http://www.idee.es:80/IDEE-WFS</OnlineResource>
+</Service>
+<Capability>
+	<Request><GetCapabilities><DCPType><HTTP><Get onlineResource="http://www.idee.es:80/IDEE-WFS/wfs" /><Post onlineResource="http://www.idee.es:80/IDEE-WFS/wfs" /></HTTP></DCPType></GetCapabilities><DescribeFeatureType><SchemaDescriptionLanguage><XMLSCHEMA/></SchemaDescriptionLanguage><DCPType><HTTP><Get onlineResource="http://www.idee.es:80/IDEE-WFS/wfs" /><Post onlineResource="http://www.idee.es:80/IDEE-WFS/wfs" /></HTTP></DCPType></DescribeFeatureType><GetFeature><ResultFormat><XML/><GML2/><FEATURECOLLECTION/></ResultFormat><DCPType><HTTP><Post onlineResource="http://www.idee.es:80/IDEE-WFS/wfs" /></HTTP></DCPType></GetFeature></Request></Capability><FeatureTypeList><Operations><Query/><Insert/></Operations><FeatureType><Name>EGM_GeodesiaPunto</Name><Title>EGM - Geodesia (Puntos)</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL25_Provincia</Name><Title>BDLL25 - Provincias</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>EGM_HidrografiaLinea</Name><Title>EGM - Hidrografia (Lineas)</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL200_Municipio</Name><Title>BDLL200 - Municipios</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>EGM_ConstruccionPunto</Name><Title>EGM - Construcciones (Puntos)</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>EGM_ConstruccionArea</Name><Title>EGM - Construcciones (Areas)</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL1000_Municipio</Name><Title>BDLL1000 - Municipios</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL200_Provincia</Name><Title>BDLL200 - Provincias</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>EGM_ViaComunicacionLinea</Name><Title>EGM - Vias de Comunicacion (Lineas)</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>geodesia_rediberia95</Name><Title>Geodesia - Red Iberia95</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-8.512081" miny="35.255527" maxx="4.570821" maxy="44.381012" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>EGM_LimiteAdministrativoArea</Name><Title>EGM - Limites Administrativos (Areas)</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL25_Municipio</Name><Title>BDLL25 - Municipios</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>geodesia_redroi</Name><Title>Geodesia - Red de orden inferior</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-10.222421" miny="34.632854" maxx="3.3913593" maxy="43.844494" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>geodesia_redbalear98</Name><Title>Geodesia - Red Balear98</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-1.5165758" miny="33.681564" maxx="11.65317" maxy="42.95063" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL1000_Provincia</Name><Title>BDLL1000 - Provincias</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL25_CCAA</Name><Title>BDLL25 - Comunidades Autonomas</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL1000_CCAA</Name><Title>BDLL1000 - Comunidades Autonomas</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>BDLL200_CCAA</Name><Title>BDLL200 - Comunidades Autonomas</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>EGM_ViaComunicacionPunto</Name><Title>EGM - Vias de Comunicacion (Puntos)</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-0.88047904" miny="42.3281" maxx="-0.7527092" maxy="42.423058" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>geodesia_redregente</Name><Title>Geodesia - Red regente</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-18.14367" miny="25.004084" maxx="9.133381" maxy="43.75037" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType><FeatureType><Name>geodesia_redregcan95</Name><Title>Geodesia - Red RegCan95</Title><Keywords></Keywords><SRS>EPSG:4230</SRS><LatLonBoundingBox minx="-18.14367" miny="26.075687" maxx="-13.4286" maxy="29.39756" ></LatLonBoundingBox><Operations><Query/><Insert/></Operations></FeatureType></FeatureTypeList></WFS_Capabilities>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetCapabilities.xml	(revision 42196)
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WFS_Capabilities version="1.0.0" xmlns="http://www.opengis.net/wfs" xmlns:topp="http://www.openplans.org/topp" xmlns:sde="http://geoserver.sf.net" xmlns:tiger="http://www.census.gov" xmlns:cite="http://www.opengeospatial.net/cite" xmlns:cv="http://sercartlin" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://sercartlin:8080/geoserver/schemas/wfs/1.0.0/WFS-capabilities.xsd">
+  <Service>
+    <Name>My GeoServer WFS</Name>
+    <Title>My GeoServer WFS</Title>
+    <Abstract>
+This is a description of your Web Feature Server.
+
+The GeoServer is a full transactional Web Feature Server, you may wish to limit
+GeoServer to a Basic service level to prevent modificaiton of your geographic
+data.
+     </Abstract>
+    <Keywords>WFS, WMS, GEOSERVER</Keywords>
+    <OnlineResource>http://geoserver.sourceforge.net/html/index.php</OnlineResource>
+    <Fees>NONE</Fees>
+    <AccessConstraints>NONE</AccessConstraints>
+  </Service>
+  <Capability>
+    <Request>
+      <GetCapabilities>
+        <DCPType>
+          <HTTP>
+            <Get onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+        <DCPType>
+          <HTTP>
+            <Post onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+      </GetCapabilities>
+      <DescribeFeatureType>
+        <SchemaDescriptionLanguage>
+          <XMLSCHEMA/>
+        </SchemaDescriptionLanguage>
+        <DCPType>
+          <HTTP>
+            <Get onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+        <DCPType>
+          <HTTP>
+            <Post onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+      </DescribeFeatureType>
+      <GetFeature>
+        <ResultFormat>
+          <GML2/>
+          <GML2-GZIP/>
+          <SHAPE-ZIP/>
+        </ResultFormat>
+        <DCPType>
+          <HTTP>
+            <Get onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+        <DCPType>
+          <HTTP>
+            <Post onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+      </GetFeature>
+      <Transaction>
+        <DCPType>
+          <HTTP>
+            <Get onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+        <DCPType>
+          <HTTP>
+            <Post onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+      </Transaction>
+      <LockFeature>
+        <DCPType>
+          <HTTP>
+            <Get onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+        <DCPType>
+          <HTTP>
+            <Post onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+      </LockFeature>
+      <GetFeatureWithLock>
+        <ResultFormat>
+          <GML2/>
+        </ResultFormat>
+        <DCPType>
+          <HTTP>
+            <Get onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+        <DCPType>
+          <HTTP>
+            <Post onlineResource="http://sercartlin:8080/geoserver/wfs?"/>
+          </HTTP>
+        </DCPType>
+      </GetFeatureWithLock>
+    </Request>
+  </Capability>
+  <FeatureTypeList>
+    <Operations>
+      <Query/>
+      <Insert/>
+      <Update/>
+      <Delete/>
+      <Lock/>
+    </Operations>
+    <FeatureType>
+      <Name>topp:states</Name>
+      <Title>USA Population</Title>
+      <Abstract>This is some census data on the states.</Abstract>
+      <Keywords>census, state boundaries, united states</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="-124.731422" miny="24.955967" maxx="-66.969849" maxy="49.371735"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>cv:comunic_lin_300k</Name>
+      <Title>comunic_lin_300k_Type</Title>
+      <Abstract>Generated from bdgis</Abstract>
+      <Keywords>comunic_lin_300k bdgis</Keywords>
+      <SRS>EPSG:23030</SRS>
+      <LatLongBoundingBox minx="-1.553581718346845" miny="37.81860412021984" maxx="0.5201469397607279" maxy="40.812203144186235"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>topp:tasmania_roads</Name>
+      <Title>tasmania_roads_Type</Title>
+      <Abstract>Generated from tasmania_roads_shapefile</Abstract>
+      <Keywords>Tasmania Roads</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="145.19754" miny="-43.423512" maxx="148.27298000000002" maxy="-40.852802"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>topp:tasmania_state_boundaries</Name>
+      <Title>tasmania_state_boundaries_Type</Title>
+      <Abstract>Generated from tasmania_state_boundaries_shapefile</Abstract>
+      <Keywords>Tasmania Australia State</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="143.83482400000003" miny="-43.648056" maxx="148.47914100000003" maxy="-39.573891"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>tiger:tiger_roads</Name>
+      <Title>tiger_roads_Type</Title>
+      <Abstract>Generated from DS_tiger_roads</Abstract>
+      <Keywords>tiger_roads DS_tiger_roads</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="-74.02722" miny="40.684221" maxx="-73.907005" maxy="40.878178"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>topp:tasmania_water_bodies</Name>
+      <Title>tasmania_water_bodies_Type</Title>
+      <Abstract>Generated from tasmania_water_bodies_shapefile</Abstract>
+      <Keywords>Tasmania Australia Water Bodies Lakes</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="145.97161899999998" miny="-43.031944" maxx="147.219696" maxy="-41.775558"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>tiger:poly_landmarks</Name>
+      <Title>poly_landmarks_Type</Title>
+      <Abstract>Generated from DS_poly_landmarks</Abstract>
+      <Keywords>DS_poly_landmarks poly_landmarks</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="-74.047185" miny="40.679648" maxx="-73.90782" maxy="40.882078"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>cv:poblacion_pnt_300k</Name>
+      <Title>poblacion_pnt_300k_Type</Title>
+      <Abstract>Generated from bdgis</Abstract>
+      <Keywords>bdgis poblacion_pnt_300k</Keywords>
+      <SRS>EPSG:23030</SRS>
+      <LatLongBoundingBox minx="-1.530864701640846" miny="37.8303465529358" maxx="0.72202148272345" maxy="40.76806812636717"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>tiger:giant_polygon</Name>
+      <Title>giant_polygon_Type</Title>
+      <Abstract>Generated from DS_giant_polygon</Abstract>
+      <Keywords>DS_giant_polygon giant_polygon</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="-180.0" miny="-90.0" maxx="180.0" maxy="90.0"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>topp:tasmania_cities</Name>
+      <Title>tasmania_cities_Type</Title>
+      <Abstract>Generated from tasmania_cities_shapefile</Abstract>
+      <Keywords>Tasmania Roads</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="145.19754" miny="-43.423512" maxx="148.27298000000002" maxy="-40.852802"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>tiger:poi</Name>
+      <Title>poi_Type</Title>
+      <Abstract>Generated from DS_poi</Abstract>
+      <Keywords>DS_poi poi</Keywords>
+      <SRS>EPSG:4326</SRS>
+      <LatLongBoundingBox minx="-74.0118315772888" miny="40.70754683896324" maxx="-74.00857344353275" maxy="40.711945649065406"/>
+    </FeatureType>
+    <FeatureType>
+      <Name>cv:embalses_pol_300k</Name>
+      <Title>embalses_pol_300k_Type</Title>
+      <Abstract>Generated from bdgis</Abstract>
+      <Keywords>bdgis embalses_pol_300k</Keywords>
+      <SRS>EPSG:23030</SRS>
+      <LatLongBoundingBox minx="-1.6296826542769236" miny="37.95000544047786" maxx="0.23815778024161066" maxy="40.729370875276324"/>
+    </FeatureType>
+  </FeatureTypeList>
+  <ogc:Filter_Capabilities>
+    <ogc:Spatial_Capabilities>
+      <ogc:Spatial_Operators>
+        <ogc:Disjoint/>
+        <ogc:Equals/>
+        <ogc:DWithin/>
+        <ogc:Beyond/>
+        <ogc:Intersect/>
+        <ogc:Touches/>
+        <ogc:Crosses/>
+        <ogc:Within/>
+        <ogc:Contains/>
+        <ogc:Overlaps/>
+        <ogc:BBOX/>
+      </ogc:Spatial_Operators>
+    </ogc:Spatial_Capabilities>
+    <ogc:Scalar_Capabilities>
+      <ogc:Logical_Operators/>
+      <ogc:Comparison_Operators>
+        <ogc:Simple_Comparisons/>
+        <ogc:Between/>
+        <ogc:Like/>
+        <ogc:NullCheck/>
+      </ogc:Comparison_Operators>
+      <ogc:Arithmetic_Operators>
+        <ogc:Simple_Arithmetic/>
+        <ogc:Functions>
+          <ogc:Function_Names>
+            <ogc:Function_Name nArgs="1">Area</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">between</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">boundary</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">boundaryDimension</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">buffer</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">bufferWithSegments</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">centroid</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">Collection_Min</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">contains</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">convexHull</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">crosses</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">difference</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">dimension</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">disjoint</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">distance</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">double2bool</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">endPoint</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">envelope</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">EqualInterval</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">equalsExact</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">equalsExactTolerance</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">equalTo</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">exteriorRing</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">geometryType</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">geomFromWKT</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">geomLength</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">getGeometryN</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">getX</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">getY</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">greaterEqualThan</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">greaterThan</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">if_then_else</ogc:Function_Name>
+            <ogc:Function_Name nArgs="11">in10</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">in2</ogc:Function_Name>
+            <ogc:Function_Name nArgs="4">in3</ogc:Function_Name>
+            <ogc:Function_Name nArgs="5">in4</ogc:Function_Name>
+            <ogc:Function_Name nArgs="6">in5</ogc:Function_Name>
+            <ogc:Function_Name nArgs="7">in6</ogc:Function_Name>
+            <ogc:Function_Name nArgs="8">in7</ogc:Function_Name>
+            <ogc:Function_Name nArgs="9">in8</ogc:Function_Name>
+            <ogc:Function_Name nArgs="10">in9</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">int2bbool</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">int2ddouble</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">interiorPoint</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">interiorRingN</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">intersection</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">intersects</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">isClosed</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">isEmpty</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">isLike</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">isNull</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">isRing</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">isSimple</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">isValid</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">isWithinDistance</ogc:Function_Name>
+            <ogc:Function_Name nArgs="0">length</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">lessEqualThan</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">lessThan</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">Max</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">Min</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">not</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">notEqualTo</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">numGeometries</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">numInteriorRing</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">numPoints</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">overlaps</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">parseBoolean</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">parseDouble</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">parseInt</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">pointN</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">relate</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">relatePattern</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">roundDouble</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">startPoint</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strConcat</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strEndsWith</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strEqualsIgnoreCase</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strIndexOf</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strLastIndexOf</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">strLength</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strMatches</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strStartsWith</ogc:Function_Name>
+            <ogc:Function_Name nArgs="3">strSubstring</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">strSubstringStart</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">strTrim</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">symDifference</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">touches</ogc:Function_Name>
+            <ogc:Function_Name nArgs="1">toWKT</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">union</ogc:Function_Name>
+            <ogc:Function_Name nArgs="2">within</ogc:Function_Name>
+          </ogc:Function_Names>
+        </ogc:Functions>
+      </ogc:Arithmetic_Operators>
+    </ogc:Scalar_Capabilities>
+  </ogc:Filter_Capabilities>
+</WFS_Capabilities>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetCapabilities.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTest.java	(revision 42196)
@@ -0,0 +1,240 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.taskplanning.retrieving;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.gvsig.remoteclient.taskplanning.IQueue;
+import org.gvsig.remoteclient.taskplanning.IRunnableTask;
+/**
+ * 
+ * @author jaume
+ *
+ */
+public class URLRetrieveTest extends TestCase {
+	private final static String tempDirectoryPath = System.getProperty("java.io.tmpdir")+"tmp-andami";
+	IQueue queue;
+	IRunnableTask task1, task2, task3, task4;
+	boolean finished1, finished2, finished3, finished4;
+	RetrieveListener listener1 = new RetrieveListener() {
+		public void transferEventReceived(RetrieveEvent event) {
+			int e = event.getType();
+			printMessage("listener1", event.getType());
+			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED || e == RetrieveEvent.REQUEST_CANCELLED )
+				finished1 = true;
+		}
+	};
+	
+	String protocol = URLRequest.HTTP;
+	String host1 = "192.168.0.223";
+	String page1 = "cgi-bin/mapserv_46.exe?map=c:\\ms4w\\Apache\\cgi-bin\\demo.map&&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=comunidades&SRS=EPSG:23030&BBOX=507522.0,4154976.282477341,942309.0,4552983.717522658&WIDTH=332&HEIGHT=305&FORMAT=image/png&STYLES=&TRANSPARENT=TRUE";
+	URLRequest request1;
+	
+	String host2 = "localhost";
+	String page2 = "aegCapabilities1.3.xml";
+	URLRequest request2;
+	RetrieveListener listener2 = new RetrieveListener() {
+		public void transferEventReceived(RetrieveEvent event) {
+			int e = event.getType();
+			printMessage("listener2", event.getType());
+			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED || e==RetrieveEvent.REQUEST_CANCELLED )
+				finished2 = true;
+
+		}
+	};
+	
+	String host3 = "localhost";
+	String page3 = "avalencia.ecw";
+	URLRequest request3;
+	RetrieveListener listener3 = new RetrieveListener() {
+		public void transferEventReceived(RetrieveEvent event) {
+			int e = event.getType();
+			printMessage("listener3", event.getType());
+			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED  || e == RetrieveEvent.REQUEST_CANCELLED )
+				finished3 = true;
+
+		}
+	};
+	
+	String host4 = "192.168.0.223";
+	String page4 = "prueba.rar";
+	URLRequest request4;
+	RetrieveListener listener4 = new RetrieveListener() {
+		public void transferEventReceived(RetrieveEvent event) {
+			int e = event.getType();
+			printMessage("listener4", event.getType());
+			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED  || e == RetrieveEvent.REQUEST_CANCELLED )
+				finished4 = true;
+
+		}
+	};
+	{
+		cleanFiles();
+	}
+	private static void cleanFiles(){
+		try{
+			File tempDirectory = new File(tempDirectoryPath);
+			
+			File[] files = tempDirectory.listFiles();
+			if (files!=null) {
+				for (int i = 0; i < files.length; i++) {
+					// s�lo por si en un futuro se necesitan crear directorios temporales
+					files[i].delete();
+				}
+			}
+			tempDirectory.delete();
+		} catch (Exception e) {	}
+	}
+	
+	
+	public void setUp() {
+		File tmpDir = new File(tempDirectoryPath);
+		if (!tmpDir.exists())
+			tmpDir.mkdir();
+		finished1 = finished2 = finished3 = finished4 = false;
+		System.out.println("\n\n\nSetting up test..");
+		queue = new RetrieveQueue("http://192.168.0.223/cgi-bin/mapserv_46.exe?map=c:\\ms4w\\Apache\\cgi-bin\\demo.map");
+		
+		request1 = new URLRequest();
+		// http://192.168.0.223/cgi-bin/mapserv_46.exe?map=c:\\ms4w\\Apache\\cgi-bin\\demo.map&&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=comunidades&SRS=EPSG:23030&BBOX=507522.0,4154976.282477341,942309.0,4552983.717522658&WIDTH=332&HEIGHT=305&FORMAT=image/png&STYLES=&TRANSPARENT=TRUE
+		request1.setProtocol(protocol);
+		request1.setHost(host1);
+		request1.setFile(page1);
+		request1.setFileName(tempDirectoryPath+File.separator+"task1");
+		request1.setRequestType(URLRequest.GET);
+		task1 = new URLRetrieveTask(request1, listener1); 
+		
+		request2 = new URLRequest();
+		// http://localhost/aegCapabilities1.3.xml
+		request2.setProtocol(protocol);
+		request2.setHost(host2);
+		request2.setFile(page2);
+		request2.setFileName(tempDirectoryPath+File.separator+"task2");
+		request2.setRequestType(URLRequest.GET);
+		task2 = new URLRetrieveTask(request2, listener2);
+		
+		request3 = new URLRequest();
+		// http://localhost/avalencia.ecw
+		request3.setProtocol(protocol);
+		request3.setHost(host3);
+		request3.setFile(page3);
+		request3.setFileName(tempDirectoryPath+File.separator+"task3");
+		request3.setRequestType(URLRequest.GET);
+		task3 = new URLRetrieveTask(request3, listener3);
+		
+		request4 = new URLRequest();
+		// http://192.168.0.223/prueba.rar
+		request4.setProtocol(protocol);
+		request4.setHost(host4);
+		request4.setFile(page4);
+		request4.setFileName(tempDirectoryPath+File.separator+"task4");
+		request4.setRequestType(URLRequest.GET);
+		
+		task4 = new URLRetrieveTask(request4, listener4);
+		
+	}
+	
+	public void testRetrieve() {
+		queue.put(task1);
+		queue.put(task2);
+		
+		while(!queue.isEmpty()) {		
+		}
+	}
+	
+	public void testCancelling() {
+		long time = System.currentTimeMillis();
+		
+		queue.put(task1);
+		queue.put(task2);
+		boolean more = true;
+		while (!queue.isEmpty()) {
+			if (more && System.currentTimeMillis()-time > 1000) { // wait 1 seconds and cancel
+				task2.cancel();
+				more = false;
+			}
+		}
+	}
+	
+	public void testRequestManager() {
+		System.out.println("tests parallel downloading from different servers");
+		request3.setFileName("task3");
+		// http://localhost/avalencia.ecw
+		
+		request4.setFileName("task4");
+		// http://192.168.0.223/prueba.rar
+		RequestManager manager = RequestManager.getInstance();
+		manager.addURLRequest(request3, listener3);
+		manager.addURLRequest(request4, listener4);
+		manager.addURLRequest(request4, listener1);
+		while (!(finished1 && finished3 && finished4)) { 
+			
+		}
+	}
+	
+	public void testCocurrentTransfers() {
+		finished1 = finished2 = finished3 = finished4 = false;
+		System.out.println("tests to merge two or more equivalent transfers into one");
+		RequestManager manager = RequestManager.getInstance();
+		//manager.removeURLRequest(request3);
+		request3.setFileName("task3");
+		
+		manager.addURLRequest(request3, listener1);
+		manager.addURLRequest(request3, listener2);
+		manager.addURLRequest(request3, listener3);
+		
+		manager.addURLRequest(request3, listener4);
+		while (!(finished1 && finished2 && finished3 && finished4)) { 
+			
+		}
+	}
+	
+	public void printMessage(String who, int code) {
+		switch (code) {
+		case RetrieveEvent.CONNECTING:
+			System.out.println(who+": connecting");
+			break;
+		case RetrieveEvent.TRANSFERRING:
+			System.out.println(who+": transferring");
+			break;
+		case RetrieveEvent.REQUEST_CANCELLED:
+			System.out.println(who+": cancelled");
+			break;
+		case RetrieveEvent.REQUEST_FINISHED:
+			System.out.println(who+": finished");
+			break;
+		case RetrieveEvent.REQUEST_FAILED:
+			System.err.println(who+": failed");
+			break;
+		case RetrieveEvent.NOT_STARTED:
+			System.out.println(who+": not started");
+			break;
+		case RetrieveEvent.POSTPROCESSING:
+			System.out.println(who+": postprocessing");
+			break;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/AllTests.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.gvsig.remoteclient.wcs.wcs_1_0_0.WCSProtocolHandler_1_0_0Test;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.gvsig.remoteClient");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(Test.class);
+		
+		//commented until there is a way to simulate the needed servers.
+		//suite.addTestSuite(URLRetrieveTest.class);
+		suite.addTestSuite(WCSProtocolHandler_1_0_0Test.class);
+		
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+/**
+ * 
+ * @author jaume
+ *
+ */
+public class WCSProtocolHandler_1_0_0Test extends TestCase {
+	WCSProtocolHandler1_0_0 handler1, handler2, handler3, handler4;
+	
+	public void setUp() {
+		System.out.println("Setting up test..");
+		handler1 = new WCSProtocolHandler1_0_0();
+		handler2 = new WCSProtocolHandler1_0_0();
+		handler3 = new WCSProtocolHandler1_0_0();
+		handler4 = new WCSProtocolHandler1_0_0();
+	}
+	
+	
+	
+	public void testParsing() {
+		long t1 = System.currentTimeMillis();
+		assertTrue(handler1.parseCapabilities(new File("testdata/wcs/WCS-hypnosGetCapabilities.xml")));
+		assertTrue(handler1.parseDescribeCoverage(new File("testdata/wcs/WCS-hypnosDescribeCoverage.xml")));
+		assertTrue(handler2.parseCapabilities(new File("testdata/wcs/WCS-simonCITCostasGetCapabilities.xml")));
+		assertTrue(handler2.parseDescribeCoverage(new File("testdata/wcs/WCS-simonCITCostasDescribeCoverage.xml")));
+		assertTrue(handler3.parseCapabilities(new File("testdata/wcs/WCS-simonCITSpotGetCapabilities.xml")));
+		assertTrue(handler3.parseDescribeCoverage(new File("testdata/wcs/WCS-simonCITSpotDescribeCoverage.xml")));
+		assertTrue(handler4.parseCapabilities(new File("testdata/wcs/WCS-ionicGetCapabilities.xml")));
+		assertTrue(handler4.parseDescribeCoverage(new File("testdata/wcs/WCS-ionicDescribeCoverage.xml")));
+		long t2 = System.currentTimeMillis();
+		System.out.println("Test parsing done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/java/org/cresques/cts/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/java/org/cresques/cts/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/java/org/cresques/cts/AllTests.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.cts;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.cresques.cts");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/java/org/cresques/cts/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.cresques">
+		<priority value="DEBUG" /> 
+	</category>
+	<category name="org.gvsig.fmap.crs">
+		<priority value="DEBUG" /> 
+	</category>
+
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/CresquesCtsLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/CresquesCtsLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/CresquesCtsLibrary.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl;
+
+import org.cresques.ProjectionLibrary;
+import org.cresques.impl.cts.ProjectionPool;
+
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class CresquesCtsLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsImplementationOf(ProjectionLibrary.class,1);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        CRSFactory.registerCRSFactory( new ProjectionPool());
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        // Nothing to do
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/CresquesCtsLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/wkt/WKT.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/wkt/WKT.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/wkt/WKT.java	(revision 42196)
@@ -0,0 +1,388 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.wkt;
+
+import java.util.ArrayList;
+
+/**
+ * Generates a WKT from CRS parameters.
+ * as, for example in
+ * "GEOGCS[\"ETRS89\","+
+        "DATUM[\"European_Terrestrial_Reference_System_1989\","+
+            "SPHEROID[\"GRS 1980\",6378137,298.257222101,"+
+                "AUTHORITY[\"EPSG\",\"7019\"]],"+
+            "AUTHORITY[\"EPSG\",\"6258\"]," +
+            "TOWGS84[0,0,0,0,0,0,0]],"+
+        "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],"+
+        "UNIT[\"degree\",0.01745329251994328, AUTHORITY[\"EPSG\",\"9122\"]],"+
+        "AUTHORITY[\"EPSG\",\"4258\"]]";
+    
+ * @author Luis W. Sevilla <sevilla_lui@gva.es>
+ *
+ */
+public abstract class WKT {
+
+	static class Authority {
+		String name;
+		String code;
+		public Authority(String n, String c) {
+			name = n;
+			code = c;
+		}
+		public String toWKT() {
+			return "AUTHORITY[\""+name+"\",\""+code+"\"]";
+		}
+	}
+
+	static class Parameter {
+		protected String name;
+		private String value;
+		protected Authority authority; // optional
+		
+		public Parameter(String n) {
+			name = n;
+		}
+		
+		public Parameter(String n, String v) {
+			name = n;
+			value = v;
+		}
+		public Parameter(String n, Authority a) {
+			name = n;
+			authority = a;
+		}
+		
+		public String toWKT() {
+			String txt = "PARAMETER[\""+name+"\","+value;
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt + "]";
+		}
+	}
+
+	static class Spheroid {
+		String name;
+		double semiMajor;
+		double inverseFlattening;
+		Authority authority = null; // optional
+		
+		public Spheroid(String n, double s, double f) {
+			name = n;
+			semiMajor = s;
+			inverseFlattening = f;
+		}
+		public Spheroid(String n, double s, double f, Authority a) {
+			name = n;
+			semiMajor = s;
+			inverseFlattening = f;
+			authority = a;
+		}
+		public String toWKT() {
+			String txt = "SPHEROID[\""+name+"\","+
+				semiMajor+","+inverseFlattening;
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt + "]";
+		}
+	}
+
+	static class ToWGS84 {
+		double dx = 0;
+		double dy = 0;
+		double dz = 0;
+		double ex = 0;
+		double ey = 0;
+		double ez = 0;
+		double ppm = 0;
+		public ToWGS84() {
+		}
+		public ToWGS84(double dx, double dy, double dz, double ex, double ey, double ez, double ppm) {
+			this.dx = dx;
+			this.dy = dy;
+			this.dz = dz;
+			this.ex = ex;
+			this.ey = ey;
+			this.ez = ez;
+			this.ppm = ppm;
+		}
+		public String toWKT() {
+			return "TOWGS84["+dx+","+dy+","+dz+","+ex+","+ey+","+ez+","+ppm+"]";
+		}
+	}
+
+	static class Datum {
+		String name;
+		Spheroid spheroid;
+		ToWGS84 towgs84 = new ToWGS84(); // optional
+		Authority authority; // optional
+		public Datum(String n, Spheroid s) {
+			init (n, s, new ToWGS84(), null);
+		}
+		public Datum(String n, Spheroid s, ToWGS84 t) {
+			init (n, s, t, null);
+		}
+		public Datum(String n, Spheroid s, Authority a) {
+			init (n, s, new ToWGS84(), a);
+		}
+		public Datum(String n, Spheroid s, ToWGS84 t, Authority a) {
+			init (n, s, t, a);
+		}
+		private void init(String n, Spheroid s,
+			ToWGS84 t, Authority a) {
+			name = n;
+			spheroid = s;
+			towgs84 = t;
+			authority = a;
+		}
+		public String toWKT() {
+			String txt = "DATUM[\""+name+"\","+spheroid.toWKT();
+			if (towgs84 != null)
+				txt += ","+towgs84.toWKT();
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt+"]";
+		}
+	}
+
+	static class PrimeM {
+		String name;
+		double longitude;
+		Authority authority = null; // optional
+		
+		public PrimeM(String n, double l) {
+			name = n;
+			longitude = l;
+		}
+		
+		public PrimeM(String n, double l, Authority a) {
+			name = n;
+			longitude = l;
+			authority = a;
+		}
+		
+		public String toWKT() {
+			String txt = "PRIMEM[\""+name+"\","+longitude;
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt + "]";
+		}
+	}
+
+	static class Unit {
+		String name;
+		double conversionFactor;
+		Authority authority; // optional
+		
+		public Unit(String n, double l) {
+			name = n;
+			conversionFactor = l;
+		}
+		
+		public Unit(String n, double l, Authority a) {
+			name = n;
+			conversionFactor = l;
+			authority = a;
+		}
+		
+		public String toWKT() {
+			String txt = "UNIT[\""+name+"\","+conversionFactor;
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt + "]";
+		}
+	}
+	
+	static class Orientation {
+		public final static int NORTH = 0;
+		public final static int SOUTH = 1;
+		public final static int EAST = 2;
+		public final static int WEST = 3;
+		public final static int UP = 4;
+		public final static int DOWN = 5;
+		public final static int OTHER = 6;
+		protected final String [] txt = {
+			"NORTH","SOUTH","EAST","WEST","UP","DOWN","OTHER"
+		};
+		protected int to = -1;
+		
+		public Orientation(int to) {
+			this.to = to;
+		}
+	}
+	
+	static class Axis extends Orientation {
+		String name;
+		
+		public Axis(String name, int to) {
+			super(to);
+			this.name = name;
+		}
+		
+		public String toWKT() {
+			return "AXIS[\""+name+"\","+txt[to]+ "]";
+		}
+	}
+	
+	static class TwinAxes {
+		Axis axe1;
+		Axis axe2;
+		
+		public TwinAxes(Axis a1, Axis a2) {
+			axe1 = a1;
+			axe2 = a2;
+		}
+
+		public String toWKT() {
+			return axe1.toWKT()+","+axe2.toWKT();
+		}
+
+	}
+
+	static class GeogCS extends WKT {
+		String name;
+		Datum datum;
+		PrimeM primeMeridian;
+		Unit unit;
+		TwinAxes axes = null; // optional
+		Authority authority = null; // optional
+		
+		public GeogCS(String n, Datum d, PrimeM p, Unit u) {
+			init(n, d, p, u, null, null);
+		}
+		
+		public GeogCS(String n, Datum d, PrimeM p, Unit u,
+				Authority a) {
+			init(n, d, p, u, null, a);
+		}
+		
+		public GeogCS(String n, Datum d, PrimeM p, Unit u,
+				TwinAxes t) {
+			init(n, d, p, u, t, null);
+		}
+		
+		public GeogCS(String n, Datum d, PrimeM p, Unit u,
+				TwinAxes t, Authority a) {
+			init(n, d, p, u, t, a);
+		}
+		
+		private void init(String n, Datum d, PrimeM p, Unit u,
+			TwinAxes t, Authority a) {
+			name = n;
+			datum = d;
+			primeMeridian = p;
+			unit = u;
+			axes = t;
+			authority = a;
+		}
+		
+		public String toWKT() {
+			String txt = "GEOGCS[\""+name+"\","+datum.toWKT()+
+				","+primeMeridian.toWKT()+","+unit.toWKT();
+			if (axes != null)
+				txt += ","+axes.toWKT();
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt+"]";
+		}
+	}
+
+	static class Projection extends Parameter {
+		public Projection(String n) {
+			super(n);
+		}
+		
+		public Projection(String n, Authority a) {
+			super(n,a);
+		}
+		
+		public String toWKT() {
+			String txt = "PROJECTION[\""+name+"\"";
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt + "]";
+		}
+	}
+
+	static class ProjCS extends Parameter {
+		GeogCS geogcs;
+		Projection proj;
+		ArrayList params = new ArrayList();
+		Unit unit;
+		TwinAxes axes = null; // optional
+
+		public ProjCS(String n, GeogCS cs, Projection prj, Unit u ) {
+			super(n);
+			Parameter [] p = {};
+			init(n, cs, prj, p, u, null);
+		}
+		
+		public ProjCS(String n, GeogCS cs, Projection prj,
+				Parameter [] p, Unit u ) {
+			super(n);
+			init(n, cs, prj, p, u, null);
+		}
+		
+		public ProjCS(String n, GeogCS cs, Projection prj,
+				Unit u, TwinAxes t, Authority a ) {
+			super(n, a);
+			Parameter [] p = {};
+			init(n, cs, prj, p, u, t);
+		}
+		
+		public ProjCS(String n, GeogCS cs, Projection prj,
+				Parameter [] p, Unit u, TwinAxes t, Authority a ) {
+			super(n, a);
+			init(n, cs, prj, p, u, t);
+		}
+		
+		private void init(String n, GeogCS cs, Projection prj,
+			Parameter [] p, Unit u, TwinAxes t) {
+			geogcs = cs;
+			proj = prj;
+			for (int i=0; i<p.length; i++)
+				params.add(p[i]);
+			unit = u;
+			axes = t;
+		}
+
+		public void add(Parameter p) {
+			params.add(p);
+		}
+		
+		public String toWKT() {
+			String txt = "PROJCS[\""+name+"\","+geogcs.toWKT()+
+				","+proj.toWKT();
+			for (int i=0; i<params.size();i++)
+				txt += ","+((Parameter)params.get(i)).toWKT();
+			txt += ","+unit.toWKT();
+			if (axes != null)
+				txt += ","+axes.toWKT();
+			if (authority != null)
+				txt += ","+authority.toWKT();
+			return txt+"]";
+		}
+	}
+
+	abstract public String toWKT();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/wkt/WKT.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/ProjectionPool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/ProjectionPool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/ProjectionPool.java	(revision 42196)
@@ -0,0 +1,384 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+import org.cresques.impl.cts.gt2.CSDatum;
+import org.cresques.impl.cts.gt2.CSGaussPt;
+import org.cresques.impl.cts.gt2.CSLambertCC;
+import org.cresques.impl.cts.gt2.CSMercator;
+import org.cresques.impl.cts.gt2.CSUTM;
+import org.cresques.impl.cts.gt2.CoordSys;
+
+
+/**
+ * Pool de proyeccions (cs+datum) conocidas.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class ProjectionPool implements ICRSFactory {
+    static TreeMap data = null;
+
+    static {
+        CoordSys cs = null;
+        data = new TreeMap();
+
+        cs = (new CSUTM(CSDatum.wgs84, 30)).toGeo();
+        cs.setAbrev("EPSG:4326"); // WGS84 (World Geodesic Datum)
+        data.put(cs.getAbrev(), cs);
+        data.put("CRS:84", cs); // CRS:84 = EPSG:4326
+
+        cs = (new CSUTM(CSDatum.ed50, 30)).toGeo();
+        cs.setAbrev("EPSG:4230"); // Datum Europeu Internacional ED50
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.d73, 30)).toGeo();
+        cs.setAbrev("EPSG:4274"); // Datum 73 de Lisboa
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.nad27, 30)).toGeo();
+        cs.setAbrev("EPSG:4267"); // NAD 27
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.nad83, 30)).toGeo();
+        cs.setAbrev("EPSG:4269"); // NAD 83
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.lomaQuintana, 30)).toGeo();
+        cs.setAbrev("EPSG:4288"); // PSAD 56 'Loma Quintana'
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.laCanoa, 30)).toGeo();
+        cs.setAbrev("EPSG:4247"); // PSAD 56 'Loma Quintana'
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.ntfParis, 30)).toGeo();
+        cs.setAbrev("EPSG:4807"); // NTF Paris
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.etrs89, 30)).toGeo();
+        cs.setAbrev("EPSG:4258"); // ETRS 89
+        data.put(cs.getAbrev(), cs);
+        for (int i = 1; i <= 60; i++) {
+            String huso = Integer.toString(i);
+
+            if (i < 10) {
+                huso = "0" + huso;
+            }
+
+            cs = new CSUTM(CSDatum.wgs84, i);
+            cs.setAbrev("EPSG:326" + huso);
+            data.put(cs.getAbrev(), cs);
+
+            cs = new CSUTM(CSDatum.ed50, i);
+            cs.setAbrev("EPSG:230" + huso);
+            data.put(cs.getAbrev(), cs);
+            if (i>2 && i<=23) {
+                cs = new CSUTM(CSDatum.nad27, i);
+                cs.setAbrev("EPSG:267" + huso);
+                data.put(cs.getAbrev(), cs);
+
+                cs = new CSUTM(CSDatum.nad83, i);
+                cs.setAbrev("EPSG:269" + huso);
+                data.put(cs.getAbrev(), cs);
+            }
+            if (i>27 && i<39) {
+                cs = new CSUTM(CSDatum.etrs89, i);
+                cs.setAbrev("EPSG:258" + huso);
+                data.put(cs.getAbrev(), cs);
+            }
+        }
+
+        cs = CSGaussPt.hgd73;
+        cs.setAbrev("EPSG:27492"); // Projec��o Gauss do Datum 73 de Lisboa (no EPSG found)
+        data.put(cs.getAbrev(), cs);
+
+        cs = new CSUTM(CSDatum.d73, 29);
+        cs.setAbrev("EPSG:27429"); // Projec��o Gauss do Datum 73 de Lisboa (no EPSG found)
+        data.put(cs.getAbrev(), cs);
+
+        for (int i = 18; i <= 21; i++) {
+            String huso = Integer.toString(i);
+
+            if (i < 10) {
+                huso = "0" + huso;
+            }
+
+            cs = new CSUTM(CSDatum.laCanoa, i);
+            cs.setAbrev("EPSG:247" + huso);
+            data.put(cs.getAbrev(), cs);
+        }
+
+        for (int i = 16; i <= 22; i++) {
+            String huso = Integer.toString(i);
+            // Psad56 Ecuador
+            cs = new CSUTM(CSDatum.lomaQuintana, i);
+            cs.setAbrev("EPSG:288" + huso);
+            data.put(cs.getAbrev(), cs);
+            cs = new CSUTM(CSDatum.lomaQuintana, i, "S");
+            cs.setAbrev("EPSG:288" + (i+60) );
+            data.put(cs.getAbrev(), cs);
+        }
+
+        //		cs = new CSLambertCC(CSDatum.nad27, -105D, 49D, 49D, 77D, 0, 0);
+        //		cs.setAbrev("LCCCan");
+        //		data.put(cs.getAbrev(), cs);
+        /* Para el server WMS de canad�:
+         * EPSG:42101
+         * EPSG:42304
+         * EPSG:4269
+         */
+        /*
+         * 42101,PROJCS["WGS 84 / LCC Canada",
+         * GEOGCS["WGS 84",DATUM["WGS_1984",
+         * SPHEROID["WGS_1984",6378137,298.257223563]],
+         * PRIMEM["Greenwich",0],UNIT["Decimal_Degree",0.0174532925199433]],
+         *
+         * PROJECTION["Lambert_Conformal_Conic_2SP"],
+         * PARAMETER["central_meridian",-95.0],
+         * PARAMETER["latitude_of_origin",0],
+         * PARAMETER["standard_parallel_1",49.0],
+         * PARAMETER["standard_parallel_2",77.0],
+         * PARAMETER["false_easting",0.0],
+         * PARAMETER["false_northing",-8000000.0],
+         * UNIT["Meter",1],AUTHORITY["EPSG","42101"]]
+         */
+        cs = new CSLambertCC(CSDatum.wgs84, -95, 0, 49, 77, 0, -8000000.0);
+        cs.setAbrev("EPSG:42101");
+        data.put(cs.getAbrev(), cs);
+
+        /* 42304,PROJCS["NAD83 / NRCan LCC Canada",
+         * GEOGCS["NAD83",DATUM["North_American_Datum_1983",
+         * SPHEROID["GRS_1980",6378137,298.257222101]],
+         * PRIMEM["Greenwich",0],
+         * UNIT["Decimal_Degree",0.0174532925199433]],
+         *
+         * PROJECTION["Lambert_Conformal_Conic_2SP"],
+         * PARAMETER["central_meridian",-95.0],
+         * PARAMETER["latitude_of_origin",49.0],
+         * PARAMETER["standard_parallel_1",49.0],
+         * PARAMETER["standard_parallel_2",77.0],
+         * PARAMETER["false_easting",0.0],
+         * PARAMETER["false_northing",0.0],
+         * UNIT["Meter",1],AUTHORITY["EPSG","42304"]]
+         */
+        cs = new CSLambertCC(CSDatum.nad83, -95, 49, 49, 77, 0, 0);
+        cs.setAbrev("EPSG:42304");
+        data.put(cs.getAbrev(), cs);
+
+        /*
+         * EPSG:26915 - NAD83 / UTM zone 15N
+         * EPSG:31466 - Gau�-Kr�ger band 2
+         * EPSG:31467 - Gau�-Kr�ger band 3
+         * EPSG:4314  - DHDN
+         */
+        /*
+         * 27572=PROJCS["NTF (Paris) / Lambert zone II",
+             GEOGCS["NTF (Paris)",
+                    DATUM["Nouvelle_Triangulation_Francaise_Paris",
+                          SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936269,
+                                   AUTHORITY["EPSG","7011"]],
+                          TOWGS84[-168,-60,320,0,0,0,0],
+                          AUTHORITY["EPSG","6807"]],
+                    PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],
+                    UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],
+                    AUTHORITY["EPSG","4807"]],
+             PROJECTION["Lambert_Conformal_Conic_1SP"],
+                        PARAMETER["latitude_of_origin",52],
+                        PARAMETER["central_meridian",0],
+                        PARAMETER["scale_factor",0.99987742],
+                        PARAMETER["false_easting",600000],
+                        PARAMETER["false_northing",2200000],
+                        UNIT["metre",1,AUTHORITY["EPSG","9001"]],
+                        AUTHORITY["EPSG","27572"]]
+         */
+
+        cs = new CSLambertCC(CSDatum.ntfParis, 0, 46.79999999999995, 0.99987742, 600000, 2200000);
+        cs.setAbrev("EPSG:27572");
+        data.put(cs.getAbrev(), cs);
+        
+        cs = new CSLambertCC(CSDatum.ntfParis, 0, 52, 0.99987742, 600000, 2200000);
+        cs.setAbrev("EPSG:27582");
+        data.put(cs.getAbrev(), cs);
+        /*
+         * # RGF93
+         * <4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs  <>
+         * # RGF93 / Lambert-93
+         */
+        cs = (new CSUTM(CSDatum.rgf93, 30)).toGeo();
+        cs.setAbrev("EPSG:4171"); // NTF Paris
+        data.put(cs.getAbrev(), cs);
+        /*
+         *  <2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3
+         *  +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0
+         *  +units=m +no_defs  <>
+         */
+        cs = new CSLambertCC(CSDatum.rgf93, 3.0, 46.5, 49.0, 44.0, 700000.0, 6600000.0);
+        cs.setAbrev("EPSG:2154");
+        data.put(cs.getAbrev(), cs);
+
+        cs = new CSMercator(CSDatum.wgs84);
+        cs.setAbrev("EPSG:54004");
+        data.put(cs.getAbrev(), cs);
+        cs.setAbrev("EPSG:9804");
+        data.put(cs.getAbrev(), cs);
+        
+        // Lo que faltaba: �planetas!
+        cs = (new CSUTM(CSDatum.moon, 30)).toGeo();
+        cs.setAbrev("IAU2000:30100"); // Moon
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.mars, 30)).toGeo();
+        cs.setAbrev("IAU2000:49900"); // Mars
+        data.put(cs.getAbrev(), cs);
+        
+        /*
+         * CRSs argentinos.
+         * coordenadas geograficas
+			PosGAr 4172 
+			PosGAr98 4190
+			
+			coordenadas proyectadas
+			POSGAR 94/Argentina 1 22191 
+			POSGAR 94/Argentina 2 22192
+			POSGAR 94/Argentina 3 22193
+			POSGAR 94/Argentina 4 22194
+			POSGAR 94/Argentina 5 22195
+			POSGAR 94/Argentina 6 22196
+			POSGAR 94/Argentina 7 22197
+			
+			POSGAR 98/Argentina 1 22181
+			POSGAR 98/Argentina 2 22182
+			POSGAR 98/Argentina 3 22183
+			POSGAR 98/Argentina 4 22184
+			POSGAR 98/Argentina 5 22185
+			POSGAR 98/Argentina 6 22186
+			POSGAR 98/Argentina 7 22187
+			
+			4221 GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
+			
+			22191	EPSG	22191	PROJCS["Argentina_Zone_1",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",1500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-72],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]	+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +units=m
+			22192	EPSG	22192	PROJCS["Argentina_Zone_2",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",2500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-69],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]	+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m
+			22193	EPSG	22193	PROJCS["Argentina_Zone_3",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",3500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-66],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]	+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +units=m
+			22194	EPSG	22194	PROJCS["Argentina_Zone_4",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",4500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-63],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]	+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +units=m
+			22195	EPSG	22195	PROJCS["Argentina_Zone_5",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",5500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-60],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]	+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=intl +units=m
+			22196	EPSG	22196	PROJCS["Argentina_Zone_6",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",6500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-57],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]	+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=intl +units=m
+			22197	EPSG	22197	PROJCS["Argentina_Zone_7",GEOGCS["GCS_Campo_Inchauspe",DATUM["D_Campo_Inchauspe",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",7500000],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",-54],PARAMETER["Scale_Factor",1],PARAMETER["Latitude_Of_Origin",-90],UNIT["Meter",1]]	+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=intl +units=m
+
+         */
+        cs = new CoordSys(CSDatum.posgar);
+        cs.setAbrev("EPSG:4172"); // Posgar
+        data.put(cs.getAbrev(), cs);
+        
+        cs = new CoordSys(
+			"GEOGCS[\"GCS_Campo_Inchauspe\"," +
+				"DATUM[\"D_Campo_Inchauspe\"," +
+					"SPHEROID[\"International_1924\",6378388,297],"+
+					"TOWGS84[0,0,0,0,0,0,0]]," +
+				"PRIMEM[\"Greenwich\",0]," +
+				"UNIT[\"Degree\",0.017453292519943295]]");
+        cs.setAbrev("EPSG:4221"); // Campo Inchauspe
+        data.put(cs.getAbrev(), cs);
+        
+       for (int i=1; i<=7; i++) {
+	        cs = new CoordSys(
+	        	"PROJCS[\"Argentina_Zone_"+i+"\"," +
+	        		"GEOGCS[\"GCS_Campo_Inchauspe\"," +
+	        			"DATUM[\"D_Campo_Inchauspe\"," +
+		        			"SPHEROID[\"International_1924\",6378388,297],"+
+		        			"TOWGS84[0,0,0,0,0,0,0]]," +
+		        		"PRIMEM[\"Greenwich\",0]," +
+		        		"UNIT[\"Degree\",0.017453292519943295]]," +
+		        	"PROJECTION[\"Transverse_Mercator\"]," +
+		        	"PARAMETER[\"False_Easting\",1500000]," +
+		        	"PARAMETER[\"False_Northing\",0]," +
+		        	"PARAMETER[\"Central_Meridian\","+(-75+3*i)+"]," +
+		        	"PARAMETER[\"Scale_Factor\",1]," +
+		        	"PARAMETER[\"Latitude_Of_Origin\",-90]," +
+		        	"UNIT[\"Meter\",1]]");
+	        cs.setAbrev("EPSG:2219"+i); // Posgar
+	        data.put(cs.getAbrev(), cs);
+        }
+       
+       /*
+        * pendiente de a�adir:
+        * 
+        * EPSG 3003: Montemario / Italy Zone 1 - Pendiente de a�adir
+      	* EPSG 4149: CH1903 - Pendiente de a�adir
+      	* Ecuador:
+      	*   PSAD56, Geo, UTM 16/17S,16/17N
+      	*/
+    }
+
+    /**
+     * Mete una nueva proyeccion en la Pool.
+     * @param name abreviatura de la proyecccion (i.e. EPSG:23030)
+     * @param proj Proyeccion
+     */
+    public static void add(String name, IProjection proj) {
+        data.put(name, proj);
+    }
+
+    /**
+     * Devuelve una proyeccion a partir de una cadena.
+     * @param name abreviatura de la proyecccion (i.e. EPSG:23030)
+     * @return Proyeccion si existe
+     */
+    public IProjection get(String name) {
+        IProjection proj = null;
+
+        if (ProjectionPool.data.containsKey(name)) {
+            proj = (IProjection) ProjectionPool.data.get(name);
+        } else {
+        	// Consultation to remote EPSG database
+        	// if (right)
+        	//    buil new IProjection from GML
+        	// else
+            System.err.println("ProjectionPool: Key '" + name + "' not set.");
+        }
+
+        return proj;
+    }
+
+    public static Iterator iterator() {
+        ArrayList projs = new ArrayList();
+
+        Iterator iter = data.entrySet().iterator();
+
+        while (iter.hasNext()) {
+            projs.add(((Map.Entry) iter.next()).getValue());
+        }
+
+        return projs.iterator();
+    }
+
+	public boolean doesRigurousTransformations() {
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/ProjectionPool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSUTM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSUTM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSUTM.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.gt2;
+
+import org.cresques.cts.UTM;
+import org.geotools.cs.AxisInfo;
+import org.geotools.cs.Projection;
+import org.geotools.units.Unit;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSUTM extends CoordSys implements UTM {
+    public CSUTM(CSDatum datum, int zone) {
+        super(datum);
+        init(datum, zone, "N");
+    }
+    
+    public CSUTM(CSDatum datum, int zone, String ns) {
+        super(datum);
+        init(datum, zone, ns);
+    }
+ 
+    public void init(CSDatum datum, int zone, String ns) {
+        Unit linearUnit = Unit.METRE;
+
+        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Transverse_Mercator");
+        params.setParameter("semi_major",
+                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
+        params.setParameter("semi_minor",
+                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
+        params.setParameter("central_meridian", (double) ((zone * 6) - 183));
+        params.setParameter("latitude_of_origin", 0.0);
+        params.setParameter("scale_factor", 0.9996);
+        params.setParameter("false_easting", 500000.0);
+        if (ns.toUpperCase().compareTo("S") == 0)
+        	params.setParameter("false_northing", 10000000.0);
+        else
+        	params.setParameter("false_northing", 0.0);
+
+        try {
+            Projection projection = csFactory.createProjection("UTM" + zone,
+                                                               "Transverse_Mercator",
+                                                               params);
+            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+                                                                         .toString(),
+                                                               geogCS,
+                                                               projection,
+                                                               linearUnit,
+                                                               AxisInfo.X,
+                                                               AxisInfo.Y);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado autom�ticamente
+            e.printStackTrace();
+        }
+    }
+
+    public double getScale(double minX, double maxX, double w, double dpi) {
+        double scale = super.getScale(minX, maxX, w, dpi);
+
+        if (projCS != null) { // Es geogr�fico; calcula la escala.
+            scale = ((maxX - minX) * // metros
+                    (dpi / 2.54 * 100.0)) / // px / metro
+                    w; // pixels
+        }
+
+        return scale;
+    }
+
+    public String toString() {
+        return projCS.toString();
+    }
+    
+    public Object clone() throws CloneNotSupportedException {
+        return CRSFactory.getCRS( this.getFullCode() );
+     }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSUTM.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSGaussPt.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSGaussPt.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSGaussPt.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.gt2;
+
+import org.geotools.cs.AxisInfo;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.Projection;
+
+import org.geotools.measure.Angle;
+
+import org.geotools.units.Unit;
+
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ *
+ */
+public class CSGaussPt extends CoordSys {
+    public static CSGaussPt hgd73 = new CSGaussPt(CSDatum.d73);
+
+    public CSGaussPt(CSDatum datum) {
+        super(datum);
+        geogCS = new GeographicCoordinateSystem(datum.getName(null),
+                                                datum.getDatum());
+
+        Unit linearUnit = Unit.METRE;
+
+        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Oblique_Stereographic");
+        params.setParameter("semi_major",
+                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
+        params.setParameter("semi_minor",
+                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
+        params.setParameter("central_meridian",
+                            (new Angle("8�07'54.862\"W")).degrees());
+
+        //params.setParameter("longitude_of_origin", (new Angle("8�07'54.862\"")).degrees());
+        params.setParameter("latitude_of_origin",
+                            (new Angle("39�40'N")).degrees());
+        params.setParameter("scale_factor", 1.0);
+        params.setParameter("false_easting", 0D); //180598D);
+        params.setParameter("false_northing", 0D); //-86990D);
+
+        try {
+            Projection projection = csFactory.createProjection("GAUSS",
+                                                               "Oblique_Stereographic",
+                                                               params);
+            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+                                                                         .toString(),
+                                                               geogCS,
+                                                               projection,
+                                                               linearUnit,
+                                                               AxisInfo.X,
+                                                               AxisInfo.Y);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado autom�ticamente
+            e.printStackTrace();
+        }
+    }
+
+    public String toString() {
+        return projCS.toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSGaussPt.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordTrans.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordTrans.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordTrans.java	(revision 42196)
@@ -0,0 +1,196 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.gt2;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.geotools.ct.CannotCreateTransformException;
+import org.geotools.ct.CoordinateTransformation;
+import org.geotools.ct.CoordinateTransformationFactory;
+import org.geotools.ct.MathTransform;
+import org.geotools.pt.CoordinatePoint;
+import org.opengis.referencing.operation.TransformException;
+
+
+//import org.geotools.pt.MismatchedDimensionException;
+
+/**
+ * Transforma coordenadas entre dos sistemas
+ * @see org.creques.cts.CoordSys
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+class CoordTrans implements ICoordTrans {
+    private CoordinateTransformationFactory trFactory = CoordinateTransformationFactory.getDefault();
+    private CoordinateTransformation tr = null;
+    private MathTransform mt = null;
+    private MathTransform mt2 = null;
+    private MathTransform mt3 = null;
+    private MathTransform mtDatum = null;
+    private CoordSys from = null;
+    private CoordSys to = null;
+    
+    private ICoordTrans invertedCT = null;
+
+    public CoordTrans(CoordSys from, CoordSys to) {
+        this.from = from;
+        this.to = to;
+
+        // Si los dos CoordSys son proyectados, entonces hay
+        // que hacer dos transformaciones (pasar por geogr�ficas)
+        // Si hay cambio de datum son 3 las transformaciones
+        try {
+            if (from.getDatum() != to.getDatum()) {
+                tr = trFactory.createFromCoordinateSystems(from.toGeo().getCS(),
+                                                           to.toGeo().getCS());
+                mtDatum = tr.getMathTransform();
+            }
+
+            if ((from.projCS != null) && (to.projCS != null)) {
+                CoordSys geogcs = from.toGeo();
+                tr = trFactory.createFromCoordinateSystems(from.getCS(),
+                                                           geogcs.getCS());
+                mt = tr.getMathTransform();
+
+                if (mtDatum != null) {
+                    mt2 = mtDatum;
+                }
+
+                geogcs = to.toGeo();
+                tr = trFactory.createFromCoordinateSystems(geogcs.getCS(),
+                                                           to.getCS());
+
+                if (mt2 == null) {
+                    mt2 = tr.getMathTransform();
+                } else {
+                    mt3 = tr.getMathTransform();
+                }
+            } else {
+                if (from.projCS == null) {
+                    mt = mtDatum;
+                }
+
+                tr = trFactory.createFromCoordinateSystems(from.getCS(),
+                                                           to.getCS());
+
+                if (mt == null) {
+                    mt = tr.getMathTransform();
+
+                    if (mtDatum != null) {
+                        mt2 = mtDatum;
+                    }
+                } else {
+                    mt2 = tr.getMathTransform();
+                }
+            }
+        } catch (CannotCreateTransformException e) {
+            // TODO Bloque catch generado autom�ticamente
+            e.printStackTrace();
+        }
+    }
+
+    public IProjection getPOrig() {
+        return from;
+    }
+
+    public IProjection getPDest() {
+        return to;
+    }
+
+    public ICoordTrans getInverted() {
+        if (invertedCT == null)
+            invertedCT = new CoordTrans(to, from);
+        return invertedCT;
+    }
+
+    public Point2D convert(Point2D ptOrig, Point2D ptDest) {
+        CoordinatePoint pt1 = new CoordinatePoint(ptOrig);
+        CoordinatePoint pt2 = new CoordinatePoint(0D, 0D);
+        ptDest = null;
+
+        try {
+            mt.transform(pt1, pt2);
+            ptDest = pt2.toPoint2D();
+
+            if (mt2 != null) {
+                mt2.transform(pt2, pt1);
+                ptDest = pt1.toPoint2D();
+
+                if (mt3 != null) {
+                    mt3.transform(pt1, pt2);
+                    ptDest = pt2.toPoint2D();
+                }
+            }
+
+            /*} catch (MismatchedDimensionException e) {
+                    // TODO Bloque catch generado autom�ticamente
+                    e.printStackTrace();
+            */
+        } catch (TransformException e) {
+            // TODO Bloque catch generado autom�ticamente
+            e.printStackTrace();
+        }
+
+        return ptDest;
+    }
+
+    public String toString() {
+        return tr.toString();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.ICoordTrans#convert(java.awt.geom.Rectangle2D)
+     */
+    public Rectangle2D convert(Rectangle2D rect) {
+        
+        Point2D pt1 = new Point2D.Double(rect.getMinX(), rect.getMinY());
+        Point2D pt2 = new Point2D.Double(rect.getMaxX(), rect.getMaxY());
+        Point2D pt3 = new Point2D.Double(rect.getMinX(), rect.getMaxY());
+        Point2D pt4 = new Point2D.Double(rect.getMaxX(), rect.getMinY());
+        
+        convert(pt1, pt1);
+        convert(pt2, pt2);
+        convert(pt3, pt3);
+        convert(pt4, pt4);
+
+        double min_x = Math.min(
+            Math.min(pt1.getX(), pt2.getX()),
+            Math.min(pt3.getX(), pt4.getX()));
+        double min_y = Math.min(
+            Math.min(pt1.getY(), pt2.getY()),
+            Math.min(pt3.getY(), pt4.getY()));
+        double max_x = Math.max(
+            Math.max(pt1.getX(), pt2.getX()),
+            Math.max(pt3.getX(), pt4.getX()));
+        double max_y = Math.max(
+            Math.max(pt1.getY(), pt2.getY()),
+            Math.max(pt3.getY(), pt4.getY()));
+        
+        return new Rectangle2D.Double(
+            min_x, min_y, max_x - min_x, max_y - min_y);
+        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordTrans.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSDatum.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSDatum.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSDatum.java	(revision 42196)
@@ -0,0 +1,217 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.gt2;
+
+import java.util.Locale;
+
+import org.cresques.cts.IDatum;
+import org.geotools.cs.CoordinateSystemFactory;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.HorizontalDatum;
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * Datum (y Ellipsoid) de GeoTools2.
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSDatum implements IDatum {
+    private static String line1 = "DATUM[\"WGS_1984\"," +
+                                  "SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]]," +
+                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]]";
+    private static String line2 = "DATUM[\"European_Datum_1950\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[-84,-107,-120,0,0,0,0],AUTHORITY[\"EPSG\",\"6230\"]]";
+    private static String line3 = "DATUM[\"Nouvelle_Triangulation_Francaise\"," +
+                                  "SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293627, AUTHORITY[\"EPSG\",\"7011\"]]," +
+                                  "TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6275\"]]";
+    private static String line4 = "DATUM[\"Datum 73\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY[\"EPSG\",\"4274\"]]";
+    private static String line5 = "DATUM[\"North_American_Datum_1927\"," +
+                                  "SPHEROID[\"Clarke 1866\",6378206.4,294.978698213901,AUTHORITY[\"EPSG\",\"7008\"]]," +
+                                  "TOWGS84[-3,142,183,0,0,0,0],AUTHORITY[\"EPSG\",\"6267\"]]";
+    private static String line6 = "DATUM[\"North_American_Datum_1983\"," +
+                                  "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," +
+                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]]";
+
+    /*
+     * INSERT INTO epsg_coordinatereferencesystem VALUES (
+     * 4288, 'Loma Quintana', 1313, 'geographic 2D', 6422, 6288,
+     * Null, Null, Null, Null, 'Geodetic survey.',
+     * 'Superseded by La Canoa (code 4247).', '',
+     * 'EPSG', '2004/01/06', '2003.37', 1, 0 );
+     *
+     *  DX (m) = -270.933
+            DY (m) =  115.599
+            DZ (m) = -360.226
+
+            EX (") = -5.266
+            EY (") = -1.238
+              EZ (")  =  2.381
+            FE (ppm) = -5.109
+     */
+    private static String line7 = "DATUM[\"Loma Quintana\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6288\"]]";
+
+    /*
+    # La Canoa
+    <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0
+    no_defs <>
+    # PSAD56
+    <4248> +proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 no_defs <>
+     */
+    private static String line8 = "DATUM[\"La Canoa\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[-270.933,115.599,-360.226,-5.266,-1.238,2.381,-5.109],AUTHORITY[\"EPSG\",\"6288\"]]";
+    private static String line9 = "GEOGCS[\"NTF (Paris)\","+
+    	"DATUM[\"Nouvelle_Triangulation_Francaise_Paris\"," +
+    	"SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936269,AUTHORITY[\"EPSG\",\"7011\"]]," +
+    	"TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"8903\"]]"+
+        ",PRIMEM[\"Paris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]]," +
+        "UNIT[\"grad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]]," +
+        "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
+        "AUTHORITY[\"EPSG\",\"4807\"]]";
+    
+    private static String line10 = "GEOGCS[\"RGF93\"," +
+		"DATUM[\"Reseau Geodesique Francais 1993\"," +
+	    "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," +
+	    "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],"+
+        "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," +
+        "UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," +
+        "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
+        "AUTHORITY[\"EPSG\",\"4171\"]]";
+    private static String line11 = "GEOGCS[\"ETRS89\","+
+        "DATUM[\"European_Terrestrial_Reference_System_1989\","+
+            "SPHEROID[\"GRS 1980\",6378137,298.257222101,"+
+                "AUTHORITY[\"EPSG\",\"7019\"]],"+
+            "AUTHORITY[\"EPSG\",\"6258\"]],"+
+        "PRIMEM[\"Greenwich\",0,"+
+            "AUTHORITY[\"EPSG\",\"8901\"]],"+
+        "UNIT[\"degree\",0.01745329251994328,"+
+            "AUTHORITY[\"EPSG\",\"9122\"]],"+
+        "AUTHORITY[\"EPSG\",\"4258\"]]";
+    //," +
+    //"TOWGS84[0,0,0,0,0,0,0]
+    private static String line12 =
+    	"GEOGCS[\"Mars 2000\","+
+	    	"DATUM[\"D_Mars_2000\","+
+	    		"SPHEROID[\"Mars_2000_IAU_IAG\",3396190.0, 169.89444722361179],"+
+	    	"TOWGS84[0,0,0,0,0,0,0]],"+
+		    "PRIMEM[\"Greenwich\",0],"+
+	    	"UNIT[\"Decimal_Degree\",0.0174532925199433]]";
+
+    public final static CSDatum wgs84 = new CSDatum(line1);
+    public final static CSDatum ed50 = new CSDatum(line2);
+    public final static CSDatum ntf = new CSDatum(line3);
+    public final static CSDatum d73 = new CSDatum(line4);
+    public final static CSDatum nad27 = new CSDatum(line5);
+    public final static CSDatum nad83 = new CSDatum(line6);
+    public final static CSDatum lomaQuintana = new CSDatum(line7);
+    public final static CSDatum laCanoa = new CSDatum(line8);
+    public static CSDatum etrs89 = null;
+    public static CSDatum ntfParis = null;
+    public static CSDatum posgar = null;
+    public static CSDatum rgf93 = null;
+    public static CSDatum mars = null;
+    public static CSDatum moon = null;
+    private String sGeo1 = "GEOGCS[\"WGS 84\",";
+    private String sGeo2 =
+        ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," +
+        "UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," +
+        "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
+        "AUTHORITY[\"EPSG\",\"4326\"]]";
+    private HorizontalDatum datum = null;
+    static {
+    	try {
+			ntfParis =  new CSDatum().fromWKT(line9);
+			rgf93 =  new CSDatum().fromWKT(line10);
+			etrs89 = new CSDatum().fromWKT(line11);
+			posgar = new CSDatum().fromWKT(
+				"GEOGCS[\"POSGAR\","+
+				"DATUM[\"POSGAR\"," +
+                "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," +
+                "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]]"+
+                ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," +
+                "UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," +
+                "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
+                "AUTHORITY[\"EPSG\",\"4172\"]]");
+			mars = new CSDatum().fromWKT(line12);
+			moon = new CSDatum().fromWKT(
+				"GEOGCS[\"Moon 2000\"," +
+				"DATUM[\"D_Moon_2000\"," +
+				"SPHEROID[\"Moon_2000_IAU_IAG\",1737400.0, 0.0]," +
+		    	"TOWGS84[0,0,0,0,0,0,0]],"+
+				"PRIMEM[\"Greenwich\",0]," +
+				"UNIT[\"Decimal_Degree\",0.0174532925199433]]");
+		} catch (FactoryException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+    }
+
+    public CSDatum() {
+    }
+
+    public CSDatum(HorizontalDatum datum) {
+    	this.datum = datum;
+    }
+
+    public CSDatum(String sDatum) {
+        try {
+            fromWKT(sGeo1 + sDatum + sGeo2);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado autom�ticamente
+            e.printStackTrace();
+        }
+    }
+    
+    public CSDatum fromWKT(String s) throws FactoryException {
+        datum = ((GeographicCoordinateSystem) CoordinateSystemFactory.getDefault()
+                .createFromWKT(s)).getHorizontalDatum();
+        return this;
+    }
+
+    public String getName(Locale loc) {
+        return datum.getName().toString();
+    }
+
+    HorizontalDatum getDatum() {
+        return datum;
+    }
+
+    public double getESemiMajorAxis() {
+        return datum.getEllipsoid().getSemiMajorAxis();
+    }
+
+    public double getEIFlattening() {
+        return datum.getEllipsoid().getInverseFlattening();
+    }
+
+    public String toString() {
+        return datum.toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSDatum.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/gt2.dfPackage
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/gt2.dfPackage	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/gt2.dfPackage	(revision 42196)
@@ -0,0 +1,68 @@
+package id453jodxljqzpfdxljry0t;
+
+/**
+@version 2.0
+@physicalPackage
+@__modelType diagram 
+*/
+class diagram {
+/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CoordTrans:oiref><oihard>
+@__modelType reference 
+*/
+class reference {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CoordSys:oiref><oihard>
+@__modelType reference 
+*/
+class reference4 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSUTM:oiref><oihard>
+@__modelType reference 
+*/
+class reference5 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSDatum:oiref><oihard>
+@__modelType reference 
+*/
+class reference6 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSLambertCC:oiref><oihard>
+@__modelType reference 
+*/
+class reference7 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSGaussPt:oiref><oihard>
+@__modelType reference 
+*/
+class reference8 {
+}}/**
+@__tags
+@shapeType ClassDiagram 
+*/
+class __tags {
+}/**
+@__options 
+*/
+class __options {
+}/**
+@__positions <oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#wgs84:oiref>=560,360,560,530,876,530,876,200,713,200:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#d73:oiref>=649,360,649,434,787,434,787,296,713,296:oigroup>
+<oigroup:<oiref:java#Extends#org.cresques.cts.gt2.CSLambertCC#org.cresques.cts.gt2.CoordSys:oiref>=440,630,440,392:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CoordSys:oiref>=270,10,200,382,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CoordSys#datum:oiref>=470,185,550,185:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#nad27:oiref>=681,360,681,402,755,402,755,328,713,328:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSUTM:oiref>=548,630,110,117,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#ntf:oiref>=617,360,617,466,819,466,819,264,713,264:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSDatum:oiref>=550,10,163,350,1:oigroup>
+<oigroup:<oiref:java#Extends#org.cresques.cts.gt2.CSUTM#org.cresques.cts.gt2.CoordSys:oiref>=603,630,455,392:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSLambertCC:oiref>=426,630,102,101,1:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSGaussPt:oiref>=230,630,124,110,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#ed50:oiref>=585,360,585,498,851,498,851,232,713,232:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSGaussPt#hgd73:oiref>=332,740,332,772,386,772,386,718,354,718:oigroup>
+<oigroup:<oiref:java#Extends#org.cresques.cts.gt2.CSGaussPt#org.cresques.cts.gt2.CoordSys:oiref>=321,630,321,392:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CoordTrans:oiref>=10,630,200,318,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CoordTrans#from:oiref>=110,630,295,392:oigroup> 
+*/
+class __positions {
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSLambertCC.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSLambertCC.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSLambertCC.java	(revision 42196)
@@ -0,0 +1,130 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.gt2;
+
+import org.geotools.cs.AxisInfo;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.Projection;
+
+import org.geotools.units.Unit;
+
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ *
+ */
+public class CSLambertCC extends CoordSys {
+    public CSLambertCC(CSDatum datum, double meridian, double origin,
+                       double sp1, double sp2, double est, double nort) {
+        super(datum);
+
+        geogCS = new GeographicCoordinateSystem(datum.getName(null),
+                                                datum.getDatum());
+
+        Unit linearUnit = Unit.METRE;
+
+        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Lambert_Conformal_Conic_2SP");
+        params.setParameter("semi_major",
+                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
+        params.setParameter("semi_minor",
+                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
+        params.setParameter("central_meridian", meridian);
+        params.setParameter("latitude_of_origin", origin);
+        params.setParameter("standard_parallel_1", sp1);
+        params.setParameter("standard_parallel_2", sp2);
+        params.setParameter("false_easting", est);
+        params.setParameter("false_northing", nort);
+
+        try {
+            Projection projection = csFactory.createProjection("Lambert",
+                                                               "Lambert_Conformal_Conic_2SP",
+                                                               params);
+            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+                                                                         .toString(),
+                                                               geogCS,
+                                                               projection,
+                                                               linearUnit,
+                                                               AxisInfo.X,
+                                                               AxisInfo.Y);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado autom�ticamente
+            e.printStackTrace();
+        }
+    }
+
+    public CSLambertCC(CSDatum datum, double meridian, double origin,
+    		double sf, double est, double nort) {
+    	super(datum);
+    	
+    	geogCS = new GeographicCoordinateSystem(datum.getName(null),
+    			datum.getDatum());
+    	
+    	Unit linearUnit = Unit.METRE;
+    	
+    	javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Lambert_Conformal_Conic_1SP");
+    	params.setParameter("semi_major",
+    			datum.getDatum().getEllipsoid().getSemiMajorAxis());
+    	params.setParameter("semi_minor",
+    			datum.getDatum().getEllipsoid().getSemiMinorAxis());
+    	params.setParameter("central_meridian", meridian);
+    	params.setParameter("latitude_of_origin", origin);
+    	params.setParameter("scale_factor", sf);
+    	params.setParameter("false_easting", est);
+    	params.setParameter("false_northing", nort);
+    	
+    	try {
+    		Projection projection = csFactory.createProjection("Lambert",
+    				"Lambert_Conformal_Conic_1SP",
+					params);
+    		projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+    				.toString(),
+					geogCS,
+					projection,
+					linearUnit,
+					AxisInfo.X,
+					AxisInfo.Y);
+    	} catch (FactoryException e) {
+    		// TODO Bloque catch generado autom�ticamente
+    		e.printStackTrace();
+    	}
+    }
+    
+    public double getScale(double minX, double maxX, double w, double dpi) {
+        double scale = super.getScale(minX, maxX, w, dpi);
+
+        if (projCS != null) { // Es geogr�fico; calcula la escala.
+            scale = ((maxX - minX) * // metros
+                    (dpi / 2.54 * 100.0)) / // px / metro
+                    w; // pixels
+        }
+
+        return scale;
+    }
+    
+    public String toString() {
+        return projCS.toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSLambertCC.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSMercator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSMercator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSMercator.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.gt2;
+
+import org.geotools.cs.AxisInfo;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.Projection;
+
+import org.geotools.units.Unit;
+
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSMercator extends CoordSys {
+    public CSMercator(CSDatum datum) {
+        super(datum);
+        geogCS = new GeographicCoordinateSystem(datum.getName(null),
+                                                datum.getDatum());
+
+        Unit linearUnit = Unit.METRE;
+
+        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Mercator");
+        params.setParameter("semi_major",
+                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
+        params.setParameter("semi_minor",
+                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
+        params.setParameter("central_meridian", 0D);
+        params.setParameter("latitude_of_origin", 0D);
+        params.setParameter("scale_factor", 1D);
+        params.setParameter("false_easting", 0D);
+        params.setParameter("false_northing", 0D);
+
+        try {
+            Projection projection = csFactory.createProjection("Mercator",
+                                                               "Mercator_1SP",
+                                                               params);
+            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+                                                                         .toString(),
+                                                               geogCS,
+                                                               projection,
+                                                               linearUnit,
+                                                               AxisInfo.X,
+                                                               AxisInfo.Y);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado autom�ticamente
+            e.printStackTrace();
+        }
+    }
+
+    public double getScale(double minX, double maxX, double w, double dpi) {
+        double scale = super.getScale(minX, maxX, w, dpi);
+
+        if (projCS != null) { // Es geogr�fico; calcula la escala.
+            scale = ((maxX - minX) * // metros
+                    (dpi / 2.54 * 100.0)) / // px / metro
+                    w; // pixels
+        }
+
+        return scale;
+    }
+
+    public String toString() {
+        return projCS.toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CSMercator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordSys.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordSys.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordSys.java	(revision 42196)
@@ -0,0 +1,227 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.cts.gt2;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+import org.geotools.cs.CoordinateSystem;
+import org.geotools.cs.CoordinateSystemFactory;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.ProjectedCoordinateSystem;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * Sistema de Coordenadas (Proyecci�n).
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CoordSys implements IProjection {
+    private static final Color basicGridColor = new Color(64, 64, 64, 128);
+    protected CoordinateSystemFactory csFactory = CoordinateSystemFactory.getDefault();
+    protected CSDatum datum = null;
+    protected GeographicCoordinateSystem geogCS = null;
+    protected ProjectedCoordinateSystem projCS = null;
+    protected String abrev = "";
+    Color gridColor = basicGridColor;
+
+    public CoordSys(CSDatum datum) {
+        this.datum = datum;
+        this.geogCS = new GeographicCoordinateSystem(datum.getName(null), datum.getDatum());
+	}
+
+    public CoordSys(String wkt) {
+    	try {
+        	//((GeographicCoordinateSystem)
+    		CoordinateSystem cs = CoordinateSystemFactory.getDefault().createFromWKT(wkt);
+//			 ).getHorizontalDatum();
+    		if (cs instanceof GeographicCoordinateSystem)
+    			geogCS = (GeographicCoordinateSystem) cs;
+    		if (cs instanceof ProjectedCoordinateSystem) {
+    			projCS = (ProjectedCoordinateSystem) cs;
+    			geogCS = projCS.getGeographicCoordinateSystem();
+    		}
+    		datum = new CSDatum(geogCS.getHorizontalDatum());
+    	} catch (FactoryException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+    }
+
+    /**
+     * Crea un nuevo CoordSys geogr�fico a partir de uno proyectado.
+     * Si el actual es geogr�fico retorna el mismo.
+     * @return
+     */
+    public CoordSys toGeo() {
+        CoordSys coordSys = new CoordSys((CSDatum) getDatum());
+
+        if (geogCS != null) {
+            coordSys.geogCS = this.geogCS;
+        } else {
+            coordSys.geogCS = projCS.getGeographicCoordinateSystem();
+        }
+
+        return coordSys;
+    }
+
+    public IDatum getDatum() {
+        return datum;
+    }
+
+    public CoordinateSystem getCS() {
+        if (projCS != null) {
+            return projCS;
+        }
+
+        return geogCS;
+    }
+
+    public CoordinateSystem getGeogCS() {
+        if (geogCS != null) {
+            return geogCS;
+        }
+
+        return projCS.getGeographicCoordinateSystem();
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#createPoint(double, double)
+     */
+    public Point2D createPoint(double x, double y) {
+        return new Point2D.Double(x, y);
+    }
+
+    public String toString() {
+        if (projCS != null) {
+            return projCS.toString();
+        }
+
+        return geogCS.toString();
+    }
+
+    public void setAbrev(String abrev) {
+        this.abrev = abrev;
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#drawGrid(java.awt.Graphics2D, org.cresques.geo.ViewPortData)
+     */
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        // TODO Ap�ndice de m�todo generado autom�ticamente
+    }
+
+    public void setGridColor(Color c) {
+        gridColor = c;
+    }
+
+    public Color getGridColor() {
+        return gridColor;
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#toGeo(java.awt.geom.Point2D)
+     */
+    public Point2D toGeo(Point2D pt) {
+    //TODO VCN Esto si no lo comento no me trasforma el punto en coordenadas geogr�ficas.
+//        if (getGeogCS() == geogCS) {
+//            return pt;
+//        } else {
+            CoordTrans ct = new CoordTrans(this, toGeo());
+
+            return ct.convert(pt, null);
+//        }
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#fromGeo(java.awt.geom.Point2D, java.awt.geom.Point2D)
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D mPt) {
+        // TODO Ap�ndice de m�todo generado autom�ticamente
+        return null;
+    }
+
+    public double getScale(double minX, double maxX, double w, double dpi) {
+        double scale = 0D;
+
+        if (projCS == null) { // Es geogr�fico; calcula la escala.
+            scale = ((maxX - minX) * // grados
+
+            // 1852.0 metros x minuto de meridiano
+            (dpi / 2.54 * 100.0 * 1852.0 * 60.0)) / // px / metro
+                    w; // pixels
+        }
+
+        return scale;
+    }
+    public Rectangle2D getExtent(Rectangle2D extent,double scale,double wImage,double hImage,double mapUnits,double distanceUnits,double dpi) {
+    	double w =0;
+		double h =0;
+		double wExtent =0;
+		double hExtent =0;
+    	if (projCS!=null) {
+			w = ((wImage / dpi) * 2.54);
+			h = ((hImage / dpi) * 2.54);
+			wExtent =w * scale*distanceUnits/ mapUnits;
+			hExtent =h * scale*distanceUnits/ mapUnits;
+
+		}else {
+			w = ((wImage / dpi) * 2.54);
+			h = ((hImage / dpi) * 2.54);
+			wExtent =(w*scale*distanceUnits)/ (mapUnits*1852.0*60.0);
+			hExtent =(h*scale*distanceUnits)/ (mapUnits*1852.0*60.0);
+		}
+    	double xExtent = extent.getCenterX() - wExtent/2;
+		double yExtent = extent.getCenterY() - hExtent/2;
+		Rectangle2D rec=new Rectangle2D.Double(xExtent,yExtent,wExtent,hExtent);
+    	return  rec;
+    }
+    public boolean isProjected() {
+    	return projCS != null;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		return new CoordTrans(this, (CoordSys) dest);
+	}
+
+	public String getFullCode() {
+		return getAbrev();
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+	       return CRSFactory.getCRS( this.getFullCode() );
+	    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/cts/gt2/CoordSys.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/CCLambert.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/CCLambert.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/CCLambert.java	(revision 42196)
@@ -0,0 +1,145 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Proyeccion de Conica Comforme Lambert
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class CCLambert extends Projection {
+    static String name = "Conica Comforme Lambert";
+    static String abrev = "CCLam";
+
+    public CCLambert(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+    }
+
+    public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getAbrev() {
+        return abrev;
+    }
+
+    public static CCLambert getProjection(Ellipsoid eli) {
+        return new CCLambert(eli);
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("CCL") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new Point2D.Double(x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D lPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo(lPt, gPt);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(Point2D lPt, GeoPoint gPt) {
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D lPt) {
+        return lPt;
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        grid = new Graticule(this);
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        // TODO Auto-generated method stub
+        return -1D;
+    }
+
+	/* (non-Javadoc)
+	 * @see org.cresques.cts.IProjection#getExtent(java.awt.geom.Rectangle2D, double, double, double, double, double, double)
+	 */
+	public Rectangle2D getExtent(Rectangle2D extent, double scale, double wImage, double hImage, double mapUnits, double distanceUnits, double dpi) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.cts.IProjection#getFullCode()
+	 */
+	public String getFullCode() {
+		return getAbrev();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/CCLambert.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/package.html	(revision 42196)
@@ -0,0 +1,29 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<html>
+	<body>Clases relacionadas con coverturas espaciales.
+</body>
+</html>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/Hoja.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/Hoja.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/Hoja.java	(revision 42196)
@@ -0,0 +1,195 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo.cover;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Projected;
+
+import org.cresques.px.Extent;
+
+import java.awt.geom.Point2D;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import java.util.Vector;
+
+
+/**
+ * @author Luis W. Sevilla <sevilla_lui@gva.es>
+ */
+public class Hoja implements Projected {
+    IProjection proj;
+    String code = null;
+    String name = null;
+    Extent extent = null;
+    Point2D tl;
+    Point2D tr;
+    Point2D bl;
+    Point2D br;
+
+    public Hoja(IProjection proj, String code, String name) {
+        this.proj = proj;
+        this.code = code;
+        this.name = name;
+        tl = tr = bl = br = null;
+    }
+
+    public Hoja(String cod, Point2D p1, Point2D p2, Point2D p3, Point2D p4,
+                String name) {
+        code = cod;
+        tl = p1;
+        tr = p2;
+        bl = p3;
+        br = p4;
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public Hoja(String cod, Point2D[] pt, String name) {
+        code = cod;
+        tl = pt[0];
+        tr = pt[1];
+        br = pt[2];
+        bl = pt[3];
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public Hoja(String cod, Vector pt, String name) {
+        code = cod;
+        tl = (Point2D) pt.get(0);
+        tr = (Point2D) pt.get(1);
+        br = (Point2D) pt.get(2);
+        bl = (Point2D) pt.get(3);
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public Hoja(String cod, Hoja h, String name) {
+        code = cod;
+        tl = h.tl;
+        tr = h.tr;
+        br = h.br;
+        bl = h.bl;
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public Point2D getTL() {
+        return tl;
+    }
+
+    public void setTL(Point2D pt) {
+        tl = pt;
+        extent.add(pt);
+    }
+
+    public Point2D getTR() {
+        return tr;
+    }
+
+    public void setTR(Point2D pt) {
+        tr = pt;
+        extent.add(pt);
+    }
+
+    public Point2D getBL() {
+        return bl;
+    }
+
+    public void setBL(Point2D pt) {
+        bl = pt;
+        extent.add(pt);
+    }
+
+    public Point2D getBR() {
+        return br;
+    }
+
+    public void setBR(Point2D pt) {
+        br = pt;
+        extent.add(pt);
+    }
+
+    public Extent getExtent() {
+        return extent;
+    }
+
+    private void setExtent() {
+        extent = new Extent(tl, br);
+        extent.add(tr);
+        extent.add(bl);
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Point2D[] getVertex() {
+        Point2D[] v = { tl, tr, br, bl };
+
+        return v;
+    }
+
+    public void toXml(OutputStream os) {
+    }
+
+    public void fromXml(InputStream is) {
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/cover/Hoja.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmZone.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmZone.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmZone.java	(revision 42196)
@@ -0,0 +1,404 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import geojava.GeoUtm;
+import geojava.Ra2De;
+import geojava.UtmGeo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+public class UtmZone extends Projection {
+    static String name = "UTM";
+    static String abrev = "UTM";
+    private final static UtmZone ed5028N = new UtmZone(Ellipsoid.ed50, 28, 0,
+                                                       0.0);
+    private final static UtmZone ed5029N = new UtmZone(Ellipsoid.ed50, 29, 0,
+                                                       0.0);
+    private final static UtmZone ed5030N = new UtmZone(Ellipsoid.ed50, 30, 0,
+                                                       0.0);
+    private final static UtmZone ed5031N = new UtmZone(Ellipsoid.ed50, 31, 0,
+                                                       0.0);
+    private final static UtmZone hayford28N = new UtmZone(Ellipsoid.hayford,
+                                                          28, 0, 0.0);
+    private final static UtmZone hayford29N = new UtmZone(Ellipsoid.hayford,
+                                                          29, 0, 0.0);
+    private final static UtmZone hayford30N = new UtmZone(Ellipsoid.hayford,
+                                                          30, 0, 0.0);
+    private final static UtmZone hayford31N = new UtmZone(Ellipsoid.hayford,
+                                                          31, 0, 0.0);
+    static GeoUtm geoutm = new GeoUtm();
+    static UtmGeo utmgeo = new UtmGeo();
+    public int Zone = 30;
+    public int Hemisphere = 0;
+    public double H = 0.0;
+
+    public UtmZone(Ellipsoid eli, int zone, int hemisphere, double h) {
+        super(eli);
+        Zone = zone;
+        Hemisphere = hemisphere;
+        H = h;
+        grid = new Graticule(this);
+    }
+
+    public String getAbrev() {
+        return abrev + Zone;
+    }
+
+    public static UtmZone getProjection(Ellipsoid eli, int zone, int hemisphere) {
+        if ((eli == Ellipsoid.hayford) && (hemisphere == 0)) {
+            switch (zone) {
+            case 28:
+                return hayford28N;
+
+            case 29:
+                return hayford29N;
+
+            case 30:
+                return hayford30N;
+
+            case 31:
+                return hayford31N;
+            }
+        } else if ((eli == Ellipsoid.ed50) && (hemisphere == 0)) {
+            switch (zone) {
+            case 28:
+                return ed5028N;
+
+            case 29:
+                return ed5029N;
+
+            case 30:
+                return ed5030N;
+
+            case 31:
+                return ed5031N;
+            }
+        }
+
+        System.err.println("UtmZone.getProjection(): new " + zone);
+
+        return new UtmZone(eli, zone, hemisphere, 0.0);
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        int zone;
+        int hemisphere = NORTH;
+
+        if (name.indexOf("UTM") < 0) {
+            return null;
+        }
+
+        if (name.substring(0, 1).compareTo("S") == 0) {
+            hemisphere = SOUTH;
+        }
+
+        zone = Integer.parseInt(name.substring(name.length() - 2));
+
+        return getProjection((Ellipsoid) eli, zone, hemisphere);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new UtmPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D uPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo((UtmPoint) uPt, gPt);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(UtmPoint uPt, GeoPoint gPt) {
+        int[] ai = new int[3];
+        double[] ad = new double[3];
+        ai[1] = ((UtmZone) uPt.proj).Zone;
+        ai[2] = ((UtmZone) uPt.proj).Hemisphere;
+        ad[1] = uPt.X;
+        ad[2] = uPt.Y;
+
+        utmgeo.set(((Projection) uPt.proj).getElliPar(), ai, ad);
+        utmgeo.go();
+
+        gPt.Longitude = Ra2De.go(utmgeo.Ge[1]);
+        gPt.Latitude = Ra2De.go(utmgeo.Ge[2]);
+        gPt.proj = Geodetic.getProjection(((Projection) uPt.proj).eli);
+
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D uPt) {
+        int[] ai = { 0, 0, 2 };
+
+        return fromGeo((GeoPoint) gPt, (UtmPoint) uPt, ai);
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @param proj
+     * @return
+     */
+    public UtmPoint fromGeo(GeoPoint gPt, UtmPoint uPt, UtmZone proj) {
+        int[] ai = { 0, proj.Zone, proj.Hemisphere };
+
+        return fromGeo(gPt, uPt, ai);
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @param ai
+     * @return
+     */
+    public UtmPoint fromGeo(GeoPoint gPt, UtmPoint uPt, int[] ai) {
+        double[] ad = new double[4];
+        ad[1] = gPt.Longitude.ToRadians();
+        ad[2] = gPt.Latitude.ToRadians();
+        geoutm.set(((Projection) gPt.proj).getElliPar(), ai, ad);
+        geoutm.go();
+
+        if (geoutm.Ier != 0) {
+            return null;
+        }
+
+        uPt.setLocation(geoutm.Pr[1], geoutm.Pr[2]);
+
+        if ((((UtmZone) uPt.proj).Zone != geoutm.Iopar[1]) ||
+                (((UtmZone) uPt.proj).Hemisphere != geoutm.Iopar[2])) {
+            uPt.proj = UtmZone.getProjection(((Projection) uPt.proj).eli,
+                                             geoutm.Iopar[1], geoutm.Iopar[2]);
+        }
+
+        return uPt;
+    }
+
+    // Calcula el step en funci�n del zoom
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        // calculo del step en funci�n del zoom
+        Point2D pt1 = extent.getMin();
+
+        double step = 1.0;
+        double x = (int) pt1.getX();
+        double dist = 0.0;
+
+        /*        GeoPoint gp1, gp2;
+                gp1 = (GeoPoint) createPoint( x, (int) pt1.getY());
+                mat.transform(gp1, gp1);
+                gp2 = (GeoPoint) createPoint(gp1.getX()+100, gp1.getY()-100);
+                try {
+                        mat.inverseTransform(gp2, gp2);
+                } catch (NoninvertibleTransformException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                }
+                dist = (gp2.getX()-x);
+                System.err.println("distX = " + dist);
+
+                if (dist > 30.0) {                         step = 30.0;
+                } else if (dist > 18.0) {         step = 18.0;
+                } else if (dist > 12.0) {        step = 12.0;
+                } else if (dist > 6.0) {        step = 6.0;
+                } else if (dist > 3.0) {        step = 3.0;
+                } else if (dist > 2.0) {        step = 2.0;
+                } else if (dist > 1.0) {        step = 1.0;
+                } else if (dist > .5) {                step =.5;
+                } else if (dist > .25) {        step =.25;
+                } else if (dist > 1.0/60*5.0) { step = 1.0/60*5.0;
+                } else {                                        step = 1.0/60*2.0;
+                }
+                        //step = 1.0;
+                */
+        generateGrid(g, extent, mat, step);
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat,
+                              double step) {
+        grid = new Graticule(this);
+
+        Point2D pt1 = extent.getMin();
+        Point2D pt2 = extent.getMax();
+        GeoPoint gp1;
+        GeoPoint gp2;
+        UtmPoint up1 = (UtmPoint) createPoint(0, 0);
+        UtmPoint up2 = (UtmPoint) createPoint(0, 0);
+        Point2D.Double mp1 = new Point2D.Double(0.0, 0.0);
+        Point2D.Double mp2 = new Point2D.Double(0.0, 0.0);
+        Geodetic geoProj = Geodetic.getProjection((Ellipsoid) getDatum());
+        boolean esUso = false;
+
+        System.err.println(name + ": ViewPort Extent = (" + pt1 + "," + pt2 +
+                           ")");
+        gp1 = (GeoPoint) toGeo(new UtmPoint(pt1.getX(), pt2.getY()));
+        gp2 = (GeoPoint) toGeo(new UtmPoint(pt2));
+
+        double xMin = (int) gp1.getX() - 1.0;
+        double xMax = (int) gp2.getX() + 1.0;
+        gp1 = (GeoPoint) toGeo(new UtmPoint(pt1.getX() +
+                                            ((pt2.getX() - pt1.getX()) / 2.0),
+                                            pt2.getY()));
+
+        double yMax = (int) gp1.getY() + 2.0;
+        gp1 = (GeoPoint) toGeo(new UtmPoint(pt1));
+
+        double yMin = (int) gp1.getY() - 1.0;
+        xMin = -30.0;
+        xMax = 30.0;
+        yMin = 20.0;
+        yMax = 60.0;
+
+        for (double x = xMin; x <= xMax; x += step) {
+            up1 = null;
+
+            if (Math.abs((x) % 6) < .001) {
+                esUso = true;
+            }
+
+            for (double y = yMin; y <= yMax; y += step) {
+                gp2 = (GeoPoint) geoProj.createPoint(x, y);
+                fromGeo(gp2, up2, this);
+
+                if ((up1 != null) && (extent.isAt(up1) || extent.isAt(up2))) {
+                    mat.transform(up2, mp2);
+
+                    if (up1 != null) {
+                        if (esUso) {
+                            grid.addLine(mp1, mp2, 1);
+                        } else {
+                            grid.addLine(mp1, mp2);
+                        }
+                    }
+                } else {
+                    mat.transform(up2, mp2);
+                }
+
+                up1 = (UtmPoint) up2.clone();
+                mp1 = (Point2D.Double) mp2.clone();
+            }
+
+            esUso = false;
+        }
+
+        for (double y = yMin; y <= yMax; y += step) {
+            up1 = null;
+
+            for (double x = xMin; x <= xMax; x += step) {
+                gp2 = (GeoPoint) geoProj.createPoint(x, y);
+                fromGeo(gp2, up2, this);
+
+                if ((up1 != null) && (extent.isAt(up1) || extent.isAt(up2))) {
+                    mat.transform(up2, mp2);
+
+                    if (up1 != null) {
+                        grid.addLine(mp1, mp2);
+                    }
+                } else {
+                    mat.transform(up2, mp2);
+                }
+
+                up1 = (UtmPoint) up2.clone();
+                mp1 = (Point2D.Double) mp2.clone();
+            }
+        }
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        double scale = ((maxX - minX) * // metros
+                       (dpi / 2.54 * 100.0)) / // px / metro
+                       width; // pixels
+
+        return scale;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Rectangle2D getExtent(Rectangle2D extent, double scale, double wImage, double hImage, double mapUnits,double distanceUnits, double dpi) {
+		double w =0;
+		double h =0;
+		double wExtent =0;
+		double hExtent =0;
+   		w = ((wImage / dpi) * 2.54);
+		h = ((hImage / dpi) * 2.54);
+		wExtent =w * scale * distanceUnits / mapUnits;
+		hExtent =h * scale * distanceUnits / mapUnits;
+		double xExtent = extent.getCenterX() - wExtent/2;
+		double yExtent = extent.getCenterY() - hExtent/2;
+		Rectangle2D rec=new Rectangle2D.Double(xExtent,yExtent,wExtent,hExtent);
+    	return  rec;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.cts.IProjection#getFullCode()
+	 */
+	public String getFullCode() {
+		return getAbrev();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmZone.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Calc.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Calc.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Calc.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import geojava.EGeoUtmCom;
+
+import java.awt.Frame;
+import java.awt.geom.Point2D;
+
+
+public class Calc {
+    static int CATALA = 1;
+    static int CASTELLANO = 2;
+    static int ENGLISH = 3;
+
+    public static void ICCCalculator() {
+        Frame frame = new Frame("EGeoUtmCom");
+        int idioma = CASTELLANO;
+        EGeoUtmCom calcula = new EGeoUtmCom(false, idioma);
+        frame.add("Center", calcula);
+        frame.pack();
+        frame.show();
+    }
+
+    public static void prbUtmToGeo() {
+        UtmZone utmZone = UtmZone.getProjection(Ellipsoid.hayford, 30,
+                                                UtmZone.NORTH);
+
+        //		UtmPoint uPt = new UtmPoint(utmZone, 739027.0, 4468771.0); // 593 tl
+        UtmPoint uPt = new UtmPoint(utmZone, 773177.0, 4303195.0); // 823 tl
+        GeoPoint gPt = (GeoPoint) ((Projection) uPt.proj).toGeo(uPt);
+        GeoPoint.decimales = 1;
+        System.out.println("UTM to Geo : " + uPt.toString() + " == [" +
+                           gPt.toString() + "] (" + gPt.getX() + "," +
+                           gPt.getY() + ")");
+
+        UtmPoint uPt2 = utmZone.fromGeo(gPt, new UtmPoint(utmZone),
+                                        UtmZone.getProjection(Ellipsoid.hayford,
+                                                              29, UtmZone.NORTH));
+        System.out.println("Geo to Utm : " + uPt2.toString() + " == [" +
+                           gPt.toString() + "] (" + gPt.getX() + "," +
+                           gPt.getY() + ")");
+    }
+
+    public Point2D pointFactory(Projection proj, double x, double y) {
+        Point2D.Double pt = new Point2D.Double(x, y);
+
+        return pt;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Calc.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ReProjection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ReProjection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ReProjection.java	(revision 42196)
@@ -0,0 +1,127 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Transformada para cambios de proyecci�n
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class ReProjection implements ICoordTrans {
+    Projection pOrig;
+    Projection pDest;
+
+    public ReProjection(Projection pOrig, Projection pDest) {
+        this.pOrig = pOrig;
+        this.pDest = pDest;
+    }
+
+    public ICoordTrans getInverted() {
+        return new ReProjection(pDest, pOrig);
+    }
+
+    public IProjection getPOrig() {
+        return pOrig;
+    }
+
+    public IProjection getPDest() {
+        return pDest;
+    }
+
+    public Point2D convert(Point2D ptOrig, Point2D ptDest) {
+        if (pOrig.getClass() == UtmZone.class) {
+            GeoPoint pt1 = null;
+            pt1 = (GeoPoint) ((UtmZone) pOrig).toGeo((UtmPoint) ptOrig);
+
+            if (pDest.getClass() == UtmZone.class) {
+                ((UtmZone) pDest).fromGeo(pt1, (UtmPoint) ptDest,
+                                          (UtmZone) pDest);
+            } else if (pDest.getClass() == Geodetic.class) {
+                ptDest.setLocation(pt1.getX(), pt1.getY());
+                ((GeoPoint) ptDest).proj = pt1.proj;
+            } else if (pDest.getClass() == Mercator.class) {
+                ((Mercator) pDest).fromGeo(pt1, (ProjPoint) ptDest);
+            }
+        } else if (pOrig.getClass() == Geodetic.class) {
+            if (pDest.getClass() == UtmZone.class) {
+                ((UtmZone) pDest).fromGeo((GeoPoint) ptOrig, (UtmPoint) ptDest,
+                                          (UtmZone) pDest);
+            } else if (pDest.getClass() == Mercator.class) {
+                ((Mercator) pDest).fromGeo((GeoPoint) ptOrig, (ProjPoint) ptDest);
+            }
+        } else if (pOrig.getClass() == Mercator.class) {
+            GeoPoint pt1 = null;
+            pt1 = (GeoPoint) ((Mercator) pOrig).toGeo((ProjPoint) ptOrig);
+
+            if (pDest.getClass() == UtmZone.class) {
+                ((UtmZone) pDest).fromGeo(pt1, (UtmPoint) ptDest,
+                                          (UtmZone) pDest);
+            } else if (pDest.getClass() == Geodetic.class) {
+                ptDest.setLocation(pt1.getX(), pt1.getY());
+                ((ProjPoint) ptDest).proj = pt1.proj;
+            }
+        }
+
+        return ptDest;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.ICoordTrans#convert(java.awt.geom.Rectangle2D)
+     */
+    public Rectangle2D convert(Rectangle2D rect) {
+
+        Point2D pt1 = new Point2D.Double(rect.getMinX(), rect.getMinY());
+        Point2D pt2 = new Point2D.Double(rect.getMaxX(), rect.getMaxY());
+        Point2D pt3 = new Point2D.Double(rect.getMinX(), rect.getMaxY());
+        Point2D pt4 = new Point2D.Double(rect.getMaxX(), rect.getMinY());
+        
+        convert(pt1, pt1);
+        convert(pt2, pt2);
+        convert(pt3, pt3);
+        convert(pt4, pt4);
+
+        double min_x = Math.min(
+            Math.min(pt1.getX(), pt2.getX()),
+            Math.min(pt3.getX(), pt4.getX()));
+        double min_y = Math.min(
+            Math.min(pt1.getY(), pt2.getY()),
+            Math.min(pt3.getY(), pt4.getY()));
+        double max_x = Math.max(
+            Math.max(pt1.getX(), pt2.getX()),
+            Math.max(pt3.getX(), pt4.getX()));
+        double max_y = Math.max(
+            Math.max(pt1.getY(), pt2.getY()),
+            Math.max(pt3.getY(), pt4.getY()));
+        
+        return new Rectangle2D.Double(
+            min_x, min_y, max_x - min_x, max_y - min_y);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ReProjection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Mercator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Mercator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Mercator.java	(revision 42196)
@@ -0,0 +1,393 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import java.util.TreeMap;
+
+
+/**
+ * Proyeccion Mercator
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class Mercator extends Projection {
+    static String name = "Mercator";
+    static String abrev = "Mer";
+    private static TreeMap projPool = new TreeMap();
+    public static final Mercator hayford = new Mercator(Ellipsoid.hayford);
+    public static final Mercator wgs84 = new Mercator(Ellipsoid.wgs84);
+    private double a;
+    private double f;
+    private double b;
+    private double Eps2;
+    private double EE2;
+    private double EE3;
+    private double Epps2;
+
+    public Mercator(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+
+        double[] p = eli.getParam();
+        a = p[1];
+        f = 1 / p[2];
+        b = p[3];
+
+        Eps2 = p[5];
+        EE2 = Eps2 * Eps2;
+        EE3 = EE2 * Eps2;
+        Epps2 = p[7];
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    public static Mercator getProjection(Ellipsoid eli) {
+        Mercator ret = null;
+
+        if (projPool.containsKey(eli.getName())) {
+            ret = (Mercator) Mercator.projPool.get(eli.getName());
+        } else {
+            if (eli == Ellipsoid.hayford) {
+                ret = hayford;
+            } else if (eli == Ellipsoid.wgs84) {
+                ret = wgs84;
+            } else {
+                ret = new Mercator(eli);
+            }
+
+            projPool.put(eli.getName(), ret);
+        }
+
+        return ret;
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("ME") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new ProjPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D mPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo((ProjPoint) mPt, gPt);
+    }
+
+    /**
+     *
+     * @param mPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(ProjPoint mPt, GeoPoint gPt) {
+        double t = Math.pow(Math.E, (-mPt.getY() / a));
+
+        double x1;
+        double x = ((Math.PI / 2) - (2 * Math.atan(t)));
+
+        do {
+            x1 = x;
+            x = (Math.PI / 2) -
+                (2 * Math.atan(t * (Math.pow((1 -
+                                             (Math.sqrt(Eps2) * Math.sin(x))) / (1 +
+                                             (Math.sqrt(Eps2) * Math.sin(x))),
+                                             (Math.sqrt(Eps2) / 2)))));
+        } while ((x - x1) > 0.0000000001);
+
+        double lat = (Math.PI / 2) -
+                     (2 * Math.atan(t * (Math.pow((1 -
+                                                  (Math.sqrt(Eps2) * Math.sin(x))) / (1 +
+                                                  (Math.sqrt(Eps2) * Math.sin(x))),
+                                                  (Math.sqrt(Eps2) / 2)))));
+
+        double lng = mPt.getX() / a;
+        gPt.setLocation((lng * 180.0) / Math.PI, (lat * 180.0) / Math.PI);
+        gPt.proj = Geodetic.getProjection(((Projection) mPt.proj).eli);
+
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D mPt) {
+        double sl = Math.sin(((GeoPoint) gPt).Latitude.ToRadians());
+        double cl = Math.cos(((GeoPoint) gPt).Latitude.ToRadians());
+        double tl = (1 + sl) / (1 - sl);
+
+        // Calcula Easting
+        double x = a * ((GeoPoint) gPt).Longitude.ToRadians();
+
+        // Calcula Northing
+        double y = Math.pow(((1 - (Math.sqrt(Eps2) * sl)) / (1 +
+                            (Math.sqrt(Eps2) * sl))), (Math.sqrt(Eps2)));
+        y = a / 2 * (Math.log(tl * y));
+        ((ProjPoint) mPt).setLocation(x, y);
+        ((ProjPoint) mPt).proj = this;
+
+        return mPt;
+    }
+
+    // Calcula el step en funci�n del zoom
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        // calculo del step en funci�n del zoom
+        Point2D pt1 = extent.getMin();
+
+        double step = 3.0;
+        double x = pt1.getX();
+        double dist = 0.0;
+        ProjPoint ppt1;
+        ProjPoint ppt2;
+        GeoPoint gp1;
+        GeoPoint gp2;
+        ppt1 = (ProjPoint) createPoint(x, pt1.getY());
+        ppt2 = (ProjPoint) createPoint(x + 100, pt1.getY() - 100);
+        gp1 = (GeoPoint) ppt1.toGeo();
+        gp2 = (GeoPoint) ppt2.toGeo();
+
+        /*        GeoPoint gp1, gp2;
+                gp1 = (GeoPoint) createPoint( x, (int) pt1.getY());
+                mat.transform(gp1, gp1);
+                gp2 = (GeoPoint) createPoint(gp1.getX()+100, gp1.getY()-100);
+                try {
+                        mat.inverseTransform(gp2, gp2);
+                } catch (NoninvertibleTransformException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                }
+                dist = (gp2.getX()-x);
+                System.err.println("distX = " + dist);
+
+                if (dist > 30.0) {                         step = 30.0;
+                } else if (dist > 18.0) {         step = 18.0;
+                } else if (dist > 12.0) {        step = 12.0;
+                } else if (dist > 6.0) {        step = 6.0;
+                } else if (dist > 3.0) {        step = 3.0;
+                } else if (dist > 2.0) {        step = 2.0;
+                } else if (dist > 1.0) {        step = 1.0;
+                } else if (dist > .5) {                step =.5;
+                } else if (dist > .25) {        step =.25;
+                } else if (dist > 1.0/60*5.0) { step = 1.0/60*5.0;
+                } else {                                        step = 1.0/60*2.0;
+                }
+                        //step = 1.0;
+                */
+        generateGrid(g, extent, mat, step);
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat,
+                              double step) {
+        grid = new Graticule(this);
+
+        Point2D pt1 = extent.getMin();
+        Point2D pt2 = extent.getMax();
+        Point2D.Double ptx = new Point2D.Double(0.0, 0.0);
+        GeoPoint gp1;
+        GeoPoint gp2;
+        ProjPoint up1 = (ProjPoint) createPoint(0, 0);
+        ProjPoint up2 = (ProjPoint) createPoint(0, 0);
+        Geodetic geoProj = Geodetic.getProjection((Ellipsoid) getDatum());
+        double xAxis;
+        double yAxis;
+
+        // Calculos para el texto
+        FontMetrics fm = g.getFontMetrics();
+        int fmWidth = 0;
+        int fmHeight = fm.getAscent();
+        String tit = "";
+        String fmt = "%G�%N";
+
+        if (step < 1.0) {
+            fmt = "%G�%M'%N";
+        }
+
+        // Lineas Horzontales
+        gp1 = (GeoPoint) toGeo(new ProjPoint(pt1));
+        gp2 = (GeoPoint) toGeo(new ProjPoint(pt2));
+        xAxis = gp1.getX();
+        yAxis = gp2.getY();
+        System.err.println(name + ": ViewPort Extent = (" + gp1 + "," + gp2 +
+                           ")");
+
+        double xMin = (int) gp1.getX() - 1.0;
+        xMin -= (xMin % step);
+
+        double xMax = (int) gp2.getX() + 1.0;
+        double yMin = (int) gp1.getY() - 1.0;
+        yMin -= (yMin % step);
+
+        double yMax = (int) gp2.getY() + 1.0;
+
+        if (xMin < -180.0) {
+            xMin = -180.0;
+        }
+
+        if (xMax > 180.0) {
+            xMax = 180.0;
+        }
+
+        if (yMin < -80.0) {
+            yMin = -80.0;
+        }
+
+        if (yMax > 80.0) {
+            yMax = 80.0;
+        }
+
+        if (xAxis < -180.0) {
+            xAxis = -180.0;
+        }
+
+        if (yAxis > 80.0) {
+            yAxis = 80.0;
+        }
+
+        for (double y = yMin; y <= yMax; y += step) {
+            gp1 = (GeoPoint) geoProj.createPoint(xAxis, y);
+            gp2 = (GeoPoint) geoProj.createPoint(xMax, y);
+            fromGeo(gp1, up1);
+            fromGeo(gp2, up2);
+            mat.transform(up1, up1);
+            mat.transform(up2, up2);
+            grid.addLine(up1, up2);
+
+            tit = coordToString(y, fmt, true);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(up1.getX() + 3, up1.getY() - 2);
+            grid.addText(tit, ptx);
+        }
+
+        // Lineas Verticales
+        for (double x = xMin; x <= xMax; x += step) {
+            gp1 = (GeoPoint) geoProj.createPoint(x, yMin);
+            gp2 = (GeoPoint) geoProj.createPoint(x, yAxis);
+            fromGeo(gp1, up1);
+            fromGeo(gp2, up2);
+            mat.transform(up1, up1);
+            mat.transform(up2, up2);
+            grid.addLine(up1, up2);
+
+            tit = coordToString(x, fmt, false);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(up2.getX() + 3, up2.getY() + fmHeight);
+            grid.addText(tit, ptx);
+        }
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        Projection prj = Geodetic.getProjection((Ellipsoid) getDatum());
+        GeoPoint pt1 = (GeoPoint) prj.createPoint(1.0, 0.0);
+        GeoPoint pt2 = (GeoPoint) prj.createPoint(2.0, 0.0);
+        ProjPoint ppt1 = (ProjPoint) createPoint(0.0, 0.0);
+        ProjPoint ppt2 = (ProjPoint) createPoint(0.0, 0.0);
+        fromGeo(pt1, ppt1);
+        fromGeo(pt2, ppt2);
+
+        //scale = ppt2.getX()-ppt1.getX();
+        double scale = (((maxX - minX) / (ppt2.getX() - ppt1.getX())) *
+        //scale = ((extent.maxX()-extent.minX())/ getWidth());// *
+        (dpi / 2.54 * 100.0 * 1852.0 * 60.0)) / width;
+
+        return scale;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Rectangle2D getExtent(Rectangle2D extent, double scale, double wImage, double hImage, double mapUnits,double distanceUnits, double dpi) {
+		Projection prj = Geodetic.getProjection((Ellipsoid) getDatum());
+        GeoPoint pt1 = (GeoPoint) prj.createPoint(1.0, 0.0);
+        GeoPoint pt2 = (GeoPoint) prj.createPoint(2.0, 0.0);
+        ProjPoint ppt1 = (ProjPoint) createPoint(0.0, 0.0);
+        ProjPoint ppt2 = (ProjPoint) createPoint(0.0, 0.0);
+        fromGeo(pt1, ppt1);
+        fromGeo(pt2, ppt2);
+		double w =0;
+		double h =0;
+		double wExtent =0;
+		double hExtent =0;
+    	w = ((wImage / dpi) * 2.54);
+		h = ((hImage / dpi) * 2.54);
+		wExtent =((w*scale*distanceUnits)/ (ppt2.getX() - ppt1.getX()))/ (mapUnits*1852.0*60.0);
+		hExtent =((h*scale*distanceUnits)/ (ppt2.getX() - ppt1.getX()))/ (mapUnits*1852.0*60.0);
+		double xExtent = extent.getCenterX() - wExtent/2;
+		double yExtent = extent.getCenterY() - hExtent/2;
+		Rectangle2D rec=new Rectangle2D.Double(xExtent,yExtent,wExtent,hExtent);
+    	return  rec;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.cts.IProjection#getFullCode()
+	 */
+	public String getFullCode() {
+		return getAbrev();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Mercator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Projection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Projection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Projection.java	(revision 42196)
@@ -0,0 +1,174 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+import org.gvsig.fmap.crs.CRSFactory;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+
+abstract public class Projection implements IProjection {
+    public static int NORTH = 0;
+    public static int SOUTH = 1;
+    static String name = "Sin Proyeccion";
+    static String abrev = "None";
+    private static final Color basicGridColor = new Color(64, 64, 64, 128);
+    Color gridColor = basicGridColor;
+    Ellipsoid eli = Ellipsoid.hayford;
+    Graticule grid;
+
+    public Projection() {
+        eli = Ellipsoid.hayford;
+    }
+
+    public Projection(Ellipsoid e) {
+        eli = e;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    abstract public String getAbrev();
+
+    public IDatum getDatum() {
+        return eli;
+    }
+
+    public double[] getElliPar() {
+        return eli.getParam();
+    }
+
+    abstract public Point2D createPoint(double x, double y);
+
+    public Point2D createPoint(Point2D pt) {
+        return createPoint(pt.getX(), pt.getY());
+    }
+
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("UTM") >= 0) {
+            return UtmZone.getProjectionByName(eli, name);
+        }
+
+        if (name.indexOf("GEO") >= 0) {
+            return Geodetic.getProjectionByName(eli, name);
+        }
+
+        if (name.indexOf("MERC") >= 0) {
+            return Mercator.getProjectionByName(eli, name);
+        }
+
+        return null;
+    }
+
+    public ReProjection getReproyectionTo(Projection proj) {
+        ReProjection rp = new ReProjection(this, proj);
+
+        return rp;
+    }
+
+    abstract public Point2D toGeo(Point2D pt);
+
+    abstract public Point2D fromGeo(Point2D gPt, Point2D mPt);
+
+    public void setGridColor(Color c) {
+        gridColor = c;
+    }
+
+    public Color getGridColor() {
+        return gridColor;
+    }
+
+    public static String coordToString(double coord, String fmt, boolean isLat) {
+        String txt = fmt;
+        int donde;
+        donde = txt.indexOf("%G");
+
+        if (donde >= 0) {
+            int deg = (int) coord;
+
+            if ((fmt.indexOf("%N") >= 0) && (deg < 0)) {
+                deg = -deg;
+            }
+
+            txt = txt.substring(0, donde) + Integer.toString(deg) +
+                  txt.substring(donde + 2);
+        }
+
+        donde = txt.indexOf("%M");
+
+        if (donde >= 0) {
+            int min = (int) ((coord - (int) coord) * 60.0) % 60;
+
+            if ((fmt.indexOf("%N") >= 0) && (min < 0)) {
+                min = -min;
+            }
+
+            txt = txt.substring(0, donde) + Integer.toString(min) +
+                  txt.substring(donde + 2);
+            ;
+        }
+
+        donde = txt.indexOf("%N");
+
+        if (donde >= 0) {
+            String t = "";
+
+            if (isLat) {
+                if (coord > 0) {
+                    t = "N";
+                } else if (coord < 0) {
+                    t = "S";
+                }
+            } else {
+                if (coord > 0) {
+                    t = "E";
+                } else if (coord < 0) {
+                    t = "W";
+                }
+            }
+
+            txt = txt.substring(0, donde) + t + txt.substring(donde + 2);
+            ;
+        }
+
+        return txt;
+    }
+
+    abstract public void drawGrid(Graphics2D g, ViewPortData vp);
+    
+    public boolean isProjected() {
+    	return false;
+    }
+    
+    public Object clone() throws CloneNotSupportedException {
+        return CRSFactory.getCRS( this.getFullCode() );
+     }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Projection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Polygon2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Polygon2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Polygon2D.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.cresques.geo.ViewPortData;
+
+
+/**
+ * Clase que representa un pol�gono 2D
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Polygon2D extends Vector {
+    GeneralPath gp = null;
+
+    public Polygon2D() {
+        super();
+        gp = null;
+    }
+
+    /**
+     * A�ade un vertice al po?�gono
+     * @param pt        punto 2D que representa el vertice a�adido
+     */
+    public void addPoint(Point2D pt) {
+        super.add(pt);
+    }
+
+    /**
+     * Dibuja el pol�gono
+     * @param g        Graphics sobre el que dibuja
+     * @param vp        ViewPort con la vista
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        newGP(vp);
+        g.draw(gp);
+
+        //g.draw(new Line2D.Double(pt,pt0));
+    }
+
+    /**
+     *
+     * @param g
+     * @param vp
+     */
+    public void fill(Graphics2D g, ViewPortData vp) {
+        newGP(vp);
+        g.fill(gp);
+    }
+
+    /**
+     *
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        gp = new GeneralPath();
+
+        Point2D pt0 = null;
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Point2D.Double ptTmp = new Point2D.Double(0.0, 0.0);
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            pt1 = (Point2D) iter.next();
+            vp.mat.transform(pt1, ptTmp);
+
+            if (pt0 == null) {
+                pt0 = ptTmp;
+                gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            } else {
+                gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            }
+        }
+
+        gp.closePath();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Polygon2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Graticule.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Graticule.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Graticule.java	(revision 42196)
@@ -0,0 +1,128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.cresques.geo.ViewPortData;
+
+
+class Text2D extends Point2D {
+    private double x;
+    private double y;
+    private String txt;
+
+    public Text2D(String txt, Point2D pt) {
+        this.txt = txt;
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public double getX() {
+        return x;
+    }
+
+    public double getY() {
+        return y;
+    }
+
+    public void setLocation(double x, double y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        g.drawString(txt, (int) x, (int) y);
+    }
+}
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ *
+ * TODO A�adir soporte para hasta 3 niveles de grid (3 colores y 3 GeneralPath
+ */
+public class Graticule {
+    static final Color color = new Color(128, 128, 128, 192);
+    Color pc = null;
+    Color tColor = null;
+    GeneralPath gp = null;
+    GeneralPath gp1 = null;
+    Vector vText = null;
+    Projection proj;
+
+    public Graticule(Projection proj) {
+        this.proj = proj;
+        gp = new GeneralPath();
+        gp1 = new GeneralPath();
+        vText = new Vector();
+        setColor(color);
+    }
+
+    public Color getColor() {
+        return pc;
+    }
+
+    public void setColor(Color color) {
+        pc = color;
+        tColor = new Color(pc.getRed(), pc.getGreen(), pc.getBlue(), 255);
+    }
+
+    public void addLine(Point2D pt1, Point2D pt2) {
+        gp.moveTo((float) pt1.getX(), (float) pt1.getY());
+        gp.lineTo((float) pt2.getX(), (float) pt2.getY());
+    }
+
+    public void addLine(Point2D pt1, Point2D pt2, int num) {
+        if (num == 0) {
+            gp.moveTo((float) pt1.getX(), (float) pt1.getY());
+            gp.lineTo((float) pt2.getX(), (float) pt2.getY());
+        } else if (num == 1) {
+            gp1.moveTo((float) pt1.getX(), (float) pt1.getY());
+            gp1.lineTo((float) pt2.getX(), (float) pt2.getY());
+        }
+    }
+
+    public void addText(String txt, Point2D pt) {
+        vText.add(new Text2D(txt, pt));
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        g.setColor(pc);
+        g.draw(gp);
+
+        g.setColor(tColor);
+        g.draw(gp1);
+
+        Iterator iter = vText.iterator();
+
+        while (iter.hasNext())
+            ((Text2D) iter.next()).draw(g, vp);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Graticule.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmPoint.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import java.awt.geom.Point2D;
+
+
+public class UtmPoint extends ProjPoint {
+    public UtmPoint() {
+        proj = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        setLocation(0.0, 0.0);
+    }
+
+    public UtmPoint(double x, double y) {
+        proj = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        setLocation(x, y);
+    }
+
+    public UtmPoint(Point2D pt) {
+        proj = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public UtmPoint(UtmZone zone) {
+        setLocation(0.0, 0.0);
+        proj = zone;
+    }
+
+    public UtmPoint(UtmZone zone, double x, double y) {
+        setLocation(x, y);
+        proj = zone;
+    }
+
+    public UtmPoint(UtmZone zone, Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        proj = zone;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public double getX() {
+        return X;
+    }
+
+    public double getY() {
+        return Y;
+    }
+
+    public void setLocation(double x, double y) {
+        X = x;
+        Y = y;
+    }
+
+    public String toString() {
+        return "(" + ((UtmZone) proj).Zone + ": " + getX() + "," + getY() +
+               ")";
+    }
+
+    public Point2D toGeo() {
+        return ((Projection) proj).toGeo(this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/UtmPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Point3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Point3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Point3D.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Point3D extends Point2D {
+    public double X;
+    public double Y;
+    public double Z;
+
+    public Point3D() {
+        setLocation(0.0, 0.0);
+    }
+
+    public Point3D(double x, double y) {
+        setLocation(x, y);
+    }
+
+    public Point3D(double x, double y, double z) {
+        setLocation(x, y, z);
+    }
+
+    public Point3D(Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public Point3D(Point3D pt) {
+        setLocation(pt.getX(), pt.getY(), pt.getZ());
+    }
+
+    public double getX() {
+        return X;
+    }
+
+    public double getY() {
+        return Y;
+    }
+
+    public double getZ() {
+        return Z;
+    }
+
+    public void setLocation(double x, double y) {
+        X = x;
+        Y = y;
+        Z = 0D;
+    }
+
+    public void setLocation(double x, double y, double z) {
+        X = x;
+        Y = y;
+        Z = z;
+    }
+
+    public String toString() {
+        return "(" + getX() + "," + getY() + ")";
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Point3D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/PointFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/PointFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/PointFactory.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+public class PointFactory {
+    public static UtmPoint newUtmPoint(UtmZone zona, double x, double y) {
+        return new UtmPoint(zona, x, y);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/PointFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Gauss.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Gauss.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Gauss.java	(revision 42196)
@@ -0,0 +1,145 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Proyeccion de Gauss (Mapa de Portugal)
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class Gauss extends Projection {
+    static String name = "Gauss";
+    static String abrev = "Gau";
+
+    public Gauss(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    public static Gauss getProjection(Ellipsoid eli) {
+        return new Gauss(eli);
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("Ga") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new Point2D.Double(x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D gaPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo(gaPt, gPt);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(Point2D gaPt, GeoPoint gPt) {
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D gaPt) {
+        return gaPt;
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        grid = new Graticule(this);
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        // TODO Auto-generated method stub
+        return -1D;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.cts.IProjection#getExtent(java.awt.geom.Rectangle2D, double, double, double, double, double, double)
+	 */
+	public Rectangle2D getExtent(Rectangle2D extent, double scale, double wImage, double hImage, double mapUnits, double distanceUnits, double dpi) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.cts.IProjection#getFullCode()
+	 */
+	public String getFullCode() {
+		return getAbrev();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Gauss.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Geodetic.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Geodetic.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Geodetic.java	(revision 42196)
@@ -0,0 +1,318 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import java.util.TreeMap;
+
+
+public class Geodetic extends Projection {
+    private static TreeMap projList = new TreeMap();
+    static String name = "Geodesica";
+    static String abrev = "Geo";
+    public static Geodetic hayford = new Geodetic(Ellipsoid.hayford);
+
+    public Geodetic() {
+        super();
+        grid = new Graticule(this);
+    }
+
+    public Geodetic(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("GEO") < 0) {
+            return null;
+        }
+
+        if (name.indexOf("WGS84") >= 0) {
+            return getProjection(Ellipsoid.wgs84);
+        }
+
+        if (name.indexOf("ED50") >= 0) {
+            return getProjection(Ellipsoid.wgs84);
+        }
+
+        return null;
+    }
+
+    public static Geodetic getProjection(Ellipsoid eli) {
+        Geodetic ret = null;
+        String key = eli.toString();
+
+        if (Geodetic.projList.containsKey(key)) {
+            ret = (Geodetic) Geodetic.projList.get(key);
+        } else {
+            if (eli == Ellipsoid.hayford) {
+                ret = hayford;
+            } else {
+                ret = new Geodetic(eli);
+            }
+
+            Geodetic.projList.put(key, ret);
+        }
+
+        return ret;
+    }
+
+    public Point2D createPoint(double x, double y) {
+        return new GeoPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param gPt Punto para pasar a GeoPoint
+     * @return
+     */
+    public Point2D toGeo(Point2D gPt) {
+        return (GeoPoint) gPt;
+    }
+
+    public Point2D fromGeo(Point2D gPt, Point2D pPt) {
+        return gPt;
+    }
+
+    // Calcula el step en funci�n del zoom
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        // calculo del step en funci�n del zoom
+        Point2D pt1 = extent.getMin();
+
+        double step = 1.0;
+        double x = (int) pt1.getX();
+        double dist = 0.0;
+        GeoPoint gp1;
+        GeoPoint gp2;
+        gp1 = (GeoPoint) createPoint(x, (int) pt1.getY());
+        mat.transform(gp1, gp1);
+        gp2 = (GeoPoint) createPoint(gp1.getX() + 100, gp1.getY() - 100);
+
+        try {
+            mat.inverseTransform(gp2, gp2);
+        } catch (NoninvertibleTransformException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        dist = (gp2.getX() - x);
+        System.err.println("distX = " + dist);
+
+        if (dist > 30.0) {
+            step = 30.0;
+        } else if (dist > 15.0) {
+            step = 15.0;
+        } else if (dist > 10.0) {
+            step = 10.0;
+        } else if (dist > 5.0) {
+            step = 5.0;
+        } else if (dist > 3.0) {
+            step = 3.0;
+        } else if (dist > 2.0) {
+            step = 2.0;
+        } else if (dist > 1.0) {
+            step = 1.0;
+        } else if (dist > .5) {
+            step = .5;
+        } else if (dist > .25) {
+            step = .25;
+        } else if (dist > (1.0 / 60 * 5.0)) {
+            step = 1.0 / 60 * 5.0;
+        } else {
+            step = 1.0 / 60 * 2.0;
+        }
+
+        //step = 1.0;
+        generateGrid(g, extent, mat, step);
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat,
+                              double step) {
+        grid = new Graticule(this);
+
+        GeoPoint gp1;
+        GeoPoint gp2;
+        Point2D.Double ptx = new Point2D.Double(0.0, 0.0);
+
+        Point2D pt1 = extent.getMin();
+        Point2D pt2 = extent.getMax();
+        System.err.println(name + ": ViewPort Extent = (" + pt1 + "," + pt2 +
+                           ")");
+
+        // Calculos para el texto
+        FontMetrics fm = g.getFontMetrics();
+        int fmWidth = 0;
+        int fmHeight = fm.getAscent();
+        String tit = "";
+        String fmt = "%G�%N";
+
+        if (step < 1.0) {
+            fmt = "%G�%M'%N";
+        }
+
+        // Lineas Verticales
+        double y1 = pt1.getY();
+
+        // Lineas Verticales
+        double y2 = pt2.getY();
+        double xIni = (int) pt1.getX() - 1;
+        xIni -= (xIni % step);
+
+        double xFin = ((int) pt2.getX()) + 1;
+
+        if (y1 < -90.0) {
+            y1 = -90.0;
+        }
+
+        if (y2 > 90.0) {
+            y2 = 90.0;
+        }
+
+        if (xIni < -180.0) {
+            xIni = -180.0;
+        }
+
+        if (xFin > 180.0) {
+            xFin = 180.0;
+        }
+
+        for (double x = xIni; x <= xFin; x += step) {
+            gp1 = (GeoPoint) createPoint(x, y1);
+            gp2 = (GeoPoint) createPoint(x, y2);
+            mat.transform(gp1, gp1);
+            mat.transform(gp2, gp2);
+            grid.addLine(gp1, gp2);
+            tit = coordToString(x, fmt, false);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(gp2.getX() + 3, gp2.getY() + fmHeight);
+            grid.addText(tit, ptx);
+        }
+
+        // Lineas Horizontales
+        double x1 = pt1.getX();
+
+        // Lineas Horizontales
+        double x2 = pt2.getX();
+        double yIni = (int) pt1.getY() - 1;
+        yIni -= (yIni % step);
+
+        double yFin = ((int) pt2.getY()) + 1;
+
+        if (x1 < -180.0) {
+            x1 = -180.0;
+        }
+
+        if (x2 > 180.0) {
+            x2 = 180.0;
+        }
+
+        if (yIni < -90.0) {
+            yIni = -90.0;
+        }
+
+        if (yFin > 90.0) {
+            yFin = 90.0;
+        }
+
+        for (double y = yIni; y <= yFin; y += step) {
+            gp1 = (GeoPoint) createPoint(x1, y);
+            gp2 = (GeoPoint) createPoint(x2, y);
+            mat.transform(gp1, gp1);
+            mat.transform(gp2, gp2);
+            grid.addLine(gp1, gp2);
+            tit = coordToString(y, fmt, true);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(gp1.getX() + 3, gp1.getY() - 2);
+            grid.addText(tit, ptx);
+        }
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        double scale = ((maxX - minX) * // grados
+
+        // 1852.0 metros x minuto de meridiano
+        (dpi / 2.54 * 100.0 * 1852.0 * 60.0)) / // px / metro
+                       width; // pixels
+
+        return scale;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Rectangle2D getExtent(Rectangle2D extent, double scale, double wImage, double hImage, double mapUnits,double distanceUnits, double dpi) {
+		double w =0;
+		double h =0;
+		double wExtent =0;
+		double hExtent =0;
+    	w = ((wImage / dpi) * 2.54);
+		h = ((hImage / dpi) * 2.54);
+		wExtent =(w*scale*distanceUnits)/ (mapUnits*1852.0*60.0);
+		hExtent =(h*scale*distanceUnits)/ (mapUnits*1852.0*60.0);
+		double xExtent = extent.getCenterX() - wExtent/2;
+		double yExtent = extent.getCenterY() - hExtent/2;
+		Rectangle2D rec=new Rectangle2D.Double(xExtent,yExtent,wExtent,hExtent);
+    	return  rec;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.cts.IProjection#getFullCode()
+	 */
+	public String getFullCode() {
+		return getAbrev();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Geodetic.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/GeoPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/GeoPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/GeoPoint.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import geojava.Mutil;
+import geojava.SexaAngle;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.Projected;
+
+import java.awt.geom.Point2D;
+
+
+public class GeoPoint extends Point2D implements Projected {
+    public static int decimales = 4;
+    IProjection proj = null;
+    public SexaAngle Longitude;
+    public SexaAngle Latitude;
+    public double h;
+
+    public GeoPoint(SexaAngle sexaangle, SexaAngle sexaangle1, double d) {
+        Longitude = sexaangle;
+        Latitude = sexaangle1;
+        h = d;
+    }
+
+    public GeoPoint() {
+        Longitude = new SexaAngle();
+        Latitude = new SexaAngle();
+        h = 0.0D;
+    }
+
+    public GeoPoint(double x, double y) {
+        setLocation(x, y);
+        h = 0.0D;
+    }
+
+    public GeoPoint(Projection proj, double x, double y) {
+        setLocation(x, y);
+        h = 0.0D;
+        ;
+        this.proj = proj;
+    }
+
+    public GeoPoint(Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        h = 0.0D;
+    }
+
+    public GeoPoint(Projection proj, Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        h = 0.0D;
+        ;
+        this.proj = proj;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public double getX() {
+        return Longitude.ToDecimal();
+    }
+
+    public double getY() {
+        return Latitude.ToDecimal();
+    }
+
+    public void setLocation(double x, double y) {
+        Longitude = SexaAngle.fromDecimal(x);
+        Latitude = SexaAngle.fromDecimal(y);
+    }
+
+    public String toString() {
+        String str = "";
+        String s = String.valueOf(Longitude.Deg);
+        String s1 = String.valueOf(Longitude.Min);
+        String s2 = String.valueOf(Mutil.double2String(Longitude.Sec, decimales));
+        SexaAngle sexaangle = new SexaAngle(s, s1, s2);
+        sexaangle.Normalize();
+        str += (String.valueOf(sexaangle.Deg) + "�");
+        str += (String.valueOf(sexaangle.Min) + "'");
+        str += (Mutil.double2String(sexaangle.Sec, decimales) + "\"");
+        str += " ";
+        s = String.valueOf(Latitude.Deg);
+        s1 = String.valueOf(Latitude.Min);
+        s2 = String.valueOf(Mutil.double2String(Latitude.Sec, decimales));
+        sexaangle = new SexaAngle(s, s1, s2);
+        sexaangle.Normalize();
+        str += (String.valueOf(sexaangle.Deg) + "�");
+        str += (String.valueOf(sexaangle.Min) + "'");
+        str += (Mutil.double2String(sexaangle.Sec, decimales) + "\"");
+
+        return str;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/GeoPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ProjPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ProjPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ProjPoint.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.Projected;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>*
+ */
+public class ProjPoint extends Point2D implements Projected {
+    IProjection proj = Mercator.getProjection(Ellipsoid.ed50);
+    public double X;
+    public double Y;
+
+    public ProjPoint() {
+        setLocation(0.0, 0.0);
+    }
+
+    public ProjPoint(Projection proj) {
+        setLocation(0.0, 0.0);
+        this.proj = proj;
+    }
+
+    public ProjPoint(double x, double y) {
+        setLocation(x, y);
+    }
+
+    public ProjPoint(Projection proj, double x, double y) {
+        setLocation(x, y);
+        this.proj = proj;
+    }
+
+    public ProjPoint(Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public ProjPoint(Projection proj, Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        this.proj = proj;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public double getX() {
+        return X;
+    }
+
+    public double getY() {
+        return Y;
+    }
+
+    public void setLocation(double x, double y) {
+        X = x;
+        Y = y;
+    }
+
+    public String toString() {
+        return "(" + proj + ": " + getX() + "," + getY() + ")";
+    }
+
+    public Point2D toGeo() {
+        return ((Projection) proj).toGeo(this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/ProjPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Ellipsoid.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Ellipsoid.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Ellipsoid.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.impl.geo;
+
+import org.cresques.cts.IDatum;
+
+
+public class Ellipsoid implements IDatum {
+    //'WGS72':	(6378135.0, 298.26, 1972),
+    public static final Ellipsoid wgs72 = new Ellipsoid("WGS72", 6378135.0,
+                                                        298.26);
+
+    //'WGS84':	(6378137.0, 298.257223563, 1984),
+    public static final Ellipsoid wgs84 = new Ellipsoid("WGS84", 6378137.0,
+                                                        298.257223563);
+
+    //'GRS80':	(6378137.0, 298.257222101, 1980), // , 6356752.314
+    public static final Ellipsoid grs80 = new Ellipsoid("GRS80", 6378137.0,
+                                                        298.257222101);
+
+    //'Hayford':	(6378388.0, 297.0, 1909),
+    public static final Ellipsoid hayford = new Ellipsoid("Hayford", 6378388.0,
+                                                          297.0);
+
+    //'Struve':	(6378298.0, 299.73, 1860),
+    public static final Ellipsoid struve = new Ellipsoid("Struve", 6378298.0,
+                                                         299.73);
+
+    // ed50 ... �hayford?
+    public static final Ellipsoid ed50 = new Ellipsoid("ED50", 6378388.0, 297.0);
+
+    // Clarcke 1866	a = 6378206.4;	f = 294.9786982;
+    public static final Ellipsoid clarke66 = new Ellipsoid("CLARKE 1866",
+                                                           6378206.4,
+                                                           294.9786982);
+    private String pName = null;
+    private double pMajor = 0.0;
+    private double pFlat = 0.0;
+    public double a;
+    public double b;
+    public double f;
+    public double e;
+    public double e2;
+    public double ep;
+    public double ep2;
+
+    public Ellipsoid(String name, double major, double flat) {
+        pName = name;
+        pMajor = major;
+        pFlat = flat;
+        a = pMajor;
+        f = pFlat;
+        ainvto();
+    }
+
+    public String getName() {
+        return pName;
+    }
+
+    private void ainvto() {
+        b = (a * (pFlat - 1.0D)) / pFlat;
+        e2 = ((2D * pFlat) - 1.0D) / (pFlat * pFlat);
+        e = Math.sqrt(e2);
+        ep2 = e2 / (1.0D - e2);
+        ep = Math.sqrt(ep2);
+    }
+
+    private void abto() {
+        if (Math.abs(a - b) < 9.9999999999999995E-021D) {
+            pFlat = 0.0D;
+            e2 = 0.0D;
+        } else {
+            pFlat = a / (a - b);
+            e2 = ((2D * pFlat) - 1.0D) / (pFlat * pFlat);
+        }
+
+        e = Math.sqrt(e2);
+        ep2 = e2 / (1.0D - e2);
+        ep = Math.sqrt(ep2);
+    }
+
+    public double[] getParam() {
+        double[] elipar = new double[8];
+        elipar[1] = pMajor;
+        elipar[2] = pFlat;
+        elipar[3] = b;
+        elipar[4] = e;
+        elipar[5] = e2;
+        elipar[6] = ep;
+        elipar[7] = ep2;
+
+        return elipar;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IDatum#getSemiMajorAxis()
+     */
+    public double getESemiMajorAxis() {
+        return pMajor;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IDatum#getEIFlattening()
+     */
+    public double getEIFlattening() {
+        return pFlat;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/java/org/cresques/impl/geo/Ellipsoid.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=OK
+Aplicar=Anwenden
+Block_Size_=
+Cancelar=Abbrechen
+Compression_=
+datum=
+Generate_Tfw_=
+Interleave_=
+Photometric_=
+Progressive_=
+projection=
+reference_system=
+zone=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=Ados
+Aplicar=Aplikatu
+Block_Size_=
+Cancelar=Utzi
+Compression_=
+datum=
+Generate_Tfw_=
+Interleave_=
+Photometric_=
+Progressive_=
+projection=
+reference_system=
+zone=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+Aceptar=Accetta
+Aplicar=Applica
+Block_Size_=Dimensioni blocco\:
+Cancelar=Cancella
+Compression_=Compressione
+datum=Datum
+Generate_Tfw_=Genera Tfw\:
+Interleave_=Interlacciato\:
+Photometric_=Fotometrica\:
+Progressive_=Progressivo\:
+projection=Proiezione
+reference_system=Sistema di riferimento
+zone=Fuso

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=Aceptar
+Aplicar=Aplicar
+Block_Size_=Tama\u00f1o de bloque\:
+Cancelar=Cancelar
+Compression_=Compresi\u00f3n\:
+datum=Datum
+Generate_Tfw_=Generar Tfw\:
+Interleave_=Entrelazado\:
+Photometric_=Fotom\u00e9trica\:
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+reference_system=Sistema de Referencia
+zone=Huso

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=Accept
+Aplicar=Apply
+Block_Size_=Block Size\:
+Cancelar=Cancel
+Compression_=Compression\:
+datum=Datum
+Generate_Tfw_=Generate Tfw\:
+Interleave_=Interleave\:
+Photometric_=Photometric\:
+Progressive_=Progressive\:
+projection=Projection
+reference_system=Reference System
+zone=Zone

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=Aceptar
+Aplicar=Aplicar
+Block_Size_=
+Cancelar=Cancelar
+Compression_=
+datum=
+Generate_Tfw_=
+Interleave_=
+Photometric_=
+Progressive_=
+projection=
+reference_system=
+zone=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=Acceptar
+Aplicar=Aplicar
+Block_Size_=
+Cancelar=Cancel\u00b7lar
+Compression_=
+datum=
+Generate_Tfw_=
+Interleave_=
+Photometric_=
+Progressive_=
+projection=Projecci\u00f3
+reference_system=Sistema de refer\u00e8ncia
+zone=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=Aceitar
+Aplicar=Aplicar
+Block_Size_=
+Cancelar=Cancelar
+Compression_=
+datum=
+Generate_Tfw_=
+Interleave_=
+Photometric_=
+Progressive_=
+projection=
+reference_system=
+zone=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+Aceptar=Budi\u017e
+Aplicar=Pou\u017e\u00edt
+Block_Size_=
+Cancelar=Zru\u0161it
+Compression_=
+datum=Datum
+Generate_Tfw_=
+Interleave_=
+Photometric_=
+Progressive_=
+projection=Projekce
+reference_system=Prostorov\u00fd referen\u010dn\u00ed syst\u00e9m
+zone=Z\u00f3na

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1,15 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+Aceptar=Accepter
+Aplicar=Appliquer
+Block_Size_=
+Cancelar=Annuler
+Compression_=
+datum=
+Generate_Tfw_=
+Interleave_=
+Photometric_=
+Progressive_=
+projection=
+reference_system=
+zone=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/org/cresques/resources/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.cresques.impl.CresquesCtsLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/pom.xml	(revision 42196)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.projection.cresques.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.projection.cresques</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-legacy</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-main</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-referencing</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>geojava</groupId>
+        <artifactId>geojava</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_core</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_codec</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+  </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl
___________________________________________________________________
Added: svn:ignore
   + target

.settings

.project

.classpath


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/pom.xml	(revision 42196)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.projection.cresques</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <repositories>
+      <repository>
+          <id>osgeo</id>
+          <name>Open Source Geospatial Foundation</name>
+          <url>http://download.osgeo.org/webdav/geotools</url>
+          <releases>
+              <enabled>true</enabled>
+              <updatePolicy>never</updatePolicy>
+              <checksumPolicy>warn</checksumPolicy>
+          </releases>
+          <snapshots>
+              <enabled>false</enabled>
+          </snapshots>
+      </repository>
+    </repositories>
+
+  <modules>
+    <module>org.gvsig.projection.cresques.impl</module>
+    <module>org.gvsig.projection.cresques.ui</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/java/org/cresques/cts/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/java/org/cresques/cts/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/java/org/cresques/cts/AllTests.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.cts;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.cresques.cts");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/java/org/cresques/cts/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.cresques">
+		<priority value="DEBUG" /> 
+	</category>
+	<category name="org.gvsig.fmap.crs">
+		<priority value="DEBUG" /> 
+	</category>
+
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/CresquesCtsUILibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/CresquesCtsUILibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/CresquesCtsUILibrary.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.ui;
+
+import org.cresques.impl.cts.ProjectionPool;
+import org.gvsig.app.gui.panels.CRSSelectPanelFactory;
+import org.gvsig.app.gui.panels.ProjChooserPanel;
+import org.gvsig.app.gui.panels.crs.CrsUIFactory;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class CresquesCtsUILibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+    	this.registerAsAPI(CresquesCtsUILibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+    	CRSSelectPanelFactory.registerPanelClass(ProjChooserPanel.class);
+    	CRSSelectPanelFactory.registerUIFactory(CrsUIFactory.class);
+        //CRSFactory.registerCRSFactory(new ProjectionPool());
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        // Nothing to do
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/CresquesCtsUILibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionModel.java	(revision 42196)
@@ -0,0 +1,478 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.ui.cts;
+
+import org.cresques.cts.IProjection;
+import org.cresques.impl.cts.ProjectionPool;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class CSSelectionModel {
+    public static int NONE = 0x01;
+    public static int GEODETIC = 0x02;
+    public static int TRANSVERSAL = 0x03;
+    public String[] datumList = {
+	    "WGS 84", "European 1950", "Datum 73",
+	    "North American Datum 1927",
+	    "North American Datum 1983",
+	    "La Canoa",
+	    "NTF (Paris)",
+	    "ETRS 89",
+	    "Moon (IAU 2000)",
+	    "Mars (IAU 2000)",
+	    "Campo_Inchauspe",
+	    "RGF93"
+    };
+    /*private String[] projList = {
+        "Geodesica",
+        "(UTM) Universal Transversal Mercator",
+        "Datum 73 / Modified Portuguese Grid",
+        "WGS 84 / LCC Canada",
+        "NAD83 / NRCan LCC Canada",
+        "Lambert Etendu",
+        "RGF93 / Lambert-93",
+        "WGS 84 / Mercator",
+        "Campo Inchauspe / Zonas 1-7"
+    };*/
+    private String[][] projList = {
+        	{"Geodesica", "(UTM) Universal Transversal Mercator",
+        		"LCC Canada", "Mercator"}, // WGS84
+        	{"Geodesica", "(UTM) Universal Transversal Mercator"}, // ED50
+        	{"Geodesica", "Modified Portuguese Grid"}, //Datum 73
+        	{"Geodesica", "(UTM) Universal Transversal Mercator"}, // NAD27
+        	{"Geodesica", "(UTM) Universal Transversal Mercator", "NRCan LCC Canada"}, // NAD83
+        	{"Geodesica", "(UTM) Universal Transversal Mercator"}, // La Canoa
+        	{"Geodesica", "Lambert Etendu"}, // NTF (Paris)
+        	{"Geodesica", "(UTM) Universal Transversal Mercator"}, // ETRS89
+        	{"Geodesica"}, // Moon
+        	{"Geodesica"}, // Mars
+        	{"Geodesica", "Zonas 1-7"}, // CampoInchauspe
+        	{"Geodesica", "Lambert-93"} // RFG93
+        };
+
+    private int[][] projType = {
+    	{GEODETIC, TRANSVERSAL, NONE, NONE},
+    	{GEODETIC, TRANSVERSAL},
+    	{GEODETIC, NONE},
+    	{GEODETIC, TRANSVERSAL},
+    	{GEODETIC, TRANSVERSAL, NONE},
+    	{GEODETIC, TRANSVERSAL},
+    	{GEODETIC, NONE},
+    	{GEODETIC, TRANSVERSAL},
+    	{GEODETIC},
+    	{GEODETIC},
+    	{GEODETIC, TRANSVERSAL},
+    	{GEODETIC, NONE}
+    };
+    
+    private int [][] zoneRange = {
+    	{1,60},
+    	{1,60},
+    	{0,0},
+    	{3,23},
+    	{3,23},
+    	{18,21},
+    	{0,0},
+    	{28,38},
+    	{0,0},
+    	{0,0},
+    	{1,7},
+    	{0,0}
+    };
+    private String[] zoneList = {  };
+    private int selectedDatum = 0;
+    private int selectedProj = 0;
+    private int selectedZone = 0;
+
+    /**
+     *
+     */
+    public CSSelectionModel() {
+        super();
+        zoneList = new String[60];
+
+        for (int i = 1; i <= 60; i++)
+            zoneList[i - 1] = "Huso " + Integer.toString(i);
+    }
+    
+
+    public String[] getDatumList() {
+        return datumList;
+    }
+
+    public String[] getProjectionList() {
+        return projList[getSelectedDatum()];
+    }
+
+    public String[] getZoneList() {
+    	int [] r = zoneRange[getSelectedDatum()];
+        return getZoneList(r[0],r[1]);
+    }
+
+    public String[] getZoneList(int from, int to) {
+        zoneList = new String[to-from+1];
+
+        for (int i = from; i <= to; i++)
+        	zoneList[i - from] = "Huso " + Integer.toString(i);
+        return zoneList;
+    }
+    public void setSelectedDatum(int opNr) {
+        selectedDatum = opNr;
+    }
+
+    public void setSelectedDatum(Object item) {
+        String[] list = datumList;
+
+        for (int i = 0; i < list.length; i++)
+            if (list[i].compareTo((String) item) == 0) {
+                selectedDatum = i;
+                break;
+            }
+    }
+
+    public int getSelectedDatum() {
+        return selectedDatum;
+    }
+
+    public void setSelectedProj(int opNr) {
+        selectedProj = opNr;
+    }
+
+    public void setSelectedProj(Object item) {
+        String[] list = projList[getSelectedDatum()];
+
+        for (int i = 0; i < list.length; i++)
+            if (list[i].compareTo((String) item) == 0) {
+                selectedProj = i;
+                break;
+            }
+    }
+
+    public int getSelectedProj() {
+        return selectedProj;
+    }
+
+    public int getSelectedProjType() {
+        return projType[getSelectedDatum()][selectedProj];
+    }
+
+    public void setSelectedZone(int opNr) {
+        selectedZone = opNr;
+    }
+
+    public void setSelectedZone(Object item) {
+        String[] list = zoneList;
+
+        for (int i = 0; i < list.length; i++)
+            if (list[i].compareTo((String) item) == 0) {
+                selectedZone = i;
+                break;
+            }
+    }
+
+    public int getSelectedZone() {
+        return selectedZone;
+    }
+
+    public void setProjection(IProjection proj) {
+    	if (proj!=null){
+    		String key = proj.getAbrev();
+    		// Para usos posteriores.
+    		// String db = key.split(":")[0];
+    		key = key.split(":")[1];
+
+    		setSelectedProj(0);
+    		setSelectedZone(-1);
+
+    		if (key.endsWith("4326")) {
+    			setSelectedDatum(0);
+    		} else if (key.endsWith("4230")) {
+    			setSelectedDatum(1);
+    		} else if (key.endsWith("4274")) {
+    			setSelectedDatum(2);
+    		} else if (key.endsWith("4267")) {
+    			setSelectedDatum(3);
+    		} else if (key.endsWith("4269")) {
+    			setSelectedDatum(4);
+    		} else if (key.endsWith("4247")) {
+    			setSelectedDatum(5);
+    		} else if (key.endsWith("4807")) {
+    			setSelectedDatum(6);
+    		} else if (key.endsWith("4258")) {
+    			setSelectedDatum(7);
+    		} else if (key.endsWith("30100")) {
+    			setSelectedDatum(8);
+    		} else if (key.endsWith("49900")) {
+    			setSelectedDatum(9);
+    		} else if (key.endsWith("4221")) {
+    			setSelectedDatum(10);
+    		} else if (key.endsWith("4171")) {
+    			setSelectedDatum(11);
+    		} else if (key.startsWith("326")) {
+    			setSelectedDatum(0);
+    			setSelectedProj(1);
+    			setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));            		
+    		} else if (key.startsWith("230")) {
+    			setSelectedDatum(1);
+    			setSelectedProj(1);
+    			setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
+    		} else if (key.startsWith("267")) {
+    			setSelectedDatum(3);
+    			setSelectedProj(1);
+    			setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
+    		} else if (key.startsWith("269")) {
+    			setSelectedDatum(4);
+    			setSelectedProj(1);
+    			setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
+    		} else if (key.startsWith("247")) {
+    			setSelectedDatum(5);
+    			setSelectedProj(1);
+    			setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
+    		} else if (key.startsWith("258")) {
+    			setSelectedDatum(7);
+    			setSelectedProj(1);
+    			setSelectedZone("Huso "+ Integer.parseInt(key.substring(3)));
+    		} else if (key.startsWith("221")) {
+    			setSelectedDatum(10);
+    			setSelectedProj(1);
+    			setSelectedZone("Huso "+ Integer.parseInt(key.substring(4)));
+    		} else if (key.endsWith("27492")) { // Datum 73 / Modified Portuguese Grid
+    			setSelectedDatum(2);
+    			setSelectedProj(1);
+    			setSelectedZone(-1);
+    		} else if (key.endsWith("42101")) { // WGS 84 / LCC Canada
+    			setSelectedDatum(0);
+    			setSelectedProj(2);
+    			setSelectedZone(-1);
+    		} else if (key.endsWith("9804")) { // WGS 84 / Mercator
+    			setSelectedDatum(0);
+    			setSelectedProj(3);
+    			setSelectedZone(-1);
+    		} else if (key.endsWith("30100")) { // Moon
+    			setSelectedDatum(8);
+    			setSelectedProj(0);
+    			setSelectedZone(-1);
+    		} else if (key.endsWith("49900")) { // Mars
+    			setSelectedDatum(9);
+    			setSelectedProj(0);
+    			setSelectedZone(-1);
+    		} else if (key.endsWith("42304")) { // NAD83 /  / LCC Canada
+    			setSelectedDatum(4);
+    			setSelectedProj(2);
+    			setSelectedZone(-1);
+    		} else if (key.endsWith("27582")) { // NTFParis /  / Lambert Etendu
+    			setSelectedDatum(6);
+    			setSelectedProj(1);
+    			setSelectedZone(-1);
+    		} else if (key.equals("2154")) { // RGF93 /  / Lambert 93
+    			setSelectedDatum(11);
+    			setSelectedProj(1);
+    			setSelectedZone(-1);         
+    		} else  {
+    			System.err.println("CAGADA EN EL PARSING DE LA PROYECCION: " + key);
+    		}
+    	} else {
+    	    selectedDatum = 0;
+    	    selectedProj = 0;
+    	    selectedZone = 0;
+    	}
+    }
+
+    public IProjection getProjection() {
+        IProjection proj = null;
+        String datum = "326";
+
+        if (selectedDatum == 0) {
+            datum = "326";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1) {
+                String zone = Integer.toString(selectedZone + 1);
+                if (selectedZone < 9) zone = "0" + zone;
+                return new ProjectionPool().get("EPSG:" + datum + zone);
+            } else if (selectedProj == 2)
+                return new ProjectionPool().get("EPSG:42101");
+            else if (selectedProj == 3)
+                return new ProjectionPool().get("EPSG:9804");
+            
+        } else if (selectedDatum == 1) {
+            datum = "230";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1) {
+                String zone = Integer.toString(selectedZone + 1);
+                if (selectedZone < 9) zone = "0" + zone;
+                return new ProjectionPool().get("EPSG:" + datum + zone);
+            } 
+            
+        } else if (selectedDatum == 2) { // Lisboa 73
+            datum = "274";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1)
+                return new ProjectionPool().get("EPSG:"+datum+"92");
+            
+       } else if (selectedDatum == 3) {
+            datum = "267";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1) {
+                String zone = Integer.toString(selectedZone + 3);
+                if (selectedZone+3 <= 9) zone = "0" + zone;
+                return new ProjectionPool().get("EPSG:" + datum + zone);
+            }
+            
+        } else if (selectedDatum == 4) {
+            datum = "269";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1) {
+                String zone = Integer.toString(selectedZone + 3);
+                if (selectedZone+3 <= 9) zone = "0" + zone;
+                return new ProjectionPool().get("EPSG:" + datum + zone);
+            } else if (selectedProj == 2)
+                return new ProjectionPool().get("EPSG:42304");
+            
+        } else if (selectedDatum == 5) {
+            datum = "247";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1) {
+                String zone = Integer.toString(selectedZone + 18);
+                return new ProjectionPool().get("EPSG:" + datum + zone);
+            }
+            
+        } else if (selectedDatum == 6) {
+            datum = "807";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1)
+            	return new ProjectionPool().get("EPSG:27582");
+            
+        } else if (selectedDatum == 7) {
+            datum = "258";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1) {
+                String zone = Integer.toString(selectedZone + 28);
+                return new ProjectionPool().get("EPSG:" + datum + zone);
+            }
+            
+        } else if (selectedDatum == 8) {
+            datum = "30100";
+            return new ProjectionPool().get("IAU2000:" + datum);
+            
+        } else if (selectedDatum == 9) {
+            datum = "49900";
+            return new ProjectionPool().get("IAU2000:" + datum);
+            
+        } else if (selectedDatum == 10) {
+            datum = "221";
+            if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4"+datum);
+            else if (selectedProj == 1) {
+                String zone = Integer.toString(selectedZone + 1);
+                return new ProjectionPool().get("EPSG:" + datum + "9"+ zone);
+            } 
+            
+        } else if (selectedDatum == 11) {
+        	if (selectedProj == 0)
+                return new ProjectionPool().get("EPSG:4171");
+            else if (selectedProj == 1)
+                return new ProjectionPool().get("EPSG:2154");
+        }
+
+        if (selectedProj == 2) {
+            return new ProjectionPool().get("EPSG:27492");
+        } else if (selectedProj == 3) {
+            return new ProjectionPool().get("EPSG:42101");
+        } else if (selectedProj == 4) {
+            return new ProjectionPool().get("EPSG:42304");
+        } else if (selectedProj == 5) {
+            return new ProjectionPool().get("EPSG:27582");
+        } else if (selectedProj == 6) {
+            return new ProjectionPool().get("EPSG:2154");
+        } else if (selectedProj == 7) {
+            return new ProjectionPool().get("EPSG:9804");
+        } else if (selectedProj == 8) {
+        	datum = "221";
+      	   String zone = "9";
+            //if (selectedDatum == 10) {
+                 if (selectedZone < 1) {
+                     zone += "1";
+                 } else if (selectedZone > 7) {
+                     zone += "7";
+                 } else
+                 	zone += (selectedZone+1)+"";
+            // }
+             return new ProjectionPool().get("EPSG:" + datum + zone);
+         }
+
+
+        if (selectedProj == 0) {
+            return new ProjectionPool().get("EPSG:4" + datum);
+        } else if (selectedProj == 1) {
+            String Zone = Integer.toString(selectedZone + 1);
+
+            if (selectedZone < 9) {
+                Zone = "0" + Zone;
+            }
+
+            if ((selectedDatum == 2) || (selectedDatum == 3)) {
+                if (selectedZone < 3) {
+                    Zone = "03";
+                }
+
+                if (selectedZone > 23) {
+                    Zone = "23";
+                }
+            }
+
+            if (selectedDatum == 5) {
+                if (selectedZone < 18) {
+                    Zone = "18";
+                }
+
+                if (selectedZone > 22) {
+                    Zone = "22";
+                }
+            }
+
+            if (selectedDatum == 7) {
+                if (selectedZone < 28) {
+                    Zone = "28";
+                }
+
+                if (selectedZone > 38) {
+                    Zone = "38";
+                }
+            }
+            return new ProjectionPool().get("EPSG:" + datum + Zone);
+        } 
+
+        return proj;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/package.html	(revision 42196)
@@ -0,0 +1,29 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<html>
+	<body>Interfaces gr�ficas relacionadas con el manejo de proyecciones.
+</body>
+</html>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionDialogPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionDialogPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionDialogPanel.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.ui.cts;
+
+import javax.swing.JPanel;
+
+import org.cresques.Messages;
+import org.cresques.impl.cts.ProjectionPool;
+import org.cresques.ui.DefaultDialogPanel;
+
+/**
+ * Dialogo para abrir fichero.
+ * 
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSSelectionDialogPanel extends DefaultDialogPanel {
+
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    public CSSelectionPanel getProjPanel() {
+        return (CSSelectionPanel) getContentPanel();
+    }
+
+    protected JPanel getContentPanel() {
+        if (contentPane == null) {
+            contentPane =
+                new CSSelectionPanel(Messages.getText("reference_system"));
+
+            ((CSSelectionPanel) contentPane).setProjection(new ProjectionPool()
+                .get("EPSG:32619"));
+        }
+
+        return contentPane;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionDialogPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionPanel.java	(revision 42196)
@@ -0,0 +1,244 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.ui.cts;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.border.TitledBorder;
+
+import org.cresques.Messages;
+import org.cresques.cts.IProjection;
+import org.cresques.ui.LoadableComboBox;
+
+//import es.gva.cit.geoexplorer.ui.LoadableComboBox;
+
+/**
+ * Panel de edici�n de Sistemas de referencia
+ * 
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSSelectionPanel extends JPanel {
+
+    final private static long serialVersionUID = -3370601314380922368L;
+    private LoadableComboBox datumComboBox = null;
+    private LoadableComboBox projComboBox = null;
+    private LoadableComboBox huseComboBox = null;
+    private JLabel jLabel = null;
+    private JLabel jLabel1 = null;
+    private JLabel jLabel2 = null;
+    private String tit;
+    private CSSelectionModel model;
+
+    /**
+     * Constructor de la clase.
+     */
+    public CSSelectionPanel(String tit) {
+        super();
+
+        if (tit == null) {
+            tit = Messages.getText("reference_system");
+            if (tit == null)
+                tit = "Reference System";
+        }
+
+        this.tit = tit;
+        setModel(new CSSelectionModel());
+        initialize();
+    }
+
+    /**
+     * Inicializa el panel.
+     * 
+     * @return javax.swing.JPanel
+     */
+    private void initialize() {
+        setLayout(new GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(2, 5, 2, 5);
+        c.gridy = -1;
+
+        setBorder(BorderFactory.createCompoundBorder(null, BorderFactory
+            .createTitledBorder(null, Messages.getText("reference_system"),
+                TitledBorder.DEFAULT_JUSTIFICATION,
+                TitledBorder.DEFAULT_POSITION, null, null)));
+
+        jLabel = new JLabel(Messages.getText("datum") + ":");
+        addRow(c, jLabel, getDatumComboBox());
+
+        jLabel1 = new JLabel(Messages.getText("projection") + ":");
+        addRow(c, jLabel1, getProjComboBox());
+
+        jLabel2 = new JLabel(Messages.getText("zone") + ":");
+        addRow(c, jLabel2, getHuseComboBox());
+
+        setHuseComboBoxEnabled(false);
+    }
+
+    public void setModel(CSSelectionModel model) {
+        this.model = model;
+
+        getHuseComboBox().loadData(model.getZoneList());
+        getDatumComboBox().loadData(model.getDatumList());
+        getProjComboBox().loadData(model.getProjectionList());
+    }
+
+    private void setHuseComboBoxEnabled(boolean enabled) {
+        if (jLabel2 != null) {
+            jLabel2.setEnabled(enabled);
+        }
+
+        getHuseComboBox().setEnabled(enabled);
+    }
+
+    private void setDatumComboBoxEnabled(boolean enabled) {
+        if (jLabel != null) {
+            jLabel.setEnabled(enabled);
+        }
+
+        getDatumComboBox().setEnabled(enabled);
+    }
+
+    public void setProjection(IProjection proj) {
+        model.setProjection(proj);
+
+        setDatumComboBoxEnabled(true);
+        getDatumComboBox().setSelectedIndex(model.getSelectedDatum());
+
+        getProjComboBox().removeAllItems();
+        getProjComboBox().loadData(model.getProjectionList());
+
+        model.setProjection(proj);
+        getProjComboBox().setSelectedIndex(model.getSelectedProj());
+        model.setProjection(proj);
+
+        if (model.getSelectedZone() >= 0) {
+            setHuseComboBoxEnabled(true);
+            getHuseComboBox().removeAllItems();
+            getHuseComboBox().loadData(model.getZoneList());
+
+            model.setProjection(proj);
+            getHuseComboBox().setSelectedIndex(model.getSelectedZone());
+        } else {
+            setHuseComboBoxEnabled(false);
+            getHuseComboBox().setSelectedIndex(0);
+        }
+    }
+
+    /**
+     * Inicializa datumComboBox
+     * 
+     * @return javax.swing.JComboBox
+     */
+    private LoadableComboBox getDatumComboBox() {
+        if (datumComboBox == null) {
+            datumComboBox = new LoadableComboBox();
+
+            datumComboBox.addItemListener(new java.awt.event.ItemListener() {
+
+                public void itemStateChanged(java.awt.event.ItemEvent e) {
+                    model.setSelectedDatum(e.getItem());
+                    getProjComboBox().removeAllItems();
+                    getProjComboBox().loadData(model.getProjectionList());
+                }
+            });
+        }
+
+        return datumComboBox;
+    }
+
+    /**
+     * Inicializa projComboBox
+     * 
+     * @return javax.swing.JComboBox
+     */
+    private LoadableComboBox getProjComboBox() {
+        if (projComboBox == null) {
+            projComboBox = new LoadableComboBox();
+            // projComboBox.setBounds(14, 80, 250, 23);
+            projComboBox.addItemListener(new java.awt.event.ItemListener() {
+
+                public void itemStateChanged(java.awt.event.ItemEvent e) {
+                    model.setSelectedProj(e.getItem());
+
+                    if (model.getSelectedProjType() == CSSelectionModel.TRANSVERSAL) {
+                        setHuseComboBoxEnabled(true);
+                        getHuseComboBox().removeAllItems();
+                        getHuseComboBox().loadData(model.getZoneList());
+
+                    } else {
+                        setHuseComboBoxEnabled(false);
+                    }
+
+                }
+            });
+        }
+
+        return projComboBox;
+    }
+
+    /**
+     * Inicializa usoComboBox
+     * 
+     * @return javax.swing.JComboBox
+     */
+    private LoadableComboBox getHuseComboBox() {
+        if (huseComboBox == null) {
+            huseComboBox = new LoadableComboBox();
+            huseComboBox.addItemListener(new java.awt.event.ItemListener() {
+
+                public void itemStateChanged(java.awt.event.ItemEvent e) {
+                    model.setSelectedZone(e.getItem());
+                }
+            });
+        }
+
+        return huseComboBox;
+    }
+
+    /**
+     * @return
+     */
+    public IProjection getProjection() {
+        return model.getProjection();
+    }
+
+    private void addRow(GridBagConstraints c, JComponent label, JComponent text) {
+        c.anchor = GridBagConstraints.WEST;
+        c.weightx = 0.0d;
+        c.gridx = 0;
+        c.gridy++;
+        add(label, c);
+
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0d;
+        c.gridx = 1;
+        add(text, c);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/cts/CSSelectionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/LoadableComboBox.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/LoadableComboBox.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/LoadableComboBox.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.ui;
+
+import javax.swing.JComboBox;
+
+/**
+ * @author "Luis W. Sevilla" (sevilla_lui@gva.es)
+ */
+public class LoadableComboBox extends JComboBox {
+
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    /**
+     * Carga el vector de strings data con los valores pasados por par�metro
+     * 
+     * @param data
+     *            vector de strings con los valores
+     */
+    public void loadData(String[] data) {
+        if (data == null) {
+            return;
+        }
+
+        for (int i = 0; i < data.length; i++) {
+            addItem(data[i]);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/LoadableComboBox.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/.cvsignore
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/.cvsignore	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/.cvsignore	(revision 42196)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/.cvsignore
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/package.html	(revision 42196)
@@ -0,0 +1,29 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<html>
+	<body>User Interface: Clases para interface de usuario.
+</body>
+</html>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/DefaultDialogPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/DefaultDialogPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/DefaultDialogPanel.java	(revision 42196)
@@ -0,0 +1,187 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.cresques.ui;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.cresques.Messages;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class DefaultDialogPanel extends JPanel { // implements
+                                                 // ComponentListener{
+    final private static long serialVersionUID = -3370601314380922368L;
+    protected JPanel contentPane = null;
+    private JPanel tabPane = null;
+    protected JPanel buttonPane = null;
+    private JButton acceptButton = null;
+    private JButton cancelButton = null;
+    protected int cWidth = 0, difWidth = 0;
+    protected int cHeight = 0, difHeight = 0;
+	protected JPanel pButton = null;
+
+    /**
+     * Constructor
+     * @param init
+     */
+    public DefaultDialogPanel(boolean init){
+    	if(init)
+    		initialize();
+    }
+
+    /**
+     * Constructor
+     */
+    public DefaultDialogPanel() {
+        super();
+        this.initialize();
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    public void initialize() {
+        GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
+        gridBagConstraints11.gridx = 0;
+        gridBagConstraints11.insets = new java.awt.Insets(4,0,0,0);
+        gridBagConstraints11.gridy = 1;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(5,0,2,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        setLayout(new GridBagLayout());
+        setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+        this.add(getTabPanel(), gridBagConstraints);
+        this.add(getPButton(), gridBagConstraints11);
+    }
+
+    /**
+     * Obtiene el panel general
+     * @return
+     */
+    protected JPanel getContentPanel() {
+        if (contentPane == null) {
+            contentPane = new JPanel();
+            contentPane.setLayout(new GridBagLayout());
+        }
+
+        return contentPane;
+    }
+
+    public JPanel getTabPanel() {
+        if (tabPane == null) {
+            GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+            gridBagConstraints2.insets = new java.awt.Insets(5,0,0,0);
+            gridBagConstraints2.gridy = 0;
+            gridBagConstraints2.gridx = 0;
+            tabPane = new JPanel();
+            tabPane.setLayout(new GridBagLayout());
+
+            tabPane.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.SoftBevelBorder.RAISED));
+            tabPane.add(getContentPanel(), gridBagConstraints2);
+        }
+
+        return tabPane;
+    }
+
+    /**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPButton() {
+		if (pButton == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout1.setHgap(0);
+			flowLayout1.setVgap(0);
+			pButton = new JPanel();
+			pButton.setLayout(flowLayout1);
+			pButton.add(getButtonPanel(), null);
+		}
+		return pButton;
+	}
+
+
+    /**
+     * Obtiene el panel que contiene los botones de Aceptar, Cancelar y Aplicar
+     * @return
+     */
+    protected JPanel getButtonPanel() {
+        if (buttonPane == null) {
+            GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+            gridBagConstraints3.gridx = 1;
+            gridBagConstraints3.insets = new java.awt.Insets(0,3,0,3);
+            gridBagConstraints3.gridy = 0;
+            GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+            gridBagConstraints1.insets = new java.awt.Insets(0,0,0,3);
+            gridBagConstraints1.gridy = 0;
+            gridBagConstraints1.gridx = 0;
+            buttonPane = new JPanel();
+            buttonPane.setLayout(new GridBagLayout());
+            buttonPane.add(getAcceptButton(), gridBagConstraints1);
+            buttonPane.add(getCancelButton(), gridBagConstraints3);
+        }
+
+        return buttonPane;
+    }
+
+    /**
+     * This method initializes Accept button
+     *
+     * @return javax.swing.JButton
+     */
+    public JButton getAcceptButton() {
+        if (acceptButton == null) {
+            acceptButton = new JButton("Aceptar");
+            acceptButton.setText(Messages.getText("Aceptar"));
+        }
+
+        return acceptButton;
+    }
+
+    /**
+     * This method initializes Cancel Button
+     *
+     * @return javax.swing.JButton
+     */
+    public JButton getCancelButton() {
+        if (cancelButton == null) {
+            cancelButton = new JButton("Cancelar");
+            cancelButton.setText(Messages.getText("Cancelar"));
+        }
+
+        return cancelButton;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/cresques/ui/DefaultDialogPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanel.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels;
+
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.app.gui.panels.crs.ICrsUIFactory;
+import org.gvsig.app.gui.panels.crs.ISelectCRSButton;
+
+
+public abstract class CRSSelectPanel extends JPanel implements ISelectCRSButton {
+	private boolean transPanelActive = false;
+
+	protected ActionListener actionListener = null;
+
+	/**
+	 * 
+	 * @param panelClass
+	 * @deprecated use CRSSelectPanelFactory.registerPanelClass
+	 */
+	public static void registerPanelClass(Class panelClass) {
+		CRSSelectPanelFactory.registerPanelClass(panelClass);
+	}
+
+	/**
+	 * 
+	 * @param uiFactory
+	 * @deprecated use CRSSelectPanelFactory.registerUIFactory
+	 */
+	public static void registerUIFactory(Class uiFactory) {
+		CRSSelectPanelFactory.registerUIFactory(uiFactory);
+	}
+
+	/**
+	 * 
+	 * @param proj
+	 * @return CRSSelectPanel
+	 * @deprecated use CRSSelectPanelFactory.getPanel
+	 */
+	public static CRSSelectPanel getPanel(IProjection proj) {
+		return CRSSelectPanelFactory.getPanel(proj);
+	}
+	
+	/**
+	 * 
+	 * @return ICrsUIFactory
+	 * @deprecated use CRSSelectPanelFactory.getUIFactory
+	 */
+	public static ICrsUIFactory getUIFactory() {
+		return CRSSelectPanelFactory.getUIFactory();
+	}
+
+	
+	public CRSSelectPanel(IProjection proj) {
+		super();
+	}
+	
+	abstract public JButton getJBtnChangeProj();
+	
+	abstract public JLabel getJLabel();
+	
+	abstract public IProjection getCurProj();
+	
+	abstract public boolean isOkPressed();
+	/**
+	 * @param actionListener The actionListener to set.
+	 */
+	public void addActionListener(ActionListener actionListener) {
+		this.actionListener = actionListener;
+	}
+
+	public boolean isTransPanelActive() {
+		return transPanelActive;
+	}
+
+	public void setTransPanelActive(boolean transPanelActive) {
+		this.transPanelActive = transPanelActive;
+	}
+		
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCRSButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCRSButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCRSButton.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels.crs;
+
+import javax.swing.JButton;
+
+import org.cresques.cts.IProjection;
+
+public interface ISelectCRSButton {
+	 public boolean isTransPanelActive();
+	 public void setTransPanelActive(boolean transPanelActive);
+	 public IProjection getCurProj();
+	 public boolean isOkPressed();
+	 public void setCurProj(IProjection curProj);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCRSButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/CrsUIFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/CrsUIFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/CrsUIFactory.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels.crs;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.app.project.documents.view.info.gui.CSSelectionDialog;
+
+
+public class CrsUIFactory implements ICrsUIFactory {
+
+
+	public ISelectCrsPanel getSelectCrsPanel(IProjection projection,
+			boolean isTransPanelActive) {
+		CSSelectionDialog panel = new CSSelectionDialog();
+		panel.setProjection(projection);
+		return panel;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/CrsUIFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCrsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCrsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCrsPanel.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels.crs;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+
+
+public interface ISelectCrsPanel extends IWindow {
+	public IProjection getProjection();
+    public void setProjection(IProjection proj);
+    public boolean isOkPressed();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ISelectCrsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ICrsUIFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ICrsUIFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ICrsUIFactory.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels.crs;
+
+import org.cresques.cts.IProjection;
+
+public interface ICrsUIFactory {
+	public ISelectCrsPanel getSelectCrsPanel(IProjection projection, boolean isTransPanelActive);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/crs/ICrsUIFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/ProjChooserPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/ProjChooserPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/ProjChooserPanel.java	(revision 42196)
@@ -0,0 +1,180 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 30-ene-2005
+ */
+package org.gvsig.app.gui.panels;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.Messages;
+import org.cresques.cts.IProjection;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class ProjChooserPanel extends CRSSelectPanel {
+
+    private IProjection curProj = null;
+    private JLabel jLblProj = null;
+    private JLabel jLblProjName = null;
+    private JButton jBtnChangeProj = null;
+    private JPanel jPanelProj = null;
+    private boolean okPressed = false;
+
+    /**
+	 *
+	 */
+    public ProjChooserPanel(IProjection proj) {
+        super(proj);
+        setCurProj(proj);
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        GridLayout gl = new GridLayout(1,2);
+        
+        this.setLayout(gl); // new FlowLayout(FlowLayout.LEFT, 15, 0));
+        this.add(getJLblProjName());
+        
+        JPanel secondHalf = new JPanel(new GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();
+        
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0;   //request any extra vertical space
+        c.gridx = 0;      
+        c.gridwidth = 1;  
+        c.gridy = 0;      
+        secondHalf.add(getJLblProj(), c);
+        
+        c.fill = GridBagConstraints.NONE;
+        c.weightx = 0.0;  
+        c.gridx = 1;      
+        secondHalf.add(getJBtnChangeProj(), c);
+
+        this.add(secondHalf);
+        initBtnChangeProj();
+    }
+
+    private void initBtnChangeProj() {
+        getJBtnChangeProj().addActionListener(
+            new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    okPressed = false;
+
+                    ISelectCrsPanel csSelect =
+                        getUIFactory().getSelectCrsPanel(curProj, true);
+
+                    ToolsSwingLocator.getWindowManager().showWindow((JComponent) csSelect, Messages.getText("selecciona_sistema_de_referencia"), MODE.DIALOG);
+
+                    if (csSelect.isOkPressed()) {
+                        curProj = csSelect.getProjection();
+                        jLblProj.setText(curProj.getAbrev());
+                        okPressed = true;
+                        if (actionListener != null) {
+                            actionListener.actionPerformed(e);
+                        }
+                    }
+                }
+            });
+    }
+
+    public JLabel getJLblProjName() {
+        if (jLblProjName == null) {
+            jLblProjName = new JLabel("Proyeccion actual");
+            jLblProjName.setText(Messages.getText("__proyeccion_actual")); //$NON-NLS-1$
+        }
+        return jLblProjName;
+    }
+
+    public JLabel getJLabel() {
+        return getJLblProjName();
+    }
+
+    public JLabel getJLblProj() {
+        if (jLblProj == null) {
+            jLblProj = new JLabel();
+            jLblProj.setAlignmentX(JLabel.CENTER_ALIGNMENT);
+            if (curProj != null)
+                jLblProj.setText(curProj.getAbrev());
+        }
+        return jLblProj;
+    }
+
+    public void addBtnChangeProjActionListener(java.awt.event.ActionListener al) {
+        jBtnChangeProj.addActionListener(al);
+    }
+
+    /**
+     * This method initializes jButton
+     * 
+     * @return javax.swing.JButton
+     */
+    public JButton getJBtnChangeProj() {
+        if (jBtnChangeProj == null) {
+            jBtnChangeProj = new JButton();
+            jBtnChangeProj.setText("..."); //$NON-NLS-1$
+            // jBtnChangeProj.setPreferredSize(new java.awt.Dimension(26, 26));
+        }
+        return jBtnChangeProj;
+    }
+
+    /**
+     * @return Returns the curProj.
+     */
+    public IProjection getCurProj() {
+        return curProj;
+    }
+
+    /**
+     * @param curProj
+     *            The curProj to set.
+     */
+    public void setCurProj(IProjection curProj) {
+        this.curProj = curProj;
+    }
+
+    /**
+     * @return Returns the okPressed.
+     */
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/ProjChooserPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanelFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanelFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanelFactory.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.app.gui.panels.crs.ICrsUIFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class CRSSelectPanelFactory  {
+	private static Logger logger = LoggerFactory.getLogger(CRSSelectPanelFactory.class);
+	
+	private static Class panelClass = null;
+	private static Class uiFactory = null;
+
+	public static void registerPanelClass(Class panelClass) {
+		CRSSelectPanelFactory.panelClass = panelClass;
+	}
+
+	public static void registerUIFactory(Class uiFactory) {
+		CRSSelectPanelFactory.uiFactory = uiFactory;
+	}
+	
+	public static CRSSelectPanel getPanel(IProjection proj) {
+		CRSSelectPanel panel = null;
+		Class [] args = {IProjection.class};
+		Object [] params = {proj};
+		try {
+			panel = (CRSSelectPanel) panelClass.getConstructor(args).newInstance(params);
+		} catch (IllegalArgumentException e) {
+			logger.error("Error creating CRS selection button", e);
+		} catch (SecurityException e) {
+			logger.error("Error creating CRS selection button", e);
+		} catch (InstantiationException e) {
+			logger.error("Error creating CRS selection button", e);
+		} catch (IllegalAccessException e) {
+			logger.error("Error creating CRS selection button", e);
+		} catch (InvocationTargetException e) {
+			logger.error("Error creating CRS selection button", e);
+		} catch (NoSuchMethodException e) {
+			logger.error("Error creating CRS selection button", e);
+		}
+		return panel;
+	}
+		
+	public static ICrsUIFactory getUIFactory() {
+		ICrsUIFactory factory = null;
+		try {
+			factory = (ICrsUIFactory) uiFactory.newInstance();
+		} catch (InstantiationException e) {
+			logger.error("Error creating CRS UI factory. Switching to default factory", e);
+		} catch (IllegalAccessException e) {
+			logger.error("Error creating CRS UI factory. Switching to default factory", e);
+		}
+		return factory;
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/gui/panels/CRSSelectPanelFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/project/documents/view/info/gui/CSSelectionDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/project/documents/view/info/gui/CSSelectionDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/project/documents/view/info/gui/CSSelectionDialog.java	(revision 42196)
@@ -0,0 +1,112 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 26-ene-2005
+ */
+package org.gvsig.app.project.documents.view.info.gui;
+
+import java.awt.Dimension;
+
+import org.cresques.Messages;
+import org.cresques.cts.IProjection;
+import org.cresques.ui.cts.CSSelectionDialogPanel;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+
+public class CSSelectionDialog extends CSSelectionDialogPanel implements ISelectCrsPanel  {
+
+    private boolean okPressed = false;
+    private IProjection lastProj = null;
+
+    /**
+	 *
+	 */
+    public CSSelectionDialog() {
+        super();
+        this.init();
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void init() {
+        getAcceptButton().addActionListener(
+            new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    closeWindow();
+                    okPressed = true;
+                }
+            });
+        getCancelButton().addActionListener(
+            new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    setProjection(lastProj);
+                    closeWindow();
+                    okPressed = false;
+                }
+            });
+    }
+
+    public void closeWindow() {
+    	this.setVisible(false);
+    }
+    
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    /**
+     * @return
+     */
+    public IProjection getProjection() {
+        return getProjPanel().getProjection();
+    }
+
+    /**
+     * @param proj
+     */
+    public void setProjection(IProjection proj) {
+        lastProj = proj;
+        getProjPanel().setProjection(proj);
+    }
+
+	public WindowInfo getWindowInfo() {
+        WindowInfo m_viewinfo =
+                new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+            m_viewinfo.setTitle(Messages.getText("selecciona_sistema_de_referencia"));
+            Dimension dim = getPreferredSize();
+            m_viewinfo.setWidth(dim.width);
+            m_viewinfo.setHeight(dim.height);
+            return m_viewinfo;
+	}
+
+	public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/java/org/gvsig/app/project/documents/view/info/gui/CSSelectionDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.cresques.ui.CresquesCtsUILibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/pom.xml	(revision 42196)
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.projection.cresques.ui</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.projection.cresques</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.cresques.impl</artifactId>
+      <version>${project.version}</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+<!--
+    <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-legacy</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-main</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-referencing</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>geojava</groupId>
+        <artifactId>geojava</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_core</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_codec</artifactId>
+        <scope>compile</scope>
+    </dependency>
+-->
+  </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui
___________________________________________________________________
Added: svn:ignore
   + target

.settings

.classpath

.project



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques
___________________________________________________________________
Added: svn:ignore
   + .settings

.project


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/pom.xml	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.projection</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+  <modules>
+    <module>org.gvsig.projection.cresques</module>
+  </modules>
+
+  <description>This project is a transitional project. Contains the old implementation of projection management used in gvSIG.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.projection
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/Geometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/Geometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/Geometry.java	(revision 42196)
@@ -0,0 +1,805 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Rectangle2D;
+import java.io.Serializable;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Object specified in <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012"
+ * >ISO 19107</a>. It is the root class of the geometric object taxonomy and
+ * supports interfaces common to all geographically referenced geometric
+ * objects.
+ * </p>
+ * <p>
+ * Geometry instances are sets of direct positions in a particular coordinate
+ * reference system. A Geometry can be regarded as an infinite set of points
+ * that satisfies the set operation interfaces for a set of direct positions.
+ * </p>
+ * <p>
+ * A geometric object shall be a combination of a coordinate geometry and a
+ * coordinate reference system. In all of the operations, all geometric
+ * calculations shall be done in the coordinate reference system of the first
+ * geometric object accessed, which is normally the object whose operation is
+ * being invoked. Returned objects shall be in the coordinate reference system
+ * in which the calculations are done unless explicitly stated otherwise.
+ * </p>
+ * <p>
+ * This class extends of the {@link Shape} class by historical reasons but this
+ * inheritance will disappear in future versions.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012"
+ *      >ISO 19107< /a>
+ */
+public interface Geometry extends Shape, Serializable, Comparable {
+
+	/**
+	 * Predefined geometry types in the model.
+	 */
+	public interface TYPES {
+
+		/**
+		 * Any geometry.
+		 */
+
+		public final static int GEOMETRY = 0;
+
+		/**
+		 * A geometric element that has zero dimensions and a location
+		 * determinable by an ordered set of coordinates.
+		 */
+		public final static int POINT = 1;
+
+		/**
+		 * A straight or curved geometric element that is generated by a moving
+		 * point and that has extension only along the path of the point.
+		 */
+		public final static int CURVE = 2;
+
+		/**
+		 * A closed plane figure bounded by straight lines.
+		 */
+		public final static int SURFACE = 3;
+
+		/**
+		 * Solids in 3D.
+		 */
+		public final static int SOLID = 4;
+
+      	/**
+		 * A set that can contain points, lines and polygons. This is usual in
+		 * <i>CAD</i> layers <i>(dxf, dgn, dwg)</i>.
+		 */
+		public final static int AGGREGATE = 6;
+		/**
+		 * A set of points.
+		 */
+		public final static int MULTIPOINT = 7;
+
+		/**
+		 * A set of lines.
+		 */
+		public final static int MULTICURVE = 8;
+
+		/**
+		 * A set of polygons.
+		 */
+		public final static int MULTISURFACE = 9;
+
+		/**
+		 * A set of solids.
+		 */
+		public final static int MULTISOLID = 10;
+
+		/**
+		 * A closed plane curve every point of which is equidistant from a fixed
+		 * point within the curve.
+		 */
+		public final static int CIRCLE = 11;
+
+		/**
+		 * A continuous portion (as of a circle or ellipse) of a curved line.
+		 */
+		public final static int ARC = 12;
+
+		/**
+		 * A closed plane curve generated by a point moving in such a way that
+		 * the sums of its distances from two fixed points is a constant : a
+		 * plane section of a right circular cone that is a closed curve.
+		 */
+		public final static int ELLIPSE = 13;
+
+		public final static int SPLINE = 14;
+
+		public final static int ELLIPTICARC = 15;
+
+		/**
+		 * NO DATA geometry.
+		 */
+		public final static int NULL = 16;
+                
+                public final static int COMPLEX = 17;
+                
+                
+		public final static int LINE = 18;
+                
+		public final static int POLYGON = 19;
+	}
+
+	public interface DIMENSIONS {
+		public final static int X = 0;
+		public final static int Y = 1;
+		public final static int Z = 2;
+	}
+
+	/**
+	 * The subtype of a geometry is related with the dimension of the geometry,
+	 * that is a combination between the spatial dimension (2D, 2ZD, 3D) and the
+	 * M coordinate or "measure".
+	 * 
+	 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+	 */
+	public interface SUBTYPES {
+
+		/**
+		 * Geometries with two dimensions.
+		 */
+		public final static int GEOM2D = 0;
+
+		/**
+		 * Geometries with three dimensions.
+		 */
+		public final static int GEOM3D = 1;
+
+		/**
+		 * Geometries with two dimensions and with the M coordinate.
+		 */
+		public final static int GEOM2DM = 2;
+
+		/**
+		 * Geometries with three dimensions and with the M coordinate.
+		 */
+		public final static int GEOM3DM = 3;
+
+		/**
+		 * The subtype us unknown.
+		 */
+		public final static int UNKNOWN = 4;
+	}
+
+	/**
+	 * Initial value for new geometry types (it must not overlap with the basic
+	 * ones defined in TYPES).
+	 */
+	public static final int EXTENDED_GEOMTYPE_OFFSET = 17;
+
+	/**
+	 * Initial value for new geometry subtypes (it must not overlap with the
+	 * basic ones defined in SUBTYPES).
+	 */
+	public static final int EXTENDED_GEOMSUBTYPE_OFFSET = 6;
+
+	public interface OPERATIONS {
+		public final static String CONVERTTOWKT = "toWKT";
+		public final static String CONVERTTOWKB = "toWKB";
+		public final static String BUFFER = "buffer";
+		public final static String DISTANCE = "Distance";
+		public final static String CONTAINS = "Contains";
+		public final static String OVERLAPS = "OVERLAPS";
+		public final static String CONVEXHULL = "ConvexHull";
+		public final static String COVERS = "Covers";
+		public final static String CROSSES = "Crosses";
+		public final static String DIFFERENCE = "Difference";
+		public final static String DISJOIN = "Disjoin";
+		public final static String INTERSECTION = "Intersaction";
+		public final static String INTERSECTS = "Intersects";
+		public final static String TOUCHES = "Touches";
+		public final static String UNION = "Union";
+		public final static String WITHIN = "Within";
+		public final static String COVEREDBY = "CoveredBy";
+	}
+
+        public interface ValidationStatus {
+
+            public static final int VALID = 0;
+            public static final int CURRUPTED = 1;
+            public static final int UNKNOW = 2;
+            public static final int DISCONNECTED_INTERIOR = 10;
+            public static final int DUPLICATE_RINGS = 11;
+            public static final int HOLE_OUTSIDE_SHELL = 12;
+            public static final int INVALID_COORDINATE = 13;
+            public static final int NESTED_HOLES = 14;
+            public static final int NESTED_SHELLS = 15;
+            public static final int RING_NOT_CLOSED = 17;
+            public static final int RING_SELF_INTERSECTION = 18;
+            public static final int SELF_INTERSECTION = 19;
+            public static final int TOO_FEW_POINTS = 20;
+
+            /**
+             * True if the geoemtry are valid.
+             * 
+             * @return true form valid geometries
+             */
+            public boolean isValid();
+            
+            /**
+             * Return the status code results of validate the geometry.
+             * 
+             * @return validation code
+             */
+            public int getStatusCode();
+
+            /**
+             * Return the nearest point to the problem when validate the geometry.
+             * 
+             * If the geometry is valid, this return null.
+             * 
+             * @return the nearest point to the problem or null.
+             */
+            public Point getProblemLocation();
+
+            /**
+             * Return a human readable message explaining the cause of the problem.
+             * 
+             * If the geometry is valid this is null.
+             * 
+             * @return the message cause of the problem.
+             */
+            public String getMessage();
+        }
+        
+        public static int BEST = 0;
+	/**
+	 * North.
+	 */
+	public static int N = 1;
+
+	/**
+	 * North - East.
+	 */
+	public static int NE = 2;
+
+	/**
+	 * East.
+	 */
+	public static int E = 3;
+
+	/**
+	 * South - East.
+	 */
+	public static int SE = 4;
+
+	/**
+	 * South.
+	 */
+	public static int S = 5;
+
+	/**
+	 * South - West.
+	 */
+	public static int SW = 6;
+
+	/**
+	 * West.
+	 */
+	public static int W = 7;
+
+	/**
+	 * North - West.
+	 */
+	public static int NW = 8;
+
+	public static int SELECTHANDLER = 0;
+	public static int STRETCHINGHANDLER = 1;
+
+	/**
+	 * If this geometry is a predefined interface then this method returns one
+	 * of {@link Geometry.TYPES} contants.<br>
+	 * If this geometry is an extended type then this method returns a runtime
+	 * constant that identifies its type. By convention this value is stored in
+	 * a constant called .CODE within the geometry class, for instance:
+	 * Point2D.CODE.
+	 * 
+	 * @return If this geometry is a predefined interface then one of
+	 *         {@link Geometry.TYPES} or a runtime constant if it is an extended
+	 *         type.
+	 */
+	public int getType();
+
+	/**
+	 * Creates a clone of this geometry.
+	 * 
+	 * @return A clone of this geometry.
+	 */
+	public Geometry cloneGeometry();
+
+	/**
+	 * Returns true if this geometry intersects the rectangle passed as
+	 * parameter.
+	 * 
+	 * @param r
+	 *            Rectangle.
+	 * 
+	 * @return True, if <code>this</code> intersects <code>r</code>.
+	 */
+	public boolean intersects(Rectangle2D r);
+
+	/**
+	 * Used by the drawing strategies to quickly test whether this geometry
+	 * intersects with the visible rectangle.
+	 * 
+	 * @param x
+	 *            The minimum X coordinate.
+	 * @param y
+	 *            The minimum Y coordinate.
+	 * @param w
+	 *            The width of the envelope.
+	 * @param h
+	 *            The height of the envelope.
+	 * @return true if <code>this</code> intersects the rectangle defined by the
+	 *         parameters.
+	 */
+	public boolean fastIntersects(double x, double y, double w, double h);
+
+	/**
+	 * <p>
+	 * Returns the minimum bounding box for this Geometry. This shall be the
+	 * coordinate region spanning the minimum and maximum value for each
+	 * ordinate taken on by DirectPositions in this Geometry. The simplest
+	 * representation for an envelope consists of two DirectPositions, the first
+	 * one containing all the minimums for each ordinate, and second one
+	 * containing all the maximums.
+	 * </p>
+	 * 
+	 * @return The minimum bounding box for this Geometry.
+	 */
+	public Envelope getEnvelope();
+
+	/**
+	 * Reprojects this geometry by the coordinate transformer passed as
+	 * parameter.
+	 * 
+	 * @param ct
+	 *            Coordinate Transformer.
+	 */
+	public void reProject(ICoordTrans ct);
+
+	/**
+	 * It applies an affine transformation to the geometry.
+	 * If parameter value is null, it will be considered an
+	 * empty transformation, therefore equivalent to the identity
+	 * transformation.
+	 * 
+	 * @param at
+	 *            The transformation to apply.
+	 */
+	public void transform(AffineTransform at);
+	/**
+	 * Returns the largest number n such that each direct position in a
+	 * geometric set can be associated with a subset that has the direct
+	 * position in its interior and is similar (isomorphic) to Rn, Euclidean
+	 * n-space.
+	 * 
+	 * @return The dimension.
+	 */
+	public int getDimension();
+
+	/**
+	 * Returns <code>true</code> if this Geometry has no interior point of
+	 * self-intersection or self-tangency. In mathematical formalisms, this
+	 * means that every point in the interior of the object must have a metric
+	 * neighborhood whose intersection with the object is isomorphic to an
+	 * n-sphere, where n is the dimension of this Geometry.
+	 * 
+	 * @return If the geometry is simple.
+	 */
+	public boolean isSimple();
+
+        public boolean isCCW()
+                throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	/**
+	 * Invokes a geometry operation given its index and context.
+	 * 
+	 * @param index
+	 *            Unique index of the operation. Operation code.
+	 * @param ctx
+	 *            The context of the geometry operation.
+	 * @return Object returned by the operation.
+	 * @throws GeometryOperationNotSupportedException
+	 *             It is thrown when the operation has been not registered for
+	 *             this geometry.
+	 * @throws GeometryOperationException
+	 *             It is thrown when there is an error executing the operation.
+	 */
+	public Object invokeOperation(int index, GeometryOperationContext ctx)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	/**
+	 * Invokes a geometry operation given its name and context.
+	 * 
+	 * @param opName
+	 *            Operation name.
+	 * @param ctx
+	 *            The context of the geometry operation.
+	 * @return Object returned by the operation.
+	 * @throws GeometryOperationNotSupportedException
+	 *             It is thrown when the operation has been not registered for
+	 *             this geometry.
+	 * @throws GeometryOperationException
+	 *             It is thrown when there is an error executing the operation.
+	 */
+	public Object invokeOperation(String opName, GeometryOperationContext ctx)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	/**
+	 * Instance of the GeometryType associated to this geometry.
+	 * 
+	 * @return The geometry type.
+	 */
+	public GeometryType getGeometryType();
+
+	/**
+	 * Return a byte array with the equivalent in WKB format of the Geometry.
+	 * 
+	 * Utility method to wrap the invocation to the operation
+	 * {@link OPERATIONS#CONVERTTOWKB}.
+	 * 
+	 * @return the WKB version of the geometry
+	 */
+	public byte[] convertToWKB() throws GeometryOperationNotSupportedException,
+		GeometryOperationException;
+
+	public byte[] convertToWKB(int srs) 
+		throws GeometryOperationNotSupportedException, GeometryOperationException;
+	
+	public byte[] convertToWKBForcingType(int srs, int type) 
+		throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+	/**
+	 * Return a string with the equivalent in WKT format of the Geometry.
+	 * 
+	 * This is a utility method to wrap the invocation to the operation
+	 * {@link OPERATIONS#CONVERTTOWKT}.
+	 * 
+	 * @return the WKT version of the geometry.
+	 * 
+	 * @throws GeometryOperationNotSupportedException
+	 * @throws GeometryOperationException
+	 */
+	public String convertToWKT() throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	/**
+	 * Computes a buffer area around this geometry having the given width
+	 * 
+	 * This is a utility method to wrap the invocation to the operation
+	 * {@link OPERATIONS#BUFFER}.
+	 * 
+	 * @param distance
+	 *            the width of the buffer
+	 * 
+	 * @return a new Geometry with the computed buffer.
+	 * 
+	 * @throws GeometryOperationNotSupportedException
+	 * @throws GeometryOperationException
+	 */
+	public Geometry buffer(double distance)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	/**
+	 * Tests whether this geometry contains the specified geometry.
+	 * 
+	 * This is a utility method to wrap the invocation to the operation
+	 * {@link OPERATIONS#CONTAINS}.
+	 * 
+	 * @param geometry
+	 *            the Geometry with which to compare this Geometry
+	 * 
+	 * @return if this Geometry contains the specified geometry
+	 * 
+	 * @throws GeometryOperationNotSupportedException
+	 * @throws GeometryOperationException
+	 */
+	public boolean contains(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	/**
+	 * Returns the minimum distance between this Geometry and the specified
+	 * geometry.
+	 * 
+	 * This is a utility method to wrap the invocation to the operation
+	 * {@link OPERATIONS#DISTANCE}.
+	 * 
+	 * @param geometry
+	 *            the Geometry from which to compute the distance
+	 * 
+	 * @return the distance between the geometries
+	 * 
+	 * @throws GeometryOperationNotSupportedException
+	 * @throws GeometryOperationException
+	 */
+	public double distance(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public Geometry[] closestPoints(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+	
+	boolean isWithinDistance(Geometry other, double distance) 
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	/**
+	 * Tests whether this geometry overlaps the specified geometry.
+	 * 
+	 * This is a utility method to wrap the invocation to the operation
+	 * {@link OPERATIONS#OVERLAPS}.
+	 * 
+	 * @param geometry
+	 *            the Geometry with which to compare this Geometry
+	 * 
+	 * @return true if the two geometries overlap.
+	 * 
+	 * @throws GeometryOperationNotSupportedException
+	 * @throws GeometryOperationException
+	 */
+	public boolean overlaps(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public Geometry convexHull() throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public boolean coveredBy(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+        
+        public boolean covers(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+        
+	public boolean crosses(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public Geometry difference(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public boolean disjoint(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public Geometry intersection(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public boolean intersects(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public Geometry snapTo(Geometry other, double snapTolerance)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+	
+	public boolean touches(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public Geometry union(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public boolean within(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException;
+
+	public Point centroid() throws GeometryOperationNotSupportedException, GeometryOperationException;
+	
+	/**
+	 * This method returns a point which is inside the geometry.
+	 * This is useful for mathematical purposes but it is very unlikely
+	 * to be a suitable place for a label, for example.
+	 * 
+	 * 
+	 * @return an interior point
+	 * @throws GeometryOperationNotSupportedException
+	 * @throws GeometryOperationException
+	 */
+	public Point getInteriorPoint() throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+	public double area() throws GeometryOperationNotSupportedException, GeometryOperationException;
+	
+	public double perimeter() throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+	
+	
+	
+	/**
+	 * Rotates the geometry by radAngle radians using the given
+	 * coordinates as center of rotation. Rotating with a positive
+	 * angle rotates points on the positive x axis toward the
+	 * positive y axis. In most cases, we assume x increases
+	 * rightwards and y increases upwards, so in most cases,
+	 * a positive angle will mean counter-clockwise rotation.
+	 * 
+	 * @param radAngle the amount of rotation, in radians
+	 * @param basex x coordinate of center of rotation
+	 * @param basey y coordinate of center of rotation
+	 */
+	public void rotate(double radAngle, double basex, double basey);
+	
+	/**
+	 * Shifts geometry by given amount in x and y axes
+	 * 
+	 * @param dx 
+	 * @param dy
+	 */
+	public void move(double dx, double dy);
+	
+	
+	/**
+	 * Scales geometry in x and y axes by given scale factors
+	 * using the given point as center of projection.
+	 *  
+	 * @param basePoint
+	 * @param sx scale factor in x axis
+	 * @param sy scale factor in y axis
+	 */
+	public void scale(Point basePoint, double sx, double sy);
+	
+        /**
+         * Check if the geometry is valid.
+         * 
+         * @return true if the geometry is valid.
+         */
+	public boolean isValid();
+	
+        /**
+         * Check if the geometry is valid and returns the validation status.
+         * 
+         * @return the ValidationStatus 
+         */
+	public ValidationStatus getValidationStatus();
+
+        /**
+         * Try to fix the geometry and return the new geometry.
+         * If the geometry is valid return the same geometry.
+         * If the geometry is corrupt or can't fix it, return null.
+         * 
+         * @return the new fixed geometry
+         */
+        public Geometry makeValid();
+        
+	//
+	// ===============================================
+	//
+	
+	
+	/**
+     * @return  the awt shape used to display the geometry. It 
+     * applies a tranformation before to return the coordinates
+     * of the shape
+     * @deprecated this class inherits of {@link Shape} by historical
+     * reasons. This method has been added just to control the usage of
+     * the {@link Shape} class but it will removed in a future.
+     */
+	public Shape getShape(AffineTransform affineTransform);
+	
+	/**
+     * @return  the awt shape used to display the geometry. 
+     * @deprecated this class inherits of {@link Shape} by historical
+     * reasons. This method has been added just to control the usage of
+     * the {@link Shape} class but it will removed in a future.
+     */
+	public Shape getShape();
+
+	/**
+	 * Returns this geometry's boundary rectangle.
+	 * 
+	 * @deprecated use getEnvelope.
+	 * @return Boundary rectangle.
+	 */
+	public Rectangle2D getBounds2D();
+
+	/**
+	 * If applies an affine transformation and returns the GeneralPathXIterator
+	 * with this geometry's information.
+	 * 
+	 * @param at
+	 *            The transformation to apply.
+	 * @return The GeneralPathXIterator with this geometry's information.
+	 * @deprecated don't use PathIterator over geometries, use instead specific API for each operation. If not has API for that operation let the project team.
+	 * 
+	 */
+	public PathIterator getPathIterator(AffineTransform at);
+
+	/**
+	 * It returns the handlers of the geometry, these they can be of two types
+	 * is straightening and of selection.
+	 * 
+	 * @param type
+	 *            Type of handlers.
+	 * 
+	 * @deprecated don't use Handlers over geometries, use instead specific API for each operation. If not has API for that operation let the project team.
+	 * @return The handlers.
+	 */
+	public Handler[] getHandlers(int type);
+
+
+	/**
+	 * If applies an affine transformation and returns the GeneralPathXIterator
+	 * with this geometry's information.
+	 * 
+	 * @param at
+	 *            The affine transformation.
+	 * @param flatness
+	 * 
+	 * @return The GeneralPathXIterator with this geometry's information.
+	 * @deprecated don't use PathIterator over geometries, use instead specific API for each operation. If not has API for that operation let the project team.
+	 */
+	PathIterator getPathIterator(AffineTransform at, double flatness);
+
+	/**
+	 * Useful to have the real shape behind the scenes. May be uses to edit it
+	 * knowing it it is a Circle, Ellipse, etc.
+	 * 
+	 * @return The awt shape
+	 * @deprecated
+	 */
+	public Shape getInternalShape();
+
+
+	/**
+	 * Get GeneralPathIterator, to do registered operations to it.
+	 * 
+	 * @return The GeneralPathX.
+	 * @deprecated don't use GeneralPathX over geometries, use instead specific API for each operation. If not has API for that operation let the project team.
+	 */
+	public GeneralPathX getGeneralPath();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/Geometry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/FinalHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/FinalHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/FinalHandler.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.handler;
+
+/**
+ * Final handlers.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface FinalHandler extends Handler {
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/FinalHandler.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/Handler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/Handler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/Handler.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.handler;
+
+import java.awt.geom.Point2D;
+
+
+/**
+* <p>In a <i>FMap</i> graphic layer, each geometry drawn has control points named <i>handlers</i>
+* that allow user to move, modify, set, ... that geometry.</p>
+*  
+* <p>Each geometry will have its own handlers, and each one can have different behavior 
+* according its nature.</p>
+* 
+* <p>The <code>Handler</code> interface defines the least set of common methods for all
+* geometry handlers.</p>
+*/
+public interface Handler {
+	/**
+	 * <p>Generic method of moving in 2D a handler of a geometry using two numbers that
+	 * represent the 2D coordinates.</p>
+	 * 
+	 * <p>Each handler of each geometry adapts this method to its own behavior in that 
+	 * geometry, that implies that could not be implemented.</p>
+	 *
+	 * @param x first dimension coordinate
+	 * @param y second dimension coordinate
+	 * 
+	 * @see #set(double, double)
+	 */
+	public void move(double x, double y);
+	/**
+ 	 * <p>Generic method of situating in 2D a handler of a geometry using two numbers
+ 	 * that represent the 2D coordinates.</p>
+	 * 
+	 * <p>Each handler of each geometry adapts this method to its own behavior in that 
+	 * geometry, that implies that could not be implemented.</p>
+	 *
+	 * @param x first dimension coordinate
+	 * @param y second dimension coordinate
+	 * 
+	 * @see #move(double, double)
+	 * @see #getPoint()
+	 */
+	public void set(double x, double y);
+
+	/**
+ 	 * <p>Generic method of getting the 2D point that represents a handler of a geometry.</p>
+	 * 
+	 * <p>Each handler of each geometry adapts this method to its own behavior in that
+	 * geometry, that implies that could not be implemented.</p>
+	 *
+	 * @return point 2D that represents this handler of geometry
+	 * 
+	 * @see #set(double, double)
+	 * @see #move(double, double)
+	 */
+	public Point2D getPoint();
+	/**
+	 * <p>Returns <code>true</code> if the object is a <code>Handler</code> and has the
+	 *  same coordinates as this one.</p>
+	 * 
+	 * @param obj the reference object with which to compare 
+	 * @return <code>true</code> if this object is the same as the <code>obj</code> 
+	 * argument; <code>false</code> otherwise
+	 * 
+	 * @see #getPoint()
+	 */
+	public boolean equalsPoint(Object obj);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/Handler.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CenterHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CenterHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CenterHandler.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.handler;
+
+
+
+/**
+ * Center handlers.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface CenterHandler extends Handler {
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CenterHandler.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CuadrantHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CuadrantHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CuadrantHandler.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.handler;
+
+/**
+ * Cuadrant handlers.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface CuadrantHandler extends Handler {
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/CuadrantHandler.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/AbstractHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/AbstractHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/AbstractHandler.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.handler;
+
+import java.awt.geom.Point2D;
+
+
+
+/**
+ * This class expands the <code>Handler</code> interface adding support for selection, and
+ *  identifying a handler of a geometry.
+ * 
+ * @see Handler
+ *
+ * @author Vicente Caballero Navarro
+ */
+public abstract class AbstractHandler implements Handler {
+	/**
+	 * Identifies each handler of a geometry.
+	 */
+	protected int index;
+	/**
+	 * Position of this handler.
+	 * 
+	 * @see #getPoint()
+	 * @see Handler#set(double, double)
+	 * @see Handler#move(double, double)
+	 */
+	protected Point2D point;
+	/**
+	 * True when the handler is selected.
+	 * 
+	 * @see #select
+	 * @see #isSelected()
+	 */
+	private boolean select=false;
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.core.Handler#getPoint()
+	 */
+	public Point2D getPoint() {
+		return point;
+	}
+	/**
+	 * Sets the state of the handler. <code>True</code> if is selected, <code>false</code> if it's not.
+	 * 
+	 * @param b <code>true</code> if the handler is selected, <code>false</code>  otherwise
+	 * 
+	 * @see #isSelected()
+	 */
+	public void select(boolean b) {
+		select=b;
+	}
+	/**
+	 * Returns the state of the handler. <code>True</code> if is selected, <code>false</code> if it's not.
+	 * 
+	 * @return <code>true</code> if the handler is selected,<code>false</code> otherwise 
+	 * 
+	 * @see #select(boolean)
+	 */
+	public boolean isSelected(){
+		return select;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.core.Handler#equalsPoint(java.lang.Object)
+	 */
+	public boolean equalsPoint(Object obj) {
+		Point2D p1=this.getPoint();
+		Point2D p2=((Handler)obj).getPoint();
+		if (p1.getX()==p2.getX() && p1.getY()==p2.getY()) {
+			return true;
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/handler/AbstractHandler.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DataTypes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DataTypes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DataTypes.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom;
+
+/**
+ * This interface defines a set of constants for all data types supported by the
+ * DAL.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface DataTypes extends org.gvsig.tools.dataTypes.DataTypes {
+
+    /*
+	 * 
+	 */
+    public static final int GEOMETRY = OBJECT + 2;
+    public static final int ENVELOPE = OBJECT + 3;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DataTypes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DirectPosition.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DirectPosition.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DirectPosition.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom;
+
+/**
+ * <p>
+ * DirectPosition object data types hold the coordinates for 
+ * a position within some coordinate reference system. 
+ * The coordinate reference system is described in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=41126">ISO 19111</a>.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @see <a http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=41126">ISO 19111</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface DirectPosition {
+	
+	/**
+	 * Returns the length of coordinate. This is determined by 
+	 * the reference system.
+	 * @return
+	 * The dimension
+	 */
+	public int getDimension();
+	
+	/**
+	 * Returns the ordinate of the given dimension.
+	 * @param dimension
+	 * The dimension to retrieve
+	 * @return
+	 * The value of the ordinate
+	 */
+	public double getOrdinate(int dimension);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DirectPosition.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/AbstractGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/AbstractGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/AbstractGeometryType.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.type;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+
+public abstract class AbstractGeometryType implements GeometryType {
+
+    /**
+     * Registered operations for a concrete geometry type
+     */
+    private List geometryOperations = new ArrayList();
+    
+    public boolean isTypeOf(GeometryType geometryType) {
+        return isTypeOf(geometryType.getType());
+    }
+
+    public boolean isSubTypeOf(GeometryType geometryType) {
+        return isSubTypeOf(geometryType.getSubType());
+    }
+
+    public void setGeometryOperation(int index, GeometryOperation geomOp) {
+        while (index > geometryOperations.size()) {
+            geometryOperations.add(null);
+        }
+
+        if (index == geometryOperations.size()) {
+            geometryOperations.add(geomOp);
+        } else {
+            geometryOperations.set(index, geomOp);
+        }
+    }
+
+    public GeometryOperation getGeometryOperation(int index) {
+        return (GeometryOperation) geometryOperations.get(index);
+    }
+
+    public boolean equals(Object obj) {
+        if (obj instanceof GeometryType) {
+            GeometryType other = (GeometryType) obj;
+            return getType() == other.getType()
+                && getSubType() == other.getSubType();
+        }
+        return false;
+    }
+
+    protected List getGeometryOperations() {
+        return geometryOperations;
+    }
+
+    public String toString() {
+        StringBuffer sb =
+            new StringBuffer("[").append(getName()).append(",[")
+                .append(getGeometryOperations().toString()).append("]");
+
+        return sb.toString();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/AbstractGeometryType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotSupportedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotSupportedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotSupportedException.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.fmap.geom.type;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.fmap.geom.GeometryException;
+
+/**
+ * This exception is raised when the someone tries to access a geometry 
+ * type that is not supported.
+ * 
+ * @author jiyarza
+ */
+public class GeometryTypeNotSupportedException extends GeometryException {
+
+	/**
+	 * Generated serial version UID 
+	 */
+	private static final long serialVersionUID = -196778635358286969L;
+
+	/**
+	 * Key to retrieve this exception's message
+	 */
+	private static final String MESSAGE_KEY = "geometry_type_not_supported_exception";
+	/**
+	 * This exception's message. Substitution fields follow the format %(fieldName) and 
+	 * must be stored in the Map returned by the values() method. 
+	 */
+	private static final String FORMAT_STRING = 
+		"The geometry class %(geomClassName) is not registered.";
+	
+	/**
+	 * Class name of the geometry type. Should never be null in this exception
+	 */
+	private String geomClassName = null;
+	
+	
+	/**
+	 * Constructor with some context data for cases in which the root cause of 
+	 * <code>this</code> is internal (usually an unsatisfied logic rule).
+	 * @param geomClass geometry class
+	 */
+	public GeometryTypeNotSupportedException(Class geomClass){
+		this(geomClass, null);
+	}
+	
+	/**
+	 * Constructor to use when <code>this</code> is caused by another Exception 
+	 * but there is not further context data available.
+	 * @param e cause exception
+	 */
+	public GeometryTypeNotSupportedException(Exception e) {
+		this(null, e);
+	}
+	
+	public GeometryTypeNotSupportedException(int type, int subType){
+	    super(
+	        "Geometry type %(type), %(subType) not supported.",
+            "_geometry_type_XtypeX_XsubTypeX_not_supported",
+	        serialVersionUID
+	     );
+		setValue("type", new Integer(type));
+        setValue("subType", new Integer(subType));
+	}
+	
+	public GeometryTypeNotSupportedException(String geomClassName){
+        super(FORMAT_STRING, MESSAGE_KEY, serialVersionUID);
+        
+        if (geomClassName != null) {
+            setValue("geomClassName", geomClassName);
+        }
+	}
+	
+	/**
+	 * Main constructor that provides both context data and a cause Exception
+	 * @param geomClass geometry class 
+	 * @param e cause exception
+	 */
+	public GeometryTypeNotSupportedException(Class geomClass, Exception e) {
+		super(FORMAT_STRING, e, MESSAGE_KEY, serialVersionUID);
+		
+		if (geomClass != null) {
+		    setValue("geomClassName", geomClass.getName());
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotSupportedException.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryType.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.type;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+
+/**
+ * This class represents the type of a geometry. All the geometries
+ * has to have a type that can be retrieved using the 
+ * {@link Geometry}{@link #getGeometryType()} method.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface GeometryType {
+	
+	/**
+	 * @return the name of the geometry type.
+	 */
+	public String getName();
+	
+	/**
+	 * @return the type of the geometry. It is a constant value
+	 * that has to be one of the values in {@link Geometry.TYPES}
+	 * The type is an abstract representation of the object (Point, Curve...) 
+	 * but it is not a concrete representation (Point2D, Point3D...). 
+	 */
+	public int getType();	
+	
+	/**
+	 * @return the subtype of the geometry. It is a constant value
+	 * that has to be one of the values in {@link Geometry.SUBTYPES}.
+	 * The subtype represents a set of geometries with a 
+	 * dimensional relationship (2D, 3D, 2DM...)
+	 */
+	public int getSubType();
+	
+	/**
+	 * Check if a geometry type inherits of other type. E.g:
+	 * the super type of an arc could be a a curve, the super 
+	 * type of a circle could be a surface...
+	 * @param geometryType
+	 * the value of the {@link Geometry.TYPES} to check if is 
+	 * it super type
+	 * @return
+	 * <true> if the the parameter is a super type of this
+	 * geometry type
+	 */
+	public boolean isTypeOf(int geometryType);
+	   
+	/**
+     * Check if a geometry subType inherits of other subType. E.g:
+     * the super Subtype of a geometry 3D could be a geometry 2D, 
+     * because the 3D extends the behavior of a geometry 2D.
+     * @param geometrySubType
+     * the value of the {@link Geometry.SUBTYPES} to check if is 
+     * it super subType
+     * @return
+     * <true> if the the parameter is a super subType of this
+     * geometry type
+     */
+	public boolean isSubTypeOf(int geometrySubType);
+
+    /**
+     * Check if a geometry type inherits of other type. E.g:
+     * the super type of an arc could be a a curve, the super
+     * type of a circle could be a surface...
+     * 
+     * @param geometryType
+     *            the geometry type to check if is it super type
+     * @return
+     *         if the the parameter is a super type of this
+     *         geometry type
+     */
+    public boolean isTypeOf(GeometryType geometryType);
+
+    /**
+     * Check if a geometry subType inherits of other subType. E.g:
+     * the super Subtype of a geometry 3D could be a geometry 2D,
+     * because the 3D extends the behavior of a geometry 2D.
+     * 
+     * @param geometryType
+     *            the geometry type to check if is it super subtype
+     * @return
+     *         if the the parameter is a super subType of this
+     *         geometry type
+     */
+    public boolean isSubTypeOf(GeometryType geometryType);
+	
+	/**
+	 * This method creates a {@link Geometry} with the type specified 
+	 * by this class. The geometry is empty, and all the internal 
+	 * attributes must be assigned to a value when the geometry has  
+	 * been created.
+	 * 
+	 * @return
+	 * A empty geometry 
+	 * @throws InstantiationException
+	 * This exception is maybe thrown when  the application is  trying 
+	 * to instantiate the geometry
+	 * @throws IllegalAccessException
+	 * This exception is maybe thrown when  the application is  trying 
+	 * to instantiate the geometry
+	 */
+	public Geometry create() throws CreateGeometryException;
+		
+	/**
+	 * Registers an operation for this geometry type. 
+	 * @param index
+	 * @param geomOp
+	 */
+	public void setGeometryOperation(int index, GeometryOperation geomOp);
+	
+	/**
+	 * Get the operation for this geometry at a concrete position
+	 * @param index
+	 * The position of the operation
+	 * @return
+	 * A geometry operation
+	 */
+	public GeometryOperation getGeometryOperation(int index);
+		
+	/**
+	 * @return the geometry as a String
+	 */
+	public String toString();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryType.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotValidException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotValidException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotValidException.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.type;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.fmap.geom.GeometryException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class GeometryTypeNotValidException extends GeometryException {
+	private static final long serialVersionUID = 2588983103873322295L;
+
+	/**
+	 * Key to retrieve this exception's message
+	 */
+	private static final String MESSAGE_KEY = "geometry_type_not_valid_exception";
+	/**
+	 * This exception's message. Substitution fields follow the format %(fieldName) and 
+	 * must be stored in the Map returned by the values() method. 
+	 */
+	private static final String FORMAT_STRING = 
+		"The geometry with type %(type) and subType %(subType) is not supported.";
+	
+	/**
+	 * Class name of the geometry type. Should never be null in this exception
+	 */
+	private int type;
+	private int subType;
+		
+	/**
+	 * Main constructor that provides both context data and a cause Exception
+	 * @param geomClass geometry class 
+	 * @param e cause exception
+	 */
+	public GeometryTypeNotValidException(int type, int subType, Exception e) {
+		super(FORMAT_STRING, e, MESSAGE_KEY, serialVersionUID);
+		// messageKey = MESSAGE_KEY;
+		// formatString = FORMAT_STRING;
+		// code = serialVersionUID;
+		//		
+		// if (e != null) {
+		// initCause(e);
+		// }
+		
+		this.type = type;
+		this.subType = subType;
+	}
+	
+	/**
+	 * Main constructor that provides both context data and a cause Exception
+	 * @param geomClass geometry class 
+	 * @param e cause exception
+	 */
+	public GeometryTypeNotValidException(int type, int subType) {
+		this(type, subType, null);
+	}	
+	
+	protected Map values() {
+		HashMap map = new HashMap();
+		map.put("type", new Integer(type));
+		map.put("subType", new Integer(subType));
+		return map;
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/type/GeometryTypeNotValidException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/Aggregate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/Aggregate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/Aggregate.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Aggregate specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * The aggregates gather geometric objects. Since they will often use orientation 
+ * modification, the curve reference and surface references do not go directly to 
+ * the {@link Curve} and {@link Surface}, but are directed to {@link OrientableCurve} 
+ * and {@link OrientableSurface}.
+ * </p>
+ * <p>
+ * Most geometric objects are contained in features, and cannot be held in 
+ * collections that are strong aggregations. For this reason, the collections 
+ * described on this package are all weak aggregations, and shall use 
+ * references to include geometric objects. 
+ * </p> 
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Aggregate extends Geometry{	
+	
+	/**
+	 * Returns the number of {@link Primitive}'s that composes
+	 * this multi geometry.
+	 * @return the number of {@link Primitive}'s that composes
+	 * this multi geometry.
+	 */
+	public int getPrimitivesNumber();
+			
+	/**
+	 * Returns one of the {@link Primitive}'s that is in
+	 * a concrete position.
+	 * @param i
+	 * Geometry position.
+	 * @return
+	 * A simple geometry.
+	 */
+	public Primitive getPrimitiveAt(int i);
+        
+                
+        /**
+         * Returns a Primitive that is the union of all the geometries of the Aggregate.
+         * 
+         * @return the union of all aggregteds
+         * 
+         */
+        Geometry union() throws GeometryOperationException, GeometryOperationNotSupportedException;
+        
+        /**
+         * Returns a Primitive that is the intersection of all the geometries of the Aggregate.
+         * 
+         * @return the union of all aggregteds
+         * 
+         */
+        Geometry intersection() throws GeometryOperationException, GeometryOperationNotSupportedException;
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/Aggregate.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiCurve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiCurve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiCurve.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.OrientableCurve;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Curve specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * MultiCurve is an aggregate class containing only instances of {@link OrientableCurve}.  
+ * The association role "element" shall be the set of {@link OrientableCurve}'s contained in 
+ * this MultiCurve.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface MultiCurve extends MultiPrimitive{
+	
+	/**
+	 * Adds a new curve to the  multi curve
+	 * @param curve
+	 * The curve to add
+	 */
+	void addCurve(Curve curve);
+	
+	/**
+	 * Gets the curve that is on a concrete position
+	 * inside the multi curve 
+	 * @param index
+	 * The position
+	 * @return
+	 * The selected curve
+	 */
+	Curve getCurveAt(int index);
+        
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiCurve.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiLine.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiLine.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiLine.java	(revision 42196)
@@ -0,0 +1,21 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.GeometryException;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface MultiLine extends MultiCurve {
+    public MultiPoint toPoints() throws GeometryException;
+
+    public MultiLine toLines() throws GeometryException;
+    
+    public MultiPolygon toPolygons() throws GeometryException;    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPolygon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPolygon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPolygon.java	(revision 42196)
@@ -0,0 +1,24 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface MultiPolygon extends MultiSurface {
+        
+    public MultiPoint toPoints() throws GeometryException;
+
+    public MultiLine toLines() throws GeometryException;
+    
+    public MultiPolygon toPolygons() throws GeometryException;
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPrimitive.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPrimitive.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPrimitive.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_MultiPrimitive specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * MultiPrimitive is the root class for all primitive aggregates. 
+ * The association role "element" shall be the set of {@link Primitive}'s contained 
+ * in this MultiPrimitive.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface MultiPrimitive extends Aggregate {
+
+	/**
+	 * Adds a new primitive to the primitive
+	 * @param primitive
+	 * The primitive to add
+	 */
+	void addPrimitive(Primitive primitive);
+	
+	public void ensureCapacity(int capacity);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPrimitive.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSurface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSurface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSurface.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.primitive.OrientableSurface;
+import org.gvsig.fmap.geom.primitive.Surface;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_MultiSurface specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * MultiSurface is an aggregate class containing only instances of {@link OrientableSurface}. 
+ * The association role "element" shall be the set of {@link OrientableSurface}'s 
+ * contained in this GMultiSurface.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface MultiSurface extends MultiPrimitive{
+	
+	/**
+	 * Adds a new surface to the  multi surface
+	 * @param surface
+	 * The surface to add
+	 */
+	void addSurface(Surface surface);
+	
+	/**
+	 * Gets the surface that is on a concrete position
+	 * inside the multi surface 
+	 * @param index
+	 * The position
+	 * @return
+	 * The selected surface
+	 */
+	Surface getSurfaceAt(int index);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSurface.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPoint.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_MultiPoint specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * MultiPoint is an aggregate class containing only points. 
+ * The association role "element" shall be the set of {@link Point}'s contained in 
+ * this MultiPoint.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface MultiPoint extends MultiPrimitive {
+	
+	/**
+	 * Adds a new point to the multipoint
+	 * @param point
+	 * The point to add
+	 */
+	void addPoint(Point point);
+	
+	/**
+	 * Gets the point that is on a concrete position
+	 * inside the multi point 
+	 * @param index
+	 * The position
+	 * @return
+	 * The selected point
+	 */
+	Point getPointAt(int index);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiPoint.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSolid.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSolid.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSolid.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.aggregate;
+
+import org.gvsig.fmap.geom.primitive.Solid;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_MultiSolid specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * MultiSolid is an aggregate class containing only solids. The association role "element" 
+ * shall be the set of {@link Solid}'s contained in this MultiSolid.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface MultiSolid extends MultiPrimitive{
+	
+	/**
+	 * Adds a new solid to the  multi solid
+	 * @param solid
+	 * The solid to add
+	 */
+	void addSolid(Solid solid);
+	
+	/**
+	 * Gets the solid that is on a concrete position
+	 * inside the multi solid 
+	 * @param index
+	 * The position
+	 * @return
+	 * The selected solid
+	 */
+	Solid getSolidAt(int index);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/aggregate/MultiSolid.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryException.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Parent exception for the geometry library.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class GeometryException extends BaseException {
+
+	private static final long serialVersionUID = -8382242322162454758L;
+
+	/**
+	 * @see BaseException#BaseException(String, String, long).
+	 */
+	protected GeometryException(String message, String key, long code) {
+		super(message, key, code);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	protected GeometryException(String message, Throwable cause, String key,
+			long code) {
+		super(message, cause, key, code);
+	}
+	
+	public GeometryException(Throwable cause) {
+		super(
+			"Error managing geometries", 
+			cause, 
+			"_Error_managing_geometries", 
+			serialVersionUID
+		);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndexFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndexFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndexFactory.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom;
+
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceFactory;
+import org.gvsig.tools.service.spi.ServiceManager;
+
+
+public interface SpatialIndexFactory extends ServiceFactory {
+
+    public String getName();
+    
+    Service create(DynObject parameters, ServiceManager serviceManager)
+			throws ServiceException;
+    
+    public DynObject createParameters();
+    
+    public boolean isNearestQuerySupported();
+
+    public boolean canUseToleranzeInNearestQuery();
+    
+    public boolean canLimitResults();
+    
+    public int getDataTypeSupported();
+    
+    public boolean isInMemory();
+    
+    public boolean allowNullData();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/ReprojectionRuntimeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/ReprojectionRuntimeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/ReprojectionRuntimeException.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.exception;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+
+
+/**
+ * 
+ * This exception is thrown when the reprojection library is unable to
+ * reproject and we need to notify that there was a problem
+ * (so far, the reproject method in Geometry API does not
+ * throw a standard exception)
+ * 
+ * @author jldominguez
+ *
+ */
+public class ReprojectionRuntimeException extends RuntimeException {
+    
+    public ReprojectionRuntimeException(
+        IProjection from_p, IProjection to_p,
+        Point2D from_point, Throwable cause) {
+        
+        super("Error while reprojecting point " + from_point.toString()
+            + " (" + from_p.getAbrev() + " to " + to_p.getAbrev() + ")",
+            cause);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/ReprojectionRuntimeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateGeometryException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateGeometryException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateGeometryException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.exception;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+
+/**
+ * Exception thrown when there is an error creating a new {@link Geometry}.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class CreateGeometryException extends GeometryException {
+	private static final long serialVersionUID = -9092927920296656571L;
+	private final static String MESSAGE_FORMAT = "Exception creating the geometry with " +
+			"type '%(type)' and subType '%(subType)'.";
+	private final static String MESSAGE_KEY = "_CreateGeometryException";
+	
+	public CreateGeometryException(int type, int subType, Throwable cause){
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("type", new Integer(type));
+		setValue("subType", new Integer(subType));
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateGeometryException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateEnvelopeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateEnvelopeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateEnvelopeException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.exception;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class CreateEnvelopeException extends BaseException{
+	private static final long serialVersionUID = -8080549653325427654L;
+	private final static String MESSAGE_FORMAT = "Exception creating the envelope with " +
+			"subType '%(subType)'.";
+	private final static String MESSAGE_KEY = "_CreateEnvelopeException";
+	
+	public CreateEnvelopeException(int subType, Throwable cause){
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("subType", new Integer(subType));
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/CreateEnvelopeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLocator.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom;
+
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * This Locator provides the entry point for the gvSIG 
+ * {@link GeometryManager}. 
+ * @see {@link Locator}
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class GeometryLocator extends AbstractLocator {
+
+	private static final String LOCATOR_NAME = "GeometryLocator";
+	
+	/**
+	 * GeometryManager name used by the locator to access the instance
+	 */
+	public static final String GEOMETRY_MANAGER_NAME = "GeometryManager";
+	
+	private static final String GEOMETRY_MANAGER_DESCRIPTION = "GeometryManager of gvSIG";
+	
+	/**
+	 * Unique instance.
+	 */
+	private static final GeometryLocator instance = new GeometryLocator();
+
+	/**
+	 * Return the singleton instance.
+	 *
+	 * @return the singleton instance
+	 */
+	public static GeometryLocator getInstance() {
+		return instance;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.locator.Locator#getLocatorName()
+	 */
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+	
+	/**
+	 * Return a reference to {@link GeometryManager}.
+	 *
+	 * @return a reference to GeometryManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static GeometryManager getGeometryManager() throws LocatorException {
+		return (GeometryManager) getInstance().get(GEOMETRY_MANAGER_NAME);
+	}
+	
+	/**
+	 * Registers the Class implementing the {@link GeometryManager} interface.
+	 *
+	 * @param clazz
+	 *            implementing the GeometryManager interface
+	 */
+	public static void registerGeometryManager(Class clazz) {
+		getInstance().register(GEOMETRY_MANAGER_NAME, GEOMETRY_MANAGER_DESCRIPTION,
+				clazz);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLibrary.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom;
+
+import org.cresques.ProjectionLibrary;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Registers the default implementation for {@link GeometryManager}.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class GeometryLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsAPI(GeometryLibrary.class);
+        require(ToolsLibrary.class);
+        require(ProjectionLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        if(! GeometryLocator.getInstance().exists(GeometryLocator.GEOMETRY_MANAGER_NAME)) {
+            throw new ReferenceNotRegisteredException(
+                GeometryLocator.GEOMETRY_MANAGER_NAME,
+                GeometryLocator.getInstance());
+        }
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+        dataTypesManager.addtype(DataTypes.GEOMETRY, "Geometry", "Geometry",
+            Geometry.class, null);
+        dataTypesManager.addtype(DataTypes.ENVELOPE, "Envelope", "Envelope",
+            Envelope.class, null);
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationException.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public class GeometryOperationException extends BaseException {
+
+	/**
+	 * Generated serial version UID
+	 */
+	private static final long serialVersionUID = 8230919748601156772L;
+	private static final String MESSAGE_KEY = "geometry_operation_exception";
+	private static final String FORMAT_STRING =
+		"Exception executing the operation with code %(operationCode) for the geometry with type %(geometryType).";
+
+	private int geometryType = -1;
+	private int operationCode = -1;
+
+	/**
+	 * Constructor with some context data for cases in which the root cause of
+	 * <code>this</code> is internal (usually an unsatisfied logic rule).
+	 * @param geometryType
+	 * @param operationCode
+	 */
+	public GeometryOperationException(int geometryType, int operationCode){
+		this(geometryType, operationCode, null);
+	}
+
+	/**
+	 * Constructor to use when <code>this</code> is caused by another Exception
+	 * but there is not further context data available.
+	 * @param e
+	 */
+	public GeometryOperationException(Exception e) {
+		this(-1, -1, e);
+	}
+
+	/**
+	 * Main constructor that provides both context data and a cause Exception
+	 * @param geometryType
+	 * @param operationCode
+	 * @param exp
+	 */
+	public GeometryOperationException(int geometryType, int operationCode, Exception e) {
+		super(FORMAT_STRING, e, MESSAGE_KEY, serialVersionUID);
+
+		this.geometryType = geometryType;
+		this.operationCode = operationCode;
+	}
+
+	protected Map values() {
+		HashMap map = new HashMap();
+		map.put("geometryType", String.valueOf(geometryType));
+		map.put("operationCode", String.valueOf(operationCode));
+		return map;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperation.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+
+/**
+ * Every geometry operation that is registered dynamically must extend this class.<br>
+ *
+ * The following example shows how to implement and register a custom operation:
+ *  
+ * <pre>
+ * public class MyOperation extends GeometryOperation {
+ * 
+ *   // Check GeometryManager for alternative methods to register an operation  
+ *   public static final int CODE = 
+ *     GeometryManager.getInstance()
+ *        .registerGeometryOperation("MyOperation", new MyOperation(), geomType);
+ *   
+ *   public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+ *        // Operation logic goes here
+ *   }     
+ *   
+ *   public int getOperationIndex() {
+ *      return CODE;
+ *   }
+ *   
+ * }
+ * </pre>
+ *
+ * @author jiyarza
+ *
+ */
+public abstract class GeometryOperation {
+	
+	
+	// Constants for well-known operations to avoid dependency between geometry model and
+	// operations.
+	public static final String OPERATION_INTERSECTS_NAME = "intersects";
+	public static final String OPERATION_CONTAINS_NAME = "contains";
+	
+	public static int OPERATION_INTERSECTS_CODE = Integer.MIN_VALUE;
+	public static int OPERATION_CONTAINS_CODE = Integer.MIN_VALUE;
+
+	
+	
+	
+	/**
+	 * Invokes this operation given the geometry and context 
+	 * @param geom Geometry to which apply this operation
+	 * @param ctx Parameter container
+	 * @return Place-holder object that may contain any specific return value. 
+	 * @throws GeometryOperationException The implementation is responsible to throw this exception when needed.
+	 */
+	public abstract Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException;
+
+	/**
+	 * Returns the constant value that identifies this operation and that was obtained upon registering it. 
+	 * @return operation unique index 
+	 */
+	public abstract int getOperationIndex();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationContext.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This class is a default parameter container for geometry operation.<br>
+ * 
+ * Normally every GeometryOperation will extend this class and identify
+ * its parameters publicly with getters/setters
+ *
+ * For those operations that need high performance, parameters should be declared as class 
+ * members instead of using the setAttribute/getAttribute mechanism. This way you avoid a hash
+ * and a cast operation.
+ * 
+ * @author jyarza
+ *
+ */
+public class GeometryOperationContext {
+	
+	private Map ctx = new HashMap();
+	
+	/**
+	 * Returns an attribute given its name.
+	 * If it does not exist returns <code>null</code>
+	 * @param name
+	 * @return attribute
+	 */
+	public Object getAttribute(String name) {
+		return ctx.get(name.toLowerCase());
+	}
+	
+	/**
+	 * Sets an attribute
+	 * @param name
+	 * @param value
+	 */
+	public GeometryOperationContext setAttribute(String name, Object value) {
+		ctx.put(name.toLowerCase(), value);
+		return this;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationContext.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationNotSupportedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationNotSupportedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationNotSupportedException.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.exception.BaseException;
+
+public class GeometryOperationNotSupportedException extends BaseException {
+
+	/**
+	 * Generated UID
+	 */
+	private static final long serialVersionUID = -8394502194572892834L;
+
+	/**
+	 * Constants specific to this BaseException subclass
+	 */
+	private static final String MESSAGE_KEY = "Operation_opCode_is_not_registered_for_geomTypeName_type";
+	private static final String FORMAT_STRING = "Operation %(opCode)s is not registered for '%(geomTypeName)s' type.";
+	
+	private String geomTypeName = null;
+	private int opCode = -1;
+	
+	/**
+	 * Constructor with the operation code of a common operation.
+	 * @param opCode
+	 */	
+	public GeometryOperationNotSupportedException(int opCode) {
+		this(opCode, null);
+	}
+	
+	/**
+	 * Constructor with the operation code related to a geometry type
+	 * @param opCode
+	 * @param geomType
+	 */
+	public GeometryOperationNotSupportedException(int opCode, GeometryType geomType) {
+		this(opCode, geomType, null);
+	}
+
+	/**
+	 * Constructor to use when <code>this</code> is caused by another Exception 
+	 * but there is not further context data available.
+	 * @param e
+	 */
+	public GeometryOperationNotSupportedException(Exception e) {
+		this(-1, null, e);
+	}
+	
+	/**
+	 * Main constructor
+	 * @param opCode
+	 * @param geomType
+	 * @param e
+	 */
+	public GeometryOperationNotSupportedException(int opCode, GeometryType geomType, Exception e) {
+		messageKey = MESSAGE_KEY;
+		formatString = FORMAT_STRING;
+		code = serialVersionUID;
+
+		if (e != null) {
+			initCause(e);
+		}
+		if (geomType != null) {
+			geomTypeName = geomType.getName();
+		} else {
+			geomTypeName = "ANY";
+		}
+		this.opCode = opCode;
+	}
+		
+	protected Map values() {
+		HashMap map = new HashMap();
+		map.put("opCode", Integer.toString(opCode));
+		map.put("geomTypeName", geomTypeName);
+		return map;
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/operation/GeometryOperationNotSupportedException.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndex.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.visitor.Visitor;
+
+public 	interface SpatialIndex extends Service {
+    
+        public SpatialIndexFactory getFactory();
+        
+        public void open();
+        public void close();
+    
+	public void query(Envelope envelope, Visitor visitor);
+	public void query(Geometry geom, Visitor visitor);
+        
+	public Iterator query(Envelope envelope, long limit);
+	public Iterator query(Envelope envelope);
+	public Iterator query(Geometry geom, long limit);
+	public Iterator query(Geometry geom);
+
+       	public Iterator queryNearest(Envelope envelope, long limit);
+        public Iterator queryNearest(Envelope envelope);
+	public Iterator queryNearest(Geometry geom, long limit);
+	public Iterator queryNearest(Geometry geom);
+
+        public Iterator queryAll();
+	
+        public List queryAsList(Envelope envelope);
+	public List queryAsList(Geometry geom);
+	public List queryAllAsList();
+	
+	public void insert(Envelope envelope, Object data);
+	public void insert(Geometry geom, Object data);
+        public void insert(Geometry geom);
+
+	public boolean remove(Envelope envelope, Object data);
+	public boolean remove(Geometry geom, Object data);
+        public boolean remove(Geometry geom);
+
+        public void removeAll();
+
+        public long size();
+        
+        public void flush();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndex.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryManager.java	(revision 42196)
@@ -0,0 +1,1309 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom;
+
+import java.awt.geom.PathIterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.IGeneralPathX;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.NullGeometry;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.Manager;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceManager;
+
+/**
+ * This singleton provides a centralized access to gvSIG's Geometry Model.
+ * Its responsibilities are:<br>
+ * 
+ * <ul>
+ * <li>Offering a set of convenient methods for registering and retrieving
+ * geometry types.
+ * <li>Offering a set of convenient methods for registering and retrieving
+ * geometry operations associated to one or more geometry types.
+ * <li>Offering a set of convenient methods for registering and retrieving new
+ * geometries.
+ * </ul>
+ * 
+ * @author jiyarza
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface GeometryManager extends Manager, ServiceManager {
+
+    public interface OPERATIONS {
+
+        public final static String FROMWKT = "FromWKT";
+        public final static String FROMWKB = "FromWKB";
+    }
+
+    /**
+     * <p>
+     * Registers a GeometryOperation associated to a GeometryType. Returns an
+     * unique index that is used later to identify and invoke the operation.
+     * </p>
+     * <p>
+     * By convention this index should be in a final and static variable in the
+     * class that implements the operation. The value of this variable must be
+     * set using the method
+     * {@link GeometryManager#getGeometryOperationCode(String)}:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation's unique name
+     * @param geomOp
+     *            Specific GeometryOperation's instance implementing this
+     *            operation
+     * @param geomType
+     *            GeometryType instance to which this operation should be
+     *            associated
+     * @return Index assigned to this operation. This index is used later to
+     *         access the operation.
+     * 
+     */
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp, GeometryType geomType);
+
+    /**
+     * <p>
+     * Registers a GeometryOperation that is common for all GeometryType
+     * (registered yet or not). Returns an unique index that is used later to
+     * identify and invoke the operation.
+     * </p>
+     * <p>
+     * By convention this index should be in a final and static variable in the
+     * class that implements the operation. The value of this variable must be
+     * set using the method
+     * {@link GeometryManager#getGeometryOperationCode(String)}:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation's unique name
+     * @param geomOp
+     *            Specific GeometryOperation's instance implementing this
+     *            operation
+     * @return Index assigned to this operation. This index is used later to
+     *         access the operation.
+     */
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp);
+
+    /**
+     * <p>
+     * Registers a GeometryOperation associated to a GeometryType, that has been
+     * specified using the type code and the subtype code. Returns an unique
+     * index that is used later to identify and invoke the operation.
+     * </p>
+     * <p>
+     * By convention this index should be in a final and static variable in the
+     * class that implements the operation. The value of this variable must be
+     * set using the method
+     * {@link GeometryManager#getGeometryOperationCode(String)}:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * <p>
+     * This method is only used if you have not a reference to the GeometryType
+     * associated to the geometry class. If you have such reference then it is
+     * slightly faster to use the method that receives the GeometryType.<br>
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation's unique name
+     * @param geomOp
+     *            Specific GeometryOperation's instance implementing this
+     *            operation
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Index assigned to this operation. This index is used later to
+     *         access the operation.
+     * @throws GeometryTypeNotSupportedException
+     *             Returns this exception if there is not a registered geometry
+     *             with
+     *             these type and subtype
+     * @throws GeometryTypeNotValidException
+     *             Returns if the type and subtype are not valid
+     */
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp, int type, int subType)
+        throws GeometryTypeNotSupportedException, GeometryTypeNotValidException;
+
+    /**
+     * <p>
+     * Registers a GeometryOperation associated to all the geometries with a
+     * concrete type. Returns an unique index that is used later to identify and
+     * invoke the operation.<br>
+     * </p>
+     * <p>
+     * By convention this index should be in a final and static variable in the
+     * class that implements the operation. The value of this variable must be
+     * set using the method
+     * {@link GeometryManager#getGeometryOperationCode(String)}:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation's unique name
+     * @param geomOp
+     *            Specific GeometryOperation's instance implementing this
+     *            operation
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @return Index assigned to this operation. This index is used later to
+     *         access the operation.
+     */
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp, int type);
+    
+    /**
+     * <p>
+     * Registers a GeometryOperation associated to all the geometries which
+     * super type matches with a concrete type. Returns an unique index that 
+     * is used later to identify and invoke the operation.<br>
+     * </p>
+     * <p>
+     * By convention this index should be in a final and static variable in the
+     * class that implements the operation. The value of this variable must be
+     * set using the method
+     * {@link GeometryManager#getGeometryOperationCode(String)}:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation's unique name
+     * @param geomOp
+     *            Specific GeometryOperation's instance implementing this
+     *            operation
+     * @param superType
+     *            super type of geometries that is used to register
+     *            the operation. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @return Index assigned to this operation. This index is used later to
+     *         access the operation.
+     */
+    public int registerGeometryOperationBySuperType(String geomOpName,
+        GeometryOperation geomOp, int superType);
+    
+    /**
+     * <p>
+     * Registers a GeometryOperation associated to all the geometries which
+     * super subType matches with a concrete subType. Returns an unique index that 
+     * is used later to identify and invoke the operation.<br>
+     * </p>
+     * <p>
+     * By convention this index should be in a final and static variable in the
+     * class that implements the operation. The value of this variable must be
+     * set using the method
+     * {@link GeometryManager#getGeometryOperationCode(String)}:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation's unique name
+     * @param geomOp
+     *            Specific GeometryOperation's instance implementing this
+     *            operation
+     * @param superSubType
+     *            super subType of geometries that is used to register
+     *            the operation. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Index assigned to this operation. This index is used later to
+     *         access the operation.
+     */
+    public int registerGeometryOperationBySuperSubType(String geomOpName,
+        GeometryOperation geomOp, int superSubType);
+
+    /**
+     * <p>
+     * Registers a GeometryOperation associated to all the geometries with a
+     * concrete subtype. Returns an unique index that is used later to identify
+     * and invoke the operation.<br>
+     * </p>
+     * <p>
+     * By convention this index should be in a final and static variable in the
+     * class that implements the operation. The value of this variable must be
+     * set using the method
+     * {@link GeometryManager#getGeometryOperationCode(String)}:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation's unique name
+     * @param geomOp
+     *            Specific GeometryOperation's instance implementing this
+     *            operation
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Index assigned to this operation. This index is used later to
+     *         access the operation.
+     */
+    public int registerGeometryOperationBySubtype(String geomOpName,
+        GeometryOperation geomOp, int subType);
+
+    /**
+     * <p>
+     * Registers a GeometryType instance. 
+     * </p>
+     * 
+     * @param geometryType
+     *            A {@link GeometryType} instance to create {@link Geometry} objects
+     */
+    public void registerGeometryType(GeometryType geometryType);
+    
+    /**
+     * <p>
+     * Registers a Geometry implementation class with a predefined geometry type
+     * and returns the associated GeometryType instance. Available predefined
+     * types are defined in {@link Geometry.TYPES} and the subtypes are defined
+     * in {@link Geometry.SUBTYPES}.
+     * </p>
+     * <p>
+     * How to register a geometry class with a predefined type:
+     * 
+     * <pre>
+     * 
+     * GeometryType geomType = GeometryLocator.getGeometryManager()
+     *     .registerBasicGeometryType(Point2D.class, &quot;Point2D&quot;, Geometry.TYPES.POINT,
+     *         Geometry.SYBTYPES.GEOM2D);
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomClass
+     *            Geometry subclass. It must not be null and must implement
+     *            Geometry, otherwise an exception
+     *            is raised.
+     * @param name
+     *            Symbolic name for the geometry type, it can be null. If it is
+     *            null then the symbolic name
+     *            will be the simple class name.
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Instance of GeometryType associated to the Geometry
+     *         implementation class
+     *         geomClass
+     * @throws IllegalArgumentException
+     *             If geomClass is null or does not implement Geometry
+     */
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType);
+    
+    /**
+     * <p>
+     * Registers a Geometry implementation class with a predefined geometry type
+     * and returns the associated GeometryType instance. Available predefined
+     * types are defined in {@link Geometry.TYPES} and the subtypes are defined
+     * in {@link Geometry.SUBTYPES}.    
+     * </p>
+     * <p>
+     * It adds also the super type and the super subType of the geometry, that
+     * can be used to check if the type (or the subtype) inherits of other 
+     * type (or subType)
+     * </p>
+     * <p>
+     * How to register a geometry class with a predefined type:
+     * 
+     * <pre>
+     * 
+     * GeometryType geomType = GeometryLocator.getGeometryManager()
+     *     .registerBasicGeometryType(Arc3D.class, &quot;Arc3D&quot;, Geometry.TYPES.ARC,
+     *         Geometry.SYBTYPES.GEOM3D, Geometry.TYPES.CURVE, Geometry.SYBTYPES.GEOM2D);
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomClass
+     *            Geometry subclass. It must not be null and must implement
+     *            Geometry, otherwise an exception
+     *            is raised.
+     * @param name
+     *            Symbolic name for the geometry type, it can be null. If it is
+     *            null then the symbolic name
+     *            will be the simple class name.
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @param superType
+     *              Super type of a geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param superSubType
+     *             Super subType of a geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Instance of GeometryType associated to the Geometry
+     *         implementation class
+     *         geomClass
+     * @throws IllegalArgumentException
+     *             If geomClass is null or does not implement Geometry
+     */
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int superType, int superSubType);
+    
+    /**
+     * <p>
+     * Registers a Geometry implementation class with a predefined geometry type
+     * and returns the associated GeometryType instance. Available predefined
+     * types are defined in {@link Geometry.TYPES} and the subtypes are defined
+     * in {@link Geometry.SUBTYPES}.    
+     * </p>
+     * <p>
+     * It adds also the super type of the geometry, that can be used to 
+     * check if the type inherits of other type.
+     * </p>
+     * <p>
+     * How to register a geometry class with a predefined type:
+     * 
+     * <pre>
+     * 
+     * GeometryType geomType = GeometryLocator.getGeometryManager()
+     *     .registerBasicGeometryType(Arc3D.class, &quot;Arc3D&quot;, Geometry.TYPES.ARC,
+     *         Geometry.SYBTYPES.GEOM3D, Geometry.TYPES.CURVE);
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomClass
+     *            Geometry subclass. It must not be null and must implement
+     *            Geometry, otherwise an exception
+     *            is raised.
+     * @param name
+     *            Symbolic name for the geometry type, it can be null. If it is
+     *            null then the symbolic name
+     *            will be the simple class name.
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @param superType
+     *              Super type of a geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}   
+     * @return Instance of GeometryType associated to the Geometry
+     *         implementation class
+     *         geomClass
+     * @throws IllegalArgumentException
+     *             If geomClass is null or does not implement Geometry
+     */
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int superType);
+    
+    /**
+     * <p>
+     * Registers a Geometry implementation class with a predefined geometry type
+     * and returns the associated GeometryType instance. Available predefined
+     * types are defined in {@link Geometry.TYPES} and the subtypes are defined
+     * in {@link Geometry.SUBTYPES}.    
+     * </p>
+     * <p>
+     * It adds also the super types and the super subTypes of the geometry, that
+     * can be used to check if the type (or the subtype) inherits of other 
+     * types (or subTypes)
+     * </p>
+     * <p>
+     * How to register a geometry class with a predefined type:
+     * 
+     * <pre>
+     * 
+     * GeometryType geomType = GeometryLocator.getGeometryManager()
+     *     .registerBasicGeometryType(Circle3DM.class, &quot;Circle3DM&quot;, Geometry.TYPES.CIRCLE,
+     *         Geometry.SYBTYPES.GEOM3DM,
+     *         new int[]{Geometry.TYPES.CURVE, Geometry.TYPES.GEOMETRY},
+     *         new int[]{Geometry.SYBTYPES.GEOM2D, Geometry.SYBTYPES.GEOM3D});
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomClass
+     *            Geometry subclass. It must not be null and must implement
+     *            Geometry, otherwise an exception
+     *            is raised.
+     * @param name
+     *            Symbolic name for the geometry type, it can be null. If it is
+     *            null then the symbolic name
+     *            will be the simple class name.
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @param superTypes
+     *              List of the super types of a geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param superSubTypes
+     *             List of the super subType of a geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Instance of GeometryType associated to the Geometry
+     *         implementation class
+     *         geomClass
+     * @throws IllegalArgumentException
+     *             If geomClass is null or does not implement Geometry
+     */
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int[] superTypes, int superSubTypes[]);
+    
+    /**
+     * <p>
+     * Registers a Geometry implementation class with a predefined geometry type
+     * and returns the associated GeometryType instance. Available predefined
+     * types are defined in {@link Geometry.TYPES} and the subtypes are defined
+     * in {@link Geometry.SUBTYPES}.    
+     * </p>
+     * <p>
+     * It adds also the super types and the super subTypes of the geometry, that
+     * can be used to check if the type inherits of other types.
+     * </p>
+     * <p>
+     * How to register a geometry class with a predefined type:
+     * 
+     * <pre>
+     * 
+     * GeometryType geomType = GeometryLocator.getGeometryManager()
+     *     .registerBasicGeometryType(Circle2D.class, &quot;Circle2DM&quot;, Geometry.TYPES.CIRCLE,
+     *         Geometry.SYBTYPES.GEOM2D,
+     *         new int[]{Geometry.TYPES.CURVE, Geometry.TYPES.SURFACE});        
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomClass
+     *            Geometry subclass. It must not be null and must implement
+     *            Geometry, otherwise an exception
+     *            is raised.
+     * @param name
+     *            Symbolic name for the geometry type, it can be null. If it is
+     *            null then the symbolic name
+     *            will be the simple class name.
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @param superTypes
+     *              List of the super types of a geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @return Instance of GeometryType associated to the Geometry
+     *         implementation class
+     *         geomClass
+     * @throws IllegalArgumentException
+     *             If geomClass is null or does not implement Geometry
+     */
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int[] superTypes);
+
+    /**
+     * <p>
+     * Registers a Geometry implementation class with a predefined geometry type
+     * and returns the associated GeometryType instance. Available predefined
+     * types are defined in {@link Geometry.TYPES} and the subtypes are defined
+     * in {@link Geometry.SUBTYPES}.
+     * </p>
+     * <p>
+     * In this case the symbolic name will be the geometry's simple class name
+     * </p>
+     * How to register a new geometry type:
+     * 
+     * <pre>
+     * 
+     * GeometryType geomType = GeometryLocator.getGeometryManager()
+     *     .registerBasicGeometryType(Point2D.class, Geometry.TYPES.POINT,
+     *         Geometry.SYBTYPES.GEOM2D);
+     * </pre>
+     * 
+     * @param geomClass
+     *            Geometry implementation class. It must not be null and must
+     *            implement Geometry,
+     *            otherwise an exception is thrown.
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Instance of GeometryType associated to the Geometry
+     *         implementation class
+     * @throws IllegalArgumentException
+     *             If geomClass is null or does not implement Geometry
+     */
+    public GeometryType registerGeometryType(Class geomClass, int type,
+        int subType);
+
+    /**
+     * <p>
+     * Returns an instance of GeometryType given the Geometry type and the
+     * subtype.
+     * </p>
+     * 
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Instance of GeometryType associated to the type and the subtype
+     * @throws GeometryTypeNotSupportedException
+     *             Returns this exception if there is not a registered geometry
+     *             with
+     *             these type and subtype
+     * @throws GeometryTypeNotValidException
+     *             Returns if the type and subtype are not valid
+     */
+    public GeometryType getGeometryType(int type, int subType)
+        throws GeometryTypeNotSupportedException, GeometryTypeNotValidException;
+
+    /**
+     * <p>
+     * This method creates a {@link Geometry} with the type specified by this
+     * GeometryType. The geometry is empty, and all the internal attributes must
+     * be assigned to a value when the geometry has been created.
+     * </p>
+     * <p>
+     * This example creates a point2D and sets the coordinates to 1,1:
+     * 
+     * <pre>
+     * Point point =
+     *     (Point) GeometryLocator.getGeometryManager().create(GEOMETRY.TYPES.POINT,
+     *         GEOMETRY.SUBTYPES.GEOM2D);
+     * point.setX(1);
+     * point.setY(1);
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomType
+     *            The geometry type
+     * @return
+     *         A instance of a geometry.
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create
+     *             the geometry.
+     */
+    public Geometry create(GeometryType geomType)
+        throws CreateGeometryException;
+
+    /**
+     * <p>
+     * Creates a Envelope with a concrete subtype. The envelope is empty and it
+     * have to be filled with the corners once has been created.
+     * </p>
+     * 
+     * @param subType
+     *            SubType of envelope. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return
+     *         A Envelope
+     * @throws CreateEnvelopeException
+     *             If it is not possible to create the envelope.
+     */
+    public Envelope createEnvelope(int subType) throws CreateEnvelopeException;
+
+    /**
+     * <p>
+     * Creates a Envelope with a concrete subtype. It sets the values for the
+     * lower corner and the upper corner (in 2D) using the method parameters.
+     * </p>
+     * 
+     * @param minX
+     *            The minimum value for the X coordinate.
+     * @param minY
+     *            The minimum value for the Y coordinate.
+     * @param maxX
+     *            The maximum value for the X coordinate.
+     * @param maxY
+     *            The maximum value for the Y coordinate.
+     * @param subType
+     *            SubType of envelope. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return
+     * @throws CreateEnvelopeException
+     */
+    public Envelope createEnvelope(double minX, double minY, double maxX,
+        double maxY, int subType) throws CreateEnvelopeException;
+
+    /**
+     * <p>
+     * This method creates a {@link Geometry} with the type specified by this
+     * name. If a geometry with this name doesn't exist, a
+     * {@link IllegalArgumentException} is thrown. The geometry is empty, and
+     * all the internal attributes must be assigned to a value when the geometry
+     * has been created.
+     * </p>
+     * <p>
+     * This example creates a point2D and sets the coordinates to 1,1: It
+     * supposes that there is a Point2D class with name "Point2D".
+     * </p>
+     * 
+     * <pre>
+     * Point point = (Point) GeometryLocator.getGeometryManager().create(&quot;Point2D&quot;);
+     * point.setX(1);
+     * point.setY(1);
+     * </pre>
+     * 
+     * @param name
+     *            The name of the geometry type
+     * @return
+     *         A instance of a geometry.
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create
+     *             the geometry.
+     */
+    public Geometry create(String name) throws CreateGeometryException;
+
+    /**
+     * Create a geometry from a WKT definition.
+     * 
+     * This is a utility method to wrap the invocation to the operation
+     * {@link OPERATIONS#FROMWKT}.
+     * 
+     * @param wkt
+     *            geometry in Well-known text format
+     * 
+     * @return the geometry as a Geometry
+     * 
+     * @throws CreateGeometryException
+     * @throws GeometryException
+     */
+    public Geometry createFrom(String wkt, String srs)
+        throws CreateGeometryException, GeometryException;
+
+    public Geometry createFrom(String wkt) throws CreateGeometryException,
+        GeometryException;
+
+    /**
+     * Create a geometry from a WKB definition.
+     * 
+     * This is a utility method to wrap the invocation to the operation
+     * {@link OPERATIONS#FROMWKB}.
+     * 
+     * @param wkb
+     *            geometry in well-known binary format
+     * 
+     * @return the geometry as a Geometry
+     * 
+     * @throws CreateGeometryException
+     * @throws GeometryException
+     */
+    public Geometry createFrom(byte[] wkb) throws CreateGeometryException,
+        GeometryException;
+
+    /**
+     * <p>
+     * This method creates a {@link Geometry} with a concrete type and subtype.
+     * The geometry is empty, and all the internal attributes must be assigned
+     * to a value when the geometry has been created.
+     * </p>
+     * <p>
+     * This example creates a point2D and sets the coordinates to 1,1. It
+     * supposes that there is a Point2D class with the id 1.
+     * </p>
+     * 
+     * <pre>
+     * Point point =
+     *     (Point) GeometryLocator.getGeometryManager().create(Geometry.TYPES.POINT,
+     *         Geometry.SYBTYPES.GEOM2D);
+     * point.setX(1);
+     * point.setY(1);
+     * </pre>
+     * 
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return
+     *         A instance of a geometry.
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create
+     *             the geometry.
+     */
+    public Geometry create(int type, int subType)
+        throws CreateGeometryException;
+
+    /**
+     * <p>
+     * It creates a null geometry with a concrete subtype.
+     * <p>
+     * 
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return
+     *         A NullGeometry
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create
+     *             the geometry.
+     * @deprecated use null instead. This method can be removed in next revisions
+     */
+    public NullGeometry createNullGeometry(int subType)
+        throws CreateGeometryException;
+
+    /**
+     * <p>
+     * Create a new point with a concrete type and sets the value for the X and
+     * the Y.
+     * </p>
+     * 
+     * @param x
+     *            The X coordinate
+     * @param y
+     *            The y coordinate
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create
+     *             the geometry.
+     * @return
+     *         The Point
+     */
+    public Point createPoint(double x, double y, int subType)
+        throws CreateGeometryException;
+
+    /**
+     * Create a new line with a concrete type. Use later addVertex to add
+     * vertex to te line. 
+     * 
+     * @param subType SubType of geometry. Must be a value defined in {@link Geometry.SUBTYPES}
+     * @return a line
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create
+     *             the geometry.
+     */
+    public Line createLine(int subType) throws CreateGeometryException;
+
+    /**
+     * @deprecated use createLine
+     */
+    public Curve createCurve(int subType) throws CreateGeometryException;
+
+    /**
+     * Create a new polygon with a concrete type.
+     * Use later addVertex to add vertex to te polygon.
+     * 
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return
+     *         A polygon
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create
+     *             the geometry.
+     */
+    public Polygon createPolygon(int subType)
+        throws CreateGeometryException;
+
+    /**
+     * @deprecated use createPolygon
+     */
+    public Surface createSurface(int subType)
+        throws CreateGeometryException;
+
+    /**
+     * Create a new multipoint with a concrete subtype.
+     * Use addPrimitive to populate the multipoint.
+     * 
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return A multipoint
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create the
+     *             geometry.
+     */
+    public MultiPoint createMultiPoint(int subType)
+        throws CreateGeometryException;
+    
+    /**
+     * Create a new multicurve with a concrete subtype.
+     * Use addPrimitive to populate the multicurve.
+     * 
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return A multicurve
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create the
+     *             geometry.
+     */
+    public MultiCurve createMultiCurve(int subType) throws CreateGeometryException;
+
+    public MultiLine createMultiLine(int subType) throws CreateGeometryException;
+
+    /**
+     * Create a new multisurface with a concrete subtype.
+     * Use later addPrimitive to populate.
+     * 
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return A multisurface
+     * @throws CreateGeometryException
+     *             This exception is thrown when the manager can not create the
+     *             geometry.
+     */
+    public MultiSurface createMultiSurface(int subType) throws CreateGeometryException;
+
+    public MultiPolygon createMultiPolygon(int subType) throws CreateGeometryException;
+
+    /**
+     * <p>
+     * Returns an operation given the Geometry type, the Geometry subtype and
+     * and the operation code. If opCode corresponds to a common operation (a
+     * common operation is an operation registered for all geometries), then
+     * this method returns the common operation.
+     * </p>
+     * <p>
+     * For better performance, if you need to call an operation multiple times,
+     * use this method only once and keep the returned object in a local
+     * variable over which you can iterate. For instance:
+     * 
+     * <pre>
+     * // Get the operation you need
+     * GeometryManager gm = GeometryLocator.getGeometryManager()
+     * GeometryOperation geomOp = null;
+     * try {
+     *    geomOp = gm.getGeometryOperation(Draw2D.CODE, Geometry.TYPES.POINT, 
+     *    Geometry.SUBTYPES.GEOM2D);
+     * } catch (GeometryTypeNotSupportedException gtnse) {
+     *    // treat exception
+     * } catch (GeometryOperationNotSupportedException gonse) {
+     *    // treat exception
+     * }
+     * 
+     *  // Fill the operation context with required params
+     * GeometryOperationContext ctx = new GeometryOperationContext();
+     * 
+     *  // Here is the main loop where you call the operation
+     * for (int i=0; i<myGeometries.length; i++) {
+     *    Object result = geomOp.invoke(myGeometries[i], ctx);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param opCode
+     *            The operation code
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Geometry operation
+     * @throws GeometryTypeNotSupportedException
+     *             Returns this exception if there is not a registered geometry
+     *             with
+     *             these type and subtype
+     * @throws GeometryTypeNotValidException
+     *             Returns this exception if the type and subtype are not valid
+     * @throws GeometryOperationNotSupportedException
+     *             Returns this exception if there is not a registered operation
+     *             with
+     *             this operation code
+     */
+    public GeometryOperation getGeometryOperation(int opCode, int type,
+        int subType) throws GeometryTypeNotSupportedException,
+        GeometryOperationNotSupportedException, GeometryTypeNotValidException;
+
+    /**
+     * <p>
+     * Returns an common operation with given operation code. A common operation
+     * is an operation registered for all geometries.
+     * </p>
+     * <p>
+     * For better performance, if you need to call an operation multiple times,
+     * use this method only once and keep the returned object in a local
+     * variable over which you can iterate. For instance:
+     * 
+     * <pre>
+     * // Get the operation you need
+     * GeometryManager gm = GeometryLocator.getGeometryManager()
+     * GeometryOperation geomOp = null;
+     * try {
+     *    geomOp = gm.getGeometryOperation(FromWKB.CODE);
+     * } catch (GeometryOperationNotSupportedException gonse) {
+     *    // treat exception
+     * }
+     * 
+     *  // Fill the operation context with required params
+     * FromWKBGeometryOperationContext ctx = new FromWKBGeometryOperationContext();
+     * 
+     *  // Here is the main loop where you call the operation
+     * for (int i=0; i<myGeometriesWKB.length; i++) {
+     *    ctx.setData(myGeometriesWKB[i]);
+     *    Object result = geomOp.invoke(null, ctx);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param opCode
+     *            The operation code
+     * @return Geometry operation
+     * @throws GeometryOperationNotSupportedException
+     *             Returns this exception if there is not a registered operation
+     *             with
+     *             this operation code
+     */
+    public GeometryOperation getGeometryOperation(int opCode)
+        throws GeometryOperationNotSupportedException;
+
+    /**
+     * <p>
+     * Invokes an operation given its code, the geometry and the operation
+     * context holding the parameters required for the operation.
+     * </p>
+     * 
+     * @param opCode
+     *            Operation code.
+     * @param geom
+     *            Geometry to which apply the operation
+     * @param ctx
+     *            Context holding the operation parameters
+     * @return
+     *         The object returned by an operation, depends on each operation.
+     */
+    public Object invokeOperation(int opCode, Geometry geom,
+        GeometryOperationContext ctx)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException;
+
+    /**
+     * <p>
+     * Invokes an operation given its code, the geometry and the operation
+     * context holding the parameters required for the operation.
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation name.
+     * @param geom
+     *            Geometry to which apply the operation
+     * @param ctx
+     *            Context holding the operation parameters
+     * @return
+     *         The object returned by an operation, depends on each operation.
+     */
+    public Object invokeOperation(String geomOpName, Geometry geom,
+        GeometryOperationContext ctx)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException;
+
+    /**
+     * <p>
+     * Invokes an operation given its code, and the operation context holding
+     * the parameters required for the operation.
+     * </p>
+     * 
+     * @param geomOpName
+     *            Operation name.
+     * @param ctx
+     *            Context holding the operation parameters
+     * @return
+     *         The object returned by an operation, depends on each operation.
+     */
+    public Object invokeOperation(String geomOpName,
+        GeometryOperationContext ctx)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException;
+
+    /**
+     * <p>
+     * Registers the unique name of one operation. If it already exists then
+     * this method does nothing but returning the name's corresponding index.
+     * </p>
+     * <p>
+     * By convention this method is used to set the value of the final and
+     * static variable that is located in the classes that implements the
+     * operation:<BR>
+     * 
+     * <pre>
+     * 
+     * public class MyOperation extends GeometryOperation {
+     * 
+     *     public static final int CODE = GeometryLocator.getGeometryManager()
+     *         .getGeometryOperationCode(&quot;MyOperation&quot;);
+     * }
+     * </pre>
+     * 
+     * </p>
+     * 
+     * @param geomOpName
+     *            Name used to register the geometry operation
+     * @return
+     *         Index assigned to the operation name passed as parameter
+     */
+    public int getGeometryOperationCode(String geomOpName);
+
+    /**
+     * Returns a list with the name of the operations that have been
+     * registered.
+     * 
+     * @return
+     *         A list of the registered operations.
+     */
+    public List getGeometryOperationNames();
+
+    /**
+     * Returns the flatness used to convert a curve is a set
+     * of points.
+     * 
+     * @return
+     *         The flatness.
+     */
+    public double getFlatness();
+
+    /**
+     * Sets the application flatness.
+     * 
+     * @param flatness
+     *            The flatness to set
+     */
+    public void setFlatness(double flatness);
+    
+    /**
+     * Create a memory spatial index with the default implementation.
+     * 
+     * @return a new SpatialIndex
+     */
+    public SpatialIndex createDefaultMemorySpatialIndex() throws ServiceException;
+
+    
+    /**
+     * Create a spatial index with the implementation specified as name.
+     * If the creation of index don't requery parameters can be passed a null.
+     * 
+     * @param name of the type of spatial index to create
+     * @param parameters used to create the index or null.
+     * @return the new SpatialIndex or null if not exists the type of index.
+     * @throws GeometryException 
+     */
+    public SpatialIndex createSpatialIndex(String name, DynObject parameters) throws ServiceException;
+    
+    /**
+     * Return the name of the factory of the spatial index required.
+     * 
+     * @param name of the spatial index factory
+     * @return the SpatialIndexFactory required or null if not exists
+     */
+    public SpatialIndexFactory getSpatialIndexFactory(String name);
+    
+    /**
+     * Create a GeneralPathX to populate a geometry.
+     * This method is deprecated, instead use OrientablePrimitive#addVertex(Point) to add vertex to 
+     * primitive geometries or {@link MultiPrimitive#addPrimitive(org.gvsig.fmap.geom.primitive.Primitive)} to add geometries to an aggregate.
+     * 
+     * @param rule
+     * @param initialCapacity
+     * @param pathIterator , can be null
+     * @return a GeneralPathX
+     * @deprecated use method of Geometry to handle this 
+     * @see OrientablePrimitive#addVertex(Point) or {@link MultiPrimitive#addPrimitive(org.gvsig.fmap.geom.primitive.Primitive)}
+     * 
+     */
+    public IGeneralPathX createGeneralPath(int rule, PathIterator pathIterator);
+
+	/**
+	 * <p>
+	 * Create a new curve with a concrete type and sets the value for the
+	 * coordinates using a GeneralPathX.
+	 * </p>
+	 * 
+	 * @param generalPathX
+	 *            It is used to set the values for the X and Y coordinates.
+	 * @param subType
+	 *            SubType of geometry. Must be a value defined in
+	 *            {@link Geometry.SUBTYPES}
+	 * @return
+	 *         A curve
+	 * @throws CreateGeometryException
+	 *             This exception is thrown when the manager can not create
+	 *             the geometry.
+	 * @deprecated use {@link #createCurve(int)} and OrientablePrimitive#addVertex(Point) 
+	 */
+	public Curve createCurve(GeneralPathX generalPathX, int subType)
+	    throws CreateGeometryException;
+	
+	/**
+	 * <p>
+	 * Create a new multicurve with a concrete type and sets the value for the
+	 * coordinates using a GeneralPathX.
+	 * </p>
+	 * 
+	 * @param generalPathX
+	 *            It is used to set the values for the X and Y coordinates.
+	 * @param subType
+	 *            SubType of geometry. Must be a value defined in
+	 *            {@link Geometry.SUBTYPES}
+	 * @return A multicurve
+	 * @throws CreateGeometryException
+	 *             This exception is thrown when the manager can not create the
+	 *             geometry.
+	 * @deprecated use {@link #createMultiCurve(int)} and {@link MultiPrimitive#addPrimitive(org.gvsig.fmap.geom.primitive.Primitive)}
+	 */
+	public MultiCurve createMultiCurve(GeneralPathX generalPathX, int subType)
+	        throws CreateGeometryException;
+	
+	/**
+	 * <p>
+	 * Create a new surface with a concrete type and sets the value for the
+	 * coordinates using a GeneralPathX.
+	 * </p>
+	 * 
+	 * @param generalPathX
+	 *            It is used to set the values for the X and Y coordinates.
+	 * @param subType
+	 *            SubType of geometry. Must be a value defined in
+	 *            {@link Geometry.SUBTYPES}
+	 * @return
+	 *         A surface
+	 * @throws CreateGeometryException
+	 *             This exception is thrown when the manager can not create
+	 *             the geometry.
+	 * @deprecated use {@link #createSurface(int)} and OrientablePrimitive#addVertex(Point)
+	 */
+	public Surface createSurface(GeneralPathX generalPathX, int subType)
+	    throws CreateGeometryException;
+	
+	/**
+	 * <p>
+	 * Create a new multisurface with a concrete type and sets the value for the
+	 * coordinates using a GeneralPathX.
+	 * </p>
+	 * 
+	 * @param generalPathX
+	 *            It is used to set the values for the X and Y coordinates.
+	 * @param subType
+	 *            SubType of geometry. Must be a value defined in
+	 *            {@link Geometry.SUBTYPES}
+	 * @return A multisurface
+	 * @throws CreateGeometryException
+	 *             This exception is thrown when the manager can not create the
+	 *             geometry.
+	 * @deprecated use {@link #createMultiSurface(int)} and {@link MultiPrimitive#addPrimitive(org.gvsig.fmap.geom.primitive.Primitive)}
+	 */
+	public MultiSurface createMultiSurface(GeneralPathX generalPathX,
+	    int subType) throws CreateGeometryException;
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryManager.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSurface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSurface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSurface.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.complex;
+/**
+ * <p>
+ * This interface is equivalent to the GM_CompositeSurface specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * A composite surface shall be a {@link Complex} with all the geometric properties 
+ * of a surface, and thus can be considered as a type of orientable surface 
+ * ({@link OrientableSurface}). Essentially, a composite surface is a collection 
+ * of oriented surfaces that join in pairs on common boundary curves and which, 
+ * when considered as a whole, form a single surface.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface CompositeSurface extends Composite{
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSurface.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositePoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositePoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositePoint.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.complex;
+/**
+ * <p>
+ * This interface is equivalent to the GM_CompositePoint specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * A separate class for composite point is included for completeness. 
+ * It is a {@link Complex} containing one and only one Point.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface CompositePoint {
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositePoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSolid.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSolid.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSolid.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.complex;
+/**
+ * <p>
+ * This interface is equivalent to the GM_CompositeSolid specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * A CompositeSolid shall be a {@link Complex} with all the geometric properties of a solid. 
+ * Essentially, a composite solid is a set of solids that join in pairs on common 
+ * boundary surfaces to form a single solid.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface CompositeSolid extends Composite{
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeSolid.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Composite.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Composite.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Composite.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.complex;
+/**
+ * <p>
+ * This interface is equivalent to the GM_Composite specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * A geometric composite shall be a geometric complex with an underlying core 
+ * geometry that is isomorphic to a primitive. Thus, a composite curve is 
+ * a collection of curves whose geometry interface could be satisfied 
+ * by a single curve (albeit a much more complex one). 
+ * </p>
+ * <p>
+ * Composites are intended for use as attribute values in datasets in 
+ * which the underlying geometry has been decomposed, usually to expose its topological nature.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Composite extends Complex {
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Composite.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Complex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Complex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Complex.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.complex;
+
+import org.gvsig.fmap.geom.Geometry;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Complex specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * A Complex is a collection of geometrically disjoint, simple {@link Primitive}'s. 
+ * If a {@link Primitive} (other than a {@link Point}) is in a particular Complex, 
+ * then there exists a set of primitives of lower dimension in the same complex 
+ * that form the boundary of this primitive.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Complex extends Geometry {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/Complex.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeCurve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeCurve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeCurve.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.complex;
+/**
+ * <p>
+ * This interface is equivalent to the GM_CompositeCurve specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * A composite curve shall be a {@link Composite} with all the geometric 
+ * properties of a curve. These properties are instantiated in the operation "curve". 
+ * Essentially, a composite curve is a list of orientable curves ({@link OrientableCurve}) 
+ * agreeing in orientation in a manner such that each curve (except the first) begins 
+ * where the previous one ends.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface CompositeCurve extends Composite{
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/complex/CompositeCurve.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EnvelopeNotInitializedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EnvelopeNotInitializedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EnvelopeNotInitializedException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class EnvelopeNotInitializedException extends BaseRuntimeException{
+    private static final long serialVersionUID = -229548310440742973L;
+
+    private static final String KEY = "_EnvelopeNotInitializedException";
+
+    private static final String MESSAGE =
+            "The envelope has not been initialized";
+    
+    /**
+     * @param exception
+     */
+    public EnvelopeNotInitializedException() {
+        super(MESSAGE, KEY, serialVersionUID);       
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EnvelopeNotInitializedException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Arc.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Arc.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Arc.java	(revision 42196)
@@ -0,0 +1,128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Arc specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * A Arc is defined by 3 points, and consists of the arc of the circle determined by the 3 points, 
+ * starting at the first, passing through the second and terminating at the third. 
+ * If the 3 points are co-linear, then the arc shall be a 3-point line string, and will 
+ * not be able to return values for center, radius, start angle and end angle. 
+ * </p> 
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Arc extends Curve {
+		
+	/**
+	 * Sets the three points to define an arc.
+	 * These are three ordered points that belong to the arc
+	 * (none of them is the center of the ellipse/circle). Therefore
+	 * they must not be aligned.
+	 * 
+	 * @param startPoint
+	 * The start point of an arc.
+     * @param midPoint
+     * The middle point of an arc.
+	 * @param endPoint
+	 * The end point of an arc.
+	 * @exception IllegalArgumentException if the three points are aligned or
+	 * there is a repeated point.
+	 * 
+	 */
+	void setPoints(Point startPoint, Point midPoint, Point endPoint);
+	
+	/**
+	 * Sets the values to define an arc.
+	 * @param center The center of the arc.
+	 * @param radius The radius.
+	 * @param startAngle The start angle of the arc (in radians)
+	 * @param angleExt The angular extent of the arc (in radians). 
+	 * 
+	 * The sign convention is: 
+	 * 
+	 * startAngle = 0 is "3 o'clock"; 
+	 * startAngle = (PI / 3) is "1 o'clock"; 
+     * angleExt > 0 means "advancing clockwise"; 
+     * angleExt < 0 means "advancing counterclockwise".
+	 */
+	void setPoints (Point center, double radius, double startAngle, double angleExt);
+
+    /**
+     * Sets the values to define an arc.
+     * @param center The center of the arc.
+     * @param radius The radius.
+     * @param startAngle The start angle of the arc (in radians)
+     * @param angleExt The angular extent of the arc (in radians). 
+     * 
+     * The sign convention is: 
+     * 
+     * startAngle = 0 is "3 o'clock"; 
+     * startAngle = (PI / 3) is "1 o'clock"; 
+     * angleExt > 0 means "advancing clockwise"; 
+     * angleExt < 0 means "advancing counterclockwise".
+     */
+    void setPointsStartExt (Point center, double radius, double startAngle, double angleExt);
+    
+    /**
+     * Sets the values to define an arc. The arc will go from
+     * startAngle to endAngle clockwise. Angles will be
+     * normalized to ]-PI, PI] (-PI excluded) before creating
+     * the arc. 
+     * 
+     * @param center The center of the arc.
+     * @param radius The radius.
+     * @param startAngle The start angle of the arc (in radians)
+     * @param endAngle The end angle of the arc (in radians). 
+     * 
+     */
+    void setPointsStartEnd (Point center, double radius, double startAngle, double endAngle );
+	
+	/**
+	 * Return the first point that has been used to create the arc.
+	 * @return
+	 * The first point of the arc.
+	 */
+	Point getInitPoint();
+		
+	/**
+	 * Return the end point that has been used to create the arc.
+	 * @return
+	 * The end point of the arc.
+	 */
+	Point getEndPoint();
+	
+	/**
+	 * Return the center of the arc, that is, the center of the ellipse/circle
+	 * in which the arc is based.
+	 * 
+	 * @return The center of the arc.
+	 */
+	Point getCenterPoint();
+		
+		
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Arc.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/PointGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/PointGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/PointGeometryType.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * Geometry type for point geometries.
+ * 
+ * @author gvSIG Team
+ */
+public interface PointGeometryType extends GeometryType {
+
+    /**
+     * Creates a new point object 
+     * @param x the x coordinate of the point
+     * @param y the y coordinate of the point
+     * @return the new point
+     */
+    Point createPoint(double x, double y);
+    
+    /**
+     * Creates a new point object 
+     * @param coordinates the coordinates of the point
+     * @return the new point
+     */
+    Point createPoint(double[] coordinates);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/PointGeometryType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Primitive.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Primitive.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Primitive.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.fmap.geom.Geometry;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Object specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * Primitive is the abstract root class of the geometric primitives.
+ * Its main purpose is to define the basic "boundary" operation 
+ * that ties the primitives in each dimension together. 
+ * </p>
+ * <p>
+ * A geometric primitive is a geometric object that is not 
+ * decomposed further into other primitives in the system. 
+ * This includes curves and surfaces, even though they are 
+ * composed of curve segments and surface patches, respectively.
+ * This composition is a strong aggregation: curve segments and 
+ * surface patches cannot exist outside the context of a primitive.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Primitive extends Geometry {
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Primitive.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/SurfaceAppearance.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/SurfaceAppearance.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/SurfaceAppearance.java	(revision 42196)
@@ -0,0 +1,300 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * This interface serves to set the surface appearance characteristics like textures 
+ * materials or colors.
+ *  
+ */
+
+/**
+ * 
+ * @author Jordi Torres Fabra <jtorres@ai2.upv.es>
+ * 
+ */
+
+public interface SurfaceAppearance extends Appearance {
+
+	public static final class AttributeBinding {
+		public static final int BIND_OFF = 0;
+		public static final int BIND_OVERALL = 1;
+		public static final int BIND_PER_PRIMITIVE_SET = 2;
+		public static final int BIND_PER_PRIMITIVE = 3;
+		public static final int BIND_PER_VERTEX = 4;
+	}
+
+	public static class PrimitiveMode {
+		public static final int POINTS = 0;
+		public static final int LINES = 1;
+		public static final int LINE_STRIP = 3;
+		public static final int LINE_LOOP = 2;
+		public static final int TRIANGLES = 4;
+		public static final int TRIANGLE_STRIP = 5;
+		public static final int TRIANGLE_FAN = 6;
+		public static final int QUADS = 7;
+		public static final int QUAD_STRIP = 8;
+		public static final int POLYGON = 9;
+	}
+
+	public static class PrimitiveType {
+		public static final int PrimitiveType = 0;
+		public static final int DrawArrays = 1;
+		public static final int DrawArrayLengths = 2;
+		public static final int DrawElementsUInt = 5;
+	}
+
+	/**
+	 * Add a normal vector to the normal array of the surface
+	 * 
+	 * @param p
+	 */
+	public void addNormal(Point p);
+
+	/**
+	 * Sets normal vector in a concrete position.
+	 * 
+	 * @param position
+	 *            the array position to set the normal vector
+	 * @param p
+	 *            the normal vector to set (dimension 3)
+	 * 
+	 */
+	public void setNormalAt(int position, Point p);
+
+	/**
+	 * Gets the normal vector in a concrete position
+	 * 
+	 * @param position
+	 *            the direct position
+	 * @return the normal vector
+	 * 
+	 */
+	public Point getNormalAt(int position);
+
+	/**
+	 * Get the number of normals in the surface
+	 * 
+	 * @return an integer representing the number of normals
+	 */
+	public int getNumNormals();
+
+	/**
+	 * Remove normal vector in a concrete position
+	 * 
+	 * @param position
+	 *            the direct position
+	 */
+	public void removeNormal(int position);
+
+	/**
+	 * Sets the binding of normal array to Surface Geometry.
+	 * 
+	 * @param binding
+	 *            Value of the binding
+	 * 
+	 */
+	public void setNormalBinding(AttributeBinding binding);
+
+	/**
+	 * Gets the binding of normal array
+	 * 
+	 * @return Value representing attributeBinding
+	 * 
+	 */
+	public AttributeBinding getNormalBinding();
+
+	/**
+	 * Adds a texture coordinate to TexCoord array in Surface
+	 * 
+	 * @param p
+	 *            the texture coordinate (dimension 2)
+	 */
+
+	public void addTextureCoord(Point p);
+
+	/**
+	 * Set texture coordinate at concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 * @param p
+	 *            the texture coordinate value
+	 */
+	public void setTextureCoordAt(int position, Point p);
+
+	/**
+	 * Get texture coordinate at concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 * @return the texure coordinate (dimension 2)
+	 */
+	public Point getTextureCoordAt(int position);
+
+	/**
+	 * Gets the number of texture coordinates in the texcoord array of the
+	 * surface
+	 * 
+	 * @return the number of texture coordinates
+	 */
+	public int getNumTextureCoords();
+
+	/**
+	 * Remove texture coordinate at concrete position
+	 * 
+	 * @param position
+	 */
+	public void removeTextureCoord(int position);
+
+	/**
+	 * Add a index in the index array of the surface
+	 * 
+	 * @param element
+	 *            the index to add
+	 */
+	public void addIndex(int element);
+
+	/**
+	 * Get the index element at concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 * @return teh index element
+	 */
+	public int getIndexAt(int position);
+
+	/**
+	 * Set an index element in a concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 * @param element
+	 *            the index element
+	 */
+	public void setIndexAt(int position, int element);
+
+	/**
+	 * Remove index element at concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 */
+	public void removeIndex(int position);
+
+	/**
+	 * Get number of indices in the index array of the surface
+	 * 
+	 * @return the number of indices
+	 */
+	public int getNumIndices();
+
+	/**
+	 * Get the primitive mode of the surface
+	 * 
+	 * @return the primitive mode
+	 */
+	public PrimitiveMode getPrimitiveMode();
+
+	/**
+	 * Sets the primitive mode of the surface
+	 * 
+	 * @param mode
+	 *            the primitive mode
+	 */
+	public void setPrimitiveMode(PrimitiveMode mode);
+
+	/**
+	 * Get the primitive type of the surface
+	 * 
+	 * @return the primitive type
+	 */
+	public PrimitiveType getPrimitiveType();
+
+	/**
+	 * Set the primitive type of the surface
+	 * 
+	 * @param type
+	 *            the primitive type
+	 */
+	public void setPrimitiveType(PrimitiveType type);
+
+	/**
+	 * Add a color to teh color array of the surface
+	 * 
+	 * @param p
+	 *            the color(dimension 4 rgba)
+	 */
+	public void addColor(Point p);
+
+	/**
+	 * Set a color in a concrete position of the color array
+	 * 
+	 * @param position
+	 *            the concrete position
+	 * @param p
+	 *            the color(dimension 4 rgba)
+	 */
+	public void setColorAt(int position, Point p);
+
+	/**
+	 * Get the color at concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 * @return the color
+	 */
+	public Point getColorAt(int position);
+
+	/**
+	 * Remove color in a concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 */
+	public void removeColor(int position);
+
+	/**
+	 * Get the number of colors in the color array of the surface
+	 * 
+	 * @return
+	 */
+	public int getNumColors();
+
+	/**
+	 * Sets the colorbinding of the color array of the surface
+	 * 
+	 * @param binding
+	 *            attribute binding representing color binding
+	 */
+	public void setColorBinding(AttributeBinding binding);
+
+	/**
+	 * Get the color binding of the color array of the surface
+	 * 
+	 * @return Attribute binding representing color binding
+	 */
+	public AttributeBinding getColorBinding();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/SurfaceAppearance.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Solid.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Solid.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Solid.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Solid specified in <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012"
+ * >ISO 19107</a>. Solid is a subclass of {@link Primitive}, and is the basis
+ * for 3-dimensional geometry. The extent of a solid is defined by the boundary
+ * surfaces.
+ * </p>
+ * 
+ * @see <a
+ *      href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO
+ *      19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ * @author <a href="mailto:jtorres@ai2.upv.es">Jordi Torres Fabra</a>
+ * @author <a href="mailto:rgaitan@ai2.upv.es">Rafa Gait&aacute;n Linares</a>
+ */
+public interface Solid extends Primitive {
+
+	/**
+	 * Add a surface to the Solid
+	 * 
+	 * @param surface
+	 *            the surface to add
+	 */
+	public void addSurface(Surface surface);
+
+	/**
+	 * Remove surface from solid at concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 */
+	public void removeSurface(int position);
+
+	/**
+	 * Get the number of surfaces in a solid
+	 * 
+	 * @return the number of surfaces
+	 */
+	public int getNumSurfaces();
+
+	/**
+	 * Gets a surface in a concrete position
+	 * 
+	 * @param position
+	 *            the concrete position
+	 * @return the surface
+	 */
+	public Surface getSurfaceAt(int position);
+
+	/**
+	 * Sets the appearance of a Solid
+	 * 
+	 * @param app
+	 *            the appearance
+	 */
+	public void setAppearance(Appearance app);
+
+	/**
+	 * Gets the appearance of a solid
+	 * 
+	 * @return
+	 */
+	public Appearance getAppearance();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Solid.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/CompositeSurface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/CompositeSurface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/CompositeSurface.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+
+public interface CompositeSurface extends Surface, MultiSurface {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/CompositeSurface.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientablePrimitive.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientablePrimitive.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientablePrimitive.java	(revision 42196)
@@ -0,0 +1,177 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_OrientablePrimitive specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * Orientable primitives are those that can be mirrored into new 
+ * geometric objects in terms of their internal local coordinate 
+ * systems (manifold charts).
+ * </p>
+ * <p>
+ * For curves, the orientation reflects the direction in which the curve is traversed, 
+ * that is, the sense of its parameterization. When used as boundary curves, 
+ * the surface being bounded is to the "left" of the oriented curve. 
+ * </p>
+ * <p>
+ * For surfaces, the orientation reflects from which direction the local coordinate 
+ * system can be viewed as right handed, the "top" or the surface being the direction 
+ * of a completing z-axis that would form a right-handed system.
+ * </p>
+ * <p>
+ * When used as a boundary surface, the bounded solid is "below" the surface. 
+ * The orientation of points and solids has no immediate geometric interpretation 
+ * in 3-dimensional space.
+ * </p>
+ * <p> OrientablePrimitive objects are essentially references to geometric primitives 
+ * that carry an "orientation" reversal flag (either "+" or "-") that determines whether 
+ * this primitive agrees or disagrees with the orientation of the referenced object.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface OrientablePrimitive extends Primitive {
+    
+    /**
+     * Gets the one of the values of a coordinate (direct position) in a
+     * concrete dimension.
+     * 
+     * @param index
+     *            The index of the direct position to set.
+     * @param dimension
+     *            The dimension of the direct position.
+     * @return The value of the coordinate
+     */
+    public double getCoordinateAt(int index, int dimension);
+    
+    
+    /**
+     * Sets the value of a coordinate (direct position) in a concrete dimension
+     * @param index
+     * The index of the direct position to set
+     * @param dimension
+     * The dimension of the direct position
+     * @param value
+     * The value to set
+     */
+    public void setCoordinateAt(int index, int dimension, double value);
+    
+    /**
+     * Adds a vertex (or direct position) to the curve
+     * @param point
+     * The new point to add
+     */
+    public void addVertex(Point point);
+    
+    /**
+     * Utility method for add a vertex
+     * @param x
+     * @param y
+     * @see #addVertex(Point)
+     */
+    public void addVertex(double x, double y);
+
+    /**
+     * Utility method for add a vertex
+     * @param x
+     * @param y
+     * @param z
+     * @see #addVertex(Point)
+     */
+    public void addVertex(double x, double y, double z);
+    
+    /**
+     * Remove a vertex (direct position) to the curve
+     * @param index
+     * The index of the vertex to remove
+     */
+    public void removeVertex(int index);
+        
+    /**
+     * Gets a vertex (direct position) 
+     * @param index
+     * The index of the vertex to get
+     * @return
+     * One point
+     */
+    public Point getVertex(int index);
+    
+    /**
+     * Gets the number of vertices (direct positions) of the curve
+     * @return
+     * The number of vertices
+     */
+    public int getNumVertices();
+        
+    /**
+     * Inserts a vertex (direct position) to the curve.
+     * @param index
+     * The index of the vertex where the new point has to be added.
+     * @param p
+     * The vertex to add.
+     */
+    public void insertVertex(int index, Point p);
+    
+    /**
+     * Sets a vertex in a concrete position and replaces the
+     * previous one that was in this position.
+     * @param index
+     * The index of the vertex where the new point has to be replaced.
+     * @param p
+     * The vertex to set.
+     */
+    public void setVertex(int index, Point p);
+
+    /**
+     * Sets all the coordinates of the curve 
+     * @param generalPathX The generalPath that contains all the coordinates
+     * @deprecated use addVertex
+     */
+    public void setGeneralPath(GeneralPathX generalPathX);
+    
+    /**
+     * Adds a vertex (or direct position) to the curve
+     * @param point
+     * The new point to add
+     * @deprecated
+     *      create a multigeometry or use methods to
+     *      add an inner surface
+     */
+    public void addMoveToVertex(Point point);
+    
+    /**
+     * Closes the geometry
+     * @deprecated
+     *      create a multigeometry, and it is not necessary to close a
+     *      geometry.
+     */
+    public void closePrimitive();
+    
+    public void ensureCapacity(int capacity);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientablePrimitive.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Envelope.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Envelope.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Envelope.java	(revision 42196)
@@ -0,0 +1,192 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Envelope specified in
+ * <a
+ * href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO
+ * 19107</a>. A minimum bounding box or rectangle. Regardless of dimension, an
+ * Envelope can be represented without ambiguity as two direct positions
+ * (coordinate points). To encode an Envelope, it is sufficient to encode these
+ * two points. This is consistent with all of the data types in this
+ * specification, their state is represented by their publicly accessible
+ * attributes.
+ * </p>
+ *
+ * @see <a
+ * href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO
+ * 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Envelope extends Persistent, Cloneable {
+
+    /**
+     * Returns the center ordinate along the specified dimension.
+     *
+     * @param dimension. The dimension
+     * @return The value of the ordinate.
+     * @throws EnvelopeNotInitializedException if the envelope is empty.
+     */
+    double getCenter(int dimension);
+
+    /**
+     * The length of coordinate sequence (the number of entries) in this
+     * envelope.
+     *
+     * @return The dimension of the envelope.
+     */
+    int getDimension();
+
+    /**
+     * Returns the envelope length along the specified dimension.
+     *
+     * @param dimension The dimension.
+     * @return The envelope length along a dimension.
+     * @throws EnvelopeNotInitializedException if the envelope is empty.
+     */
+    double getLength(int dimension);
+
+    /**
+     * A coordinate position consisting of all the minimal ordinates for each
+     * dimension for all points within the Envelope.
+     *
+     * @return The lower corner.
+     */
+    Point getLowerCorner();
+
+    /**
+     * Sets the coordinate position consisting of all the minimal ordinates for
+     * each dimension for all points within the Envelope.
+     *
+     * @param point The lower corner.
+     */
+    void setLowerCorner(Point point);
+
+    /**
+     * Returns the maximal ordinate along the specified dimension.
+     *
+     * @param dimension The dimension.
+     * @return The maximum value
+     * @throws EnvelopeNotInitializedException if the envelope is empty.
+     */
+    double getMaximum(int dimension);
+
+    /**
+     * Returns the minimal ordinate along the specified dimension.
+     *
+     * @param dimension The dimension.
+     * @return The minimum value.
+     * @throws EnvelopeNotInitializedException if the envelope is empty.
+     */
+    double getMinimum(int dimension);
+
+    /**
+     * A coordinate position consisting of all the maximal ordinates for each
+     * dimension for all points within the Envelope.
+     *
+     * @return The upper corner
+     */
+    Point getUpperCorner();
+
+    /**
+     * Sets the coordinate position consisting of all the maximal ordinates for
+     * each dimension for all points within the Envelope.
+     *
+     * @param point The upper corner.
+     */
+    void setUpperCorner(Point upperCorner);
+
+    /**
+     * Adds a envelope to the current envelope.
+     *
+     * If the envelope to add is null or empty do not modify the current
+     * enevelop and don't throw a exception.
+     *
+     * @param envelope The envelope to add.
+     */
+    void add(Envelope envelope);
+
+    /**
+     * Utility method to add the envelop of geometry to the current envelope.
+     *
+     * Is equivalent to:
+     *  <code>add(geometry.getEnvelope())</code>
+     * 
+     * @param envelope The envelope to add.
+     */
+    void add(Geometry geometry);
+    
+    /**
+     * It returns the equivalent of an envelope like a geometry.
+     *
+     * @return A geometry that contains the same area that the envelope.
+     *
+     * @throws EnvelopeNotInitializedException if the envelope is empty.
+     */
+    Geometry getGeometry();
+
+    /**
+     * Returns <code>true</code> if the new envelope is contained in the current
+     * envelope.
+     *
+     * @param envelope The envelope to compare.
+     * @return If the current envelope contains the new envelope
+     */
+    boolean contains(Envelope envelope);
+
+    /**
+     * Returns <code>true</code> if the new envelope intersects with the current
+     * envelope.
+     *
+     * @param envelope The envelope to compare.
+     * @return If the current envelope intersects with the new envelope
+     */
+    boolean intersects(Envelope envelope);
+
+    /**
+     * Converts the envelope to other coordinate reference system
+     *
+     * @param trans The CRS conversor
+     * @return A new envelope in other CRS
+     * @throws EnvelopeNotInitializedException if the envelope is empty.
+     */
+    Envelope convert(ICoordTrans trans);
+
+    /**
+     * Gets if the envelope is <code>null</code> or not. Is Empty means that the
+     * lower and upper corner are <code>null</code>.
+     *
+     * @return <code>null</code> or not if is empty.
+     */
+    boolean isEmpty();
+
+    void clear();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Envelope.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/GeneralPathX.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/GeneralPathX.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/GeneralPathX.java	(revision 42196)
@@ -0,0 +1,266 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.io.Serializable;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.GeometryLocator;
+
+/**
+ * 
+ * This class is deprecated.
+ * Use the API of Geometry to manipulate the geometry,
+ * 
+ * @deprecated use the geometry methods
+ */
+public class GeneralPathX implements Shape, Cloneable, Serializable, IGeneralPathX {
+
+
+    protected static final int INIT_SIZE = 20;
+    
+    private IGeneralPathX implementation = null;
+    
+    protected GeneralPathX(boolean nouse) {
+        super();
+    }
+    
+    /**
+     * @deprecated to create a GeneralPathX use GeometryManager.createGeneralPath
+     */
+    public GeneralPathX() {
+    	this.implementation = GeometryLocator.getGeometryManager().createGeneralPath(WIND_EVEN_ODD, null);
+    }
+
+    /**
+     * @deprecated to create a GeneralPathX use GeometryManager.createGeneralPath
+     */
+    public GeneralPathX(int rule) {
+    	this.implementation = GeometryLocator.getGeometryManager().createGeneralPath(rule, null);
+    }
+
+    /**
+     * @deprecated to create a GeneralPathX use GeometryManager.createGeneralPath
+     */
+    public GeneralPathX(int rule, int initialCapacity) {
+    	this.implementation = GeometryLocator.getGeometryManager().createGeneralPath(rule, null);
+    }
+
+    /**
+     * @deprecated to create a GeneralPathX use GeometryManager.createGeneralPath
+     */
+    public GeneralPathX(PathIterator pathIterator) {
+    	this.implementation = GeometryLocator.getGeometryManager().createGeneralPath(WIND_EVEN_ODD, pathIterator);
+    }
+
+    public synchronized void moveTo(double x, double y) {
+    	this.implementation.moveTo(x, y);
+    }
+
+    public synchronized void moveTo(Point point) {
+    	this.implementation.moveTo(point);
+    }
+
+    public synchronized void lineTo(double x, double y) {
+    	this.implementation.lineTo(x, y);
+    }
+
+    public synchronized void lineTo(Point point) {
+    	this.implementation.lineTo(point);
+    }
+
+    public synchronized void addSegment(Point[] segment) {
+    	this.implementation.addSegment(segment);
+    }
+
+    public synchronized void quadTo(double x1, double y1, double x2, double y2) {
+    	this.implementation.quadTo(x1, y1, x2, y2);
+    }
+
+    public synchronized void quadTo(Point point1, Point point2) {
+    	this.implementation.quadTo(point1, point2);
+    }
+
+    public synchronized void curveTo(double x1, double y1, double x2,
+        double y2, double x3, double y3) {
+    	this.implementation.curveTo(x1, y1, x2, y2, x3, y3);
+    }
+
+    public synchronized void curveTo(Point point1, Point point2, Point point3) {
+    	this.implementation.curveTo(point1, point2, point3);
+    }
+
+    public synchronized void closePath() {
+    	this.implementation.closePath();
+    }
+
+    public boolean isClosed() {
+    	return this.implementation.isClosed();
+    }
+
+    public void append(PathIterator pi, boolean connect) {
+    	this.implementation.append(pi, connect);
+    }
+
+    public void append(GeneralPathX gp) {
+        this.implementation.append(gp);
+    }
+    
+    public void setWindingRule(int rule) {
+    	this.implementation.setWindingRule(rule);
+    }
+
+    public synchronized void reset() {
+    	this.implementation.reset();
+    }
+
+    public void transform(AffineTransform at) {
+    	this.implementation.transform(at);
+    }
+
+    public void reProject(ICoordTrans ct) {
+    	this.implementation.reProject(ct);
+    }
+
+    public void setNumTypes(int numTypes) {
+    	this.implementation.setNumTypes(numTypes);
+    }
+
+    public void setPointTypes(byte[] pointTypes) {
+    	this.implementation.setPointTypes(pointTypes);
+    }
+
+    public void setPointCoords(double[] pointCoords) {
+    	this.implementation.setPointCoords(pointCoords);
+    }
+
+    public void flip() {
+    	this.implementation.flip();
+    }
+
+    public synchronized Point2D getCurrentPoint() {
+    	return this.implementation.getCurrentPoint();
+    }
+
+    public synchronized int getWindingRule() {
+    	return this.implementation.getWindingRule();
+    }
+
+    public synchronized Shape createTransformedShape(AffineTransform at) {
+    	return this.implementation.createTransformedShape(at);
+    }
+
+    public java.awt.Rectangle getBounds() {
+    	return this.implementation.getBounds();
+    }
+
+    public synchronized Rectangle2D getBounds2D() {
+    	return this.implementation.getBounds2D();
+    }
+
+    public boolean contains(double x, double y) {
+    	return this.implementation.contains(x, y);
+    }
+
+    public boolean contains(Point2D p) {
+    	return this.implementation.contains(p);
+    }
+
+    public boolean contains(double x, double y, double w, double h) {
+    	return this.implementation.contains(x, y, w, h);
+    }
+
+    public boolean contains(Rectangle2D r) {
+    	return this.implementation.contains(r);
+    }
+
+    public boolean intersects(double x, double y, double w, double h) {
+    	return this.implementation.intersects(x, y, w, h);
+    }
+
+    public boolean intersects(Rectangle2D r) {
+    	return this.implementation.intersects(r);
+    }
+
+    public PathIterator getPathIterator(AffineTransform at) {
+    	return this.implementation.getPathIterator(at);
+    }
+
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+    	return this.implementation.getPathIterator(at, flatness);
+    }
+
+    public Object clone() {
+    	return this.implementation.clone();
+    }
+
+    public int getNumTypes() {
+    	return this.implementation.getNumTypes();
+    }
+
+    public int setNumCoords(int numCoords) {
+    	return this.implementation.setNumCoords(numCoords);
+    }
+
+    public int getNumCoords() {
+    	return this.implementation.getNumCoords();
+    }
+
+    public byte getTypeAt(int index) {
+    	return this.implementation.getTypeAt(index);
+    }
+
+    public byte[] getPointTypes() {
+    	return this.implementation.getPointTypes();
+    }
+
+    public double[] getPointCoords() {
+    	return this.implementation.getPointCoords();
+    }
+
+    public Point getPointAt(int index) {
+    	return this.implementation.getPointAt(index);
+    }
+
+    public double[] getCoordinatesAt(int index) {
+    	return this.implementation.getCoordinatesAt(index);
+    }
+    
+    public double[] get3DCoordinatesAt(int index) {
+    	return this.implementation.get3DCoordinatesAt(index);
+    }
+
+    public boolean isCCW() {
+    	return this.implementation.isCCW();
+    }
+
+    public boolean isSimple() {
+    	return this.implementation.isSimple();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/GeneralPathX.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Curve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Curve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Curve.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Curve and the GM_CurveSegment specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * Curve  is a descendent subtype of {@link Primitive} through {@link OrientablePrimitive}. 
+ * It is the basis for 1-dimensional geometry. 
+ * </p>
+ * <p>
+ * A curve is a continuous image of an open interval 
+ * and so could be written as a parameterized function such as c(t):(a, b) -> E^n where "t" is a real 
+ * parameter and E^n is Euclidean space of dimension n (usually 2 or 3, as determined by 
+ * the coordinate reference system). Any other parameterization that results in the same image curve, 
+ * traced in the same direction, such as any linear shifts and positive scales such as 
+ * e(t) = c(a + t(b-a)):(0,1) -> E^n, is an equivalent representation of the same curve.
+ * </p>
+ * <p>
+ * Curves are continuous, connected, and have a measurable length in terms of 
+ * the coordinate system. The orientation of the curve is determined by this 
+ * parameterization, and is consistent with the tangent function, which 
+ * approximates the derivative function of the parameterization and shall 
+ * always point in the "forward" direction. The parameterization of the reversal of 
+ * the curve defined by c(t):(a, b) -> E^n would be defined by a function of the 
+ * form s(t) = c(a + b - t):(a, b) - >E^n.
+ * </p>
+ * <p>
+ * In the ISO model a curve is composed of one or more curve segments. 
+ * In gvSIG a curve is not composed by curve segments: a curve is 
+ * one and only one curve segment.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Curve extends OrientableCurve{
+	
+	/**
+	 * Sets the initial point and the end point of the curve. On this case,
+	 * the curve is a single line
+	 * @param initialPoint
+	 * The initial point
+	 * @param endPoint
+	 * The end point
+	 */
+	public void setPoints(Point initialPoint, Point endPoint);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Curve.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/NullGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/NullGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/NullGeometry.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.primitive;
+/**
+ * @deprecated  use null instead. This interface can be removed in next revisions
+ */
+public interface NullGeometry extends Primitive{
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/NullGeometry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Polygon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Polygon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Polygon.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+
+
+public interface Polygon extends Surface {
+
+    public MultiPoint toPoints() throws GeometryException;
+
+    public MultiLine toLines() throws GeometryException;
+    
+    public MultiPolygon toPolygons() throws GeometryException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Polygon.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Line.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Line.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Line.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+
+public interface Line extends Curve {
+	
+    public MultiPoint toPoints() throws GeometryException;
+
+    public MultiLine toLines() throws GeometryException;
+    
+    public MultiPolygon toPolygons() throws GeometryException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Line.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Surface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Surface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Surface.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Surface specified in <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012"
+ * >ISO 19107</a>. Surface is a subclass of {@link Primitive} and is the basis
+ * for 2-dimensional geometry. Unorientable surfaces such as the M�bius band
+ * are not allowed.
+ * <p/>
+ * <p>
+ * The orientation of a surface chooses an "up" direction through the choice of
+ * the upward normal, which, if the surface is not a cycle, is the side of the
+ * surface from which the exterior boundary appears counterclockwise. Reversal
+ * of the surface orientation reverses the curve orientation of each boundary
+ * component, and interchanges the conceptual "up" and "down" direction of the
+ * surface.
+ * </p>
+ * <p>
+ * If the surface is the boundary of a solid, the "up" direction is usually
+ * outward. For closed surfaces, which have no boundary, the up direction is
+ * that of the surface patches, which must be consistent with one another.
+ * </p>
+ * 
+ * @see <a
+ *      href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO
+ *      19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ * @author <a href="mailto:jtorres@ai2.upv.es">Jordi Torres Fabra</a>
+ */
+public interface Surface extends OrientableSurface {
+
+	/**
+	 * Sets the appearance of the Surface
+	 * 
+	 * @param app
+	 *            The appearance of the surface
+	 */
+	public void setSurfaceAppearance(SurfaceAppearance app);
+
+	/**
+	 * Gets surface appearance
+	 * 
+	 * @return the surface appearance
+	 * 
+	 */
+	public SurfaceAppearance getSurfaceAppearance();
+
+        public int getNumInteriorRings();
+        
+        public Ring getInteriorRing(int index);
+        
+        public void addInteriorRing(Ring ring);
+        
+        public void removeInteriorRing(int index);
+        
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Surface.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Point.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Point.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Point.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+import org.gvsig.fmap.geom.DirectPosition;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Point specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * It is the basic data type for a geometric object consisting 
+ * of one and only one point. 
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Point extends Primitive {
+	
+	/**
+	 * Gets the {@link DirectPosition of a point}, that is
+	 * composed by a set of ordinates
+	 * @return
+	 * The direct position
+	 */
+	public DirectPosition getDirectPosition();
+	
+	/**
+	 * Sets a ordinate in a concrete dimension
+	 * @param dimension
+	 * The dimension to set
+	 * @param value
+	 * The value to set
+	 */
+	void setCoordinateAt(int dimension, double value);
+
+    /**
+     * Sets the point coordinates
+     * 
+     * @param value
+     *            The coordinates to set
+     * @deprecated Use {@link #setCoordinateAt(int, double))} instead
+     */
+	void setCoordinates(double[] values);
+	
+	/**
+	 * Sets the X coordinate
+	 * @param x
+	 * The value to set
+	 */
+	void setX(double x);
+	
+	/**
+	 * Sets the Y coordinate
+	 * @param y
+	 * The value to set
+	 */
+	void setY(double y);
+	
+	/**
+	 * Gets the coordinate in a concrete dimension
+	 * @param dimension
+	 * The ordinate dimension
+	 * @return
+	 * The value of the ordinate
+	 */
+	double getCoordinateAt(int dimension);
+
+    /**
+     * Returns an array of coordinates. Don't use the provided array to modify
+     * the point coordinates, but use the {@link #setCoordinateAt(int, double))}
+     * , {@link #setX(double))} or {@link #setY(double))} methods instead.
+     * 
+     * @return The point coordinates
+     * @deprecated Use {@link #getCoordinateAt(int)} instead
+     */
+	double[] getCoordinates();
+	
+	/**
+	 * Returns the X coordinate 
+	 * @return
+	 * The X coordinate
+	 */
+	double getX();
+	
+	/**
+	 * Returns the Y coordinate 
+	 * @return
+	 * The Y coordinate
+	 */
+	double getY();
+	
+        public MultiPoint toPoints() throws GeometryException ;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Point.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableCurve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableCurve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableCurve.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_OrientableCurve specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * OrientableCurve consists of a curve and an orientation inherited from 
+ * {@link OrientablePrimitive}.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface OrientableCurve extends OrientablePrimitive{
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableCurve.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Spline.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Spline.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Spline.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.primitive;
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Spline extends Curve{
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Spline.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EllipticArc.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EllipticArc.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EllipticArc.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.primitive;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface EllipticArc extends Surface{
+
+	/**
+	 * Sets the values to define a ellipticArc
+	 * @param axis1Start
+	 * The point where the first axis starts.
+	 * @param axis1End
+	 * The point where the first axis ends.
+	 * @param semiAxis2Dist
+	 * @param angSt
+	 * @param angExt
+	 */
+	void setPoints(Point axis1Start, Point axis1End, double semiAxis2Dist, double angSt, double angExt);
+	
+	/**
+	 * Returns the point where the first axis starts.
+	 * @return
+	 * The point where the first axis starts.
+	 */
+	Point getAxis1Start();
+		
+	/**
+	 * Returns the point where the first axis ends.
+	 * @return
+	 * The point where the first axis ends.
+	 */
+	Point getAxis1End();
+		
+	double getAxis2Dist();
+		
+	double getAngSt();
+		
+	double getAngExt();
+		
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/EllipticArc.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/IGeneralPathX.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/IGeneralPathX.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/IGeneralPathX.java	(revision 42196)
@@ -0,0 +1,132 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import org.cresques.cts.ICoordTrans;
+
+/**
+ *
+ * @author usuario
+ */
+public interface IGeneralPathX {
+    byte SEG_CLOSE = (byte) PathIterator.SEG_CLOSE;
+    byte SEG_CUBICTO = (byte) PathIterator.SEG_CUBICTO;
+    byte SEG_LINETO = (byte) PathIterator.SEG_LINETO;
+    byte SEG_MOVETO = (byte) PathIterator.SEG_MOVETO;
+    byte SEG_QUADTO = (byte) PathIterator.SEG_QUADTO;
+    
+    /**
+     * An even-odd winding rule for determining the interior of
+     * a path.
+     */
+    int WIND_EVEN_ODD = PathIterator.WIND_EVEN_ODD;
+    /**
+     * A non-zero winding rule for determining the interior of a
+     * path.
+     */
+    int WIND_NON_ZERO = PathIterator.WIND_NON_ZERO;
+    int[] curvesize = {1, 1, 2, 3, 0};
+
+    void addSegment(Point[] segment);
+
+    void append(PathIterator pi, boolean connect);
+    
+    public void append(GeneralPathX gp);
+
+    Object clone();
+
+    void closePath();
+
+    boolean contains(double x, double y);
+
+    boolean contains(Point2D p);
+
+    boolean contains(double x, double y, double w, double h);
+
+    boolean contains(Rectangle2D r);
+
+    Shape createTransformedShape(AffineTransform at);
+
+    void curveTo(double x1, double y1, double x2, double y2, double x3, double y3);
+
+    void curveTo(Point point1, Point point2, Point point3);
+
+    void flip();
+
+    double[] get3DCoordinatesAt(int index);
+
+    Rectangle getBounds();
+
+    Rectangle2D getBounds2D();
+
+    double[] getCoordinatesAt(int index);
+
+    Point2D getCurrentPoint();
+
+    int getNumCoords();
+
+    int getNumTypes();
+
+    PathIterator getPathIterator(AffineTransform at);
+
+    PathIterator getPathIterator(AffineTransform at, double flatness);
+
+    Point getPointAt(int index);
+
+    double[] getPointCoords();
+
+    byte[] getPointTypes();
+
+    byte getTypeAt(int index);
+
+    int getWindingRule();
+
+    boolean intersects(double x, double y, double w, double h);
+
+    boolean intersects(Rectangle2D r);
+
+    boolean isCCW();
+
+    boolean isClosed();
+
+    boolean isSimple();
+
+    void lineTo(double x, double y);
+
+    void lineTo(Point point);
+
+    void moveTo(double x, double y);
+
+    void moveTo(Point point);
+
+    void quadTo(double x1, double y1, double x2, double y2);
+
+    void quadTo(Point point1, Point point2);
+
+    void reProject(ICoordTrans ct);
+
+    void reset();
+
+    int setNumCoords(int numCoords);
+
+    void setNumTypes(int numTypes);
+
+    void setPointCoords(double[] pointCoords);
+
+    void setPointTypes(byte[] pointTypes);
+
+    void setWindingRule(int rule);
+
+    void transform(AffineTransform at);
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Ellipse.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Ellipse.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Ellipse.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.primitive;
+
+
+/**
+ * <p>
+ * An ellipse is the finite or bounded case of a conic section, 
+ * the geometric shape that results from cutting a circular conical 
+ * or cylindrical surface with an oblique plane (the other two cases being 
+ * the parabola and the hyperbola). It is also the locus of all points of 
+ * the plane whose distances to two fixed points add to the same constant.
+ * </p>
+ * @see <a href="http://en.wikipedia.org/wiki/Ellipse">Full definition from Wikipedia</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Ellipse extends Surface {
+		
+	/**
+	 * Sets the values to define a ellipse.
+	 * @param axis1Start
+	 * The point where the first axis starts.
+	 * @param axis1End
+	 * The point where the first axis ends.
+	 * @param axis2Length
+	 * The length of the second axis.
+	 */
+	void setPoints(Point axis1Start, Point axis1End, double axis2Length);	
+	
+	/**
+	 * Returns the point where the first axis starts.
+	 * @return
+	 * The point where the first axis starts.
+	 */
+	Point getAxis1Start();
+	
+	/**
+	 * Returns the point where the first axis ends.
+	 * @return
+	 * The point where the first axis ends.
+	 */
+	Point getAxis1End();
+	
+	/**
+	 * Returns the length of the second axis.
+	 * @return
+	 * The length of the second axis.
+	 */
+	double getAxis2Dist();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Ellipse.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableSurface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableSurface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableSurface.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_OrientableSurface specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * OrientableSurface consists of a surface and an orientation inherited from 
+ * {@link OrientablePrimitive}.
+ * </p>
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface OrientableSurface extends OrientablePrimitive {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/OrientableSurface.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Ring.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Ring.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Ring.java	(revision 42196)
@@ -0,0 +1,7 @@
+
+package org.gvsig.fmap.geom.primitive;
+
+
+public interface Ring extends OrientablePrimitive {
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Appearance.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Appearance.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Appearance.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+import java.awt.Color;
+import java.awt.Image;
+
+/**
+ * This interface serves to set the appearance of a Solid in a CityGML model.
+ * 
+ * @author <a href="mailto:jtorres@ai2.upv.es">Jordi Torres Fabra</a>
+ * 
+ */
+
+public interface Appearance {
+
+	public interface Material {
+
+	
+
+		public static final class Face {
+			public static final int FRONT = 0;
+			public static final int BACK = 1;
+			public static final int FRONT_AND_BACK = 2;
+		}
+		/**
+		 * Gets the face to apply the material
+		 * @return the face
+		 */
+		public Face getFace();
+		
+		/**
+		 * Sets the face where the material will be applied
+		 * @param face the face
+		 */
+		public void setFace(Face face);
+		/**
+		 * Get the ambient color of the material
+		 * @return the ambien color
+		 */
+		public Color getAmbient();
+		/**
+		 * Set the ambient color of the material
+		 * @param ambient the ambien color
+		 */
+		public void setAmbient(Color ambient);
+		/**
+		 * Get the diffuse color of the material
+		 * @return the diffuse color
+		 */
+		public Color getDiffuse();
+		/**
+		 * Set the diffuse color of the material
+		 * @param diffuse the diffuse color
+		 */
+		public void setDiffuse(Color diffuse);
+		/**
+		 * Get the specular color of the material 
+		 * @return the specular color
+		 */
+		public Color getSpecular();
+		/**
+		 * Set the specular color of the material
+		 * @param specular the specular color
+		 */
+		public void setSpecular(Color specular);
+		/**
+		 * Get the emissive color of the material
+		 * @return	the emissive color
+		 */
+		public Color getEmission();
+		/**
+		 * Set the emissive color of the material
+		 * @param emission the emissive color 
+		 */
+		public void setEmission(Color emission);
+		/**
+		 * Get the shininess of the material
+		 * @return a float representing the shininess
+		 */
+		public float getShininess();
+		/**
+		 * Set the shininess of the material
+		 * @param shininess a float representing the shininess
+		 */
+		public void setShininess(float shininess);
+
+	}
+
+	/**
+	 * Enables/disables the blending in a solid
+	 * 
+	 * @param value
+	 *            the value to set
+	 */
+	public void setEnabledBlending(boolean value);
+
+	/**
+	 * Gets if blending is enabled/disabled
+	 * 
+	 * @return a boolean representing enabled(true)/disabled(false)
+	 */
+	public boolean getEnabledBlending();
+
+	/**
+	 * Enables disables lighting in a solid
+	 * 
+	 * @param value
+	 *            the value to set
+	 */
+	public void setEnabledLighting(boolean value);
+
+	/**
+	 * Gets if lighting is enabled/disabled
+	 * 
+	 * @return a boolean representing enabled(true)/disabled(false)
+	 */
+	public boolean getEnabledLighting();
+
+	/**
+	 * Sets the material of a solid
+	 * 
+	 * @param mat
+	 *            the material to set
+	 */
+	public void setMaterial(Material mat);
+
+	/**
+	 * Gets the material of a Solid
+	 * 
+	 * @return the material
+	 */
+	public Material getMaterial();
+
+	/**
+	 * Add a texture to the whole Solid
+	 * 
+	 * @param img
+	 *            the texture
+	 * @param stage
+	 *            the texture stage
+	 */
+	public void addTexture(Image img, int stage);
+
+	/**
+	 * Get the texure of a solid in a concrete stage
+	 * 
+	 * @param stage
+	 *            the concrete stage
+	 * @return the texture
+	 */
+	public Image getTexture(int stage);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Appearance.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Circle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Circle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Circle.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.primitive;
+
+/**
+ * <p>
+ * This interface is equivalent to the GM_Circle specified in 
+ * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>.
+ * Same as Arc, but closed to form a full circle. The "start" and "end" points are equal.
+ * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012">ISO 19107</a>
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface Circle extends Surface {
+	
+	/**
+	 * Sets the two values to define a circle.
+	 * @param center
+	 * The center point of the circle.
+	 * @param radious
+	 * A point that is used to calculate the radius.
+	 */	
+	void setPoints(Point center, Point radious);		
+	
+	/**
+	 * Sets the two values to define a circle.
+	 * @param center
+	 * The center point of the circle.
+	 * @param radious
+	 * The radius of the circle.
+	 */	
+	void setPoints(Point center, double radious);	
+	
+	/**
+	 * Sets the values to define a circle from three points. The circle
+	 * will be inside or the area defined by the three points.
+	 * @param p1
+	 * First point
+	 * @param p2
+	 * Second point 
+	 * @param p3
+	 * Third point
+	 */
+	void setPoints(Point p1, Point p2, Point p3);
+	
+	/**
+	 * Returns the center of the circle.
+	 * @return
+	 * The center of the circle.
+	 */
+	Point getCenter();
+	
+	/**
+	 * Returns the radius of the circle
+	 * @return
+	 * The radius of the circle
+	 */
+	double getRadious();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Circle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.GeometryLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/pom.xml	(revision 42196)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>jar</packaging>    
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+    <!-- Implementation dependencies for TESTS -->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+    </dependency>
+  </dependencies>
+
+  <description>This project contains the API definition of the geometry library of gvSIG.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryManager.java	(revision 42196)
@@ -0,0 +1,830 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.generalpath;
+
+import org.gvsig.fmap.geom.generalpath.spatialindex.SpatialIndexFactoryJTS;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.generalpath.spatialindex.SpatialIndexFactoryJSI;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.generalpath.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.IGeneralPathX;
+import org.gvsig.fmap.geom.primitive.NullGeometry;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.PointGeometryType;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+import org.gvsig.fmap.geom.generalpath.primitive.Envelope2D;
+import org.gvsig.fmap.geom.generalpath.primitive.Envelope3D;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceFactory;
+
+/**
+ * Default implementation for the {@link GeometryManager}. When the
+ * application starts, this class is registered in the {@link GeometryLocator}
+ * using the {@link DefaultGeometryLibrary}.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+
+public class DefaultGeometryManager implements GeometryManager {
+
+    private static final Logger logger = LoggerFactory
+    .getLogger(GeometryManager.class);
+    private double flatness = 0.8;
+
+    private Map spatialIndexFactories = new HashMap();
+    
+    /**
+     * This list holds the unique name of all registered geometry operations.
+     * The index in which they are stored is also the operation code used to
+     * invoke each one of them
+     */
+    private List geometryOperations = new ArrayList();
+
+    /**
+     * Common operations are registered here. Type specific operations are
+     * registered in the corresponding GeometryType instance
+     */
+    // private List commonOperations = new ArrayList();
+
+    /**
+     * This map holds the instances of all registered GeometryType. The key is
+     * the name of the specific Geometry subclass.
+     * In other words, the string "org.gvsig.fmap.geom.primitive.Point2D" is the
+     * hash key to obtain an instance of GeometryType holding the
+     * operations associated to the class org.gvsig.fmap.geom.primitive.Point2D.
+     */
+    private Map geometryTypeName = new HashMap();
+
+    /**
+     * Matrix of geometry types by type (row) and subtype (column). This matrix
+     * will contain null values in the cells where a GeometryType hasn't been
+     * registered.
+     */
+    private GeometryType[][] geometryTypes;
+
+    // Initially create a matrix of 17 x 6, which are the current default
+    // types and subtypes. If another type or subtype is registered, the
+    // matrix will grow as needed
+    private static final int DEFAULT_TYPES_SIZE = 17;
+    private static final int DEFAULT_SUBTYPES_SIZE = 6;
+
+    public DefaultGeometryManager() throws GeometryException {
+        this(DEFAULT_TYPES_SIZE, DEFAULT_SUBTYPES_SIZE);
+    }
+
+    public DefaultGeometryManager(int initialTypesSize, int initialSubtypesSize) throws GeometryException {
+        geometryTypes = new GeometryType[initialTypesSize][initialSubtypesSize];
+        this.addServiceFactory(new SpatialIndexFactoryJTS());
+        this.addServiceFactory(new SpatialIndexFactoryJSI());
+    }
+
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp, GeometryType geomType) {
+        if (geomOp == null) {
+            throw new IllegalArgumentException("geomOp cannot be null.");
+        }
+        if (geomType == null) {
+            throw new IllegalArgumentException("geomType cannot be null.");
+        }
+
+        int index = getGeometryOperationCode(geomOpName);
+
+        geomType.setGeometryOperation(index, geomOp);
+
+        return index;
+    }
+
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp) {
+        if (geomOpName == null) {
+            throw new IllegalArgumentException("geomOpName cannot be null.");
+        }
+        if (geomOp == null) {
+            throw new IllegalArgumentException("geomOp cannot be null.");
+        }
+
+        int index = getGeometryOperationCode(geomOpName);
+
+        Iterator it = geometryTypeName.values().iterator();
+        while (it.hasNext()) {
+            GeometryType geometryType = (GeometryType) it.next();
+            registerGeometryOperation(geomOpName, geomOp, geometryType);
+        }
+
+        return index;
+
+    }
+
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp, int type, int subType)
+    throws GeometryTypeNotSupportedException, GeometryTypeNotValidException {
+        GeometryType geometryType = getGeometryType(type, subType);
+        return registerGeometryOperation(geomOpName, geomOp, geometryType);
+    }
+
+    public int registerGeometryOperation(String geomOpName,
+        GeometryOperation geomOp, int type) {
+        int code = -1;
+        Iterator it = geometryTypeName.values().iterator();
+        while (it.hasNext()) {
+            GeometryType geometryType = (GeometryType) it.next();
+            if ((type == geometryType.getType())) {
+                code =
+                    registerGeometryOperation(geomOpName, geomOp, geometryType);
+            }
+        }
+        return code;
+    }
+
+    public int registerGeometryOperationBySubtype(String geomOpName,
+        GeometryOperation geomOp, int subType) {
+        int code = -1;
+        Iterator it = geometryTypeName.values().iterator();
+        while (it.hasNext()) {
+            GeometryType geometryType = (GeometryType) it.next();
+            if ((subType == geometryType.getSubType())) {
+                code =
+                    registerGeometryOperation(geomOpName, geomOp, geometryType);
+            }
+        }
+        return code;
+    }    
+
+    public int registerGeometryOperationBySuperType(String geomOpName,
+        GeometryOperation geomOp, int superType) {       
+        int code = -1;
+        Iterator it = geometryTypeName.values().iterator();
+        while (it.hasNext()) {
+            GeometryType geometryType = (GeometryType) it.next();
+            if (geometryType.isTypeOf(superType)) {
+                code =
+                    registerGeometryOperation(geomOpName, geomOp, geometryType);
+            }
+        }
+        return code;
+    }
+
+    public int registerGeometryOperationBySuperSubType(String geomOpName,
+        GeometryOperation geomOp, int superSubType) {       
+        int code = -1;
+        Iterator it = geometryTypeName.values().iterator();
+        while (it.hasNext()) {
+            GeometryType geometryType = (GeometryType) it.next();
+            if (geometryType.isSubTypeOf(superSubType)) {
+                code =
+                    registerGeometryOperation(geomOpName, geomOp, geometryType);
+            }
+        }
+        return code;
+    }
+
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType) {
+        return registerGeometryType(geomClass, name, type, subType,
+            new int[0], new int[0]);
+    }    
+
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int superType, int superSubType) {
+        return registerGeometryType(geomClass, name, type, subType,
+            new int[]{superType}, new int[]{superSubType});
+    }
+
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int superType) {
+        return registerGeometryType(geomClass, name, type, subType,
+            new int[]{superType}, new int[0]);
+    }
+
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int[] superTypes) {
+        return registerGeometryType(geomClass, name, type, subType,
+            superTypes, new int[0]);
+    }
+
+    /**
+     * Registers a Geometry implementation class with a predefined geometry type
+     * and returns the
+     * associated GeometryType instance. Available predefined types are defined
+     * in {@link Geometry.TYPES} If the class is already registered then this
+     * method throws an IllegalArgumentException.<br>
+     * 
+     * How to register a geometry class with a predefined type:
+     * 
+     * <pre>
+     * 
+     * public class Point2D implements Point {
+     *   private static final GeometryType geomType = GeometryManager.getInstance()
+     *    .registerBasicGeometryType(Point2D.class, "Point2D", Geometry.TYPES.POINT);
+     * 
+     * ...
+     *   public int getType() {
+     *      return geomType.getType();
+     *   }
+     * }
+     * </pre>
+     * 
+     * @param geomClass
+     *            Geometry subclass. It must not be null and must implement
+     *            Geometry, otherwise an exception
+     *            is raised.
+     * @param name
+     *            Symbolic name for the geometry type, it can be null. If it is
+     *            null then the symbolic name
+     *            will be the simple class name.
+     * @param id
+     *            Geometry identifier.
+     * @param type
+     *            Type of geometry. Must be a value defined in
+     *            {@link Geometry.TYPES}
+     * @param subType
+     *            SubType of geometry. Must be a value defined in
+     *            {@link Geometry.SUBTYPES}
+     * @return Instance of GeometryType associated to the Geometry
+     *         implementation class
+     *         geomClass
+     * @throws IllegalArgumentException
+     *             If geomClass is null or does not implement Geometry
+     */
+    public GeometryType registerGeometryType(Class geomClass, String name,
+        int type, int subType, int[] superTypes, int superSubTypes[]) {
+        if (geomClass == null) {
+            throw new IllegalArgumentException("geomClass cannot be null.");
+        }
+
+        if (!Geometry.class.isAssignableFrom(geomClass)) {
+            throw new IllegalArgumentException(geomClass.getName()
+                + " must implement the Geometry interface");
+        }
+
+        // Check if it is registered
+        GeometryType geomType = null;
+        if (type >= geometryTypes.length || subType >= geometryTypes[0].length
+            || (geomType = geometryTypes[type][subType]) == null) {
+            geomType =
+                new DefaultGeometryType(geomClass, name, type, subType,
+                    superTypes, superSubTypes);
+            registerGeometryType(geomType);
+        }
+
+        logger.debug("Class {} registered with name {}", geomClass,
+            geomType.getName());
+
+        return geomType;
+    }
+
+    public void registerGeometryType(GeometryType geometryType) {
+        if (geometryType.getType() >= geometryTypes.length
+            || geometryType.getSubType() >= geometryTypes[0].length) {
+
+            // Recreate the geometry type matrix if the types
+            // or subtypes don't fit
+            int newTypesSize =
+                geometryType.getType() < geometryTypes.length
+                ? geometryTypes.length : geometryType.getType() + 1;
+            int newSubTypesSize =
+                geometryType.getSubType() < geometryTypes[0].length
+                ? geometryTypes[0].length : geometryType.getSubType() + 1;
+                GeometryType[][] newMatrix =
+                    new GeometryType[newTypesSize][newSubTypesSize];
+
+                for (int i = 0; i < geometryTypes.length; i++) {
+                    System.arraycopy(geometryTypes[i], 0, newMatrix[i], 0,
+                        geometryTypes[i].length);
+                }
+                geometryTypes = newMatrix;
+        }
+
+        geometryTypes[geometryType.getType()][geometryType.getSubType()] =
+            geometryType;
+        geometryTypeName.put(geometryType.getName(), geometryType);
+    }
+
+    public GeometryType registerGeometryType(Class geomClass, int type,
+        int subType) {
+        return registerGeometryType(geomClass, null, type, subType);
+    }
+
+    public GeometryType getGeometryType(int type, int subType)
+    throws GeometryTypeNotSupportedException, GeometryTypeNotValidException {
+        GeometryType gType = null;
+        if (type >= geometryTypes.length || subType >= geometryTypes[0].length) {
+            throw new GeometryTypeNotValidException(type, subType);
+        }
+
+        gType = geometryTypes[type][subType];
+
+        if (gType == null) {
+            throw new GeometryTypeNotSupportedException(type, subType);
+        }
+
+        return gType;
+    }
+
+    public Geometry create(GeometryType geomType)
+    throws CreateGeometryException {
+        return geomType.create();
+    }
+
+    public Geometry create(String name) throws CreateGeometryException {
+        if (!geometryTypeName.containsKey(name)) {
+            throw new IllegalArgumentException(name
+                + " has not been registered yet.");
+        }
+        return ((GeometryType) geometryTypeName.get(name)).create();
+    }
+
+    public Geometry create(int type, int subType)
+    throws CreateGeometryException {
+        try {
+            return getGeometryType(type, subType).create();
+        } catch (GeometryException e) {
+            throw new CreateGeometryException(type, subType, e);
+        }
+    }
+
+    public Curve createCurve(GeneralPathX generalPathX, int subType)
+    throws CreateGeometryException {
+        Curve curve = (Curve) create(TYPES.CURVE, subType);
+        curve.setGeneralPath(generalPathX);
+        return curve;
+    }
+
+    public NullGeometry createNullGeometry(int subType)
+    throws CreateGeometryException {
+        NullGeometry nullGeom = (NullGeometry) create(TYPES.NULL, subType);
+        return nullGeom;
+    }
+
+    public Point createPoint(double x, double y, int subType)
+    throws CreateGeometryException {
+        Point point = (Point) create(TYPES.POINT, subType);
+        point.setX(x);
+        point.setY(y);
+        return point;
+    }
+
+    public Surface createSurface(GeneralPathX generalPathX, int subType)
+    throws CreateGeometryException {
+        Surface surface = (Surface) create(TYPES.SURFACE, subType);
+        surface.setGeneralPath(generalPathX);
+        return surface;
+    }
+
+    public GeometryOperation getGeometryOperation(int opCode, int type,
+        int subType) throws GeometryTypeNotSupportedException,
+        GeometryOperationNotSupportedException, GeometryTypeNotValidException {
+        GeometryType geometryType = getGeometryType(type, subType);
+        return geometryType.getGeometryOperation(opCode);
+    }
+
+    public GeometryOperation getGeometryOperation(int opCode)
+        throws GeometryOperationNotSupportedException {
+        if (opCode < 0) {
+            throw new GeometryOperationNotSupportedException(opCode);
+        }
+        GeometryType type =
+            (GeometryType) geometryTypeName.get(DefaultNullGeometry.class
+                .getName());
+        if (type == null) {
+            throw new GeometryOperationNotSupportedException(opCode);
+        }
+        return type.getGeometryOperation(opCode);
+    }
+
+    public Object invokeOperation(int opCode, Geometry geom,
+        GeometryOperationContext ctx)
+    throws GeometryOperationNotSupportedException,
+    GeometryOperationException {
+        GeometryOperation geomOp =
+            geom.getGeometryType().getGeometryOperation(opCode);
+
+        if (geomOp != null) {
+            return geomOp.invoke(geom, ctx);
+        }
+
+        throw new GeometryOperationNotSupportedException(opCode,
+            geom.getGeometryType());
+    }
+
+    public Object invokeOperation(String geomOpName, Geometry geom,
+        GeometryOperationContext ctx)
+    throws GeometryOperationNotSupportedException,
+    GeometryOperationException {
+        int index = geometryOperations.indexOf(geomOpName);
+        if (index == -1) {
+            throw new GeometryOperationNotSupportedException(-1);
+        }
+        return invokeOperation(index, geom, ctx);
+    }
+
+    public Object invokeOperation(String geomOpName,
+        GeometryOperationContext ctx)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+        int index = geometryOperations.indexOf(geomOpName);
+        GeometryOperation geomOp = getGeometryOperation(index);
+        return geomOp.invoke(null, ctx);
+    }
+
+    public Envelope createEnvelope(int subType) {
+        // TODO: register the envelopes!!!
+        switch (subType) {
+        case SUBTYPES.GEOM3D:
+            return new Envelope3D();
+        default:
+            return new Envelope2D();
+        }
+    }
+
+    public Envelope createEnvelope(double minX, double minY, double maxX,
+        double maxY, int subType) throws CreateEnvelopeException {
+        org.gvsig.fmap.geom.primitive.Point min = null;
+        org.gvsig.fmap.geom.primitive.Point max = null;
+        try {
+            PointGeometryType gType = (PointGeometryType) getGeometryType(TYPES.POINT, subType);
+            min = gType.createPoint(minX, minY);
+            max = gType.createPoint(maxX, maxY);
+        } catch (GeometryTypeNotSupportedException e) {
+            throw new CreateEnvelopeException(subType, e);
+        } catch (GeometryTypeNotValidException e) {
+            throw new CreateEnvelopeException(subType, e);
+        }
+        switch (subType) {
+        case SUBTYPES.GEOM2D:
+        case SUBTYPES.GEOM2DM:
+            // Small optimization to directly create an Envelope2D
+            // return new Envelope2D(minX, minY, maxX, maxY);
+            return new Envelope2D(min, max);
+        default:
+            Envelope envelope = createEnvelope(subType);
+            envelope.setLowerCorner(min);
+            envelope.setUpperCorner(max);
+            return envelope;
+        }
+    }
+
+    public MultiCurve createMultiCurve(GeneralPathX generalPathX, int subType)
+    throws CreateGeometryException {
+        if (subType != SUBTYPES.GEOM2D) {
+            // FIXME Exception
+            throw new UnsupportedOperationException();
+        }
+        MultiCurve multiCurve = (MultiCurve) create(TYPES.MULTICURVE, subType);
+        PathIterator piter = generalPathX.getPathIterator(null);
+        GeneralPathX tmpPath = null;
+        Curve tmpCurve = null;
+        double[] coords = new double[6];
+        double[] first = new double[6];
+        int type;
+        while (!piter.isDone()) {
+            type = piter.currentSegment(coords);
+            switch (type) {
+            case PathIterator.SEG_MOVETO:
+                if (tmpPath != null) {
+                    tmpCurve = createCurve(tmpPath, subType);
+                    multiCurve.addCurve(tmpCurve);
+                }
+                System.arraycopy(coords, 0, first, 0, 2);
+                tmpPath = new GeneralPathX(piter.getWindingRule());
+                tmpPath.moveTo(coords[0], coords[1]);
+                break;
+
+            case PathIterator.SEG_LINETO:
+                if (tmpPath == null) {
+                    System.arraycopy(coords, 0, first, 0, 2);
+                    tmpPath = new GeneralPathX(piter.getWindingRule());
+                }
+                tmpPath.lineTo(coords[0], coords[1]);
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                if (tmpPath == null) {
+                    System.arraycopy(coords, 0, first, 0, 2);
+                    tmpPath = new GeneralPathX(piter.getWindingRule());
+                }
+                tmpPath.quadTo(coords[0], coords[1], coords[2], coords[3]);
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                if (tmpPath == null) {
+                    System.arraycopy(coords, 0, first, 0, 2);
+                    tmpPath = new GeneralPathX(piter.getWindingRule());
+                }
+                tmpPath.curveTo(coords[0], coords[1], coords[2], coords[3],
+                    coords[4], coords[5]);
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                tmpPath.lineTo(first[0], first[1]);
+                break;
+
+            } // end switch
+
+            piter.next();
+
+        }
+        if (tmpPath != null) {
+            tmpCurve = createCurve(tmpPath, subType);
+            multiCurve.addCurve(tmpCurve);
+        }
+
+        return multiCurve;
+
+    }
+
+    public MultiSurface createMultiSurface(GeneralPathX generalPathX,
+        int subType) throws CreateGeometryException {
+        if (subType != SUBTYPES.GEOM2D) {
+            // FIXME Exception
+            throw new UnsupportedOperationException();
+        }
+        MultiSurface multiSurface =
+            (MultiSurface) create(TYPES.MULTISURFACE, subType);
+        PathIterator piter = generalPathX.getPathIterator(null);
+        GeneralPathX tmpPath = null;
+        Surface tmpSurface = null;
+        double[] coords = new double[6];
+        double[] first = new double[6];
+        int type;
+        while (!piter.isDone()) {
+            type = piter.currentSegment(coords);
+            switch (type) {
+            case PathIterator.SEG_MOVETO:
+                if (tmpPath != null) {
+                    tmpSurface = createSurface(tmpPath, subType);
+                    multiSurface.addSurface(tmpSurface);
+                }
+                System.arraycopy(coords, 0, first, 0, 2);
+                tmpPath = new GeneralPathX(piter.getWindingRule());
+                tmpPath.moveTo(coords[0], coords[1]);
+
+            case PathIterator.SEG_LINETO:
+                if (tmpPath == null) {
+                    System.arraycopy(coords, 0, first, 0, 2);
+                    tmpPath = new GeneralPathX(piter.getWindingRule());
+                }
+                tmpPath.lineTo(coords[0], coords[1]);
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                if (tmpPath == null) {
+                    System.arraycopy(coords, 0, first, 0, 2);
+                    tmpPath = new GeneralPathX(piter.getWindingRule());
+                }
+                tmpPath.quadTo(coords[0], coords[1], coords[2], coords[3]);
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                if (tmpPath == null) {
+                    System.arraycopy(coords, 0, first, 0, 2);
+                    tmpPath = new GeneralPathX(piter.getWindingRule());
+                }
+                tmpPath.curveTo(coords[0], coords[1], coords[2], coords[3],
+                    coords[4], coords[5]);
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                tmpPath.lineTo(first[0], first[1]);
+                break;
+            } // end switch
+
+            piter.next();
+
+        }
+        if (tmpPath != null) {
+            tmpSurface = createSurface(tmpPath, subType);
+            multiSurface.addSurface(tmpSurface);
+        }
+
+        return multiSurface;
+
+    }
+
+    public int getGeometryOperationCode(String geomOpName) {
+        if (geomOpName == null) {
+            throw new IllegalArgumentException("geomOpName cannot be null.");
+        }
+
+        int index = geometryOperations.indexOf(geomOpName);
+        if (index == -1) {
+            geometryOperations.add(geomOpName);
+            index = geometryOperations.indexOf(geomOpName);
+        }
+        return index;
+    }
+
+    public List getGeometryOperationNames() {
+        List operations = new ArrayList();
+        for (int i = 0; i < operations.size(); i++) {
+            operations.add(geometryOperations.get(i));
+        }
+        return operations;
+    }
+
+    public double getFlatness() {
+        return flatness;
+    }
+
+    public void setFlatness(double flatness) {
+        this.flatness = flatness;
+    }
+
+    public Geometry createFrom(String wkt, String srs) throws GeometryException {
+        GeometryOperationContext context = new GeometryOperationContext();
+        context.setAttribute("text", wkt);
+        context.setAttribute("srs", srs);
+        
+        try {
+            return (Geometry) this.invokeOperation(OPERATIONS.FROMWKT, context);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryException(e);
+        } catch (GeometryOperationException e) {
+            throw new GeometryException(e);
+        }
+    }
+
+    public Geometry createFrom(com.vividsolutions.jts.geom.Geometry geom) throws GeometryException {
+        return Converter.jtsToGeometry(geom);
+    }
+
+    public Geometry createFrom(String wkt) throws GeometryException {
+        GeometryOperationContext context = new GeometryOperationContext();
+        context.setAttribute("text", wkt);
+        context.setAttribute("srs", null);
+
+        try {
+            return (Geometry) this.invokeOperation(OPERATIONS.FROMWKT, context);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryException(e);
+        } catch (GeometryOperationException e) {
+            throw new GeometryException(e);
+        }
+    }
+
+    public Geometry createFrom(byte[] wkb) throws GeometryException {
+        GeometryOperationContext context = new GeometryOperationContext();
+        context.setAttribute("data", wkb);
+        try {
+            return (Geometry) this.invokeOperation(OPERATIONS.FROMWKB, context);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryException(e);
+        } catch (GeometryOperationException e) {
+            throw new GeometryException(e);
+        }
+    }
+ 
+    public IGeneralPathX createGeneralPath(int rule, PathIterator pathIterator) {
+		if( pathIterator == null ) {
+			return new DefaultGeneralPathX(rule);
+		}
+		return  new DefaultGeneralPathX(pathIterator);
+	}
+
+        public MultiPoint createMultiPoint(int subType) throws CreateGeometryException {
+            return (MultiPoint) create(TYPES.MULTIPOINT, subType);
+        }
+
+	public Line createLine(int subType) throws CreateGeometryException {
+		return (Line) create(TYPES.CURVE, subType);
+	}
+	
+	public Curve createCurve(int subType) throws CreateGeometryException {
+		return (Curve) create(TYPES.CURVE, subType);
+	}
+	
+	public MultiCurve createMultiCurve(int subType)
+			throws CreateGeometryException {
+		return (MultiCurve) create(TYPES.MULTICURVE, subType);
+	}
+	
+	public MultiLine createMultiLine(int subType)
+			throws CreateGeometryException {
+		return (MultiLine) create(TYPES.MULTICURVE, subType);
+	}
+	
+	public MultiSurface createMultiSurface(int subType)
+			throws CreateGeometryException {
+		return (MultiSurface) create(TYPES.MULTISURFACE, subType);
+	}
+	
+	public MultiPolygon createMultiPolygon(int subType)
+			throws CreateGeometryException {
+		return (MultiPolygon) create(TYPES.MULTISURFACE, subType);
+	}
+	
+	public Polygon createPolygon(int subType) throws CreateGeometryException {
+		return (Polygon) create(TYPES.SURFACE, subType);
+	}
+
+	public Surface createSurface(int subType) throws CreateGeometryException {
+		return (Surface) create(TYPES.SURFACE, subType);
+	}
+
+    public SpatialIndex createDefaultMemorySpatialIndex() throws ServiceException {
+        return this.createSpatialIndex(SpatialIndexFactoryJTS.NAME,null);
+    }
+
+    public SpatialIndex createSpatialIndex(String name, DynObject parameters) throws ServiceException {
+        SpatialIndexFactory factory = this.getSpatialIndexFactory(name);
+        if (factory == null) {
+            throw new CantExistsService(name);
+        }
+        return (SpatialIndex) factory.create(parameters, this);
+    }
+
+    public SpatialIndexFactory getSpatialIndexFactory(String name) {
+        return (SpatialIndexFactory) this.spatialIndexFactories.get(name);
+    }
+
+    public void addServiceFactory(ServiceFactory serviceFactory) {
+        serviceFactory.initialize();
+        this.spatialIndexFactories.put(serviceFactory.getName(), serviceFactory);
+    }
+
+    public Service createService(DynObject serviceParameters) throws ServiceException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public DynObject createServiceParameters(String serviceName) throws ServiceException {
+        SpatialIndexFactory factory = this.getSpatialIndexFactory(serviceName);
+        if( factory == null ) {
+            throw  new CantExistsService(serviceName);
+        }
+        return factory.createParameters();
+    }
+
+    public Service getService(DynObject parameters) throws ServiceException {
+        return this.createSpatialIndex((String) parameters.getDynValue("serviceName"), parameters);
+    }
+
+    public class CantExistsService extends ServiceException {
+
+        public CantExistsService(String serviceName) {
+            super("Can't existe service %(service).", "_Cant_existe_service_XserviceX", 100001);
+            setValue("service",serviceName);
+        }
+        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/UtilFunctions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/UtilFunctions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/UtilFunctions.java	(revision 42196)
@@ -0,0 +1,647 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.util;
+
+import java.awt.geom.Arc2D;
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//import com.vividsolutions.jts.algorithm.RobustCGAlgorithms;
+//import com.vividsolutions.jts.geom.Coordinate;
+
+/**
+ * @author FJP
+ * 
+ *         TODO To change the template for this generated type comment go to
+ *         Window - Preferences - Java - Code Generation - Code and Comments
+ * @deprecated to be removed or moved from API to implementation in gvSIG 2.1.0
+ */
+public class UtilFunctions {
+	private static final Logger logger = LoggerFactory.getLogger(GeometryManager.class);
+
+	static public Arc2D createCircle(Point2D p1, Point2D p2, Point2D p3) //, Graphics g)
+    {
+        double xC, yC, w, h;
+
+        // Calculamos 2 secantes, tiramos perpendiculares por sus puntos
+        // medios y obtenemos el centro. Luego calculamos el radio.
+        // Puntos medios de los segmentos.
+        double xm1, ym1, xm2, ym2;
+        xm1 = (p1.getX() + p2.getX())/ 2.0;
+        ym1 = (p1.getY() + p2.getY())/ 2.0;
+        xm2 = (p2.getX() + p3.getX())/ 2.0;
+        ym2 = (p2.getY() + p3.getY())/ 2.0;
+
+        /* g.setColor(Color.GRAY);
+        g.draw3DRect((int)xm1, (int) ym1, 1, 1, true);
+        g.draw3DRect((int)xm2, (int) ym2, 1, 1, true); */
+        // Pendientes de las perpendiculares y constantes
+        double mP1=0, mP2=0, A1, A2;
+        boolean bPerp1 = false;
+        //boolean bPerp2 = false;
+        if (p2.getY() - p1.getY() == 0)
+        {
+            A1 = ym1;
+            bPerp1 = true;
+        }
+        else
+        {
+            mP1 = (p2.getX() - p1.getX()) /(p1.getY() - p2.getY());
+            A1 = ym1 - xm1 * mP1;
+        }
+        if (p2.getY() - p3.getY() == 0)
+        {
+            A2 = ym2;
+            //bPerp2 = true;
+        }
+        else
+        {
+            mP2 = (p3.getX() - p2.getX()) /(p2.getY() - p3.getY());
+            A2 = ym2 - xm2 * mP2;
+        }
+        if (mP2 == mP1)
+        {
+            return null; // Error, 3 puntos alineados. No puede pasar un arco
+        }
+        else
+        {
+            xC = (A2 - A1)/(mP1-mP2);
+            if (!bPerp1) {
+				yC = xC * mP1 + A1;
+			} else {
+				yC = xC * mP2 + A2;
+			}
+        }
+        double Radio = p1.distance(xC, yC);
+        double xR = xC - Radio ;
+        double yR = yC - Radio ;
+        w = 2.0* Radio;
+        h = w;
+        Rectangle2D.Double rBounds = new Rectangle2D.Double(xR,yR, w,h);
+        Arc2D.Double resul = new Arc2D.Double(rBounds, 0.0, 360.0, Arc2D.OPEN);
+		/* g.setColor(Color.RED);
+		((Graphics2D) g).draw(resul);
+		g.setColor(Color.BLUE);
+		((Graphics2D) g).draw(rBounds);
+		g.draw3DRect((int)p1.getX(), (int) p1.getY(), 1, 1, true);
+		g.draw3DRect((int)p2.getX(), (int) p2.getY(), 2, 2, true);
+		g.draw3DRect((int)p3.getX(), (int) p3.getY(), 1, 1, true);
+		g.drawString("1", (int) p1.getX(), (int) p1.getY());
+		g.drawString("2", (int) p2.getX(), (int) p2.getY());
+		g.drawString("3", (int) p3.getX(), (int) p3.getY());
+		g.drawString("C", (int) xC, (int) yC);
+		g.draw3DRect((int)xC, (int) yC, 2, 2, true); */
+
+        return resul;
+    }
+    /**
+	 * Obtiene un par de puntos que definen la recta perpendicular a p1-p2 que
+	 * pasa por el punto perp
+	 *
+	 * @param p1 punto de la recta p1-p2
+	 * @param p2 punto de la recta p1-p2
+	 * @param perp Punto por el que pasa la recta perpendicular, debe ser
+	 * 		  distinto a p2
+	 *
+	 * @return Array con dos puntos que definen la recta resultante
+	 * @deprecated 
+	 *         use the perpendicular operation
+	 */
+	public static Point2D[] getPerpendicular(Point2D p1, Point2D p2,
+		Point2D perp) {
+		if ((p2.getY() - p1.getY()) == 0) {
+			return new Point2D[] {
+				new Point2D.Double(perp.getX(), 0),
+				new Point2D.Double(perp.getX(), 1)
+			};
+		}
+
+		//Pendiente de la recta perpendicular
+		double m = (p1.getX() - p2.getX()) / (p2.getY() - p1.getY());
+
+		//b de la funcion de la recta perpendicular
+		double b = perp.getY() - (m * perp.getX());
+
+		//Obtenemos un par de puntos
+		Point2D[] res = new Point2D[2];
+
+		res[0] = new Point2D.Double(0, (m * 0) + b);
+		res[1] = new Point2D.Double(1000, (m * 1000) + b);
+
+		return res;
+	}
+	public static Point2D[] getParallel(Point2D p1,Point2D p2,double distance) {
+		Point2D[] pParallel=new Point2D[2];
+		pParallel[0]=getPerpendicularPoint(p1,p2,p1,distance);
+		pParallel[1]=getPerpendicularPoint(p1,p2,p2,distance);
+		return pParallel;
+	}
+
+	/**
+	 * Obtiene el punto que se encuentra a una distancia 'dist' de la recta
+	 * p1-p2 y se encuentra en la recta perpendicular que pasa por perpPoint
+	 *
+	 * @param p1 Punto de la recta p1-p2
+	 * @param p2 Punto de la recta p1-p2
+	 * @param perpPoint Punto de la recta perpendicular
+	 * @param dist Distancia del punto que se quiere obtener a la recta p1-p2
+	 *
+	 * @return DOCUMENT ME!
+	 * @deprecated
+	 *         Use the perpendicularPoint operation
+	 */
+	public static Point2D getPerpendicularPoint(Point2D p1, Point2D p2,
+		Point2D perpPoint, double dist) {
+		Point2D[] p = getPerpendicular(p1, p2, perpPoint);
+		Point2D unit = getUnitVector(p[0], p[1]);
+
+		return new Point2D.Double(perpPoint.getX() + (unit.getX() * dist),
+			perpPoint.getY() + (unit.getY() * dist));
+	}
+
+	/**
+	 * Devuelve un vector unitario en forma de punto a partir de dos puntos.
+	 *
+	 * @param p1 punto origen.
+	 * @param p2 punto destino.
+	 *
+	 * @return vector unitario.
+	 * @deprecated
+	 *         use the UnitVector operation
+	 */
+	public static Point2D getUnitVector(Point2D p1, Point2D p2) {
+		Point2D paux = new Point2D.Double(p2.getX() - p1.getX(),
+				p2.getY() - p1.getY());
+		double v = Math.sqrt(Math.pow(paux.getX(), 2d) +
+				Math.pow(paux.getY(), 2d));
+		paux = new Point2D.Double(paux.getX() / v, paux.getY() / v);
+
+		return paux;
+	}
+	/**
+	 * Obtiene el centro del c�rculo que pasa por los tres puntos que se pasan
+	 * como  par�metro
+	 *
+	 * @param p1 primer punto del c�rculo cuyo centro se quiere obtener
+	 * @param p2 segundo punto del c�rculo cuyo centro se quiere obtener
+	 * @param p3 tercer punto del c�rculo cuyo centro se quiere obtener
+	 *
+	 * @return Devuelve null si los puntos est�n alineados o no son 3 puntos
+	 * 		   distintos
+	 */
+	public static Point2D getCenter(Point2D p1, Point2D p2, Point2D p3) {
+		if (p1.equals(p2) || p2.equals(p3) || p1.equals(p3)) {
+			return null;
+		}
+
+		Point2D[] perp1 = getPerpendicular(p1, p2,
+				new Point2D.Double((p1.getX() + p2.getX()) / 2,
+					(p1.getY() + p2.getY()) / 2));
+		Point2D[] perp2 = getPerpendicular(p2, p3,
+				new Point2D.Double((p2.getX() + p3.getX()) / 2,
+					(p2.getY() + p3.getY()) / 2));
+
+		return getIntersection(perp1[0], perp1[1], perp2[0], perp2[1]);
+	}
+
+
+	/**
+	 * Devuelve el punto de la intersecci�n entre las lineas p1-p2 y p3-p4.
+	 *
+	 * @param p1 punto de la recta p1-p2
+	 * @param p2 punto de la recta p1-p2
+	 * @param p3 punto de la recta p3-p4
+	 * @param p4 punto de la recta p3-p4
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * @throws RuntimeException DOCUMENT ME!
+	 */
+	public static Point2D getIntersection(Point2D p1, Point2D p2, Point2D p3,
+		Point2D p4) {
+		double m1 = Double.POSITIVE_INFINITY;
+
+		if ((p2.getX() - p1.getX()) != 0) {
+			m1 = (p2.getY() - p1.getY()) / (p2.getX() - p1.getX());
+		}
+
+		double m2 = Double.POSITIVE_INFINITY;
+
+		if ((p4.getX() - p3.getX()) != 0) {
+			m2 = (p4.getY() - p3.getY()) / (p4.getX() - p3.getX());
+		}
+
+		if ((m1 == Double.POSITIVE_INFINITY) &&
+				(m2 == Double.POSITIVE_INFINITY)) {
+			return null;
+		}
+
+		double b1 = p2.getY() - (m1 * p2.getX());
+
+		double b2 = p4.getY() - (m2 * p4.getX());
+
+		if ((m1 != Double.POSITIVE_INFINITY) &&
+				(m2 != Double.POSITIVE_INFINITY)) {
+			if (m1 == m2) {
+				return null;
+			}
+
+			double x = (b2 - b1) / (m1 - m2);
+
+			return new Point2D.Double(x, (m1 * x) + b1);
+		} else if (m1 == Double.POSITIVE_INFINITY) {
+			double x = p1.getX();
+
+			return new Point2D.Double(x, (m2 * x) + b2);
+		} else if (m2 == Double.POSITIVE_INFINITY) {
+			double x = p3.getX();
+
+			return new Point2D.Double(x, (m1 * x) + b1);
+		}
+
+		//no llega nunca
+		throw new RuntimeException("BUG!");
+	}
+	/**
+	 * Obtiene el �ngulo del vector que se pasa como par�metro con el vector
+	 * horizontal de izquierda a derecha
+	 *
+	 * @param start punto origen del vector
+	 * @param end punto destino del vector
+	 *
+	 * @return angulo en radianes
+	 */
+	public static double getAngle(Point2D start, Point2D end) {
+		double angle = Math.acos((end.getX() - start.getX()) / start.distance(
+					end));
+
+		if (start.getY() > end.getY()) {
+			angle = -angle;
+		}
+
+		if (angle < 0) {
+			angle += (2 * Math.PI);
+		}
+
+		return angle;
+	}
+	/**
+	 * Devuelve la distancia desde angle1 a angle2. Angulo en radianes de
+	 * diferencia entre angle1 y angle2 en sentido antihorario
+	 *
+	 * @param angle1 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 * @param angle2 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 *
+	 * @return distancia entre los �ngulos
+	 */
+	public static double angleDistance(double angle1, double angle2) {
+		if (angle1 < angle2) {
+			return angle2 - angle1;
+		} else {
+			return ((Math.PI * 2) - angle1) + angle2;
+		}
+	}
+	/**
+	 * Devuelve el punto de la recta que viene dada por los puntos p1 y p2 a
+	 * una distancia radio de p1.
+	 *
+	 * @param p1 DOCUMENT ME!
+	 * @param p2 DOCUMENT ME!
+	 * @param radio DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static Point2D getPoint(Point2D p1, Point2D p2, double radio) {
+		Point2D paux = new Point2D.Double(p2.getX() - p1.getX(),
+				p2.getY() - p1.getY());
+		double v = Math.sqrt(Math.pow(paux.getX(), 2d) +
+				Math.pow(paux.getY(), 2d));
+		paux = new Point2D.Double(paux.getX() / v, paux.getY() / v);
+
+		Point2D aux1 = new Point2D.Double(p1.getX() + (radio * paux.getX()),
+				p1.getY() + (radio * paux.getY()));
+
+		return aux1;
+	}
+	/**
+	 * Devuelve la menor distancia desde angle1 a angle2.
+	 *
+	 * @param angle1 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 * @param angle2 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 *
+	 * @return distancia entre los �ngulos
+	 */
+	public static double absoluteAngleDistance(double angle1, double angle2) {
+		double d = Math.abs(angle1 - angle2);
+
+		if (d < Math.PI) {
+			return d;
+		} else {
+			if (angle1 < angle2) {
+				angle2 -= (Math.PI * 2);
+			} else {
+				angle1 -= (Math.PI * 2);
+			}
+
+			return Math.abs(angle1 - angle2);
+		}
+	}
+	/**
+	 * Obtiene un arco a partir de 3 puntos. Devuelve null si no se puede crear
+	 * el arco porque los puntos est�n alineados o los 3 puntos no son
+	 * distintos
+	 *
+	 * @param p1
+	 * @param p2
+	 * @param p3
+	 *
+	 * @return Arco
+	 */
+	public static Arc2D createArc(Point2D p1, Point2D p2, Point2D p3) {
+		Point2D center = getCenter(p1, p2, p3);
+
+		double angle1;
+		double angle2;
+		double extent;
+
+		if (center == null) {
+			if (p1.equals(p3) && !p2.equals(p1)) {
+				//Si los puntos p1 y p3 son los mismos (pero el p2 no),
+				//consideramos que el arco es una circunferencia completa
+				center = new Point2D.Double((p1.getX() + p2.getX()) / 2,
+							(p1.getY() + p2.getY()) / 2);
+				angle1 = getAngle(center, p1);
+				extent = Math.PI*2;
+			} else {
+				//en cualquier otro caso, no podemos crear el arco.
+				return null;
+			}
+		} else {
+                    angle1 = getAngle(center, p1);
+                    angle2 = getAngle(center, p3);
+                    extent = angleDistance(angle1, angle2);
+
+                    try {
+                        GeometryManager manager = GeometryLocator.getGeometryManager();
+                        Curve line = manager.createCurve(Geometry.SUBTYPES.GEOM2D);
+                        line.addVertex(p1.getX(), p1.getY());
+                        line.addVertex(p2.getX(), p2.getY());
+                        line.addVertex(p3.getX(), p3.getY());
+                        line.addVertex(p1.getX(), p1.getY());
+                        if( line.isCCW() ) {
+                            extent = (Math.PI * 2) - extent;
+                        } else {
+                            extent = -extent;
+                        }
+                    } catch (Exception ex) {
+                        logger.warn("Can't determine CCW of the Arc",ex);
+                        extent = -extent;
+                    }
+		}
+		//System.err.println("angle1:" + angle1);
+		//System.err.println("angle2:" + getAngle(center, p2));
+		//System.err.println("angle3:" + angle2);
+		//System.err.println("extent:" + extent);
+		double Radio = p1.distance(center);
+		double xR = center.getX() - Radio;
+		double yR = center.getY() - Radio;
+		double w = 2.0 * Radio;
+		double h = w;
+
+		Rectangle2D.Double rBounds = new Rectangle2D.Double(xR, yR, w, h);
+		Arc2D.Double resul = new Arc2D.Double(rBounds,
+				Math.toDegrees((Math.PI * 2) - angle1), Math.toDegrees(extent),
+				Arc2D.OPEN);
+
+		return resul;
+	}
+
+	/**
+	 * Obtiene un arco a partir del centro, radio, angulo inicial y extension del angulo.
+	 * Devuelve null si no lo puede crear.
+	 *
+	 * @param center
+	 * @param radius
+	 * @param angSt en radianes
+	 * @param angExt en radianes
+	 *
+	 * @return Arco
+	 */
+	public static Arc2D createArc(Point2D center, double radius, double angSt, double angExt) {
+		double xR = center.getX() - radius;
+		double yR = center.getY() - radius;
+		double w = 2.0 * radius;
+		double h = w;
+
+		Rectangle2D.Double rBounds = new Rectangle2D.Double(xR, yR, w, h);
+		Arc2D.Double resul = new Arc2D.Double(rBounds,
+				Math.toDegrees((Math.PI * 2) - angSt), Math.toDegrees(angExt),
+				Arc2D.OPEN);
+
+		return resul;
+	}
+
+	/**
+	 * Obtiene un arco a partir del
+	 *  centro del arco y punto inicio y punto final
+	 *  Suponemos un Arco definicio CCW (CounterClockWise)
+	 * @param center
+	 * @param init
+	 * @param end
+	 *
+	 * @return Arco
+	 */
+	public static Arc2D createArc2points(Point2D center, Point2D init, Point2D end) {
+
+		double angle1 = getAngle(center, init);
+		double angle2 = getAngle(center, end);
+		double extent = angleDistance(angle1, angle2);
+
+		extent = -extent; // CCW
+
+		//System.err.println("angle1:" + angle1);
+		//System.err.println("angle2:" + getAngle(center, p2));
+		//System.err.println("angle3:" + angle2);
+		//System.err.println("extent:" + extent);
+		double Radio = init.distance(center);
+		double xR = center.getX() - Radio;
+		double yR = center.getY() - Radio;
+		double w = 2.0 * Radio;
+		double h = w;
+
+		Rectangle2D.Double rBounds = new Rectangle2D.Double(xR, yR, w, h);
+		Arc2D.Double resul = new Arc2D.Double(rBounds,
+				Math.toDegrees((Math.PI * 2) - angle1), Math.toDegrees(extent),
+				Arc2D.OPEN);
+
+		return resul;
+	}
+
+	/**
+	 * Devuelve el punto a una distancia radio del punto p1 y aplicandole un �ngulo an.
+	 * una distancia radio de p1.
+	 *
+	 * @param p1 DOCUMENT ME!
+	 * @param p2 DOCUMENT ME!
+	 * @param radio DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static Point2D getPoint(Point2D p1, double an, double radio) {
+		double x=(radio*Math.cos(an))+p1.getX();
+		double y=(radio*Math.sin(an))+p1.getY();
+
+		Point2D p=new Point2D.Double(x,y);
+
+		return p;
+	}
+
+	/**
+	 * Obtiene una linea a partir de dos puntos.
+	 * Devuelve null si no lo puede crear.
+	 *
+	 * @param start
+	 * @param end
+	 *
+	 * @return Linea
+	 */
+	public static Line2D createLine(Point2D start, Point2D end) {
+		return new Line2D.Double(start, end);
+
+	}
+
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param antp DOCUMENT ME!
+	 * @param lastp DOCUMENT ME!
+	 * @param interp DOCUMENT ME!
+	 * @param point DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static boolean isLowAngle(Point2D antp, Point2D lastp,
+		Point2D interp, Point2D point) {
+		///double ob=lastp.distance(point);
+		///Point2D[] aux=getPerpendicular(lastp,interp,point);
+		///Point2D intersect=getIntersection(aux[0],aux[1],lastp,interp);
+		///double pb=intersect.distance(point);
+		///double a=Math.asin(pb/ob);
+            
+                boolean isCCW = true;
+                try {
+                    GeometryManager manager = GeometryLocator.getGeometryManager();
+                    Curve line;
+                    line = manager.createCurve(Geometry.SUBTYPES.GEOM2D);
+                    line.addVertex(lastp.getX(), lastp.getY());
+                    line.addVertex(interp.getX(), interp.getY());
+                    line.addVertex(point.getX(), point.getY());
+                    line.addVertex(lastp.getX(), lastp.getY());
+                    isCCW = line.isCCW();
+                } catch (Exception ex) {
+                    logger.warn("Can't determine CCW of angle.",ex);
+                }
+
+		try {
+			double angle1 = getAngle(antp, lastp);
+			// System.out.println("angle1= " + angle1);
+
+			double angle2 = getAngle(lastp, point);
+			// System.out.println("angle2= " + angle2);
+
+			/*if (lastp.getX()<antp.getX()){
+			   System.out.println("angleDiff 2 1= "+angleDistance(angle2,angle1));
+			   System.out.println("angleDiff 1 2= "+angleDistance(angle1,angle2));
+			   if (angleDistance(angle2,angle1)>Math.PI){
+
+			   if (RobustCGAlgorithms.isCCW(coords)) {
+			           System.out.println("izquierda,arriba,true");
+			           return true;
+			   } else{
+			           System.out.println("izquierda,arriba,false");
+			   }
+			   }else {
+			           if (!RobustCGAlgorithms.isCCW(coords)) {
+			                   System.out.println("izquierda,abajo,true");
+			                   return true;
+			           } else{
+			                   System.out.println("izquierda,abajo,false");
+			           }
+			   }
+			   }else if (lastp.getX()>antp.getX()){
+			 */
+			
+			/*
+			System.out.println("angleDifl 2 1= " +
+				angleDistance(angle2, angle1));
+			System.out.println("angleDifl 1 2= " +
+				angleDistance(angle1, angle2));
+			*/
+
+			if (angleDistance(angle2, angle1) > Math.PI) {
+				if (isCCW) {
+					// System.out.println("derecha,arriba,true");
+
+					return true;
+				} else {
+					// System.out.println("derecha,arriba,false");
+				}
+			} else {
+				if (!isCCW) {
+					// System.out.println("derecha,abajo,true");
+
+					return true;
+				} else {
+				    // System.out.println("derecha,abajo,false");
+				}
+			}
+
+			//}
+		} catch (Exception e) {
+			// System.out.println("false");
+
+			return true;
+		}
+
+		return false;
+	}
+
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/UtilFunctions.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/Converter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/Converter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/Converter.java	(revision 42196)
@@ -0,0 +1,1828 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.util;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Area;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Rectangle2D;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.algorithm.RobustCGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.MultiLineString;
+import com.vividsolutions.jts.geom.MultiPolygon;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.Polygon;
+
+/**
+ * Clase con varios metodos estaticos utilizados para pasar de java2d a jts
+ * y viceversa.
+ *
+ * @author fjp
+ * @deprecated to be removed or moved from API to implementation in gvSIG 2.1.0
+ */
+public class Converter {
+
+    private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private static final Logger logger = LoggerFactory.getLogger(Converter.class);
+    public final static com.vividsolutions.jts.geom.GeometryFactory geomFactory = new com.vividsolutions.jts.geom.GeometryFactory();
+    public static CGAlgorithms cga = new RobustCGAlgorithms();
+
+    private static GeometryManager manager = GeometryLocator.getGeometryManager();
+
+    //returns true if testPoint is a point in the pointList list.
+    static boolean pointInList(Coordinate testPoint, Coordinate[] pointList) {
+        int t;
+        int numpoints;
+        Coordinate p;
+
+        numpoints = Array.getLength(pointList);
+
+        for ( t = 0; t < numpoints; t++ ) {
+            p = pointList[t];
+
+            if ( (testPoint.x == p.x) && (testPoint.y == p.y)
+                    && ((testPoint.z == p.z) || (!(testPoint.z == testPoint.z))) //nan test; x!=x iff x is nan
+                    ) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Receives a JTS Geometry and returns a DAL Geometry
+     *
+     * @param jtsGeometry jts Geometry
+     * @return IGeometry of FMap
+     * @author azabala
+     * @throws CreateGeometryException
+     */
+    public static Geometry jtsToGeometry(com.vividsolutions.jts.geom.Geometry geo) throws CreateGeometryException {
+        Geometry shpNew = null;
+
+        try {
+            if ( geo instanceof Point ) {
+                shpNew = geomManager.createPoint(((Point) geo).getX(), ((Point) geo).getY(), SUBTYPES.GEOM2D);
+            }
+
+            if ( geo.isEmpty() ) {
+                shpNew = null;
+            }
+
+            try {
+                if ( geo instanceof com.vividsolutions.jts.geom.MultiPoint ) {
+                    shpNew = geomManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+                    for ( int i = 0; i < geo.getNumGeometries(); i++ ) {
+                        Point point = (Point) geo.getGeometryN(i);
+                        ((MultiPoint) shpNew).addPoint((org.gvsig.fmap.geom.primitive.Point) jtsToGeometry(point));
+                    }
+
+                }
+
+                if ( geo instanceof Polygon ) {
+                    shpNew = geomManager.createSurface(toShape((Polygon) geo), SUBTYPES.GEOM2D);
+                }
+
+                if ( geo instanceof MultiPolygon ) {
+                    /*
+                     * We need a loop because a global path would not
+                     * differentiate between move-to inside a polygon (holes)
+                     * and move-to from one polygon to another
+                     */
+                    MultiSurface msu = geomManager.createMultiSurface(SUBTYPES.GEOM2D);
+                    MultiPolygon mpo = (MultiPolygon) geo;
+                    Surface itemsu = null;
+                    int npo = mpo.getNumGeometries();
+                    for ( int i = 0; i < npo; i++ ) {
+                        itemsu = geomManager.createSurface(
+                                toShape((Polygon) mpo.getGeometryN(i)), SUBTYPES.GEOM2D);
+                        msu.addPrimitive(itemsu);
+                    }
+                    shpNew = msu;
+                }
+
+                if ( geo instanceof LineString ) {
+                    shpNew = geomManager.createCurve(toShape((LineString) geo), SUBTYPES.GEOM2D);
+                }
+
+                if ( geo instanceof MultiLineString ) {
+                    shpNew = geomManager.create(TYPES.MULTICURVE, SUBTYPES.GEOM2D);
+                    for ( int i = 0; i < ((MultiLineString) geo).getNumGeometries(); i++ ) {
+                        com.vividsolutions.jts.geom.Geometry g = ((MultiLineString) geo).getGeometryN(i);
+                        Curve c = geomManager.createCurve(toShape((LineString) g), SUBTYPES.GEOM2D);
+                        ((MultiCurve) shpNew).addCurve(c);
+                    }
+                }
+            } catch (CreateGeometryException e) {
+                logger.error("Error creating a geometry", e);
+            }
+
+            return shpNew;
+        } catch (NoninvertibleTransformException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * Convierte un MultiPoint2D a un MultiPoint de JTS
+     *
+     * @param geom
+     * @return
+     */
+    public static com.vividsolutions.jts.geom.Geometry geometryToJts(MultiPoint geom) {
+        Coordinate[] theGeoms = new Coordinate[geom.getPrimitivesNumber()];
+        for ( int i = 0; i < theGeoms.length; i++ ) {
+            java.awt.geom.Point2D p = geom.getPrimitiveAt(i)
+                    .getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
+            Coordinate c = new Coordinate(p.getX(), p.getY());
+            theGeoms[i] = c;
+        }
+        com.vividsolutions.jts.geom.MultiPoint geomCol
+                = new com.vividsolutions.jts.geom.GeometryFactory().createMultiPoint(theGeoms);
+        return geomCol;
+    }
+
+    /**
+     * Convierte una MultiCurve2D en una MultiLineString de JTS
+     *
+     * @param geom
+     * @return
+     */
+    public static com.vividsolutions.jts.geom.Geometry geometryToJts(MultiCurve geom) {
+        LineString[] lines = new LineString[geom.getPrimitivesNumber()];
+        for ( int i = 0; i < lines.length; i++ ) {
+            lines[i] = (LineString) geometryToJts((geom.getPrimitiveAt(i)));
+        }
+        return new com.vividsolutions.jts.geom.GeometryFactory().createMultiLineString(lines);
+    }
+
+    public static com.vividsolutions.jts.geom.Geometry multiCurveToJts(MultiCurve geom, int srid) {
+        LineString[] lines = new LineString[geom.getPrimitivesNumber()];
+        for ( int i = 0; i < lines.length; i++ ) {
+            lines[i] = (LineString) curveToJts((geom.getPrimitiveAt(i)), srid);
+        }
+        return new com.vividsolutions.jts.geom.GeometryFactory().createMultiLineString(lines);
+    }
+
+    /**
+     * Convierte una MultiSurface2D en un MultiPolygon de JTS
+     *
+     * @return
+     */
+    public static com.vividsolutions.jts.geom.Geometry geometryToJts(MultiSurface geom) {
+        Polygon[] polygons = new Polygon[geom.getPrimitivesNumber()];
+        for ( int i = 0; i < polygons.length; i++ ) {
+            polygons[i] = (Polygon) geometryToJts((geom.getPrimitiveAt(i)));
+        }
+        return new com.vividsolutions.jts.geom.GeometryFactory().createMultiPolygon(polygons);
+    }
+
+    /**
+     * Convierte una BaseMultiPrimitive en una GeometryCollection de JTS
+     *
+     * @return
+     */
+    public com.vividsolutions.jts.geom.Geometry geometryToJts(MultiPrimitive geom) {
+        com.vividsolutions.jts.geom.Geometry[] geometriesAux = new LineString[geom.getPrimitivesNumber()];
+        for ( int i = 0; i < geometriesAux.length; i++ ) {
+            geometriesAux[i] = geometryToJts((geom.getPrimitiveAt(i)));
+        }
+        return new com.vividsolutions.jts.geom.GeometryFactory().createGeometryCollection(geometriesAux);
+    }
+
+    public static com.vividsolutions.jts.geom.Geometry geometryToJtsWithSRID(Geometry geom, int srid) {
+        return geometryToJts(geom, geom.getType(), srid);
+    }
+
+    public static com.vividsolutions.jts.geom.Geometry geometryToJtsWithSRIDForcingType(Geometry geom, int srid, int type) {
+        return geometryToJts(geom, type, srid);
+    }
+
+    public static com.vividsolutions.jts.geom.Geometry geometryToJts(Geometry geom) {
+        return geometryToJts(geom, geom.getType(), -1);
+    }
+
+    private static boolean isClosed(Coordinate firstCoordinate, Coordinate lastCoordinate) {
+        double diff = Math.abs(lastCoordinate.x - firstCoordinate.x);
+        if ( diff > 0.000001 ) {
+            return false;
+        }
+        diff = Math.abs(lastCoordinate.y - firstCoordinate.y);
+        if ( diff > 0.000001 ) {
+            return false;
+        }
+        return true;
+    }
+
+    private static com.vividsolutions.jts.geom.Geometry curveToJts(Geometry shp, int srid) {
+        ArrayList arrayLines;
+        LineString lin = null;
+        int theType;
+        int numParts = 0;
+        double[] dataLine = new double[3];
+        double[] dataQuad = new double[3];
+        double[] dataCubic = new double[3];
+        ArrayList arrayCoords = null;
+        Coordinate coord;
+        int subType = shp.getGeometryType().getSubType();
+        boolean is3D = subType == 1 || subType == 3;
+
+        arrayLines = new ArrayList();
+
+		//El pathIterator no tiene en cuenta coordenadas 3D, por lo que de usar este, las Z's se perder�n
+        //Las splines vienen con todos los puntos calculados por lo que no es necesario un 
+        //iterador que interpole. Por esto obtenemos el mismo resultado recorriendo los puntos.
+        //Tiene su riesgo pero hasta que se soporte el 3D en el iterador funciona para todos los casos
+        //theIterator = pol.getPathIterator(null, manager.getFlatness());
+        GeneralPathX gp = shp.getGeneralPath();
+
+        //while (!theIterator.isDone()) {
+        int nPoint = 0;
+        for ( int nType = 0; nType < gp.getNumTypes(); nType++ ) {
+            theType = gp.getTypeAt(nType);
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+            case PathIterator.SEG_LINETO: //Se lee un punto
+                dataLine = gp.get3DCoordinatesAt(nPoint);
+                nPoint++;
+                break;
+            case PathIterator.SEG_QUADTO: //Se leen dos puntos
+                dataLine = gp.get3DCoordinatesAt(nPoint);
+                dataQuad = gp.get3DCoordinatesAt(nPoint + 1);
+                nPoint += 2;
+                break;
+            case PathIterator.SEG_CUBICTO: //Se leen tres puntos
+                dataLine = gp.get3DCoordinatesAt(nPoint);
+                dataQuad = gp.get3DCoordinatesAt(nPoint + 1);
+                dataCubic = gp.get3DCoordinatesAt(nPoint + 2);
+                nPoint += 3;
+                break;
+            }
+
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                if ( arrayCoords == null ) {
+                    arrayCoords = new ArrayList();
+                } else {
+                    lin = geomFactory.createLineString(
+                            CoordinateArrays.toCoordinateArray(arrayCoords));
+                    lin.setSRID(srid);
+                    arrayLines.add(lin);
+                    arrayCoords = new ArrayList();
+                }
+
+                numParts++;
+                if ( is3D ) {
+                    coord = new Coordinate(dataLine[0], dataLine[1], dataLine[2]);
+                } else {
+                    coord = new Coordinate(dataLine[0], dataLine[1]);
+                }
+
+                arrayCoords.add(coord);
+                break;
+
+            case PathIterator.SEG_LINETO:
+                loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                loadArrayCoordinates(arrayCoords, is3D, dataQuad);
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                loadArrayCoordinates(arrayCoords, is3D, dataQuad);
+                loadArrayCoordinates(arrayCoords, is3D, dataCubic);
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+                loadArrayCoordinates(arrayCoords, is3D, new double[]{firstCoord.x, firstCoord.y, firstCoord.z});
+                break;
+            } //end switch
+
+            //theIterator.next();
+        } //end while loop
+
+        if ( arrayCoords.size() < 2 ) {
+
+        } else {
+            lin = new com.vividsolutions.jts.geom.GeometryFactory().createLineString(
+                    CoordinateArrays.toCoordinateArray(arrayCoords));
+            lin.setSRID(srid);
+        }
+
+        return lin;
+    }
+
+    /**
+     * Convierte un Geometry de DAL a una Geometry del JTS. Para ello,
+     * utilizamos un
+     * flattened PathIterator. El flattened indica que las curvas las pasa a
+     * segmentos de linea recta AUTOMATICAMENTE!!!.
+     *
+     * @param shp FShape que se quiere convertir.
+     *
+     * @return Geometry de JTS.
+     */
+    private static com.vividsolutions.jts.geom.Geometry geometryToJts(
+            Geometry shp, int destinationType, int srid) {
+        com.vividsolutions.jts.geom.Geometry geoJTS = null;
+        Coordinate coord;
+        ArrayList arrayCoords = null;
+        ArrayList arrayLines;
+        LineString lin;
+        int theType;
+        int numParts = 0;
+        int sourceType = shp.getGeometryType().getType();
+        int subType = shp.getGeometryType().getSubType();
+        boolean is3D = subType == 1 || subType == 3;
+
+        //Use this array to store segment coordinate data
+        double[] dataLine = new double[3];
+        double[] dataQuad = new double[3];
+        double[] dataCubic = new double[3];
+
+        switch (sourceType) {
+        case Geometry.TYPES.POINT:
+            if ( is3D ) {
+                org.gvsig.fmap.geom.generalpath.primitive.point.Point2DZ p = (org.gvsig.fmap.geom.generalpath.primitive.point.Point2DZ) shp;
+                coord = new Coordinate(p.getX(), p.getY(), p.getCoordinateAt(Geometry.DIMENSIONS.Z));
+            } else {
+                org.gvsig.fmap.geom.generalpath.primitive.point.Point2D p = (org.gvsig.fmap.geom.generalpath.primitive.point.Point2D) shp;
+                coord = new Coordinate(p.getX(), p.getY());
+            }
+            geoJTS = geomFactory.createPoint(coord);
+            geoJTS.setSRID(srid);
+            break;
+
+        case Geometry.TYPES.CURVE:
+        case Geometry.TYPES.ARC:
+        case Geometry.TYPES.SPLINE:
+        case Geometry.TYPES.ELLIPTICARC:
+
+            arrayLines = new ArrayList();
+
+			//El pathIterator no tiene en cuenta coordenadas 3D, por lo que de usar este, las Z's se perder�n
+            //Las splines vienen con todos los puntos calculados por lo que no es necesario un 
+            //iterador que interpole. Por esto obtenemos el mismo resultado recorriendo los puntos.
+            //Tiene su riesgo pero hasta que se soporte el 3D en el iterador funciona para todos los casos
+            //theIterator = pol.getPathIterator(null, manager.getFlatness());
+            GeneralPathX gp = shp.getGeneralPath();
+
+            //while (!theIterator.isDone()) {
+            int nPoint = 0;
+            for ( int nType = 0; nType < gp.getNumTypes(); nType++ ) {
+                theType = gp.getTypeAt(nType);
+                switch (theType) {
+                case PathIterator.SEG_MOVETO:
+                case PathIterator.SEG_LINETO: //Se lee un punto
+                    dataLine = gp.get3DCoordinatesAt(nPoint);
+                    nPoint++;
+                    break;
+                case PathIterator.SEG_QUADTO: //Se leen dos puntos
+                    dataLine = gp.get3DCoordinatesAt(nPoint);
+                    dataQuad = gp.get3DCoordinatesAt(nPoint + 1);
+                    nPoint += 2;
+                    break;
+                case PathIterator.SEG_CUBICTO: //Se leen tres puntos
+                    dataLine = gp.get3DCoordinatesAt(nPoint);
+                    dataQuad = gp.get3DCoordinatesAt(nPoint + 1);
+                    dataCubic = gp.get3DCoordinatesAt(nPoint + 2);
+                    nPoint += 3;
+                    break;
+                }
+
+		// Populate a segment of the new GeneralPathX object.
+                // Process the current segment to populate a new
+                // segment of the new GeneralPathX object.
+                switch (theType) {
+                case PathIterator.SEG_MOVETO:
+                    if ( arrayCoords == null ) {
+                        arrayCoords = new ArrayList();
+                    } else {
+                        lin = geomFactory.createLineString(CoordinateArrays.toCoordinateArray(arrayCoords));
+                        lin.setSRID(srid);
+                        arrayLines.add(lin);
+                        arrayCoords = new ArrayList();
+                    }
+
+                    numParts++;
+                    if ( is3D ) {
+                        coord = new Coordinate(dataLine[0], dataLine[1], dataLine[2]);
+                    } else {
+                        coord = new Coordinate(dataLine[0], dataLine[1]);
+                    }
+
+                    arrayCoords.add(coord);
+                    break;
+
+                case PathIterator.SEG_LINETO:
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    break;
+
+                case PathIterator.SEG_QUADTO:
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    loadArrayCoordinates(arrayCoords, is3D, dataQuad);
+                    break;
+
+                case PathIterator.SEG_CUBICTO:
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    loadArrayCoordinates(arrayCoords, is3D, dataQuad);
+                    loadArrayCoordinates(arrayCoords, is3D, dataCubic);
+                    break;
+
+                case PathIterator.SEG_CLOSE:
+                    Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+                    loadArrayCoordinates(arrayCoords, is3D, new double[]{firstCoord.x, firstCoord.y, firstCoord.z});
+                    break;
+                } //end switch
+
+                //theIterator.next();
+            } //end while loop
+
+            if ( arrayCoords.size() < 2 ) {
+                break;
+            }
+            lin = new com.vividsolutions.jts.geom.GeometryFactory().createLineString(
+                    CoordinateArrays.toCoordinateArray(arrayCoords));
+
+            lin.setSRID(srid);
+            geoJTS = lin;
+
+            /*
+             * We were creating always a multilinestring here, but
+             * we have decided that we should return the correct type
+             * (linestring) and other parts of the application will have
+             * to solve the problem, it there is a problem with this.
+             * 
+             arrayLines.add(lin);
+             geoJTS = geomFactory.createMultiLineString(
+             com.vividsolutions.jts.geom.GeometryFactory.toLineStringArray(arrayLines));
+             geoJTS.setSRID(srid);
+             */
+            break;
+
+        case Geometry.TYPES.SURFACE:
+        case Geometry.TYPES.CIRCLE:
+        case Geometry.TYPES.ELLIPSE:
+            arrayLines = new ArrayList();
+
+            ArrayList shells = new ArrayList();
+            ArrayList holes = new ArrayList();
+            Coordinate[] points = null;
+
+            //El pathIterator no tiene en cuenta coordenadas 3D, pero para la creaci�n de elipses y circulos
+            //es necesario el iterador que interpole puntos. El resultado es que en la creaci�n de geometr�as de este
+            //tipo no se puede asignar la Z porque se perder�a, pero gvSIG tampoco dispone de esta funci�n, as� que
+            //no se nota. Una vez creadas las geometr�a de tipo Elipse y circulo cuando las editamos ya tendr�n todos
+            //los puntos calculados y se toman como l�neas por lo que ya se podr�a asignar la Z.
+            PathIterator theIterator = shp.getPathIterator(null, manager.getFlatness());
+            while ( !theIterator.isDone() ) {
+                theType = theIterator.currentSegment(dataLine);
+
+                switch (theType) {
+                case PathIterator.SEG_MOVETO:
+                    if ( arrayCoords == null ) {
+                        arrayCoords = new ArrayList();
+                    } else {
+                        points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+                        try {
+                            LinearRing ring = geomFactory.createLinearRing(points);
+
+                            if ( CGAlgorithms.isCCW(points) ) {
+                                holes.add(ring);
+                            } else {
+                                shells.add(ring);
+                            }
+                        } catch (Exception e) {
+                            logger.warn("Caught Topology exception in GMLLinearRingHandler",e);
+                            boolean same = true;
+                            for ( int i = 0; i < points.length - 1 && same; i++ ) {
+                                if ( points[i].x != points[i + 1].x
+                                        || points[i].y != points[i + 1].y /*||
+                                         points[i].z != points[i+1].z*/ ) {
+                                    same = false;
+                                }
+                            }
+                            if ( same ) {
+                                return geomFactory.createPoint(points[0]);
+                            }
+                            if ( points.length > 1 && points.length <= 3 ) {
+                                // return geomFactory.createLineString(points);
+                                return geomFactory.createMultiLineString(new LineString[]{geomFactory.createLineString(points)});
+                            }
+                            return null;
+                        }
+                        arrayCoords = new ArrayList();
+                    }
+
+                    numParts++;
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    break;
+
+                case PathIterator.SEG_LINETO:
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    break;
+
+                case PathIterator.SEG_QUADTO:
+                    break;
+
+                case PathIterator.SEG_CUBICTO:
+                    break;
+
+                case PathIterator.SEG_CLOSE:
+                    Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+                    loadArrayCoordinates(arrayCoords, is3D, new double[]{firstCoord.x, firstCoord.y, firstCoord.z});
+                    break;
+                } //end switch
+
+                theIterator.next();
+            } //end while loop
+
+            Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+            Coordinate lastCoord = (Coordinate) arrayCoords.get(arrayCoords.size() - 1);
+            if ( !isClosed(firstCoord, lastCoord) ) {
+                arrayCoords.add(firstCoord);
+            }
+            points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+            try {
+                LinearRing ring = geomFactory.createLinearRing(points);
+
+                if ( CGAlgorithms.isCCW(points) ) {
+                    holes.add(ring);
+                } else {
+                    shells.add(ring);
+                }
+                ring.setSRID(srid);
+            } catch (Exception e) {
+                logger.warn("Caught Topology exception in GMLLinearRingHandler",e);
+                boolean same = true;
+                for ( int i = 0; i < points.length - 1 && same; i++ ) {
+                    if ( points[i].x != points[i + 1].x
+                            || points[i].y != points[i + 1].y /*||
+                             points[i].z != points[i+1].z*/ ) {
+                        same = false;
+                    }
+                }
+                if ( same ) {
+                    geoJTS = geomFactory.createPoint(points[0]);
+                    geoJTS.setSRID(srid);
+                    return geoJTS;
+                }
+                /*
+                 * caso cuando es una linea de 3 puntos, no creo un LinearRing, sino
+                 * una linea
+                 */
+                if ( points.length > 1 && points.length <= 3 ) {
+                    // return geomFactory.createLineString(points);
+                    geoJTS = geomFactory.createMultiLineString(new LineString[]{geomFactory.createLineString(points)});
+                    geoJTS.setSRID(srid);
+                    return geoJTS;
+                }
+                return null;
+            }
+
+            /* linRing = new GeometryFactory().createLinearRing(
+             CoordinateArrays.toCoordinateArray(arrayCoords)); */
+			// System.out.println("NumParts = " + numParts);
+            //now we have a list of all shells and all holes
+            ArrayList holesForShells = new ArrayList(shells.size());
+
+            for ( int i = 0; i < shells.size(); i++ ) {
+                holesForShells.add(new ArrayList());
+            }
+
+            //find homes
+            for ( int i = 0; i < holes.size(); i++ ) {
+                LinearRing testRing = (LinearRing) holes.get(i);
+                LinearRing minShell = null;
+                Envelope minEnv = null;
+                Envelope testEnv = testRing.getEnvelopeInternal();
+                Coordinate testPt = testRing.getCoordinateN(0);
+                LinearRing tryRing = null;
+
+                for ( int j = 0; j < shells.size(); j++ ) {
+                    tryRing = (LinearRing) shells.get(j);
+
+                    Envelope tryEnv = tryRing.getEnvelopeInternal();
+
+                    if ( minShell != null ) {
+                        minEnv = minShell.getEnvelopeInternal();
+                    }
+
+                    boolean isContained = false;
+                    Coordinate[] coordList = tryRing.getCoordinates();
+
+                    if ( tryEnv.contains(testEnv)
+                            && (CGAlgorithms.isPointInRing(testPt, coordList)
+                            || (pointInList(testPt, coordList))) ) {
+                        isContained = true;
+                    }
+
+                    // check if this new containing ring is smaller than the current minimum ring
+                    if ( isContained ) {
+                        if ( (minShell == null) || minEnv.contains(tryEnv) ) {
+                            minShell = tryRing;
+                        }
+                    }
+                }
+
+                if ( minShell == null ) {
+                    // System.out.println(
+                    // polygon found with a hole thats not inside a shell);
+                    // azabala: we do the assumption that this hole is really a shell (polygon)
+                    // whose point werent digitized in the right order
+                    Coordinate[] cs = testRing.getCoordinates();
+                    Coordinate[] reversed = new Coordinate[cs.length];
+                    int pointIndex = 0;
+                    for ( int z = cs.length - 1; z >= 0; z-- ) {
+                        reversed[pointIndex] = cs[z];
+                        pointIndex++;
+                    }
+                    LinearRing newRing = geomFactory.createLinearRing(reversed);
+                    shells.add(newRing);
+                    holesForShells.add(new ArrayList());
+                } else {
+                    ((ArrayList) holesForShells.get(shells.indexOf(minShell))).add(testRing);
+                }
+            }
+
+            Polygon[] polygons = new Polygon[shells.size()];
+
+            for ( int i = 0; i < shells.size(); i++ ) {
+                polygons[i] = geomFactory.createPolygon(
+                        (LinearRing) shells.get(i),
+                        (LinearRing[]) ((ArrayList) holesForShells.get(i)).toArray(new LinearRing[0]));
+                polygons[i].setSRID(srid);
+            }
+            holesForShells = null;
+            shells = null;
+            holes = null;
+
+            if ( polygons.length == 1 ) {
+                geoJTS = polygons[0];
+            } else {
+                // its a multi part
+                geoJTS = geomFactory.createMultiPolygon(polygons);
+            }
+            geoJTS.setSRID(srid);
+            break;
+
+        case Geometry.TYPES.MULTICURVE:
+            geoJTS = multiCurveToJts((MultiCurve) shp, srid);
+            geoJTS.setSRID(srid);
+            break;
+
+        case Geometry.TYPES.MULTIPOINT:
+            geoJTS = geometryToJts((MultiPoint) shp);
+            geoJTS.setSRID(srid);
+            break;
+
+        case Geometry.TYPES.MULTISURFACE:
+            geoJTS = multiSurfaceToJts((MultiSurface) shp, srid);
+            geoJTS.setSRID(srid);
+            break;
+        }
+
+        if ( destinationType != sourceType ) {
+            geoJTS = convertTypes(geoJTS, sourceType, destinationType);
+        }
+
+        geoJTS.setSRID(srid);
+        return geoJTS;
+    }
+
+    /**
+     * This function is called when the we need force types, that is the
+     * destination
+     * type does not match with the input geometry type
+     *
+     * @param g
+     * @param sourceType
+     * @param destinationType
+     * @return
+     */
+    private static com.vividsolutions.jts.geom.Geometry convertTypes(
+            com.vividsolutions.jts.geom.Geometry g,
+            int sourceType,
+            int destinationType) {
+        if ( (sourceType == Geometry.TYPES.CURVE
+                || sourceType == Geometry.TYPES.SPLINE
+                || sourceType == Geometry.TYPES.ARC
+                || sourceType == Geometry.TYPES.ELLIPTICARC)
+                && destinationType == Geometry.TYPES.MULTISURFACE ) {
+            if ( g instanceof MultiLineString ) {
+                Polygon[] poly = new Polygon[((MultiLineString) g).getNumGeometries()];
+                for ( int i = 0; i < ((MultiLineString) g).getNumGeometries(); i++ ) {
+                    com.vividsolutions.jts.geom.Geometry lineString = ((MultiLineString) g).getGeometryN(i);
+                    poly[i] = convertLineStringToPolygon((LineString) lineString);
+                }
+                return geomFactory.createMultiPolygon(poly);
+            } else {
+                return convertLineStringToPolygon((LineString) g);
+            }
+        }
+
+        if ( (sourceType == Geometry.TYPES.CIRCLE
+                || sourceType == Geometry.TYPES.ELLIPSE)
+                && destinationType == Geometry.TYPES.MULTICURVE ) {
+            if ( g instanceof Polygon ) {
+                Polygon poly = (Polygon) g;
+                LineString lineString = geomFactory.createLinearRing(poly.getCoordinates());
+                return geomFactory.createMultiLineString(new LineString[]{lineString});
+            }
+        }
+        return g;
+    }
+
+    private static com.vividsolutions.jts.geom.Polygon convertLineStringToPolygon(LineString line) {
+        Coordinate[] coordinates = line.getCoordinates();
+        LinearRing shell = geomFactory.createLinearRing(coordinates);
+        Polygon pol = geomFactory.createPolygon(shell, null);
+        return pol;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param p DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private static GeneralPathX toShape(Polygon p) {
+        GeneralPathX resul = new GeneralPathX();
+        Coordinate coord;
+
+        for ( int i = 0; i < p.getExteriorRing().getNumPoints(); i++ ) {
+            coord = p.getExteriorRing().getCoordinateN(i);
+
+            if ( i == 0 ) {
+                resul.moveTo(coord.x, coord.y);
+            } else {
+                resul.lineTo(coord.x, coord.y);
+            }
+        }
+
+        for ( int j = 0; j < p.getNumInteriorRing(); j++ ) {
+            LineString hole = p.getInteriorRingN(j);
+
+            for ( int k = 0; k < hole.getNumPoints(); k++ ) {
+                coord = hole.getCoordinateN(k);
+
+                if ( k == 0 ) {
+                    resul.moveTo(coord.x, coord.y);
+                } else {
+                    resul.lineTo(coord.x, coord.y);
+                }
+            }
+        }
+
+        return resul;
+    }
+
+    private static GeneralPathX toShape(MultiLineString mls)
+            throws NoninvertibleTransformException, CreateGeometryException {
+        GeneralPathX path = new GeneralPathX();
+
+        for ( int i = 0; i < mls.getNumGeometries(); i++ ) {
+            LineString lineString = (LineString) mls.getGeometryN(i);
+            path.append(toShape(lineString).getPathIterator(null), false);
+        }
+
+		//BasicFeatureRenderer expects LineStrings and MultiLineStrings to be
+        //converted to GeneralPathXs. [Jon Aquino]
+        return path;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param lineString DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     *
+     * @throws NoninvertibleTransformException DOCUMENT ME!
+     * @throws CreateGeometryException
+     */
+    private static GeneralPathX toShape(LineString lineString)
+            throws NoninvertibleTransformException, CreateGeometryException {
+        GeneralPathX shape = new GeneralPathX();
+        org.gvsig.fmap.geom.primitive.Point viewPoint = coordinate2FPoint2D(lineString.getCoordinateN(0));
+        shape.moveTo(viewPoint.getX(), viewPoint.getY());
+
+        for ( int i = 1; i < lineString.getNumPoints(); i++ ) {
+            viewPoint = coordinate2FPoint2D(lineString.getCoordinateN(i));
+            shape.lineTo(viewPoint.getX(), viewPoint.getY());
+        }
+
+		//BasicFeatureRenderer expects LineStrings and MultiLineStrings to be
+        //converted to GeneralPathXs. [Jon Aquino]
+        return shape;
+    }
+
+    /**
+     *
+     */
+    private static GeneralPathX toShape(MultiPolygon mp)
+            throws NoninvertibleTransformException {
+        GeneralPathX path = new GeneralPathX();
+
+        for ( int i = 0; i < mp.getNumGeometries(); i++ ) {
+            Polygon polygon = (Polygon) mp.getGeometryN(i);
+            path.append(toShape(polygon).getPathIterator(null), false);
+        }
+
+		//BasicFeatureRenderer expects LineStrings and MultiLineStrings to be
+        //converted to GeneralPathXs. [Jon Aquino]
+        return path;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param coord DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     * @throws CreateGeometryException
+     */
+    public static org.gvsig.fmap.geom.primitive.Point coordinate2FPoint2D(Coordinate coord) throws CreateGeometryException {
+        return geomManager.createPoint(coord.x, coord.y, SUBTYPES.GEOM2D); //,coord.z);
+    }
+
+    /**
+     * Convierte una Geometry de JTS a GeneralPathX.
+     *
+     * @param geometry Geometry a convertir.
+     *
+     * @return GeneralPathX.
+     *
+     * @throws NoninvertibleTransformException
+     * @throws CreateGeometryException
+     * @throws IllegalArgumentException
+     */
+    public static GeneralPathX toShape(com.vividsolutions.jts.geom.Geometry geometry)
+            throws NoninvertibleTransformException, CreateGeometryException {
+        if ( geometry.isEmpty() ) {
+            return new GeneralPathX();
+        }
+
+        if ( geometry instanceof Polygon ) {
+            return toShape((Polygon) geometry);
+        }
+
+        if ( geometry instanceof MultiPolygon ) {
+            return toShape((MultiPolygon) geometry);
+        }
+
+        if ( geometry instanceof LineString ) {
+            return toShape((LineString) geometry);
+        }
+
+        if ( geometry instanceof MultiLineString ) {
+            return toShape((MultiLineString) geometry);
+        }
+
+        if ( geometry instanceof GeometryCollection ) {
+            return toShape(geometry);
+        }
+
+        throw new IllegalArgumentException("Unrecognized Geometry class: "
+                + geometry.getClass());
+    }
+
+    public static GeneralPathX transformToInts(GeneralPathX gp, AffineTransform at) {
+        GeneralPathX newGp = new GeneralPathX();
+        PathIterator theIterator;
+        int theType;
+        int numParts = 0;
+        double[] theData = new double[6];
+        java.awt.geom.Point2D ptDst = new java.awt.geom.Point2D.Double();
+        java.awt.geom.Point2D ptSrc = new java.awt.geom.Point2D.Double();
+        boolean bFirst = true;
+        int xInt, yInt, antX = -1, antY = -1;
+
+        theIterator = gp.getPathIterator(null); //, flatness);
+
+        while ( !theIterator.isDone() ) {
+            theType = theIterator.currentSegment(theData);
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                numParts++;
+                ptSrc.setLocation(theData[0], theData[1]);
+                at.transform(ptSrc, ptDst);
+                antX = (int) ptDst.getX();
+                antY = (int) ptDst.getY();
+                newGp.moveTo(antX, antY);
+                bFirst = true;
+                break;
+
+            case PathIterator.SEG_LINETO:
+                ptSrc.setLocation(theData[0], theData[1]);
+                at.transform(ptSrc, ptDst);
+                xInt = (int) ptDst.getX();
+                yInt = (int) ptDst.getY();
+                if ( (bFirst) || ((xInt != antX) || (yInt != antY)) ) {
+                    newGp.lineTo(xInt, yInt);
+                    antX = xInt;
+                    antY = yInt;
+                    bFirst = false;
+                }
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                System.out.println("Not supported here");
+
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                System.out.println("Not supported here");
+
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                newGp.closePath();
+
+                break;
+            } //end switch
+
+            theIterator.next();
+        } //end while loop
+
+        return newGp;
+    }
+
+    public static Geometry transformToInts(Geometry gp, AffineTransform at) throws CreateGeometryException {
+        GeneralPathX newGp = new GeneralPathX();
+        double[] theData = new double[6];
+        double[] aux = new double[6];
+
+        // newGp.reset();
+        PathIterator theIterator;
+        int theType;
+        int numParts = 0;
+
+        java.awt.geom.Point2D ptDst = new java.awt.geom.Point2D.Double();
+        java.awt.geom.Point2D ptSrc = new java.awt.geom.Point2D.Double();
+        boolean bFirst = true;
+        int xInt, yInt, antX = -1, antY = -1;
+
+        theIterator = gp.getPathIterator(null); //, flatness);
+        int numSegmentsAdded = 0;
+        while ( !theIterator.isDone() ) {
+            theType = theIterator.currentSegment(theData);
+
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                numParts++;
+                ptSrc.setLocation(theData[0], theData[1]);
+                at.transform(ptSrc, ptDst);
+                antX = (int) ptDst.getX();
+                antY = (int) ptDst.getY();
+                newGp.moveTo(antX, antY);
+                numSegmentsAdded++;
+                bFirst = true;
+                break;
+
+            case PathIterator.SEG_LINETO:
+                ptSrc.setLocation(theData[0], theData[1]);
+                at.transform(ptSrc, ptDst);
+                xInt = (int) ptDst.getX();
+                yInt = (int) ptDst.getY();
+                if ( (bFirst) || ((xInt != antX) || (yInt != antY)) ) {
+                    newGp.lineTo(xInt, yInt);
+                    antX = xInt;
+                    antY = yInt;
+                    bFirst = false;
+                    numSegmentsAdded++;
+                }
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                at.transform(theData, 0, aux, 0, 2);
+                newGp.quadTo(aux[0], aux[1], aux[2], aux[3]);
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                at.transform(theData, 0, aux, 0, 3);
+                newGp.curveTo(aux[0], aux[1], aux[2], aux[3], aux[4], aux[5]);
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                if ( numSegmentsAdded < 3 ) {
+                    newGp.lineTo(antX, antY);
+                }
+                newGp.closePath();
+
+                break;
+            } //end switch
+
+            theIterator.next();
+        } //end while loop
+
+        Geometry shp = null;
+        switch (gp.getType()) {
+        case Geometry.TYPES.POINT:
+            shp = geomManager.createPoint(ptDst.getX(), ptDst.getY(), SUBTYPES.GEOM2D);
+            break;
+
+        case Geometry.TYPES.CURVE:
+        case Geometry.TYPES.ARC:
+        case Geometry.TYPES.ELLIPTICARC:
+            try {
+                shp = geomManager.createCurve(newGp, SUBTYPES.GEOM2D);
+            } catch (CreateGeometryException e1) {
+                logger.error("Error creating a curve", e1);
+            }
+            break;
+
+        case Geometry.TYPES.SURFACE:
+        case Geometry.TYPES.CIRCLE:
+        case Geometry.TYPES.ELLIPSE:
+
+            try {
+                shp = geomManager.createSurface(newGp, SUBTYPES.GEOM2D);
+            } catch (CreateGeometryException e) {
+                logger.error("Error creating a surface", e);
+            }
+            break;
+        }
+        return shp;
+    }
+
+    public static Rectangle2D convertEnvelopeToRectangle2D(Envelope jtsR) {
+        Rectangle2D.Double r = new Rectangle2D.Double(jtsR.getMinX(),
+                jtsR.getMinY(), jtsR.getWidth(), jtsR.getHeight());
+        return r;
+    }
+
+    public static Envelope convertEnvelopeToJTS(org.gvsig.fmap.geom.primitive.Envelope r) {
+        Envelope e = new Envelope(r.getMinimum(0), r.getMaximum(0), r.getMinimum(1),
+                r.getMaximum(1));
+        return e;
+    }
+
+    /**
+     * Return a correct polygon (no hole)
+     *
+     * @param coordinates
+     * @return
+     */
+    public static Geometry getExteriorPolygon(Coordinate[] coordinates) {
+        // isCCW = true => it's a hole
+        Coordinate[] vs = new Coordinate[coordinates.length];
+        if ( CGAlgorithms.isCCW(coordinates) ) {
+            for ( int i = vs.length - 1; i >= 0; i-- ) {
+                vs[i] = coordinates[i];
+            }
+        } else {
+            vs = coordinates;
+        }
+        LinearRing ring = geomFactory.createLinearRing(vs);
+
+        try {
+            Surface surface = (Surface) manager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+            surface.setGeneralPath(toShape(ring));
+            return surface;
+        } catch (NoninvertibleTransformException e) {
+            e.printStackTrace();
+        } catch (CreateGeometryException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static boolean isCCW(Point[] points) {
+        int length = points.length;
+        Coordinate[] vs;
+
+        if ( points[0].getX() != points[length - 1].getX() || points[0].getY() != points[length - 1].getY() ) {
+            vs = new Coordinate[length + 1];
+            vs[points.length] = new Coordinate(points[0].getX(), points[0].getY());
+        } else {
+            vs = new Coordinate[length];
+        }
+        for ( int i = 0; i < length; i++ ) {
+            vs[i] = new Coordinate(points[i].getX(), points[i].getY());
+        }
+
+        return CGAlgorithms.isCCW(vs);
+    }
+
+    public static boolean isCCW(Surface pol) {
+        com.vividsolutions.jts.geom.Geometry jtsGeom = Converter.geometryToJts(pol);
+        if ( jtsGeom.getNumGeometries() == 1 ) {
+            Coordinate[] coords = jtsGeom.getCoordinates();
+            return CGAlgorithms.isCCW(coords);
+        }
+        return false;
+    }
+
+    /**
+     * Return a hole (CCW ordered points)
+     *
+     * @param coordinates
+     * @return
+     */
+    public static Geometry getHole(Coordinate[] coordinates) {
+        Coordinate[] vs = new Coordinate[coordinates.length];
+        if ( CGAlgorithms.isCCW(coordinates) ) {
+            vs = coordinates;
+
+        } else {
+            for ( int i = vs.length - 1; i >= 0; i-- ) {
+                vs[i] = coordinates[i];
+            }
+        }
+        LinearRing ring = geomFactory.createLinearRing(vs);
+
+        try {
+            Surface surface = (Surface) manager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+            surface.setGeneralPath(toShape(ring));
+            return surface;
+        } catch (NoninvertibleTransformException e) {
+            e.printStackTrace();
+        } catch (CreateGeometryException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static Shape getExteriorPolygon(GeneralPathX gp) {
+        Area area = new Area(gp);
+        area.isSingular();
+        return area;
+    }
+
+    /**
+     * Use it ONLY for NOT multipart polygons.
+     *
+     * @param pol
+     * @return
+     */
+    public static Geometry getNotHolePolygon(Surface pol) {
+        // isCCW == true => hole
+        Coordinate[] coords;
+        ArrayList arrayCoords = null;
+        int theType;
+        int numParts = 0;
+
+        //Use this array to store segment coordinate data
+        double[] theData = new double[4];
+
+        ArrayList shells = new ArrayList();
+        ArrayList holes = new ArrayList();
+        Coordinate[] points = null;
+
+        int subType = pol.getGeometryType().getSubType();
+        boolean is3D = subType == 1 || subType == 3;
+
+		//El pathIterator no tiene en cuenta coordenadas 3D
+        //theIterator = pol.getPathIterator(null, manager.getFlatness());
+        GeneralPathX gp = pol.getGeneralPath();
+
+        //while (!theIterator.isDone()) {
+        for ( int nPoint = 0; nPoint < gp.getNumCoords(); nPoint++ ) {
+            theData = gp.getCoordinatesAt(nPoint);
+            theType = gp.getTypeAt(nPoint);
+
+			//Populate a segment of the new
+            // GeneralPathX object.
+            //Process the current segment to populate a new
+            // segment of the new GeneralPathX object.
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+
+                // System.out.println("SEG_MOVETO");
+                if ( arrayCoords == null ) {
+                    arrayCoords = new ArrayList();
+                } else {
+                    points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+                    try {
+                        LinearRing ring = geomFactory.createLinearRing(points);
+
+                        if ( CGAlgorithms.isCCW(points) ) {
+                            holes.add(ring);
+                        } else {
+                            shells.add(ring);
+                        }
+                    } catch (Exception e) {
+                        System.err.println("Caught Topology exception in GMLLinearRingHandler");
+
+                        return null;
+                    }
+                    arrayCoords = new ArrayList();
+                }
+
+                numParts++;
+                if ( is3D ) {
+                    arrayCoords.add(new Coordinate(theData[0], theData[1], theData[2]));
+                } else {
+                    arrayCoords.add(new Coordinate(theData[0], theData[1]));
+                }
+
+                break;
+
+            case PathIterator.SEG_LINETO:
+                if ( is3D ) {
+                    arrayCoords.add(new Coordinate(theData[0], theData[1], theData[2]));
+                } else {
+                    arrayCoords.add(new Coordinate(theData[0], theData[1]));
+                }
+                break;
+            case PathIterator.SEG_QUADTO:
+                System.out.println("SEG_QUADTO Not supported here");
+                break;
+            case PathIterator.SEG_CUBICTO:
+                System.out.println("SEG_CUBICTO Not supported here");
+                break;
+            case PathIterator.SEG_CLOSE:
+                Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+                if ( is3D ) {
+                    arrayCoords.add(new Coordinate(firstCoord.x, firstCoord.y, firstCoord.z));
+                } else {
+                    arrayCoords.add(new Coordinate(firstCoord.x, firstCoord.y));
+                }
+                break;
+            } //end switch
+
+            //theIterator.next();
+        } //end while loop
+
+        arrayCoords.add(arrayCoords.get(0));
+        coords = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+        if ( numParts == 1 ) {
+            return getExteriorPolygon(coords);
+        }
+        return pol;
+    }
+
+    /**
+     * Metodo creado para construir un MultiSurface formado por varias surface
+     *
+     * @author Leticia Riestra
+     * @param geom
+     * @return
+     */
+    public static com.vividsolutions.jts.geom.Geometry multiSurfaceToJts(MultiSurface geom, int srid) {
+        Polygon[] polygons = new Polygon[geom.getPrimitivesNumber()];
+        for ( int i = 0; i < polygons.length; i++ ) {
+            Primitive primit = geom.getPrimitiveAt(i);
+            MultiPolygon polygon = null;
+            if ( primit.getType() == Geometry.TYPES.ELLIPSE || primit.getType() == Geometry.TYPES.CIRCLE ) {
+                polygon = (MultiPolygon) ellipseToJts((geom.getPrimitiveAt(i)), srid);
+            } else {
+                polygon = (MultiPolygon) surfaceToJts((geom.getPrimitiveAt(i)), srid);
+            }
+
+            polygons[i] = (Polygon) polygon.getGeometryN(0);//(Polygon) surfaceToJts((geom.getPrimitiveAt(i)), srid);
+        }
+        return new com.vividsolutions.jts.geom.GeometryFactory().createMultiPolygon(polygons);
+    }
+
+    private static com.vividsolutions.jts.geom.Geometry surfaceToJts(Geometry shp, int srid) {
+        try {
+            com.vividsolutions.jts.geom.Geometry geoJTS = null;
+            int theType;
+            int numParts = 0;
+            ArrayList arrayCoords = null;
+            int subType = shp.getGeometryType().getSubType();
+            boolean is3D = subType == 1 || subType == 3;
+            double[] dataLine = new double[3];
+            double[] dataQuad = new double[3];
+            double[] dataCubic = new double[3];
+
+            ArrayList shells = new ArrayList();
+            ArrayList holes = new ArrayList();
+            Coordinate[] points = null;
+
+		//El pathIterator no tiene en cuenta coordenadas 3D. En este caso no 
+            //necesitamos un iterador que interpole porque las SURFACE vienen con todos
+            //los puntos calculados, as� que hacemos un recorrido en vez de usar el 
+            //iterador para poder obtener la Z y no perderla.
+            //theIterator = shp.getPathIterator(null, manager.getFlatness());
+            GeneralPathX gp = shp.getGeneralPath();
+
+            //while (!theIterator.isDone()) {
+            int nPoint = 0;
+            for ( int nType = 0; nType < gp.getNumTypes(); nType++ ) {
+                theType = gp.getTypeAt(nType);
+                switch (theType) {
+                case PathIterator.SEG_MOVETO:
+                case PathIterator.SEG_LINETO: //Se lee un punto
+                    dataLine = gp.get3DCoordinatesAt(nPoint);
+                    nPoint++;
+                    break;
+                case PathIterator.SEG_QUADTO: //Se leen dos puntos
+                    dataLine = gp.get3DCoordinatesAt(nPoint);
+                    dataQuad = gp.get3DCoordinatesAt(nPoint + 1);
+                    nPoint += 2;
+                    break;
+                case PathIterator.SEG_CUBICTO: //Se leen tres puntos
+                    dataLine = gp.get3DCoordinatesAt(nPoint);
+                    dataQuad = gp.get3DCoordinatesAt(nPoint + 1);
+                    dataCubic = gp.get3DCoordinatesAt(nPoint + 2);
+                    nPoint += 3;
+                    break;
+                }
+                //theType = theIterator.currentSegment(theData);
+
+                switch (theType) {
+                case PathIterator.SEG_MOVETO:
+
+                    // System.out.println("SEG_MOVETO");
+                    if ( arrayCoords == null ) {
+                        arrayCoords = new ArrayList();
+                    } else {
+                        points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+                        try {
+                            LinearRing ring = geomFactory.createLinearRing(points);
+
+                            if ( CGAlgorithms.isCCW(points) ) {
+                                holes.add(ring);
+                            } else {
+                                shells.add(ring);
+                            }
+                        } catch (Exception e) {
+                            boolean same = true;
+                            for ( int i = 0; i < points.length - 1 && same; i++ ) {
+                                if ( points[i].x != points[i + 1].x
+                                        || points[i].y != points[i + 1].y /*||
+                                         points[i].z != points[i+1].z*/ ) {
+                                    same = false;
+                                }
+                            }
+                            if ( same ) {
+                                return geomFactory.createPoint(points[0]);
+                            }
+
+                            if ( points.length > 1 && points.length <= 3 ) {
+                                // return geomFactory.createLineString(points);
+                                return geomFactory.createMultiLineString(new LineString[]{geomFactory.createLineString(points)});
+                            }
+
+                            System.err.println(
+                                    "Caught Topology exception in GMLLinearRingHandler");
+
+                            return null;
+                        }
+
+                        arrayCoords = new ArrayList();
+                    }
+
+                    numParts++;
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    break;
+
+                case PathIterator.SEG_LINETO:
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    break;
+
+                case PathIterator.SEG_QUADTO:
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    loadArrayCoordinates(arrayCoords, is3D, dataQuad);
+                    break;
+
+                case PathIterator.SEG_CUBICTO:
+                    loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                    loadArrayCoordinates(arrayCoords, is3D, dataQuad);
+                    loadArrayCoordinates(arrayCoords, is3D, dataCubic);
+                    break;
+
+                case PathIterator.SEG_CLOSE:
+                    Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+                    loadArrayCoordinates(arrayCoords, is3D, new double[]{firstCoord.x, firstCoord.y, firstCoord.z});
+                    break;
+                } //end switch
+
+                //theIterator.next();
+            } //end while loop
+
+            Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+            Coordinate lastCoord = (Coordinate) arrayCoords.get(arrayCoords.size() - 1);
+
+            if ( !isClosed(firstCoord, lastCoord) ) {
+                arrayCoords.add(firstCoord);
+            }
+            points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+            try {
+                LinearRing ring = geomFactory.createLinearRing(points);
+
+                if ( CGAlgorithms.isCCW(points) ) {
+                    holes.add(ring);
+                } else {
+                    shells.add(ring);
+                }
+                ring.setSRID(srid);
+            } catch (Exception e) {
+                boolean same = true;
+                for ( int i = 0; i < points.length - 1 && same; i++ ) {
+                    if ( points[i].x != points[i + 1].x
+                            || points[i].y != points[i + 1].y /*||
+                             points[i].z != points[i+1].z*/ ) {
+                        same = false;
+                    }
+                }
+                if ( same ) {
+                    geoJTS = geomFactory.createPoint(points[0]);
+                    geoJTS.setSRID(srid);
+                    return geoJTS;
+                }
+                if ( points.length > 1 && points.length <= 3 ) {
+                    // return geomFactory.createLineString(points);
+                    geoJTS = geomFactory
+                            .createMultiLineString(new LineString[]{geomFactory
+                                .createLineString(points)});
+                    geoJTS.setSRID(srid);
+                    return geoJTS;
+                }
+                System.err.println(
+                        "Caught Topology exception in GMLLinearRingHandler");
+
+                return null;
+            }
+
+            /* linRing = new GeometryFactory().createLinearRing(
+             CoordinateArrays.toCoordinateArray(arrayCoords)); */
+		// System.out.println("NumParts = " + numParts);
+            //now we have a list of all shells and all holes
+            ArrayList holesForShells = new ArrayList(shells.size());
+
+            for ( int i = 0; i < shells.size(); i++ ) {
+                holesForShells.add(new ArrayList());
+            }
+
+            //find homes
+            for ( int i = 0; i < holes.size(); i++ ) {
+                LinearRing testRing = (LinearRing) holes.get(i);
+                LinearRing minShell = null;
+                Envelope minEnv = null;
+                Envelope testEnv = testRing.getEnvelopeInternal();
+                Coordinate testPt = testRing.getCoordinateN(0);
+                LinearRing tryRing = null;
+
+                for ( int j = 0; j < shells.size(); j++ ) {
+                    tryRing = (LinearRing) shells.get(j);
+
+                    Envelope tryEnv = tryRing.getEnvelopeInternal();
+
+                    if ( minShell != null ) {
+                        minEnv = minShell.getEnvelopeInternal();
+                    }
+
+                    boolean isContained = false;
+                    Coordinate[] coordList = tryRing.getCoordinates();
+
+                    if ( tryEnv.contains(testEnv)
+                            && (CGAlgorithms.isPointInRing(testPt, coordList)
+                            || (pointInList(testPt, coordList))) ) {
+                        isContained = true;
+                    }
+
+                    // check if this new containing ring is smaller than the current minimum ring
+                    if ( isContained ) {
+                        if ( (minShell == null) || minEnv.contains(tryEnv) ) {
+                            minShell = tryRing;
+                        }
+                    }
+                }
+
+                if ( minShell == null ) {
+				//					System.out.println(
+                    //					polygon found with a hole thats not inside a shell);
+                    //					azabala: we do the assumption that this hole is really a shell (polygon)
+                    //					whose point werent digitized in the right order
+                    Coordinate[] cs = testRing.getCoordinates();
+                    Coordinate[] reversed = new Coordinate[cs.length];
+                    int pointIndex = 0;
+                    for ( int z = cs.length - 1; z >= 0; z-- ) {
+                        reversed[pointIndex] = cs[z];
+                        pointIndex++;
+                    }
+                    LinearRing newRing = geomFactory.createLinearRing(reversed);
+                    shells.add(newRing);
+                    holesForShells.add(new ArrayList());
+                } else {
+                    ((ArrayList) holesForShells.get(shells.indexOf(minShell))).add(testRing);
+                }
+            }
+
+            Polygon[] polygons = new Polygon[shells.size()];
+
+            for ( int i = 0; i < shells.size(); i++ ) {
+                polygons[i] = geomFactory.createPolygon(
+                        (LinearRing) shells.get(i),
+                        (LinearRing[]) ((ArrayList) holesForShells.get(i)).toArray(new LinearRing[0]));
+                polygons[i].setSRID(srid);
+            }
+
+            holesForShells = null;
+            shells = null;
+            holes = null;
+
+            geoJTS = geomFactory.createMultiPolygon(polygons);
+            geoJTS.setSRID(srid);
+
+            return geoJTS;
+        } catch (RuntimeException ex) {
+            logger.debug("Can't convert surface to jts.", ex);
+            throw ex;
+        }
+
+    }
+
+    private static com.vividsolutions.jts.geom.Geometry ellipseToJts(Geometry shp, int srid) {
+        com.vividsolutions.jts.geom.Geometry geoJTS = null;
+        int theType;
+        int numParts = 0;
+        ArrayList arrayCoords = null;
+        int subType = shp.getGeometryType().getSubType();
+        boolean is3D = subType == 1 || subType == 3;
+        double[] dataLine = new double[3];
+
+        ArrayList shells = new ArrayList();
+        ArrayList holes = new ArrayList();
+        Coordinate[] points = null;
+
+		//El pathIterator no tiene en cuenta coordenadas 3D, pero para la creaci�n de elipses y circulos
+        //es necesario el iterador que interpole puntos. El resultado es que en la creaci�n de geometr�as de este
+        //tipo no se puede asignar la Z porque se perder�a, pero gvSIG tampoco dispone de esta funci�n, as� que
+        //no se nota. Una vez creadas las geometr�a de tipo Elipse y circulo cuando las editamos ya tendr�n todos
+        //los puntos calculados y se toman como l�neas por lo que ya se podr�a asignar la Z.
+        PathIterator theIterator = shp.getPathIterator(null, manager.getFlatness());
+        while ( !theIterator.isDone() ) {
+            theType = theIterator.currentSegment(dataLine);
+
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                if ( arrayCoords == null ) {
+                    arrayCoords = new ArrayList();
+                } else {
+                    points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+                    try {
+                        LinearRing ring = geomFactory.createLinearRing(points);
+
+                        if ( CGAlgorithms.isCCW(points) ) {
+                            holes.add(ring);
+                        } else {
+                            shells.add(ring);
+                        }
+                    } catch (Exception e) {
+                        boolean same = true;
+                        for ( int i = 0; i < points.length - 1 && same; i++ ) {
+                            if ( points[i].x != points[i + 1].x
+                                    || points[i].y != points[i + 1].y /*||
+                                     points[i].z != points[i+1].z*/ ) {
+                                same = false;
+                            }
+                        }
+                        if ( same ) {
+                            return geomFactory.createPoint(points[0]);
+                        }
+
+                        if ( points.length > 1 && points.length <= 3 ) {
+                            // return geomFactory.createLineString(points);
+                            return geomFactory.createMultiLineString(new LineString[]{geomFactory.createLineString(points)});
+                        }
+
+                        System.err.println(
+                                "Caught Topology exception in GMLLinearRingHandler");
+
+                        return null;
+                    }
+
+                    arrayCoords = new ArrayList();
+                }
+
+                numParts++;
+                loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                break;
+
+            case PathIterator.SEG_LINETO:
+                loadArrayCoordinates(arrayCoords, is3D, dataLine);
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+                loadArrayCoordinates(arrayCoords, is3D, new double[]{firstCoord.x, firstCoord.y, firstCoord.z});
+                break;
+            } //end switch
+
+            theIterator.next();
+        } //end while loop
+
+        Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+        Coordinate lastCoord = (Coordinate) arrayCoords.get(arrayCoords.size() - 1);
+
+        if ( !isClosed(firstCoord, lastCoord) ) {
+            arrayCoords.add(firstCoord);
+        }
+        points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+        try {
+            LinearRing ring = geomFactory.createLinearRing(points);
+
+            if ( CGAlgorithms.isCCW(points) ) {
+                holes.add(ring);
+            } else {
+                shells.add(ring);
+            }
+            ring.setSRID(srid);
+        } catch (Exception e) {
+            boolean same = true;
+            for ( int i = 0; i < points.length - 1 && same; i++ ) {
+                if ( points[i].x != points[i + 1].x
+                        || points[i].y != points[i + 1].y /*||
+                         points[i].z != points[i+1].z*/ ) {
+                    same = false;
+                }
+            }
+            if ( same ) {
+                geoJTS = geomFactory.createPoint(points[0]);
+                geoJTS.setSRID(srid);
+                return geoJTS;
+            }
+            if ( points.length > 1 && points.length <= 3 ) {
+                // return geomFactory.createLineString(points);
+                geoJTS = geomFactory
+                        .createMultiLineString(new LineString[]{geomFactory
+                            .createLineString(points)});
+                geoJTS.setSRID(srid);
+                return geoJTS;
+            }
+            System.err.println(
+                    "Caught Topology exception in GMLLinearRingHandler");
+
+            return null;
+        }
+
+        /* linRing = new GeometryFactory().createLinearRing(
+         CoordinateArrays.toCoordinateArray(arrayCoords)); */
+		// System.out.println("NumParts = " + numParts);
+        //now we have a list of all shells and all holes
+        ArrayList holesForShells = new ArrayList(shells.size());
+
+        for ( int i = 0; i < shells.size(); i++ ) {
+            holesForShells.add(new ArrayList());
+        }
+
+        //find homes
+        for ( int i = 0; i < holes.size(); i++ ) {
+            LinearRing testRing = (LinearRing) holes.get(i);
+            LinearRing minShell = null;
+            Envelope minEnv = null;
+            Envelope testEnv = testRing.getEnvelopeInternal();
+            Coordinate testPt = testRing.getCoordinateN(0);
+            LinearRing tryRing = null;
+
+            for ( int j = 0; j < shells.size(); j++ ) {
+                tryRing = (LinearRing) shells.get(j);
+
+                Envelope tryEnv = tryRing.getEnvelopeInternal();
+
+                if ( minShell != null ) {
+                    minEnv = minShell.getEnvelopeInternal();
+                }
+
+                boolean isContained = false;
+                Coordinate[] coordList = tryRing.getCoordinates();
+
+                if ( tryEnv.contains(testEnv)
+                        && (CGAlgorithms.isPointInRing(testPt, coordList)
+                        || (pointInList(testPt, coordList))) ) {
+                    isContained = true;
+                }
+
+                // check if this new containing ring is smaller than the current minimum ring
+                if ( isContained ) {
+                    if ( (minShell == null) || minEnv.contains(tryEnv) ) {
+                        minShell = tryRing;
+                    }
+                }
+            }
+
+            if ( minShell == null ) {
+				//					System.out.println(
+                //					polygon found with a hole thats not inside a shell);
+                //					azabala: we do the assumption that this hole is really a shell (polygon)
+                //					whose point werent digitized in the right order
+                Coordinate[] cs = testRing.getCoordinates();
+                Coordinate[] reversed = new Coordinate[cs.length];
+                int pointIndex = 0;
+                for ( int z = cs.length - 1; z >= 0; z-- ) {
+                    reversed[pointIndex] = cs[z];
+                    pointIndex++;
+                }
+                LinearRing newRing = geomFactory.createLinearRing(reversed);
+                shells.add(newRing);
+                holesForShells.add(new ArrayList());
+            } else {
+                ((ArrayList) holesForShells.get(shells.indexOf(minShell))).add(testRing);
+            }
+        }
+
+        Polygon[] polygons = new Polygon[shells.size()];
+
+        for ( int i = 0; i < shells.size(); i++ ) {
+            polygons[i] = geomFactory.createPolygon(
+                    (LinearRing) shells.get(i),
+                    (LinearRing[]) ((ArrayList) holesForShells.get(i)).toArray(new LinearRing[0]));
+            polygons[i].setSRID(srid);
+        }
+
+        holesForShells = null;
+        shells = null;
+        holes = null;
+
+        geoJTS = geomFactory.createMultiPolygon(polygons);
+        geoJTS.setSRID(srid);
+
+        return geoJTS;
+    }
+
+    /**
+     * Loads one element in the <code>List</code> of coordinates with the
+     * data contained in the array of doubles
+     *
+     * @param arrayCoords
+     * @param is3D
+     * @param data
+     */
+    private static void loadArrayCoordinates(List arrayCoords, boolean is3D, double[] data) {
+        if ( is3D ) {
+            arrayCoords.add(new Coordinate(data[0], data[1], data[2]));
+        } else {
+            arrayCoords.add(new Coordinate(data[0], data[1]));
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/util/Converter.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToEnvelope.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToEnvelope.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToEnvelope.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.coerce;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+/**
+ * Convert a object to Envelope.
+ * 
+ * Support convert:
+ * - Envelope to Envelope (do nothing)
+ * - Geometry to Envelope
+ * - WKB (byte[]) to Geometry
+ * - WKT (String/toString) to Geometry
+ * 
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceToEnvelope implements Coercion {
+
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if(value == null || value instanceof Envelope ) {
+				return value;
+			}
+			if( value instanceof Geometry ) {
+				return ((Geometry)value).getEnvelope();
+			}
+			GeometryManager manager = GeometryLocator.getGeometryManager();
+			if( value instanceof byte[] ) {
+				Geometry geom = manager.createFrom((byte[])value);
+				return geom.getEnvelope();
+			}
+			Geometry geom = manager.createFrom(value.toString());
+			return geom.getEnvelope(); 
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToEnvelope.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToByteArray.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToByteArray.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToByteArray.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.coerce;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+
+/**
+ * Convert a Geometry to Byte Array encoded as WKB.
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceToByteArray implements Coercion {
+
+	Coercion previous = null;
+	
+	public CoerceToByteArray() {
+		// Do nothing
+	}
+	
+	public CoerceToByteArray(Coercion previous) {
+		this.previous = previous;
+	}
+	
+	
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if( value == null || value instanceof byte[] ) {
+				return value;
+			}
+			if( value instanceof Geometry ) {
+				return ((Geometry)value).convertToWKT();
+			}
+			if( previous != null ) {
+				return previous.coerce(value);
+			}
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+		throw new CoercionException();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToByteArray.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToString.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.coerce;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+
+/**
+ * Convert a Geometry to String encoded as WKT.
+ * 
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceToString implements Coercion {
+
+	Coercion previous = null;
+	
+	public CoerceToString() {
+		// Do nothing
+	}
+	
+	public CoerceToString(Coercion previous) {
+		this.previous = previous;
+	}
+	
+	
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if( value == null || value instanceof String ) {
+				return value;
+			}
+			if( value instanceof Geometry ) {
+				return ((Geometry)value).convertToWKT();
+			}
+			if( previous != null ) {
+				return previous.coerce(value);
+			}
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+		throw new CoercionException();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToString.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToGeometry.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.coerce;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+
+/**
+ * Convert a object to Geometry.
+ * 
+ * Support convert:
+ * - Geometry to Geometry (do nothing)
+ * - WKB (byte[]) to Geometry
+ * - WKT (String/toString) to Geometry
+ * 
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceToGeometry implements Coercion {
+
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if( value == null || value instanceof Geometry ) {
+				return value;
+			}
+			GeometryManager manager = GeometryLocator.getGeometryManager();
+			if( value instanceof byte[] ) {
+				return manager.createFrom((byte[])value);
+			}
+			return manager.createFrom(value.toString());
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/coerce/CoerceToGeometry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryType.java	(revision 42196)
@@ -0,0 +1,204 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.generalpath;
+
+import java.lang.reflect.Constructor;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.type.AbstractGeometryType;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultGeometryType extends AbstractGeometryType {
+	
+	/** 
+	 * Geometry type name
+	 */
+	private String name;
+		
+	/** Class that implements this class type */
+	private Class geometryClass;
+	
+	/**
+	 * The type of the geometry. The type is an abstract representation
+	 * of the object (Point, Curve...) but it is not a concrete 
+	 * representation (Point2D, Point3D...). To do that comparation
+	 * the id field is used.
+	 */
+	private int type;
+	
+	/**
+	 * The subtype of the geometry. The subtype represents a set of 
+	 * geometries with a dimensional relationship (2D, 3D, 2DM...)
+	 */
+	private int subType;	
+		
+	/**
+	 * Super types of a geometry. e.g: the super type of an
+	 * arc is a curve, the super type of a circle is a surface...
+	 * The supertypes are defined in the ISO 19107 
+	 * 
+	 * @see <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26012"
+	 * >ISO 19107< /a>
+	 */
+	private int[] superTypes = null;
+	
+	/**
+     * Super SubTypes of a geometry. e.g: the super SubType of a
+     * geometry 3D is a geometry 2D, because the 3D extends the
+     * behavior of a geometry 2D
+     */
+	private int[] superSubTypes = null;
+	
+    private Constructor constructor;
+    private final Object[] parameters = { this };
+
+	/**
+     * This constructor is used by the {@link GeometryManager} when it
+     * register a new GeometryType. It has not be used from other
+     * parts.
+     * @param geomClass
+     * Geometry class (e.g: Point2D.class)
+     * @param name
+     * Symbolic Geometry name that is used to persist the geometry type. In some
+     * cases, it is better to use this name because the id can change for different
+     * application executions.              
+     * @param id
+     * Geometry id  
+     * @param typeName
+     * The geometry type name
+     * @param type
+     * The geometry abstract type    
+     * @param superTypes
+     * The superTypes of the geometry type
+     * @param superSubTypes
+     * The superSubtypes of the geometry type      
+     */
+    public DefaultGeometryType(Class geomClass, String name, int type, int subType, 
+        int[] superTypes, int[] superSubTypes) {
+        this.geometryClass = geomClass;
+        if (name == null) {
+            this.name = geomClass.getName();
+        } else {
+            this.name = name;
+        }
+        this.type = type;   
+        this.subType = subType;
+        this.superTypes = superTypes;
+        this.superSubTypes = superSubTypes;
+
+        Class[] parameterTypes = { GeometryType.class };
+        try {
+            constructor = geometryClass.getConstructor(parameterTypes);
+        } catch (NoSuchMethodException e) {
+            throw new RuntimeException(
+                "Error constructor of the geometry class " + geomClass
+                    + " with one parameter of type GeometryType not found", e);
+        }
+    }	
+	
+	/**
+	 * This constructor is used by the {@link GeometryManager} when it
+	 * register a new GeometryType. It has not be used from other
+	 * parts.
+	 * @param geomClass
+	 * Geometry class (e.g: Point2D.class)
+	 * @param name
+	 * Symbolic Geometry name that is used to persist the geometry type. In some
+	 * cases, it is better to use this name because the id can change for different
+	 * application executions.  	 		
+	 * @param id
+	 * Geometry id	
+	 * @param typeName
+	 * The geometry type name
+	 * @param type
+	 * The geometry abstract type			
+	 */
+	public DefaultGeometryType(Class geomClass, String name, int type, int subType) {
+		this(geomClass, name, type, subType, new int[0], new int[0]);
+	}
+	
+	/**
+	 * This method creates a {@link Geometry} with the type specified 
+	 * by this GeometryType. The geometry has to have a constructor
+	 * without arguments.
+	 * 
+	 * @return A new geometry
+	 * @throws CreateGeometryException 
+	 */
+	public Geometry create() throws CreateGeometryException{
+		try {
+            return (Geometry) constructor.newInstance(parameters);
+		} catch (Exception e) {
+			throw new CreateGeometryException(type, subType, e);
+		} 
+	}
+	
+	public Class getGeometryClass() {
+		return geometryClass;
+	}
+	
+	public String getName() {
+		return name;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public int getSubType() {
+		return subType;
+	}
+
+    public boolean isTypeOf(int geometryType) {
+        if (type == geometryType){
+            return true;
+        }
+        for (int i=0 ; i<superTypes.length ; i++){
+            if(superTypes[i] == geometryType){
+                return true;
+            }
+        }
+        return Geometry.TYPES.GEOMETRY == geometryType;
+    }
+
+    public boolean isSubTypeOf(int geometrySubType) {
+        if (subType == geometrySubType){
+            return true;
+        }
+        for (int i=0 ; i<superSubTypes.length ; i++){
+            if(superSubTypes[i] == geometrySubType){
+                return true;
+            }
+        }
+        return false;
+    }
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultValidationStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultValidationStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultValidationStatus.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.generalpath;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.valid.TopologyValidationError;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.generalpath.primitive.AbstractPrimitive;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultValidationStatus implements Geometry.ValidationStatus {
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractPrimitive.class);
+
+    private int statusCode = VALID;
+    private Point problemLocation = null;
+    private String message = null;
+
+    public DefaultValidationStatus() {
+
+    }
+
+    public DefaultValidationStatus(int code, String message) {
+        this.statusCode = code;
+        this.message = message;
+    }
+
+    public void setMesage(String message) {
+        this.message = message;
+    }
+
+    public void setStatusCode(int statusCode) {
+        this.statusCode = statusCode;
+    }
+
+    public void setValidationError(TopologyValidationError validationError) {
+        if( validationError == null ) {
+            statusCode = VALID;
+            message = null;
+            problemLocation = null;
+            return;
+        }
+        this.message = validationError.getMessage();
+        Coordinate coord = validationError.getCoordinate();
+        try {
+            GeometryManager geomManager = GeometryLocator.getGeometryManager();
+            if ( Double.isNaN(coord.z) ) {
+                this.problemLocation = geomManager.createPoint(coord.x, coord.y, Geometry.SUBTYPES.GEOM2D);
+            } else {
+                this.problemLocation = geomManager.createPoint(coord.x, coord.y, Geometry.SUBTYPES.GEOM3D);
+                this.problemLocation.setCoordinateAt(2, coord.z);
+            }
+        } catch (CreateGeometryException ex) {
+            String coordstr;
+            try {
+                coordstr = coord.toString();
+            } catch (Exception ex1) {
+                coordstr = "unknow";
+            }
+            logger.warn("Can't create a point from jts Coordinate (" + coordstr + ").", ex);
+            this.problemLocation = null;
+        }
+        switch (validationError.getErrorType()) {
+        case TopologyValidationError.DISCONNECTED_INTERIOR:
+            this.statusCode = DISCONNECTED_INTERIOR;
+            break;
+        case TopologyValidationError.DUPLICATE_RINGS:
+            this.statusCode = DUPLICATE_RINGS;
+            break;
+        case TopologyValidationError.HOLE_OUTSIDE_SHELL:
+            this.statusCode = HOLE_OUTSIDE_SHELL;
+            break;
+        case TopologyValidationError.INVALID_COORDINATE:
+            this.statusCode = INVALID_COORDINATE;
+            break;
+        case TopologyValidationError.NESTED_HOLES:
+            this.statusCode = NESTED_HOLES;
+            break;
+        case TopologyValidationError.NESTED_SHELLS:
+            this.statusCode = NESTED_SHELLS;
+            break;
+        case TopologyValidationError.RING_NOT_CLOSED:
+            this.statusCode = RING_NOT_CLOSED;
+            break;
+        case TopologyValidationError.RING_SELF_INTERSECTION:
+            this.statusCode = RING_SELF_INTERSECTION;
+            break;
+        case TopologyValidationError.SELF_INTERSECTION:
+            this.statusCode = SELF_INTERSECTION;
+            break;
+        case TopologyValidationError.TOO_FEW_POINTS:
+            this.statusCode = TOO_FEW_POINTS;
+            break;
+        default:
+            this.statusCode = UNKNOW;
+            break;
+        }
+    }
+
+    public boolean isValid() {
+        return statusCode == VALID;
+    }
+
+    public int getStatusCode() {
+        return this.statusCode;
+    }
+
+    public Point getProblemLocation() {
+        return this.problemLocation;
+    }
+
+    public String getMessage() {
+        return this.message;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryPersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryPersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryPersistenceFactory.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.persistence;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.AbstractSinglePersistenceFactory;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+/**
+ * Factory to manage the persistence of {@link Geometry} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class GeometryPersistenceFactory extends AbstractSinglePersistenceFactory {
+    private static final String FIELD_STRING = "string";
+    private static final String FIELD_SRS = "srs";
+
+    private static final String DYNCLASS_NAME = "Geometry";
+    private static final String DYNCLASS_DESCRIPTION = "gvSIG Geometry";
+
+    private static final String OPERATION_FIELD_NAME = "";
+
+    private static final GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+    /**
+     * @param theClass
+     * @param name
+     * @param description
+     * @param domainName
+     * @param domainUrl
+     */
+    public GeometryPersistenceFactory() {
+        super(Geometry.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null, null);   
+
+        DynStruct definition = this.getDefinition();
+
+        definition.addDynFieldString(FIELD_STRING).setMandatory(true);
+        definition.addDynFieldString(FIELD_SRS).setMandatory(false);
+    }
+
+    public Object createFromState(PersistentState state)
+    throws PersistenceException {
+        String string = state.getString(FIELD_STRING);
+        String srs = state.getString(FIELD_SRS);
+
+        try {
+            return geometryManager.createFrom(string, srs);
+        } catch (CreateGeometryException e) {
+           throw new PersistenceException("Error creating the geometry", e);
+        } catch (GeometryException e) {
+            throw new PersistenceException("Error creating the geometry", e);
+        }
+    }
+
+    public void saveToState(PersistentState state, Object obj)
+    throws PersistenceException {
+        try {
+            state.set(FIELD_STRING, ((Geometry)obj).convertToWKT());
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new PersistenceException("Error converting the geometry", e);
+        } catch (GeometryOperationException e) {
+            throw new PersistenceException("Error converting the geometry", e);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryPersistenceFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryTypePersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryTypePersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryTypePersistenceFactory.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.persistence;
+
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.AbstractSinglePersistenceFactory;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * Factory to persist {@link GeometryType} objects.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class GeometryTypePersistenceFactory extends
+    AbstractSinglePersistenceFactory {
+
+    private static final GeometryManager geometryManager = GeometryLocator
+        .getGeometryManager();
+
+    private static final String DYNCLASS_NAME = "GeometryType";
+    private static final String DYNCLASS_DESCRIPTION = "gvSIG Geometry type";
+
+    private static final String FIELD_TYPE = "type";
+    private static final String FIELD_SUBTYPE = "subtype";
+
+    /**
+     * Creates a new {@link GeometryTypePersistenceFactory}. It will persist
+     * the geometry type and subtype values, and use it to load
+     * {@link GeometryType}s from persistence by calling
+     * {@link GeometryManager#getGeometryType(int, int)}.
+     */
+    public GeometryTypePersistenceFactory() {
+        super(GeometryType.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null,
+            null);
+
+        DynStruct definition = this.getDefinition();
+        definition.addDynFieldInt(FIELD_TYPE).setMandatory(true);
+        definition.addDynFieldInt(FIELD_SUBTYPE).setMandatory(true);
+    }
+
+    public Object createFromState(PersistentState state)
+        throws PersistenceException {
+        int type = state.getInt(FIELD_TYPE);
+        int subType = state.getInt(FIELD_SUBTYPE);
+
+        try {
+            return geometryManager.getGeometryType(type, subType);
+        } catch (GeometryTypeNotSupportedException e) {
+            throw new PersistenceException(
+                "Error creating the geometry type with type = " + type
+                    + ", subType = " + subType, e);
+        } catch (GeometryException e) {
+            throw new PersistenceException(
+                "Error creating the geometry type with type = " + type
+                    + ", subType = " + subType, e);
+        }
+    }
+
+    public void saveToState(PersistentState state, Object obj)
+        throws PersistenceException {
+        GeometryType type = (GeometryType) obj;
+        state.set(FIELD_TYPE, type.getType());
+        state.set(FIELD_SUBTYPE, type.getSubType());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/persistence/GeometryTypePersistenceFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryLibrary.java	(revision 42196)
@@ -0,0 +1,208 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.generalpath;
+
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLibrary;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.generalpath.aggregate.BaseMultiPrimitive2D;
+import org.gvsig.fmap.geom.generalpath.aggregate.MultiCurve2D;
+import org.gvsig.fmap.geom.generalpath.aggregate.MultiCurve2DZ;
+import org.gvsig.fmap.geom.generalpath.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.generalpath.aggregate.MultiPoint2DZ;
+import org.gvsig.fmap.geom.generalpath.aggregate.MultiSolid2DZ;
+import org.gvsig.fmap.geom.generalpath.aggregate.MultiSurface2D;
+import org.gvsig.fmap.geom.generalpath.aggregate.MultiSurface3D;
+import org.gvsig.fmap.geom.generalpath.persistence.GeometryPersistenceFactory;
+import org.gvsig.fmap.geom.generalpath.coerce.CoerceToByteArray;
+import org.gvsig.fmap.geom.generalpath.coerce.CoerceToEnvelope;
+import org.gvsig.fmap.geom.generalpath.coerce.CoerceToGeometry;
+import org.gvsig.fmap.geom.generalpath.coerce.CoerceToString;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.arc.Arc2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse.Circle2D;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse.Circle2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.line.Line2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultEnvelope;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse.Ellipse2D;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse.Ellipse2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse.EllipticArc2D;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse.EllipticArc2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.Envelope2D;
+import org.gvsig.fmap.geom.generalpath.primitive.Envelope3D;
+import org.gvsig.fmap.geom.generalpath.primitive.Geometry2D;
+import org.gvsig.fmap.geom.generalpath.primitive.Geometry2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.point.Point2DGeometryType;
+import org.gvsig.fmap.geom.generalpath.primitive.point.Point3DGeometryType;
+import org.gvsig.fmap.geom.generalpath.primitive.solid.Solid2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.spline.Spline2D;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.spline.Spline2DZ;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.polygon.Polygon2DZ;
+import org.gvsig.fmap.geom.generalpath.persistence.GeometryTypePersistenceFactory;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.arc.Arc2D;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * Registers the default implementation for {@link GeometryManager}
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultGeometryLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsImplementationOf(GeometryLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        // Register the default GeometryManager
+        GeometryLocator.registerGeometryManager(DefaultGeometryManager.class);
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+
+        dataTypesManager
+        .setCoercion(DataTypes.GEOMETRY, new CoerceToGeometry());
+        dataTypesManager
+        .setCoercion(DataTypes.ENVELOPE, new CoerceToEnvelope());
+        dataTypesManager.setCoercion(DataTypes.STRING, new CoerceToString(
+            dataTypesManager.getCoercion(DataTypes.STRING)));
+        dataTypesManager.setCoercion(
+            DataTypes.BYTEARRAY,
+            new CoerceToByteArray(dataTypesManager
+                .getCoercion(DataTypes.BYTEARRAY)));
+
+        GeometryOperation.OPERATION_INTERSECTS_CODE =
+            GeometryLocator.getGeometryManager().getGeometryOperationCode(
+                GeometryOperation.OPERATION_INTERSECTS_NAME);
+
+        GeometryOperation.OPERATION_CONTAINS_CODE =
+            GeometryLocator.getGeometryManager().getGeometryOperationCode(
+                GeometryOperation.OPERATION_CONTAINS_NAME);
+
+        // Register the geometries in 2D
+        geometryManager.registerGeometryType(DefaultNullGeometry.class, "Null",
+            TYPES.NULL, SUBTYPES.GEOM2D);
+        
+        geometryManager.registerGeometryType(Geometry2D.class, "Geometry2D",
+                TYPES.GEOMETRY, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(Geometry2DZ.class, "Geometry3D",
+            TYPES.GEOMETRY, SUBTYPES.GEOM3D);
+
+        //Register points in 2D
+        geometryManager.registerGeometryType(new Point2DGeometryType());
+
+        //Register curves in 2D
+        geometryManager.registerGeometryType(Line2D.class, "Curve2D",
+            TYPES.CURVE, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(Arc2D.class, "Arc2D", 
+            TYPES.ARC, SUBTYPES.GEOM2D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Spline2D.class, "Spline2D",
+            TYPES.SPLINE, SUBTYPES.GEOM2D, TYPES.CURVE);
+
+        //Register surfaces in 2D
+        geometryManager.registerGeometryType(Polygon2D.class, "Surface2D",
+            TYPES.SURFACE, SUBTYPES.GEOM2D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Circle2D.class, "Circle2D",
+            TYPES.CIRCLE, SUBTYPES.GEOM2D, TYPES.SURFACE);      
+        geometryManager.registerGeometryType(Ellipse2D.class, "Ellipse2D",
+            TYPES.ELLIPSE, SUBTYPES.GEOM2D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(EllipticArc2D.class,"EllipticArc2D", 
+            TYPES.ELLIPTICARC, SUBTYPES.GEOM2D, TYPES.SURFACE);
+
+        //Register multigeometries in 2D
+        geometryManager.registerGeometryType(BaseMultiPrimitive2D.class, "MultiPrimitive2D", 
+            TYPES.AGGREGATE, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(MultiPoint2D.class, "MultiPoint2D",
+            TYPES.MULTIPOINT, SUBTYPES.GEOM2D, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiCurve2D.class, "MultiCurve2D",
+            TYPES.MULTICURVE, SUBTYPES.GEOM2D, TYPES.AGGREGATE); 
+        geometryManager.registerGeometryType(MultiSurface2D.class,"MultiSurface2D",
+            TYPES.MULTISURFACE, SUBTYPES.GEOM2D, TYPES.AGGREGATE);
+
+        // Register the geometries in 3D
+        geometryManager.registerGeometryType(DefaultNullGeometry.class,
+            TYPES.NULL, SUBTYPES.GEOM3D);
+
+        //Register points in 3D
+        geometryManager.registerGeometryType(new Point3DGeometryType());
+
+        //Register curves in 3D
+        geometryManager.registerGeometryType(Line2DZ.class, "Curve3D", 
+            TYPES.CURVE, SUBTYPES.GEOM3D, new int[0], new int[]{SUBTYPES.GEOM2D});
+        geometryManager.registerGeometryType(Arc2DZ.class, "Arc3D", 
+            TYPES.ARC, SUBTYPES.GEOM3D, TYPES.CURVE, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(Spline2DZ.class, "Spline3D", 
+            TYPES.SPLINE, SUBTYPES.GEOM3D, TYPES.CURVE, SUBTYPES.GEOM2D);
+
+        //Register surfaces in 3D
+        geometryManager.registerGeometryType(Polygon2DZ.class, "Surface3D", 
+            TYPES.SURFACE, SUBTYPES.GEOM3D, new int[0], new int[]{SUBTYPES.GEOM2D});
+        geometryManager.registerGeometryType(Circle2DZ.class, "Circle3D",
+            TYPES.CIRCLE, SUBTYPES.GEOM3D, TYPES.SURFACE, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(Ellipse2DZ.class, "Ellipse3D", 
+            TYPES.ELLIPSE,SUBTYPES.GEOM3D, TYPES.SURFACE, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(EllipticArc2DZ.class, "EllipticArc3D",
+            TYPES.ELLIPTICARC, SUBTYPES.GEOM3D, TYPES.SURFACE, SUBTYPES.GEOM2D);
+
+        //Register multigeometries in 3D
+        geometryManager.registerGeometryType(MultiPoint2DZ.class, "Multipoint3D", 
+            TYPES.MULTIPOINT, SUBTYPES.GEOM3D, TYPES.AGGREGATE, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(MultiCurve2DZ.class,"MultiCurve3D",
+            TYPES.MULTICURVE, SUBTYPES.GEOM3D, TYPES.AGGREGATE, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(MultiSurface3D.class,"MultiSurface3D",
+            TYPES.MULTISURFACE, SUBTYPES.GEOM3D, TYPES.AGGREGATE, SUBTYPES.GEOM2D);
+
+        //Register solids
+        geometryManager.registerGeometryType(Solid2DZ.class, "Solid3D",
+            TYPES.SOLID, SUBTYPES.GEOM3D);
+        geometryManager.registerGeometryType(MultiSolid2DZ.class,"MultiSolid3D",
+            TYPES.MULTISOLID, SUBTYPES.GEOM3D, TYPES.AGGREGATE);
+
+        // Persistence
+        DefaultEnvelope.registerPersistent();
+        Envelope2D.registerPersistent();
+        Envelope3D.registerPersistent();
+
+        PersistenceManager persistenceManager =
+            ToolsLocator.getPersistenceManager();
+
+        persistenceManager.registerFactory(new GeometryPersistenceFactory());
+        persistenceManager
+            .registerFactory(new GeometryTypePersistenceFactory());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/DefaultGeometryLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/AbstractSpatialIndex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/AbstractSpatialIndex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/AbstractSpatialIndex.java	(revision 42196)
@@ -0,0 +1,161 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.spatialindex;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.Manager;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractSpatialIndex implements SpatialIndex {
+    private static Logger logger = LoggerFactory.getLogger(AbstractSpatialIndex.class);
+    
+    private SpatialIndexFactory factory = null;
+    private GeometryManager manager = null;
+    private DynObject parameters = null;
+    private Coercion coercion = null;
+
+    public AbstractSpatialIndex(GeometryManager geometryManager, SpatialIndexFactory factory, DynObject parameters) {
+        this.factory = factory;
+        this.manager = geometryManager;
+        this.parameters = parameters;
+    }
+    
+    public Manager getManager() {
+        return this.manager;
+    }
+            
+    public SpatialIndexFactory getFactory() {
+        return this.factory;
+    }
+
+    public DynObject getParameters() {
+        return this.parameters;
+    }
+    
+    public Object getParameter(String name) {
+        return this.parameters.getDynValue(name);
+    }
+    
+    public void query(Geometry geom, Visitor visitor) {
+        this.query(geom.getEnvelope(), visitor);
+    }
+
+    public Iterator query(Geometry geom) {
+        return this.query(geom.getEnvelope());
+    }
+
+    public Iterator query(org.gvsig.fmap.geom.primitive.Envelope envelope) {
+        return this.query(envelope, 0);
+    }
+
+    public Iterator query(Geometry geom, long limit) {
+        return this.query(geom.getEnvelope(), limit);
+    }
+
+    public Iterator queryNearest(Envelope envelope) {
+        return this.queryNearest(envelope, 0);
+    }
+
+    public Iterator queryNearest(Geometry geom) {
+        return this.queryNearest(geom.getEnvelope(), 0);
+    }
+
+    public Iterator queryNearest(Geometry geom, long limit) {
+        return this.queryNearest(geom.getEnvelope(), limit);
+    }
+
+    public void insert(Geometry geom, Object data) {
+        this.insert(geom.getEnvelope(), data);
+    }
+
+    public void insert(Geometry geom) {
+        this.insert(geom.getEnvelope(), geom);
+    }
+
+    public boolean remove(Geometry geom) {
+        return this.remove(geom.getEnvelope(), geom);
+    }
+
+    public boolean remove(Geometry geom, Object data) {
+        return this.remove(geom.getEnvelope(), data);
+    }
+
+    public List queryAsList(Envelope envelope) {
+        return asList(query(envelope));
+    }
+
+    public List queryAsList(Geometry geom) {
+        return asList(query(geom));
+    }
+
+    public List queryAllAsList() {
+        return asList(queryAll());
+    }
+
+    protected List asList(Iterator it) {
+        List l = new ArrayList();
+        while (it.hasNext()) {
+            l.add(it.next());
+        }
+        return l;
+    }
+    
+    protected Object coerceData(Object data) {
+        if( data == null ) {
+            return data;
+        }
+        
+        if( this.coercion == null ) {
+            int dataType = this.getFactory().getDataTypeSupported();
+            DataTypesManager typeManager = ToolsLocator.getDataTypesManager();
+            this.coercion = typeManager.getCoercion(dataType);
+        }
+        try {
+            return this.coercion.coerce(data);
+        } catch (CoercionException ex) {
+            logger.warn("Can't coerce data to the index date type.",ex);
+            throw new IllegalArgumentException("Can't coerce data to the index date type.",ex);
+        }
+    }
+
+    public void flush() {
+        // Do nothing, overwrite in each implementation if need
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/AbstractSpatialIndex.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJSI.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJSI.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJSI.java	(revision 42196)
@@ -0,0 +1,154 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.spatialindex;
+
+import com.infomatiq.jsi.IntProcedure;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.visitor.Visitor;
+
+import com.infomatiq.jsi.Rectangle;
+import com.infomatiq.jsi.rtree.RTree;
+import java.util.Collection;
+import java.util.Properties;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+
+public class SpatialIndexJSI extends AbstractSpatialIndex implements SpatialIndex {
+
+    private RTree index = null;
+
+    class Values implements IntProcedure {
+
+        List elements = new ArrayList();
+
+        public boolean execute(int arg0) {
+            elements.add(new Integer(arg0));
+            return true;
+        }
+
+        public List getElements() {
+            return elements;
+        }
+    }
+
+    public SpatialIndexJSI(GeometryManager geometryManager, SpatialIndexFactory factory, DynObject parameters) {
+        super(geometryManager, factory, parameters);
+        this.index = null;
+        this.open();
+    }
+
+    public void open() {
+        this.index = new RTree();
+        Properties props = new Properties();
+        if( this.getParameter("MaxNodeEntries")!=null ) {
+            props.setProperty("MaxNodeEntries", ((Integer)this.getParameter("MaxNodeEntries")).toString());
+        }
+        if( this.getParameter("MinNodeEntries")!=null ) {
+            props.setProperty("MinNodeEntries", ((Integer)this.getParameter("MinNodeEntries")).toString());
+        }
+        this.index.init(props);
+    }
+
+    public void close() {
+        this.index = null;
+    }
+    
+    private Rectangle asJSI(Envelope envelope) {
+        Point min = envelope.getLowerCorner();
+        Point max = envelope.getUpperCorner();
+
+        Rectangle rectangle =
+            new Rectangle((float) min.getX(), (float) min.getY(),
+                (float) max.getX(), (float) max.getY());
+        return rectangle;
+    }
+
+    public long size() {
+        return this.index.size();
+    }
+
+    public void query(Envelope envelope, final Visitor visitor) {
+        this.index.intersects(asJSI(envelope), new IntProcedure() {
+            public boolean execute(int i) {
+                try {
+                    visitor.visit(new Integer(i));
+                } catch (BaseException ex) {
+                    return false;
+                }
+                return true;
+            }
+        });
+    }
+
+    public Iterator query(Envelope envelope, final long limit) {
+        final List results = new ArrayList();
+                
+        this.index.intersects(asJSI(envelope), new IntProcedure() {
+            public boolean execute(int i) {
+                results.add(new Integer(i));
+                return results.size()<limit;
+            }
+        });
+        return results.iterator();
+    }
+
+    public Iterator queryNearest(Envelope envelope, long limit) {
+        Collection results = this.index.nearest(asJSI(envelope), (int)limit);
+        return results.iterator();
+    }
+    
+    public Iterator queryAll() {
+        return this.index.iterator();
+    }
+
+    public void insert(Envelope envelope, Object data) {
+        Integer number = (Integer) this.coerceData(data);
+        if( number == null ) {
+            throw new IllegalArgumentException("null data are not allowed.");
+        }
+        this.index.add(asJSI(envelope), number.intValue());
+    }
+
+    public boolean remove(Envelope envelope, Object data) {
+        Integer number = (Integer) this.coerceData(data);
+        if( number == null ) {
+            throw new IllegalArgumentException("null data are not allowed.");
+        }
+        return this.index.delete(asJSI(envelope), number.intValue());
+    }
+
+    public void removeAll() {
+        this.close();
+        this.open();
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJSI.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexFactoryJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexFactoryJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexFactoryJTS.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.fmap.geom.generalpath.spatialindex;
+
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceManager;
+
+
+public class SpatialIndexFactoryJTS extends AbstractSpatialIndexFactory implements SpatialIndexFactory  {
+
+    public static final String NAME = "MemoryJTS";
+
+    public String getName() {
+        return NAME;
+    }
+
+    public int getDataTypeSupported() {
+        return DataTypes.OBJECT;
+    }
+
+    public Service create(DynObject parameters, ServiceManager serviceManager) throws ServiceException {
+        return new SpatialIndexJTS((GeometryManager) serviceManager, this, parameters);
+    }
+
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        return manager.createDynObject(this.parametersDefinition);
+    }
+
+    public void initialize() {
+        super.initialize(); 
+        if( this.parametersDefinition == null ) {
+            this.parametersDefinition = this.getBaseParametersDefinition();
+        }
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/AbstractSpatialIndexFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/AbstractSpatialIndexFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/AbstractSpatialIndexFactory.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.fmap.geom.generalpath.spatialindex;
+
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+public abstract class AbstractSpatialIndexFactory implements SpatialIndexFactory {
+
+    protected DynStruct parametersDefinition = null;
+    
+    protected DynStruct getBaseParametersDefinition() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        DynStruct struct = manager.createDynClass("SpatialIndexParameters_"+this.getName(), "Spatial index creation parameters for '"+this.getName()+"'.");
+        struct.addDynFieldString("name")
+                .setMandatory(true)
+                .setReadOnly(true)
+                .setHidden(true);
+        return struct;
+    }
+    
+    public void initialize() {
+        // Do nothing
+    }
+
+    public boolean isNearestQuerySupported() {
+        return false;
+    }
+
+    public boolean canUseToleranzeInNearestQuery() {
+        return false;
+    }
+
+    public boolean canLimitResults() {
+        return false;
+    }
+
+    public int getDataTypeSupported() {
+        return DataTypes.OBJECT;
+    }
+
+    public boolean isInMemory() {
+        return true;
+    }
+
+    public boolean allowNullData() {
+        return false;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexFactoryJSI.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexFactoryJSI.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexFactoryJSI.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.fmap.geom.generalpath.spatialindex;
+
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceManager;
+
+
+public class SpatialIndexFactoryJSI extends AbstractSpatialIndexFactory implements SpatialIndexFactory {
+
+    public static final String NAME = "MemoryJSI";
+    
+    public String getName() {
+        return NAME;
+    }
+
+    public boolean isNearestQuerySupported() {
+        return true;
+    }
+
+    public boolean canLimitResults() {
+        return true;
+    }
+
+    public int getDataTypeSupported() {
+        return DataTypes.INT;
+    }
+
+    public Service create(DynObject parameters, ServiceManager serviceManager) throws ServiceException {
+        return new SpatialIndexJSI((GeometryManager) serviceManager, this, parameters);
+    }
+
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        return manager.createDynObject(this.parametersDefinition);
+    }
+
+    public void initialize() {
+        super.initialize(); 
+        if( this.parametersDefinition == null ) {
+            this.parametersDefinition = this.getBaseParametersDefinition();
+            this.parametersDefinition.addDynFieldInt("MaxNodeEntries")
+                    .setDefaultFieldValue(null)
+                    .setMandatory(false);
+            this.parametersDefinition.addDynFieldInt("MinNodeEntries")
+                    .setDefaultFieldValue(null)
+                    .setMandatory(false);
+        }
+    }
+    
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJTS.java	(revision 42196)
@@ -0,0 +1,119 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.spatialindex;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.visitor.Visitor;
+
+public class SpatialIndexJTS extends AbstractSpatialIndex implements SpatialIndex {
+
+    private com.vividsolutions.jts.index.quadtree.Quadtree index = null;
+
+    public SpatialIndexJTS(GeometryManager geometryManager, SpatialIndexFactory factory, DynObject parameters) {
+        super(geometryManager, factory, parameters);
+        this.index = null;
+        open();
+    }
+    
+    public void open() {
+        this.index = new com.vividsolutions.jts.index.quadtree.Quadtree();
+    }
+
+    public void close() {
+        this.index = null;
+    }
+
+    private com.vividsolutions.jts.geom.Geometry asJTS(org.gvsig.fmap.geom.Geometry geom) {
+        return Converter.geometryToJts(geom);
+    }
+
+    public long size() {
+        return this.index.size();
+    }
+
+    public void query(org.gvsig.fmap.geom.primitive.Envelope envelope,
+            Visitor visitor) {
+        com.vividsolutions.jts.index.ItemVisitor visitor_jts = new JTSVisitorWrapper(visitor);
+        com.vividsolutions.jts.geom.Envelope env_jts = asJTS(envelope.getGeometry()).getEnvelopeInternal();
+        this.index.query(env_jts, visitor_jts);
+
+    }
+
+    public Iterator query(org.gvsig.fmap.geom.primitive.Envelope envelope,long limit) {
+        if( limit!=0 ) {
+            throw new UnsupportedOperationException("Not supported yet."); 
+        }
+        com.vividsolutions.jts.geom.Envelope env_jts = asJTS(envelope.getGeometry()).getEnvelopeInternal();
+        List result = this.index.query(env_jts);
+        return result.iterator();
+    }
+
+    public Iterator queryNearest(org.gvsig.fmap.geom.primitive.Envelope envelope, long limit) {
+        throw new UnsupportedOperationException("Not supported yet."); 
+    }
+    
+    public Iterator queryAll() {
+        List result = this.index.queryAll();
+        return result.iterator();
+    }
+
+    public void insert(org.gvsig.fmap.geom.primitive.Envelope envelope, Object data) {
+        com.vividsolutions.jts.geom.Envelope env_jts = asJTS(envelope.getGeometry()).getEnvelopeInternal();
+        index.insert(env_jts, data);
+    }
+
+    public boolean remove(org.gvsig.fmap.geom.primitive.Envelope envelope, Object data) {
+        com.vividsolutions.jts.geom.Envelope env_jts = asJTS(envelope.getGeometry()).getEnvelopeInternal();
+        return index.remove(env_jts, data);
+    }
+
+    public void removeAll() {
+        index = new com.vividsolutions.jts.index.quadtree.Quadtree();
+    }
+
+    private class JTSVisitorWrapper implements com.vividsolutions.jts.index.ItemVisitor {
+
+        private Visitor visitor = null;
+
+        public JTSVisitorWrapper(Visitor visitor) {
+            this.visitor = visitor;
+        }
+
+        public void visitItem(Object arg0) {
+            try {
+                this.visitor.visit(arg0);
+            } catch (Exception e) {
+                throw new RuntimeException();
+            }
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/spatialindex/SpatialIndexJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive.java	(revision 42196)
@@ -0,0 +1,490 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.generalpath.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public abstract class BaseMultiPrimitive extends AbstractPrimitive implements
+        MultiPrimitive {
+
+    private static final long serialVersionUID = 8023609161647736932L;
+
+    private static final Logger logger = LoggerFactory.getLogger(GeometryManager.class);
+
+    protected List geometries = null;
+
+    /**
+     * The constructor with the GeometryType like and argument is used by the
+     * {@link GeometryType}{@link #create()} to create the geometry
+     *
+     * @param type The geometry type
+     */
+    public BaseMultiPrimitive(GeometryType geometryType) {
+        super(geometryType);
+        geometries = new ArrayList();
+    }
+
+    BaseMultiPrimitive(GeometryType geometryType, String id, IProjection projection,
+            Geometry[] geometries) {
+        super(geometryType, id, projection);
+        this.geometries = new ArrayList();
+        for (int i = 0; i < geometries.length; i++) {
+            this.geometries.add(geometries[i]);
+        }
+    }
+
+    BaseMultiPrimitive(GeometryType geometryType, String id, IProjection projection) {
+        super(geometryType, id, projection);
+        this.geometries = new ArrayList();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(double, double)
+     */
+    public boolean contains(double x, double y) {
+
+        boolean bResul;
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+
+            try {
+                bResul = containsPoint(
+                        (Geometry) geometries.get(i), x, y);
+            } catch (GeometryOperationException e) {
+                logger.error("While doing contains: " + e.getMessage(), e);
+                bResul = true;
+            }
+
+            if (bResul) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(double, double, double, double)
+     */
+    public boolean contains(double x, double y, double w, double h) {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(java.awt.geom.Point2D)
+     */
+    public boolean contains(Point2D p) {
+        boolean bResul;
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+            try {
+                bResul = containsPoint(
+                        (Geometry) geometries.get(i),
+                        p.getX(), p.getY());
+            } catch (GeometryOperationException e) {
+                logger.error("While doing contains: " + e.getMessage(), e);
+                bResul = true;
+            }
+            if (bResul) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(java.awt.geom.Rectangle2D)
+     */
+    public boolean contains(Rectangle2D r) {
+        boolean bResul;
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+
+            try {
+                bResul = containsRectangle(
+                        (Geometry) geometries.get(i),
+                        r.getMinX(), r.getMinY(), r.getWidth(), r.getHeight());
+            } catch (GeometryOperationException e) {
+                logger.error("While doing contains: " + e.getMessage(), e);
+                bResul = true;
+            }
+
+            if (bResul) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.geometries.iso.GM_Object#coordinateDimension()
+     */
+    public int getDimension() {
+        return 2;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#fastIntersects(double,
+     *      double, double, double)
+     */
+    public boolean fastIntersects(double x, double y, double w, double h) {
+
+        boolean resp = false;
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+
+            Geometry geom = (Geometry) geometries.get(i);
+
+            try {
+                resp = intersectsRectangle(geom, x, y, w, h);
+            } catch (GeometryOperationException e) {
+                logger.error("While doing fast intersects: " + e.getMessage(), e);
+                resp = true;
+            }
+
+            if (resp) {
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#getBounds()
+     */
+    public Rectangle getBounds() {
+        Rectangle r = null;
+        if (getPrimitivesNumber() > 0) {
+            r = ((Geometry) geometries.get(0)).getShape().getBounds();
+        }
+        for (int i = 1; i < getPrimitivesNumber(); i++) {
+            Rectangle r2 = ((Geometry) geometries.get(i)).getShape().getBounds();
+            r.add(r2);
+        }
+        return r;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getBounds2D()
+     */
+    public Rectangle2D getBounds2D() {
+        return null;
+    }
+
+    public Handler[] getHandlers(int type) {
+        int numPrimitives = getPrimitivesNumber();
+        List handlers = new ArrayList();
+        for (int i = 0; i < numPrimitives; i++) {
+            Handler[] currentHandlers = getPrimitiveAt(i).getHandlers(type);
+            for (int j = 0; j < currentHandlers.length; j++) {
+                handlers.add(currentHandlers[j]);
+            }
+        }
+        return (Handler[]) handlers.toArray(new Handler[handlers.size()]);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getInternalShape()
+     */
+    public Shape getInternalShape() {
+        return this;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getPathIterator(java.awt.geom.AffineTransform)
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        GeneralPathX gpx = new GeneralPathX();
+        int primiNum = getPrimitivesNumber();
+        if (primiNum > 0) {
+            Point2D p = ((Geometry) geometries.get(0)).getHandlers(Geometry.SELECTHANDLER)[0]
+                    .getPoint();
+            gpx.moveTo(p.getX(), p.getY());
+
+            for (int i = 1; i < primiNum; i++) {
+                p = ((Geometry) geometries.get(i)).getHandlers(Geometry.SELECTHANDLER)[0]
+                        .getPoint();
+                gpx.lineTo(p.getX(), p.getY());
+            }
+            Point2D p2 = ((Geometry) geometries.get(primiNum - 1)).getHandlers(Geometry.SELECTHANDLER)[((Geometry) geometries.get(primiNum - 1)).getHandlers(Geometry.SELECTHANDLER).length - 1]
+                    .getPoint();
+            gpx.lineTo(p2.getX(), p2.getY());
+        }
+        return gpx.getPathIterator(at);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getPathIterator(java.awt.geom.AffineTransform,
+     *      double)
+     */
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        GeneralPathX gpx = new GeneralPathX();
+        int primiNum = getPrimitivesNumber();
+        if (primiNum > 0) {
+
+            Geometry prim = null;
+            for (int i = 0; i < primiNum; i++) {
+                prim = (Geometry) geometries.get(i);
+                gpx.append(
+                        prim.getPathIterator(at, flatness),
+                        /*
+                         * This is a relevant change.
+                         * After BN 2056 this class will not return
+                         * connected path iterator. There will be MOVE_TO
+                         * between iterator of each primitive
+                         */
+                        false);
+            }
+        }
+        /*
+         * affine transform and flatness already applied in loop
+         */
+        return gpx.getPathIterator(null);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.geometries.iso.aggregate.GM_Aggregate#getPrimitiveAt(int)
+     */
+    public Primitive getPrimitiveAt(int i) {
+        if (i < getPrimitivesNumber()) {
+            return (Primitive) ((Geometry) geometries.get(i));
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.geometries.iso.aggregate.GM_Aggregate#getPrimitivesNumber()
+     */
+    public int getPrimitivesNumber() {
+        if (geometries == null) {
+            return 0;
+        }
+        return geometries.size();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#intersects(double, double, double, double)
+     */
+    public boolean intersects(double x, double y, double w, double h) {
+        boolean bResul;
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+
+            try {
+                bResul = containsRectangle((Geometry) geometries.get(i), x, y, w, h);
+            } catch (GeometryOperationException e) {
+                logger.error("While doing contains: " + e.getMessage(), e);
+                bResul = true;
+            }
+            if (bResul) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#intersects(java.awt.geom.Rectangle2D)
+     */
+    public boolean intersects(Rectangle2D r) {
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+
+            Geometry prim = this.getPrimitiveAt(i);
+            if (prim.intersects(r)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#isSimple()
+     */
+    public boolean isSimple() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#reProject(org.cresques.cts.ICoordTrans)
+     */
+    public void reProject(ICoordTrans ct) {
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+            ((Geometry) geometries.get(i)).reProject(ct);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#transform(java.awt.geom.AffineTransform)
+     */
+    public void transform(AffineTransform at) {
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+            ((Geometry) geometries.get(i)).transform(at);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.geometries.iso.GM_Object#getBoundary()
+     */
+    public Envelope getEnvelope() {
+        Envelope r = null;
+        if (getPrimitivesNumber() > 0) {
+            r = ((Geometry) geometries.get(0)).getEnvelope();
+        }
+        for (int i = 1; i < getPrimitivesNumber(); i++) {
+            Envelope r2 = ((Geometry) geometries.get(i)).getEnvelope();
+            r.add(r2);
+        }
+        return r;
+    }
+
+    /**
+     * @return the geometries
+     * @deprecated
+     */
+    public Geometry[] getGeometries() {
+        Geometry[] _geometries = new Geometry[geometries.size()];
+        for (int i = 0; i < geometries.size(); i++) {
+            _geometries[i] = ((Geometry) geometries.get(i));
+        }
+        return _geometries;
+    }
+
+    public FShape cloneFShape() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Handler[] getSelectHandlers() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Handler[] getStretchingHandlers() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public GeneralPathX getGeneralPath() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+
+    public void addPrimitive(Primitive primitive) {
+        geometries.add(primitive);
+    }
+
+    public Geometry union() 
+            throws GeometryOperationException, GeometryOperationNotSupportedException {
+        Geometry result = null;
+        if (getPrimitivesNumber() > 0) {
+            result = this.getPrimitiveAt(0);
+        }
+        for (int i = 1; i < getPrimitivesNumber(); i++) {
+            Primitive geom = this.getPrimitiveAt(i);
+            result = result.union(geom);
+        }
+        return result;
+    }
+
+    public Geometry intersection() 
+            throws GeometryOperationException, GeometryOperationNotSupportedException {
+        Geometry result = null;
+        if (getPrimitivesNumber() > 0) {
+            result = this.getPrimitiveAt(0);
+        }
+        for (int i = 1; i < getPrimitivesNumber(); i++) {
+            Primitive geom = this.getPrimitiveAt(i);
+            result = result.intersection(geom);
+        }
+        return result;
+    }
+
+    public void ensureCapacity(int capacity) {
+        ((ArrayList)this.geometries).ensureCapacity(capacity);
+    }
+        
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2DZ.java	(revision 42196)
@@ -0,0 +1,152 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import java.util.Collection;
+import java.util.Iterator;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.generalpath.DefaultGeometryManager;
+import org.gvsig.fmap.geom.generalpath.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.line.Line2DZ;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public class MultiCurve2DZ extends BaseMultiPrimitive implements MultiCurve, MultiLine {
+	private static final long serialVersionUID = 3079910108112255174L;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public MultiCurve2DZ(GeometryType geomType) {
+		super(geomType);
+	}
+
+	MultiCurve2DZ(GeometryType geomType, String id, IProjection projection) {
+		super(geomType, id, projection);
+	}
+
+	MultiCurve2DZ(GeometryType geomType, String id, IProjection projection, Line2DZ[] lines) {
+		super(geomType, id, projection, lines);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.core.FGeometryCollection#cloneGeometry()
+	 */
+	public Geometry cloneGeometry() {
+		MultiCurve2DZ auxCurve = new MultiCurve2DZ(geometryType, id, projection);
+		for (int i = 0; i < getPrimitivesNumber(); i++) {
+			auxCurve.addCurve((Curve)((Curve) geometries.get(i)).cloneGeometry());
+		}
+		return auxCurve;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiCurve#addCurve(org.gvsig.fmap.geom.primitive.Curve)
+	 */
+	public void addCurve(Curve curve) {
+		geometries.add(curve);
+	}
+
+        public void addPrimitive(Primitive primitive) {
+		addCurve((Curve)primitive);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiCurve#getCurveAt(int)
+	 */
+	public Curve getCurveAt(int index) {
+		return (Curve)getPrimitiveAt(index);
+	}
+
+    public MultiPolygon toPolygons() throws GeometryException {
+        if( this.getPrimitivesNumber() < 1 ) {
+            return null;
+        }
+        com.vividsolutions.jts.geom.Geometry jts_union = null;
+        jts_union = ((AbstractPrimitive)this.getPrimitiveAt(0)).toJTS();
+        for( int i=1; i<this.getPrimitivesNumber(); i++) {
+            jts_union = jts_union.union(((AbstractPrimitive)this.getPrimitiveAt(i)).toJTS());
+        }
+        com.vividsolutions.jts.operation.polygonize.Polygonizer jts_polygonizer = new com.vividsolutions.jts.operation.polygonize.Polygonizer();
+        
+        jts_polygonizer.add(jts_union);
+        Collection jts_polygons = jts_polygonizer.getPolygons();
+        if( jts_polygons == null && jts_polygons.isEmpty() ) {
+            return null;
+        }
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPolygon multipolygon = manager.createMultiPolygon(this.getGeometryType().getSubType());
+        Iterator it = jts_polygons.iterator();
+        while( it.hasNext() ) {
+            com.vividsolutions.jts.geom.Geometry jts_polygon = (com.vividsolutions.jts.geom.Geometry) it.next();
+            Polygon polygon = (Polygon) manager.createFrom(jts_polygon);
+            multipolygon.addPrimitive(polygon);
+        }
+        return multipolygon;
+    }
+
+    public MultiPoint toPoints() throws GeometryException {
+        if( this.getPrimitivesNumber() < 1 ) {
+            return null;
+        }
+        int numPoints = 0;
+        for( int i=0; i<this.getPrimitivesNumber(); i++ ) {
+            numPoints += ((Curve)(this.getPrimitiveAt(i))).getNumVertices();
+        }
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPoint multipoint = manager.createMultiPoint(this.getGeometryType().getSubType());
+        multipoint.ensureCapacity(numPoints);
+        for( int i=0; i<this.getPrimitivesNumber(); i++ ) {
+            Curve curve = (Curve)(this.getPrimitiveAt(i));
+            for( int n=0; n<curve.getNumVertices(); n++ ) {
+                multipoint.addPrimitive(curve.getVertex(n));
+            }
+        }        
+        return multipoint;
+    }
+
+    public MultiLine toLines() throws GeometryException {
+        return this;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive2D.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class BaseMultiPrimitive2D extends BaseMultiPrimitive implements
+MultiPrimitive {
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public BaseMultiPrimitive2D(GeometryType geomType) {
+		super(geomType);
+	}
+
+	/**
+	 * @param id
+	 * @param projection
+	 * @param geometries
+	 */
+	BaseMultiPrimitive2D(GeometryType geomType, String id, IProjection projection,
+			Geometry[] geometries) {
+		super(geomType, id, projection, geometries);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#cloneGeometry()
+	 */
+	public Geometry cloneGeometry() {
+		Primitive[] aux = new Primitive[getPrimitivesNumber()];
+		for (int i = 0; i < getPrimitivesNumber(); i++) {
+			aux[i] = (Primitive)((Geometry)geometries.get(i)).cloneGeometry()
+			.getInternalShape();
+		}
+		return new BaseMultiPrimitive2D(getGeometryType(), id, projection, aux);
+	}	
+        
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/BaseMultiPrimitive2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2DZ.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * Multipunto 3D.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class MultiPoint2DZ extends MultiPoint2D implements MultiPoint {
+	private static final long serialVersionUID = -2905029760276555041L;
+	double[] z = null;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public MultiPoint2DZ(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * 
+	 * @param id
+	 * @param projection
+	 * @param x
+	 * @param y
+	 * @param z
+	 */
+	MultiPoint2DZ(GeometryType geometryType, String id, IProjection projection, double[] x,
+			double[] y, double[] z) {
+		super(geometryType, id, projection, x, y);
+		this.z = z;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#cloneGeometry()
+	 */
+	public Geometry cloneGeometry() {
+		double[] x = new double[getPrimitivesNumber()];
+		double[] y = new double[getPrimitivesNumber()];
+		for (int i = 0; i < getPrimitivesNumber(); i++) {
+			Point2D p = ((Geometry)geometries.get(i)).getHandlers(Geometry.SELECTHANDLER)[0]
+					.getPoint();
+
+			x[i] = p.getX();
+			y[i] = p.getY();
+		}
+		return new MultiPoint2DZ(geometryType, id, projection, x, y, (double[]) z.clone());
+	}
+
+	/**
+	 * Devuelve un array con todos los valores de Z.
+	 * 
+	 * @return Array de Zs.
+	 */
+	public double[] getZs() {
+		return z;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2D.java	(revision 42196)
@@ -0,0 +1,152 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import java.util.Collection;
+import java.util.Iterator;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.generalpath.DefaultGeometryManager;
+import org.gvsig.fmap.geom.generalpath.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public class MultiCurve2D extends BaseMultiPrimitive implements MultiCurve, MultiLine {
+	private static final long serialVersionUID = -5279820875142516144L;
+     
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public MultiCurve2D(GeometryType geomType) {
+		super(geomType);		
+	}
+	
+	MultiCurve2D(GeometryType geomType, String id, IProjection projection) {
+		super(geomType, id, projection);
+	}
+
+	MultiCurve2D(GeometryType geomType, String id, IProjection projection, Line2D[] lines) {
+		super(geomType, id, projection, lines);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iver.cit.gvsig.fmap.core.FGeometryCollection#cloneGeometry()
+	 */
+	public Geometry cloneGeometry() {
+		MultiCurve2D auxCurve = new MultiCurve2D(geometryType, id, projection);
+		for (int i = 0; i < getPrimitivesNumber(); i++) {
+			auxCurve.addCurve((Curve)((Curve) geometries.get(i)).cloneGeometry());
+		}
+		return auxCurve;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiCurve#addCurve(org.gvsig.fmap.geom.primitive.Curve)
+	 */
+	public void addCurve(Curve curve) {
+		geometries.add(curve);
+	}
+
+        public void addPrimitive(Primitive primitive) {
+		addCurve((Curve)primitive);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiCurve#getCurveAt(int)
+	 */
+	public Curve getCurveAt(int index) {
+		return (Curve)getPrimitiveAt(index);
+	}
+
+    public MultiPolygon toPolygons() throws GeometryException {
+        if( this.getPrimitivesNumber() < 1 ) {
+            return null;
+        }
+        com.vividsolutions.jts.geom.Geometry jts_union = null;
+        jts_union = ((AbstractPrimitive)this.getPrimitiveAt(0)).toJTS();
+        for( int i=1; i<this.getPrimitivesNumber(); i++) {
+            jts_union = jts_union.union(((AbstractPrimitive)this.getPrimitiveAt(i)).toJTS());
+        }
+        com.vividsolutions.jts.operation.polygonize.Polygonizer jts_polygonizer = new com.vividsolutions.jts.operation.polygonize.Polygonizer();
+        
+        jts_polygonizer.add(jts_union);
+        Collection jts_polygons = jts_polygonizer.getPolygons();
+        if( jts_polygons == null && jts_polygons.isEmpty() ) {
+            return null;
+        }
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPolygon multi=  manager.createMultiPolygon(this.getGeometryType().getSubType());
+        Iterator it = jts_polygons.iterator();
+        while( it.hasNext() ) {
+            com.vividsolutions.jts.geom.Geometry jts_polygon = (com.vividsolutions.jts.geom.Geometry) it.next();
+            Polygon polygon = (Polygon) manager.createFrom(jts_polygon);
+            multi.addPrimitive(polygon);
+        }
+        return multi;
+    }
+
+    public MultiPoint toPoints() throws GeometryException {
+        if( this.getPrimitivesNumber() < 1 ) {
+            return null;
+        }
+        int numPoints = 0;
+        for( int i=0; i<this.getPrimitivesNumber(); i++ ) {
+            numPoints += ((Curve)(this.getPrimitiveAt(i))).getNumVertices();
+        }
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPoint multipoint = manager.createMultiPoint(this.getGeometryType().getSubType());
+        multipoint.ensureCapacity(numPoints);
+        for( int i=0; i<this.getPrimitivesNumber(); i++ ) {
+            Curve curve = (Curve)(this.getPrimitiveAt(i));
+            for( int n=0; n<curve.getNumVertices(); n++ ) {
+                multipoint.addPrimitive(curve.getVertex(n));
+            }
+        }        
+        return multipoint;
+    }
+
+    public MultiLine toLines() throws GeometryException {
+        return this;
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiCurve2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSolid2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSolid2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSolid2DZ.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.aggregate.MultiSolid;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Solid;
+import org.gvsig.fmap.geom.generalpath.primitive.solid.Solid2DZ;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public class MultiSolid2DZ extends BaseMultiPrimitive implements MultiSolid {
+	private static final long serialVersionUID = 6690458251466529134L;
+	
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public MultiSolid2DZ(GeometryType geomType) {
+		super(geomType);		
+	}
+	
+	MultiSolid2DZ(GeometryType geomType, String id, IProjection projection) {
+		super(geomType, id, projection);
+	}
+
+	MultiSolid2DZ(GeometryType geomType, String id, IProjection projection, Solid2DZ[] solids) {
+		super(geomType,id, projection, solids);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.geometries.iso.GM_Object#coordinateDimension()
+	 */
+	public int getDimension() {
+		return 3;
+	}	
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiSolid#addSolid(org.gvsig.fmap.geom.primitive.Solid)
+	 */
+	public void addSolid(Solid solid) {
+		geometries.add(solid);
+	}
+
+        public void addPrimitive(Primitive primitive) {
+		addSolid((Solid)primitive);
+	}
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiSolid#getSolidAt(int)
+	 */
+	public Solid getSolidAt(int index) {
+		return (Solid)getPrimitiveAt(index);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSolid2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface2D.java	(revision 42196)
@@ -0,0 +1,268 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.PrecisionModel;
+import com.vividsolutions.jts.geom.TopologyException;
+import com.vividsolutions.jts.precision.GeometryPrecisionReducer;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.generalpath.DefaultGeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public class MultiSurface2D extends BaseMultiPrimitive implements MultiSurface, MultiPolygon {
+	private static final long serialVersionUID = 625054010696136925L;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public MultiSurface2D(GeometryType geomType) {
+		super(geomType);		
+	}
+	
+	MultiSurface2D(GeometryType geomType, String id, IProjection projection) {
+		super(geomType, id, projection);
+	}
+
+	MultiSurface2D(GeometryType geomType, String id, IProjection projection,
+			Polygon2D[] polygons) {
+		super(geomType, id, projection, polygons);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iver.cit.gvsig.fmap.core.FGeometryCollection#cloneGeometry()
+	 */
+	public Geometry cloneGeometry() {
+		MultiSurface2D auxSurface = new MultiSurface2D(geometryType, id, projection);
+		for (int i = 0; i < getPrimitivesNumber(); i++) {
+			auxSurface.addSurface((Surface)((Surface) geometries.get(i)).cloneGeometry());
+		}
+		return auxSurface;
+	}	
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiSurface#addSurface(org.gvsig.fmap.geom.primitive.Surface)
+	 */
+	public void addSurface(Surface surface) {
+		geometries.add(surface);
+	}
+
+        public void addPrimitive(Primitive primitive) {
+		addSurface((Surface)primitive);
+	}
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiSurface#getSurfaceAt(int)
+	 */
+	public Surface getSurfaceAt(int index) {
+		return (Surface)getPrimitiveAt(index);
+	}
+	
+	
+    public Geometry union(Geometry other)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+
+        com.vividsolutions.jts.geom.Geometry this_jts, other_jts, union_jts;
+        Geometry resp = null;
+
+        try {
+            this_jts = getJTS();
+            other_jts = Converter.geometryToJts(other);
+            union_jts = this_jts.union(other_jts);
+            if (union_jts instanceof com.vividsolutions.jts.geom.Polygon) {
+                double tole = union_jts.getArea();
+                tole = tole * 1e-12;
+                union_jts = removeInvalidHoles((com.vividsolutions.jts.geom.Polygon) union_jts, tole);
+            } else {
+                if (union_jts instanceof com.vividsolutions.jts.geom.MultiPolygon) {
+                    double tole = union_jts.getArea();
+                    tole = tole * 1e-12;
+                    union_jts =
+                        removeInvalidHoles((com.vividsolutions.jts.geom.MultiPolygon) union_jts, tole);
+                }
+            }
+            resp = Converter.jtsToGeometry(union_jts);
+            return resp;
+        } catch (CreateGeometryException e) {
+            throw new GeometryOperationException(e);
+        } catch (TopologyException e) {
+            /*
+             * If JTS throws this, we'll try to simplify them
+             */
+            try {
+                this_jts = getJTS();
+                other_jts = Converter.geometryToJts(other);
+
+                PrecisionModel pm = new PrecisionModel(1000000);
+                GeometryPrecisionReducer gpr = new GeometryPrecisionReducer(pm);
+                this_jts = gpr.reduce(this_jts);
+                other_jts = gpr.reduce(other_jts);
+                union_jts = this_jts.union(other_jts);
+
+                if (union_jts instanceof com.vividsolutions.jts.geom.Polygon) {
+                    double tole = union_jts.getArea();
+                    tole = tole * 1e-12;
+                    union_jts = removeInvalidHoles((com.vividsolutions.jts.geom.Polygon) union_jts, tole);
+                } else {
+                    if (union_jts instanceof com.vividsolutions.jts.geom.MultiPolygon) {
+                        double tole = union_jts.getArea();
+                        tole = tole * 1e-12;
+                        union_jts =
+                            removeInvalidHoles((com.vividsolutions.jts.geom.MultiPolygon) union_jts, tole);
+                    }
+                }
+
+                resp = Converter.jtsToGeometry(union_jts);
+                return resp;
+            } catch (Exception exc) {
+                throw new GeometryOperationException(exc);
+            }
+        }
+    }
+    
+    private com.vividsolutions.jts.geom.Geometry getJTS() {
+        return Converter.geometryToJts(this);
+    }
+    
+    private com.vividsolutions.jts.geom.MultiPolygon removeInvalidHoles(com.vividsolutions.jts.geom.MultiPolygon mpo, double tol) {
+
+        GeometryFactory gf = new GeometryFactory(mpo.getPrecisionModel());
+        
+        int npo = mpo.getNumGeometries();
+        com.vividsolutions.jts.geom.Polygon[] pos = new com.vividsolutions.jts.geom.Polygon[npo];
+        for (int i=0; i<npo; i++) {
+            pos[i] = removeInvalidHoles((com.vividsolutions.jts.geom.Polygon) mpo.getGeometryN(i), tol);
+        }
+        return gf.createMultiPolygon(pos);
+    }
+    
+    private com.vividsolutions.jts.geom.Polygon removeInvalidHoles(com.vividsolutions.jts.geom.Polygon po, double tol) {
+        
+        GeometryFactory gf = new GeometryFactory(po.getPrecisionModel());
+        
+        int nholes = po.getNumInteriorRing();
+        List validholes = new ArrayList();
+        for (int i=0; i<nholes; i++) {
+            LineString ls = po.getInteriorRingN(i);
+            LinearRing lr = toLinearRing(ls, gf);
+            if (getLinearRingArea(lr, gf) > tol) {
+                validholes.add(lr);
+            }
+            
+        }
+        
+        if (validholes.size() < nholes) {
+            
+            LinearRing[] holes = (LinearRing[]) validholes.toArray(new LinearRing[0]);
+            return gf.createPolygon(
+                toLinearRing(po.getExteriorRing(), gf), holes);
+        } else {
+            return po;
+        }
+        
+    }
+
+    private double getLinearRingArea(LinearRing lr, GeometryFactory gf) {
+        com.vividsolutions.jts.geom.Polygon po = gf.createPolygon(lr);
+        double resp = po.getArea(); 
+        return resp;
+    }
+
+    private LinearRing toLinearRing(LineString ls, GeometryFactory gf) {
+        return gf.createLinearRing(ls.getCoordinateSequence());
+    }
+
+    public MultiPolygon toPolygons() throws GeometryException {
+        return this;
+    }
+
+    public MultiPoint toPoints() throws GeometryException {
+        if( this.getPrimitivesNumber() < 1 ) {
+            return null;
+        }
+        int numPoints = 0;
+        for( int i=0; i<this.getPrimitivesNumber(); i++ ) {
+            numPoints += ((Curve)(this.getPrimitiveAt(i))).getNumVertices();
+        }
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPoint multipoint = manager.createMultiPoint(this.getGeometryType().getSubType());
+        multipoint.ensureCapacity(numPoints);
+        for( int i=0; i<this.getPrimitivesNumber(); i++ ) {
+            Curve curve = (Curve)(this.getPrimitiveAt(i));
+            for( int n=0; n<curve.getNumVertices(); n++ ) {
+                multipoint.addPrimitive(curve.getVertex(n));
+            }
+        }        
+        return multipoint;
+    }
+
+    public MultiLine toLines() throws GeometryException {
+        if( this.getPrimitivesNumber() < 1 ) {
+            return null;
+        }
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiLine multi = manager.createMultiLine(this.getGeometryType().getSubType());
+        multi.ensureCapacity(this.getPrimitivesNumber());
+        for( int i=0; i<this.getPrimitivesNumber(); i++ ) {
+            Polygon polygon = (Polygon)(this.getPrimitiveAt(i));
+            MultiLine lines = polygon.toLines();
+            for( int n=0; n<lines.getPrimitivesNumber(); n++ ) {
+                multi.addPrimitive(lines.getPrimitiveAt(n));
+            }
+        }        
+        return multi;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2D.java	(revision 42196)
@@ -0,0 +1,296 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.generalpath.primitive.Envelope2D;
+import org.gvsig.fmap.geom.generalpath.primitive.point.Point2D;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * Multipunto 2D.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MultiPoint2D extends BaseMultiPrimitive implements MultiPoint {
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public MultiPoint2D(GeometryType geometryType) {
+		super(geometryType);		
+	}
+
+	/**
+	 * 
+	 * @param geometryType
+	 * @param id
+	 * @param projection
+	 */
+	MultiPoint2D(GeometryType geometryType, String id, IProjection projection) {
+		super(geometryType, id, projection);
+	}
+	
+	/**
+	 * 
+	 * @param geometryType
+	 * @param id
+	 * @param projection
+	 * @param points
+	 */
+	public MultiPoint2D(GeometryType geometryType, String id, IProjection projection, Point2D[] points) {
+		super(geometryType, id, projection, points);
+	}
+	
+	
+	
+	/**
+	 * 
+	 * @param id
+	 * @param projection
+	 * @param x
+	 * @param y
+	 */
+	MultiPoint2D(GeometryType geometryType, String id, IProjection projection, double[] x,
+			double[] y) {
+		super(geometryType, id, projection);
+		geometries = new ArrayList();
+		for (int i = 0; i < x.length; i++) {
+			geometries.add(new Point2D(x[i], y[i]));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#cloneGeometry()
+	 */
+	public Geometry cloneGeometry() {
+		MultiPoint auxPoint = new MultiPoint2D(geometryType, id, projection);
+		for (int i = 0; i < getPrimitivesNumber(); i++) {
+			auxPoint.addPoint((Point)((Point) geometries.get(i)).cloneGeometry());
+		}
+		return auxPoint;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.core.FGeometryCollection#getBounds()
+	 */
+	public Rectangle getBounds() {
+		Rectangle r = null;
+		if (getNumgeometries() > 0) {
+			r = ((Point)geometries.get(0)).getShape().getBounds();
+		}
+		
+		Rectangle2D r2d = new Rectangle2D.Double(
+				r.x, 
+				r.y, 
+				r.width,
+				r.height);
+		
+		for (int i = 1; i < getNumgeometries(); i++) {
+			java.awt.geom.Point2D p = ((Point)geometries.get(i))
+					.getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
+			r2d.add(p.getX(), p.getY());
+		}
+		
+		Rectangle resp = new Rectangle(
+				Math.round((float) r2d.getMinX()),
+				Math.round((float) r2d.getMinY()),
+				Math.max(1, Math.round((float) r2d.getWidth())),
+				Math.max(1, Math.round((float) r2d.getHeight())));
+		// w,h >= 1
+		
+		return resp;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#getBounds2D()
+	 */
+	public Rectangle2D getBounds2D() {
+		Rectangle2D r = null;
+		if (getNumgeometries() > 0) {
+			java.awt.geom.Point2D p = ((Point)geometries.get(0))
+					.getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
+
+			r = new Rectangle2D.Double(p.getX(), p.getY(), 0.001, 0.001);
+		}
+		for (int i = 1; i < getNumgeometries(); i++) {
+			java.awt.geom.Point2D p = ((Point)geometries.get(i))
+					.getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
+			r.add(p.getX(), p.getY());
+		}
+		return r;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.core.FShape#cloneFShape()
+	 */
+	public FShape cloneFShape() {
+		Point2D[] aux = new Point2D[getNumgeometries()];
+		for (int i = 0; i < getNumgeometries(); i++) {
+			aux[i] = (Point2D) ((Point)geometries.get(i)).cloneGeometry().getInternalShape();
+		}
+		return (FShape) new MultiPoint2D(getGeometryType(), id, projection, aux);
+	}
+
+	/**
+	 * @return the numbre of points
+	 * @deprecated use getPrimitivesNumber
+	 */
+	public int getNumgeometries() {
+		return getPrimitivesNumber();
+	}
+
+	/**
+	 * @return the numbre of points
+	 * @deprecated use getPrimitivesNumber
+	 */
+	public int getNumPoints() {
+		return getPrimitivesNumber();
+	}
+
+	public Point2D getPoint(int i) {
+		return (Point2D) ((Point)geometries.get(i)).getInternalShape();
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class PointHandler extends AbstractHandler {
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 */
+		public PointHandler(int i, Point2D p) {
+			point = new java.awt.geom.Point2D.Double(p.getX(), p.getY());
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+			java.awt.geom.Point2D p = ((Point)geometries.get(index))
+					.getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
+
+			point.setLocation(p.getX() + x, p.getY() + y);
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+			point.setLocation(x, y);
+		}
+
+	}
+
+	public void transform(AffineTransform at) {
+		for (int i = 0; i < getNumgeometries(); i++) {
+			((Point)geometries.get(i)).transform(at);
+		}
+
+	}
+
+	public Envelope getEnvelope() {
+		Envelope r = null;
+		if (getNumgeometries() > 0) {
+			java.awt.geom.Point2D p = ((Point)geometries.get(0))
+					.getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
+
+			r = new Envelope2D(p.getX(), p.getY(), p.getX()+0.001, p.getY()+0.001);
+		}
+		for (int i = 1; i < getNumgeometries(); i++) {
+			java.awt.geom.Point2D p = ((Point)geometries.get(i))
+					.getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
+			r.add(new Envelope2D(p.getX(), p.getY(),p.getX()+0.001, p.getY()+0.001));
+		}
+		return r;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiPoint#addPoint(org.gvsig.fmap.geom.primitive.Point)
+	 */
+	public void addPoint(Point point) {
+		geometries.add(point);
+	}
+
+        public void addPrimitive(Primitive primitive) {
+		addPoint((Point)primitive);
+	}
+        
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiPoint#setPoints(double[], double[])
+	 */
+	public void setPoints(double[] x, double[] y) {
+		geometries = new ArrayList();
+		for (int i = 0; i < x.length; i++) {
+			geometries.add(new Point2D(x[i], y[i]));
+		}	
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.aggregate.MultiPoint#getPointAt(int)
+	 */
+	public Point getPointAt(int index) {
+		return (Point)getPrimitiveAt(index) ;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiPoint2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface3D.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.aggregate;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MultiSurface3D extends MultiSurface2D {
+    private static final long serialVersionUID = 3088528632507696618L;
+
+    public MultiSurface3D(GeometryType geomType) {
+        super(geomType);       
+    }
+    
+    public MultiSurface3D(GeometryType geomType, String id,
+        IProjection projection) {
+        super(geomType, id, projection);       
+    }
+
+    public Geometry cloneGeometry() {
+        MultiSurface3D auxSurface = new MultiSurface3D(geometryType, id, projection);
+        for (int i = 0; i < getPrimitivesNumber(); i++) {
+            auxSurface.addSurface((Surface)((Surface) geometries.get(i)).cloneGeometry());
+        }
+        return auxSurface;
+    }
+    
+    public int getDimension() {
+        return 3;
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/aggregate/MultiSurface3D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeneralPathXIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeneralPathXIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeneralPathXIterator.java	(revision 42196)
@@ -0,0 +1,185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * AWT {@link PathIterator} to draw a {@link GeneralPathX} object.
+ * 
+ * While iterating the {@link GeneralPathX) each point coordinates are 
+ * converted to int. If a segment is a PathIterator#SEG_LINETO and the 
+ * integer coordinates are the same as the previous point ones, the point 
+ * is ignored and the next one is looked for.
+ * 
+ * @author gvSIG Team
+ */
+public class DrawGeneralPathXIterator implements PathIterator {
+
+    protected int typeIdx = -1;
+    protected int pointIdx = 0;
+    protected GeneralPathX path;
+    protected AffineTransform affine;
+
+    /**
+     * This array keeps the "real" coordinates (double precision) which
+     * will afterwards be rounded to int. It is final and created with
+     * its maximum possible size. This does not have a performance cost
+     * because only relevant indices are read/written (also when applying
+     * an affine transformation)
+     */
+    private final double[] currentPointRealCoords = new double[] { 0, 0, 0, 0, 0, 0 };
+    
+    /**
+     * This array keeps the rounded (int) coordinates.
+     * It is final and created with
+     * its maximum possible size. This does not have a performance cost
+     * because only relevant indices are read/written.
+     */
+    private final int[] currentPointCoords = new int[] { 0, 0, 0, 0, 0, 0 };
+    
+    private final int[] previousPointCoords = new int[] { 0, 0 };
+
+    private int currentType = -1;
+    private int previousType = -1;
+
+    private static final int curvesize[] = { 1, 1, 2, 3, 0 };
+
+    private final int numTypes;
+    private final int numPoints;
+
+    /**
+     * Constructs an iterator given a GeneralPathX.
+     * 
+     * @see GeneralPathX#getPathIterator
+     */
+    public DrawGeneralPathXIterator(GeneralPathX path) {
+        this(path, null);
+    }
+
+    /**
+     * Constructs an iterator given a GeneralPathX and an optional
+     * AffineTransform.
+     * 
+     * @see GeneralPathX#getPathIterator
+     */
+    public DrawGeneralPathXIterator(GeneralPathX path, AffineTransform at) {
+        this.path = path;
+        this.affine = at;
+        // Go to the first segment
+        this.pointIdx = 0;
+        this.numPoints = path.getNumCoords();
+        this.typeIdx = 0;
+        this.numTypes = path.getNumTypes();
+        if (numTypes > 0) {
+            currentType = path.getTypeAt(typeIdx);
+            readCurrentSegmentCoordsAsInt();
+            previousType = currentType;
+            previousPointCoords[0] = currentPointCoords[0];
+            previousPointCoords[1] = currentPointCoords[1];
+        }
+    }
+
+    public int getWindingRule() {
+        return path.getWindingRule();
+    }
+
+    public boolean isDone() {
+        return typeIdx >= numTypes;
+    }
+
+    public void next() {
+        do {
+            typeIdx++;
+            pointIdx += curvesize[currentType];
+            if (typeIdx < numTypes) {
+                currentType = path.getTypeAt(typeIdx);
+                if (SEG_CLOSE != currentType) {
+                    readCurrentSegmentCoordsAsInt();
+                }
+            } else {
+                // We have reached past the last segment
+                return;
+            }
+        } while (isSameSegment());
+
+        previousType = currentType;
+        previousPointCoords[0] = currentPointCoords[0];
+        previousPointCoords[1] = currentPointCoords[1];
+    }
+
+    private final boolean isSameSegment() {
+        return SEG_LINETO == currentType
+            && (SEG_LINETO == previousType || SEG_MOVETO == previousType)
+            && currentPointCoords[0] == previousPointCoords[0]
+            && currentPointCoords[1] == previousPointCoords[1];
+    }
+
+    private void readCurrentSegmentCoordsAsInt() {
+        int currentSize = curvesize[currentType];
+
+        for (int i = 0; i < currentSize; i++) {
+            readPoint(i * 2, pointIdx + i);
+        }
+
+        if (affine != null && !affine.isIdentity()) {
+            affine.transform(currentPointRealCoords, 0, currentPointRealCoords,
+                0, currentSize);
+        }
+
+        for (int i = 0; i < currentSize * 2; i++) {
+            currentPointCoords[i] = (int) currentPointRealCoords[i];
+        }
+    }
+
+    private void readPoint(int currentCoordsPos, int currentPointIdx) {
+        Point point = path.getPointAt(currentPointIdx);
+        currentPointRealCoords[currentCoordsPos] = point.getX();
+        currentPointRealCoords[currentCoordsPos + 1] = point.getY();
+    }
+
+    public int currentSegment(float[] coords) {
+        if (SEG_CLOSE != currentType) {
+            int size = curvesize[currentType] * 2;
+
+            for (int i = 0; i < size; i++) {
+                coords[i] = currentPointCoords[i];
+            }
+        }
+        return currentType;
+    }
+
+    public int currentSegment(double[] coords) {
+        int size = curvesize[currentType] * 2;
+
+        for (int i = 0; i < size; i++) {
+            coords[i] = currentPointCoords[i];
+        }
+        return currentType;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeneralPathXIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeometryShape.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeometryShape.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeometryShape.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.FlatteningPathIterator;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.geom.Geometry;
+
+/**
+ * Shape implementation used to draw in AWT a {@link Geometry} object.
+ * The {@link Geometry} coordinates will become converted to integer after
+ * applying any needed transformations. Also they will be simplified by
+ * ignoring repeated points.
+ * 
+ * @author gvSIG Team
+ */
+public class DrawGeometryShape implements Shape {
+
+    private Geometry geometry;
+    private AffineTransform affineTransform = null;
+
+    /**
+     * Constructor.
+     * 
+     * @param geometry
+     *            to draw in AWT
+     */
+    public DrawGeometryShape(Geometry geometry) {
+        this.geometry = geometry;
+    }
+
+    public DrawGeometryShape(Geometry geometry,
+        AffineTransform affineTransform) {
+        this.geometry = geometry;
+        this.affineTransform = affineTransform;
+    }
+
+    public Rectangle getBounds() {
+        return geometry.getBounds();
+    }
+
+    public boolean contains(double x, double y) {
+        return geometry.contains(x, y);
+    }
+
+    public boolean contains(Point2D p) {
+        return geometry.contains(p);
+    }
+
+    public boolean intersects(double x, double y, double w, double h) {
+        return geometry.intersects(x, y, w, h);
+    }
+
+    public boolean intersects(Rectangle2D r) {
+        return geometry.intersects(r);
+    }
+
+    public boolean contains(double x, double y, double w, double h) {
+        return geometry.contains(x, y, w, h);
+    }
+
+    public Rectangle2D getBounds2D() {
+        return geometry.getBounds2D();
+    }
+
+    public boolean contains(Rectangle2D r) {
+        return geometry.contains(r);
+    }
+
+    public PathIterator getPathIterator(AffineTransform at) {
+        AffineTransform applicableTransform = at;
+
+        if (affineTransform != null) {
+            if (at != null && at.getType() != AffineTransform.TYPE_IDENTITY) {
+                applicableTransform = (AffineTransform) at.clone();
+                applicableTransform.concatenate(affineTransform);
+            } else {
+                applicableTransform = affineTransform;
+            }
+        }
+
+        return new DrawGeneralPathXIterator(geometry.getGeneralPath(),
+            applicableTransform);
+    }
+
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return new FlatteningPathIterator(getPathIterator(at), flatness);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DrawGeometryShape.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathAdapter.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.FlatteningPathIterator;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.generalpath.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.generalpath.gputils.GeneralPathXIteratorSimple;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * @deprecated
+ */
+public class GeneralPathAdapter implements Shape {
+    private AffineTransform affineTransform;
+    private GeneralPathX generalPathX;
+
+    public GeneralPathAdapter(AffineTransform affineTransform,
+        GeneralPathX generalPathX) {
+        super();
+        this.affineTransform = affineTransform;
+        this.generalPathX = generalPathX;
+    }
+
+    public Rectangle getBounds() {      
+        return generalPathX.getBounds();
+    }
+
+    public Rectangle2D getBounds2D() {       
+        return generalPathX.getBounds2D();
+    }
+
+    public boolean contains(double x, double y) {
+        return generalPathX.contains(x, y);
+    }
+
+    public boolean contains(Point2D p) {       
+        return generalPathX.contains(p);
+    }
+
+    public boolean intersects(double x, double y, double w, double h) {      
+        return generalPathX.intersects(x, y, w, h);
+    }
+
+    public boolean intersects(Rectangle2D r) {       
+        return generalPathX.intersects(r);
+    }
+
+    public boolean contains(double x, double y, double w, double h) {     
+        return generalPathX.contains(x, y, w, h);
+    }
+
+    public boolean contains(Rectangle2D r) {       
+        return generalPathX.contains(r);
+    }
+
+    public PathIterator getPathIterator(AffineTransform at) {     
+        AffineTransform applicableTransform = null;
+
+        if (affineTransform != null){
+            if (at != null && at.getType() != AffineTransform.TYPE_IDENTITY){
+                applicableTransform = (AffineTransform)at.clone();
+                applicableTransform.concatenate(affineTransform);                
+            }else{
+                applicableTransform = affineTransform;
+            }
+        }else{
+            applicableTransform = at;
+        }        
+
+        if (generalPathX.isSimple()){
+            return new GeneralPathXIteratorSimple(generalPathX, applicableTransform);
+        }else{
+            return new GeneralPathXIterator(generalPathX, applicableTransform);
+        }
+    }
+
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return new FlatteningPathIterator(getPathIterator(at), flatness);        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIterator.java	(revision 42196)
@@ -0,0 +1,197 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+/*
+ * Based on portions of code from the
+ * OpenJDK project (Copyright (c) 1996, 2006, Oracle and/or its affiliates)
+ */
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import org.gvsig.fmap.geom.primitive.IGeneralPathX;
+
+/*
+ * @(#)GeneralPathXIterator.java	1.21 03/01/23
+ *
+ * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/**
+ * This class represents the iterator for General Paths X.
+ * It can be used to retrieve all of the elements in a GeneralPathX.
+ * The {@link GeneralPathX#getPathIterator}
+ *  method is used to create a
+ * GeneralPathXIterator for a particular GeneralPathX.
+ * The iterator can be used to iterator the path only once.
+ * Subsequent iterations require a new iterator.
+ *
+ * @see GeneralPathX
+ *
+ * @version 10 Feb 1997
+ * @author	Jim Graham
+ * @deprecated 
+ *      this class will be removed to the API. Use the
+ *      geometry methods to get the internal points.
+ */
+public class GeneralPathXIterator implements PathIterator {
+    protected int typeIdx = 0;
+    protected int pointIdx = 0;
+    protected IGeneralPathX path;
+    protected AffineTransform affine;
+
+    private static final int curvesize[] = {1, 1, 2, 3, 0};
+
+    /**
+     * Constructs an iterator given a GeneralPathX.
+     * @see GeneralPathX#getPathIterator
+     */
+    public GeneralPathXIterator(IGeneralPathX path) {
+        this(path, null);
+    }
+
+    /**
+     * Constructs an iterator given a GeneralPathX and an optional
+     * AffineTransform.
+     * @see GeneralPathX#getPathIterator
+     */
+    public GeneralPathXIterator(IGeneralPathX path, AffineTransform at) {
+        this.path = path;
+        this.affine = at;
+    }
+
+    /**
+     * Return the winding rule for determining the interior of the
+     * path.
+     * @see PathIterator#WIND_EVEN_ODD
+     * @see PathIterator#WIND_NON_ZERO
+     */
+    public int getWindingRule() {
+        return path.getWindingRule();
+    }
+
+    /**
+     * Tests if there are more points to read.
+     * @return true if there are more points to read
+     */
+    public boolean isDone() {
+        return (typeIdx >= path.getNumTypes());
+    }
+
+    /**
+     * Moves the iterator to the next segment of the path forwards
+     * along the primary direction of traversal as long as there are
+     * more points in that direction.
+     */
+    public void next() {        
+        int type = path.getTypeAt(typeIdx++);
+        pointIdx += curvesize[type];
+    }
+
+    /**
+     * Returns the coordinates and type of the current path segment in
+     * the iteration.
+     * The return value is the path segment type:
+     * SEG_MOVETO, SEG_LINETO, SEG_QUADTO, SEG_CUBICTO, or SEG_CLOSE.
+     * A float array of length 6 must be passed in and may be used to
+     * store the coordinates of the point(s).
+     * Each point is stored as a pair of float x,y coordinates.
+     * SEG_MOVETO and SEG_LINETO types will return one point,
+     * SEG_QUADTO will return two points,
+     * SEG_CUBICTO will return 3 points
+     * and SEG_CLOSE will not return any points.
+     * @see PathIterator#SEG_MOVETO
+     * @see PathIterator#SEG_LINETO
+     * @see PathIterator#SEG_QUADTO
+     * @see PathIterator#SEG_CUBICTO
+     * @see PathIterator#SEG_CLOSE
+     */
+    public int currentSegment(float[] coords) {
+        int type = path.getTypeAt(typeIdx);
+        int numPoints = curvesize[type];
+        int offset = 0;
+        for (int i=0 ; i<numPoints ; i++){
+            double[] coordinates = path.getCoordinatesAt(pointIdx + i);       
+            if (affine != null) {
+                affine.transform(coordinates, 0, coords, offset, 1);
+            } else {
+                coords[offset] = (float) coordinates[0];
+                coords[offset+1] = (float) coordinates[1];              
+            }
+            offset = offset + 2;
+        }
+        return type;
+    }
+
+    /**
+     * Returns the coordinates and type of the current path segment in
+     * the iteration.
+     * The return value is the path segment type:
+     * SEG_MOVETO, SEG_LINETO, SEG_QUADTO, SEG_CUBICTO, or SEG_CLOSE.
+     * A double array of length 6 must be passed in and may be used to
+     * store the coordinates of the point(s).
+     * Each point is stored as a pair of double x,y coordinates.
+     * SEG_MOVETO and SEG_LINETO types will return one point,
+     * SEG_QUADTO will return two points,
+     * SEG_CUBICTO will return 3 points
+     * and SEG_CLOSE will not return any points.
+     * @see PathIterator#SEG_MOVETO
+     * @see PathIterator#SEG_LINETO
+     * @see PathIterator#SEG_QUADTO
+     * @see PathIterator#SEG_CUBICTO
+     * @see PathIterator#SEG_CLOSE
+     */
+    public int currentSegment(double[] coords) {
+        int type = path.getTypeAt(typeIdx);
+        int numPoints = curvesize[type];       
+        int offset = 0;
+        for (int i=0 ; i<numPoints ; i++){
+            double[] coordinates = path.getCoordinatesAt(pointIdx + i);        
+            if (affine != null) {            
+                affine.transform(coordinates, 0, coords, offset, 1);
+            } else {           
+                System.arraycopy(coordinates, 0, coords, offset, 2);
+            }
+            offset = offset + 2;
+        }
+        return type;
+    } 
+    
+    public int currentSegment3D(double[] coords) {
+        int type = path.getTypeAt(typeIdx);
+        int numPoints = curvesize[type];       
+        int offset = 0;
+        for (int i=0 ; i<numPoints ; i++){
+            double[] coordinates = path.get3DCoordinatesAt(pointIdx + i);        
+            if (affine != null) {            
+                affine.transform(coordinates, 0, coords, offset, 1);
+            } else {           
+                System.arraycopy(coordinates, 0, coords, offset, 3);
+            }
+            offset = offset + 3;
+        }
+        return type;
+    }     
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/PointIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/PointIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/PointIterator.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+
+/**
+ * A iterator to retrieve all the points of a 
+ * {@link Geometry}
+ *
+ * @author FJP
+ */
+public class PointIterator extends GeneralPathXIterator {
+	/** Transform applied on the coordinates during iteration */
+	private AffineTransform at;
+
+	/** The point we are going to provide when asked for coordinates */
+	private Point2D p;
+
+	/** True when the point has been read once */
+	private boolean done;
+
+	/**
+	 * Creates a new PointIterator object.
+	 *
+	 * @param p The polygon
+	 * @param at The affine transform applied to coordinates during iteration
+	 */
+	public PointIterator(Point2D p, AffineTransform at) {
+		super(new GeneralPathX());
+		if (at == null) {
+			at = new AffineTransform();
+		}
+
+		this.at = at;
+		this.p = p;
+		done = false;
+	}
+
+	/**
+	 * Return the winding rule for determining the interior of the path.
+	 *
+	 * @return <code>WIND_EVEN_ODD</code> by default.
+	 */
+	public int getWindingRule() {
+		return PathIterator.WIND_EVEN_ODD;
+	}
+
+	/**
+	 * @see java.awt.geom.PathIterator#next()
+	 */
+	public void next() {
+		done = true;
+	}
+
+	/**
+	 * @see java.awt.geom.PathIterator#isDone()
+	 */
+	public boolean isDone() {
+		return done;
+	}
+
+	/**
+	 * @see java.awt.geom.PathIterator#currentSegment(double[])
+	 */
+	public int currentSegment(double[] coords) {
+		coords[0] = p.getX();
+		coords[1] = p.getY();
+		at.transform(coords, 0, coords, 0, 1);
+
+		return PathIterator.SEG_MOVETO;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.geom.PathIterator#currentSegment(float[])
+	 */
+	public int currentSegment(float[] coords) {
+		coords[0] = (float) p.getX();
+		coords[1] = (float) p.getY();
+		at.transform(coords, 0, coords, 0, 1);
+
+		return PathIterator.SEG_MOVETO;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/PointIterator.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/FShape.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/FShape.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/FShape.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.io.Serializable;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.handler.Handler;
+
+/**
+ * <p>The interface <code>FShape</code> extends <code>Shape</code> adding shape types, and allowing
+ *  to work with it as a geometry.</p>
+ *  
+ *  @deprecated
+ */
+public interface FShape extends Shape, Serializable {
+	/**
+	 * Gets the geometry type of this shape.
+	 *
+	 * @return int the geometry type of this shape.
+	 */
+	public int getShapeType();
+	
+	/**
+	 * Creates and returns a shape equal and independent of this one.
+	 *
+	 * @return the new shape.
+	 */
+	public FShape cloneFShape();
+	/**
+	 * Re-projects this shape using transformation coordinates. 
+	 *
+	 * @param ct the transformation coordinates
+	 */
+	public void reProject(ICoordTrans ct);
+
+	/**
+	 * Returns the handlers they utilized to stretch the geometries.
+	 *
+	 * @return Handlers the handlers used to stretch the geometries
+	 */
+	public Handler[] getStretchingHandlers();
+
+	/**
+	 * Returns the handlers used to select the geometries.
+	 *
+	 * @return Handlers the handlers used to select the geometries
+	 */
+	public Handler[] getSelectHandlers();
+	/**
+	 * Executes a 2D transformation on this shape, using six parameters.
+	 * 
+	 * @param at object that allows execute the affine transformation
+	 * 
+	 * @see AffineTransform
+	 */
+	public void transform(AffineTransform at);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/FShape.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIteratorSimple.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIteratorSimple.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIteratorSimple.java	(revision 42196)
@@ -0,0 +1,193 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+/*
+ * Based on portions of code from the
+ * OpenJDK project (Copyright (c) 1996, 2006, Oracle and/or its affiliates)
+ */
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import org.gvsig.fmap.geom.primitive.IGeneralPathX;
+
+/*
+ * @(#)GeneralPathXIterator.java	1.21 03/01/23
+ *
+ * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/**
+ * This class represents the iterator for General Paths X.
+ * It can be used to retrieve all of the elements in a GeneralPathX.
+ * The {@link GeneralPathX#getPathIterator}
+ *  method is used to create a
+ * GeneralPathXIterator for a particular GeneralPathX.
+ * The iterator can be used to iterator the path only once.
+ * Subsequent iterations require a new iterator.
+ *
+ * @see GeneralPathX
+ *
+ * @version 10 Feb 1997
+ * @author	Jim Graham
+ * @deprecated 
+ *      this class will be removed to the API. Use the
+ *      geometry methods to get the internal points.
+ */
+public class GeneralPathXIteratorSimple implements PathIterator {
+    protected int typeIdx = 0;
+    protected int pointIdx = 0;
+    protected IGeneralPathX path;
+    protected AffineTransform affine;
+
+    private static final int curvesize[] = {1, 1, 2, 3, 0};
+
+    /**
+     * Constructs an iterator given a GeneralPathX.
+     * @see GeneralPathX#getPathIterator
+     */
+    public GeneralPathXIteratorSimple(IGeneralPathX path) {
+        this(path, null);
+    }
+
+    /**
+     * Constructs an iterator given a GeneralPathX and an optional
+     * AffineTransform.
+     * @see GeneralPathX#getPathIterator
+     */
+    public GeneralPathXIteratorSimple(IGeneralPathX path, AffineTransform at) {
+        this.path = path;
+        this.affine = at;
+    }
+
+    /**
+     * Return the winding rule for determining the interior of the
+     * path.
+     * @see PathIterator#WIND_EVEN_ODD
+     * @see PathIterator#WIND_NON_ZERO
+     */
+    public int getWindingRule() {
+        return path.getWindingRule();
+    }
+
+    /**
+     * Tests if there are more points to read.
+     * @return true if there are more points to read
+     */
+    public boolean isDone() {
+        return (typeIdx >= path.getNumTypes());
+    }
+
+    /**
+     * Moves the iterator to the next segment of the path forwards
+     * along the primary direction of traversal as long as there are
+     * more points in that direction.
+     */
+    public void next() {        
+        int type = path.getTypeAt(typeIdx++);
+        pointIdx += curvesize[type];
+    }
+
+    /**
+     * Returns the coordinates and type of the current path segment in
+     * the iteration.
+     * The return value is the path segment type:
+     * SEG_MOVETO, SEG_LINETO, SEG_QUADTO, SEG_CUBICTO, or SEG_CLOSE.
+     * A float array of length 6 must be passed in and may be used to
+     * store the coordinates of the point(s).
+     * Each point is stored as a pair of float x,y coordinates.
+     * SEG_MOVETO and SEG_LINETO types will return one point,
+     * SEG_QUADTO will return two points,
+     * SEG_CUBICTO will return 3 points
+     * and SEG_CLOSE will not return any points.
+     * @see PathIterator#SEG_MOVETO
+     * @see PathIterator#SEG_LINETO
+     * @see PathIterator#SEG_QUADTO
+     * @see PathIterator#SEG_CUBICTO
+     * @see PathIterator#SEG_CLOSE
+     */
+    public int currentSegment(float[] coords) {
+        int type = path.getTypeAt(typeIdx);
+        if (type != PathIterator.SEG_CLOSE){
+            double[] coordinates = path.getCoordinatesAt(pointIdx);       
+            if (affine != null) {
+                affine.transform(coordinates, 0,
+                    coords, 0,
+                    1);
+            } else {
+                coords[0] = (float) coordinates[0];
+                coords[1] = (float) coordinates[1];              
+            }
+        }
+        return type;
+    }
+
+    /**
+     * Returns the coordinates and type of the current path segment in
+     * the iteration.
+     * The return value is the path segment type:
+     * SEG_MOVETO, SEG_LINETO, SEG_QUADTO, SEG_CUBICTO, or SEG_CLOSE.
+     * A double array of length 6 must be passed in and may be used to
+     * store the coordinates of the point(s).
+     * Each point is stored as a pair of double x,y coordinates.
+     * SEG_MOVETO and SEG_LINETO types will return one point,
+     * SEG_QUADTO will return two points,
+     * SEG_CUBICTO will return 3 points
+     * and SEG_CLOSE will not return any points.
+     * @see PathIterator#SEG_MOVETO
+     * @see PathIterator#SEG_LINETO
+     * @see PathIterator#SEG_QUADTO
+     * @see PathIterator#SEG_CUBICTO
+     * @see PathIterator#SEG_CLOSE
+     */
+    public int currentSegment(double[] coords) {
+        int type = path.getTypeAt(typeIdx);
+        if (type != PathIterator.SEG_CLOSE){
+            double[] coordinates = path.getCoordinatesAt(pointIdx);
+            if (affine != null) {            
+                affine.transform(coordinates, 0, coords, 0, 1);
+            } else {           
+                coords[0] = coordinates[0];
+                coords[1] = coordinates[1];      
+            }  
+        }
+        return type;
+    } 
+    
+    public int currentSegment3D(double[] coords) {
+        int type = path.getTypeAt(typeIdx);
+        if (type != PathIterator.SEG_CLOSE){
+            double[] coordinates = path.get3DCoordinatesAt(pointIdx);
+            if (affine != null) {            
+                affine.transform(coordinates, 0, coords, 0, 1);
+            } else {           
+                coords[0] = coordinates[0];
+                coords[1] = coordinates[1];      
+                coords[2] = coordinates[2];      
+            }  
+        }
+        return type;
+    } 
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/GeneralPathXIteratorSimple.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DefaultGeneralPathX.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DefaultGeneralPathX.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DefaultGeneralPathX.java	(revision 42196)
@@ -0,0 +1,965 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.gputils;
+
+/*
+ * Based on portions of code from java.awt.geom.GeneralPath of the
+ * OpenJDK project (Copyright (c) 1996, 2006, Oracle and/or its affiliates)
+ */
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.FlatteningPathIterator;
+import java.awt.geom.IllegalPathStateException;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.jdk.GeomUtilities;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateList;
+import com.vividsolutions.jts.geom.CoordinateSequences;
+import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;
+import java.io.Serializable;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.IGeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.generalpath.primitive.point.Point2DZ;
+
+/**
+ * The <code>GeneralPathX</code> class represents a geometric path
+ * constructed from straight lines, and quadratic and cubic
+ * (B&eacute;zier) curves. It can contain multiple subpaths.
+ * <p>
+ * The winding rule specifies how the interior of a path is determined. There
+ * are two types of winding rules: EVEN_ODD and NON_ZERO.
+ * <p>
+ * An EVEN_ODD winding rule means that enclosed regions of the path alternate
+ * between interior and exterior areas as traversed from the outside of the path
+ * towards a point inside the region.
+ * <p>
+ * A NON_ZERO winding rule means that if a ray is drawn in any direction from a
+ * given point to infinity and the places where the path intersects the ray are
+ * examined, the point is inside of the path if and only if the number of times
+ * that the path crosses the ray from left to right does not equal the number of
+ * times that the path crosses the ray from right to left.
+ * 
+ * @version 1.58, 01/23/03
+ * @author Jim Graham
+ * @deprecated
+ *             use the geometry methods
+ */
+public class DefaultGeneralPathX extends GeneralPathX implements  Shape, Cloneable, Serializable { 
+
+    /**
+     * Default serial version ID
+     */
+    private static final long serialVersionUID = 1L;
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultGeneralPathX.class);
+
+    protected static GeometryManager geomManager = GeometryLocator
+        .getGeometryManager();
+
+    private List pointTypes = new ArrayList();
+    private List pointCoords = new ArrayList();
+
+    private Byte[] SEG_TYPES = new Byte[] {
+        new Byte((byte)0),
+        new Byte((byte)1),
+        new Byte((byte)2),
+        new Byte((byte)3),
+        new Byte((byte)4),
+        new Byte((byte)5),
+        new Byte((byte)6),
+        new Byte((byte)7),
+        new Byte((byte)8),
+        new Byte((byte)9),
+        new Byte((byte)10)
+    };
+    
+    int windingRule;
+
+    private boolean isSimple = true;
+
+    static final int EXPAND_MAX = 500;
+
+    private  DefaultGeneralPathX() {
+        super(false);
+        setWindingRule(WIND_EVEN_ODD);
+    }
+    /**
+     * Constructs a new <code>GeneralPathX</code> object with the specified
+     * winding rule to control operations that require the interior of the
+     * path to be defined.
+     * 
+     * @param rule
+     *            the winding rule
+     * @see #WIND_EVEN_ODD
+     * @see #WIND_NON_ZERO
+     */
+    public DefaultGeneralPathX(int rule) {
+        super(false);
+        setWindingRule(rule);
+    }
+
+    /**
+     * Constructs a new <code>GeneralPathX</code> object from an arbitrary
+     * {@link Shape} object.
+     * All of the initial geometry and the winding rule for this path are
+     * taken from the specified <code>Shape</code> object.
+     * 
+     * @param s
+     *            the specified <code>Shape</code> object
+     */
+    public DefaultGeneralPathX(PathIterator piter) {
+        this(WIND_EVEN_ODD);
+        setWindingRule(piter.getWindingRule());
+        append(piter, false);
+    }
+
+    private void needRoom(int newTypes, int newCoords, boolean needMove) {
+        if (needMove && getNumTypes() == 0) {
+            throw new IllegalPathStateException("missing initial moveto "
+                + "in path definition");
+        }
+    }
+
+    /**
+     * Adds a point to the path by moving to the specified
+     * coordinates.
+     * 
+     * @param x
+     *            ,&nbsp;y the specified coordinates
+     * @deprecated
+     *             use moveTo(Point)
+     */
+    public synchronized void moveTo(double x, double y) {
+        int numtypes = getNumTypes();
+        if (numtypes > 0 && getTypeAt(numtypes - 1) == SEG_MOVETO) {
+            Point point = getPointAt(getNumCoords() - 1);
+            point.setX(x);
+            point.setY(y);
+        } else {
+            needRoom(1, 2, false);
+            pointTypes.add(SEG_TYPES[SEG_MOVETO]);
+            addPoint(x, y);
+        }
+    }
+
+    public synchronized void moveTo(Point point) {
+        int numtypes = getNumTypes();
+        if (numtypes > 0 && getTypeAt(numtypes - 1) == SEG_MOVETO) {
+            pointCoords.remove(getNumCoords() - 1);
+            addPoint(point);
+        } else {
+            needRoom(1, 2, false);
+            pointTypes.add(SEG_TYPES[SEG_MOVETO]);
+            addPoint(point);
+        }
+    }
+
+    /**
+     * Adds a point to the path by drawing a straight line from the
+     * current coordinates to the new specified coordinates.
+     * 
+     * @param x
+     *            ,&nbsp;y the specified coordinates
+     * @deprecated
+     *             use lineTo(Point)
+     */
+    public synchronized void lineTo(double x, double y) {
+        needRoom(1, 2, true);
+        pointTypes.add(SEG_TYPES[SEG_LINETO]);
+        addPoint(x, y);
+    }
+
+    public synchronized void lineTo(Point point) {
+        needRoom(1, 2, true);
+        pointTypes.add(SEG_TYPES[SEG_LINETO]);
+        addPoint(point);
+    }
+
+    public synchronized void addSegment(Point[] segment) {
+        if (segment != null && segment.length > 0) {
+            needRoom(segment.length, 2 * segment.length, true);
+            for (int i = 0; i < segment.length; i++) {
+                pointTypes.add(SEG_TYPES[SEG_LINETO]);
+                addPoint(segment[i]);
+            }
+        }
+    }
+
+    private void addPoint(double x, double y) {
+        try {
+            pointCoords.add(geomManager.createPoint(x, y,
+                Geometry.SUBTYPES.GEOM2D));
+        } catch (CreateGeometryException e) {
+            LOG.error("Error creating a point", e);
+        }
+    }
+
+    private void addPoint(Point point) {
+        pointCoords.add(point);
+    }
+
+    /**
+     * Adds a curved segment, defined by two new points, to the path by
+     * drawing a Quadratic curve that intersects both the current
+     * coordinates and the coordinates (x2,&nbsp;y2), using the
+     * specified point (x1,&nbsp;y1) as a quadratic parametric control
+     * point.
+     * 
+     * @param x1
+     *            ,&nbsp;y1 the coordinates of the first quadratic control
+     *            point
+     * @param x2
+     *            ,&nbsp;y2 the coordinates of the final endpoint
+     * @deprecated
+     *             use quadTo(Point, Point)
+     */
+    public synchronized void quadTo(double x1, double y1, double x2, double y2) {
+        needRoom(1, 4, true);
+        pointTypes.add(SEG_TYPES[SEG_QUADTO]);
+        addPoint(x1, y1);
+        addPoint(x2, y2);
+        isSimple = false;
+    }
+
+    public synchronized void quadTo(Point point1, Point point2) {
+        needRoom(1, 4, true);
+        pointTypes.add(SEG_TYPES[SEG_QUADTO]);
+        addPoint(point1);
+        addPoint(point2);
+        isSimple = false;
+    }
+
+    /**
+     * Adds a curved segment, defined by three new points, to the path by
+     * drawing a B&eacute;zier curve that intersects both the current
+     * coordinates and the coordinates (x3,&nbsp;y3), using the
+     * specified points (x1,&nbsp;y1) and (x2,&nbsp;y2) as
+     * B&eacute;zier control points.
+     * 
+     * @param x1
+     *            ,&nbsp;y1 the coordinates of the first B&eacute;ezier
+     *            control point
+     * @param x2
+     *            ,&nbsp;y2 the coordinates of the second B&eacute;zier
+     *            control point
+     * @param x3
+     *            ,&nbsp;y3 the coordinates of the final endpoint
+     * @deprecated
+     *             use curveTo(Point, Point, Point)
+     */
+    public synchronized void curveTo(double x1, double y1, double x2,
+        double y2, double x3, double y3) {
+        needRoom(1, 6, true);
+        pointTypes.add(SEG_TYPES[SEG_CUBICTO]);
+        addPoint(x1, y1);
+        addPoint(x2, y2);
+        addPoint(x3, y3);
+        isSimple = false;
+    }
+
+    public synchronized void curveTo(Point point1, Point point2, Point point3) {
+        needRoom(1, 6, true);
+        pointTypes.add(SEG_TYPES[SEG_CUBICTO]);
+        addPoint(point1);
+        addPoint(point2);
+        addPoint(point3);
+        isSimple = false;
+    }
+
+    /**
+     * Closes the current subpath by drawing a straight line back to
+     * the coordinates of the last <code>moveTo</code>. If the path is already
+     * closed then this method has no effect.
+     */
+    public synchronized void closePath() {
+        if (getNumTypes() == 0 || getTypeAt(getNumTypes() - 1) != SEG_CLOSE) {
+            needRoom(1, 0, true);
+            // Adding a geometry like the last geometry
+            // addPoint(100, 100);
+            pointTypes.add(SEG_TYPES[SEG_CLOSE]);
+        }
+    }
+
+    /**
+     * Check if the first part is closed.
+     * 
+     * @return
+     */
+    public boolean isClosed() {
+        PathIterator theIterator =
+            getPathIterator(null, geomManager.getFlatness());
+        double[] theData = new double[6];
+        double xFinal = 0;
+        double yFinal = 0;
+        double xIni = 0;
+        double yIni = 0;
+        boolean first = true;
+
+        while (!theIterator.isDone()) {
+            // while not done
+            int theType = theIterator.currentSegment(theData);
+
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                xIni = theData[0];
+                yIni = theData[1];
+                if (!first) {
+                    break;
+                }
+                first = false;
+                break;
+
+            case PathIterator.SEG_LINETO:
+                xFinal = theData[0];
+                yFinal = theData[1];
+                break;
+            case PathIterator.SEG_CLOSE:
+                return true;
+
+            } // end switch
+
+            theIterator.next();
+        }
+        if ((xFinal == xIni) && (yFinal == yIni))
+            return true;
+        return false;
+    }
+
+    /**
+     * Appends the geometry of the specified {@link PathIterator} object
+     * to the path, possibly connecting the new geometry to the existing
+     * path segments with a line segment.
+     * If the <code>connect</code> parameter is <code>true</code> and the
+     * path is not empty then any initial <code>moveTo</code> in the
+     * geometry of the appended <code>Shape</code> is turned into a
+     * <code>lineTo</code> segment.
+     * If the destination coordinates of such a connecting <code>lineTo</code>
+     * segment match the ending coordinates of a currently open
+     * subpath then the segment is omitted as superfluous.
+     * The winding rule of the specified <code>Shape</code> is ignored
+     * and the appended geometry is governed by the winding
+     * rule specified for this path.
+     * 
+     * @param pi
+     *            the <code>PathIterator</code> whose geometry is appended to
+     *            this path
+     * @param connect
+     *            a boolean to control whether or not to turn an
+     *            initial <code>moveTo</code> segment into a <code>lineTo</code>
+     *            segment
+     *            to connect the new geometry to the existing path
+     */
+    public void append(PathIterator pi, boolean connect) {
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case SEG_MOVETO:
+                if (!connect || getNumTypes() < 1 || getNumCoords() < 2) {
+                    moveTo(coords[0], coords[1]);
+                    break;
+                }
+                if (getTypeAt(getNumTypes() - 1) != SEG_CLOSE
+                    && getPointAt(getNumCoords() - 1).getX() == coords[0]
+                    && getPointAt(getNumCoords() - 1).getY() == coords[1]) {
+                    // Collapse out initial moveto/lineto
+                    break;
+                }
+                // NO BREAK;
+            case SEG_LINETO:
+                lineTo(coords[0], coords[1]);
+                break;
+            case SEG_QUADTO:
+                quadTo(coords[0], coords[1], coords[2], coords[3]);
+                break;
+            case SEG_CUBICTO:
+                curveTo(coords[0], coords[1], coords[2], coords[3], coords[4],
+                    coords[5]);
+                break;
+            case SEG_CLOSE:
+                closePath();
+                break;
+            }
+            pi.next();
+            connect = false;
+        }
+    }
+   
+    public void append(GeneralPathX gp) {
+        for( int i=0 ; i<gp.getNumCoords(); i++ ) {
+            byte type = gp.getTypeAt(i);
+            Point point = gp.getPointAt(i);
+            pointTypes.add(SEG_TYPES[type]);
+            addPoint(point);
+        }
+    }
+  
+    /**
+     * Returns the fill style winding rule.
+     * 
+     * @return an integer representing the current winding rule.
+     * @see #WIND_EVEN_ODD
+     * @see #WIND_NON_ZERO
+     * @see #setWindingRule
+     */
+    public synchronized int getWindingRule() {
+        return windingRule;
+    }
+
+    /**
+     * Sets the winding rule for this path to the specified value.
+     * 
+     * @param rule
+     *            an integer representing the specified
+     *            winding rule
+     * @exception <code>IllegalArgumentException</code> if <code>rule</code> is
+     *            not either <code>WIND_EVEN_ODD</code> or
+     *            <code>WIND_NON_ZERO</code>
+     * @see #WIND_EVEN_ODD
+     * @see #WIND_NON_ZERO
+     * @see #getWindingRule
+     */
+    public void setWindingRule(int rule) {
+        if (rule != WIND_EVEN_ODD && rule != WIND_NON_ZERO) {
+            throw new IllegalArgumentException("winding rule must be "
+                + "WIND_EVEN_ODD or " + "WIND_NON_ZERO");
+        }
+        windingRule = rule;
+    }
+
+    /**
+     * Returns the coordinates most recently added to the end of the path
+     * as a {@link Point2D} object.
+     * 
+     * @return a <code>Point2D</code> object containing the ending
+     *         coordinates of the path or <code>null</code> if there are no
+     *         points
+     *         in the path.
+     */
+    public synchronized Point2D getCurrentPoint() {
+        if (getNumTypes() < 1 || getNumCoords() < 1) {
+            return null;
+        }
+        int index = getNumCoords();
+        if (getTypeAt(getNumTypes() - 1) == SEG_CLOSE) {
+            loop: for (int i = getNumTypes() - 2; i > 0; i--) {
+                switch (getTypeAt(i)) {
+                case SEG_MOVETO:
+                    break loop;
+                case SEG_LINETO:
+                    index -= 2;
+                    break;
+                case SEG_QUADTO:
+                    index -= 4;
+                    break;
+                case SEG_CUBICTO:
+                    index -= 6;
+                    break;
+                case SEG_CLOSE:
+                    break;
+                }
+            }
+        }
+        return new Point2D.Double(getPointAt(index - 1).getX(), getPointAt(
+            index - 1).getY());
+    }
+
+    /**
+     * Resets the path to empty. The append position is set back to the
+     * beginning of the path and all coordinates and point types are
+     * forgotten.
+     */
+    public synchronized void reset() {
+        pointCoords.clear();
+        pointTypes.clear();
+    }
+
+    /**
+     * Transforms the geometry of this path using the specified
+     * {@link AffineTransform}.
+     * The geometry is transformed in place, which permanently changes the
+     * boundary defined by this object.
+     * 
+     * @param at
+     *            the <code>AffineTransform</code> used to transform the area
+     */
+    public void transform(AffineTransform at) {
+        for (int i = 0; i < getNumCoords(); i++) {
+            getPointAt(i).transform(at);
+        }
+    }
+
+    public void reProject(ICoordTrans ct) {
+        for (int i = 0; i < getNumCoords(); i++) {
+            getPointAt(i).reProject(ct);
+        }
+    }
+
+    /**
+     * Returns a new transformed <code>Shape</code>.
+     * 
+     * @param at
+     *            the <code>AffineTransform</code> used to transform a
+     *            new <code>Shape</code>.
+     * @return a new <code>Shape</code>, transformed with the specified
+     *         <code>AffineTransform</code>.
+     */
+    public synchronized Shape createTransformedShape(AffineTransform at) {
+        DefaultGeneralPathX gp = (DefaultGeneralPathX) clone();
+        if (at != null) {
+            gp.transform(at);
+        }
+        return gp;
+    }
+
+    /**
+     * Return the bounding box of the path.
+     * 
+     * @return a {@link java.awt.Rectangle} object that
+     *         bounds the current path.
+     */
+    public java.awt.Rectangle getBounds() {
+        return getBounds2D().getBounds();
+    }
+
+    /**
+     * Returns the bounding box of the path.
+     * 
+     * @return a {@link Rectangle2D} object that
+     *         bounds the current path.
+     */
+    public synchronized Rectangle2D getBounds2D() {
+        double x1, y1, x2, y2;
+        int i = getNumCoords();
+        if (i > 0) {
+            y1 = y2 = getPointAt(--i).getY();
+            x1 = x2 = getPointAt(i).getX();
+            while (i > 0) {
+                double y = getPointAt(--i).getY();
+                double x = getPointAt(i).getX();
+                if (x < x1)
+                    x1 = x;
+                if (y < y1)
+                    y1 = y;
+                if (x > x2)
+                    x2 = x;
+                if (y > y2)
+                    y2 = y;
+            }
+        } else {
+            x1 = y1 = x2 = y2 = 0.0f;
+        }
+        return new Rectangle2D.Double(x1, y1, x2 - x1, y2 - y1);
+    }
+
+    /**
+     * Tests if the specified coordinates are inside the boundary of
+     * this <code>Shape</code>.
+     * 
+     * @param x
+     *            ,&nbsp;y the specified coordinates
+     * @return <code>true</code> if the specified coordinates are inside this
+     *         <code>Shape</code>; <code>false</code> otherwise
+     */
+    public boolean contains(double x, double y) {
+        if (pointTypes.size() < 2) {
+            return false;
+        }
+        int cross =
+            GeomUtilities.pointCrossingsForPath(getPathIterator(null), x, y);
+        if (windingRule == WIND_NON_ZERO) {
+            return (cross != 0);
+        } else {
+            return ((cross & 1) != 0);
+        }
+    }
+
+    /**
+     * Tests if the specified <code>Point2D</code> is inside the boundary
+     * of this <code>Shape</code>.
+     * 
+     * @param p
+     *            the specified <code>Point2D</code>
+     * @return <code>true</code> if this <code>Shape</code> contains the
+     *         specified <code>Point2D</code>, <code>false</code> otherwise.
+     */
+    public boolean contains(Point2D p) {
+        return contains(p.getX(), p.getY());
+    }
+
+    /**
+     * Tests if the specified rectangular area is inside the boundary of
+     * this <code>Shape</code>.
+     * 
+     * @param x
+     *            ,&nbsp;y the specified coordinates
+     * @param w
+     *            the width of the specified rectangular area
+     * @param h
+     *            the height of the specified rectangular area
+     * @return <code>true</code> if this <code>Shape</code> contains
+     *         the specified rectangluar area; <code>false</code> otherwise.
+     */
+    public boolean contains(double x, double y, double w, double h) {
+        return GeomUtilities
+            .contains(getPathIterator(null), x, y, x + w, y + h);
+    }
+
+    /**
+     * Tests if the specified <code>Rectangle2D</code> is inside the boundary of
+     * this <code>Shape</code>.
+     * 
+     * @param r
+     *            a specified <code>Rectangle2D</code>
+     * @return <code>true</code> if this <code>Shape</code> bounds the
+     *         specified <code>Rectangle2D</code>; <code>false</code> otherwise.
+     */
+    public boolean contains(Rectangle2D r) {
+        return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+    }
+
+    /**
+     * Tests if the interior of this <code>Shape</code> intersects the
+     * interior of a specified set of rectangular coordinates.
+     * 
+     * @param x
+     *            ,&nbsp;y the specified coordinates
+     * @param w
+     *            the width of the specified rectangular coordinates
+     * @param h
+     *            the height of the specified rectangular coordinates
+     * @return <code>true</code> if this <code>Shape</code> and the
+     *         interior of the specified set of rectangular coordinates
+     *         intersect
+     *         each other; <code>false</code> otherwise.
+     */
+    public boolean intersects(double x, double y, double w, double h) {
+        return GeomUtilities.intersects(getPathIterator(null), x, y, w, h);
+    }
+
+    /**
+     * Tests if the interior of this <code>Shape</code> intersects the
+     * interior of a specified <code>Rectangle2D</code>.
+     * 
+     * @param r
+     *            the specified <code>Rectangle2D</code>
+     * @return <code>true</code> if this <code>Shape</code> and the interior
+     *         of the specified <code>Rectangle2D</code> intersect each
+     *         other; <code>false</code> otherwise.
+     */
+    public boolean intersects(Rectangle2D r) {
+        return intersects(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+    }
+
+    /**
+     * Returns a <code>PathIterator</code> object that iterates along the
+     * boundary of this <code>Shape</code> and provides access to the
+     * geometry of the outline of this <code>Shape</code>.
+     * The iterator for this class is not multi-threaded safe,
+     * which means that this <code>GeneralPathX</code> class does not
+     * guarantee that modifications to the geometry of this
+     * <code>GeneralPathX</code> object do not affect any iterations of
+     * that geometry that are already in process.
+     * 
+     * @param at
+     *            an <code>AffineTransform</code>
+     * @return a new <code>PathIterator</code> that iterates along the
+     *         boundary of this <code>Shape</code> and provides access to the
+     *         geometry of this <code>Shape</code>'s outline
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        if (isSimple) {
+            return new GeneralPathXIteratorSimple(this, at);
+        } else {
+            return new GeneralPathXIterator(this, at);
+        }
+    }
+
+    /**
+     * Returns a <code>PathIterator</code> object that iterates along the
+     * boundary of the flattened <code>Shape</code> and provides access to the
+     * geometry of the outline of the <code>Shape</code>.
+     * The iterator for this class is not multi-threaded safe,
+     * which means that this <code>GeneralPathX</code> class does not
+     * guarantee that modifications to the geometry of this
+     * <code>GeneralPathX</code> object do not affect any iterations of
+     * that geometry that are already in process.
+     * 
+     * @param at
+     *            an <code>AffineTransform</code>
+     * @param flatness
+     *            the maximum distance that the line segments used to
+     *            approximate the curved segments are allowed to deviate
+     *            from any point on the original curve
+     * @return a new <code>PathIterator</code> that iterates along the flattened
+     *         <code>Shape</code> boundary.
+     */
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return new FlatteningPathIterator(getPathIterator(at), flatness);
+    }
+
+    /**
+     * Creates a new object of the same class as this object.
+     * 
+     * @return a clone of this instance.
+     * @exception OutOfMemoryError
+     *                if there is not enough memory.
+     * @see java.lang.Cloneable
+     * @since 1.2
+     */
+    public Object clone() {
+        DefaultGeneralPathX copy = new DefaultGeneralPathX();
+        copy.windingRule = windingRule;
+        copy.isSimple = isSimple;
+        for (int i = 0; i < getNumTypes(); i++) {
+            copy.pointTypes.add(pointTypes.get(i));
+        }
+        for (int i = 0; i < getNumCoords(); i++) {
+            copy.addPoint((Point) getPointAt(i).cloneGeometry());
+        }
+        return copy;
+
+    }
+
+    DefaultGeneralPathX(int windingRule, byte[] pointTypes, int numTypes,
+        double[] pointCoords, int numCoords) {
+
+        // used to construct from native
+        super(false);
+
+        this.windingRule = windingRule;
+        this.setPointTypes(pointTypes);
+        this.setNumTypes(numTypes);
+        this.setPointCoords(pointCoords);
+        this.setNumCoords(numCoords);
+    }
+
+    public void setNumTypes(int numTypes) {
+
+    }
+
+    public int getNumTypes() {
+        return pointTypes.size();
+    }
+
+    public int setNumCoords(int numCoords) {
+        return pointCoords.size();
+    }
+
+    public int getNumCoords() {
+        return pointCoords.size();
+    }
+
+    public byte getTypeAt(int index) {
+        return ((Byte) pointTypes.get(index)).byteValue();
+    }
+
+    /**
+     * @deprecated
+     *             use the geometry methods.
+     */
+    public void setPointTypes(byte[] pointTypes) {
+        this.pointTypes.clear();
+        for (int i = 0; i < pointTypes.length; i++) {
+            this.pointTypes.add(SEG_TYPES[pointTypes[i]]);
+        }
+    }
+
+    /**
+     * @deprecated
+     *             use the geometry methods.
+     */
+    public byte[] getPointTypes() {
+        byte[] bytes = new byte[pointTypes.size()];
+        for (int i = 0; i < pointTypes.size(); i++) {
+            bytes[i] = ((Byte) pointTypes.get(i)).byteValue();
+        }
+        return bytes;
+    }
+
+    /**
+     * @param pointCoords
+     * @deprecated
+     *             use the geometry methods.
+     */
+    public void setPointCoords(double[] pointCoords) {
+        this.pointCoords.clear();
+        for (int i = 0; i < pointCoords.length; i = i + 2) {
+            try {
+                addPoint(geomManager.createPoint(pointCoords[i],
+                    pointCoords[i + 1], Geometry.SUBTYPES.GEOM2D));
+            } catch (CreateGeometryException e) {
+                LOG.error("Error creating a point", e);
+            }
+        }
+    }
+
+    /**
+     * @deprecated
+     *             use the geometry methods.
+     */
+    public double[] getPointCoords() {
+        double[] doubles = new double[pointCoords.size() * 2];
+        for (int i = 0; i < getNumCoords(); i++) {
+            doubles[i * 2] = getPointAt(i).getX();
+            doubles[(i * 2) + 1] = getPointAt(i).getY();
+        }
+        return doubles;
+    }
+
+    public Point getPointAt(int index) {
+        return (Point) pointCoords.get(index);
+    }
+
+    public double[] getCoordinatesAt(int index) {
+        return getPointAt(index).getCoordinates();
+    }
+    
+    public double[] get3DCoordinatesAt(int index) {
+    	Point p = getPointAt(index);
+    	if(p instanceof Point2DZ) {
+    		return getPointAt(index).getCoordinates();
+    	}
+    	double[] coords = new double[3];
+    	coords[0] = p.getX();
+    	coords[1] = p.getY();
+    	coords[2] = 0D;
+    	return coords;
+    }
+
+    /**
+     * Convertimos el path a puntos y luego le damos la vuelta.
+     */
+    public void flip() {
+        PathIterator theIterator =
+            getPathIterator(null, geomManager.getFlatness());
+        double[] theData = new double[6];
+        CoordinateList coordList = new CoordinateList();
+        Coordinate c1;
+        DefaultGeneralPathX newGp = new DefaultGeneralPathX();
+        ArrayList listOfParts = new ArrayList();
+        while (!theIterator.isDone()) {
+            // while not done
+            int type = theIterator.currentSegment(theData);
+            switch (type) {
+            case SEG_MOVETO:
+                coordList = new CoordinateList();
+                listOfParts.add(coordList);
+                c1 = new Coordinate(theData[0], theData[1]);
+                coordList.add(c1, true);
+                break;
+            case SEG_LINETO:
+                c1 = new Coordinate(theData[0], theData[1]);
+                coordList.add(c1, true);
+                break;
+
+            case SEG_CLOSE:
+                coordList.add(coordList.getCoordinate(0));
+                break;
+
+            }
+            theIterator.next();
+        }
+
+        for (int i = listOfParts.size() - 1; i >= 0; i--) {
+            coordList = (CoordinateList) listOfParts.get(i);
+            Coordinate[] coords = coordList.toCoordinateArray();
+            CoordinateArraySequence seq = new CoordinateArraySequence(coords);
+            CoordinateSequences.reverse(seq);
+            coords = seq.toCoordinateArray();
+            newGp.moveTo(coords[0].x, coords[0].y);
+            for (int j = 1; j < coords.length; j++) {
+                newGp.lineTo(coords[j].x, coords[j].y);
+            }
+        }
+        reset();
+        append(newGp.getPathIterator(null), false);
+    }
+
+    /**
+     * Check if the first part is CCW.
+     * 
+     * @return
+     */
+    public boolean isCCW() {
+        PathIterator theIterator =
+            getPathIterator(null, geomManager.getFlatness()); // polyLine.getPathIterator(null,
+                                                              // flatness);
+        double[] theData = new double[6];
+        Coordinate first = null;
+        CoordinateList coordList = new CoordinateList();
+        Coordinate c1;
+        boolean bFirst = true;
+        while (!theIterator.isDone()) {
+            // while not done
+            int type = theIterator.currentSegment(theData);
+            switch (type) {
+            case SEG_MOVETO:
+                c1 = new Coordinate(theData[0], theData[1]);
+                if (bFirst == false) // Ya tenemos la primera parte.
+                    break;
+                if (bFirst) {
+                    bFirst = false;
+                    first = c1;
+                }
+                coordList.add(c1, true);
+                break;
+            case SEG_LINETO:
+                c1 = new Coordinate(theData[0], theData[1]);
+                coordList.add(c1, true);
+                break;
+
+            }
+            theIterator.next();
+        }
+        coordList.add(first, true);
+        return CGAlgorithms.isCCW(coordList.toCoordinateArray());
+    }
+
+    /**
+     * @return the isSimple
+     */
+    public boolean isSimple() {
+        return isSimple;
+    }
+    
+    public void ensureCapacity(int capacity) {
+        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/gputils/DefaultGeneralPathX.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2D.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Geometry2D extends DefaultNullGeometry{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1819538043275127099L;
+
+	public Geometry2D(GeometryType geometryType) {
+		super(geometryType);
+		throw new InstantiationError("Can't instantiate generic geometry 2D.");
+	}
+	
+	  
+	public int getDimension() {
+	    return 2;
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultEnvelope.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultEnvelope.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultEnvelope.java	(revision 42196)
@@ -0,0 +1,324 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import java.text.MessageFormat;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.EnvelopeNotInitializedException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+/**
+ * A minimum bounding box or rectangle. Regardless of dimension, an Envelope
+ * can be represented without ambiguity as two direct positions (coordinate
+ * points). To encode an Envelope, it is sufficient to encode these two
+ * points. This is consistent with all of the data types in this
+ * specification, their state is represented by their publicly accessible
+ * attributes.
+
+ * @author Vicente Caballero Navarro
+ */
+public abstract class DefaultEnvelope implements Envelope, org.gvsig.tools.lang.Cloneable{
+    private static final Logger LOG =
+        LoggerFactory.getLogger(DefaultEnvelope.class);
+
+    public static final String PERSISTENCE_DEFINITION_NAME = "Envelope";
+
+    protected static final String LOWERCORNER_FIELD = "lowerCorner";
+    protected static final String UPPERCORNER_FIELD = "upperCorner";
+
+    protected Point min;
+    protected Point max;
+
+    protected boolean isEmpty;
+
+    protected static GeometryManager manager = GeometryLocator.getGeometryManager();
+
+    public DefaultEnvelope(){
+        super();
+        isEmpty = true;
+    }
+
+    public DefaultEnvelope(Point min, Point max){
+        super();
+        this.min = min;
+        this.max = max;
+        isEmpty = false;
+    }
+
+    public String toString() {
+        if( this.isEmpty ) {
+            return "Envelop(empty)";
+        }
+        return MessageFormat.format(
+            "Envelop(min={0},max={1})", 
+            new Object[] {
+                min.toString(),
+                max.toString()
+            }
+        );
+    }
+
+    /**
+     * Returns the center ordinate along the specified dimension.
+     *
+     * @param dimension DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public double getCenter(int dimension) {
+        if (isEmpty){
+            throw new EnvelopeNotInitializedException();
+        }
+        return (min.getCoordinateAt(dimension) + max.getCoordinateAt(dimension)) * 0.5;
+    }
+
+    /**
+     * Returns the envelope length along the specified dimension.
+     *
+     * @param dimension
+     *
+     * @return
+     */
+    public double getLength(int dimension) {
+        if (isEmpty){
+            throw new EnvelopeNotInitializedException();
+        }
+        if (max.getCoordinateAt(dimension) > min.getCoordinateAt(dimension)) {
+            return max.getCoordinateAt(dimension) - min.getCoordinateAt(dimension);
+        }
+
+        return min.getCoordinateAt(dimension) - max.getCoordinateAt(dimension);
+    }
+
+    /**
+     * A coordinate position consisting of all the minimal ordinates for each
+     * dimension for all points within the Envelope.
+     *
+     * @return
+     */
+    public Point getLowerCorner() {
+        return min;
+    }
+
+    /**
+     * Returns the maximal ordinate along the specified dimension.
+     *
+     * @param dimension
+     *
+     * @return
+     */
+    public double getMaximum(int dimension) {
+        if (isEmpty){
+            throw new EnvelopeNotInitializedException();
+        }
+        return max.getCoordinateAt(dimension);
+    }
+
+    /**
+     * Returns the minimal ordinate along the specified dimension.
+     *
+     * @param dimension
+     *
+     * @return
+     */
+    public double getMinimum(int dimension) {
+        if (isEmpty){
+            throw new EnvelopeNotInitializedException();
+        }
+        return min.getCoordinateAt(dimension);
+    }
+
+    /**
+     * A coordinate position consisting of all the maximal ordinates for each
+     * dimension for all points within the Envelope.
+     *
+     * @return
+     */
+    public Point getUpperCorner() {
+        return max;
+    }
+
+
+
+    public Geometry getGeometry() {
+        if (isEmpty){
+            throw new EnvelopeNotInitializedException();
+        }
+        try {
+            Surface surface = (Surface)manager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+            surface.addMoveToVertex((Point)min.cloneGeometry());
+            surface.addVertex(manager.createPoint(getMaximum(0),getMinimum(1), SUBTYPES.GEOM2D));
+            surface.addVertex((Point)max.cloneGeometry());
+            surface.addVertex(manager.createPoint(getMinimum(0),getMaximum(1), SUBTYPES.GEOM2D));
+            surface.closePrimitive();
+            return surface;
+        } catch (CreateGeometryException e) {
+            LOG.error("Error creting the surface", e);
+        }	  
+        return null;
+    }
+
+    public boolean contains(Envelope envelope) {
+        if (isEmpty){
+            return false;
+        }
+        if((envelope == null) || (envelope.isEmpty())) {
+            return false;
+        }
+        for (int i = 0; i < getDimension(); i++) {
+            if (getMinimum(i) > envelope.getMinimum(i)
+                || getMaximum(i) < envelope.getMaximum(i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public boolean intersects(Envelope envelope) {
+        if (isEmpty){
+            return false;
+        }
+        if((envelope == null) || (envelope.isEmpty())) {
+            return false;
+        }
+        int dimension = getDimension();
+        for (int i = 0; i < dimension; i++) {
+            if (getMinimum(i)>envelope.getMaximum(i)){
+                return false;
+            } else if (getMaximum(i)<envelope.getMinimum(i)){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public boolean equals(Object other) {
+        if (!(other == null || other instanceof Envelope)) {
+            return false;
+        }
+        Envelope otherEnv = (Envelope) other;
+        if (isEmpty && otherEnv.isEmpty()){
+            return true;
+        }
+        if (otherEnv.getDimension() != this.getDimension()) {
+            return false;
+        }
+        for (int i = 0; i < this.getDimension(); i++) {
+            if (otherEnv.getMinimum(i) != this.getMinimum(i)) {
+                return false;
+            }
+            if (otherEnv.getMaximum(i) != this.getMaximum(i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Envelope#setLowerCorner(org.gvsig.fmap.geom.primitive.Point)
+     */
+    public void setLowerCorner(Point lowerCorner) {
+        this.min = lowerCorner;
+        if (max != null){
+            isEmpty = false;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Envelope#setUpperCorner(org.gvsig.fmap.geom.primitive.Point)
+     */
+    public void setUpperCorner(Point upperCorner) {
+        this.max = upperCorner;
+        if (min != null){
+            isEmpty = false;
+        }
+    }
+
+    public static void registerPersistent() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if( manager.getDefinition(PERSISTENCE_DEFINITION_NAME)==null ) {
+            DynStruct definition = manager.addDefinition(
+                DefaultEnvelope.class,
+                PERSISTENCE_DEFINITION_NAME,
+                "DefaultEnvelope persistence definition",
+                null, 
+                null
+            ); 
+
+            definition.addDynFieldObject(LOWERCORNER_FIELD).setClassOfValue(Point.class).setMandatory(true);
+            definition.addDynFieldObject(UPPERCORNER_FIELD).setClassOfValue(Point.class).setMandatory(true);
+        }
+    }
+
+    public void loadFromState(PersistentState state)
+    throws PersistenceException {
+        setLowerCorner((Point)state.get(LOWERCORNER_FIELD));		
+        setUpperCorner((Point)state.get(UPPERCORNER_FIELD));		
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(LOWERCORNER_FIELD, min);	
+        state.set(UPPERCORNER_FIELD, max);		
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        DefaultEnvelope other = (DefaultEnvelope) super.clone();
+        if (!isEmpty){        
+            other.max = (Point) max.cloneGeometry();
+            other.min = (Point) min.cloneGeometry();
+        }
+        return other;
+    }
+
+    public boolean isEmpty() {       
+        return isEmpty;
+    }	
+    
+    public void add(Geometry geometry) {
+        this.add(geometry.getEnvelope());
+    }
+
+    public void clear() {
+        isEmpty = true;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultEnvelope.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope2D.java	(revision 42196)
@@ -0,0 +1,220 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import org.gvsig.fmap.geom.generalpath.primitive.point.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.cresques.cts.ICoordTrans;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.EnvelopeNotInitializedException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Envelope2D extends DefaultEnvelope implements Cloneable{
+    
+    private static final Logger logger = LoggerFactory.getLogger(Envelope2D.class);
+    
+	public static final String PERSISTENCE_DEFINITION_NAME = "Envelope2Dimensions";
+	
+	public Envelope2D() {
+		super();	
+	}
+
+	public Envelope2D(Point min, Point max) {
+		super(min, max);
+	}
+
+	public Envelope2D(double minX,double minY,double maxX, double maxY){
+		this(new Point2D(minX, minY), new Point2D(maxX, maxY));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Envelope#getDimension()
+	 */
+	public int getDimension() {
+		return 2;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Envelope#convert(org.cresques.cts.ICoordTrans)
+	 */
+	public Envelope convert(ICoordTrans trans) {
+	    
+	    if (isEmpty){
+            throw new EnvelopeNotInitializedException();
+        }
+	    
+	    if (trans == null) {
+	        // clone
+	        return new Envelope2D(this.getLowerCorner(), this.getUpperCorner());
+	    }
+	    
+	    if (this.getDimension() > 2) {
+			return null;
+		}
+	    
+	    // We'll reproject by taking samples like this:
+	    // 
+	    //  *---*---*---*---*
+        //  |               |
+        //  *   *   *   *   *
+        //  |               |
+        //  *   *   *   *   *
+        //  |               |
+        //  *   *   *   *   *
+        //  |               |
+        //  *---*---*---*---*
+	    // 
+	    // This is because:
+	    // 
+	    // - In some CRS (for example EPSG:4326) the north/south pole is a "line"
+	    //   while in other CRS the north/south pole is a point, so if you
+	    //   reproject the bounding box of the world, the result can be absurd.
+	    // - Sometimes the top/bottom/right/bottom of one envelope
+	    //   corresponds to a strange point in the the other envelope
+	    //   (not even a point in the perimeter)
+	    // - More generally, reprojecting usually implies a rotation (the result
+	    //   is a rotated envelope) so it's better to use a few
+	    //   samples along the perimeter.
+	    
+	    double xmin = getMinimum(0);
+	    double ymin = getMinimum(1);
+	    double step_w = 0.25 * (getMaximum(0) - xmin);
+	    double step_h = 0.25 * (getMaximum(1) - ymin);
+
+	    java.awt.geom.Point2D sample = null;
+	    java.awt.geom.Point2D sample_trans = null;
+	    // Init with worst values
+        java.awt.geom.Point2D res_min = new java.awt.geom.Point2D.Double(
+            Double.MAX_VALUE, Double.MAX_VALUE);
+        java.awt.geom.Point2D res_max = new java.awt.geom.Point2D.Double(
+            -Double.MAX_VALUE, -Double.MAX_VALUE);
+	   
+        int added = 0;
+	    for (int i=0; i<5; i++) {
+	        for (int j=0; j<5; j++) {
+	                sample = new java.awt.geom.Point2D.Double(
+	                    xmin + i * step_w,
+	                    ymin + j * step_h);
+	                sample_trans = new java.awt.geom.Point2D.Double(0,0);
+	                try {
+	                    sample_trans = trans.convert(sample, sample_trans);
+	                } catch (Exception exc) {
+	                    // Unable to convert this one: ignore
+	                    continue;
+	                }
+	                // Update max/min found
+	                // X
+	                if (sample_trans.getX() > res_max.getX()) {
+	                    res_max.setLocation(sample_trans.getX(), res_max.getY());
+	                }
+                    if (sample_trans.getX() < res_min.getX()) {
+                        res_min.setLocation(sample_trans.getX(), res_min.getY());
+                    }
+	                // Y
+                    if (sample_trans.getY() > res_max.getY()) {
+                        res_max.setLocation(res_max.getX(), sample_trans.getY());
+                    }
+                    if (sample_trans.getY() < res_min.getY()) {
+                        res_min.setLocation(res_min.getX(), sample_trans.getY());
+                    }
+                    added++;
+	        }
+	    }
+	    
+	    if (added == 0) {
+	        logger.error("Unable to reproject envelope with transf: " + trans.toString());
+	        return null;
+	    }
+	    
+		return new Envelope2D(
+		    res_min.getX(),
+		    res_min.getY(),
+		    res_max.getX(),
+		    res_max.getY());
+	}
+
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(PERSISTENCE_DEFINITION_NAME)==null ) {
+			DynStruct definition = manager.addDefinition(
+					Envelope2D.class,
+					PERSISTENCE_DEFINITION_NAME,
+					"Envelope2D persistence definition",
+					null, 
+					null
+			); 
+			
+			definition.extend(manager.getDefinition(DefaultEnvelope.PERSISTENCE_DEFINITION_NAME));	
+		}
+	}
+	
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+
+    private void createPoints() {
+        this.min = new Point2D(0, 0);
+        this.max = new Point2D(0, 0);
+    }
+    
+    public void add(Envelope envelope) {
+        int i;
+        if( envelope==null || envelope.isEmpty() ) {
+            return;
+        }
+        if (isEmpty){
+            createPoints();
+            for (i=0;i<getDimension();i++){
+                this.min.setCoordinateAt(i, envelope.getMinimum(i));
+                this.max.setCoordinateAt(i, envelope.getMaximum(i));
+            }
+            isEmpty = false;
+        } else {
+            for (i=0;i<getDimension();i++){
+                this.min.setCoordinateAt(i,
+                    Math.min(this.min.getCoordinateAt(i), envelope.getMinimum(i)));
+                this.max.setCoordinateAt(i,
+                    Math.max(this.max.getCoordinateAt(i), envelope.getMaximum(i)));
+            }
+        }
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/OrientablePrimitive2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/OrientablePrimitive2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/OrientablePrimitive2D.java	(revision 42196)
@@ -0,0 +1,463 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Line2D;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.handler.FinalHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.generalpath.gputils.DrawGeometryShape;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public abstract class OrientablePrimitive2D extends AbstractPrimitive implements OrientablePrimitive {
+    private static final long serialVersionUID = -820881421374434713L;
+    protected GeneralPathX gp;
+
+    /**
+     * The constructor with the GeometryType like and argument
+     * is used by the {@link GeometryType}{@link #create()}
+     * to create the geometry
+     * @param type
+     * The geometry type
+     */
+    public OrientablePrimitive2D(GeometryType geometryType) {
+        super(geometryType, null, null);
+        gp = new GeneralPathX();
+    }
+
+    public OrientablePrimitive2D(GeometryType geometryType, String id, IProjection projection, GeneralPathX gp){
+        super(geometryType, id, projection);
+        this.gp = gp;
+    }
+
+    /**
+     * TODO método creado para dar visibilidad a gp despues de la refactorización
+     * @return
+     */
+    public GeneralPathX getGeneralPathX() {
+        return gp;
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#contains(double, double)
+     */
+    public boolean contains(double x, double y) {
+        return gp.contains(x, y);
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#contains(double, double, double, double)
+     */
+    public boolean contains(double x, double y, double w, double h) {
+        return gp.contains(x, y, w, h);
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#intersects(double, double, double, double)
+     */
+    public boolean intersects(double x, double y, double w, double h) {
+        // M�s r�pido
+        return gp.intersects(x, y, w, h);
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#getBounds()
+     */
+    public Rectangle getBounds() {
+        return gp.getBounds();
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#contains(java.awt.geom.Point2D)
+     */
+    public boolean contains(Point2D p) {
+        return gp.contains(p);
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#getBounds2D()
+     */
+    public Rectangle2D getBounds2D() {
+        return gp.getBounds2D();
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#contains(java.awt.geom.Rectangle2D)
+     */
+    public boolean contains(Rectangle2D r) {
+        return gp.contains(r);
+    }
+
+    /**
+     * El m�todo intersects de java.awt.Shape que define la intersecci�n entre
+     * una polil�nea y un Rectangle2D considera la polil�nea como un Shape
+     * gen�rico y se producen errores en la selecci�n de polil�neas. Por este
+     * motivo se ha modificado este m�todo intersect() de FPolyline2D para que
+     * realize la intersecci�n estricta entre el Rectangle2D y la polil�nea en
+     * cuesti�n. El precio es un incremento de tiempo m�ximo del 50%.
+     *
+     * @param r Rect�ngulo.
+     *
+     * @return True si intersecta con el rectangulo que se pasa como par�metro.
+     */
+    public boolean intersects(Rectangle2D r) {
+        //return gp.intersects(r);
+        // M�s exacto
+        boolean bool = false;
+        if (gp.intersects(r)) {
+            ArrayList arrayCoords;
+            int theType;
+            //Use this array to store segment coordinate data
+            double[] theData = new double[6];
+            PathIterator theIterator;
+
+            Point2D p1 = new Point2D.Double(r.getMinX(),r.getMinY());
+            Point2D p2 = new Point2D.Double(r.getMinX(),r.getMaxY());
+            Point2D p3 = new Point2D.Double(r.getMaxX(),r.getMaxY());
+            Point2D p4 = new Point2D.Double(r.getMaxX(),r.getMinY());
+            Line2D l1 = new Line2D.Double(p1,p2);
+            Line2D l2 = new Line2D.Double(p2,p3);
+            Line2D l3 = new Line2D.Double(p3,p4);
+            Line2D l4 = new Line2D.Double(p4,p1);
+
+            theIterator = this.getPathIterator(null, geomManager.getFlatness());
+            arrayCoords = new ArrayList();
+            while(!theIterator.isDone()) {
+                theType = theIterator.currentSegment(theData);
+                if (theType==PathIterator.SEG_MOVETO) {
+                    arrayCoords.add(new Point2D.Double(theData[0], theData[1]));
+                } else if (theType==PathIterator.SEG_LINETO) {
+                    arrayCoords.add(new Point2D.Double(theData[0], theData[1]));
+                    Point2D pAnt = (Point2D)arrayCoords.get(arrayCoords.size()-2);
+                    Line2D l = new Line2D.Double(pAnt.getX(),pAnt.getY(),theData[0],theData[1]);
+                    if (l.intersectsLine(l1.getX1(),l1.getY1(),l1.getX2(),l1.getY2())
+                        || l.intersectsLine(l2.getX1(),l2.getY1(),l2.getX2(),l2.getY2())
+                        || l.intersectsLine(l3.getX1(),l3.getY1(),l3.getX2(),l3.getY2())
+                        || l.intersectsLine(l4.getX1(),l4.getY1(),l4.getX2(),l4.getY2())
+                        || r.intersectsLine(l)) {
+                        bool = true;
+                    }
+                } else if(theType==PathIterator.SEG_CLOSE){
+                    Point2D firstPoint=(Point2D)arrayCoords.get(0);
+                    Point2D pAnt = (Point2D)arrayCoords.get(arrayCoords.size()-1);
+                    Line2D l = new Line2D.Double(pAnt.getX(),pAnt.getY(),firstPoint.getX(),firstPoint.getY());
+                    if (l.intersectsLine(l1.getX1(),l1.getY1(),l1.getX2(),l1.getY2())
+                        || l.intersectsLine(l2.getX1(),l2.getY1(),l2.getX2(),l2.getY2())
+                        || l.intersectsLine(l3.getX1(),l3.getY1(),l3.getX2(),l3.getY2())
+                        || l.intersectsLine(l4.getX1(),l4.getY1(),l4.getX2(),l4.getY2())
+                        || r.intersectsLine(l)) {
+                        bool = true;
+                    }
+                }else {
+                    System.out.println("Not supported here");
+                }
+                theIterator.next();
+            }
+        }
+        return bool;
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#getPathIterator(java.awt.geom.AffineTransform)
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        return gp.getPathIterator(at);
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.Shape#getPathIterator(java.awt.geom.AffineTransform, double)
+     */
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return gp.getPathIterator(at, flatness);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param at DOCUMENT ME!
+     */
+    public void transform(AffineTransform at) {
+
+        // TODO: PRUEBA. BORRAR ESTA LINEA
+        // gp = FConverter.transformToInts(gp, at);
+
+        gp.transform(at);
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.fmap.core.FShape#reProject(org.cresques.cts.ICoordTrans)
+     */
+    public void reProject(ICoordTrans ct) {
+        gp.reProject(ct);
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.fmap.core.FShape#getStretchingHandlers()
+     */
+    public Handler[] getStretchingHandlers() {
+        ArrayList handlers = new ArrayList();
+        PathIterator gpi = getPathIterator(null);
+
+        double[] theData = new double[6];
+        int i=0;
+        while (!gpi.isDone()) {
+            gpi.currentSegment(theData);
+            //g.fillRect((int)(theData[0]-3),(int)(theData[1]-3),6,6);
+            handlers.add(new PointHandler(i,theData[0], theData[1]));
+            i++;
+            gpi.next();
+        }
+
+        return (Handler[]) handlers.toArray(new Handler[0]);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.OrientablePrimitive#getCoordinateAt(int, int)
+     */
+    public double getCoordinateAt(int index, int dimension) {
+        if (index > getNumVertices()){
+            throw new ArrayIndexOutOfBoundsException();
+        }
+        return getVertex(index).getCoordinateAt(dimension);
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.fmap.core.FShape#getSelectHandlers()
+     */
+    public Handler[] getSelectHandlers() {
+        Handler[] handlers = new Handler[gp.getNumCoords()];
+        for (int i=0 ; i<gp.getNumCoords() ; i++){
+            handlers[i] = new PointSelHandler(i, gp.getPointAt(i).getX(), gp.getPointAt(i).getY());
+        }
+        return handlers;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class PointHandler extends AbstractHandler implements FinalHandler{
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param x DOCUMENT ME!
+         * @param y DOCUMENT ME!
+         */
+        public PointHandler(int i,double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x DOCUMENT ME!
+         * @param y DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+            Point point = gp.getPointAt(index);
+            point.setX(point.getX() + x);
+            point.setY(point.getY() + y);
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            Point point = gp.getPointAt(index);
+            point.setX(x);
+            point.setY(y);
+        }
+    }
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class PointSelHandler extends AbstractHandler implements FinalHandler{
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param x DOCUMENT ME!
+         * @param y DOCUMENT ME!
+         */
+        public PointSelHandler(int i,double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x DOCUMENT ME!
+         * @param y DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+            Point point = gp.getPointAt(index);
+            point.setX(point.getX() + x);
+            point.setY(point.getY() + y);
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            Point point = gp.getPointAt(index);
+            point.setX(x);
+            point.setY(y);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.geometries.iso.GM_Object#coordinateDimension()
+     */
+    public int getDimension() {
+        return 2;
+    }
+
+    public Envelope getEnvelope() {
+        Rectangle2D r=gp.getBounds2D();
+        return new Envelope2D(r.getX(),r.getY(),r.getMaxX(),r.getMaxY());
+    }
+
+    public GeneralPathX getGeneralPath() {
+        return gp;
+    }
+
+    public int getNumVertices() {
+        return gp.getNumCoords();
+    }
+
+    public void addVertex(Point point) {
+    	if( this.getNumVertices()== 0 ) {
+    		gp.moveTo(point);
+    	} else {
+    		gp.lineTo(point);
+    	}
+    }
+
+    public void addVertex(double x, double y)  {
+		try {
+	    	Point point;
+			point = GeometryLocator.getGeometryManager().createPoint(x, y, SUBTYPES.GEOM2D);
+	    	addVertex(point);
+		} catch (CreateGeometryException e) {
+			throw new RuntimeException(e.getMessage());
+		}
+    }
+
+    public void addVertex(double x, double y, double z) {
+		try {
+	    	Point point;
+			point = GeometryLocator.getGeometryManager().createPoint(x, y, SUBTYPES.GEOM3D);
+			point.setCoordinateAt(DIMENSIONS.Z, z);
+	    	addVertex(point);
+		} catch (CreateGeometryException e) {
+			throw new RuntimeException(e.getMessage());
+		}
+    }
+
+    public void addMoveToVertex(Point point) {
+        gp.moveTo(point);
+    }
+
+    public void closePrimitive() {
+        gp.closePath();
+    }
+
+    public void setVertex(int index, Point p) {
+        Point point = gp.getPointAt(index);
+        int min = p.getDimension() < point.getDimension()?p.getDimension():point.getDimension();
+        for(int i=0; i<min; i++){
+            point.setCoordinateAt(i, p.getCoordinateAt(i));
+        }
+    }
+
+    public Point getVertex(int index) {
+        return gp.getPointAt(index);
+    }
+
+    public void insertVertex(int index, Point p) {
+        throw new UnsupportedOperationException("Method not implemented");
+    }
+
+    public void removeVertex(int index) {
+        throw new UnsupportedOperationException("Method not implemented");
+    }
+
+    public void setCoordinateAt(int index, int dimension, double value) {
+        gp.getPointAt(index).setCoordinateAt(dimension, value);
+    }
+
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        this.gp = generalPathX;
+    }
+
+    public void setPoints(Point startPoint, Point endPoint) {
+        throw new UnsupportedOperationException("Method not implemented");
+    }
+
+    public Shape getShape() {
+        return new DrawGeometryShape(this);
+    }
+
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DrawGeometryShape(this, affineTransform);
+    }
+
+    public void ensureCapacity(int capacity) {
+        // TODO:
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/OrientablePrimitive2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope3D.java	(revision 42196)
@@ -0,0 +1,229 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import org.gvsig.fmap.geom.generalpath.primitive.point.Point2DZ;
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.EnvelopeNotInitializedException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Envelope3D extends DefaultEnvelope implements Cloneable {
+
+    public static final String PERSISTENCE_DEFINITION_NAME = "Envelope3Dimensions";
+    private static final int DIMENSION = 3;
+    private boolean isZInitilized = false;
+
+    public Envelope3D() {
+        super();
+    }
+
+    public Envelope3D(Point min, Point max) {
+        super(min, max);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Envelope#getDimension()
+     */
+    public int getDimension() {
+        return DIMENSION;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Envelope#convert(org.cresques.cts.ICoordTrans)
+     */
+    public Envelope convert(ICoordTrans trans) {
+
+        if (isEmpty) {
+            throw new EnvelopeNotInitializedException();
+        }
+
+        if (trans == null) {
+            // clone
+            return new Envelope2D(this.getLowerCorner(), this.getUpperCorner());
+        }
+
+//        if (this.getDimension() > 2) {
+//            return null;
+//        }
+
+	    // We'll reproject by taking samples like this:
+        // 
+        //  *---*---*---*---*
+        //  |               |
+        //  *   *   *   *   *
+        //  |               |
+        //  *   *   *   *   *
+        //  |               |
+        //  *   *   *   *   *
+        //  |               |
+        //  *---*---*---*---*
+        // 
+        // This is because:
+        // 
+        // - In some CRS (for example EPSG:4326) the north/south pole is a "line"
+        //   while in other CRS the north/south pole is a point, so if you
+        //   reproject the bounding box of the world, the result can be absurd.
+        // - Sometimes the top/bottom/right/bottom of one envelope
+        //   corresponds to a strange point in the the other envelope
+        //   (not even a point in the perimeter)
+        // - More generally, reprojecting usually implies a rotation (the result
+        //   is a rotated envelope) so it's better to use a few
+        //   samples along the perimeter.
+        double xmin = getMinimum(0);
+        double ymin = getMinimum(1);
+        double step_w = 0.25 * (getMaximum(0) - xmin);
+        double step_h = 0.25 * (getMaximum(1) - ymin);
+
+        java.awt.geom.Point2D sample = null;
+        java.awt.geom.Point2D sample_trans = null;
+        // Init with worst values
+        java.awt.geom.Point2D res_min = new java.awt.geom.Point2D.Double(
+                Double.MAX_VALUE, Double.MAX_VALUE);
+        java.awt.geom.Point2D res_max = new java.awt.geom.Point2D.Double(
+                -Double.MAX_VALUE, -Double.MAX_VALUE);
+
+        int added = 0;
+        for (int i = 0; i < 5; i++) {
+            for (int j = 0; j < 5; j++) {
+                sample = new java.awt.geom.Point2D.Double(
+                        xmin + i * step_w,
+                        ymin + j * step_h);
+                sample_trans = new java.awt.geom.Point2D.Double(0, 0);
+                try {
+                    sample_trans = trans.convert(sample, sample_trans);
+                } catch (Exception exc) {
+                    // Unable to convert this one: ignore
+                    continue;
+                }
+	                // Update max/min found
+                // X
+                if (sample_trans.getX() > res_max.getX()) {
+                    res_max.setLocation(sample_trans.getX(), res_max.getY());
+                }
+                if (sample_trans.getX() < res_min.getX()) {
+                    res_min.setLocation(sample_trans.getX(), res_min.getY());
+                }
+                // Y
+                if (sample_trans.getY() > res_max.getY()) {
+                    res_max.setLocation(res_max.getX(), sample_trans.getY());
+                }
+                if (sample_trans.getY() < res_min.getY()) {
+                    res_min.setLocation(res_min.getX(), sample_trans.getY());
+                }
+                added++;
+            }
+        }
+
+        if (added == 0) {
+            //logger.error("Unable to reproject envelope with transf: " + trans.toString());
+            return null;
+        }
+
+        return new Envelope3D(
+                new Point2DZ(res_min.getX(), res_min.getX(), this.min.getCoordinateAt(2)),
+                new Point2DZ(res_max.getX(), res_max.getX(), this.max.getCoordinateAt(2))
+        );
+
+    }
+
+    public static void registerPersistent() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if (manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null) {
+            DynStruct definition = manager.addDefinition(
+                    Envelope3D.class,
+                    PERSISTENCE_DEFINITION_NAME,
+                    "Envelope3D persistence definition",
+                    null,
+                    null
+            );
+
+            definition.extend(manager.getDefinition(DefaultEnvelope.PERSISTENCE_DEFINITION_NAME));
+        }
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+
+    private void createPoints() {
+        this.min = new Point2DZ(0, 0, 0);
+        this.max = new Point2DZ(0, 0, 0);
+    }
+
+    public void add(Envelope envelope) {
+        int i;
+
+        if (envelope == null || envelope.isEmpty()) {
+            return;
+        }
+
+        int maxDimension = DIMENSION;
+
+        if (envelope.getDimension() == 2) {
+            maxDimension = 2;
+        }
+
+        if (this.isZInitilized) {
+            for (i = 0; i < maxDimension; i++) {
+                this.min.setCoordinateAt(i,
+                        Math.min(this.min.getCoordinateAt(i), envelope.getMinimum(i)));
+                this.max.setCoordinateAt(i,
+                        Math.max(this.max.getCoordinateAt(i), envelope.getMaximum(i)));
+            }
+            return;
+        }
+
+        if (isEmpty) {
+            createPoints();
+            if (maxDimension == 3) {
+                this.isZInitilized = true;
+            }
+            for (i = 0; i < maxDimension; i++) {
+                this.min.setCoordinateAt(i, envelope.getMinimum(i));
+                this.max.setCoordinateAt(i, envelope.getMaximum(i));
+            }
+            isEmpty = false;
+        } else {
+            if (maxDimension == DIMENSION) {
+                this.min.setCoordinateAt(2, envelope.getMinimum(2));
+                this.max.setCoordinateAt(2, envelope.getMaximum(2));
+                this.isZInitilized = true;
+            }
+            for (i = 0; i < maxDimension; i++) {
+                this.min.setCoordinateAt(i,
+                        Math.min(this.min.getCoordinateAt(i), envelope.getMinimum(i)));
+                this.max.setCoordinateAt(i,
+                        Math.max(this.max.getCoordinateAt(i), envelope.getMaximum(i)));
+            }
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Envelope3D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2DZ.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.curve.spline;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Spline;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author paco
+ *
+ */
+public class Spline2DZ extends Spline2D implements Spline {
+	private static final long serialVersionUID = 8745988712085629939L;
+	private double z;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Spline2DZ(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 * @param geometryType
+	 * @param id
+	 * @param projection
+	 * @param ps
+	 * @param z
+	 */
+	Spline2DZ(GeometryType geometryType, String id, IProjection projection, Point2D[] ps, double z) {
+		super(geometryType, id, projection, ps);
+		this.z = z;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Curve2D#setCoordinateAt(int, int, double)
+	 */
+	public void setCoordinateAt(int index, int dimension, double value) {
+		if (dimension == 2){
+			z = value;
+		}else{
+			super.setCoordinateAt(index, dimension, value);
+		}
+	}
+	
+    public double getCoordinateAt(int index, int dimension) {
+        if (index > gp.getNumCoords()) {
+            throw new ArrayIndexOutOfBoundsException();
+        }
+        double[] coords = gp.getPointAt(index).getCoordinates();
+        if(dimension < coords.length)
+        	return gp.getPointAt(index).getCoordinateAt(dimension);
+        return 0D;
+    }
+
+    public int getDimension() {
+        return 3;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2D.java	(revision 42196)
@@ -0,0 +1,300 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.curve.spline;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.handler.FinalHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Spline;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.DefaultCurve;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * Spline2D.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Spline2D extends DefaultCurve implements Spline {
+	private static final long serialVersionUID = -8109393343595560984L;
+	private ArrayList points2d;
+
+	/**
+	 * The constructor with the GeometryType like and argument
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Spline2D(GeometryType geometryType) {
+		super(geometryType);
+		points2d = new ArrayList();
+		gp = new GeneralPathX();
+	}
+
+	Spline2D(GeometryType geometryType, String id, IProjection projection, Point2D[] ps) {
+		super(geometryType, id, projection, getGeneralPathX(ps));
+		for (int i=0 ; i<ps.length ; i++){
+		    points2d.add(ps[i]);
+		}
+	}
+
+	private static GeneralPathX getGeneralPathX(Point2D[] ps) {
+		GeneralPathX gpx=new GeneralPathX();
+		int num=ps.length;
+		double[] px=new double[num];
+		double[] py=new double[num];
+		for (int i=0;i<num;i++) {
+			Point2D p=ps[i];
+			px[i]=p.getX();
+			py[i]=p.getY();
+
+		}
+		Spline splineX = new Spline(px);
+		Spline splineY = new Spline(py);
+		gpx.moveTo(px[0],py[0]);
+        for (int i = 0; i < px.length - 1; i++) {
+            for (int t = 1; t < 31; t++) {
+                if ((t == 30) && (i == (px.length - 2))) {
+                    // We don't calculate the last point to avoid a possible
+                    // error precision with floating point numbers.
+                    gpx.lineTo(px[px.length - 1], py[px.length - 1]);
+                } else {
+                    double x1 = splineX.fn(i, ((double) t) / 30.0);
+                    double y1 = splineY.fn(i, ((double) t) / 30.0);
+                    gpx.lineTo(x1, y1);
+                }
+            }
+        }
+		if (ps[0].getX()==ps[ps.length-1].getX() && ps[0].getY()==ps[ps.length-1].getY())
+			gpx.closePath();
+		return gpx;
+	}
+
+	private static GeneralPathX getGeneralPathX(ArrayList ps) {
+		Point2D[] _ps  = new Point2D[ps.size()];
+		for (int i=0 ; i<ps.size() ; i++){
+			_ps[i] = (Point2D)ps.get(i);
+		}
+		return getGeneralPathX(_ps);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.Curve2D#getShapeType()
+	 */
+	 public int getShapeType() {
+		 return TYPES.CURVE;
+	 }
+
+	 /* (non-Javadoc)
+	  * @see com.iver.cit.gvsig.fmap.core.FShape#cloneFShape()
+	  */
+	 public FShape cloneFShape() {
+		 Spline2D curve = new Spline2D(getGeometryType());
+		 for (int i=0;i<points2d.size();i++){
+			 curve.addVertex(new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D((Point2D)points2d.get(i)));
+		 }
+		 return (FShape)curve;
+	 }
+
+	 /* (non-Javadoc)
+	  * @see com.iver.cit.gvsig.fmap.core.FShape#getStretchingHandlers()
+	  */
+	 public Handler[] getStretchingHandlers() {
+		 ArrayList handlers = new ArrayList();
+		 for (int i=0;i<points2d.size();i++) {
+			 handlers.add(new PointHandler(i,
+			     ((Point2D)points2d.get(i)).getX(),
+			     ((Point2D)points2d.get(i)).getY()));
+		 }
+		 return (Handler[]) handlers.toArray(new Handler[0]);
+	 }
+
+	 /* (non-Javadoc)
+	  * @see com.iver.cit.gvsig.fmap.core.FShape#getSelectHandlers()
+	  */
+	 public Handler[] getSelectHandlers() {
+		 ArrayList handlers = new ArrayList();
+		 for (int i=0;i<points2d.size();i++) {
+			 Point2D p=((Point2D)points2d.get(i));
+			 handlers.add(new PointSelHandler(i, p.getX(), p.getY()));
+		 }
+		 return (Handler[]) handlers.toArray(new Handler[0]);
+	 }
+
+	 /**
+	  * DOCUMENT ME!
+	  *
+	  * @author Vicente Caballero Navarro
+	  */
+	 class PointHandler extends AbstractHandler implements FinalHandler{
+		 /**
+		  * Crea un nuevo PointHandler.
+		  *
+		  * @param x DOCUMENT ME!
+		  * @param y DOCUMENT ME!
+		  */
+		 public PointHandler(int i,double x, double y) {
+			 point = new Point2D.Double(x,y);
+			 index=i;
+		 }
+
+		 /**
+		  * DOCUMENT ME!
+		  *
+		  * @param x DOCUMENT ME!
+		  * @param y DOCUMENT ME!
+		  *
+		  * @return DOCUMENT ME!
+		  */
+		 public void move(double x, double y) {
+			 point.setLocation(point.getX()+x,point.getY()+y);
+			 //TODO falta actualizar el GeneralPathX
+		 }
+
+		 /**
+		  * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		  */
+		 public void set(double x, double y) {
+			 point.setLocation(x,y);
+			 //TODO falta actualizar el GeneralPathX
+		 }
+	 }
+	 /**
+	  * DOCUMENT ME!
+	  *
+	  * @author Vicente Caballero Navarro
+	  */
+	 class PointSelHandler extends AbstractHandler implements FinalHandler{
+		 /**
+		  * Crea un nuevo PointHandler.
+		  *
+		  * @param x DOCUMENT ME!
+		  * @param y DOCUMENT ME!
+		  */
+		 public PointSelHandler(int i,double x, double y) {
+			 point = new Point2D.Double(x,y);
+			 index=i;
+		 }
+
+		 /**
+		  * DOCUMENT ME!
+		  *
+		  * @param x DOCUMENT ME!
+		  * @param y DOCUMENT ME!
+		  *
+		  * @return DOCUMENT ME!
+		  */
+		 public void move(double x, double y) {
+			 point.setLocation(point.getX()+x,point.getY()+y);
+			 Point2D setp = (Point2D) points2d.get(index);
+			 setp.setLocation(point.getX(), point.getY());
+			 gp = getGeneralPathX(points2d);
+		 }
+
+		 /**
+		  * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		  */
+		 public void set(double x, double y) {
+			 point.setLocation(x,y);
+
+			 Point2D setp = (Point2D) points2d.get(index);
+			 setp.setLocation(point.getX(), point.getY());
+			 gp=getGeneralPathX(points2d);
+		 }
+	 }
+	 static class Spline {
+		 private double y[];
+		 private double y2[];
+
+		 /**
+		  * The constructor calculates the second derivatives of the interpolating function
+		  * at the tabulated points xi, with xi = (i, y[i]).
+		  * Based on numerical recipes in C, http://www.library.cornell.edu/nr/bookcpdf/c3-3.pdf .
+		  * @param y Array of y coordinates for cubic-spline interpolation.
+		  */
+		 public Spline(double y[]) {
+			 this.y = y;
+			 int n = y.length;
+			 y2 = new double[n];
+			 double u[] = new double[n];
+			 for (int i = 1; i < n - 1; i++) {
+				 y2[i] = -1.0 / (4.0 + y2[i - 1]);
+				 u[i] = (6.0 * (y[i + 1] - 2.0 * y[i] + y[i - 1]) - u[i - 1]) / (4.0 + y2[i - 1]);
+			 }
+			 for (int i = n - 2; i >= 0; i--) {
+				 y2[i] = y2[i] * y2[i + 1] + u[i];
+			 }
+		 }
+
+		 /**
+		  * Returns a cubic-spline interpolated value y for the point between
+		  * point (n, y[n]) and (n+1, y[n+1), with t ranging from 0 for (n, y[n])
+		  * to 1 for (n+1, y[n+1]).
+		  * @param n The start point.
+		  * @param t The distance to the next point (0..1).
+		  * @return A cubic-spline interpolated value.
+		  */
+		 public double fn(int n, double t) {
+			 return t * y[n + 1] - ((t - 1.0) * t * ((t - 2.0) * y2[n] - (t + 1.0) * y2[n + 1])) / 6.0 + y[n] - t * y[n];
+		 }
+
+	 }
+
+	 /*
+	  * (non-Javadoc)
+	  * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
+	  */
+	 public void transform(AffineTransform at) {
+
+	      if (at == null) {
+	            return;
+	        }
+
+		 for (int i=0;i<points2d.size();i++) {
+			 Point2D p= (Point2D)points2d.get(i);
+			 at.transform(p, p);
+		 }
+		 gp.transform(at);
+	 }
+
+	 /* (non-Javadoc)
+	  * @see org.gvsig.fmap.geom.primitive.Curve2D#addPoint(org.gvsig.fmap.geom.primitive.Point)
+	  */
+	 public void addVertex(Point point) {
+	     points2d.add(new java.awt.geom.Point2D.Double(point.getX(), point.getY()));
+		 gp = getGeneralPathX(points2d);
+	 }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/spline/Spline2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/OrientableCurve2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/OrientableCurve2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/OrientableCurve2D.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.curve;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientableCurve;
+import org.gvsig.fmap.geom.generalpath.primitive.OrientablePrimitive2D;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public abstract class OrientableCurve2D extends OrientablePrimitive2D implements OrientableCurve{
+	private static final long serialVersionUID = 5985127974671632981L;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public OrientableCurve2D(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	public OrientableCurve2D(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx) {
+		super(geometryType, id, projection, gpx);		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/OrientableCurve2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2DZ.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.curve.arc;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author paco
+ *
+ */
+public class Arc2DZ extends Arc2D implements Arc {
+	private static final long serialVersionUID = -4622030261473894548L;
+	private double z;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Arc2DZ(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 */
+	private Arc2DZ(GeometryType geometryType,String id, IProjection projection, GeneralPathX gpx, Point2D i, Point2D c, Point2D e, double z) {
+		super(geometryType, id, projection, gpx, i, c, e);
+		this.z = z;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle2D#setCoordinateAt(int, int, double)
+	 */
+	public void setCoordinateAt(int index, int dimension, double value) {
+		if (dimension == 2){
+			z = value;
+		}else{
+			super.setCoordinateAt(index, dimension, value);
+		}
+	}
+	
+    public int getDimension() {
+        return 3;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2D.java	(revision 42196)
@@ -0,0 +1,684 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.curve.arc;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.handler.CenterHandler;
+import org.gvsig.fmap.geom.handler.FinalHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.DefaultCurve;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.UtilFunctions;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Arc2D extends DefaultCurve implements Arc {
+	private static final long serialVersionUID = 6416027005106924030L;
+	
+	private static final Logger logger = LoggerFactory.getLogger(Arc2D.class);
+
+	private Point2D init;
+	
+	/**
+	 * This is the middle point (belongs to the arc), not the center
+	 * of the circle/ellipse
+	 */
+	private Point2D middle;
+	private Point2D end;
+	
+	private static final GeometryManager geomManager =
+			GeometryLocator.getGeometryManager();
+		
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Arc2D(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 * @param i
+	 * @param c
+	 * @param e
+	 */
+	protected Arc2D(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx, Point2D i,Point2D c, Point2D e) {
+		super(geometryType, id, projection, gpx);
+		init=i;
+		middle=c;
+		end=e;
+	}	
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.core.FShape#cloneFShape()
+	 */
+	public FShape cloneFShape() {
+		Arc2D arc = new Arc2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone(),init,middle,end);
+		return arc;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
+	 */
+	public void transform(AffineTransform at) {
+	    
+	    if (at == null) {
+	        return;
+	    }
+	    
+		gp.transform(at);
+		InitHandler inithandler=(InitHandler)getStretchingHandlers()[0];
+		//CenterHandler centerhandler=(CenterHandler)getHandlers()[1];
+		EndHandler endhandler=(EndHandler)getStretchingHandlers()[1];
+		Point2D aux1=new Point2D.Double();
+		Point2D aux2=new Point2D.Double();
+		Point2D aux3=new Point2D.Double();
+		at.transform(inithandler.getPoint(),aux1);
+		inithandler.setPoint(aux1);
+		//at.transform(centerhandler.getPoint(),aux2);
+		//centerhandler.setPoint(aux2);
+		at.transform(endhandler.getPoint(),aux3);
+		endhandler.setPoint(aux3);
+		CenterSelHandler centerhandler=(CenterSelHandler)getSelectHandlers()[1];
+		at.transform(centerhandler.getPoint(),aux2);
+		centerhandler.setPoint(aux2);
+
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.Curve2D#getShapeType()
+	 */
+	public int getShapeType() {
+		return TYPES.ARC;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
+	 */
+	public Handler[] getStretchingHandlers() {
+		ArrayList handlers = new ArrayList();
+
+		handlers.add(new InitHandler(0, init.getX(), init.getY()));
+		//handlers.add(new CenterHandler(1, center.getX(), center.getY()));
+		handlers.add(new EndHandler(1, end.getX(), end.getY()));
+
+		return (Handler[]) handlers.toArray(new Handler[0]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
+	 */	
+	public Handler[] getSelectHandlers() {
+		ArrayList handlers = new ArrayList();
+
+		handlers.add(new InitSelHandler(0, init.getX(), init.getY()));
+		handlers.add(new CenterSelHandler(1, middle.getX(), middle.getY()));
+		handlers.add(new EndSelHandler(2, end.getX(), end.getY()));
+
+		return (Handler[]) handlers.toArray(new Handler[0]);
+	}
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */	
+	class CenterSelHandler extends AbstractHandler implements CenterHandler{
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i DOCUMENT ME!
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 */
+		public CenterSelHandler(int i, double x, double y) {
+		    middle = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+		}
+		public void setPoint(Point2D p){
+		    middle=p;
+		}
+		public Point2D getPoint(){
+			return middle;
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+		    middle=new Point2D.Double(x,y);
+			java.awt.geom.Arc2D arco = UtilFunctions.createArc(init, middle, end);
+			gp = new GeneralPathX(arco.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class InitHandler extends AbstractHandler implements FinalHandler{
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i DOCUMENT ME!
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 */
+		public InitHandler(int i, double x, double y) {
+			init = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+			Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			double dist=mediop.distance(middle);
+			init=new Point2D.Double(init.getX()+x,init.getY()+y);
+
+			mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
+			if (UtilFunctions.getAngle(end,init)<=Math.PI){
+				dist=-dist;
+			}
+			middle=UtilFunctions.getPoint(mediop,perp[1],dist);
+
+			java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
+			gp=new GeneralPathX(arco.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+		public void setPoint(Point2D p){
+			init=p;
+		}
+		public Point2D getPoint(){
+			return init;
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+			}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class EndHandler extends AbstractHandler implements FinalHandler{
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i DOCUMENT ME!
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 */
+		public EndHandler(int i, double x, double y) {
+			end = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+			Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			double dist=mediop.distance(middle);
+			end=new Point2D.Double(end.getX()+x,end.getY()+y);
+
+			mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
+			if (UtilFunctions.getAngle(end,init)<=Math.PI){
+				dist=-dist;
+			}
+			middle=UtilFunctions.getPoint(mediop,perp[1],dist);
+
+			java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
+			gp=new GeneralPathX(arco.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+		public void setPoint(Point2D p){
+			end=p;
+		}
+		public Point2D getPoint(){
+			return end;
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class InitSelHandler extends AbstractHandler implements FinalHandler{
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i DOCUMENT ME!
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 */
+		public InitSelHandler(int i, double x, double y) {
+			init = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+			Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			double dist=mediop.distance(middle);
+			init=new Point2D.Double(init.getX()+x,init.getY()+y);
+
+			mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
+			if (UtilFunctions.getAngle(end,init)<=Math.PI){
+				dist=-dist;
+			}
+			middle=UtilFunctions.getPoint(mediop,perp[1],dist);
+
+			java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
+			gp=new GeneralPathX(arco.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+		public void setPoint(Point2D p){
+			init=p;
+		}
+		public Point2D getPoint(){
+			return init;
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+			Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			double dist=mediop.distance(middle);
+			init=new Point2D.Double(x,y);
+
+			mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			// TODO comentado para quitar warning: Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
+			if (UtilFunctions.getAngle(end,init)<=Math.PI){
+				dist=-dist;
+			}
+			///center=TrigonometricalFunctions.getPoint(mediop,perp[1],dist);
+			java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
+			gp=new GeneralPathX(arco.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class EndSelHandler extends AbstractHandler implements FinalHandler{
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i DOCUMENT ME!
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 */
+		public EndSelHandler(int i, double x, double y) {
+			end = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x DOCUMENT ME!
+		 * @param y DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+			Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			double dist=mediop.distance(middle);
+			end=new Point2D.Double(end.getX()+x,end.getY()+y);
+
+			mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
+			if (UtilFunctions.getAngle(end,init)<=Math.PI){
+				dist=-dist;
+			}
+			middle=UtilFunctions.getPoint(mediop,perp[1],dist);
+
+			java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
+			gp=new GeneralPathX(arco.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+		public void setPoint(Point2D p){
+			end=p;
+		}
+		public Point2D getPoint(){
+			return end;
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+			Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			double dist=mediop.distance(middle);
+			end=new Point2D.Double(x,y);
+
+			mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
+			// TODO comentado para quitar warning: Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
+			if (UtilFunctions.getAngle(end,init)<=Math.PI){
+				dist=-dist;
+			}
+			///center=TrigonometricalFunctions.getPoint(mediop,perp[1],dist);
+			java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
+			gp=new GeneralPathX(arco.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
+	 */
+	public boolean intersects(Rectangle2D r) {
+		return gp.intersects(r);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
+	 */
+	public void setPoints(Point p1, Point p2, Point p3) {
+		Point2D _p1 = new java.awt.geom.Point2D.Double(p1.getCoordinateAt(0), p1.getCoordinateAt(1));
+		Point2D _p2 = new java.awt.geom.Point2D.Double(p2.getCoordinateAt(0), p2.getCoordinateAt(1));
+		Point2D _p3 = new java.awt.geom.Point2D.Double(p3.getCoordinateAt(0), p3.getCoordinateAt(1));
+		setPoints(_p1, _p2, _p3);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Curve2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
+	 */
+	public void setGeneralPath(GeneralPathX generalPathX) {
+		throw new UnsupportedOperationException("Use setPoints(Point p1, Point p2, Point p3)");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, java.awt.geom.Point2D)
+	 */
+	private void setPoints(Point2D p1, Point2D p2, Point2D p3) {
+		java.awt.geom.Arc2D arco = UtilFunctions.createArc(p1, p2, p3);
+		if (arco == null) {
+            logger.info("Did not set arc points (probably aligned points): "
+                + p1.getX() + " " + p1.getY() + " :: "
+                + p2.getX() + " " + p2.getY() + " :: "
+                + p3.getX() + " " + p3.getY());
+		    throw new IllegalArgumentException("Did not set arc points (probably aligned points).");
+		}
+		
+		this.gp = new GeneralPathX(	arco.getPathIterator(null,
+				geomManager.getFlatness()));
+		this.init = p1;
+        this.middle = p2;
+		this.end = p3;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(org.gvsig.fmap.geom.primitive.Point, double, double, double)
+	 */
+	public void setPoints(Point center, double radius, double initAngle,
+			double angleExt) {
+		Point2D _center = new java.awt.geom.Point2D.Double(center.getCoordinateAt(0), center.getCoordinateAt(1));
+		setPoints(_center, radius, initAngle, angleExt);
+	}
+	
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Arc#setPointsStartExt(org.gvsig.fmap.geom.primitive.Point, double, double, double)
+     */
+    public void setPointsStartExt(Point center, double radius,
+        double startAngle, double angleExt) {
+        setPoints(center, radius, startAngle, angleExt);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Arc#setPointsStartEnd(org.gvsig.fmap.geom.primitive.Point, double, double, double)
+     */
+    public void setPointsStartEnd(Point center, double radius,
+        double startAngle, double endAngle) {
+        
+        if (startAngle == endAngle) {
+            setPointsStartExt(center, radius, startAngle, 0);
+        } else {
+            
+            /*
+             * Normalize then force clockwise:
+             */
+            double norm_start = normalizeAngle(startAngle);
+            double norm_end = normalizeAngle(endAngle);
+            double ang_ext = 0;
+
+            // clockwise
+            // ang_ext must be positive
+            if (norm_start >= norm_end) {
+                ang_ext = norm_start - norm_end;
+            } else {
+                ang_ext = 2 * Math.PI - (norm_end - norm_start);
+            }
+
+            // finally call other method with ang_ext
+            setPointsStartExt(center, radius, startAngle, ang_ext);
+        }
+    }
+
+	/**
+	 * Leaves the angle between PI and -PI
+     * @param angle (radians)
+     * @return
+     */
+    private double normalizeAngle(double angle) {
+        
+        if (angle > -Math.PI && angle <= Math.PI) {
+            return angle;
+        }
+        
+        if (angle == Double.NEGATIVE_INFINITY
+            || angle == Double.POSITIVE_INFINITY) {
+            return 0;
+        }
+        
+        double abs_ang = Math.abs(angle);
+        double remove = Math.floor(abs_ang / (2 * Math.PI));
+        remove = remove * 2 * Math.PI;
+        double resp = 0;
+        
+        if (angle > 0) {
+            resp = angle - remove;
+            if (resp > Math.PI) {
+                // final adjustment
+                resp = resp - 2 * Math.PI;
+            }
+        } else {
+            resp = angle + remove;
+            if (resp <= -Math.PI) {
+                // final adjustment
+                resp = resp + 2 * Math.PI;
+            }
+        }
+        
+        return resp;
+    }
+
+    /* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, double, double, double)
+	 */
+	private void setPoints(Point2D center, double radius, double initAngle,
+			double angleExt) {
+            
+            double x;
+            double y;
+            double w;
+            double h;
+            double start;
+            double extent;
+            double angleOffset;
+            final double pi2 = Math.PI*2;
+            
+            angleOffset = 0;
+            if( angleExt<0 ) {
+                angleOffset = pi2 + angleExt;
+                angleExt = Math.abs(angleExt);
+            }            
+            x = center.getX() - radius;
+            y = center.getY() - radius;
+            w = radius * 2;
+            h = w; // Son siempre arcos de circunferencia
+            
+            if( angleExt > 0 && (angleExt % pi2) == 0  ) {
+                start = 0;
+                extent = 360;
+            } else {
+                angleExt = angleExt % pi2; //Asumimos que aqui angleExt es siempre positivo
+                initAngle = Math.abs(initAngle) % pi2;
+                start = Math.toDegrees( pi2 - initAngle + angleOffset) ;
+                extent = - Math.toDegrees(pi2 - angleExt);
+            }
+            java.awt.geom.Arc2D.Double arco = new java.awt.geom.Arc2D.Double(
+                    x,y,w,h,start,extent,java.awt.geom.Arc2D.OPEN);
+            
+            this.gp = new GeneralPathX(	arco.getPathIterator(null,geomManager.getFlatness()));
+
+            this.init = arco.getStartPoint();
+            this.end = arco.getEndPoint();
+
+            java.awt.geom.Arc2D.Double semiarco = new java.awt.geom.Arc2D.Double(
+                    x,y,w,h,start,extent/2,java.awt.geom.Arc2D.OPEN);
+            this.middle = semiarco.getEndPoint();
+	}
+	
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Curve2D#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
+	 */
+	public void setPoints(Point startPoint, Point endPoint) {
+		throw new UnsupportedOperationException("Use setGeneralPathX");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#getEndPoint()
+	 */
+	public Point getEndPoint() {
+		return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(end.getX(), end.getY());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#getInitPoint()
+	 */
+	public Point getInitPoint() {
+		return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(init.getX(), init.getY());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#getCenterPoint()
+	 */
+	public Point getCenterPoint() {
+		Point2D p = UtilFunctions.getCenter(init, middle,end);
+		try {
+			return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(p.getX(), p.getY());
+		} catch (Exception e) {
+			return  null;
+		}
+	}
+
+
+
+		
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2D.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.curve.line;
+
+import java.awt.geom.Point2D;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.generalpath.DefaultGeometryManager;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.DefaultCurve;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.UtilFunctions;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class Line2D extends DefaultCurve implements Line {
+	private static final long serialVersionUID = 8161943328767877860L;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Line2D(GeometryType geomType) {
+		super(geomType);
+	}
+
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method.
+	 * @param geomType
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 */
+	public Line2D(GeometryType geomType, String id, IProjection projection, GeneralPathX gpx) {
+		super(geomType, id, projection, gpx);
+		gp=gpx;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#getShapeType()
+	 */
+	public int getShapeType() {
+		return TYPES.CURVE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.FShape#cloneFShape()
+	 */
+	public FShape cloneFShape() {
+		return new Line2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Curve#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
+	 */
+	public void setPoints(Point startPoint, Point endPoint) {
+		Point2D _startPoint = new java.awt.geom.Point2D.Double(startPoint.getCoordinateAt(0), startPoint.getCoordinateAt(1));
+		Point2D _endPoint = new java.awt.geom.Point2D.Double(endPoint.getCoordinateAt(0), endPoint.getCoordinateAt(1));
+		setPoints(_startPoint, _endPoint);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Curve#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D)
+	 */
+        
+	private void setPoints(Point2D startPoint, Point2D endPoint) {
+		java.awt.geom.Line2D line = UtilFunctions.createLine(startPoint, endPoint);
+		setGeneralPath(new GeneralPathX(line.getPathIterator(null)));
+	}
+
+    public MultiPoint toPoints() throws GeometryException {
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPoint multipoint = manager.createMultiPoint(this.getGeometryType().getSubType());
+        multipoint.ensureCapacity(this.getNumVertices());
+        for( int n=0; n<this.getNumVertices(); n++ ) {
+            multipoint.addPrimitive(this.getVertex(n));
+        }
+        return multipoint;    
+    }
+
+    public MultiLine toLines() throws GeometryException {
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiLine multi = manager.createMultiLine(this.getGeometryType().getSubType());
+        multi.addPrimitive(this);
+        return multi;
+    }
+
+    public MultiPolygon toPolygons() throws GeometryException {
+        com.vividsolutions.jts.operation.polygonize.Polygonizer jts_polygonizer = new com.vividsolutions.jts.operation.polygonize.Polygonizer();
+        
+        jts_polygonizer.add(this.toJTS());
+        Collection jts_polygons = jts_polygonizer.getPolygons();
+        if( jts_polygons == null && jts_polygons.isEmpty() ) {
+            return null;
+        }
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPolygon multipolygon = manager.createMultiPolygon(this.getGeometryType().getSubType());
+        Iterator it = jts_polygons.iterator();
+        while( it.hasNext() ) {
+            com.vividsolutions.jts.geom.Geometry jts_polygon = (com.vividsolutions.jts.geom.Geometry) it.next();
+            Polygon polygon = (Polygon) manager.createFrom(jts_polygon);
+            multipolygon.addPrimitive(polygon);
+        }
+        return multipolygon;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2DZ.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.curve.line;
+
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * Polilinea 3D.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Line2DZ extends Line2D implements Line {
+    private static final long serialVersionUID = 3431077088722464314L;
+   
+    /**
+     * The constructor with the GeometryType like and argument 
+     * is used by the {@link GeometryType}{@link #create()}
+     * to create the geometry
+     * @param type
+     * The geometry type
+     */
+    public Line2DZ(GeometryType geometryType) {
+        super(geometryType);
+    }
+
+    /**
+     * Constructor used in the {@link Geometry#cloneGeometry()} method
+     * @param id
+     * @param projection
+     * @param gpx
+     * @param pZ
+     */
+    Line2DZ(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx) {
+        super(geometryType, id, projection, gpx);      
+    }	
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.Curve2D#getShapeType()
+     */
+    public int getShapeType() {
+        return TYPES.CURVE;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.Curve2D#cloneFShape()
+     */
+    public FShape cloneFShape() {
+        return new Line2DZ(getGeometryType(), id, projection, (GeneralPathX) gp.clone());
+    }
+    
+    public double getCoordinateAt(int index, int dimension) {
+        if (index > gp.getNumCoords()) {
+            throw new ArrayIndexOutOfBoundsException();
+        }
+        double[] coords = gp.getPointAt(index).getCoordinates();
+        if(dimension < coords.length)
+        	return gp.getPointAt(index).getCoordinateAt(dimension);
+        return 0D;
+    }
+    
+    public int getDimension() {
+        return 3;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/line/Line2DZ.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/DefaultCurve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/DefaultCurve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/DefaultCurve.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.generalpath.primitive.curve;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class DefaultCurve extends OrientableCurve2D implements Curve {
+    private static final long serialVersionUID = 3675336625259623632L;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param geometryType
+	 * The geometry type
+	 */
+	public DefaultCurve(GeometryType geometryType) {
+		super(geometryType);		
+	}
+
+	/**
+         * @param geometryType
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 */
+	public DefaultCurve(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx) {
+		super(geometryType, id, projection, gpx);		
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/DefaultCurve.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2DZ.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.polygon;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * Polilinea 3D.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Polygon2DZ extends Polygon2D implements Polygon {
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Polygon2DZ(GeometryType geometryType) {
+		super(geometryType);
+	}
+
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 * @param pZ
+	 */
+	Polygon2DZ(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx) {
+		super(geometryType, id, projection, gpx);		
+	}
+
+	/**
+	 * Clona FPolygon3D.
+	 *
+	 * @return FShape clonado.
+	 */
+	public FShape cloneFShape() {
+		return new Polygon2DZ(getGeometryType(), id, projection, (GeneralPathX) gp.clone());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#getShapeType()
+	 */
+	public int getShapeType() {
+		return TYPES.SURFACE;
+	}	
+
+    public int getDimension() {
+        return 3;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2DZ.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2D.java	(revision 42196)
@@ -0,0 +1,256 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.polygon;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.PrecisionModel;
+import com.vividsolutions.jts.geom.TopologyException;
+import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory;
+import com.vividsolutions.jts.precision.GeometryPrecisionReducer;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.generalpath.DefaultGeometryManager;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.OrientableSurface2D;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * Pol�gono 2D.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Polygon2D extends OrientableSurface2D implements Polygon {
+	private static final long serialVersionUID = -8448256617197415743L;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Polygon2D(GeometryType geomType) {
+		super(geomType);
+	}
+
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method.
+	 * @param geomType
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 */
+	protected Polygon2D(GeometryType geomType, String id, IProjection projection, GeneralPathX gpx) {
+		super(geomType, id, projection, gpx);
+	}	
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#getShapeType()
+	 */
+	public int getShapeType() {
+		return TYPES.SURFACE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.FShape#cloneFShape()
+	 */
+	public FShape cloneFShape() {
+		return new Polygon2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#intersects(java.awt.geom.Rectangle2D)
+	 */
+	public boolean intersects(Rectangle2D r) {
+		return gp.intersects(r);
+	}
+
+	
+    public Geometry union(Geometry other)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+
+        com.vividsolutions.jts.geom.Geometry this_jts, other_jts, union_jts;
+        Geometry resp = null;
+
+        try {
+            this_jts = getJTS();
+            other_jts = Converter.geometryToJts(other);
+            union_jts = this_jts.union(other_jts);
+            if (union_jts instanceof com.vividsolutions.jts.geom.Polygon) {
+                double tole = union_jts.getArea();
+                tole = tole * 1e-12;
+                union_jts = removeInvalidHoles((com.vividsolutions.jts.geom.Polygon) union_jts, tole);
+            } else {
+                if (union_jts instanceof com.vividsolutions.jts.geom.MultiPolygon) {
+                    double tole = union_jts.getArea();
+                    tole = tole * 1e-12;
+                    union_jts =
+                        removeInvalidHoles((com.vividsolutions.jts.geom.MultiPolygon) union_jts, tole);
+                }
+            }
+            resp = Converter.jtsToGeometry(union_jts);
+            return resp;
+        } catch (CreateGeometryException e) {
+            throw new GeometryOperationException(e);
+        } catch (TopologyException e) {
+            /*
+             * If JTS throws this, we'll try to simplify them
+             */
+            try {
+                this_jts = getJTS();
+                other_jts = Converter.geometryToJts(other);
+
+                PrecisionModel pm = new PrecisionModel(1000000);
+                GeometryPrecisionReducer gpr = new GeometryPrecisionReducer(pm);
+                this_jts = gpr.reduce(this_jts);
+                other_jts = gpr.reduce(other_jts);
+                union_jts = this_jts.union(other_jts);
+
+                if (union_jts instanceof com.vividsolutions.jts.geom.Polygon) {
+                    double tole = union_jts.getArea();
+                    tole = tole * 1e-12;
+                    union_jts = removeInvalidHoles((com.vividsolutions.jts.geom.Polygon) union_jts, tole);
+                } else {
+                    if (union_jts instanceof com.vividsolutions.jts.geom.MultiPolygon) {
+                        double tole = union_jts.getArea();
+                        tole = tole * 1e-12;
+                        union_jts =
+                            removeInvalidHoles((com.vividsolutions.jts.geom.MultiPolygon) union_jts, tole);
+                    }
+                }
+
+                resp = Converter.jtsToGeometry(union_jts);
+                return resp;
+            } catch (Exception exc) {
+                throw new GeometryOperationException(exc);
+            }
+        }
+    }
+    
+    
+    private com.vividsolutions.jts.geom.Geometry getJTS() {
+        return Converter.geometryToJts(this);
+    }
+    
+    private com.vividsolutions.jts.geom.MultiPolygon removeInvalidHoles(com.vividsolutions.jts.geom.MultiPolygon mpo, double tol) {
+
+        GeometryFactory gf = new GeometryFactory(mpo.getPrecisionModel());
+        
+        int npo = mpo.getNumGeometries();
+        com.vividsolutions.jts.geom.Polygon[] pos = new com.vividsolutions.jts.geom.Polygon[npo];
+        for (int i=0; i<npo; i++) {
+            pos[i] = removeInvalidHoles((com.vividsolutions.jts.geom.Polygon) mpo.getGeometryN(i), tol);
+        }
+        return gf.createMultiPolygon(pos);
+    }
+    
+    private com.vividsolutions.jts.geom.Polygon removeInvalidHoles(com.vividsolutions.jts.geom.Polygon po, double tol) {
+        
+        GeometryFactory gf = new GeometryFactory(po.getPrecisionModel());
+        
+        int nholes = po.getNumInteriorRing();
+        List validholes = new ArrayList();
+        for (int i=0; i<nholes; i++) {
+            LineString ls = po.getInteriorRingN(i);
+            LinearRing lr = toLinearRing(ls, gf);
+            if (getLinearRingArea(lr, gf) > tol) {
+                validholes.add(lr);
+            }
+            
+        }
+        
+        if (validholes.size() < nholes) {
+            
+            LinearRing[] holes = (LinearRing[]) validholes.toArray(new LinearRing[0]);
+            return gf.createPolygon(
+                toLinearRing(po.getExteriorRing(), gf), holes);
+        } else {
+            return po;
+        }
+        
+    }
+
+    private double getLinearRingArea(LinearRing lr, GeometryFactory gf) {
+        com.vividsolutions.jts.geom.Polygon po = gf.createPolygon(lr);
+        double resp = po.getArea(); 
+        return resp;
+    }
+
+    private LinearRing toLinearRing(LineString ls, GeometryFactory gf) {
+        return gf.createLinearRing(ls.getCoordinateSequence());
+    }
+
+    public MultiPoint toPoints() throws GeometryException {
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPoint multipoint = manager.createMultiPoint(this.getGeometryType().getSubType());
+        multipoint.ensureCapacity(this.getNumVertices());
+        for( int n=0; n<this.getNumVertices(); n++ ) {
+            multipoint.addPrimitive(this.getVertex(n));
+        }
+        return multipoint;    
+    }
+
+    public MultiLine toLines() throws GeometryException {
+        GeometryFactory fact = new GeometryFactory();
+        Coordinate[] coordinates = this.toJTS().getCoordinates();
+        LineString jts_line = fact.createLineString(coordinates);
+        
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        Geometry line = manager.createFrom(jts_line);
+        MultiCurve multi = manager.createMultiCurve(this.getGeometryType().getSubType());
+        multi.addPrimitive((Primitive) line);
+        return (MultiLine) multi;
+    }
+
+    public MultiPolygon toPolygons() throws GeometryException {
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPolygon multi = manager.createMultiPolygon(this.getGeometryType().getSubType());
+        multi.addPrimitive(this);
+        return multi;    
+    }
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/polygon/Polygon2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2DZ.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author paco
+ *
+ */
+public class Circle2DZ extends Circle2D implements Circle {
+	private static final long serialVersionUID = 5806439460681368421L;
+	private double z;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Circle2DZ(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 * @param c
+	 * @param r
+	 * @param z
+	 */
+	Circle2DZ(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx, Point2D c, double r, double z) {
+		super(geometryType, id, projection, gpx, c, r);
+		this.z = z;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle2D#setCoordinateAt(int, int, double)
+	 */
+	public void setCoordinateAt(int index, int dimension, double value) {
+		if (dimension == 2){
+			z = value;
+		}else{
+			super.setCoordinateAt(index, dimension, value);
+		}
+	}
+	
+    public double getCoordinateAt(int index, int dimension) {
+        if (index > gp.getNumCoords()) {
+            throw new ArrayIndexOutOfBoundsException();
+        }
+        double[] coords = gp.getPointAt(index).getCoordinates();
+        if(dimension < coords.length)
+        	return gp.getPointAt(index).getCoordinateAt(dimension);
+        return 0D;
+    }
+
+    public int getDimension() {
+        return 3;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2D.java	(revision 42196)
@@ -0,0 +1,606 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Arc2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.handler.CuadrantHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.EllipticArc;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+import org.gvsig.fmap.geom.generalpath.primitive.curve.DefaultCurve;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.OrientableSurface2D;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.UtilFunctions;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class EllipticArc2D extends OrientableSurface2D implements EllipticArc {
+    private static final long serialVersionUID = 2988037614443119814L;
+
+    private Point2D axis1Start;
+    private Point2D axis1End;
+    private double semiAxis2Length;
+    private double angSt;
+    private double angExt;
+
+    /**
+     * The constructor with the GeometryType like and argument 
+     * is used by the {@link GeometryType}{@link #create()}
+     * to create the geometry
+     * @param type
+     * The geometry type
+     */
+    public EllipticArc2D(GeometryType geometryType) {
+        super(geometryType);		
+    }
+
+    /**
+     * Constructor used in the {@link Geometry#cloneGeometry()} method
+     * @param id
+     * @param projection
+     * @param gpx
+     * @param axis1Start
+     * @param axis1End
+     * @param semiAxis2Length
+     * @param angSt
+     * @param angExt
+     */
+    EllipticArc2D(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx, Point2D axis1Start,Point2D axis1End, double semiAxis2Length, double angSt, double angExt) {
+        super(geometryType, id, projection, gpx);
+        this.axis1Start = axis1Start;
+        this.axis1End = axis1End;
+        this.semiAxis2Length = semiAxis2Length;
+        this.angSt = angSt;
+        this.angExt = angExt;
+    }
+
+    public FShape cloneFShape() {
+        EllipticArc2D arc = new EllipticArc2D(geometryType, id, projection, gp, axis1Start, axis1End, semiAxis2Length, angSt, angExt);
+        return arc;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.EllipticArc#getAxis1Start()
+     */
+    public Point getAxis1Start(){
+        try {
+            return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(axis1Start);
+        } catch (Exception e){
+            return null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.EllipticArc#getAxis1End()
+     */
+    public Point getAxis1End(){
+        try {
+            return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(axis1End);
+        } catch (Exception e){
+            return null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.EllipticArc#getAxis2Dist()
+     */
+    public double getAxis2Dist(){
+        return this.semiAxis2Length;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.EllipticArc#getAngSt()
+     */
+    public double getAngSt(){
+        return this.angSt;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.EllipticArc#getAngExt()
+     */
+    public double getAngExt(){
+        return this.angExt;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
+     */
+    public void transform(AffineTransform at) {
+        
+        if (at == null) {
+            return;
+        }
+
+        Point2D center = new Point2D.Double((axis1Start.getX() + axis1End.getX()) / 2,
+            (axis1Start.getY() + axis1End.getY()) / 2);
+        Point2D pdist = UtilFunctions.getPerpendicularPoint(axis1Start, axis1End, center,
+            semiAxis2Length);
+        Point2D aux1 = new Point2D.Double();
+        at.transform(axis1Start, aux1);
+        axis1Start = aux1;
+        Point2D aux2 = new Point2D.Double();
+        at.transform(axis1End, aux2);
+        axis1End = aux2;
+
+        center = new Point2D.Double((axis1Start.getX() + axis1End.getX()) / 2, (axis1Start
+            .getY() + axis1End.getY()) / 2);
+
+        Point2D aux3 = new Point2D.Double();
+        at.transform(pdist, aux3);
+        semiAxis2Length = center.distance(aux3);
+        gp.transform(at);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.Curve2D#getShapeType()
+     */
+    public int getShapeType() {
+        return TYPES.ELLIPTICARC;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
+     */
+    public Handler[] getStretchingHandlers() {
+        ArrayList handlers = new ArrayList();
+        Rectangle2D rect = this.getBounds2D();
+        handlers.add(new CenterHandler(0, rect.getCenterX(), rect.getCenterY()));
+        return (Handler[]) handlers.toArray(new Handler[0]);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
+     */
+    public Handler[] getSelectHandlers() {
+        //TODO: Faltaria tener en cuenta handlers para los angulos angSt y angExt
+        ArrayList handlers = new ArrayList();
+        Rectangle2D rect = this.getBounds2D();
+        handlers.add(new CenterSelHandler(0, rect.getCenterX(), rect.getCenterY()));
+        handlers.add(new Axis1StSelHandler(1, axis1Start.getX(), axis1Start.getY()));
+        handlers.add(new Axis1EndSelHandler(2, axis1End.getX(), axis1End.getY()));
+        Point2D mediop = new Point2D.Double((axis1End.getX() + axis1Start.getX()) / 2,
+            (axis1End.getY() + axis1Start.getY()) / 2);
+        Point2D[] p = UtilFunctions.getPerpendicular(axis1Start, axis1End, mediop);
+        Point2D u = UtilFunctions.getPoint(mediop, p[1], semiAxis2Length);
+        Point2D d = UtilFunctions.getPoint(mediop, p[1], -semiAxis2Length);
+
+        handlers.add(new RadioSelYHandler(3, u.getX(), u.getY()));
+        handlers.add(new RadioSelYHandler(4, d.getX(), d.getY()));
+
+        return (Handler[]) handlers.toArray(new Handler[0]);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class CenterHandler extends AbstractHandler implements Handler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public CenterHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+            Point point;
+            for (int i = 0; i < gp.getNumCoords(); i++) {
+                point = gp.getPointAt(i);
+                point.setX(point.getX() + x);
+                point.setY(point.getY() + y);
+            }
+            axis1Start = new Point2D.Double(axis1Start.getX() + x, axis1Start.getY() + y);
+            axis1End = new Point2D.Double(axis1End.getX() + x, axis1End.getY() + y);
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class CenterSelHandler extends AbstractHandler implements Handler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public CenterSelHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+            Point point;
+            for (int i = 0; i < gp.getNumCoords(); i++) {
+                point = gp.getPointAt(i);
+                point.setX(point.getX() + x);
+                point.setY(point.getY() + y);
+            }
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            Point2D center = new Point2D.Double((axis1Start.getX() + axis1End.getX()) / 2,
+                (axis1Start.getY() + axis1End.getY()) / 2);
+            double dx = x - center.getX();
+            double dy = y - center.getY();
+            Point point;
+            for (int i = 0; i < gp.getNumCoords(); i++) {
+                point = gp.getPointAt(i);
+                point.setX(point.getX() + dx);
+                point.setY(point.getY() + dy);
+            }
+            axis1Start = new Point2D.Double(axis1Start.getX() + dx, axis1Start.getY() + dy);
+            axis1End = new Point2D.Double(axis1End.getX() + dx, axis1End.getY() + dy);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class Axis1StSelHandler extends AbstractHandler implements CuadrantHandler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public Axis1StSelHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            // TODO comentado para quitar warning: double dx=x-init.getX();
+            // TODO comentado para quitar warning: double dy=y-init.getY();
+            Point2D center = new Point2D.Double((axis1Start.getX() + axis1End.getX()) / 2,
+                (axis1Start.getY() + axis1End.getY()) / 2);
+            // Point2D[]
+            // p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
+            // Point2D[]
+            // p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
+            // Point2D.Double(x,y));
+
+            // Point2D
+            // pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
+            // double xdist=2*pl.distance(x,y);
+            double xdist = 2 * center.distance(x, y);
+            // init=new Point2D.Double(init.getX()+dx,init.getY()+dy);
+            axis1Start = UtilFunctions.getPoint(center, axis1Start, center.distance(x, y));
+            axis1End = UtilFunctions.getPoint(axis1Start, center, xdist);
+            Arc2D.Double arc = new Arc2D.Double(axis1Start.getX(), axis1Start.getY()
+                - semiAxis2Length, xdist, 2 * semiAxis2Length, Math.toDegrees(angSt), Math.toDegrees(angExt), Arc2D.OPEN);
+            // TODO comentado para quitar warning: Point2D rotationPoint = new
+            // Point2D.Double(init.getX() + xdist /2, init.getY());
+
+            double angle = UtilFunctions.getAngle(axis1Start, axis1End);
+            AffineTransform mT = AffineTransform.getRotateInstance(angle, axis1Start
+                .getX(), axis1Start.getY());
+            gp = new GeneralPathX(arc.getPathIterator(null,
+            		geomManager.getFlatness()));
+            gp.transform(mT);
+
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class Axis1EndSelHandler extends AbstractHandler implements CuadrantHandler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public Axis1EndSelHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            // double dx=x-getPoint().getX();
+            // double dy=y-getPoint().getY();
+            Point2D center = new Point2D.Double((axis1Start.getX() + axis1End.getX()) / 2,
+                (axis1Start.getY() + axis1End.getY()) / 2);
+            // Point2D[]
+            // p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
+            // Point2D[]
+            // p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
+            // Point2D.Double(x,y));
+
+            // Point2D
+            // pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
+            // double xdist=2*pl.distance(x,y);
+            double xdist = 2 * center.distance(x, y);
+            axis1End = UtilFunctions.getPoint(center, axis1End, center.distance(x, y));
+            // end=new Point2D.Double(end.getX()+dx,end.getY()+dy);
+            axis1Start = UtilFunctions.getPoint(axis1End, center, xdist);
+            Arc2D.Double arc = new Arc2D.Double(axis1Start.getX(), axis1Start.getY()
+                - semiAxis2Length, xdist, 2 * semiAxis2Length, Math.toDegrees(angSt), Math.toDegrees(angExt), Arc2D.OPEN);
+            // Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
+            // /2, init.getY());
+
+            double angle = UtilFunctions.getAngle(axis1Start, axis1End);
+            AffineTransform mT = AffineTransform.getRotateInstance(angle, axis1Start
+                .getX(), axis1Start.getY());
+            gp = new GeneralPathX(arc.getPathIterator(null,
+            		geomManager.getFlatness()));
+            gp.transform(mT);
+
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class RadioSelYHandler extends AbstractHandler implements CuadrantHandler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public RadioSelYHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            semiAxis2Length = new Point2D.Double((axis1Start.getX() + axis1End.getX()) / 2, (axis1Start
+                .getY() + axis1End.getY()) / 2).distance(x, y);
+            // ydist=getSelectHandlers()[1].getPoint().distance(x,y);
+            // Point2D center=new Point2D.Double((init.getX() + end.getX()) / 2,
+            // (init.getY() + end.getY()) / 2);
+            // Point2D[]
+            // p=TrigonometricalFunctions.getPerpendicular(init,end,new
+            // Point2D.Double(x,y));
+            // Point2D
+            // pl=TrigonometricalFunctions.getIntersection(p[0],p[1],init,end);
+            // double xdist=2*pl.distance(x,y);
+            double xdist = axis1Start.distance(axis1End);
+            Arc2D.Double arc = new Arc2D.Double(axis1Start.getX(), axis1Start.getY()
+                - semiAxis2Length, xdist, 2 * semiAxis2Length, Math.toDegrees(angSt), Math.toDegrees(angExt), Arc2D.OPEN);
+            // Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
+            // /2, init.getY());
+
+            double angle = UtilFunctions.getAngle(axis1Start, axis1End);
+            AffineTransform mT = AffineTransform.getRotateInstance(angle, axis1Start
+                .getX(), axis1Start.getY());
+            gp = new GeneralPathX(arc.getPathIterator(null,
+            		geomManager.getFlatness()));
+            gp.transform(mT);
+        }
+    }
+
+    //TODO: Faltan Handlers para los angulos inicial y de extension (o final)
+
+
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
+     */
+    public boolean intersects(Rectangle2D r) {
+        return gp.intersects(r);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.EllipticArc#setPoints(org.gvsig.fmap.geom.primitive.Point, java.awt.geom.Point2D, double, double, double)
+     */
+    public void setPoints(Point axis1Start, Point axis1End,
+        double semiAxis2Length, double angSt, double angExt) {
+        Point2D _axis1Start = new java.awt.geom.Point2D.Double(axis1Start.getCoordinateAt(0), axis1Start.getCoordinateAt(1));
+        Point2D _axis1End = new java.awt.geom.Point2D.Double(axis1End.getCoordinateAt(0), axis1End.getCoordinateAt(1));
+        setPoints(_axis1Start, _axis1End, semiAxis2Length, angSt, angExt);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.EllipticArc#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, double, double, double)
+     */
+    private void setPoints(Point2D axis1Start, Point2D axis1End,
+        double semiAxis2Length, double angSt, double angExt) {
+        double axis1Lenght = axis1Start.distance(axis1End);
+        Point2D center = new Point2D.Double((axis1Start.getX()+axis1End.getX())/2, (axis1Start.getY()+axis1End.getY())/2);
+        double x = center.getX()-axis1Lenght/2;
+        double y = center.getY()-semiAxis2Length;
+
+        double angle = UtilFunctions.getAngle(center, axis1Start);
+
+        Arc2D.Double arc = new Arc2D.Double(
+            x,
+            y,
+            axis1Lenght,
+            2 * semiAxis2Length,
+            Math.toDegrees(angSt),
+            Math.toDegrees(angExt),
+            Arc2D.OPEN);
+        AffineTransform mT = AffineTransform.getRotateInstance(angle,
+            center.getX(), center.getY());
+        GeneralPathX gp = new GeneralPathX(arc.getPathIterator(null,
+        		geomManager.getFlatness()));
+        gp.transform(mT);
+
+        this.gp = gp;
+        this.axis1Start = axis1Start;
+        this.axis1End = axis1End;
+        this.semiAxis2Length = semiAxis2Length;
+        this.angSt = angSt;
+        this.angExt = angExt;		
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Curve2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
+     */
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        throw new UnsupportedOperationException("Use setPoints(Point center, Point radious)");
+    }
+
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2D.java	(revision 42196)
@@ -0,0 +1,559 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Arc2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.handler.CuadrantHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.OrientableSurface2D;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.UtilFunctions;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Ellipse2D extends OrientableSurface2D implements Ellipse {
+    private static final long serialVersionUID = 7624230115118134004L;
+
+    private Point2D init;
+    private Point2D end;
+    private double ydist;
+
+    /**
+     * The constructor with the GeometryType like and argument 
+     * is used by the {@link GeometryType}{@link #create()}
+     * to create the geometry
+     * @param type
+     * The geometry type
+     */
+    public Ellipse2D(GeometryType geometryType) {
+        super(geometryType);		
+    }
+
+    /**
+     * Constructor used in the {@link Geometry#cloneGeometry()} method
+     * @param id
+     * @param projection
+     * @param gpx
+     * @param i
+     * @param e
+     * @param d
+     */
+    Ellipse2D(GeometryType geometryType,String id, IProjection projection, GeneralPathX gpx,
+        Point2D i, Point2D e, double d) {
+        super(geometryType, id, projection, gpx);
+        init = i;
+        end = e;
+        ydist = d;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#cloneFShape()
+     */
+    public FShape cloneFShape() {
+        return new Ellipse2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone(), init,
+            end, ydist);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#getShapeType()
+     */     
+    public int getShapeType() {
+        return TYPES.ELLIPSE;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
+     */
+    public void transform(AffineTransform at) {
+        
+        if (at == null) {
+            return;
+        }
+
+        Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
+            (init.getY() + end.getY()) / 2);
+        Point2D pdist = UtilFunctions.getPerpendicularPoint(init, end, center,
+            ydist);
+        Point2D aux1 = new Point2D.Double();
+        at.transform(init, aux1);
+        init = aux1;
+        Point2D aux2 = new Point2D.Double();
+        at.transform(end, aux2);
+        end = aux2;
+
+        center = new Point2D.Double((init.getX() + end.getX()) / 2, (init
+            .getY() + end.getY()) / 2);
+
+        Point2D aux3 = new Point2D.Double();
+        at.transform(pdist, aux3);
+        ydist = center.distance(aux3);
+        gp.transform(at);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
+     */
+    public Handler[] getStretchingHandlers() {
+        ArrayList handlers = new ArrayList();
+        Rectangle2D rect = this.getBounds2D();
+        handlers
+        .add(new CenterHandler(0, rect.getCenterX(), rect.getCenterY()));
+        return (Handler[]) handlers.toArray(new Handler[0]);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
+     */
+    public Handler[] getSelectHandlers() {
+        ArrayList handlers = new ArrayList();
+        Rectangle2D rect = this.getBounds2D();
+        handlers.add(new CenterSelHandler(0, rect.getCenterX(), rect
+            .getCenterY()));
+        handlers.add(new InitSelHandler(1, init.getX(), init.getY()));
+        handlers.add(new EndSelHandler(2, end.getX(), end.getY()));
+        Point2D mediop = new Point2D.Double((end.getX() + init.getX()) / 2,
+            (end.getY() + init.getY()) / 2);
+        Point2D[] p = UtilFunctions.getPerpendicular(init, end, mediop);
+        Point2D u = UtilFunctions.getPoint(mediop, p[1], ydist);
+        Point2D d = UtilFunctions.getPoint(mediop, p[1], -ydist);
+
+        handlers.add(new RadioSelYHandler(3, u.getX(), u.getY()));
+        handlers.add(new RadioSelYHandler(4, d.getX(), d.getY()));
+
+        return (Handler[]) handlers.toArray(new Handler[0]);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class CenterHandler extends AbstractHandler implements Handler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public CenterHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+            Point point;
+            for (int i = 0; i < gp.getNumCoords() ; i++) {
+                point = gp.getPointAt(i);
+                point.setX(point.getX() + x);
+                point.setY(point.getY() + y);
+            }
+            init = new Point2D.Double(init.getX() + x, init.getY() + y);
+            end = new Point2D.Double(end.getX() + x, end.getY() + y);
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class CenterSelHandler extends AbstractHandler implements Handler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public CenterSelHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+            Point point;
+            for (int i = 0; i < gp.getNumCoords() ; i++) {
+                point = gp.getPointAt(i);
+                point.setX(point.getX() + x);
+                point.setY(point.getY() + y);
+            }
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
+                (init.getY() + end.getY()) / 2);
+            double dx = x - center.getX();
+            double dy = y - center.getY();
+            Point point;
+            for (int i = 0; i < gp.getNumCoords() ; i++) {
+                point = gp.getPointAt(i);
+                point.setX(point.getX() + dx);
+                point.setY(point.getY() + dy);
+            }
+            init = new Point2D.Double(init.getX() + dx, init.getY() + dy);
+            end = new Point2D.Double(end.getX() + dx, end.getY() + dy);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class InitSelHandler extends AbstractHandler implements CuadrantHandler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public InitSelHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            // TODO comentado para quitar warning: double dx=x-init.getX();
+            // TODO comentado para quitar warning: double dy=y-init.getY();
+            Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
+                (init.getY() + end.getY()) / 2);
+            // Point2D[]
+            // p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
+            // Point2D[]
+            // p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
+            // Point2D.Double(x,y));
+
+            // Point2D
+            // pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
+            // double xdist=2*pl.distance(x,y);
+            double xdist = 2 * center.distance(x, y);
+            // init=new Point2D.Double(init.getX()+dx,init.getY()+dy);
+            init = UtilFunctions.getPoint(center, init, center.distance(x, y));
+            end = UtilFunctions.getPoint(init, center, xdist);
+            Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
+                - ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
+            // TODO comentado para quitar warning: Point2D rotationPoint = new
+            // Point2D.Double(init.getX() + xdist /2, init.getY());
+
+            double angle = UtilFunctions.getAngle(init, end);
+            AffineTransform mT = AffineTransform.getRotateInstance(angle, init
+                .getX(), init.getY());
+            gp = new GeneralPathX(arc.getPathIterator(null,
+            		geomManager.getFlatness()));
+            gp.transform(mT);
+
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class EndSelHandler extends AbstractHandler implements CuadrantHandler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public EndSelHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            // double dx=x-getPoint().getX();
+            // double dy=y-getPoint().getY();
+            Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
+                (init.getY() + end.getY()) / 2);
+            // Point2D[]
+            // p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
+            // Point2D[]
+            // p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
+            // Point2D.Double(x,y));
+
+            // Point2D
+            // pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
+            // double xdist=2*pl.distance(x,y);
+            double xdist = 2 * center.distance(x, y);
+            end = UtilFunctions.getPoint(center, end, center.distance(x, y));
+            // end=new Point2D.Double(end.getX()+dx,end.getY()+dy);
+            init = UtilFunctions.getPoint(end, center, xdist);
+            Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
+                - ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
+            // Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
+            // /2, init.getY());
+
+            double angle = UtilFunctions.getAngle(init, end);
+            AffineTransform mT = AffineTransform.getRotateInstance(angle, init
+                .getX(), init.getY());
+            gp = new GeneralPathX(arc.getPathIterator(null,
+            		geomManager.getFlatness()));
+            gp.transform(mT);
+
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class RadioSelYHandler extends AbstractHandler implements CuadrantHandler {
+        /**
+         * Crea un nuevo PointHandler.
+         *
+         * @param i
+         *            DOCUMENT ME!
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         */
+        public RadioSelYHandler(int i, double x, double y) {
+            point = new Point2D.Double(x, y);
+            index = i;
+        }
+
+        /**
+         * DOCUMENT ME!
+         *
+         * @param x
+         *            DOCUMENT ME!
+         * @param y
+         *            DOCUMENT ME!
+         *
+         * @return DOCUMENT ME!
+         */
+        public void move(double x, double y) {
+
+        }
+
+        /**
+         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+         */
+        public void set(double x, double y) {
+            ydist = new Point2D.Double((init.getX() + end.getX()) / 2, (init
+                .getY() + end.getY()) / 2).distance(x, y);
+            // ydist=getSelectHandlers()[1].getPoint().distance(x,y);
+            // Point2D center=new Point2D.Double((init.getX() + end.getX()) / 2,
+            // (init.getY() + end.getY()) / 2);
+            // Point2D[]
+            // p=TrigonometricalFunctions.getPerpendicular(init,end,new
+            // Point2D.Double(x,y));
+            // Point2D
+            // pl=TrigonometricalFunctions.getIntersection(p[0],p[1],init,end);
+            // double xdist=2*pl.distance(x,y);
+            double xdist = init.distance(end);
+            Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
+                - ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
+            // Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
+            // /2, init.getY());
+
+            double angle = UtilFunctions.getAngle(init, end);
+            AffineTransform mT = AffineTransform.getRotateInstance(angle, init
+                .getX(), init.getY());
+            gp = new GeneralPathX(arc.getPathIterator(null,
+            		geomManager.getFlatness()));
+            gp.transform(mT);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
+     */
+    public boolean intersects(Rectangle2D r) {
+        return gp.intersects(r);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point, double)
+     */
+    public void setPoints(Point axis1Start, Point axis1End, double axis2Length) {
+        Point2D _axis1Start = new java.awt.geom.Point2D.Double(axis1Start.getCoordinateAt(0), axis1Start.getCoordinateAt(1));
+        Point2D _axis1End = new java.awt.geom.Point2D.Double(axis1End.getCoordinateAt(0), axis1End.getCoordinateAt(1));
+        setPoints(_axis1Start, _axis1End, axis2Length);		
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
+     */
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        throw new UnsupportedOperationException("Use setPoints(Point axis1Start, Point axis1End, double axis2Length)");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, double)
+     */
+    private void setPoints(Point2D axis1Start, Point2D axis1End,
+        double axis2Length) {
+        double xAxis = axis1Start.distance(axis1End);
+        Arc2D.Double arc = new Arc2D.Double(axis1Start.getX(), axis1Start
+            .getY()
+            - axis2Length, xAxis, 2 * axis2Length, 0, 360, Arc2D.OPEN);
+        // TODO L�nea comentada para quitar warning: Point2D rotationPoint = new
+        // Point2D.Double(axis1Start.getX() + xAxis /2, axis1Start.getY());
+        double angle = UtilFunctions.getAngle(axis1Start, axis1End);
+        AffineTransform mT = AffineTransform.getRotateInstance(angle,
+            axis1Start.getX(), axis1Start.getY());
+        GeneralPathX gp = new GeneralPathX(arc.getPathIterator(null,
+        		geomManager.getFlatness()));
+        gp.transform(mT);
+        this.gp = new GeneralPathX(gp.getPathIterator(null));
+        this.init = axis1Start;
+        this.end = axis1End;
+        this.ydist = axis2Length;		
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis1End()
+     */
+    public Point getAxis1End() {
+        try {
+            return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(end);
+        } catch (Exception e){
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis1Start()
+     */
+    public Point getAxis1Start() {
+        try {
+            return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(init);
+        } catch (Exception e){
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis2Dist()
+     */
+    public double getAxis2Dist() {
+        return ydist;
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2D.java	(revision 42196)
@@ -0,0 +1,443 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Arc2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.handler.CuadrantHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+import org.gvsig.fmap.geom.generalpath.primitive.surface.OrientableSurface2D;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.UtilFunctions;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Circle2D extends OrientableSurface2D implements Circle {
+	private static final long serialVersionUID = -2709867465161215668L;
+	
+	private Point2D center;
+	private double radio;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Circle2D(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 */
+	Circle2D(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx,
+			Point2D c, double r) {
+		super(geometryType, id, projection, gpx);
+		center = c;
+		radio = r;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle#getCenter()
+	 */
+	public Point getCenter() {
+		return new org.gvsig.fmap.geom.generalpath.primitive.point.Point2D(center.getX(), center.getY());
+	}
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#cloneFShape()
+     */
+	public FShape cloneFShape() {
+		return new Circle2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone(), center,
+				radio);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#getShapeType()
+	 */
+	public int getShapeType() {
+		return TYPES.CIRCLE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
+	 */
+	public void transform(AffineTransform at) {
+	    
+	       if (at == null) {
+	            return;
+	        }
+
+		Point2D pdist = UtilFunctions.getPerpendicularPoint(new Point2D.Double(
+				center.getX() + 10, center.getY()), new Point2D.Double(center
+				.getX() - 10, center.getY()), center, radio);
+		Point2D aux = new Point2D.Double();
+		at.transform(center, aux);
+		center = aux;
+		Point2D aux3 = new Point2D.Double();
+		at.transform(pdist, aux3);
+		radio = center.distance(aux3);
+		gp.transform(at);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
+	 */
+	public Handler[] getStretchingHandlers() {
+		ArrayList handlers = new ArrayList();
+		Rectangle2D rect = this.getBounds2D();
+		handlers
+				.add(new CenterHandler(0, rect.getCenterX(), rect.getCenterY()));
+		// handlers.add(new RadioHandler(1, rect.getX(), rect.getCenterY()));
+		// handlers.add(new RadioHandler(2, rect.getMaxX(), rect.getCenterY()));
+		// handlers.add(new RadioHandler(3, rect.getCenterX(), rect.getY()));
+		// handlers.add(new RadioHandler(3, rect.getCenterX(), rect.getMaxY()));
+
+		return (Handler[]) handlers.toArray(new Handler[0]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
+	 */
+	public Handler[] getSelectHandlers() {
+		ArrayList handlers = new ArrayList();
+		handlers.add(new CenterSelHandler(0, center.getX(), center.getY()));
+		handlers.add(new RadioSelHandler(1, center.getX() - radio, center
+				.getY()));
+		handlers.add(new RadioSelHandler(2, center.getX() + radio, center
+				.getY()));
+		handlers.add(new RadioSelHandler(3, center.getX(), center.getY()
+				- radio));
+		handlers.add(new RadioSelHandler(3, center.getX(), center.getY()
+				+ radio));
+
+		return (Handler[]) handlers.toArray(new Handler[0]);
+	}
+	
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class CenterHandler extends AbstractHandler implements Handler, org.gvsig.fmap.geom.handler.CenterHandler{
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i
+		 *            DOCUMENT ME!
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 */
+		public CenterHandler(int i, double x, double y) {
+			point = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+			center = new Point2D.Double(center.getX() + x, center.getY() + y);
+			 Point point;
+			for (int i = 0; i < gp.getNumCoords(); i++) {
+			    point = gp.getPointAt(i);
+                point.setX(point.getX() + x);
+                point.setY(point.getY() + y);
+			}
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+		}
+
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class CenterSelHandler extends AbstractHandler implements Handler, org.gvsig.fmap.geom.handler.CenterHandler {
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i
+		 *            DOCUMENT ME!
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 */
+		public CenterSelHandler(int i, double x, double y) {
+			point = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+		    Point point;
+		    for (int i = 0; i < gp.getNumCoords() ; i++) {
+			    point = gp.getPointAt(i);
+			    point.setX(point.getX() + x);
+	            point.setY(point.getY() + y);
+			}
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+			center = new Point2D.Double(x, y);
+			Arc2D.Double arc = new Arc2D.Double(center.getX() - radio, center
+					.getY()
+					- radio, 2 * radio, 2 * radio, 0, 360, Arc2D.OPEN);
+			gp = new GeneralPathX(arc.getPathIterator(null,
+					geomManager.getFlatness()));
+			gp.closePath();
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class RadioSelHandler extends AbstractHandler implements CuadrantHandler {
+
+		/**
+		 * Crea un nuevo PointHandler.
+		 *
+		 * @param i
+		 *            DOCUMENT ME!
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 */
+		public RadioSelHandler(int i, double x, double y) {
+			point = new Point2D.Double(x, y);
+			index = i;
+		}
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param x
+		 *            DOCUMENT ME!
+		 * @param y
+		 *            DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public void move(double x, double y) {
+
+		}
+
+		/**
+		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+		 */
+		public void set(double x, double y) {
+			radio = center.distance(x, y);
+			Arc2D.Double arc = new Arc2D.Double(center.getX() - radio, center
+					.getY()
+					- radio, 2 * radio, 2 * radio, 0, 360, Arc2D.OPEN);
+			gp = new GeneralPathX(arc.getPathIterator(null,
+					geomManager.getFlatness()));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
+	 */
+	public boolean intersects(Rectangle2D r) {
+		return gp.intersects(r);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Surface2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
+	 */
+	public void setGeneralPath(GeneralPathX generalPathX) {
+		throw new UnsupportedOperationException("Use setPoints(Point center, Point radious)");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
+	 */
+	public void setPoints(Point center, Point radious) {
+		Point2D _center = new java.awt.geom.Point2D.Double(center.getCoordinateAt(0), center.getCoordinateAt(1));
+		Point2D _radious = new java.awt.geom.Point2D.Double(radious.getCoordinateAt(0), radious.getCoordinateAt(1));
+		double dRadious = _center.distance(_radious);
+		setPoints(center, dRadious);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle#setPoints(org.gvsig.fmap.geom.primitive.Point, double)
+	 */
+	public void setPoints(Point center, double radious){
+		Point2D _center = new java.awt.geom.Point2D.Double(center.getCoordinateAt(0), center.getCoordinateAt(1));
+		java.awt.geom.Arc2D.Double arc = 
+			new java.awt.geom.Arc2D.Double(center.getX() - radious, _center
+				.getY()
+				- radious, 2 * radious, 2 * radious, 0, 360, Arc2D.OPEN);
+		this.gp = new GeneralPathX(arc.getPathIterator(null,
+				geomManager.getFlatness()));
+		gp.closePath();
+		this.center = _center;
+		this.radio = radious;	
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
+	 */
+	public void setPoints(Point p1, Point p2, Point p3) {
+		Point2D _p1 = new java.awt.geom.Point2D.Double(p1.getCoordinateAt(0), p1.getCoordinateAt(1));
+		Point2D _p2 = new java.awt.geom.Point2D.Double(p2.getCoordinateAt(0), p2.getCoordinateAt(1));
+		Point2D _p3 = new java.awt.geom.Point2D.Double(p3.getCoordinateAt(0), p3.getCoordinateAt(1));
+		setPoints(_p1, _p2, _p3);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle#setPoints(org.gvsig.fmap.geom.primitive.Point2D, org.gvsig.fmap.geom.primitive.Point2D)
+	 */
+	public void setPoints(org.gvsig.fmap.geom.generalpath.primitive.point.Point2D center,
+			org.gvsig.fmap.geom.generalpath.primitive.point.Point2D radious) {
+		Point2D _center = new java.awt.geom.Point2D.Double(center.getCoordinateAt(0), center.getCoordinateAt(1));
+		Point2D _radious = new java.awt.geom.Point2D.Double(radious.getCoordinateAt(0), radious.getCoordinateAt(1));
+		setPoints(_center, _radious);		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle#setPoints(org.gvsig.fmap.geom.primitive.Point2D, double)
+	 */
+	public void setPoints(Point2D center,
+			double radious) {
+		java.awt.geom.Arc2D.Double arc = 
+			new java.awt.geom.Arc2D.Double(center.getX() - radious, center
+				.getY()
+				- radious, 2 * radious, 2 * radious, 0, 360, Arc2D.OPEN);
+		this.gp = new GeneralPathX(arc.getPathIterator(null,
+				geomManager.getFlatness()));
+		gp.closePath();
+		this.center = center;
+		this.radio = radious;	
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, java.awt.geom.Point2D)
+	 */
+	public void setPoints(Point2D p1, Point2D p2, Point2D p3) {
+		Point2D center = UtilFunctions.getCenter(p1, p2, p3);
+		if (center != null) {
+			setPoints(center, p1);
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Curve#setCoordinateAt(int, int, double)
+	 */
+	public void setCoordinateAt(int index, int dimension, double value) {
+		throw new UnsupportedOperationException("Use setGeneralPathX");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D)
+	 */
+	private void setPoints(Point2D center, Point2D radious) {
+		double radio = center.distance(radious);
+		setPoints(center, radio);		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(org.gvsig.fmap.geom.primitive.Point, double, double, double)
+	 */
+	public void setPoints(Point center, double radius, double initAngle,
+			double angleExt) {
+		throw new UnsupportedOperationException("Use setGeneralPathX");		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, double, double, double)
+	 */
+	private void setPoints(Point2D center, double radius, double initAngle,
+			double angleExt) {
+		throw new UnsupportedOperationException("Use setGeneralPathX");		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.Circle#getRadious()
+	 */
+	public double getRadious() {
+		return radio;
+	}
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Circle2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2DZ.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.primitive.EllipticArc;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author paco
+ *
+ */
+public class EllipticArc2DZ extends EllipticArc2D implements EllipticArc {
+	private static final long serialVersionUID = -7625487589450160319L;
+	
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public EllipticArc2DZ(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 * @param geometryType
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 * @param axis1Start
+	 * @param axis1End
+	 * @param axis2Dist
+	 * @param angSt
+	 * @param andExt
+	 * @param z
+	 */
+	EllipticArc2DZ(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx, Point2D axis1Start,Point2D axis1End, double axis2Dist, double angSt, double andExt) {
+		super(geometryType, id, projection, gpx, axis1Start, axis1End, axis2Dist, angSt, andExt);		
+	}	
+
+    public int getDimension() {
+        return 3;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/EllipticArc2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2DZ.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface.ellipse;
+
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author paco
+ *
+ */
+public class Ellipse2DZ extends Ellipse2D implements Surface {
+	private static final long serialVersionUID = -6678908069111004754L;
+	
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Ellipse2DZ(GeometryType geometryType) {
+		super(geometryType);		
+	}
+	
+	/**
+	 * @param id
+	 * @param projection
+	 * @param gpx
+	 * @param i
+	 * @param e
+	 * @param d
+	 */
+	Ellipse2DZ(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx,
+			Point2D i, Point2D e, double d, double z) {
+		super(geometryType, id, projection, gpx, i, e, d);		
+	}
+	
+    public double getCoordinateAt(int index, int dimension) {
+        if (index > gp.getNumCoords()) {
+            throw new ArrayIndexOutOfBoundsException();
+        }
+        double[] coords = gp.getPointAt(index).getCoordinates();
+        if(dimension < coords.length)
+        	return gp.getPointAt(index).getCoordinateAt(dimension);
+        return 0D;
+    }
+	
+    public int getDimension() {
+        return 3;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/ellipse/Ellipse2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/OrientableSurface2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/OrientableSurface2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/OrientableSurface2D.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.surface;
+
+import com.vividsolutions.jts.geom.LineString;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientableSurface;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+import org.gvsig.fmap.geom.generalpath.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.generalpath.primitive.OrientablePrimitive2D;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public abstract class OrientableSurface2D extends OrientablePrimitive2D implements OrientableSurface {
+
+    private static final long serialVersionUID = 9212660743520612859L;
+
+    /**
+     * The constructor with the GeometryType like and argument
+     * is used by the {@link GeometryType}{@link #create()}
+     * to create the geometry
+     *
+     * @param type
+     * The geometry type
+     */
+    public OrientableSurface2D(GeometryType geometryType) {
+        super(geometryType);
+    }
+
+    public OrientableSurface2D(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx) {
+        super(geometryType, id, projection, gpx);
+    }
+
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+		// TODO Auto-generated method stub
+
+    }
+
+    public int getNumInteriorRings() {
+            com.vividsolutions.jts.geom.Polygon jts = (com.vividsolutions.jts.geom.Polygon) this.toJTS();
+            int count = jts.getNumInteriorRing();
+            return count;
+    }
+
+    public Ring getInteriorRing(int index) {
+        try {
+            com.vividsolutions.jts.geom.Polygon jts = (com.vividsolutions.jts.geom.Polygon) this.toJTS();
+            LineString jts_ring = jts.getInteriorRingN(index);
+            Geometry ring = Converter.jtsToGeometry(jts_ring);
+            return (Ring) ring;
+        } catch (Exception ex) {
+            logger.warn("Can't get interior ring '"+index+"'.",ex);
+            throw  new RuntimeException(ex.getMessage(),ex);
+        }
+    }
+
+    public void addInteriorRing(Ring ring) {
+        this.getGeneralPath().append(ring.getGeneralPath());
+    }
+
+    public void removeInteriorRing(int index) {
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/surface/OrientableSurface2D.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DZ.java	(revision 42196)
@@ -0,0 +1,142 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.point;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * 3D point implementation.
+ * 
+ * @author Vicente Caballero Navarro
+ * @author gvSIG team
+ */
+public class Point2DZ extends Point2D implements Point {
+
+	private static final long serialVersionUID = 3113070237182638858L;
+
+	public static final String PERSISTENCE_DEFINITION_NAME = "Point2DimensionsZ";
+	private double z = 0.0d;
+
+	/**
+	 * The constructor with the GeometryType like and argument is used by the
+	 * {@link GeometryType}{@link #create()} to create the geometry
+	 * 
+	 * @param type
+	 *            The geometry type
+	 */
+	public Point2DZ(GeometryType geomType) {
+		super(geomType);
+	}
+
+	/**
+	 * Constructor used in the {@link Geometry#cloneGeometry()} method
+	 * 
+	 * @param id
+	 * @param projection
+	 * @param x
+	 * @param y
+	 * @param z
+	 */
+	Point2DZ(GeometryType geomType, String id, IProjection projection,
+			double x, double y, double z) {
+		super(geomType, id, projection, x, y);
+		this.z = z;
+	}
+
+    public Point2DZ(double x, double y, double z, GeometryType geometryType) {
+        super(geometryType);
+        this.x = x;
+        this.y = y;
+        this.z = z;
+    }
+
+	public Point2DZ(double x, double y, double z) {
+		super(TYPES.POINT, SUBTYPES.GEOM3D);
+		this.x = x;
+		this.y = y;
+		this.z = z;
+	}
+
+	public int getShapeType() {
+		return TYPES.POINT;
+	}
+
+	public FShape cloneFShape() {
+		return new Point2DZ(getGeometryType(), id, projection, x, y, z);
+	}
+
+	public int getDimension() {
+		return 3;
+	}
+
+	public boolean equals(Object other) {
+		if (!super.equals(other)) {
+			return false;
+		}
+
+		Point2DZ pother = (Point2DZ) other;
+		if (Math.abs(this.z - pother.z) > 0.0000001) {
+			return false;
+		}
+		return true;
+	}
+
+	public void setCoordinates(double[] values) {
+		super.setCoordinates(values);
+		if (values.length > 2) {
+			z = values[2];
+		}
+	}
+
+	public void setCoordinateAt(int dimension, double value) {
+		if (dimension == Geometry.DIMENSIONS.Z) {
+			this.z = value;
+		} else {
+			super.setCoordinateAt(dimension, value);
+		}
+	}
+
+	public double getCoordinateAt(int dimension) {
+		return (dimension == Geometry.DIMENSIONS.Z) ? this.z : super
+				.getCoordinateAt(dimension);
+	}
+
+	public double getOrdinate(int dimension) {
+		return (dimension == Geometry.DIMENSIONS.Z) ? this.z : super
+				.getCoordinateAt(dimension);
+	}
+
+	public double[] getCoordinates() {
+		return new double[] { getX(), getY(), this.z };
+	}
+
+	protected String getFullTypeName() {
+		return "Point2DZ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DZ.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DGeometryType.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.point;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.PointGeometryType;
+import org.gvsig.fmap.geom.type.AbstractGeometryType;
+
+/**
+ * Geometry type implementation for the creation of {@link Point2D} objects.
+ * 
+ * @author gvSIG Team
+ */
+public class Point2DGeometryType extends AbstractGeometryType implements
+    PointGeometryType {
+
+    public String getName() {
+        return "Point2D";
+    }
+
+    public int getType() {
+        return Geometry.TYPES.POINT;
+    }
+
+    public int getSubType() {
+        return Geometry.SUBTYPES.GEOM2D;
+    }
+
+    public boolean isTypeOf(int geometryType) {
+        return Geometry.TYPES.POINT == geometryType
+            || Geometry.TYPES.GEOMETRY == geometryType;
+    }
+
+    public boolean isSubTypeOf(int geometrySubType) {
+        return Geometry.SUBTYPES.GEOM2D == geometrySubType;
+    }
+
+    public Geometry create() throws CreateGeometryException {
+        return new Point2D(this);
+    }
+
+    public Point createPoint(double x, double y) {
+        return new Point2D(this, x, y);
+    }
+
+    public Point createPoint(double[] coordinates) {
+        return new Point2D(this, coordinates[0], coordinates[1]);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2DGeometryType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point3DGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point3DGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point3DGeometryType.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.point;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * Geometry type implementation for the creation of {@link Point3D} objects.
+ * 
+ * @author gvSIG Team
+ */
+public class Point3DGeometryType extends Point2DGeometryType {
+
+    public String getName() {
+        return "Point3D";
+    }
+
+    public int getSubType() {
+        return Geometry.SUBTYPES.GEOM3D;
+    }
+
+    public boolean isSubTypeOf(int geometrySubType) {
+        return Geometry.SUBTYPES.GEOM3D == geometrySubType
+            || super.isSubTypeOf(geometrySubType);
+    }
+
+    public Geometry create() throws CreateGeometryException {
+        return new Point2DZ(this);
+    }
+
+    public Point createPoint(double x, double y) {
+        return new Point2DZ(x, y, 0.0d, this);
+    }
+
+    public Point createPoint(double[] coordinates) {
+        return new Point2DZ(coordinates[0], coordinates[1], coordinates[2],
+            this);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point3DGeometryType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2D.java	(revision 42196)
@@ -0,0 +1,369 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.point;
+
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Rectangle2D;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.DirectPosition;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.exception.ReprojectionRuntimeException;
+import org.gvsig.fmap.geom.generalpath.DefaultGeometryManager;
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+import org.gvsig.fmap.geom.handler.FinalHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.generalpath.gputils.PointIterator;
+import org.gvsig.fmap.geom.generalpath.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.generalpath.primitive.Envelope2D;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * 2D point implementation.
+ * 
+ * @author Vicente Caballero Navarro
+ * @author gvSIG team
+ */
+public class Point2D extends AbstractPrimitive implements Point, DirectPosition {
+	
+	private static final long serialVersionUID = 1836257305083881299L;
+
+    protected static final String COORDINATES_FIELD = "coordinates";
+    protected double x;
+    protected double y;
+
+    /**
+     * The constructor with the GeometryType like and argument
+     * is used by the {@link GeometryType}{@link #create()} to create the
+     * geometry
+     * 
+     * @param type
+     *            The geometry type
+     */
+    public Point2D(GeometryType geometryType) {
+    	super(geometryType, null, null);
+        this.x = 0.0d;
+        this.y = 0.0d;
+    }
+
+    /**
+     * Constructor used in the {@link Geometry#cloneGeometry()} method
+     */
+    Point2D(GeometryType geometryType, String id, IProjection projection,
+        double x, double y) {
+        super(geometryType, id, projection);
+        this.x = x;
+        this.y = y;
+    }
+
+    public Point2D(double x, double y) {
+        super(TYPES.POINT, SUBTYPES.GEOM2D);
+        this.x = x;
+        this.y = y;
+    }
+
+    public Point2D(GeometryType geometryType, double x, double y) {
+        super(geometryType, null, null);
+        this.x = x;
+        this.y = y;
+    }
+
+    public Point2D(int type, int subtype) {
+        super(type, subtype);
+        this.x = 0.0d;
+        this.y = 0.0d;
+    }
+
+    public Point2D(java.awt.geom.Point2D point) {
+        super(TYPES.POINT, SUBTYPES.GEOM2D);
+        this.x = point.getX();
+        this.y = point.getY();
+    }
+
+    /**
+     * Aplica la transformaci�nn de la matriz de transformaci�n que se pasa como
+     * par�metro.
+     * 
+     * @param at
+     *            Matriz de transformaci�n.
+     */
+    public void transform(AffineTransform at) {
+        
+        if (at == null) {
+            return;
+        }
+        
+        double[] coordinates = getCoordinates();
+        at.transform(coordinates, 0, coordinates, 0, 1);
+        setCoordinates(coordinates);
+    }
+
+    public boolean contains(double x, double y) {
+        if ((this.x == x) || (this.y == y)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public boolean contains(double x, double y, double w, double h) {
+        return false;
+    }
+
+    public boolean intersects(double x, double y, double w, double h) {
+        Rectangle2D.Double rAux = new Rectangle2D.Double(x, y, w, h);
+
+        return rAux.contains(this.x, this.y);
+    }
+
+    public Rectangle getBounds() {
+        return new Rectangle((int) x, (int) y, 0, 0);
+    }
+
+    public double getX() {
+        return x;
+    }
+
+    public double getY() {
+        return y;
+    }
+
+    public boolean contains(java.awt.geom.Point2D p) {
+        return false;
+    }
+
+    public Rectangle2D getBounds2D() {
+        return new Rectangle2D.Double(x - 0.01, y - 0.01, 0.02, 0.02);
+    }
+
+    public boolean contains(Rectangle2D r) {
+        return false;
+    }
+
+    public boolean intersects(Rectangle2D r) {
+        return r.contains(x, y);
+    }
+
+    public Shape getShape(AffineTransform affineTransform) {
+        return this;
+    }
+
+    public PathIterator getPathIterator(AffineTransform at) {
+        return new PointIterator(getPoint2D(), at);
+    }
+
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return new PointIterator(getPoint2D(), at);
+    }
+
+    private java.awt.geom.Point2D getPoint2D() {
+        return new java.awt.geom.Point2D.Double(x, y);
+    }
+
+    public int getShapeType() {
+        return TYPES.POINT;
+    }
+
+    public FShape cloneFShape() {
+        return new Point2D(getGeometryType(), id, projection, x, y);
+    }
+
+    public void reProject(ICoordTrans ct) {
+        if( ct==null ) {
+            return;
+        }
+        java.awt.geom.Point2D p = getPoint2D();
+         try {
+            p = ct.convert(p, p);
+            this.x = p.getX();
+            this.y = p.getY();
+        } catch (Exception exc) {
+            /*
+             * This can happen when the reprojection lib is unable
+             * to reproject (for example the source point
+             * is out of the valid range and some computing
+             * problem happens)
+             */
+            throw new ReprojectionRuntimeException(
+                ct.getPOrig(), ct.getPDest(), getPoint2D(), exc);
+        }
+    }
+
+    public Handler[] getStretchingHandlers() {
+        return new Handler[] { new PointHandler(0, x, y, this) };
+    }
+
+    public Handler[] getSelectHandlers() {
+        return new Handler[] { new PointHandler(0, x, y, this) };
+    }
+
+    /**
+     * 
+     * @author Vicente Caballero Navarro
+     * @author gvSIG team
+     */
+    class PointHandler extends AbstractHandler implements FinalHandler {
+
+        private final Point gvSIGPoint;
+
+        public PointHandler(int i, double x, double y, Point gvSIGPoint) {
+            this.gvSIGPoint = gvSIGPoint;
+            point = new java.awt.geom.Point2D.Double(x, y);
+            index = i;
+        }
+
+        public void move(double movex, double movey) {
+            gvSIGPoint.setX(gvSIGPoint.getX() + movex);
+            gvSIGPoint.setY(gvSIGPoint.getY() + movey);
+        }
+
+        public void set(double setx, double sety) {
+            gvSIGPoint.setX(setx);
+            gvSIGPoint.setY(sety);
+        }
+    }
+
+    public int getDimension() {
+        return 2;
+    }
+
+    public Envelope getEnvelope() {
+        return new Envelope2D(x - 0.01, y - 0.01, x + 0.02, y + 0.02);
+    }
+
+    public GeneralPathX getGeneralPath() {
+        return null;
+    }
+
+    public DirectPosition getDirectPosition() {
+        return this;
+    }
+
+    public double getOrdinate(int dim) {
+        if (dim == Geometry.DIMENSIONS.X) {
+            return getX();
+        } else
+            if (dim == Geometry.DIMENSIONS.Y) {
+                return getY();
+            } else {
+                return 0;
+            }
+    }
+
+    public boolean equals(Object other) {
+        if (!super.equals(other)) {
+            return false;
+        }
+        Point2D pother = (Point2D) other;
+        if (Math.abs(this.getX() - pother.getX()) > 0.0000001) {
+            return false;
+        }
+        if (Math.abs(this.getY() - pother.getY()) > 0.0000001) {
+            return false;
+        }
+        return true;
+
+    }
+
+    public double[] getCoordinates() {
+        return new double[] { x, y };
+    }
+
+    public double getCoordinateAt(int dimension) {
+        switch (dimension) {
+        case Geometry.DIMENSIONS.X:
+            return x;
+        case Geometry.DIMENSIONS.Y:
+            return y;
+        default:
+            throw new ArrayIndexOutOfBoundsException(dimension);
+        }
+    }
+
+    public void setCoordinateAt(int dimension, double value) {
+        switch (dimension) {
+        case Geometry.DIMENSIONS.X:
+            this.x = value;
+            break;
+        case Geometry.DIMENSIONS.Y:
+            this.y = value;
+            break;
+        default:
+            throw new ArrayIndexOutOfBoundsException(dimension);
+        }
+    }
+
+    public void setCoordinates(double[] values) {
+        this.x = values[Geometry.DIMENSIONS.X];
+        this.y = values[Geometry.DIMENSIONS.Y];
+    }
+
+    public void setX(double x) {
+        this.x = x;
+    }
+
+    public void setY(double y) {
+        this.y = y;
+    }
+
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        double[] coordinates = getCoordinates();
+        buffer.append(getFullTypeName()).append("(").append(coordinates[0]);
+        for (int i = 1; i < coordinates.length; i++) {
+            buffer.append(",").append(coordinates[i]);
+        }
+        buffer.append(")");
+        return buffer.toString();
+    }
+
+    protected String getFullTypeName() {
+        return "Point2D";
+    }
+    
+    public int getType() {
+        return TYPES.POINT;
+    }
+
+
+    public MultiPoint toPoints() throws GeometryException {
+        DefaultGeometryManager manager = (DefaultGeometryManager) GeometryLocator.getGeometryManager();
+        MultiPoint multi = manager.createMultiPoint(this.getGeometryType().getSubType());
+        multi.addPrimitive(this);
+        return multi;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/point/Point2D.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/solid/Solid2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/solid/Solid2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/solid/Solid2DZ.java	(revision 42196)
@@ -0,0 +1,197 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive.solid;
+
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Appearance;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Solid;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.generalpath.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public class Solid2DZ extends AbstractPrimitive implements Solid {
+	private static final long serialVersionUID = 5702298296398677297L;
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public Solid2DZ(GeometryType geometryType) {
+		super(geometryType);
+	}
+
+	public FShape cloneFShape() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Handler[] getSelectHandlers() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public int getShapeType() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public Handler[] getStretchingHandlers() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void reProject(ICoordTrans ct) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void transform(AffineTransform at) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean contains(Point2D arg0) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean contains(Rectangle2D arg0) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean contains(double arg0, double arg1) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean contains(double arg0, double arg1, double arg2, double arg3) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public Rectangle getBounds() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Rectangle2D getBounds2D() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public PathIterator getPathIterator(AffineTransform arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public PathIterator getPathIterator(AffineTransform arg0, double arg1) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean intersects(Rectangle2D arg0) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean intersects(double arg0, double arg1, double arg2, double arg3) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.geometries.iso.GM_Object#coordinateDimension()
+	 */
+	public int getDimension() {
+		return 3;
+	}	
+
+	public Envelope getEnvelope() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public GeneralPathX getGeneralPath() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public double[] getZs() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void addSurface(Surface surface) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public Appearance getAppearance() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public int getNumSurfaces() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public Surface getSurfaceAt(int position) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void removeSurface(int position) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void setAppearance(Appearance app) {
+		// TODO Auto-generated method stub
+		
+	}
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/solid/Solid2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultNullGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultNullGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultNullGeometry.java	(revision 42196)
@@ -0,0 +1,217 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.generalpath.DefaultValidationStatus;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.NullGeometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class DefaultNullGeometry extends AbstractPrimitive implements NullGeometry {
+
+    private static final long serialVersionUID = -1318803244617119121L;
+
+    private static final ValidationStatus validationStatus = new DefaultValidationStatus(ValidationStatus.UNKNOW, "Null-geometry is not a valid geometry.");
+
+    /**
+     * The constructor with the GeometryType like and argument is used by the
+     * {@link GeometryType}{@link #create()} to create the geometry
+     *
+     * @param type The geometry type
+     */
+    public DefaultNullGeometry(GeometryType geometryType) {
+        super(geometryType);
+    }
+
+    public Shape getShape() {
+        return null;
+    }
+
+    public Shape getShape(AffineTransform affineTransform) {
+        return null;
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#intersects(java.awt.geom.Rectangle2D)
+     */
+    public boolean intersects(Rectangle2D r) {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getBounds2D()
+     */
+    public Rectangle2D getBounds2D() {
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#cloneGeometry()
+     */
+    public org.gvsig.fmap.geom.Geometry cloneGeometry() {
+        return this;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#reProject(org.cresques.cts.ICoordTrans)
+     */
+    public void reProject(ICoordTrans ct) {
+    }
+
+    /**
+     * @see org.gvsig.fmap.geom.Geometry#getPathIterator(AffineTransform)
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        // TODO falta implementar.
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#fastIntersects(double,
+     *      double, double, double)
+     */
+    public boolean fastIntersects(double x, double y, double w, double h) {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getHandlers(int)
+     */
+    public Handler[] getHandlers(int type) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void transform(AffineTransform at) {
+
+    }
+
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return null;
+    }
+
+    public boolean contains(double arg0, double arg1) {
+        return false;
+    }
+
+    public boolean contains(double arg0, double arg1, double arg2, double arg3) {
+        return false;
+    }
+
+    public boolean intersects(double arg0, double arg1, double arg2, double arg3) {
+        return false;
+    }
+
+    public Rectangle getBounds() {
+        return null;
+    }
+
+    public boolean contains(Point2D arg0) {
+        return false;
+    }
+
+    public boolean contains(Rectangle2D arg0) {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.iver.cit.gvsig.fmap.core.IGeometry#isSimple()
+     */
+    public boolean isSimple() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.geometries.iso.GM_Object#coordinateDimension()
+     */
+    public int getDimension() {
+        return 0;
+    }
+
+    public FShape cloneFShape() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Handler[] getSelectHandlers() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Handler[] getStretchingHandlers() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Envelope getEnvelope() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public GeneralPathX getGeneralPath() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean isValid() {
+        return false;
+    }
+
+    public ValidationStatus getValidationStatus() {
+        return validationStatus;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/DefaultNullGeometry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2DZ.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public class Geometry2DZ extends DefaultNullGeometry {
+    
+    public Geometry2DZ(GeometryType geometryType) {
+        super(geometryType);
+        throw new InstantiationError("Can't instantiate generic geometry 3D.");
+    }
+    
+    public int getDimension() {
+        return 3;
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/Geometry2DZ.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/AbstractPrimitive.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/AbstractPrimitive.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/AbstractPrimitive.java	(revision 42196)
@@ -0,0 +1,954 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.generalpath.primitive;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.io.Serializable;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.generalpath.gputils.FShape;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.NullGeometry;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.io.WKBWriter;
+import com.vividsolutions.jts.operation.distance.DistanceOp;
+import com.vividsolutions.jts.operation.overlay.snap.GeometrySnapper;
+import com.vividsolutions.jts.operation.valid.IsValidOp;
+import com.vividsolutions.jts.operation.valid.TopologyValidationError;
+import org.gvsig.fmap.geom.generalpath.DefaultValidationStatus;
+import org.gvsig.fmap.geom.primitive.OrientableCurve;
+import org.gvsig.fmap.geom.primitive.OrientableSurface;
+import org.gvsig.fmap.geom.generalpath.gputils.GeneralPathAdapter;
+
+
+/**
+ * @author Jorge Piera Llodr� (jorge.piera@iver.es)
+ */
+public abstract class AbstractPrimitive implements Primitive, FShape, Shape, Serializable {
+	
+	public static final Logger logger = LoggerFactory.getLogger(AbstractPrimitive.class);
+
+	private static final long serialVersionUID = -4334977368955260872L;
+	protected String id = null;
+	protected IProjection projection = null;
+	protected GeometryType geometryType = null;
+	protected static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+	/**
+	 * The constructor with the GeometryType like and argument 
+	 * is used by the {@link GeometryType}{@link #create()}
+	 * to create the geometry
+	 * @param type
+	 * The geometry type
+	 */
+	public AbstractPrimitive(GeometryType geometryType) {
+		this(geometryType, null, null);		
+	}
+	
+	protected AbstractPrimitive(int type, int subtype) {
+		try {
+			geometryType = geomManager.getGeometryType(type, subtype);
+		} catch (Exception e) {
+			//TODO Not registered geometry
+			geometryType = null;
+		}
+	}	
+	
+	public AbstractPrimitive(GeometryType geometryType, String id, IProjection projection) {
+		super();
+		this.id = id;
+		this.projection = projection;
+		this.geometryType = geometryType;
+	}
+
+	public AbstractPrimitive(GeometryType geometryType, IProjection projection) {
+		this(geometryType, null, projection);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#getGeometryType()
+	 */
+	public GeometryType getGeometryType() {
+		return geometryType;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#getType()
+	 */
+	public int getType() {
+		return geometryType.getType();
+	}
+
+	/**
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.core.Geometry#getInternalShape()
+	 * @deprecated this Geometry is a Shape.
+	 */
+	public Shape getInternalShape() {
+		return this;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.geometries.iso.AbstractGeometry#getId()
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.geometries.iso.AbstractGeometry#getSRS()
+	 */
+	public IProjection getSRS() {
+		return projection;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.geometries.iso.AbstractGeometry#transform(org.cresques.cts.IProjection)
+	 */
+	public AbstractPrimitive transform(IProjection newProjection) {
+		Geometry newGeom = cloneGeometry();
+		ICoordTrans coordTrans = projection.getCT(newProjection);
+		newGeom.reProject(coordTrans);
+		return (AbstractPrimitive)newGeom;
+	}
+
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#fastIntersects(double, double, double, double)
+	 */
+	public boolean fastIntersects(double x, double y, double w, double h) {
+
+		boolean resp = true;
+		
+		try {
+			resp = intersectsRectangle(this, x, y, w, h);
+		} catch (GeometryOperationException e) {
+			logger.error("While doing fastintersects: " + e.getMessage(), e);
+		}
+		
+		return resp;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+	 */
+	public Geometry cloneGeometry() {
+		return (Geometry)cloneFShape();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#getHandlers(int)
+	 */
+	public Handler[] getHandlers(int type) {
+		if (type==STRETCHINGHANDLER){
+			return getStretchingHandlers();
+		}else if (type==SELECTHANDLER){
+			return getSelectHandlers();
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#isSimple()
+	 */
+	public boolean isSimple() {
+            com.vividsolutions.jts.geom.Geometry jtsgeom = this.toJTS();
+            return jtsgeom.isSimple();
+	}
+
+        public boolean isValid() {
+            try {
+                com.vividsolutions.jts.geom.Geometry jtsgeom = this.toJTS();
+                return jtsgeom.isValid();
+            } catch(Exception ex) {
+                return false;
+            }
+        }
+
+        public ValidationStatus getValidationStatus() {
+            DefaultValidationStatus status = new DefaultValidationStatus(
+                    ValidationStatus.VALID,
+                    null
+            );
+            com.vividsolutions.jts.geom.Geometry jtsgeom = null;
+            try {
+                jtsgeom = this.toJTS();
+                IsValidOp validOp = new IsValidOp(jtsgeom);
+                if( validOp != null ) {
+                    status.setValidationError(validOp.getValidationError());
+                }
+            } catch(Exception ex) {
+                status.setStatusCode(ValidationStatus.CURRUPTED);
+                status.setMesage("The geometry is corrupted.");
+                if( this instanceof OrientableSurface ) {
+                    int vertices = ((OrientableSurface)this).getNumVertices();
+                    if( vertices < 3) {
+                        status.setStatusCode(ValidationStatus.TOO_FEW_POINTS);
+                        status.setMesage(TopologyValidationError.errMsg[TopologyValidationError.TOO_FEW_POINTS]);
+                    }
+                } else if( this instanceof OrientableCurve ) {
+                    int vertices = ((OrientableCurve)this).getNumVertices();
+                    if( vertices < 2) {
+                        status.setStatusCode(ValidationStatus.TOO_FEW_POINTS);
+                        status.setMesage(TopologyValidationError.errMsg[TopologyValidationError.TOO_FEW_POINTS]);
+                    }
+                } 
+            }
+            return status;
+        }
+        
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#invokeOperation(int, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invokeOperation(int index, GeometryOperationContext ctx) throws GeometryOperationNotSupportedException, GeometryOperationException {
+		return geomManager.invokeOperation(index, this, ctx);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.Geometry#invokeOperation(java.lang.String, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invokeOperation(String oppName, GeometryOperationContext ctx) throws GeometryOperationNotSupportedException, GeometryOperationException {
+		return geomManager.invokeOperation(oppName, this, ctx);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Comparable#compareTo(T)
+	 */
+	public int compareTo(Object arg0) {
+		// TODO Auto-generated method stub
+		return -1;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		String name=getGeometryType().getName();
+		return name.substring(name.lastIndexOf(".")+1);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj == null) {
+			return false;
+		}
+		if (this.getClass() != obj.getClass()) {
+			return false;
+		}
+
+		AbstractPrimitive other = (AbstractPrimitive) obj;
+		if (this.getGeometryType().getType() != other.getGeometryType()
+				.getType()) {
+			return false;
+
+		}
+		
+		if (this.getGeometryType().getSubType() != other.getGeometryType()
+				.getSubType()) {
+			return false;
+
+		}
+		
+		if (this instanceof NullGeometry || obj instanceof NullGeometry) {
+		    /*
+		     * If any of them is null geometry, they both have to be
+		     * null geometry, or else, they are not equal.
+		     * This prevents null pointer exception in the rest of the
+		     * method
+		     */
+	        if (this instanceof NullGeometry && obj instanceof NullGeometry) {
+	            return true;
+	        } else {
+	            return false;
+	        }
+		}
+		
+		if (this.projection != other.projection) {
+			if (this.projection == null) {
+				return false;
+			}
+			if (this.projection.getAbrev() != other.projection.getAbrev()) { //FIXME this must be false
+				return false;
+			}
+		}
+		if (!this.getBounds().equals(other.getBounds())) {
+			return false;
+		}
+
+
+		GeneralPathX myPath = this.getGeneralPath();
+		GeneralPathX otherPath = other.getGeneralPath();
+		if (myPath == null) {
+			if (otherPath != null) {
+				return false;
+			} else {
+				// TODO checkThis
+				return true;
+			}
+
+		}
+		if (myPath.getNumTypes() != otherPath.getNumTypes()) {
+			return false;
+		}
+		if (Math.abs(myPath.getNumCoords() - otherPath.getNumCoords()) > this
+				.getDimension()) {
+			return false;
+		}
+		PathIterator myIter = myPath.getPathIterator(null);
+		PathIterator otherIter = otherPath.getPathIterator(null);
+		int myType,otherType;
+		// FIXME when 3D, 2DM and 3DM
+		double[] myData = new double[6];
+		double[] otherData = new double[6];
+		double[] myFirst = new double[] { myPath.getPointAt(0).getX(),myPath.getPointAt(0).getY()};
+		double[] otherFirst = new double[] { otherPath.getPointAt(0).getX(),otherPath.getPointAt(0).getY()};
+
+		while (!myIter.isDone()) {
+			if (otherIter.isDone()) {
+				return false;
+			}
+			for (int i = 0; i < myData.length; i++) {
+				myData[i] = 0.0;
+				otherData[i] = 0.0;
+			}
+
+			myType = myIter.currentSegment(myData);
+			otherType = otherIter.currentSegment(otherData);
+
+			switch (myType) {
+			case PathIterator.SEG_LINETO:
+				if (otherType != myType) {
+					if (otherType == PathIterator.SEG_CLOSE){
+						if (!comparePathIteratorData(otherFirst, myData)) {
+							return false;
+						}
+					} else {
+						return false;
+					}
+				} else {
+					if (!comparePathIteratorData(myData, otherData)) {
+						return false;
+					}
+				}
+				break;
+
+
+			case PathIterator.SEG_CLOSE:
+				if (otherType != myType) {
+					if (otherType == PathIterator.SEG_LINETO) {
+						if (!comparePathIteratorData(myFirst, otherData)) {
+							return false;
+						}
+					} else {
+						return false;
+					}
+				} else {
+					if (!comparePathIteratorData(myData, otherData)) {
+						return false;
+					}
+				}
+				break;
+
+
+
+			case PathIterator.SEG_MOVETO:
+			case PathIterator.SEG_QUADTO:
+			case PathIterator.SEG_CUBICTO:
+				if (otherType != myType) {
+					return false;
+				}
+				if (!comparePathIteratorData(myData, otherData)) {
+					return false;
+				}
+				break;
+
+			} // end switch
+
+
+			myIter.next();
+			otherIter.next();
+		}
+		if (!otherIter.isDone()) {
+			return false;
+		}
+		return true;
+	}
+
+	private boolean comparePathIteratorData(double[] org, double[] other) {
+		for (int i = 0; i < org.length; i++) {
+			if (Math.abs(org[i] - other[i]) > 0.0000001) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.primitive.FShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return getType();
+	}
+	
+	
+	
+	
+	
+	
+	
+	
+	/**
+	 * Utility method
+	 * @param geometry
+	 * @param x
+	 * @param y
+	 * @return
+	 * @throws GeometryOperationException
+	 */
+	protected boolean containsPoint(Geometry geom, double x, double y) throws GeometryOperationException {
+		
+		// exclude disjoint 
+		Envelope env = geom.getEnvelope();
+		if (x > env.getMaximum(0)) return false; 
+		if (y > env.getMaximum(1)) return false; 
+		if (x < env.getMinimum(0)) return false; 
+		if (y < env.getMinimum(1)) return false; 
+		
+		// boxes overlap, need long version
+		
+		Geometry geompoint = null;
+		try {
+			geompoint = GeometryLocator.getGeometryManager().createPoint(x, y, SUBTYPES.GEOM2D);
+		} catch (Exception e1) {
+			throw new GeometryOperationException(geom.getType(), GeometryOperation.OPERATION_CONTAINS_CODE, e1);
+		}
+		
+		GeometryOperationContext drgoc = new GeometryOperationContext();
+		 drgoc.setAttribute("geom",geompoint);
+		
+		Object resp = null;
+		boolean respboolean = true;
+		try {
+			resp = geom.invokeOperation(GeometryOperation.OPERATION_CONTAINS_CODE, drgoc);
+			respboolean = ((Boolean) resp).booleanValue();
+		} catch (Exception e) {
+			throw new GeometryOperationException(geom.getType(), GeometryOperation.OPERATION_CONTAINS_CODE, e);
+		}
+
+		return respboolean;
+	}
+
+	/**
+	 * 
+	 * @param geometry
+	 * @param x
+	 * @param y
+	 * @param w
+	 * @param h
+	 * @return
+	 */
+	protected boolean containsRectangle(Geometry geom, double x, double y,
+			double w, double h) throws GeometryOperationException {
+		
+		
+		// exclude disjoint boxes
+		Envelope env = geom.getEnvelope();
+		if (x > env.getMaximum(0)) return false; 
+		if ((x+w) < env.getMinimum(0)) return false; 
+		if (y > env.getMaximum(1)) return false; 
+		if ((y+h) < env.getMinimum(1)) return false; 
+		
+		if (w == 0 && h == 0) {
+			return  containsPoint(geom, x, y); 
+		}
+		
+		// boxes overlap, need long version
+		Geometry rectgeom = null;
+		GeneralPathX gpx = new GeneralPathX();
+		gpx.moveTo(x, y);
+		gpx.lineTo(x+w, y);
+		gpx.lineTo(x+w, y+h);
+		gpx.lineTo(x, y+h);
+		gpx.lineTo(x, y);
+		
+		try {
+			rectgeom = GeometryLocator.getGeometryManager().createSurface(gpx, SUBTYPES.GEOM2D);
+		} catch (Exception e1) {
+			throw new GeometryOperationException(geom.getType(), GeometryOperation.OPERATION_CONTAINS_CODE, e1);
+		}
+		
+		GeometryOperationContext drgoc = new GeometryOperationContext();
+		drgoc.setAttribute("geom",rectgeom);
+
+		Object resp = null;
+		boolean respboolean = true;
+		try {
+			resp = geom.invokeOperation(GeometryOperation.OPERATION_CONTAINS_CODE, drgoc);
+			respboolean = ((Boolean) resp).booleanValue();
+		} catch (Exception e) {
+			throw new GeometryOperationException(geom.getType(), GeometryOperation.OPERATION_CONTAINS_CODE, e);
+		}
+
+		return respboolean;
+	}
+	
+
+	/**
+	 * 
+	 * @param geom
+	 * @param x
+	 * @param y
+	 * @param w
+	 * @param h
+	 * @return
+	 */
+	protected boolean intersectsRectangle(Geometry geom, double x, double y,
+			double w, double h) throws GeometryOperationException {
+		
+		// exclude disjoint boxes
+		Envelope env = geom.getEnvelope();
+		if (x > env.getMaximum(0)) return false; 
+		if ((x+w) < env.getMinimum(0)) return false; 
+		if (y > env.getMaximum(1)) return false; 
+		if ((y+h) < env.getMinimum(1)) return false; 
+		
+		// boxes overlap, need long version
+		Geometry rectgeom = null;
+		GeneralPathX gpx = new GeneralPathX();
+		gpx.moveTo(x, y);
+		gpx.lineTo(x+w, y);
+		gpx.lineTo(x+w, y+h);
+		gpx.lineTo(x, y+h);
+		gpx.lineTo(x, y);
+		
+		try {
+			rectgeom = GeometryLocator.getGeometryManager().createSurface(gpx, SUBTYPES.GEOM2D);
+		} catch (Exception e1) {
+			throw new GeometryOperationException(geom.getType(), GeometryOperation.OPERATION_INTERSECTS_CODE, e1);
+		}
+
+		GeometryOperationContext drgoc = new GeometryOperationContext();
+		drgoc.setAttribute("geom",rectgeom);
+		
+		Object resp = null;
+		boolean respboolean = true;
+		try {
+			resp = geom.invokeOperation(GeometryOperation.OPERATION_INTERSECTS_CODE, drgoc);
+			respboolean = ((Boolean) resp).booleanValue();
+		} catch (Exception e) {
+			throw new GeometryOperationException(geom.getType(), GeometryOperation.OPERATION_INTERSECTS_CODE, e);
+		}
+
+		return respboolean;
+
+
+	}
+
+	public com.vividsolutions.jts.geom.Geometry toJTS() {
+		return Converter.geometryToJts(this);
+	}
+	
+	public byte[] convertToWKB() throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		return (byte[]) this.invokeOperation(OPERATIONS.CONVERTTOWKB, null);
+	}
+
+	public byte[] convertToWKB(int srs) 
+		throws GeometryOperationNotSupportedException, GeometryOperationException {
+		int subType = getGeometryType().getSubType();
+		boolean is3D = subType == 1 || subType == 3;
+		
+		WKBWriter write = null;
+		if(is3D)
+			write = new WKBWriter(3);
+		else
+			write = new WKBWriter(2);
+		return write.write(Converter.geometryToJtsWithSRID(this, srs));
+	}
+	
+	public byte[] convertToWKBForcingType(int srs, int type) 
+		throws GeometryOperationNotSupportedException, GeometryOperationException {
+		int subType = getGeometryType().getSubType();
+		boolean is3D = subType == 1 || subType == 3;
+
+		WKBWriter write = null;
+		if(is3D)
+			write = new WKBWriter(3);
+		else
+			write = new WKBWriter(2);
+		return write.write(Converter.geometryToJtsWithSRIDForcingType(this, srs, type));
+	}
+
+	public String convertToWKT() throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+        	return (String) this.invokeOperation(OPERATIONS.CONVERTTOWKT, null);
+	}
+
+	public Geometry buffer(double distance)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		try {
+			return Converter.jtsToGeometry( toJTS().buffer(distance) );
+		} catch (CreateGeometryException e) {
+			throw new GeometryOperationException(e);
+		}
+	}
+	
+	public boolean contains(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().contains(Converter.geometryToJts(geometry));
+	}
+	
+	public double distance(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().distance( Converter.geometryToJts(geometry));
+	}
+	
+	public Geometry snapTo(Geometry other, double snapTolerance)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		Geometry result = null;
+		GeometrySnapper snapper = new GeometrySnapper(toJTS());
+		com.vividsolutions.jts.geom.Geometry jts_result = snapper.snapTo(Converter.geometryToJts(other), snapTolerance);
+		try {
+			result = Converter.jtsToGeometry(jts_result);
+		} catch (CreateGeometryException e) {
+			throw new GeometryOperationException(e);
+		}
+		return result;
+	}
+	
+	public boolean isWithinDistance(Geometry other, double distance)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		return DistanceOp.isWithinDistance(this.toJTS(), Converter.geometryToJts(other), distance);
+	}
+	
+	
+	public Geometry[] closestPoints(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		Geometry[] points = null;
+
+		Coordinate[] jts_points = DistanceOp.closestPoints(this.toJTS(),
+				Converter.geometryToJts(other));
+		points = new Point[jts_points.length];
+		GeometryFactory geomFactory = new GeometryFactory();
+		for (int n = 0; n < jts_points.length; n++) {
+			try {
+				points[n] = Converter.jtsToGeometry(geomFactory.createPoint(jts_points[n]));
+			} catch (CreateGeometryException e) {
+				throw new GeometryOperationException(e);
+			}
+		}
+		return points;
+	}
+	
+	public boolean overlaps(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().overlaps(Converter.geometryToJts(geometry));
+	}
+	
+	public Geometry convexHull() throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		try {
+			return Converter.jtsToGeometry( toJTS().convexHull() );
+		} catch (CreateGeometryException e) {
+			throw new GeometryOperationException(e);
+		}
+	}
+	
+	public boolean coveredBy(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().coveredBy( Converter.geometryToJts(geometry));
+	}
+	
+        public boolean covers(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().covers( Converter.geometryToJts(geometry));
+	}
+	
+	public boolean crosses(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().crosses(Converter.geometryToJts(geometry));
+	}
+	
+	public Geometry difference(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		try {
+			return Converter.jtsToGeometry( toJTS().difference( Converter.geometryToJts(other)) );
+		} catch (CreateGeometryException e) {
+			throw new GeometryOperationException(e);
+		}
+	}
+	
+	public Geometry intersection(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		try {
+			Geometry geom = null;
+			com.vividsolutions.jts.geom.Geometry jtsgeom = toJTS().intersection(Converter.geometryToJts(other));
+			if( jtsgeom == null ) {
+				return null;
+			}
+			if( jtsgeom.isEmpty() ) {
+				return null;
+			}
+			geom = Converter.jtsToGeometry( jtsgeom );
+			return geom;
+		} catch (CreateGeometryException e) {
+			throw new GeometryOperationException(e);
+		}
+	}
+	
+	public boolean intersects(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+	    try {
+	        return toJTS().intersects(Converter.geometryToJts(geometry));
+	    } catch (Exception exc) {
+	        /*
+	         * The JTS library sometimes throws an exception
+	         * (Example: "TopologyException: side location conflict")
+	         */
+	        throw new GeometryOperationException(exc);
+	    }
+		
+	}
+	
+	public boolean touches(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().touches(Converter.geometryToJts(geometry));
+	}
+	
+	public Geometry union(Geometry other)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		try {
+			return Converter.jtsToGeometry( toJTS().union(Converter.geometryToJts(other)) );
+		} catch (CreateGeometryException e) {
+			throw new GeometryOperationException(e);
+		}
+	}
+	
+	public boolean disjoint(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().disjoint(Converter.geometryToJts(geometry));
+	}
+	
+	public boolean within(Geometry geometry)
+			throws GeometryOperationNotSupportedException,
+			GeometryOperationException {
+		// TODO: this method can be implemented throw invokeOperation 
+		return toJTS().within(Converter.geometryToJts(geometry));
+	}
+	
+	public Point centroid() throws GeometryOperationNotSupportedException, GeometryOperationException {
+		com.vividsolutions.jts.geom.Geometry geometry = toJTS();
+		com.vividsolutions.jts.geom.Point point = geometry.getCentroid();
+		GeometryOperationContext geometryOperationContext = new GeometryOperationContext();
+		geometryOperationContext.setAttribute("JTSGeometry", point);
+		return (Point)this.invokeOperation("fromJTS", geometryOperationContext);		
+	}
+	
+	   
+	public Point getInteriorPoint() throws GeometryOperationNotSupportedException, GeometryOperationException {
+	    
+	    try {
+	        com.vividsolutions.jts.geom.Geometry geometry = toJTS();
+	        com.vividsolutions.jts.geom.Point point = geometry.getInteriorPoint();
+	        GeometryOperationContext geometryOperationContext = new GeometryOperationContext();
+	        geometryOperationContext.setAttribute("JTSGeometry", point);
+	        return (Point)this.invokeOperation("fromJTS", geometryOperationContext);
+        } catch (GeometryOperationNotSupportedException ns_ex) {
+            throw ns_ex;
+        } catch (GeometryOperationException op_ex) {
+            throw op_ex;
+	    } catch (Exception ex) {
+	        /*
+	         * This is for unexpected null pointer exceptions or other
+	         */
+	        throw new GeometryOperationException(ex);
+	    }
+	}   
+
+	
+	public double area() throws GeometryOperationNotSupportedException, GeometryOperationException
+    {
+        //Using get getJTS method instead of use the "toJTS" operation just for performance
+        return toJTS().getArea();
+    }
+    
+    public double perimeter() throws GeometryOperationNotSupportedException, GeometryOperationException
+    {
+      //Using get getJTS method instead of use the "toJTS" operation just for performance
+        return toJTS().getLength();
+    }
+
+    public Shape getShape() {
+        return this;
+    }  
+    
+    public Shape getShape(AffineTransform affineTransform) {
+        if (affineTransform == null){
+            return this;
+        }
+        GeneralPathX gp = getGeneralPath();
+        if( gp==null ) {
+            return null;
+        }
+        return new GeneralPathAdapter(affineTransform, gp);
+    }     
+    
+    public void rotate(double radAngle, double basex, double basey) {
+        
+        AffineTransform at = new AffineTransform();
+        at.rotate(radAngle,basex,basey);
+        this.transform(at);
+    }
+    
+    public void move(double dx, double dy) {
+        
+        AffineTransform at = new AffineTransform();
+        at.translate(dx, dy);
+        this.transform(at);
+    }
+    
+    public void scale(Point basePoint, double sx, double sy) {
+        
+        AffineTransform at = new AffineTransform();
+        at.setToTranslation(basePoint.getX(),basePoint.getY());
+        at.scale(sx,sy);
+        at.translate(-basePoint.getX(),-basePoint.getY());
+        this.transform(at);
+    }
+
+    public boolean isCCW() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return this.getGeneralPath().isCCW();
+    }
+
+    public Geometry makeValid() {
+        try {
+            ValidationStatus vs = this.getValidationStatus();
+            if (vs.isValid()) {
+                return this;
+            }
+            Geometry g = null;
+            switch (vs.getStatusCode()) {
+                case Geometry.ValidationStatus.RING_SELF_INTERSECTION:
+                case Geometry.ValidationStatus.SELF_INTERSECTION:
+                    g = this.buffer(0);
+                    if (g.isValid()) {
+                        return g;
+                    }
+                    break;
+                    
+                case Geometry.ValidationStatus.TOO_FEW_POINTS:
+                    if( this instanceof OrientableCurve ) {
+                        int vertices = ((OrientableCurve)this).getNumVertices();
+                        if( vertices<2 ) {
+                            return new DefaultNullGeometry(this.getGeometryType());
+                        }
+                    }
+                    if( this instanceof OrientableSurface ) {
+                        int vertices = ((OrientableSurface)this).getNumVertices();
+                        if( vertices<3 ) {
+                            g = new DefaultNullGeometry(this.getGeometryType());
+                            return g;
+                        }
+                    }
+            }
+        } catch (Exception ex) {
+            return null;
+        }
+        return null;
+    }
+
+}
+
+
+/*
+Testing equality of Geometry objects
+http://docs.geotools.org/stable/userguide/library/jts/equals.html
+
+com.vividsolutions.jts.geom
+Class Geometry
+http://www.vividsolutions.com/jts/javadoc/com/vividsolutions/jts/geom/Geometry.html#normalize%28%29
+*/
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/AbstractPrimitive.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.generalpath.DefaultGeometryLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/pom.xml	(revision 42196)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.geometry.generalpath</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.vividsolutions</groupId>
+      <artifactId>jts</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.jdk.v1_4</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>net.sf</groupId>
+        <artifactId>jsi</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>gnu.trove</groupId>
+        <artifactId>trove</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+  </dependencies>
+
+  <description>This project contains the default implementation of the API of the geometry library of gvSIG.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml	(revision 42196)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.geometry</artifactId>
+  <packaging>pom</packaging>    
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <modules>
+    <module>org.gvsig.fmap.geometry.api</module>
+    <module>org.gvsig.fmap.geometry.generalpath</module>
+    <module>org.gvsig.fmap.geometry.operation</module>
+  </modules>
+
+  <description>This project contains the geometry library used in gvSIG. </description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.operation.impl.DefaultGeometryOperationLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromjts/FromJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromjts/FromJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromjts/FromJTS.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.fromjts;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+
+/**
+ * <p>
+ * Converts a geometry from JTS to DAL format. This is a special geometry
+ * operation
+ * because don't use the Geometry parameter and returns a JTS geometry. This
+ * kind
+ * of operation can be called from the {@link GeometryManager} using
+ * invokeOperation.
+ * </p>
+ * <p>
+ * This operation needs a JTS geometry loaded in the context. The only attribute
+ * of the {@link GeometryOperation} have to be a geometry of this type and the
+ * ID
+ * of this attribute will be JTSGeometry.
+ * </p>
+ *
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ *
+ */
+public class FromJTS extends GeometryOperation {
+
+    public static final String NAME = "fromJTS";
+    public static final String PARAM = "JTSGeometry";
+    protected static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+    protected final static com.vividsolutions.jts.geom.GeometryFactory geomFactory = new com.vividsolutions.jts.geom.GeometryFactory();
+
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Object obj = ctx.getAttribute("JTSGeometry");
+        if ( obj instanceof com.vividsolutions.jts.geom.Geometry ) {
+            try {
+                return Converter.jtsToGeometry((com.vividsolutions.jts.geom.Geometry) obj);
+            } catch (CreateGeometryException e) {
+                throw new GeometryOperationException(e);
+            }
+        }
+        return null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromjts/FromJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncoder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncoder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncoder.java	(revision 42196)
@@ -0,0 +1,499 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.operation.towkb;
+
+import java.awt.geom.PathIterator;
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+
+
+
+public class WKBEncoder {
+
+	public interface wkbGeometryType {
+		public final static int wkbPoint = 1;
+		public final static int wkbLineString = 2;
+		public final static int wkbPolygon = 3;
+		public final static int wkbTriangle = 17;
+		public final static int wkbMultiPoint = 4;
+		public final static int wkbMultiLineString = 5;
+		public final static int wkbMultiPolygon = 6;
+		public final static int wkbGeometryCollection = 7;
+		public final static int wkbPolyhedralSurface = 15;
+		public final static int wkbTIN = 16;
+
+		public final static int wkbPointZ = 1001;
+		public final static int wkbLineStringZ = 1002;
+		public final static int wkbPolygonZ = 1003;
+		public final static int wkbTrianglez = 1017;
+		public final static int wkbMultiPointZ = 1004;
+		public final static int wkbMultiLineStringZ = 1005;
+		public final static int wkbMultiPolygonZ = 1006;
+		public final static int wkbGeometryCollectionZ = 1007;
+		public final static int wkbPolyhedralSurfaceZ = 1015;
+		public final static int wkbTINZ = 1016;
+
+		public final static int wkbPointM = 2001;
+		public final static int wkbLineStringM = 2002;
+		public final static int wkbPolygonM = 2003;
+		public final static int wkbTriangleM = 2017;
+		public final static int wkbMultiPointM = 2004;
+		public final static int wkbMultiLineStringM = 2005;
+		public final static int wkbMultiPolygonM = 2006;
+		public final static int wkbGeometryCollectionM = 2007;
+		public final static int wkbPolyhedralSurfaceM = 2015;
+		public final static int wkbTINM = 2016;
+
+		public final static int wkbPointZM = 3001;
+		public final static int wkbLineStringZM = 3002;
+		public final static int wkbPolygonZM = 3003;
+		public final static int wkbTriangleZM = 3017;
+		public final static int wkbMultiPointZM = 3004;
+		public final static int wkbMultiLineStringZM = 3005;
+		public final static int wkbMultiPolygonZM = 3006;
+		public final static int wkbGeometryCollectionZM = 3007;
+		public final static int wkbPolyhedralSurfaceZM = 3015;
+		public final static int wkbTinZM = 3016;
+
+		public final static int wkb_baseToZ = wkbPointZ - wkbPoint;
+		public final static int wkb_baseToM = wkbPointM - wkbPoint;
+		public final static int wkb_baseToZM = wkbPointZM - wkbPoint;
+	}
+
+	public interface wkbByteOrder {
+		public final static byte wkbXDR = 0;                // Big Endian
+		public final static byte wkbNDR = 1;                // Little Endian
+	}
+
+
+	public byte[] encode(Geometry geometry)
+			throws GeometryTypeNotSupportedException,
+			WKBEncodingException,
+			IOException {
+		ByteArrayOutputStream stream;
+
+		if (geometry.getType() == TYPES.POINT) {
+			stream = new ByteArrayOutputStream(50);
+		} else {
+			stream = new ByteArrayOutputStream(512);
+		}
+
+		encode(geometry, stream);
+		return stream.toByteArray();
+
+	}
+	public void encode(Geometry geometry, ByteArrayOutputStream stream)
+			throws GeometryTypeNotSupportedException, WKBEncodingException,
+			IOException {
+		encode(geometry, new DataOutputStream(stream));
+	}
+
+	public void encode(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException,
+			WKBEncodingException,
+			IOException {
+		switch (geometry.getType()) {
+			case TYPES.POINT:
+				encodePoint(geometry, stream);
+				break;
+			case TYPES.MULTIPOINT:
+				encodeMultiPoint(geometry, stream);
+				break;
+
+			case TYPES.ARC:
+			case TYPES.CURVE:
+			case TYPES.CIRCLE:
+			case TYPES.ELLIPSE:
+			case TYPES.ELLIPTICARC:
+				encodeLineString(geometry, stream);
+				break;
+
+			case TYPES.MULTICURVE:
+				encodeMultiLineString(geometry, stream);
+				break;
+
+			case TYPES.SURFACE:
+				encodePolygon(geometry, stream);
+				break;
+
+			case TYPES.MULTISURFACE:
+				encodeMultiPolygon(geometry, stream);
+				break;
+
+			case TYPES.AGGREGATE:
+				encodeCollection(geometry, stream);
+				break;
+
+			default:
+				throw new GeometryTypeNotSupportedException(geometry.getType(),
+					geometry.getGeometryType().getSubType());
+		}
+
+		// FIXME geom.subtype != SUBTYPES.GEOM2D NOT SUPPORTED !!!!
+		if (geometry.getGeometryType().getSubType() != SUBTYPES.GEOM2D) {
+			throw new GeometryTypeNotSupportedException(geometry.getType(),
+					geometry.getGeometryType().getSubType());
+		}
+	}
+
+
+	private void encodeCollection(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException,
+			WKBEncodingException,
+			IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbGeometryCollection, geometryType,
+				stream);
+
+		Aggregate collection = (Aggregate) geometry;
+
+		int nGeometries = collection.getPrimitivesNumber();
+		stream.writeInt(nGeometries);
+		for (int i = 0; i < nGeometries; i++) {
+			encode(collection.getPrimitiveAt(i), stream);
+		}
+	}
+
+	private void encodeMultiPolygon(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException,
+			WKBPolygonNotClosedException, IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbMultiPolygon, geometryType, stream);
+
+		MultiSurface surfaces = (MultiSurface) geometry;
+
+		int nGeometries = surfaces.getPrimitivesNumber();
+		stream.writeInt(nGeometries);
+		for (int i = 0; i < nGeometries; i++) {
+			encodePolygon(surfaces.getPrimitiveAt(i), stream);
+		}
+	}
+
+	private void checkLinearRingIsClosed(Geometry geom, List linearRing)
+			throws WKBPolygonNotClosedException {
+		double[] first = (double[]) linearRing.get(0);
+		double[] last = (double[]) linearRing.get(linearRing.size() - 1);
+
+		for (int i = 0; i < first.length; i++) {
+			if (Math.abs(first[i] - last[i]) > 0.000001) {
+				throw new WKBPolygonNotClosedException(geom);
+			}
+		}
+
+	}
+
+	private List getLinearRings(Surface surface)
+			throws WKBPolygonNotClosedException {
+		PathIterator theIterator = surface.getPathIterator(null);
+		List linearRings = new ArrayList();
+		List curlinearRing = new ArrayList();
+		int theType;
+		double[] theData = new double[6];
+
+		while (!theIterator.isDone()) {
+			// while not done
+			theType = theIterator.currentSegment(theData);
+
+			// Populate a segment of the new
+			// GeneralPathX object.
+			// Process the current segment to populate a new
+			// segment of the new GeneralPathX object.
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+				if (curlinearRing.size() != 0) {
+					if (curlinearRing.size() < 4) {
+						// FIXME exception
+						throw new WKBPolygonNotClosedException(surface);
+					}
+					checkLinearRingIsClosed(surface, curlinearRing);
+					linearRings.add(curlinearRing);
+					curlinearRing = new ArrayList();
+
+				}
+				curlinearRing.add(new double[] { theData[0], theData[1] });
+				break;
+
+			case PathIterator.SEG_LINETO:
+				curlinearRing.add(new double[] { theData[0], theData[1] });
+				break;
+
+			case PathIterator.SEG_QUADTO:
+				// TODO transform to linear segments
+				throw new IllegalArgumentException("SEG_QUADTO unsupported");
+
+				// shape.quadTo(theData[0], theData[1], theData[2], theData[3]);
+
+				// break;
+
+			case PathIterator.SEG_CUBICTO:
+				// TODO transform to linear segments
+				throw new IllegalArgumentException("SEG_QUADTO unsupported");
+				// shape.curveTo(theData[0], theData[1], theData[2], theData[3],
+				// theData[4], theData[5]);
+
+				// break;
+
+			case PathIterator.SEG_CLOSE:
+				curlinearRing.add(curlinearRing.get(0));
+				linearRings.add(curlinearRing);
+				curlinearRing = new ArrayList();
+				break;
+			} // end switch
+
+			theIterator.next();
+		}
+
+		if (curlinearRing.size() != 0) {
+			if (curlinearRing.size() < 4) {
+				// FIXME exception
+				throw new WKBPolygonNotClosedException(surface);
+			}
+			checkLinearRingIsClosed(surface, curlinearRing);
+			linearRings.add(curlinearRing);
+		}
+		return linearRings;
+	}
+
+	private List getLines(Curve curve) throws WKBEncodingException {
+		List lines = new ArrayList();
+		PathIterator theIterator = curve.getPathIterator(null);
+		List curlinearRing = new ArrayList();
+		int theType;
+		double[] theData = new double[6];
+
+		while (!theIterator.isDone()) {
+			// while not done
+			theType = theIterator.currentSegment(theData);
+
+			// Populate a segment of the new
+			// GeneralPathX object.
+			// Process the current segment to populate a new
+			// segment of the new GeneralPathX object.
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+				if (curlinearRing.size() != 0) {
+					if (curlinearRing.size() < 2) {
+						throw new WKBOnePointLineException(curve);
+					}
+					lines.add(curlinearRing);
+					curlinearRing = new ArrayList();
+				}
+				curlinearRing.add(new double[] { theData[0], theData[1] });
+
+				break;
+
+			case PathIterator.SEG_LINETO:
+				curlinearRing.add(new double[] { theData[0], theData[1] });
+				break;
+
+			case PathIterator.SEG_QUADTO:
+				// TODO transform to linear segments
+				throw new IllegalArgumentException("SEG_QUADTO unsupported");
+
+				// shape.quadTo(theData[0], theData[1], theData[2], theData[3]);
+
+				// break;
+
+			case PathIterator.SEG_CUBICTO:
+				// TODO transform to linear segments
+				throw new IllegalArgumentException("SEG_QUADTO unsupported");
+				// shape.curveTo(theData[0], theData[1], theData[2], theData[3],
+				// theData[4], theData[5]);
+
+				// break;
+
+			case PathIterator.SEG_CLOSE:
+				curlinearRing.add(curlinearRing.get(0));
+				break;
+			} // end switch
+
+			theIterator.next();
+		}
+
+		if (curlinearRing.size() != 0) {
+			if (curlinearRing.size() < 2) {
+				throw new WKBOnePointLineException(curve);
+			}
+			lines.add(curlinearRing);
+		}
+		return lines;
+	}
+
+
+	private void encodePolygon(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException,
+			WKBPolygonNotClosedException, IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbPolygon, geometryType, stream);
+
+		Surface surface = (Surface) geometry;
+
+		List linearRings = getLinearRings(surface);
+		stream.writeInt(linearRings.size());
+		for (int i = 0; i < linearRings.size(); i++) {
+			encodeLinearRing((List) linearRings.get(i), stream);
+		}
+
+	}
+
+	private void encodeLinearRing(List linearRing, DataOutputStream stream)
+			throws IOException {
+		stream.writeInt(linearRing.size());
+		for (int i = 0; i < linearRing.size(); i++) {
+			encodeCoordinates((double[]) linearRing.get(i), stream);
+		}
+	}
+
+	private void encodeMultiLineString(Geometry geometry,
+			DataOutputStream stream)
+			throws GeometryTypeNotSupportedException,
+			WKBEncodingException, IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbMultiLineString, geometryType,
+				stream);
+
+		MultiCurve curves = (MultiCurve) geometry;
+
+		int nGeometries = curves.getPrimitivesNumber();
+		stream.writeInt(nGeometries);
+		for (int i = 0; i < nGeometries; i++) {
+			encodeLineString(curves.getPrimitiveAt(i), stream);
+		}
+	}
+
+	private void encodeLineString(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException, WKBEncodingException,
+			IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbLineString, geometryType,
+				 stream);
+
+		Curve curve = (Curve) geometry;
+
+		List lines = getLines(curve);
+		if (lines.size() != 1) {
+			throw new WKBMultyLineInLineDefinitionException(curve);
+		}
+
+		List line = (List) lines.get(0);
+		int nVertices = line.size();
+		stream.writeInt(nVertices);
+		for (int i = 0; i < nVertices; i++) {
+			encodeCoordinates((double[]) line.get(i), stream);
+		}
+
+	}
+
+
+	private void encodeCoordinates(double[] coordinates, DataOutputStream stream)
+			throws IOException {
+		for (int i = 0; i < coordinates.length; i++) {
+			stream.writeDouble(coordinates[i]);
+		}
+	}
+
+	private void encodeWKBGeomHead(int wkbBaseType, GeometryType geometryType,
+			DataOutputStream stream) throws GeometryTypeNotSupportedException,
+			IOException {
+
+		stream.writeByte(wkbByteOrder.wkbXDR);
+
+		int finalType = wkbBaseType % wkbGeometryType.wkb_baseToZ;
+
+		switch (geometryType.getSubType()) {
+		case SUBTYPES.GEOM2D:
+			break;
+		case SUBTYPES.GEOM2DM:
+			finalType = finalType + wkbGeometryType.wkb_baseToM;
+			break;
+		
+		case SUBTYPES.GEOM3D:
+			finalType = finalType + wkbGeometryType.wkb_baseToZ;
+			break;
+
+		case SUBTYPES.GEOM3DM:
+			finalType = finalType + wkbGeometryType.wkb_baseToZM;
+			break;
+
+
+		default:
+			throw new GeometryTypeNotSupportedException(geometryType.getType(),
+					geometryType.getSubType());
+
+		}
+
+		stream.writeInt(finalType);
+
+
+	}
+
+
+	private void encodePoint(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException, IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbPoint, geometryType,
+				stream);
+
+		Point point = (Point) geometry;
+		double[] coords = point.getCoordinates();
+		for (int i = 0; i < coords.length; i++) {
+			stream.writeDouble(coords[i]);
+		}
+
+	}
+
+	private void encodeMultiPoint(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException, IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbMultiPoint, geometryType, stream);
+
+		MultiPoint points = (MultiPoint) geometry;
+
+		int nGeometries = points.getPrimitivesNumber();
+		stream.writeInt(nGeometries);
+		for (int i=0;i<nGeometries;i++) {
+			encodePoint(points.getPrimitiveAt(i), stream);
+		}
+	}
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncoder.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBPolygonNotClosedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBPolygonNotClosedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBPolygonNotClosedException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.operation.towkb;
+
+import org.gvsig.fmap.geom.Geometry;
+
+public class WKBPolygonNotClosedException extends WKBEncodingException {
+
+	/**
+	 * Generated serial version UID
+	 */
+	private static final long serialVersionUID = 2345762531238114238L;
+
+	/**
+	 * Key to retrieve this exception's message
+	 */
+	private static final String MESSAGE_KEY = "wkb_polygon_not_closed_exception";
+	private static final String FORMAT_STRING =
+		"Polygon not closed found";
+
+	/**
+	 * Class name of the geometry type. Should never be null in this exception
+	 */
+	public Geometry geometry = null;
+
+
+	public WKBPolygonNotClosedException(Geometry geom) {
+		super(FORMAT_STRING, MESSAGE_KEY, serialVersionUID);
+		this.geometry = geom;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBPolygonNotClosedException.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKB.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.towkb;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+
+import com.vividsolutions.jts.io.WKBWriter;
+
+public class ToWKB extends GeometryOperation {
+    public static final String NAME       = "toWKB";
+	public static final int    CODE       =  GeometryLocator.getGeometryManager().getGeometryOperationCode(NAME);
+	private static WKBWriter   writer     = null;
+	private static int         dimension  = 2;
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) {
+		int subType = geom.getGeometryType().getSubType();
+		boolean is3D = subType == 1 || subType == 3;
+		
+		if(writer == null) {
+			if(is3D) {
+				dimension = 3;
+				writer = new WKBWriter(3);
+			} else {
+				dimension = 2;
+				writer = new WKBWriter();
+			}
+		} else {
+			if(is3D && dimension == 2) {
+				dimension = 3;
+				writer = new WKBWriter(3);
+			}
+			if(!is3D && dimension == 3) {
+				dimension = 2;
+				writer = new WKBWriter();
+			}
+		}
+		
+		if (ctx == null) {
+			return writer.write(Converter.geometryToJts(geom));
+		}
+		return writer.write(Converter.geometryToJtsWithSRID(geom,
+				((ToWKBOperationContext) ctx).getSrID()));
+	}
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKB.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBOnePointLineException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBOnePointLineException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBOnePointLineException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.operation.towkb;
+
+import org.gvsig.fmap.geom.Geometry;
+
+public class WKBOnePointLineException extends WKBEncodingException {
+
+	/**
+	 * Generated serial version UID
+	 */
+	private static final long serialVersionUID = 1810408131264048570L;
+
+	/**
+	 * Key to retrieve this exception's message
+	 */
+	private static final String MESSAGE_KEY = "wkb_one_point_line_exception";
+	private static final String FORMAT_STRING =
+		"Single point line definition";
+
+	/**
+	 * Class name of the geometry type. Should never be null in this exception
+	 */
+	public Geometry geometry = null;
+
+
+	public WKBOnePointLineException(Geometry geom) {
+		super(FORMAT_STRING, MESSAGE_KEY, serialVersionUID);
+		this.geometry = geom;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBOnePointLineException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncodingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncodingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncodingException.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.towkb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+
+public abstract class WKBEncodingException extends BaseException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7340057779411755446L;
+
+	protected Map values = new HashMap();
+
+	public WKBEncodingException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	public WKBEncodingException(String messageFormat, String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+	protected void setValue(String name, String value) {
+		this.values.put(name, value);
+	}
+
+	protected Map values() {
+		return this.values;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBEncodingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBOperationContext.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.towkb;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class ToWKBOperationContext extends GeometryOperationContext {
+	public static final String SRS = "srs";
+
+	/**
+	 * Set the srID to use in the WKB geometry
+	 * 
+	 * @param srID
+	 */
+	public void setSrID(int srID) {
+		this.setAttribute(SRS, new Integer(srID));
+	}
+
+	/**
+	 * Get the srId to use in the WKB geometry
+	 * 
+	 * @return
+	 */
+	public int getSrID() {
+		Integer srs = (Integer) this.getAttribute(SRS);
+		if( srs == null ) {
+			return -1;
+		}
+		return srs.intValue();
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBNative.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBNative.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBNative.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.towkb;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+public class ToWKBNative extends GeometryOperation {
+    public static final String NAME = "toWKBNative";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+	
+	private static WKBEncoder encoder = new WKBEncoder();
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+			throws GeometryOperationException {
+		try {
+			return encoder.encode(geom);
+		} catch (Exception e) {
+			throw new GeometryOperationException(e);
+		}
+	}
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBNative.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBMultyLineInLineDefinitionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBMultyLineInLineDefinitionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBMultyLineInLineDefinitionException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.operation.towkb;
+
+import org.gvsig.fmap.geom.Geometry;
+
+public class WKBMultyLineInLineDefinitionException extends WKBEncodingException {
+
+	/**
+	 * Generated serial version UID
+	 */
+	private static final long serialVersionUID = -4562404266549127771L;
+
+	/**
+	 * Key to retrieve this exception's message
+	 */
+	private static final String MESSAGE_KEY = "wkb_move_in_middle_of_line_exception";
+	private static final String FORMAT_STRING =
+		"MoveTo segment in middle of a single line";
+
+	/**
+	 * Class name of the geometry type. Should never be null in this exception
+	 */
+	public Geometry geometry = null;
+
+
+	public WKBMultyLineInLineDefinitionException(Geometry geom) {
+		super(FORMAT_STRING, MESSAGE_KEY, serialVersionUID);
+		this.geometry = geom;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkb/WKBMultyLineInLineDefinitionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKTGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKTGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKTGeometryOperationContext.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.fromwkt;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+
+/**
+ * @author jmvivo
+ * 
+ */
+public class FromWKTGeometryOperationContext extends GeometryOperationContext {
+
+	public static final String SRS = "srs";
+	public static final String TEXT = "text";
+	
+	
+	public FromWKTGeometryOperationContext(String text,String srs) {
+		this.setText(text);
+		this.setSrs(srs);
+	}
+
+	public void setText(String text) {
+		this.setAttribute(TEXT, text);
+	}
+
+	public String getText() {
+		return (String) this.getAttribute(TEXT);
+	}
+
+	protected String getSrs() {
+		return (String) this.getAttribute(SRS);
+	}
+
+	protected void setSrs(String srs) {
+		this.setAttribute(SRS, srs);
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKTGeometryOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/WKTParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/WKTParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/WKTParser.java	(revision 42196)
@@ -0,0 +1,602 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.fromwkt;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.tools.exception.BaseException;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.io.ParseException;
+
+/**
+ *  Converts a Well-Known Text string to a <code>Geometry</code>.
+ * <p>
+ *  The <code>WKTReader</code> allows
+ *  extracting <code>Geometry</code> objects from either input streams or
+ *  internal strings. This allows it to function as a parser to read <code>Geometry</code>
+ *  objects from text blocks embedded in other data formats (e.g. XML). <P>
+ * <p>
+ * The Well-known
+ *  Text format is defined in the <A HREF="http://www.opengis.org/techno/specs.htm">
+ *  OpenGIS Simple Features Specification for SQL</A> . <P>
+ * <p>
+ *  <B>Note: </B> There is an inconsistency in the SFS. The WKT grammar states
+ *  that <code>MultiPoints</code> are represented by <code>MULTIPOINT ( ( x y), (x y) )</code>
+ *  , but the examples show <code>MultiPoint</code>s as <code>MULTIPOINT ( x y, x y )</code>
+ *  . Other implementations follow the latter syntax, so JTS will adopt it as
+ *  well.
+ *
+ *  A <code>WKTReader</code> is parameterized by a <code>GeometryFactory</code>
+ *  , to allow it to create <code>Geometry</code> objects of the appropriate
+ *  implementation. In particular, the <code>GeometryFactory</code> will
+ *  determine the <code>PrecisionModel</code> and <code>SRID</code> that is
+ *  used. <P>
+ *
+ *  The <code>WKTReader</code> will convert the input numbers to the precise
+ *  internal representation.
+ *
+ *  Reads non-standard "LINEARRING" tags.
+ *
+ *@version 1.5
+ */
+public class WKTParser {
+
+	private GeometryManager manager = GeometryLocator.getGeometryManager();
+	/**
+	 * Creates a WKTReader that creates objects using a basic GeometryFactory.
+	 */
+	public WKTParser() {
+	}
+
+
+
+	/**
+	 * Converts a Well-known Text representation to a <code>Geometry</code>.
+	 * 
+	 * @param wellKnownText
+	 *            one or more <Geometry Tagged Text>strings (see the OpenGIS
+	 *            Simple Features Specification) separated by whitespace
+	 * @return a <code>Geometry</code> specified by <code>wellKnownText</code>
+	 * @throws ParseException
+	 *             if a parsing problem occurs
+	 */
+	public Geometry read(String wellKnownText) throws ParseException {
+		StringReader reader = new StringReader(wellKnownText);
+		try {
+			return read(reader);
+		}
+		finally {
+			reader.close();
+		}
+	}
+
+	/**
+	 *  Converts a Well-known Text representation to a <code>Geometry</code>.
+	 *
+	 *@param  reader           a Reader which will return a <Geometry Tagged Text>
+	 *      string (see the OpenGIS Simple Features Specification)
+	 *@return                  a <code>Geometry</code> read from <code>reader</code>
+	 *@throws  ParseException  if a parsing problem occurs
+	 */
+	public Geometry read(Reader reader) throws ParseException {
+		StreamTokenizer tokenizer = new StreamTokenizer(reader);
+		try {
+			return readGeometryTaggedText(tokenizer);
+		}
+		catch (IOException e) {
+			throw new ParseException(e.toString());
+		} catch (CreateGeometryException e) {
+			throw new ParseException(e.toString());
+		}
+	}
+
+	/**
+	 *  Returns the next array of <code>Coordinate</code>s in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next element returned by the stream should be "(" (the
+	 *      beginning of "(x1 y1, x2 y2, ..., xn yn)") or "EMPTY".
+	 *@return                  the next array of <code>Coordinate</code>s in the
+	 *      stream, or an empty array if "EMPTY" is the next element returned by
+	 *      the stream.
+	 *@throws  IOException     if an I/O error occurs
+	 *@throws  ParseException  if an unexpected token was encountered
+	 */
+	private Coordinate[] getCoordinates(StreamTokenizer tokenizer)
+	throws IOException, ParseException
+	{
+		String nextToken = getNextEmptyOrOpener(tokenizer);
+		if (nextToken.equals("EMPTY")) {
+			return new Coordinate[]{};
+		}
+		ArrayList coordinates = new ArrayList();
+		coordinates.add(getPreciseCoordinate(tokenizer));
+		nextToken = getNextCloserOrComma(tokenizer);
+		while (nextToken.equals(",")) {
+			coordinates.add(getPreciseCoordinate(tokenizer));
+			nextToken = getNextCloserOrComma(tokenizer);
+		}
+		Coordinate[] array = new Coordinate[coordinates.size()];
+		return (Coordinate[]) coordinates.toArray(array);
+	}
+
+	private Coordinate getPreciseCoordinate(StreamTokenizer tokenizer)
+	throws IOException, ParseException
+	{
+		Coordinate coord = new Coordinate();
+		coord.x = getNextNumber(tokenizer);
+		coord.y = getNextNumber(tokenizer);
+		if (isNumberNext(tokenizer)) {
+			coord.z = getNextNumber(tokenizer);
+		}
+		return coord;
+	}
+	private boolean isNumberNext(StreamTokenizer tokenizer) throws IOException {
+		try {
+			return tokenizer.nextToken() == StreamTokenizer.TT_NUMBER;
+		}
+		finally {
+			tokenizer.pushBack();
+		}
+	}
+	/**
+	 *  Returns the next number in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next token must be a number.
+	 *@return                  the next number in the stream
+	 *@throws  ParseException  if the next token is not a number
+	 *@throws  IOException     if an I/O error occurs
+	 */
+	private double getNextNumber(StreamTokenizer tokenizer) throws IOException,
+	ParseException {
+		int type = tokenizer.nextToken();
+		switch (type) {
+		case StreamTokenizer.TT_EOF:
+			throw new ParseException("Expected number but encountered end of stream");
+		case StreamTokenizer.TT_EOL:
+			throw new ParseException("Expected number but encountered end of line");
+		case StreamTokenizer.TT_NUMBER:
+			return tokenizer.nval;
+		case StreamTokenizer.TT_WORD:
+			throw new ParseException("Expected number but encountered word: " +
+					tokenizer.sval);
+		case '(':
+			throw new ParseException("Expected number but encountered '('");
+		case ')':
+			throw new ParseException("Expected number but encountered ')'");
+		case ',':
+			throw new ParseException("Expected number but encountered ','");
+		}
+		return 0;
+	}
+
+	/**
+	 *  Returns the next "EMPTY" or "(" in the stream as uppercase text.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next token must be "EMPTY" or "(".
+	 *@return                  the next "EMPTY" or "(" in the stream as uppercase
+	 *      text.
+	 *@throws  ParseException  if the next token is not "EMPTY" or "("
+	 *@throws  IOException     if an I/O error occurs
+	 */
+	private String getNextEmptyOrOpener(StreamTokenizer tokenizer) throws IOException, ParseException {
+		String nextWord = getNextWord(tokenizer);
+		if (nextWord.equals("EMPTY") || nextWord.equals("(")) {
+			return nextWord;
+		}
+		throw new ParseException("Expected 'EMPTY' or '(' but encountered '" +
+				nextWord + "'");
+	}
+
+	/**
+	 *  Returns the next ")" or "," in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next token must be ")" or ",".
+	 *@return                  the next ")" or "," in the stream
+	 *@throws  ParseException  if the next token is not ")" or ","
+	 *@throws  IOException     if an I/O error occurs
+	 */
+	private String getNextCloserOrComma(StreamTokenizer tokenizer) throws IOException, ParseException {
+		String nextWord = getNextWord(tokenizer);
+		if (nextWord.equals(",") || nextWord.equals(")")) {
+			return nextWord;
+		}
+		throw new ParseException("Expected ')' or ',' but encountered '" + nextWord
+				+ "'");
+	}
+
+	/**
+	 *  Returns the next ")" in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next token must be ")".
+	 *@return                  the next ")" in the stream
+	 *@throws  ParseException  if the next token is not ")"
+	 *@throws  IOException     if an I/O error occurs
+	 */
+	private String getNextCloser(StreamTokenizer tokenizer) throws IOException, ParseException {
+		String nextWord = getNextWord(tokenizer);
+		if (nextWord.equals(")")) {
+			return nextWord;
+		}
+		throw new ParseException("Expected ')' but encountered '" + nextWord + "'");
+	}
+
+	/**
+	 *  Returns the next word in the stream as uppercase text.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next token must be a word.
+	 *@return                  the next word in the stream as uppercase text
+	 *@throws  ParseException  if the next token is not a word
+	 *@throws  IOException     if an I/O error occurs
+	 */
+	private String getNextWord(StreamTokenizer tokenizer) throws IOException, ParseException {
+		int type = tokenizer.nextToken();
+		switch (type) {
+		case StreamTokenizer.TT_EOF:
+			throw new ParseException("Expected word but encountered end of stream");
+		case StreamTokenizer.TT_EOL:
+			throw new ParseException("Expected word but encountered end of line");
+		case StreamTokenizer.TT_NUMBER:
+			throw new ParseException("Expected word but encountered number: " +
+					tokenizer.nval);
+		case StreamTokenizer.TT_WORD:
+			return tokenizer.sval.toUpperCase();
+		case '(':
+			return "(";
+		case ')':
+			return ")";
+		case ',':
+			return ",";
+		}
+		// Assert.shouldNeverReachHere("Encountered unexpected StreamTokenizer type: " + type);
+		return null;
+	}
+
+	/**
+	 *  Creates a <code>Geometry</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;Geometry Tagged Text&gt;.
+	 *@return                  a <code>Geometry</code> specified by the next token
+	 *      in the stream
+	 *@throws  ParseException  if the coordinates used to create a <code>Polygon</code>
+	 *      shell and holes do not form closed linestrings, or if an unexpected
+	 *      token was encountered
+	 *@throws  IOException     if an I/O error occurs
+	 * @throws CreateGeometryException 
+	 */
+	private Geometry readGeometryTaggedText(StreamTokenizer tokenizer) throws IOException, ParseException, CreateGeometryException{
+		String type = getNextWord(tokenizer);
+		if (type.equals("POINT")) {
+			return readPointText(tokenizer);
+		}
+		else if (type.equals("LINESTRING")) {
+			return readLineStringText(tokenizer);
+		}
+		else if (type.equals("LINEARRING")) {
+			return readLinearRingText(tokenizer);
+		}
+		else if (type.equals("POLYGON")) {
+			return readPolygonText(tokenizer);
+		}
+		else if (type.equals("MULTIPOINT")) {
+			return readMultiPointText(tokenizer);
+		}
+		else if (type.equals("MULTILINESTRING")) {
+			return readMultiLineStringText(tokenizer);
+		}
+		else if (type.equals("MULTIPOLYGON")) {
+			return readMultiPolygonText(tokenizer);
+		}
+		/* else if (type.equals("GEOMETRYCOLLECTION")) {
+      return readGeometryCollectionText(tokenizer);
+    } */
+		System.err.println("Unknown type: " + type);
+		throw new ParseException("Unknown type: " + type);
+	}
+
+	/**
+	 *  Creates a <code>Point</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;Point Text&gt;.
+	 *@return                  a <code>Point</code> specified by the next token in
+	 *      the stream
+	 *@throws  IOException     if an I/O error occurs
+	 *@throws  ParseException  if an unexpected token was encountered
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 * @throws CreateGeometryException 
+	 */
+	private Geometry readPointText(StreamTokenizer tokenizer) throws IOException, ParseException, CreateGeometryException {
+		String nextToken = getNextEmptyOrOpener(tokenizer);
+		if (nextToken.equals("EMPTY")) {
+			return null;
+		}
+		Coordinate c = getPreciseCoordinate(tokenizer);
+		Point point = (Point)manager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+		point.setX(c.x);
+		point.setY(c.y);
+		getNextCloser(tokenizer);
+
+		return point;
+	}
+
+	/**
+	 *  Creates a <code>LineString</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;LineString Text&gt;.
+	 *@return                  a <code>LineString</code> specified by the next
+	 *      token in the stream
+	 *@throws  IOException     if an I/O error occurs
+	 *@throws  ParseException  if an unexpected token was encountered
+	 * @throws CreateGeometryException 
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 */
+	private Curve readLineStringText(StreamTokenizer tokenizer) throws IOException, ParseException, CreateGeometryException {
+		Coordinate[] arrayC = getCoordinates(tokenizer);
+		GeneralPathX gp = new GeneralPathX();
+		gp.moveTo(arrayC[0].x,arrayC[0].y);
+		for (int i=1;i < arrayC.length; i++)
+		{
+			gp.lineTo(arrayC[i].x, arrayC[i].y);
+		}
+        // IJM: Cambiado Surface por Curve 
+        Curve curve = (Curve) manager.create(TYPES.CURVE, SUBTYPES.GEOM2D); 
+        curve.setGeneralPath(gp); 
+        return curve; 
+	}
+
+	/**
+	 *  Creates a <code>LinearRing</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;LineString Text&gt;.
+	 *@return                  a <code>LinearRing</code> specified by the next
+	 *      token in the stream
+	 *@throws  IOException     if an I/O error occurs
+	 *@throws  ParseException  if the coordinates used to create the <code>LinearRing</code>
+	 *      do not form a closed linestring, or if an unexpected token was
+	 *      encountered
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 * @throws CreateGeometryException 
+	 */
+	private Surface readLinearRingText(StreamTokenizer tokenizer)
+	throws IOException, ParseException, CreateGeometryException
+	{
+		Coordinate[] arrayC = getCoordinates(tokenizer);
+		GeneralPathX gp = new GeneralPathX();
+		gp.moveTo(arrayC[0].x, arrayC[0].y);
+		for (int i=1;i < arrayC.length; i++)
+		{
+			gp.lineTo(arrayC[i].x, arrayC[i].y);
+		}
+		Surface surface = (Surface)manager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+		surface.setGeneralPath(gp);
+		return surface;
+	}
+
+	/**
+	 *  Creates a <code>MultiPoint</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;MultiPoint Text&gt;.
+	 *@return                  a <code>MultiPoint</code> specified by the next
+	 *      token in the stream
+	 *@throws  IOException     if an I/O error occurs
+	 *@throws  ParseException  if an unexpected token was encountered
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 * @throws CreateGeometryException 
+	 */
+	private Geometry readMultiPointText(StreamTokenizer tokenizer) throws IOException, ParseException, CreateGeometryException {
+		Coordinate[] coords = getCoordinates(tokenizer);
+		MultiPoint multiPoint = (MultiPoint)manager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+		for (int i=0; i < coords.length; i++)
+		{
+			Point point = (Point)manager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+			point.setX(coords[i].x);
+			point.setY(coords[i].y);
+			multiPoint.addPoint(point);
+		}   
+
+		return multiPoint;
+	}
+
+
+	/**
+	 *  Creates a <code>Polygon</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;Polygon Text&gt;.
+	 *@return                  a <code>Polygon</code> specified by the next token
+	 *      in the stream
+	 *@throws  ParseException  if the coordinates used to create the <code>Polygon</code>
+	 *      shell and holes do not form closed linestrings, or if an unexpected
+	 *      token was encountered.
+	 *@throws  IOException     if an I/O error occurs
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 * @throws CreateGeometryException 
+	 */
+	private Surface readPolygonText(StreamTokenizer tokenizer) throws IOException, ParseException, CreateGeometryException {
+		String nextToken = getNextEmptyOrOpener(tokenizer);
+		if (nextToken.equals("EMPTY")) {
+			return null;
+		}
+
+		Surface shell = readLinearRingText(tokenizer);
+		Surface hole = null;
+		nextToken = getNextCloserOrComma(tokenizer);
+		
+		try {
+			while (nextToken.equals(",")) {
+				hole = readLinearRingText(tokenizer);
+				if (shell.contains(hole)) {
+					shell = (Surface) shell.difference(hole);
+				} else {
+					throw new CreateGeometryException(
+							Geometry.TYPES.SURFACE,
+							Geometry.SUBTYPES.GEOM2D,
+							new Exception("Hole not in shell."));
+					
+				}
+				nextToken = getNextCloserOrComma(tokenizer);
+			}
+		} catch (BaseException ge) {
+			throw new CreateGeometryException(
+					Geometry.TYPES.SURFACE,
+					Geometry.SUBTYPES.GEOM2D, ge);
+		}
+		return shell; //geometryFactory.createPolygon(shell, (LinearRing[]) holes.toArray(array));
+	}
+
+	/**
+	 *  Creates a <code>MultiLineString</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;MultiLineString Text&gt;.
+	 *@return                  a <code>MultiLineString</code> specified by the
+	 *      next token in the stream
+	 *@throws  IOException     if an I/O error occurs
+	 *@throws  ParseException  if an unexpected token was encountered
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 * @throws CreateGeometryException 
+	 */
+	private Geometry readMultiLineStringText(StreamTokenizer tokenizer) throws IOException, ParseException, CreateGeometryException {
+		// TODO: HACER ESTO BIEN, CON UN GENERAL PATH
+		String nextToken = getNextEmptyOrOpener(tokenizer);
+		if (nextToken.equals("EMPTY")) {
+			return null;
+		}
+		
+		MultiCurve mcu = manager.createMultiCurve(SUBTYPES.GEOM2D);
+		Curve lineString = readLineStringText(tokenizer);
+		mcu.addCurve(lineString);
+		
+		nextToken = getNextCloserOrComma(tokenizer);
+		while (nextToken.equals(",")) {
+			lineString = readLineStringText(tokenizer);
+			mcu.addCurve(lineString);
+			nextToken = getNextCloserOrComma(tokenizer);
+		} 
+		// LineString[] array = new LineString[lineStrings.size()];
+		return mcu; // geometryFactory.createMultiLineString((LineString[]) lineStrings.toArray(array));
+	}
+
+	/**
+	 *  Creates a <code>MultiPolygon</code> using the next token in the stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;MultiPolygon Text&gt;.
+	 *@return                  a <code>MultiPolygon</code> specified by the next
+	 *      token in the stream, or if if the coordinates used to create the
+	 *      <code>Polygon</code> shells and holes do not form closed linestrings.
+	 *@throws  IOException     if an I/O error occurs
+	 *@throws  ParseException  if an unexpected token was encountered
+	 * @throws CreateGeometryException 
+	 */
+	// TODO:
+	private Geometry readMultiPolygonText(StreamTokenizer tokenizer) throws IOException, ParseException, CreateGeometryException {
+		String nextToken = getNextEmptyOrOpener(tokenizer);
+		if (nextToken.equals("EMPTY")) {
+			return null;
+		}
+		
+		MultiSurface msu = manager.createMultiSurface(SUBTYPES.GEOM2D);
+		Surface polygon = readPolygonText(tokenizer);
+		msu.addSurface(polygon);
+		
+		nextToken = getNextCloserOrComma(tokenizer);
+		while (nextToken.equals(",")) {
+			polygon = readPolygonText(tokenizer);
+			msu.addSurface(polygon);
+			nextToken = getNextCloserOrComma(tokenizer);
+		}
+		// Polygon[] array = new Polygon[polygons.size()];
+		return msu; //geometryFactory.createMultiPolygon((Polygon[]) polygons.toArray(array));
+	} 
+
+	/**
+	 *  Creates a <code>GeometryCollection</code> using the next token in the
+	 *  stream.
+	 *
+	 *@param  tokenizer        tokenizer over a stream of text in Well-known Text
+	 *      format. The next tokens must form a &lt;GeometryCollection Text&gt;.
+	 *@return                  a <code>GeometryCollection</code> specified by the
+	 *      next token in the stream
+	 *@throws  ParseException  if the coordinates used to create a <code>Polygon</code>
+	 *      shell and holes do not form closed linestrings, or if an unexpected
+	 *      token was encountered
+	 *@throws  IOException     if an I/O error occurs
+	 */
+	// TODO:
+	/* private GeometryCollection readGeometryCollectionText(StreamTokenizer tokenizer) throws IOException, ParseException {
+    String nextToken = getNextEmptyOrOpener(tokenizer);
+    if (nextToken.equals("EMPTY")) {
+      return geometryFactory.createGeometryCollection(new Geometry[]{});
+    }
+    ArrayList geometries = new ArrayList();
+    Geometry geometry = readGeometryTaggedText(tokenizer);
+    geometries.add(geometry);
+    nextToken = getNextCloserOrComma(tokenizer);
+    while (nextToken.equals(",")) {
+      geometry = readGeometryTaggedText(tokenizer);
+      geometries.add(geometry);
+      nextToken = getNextCloserOrComma(tokenizer);
+    }
+    Geometry[] array = new Geometry[geometries.size()];
+    return geometryFactory.createGeometryCollection((Geometry[]) geometries.toArray(array));
+  } */
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/WKTParser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKT.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKT.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKT.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.fromwkt;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+import com.vividsolutions.jts.io.ParseException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class FromWKT extends GeometryOperation {
+    public static final String NAME = GeometryManager.OPERATIONS.FROMWKT;
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);	
+	
+	private static WKTParser parser = new WKTParser();
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+	 */
+	public int getOperationIndex() {
+        return CODE;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+			throws GeometryOperationException {
+		try {
+			return parser.read( (String) ctx.getAttribute(FromWKTGeometryOperationContext.TEXT));
+		} catch (ParseException e) {
+			throw new GeometryOperationException(geom.getType(),CODE,e);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKT.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/distance/PointDistance.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/distance/PointDistance.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/distance/PointDistance.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.distance;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class PointDistance extends GeometryOperation{
+    public static final String NAME = "distance";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+	 */
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+			throws GeometryOperationException {
+		Geometry geom2 = (Geometry)ctx.getAttribute("geom");
+		GeometryType geomType2 = geom2.getGeometryType();
+		
+		if ((TYPES.POINT != geom.getType()) && TYPES.POINT != geomType2.getType()){
+			throw new UnsupportedOperationException("The distance only can be execudet between two points");
+		}
+		
+		return new Double(Point2D.distance(((Point)geom).getX(),
+				((Point)geom).getY(),
+				((Point)geom2).getX(),
+				((Point)geom2).getX()));
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/distance/PointDistance.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/flip/Flip.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/flip/Flip.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/flip/Flip.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.flip;
+
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateList;
+import com.vividsolutions.jts.geom.CoordinateSequences;
+import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;
+
+/**
+ * This class converts the path into points, then flip it down. 
+ * 
+ * @author Carlos S�nchez Peri��n <a href = "mailto:csanchez@prodevelop.es"> e-mail </a>
+ */
+public class Flip extends GeometryOperation{
+    public static final String NAME = "flip";
+    private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+	
+	private GeneralPathX generalPathX = null;
+    
+	public int getOperationIndex() {
+		return CODE;
+	}
+	
+    public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+    	generalPathX = geom.getGeneralPath();
+		if(generalPathX == null){
+			//if there isn't path the operation hasn't sense.
+			return null;
+    	}
+		PathIterator theIterator = geom.getPathIterator(null, geomManager.getFlatness()); //polyLine.getPathIterator(null, flatness);
+    	double[] theData = new double[6];
+    	//Coordinate first = null;
+    	CoordinateList coordList = new CoordinateList();
+    	Coordinate c1;
+    	GeneralPathX newGp = new GeneralPathX();
+    	ArrayList listOfParts = new ArrayList();
+    	while (!theIterator.isDone()) {
+    		//while not done
+    		int type = theIterator.currentSegment(theData);
+    		switch (type)
+    		{
+    		case (byte) PathIterator.SEG_MOVETO:
+    			coordList = new CoordinateList();
+    			listOfParts.add(coordList);
+    			c1= new Coordinate(theData[0], theData[1]);
+    			coordList.add(c1, true);
+    			break;
+    	    case (byte) PathIterator.SEG_LINETO:
+    			c1= new Coordinate(theData[0], theData[1]);
+    			coordList.add(c1, true);
+    			break;
+    		case (byte) PathIterator.SEG_CLOSE:
+    			coordList.add(coordList.getCoordinate(0));
+    			break;
+    		}
+    		theIterator.next();
+    	}
+    		
+    	for (int i=listOfParts.size()-1; i>=0; i--)
+    	{
+    		coordList = (CoordinateList) listOfParts.get(i);
+    		Coordinate[] coords = coordList.toCoordinateArray();
+    		CoordinateArraySequence seq = new CoordinateArraySequence(coords);
+    		CoordinateSequences.reverse(seq);
+    		coords = seq.toCoordinateArray();
+    		newGp.moveTo(coords[0].x, coords[0].y);
+    		for (int j=1; j < coords.length; j++)
+    		{
+    			newGp.lineTo(coords[j].x, coords[j].y);
+    		}
+    	}
+    	generalPathX.reset();
+    	generalPathX.append(newGp.getPathIterator(null), false);	
+    	
+		return null;		
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/flip/Flip.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perimeter/Perimeter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perimeter/Perimeter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perimeter/Perimeter.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.perimeter;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class Perimeter extends GeometryOperation {
+    public static final String NAME = "perimeter";
+    public static final int CODE = GeometryLocator.getGeometryManager().
+        getGeometryOperationCode(NAME);
+    
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+        throws GeometryOperationException {
+        com.vividsolutions.jts.geom.Geometry jtsGeometry;
+        try {
+            jtsGeometry = (com.vividsolutions.jts.geom.Geometry)geom.invokeOperation("toJTS", null);
+        } catch (GeometryOperationNotSupportedException e) {
+           throw new GeometryOperationException(e);
+        }
+        return new Double(jtsGeometry.getLength());
+    }
+
+    public int getOperationIndex() {
+        return CODE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perimeter/Perimeter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVector.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.perpendicular;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * Returns an unit vector from two points.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class UnitVector extends GeometryOperation{
+    public static final String NAME = "unitvector";
+    private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+        throws GeometryOperationException {
+        Point point1 = (Point)geom;
+        Point point2 = (Point)ctx.getAttribute(PerpendicularOperationContext.SECOND_POINT);
+
+        Point2D paux = new Point2D.Double(point2.getX() - point1.getX(),
+            point2.getY() - point1.getY());
+
+        double v = Math.sqrt(Math.pow(paux.getX(), 2d) +
+            Math.pow(paux.getY(), 2d));
+
+        paux = new Point2D.Double(paux.getX() / v, paux.getY() / v);
+
+        try{
+            return  geomManager.createPoint(paux.getX() / v, paux.getY() / v, SUBTYPES.GEOM2D);
+        } catch (CreateGeometryException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    public int getOperationIndex() {      
+        return CODE;
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularOperationContext.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.perpendicular;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class PerpendicularOperationContext extends GeometryOperationContext {
+    public static final String SECOND_POINT = "secondPoint";
+    public static final String PERPENDICULAR_POINT = "perpendicularPoint";
+
+    public PerpendicularOperationContext(Point secondPoint, Point perpendicularPoint) {
+        this.setSecondPoint(secondPoint);
+        this.setPerpendicularPoint(perpendicularPoint);      
+    }    
+    
+    public void setSecondPoint(Point secondPoint) {
+        this.setAttribute(SECOND_POINT, secondPoint);
+    }
+
+    public Point getSecondPoint() {
+        return (Point) this.getAttribute(SECOND_POINT);
+    }
+    
+    public void setPerpendicularPoint(Point perpendicularPoint) {
+        this.setAttribute(PERPENDICULAR_POINT, perpendicularPoint);
+    }
+
+    public Point getPerpendicularPoint() {
+        return (Point) this.getAttribute(PERPENDICULAR_POINT);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPoint.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.perpendicular;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * Gets a point that is located to a concrete distance (attribute distance)
+ * of a line and is located in a perpendicular line that intersects with other 
+ * point (attribute perpendicularPoint).
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class PerpendicularPoint extends GeometryOperation{
+    public static final String NAME = "perpendicularPoint";
+    private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+   
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+        throws GeometryOperationException {
+      
+        Point perpendicularPoint = (Point)ctx.getAttribute(PerpendicularPointOperationContext.PERPENDICULAR_POINT); 
+        double dist =
+            ((Double) ctx
+                .getAttribute(PerpendicularPointOperationContext.DISTANCE))
+                .doubleValue();
+        
+        try {
+            Point[] p = (Point[])geom.invokeOperation(Perpendicular.CODE, ctx);
+            Point unit = (Point)geom.invokeOperation(UnitVector.CODE, ctx);
+            return  geomManager.createPoint(perpendicularPoint.getX() + (unit.getX() * dist),
+                perpendicularPoint.getY() + (unit.getY() * dist), SUBTYPES.GEOM2D);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        } catch (CreateGeometryException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+   
+    public int getOperationIndex() {      
+        return CODE;
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVectorOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVectorOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVectorOperationContext.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.perpendicular;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class UnitVectorOperationContext  extends GeometryOperationContext {
+    public static final String SECOND_POINT = "secondPoint";
+   
+    public UnitVectorOperationContext(Point secondPoint) {
+        this.setSecondPoint(secondPoint);       
+    }    
+    
+    public void setSecondPoint(Point secondPoint) {
+        this.setAttribute(SECOND_POINT, secondPoint);
+    }
+
+    public Point getSecondPoint() {
+        return (Point) this.getAttribute(SECOND_POINT);
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVectorOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/Perpendicular.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/Perpendicular.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/Perpendicular.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.perpendicular;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * Gets a couple of points that defines a line that is perpendicular to other line
+ * and intersects with a point.
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class Perpendicular extends GeometryOperation{
+    public static final String NAME = "perpendicular";
+    private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+   
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+        throws GeometryOperationException {
+        Point point1 = (Point)geom;
+        Point point2 = (Point)ctx.getAttribute(PerpendicularOperationContext.SECOND_POINT);
+        Point perpendicularPoint = (Point)ctx.getAttribute(PerpendicularOperationContext.PERPENDICULAR_POINT);        
+        
+        if ((point2.getY() - point1.getY()) == 0) {
+            try {
+                return new Point[] {
+                    geomManager.createPoint(perpendicularPoint.getX(), 0, SUBTYPES.GEOM2D),
+                    geomManager.createPoint(perpendicularPoint.getX(), 1, SUBTYPES.GEOM2D)
+                };
+            } catch (CreateGeometryException e) {
+                throw new GeometryOperationException(e);
+            }
+        }
+
+        //Pendiente de la recta perpendicular
+        double m = (point1.getX() - point2.getX()) / (point2.getY() - point1.getY());
+
+        //b de la funcion de la recta perpendicular
+        double b = perpendicularPoint.getY() - (m * perpendicularPoint.getX());
+
+        //Obtenemos un par de puntos
+        try {
+            return new Point[] {
+                geomManager.createPoint(0, (m * 0) + b, SUBTYPES.GEOM2D),
+                geomManager.createPoint(1000, (m * 1000) + b, SUBTYPES.GEOM2D)
+            };
+        } catch (CreateGeometryException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+   
+    public int getOperationIndex() {      
+        return CODE;
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/Perpendicular.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPointOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPointOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPointOperationContext.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.perpendicular;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class PerpendicularPointOperationContext extends GeometryOperationContext {
+    public static final String SECOND_POINT = "secondPoint";
+    public static final String PERPENDICULAR_POINT = "perpendicularPoint";
+    public static final String DISTANCE = "distance";
+
+    public PerpendicularPointOperationContext(Point secondPoint, Point perpendicularPoint, double distance) {
+        this.setSecondPoint(secondPoint);
+        this.setPerpendicularPoint(perpendicularPoint);
+        this.setDistance(distance);
+    }    
+    
+    public void setSecondPoint(Point secondPoint) {
+        this.setAttribute(SECOND_POINT, secondPoint);
+    }
+
+    public Point getSecondPoint() {
+        return (Point) this.getAttribute(SECOND_POINT);
+    }
+    
+    public void setPerpendicularPoint(Point perpendicularPoint) {
+        this.setAttribute(PERPENDICULAR_POINT, perpendicularPoint);
+    }
+
+    public Point getPerpendicularPoint() {
+        return (Point) this.getAttribute(PERPENDICULAR_POINT);
+    }
+    
+    public double getDistance() {
+        return ((Double) this.getAttribute(DISTANCE)).doubleValue();
+    }
+
+    public void setDistance(double distance) {
+        this.setAttribute(DISTANCE, new Double(distance));
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPointOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/utils/PointGetAngle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/utils/PointGetAngle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/utils/PointGetAngle.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.operation.utils;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.distance.PointDistance;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class PointGetAngle extends GeometryOperation{
+    public static final String NAME = "getAngle";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);	
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+	 */
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+	throws GeometryOperationException {
+
+		Geometry geom2 = (Geometry)ctx.getAttribute("geom");
+		GeometryType geomType2 = geom2.getGeometryType();
+
+		if ((TYPES.POINT != geom.getType()) && TYPES.POINT != geomType2.getType()){
+			throw new UnsupportedOperationException("The distance only can be execudet between two points");
+		}
+
+		Point start = (Point)geom;
+		Point end = (Point)geom;
+
+		double distance;
+		try {
+			distance = ((Double)GeometryLocator.getGeometryManager().invokeOperation(PointDistance.CODE, geom, ctx)).doubleValue();
+		} catch (LocatorException e) {
+			throw new GeometryOperationException(e);
+		} catch (GeometryOperationNotSupportedException e) {
+			throw new GeometryOperationException(e);
+		}
+		
+		double angle = Math.acos((end.getX() - start.getX()) / distance);
+		
+		if (start.getY() > end.getY()) {
+			angle = -angle;
+		}
+
+		if (angle < 0) {
+			angle += (2 * Math.PI);
+		}
+
+		return new Double(angle);
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/utils/PointGetAngle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/impl/DefaultGeometryOperationLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/impl/DefaultGeometryOperationLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/impl/DefaultGeometryOperationLibrary.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.impl;
+
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLibrary;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.area.Area;
+import org.gvsig.fmap.geom.operation.distance.PointDistance;
+import org.gvsig.fmap.geom.operation.ensureOrientation.EnsureOrientation;
+import org.gvsig.fmap.geom.operation.flip.Flip;
+import org.gvsig.fmap.geom.operation.fromjts.FromJTS;
+import org.gvsig.fmap.geom.operation.fromwkb.FromWKB;
+import org.gvsig.fmap.geom.operation.fromwkt.FromWKT;
+import org.gvsig.fmap.geom.operation.isCCW.IsCCW;
+import org.gvsig.fmap.geom.operation.perimeter.Perimeter;
+import org.gvsig.fmap.geom.operation.perpendicular.Perpendicular;
+import org.gvsig.fmap.geom.operation.perpendicular.PerpendicularPoint;
+import org.gvsig.fmap.geom.operation.perpendicular.UnitVector;
+import org.gvsig.fmap.geom.operation.relationship.Contains;
+import org.gvsig.fmap.geom.operation.relationship.Crosses;
+import org.gvsig.fmap.geom.operation.relationship.Disjoint;
+import org.gvsig.fmap.geom.operation.relationship.Equals;
+import org.gvsig.fmap.geom.operation.relationship.Intersects;
+import org.gvsig.fmap.geom.operation.relationship.Out;
+import org.gvsig.fmap.geom.operation.relationship.Overlaps;
+import org.gvsig.fmap.geom.operation.relationship.Touches;
+import org.gvsig.fmap.geom.operation.relationship.Within;
+import org.gvsig.fmap.geom.operation.tojts.BaseMultiPrimitiveToJTS;
+import org.gvsig.fmap.geom.operation.tojts.Curve2DToJTS;
+import org.gvsig.fmap.geom.operation.tojts.MultiCurveToJTS;
+import org.gvsig.fmap.geom.operation.tojts.MultiPointToJTS;
+import org.gvsig.fmap.geom.operation.tojts.MultiSurfaceToJTS;
+import org.gvsig.fmap.geom.operation.tojts.Point2DToJTS;
+import org.gvsig.fmap.geom.operation.tojts.Surface2DToJTS;
+import org.gvsig.fmap.geom.operation.tojts.Surface2DToJTSLineString;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.operation.towkb.ToWKB;
+import org.gvsig.fmap.geom.operation.towkb.ToWKBNative;
+import org.gvsig.fmap.geom.operation.towkt.ToWKT;
+import org.gvsig.fmap.geom.operation.utils.PointGetAngle;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultGeometryOperationLibrary extends AbstractLibrary  {
+
+    public void doRegistration() {
+        registerAsServiceOf(GeometryLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+
+        // Validate there is any implementation registered.
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        geometryManager.registerGeometryOperation(Contains.NAME, new Contains());
+        geometryManager.registerGeometryOperation(Crosses.NAME, new Crosses());
+        geometryManager.registerGeometryOperation(Disjoint.NAME, new Disjoint());
+        geometryManager.registerGeometryOperation(Equals.NAME, new Equals());
+        geometryManager.registerGeometryOperation(Intersects.NAME, new Intersects());
+        geometryManager.registerGeometryOperation(Overlaps.NAME, new Overlaps());
+        geometryManager.registerGeometryOperation(Touches.NAME, new Touches());
+        geometryManager.registerGeometryOperation(Within.NAME, new Within());
+        geometryManager.registerGeometryOperation(IsCCW.NAME, new IsCCW());
+        geometryManager.registerGeometryOperation(FromWKT.NAME, new FromWKT());
+        geometryManager.registerGeometryOperation(FromWKB.NAME, new FromWKB());
+        geometryManager.registerGeometryOperation(Flip.NAME, new Flip());	
+        geometryManager.registerGeometryOperation(EnsureOrientation.NAME,  new EnsureOrientation());		
+        geometryManager.registerGeometryOperation(ToWKB.NAME,  new ToWKB());
+        geometryManager.registerGeometryOperation(ToWKBNative.NAME,  new ToWKBNative());
+        geometryManager.registerGeometryOperation(ToWKT.NAME, new ToWKT());
+        geometryManager.registerGeometryOperation(PointDistance.NAME,  new PointDistance(), TYPES.POINT);
+        geometryManager.registerGeometryOperation(FromJTS.NAME, new FromJTS());
+        geometryManager.registerGeometryOperation(PointGetAngle.NAME, new PointGetAngle());
+        geometryManager.registerGeometryOperation(Out.NAME, new Out());
+        geometryManager.registerGeometryOperation(Area.NAME, new Area());
+        geometryManager.registerGeometryOperation(Perimeter.NAME, new Perimeter());
+        geometryManager.registerGeometryOperation(Perpendicular.NAME,  new Perpendicular(), TYPES.POINT);
+        geometryManager.registerGeometryOperation(PerpendicularPoint.NAME,  new PerpendicularPoint(), TYPES.POINT);
+        geometryManager.registerGeometryOperation(UnitVector.NAME,  new UnitVector(), TYPES.POINT);
+        
+        
+        //To JTS
+        geometryManager.registerGeometryOperation(ToJTS.NAME, new Point2DToJTS(), TYPES.POINT);
+        geometryManager.registerGeometryOperationBySuperType(ToJTS.NAME, new Curve2DToJTS(), TYPES.CURVE);
+        geometryManager.registerGeometryOperationBySuperType(ToJTS.NAME, new Surface2DToJTS(), TYPES.SURFACE);
+        geometryManager.registerGeometryOperation(ToJTS.NAME, new MultiPointToJTS(), TYPES.MULTIPOINT);
+        geometryManager.registerGeometryOperation(ToJTS.NAME, new MultiCurveToJTS(), TYPES.MULTICURVE);
+        geometryManager.registerGeometryOperation(ToJTS.NAME, new MultiSurfaceToJTS(), TYPES.MULTISURFACE);
+        geometryManager.registerGeometryOperation(ToJTS.NAME, new BaseMultiPrimitiveToJTS(), TYPES.AGGREGATE);
+        geometryManager.registerGeometryOperation(Surface2DToJTSLineString.NAME, new Surface2DToJTSLineString(), TYPES.SURFACE);
+        geometryManager.registerGeometryOperation(Surface2DToJTSLineString.NAME, new Surface2DToJTSLineString(), TYPES.MULTISURFACE);
+    }	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/impl/DefaultGeometryOperationLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Crosses.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Crosses.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Crosses.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class Crosses extends GeometryOperation {
+	public static final String NAME = "crosses";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+		getGeometryOperationCode(NAME);
+
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+	 */
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+	 *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+	throws GeometryOperationException {
+
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+		if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry){
+			return new Boolean(false);
+		}
+		// TODO optimizar esto para los rectangulos (envelope)
+		com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+		com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+		try {
+			jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+			.invokeOperation(ToJTS.CODE, null);
+		} catch (GeometryOperationNotSupportedException e) {
+			throw new GeometryOperationException(geom.getType(), CODE, e);
+		}
+		try {
+
+			otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+			.invokeOperation(ToJTS.CODE, null);
+		} catch (GeometryOperationNotSupportedException e) {
+			throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+		}
+		if (jtsGeom!=null && otherJtsGeom!=null)
+			return new Boolean(jtsGeom.crosses(otherJtsGeom));
+		return new Boolean(false);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Crosses.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Within.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Within.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Within.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class Within extends GeometryOperation {
+    public static final String NAME = "within";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+     *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+        if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry ){
+            return new Boolean(false);
+        }
+        // TODO optimizar esto para los rectangulos (envelope)
+        com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+        com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+        try {
+            jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(geom.getType(), CODE, e);
+        }
+        try {
+
+            otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+        }
+        if (jtsGeom!=null && otherJtsGeom!=null)
+            return new Boolean(jtsGeom.within(otherJtsGeom));
+        return new Boolean(false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Within.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Disjoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Disjoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Disjoint.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class Disjoint extends GeometryOperation {
+    public static final String NAME = "disjoint";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+     *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+        if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry ){
+            return new Boolean(false);
+        }
+        // TODO optimizar esto para los rectangulos (envelope)
+        com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+        com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+        try {
+            jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(geom.getType(), CODE, e);
+        }
+        try {
+
+            otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+        }
+        if (jtsGeom!=null && otherJtsGeom!=null)
+            return new Boolean(jtsGeom.disjoint(otherJtsGeom));
+        return new Boolean(false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Disjoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Intersects.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Intersects.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Intersects.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class Intersects extends GeometryOperation {
+    public static final String NAME = "intersects";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+     *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+        if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry || !otherGeom.getEnvelope().intersects(geom.getEnvelope())){
+            return new Boolean(false);
+        }
+        // TODO optimizar esto para los rectangulos (envelope)
+        com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+        com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+        try {
+            jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(geom.getType(), CODE, e);
+        }
+        try {
+
+            otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+        }
+        if (jtsGeom!=null && otherJtsGeom!=null)
+            return new Boolean(jtsGeom.intersects(otherJtsGeom));
+        return new Boolean(false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Intersects.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Out.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Out.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Out.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class Out extends GeometryOperation {
+    public static final String NAME = "out";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+	
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+     *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+//        if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry || otherGeom.getEnvelope().intersects(geom.getEnvelope())){
+//            return new Boolean(false);
+//        }
+        // TODO optimizar esto para los rectangulos (envelope)
+        com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+        com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+        try {
+            jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(geom.getType(), CODE, e);
+        }
+        try {
+
+            otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+        }
+        if (jtsGeom!=null && otherJtsGeom!=null)
+            return new Boolean(!jtsGeom.contains(otherJtsGeom) && !jtsGeom.intersects(otherJtsGeom));
+        return new Boolean(false);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Out.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/DefaultRelationshipGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/DefaultRelationshipGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/DefaultRelationshipGeometryOperationContext.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class DefaultRelationshipGeometryOperationContext extends
+		GeometryOperationContext {
+	
+	private static String GEOM = "geom";
+
+	public DefaultRelationshipGeometryOperationContext(){
+	}		
+
+	public DefaultRelationshipGeometryOperationContext(Geometry geom){
+		this.setAttribute(GEOM, geom);
+	}
+
+	protected Geometry getGeom() {
+		return ((Geometry)this.getAttribute(GEOM));
+	}
+
+	protected void setGeom(Geometry geom) {
+		this.setAttribute(GEOM, geom);
+	}		
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/DefaultRelationshipGeometryOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Equals.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Equals.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Equals.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class Equals extends GeometryOperation {
+    public static final String NAME = "equals";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+     *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+        if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry ){
+            return new Boolean(false);
+        }
+        // TODO optimizar esto para los rectangulos (envelope)
+        com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+        com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+        try {
+            jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(geom.getType(), CODE, e);
+        }
+        try {
+
+            otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+        }
+        if (jtsGeom!=null && otherJtsGeom!=null)
+            return new Boolean(jtsGeom.equals(otherJtsGeom));
+        return new Boolean(false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Equals.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Touches.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Touches.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Touches.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class Touches extends GeometryOperation {
+    public static final String NAME = "touches";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+     *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+        if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry ){
+            return new Boolean(false);
+        }
+        // TODO optimizar esto para los rectangulos (envelope)
+        com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+        com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+        try {
+            jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(geom.getType(), CODE, e);
+        }
+        try {
+
+            otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+        }
+        if (jtsGeom!=null && otherJtsGeom!=null)
+            return new Boolean(jtsGeom.touches(otherJtsGeom));
+        return new Boolean(false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Touches.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Overlaps.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Overlaps.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Overlaps.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+
+/**
+ * @author jmvivo
+ * 
+ */
+public class Overlaps extends GeometryOperation {
+    public static final String NAME = "overlaps";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+	 */
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+	 *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+			throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+		// TODO optimizar esto para los rectangulos (envelope)
+		com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+		com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+		try {
+			jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+					.invokeOperation(ToJTS.CODE, null);
+		} catch (GeometryOperationNotSupportedException e) {
+			throw new GeometryOperationException(geom.getType(), CODE, e);
+		}
+		try {
+
+			otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+					.invokeOperation(ToJTS.CODE, null);
+		} catch (GeometryOperationNotSupportedException e) {
+			throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+		}
+
+		
+		return new Boolean(jtsGeom.overlaps(otherJtsGeom));
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Overlaps.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Contains.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Contains.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Contains.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.relationship;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.generalpath.primitive.DefaultNullGeometry;
+
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class Contains extends GeometryOperation {
+    public static final String NAME = "contains";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+     
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry,
+     *      org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        Geometry otherGeom = (Geometry) ctx.getAttribute("geom");
+        if (otherGeom instanceof DefaultNullGeometry || geom instanceof DefaultNullGeometry || !otherGeom.getEnvelope().intersects(geom.getEnvelope())){
+            return new Boolean(false);
+        }
+        // TODO optimizar esto para los rectangulos (envelope)
+        com.vividsolutions.jts.geom.Geometry jtsGeom = null;
+        com.vividsolutions.jts.geom.Geometry otherJtsGeom = null;
+        try {
+            jtsGeom = (com.vividsolutions.jts.geom.Geometry) geom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(geom.getType(), CODE, e);
+        }
+        try {
+
+            otherJtsGeom = (com.vividsolutions.jts.geom.Geometry) otherGeom
+                    .invokeOperation(ToJTS.CODE, null);
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(otherGeom.getType(), CODE, e);
+        }
+        if (jtsGeom!=null && otherJtsGeom!=null)
+            return new Boolean(jtsGeom.contains(otherJtsGeom));
+        return new Boolean(false);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/relationship/Contains.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiCurveToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiCurveToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiCurveToJTS.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.tojts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MultiCurveToJTS extends ToJTS{
+    
+    private static Logger logger = LoggerFactory.getLogger(MultiCurveToJTS.class);
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		MultiCurve multiCurve = (MultiCurve)geom;
+		Object item = null;
+		List ls_list = new ArrayList();
+
+		int prim_n = multiCurve.getPrimitivesNumber();
+		
+        for (int i = 0; i < prim_n; i++){
+        	try {
+        	    item = multiCurve.getPrimitiveAt(i).invokeOperation(CODE, ctx);
+        	    
+        	    if (item instanceof MultiLineString) {
+        	        
+                    /*
+                     * A multilinestring can also be returned
+                     */
+        	        MultiLineString mls = (MultiLineString) item;
+        	        for (int k = 0; k<mls.getNumGeometries(); k++) {
+        	            com.vividsolutions.jts.geom.Geometry p = mls.getGeometryN(k);
+        	            if (p instanceof LineString) {
+        	                ls_list.add(p);
+        	            } 
+        	        }
+        	        
+        	    } else {
+                    if (item instanceof LineString) {
+                        /*
+                         * Including primitives converted to linestring.
+                         * Short primitives can return a point
+                         */
+                        ls_list.add(item);
+                    } else {
+                        String txt = (item == null) ? "NULL" : item.getClass().getName();
+                        logger.info("Warning: excluding primitive in MultiCurveToJTS because it converted to a JTS " + txt);
+                    }
+        	    }
+        	    
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new GeometryOperationException(e);
+			}
+        }
+
+        LineString[] lines = (LineString[]) ls_list.toArray(new LineString[0]);
+
+        MultiLineString lineString = new com.vividsolutions.jts.geom.GeometryFactory().createMultiLineString(lines);
+        lineString.setSRID(srid);
+        return lineString;
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiCurveToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Point2DToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Point2DToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Point2DToJTS.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.operation.tojts;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.primitive.Point;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Point2DToJTS extends ToJTS{
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		Point p = (Point) geom;
+		Coordinate coord = new Coordinate(p.getX(), p.getY());
+		com.vividsolutions.jts.geom.Geometry geoJTS = geomFactory.createPoint(coord);
+		geoJTS.setSRID(srid);
+		return geoJTS;
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Point2DToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/ToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/ToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/ToJTS.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.tojts;
+
+import java.lang.reflect.Array;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.generalpath.util.Converter;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+public abstract class ToJTS extends GeometryOperation {
+    public static final String NAME = "toJTS";
+	protected static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);	
+	protected final static com.vividsolutions.jts.geom.GeometryFactory geomFactory = new com.vividsolutions.jts.geom.GeometryFactory();
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	protected boolean isClosed(Coordinate firstCoordinate, Coordinate lastCoordinate){
+		double diff = Math.abs(lastCoordinate.x - firstCoordinate.x);
+		if (diff > 0.000001){
+			return false;
+		}
+		diff = Math.abs(lastCoordinate.y - firstCoordinate.y);
+		if (diff > 0.000001) {
+			return false;
+		}
+		return true;
+	}
+	
+	protected boolean pointInList(Coordinate testPoint, Coordinate[] pointList) {
+		int t;
+		int numpoints;
+		Coordinate p;
+
+		numpoints = Array.getLength(pointList);
+
+		for (t = 0; t < numpoints; t++) {
+			p = pointList[t];
+
+			if ((testPoint.x == p.x) && (testPoint.y == p.y) &&
+					((testPoint.z == p.z) || (!(testPoint.z == testPoint.z))) //nan test; x!=x iff x is nan
+			) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/ToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiSurfaceToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiSurfaceToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiSurfaceToJTS.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.tojts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.MultiPolygon;
+import com.vividsolutions.jts.geom.Polygon;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MultiSurfaceToJTS  extends ToJTS{
+    
+    private static Logger logger = LoggerFactory.getLogger(MultiSurfaceToJTS.class);
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		MultiSurface multiSurface = (MultiSurface)geom;
+		
+		List prim_list = new ArrayList();
+		int prim_n = multiSurface.getPrimitivesNumber();
+		Object item = null;
+
+        for (int i = 0; i < prim_n; i++){
+        	try {
+        	    item = multiSurface.getPrimitiveAt(i).invokeOperation(CODE, ctx);
+        	    if (item instanceof MultiPolygon) {
+        	        
+        	        /*
+        	         * Considering also multi polygons
+        	         */
+        	        MultiPolygon mpo = (MultiPolygon) item;
+        	        for (int k=0; k<mpo.getNumGeometries(); k++) {
+        	            if (mpo.getGeometryN(k) instanceof Polygon) {
+        	                prim_list.add(mpo.getGeometryN(k));
+        	            }
+        	        }
+        	        
+        	    } else {
+                    if (item instanceof Polygon) {
+                        /*
+                         * Including primitives converted to polygon.
+                         * Short primitives can return a point or line
+                         */
+                        prim_list.add(item);
+                    } else {
+                        String txt = (item == null) ? "NULL" : item.getClass().getName();
+                        logger.info("Warning: excluding primitive in MultiSurfaceToJTS because it converted to a JTS " + txt);
+                    }
+        	    }
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new GeometryOperationException(e);
+			}
+        }       
+        
+        Polygon[] polygons = (Polygon[]) prim_list.toArray(new Polygon[0]);
+        MultiPolygon polygon = new com.vividsolutions.jts.geom.GeometryFactory().createMultiPolygon(polygons);
+	    polygon.setSRID(srid);
+        return polygon;
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiSurfaceToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiPointToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiPointToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiPointToJTS.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.tojts;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MultiPointToJTS extends ToJTS{
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		MultiPoint multiPoint = (MultiPoint)geom;
+		int numPoints = multiPoint.getPrimitivesNumber();
+        Coordinate[] coordinates = new Coordinate[numPoints];
+        
+        for(int i=0; i<numPoints; i++){
+            Point point = multiPoint.getPointAt(i);
+            coordinates[i] = new Coordinate(point.getX(), point.getY());
+        }
+        com.vividsolutions.jts.geom.Geometry gtMultiPoint = geomFactory.createMultiPoint(coordinates);
+        gtMultiPoint.setSRID(srid);
+
+        return gtMultiPoint;		
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/MultiPointToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Curve2DToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Curve2DToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Curve2DToJTS.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.tojts;
+
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.Point;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Curve2DToJTS extends ToJTS{
+    
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		ArrayList arrayLines = new ArrayList();
+		PathIterator theIterator = geom.getPathIterator(null, geomManager.getFlatness());
+		int theType;
+		double[] theData = new double[6];
+		ArrayList arrayCoords = null;
+		LineString lin;
+		int numParts = 0;
+		Coordinate coord;
+		
+		while (!theIterator.isDone()) {
+			//while not done
+			theType = theIterator.currentSegment(theData);
+
+			//Populate a segment of the new
+			// GeneralPathX object.
+			//Process the current segment to populate a new
+			// segment of the new GeneralPathX object.
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+
+				// System.out.println("SEG_MOVETO");
+				if (arrayCoords == null) {
+					arrayCoords = new ArrayList();
+				} else {
+					lin = geomFactory.createLineString(CoordinateArrays.toCoordinateArray(
+							arrayCoords));
+					lin.setSRID(srid);
+					arrayLines.add(lin);
+					arrayCoords = new ArrayList();
+				}
+
+				numParts++;
+				coord = new Coordinate(theData[0], theData[1]);
+
+				arrayCoords.add(coord);
+
+				break;
+
+			case PathIterator.SEG_LINETO:
+
+				// System.out.println("SEG_LINETO");
+				arrayCoords.add(new Coordinate(theData[0],
+						theData[1]));
+
+				break;
+
+			case PathIterator.SEG_QUADTO:
+				System.out.println("Not supported here");
+
+				break;
+
+			case PathIterator.SEG_CUBICTO:
+				System.out.println("Not supported here");
+
+				break;
+
+			case PathIterator.SEG_CLOSE:
+				// A�adimos el primer punto para cerrar.
+				Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+					// Solo anyadimos cuando no esta ya cerrado
+				arrayCoords.add(new Coordinate(firstCoord.x,
+						firstCoord.y));
+
+				break;
+			} //end switch
+
+			theIterator.next();
+		} //end while loop
+
+		if (arrayCoords.size()<2) {
+			throw new GeometryOperationException(geom.getType(), geom.getGeometryType().getSubType());
+		}
+		lin = geomFactory.createLineString(CoordinateArrays.toCoordinateArray(
+				arrayCoords));
+
+		lin.setSRID(srid);
+		arrayLines.add(lin);
+		
+		LineString[] lineString = GeometryFactory.toLineStringArray(arrayLines);
+		
+		if (lineString.length == 1) {
+		    return lineString[0];
+		} else {
+	        MultiLineString resp = geomFactory.createMultiLineString(lineString);
+	        resp.setSRID(srid);
+	        return resp;
+		}
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Curve2DToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTSLineString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTSLineString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTSLineString.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.tojts;
+
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.MultiLineString;
+
+/**
+ * Converts a Surface2D into a MultiLineString object
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ */
+public class Surface2DToJTSLineString extends ToJTS {
+	public static final String NAME = "toJTSLineString";
+	public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		PathIterator theIterator = geom.getPathIterator(null, geomManager.getFlatness());
+		int theType;
+		double[] theData = new double[6];
+		ArrayList arrayCoords = null;
+		Coordinate[] points = null;
+		ArrayList listRings = new ArrayList();
+		theIterator = geom.getPathIterator(null, geomManager.getFlatness());
+
+		while (!theIterator.isDone()) {
+			theType = theIterator.currentSegment(theData);
+
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+				if (arrayCoords == null) {
+					arrayCoords = new ArrayList();
+				} else
+					arrayCoords.clear();
+				arrayCoords.add(new Coordinate(theData[0], theData[1]));
+				break;
+
+			case PathIterator.SEG_LINETO:
+				arrayCoords.add(new Coordinate(theData[0],theData[1]));
+				break;
+			case PathIterator.SEG_QUADTO:
+				System.out.println("SEG_QUADTO Not supported here");
+				break;
+			case PathIterator.SEG_CUBICTO:
+				System.out.println("SEG_CUBICTO Not supported here");
+				break;
+			case PathIterator.SEG_CLOSE:
+				break;
+			}
+			theIterator.next();
+		} 
+		
+		Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+		Coordinate lastCoord = (Coordinate) arrayCoords.get(arrayCoords.size() - 1);
+		if (!isClosed(firstCoord, lastCoord)) {
+			arrayCoords.add(firstCoord);
+		}
+		points = CoordinateArrays.toCoordinateArray(arrayCoords);
+		listRings.add(geomFactory.createLinearRing(points));
+		
+		LinearRing[] list = (LinearRing[])listRings.toArray(new LinearRing[listRings.size()]);
+		MultiLineString lineStr = new com.vividsolutions.jts.geom.GeometryFactory().createMultiLineString(list);
+		lineStr.setSRID(srid);
+		return lineStr;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTSLineString.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/BaseMultiPrimitiveToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/BaseMultiPrimitiveToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/BaseMultiPrimitiveToJTS.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.tojts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.MultiPolygon;
+import com.vividsolutions.jts.geom.Polygon;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.generalpath.aggregate.BaseMultiPrimitive;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class BaseMultiPrimitiveToJTS  extends ToJTS{
+    
+    private static Logger logger = LoggerFactory.getLogger(BaseMultiPrimitiveToJTS.class);
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		
+		BaseMultiPrimitive mp = (BaseMultiPrimitive) geom;
+		int prim_n = mp.getPrimitivesNumber();
+		
+        com.vividsolutions.jts.geom.Geometry item = null;
+        com.vividsolutions.jts.geom.Geometry acum = null;
+
+        for (int i = 0; i < prim_n; i++){
+        	try {
+        	    item = (com.vividsolutions.jts.geom.Geometry)
+        	        mp.getPrimitiveAt(i).invokeOperation(CODE, ctx);
+        	    item.setSRID(srid);
+        	    if (acum == null) {
+        	        acum = item;
+        	    } else {
+        	        acum = acum.union(item);
+        	    }
+
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new GeometryOperationException(e);
+			}
+        }
+        acum.setSRID(srid);
+        return acum;
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/BaseMultiPrimitiveToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/JTSGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/JTSGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/JTSGeometryOperationContext.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.tojts;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class JTSGeometryOperationContext extends GeometryOperationContext {
+	public static final String SRS = "srs";
+
+	public JTSGeometryOperationContext(int srid){
+		this.setAttribute(SRS, new Integer(srid));
+	}	
+	
+	/**
+	 * @return the srid
+	 */
+	public int getSrid() {
+		return ((Integer)(this.getAttribute(SRS))).intValue();
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/JTSGeometryOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTS.java	(revision 42196)
@@ -0,0 +1,323 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.tojts;
+
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.Polygon;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Surface2DToJTS extends ToJTS{
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.tojts.ToJTS#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		int srid = -1;
+		if (ctx != null){
+			srid = ((JTSGeometryOperationContext)ctx).getSrid();
+		}
+		ArrayList arrayLines = new ArrayList();
+		PathIterator theIterator = geom.getPathIterator(null, geomManager.getFlatness());
+		int theType;
+		double[] theData = new double[6];
+		ArrayList arrayCoords = null;
+		LineString lin;
+		int numParts = 0;
+		Coordinate coord;
+
+		ArrayList shells = new ArrayList();
+		ArrayList holes = new ArrayList();
+		Coordinate[] points = null;
+
+		while (!theIterator.isDone()) {
+			//while not done
+			theType = theIterator.currentSegment(theData);
+
+			//Populate a segment of the new
+			// GeneralPathX object.
+			//Process the current segment to populate a new
+			// segment of the new GeneralPathX object.
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+
+				// System.out.println("SEG_MOVETO");
+				if (arrayCoords == null) {
+					arrayCoords = new ArrayList();
+				} else {
+					points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+					try {
+						LinearRing ring = geomFactory.createLinearRing(points);
+
+						if (CGAlgorithms.isCCW(points)) {
+							holes.add(ring);
+						} else {
+							shells.add(ring);
+						}
+					} catch (Exception e) {
+						/* (jaume) caso cuando todos los puntos son iguales
+						 * devuelvo el propio punto
+						 */
+						boolean same = true;
+						for (int i = 0; i < points.length-1 && same; i++) {
+							if (points[i].x != points[i+1].x ||
+									points[i].y != points[i+1].y /*||
+									points[i].z != points[i+1].z*/
+							) {
+								same = false;
+							}
+						}
+						if (same) {
+							return geomFactory.createPoint(points[0]);
+						}
+						/*
+						 * caso cuando es una l�nea de 3 puntos, no creo un LinearRing, sino
+						 * una linea
+						 */
+						if (points.length>1 && points.length<=3) {
+							// return geomFactory.createLineString(points);
+							return geomFactory.createMultiLineString(new LineString[] {geomFactory.createLineString(points)});
+						}
+
+						System.err.println(
+						"Caught Topology exception in GMLLinearRingHandler");
+
+						return null;
+					}
+
+					/* if (numParts == 1)
+					 {
+					 linRingExt = new GeometryFactory().createLinearRing(
+					 CoordinateArrays.toCoordinateArray(arrayCoords));
+					 }
+					 else
+					 {
+					 linRing = new GeometryFactory().createLinearRing(
+					 CoordinateArrays.toCoordinateArray(arrayCoords));
+					 arrayLines.add(linRing);
+					 } */
+					arrayCoords = new ArrayList();
+				}
+
+				numParts++;
+				arrayCoords.add(new Coordinate(theData[0],
+						theData[1]));
+
+				break;
+
+			case PathIterator.SEG_LINETO:
+
+				// System.out.println("SEG_LINETO");
+				arrayCoords.add(new Coordinate(theData[0],
+						theData[1]));
+
+				break;
+
+			case PathIterator.SEG_QUADTO:
+				System.out.println("SEG_QUADTO Not supported here");
+
+				break;
+
+			case PathIterator.SEG_CUBICTO:
+				System.out.println("SEG_CUBICTO Not supported here");
+
+				break;
+
+			case PathIterator.SEG_CLOSE:
+
+				// A�adimos el primer punto para cerrar.
+				Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+				arrayCoords.add(new Coordinate(firstCoord.x,
+						firstCoord.y));
+
+				break;
+			} //end switch
+
+			// System.out.println("theData[0] = " + theData[0] + " theData[1]=" + theData[1]);
+			theIterator.next();
+		} //end while loop
+
+
+		Coordinate firstCoord = (Coordinate) arrayCoords.get(0);
+		Coordinate lastCoord = (Coordinate) arrayCoords.get(arrayCoords
+				.size() - 1);
+		if (!isClosed(firstCoord, lastCoord)) {
+			arrayCoords.add(firstCoord);
+		}
+		points = CoordinateArrays.toCoordinateArray(arrayCoords);
+
+		try {
+			LinearRing ring = geomFactory.createLinearRing(points);
+
+			if (CGAlgorithms.isCCW(points)) {
+				holes.add(ring);
+			} else {
+				shells.add(ring);
+			}
+			ring.setSRID(srid);
+		} catch (Exception e) {
+			/* (jaume) caso cuando todos los puntos son iguales
+			 * devuelvo el propio punto
+			 */
+			boolean same = true;
+			for (int i = 0; i < points.length-1 && same; i++) {
+				if (points[i].x != points[i+1].x ||
+						points[i].y != points[i+1].y /*||
+						points[i].z != points[i+1].z*/
+				) {
+					same = false;
+				}
+			}
+			if (same) {
+				com.vividsolutions.jts.geom.Geometry geoJTS = geomFactory.createPoint(points[0]);
+				geoJTS.setSRID(srid);
+				return geoJTS;
+			}
+			/*
+			 * caso cuando es una l�nea de 3 puntos, no creo un LinearRing, sino
+			 * una linea
+			 */
+			if (points.length>1 && points.length<=3) {
+				// return geomFactory.createLineString(points);
+				com.vividsolutions.jts.geom.Geometry geoJTS = geomFactory
+						.createMultiLineString(new LineString[] { geomFactory
+								.createLineString(points) });
+				geoJTS.setSRID(srid);
+				return geoJTS;
+			}
+			System.err.println(
+			"Caught Topology exception in GMLLinearRingHandler");
+
+			return null;
+		}
+
+		/* linRing = new GeometryFactory().createLinearRing(
+		 CoordinateArrays.toCoordinateArray(arrayCoords)); */
+
+		// System.out.println("NumParts = " + numParts);
+		//now we have a list of all shells and all holes
+		ArrayList holesForShells = new ArrayList(shells.size());
+
+		for (int i = 0; i < shells.size(); i++) {
+			holesForShells.add(new ArrayList());
+		}
+
+		//find homes
+		for (int i = 0; i < holes.size(); i++) {
+			LinearRing testRing = (LinearRing) holes.get(i);
+			LinearRing minShell = null;
+			Envelope minEnv = null;
+			Envelope testEnv = testRing.getEnvelopeInternal();
+			Coordinate testPt = testRing.getCoordinateN(0);
+			LinearRing tryRing = null;
+
+			for (int j = 0; j < shells.size(); j++) {
+				tryRing = (LinearRing) shells.get(j);
+
+				Envelope tryEnv = tryRing.getEnvelopeInternal();
+
+				if (minShell != null) {
+					minEnv = minShell.getEnvelopeInternal();
+				}
+
+				boolean isContained = false;
+				Coordinate[] coordList = tryRing.getCoordinates();
+
+				if (tryEnv.contains(testEnv) &&
+						(CGAlgorithms.isPointInRing(testPt, coordList) ||
+								(pointInList(testPt, coordList)))) {
+					isContained = true;
+				}
+
+				// check if this new containing ring is smaller than the current minimum ring
+				if (isContained) {
+					if ((minShell == null) || minEnv.contains(tryEnv)) {
+						minShell = tryRing;
+					}
+				}
+			}
+
+			if (minShell == null) {
+//				System.out.println(
+//				"polygon found with a hole thats not inside a shell");
+//				azabala: we do the assumption that this hole is really a shell (polygon)
+//				whose point werent digitized in the right order
+				Coordinate[] cs = testRing.getCoordinates();
+				Coordinate[] reversed = new Coordinate[cs.length];
+				int pointIndex = 0;
+				for(int z = cs.length-1; z >= 0; z--){
+					reversed[pointIndex] = cs[z];
+					pointIndex++;
+				}
+				LinearRing newRing = geomFactory.createLinearRing(reversed);
+				shells.add(newRing);
+				holesForShells.add(new ArrayList());
+			} else {
+				((ArrayList) holesForShells.get(shells.indexOf(minShell))).add(testRing);
+			}
+		}
+
+		Polygon[] polygons = new Polygon[shells.size()];
+
+		for (int i = 0; i < shells.size(); i++) {
+			polygons[i] = geomFactory.createPolygon((LinearRing) shells.get(
+					i),
+					(LinearRing[]) ((ArrayList) holesForShells.get(i)).toArray(
+							new LinearRing[0]));
+			polygons[i].setSRID(srid);
+		}
+	
+		holesForShells = null;
+		shells = null;
+		holes = null;
+
+		//com.vividsolutions.jts.geom.Geometry geoJTS = geomFactory.createMultiPolygon(polygons);
+		polygons[0].setSRID(srid);
+
+		com.vividsolutions.jts.geom.Geometry geoJTS;
+        if (polygons.length == 1) {
+            geoJTS = polygons[0];
+        } else {
+            // its a multi part
+            geoJTS = geomFactory.createMultiPolygon(polygons);
+        }
+        geoJTS.setSRID(srid);
+		return geoJTS;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/tojts/Surface2DToJTS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser2.java	(revision 42196)
@@ -0,0 +1,438 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.fromwkb;
+
+/*
+ * Based in
+ * PostGIS extension for PostgreSQL JDBC driver - Binary Parser
+ *
+ * (C) 2005 Markus Schaber, schabios@logi-track.com
+ */
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+import com.vividsolutions.jts.io.WKBConstants;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+
+/**
+ * Parse binary representation of geometries. Currently, only text rep (hexed)
+ * implementation is tested.
+ *
+ * It should be easy to add char[] and CharSequence ByteGetter instances,
+ * although the latter one is not compatible with older jdks.
+ *
+ * I did not implement real unsigned 32-bit integers or emulate them with long,
+ * as both java Arrays and Strings currently can have only 2^31-1 elements
+ * (bytes), so we cannot even get or build Geometries with more than approx.
+ * 2^28 coordinates (8 bytes each).
+ *
+ * @author markus.schaber@logi-track.com
+ *
+ */
+public class WKBParser2 {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WKBParser2.class);
+
+	private GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private boolean gHaveM, gHaveZ, gHaveS; // M, Z y SRID
+    private GeometryType[] pointGeometryTypes;
+
+    /**
+     * @throws GeometryTypeNotValidException
+     * @throws GeometryTypeNotSupportedException
+     * 
+     */
+    public WKBParser2() {
+        pointGeometryTypes =
+            new GeometryType[] {
+                loadPointGeometryType(Geometry.SUBTYPES.GEOM2D, "2D"),
+                loadPointGeometryType(Geometry.SUBTYPES.GEOM3D, "3D"),
+                loadPointGeometryType(Geometry.SUBTYPES.GEOM2DM, "2DM"),
+                loadPointGeometryType(Geometry.SUBTYPES.GEOM3DM, "3DM") };
+    }
+
+    private GeometryType loadPointGeometryType(int subtype, String subTypeName) {
+        try {
+            return geomManager.getGeometryType(Geometry.TYPES.POINT, subtype);
+        } catch (Exception e) {
+            LOG.warn("Unable to get a reference to the geometry "
+                + "type Point{}, to be cached", subTypeName);
+            return null;
+        }
+    }
+
+    /**
+     * Parse a binary encoded geometry.
+     * 
+     * Is synchronized to protect offset counter. (Unfortunately, Java does not
+     * have neither call by reference nor multiple return values.)
+     * 
+     * @throws CreateGeometryException
+     */
+    public synchronized Geometry parse(byte[] value) throws CreateGeometryException {
+        // BinaryByteGetter bytes = new ByteGetter.BinaryByteGetter(value);
+        ByteBuffer buf = ByteBuffer.wrap(value);
+        return parseGeometry(buf);
+    }
+
+    protected void parseTypeAndSRID(ByteBuffer data)
+    {
+        byte endian = data.get(); //skip and test endian flag
+        /* if (endian != data.endian) {
+            throw new IllegalArgumentException("Endian inconsistency!");
+        } */
+        int typeword = data.getInt();
+
+        int realtype = typeword & 0x1FFFFFFF; //cut off high flag bits
+
+        gHaveZ = (typeword & 0x80000000) != 0;
+        gHaveM = (typeword & 0x40000000) != 0;
+        gHaveS = (typeword & 0x20000000) != 0;
+
+        int srid = -1;
+
+        if (gHaveS) {
+            srid = data.getInt();
+        }
+
+    }
+
+
+    /** Parse a geometry starting at offset. 
+     * @throws CreateGeometryException */
+    protected Geometry parseGeometry(ByteBuffer data) throws CreateGeometryException {
+        byte endian = data.get(); //skip and test endian flag
+        if (endian == 1)
+        {
+        	data.order(ByteOrder.LITTLE_ENDIAN);
+        }
+        /* if (endian != data.endian) {
+            throw new IllegalArgumentException("Endian inconsistency!");
+        } */
+        int typeword = data.getInt();
+
+        int realtype = typeword & 0x1FFFFFFF; //cut off high flag bits
+
+        boolean haveZ = (typeword & 0x80000000) != 0;
+        boolean haveM = (typeword & 0x40000000) != 0;
+        boolean haveS = (typeword & 0x20000000) != 0;
+
+        int srid = -1;
+
+        if (haveS) {
+            srid = data.getInt();
+        }
+        Geometry result1;
+        switch (realtype) {
+        case WKBConstants.wkbPoint :
+        	result1 = parsePoint(data, haveZ, haveM);
+            break;
+        case WKBConstants.wkbLineString :
+            result1 = parseLineString(data, haveZ, haveM);
+            break;
+        case WKBConstants.wkbPolygon :
+            result1 = parsePolygon(data, haveZ, haveM);
+            break;
+        case WKBConstants.wkbMultiPoint:
+            result1 = parseMultiPoint(data);
+            break;
+        case WKBConstants.wkbMultiLineString:
+            result1 = parseMultiLineString(data);
+            break;
+        case WKBConstants.wkbMultiPolygon:
+            result1 = parseMultiPolygon(data);
+            break;
+        case WKBConstants.wkbGeometryCollection :
+            result1 = parseCollection(data);
+            break;
+        default :
+            throw new IllegalArgumentException("Unknown Geometry Type!");
+        }
+
+        /*Geometry result = result1;
+
+        if (haveS) {
+            result.setSrid(srid);
+        } */
+        return result1;
+    }
+
+    private Point parsePoint(ByteBuffer data, boolean haveZ, boolean haveM)
+        throws CreateGeometryException {
+        double x = data.getDouble();
+        double y = data.getDouble();
+        Point point;
+
+        int subtype = getSubType(haveZ, haveM);
+
+        // If we have a cached GeometryType use it, otherwise call the manager
+        if( pointGeometryTypes[subtype] == null ) {
+            point = (Point) geomManager.create(Geometry.TYPES.POINT, subtype);
+        } else {
+            point = (Point) pointGeometryTypes[subtype].create();
+        }
+        point.setX(x);
+        point.setY(y);
+
+        // Other dimensions
+        if (haveZ) {
+            point.setCoordinateAt(Geometry.DIMENSIONS.Z, data.getDouble());
+            if (haveM) {
+                point.setCoordinateAt(Geometry.DIMENSIONS.Z + 1,
+                    data.getDouble());
+            }
+        } else {
+            if (haveM) {
+                point.setCoordinateAt(Geometry.DIMENSIONS.Y + 1,
+                    data.getDouble());
+            }
+        }
+
+        return point;
+    }
+
+    /**
+     * @param haveZ
+     * @param haveM
+     * @return
+     */
+    private int getSubType(boolean haveZ, boolean haveM) {
+        int subtype =
+            haveZ ? (haveM ? Geometry.SUBTYPES.GEOM3DM
+                : Geometry.SUBTYPES.GEOM3D) : (haveM
+                ? Geometry.SUBTYPES.GEOM2DM : Geometry.SUBTYPES.GEOM2D);
+        return subtype;
+    }
+
+    /** Parse an Array of "full" Geometries 
+     * @throws CreateGeometryException */
+    private void parseGeometryArray(ByteBuffer data, Geometry[] container) throws CreateGeometryException {
+        for (int i = 0; i < container.length; i++) {
+            container[i] = parseGeometry(data);
+        }
+    }
+
+    /**
+     * Parse an Array of "slim" Points (without endianness and type, part of
+     * LinearRing and Linestring, but not MultiPoint!
+     * 
+     * @param haveZ
+     * @param haveM
+     * @throws CreateGeometryException
+     */
+    private Point[] parsePointArray(ByteBuffer data, boolean haveZ,
+        boolean haveM) throws CreateGeometryException {
+        int count = data.getInt();
+        Point[] result = new Point[count];
+        for (int i = 0; i < count; i++) {
+            result[i] = parsePoint(data, haveZ, haveM);
+        }
+        return result;
+    }
+
+    private double[][] parsePointsAsDoubleArray(ByteBuffer data, boolean haveZ,
+        boolean haveM) throws CreateGeometryException {
+        int count = data.getInt();
+        double points[][] = null;
+        int subtype = getSubType(haveZ, haveM);
+
+        switch (subtype) {
+        case Geometry.SUBTYPES.GEOM2D:
+            points = new double[count][2];
+            break;
+        case Geometry.SUBTYPES.GEOM3D:
+        case Geometry.SUBTYPES.GEOM2DM:
+            points = new double[count][3];
+            break;
+        case Geometry.SUBTYPES.GEOM3DM:
+            points = new double[count][4];
+            break;
+        default:
+            break;
+        }
+
+        for (int i = 0; i < count; i++) {
+            points[i][0] = data.getDouble(); // x
+            points[i][1] = data.getDouble(); // y
+            switch (subtype) {
+            case Geometry.SUBTYPES.GEOM3D:
+            case Geometry.SUBTYPES.GEOM2DM:
+                points[i][2] = data.getDouble(); // z or m
+                break;
+            case Geometry.SUBTYPES.GEOM3DM:
+                points[i][2] = data.getDouble(); // z
+                points[i][3] = data.getDouble(); // m
+                break;
+            default:
+                break;
+            }
+        }
+        return points;
+    }
+
+    private MultiPoint parseMultiPoint(ByteBuffer data) throws CreateGeometryException {
+    	MultiPoint multipoint = (MultiPoint) geomManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+        int points = data.getInt();
+        multipoint.ensureCapacity(points);
+        for (int i=0; i < points; i++) {
+        	parseTypeAndSRID(data);
+        	multipoint.addPoint(parsePoint(data, gHaveZ, gHaveM));
+        }
+        return multipoint;
+    }
+
+    private Curve parseLineString(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+        Point[] points = parsePointArray(data, haveZ, haveM);
+        Curve curve = (Curve) geomManager.create(TYPES.CURVE, getSubType(haveZ, haveM));    
+        curve.addMoveToVertex(points[0]);
+        for (int i = 1; i< points.length; i++)
+        {
+            curve.addVertex(points[i]);
+        }
+        return curve;
+    }
+
+    private void fillLinearRing(ByteBuffer data, OrientablePrimitive orientablePrimitive, boolean haveZ, boolean haveM) throws CreateGeometryException {
+        Point[] points = parsePointArray(data, haveZ, haveM);
+       
+        orientablePrimitive.addMoveToVertex(points[0]);
+        int lastPoint = points.length - 1;
+        for (int i = 1; i< lastPoint; i++)
+        {
+            orientablePrimitive.addVertex(points[i]);
+        }        
+    }
+
+    private Surface parsePolygon(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+	        int count = data.getInt();
+	        int subType = getSubType(haveZ, haveM);        
+	        
+	        Surface surface = (Surface) geomManager.create(TYPES.SURFACE, subType);
+	        	      
+	        for (int i = 0; i < count; i++) {
+	            fillLinearRing(data, surface, haveZ, haveM); 
+	        }
+	        	   
+	        surface.closePrimitive();	        
+	       
+			return surface;
+	 }
+    
+    
+    private MultiCurve parseMultiLineString(ByteBuffer data) throws CreateGeometryException {
+		MultiCurve multiCurve = (MultiCurve) geomManager.create(TYPES.MULTICURVE, getSubType(gHaveZ, gHaveM));
+        Curve curve = (Curve) geomManager.create(TYPES.CURVE, getSubType(gHaveZ, gHaveM));
+        fillOrientablePrimitive(data, curve);
+		multiCurve.addCurve(curve);
+        return multiCurve;
+}	
+    /**
+     * @param data
+     * @return
+     * @throws CreateGeometryException
+     */
+    private void fillOrientablePrimitive(ByteBuffer data, OrientablePrimitive orientablePrimitive)
+        throws CreateGeometryException {
+		int count = data.getInt();
+         
+        for (int i=0; i < count; i++)
+        {
+            parseTypeAndSRID(data);
+            Point[] points = parsePointArray(data, gHaveZ, gHaveM);
+ 
+            orientablePrimitive.addMoveToVertex(points[0]);
+            for (int j = 1; j < points.length; j++) {
+                orientablePrimitive.addVertex(points[j]);
+            }           
+        }		
+	}
+    
+    private MultiSurface parseMultiPolygon(ByteBuffer data)
+            throws CreateGeometryException {
+            int count = data.getInt();
+            
+            int subType = getSubType(gHaveZ, gHaveM);
+            MultiSurface multiSurface = (MultiSurface)geomManager.create(TYPES.MULTISURFACE, subType);
+            
+            Point point;
+            for (int i = 0; i < count; i++) {
+                parseTypeAndSRID(data);
+                int countRings = data.getInt();
+                Surface surface = (Surface)geomManager.create(TYPES.SURFACE, subType);
+                for (int j = 0; j < countRings; j++) {
+                    double[][] points =
+                        parsePointsAsDoubleArray(data, gHaveZ, gHaveM);
+                    
+                    //Add the initial point
+                    surface.addVertex(geomManager.createPoint(points[0][0], points[0][1], subType));
+                    
+                    //Add the other points
+                    int lastPoint = points.length - 1;
+                    for (int k=1 ; k<lastPoint ; k++){                    
+                        point = geomManager.createPoint(points[k][0], points[k][1], subType);
+                        for (int l=2 ; l<points[k].length ; i++){
+                            point.setCoordinateAt(l, points[k][l]);
+                        }
+                        surface.addVertex(point);
+                    }   
+                    surface.closePrimitive();
+                }
+                multiSurface.addSurface(surface);
+            }        
+            return multiSurface;
+    }
+    
+    private MultiPrimitive parseCollection(ByteBuffer data) throws CreateGeometryException {
+        int count = data.getInt();
+        Geometry[] geoms = new Geometry[count];
+        parseGeometryArray(data, geoms);
+        MultiPrimitive multiPrimitive = (MultiPrimitive) geomManager.create(TYPES.AGGREGATE, SUBTYPES.GEOM2D);
+        for (int i=0 ; i<geoms.length ; i++){
+        	multiPrimitive.addPrimitive((Primitive) geoms[i]);
+        }
+        return multiPrimitive;
+    }	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser3.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser3.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser3.java	(revision 42196)
@@ -0,0 +1,424 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.fromwkb;
+
+/*
+ * Based in
+ * PostGIS extension for PostgreSQL JDBC driver - Binary Parser
+ *
+ * (C) 2005 Markus Schaber, schabios@logi-track.com
+ */
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.io.WKBConstants;
+
+/**
+ * Parse binary representation of geometries. Currently, only text rep (hexed)
+ * implementation is tested.
+ * 
+ * It should be easy to add char[] and CharSequence ByteGetter instances,
+ * although the latter one is not compatible with older jdks.
+ * 
+ * I did not implement real unsigned 32-bit integers or emulate them with long,
+ * as both java Arrays and Strings currently can have only 2^31-1 elements
+ * (bytes), so we cannot even get or build Geometries with more than approx.
+ * 2^28 coordinates (8 bytes each).
+ * 
+ * @author markus.schaber@logi-track.com
+ * 
+ */
+
+public class WKBParser3 {
+
+	private boolean gHaveM, gHaveZ, gHaveS; // M, Z y SRID
+
+	private static final Logger LOG = LoggerFactory.getLogger(WKBParser2.class);
+	private GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private GeometryType[] pointGeometryTypes;
+
+	/**
+	 * @throws GeometryTypeNotValidException
+	 * @throws GeometryTypeNotSupportedException
+	 * 
+	 */
+	public WKBParser3() {
+		pointGeometryTypes =
+			new GeometryType[] {
+				loadPointGeometryType(Geometry.SUBTYPES.GEOM2D, "2D"),
+				loadPointGeometryType(Geometry.SUBTYPES.GEOM3D, "3D"),
+				loadPointGeometryType(Geometry.SUBTYPES.GEOM2DM, "2DM"),
+				loadPointGeometryType(Geometry.SUBTYPES.GEOM3DM, "3DM") };
+	}
+
+	private GeometryType loadPointGeometryType(int subtype, String subTypeName) {
+		try {
+			return geomManager.getGeometryType(Geometry.TYPES.POINT, subtype);
+		} catch (Exception e) {
+			LOG.info("Unable to get a reference to the geometry "
+					+ "type Point{}, to be cached", subTypeName);
+			return null;
+		}
+	}
+
+	/**
+	 * Parse a binary encoded geometry.
+	 * 
+	 * Is synchronized to protect offset counter. (Unfortunately, Java does not
+	 * have neither call by reference nor multiple return values.)
+	 * @throws CreateGeometryException 
+	 */
+	public synchronized Geometry parse(byte[] value) throws CreateGeometryException {
+		// BinaryByteGetter bytes = new ByteGetter.BinaryByteGetter(value);
+		ByteBuffer buf = ByteBuffer.wrap(value);
+		return parseGeometry(buf);
+	}
+
+
+	/** Parse a geometry starting at offset. 
+	 * @throws CreateGeometryException */
+	protected Geometry parseGeometry(ByteBuffer data) throws CreateGeometryException {
+		int realtype = parseTypeAndSRID(data);
+
+		Geometry result1 = null;
+		switch (realtype) {
+		case WKBConstants.wkbPoint:
+			result1 = parsePoint(data, gHaveZ, gHaveM);
+			break;
+		case WKBConstants.wkbLineString:
+			result1 = parseLineString(data, gHaveZ, gHaveM);
+			break;
+		case WKBConstants.wkbPolygon:
+			result1 = parsePolygon(data, gHaveZ, gHaveM);
+			break;
+		case WKBConstants.wkbMultiPoint:
+			result1 = parseMultiPoint(data);
+			break;
+		case WKBConstants.wkbMultiLineString:
+			result1 = parseMultiLineString(data);
+			return result1;
+		case WKBConstants.wkbMultiPolygon:
+			result1 = parseMultiPolygon(data);
+			break;
+		case WKBConstants.wkbGeometryCollection:
+			result1 = parseCollection(data);
+			break;
+		default:
+			//throw new IllegalArgumentException("Unknown Geometry Type!");
+		}
+
+		return result1;
+	}
+
+	protected int parseTypeAndSRID(ByteBuffer data) {
+		byte endian = data.get(); // skip and test endian flag
+		if (endian == 1) {
+			data.order(ByteOrder.LITTLE_ENDIAN);
+		}
+		int typeword = data.getInt();
+
+		int realtype = typeword & 0x1FFFFFFF; // cut off high flag bits
+
+		gHaveZ = (typeword & 0x80000000) != 0;
+		gHaveM = (typeword & 0x40000000) != 0;
+		gHaveS = (typeword & 0x20000000) != 0;
+		
+		// not used
+		int srid = -1;
+
+		if (gHaveS) {
+			srid = data.getInt();
+		}
+
+		return realtype;
+
+	}
+
+	private Point parsePoint(ByteBuffer data, boolean haveZ, boolean haveM) 
+	throws CreateGeometryException {
+		double x = data.getDouble();
+		double y = data.getDouble();
+		Point point;
+
+		int subtype = getSubType(haveZ, haveM);
+
+		// If we have a cached GeometryType use it, otherwise call the manager
+                if( pointGeometryTypes[subtype] == null ) {
+                    point = (Point) geomManager.create(Geometry.TYPES.POINT, subtype);
+                } else {
+                    point = (Point) pointGeometryTypes[subtype].create();
+                }
+                point.setX(x);
+		point.setY(y);
+
+		// Other dimensions
+		if (haveZ) {
+			point.setCoordinateAt(Geometry.DIMENSIONS.Z, data.getDouble());
+			if (haveM) {
+				/*point.setCoordinateAt(Geometry.DIMENSIONS.Z + 1,
+						data.getDouble());*/
+				data.getDouble();
+			}
+		} else {
+			if (haveM) {
+				/*point.setCoordinateAt(Geometry.DIMENSIONS.Y + 1,
+						data.getDouble());*/
+				data.getDouble();
+			}
+		}
+
+		return point;
+	}
+
+	/**
+	 * @param haveZ
+	 * @param haveM
+	 * @return
+	 */
+	private int getSubType(boolean haveZ, boolean haveM) {
+		/*int subtype =
+			haveZ ? (haveM ? Geometry.SUBTYPES.GEOM3DM
+					: Geometry.SUBTYPES.GEOM3D) : (haveM
+							? Geometry.SUBTYPES.GEOM2DM : Geometry.SUBTYPES.GEOM2D);*/
+		//TODO: No hay soporte para M
+		int subtype = haveZ ? Geometry.SUBTYPES.GEOM3D : Geometry.SUBTYPES.GEOM2D;
+		return subtype;
+	}
+
+	private Curve parseMultiLineString(ByteBuffer data) throws CreateGeometryException {
+		Curve curve = (Curve) geomManager.create(TYPES.CURVE, getSubType(gHaveZ, gHaveM));
+		fillOrientablePrimitive(data, curve);
+		return curve;
+	}
+
+	/**
+	 * @param data
+	 * @return
+	 * @throws CreateGeometryException
+	 */
+	private void fillOrientablePrimitive(ByteBuffer data, OrientablePrimitive orientablePrimitive)
+	throws CreateGeometryException {
+		int count = data.getInt();
+
+		for (int i=0; i < count; i++)
+		{
+			parseTypeAndSRID(data);
+			Point[] points = parsePointArray(data, gHaveZ, gHaveM);
+
+			orientablePrimitive.addMoveToVertex(points[0]);
+			for (int j = 1; j < points.length; j++) {
+				orientablePrimitive.addVertex(points[j]);
+			}           
+		}		
+	}
+
+	private MultiSurface parseMultiPolygon(ByteBuffer data)
+	throws CreateGeometryException {
+		int count = data.getInt();
+		
+		int subType = getSubType(gHaveZ, gHaveM);        
+		MultiSurface multiSurface = (MultiSurface)geomManager.create(TYPES.MULTISURFACE, subType);        
+
+		Point point;
+		for (int i = 0; i < count; i++) {
+			Surface surface = (Surface)geomManager.create(TYPES.SURFACE, subType); 
+			parseTypeAndSRID(data);
+			int countRings = data.getInt();            
+			for (int j = 0; j < countRings; j++) {
+				double[][] points = parsePointsAsDoubleArray(data, gHaveZ, gHaveM);
+
+				//Add the initial point
+				point = geomManager.createPoint(points[0][0], points[0][1], subType);
+				if(gHaveZ)
+					point.setCoordinateAt(Geometry.DIMENSIONS.Z, points[0][2]);
+				surface.addMoveToVertex(point);
+				
+
+				//Add the other points
+				int lastPoint = points.length - 1;
+				for (int k = 1; k < lastPoint; k++){                    
+					point = geomManager.createPoint(points[k][0], points[k][1], subType);
+					if(gHaveZ)
+						point.setCoordinateAt(Geometry.DIMENSIONS.Z, points[0][2]);
+					/*for (int l = 2; l < points[k].length; i++){
+						point.setCoordinateAt(l, points[k][l]);
+					}*/
+					surface.addVertex(point);
+				}   
+				surface.closePrimitive();
+			}
+			multiSurface.addSurface(surface);
+		}
+		return multiSurface;
+	}
+
+	private double[][] parsePointsAsDoubleArray(ByteBuffer data, boolean haveZ,
+			boolean haveM) throws CreateGeometryException {
+		int count = data.getInt();
+		double points[][] = null;
+		int subtype = getSubType(haveZ, haveM);
+
+		switch (subtype) {
+		case Geometry.SUBTYPES.GEOM2D:
+			points = new double[count][2];
+			break;
+		case Geometry.SUBTYPES.GEOM3D:
+		case Geometry.SUBTYPES.GEOM2DM:
+			points = new double[count][3];
+			break;
+		case Geometry.SUBTYPES.GEOM3DM:
+			points = new double[count][4];
+			break;
+		default:
+			break;
+		}
+
+		for (int i = 0; i < count; i++) {
+			points[i][0] = data.getDouble(); // x
+			points[i][1] = data.getDouble(); // y
+			switch (subtype) {
+			case Geometry.SUBTYPES.GEOM3D:
+			case Geometry.SUBTYPES.GEOM2DM:
+				points[i][2] = data.getDouble(); // z or m
+				break;
+			case Geometry.SUBTYPES.GEOM3DM:
+				points[i][2] = data.getDouble(); // z
+				points[i][3] = data.getDouble(); // m
+				break;
+			default:
+				break;
+			}
+			//TODO: Remove when M be supported
+			if(haveZ && haveM)
+				data.getDouble();
+		}
+		return points;
+	}
+
+	private MultiPrimitive parseCollection(ByteBuffer data) throws CreateGeometryException {
+		int count = data.getInt();
+		Geometry[] geoms = new Geometry[count];
+		parseGeometryArray(data, geoms);
+		MultiPrimitive multiPrimitive = (MultiPrimitive) geomManager.create(TYPES.AGGREGATE, SUBTYPES.GEOM2D);
+		for (int i = 0 ; i < geoms.length ; i++){
+			multiPrimitive.addPrimitive((Primitive) geoms[i]);
+		}
+		return multiPrimitive;
+	}	
+
+	/** Parse an Array of "full" Geometries 
+	 * @throws CreateGeometryException */
+	private void parseGeometryArray(ByteBuffer data, Geometry[] container) throws CreateGeometryException {
+		for (int i = 0; i < container.length; i++) {
+			container[i] = parseGeometry(data);
+		}
+	}
+
+	private Curve parseLineString(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+		Point[] points = parsePointArray(data, haveZ, haveM);
+		Curve curve = (Curve) geomManager.create(TYPES.CURVE, getSubType(haveZ, haveM));    
+		curve.addMoveToVertex(points[0]);
+		for (int i = 1; i< points.length; i++) {
+			curve.addVertex(points[i]);
+		}
+		return curve;
+	}
+
+	/**
+	 * Parse an Array of "slim" Points (without endianness and type, part of
+	 * LinearRing and Linestring, but not MultiPoint!
+	 * 
+	 * @param haveZ
+	 * @param haveM
+	 * @throws CreateGeometryException
+	 */
+	private Point[] parsePointArray(ByteBuffer data, boolean haveZ, boolean haveM) 
+	throws CreateGeometryException {
+		int count = data.getInt();
+		Point[] result = new Point[count];
+		for (int i = 0; i < count; i++) {
+			result[i] = parsePoint(data, haveZ, haveM);
+		}
+		return result;
+	}
+
+
+	private Surface parsePolygon(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+		int count = data.getInt();
+		int subType = getSubType(haveZ, haveM);        
+
+		Surface surface = (Surface) geomManager.create(TYPES.SURFACE, subType);
+
+		for (int i = 0; i < count; i++) {
+			fillLinearRing(data, surface, haveZ, haveM); 
+		}
+
+		surface.closePrimitive();	        
+
+		return surface;
+	}
+
+	private void fillLinearRing(ByteBuffer data, OrientablePrimitive orientablePrimitive, boolean haveZ, boolean haveM) throws CreateGeometryException {
+		Point[] points = parsePointArray(data, haveZ, haveM);
+
+		orientablePrimitive.addMoveToVertex(points[0]);
+		int lastPoint = points.length - 1;
+		for (int i = 1; i< lastPoint; i++) {
+			orientablePrimitive.addVertex(points[i]);
+		}        
+	}
+
+	private MultiPoint parseMultiPoint(ByteBuffer data) throws CreateGeometryException {
+		MultiPoint multipoint = (MultiPoint) geomManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+                int points = data.getInt();
+                multipoint.ensureCapacity(points);
+                for (int i=0; i < points; i++) {
+			parseTypeAndSRID(data);
+			multipoint.addPrimitive(parsePoint(data, gHaveZ, gHaveM));
+		}
+		return multipoint;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/WKBParser3.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKB.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.geom.operation.fromwkb;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FromWKB extends GeometryOperation {
+    public static final String NAME = GeometryManager.OPERATIONS.FROMWKB;
+    
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+	private static WKBParser3 wkbParser = new WKBParser3();
+   
+	/* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+        throws GeometryOperationException {
+        byte[] data = (byte[])ctx.getAttribute("data");
+
+        try {
+			return geom = wkbParser.parse(data);
+		} catch (CreateGeometryException e) {
+			return new GeometryOperationException(e);
+		}
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKB.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKBGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKBGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKBGeometryOperationContext.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.fromwkb;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+
+public class FromWKBGeometryOperationContext extends GeometryOperationContext{
+	
+	public byte[] getData() {
+		return (byte[])super.getAttribute("data");
+	}
+
+	public void setData(byte[] data) {
+		super.setAttribute("data", data);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKBGeometryOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/area/Area.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/area/Area.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/area/Area.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.area;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class Area extends GeometryOperation {
+    public static final String NAME = "area";
+    public static final int CODE = GeometryLocator.getGeometryManager().
+        getGeometryOperationCode(NAME);
+    
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+        throws GeometryOperationException {
+        com.vividsolutions.jts.geom.Geometry jtsGeometry;
+        try {
+            jtsGeometry = (com.vividsolutions.jts.geom.Geometry)geom.invokeOperation("toJTS", null);
+        } catch (GeometryOperationNotSupportedException e) {
+           throw new GeometryOperationException(e);
+        }
+        return new Double(jtsGeometry.getArea());
+    }
+
+    public int getOperationIndex() {
+        return CODE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/area/Area.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/isCCW/IsCCW.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/isCCW/IsCCW.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/isCCW/IsCCW.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.isCCW;
+
+import java.awt.geom.PathIterator;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateList;
+
+/**
+ * This class checks if the first part from the General Path of a complex geometry is CCW.
+ * @return Boolean <code>true<code> if is CCW
+ * @author Carlos S�nchez Peri��n <a href = "mailto:csanchez@prodevelop.es"> e-mail </a>
+ */
+public class IsCCW extends GeometryOperation{
+    public static final String NAME = "isCCW";
+    private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+	
+	private GeneralPathX generalPathX = null;	
+	
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		generalPathX = geom.getGeneralPath();
+		if(generalPathX == null){
+			//if there isn't path the operation hasn't sense.
+			return null;
+    	}
+		PathIterator theIterator = generalPathX.getPathIterator(null, geomManager.getFlatness()); //polyLine.getPathIterator(null, flatness);
+		double[] theData = new double[6];
+        Coordinate first = null;
+        CoordinateList coordList = new CoordinateList();
+        Coordinate c1;
+        boolean bFirst = true;
+		while (!theIterator.isDone()) {
+			//while not done
+			int type = theIterator.currentSegment(theData);
+        	switch (type)
+        	{
+        	case GeneralPathX.SEG_MOVETO:
+        		c1= new Coordinate(theData[0], theData[1]);
+        		if (bFirst == false) // Ya tenemos la primera parte.
+        			break;
+        		if (bFirst)
+        		{
+        			bFirst=false;
+        			first = c1;
+        		}
+        		coordList.add(c1, true);
+        		break;
+        	case GeneralPathX.SEG_LINETO:
+        		c1= new Coordinate(theData[0], theData[1]);
+        		coordList.add(c1, true);
+        		break;
+
+        	}
+        	theIterator.next();
+		}
+		coordList.add(first, true);
+		return new Boolean(CGAlgorithms.isCCW(coordList.toCoordinateArray()));
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/isCCW/IsCCW.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkt/ToWKT.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkt/ToWKT.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkt/ToWKT.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation.towkt;
+
+import com.vividsolutions.jts.io.WKTWriter;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.operation.tojts.ToJTS;
+
+public class ToWKT extends GeometryOperation {
+    public static final String NAME = "toWKT";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+	
+	private static WKTWriter writer = new WKTWriter();
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		try {
+            return writer.write((com.vividsolutions.jts.geom.Geometry)geom.invokeOperation(ToJTS.CODE, null));
+        } catch (GeometryOperationNotSupportedException e) {
+           throw new GeometryOperationException(e);
+        }
+	}
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/towkt/ToWKT.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/ensureOrientation/EnsureOrientation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/ensureOrientation/EnsureOrientation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/ensureOrientation/EnsureOrientation.java	(revision 42196)
@@ -0,0 +1,206 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.geom.operation.ensureOrientation;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateList;
+import com.vividsolutions.jts.geom.CoordinateSequences;
+import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+
+/**
+ * Use this function class to ensure you get real polygons or holes
+ * En JTS, con bCCW = false obtienes un poligono exterior.
+ * Nota: Solo se le da la vuelta (si es que lo necesita) al
+ * poligono exterior. El resto, por ahora, no se tocan.
+ * Si se necesita tenerlos en cuenta, habr�a que mirar
+ * si est�n dentro del otro, y entonces revisar que tiene
+ * un CCW contrario al exterior.
+ * @param bCCW true if you want the GeneralPath in CCW order
+ * @return true si se le ha dado la vuelta. (true if flipped)
+ * TODO: TERMINAR ESTO!! NO EST� COMPLETO!! NO sirve para multipoligonos
+ */
+/**
+ * @author Carlos S�nchez Peri��n <a href = "mailto:csanchez@prodevelop.es"> e-mail </a>
+ */
+public class EnsureOrientation extends GeometryOperation{
+    public static final String NAME = "ensureOrientation";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+	
+	private GeneralPathX generalPathX = null;
+	
+	private Boolean bCCW;
+		
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)throws GeometryOperationException {
+		bCCW = (Boolean) ctx.getAttribute("bCCW");
+		if (bCCW==null)
+			throw new GeometryOperationException(new Exception("The function Parameter hasn't been passed or is null."));
+		
+		generalPathX = geom.getGeneralPath();
+		if (generalPathX==null){
+			//if there isn't path the operation hasn't sense.
+			return null;
+		}
+		
+        byte[] pointTypesAux = new byte[generalPathX.getNumTypes()+1];
+        double[] pointCoordsAux = new double[(generalPathX.getNumCoords() * 2) + 2];
+        int i;
+        int pointIdx = 0;
+
+        Coordinate c1, c2, c3;
+        CoordinateList coordList = new CoordinateList();
+        CoordinateList firstList = new CoordinateList();
+        boolean bFirstList = true;
+        Coordinate cInicio = null;
+
+        for (i=0; i< generalPathX.getNumTypes(); i++)
+        {
+        	int type = generalPathX.getTypeAt(i);
+
+        	switch (type)
+        	{
+        	case GeneralPathX.SEG_MOVETO:
+        		c1= new Coordinate(generalPathX.getPointAt(pointIdx).getX(), generalPathX.getPointAt(pointIdx).getY());
+        		cInicio = c1;
+        		coordList.add(c1, true);
+        		if (i>0) bFirstList = false;
+        		if (bFirstList)
+        		{
+        			firstList.add(c1,true);
+        		}
+        		break;
+        	case GeneralPathX.SEG_LINETO:
+        		c1= new Coordinate(generalPathX.getPointAt(pointIdx).getX(), generalPathX.getPointAt(pointIdx).getY());
+        		coordList.add(c1, true);
+        		if (bFirstList)
+        		{
+        			firstList.add(c1,true);
+        		}
+        		break;
+        	case GeneralPathX.SEG_QUADTO:
+        		c1= new Coordinate(generalPathX.getPointAt(pointIdx).getX(), generalPathX.getPointAt(pointIdx).getY());
+        		coordList.add(c1, true);
+        		c2= new Coordinate(generalPathX.getPointAt(pointIdx+1).getX(),generalPathX.getPointAt(pointIdx+1).getY());
+        		coordList.add(c2, true);
+        		if (bFirstList)
+        		{
+        			firstList.add(c1,true);
+        			firstList.add(c2,true);
+        		}
+
+        		break;
+        	case GeneralPathX.SEG_CUBICTO:
+        		c1= new Coordinate(generalPathX.getPointAt(pointIdx).getX(), generalPathX.getPointAt(pointIdx).getY());
+        		coordList.add(c1, true);
+        		c2= new Coordinate(generalPathX.getPointAt(pointIdx+1).getX(),generalPathX.getPointAt(pointIdx+1).getY());
+        		coordList.add(c2, true);
+        		c3= new Coordinate(generalPathX.getPointAt(pointIdx+2).getX(),generalPathX.getPointAt(pointIdx+2).getY());
+        		coordList.add(c3, true);
+        		if (bFirstList)
+        		{
+        			firstList.add(c1,true);
+        			firstList.add(c2,true);
+        			firstList.add(c3,true);
+        		}
+
+        		break;
+        	case GeneralPathX.SEG_CLOSE:
+        		coordList.add(cInicio, true);
+        		if (bFirstList)
+        		{
+        			firstList.add(cInicio,true);
+        		}
+        		break;
+
+        	}
+        	pointIdx += GeneralPathX.curvesize[type];
+        }
+		// Guardamos el path dandole la vuelta
+		Coordinate[] coords = coordList.toCoordinateArray();
+		boolean bFlipped = false;
+		if (CGAlgorithms.isCCW(coords) != bCCW.booleanValue()) // Le damos la vuelta
+		{
+			CoordinateArraySequence seq = new CoordinateArraySequence(coords);
+			CoordinateSequences.reverse(seq);
+			coords = seq.toCoordinateArray();
+
+
+			// En el primer punto metemos un moveto
+			pointCoordsAux[0] = coords[0].x;
+			pointCoordsAux[1] = coords[0].y;
+			pointTypesAux[0] = GeneralPathX.SEG_MOVETO;
+			int idx = 2;
+			i=0;
+			int j=1;
+			for (int k=0; k < coords.length; k++)
+			{
+				pointCoordsAux[idx++] = coords[k].x;
+				pointCoordsAux[idx++] = coords[k].y;
+	        	int type = generalPathX.getTypeAt(i++);
+	        	pointIdx += GeneralPathX.curvesize[type];
+	        	switch (type)
+	        	{
+	        	case GeneralPathX.SEG_MOVETO:
+	        		pointTypesAux[j] = GeneralPathX.SEG_LINETO;
+	        		break;
+	        	case GeneralPathX.SEG_LINETO:
+	        		pointTypesAux[j] = GeneralPathX.SEG_LINETO;
+	        		break;
+	        	case GeneralPathX.SEG_QUADTO:
+	        		pointTypesAux[j] = GeneralPathX.SEG_QUADTO;
+	        		break;
+	        	case GeneralPathX.SEG_CUBICTO:
+	        		pointTypesAux[j] = GeneralPathX.SEG_CUBICTO;
+	        		break;
+	        	case GeneralPathX.SEG_CLOSE:
+	        		// TODO: IMPLEMENTAR ESTO!!!
+	        		break;
+
+	        	}
+	        	j++;
+
+			}
+			generalPathX.setPointTypes(pointTypesAux);
+			generalPathX.setPointCoords(pointCoordsAux);
+	        generalPathX.setNumCoords(generalPathX.getNumCoords()+2);
+	        generalPathX.setNumTypes(generalPathX.getNumTypes()+1);
+	        bFlipped  = true;
+		}
+		return new Boolean((boolean) bFlipped);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/ensureOrientation/EnsureOrientation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/pom.xml	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.geometry.operation</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.generalpath</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.vividsolutions</groupId>
+      <artifactId>jts</artifactId>
+    </dependency>
+  </dependencies>
+
+  <description>Contains the implementation of some operations of geometries.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.pom.xml.swp



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.svn-commit.tmp.swp
.pom.xml.swp


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#text.properties
+aceptar=Aceptar
+cancelar=Cancelar
+Cascada=Cascada
+cascada_enable=Debe haber al menos una ventana abierta
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_en.properties	(revision 42196)
@@ -0,0 +1,6 @@
+#text_en.properties
+aceptar=OK
+cancelar=Cancel
+Cascada=Cascade
+ventana=Window
+otro=other

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_fr.properties	(revision 42196)
@@ -0,0 +1,4 @@
+#text_fr.properties
+aceptar=Accepter
+Cascada=Cascade
+Configurar=Configurer

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/TestMessages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/TestMessages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/TestMessages.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Locale;
+
+import junit.framework.TestCase;
+
+/**
+ * @author cesar
+ *
+ */
+public class TestMessages extends TestCase {
+
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	/*
+	 * @see TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	public void testSetPreferredLocales() {
+		setPreferredLocales();
+		removeLocales();
+	}
+	
+	private void setPreferredLocales() {
+		ArrayList preferred = new ArrayList();
+		preferred.add(new Locale("en"));
+		preferred.add(new Locale("es"));
+		Messages.setPreferredLocales(preferred);
+		ArrayList resultPref = Messages.getPreferredLocales();
+		
+		TestCase.assertEquals(resultPref.size(), 2);
+		
+		Locale lang1 = (Locale) resultPref.get(0);		
+		TestCase.assertEquals(lang1.getLanguage(), "en");
+		Locale lang2 = (Locale) resultPref.get(1);		
+		TestCase.assertEquals(lang2.getLanguage(), "es");
+	}
+
+	private void removeLocales() {	
+		Locale lang1 = new Locale("en");
+		Locale lang2 = new Locale("es");	
+		ArrayList resultPref = Messages.getPreferredLocales();
+		Messages.removeLocale(lang1);
+		TestCase.assertEquals(resultPref.size(), 1);
+		Messages.removeLocale(lang2);		
+		TestCase.assertEquals(resultPref.size(), 0);
+	}
+	
+	public void testAddResourceFamily() {
+		setPreferredLocales();
+		//this.getClass().getClassLoader().getResource("text_en.properties");
+
+		try {
+			Messages.addResourceFamily("text", new File("src-test/org/gvsig/i18n/dataset1/"));
+		} catch (MalformedURLException e) {
+			TestCase.fail("Fichero de recursos no encontrado");
+		}
+		TestCase.assertEquals(5, Messages.size(new Locale("en")));
+		TestCase.assertEquals(4,Messages.size(new Locale("es")));
+		TestCase.assertEquals(0,Messages.size(new Locale("fr")));
+		
+		TestCase.assertEquals("OK", Messages.getText("aceptar"));
+		TestCase.assertEquals("Cancel", Messages.getText("cancelar"));
+		TestCase.assertEquals("Cascade", Messages.getText("Cascada"));
+		TestCase.assertEquals("Window", Messages.getText("ventana"));
+		TestCase.assertEquals("Debe haber al menos una ventana abierta", Messages.getText("cascada_enable"));
+		TestCase.assertEquals("Configurar", Messages.getText("Configurar"));
+		TestCase.assertEquals(null, Messages.getText("Configurar", false));
+
+		// load another file now
+		try {
+			Messages.addResourceFamily("text", new File(
+                    "src-test/org/gvsig/i18n/dataset2/"));
+		} catch (MalformedURLException e) {
+			TestCase.fail("Fichero de recursos no encontrado");
+		}
+		// check that the right amount of translations was loaded
+		TestCase.assertEquals(7, Messages.size(new Locale("en")));
+		TestCase.assertEquals(6, Messages.size(new Locale("es")));
+		TestCase.assertEquals(0, Messages.size(new Locale("fr")));
+
+		// test that keys didn't get overwritten by the new files
+		// (only new keys should have been added for each language)
+		TestCase.assertEquals("OK", Messages.getText("aceptar"));
+		TestCase.assertEquals("Cancel", Messages.getText("cancelar"));
+		TestCase.assertEquals("Cascade", Messages.getText("Cascada"));
+		// check the new keys
+		TestCase.assertEquals("At least one window should be open", Messages.getText("cascada_enable"));
+		TestCase.assertEquals("Insert first corner point", Messages.getText("insert_first_point_corner"));
+		TestCase.assertEquals("Capa exportada", Messages.getText("capa_exportada"));
+		TestCase.assertEquals("Circunscrito", Messages.getText("circumscribed"));
+		
+		Messages.removeResources();
+		TestCase.assertEquals(0, Messages.size(new Locale("en")));
+		TestCase.assertEquals(0, Messages.size(new Locale("es")));
+		TestCase.assertEquals(0, Messages.size(new Locale("fr")));
+		
+		removeLocales();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/TestMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_fr.properties	(revision 42196)
@@ -0,0 +1,4 @@
+#text_fr.properties
+aceptar=Accepter
+Cascada=Cascade
+Configurar=Configurer

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#text.properties
+aceptar=baceptar
+cancelar=amancebar
+capa_exportada=Capa exportada
+circumscribed=Circunscrito
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_en.properties	(revision 42196)
@@ -0,0 +1,4 @@
+#text_en.properties
+insert_first_point_corner=Insert first corner point
+cascada_enable=At least one window should be open
+cancelar=arancelar

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/AllTests.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.gvsig.i18n");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(TestMessages.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_cs.properties	(revision 42196)
@@ -0,0 +1,630 @@
+#Translations for language: cs
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Query
+colocar_alrededor_seleccionados=Um\u00EDstit kolem vybran\u00E9 polo\u017Eky
+ancho_alto=\u0160\u00ED\u0159ka X V\u00FD\u0161ka
+media=V\u00FDznam
+Quitar_todos=Odstranit v\u0161e
+Parametros=Parametry
+conexion_correcta=Opravit spojen\u00ED
+selection_color=Vybrat barvu
+cerrar=Zav\u0159\u00EDt
+titulo=Spr\u00E1vce projektu
+tipo_simbolo=Druh symbolu\:
+documentos_existentes=Existuj\u00EDc\u00ED dokumenty
+aceptar=OK
+grosor_linea=\u0161\u00ED\u0159ka \u010D\u00E1ry\:
+Siguiente=Dal\u0161\u00ED
+ver_tooltip=Uk\u00E1zat okno projektu
+Intersecten_con=protnut\u00E9 s
+Color_de_Relleno=Barva v\u00FDpln\u011B\:
+_(Simbolo_unico)=(unik\u00E1tn\u00ED symboly)
+parametros=Parametry
+tipo_linea=Druh obrysu\:
+Servidor=Server
+agrupar_capas=Seskupen\u00ED vrstev
+capaWMS=WMS vrstva
+Simbologia=Symboly
+Propiedades_del_Tema=Vlastnosti t\u00E9matu
+Ver=Zobrazit
+Zoom_Completo=Full Extent
+leyenda=Legenda
+Milimetros=Milimetry
+Tipo_de_leyenda=Druh legendy
+Perimetro=Obvod
+punto=Bod
+borra_seleccion=Vymazat vybran\u00E9
+Cambio_Estilo=Zm\u011Bna Stylu
+Anadir_capa=P\u0159idat vrstvu
+Ajustar_cobertura_wcs=Nastaven\u00ED WCS
+S\u00EDmbolo=Symbol
+eliminar_capa=Smazat vrstvu
+ver_tabla_atributos=Zkontrolujte tabulku atribut\u016F
+Cerrar=Zav\u0159\u00EDt
+espacio=Mezera\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zobraz prvky vrstvy, kter\u00E9 maj\u00ED rozsah barev podle hodnot atribut\u016F
+select_all=Vyber v\u0161e
+sin_realce=\u017D\u00E1dn\u00E9 vylep\u0161en\u00ED
+Imprimir=Tisk
+join=spojit
+simplificar=Zjednodu\u0161it
+insertar_imagen=Vlo\u017Eit obr\u00E1zek
+Cambio_de_estilo=Zm\u011Bna stylu
+Campo_de_clasificacion=Kl\u00ED\u010Dov\u00E1 polo\u017Eka
+guardar_clave=Ulo\u017Eit k\u00F3d
+_(Etiquetas_estandar)=(Standardn\u00ED popisy)
+propiedades_del_tema=Atributy sch\u00E9matu
+baja=Spodn\u00ED
+renombrar=P\u0159ejmenovat
+Error_guardando_la_leyenda=Chyba p\u0159i ukl\u00E1d\u00E1n\u00ED legendy
+insertar_texto=Vlo\u017Eit text
+Extent=Oblast
+fichero_incorrecto=Chybn\u00FD soubor
+seleccionar_formato=Vybrat form\u00E1t
+statistics=Statistika
+servidor_wcs_no_responde=Po\u017Eadovan\u00FD server neodpov\u00EDd\u00E1
+quitar_enlaces=Odebrat spojen\u00ED
+causa_error_desconocida=Neo\u010Dek\u00E1van\u00E1 chyba na stran\u011B serveru
+Anadir_Capa=P\u0159idat Vrstvu
+sin_titulo=Nepojmenovan\u00FD
+finalizar=Ukon\u010Dit
+arriba=Nahoru
+Igual_que_la_impresora=Stejn\u00E9 jako tisk\u00E1rna
+Un_Layer=Vyberte alespo\u00F2 jednu vrstvu.
+informacion=Informace
+seleccionar_todos=Vybrat v\u0161e
+guardar_como_plantilla=Ulo\u017Eit jako \u0161ablonu
+desde_izquierda=Z leva\:
+colocar_a_margenes=Um\u00EDstit s referenc\u00ED k okraji
+No_mostrar_la_capa_cuando_la_escala=ezobrazovat vrstvu, kdy\u017E je m\u011B\u0159\u00EDtko
+Inferior=Ni\u017E\u0161\u00ED
+Valor_verde=Hodnota zelen\u00E9
+fallo_obtener_tablas=Nelze z\u00EDskat tabulky z datab\u00E1ze
+colocar_detras=P\u0159en\u00E9st do pozad\u00ED
+vertical=Vertik\u00E1ln\u00ED
+fichero_existe=Zvolen\u00FD soubor ji\u017E existuje jako vrstva
+imagen=Obr\u00E1zek
+tipo_leyenda=Soubor legendy (*.GVL)
+enlace_vivo=Aktivn\u00ED odkaz
+Por_favor_active_el_tema=Pros\u00EDm, nejprve aktivujte t\u00E9ma
+importar_extent=Import aktu\u00E1ln\u00ED viditeln\u00E9 oblasti
+quantile_intervals=Interval kvantilu
+error_escritura=Nelze zapisovat do souboru
+seleccionar_parametros=Vybrat parametry
+abrir=Otev\u0159\u00EDt
+General=Obecn\u00FD
+unidades=Jednotky\:
+configuracion_andami_tooltip=Konfigurace andami
+Cuadrado=\u010Ctverec
+rellenar_marco_vista=Zaplnit r\u00E1m pohledu
+Ancho_de_linea=\u0160\u00ED\u0159ka linie
+Dxffiles=DXF soubory
+tipo_de_leyenda=Druh legendy
+En_metros=V metrech
+Descripcion=Popis
+agrupar_linea=Seskupen\u00ED lini\u00ED s grafick\u00FDmi prvky
+info=Informace
+Valor_Bandas=Velikost okraje
+desconectar=Odpojit
+insertar_linea=Vlo\u017Eit linii
+path=Cesta
+clave=K\u00F3d
+owner=Vlastn\u00EDk
+tema=Vrstva
+recta=P\u0159\u00EDm\u00E1 linie
+linf_der=dole vpravo X
+shape_seleccion=Exportovat v\u00FDb\u011Br
+cuando_activo=Kdy\u017E je aktivn\u00ED
+nuevo_tamano_fuente=Nov\u00E1 velikost p\u00EDsma\:
+abrir_plantilla=Otev\u0159\u00EDt \u0161ablonu
+propiedades_grafico=Nastaven\u00ED grafiky
+Zoom_Menos_Vista=Zoom Out v r\u00E1mu pohledu
+Nombres=N\u00E1zvy
+color=Barva\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=mo\u017En\u00ED nastavit popisek mapov\u00FDch prvk\u016F hodnotou jednotliv\u00FDch pol\u00ED
+confirmar_borrar=Prvek bude odstran\u011Bn. Jste si jist\u00FD?
+distribuir=Rozm\u00EDstit\:
+circulo=Kru\u017Enice
+detalles=Podrobnosti
+por_debajo_de=pod\:
+Habilitar_etiquetado=Povolit popisov\u00E1n\u00ED
+registros_seleccionados_total=Celkem zvolen\u00FDch z\u00E1znam\u016F
+ymin=minimum Y
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zobraz v\u0161echny prvky vrstvy, kter\u00E9 maj\u00ED stejn\u00FD symbol
+propiedades=Vlastnosti
+reproyectar_aviso=Projekce vrstvy se neshoduje s projekc\u00ED pohledu.\nUpozorn\u011Bn\u00ED\: N\u011Bkter\u00E9 transformace mohou b\u00FDt nep\u0159esn\u00E9.\nPros\u00EDm prostudujte dokumentaci
+Ajustar_transparencia=Nastavit pr\u016Fhlednost
+hasta=do
+desagrupar_graficos=Odskupit prvky
+back=P\u0159edchoz\u00ED
+conservar_escala_visualizacion=Nastaven\u00ED zobrazovac\u00EDho m\u011B\u0159\u00EDtka
+pixeles=pixely
+utilizar_margenes_impresora=Pou\u017E\u00EDt okraje tisk\u00E1rny
+Al_leer_la_leyenda=na\u010D\u00EDt\u00E1n\u00ED legendy
+Simbolo=Symbol
+Capas=Vrstvy
+Seleccionar_fichero=Vybrat soubor
+select_none=Odstra\u0148 v\u0161e
+recuento=p\u0159epo\u010Det
+Otros=Jin\u00E9
+Zoom_Mas_Vista=Zoom In v r\u00E1mu pohledu
+navegacion=Navigace
+infovalue=Zobrazuje elemety vrstvy s jedine\u010Dn\u00FDm symbolem pro ka\u017Edou hodnotu.
+visualizar_cuadricula=Zobrazit grid
+Etiqueta=Popis
+nuevo_tooltip=Vytvo\u0159it nov\u00FD projekt
+Sample=Vzor
+Valor=Hodnota
+Tiempo=\u010Cas
+Campo_clasifica=Kl\u00ED\u010Dov\u00E1 polo\u017Eka
+insertar_poligono=Vlo\u017Eit polygon
+Mostrar_siempre=Zobrazit v\u017Edy
+angulo_rotacion=Uhel nato\u010Den\u00ED\:
+mapas=Mapy
+configurar=Konfigurace
+campo=Pole
+por_encima_de=nad\:
+leyenda_campo_unido=Pou\u017E\u00EDv\u00E1te stejnou polo\u017Eku bu\u010F v legend\u011B nebo popisc\u00EDch. Pros\u00EDm zm\u011B\u0148te \nlegendu p\u0159ed odebr\u00E1n\u00EDm spojen\u00ED.
+nombre=Jm\u00E9no
+alerta=Upozorn\u011Bn\u00ED
+propiedades_marco_leyenda=Vlastnosti r\u00E1mu legendy
+Encuadre_Vista=Zobrazit posunova\u010D
+Intervalos_por_rupturas_naturales=Intervaly dle p\u0159irozen\u00FDch hranic.
+extension=Roz\u0161\u00ED\u0159en\u00ED
+propiedades_tema=Vlastnosti vrstvy
+modification_date=Datum zm\u011Bny
+formato=Form\u00E1t
+igual_todos_lados=Stejn\u00FD posun pro v\u0161echny strany
+Back=P\u0159edchoz\u00ED
+Nuevo_conjunto=Nov\u00E1 skupina
+coincidir_tamano=Shoda velikosti\:
+Zoom_Select=Zoom na v\u00FDb\u011Br
+Usar_indice_espacial=Pou\u017E\u00EDt prostorov\u00FD index
+background_color=Barva pozad\u00ED
+north=Sever
+reproyectar_pregunta=Chcete p\u0159ev\u00E9st projekci?
+Cambio_Color=Zm\u011Bna barvy
+seleccione_fecha=Vybrat datum...
+fallo_crear_pool=Chyba vytvo\u0159en\u00ED mno\u017Einy p\u0159ipojen\u00ED
+Intervalos=Intervaly
+jpg=JPEG soubor
+Herramientas_vista=Zobrazit n\u00E1stroje
+Encuadre=Zoom
+Triangulo=Troj\u016Fheln\u00EDk
+tamano_posicion=Velikost a um\u00EDst\u011Bn\u00ED
+untitled=Nepojmenovan\u00FD
+base_datos=Datab\u00E1ze
+__espacio_vertical=Vertik\u00E1ln\u00ED odsazov\u00E1n\u00ED\:
+Salir=Konec
+altura=V\u00FD\u0161ka\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... smazat registry z
+select_geom_field=Vyber polo\u017Eku s geometri\u00ED
+seleccione_tabla_origen=Zvolte p\u016Fvodn\u00ED tabulku spojen\u00ED
+Superior=Vy\u0161\u0161\u00ED
+ascending_order=Vzestupn\u00E9 po\u0159ad\u00ED
+insertar_vista=Vlo\u017Eit pohled
+Color_Contorno=Barva ohrani\u010Den\u00ED
+Centimetros=Centimetry
+Nombre_que_se_le_dara_al_zoom=N\u00E1zev pro zoom
+tamano_pagina=Velikost str\u00E1nky
+Accion_Predefinida=P\u0159eddefinovan\u00E1 akce
+Bold=Tu\u010Dn\u00FD
+minimo=Minimum
+divisiones_izquierda=D\u011Blen\u00ED doleva
+Imagen=Obr\u00E1zek
+propiedades_marco_imagenes=Vlastnosti obrazov\u00E9ho r\u00E1mu
+orientacion=Orientace\:
+el_numero_maximo_de_intervalos_para_este_campo_es=Maxim\u00E1ln\u00ED po\u010Det interval\u016F pro tuto polo\u017Eku je
+tablas=Tabulky
+Seleccionar_del_conjunto=Vybrat ze sady
+Preparar_pagina=P\u0159ipravit str\u00E1nku
+error_comunicacion_servidor=Chyba p\u0159i p\u0159ipojov\u00E1n\u00ED k serveru
+Muestra_los_atributos_de_las_capas_seleccionadas=Zobrazit atributy vybran\u00FDch vrstev
+anterior=P\u0159edchoz\u00ED
+__seleccion_de_fuente=V\u00FDb\u011Br p\u00EDsma
+rango_de_escalas=Rozsah m\u011B\u0159\u00EDtka
+mosaico_tooltip=Mozaika
+Calcular_intervalos=V\u00FDpo\u010Det intervalu
+lineal_directo=P\u0159\u00EDmo Line\u00E1rn\u00ED
+Simbolo_Unico=Jedine\u010Dn\u00FD symbol
+propiedades_raster=Vlastnosti rastru
+Anadir_al_conjunto=P\u0159idat do mno\u017Einy
+Guardar=Ulo\u017Eit
+bmp=BMP soubory
+Eliminar=Smazat
+seleccionar_por_rectangulo=Vybrat obd\u00E9ln\u00EDkem
+ymax=maximum Y
+__lineas=\u0159\u00E1dky
+Leyenda=Legenda
+Style=Styl
+Capas_del_localizador=Lokalizace vrstev
+Origen_de_datos=P\u016Fvod dat
+Personalizado=U\u017Eivatelsky
+Linea=Linie
+Zoom_Completo_Vista=Zobrazit r\u00E1m ve Full Extent
+Coberturas=P\u0159ekryvy
+Guardar_el_zoom_actual=Ulo\u017Eit aktu\u00E1ln\u00ED v\u00FD\u0159ez
+seleccionar_por_punto=Vybrat po bodech
+cancelar=Zru\u0161it
+nombre_cobertura=N\u00E1zev pokryt\u00ED
+Valores_unicos=Jednoduch\u00E9 hodnoty
+Sean_iguales_a=stejn\u00E9 jako
+visibles=Viditeln\u00FD
+automatico=Automaticky
+maximo=Maximum
+next=Dal\u0161\u00ED
+insertar_punto=Vlo\u017Eit bod
+ventana_proyecto=Okno projektu
+alto=V\u00FD\u0161ka
+Error_abriendo_el_fichero=Chyba p\u0159i otev\u00EDr\u00E1n\u00ED souboru
+tarea_en_progreso=B\u011B\u017E\u00EDc\u00ED proces
+Valores=Hodnoty
+alta=Vysok\u00FD
+borrador=Koncept
+cargar_leyenda=Na\u010Dten\u00ED legendy
+Mostrar_Contorno=Zobrazit obrysov\u00E9 \u010D\u00E1ry
+Tipo_de_intervalos=Druh intervalu
+etiquetas=Popisky\:
+Color_inicio=Po\u010D\u00E1te\u010Dn\u00ED barva
+no_visibles=Nevidiln\u00E9
+grados=stupn\u011B
+select_unique_field=Vyber jedine\u010Dnou polo\u017Eku
+colocar_alrededor_todos=Um\u00EDstit kolem v\u0161ech polo\u017Eek
+fuente=P\u00EDsmo
+seleccionar_CRS=Vybrat CRS
+recorte_vista=Vy\u0159\u00EDznout dle pohledu
+En_pixels=V pixelech
+toda_la_tabla=cel\u00E1 tabulka
+medir_area=M\u011B\u0159it plochy
+Fichero=Soubor
+Zoom_pixel=Zoom na rozli\u0161en\u00ED rastru
+alinear=Zarovn\u00E1n\u00ED
+vistas=Pohledy
+Seleccionar=Vybrat
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zobraz prvky vrstvy, kter\u00E9 maj\u00ED jedine\u010Dnou hodnotu symbolu
+Dado_un_campo_de_atributos=Zadan\u00FD atribut
+Error_accediendo_a_los_datos=Chyba p\u0159i na\u010D\u00EDt\u00E1n\u00ED dat
+debe_estar_activada=Mus\u00ED b\u00FDt aktivn\u00ED
+__redimensionar_texto_escala=Zm\u011Bna velikosti textu dle zobrazovac\u00EDho m\u011B\u0159\u00EDtka
+Mas_100=Po\u010Det hodnot je vy\u0161\u0161\u00ED ne\u017E 100 a neumo\u017E\u0148\u00F2uj\u00ED informovat
+Next=Dal\u0161\u00ED
+Esten_contenidos_en=obsa\u017Een\u00FD v
+creation_date=Datum vytvo\u0159en\u00ED
+Localizador_por_atributo=Vyhledat podle atributu
+preparar_pagina=P\u0159ipravit str\u00E1nku
+guardado=Ulo\u017Een do
+Enlazar_a_ficheros_de_imagen=Odkaz na soubory s obr\u00E1zky
+siguiente=Dal\u0161\u00ED
+presentacion=Prezentace
+sobre_la_barra=na sloupci s m\u011B\u0159\u00EDtkem
+Tipo_de_linea=Druh linie
+tipo_dato=Datov\u00FD typ
+Color_final=Koncov\u00E1 barva\:
+servidor=Server
+Yardas=Yardy
+wcs_properties=WCS vlastnosti
+vacia=Pr\u00E1zdn\u00FD
+Contengan=obsahuje
+campo_altura_texto=V\u00FD\u0161ka textov\u00E9ho pole\:
+Subir_capa=P\u0159esunout vrstvu v\u00FD\u0161e
+Nombre=Jm\u00E9no
+ambito=Rozsah
+seleccione_tabla=V\u00FDb\u011Br tabulky
+Seleccion_por_tema=Vybrat t\u00E9ma
+agrupar=Seskupit
+lsup_izq=Naho\u0159e vlevo X
+Zoom=Zoom
+Configurar_localizador=Konfigurace lok\u00E1toru
+Fuente=P\u00EDsmo
+Seleccionar_de_las_capas_activas_los_elementos_que=Vybrat polo\u017Eky z aktivn\u00EDch vrstev kter\u00E9 jsou\:
+tamano=Velikost\:
+Previsualizacion_de_simbolo=N\u00E1hled symbol\u016F
+fallo_obtener_conexion_existente=Nelze z\u00EDskat vytvo\u0159en\u00E9 spojen\u00ED
+Nueva_tabla=Nov\u00E1 tabulka
+Aceptar=OK
+Intervalos_equidistantes=Stejn\u00E9 intervaly
+lppp=bnp
+N\u00FAm_intervalos=Po\u010Det interval\u016F
+descending_order_tooltip=Se\u0159adit podle zvolen\u00E9 polo\u017Eky sestupn\u011B
+borrar=Smazat/Zru\u0161it
+Grosor_de_linea=\u0160\u00ED\u0159ka \u010D\u00E1ry
+relleno=Zaplnit\:
+cambio_nombre=Zm\u011Bna n\u00E1zvu
+formato_incorrecto=Chybn\u00FD form\u00E1t
+mas_de_100_simbolos=V\u00EDce ne\u017E 100 symbol\u016F obvykle nevn\u00E1\u0161\u00ED do mapy \u017E\u00E1dn\u00E9 informace
+espaciado_vertical=Velikost vertik\u00E1ln\u00ED m\u0159\u00ED\u017Eky
+Editar_leyenda=Upravit styl
+rectangulo=Obd\u00E9ln\u00EDk
+Visualizacion=Zobrazit
+Pies=Stopy
+seleccionar_capas=Vybrat vrstvu
+nuevo_proyecto=Nov\u00FD projekt
+Herramientas=N\u00E1stroje
+bands=Okraje
+cancel=Zru\u0161it
+Vista=Pohled
+fallo_registrar_conexion=Nelze zaregistrovat spojen\u00ED
+tamano_metros=Velikost v metrech
+seleccione_campo_enlace=Zvolte propojovac\u00ED polo\u017Eku
+seleccionar_coberturas=Vybrat p\u0159ekryvy
+Mapa=Mapa
+insertar_recta=Vlo\u017Eit p\u0159\u00EDmku
+quiere_continuar=Chcete pokra\u010Dovat?
+descripcion=Popis
+importar=Import
+Quitar_Todos=Odstranit v\u0161e
+filtro=Filtr
+Pulgadas=Palce
+Ayuda=N\u00E1pov\u011Bda
+activar_regla=Aktivace prav\u00EDtka
+Recuperar_y_eliminar_otros_zoom=Obnovit a zru\u0161it p\u0159ibl\u00ED\u017Een\u00ED
+anchura=\u0160\u00ED\u0159ka\:
+seleccione_tabla_a_enlazar=Zvolte tabulku k propojen\u00ED
+propiedades_sesion=Vlastnosti sezen\u00ED
+ninguna_impresora_configurada=Nen\u00ED nastavena \u017E\u00E1dn\u00E1 tisk\u00E1rna
+Derecho=Prav\u00FD
+propiedades_vista=Vlastnosti pohledu
+en_el_mapa=Ve vrstv\u011B\:
+salir_tooltip=Konec
+propiedades_mapa=Nastaven\u00ED mapy
+Sean_disjuntos_a=rozpojit jako
+Elementos_seleccionados_de_la_capa=vybran\u00E9 polo\u017Eky z vrstvy
+resolucion_resultado=Rozli\u0161en\u00ED v\u00FDsledku\:
+Derecha=Prav\u00E1 strana
+Izquierdo=Vlevo
+Anadir_todos=P\u0159idat v\u0161e
+Zoom_Mas=Zoom In
+suma=Sou\u010Det
+Quitar=Odstranit
+Cancel=Zru\u0161it
+poligono=Polygon
+guardar_como=Ulo\u017Eit jako...
+png=PNG soubory
+Izquierda=Vlevo
+mostrar_unidades=Zobrazen\u00ED jednotek
+Abrir_una_capa=Otev\u0159\u00EDt vrstvu
+zooms=P\u0159ibl\u00ED\u017Een\u00ED
+(escala_maxima)=(maxim\u00E1ln\u00ED m\u011B\u0159\u00EDtko)
+exportar_pdf=Export do pdf
+Valores_Unicos=Jedine\u010Dn\u00E9 hodnoty
+Desplazamiento=P\u0159em\u00EDst\u011Bn\u00ED
+tipos_de_documentos=Druhy dokument\u016F
+seleccion_fuente=Vybrat font
+Zoom_Menos=Zoom Out
+finish=Konec
+Hiperenlace=Hyperlink
+Capa=Vrstva
+xmin=minimum X
+Aplicar=Pou\u017E\u00EDt
+drivers=Ovlada\u010De
+visible=Viditeln\u00FD
+comentarios=Koment\u00E1\u0159e
+editable=Editovateln\u00FD
+Previsualizacion=N\u00E1hled
+quitar_uniones=odebrat spojen\u00ED
+tamanyo_borde=Velikost okraje
+hostname=Host
+necesita_un_tema_activo=Aktivn\u00ED sch\u00E9ma je nezbytn\u00E9
+espaciado_horizontal=Velikost horizont\u00E1ln\u00ED m\u0159\u00ED\u017Eky
+guardar_cambios=Ulo\u017Eit zm\u011Bny?
+insertar_norte=Vlo\u017Eit sever
+Propiedades_de_la_Capa=Vlastnosti vrstvy
+Plain=Plain
+coor_geograficas=Geografick\u00E9 sou\u0159adnice
+estadisticas=Statistika
+Italic=Kurz\u00EDva
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Pole
+A2=A2
+seleccion=V\u00FDb\u011Br
+insertar_leyenda=Vlo\u017Eit legendu
+A1=A1
+escala_usuario=M\u011B\u0159\u00EDtko specifikov\u00E1no u\u017Eivatelem
+A0=A0
+Anadir=P\u0159idat
+Transparencia=Pr\u016Fhlednost
+Insertar=Vlo\u017Eit
+mostrar_descripcion=Zobrazen\u00ED popisu
+Font=P\u00EDsmo
+usuario=u\u017Eivatel
+Crucen_con=p\u0159ek\u0159\u00ED\u017Een\u00FD s
+Muestra_atributos=Zobrazit atributy vybran\u00FDch vrstev.
+medir_distancias=M\u011B\u0159it vzd\u00E1lenosti
+ancho=\u0160\u00ED\u0159ka
+acerca_de=O programu...
+area_trabajo=Pracovn\u00ED oblast
+Circulo=Kru\u017Enice
+este_por_debajo_de_=B\u00FDt pod
+Shapefile=Shapefile
+ok=Budi\u017E
+usar_marco=Pou\u017E\u00EDt r\u00E1mec
+normal=Normal
+Elegir_Fuente=Vybrat p\u00EDsmo
+siempre=V\u017Edy
+resto_valores=Ostatn\u00ED hodnoty
+insertar_escala=Vlo\u017Eit m\u011B\u0159\u00EDtko
+host=host
+color_texto=Barva textu\:
+conectar=Spojit
+guardar_proyecto=Ulo\u017Eit projekt
+visualizacion=Zobrazit
+Etiquetados=Popisov\u00E1n\u00ED
+titulo_confirmar=Potvrzen\u00ED
+activos=Aktivn\u00ED
+opacidad=Stupe\u0148 pr\u016Fsvitnosti
+registros=z\u00E1znamy
+posicion_linea=Pozice linie
+usar_titulo=Pou\u017E\u00EDt n\u00E1zev
+refrescar=Obnovit
+numero_incorrecto=Neplatn\u00E1 hodnota
+num_bandas=Okrajov\u00E9 hodnoty
+navegacion_vista=Navigace v pohledu
+(escala_minima)=(minim\u00E1ln\u00ED m\u011B\u0159\u00EDtko)
+Tabla_de_Atributos=Tabulka atribut\u016F
+tipo_fichero_proyecto=Soubor projektu gvSIG(*.gvsproj)
+Valor_azul=Hodnota modr\u00E9
+Unidades=Jednotky\:
+Millas=M\u00EDle
+no_activos=Neaktivn\u00ED
+titulo_fframetext=N\u00E1zev textov\u00E9ho pole
+Toquen=dot\u00FDkaj\u00EDc\u00ED se s
+fallo_realizar_consulta=Nelze vytvo\u0159it dotaz
+cartografico=Kartografick\u00E9
+Examinar=Proch\u00E1zet
+Ancho_Contorno=\u0160\u00ED\u0159ka ohrani\u010Den\u00ED
+seleccionar_tiempo=Nastavit \u010Das
+tipo_relleno=V\u00FDpl\u0148\:
+escala=M\u011B\u0159\u00EDtko
+barra=Sloupec\:
+texto=Text
+Formato=Dorm\u00E1t
+mantener_intervalo=Zachovat interval
+Identificar_Resultados=Identifikovat v\u00FDsledky
+este_por_encima_de=B\u00FDt nad
+Solo_para_capas_vectoriales=Jen pro vektory
+salir=Konec
+insertar_rectangulo=Vlo\u017Eit obd\u00E9ln\u00EDk
+Zoom_Previo=P\u0159edchoz\u00ED Zoom
+Atributo=Atribut
+horizontal=Horizont\u00E1ln\u00ED
+Generar_Intervalos=Generovat intervaly
+salvar_raster=Ulo\u017Eit jako rastr
+seleccion_campos=V\u00FDb\u011Br polo\u017Eek
+Detalles=Podrobnosti
+guardar_tooltip=Ulo\u017Eit zm\u011Bny do projektu
+extents_no_coincidentes=Zvolen\u00E1 hranice nesouhlas\u00ED s p\u016Fvodn\u00EDm obr\u00E1zkem.
+No_de_intervalos=Po\u010Det interval\u016F
+xmax=maximum X
+tipo_de_intervalo=Druh intervalu
+Rango_de_escalas=Velikost m\u011B\u0159\u00EDtka
+abajo=Dol\u016F
+_(Valores_unicos)=(unik\u00E1tn\u00ED hodnoty)
+infodef=Zobrazuje elementy vrstvy stejn\u00FDm symbolem.
+metros=Metry
+calidad=Kvalita
+editar_propiedades=Nahoru
+Intervalo=Interval
+puerto=port
+desagrupar=Odskupit
+Propiedades_texto=Vlastnosti textu
+valor_pixel=hodnota pixelu
+alinear_graficos=Zarovnat prvek
+Inicializando=Initializace
+campo_de_documentos_asociados=P\u0159\u00EDslu\u0161n\u00E9 dokumenty
+marco_vista=Framework pro zobrazen\u00ED
+Escala=M\u011B\u0159\u00EDtko
+Zoom_Acercar=P\u0159ibl\u00ED\u017Eit
+fallo_crear_conexion=Chyba spojen\u00ED
+recorte=o\u0159ez\u00E1n\u00ED
+insertar_circulo=Vlo\u017Eit kru\u017Enici
+Simbolo_unico=Jedine\u010Dn\u00FD symbol
+necesita_un_tema_vectorial_activo=Aktivn\u00ED vektorov\u00E9 sch\u00E9ma je nezbytn\u00E9
+muestra_consola_tooltip=Zobraz v konzoli
+adjust_transparency=Nastaven\u00ED pr\u016Fhlednosti
+Archivo=Soubor
+ascending_order_tooltip=Se\u0159adit podle zvolen\u00E9 polo\u017Eky vzestupn\u011B
+desviacion_tipica=Standardn\u00ED odchylka
+espere=Pros\u00EDm \u010Dekejte
+equal_intervals=Shodn\u00E9 intervaly
+alineamiento=Zarovn\u00E1n\u00ED\:
+introduce_nombre=Zadat nov\u00FD n\u00E1zev.
+abrir_proyecto=Otev\u0159\u00EDt projekt
+No_Shape=Tato vrstva nen\u00ED typu Shape
+Campo=Pole
+Campo_de_etiquetado=Popisn\u00E9 pole
+sincronizar_color_borde_relleno=Sjednotit barvu obrysu a v\u00FDpln\u011B\:
+escala_minima=minim\u00E1ln\u00ED m\u011B\u0159\u00EDtko
+transparencia=Pr\u016Fhlednost
+linea=Linie
+Nivel_de_transparencia=\u00DArov\u011B\u00F2 pr\u016Fhlednosti
+driver=ovlada\u010D
+Etiquetado=Popisov\u00E1n\u00ED
+Guardar_leyenda=Ulo\u017Eit styl
+Rasterfiles=Rastrov\u00E9 soubory
+exportar_a=Exportovat jako...
+Zoom_Real=1\:1 Zoom
+Estilo=Styl\:
+No_reconocido=Nerozpozn\u00E1n
+Escala_Minima=Minim\u00E1ln\u00ED M\u011B\u0159\u00EDtko
+Cruz=P\u0159ek\u0159\u00ED\u017Een\u00ED
+linea_grafica=Linie
+alias=Alias
+Color_inicial=Po\u010D\u00E1te\u010Dn\u00ED barva\:
+malla_activada=Aktivovat grid
+Etiquetas_estandar=Standardn\u00ED popisky
+Zoom_al_Tema=Zoom na vrstvu
+Size=Velikost
+Tabla=Tabulka
+natural_intervals=P\u0159irozen\u00E9 intervaly
+Propiedades_escala_grafica=Vlastnosti m\u011B\u0159\u00EDtka
+distance_units=Jednotky vzd\u00E1lenosti
+escala_maxima=maxim\u00EDln\u00ED m\u011B\u0159\u00EDtko
+bandas=Okraje
+Archivos_de_Disco=Soubor na disku
+Recuperar_leyenda=Nahr\u00E1t legendu
+propiedades_marco_vista=Vlastnosti r\u00E1mu pohledu
+Elegir_Color=Select Barva
+Informacion=Informace
+usar_rango=Pou\u017Eit\u00FD rozsah
+Valor_rojo=Hodnota \u010Derven\u00E9
+eliminar_extremos=Odstranit hrany
+Se_superponen_a=p\u0159es
+nombre_capa=N\u00E1zev vrstvy
+DGNFiles=DGN soubory
+No_mostrar=Nezobrazit vrstvu v p\u0159\u00EDpad\u011B m\u011B\u0159\u00EDtka
+Tipo_no_reconocido=Nezn\u00E1m\u00FD druh
+Altura_fija_de_texto=Pevn\u00E1 v\u00FD\u0161ka textu
+Enlazar_a_fichero_de_texto=Odkaz na textov\u00E9 soubory
+Anterior=P\u0159edchoz\u00ED
+respuesta_error_servidor=Nelze z\u00EDskat p\u0159ekryv
+colocar_delante=P\u0159en\u00E9st dop\u0159edu
+Escala_Maxima=Maxim\u00E1ln\u00ED M\u011B\u0159\u00EDtko
+simple=Prost\u00FD
+Cambios_de_estilo=Zm\u011Bny stylu
+WMS=WMS
+margenes=Okraje\:
+link=Propojit
+propiedades_tabla=Vlastnosti tabulky
+exportar=Exportovat
+agrupar_graficos=Seskupen\u00ED prvk\u016F
+Leyenda_Por_Defecto=Implicitn\u00ED legenda
+Kilometros=Kilometr\u016F
+Origen_de_Datos=Vznik dat\:
+nuevo=Nov\u00FD
+descending_order=Sestupn\u00E9 po\u0159ad\u00ED
+prueba_conexion=Test spojen\u00ED
+Color_de_la_Linea=Barva linie
+error_lectura=Nelze \u010D\u00EDst soubor
+Quitar_capa=Odstranit vrstvu
+recorte_colas=O\u0159ez fronty
+nombre_sesion=N\u00E1zev sezen\u00ED
+_(Intervalos)=(Intervaly)
+Graficos=Prvky
+bd=db
+desde_arriba=Shora\:
+Cancelar=Zru\u0161it
+poner_temas_a=Nastavit t\u00E9ma na ...
+resolucion=Rozli\u0161en\u00ED
+infobreak=Zobrazuje elementy vrstvy za pomoc\u00ED rozsahu barev.
+guardar_leyenda=Ulo\u017Eit legendu
+kilometros=Kilometr\u016F
+map_units=Mapov\u00E9 jednotky
+Abrir_Imagen=Otev\u0159\u00EDt obr\u00E1zek
+varianza=Odchylka
+configurar_localizador=Konfikurace mapy lok\u00E1toru
+abrir_tooltip=Otev\u0159\u00EDt existuj\u00EDc\u00ED projekt
+ajustes_linea_grafica=Nastaven\u00ED lini\u00ED
+Link=Odkaz
+marco=R\u00E1mec
+realce=vylep\u0161en\u00ED
+Zoom_Alejar=Odd\u00E1lit
+gestion_encuadre=Spr\u00E1va z\u00E1znamu pracovn\u00EDch oblast\u00ED
+Shapefiles=Shapefiles
+tamanyo_fuente=Velikost p\u00EDsma
+Bajar_capa=P\u0159esun vrstvy dol\u016F
+__proyeccion_actual=Aktu\u00E1ln\u00ED projekce\:
+Tabla_de_prueba=Testovac\u00ED tabulka
+Metros=Metry

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_es.properties	(revision 42196)
@@ -0,0 +1,737 @@
+#Translations for language: es
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Consulta
+contraste=Contraste
+colocar_alrededor_seleccionados=Colocar alrededor de los gr\u00E1ficos seleccionados.
+ancho_alto=Ancho X Alto
+media=Media
+edit=edita
+Quitar_todos=Quitar todos
+Parametros=Par\u00E1metros
+conexion_correcta=Conexi\u00F3n correcta
+selection_color=Color de la selecci\u00F3n
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00E1 el \u00E1ngulo con el que se mostrar\u00E1 el texto de la etiqueta</HTML>
+cerrar=Cerrar
+titulo=Gestor de proyectos
+tipo_simbolo=Tipo de s\u00EDmbolo\:
+documentos_existentes=Documentos existentes
+stop_edition=Terminar edici\u00F3n
+aceptar=Aceptar
+grosor_linea=Grosor de l\u00EDnea\:
+Siguiente=Siguiente
+ver_tooltip=Muestra la ventana de proyecto
+Intersecten_con=intersecten con
+Color_de_Relleno=Color de Relleno
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+_(Simbolo_unico)=(S\u00EDmbolo \u00FAnico)
+propiedad=property
+parametros=Par\u00E1metros
+tipo_linea=Tipo de L\u00EDnea\:
+Servidor=Servidor
+agrupar_capas=Agrupar capas
+capaWMS=CapaWMS
+Simbologia=Simbolog\u00EDa
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+Ver=Ver
+copiar=copy
+guardar=guardar
+Zoom_Completo=Zoom Completo
+pixels=p\u00EDxeles
+anadir_titulo=A\u00F1adir t\u00EDtulo
+leyenda=Leyenda
+Milimetros=Mil\u00EDmetros
+vertices=vertices
+Tipo_de_leyenda=Tipo de leyenda
+Perimetro=Per\u00EDmetro
+punto=Punto
+borra_seleccion=Borra selecci\u00F3n
+Cambio_Estilo=Cambio Estilo
+Anadir_capa=A\u00F1adir Capa
+to_annotation=Transformar a capa de anotationes
+Ajustar_cobertura_wcs=Ajustar cobertura WCS
+S\u00EDmbolo=S\u00EDmbolo
+eliminar_capa=Eliminar Capa
+web_map_context=Web Map Context
+ver_tabla_atributos=Ver Tabla de atributos
+Cerrar=Cerrar
+espacio=Espacio\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Muestra los elementos de la capa usando una gama de colores en funci\u00F3n del valor de un determinado campo de atributos
+select_all=Seleccionar todos
+sin_realce=Sin Realce
+Imprimir=Imprimir
+join=Uni\u00F3n
+simplificar=Simplificar
+insertar_imagen=Insertar Imagen
+Cambio_de_estilo=Cambio de estilo
+Campo_de_clasificacion=Campo de clasificaci\u00F3n
+paste=Pegar
+guardar_clave=Guardar clave
+options.firewall.http.password=Contrase\u00F1a
+_(Etiquetas_estandar)=(Etiquetas est\u00E1ndar)
+Error_guardando_la_plantilla=Error guardando la plantilla
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+baja=Baja
+renombrar=Renombrar
+Error_guardando_la_leyenda=Error guardando la leyenda
+insertar_texto=Insertar Texto
+options.network.status=Estado de la conexi\u00F3n
+Extent=Extent
+insert_column=Inserta columna
+fichero_incorrecto=Fichero incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+online=Conectado
+insertar_polilinea=insertar polil\u00EDnea
+seleccionar_formato=Seleccionar Formato
+statistics=Estad\u00EDsticas
+servidor_wcs_no_responde=El servidor seleccionado no responde
+quitar_enlaces=Quitar enlaces
+causa_error_desconocida=Error inesperado del servidor
+Anadir_Capa=A\u00F1adir Capa
+sin_titulo=Sin t\u00EDtulo
+finalizar=Finalizar
+arriba=Arriba
+Igual_que_la_impresora=Igual que la impresora
+Un_Layer=Debe seleccionar al menos una capa.
+Indexando_espacialmente=Indexando espacialmente la capa
+informacion=Informaci\u00F3n
+insertar_cajetin=insertar_cajetin
+seleccionar_todos=Seleccionar todos
+guardar_como_plantilla=Guardar como plantilla
+desde_izquierda=Desde la Izquierda\:
+colocar_a_margenes=Colocar con referencia a margenes.
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00E1 el alto con el que se mostrar\u00E1 la etiqueta</HTML>
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa cuando la escala
+Inferior=Inferior
+Valor_verde=Valor Verde
+fallo_obtener_tablas=Fallo al obtener las tablas de la base de datos
+colocar_detras=Colocar detr\u00E1s
+vertical=Vertical
+fichero_existe=El fichero seleccionado ya existe como banda de la capa
+imagen=Imagen
+tipo_leyenda=Ficheros de tipo leyenda (*.GVL)
+enlace_vivo=Enlace vivo
+importar_extent=Importar el extent actual de la vista
+quantile_intervals=Intervalos cuantiles
+error_escritura=No se pudo guardar el proyecto
+tamanyo_pagina=tama\u00F1o de p\u00E1gina
+seleccionar_parametros=Seleccionar los par\u00E1metros
+desea_borrar_la_capa=Est\u00E1 seguro que desea borrar las capas activas.
+abrir=Abrir
+General=General
+unidades=Unidades\:
+configuracion_andami_tooltip=Configuraci\u00F3n Andami
+Cuadrado=Cuadrado
+rellenar_marco_vista=Rellenar marco de la vista
+Ancho_de_linea=Ancho de l\u00EDnea
+Dxffiles=Ficheros .DXF
+tipo_de_leyenda=Tipo de leyenda
+En_metros=En metros
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+coincidir_tamanyo=coincidir tama\u00F1o
+Zoom_a_la_capa=Zoom a la capa
+options.firewall.http.nonProxy=Conectar directamente a
+Descripcion=Descripci\u00F3n
+agrupar_linea=Agrupar l\u00EDnea gr\u00E1fica con gr\u00E1ficos
+info=Info
+Valor_Bandas=Valor Bandas
+desconectar=Desconectar
+insertar_linea=Insertar L\u00EDnea
+path=Ruta
+clave=Clave
+Indexando=Indexando...
+owner=Propietario
+pref.general=General
+optinos.network.click_to_test_connection=Pulse el bot\u00F3n para comprobar la conexi\u00F3n
+recta=Recta
+linf_der=Inf. der.  X
+shape_seleccion=Exportar selecci\u00F3n.
+cuando_activo=Cuando Activo
+nuevo_tamano_fuente=Nuevo tama\u00F1o de fuente\:
+abrir_plantilla=Abrir plantilla
+propiedades_grafico=Propiedades Gr\u00E1fico
+Zoom_Menos_Vista=Zoom Menos sobre la Vista
+Nombres=Nombres
+color=Color\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar los elementos del mapa con el valor de un determinado campo
+confirmar_borrar=\u00BFSeguro que desea borrar el elemento?
+distribuir=Distribuir\:
+options.firewall.http.user=Nombre de usuario
+circulo=C\u00EDrculo
+detalles=Detalles
+por_debajo_de=por debajo de\:
+Habilitar_etiquetado=Habilitar etiquetado
+dehacer=deshacer
+registros_seleccionados_total=Total registros seleccionados
+ymin=Y m\u00EDnima
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Muestra todos los elementos de una capa usando el mismo s\u00EDmbolo
+fallo_capas=fallo capas
+propiedades=Propiedades
+reproyectar_aviso=La proyecci\u00F3n de la capa no es igual que la de la vista.\nAVISO\: Puede ser inexacto con algunas transformaciones.\nPor favor, lea la documentaci\u00F3n.
+Ajustar_transparencia=Ajustar Transparencia
+hasta=hasta
+desagrupar_graficos=Desagrupar gr\u00E1ficos
+back=Anterior
+start_edition=Comenzar edici\u00F3n
+intervalo=intervalo
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00F3n
+pixeles=p\u00EDxeles
+utilizar_margenes_impresora=Utilizar m\u00E1rgenes de la impresora.
+insertar_fila=insertar fila
+Al_leer_la_leyenda=Al leer la leyenda
+Simbolo=S\u00EDmbolo
+Capas=Capas
+muestra=muestra
+Seleccionar_fichero=Seleccionar fichero
+select_none=Quitar todos
+recuento=Recuento
+Otros=Otros
+Zoom_Mas_Vista=Zoom M\u00E1s sobre la Vista
+navegacion=Navegaci\u00F3n
+infovalue=Muestra elementos de la capa usando un s\u00EDmbolo por cada valor.
+visualizar_cuadricula=Visualizar Malla
+Etiqueta=Etiqueta
+nuevo_tooltip=Crea un nuevo proyecto
+Sample=Ejemplo
+Valor=Valor
+Tiempo=Tiempo
+Campo_clasifica=Campo de Clasificaci\u00F3n
+insertar_poligono=Insertar Pol\u00EDgono
+Mostrar_siempre=Mostrar siempre
+angulo_rotacion=\u00C1ngulo de rotaci\u00F3n\:
+mapas=Mapas
+configurar=Configurar
+campo=Campo
+por_encima_de=por encima de\:
+leyenda_campo_unido=Se est\u00E1 utilizando un campo de la uni\u00F3n en la leyenda (y/o etiquetado). Cambie la leyenda antes de quitar la uni\u00F3n, por favor.
+nombre=Nombre
+alerta=Aviso
+propiedades_marco_leyenda=Propiedades del marco de la leyenda
+Encuadre_Vista=Encuadre sobre la Vista
+Intervalos_por_rupturas_naturales=Intervalos por rupturas naturales.
+extension=Extensi\u00F3n
+modification_date=\u00DAltima fecha de modificaci\u00F3n
+formato=Formato
+igual_todos_lados=Desplazamiento igual por todos lados.
+Back=Anterior
+Nuevo_conjunto=Nuevo conjunto
+coincidir_tamano=Coincidir tama\u00F1o\:
+Zoom_Select=Zoom a lo seleccionado
+Usar_indice_espacial=Usar \u00EDndice espacial
+background_color=Color de fondo
+north=Norte
+remove_column=Elimina columna
+reproyectar_pregunta=\u00BFDesea reproyectar?
+Cambio_Color=Cambio Color
+seleccione_fecha=Seleccione una fecha...
+fallo_crear_pool=Fallo en la creaci\u00F3n del Pool de Conexiones
+Intervalos=Intervalos
+multiples_intervalos=multiples intervalos
+jpg=Ficheros JPEG
+Herramientas_vista=Herramientas de la Vista
+Encuadre=Encuadre
+Triangulo=Tri\u00E1ngulo
+editar_vertices=editar vertices
+remove_row=Elimina fila
+tamano_posicion=tama\u00F1o/posici\u00F3n
+untitled=Sin t\u00EDtulo
+base_datos=Base de datos
+__espacio_vertical=Espacio Vertical\:
+Salir=Salir
+browse=Navegar
+altura=Altura\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Se va a tener en cuenta para borrar los registros desde
+select_geom_field=Selecciona el campo que lleva la geometr\u00EDa
+seleccione_tabla_origen=Seleccione la tabla origen de la join
+Superior=Superior
+ascending_order=Orden ascendente
+box=box
+insertar_vista=Insertar Vista
+agrupacion=Agrupaci\u00F3n
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00E1 el color con el que se mostrar\u00E1 la etiqueta</HTML>
+Color_Contorno=Color Contorno
+Centimetros=Cent\u00EDmetros
+export=Exportar
+Nombre_que_se_le_dara_al_zoom=Nombre que se le dar\u00E1 al zoom
+tamano_pagina=Tama\u00F1o de p\u00E1gina\:
+Accion_Predefinida=Acci\u00F3n Predefinida
+cortar=cut
+Bold=Bold
+minimo=M\u00EDnimo
+divisiones_izquierda=Divisiones a la izquierda
+pegar=paste
+tag=tag
+Imagen=Imagen
+propiedades_marco_imagenes=Propiedades del marco de im\u00E1genes
+options.firewall.socks.host=Servidor proxy SOCKS
+orientacion=Orientaci\u00F3n\:
+el_numero_maximo_de_intervalos_para_este_campo_es=El n\u00FAmero m\u00E1ximo de intervalos para este campo es
+tablas=Tablas
+Seleccionar_del_conjunto=Seleccionar del conjunto
+Preparar_pagina=Preparar p\u00E1gina
+error_comunicacion_servidor=Se ha producido un error comunicando con el servidor
+num_filas=N\u00FAmero de filas
+Muestra_los_atributos_de_las_capas_seleccionadas=Muestra los atributos de las capas seleccionadas
+anterior=Anterior
+__seleccion_de_fuente=Selecci\u00F3n de fuente
+rango_de_escalas=Rango de escalas
+mosaico_tooltip=Mosaico
+Calcular_intervalos=Calcular intervalos
+propiedades_cajetin=Propiedades del cajet\u00EDn
+lineal_directo=Lineal Directo
+Simbolo_Unico=S\u00EDmbolo \u00DAnico
+plantilla=template
+propiedades_raster=Propiedades del r\u00E1ster
+Anadir_al_conjunto=A\u00F1adir al conjunto
+Guardar=Guardar
+bmp=Ficheros de tipo bmp
+Eliminar=Eliminar
+show_this_dialog_next_startup=Mostrar este di\u00E1logo la pr\u00F3xima vez
+seleccionar_por_rectangulo=Seleccionar por rect\u00E1ngulo
+ymax=Y m\u00E1xima
+__lineas=l\u00EDneas
+Leyenda=Leyenda
+Style=Estilo
+Capas_del_localizador=Capas del localizador
+Origen_de_datos=Origen de datos
+Personalizado=Personalizado
+introduzca_intervalo_deseado=introduzca el intervalo deseado
+Linea=L\u00EDnea
+en_unidades=en unidades
+Zoom_Completo_Vista=Zoom Completo sobre la Vista
+Coberturas=Coberturas
+Guardar_el_zoom_actual=Guardar el zoom
+seleccionar_por_punto=Seleccionar por punto
+cancelar=Cancelar
+nombre_cobertura=Nombre de la cobertura
+Valores_unicos=Valores \u00FAnicos
+Sean_iguales_a=sean iguales a
+visibles=Visibles
+automatico=Autom\u00E1tico
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+maximo=M\u00E1ximo
+next=Siguiente
+insertar_punto=Insertar Punto
+ventana_proyecto=Ventana de proyecto
+alto=Alto
+restore=Restaurar
+Error_abriendo_el_fichero=Error abriendo el fichero
+tarea_en_progreso=Tarea en progreso
+Valores=Valores
+alta=Alta
+borrador=Borrador
+cargar_leyenda=Cargar leyenda
+necesita_una_capa_activa=Necesita una capa activa
+Mostrar_Contorno=Mostrar Contorno
+Tipo_de_intervalos=Tipo de intervalos
+etiquetas=Etiquetas\:
+Color_inicio=Color de inicio
+no_visibles=No visibles
+grados=Grados\:
+select_unique_field=Seleccione el campo \u00FAnico
+colocar_alrededor_todos=Colocar alrededor de todos los gr\u00E1ficos.
+fuente=Fuente
+seleccionar_CRS=Seleccionar CRS
+recorte_vista=Recorte a vista
+En_pixels=En pixels
+toda_la_tabla=Toda la tabla
+medir_area=Medir \u00C1rea
+Fichero=Fichero
+desagrupar_capas=desagrupar capas
+Zoom_pixel=Zoom a la resoluci\u00F3n del r\u00E1ster
+alinear=Alinear
+vistas=Vistas
+Seleccionar=Seleccionar
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Muestra los elementos de la capa usando un s\u00EDmbolo por cada valor \u00FAnico
+Dado_un_campo_de_atributos=Dado un campo de atributos
+Error_accediendo_a_los_datos=Error accediendo a los datos
+debe_estar_activada=Debe estar activada
+__redimensionar_texto_escala=Redimensionar el texto a escala con la vista.
+elemento_ya_existe=el elemento ya existe
+Mas_100=El n\u00FAmero de valores es superior a 100, y no aporta informaci\u00F3n
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+Next=Siguiente
+Esten_contenidos_en=est\u00E9n contenidos en
+creation_date=Fecha de creaci\u00F3n
+Localizador_por_atributo=Localizador por atributo
+preparar_pagina=Preparar p\u00E1gina
+guardado=Guardado en
+Enlazar_a_ficheros_de_imagen=Enlazar a ficheros de imagen
+siguiente=Siguiente
+presentacion=Presentaci\u00F3n
+sobre_la_barra=Sobre la barra
+Tipo_de_linea=Tipo de linea
+tipo_dato=Tipo de Dato
+Color_final=Color final\:
+servidor=Servidor
+Yardas=Yardas
+wcs_properties=Propiedades WCS
+vacia=Vac\u00EDa
+Contengan=contengan
+num_columnas=N\u00FAmero de columnas
+campo_altura_texto=Campo de altura de texto\:
+Subir_capa=Subir capa
+Nombre=Nombre
+ambito=\u00C1mbito
+seleccione_tabla=Selecciona la tabla
+agrupar=Agrupar
+test_now=Comprobar ahora
+lsup_izq=Sup. izq. X
+Zoom=Zoom
+Configurar_localizador=Configurar Localizador ...
+Fuente=Fuente
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar de las capas activas los elementos que\:
+options.firewall.http.port=Puerto proxy HTTP
+localizador=Localizador
+desde=desde
+tamano=Tama\u00F1o\:
+Previsualizacion_de_simbolo=Previsualizaci\u00F3n de s\u00EDmbolo
+fallo_obtener_conexion_existente=Fallo al obtener una conexi\u00F3n ya creada
+Nueva_tabla=Nueva Tabla
+Aceptar=Aceptar
+mapa=mapa
+Intervalos_equidistantes=Intervalos equidistantes.
+lppp=ppp
+descending_order_tooltip=Ordena por el campo seleccionado en orden descendente
+borrar=Borrar
+Grosor_de_linea=Grosor de l\u00EDnea
+relleno=Relleno\:
+cambio_nombre=Cambio de nombre
+formato_incorrecto=Formato incorrecto
+mas_de_100_simbolos=M\u00E1s 100 de s\u00EDmbolos no suelen aportar informaci\u00F3n en un plano.
+espaciado_vertical=Espaciado vertical de la malla
+Editar_leyenda=Editar Leyenda
+rectangulo=Rect\u00E1ngulo
+restore_defaults=Restaurar valores predeterminados
+Visualizacion=Visualizaci\u00F3n
+Pies=Pies
+seleccionar_capas=Seleccionar Capas
+nuevo_proyecto=Nuevo proyecto
+Herramientas=Herramientas
+bands=Bandas
+cancel=Cancelar
+Vista=Vista
+fallo_registrar_conexion=Fallo en registro de una conexi\u00F3n
+tamano_metros=Tama\u00F1o en metros
+seleccione_campo_enlace=Seleccione el campo por el que enlazar
+preferences=Preferencias...
+seleccionar_coberturas=Seleccionar Coberturas
+Mapa=Mapa
+insertar_recta=Insertar Recta
+quiere_continuar=\u00BFEst\u00E1 seguro de que quiere continuar?
+descripcion=Descripci\u00F3n
+importar=Importar
+Quitar_Todos=Quitar Todos
+filtro=Filtro
+Pulgadas=Pulgadas
+Ayuda=Ayuda
+activar_regla=Activar regla
+Recuperar_y_eliminar_otros_zoom=Recuperar y eliminar otros zooms
+edicion=edici\u00F3n
+anchura=Anchura\:
+capa=Capa
+seleccione_tabla_a_enlazar=Seleccione la tabla a enlazar
+propiedades_sesion=Propiedades de la sesi\u00F3n
+ninguna_impresora_configurada=Ninguna impresora configurada
+Derecho=Derecho
+propiedades_vista=Propiedades de la vista
+en_el_mapa=En el mapa\:
+salir_tooltip=Salir
+propiedades_mapa=Propiedades del mapa
+Sean_disjuntos_a=sean disjuntos a
+cut=Cortar
+Elementos_seleccionados_de_la_capa=elementos seleccionados de la capa
+resolucion_resultado=Resoluci\u00F3n del resultado\:
+Derecha=Derecha
+Izquierdo=Izquierdo
+Anadir_todos=A\u00F1adir todos
+Zoom_Mas=Zoom M\u00E1s
+suma=Suma
+Quitar=Quitar
+Cancel=Cancelar
+poligono=Pol\u00EDgono
+guardar_como=Guardar como...
+png=Ficheros png
+Izquierda=Izquierda
+mostrar_unidades=Mostrar unidades
+Abrir_una_capa=A\u00F1adir capa
+zooms=Zooms
+(escala_maxima)=(escala m\u00E1xima)
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+exportar_pdf=Exportar a pdf
+Valores_Unicos=Valores \u00DAnicos
+Desplazamiento=Desplazamiento
+tipos_de_documentos=Tipos de documentos
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+seleccion_fuente=Selecci\u00F3n de fuente
+pref.network.firewall=Firewall/Proxy
+Zoom_Menos=Zoom Menos
+finish=Finalizar
+Hiperenlace=Hiperenlace
+Capa=Capa
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+xmin=X m\u00EDnima
+Aplicar=Aplicar
+drivers=Drivers
+visible=Visible
+comentarios=Comentarios
+editable=Editable
+Previsualizacion=Previsualizaci\u00F3n
+quitar_uniones=Quitar uniones
+tamanyo_borde=Tama\u00F1o del borde
+hostname=Hostname
+poner_capas_a=Poner capas a ...
+espaciado_horizontal=Espaciado horizontal de la malla
+guardar_cambios=\u00BFQuiere guardar los cambios?
+insertar_norte=Insertar norte
+Propiedades_de_la_Capa=Propiedades de la Capa
+Plain=Plain
+coor_geograficas=Coor. Geograficas
+estadisticas=Estad\u00EDsticas
+Italic=Italic
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Campos
+A2=A2
+seleccion=Selecci\u00F3n
+insertar_leyenda=Insertar Leyenda
+A1=A1
+escala_usuario=Escala especificada por el usuario
+A0=A0
+Anadir=A\u00F1adir
+Transparencia=Transparencia
+propiedades_capa=Propiedades de la capa
+modificar=Modify
+Insertar=Insertar
+mostrar_descripcion=Mostrar descripci\u00F3n
+Font=Fuente
+usuario=Usuario
+Crucen_con=crucen con
+Muestra_atributos=Muestra los atributos de las capas seleccionadas.
+medir_distancias=Medir distancias
+ancho=Ancho
+acerca_de=Acerca de...
+area_trabajo=Area de trabajo
+Circulo=C\u00EDrculo
+offline=Desconectado
+este_por_debajo_de_=Est\u00E9 por debajo de
+Shapefile=Shapefile
+ok=Ok
+usar_marco=Usar marco
+normal=Normal
+Elegir_Fuente=Elegir Fuente
+siempre=Siempre
+resto_valores=Resto de valores
+insertar_escala=Insertar Escala
+host=m\u00E1quina
+color_texto=Color del texto\:
+realmente_desea_guardar=Realmente desea guardar
+conectar=Conectar
+guardar_proyecto=Guardar proyecto
+visualizacion=Visualizaci\u00F3n
+Etiquetados=Etiquetados
+titulo_confirmar=Confirmaci\u00F3n
+activos=Activos
+opacidad=Opacidad
+registros=registros
+posicion_linea=Posici\u00F3n de la l\u00EDnea
+usar_titulo=Usar t\u00EDtulo
+refrescar=Refrescar
+numero_incorrecto=N\u00FAmero incorrecto
+num_bandas=N\u00FAmero de bandas
+navegacion_vista=Navegaci\u00F3n Vista
+(escala_minima)=(escala m\u00EDnima)
+Tabla_de_Atributos=Tabla de Atributos
+tipo_fichero_proyecto=Fichero de proyecto gvSIG (*.gvsproj)
+Valor_azul=Valor Azul
+Unidades=Unidades\:
+Millas=Millas
+no_activos=No activos
+options.firewall.http.host=Servidor proxy HTTP
+titulo_fframetext=T\u00EDtulo del campo de texto
+Toquen=toquen
+fallo_realizar_consulta=Fallo al realizar una consulta
+cartografico=Cartogr\u00E1fico
+Examinar=Examinar
+Ancho_Contorno=Ancho Contorno
+seleccionar_tiempo=Seleccionar la posici\u00F3n para el tiempo
+tipo_relleno=Tipo de Relleno\:
+escala=Escala
+import=Importar
+deshacer=deshacer
+barra=Barra\:
+texto=Texto
+Formato=Formato
+mantener_intervalo=Mantener intervalo
+Identificar_Resultados=Identificar Resultados
+este_por_encima_de=Est\u00E9 por encima de
+Solo_para_capas_vectoriales=Solo para capas vectoriales
+salir=Salir
+grupo=grupo
+insertar_rectangulo=Insertar Rect\u00E1ngulo
+Zoom_Previo=Zoom Previo
+Atributo=Atributo
+horizontal=Horizontal
+Generar_Intervalos=Generar Intervalos
+salvar_raster=Salvar a r\u00E1ster
+seleccion_campos=Seleccione los campos
+initial_warning=<html><b>\u00A1ATENCI\u00D3N\!</b><br>Versi\u00F3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00F1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00FAltima versi\u00F3n estable.</html>
+Detalles=Detalles
+Error_exportando_SLD=Error exportando SLD
+simbolo=s\u00EDmbolo
+guardar_tooltip=Guarda los cambios del proyecto
+extents_no_coincidentes=El extent de la imagen seleccionada no coincide con la imagen de origen.
+Formato_de_numero_erroneo=Formato de n\u00FAmero incorrecto
+No_de_intervalos=N\u00BA de intervalos
+tipo_de_intervalo=Tipo de intervalo
+xmax=X m\u00E1xima
+Rango_de_escalas=Rango de escalas
+_(Valores_unicos)=(Valores \u00FAnicos)
+abajo=Abajo
+infodef=Muestra todos los elementos de una capa usando el mismo s\u00EDmbolo.
+to_palette=Cambiar a paleta
+polilinea=polil\u00EDnea
+metros=Metros
+copy=Copiar
+Intervalo=Intervalo
+editar_propiedades=Editar propiedades
+calidad=Calidad
+puerto=Puerto
+desagrupar=Desagrupar
+Propiedades_texto=Propiedades del texto
+valor_pixel=Valor de pixel
+transparencia_pixel=Transparencia por pixel
+alinear_graficos=Alinear gr\u00E1ficos
+Inicializando=Inicializando
+marco_vista=Marco de la vista
+campo_de_documentos_asociados=Campo de documentos asociados
+Escala=Escala
+Zoom_Acercar=Zoom acercar
+fallo_crear_conexion=Fallo al crear la conexi\u00F3n
+recorte=recorte
+insertar_circulo=Insertar C\u00EDrculo
+Simbolo_unico=S\u00EDmbolo \u00FAnico
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+muestra_consola_tooltip=Muestra la consola
+adjust_transparency=Ajustar Transparencia
+Archivo=Archivo
+ascending_order_tooltip=Ordena por el campo seleccionado en orden ascendente
+desviacion_tipica=Desviaci\u00F3n t\u00EDpica
+warning=Aviso
+espere=Por favor, espere
+equal_intervals=Intervalos iguales
+alineamiento=Alineamiento\:
+introduce_nombre=Introduce el nuevo nombre
+abrir_proyecto=Abrir proyecto
+No_Shape=Este Layer no es de tipo Shape
+Campo_de_etiquetado=Campo de etiquetado
+Campo=Campo
+sincronizar_color_borde_relleno=Sincronizar el color del borde con el del relleno\:
+escala_minima=escala m\u00EDnima
+transparencia=Transparencia
+linea=L\u00EDnea
+Nivel_de_transparencia=Nivel de transparencia
+driver=driver
+Etiquetado=Etiquetado
+Guardar_leyenda=Guardar leyenda
+Rasterfiles=Ficheros r\u00E1ster
+insert_row=Insertar fila
+Zoom_Real=Zoom 1\:1
+exportar_a=Exportar a...
+Estilo=Estilo\:
+No_reconocido=No reconocido
+Escala_Minima=Escala M\u00EDnima
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00E1 la fuente con el que se mostrar\u00E1 de la etiqueta</HTML>
+zoom_mas_vista=Zoom M\u00E1s Vista
+Cruz=Cruz
+Seleccion_por_capa=Seleccion por capa
+linea_grafica=L\u00EDnea gr\u00E1fica
+alias=Alias
+malla_activada=Malla activada
+Color_inicial=Color inicial\:
+Etiquetas_estandar=Etiquetas est\u00E1ndar
+Size=Size
+Tabla=Tabla
+natural_intervals=Intervalos naturales
+Propiedades_escala_grafica=Propiedades de la escala
+distance_units=Unidades de medida
+escala_maxima=escala m\u00E1xima
+Recuperar_leyenda=Recuperar leyenda
+Archivos_de_Disco=Ficheros de disco
+bandas=Bandas
+propiedades_marco_vista=Propiedades del marco de la vista
+Elegir_Color=Elegir Color
+Informacion=Informaci\u00F3n
+usar_rango=Usa un rango
+Valor_rojo=Valor Rojo
+Se_superponen_a=se superponen a
+eliminar_extremos=Eliminar Extremos
+nombre_capa=Nombre de la capa
+pila_de_comandos=pila de comandos
+DGNFiles=Ficheros .DGN
+No_mostrar=No mostrar la capa cuando la escala
+de=de
+Tipo_no_reconocido=Tipo no reconocido
+Altura_fija_de_texto=Altura fija de texto
+base=base
+Enlazar_a_fichero_de_texto=Enlazar a ficheros de texto
+Ventana=Ventana
+Anterior=Anterior
+pref.network=Red
+eliminar_fila=eliminar fila
+respuesta_error_servidor=No se ha podido obtener la cobertura
+colocar_delante=Colocar delante
+Escala_Maxima=Escala M\u00E1xima
+Cambios_de_estilo=Cambios de estilo
+WMS=WMS
+simple=Simple
+margenes=M\u00E1rgenes\:
+propiedades_de_la_capa=Propiedades de la capa
+link=Enlace
+options.firewall.http.enabled=Usar servidor proxy HTTP
+exportar=Exportar
+propiedades_tabla=Propiedades de la tabla
+agrupar_graficos=Agrupar gr\u00E1ficos
+Leyenda_Por_Defecto=Leyenda por defecto
+Kilometros=Kil\u00F3metros
+Origen_de_Datos=Origen de Datos\:
+nuevo=Nuevo
+descending_order=Orden descendente
+prueba_conexion=Prueba de la conexi\u00F3n
+Color_de_la_Linea=Color de la L\u00EDnea\:
+error_lectura=No se pudo abrir el proyecto
+Quitar_capa=Quitar capa
+recorte_colas=Recorte de Colas
+nombre_sesion=Nombre de la sesi\u00F3n
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizacion de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+_(Intervalos)=(Intervalos)
+Por_favor_active_la_capa=Por favor active la capa
+Graficos=Gr\u00E1ficos
+bd=bd
+desde_arriba=Desde Arriba\:
+Cancelar=Cancelar
+infobreak=Muestra los elementos de la capa usando una gama de colores.
+resolucion=Resoluci\u00F3n
+guardar_leyenda=Guardar leyenda
+kilometros=Kil\u00F3metros
+map_units=Unidades de mapa
+Abrir_Imagen=Abrir Imagen
+varianza=Varianza
+Num_intervalos=N\u00FAm. intervalos
+configurar_localizador=Configurar localizador
+abrir_tooltip=Abre un proyecto existente
+ajustes_linea_grafica=Ajustes de l\u00EDnea gr\u00E1fica
+Link=Enlace
+marco=Marco
+realce=Realce
+Zoom_Alejar=Zoom alejar
+gestion_encuadre=Gesti\u00F3n de Encuadres
+Shapefiles=Ficheros .SHP
+rehacer=rehacer
+tamanyo_fuente=Tama\u00F1o de fuente
+Bajar_capa=Bajar capa
+__proyeccion_actual=Proyecci\u00F3n actual\:
+Tabla_de_prueba=Tabla de prueba
+Metros=Metros
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00F3n

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_fr.properties	(revision 42196)
@@ -0,0 +1,630 @@
+#Translations for language: fr
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Requ\u00EAte
+colocar_alrededor_seleccionados=Positionner autour des graphiques s\u00E9lectionn\u00E9s.
+ancho_alto=Largeur X Hauteur
+media=Moyenne
+Quitar_todos=Tout supprimer
+Parametros=Param\u00E8tres
+conexion_correcta=Connexion correcte
+selection_color=Couleur de s\u00E9lection
+cerrar=Fermer
+titulo=Gestionnaire de projet
+tipo_simbolo=Type de symbole\:
+documentos_existentes=Documents existants
+aceptar=Valider
+grosor_linea=Largeur de la ligne
+Siguiente=Suivant
+ver_tooltip=Afficher la fen\u00EAtre de projet
+Intersecten_con=s\u2019intersectent avec
+Color_de_Relleno=Couleur de remplissage
+_(Simbolo_unico)=(Symbole unique)
+parametros=Param\u00E8tres
+tipo_linea=Type de Ligne\:
+Servidor=Serveur
+agrupar_capas=Grouper les couches
+capaWMS=CoucheWMS
+Simbologia=Symbologie
+Propiedades_del_Tema=Propri\u00E9t\u00E9s de la couche
+Ver=Afficher
+Zoom_Completo=Vue g\u00E9n\u00E9rale
+leyenda=L\u00E9gende
+Milimetros=Millim\u00E8tres
+Tipo_de_leyenda=Type de l\u00E9gende
+Perimetro=P\u00E9rim\u00E8tres
+punto=Point
+borra_seleccion=Effacer une s\u00E9lection
+Cambio_Estilo=Changer de style
+Anadir_capa=Ajouter une couche g\u00E9ographique
+Ajustar_cobertura_wcs=Ajuster couverture WCS
+S\u00EDmbolo=Symbole
+eliminar_capa=Supprimer une couche
+ver_tabla_atributos=Voir la table des attributs
+Cerrar=Fermer
+espacio=Espace\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Afficher les \u00E9l\u00E9ments de la couche en utilisant une gamme de couleurs en fonction de la valeur d'un champs d'attributs d\u00E9termin\u00E9
+select_all=Tout s\u00E9lectionner
+sin_realce=Sans r\u00E9haussement
+Imprimir=Imprimer
+join=Union
+simplificar=Simplifier
+insertar_imagen=Ins\u00E9rer une image
+Cambio_de_estilo=Changer le style
+Campo_de_clasificacion=Champ de classification
+guardar_clave=Enregistrer la clef
+_(Etiquetas_estandar)=(Etiquettes standard)
+propiedades_del_tema=Propri\u00E9t\u00E9s du th\u00E8me
+baja=Basse
+renombrar=Renomer
+Error_guardando_la_leyenda=Erreur en sauvegardant la l\u00E9gende
+insertar_texto=Ins\u00E9rer du texte
+Extent=Extension
+fichero_incorrecto=Fichier incorrect
+seleccionar_formato=S\u00E9lectionner un format
+statistics=Statistiques
+servidor_wcs_no_responde=Le serveur selectionn\u00E9 ne r\u00E9pond pas
+quitar_enlaces=Enlever liens
+causa_error_desconocida=Erreur inattendue du serveur
+Anadir_Capa=Ajouter une couche g\u00E9ographique
+sin_titulo=Sans titre
+finalizar=Finaliser
+arriba=Monter
+Igual_que_la_impresora=Identique que l'impression
+Un_Layer=Une couche doit-\u00EAtre s\u00E9lectionn\u00E9e
+informacion=Propri\u00E9t\u00E9s de l'entit\u00E9 cliqu\u00E9e
+seleccionar_todos=Tout s\u00E9lectionner
+guardar_como_plantilla=Garder comme police
+desde_izquierda=Depuis la gauche\:
+colocar_a_margenes=Positionner par rapport aux marges.
+No_mostrar_la_capa_cuando_la_escala=Ne pas afficher la couche lorsque l'\u00E9chelle
+Inferior=Inf\u00E9rieur
+Valor_verde=Valeur vert
+fallo_obtener_tablas=Echec pour obtenir les tables de la base de donn\u00E9es
+colocar_detras=Avant
+vertical=Vertical
+fichero_existe=le fichier selectionn\u00E9 existe d\u00E9j\u00E0
+imagen=Image
+tipo_leyenda=Fichier de l\u00E9gende (*.GVL)
+enlace_vivo=Lien dynamique
+Por_favor_active_el_tema=Activez le th\u00E8me s.v.p.
+importar_extent=Importer l'extension de la vue
+quantile_intervals=Intervalles quantiles
+error_escritura=Impossible d'\u00E9crire le fichier
+seleccionar_parametros=Selectionner les param\u00E8tres
+abrir=Ouvrir
+General=G\u00E9n\u00E9ral
+unidades=Unit\u00E9s\:
+configuracion_andami_tooltip=Configuration Andami
+Cuadrado=Carr\u00E9
+rellenar_marco_vista=Remplir le cadre de la vue
+Ancho_de_linea=Epaisseur de la ligne
+Dxffiles=Fichiers DXF
+tipo_de_leyenda=Type de l\u00E9gende
+En_metros=En m\u00E8tres
+Descripcion=Description
+agrupar_linea=Grouper les lignes graphiques
+info=Info
+Valor_Bandas=Valeur des bandes
+desconectar=D\u00E9connecter
+insertar_linea=Ins\u00E9rer une ligne
+path=Chemin
+clave=Clef
+owner=Propri\u00E9taire
+tema=Couche g\u00E9ographique
+recta=Ligne diagonale
+linf_der=Inf. droite  X
+shape_seleccion=Exporter une s\u00E9lection.
+cuando_activo=Quand active
+nuevo_tamano_fuente=Nouvelle taille de fonte\:
+abrir_plantilla=Ouvrir police
+propiedades_grafico=Propri\u00E9t\u00E9s du graphique
+Zoom_Menos_Vista=Zoom avant dans le cadre
+Nombres=Noms
+color=Couleur \:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet d'\u00E9tiquetter les \u00E9l\u00E9ments de la carte avec la valeur d'un champs d\u00E9termin\u00E9
+confirmar_borrar=Confirmer la suppression ?
+distribuir=Distribuer \:
+circulo=Cercle
+detalles=D\u00E9tails
+por_debajo_de=en dessous de\:
+Habilitar_etiquetado=Etiqueter
+registros_seleccionados_total=Total registres s\u00E9lectionn\u00E9s
+ymin=Y minimum
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Afficher tous les \u00E9l\u00E9ments d'une couche en utilisant le m\u00EAme symbole
+propiedades=Propri\u00E9t\u00E9s
+reproyectar_aviso=Le syst\u00E8me de projection de la couche est diff\u00E9rent de la vue\nAVISO\: \=Des probl\u00E8mes peuvent \u00EAtre rencontr\u00E9s avec certaines projections. Lisez la documentation
+Ajustar_transparencia=Ajuster la transparence
+hasta=jusqu'\u00E0
+desagrupar_graficos=Dissocier les graphiques
+back=Pr\u00E9c\u00E9dent
+conservar_escala_visualizacion=Conserver l'\u00E9chelle de la vue
+pixeles=pixels
+utilizar_margenes_impresora=Utiliser les marges de l'imprimante.
+Al_leer_la_leyenda=A la lecture de la l\u00E9gende
+Simbolo=Symbole
+Capas=Couches g\u00E9ographiques
+Seleccionar_fichero=S\u00E9lectionner un fichier
+select_none=Tout supprimmer
+recuento=Recomptage
+Otros=Autres
+Zoom_Mas_Vista=Zoom arri\u00E8re dans le cadre
+navegacion=Navigation
+infovalue=Affiche les entit\u00E9s d'une couche en utilisant un symbole pour chaque valeur
+visualizar_cuadricula=Afficher la grille
+Etiqueta=Etiquette
+nuevo_tooltip=Cr\u00E9er un nouveau projet
+Sample=Exemple
+Valor=Valeur
+Tiempo=Temps
+Campo_clasifica=Champ de classification
+insertar_poligono=Ins\u00E9rer un polygone
+Mostrar_siempre=Tout afficher
+angulo_rotacion=Angle de rotation\:
+mapas=Mises en page
+configurar=Configurer
+campo=Champ
+por_encima_de=au del\u00E0 de\:
+leyenda_campo_unido=Un champs d'une table en jointure est utilis\u00E9  dans la l\u00E9gende (et /ou l'\u00E9tiquetage). Changez la l\u00E9gende avant d'enlever la jointure svp.
+nombre=Nom
+alerta=Avertissement
+propiedades_marco_leyenda=Propri\u00E9t\u00E9s du bloc de l\u00E9gende
+Encuadre_Vista=D\u00E9placer
+Intervalos_por_rupturas_naturales=Intervalles par seuils naturels
+extension=Extension
+propiedades_tema=Propri\u00E9t\u00E9s de la couche
+modification_date=Date de modification
+formato=Format
+igual_todos_lados=Equal displacement for all sides.
+Back=Pr\u00E9c\u00E9dent
+Nuevo_conjunto=Nouvelle s\u00E9lection
+coincidir_tamano=Faire co\u00EFncider la taille\:
+Zoom_Select=Zoom \u00E0 la s\u00E9lection
+Usar_indice_espacial=Utiliser indice spatial
+background_color=Colour d'arri\u00E8re plan
+north=Nord
+reproyectar_pregunta=Souhaitez-vous reprojeter ?
+Cambio_Color=Changer la couleur
+seleccione_fecha=S\u00E9lection d'une date...
+fallo_crear_pool=Echec lors de la cr\u00E9ation du Pool de connexion
+Intervalos=Intervalles
+jpg=Fichiers JPEG
+Herramientas_vista=Fen\u00EAtre des outils
+Encuadre=Zooms
+Triangulo=Triangle
+tamano_posicion=Taille et position
+untitled=Sans titre
+base_datos=Base de donn\u00E9es
+__espacio_vertical=Espace Vertical\:
+Salir=Quitter
+altura=Hauteur \:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... pour supprimer les enregistrements \u00E0 partir de
+select_geom_field=S\u00E9lectionner le champs g\u00E9om\u00E9trie
+seleccione_tabla_origen=S\u00E9lectionner la table origine de la jointure
+Superior=Sup\u00E9rieure
+ascending_order=Ordre ascendant
+insertar_vista=Ins\u00E9rer une vue
+Color_Contorno=Couleur du contour
+Centimetros=Centim\u00E8tres
+Nombre_que_se_le_dara_al_zoom=Nom pour le zoom
+tamano_pagina=Taille de la page\:
+Accion_Predefinida=Action pr\u00E9d\u00E9finie
+Bold=Gras
+minimo=Minimum
+divisiones_izquierda=Divisions \u00E0 partir de la gauche
+Imagen=Image
+propiedades_marco_imagenes=Propri\u00E9t\u00E9s du bloc image
+orientacion=Orientation\:
+el_numero_maximo_de_intervalos_para_este_campo_es=Le nombre maximum d'intervalles pour ce champ est
+tablas=Tables
+Seleccionar_del_conjunto=Mettre ce texte sur plusieurs lignes
+Preparar_pagina=Pr\u00E9parer la page
+error_comunicacion_servidor=Il s'est produit une erreur de communication avec le serveur
+Muestra_los_atributos_de_las_capas_seleccionadas=Afficher les attributs de la couche s\u00E9lectionn\u00E9e.
+anterior=Pr\u00E9c\u00E9dent
+__seleccion_de_fuente=S\u00E9lection d'une fonte
+rango_de_escalas=Niveau d'\u00E9chelle
+mosaico_tooltip=Mosa\u00EFque
+Calcular_intervalos=Calculer les intervalles
+lineal_directo=Lin\u00E9aire Direct
+Simbolo_Unico=Symbole unique
+propiedades_raster=Propri\u00E9t\u00E9s du raster
+Anadir_al_conjunto=Ajouter \u00E0 la s\u00E9lection
+Guardar=Enregistrer
+bmp=Fichiers BMP
+Eliminar=Supprimer
+seleccionar_por_rectangulo=S\u00E9lection \u00E0 partir d'un rectangle
+ymax=Y minimum
+__lineas=lignes
+Leyenda=L\u00E9gende
+Style=Style
+Capas_del_localizador=Couches de localisation
+Origen_de_datos=Origine des donn\u00E9es
+Personalizado=Personnalisation
+Linea=Ligne
+Zoom_Completo_Vista=Zoom complet dans le cadre
+Coberturas=Couvertures
+Guardar_el_zoom_actual=Enregistrer le zoom actif
+seleccionar_por_punto=S\u00E9lection
+cancelar=Annuler
+nombre_cobertura=Nom de la couverture
+Valores_unicos=Valeurs uniques
+Sean_iguales_a=sont identiques \u00E0
+visibles=Toutes visibles
+automatico=Automatique
+maximo=Maximum
+next=Suivant
+insertar_punto=Ins\u00E9rer un point
+ventana_proyecto=Fen\u00EAtre de projet
+alto=Hauteur
+Error_abriendo_el_fichero=Erreur d'ouverture du fichier
+tarea_en_progreso=Progression de la t\u00E2che
+Valores=Valeurs
+alta=Hauteur
+borrador=Brouillon
+cargar_leyenda=Charger une l\u00E9gende
+Mostrar_Contorno=Activer le contour
+Tipo_de_intervalos=Type d'intervalles
+etiquetas=Etiquettes\:
+Color_inicio=Couleur de d\u00E9part
+no_visibles=Toutes invisibles
+grados=Degr\u00E9es\:
+select_unique_field=S\u00E9lectionner le champs unique
+colocar_alrededor_todos=Positionner autour de tous les graphiques.
+fuente=Fonte
+seleccionar_CRS=Selectionner CRS
+recorte_vista=Couper la vue
+En_pixels=En pixels
+toda_la_tabla=Toute la table
+medir_area=Mesurer une surface
+Fichero=Fichier
+Zoom_pixel=Zoom a la r\u00E9solution du raster
+alinear=Aligner
+vistas=Vues
+Seleccionar=S\u00E9lectionner
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Afficher les \u00E9l\u00E9ments de la couche en utilisant un symbole pour chaque valeur unique
+Dado_un_campo_de_atributos=Champs d'attributs donn\u00E9
+Error_accediendo_a_los_datos=Erreur d'acc\u00E8s aux donn\u00E9es
+debe_estar_activada=Doit \u00EAtre activ\u00E9
+__redimensionar_texto_escala=Redimensionner le texte suivant l'\u00E9chelle de la vue
+Mas_100=L\u00E9gende limit\u00E9e \u00E0 100 enregistrements
+Next=Suivant
+Esten_contenidos_en=sont contenus dans
+creation_date=Date de cr\u00E9ation
+Localizador_por_atributo=Localisation par attribut
+preparar_pagina=Pr\u00E9parer la page
+guardado=Enregister sous
+Enlazar_a_ficheros_de_imagen=Lier \u00E0 un fichier image
+siguiente=Suivant
+presentacion=Pr\u00E9sentation
+sobre_la_barra=Sur la barre
+Tipo_de_linea=Type de ligne
+tipo_dato=Type de donn\u00E9e
+Color_final=Couleur d'arriv\u00E9e \:
+servidor=Serveur
+Yardas=Yards
+wcs_properties=Propri\u00E9t\u00E9s WCS
+vacia=Vide
+Contengan=contiennent
+campo_altura_texto=Taille du champ textuel\:
+Subir_capa=Monter une couche
+Nombre=Nom
+ambito=Cadre
+seleccione_tabla=S\u00E9lectionnez la table
+Seleccion_por_tema=S\u00E9lection spatiale
+agrupar=Grouper
+lsup_izq=Sup. gauche X
+Zoom=Zoomer
+Configurar_localizador=Configurer la vue d'ensemble...
+Fuente=Fonte
+Seleccionar_de_las_capas_activas_los_elementos_que=S\u00E9lectionner dans la couche active les entit\u00E9s qui\:
+tamano=Taille\:
+Previsualizacion_de_simbolo=Pr\u00E9visualisation du symbole
+fallo_obtener_conexion_existente=Echec pour obtenir une connexion d\u00E9j\u00E0 cr\u00E9\u00E9e
+Nueva_tabla=Nouvelle table
+Aceptar=Valider
+Intervalos_equidistantes=Intervalles \u00E9gaux
+lppp=ppp
+N\u00FAm_intervalos=Nombre d'intervalles
+descending_order_tooltip=Classe le champs s\u00E9lectionn\u00E9 par ordre descendant
+borrar=Supprimer
+Grosor_de_linea=Largeur de la ligne\:
+relleno=Remplir \:
+cambio_nombre=Changement de nom
+formato_incorrecto=Format incorrect
+mas_de_100_simbolos=Plus de 100  symboles n'apportent plus d'information dans un plan
+espaciado_vertical=Pas vertical de la grille
+Editar_leyenda=Editer la l\u00E9gende
+rectangulo=Rectangle
+Visualizacion=Visualiser
+Pies=Pieds
+seleccionar_capas=S\u00E9lectionner des couches
+nuevo_proyecto=Nouveau projet
+Herramientas=Outils
+bands=Bandes
+cancel=Annuler
+Vista=Vue
+fallo_registrar_conexion=Echec enregistrement connexion
+tamano_metros=Taille en m\u00E8tres
+seleccione_campo_enlace=S\u00E9lectionner le champs \u00E0 relier
+seleccionar_coberturas=Selectionner couvertures
+Mapa=Carte
+insertar_recta=Ins\u00E9rer une ligne diagonale
+quiere_continuar=S\u00FBr de vouloir continuer?
+descripcion=Description
+importar=Importer
+Quitar_Todos=Tout supprimer
+filtro=Requ\u00EAtes attributaires
+Pulgadas=Pouces
+Ayuda=Aide
+activar_regla=Afficher la r\u00E8gle
+Recuperar_y_eliminar_otros_zoom=R\u00E9cuperer et \u00E9liminer les autres zooms
+anchura=Largeur\:
+seleccione_tabla_a_enlazar=S\u00E9lectionner la table a relier
+propiedades_sesion=Propri\u00E9t\u00E9s du project
+ninguna_impresora_configurada=Aucune imprimante configur\u00E9e
+Derecho=Droit
+propiedades_vista=Propri\u00E9t\u00E9s de la vue
+en_el_mapa=Dans la carte\:
+salir_tooltip=Quitter
+propiedades_mapa=Propri\u00E9t\u00E9s de la carte
+Sean_disjuntos_a=sont disjoints de
+Elementos_seleccionados_de_la_capa=entit\u00E9s s\u00E9lectionn\u00E9es de la couches
+resolucion_resultado=R\u00E9solution du r\u00E9sultat\:
+Derecha=Droite
+Izquierdo=Gauche
+Anadir_todos=Tout ajouter
+Zoom_Mas=Zoom arri\u00E8re
+suma=Somme
+Quitar=Quitter
+Cancel=Annuler
+poligono=Polygone
+guardar_como=Enregistrer comme...
+png=Fichiers PNG
+Izquierda=Gauche
+mostrar_unidades=Montrer unit\u00E9s
+Abrir_una_capa=Ouvrir une couche
+zooms=D\u00E9placement
+(escala_maxima)=(\u00E9chelle maximum)
+exportar_pdf=Exporter en pdf
+Valores_Unicos=Valeurs uniques
+Desplazamiento=D\u00E9placer
+tipos_de_documentos=Type de documents
+seleccion_fuente=S\u00E9lection d'une fonte
+Zoom_Menos=Zoom avant
+finish=Finaliser
+Hiperenlace=Hyperlien
+Capa=Couche
+xmin=X minimum
+Aplicar=Appliquer
+drivers=Drivers
+visible=Visible
+comentarios=Commentaires
+editable=Editable
+Previsualizacion=Pr\u00E9visualisation
+quitar_uniones=Enlever unions
+tamanyo_borde=Taille du bord
+hostname=Hostname
+necesita_un_tema_activo=N\u00E9cessite un th\u00E8me actif
+espaciado_horizontal=Pas horizontal de la grille
+guardar_cambios=Enregistrer les changements ?
+insertar_norte=Ins\u00E9rer  nord
+Propiedades_de_la_Capa=Propri\u00E9t\u00E9s de la couche
+Plain=Normal
+coor_geograficas=Coord. G\u00E9ographiques
+estadisticas=Statistiques
+Italic=Italique
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Champs
+A2=A2
+seleccion=S\u00E9lection
+insertar_leyenda=Ins\u00E9rer une l\u00E9gende
+A1=A1
+escala_usuario=Echelle d\u00E9finie par l'utilisateur
+A0=A0
+Anadir=Ajouter
+Transparencia=Transparence
+Insertar=Ins\u00E9rer
+mostrar_descripcion=Montrer description
+Font=Fonte
+usuario=utilisateur
+Crucen_con=croisent avec
+Muestra_atributos=Afficher les attributs de la couche s\u00E9lectionn\u00E9e.
+medir_distancias=Mesurer les distances
+ancho=Largeur
+acerca_de=A propos de...
+area_trabajo=Espace de travail
+Circulo=Cercle
+este_por_debajo_de_=Soit en dessous de
+Shapefile=Shapefile
+ok=Ok
+usar_marco=Utiliser le cadre
+normal=Normal
+Elegir_Fuente=Choisir la fonte
+siempre=Toujours
+resto_valores=Reste des valeurs
+insertar_escala=Ins\u00E9rer une \u00E9chelle
+host=machine
+color_texto=Couleur du texte\:
+conectar=Connecter
+guardar_proyecto=Enregistrer un projet
+visualizacion=Vues
+Etiquetados=Etiquettages
+titulo_confirmar=Confirmer le titre
+activos=Toutes actives
+opacidad=Opacit\u00E9
+registros=registers
+posicion_linea=Position de la ligne
+usar_titulo=Utiliser titre
+refrescar=Rafra\u00EEchir
+numero_incorrecto=Numero incorrect
+num_bandas=Nombre de bandes
+navegacion_vista=Navigation Vue
+(escala_minima)=(\u00E9chelle maximum)
+Tabla_de_Atributos=Table d'attributs
+tipo_fichero_proyecto=Fichier de projet gvSIG (*.gvsproj)
+Valor_azul=Valeur bleu
+Unidades=Unit\u00E9s\:
+Millas=Miles
+no_activos=Toutes inactives
+titulo_fframetext=Titre du champs texte
+Toquen=touchent
+fallo_realizar_consulta=Echec pour r\u00E9aliser une requ\u00EAte
+cartografico=Cartographique
+Examinar=Parcourir
+Ancho_Contorno=Epaisseur du contour
+seleccionar_tiempo=Selectionner la position pour le temps
+tipo_relleno=Remplir\:
+escala=Echelle
+barra=Barre\:
+texto=Texte
+Formato=Format
+mantener_intervalo=Maintenir l'intervalle
+Identificar_Resultados=Identifier les r\u00E9sultats
+este_por_encima_de=Soit au dessus de
+Solo_para_capas_vectoriales=Seulement pour les couches vectorielles
+salir=Quitter
+insertar_rectangulo=Ins\u00E9rer un rectangle
+Zoom_Previo=Zoom pr\u00E9c\u00E9dent
+Atributo=Attribut
+horizontal=Horizontal
+Generar_Intervalos=Calculer les Intervalles
+salvar_raster=Sauver le raster
+seleccion_campos=S\u00E9lectionnez les champs
+Detalles=D\u00E9tails
+guardar_tooltip=Enregistrer le projet
+extents_no_coincidentes=Les dimmensions de l'image selectionn\u00E9e ne co\u00EFncident pas avec celles de l'image d'origine.
+No_de_intervalos=Nombre d'intervalles
+xmax=X minimum
+tipo_de_intervalo=Type d'intervalle
+Rango_de_escalas=Classes d'\u00E9chelles
+abajo=Descendre
+_(Valores_unicos)=(Valeurs uniques)
+infodef=Montrer les entit\u00E9s de la couche en utilisant le m\u00EAme symbole.
+metros=M\u00E8tres
+calidad=Qualit\u00E9
+editar_propiedades=Editer les propri\u00E9t\u00E9s
+Intervalo=Intervalle
+puerto=port
+desagrupar=Dissocier
+Propiedades_texto=Propri\u00E9t\u00E9s du texte
+valor_pixel=Valeur du pixel
+alinear_graficos=Aligner les graphiques
+Inicializando=Initialisation
+campo_de_documentos_asociados=Champs de documents associ\u00E9s
+marco_vista=Espace de travail de la vue
+Escala=Echelle
+Zoom_Acercar=Zoom rapprocher
+fallo_crear_conexion=Echec lors de la cr\u00E9ation de la connexion
+recorte=coupure
+insertar_circulo=Ins\u00E9rer un cercle
+Simbolo_unico=Symbole unique
+necesita_un_tema_vectorial_activo=N\u00E9cessite un th\u00E8me vectoriel actif
+muestra_consola_tooltip=Montrer la console
+adjust_transparency=Ajuster la transparence
+Archivo=Fichier
+ascending_order_tooltip=Classe le champs s\u00E9lectionn\u00E9 par ordre ascendant
+desviacion_tipica=Ecart type
+espere=Patientez s.v.p.
+equal_intervals=Intervalles \u00E9gaux
+alineamiento=Alignement\:
+introduce_nombre=Nouveau type
+abrir_proyecto=Ouvrir un projet
+No_Shape=Cette couche n'est pas de type shape
+Campo=Champ
+Campo_de_etiquetado=Etiqueter \u00E0 partir d'un champ
+sincronizar_color_borde_relleno=Synchroniser la couleur de contour avec le fond \:
+escala_minima=\u00E9chelle minimum
+transparencia=Transparence
+linea=Ligne
+Nivel_de_transparencia=Niveau de transparence
+driver=driver
+Etiquetado=Etiquetage
+Guardar_leyenda=Enregistrer une l\u00E9gende
+Rasterfiles=Fichiers Raster
+exportar_a=Exporter vers...
+Zoom_Real=Zoom 1\:1
+Estilo=Style\:
+No_reconocido=Non reconnu
+Escala_Minima=Echelle minimum
+Cruz=Croix
+linea_grafica=Ligne graphique
+alias=Alias
+Color_inicial=Couleur de d\u00E9part \:
+malla_activada=Activer la grille
+Etiquetas_estandar=Etiquettes standard
+Zoom_al_Tema=Zoom sur la couche
+Size=Taille
+Tabla=Table
+natural_intervals=Intervalles naturels
+Propiedades_escala_grafica=Propri\u00E9t\u00E9s de la barre d'\u00E9chelle
+distance_units=Unit\u00E9s de distance
+escala_maxima=echelle maximum
+bandas=Bandes
+Archivos_de_Disco=Fichiers sur le disque
+Recuperar_leyenda=Charger une l\u00E9gende
+propiedades_marco_vista=Propri\u00E9t\u00E9s du bloc de vue
+Elegir_Color=Selectionner la couleur
+Informacion=Propri\u00E9t\u00E9s de l'entit\u00E9 cliqu\u00E9e
+usar_rango=Utiliser un seuil
+Valor_rojo=Valeur rouge
+eliminar_extremos=Eliminer les extr\u00EAmes
+Se_superponen_a=se superposent \u00E0
+nombre_capa=Nom de la couche
+DGNFiles=Fichiers DGN
+No_mostrar=Ne pas afficher la couche lorsque l'\u00E9chelle est
+Tipo_no_reconocido=Type non reconnu
+Altura_fija_de_texto=Fixe la hauteur du texte
+Enlazar_a_fichero_de_texto=Lier \u00E0 un fichier texte
+Anterior=Pr\u00E9c\u00E9dent
+respuesta_error_servidor=La couverture n'a pu \u00EAtre obtenue
+colocar_delante=Apr\u00E8s
+Escala_Maxima=Echelle maximum
+simple=Simple
+Cambios_de_estilo=Change le style
+WMS=WMS
+margenes=Marges\:
+link=Lien
+propiedades_tabla=Propri\u00E9t\u00E9s de la table
+exportar=Exporter
+agrupar_graficos=Grouper les graphiques
+Leyenda_Por_Defecto=L\u00E9gende par d\u00E9faut
+Kilometros=Kilom\u00E8tres
+Origen_de_Datos=Origine des donn\u00E9es\:
+nuevo=Nouveau
+descending_order=Ordre descendant
+prueba_conexion=Essai connexion
+Color_de_la_Linea=Couleur de la ligne
+error_lectura=Impossible de lire le fichier
+Quitar_capa=Supprimer une couche
+recorte_colas=Couper les r\u00E9sidus
+nombre_sesion=Nom du projet
+_(Intervalos)=(Intervalles)
+Graficos=Graphiques
+bd=bd
+desde_arriba=Depuis le haut\:
+Cancelar=Annuler
+poner_temas_a=Affichage des couches g\u00E9ographiques...\:
+resolucion=R\u00E9solution
+infobreak=Montrer les entit\u00E9s de la couche en utilisant une couleur.
+guardar_leyenda=Enregistrer une l\u00E9gende
+kilometros=Kilom\u00E8tres
+map_units=Unit\u00E9s de la carte
+Abrir_Imagen=Ouvrir une image
+varianza=Variance
+configurar_localizador=Configurer la vue d'ensemble
+abrir_tooltip=Ouvrir un projet existant
+ajustes_linea_grafica=Ajuster la ligne graphique
+Link=Lien
+marco=Cadre
+realce=R\u00E9heussement
+Zoom_Alejar=Zoom \u00E9loigner
+gestion_encuadre=Gestionnaire de positionnement
+Shapefiles=Fichiers SHP
+tamanyo_fuente=Taille de la source
+Bajar_capa=Descendre la couche
+__proyeccion_actual=Projection actuelle\:
+Tabla_de_prueba=Table test
+Metros=M\u00E8tres

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_de.properties	(revision 42196)
@@ -0,0 +1,630 @@
+#Translations for language: de
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Abfrage
+colocar_alrededor_seleccionados=Um ausgew\u00E4hlte Graphiken anordnen.
+ancho_alto=Breite x H\u00F6he
+media=Mittel
+Quitar_todos=Alle entfernen
+Parametros=Parameter
+conexion_correcta=Verbindung korrekt
+selection_color=Farbe der Auswahl
+cerrar=Schlie\u00DFen
+titulo=Projektverwalter
+tipo_simbolo=Symboltyp\:\:
+documentos_existentes=Vorhandene Dokumente
+aceptar=OK
+grosor_linea=Strichst\u00E4rke
+Siguiente=N\u00E4chster
+ver_tooltip=Zeigt das Projektfenster
+Intersecten_con=sich \u00FCberschneiden mit
+Color_de_Relleno=F\u00FCllfarbe\:
+_(Simbolo_unico)=(Einmaliges Symbol)
+parametros=Parameter
+tipo_linea=Strichtyp\:
+Servidor=Server
+agrupar_capas=Layer gruppieren
+capaWMS=WMS-Layer
+Simbologia=Symbole
+Propiedades_del_Tema=Eigenschaften des Themas
+Ver=Sehen
+Zoom_Completo=Zoom auf Alles
+leyenda=Legende
+Milimetros=Milimeter
+Tipo_de_leyenda=Legendentyp
+Perimetro=Umfang
+punto=Punkt
+borra_seleccion=Auswahl l\u00F6schen
+Cambio_Estilo=Stil \u00E4ndern
+Anadir_capa=Layer hinzuf\u00FCgen
+Ajustar_cobertura_wcs=WCS-Cover anpassen
+S\u00EDmbolo=Symbol
+eliminar_capa=Layer l\u00F6schen
+ver_tabla_atributos=Attributtabelle sehen
+Cerrar=Schlie\u00DFen
+espacio=Leerzeichen\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zeigt die Elemente des Layers mit der gleichen Farbpalette, abh\u00E4ngig vom Wert eines bestimmten Attributfelds.
+select_all=Alle ausw\u00E4hlen
+sin_realce=Ohne Heraushebung
+Imprimir=Drucken
+join=Verbindung
+simplificar=Vereinfachen
+insertar_imagen=Bild einf\u00FCgen
+Cambio_de_estilo=Stil \u00E4ndern
+Campo_de_clasificacion=Klassifikationsfeld
+guardar_clave=Passwort speichern
+_(Etiquetas_estandar)=(Standard-Etiketten)
+propiedades_del_tema=Eigenschaften des Themas
+baja=Niedrig
+renombrar=Umbenennen
+Error_guardando_la_leyenda=Fehler beim Speichern der Legende
+insertar_texto=Text einf\u00FCgen
+Extent=Bildbereich
+fichero_incorrecto=Unrichtige Datei
+seleccionar_formato=Format ausw\u00E4hlen
+statistics=Statistiken
+servidor_wcs_no_responde=Der ausgew\u00E4hlte Server reagiert nicht.
+quitar_enlaces=Links aufl\u00F6sen
+causa_error_desconocida=Unerwarteter Server-Fehler
+Anadir_Capa=Layer hinzuf\u00FCgen
+sin_titulo=Ohne Titel
+finalizar=Beenden
+arriba=Nach oben
+Igual_que_la_impresora=Wie Drucker
+Un_Layer=W\u00E4hlen Sie mindestens einen Layer aus.
+informacion=Information
+seleccionar_todos=Alle ausw\u00E4hlen
+guardar_como_plantilla=als Vorlage speichern
+desde_izquierda=Von links\:
+colocar_a_margenes=Zu den R\u00E4ndern anordnen
+No_mostrar_la_capa_cuando_la_escala=Den Layer nicht zeigen, wenn der Ma\u00DFstab ...
+Inferior=Unten
+Valor_verde=Wert Gr\u00FCn
+fallo_obtener_tablas=Fehler beim Laden der Tabellen von der Datenbank
+colocar_detras=Nach hinten
+vertical=Vertikal
+fichero_existe=Ausgew\u00E4hlte Datei existiert schon als Layergruppe.
+imagen=Bild
+tipo_leyenda=Legendentyp-Datei (*.GVL)
+enlace_vivo=Aktiver Link zum Original
+Por_favor_active_el_tema=Aktivieren Sie bitte das Thema.
+importar_extent=Aktuellen Ansichtsbereich importieren.
+quantile_intervals=Quantile Intervalle
+error_escritura=Das Projekt konnte nicht gespeichert werden
+seleccionar_parametros=Parameter ausw\u00E4hlen
+abrir=\u00D6ffnen
+General=Allgemein
+unidades=Einheiten\:
+configuracion_andami_tooltip=Konfiguration Andami
+Cuadrado=Quadrat
+rellenar_marco_vista=Ansichtsrahmen f\u00FCllen
+Ancho_de_linea=Linienbreite
+Dxffiles=DXF-Dateien
+tipo_de_leyenda=Legendentyp
+En_metros=In Metern
+Descripcion=Beschreibung
+agrupar_linea=Grafiklinie mit Grafiken gruppieren
+info=Information
+Valor_Bandas=Wert Farbstreifen
+desconectar=Verbindung aufl\u00F6sen
+insertar_linea=Linie einf\u00FCgen
+path=Pfad
+clave=Passwort
+owner=Besitzer
+tema=Layer
+recta=Gerade
+linf_der=x unten rechts
+shape_seleccion=Auswahl exportieren
+cuando_activo=Wenn aktiv
+nuevo_tamano_fuente=Neue Schriftgr\u00F6\u00DFe\:
+abrir_plantilla=Vorlage \u00F6ffnen
+propiedades_grafico=Eigenschaften der Grafik
+Zoom_Menos_Vista=Im Bildausschnitt kleiner zoomen
+Nombres=Namen
+color=Farbe\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Erm\u00F6glicht das Etiketieren von Elementen der Karte, mit dem Wert eines bestimmten Felds.
+confirmar_borrar=Sind Sie sicher, dass Sie dieses Element l\u00F6schen wollen?
+distribuir=Verteilen\:
+circulo=Kreis
+detalles=Details
+por_debajo_de=unter\:
+Habilitar_etiquetado=Etikettierung aktivieren
+registros_seleccionados_total=Alle ausgew\u00E4hlten Register
+ymin=Minimalwert y
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zeigt alle Elemente des Layers mit dem gleichen Symbol.
+propiedades=Eigenschaften
+reproyectar_aviso=Die Layerprojektion deckt sich nicht mit der Ansichtsprojektion. \nACHTUNG\: Bei einigen Transformationen k\u00F6nnte sie ungenau sein.\nLesen Sie bitte die Dokumentation.
+Ajustar_transparencia=Transparenz anpassen
+hasta=bis
+desagrupar_graficos=Grafikgruppe aufl\u00F6sen
+back=Zur\u00FCck
+conservar_escala_visualizacion=Darstellungsma\u00DFstab beibehalten
+pixeles=Pixel
+utilizar_margenes_impresora=Randbegrenzung des Druckers verwenden
+Al_leer_la_leyenda=Beim Lesen der Legende
+Simbolo=Symbol
+Capas=Layer
+Seleccionar_fichero=Datei ausw\u00E4hlen
+select_none=Alle aus der Auswahl entfernen
+recuento=Nachz\u00E4hlung
+Otros=Andere
+Zoom_Mas_Vista=Im Bildausschnitt gr\u00F6\u00DFer zoomen
+navegacion=\u00DCbersicht
+infovalue=Zeigt Elemente des Layers mit je einem Symbol pro Wert.
+visualizar_cuadricula=Raster darstellen
+Etiqueta=Etikett
+nuevo_tooltip=Erstellt ein neues Projekt
+Sample=Beispiel
+Valor=Wert
+Tiempo=Zeit
+Campo_clasifica=Klassifikationsfeld
+insertar_poligono=Polygon einf\u00FCgen
+Mostrar_siempre=Immer zeigen
+angulo_rotacion=Drehwinkel\:
+mapas=Karten
+configurar=Konfigurieren
+campo=Feld
+por_encima_de=\u00FCber\:
+leyenda_campo_unido=Man verwendt ein Field der Verbindung in der Legende (und/oder Etikettierung). Tauschen Sie die Legende vorher aus, die Verbindung aufzul\u00F6sen.
+nombre=Name
+alerta=Achtung
+propiedades_marco_leyenda=Eigenschaften des Legenderahmens
+Encuadre_Vista=Ansicht im Bildausschnitt verschieben
+Intervalos_por_rupturas_naturales=Intervalle durch nat\u00FCrliche Brechungen
+extension=Verl\u00E4ngerung
+propiedades_tema=Eigenschaften des Themas
+modification_date=Letzte \u00C4nderung
+formato=Format
+igual_todos_lados=Gleiche Verschiebung in alle Richtungen
+Back=Zur\u00FCck
+Nuevo_conjunto=Neuer Datensatz
+coincidir_tamano=Gr\u00F6\u00DFe angleichen\:
+Zoom_Select=Zur Auswahl zoomen
+Usar_indice_espacial=r\u00E4umlichen Index benutzen
+background_color=Hintergrundfarbe
+north=Nord
+reproyectar_pregunta=W\u00FCnschen Sie eine neue Projektion?
+Cambio_Color=Farbe \u00E4ndern
+seleccione_fecha=W\u00E4hlen sie ein Datum aus ...
+fallo_crear_pool=Fehler beim Herstellen des Verbindungspools
+Intervalos=Intervalle
+jpg=JPEG-Datei
+Herramientas_vista=Ansichtswerkzeuge
+Encuadre=Bildausschnitt
+Triangulo=Dreieck
+tamano_posicion=Gr\u00F6\u00DFe und Position
+untitled=Ohne Titel
+base_datos=Datenbank
+__espacio_vertical=Vertikaler Abstand\:
+Salir=Schlie\u00DFen
+altura=H\u00F6he\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=L\u00F6schen aller Register ab ...
+select_geom_field=W\u00E4hlen Sie das Feld mit der Geometrie aus.
+seleccione_tabla_origen=W\u00E4hlen Sie die Originaltabelle f\u00FCr die Verbindung aus.
+Superior=Oben
+ascending_order=Aufsteigende Ordnung
+insertar_vista=Ansicht einf\u00FCgen
+Color_Contorno=Konturfarbe\:
+Centimetros=Zentimeter
+Nombre_que_se_le_dara_al_zoom=Name des Zooms
+tamano_pagina=Seitenformat\:
+Accion_Predefinida=Vordefinierte Aktion
+Bold=Fett
+minimo=Minimal
+divisiones_izquierda=Teilungen auf der linken Seite
+Imagen=Bild
+propiedades_marco_imagenes=Eigenschaften des Bildrahmens
+orientacion=Ausrichtung
+el_numero_maximo_de_intervalos_para_este_campo_es=Die maximal Intervallenummer f\u00FCr dieses Feld ist
+tablas=Tabellen
+Seleccionar_del_conjunto=Aus dem Datensatz ausw\u00E4hlen
+Preparar_pagina=Seite einrichten
+error_comunicacion_servidor=Verbindungsfehler mit dem Server
+Muestra_los_atributos_de_las_capas_seleccionadas=Zeigt die Attribute der ausgew\u00E4hlten Layer.
+anterior=Zur\u00FCck
+__seleccion_de_fuente=Auswahl der Schriftart
+rango_de_escalas=Ma\u00DFstabsbereich
+mosaico_tooltip=Mosaik
+Calcular_intervalos=Intervalle berechnen
+lineal_directo=Direktlineal
+Simbolo_Unico=Einmaliges Symbol
+propiedades_raster=Eigenschaften der Rasterung
+Anadir_al_conjunto=Zum Datensatz hinzuf\u00FCgen
+Guardar=Speichern
+bmp=BMP-Dateien
+Eliminar=L\u00F6schen
+seleccionar_por_rectangulo=Auswahlrahmen
+ymax=Maximalwert y
+__lineas=Linien
+Leyenda=Legende
+Style=Stil
+Capas_del_localizador=Navigatorlayer
+Origen_de_datos=Herkunft der Daten
+Personalizado=Benutzerdefiniert
+Linea=Linie
+Zoom_Completo_Vista=Zoom auf Alles im Bildausschnitt
+Coberturas=Covers
+Guardar_el_zoom_actual=Aktuellen Zoom speichern
+seleccionar_por_punto=\u00DCber Punkt ausw\u00E4hlen
+cancelar=Abbrechen
+nombre_cobertura=Name der Bedeckung
+Valores_unicos=Einmalige Werte
+Sean_iguales_a=gleich sind wie
+visibles=Sichtbar
+automatico=Automatisch
+maximo=Maximal
+next=Weiter
+insertar_punto=Punkt einf\u00FCgen
+ventana_proyecto=Projektfenster
+alto=Hoch
+Error_abriendo_el_fichero=Fehler bei \u00D6ffnen der Datei
+tarea_en_progreso=Auftrag wird bearbeitet.
+Valores=Werte
+alta=Hoch
+borrador=Entwurf
+cargar_leyenda=Legende laden
+Mostrar_Contorno=Kontur zeigen
+Tipo_de_intervalos=Intervalltyp
+etiquetas=Etiketten\:
+Color_inicio=Anfangsfarbe\:
+no_visibles=Unsichtbar
+grados=Grad\:
+select_unique_field=W\u00E4hlen Sie das einmalige Feld aus.
+colocar_alrededor_todos=Um alle Grafiken anordnen.
+fuente=Schriftart
+seleccionar_CRS=CRS ausw\u00E4hlen
+recorte_vista=Ausschneiden nach Augenma\u00DF
+En_pixels=In Pixeln
+toda_la_tabla=Die gesamte Tabelle
+medir_area=Fl\u00E4che messen
+Fichero=Datei
+Zoom_pixel=Zoom zur Rasteraufl\u00F6sung
+alinear=Ausrichtung
+vistas=Ansichten
+Seleccionar=ausw\u00E4hlen
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zeigt Elemente des Layers mit je einem Symbol pro Wert.
+Dado_un_campo_de_atributos=Bei vorgegebenen Attributfeld\:
+Error_accediendo_a_los_datos=Fehler beim Zugriff auf die Daten
+debe_estar_activada=Sollte aktiviert sein.
+__redimensionar_texto_escala=Textgr\u00F6\u00DFe an den Ansichtsma\u00DFstab anpassen
+Mas_100=Die Anzahl der Werte ist h\u00F6her als 100 und es ist keine Information verf\u00FCgbar.
+Next=Weiter
+Esten_contenidos_en=enthalten sind in
+creation_date=Erstellungsdatum
+Localizador_por_atributo=F\u00FCr Attribut lokalisieren
+preparar_pagina=Seite einrichten
+guardado=Gespeichert in
+Enlazar_a_ficheros_de_imagen=Link zu Bilddateien
+siguiente=Weiter
+presentacion=Pr\u00E4sentation
+sobre_la_barra=Auf dem Balken
+Tipo_de_linea=Strichtyp
+tipo_dato=Datentyp
+Color_final=Endfarbe\:
+servidor=Server
+Yardas=Yards
+wcs_properties=WCS-Eigenschaften
+vacia=Leer
+Contengan=beinhalten
+campo_altura_texto=H\u00F6he Textfeld\:
+Subir_capa=Layer nach oben
+Nombre=Name
+ambito=Bereich
+seleccione_tabla=W\u00E4hlen sie die Tabelle aus.
+Seleccion_por_tema=Auswahl \u00FCber Thema
+agrupar=Gruppieren
+lsup_izq=x oben links
+Zoom=Zoom
+Configurar_localizador=Navigator konfigurieren ...
+Fuente=Schriftart
+Seleccionar_de_las_capas_activas_los_elementos_que=In den aktiven Layern nach Elementen suchen, die\:
+tamano=Gr\u00F6\u00DFe\:
+Previsualizacion_de_simbolo=Symbolvoransicht
+fallo_obtener_conexion_existente=Fehler beim Laden einer bestehenden Verbindung
+Nueva_tabla=Neue Tabelle
+Aceptar=OK
+Intervalos_equidistantes=Gleichwertige IIntervalle
+lppp=dpi
+N\u00FAm_intervalos=Anzahl Intervalle
+descending_order_tooltip=Sortierung nach dem ausgew\u00E4hlten Feld in absteigender Ordnung.
+borrar=L\u00F6schen
+Grosor_de_linea=Strichst\u00E4rke
+relleno=F\u00FCllung\:
+cambio_nombre=Namen \u00E4ndern
+formato_incorrecto=Unrichtig Format
+mas_de_100_simbolos=Mehr als 100 Symbols liefern keine Information zu der Karte
+espaciado_vertical=Vertikaler Rasterabstand
+Editar_leyenda=Legende editieren
+rectangulo=Rechteck
+Visualizacion=Visualisierung
+Pies=Feet
+seleccionar_capas=Layer ausw\u00E4hlen
+nuevo_proyecto=Neues Projekt
+Herramientas=Werkzeuge
+bands=Farbstreifen
+cancel=Abbrechen
+Vista=Ansicht
+fallo_registrar_conexion=Fehler bei der Verbindungsregistrierung
+tamano_metros=Gr\u00F6\u00DFe in Metern
+seleccione_campo_enlace=W\u00E4hlen Sie das Feld aus, \u00FCber das Sie verlinken wollen.
+seleccionar_coberturas=Covers ausw\u00E4hlen
+Mapa=Karte
+insertar_recta=Gerade einf\u00FCgen
+quiere_continuar=W\u00F6llen Sie wietermachen?
+descripcion=Beschreibung
+importar=Importieren
+Quitar_Todos=Alle entfernen
+filtro=Filter
+Pulgadas=Inches
+Ayuda=Hilfe
+activar_regla=Lineal aktivieren
+Recuperar_y_eliminar_otros_zoom=Andere Zooms laden oder l\u00F6schen
+anchura=Breite\:
+seleccione_tabla_a_enlazar=W\u00E4hlen Sie die Tabelle aus, die Sie verlinken wollen.
+propiedades_sesion=Eigenschaften der Session
+ninguna_impresora_configurada=Kein Drucker konfiguriert
+Derecho=Rechts
+propiedades_vista=Eigenschaften der Ansicht
+en_el_mapa=Auf der Karte\:
+salir_tooltip=Schlie\u00DFen
+propiedades_mapa=Eigenschaften der Karte
+Sean_disjuntos_a=getrennt sind von
+Elementos_seleccionados_de_la_capa=ausgew\u00E4hlte Elemente des Layers
+resolucion_resultado=Ausgabeauf\u00F6sung\:
+Derecha=Rechts
+Izquierdo=Links
+Anadir_todos=Alle hinzuf\u00FCgen
+Zoom_Mas=Gr\u00F6\u00DFer zoomen
+suma=Summe
+Quitar=Entfernen
+Cancel=Abbrechen
+poligono=Polygon
+guardar_como=Speichern unter ...
+png=PNG-Datei
+Izquierda=Links
+mostrar_unidades=Einheiten anzeigen
+Abrir_una_capa=Layer \u00F6ffnen
+zooms=Zooms
+(escala_maxima)=(Gr\u00F6\u00DFter Ma\u00DFstab)
+exportar_pdf=Als pdf exportieren.
+Valores_Unicos=Einmalige Werte
+Desplazamiento=Verschieben
+tipos_de_documentos=Dokumenttyp\:
+seleccion_fuente=Schriftart w\u00E4hlen
+Zoom_Menos=Kleiner zoomen
+finish=Beenden
+Hiperenlace=Hyperlink
+Capa=Layer
+xmin=Minimalwert x
+Aplicar=Anwenden
+drivers=Treiber
+visible=Sichtbar
+comentarios=Kommentare
+editable=Editierbar
+Previsualizacion=Voransicht
+quitar_uniones=Verbindungen aufl\u00F6sen
+tamanyo_borde=Randgr\u00F6\u00DFe
+hostname=Hostname
+necesita_un_tema_activo=Es wird ein aktiviertes Thema ben\u00F6tigt.
+espaciado_horizontal=Horizontaler Rasterabstand
+guardar_cambios=\u00C4nderungen speichern?
+insertar_norte=Nordung einf\u00FCgen
+Propiedades_de_la_Capa=Eigenschaften des Layers
+Plain=Einfach
+coor_geograficas=Geografische Koordinaten
+estadisticas=Statistiken
+Italic=Kursiv
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Felder
+A2=A2
+seleccion=Auswahl
+insertar_leyenda=Legende einf\u00FCgen
+A1=A1
+escala_usuario=Benutzerdefinierter Ma\u00DFstab
+A0=A0
+Anadir=Hinzuf\u00FCgen
+Transparencia=Transparenz
+Insertar=Einf\u00FCgen
+mostrar_descripcion=Beschreibung anzeigen.
+Font=Schriftart
+usuario=Benutzer
+Crucen_con=sich kreuzen mit
+Muestra_atributos=Zeigt die Attribute der ausgew\u00E4hlten Layer.
+medir_distancias=Abst\u00E4nde messen
+ancho=Breite
+acerca_de=\u00DCber...
+area_trabajo=Arbeitsbereich
+Circulo=Kreis
+este_por_debajo_de_=Kleiner ist als
+Shapefile=Shapefile
+ok=OK
+usar_marco=Rahmen verwenden
+normal=Normal
+Elegir_Fuente=Schriftart ausw\u00E4hlen
+siempre=Immer
+resto_valores=Andere Werte
+insertar_escala=Ma\u00DFstab einf\u00FCgen
+host=host
+color_texto=Textfarbe\:
+conectar=Verbinden
+guardar_proyecto=Projekt speichern
+visualizacion=Darstellung
+Etiquetados=Etikettierung
+titulo_confirmar=Best\u00E4tigung
+activos=Aktiv
+opacidad=Lichtundurchl\u00E4ssigkeit
+registros=Register
+posicion_linea=Position der Linie
+usar_titulo=Titel verwenden
+refrescar=Aktualisieren
+numero_incorrecto=Unrichtig Nummer
+num_bandas=Anzahl Farbstreifen
+navegacion_vista=\u00DCbersicht der Ansicht
+(escala_minima)=(Kleinster Ma\u00DFstab)
+Tabla_de_Atributos=Attributtabelle
+tipo_fichero_proyecto=Projektdatei gvSIG (*.gvsproj)
+Valor_azul=Wert Blau
+Unidades=Einheiten\:
+Millas=Meilen
+no_activos=inaktiv
+titulo_fframetext=Titel des Textfelds
+Toquen=fassen an
+fallo_realizar_consulta=Abfragefehler
+cartografico=kartografisch
+Examinar=Browse
+Ancho_Contorno=Konturbreite
+seleccionar_tiempo=Zeitposition ausw\u00E4hlen
+tipo_relleno=F\u00FCllstil\:
+escala=Ma\u00DFstab
+barra=Balken\:
+texto=Text
+Formato=Format
+mantener_intervalo=Intervall beibehalten
+Identificar_Resultados=Ergebnisse identifizieren
+este_por_encima_de=Gr\u00F6\u00DFer ist als
+Solo_para_capas_vectoriales=Nur f\u00FCr Vektorlayer
+salir=Schlie\u00DFen
+insertar_rectangulo=Rechteck einf\u00FCgen
+Zoom_Previo=Letzter Zoom
+Atributo=Attribut
+horizontal=Horizontal
+Generar_Intervalos=Intervalle erzeugen
+salvar_raster=Als Rasterung sichern
+seleccion_campos=W\u00E4hlen Sie die Felder aus.
+Detalles=Details
+guardar_tooltip=Speichert die \u00C4nderungen des Projekts
+extents_no_coincidentes=Die ausgew\u00E4hlte Bildgr\u00F6\u00DFe stimmt nicht mit dem Originalbild \u00FCberein.
+No_de_intervalos=Anzahl Intervalle
+xmax=Maximalwert x
+tipo_de_intervalo=Intervallesart
+Rango_de_escalas=Ma\u00DFstabsbereich
+abajo=Nach unten
+_(Valores_unicos)=(Einmalige Werte)
+infodef=Zeigt alle Elemente des Layers mit dem gleichen Symbol.
+metros=Meter
+calidad=Qualit\u00E4t
+editar_propiedades=Eigenschaften editieren
+Intervalo=Intervall
+puerto=port
+desagrupar=Gruppe aufl\u00F6sen
+Propiedades_texto=Eigenschaften des Textes
+valor_pixel=Pixelwert
+alinear_graficos=Grafiken ausrichten
+Inicializando=Initialisiert
+campo_de_documentos_asociados=Feld der verbundenen Dokumente
+marco_vista=Ansichtsrahmen
+Escala=Ma\u00DFstab
+Zoom_Acercar=heranzoomen
+fallo_crear_conexion=Verbindungsfehler
+recorte=zuschnitt
+insertar_circulo=Kreis einf\u00FCgen
+Simbolo_unico=Einmaliges Symbol
+necesita_un_tema_vectorial_activo=Es wird ein aktiviertes Vektorthema ben\u00F6tigt.
+muestra_consola_tooltip=Zeigt die Konsole an.
+adjust_transparency=Transparenz anpassen
+Archivo=Datei
+ascending_order_tooltip=Sortierung nach dem ausgew\u00E4hlten Feld in aufsteigender Ordnung.
+desviacion_tipica=Typische Abweichung
+espere=Warten Sie bitte.
+equal_intervals=Gleiche intervalle
+alineamiento=Ausrichtung\:
+introduce_nombre=Geben Sie den neuen Namen ein.
+abrir_proyecto=Projekt \u00F6ffnen
+No_Shape=Dieser Layer ist kein Shape.
+Campo=Feld
+Campo_de_etiquetado=Etikettierfeld
+sincronizar_color_borde_relleno=Die Randfarbe mit der F\u00FCllung synchronisieren.
+escala_minima=Minimalma\u00DFstab
+transparencia=Transparenz
+linea=Linie
+Nivel_de_transparencia=Transparenzgrad\n
+driver=Treiber
+Etiquetado=Etikettierung
+Guardar_leyenda=Legende speichern
+Rasterfiles=Rasterungsdateien
+exportar_a=Exportieren nach...
+Zoom_Real=Zoom 1\:1
+Estilo=Stil\:
+No_reconocido=Nicht erkannt
+Escala_Minima=Kleinster Ma\u00DFstab
+Cruz=Kreuz
+linea_grafica=Grafiklinie
+alias=Alias
+Color_inicial=Anfangsfarbe\:
+malla_activada=Raster aktiviert
+Etiquetas_estandar=Standard-Etiketten
+Zoom_al_Tema=Auf den Layer zoomen
+Size=Gr\u00F6\u00DFe
+Tabla=Tabelle
+natural_intervals=Nat\u00FCrliche Intervalle
+Propiedades_escala_grafica=Eigenschaften des Ma\u00DFstabsbalkens
+distance_units=Ma\u00DFeinheiten
+escala_maxima=Maximalma\u00DFstab
+bandas=Farbstreifen
+Archivos_de_Disco=Disketten-Dateien
+Recuperar_leyenda=Legende laden
+propiedades_marco_vista=Eigenschaften des Ansichtsrahmens
+Elegir_Color=Farbe ausw\u00E4hlen
+Informacion=Information
+usar_rango=Eine Rangordnung benutzen
+Valor_rojo=Wert Rot
+eliminar_extremos=Extreme l\u00F6schen
+Se_superponen_a=sich \u00FCberlagern \u00FCber
+nombre_capa=Name des Layers
+DGNFiles=DGN-Datei
+No_mostrar=Den Layer nicht zeigen, wenn der Ma\u00DFstab ...
+Tipo_no_reconocido=Typ nicht erkannt
+Altura_fija_de_texto=Fixierte Texth\u00F6he
+Enlazar_a_fichero_de_texto=Link zu Textdateien
+Anterior=Zur\u00FCck
+respuesta_error_servidor=Konnte das Cover nicht bekommen.
+colocar_delante=Nach vorn
+Escala_Maxima=Gr\u00F6\u00DFter Ma\u00DFstab
+simple=einfach
+Cambios_de_estilo=Stil \u00E4ndern
+WMS=WMS
+margenes=R\u00E4nder\:
+link=Link
+propiedades_tabla=Eigenschaften der Tabelle
+exportar=Exportieren
+agrupar_graficos=Grafiken gruppieren
+Leyenda_Por_Defecto=Legende nach Vorgabe
+Kilometros=Kilometer
+Origen_de_Datos=Herkunft der Daten\:
+nuevo=Neu
+descending_order=Absteigende Ordnung
+prueba_conexion=\u00FCberpr\u00FCfen der Verbindung
+Color_de_la_Linea=Strichfarbe\:
+error_lectura=Das Projekt konnte nicht ge\u00F6ffnet werden\n
+Quitar_capa=Layer entfernen
+recorte_colas=Zuschnitt der Randbereiche
+nombre_sesion=Name der Session
+_(Intervalos)=(Intervalle)
+Graficos=Grafiken
+bd=db
+desde_arriba=Von oben\:
+Cancelar=Abbrechen
+poner_temas_a=Themeneinstellungen ...
+resolucion=Aufl\u00F6sung
+infobreak=Zeigt die Elemente des Layers mit der gleichen Farbpalette.
+guardar_leyenda=Legende speichern
+kilometros=Kilometer
+map_units=Karteneinheiten
+Abrir_Imagen=Bild \u00F6ffnen
+varianza=Varianz
+configurar_localizador=Navigator konfigurieren
+abrir_tooltip=Vorhandenes Projekt \u00F6ffnen
+ajustes_linea_grafica=Anpassung Grafiklinie
+Link=Link
+marco=Rahmen
+realce=Heraushebung
+Zoom_Alejar=wegzoomen
+gestion_encuadre=Verwaltung der Bildausschnitte
+Shapefiles=SHP-Dateien
+tamanyo_fuente=Schriftgr\u00F6\u00DFe
+Bajar_capa=Layer nach unten
+__proyeccion_actual=Aktuelle Projektion\:
+Tabla_de_prueba=Testtabelle
+Metros=Meter

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_eu.properties	(revision 42196)
@@ -0,0 +1,629 @@
+#Translations for language: eu
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Kontsulta
+colocar_alrededor_seleccionados=Jarri hautatutako grafikoen inguruan.
+ancho_alto=Zabalera X Altuera
+media=Batez beste
+Quitar_todos=Kendu denak
+Parametros=Parametroak
+conexion_correcta=Konexio zuzena
+selection_color=Hautaketaren kolorea
+cerrar=Itxi
+titulo=Proiektuen kudeatzailea
+tipo_simbolo=Ikur-mota\:
+documentos_existentes=Aurretik dauden dokumentuak
+aceptar=Ados
+grosor_linea=Lerroaren lodiera\:
+Siguiente=Hurrengoa
+ver_tooltip=Proiektuaren leihoa erakusten du
+Intersecten_con=hauekin ebakitzen direnak
+Color_de_Relleno=Kolore-betegarria
+_(Simbolo_unico)=(Ikur bakarra)
+parametros=Parametroak
+tipo_linea=Lerro mota\:
+Servidor=Zerbitzaria
+agrupar_capas=Multzokatu geruzak
+capaWMS=WMS geruza
+Simbologia=Sinbologia
+Propiedades_del_Tema=Gaiaren ezaugarriak
+Ver=Ikusi
+Zoom_Completo=Zooma osorik
+leyenda=Legenda
+Milimetros=Milimetroak
+Tipo_de_leyenda=Legenda-mota
+Perimetro=Perimetroa
+punto=Puntua
+borra_seleccion=Ezabatu aukeraketa
+Cambio_Estilo=Aldatu estiloa
+Anadir_capa=Gehitu geruza
+Ajustar_cobertura_wcs=WCS estaldura doitu
+S\u00EDmbolo=Ikurra
+eliminar_capa=Ezabatu geruza
+ver_tabla_atributos=Ikusi atributuen taula
+Cerrar=Itxi
+espacio=Espazioa\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Geruzaren elementuak atributu eremu jakin bateko koloreak erabiliz erakusten ditu
+select_all=Hautatu denak
+sin_realce=Irtengunerik gabe
+Imprimir=Inprimatu
+join=Lotura
+simplificar=Sinplifikatu
+insertar_imagen=Txertatu irudia
+Cambio_de_estilo=Estilo aldaketa
+Campo_de_clasificacion=Sailkapen eremua
+guardar_clave=Gorde gakoa
+_(Etiquetas_estandar)=(Etiketa estandarrak)
+propiedades_del_tema=Gaiaren ezaugarriak
+baja=Behe
+renombrar=Berriro izendatu
+Error_guardando_la_leyenda=Errorea legenda gordetzean
+insertar_texto=Txertatu testua
+Extent=Extent
+fichero_incorrecto=Fitxategia ez da zuzena
+seleccionar_formato=Hautatu formatua
+statistics=Estatistikak
+servidor_wcs_no_responde=Hautatutako zerbitzariak ez du erantzuten
+quitar_enlaces=Kendu lotuneak
+causa_error_desconocida=Zerbitzariaren ustekabeko errorea
+Anadir_Capa=Gehitu geruza
+sin_titulo=Titulurik gabe
+finalizar=Bukatu
+arriba=Gora
+Igual_que_la_impresora=Inprimagailuaren neurrira
+Un_Layer=Gutxienez geruza bat hautatu behar duzu.
+informacion=Informazioa
+seleccionar_todos=Hautatu guztiak
+guardar_como_plantilla=Gorde txantiloi moduan
+desde_izquierda=Ezkerretik\:
+colocar_a_margenes=Jarri marjinak kontuan hartuta.
+No_mostrar_la_capa_cuando_la_escala=Ez erakutsi geruza eskala horrelakoa bada\:
+Inferior=Behean
+Valor_verde=Berde balioa
+fallo_obtener_tablas=Hutsegitea datu-baseko taulak eskuratzerakoan
+colocar_detras=Jarri atzean
+vertical=Bertikala
+fichero_existe=Hautatutako fitxategia lehendik badago, geruzaren banda moduan
+imagen=Irudia
+tipo_leyenda=Legenda motako fitxategia (*.GVL)
+enlace_vivo=Lotura bizia
+Por_favor_active_el_tema=Mesedez, gaia aktibatu
+importar_extent=Inportatu oraingo bistaren extent-a
+quantile_intervals=Tarte koantilak
+error_escritura=Ezin izan da proiektua gorde
+seleccionar_parametros=Hautatu parametroak
+abrir=Ireki
+General=Orokorra
+unidades=Unitateak\:
+configuracion_andami_tooltip=Andami konfigurazioa
+Cuadrado=Laukia
+rellenar_marco_vista=Bete bista-eremua
+Ancho_de_linea=Lerroaren zabalera
+Dxffiles=.DFX fitxategiak
+tipo_de_leyenda=Legenda-mota
+En_metros=Metrotan
+Descripcion=Deskripzioa
+agrupar_linea=Lerro grafikoa grafikoekin multzokatu.
+info=Info
+Valor_Bandas=Banden balioa
+desconectar=Deskonektatu
+insertar_linea=Txertatu lerroa
+path=Bidea
+clave=Gakoa
+owner=Jabea
+tema=Geruza
+recta=Zuzena
+linf_der=Beheko esk. X
+shape_seleccion=Esportatu hautapena.
+cuando_activo=Aktibo dagoenean
+nuevo_tamano_fuente=Iturri-tamaina berria\:
+abrir_plantilla=Ireki txantiloia
+propiedades_grafico=Grafikoaren ezaugarriak
+Zoom_Menos_Vista=Zoom txikiagoa bistaren gainean
+Nombres=Izenak
+color=Kolorea\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mapako elementuak eremu jakin baten balioarekin etiketatzea ahalbidetzen du
+confirmar_borrar=Ziur al zaude osagaia ezabatu nahi duzula?
+distribuir=Banatu\:
+circulo=Zirkulua
+detalles=Xehetasunak
+por_debajo_de=Honen azpitik\:
+Habilitar_etiquetado=Gaitu etiketak
+registros_seleccionados_total=Hautatutako erregistroak guztira
+ymin=Y txikiena
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu
+propiedades=Ezaugarriak
+reproyectar_aviso=Geruzaren proiekzioa ez da bistaren proiekzioaren berdina. OHARRA\: Zehaztugabea izan daiteke aldaketa batzuekin. Mesedez, irakurri dokumentazioa.
+Ajustar_transparencia=Doitu gardentasuna
+hasta=Honaino\:
+desagrupar_graficos=Desegin grafikoen multzoak
+back=Aurrekoa
+conservar_escala_visualizacion=Gorde bistaratze eskala
+pixeles=pixelak
+utilizar_margenes_impresora=Erabili inprimagailuaren marjinak.
+Al_leer_la_leyenda=Legenda irakurtzean
+Simbolo=Ikurra
+Capas=Geruzak
+Seleccionar_fichero=Hautatu fitxategia
+select_none=Kendu denak
+recuento=Zenbaketa
+Otros=Beste batzuk
+Zoom_Mas_Vista=Zoom handiagoa bistaren gainean
+navegacion=Nabigazioa
+infovalue=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu.
+visualizar_cuadricula=Bistaratu sarea
+Etiqueta=Etiketa
+nuevo_tooltip=Beste proiektu bat sortu
+Sample=Adibidea
+Valor=Balioa
+Tiempo=Denbora
+Campo_clasifica=Sailkapen eremua
+insertar_poligono=Txertatu poligonoa
+Mostrar_siempre=Erakutsi beti
+angulo_rotacion=biraketa angelua\:
+mapas=Mapak
+configurar=Konfiguratu
+campo=Eremua
+por_encima_de=Honen gainetik\:
+leyenda_campo_unido=Legendan (eta/edo etiketan)loturaren eremu bat erabiltzen ari zara. Mesedez, aldatu legenda lotunea kendu aurretik.
+nombre=Izena
+alerta=Oharra
+propiedades_marco_leyenda=Legenda-markoaren ezaugarriak
+Encuadre_Vista=Bistaren gaineko enkoadraketa
+Intervalos_por_rupturas_naturales=Etete naturalen araberako tarteak.
+extension=Luzapena
+propiedades_tema=Gaiaren ezaugarriak
+modification_date=Aldatu zen azken eguna
+formato=Formatua
+igual_todos_lados=Alde guztietatik berdin mugitzea.
+Back=Aurrekoa
+Nuevo_conjunto=Multzo berria
+coincidir_tamano=Egokitu tamaina\:
+Zoom_Select=Zooma hautatutakoari
+Usar_indice_espacial=Espazio-indizea erabili
+background_color=Atzeko kolorea
+north=Iparraldea
+reproyectar_pregunta=Berriro proiektatu nahi duzu?
+Cambio_Color=Kolore aldaketa
+seleccione_fecha=Hautatu data bat...
+fallo_crear_pool=Hutsegitea konexioen elkarbiltzea sortzerakoan
+Intervalos=Tarteak
+jpg=JPEG fitxategiak
+Herramientas_vista=Bistaren tresnak
+Encuadre=Enkoadraketa
+Triangulo=Hirukia
+tamano_posicion=Tamaina eta kokapena
+untitled=Titulurik gabe
+base_datos=Datu-baseak
+__espacio_vertical=Espazio bertikala\:
+Salir=Irten
+altura=Altura\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Kontuan izango da erregistroak hemendik aurrera ezabatzeko\:
+select_geom_field=Hautatu geometria duen eremua
+seleccione_tabla_origen=Hautatu join-aren sorburu-taula
+Superior=Goian
+ascending_order=Goranzko hurrenkera
+insertar_vista=Txertatu bista
+Color_Contorno=Ingeradaren kolorea
+Centimetros=Zentimetroak
+Nombre_que_se_le_dara_al_zoom=Zoomari emango zaion izena
+tamano_pagina=Orrialde-tamaina\:
+Accion_Predefinida=Aurretik zehaztutako ekintza
+Bold=Bold
+minimo=Gutxienez
+divisiones_izquierda=Zatiketak ezkerrean
+Imagen=Irudia
+propiedades_marco_imagenes=Irudi-markoaren ezaugarriak
+orientacion=Orientazioa\:
+el_numero_maximo_de_intervalos_para_este_campo_es=Eremu honek izan dezakeen tarte kopuru handiena hau da
+tablas=Taulak
+Seleccionar_del_conjunto=Multzotik hautatu
+Preparar_pagina=Prestatu orria
+error_comunicacion_servidor=Errorea zerbitzariarekin komunikatzean
+Muestra_los_atributos_de_las_capas_seleccionadas=Hautatutako geruzen atributuak erakusten ditu.
+anterior=Aurrekoa
+__seleccion_de_fuente=Letra-tipoa aukeratu
+rango_de_escalas=Eskala-maila
+mosaico_tooltip=Mosaikoa
+Calcular_intervalos=Kalkulatu bitarteak
+lineal_directo=Zuzeneko lineala
+Simbolo_Unico=Ikur bakarra
+propiedades_raster=Raster-aren ezaugarriak
+Anadir_al_conjunto=Gehitu multzoari
+Guardar=Gorde
+bmp=bmp motako fitxategiak
+Eliminar=Ezabatu
+seleccionar_por_rectangulo=Laukizuzenka hautatu
+ymax=Y handiena
+__lineas=lerroak
+Leyenda=Legenda
+Style=Estiloa
+Capas_del_localizador=Bilagailuaren geruzak
+Origen_de_datos=Datu-iturburua
+Personalizado=Pertsonalizatua
+Linea=Lerroa
+Zoom_Completo_Vista=Zooma osorik bistaren gainean
+Coberturas=Estaldurak
+Guardar_el_zoom_actual=Gorde zooma
+seleccionar_por_punto=Puntuka hautatu
+cancelar=Utzi
+nombre_cobertura=Estalduraren izena
+Valores_unicos=Balio bakarrak
+Sean_iguales_a=honen berdinak direnak
+visibles=Ikusgai
+automatico=Automatikoa
+maximo=Gehienez
+next=Hurrengoa
+insertar_punto=Txertatu puntua
+ventana_proyecto=Proiektuaren leihoa
+alto=Goi
+Error_abriendo_el_fichero=Errorea fitxategia irekitzean
+tarea_en_progreso=Ataza gauzatzen
+Valores=Balioak
+alta=Goi
+borrador=Zirriborroa
+cargar_leyenda=Kargatu legenda
+Mostrar_Contorno=Erakutsi ingerada
+Tipo_de_intervalos=Tarte-mota
+etiquetas=Etiketak\:
+Color_inicio=Hasierako kolorea
+no_visibles=Ez dago ikusgai
+grados=Graduak\:
+select_unique_field=Hautatu eremu bakarra
+colocar_alrededor_todos=Jarri grafiko guztien inguruan.
+fuente=Letra-tipoa
+seleccionar_CRS=Hautatu CRS
+recorte_vista=Bistarako murrizketa
+En_pixels=Pixeletan
+toda_la_tabla=Taula osoa
+medir_area=Azalera neurtu
+Fichero=Fitxategia
+Zoom_pixel=Zooma raster-aren bereizmenari
+alinear=Lerrokatu
+vistas=Bista
+Seleccionar=Hautatu
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu
+Dado_un_campo_de_atributos=Atributu eremua emanda dago
+Error_accediendo_a_los_datos=Errorea datuak atzitzean
+debe_estar_activada=Aktibatuta egon behar da
+__redimensionar_texto_escala=Testua bistaren eskalara egokitu.
+Mas_100=Balio kopurua 100 baino handiagoa da baina ez du informaziorik ematen
+Next=Hurrengoa
+Esten_contenidos_en=hemen daudenak
+creation_date=Sortze data
+Localizador_por_atributo=Ezaugarrien araberako bilagailua
+preparar_pagina=Prestatu orria
+guardado=Hemen gorde da\:
+Enlazar_a_ficheros_de_imagen=Irudi fitxategietara estekatu
+siguiente=Hurrengoa
+presentacion=Aurkezpena
+sobre_la_barra=Barran
+Tipo_de_linea=Lerro-mota
+tipo_dato=Datu mota
+Color_final=Amaierako kolorea\:
+servidor=Zerbitzaria
+Yardas=Yardak
+wcs_properties=WCS ezaugarriak
+vacia=Hutsik
+Contengan=honakoak dituztenak
+campo_altura_texto=Testuaren altura eremua\:
+Subir_capa=Igo geruza
+Nombre=Izena
+ambito=Esparrua
+seleccione_tabla=Hautatu taula
+Seleccion_por_tema=Gaika hautatu
+agrupar=Multzokatu
+lsup_izq=Goiko ezk. X
+Zoom=Zooma
+Configurar_localizador=Konfiguratu bilagailua...
+Fuente=Letra-tipoa
+Seleccionar_de_las_capas_activas_los_elementos_que=Geruza aktiboetatik baldintza hauek betetzen dituzten osagaiak hautatu\:
+tamano=Tamaina\:
+Previsualizacion_de_simbolo=Ikurraren aurrebista
+fallo_obtener_conexion_existente=Hutsegitea sortutako konexioa eskuratzerakoan
+Nueva_tabla=Taula berria
+Aceptar=Ados
+Intervalos_equidistantes=Tarte distantziakideak.
+lppp=ppp
+N\u00FAm_intervalos=Tarte kopurua
+descending_order_tooltip=Ordenatu hautatutako eremua beheranzko hurrenkeran
+borrar=Ezabatu
+Grosor_de_linea=Lerroaren lodiera
+relleno=Betegarria\:
+cambio_nombre=Izen aldaketa
+formato_incorrecto=Formatoa ez da zuzena
+mas_de_100_simbolos=100 sinbolo baino gehiagok ez diote planoari informaziorik eransten.
+espaciado_vertical=Sarearen tarte bertikala
+Editar_leyenda=Editatu legenda
+rectangulo=Laukizuzena
+Visualizacion=Bistaratzea
+Pies=Oinak
+seleccionar_capas=Hautatu geruzak
+nuevo_proyecto=Proiektu berria
+Herramientas=Tresnak
+bands=Bandak
+cancel=Utzi
+Vista=Bista
+fallo_registrar_conexion=Hutsegitea konexioaren erregistroan
+tamano_metros=Tamaina metrotan
+seleccione_campo_enlace=Hautatu lotzeko erabiliko den eremua
+seleccionar_coberturas=Hautatu estaldura
+Mapa=Mapa
+insertar_recta=Txertatu zuzena
+quiere_continuar=Ziur zaude irten nahi duzula?
+descripcion=Deskripzioa
+importar=Inportatu
+Quitar_Todos=Kendu denak
+filtro=Iragazkia
+Pulgadas=Hazbeteak
+Ayuda=Laguntza
+activar_regla=Erregela aktibatu
+Recuperar_y_eliminar_otros_zoom=Beste zoom batzuk berreskuratu eta ezabatu
+anchura=Zabalera\:
+seleccione_tabla_a_enlazar=Hautatu lotu beharreko taula
+propiedades_sesion=Saioaren ezaugarriak
+ninguna_impresora_configurada=Ez dago konfiguratutako inprimagailurik
+Derecho=Eskuina
+propiedades_vista=Bistaren ezaugarriak
+en_el_mapa=Mapan\:
+salir_tooltip=Irten
+propiedades_mapa=Maparen ezaugarriak
+Sean_disjuntos_a=honen disjuntu direnak
+Elementos_seleccionados_de_la_capa=geruzatik hautatu diren osagaiak
+resolucion_resultado=Emaitzaren ebazpena\:
+Derecha=Eskuina
+Izquierdo=Ezkerra
+Anadir_todos=Gehitu guztiak
+Zoom_Mas=Zoom handiagoa
+suma=Batura
+Quitar=Kendu
+Cancel=Utzi
+poligono=Poligonoa
+guardar_como=Gorde honela\:
+png=png fitxategiak
+Izquierda=Ezkerra
+mostrar_unidades=Bistaratu unitateak
+Abrir_una_capa=Geruza bat gaineratu
+zooms=Zoomak
+(escala_maxima)=(eskala handiena)
+exportar_pdf=Esportatu pdf batera
+Valores_Unicos=Balio bakarrak
+Desplazamiento=Lekualdaketa
+tipos_de_documentos=Agiri-motak
+seleccion_fuente=Letra-tipoa aukeratu
+Zoom_Menos=Zoom txikiagoa
+finish=Bukatu
+Hiperenlace=Hiperesteka
+Capa=Geruza
+xmin=X txikiena
+Aplicar=Aplikatu
+drivers=Driverrak
+visible=Ikusgai
+comentarios=Iruzkinak
+editable=Editagarria
+Previsualizacion=Aurrebista
+quitar_uniones=Kendu loturak
+tamanyo_borde=Ertzaren tamaina
+hostname=Hostname
+necesita_un_tema_activo=Gai bat aktibo egon behar da
+espaciado_horizontal=Sarearen tarte horizontala
+guardar_cambios=Aldaketak gorde nahi dituzu?
+insertar_norte=Iparraldea txertatu
+Propiedades_de_la_Capa=Geruzaren ezaugarriak
+Plain=Plain
+coor_geograficas=Koor. geografikoak
+estadisticas=Estatistikak
+Italic=Italic
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Eremuak
+A2=A2
+seleccion=Hautaketa
+insertar_leyenda=Txertatu legenda
+A1=A1
+escala_usuario=Erabiltzaileak zehaztutako eskala
+A0=A0
+Anadir=Gehitu
+Transparencia=Gardentasuna
+Insertar=Txertatu
+mostrar_descripcion=Erakutsi deskribapena
+Font=Letra-tipoa
+usuario=erabiltzailea
+Crucen_con=hauekin gurutzatzen direnak
+Muestra_atributos=Hautatutako geruzen atributuak erakusten ditu.
+medir_distancias=Distantziak neurtu
+ancho=Zabalera
+acerca_de=Honi buruz\:
+area_trabajo=Lan eremua
+Circulo=Zirkulua
+este_por_debajo_de_=Honen azpitik egotea\:
+Shapefile=Shapefile
+ok=Ok
+usar_marco=Erabili markoa
+normal=Normala
+Elegir_Fuente=Hautatu letra-tipoa
+siempre=Beti
+resto_valores=Gainerako balioak
+insertar_escala=Txertatu eskala
+host=host
+color_texto=Testuaren kolorea\:
+conectar=Konektatu
+guardar_proyecto=Gorde proiektua
+visualizacion=Bistaratzea
+Etiquetados=Etiketatuak
+titulo_confirmar=Baieztapena
+activos=Aktiboak
+opacidad=Opakotasuna
+registros=erregistroak
+posicion_linea=Lerroaren kokalekua
+usar_titulo=Erabili titulua
+refrescar=Eguneratu
+numero_incorrecto=Zenbakia ez da zuzena
+num_bandas=Banda kopurua
+navegacion_vista=Nabigazio Ikuspegia
+(escala_minima)=(eskala txikiena)
+Tabla_de_Atributos=Atributuen taula
+tipo_fichero_proyecto=gvSIG (*.gvsproj) proiektu fitxategia
+Valor_azul=Urdin balioa
+Unidades=Unitateak\:
+Millas=Miliak
+no_activos=Ez daude aktibo
+titulo_fframetext=Testu eremuaren titulua
+fallo_realizar_consulta=Hutsegitea kontsulta egiterakoan
+cartografico=Kartografikoa
+Examinar=Aztertu
+Ancho_Contorno=Ingeradaren zabalera
+seleccionar_tiempo=Hautatu kokapena denborarako
+tipo_relleno=Betegarri-mota\:
+escala=Eskala
+barra=Barra\:
+texto=Testua
+Formato=Formatua
+mantener_intervalo=Tartea mantendu
+Identificar_Resultados=Identifikatu emaitzak
+este_por_encima_de=Honen gainetik egotea\:
+Solo_para_capas_vectoriales=Bektore-geruzetarako bakarrik
+salir=Irten
+insertar_rectangulo=Txertatu laukizuzena
+Zoom_Previo=Aurretiko zooma
+Atributo=Atributua
+horizontal=Horizontala
+Generar_Intervalos=Sortu tarteak
+salvar_raster=Raster-ean gorde
+seleccion_campos=Hautatu eremuak
+Detalles=Xehetasunak
+guardar_tooltip=Gorde proiektuaren aldaketak
+extents_no_coincidentes=Hautatutako irudiaren extent-a ez dator bat jatorrizko irudiarekin.
+No_de_intervalos=Tarte kop.
+xmax=X handiena
+tipo_de_intervalo=Tarte mota
+Rango_de_escalas=Eskala-maila
+abajo=Behera
+_(Valores_unicos)=(Balio bakarrak)
+infodef=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu.
+metros=Metroak
+calidad=Kalitatea
+editar_propiedades=Editatu ezaugarriak
+Intervalo=Tartea
+puerto=ataka
+desagrupar=Desegin multzoak
+Propiedades_texto=Testuaren ezaugarriak
+valor_pixel=Pixelaren balioa
+alinear_graficos=Grafikoak lerrokatu
+Inicializando=Hasten
+campo_de_documentos_asociados=Atxikitako dokumentuen eremua
+marco_vista=Bista-eremua
+Escala=Eskala
+Zoom_Acercar=Hurbiltzeko zooma
+fallo_crear_conexion=Hutsegitea konexioa sortzerakoan
+recorte=ebakina
+insertar_circulo=Txertatu zirkulua
+Simbolo_unico=Ikur bakarra
+necesita_un_tema_vectorial_activo=Bektore-gai bat aktibo egon behar da
+muestra_consola_tooltip=Kontsola erakusten du
+adjust_transparency=Doitu gardentasuna
+Archivo=Fitxategia
+ascending_order_tooltip=Ordenatu hautatutako eremua goranzko hurrenkeran
+desviacion_tipica=Ohiko desbideratzea
+espere=Itxaron, mesedez
+equal_intervals=Tarte berdinak
+alineamiento=Lerrokadura
+introduce_nombre=Sartu izen berria
+abrir_proyecto=Proiektua ireki
+No_Shape=Layer hau ez da Shape motakoa
+Campo=Eremua
+Campo_de_etiquetado=Etiketatze eremua
+sincronizar_color_borde_relleno=Ertzaren kolorea eta betegarriarena sinkronizatu\:
+escala_minima=eskala txikiena
+transparencia=Gardentasuna
+linea=Lerroa
+Nivel_de_transparencia=Gardentasun maila
+driver=driver
+Etiquetado=Etiketak
+Guardar_leyenda=Gorde legenda
+Rasterfiles=Raster fitxategiak
+exportar_a=Hona esportatu\:
+Zoom_Real=1\:1 zooma
+Estilo=Estiloa\:
+No_reconocido=Ezagutugabea
+Escala_Minima=Eskala txikiena
+Cruz=Gurutzea
+linea_grafica=Lerro grafikoa
+alias=Ezizena
+Color_inicial=Hasierako kolorea\:
+malla_activada=Sarea aktibatuta
+Etiquetas_estandar=Etiketa estandarrak
+Zoom_al_Tema=Zooma gaiari
+Size=Size
+Tabla=Taula
+natural_intervals=Tarte naturalak
+Propiedades_escala_grafica=Eskala grafikoaren ezaugarriak
+distance_units=Neurri unitateak
+escala_maxima=eskala handiena
+bandas=Bandak
+Archivos_de_Disco=Disko-fitxategiak
+Recuperar_leyenda=Berreskuratu legenda
+propiedades_marco_vista=Bista-markoaren ezaugarriak
+Elegir_Color=Hautatu kolorea
+Informacion=Informazioa
+usar_rango=Erabili maila bat
+Valor_rojo=Gorri balioa
+eliminar_extremos=Ezabatu muturrak
+Se_superponen_a=honakoei gainjartzen zaizkienak
+nombre_capa=Geruzaren izena
+DGNFiles=.DGN fitxategiak
+No_mostrar=Ez erakutsi geruza eskala horrelakoa bada
+Tipo_no_reconocido=Mota ezezaguna
+Altura_fija_de_texto=Testuaren altura finkoa
+Enlazar_a_fichero_de_texto=Testu fitxategietara estekatu
+Anterior=Aurrekoa
+respuesta_error_servidor=Ezin izan da estaldura lortu
+colocar_delante=Jarri aurrean
+Escala_Maxima=Eskala handiena
+simple=Bakuna
+Cambios_de_estilo=Estilo aldaketak
+WMS=WMS
+margenes=Marjinak
+link=Lotura
+propiedades_tabla=Taularen ezaugarriak
+exportar=Esportatu
+agrupar_graficos=Multzokatu grafikoak
+Leyenda_Por_Defecto=Legenda lehenetsia
+Kilometros=Kilometroak
+Origen_de_Datos=Datu-iturburua\:
+nuevo=Berria
+descending_order=Beheranzko hurrenkera
+prueba_conexion=Konexio-proba
+Color_de_la_Linea=Lerroaren kolorea\:
+error_lectura=Ezin izan da proiektua ireki
+Quitar_capa=Kendu geruza
+recorte_colas=Ilaren ebakina
+nombre_sesion=Saioaren izena
+_(Intervalos)=(Tarteak)
+Graficos=Grafikoak
+bd=bd
+desde_arriba=Goitik\:
+Cancelar=Utzi
+poner_temas_a=Jarri gaiak aktibo
+resolucion=Ebazpena
+infobreak=Geruzaren osagaiak kolore-sorta erabiliz erakusten ditu.
+guardar_leyenda=Gorde legenda
+kilometros=Kilometroak
+map_units=Maparen unitateak
+Abrir_Imagen=Irudia ireki
+varianza=Bariantza
+configurar_localizador=Konfiguratu bilagailua
+abrir_tooltip=Aurreko proiektu bat irekitzen du
+ajustes_linea_grafica=Lerro grafikoaren doitzeak
+Link=Lotura
+marco=Markoa
+realce=Irtengunea
+Zoom_Alejar=Urruntzeko zooma
+gestion_encuadre=Enkoadraketen kudeaketa
+Shapefiles=.SHP fitxategiak
+tamanyo_fuente=Iturri-tamaina
+Bajar_capa=Jaitsi geruza
+__proyeccion_actual=Egungo proiekzioa\:
+Tabla_de_prueba=Proba-taula
+Metros=Metroak

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_it.properties	(revision 42196)
@@ -0,0 +1,630 @@
+#Translations for language: it
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Consulta
+colocar_alrededor_seleccionados=Colloca intorno a quanto selezionato
+ancho_alto=Larghezza X Altezza
+media=Media
+Quitar_todos=Rimuovi tutto
+Parametros=Parametri
+conexion_correcta=Connessione corretta
+selection_color=Seleziona colore
+cerrar=Chiudi
+titulo=Gestore di progetto
+tipo_simbolo=Tipo di simbolo\:
+documentos_existentes=Documento esistente
+aceptar=OK
+grosor_linea=Spessore linea\:
+Siguiente=Seguente
+ver_tooltip=Mostra la finestra di progetto
+Intersecten_con=intersecano con
+Color_de_Relleno=Colore di riempimento\:
+_(Simbolo_unico)=(Simbolo unico)
+parametros=Parametri
+tipo_linea=Tipo di linea\:
+Servidor=Server
+agrupar_capas=Raggruppa layers
+capaWMS=WMSLayer
+Simbologia=Simbologia
+Propiedades_del_Tema=Proprieta' del layer
+Ver=Vedi
+Zoom_Completo=Zoom completo
+leyenda=Leggenda
+Milimetros=Millimetri
+Tipo_de_leyenda=Tipo di leggenda
+Perimetro=Perimetro
+punto=Punto
+borra_seleccion=Cancella quanto selezionato
+Cambio_Estilo=Cambio di Stile
+Anadir_capa=Aggiungi layer
+Ajustar_cobertura_wcs=Aggiustare copertura WCS
+S\u00EDmbolo=Simbolo
+eliminar_capa=Elimina Layer
+ver_tabla_atributos=Mostra tabella degli attributi
+Cerrar=Chiudere
+espacio=Spazio\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra gli elementi del layer usando una gamma di colori in funzione del valore di un determinato campo di attributi
+select_all=Seleziona tutto
+sin_realce=Senza rilievo
+Imprimir=Stampa
+join=Unisci
+simplificar=Semplifica
+insertar_imagen=Inserisci Immagine
+Cambio_de_estilo=Cambio di Stile
+Campo_de_clasificacion=Campo di classificazione
+guardar_clave=Salva la chiave
+_(Etiquetas_estandar)=(Etichette standard)
+propiedades_del_tema=Propriet\u00E1 del layer
+baja=Basso
+renombrar=Rinomina
+Error_guardando_la_leyenda=Errore salvando la legenda
+insertar_texto=Inserisci Testo
+Extent=Estensione
+fichero_incorrecto=File non corretto
+seleccionar_formato=Seleziona Formato
+statistics=Statistica
+servidor_wcs_no_responde=Il server selezionato non risponde
+quitar_enlaces=Elimina collegamenti
+causa_error_desconocida=Causa dell'errore sconosciuta
+Anadir_Capa=Aggiungi Layer
+sin_titulo=Senza titolo
+finalizar=Finalizza
+arriba=Alto
+Igual_que_la_impresora=Uguale alla stampante
+Un_Layer=Devi selezionare un layer
+informacion=Informazione
+seleccionar_todos=Seleziona tutto
+guardar_como_plantilla=Salva come sagoma
+desde_izquierda=Da sinistra\:
+colocar_a_margenes=Colloca al margine
+No_mostrar_la_capa_cuando_la_escala=Non mostrare il layer quando la scala
+Inferior=Inferiore
+Valor_verde=Valore verde
+fallo_obtener_tablas=Errore nell'ottenere le tavole della base dati
+colocar_detras=Colloca dietro
+vertical=Verticale
+fichero_existe=Il file selezionato esiste gi\u00E1 come banda del layer
+imagen=Immagine
+tipo_leyenda=Tipo di leggenda (*.GVL)
+enlace_vivo=Collegamento attivo
+Por_favor_active_el_tema=Per favore attiva il layer
+importar_extent=Importare l'estensione attuale della vista
+quantile_intervals=Intervalli quantili
+error_escritura=Non puoi scrivere il file
+seleccionar_parametros=Selezionare i parametri
+abrir=Aprire
+General=Generale
+unidades=Unita'\:
+configuracion_andami_tooltip=Configurazione Andami
+Cuadrado=Quadrato
+rellenar_marco_vista=Riempi il bordo della vista
+Ancho_de_linea=Spessore linea
+Dxffiles=DXFFiles
+tipo_de_leyenda=Tipo legenda
+En_metros=In metri
+Descripcion=Descrizione
+agrupar_linea=Raggruppa linea
+info=Informazione
+Valor_Bandas=Valori bande
+desconectar=Sconnettere
+insertar_linea=Inserisci Linea
+path=Direzione
+clave=Chiave
+owner=Proprietario
+tema=Layer
+recta=Retta
+linf_der=X in basso a destra
+shape_seleccion=Esporta quanto selezionato
+cuando_activo=Quando attivo
+nuevo_tamano_fuente=Nuova dimensione carattere\:
+abrir_plantilla=Apri sagoma
+propiedades_grafico=Proprieta' del grafico
+Zoom_Menos_Vista=Disminuisci Zoom Vista
+Nombres=Nomi
+color=Colore\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permette di etichettare gli elementi della mappa con il valore di un determinato campo
+confirmar_borrar=Gli elementi saranno rimossi. Sei sicuro?
+distribuir=Distribuisci\:
+circulo=Cerchio
+detalles=Dettagli
+por_debajo_de=dal basso\:
+Habilitar_etiquetado=Attiva etichetta
+registros_seleccionados_total=Totale registri selezionati
+ymin=Y minima
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tutti gli elementi di un layer usando lo stesso simbolo
+propiedades=Proprieta'
+reproyectar_aviso=La proiezione del layer non \u00E9 la stessa della vista\: \npotrebbe essere inesatto a cuasa di alcune trasformazioni. \nPer favore, leggi la documentazione.
+Ajustar_transparencia=Regola trasparenza
+hasta=fino a
+desagrupar_graficos=Disunisci grafici
+back=Precedente
+conservar_escala_visualizacion=Mantieni scala di visualizzazione
+pixeles=pixeles
+utilizar_margenes_impresora=Utilizza i margini della stampante.
+Al_leer_la_leyenda=Leggendo la legenda
+Simbolo=Simbolo
+Capas=Layers
+Seleccionar_fichero=Seleziona file
+select_none=Togli tutto
+recuento=Riconto
+Otros=Altro
+Zoom_Mas_Vista=Aumenta Zoom Vista
+navegacion=Navigazione
+infovalue=Mostra gli elementi del layer usando un simbolo per ogni valore.
+visualizar_cuadricula=Visualizza maglia
+Etiqueta=Etichetta
+nuevo_tooltip=Crea nuovo progetto
+Sample=Esempio
+Valor=Valore
+Tiempo=Tempo
+Campo_clasifica=Campo di classificazione
+insertar_poligono=Inserisci Poligono
+Mostrar_siempre=Mostra sempre
+angulo_rotacion=Angolo di rotazione\:
+mapas=Mappe
+configurar=Configura
+campo=Campo
+por_encima_de=dall'alto\:
+leyenda_campo_unido=Si sta utilizzando un campo dell'unione nella legenda (e/o etichettato). Cambia le legenda prima di togliere l'unione.
+nombre=Nome
+alerta=Avviso
+propiedades_marco_leyenda=Proprieta' del bordo della leggenda
+Encuadre_Vista=Vista zoom
+Intervalos_por_rupturas_naturales=Intervalli per rotture naturali.
+extension=Estensione
+propiedades_tema=Proprieta' del layer
+modification_date=Modifizione dati
+formato=Formato
+igual_todos_lados=Uguale per tutti i lati
+Back=Precedente
+Nuevo_conjunto=Nuovo insieme
+coincidir_tamano=Eguagliare dimensioni\:
+Zoom_Select=Zoom selezionato
+Usar_indice_espacial=Usare indice spaziale
+background_color=Colore sfondo
+north=Nord
+reproyectar_pregunta=Vuoi rifare il progetto ?
+Cambio_Color=Cambio di Colore
+seleccione_fecha=Seleziona data
+fallo_crear_pool=Errore nella crezione del Pool de Conexiones
+Intervalos=Intervalli
+jpg=JPEG files
+Herramientas_vista=Vista Stumenti
+Encuadre=Inquadra
+Triangulo=Triangolo
+tamano_posicion=Dimensione e posizione
+untitled=Senza titolo
+base_datos=Base dati
+__espacio_vertical=Spazio verticale\:
+Salir=Esci
+altura=Altezza\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Cancella i registri da
+select_geom_field=Seleziona il campo geometrico
+seleccione_tabla_origen=Seleziona la tavola di origine della unione
+Superior=Superiore
+ascending_order=Ordine crescente
+insertar_vista=Inserisci Vista
+Color_Contorno=Colore Contorno
+Centimetros=Centimetri
+Nombre_que_se_le_dara_al_zoom=Nome per lo zoom
+tamano_pagina=Dimensione della pagina
+Accion_Predefinida=Azione Predefinita
+Bold=Bold
+minimo=Minimo
+divisiones_izquierda=Separazioni a sinistra
+Imagen=Immagine
+propiedades_marco_imagenes=Proprieta' del bordo dell'Immagine
+orientacion=Orientazione\:
+el_numero_maximo_de_intervalos_para_este_campo_es=Il numero massimo di intervalli per questo campo \u00E8
+tablas=Tabelle
+Seleccionar_del_conjunto=Seleziona dall'insieme
+Preparar_pagina=Prepara pagina
+error_comunicacion_servidor=Si \u00E9 prodotto un errore comunicando con il server
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostra gli attributi dei layers selezionati
+anterior=Anteriore
+__seleccion_de_fuente=Seleziona carattere
+rango_de_escalas=Rango delle scale
+mosaico_tooltip=Mosaico
+Calcular_intervalos=Calcolare intervallo
+lineal_directo=Lineare diretto
+Simbolo_Unico=Simbolo unico
+propiedades_raster=Propriet\u00E1 del raster
+Anadir_al_conjunto=Aggiungi all'insieme
+Guardar=Salvare
+bmp=BMP files
+Eliminar=Elimina
+seleccionar_por_rectangulo=Seleziona con rettangolo
+ymax=Y massima
+__lineas=linee
+Leyenda=Legenda
+Style=Stile
+Capas_del_localizador=Layers del localizzatore
+Origen_de_datos=Origine dei dati
+Personalizado=Personalizzato
+Linea=Linea
+Zoom_Completo_Vista=Zoom completo della vista
+Coberturas=Coperture
+Guardar_el_zoom_actual=Salvare lo zoom attuale
+seleccionar_por_punto=Seleziona con punto
+cancelar=Cancella
+nombre_cobertura=Nome della copertura
+Valores_unicos=Valori unici
+Sean_iguales_a=sono uguali a
+visibles=Visibile
+automatico=Automatico
+maximo=Massimo
+next=Seguente
+insertar_punto=Inserisci Punto
+ventana_proyecto=Finestra di progetto
+alto=Alto
+Error_abriendo_el_fichero=Errore aprendo il file
+tarea_en_progreso=Lavoro in progresso
+Valores=Valori
+alta=Alta
+borrador=Bozza
+cargar_leyenda=Carica leggenda
+Mostrar_Contorno=Mostra contorno
+Tipo_de_intervalos=Tipo di intervallo
+etiquetas=Etichette\:
+Color_inicio=Colore iniziale
+no_visibles=Non visibili
+grados=Gradi\:
+select_unique_field=Seleziona campo unico
+colocar_alrededor_todos=Colloca intorno a tutto
+fuente=Font
+seleccionar_CRS=Selezionare CRS
+recorte_vista=Ritaglio della vista
+En_pixels=In pixels
+toda_la_tabla=Tutta la tabella
+medir_area=Misura area
+Fichero=File
+Zoom_pixel=Zoom a la risoluzione del raster
+alinear=Allinea
+vistas=Vista
+Seleccionar=Seleziona
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra gli elementi del layer usando un simbolo per ogni valore unico
+Dado_un_campo_de_atributos=Dato mun campo di attributi
+Error_accediendo_a_los_datos=Errore accedendo ai dati
+debe_estar_activada=Deve essere attivata
+__redimensionar_texto_escala=Ridimensiona il testo alla scala della vista
+Mas_100=Pi\u00FA di 100 simboli non apportano informazioni al piano
+Next=Seguente
+Esten_contenidos_en=sono contenuti in
+creation_date=Creazione dati
+Localizador_por_atributo=Localizzatore per attributo
+preparar_pagina=Prepara pagina
+guardado=Salvato
+Enlazar_a_ficheros_de_imagen=Collegamento a files d'immagine
+siguiente=Seguente
+presentacion=Presentazione definitiva
+sobre_la_barra=Sopra la barra
+Tipo_de_linea=Tipo di Linea
+tipo_dato=Tipo di Dato
+Color_final=Colore finale\:
+servidor=Server
+Yardas=Yards
+wcs_properties=Propriet\u00E1 WCS
+vacia=Vuota
+Contengan=contengono
+campo_altura_texto=Altezza del campo di testo\:
+Subir_capa=Layer s\u00FA
+Nombre=Nome
+ambito=Ambito
+seleccione_tabla=Seleziona la tabella
+Seleccion_por_tema=Seleziona per layer
+agrupar=Raggruppa
+lsup_izq=X in alto a sinistra
+Zoom=Zoom
+Configurar_localizador=Configura localizzatore ...
+Fuente=Font
+Seleccionar_de_las_capas_activas_los_elementos_que=Selezionare dai layers attivi gli elementi che\:
+tamano=Dimensione\:
+Previsualizacion_de_simbolo=Previsualizzazione Simbolo
+fallo_obtener_conexion_existente=Errore nell'ottenere una connessione gi\u00E0 creata
+Nueva_tabla=Nuova tabella
+Aceptar=OK
+Intervalos_equidistantes=Intervalli equidistanti
+lppp=ppp
+N\u00FAm_intervalos=Numero di Intervalli
+descending_order_tooltip=Ordina il campo selezionato in ordine decrescente
+borrar=Rimuovi
+Grosor_de_linea=Spessore di linea
+relleno=Riempi\:
+cambio_nombre=Cambio di nome
+formato_incorrecto=Formato non corretto
+mas_de_100_simbolos=Pi\u00FA di 100 simboli non apportano informazioni al piano
+espaciado_vertical=Interlinea verticale
+Editar_leyenda=Modifica leggenda
+rectangulo=Rettangolo
+Visualizacion=Visualizzazione
+Pies=Piedi
+seleccionar_capas=Seleziona Layers
+nuevo_proyecto=Nuovo progetto
+Herramientas=Strumenti
+bands=Bande
+cancel=Cancella
+Vista=Vista
+fallo_registrar_conexion=Errore nel registrare una connessione
+tamano_metros=Dimensione in metri
+seleccione_campo_enlace=Seleziona il campo da collegare
+seleccionar_coberturas=Selezionare coperture
+Mapa=Mappa
+insertar_recta=Inserisci Retta
+quiere_continuar=Sei sicuro di voler continuare?
+descripcion=Descrizione
+importar=Importa
+Quitar_Todos=Rimuovi tutto
+filtro=Filtro
+Pulgadas=Pollici
+Ayuda=Aiuto
+activar_regla=Attiva regola
+Recuperar_y_eliminar_otros_zoom=Recupera ed elimina gli altri zoom
+anchura=Larghezza\:
+seleccione_tabla_a_enlazar=Seleziona la tavola da collegare
+propiedades_sesion=Proprieta' di sessione
+ninguna_impresora_configurada=Nessuna stampante individuata
+Derecho=Destro
+propiedades_vista=Proprieta' della vista
+en_el_mapa=Nella mappa\:
+salir_tooltip=Esci
+propiedades_mapa=Proprieta' della Mappa
+Sean_disjuntos_a=sono diversi da
+Elementos_seleccionados_de_la_capa=gli elementi selezionati nel presente layer
+resolucion_resultado=Determinazione del risultato\:
+Derecha=Destra
+Izquierdo=Sinistro
+Anadir_todos=Aggiungi tutto
+Zoom_Mas=Aumenta Zoom
+suma=Somma
+Quitar=Rimuovi
+Cancel=Cancella
+poligono=Poligono
+guardar_como=Salva come...
+png=PNG files
+Izquierda=Sinistra
+mostrar_unidades=Mostra unit\u00E1
+Abrir_una_capa=Apri un Layer
+zooms=Zoom
+(escala_maxima)=(scala massima)
+exportar_pdf=Esporta come pdf
+Valores_Unicos=Valori Singoli
+Desplazamiento=Spostamento
+tipos_de_documentos=Tipo di documento
+seleccion_fuente=Seleziona carattere
+Zoom_Menos=Disminuisci Zoom
+finish=Finalizza
+Hiperenlace=Collegamento
+Capa=Livello
+xmin=X minima
+Aplicar=Applica
+drivers=Drivers
+visible=Visibile
+comentarios=Commenti
+editable=Pubblicabile
+Previsualizacion=Previsualizzazione
+quitar_uniones=Elimina unioni
+tamanyo_borde=Dimensione del margine
+hostname=Hostaname
+necesita_un_tema_activo=Necessita un tema attivo
+espaciado_horizontal=Interlinea orizzontale
+guardar_cambios=Salvare le modifiche
+insertar_norte=Inserire il nord
+Propiedades_de_la_Capa=Proprieta' del layer
+Plain=Plain
+coor_geograficas=Coord. Geografiche
+estadisticas=Statistica
+Italic=Italic
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Campi
+A2=A2
+seleccion=Selezione
+insertar_leyenda=Inserisci Leggenda
+A1=A1
+escala_usuario=Scala specificata dall'utilizzatore
+A0=A0
+Anadir=Aggiungi
+Transparencia=Transparenza
+Insertar=Inserisci
+mostrar_descripcion=Mostra descrizione
+Font=Font
+usuario=usuario
+Crucen_con=si incrociano con
+Muestra_atributos=Mostra gli attributi dei layers selezionati
+medir_distancias=Misura distanze
+ancho=Larghezza\:
+acerca_de=Cerca...
+area_trabajo=Area di lavoro
+Circulo=Cerchio
+este_por_debajo_de_=Questo sotto a
+Shapefile=Shapefile
+ok=Ok
+usar_marco=Usa margine
+normal=Normale
+Elegir_Fuente=Seleziona Font
+siempre=Sempre
+resto_valores=Resto dei valori
+insertar_escala=Inserisci Scala
+host=macchina
+color_texto=Colore testo\:
+conectar=Connettere
+guardar_proyecto=Salvare progetto
+visualizacion=Visualizzazione
+Etiquetados=Etichettati
+titulo_confirmar=Conferma titolo
+activos=Attivi
+opacidad=Opacit\u00E1
+registros=registri
+posicion_linea=Posiziona della linea
+usar_titulo=Usa titolo
+refrescar=Aggiorna
+numero_incorrecto=Numero non corretto
+num_bandas=Numero delle bande
+navegacion_vista=Vista Navigazione
+(escala_minima)=(scala minima)
+Tabla_de_Atributos=Tabella degli Attributi
+tipo_fichero_proyecto=tipo di file di progetto(*.gvsproj)
+Valor_azul=Valore blu
+Unidades=Unita'
+Millas=Miglia
+no_activos=Non attivi
+titulo_fframetext=Titolo del campo di testo
+Toquen=toccano
+fallo_realizar_consulta=Errore nel realizzare una ricerca
+cartografico=Cartografico
+Examinar=Esamina
+Ancho_Contorno=Spessore contorno
+seleccionar_tiempo=Selezionare il tempo
+tipo_relleno=Tipo di riempimento\:
+escala=Scala
+barra=Barra\:
+texto=Testo
+Formato=Formato
+mantener_intervalo=Mantieni intervallo
+Identificar_Resultados=Identifica Risultati
+este_por_encima_de=Questo sopra a
+Solo_para_capas_vectoriales=Solo per layers vettoriali
+salir=Esci
+insertar_rectangulo=Inserisci Rettangolo
+Zoom_Previo=Zoom Precedente
+Atributo=Attributo
+horizontal=Orizzontale
+Generar_Intervalos=Crea Intervallo
+salvar_raster=Salva raster
+seleccion_campos=Seleziona i campi
+Detalles=Dettagli
+guardar_tooltip=Salvare progetto
+extents_no_coincidentes=L'estensione della immagine selezionata non coincide con la immagine di origine.
+No_de_intervalos=No intervalli
+xmax=X massima
+tipo_de_intervalo=Tipo di intervallo
+Rango_de_escalas=Classe delle scale
+abajo=Basso
+_(Valores_unicos)=(Valore unico)
+infodef=Mostra gli elementi del layer usando lo stesso simbolo.
+metros=Metri
+calidad=Qualita'
+editar_propiedades=Modifica proprieta'
+Intervalo=Intervallo
+puerto=porto
+desagrupar=Disunisci
+Propiedades_texto=Proprieta' del testo
+valor_pixel=Valore pixel
+alinear_graficos=Allinea grafici
+Inicializando=Iniziando
+campo_de_documentos_asociados=Campo dei documenti associati
+marco_vista=Bordo vista
+Escala=Scala
+Zoom_Acercar=Zoom\: avvicina
+fallo_crear_conexion=Errore nel tentare la connessione
+recorte=ritaglio
+insertar_circulo=Inserisci Cerchio
+Simbolo_unico=Simbolo unico
+necesita_un_tema_vectorial_activo=Necessita un tema vettoriale attivo
+muestra_consola_tooltip=Mostra la console
+adjust_transparency=Regola Transparenza
+Archivo=File
+ascending_order_tooltip=Ordina il campo selezionato in ordine crescente
+desviacion_tipica=Deviazione tipica
+espere=Attendere, per favore
+equal_intervals=Intevalli uguali
+alineamiento=Allineamento
+introduce_nombre=Introduci nome
+abrir_proyecto=Apri Progetto
+No_Shape=Questo Layer non e' del tipo Shape
+Campo=Campo
+Campo_de_etiquetado=Campo di etichetta
+sincronizar_color_borde_relleno=Sincronizza il colore del bordo pieno\:
+escala_minima=Scala minima
+transparencia=Transparenza
+linea=Linea
+Nivel_de_transparencia=Livello di trasparenza
+driver=driver
+Etiquetado=Etichettato
+Guardar_leyenda=Salvare Stile
+Rasterfiles=Rasterfiles
+exportar_a=Esporta a...
+Zoom_Real=Zoom 1\:1
+Estilo=Stile\:
+No_reconocido=Non riconosciuto
+Escala_Minima=Scala Minima
+Cruz=Croce
+linea_grafica=Linea Grafica
+alias=Alias
+Color_inicial=Colore iniziale\:
+malla_activada=Rete attivata
+Etiquetas_estandar=Etichette standard
+Zoom_al_Tema=Zoom al layer
+Size=Taglia
+Tabla=Tabella
+natural_intervals=Intervalli naturali
+Propiedades_escala_grafica=Proprieta' della scala
+distance_units=Unita' di distanza
+escala_maxima=Scala massima
+bandas=Bande
+Archivos_de_Disco=Files del disco
+Recuperar_leyenda=Recupera leggenda
+propiedades_marco_vista=Proprieta' del bordo della vista
+Elegir_Color=Seleziona Colore
+Informacion=Informazione
+usar_rango=Usa un rango
+Valor_rojo=Valore rosso
+eliminar_extremos=Elimina gli estremi
+Se_superponen_a=si sovrappongono a
+nombre_capa=Nome del layer
+DGNFiles=DGNFiles
+No_mostrar=Non mostrare
+Tipo_no_reconocido=Tipo non riconosciuto
+Altura_fija_de_texto=Altezza fissa del testo
+Enlazar_a_fichero_de_texto=Collegamento a documento di testo
+Anterior=Anteriore
+respuesta_error_servidor=Non si \u00E9 potuto ottenere la copertura
+colocar_delante=Colloca davanti
+Escala_Maxima=Scala Massima
+simple=Semplice
+Cambios_de_estilo=Cambi di Stile
+WMS=WMS
+margenes=Margini\:
+link=Collegamento
+propiedades_tabla=Proprieta' tabella
+exportar=Esporta
+agrupar_graficos=Raggruppa grafici
+Leyenda_Por_Defecto=Legenda di origine
+Kilometros=Chilometri
+Origen_de_Datos=Origine dei Dati\:
+nuevo=Nuovo
+descending_order=Ordine decrescente
+prueba_conexion=Prova della connessione
+Color_de_la_Linea=Colore Linea
+error_lectura=Non puoi leggere il file
+Quitar_capa=Rimuovi layer
+recorte_colas=Ritaglio degli estremi
+nombre_sesion=Nome sessione
+_(Intervalos)=(Intervalli)
+Graficos=Grafici
+bd=bd
+desde_arriba=Dall'alto\:
+Cancelar=Cancella
+poner_temas_a=Poni layer...
+resolucion=Risoluzione
+infobreak=Mostra gli elementi del layer usando colori differenti.
+guardar_leyenda=Salvare leggenda
+kilometros=Chilometri
+map_units=Unita'di mappa
+Abrir_Imagen=Apri Immagine
+varianza=Varianza
+configurar_localizador=Configura localizzatore
+abrir_tooltip=Apri un Progetto Esistente
+ajustes_linea_grafica=Regola linea grafica
+Link=Collegamento
+marco=Bordo
+realce=Rilievo
+Zoom_Alejar=Zoom\: allontana
+gestion_encuadre=Gestione zoom
+Shapefiles=Shapefiles
+tamanyo_fuente=Dimensione del font
+Bajar_capa=Abbassa layer
+__proyeccion_actual=Proiezione reale\:
+Tabla_de_prueba=Tabella di prova
+Metros=Metri

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_en.properties	(revision 42196)
@@ -0,0 +1,736 @@
+#Translations for language: en
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Query
+colocar_alrededor_seleccionados=Place around the graphics selected.
+contraste=Contrast
+ancho_alto=Wide X Height
+media=Mean
+edit=edit
+Quitar_todos=Remove all
+Parametros=Parameters
+conexion_correcta=Correct connection
+selection_color=Color selection
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+cerrar=Close
+titulo=Project manager
+tipo_simbolo=Type of symbol\:
+documentos_existentes=Existing documents
+stop_edition=Finish edition
+aceptar=OK
+grosor_linea=Line width\:
+Siguiente=Next
+ver_tooltip=Show project window
+Intersecten_con=intersected with
+Color_de_Relleno=Fill color\:
+options.firewall.http.incorrect_host=Invalid HTTP host
+_(Simbolo_unico)=(Unique symbols)
+propiedad=property
+parametros=Parameters
+tipo_linea=Stroke\:
+Servidor=Server
+agrupar_capas=Group layers
+capaWMS=WMSLayer
+Simbologia=Symbols
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+Propiedades_del_Tema=Theme properties
+Ver=Show
+copiar=copy
+guardar=save
+Zoom_Completo=Full Extent
+pixels=pixels
+leyenda=Legend
+Milimetros=Milimeters
+vertices=vertex
+Tipo_de_leyenda=Type of legend
+Perimetro=Perimeter
+punto=Point
+borra_seleccion=Del selection
+Cambio_Estilo=Change Style
+Anadir_capa=Add layer
+to_annotation=Transform to annotation layer
+Ajustar_cobertura_wcs=WCS coverage settings
+S\u00EDmbolo=Symbol
+eliminar_capa=Delete Layer
+web_map_context=Web Map Context
+ver_tabla_atributos=See table of attributes
+Cerrar=Close
+espacio=Space\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Show the layers features using a range of color according to values of a attribute field
+select_all=Select all
+sin_realce=No enhance
+Imprimir=Print
+join=Join
+simplificar=Simplify
+insertar_imagen=Insert Image
+Cambio_de_estilo=Change style
+Campo_de_clasificacion=Classification field
+paste=Paste
+guardar_clave=Save code
+options.firewall.http.password=Password
+_(Etiquetas_estandar)=(Standard labels)
+Error_guardando_la_plantilla=Error saving the template
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+baja=Low
+renombrar=Rename
+Error_guardando_la_leyenda=Error saving legend
+insertar_texto=Insert Text
+options.network.status=Network status
+Extent=Extent
+insert_column=insert column
+fichero_incorrecto=Invalid file
+options.firewall.socks.port=SOCKS proxy port
+online=Online
+insertar_polilinea=insert polyline
+seleccionar_formato=Select Format
+statistics=Statistics
+servidor_wcs_no_responde=No reply on selected server
+quitar_enlaces=Remove links
+causa_error_desconocida=Unexpected server error
+Anadir_Capa=Add Layer
+sin_titulo=Untitled
+finalizar=Finish
+arriba=Up
+Igual_que_la_impresora=Same as printer
+Un_Layer=Select at least one layer
+Indexando_espacialmente=Spatially indexing the layer
+informacion=Information
+insertar_cajetin=insert grid
+seleccionar_todos=Select all
+guardar_como_plantilla=Save as template
+desde_izquierda=From left\:
+colocar_a_margenes=Place with reference to margins.
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+No_mostrar_la_capa_cuando_la_escala=Don\u0092t show the layer when the scale
+Inferior=Lower
+Valor_verde=Green value
+fallo_obtener_tablas=Failed to obtain tables from the data base
+colocar_detras=Place back
+vertical=Vertical
+fichero_existe=Selected file already exists as layer band
+imagen=Image
+tipo_leyenda=Legend files (*.GVL)
+enlace_vivo=Active link
+Por_favor_active_el_tema=Please activate the layer
+importar_extent=Import actual view extent
+quantile_intervals=Quantile interval
+error_escritura=Can\u0092t write file
+tamanyo_pagina=page size
+seleccionar_parametros=Select parameters
+abrir=Open
+General=General
+unidades=Units\:
+configuracion_andami_tooltip=Andami configuration
+Cuadrado=Square
+rellenar_marco_vista=Fill view framework
+Ancho_de_linea=Line Width
+Dxffiles=DXFFiles
+tipo_de_leyenda=Type of legend
+En_metros=In meters
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+coincidir_tamanyo=match size
+Zoom_a_la_capa=Zoom to layer
+options.firewall.http.nonProxy=Connect directly to
+Descripcion=Description
+agrupar_linea=Group graphic line with graphics
+info=Info
+Valor_Bandas=Band value
+desconectar=Disconnect
+insertar_linea=Insert Line
+path=Path
+clave=Code
+Indexando=Indexing...
+owner=Owner
+pref.general=General
+optinos.network.click_to_test_connection=Press button to test the connection
+tema=Layer
+recta=Straight line
+linf_der=lower right X
+shape_seleccion=Export selection.
+cuando_activo=When active
+nuevo_tamano_fuente=New size of font\:
+abrir_plantilla=Open template
+propiedades_grafico=Graphic properties
+Zoom_Menos_Vista=View frame Zoom Out
+Nombres=Names
+color=Color\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Allows to set label of the map elements with the value of a particular field
+confirmar_borrar=The element will be removed. Are you sure?
+distribuir=Distributing\:
+options.firewall.http.user=Username
+circulo=Circle
+detalles=Details
+por_debajo_de=below\:
+Habilitar_etiquetado=Enable labelling
+dehacer=undo
+registros_seleccionados_total=Total of selected records
+ymin=Minimum Y
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Show all the items of a layer using the same symbol
+fallo_capas=layer error
+propiedades=Properties
+reproyectar_aviso=The layer projection is not the same as the views projection.\nATENTION\: It can be unaccurate with some transformations.\nPlease read docs
+Ajustar_transparencia=Adjust Transparency
+hasta=to
+desagrupar_graficos=Ungroup graphics
+back=Previous
+start_edition=Start edition
+intervalo=interval
+conservar_escala_visualizacion=Maintain viewing scale
+pixeles=pixels
+utilizar_margenes_impresora=Use printer margins
+insertar_fila=inster row
+Al_leer_la_leyenda=Reading legend
+Simbolo=Symbol
+Capas=Layers
+muestra=sample
+Seleccionar_fichero=Select file
+select_none=Remove all
+recuento=Recount
+Otros=Other
+Zoom_Mas_Vista=Zoom In View frame
+navegacion=Navigation
+infovalue=It shows elements of the layer using a symbol for each value.
+visualizar_cuadricula=Visualize Grid
+Etiqueta=Label
+nuevo_tooltip=Create a new project
+Sample=Sample
+Valor=Value
+Tiempo=Time
+Campo_clasifica=Classification field
+insertar_poligono=Insert Polygon
+Mostrar_siempre=To show always
+angulo_rotacion=Angle of rotation\:
+mapas=Maps
+configurar=Configure
+campo=Field
+por_encima_de=above\:
+leyenda_campo_unido=You are using a field of the union either in the legend or in the labelling. Please, change the legend before removing the union.
+nombre=Name
+alerta=Warning
+propiedades_marco_leyenda=Properties of legend framework
+Encuadre_Vista=View frame Pan
+Intervalos_por_rupturas_naturales=Intervals by natural breaks.
+extension=Extension
+propiedades_tema=Layer properties
+modification_date=Modification date
+formato=Format
+igual_todos_lados=Equal displacement for all sides.
+Back=Previous
+Nuevo_conjunto=New set
+coincidir_tamano=Match size\:
+Zoom_Select=Zoom to selection
+Usar_indice_espacial=Use spatial index
+background_color=Background color
+north=North
+remove_column=Remove column
+reproyectar_pregunta=Do you want to reproject?
+Cambio_Color=Change Color
+seleccione_fecha=Select date...
+fallo_crear_pool=Failed to create connection pool
+Intervalos=Intervals
+multiples_intervalos=multiple intervals
+jpg=JPEG files
+Herramientas_vista=View tools
+Encuadre=Zoom
+Triangulo=Triangle
+editar_vertices=edit vertex
+remove_row=Remove row
+tamano_posicion=size/position
+untitled=Untitled
+base_datos=Data base
+__espacio_vertical=Vertical spacing\:
+Salir=Exit
+browse=browse
+altura=Height\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... delete registers from
+select_geom_field=Select field with geometry
+seleccione_tabla_origen=Select origin table of the join
+Superior=Upper
+ascending_order=Ascending order
+box=box
+insertar_vista=Insert View
+agrupacion=grouping
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+Color_Contorno=Color Outline
+Centimetros=Centimeters
+export=Export
+Nombre_que_se_le_dara_al_zoom=Name for the zoom
+tamano_pagina=Page Size
+Accion_Predefinida=Predefined Action
+cortar=cut
+Bold=Bold
+minimo=Minimum
+divisiones_izquierda=Divisions to the left
+pegar=paste
+tag=tag
+Imagen=Image
+propiedades_marco_imagenes=Properties of Image framework
+options.firewall.socks.host=SOCKS proxy host
+orientacion=Orientation\:
+el_numero_maximo_de_intervalos_para_este_campo_es=The maximum number of intervals for this field is
+tablas=Tables
+Seleccionar_del_conjunto=Select from set
+Preparar_pagina=Prepare Page
+error_comunicacion_servidor=An error connecting to server
+num_filas=Number of rows
+Muestra_los_atributos_de_las_capas_seleccionadas=Show selected layers attributes
+anterior=Previous
+__seleccion_de_fuente=Font selection
+rango_de_escalas=Scale range
+mosaico_tooltip=Mosaic
+Calcular_intervalos=Compute intervals
+propiedades_cajetin=Grid properties
+lineal_directo=Direct Linear
+Simbolo_Unico=Unique symbol
+plantilla=plantilla
+propiedades_raster=Raster propierties
+Anadir_al_conjunto=Add to set
+Guardar=Save
+bmp=BMP files
+Eliminar=Delete
+show_this_dialog_next_startup=Show this dialog on next startup
+seleccionar_por_rectangulo=Select by rectangle
+ymax=Maximum Y
+__lineas=lines
+Leyenda=Legend
+Style=Style
+Capas_del_localizador=Locator layers
+Origen_de_datos=Data origin
+Personalizado=Custom
+introduzca_intervalo_deseado=insert the desired interval
+Linea=Line
+en_unidades=in units
+Zoom_Completo_Vista=View frame Full Extent
+Coberturas=Coverages
+Guardar_el_zoom_actual=Save current zoom
+Use=this tool to create a virtual layer to perform advanced labelling, based on an existing layer. It changes the selected tool\u0092s visualization by showing one of its<br> fields\u0092 values.</HTML>
+seleccionar_por_punto=Select by point
+cancelar=Cancel
+nombre_cobertura=Coverage\u0092s name
+Valores_unicos=Unique values
+Sean_iguales_a=same as
+visibles=Visible
+automatico=Automatic
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+maximo=Maximum
+next=Next
+insertar_punto=Insert Point
+ventana_proyecto=Project window
+alto=Height
+Error_abriendo_el_fichero=Error opening file
+tarea_en_progreso=Running process
+Valores=Values
+alta=High
+borrador=Draft
+cargar_leyenda=Load legend
+Mostrar_Contorno=Show Outline
+Tipo_de_intervalos=Type of intervals
+etiquetas=Lables\:
+Color_inicio=Begin color
+no_visibles=Not visible
+grados=Degrees\:
+select_unique_field=Select unique field
+colocar_alrededor_todos=Place around all the graphics.
+fuente=Font
+seleccionar_CRS=Select CRS
+recorte_vista=Cut to view
+En_pixels=In pixels
+toda_la_tabla=Entire table
+medir_area=Measure area
+Fichero=File
+desagrupar_capas=ungroup layers
+Zoom_pixel=Zoom to raster resolution
+alinear=Align
+vistas=Views
+Seleccionar=Select
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Show the layers features using a each unique value symbol
+Dado_un_campo_de_atributos=Given a atribute field
+Error_accediendo_a_los_datos=Error getting data
+debe_estar_activada=Must be active
+__redimensionar_texto_escala=Resize the text to the view scale
+elemento_ya_existe=the element already exists
+Mas_100=The number of values is higher than 100, and does not provide information
+selecciona_sistema_de_referencia=Choose reference system
+Next=Next
+Esten_contenidos_en=contained in
+creation_date=Creation date
+Localizador_por_atributo=Locate by attribute
+preparar_pagina=Prepare page
+guardado=Saved in
+Enlazar_a_ficheros_de_imagen=Link to image files
+siguiente=Next
+presentacion=Presentation
+sobre_la_barra=On the scale bar
+Tipo_de_linea=Line type
+tipo_dato=Data type
+Color_final=End color\:
+servidor=Server
+Yardas=Yards
+wcs_properties=WCS properties
+vacia=Empty
+Contengan=contain
+num_columnas=Number of columns
+campo_altura_texto=Text field heigth\:
+Subir_capa=Move layer up
+Nombre=Name
+ambito=Scope
+seleccione_tabla=Table select
+Seleccion_por_tema=Theme Selection
+agrupar=Group
+test_now=Check now
+lsup_izq=Upper left X
+Zoom=Pan zoom
+Configurar_localizador=Configure locator ...
+Fuente=Font
+Seleccionar_de_las_capas_activas_los_elementos_que=Select items from active layers that are\:
+options.firewall.http.port=HTTP proxy port
+localizador=Locator
+desde=from
+tamano=Size\:
+Previsualizacion_de_simbolo=Symbol preview
+fallo_obtener_conexion_existente=Failed to get a created connection
+Nueva_tabla=New Table
+Aceptar=OK
+mapa=map
+Intervalos_equidistantes=Equality Intervals
+lppp=ppi
+descending_order_tooltip=Sort by selected field in descending order
+borrar=Delete
+Grosor_de_linea=Line width
+relleno=Fill\:
+cambio_nombre=Name change
+formato_incorrecto=Invalid format
+mas_de_100_simbolos=More than 100 symbols usually do not give any information in a map
+espaciado_vertical=Vertical grid spacing
+Editar_leyenda=Edit style
+rectangulo=Rectangle
+restore_defaults=Restore default values
+Visualizacion=Visualization
+Pies=Feet
+seleccionar_capas=Select Layers
+nuevo_proyecto=New project
+Herramientas=Tools
+bands=Bands
+cancel=Cancel
+Vista=View
+fallo_registrar_conexion=Failed to register a connection
+tamano_metros=Size in meters
+seleccione_campo_enlace=Select field to use for link
+preferences=Preferences...
+seleccionar_coberturas=Select Coverages
+Mapa=Map
+insertar_recta=Insert Straight line
+quiere_continuar=Would you like to continue?
+descripcion=Description
+importar=Import
+Quitar_Todos=Remove All
+filtro=Filter
+Pulgadas=Inches
+Ayuda=Help
+activar_regla=Activate ruler
+Recuperar_y_eliminar_otros_zoom=Recover and delete other zoom
+edicion=edition
+anchura=Width\:
+seleccione_tabla_a_enlazar=Select table to link
+propiedades_sesion=Session properties
+ninguna_impresora_configurada=No printer set
+Derecho=Right
+propiedades_vista=View properties
+en_el_mapa=In the Layout\:
+salir_tooltip=Exit
+propiedades_mapa=Map properties
+Sean_disjuntos_a=disjoint as
+cut=Cut
+Elementos_seleccionados_de_la_capa=selected items of a layer
+resolucion_resultado=Resolution of the result\:
+Derecha=Right
+Izquierdo=Left
+Anadir_todos=Add all
+Zoom_Mas=Zoom In
+suma=Sum
+Quitar=Remove
+Cancel=Cancel
+poligono=Poligon
+guardar_como=Save as...
+png=PNG files
+Izquierda=Left
+mostrar_unidades=Show units
+Abrir_una_capa=Open Layer
+zooms=Zooms
+(escala_maxima)=(maximum scale)
+exportar_pdf=Export to pdf
+Valores_Unicos=Unique values
+Desplazamiento=Displacement
+tipos_de_documentos=Document types
+options.firewall.socks.enabled=Use proxy SOCKS server
+seleccion_fuente=Font selection
+pref.network.firewall=Firewall/Proxy
+Zoom_Menos=Zoom Out
+finish=Finish
+Hiperenlace=Hyperlink
+Capa=Layer
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+xmin=Minimum X
+Aplicar=Apply
+drivers=Drivers
+visible=Visible
+comentarios=Comments
+editable=Editable
+Previsualizacion=Preview
+quitar_uniones=Remove joins
+tamanyo_borde=Border size
+hostname=Hostname
+necesita_un_tema_activo=Needs an active theme
+espaciado_horizontal=Horizontal grid spacing
+guardar_cambios=Save changes?
+insertar_norte=Insert north
+Propiedades_de_la_Capa=Properties of the layer
+Plain=Plain
+coor_geograficas=Geografical coordinates
+estadisticas=Statistics
+Italic=Italic
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Fields
+A2=A2
+seleccion=Selection
+insertar_leyenda=Insert Legend
+A1=A1
+escala_usuario=Scale specified by the user
+A0=A0
+Anadir=Add
+Transparencia=Transparency
+propiedades_capa=Layer properties
+modificar=modify
+Insertar=Insert
+mostrar_descripcion=Show description
+Font=Font
+usuario=user
+Crucen_con=cross over
+Muestra_atributos=Show attributes of selected layers.
+medir_distancias=Measure distances
+ancho=Width
+acerca_de=About...
+area_trabajo=Working area
+Circulo=Circle
+offline=Offline
+este_por_debajo_de_=To be under
+Shapefile=Shapefile
+ok=Ok
+usar_marco=Use frame
+normal=Normal
+Elegir_Fuente=Select Font
+siempre=Always
+resto_valores=Other values
+insertar_escala=Insert Scale
+host=computer
+color_texto=Text color\:
+conectar=Conect
+guardar_proyecto=Save project
+visualizacion=Viewing
+Etiquetados=Labelling
+titulo_confirmar=Confirmation
+activos=Active
+opacidad=Opacity
+registros=records
+posicion_linea=Position of the line
+usar_titulo=Use title
+refrescar=Refresh
+numero_incorrecto=Invalid value
+num_bandas=Number of bands
+navegacion_vista=Navegation in a view
+(escala_minima)=(minimum scale)
+Tabla_de_Atributos=Table of Attributes
+tipo_fichero_proyecto=gvSIG project file(*.gvsproj)
+Valor_azul=Blue Value
+Unidades=Units
+Millas=Miles
+no_activos=Not active
+options.firewall.http.host=HTTP proxy server
+titulo_fframetext=Text field title
+Toquen=in contact with
+fallo_realizar_consulta=Failed to create a query
+cartografico=Cartographic
+Examinar=Browse
+Ancho_Contorno=Outline Width
+seleccionar_tiempo=Select time position
+tipo_relleno=Fill\:
+escala=Scale
+import=Import
+deshacer=undo
+barra=Bar\:
+texto=Text
+Formato=Format
+mantener_intervalo=Keep interval
+Identificar_Resultados=Identify Results
+este_por_encima_de=To be over
+Solo_para_capas_vectoriales=Only for vector layers
+salir=Exit
+grupo=group
+insertar_rectangulo=Insert Rectangle
+Zoom_Previo=Previous Zoom
+Atributo=Attribute
+horizontal=Horizontal
+Generar_Intervalos=Generate Intervals
+salvar_raster=Save as raster
+seleccion_campos=Select fields
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+Detalles=Details
+Error_exportando_SLD=Error exporting SLD
+simbolo=symbol
+guardar_tooltip=Save changes to project
+extents_no_coincidentes=Extent of the selected image does not match with the origin image.
+Formato_de_numero_erroneo=Incorrect number format
+No_de_intervalos=Nr of intervals
+tipo_de_intervalo=Interval type
+xmax=Maximum X
+Rango_de_escalas=Rank of Scales
+_(Valores_unicos)=(Unique values)
+abajo=Down
+infodef=It shows all the elements of a layer using the same symbol.
+polilinea=polyline
+metros=Meters
+copy=Copy
+Intervalo=Interval
+editar_propiedades=Edit properties
+calidad=Quality
+puerto=port
+desagrupar=Ungroup
+Propiedades_texto=Properties of text
+valor_pixel=Pixel value
+transparencia_pixel=Transparency per pixel
+alinear_graficos=Align graphics
+Inicializando=Initializing
+marco_vista=Framework of the view
+campo_de_documentos_asociados=Associated documents field
+Escala=Scale
+Zoom_Acercar=Zoom in
+fallo_crear_conexion=Connection failure
+recorte=clipping
+insertar_circulo=Insert Circle
+necesita_un_tema_vectorial_activo=Needs an active vectorial theme
+Simbolo_unico=Unique symbols
+import_map_context=Import maps from an OGC\u0092s Web Map Context file
+muestra_consola_tooltip=Shows the console
+adjust_transparency=Set Transparency
+Archivo=File
+ascending_order_tooltip=Sort by selected field in ascending order
+desviacion_tipica=Standard deviation
+warning=Warning
+espere=Please wait
+equal_intervals=Equal intervals
+alineamiento=Alignment\:
+introduce_nombre=Type the new name
+abrir_proyecto=Open project
+No_Shape=This Layer is not Shape type
+Campo_de_etiquetado=Labelling field
+Campo=Field
+sincronizar_color_borde_relleno=Sincronize color of stroke and fill\:
+escala_minima=minimum scale
+transparencia=Transparency
+linea=Line
+Nivel_de_transparencia=Transparency Level
+driver=driver
+Etiquetado=Labelling
+Guardar_leyenda=Save Style
+Rasterfiles=Rasterfiles
+insert_row=insert row
+Zoom_Real=1\:1 Zoom
+exportar_a=Export to...
+Estilo=Style\:
+No_reconocido=Not recognized
+Escala_Minima=Minimum scale
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+zoom_mas_vista=Zoom In View frame
+Cruz=Cross
+linea_grafica=Graphic line
+alias=Alias
+malla_activada=Active grid
+Color_inicial=Initial color\:
+Etiquetas_estandar=Standard labels
+Zoom_al_Tema=Zoom to layer
+Size=Size
+Tabla=Table
+natural_intervals=Natural intervals
+Propiedades_escala_grafica=Properties of the scale bar
+distance_units=Measuring units
+escala_maxima=maximum scale
+Recuperar_leyenda=Load legend
+Archivos_de_Disco=Disc files
+bandas=Bands
+propiedades_marco_vista=Properties of view framework
+Elegir_Color=Select Color
+Informacion=Information
+usar_rango=Range in use
+Valor_rojo=Red value
+Se_superponen_a=over
+eliminar_extremos=Remove edges
+nombre_capa=Name of the layer
+pila_de_comandos=commands stack
+DGNFiles=DGNFiles
+No_mostrar=Do not show the layer when the scale
+de=of
+Tipo_no_reconocido=Type not recognized
+Altura_fija_de_texto=Fixed text height
+base=base
+Enlazar_a_fichero_de_texto=Link to text files
+Ventana=Window
+Anterior=Previous
+pref.network=Network
+eliminar_fila=remove row
+respuesta_error_servidor=Cannot get the coverage
+colocar_delante=Bring to front
+Escala_Maxima=Maximum scale
+Cambios_de_estilo=Style changes
+WMS=WMS
+simple=Simple
+margenes=Margins\:
+propiedades_de_la_capa=Layer properties
+link=Link
+options.firewall.http.enabled=Use proxy HTTP server
+exportar=Export
+propiedades_tabla=Table properties
+agrupar_graficos=Group graphics
+Leyenda_Por_Defecto=Default legend
+Kilometros=Kilometers
+Origen_de_Datos=Data Origin\:
+nuevo=New
+descending_order=Descending order
+prueba_conexion=Connection test
+Color_de_la_Linea=Line Color
+error_lectura=Can\u0092t read file
+Quitar_capa=Remove layer
+recorte_colas=Queue clipping
+nombre_sesion=Session name
+descripcion_de_crear_capa_de_anotaciones=<HTML>
+_(Intervalos)=(Intervals)
+Graficos=Graphics
+bd=db
+desde_arriba=From top\:
+Cancelar=Cancel
+poner_temas_a=Set themes to ...
+infobreak=It shows the elements of the layer using a range of colors.
+resolucion=Resolution
+guardar_leyenda=Save legend
+kilometros=Kilometers
+map_units=Map units
+Abrir_Imagen=Open image
+varianza=Variance
+Num_intervalos=Number of Intervals
+configurar_localizador=Configure Locator Map
+abrir_tooltip=Open an existing project
+ajustes_linea_grafica=Graphic line settings
+Link=Link
+marco=Frame
+realce=Enhance
+Zoom_Alejar=Zoom out
+gestion_encuadre=Management of Fit in
+Shapefiles=Shapefiles
+rehacer=redo
+tamanyo_fuente=Font size
+Bajar_capa=Move layer down
+__proyeccion_actual=Current projection\:
+Tabla_de_prueba=Test Table
+Metros=Meters
+No_ha_sido_posible_realizar_la_operacion=The operation could not be performed
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_gl.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Translations for language: gl
+#Mon Jul 03 00:36:20 CEST 2006

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_ca.properties	(revision 42196)
@@ -0,0 +1,656 @@
+#Translations for language: ca
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Consulta
+colocar_alrededor_seleccionados=Col\u00B7locar al voltant dels gr\u00E0fics seleccionats.
+ancho_alto=Ampl\u00E0ria X Al\u00E7\u00E0ria
+media=Media
+Quitar_todos=Llevar tots
+Parametros=Par\u00E0metres
+conexion_correcta=Connexi\u00F3 correcta
+selection_color=Color de la selecci\u00F3
+cerrar=Tancar
+titulo=Gestor de projectes
+tipo_simbolo=Tipus de s\u00EDmbol\:
+documentos_existentes=Documents existents
+aceptar=Acceptar
+grosor_linea=Gruix de l\u00EDnia\:
+Siguiente=Seg\u00FCent
+ver_tooltip=Mostra la finestra de projecte
+Intersecten_con=intersecten amb
+Color_de_Relleno=Color de Farciment
+options.firewall.http.incorrect_host=Host HTTP incorrecte
+_(Simbolo_unico)=(S\u00EDmbol \u00FAnic)
+parametros=Par\u00E0metres
+tipo_linea=Tipus de L\u00EDnia\:
+Servidor=Servidor
+agrupar_capas=Agrupar capes
+capaWMS=CapaWMS
+Simbologia=Simbologia
+Propiedades_del_Tema=Propietats del tema
+Ver=Veure
+Zoom_Completo=Zoom Complet
+leyenda=Llegenda
+Milimetros=Mil\u00B7l\u00EDmetres
+Tipo_de_leyenda=Tipus de llegenda
+Perimetro=Per\u00EDmetre
+punto=Punt
+borra_seleccion=Esborrar selecci\u00F3
+Cambio_Estilo=Canvi Estil
+Anadir_capa=Afegir Capa
+Ajustar_cobertura_wcs=Ajusteu la cobertura WCS
+S\u00EDmbolo=S\u00EDmbol
+eliminar_capa=Eliminar Capa
+web_map_context=Web Map Context
+ver_tabla_atributos=Veure Taula d\u0092atributs
+Cerrar=Tancar
+espacio=Espai\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra els elements de la capa usant una gamma de colors en funci\u00F3 del valor d\u0092un determinat camp d\u0092atributs
+select_all=Seleccionar tots
+sin_realce=Sense Relleu
+Imprimir=Imprimir
+join=Uni\u00F3
+simplificar=Simplificar
+insertar_imagen=Insertar Imatge
+Cambio_de_estilo=Canvi d\u0092estil
+Campo_de_clasificacion=Camp de classificaci\u00F3
+guardar_clave=Guardar la clau
+options.firewall.http.password=Contrasenya
+_(Etiquetas_estandar)=(Etiquetes est\u00E0ndard)
+propiedades_del_tema=Propietats del tema
+baja=Baixa
+renombrar=Renomenar
+Error_guardando_la_leyenda=Error guardant la llegenda
+insertar_texto=Insertar Text
+options.network.status=Estat de la connexi\u00F3
+Extent=Extensi\u00F3
+fichero_incorrecto=Fitxer incorrecte
+options.firewall.socks.port=Puerto proxy SOCKS
+online=Connectat
+seleccionar_formato=Seleccionar Format
+statistics=Estad\u00EDstiques
+servidor_wcs_no_responde=El servidor seleccionat no respon
+quitar_enlaces=LLevar enlla\u00E7os
+causa_error_desconocida=Error inesperat del servidor
+Anadir_Capa=Afegir Capa
+sin_titulo=Sense t\u00EDtol
+finalizar=Finalitzar
+arriba=Amunt
+Igual_que_la_impresora=Igual que la impressora
+Un_Layer=Ha de seleccionar almenys una capa.
+informacion=Informaci\u00F3
+seleccionar_todos=Seleccionar tots
+guardar_como_plantilla=Guardar com a plantilla
+desde_izquierda=Des de l\u0092Esquerra\:
+colocar_a_margenes=Col\u00B7locar amb refer\u00E8ncia a m\u00E0rgens.
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa quan l\u0092escala
+Inferior=Inferior
+Valor_verde=Valor Verd
+fallo_obtener_tablas=Fallada en obtindre les taules de la base de dades
+colocar_detras=Col\u00B7locar darrere
+vertical=Vertical
+fichero_existe=El fitxer seleccionat ja existix com a banda de la capa
+imagen=Imatge
+tipo_leyenda=Fitxers de tipus llegenda (*.GVL)
+enlace_vivo=Enlla\u00E7 viu
+Por_favor_active_el_tema=Per favor, activeu el tema
+importar_extent=Importar l\u0092extensi\u00F3 actual de la vista
+quantile_intervals=Intervals quantils
+error_escritura=No s\u0092ha pogut guardar el projecte
+seleccionar_parametros=Seleccioneu els par\u00E0metres
+abrir=Obrir
+General=General
+unidades=Unitats\:
+configuracion_andami_tooltip=Configuraci\u00F3 Andami
+Cuadrado=Quadrat
+rellenar_marco_vista=Reomplir marc de la vista
+Ancho_de_linea=Ample de l\u00EDnia
+Dxffiles=Fitxers .DXF
+tipo_de_leyenda=Tipus de llegenda
+En_metros=En metres
+options.firewall.http.nonProxy=Connectar directament a
+Descripcion=Descripci\u00F3
+agrupar_linea=Agrupar l\u00EDnia gr\u00E0fica amb gr\u00E0fics
+info=Info
+Valor_Bandas=Valor Bandes
+desconectar=Desconnectar
+insertar_linea=Insertar L\u00EDnia
+path=Ruta
+clave=Clau
+owner=Propietari
+pref.general=General
+optinos.network.click_to_test_connection=Prema el bot\u00F3 per comprovar la connexi\u00F3
+tema=Tema
+recta=Recta
+linf_der=Inf. dre.  X
+shape_seleccion=Exportar la selecci\u00F3
+cuando_activo=Si est\u00E0 Actiu
+nuevo_tamano_fuente=Nova Dimensi\u00F3 de font\:
+abrir_plantilla=Obrir plantilla
+propiedades_grafico=Propietats Gr\u00E0fic
+Zoom_Menos_Vista=Zoom Menys sobre la Vista
+Nombres=Noms
+color=Color\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet etiquetar els elements del mapa amb el valor d\u0092un determinat camp
+confirmar_borrar=Est\u00E0 segur que desitja esborrar l\u0092element?
+distribuir=Distribuir\:
+options.firewall.http.user=Nom d\u0092usuario
+circulo=Cercle
+detalles=Detalls
+por_debajo_de=per davall de\:
+Habilitar_etiquetado=Habilitar etiquetat
+registros_seleccionados_total=Total registres seleccionats
+ymin=Y m\u00EDnima
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tots els elements d\u0092una capa usant el mateix s\u00EDmbol
+propiedades=Propietats
+reproyectar_aviso=La projecci\u00F3 de la capa no \u00E9s igual que la de la vista.\nAVISO\: pot ser inexacte amb algunes transformaciones.\nPer favor, llija la documentaci\u00F3
+Ajustar_transparencia=Ajustar Transpar\u00E8ncia
+hasta=fins a
+desagrupar_graficos=Desagrupar gr\u00E0fics
+back=Anterior
+conservar_escala_visualizacion=Conservar escala de visualitzaci\u00F3
+pixeles=p\u00EDxels
+utilizar_margenes_impresora=Utilitzar m\u00E0rgens de la impressora.
+Al_leer_la_leyenda=En llegir la llegenda
+Simbolo=S\u00EDmbol
+Capas=Capes
+Seleccionar_fichero=Seleccionar fitxer
+select_none=Llevar tots
+recuento=Recompte
+Otros=Altres
+Zoom_Mas_Vista=Zoom M\u00E9s sobre la Vista
+navegacion=Navegaci\u00F3
+infovalue=Mostra elements de la capa usant un s\u00EDmbol per cada valor.
+visualizar_cuadricula=Visualitzeu malla
+Etiqueta=Etiqueta
+nuevo_tooltip=Crea un nou projecte
+Sample=Exemple
+Valor=Valor
+Tiempo=Temps
+Campo_clasifica=Camp de Classificaci\u00F3
+insertar_poligono=Insertar Pol\u00EDgon
+Mostrar_siempre=Mostrar sempre
+angulo_rotacion=Angle de rotaci\u00F3\:
+mapas=Mapes
+configurar=Configurar
+campo=Camp
+por_encima_de=per damunt de\:
+leyenda_campo_unido=S\u0092est\u00E0 utilitzant un camp de la uni\u00F3 en la llegenda (i/o etiquetatge). Canvie la llegenda abans de llevar la uni\u00F3, per favor.
+nombre=Nom
+alerta=Av\u00EDs
+propiedades_marco_leyenda=Propietats del marc de la llegenda
+Encuadre_Vista=Enquadre sobre la Vista
+Intervalos_por_rupturas_naturales=Intervals per trencaments naturals.
+extension=Extensi\u00F3
+propiedades_tema=Propietats del Tema
+modification_date=\u00DAltima data de modificaci\u00F3
+formato=Format
+igual_todos_lados=Despla\u00E7ament igual per tots els costats.
+Back=Anterior
+Nuevo_conjunto=Nou conjunt
+coincidir_tamano=Coincidir Dimensi\u00F3\:
+Zoom_Select=Zoom a la part seleccionada
+Usar_indice_espacial=Usar \u00EDndex espacial
+background_color=Color de fons
+north=Nord
+reproyectar_pregunta=Vol reprojectar-la?
+Cambio_Color=Canvi Color
+seleccione_fecha=Seleccione una data...
+fallo_crear_pool=Fallada en la creaci\u00F3 del pool de connexions
+Intervalos=Intervals
+jpg=Fitxers JPEG
+Herramientas_vista=Ferramentes de la Vista
+Encuadre=Enquadre
+Triangulo=Triangle
+tamano_posicion=Dimensi\u00F3 i posici\u00F3
+untitled=Sense t\u00EDtol
+base_datos=Base de dades
+__espacio_vertical=Espai vertical\:
+Salir=Eixir
+altura=Altura\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Es tindr\u00E0 en compte per a esborrar els registres des de
+select_geom_field=Seleccioneu el camp que porta la geometria
+seleccione_tabla_origen=Seleccioneu la taula d\u0092origen de la uni\u00F3
+Superior=Superior
+ascending_order=Orde ascendent
+insertar_vista=Insertar Vista
+Color_Contorno=Color Contorn
+Centimetros=Cent\u00EDmetres
+export=Exportar
+Nombre_que_se_le_dara_al_zoom=Nom que se li donar\u00E0 al zoom
+tamano_pagina=Dimensi\u00F3 de p\u00E0gina\:
+Accion_Predefinida=Acci\u00F3 Predefinida
+Bold=Bold
+minimo=M\u00EDnim
+divisiones_izquierda=Divisions a l\u0092esquerra
+Imagen=Imatge
+propiedades_marco_imagenes=Propietats del marc d\u0092im\u00E0tgens
+options.firewall.socks.host=Servidor proxy SOCKS
+orientacion=Orientaci\u00F3\:
+el_numero_maximo_de_intervalos_para_este_campo_es=El nombre m\u00E0xim d\u0092intervals per a este camps \u00E9s
+tablas=Taules
+Seleccionar_del_conjunto=Seleccionar del conjunt
+Preparar_pagina=Preparar p\u00E0gina
+error_comunicacion_servidor=S\u0092ha produ\u00EFt un error en comunicar amb el servidor
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostra els atributs de les capes seleccionades
+anterior=Anterior
+__seleccion_de_fuente=Selecci\u00F3 de font
+rango_de_escalas=Rang d\u0092escales
+mosaico_tooltip=Mosaic
+Calcular_intervalos=Calcular intervals
+lineal_directo=Linial Directe
+Simbolo_Unico=S\u00EDmbol \u00DAnic
+propiedades_raster=Propietats del r\u00E0ster
+Anadir_al_conjunto=Afegir al conjunt
+Guardar=Guardar
+bmp=Fitxers de tipus bmp
+Eliminar=Eliminar
+seleccionar_por_rectangulo=Seleccionar per rectangle
+ymax=Y m\u00E0xima
+__lineas=l\u00EDnies
+Leyenda=Llegenda
+Style=Estil
+Capas_del_localizador=Capes del localitzador
+Origen_de_datos=Origen de dades
+Personalizado=Personalitzat
+Linea=L\u00EDnia
+Zoom_Completo_Vista=Zoom Complet sobre la Vista
+Coberturas=Cobertures
+Guardar_el_zoom_actual=Guardar el zoom
+seleccionar_por_punto=Seleccionar per punt
+cancelar=Cancel\u00B7lar
+nombre_cobertura=Nom de la cobertura
+Valores_unicos=Valors \u00FAnics
+Sean_iguales_a=siguen iguals a
+visibles=Visibles
+automatico=Autom\u00E0tic
+options.firewall.socks.incorrect_host=Host SOCKS incorrecte
+maximo=M\u00E0xim
+next=Seg\u00FCent
+insertar_punto=Insertar Punt
+ventana_proyecto=Finestra de projecte
+alto=Alt
+Error_abriendo_el_fichero=Error obrint el fitxer
+tarea_en_progreso=Tasca en progr\u00E9s
+Valores=Valors
+alta=Alta
+borrador=Esborrany
+cargar_leyenda=Carregar llegenda
+Mostrar_Contorno=Mostrar Contorn
+Tipo_de_intervalos=Tipus d\u0092intervals
+etiquetas=Etiquetes
+Color_inicio=Color d\u0092inici
+no_visibles=No visibles
+grados=Graus\:
+select_unique_field=Seleccioneu el camp \u00FAnic
+colocar_alrededor_todos=Col\u00B7locar al voltant de tots els gr\u00E0fics.
+fuente=Font
+seleccionar_CRS=Seleccioneu CRS
+recorte_vista=Retall a vista
+En_pixels=En pixels
+toda_la_tabla=Tota la taula
+medir_area=Mesurar \u00C0rea
+Fichero=Fitxer
+Zoom_pixel=Zoom a la resoluci\u00F3 del r\u00E0ster
+alinear=Alinear
+vistas=Vistes
+Seleccionar=Seleccionar
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra els elements de la capa usant un s\u00EDmbol per cada valor \u00FAnic
+Dado_un_campo_de_atributos=Donat un camp d\u0092atributs
+Error_accediendo_a_los_datos=Error accedint a les dades
+debe_estar_activada=Ha d\u0092estar activada
+__redimensionar_texto_escala=Redimensione el text a escala amb la vista
+Mas_100=El nombre de valors \u00E9s superior a 100, i no aporta informaci\u00F3
+Next=Seg\u00FCent
+Esten_contenidos_en=estiguen continguts en
+creation_date=Data de creaci\u00F3
+Localizador_por_atributo=Localitzador per atribut
+preparar_pagina=Preparar p\u00E0gina
+guardado=Guardat en
+Enlazar_a_ficheros_de_imagen=Enlla\u00E7ar a fitxers d\u0092imatge
+siguiente=Seg\u00FCent
+presentacion=Presentaci\u00F3
+sobre_la_barra=Sobre la barra
+Tipo_de_linea=Tipus de l\u00EDnia
+tipo_dato=Tipus de dada
+Color_final=Color final\:
+servidor=Servidor
+Yardas=Iardes
+wcs_properties=Propiedats WCS
+vacia=Buida
+Contengan=ontinguen
+campo_altura_texto=Camp d\u0092altura de text\:
+Subir_capa=Pujar capa
+Nombre=Nom
+ambito=\u00C0mbit
+seleccione_tabla=Seleccioneu la taula
+Seleccion_por_tema=Selecci\u00F3 per tema
+agrupar=Agrupar
+test_now=Comprovar ara
+lsup_izq=Sup. esq. X
+Zoom=Zoom
+Configurar_localizador=Configurar Localitzador ...
+Fuente=Font
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccione de les capes actives els elements que\:
+options.firewall.http.port=Puerto proxy HTTP
+tamano=Dimensi\u00F3\:
+Previsualizacion_de_simbolo=Previsualitzaci\u00F3 de s\u00EDmbol
+fallo_obtener_conexion_existente=Fallada en obtindre una connexi\u00F3 ja creada
+Nueva_tabla=Nova Taula
+Aceptar=Acceptar
+Intervalos_equidistantes=Intervals equidistants.
+lppp=ppp
+N\u00FAm_intervalos=Nr. intervals
+descending_order_tooltip=S\u0092ordena pel camp seleccionat en orde descendent
+borrar=Esborrar
+Grosor_de_linea=Gruix de l\u00EDnia
+relleno=Farciment\:
+cambio_nombre=Canvi de nom
+formato_incorrecto=Format incorrecte
+mas_de_100_simbolos=M\u00E9s de 100 s\u00EDmbols no solen aportar informaci\u00F3 en un pla
+espaciado_vertical=Espaiat vertical de la malla
+Editar_leyenda=Editar Llegenda
+rectangulo=Rectangle
+restore_defaults=Restaura valors predeterminats
+Visualizacion=Visualitzaci\u00F3
+Pies=Peus
+seleccionar_capas=Seleccionar Capes
+nuevo_proyecto=Nou projecte
+Herramientas=Ferramentes
+bands=Bandes
+cancel=Cancel\u00B7lar
+Vista=Vista
+fallo_registrar_conexion=Fallada en el registre d\u0092una connexi\u00F3
+tamano_metros=Dimensi\u00F3 en metres
+seleccione_campo_enlace=Seleccioneu el camp a trav\u00E9s del qual cal enlla\u00E7ar
+preferences=Prefer\u00E8ncies...
+seleccionar_coberturas=Seleccioneu les cobertures
+Mapa=Mapa
+insertar_recta=Insertar Recta
+quiere_continuar=Est\u00E0 segur que vol continuar?
+descripcion=Descripci\u00F3
+importar=Importar
+Quitar_Todos=Llevar Tots
+filtro=Filtre
+Pulgadas=Polsades
+Ayuda=Ajuda
+activar_regla=Activar regla
+Recuperar_y_eliminar_otros_zoom=Recuperar i eliminar altres zooms
+anchura=Ampl\u00E0ria\:
+seleccione_tabla_a_enlazar=Seleccioneu la taula que cal enlla\u00E7ar
+propiedades_sesion=Propietats de la sessi\u00F3
+ninguna_impresora_configurada=Cap impressora configurada
+Derecho=Dret
+propiedades_vista=Propietats de la vista
+en_el_mapa=En el mapa\:
+salir_tooltip=Eixir
+propiedades_mapa=Propietats del mapa
+Sean_disjuntos_a=siguen disjunts a
+Elementos_seleccionados_de_la_capa=elements seleccionats de la capa
+resolucion_resultado=Resoluci\u00F3 del resultat\:
+Derecha=Dreta
+Izquierdo=Esquerre
+Anadir_todos=Afegir tots
+Zoom_Mas=Zoom M\u00E9s
+suma=Suma
+Quitar=Llevar
+Cancel=Cancel\u00B7lar
+poligono=Pol\u00EDgon
+guardar_como=Guardar com a...
+png=Fitxers png
+Izquierda=Esquerra
+mostrar_unidades=Mostrar unitats
+Abrir_una_capa=Afegir capa
+zooms=Zoom
+(escala_maxima)=(escala m\u00E0xima)
+exportar_pdf=Exportar a pdf
+Valores_Unicos=Valors \u00DAnics
+Desplazamiento=Despla\u00E7ament
+tipos_de_documentos=Tipus de documents
+options.firewall.socks.enabled=Fer \u00FAs de servidor proxy SOCKS
+seleccion_fuente=Selecci\u00F3 de font
+pref.network.firewall=Firewall/Proxy
+Zoom_Menos=Zoom Menys
+finish=Finalitzar
+Hiperenlace=Hiperenlla\u00E7
+Capa=Capa
+xmin=X m\u00EDnima
+Aplicar=Aplicar
+drivers=Programes de control
+visible=Visible
+comentarios=Comentaris
+editable=Editable
+Previsualizacion=Previsualitzaci\u00F3
+quitar_uniones=Llevar unions
+tamanyo_borde=Grand\u00E0ria de la vora
+hostname=Hostname
+necesita_un_tema_activo=Es necessita un tema actiu
+espaciado_horizontal=Espaiat horitzontal de la malla
+guardar_cambios=Vol guardar els canvis?
+insertar_norte=Insertar nord
+Propiedades_de_la_Capa=Propietats de la Capa
+Plain=Plain
+coor_geograficas=Coor. geogr\u00E0fiques
+estadisticas=Estad\u00EDstiques
+Italic=Italic
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Camps
+A2=A2
+seleccion=Selecci\u00F3
+insertar_leyenda=Insertar Llegenda
+A1=A1
+escala_usuario=Escala especificada per l\u0092usuari
+A0=A0
+Anadir=Afegir
+Transparencia=Transpar\u00E8ncia
+Insertar=Insertar
+mostrar_descripcion=Mostrar descripci\u00F3
+Font=Font
+usuario=usuari
+Crucen_con=encreuen amb
+Muestra_atributos=Mostra els atributs de les capes seleccionades.
+medir_distancias=Mesurar dist\u00E0ncies
+ancho=Ample
+acerca_de=Sobre...
+area_trabajo=\u00C0rea de treball
+Circulo=Cercle
+offline=Desconnectat
+este_por_debajo_de_=Que estiga por davall de
+Shapefile=Shapefile
+ok=Ok
+usar_marco=Usar marc
+normal=Normal
+Elegir_Fuente=Elegir Font
+siempre=Sempre
+resto_valores=Resta de valors
+insertar_escala=Insertar Escala
+host=m\u00E0quina
+color_texto=Color del text\:
+conectar=Connectar
+guardar_proyecto=Guardar projecte
+visualizacion=Visualitzaci\u00F3
+Etiquetados=Etiquetats
+titulo_confirmar=Confirmaci\u00F3
+activos=Actius
+opacidad=Opacitat
+registros=registres
+posicion_linea=Posici\u00F3 de la l\u00EDnia
+usar_titulo=Usar t\u00EDtol
+refrescar=Refrescar
+numero_incorrecto=N\u00FAmero incorrecte
+num_bandas=N\u00FAmero de bandes
+navegacion_vista=Navegaci\u00F3 vista
+(escala_minima)=(escala m\u00EDnima)
+Tabla_de_Atributos=Taula d\u0092Atributs
+tipo_fichero_proyecto=Fitxer de projecte gvSIG (*.gvsproj)
+Valor_azul=Valor Blau
+Unidades=Unitats\:
+Millas=Milles
+no_activos=No actius
+options.firewall.http.host=Servidor proxy HTTP
+titulo_fframetext=T\u00EDtol del camp de text
+Toquen=toquen
+fallo_realizar_consulta=Fallada en realitzar una consulta
+cartografico=Cartogr\u00E0fic
+Examinar=Examinar
+Ancho_Contorno=Ample Contorn
+seleccionar_tiempo=Seleccioneu la posici\u00F3 per al temps
+tipo_relleno=Tipus de Farciment\:
+escala=Escala
+import=Importar
+barra=Barra
+texto=Text
+Formato=Format
+mantener_intervalo=Mantindre interval
+Identificar_Resultados=Identificar Resultats
+este_por_encima_de=Que estiga per damunt de
+Solo_para_capas_vectoriales=Sols per a capes vectorials
+salir=Eixir
+insertar_rectangulo=Insertar Rectangle
+Zoom_Previo=Zoom Previ
+Atributo=Atribut
+horizontal=Horitzontal
+Generar_Intervalos=Generar Intervals
+salvar_raster=Salvar el r\u00E0ster
+seleccion_campos=Seleccioneu els camps
+Detalles=Detalls
+guardar_tooltip=Guarda els canvis del projecte
+extents_no_coincidentes=L\u0092extensi\u00F3 de la imatge seleccionada no coincidix amb la imatge d\u0092origen.
+No_de_intervalos=Nr. d\u0092intervals
+xmax=X m\u00E0xima
+tipo_de_intervalo=Tipus d\u0092interval
+Rango_de_escalas=Rang d\u0092escales
+abajo=Avall
+_(Valores_unicos)=(Valors \u00FAnics)
+infodef=Mostra tots els elements d\u0092una capa usant el mateix s\u00EDmbol.
+metros=Metres
+calidad=Qualitat
+editar_propiedades=editar propietats
+Intervalo=Interval
+puerto=port
+desagrupar=Desagrupar
+Propiedades_texto=Propietats del text
+valor_pixel=Valor de pixel
+alinear_graficos=Alinear gr\u00E0fics
+Inicializando=Inicialitzant
+campo_de_documentos_asociados=Camp de documents associats
+marco_vista=Marc de la vista
+Escala=Escala
+Zoom_Acercar=Zoom acostar
+fallo_crear_conexion=Fallada en crear la connexi\u00F3
+recorte=retall
+insertar_circulo=Insertar Cercle
+import_map_context=Importar mapes des d\u0092un fitxer Web Map Context de l\u0092OGC
+Simbolo_unico=S\u00EDmbol \u00FAnic
+necesita_un_tema_vectorial_activo=Es necessita un tema vectorial actiu
+muestra_consola_tooltip=Mostra la consola
+adjust_transparency=Ajustar transpar\u00E8ncia
+Archivo=Fitxer
+ascending_order_tooltip=S\u0092ordena pel camp seleccionat en orde ascendent
+desviacion_tipica=Desviaci\u00F3 t\u00EDpica
+espere=Per favor, espereu
+equal_intervals=Intervals iguals
+alineamiento=Alineament\:
+introduce_nombre=Introdu\u00EFx el nou nom
+abrir_proyecto=Obrir projecte
+No_Shape=Este Layer no \u00E9s de tipus Shape
+Campo=Camp
+Campo_de_etiquetado=Camp d\u0092etiquetat
+sincronizar_color_borde_relleno=Sincronitzar el color de la vora amb el del Farciment\:
+escala_minima=escala m\u00EDnima
+transparencia=Transpar\u00E8ncia
+linea=L\u00EDnia
+Nivel_de_transparencia=Nivell de transpar\u00E8ncia
+driver=driver
+Etiquetado=Etiquetat
+Guardar_leyenda=Guardar llegenda
+Rasterfiles=Fitxers raster
+exportar_a=Exportar a...
+Zoom_Real=Zoom 1\:1
+Estilo=Estil\:
+No_reconocido=No reconegut
+Escala_Minima=Escala M\u00EDnima
+Cruz=Creu
+linea_grafica=L\u00EDnia gr\u00E0fica
+alias=\u00C0lies
+malla_activada=Malla activada
+Color_inicial=Color inicial\:
+Etiquetas_estandar=Etiquetes est\u00E0ndard
+Zoom_al_Tema=Zoom al Tema
+Size=Size
+Tabla=Taula
+natural_intervals=Intervals naturals
+Propiedades_escala_grafica=Propietats de l\u0092escala
+distance_units=Unitats de mesura
+escala_maxima=escala m\u00E0xima
+Recuperar_leyenda=Recuperar llegenda
+Archivos_de_Disco=Fitxers de disc
+bandas=Bandes
+propiedades_marco_vista=Propietats del marc de la vista
+Elegir_Color=Elegir Color
+Informacion=Informaci\u00F3
+usar_rango=Useu un rang
+Valor_rojo=Valor Roig
+Se_superponen_a=se superposen a
+eliminar_extremos=Eliminar extrems
+nombre_capa=Nom de la capa
+DGNFiles=Fitxers .DGN
+No_mostrar=No mostrar la capa quan l\u0092escala
+Tipo_no_reconocido=Tipus no reconegut
+Altura_fija_de_texto=Altura fixa de text
+Enlazar_a_fichero_de_texto=Enlla\u00E7ar a fitxer de text
+Ventana=Finestra
+Anterior=Anterior
+pref.network=Xarxa
+respuesta_error_servidor=No s\u0092ha pogut obtindre la cobertura
+colocar_delante=Col\u00B7locar davant
+Escala_Maxima=Escala M\u00E0xima
+Cambios_de_estilo=Canvis d\u0092estil
+WMS=WMS
+simple=Simple
+margenes=M\u00E0rgens\:
+link=Enlla\u00E7
+propiedades_tabla=Propietats de la taula
+options.firewall.http.enabled=Fer \u00FAs de servidor proxy HTTP
+exportar=Exportar
+agrupar_graficos=Agrupar gr\u00E0fics
+Leyenda_Por_Defecto=Llegenda per defecte
+Kilometros=Kil\u00F2metres
+Origen_de_Datos=Origen de les Dades\:
+nuevo=Nou
+descending_order=Orde descendent
+prueba_conexion=Prova de la connexi\u00F3
+Color_de_la_Linea=Color de la L\u00EDnia\:
+error_lectura=No s\u0092ha pogut obrir el projecte
+Quitar_capa=Llevar capa
+recorte_colas=Retall de cues
+nombre_sesion=Nom de la sessi\u00F3
+_(Intervalos)=(Intervals)
+Graficos=Gr\u00E0fics
+bd=bd
+desde_arriba=Des de Dalt\:
+Cancelar=Cancel\u00B7lar
+poner_temas_a=Posar capes a...
+resolucion=Resoluci\u00F3
+infobreak=Mostra els elements de la capa usant una gamma de colors.
+guardar_leyenda=Guardar llegenda
+kilometros=Kil\u00F2metres
+map_units=Unitats de mapa
+Abrir_Imagen=Obrir Imatge
+varianza=Varian\u00E7a
+configurar_localizador=Configurar localitzador
+abrir_tooltip=Obri un projecte existent
+ajustes_linea_grafica=Ajustos de l\u00EDnia gr\u00E0fica
+Link=Enlla\u00E7
+marco=Marc
+realce=Relleu
+Zoom_Alejar=Zoom allunyar
+gestion_encuadre=Gesti\u00F3 d\u0092Enquadres
+Shapefiles=Fitxers .SHP
+tamanyo_fuente=Grand\u00E0ria de font
+Bajar_capa=Baixar capa
+__proyeccion_actual=Projecci\u00F3 actual\:
+Tabla_de_prueba=Taula de prova
+Metros=Metres

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_pt.properties	(revision 42196)
@@ -0,0 +1,630 @@
+#Translations for language: pt
+#Mon Jul 03 00:36:20 CEST 2006
+consulta=Consulta
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00E1ficos selecionados.
+ancho_alto=Largura X Altura
+media=M\u00E9dia
+Quitar_todos=Remover todos
+Parametros=Par\u00E2metros
+conexion_correcta=Conex\u00E3o correcta
+selection_color=Cor de Sele\u00E7\u00E3o
+cerrar=Fechar
+titulo=Gerenciador de projeto
+tipo_simbolo=Tipo de s\u00EDmbolo\:
+documentos_existentes=Documentos existentes
+aceptar=OK
+grosor_linea=Grossura da linha\:
+Siguiente=Pr\u00F3ximo
+ver_tooltip=Ver janela de projeto
+Intersecten_con=intersectam com
+Color_de_Relleno=Cor de Preenchimento\:
+_(Simbolo_unico)=(S\u00EDmbolo \u00FAnico)
+parametros=Par\u00E2metros
+tipo_linea=Linha\:
+Servidor=Servidor
+agrupar_capas=Agrupar capas
+capaWMS=CamadaWMS
+Simbologia=Simbologia
+Propiedades_del_Tema=Propriedades do tema
+Ver=Ver
+Zoom_Completo=Zoom Completo
+leyenda=Legenda
+Milimetros=Mil\u00EDmetros
+Tipo_de_leyenda=Tipos de legenda
+Perimetro=Per\u00EDmetro
+punto=Ponto
+borra_seleccion=Apagar sele\u00E7\u00E3o
+Cambio_Estilo=Mudar Estilo
+Anadir_capa=Adicionar Tema
+Ajustar_cobertura_wcs=Ajustar cobertura WCS
+S\u00EDmbolo=S\u00EDmbolo
+eliminar_capa=Deletar Camada
+ver_tabla_atributos=Ver tabela de atributos
+Cerrar=Fechar
+espacio=Espa\u00E7o\:
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra os elementos da capa usando uma gama de cores em fun\u00E7\u00E3o do valor de um determinado campo de atributos
+select_all=Seleccionar todos
+sin_realce=Sem Realce
+Imprimir=Imprimir
+join=Uni\u00E3o
+simplificar=Simplificar
+insertar_imagen=Inserir Imagem
+Cambio_de_estilo=Mudar estilo
+Campo_de_clasificacion=Campo de Classifica\u00E7\u00E3o
+guardar_clave=Guardar senha
+_(Etiquetas_estandar)=(Etiquetas padr\u00E3o)
+propiedades_del_tema=Propriedades do tema
+baja=Baixa
+renombrar=Renomear
+Error_guardando_la_leyenda=Erro ao guardar a legenda
+insertar_texto=Inserir Texto
+Extent=Extens\u00E3o
+fichero_incorrecto=Ficheiro incorrecto
+seleccionar_formato=Selecionar Formato
+statistics=Estat\u00EDsticas
+servidor_wcs_no_responde=O servidor seleccionado n\u00E3o responde
+quitar_enlaces=Remover hiperlinks
+causa_error_desconocida=Erro inesperado do servidor
+Anadir_Capa=Adicionar Tema
+sin_titulo=Sem t\u00EDtulo
+finalizar=Finalizar
+arriba=Acima
+Igual_que_la_impresora=Igual a impressora
+Un_Layer=Seleciona uma camada
+informacion=Informa\u00E7\u00E3o
+seleccionar_todos=Selecionar todos
+guardar_como_plantilla=Guardar como molde
+desde_izquierda=Desde a esquerda\:
+colocar_a_margenes=Colocando nas margens
+No_mostrar_la_capa_cuando_la_escala=N\u00E3o mostrar a capa quando a escala
+Inferior=Abaixo
+Valor_verde=Valor Verde
+fallo_obtener_tablas=Erro ao obter as tabelas da base de dados
+colocar_detras=Atr\u00E1s
+vertical=Vertical
+fichero_existe=O ficheiro seleccionado ja existe como banda da capa
+imagen=Imagem
+tipo_leyenda=Arquivos de legenda(*.GVL)
+enlace_vivo=Link vivo
+Por_favor_active_el_tema=Por favor active o tema
+importar_extent=Importar a extens\u00E3o actual da vista
+quantile_intervals=Intervalos quartis
+error_escritura=Erro de escrita
+seleccionar_parametros=Seleccionar os par\u00E2metros
+abrir=Abrir
+General=Geral
+unidades=Unidades\:
+configuracion_andami_tooltip=Configura\u00E7\u00E3o Andami
+Cuadrado=Quadrado
+rellenar_marco_vista=Preencher espa\u00E7o da vis\u00E3o
+Ancho_de_linea=Linha Grossa
+Dxffiles=Arquivos DXF
+tipo_de_leyenda=Tipo de legenda
+En_metros=Em metros
+Descripcion=Descri\u00E7\u00E3o
+agrupar_linea=Agrupar Linha
+info=Info
+Valor_Bandas=Valor Bandas
+desconectar=Desconectar
+insertar_linea=Inserir Linha
+path=Caminho
+clave=Senha
+owner=Propriet\u00E1rio
+tema=Tema
+recta=Reta
+linf_der=Inf. dir.  X
+shape_seleccion=Exportar sele\u00E7\u00E3o.
+cuando_activo=Quando ativo
+nuevo_tamano_fuente=Novo tamanho de fonte\:
+abrir_plantilla=Abrir molde
+propiedades_grafico=Propriedades Gr\u00E1ficas
+Zoom_Menos_Vista=Zoom Menos na vis\u00E3o
+Nombres=Nomes
+color=Cor\:
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa com o valor de um determinado campo
+confirmar_borrar=O elemento ser\u00E1 removido. Est\u00E1 certo disto ?
+distribuir=Destribuir\:
+circulo=C\u00EDrculo
+detalles=Detalhes
+por_debajo_de=abaixo de\:
+Habilitar_etiquetado=Habilitar legenda
+registros_seleccionados_total=Total de registos seleccionados
+ymin=Y m\u00EDnima
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra todos os elementos de una capa usando o mesmo s\u00EDmbolo
+propiedades=Propriedades
+reproyectar_aviso=A proje\u00E7\u00E3o da camada n\u00E3o \u00E9 a mesma da proje\u00E7\u00E3o da vis\u00E3o.\nATEN\u00C7\u00C3O\: Isto pode gerar imprecis\u00E3o para algumas transforma\u00E7\u00F5es.\nPor Favor leia a documenta\u00E7\u00E3o
+Ajustar_transparencia=Ajustar Transpar\u00EAncia
+hasta=at\u00E9
+desagrupar_graficos=Desagrupar gr\u00E1ficos
+back=Anterior
+conservar_escala_visualizacion=Manter escala da vis\u00E3o
+pixeles=pixels
+utilizar_margenes_impresora=Utilizando m\u00E1rgens da impressora.
+Al_leer_la_leyenda=Ao ler a legenda
+Simbolo=S\u00EDmbolo
+Capas=Camadas
+Seleccionar_fichero=Selecionar arquivo
+select_none=Eliminar todos
+recuento=Recontar
+Otros=Outros
+Zoom_Mas_Vista=Zoom Mais na vista
+navegacion=Navega\u00E7\u00E3o
+infovalue=Mostra elementos da camada utilizando um simbolo para cada valor.
+visualizar_cuadricula=Visualizar Grade
+Etiqueta=Legenda
+nuevo_tooltip=Criar um novo projeto
+Sample=Exemplo
+Valor=Valor
+Tiempo=Tempo
+Campo_clasifica=Campo de Classifica\u00E7\u00E3o
+insertar_poligono=Inserir Pol\u00EDgono
+Mostrar_siempre=Mostrar sempre
+angulo_rotacion=\u00C2ngulo de rota\u00E7\u00E3o\:
+mapas=Mapas
+configurar=Configurar
+campo=Campo
+por_encima_de=acima de\:
+leyenda_campo_unido=Se est\u00E1 a utilizar um campo da uni\u00E3o na legenda (e/ou etiquetas). Mude a legenda antes de retirar a uni\u00E3o, por favor.
+nombre=Nome
+alerta=Aviso
+propiedades_marco_leyenda=Propriedades do espa\u00E7o da legenda
+Encuadre_Vista=Enquadrar vista
+Intervalos_por_rupturas_naturales=Intervalo por quebras naturais.
+extension=Extens\u00E3o
+propiedades_tema=Propriedades de camada
+modification_date=Data de modifica\u00E7\u00E3o
+formato=Formato
+igual_todos_lados=Igual em todos os lados.
+Back=Anterior
+Nuevo_conjunto=Novo conjunto
+coincidir_tamano=Coincidir tamanho\:
+Zoom_Select=Zoom para sele\u00E7\u00E3o
+Usar_indice_espacial=Usar \u00EDndice espacial
+background_color=Cor de Fundo
+north=Norte
+reproyectar_pregunta=Voc\u00EA quer reprojetar?
+Cambio_Color=Mudar Cor
+seleccione_fecha=Selecionar data...
+fallo_crear_pool=Erro na cria\u00E7\u00E3o da pool de conex\u00F5es
+Intervalos=Intervalos
+jpg=Arquivos JPEG
+Herramientas_vista=Ver ferramentas
+Encuadre=Zooms
+Triangulo=Tri\u00E2ngulo
+tamano_posicion=Tamanho e posi\u00E7\u00E3o
+untitled=Sem t\u00EDtulo
+base_datos=Base de dados
+__espacio_vertical=\u00C1rea vertical\:
+Salir=Sair
+altura=Altura\:
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... deletar registros de
+select_geom_field=Selecciona o campo que leva a geometria
+seleccione_tabla_origen=Seleccione a tabela de origem do join
+Superior=Acima
+ascending_order=Ordem ascendente
+insertar_vista=Inserir Vis\u00E3o
+Color_Contorno=Cor de Contorno
+Centimetros=Cent\u00EDmetros
+Nombre_que_se_le_dara_al_zoom=Nome para o zoom
+tamano_pagina=Tamanho da P\u00E1gina
+Accion_Predefinida=A\u00E7\u00E3o Predefinida
+Bold=Negrito
+minimo=M\u00EDnimo
+divisiones_izquierda=Divis\u00F5es para a esquerda
+Imagen=Imagem
+propiedades_marco_imagenes=Propriedades do espa\u00E7o da Figura
+orientacion=Orienta\u00E7\u00E3o\:
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00FAmero m\u00E1ximo de intervalos para este campo \u00E9
+tablas=Tabelas
+Seleccionar_del_conjunto=Selecionar do conjunto
+Preparar_pagina=Preparar p\u00E1gina
+error_comunicacion_servidor=Produziu-se um erro ao comunicar com o servidor
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostrar atributos do tema selecionado
+anterior=Anterior
+__seleccion_de_fuente=Sele\u00E7\u00E3o da fonte
+rango_de_escalas=Amplitude de escalas
+mosaico_tooltip=Mosaico
+Calcular_intervalos=Circular intervalos
+lineal_directo=Lineal Direito
+Simbolo_Unico=S\u00EDmbolo \u00FAnico
+propiedades_raster=Propiedades do raster
+Anadir_al_conjunto=Adicionar ao conjunto
+Guardar=Salvar
+bmp=Arquivos BMP
+Eliminar=Deletar
+seleccionar_por_rectangulo=Selecioar por ret\u00E2ngulo
+ymax=Y m\u00E1xima
+__lineas=linhas
+Leyenda=Legenda
+Style=Estilo
+Capas_del_localizador=Camadas de localizador
+Origen_de_datos=Origem de dados
+Personalizado=Personalizado
+Linea=Linha
+Zoom_Completo_Vista=Zoom Completo na vis\u00E3o
+Coberturas=Coberturas
+Guardar_el_zoom_actual=Salver zoom atual
+seleccionar_por_punto=Selecionar por ponto
+cancelar=Cancelar
+nombre_cobertura=Nome da cobertura
+Valores_unicos=Valores \u00FAnicos
+Sean_iguales_a=sejam iguais a
+visibles=Vis\u00EDvel
+automatico=Autom\u00E1tico
+maximo=M\u00E1ximo
+next=Seguinte
+insertar_punto=Inserir Ponto
+ventana_proyecto=Janela de projeto
+alto=Alto
+Error_abriendo_el_fichero=Erro abrindo arquivo
+tarea_en_progreso=Tarefa em progresso
+Valores=Valores
+alta=Alta
+borrador=Rascunho
+cargar_leyenda=Carregar legenda
+Mostrar_Contorno=Mostrar Contorno
+Tipo_de_intervalos=Tipo de intevalos
+etiquetas=Etiquetas\:
+Color_inicio=Cor inicial
+no_visibles=N\u00E3o vis\u00EDvel
+grados=Graus\:
+select_unique_field=Seleccione o campo \u00FAnico
+colocar_alrededor_todos=Colocando ao redor de todos os gr\u00E1ficos.
+fuente=Fonte
+seleccionar_CRS=Seleccionar CRS
+recorte_vista=Recortar para a vis\u00E3o
+En_pixels=Em pixels
+toda_la_tabla=Toda a tabela
+medir_area=Medir \u00E1rea
+Fichero=Arquivo
+Zoom_pixel=Zoom \u00E0 resolu\u00E7\u00E3o de raster
+alinear=Alinhar
+vistas=Vis\u00F5es
+Seleccionar=Selecionar
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra os elementos da capa usando um s\u00EDmbolo por cada valor \u00FAnico
+Dado_un_campo_de_atributos=Dado de um campo de atributos
+Error_accediendo_a_los_datos=Erro ao aceder aos dados
+debe_estar_activada=Deve estar activada
+__redimensionar_texto_escala=Redimensionar o texto de acordo com a escala da vis\u00E3o
+Mas_100=N\u00FAmero de valores acima de 100 e n\u00E3o contribui com informa\u00E7\u00E3o
+Next=Seguinte
+Esten_contenidos_en=estejam dentro de
+creation_date=Data de cria\u00E7\u00E3o
+Localizador_por_atributo=Localizador por atributo
+preparar_pagina=Preparar p\u00E1gina
+guardado=Salvo em
+Enlazar_a_ficheros_de_imagen=Link para arquivos de imagem
+siguiente=Pr\u00F3ximo
+presentacion=Apresenta\u00E7\u00E3o
+sobre_la_barra=Sobre a barra
+Tipo_de_linea=Tipo de linha
+tipo_dato=Tipo de Dado
+Color_final=Cor final\:
+servidor=Servidor
+Yardas=Jardas
+wcs_properties=Propriedades WCS
+vacia=Vazia
+Contengan=contenham
+campo_altura_texto=Altura do campo texto\:
+Subir_capa=Mover camada acima
+Nombre=Nome
+ambito=\u00C2mbito
+seleccione_tabla=Selecciona a tabela
+Seleccion_por_tema=Sele\u00E7\u00E3o por tema
+agrupar=Agrupar
+lsup_izq=Sup. esq. X
+Zoom=Zoom
+Configurar_localizador=Configurar Localizador ...
+Fuente=Fonte
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar as capas activas dos elementos que\:
+tamano=Tamanho\:
+Previsualizacion_de_simbolo=Previsualiza\u00E7\u00E3o do s\u00EDmbolo
+fallo_obtener_conexion_existente=Erro ao obter uma conex\u00E3o j\u00E1 criada
+Nueva_tabla=Nova Tabela
+Aceptar=OK
+Intervalos_equidistantes=Intervalos Equidistantes
+lppp=ppp
+N\u00FAm_intervalos=N\u00FAmero de Intervalos
+descending_order_tooltip=Ordenar segundo o campo seleccionado por ordem descendente
+borrar=Remover
+Grosor_de_linea=Grossura da linha
+relleno=Preencher\:
+cambio_nombre=Mudar de nome
+formato_incorrecto=Formato incorrecto
+mas_de_100_simbolos=Mais de 100 s\u00EDmbolos n\u00E3o costumam aportar informa\u00E7\u00E3o num mapa.
+espaciado_vertical=Espa\u00E7ando verticalmente
+Editar_leyenda=Editar legenda
+rectangulo=Rect\u00E2ngulo
+Visualizacion=Visualiza\u00E7\u00E3o
+Pies=P\u00E9s
+seleccionar_capas=Selecionar Camadas
+nuevo_proyecto=Novo projeto
+Herramientas=Ferramentas
+bands=Bandas
+cancel=Cancelar
+Vista=Vis\u00E3o
+fallo_registrar_conexion=Erro no registo de uma conex\u00E3o
+tamano_metros=Tamanho em metros
+seleccione_campo_enlace=Seleccione o campo a juntar
+seleccionar_coberturas=Seleccionar Coberturas
+Mapa=Mapa
+insertar_recta=Inserir Reta
+quiere_continuar=Tem a certeza de que quere continuar?
+descripcion=Descri\u00E7\u00E3o
+importar=Importar
+Quitar_Todos=Remover Todos
+filtro=Filtro
+Pulgadas=Polegadas
+Ayuda=Ajuda
+activar_regla=Ativar R\u00E9gua
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zoom
+anchura=Anchura\:
+seleccione_tabla_a_enlazar=Seleccione a tabela a juntar
+propiedades_sesion=Propriedades de Se\u00E7\u00E3o
+ninguna_impresora_configurada=Nenhuma impressora configurada
+Derecho=Direito
+propiedades_vista=Propriedades de Vis\u00E3o
+en_el_mapa=No mapa\:
+salir_tooltip=Sair
+propiedades_mapa=Propriedades de Mapa
+Sean_disjuntos_a=sejam disjuntos a
+Elementos_seleccionados_de_la_capa=elementos seleccionados da capa
+resolucion_resultado=Resolu\u00E7\u00E3o do resultado\:
+Derecha=Direita
+Izquierdo=Esquerdo
+Anadir_todos=Adicionar Todos
+Zoom_Mas=Zoom Mais
+suma=Soma
+Quitar=Remover
+Cancel=Cancelar
+poligono=Pol\u00EDgono
+guardar_como=Salvar como...
+png=Arquivos PNG
+Izquierda=Esquerda
+mostrar_unidades=Mostrar unidades
+Abrir_una_capa=Abrir uma camada
+zooms=Zooms
+(escala_maxima)=(escala m\u00E1xima)
+exportar_pdf=Exportar a pdf
+Valores_Unicos=Valores \u00DAnicos
+Desplazamiento=Descolocamento
+tipos_de_documentos=Tipos de documentos
+seleccion_fuente=Sele\u00E7\u00E3o de fonte
+Zoom_Menos=Zoom Menos
+finish=Finalizar
+Hiperenlace=Hiperlink
+Capa=Capa
+xmin=X m\u00EDnima
+Aplicar=Aplicar
+drivers=Drivers
+visible=Vis\u00EDvel
+comentarios=Coment\u00E1rios
+editable=Editavel
+Previsualizacion=Previsualizar
+quitar_uniones=Remover uni\u00F5es
+tamanyo_borde=Tamanho do borde
+hostname=Nome do servidor
+necesita_un_tema_activo=Necessita um tema activo
+espaciado_horizontal=Espa\u00E7ando horizontalmente
+guardar_cambios=Salvar mudan\u00E7as?
+insertar_norte=Inserir Norte
+Propiedades_de_la_Capa=Propriedades da camada
+Plain=Plano
+coor_geograficas=Coor. Geogr\u00E1ficas
+estadisticas=Estat\u00EDsticas
+Italic=It\u00E1lico
+A6=A6
+A5=A5
+A4=A4
+A3=A3
+Campos=Campos
+A2=A2
+seleccion=Selec\u00E7\u00E3o
+insertar_leyenda=Inserir Legenda
+A1=A1
+escala_usuario=Escala especificada pelo usu\u00E1rio
+A0=A0
+Anadir=Adicionar
+Transparencia=Transpar\u00EAncia
+Insertar=Inserir
+mostrar_descripcion=Mostrar descri\u00E7\u00E3o
+Font=Fonte
+usuario=usuario
+Crucen_con=cruzem com
+Muestra_atributos=Mostrar atributos do tema selecionado.
+medir_distancias=Medir dist\u00E2ncias
+ancho=Largura
+acerca_de=Sobre...
+area_trabajo=\u00C1rea de trabalho
+Circulo=C\u00EDrculo
+este_por_debajo_de_=Esteja por debaixo de
+Shapefile=Shapefile
+ok=Ok
+usar_marco=Usar marco
+normal=Normal
+Elegir_Fuente=Selecionar Fonte
+siempre=Sempre
+resto_valores=Resto de valores
+insertar_escala=Inserir Escala
+host=m\u00E1quina
+color_texto=Cor do Texto\:
+conectar=Conectar
+guardar_proyecto=Salvar projeto
+visualizacion=Visualiza\u00E7\u00E3o
+Etiquetados=Etiquetas
+titulo_confirmar=Confirma\u00E7\u00E3o
+activos=Ativos
+opacidad=Opacidade
+registros=registros
+posicion_linea=Posi\u00E7\u00E3o da linha
+usar_titulo=Usar t\u00EDtulo
+refrescar=Actualizar
+numero_incorrecto=N\u00FAmero incorrecto
+num_bandas=N\u00FAmero de bandas
+navegacion_vista=Vista modo navega\u00E7\u00E3o
+(escala_minima)=(escala m\u00EDnima)
+Tabla_de_Atributos=Tabela de Atributos
+tipo_fichero_proyecto=Arquivos de Projeto gvSIG(*.gvsproj)
+Valor_azul=Valor Azul
+Unidades=Unidades
+Millas=Milhas
+no_activos=N\u00E3o ativo
+titulo_fframetext=T\u00EDtulo do campo de texto
+Toquen=toquem
+fallo_realizar_consulta=Erro ao realizar uma consulta
+cartografico=cartogr\u00E1fico
+Examinar=Procurar
+Ancho_Contorno=Contorno Grosso
+seleccionar_tiempo=Seleccionar a posi\u00E7\u00E3o para o tempo
+tipo_relleno=Preenchimento\:
+escala=Escala
+barra=Barra\:
+texto=Texto
+Formato=Formato
+mantener_intervalo=Manter intervalo
+Identificar_Resultados=Identificar Resultados
+este_por_encima_de=Esteja por em cima de
+Solo_para_capas_vectoriales=S\u00F3 para camadas vetoriais
+salir=Sair
+insertar_rectangulo=Inserir Ret\u00E2ngulo
+Zoom_Previo=Zoom Anterior
+Atributo=Atributo
+horizontal=Horizontal
+Generar_Intervalos=Gerar Intervalos
+salvar_raster=Guardar como raster
+seleccion_campos=Seleccione os campos
+Detalles=Detalhes
+guardar_tooltip=Salvar o projeto
+extents_no_coincidentes=A extens\u00E3o da imagem seleccionada n\u00E3o coincide com a imagem de origem.
+No_de_intervalos=N\u00BA de intervalos
+xmax=X m\u00E1xima
+tipo_de_intervalo=Tipo de intervalo
+Rango_de_escalas=Ranking de Escalas
+abajo=Abaixo
+_(Valores_unicos)=(Valores \u00FAnicos)
+infodef=Mostra todos os elementos da camada utilizando o mesmo simbolo.
+metros=Metros
+calidad=Qualidade
+editar_propiedades=Editar propriedades
+Intervalo=Intervalo
+puerto=porta
+desagrupar=Desagrupar
+Propiedades_texto=Propriedades de texto
+valor_pixel=Valor do pixel
+alinear_graficos=Alinhar gr\u00E1ficos
+Inicializando=Iniciando
+campo_de_documentos_asociados=Campo de documentos associados
+marco_vista=Espa\u00E7o da vis\u00E3o
+Escala=Escala
+Zoom_Acercar=Zoom aproximar
+fallo_crear_conexion=Erro na conex\u00E3o
+recorte=recorte
+insertar_circulo=Inserir C\u00EDrculo
+Simbolo_unico=S\u00EDmbolo \u00FAnico
+necesita_un_tema_vectorial_activo=Necessita um tema vectorial activo
+muestra_consola_tooltip=Mostra a consola
+adjust_transparency=Configurar Transpar\u00EAncia
+Archivo=Arquivo
+ascending_order_tooltip=Ordenar segundo o campo selecionado por ordem ascendente
+desviacion_tipica=Desvia\u00E7\u00E3o t\u00EDpica
+espere=Por favor, espere
+equal_intervals=Intervalos iguais
+alineamiento=Alinhamento\:
+introduce_nombre=Digitar novo nome
+abrir_proyecto=Abrir Projeto
+No_Shape=Esta camada n\u00E3o \u00E9 do tipo Shape
+Campo=Campo
+Campo_de_etiquetado=Campo de legenda
+sincronizar_color_borde_relleno=Sincronizar cor de borda e preenchimento\:
+escala_minima=escala m\u00EDnima
+transparencia=Transpar\u00EAncia
+linea=Linha
+Nivel_de_transparencia=N\u00EDvel de Transpar\u00EAncia
+driver=driver
+Etiquetado=Legenda
+Guardar_leyenda=Salvar estilo
+Rasterfiles=Arquivos Raster
+exportar_a=Exportar para...
+Zoom_Real=Zoom 1\:1
+Estilo=Estilo\:
+No_reconocido=N\u00E3o reconhecido
+Escala_Minima=Escala M\u00EDnima
+Cruz=Cruz
+linea_grafica=Linha gr\u00E1fica
+alias=Alias
+Color_inicial=Cor inicial\:
+malla_activada=Grade ativada
+Etiquetas_estandar=Etiquetas padr\u00E3o
+Zoom_al_Tema=Zoom para camada
+Size=Tamanho
+Tabla=Tabela
+natural_intervals=Intervalos naturais
+Propiedades_escala_grafica=Propriedades da barra de escalas
+distance_units=Unidades de dist\u00E2ncia
+escala_maxima=escala m\u00E1xima
+bandas=Bandas
+Archivos_de_Disco=Arquivos de Disco
+Recuperar_leyenda=Carregar Estilo
+propiedades_marco_vista=Propriedades do espa\u00E7o da vis\u00E3o
+Elegir_Color=Selecionar Cor
+Informacion=Informa\u00E7\u00E3o
+usar_rango=Usa a amplitude
+Valor_rojo=Valor Vermelho
+eliminar_extremos=Eliminar Extremos
+Se_superponen_a=se sobrep\u00F5em a
+nombre_capa=Nome da camada
+DGNFiles=Arquivos DGN
+No_mostrar=N\u00E3o mostrar a camada quando a escala
+Tipo_no_reconocido=Tipo n\u00E3o reconhecido
+Altura_fija_de_texto=Tamanho fixo de texto
+Enlazar_a_fichero_de_texto=Link para arquivos texto
+Anterior=Anterior
+respuesta_error_servidor=N\u00E3o foi possivel obter a cobertura
+colocar_delante=Antes
+Escala_Maxima=Escala M\u00E1xima
+simple=Simples
+Cambios_de_estilo=Mudan\u00E7as de estilo
+WMS=WMS
+margenes=M\u00E1rgens\:
+link=Link
+propiedades_tabla=Propriedades de Tabela
+exportar=Exportar
+agrupar_graficos=Agrupar Gr\u00E1ficos
+Leyenda_Por_Defecto=Legenda por defeito
+Kilometros=Quil\u00F4metros
+Origen_de_Datos=Origem de Dados\:
+nuevo=Novo
+descending_order=Ordem descendente
+prueba_conexion=Provar conex\u00E3o
+Color_de_la_Linea=Cor de Linha
+error_lectura=Erro de leitura
+Quitar_capa=Remover camada
+recorte_colas=Recorte de filas
+nombre_sesion=Nome da se\u00E7\u00E3o
+_(Intervalos)=(Intervalos)
+Graficos=Gr\u00E1ficos
+bd=bd
+desde_arriba=Desde acima\:
+Cancelar=Cancelar
+poner_temas_a=Por os temas em...
+resolucion=Resolu\u00E7\u00E3o
+infobreak=Mostra todos os elementos da camada usando faixa de cores.
+guardar_leyenda=Salvar legenda
+kilometros=Quil\u00F4metros
+map_units=Unidade de mapa
+Abrir_Imagen=Abrir Imagem
+varianza=Varia\u00E7\u00E3o
+configurar_localizador=Configurar Localizador
+abrir_tooltip=Abrir um projeto existente
+ajustes_linea_grafica=Ajustes de linha gr\u00E1fica
+Link=Link
+marco=Marco
+realce=Realce
+Zoom_Alejar=Zoom afastar
+gestion_encuadre=Gest\u00E3o de enquadre
+Shapefiles=Shapefiles
+tamanyo_fuente=Tamanho de fonte
+Bajar_capa=Mover camada para baixo
+__proyeccion_actual=Proje\u00E7\u00E3o atual\:
+Tabla_de_prueba=Testar Tabela
+Metros=Metros

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_ca.properties	(revision 42196)
@@ -0,0 +1,655 @@
+#text_ca.properties
+(escala_maxima)=(escala m\u00E0xima)
+(escala_minima)=(escala m\u00EDnima)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+Abrir_Imagen=Obrir Imatge
+Abrir_una_capa=Afegir capa
+Accion_Predefinida=Acci\u00F3 Predefinida
+Aceptar=Acceptar
+Ajustar_cobertura_wcs=Ajusteu la cobertura WCS
+Ajustar_transparencia=Ajustar Transpar\u00E8ncia
+Al_leer_la_leyenda=En llegir la llegenda
+Altura_fija_de_texto=Altura fixa de text
+Anadir=Afegir
+Anadir_Capa=Afegir Capa
+Anadir_al_conjunto=Afegir al conjunt
+Anadir_capa=Afegir Capa
+Anadir_todos=Afegir tots
+Ancho_Contorno=Ample Contorn
+Ancho_de_linea=Ample de l\u00EDnia
+Anterior=Anterior
+Aplicar=Aplicar
+Archivo=Fitxer
+Archivos_de_Disco=Fitxers de disc
+Atributo=Atribut
+Ayuda=Ajuda
+Back=Anterior
+Bajar_capa=Baixar capa
+Bold=Bold
+Calcular_intervalos=Calcular intervals
+Cambio_Color=Canvi Color
+Cambio_Estilo=Canvi Estil
+Cambio_de_estilo=Canvi d\u0092estil
+Cambios_de_estilo=Canvis d\u0092estil
+Campo=Camp
+Campo_clasifica=Camp de Classificaci\u00F3
+Campo_de_clasificacion=Camp de classificaci\u00F3
+Campo_de_etiquetado=Camp d\u0092etiquetat
+Campos=Camps
+Cancel=Cancel\u00B7lar
+Cancelar=Cancel\u00B7lar
+Capa=Capa
+Capas=Capes
+Capas_del_localizador=Capes del localitzador
+Centimetros=Cent\u00EDmetres
+Cerrar=Tancar
+Circulo=Cercle
+Coberturas=Cobertures
+Color_Contorno=Color Contorn
+Color_de_Relleno=Color de Farciment
+Color_de_la_Linea=Color de la L\u00EDnia\:
+Color_final=Color final\:
+Color_inicial=Color inicial\:
+Color_inicio=Color d\u0092inici
+Configurar_localizador=Configurar Localitzador ...
+Contengan=ontinguen
+Crucen_con=encreuen amb
+Cruz=Creu
+Cuadrado=Quadrat
+DGNFiles=Fitxers .DGN
+Dado_un_campo_de_atributos=Donat un camp d\u0092atributs
+Derecha=Dreta
+Derecho=Dret
+Descripcion=Descripci\u00F3
+Desplazamiento=Despla\u00E7ament
+Detalles=Detalls
+Dxffiles=Fitxers .DXF
+Editar_leyenda=Editar Llegenda
+Elegir_Color=Elegir Color
+Elegir_Fuente=Elegir Font
+Elementos_seleccionados_de_la_capa=elements seleccionats de la capa
+Eliminar=Eliminar
+En_metros=En metres
+En_pixels=En pixels
+Encuadre=Enquadre
+Encuadre_Vista=Enquadre sobre la Vista
+Enlazar_a_fichero_de_texto=Enlla\u00E7ar a fitxer de text
+Enlazar_a_ficheros_de_imagen=Enlla\u00E7ar a fitxers d\u0092imatge
+Error_abriendo_el_fichero=Error obrint el fitxer
+Error_accediendo_a_los_datos=Error accedint a les dades
+Error_guardando_la_leyenda=Error guardant la llegenda
+Escala=Escala
+Escala_Maxima=Escala M\u00E0xima
+Escala_Minima=Escala M\u00EDnima
+Esten_contenidos_en=estiguen continguts en
+Estilo=Estil\:
+Etiqueta=Etiqueta
+Etiquetado=Etiquetat
+Etiquetados=Etiquetats
+Etiquetas_estandar=Etiquetes est\u00E0ndard
+Examinar=Examinar
+Extent=Extensi\u00F3
+Fichero=Fitxer
+Font=Font
+Formato=Format
+Fuente=Font
+General=General
+Generar_Intervalos=Generar Intervals
+Graficos=Gr\u00E0fics
+Grosor_de_linea=Gruix de l\u00EDnia
+Guardar=Guardar
+Guardar_el_zoom_actual=Guardar el zoom
+Guardar_leyenda=Guardar llegenda
+Habilitar_etiquetado=Habilitar etiquetat
+Herramientas=Ferramentes
+Herramientas_vista=Ferramentes de la Vista
+Hiperenlace=Hiperenlla\u00E7
+Identificar_Resultados=Identificar Resultats
+Igual_que_la_impresora=Igual que la impressora
+Imagen=Imatge
+Imprimir=Imprimir
+Inferior=Inferior
+Informacion=Informaci\u00F3
+Inicializando=Inicialitzant
+Insertar=Insertar
+Intersecten_con=intersecten amb
+Intervalo=Interval
+Intervalos=Intervals
+Intervalos_equidistantes=Intervals equidistants.
+Intervalos_por_rupturas_naturales=Intervals per trencaments naturals.
+Italic=Italic
+Izquierda=Esquerra
+Izquierdo=Esquerre
+Kilometros=Kil\u00F2metres
+Leyenda=Llegenda
+Leyenda_Por_Defecto=Llegenda per defecte
+Linea=L\u00EDnia
+Link=Enlla\u00E7
+Localizador_por_atributo=Localitzador per atribut
+Mapa=Mapa
+Mas_100=El nombre de valors \u00E9s superior a 100, i no aporta informaci\u00F3
+Metros=Metres
+Milimetros=Mil\u00B7l\u00EDmetres
+Millas=Milles
+Mostrar_Contorno=Mostrar Contorn
+Mostrar_siempre=Mostrar sempre
+Muestra_atributos=Mostra els atributs de les capes seleccionades.
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostra els atributs de les capes seleccionades
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra els elements de la capa usant una gamma de colors en funci\u00F3 del valor d\u0092un determinat camp d\u0092atributs
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tots els elements d\u0092una capa usant el mateix s\u00EDmbol
+N\u00FAm_intervalos=Nr. intervals
+Next=Seg\u00FCent
+Nivel_de_transparencia=Nivell de transpar\u00E8ncia
+No_Shape=Este Layer no \u00E9s de tipus Shape
+No_de_intervalos=Nr. d\u0092intervals
+No_mostrar=No mostrar la capa quan l\u0092escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa quan l\u0092escala
+No_reconocido=No reconegut
+Nombre=Nom
+Nombre_que_se_le_dara_al_zoom=Nom que se li donar\u00E0 al zoom
+Nombres=Noms
+Nueva_tabla=Nova Taula
+Nuevo_conjunto=Nou conjunt
+Origen_de_Datos=Origen de les Dades\:
+Origen_de_datos=Origen de dades
+Otros=Altres
+Parametros=Par\u00E0metres
+Perimetro=Per\u00EDmetre
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet etiquetar els elements del mapa amb el valor d\u0092un determinat camp
+Personalizado=Personalitzat
+Pies=Peus
+Plain=Plain
+Por_favor_active_el_tema=Per favor, activeu el tema
+Preparar_pagina=Preparar p\u00E0gina
+Previsualizacion=Previsualitzaci\u00F3
+Previsualizacion_de_simbolo=Previsualitzaci\u00F3 de s\u00EDmbol
+Propiedades_de_la_Capa=Propietats de la Capa
+Propiedades_del_Tema=Propietats del tema
+Propiedades_escala_grafica=Propietats de l\u0092escala
+Propiedades_texto=Propietats del text
+Pulgadas=Polsades
+Quitar=Llevar
+Quitar_Todos=Llevar Tots
+Quitar_capa=Llevar capa
+Quitar_todos=Llevar tots
+Rango_de_escalas=Rang d\u0092escales
+Rasterfiles=Fitxers raster
+Recuperar_leyenda=Recuperar llegenda
+Recuperar_y_eliminar_otros_zoom=Recuperar i eliminar altres zooms
+S\u00EDmbolo=S\u00EDmbol
+Salir=Eixir
+Sample=Exemple
+Se_superponen_a=se superposen a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Es tindr\u00E0 en compte per a esborrar els registres des de
+Sean_disjuntos_a=siguen disjunts a
+Sean_iguales_a=siguen iguals a
+Seleccion_por_tema=Selecci\u00F3 per tema
+Seleccionar=Seleccionar
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccione de les capes actives els elements que\:
+Seleccionar_del_conjunto=Seleccionar del conjunt
+Seleccionar_fichero=Seleccionar fitxer
+Servidor=Servidor
+Shapefile=Shapefile
+Shapefiles=Fitxers .SHP
+Siguiente=Seg\u00FCent
+Simbolo=S\u00EDmbol
+Simbolo_Unico=S\u00EDmbol \u00DAnic
+Simbolo_unico=S\u00EDmbol \u00FAnic
+Simbologia=Simbologia
+Size=Size
+Solo_para_capas_vectoriales=Sols per a capes vectorials
+Style=Estil
+Subir_capa=Pujar capa
+Superior=Superior
+Tabla=Taula
+Tabla_de_Atributos=Taula d\u0092Atributs
+Tabla_de_prueba=Taula de prova
+Tiempo=Temps
+Tipo_de_intervalos=Tipus d\u0092intervals
+Tipo_de_leyenda=Tipus de llegenda
+Tipo_de_linea=Tipus de l\u00EDnia
+Tipo_no_reconocido=Tipus no reconegut
+Toquen=toquen
+Transparencia=Transpar\u00E8ncia
+Triangulo=Triangle
+Un_Layer=Ha de seleccionar almenys una capa.
+Unidades=Unitats\:
+Usar_indice_espacial=Usar \u00EDndex espacial
+Valor=Valor
+Valor_Bandas=Valor Bandes
+Valor_azul=Valor Blau
+Valor_rojo=Valor Roig
+Valor_verde=Valor Verd
+Valores=Valors
+Valores_Unicos=Valors \u00DAnics
+Valores_unicos=Valors \u00FAnics
+Ventana=Finestra
+Ver=Veure
+Vista=Vista
+Visualizacion=Visualitzaci\u00F3
+WMS=WMS
+Yardas=Iardes
+Zoom=Zoom
+Zoom_Acercar=Zoom acostar
+Zoom_Alejar=Zoom allunyar
+Zoom_Completo=Zoom Complet
+Zoom_Completo_Vista=Zoom Complet sobre la Vista
+Zoom_Mas=Zoom M\u00E9s
+Zoom_Mas_Vista=Zoom M\u00E9s sobre la Vista
+Zoom_Menos=Zoom Menys
+Zoom_Menos_Vista=Zoom Menys sobre la Vista
+Zoom_Previo=Zoom Previ
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a la part seleccionada
+Zoom_al_Tema=Zoom al Tema
+Zoom_pixel=Zoom a la resoluci\u00F3 del r\u00E0ster
+_(Etiquetas_estandar)=(Etiquetes est\u00E0ndard)
+_(Intervalos)=(Intervals)
+_(Simbolo_unico)=(S\u00EDmbol \u00FAnic)
+_(Valores_unicos)=(Valors \u00FAnics)
+__espacio_vertical=Espai vertical\:
+__lineas=l\u00EDnies
+__proyeccion_actual=Projecci\u00F3 actual\:
+__redimensionar_texto_escala=Redimensione el text a escala amb la vista
+__seleccion_de_fuente=Selecci\u00F3 de font
+abajo=Avall
+abrir=Obrir
+abrir_plantilla=Obrir plantilla
+abrir_proyecto=Obrir projecte
+abrir_tooltip=Obri un projecte existent
+aceptar=Acceptar
+acerca_de=Sobre...
+activar_regla=Activar regla
+activos=Actius
+adjust_transparency=Ajustar transpar\u00E8ncia
+agrupar=Agrupar
+agrupar_capas=Agrupar capes
+agrupar_graficos=Agrupar gr\u00E0fics
+agrupar_linea=Agrupar l\u00EDnia gr\u00E0fica amb gr\u00E0fics
+ajustes_linea_grafica=Ajustos de l\u00EDnia gr\u00E0fica
+alerta=Av\u00EDs
+alias=\u00C0lies
+alineamiento=Alineament\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00E0fics
+alta=Alta
+alto=Alt
+altura=Altura\:
+ambito=\u00C0mbit
+ancho=Ample
+ancho_alto=Ampl\u00E0ria X Al\u00E7\u00E0ria
+anchura=Ampl\u00E0ria\:
+angulo_rotacion=Angle de rotaci\u00F3\:
+anterior=Anterior
+area_trabajo=\u00C0rea de treball
+arriba=Amunt
+ascending_order=Orde ascendent
+ascending_order_tooltip=S\u0092ordena pel camp seleccionat en orde ascendent
+automatico=Autom\u00E0tic
+back=Anterior
+background_color=Color de fons
+baja=Baixa
+bandas=Bandes
+bands=Bandes
+barra=Barra
+base_datos=Base de dades
+bd=bd
+bmp=Fitxers de tipus bmp
+borra_seleccion=Esborrar selecci\u00F3
+borrador=Esborrany
+borrar=Esborrar
+calidad=Qualitat
+cambio_nombre=Canvi de nom
+campo=Camp
+campo_altura_texto=Camp d\u0092altura de text\:
+campo_de_documentos_asociados=Camp de documents associats
+cancel=Cancel\u00B7lar
+cancelar=Cancel\u00B7lar
+capaWMS=CapaWMS
+cargar_leyenda=Carregar llegenda
+cartografico=Cartogr\u00E0fic
+causa_error_desconocida=Error inesperat del servidor
+cerrar=Tancar
+circulo=Cercle
+clave=Clau
+coincidir_tamano=Coincidir Dimensi\u00F3\:
+colocar_a_margenes=Col\u00B7locar amb refer\u00E8ncia a m\u00E0rgens.
+colocar_alrededor_seleccionados=Col\u00B7locar al voltant dels gr\u00E0fics seleccionats.
+colocar_alrededor_todos=Col\u00B7locar al voltant de tots els gr\u00E0fics.
+colocar_delante=Col\u00B7locar davant
+colocar_detras=Col\u00B7locar darrere
+color=Color\:
+color_texto=Color del text\:
+comentarios=Comentaris
+conectar=Connectar
+conexion_correcta=Connexi\u00F3 correcta
+configuracion_andami_tooltip=Configuraci\u00F3 Andami
+configurar=Configurar
+configurar_localizador=Configurar localitzador
+confirmar_borrar=Est\u00E0 segur que desitja esborrar l\u0092element?
+conservar_escala_visualizacion=Conservar escala de visualitzaci\u00F3
+consulta=Consulta
+coor_geograficas=Coor. geogr\u00E0fiques
+creation_date=Data de creaci\u00F3
+cuando_activo=Si est\u00E0 Actiu
+debe_estar_activada=Ha d\u0092estar activada
+desagrupar=Desagrupar
+desagrupar_graficos=Desagrupar gr\u00E0fics
+descending_order=Orde descendent
+descending_order_tooltip=S\u0092ordena pel camp seleccionat en orde descendent
+desconectar=Desconnectar
+descripcion=Descripci\u00F3
+desde_arriba=Des de Dalt\:
+desde_izquierda=Des de l\u0092Esquerra\:
+desviacion_tipica=Desviaci\u00F3 t\u00EDpica
+detalles=Detalls
+distance_units=Unitats de mesura
+distribuir=Distribuir\:
+divisiones_izquierda=Divisions a l\u0092esquerra
+documentos_existentes=Documents existents
+driver=driver
+drivers=Programes de control
+editable=Editable
+editar_propiedades=editar propietats
+el_numero_maximo_de_intervalos_para_este_campo_es=El nombre m\u00E0xim d\u0092intervals per a este camps \u00E9s
+eliminar_capa=Eliminar Capa
+eliminar_extremos=Eliminar extrems
+en_el_mapa=En el mapa\:
+enlace_vivo=Enlla\u00E7 viu
+equal_intervals=Intervals iguals
+error_comunicacion_servidor=S\u0092ha produ\u00EFt un error en comunicar amb el servidor
+error_escritura=No s\u0092ha pogut guardar el projecte
+error_lectura=No s\u0092ha pogut obrir el projecte
+escala=Escala
+escala_maxima=escala m\u00E0xima
+escala_minima=escala m\u00EDnima
+escala_usuario=Escala especificada per l\u0092usuari
+espaciado_horizontal=Espaiat horitzontal de la malla
+espaciado_vertical=Espaiat vertical de la malla
+espacio=Espai\:
+espere=Per favor, espereu
+estadisticas=Estad\u00EDstiques
+este_por_debajo_de_=Que estiga por davall de
+este_por_encima_de=Que estiga per damunt de
+etiquetas=Etiquetes
+export=Exportar
+exportar=Exportar
+exportar_a=Exportar a...
+exportar_pdf=Exportar a pdf
+extension=Extensi\u00F3
+extents_no_coincidentes=L\u0092extensi\u00F3 de la imatge seleccionada no coincidix amb la imatge d\u0092origen.
+fallo_crear_conexion=Fallada en crear la connexi\u00F3
+fallo_crear_pool=Fallada en la creaci\u00F3 del pool de connexions
+fallo_obtener_conexion_existente=Fallada en obtindre una connexi\u00F3 ja creada
+fallo_obtener_tablas=Fallada en obtindre les taules de la base de dades
+fallo_realizar_consulta=Fallada en realitzar una consulta
+fallo_registrar_conexion=Fallada en el registre d\u0092una connexi\u00F3
+fichero_existe=El fitxer seleccionat ja existix com a banda de la capa
+fichero_incorrecto=Fitxer incorrecte
+filtro=Filtre
+finalizar=Finalitzar
+finish=Finalitzar
+formato=Format
+formato_incorrecto=Format incorrecte
+fuente=Font
+gestion_encuadre=Gesti\u00F3 d\u0092Enquadres
+grados=Graus\:
+grosor_linea=Gruix de l\u00EDnia\:
+guardado=Guardat en
+guardar_cambios=Vol guardar els canvis?
+guardar_clave=Guardar la clau
+guardar_como=Guardar com a...
+guardar_como_plantilla=Guardar com a plantilla
+guardar_leyenda=Guardar llegenda
+guardar_proyecto=Guardar projecte
+guardar_tooltip=Guarda els canvis del projecte
+hasta=fins a
+horizontal=Horitzontal
+host=m\u00E0quina
+hostname=Hostname
+igual_todos_lados=Despla\u00E7ament igual per tots els costats.
+imagen=Imatge
+import=Importar
+import_map_context=Importar mapes des d\u0092un fitxer Web Map Context de l\u0092OGC
+importar=Importar
+importar_extent=Importar l\u0092extensi\u00F3 actual de la vista
+info=Info
+infobreak=Mostra els elements de la capa usant una gamma de colors.
+infodef=Mostra tots els elements d\u0092una capa usant el mateix s\u00EDmbol.
+informacion=Informaci\u00F3
+infovalue=Mostra elements de la capa usant un s\u00EDmbol per cada valor.
+insertar_circulo=Insertar Cercle
+insertar_escala=Insertar Escala
+insertar_imagen=Insertar Imatge
+insertar_leyenda=Insertar Llegenda
+insertar_linea=Insertar L\u00EDnia
+insertar_norte=Insertar nord
+insertar_poligono=Insertar Pol\u00EDgon
+insertar_punto=Insertar Punt
+insertar_recta=Insertar Recta
+insertar_rectangulo=Insertar Rectangle
+insertar_texto=Insertar Text
+insertar_vista=Insertar Vista
+introduce_nombre=Introdu\u00EFx el nou nom
+join=Uni\u00F3
+jpg=Fitxers JPEG
+kilometros=Kil\u00F2metres
+leyenda=Llegenda
+leyenda_campo_unido=S\u0092est\u00E0 utilitzant un camp de la uni\u00F3 en la llegenda (i/o etiquetatge). Canvie la llegenda abans de llevar la uni\u00F3, per favor.
+linea=L\u00EDnia
+linea_grafica=L\u00EDnia gr\u00E0fica
+lineal_directo=Linial Directe
+linf_der=Inf. dre.  X
+link=Enlla\u00E7
+lppp=ppp
+lsup_izq=Sup. esq. X
+malla_activada=Malla activada
+mantener_intervalo=Mantindre interval
+map_units=Unitats de mapa
+mapas=Mapes
+marco=Marc
+marco_vista=Marc de la vista
+margenes=M\u00E0rgens\:
+mas_de_100_simbolos=M\u00E9s de 100 s\u00EDmbols no solen aportar informaci\u00F3 en un pla
+maximo=M\u00E0xim
+media=Media
+medir_area=Mesurar \u00C0rea
+medir_distancias=Mesurar dist\u00E0ncies
+metros=Metres
+minimo=M\u00EDnim
+modification_date=\u00DAltima data de modificaci\u00F3
+mosaico_tooltip=Mosaic
+mostrar_descripcion=Mostrar descripci\u00F3
+mostrar_unidades=Mostrar unitats
+muestra_consola_tooltip=Mostra la consola
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra els elements de la capa usant un s\u00EDmbol per cada valor \u00FAnic
+natural_intervals=Intervals naturals
+navegacion=Navegaci\u00F3
+navegacion_vista=Navegaci\u00F3 vista
+necesita_un_tema_activo=Es necessita un tema actiu
+necesita_un_tema_vectorial_activo=Es necessita un tema vectorial actiu
+next=Seg\u00FCent
+ninguna_impresora_configurada=Cap impressora configurada
+no_activos=No actius
+no_visibles=No visibles
+nombre=Nom
+nombre_capa=Nom de la capa
+nombre_cobertura=Nom de la cobertura
+nombre_sesion=Nom de la sessi\u00F3
+normal=Normal
+north=Nord
+nuevo=Nou
+nuevo_proyecto=Nou projecte
+nuevo_tamano_fuente=Nova Dimensi\u00F3 de font\:
+nuevo_tooltip=Crea un nou projecte
+num_bandas=N\u00FAmero de bandes
+numero_incorrecto=N\u00FAmero incorrecte
+offline=Desconnectat
+ok=Ok
+online=Connectat
+opacidad=Opacitat
+options.firewall.http.enabled=Fer \u00FAs de servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecte
+options.firewall.http.nonProxy=Connectar directament a
+options.firewall.http.password=Contrasenya
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nom d\u0092usuario
+options.firewall.socks.enabled=Fer \u00FAs de servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecte
+options.firewall.socks.port=Puerto proxy SOCKS
+optinos.network.click_to_test_connection=Prema el bot� per comprovar la connexi�
+options.network.status=Estat de la connexi�
+orientacion=Orientaci\u00F3\:
+owner=Propietari
+parametros=Par\u00E0metres
+path=Ruta
+pixeles=p\u00EDxels
+png=Fitxers png
+poligono=Pol\u00EDgon
+poner_temas_a=Posar capes a...
+por_debajo_de=per davall de\:
+por_encima_de=per damunt de\:
+posicion_linea=Posici\u00F3 de la l\u00EDnia
+pref.general=General
+pref.network.firewall=Firewall/Proxy
+pref.network=Xarxa
+preferences=Prefer\u00E8ncies...
+preparar_pagina=Preparar p\u00E0gina
+presentacion=Presentaci\u00F3
+propiedades=Propietats
+propiedades_del_tema=Propietats del tema
+propiedades_grafico=Propietats Gr\u00E0fic
+propiedades_mapa=Propietats del mapa
+propiedades_marco_imagenes=Propietats del marc d\u0092im\u00E0tgens
+propiedades_marco_leyenda=Propietats del marc de la llegenda
+propiedades_marco_vista=Propietats del marc de la vista
+propiedades_raster=Propietats del r\u00E0ster
+propiedades_sesion=Propietats de la sessi\u00F3
+propiedades_tabla=Propietats de la taula
+propiedades_tema=Propietats del Tema
+propiedades_vista=Propietats de la vista
+prueba_conexion=Prova de la connexi\u00F3
+puerto=port
+punto=Punt
+quantile_intervals=Intervals quantils
+quiere_continuar=Est\u00E0 segur que vol continuar?
+quitar_enlaces=LLevar enlla\u00E7os
+quitar_uniones=Llevar unions
+rango_de_escalas=Rang d\u0092escales
+realce=Relleu
+recorte=retall
+recorte_colas=Retall de cues
+recorte_vista=Retall a vista
+recta=Recta
+rectangulo=Rectangle
+recuento=Recompte
+refrescar=Refrescar
+registros=registres
+registros_seleccionados_total=Total registres seleccionats
+rellenar_marco_vista=Reomplir marc de la vista
+relleno=Farciment\:
+renombrar=Renomenar
+reproyectar_aviso=La projecci\u00F3 de la capa no \u00E9s igual que la de la vista.\nAVISO\: pot ser inexacte amb algunes transformaciones.\nPer favor, llija la documentaci\u00F3
+reproyectar_pregunta=Vol reprojectar-la?
+resolucion=Resoluci\u00F3
+resolucion_resultado=Resoluci\u00F3 del resultat\:
+respuesta_error_servidor=No s\u0092ha pogut obtindre la cobertura
+resto_valores=Resta de valors
+restore_defaults=Restaura valors predeterminats
+salir=Eixir
+salir_tooltip=Eixir
+salvar_raster=Salvar el r\u00E0ster
+seleccion=Selecci\u00F3
+seleccion_campos=Seleccioneu els camps
+seleccion_fuente=Selecci\u00F3 de font
+seleccionar_CRS=Seleccioneu CRS
+seleccionar_capas=Seleccionar Capes
+seleccionar_coberturas=Seleccioneu les cobertures
+seleccionar_formato=Seleccionar Format
+seleccionar_parametros=Seleccioneu els par\u00E0metres
+seleccionar_por_punto=Seleccionar per punt
+seleccionar_por_rectangulo=Seleccionar per rectangle
+seleccionar_tiempo=Seleccioneu la posici\u00F3 per al temps
+seleccionar_todos=Seleccionar tots
+seleccione_campo_enlace=Seleccioneu el camp a trav\u00E9s del qual cal enlla\u00E7ar
+seleccione_fecha=Seleccione una data...
+seleccione_tabla=Seleccioneu la taula
+seleccione_tabla_a_enlazar=Seleccioneu la taula que cal enlla\u00E7ar
+seleccione_tabla_origen=Seleccioneu la taula d\u0092origen de la uni\u00F3
+select_all=Seleccionar tots
+select_geom_field=Seleccioneu el camp que porta la geometria
+select_none=Llevar tots
+select_unique_field=Seleccioneu el camp \u00FAnic
+selection_color=Color de la selecci\u00F3
+servidor=Servidor
+servidor_wcs_no_responde=El servidor seleccionat no respon
+shape_seleccion=Exportar la selecci\u00F3
+siempre=Sempre
+siguiente=Seg\u00FCent
+simple=Simple
+simplificar=Simplificar
+sin_realce=Sense Relleu
+sin_titulo=Sense t\u00EDtol
+sincronizar_color_borde_relleno=Sincronitzar el color de la vora amb el del Farciment\:
+sobre_la_barra=Sobre la barra
+statistics=Estad\u00EDstiques
+suma=Suma
+tablas=Taules
+tamano=Dimensi\u00F3\:
+tamano_metros=Dimensi\u00F3 en metres
+tamano_pagina=Dimensi\u00F3 de p\u00E0gina\:
+tamano_posicion=Dimensi\u00F3 i posici\u00F3
+tamanyo_borde=Grand\u00E0ria de la vora
+tamanyo_fuente=Grand\u00E0ria de font
+tarea_en_progreso=Tasca en progr\u00E9s
+tema=Tema
+test_now=Comprovar ara
+texto=Text
+tipo_dato=Tipus de dada
+tipo_de_intervalo=Tipus d\u0092interval
+tipo_de_leyenda=Tipus de llegenda
+tipo_fichero_proyecto=Fitxer de projecte gvSIG (*.gvsproj)
+tipo_leyenda=Fitxers de tipus llegenda (*.GVL)
+tipo_linea=Tipus de L\u00EDnia\:
+tipo_relleno=Tipus de Farciment\:
+tipo_simbolo=Tipus de s\u00EDmbol\:
+tipos_de_documentos=Tipus de documents
+titulo=Gestor de projectes
+titulo_confirmar=Confirmaci\u00F3
+titulo_fframetext=T\u00EDtol del camp de text
+toda_la_tabla=Tota la taula
+transparencia=Transpar\u00E8ncia
+unidades=Unitats\:
+untitled=Sense t\u00EDtol
+usar_marco=Usar marc
+usar_rango=Useu un rang
+usar_titulo=Usar t\u00EDtol
+usuario=usuari
+utilizar_margenes_impresora=Utilitzar m\u00E0rgens de la impressora.
+vacia=Buida
+valor_pixel=Valor de pixel
+varianza=Varian\u00E7a
+ventana_proyecto=Finestra de projecte
+ver_tabla_atributos=Veure Taula d\u0092atributs
+ver_tooltip=Mostra la finestra de projecte
+vertical=Vertical
+visible=Visible
+visibles=Visibles
+vistas=Vistes
+visualizacion=Visualitzaci\u00F3
+visualizar_cuadricula=Visualitzeu malla
+wcs_properties=Propiedats WCS
+web_map_context=Web Map Context
+xmax=X m\u00E0xima
+xmin=X m\u00EDnima
+ymax=Y m\u00E0xima
+ymin=Y m\u00EDnima
+zooms=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_pt.properties	(revision 42196)
@@ -0,0 +1,629 @@
+#text_pt.properties
+__espacio_vertical=\u00C1rea vertical\:
+__lineas=linhas
+__proyeccion_actual=Proje\u00E7\u00E3o atual\:
+__redimensionar_texto_escala=Redimensionar o texto de acordo com a escala da vis\u00E3o
+__seleccion_de_fuente=Sele\u00E7\u00E3o da fonte
+_(Etiquetas_estandar)=(Etiquetas padr\u00E3o)
+_(Intervalos)=(Intervalos)
+_(Simbolo_unico)=(S\u00EDmbolo \u00FAnico)
+_(Valores_unicos)=(Valores \u00FAnicos)
+(escala_maxima)=(escala m\u00E1xima)
+(escala_minima)=(escala m\u00EDnima)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+abajo=Abaixo
+abrir=Abrir
+Abrir_Imagen=Abrir Imagem
+abrir_plantilla=Abrir molde
+abrir_proyecto=Abrir Projeto
+abrir_tooltip=Abrir um projeto existente
+Abrir_una_capa=Abrir uma camada
+Accion_Predefinida=A\u00E7\u00E3o Predefinida
+aceptar=OK
+Aceptar=OK
+acerca_de=Sobre...
+activar_regla=Ativar R\u00E9gua
+activos=Ativos
+adjust_transparency=Configurar Transpar\u00EAncia
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar Gr\u00E1ficos
+agrupar_linea=Agrupar Linha
+Ajustar_cobertura_wcs=Ajustar cobertura WCS
+Ajustar_transparencia=Ajustar Transpar\u00EAncia
+ajustes_linea_grafica=Ajustes de linha gr\u00E1fica
+Al_leer_la_leyenda=Ao ler a legenda
+alerta=Aviso
+alias=Alias
+alineamiento=Alinhamento\:
+alinear=Alinhar
+alinear_graficos=Alinhar gr\u00E1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Tamanho fixo de texto
+ambito=\u00C2mbito
+Anadir=Adicionar
+Anadir_al_conjunto=Adicionar ao conjunto
+Anadir_capa=Adicionar Tema
+Anadir_Capa=Adicionar Tema
+Anadir_todos=Adicionar Todos
+ancho=Largura
+ancho_alto=Largura X Altura
+Ancho_Contorno=Contorno Grosso
+Ancho_de_linea=Linha Grossa
+anchura=Anchura\:
+angulo_rotacion=\u00C2ngulo de rota\u00E7\u00E3o\:
+anterior=Anterior
+Anterior=Anterior
+Aplicar=Aplicar
+Archivo=Arquivo
+Archivos_de_Disco=Arquivos de Disco
+area_trabajo=\u00C1rea de trabalho
+arriba=Acima
+ascending_order=Ordem ascendente
+ascending_order_tooltip=Ordenar segundo o campo selecionado por ordem ascendente
+Atributo=Atributo
+automatico=Autom\u00E1tico
+Ayuda=Ajuda
+back=Anterior
+Back=Anterior
+background_color=Cor de Fundo
+baja=Baixa
+Bajar_capa=Mover camada para baixo
+bandas=Bandas
+bands=Bandas
+barra=Barra\:
+base_datos=Base de dados
+bd=bd
+bmp=Arquivos BMP
+Bold=Negrito
+borra_seleccion=Apagar sele\u00E7\u00E3o
+borrador=Rascunho
+borrar=Remover
+Calcular_intervalos=Circular intervalos
+calidad=Qualidade
+Cambio_Color=Mudar Cor
+Cambio_de_estilo=Mudar estilo
+Cambio_Estilo=Mudar Estilo
+cambio_nombre=Mudar de nome
+Cambios_de_estilo=Mudan\u00E7as de estilo
+campo=Campo
+Campo=Campo
+campo_altura_texto=Altura do campo texto\:
+Campo_clasifica=Campo de Classifica\u00E7\u00E3o
+Campo_de_clasificacion=Campo de Classifica\u00E7\u00E3o
+campo_de_documentos_asociados=Campo de documentos associados
+Campo_de_etiquetado=Campo de legenda
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Camadas
+Capas_del_localizador=Camadas de localizador
+capaWMS=CamadaWMS
+cargar_leyenda=Carregar legenda
+cartografico=cartogr\u00E1fico
+causa_error_desconocida=Erro inesperado do servidor
+Centimetros=Cent\u00EDmetros
+cerrar=Fechar
+Cerrar=Fechar
+circulo=C\u00EDrculo
+Circulo=C\u00EDrculo
+clave=Senha
+Coberturas=Coberturas
+coincidir_tamano=Coincidir tamanho\:
+colocar_a_margenes=Colocando nas margens
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00E1ficos selecionados.
+colocar_alrededor_todos=Colocando ao redor de todos os gr\u00E1ficos.
+colocar_delante=Antes
+colocar_detras=Atr\u00E1s
+color=Cor\:
+Color_Contorno=Cor de Contorno
+Color_de_la_Linea=Cor de Linha
+Color_de_Relleno=Cor de Preenchimento\:
+Color_final=Cor final\:
+Color_inicial=Cor inicial\:
+Color_inicio=Cor inicial
+color_texto=Cor do Texto\:
+comentarios=Coment\u00E1rios
+conectar=Conectar
+conexion_correcta=Conex\u00E3o correcta
+configuracion_andami_tooltip=Configura\u00E7\u00E3o Andami
+configurar=Configurar
+configurar_localizador=Configurar Localizador
+Configurar_localizador=Configurar Localizador ...
+confirmar_borrar=O elemento ser\u00E1 removido. Est\u00E1 certo disto ?
+conservar_escala_visualizacion=Manter escala da vis\u00E3o
+consulta=Consulta
+Contengan=contenham
+coor_geograficas=Coor. Geogr\u00E1ficas
+creation_date=Data de cria\u00E7\u00E3o
+Crucen_con=cruzem com
+Cruz=Cruz
+Cuadrado=Quadrado
+cuando_activo=Quando ativo
+Dado_un_campo_de_atributos=Dado de um campo de atributos
+debe_estar_activada=Deve estar activada
+Derecha=Direita
+Derecho=Direito
+desagrupar=Desagrupar
+desagrupar_graficos=Desagrupar gr\u00E1ficos
+descending_order=Ordem descendente
+descending_order_tooltip=Ordenar segundo o campo seleccionado por ordem descendente
+desconectar=Desconectar
+descripcion=Descri\u00E7\u00E3o
+Descripcion=Descri\u00E7\u00E3o
+desde_arriba=Desde acima\:
+desde_izquierda=Desde a esquerda\:
+Desplazamiento=Descolocamento
+desviacion_tipica=Desvia\u00E7\u00E3o t\u00EDpica
+detalles=Detalhes
+Detalles=Detalhes
+DGNFiles=Arquivos DGN
+distance_units=Unidades de dist\u00E2ncia
+distribuir=Destribuir\:
+divisiones_izquierda=Divis\u00F5es para a esquerda
+documentos_existentes=Documentos existentes
+driver=driver
+drivers=Drivers
+Dxffiles=Arquivos DXF
+editable=Editavel
+Editar_leyenda=Editar legenda
+editar_propiedades=Editar propriedades
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00FAmero m\u00E1ximo de intervalos para este campo \u00E9
+Elegir_Color=Selecionar Cor
+Elegir_Fuente=Selecionar Fonte
+Elementos_seleccionados_de_la_capa=elementos seleccionados da capa
+Eliminar=Deletar
+eliminar_capa=Deletar Camada
+eliminar_extremos=Eliminar Extremos
+en_el_mapa=No mapa\:
+En_metros=Em metros
+En_pixels=Em pixels
+Encuadre=Zooms
+Encuadre_Vista=Enquadrar vista
+enlace_vivo=Link vivo
+Enlazar_a_fichero_de_texto=Link para arquivos texto
+Enlazar_a_ficheros_de_imagen=Link para arquivos de imagem
+equal_intervals=Intervalos iguais
+Error_abriendo_el_fichero=Erro abrindo arquivo
+Error_accediendo_a_los_datos=Erro ao aceder aos dados
+error_comunicacion_servidor=Produziu-se um erro ao comunicar com o servidor
+error_escritura=Erro de escrita
+Error_guardando_la_leyenda=Erro ao guardar a legenda
+error_lectura=Erro de leitura
+escala=Escala
+Escala=Escala
+escala_maxima=escala m\u00E1xima
+Escala_Maxima=Escala M\u00E1xima
+escala_minima=escala m\u00EDnima
+Escala_Minima=Escala M\u00EDnima
+escala_usuario=Escala especificada pelo usu\u00E1rio
+espaciado_horizontal=Espa\u00E7ando horizontalmente
+espaciado_vertical=Espa\u00E7ando verticalmente
+espacio=Espa\u00E7o\:
+espere=Por favor, espere
+estadisticas=Estat\u00EDsticas
+este_por_debajo_de_=Esteja por debaixo de
+este_por_encima_de=Esteja por em cima de
+Esten_contenidos_en=estejam dentro de
+Estilo=Estilo\:
+Etiqueta=Legenda
+Etiquetado=Legenda
+Etiquetados=Etiquetas
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas padr\u00E3o
+Examinar=Procurar
+exportar=Exportar
+exportar_a=Exportar para...
+exportar_pdf=Exportar a pdf
+extension=Extens\u00E3o
+Extent=Extens\u00E3o
+extents_no_coincidentes=A extens\u00E3o da imagem seleccionada n\u00E3o coincide com a imagem de origem.
+fallo_crear_conexion=Erro na conex\u00E3o
+fallo_crear_pool=Erro na cria\u00E7\u00E3o da pool de conex\u00F5es
+fallo_obtener_conexion_existente=Erro ao obter uma conex\u00E3o j\u00E1 criada
+fallo_obtener_tablas=Erro ao obter as tabelas da base de dados
+fallo_realizar_consulta=Erro ao realizar uma consulta
+fallo_registrar_conexion=Erro no registo de uma conex\u00E3o
+Fichero=Arquivo
+fichero_existe=O ficheiro seleccionado ja existe como banda da capa
+fichero_incorrecto=Ficheiro incorrecto
+filtro=Filtro
+finalizar=Finalizar
+finish=Finalizar
+Font=Fonte
+formato=Formato
+Formato=Formato
+formato_incorrecto=Formato incorrecto
+fuente=Fonte
+Fuente=Fonte
+General=Geral
+Generar_Intervalos=Gerar Intervalos
+gestion_encuadre=Gest\u00E3o de enquadre
+grados=Graus\:
+Graficos=Gr\u00E1ficos
+Grosor_de_linea=Grossura da linha
+grosor_linea=Grossura da linha\:
+guardado=Salvo em
+Guardar=Salvar
+guardar_cambios=Salvar mudan\u00E7as?
+guardar_clave=Guardar senha
+guardar_como=Salvar como...
+guardar_como_plantilla=Guardar como molde
+Guardar_el_zoom_actual=Salver zoom atual
+guardar_leyenda=Salvar legenda
+Guardar_leyenda=Salvar estilo
+guardar_proyecto=Salvar projeto
+guardar_tooltip=Salvar o projeto
+Habilitar_etiquetado=Habilitar legenda
+hasta=at\u00E9
+Herramientas=Ferramentas
+Herramientas_vista=Ver ferramentas
+Hiperenlace=Hiperlink
+horizontal=Horizontal
+host=m\u00E1quina
+hostname=Nome do servidor
+Identificar_Resultados=Identificar Resultados
+Igual_que_la_impresora=Igual a impressora
+igual_todos_lados=Igual em todos os lados.
+imagen=Imagem
+Imagen=Imagem
+importar=Importar
+importar_extent=Importar a extens\u00E3o actual da vista
+Imprimir=Imprimir
+Inferior=Abaixo
+info=Info
+infobreak=Mostra todos os elementos da camada usando faixa de cores.
+infodef=Mostra todos os elementos da camada utilizando o mesmo simbolo.
+informacion=Informa\u00E7\u00E3o
+Informacion=Informa\u00E7\u00E3o
+infovalue=Mostra elementos da camada utilizando um simbolo para cada valor.
+Inicializando=Iniciando
+Insertar=Inserir
+insertar_circulo=Inserir C\u00EDrculo
+insertar_escala=Inserir Escala
+insertar_imagen=Inserir Imagem
+insertar_leyenda=Inserir Legenda
+insertar_linea=Inserir Linha
+insertar_norte=Inserir Norte
+insertar_poligono=Inserir Pol\u00EDgono
+insertar_punto=Inserir Ponto
+insertar_recta=Inserir Reta
+insertar_rectangulo=Inserir Ret\u00E2ngulo
+insertar_texto=Inserir Texto
+insertar_vista=Inserir Vis\u00E3o
+Intersecten_con=intersectam com
+Intervalo=Intervalo
+Intervalos=Intervalos
+Intervalos_equidistantes=Intervalos Equidistantes
+Intervalos_por_rupturas_naturales=Intervalo por quebras naturais.
+introduce_nombre=Digitar novo nome
+Italic=It\u00E1lico
+Izquierda=Esquerda
+Izquierdo=Esquerdo
+join=Uni\u00E3o
+jpg=Arquivos JPEG
+kilometros=Quil\u00F4metros
+Kilometros=Quil\u00F4metros
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Se est\u00E1 a utilizar um campo da uni\u00E3o na legenda (e/ou etiquetas). Mude a legenda antes de retirar a uni\u00E3o, por favor.
+Leyenda_Por_Defecto=Legenda por defeito
+linea=Linha
+Linea=Linha
+linea_grafica=Linha gr\u00E1fica
+lineal_directo=Lineal Direito
+linf_der=Inf. dir.  X
+link=Link
+Link=Link
+Localizador_por_atributo=Localizador por atributo
+lppp=ppp
+lsup_izq=Sup. esq. X
+malla_activada=Grade ativada
+mantener_intervalo=Manter intervalo
+map_units=Unidade de mapa
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Espa\u00E7o da vis\u00E3o
+margenes=M\u00E1rgens\:
+Mas_100=N\u00FAmero de valores acima de 100 e n\u00E3o contribui com informa\u00E7\u00E3o
+mas_de_100_simbolos=Mais de 100 s\u00EDmbolos n\u00E3o costumam aportar informa\u00E7\u00E3o num mapa.
+maximo=M\u00E1ximo
+media=M\u00E9dia
+medir_area=Medir \u00E1rea
+medir_distancias=Medir dist\u00E2ncias
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00EDmetros
+Millas=Milhas
+minimo=M\u00EDnimo
+modification_date=Data de modifica\u00E7\u00E3o
+mosaico_tooltip=Mosaico
+Mostrar_Contorno=Mostrar Contorno
+mostrar_descripcion=Mostrar descri\u00E7\u00E3o
+Mostrar_siempre=Mostrar sempre
+mostrar_unidades=Mostrar unidades
+Muestra_atributos=Mostrar atributos do tema selecionado.
+muestra_consola_tooltip=Mostra a consola
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostrar atributos do tema selecionado
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra os elementos da capa usando um s\u00EDmbolo por cada valor \u00FAnico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra os elementos da capa usando uma gama de cores em fun\u00E7\u00E3o do valor de um determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra todos os elementos de una capa usando o mesmo s\u00EDmbolo
+natural_intervals=Intervalos naturais
+navegacion=Navega\u00E7\u00E3o
+navegacion_vista=Vista modo navega\u00E7\u00E3o
+necesita_un_tema_activo=Necessita um tema activo
+necesita_un_tema_vectorial_activo=Necessita um tema vectorial activo
+next=Seguinte
+Next=Seguinte
+ninguna_impresora_configurada=Nenhuma impressora configurada
+Nivel_de_transparencia=N\u00EDvel de Transpar\u00EAncia
+no_activos=N\u00E3o ativo
+No_de_intervalos=N\u00BA de intervalos
+No_mostrar=N\u00E3o mostrar a camada quando a escala
+No_mostrar_la_capa_cuando_la_escala=N\u00E3o mostrar a capa quando a escala
+No_reconocido=N\u00E3o reconhecido
+No_Shape=Esta camada n\u00E3o \u00E9 do tipo Shape
+no_visibles=N\u00E3o vis\u00EDvel
+nombre=Nome
+Nombre=Nome
+nombre_capa=Nome da camada
+nombre_cobertura=Nome da cobertura
+Nombre_que_se_le_dara_al_zoom=Nome para o zoom
+nombre_sesion=Nome da se\u00E7\u00E3o
+Nombres=Nomes
+normal=Normal
+north=Norte
+Nueva_tabla=Nova Tabela
+nuevo=Novo
+Nuevo_conjunto=Novo conjunto
+nuevo_proyecto=Novo projeto
+nuevo_tamano_fuente=Novo tamanho de fonte\:
+nuevo_tooltip=Criar um novo projeto
+num_bandas=N\u00FAmero de bandas
+N\u00FAm_intervalos=N\u00FAmero de Intervalos
+numero_incorrecto=N\u00FAmero incorrecto
+ok=Ok
+opacidad=Opacidade
+orientacion=Orienta\u00E7\u00E3o\:
+Origen_de_datos=Origem de dados
+Origen_de_Datos=Origem de Dados\:
+Otros=Outros
+owner=Propriet\u00E1rio
+parametros=Par\u00E2metros
+Parametros=Par\u00E2metros
+path=Caminho
+Perimetro=Per\u00EDmetro
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa com o valor de um determinado campo
+Personalizado=Personalizado
+Pies=P\u00E9s
+pixeles=pixels
+Plain=Plano
+png=Arquivos PNG
+poligono=Pol\u00EDgono
+poner_temas_a=Por os temas em...
+por_debajo_de=abaixo de\:
+por_encima_de=acima de\:
+Por_favor_active_el_tema=Por favor active o tema
+posicion_linea=Posi\u00E7\u00E3o da linha
+preparar_pagina=Preparar p\u00E1gina
+Preparar_pagina=Preparar p\u00E1gina
+presentacion=Apresenta\u00E7\u00E3o
+Previsualizacion=Previsualizar
+Previsualizacion_de_simbolo=Previsualiza\u00E7\u00E3o do s\u00EDmbolo
+propiedades=Propriedades
+Propiedades_de_la_Capa=Propriedades da camada
+propiedades_del_tema=Propriedades do tema
+Propiedades_del_Tema=Propriedades do tema
+Propiedades_escala_grafica=Propriedades da barra de escalas
+propiedades_grafico=Propriedades Gr\u00E1ficas
+propiedades_mapa=Propriedades de Mapa
+propiedades_marco_imagenes=Propriedades do espa\u00E7o da Figura
+propiedades_marco_leyenda=Propriedades do espa\u00E7o da legenda
+propiedades_marco_vista=Propriedades do espa\u00E7o da vis\u00E3o
+propiedades_raster=Propiedades do raster
+propiedades_sesion=Propriedades de Se\u00E7\u00E3o
+propiedades_tabla=Propriedades de Tabela
+propiedades_tema=Propriedades de camada
+Propiedades_texto=Propriedades de texto
+propiedades_vista=Propriedades de Vis\u00E3o
+prueba_conexion=Provar conex\u00E3o
+puerto=porta
+Pulgadas=Polegadas
+punto=Ponto
+quantile_intervals=Intervalos quartis
+quiere_continuar=Tem a certeza de que quere continuar?
+Quitar=Remover
+Quitar_capa=Remover camada
+quitar_enlaces=Remover hiperlinks
+Quitar_todos=Remover todos
+Quitar_Todos=Remover Todos
+quitar_uniones=Remover uni\u00F5es
+rango_de_escalas=Amplitude de escalas
+Rango_de_escalas=Ranking de Escalas
+Rasterfiles=Arquivos Raster
+realce=Realce
+recorte=recorte
+recorte_colas=Recorte de filas
+recorte_vista=Recortar para a vis\u00E3o
+recta=Reta
+rectangulo=Rect\u00E2ngulo
+recuento=Recontar
+Recuperar_leyenda=Carregar Estilo
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zoom
+refrescar=Actualizar
+registros=registros
+registros_seleccionados_total=Total de registos seleccionados
+rellenar_marco_vista=Preencher espa\u00E7o da vis\u00E3o
+relleno=Preencher\:
+renombrar=Renomear
+reproyectar_aviso=A proje\u00E7\u00E3o da camada n\u00E3o \u00E9 a mesma da proje\u00E7\u00E3o da vis\u00E3o.\nATEN\u00C7\u00C3O\: Isto pode gerar imprecis\u00E3o para algumas transforma\u00E7\u00F5es.\nPor Favor leia a documenta\u00E7\u00E3o
+reproyectar_pregunta=Voc\u00EA quer reprojetar?
+resolucion=Resolu\u00E7\u00E3o
+resolucion_resultado=Resolu\u00E7\u00E3o do resultado\:
+respuesta_error_servidor=N\u00E3o foi possivel obter a cobertura
+resto_valores=Resto de valores
+salir=Sair
+Salir=Sair
+salir_tooltip=Sair
+salvar_raster=Guardar como raster
+Sample=Exemplo
+Se_superponen_a=se sobrep\u00F5em a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... deletar registros de
+Sean_disjuntos_a=sejam disjuntos a
+Sean_iguales_a=sejam iguais a
+seleccion=Selec\u00E7\u00E3o
+seleccion_campos=Seleccione os campos
+seleccion_fuente=Sele\u00E7\u00E3o de fonte
+Seleccion_por_tema=Sele\u00E7\u00E3o por tema
+Seleccionar=Selecionar
+seleccionar_capas=Selecionar Camadas
+seleccionar_coberturas=Seleccionar Coberturas
+seleccionar_CRS=Seleccionar CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar as capas activas dos elementos que\:
+Seleccionar_del_conjunto=Selecionar do conjunto
+Seleccionar_fichero=Selecionar arquivo
+seleccionar_formato=Selecionar Formato
+seleccionar_parametros=Seleccionar os par\u00E2metros
+seleccionar_por_punto=Selecionar por ponto
+seleccionar_por_rectangulo=Selecioar por ret\u00E2ngulo
+seleccionar_tiempo=Seleccionar a posi\u00E7\u00E3o para o tempo
+seleccionar_todos=Selecionar todos
+seleccione_campo_enlace=Seleccione o campo a juntar
+seleccione_fecha=Selecionar data...
+seleccione_tabla=Selecciona a tabela
+seleccione_tabla_a_enlazar=Seleccione a tabela a juntar
+seleccione_tabla_origen=Seleccione a tabela de origem do join
+select_all=Seleccionar todos
+select_geom_field=Selecciona o campo que leva a geometria
+select_none=Eliminar todos
+select_unique_field=Seleccione o campo \u00FAnico
+selection_color=Cor de Sele\u00E7\u00E3o
+servidor=Servidor
+Servidor=Servidor
+servidor_wcs_no_responde=O servidor seleccionado n\u00E3o responde
+shape_seleccion=Exportar sele\u00E7\u00E3o.
+Shapefile=Shapefile
+Shapefiles=Shapefiles
+siempre=Sempre
+siguiente=Pr\u00F3ximo
+Siguiente=Pr\u00F3ximo
+Simbolo=S\u00EDmbolo
+S\u00EDmbolo=S\u00EDmbolo
+Simbolo_unico=S\u00EDmbolo \u00FAnico
+Simbolo_Unico=S\u00EDmbolo \u00FAnico
+Simbologia=Simbologia
+simple=Simples
+simplificar=Simplificar
+sin_realce=Sem Realce
+sin_titulo=Sem t\u00EDtulo
+sincronizar_color_borde_relleno=Sincronizar cor de borda e preenchimento\:
+Size=Tamanho
+sobre_la_barra=Sobre a barra
+Solo_para_capas_vectoriales=S\u00F3 para camadas vetoriais
+statistics=Estat\u00EDsticas
+Style=Estilo
+Subir_capa=Mover camada acima
+suma=Soma
+Superior=Acima
+Tabla=Tabela
+Tabla_de_Atributos=Tabela de Atributos
+Tabla_de_prueba=Testar Tabela
+tablas=Tabelas
+tamano=Tamanho\:
+tamano_metros=Tamanho em metros
+tamano_pagina=Tamanho da P\u00E1gina
+tamano_posicion=Tamanho e posi\u00E7\u00E3o
+tamanyo_borde=Tamanho do borde
+tamanyo_fuente=Tamanho de fonte
+tarea_en_progreso=Tarefa em progresso
+tema=Tema
+texto=Texto
+Tiempo=Tempo
+tipo_dato=Tipo de Dado
+tipo_de_intervalo=Tipo de intervalo
+Tipo_de_intervalos=Tipo de intevalos
+tipo_de_leyenda=Tipo de legenda
+Tipo_de_leyenda=Tipos de legenda
+Tipo_de_linea=Tipo de linha
+tipo_fichero_proyecto=Arquivos de Projeto gvSIG(*.gvsproj)
+tipo_leyenda=Arquivos de legenda(*.GVL)
+tipo_linea=Linha\:
+Tipo_no_reconocido=Tipo n\u00E3o reconhecido
+tipo_relleno=Preenchimento\:
+tipo_simbolo=Tipo de s\u00EDmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Gerenciador de projeto
+titulo_confirmar=Confirma\u00E7\u00E3o
+titulo_fframetext=T\u00EDtulo do campo de texto
+toda_la_tabla=Toda a tabela
+Toquen=toquem
+transparencia=Transpar\u00EAncia
+Transparencia=Transpar\u00EAncia
+Triangulo=Tri\u00E2ngulo
+Un_Layer=Seleciona uma camada
+unidades=Unidades\:
+Unidades=Unidades
+untitled=Sem t\u00EDtulo
+Usar_indice_espacial=Usar \u00EDndice espacial
+usar_marco=Usar marco
+usar_rango=Usa a amplitude
+usar_titulo=Usar t\u00EDtulo
+usuario=usuario
+utilizar_margenes_impresora=Utilizando m\u00E1rgens da impressora.
+vacia=Vazia
+Valor=Valor
+Valor_azul=Valor Azul
+Valor_Bandas=Valor Bandas
+valor_pixel=Valor do pixel
+Valor_rojo=Valor Vermelho
+Valor_verde=Valor Verde
+Valores=Valores
+Valores_unicos=Valores \u00FAnicos
+Valores_Unicos=Valores \u00DAnicos
+varianza=Varia\u00E7\u00E3o
+ventana_proyecto=Janela de projeto
+Ver=Ver
+ver_tabla_atributos=Ver tabela de atributos
+ver_tooltip=Ver janela de projeto
+vertical=Vertical
+visible=Vis\u00EDvel
+visibles=Vis\u00EDvel
+Vista=Vis\u00E3o
+vistas=Vis\u00F5es
+visualizacion=Visualiza\u00E7\u00E3o
+Visualizacion=Visualiza\u00E7\u00E3o
+visualizar_cuadricula=Visualizar Grade
+wcs_properties=Propriedades WCS
+WMS=WMS
+xmax=X m\u00E1xima
+xmin=X m\u00EDnima
+Yardas=Jardas
+ymax=Y m\u00E1xima
+ymin=Y m\u00EDnima
+Zoom=Zoom
+Zoom_Acercar=Zoom aproximar
+Zoom_al_Tema=Zoom para camada
+Zoom_Alejar=Zoom afastar
+Zoom_Completo=Zoom Completo
+Zoom_Completo_Vista=Zoom Completo na vis\u00E3o
+Zoom_Mas=Zoom Mais
+Zoom_Mas_Vista=Zoom Mais na vista
+Zoom_Menos=Zoom Menos
+Zoom_Menos_Vista=Zoom Menos na vis\u00E3o
+Zoom_pixel=Zoom \u00E0 resolu\u00E7\u00E3o de raster
+Zoom_Previo=Zoom Anterior
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom para sele\u00E7\u00E3o
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_cs.properties	(revision 42196)
@@ -0,0 +1,629 @@
+#text_cs.properties
+__espacio_vertical=Vertik\u00E1ln\u00ED odsazov\u00E1n\u00ED\:
+__lineas=\u0159\u00E1dky
+__proyeccion_actual=Aktu\u00E1ln\u00ED projekce\:
+__redimensionar_texto_escala=Zm\u011Bna velikosti textu dle zobrazovac\u00EDho m\u011B\u0159\u00EDtka
+__seleccion_de_fuente=V\u00FDb\u011Br p\u00EDsma
+_(Etiquetas_estandar)=(Standardn\u00ED popisy)
+_(Intervalos)=(Intervaly)
+_(Simbolo_unico)=(unik\u00E1tn\u00ED symboly)
+_(Valores_unicos)=(unik\u00E1tn\u00ED hodnoty)
+(escala_maxima)=(maxim\u00E1ln\u00ED m\u011B\u0159\u00EDtko)
+(escala_minima)=(minim\u00E1ln\u00ED m\u011B\u0159\u00EDtko)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+abajo=Dol\u016F
+abrir=Otev\u0159\u00EDt
+Abrir_Imagen=Otev\u0159\u00EDt obr\u00E1zek
+abrir_plantilla=Otev\u0159\u00EDt \u0161ablonu
+abrir_proyecto=Otev\u0159\u00EDt projekt
+abrir_tooltip=Otev\u0159\u00EDt existuj\u00EDc\u00ED projekt
+Abrir_una_capa=Otev\u0159\u00EDt vrstvu
+Accion_Predefinida=P\u0159eddefinovan\u00E1 akce
+aceptar=OK
+Aceptar=OK
+acerca_de=O programu...
+activar_regla=Aktivace prav\u00EDtka
+activos=Aktivn\u00ED
+adjust_transparency=Nastaven\u00ED pr\u016Fhlednosti
+agrupar=Seskupit
+agrupar_capas=Seskupen\u00ED vrstev
+agrupar_graficos=Seskupen\u00ED prvk\u016F
+agrupar_linea=Seskupen\u00ED lini\u00ED s grafick\u00FDmi prvky
+Ajustar_cobertura_wcs=Nastaven\u00ED WCS
+Ajustar_transparencia=Nastavit pr\u016Fhlednost
+ajustes_linea_grafica=Nastaven\u00ED lini\u00ED
+Al_leer_la_leyenda=na\u010D\u00EDt\u00E1n\u00ED legendy
+alerta=Upozorn\u011Bn\u00ED
+alias=Alias
+alineamiento=Zarovn\u00E1n\u00ED\:
+alinear=Zarovn\u00E1n\u00ED
+alinear_graficos=Zarovnat prvek
+alta=Vysok\u00FD
+alto=V\u00FD\u0161ka
+altura=V\u00FD\u0161ka\:
+Altura_fija_de_texto=Pevn\u00E1 v\u00FD\u0161ka textu
+ambito=Rozsah
+Anadir=P\u0159idat
+Anadir_al_conjunto=P\u0159idat do mno\u017Einy
+Anadir_capa=P\u0159idat vrstvu
+Anadir_Capa=P\u0159idat Vrstvu
+Anadir_todos=P\u0159idat v\u0161e
+ancho=\u0160\u00ED\u0159ka
+ancho_alto=\u0160\u00ED\u0159ka X V\u00FD\u0161ka
+Ancho_Contorno=\u0160\u00ED\u0159ka ohrani\u010Den\u00ED
+Ancho_de_linea=\u0160\u00ED\u0159ka linie
+anchura=\u0160\u00ED\u0159ka\:
+angulo_rotacion=Uhel nato\u010Den\u00ED\:
+anterior=P\u0159edchoz\u00ED
+Anterior=P\u0159edchoz\u00ED
+Aplicar=Pou\u017E\u00EDt
+Archivo=Soubor
+Archivos_de_Disco=Soubor na disku
+area_trabajo=Pracovn\u00ED oblast
+arriba=Nahoru
+ascending_order=Vzestupn\u00E9 po\u0159ad\u00ED
+ascending_order_tooltip=Se\u0159adit podle zvolen\u00E9 polo\u017Eky vzestupn\u011B
+Atributo=Atribut
+automatico=Automaticky
+Ayuda=N\u00E1pov\u011Bda
+back=P\u0159edchoz\u00ED
+Back=P\u0159edchoz\u00ED
+background_color=Barva pozad\u00ED
+baja=Spodn\u00ED
+Bajar_capa=P\u0159esun vrstvy dol\u016F
+bandas=Okraje
+bands=Okraje
+barra=Sloupec\:
+base_datos=Datab\u00E1ze
+bd=db
+bmp=BMP soubory
+Bold=Tu\u010Dn\u00FD
+borra_seleccion=Vymazat vybran\u00E9
+borrador=Koncept
+borrar=Smazat/Zru\u0161it
+Calcular_intervalos=V\u00FDpo\u010Det intervalu
+calidad=Kvalita
+Cambio_Color=Zm\u011Bna barvy
+Cambio_de_estilo=Zm\u011Bna stylu
+Cambio_Estilo=Zm\u011Bna Stylu
+cambio_nombre=Zm\u011Bna n\u00E1zvu
+Cambios_de_estilo=Zm\u011Bny stylu
+campo=Pole
+Campo=Pole
+campo_altura_texto=V\u00FD\u0161ka textov\u00E9ho pole\:
+Campo_clasifica=Kl\u00ED\u010Dov\u00E1 polo\u017Eka
+Campo_de_clasificacion=Kl\u00ED\u010Dov\u00E1 polo\u017Eka
+campo_de_documentos_asociados=P\u0159\u00EDslu\u0161n\u00E9 dokumenty
+Campo_de_etiquetado=Popisn\u00E9 pole
+Campos=Pole
+cancel=Zru\u0161it
+Cancel=Zru\u0161it
+cancelar=Zru\u0161it
+Cancelar=Zru\u0161it
+Capa=Vrstva
+Capas=Vrstvy
+Capas_del_localizador=Lokalizace vrstev
+capaWMS=WMS vrstva
+cargar_leyenda=Na\u010Dten\u00ED legendy
+cartografico=Kartografick\u00E9
+causa_error_desconocida=Neo\u010Dek\u00E1van\u00E1 chyba na stran\u011B serveru
+Centimetros=Centimetry
+cerrar=Zav\u0159\u00EDt
+Cerrar=Zav\u0159\u00EDt
+circulo=Kru\u017Enice
+Circulo=Kru\u017Enice
+clave=K\u00F3d
+Coberturas=P\u0159ekryvy
+coincidir_tamano=Shoda velikosti\:
+colocar_a_margenes=Um\u00EDstit s referenc\u00ED k okraji
+colocar_alrededor_seleccionados=Um\u00EDstit kolem vybran\u00E9 polo\u017Eky
+colocar_alrededor_todos=Um\u00EDstit kolem v\u0161ech polo\u017Eek
+colocar_delante=P\u0159en\u00E9st dop\u0159edu
+colocar_detras=P\u0159en\u00E9st do pozad\u00ED
+color=Barva\:
+Color_Contorno=Barva ohrani\u010Den\u00ED
+Color_de_la_Linea=Barva linie
+Color_de_Relleno=Barva v\u00FDpln\u011B\:
+Color_final=Koncov\u00E1 barva\:
+Color_inicial=Po\u010D\u00E1te\u010Dn\u00ED barva\:
+Color_inicio=Po\u010D\u00E1te\u010Dn\u00ED barva
+color_texto=Barva textu\:
+comentarios=Koment\u00E1\u0159e
+conectar=Spojit
+conexion_correcta=Opravit spojen\u00ED
+configuracion_andami_tooltip=Konfigurace andami
+configurar=Konfigurace
+configurar_localizador=Konfikurace mapy lok\u00E1toru
+Configurar_localizador=Konfigurace lok\u00E1toru
+confirmar_borrar=Prvek bude odstran\u011Bn. Jste si jist\u00FD?
+conservar_escala_visualizacion=Nastaven\u00ED zobrazovac\u00EDho m\u011B\u0159\u00EDtka
+consulta=Query
+Contengan=obsahuje
+coor_geograficas=Geografick\u00E9 sou\u0159adnice
+creation_date=Datum vytvo\u0159en\u00ED
+Crucen_con=p\u0159ek\u0159\u00ED\u017Een\u00FD s
+Cruz=P\u0159ek\u0159\u00ED\u017Een\u00ED
+Cuadrado=\u010Ctverec
+cuando_activo=Kdy\u017E je aktivn\u00ED
+Dado_un_campo_de_atributos=Zadan\u00FD atribut
+debe_estar_activada=Mus\u00ED b\u00FDt aktivn\u00ED
+Derecha=Prav\u00E1 strana
+Derecho=Prav\u00FD
+desagrupar=Odskupit
+desagrupar_graficos=Odskupit prvky
+descending_order=Sestupn\u00E9 po\u0159ad\u00ED
+descending_order_tooltip=Se\u0159adit podle zvolen\u00E9 polo\u017Eky sestupn\u011B
+desconectar=Odpojit
+descripcion=Popis
+Descripcion=Popis
+desde_arriba=Shora\:
+desde_izquierda=Z leva\:
+Desplazamiento=P\u0159em\u00EDst\u011Bn\u00ED
+desviacion_tipica=Standardn\u00ED odchylka
+detalles=Podrobnosti
+Detalles=Podrobnosti
+DGNFiles=DGN soubory
+distance_units=Jednotky vzd\u00E1lenosti
+distribuir=Rozm\u00EDstit\:
+divisiones_izquierda=D\u011Blen\u00ED doleva
+documentos_existentes=Existuj\u00EDc\u00ED dokumenty
+driver=ovlada\u010D
+drivers=Ovlada\u010De
+Dxffiles=DXF soubory
+editable=Editovateln\u00FD
+Editar_leyenda=Upravit styl
+editar_propiedades=Nahoru
+el_numero_maximo_de_intervalos_para_este_campo_es=Maxim\u00E1ln\u00ED po\u010Det interval\u016F pro tuto polo\u017Eku je
+Elegir_Color=Select Barva
+Elegir_Fuente=Vybrat p\u00EDsmo
+Elementos_seleccionados_de_la_capa=vybran\u00E9 polo\u017Eky z vrstvy
+Eliminar=Smazat
+eliminar_capa=Smazat vrstvu
+eliminar_extremos=Odstranit hrany
+en_el_mapa=Ve vrstv\u011B\:
+En_metros=V metrech
+En_pixels=V pixelech
+Encuadre=Zoom
+Encuadre_Vista=Zobrazit posunova\u010D
+enlace_vivo=Aktivn\u00ED odkaz
+Enlazar_a_fichero_de_texto=Odkaz na textov\u00E9 soubory
+Enlazar_a_ficheros_de_imagen=Odkaz na soubory s obr\u00E1zky
+equal_intervals=Shodn\u00E9 intervaly
+Error_abriendo_el_fichero=Chyba p\u0159i otev\u00EDr\u00E1n\u00ED souboru
+Error_accediendo_a_los_datos=Chyba p\u0159i na\u010D\u00EDt\u00E1n\u00ED dat
+error_comunicacion_servidor=Chyba p\u0159i p\u0159ipojov\u00E1n\u00ED k serveru
+error_escritura=Nelze zapisovat do souboru
+Error_guardando_la_leyenda=Chyba p\u0159i ukl\u00E1d\u00E1n\u00ED legendy
+error_lectura=Nelze \u010D\u00EDst soubor
+escala=M\u011B\u0159\u00EDtko
+Escala=M\u011B\u0159\u00EDtko
+escala_maxima=maxim\u00EDln\u00ED m\u011B\u0159\u00EDtko
+Escala_Maxima=Maxim\u00E1ln\u00ED M\u011B\u0159\u00EDtko
+escala_minima=minim\u00E1ln\u00ED m\u011B\u0159\u00EDtko
+Escala_Minima=Minim\u00E1ln\u00ED M\u011B\u0159\u00EDtko
+escala_usuario=M\u011B\u0159\u00EDtko specifikov\u00E1no u\u017Eivatelem
+espaciado_horizontal=Velikost horizont\u00E1ln\u00ED m\u0159\u00ED\u017Eky
+espaciado_vertical=Velikost vertik\u00E1ln\u00ED m\u0159\u00ED\u017Eky
+espacio=Mezera\:
+espere=Pros\u00EDm \u010Dekejte
+estadisticas=Statistika
+este_por_debajo_de_=B\u00FDt pod
+este_por_encima_de=B\u00FDt nad
+Esten_contenidos_en=obsa\u017Een\u00FD v
+Estilo=Styl\:
+Etiqueta=Popis
+Etiquetado=Popisov\u00E1n\u00ED
+Etiquetados=Popisov\u00E1n\u00ED
+etiquetas=Popisky\:
+Etiquetas_estandar=Standardn\u00ED popisky
+Examinar=Proch\u00E1zet
+exportar=Exportovat
+exportar_a=Exportovat jako...
+exportar_pdf=Export do pdf
+extension=Roz\u0161\u00ED\u0159en\u00ED
+Extent=Oblast
+extents_no_coincidentes=Zvolen\u00E1 hranice nesouhlas\u00ED s p\u016Fvodn\u00EDm obr\u00E1zkem.
+fallo_crear_conexion=Chyba spojen\u00ED
+fallo_crear_pool=Chyba vytvo\u0159en\u00ED mno\u017Einy p\u0159ipojen\u00ED
+fallo_obtener_conexion_existente=Nelze z\u00EDskat vytvo\u0159en\u00E9 spojen\u00ED
+fallo_obtener_tablas=Nelze z\u00EDskat tabulky z datab\u00E1ze
+fallo_realizar_consulta=Nelze vytvo\u0159it dotaz
+fallo_registrar_conexion=Nelze zaregistrovat spojen\u00ED
+Fichero=Soubor
+fichero_existe=Zvolen\u00FD soubor ji\u017E existuje jako vrstva
+fichero_incorrecto=Chybn\u00FD soubor
+filtro=Filtr
+finalizar=Ukon\u010Dit
+finish=Konec
+Font=P\u00EDsmo
+formato=Form\u00E1t
+Formato=Dorm\u00E1t
+formato_incorrecto=Chybn\u00FD form\u00E1t
+fuente=P\u00EDsmo
+Fuente=P\u00EDsmo
+General=Obecn\u00FD
+Generar_Intervalos=Generovat intervaly
+gestion_encuadre=Spr\u00E1va z\u00E1znamu pracovn\u00EDch oblast\u00ED
+grados=stupn\u011B
+Graficos=Prvky
+Grosor_de_linea=\u0160\u00ED\u0159ka \u010D\u00E1ry
+grosor_linea=\u0161\u00ED\u0159ka \u010D\u00E1ry\:
+guardado=Ulo\u017Een do
+Guardar=Ulo\u017Eit
+guardar_cambios=Ulo\u017Eit zm\u011Bny?
+guardar_clave=Ulo\u017Eit k\u00F3d
+guardar_como=Ulo\u017Eit jako...
+guardar_como_plantilla=Ulo\u017Eit jako \u0161ablonu
+Guardar_el_zoom_actual=Ulo\u017Eit aktu\u00E1ln\u00ED v\u00FD\u0159ez
+guardar_leyenda=Ulo\u017Eit legendu
+Guardar_leyenda=Ulo\u017Eit styl
+guardar_proyecto=Ulo\u017Eit projekt
+guardar_tooltip=Ulo\u017Eit zm\u011Bny do projektu
+Habilitar_etiquetado=Povolit popisov\u00E1n\u00ED
+hasta=do
+Herramientas=N\u00E1stroje
+Herramientas_vista=Zobrazit n\u00E1stroje
+Hiperenlace=Hyperlink
+horizontal=Horizont\u00E1ln\u00ED
+host=host
+hostname=Host
+Identificar_Resultados=Identifikovat v\u00FDsledky
+Igual_que_la_impresora=Stejn\u00E9 jako tisk\u00E1rna
+igual_todos_lados=Stejn\u00FD posun pro v\u0161echny strany
+imagen=Obr\u00E1zek
+Imagen=Obr\u00E1zek
+importar=Import
+importar_extent=Import aktu\u00E1ln\u00ED viditeln\u00E9 oblasti
+Imprimir=Tisk
+Inferior=Ni\u017E\u0161\u00ED
+info=Informace
+infobreak=Zobrazuje elementy vrstvy za pomoc\u00ED rozsahu barev.
+infodef=Zobrazuje elementy vrstvy stejn\u00FDm symbolem.
+informacion=Informace
+Informacion=Informace
+infovalue=Zobrazuje elemety vrstvy s jedine\u010Dn\u00FDm symbolem pro ka\u017Edou hodnotu.
+Inicializando=Initializace
+Insertar=Vlo\u017Eit
+insertar_circulo=Vlo\u017Eit kru\u017Enici
+insertar_escala=Vlo\u017Eit m\u011B\u0159\u00EDtko
+insertar_imagen=Vlo\u017Eit obr\u00E1zek
+insertar_leyenda=Vlo\u017Eit legendu
+insertar_linea=Vlo\u017Eit linii
+insertar_norte=Vlo\u017Eit sever
+insertar_poligono=Vlo\u017Eit polygon
+insertar_punto=Vlo\u017Eit bod
+insertar_recta=Vlo\u017Eit p\u0159\u00EDmku
+insertar_rectangulo=Vlo\u017Eit obd\u00E9ln\u00EDk
+insertar_texto=Vlo\u017Eit text
+insertar_vista=Vlo\u017Eit pohled
+Intersecten_con=protnut\u00E9 s
+Intervalo=Interval
+Intervalos=Intervaly
+Intervalos_equidistantes=Stejn\u00E9 intervaly
+Intervalos_por_rupturas_naturales=Intervaly dle p\u0159irozen\u00FDch hranic.
+introduce_nombre=Zadat nov\u00FD n\u00E1zev.
+Italic=Kurz\u00EDva
+Izquierda=Vlevo
+Izquierdo=Vlevo
+join=spojit
+jpg=JPEG soubor
+kilometros=Kilometr\u016F
+Kilometros=Kilometr\u016F
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Pou\u017E\u00EDv\u00E1te stejnou polo\u017Eku bu\u010F v legend\u011B nebo popisc\u00EDch. Pros\u00EDm zm\u011B\u0148te \nlegendu p\u0159ed odebr\u00E1n\u00EDm spojen\u00ED.
+Leyenda_Por_Defecto=Implicitn\u00ED legenda
+linea=Linie
+Linea=Linie
+linea_grafica=Linie
+lineal_directo=P\u0159\u00EDmo Line\u00E1rn\u00ED
+linf_der=dole vpravo X
+link=Propojit
+Link=Odkaz
+Localizador_por_atributo=Vyhledat podle atributu
+lppp=bnp
+lsup_izq=Naho\u0159e vlevo X
+malla_activada=Aktivovat grid
+mantener_intervalo=Zachovat interval
+map_units=Mapov\u00E9 jednotky
+Mapa=Mapa
+mapas=Mapy
+marco=R\u00E1mec
+marco_vista=Framework pro zobrazen\u00ED
+margenes=Okraje\:
+Mas_100=Po\u010Det hodnot je vy\u0161\u0161\u00ED ne\u017E 100 a neumo\u017E\u0148\u00F2uj\u00ED informovat
+mas_de_100_simbolos=V\u00EDce ne\u017E 100 symbol\u016F obvykle nevn\u00E1\u0161\u00ED do mapy \u017E\u00E1dn\u00E9 informace
+maximo=Maximum
+media=V\u00FDznam
+medir_area=M\u011B\u0159it plochy
+medir_distancias=M\u011B\u0159it vzd\u00E1lenosti
+metros=Metry
+Metros=Metry
+Milimetros=Milimetry
+Millas=M\u00EDle
+minimo=Minimum
+modification_date=Datum zm\u011Bny
+mosaico_tooltip=Mozaika
+Mostrar_Contorno=Zobrazit obrysov\u00E9 \u010D\u00E1ry
+mostrar_descripcion=Zobrazen\u00ED popisu
+Mostrar_siempre=Zobrazit v\u017Edy
+mostrar_unidades=Zobrazen\u00ED jednotek
+Muestra_atributos=Zobrazit atributy vybran\u00FDch vrstev.
+muestra_consola_tooltip=Zobraz v konzoli
+Muestra_los_atributos_de_las_capas_seleccionadas=Zobrazit atributy vybran\u00FDch vrstev
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zobraz prvky vrstvy, kter\u00E9 maj\u00ED jedine\u010Dnou hodnotu symbolu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zobraz prvky vrstvy, kter\u00E9 maj\u00ED rozsah barev podle hodnot atribut\u016F
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zobraz v\u0161echny prvky vrstvy, kter\u00E9 maj\u00ED stejn\u00FD symbol
+natural_intervals=P\u0159irozen\u00E9 intervaly
+navegacion=Navigace
+navegacion_vista=Navigace v pohledu
+necesita_un_tema_activo=Aktivn\u00ED sch\u00E9ma je nezbytn\u00E9
+necesita_un_tema_vectorial_activo=Aktivn\u00ED vektorov\u00E9 sch\u00E9ma je nezbytn\u00E9
+next=Dal\u0161\u00ED
+Next=Dal\u0161\u00ED
+ninguna_impresora_configurada=Nen\u00ED nastavena \u017E\u00E1dn\u00E1 tisk\u00E1rna
+Nivel_de_transparencia=\u00DArov\u011B\u00F2 pr\u016Fhlednosti
+no_activos=Neaktivn\u00ED
+No_de_intervalos=Po\u010Det interval\u016F
+No_mostrar=Nezobrazit vrstvu v p\u0159\u00EDpad\u011B m\u011B\u0159\u00EDtka
+No_mostrar_la_capa_cuando_la_escala=ezobrazovat vrstvu, kdy\u017E je m\u011B\u0159\u00EDtko
+No_reconocido=Nerozpozn\u00E1n
+No_Shape=Tato vrstva nen\u00ED typu Shape
+no_visibles=Nevidiln\u00E9
+nombre=Jm\u00E9no
+Nombre=Jm\u00E9no
+nombre_capa=N\u00E1zev vrstvy
+nombre_cobertura=N\u00E1zev pokryt\u00ED
+Nombre_que_se_le_dara_al_zoom=N\u00E1zev pro zoom
+nombre_sesion=N\u00E1zev sezen\u00ED
+Nombres=N\u00E1zvy
+normal=Normal
+north=Sever
+Nueva_tabla=Nov\u00E1 tabulka
+nuevo=Nov\u00FD
+Nuevo_conjunto=Nov\u00E1 skupina
+nuevo_proyecto=Nov\u00FD projekt
+nuevo_tamano_fuente=Nov\u00E1 velikost p\u00EDsma\:
+nuevo_tooltip=Vytvo\u0159it nov\u00FD projekt
+num_bandas=Okrajov\u00E9 hodnoty
+N\u00FAm_intervalos=Po\u010Det interval\u016F
+numero_incorrecto=Neplatn\u00E1 hodnota
+ok=Budi\u017E
+opacidad=Stupe\u0148 pr\u016Fsvitnosti
+orientacion=Orientace\:
+Origen_de_datos=P\u016Fvod dat
+Origen_de_Datos=Vznik dat\:
+Otros=Jin\u00E9
+owner=Vlastn\u00EDk
+parametros=Parametry
+Parametros=Parametry
+path=Cesta
+Perimetro=Obvod
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=mo\u017En\u00ED nastavit popisek mapov\u00FDch prvk\u016F hodnotou jednotliv\u00FDch pol\u00ED
+Personalizado=U\u017Eivatelsky
+Pies=Stopy
+pixeles=pixely
+Plain=Plain
+png=PNG soubory
+poligono=Polygon
+poner_temas_a=Nastavit t\u00E9ma na ...
+por_debajo_de=pod\:
+por_encima_de=nad\:
+Por_favor_active_el_tema=Pros\u00EDm, nejprve aktivujte t\u00E9ma
+posicion_linea=Pozice linie
+preparar_pagina=P\u0159ipravit str\u00E1nku
+Preparar_pagina=P\u0159ipravit str\u00E1nku
+presentacion=Prezentace
+Previsualizacion=N\u00E1hled
+Previsualizacion_de_simbolo=N\u00E1hled symbol\u016F
+propiedades=Vlastnosti
+Propiedades_de_la_Capa=Vlastnosti vrstvy
+propiedades_del_tema=Atributy sch\u00E9matu
+Propiedades_del_Tema=Vlastnosti t\u00E9matu
+Propiedades_escala_grafica=Vlastnosti m\u011B\u0159\u00EDtka
+propiedades_grafico=Nastaven\u00ED grafiky
+propiedades_mapa=Nastaven\u00ED mapy
+propiedades_marco_imagenes=Vlastnosti obrazov\u00E9ho r\u00E1mu
+propiedades_marco_leyenda=Vlastnosti r\u00E1mu legendy
+propiedades_marco_vista=Vlastnosti r\u00E1mu pohledu
+propiedades_raster=Vlastnosti rastru
+propiedades_sesion=Vlastnosti sezen\u00ED
+propiedades_tabla=Vlastnosti tabulky
+propiedades_tema=Vlastnosti vrstvy
+Propiedades_texto=Vlastnosti textu
+propiedades_vista=Vlastnosti pohledu
+prueba_conexion=Test spojen\u00ED
+puerto=port
+Pulgadas=Palce
+punto=Bod
+quantile_intervals=Interval kvantilu
+quiere_continuar=Chcete pokra\u010Dovat?
+Quitar=Odstranit
+Quitar_capa=Odstranit vrstvu
+quitar_enlaces=Odebrat spojen\u00ED
+Quitar_todos=Odstranit v\u0161e
+Quitar_Todos=Odstranit v\u0161e
+quitar_uniones=odebrat spojen\u00ED
+rango_de_escalas=Rozsah m\u011B\u0159\u00EDtka
+Rango_de_escalas=Velikost m\u011B\u0159\u00EDtka
+Rasterfiles=Rastrov\u00E9 soubory
+realce=vylep\u0161en\u00ED
+recorte=o\u0159ez\u00E1n\u00ED
+recorte_colas=O\u0159ez fronty
+recorte_vista=Vy\u0159\u00EDznout dle pohledu
+recta=P\u0159\u00EDm\u00E1 linie
+rectangulo=Obd\u00E9ln\u00EDk
+recuento=p\u0159epo\u010Det
+Recuperar_leyenda=Nahr\u00E1t legendu
+Recuperar_y_eliminar_otros_zoom=Obnovit a zru\u0161it p\u0159ibl\u00ED\u017Een\u00ED
+refrescar=Obnovit
+registros=z\u00E1znamy
+registros_seleccionados_total=Celkem zvolen\u00FDch z\u00E1znam\u016F
+rellenar_marco_vista=Zaplnit r\u00E1m pohledu
+relleno=Zaplnit\:
+renombrar=P\u0159ejmenovat
+reproyectar_aviso=Projekce vrstvy se neshoduje s projekc\u00ED pohledu.\nUpozorn\u011Bn\u00ED\: N\u011Bkter\u00E9 transformace mohou b\u00FDt nep\u0159esn\u00E9.\nPros\u00EDm prostudujte dokumentaci
+reproyectar_pregunta=Chcete p\u0159ev\u00E9st projekci?
+resolucion=Rozli\u0161en\u00ED
+resolucion_resultado=Rozli\u0161en\u00ED v\u00FDsledku\:
+respuesta_error_servidor=Nelze z\u00EDskat p\u0159ekryv
+resto_valores=Ostatn\u00ED hodnoty
+salir=Konec
+Salir=Konec
+salir_tooltip=Konec
+salvar_raster=Ulo\u017Eit jako rastr
+Sample=Vzor
+Se_superponen_a=p\u0159es
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... smazat registry z
+Sean_disjuntos_a=rozpojit jako
+Sean_iguales_a=stejn\u00E9 jako
+seleccion=V\u00FDb\u011Br
+seleccion_campos=V\u00FDb\u011Br polo\u017Eek
+seleccion_fuente=Vybrat font
+Seleccion_por_tema=Vybrat t\u00E9ma
+Seleccionar=Vybrat
+seleccionar_capas=Vybrat vrstvu
+seleccionar_coberturas=Vybrat p\u0159ekryvy
+seleccionar_CRS=Vybrat CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Vybrat polo\u017Eky z aktivn\u00EDch vrstev kter\u00E9 jsou\:
+Seleccionar_del_conjunto=Vybrat ze sady
+Seleccionar_fichero=Vybrat soubor
+seleccionar_formato=Vybrat form\u00E1t
+seleccionar_parametros=Vybrat parametry
+seleccionar_por_punto=Vybrat po bodech
+seleccionar_por_rectangulo=Vybrat obd\u00E9ln\u00EDkem
+seleccionar_tiempo=Nastavit \u010Das
+seleccionar_todos=Vybrat v\u0161e
+seleccione_campo_enlace=Zvolte propojovac\u00ED polo\u017Eku
+seleccione_fecha=Vybrat datum...
+seleccione_tabla=V\u00FDb\u011Br tabulky
+seleccione_tabla_a_enlazar=Zvolte tabulku k propojen\u00ED
+seleccione_tabla_origen=Zvolte p\u016Fvodn\u00ED tabulku spojen\u00ED
+select_all=Vyber v\u0161e
+select_geom_field=Vyber polo\u017Eku s geometri\u00ED
+select_none=Odstra\u0148 v\u0161e
+select_unique_field=Vyber jedine\u010Dnou polo\u017Eku
+selection_color=Vybrat barvu
+servidor=Server
+Servidor=Server
+servidor_wcs_no_responde=Po\u017Eadovan\u00FD server neodpov\u00EDd\u00E1
+shape_seleccion=Exportovat v\u00FDb\u011Br
+Shapefile=Shapefile
+Shapefiles=Shapefiles
+siempre=V\u017Edy
+siguiente=Dal\u0161\u00ED
+Siguiente=Dal\u0161\u00ED
+Simbolo=Symbol
+S\u00EDmbolo=Symbol
+Simbolo_unico=Jedine\u010Dn\u00FD symbol
+Simbolo_Unico=Jedine\u010Dn\u00FD symbol
+Simbologia=Symboly
+simple=Prost\u00FD
+simplificar=Zjednodu\u0161it
+sin_realce=\u017D\u00E1dn\u00E9 vylep\u0161en\u00ED
+sin_titulo=Nepojmenovan\u00FD
+sincronizar_color_borde_relleno=Sjednotit barvu obrysu a v\u00FDpln\u011B\:
+Size=Velikost
+sobre_la_barra=na sloupci s m\u011B\u0159\u00EDtkem
+Solo_para_capas_vectoriales=Jen pro vektory
+statistics=Statistika
+Style=Styl
+Subir_capa=P\u0159esunout vrstvu v\u00FD\u0161e
+suma=Sou\u010Det
+Superior=Vy\u0161\u0161\u00ED
+Tabla=Tabulka
+Tabla_de_Atributos=Tabulka atribut\u016F
+Tabla_de_prueba=Testovac\u00ED tabulka
+tablas=Tabulky
+tamano=Velikost\:
+tamano_metros=Velikost v metrech
+tamano_pagina=Velikost str\u00E1nky
+tamano_posicion=Velikost a um\u00EDst\u011Bn\u00ED
+tamanyo_borde=Velikost okraje
+tamanyo_fuente=Velikost p\u00EDsma
+tarea_en_progreso=B\u011B\u017E\u00EDc\u00ED proces
+tema=Vrstva
+texto=Text
+Tiempo=\u010Cas
+tipo_dato=Datov\u00FD typ
+tipo_de_intervalo=Druh intervalu
+Tipo_de_intervalos=Druh intervalu
+tipo_de_leyenda=Druh legendy
+Tipo_de_leyenda=Druh legendy
+Tipo_de_linea=Druh linie
+tipo_fichero_proyecto=Soubor projektu gvSIG(*.GVP)
+tipo_leyenda=Soubor legendy (*.GVL)
+tipo_linea=Druh obrysu\:
+Tipo_no_reconocido=Nezn\u00E1m\u00FD druh
+tipo_relleno=V\u00FDpl\u0148\:
+tipo_simbolo=Druh symbolu\:
+tipos_de_documentos=Druhy dokument\u016F
+titulo=Spr\u00E1vce projektu
+titulo_confirmar=Potvrzen\u00ED
+titulo_fframetext=N\u00E1zev textov\u00E9ho pole
+toda_la_tabla=cel\u00E1 tabulka
+Toquen=dot\u00FDkaj\u00EDc\u00ED se s
+transparencia=Pr\u016Fhlednost
+Transparencia=Pr\u016Fhlednost
+Triangulo=Troj\u016Fheln\u00EDk
+Un_Layer=Vyberte alespo\u00F2 jednu vrstvu.
+unidades=Jednotky\:
+Unidades=Jednotky\:
+untitled=Nepojmenovan\u00FD
+Usar_indice_espacial=Pou\u017E\u00EDt prostorov\u00FD index
+usar_marco=Pou\u017E\u00EDt r\u00E1mec
+usar_rango=Pou\u017Eit\u00FD rozsah
+usar_titulo=Pou\u017E\u00EDt n\u00E1zev
+usuario=u\u017Eivatel
+utilizar_margenes_impresora=Pou\u017E\u00EDt okraje tisk\u00E1rny
+vacia=Pr\u00E1zdn\u00FD
+Valor=Hodnota
+Valor_azul=Hodnota modr\u00E9
+Valor_Bandas=Velikost okraje
+valor_pixel=hodnota pixelu
+Valor_rojo=Hodnota \u010Derven\u00E9
+Valor_verde=Hodnota zelen\u00E9
+Valores=Hodnoty
+Valores_unicos=Jednoduch\u00E9 hodnoty
+Valores_Unicos=Jedine\u010Dn\u00E9 hodnoty
+varianza=Odchylka
+ventana_proyecto=Okno projektu
+Ver=Zobrazit
+ver_tabla_atributos=Zkontrolujte tabulku atribut\u016F
+ver_tooltip=Uk\u00E1zat okno projektu
+vertical=Vertik\u00E1ln\u00ED
+visible=Viditeln\u00FD
+visibles=Viditeln\u00FD
+Vista=Pohled
+vistas=Pohledy
+visualizacion=Zobrazit
+Visualizacion=Zobrazit
+visualizar_cuadricula=Zobrazit grid
+wcs_properties=WCS vlastnosti
+WMS=WMS
+xmax=maximum X
+xmin=minimum X
+Yardas=Yardy
+ymax=maximum Y
+ymin=minimum Y
+Zoom=Zoom
+Zoom_Acercar=P\u0159ibl\u00ED\u017Eit
+Zoom_al_Tema=Zoom na vrstvu
+Zoom_Alejar=Odd\u00E1lit
+Zoom_Completo=Full Extent
+Zoom_Completo_Vista=Zobrazit r\u00E1m ve Full Extent
+Zoom_Mas=Zoom In
+Zoom_Mas_Vista=Zoom In v r\u00E1mu pohledu
+Zoom_Menos=Zoom Out
+Zoom_Menos_Vista=Zoom Out v r\u00E1mu pohledu
+Zoom_pixel=Zoom na rozli\u0161en\u00ED rastru
+Zoom_Previo=P\u0159edchoz\u00ED Zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom na v\u00FDb\u011Br
+zooms=P\u0159ibl\u00ED\u017Een\u00ED

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/config.xml	(revision 42196)
@@ -0,0 +1,567 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib"/>
+	<resourceBundle name="text"/>
+	<label-set class-name="org.gvsig.app.gui.View">
+		<label id="1" size="45"/>
+		<label id="2" size="120"/>
+		<label id="3" size="120"/>
+		<label id="4" size="120"/>
+		<label id="5" size="130"/>
+		<label id="6" size="95"/>
+		<label id="7" size="85"/>
+	</label-set>
+	<label-set class-name="org.gvsig.app.gui.layout.Layout">
+		<label id="1" size="80"/>
+		<label id="2" size="180"/>
+		<label id="3" size="180"/>
+		<label id="4" size="50"/>
+		<label id="5" size="50"/>
+	</label-set>
+	<extensions>
+		<extension class-name="com.iver.cit.gvsig.InitialWarningExtension"
+			description="Initial warning message"
+			active="false"
+			priority="1">
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.ProjectExtension"
+			description="Extensi�n encargada de gestionar los proyectos."
+			active="true"
+			priority="10">
+			<menu text="Archivo/nuevo_proyecto"
+				key="n" mnemonic="n"
+				tooltip="nuevo_tooltip"
+				action-command="NUEVO" icon="images/new.png"
+				position="-1"/>
+			<menu text="Archivo/abrir_proyecto"
+				key="a" mnemonic="a"
+				tooltip="abrir_tooltip"
+				action-command="ABRIR" icon="images/open.png"
+				position="10"/>
+			<menu text="Archivo/guardar_proyecto"
+				key="g" mnemonic="g"
+				tooltip="guardar_tooltip"
+				action-command="GUARDAR" icon="images/save.png"
+				position="20"/>
+			<menu text="Archivo/guardar_como"
+				tooltip="guardar_tooltip"
+				action-command="GUARDAR_COMO" icon="images/save.png"
+				position="30"
+				last="true"/>
+				
+			<menu text="Archivo"
+				position="98"
+				is_separator="true"/>
+			
+			<menu text="Archivo/salir"
+				tooltip="salir_tooltip"
+				key="x" mnemonic="x"
+				action-command="SALIR" icon="images/salir.png"
+				position="99"				
+				/>
+
+				
+			<menu text="Archivo"
+				position="35"
+				is_separator="true"/>
+
+			<menu text="Archivo/abrir_plantilla"
+				action-command="OPENTEMPLATE"
+				tooltip="abrir_plantilla"
+				icon="images/open.png"
+				position="40"
+				last="true"/>
+			<menu text="Archivo"
+				position="45"
+				is_separator="true"/>
+
+			<tool-bar name="gvSIG" position = "1">
+				<action-tool icon="images/new.png" tooltip="nuevo_tooltip"
+					action-command="NUEVO"/>
+				<action-tool icon="images/open.png" tooltip="abrir_tooltip"
+					action-command="ABRIR"/>
+				<action-tool icon="images/save.png" tooltip="guardar_tooltip"
+					action-command="GUARDAR"/>
+
+			</tool-bar>
+
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.AddLayer"
+			description="Extensi�n encargada de abrir las diferentes capas."
+			active="true"
+			priority="20">
+			<menu text="Vista/Anadir_Capa" key="o" icon="images/addlayer.png"/>
+			<tool-bar name="View" position="2">
+				<action-tool icon="images/addlayer.png" tooltip="Anadir_Capa"/>
+			</tool-bar>
+		</extension>
+
+		<extension class-name="com.iver.cit.gvsig.ZoomPrev"
+			description="Extensi�n encargada de gestionar los zooms previos al actual."
+			active="true">
+			<menu text="Vista/navegacion/Zoom_Previo" icon="images/ZoomPrevio.png"/>
+			<tool-bar name="View_Tools_Zooms" position ="3">
+				<action-tool icon="images/ZoomPrevio.png" action-command="ZOOM_PREV" tooltip="Zoom_Previo"/>
+			</tool-bar>
+		</extension>
+
+		<extension class-name="com.iver.cit.gvsig.ViewControls"
+			description="Extensi�n encargada de gestionar la vista."
+			active="true"
+			priority="30">
+			<menu text="Vista/navegacion/Zoom_Mas" action-command="ZOOM_IN" icon="images/ZoomIn.png"/>
+			<menu text="Vista/navegacion/Zoom_Menos" action-command="ZOOM_OUT" icon="images/ZoomOut.png"/>
+			<menu text="Vista/navegacion/Zoom_Completo" action-command="FULL" icon="images/MapContents.png"/>
+
+			<menu text="Vista/navegacion/Desplazamiento" action-command="PAN" icon="images/Pan.png"/>
+			<menu text="Vista/navegacion/Encuadre" action-command="ENCUADRE" icon="images/encuadre.png"/>
+
+			<menu text="Vista/consulta/informacion" action-command="INFO" icon="images/Identify.png"/>
+			<menu text="Vista/consulta/medir_distancias" action-command="MEDICION" icon="images/Distancia.png"/>
+			<menu text="Vista/consulta/medir_area" action-command="AREA" icon="images/Poligono16.png"/>
+
+			<menu text="Vista/seleccion/seleccionar_por_punto" action-command="SELPOINT" icon="images/Select.png"/>
+			<menu text="Vista/seleccion/seleccionar_por_rectangulo" action-command="SELRECT" icon="images/SelEspacial2b.png"/>
+			<menu text="Vista/seleccion/Seleccion_por_capa" action-command="SELECTIONBYSHAPE"/>
+
+
+			<menu text="Vista/poner_capas_a/visibles" action-command="CAPAS_VISIBLES"/>
+			<menu text="Vista/poner_capas_a/no_visibles" action-command="CAPAS_NOVISIBLES"/>
+			<menu text="Vista/poner_capas_a/activos" action-command="CAPAS_ACTIVAS"/>
+			<menu text="Vista/poner_capas_a/no_activos" action-command="CAPAS_NOACTIVAS"/>
+
+			<menu text="Vista/configurar_localizador" action-command="CONFIG_LOCATOR"/>
+
+			<tool-bar name="View_Tools_Zooms" position="3">
+				<selectable-tool is-default="true" icon="images/ZoomIn.png" action-command="ZOOM_IN" tooltip="Zoom_Mas"/>
+				<selectable-tool icon="images/ZoomOut.png" action-command="ZOOM_OUT"  tooltip="Zoom_Menos"/>
+				<action-tool icon="images/MapContents.png" action-command="FULL" tooltip="Zoom_Completo"/>
+
+			</tool-bar>
+			<tool-bar name="View_Tools" position ="4">
+				<selectable-tool icon="images/Pan.png" action-command="PAN"  tooltip="Encuadre"/>
+				<action-tool icon="images/encuadre.png" action-command="ENCUADRE" tooltip="gestion_encuadre"/>
+			</tool-bar>
+			<tool-bar name="View_Tools_Query" position="5">
+				<selectable-tool icon="images/Identify.png" action-command="INFO"  tooltip="informacion" />
+				<selectable-tool icon="images/Distancia.png" action-command="MEDICION"  tooltip="medir_distancias"/>
+				<selectable-tool icon="images/Poligono16.png" action-command="AREA"  tooltip="medir_area"/>
+			</tool-bar>
+			<tool-bar name="View_Tools_Select" position="6">
+				<selectable-tool icon="images/Select.png" action-command="SELPOINT"  tooltip="seleccionar_por_punto" />
+				<selectable-tool icon="images/SelEspacial2b.png" action-command="SELRECT"  tooltip="seleccionar_por_rectangulo"/>
+			</tool-bar>
+		</extension>
+
+		<extension class-name="com.iver.cit.gvsig.ViewPropertiesExtension"
+			description="Extensi�n encargada de gestionar el di�logo de propiedades de la vista."
+			active="true">
+			<menu text="Vista/propiedades" action-command="PROPERTIES"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.ThemeControls"
+			description="Extensi�n encargada de gestionar los eventos realizados sobre una capa."
+			active="true">
+			<!-- <menu text="Capa/shape_seleccion" action-command="SHAPE_SELECTED" icon="images/shapeseleccion.png"/> -->
+			<!-- menu text="Capa/Exportar selecci�n a DXF" action-command="DXF_SELECTED"/-->
+			<menu text="Capa/borra_seleccion" action-command="DEL_SELECTION" icon="images/delselection.png"/>
+			<menu text="Vista/navegacion/Zoom_Select" action-command="ZOOM_SELECT" icon="images/ZoomSeleccion.png"/>
+			<tool-bar name="View_Tools_Select" position="6">
+				<action-tool icon="images/delselection.png" action-command="DEL_SELECTION"  tooltip="borra_seleccion"/>
+			</tool-bar>
+			<tool-bar name="View_Tools_Zooms" position="3">
+				<action-tool icon="images/ZoomSeleccion.png" action-command="ZOOM_SELECT"  tooltip="Zoom_Select"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.LinkControls"
+			description="Extensi�n encargada de gestionar el hiperlink."
+			active="true">
+			<menu text="Vista/consulta/Link" action-command="LINK" icon="images/Link.png"/>
+			<tool-bar name="View_Tools_Query" position="5">
+				<selectable-tool icon="images/Link.png" action-command="LINK"  tooltip="Link" />
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.LayoutControls"
+			description="Extensi�n encargada de gestionar los eventos realizados sobre el Layout."
+			active="true">
+
+			<menu text="Mapa/propiedades" action-command="PROPERTIES" tooltip="propiedades_mapa"/>
+			<menu text="Mapa/preparar_pagina" action-command="CONFIG" tooltip="preparar_pagina"/>
+
+
+			<menu text="Mapa/navegacion/Zoom_Mas" action-command="ZOOM_IN" tooltip="Zoom_Mas" icon="images/LayoutZoomIn.png"/>
+			<menu text="Mapa/navegacion/Zoom_Menos" action-command="ZOOM_OUT" tooltip="Zoom_Menos" icon="images/LayoutZoomOut.png"/>
+			<menu text="Mapa/navegacion/Zoom_Acercar" action-command="ZOOMIN" tooltip="Zoom_Mas" icon="images/zoommas.png"/>
+			<menu text="Mapa/navegacion/Zoom_Alejar" action-command="ZOOMOUT" tooltip="Zoom_Menos" icon="images/zoommenos.png"/>
+			<menu text="Mapa/navegacion/Zoom_Completo" action-command="FULL" tooltip="Zoom_Completo" icon="images/mundo.gif"/>
+			<menu text="Mapa/navegacion/Zoom_Real" action-command="REALZOOM" tooltip="Zoom_Real" icon="images/zoomreal.png"/>
+			<menu text="Mapa/navegacion/Zoom_Select" action-command="ZOOMSELECT" tooltip="Zoom_Select" icon="images/zoomselect.png"/>
+
+			<menu text="Mapa/navegacion/Desplazamiento" action-command="PAN"  tooltip="Encuadre" icon="images/LayoutPan.png"/>
+
+
+			<menu text="Archivo/guardar_como_plantilla" action-command="SAVETEMPLATE"
+				 tooltip="guardar"
+				 icon="images/save.png"
+				 position="42"/>
+			<menu text="Archivo/exportar_pdf" action-command="PDF"
+				 tooltip="exportar_pdf" icon="images/pdf.png"
+				 position="38"/>
+			<tool-bar name="gvSIG" position="1">
+				<action-tool icon="images/pdf.png" action-command="PDF"  tooltip="exportar_pdf"/>
+			</tool-bar>
+			<tool-bar name="Layout_Tools_Zooms" position="20">
+				<selectable-tool icon="images/LayoutZoomIn.png" action-command="ZOOM_IN" tooltip="Zoom_Mas"/>
+				<selectable-tool icon="images/LayoutZoomOut.png" action-command="ZOOM_OUT" tooltip="Zoom_Menos"/>
+				<action-tool icon="images/zoommas.png" action-command="ZOOMIN" tooltip="Zoom_Mas"/>
+				<action-tool icon="images/zoommenos.png" action-command="ZOOMOUT" tooltip="Zoom_Menos"/>
+				<action-tool icon="images/mundo.gif" action-command="FULL" tooltip="Zoom_Completo"/>
+				<action-tool icon="images/zoomreal.png" action-command="REALZOOM" tooltip="Zoom_Real"/>
+				<action-tool icon="images/zoomselect.png" action-command="ZOOMSELECT" tooltip="Zoom_Select"/>
+				<selectable-tool icon="images/LayoutPan.png" action-command="PAN"  tooltip="Encuadre"/>
+			</tool-bar>
+
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.LayoutEditVertexExtension"
+			description="Extensi�n encargada de gestionar los eventos de edici�n realizados sobre el Layout."
+			active="true">
+			<menu text="Mapa/edicion/editar_vertices" action-command="VERTEX" tooltip="editar_vertices" icon="images/Select1.png"/>
+
+			<tool-bar name="Layout_Tools_Select" position="21">
+				<selectable-tool icon="images/Select1.png" action-command="VERTEX" tooltip="editar_vertices"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.LayoutEditableToolsExtension"
+			description="Extensi�n encargada de gestionar los eventos de edici�n realizados sobre el Layout."
+			active="true">
+			<menu text="Mapa/seleccion/seleccionar_por_rectangulo" action-command="SELECT"  tooltip="seleccionar_por_rectangulo" icon="images/Select.png"/>
+
+			<menu text="Mapa/Insertar/texto" action-command="RECTANGLETEXT" tooltip="insertar_texto" icon="images/MapaTexto.png"/>
+			<menu text="Mapa/Insertar/punto" action-command="POINT" tooltip="insertar_punto" icon="images/Point.png"/>
+			<menu text="Mapa/Insertar/rectangulo" action-command="RECTANGLESIMPLE" tooltip="insertar_rectangulo" icon="images/Rectangle.png"/>
+			<menu text="Mapa/Insertar/circulo" action-command="CIRCLE" tooltip="insertar_circulo" icon="images/Circle.png"/>
+			<menu text="Mapa/Insertar/linea" action-command="LINE" tooltip="insertar_linea" icon="images/Rect.png"/>
+			<menu text="Mapa/Insertar/polilinea" action-command="POLYLINE" tooltip="insertar_polilinea" icon="images/Line.png"/>
+			<menu text="Mapa/Insertar/poligono" action-command="POLYGON" tooltip="insertar_poligono" icon="images/Poligon.png"/>
+			<menu text="Mapa/Insertar/imagen" action-command="RECTANGLEPICTURE" tooltip="insertar_imagen" icon="images/MapaImagen.png"/>
+
+			<menu text="Mapa/Insertar/Vista" action-command="RECTANGLEVIEW" tooltip="insertar_vista" icon="images/MapaVista.png"/>
+			<menu text="Mapa/Insertar/leyenda" action-command="RECTANGLELEGEND"  tooltip="insertar_leyenda" icon="images/MapaLeyenda.png"/>
+			<menu text="Mapa/Insertar/escala" action-command="RECTANGLESCALEBAR"  tooltip="insertar_escala" icon="images/MapaEscala.png"/>
+			<menu text="Mapa/Insertar/north" action-command="RECTANGLENORTH" tooltip="insertar_norte" icon="images/MapaNorth.png"/>
+			<menu text="Mapa/Insertar/box" action-command="RECTANGLEBOX" tooltip="insertar_cajetin" icon="images/box.png"/>
+
+
+			<tool-bar name="Layout_Tools_Select" position="21">
+				<selectable-tool icon="images/Select.png" action-command="SELECT"  tooltip="seleccionar_por_rectangulo"/>
+				<action-tool icon="images/remove.png" action-command="REMOVE" tooltip="borra_seleccion"/>
+			</tool-bar>
+
+			<tool-bar name="Layout_Tools_Insert_Simple" position="7">
+				<selectable-tool icon="images/MapaTexto.png" action-command="RECTANGLETEXT"  tooltip="insertar_texto"/>
+				<selectable-tool icon="images/MapaImagen.png" action-command="RECTANGLEPICTURE"  tooltip="insertar_imagen"/>
+				<selectable-tool icon="images/Point.png" action-command="POINT"  tooltip="insertar_punto"/>
+				<selectable-tool icon="images/Rectangle.png" action-command="RECTANGLESIMPLE"  tooltip="insertar_rectangulo"/>
+				<selectable-tool icon="images/Circle.png" action-command="CIRCLE"  tooltip="insertar_circulo"/>
+				<selectable-tool icon="images/Rect.png" action-command="LINE"  tooltip="insertar_linea"/>
+				<selectable-tool icon="images/Line.png" action-command="POLYLINE"  tooltip="insertar_polilinea"/>
+				<selectable-tool icon="images/Polygon.png" action-command="POLYGON" tooltip="insertar_poligono"/>
+			</tool-bar>
+
+			<tool-bar name="Layout_Tools_Insert_Cartografy" position="8">
+				<selectable-tool icon="images/MapaVista.png" action-command="RECTANGLEVIEW" tooltip="insertar_vista"/>
+				<selectable-tool icon="images/MapaLeyenda.png" action-command="RECTANGLELEGEND"  tooltip="insertar_leyenda"/>
+				<selectable-tool icon="images/MapaEscala.png" action-command="RECTANGLESCALEBAR"  tooltip="insertar_escala"/>
+				<selectable-tool icon="images/MapaNorth.png" action-command="RECTANGLENORTH"  tooltip="insertar_norte"/>
+				<selectable-tool icon="images/box.png" action-command="RECTANGLEBOX"  tooltip="insertar_cajetin"/>
+			</tool-bar>
+		</extension>
+
+
+
+		<extension class-name="com.iver.cit.gvsig.FFrameViewExtension"
+		description="Extensi�n encargada de gestionar los eventos realizados sobre las vistas a�adidas al Layout."
+		active="true">
+
+		<menu text="Mapa/navegacion_vista/Zoom_Mas_Vista" action-command="VIEW_ZOOMIN" tooltip="Zoom_Mas_Vista" icon="images/ZoomIn.png"/>
+		<menu text="Mapa/navegacion_vista/Zoom_Menos_Vista" action-command="VIEW_ZOOMOUT" tooltip="Zoom_Menos_Vista" icon="images/ZoomOut.png"/>
+		<menu text="Mapa/navegacion_vista/Zoom_Completo_Vista" action-command="VIEW_FULL" tooltip="Zoom_Completo_Vista" icon="images/MapContents.png"/>
+		<menu text="Mapa/navegacion_vista/Encuadre_Vista" action-command="VIEW_PAN" tooltip="Encuadre_Vista" icon="images/Pan.png"/>
+
+		<tool-bar name="Layout_Tools_View" position="22">
+			<action-tool icon="images/MapContents.png" action-command="VIEW_FULL" tooltip="Zoom_Completo_Vista"/>
+			<selectable-tool icon="images/ZoomIn.png" action-command="VIEW_ZOOMIN" tooltip="Zoom_Mas_Vista"/>
+			<selectable-tool icon="images/ZoomOut.png" action-command="VIEW_ZOOMOUT" tooltip="Zoom_Menos_Vista"/>
+			<selectable-tool icon="images/Pan.png" action-command="VIEW_PAN" tooltip="Encuadre_Vista"/>
+		</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TagExtension"
+			description="Extensi�n para a�adir un tag a los FFrames."
+			active="false">
+			<menu text="mapa/anadir_tag" key="t" action-command="SET_TAG" tooltip="anadir_tag" icon="images/tag.png"/>
+			<tool-bar name="Mapa" position="9">
+				<action-tool icon="images/gtk-add.png" action-command="SET_TAG" tooltip="anadir_tag"/>
+				<action-tool icon="images/gtk-apply.png" action-command="VIEW_TAGS" tooltip="ver_tags"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.GraphicControls"
+			description="Extensi�n encargada de gestionar los eventos realizados sobre los gr�ficos que contiene el Layout."
+			active="true">
+
+			<menu text="Mapa/Graficos/propiedades" action-command="PROPIEDADES" tooltip="propiedades" />
+			<menu text="Mapa/Graficos/alinear" action-command="ALINEAR" tooltip="alinear_graficos"/>
+			<menu text="Mapa/Graficos/agrupar" action-command="AGRUPAR" tooltip="agrupar_graficos" icon="images/agrupar.png"/>
+			<menu text="Mapa/Graficos/desagrupar" action-command="DESAGRUPAR" tooltip="desagrupar_graficos" icon="images/desagrupar.png"/>
+			<menu text="Mapa/Graficos/simplificar" action-command="SIMPLIFICAR" tooltip="simplificar"/>
+
+			<menu text="Mapa/Graficos/colocar_delante" action-command="DELANTE" tooltip="colocar_delante" icon="images/delante.png"/>
+			<menu text="Mapa/Graficos/colocar_detras" action-command="DETRAS" tooltip="colocar_detras" icon="images/detras.png"/>
+			<menu text="Mapa/Graficos/tamano_posicion" action-command="POSICIONAR" tooltip="tamano_posicion" icon="images/posicionar.png"/>
+			<menu text="Mapa/Graficos/linea_grafica" action-command="BORDEAR" tooltip="linea_grafica" icon="images/bordear.png"/>
+			<tool-bar name="Layout_Tools_Grafics" position="10">
+				<action-tool icon="images/delante.png" action-command="DELANTE" tooltip="colocar_delante"/>
+				<action-tool icon="images/detras.png" action-command="DETRAS" tooltip="colocar_detras"/>
+				<action-tool icon="images/posicionar.png" action-command="POSICIONAR" tooltip="tamano_posicion"/>
+				<action-tool icon="images/agrupar.png" action-command="AGRUPAR" tooltip="agrupar_graficos"/>
+				<action-tool icon="images/desagrupar.png" action-command="DESAGRUPAR" tooltip="desagrupar_graficos"/>
+				<action-tool icon="images/bordear.png" action-command="BORDEAR" tooltip="linea_grafica"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.LayoutRedoExtension"
+			description="Extensi�n para rehacer cambios sobre el Layout."
+			active="true">
+			<menu text="mapa/rehacer" key="y" action-command="REDO" tooltip="rehacer" icon="images/Redo.png"/>
+			<tool-bar name="Mapa">
+				<action-tool icon="images/Redo.png" action-command="REDO" tooltip="rehacer"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.LayoutUndoExtension"
+			description="Extensi�n para deshacer cambios sobre el Layout."
+			active="true">
+			<menu text="mapa/deshacer" key="z" action-command="UNDO" tooltip="dehacer" icon="images/Undo.png"/>
+			<tool-bar name="Mapa">
+				<action-tool icon="images/Undo.png" action-command="UNDO" tooltip="deshacer"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.LayoutCommandStackExtension"
+			description="Extensi�n encargada de abrir el di�logo para gestionar los comandos apilados."
+			active="true">
+			<menu text="mapa/pila_de_comandos" key="k" action-command="COMMANDSTACK" tooltip="pila_de_comandos" icon="images/commandstack.png"/>
+			<tool-bar name="Mapa">
+				<action-tool icon="images/commandstack.png" action-command="COMMANDSTACK" tooltip="pila_de_comandos"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableOperations"
+			description="Extensi�n encargada de gestionar las operaciones sobre las tablas."
+			active="true">
+			<menu text="Tabla/join" icon="images/tablejoin.png" action-command="JOIN"/>
+			<menu text="Tabla/link" icon="images/tablelink.png" action-command="LINK"/>
+			<tool-bar name="Herramientas" position="11">
+				<action-tool icon="images/tablejoin.png" action-command="JOIN" tooltip="join"/>
+				<action-tool icon="images/tablelink.png" action-command="LINK" tooltip="link"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.RedoTableExtension"
+			description="Extensi�n encargada de rehacer la edici�n sobre la capa activa."
+			active="true">
+			<menu text="Tabla/rehacer" action-command="REDO" icon="images/Redo.png"/>
+		<tool-bar name="modificar">
+				<action-tool name="rehacer" icon="images/Redo.png" action-command="REDO" tooltip="rehacer" group="tabla"/>
+		</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.UndoTableExtension"
+			description="Extensi�n encargada de dehacer la edici�n sobre la capa activa."
+			active="true">
+			<menu text="Tabla/deshacer" action-command="UNDO" icon="images/Undo.png"/>
+		<tool-bar name="modificar">
+				<action-tool name="deshacer" icon="images/Undo.png" action-command="UNDO" tooltip="deshacer" group="tabla"/>
+		</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditStopExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/stop_edition" action-command="STOPEDITING"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditStartExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/start_edition" action-command="STARTEDIT"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditInsertExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/insert_row" action-command="INSERTROW"/>
+			<menu text="Tabla/insert_column" action-command="INSERTCOLUMN"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditRemoveRowExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/remove_row" action-command="REMOVEROW"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditRemoveColumnExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/remove_column" action-command="REMOVECOLUMN"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditCopyExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/copy" icon="images/editcopy.png" action-command="COPY"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditCutExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/cut" icon="images/editcut.png" action-command="CUT"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableEditPasteExtension"
+			description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+			active="true">
+			<menu text="Tabla/paste" icon="images/editpaste.png" action-command="PASTE"/>
+		</extension>
+
+		<extension active="true" class-name="com.iver.cit.gvsig.TableFieldOperations"
+			description="Operaciones sobre los campos de las tablas">
+			<menu text="Tabla/ascending_order" icon="images/orderasc.png" action-command="ORDERASC"/>
+			<menu text="Tabla/descending_order" icon="images/orderdesc.png" action-command="ORDERDESC"/>
+			<tool-bar name="Herramientas" position="11">
+				<action-tool icon="images/orderasc.png" tooltip="ascending_order_tooltip" action-command="ORDERASC"/>
+				<action-tool icon="images/orderdesc.png" tooltip="descending_order_tooltip" action-command="ORDERDESC"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.TableNumericFieldOperations"
+			description="Extensi�n encargada de gestionar las operaciones sobre los campos num�ricos."
+			active="true">
+			<menu text="Tabla/statistics" icon="images/statistics.png"/>
+			<tool-bar name="Herramientas" position="11">
+				<action-tool icon="images/statistics.png" tooltip="statistics"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.FiltroExtension"
+			description="Extensi�n encargada de abrir el di�logo para filtrar una tabla."
+			active="true">
+			<menu text="Tabla/filtro" icon="images/Filtro.png" action-command="FILTRO"/>
+			<tool-bar name="Herramientas" position="11">
+				<action-tool icon="images/Filtro.png" action-command="FILTRO" tooltip="filtro"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.RemoveTableUnion"
+			description="Extensi�n encargada de quitar uniones de las tablas."
+			active="true">
+			<menu text="Tabla/quitar_uniones"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.RemoveTableLink"
+			description="Extensi�n encargada de quitar los enlaces de las tablas."
+			active="true">
+			<menu text="Tabla/quitar_enlaces"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.ViewProjectWindow"
+			description="Extensi�n encargada de abrir la ventana de gesti�n del proyecto."
+			active="true">
+			<menu text="Ver/ventana_proyecto"
+				key="p" mnemonic="p"
+				tooltip="ver_tooltip"
+				action-command="SHOW"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.RasterExtension"
+			description="Extensi�n encargada de seleccionar una capa de raster en el toc."
+			active="true">
+			<menu text="Vista/seleccion/seleccionar_capas" icon="images/zoommas.png" action-command="SELECTIMAGE"/>
+			<tool-bar name="Herramientas" position="11">
+				<selectable-tool icon="images/zoommas.png" action-command="SELECTIMAGE"  tooltip="seleccionar_capas"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.ShowTable"
+			description="Extensi�n encargada de abrir la tabla asociada a la capa seleccionado."
+			active="true">
+			<menu text="Capa/ver_tabla_atributos" icon="images/ResultConsulta.png"/>
+			<tool-bar name="Acciones" position="12">
+				<action-tool icon="images/ResultConsulta.png"
+					enableText="Un_Layer"
+					tooltip="Muestra_atributos"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.Print"
+			description="Extensi�n encargada de la impresi�n."
+			active="true">
+			<menu text="Mapa/Imprimir" icon="images/print.png"/>
+			<tool-bar name="Mapa" position="9">
+				<action-tool icon="images/print.png"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.PrintTable"
+			description="Extensi�n encargada de la impresi�n de las tablas."
+			active="true">
+			<menu text="Tabla/Imprimir" icon="images/print.png" action-command="PRINTTABLE"/>
+			<tool-bar name="Tabla" position="10">
+				<action-tool icon="images/print.png" action-command="PRINTTABLE"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.PrintProperties"
+			description="Extensi�n encargada de las propiedades de impresi�n."
+			active="true">
+			<tool-bar name="Mapa" position="9">
+				<action-tool icon="images/Frame.gif"/>
+			</tool-bar>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.Export"
+			description="Extensi�n encargada de exportar una vista al formato de imagen que se seleccione."
+			active="true">
+			<menu text="Vista/export/imagen"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.ThemeToAnnotationExtension"
+			description="Extensi�n encargada de la capa de texto."
+			active="true">
+			<menu text="Capa/to_annotation" action-command="LAYERTOANNOTATION"/>
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.PaletteViewInfoExtension"
+			description="Extensi�n encargada transformar la vista activa en palette."
+			active="true">
+			<menu text="Ventana/to_palette" action-command="PALETTE"
+				position="50"/>
+		</extension>
+
+		<extension class-name="com.iver.cit.gvsig.RestoreViewInfoExtension"
+			description="Extensi�n encargada transformar la vista palette en su original."
+			active="true">
+			<menu text="Ventana/restore" action-command="RESTORE"
+				position="10"/>
+		</extension>
+		<!--extension class-name="com.iver.cit.gvsig.FFrameGroupExtension"
+			description="Extensi�n encargada de controlar un FFrameTable."
+			active="true">
+			<menu text="Mapa/no_editar_grupo" action-command="NOEDITGROUP"/>
+			<menu text="Mapa/unir_celdas" action-command="JOIN"/>
+			<menu text="Mapa/editar_grupo" action-command="EDITGROUP"/>
+		</extension-->
+		<extension class-name="com.iver.cit.gvsig.About"
+			description="Extensi�n encargada de abrir una ventana con la informaci�n relativa al programa."
+			active="true">
+			<menu text="Ayuda/acerca_de" />
+		</extension>
+	</extensions>
+	<icon src="images/logoGVA.gif" text="gvSIG"/>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_fr.properties	(revision 42196)
@@ -0,0 +1,629 @@
+#text_fr.properties
+__espacio_vertical=Espace Vertical\:
+__lineas=lignes
+__proyeccion_actual=Projection actuelle\:
+__redimensionar_texto_escala=Redimensionner le texte suivant l'\u00E9chelle de la vue
+__seleccion_de_fuente=S\u00E9lection d'une fonte
+_(Etiquetas_estandar)=(Etiquettes standard)
+_(Intervalos)=(Intervalles)
+_(Simbolo_unico)=(Symbole unique)
+_(Valores_unicos)=(Valeurs uniques)
+(escala_maxima)=(\u00E9chelle maximum)
+(escala_minima)=(\u00E9chelle maximum)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+abajo=Descendre
+abrir=Ouvrir
+Abrir_Imagen=Ouvrir une image
+abrir_plantilla=Ouvrir police
+abrir_proyecto=Ouvrir un projet
+abrir_tooltip=Ouvrir un projet existant
+Abrir_una_capa=Ouvrir une couche
+Accion_Predefinida=Action pr\u00E9d\u00E9finie
+aceptar=Valider
+Aceptar=Valider
+acerca_de=A propos de...
+activar_regla=Afficher la r\u00E8gle
+activos=Toutes actives
+adjust_transparency=Ajuster la transparence
+agrupar=Grouper
+agrupar_capas=Grouper les couches
+agrupar_graficos=Grouper les graphiques
+agrupar_linea=Grouper les lignes graphiques
+Ajustar_cobertura_wcs=Ajuster couverture WCS
+Ajustar_transparencia=Ajuster la transparence
+ajustes_linea_grafica=Ajuster la ligne graphique
+Al_leer_la_leyenda=A la lecture de la l\u00E9gende
+alerta=Avertissement
+alias=Alias
+alineamiento=Alignement\:
+alinear=Aligner
+alinear_graficos=Aligner les graphiques
+alta=Hauteur
+alto=Hauteur
+altura=Hauteur \:
+Altura_fija_de_texto=Fixe la hauteur du texte
+ambito=Cadre
+Anadir=Ajouter
+Anadir_al_conjunto=Ajouter \u00E0 la s\u00E9lection
+Anadir_capa=Ajouter une couche g\u00E9ographique
+Anadir_Capa=Ajouter une couche g\u00E9ographique
+Anadir_todos=Tout ajouter
+ancho=Largeur
+ancho_alto=Largeur X Hauteur
+Ancho_Contorno=Epaisseur du contour
+Ancho_de_linea=Epaisseur de la ligne
+anchura=Largeur\:
+angulo_rotacion=Angle de rotation\:
+anterior=Pr\u00E9c\u00E9dent
+Anterior=Pr\u00E9c\u00E9dent
+Aplicar=Appliquer
+Archivo=Fichier
+Archivos_de_Disco=Fichiers sur le disque
+area_trabajo=Espace de travail
+arriba=Monter
+ascending_order=Ordre ascendant
+ascending_order_tooltip=Classe le champs s\u00E9lectionn\u00E9 par ordre ascendant
+Atributo=Attribut
+automatico=Automatique
+Ayuda=Aide
+back=Pr\u00E9c\u00E9dent
+Back=Pr\u00E9c\u00E9dent
+background_color=Colour d'arri\u00E8re plan
+baja=Basse
+Bajar_capa=Descendre la couche
+bandas=Bandes
+bands=Bandes
+barra=Barre\:
+base_datos=Base de donn\u00E9es
+bd=bd
+bmp=Fichiers BMP
+Bold=Gras
+borra_seleccion=Effacer une s\u00E9lection
+borrador=Brouillon
+borrar=Supprimer
+Calcular_intervalos=Calculer les intervalles
+calidad=Qualit\u00E9
+Cambio_Color=Changer la couleur
+Cambio_de_estilo=Changer le style
+Cambio_Estilo=Changer de style
+cambio_nombre=Changement de nom
+Cambios_de_estilo=Change le style
+campo=Champ
+Campo=Champ
+campo_altura_texto=Taille du champ textuel\:
+Campo_clasifica=Champ de classification
+Campo_de_clasificacion=Champ de classification
+campo_de_documentos_asociados=Champs de documents associ\u00E9s
+Campo_de_etiquetado=Etiqueter \u00E0 partir d'un champ
+Campos=Champs
+cancel=Annuler
+Cancel=Annuler
+cancelar=Annuler
+Cancelar=Annuler
+Capa=Couche
+Capas=Couches g\u00E9ographiques
+Capas_del_localizador=Couches de localisation
+capaWMS=CoucheWMS
+cargar_leyenda=Charger une l\u00E9gende
+cartografico=Cartographique
+causa_error_desconocida=Erreur inattendue du serveur
+Centimetros=Centim\u00E8tres
+cerrar=Fermer
+Cerrar=Fermer
+circulo=Cercle
+Circulo=Cercle
+clave=Clef
+Coberturas=Couvertures
+coincidir_tamano=Faire co\u00EFncider la taille\:
+colocar_a_margenes=Positionner par rapport aux marges.
+colocar_alrededor_seleccionados=Positionner autour des graphiques s\u00E9lectionn\u00E9s.
+colocar_alrededor_todos=Positionner autour de tous les graphiques.
+colocar_delante=Apr\u00E8s
+colocar_detras=Avant
+color=Couleur \:
+Color_Contorno=Couleur du contour
+Color_de_la_Linea=Couleur de la ligne
+Color_de_Relleno=Couleur de remplissage
+Color_final=Couleur d'arriv\u00E9e \:
+Color_inicial=Couleur de d\u00E9part \:
+Color_inicio=Couleur de d\u00E9part
+color_texto=Couleur du texte\:
+comentarios=Commentaires
+conectar=Connecter
+conexion_correcta=Connexion correcte
+configuracion_andami_tooltip=Configuration Andami
+configurar=Configurer
+configurar_localizador=Configurer la vue d'ensemble
+Configurar_localizador=Configurer la vue d'ensemble...
+confirmar_borrar=Confirmer la suppression ?
+conservar_escala_visualizacion=Conserver l'\u00E9chelle de la vue
+consulta=Requ\u00EAte
+Contengan=contiennent
+coor_geograficas=Coord. G\u00E9ographiques
+creation_date=Date de cr\u00E9ation
+Crucen_con=croisent avec
+Cruz=Croix
+Cuadrado=Carr\u00E9
+cuando_activo=Quand active
+Dado_un_campo_de_atributos=Champs d'attributs donn\u00E9
+debe_estar_activada=Doit \u00EAtre activ\u00E9
+Derecha=Droite
+Derecho=Droit
+desagrupar=Dissocier
+desagrupar_graficos=Dissocier les graphiques
+descending_order=Ordre descendant
+descending_order_tooltip=Classe le champs s\u00E9lectionn\u00E9 par ordre descendant
+desconectar=D\u00E9connecter
+descripcion=Description
+Descripcion=Description
+desde_arriba=Depuis le haut\:
+desde_izquierda=Depuis la gauche\:
+Desplazamiento=D\u00E9placer
+desviacion_tipica=Ecart type
+detalles=D\u00E9tails
+Detalles=D\u00E9tails
+DGNFiles=Fichiers DGN
+distance_units=Unit\u00E9s de distance
+distribuir=Distribuer \:
+divisiones_izquierda=Divisions \u00E0 partir de la gauche
+documentos_existentes=Documents existants
+driver=driver
+drivers=Drivers
+Dxffiles=Fichiers DXF
+editable=Editable
+Editar_leyenda=Editer la l\u00E9gende
+editar_propiedades=Editer les propri\u00E9t\u00E9s
+el_numero_maximo_de_intervalos_para_este_campo_es=Le nombre maximum d'intervalles pour ce champ est
+Elegir_Color=Selectionner la couleur
+Elegir_Fuente=Choisir la fonte
+Elementos_seleccionados_de_la_capa=entit\u00E9s s\u00E9lectionn\u00E9es de la couches
+Eliminar=Supprimer
+eliminar_capa=Supprimer une couche
+eliminar_extremos=Eliminer les extr\u00EAmes
+en_el_mapa=Dans la carte\:
+En_metros=En m\u00E8tres
+En_pixels=En pixels
+Encuadre=Zooms
+Encuadre_Vista=D\u00E9placer
+enlace_vivo=Lien dynamique
+Enlazar_a_fichero_de_texto=Lier \u00E0 un fichier texte
+Enlazar_a_ficheros_de_imagen=Lier \u00E0 un fichier image
+equal_intervals=Intervalles \u00E9gaux
+Error_abriendo_el_fichero=Erreur d'ouverture du fichier
+Error_accediendo_a_los_datos=Erreur d'acc\u00E8s aux donn\u00E9es
+error_comunicacion_servidor=Il s'est produit une erreur de communication avec le serveur
+error_escritura=Impossible d'\u00E9crire le fichier
+Error_guardando_la_leyenda=Erreur en sauvegardant la l\u00E9gende
+error_lectura=Impossible de lire le fichier
+escala=Echelle
+Escala=Echelle
+escala_maxima=echelle maximum
+Escala_Maxima=Echelle maximum
+escala_minima=\u00E9chelle minimum
+Escala_Minima=Echelle minimum
+escala_usuario=Echelle d\u00E9finie par l'utilisateur
+espaciado_horizontal=Pas horizontal de la grille
+espaciado_vertical=Pas vertical de la grille
+espacio=Espace\:
+espere=Patientez s.v.p.
+estadisticas=Statistiques
+este_por_debajo_de_=Soit en dessous de
+este_por_encima_de=Soit au dessus de
+Esten_contenidos_en=sont contenus dans
+Estilo=Style\:
+Etiqueta=Etiquette
+Etiquetado=Etiquetage
+Etiquetados=Etiquettages
+etiquetas=Etiquettes\:
+Etiquetas_estandar=Etiquettes standard
+Examinar=Parcourir
+exportar=Exporter
+exportar_a=Exporter vers...
+exportar_pdf=Exporter en pdf
+extension=Extension
+Extent=Extension
+extents_no_coincidentes=Les dimmensions de l'image selectionn\u00E9e ne co\u00EFncident pas avec celles de l'image d'origine.
+fallo_crear_conexion=Echec lors de la cr\u00E9ation de la connexion
+fallo_crear_pool=Echec lors de la cr\u00E9ation du Pool de connexion
+fallo_obtener_conexion_existente=Echec pour obtenir une connexion d\u00E9j\u00E0 cr\u00E9\u00E9e
+fallo_obtener_tablas=Echec pour obtenir les tables de la base de donn\u00E9es
+fallo_realizar_consulta=Echec pour r\u00E9aliser une requ\u00EAte
+fallo_registrar_conexion=Echec enregistrement connexion
+Fichero=Fichier
+fichero_existe=le fichier selectionn\u00E9 existe d\u00E9j\u00E0
+fichero_incorrecto=Fichier incorrect
+filtro=Requ\u00EAtes attributaires
+finalizar=Finaliser
+finish=Finaliser
+Font=Fonte
+formato=Format
+Formato=Format
+formato_incorrecto=Format incorrect
+fuente=Fonte
+Fuente=Fonte
+General=G\u00E9n\u00E9ral
+Generar_Intervalos=Calculer les Intervalles
+gestion_encuadre=Gestionnaire de positionnement
+grados=Degr\u00E9es\:
+Graficos=Graphiques
+Grosor_de_linea=Largeur de la ligne\:
+grosor_linea=Largeur de la ligne
+guardado=Enregister sous
+Guardar=Enregistrer
+guardar_cambios=Enregistrer les changements ?
+guardar_clave=Enregistrer la clef
+guardar_como=Enregistrer comme...
+guardar_como_plantilla=Garder comme police
+Guardar_el_zoom_actual=Enregistrer le zoom actif
+guardar_leyenda=Enregistrer une l\u00E9gende
+Guardar_leyenda=Enregistrer une l\u00E9gende
+guardar_proyecto=Enregistrer un projet
+guardar_tooltip=Enregistrer le projet
+Habilitar_etiquetado=Etiqueter
+hasta=jusqu'\u00E0
+Herramientas=Outils
+Herramientas_vista=Fen\u00EAtre des outils
+Hiperenlace=Hyperlien
+horizontal=Horizontal
+host=machine
+hostname=Hostname
+Identificar_Resultados=Identifier les r\u00E9sultats
+Igual_que_la_impresora=Identique que l'impression
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+Imagen=Image
+importar=Importer
+importar_extent=Importer l'extension de la vue
+Imprimir=Imprimer
+Inferior=Inf\u00E9rieur
+info=Info
+infobreak=Montrer les entit\u00E9s de la couche en utilisant une couleur.
+infodef=Montrer les entit\u00E9s de la couche en utilisant le m\u00EAme symbole.
+informacion=Propri\u00E9t\u00E9s de l'entit\u00E9 cliqu\u00E9e
+Informacion=Propri\u00E9t\u00E9s de l'entit\u00E9 cliqu\u00E9e
+infovalue=Affiche les entit\u00E9s d'une couche en utilisant un symbole pour chaque valeur
+Inicializando=Initialisation
+Insertar=Ins\u00E9rer
+insertar_circulo=Ins\u00E9rer un cercle
+insertar_escala=Ins\u00E9rer une \u00E9chelle
+insertar_imagen=Ins\u00E9rer une image
+insertar_leyenda=Ins\u00E9rer une l\u00E9gende
+insertar_linea=Ins\u00E9rer une ligne
+insertar_norte=Ins\u00E9rer  nord
+insertar_poligono=Ins\u00E9rer un polygone
+insertar_punto=Ins\u00E9rer un point
+insertar_recta=Ins\u00E9rer une ligne diagonale
+insertar_rectangulo=Ins\u00E9rer un rectangle
+insertar_texto=Ins\u00E9rer du texte
+insertar_vista=Ins\u00E9rer une vue
+Intersecten_con=s\u2019intersectent avec
+Intervalo=Intervalle
+Intervalos=Intervalles
+Intervalos_equidistantes=Intervalles \u00E9gaux
+Intervalos_por_rupturas_naturales=Intervalles par seuils naturels
+introduce_nombre=Nouveau type
+Italic=Italique
+Izquierda=Gauche
+Izquierdo=Gauche
+join=Union
+jpg=Fichiers JPEG
+kilometros=Kilom\u00E8tres
+Kilometros=Kilom\u00E8tres
+leyenda=L\u00E9gende
+Leyenda=L\u00E9gende
+leyenda_campo_unido=Un champs d'une table en jointure est utilis\u00E9  dans la l\u00E9gende (et /ou l'\u00E9tiquetage). Changez la l\u00E9gende avant d'enlever la jointure svp.
+Leyenda_Por_Defecto=L\u00E9gende par d\u00E9faut
+linea=Ligne
+Linea=Ligne
+linea_grafica=Ligne graphique
+lineal_directo=Lin\u00E9aire Direct
+linf_der=Inf. droite  X
+link=Lien
+Link=Lien
+Localizador_por_atributo=Localisation par attribut
+lppp=ppp
+lsup_izq=Sup. gauche X
+malla_activada=Activer la grille
+mantener_intervalo=Maintenir l'intervalle
+map_units=Unit\u00E9s de la carte
+Mapa=Carte
+mapas=Mises en page
+marco=Cadre
+marco_vista=Espace de travail de la vue
+margenes=Marges\:
+Mas_100=L\u00E9gende limit\u00E9e \u00E0 100 enregistrements
+mas_de_100_simbolos=Plus de 100  symboles n'apportent plus d'information dans un plan
+maximo=Maximum
+media=Moyenne
+medir_area=Mesurer une surface
+medir_distancias=Mesurer les distances
+metros=M\u00E8tres
+Metros=M\u00E8tres
+Milimetros=Millim\u00E8tres
+Millas=Miles
+minimo=Minimum
+modification_date=Date de modification
+mosaico_tooltip=Mosa\u00EFque
+Mostrar_Contorno=Activer le contour
+mostrar_descripcion=Montrer description
+Mostrar_siempre=Tout afficher
+mostrar_unidades=Montrer unit\u00E9s
+Muestra_atributos=Afficher les attributs de la couche s\u00E9lectionn\u00E9e.
+muestra_consola_tooltip=Montrer la console
+Muestra_los_atributos_de_las_capas_seleccionadas=Afficher les attributs de la couche s\u00E9lectionn\u00E9e.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Afficher les \u00E9l\u00E9ments de la couche en utilisant un symbole pour chaque valeur unique
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Afficher les \u00E9l\u00E9ments de la couche en utilisant une gamme de couleurs en fonction de la valeur d'un champs d'attributs d\u00E9termin\u00E9
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Afficher tous les \u00E9l\u00E9ments d'une couche en utilisant le m\u00EAme symbole
+natural_intervals=Intervalles naturels
+navegacion=Navigation
+navegacion_vista=Navigation Vue
+necesita_un_tema_activo=N\u00E9cessite un th\u00E8me actif
+necesita_un_tema_vectorial_activo=N\u00E9cessite un th\u00E8me vectoriel actif
+next=Suivant
+Next=Suivant
+ninguna_impresora_configurada=Aucune imprimante configur\u00E9e
+Nivel_de_transparencia=Niveau de transparence
+no_activos=Toutes inactives
+No_de_intervalos=Nombre d'intervalles
+No_mostrar=Ne pas afficher la couche lorsque l'\u00E9chelle est
+No_mostrar_la_capa_cuando_la_escala=Ne pas afficher la couche lorsque l'\u00E9chelle
+No_reconocido=Non reconnu
+No_Shape=Cette couche n'est pas de type shape
+no_visibles=Toutes invisibles
+nombre=Nom
+Nombre=Nom
+nombre_capa=Nom de la couche
+nombre_cobertura=Nom de la couverture
+Nombre_que_se_le_dara_al_zoom=Nom pour le zoom
+nombre_sesion=Nom du projet
+Nombres=Noms
+normal=Normal
+north=Nord
+Nueva_tabla=Nouvelle table
+nuevo=Nouveau
+Nuevo_conjunto=Nouvelle s\u00E9lection
+nuevo_proyecto=Nouveau projet
+nuevo_tamano_fuente=Nouvelle taille de fonte\:
+nuevo_tooltip=Cr\u00E9er un nouveau projet
+num_bandas=Nombre de bandes
+N\u00FAm_intervalos=Nombre d'intervalles
+numero_incorrecto=Numero incorrect
+ok=Ok
+opacidad=Opacit\u00E9
+orientacion=Orientation\:
+Origen_de_datos=Origine des donn\u00E9es
+Origen_de_Datos=Origine des donn\u00E9es\:
+Otros=Autres
+owner=Propri\u00E9taire
+parametros=Param\u00E8tres
+Parametros=Param\u00E8tres
+path=Chemin
+Perimetro=P\u00E9rim\u00E8tres
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet d'\u00E9tiquetter les \u00E9l\u00E9ments de la carte avec la valeur d'un champs d\u00E9termin\u00E9
+Personalizado=Personnalisation
+Pies=Pieds
+pixeles=pixels
+Plain=Normal
+png=Fichiers PNG
+poligono=Polygone
+poner_temas_a=Affichage des couches g\u00E9ographiques...\:
+por_debajo_de=en dessous de\:
+por_encima_de=au del\u00E0 de\:
+Por_favor_active_el_tema=Activez le th\u00E8me s.v.p.
+posicion_linea=Position de la ligne
+preparar_pagina=Pr\u00E9parer la page
+Preparar_pagina=Pr\u00E9parer la page
+presentacion=Pr\u00E9sentation
+Previsualizacion=Pr\u00E9visualisation
+Previsualizacion_de_simbolo=Pr\u00E9visualisation du symbole
+propiedades=Propri\u00E9t\u00E9s
+Propiedades_de_la_Capa=Propri\u00E9t\u00E9s de la couche
+propiedades_del_tema=Propri\u00E9t\u00E9s du th\u00E8me
+Propiedades_del_Tema=Propri\u00E9t\u00E9s de la couche
+Propiedades_escala_grafica=Propri\u00E9t\u00E9s de la barre d'\u00E9chelle
+propiedades_grafico=Propri\u00E9t\u00E9s du graphique
+propiedades_mapa=Propri\u00E9t\u00E9s de la carte
+propiedades_marco_imagenes=Propri\u00E9t\u00E9s du bloc image
+propiedades_marco_leyenda=Propri\u00E9t\u00E9s du bloc de l\u00E9gende
+propiedades_marco_vista=Propri\u00E9t\u00E9s du bloc de vue
+propiedades_raster=Propri\u00E9t\u00E9s du raster
+propiedades_sesion=Propri\u00E9t\u00E9s du project
+propiedades_tabla=Propri\u00E9t\u00E9s de la table
+propiedades_tema=Propri\u00E9t\u00E9s de la couche
+Propiedades_texto=Propri\u00E9t\u00E9s du texte
+propiedades_vista=Propri\u00E9t\u00E9s de la vue
+prueba_conexion=Essai connexion
+puerto=port
+Pulgadas=Pouces
+punto=Point
+quantile_intervals=Intervalles quantiles
+quiere_continuar=S\u00FBr de vouloir continuer?
+Quitar=Quitter
+Quitar_capa=Supprimer une couche
+quitar_enlaces=Enlever liens
+Quitar_todos=Tout supprimer
+Quitar_Todos=Tout supprimer
+quitar_uniones=Enlever unions
+rango_de_escalas=Niveau d'\u00E9chelle
+Rango_de_escalas=Classes d'\u00E9chelles
+Rasterfiles=Fichiers Raster
+realce=R\u00E9heussement
+recorte=coupure
+recorte_colas=Couper les r\u00E9sidus
+recorte_vista=Couper la vue
+recta=Ligne diagonale
+rectangulo=Rectangle
+recuento=Recomptage
+Recuperar_leyenda=Charger une l\u00E9gende
+Recuperar_y_eliminar_otros_zoom=R\u00E9cuperer et \u00E9liminer les autres zooms
+refrescar=Rafra\u00EEchir
+registros=registers
+registros_seleccionados_total=Total registres s\u00E9lectionn\u00E9s
+rellenar_marco_vista=Remplir le cadre de la vue
+relleno=Remplir \:
+renombrar=Renomer
+reproyectar_aviso=Le syst\u00E8me de projection de la couche est diff\u00E9rent de la vue\nAVISO\: \=Des probl\u00E8mes peuvent \u00EAtre rencontr\u00E9s avec certaines projections. Lisez la documentation
+reproyectar_pregunta=Souhaitez-vous reprojeter ?
+resolucion=R\u00E9solution
+resolucion_resultado=R\u00E9solution du r\u00E9sultat\:
+respuesta_error_servidor=La couverture n'a pu \u00EAtre obtenue
+resto_valores=Reste des valeurs
+salir=Quitter
+Salir=Quitter
+salir_tooltip=Quitter
+salvar_raster=Sauver le raster
+Sample=Exemple
+Se_superponen_a=se superposent \u00E0
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... pour supprimer les enregistrements \u00E0 partir de
+Sean_disjuntos_a=sont disjoints de
+Sean_iguales_a=sont identiques \u00E0
+seleccion=S\u00E9lection
+seleccion_campos=S\u00E9lectionnez les champs
+seleccion_fuente=S\u00E9lection d'une fonte
+Seleccion_por_tema=S\u00E9lection spatiale
+Seleccionar=S\u00E9lectionner
+seleccionar_capas=S\u00E9lectionner des couches
+seleccionar_coberturas=Selectionner couvertures
+seleccionar_CRS=Selectionner CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=S\u00E9lectionner dans la couche active les entit\u00E9s qui\:
+Seleccionar_del_conjunto=Mettre ce texte sur plusieurs lignes
+Seleccionar_fichero=S\u00E9lectionner un fichier
+seleccionar_formato=S\u00E9lectionner un format
+seleccionar_parametros=Selectionner les param\u00E8tres
+seleccionar_por_punto=S\u00E9lection
+seleccionar_por_rectangulo=S\u00E9lection \u00E0 partir d'un rectangle
+seleccionar_tiempo=Selectionner la position pour le temps
+seleccionar_todos=Tout s\u00E9lectionner
+seleccione_campo_enlace=S\u00E9lectionner le champs \u00E0 relier
+seleccione_fecha=S\u00E9lection d'une date...
+seleccione_tabla=S\u00E9lectionnez la table
+seleccione_tabla_a_enlazar=S\u00E9lectionner la table a relier
+seleccione_tabla_origen=S\u00E9lectionner la table origine de la jointure
+select_all=Tout s\u00E9lectionner
+select_geom_field=S\u00E9lectionner le champs g\u00E9om\u00E9trie
+select_none=Tout supprimmer
+select_unique_field=S\u00E9lectionner le champs unique
+selection_color=Couleur de s\u00E9lection
+servidor=Serveur
+Servidor=Serveur
+servidor_wcs_no_responde=Le serveur selectionn\u00E9 ne r\u00E9pond pas
+shape_seleccion=Exporter une s\u00E9lection.
+Shapefile=Shapefile
+Shapefiles=Fichiers SHP
+siempre=Toujours
+siguiente=Suivant
+Siguiente=Suivant
+Simbolo=Symbole
+S\u00EDmbolo=Symbole
+Simbolo_unico=Symbole unique
+Simbolo_Unico=Symbole unique
+Simbologia=Symbologie
+simple=Simple
+simplificar=Simplifier
+sin_realce=Sans r\u00E9haussement
+sin_titulo=Sans titre
+sincronizar_color_borde_relleno=Synchroniser la couleur de contour avec le fond \:
+Size=Taille
+sobre_la_barra=Sur la barre
+Solo_para_capas_vectoriales=Seulement pour les couches vectorielles
+statistics=Statistiques
+Style=Style
+Subir_capa=Monter une couche
+suma=Somme
+Superior=Sup\u00E9rieure
+Tabla=Table
+Tabla_de_Atributos=Table d'attributs
+Tabla_de_prueba=Table test
+tablas=Tables
+tamano=Taille\:
+tamano_metros=Taille en m\u00E8tres
+tamano_pagina=Taille de la page\:
+tamano_posicion=Taille et position
+tamanyo_borde=Taille du bord
+tamanyo_fuente=Taille de la source
+tarea_en_progreso=Progression de la t\u00E2che
+tema=Couche g\u00E9ographique
+texto=Texte
+Tiempo=Temps
+tipo_dato=Type de donn\u00E9e
+tipo_de_intervalo=Type d'intervalle
+Tipo_de_intervalos=Type d'intervalles
+tipo_de_leyenda=Type de l\u00E9gende
+Tipo_de_leyenda=Type de l\u00E9gende
+Tipo_de_linea=Type de ligne
+tipo_fichero_proyecto=Fichier de projet gvSIG (*.gvsproj)
+tipo_leyenda=Fichier de l\u00E9gende (*.GVL)
+tipo_linea=Type de Ligne\:
+Tipo_no_reconocido=Type non reconnu
+tipo_relleno=Remplir\:
+tipo_simbolo=Type de symbole\:
+tipos_de_documentos=Type de documents
+titulo=Gestionnaire de projet
+titulo_confirmar=Confirmer le titre
+titulo_fframetext=Titre du champs texte
+toda_la_tabla=Toute la table
+Toquen=touchent
+transparencia=Transparence
+Transparencia=Transparence
+Triangulo=Triangle
+Un_Layer=Une couche doit-\u00EAtre s\u00E9lectionn\u00E9e
+unidades=Unit\u00E9s\:
+Unidades=Unit\u00E9s\:
+untitled=Sans titre
+Usar_indice_espacial=Utiliser indice spatial
+usar_marco=Utiliser le cadre
+usar_rango=Utiliser un seuil
+usar_titulo=Utiliser titre
+usuario=utilisateur
+utilizar_margenes_impresora=Utiliser les marges de l'imprimante.
+vacia=Vide
+Valor=Valeur
+Valor_azul=Valeur bleu
+Valor_Bandas=Valeur des bandes
+valor_pixel=Valeur du pixel
+Valor_rojo=Valeur rouge
+Valor_verde=Valeur vert
+Valores=Valeurs
+Valores_unicos=Valeurs uniques
+Valores_Unicos=Valeurs uniques
+varianza=Variance
+ventana_proyecto=Fen\u00EAtre de projet
+Ver=Afficher
+ver_tabla_atributos=Voir la table des attributs
+ver_tooltip=Afficher la fen\u00EAtre de projet
+vertical=Vertical
+visible=Visible
+visibles=Toutes visibles
+Vista=Vue
+vistas=Vues
+visualizacion=Vues
+Visualizacion=Visualiser
+visualizar_cuadricula=Afficher la grille
+wcs_properties=Propri\u00E9t\u00E9s WCS
+WMS=WMS
+xmax=X minimum
+xmin=X minimum
+Yardas=Yards
+ymax=Y minimum
+ymin=Y minimum
+Zoom=Zoomer
+Zoom_Acercar=Zoom rapprocher
+Zoom_al_Tema=Zoom sur la couche
+Zoom_Alejar=Zoom \u00E9loigner
+Zoom_Completo=Vue g\u00E9n\u00E9rale
+Zoom_Completo_Vista=Zoom complet dans le cadre
+Zoom_Mas=Zoom arri\u00E8re
+Zoom_Mas_Vista=Zoom arri\u00E8re dans le cadre
+Zoom_Menos=Zoom avant
+Zoom_Menos_Vista=Zoom avant dans le cadre
+Zoom_pixel=Zoom a la r\u00E9solution du raster
+Zoom_Previo=Zoom pr\u00E9c\u00E9dent
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom \u00E0 la s\u00E9lection
+zooms=D\u00E9placement

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_de.properties	(revision 42196)
@@ -0,0 +1,629 @@
+#text_de.properties
+__espacio_vertical=Vertikaler Abstand\:
+__lineas=Linien
+__proyeccion_actual=Aktuelle Projektion\:
+__redimensionar_texto_escala=Textgr\u00F6\u00DFe an den Ansichtsma\u00DFstab anpassen
+__seleccion_de_fuente=Auswahl der Schriftart
+_(Etiquetas_estandar)=(Standard-Etiketten)
+_(Intervalos)=(Intervalle)
+_(Simbolo_unico)=(Einmaliges Symbol)
+_(Valores_unicos)=(Einmalige Werte)
+(escala_maxima)=(Gr\u00F6\u00DFter Ma\u00DFstab)
+(escala_minima)=(Kleinster Ma\u00DFstab)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+abajo=Nach unten
+abrir=\u00D6ffnen
+Abrir_Imagen=Bild \u00F6ffnen
+abrir_plantilla=Vorlage \u00F6ffnen
+abrir_proyecto=Projekt \u00F6ffnen
+abrir_tooltip=Vorhandenes Projekt \u00F6ffnen
+Abrir_una_capa=Layer \u00F6ffnen
+Accion_Predefinida=Vordefinierte Aktion
+aceptar=OK
+Aceptar=OK
+acerca_de=\u00DCber...
+activar_regla=Lineal aktivieren
+activos=Aktiv
+adjust_transparency=Transparenz anpassen
+agrupar=Gruppieren
+agrupar_capas=Layer gruppieren
+agrupar_graficos=Grafiken gruppieren
+agrupar_linea=Grafiklinie mit Grafiken gruppieren
+Ajustar_cobertura_wcs=WCS-Cover anpassen
+Ajustar_transparencia=Transparenz anpassen
+ajustes_linea_grafica=Anpassung Grafiklinie
+Al_leer_la_leyenda=Beim Lesen der Legende
+alerta=Achtung
+alias=Alias
+alineamiento=Ausrichtung\:
+alinear=Ausrichtung
+alinear_graficos=Grafiken ausrichten
+alta=Hoch
+alto=Hoch
+altura=H\u00F6he\:
+Altura_fija_de_texto=Fixierte Texth\u00F6he
+ambito=Bereich
+Anadir=Hinzuf\u00FCgen
+Anadir_al_conjunto=Zum Datensatz hinzuf\u00FCgen
+Anadir_capa=Layer hinzuf\u00FCgen
+Anadir_Capa=Layer hinzuf\u00FCgen
+Anadir_todos=Alle hinzuf\u00FCgen
+ancho=Breite
+ancho_alto=Breite x H\u00F6he
+Ancho_Contorno=Konturbreite
+Ancho_de_linea=Linienbreite
+anchura=Breite\:
+angulo_rotacion=Drehwinkel\:
+anterior=Zur\u00FCck
+Anterior=Zur\u00FCck
+Aplicar=Anwenden
+Archivo=Datei
+Archivos_de_Disco=Disketten-Dateien
+area_trabajo=Arbeitsbereich
+arriba=Nach oben
+ascending_order=Aufsteigende Ordnung
+ascending_order_tooltip=Sortierung nach dem ausgew\u00E4hlten Feld in aufsteigender Ordnung.
+Atributo=Attribut
+automatico=Automatisch
+Ayuda=Hilfe
+back=Zur\u00FCck
+Back=Zur\u00FCck
+background_color=Hintergrundfarbe
+baja=Niedrig
+Bajar_capa=Layer nach unten
+bandas=Farbstreifen
+bands=Farbstreifen
+barra=Balken\:
+base_datos=Datenbank
+bd=db
+bmp=BMP-Dateien
+Bold=Fett
+borra_seleccion=Auswahl l\u00F6schen
+borrador=Entwurf
+borrar=L\u00F6schen
+Calcular_intervalos=Intervalle berechnen
+calidad=Qualit\u00E4t
+Cambio_Color=Farbe \u00E4ndern
+Cambio_de_estilo=Stil \u00E4ndern
+Cambio_Estilo=Stil \u00E4ndern
+cambio_nombre=Namen \u00E4ndern
+Cambios_de_estilo=Stil \u00E4ndern
+campo=Feld
+Campo=Feld
+campo_altura_texto=H\u00F6he Textfeld\:
+Campo_clasifica=Klassifikationsfeld
+Campo_de_clasificacion=Klassifikationsfeld
+campo_de_documentos_asociados=Feld der verbundenen Dokumente
+Campo_de_etiquetado=Etikettierfeld
+Campos=Felder
+cancel=Abbrechen
+Cancel=Abbrechen
+cancelar=Abbrechen
+Cancelar=Abbrechen
+Capa=Layer
+Capas=Layer
+Capas_del_localizador=Navigatorlayer
+capaWMS=WMS-Layer
+cargar_leyenda=Legende laden
+cartografico=kartografisch
+causa_error_desconocida=Unerwarteter Server-Fehler
+Centimetros=Zentimeter
+cerrar=Schlie\u00DFen
+Cerrar=Schlie\u00DFen
+circulo=Kreis
+Circulo=Kreis
+clave=Passwort
+Coberturas=Covers
+coincidir_tamano=Gr\u00F6\u00DFe angleichen\:
+colocar_a_margenes=Zu den R\u00E4ndern anordnen
+colocar_alrededor_seleccionados=Um ausgew\u00E4hlte Graphiken anordnen.
+colocar_alrededor_todos=Um alle Grafiken anordnen.
+colocar_delante=Nach vorn
+colocar_detras=Nach hinten
+color=Farbe\:
+Color_Contorno=Konturfarbe\:
+Color_de_la_Linea=Strichfarbe\:
+Color_de_Relleno=F\u00FCllfarbe\:
+Color_final=Endfarbe\:
+Color_inicial=Anfangsfarbe\:
+Color_inicio=Anfangsfarbe\:
+color_texto=Textfarbe\:
+comentarios=Kommentare
+conectar=Verbinden
+conexion_correcta=Verbindung korrekt
+configuracion_andami_tooltip=Konfiguration Andami
+configurar=Konfigurieren
+configurar_localizador=Navigator konfigurieren
+Configurar_localizador=Navigator konfigurieren ...
+confirmar_borrar=Sind Sie sicher, dass Sie dieses Element l\u00F6schen wollen?
+conservar_escala_visualizacion=Darstellungsma\u00DFstab beibehalten
+consulta=Abfrage
+Contengan=beinhalten
+coor_geograficas=Geografische Koordinaten
+creation_date=Erstellungsdatum
+Crucen_con=sich kreuzen mit
+Cruz=Kreuz
+Cuadrado=Quadrat
+cuando_activo=Wenn aktiv
+Dado_un_campo_de_atributos=Bei vorgegebenen Attributfeld\:
+debe_estar_activada=Sollte aktiviert sein.
+Derecha=Rechts
+Derecho=Rechts
+desagrupar=Gruppe aufl\u00F6sen
+desagrupar_graficos=Grafikgruppe aufl\u00F6sen
+descending_order=Absteigende Ordnung
+descending_order_tooltip=Sortierung nach dem ausgew\u00E4hlten Feld in absteigender Ordnung.
+desconectar=Verbindung aufl\u00F6sen
+descripcion=Beschreibung
+Descripcion=Beschreibung
+desde_arriba=Von oben\:
+desde_izquierda=Von links\:
+Desplazamiento=Verschieben
+desviacion_tipica=Typische Abweichung
+detalles=Details
+Detalles=Details
+DGNFiles=DGN-Datei
+distance_units=Ma\u00DFeinheiten
+distribuir=Verteilen\:
+divisiones_izquierda=Teilungen auf der linken Seite
+documentos_existentes=Vorhandene Dokumente
+driver=Treiber
+drivers=Treiber
+Dxffiles=DXF-Dateien
+editable=Editierbar
+Editar_leyenda=Legende editieren
+editar_propiedades=Eigenschaften editieren
+el_numero_maximo_de_intervalos_para_este_campo_es=Die maximal Intervallenummer f\u00FCr dieses Feld ist
+Elegir_Color=Farbe ausw\u00E4hlen
+Elegir_Fuente=Schriftart ausw\u00E4hlen
+Elementos_seleccionados_de_la_capa=ausgew\u00E4hlte Elemente des Layers
+Eliminar=L\u00F6schen
+eliminar_capa=Layer l\u00F6schen
+eliminar_extremos=Extreme l\u00F6schen
+en_el_mapa=Auf der Karte\:
+En_metros=In Metern
+En_pixels=In Pixeln
+Encuadre=Bildausschnitt
+Encuadre_Vista=Ansicht im Bildausschnitt verschieben
+enlace_vivo=Aktiver Link zum Original
+Enlazar_a_fichero_de_texto=Link zu Textdateien
+Enlazar_a_ficheros_de_imagen=Link zu Bilddateien
+equal_intervals=Gleiche intervalle
+Error_abriendo_el_fichero=Fehler bei \u00D6ffnen der Datei
+Error_accediendo_a_los_datos=Fehler beim Zugriff auf die Daten
+error_comunicacion_servidor=Verbindungsfehler mit dem Server
+error_escritura=Das Projekt konnte nicht gespeichert werden
+Error_guardando_la_leyenda=Fehler beim Speichern der Legende
+error_lectura=Das Projekt konnte nicht ge\u00F6ffnet werden\n
+escala=Ma\u00DFstab
+Escala=Ma\u00DFstab
+escala_maxima=Maximalma\u00DFstab
+Escala_Maxima=Gr\u00F6\u00DFter Ma\u00DFstab
+escala_minima=Minimalma\u00DFstab
+Escala_Minima=Kleinster Ma\u00DFstab
+escala_usuario=Benutzerdefinierter Ma\u00DFstab
+espaciado_horizontal=Horizontaler Rasterabstand
+espaciado_vertical=Vertikaler Rasterabstand
+espacio=Leerzeichen\:
+espere=Warten Sie bitte.
+estadisticas=Statistiken
+este_por_debajo_de_=Kleiner ist als
+este_por_encima_de=Gr\u00F6\u00DFer ist als
+Esten_contenidos_en=enthalten sind in
+Estilo=Stil\:
+Etiqueta=Etikett
+Etiquetado=Etikettierung
+Etiquetados=Etikettierung
+etiquetas=Etiketten\:
+Etiquetas_estandar=Standard-Etiketten
+Examinar=Browse
+exportar=Exportieren
+exportar_a=Exportieren nach...
+exportar_pdf=Als pdf exportieren.
+extension=Verl\u00E4ngerung
+Extent=Bildbereich
+extents_no_coincidentes=Die ausgew\u00E4hlte Bildgr\u00F6\u00DFe stimmt nicht mit dem Originalbild \u00FCberein.
+fallo_crear_conexion=Verbindungsfehler
+fallo_crear_pool=Fehler beim Herstellen des Verbindungspools
+fallo_obtener_conexion_existente=Fehler beim Laden einer bestehenden Verbindung
+fallo_obtener_tablas=Fehler beim Laden der Tabellen von der Datenbank
+fallo_realizar_consulta=Abfragefehler
+fallo_registrar_conexion=Fehler bei der Verbindungsregistrierung
+Fichero=Datei
+fichero_existe=Ausgew\u00E4hlte Datei existiert schon als Layergruppe.
+fichero_incorrecto=Unrichtige Datei
+filtro=Filter
+finalizar=Beenden
+finish=Beenden
+Font=Schriftart
+formato=Format
+Formato=Format
+formato_incorrecto=Unrichtig Format
+fuente=Schriftart
+Fuente=Schriftart
+General=Allgemein
+Generar_Intervalos=Intervalle erzeugen
+gestion_encuadre=Verwaltung der Bildausschnitte
+grados=Grad\:
+Graficos=Grafiken
+Grosor_de_linea=Strichst\u00E4rke
+grosor_linea=Strichst\u00E4rke
+guardado=Gespeichert in
+Guardar=Speichern
+guardar_cambios=\u00C4nderungen speichern?
+guardar_clave=Passwort speichern
+guardar_como=Speichern unter ...
+guardar_como_plantilla=als Vorlage speichern
+Guardar_el_zoom_actual=Aktuellen Zoom speichern
+guardar_leyenda=Legende speichern
+Guardar_leyenda=Legende speichern
+guardar_proyecto=Projekt speichern
+guardar_tooltip=Speichert die \u00C4nderungen des Projekts
+Habilitar_etiquetado=Etikettierung aktivieren
+hasta=bis
+Herramientas=Werkzeuge
+Herramientas_vista=Ansichtswerkzeuge
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+host=host
+hostname=Hostname
+Identificar_Resultados=Ergebnisse identifizieren
+Igual_que_la_impresora=Wie Drucker
+igual_todos_lados=Gleiche Verschiebung in alle Richtungen
+imagen=Bild
+Imagen=Bild
+importar=Importieren
+importar_extent=Aktuellen Ansichtsbereich importieren.
+Imprimir=Drucken
+Inferior=Unten
+info=Information
+infobreak=Zeigt die Elemente des Layers mit der gleichen Farbpalette.
+infodef=Zeigt alle Elemente des Layers mit dem gleichen Symbol.
+informacion=Information
+Informacion=Information
+infovalue=Zeigt Elemente des Layers mit je einem Symbol pro Wert.
+Inicializando=Initialisiert
+Insertar=Einf\u00FCgen
+insertar_circulo=Kreis einf\u00FCgen
+insertar_escala=Ma\u00DFstab einf\u00FCgen
+insertar_imagen=Bild einf\u00FCgen
+insertar_leyenda=Legende einf\u00FCgen
+insertar_linea=Linie einf\u00FCgen
+insertar_norte=Nordung einf\u00FCgen
+insertar_poligono=Polygon einf\u00FCgen
+insertar_punto=Punkt einf\u00FCgen
+insertar_recta=Gerade einf\u00FCgen
+insertar_rectangulo=Rechteck einf\u00FCgen
+insertar_texto=Text einf\u00FCgen
+insertar_vista=Ansicht einf\u00FCgen
+Intersecten_con=sich \u00FCberschneiden mit
+Intervalo=Intervall
+Intervalos=Intervalle
+Intervalos_equidistantes=Gleichwertige IIntervalle
+Intervalos_por_rupturas_naturales=Intervalle durch nat\u00FCrliche Brechungen
+introduce_nombre=Geben Sie den neuen Namen ein.
+Italic=Kursiv
+Izquierda=Links
+Izquierdo=Links
+join=Verbindung
+jpg=JPEG-Datei
+kilometros=Kilometer
+Kilometros=Kilometer
+leyenda=Legende
+Leyenda=Legende
+leyenda_campo_unido=Man verwendt ein Field der Verbindung in der Legende (und/oder Etikettierung). Tauschen Sie die Legende vorher aus, die Verbindung aufzul\u00F6sen.
+Leyenda_Por_Defecto=Legende nach Vorgabe
+linea=Linie
+Linea=Linie
+linea_grafica=Grafiklinie
+lineal_directo=Direktlineal
+linf_der=x unten rechts
+link=Link
+Link=Link
+Localizador_por_atributo=F\u00FCr Attribut lokalisieren
+lppp=dpi
+lsup_izq=x oben links
+malla_activada=Raster aktiviert
+mantener_intervalo=Intervall beibehalten
+map_units=Karteneinheiten
+Mapa=Karte
+mapas=Karten
+marco=Rahmen
+marco_vista=Ansichtsrahmen
+margenes=R\u00E4nder\:
+Mas_100=Die Anzahl der Werte ist h\u00F6her als 100 und es ist keine Information verf\u00FCgbar.
+mas_de_100_simbolos=Mehr als 100 Symbols liefern keine Information zu der Karte
+maximo=Maximal
+media=Mittel
+medir_area=Fl\u00E4che messen
+medir_distancias=Abst\u00E4nde messen
+metros=Meter
+Metros=Meter
+Milimetros=Milimeter
+Millas=Meilen
+minimo=Minimal
+modification_date=Letzte \u00C4nderung
+mosaico_tooltip=Mosaik
+Mostrar_Contorno=Kontur zeigen
+mostrar_descripcion=Beschreibung anzeigen.
+Mostrar_siempre=Immer zeigen
+mostrar_unidades=Einheiten anzeigen
+Muestra_atributos=Zeigt die Attribute der ausgew\u00E4hlten Layer.
+muestra_consola_tooltip=Zeigt die Konsole an.
+Muestra_los_atributos_de_las_capas_seleccionadas=Zeigt die Attribute der ausgew\u00E4hlten Layer.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zeigt Elemente des Layers mit je einem Symbol pro Wert.
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zeigt die Elemente des Layers mit der gleichen Farbpalette, abh\u00E4ngig vom Wert eines bestimmten Attributfelds.
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zeigt alle Elemente des Layers mit dem gleichen Symbol.
+natural_intervals=Nat\u00FCrliche Intervalle
+navegacion=\u00DCbersicht
+navegacion_vista=\u00DCbersicht der Ansicht
+necesita_un_tema_activo=Es wird ein aktiviertes Thema ben\u00F6tigt.
+necesita_un_tema_vectorial_activo=Es wird ein aktiviertes Vektorthema ben\u00F6tigt.
+next=Weiter
+Next=Weiter
+ninguna_impresora_configurada=Kein Drucker konfiguriert
+Nivel_de_transparencia=Transparenzgrad\n
+no_activos=inaktiv
+No_de_intervalos=Anzahl Intervalle
+No_mostrar=Den Layer nicht zeigen, wenn der Ma\u00DFstab ...
+No_mostrar_la_capa_cuando_la_escala=Den Layer nicht zeigen, wenn der Ma\u00DFstab ...
+No_reconocido=Nicht erkannt
+No_Shape=Dieser Layer ist kein Shape.
+no_visibles=Unsichtbar
+nombre=Name
+Nombre=Name
+nombre_capa=Name des Layers
+nombre_cobertura=Name der Bedeckung
+Nombre_que_se_le_dara_al_zoom=Name des Zooms
+nombre_sesion=Name der Session
+Nombres=Namen
+normal=Normal
+north=Nord
+Nueva_tabla=Neue Tabelle
+nuevo=Neu
+Nuevo_conjunto=Neuer Datensatz
+nuevo_proyecto=Neues Projekt
+nuevo_tamano_fuente=Neue Schriftgr\u00F6\u00DFe\:
+nuevo_tooltip=Erstellt ein neues Projekt
+num_bandas=Anzahl Farbstreifen
+N\u00FAm_intervalos=Anzahl Intervalle
+numero_incorrecto=Unrichtig Nummer
+ok=OK
+opacidad=Lichtundurchl\u00E4ssigkeit
+orientacion=Ausrichtung
+Origen_de_datos=Herkunft der Daten
+Origen_de_Datos=Herkunft der Daten\:
+Otros=Andere
+owner=Besitzer
+parametros=Parameter
+Parametros=Parameter
+path=Pfad
+Perimetro=Umfang
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Erm\u00F6glicht das Etiketieren von Elementen der Karte, mit dem Wert eines bestimmten Felds.
+Personalizado=Benutzerdefiniert
+Pies=Feet
+pixeles=Pixel
+Plain=Einfach
+png=PNG-Datei
+poligono=Polygon
+poner_temas_a=Themeneinstellungen ...
+por_debajo_de=unter\:
+por_encima_de=\u00FCber\:
+Por_favor_active_el_tema=Aktivieren Sie bitte das Thema.
+posicion_linea=Position der Linie
+preparar_pagina=Seite einrichten
+Preparar_pagina=Seite einrichten
+presentacion=Pr\u00E4sentation
+Previsualizacion=Voransicht
+Previsualizacion_de_simbolo=Symbolvoransicht
+propiedades=Eigenschaften
+Propiedades_de_la_Capa=Eigenschaften des Layers
+propiedades_del_tema=Eigenschaften des Themas
+Propiedades_del_Tema=Eigenschaften des Themas
+Propiedades_escala_grafica=Eigenschaften des Ma\u00DFstabsbalkens
+propiedades_grafico=Eigenschaften der Grafik
+propiedades_mapa=Eigenschaften der Karte
+propiedades_marco_imagenes=Eigenschaften des Bildrahmens
+propiedades_marco_leyenda=Eigenschaften des Legenderahmens
+propiedades_marco_vista=Eigenschaften des Ansichtsrahmens
+propiedades_raster=Eigenschaften der Rasterung
+propiedades_sesion=Eigenschaften der Session
+propiedades_tabla=Eigenschaften der Tabelle
+propiedades_tema=Eigenschaften des Themas
+Propiedades_texto=Eigenschaften des Textes
+propiedades_vista=Eigenschaften der Ansicht
+prueba_conexion=\u00FCberpr\u00FCfen der Verbindung
+puerto=port
+Pulgadas=Inches
+punto=Punkt
+quantile_intervals=Quantile Intervalle
+quiere_continuar=W\u00F6llen Sie wietermachen?
+Quitar=Entfernen
+Quitar_capa=Layer entfernen
+quitar_enlaces=Links aufl\u00F6sen
+Quitar_todos=Alle entfernen
+Quitar_Todos=Alle entfernen
+quitar_uniones=Verbindungen aufl\u00F6sen
+rango_de_escalas=Ma\u00DFstabsbereich
+Rango_de_escalas=Ma\u00DFstabsbereich
+Rasterfiles=Rasterungsdateien
+realce=Heraushebung
+recorte=zuschnitt
+recorte_colas=Zuschnitt der Randbereiche
+recorte_vista=Ausschneiden nach Augenma\u00DF
+recta=Gerade
+rectangulo=Rechteck
+recuento=Nachz\u00E4hlung
+Recuperar_leyenda=Legende laden
+Recuperar_y_eliminar_otros_zoom=Andere Zooms laden oder l\u00F6schen
+refrescar=Aktualisieren
+registros=Register
+registros_seleccionados_total=Alle ausgew\u00E4hlten Register
+rellenar_marco_vista=Ansichtsrahmen f\u00FCllen
+relleno=F\u00FCllung\:
+renombrar=Umbenennen
+reproyectar_aviso=Die Layerprojektion deckt sich nicht mit der Ansichtsprojektion. \nACHTUNG\: Bei einigen Transformationen k\u00F6nnte sie ungenau sein.\nLesen Sie bitte die Dokumentation.
+reproyectar_pregunta=W\u00FCnschen Sie eine neue Projektion?
+resolucion=Aufl\u00F6sung
+resolucion_resultado=Ausgabeauf\u00F6sung\:
+respuesta_error_servidor=Konnte das Cover nicht bekommen.
+resto_valores=Andere Werte
+salir=Schlie\u00DFen
+Salir=Schlie\u00DFen
+salir_tooltip=Schlie\u00DFen
+salvar_raster=Als Rasterung sichern
+Sample=Beispiel
+Se_superponen_a=sich \u00FCberlagern \u00FCber
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=L\u00F6schen aller Register ab ...
+Sean_disjuntos_a=getrennt sind von
+Sean_iguales_a=gleich sind wie
+seleccion=Auswahl
+seleccion_campos=W\u00E4hlen Sie die Felder aus.
+seleccion_fuente=Schriftart w\u00E4hlen
+Seleccion_por_tema=Auswahl \u00FCber Thema
+Seleccionar=ausw\u00E4hlen
+seleccionar_capas=Layer ausw\u00E4hlen
+seleccionar_coberturas=Covers ausw\u00E4hlen
+seleccionar_CRS=CRS ausw\u00E4hlen
+Seleccionar_de_las_capas_activas_los_elementos_que=In den aktiven Layern nach Elementen suchen, die\:
+Seleccionar_del_conjunto=Aus dem Datensatz ausw\u00E4hlen
+Seleccionar_fichero=Datei ausw\u00E4hlen
+seleccionar_formato=Format ausw\u00E4hlen
+seleccionar_parametros=Parameter ausw\u00E4hlen
+seleccionar_por_punto=\u00DCber Punkt ausw\u00E4hlen
+seleccionar_por_rectangulo=Auswahlrahmen
+seleccionar_tiempo=Zeitposition ausw\u00E4hlen
+seleccionar_todos=Alle ausw\u00E4hlen
+seleccione_campo_enlace=W\u00E4hlen Sie das Feld aus, \u00FCber das Sie verlinken wollen.
+seleccione_fecha=W\u00E4hlen sie ein Datum aus ...
+seleccione_tabla=W\u00E4hlen sie die Tabelle aus.
+seleccione_tabla_a_enlazar=W\u00E4hlen Sie die Tabelle aus, die Sie verlinken wollen.
+seleccione_tabla_origen=W\u00E4hlen Sie die Originaltabelle f\u00FCr die Verbindung aus.
+select_all=Alle ausw\u00E4hlen
+select_geom_field=W\u00E4hlen Sie das Feld mit der Geometrie aus.
+select_none=Alle aus der Auswahl entfernen
+select_unique_field=W\u00E4hlen Sie das einmalige Feld aus.
+selection_color=Farbe der Auswahl
+servidor=Server
+Servidor=Server
+servidor_wcs_no_responde=Der ausgew\u00E4hlte Server reagiert nicht.
+shape_seleccion=Auswahl exportieren
+Shapefile=Shapefile
+Shapefiles=SHP-Dateien
+siempre=Immer
+siguiente=Weiter
+Siguiente=N\u00E4chster
+Simbolo=Symbol
+S\u00EDmbolo=Symbol
+Simbolo_unico=Einmaliges Symbol
+Simbolo_Unico=Einmaliges Symbol
+Simbologia=Symbole
+simple=einfach
+simplificar=Vereinfachen
+sin_realce=Ohne Heraushebung
+sin_titulo=Ohne Titel
+sincronizar_color_borde_relleno=Die Randfarbe mit der F\u00FCllung synchronisieren.
+Size=Gr\u00F6\u00DFe
+sobre_la_barra=Auf dem Balken
+Solo_para_capas_vectoriales=Nur f\u00FCr Vektorlayer
+statistics=Statistiken
+Style=Stil
+Subir_capa=Layer nach oben
+suma=Summe
+Superior=Oben
+Tabla=Tabelle
+Tabla_de_Atributos=Attributtabelle
+Tabla_de_prueba=Testtabelle
+tablas=Tabellen
+tamano=Gr\u00F6\u00DFe\:
+tamano_metros=Gr\u00F6\u00DFe in Metern
+tamano_pagina=Seitenformat\:
+tamano_posicion=Gr\u00F6\u00DFe und Position
+tamanyo_borde=Randgr\u00F6\u00DFe
+tamanyo_fuente=Schriftgr\u00F6\u00DFe
+tarea_en_progreso=Auftrag wird bearbeitet.
+tema=Layer
+texto=Text
+Tiempo=Zeit
+tipo_dato=Datentyp
+tipo_de_intervalo=Intervallesart
+Tipo_de_intervalos=Intervalltyp
+tipo_de_leyenda=Legendentyp
+Tipo_de_leyenda=Legendentyp
+Tipo_de_linea=Strichtyp
+tipo_fichero_proyecto=Projektdatei gvSIG (*.gvsproj)
+tipo_leyenda=Legendentyp-Datei (*.GVL)
+tipo_linea=Strichtyp\:
+Tipo_no_reconocido=Typ nicht erkannt
+tipo_relleno=F\u00FCllstil\:
+tipo_simbolo=Symboltyp\:\:
+tipos_de_documentos=Dokumenttyp\:
+titulo=Projektverwalter
+titulo_confirmar=Best\u00E4tigung
+titulo_fframetext=Titel des Textfelds
+toda_la_tabla=Die gesamte Tabelle
+Toquen=fassen an
+transparencia=Transparenz
+Transparencia=Transparenz
+Triangulo=Dreieck
+Un_Layer=W\u00E4hlen Sie mindestens einen Layer aus.
+unidades=Einheiten\:
+Unidades=Einheiten\:
+untitled=Ohne Titel
+Usar_indice_espacial=r\u00E4umlichen Index benutzen
+usar_marco=Rahmen verwenden
+usar_rango=Eine Rangordnung benutzen
+usar_titulo=Titel verwenden
+usuario=Benutzer
+utilizar_margenes_impresora=Randbegrenzung des Druckers verwenden
+vacia=Leer
+Valor=Wert
+Valor_azul=Wert Blau
+Valor_Bandas=Wert Farbstreifen
+valor_pixel=Pixelwert
+Valor_rojo=Wert Rot
+Valor_verde=Wert Gr\u00FCn
+Valores=Werte
+Valores_unicos=Einmalige Werte
+Valores_Unicos=Einmalige Werte
+varianza=Varianz
+ventana_proyecto=Projektfenster
+Ver=Sehen
+ver_tabla_atributos=Attributtabelle sehen
+ver_tooltip=Zeigt das Projektfenster
+vertical=Vertikal
+visible=Sichtbar
+visibles=Sichtbar
+Vista=Ansicht
+vistas=Ansichten
+visualizacion=Darstellung
+Visualizacion=Visualisierung
+visualizar_cuadricula=Raster darstellen
+wcs_properties=WCS-Eigenschaften
+WMS=WMS
+xmax=Maximalwert x
+xmin=Minimalwert x
+Yardas=Yards
+ymax=Maximalwert y
+ymin=Minimalwert y
+Zoom=Zoom
+Zoom_Acercar=heranzoomen
+Zoom_al_Tema=Auf den Layer zoomen
+Zoom_Alejar=wegzoomen
+Zoom_Completo=Zoom auf Alles
+Zoom_Completo_Vista=Zoom auf Alles im Bildausschnitt
+Zoom_Mas=Gr\u00F6\u00DFer zoomen
+Zoom_Mas_Vista=Im Bildausschnitt gr\u00F6\u00DFer zoomen
+Zoom_Menos=Kleiner zoomen
+Zoom_Menos_Vista=Im Bildausschnitt kleiner zoomen
+Zoom_pixel=Zoom zur Rasteraufl\u00F6sung
+Zoom_Previo=Letzter Zoom
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zur Auswahl zoomen
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_eu.properties	(revision 42196)
@@ -0,0 +1,628 @@
+#text_eu.properties
+__espacio_vertical=Espazio bertikala\:
+__lineas=lerroak
+__proyeccion_actual=Egungo proiekzioa\:
+__redimensionar_texto_escala=Testua bistaren eskalara egokitu.
+__seleccion_de_fuente=Letra-tipoa aukeratu
+_(Etiquetas_estandar)=(Etiketa estandarrak)
+_(Intervalos)=(Tarteak)
+_(Simbolo_unico)=(Ikur bakarra)
+_(Valores_unicos)=(Balio bakarrak)
+(escala_maxima)=(eskala handiena)
+(escala_minima)=(eskala txikiena)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+abajo=Behera
+abrir=Ireki
+Abrir_Imagen=Irudia ireki
+abrir_plantilla=Ireki txantiloia
+abrir_proyecto=Proiektua ireki
+abrir_tooltip=Aurreko proiektu bat irekitzen du
+Abrir_una_capa=Geruza bat gaineratu
+Accion_Predefinida=Aurretik zehaztutako ekintza
+aceptar=Ados
+Aceptar=Ados
+acerca_de=Honi buruz\:
+activar_regla=Erregela aktibatu
+activos=Aktiboak
+adjust_transparency=Doitu gardentasuna
+agrupar=Multzokatu
+agrupar_capas=Multzokatu geruzak
+agrupar_graficos=Multzokatu grafikoak
+agrupar_linea=Lerro grafikoa grafikoekin multzokatu.
+Ajustar_cobertura_wcs=WCS estaldura doitu
+Ajustar_transparencia=Doitu gardentasuna
+ajustes_linea_grafica=Lerro grafikoaren doitzeak
+Al_leer_la_leyenda=Legenda irakurtzean
+alerta=Oharra
+alias=Ezizena
+alineamiento=Lerrokadura
+alinear=Lerrokatu
+alinear_graficos=Grafikoak lerrokatu
+alta=Goi
+alto=Goi
+altura=Altura\:
+Altura_fija_de_texto=Testuaren altura finkoa
+ambito=Esparrua
+Anadir=Gehitu
+Anadir_al_conjunto=Gehitu multzoari
+Anadir_capa=Gehitu geruza
+Anadir_Capa=Gehitu geruza
+Anadir_todos=Gehitu guztiak
+ancho=Zabalera
+ancho_alto=Zabalera X Altuera
+Ancho_Contorno=Ingeradaren zabalera
+Ancho_de_linea=Lerroaren zabalera
+anchura=Zabalera\:
+angulo_rotacion=biraketa angelua\:
+anterior=Aurrekoa
+Anterior=Aurrekoa
+Aplicar=Aplikatu
+Archivo=Fitxategia
+Archivos_de_Disco=Disko-fitxategiak
+area_trabajo=Lan eremua
+arriba=Gora
+ascending_order=Goranzko hurrenkera
+ascending_order_tooltip=Ordenatu hautatutako eremua goranzko hurrenkeran
+Atributo=Atributua
+automatico=Automatikoa
+Ayuda=Laguntza
+back=Aurrekoa
+Back=Aurrekoa
+background_color=Atzeko kolorea
+baja=Behe
+Bajar_capa=Jaitsi geruza
+bandas=Bandak
+bands=Bandak
+barra=Barra\:
+base_datos=Datu-baseak
+bd=bd
+bmp=bmp motako fitxategiak
+Bold=Bold
+borra_seleccion=Ezabatu aukeraketa
+borrador=Zirriborroa
+borrar=Ezabatu
+Calcular_intervalos=Kalkulatu bitarteak
+calidad=Kalitatea
+Cambio_Color=Kolore aldaketa
+Cambio_de_estilo=Estilo aldaketa
+Cambio_Estilo=Aldatu estiloa
+cambio_nombre=Izen aldaketa
+Cambios_de_estilo=Estilo aldaketak
+campo=Eremua
+Campo=Eremua
+campo_altura_texto=Testuaren altura eremua\:
+Campo_clasifica=Sailkapen eremua
+Campo_de_clasificacion=Sailkapen eremua
+campo_de_documentos_asociados=Atxikitako dokumentuen eremua
+Campo_de_etiquetado=Etiketatze eremua
+Campos=Eremuak
+cancel=Utzi
+Cancel=Utzi
+cancelar=Utzi
+Cancelar=Utzi
+Capa=Geruza
+Capas=Geruzak
+Capas_del_localizador=Bilagailuaren geruzak
+capaWMS=WMS geruza
+cargar_leyenda=Kargatu legenda
+cartografico=Kartografikoa
+causa_error_desconocida=Zerbitzariaren ustekabeko errorea
+Centimetros=Zentimetroak
+cerrar=Itxi
+Cerrar=Itxi
+circulo=Zirkulua
+Circulo=Zirkulua
+clave=Gakoa
+Coberturas=Estaldurak
+coincidir_tamano=Egokitu tamaina\:
+colocar_a_margenes=Jarri marjinak kontuan hartuta.
+colocar_alrededor_seleccionados=Jarri hautatutako grafikoen inguruan.
+colocar_alrededor_todos=Jarri grafiko guztien inguruan.
+colocar_delante=Jarri aurrean
+colocar_detras=Jarri atzean
+color=Kolorea\:
+Color_Contorno=Ingeradaren kolorea
+Color_de_la_Linea=Lerroaren kolorea\:
+Color_de_Relleno=Kolore-betegarria
+Color_final=Amaierako kolorea\:
+Color_inicial=Hasierako kolorea\:
+Color_inicio=Hasierako kolorea
+color_texto=Testuaren kolorea\:
+comentarios=Iruzkinak
+conectar=Konektatu
+conexion_correcta=Konexio zuzena
+configuracion_andami_tooltip=Andami konfigurazioa
+configurar=Konfiguratu
+configurar_localizador=Konfiguratu bilagailua
+Configurar_localizador=Konfiguratu bilagailua...
+confirmar_borrar=Ziur al zaude osagaia ezabatu nahi duzula?
+conservar_escala_visualizacion=Gorde bistaratze eskala
+consulta=Kontsulta
+Contengan=honakoak dituztenak
+coor_geograficas=Koor. geografikoak
+creation_date=Sortze data
+Crucen_con=hauekin gurutzatzen direnak
+Cruz=Gurutzea
+Cuadrado=Laukia
+cuando_activo=Aktibo dagoenean
+Dado_un_campo_de_atributos=Atributu eremua emanda dago
+debe_estar_activada=Aktibatuta egon behar da
+Derecha=Eskuina
+Derecho=Eskuina
+desagrupar=Desegin multzoak
+desagrupar_graficos=Desegin grafikoen multzoak
+descending_order=Beheranzko hurrenkera
+descending_order_tooltip=Ordenatu hautatutako eremua beheranzko hurrenkeran
+desconectar=Deskonektatu
+descripcion=Deskripzioa
+Descripcion=Deskripzioa
+desde_arriba=Goitik\:
+desde_izquierda=Ezkerretik\:
+Desplazamiento=Lekualdaketa
+desviacion_tipica=Ohiko desbideratzea
+detalles=Xehetasunak
+Detalles=Xehetasunak
+DGNFiles=.DGN fitxategiak
+distance_units=Neurri unitateak
+distribuir=Banatu\:
+divisiones_izquierda=Zatiketak ezkerrean
+documentos_existentes=Aurretik dauden dokumentuak
+driver=driver
+drivers=Driverrak
+Dxffiles=.DFX fitxategiak
+editable=Editagarria
+Editar_leyenda=Editatu legenda
+editar_propiedades=Editatu ezaugarriak
+el_numero_maximo_de_intervalos_para_este_campo_es=Eremu honek izan dezakeen tarte kopuru handiena hau da
+Elegir_Color=Hautatu kolorea
+Elegir_Fuente=Hautatu letra-tipoa
+Elementos_seleccionados_de_la_capa=geruzatik hautatu diren osagaiak
+Eliminar=Ezabatu
+eliminar_capa=Ezabatu geruza
+eliminar_extremos=Ezabatu muturrak
+en_el_mapa=Mapan\:
+En_metros=Metrotan
+En_pixels=Pixeletan
+Encuadre=Enkoadraketa
+Encuadre_Vista=Bistaren gaineko enkoadraketa
+enlace_vivo=Lotura bizia
+Enlazar_a_fichero_de_texto=Testu fitxategietara estekatu
+Enlazar_a_ficheros_de_imagen=Irudi fitxategietara estekatu
+equal_intervals=Tarte berdinak
+Error_abriendo_el_fichero=Errorea fitxategia irekitzean
+Error_accediendo_a_los_datos=Errorea datuak atzitzean
+error_comunicacion_servidor=Errorea zerbitzariarekin komunikatzean
+error_escritura=Ezin izan da proiektua gorde
+Error_guardando_la_leyenda=Errorea legenda gordetzean
+error_lectura=Ezin izan da proiektua ireki
+escala=Eskala
+Escala=Eskala
+escala_maxima=eskala handiena
+Escala_Maxima=Eskala handiena
+escala_minima=eskala txikiena
+Escala_Minima=Eskala txikiena
+escala_usuario=Erabiltzaileak zehaztutako eskala
+espaciado_horizontal=Sarearen tarte horizontala
+espaciado_vertical=Sarearen tarte bertikala
+espacio=Espazioa\:
+espere=Itxaron, mesedez
+estadisticas=Estatistikak
+este_por_debajo_de_=Honen azpitik egotea\:
+este_por_encima_de=Honen gainetik egotea\:
+Esten_contenidos_en=hemen daudenak
+Estilo=Estiloa\:
+Etiqueta=Etiketa
+Etiquetado=Etiketak
+Etiquetados=Etiketatuak
+etiquetas=Etiketak\:
+Etiquetas_estandar=Etiketa estandarrak
+Examinar=Aztertu
+exportar=Esportatu
+exportar_a=Hona esportatu\:
+exportar_pdf=Esportatu pdf batera
+extension=Luzapena
+Extent=Extent
+extents_no_coincidentes=Hautatutako irudiaren extent-a ez dator bat jatorrizko irudiarekin.
+fallo_crear_conexion=Hutsegitea konexioa sortzerakoan
+fallo_crear_pool=Hutsegitea konexioen elkarbiltzea sortzerakoan
+fallo_obtener_conexion_existente=Hutsegitea sortutako konexioa eskuratzerakoan
+fallo_obtener_tablas=Hutsegitea datu-baseko taulak eskuratzerakoan
+fallo_realizar_consulta=Hutsegitea kontsulta egiterakoan
+fallo_registrar_conexion=Hutsegitea konexioaren erregistroan
+Fichero=Fitxategia
+fichero_existe=Hautatutako fitxategia lehendik badago, geruzaren banda moduan
+fichero_incorrecto=Fitxategia ez da zuzena
+filtro=Iragazkia
+finalizar=Bukatu
+finish=Bukatu
+Font=Letra-tipoa
+formato=Formatua
+Formato=Formatua
+formato_incorrecto=Formatoa ez da zuzena
+fuente=Letra-tipoa
+Fuente=Letra-tipoa
+General=Orokorra
+Generar_Intervalos=Sortu tarteak
+gestion_encuadre=Enkoadraketen kudeaketa
+grados=Graduak\:
+Graficos=Grafikoak
+Grosor_de_linea=Lerroaren lodiera
+grosor_linea=Lerroaren lodiera\:
+guardado=Hemen gorde da\:
+Guardar=Gorde
+guardar_cambios=Aldaketak gorde nahi dituzu?
+guardar_clave=Gorde gakoa
+guardar_como=Gorde honela\:
+guardar_como_plantilla=Gorde txantiloi moduan
+Guardar_el_zoom_actual=Gorde zooma
+guardar_leyenda=Gorde legenda
+Guardar_leyenda=Gorde legenda
+guardar_proyecto=Gorde proiektua
+guardar_tooltip=Gorde proiektuaren aldaketak
+Habilitar_etiquetado=Gaitu etiketak
+hasta=Honaino\:
+Herramientas=Tresnak
+Herramientas_vista=Bistaren tresnak
+Hiperenlace=Hiperesteka
+horizontal=Horizontala
+host=host
+hostname=Hostname
+Identificar_Resultados=Identifikatu emaitzak
+Igual_que_la_impresora=Inprimagailuaren neurrira
+igual_todos_lados=Alde guztietatik berdin mugitzea.
+imagen=Irudia
+Imagen=Irudia
+importar=Inportatu
+importar_extent=Inportatu oraingo bistaren extent-a
+Imprimir=Inprimatu
+Inferior=Behean
+info=Info
+infobreak=Geruzaren osagaiak kolore-sorta erabiliz erakusten ditu.
+infodef=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu.
+informacion=Informazioa
+Informacion=Informazioa
+infovalue=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu.
+Inicializando=Hasten
+Insertar=Txertatu
+insertar_circulo=Txertatu zirkulua
+insertar_escala=Txertatu eskala
+insertar_imagen=Txertatu irudia
+insertar_leyenda=Txertatu legenda
+insertar_linea=Txertatu lerroa
+insertar_norte=Iparraldea txertatu
+insertar_poligono=Txertatu poligonoa
+insertar_punto=Txertatu puntua
+insertar_recta=Txertatu zuzena
+insertar_rectangulo=Txertatu laukizuzena
+insertar_texto=Txertatu testua
+insertar_vista=Txertatu bista
+Intersecten_con=hauekin ebakitzen direnak
+Intervalo=Tartea
+Intervalos=Tarteak
+Intervalos_equidistantes=Tarte distantziakideak.
+Intervalos_por_rupturas_naturales=Etete naturalen araberako tarteak.
+introduce_nombre=Sartu izen berria
+Italic=Italic
+Izquierda=Ezkerra
+Izquierdo=Ezkerra
+join=Lotura
+jpg=JPEG fitxategiak
+kilometros=Kilometroak
+Kilometros=Kilometroak
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Legendan (eta/edo etiketan)loturaren eremu bat erabiltzen ari zara. Mesedez, aldatu legenda lotunea kendu aurretik.
+Leyenda_Por_Defecto=Legenda lehenetsia
+linea=Lerroa
+Linea=Lerroa
+linea_grafica=Lerro grafikoa
+lineal_directo=Zuzeneko lineala
+linf_der=Beheko esk. X
+link=Lotura
+Link=Lotura
+Localizador_por_atributo=Ezaugarrien araberako bilagailua
+lppp=ppp
+lsup_izq=Goiko ezk. X
+malla_activada=Sarea aktibatuta
+mantener_intervalo=Tartea mantendu
+map_units=Maparen unitateak
+Mapa=Mapa
+mapas=Mapak
+marco=Markoa
+marco_vista=Bista-eremua
+margenes=Marjinak
+Mas_100=Balio kopurua 100 baino handiagoa da baina ez du informaziorik ematen
+mas_de_100_simbolos=100 sinbolo baino gehiagok ez diote planoari informaziorik eransten.
+maximo=Gehienez
+media=Batez beste
+medir_area=Azalera neurtu
+medir_distancias=Distantziak neurtu
+metros=Metroak
+Metros=Metroak
+Milimetros=Milimetroak
+Millas=Miliak
+minimo=Gutxienez
+modification_date=Aldatu zen azken eguna
+mosaico_tooltip=Mosaikoa
+Mostrar_Contorno=Erakutsi ingerada
+mostrar_descripcion=Erakutsi deskribapena
+Mostrar_siempre=Erakutsi beti
+mostrar_unidades=Bistaratu unitateak
+Muestra_atributos=Hautatutako geruzen atributuak erakusten ditu.
+muestra_consola_tooltip=Kontsola erakusten du
+Muestra_los_atributos_de_las_capas_seleccionadas=Hautatutako geruzen atributuak erakusten ditu.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Geruzaren elementuak atributu eremu jakin bateko koloreak erabiliz erakusten ditu
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu
+natural_intervals=Tarte naturalak
+navegacion=Nabigazioa
+navegacion_vista=Nabigazio Ikuspegia
+necesita_un_tema_activo=Gai bat aktibo egon behar da
+necesita_un_tema_vectorial_activo=Bektore-gai bat aktibo egon behar da
+next=Hurrengoa
+Next=Hurrengoa
+ninguna_impresora_configurada=Ez dago konfiguratutako inprimagailurik
+Nivel_de_transparencia=Gardentasun maila
+no_activos=Ez daude aktibo
+No_de_intervalos=Tarte kop.
+No_mostrar=Ez erakutsi geruza eskala horrelakoa bada
+No_mostrar_la_capa_cuando_la_escala=Ez erakutsi geruza eskala horrelakoa bada\:
+No_reconocido=Ezagutugabea
+No_Shape=Layer hau ez da Shape motakoa
+no_visibles=Ez dago ikusgai
+nombre=Izena
+Nombre=Izena
+nombre_capa=Geruzaren izena
+nombre_cobertura=Estalduraren izena
+Nombre_que_se_le_dara_al_zoom=Zoomari emango zaion izena
+nombre_sesion=Saioaren izena
+Nombres=Izenak
+normal=Normala
+north=Iparraldea
+Nueva_tabla=Taula berria
+nuevo=Berria
+Nuevo_conjunto=Multzo berria
+nuevo_proyecto=Proiektu berria
+nuevo_tamano_fuente=Iturri-tamaina berria\:
+nuevo_tooltip=Beste proiektu bat sortu
+num_bandas=Banda kopurua
+N\u00FAm_intervalos=Tarte kopurua
+numero_incorrecto=Zenbakia ez da zuzena
+ok=Ok
+opacidad=Opakotasuna
+orientacion=Orientazioa\:
+Origen_de_datos=Datu-iturburua
+Origen_de_Datos=Datu-iturburua\:
+Otros=Beste batzuk
+owner=Jabea
+parametros=Parametroak
+Parametros=Parametroak
+path=Bidea
+Perimetro=Perimetroa
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mapako elementuak eremu jakin baten balioarekin etiketatzea ahalbidetzen du
+Personalizado=Pertsonalizatua
+Pies=Oinak
+pixeles=pixelak
+Plain=Plain
+png=png fitxategiak
+poligono=Poligonoa
+poner_temas_a=Jarri gaiak aktibo
+por_debajo_de=Honen azpitik\:
+por_encima_de=Honen gainetik\:
+Por_favor_active_el_tema=Mesedez, gaia aktibatu
+posicion_linea=Lerroaren kokalekua
+preparar_pagina=Prestatu orria
+Preparar_pagina=Prestatu orria
+presentacion=Aurkezpena
+Previsualizacion=Aurrebista
+Previsualizacion_de_simbolo=Ikurraren aurrebista
+propiedades=Ezaugarriak
+Propiedades_de_la_Capa=Geruzaren ezaugarriak
+propiedades_del_tema=Gaiaren ezaugarriak
+Propiedades_del_Tema=Gaiaren ezaugarriak
+Propiedades_escala_grafica=Eskala grafikoaren ezaugarriak
+propiedades_grafico=Grafikoaren ezaugarriak
+propiedades_mapa=Maparen ezaugarriak
+propiedades_marco_imagenes=Irudi-markoaren ezaugarriak
+propiedades_marco_leyenda=Legenda-markoaren ezaugarriak
+propiedades_marco_vista=Bista-markoaren ezaugarriak
+propiedades_raster=Raster-aren ezaugarriak
+propiedades_sesion=Saioaren ezaugarriak
+propiedades_tabla=Taularen ezaugarriak
+propiedades_tema=Gaiaren ezaugarriak
+Propiedades_texto=Testuaren ezaugarriak
+propiedades_vista=Bistaren ezaugarriak
+prueba_conexion=Konexio-proba
+puerto=ataka
+Pulgadas=Hazbeteak
+punto=Puntua
+quantile_intervals=Tarte koantilak
+quiere_continuar=Ziur zaude irten nahi duzula?
+Quitar=Kendu
+Quitar_capa=Kendu geruza
+quitar_enlaces=Kendu lotuneak
+Quitar_todos=Kendu denak
+Quitar_Todos=Kendu denak
+quitar_uniones=Kendu loturak
+rango_de_escalas=Eskala-maila
+Rango_de_escalas=Eskala-maila
+Rasterfiles=Raster fitxategiak
+realce=Irtengunea
+recorte=ebakina
+recorte_colas=Ilaren ebakina
+recorte_vista=Bistarako murrizketa
+recta=Zuzena
+rectangulo=Laukizuzena
+recuento=Zenbaketa
+Recuperar_leyenda=Berreskuratu legenda
+Recuperar_y_eliminar_otros_zoom=Beste zoom batzuk berreskuratu eta ezabatu
+refrescar=Eguneratu
+registros=erregistroak
+registros_seleccionados_total=Hautatutako erregistroak guztira
+rellenar_marco_vista=Bete bista-eremua
+relleno=Betegarria\:
+renombrar=Berriro izendatu
+reproyectar_aviso=Geruzaren proiekzioa ez da bistaren proiekzioaren berdina. OHARRA\: Zehaztugabea izan daiteke aldaketa batzuekin. Mesedez, irakurri dokumentazioa.
+reproyectar_pregunta=Berriro proiektatu nahi duzu?
+resolucion=Ebazpena
+resolucion_resultado=Emaitzaren ebazpena\:
+respuesta_error_servidor=Ezin izan da estaldura lortu
+resto_valores=Gainerako balioak
+salir=Irten
+Salir=Irten
+salir_tooltip=Irten
+salvar_raster=Raster-ean gorde
+Sample=Adibidea
+Se_superponen_a=honakoei gainjartzen zaizkienak
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Kontuan izango da erregistroak hemendik aurrera ezabatzeko\:
+Sean_disjuntos_a=honen disjuntu direnak
+Sean_iguales_a=honen berdinak direnak
+seleccion=Hautaketa
+seleccion_campos=Hautatu eremuak
+seleccion_fuente=Letra-tipoa aukeratu
+Seleccion_por_tema=Gaika hautatu
+Seleccionar=Hautatu
+seleccionar_capas=Hautatu geruzak
+seleccionar_coberturas=Hautatu estaldura
+seleccionar_CRS=Hautatu CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Geruza aktiboetatik baldintza hauek betetzen dituzten osagaiak hautatu\:
+Seleccionar_del_conjunto=Multzotik hautatu
+Seleccionar_fichero=Hautatu fitxategia
+seleccionar_formato=Hautatu formatua
+seleccionar_parametros=Hautatu parametroak
+seleccionar_por_punto=Puntuka hautatu
+seleccionar_por_rectangulo=Laukizuzenka hautatu
+seleccionar_tiempo=Hautatu kokapena denborarako
+seleccionar_todos=Hautatu guztiak
+seleccione_campo_enlace=Hautatu lotzeko erabiliko den eremua
+seleccione_fecha=Hautatu data bat...
+seleccione_tabla=Hautatu taula
+seleccione_tabla_a_enlazar=Hautatu lotu beharreko taula
+seleccione_tabla_origen=Hautatu join-aren sorburu-taula
+select_all=Hautatu denak
+select_geom_field=Hautatu geometria duen eremua
+select_none=Kendu denak
+select_unique_field=Hautatu eremu bakarra
+selection_color=Hautaketaren kolorea
+servidor=Zerbitzaria
+Servidor=Zerbitzaria
+servidor_wcs_no_responde=Hautatutako zerbitzariak ez du erantzuten
+shape_seleccion=Esportatu hautapena.
+Shapefile=Shapefile
+Shapefiles=.SHP fitxategiak
+siempre=Beti
+siguiente=Hurrengoa
+Siguiente=Hurrengoa
+Simbolo=Ikurra
+S\u00EDmbolo=Ikurra
+Simbolo_unico=Ikur bakarra
+Simbolo_Unico=Ikur bakarra
+Simbologia=Sinbologia
+simple=Bakuna
+simplificar=Sinplifikatu
+sin_realce=Irtengunerik gabe
+sin_titulo=Titulurik gabe
+sincronizar_color_borde_relleno=Ertzaren kolorea eta betegarriarena sinkronizatu\:
+Size=Size
+sobre_la_barra=Barran
+Solo_para_capas_vectoriales=Bektore-geruzetarako bakarrik
+statistics=Estatistikak
+Style=Estiloa
+Subir_capa=Igo geruza
+suma=Batura
+Superior=Goian
+Tabla=Taula
+Tabla_de_Atributos=Atributuen taula
+Tabla_de_prueba=Proba-taula
+tablas=Taulak
+tamano=Tamaina\:
+tamano_metros=Tamaina metrotan
+tamano_pagina=Orrialde-tamaina\:
+tamano_posicion=Tamaina eta kokapena
+tamanyo_borde=Ertzaren tamaina
+tamanyo_fuente=Iturri-tamaina
+tarea_en_progreso=Ataza gauzatzen
+tema=Geruza
+texto=Testua
+Tiempo=Denbora
+tipo_dato=Datu mota
+tipo_de_intervalo=Tarte mota
+Tipo_de_intervalos=Tarte-mota
+tipo_de_leyenda=Legenda-mota
+Tipo_de_leyenda=Legenda-mota
+Tipo_de_linea=Lerro-mota
+tipo_fichero_proyecto=gvSIG (*.gvsproj) proiektu fitxategia
+tipo_leyenda=Legenda motako fitxategia (*.GVL)
+tipo_linea=Lerro mota\:
+Tipo_no_reconocido=Mota ezezaguna
+tipo_relleno=Betegarri-mota\:
+tipo_simbolo=Ikur-mota\:
+tipos_de_documentos=Agiri-motak
+titulo=Proiektuen kudeatzailea
+titulo_confirmar=Baieztapena
+titulo_fframetext=Testu eremuaren titulua
+toda_la_tabla=Taula osoa
+transparencia=Gardentasuna
+Transparencia=Gardentasuna
+Triangulo=Hirukia
+Un_Layer=Gutxienez geruza bat hautatu behar duzu.
+unidades=Unitateak\:
+Unidades=Unitateak\:
+untitled=Titulurik gabe
+Usar_indice_espacial=Espazio-indizea erabili
+usar_marco=Erabili markoa
+usar_rango=Erabili maila bat
+usar_titulo=Erabili titulua
+usuario=erabiltzailea
+utilizar_margenes_impresora=Erabili inprimagailuaren marjinak.
+vacia=Hutsik
+Valor=Balioa
+Valor_azul=Urdin balioa
+Valor_Bandas=Banden balioa
+valor_pixel=Pixelaren balioa
+Valor_rojo=Gorri balioa
+Valor_verde=Berde balioa
+Valores=Balioak
+Valores_unicos=Balio bakarrak
+Valores_Unicos=Balio bakarrak
+varianza=Bariantza
+ventana_proyecto=Proiektuaren leihoa
+Ver=Ikusi
+ver_tabla_atributos=Ikusi atributuen taula
+ver_tooltip=Proiektuaren leihoa erakusten du
+vertical=Bertikala
+visible=Ikusgai
+visibles=Ikusgai
+Vista=Bista
+vistas=Bista
+visualizacion=Bistaratzea
+Visualizacion=Bistaratzea
+visualizar_cuadricula=Bistaratu sarea
+wcs_properties=WCS ezaugarriak
+WMS=WMS
+xmax=X handiena
+xmin=X txikiena
+Yardas=Yardak
+ymax=Y handiena
+ymin=Y txikiena
+Zoom=Zooma
+Zoom_Acercar=Hurbiltzeko zooma
+Zoom_al_Tema=Zooma gaiari
+Zoom_Alejar=Urruntzeko zooma
+Zoom_Completo=Zooma osorik
+Zoom_Completo_Vista=Zooma osorik bistaren gainean
+Zoom_Mas=Zoom handiagoa
+Zoom_Mas_Vista=Zoom handiagoa bistaren gainean
+Zoom_Menos=Zoom txikiagoa
+Zoom_Menos_Vista=Zoom txikiagoa bistaren gainean
+Zoom_pixel=Zooma raster-aren bereizmenari
+Zoom_Previo=Aurretiko zooma
+Zoom_Real=1\:1 zooma
+Zoom_Select=Zooma hautatutakoari
+zooms=Zoomak

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_it.properties	(revision 42196)
@@ -0,0 +1,629 @@
+#text_it.properties
+__espacio_vertical=Spazio verticale\:
+__lineas=linee
+__proyeccion_actual=Proiezione reale\:
+__redimensionar_texto_escala=Ridimensiona il testo alla scala della vista
+__seleccion_de_fuente=Seleziona carattere
+_(Etiquetas_estandar)=(Etichette standard)
+_(Intervalos)=(Intervalli)
+_(Simbolo_unico)=(Simbolo unico)
+_(Valores_unicos)=(Valore unico)
+(escala_maxima)=(scala massima)
+(escala_minima)=(scala minima)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+abajo=Basso
+abrir=Aprire
+Abrir_Imagen=Apri Immagine
+abrir_plantilla=Apri sagoma
+abrir_proyecto=Apri Progetto
+abrir_tooltip=Apri un Progetto Esistente
+Abrir_una_capa=Apri un Layer
+Accion_Predefinida=Azione Predefinita
+aceptar=OK
+Aceptar=OK
+acerca_de=Cerca...
+activar_regla=Attiva regola
+activos=Attivi
+adjust_transparency=Regola Transparenza
+agrupar=Raggruppa
+agrupar_capas=Raggruppa layers
+agrupar_graficos=Raggruppa grafici
+agrupar_linea=Raggruppa linea
+Ajustar_cobertura_wcs=Aggiustare copertura WCS
+Ajustar_transparencia=Regola trasparenza
+ajustes_linea_grafica=Regola linea grafica
+Al_leer_la_leyenda=Leggendo la legenda
+alerta=Avviso
+alias=Alias
+alineamiento=Allineamento
+alinear=Allinea
+alinear_graficos=Allinea grafici
+alta=Alta
+alto=Alto
+altura=Altezza\:
+Altura_fija_de_texto=Altezza fissa del testo
+ambito=Ambito
+Anadir=Aggiungi
+Anadir_al_conjunto=Aggiungi all'insieme
+Anadir_capa=Aggiungi layer
+Anadir_Capa=Aggiungi Layer
+Anadir_todos=Aggiungi tutto
+ancho=Larghezza\:
+ancho_alto=Larghezza X Altezza
+Ancho_Contorno=Spessore contorno
+Ancho_de_linea=Spessore linea
+anchura=Larghezza\:
+angulo_rotacion=Angolo di rotazione\:
+anterior=Anteriore
+Anterior=Anteriore
+Aplicar=Applica
+Archivo=File
+Archivos_de_Disco=Files del disco
+area_trabajo=Area di lavoro
+arriba=Alto
+ascending_order=Ordine crescente
+ascending_order_tooltip=Ordina il campo selezionato in ordine crescente
+Atributo=Attributo
+automatico=Automatico
+Ayuda=Aiuto
+back=Precedente
+Back=Precedente
+background_color=Colore sfondo
+baja=Basso
+Bajar_capa=Abbassa layer
+bandas=Bande
+bands=Bande
+barra=Barra\:
+base_datos=Base dati
+bd=bd
+bmp=BMP files
+Bold=Bold
+borra_seleccion=Cancella quanto selezionato
+borrador=Bozza
+borrar=Rimuovi
+Calcular_intervalos=Calcolare intervallo
+calidad=Qualita'
+Cambio_Color=Cambio di Colore
+Cambio_de_estilo=Cambio di Stile
+Cambio_Estilo=Cambio di Stile
+cambio_nombre=Cambio di nome
+Cambios_de_estilo=Cambi di Stile
+campo=Campo
+Campo=Campo
+campo_altura_texto=Altezza del campo di testo\:
+Campo_clasifica=Campo di classificazione
+Campo_de_clasificacion=Campo di classificazione
+campo_de_documentos_asociados=Campo dei documenti associati
+Campo_de_etiquetado=Campo di etichetta
+Campos=Campi
+cancel=Cancella
+Cancel=Cancella
+cancelar=Cancella
+Cancelar=Cancella
+Capa=Livello
+Capas=Layers
+Capas_del_localizador=Layers del localizzatore
+capaWMS=WMSLayer
+cargar_leyenda=Carica leggenda
+cartografico=Cartografico
+causa_error_desconocida=Causa dell'errore sconosciuta
+Centimetros=Centimetri
+cerrar=Chiudi
+Cerrar=Chiudere
+circulo=Cerchio
+Circulo=Cerchio
+clave=Chiave
+Coberturas=Coperture
+coincidir_tamano=Eguagliare dimensioni\:
+colocar_a_margenes=Colloca al margine
+colocar_alrededor_seleccionados=Colloca intorno a quanto selezionato
+colocar_alrededor_todos=Colloca intorno a tutto
+colocar_delante=Colloca davanti
+colocar_detras=Colloca dietro
+color=Colore\:
+Color_Contorno=Colore Contorno
+Color_de_la_Linea=Colore Linea
+Color_de_Relleno=Colore di riempimento\:
+Color_final=Colore finale\:
+Color_inicial=Colore iniziale\:
+Color_inicio=Colore iniziale
+color_texto=Colore testo\:
+comentarios=Commenti
+conectar=Connettere
+conexion_correcta=Connessione corretta
+configuracion_andami_tooltip=Configurazione Andami
+configurar=Configura
+configurar_localizador=Configura localizzatore
+Configurar_localizador=Configura localizzatore ...
+confirmar_borrar=Gli elementi saranno rimossi. Sei sicuro?
+conservar_escala_visualizacion=Mantieni scala di visualizzazione
+consulta=Consulta
+Contengan=contengono
+coor_geograficas=Coord. Geografiche
+creation_date=Creazione dati
+Crucen_con=si incrociano con
+Cruz=Croce
+Cuadrado=Quadrato
+cuando_activo=Quando attivo
+Dado_un_campo_de_atributos=Dato mun campo di attributi
+debe_estar_activada=Deve essere attivata
+Derecha=Destra
+Derecho=Destro
+desagrupar=Disunisci
+desagrupar_graficos=Disunisci grafici
+descending_order=Ordine decrescente
+descending_order_tooltip=Ordina il campo selezionato in ordine decrescente
+desconectar=Sconnettere
+descripcion=Descrizione
+Descripcion=Descrizione
+desde_arriba=Dall'alto\:
+desde_izquierda=Da sinistra\:
+Desplazamiento=Spostamento
+desviacion_tipica=Deviazione tipica
+detalles=Dettagli
+Detalles=Dettagli
+DGNFiles=DGNFiles
+distance_units=Unita' di distanza
+distribuir=Distribuisci\:
+divisiones_izquierda=Separazioni a sinistra
+documentos_existentes=Documento esistente
+driver=driver
+drivers=Drivers
+Dxffiles=DXFFiles
+editable=Pubblicabile
+Editar_leyenda=Modifica leggenda
+editar_propiedades=Modifica proprieta'
+el_numero_maximo_de_intervalos_para_este_campo_es=Il numero massimo di intervalli per questo campo \u00E8
+Elegir_Color=Seleziona Colore
+Elegir_Fuente=Seleziona Font
+Elementos_seleccionados_de_la_capa=gli elementi selezionati nel presente layer
+Eliminar=Elimina
+eliminar_capa=Elimina Layer
+eliminar_extremos=Elimina gli estremi
+en_el_mapa=Nella mappa\:
+En_metros=In metri
+En_pixels=In pixels
+Encuadre=Inquadra
+Encuadre_Vista=Vista zoom
+enlace_vivo=Collegamento attivo
+Enlazar_a_fichero_de_texto=Collegamento a documento di testo
+Enlazar_a_ficheros_de_imagen=Collegamento a files d'immagine
+equal_intervals=Intevalli uguali
+Error_abriendo_el_fichero=Errore aprendo il file
+Error_accediendo_a_los_datos=Errore accedendo ai dati
+error_comunicacion_servidor=Si \u00E9 prodotto un errore comunicando con il server
+error_escritura=Non puoi scrivere il file
+Error_guardando_la_leyenda=Errore salvando la legenda
+error_lectura=Non puoi leggere il file
+escala=Scala
+Escala=Scala
+escala_maxima=Scala massima
+Escala_Maxima=Scala Massima
+escala_minima=Scala minima
+Escala_Minima=Scala Minima
+escala_usuario=Scala specificata dall'utilizzatore
+espaciado_horizontal=Interlinea orizzontale
+espaciado_vertical=Interlinea verticale
+espacio=Spazio\:
+espere=Attendere, per favore
+estadisticas=Statistica
+este_por_debajo_de_=Questo sotto a
+este_por_encima_de=Questo sopra a
+Esten_contenidos_en=sono contenuti in
+Estilo=Stile\:
+Etiqueta=Etichetta
+Etiquetado=Etichettato
+Etiquetados=Etichettati
+etiquetas=Etichette\:
+Etiquetas_estandar=Etichette standard
+Examinar=Esamina
+exportar=Esporta
+exportar_a=Esporta a...
+exportar_pdf=Esporta come pdf
+extension=Estensione
+Extent=Estensione
+extents_no_coincidentes=L'estensione della immagine selezionata non coincide con la immagine di origine.
+fallo_crear_conexion=Errore nel tentare la connessione
+fallo_crear_pool=Errore nella crezione del Pool de Conexiones
+fallo_obtener_conexion_existente=Errore nell'ottenere una connessione gi\u00E0 creata
+fallo_obtener_tablas=Errore nell'ottenere le tavole della base dati
+fallo_realizar_consulta=Errore nel realizzare una ricerca
+fallo_registrar_conexion=Errore nel registrare una connessione
+Fichero=File
+fichero_existe=Il file selezionato esiste gi\u00E1 come banda del layer
+fichero_incorrecto=File non corretto
+filtro=Filtro
+finalizar=Finalizza
+finish=Finalizza
+Font=Font
+formato=Formato
+Formato=Formato
+formato_incorrecto=Formato non corretto
+fuente=Font
+Fuente=Font
+General=Generale
+Generar_Intervalos=Crea Intervallo
+gestion_encuadre=Gestione zoom
+grados=Gradi\:
+Graficos=Grafici
+Grosor_de_linea=Spessore di linea
+grosor_linea=Spessore linea\:
+guardado=Salvato
+Guardar=Salvare
+guardar_cambios=Salvare le modifiche
+guardar_clave=Salva la chiave
+guardar_como=Salva come...
+guardar_como_plantilla=Salva come sagoma
+Guardar_el_zoom_actual=Salvare lo zoom attuale
+guardar_leyenda=Salvare leggenda
+Guardar_leyenda=Salvare Stile
+guardar_proyecto=Salvare progetto
+guardar_tooltip=Salvare progetto
+Habilitar_etiquetado=Attiva etichetta
+hasta=fino a
+Herramientas=Strumenti
+Herramientas_vista=Vista Stumenti
+Hiperenlace=Collegamento
+horizontal=Orizzontale
+host=macchina
+hostname=Hostaname
+Identificar_Resultados=Identifica Risultati
+Igual_que_la_impresora=Uguale alla stampante
+igual_todos_lados=Uguale per tutti i lati
+imagen=Immagine
+Imagen=Immagine
+importar=Importa
+importar_extent=Importare l'estensione attuale della vista
+Imprimir=Stampa
+Inferior=Inferiore
+info=Informazione
+infobreak=Mostra gli elementi del layer usando colori differenti.
+infodef=Mostra gli elementi del layer usando lo stesso simbolo.
+informacion=Informazione
+Informacion=Informazione
+infovalue=Mostra gli elementi del layer usando un simbolo per ogni valore.
+Inicializando=Iniziando
+Insertar=Inserisci
+insertar_circulo=Inserisci Cerchio
+insertar_escala=Inserisci Scala
+insertar_imagen=Inserisci Immagine
+insertar_leyenda=Inserisci Leggenda
+insertar_linea=Inserisci Linea
+insertar_norte=Inserire il nord
+insertar_poligono=Inserisci Poligono
+insertar_punto=Inserisci Punto
+insertar_recta=Inserisci Retta
+insertar_rectangulo=Inserisci Rettangolo
+insertar_texto=Inserisci Testo
+insertar_vista=Inserisci Vista
+Intersecten_con=intersecano con
+Intervalo=Intervallo
+Intervalos=Intervalli
+Intervalos_equidistantes=Intervalli equidistanti
+Intervalos_por_rupturas_naturales=Intervalli per rotture naturali.
+introduce_nombre=Introduci nome
+Italic=Italic
+Izquierda=Sinistra
+Izquierdo=Sinistro
+join=Unisci
+jpg=JPEG files
+kilometros=Chilometri
+Kilometros=Chilometri
+leyenda=Leggenda
+Leyenda=Legenda
+leyenda_campo_unido=Si sta utilizzando un campo dell'unione nella legenda (e/o etichettato). Cambia le legenda prima di togliere l'unione.
+Leyenda_Por_Defecto=Legenda di origine
+linea=Linea
+Linea=Linea
+linea_grafica=Linea Grafica
+lineal_directo=Lineare diretto
+linf_der=X in basso a destra
+link=Collegamento
+Link=Collegamento
+Localizador_por_atributo=Localizzatore per attributo
+lppp=ppp
+lsup_izq=X in alto a sinistra
+malla_activada=Rete attivata
+mantener_intervalo=Mantieni intervallo
+map_units=Unita'di mappa
+Mapa=Mappa
+mapas=Mappe
+marco=Bordo
+marco_vista=Bordo vista
+margenes=Margini\:
+Mas_100=Pi\u00FA di 100 simboli non apportano informazioni al piano
+mas_de_100_simbolos=Pi\u00FA di 100 simboli non apportano informazioni al piano
+maximo=Massimo
+media=Media
+medir_area=Misura area
+medir_distancias=Misura distanze
+metros=Metri
+Metros=Metri
+Milimetros=Millimetri
+Millas=Miglia
+minimo=Minimo
+modification_date=Modifizione dati
+mosaico_tooltip=Mosaico
+Mostrar_Contorno=Mostra contorno
+mostrar_descripcion=Mostra descrizione
+Mostrar_siempre=Mostra sempre
+mostrar_unidades=Mostra unit\u00E1
+Muestra_atributos=Mostra gli attributi dei layers selezionati
+muestra_consola_tooltip=Mostra la console
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostra gli attributi dei layers selezionati
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra gli elementi del layer usando un simbolo per ogni valore unico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra gli elementi del layer usando una gamma di colori in funzione del valore di un determinato campo di attributi
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tutti gli elementi di un layer usando lo stesso simbolo
+natural_intervals=Intervalli naturali
+navegacion=Navigazione
+navegacion_vista=Vista Navigazione
+necesita_un_tema_activo=Necessita un tema attivo
+necesita_un_tema_vectorial_activo=Necessita un tema vettoriale attivo
+next=Seguente
+Next=Seguente
+ninguna_impresora_configurada=Nessuna stampante individuata
+Nivel_de_transparencia=Livello di trasparenza
+no_activos=Non attivi
+No_de_intervalos=No intervalli
+No_mostrar=Non mostrare
+No_mostrar_la_capa_cuando_la_escala=Non mostrare il layer quando la scala
+No_reconocido=Non riconosciuto
+No_Shape=Questo Layer non e' del tipo Shape
+no_visibles=Non visibili
+nombre=Nome
+Nombre=Nome
+nombre_capa=Nome del layer
+nombre_cobertura=Nome della copertura
+Nombre_que_se_le_dara_al_zoom=Nome per lo zoom
+nombre_sesion=Nome sessione
+Nombres=Nomi
+normal=Normale
+north=Nord
+Nueva_tabla=Nuova tabella
+nuevo=Nuovo
+Nuevo_conjunto=Nuovo insieme
+nuevo_proyecto=Nuovo progetto
+nuevo_tamano_fuente=Nuova dimensione carattere\:
+nuevo_tooltip=Crea nuovo progetto
+num_bandas=Numero delle bande
+N\u00FAm_intervalos=Numero di Intervalli
+numero_incorrecto=Numero non corretto
+ok=Ok
+opacidad=Opacit\u00E1
+orientacion=Orientazione\:
+Origen_de_datos=Origine dei dati
+Origen_de_Datos=Origine dei Dati\:
+Otros=Altro
+owner=Proprietario
+parametros=Parametri
+Parametros=Parametri
+path=Direzione
+Perimetro=Perimetro
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permette di etichettare gli elementi della mappa con il valore di un determinato campo
+Personalizado=Personalizzato
+Pies=Piedi
+pixeles=pixeles
+Plain=Plain
+png=PNG files
+poligono=Poligono
+poner_temas_a=Poni layer...
+por_debajo_de=dal basso\:
+por_encima_de=dall'alto\:
+Por_favor_active_el_tema=Per favore attiva il layer
+posicion_linea=Posiziona della linea
+preparar_pagina=Prepara pagina
+Preparar_pagina=Prepara pagina
+presentacion=Presentazione definitiva
+Previsualizacion=Previsualizzazione
+Previsualizacion_de_simbolo=Previsualizzazione Simbolo
+propiedades=Proprieta'
+Propiedades_de_la_Capa=Proprieta' del layer
+propiedades_del_tema=Propriet\u00E1 del layer
+Propiedades_del_Tema=Proprieta' del layer
+Propiedades_escala_grafica=Proprieta' della scala
+propiedades_grafico=Proprieta' del grafico
+propiedades_mapa=Proprieta' della Mappa
+propiedades_marco_imagenes=Proprieta' del bordo dell'Immagine
+propiedades_marco_leyenda=Proprieta' del bordo della leggenda
+propiedades_marco_vista=Proprieta' del bordo della vista
+propiedades_raster=Propriet\u00E1 del raster
+propiedades_sesion=Proprieta' di sessione
+propiedades_tabla=Proprieta' tabella
+propiedades_tema=Proprieta' del layer
+Propiedades_texto=Proprieta' del testo
+propiedades_vista=Proprieta' della vista
+prueba_conexion=Prova della connessione
+puerto=porto
+Pulgadas=Pollici
+punto=Punto
+quantile_intervals=Intervalli quantili
+quiere_continuar=Sei sicuro di voler continuare?
+Quitar=Rimuovi
+Quitar_capa=Rimuovi layer
+quitar_enlaces=Elimina collegamenti
+Quitar_todos=Rimuovi tutto
+Quitar_Todos=Rimuovi tutto
+quitar_uniones=Elimina unioni
+rango_de_escalas=Rango delle scale
+Rango_de_escalas=Classe delle scale
+Rasterfiles=Rasterfiles
+realce=Rilievo
+recorte=ritaglio
+recorte_colas=Ritaglio degli estremi
+recorte_vista=Ritaglio della vista
+recta=Retta
+rectangulo=Rettangolo
+recuento=Riconto
+Recuperar_leyenda=Recupera leggenda
+Recuperar_y_eliminar_otros_zoom=Recupera ed elimina gli altri zoom
+refrescar=Aggiorna
+registros=registri
+registros_seleccionados_total=Totale registri selezionati
+rellenar_marco_vista=Riempi il bordo della vista
+relleno=Riempi\:
+renombrar=Rinomina
+reproyectar_aviso=La proiezione del layer non \u00E9 la stessa della vista\: \npotrebbe essere inesatto a cuasa di alcune trasformazioni. \nPer favore, leggi la documentazione.
+reproyectar_pregunta=Vuoi rifare il progetto ?
+resolucion=Risoluzione
+resolucion_resultado=Determinazione del risultato\:
+respuesta_error_servidor=Non si \u00E9 potuto ottenere la copertura
+resto_valores=Resto dei valori
+salir=Esci
+Salir=Esci
+salir_tooltip=Esci
+salvar_raster=Salva raster
+Sample=Esempio
+Se_superponen_a=si sovrappongono a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Cancella i registri da
+Sean_disjuntos_a=sono diversi da
+Sean_iguales_a=sono uguali a
+seleccion=Selezione
+seleccion_campos=Seleziona i campi
+seleccion_fuente=Seleziona carattere
+Seleccion_por_tema=Seleziona per layer
+Seleccionar=Seleziona
+seleccionar_capas=Seleziona Layers
+seleccionar_coberturas=Selezionare coperture
+seleccionar_CRS=Selezionare CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Selezionare dai layers attivi gli elementi che\:
+Seleccionar_del_conjunto=Seleziona dall'insieme
+Seleccionar_fichero=Seleziona file
+seleccionar_formato=Seleziona Formato
+seleccionar_parametros=Selezionare i parametri
+seleccionar_por_punto=Seleziona con punto
+seleccionar_por_rectangulo=Seleziona con rettangolo
+seleccionar_tiempo=Selezionare il tempo
+seleccionar_todos=Seleziona tutto
+seleccione_campo_enlace=Seleziona il campo da collegare
+seleccione_fecha=Seleziona data
+seleccione_tabla=Seleziona la tabella
+seleccione_tabla_a_enlazar=Seleziona la tavola da collegare
+seleccione_tabla_origen=Seleziona la tavola di origine della unione
+select_all=Seleziona tutto
+select_geom_field=Seleziona il campo geometrico
+select_none=Togli tutto
+select_unique_field=Seleziona campo unico
+selection_color=Seleziona colore
+servidor=Server
+Servidor=Server
+servidor_wcs_no_responde=Il server selezionato non risponde
+shape_seleccion=Esporta quanto selezionato
+Shapefile=Shapefile
+Shapefiles=Shapefiles
+siempre=Sempre
+siguiente=Seguente
+Siguiente=Seguente
+Simbolo=Simbolo
+S\u00EDmbolo=Simbolo
+Simbolo_unico=Simbolo unico
+Simbolo_Unico=Simbolo unico
+Simbologia=Simbologia
+simple=Semplice
+simplificar=Semplifica
+sin_realce=Senza rilievo
+sin_titulo=Senza titolo
+sincronizar_color_borde_relleno=Sincronizza il colore del bordo pieno\:
+Size=Taglia
+sobre_la_barra=Sopra la barra
+Solo_para_capas_vectoriales=Solo per layers vettoriali
+statistics=Statistica
+Style=Stile
+Subir_capa=Layer s\u00FA
+suma=Somma
+Superior=Superiore
+Tabla=Tabella
+Tabla_de_Atributos=Tabella degli Attributi
+Tabla_de_prueba=Tabella di prova
+tablas=Tabelle
+tamano=Dimensione\:
+tamano_metros=Dimensione in metri
+tamano_pagina=Dimensione della pagina
+tamano_posicion=Dimensione e posizione
+tamanyo_borde=Dimensione del margine
+tamanyo_fuente=Dimensione del font
+tarea_en_progreso=Lavoro in progresso
+tema=Layer
+texto=Testo
+Tiempo=Tempo
+tipo_dato=Tipo di Dato
+tipo_de_intervalo=Tipo di intervallo
+Tipo_de_intervalos=Tipo di intervallo
+tipo_de_leyenda=Tipo legenda
+Tipo_de_leyenda=Tipo di leggenda
+Tipo_de_linea=Tipo di Linea
+tipo_fichero_proyecto=tipo di file di progetto(*.gvsproj)
+tipo_leyenda=Tipo di leggenda (*.GVL)
+tipo_linea=Tipo di linea\:
+Tipo_no_reconocido=Tipo non riconosciuto
+tipo_relleno=Tipo di riempimento\:
+tipo_simbolo=Tipo di simbolo\:
+tipos_de_documentos=Tipo di documento
+titulo=Gestore di progetto
+titulo_confirmar=Conferma titolo
+titulo_fframetext=Titolo del campo di testo
+toda_la_tabla=Tutta la tabella
+Toquen=toccano
+transparencia=Transparenza
+Transparencia=Transparenza
+Triangulo=Triangolo
+Un_Layer=Devi selezionare un layer
+unidades=Unita'\:
+Unidades=Unita'
+untitled=Senza titolo
+Usar_indice_espacial=Usare indice spaziale
+usar_marco=Usa margine
+usar_rango=Usa un rango
+usar_titulo=Usa titolo
+usuario=usuario
+utilizar_margenes_impresora=Utilizza i margini della stampante.
+vacia=Vuota
+Valor=Valore
+Valor_azul=Valore blu
+Valor_Bandas=Valori bande
+valor_pixel=Valore pixel
+Valor_rojo=Valore rosso
+Valor_verde=Valore verde
+Valores=Valori
+Valores_unicos=Valori unici
+Valores_Unicos=Valori Singoli
+varianza=Varianza
+ventana_proyecto=Finestra di progetto
+Ver=Vedi
+ver_tabla_atributos=Mostra tabella degli attributi
+ver_tooltip=Mostra la finestra di progetto
+vertical=Verticale
+visible=Visibile
+visibles=Visibile
+Vista=Vista
+vistas=Vista
+visualizacion=Visualizzazione
+Visualizacion=Visualizzazione
+visualizar_cuadricula=Visualizza maglia
+wcs_properties=Propriet\u00E1 WCS
+WMS=WMS
+xmax=X massima
+xmin=X minima
+Yardas=Yards
+ymax=Y massima
+ymin=Y minima
+Zoom=Zoom
+Zoom_Acercar=Zoom\: avvicina
+Zoom_al_Tema=Zoom al layer
+Zoom_Alejar=Zoom\: allontana
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo della vista
+Zoom_Mas=Aumenta Zoom
+Zoom_Mas_Vista=Aumenta Zoom Vista
+Zoom_Menos=Disminuisci Zoom
+Zoom_Menos_Vista=Disminuisci Zoom Vista
+Zoom_pixel=Zoom a la risoluzione del raster
+Zoom_Previo=Zoom Precedente
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom selezionato
+zooms=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro.properties	(revision 42196)
@@ -0,0 +1,736 @@
+#text.properties
+(escala_maxima)=(escala m\u00E1xima)
+(escala_minima)=(escala m\u00EDnima)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+Abrir_Imagen=Abrir Imagen
+Abrir_una_capa=A\u00F1adir capa
+Accion_Predefinida=Acci\u00F3n Predefinida
+Aceptar=Aceptar
+Ajustar_cobertura_wcs=Ajustar cobertura WCS
+Ajustar_transparencia=Ajustar Transparencia
+Al_leer_la_leyenda=Al leer la leyenda
+Altura_fija_de_texto=Altura fija de texto
+Anadir=A\u00F1adir
+Anadir_Capa=A\u00F1adir Capa
+Anadir_al_conjunto=A\u00F1adir al conjunto
+Anadir_capa=A\u00F1adir Capa
+Anadir_todos=A\u00F1adir todos
+Ancho_Contorno=Ancho Contorno
+Ancho_de_linea=Ancho de l\u00EDnea
+Anterior=Anterior
+Aplicar=Aplicar
+Archivo=Archivo
+Archivos_de_Disco=Ficheros de disco
+Atributo=Atributo
+Ayuda=Ayuda
+Back=Anterior
+Bajar_capa=Bajar capa
+Bold=Bold
+Calcular_intervalos=Calcular intervalos
+Cambio_Color=Cambio Color
+Cambio_Estilo=Cambio Estilo
+Cambio_de_estilo=Cambio de estilo
+Cambios_de_estilo=Cambios de estilo
+Campo=Campo
+Campo_clasifica=Campo de Clasificaci\u00F3n
+Campo_de_clasificacion=Campo de clasificaci\u00F3n
+Campo_de_etiquetado=Campo de etiquetado
+Campos=Campos
+Cancel=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Capas del localizador
+Centimetros=Cent\u00EDmetros
+Cerrar=Cerrar
+Circulo=C\u00EDrculo
+Coberturas=Coberturas
+Color_Contorno=Color Contorno
+Color_de_Relleno=Color de Relleno
+Color_de_la_Linea=Color de la L\u00EDnea\:
+Color_final=Color final\:
+Color_inicial=Color inicial\:
+Color_inicio=Color de inicio
+Configurar_localizador=Configurar Localizador ...
+Contengan=contengan
+Crucen_con=crucen con
+Cruz=Cruz
+Cuadrado=Cuadrado
+DGNFiles=Ficheros .DGN
+Dado_un_campo_de_atributos=Dado un campo de atributos
+Derecha=Derecha
+Derecho=Derecho
+Descripcion=Descripci\u00F3n
+desea_borrar_la_capa=Est� seguro que desea borrar las capas activas.
+Desplazamiento=Desplazamiento
+Detalles=Detalles
+Dxffiles=Ficheros .DXF
+Editar_leyenda=Editar Leyenda
+Elegir_Color=Elegir Color
+Elegir_Fuente=Elegir Fuente
+Elementos_seleccionados_de_la_capa=elementos seleccionados de la capa
+Eliminar=Eliminar
+En_metros=En metros
+En_pixels=En pixels
+Encuadre=Encuadre
+Encuadre_Vista=Encuadre sobre la Vista
+Enlazar_a_fichero_de_texto=Enlazar a ficheros de texto
+Enlazar_a_ficheros_de_imagen=Enlazar a ficheros de imagen
+Error_abriendo_el_fichero=Error abriendo el fichero
+Error_accediendo_a_los_datos=Error accediendo a los datos
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_leyenda=Error guardando la leyenda
+Error_guardando_la_plantilla=Error guardando la plantilla
+Escala=Escala
+Escala_Maxima=Escala M\u00E1xima
+Escala_Minima=Escala M\u00EDnima
+Esten_contenidos_en=est\u00E9n contenidos en
+Estilo=Estilo\:
+Etiqueta=Etiqueta
+Etiquetado=Etiquetado
+Etiquetados=Etiquetados
+Etiquetas_estandar=Etiquetas est\u00E1ndar
+Examinar=Examinar
+Extent=Extent
+Fichero=Fichero
+Font=Fuente
+Formato=Formato
+Formato_de_numero_erroneo=Formato de n\u00FAmero incorrecto
+Fuente=Fuente
+General=General
+Generar_Intervalos=Generar Intervalos
+Graficos=Gr\u00E1ficos
+Graficos=Gr\u00E1ficos
+Grosor_de_linea=Grosor de l\u00EDnea
+Guardar=Guardar
+Guardar_el_zoom_actual=Guardar el zoom
+Guardar_leyenda=Guardar leyenda
+Habilitar_etiquetado=Habilitar etiquetado
+Herramientas=Herramientas
+Herramientas_vista=Herramientas de la Vista
+Hiperenlace=Hiperenlace
+Identificar_Resultados=Identificar Resultados
+Igual_que_la_impresora=Igual que la impresora
+Imagen=Imagen
+Imprimir=Imprimir
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente la capa
+Inferior=Inferior
+Informacion=Informaci\u00F3n
+Inicializando=Inicializando
+Insertar=Insertar
+Intersecten_con=intersecten con
+Intervalo=Intervalo
+Intervalos=Intervalos
+Intervalos_equidistantes=Intervalos equidistantes.
+Intervalos_por_rupturas_naturales=Intervalos por rupturas naturales.
+Italic=Italic
+Izquierda=Izquierda
+Izquierdo=Izquierdo
+Kilometros=Kil\u00F3metros
+Leyenda=Leyenda
+Leyenda_Por_Defecto=Leyenda por defecto
+Linea=L\u00EDnea
+Link=Enlace
+Localizador_por_atributo=Localizador por atributo
+Mapa=Mapa
+Mas_100=El n\u00FAmero de valores es superior a 100, y no aporta informaci\u00F3n
+Metros=Metros
+Milimetros=Mil\u00EDmetros
+Millas=Millas
+Mostrar_Contorno=Mostrar Contorno
+Mostrar_siempre=Mostrar siempre
+Muestra_atributos=Muestra los atributos de las capas seleccionadas.
+Muestra_los_atributos_de_las_capas_seleccionadas=Muestra los atributos de las capas seleccionadas
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Muestra los elementos de la capa usando una gama de colores en funci\u00F3n del valor de un determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Muestra todos los elementos de una capa usando el mismo s\u00EDmbolo
+Next=Siguiente
+Nivel_de_transparencia=Nivel de transparencia
+No_Shape=Este Layer no es de tipo Shape
+No_de_intervalos=N\u00BA de intervalos
+No_mostrar=No mostrar la capa cuando la escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa cuando la escala
+No_reconocido=No reconocido
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+Nombre=Nombre
+Nombre_que_se_le_dara_al_zoom=Nombre que se le dar\u00E1 al zoom
+Nombres=Nombres
+Nueva_tabla=Nueva Tabla
+Nuevo_conjunto=Nuevo conjunto
+Num_intervalos=N\u00FAm. intervalos
+Origen_de_Datos=Origen de Datos\:
+Origen_de_datos=Origen de datos
+Otros=Otros
+Parametros=Par\u00E1metros
+Perimetro=Per\u00EDmetro
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar los elementos del mapa con el valor de un determinado campo
+Personalizado=Personalizado
+Pies=Pies
+Plain=Plain
+Por_favor_active_la_capa=Por favor active la capa
+Preparar_pagina=Preparar p\u00E1gina
+Previsualizacion=Previsualizaci\u00F3n
+Previsualizacion_de_simbolo=Previsualizaci\u00F3n de s\u00EDmbolo
+Propiedades_de_la_Capa=Propiedades de la Capa
+Propiedades_escala_grafica=Propiedades de la escala
+Propiedades_texto=Propiedades del texto
+Pulgadas=Pulgadas
+Quitar=Quitar
+Quitar_Todos=Quitar Todos
+Quitar_capa=Quitar capa
+Quitar_todos=Quitar todos
+Rango_de_escalas=Rango de escalas
+Rasterfiles=Ficheros r\u00E1ster
+Recuperar_leyenda=Recuperar leyenda
+Recuperar_y_eliminar_otros_zoom=Recuperar y eliminar otros zooms
+S\u00EDmbolo=S\u00EDmbolo
+Salir=Salir
+Sample=Ejemplo
+Se_superponen_a=se superponen a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Se va a tener en cuenta para borrar los registros desde
+Sean_disjuntos_a=sean disjuntos a
+Sean_iguales_a=sean iguales a
+Seleccion_por_capa=Seleccion por capa
+Seleccionar=Seleccionar
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar de las capas activas los elementos que\:
+Seleccionar_del_conjunto=Seleccionar del conjunto
+Seleccionar_fichero=Seleccionar fichero
+Servidor=Servidor
+Shapefile=Shapefile
+Shapefiles=Ficheros .SHP
+Siguiente=Siguiente
+Simbolo=S\u00EDmbolo
+Simbolo_Unico=S\u00EDmbolo \u00DAnico
+Simbolo_unico=S\u00EDmbolo \u00FAnico
+Simbologia=Simbolog\u00EDa
+Size=Size
+Solo_para_capas_vectoriales=Solo para capas vectoriales
+Style=Estilo
+Subir_capa=Subir capa
+Superior=Superior
+Tabla=Tabla
+Tabla_de_Atributos=Tabla de Atributos
+Tabla_de_prueba=Tabla de prueba
+Tiempo=Tiempo
+Tipo_de_intervalos=Tipo de intervalos
+Tipo_de_leyenda=Tipo de leyenda
+Tipo_de_linea=Tipo de linea
+Tipo_no_reconocido=Tipo no reconocido
+Toquen=toquen
+Transparencia=Transparencia
+Triangulo=Tri\u00E1ngulo
+Un_Layer=Debe seleccionar al menos una capa.
+Unidades=Unidades\:
+Usar_indice_espacial=Usar \u00EDndice espacial
+Valor=Valor
+Valor_Bandas=Valor Bandas
+Valor_azul=Valor Azul
+Valor_rojo=Valor Rojo
+Valor_verde=Valor Verde
+Valores=Valores
+Valores_Unicos=Valores \u00DAnicos
+Valores_unicos=Valores \u00FAnicos
+Ventana=Ventana
+Ver=Ver
+Vista=Vista
+Visualizacion=Visualizaci\u00F3n
+WMS=WMS
+Yardas=Yardas
+Zoom=Zoom
+Zoom_Acercar=Zoom acercar
+Zoom_Alejar=Zoom alejar
+Zoom_Completo=Zoom Completo
+Zoom_Completo_Vista=Zoom Completo sobre la Vista
+Zoom_Mas=Zoom M\u00E1s
+Zoom_Mas_Vista=Zoom M\u00E1s sobre la Vista
+Zoom_Menos=Zoom Menos
+Zoom_Menos_Vista=Zoom Menos sobre la Vista
+Zoom_Previo=Zoom Previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a lo seleccionado
+Zoom_a_la_capa=Zoom a la capa
+Zoom_pixel=Zoom a la resoluci\u00F3n del r\u00E1ster
+_(Etiquetas_estandar)=(Etiquetas est\u00E1ndar)
+_(Intervalos)=(Intervalos)
+_(Simbolo_unico)=(S\u00EDmbolo \u00FAnico)
+_(Valores_unicos)=(Valores \u00FAnicos)
+__espacio_vertical=Espacio Vertical\:
+__lineas=l\u00EDneas
+__proyeccion_actual=Proyecci\u00F3n actual\:
+__redimensionar_texto_escala=Redimensionar el texto a escala con la vista.
+__seleccion_de_fuente=Selecci\u00F3n de fuente
+abajo=Abajo
+abrir=Abrir
+abrir_plantilla=Abrir plantilla
+abrir_proyecto=Abrir proyecto
+abrir_tooltip=Abre un proyecto existente
+aceptar=Aceptar
+acerca_de=Acerca de...
+activar_regla=Activar regla
+activos=Activos
+adjust_transparency=Ajustar Transparencia
+agrupacion=Agrupaci\u00F3n
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00E1ficos
+agrupar_linea=Agrupar l\u00EDnea gr\u00E1fica con gr\u00E1ficos
+ajustes_linea_grafica=Ajustes de l\u00EDnea gr\u00E1fica
+alerta=Aviso
+alias=Alias
+alineamiento=Alineamiento\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00E1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+ambito=\u00C1mbito
+anadir_titulo=A\u00F1adir t\u00EDtulo
+ancho=Ancho
+ancho_alto=Ancho X Alto
+anchura=Anchura\:
+angulo_rotacion=\u00C1ngulo de rotaci\u00F3n\:
+anterior=Anterior
+area_trabajo=Area de trabajo
+arriba=Arriba
+ascending_order=Orden ascendente
+ascending_order_tooltip=Ordena por el campo seleccionado en orden ascendente
+automatico=Autom\u00E1tico
+back=Anterior
+background_color=Color de fondo
+baja=Baja
+bandas=Bandas
+bands=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bd=bd
+bmp=Ficheros de tipo bmp
+borra_seleccion=Borra selecci\u00F3n
+borrador=Borrador
+borrar=Borrar
+box=box
+browse=Navegar
+calidad=Calidad
+cambio_nombre=Cambio de nombre
+campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+campo_de_documentos_asociados=Campo de documentos asociados
+cancel=Cancelar
+cancelar=Cancelar
+capa=Capa
+capaWMS=CapaWMS
+cargar_leyenda=Cargar leyenda
+cartografico=Cartogr\u00E1fico
+causa_error_desconocida=Error inesperado del servidor
+cerrar=Cerrar
+circulo=C\u00EDrculo
+clave=Clave
+coincidir_tamano=Coincidir tama\u00F1o\:
+coincidir_tamanyo=coincidir tama\u00F1o
+colocar_a_margenes=Colocar con referencia a margenes.
+colocar_alrededor_seleccionados=Colocar alrededor de los gr\u00E1ficos seleccionados.
+colocar_alrededor_todos=Colocar alrededor de todos los gr\u00E1ficos.
+colocar_delante=Colocar delante
+colocar_detras=Colocar detr\u00E1s
+color=Color\:
+color_texto=Color del texto\:
+comentarios=Comentarios
+conectar=Conectar
+conexion_correcta=Conexi\u00F3n correcta
+configuracion_andami_tooltip=Configuraci\u00F3n Andami
+configurar=Configurar
+configurar_localizador=Configurar localizador
+confirmar_borrar=\u00BFSeguro que desea borrar el elemento?
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00F3n
+consulta=Consulta
+coor_geograficas=Coor. Geograficas
+copiar=copy
+copy=Copiar
+cortar=cut
+creation_date=Fecha de creaci\u00F3n
+cuando_activo=Cuando Activo
+cut=Cortar
+de=de
+debe_estar_activada=Debe estar activada
+dehacer=deshacer
+desagrupar=Desagrupar
+desagrupar_capas=desagrupar capas
+desagrupar_graficos=Desagrupar gr\u00E1ficos
+descending_order=Orden descendente
+descending_order_tooltip=Ordena por el campo seleccionado en orden descendente
+desconectar=Desconectar
+descripcion=Descripci\u00F3n
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizacion de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desde=desde
+desde_arriba=Desde Arriba\:
+desde_izquierda=Desde la Izquierda\:
+deshacer=deshacer
+desviacion_tipica=Desviaci\u00F3n t\u00EDpica
+detalles=Detalles
+distance_units=Unidades de medida
+distribuir=Distribuir\:
+divisiones_izquierda=Divisiones a la izquierda
+documentos_existentes=Documentos existentes
+driver=driver
+drivers=Drivers
+edicion=edici\u00F3n
+edit=edita
+editable=Editable
+editar_propiedades=Editar propiedades
+editar_vertices=editar vertices
+el_numero_maximo_de_intervalos_para_este_campo_es=El n\u00FAmero m\u00E1ximo de intervalos para este campo es
+elemento_ya_existe=el elemento ya existe
+eliminar_capa=Eliminar Capa
+eliminar_extremos=Eliminar Extremos
+eliminar_fila=eliminar fila
+en_el_mapa=En el mapa\:
+en_unidades=en unidades
+enlace_vivo=Enlace vivo
+equal_intervals=Intervalos iguales
+error_comunicacion_servidor=Se ha producido un error comunicando con el servidor
+error_escritura=No se pudo guardar el proyecto
+error_lectura=No se pudo abrir el proyecto
+escala=Escala
+escala_maxima=escala m\u00E1xima
+escala_minima=escala m\u00EDnima
+escala_usuario=Escala especificada por el usuario
+espaciado_horizontal=Espaciado horizontal de la malla
+espaciado_vertical=Espaciado vertical de la malla
+espacio=Espacio\:
+espere=Por favor, espere
+estadisticas=Estad\u00EDsticas
+este_por_debajo_de_=Est\u00E9 por debajo de
+este_por_encima_de=Est\u00E9 por encima de
+etiquetas=Etiquetas\:
+export=Exportar
+exportar=Exportar
+exportar_a=Exportar a...
+exportar_pdf=Exportar a pdf
+extension=Extensi\u00F3n
+extents_no_coincidentes=El extent de la imagen seleccionada no coincide con la imagen de origen.
+fallo_capas=fallo capas
+fallo_crear_conexion=Fallo al crear la conexi\u00F3n
+fallo_crear_pool=Fallo en la creaci\u00F3n del Pool de Conexiones
+fallo_obtener_conexion_existente=Fallo al obtener una conexi\u00F3n ya creada
+fallo_obtener_tablas=Fallo al obtener las tablas de la base de datos
+fallo_realizar_consulta=Fallo al realizar una consulta
+fallo_registrar_conexion=Fallo en registro de una conexi\u00F3n
+fichero_existe=El fichero seleccionado ya existe como banda de la capa
+fichero_incorrecto=Fichero incorrecto
+filtro=Filtro
+finalizar=Finalizar
+finish=Finalizar
+formato=Formato
+formato_incorrecto=Formato incorrecto
+fuente=Fuente
+gestion_encuadre=Gesti\u00F3n de Encuadres
+grados=Grados\:
+grosor_linea=Grosor de l\u00EDnea\:
+grupo=grupo
+guardado=Guardado en
+guardar=guardar
+guardar_cambios=\u00BFQuiere guardar los cambios?
+guardar_clave=Guardar clave
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como plantilla
+guardar_leyenda=Guardar leyenda
+guardar_proyecto=Guardar proyecto
+guardar_tooltip=Guarda los cambios del proyecto
+hasta=hasta
+horizontal=Horizontal
+host=m\u00E1quina
+hostname=Hostname
+igual_todos_lados=Desplazamiento igual por todos lados.
+imagen=Imagen
+import=Importar
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+importar=Importar
+importar_extent=Importar el extent actual de la vista
+info=Info
+infobreak=Muestra los elementos de la capa usando una gama de colores.
+infodef=Muestra todos los elementos de una capa usando el mismo s\u00EDmbolo.
+informacion=Informaci\u00F3n
+infovalue=Muestra elementos de la capa usando un s\u00EDmbolo por cada valor.
+initial_warning=<html><b>�ATENCI�N!</b><br>Versi\u00F3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00F1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00FAltima versi\u00F3n estable.</html>
+insert_column=Inserta columna
+insert_row=Insertar fila
+insertar_cajetin=insertar_cajetin
+insertar_circulo=Insertar C\u00EDrculo
+insertar_escala=Insertar Escala
+insertar_fila=insertar fila
+insertar_imagen=Insertar Imagen
+insertar_leyenda=Insertar Leyenda
+insertar_linea=Insertar L\u00EDnea
+insertar_norte=Insertar norte
+insertar_poligono=Insertar Pol\u00EDgono
+insertar_polilinea=insertar polil\u00EDnea
+insertar_punto=Insertar Punto
+insertar_recta=Insertar Recta
+insertar_rectangulo=Insertar Rect\u00E1ngulo
+insertar_texto=Insertar Texto
+insertar_vista=Insertar Vista
+intervalo=intervalo
+introduce_nombre=Introduce el nuevo nombre
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_intervalo_deseado=introduzca el intervalo deseado
+join=Uni\u00F3n
+jpg=Ficheros JPEG
+kilometros=Kil\u00F3metros
+leyenda=Leyenda
+leyenda_campo_unido=Se est\u00E1 utilizando un campo de la uni\u00F3n en la leyenda (y/o etiquetado). Cambie la leyenda antes de quitar la uni\u00F3n, por favor.
+linea=L\u00EDnea
+linea_grafica=L\u00EDnea gr\u00E1fica
+lineal_directo=Lineal Directo
+linf_der=Inf. der.  X
+link=Enlace
+localizador=Localizador
+lppp=ppp
+lsup_izq=Sup. izq. X
+malla_activada=Malla activada
+mantener_intervalo=Mantener intervalo
+map_units=Unidades de mapa
+mapa=mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco de la vista
+margenes=M\u00E1rgenes\:
+mas_de_100_simbolos=M\u00E1s 100 de s\u00EDmbolos no suelen aportar informaci\u00F3n en un plano.
+maximo=M\u00E1ximo
+media=Media
+medir_area=Medir \u00C1rea
+medir_distancias=Medir distancias
+metros=Metros
+minimo=M\u00EDnimo
+modificar=Modify
+modification_date=\u00DAltima fecha de modificaci\u00F3n
+mosaico_tooltip=Mosaico
+mostrar_descripcion=Mostrar descripci\u00F3n
+mostrar_unidades=Mostrar unidades
+muestra=muestra
+muestra_consola_tooltip=Muestra la consola
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Muestra los elementos de la capa usando un s\u00EDmbolo por cada valor \u00FAnico
+multiples_intervalos=multiples intervalos
+natural_intervals=Intervalos naturales
+navegacion=Navegaci\u00F3n
+navegacion_vista=Navegaci\u00F3n Vista
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+next=Siguiente
+ninguna_impresora_configurada=Ninguna impresora configurada
+no_activos=No activos
+no_visibles=No visibles
+nombre=Nombre
+nombre_capa=Nombre de la capa
+nombre_cobertura=Nombre de la cobertura
+nombre_sesion=Nombre de la sesi\u00F3n
+normal=Normal
+north=Norte
+nuevo=Nuevo
+nuevo_proyecto=Nuevo proyecto
+nuevo_tamano_fuente=Nuevo tama\u00F1o de fuente\:
+nuevo_tooltip=Crea un nuevo proyecto
+num_bandas=N\u00FAmero de bandas
+num_columnas=N\u00FAmero de columnas
+num_filas=N\u00FAmero de filas
+numero_incorrecto=N\u00FAmero incorrecto
+offline=Desconectado
+ok=Ok
+online=Conectado
+opacidad=Opacidad
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contrase\u00F1a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.port=Puerto proxy SOCKS
+optinos.network.click_to_test_connection=Pulse el bot�n para comprobar la conexi�n
+options.network.status=Estado de la conexi�n
+orientacion=Orientaci\u00F3n\:
+owner=Propietario
+parametros=Par\u00E1metros
+paste=Pegar
+path=Ruta
+pegar=paste
+pila_de_comandos=pila de comandos
+pixeles=p\u00EDxeles
+pixels=p\u00EDxeles
+plantilla=template
+png=Ficheros png
+poligono=Pol\u00EDgono
+polilinea=polil\u00EDnea
+poner_capas_a=Poner capas a ...
+por_debajo_de=por debajo de\:
+por_encima_de=por encima de\:
+posicion_linea=Posici\u00F3n de la l\u00EDnea
+pref.general=General
+pref.network.firewall=Firewall/Proxy
+pref.network=Red
+preferences=Preferencias...
+preparar_pagina=Preparar p\u00E1gina
+presentacion=Presentaci\u00F3n
+propiedad=property
+propiedades=Propiedades
+propiedades_cajetin=Propiedades del cajet\u00EDn
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+propiedades_grafico=Propiedades Gr\u00E1fico
+propiedades_mapa=Propiedades del mapa
+propiedades_marco_imagenes=Propiedades del marco de im\u00E1genes
+propiedades_marco_leyenda=Propiedades del marco de la leyenda
+propiedades_marco_vista=Propiedades del marco de la vista
+propiedades_raster=Propiedades del r\u00E1ster
+propiedades_sesion=Propiedades de la sesi\u00F3n
+propiedades_tabla=Propiedades de la tabla
+propiedades_vista=Propiedades de la vista
+prueba_conexion=Prueba de la conexi\u00F3n
+puerto=Puerto
+punto=Punto
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=\u00BFEst\u00E1 seguro de que quiere continuar?
+quitar_enlaces=Quitar enlaces
+quitar_uniones=Quitar uniones
+rango_de_escalas=Rango de escalas
+realce=Realce
+realmente_desea_guardar=Realmente desea guardar
+recorte=recorte
+recorte_colas=Recorte de Colas
+recorte_vista=Recorte a vista
+recta=Recta
+rectangulo=Rect\u00E1ngulo
+recuento=Recuento
+refrescar=Refrescar
+registros=registros
+registros_seleccionados_total=Total registros seleccionados
+rehacer=rehacer
+rellenar_marco_vista=Rellenar marco de la vista
+relleno=Relleno\:
+remove_column=Elimina columna
+remove_row=Elimina fila
+renombrar=Renombrar
+reproyectar_aviso=La proyecci\u00F3n de la capa no es igual que la de la vista.\nAVISO\: Puede ser inexacto con algunas transformaciones.\nPor favor, lea la documentaci\u00F3n.
+reproyectar_pregunta=\u00BFDesea reproyectar?
+resolucion=Resoluci\u00F3n
+resolucion_resultado=Resoluci\u00F3n del resultado\:
+respuesta_error_servidor=No se ha podido obtener la cobertura
+resto_valores=Resto de valores
+restore=Restaurar
+restore_defaults=Restaurar valores predeterminados
+salir=Salir
+salir_tooltip=Salir
+salvar_raster=Salvar a r\u00E1ster
+seleccion=Selecci\u00F3n
+seleccion_campos=Seleccione los campos
+seleccion_fuente=Selecci\u00F3n de fuente
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar_CRS=Seleccionar CRS
+seleccionar_capas=Seleccionar Capas
+seleccionar_coberturas=Seleccionar Coberturas
+seleccionar_formato=Seleccionar Formato
+seleccionar_parametros=Seleccionar los par\u00E1metros
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00E1ngulo
+seleccionar_tiempo=Seleccionar la posici\u00F3n para el tiempo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccione el campo por el que enlazar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00E1 el \u00E1ngulo con el que se mostrar\u00E1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00E1 el color con el que se mostrar\u00E1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00E1 la fuente con el que se mostrar\u00E1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00E1 el alto con el que se mostrar\u00E1 la etiqueta</HTML>
+seleccione_fecha=Seleccione una fecha...
+seleccione_tabla=Selecciona la tabla
+seleccione_tabla_a_enlazar=Seleccione la tabla a enlazar
+seleccione_tabla_origen=Seleccione la tabla origen de la join
+select_all=Seleccionar todos
+select_geom_field=Selecciona el campo que lleva la geometr\u00EDa
+select_none=Quitar todos
+select_unique_field=Seleccione el campo \u00FAnico
+selection_color=Color de la selecci\u00F3n
+servidor=Servidor
+servidor_wcs_no_responde=El servidor seleccionado no responde
+shape_seleccion=Exportar selecci\u00F3n.
+show_this_dialog_next_startup=Mostrar este di\u00E1logo la pr\u00F3xima vez
+siempre=Siempre
+siguiente=Siguiente
+simbolo=s\u00EDmbolo
+simple=Simple
+simplificar=Simplificar
+sin_realce=Sin Realce
+sin_titulo=Sin t\u00EDtulo
+sincronizar_color_borde_relleno=Sincronizar el color del borde con el del relleno\:
+sobre_la_barra=Sobre la barra
+start_edition=Comenzar edici\u00F3n
+statistics=Estad\u00EDsticas
+stop_edition=Terminar edici\u00F3n
+suma=Suma
+tablas=Tablas
+tag=tag
+tamano=Tama\u00F1o\:
+tamano_metros=Tama\u00F1o en metros
+tamano_pagina=Tama\u00F1o de p\u00E1gina\:
+tamano_posicion=Tama\u00F1o y posici\u00F3n
+tamano_posicion=tama\u00F1o/posici\u00F3n
+tamanyo_borde=Tama\u00F1o del borde
+tamanyo_fuente=Tama\u00F1o de fuente
+tamanyo_pagina=tama\u00F1o de p\u00E1gina
+tarea_en_progreso=Tarea en progreso
+test_now=Comprobar ahora
+texto=Texto
+tipo_dato=Tipo de Dato
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_leyenda=Tipo de leyenda
+tipo_fichero_proyecto=Fichero de proyecto gvSIG (*.gvsproj)
+tipo_leyenda=Ficheros de tipo leyenda (*.GVL)
+tipo_linea=Tipo de L\u00EDnea\:
+tipo_relleno=Tipo de Relleno\:
+tipo_simbolo=Tipo de s\u00EDmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Gestor de proyectos
+titulo_confirmar=Confirmaci\u00F3n
+titulo_fframetext=T\u00EDtulo del campo de texto
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+toda_la_tabla=Toda la tabla
+transparencia=Transparencia
+transparencia_pixel=Transparencia por pixel
+unidades=Unidades\:
+untitled=Sin t\u00EDtulo
+usar_marco=Usar marco
+usar_rango=Usa un rango
+usar_titulo=Usar t\u00EDtulo
+usuario=Usuario
+utilizar_margenes_impresora=Utilizar m\u00E1rgenes de la impresora.
+vacia=Vac\u00EDa
+valor_pixel=Valor de pixel
+varianza=Varianza
+ventana_proyecto=Ventana de proyecto
+ver_tabla_atributos=Ver Tabla de atributos
+ver_tooltip=Muestra la ventana de proyecto
+vertical=Vertical
+vertices=vertices
+visible=Visible
+visibles=Visibles
+vistas=Vistas
+visualizacion=Visualizaci\u00F3n
+visualizar_cuadricula=Visualizar Malla
+warning=Aviso
+wcs_properties=Propiedades WCS
+web_map_context=Web Map Context
+xmax=X m\u00E1xima
+xmin=X m\u00EDnima
+ymax=Y m\u00E1xima
+ymin=Y m\u00EDnima
+zoom_mas_vista=Zoom M\u00E1s Vista
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_en.properties	(revision 42196)
@@ -0,0 +1,735 @@
+#text_en.properties
+(escala_maxima)=(maximum scale)
+(escala_minima)=(minimum scale)
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+Abrir_Imagen=Open image
+Abrir_una_capa=Open Layer
+Accion_Predefinida=Predefined Action
+Aceptar=OK
+Ajustar_cobertura_wcs=WCS coverage settings
+Ajustar_transparencia=Adjust Transparency
+Al_leer_la_leyenda=Reading legend
+Altura_fija_de_texto=Fixed text height
+Anadir=Add
+Anadir_Capa=Add Layer
+Anadir_al_conjunto=Add to set
+Anadir_capa=Add layer
+Anadir_todos=Add all
+Ancho_Contorno=Outline Width
+Ancho_de_linea=Line Width
+Anterior=Previous
+Aplicar=Apply
+Archivo=File
+Archivos_de_Disco=Disc files
+Atributo=Attribute
+Ayuda=Help
+Back=Previous
+Bajar_capa=Move layer down
+Bold=Bold
+Calcular_intervalos=Compute intervals
+Cambio_Color=Change Color
+Cambio_Estilo=Change Style
+Cambio_de_estilo=Change style
+Cambios_de_estilo=Style changes
+Campo=Field
+Campo_clasifica=Classification field
+Campo_de_clasificacion=Classification field
+Campo_de_etiquetado=Labelling field
+Campos=Fields
+Cancel=Cancel
+Cancelar=Cancel
+Capa=Layer
+Capas=Layers
+Capas_del_localizador=Locator layers
+Centimetros=Centimeters
+Cerrar=Close
+Circulo=Circle
+Coberturas=Coverages
+Color_Contorno=Color Outline
+Color_de_Relleno=Fill color\:
+Color_de_la_Linea=Line Color
+Color_final=End color\:
+Color_inicial=Initial color\:
+Color_inicio=Begin color
+Configurar_localizador=Configure locator ...
+Contengan=contain
+Crucen_con=cross over
+Cruz=Cross
+Cuadrado=Square
+DGNFiles=DGNFiles
+Dado_un_campo_de_atributos=Given a atribute field
+Derecha=Right
+Derecho=Right
+Descripcion=Description
+Desplazamiento=Displacement
+Detalles=Details
+Dxffiles=DXFFiles
+Editar_leyenda=Edit style
+Elegir_Color=Select Color
+Elegir_Fuente=Select Font
+Elementos_seleccionados_de_la_capa=selected items of a layer
+Eliminar=Delete
+En_metros=In meters
+En_pixels=In pixels
+Encuadre=Zoom
+Encuadre_Vista=View frame Pan
+Enlazar_a_fichero_de_texto=Link to text files
+Enlazar_a_ficheros_de_imagen=Link to image files
+Error_abriendo_el_fichero=Error opening file
+Error_accediendo_a_los_datos=Error getting data
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_leyenda=Error saving legend
+Error_guardando_la_plantilla=Error saving the template
+Escala=Scale
+Escala_Maxima=Maximum scale
+Escala_Minima=Minimum scale
+Esten_contenidos_en=contained in
+Estilo=Style\:
+Etiqueta=Label
+Etiquetado=Labelling
+Etiquetados=Labelling
+Etiquetas_estandar=Standard labels
+Examinar=Browse
+Extent=Extent
+Fichero=File
+Font=Font
+Formato=Format
+Formato_de_numero_erroneo=Incorrect number format
+Fuente=Font
+General=General
+Generar_Intervalos=Generate Intervals
+Graficos=Graphics
+Graficos=Graphics
+Grosor_de_linea=Line width
+Guardar=Save
+Guardar_el_zoom_actual=Save current zoom
+Guardar_leyenda=Save Style
+Habilitar_etiquetado=Enable labelling
+Herramientas=Tools
+Herramientas_vista=View tools
+Hiperenlace=Hyperlink
+Identificar_Resultados=Identify Results
+Igual_que_la_impresora=Same as printer
+Imagen=Image
+Imprimir=Print
+Indexando=Indexing...
+Indexando_espacialmente=Spatially indexing the layer
+Inferior=Lower
+Informacion=Information
+Inicializando=Initializing
+Insertar=Insert
+Intersecten_con=intersected with
+Intervalo=Interval
+Intervalos=Intervals
+Intervalos_equidistantes=Equality Intervals
+Intervalos_por_rupturas_naturales=Intervals by natural breaks.
+Italic=Italic
+Izquierda=Left
+Izquierdo=Left
+Kilometros=Kilometers
+Leyenda=Legend
+Leyenda_Por_Defecto=Default legend
+Linea=Line
+Link=Link
+Localizador_por_atributo=Locate by attribute
+Mapa=Map
+Mas_100=The number of values is higher than 100, and does not provide information
+Metros=Meters
+Milimetros=Milimeters
+Millas=Miles
+Mostrar_Contorno=Show Outline
+Mostrar_siempre=To show always
+Muestra_atributos=Show attributes of selected layers.
+Muestra_los_atributos_de_las_capas_seleccionadas=Show selected layers attributes
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Show the layers features using a range of color according to values of a attribute field
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Show all the items of a layer using the same symbol
+Next=Next
+Nivel_de_transparencia=Transparency Level
+No_Shape=This Layer is not Shape type
+No_de_intervalos=Nr of intervals
+No_mostrar=Do not show the layer when the scale
+No_mostrar_la_capa_cuando_la_escala=Don\u0092t show the layer when the scale
+No_reconocido=Not recognized
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+Nombre=Name
+Nombre_que_se_le_dara_al_zoom=Name for the zoom
+Nombres=Names
+Nueva_tabla=New Table
+Nuevo_conjunto=New set
+Num_intervalos=Number of Intervals
+Origen_de_Datos=Data Origin\:
+Origen_de_datos=Data origin
+Otros=Other
+Parametros=Parameters
+Perimetro=Perimeter
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Allows to set label of the map elements with the value of a particular field
+Personalizado=Custom
+Pies=Feet
+Plain=Plain
+Por_favor_active_el_tema=Please activate the layer
+Preparar_pagina=Prepare Page
+Previsualizacion=Preview
+Previsualizacion_de_simbolo=Symbol preview
+Propiedades_de_la_Capa=Properties of the layer
+Propiedades_del_Tema=Theme properties
+Propiedades_escala_grafica=Properties of the scale bar
+Propiedades_texto=Properties of text
+Pulgadas=Inches
+Quitar=Remove
+Quitar_Todos=Remove All
+Quitar_capa=Remove layer
+Quitar_todos=Remove all
+Rango_de_escalas=Rank of Scales
+Rasterfiles=Rasterfiles
+Recuperar_leyenda=Load legend
+Recuperar_y_eliminar_otros_zoom=Recover and delete other zoom
+S\u00EDmbolo=Symbol
+Salir=Exit
+Sample=Sample
+Se_superponen_a=over
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... delete registers from
+Sean_disjuntos_a=disjoint as
+Sean_iguales_a=same as
+Seleccion_por_tema=Theme Selection
+Seleccionar=Select
+Seleccionar_de_las_capas_activas_los_elementos_que=Select items from active layers that are\:
+Seleccionar_del_conjunto=Select from set
+Seleccionar_fichero=Select file
+Servidor=Server
+Shapefile=Shapefile
+Shapefiles=Shapefiles
+Siguiente=Next
+Simbolo=Symbol
+Simbolo_Unico=Unique symbol
+Simbolo_unico=Unique symbols
+Simbologia=Symbols
+Size=Size
+Solo_para_capas_vectoriales=Only for vector layers
+Style=Style
+Subir_capa=Move layer up
+Superior=Upper
+Tabla=Table
+Tabla_de_Atributos=Table of Attributes
+Tabla_de_prueba=Test Table
+Tiempo=Time
+Tipo_de_intervalos=Type of intervals
+Tipo_de_leyenda=Type of legend
+Tipo_de_linea=Line type
+Tipo_no_reconocido=Type not recognized
+Toquen=in contact with
+Transparencia=Transparency
+Triangulo=Triangle
+Un_Layer=Select at least one layer
+Unidades=Units
+Usar_indice_espacial=Use spatial index
+Use this tool to create a virtual layer to perform advanced labelling, based on an existing layer. It changes the selected tool\u0092s visualization by showing one of its<br> fields\u0092 values.</HTML>
+Valor=Value
+Valor_Bandas=Band value
+Valor_azul=Blue Value
+Valor_rojo=Red value
+Valor_verde=Green value
+Valores=Values
+Valores_Unicos=Unique values
+Valores_unicos=Unique values
+Ventana=Window
+Ver=Show
+Vista=View
+Visualizacion=Visualization
+WMS=WMS
+Yardas=Yards
+Zoom=Pan zoom
+Zoom_Acercar=Zoom in
+Zoom_Alejar=Zoom out
+Zoom_Completo=Full Extent
+Zoom_Completo_Vista=View frame Full Extent
+Zoom_Mas=Zoom In
+Zoom_Mas_Vista=Zoom In View frame
+Zoom_Menos=Zoom Out
+Zoom_Menos_Vista=View frame Zoom Out
+Zoom_Previo=Previous Zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom to selection
+Zoom_a_la_capa=Zoom to layer
+Zoom_al_Tema=Zoom to layer
+Zoom_pixel=Zoom to raster resolution
+_(Etiquetas_estandar)=(Standard labels)
+_(Intervalos)=(Intervals)
+_(Simbolo_unico)=(Unique symbols)
+_(Valores_unicos)=(Unique values)
+__espacio_vertical=Vertical spacing\:
+__lineas=lines
+__proyeccion_actual=Current projection\:
+__redimensionar_texto_escala=Resize the text to the view scale
+__seleccion_de_fuente=Font selection
+abajo=Down
+abrir=Open
+abrir_plantilla=Open template
+abrir_proyecto=Open project
+abrir_tooltip=Open an existing project
+aceptar=OK
+acerca_de=About...
+activar_regla=Activate ruler
+activos=Active
+adjust_transparency=Set Transparency
+agrupacion=grouping
+agrupar=Group
+agrupar_capas=Group layers
+agrupar_graficos=Group graphics
+agrupar_linea=Group graphic line with graphics
+ajustes_linea_grafica=Graphic line settings
+alerta=Warning
+alias=Alias
+alineamiento=Alignment\:
+alinear=Align
+alinear_graficos=Align graphics
+alta=High
+alto=Height
+altura=Height\:
+ambito=Scope
+ancho=Width
+ancho_alto=Wide X Height
+anchura=Width\:
+angulo_rotacion=Angle of rotation\:
+anterior=Previous
+area_trabajo=Working area
+arriba=Up
+ascending_order=Ascending order
+ascending_order_tooltip=Sort by selected field in ascending order
+automatico=Automatic
+back=Previous
+background_color=Background color
+baja=Low
+bandas=Bands
+bands=Bands
+barra=Bar\:
+base=base
+base_datos=Data base
+bd=db
+bmp=BMP files
+borra_seleccion=Del selection
+borrador=Draft
+borrar=Delete
+box=box
+browse=browse
+calidad=Quality
+cambio_nombre=Name change
+campo=Field
+campo_altura_texto=Text field heigth\:
+campo_de_documentos_asociados=Associated documents field
+cancel=Cancel
+cancelar=Cancel
+capaWMS=WMSLayer
+cargar_leyenda=Load legend
+cartografico=Cartographic
+causa_error_desconocida=Unexpected server error
+cerrar=Close
+circulo=Circle
+clave=Code
+coincidir_tamano=Match size\:
+coincidir_tamanyo=match size
+colocar_a_margenes=Place with reference to margins.
+colocar_alrededor_seleccionados=Place around the graphics selected.
+colocar_alrededor_todos=Place around all the graphics.
+colocar_delante=Bring to front
+colocar_detras=Place back
+color=Color\:
+color_texto=Text color\:
+comentarios=Comments
+conectar=Conect
+conexion_correcta=Correct connection
+configuracion_andami_tooltip=Andami configuration
+configurar=Configure
+configurar_localizador=Configure Locator Map
+confirmar_borrar=The element will be removed. Are you sure?
+conservar_escala_visualizacion=Maintain viewing scale
+consulta=Query
+coor_geograficas=Geografical coordinates
+copiar=copy
+copy=Copy
+cortar=cut
+creation_date=Creation date
+cuando_activo=When active
+cut=Cut
+de=of
+debe_estar_activada=Must be active
+dehacer=undo
+desagrupar=Ungroup
+desagrupar_capas=ungroup layers
+desagrupar_graficos=Ungroup graphics
+descending_order=Descending order
+descending_order_tooltip=Sort by selected field in descending order
+desconectar=Disconnect
+descripcion=Description
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>
+desde=from
+desde_arriba=From top\:
+desde_izquierda=From left\:
+deshacer=undo
+desviacion_tipica=Standard deviation
+detalles=Details
+distance_units=Measuring units
+distribuir=Distributing\:
+divisiones_izquierda=Divisions to the left
+documentos_existentes=Existing documents
+driver=driver
+drivers=Drivers
+edicion=edition
+edit=edit
+editable=Editable
+editar_propiedades=Edit properties
+editar_vertices=edit vertex
+el_numero_maximo_de_intervalos_para_este_campo_es=The maximum number of intervals for this field is
+elemento_ya_existe=the element already exists
+eliminar_capa=Delete Layer
+eliminar_extremos=Remove edges
+eliminar_fila=remove row
+en_el_mapa=In the Layout\:
+en_unidades=in units
+enlace_vivo=Active link
+equal_intervals=Equal intervals
+error_comunicacion_servidor=An error connecting to server
+error_escritura=Can\u0092t write file
+error_lectura=Can\u0092t read file
+escala=Scale
+escala_maxima=maximum scale
+escala_minima=minimum scale
+escala_usuario=Scale specified by the user
+espaciado_horizontal=Horizontal grid spacing
+espaciado_vertical=Vertical grid spacing
+espacio=Space\:
+espere=Please wait
+estadisticas=Statistics
+este_por_debajo_de_=To be under
+este_por_encima_de=To be over
+etiquetas=Lables\:
+export=Export
+exportar=Export
+exportar_a=Export to...
+exportar_pdf=Export to pdf
+extension=Extension
+extents_no_coincidentes=Extent of the selected image does not match with the origin image.
+fallo_capas=layer error
+fallo_crear_conexion=Connection failure
+fallo_crear_pool=Failed to create connection pool
+fallo_obtener_conexion_existente=Failed to get a created connection
+fallo_obtener_tablas=Failed to obtain tables from the data base
+fallo_realizar_consulta=Failed to create a query
+fallo_registrar_conexion=Failed to register a connection
+fichero_existe=Selected file already exists as layer band
+fichero_incorrecto=Invalid file
+filtro=Filter
+finalizar=Finish
+finish=Finish
+formato=Format
+formato_incorrecto=Invalid format
+fuente=Font
+gestion_encuadre=Management of Fit in
+grados=Degrees\:
+grosor_linea=Line width\:
+grupo=group
+guardado=Saved in
+guardar=save
+guardar_cambios=Save changes?
+guardar_clave=Save code
+guardar_como=Save as...
+guardar_como_plantilla=Save as template
+guardar_leyenda=Save legend
+guardar_proyecto=Save project
+guardar_tooltip=Save changes to project
+hasta=to
+horizontal=Horizontal
+host=computer
+hostname=Hostname
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+import=Import
+import_map_context=Import maps from an OGC\u0092s Web Map Context file
+importar=Import
+importar_extent=Import actual view extent
+info=Info
+infobreak=It shows the elements of the layer using a range of colors.
+infodef=It shows all the elements of a layer using the same symbol.
+informacion=Information
+infovalue=It shows elements of the layer using a symbol for each value.
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_column=insert column
+insert_row=insert row
+insertar_cajetin=insert grid
+insertar_circulo=Insert Circle
+insertar_escala=Insert Scale
+insertar_fila=inster row
+insertar_imagen=Insert Image
+insertar_leyenda=Insert Legend
+insertar_linea=Insert Line
+insertar_norte=Insert north
+insertar_poligono=Insert Polygon
+insertar_polilinea=insert polyline
+insertar_punto=Insert Point
+insertar_recta=Insert Straight line
+insertar_rectangulo=Insert Rectangle
+insertar_texto=Insert Text
+insertar_vista=Insert View
+intervalo=interval
+introduce_nombre=Type the new name
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_intervalo_deseado=insert the desired interval
+join=Join
+jpg=JPEG files
+kilometros=Kilometers
+leyenda=Legend
+leyenda_campo_unido=You are using a field of the union either in the legend or in the labelling. Please, change the legend before removing the union.
+linea=Line
+linea_grafica=Graphic line
+lineal_directo=Direct Linear
+linf_der=lower right X
+link=Link
+localizador=Locator
+lppp=ppi
+lsup_izq=Upper left X
+malla_activada=Active grid
+mantener_intervalo=Keep interval
+map_units=Map units
+mapa=map
+mapas=Maps
+marco=Frame
+marco_vista=Framework of the view
+margenes=Margins\:
+mas_de_100_simbolos=More than 100 symbols usually do not give any information in a map
+maximo=Maximum
+media=Mean
+medir_area=Measure area
+medir_distancias=Measure distances
+metros=Meters
+minimo=Minimum
+modificar=modify
+modification_date=Modification date
+mosaico_tooltip=Mosaic
+mostrar_descripcion=Show description
+mostrar_unidades=Show units
+muestra=sample
+muestra_consola_tooltip=Shows the console
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Show the layers features using a each unique value symbol
+multiples_intervalos=multiple intervals
+natural_intervals=Natural intervals
+navegacion=Navigation
+navegacion_vista=Navegation in a view
+necesita_un_tema_activo=Needs an active theme
+necesita_un_tema_vectorial_activo=Needs an active vectorial theme
+next=Next
+ninguna_impresora_configurada=No printer set
+no_activos=Not active
+no_visibles=Not visible
+nombre=Name
+nombre_capa=Name of the layer
+nombre_cobertura=Coverage\u0092s name
+nombre_sesion=Session name
+normal=Normal
+north=North
+nuevo=New
+nuevo_proyecto=New project
+nuevo_tamano_fuente=New size of font\:
+nuevo_tooltip=Create a new project
+num_bandas=Number of bands
+num_columnas=Number of columns
+num_filas=Number of rows
+numero_incorrecto=Invalid value
+offline=Offline
+ok=Ok
+online=Online
+opacidad=Opacity
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+optinos.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+orientacion=Orientation\:
+owner=Owner
+parametros=Parameters
+paste=Paste
+path=Path
+pegar=paste
+pila_de_comandos=commands stack
+pixeles=pixels
+pixels=pixels
+plantilla=plantilla
+png=PNG files
+poligono=Poligon
+polilinea=polyline
+poner_temas_a=Set themes to ...
+por_debajo_de=below\:
+por_encima_de=above\:
+posicion_linea=Position of the line
+pref.general=General
+pref.network.firewall=Firewall/Proxy
+pref.network=Network
+preferences=Preferences...
+preparar_pagina=Prepare page
+presentacion=Presentation
+propiedad=property
+propiedades=Properties
+propiedades_cajetin=Grid properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+propiedades_grafico=Graphic properties
+propiedades_mapa=Map properties
+propiedades_marco_imagenes=Properties of Image framework
+propiedades_marco_leyenda=Properties of legend framework
+propiedades_marco_vista=Properties of view framework
+propiedades_raster=Raster propierties
+propiedades_sesion=Session properties
+propiedades_tabla=Table properties
+propiedades_tema=Layer properties
+propiedades_vista=View properties
+prueba_conexion=Connection test
+puerto=port
+punto=Point
+quantile_intervals=Quantile interval
+quiere_continuar=Would you like to continue?
+quitar_enlaces=Remove links
+quitar_uniones=Remove joins
+rango_de_escalas=Scale range
+realce=Enhance
+recorte=clipping
+recorte_colas=Queue clipping
+recorte_vista=Cut to view
+recta=Straight line
+rectangulo=Rectangle
+recuento=Recount
+refrescar=Refresh
+registros=records
+registros_seleccionados_total=Total of selected records
+rehacer=redo
+rellenar_marco_vista=Fill view framework
+relleno=Fill\:
+remove_column=Remove column
+remove_row=Remove row
+renombrar=Rename
+reproyectar_aviso=The layer projection is not the same as the views projection.\nATENTION\: It can be unaccurate with some transformations.\nPlease read docs
+reproyectar_pregunta=Do you want to reproject?
+resolucion=Resolution
+resolucion_resultado=Resolution of the result\:
+respuesta_error_servidor=Cannot get the coverage
+resto_valores=Other values
+restore_defaults=Restore default values
+salir=Exit
+salir_tooltip=Exit
+salvar_raster=Save as raster
+seleccion=Selection
+seleccion_campos=Select fields
+seleccion_fuente=Font selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar_CRS=Select CRS
+seleccionar_capas=Select Layers
+seleccionar_coberturas=Select Coverages
+seleccionar_formato=Select Format
+seleccionar_parametros=Select parameters
+seleccionar_por_punto=Select by point
+seleccionar_por_rectangulo=Select by rectangle
+seleccionar_tiempo=Select time position
+seleccionar_todos=Select all
+seleccione_campo_enlace=Select field to use for link
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+seleccione_fecha=Select date...
+seleccione_tabla=Table select
+seleccione_tabla_a_enlazar=Select table to link
+seleccione_tabla_origen=Select origin table of the join
+select_all=Select all
+select_geom_field=Select field with geometry
+select_none=Remove all
+select_unique_field=Select unique field
+selection_color=Color selection
+servidor=Server
+servidor_wcs_no_responde=No reply on selected server
+shape_seleccion=Export selection.
+show_this_dialog_next_startup=Show this dialog on next startup
+siempre=Always
+siguiente=Next
+simbolo=symbol
+simple=Simple
+simplificar=Simplify
+sin_realce=No enhance
+sin_titulo=Untitled
+sincronizar_color_borde_relleno=Sincronize color of stroke and fill\:
+sobre_la_barra=On the scale bar
+start_edition=Start edition
+statistics=Statistics
+stop_edition=Finish edition
+suma=Sum
+tablas=Tables
+tag=tag
+tamano=Size\:
+tamano_metros=Size in meters
+tamano_pagina=Page Size
+tamano_posicion=Size and position
+tamano_posicion=size/position
+tamanyo_borde=Border size
+tamanyo_fuente=Font size
+tamanyo_pagina=page size
+tarea_en_progreso=Running process
+tema=Layer
+test_now=Check now
+texto=Text
+tipo_dato=Data type
+tipo_de_intervalo=Interval type
+tipo_de_leyenda=Type of legend
+tipo_fichero_proyecto=gvSIG project file(*.gvsproj)
+tipo_leyenda=Legend files (*.GVL)
+tipo_linea=Stroke\:
+tipo_relleno=Fill\:
+tipo_simbolo=Type of symbol\:
+tipos_de_documentos=Document types
+titulo=Project manager
+titulo_confirmar=Confirmation
+titulo_fframetext=Text field title
+to_annotation=Transform to annotation layer
+toda_la_tabla=Entire table
+transparencia=Transparency
+transparencia_pixel=Transparency per pixel
+unidades=Units\:
+untitled=Untitled
+usar_marco=Use frame
+usar_rango=Range in use
+usar_titulo=Use title
+usuario=user
+utilizar_margenes_impresora=Use printer margins
+vacia=Empty
+valor_pixel=Pixel value
+varianza=Variance
+ventana_proyecto=Project window
+ver_tabla_atributos=See table of attributes
+ver_tooltip=Show project window
+vertical=Vertical
+vertices=vertex
+visible=Visible
+visibles=Visible
+vistas=Views
+visualizacion=Viewing
+visualizar_cuadricula=Visualize Grid
+warning=Warning
+wcs_properties=WCS properties
+web_map_context=Web Map Context
+xmax=Maximum X
+xmin=Minimum X
+ymax=Maximum Y
+ymin=Minimum Y
+zoom_mas_vista=Zoom In View frame
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/gui/FOpenDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/gui/FOpenDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/gui/FOpenDialog.java	(revision 42196)
@@ -0,0 +1,222 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package com.iver.cit.gvsig.gui;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.cresques.cts.IProjection;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.View;
+import com.iver.andami.ui.mdiManager.ViewInfo;
+import com.iver.cit.gvsig.gui.wizards.WizardListener;
+import com.iver.cit.gvsig.project.Project;
+/**
+ * Di�logo para cargar las dieferentes capas a la vista.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FOpenDialog extends JPanel implements com.iver.andami.ui.mdiManager.View {
+	//private javax.swing.JDialog jDialog = null;  //  @jve:visual-info  decl-index=0 visual-constraint="19,27"
+    
+	static private IProjection proj = Project.getProjection();
+	
+	private javax.swing.JTabbedPane jTabbedPane = null;
+    private javax.swing.JPanel psegundo = null;
+    private DefaultListModel m_lstModel;
+    private JFileChooser fileChooser;
+
+	private JPanel jPanel = null;
+	private JButton btnAceptar = null;
+	private JButton jButton = null;
+	
+	private boolean accepted = false;
+	
+	private WizardListener wizardListener = new DialogWizardListener();
+    /**
+     * Creates a new FOpenDialog object.
+     *
+     * @param view Vista que vamos a refrescar
+     * @param mapControl MapControl que recibe la capa (te puede interesar
+     *        a�adirla al principal o al Overview.
+     */
+    public FOpenDialog() {
+    	initialize();
+    	
+        // Cada vez que se abre, se borran las capas que pudiera haber.
+        m_lstModel = new DefaultListModel(); 
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(523, 385);
+        this.setPreferredSize(new java.awt.Dimension(523, 385));
+        this.add(getJTabbedPane(), BorderLayout.CENTER);
+        this.add(getJPanel(), java.awt.BorderLayout.SOUTH);
+    }
+
+    /**
+     * This method initializes jTabbedPane
+     *
+     * @return javax.swing.JTabbedPane
+     */
+    private javax.swing.JTabbedPane getJTabbedPane() {
+        if (jTabbedPane == null) {
+            jTabbedPane = new javax.swing.JTabbedPane();
+            jTabbedPane.setBounds(0, 0, getViewInfo().getWidth()-10, getViewInfo().getHeight()-10);
+            jTabbedPane.addChangeListener(new ChangeListener() {
+				public void stateChanged(ChangeEvent e) {
+					JTabbedPane tabs = (JTabbedPane) e.getSource();
+					getBtnAceptar().setEnabled(!(tabs.getSelectedComponent() instanceof WizardPanel));
+				}
+			});
+        }
+
+        return jTabbedPane;
+    }
+
+    public void addTab(String title, JPanel panel){
+    	getJTabbedPane().addTab(title, panel);
+    }
+    
+    public void addWizardTab(String title, WizardPanel panel){
+    	panel.addWizardListener(wizardListener);
+    	getJTabbedPane().addTab(title, panel);
+    }
+    
+    public JPanel getSelectedTab(){
+    	return (JPanel) getJTabbedPane().getSelectedComponent();
+    }
+    
+    public ViewInfo getViewInfo() {
+    	ViewInfo m_viewinfo = new ViewInfo(ViewInfo.MODALDIALOG);
+   		m_viewinfo.setTitle(PluginServices.getText(this,"Abrir_una_capa"));
+   		 m_viewinfo.setHeight(500);
+   		 m_viewinfo.setWidth(520);
+        return m_viewinfo;
+    }
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */    
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			jPanel = new JPanel();
+			jPanel.setLayout(flowLayout1);
+			flowLayout1.setHgap(30);
+			jPanel.add(getBtnAceptar(), null);
+			jPanel.add(getJButton(), null);
+		}
+		return jPanel;
+	}
+	/**
+	 * This method initializes btnAceptar	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */    
+	private JButton getBtnAceptar() {
+		if (btnAceptar == null) {
+			btnAceptar = new JButton();
+			btnAceptar.setText(PluginServices.getText(this,"Aceptar"));
+			btnAceptar.addActionListener(new java.awt.event.ActionListener() { 
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					accepted = true;
+                    if (PluginServices.getMainFrame() == null) {
+                        ((JDialog) (getParent().getParent().getParent()
+                                .getParent())).dispose();
+                    } else {
+                        PluginServices.getMDIManager().closeView((View) FOpenDialog.this);
+                    }
+				}
+			});
+		}
+		return btnAceptar;
+	}
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */    
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setText(PluginServices.getText(this,"Cancelar"));
+			jButton.addActionListener(new java.awt.event.ActionListener() { 
+				public void actionPerformed(java.awt.event.ActionEvent e) {    
+                    if (PluginServices.getMainFrame() != null) {
+                        PluginServices.getMDIManager().closeView((View) FOpenDialog.this);
+                    } else {
+                        ((JDialog) (getParent().getParent().getParent()
+                                        .getParent())).dispose();
+                    }
+				}
+			});
+		}
+		return jButton;
+	}
+	public boolean isAccepted() {
+		return accepted;
+	}
+	
+	public class DialogWizardListener implements WizardListener {
+
+		/**
+		 * @see com.iver.cit.gvsig.gui.wms.WizardListener#error(java.lang.Exception)
+		 */
+		public void error(Exception e) {
+		}
+
+		/**
+		 * @see com.iver.cit.gvsig.gui.wms.WizardListener#wizardStateChanged(boolean)
+		 */
+		public void wizardStateChanged(boolean finishable) {
+			getBtnAceptar().setEnabled(finishable);
+		}
+		
+	}
+	public static IProjection getLastProjection() {
+		return proj;
+	}
+	public static void setLastProjection(IProjection proj) {
+		FOpenDialog.proj = proj;
+	}
+   }  //  @jve:decl-index=0:visual-constraint="10,10"
+ //  @jve:visual-info  decl-index=0 visual-constraint="10,10"
+//  @jve:visual-info  decl-index=0 visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/gui/FOpenDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/AddLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/AddLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/AddLayer.java	(revision 42196)
@@ -0,0 +1,331 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package com.iver.cit.gvsig;
+
+import java.awt.Component;
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.cts.gt2.CoordSys;
+import org.cresques.cts.gt2.CoordTrans;
+import org.opengis.layer.Layer;
+
+import com.hardcode.driverManager.Driver;
+import com.hardcode.driverManager.DriverLoadException;
+import com.hardcode.gdbms.engine.instruction.FieldNotFoundException;
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.plugins.Extension;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.ViewPort;
+import com.iver.cit.gvsig.fmap.drivers.RasterDriver;
+import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
+import com.iver.cit.gvsig.fmap.drivers.WithDefaultLegend;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.rendering.LegendFactory;
+import com.iver.cit.gvsig.fmap.rendering.VectorialLegend;
+import com.iver.cit.gvsig.gui.FOpenDialog;
+import com.iver.cit.gvsig.gui.FileOpenDialog;
+import com.iver.cit.gvsig.gui.View;
+import com.iver.cit.gvsig.gui.WizardPanel;
+
+
+/**
+ * Extensi�n que abre un di�logo para seleccionar la capa o capas que se
+ * quieren a�adir a la vista.
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class AddLayer extends Extension {
+	public FOpenDialog fopen = null;
+	
+	private static ArrayList wizardStack = null;
+	
+	static {
+		AddLayer.wizardStack = new ArrayList();
+	}
+	
+	public static void addWizard(Class wpClass) {
+		AddLayer.wizardStack.add(wpClass);
+	}
+	
+	public static WizardPanel getInstance(int i) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+		Class wpClass = (Class) AddLayer.wizardStack.get(i);
+		Class [] args = {};
+		Object [] params = {};
+		WizardPanel wp = (WizardPanel) wpClass.getConstructor(args).newInstance(params);
+
+		wp.initWizard();
+		
+		return wp;
+	}
+
+
+	/**
+	 * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		com.iver.andami.ui.mdiManager.View f = PluginServices.getMDIManager()
+															 .getActiveView();
+
+		if (f == null) {
+			return false;
+		}
+
+		return (f.getClass() == View.class);
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+	}
+
+    private void checkProjection(FLayer lyr, ViewPort viewPort)
+    {
+        if (lyr instanceof FLyrVect)
+        {
+            FLyrVect lyrVect = (FLyrVect) lyr;
+            IProjection proj = lyr.getProjection();
+            // Comprobar que la projecci�n es la misma que la vista
+            if (proj == null)
+            {
+                // SUPONEMOS que la capa est� en la proyecci�n que 
+                // estamos pidiendo (que ya es mucho suponer, ya).
+                lyrVect.setProjection(viewPort.getProjection());
+                return;
+            }
+            if (proj != viewPort.getProjection()) {
+                int option = JOptionPane.showConfirmDialog(null,
+                        PluginServices.getText(this, "reproyectar_aviso"),
+                        PluginServices.getText(this, "reproyectar_pregunta"),
+                        JOptionPane.YES_NO_OPTION);
+
+                if (option == JOptionPane.NO_OPTION) {
+                    return;
+                } else {
+                    ICoordTrans ct = new CoordTrans((CoordSys) proj,
+                            (CoordSys) viewPort.getProjection());
+                    lyrVect.setCoordTrans(ct);
+                    System.err.println("coordTrans = " +
+                        proj.getAbrev() + " " +
+                        viewPort.getProjection().getAbrev());
+                }
+            }
+        }                    
+
+    }
+	/**
+	 * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+		//Project project = ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).getProject();
+		View theView = (View) PluginServices.getMDIManager().getActiveView();
+		
+		this.addLayers(theView.getMapControl());
+		return;
+
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
+	
+	
+
+	/**
+	 * Abre dialogo para a�adir capas y las a�ade
+	 * en mapControl
+	 * 
+	 * Devuelve true si se han a�adido capas.
+	 */	
+	public boolean addLayers(MapControl mapControl) {		
+		fopen = new FOpenDialog();
+
+		FileOpenDialog fileDlg = new FileOpenDialog(new Class[] {
+					VectorialFileDriver.class, RasterDriver.class
+				});
+		fopen.addTab(PluginServices.getText(this, "Fichero"), fileDlg);
+		for (int i=0; i<wizardStack.size(); i++) {
+			WizardPanel wp;
+			try {
+				wp = AddLayer.getInstance(i);
+				fopen.addWizardTab(wp.getTabName(), wp);			
+			} catch (IllegalArgumentException e) {
+				e.printStackTrace();
+			} catch (SecurityException e) {
+				e.printStackTrace();
+			} catch (InstantiationException e) {
+				e.printStackTrace();
+			} catch (IllegalAccessException e) {
+				e.printStackTrace();
+			} catch (InvocationTargetException e) {
+				e.printStackTrace();
+			} catch (NoSuchMethodException e) {
+				e.printStackTrace();
+			}
+		}
+		
+		PluginServices.getMDIManager().addView(fopen);
+
+		if (fopen.isAccepted()) {
+			FLayer lyr = null;
+
+			if (fopen.getSelectedTab() == fileDlg) {
+				if (fileDlg.getFiles() == null) {
+					return false;
+				}
+
+				IProjection proj = FOpenDialog.getLastProjection();
+				File[] files = fileDlg.getFiles();
+				String[] driverNames = fileDlg.getDriverNames();
+				Driver[] drivers = new Driver[driverNames.length];
+				for (int i = 0; i < drivers.length; i++) {
+					try {
+						drivers[i] = LayerFactory.getDM().getDriver(driverNames[i]);
+					} catch (DriverLoadException e) {
+						NotificationManager.addError("No se pudo cargar el driver", e);
+					}
+				}
+				Rectangle2D[] rects=new Rectangle2D[files.length];
+				boolean first=false;
+				mapControl.getMapContext()
+				   .beginAtomicEvent();
+
+				for (int iFile = 0; iFile < files.length; iFile++) {
+					File fich = files[iFile];
+					String layerName = fich.getName();
+					//String layerPath = fich.getAbsolutePath();
+
+					try {
+						// FJP: Comento esto (if (fileDlg.accept(fich))) para resolver el bug 75. �Esto estaba antes
+                        // o lo apuesto alguien por algo en concreto?.
+						// if (fileDlg.accept(fich))
+    						if (drivers[iFile] instanceof VectorialFileDriver){
+    							lyr = LayerFactory.createLayer(layerName,
+    									(VectorialFileDriver) drivers[iFile], fich, proj);
+    						}else if (drivers[iFile] instanceof RasterDriver){
+    							lyr = LayerFactory.createLayer(layerName,
+    									(RasterDriver) drivers[iFile], fich, proj);
+    						}
+
+						if (lyr != null) {
+							lyr.setVisible(true);
+							if (mapControl.getMapContext().getViewPort().getExtent()==null){
+								first=true;
+							}
+
+
+                            
+                            try {
+                                
+                                // Le asignamos tambi�n una legenda por defecto acorde con
+                                // el tipo de shape que tenga. Tampoco s� si es aqu� el
+                                // sitio adecuado, pero en fin....
+                                checkProjection(lyr, mapControl.getViewPort());
+                                mapControl.getMapContext().getLayers()
+                                   .addLayer(lyr);
+                                
+                                if (lyr instanceof FLyrVect)
+                                {
+                                    FLyrVect lyrVect = (FLyrVect) lyr;
+                                    if (drivers[iFile] instanceof WithDefaultLegend) {
+                                        WithDefaultLegend aux = (WithDefaultLegend) drivers[iFile];
+                                        lyrVect.setLegend((VectorialLegend) aux.getDefaultLegend());                                        
+                                    } else {
+                                        lyrVect.setLegend(LegendFactory.createSingleSymbolLegend(
+                                                lyrVect.getShapeType()));
+                                    }
+                                }
+                            } catch (FieldNotFoundException e) {
+                                //Esta no puede saltar
+                            }                            
+							rects[iFile]=lyr.getFullExtent();
+							
+							// TODO: Poner una variable y dibujar solo cuando
+							// todas las capas hayan sido cargadas.
+							// TODO Se deber� de redibujar mediante la captura de los eventos, por
+							//eso se comenta la parte anterior
+							//							theView.getMapControl().drawMap();
+							//							theView.getTOC().refresh();
+						}
+
+					} catch (DriverException e) {
+						NotificationManager.addError("Error al crear la capa", e);
+					}
+				}
+
+				//Esto permite que cuando se cargan varias capas de golpe y la vista est� vacia,se ponga como extent la suma de todos sus extents.
+				if (rects.length > 1) {
+					Rectangle2D rect = new Rectangle2D.Double();
+					rect.setRect(rects[0]);
+
+					if (first) {
+						for (int i = 0; i < rects.length; i++) {
+							rect.add(rects[i]);
+						}
+
+						mapControl.getMapContext().getViewPort()
+							   .setExtent(rect);
+					}
+				}
+				mapControl.getMapContext()
+				   .endAtomicEvent();
+				return true;
+
+			} else if (fopen.getSelectedTab() instanceof WizardPanel) {
+				WizardPanel wp = (WizardPanel) fopen.getSelectedTab();
+				wp.setMapCtrl(mapControl);
+				wp.execute();
+				lyr = wp.getLayer();
+				
+				if (lyr != null) {
+					lyr.setVisible(true);
+					mapControl.getMapContext().beginAtomicEvent();
+                    checkProjection(lyr, mapControl.getViewPort());
+					mapControl.getMapContext().getLayers()
+						   .addLayer(lyr);
+					mapControl.getMapContext().endAtomicEvent();
+					return true;
+                    
+				}
+			} else {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),"Ninguna capa seleccionada");
+			}
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/AddLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/src/com/iver/andami/Launcher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/src/com/iver/andami/Launcher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/src/com/iver/andami/Launcher.java	(revision 42196)
@@ -0,0 +1,1853 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package com.iver.andami;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.KeyboardFocusManager;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+
+import javax.jnlp.BasicService;
+import javax.jnlp.ServiceManager;
+import javax.jnlp.UnavailableServiceException;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.PropertyConfigurator;
+import org.apache.log4j.RollingFileAppender;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.ValidationException;
+
+import com.iver.andami.authentication.IAuthentication;
+import com.iver.andami.config.generate.Andami;
+import com.iver.andami.config.generate.AndamiConfig;
+import com.iver.andami.config.generate.Plugin;
+import com.iver.andami.messages.Messages;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.plugins.ExtensionDecorator;
+import com.iver.andami.plugins.PluginClassLoader;
+import com.iver.andami.plugins.config.generate.ActionTool;
+import com.iver.andami.plugins.config.generate.Depends;
+import com.iver.andami.plugins.config.generate.Extension;
+import com.iver.andami.plugins.config.generate.Extensions;
+import com.iver.andami.plugins.config.generate.LabelSet;
+import com.iver.andami.plugins.config.generate.Menu;
+import com.iver.andami.plugins.config.generate.PluginConfig;
+import com.iver.andami.plugins.config.generate.PopupMenu;
+import com.iver.andami.plugins.config.generate.PopupMenus;
+import com.iver.andami.plugins.config.generate.SelectableTool;
+import com.iver.andami.plugins.config.generate.SkinExtension;
+import com.iver.andami.plugins.config.generate.SkinExtensionType;
+import com.iver.andami.plugins.config.generate.ToolBar;
+import com.iver.andami.ui.AndamiEventQueue;
+import com.iver.andami.ui.MDIManagerLoadException;
+import com.iver.andami.ui.SplashWindow;
+import com.iver.andami.ui.mdiFrame.MDIFrame;
+import com.iver.andami.ui.mdiManager.MDIManagerFactory;
+import com.iver.utiles.XMLEntity;
+import com.iver.utiles.xmlEntity.generate.XmlTag;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision: 6128 $
+ */
+public class Launcher {
+	private static Logger logger = Logger.getLogger(Launcher.class.getName());
+	private static AndamiConfig andamiConfig;
+	private static SplashWindow splashWindow;
+	private static String userHome = System.getProperty("user.home");
+	private static String appName;
+	private static Locale locale;
+	private static HashMap pluginsConfig = new HashMap();
+	private static HashMap pluginsServices = new HashMap();
+	private static MDIFrame frame;
+	private static HashMap classesExtensions = new HashMap();
+	private static String andamiConfigPath;
+	private static String pluginsPersistencePath;
+    
+    private static ArrayList pluginsOrdered = new ArrayList();
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param args DOCUMENT ME!
+	 * @throws Exception
+	 *
+	 * @throws InterruptedException
+	 * @throws InvocationTargetException
+	 * @throws ConfigurationException
+	 * @throws MDIManagerLoadException
+	 * @throws IOException
+	 */
+	public static void main(String[] args) throws Exception {
+	    try{
+
+	    if (!validJVM()){
+	        System.exit(-1);
+	    }
+	        
+	    if (args.length < 1) {
+			System.err.println("Uso: Launcher appName plugins-directory [language=locale]");
+		}
+
+	    //  Clean temporal files
+		Utilities.cleanUpTempFiles();
+
+		appName = args[0];
+
+		//Se crea el directorio de configuraci�n de la aplicaci�n
+		File parent = new File(System.getProperty("user.home") +
+				File.separator + args[0] + File.separator);
+		parent.mkdirs();
+
+		andamiConfigPath = System.getProperty("user.home") + File.separator +
+			appName + File.separator + "andami-config.xml";
+		pluginsPersistencePath = System.getProperty("user.home") +
+			File.separator + appName + File.separator +
+			"plugins-persistence.xml";
+
+		// Configurar el log4j
+		PropertyConfigurator.configure(Launcher.class.getClassLoader()
+													 .getResource("log4j.properties"));
+
+		PatternLayout l = new PatternLayout("%p %t %C - %m%n");
+		RollingFileAppender fa = new RollingFileAppender(l,
+				System.getProperty("user.home") + File.separator + args[0] +
+				File.separator + args[0] + ".log", false);
+		fa.setMaxFileSize("512KB");
+		fa.setMaxBackupIndex(3);
+		Logger.getRootLogger().addAppender(fa);
+
+		// Leer el fichero de configuraci�n de andami (andami-config.xsd)
+		// locale
+		// Buscar actualizaci�nes al comenzar
+		//  Andami
+		//  Plugins
+		// Directorio de las extensiones
+		andamiConfigFromXML(andamiConfigPath);
+		andamiConfig.setPluginsDirectory(args[1]);
+		
+		// Hacemos visibles los argumentos como una propiedad est�tica
+		// de plugin services para quien lo quiera usar (por ejemplo, para
+		// cargar un proyecto por l�nea de comandos)
+		PluginServices.setArguments(args);
+
+		// Configurar el locale
+        String localeStr = null;
+        for (int i=2; i < args.length; i++)
+        {
+        	int index = args[i].indexOf("language="); 
+        	if (index != -1)
+        		localeStr = args[i].substring(index+9);
+        }
+		if (localeStr == null)
+		{
+            localeStr = andamiConfig.getLocaleLanguage();
+			/* locale = getLocale(localeStr,
+					andamiConfig.getLocaleCountry(),
+					andamiConfig.getLocaleVariant()); */
+		}
+        if (localeStr.compareTo("va")==0)
+        {
+            locale = new Locale("ca");
+        }
+        else
+        {
+            // locale = Locale.getDefault();
+            locale = getLocale(localeStr,
+                    andamiConfig.getLocaleCountry(),
+                    andamiConfig.getLocaleVariant());
+        }
+        org.gvsig.i18n.Messages.addLocale(locale);
+		// add english as a fallback language
+		org.gvsig.i18n.Messages.addLocale(new Locale("en"));
+		org.gvsig.i18n.Messages.addLocale(new Locale("es"));
+        org.gvsig.i18n.Messages.addResourceFamily("com.iver.andami.text", "com.iver.andami.text");
+		Locale.setDefault(locale);
+		JComponent.setDefaultLocale(locale);
+
+		//Se pone el lookAndFeel
+		try {
+			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+		} catch (Exception e) {
+			logger.warn(Messages.getString("Launcher.look_and_feel"), e);
+		}
+
+		// Mostrar la ventana de inicio
+		splashWindow = new SplashWindow(null);
+
+		// TODO Buscar actualizaciones de los plugins
+		downloadExtensions(andamiConfig.getPluginsDirectory());
+		
+		validate();
+
+		// Se leen los config.xml de los plugins -----++++
+		loadPlugins(andamiConfig.getPluginsDirectory());
+
+		// Se configura el classloader del plugin
+		pluginsClassLoaders();
+
+		// Se carga un Skin si alguno de los plugins trae informaci�n para ello
+		skinPlugin();
+
+		//Se configura la cola de eventos
+		EventQueue waitQueue = new AndamiEventQueue();
+		Toolkit.getDefaultToolkit().getSystemEventQueue().push(waitQueue);
+
+		// Se configura la mensajer�a del plugin
+		pluginsMessages();
+
+		// Se modifica el andami-config con los plugins nuevos
+		updateAndamiConfig();
+
+		// Se prepara el MainFrame para albergar las extensiones
+		frame = new MDIFrame();
+
+		// Se configura el nombre e icono de la aplicaci�n
+		frameIcon();
+
+		SwingUtilities.invokeAndWait(new Runnable() {
+				public void run() {
+					frame.init();
+				}
+			});
+
+		// Se instalan los controles de las extensiones de los plugins
+		SwingUtilities.invokeAndWait(new Runnable() {
+				public void run() {
+					installPluginsControls();
+					installPluginsMenus();
+					installPluginsLabels();
+				}
+			});
+
+		// Leer el fichero de persistencia
+		//  info de los plugins
+		//  bookmarks de los plugins
+		loadPluginsPersistence();
+
+		// Se instalan los controles del skin
+		// Se inicializan todas las extensiones de todos los plugins
+		SwingUtilities.invokeAndWait(new Runnable() {
+				public void run() {
+					initializeExtensions();
+				}
+			});
+		frame.setClassesExtensions(classesExtensions);
+
+		// Se instalan los bookmarks de los plugins
+		splashWindow.close();
+
+		//Se muestra el frame principal
+		frame.show();
+		
+		// Definimos un KeyEventDispatcher global para que las extensiones
+		// puedan registrar sus "teclas r�pidas".
+		GlobalKeyEventDispatcher keyDispatcher = GlobalKeyEventDispatcher.getInstance();
+		KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keyDispatcher);
+
+		SwingUtilities.invokeAndWait(new Runnable() {
+				public void run() {
+					frame.enableControls();
+				}
+			});
+	    }catch(Exception e){
+	        logger.error("excepci�n al arrancar", e);
+	        System.exit(-1);
+	    }
+	    
+	}
+	
+	/**
+	 * Recupera la geometr�a (tama�o, posici�n y estado) de la ventana principal de Andami.
+	 * TODO Pendiente de ver como se asigna un pluginServices para el launcher.
+	 * @author LWS
+	 */
+	private static void restoreMDIStatus(XMLEntity xml) {
+		//System.err.println("Launcher: restoreMDIStatus()");
+		if (xml == null) xml = new XMLEntity();
+		//  restore frame size
+		Dimension sz = new Dimension(700,580);
+		if (xml.contains("MDIFrameSize")) {
+			int [] wh = xml.getIntArrayProperty("MDIFrameSize");
+			sz = new Dimension(wh[0], wh[1]);
+		}
+		frame.setSize(sz);
+		//  restore frame location
+		Point pos = new Point(10,10);
+		if (xml.contains("MDIFramePos")) {
+			int [] xy = xml.getIntArrayProperty("MDIFramePos");
+			pos = new Point(xy[0], xy[1]);
+		}
+		frame.setLocation(pos);
+		
+		//  restore frame status (Maximized, minimized, etc);
+		int state = java.awt.Frame.MAXIMIZED_BOTH;
+		if (xml.contains("MDIFrameState")) {
+			state = xml.getIntProperty("MDIFrameState");
+		}
+		frame.setExtendedState(state);
+	}
+	
+	private static XMLEntity saveMDIStatus() {
+		XMLEntity xml = new XMLEntity();
+		// save frame size
+		int [] wh = new int[2];
+		wh[0] = frame.getWidth();
+		wh[1] = frame.getHeight();
+		xml.putProperty("MDIFrameSize", wh);
+		// save frame location
+		int [] xy = new int[2];
+		xy[0] = frame.getX();
+		xy[1] = frame.getY();
+		xml.putProperty("MDIFramePos", xy);
+		// save frame status
+		xml.putProperty("MDIFrameState", frame.getExtendedState());
+		return xml;
+	}
+
+	/**
+     * @return
+     */
+    private static boolean validJVM() {
+        char thirdCharacter = System.getProperty("java.version").charAt(2);
+        if (thirdCharacter < '4'){
+            return false;
+	    }else{
+	        return true;
+	    }
+    }
+
+    /**
+	 * DOCUMENT ME!
+	 *
+	 * @throws ConfigurationException
+	 */
+	private static void loadPluginsPersistence() throws ConfigurationException {
+		XMLEntity entity = persistenceFromXML();
+
+		//System.err.println("loadPluginPersistence()");
+		for (int i = 0; i < entity.getNumChild(); i++) {
+			XMLEntity plugin = entity.getChild(i);
+			String pName = plugin.getStringProperty(
+					"com.iver.andami.pluginName");
+			//System.err.println("--> "+pName);
+			if (pluginsServices.get(pName)!= null){
+				((PluginServices) pluginsServices.get(pName)).setPersistentXML(plugin);
+			} else {
+				if (pName.startsWith("Andami.Launcher"))
+					restoreMDIStatus(plugin);
+			}
+		}
+	}
+	
+	/**
+	 * Salva la persistencia de los plugins.
+	 * @author LWS
+	 */
+	private static void savePluginPersistence() {
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		XMLEntity entity = new XMLEntity();
+
+		while (i.hasNext()) {
+			String pName = (String) i.next();
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			XMLEntity ent = ps.getPersistentXML();
+
+			if (ent != null) {
+				ent.putProperty("com.iver.andami.pluginName", pName);
+				entity.addChild(ent);
+			}
+		}
+		XMLEntity ent = saveMDIStatus();
+		if (ent != null) {
+			ent.putProperty("com.iver.andami.pluginName", "Andami.Launcher");
+			entity.addChild(ent);
+		}
+		try {
+			persistenceToXML(entity);
+		} catch (ConfigurationException e1) {
+			logger.error(Messages.getString(
+					"Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins"),
+				e1);
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	private static void installPluginsLabels() {
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String name = (String) i.next();
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(name);
+			PluginServices ps = (PluginServices) pluginsServices.get(name);
+
+			LabelSet[] ls = pc.getLabelSet();
+
+			for (int j = 0; j < ls.length; j++) {
+				PluginClassLoader loader = ps.getClassLoader();
+
+				try {
+					Class clase = loader.loadClass(ls[j].getClassName());
+					frame.setLabels(clase, ls[j].getLabel());
+				} catch (ClassNotFoundException e) {
+					logger.error(Messages.getString("Launcher.labelset_class"),
+						e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @throws MDIManagerLoadException
+	 */
+	private static void skinPlugin() throws MDIManagerLoadException {
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String name = (String) i.next();
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(name);
+			PluginServices ps = (PluginServices) pluginsServices.get(name);
+
+			if (pc.getExtensions().getSkinExtension() != null) {
+				if (MDIManagerFactory.getSkinExtension() != null) {
+					logger.warn(Messages.getString(
+							"Launcher.Dos_skin_extension"));
+				}
+
+				SkinExtension se = pc.getExtensions().getSkinExtension();
+
+				MDIManagerFactory.setSkinExtension(se, ps.getClassLoader());
+
+				Class skinClass;
+
+				try {
+					skinClass = ps.getClassLoader().loadClass(se.getClassName());
+
+					com.iver.andami.plugins.IExtension skinInstance = (com.iver.andami.plugins.IExtension) skinClass.newInstance();
+					// classesExtensions.put(skinClass, skinInstance);
+					// jaume
+					ExtensionDecorator newExtensionDecorator = new ExtensionDecorator(skinInstance, ExtensionDecorator.INACTIVE);
+					classesExtensions.put(skinClass, newExtensionDecorator);
+				} catch (ClassNotFoundException e) {
+					logger.error(Messages.getString(
+							"Launcher.No_se_encontro_la_clase_mdi_manager"), e);
+					throw new MDIManagerLoadException(e);
+				} catch (InstantiationException e) {
+					logger.error(Messages.getString(
+							"Launcher.No_se_pudo_instanciar_la_clase_mdi_manager"),
+						e);
+					throw new MDIManagerLoadException(e);
+				} catch (IllegalAccessException e) {
+					logger.error(Messages.getString(
+							"Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager"),
+						e);
+					throw new MDIManagerLoadException(e);
+				}
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private static void frameIcon() {
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pName = (String) i.next();
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+
+			if (pc.getIcon() != null) {
+				ImageIcon icon = new ImageIcon(ps.getClassLoader().getResource(pc.getIcon()
+																				 .getSrc()));
+				frame.setIconImage(icon.getImage());
+				frame.setTitlePrefix(pc.getIcon().getText());
+			}
+		}
+	}
+
+	/**
+	 *
+	 */
+	private static void initializeExtensions() {
+		Iterator i = pluginsOrdered.iterator();
+
+		while (i.hasNext()) {
+			String pName = (String) i.next();
+            logger.debug("Initializing extensions from " + pName);
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+
+			Extension[] exts = pc.getExtensions().getExtension();
+
+			TreeMap orderedExtensions = new TreeMap(new ExtensionComparator());
+
+			for (int j = 0; j < exts.length; j++) {
+				if (!exts[j].getActive()) {
+					continue;
+				}
+
+				if (orderedExtensions.containsKey(exts[j])) {
+					logger.warn(Messages.getString(
+							"Launcher.Two_extensions_with_the_same_priority") +
+						exts[j].getClassName());
+				}
+
+				orderedExtensions.put(exts[j], null);
+			}
+
+			Iterator e = orderedExtensions.keySet().iterator();
+
+			while (e.hasNext()) {
+				Extension extension = (Extension) e.next();
+				com.iver.andami.plugins.IExtension extensionInstance;
+
+				try {
+					Class extensionClass = ps.getClassLoader().loadClass(extension.getClassName());
+					extensionInstance = (com.iver.andami.plugins.IExtension) extensionClass.newInstance();
+					
+					// CON DECORATOR					
+					// ANTES: classesExtensions.put(extensionClass, extensionInstance);
+					// AHORA: CREAMOS UNA ExtensionDecorator y asignamos esta instancia para
+					// poder ampliar con nuevas propiedades (AlwaysVisible, por ejemplo)
+					// Para crear la nueva clase ExtensionDecorator, le pasamos como par�metro
+					// la extensi�n original que acabamos de crear
+					// 0-> Inactivo, controla la extension
+					// 1-> Siempre visible
+					// 2-> Invisible
+					ExtensionDecorator newExtensionDecorator = new ExtensionDecorator(extensionInstance, ExtensionDecorator.INACTIVE);
+					classesExtensions.put(extensionClass, newExtensionDecorator);
+					System.err.println("Loading "+extension.getClassName()+"...");
+                    // logger.debug("Initializing " + extension.getClassName());
+                    extensionInstance.initialize();
+                    // logger.debug(extension.getClassName() + " initialized.");
+
+				} catch (InstantiationException e1) {
+					logger.error(Messages.getString(
+							"Launcher.Error_instanciando_la_extension") +
+						extension.getClassName(), e1);
+				} catch (IllegalAccessException e1) {
+					logger.error(Messages.getString(
+							"Launcher.Error_instanciando_la_extension") +
+						extension.getClassName(), e1);
+				} catch (ClassNotFoundException e1) {
+					logger.error(Messages.getString(
+							"Launcher.No_se_encontro_la_clase_de_la_extension") +
+						extension.getClassName(), e1);
+				} catch (NoClassDefFoundError e1) {
+					logger.error(Messages.getString(
+							"Launcher.Error_localizando_la_clase_de_la_extension") +
+						extension.getClassName(), e1);
+				}
+			}
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	private static void installPluginsMenus() {
+		TreeMap orderedMenus = new TreeMap(new MenuComparator());
+
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pName = (String) i.next();
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+
+			Extension[] exts = pc.getExtensions().getExtension();
+
+			for (int j = 0; j < exts.length; j++) {
+				if (!exts[j].getActive()) {
+					continue;
+				}
+
+				Menu[] menus = exts[j].getMenu();
+
+				for (int k = 0; k < menus.length; k++) {
+					SortableMenu sm = new SortableMenu(ps.getClassLoader(),
+							exts[j], menus[k]);
+
+					if (orderedMenus.containsKey(sm)) {
+						logger.error(Messages.getString(
+								"Launcher.Two_menus_with_the_same_position") +
+							exts[j].getClassName());
+					}
+
+					orderedMenus.put(sm, null);
+				}
+			}
+
+			// Se instalan las extensiones de MDI
+			SkinExtension skinExt = pc.getExtensions().getSkinExtension();
+
+			if (skinExt != null) {
+				Menu[] menu = skinExt.getMenu();
+
+				for (int k = 0; k < menu.length; k++) {
+					SortableMenu sm = new SortableMenu(ps.getClassLoader(),
+							skinExt, menu[k]);
+
+					if (orderedMenus.containsKey(sm)) {
+						logger.error(Messages.getString(
+								"Launcher.Two_menus_with_the_same_position") +
+							skinExt.getClassName());
+					}
+
+					orderedMenus.put(sm, null);
+				}
+			}
+		}
+
+		//Se itera por los menus ordenados
+		Iterator e = orderedMenus.keySet().iterator();
+
+		// Se ordenan los menues
+		while (e.hasNext()) {
+			try {
+				SortableMenu sm = (SortableMenu) e.next();
+
+				frame.addMenu(sm.loader, sm.extension, sm.menu);
+			} catch (ClassNotFoundException ex) {
+				logger.error(Messages.getString(
+						"Launcher.No_se_encontro_la_clase_de_la_extension"), ex);
+			}
+		}
+	}
+
+	/**
+	 * Installs the menus, toolbars, actiontools and selectable toolbars.
+	 * The order in which they are shown is determined here. 
+	 */
+	private static void installPluginsControls() {
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		HashMap extensionPluginServices = new HashMap();
+		HashMap extensionPluginConfig = new HashMap();
+		TreeMap orderedExtensions = new TreeMap(new ExtensionComparator());
+		Object previous;
+		
+		// First of all, sort the extensions.
+		// We need to iterate on the plugins, and iterate on each plugin's extensions
+		// (each plugin may contain one or more extensions) 
+		while (i.hasNext()) { // iterate on the plugins
+			String pName = (String) i.next();
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			
+			Extension[] exts = pc.getExtensions().getExtension();
+			
+			for (int j = 0; j < exts.length; j++) { // iterate on the extensions
+				if (exts[j].getActive()) {
+					if (orderedExtensions.containsKey(exts[j])) {
+						logger.error(Messages.getString(
+						"Launcher.Two_extensions_with_the_same_priority") +
+						exts[j].getClassName());
+					}
+					
+					orderedExtensions.put(exts[j], null);
+					extensionPluginServices.put(exts[j], ps);
+					extensionPluginConfig.put(exts[j], pc);
+				}
+			}
+		}
+
+		///try {
+		TreeMap orderedTools = new TreeMap(new ToolComparator());
+		Iterator e = orderedExtensions.keySet().iterator();
+		
+		// Ahora se ordenan las herramientas (actiontools y selectabletools) de las extensiones
+		while (e.hasNext()) {
+			Extension ext = (Extension) e.next();
+			
+			ToolBar[] toolbars = ext.getToolBar();
+			
+			for (int k = 0; k < toolbars.length; k++) {
+				ActionTool[] tools = toolbars[k].getActionTool();
+				
+				for (int t = 0; t < tools.length; t++) {
+					SortableToolBar sm = new SortableToolBar(((PluginServices)extensionPluginServices.get(ext)).getClassLoader(), ext,
+							toolbars[k], tools[t]);
+					previous = orderedTools.put(sm, null);
+					///frame.addTool(((PluginServices)extensionPluginServices.get(ext)).getClassLoader(), ext,
+					///	toolbars[k], tools[t]);
+				}
+				
+				SelectableTool[] sTools = toolbars[k].getSelectableTool();
+				
+				for (int t = 0; t < sTools.length; t++) {
+					SortableToolBar sm=new SortableToolBar(((PluginServices)extensionPluginServices.get(ext)).getClassLoader(), ext,
+							toolbars[k], sTools[t]);
+					previous = orderedTools.put(sm, null);
+					///frame.addTool(((PluginServices)extensionPluginServices.get(ext)).getClassLoader(), ext,
+					///	toolbars[k], sTools[t]);
+				}
+			}
+		}
+
+		// Ahora se ordenan las herramientas (actiontools y selectabletools) de las extensiones de MDI
+		i = pluginsConfig.keySet().iterator();
+		while (i.hasNext()) {
+			String pName = (String) i.next();
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			 
+			SkinExtension skinExt = pc.getExtensions().getSkinExtension();
+			
+			if (skinExt != null) {
+				ToolBar[] toolbars = skinExt.getToolBar();
+				
+				for (int k = 0; k < toolbars.length; k++) {
+					ActionTool[] tools = toolbars[k].getActionTool();
+					
+					for (int t = 0; t < tools.length; t++) {
+						SortableToolBar stb=new SortableToolBar(ps.getClassLoader(), skinExt,
+								toolbars[k], tools[t]);
+						previous = orderedTools.put(stb,null);
+						///frame.addTool(ps.getClassLoader(), skinExt,
+						///	toolbars[k], tools[t]);
+					}
+					
+					SelectableTool[] sTools = toolbars[k].getSelectableTool();
+					
+					for (int t = 0; t < sTools.length; t++) {
+						SortableToolBar stb=new SortableToolBar(ps.getClassLoader(), skinExt,
+								toolbars[k], sTools[t]);
+						previous = orderedTools.put(stb,null);
+						///frame.addTool(ps.getClassLoader(), skinExt,
+						///	toolbars[k], sTools[t]);
+					}
+				}
+			}
+			//Se instalan los popup menus
+			PopupMenus pus = pc.getPopupMenus();
+			
+			if (pus != null) {
+				PopupMenu[] menus = pus.getPopupMenu();
+				
+				for (int j = 0; j < menus.length; j++) {
+					frame.addPopupMenu(ps.getClassLoader(), menus[j]);
+				}
+			}
+		}
+
+		Iterator tt = orderedTools.keySet().iterator();		
+		while (tt.hasNext()) {
+			SortableToolBar kk = (SortableToolBar) tt.next();
+			kk.getClass();
+		}
+		
+		
+		// Se itera por las herramientas ordenadas, para
+		// a�adirlas a la interfaz de forma ordenada
+		Iterator t = orderedTools.keySet().iterator();		
+		while (t.hasNext()) {
+			try {
+				SortableToolBar stb = (SortableToolBar) t.next();
+				if (stb.actiontool!=null)
+					frame.addTool(stb.loader, stb.extension,stb.toolbar, stb.actiontool);
+				else
+					frame.addTool(stb.loader, stb.extension,stb.toolbar, stb.selectabletool);
+			} catch (ClassNotFoundException ex) {
+				logger.error(Messages.getString(
+				"Launcher.No_se_encontro_la_clase_de_la_extension"), ex);
+			}
+		}
+		///} catch (ClassNotFoundException e) {
+		///	logger.error(Messages.getString(
+		///			"Launcher.No_se_encontro_la_clase_de_la_extension"), e);
+		///}
+	}
+
+	/**
+	 *
+	 */
+	private static void updateAndamiConfig() {
+		HashSet olds = new HashSet();
+
+		Plugin[] plugins = andamiConfig.getPlugin();
+
+		for (int i = 0; i < plugins.length; i++) {
+			olds.add(plugins[i].getName());
+		}
+
+		Iterator i = pluginsServices.values().iterator();
+
+		while (i.hasNext()) {
+			PluginServices ps = (PluginServices) i.next();
+
+			if (!olds.contains(ps.getPluginName())) {
+				Plugin p = new Plugin();
+				p.setName(ps.getPluginName());
+				p.setUpdate(false);
+
+				andamiConfig.addPlugin(p);
+			}
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	private static void pluginsClassLoaders() {
+		HashSet instalados = new HashSet();
+
+		// Se itera hasta que est�n todos instalados
+		while (instalados.size() != pluginsConfig.size()) {
+			boolean circle = true;
+
+			//Hacemos una pasada por todos los plugins
+			Iterator i = pluginsConfig.keySet().iterator();
+
+			while (i.hasNext()) {
+				String pluginName = (String) i.next();
+				PluginConfig config = (PluginConfig) pluginsConfig.get(pluginName);
+
+				if (instalados.contains(pluginName)) {
+					continue;
+				}
+
+				//Se obtienen las dependencias y sus class loaders
+				boolean ready = true;
+				Depends[] dependencies = config.getDepends();
+				PluginClassLoader[] loaders = new PluginClassLoader[dependencies.length];
+
+				for (int j = 0; j < dependencies.length; j++) {
+					if (pluginsConfig.get(dependencies[j].getPluginName()) == null) {
+						logger.error(Messages.getString(
+								"Launcher.Dependencia_no_resuelta_en_plugin") +
+							pluginName + ": " +
+							dependencies[j].getPluginName());
+
+						continue;
+					}
+
+					if (!instalados.contains(dependencies[j].getPluginName())) {
+						ready = false;
+					} else {
+						loaders[j] = ((PluginServices) pluginsServices.get(dependencies[j].getPluginName())).getClassLoader();
+					}
+				}
+
+				//Si no est�n sus dependencias satisfechas se aborta la instalaci�n
+				if (!ready) {
+					continue;
+				}
+
+				//Se genera el class loader
+				String jardir = config.getLibraries().getLibraryDir();
+				File jarDir = new File(andamiConfig.getPluginsDirectory() +
+						File.separator + pluginName + File.separator + jardir);
+				File[] jarFiles = jarDir.listFiles(new FileFilter() {
+							public boolean accept(File pathname) {
+								return (pathname.getName().toUpperCase()
+												.endsWith(".JAR")) ||
+								(pathname.getName().toUpperCase().endsWith(".ZIP"));
+							}
+						});
+
+				URL[] urls = new URL[jarFiles.length];
+
+				for (int j = 0; j < jarFiles.length; j++) {
+					try {
+						urls[j] = new URL("file:" + jarFiles[j]);
+					} catch (MalformedURLException e) {
+						logger.error(Messages.getString(
+								"Launcher.No_se_puede_acceder_a") +
+							jarFiles[j]);
+					}
+				}
+
+				PluginClassLoader loader;
+
+				try {
+					loader = new PluginClassLoader(urls,
+							andamiConfig.getPluginsDirectory() +
+							File.separator + pluginName,
+							Launcher.class.getClassLoader(), loaders);
+
+					PluginServices ps = new PluginServices(loader);
+
+					pluginsServices.put(ps.getPluginName(), ps);
+
+					instalados.add(pluginName);
+                    // FJP: Los metemos ordenados para luego no cargar uno que necesita de otro antes de tiempo. Esto lo usaremos al 
+                    // inicializar los plugins
+                    pluginsOrdered.add(pluginName);
+
+					circle = false;
+				} catch (IOException e) {
+					logger.error(Messages.getString(
+							"Launcher.Error_con_las_librerias_del_plugin"), e);
+					pluginsConfig.remove(pluginName);
+					i = pluginsConfig.keySet().iterator();
+				}
+			}
+
+			if (circle) {
+				logger.error(Messages.getString(
+						"Launcher.Hay_dependencias_circulares"));
+
+				break;
+			}
+		}
+
+		//Se eliminan los plugins que no fueron instalados
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pluginName = (String) i.next();
+			PluginConfig config = (PluginConfig) pluginsConfig.get(pluginName);
+			PluginServices ps = (PluginServices) pluginsServices.get(pluginName);
+
+			if (ps == null) {
+				pluginsConfig.remove(pluginName);
+				i = pluginsConfig.keySet().iterator();
+			}
+		} 
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	private static void pluginsMessages() {
+		/* add gvsig translations first. This should be done using a generic "appPlugin" variable, instead 
+		 * of using "com.iver.cit.gvsig" directly, but I'll do it when we use the new appgvSIG launcher.
+		 * I keep this workaround for the moment. 
+		 */
+		PluginConfig config = (PluginConfig) pluginsConfig.get("com.iver.cit.gvsig");
+		PluginServices ps = (PluginServices) pluginsServices.get("com.iver.cit.gvsig");
+		if (config.getResourceBundle() != null) {
+			org.gvsig.i18n.Messages.addResourceFamily(config.getResourceBundle().getName(), ps.getClassLoader(), "com.iver.cit.gvsig");
+		}
+
+		//Iteramos por todos los plugins
+		Iterator i = pluginsConfig.keySet().iterator();
+		
+		while (i.hasNext()) {
+			String pluginName = (String) i.next();
+			if (!pluginName.equals("com.iver.cit.gvsig")) { // we've already loaded com.iver.cit.gvsig
+				config = (PluginConfig) pluginsConfig.get(pluginName);
+				ps = (PluginServices) pluginsServices.get(pluginName);
+			
+				if (config.getResourceBundle() != null && !config.getResourceBundle().getName().equals("")) {
+					// add the locale files associated with the plugin
+					org.gvsig.i18n.Messages.addResourceFamily(config.getResourceBundle().getName(), ps.getClassLoader(), pluginName);
+				}
+			}
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param name DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	static PluginServices getPluginServices(String name) {
+		return (PluginServices) pluginsServices.get(name);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	static String getPluginsDir() {
+		return andamiConfig.getPluginsDirectory();
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param s DOCUMENT ME!
+	 */
+	static void setPluginsDir(String s) {
+		andamiConfig.setPluginsDirectory(s);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	static MDIFrame getMDIFrame() {
+		return frame;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param pluginsDirectory
+	 */
+	private static void loadPlugins(String pluginsDirectory) {
+		File pDir = new File(pluginsDirectory);
+
+		if (!pDir.exists()) {
+			return;
+		}
+
+		File[] pluginDirs = pDir.listFiles();
+
+		for (int i = 0; i < pluginDirs.length; i++) {
+			if (pluginDirs[i].isDirectory()) {
+				File configXml = new File(pluginDirs[i].getAbsolutePath() +
+						File.separator + "config.xml");
+
+				try {
+					FileReader xml = new FileReader(configXml);
+					PluginConfig pConfig = (PluginConfig) PluginConfig.unmarshal(xml);
+					pluginsConfig.put(pluginDirs[i].getName(), pConfig);
+				} catch (FileNotFoundException e) {
+					logger.info(Messages.getString(
+							"Launcher.Ignorando_el_directorio") +
+						pluginDirs[i].getAbsolutePath() +
+						Messages.getString("Launcher.config_no_encontrado"));
+				} catch (MarshalException e) {
+					logger.info(Messages.getString(
+							"Launcher.Ignorando_el_directorio") +
+						pluginDirs[i].getAbsolutePath() +
+						Messages.getString("Launcher.config_mal_formado"), e);
+				} catch (ValidationException e) {
+					logger.info(Messages.getString(
+							"Launcher.Ignorando_el_directorio") +
+						pluginDirs[i].getAbsolutePath() +
+						Messages.getString("Launcher.config_mal_formado"), e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param language
+	 * @param country
+	 * @param variant
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	private static Locale getLocale(String language, String country,
+		String variant) {
+		if (variant != null) {
+			return new Locale(language, country, variant);
+		} else if (country != null) {
+			return new Locale(language, country);
+		} else if (language != null) {
+			return new Locale(language);
+		} else {
+			return new Locale("es");
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param file DOCUMENT ME!
+	 *
+	 * @throws IOException DOCUMENT ME!
+	 * @throws MarshalException DOCUMENT ME!
+	 * @throws ValidationException DOCUMENT ME!
+	 */
+	private static void andamiConfigToXML(String file)
+		throws IOException, MarshalException, ValidationException {
+		File xml = new File(file);
+		File parent = xml.getParentFile();
+		parent.mkdirs();
+
+		FileWriter writer = new FileWriter(xml);
+		andamiConfig.marshal(writer);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param file DOCUMENT ME!
+	 *
+	 * @throws ConfigurationException DOCUMENT ME!
+	 */
+	private static void andamiConfigFromXML(String file)
+		throws ConfigurationException {
+		File xml = new File(file);
+
+		//Si no existe se ponen los valores por defecto
+		if (!xml.exists()) {
+			andamiConfig = new AndamiConfig();
+
+			Andami andami = new Andami();
+			andami.setUpdate(true);
+			andamiConfig.setAndami(andami);
+			andamiConfig.setLocaleCountry(Locale.getDefault().getCountry());
+			andamiConfig.setLocaleLanguage(Locale.getDefault().getLanguage());
+			andamiConfig.setLocaleVariant(Locale.getDefault().getVariant());
+
+			if (System.getProperty("javawebstart.version") != null) // Es java web start)
+			 {
+				andamiConfig.setPluginsDirectory(new File(System.getProperty(
+							"user.home") + File.separator + appName +
+						File.separator + "extensiones").getAbsolutePath());
+			} else {
+				andamiConfig.setPluginsDirectory(new File(appName +
+						File.separator + "extensiones").getAbsolutePath());
+			}
+
+			andamiConfig.setPlugin(new Plugin[0]);
+		} else {
+			//Se lee la configuraci�n
+			FileReader reader;
+
+			try {
+				reader = new FileReader(xml);
+				andamiConfig = (AndamiConfig) AndamiConfig.unmarshal(reader);
+			} catch (FileNotFoundException e) {
+				throw new ConfigurationException(e);
+			} catch (MarshalException e) {
+				throw new ConfigurationException(e);
+			} catch (ValidationException e) {
+				throw new ConfigurationException(e);
+			}
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * @throws ConfigurationException DOCUMENT ME!
+	 */
+	private static XMLEntity persistenceFromXML() throws ConfigurationException {
+		File xml = new File(pluginsPersistencePath);
+
+		if (xml.exists()) {
+			FileReader reader;
+
+			try {
+				reader = new FileReader(xml);
+
+				XmlTag tag = (XmlTag) XmlTag.unmarshal(reader);
+
+				return new XMLEntity(tag);
+			} catch (FileNotFoundException e) {
+				throw new ConfigurationException(e);
+			} catch (MarshalException e) {
+				throw new ConfigurationException(e);
+			} catch (ValidationException e) {
+				throw new ConfigurationException(e);
+			}
+		} else {
+			return new XMLEntity();
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param entity DOCUMENT ME!
+	 *
+	 * @throws ConfigurationException DOCUMENT ME!
+	 */
+	private static void persistenceToXML(XMLEntity entity)
+		throws ConfigurationException {
+		File xml = new File(pluginsPersistencePath);
+
+		FileWriter writer;
+
+		try {
+			writer = new FileWriter(xml);
+			entity.getXmlTag().marshal(writer);
+		} catch (FileNotFoundException e) {
+			throw new ConfigurationException(e);
+		} catch (MarshalException e) {
+			throw new ConfigurationException(e);
+		} catch (ValidationException e) {
+			throw new ConfigurationException(e);
+		} catch (IOException e) {
+			throw new ConfigurationException(e);
+		}
+	}
+
+	/**
+	 * Devuelve un array con los directorios de los plugins
+	 *
+	 * @param dirExt Directorio de las extensiones a partir del cual cuelgan
+	 * 		  todos los directorios de los plugins
+	 *
+	 * @return ArrayList con los directorios
+	 */
+	private String[] getLocales(File dirExt) {
+		ArrayList types = new ArrayList();
+		File[] files = dirExt.listFiles();
+
+		for (int i = 0; i < files.length; i++) {
+			if (files[i].isDirectory()) {
+				File[] textFile = files[i].listFiles(new FilenameFilter() {
+							public boolean accept(File dir, String fileName) {
+								return fileName.toLowerCase().startsWith("text_"); //$NON-NLS-1$
+							}
+						});
+
+				for (int j = 0; j < textFile.length; j++) {
+					String s = (textFile[j]).getName().replaceAll("text_", "");
+					s = s.replaceAll(".properties", "");
+					s = s.trim();
+
+					if (!types.contains(s)) {
+						types.add(s);
+					}
+				}
+			}
+		}
+
+		return (String[]) types.toArray(new String[0]);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return Returns the frame.
+	 */
+	static MDIFrame getFrame() {
+		return frame;
+	}
+
+	/**
+	 * Secuencia de cerrado de Andami
+	 */
+	public static void closeApplication() {
+		//Configuraci�n de Andami
+		try {
+			andamiConfigToXML(andamiConfigPath);
+		} catch (MarshalException e) {
+			logger.error(Messages.getString(
+					"Launcher.No_se_pudo_guardar_la_configuracion_de_andami"), e);
+		} catch (ValidationException e) {
+			logger.error(Messages.getString(
+					"Launcher.No_se_pudo_guardar_la_configuracion_de_andami"), e);
+		} catch (IOException e) {
+			logger.error(Messages.getString(
+					"Launcher.No_se_pudo_guardar_la_configuracion_de_andami"), e);
+		}
+
+		//Persistencia de los plugins
+		savePluginPersistence();
+		
+		//Finalize all the extensions
+		finalizeExtensions();
+		
+		// Clean any temp data created
+		Utilities.cleanUpTempFiles();
+		
+		//Para la depuraci�n de memory leaks
+		System.gc();
+
+        System.exit(0);
+	}
+	
+	/**
+	 * Exectutes the finalize method for all the extensions
+	 *
+	 */
+	private static void finalizeExtensions() {
+		Set extensions = getClassesExtensions().keySet();
+		Object[] keys = extensions.toArray(); 
+		
+		for (int i=0 ; i<keys.length ; i++){
+			ExtensionDecorator extensionDecorator = 
+				(ExtensionDecorator) getClassesExtensions().get(keys[i]);
+			extensionDecorator.getExtension().finalize();
+		}		
+	}
+
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	static HashMap getClassesExtensions() {
+		return classesExtensions;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param extDir DOCUMENT ME!
+	 */
+	private static void downloadExtensions(String extDir) {
+		java.util.Date fechaActual = null;
+
+		try {
+			if (System.getProperty("javawebstart.version") != null) {
+				//Obtenemos la URL del servidor
+				BasicService bs = (BasicService) ServiceManager.lookup(
+						"javax.jnlp.BasicService");
+				URL baseURL = bs.getCodeBase();
+
+				//Se descargan las extensiones
+				SplashWindow.process(5,
+					"Descargando las extensiones desde " + baseURL + " a " +
+					extDir);
+
+				URL url = new URL(baseURL + "extensiones.zip");
+				URLConnection connection = url.openConnection();
+
+				System.out.println(url.toExternalForm() + ":");
+				System.out.println("  Content Type: " +
+					connection.getContentType());
+				System.out.println("  Content Length: " +
+					connection.getContentLength());
+				System.out.println("  Last Modified: " +
+					new Date(connection.getLastModified()));
+				System.out.println("  Expiration: " +
+					connection.getExpiration());
+				System.out.println("  Content Encoding: " +
+					connection.getContentEncoding());
+
+				// Guardamos la fecha del fichero de extensiones que nos hemos bajado, y
+				// comprobamos el �ltimo que se ha bajado. Si no son
+				// iguales, nos bajamos el nuevo. Si son iguales, no
+				// nos bajamos nada.
+				Long miliSecondsInWeb = new Long(connection.getLastModified());
+
+				// PluginServices ps = PluginServices.getPluginServices("com.iver.core");
+				// if (ps.getPersistentXML().getStringProperty("timestamp") != null)
+				File destDir = new File(extDir);
+
+				if (!destDir.exists()) {
+					// Creamos gvSIG
+					destDir.getParentFile().mkdir();
+
+					if (!destDir.mkdir()) {
+						System.err.println("Imposible crear el directorio " +
+							destDir.getAbsolutePath());
+					}
+				}
+
+				File timeFile = new File(destDir.getParent() + File.separator +
+						"timeStamp.properties");
+
+				if (!timeFile.exists()) {
+					timeFile.createNewFile();
+				}
+
+				FileInputStream inAux = new FileInputStream(timeFile);
+				Properties prop = new Properties();
+				prop.load(inAux);
+				inAux.close();
+
+				if (prop.getProperty("timestamp") != null) {
+					Long lastMiliSeconds = (Long) new Long(prop.getProperty(
+								"timestamp"));
+
+					if (lastMiliSeconds.longValue() == miliSecondsInWeb.longValue()) {
+						System.out.println("No hay nueva actualizaci�n");
+
+						return;
+					}
+
+					System.out.println("timeStampWeb= " + miliSecondsInWeb);
+					System.out.println("timeStampLocal= " + lastMiliSeconds);
+				} else {
+					System.out.println("El timeStamp no est� escrito en " +
+						timeFile.getAbsolutePath());
+				}
+
+				InputStream stream = connection.getInputStream();
+				File temp = File.createTempFile("gvsig", ".zip");
+				temp.deleteOnExit();
+
+				FileOutputStream file = new FileOutputStream(temp);
+				BufferedInputStream in = new BufferedInputStream(stream);
+				BufferedOutputStream out = new BufferedOutputStream(file);
+
+				int i;
+				int pct;
+				int desde;
+				int hasta;
+
+				hasta = connection.getContentLength() / 1024;
+				desde = 0;
+
+				while ((i = in.read()) != -1) {
+					pct = ((desde / 1024) * 100) / hasta;
+
+					if (((desde % 10240) == 0) && (pct > 10) &&
+							((pct % 10) == 0)) {
+						SplashWindow.process(pct,
+							(desde / 1024) + "Kb de " + hasta +
+							"Kb descargados...");
+					}
+
+					out.write(i);
+					desde++;
+				}
+
+				out.flush();
+				out.close();
+				in.close();
+
+				//Se extrae el zip
+				SplashWindow.process(5, "Extensiones descargadas.");
+
+				System.out.println("Extrayendo a " + destDir.getAbsolutePath());
+
+				Date fechaDir = new Date(destDir.lastModified());
+				System.out.println("Fecha del directorio " + extDir + " = " +
+					fechaDir.toString());
+				Utilities.extractTo(temp, new File(extDir), splashWindow);
+
+				// Si todo ha ido bien, guardamos el timestamp.
+				///  App.instance.getPc().addProperties("timestamp", miliSecondsInWeb);
+				// XMLEntity xml=ps.getPersistentXML();
+				fechaActual = new java.util.Date();
+
+				FileOutputStream outAux = new FileOutputStream(timeFile);
+				prop.setProperty("timestamp", miliSecondsInWeb.toString());
+				prop.store(outAux, "last download");
+				outAux.close();
+				System.out.println("Fecha actual guardada: " +
+					fechaActual.toGMTString());
+
+				/* xml.putProperty("timestamp",fechaActual.toGMTString());
+				   ps.setPresistentXML(xml); */
+			}
+		} catch (IOException e) {
+			NotificationManager.addError("", e);
+		} catch (UnavailableServiceException e) {
+			NotificationManager.addError("", e);
+		} catch (SecurityException e) {
+			System.err.println("No se puede escribir el timeStamp " +
+				fechaActual.toGMTString());
+			NotificationManager.addError("", e);
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	private static Extensions[] getExtensions() {
+		ArrayList array = new ArrayList();
+		Iterator iter = pluginsConfig.values().iterator();
+
+		while (iter.hasNext()) {
+			array.add(((PluginConfig) iter.next()).getExtensions());
+		}
+
+		return (Extensions[]) array.toArray(new Extensions[0]);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static HashMap getPluginConfig() {
+		return pluginsConfig;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param s DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static Extension getExtension(String s) {
+		Extensions[] exts = getExtensions();
+
+		for (int i = 0; i < exts.length; i++) {
+			for (int j = 0; j < exts[i].getExtensionCount(); j++) {
+				if (exts[i].getExtension(j).getClassName().equals(s)) {
+					return exts[i].getExtension(j);
+				}
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static AndamiConfig getAndamiConfig() {
+		return andamiConfig;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author $author$
+	 * @version $Revision: 6128 $
+	 */
+	private static class ExtensionComparator implements Comparator {
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param o1 DOCUMENT ME!
+		 * @param o2 DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public int compare(Object o1, Object o2) {
+			Extension e1 = (Extension) o1;
+			Extension e2 = (Extension) o2;
+
+			if (!e1.hasPriority() && !e2.hasPriority()) {
+				return -1;
+			}
+
+			if (e1.hasPriority() && !e2.hasPriority()) {
+				return -Integer.MAX_VALUE;
+			}
+
+			if (e2.hasPriority() && !e1.hasPriority()) {
+				return Integer.MAX_VALUE;
+			}
+
+			if (e1.getPriority() != e2.getPriority()){
+				return e2.getPriority() - e1.getPriority();
+			}else{
+				return (e2.toString().compareTo(e1.toString()));
+			}
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	private static class MenuComparator implements Comparator {
+		private static ExtensionComparator extComp = new ExtensionComparator();
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param o1 DOCUMENT ME!
+		 * @param o2 DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public int compare(Object o1, Object o2) {
+			SortableMenu e1 = (SortableMenu) o1;
+			SortableMenu e2 = (SortableMenu) o2;
+
+			if (!e1.menu.hasPosition() && !e2.menu.hasPosition()) {
+				if (e1.extension instanceof SkinExtensionType) {
+					return 1;
+				} else if (e2.extension instanceof SkinExtensionType) {
+					return -1;
+				} else {
+					return extComp.compare(e1.extension, e2.extension);
+				}
+			}
+
+			if (e1.menu.hasPosition() && !e2.menu.hasPosition()) {
+				return -Integer.MAX_VALUE;
+			}
+
+			if (e2.menu.hasPosition() && !e1.menu.hasPosition()) {
+				return Integer.MAX_VALUE;
+			}
+
+			return e1.menu.getPosition() - e2.menu.getPosition();
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author $author$
+	 * @version $Revision: 6128 $
+	 */
+	private static class SortableMenu {
+		public PluginClassLoader loader;
+		public Menu menu;
+		public SkinExtensionType extension;
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param loader DOCUMENT ME!
+		 * @param skinExt
+		 * @param menu2
+		 */
+		public SortableMenu(PluginClassLoader loader,
+			SkinExtensionType skinExt, Menu menu2) {
+			extension = skinExt;
+			menu = menu2;
+			this.loader = loader;
+		}
+	}
+	/**
+	 * DOCUMENT ME!
+	 */
+	private static class SortableToolBar {
+		public PluginClassLoader loader;
+		public ToolBar toolbar;
+		public ActionTool actiontool;
+		public SelectableTool selectabletool;
+		public SkinExtensionType extension;
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param loader DOCUMENT ME!
+		 * @param skinExt
+		 * @param menu2
+		 */
+		public SortableToolBar(PluginClassLoader loader,
+			SkinExtensionType skinExt, ToolBar toolbar2,ActionTool actiontool2) {
+			extension = skinExt;
+			toolbar = toolbar2;
+			actiontool=actiontool2;
+			this.loader = loader;
+		}
+		public SortableToolBar(PluginClassLoader loader,
+				SkinExtensionType skinExt, ToolBar toolbar2,SelectableTool selectabletool2) {
+			extension = skinExt;
+			toolbar = toolbar2;
+			selectabletool=selectabletool2;
+			this.loader = loader;
+		}
+	}
+	/**
+	 * DOCUMENT ME!
+	 */
+	private static class ToolBarComparator implements Comparator {
+		private static ExtensionComparator extComp = new ExtensionComparator();
+
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param o1 DOCUMENT ME!
+		 * @param o2 DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public int compare(Object o1, Object o2) {
+			SortableToolBar e1 = (SortableToolBar) o1;
+			SortableToolBar e2 = (SortableToolBar) o2;
+			
+			// if the toolbars have the same name, they are considered to be
+			// the same toolbar, so we don't need to do further comparing
+			if (e1.toolbar.getName().equals(e2.toolbar.getName()))
+				return 0;
+			
+			if (!e1.toolbar.hasPosition() && !e2.toolbar.hasPosition()) {
+				if (e1.extension instanceof SkinExtensionType) {
+					return 1;
+				} else if (e2.extension instanceof SkinExtensionType) {
+					return -1;
+				} else {
+					return extComp.compare(e1.extension, e2.extension);
+				}
+			}
+
+			if (e1.toolbar.hasPosition() && !e2.toolbar.hasPosition()) {
+				return -Integer.MAX_VALUE;
+			}
+
+			if (e2.toolbar.hasPosition() && !e1.toolbar.hasPosition()) {
+				return Integer.MAX_VALUE;
+			}
+			if (e1.toolbar.getPosition() != e2.toolbar.getPosition())
+				return e1.toolbar.getPosition() - e2.toolbar.getPosition();
+			
+			if (e1.toolbar.getActionTool().equals(e2.toolbar.getActionTool()) && e1.toolbar.getSelectableTool().equals(e2.toolbar.getSelectableTool())){
+				return 0;
+			}
+			return (e1.toolbar.toString().compareTo(e2.toolbar.toString()));
+		}
+	}
+	
+	/**
+	 * <p>This class is used to compare tools (selectabletool and actiontool),
+	 * using the "position"
+	 * attribute.</p>
+	 * <p>The ordering criteria are:</p>
+	 * <ul><li>If the tools are placed in different toolbars, they use the toolbars'
+	 * order.
+	 * (using the ToolBarComparator).</li>
+	 * <li></li>
+	 * <li>If any of the tools has not 'position' attribute, the tool which
+	 * <strong>has</strong> the attribute will be placed first.</li>
+	 * <li>If both tools have the same position (or they don't have a
+	 * 'position' attribute), the priority of the extensions where the tool is defined.</li></ul>
+	 *
+	 * @author cesar
+	 * @version $Revision: 6128 $
+	 */
+	private static class ToolComparator implements Comparator {
+		private static ToolBarComparator toolBarComp = new ToolBarComparator();
+		/**
+		 * DOCUMENT ME!
+		 *
+		 * @param o1 DOCUMENT ME!
+		 * @param o2 DOCUMENT ME!
+		 *
+		 * @return DOCUMENT ME!
+		 */
+		public int compare(Object o1, Object o2) {
+			// compare the toolbars which contain the tools
+			int result = toolBarComp.compare(o1, o2);
+			if (result != 0) { // if the toolbars are different, use their order
+				return result;
+			}
+			// otherwise, compare the tools
+			SortableToolBar e1 = (SortableToolBar) o1;
+			SortableToolBar e2 = (SortableToolBar) o2;
+			int e1Position=-1, e2Position=-1;
+
+			if (e1.actiontool!=null) {
+				if (e1.actiontool.hasPosition())
+					e1Position = e1.actiontool.getPosition();
+			}
+			else if (e1.selectabletool!=null) {
+				if (e1.selectabletool.hasPosition())
+					e1Position = e1.selectabletool.getPosition();
+			}
+			
+			if (e2.actiontool!=null) {
+				if (e2.actiontool.hasPosition())
+					e2Position = e2.actiontool.getPosition();
+			}
+			else if (e2.selectabletool!=null){
+				if (e2.selectabletool.hasPosition())
+					e2Position = e2.selectabletool.getPosition();
+			}
+			
+			if (e1Position==-1 && e2Position!=-1) {
+				return 1;
+			}
+			if (e1Position!=-1 && e2Position==-1) {
+				return -1;
+			}
+			if (e1Position!=-1 && e2Position!=-1) {
+				result = e1Position - e2Position;
+				// we don't return 0 unless both objects are the same, otherwise the objects get overwritten in the treemap
+				if (result!=0) return result;
+			}
+			/*if (e1.toolbar.getActionTool().equals(e2.toolbar.getActionTool()) && e1.toolbar.getSelectableTool().equals(e2.toolbar.getSelectableTool())){
+				return 0;
+			}*/
+			//logger.warn(Messages.getString("Different_tools_have_the_same_position_at_toolbar_")+e1.toolbar.getName());
+			return e1.toString().compareTo(e2.toString());
+		}
+	}
+	
+	
+	/**
+	 * validates the user before starting gvsig
+	 *
+	 */
+	private static void validate(){
+		
+		IAuthentication session =  null;
+		try {
+			
+			//String location = getClassLocation(Class.forName("com.iver.andami.authentication.Session"));
+			session = (IAuthentication)Class.forName("com.iver.andami.authentication.Session").newInstance();
+
+		} catch (ClassNotFoundException e) {
+			// TODO Auto-generated catch block
+			//e.printStackTrace();
+			return;
+		} catch (InstantiationException e) {
+			// TODO Auto-generated catch block
+			//e.printStackTrace();
+			return;
+		} catch (IllegalAccessException e) {
+			// TODO Auto-generated catch block
+			//e.printStackTrace();
+			return;
+		}
+		
+		session.setPluginDirectory( andamiConfig.getPluginsDirectory() );
+		if (session.validationRequired()){
+			
+			//opens the login dialog for the user to validate
+			//session.loging does not need arguments: they are read in the internal hashtable
+			session.getUser();
+			if(session.Login((String)session.get("user"),(String)session.get("pwd"))){
+				System.out.println("You are logged in");
+				//PluginServices.setSession( session );	
+			}
+			else{
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+						 "You are not logged in");				
+				System.exit(0);
+			}
+			PluginServices.setAuthentication(session);
+		}		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/src/com/iver/andami/Launcher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_ca.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_ca.properties
+KeyMapping.Caracter_no_valido=Car\u00E0cter no v\u00E0lid\:
+Launcher.config_mal_formado=. Fitxer 'config.xml' mal format
+Launcher.config_no_encontrado=. Fitxer 'config.xml' no trobat
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00E8ncia no resolta en el connector
+Launcher.Dos_skin_extension=Dos skin-extension. Usem l'\u00FAltim
+Launcher.Error_con_las_librerias_del_plugin=Error amb les llibreries del connector
+Launcher.Error_instanciando_la_extension=Error instanciant l'extensi\u00F3
+Launcher.Error_localizando_la_clase_de_la_extension=Error en localitzar la classe de l'extensi\u00F3
+Launcher.Hay_dependencias_circulares=Hi ha depend\u00E8ncies circulars entre els connectors
+Launcher.Ignorando_el_directorio=Ignorant el directori
+Launcher.labelset_class=No s'ha pogut trobar la classe d'etiquetes (labelset)
+Launcher.look_and_feel=No s'ha pogut posar el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No s'ha trobat la classe de l'extensi\u00F3
+Launcher.No_se_encontro_la_clase_mdi_manager=No s'ha trobat la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No s'ha pogut accedir a la classe mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No s'ha pogut guardar la configuraci\u00F3 d'andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No s'ha pogut instanciar la classe mdi manager
+Launcher.No_se_puede_acceder_a=No es pot accedir a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=S'ha produ\u00EFt un error en guardar la configuraci\u00F3 dels connectors
+Launcher.Two_extensions_with_the_same_priority=Dos extensions amb la mateixa prioritat, nom\u00E9s se'n carregar\u00E0 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00FAs amb la mateixa posici\u00F3, nom\u00E9s se'n carregar\u00E0 un
+MDIFrame.Error_no_capturado_por_el_usuario=Error no detectat per l'usuari
+MDIFrame.quiere_salir=Est\u00E0 segur que vol eixir?
+MDIFrame.salir=Eixir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No s'ha trobat cap extensi\u00F3 'skin' entre els connectors
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos classes amb el mateix nom en el connector
+PluginClassLoader.Error_reading_file=Error llegint el fitxer\: 
+PluginServices.Bug_en_el_codigo=Error en el codi
+PluginServices.Error_grave_de_la_aplicacion=Error greu de l'aplicaci\u00F3. \u00C9s convenient que guarde les dades i isca de l'aplicaci\u00F3
+PluginServices.No_se_encontro_el_recurso_de_traducciones=No s'ha trobat el recurs de traduccions
+PluginServices.No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00F3 per a
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No s'ha pogut posar el rellotge d'arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No s'ha pogut restaurar el cursor del ratol\u00ED
+SplashWindow.Iniciando=Iniciant...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00F3 iniciada

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_pt.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_pt_br.properties
+KeyMapping.Caracter_no_valido=Caractere inv\u00E1lido
+Launcher.config_mal_formado='config.xml' mal formado
+Launcher.config_no_encontrado='config.xml' n\u00E3o encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00EAncia de plugin n\u00E3o satisfeita
+Launcher.Dos_skin_extension=Duas extens\u00F5es de pele.
+Launcher.Error_con_las_librerias_del_plugin=Erro de biblioteca de plugin 
+Launcher.Error_instanciando_la_extension=N\u00E3o posso instanciar extens\u00E3o
+Launcher.Error_localizando_la_clase_de_la_extension=N\u00E3o posso localizar extens\u00E3o de classe
+Launcher.Hay_dependencias_circulares=Depend\u00EAncias de plugin envolvidas no ciclo
+Launcher.Ignorando_el_directorio=Ignorando
+Launcher.labelset_class=N\u00E3o posso encontrar configura\u00E7\u00E3o de classe de legenda (labelset)
+Launcher.look_and_feel=N\u00E3o posso setar sistema 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=N\u00E3o posso encontrar extens\u00E3o de classe
+Launcher.No_se_encontro_la_clase_mdi_manager=N\u00E3o posso encontrar classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=N\u00E3o posso acessar mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=N\u00E3o posso salvar configura\u00E7\u00E3o de andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=N\u00E3o posso instanciar mdi manager
+Launcher.No_se_puede_acceder_a=N\u00E3o posso acessar para
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=N\u00E3o posso salvar configura\u00E7\u00F5es de plugins
+Launcher.Two_extensions_with_the_same_priority=Duas extens\u00F5es com a mesma prioridade. S\u00F3 uma ser\u00E1 carregada.
+Launcher.Two_menus_with_the_same_position=Dois menus com a mesma posi\u00E7\u00E3o
+MDIFrame.Error_no_capturado_por_el_usuario=Erro de usu\u00E1rio
+MDIFrame.quiere_salir=Sair do gvSIG?
+MDIFrame.salir=Sair
+MDIManagerFactory.No_skin_extension_in_the_plugins=No skin extension in the plugins
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Duas classes com o mesmo nome
+PluginClassLoader.Error_reading_file=Erro de IO\: 
+PluginServices.Bug_en_el_codigo=Bug
+PluginServices.Error_grave_de_la_aplicacion=Erro cr\u00EDtico. \u00C9 melhor voc\u00EA salvar e sair
+PluginServices.No_se_encontro_el_recurso_de_traducciones=N\u00E3o posso encontrar pacote de recursos
+PluginServices.No_se_encontro_la_traduccion_para=N\u00E3o posso encontrar a tradu\u00E7\u00E3o 
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=n\u00E3o posso setar ampulheta
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=N\u00E3o posso restaurar o cursor
+SplashWindow.Iniciando=Iniciando...
+StatusBar.Aplicacion_iniciada=Aplica\u00E7\u00E3o iniciada

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_cs.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_cs.properties
+KeyMapping.Caracter_no_valido=Neplatn\u00FD znak 
+Launcher.config_mal_formado=chybn\u00FD 'config.xml'
+Launcher.config_no_encontrado='config.xml' nenalezen
+Launcher.Dependencia_no_resuelta_en_plugin=Poru\u0161en\u00E1 z\u00E1vislost z\u00E1suvn\u00E9ho modulu
+Launcher.Dos_skin_extension=Dv\u011B extenze pro vzhled.
+Launcher.Error_con_las_librerias_del_plugin=Chyba v knihovn\u011B z\u00E1suvn\u00E9ho modulu
+Launcher.Error_instanciando_la_extension=Nelze vytvo\u0159it instanci extenze
+Launcher.Error_localizando_la_clase_de_la_extension=Nelze nal\u00E9zt t\u0159\u00EDdu extenze
+Launcher.Hay_dependencias_circulares=Kruhov\u00E1 z\u00E1vislost z\u00E1suvn\u00E9ho modulu
+Launcher.Ignorando_el_directorio=Ignoruji adres\u00E1\u0159
+Launcher.labelset_class=Nelze nal\u00E9zt popisek t\u0159\u00EDdy (labelset)
+Launcher.look_and_feel=Nelze nastavit syst\u00E9mov\u00FD vzhled
+Launcher.No_se_encontro_la_clase_de_la_extension=Nelze nal\u00E9zt t\u0159\u00EDdu extenze
+Launcher.No_se_encontro_la_clase_mdi_manager=Nelze nal\u00E9zt t\u0159\u00EDdu mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=P\u0159\u00EDstup k mdi manager odm\u00EDtnut
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Nelze ulo\u017Eit konfiguraci Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Nelze vytvo\u0159it instanci mdi manager
+Launcher.No_se_puede_acceder_a=Zam\u00EDtnut p\u0159\u00EDstup k
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Nelze ulo\u017Eit konfigurace z\u00E1suvn\u00FDch modul\u016F
+Launcher.Two_extensions_with_the_same_priority=Dv\u011B extenze se stejnou prioritou. Bude na\u010Dtena jen jedna.
+Launcher.Two_menus_with_the_same_position=Dv\u011B nab\u00EDdky se stejnou pozic\u00ED. Bude na\u010Dtena jen jedna.
+MDIFrame.Error_no_capturado_por_el_usuario=Chyba u\u017Eivatele
+MDIFrame.quiere_salir=Ukon\u010Dit gvSIG?
+MDIFrame.salir=Konec
+MDIManagerFactory.No_skin_extension_in_the_plugins=Neexistuje extenze pro vzhled v z\u00E1suvn\u00E9m modulu
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dv\u011B t\u0159\u00EDdy se stejn\u00FDm jm\u00E9nem
+PluginClassLoader.Error_reading_file=IO chyba\: 
+PluginServices.Bug_en_el_codigo=Chyba
+PluginServices.Error_grave_de_la_aplicacion=Kritick\u00E1 chyba. Rad\u011Bji ulo\u017Ete pr\u00E1ci a ukon\u010Dete
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Nelze nal\u00E9zt p\u0159ekladov\u00FD soubor
+PluginServices.No_se_encontro_la_traduccion_para=Nelze nal\u00E9zt p\u0159eklad pro
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Nelze nastavit p\u0159es\u00FDpac\u00ED hodiny
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Nelze obnovit kurzor
+SplashWindow.Iniciando=Spou\u0161t\u00EDm...
+StatusBar.Aplicacion_iniciada=Aplikace spu\u0161t\u011Bna

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_va.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_va.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_va.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_ca.properties
+KeyMapping.Caracter_no_valido=Car\u00E0cter no v\u00E0lid\:
+Launcher.config_mal_formado=. Fitxer 'config.xml' mal format
+Launcher.config_no_encontrado=. Fitxer 'config.xml' no trobat
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00E8ncia no resolta en el connector
+Launcher.Dos_skin_extension=Dos skin-extension. Usem l'\u00FAltim
+Launcher.Error_con_las_librerias_del_plugin=Error amb les llibreries del connector
+Launcher.Error_instanciando_la_extension=Error instanciant l'extensi\u00F3
+Launcher.Error_localizando_la_clase_de_la_extension=Error en localitzar la classe de l'extensi\u00F3
+Launcher.Hay_dependencias_circulares=Hi ha depend\u00E8ncies circulars entre els connectors
+Launcher.Ignorando_el_directorio=Ignorant el directori
+Launcher.labelset_class=No s'ha pogut trobar la classe d'etiquetes (labelset)
+Launcher.look_and_feel=No s'ha pogut posar el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No s'ha trobat la classe de l'extensi\u00F3
+Launcher.No_se_encontro_la_clase_mdi_manager=No s'ha trobat la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No s'ha pogut accedir a la classe mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No s'ha pogut guardar la configuraci\u00F3 d'andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No s'ha pogut instanciar la classe mdi manager
+Launcher.No_se_puede_acceder_a=No es pot accedir a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=S'ha produ\u00EFt un error en guardar la configuraci\u00F3 dels connectors
+Launcher.Two_extensions_with_the_same_priority=Dos extensions amb la mateixa prioritat, nom\u00E9s se'n carregar\u00E0 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00FAs amb la mateixa posici\u00F3, nom\u00E9s se'n carregar\u00E0 un
+MDIFrame.Error_no_capturado_por_el_usuario=Error no detectat per l'usuari
+MDIFrame.quiere_salir=Est\u00E0 segur que vol eixir?
+MDIFrame.salir=Eixir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No s'ha trobat cap extensi\u00F3 'skin' entre els connectors
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos classes amb el mateix nom en el connector
+PluginClassLoader.Error_reading_file=Error llegint el fitxer\: 
+PluginServices.Bug_en_el_codigo=Error en el codi
+PluginServices.Error_grave_de_la_aplicacion=Error greu de l'aplicaci\u00F3. \u00C9s convenient que guarde les dades i isca de l'aplicaci\u00F3
+PluginServices.No_se_encontro_el_recurso_de_traducciones=No s'ha trobat el recurs de traduccions
+PluginServices.No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00F3 per a
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No s'ha pogut posar el rellotge d'arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No s'ha pogut restaurar el cursor del ratol\u00ED
+SplashWindow.Iniciando=Iniciant...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00F3 iniciada

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_va.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_fr.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_fr.properties
+KeyMapping.Caracter_no_valido=Caract\u00E8re non valide\:
+Launcher.config_mal_formado=. Fichier 'config.xml' mal format\u00E9
+Launcher.config_no_encontrado=. Fichier 'config.xml' non trouv\u00E9
+Launcher.Dependencia_no_resuelta_en_plugin=D\u00E9pendance non r\u00E9solue dans le plugin
+Launcher.Dos_skin_extension=Dos "skin-extension". utilisons le dernier\:
+Launcher.Error_con_las_librerias_del_plugin=Erreur avec les librairies du plugin
+Launcher.Error_instanciando_la_extension=Erreur d'instanciation de l'extension
+Launcher.Error_localizando_la_clase_de_la_extension=Erreur de localisation de la classe d'extension
+Launcher.Hay_dependencias_circulares=Il y a des d\u00E9pendances circulaires entre les plugins
+Launcher.Ignorando_el_directorio=Ingnor\u00E9 dans le r\u00E9pertoire
+Launcher.labelset_class=Impossible de trouver la classe des \u00E9tiquettes (labelset)
+Launcher.look_and_feel=le"look and feel"n'a pas pu s'afficher\:
+Launcher.No_se_encontro_la_clase_de_la_extension=Impossible de trouver la classe de l'extension
+Launcher.No_se_encontro_la_clase_mdi_manager=Impossible de trouver la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Impossible d'acc\u00E9der la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Impossible de conserver la configuration d'Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Impossible d'instancier la classe mdi manager
+Launcher.No_se_puede_acceder_a=Impossible d'acc\u00E9der \u00E0
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Une erreur s'est produite lors de la sauvegarde de la configuration des plugins
+Launcher.Two_extensions_with_the_same_priority=Deux extensions avec la m\u00EAme priorit\u00E9, une seule sera charg\u00E9e.
+Launcher.Two_menus_with_the_same_position=Deux menus ont la m\u00EAme position, un seul sera charg\u00E9
+MDIFrame.Error_no_capturado_por_el_usuario=Erreur non captur\u00E9e par l'utilisateur
+MDIFrame.quiere_salir=Voulez-vous vraiment quitter gvSIG?
+MDIFrame.salir=Quitter
+MDIManagerFactory.No_skin_extension_in_the_plugins=Aucune extension'skin'trouv\u00E9e parmi les plugins\:
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Deux classes ont le m\u00EAme nom dans le plugin
+PluginClassLoader.Error_reading_file=Erreur dans la lecture du fichier\:
+PluginServices.Bug_en_el_codigo=Bug dans le code
+PluginServices.Error_grave_de_la_aplicacion=Erreur grave. Sauvez et quittez l'application.
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Impossible de trouver les fichiers de traductions
+PluginServices.No_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Absence de sablier\:
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Impossible de restaurer le curseur de la souris
+SplashWindow.Iniciando=Initialisation...
+StatusBar.Aplicacion_iniciada=Application initialis\u00E9e

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_de.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_de.properties
+KeyMapping.Caracter_no_valido=Ung\u00FCltigiges Zeichen\:
+Launcher.config_mal_formado=Datei 'config.xml' fehlerhaft
+Launcher.config_no_encontrado=Konnte die Datei 'config.xml' nicht finden.
+Launcher.Dependencia_no_resuelta_en_plugin=Ungekl\u00E4rte Plugin-Abh\u00E4ngigkeit
+Launcher.Dos_skin_extension=Zwei skin-extensions. Es wird die letzte verwendet.
+Launcher.Error_con_las_librerias_del_plugin=Fehler bei den Plugin-Bibliotheken
+Launcher.Error_instanciando_la_extension=Kann die Erweiterung nicht instanziieren.
+Launcher.Error_localizando_la_clase_de_la_extension=Fehler bei der Lokalisierung der Erweiterungsklasse
+Launcher.Hay_dependencias_circulares=Kreisf\u00F6rmige Abh\u00E4ngigkeiten zwischen den Plugins
+Launcher.Ignorando_el_directorio=Das Verzeichnis wird ignoriert.
+Launcher.labelset_class=Kann die Etikettenklasse (labelset) nicht finden.
+Launcher.look_and_feel=Konnte nicht auf 'look and feel'  stellen.
+Launcher.No_se_encontro_la_clase_de_la_extension=Konnte die Erweiterungsklasse nicht finden.
+Launcher.No_se_encontro_la_clase_mdi_manager=Konnte die mdi-manager-Klasse nicht finden.
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Konnte nicht auf den mdi-manager zugreifen.
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Konnte die andami-Erweiterung nicht speichern.
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Konnte den mdi-manager nicht erstellen.
+Launcher.No_se_puede_acceder_a=Kein Zugriff m\u00F6glich auf\: 
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Fehler bei der Speicherung der Plugin-Konfiguration
+Launcher.Two_extensions_with_the_same_priority=Zwei Erweiterungen mit der gleichen Priorit\u00E4t. Es wird nur eine geladen.
+Launcher.Two_menus_with_the_same_position=Zwei Men\u00FCs mit der gleichen Priorit\u00E4t. Es wird nur eins geladen.
+MDIFrame.Error_no_capturado_por_el_usuario=Anwendungsfehler
+MDIFrame.quiere_salir=Sind Sie sicher, dass Sie das Programm beenden wollen?
+MDIFrame.salir=Beenden
+MDIManagerFactory.No_skin_extension_in_the_plugins=Keine skin-extension in den Plugins gefunden
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Zwei Klassen mit dem gleichen Namen im Plugin
+PluginClassLoader.Error_reading_file=Dateilesefehler \:
+PluginServices.Bug_en_el_codigo=Bug im Code
+PluginServices.Error_grave_de_la_aplicacion=Schwerer Anwendungsfehler. Sie sollten Ihre Daten speichern und die Anwendung beenden.
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Konnte die \u00DCbersetzungsressource nicht finden.
+PluginServices.No_se_encontro_la_traduccion_para=Konnte \u00DCbersetzung nicht finden f\u00FCr\:
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Konnte die Sanduhr nicht stellen.
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Konnte den Cursor nicht wiederherstellen.
+SplashWindow.Iniciando=Startet...
+StatusBar.Aplicacion_iniciada=Anwendung gestartet

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_eu.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_eu.properties
+KeyMapping.Caracter_no_valido=Karakterea ez da baliozkoa\: 
+Launcher.config_mal_formado='config.xml' fitxategia txarto eratuta dago
+Launcher.config_no_encontrado='config.xml' fitxategia ez da aurkitu
+Launcher.Dependencia_no_resuelta_en_plugin=Mendekotasuna ez da plugin-ean ebatzi
+Launcher.Dos_skin_extension=Dos skin luzapena. Azkena erabiliko dugu
+Launcher.Error_con_las_librerias_del_plugin=Errorea plugin-aren liburutegietan
+Launcher.Error_instanciando_la_extension=Errorea luzapena instantziatzean
+Launcher.Error_localizando_la_clase_de_la_extension=Errorea luzapen-mota aurkitzean
+Launcher.Hay_dependencias_circulares=Plugin-en artean mendekotasun zirkularrak daude
+Launcher.Ignorando_el_directorio=Ez hartu direktorioa kontuan
+Launcher.labelset_class=Etiketa-mota (labelset) ezin izan da aurkitu
+Launcher.look_and_feel=Ezin izan da jarri 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Luzapen-mota ezin izan da aurkitu
+Launcher.No_se_encontro_la_clase_mdi_manager=mdi manager klasea ezin izan da aurkitu
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=mdi manager klasea ezin izan da atzitu
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Andamiren konfigurazioa ezin izan da gorde
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Ezin izan da mdi manager klasea instantziatu
+Launcher.No_se_puede_acceder_a=Ezin izan da honakoa atzitu\:
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Errorea plugin-en konfigurazioa gordetzean
+Launcher.Two_extensions_with_the_same_priority=Lehentasun bereko bi luzapen, bakarra kargatuko da.
+Launcher.Two_menus_with_the_same_position=Posizio bereko bi menu, bakarra kargatuko da.
+MDIFrame.Error_no_capturado_por_el_usuario=Erabiltzaileak kapturatu ez duen errorea
+MDIFrame.quiere_salir=Ziur zaude irten nahi duzula?
+MDIFrame.salir=Irten
+MDIManagerFactory.No_skin_extension_in_the_plugins=Ez da aurkitu 'skin' luzapenik plugin-en artean
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Izen bereko bi klase plugin-ean
+PluginClassLoader.Error_reading_file=Errorea fitxategia irakurtzean\: 
+PluginServices.Bug_en_el_codigo=Bug-a kodean
+PluginServices.Error_grave_de_la_aplicacion=Aplikazioaren akats larria. Komenigarria da zure datuak gordetzea eta aplikaziotik irtetea
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Itzulpenen baliabidea ez da aurkitu
+PluginServices.No_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Ezin izan da arezko erlojua jarri
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Saguaren kurtsorea ezin izan da berrezarri
+SplashWindow.Iniciando=Hasten...
+StatusBar.Aplicacion_iniciada=Aplikazioa hasita dago

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_it.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_it.properties
+KeyMapping.Caracter_no_valido=Carattere non valido\:
+Launcher.config_mal_formado=. Documento 'config.xml' mal formato
+Launcher.config_no_encontrado=. Documento 'config.xml' non trovato
+Launcher.Dependencia_no_resuelta_en_plugin=La dipendenza non risulta in plugin
+Launcher.Dos_skin_extension=Due skin-extension. Usare l'ultima
+Launcher.Error_con_las_librerias_del_plugin=Errore con la libreria del plugin
+Launcher.Error_instanciando_la_extension=Errore ricorrendo all'estensione
+Launcher.Error_localizando_la_clase_de_la_extension=Errore localizzando la classe dell'estensione
+Launcher.Hay_dependencias_circulares=Ci sono dipendenze circolari tra i plugins
+Launcher.Ignorando_el_directorio=Ignorando il registro
+Launcher.labelset_class=Non si \u00E9 trovata la classe delle etichette (labelset)
+Launcher.look_and_feel=Non si \u00E9 potuto porre il 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Non si \u00E9 trovata la classe dell'estensione
+Launcher.No_se_encontro_la_clase_mdi_manager=No si \u00E9 trovata la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Non si \u00E9 potuto accedere alla clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Non si \u00E9 potuta salvare la configurazione di andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Non si \u00E9 potuto ricorrere alla classe mdi manager
+Launcher.No_se_puede_acceder_a=Non si puo' accedere a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Si \u00E9 prodotto un errore salvando la configurazione dei plugins
+Launcher.Two_extensions_with_the_same_priority=Due estensioni con la stessa priorita', se ne carichera' solo una.
+Launcher.Two_menus_with_the_same_position=Due men\u00FA con la stessa posizione, se ne carichera' solo uno
+MDIFrame.Error_no_capturado_por_el_usuario=Errore non catturato per l'usario
+MDIFrame.quiere_salir=Sei sicuro di voler uscire?
+MDIFrame.salir=Uscire
+MDIManagerFactory.No_skin_extension_in_the_plugins=Non si \u00E9 trovato nessuna estensione 'skin' tra i plugins
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Due classi con lo stesso nome nel plugin
+PluginClassLoader.Error_reading_file=Errore leggendo il file\:
+PluginServices.Bug_en_el_codigo=Bug nel codice
+PluginServices.Error_grave_de_la_aplicacion=Errore grave dell'applicazione. \u00C9 conveniente salvare i dati ed uscire dall'applicazione
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Non si \u00E9 incontrata la risorsa traduzione
+PluginServices.No_se_encontro_la_traduccion_para=Non si \u00E9 incontrata la traduzione per
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Non si \u00E9 potuta porre la clessidra
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Non si \u00E9 potuto riparare il cursore del mouse
+SplashWindow.Iniciando=Iniziando...
+StatusBar.Aplicacion_iniciada=Applicazione iniziata

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text.properties	(revision 42196)
@@ -0,0 +1,40 @@
+#text.properties
+KeyMapping.Caracter_no_valido=Car\u00E1cter no v\u00E1lido\: 
+Launcher.config_mal_formado=. Fichero 'config.xml' mal formado
+Launcher.config_no_encontrado=. Fichero 'config.xml' no encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Dependencia no resuelta en plugin
+Launcher.Dos_skin_extension=Dos skin-extension. Usamos el \u00FAltimo
+Launcher.Error_con_las_librerias_del_plugin=Error con las librer\u00EDas del plugin
+Launcher.Error_instanciando_la_extension=Error instanciando la extensi\u00F3n
+Launcher.Error_localizando_la_clase_de_la_extension=Error localizando la clase de la extensi\u00F3n
+Launcher.Hay_dependencias_circulares=Hay dependencias circulares entre los plugins
+Launcher.Ignorando_el_directorio=Ignorando el directorio
+Launcher.labelset_class=No se pudo encontrar la clase de las etiquetas (labelset)
+Launcher.look_and_feel=No se pudo poner el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No se encontr\u00F3 la clase de la extensi\u00F3n
+Launcher.No_se_encontro_la_clase_mdi_manager=No se encontr\u00F3 la clase mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No se pudo acceder a la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No se pudo guardar la configuraci\u00F3n de andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No se pudo instanciar la clase mdi manager
+Launcher.No_se_puede_acceder_a=No se puede acceder a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Se produjo un error guardando la configuraci\u00F3n de los plugins
+Launcher.Two_extensions_with_the_same_priority=Dos extensiones con la misma prioridad, s\u00F3lo se cargar\u00E1 una.
+Launcher.Two_menus_with_the_same_position=Dos menus con la misma posici\u00F3n, s\u00F3lo se cargar\u00E1 uno
+MDIFrame.Error_no_capturado_por_el_usuario=Error no capturado por el usuario
+MDIFrame.quiere_salir=\u00BFEst\u00E1 seguro de que quiere salir?
+MDIFrame.salir=Salir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No se encontr\u00F3 ninguna extensi\u00F3n 'skin' entre los plugins
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos clases con el mismo nombre en el plugin
+PluginClassLoader.Error_reading_file=Error leyendo fichero\: 
+PluginServices.Bug_en_el_codigo=Bug en el c\u00F3digo
+PluginServices.Error_grave_de_la_aplicacion=Error grave de la aplicaci\u00F3n. Es conveniente que guardes tus datos y salgas de la aplicaci\u00F3n
+PluginServices.No_se_encontro_el_recurso_de_traducciones=No se encontr\u00F3 el recurso de traducciones
+PluginServices.No_se_encontro_la_traduccion_para=No se encontr\u00F3 la traducci\u00F3n para
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No se pudo poner el reloj de arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No se pudo restaurar el cursor del rat\u00F3n
+PluginServices.Procesando=Procesando...
+SplashWindow.Iniciando=Iniciando...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00F3n iniciada
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00F3 la traducci\u00F3n para 
+Messages.no_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No se encontr\u00F3 la lista de idiomas preferidos. Quiz� olvid\u00F3 inicializar la clase
+Messages.las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas 

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_en.properties	(revision 42196)
@@ -0,0 +1,41 @@
+#text_en.properties
+KeyMapping.Caracter_no_valido=Invalid character 
+Launcher.config_mal_formado=malformed 'config.xml'
+Launcher.config_no_encontrado='config.xml' not found
+Launcher.Dependencia_no_resuelta_en_plugin=Unsatisfied plugin dependency
+Launcher.Dos_skin_extension=Two skin-extension.
+Launcher.Error_con_las_librerias_del_plugin=Plugin library error
+Launcher.Error_instanciando_la_extension=Cannot instantiate extension
+Launcher.Error_localizando_la_clase_de_la_extension=Cannot locate extension class
+Launcher.Hay_dependencias_circulares=Plugin dependencies involved in circle
+Launcher.Ignorando_el_directorio=Ignoring the directory
+Launcher.labelset_class=Cannot find label set class (labelset)
+Launcher.look_and_feel=Cannot set system 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Cannot find extension class
+Launcher.No_se_encontro_la_clase_mdi_manager=Cannot find mdi manager class
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Cannot access mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Cannot save andami configuration
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Cannot instantiate mdi manager
+Launcher.No_se_puede_acceder_a=Cannot access to
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Cannot save plugins configuration
+Launcher.Two_extensions_with_the_same_priority=Two extensions with the same priority. Only will load one.
+Launcher.Two_menus_with_the_same_position=Two menus with the same position. Only will load one.
+MDIFrame.Error_no_capturado_por_el_usuario=User error
+MDIFrame.quiere_salir=Exit gvSIG?
+MDIFrame.salir=Exit
+MDIManagerFactory.No_skin_extension_in_the_plugins=No skin extension in the plugins
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Two classes with the same name
+PluginClassLoader.Error_reading_file=IO error\: 
+PluginServices.Bug_en_el_codigo=Bug
+PluginServices.Error_grave_de_la_aplicacion=Critical error. You better save and exit
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Cannot find resource bundle
+PluginServices.No_se_encontro_la_traduccion_para=Cannot find translation for
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=cannot set hour glass
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Cannot restore cursor
+PluginServices.Procesando=Processing...
+SplashWindow.Iniciando=Starting...
+StatusBar.Aplicacion_iniciada=Application started
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+Messages.no_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=Prefered lenguages list doesn't found. Maybe the class hasn't been initialized
+Messages.las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded 
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/tools/impl/DefaultI18Manager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/tools/impl/DefaultI18Manager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/tools/impl/DefaultI18Manager.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.tools.impl;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * This manager is in charge of providing with a richer text translation than
+ * the one used by default.
+ * 
+ * 
+ * @author gvSIG Team
+ * 
+ */
+public class DefaultI18Manager implements I18nManager {
+
+	public String getTranslation(String message) {
+		return Messages.getText(message);
+	}
+
+        public String getTranslation(String message, String[] args) {
+		return Messages.getText(message,args);
+        }
+
+	public void addResourceFamily(String family, ClassLoader loader,
+			String callerName) {
+		if (!Messages.hasLocales()) {
+			Messages.addLocale(Locale.getDefault());
+		}
+		Messages.addResourceFamily(family, loader, callerName);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/tools/impl/DefaultI18Manager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesClassLoader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesClassLoader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesClassLoader.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/**
+ * <p>This class offers a class loader which is able to load files from the specified
+ * directories.</p>
+ * 
+ * @author C�sar Mart�nez Izquierdo (cesar.martinez@iver.es)
+ *
+ */
+public class MessagesClassLoader extends URLClassLoader {
+	
+	/**
+	 * <p>Creates a new class loader, which is able to load files from the directories
+	 * specified as parameter.</p>
+	 * 
+	 * @param urls The list of directories which will be used to load files.
+	 */
+	public MessagesClassLoader(URL[] urls) {
+		super(urls);
+	}
+	
+	/**
+	 * Loads a resource using the specified file name.
+	 * 
+	 * @param res The name of the resource to be loaded.
+	 */
+	public URL getResource(String res) {
+		try {
+			ArrayList resource = new ArrayList();
+			StringTokenizer st = new StringTokenizer(res, "\\/");
+			
+			while (st.hasMoreTokens()) {
+				String token = st.nextToken();
+				resource.add(token);
+			}
+			URL ret = null;
+			int currentUrl;
+			URL[] urls = getURLs();
+		
+			for (currentUrl=0; currentUrl< urls.length; currentUrl++) {
+				URL url = urls[currentUrl];
+				File file = new File(url.getFile());
+				if (url.getFile().endsWith("/"))
+					ret = getResource(file, resource);
+			}
+			
+			if (ret != null) {
+				return ret;
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		return super.getResource(res);
+	}
+	
+	/**
+	 * Busca recursivamente el recurso res en el directorio base. res es una
+	 * lista de String's con los directorios del path y base es el directorio
+	 * a partir del cual se busca dicho recurso. En cada ejecuci�n del m�todo
+	 * se toma el primer elemento de res y se busca dicho directorio en el
+	 * directorio base. Si se encuentra, ser� el directorio base para una
+	 * nueva llamada.
+	 *
+	 * @param base Directorio desde donde parte la b�squeda del recurso.
+	 * @param res Lista de strings con el path del recurso que se quiere
+	 *        encontrar
+	 *
+	 * @return URL con el recurso
+	 */
+	private URL getResource(File base, List res) {
+		File[] files = base.listFiles();
+		
+		String parte = (String) res.get(0);
+		
+		for (int i = 0; i < files.length; i++) {
+			if (files[i].getName().compareTo(parte) == 0) {
+				if (res.size() == 1) {
+					try {
+						return new URL("file:" + files[i].toString());
+					} catch (MalformedURLException e) {
+						return null;
+					}
+				} else {
+					return getResource(files[i], res.subList(1, res.size()));
+				}
+			}
+		}
+		
+		return null;
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesClassLoader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/Messages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/Messages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/Messages.java	(revision 42196)
@@ -0,0 +1,787 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.i18n;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.IllegalFormatException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>This class offers some methods to provide internationalization services
+ * to other projects. All the methods are static.</p>
+ *
+ * <p>The most useful method is {@link #getText(String) getText(key)} (and family),
+ * which returns the translation associated
+ * with the provided key. The class must be initialized before getText can be
+ * used.</p>
+ *
+ * <p>The typical usage sequence would be:</p>
+ * <ul>
+ * <li>Add some locale to the prefered locales list: <code>Messages.addLocale(new Locale("es"))</code></li>
+ * <li>Add some resource file containing translations: <code>Messages.addResourceFamily("text", new File("."))</code></li>
+ * <li>And finaly getText can be used: <code>Messages.getText("aceptar")</code></li>
+ * </ul>
+ *
+ * <p>The resource files are Java properties files, which contain <code>key=translation</code>
+ * pairs, one
+ * pair per line. These files must be encoded using iso-8859-1 encoding, and unicode escaped
+ * sequences must be used to include characters outside the former encoding.
+ * There are several ways to specify the property file to load, see the different
+ * addResourceFamily methods for details.</p>
+ *
+ * @author Cesar Martinez Izquierdo (cesar.martinez@iver.es)
+ *
+ */
+public class Messages {
+    
+    private static class FamilyDescriptor {
+        String family = null;
+        ClassLoader loader = null;
+        String callerName = null;
+        
+        public FamilyDescriptor(String family, ClassLoader loader, String callerName ) {
+            this.family  = family;
+            this.loader = loader;
+            this.callerName = callerName;
+        }
+    }
+    
+    private static Logger logger = LoggerFactory.getLogger("Messages");
+    private static String _CLASSNAME = "org.gvsig.i18n.Messages";
+    private static Locale currentLocale;
+
+    /* Each entry will contain a hashmap with translations. Each hasmap
+     * contains the translations for one language, indexed by the
+     * translation key. The translations for language (i) in the preferred locales
+     * list are contained in the position (i) of the localeResources list */
+    private static ArrayList localeResources = new ArrayList();
+    private static ArrayList preferredLocales = new ArrayList(); // contains the ordered list of prefered languages/locales (class Locale)
+    private static Set notTranslatedKeys = new HashSet();
+
+
+	/* Set of resource families and classloaders used to load i18n resources. */
+	private static Set resourceFamilies = new HashSet();
+	private static Set classLoaders = new HashSet();
+
+        private static List familyDescriptors = new ArrayList();
+        
+	/*
+	 * The language considered the origin of translations, which will
+	 * (possibly) be stored in a property file without language suffix
+	 * (ie: text.properties instead of text_es.properties).
+	 */
+	private static String baseLanguage = "es";
+	private static Locale baseLocale = new Locale(baseLanguage);
+
+	/**
+	 * <p>Gets the localized message associated with the provided key.
+	 * If the key is not in the dictionary, return the key and register
+	 * the failure in the log.</p>
+	 *
+	 * <p>The <code>callerName</code> parameter is only
+	 * used as a label when logging, so any String can be used. However, a
+	 * meaningful String should be used, such as the name of the class requiring
+	 * the translation services, in order to identify the source of the failure
+	 * in the log.</p>
+	 *
+	 * @param key         An String which identifies the translation that we want to get.
+	 * @param callerName  A symbolic name given to the caller of this method, to
+	 *                    show it in the log if the key was not found
+	 * @return            an String with the message associated with the provided key.
+	 *                    If the key is not in the dictionary, return the key. If the key
+	 *                    is null, return null.
+	 */
+	public static String getText(String key, String callerName) {
+		if (key==null) {
+			return null;
+		}
+		for (int numLocale=0; numLocale<localeResources.size(); numLocale++) {
+			// try to get the translation for any of the languagues in the preferred languages list
+			String translation = ((Properties)localeResources.get(numLocale)).getProperty(key);
+			if (translation!=null && !translation.equals("")) {
+				return translation;
+			}
+		}
+                addNotTranslatedKey(key, callerName, true);
+		return key;
+	}
+
+	public static String getText(String key,  String[] arguments, String callerName) {
+		String translation = getText(key, callerName);
+		if (translation!=null && arguments!=null ) {
+			try {
+				translation = MessageFormat.format(translation, arguments);
+			}
+			catch (IllegalFormatException ex) {
+				logger.error(callerName+" -- Error formating key: "+key+" -- "+translation);
+			}
+		}
+		return translation;
+	}
+	
+	public static String translate(String message, String[] args) {
+		String msg = message;
+		if (msg == null) {
+			return "";
+		}
+		msg = getText(msg, args);
+		if (msg == null) {
+			msg = "_" + message.replace("_", " ");
+		}
+		return msg;
+	}
+
+	public static String translate(String message) {
+		String msg = message;
+		if (msg == null) {
+			return "";
+		}
+		msg = getText(msg, (String[]) null);
+		if (msg == null || msg.startsWith("_")) {
+			msg = "_" + message.replace("_", " ");
+		}
+		return msg;
+	}
+
+	/**
+	 * <p>Gets the localized message associated with the provided key.
+	 * If the key is not in the dictionary or the translation is empty,
+	 * return the key and register the failure in the log.</p>
+	 *
+	 * @param key     An String which identifies the translation that we want to get.
+	 * @return        an String with the message associated with the provided key.
+	 *                If the key is not in the dictionary or the translation is empty,
+	 *                return the key. If the key is null, return null.
+	 */
+	public static String getText(String key) {
+		return getText(key, _CLASSNAME);
+	}
+
+	public static String getText(String key, String[] arguments) {
+		return getText(key, arguments, _CLASSNAME);
+	}
+
+	
+	/**
+	 * <p>Gets the localized message associated with the provided key.
+	 * If the key is not in the dictionary or the translation is empty,
+	 * it returns null and the failure is only registered in the log if
+	 * the param log is true.</p>
+	 *
+	 * @param key	An String which identifies the translation that we want
+	 * 				to get.
+	 * @param log	Determines whether log a key failure or not
+	 * @return		an String with the message associated with the provided key,
+	 * 				or null if the key is not in the dictionary or the
+	 * 				translation is empty.
+	 */
+	public static String getText(String key, boolean log) {
+		return getText(key, _CLASSNAME, log);
+	}
+
+	public static String getText(String key, String[] arguments, boolean log) {
+		String translation = getText(key, _CLASSNAME, log);
+		if (translation!=null && arguments!=null ) {
+			try {
+				translation = MessageFormat.format(translation, arguments);
+			} catch (IllegalFormatException ex) {
+				if (log) {
+					logger.error(_CLASSNAME+" -- Error formating key: "+key+" -- "+translation);
+				}
+			}
+		}
+		return translation;
+	}
+
+	/**
+	 * <p>Gets the localized message associated with the provided key.
+	 * If the key is not in the dictionary, it returns null and the failure
+	 * is only registered in the log if the param log is true.</p>
+	 *
+	 * @param key         An String which identifies the translation that we want to get.
+	 * @param callerName  A symbolic name given to the caller of this method, to
+	 *                    show it in the log if the key was not found
+	 * @param log         Determines whether log a key failure or not
+	 * @return            an String with the message associated with the provided key,
+	 *                    or null if the key is not in the dictionary.
+	 */
+	public static String getText(String key, String callerName, boolean log) {
+		if (key==null) {
+			return null;
+		}
+		for (int numLocale=0; numLocale<localeResources.size(); numLocale++) {
+			// try to get the translation for any of the languagues in the preferred languages list
+			String translation = ((Properties)localeResources.get(numLocale)).getProperty(key);
+			if (translation!=null && !translation.equals("")) {
+				return translation;
+			}
+		}
+                addNotTranslatedKey(key, callerName, log);
+		return null;
+	}
+
+	public static String getText(String key, String[] arguments, String callerName, boolean log) {
+		String translation = getText(key, callerName, log);
+		if (translation!=null) {
+			try {
+				translation = MessageFormat.format(translation, arguments);
+			}
+			catch (IllegalFormatException ex) {
+				if (log) {
+					logger.error(callerName+" -- Error formating key: "+key+" -- "+translation);
+				}
+			}
+		}
+		return translation;
+	}
+
+	/**
+	 * <p>Adds an additional family of resource files containing some translations.
+	 * A family is a group of files with a common baseName.
+	 * The file must be an iso-8859-1 encoded file, which can contain any unicode
+	 * character using unicode escaped sequences, and following the syntax:
+	 * <code>key1=value1
+	 * key2=value2</code>
+	 * where 'key1' is the key used to identify the string and must not
+	 * contain the '=' symbol, and 'value1' is the associated translation.</p>
+	 * <p<For example:</p>
+	 * <code>cancel=Cancelar
+	 * accept=Aceptar</code>
+	 * <p>Only one pair key-value is allowed per line.</p>
+	 *
+	 * <p>The actual name of the resource file to load is determined using the rules
+	 * explained in the class java.util.ResourceBundle. Summarizing, for each language
+	 * in the specified preferred locales list it will try to load a file with
+	 *  the following structure: <code>family_locale.properties</code></p>
+	 *
+	 * <p>For example, if the preferred locales list contains {"fr", "es", "en"}, and
+	 * the family name is "text", it will try to load the files "text_fr.properties",
+	 * "text_es.properties" and finally "text_en.properties".</p>
+	 *
+	 * <p>Locales might be more specific, such us "es_AR"  (meaning Spanish from Argentina)
+	 * or "es_AR_linux" (meaning Linux system preferring Spanish from Argentina). In the
+	 * later case, it will try to load "text_es_AR_linux.properties", then
+	 * "text_es_AR.properties" if the former fails, and finally "text_es.properties".</p>
+	 *
+	 * <p>The directory used to locate the resource file is determining by using the
+	 * getResource method from the provided ClassLoader.</p>
+	 *
+	 * @param family    The family name (or base name) which is used to search
+	 *                  actual properties files.
+	 * @param loader    A ClassLoader which is able to find a property file matching
+	 * 					the specified family name and the preferred locales
+	 * @see             <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html">ResourceBundle</a>
+	 */
+	public static void addResourceFamily(String family, ClassLoader loader) {
+		addResourceFamily(family, loader, "");
+	}
+
+	/**
+	 * <p>Adds an additional family of resource files containing some translations.
+	 * The search path to locate the files is provided by the dirList parameter.</p>
+	 *
+	 * <p>See {@link addResourceFamily(String, ClassLoader)} for a discussion about the
+	 * format of the property files and the way to determine the candidat files
+	 * to load. Note that those methods are different in the way to locate the
+	 * candidat files. This method searches in the provided paths (<code>dirList</code>
+	 * parameter), while the referred method searches using the getResource method
+	 * of the provided ClassLoader.</p>
+	 *
+	 * @param family    The family name (or base name) which is used to search
+	 *                  actual properties files.
+	 * @param dirList   A list of search paths to locate the property files
+	 * @throws MalformedURLException
+	 * @see             <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html">ResourceBundle</a>
+	 */
+	public static void addResourceFamily(String family, File[] dirList) throws MalformedURLException{
+		// use our own classloader
+		URL[] urls = new URL[dirList.length];
+
+			int i;
+			for (i=0; i<urls.length; i++) {
+				urls[i] = dirList[i].toURL();
+			}
+
+		ClassLoader loader = new MessagesClassLoader(urls);
+		addResourceFamily(family, loader, "");
+	}
+
+	/**
+	 * <p>Adds an additional family of resource files containing some translations.
+	 * The search path to locate the files is provided by the dir parameter.</p>
+	 *
+	 * <p>See {@link addResourceFamily(String, ClassLoader)} for a discussion about the
+	 * format of the property files and the way to determine the candidat files
+	 * to load. Note that those methods are different in the way to locate the
+	 * candidat files. This method searches in the provided path (<code>dir</code>
+	 * parameter), while the referred method searches using the getResource method
+	 * of the provided ClassLoader.</p>
+	 *
+	 * @param family    The family name (or base name) which is used to search
+	 *                  actual properties files.
+	 * @param dir       The search path to locate the property files
+	 * @throws MalformedURLException
+	 * @see             <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html">ResourceBundle</a>
+	 */
+	public static void addResourceFamily(String family, File dir) throws MalformedURLException{
+		// use our own classloader
+		URL[] urls = new URL[1];
+		urls[0] = dir.toURL();
+		ClassLoader loader = new MessagesClassLoader(urls);
+		addResourceFamily(family, loader, "");
+	}
+
+
+	/**
+	 * <p>Adds an additional family of resource files containing some translations.
+	 * The search path is determined by the getResource method from the
+	 * provided ClassLoader.</p>
+	 *
+	 * <p>This method is identical to {@link addResourceFamily(String, ClassLoader)},
+	 * except that it adds a <pode>callerName</code> parameter to show in the log.</p>
+	 *
+	 * <p>See {@link addResourceFamily(String, ClassLoader)} for a discussion about the
+	 * format of the property files andthe way to determine the candidat files
+	 * to load.</p>
+	 *
+	 * @param family      The family name (or base name) which is used to search
+	 *                    actual properties files.
+	 * @param loader      A ClassLoader which is able to find a property file matching
+	 * 					  the specified family name and the preferred locales
+	 * @param callerName  A symbolic name given to the caller of this method, to
+	 *                    show it in the log if there is an error
+	 * @see               <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html">ResourceBundle</a>
+	 */
+	public static void addResourceFamily(String family, ClassLoader loader, String callerName) {
+//		String currentKey;
+//		Enumeration keys;
+		Locale lang;
+//		Properties properties;
+		Properties translations;
+		int totalLocales = preferredLocales.size();
+
+		if (totalLocales == 0) {
+			// if it's empty, warn about that
+			logger.warn("There is not preferred languages list. Maybe the Messages class was not initialized");
+		}
+
+                familyDescriptors.add( new FamilyDescriptor(family,loader,callerName));
+                
+		resourceFamilies.add(family);
+		classLoaders.add(loader);
+
+		for (int numLocale=0; numLocale<totalLocales; numLocale++) { // for each language
+//			properties =  new Properties();
+
+			lang = (Locale) preferredLocales.get(numLocale);
+			translations = (Properties) localeResources.get(numLocale);
+
+			addResourceFamily(lang, translations, family, loader, callerName);
+		}
+	}
+        
+	private static void addResourceFamily(Locale lang, Properties translations,
+			String family, ClassLoader loader, String callerName) {
+                logger.debug("addResourceFamily "+lang.toString()+", "+family+", "+loader.toString());
+                
+		Properties properties = new Properties();
+		String langCode = lang.toString();
+		String resource = family.replace('.', '/') + "_" + langCode + ".properties";
+                URL resourceURL = loader.getResource(resource);
+		InputStream is = loader.getResourceAsStream(resource);
+		if( is==null && langCode.contains("_") ) {
+			try {
+				langCode = langCode.split("_")[0];
+				resource = family.replace('.', '/') + "_" + langCode + ".properties";
+                                resourceURL = loader.getResource(resource);
+				is = loader.getResourceAsStream(resource);
+				if( is==null ) {
+					resource = family.replace('.', '/') +  ".properties";
+                                        resourceURL = loader.getResource(resource);
+					is = loader.getResourceAsStream(resource);
+				}
+			} catch(Exception ex) {
+				// Do nothing, is are null and are handled later
+			}
+		}
+		if (is != null) {
+			try {
+				properties.load(is);
+			} catch (IOException e) {
+			}
+		} else if (lang.equals(baseLocale)) {
+			// try also "text.properties" for the base language
+			is = loader.getResourceAsStream(family.replace('.', '/')
+					+ ".properties");
+
+
+			if (is != null) {
+				try {
+					properties.load(is);
+				} catch (IOException e) {
+				}
+			}
+
+		}
+                if( resourceURL!=null && logger.isDebugEnabled() ) {
+                    logger.debug("Load resources from '"+resourceURL.toString()+"' with classloader {"+loader.toString()+"}.");
+                }
+		Enumeration keys = properties.keys();
+		while (keys.hasMoreElements()) {
+			String currentKey = (String) keys.nextElement();
+			if (!translations.containsKey(currentKey)) {
+				translations.put(currentKey, properties.getProperty(currentKey));
+			}
+		}
+
+	}
+
+	/**
+	 * <p>Adds an additional family of resource files containing some translations.</p>
+	 *
+	 * <p>This method is identical to {@link addResourceFamily(String, ClassLoader, String)},
+	 * except that it uses the caller's class loader.</p>
+	 *
+	 * <p>See {@link addResourceFamily(String, ClassLoader)} for a discussion about the
+	 * format of the property files and the way to determine the candidat files
+	 * to load.</p>
+	 *
+	 * @param family      The family name (or base name) which is used to search
+	 *                    actual properties files.
+	 * @param callerName  A symbolic name given to the caller of this method, to
+	 *                    show it in the log if there is an error. This is only used
+	 *                    to show
+	 *                    something meaningful in the log, so you can use any string
+	 * @see               <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html">ResourceBundle</a>
+	 */
+	public static void addResourceFamily(String family, String callerName) {
+		addResourceFamily(family, Messages.class.getClassLoader(), callerName);
+	}
+
+
+	/**
+	 * Returns an ArrayList containing the ordered list of prefered Locales
+	 * Each element of the ArrayList is a Locale object.
+	 *
+	 * @return an ArrayList containing the ordered list of prefered Locales
+	 * Each element of the ArrayList is a Locale object.
+	 */
+	public static ArrayList getPreferredLocales() {
+		return preferredLocales;
+	}
+
+	/**
+	 * <p>Sets the ordered list of preferred locales.
+	 * Each element of the ArrayList is a Locale object.</p>
+	 *
+	 * <p>Note that calling this method does not load any translation, it just
+	 * adds the language to the preferred locales list, so this method must
+	 * be always called before the translations are loaded using
+	 * the addResourceFamily() methods.</p>
+	 *
+	 * <p>It there was any language in the preferred locale list, the language
+	 * and its associated translations are deleted.</p>
+	 *
+	 *
+	 * @param preferredLocales an ArrayList containing Locale objects.
+	 * The ArrayList represents an ordered list of preferred locales
+	 */
+	public static void setPreferredLocales(ArrayList preferredLocalesList) {
+                logger.info("setPreferredLocales "+preferredLocalesList.toString());
+		// delete all existing locales
+		Iterator oldLocales = preferredLocales.iterator();
+		while (oldLocales.hasNext()) {
+			removeLocale((Locale) oldLocales.next());
+		}
+
+		// add the new locales now
+		for (int numLocale=0; numLocale < preferredLocalesList.size(); numLocale++) {
+			addLocale((Locale) preferredLocalesList.get(numLocale));
+		}
+	}
+
+        public static Locale getCurrentLocale() {
+            return currentLocale;
+        }
+
+        /**
+         * 
+         * @deprecated  use setCurrentLocale(Locale locale, Locale alternatives[]) or LocaleManager.setCurrentLocale
+         */
+        public static void setCurrentLocale(Locale locale) {
+            Locale alternatives[] = null;
+
+            String localeStr = locale.getLanguage();
+            if ( localeStr.equals("es") || 
+                 localeStr.equals("ca") ||
+                 localeStr.equals("gl") || 
+                 localeStr.equals("eu") ||
+                 localeStr.equals("vl") ) {
+                alternatives = new Locale[2];
+                alternatives[0] = new Locale("es");
+                alternatives[1] = new Locale("en");
+            } else {
+                // prefer English for the rest
+                alternatives = new Locale[2];
+                alternatives[0] = new Locale("en");
+                alternatives[1] = new Locale("es");
+            }
+            setCurrentLocale(locale, alternatives);
+        }
+        
+        public static void setCurrentLocale(Locale locale, Locale alternatives[]) {
+            logger.info("setCurrentLocale "+locale.toString());
+            
+            resourceFamilies = new HashSet();
+            classLoaders = new HashSet();
+            localeResources = new ArrayList();
+            preferredLocales = new ArrayList();
+            notTranslatedKeys = new HashSet();            
+            
+            addLocale(locale);
+            for( int i=0 ; i<alternatives.length; i++ ) {
+                addLocale(alternatives[i]);
+            }
+            for( int curlocale=0; curlocale<preferredLocales.size(); curlocale++) {
+                for( int curfamily=0; curfamily<familyDescriptors.size(); curfamily++) {
+                     FamilyDescriptor family = (FamilyDescriptor) familyDescriptors.get(curfamily);
+                     addResourceFamily(
+                             (Locale) preferredLocales.get(curlocale),
+                             (Properties) localeResources.get(curlocale),
+                             family.family,
+                             family.loader,
+                             family.callerName);
+                }
+            }
+            currentLocale = locale;
+            Locale.setDefault(locale);
+        }
+
+	/**
+	 * Adds a Locale at the end of the ordered list of preferred locales.
+	 * Note that calling this method does not load any translation, it just
+	 * adds the language to the preferred locales list, so this method must
+	 * be always called before the translations are loaded using
+	 * the addResourceFamily() methods.
+	 *
+	 * @param lang   A Locale object specifying the locale to add
+	 */
+	public static void addLocale(Locale lang) {
+		if (!preferredLocales.contains(lang)) { // avoid duplicates
+                    logger.info("addLocale "+lang.toString());
+                    preferredLocales.add(lang); // add the lang to the ordered list of preferred locales
+                    Properties dict = new Properties();
+                    localeResources.add(dict); // add a hashmap which will contain the translation for this language
+		}
+	}
+
+	/**
+	 * Removes the specified Locale from the list of preferred locales and the
+	 * translations associated with this locale.
+	 *
+	 * @param lang   A Locale object specifying the locale to remove
+	 * @return       True if the locale was in the preferred locales list, false otherwise
+	 */
+	public static boolean removeLocale(Locale lang) {
+		int numLocale = preferredLocales.indexOf(lang);
+		if (numLocale!=-1) { // we found the locale in the list
+			try {
+				preferredLocales.remove(numLocale);
+				localeResources.remove(numLocale);
+			}
+			catch (IndexOutOfBoundsException ex) {
+				logger.warn(_CLASSNAME + "." + "removeLocale: " + ex.getLocalizedMessage(), ex);
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Cleans the translation tables (removes all the translations from memory).
+	 */
+	public static void removeResources() {
+		for (int numLocale=0; numLocale<localeResources.size(); numLocale++) {
+			((Properties)localeResources.get(numLocale)).clear();
+		}
+	}
+
+	/**
+	 * The number of translation keys which have been loaded till now
+	 * (In other words: the number of available translation strings).
+	 *
+	 * @param lang The language for which we want to know the number of translation keys
+	 * return The number of translation keys for the provided language.
+	 */
+	protected static int size(Locale lang) {
+		int numLocale = preferredLocales.indexOf(lang);
+		if (numLocale!=-1) {
+			return ((Properties)localeResources.get(numLocale)).size();
+		};
+		return 0;
+	}
+
+	protected static Set keySet(Locale lang) {
+		int numLocale = preferredLocales.indexOf(lang);
+		if (numLocale!=-1) {
+			return ((Properties)localeResources.get(numLocale)).keySet();
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Checks if some locale has been added to the preferred locales
+	 * list, which is necessary before loading any translation because
+	 * only the translations for the preferred locales are loaded.
+	 *
+	 * @return
+	 */
+	public static boolean hasLocales() {
+		return preferredLocales.size()>0;
+	}
+
+	/**
+	 * Gets the base language, the language considered the origin of
+	 * translations, which will be (possibly) stored in a property
+	 * file without language suffix
+	 * (ie: text.properties instead of text_es.properties).
+	 */
+	public static String getBaseLanguage() {
+		return baseLanguage;
+	}
+
+	/**
+	 * Sets the base language, the language considered the origin of
+	 * translations, which will be (possibly)
+	 * stored in a property file without language suffix
+	 * (ie: text.properties instead of text_es.properties).
+	 *
+	 * @param lang The base language to be set
+	 */
+	public static void setBaseLanguage(String lang) {
+		baseLanguage = lang;
+		baseLocale = new Locale(baseLanguage);
+	}
+
+	/*
+	 * Searches the subdirectories of the provided directory, finding
+	 * all the translation files, and constructing a list of available translations.
+	 * It reports different country codes or variants, if available.
+	 * For example, if there is an en_US translation and an en_GB translation, both
+	 * locales will be present in the Vector.
+	 *
+	 * @return
+	 */
+
+	/**
+	 *
+	 * @return A Vector containing the available locales. Each element is a Locale object
+	 */
+	/*public static Vector getAvailableLocales() {
+		return _availableLocales;
+	}*/
+
+	/**
+	 *
+	 * @return A Vector containing the available languages. Each element is an String object
+	 */
+	/*public static Vector getAvailableLanguages() {
+		Vector availableLanguages = new Vector();
+		Locale lang;
+		Enumeration locales = _availableLocales.elements();
+		while (locales.hasMoreElements()) {
+			lang = (Locale) locales.nextElement();
+			availableLanguages.add(lang.getLanguage());
+		}
+		return availableLanguages;
+	}*/
+
+	public static Properties getAllTexts(Locale lang) {
+		Properties texts = new Properties();
+		getAllTexts(lang, null, texts);
+		for (Iterator iterator = classLoaders.iterator(); iterator.hasNext();) {
+			getAllTexts(lang, (ClassLoader) iterator.next(), texts);
+		}
+		return texts;
+	}
+
+	private static void getAllTexts(Locale lang, ClassLoader classLoader,
+			Properties texts) {
+		ClassLoader loader = classLoader == null ? Messages.class
+				.getClassLoader() : classLoader;
+
+		for (Iterator iterator = resourceFamilies.iterator(); iterator
+				.hasNext();) {
+			String family = (String) iterator.next();
+			addResourceFamily(lang, texts, family, loader,
+					"Messages.getAllTexts");
+		}
+	}
+
+        
+        public static Properties getTranslations(Locale locale) {
+		Properties translations = new Properties();
+                for( int curfamily=0; curfamily<familyDescriptors.size(); curfamily++) {
+                     FamilyDescriptor family = (FamilyDescriptor) familyDescriptors.get(curfamily);
+                     addResourceFamily(
+                             locale,
+                             translations,
+                             family.family,
+                             family.loader,
+                             family.callerName);
+                }
+                return translations;
+        }
+
+        private static void addNotTranslatedKey(String key, String callerName, boolean log) {
+            if (!notTranslatedKeys.contains(key)) {
+                if( log ) {
+                    logger.info("[" + callerName + "] Cannot find translation for key '" + key + "'.");
+                }
+                notTranslatedKeys.add(key);
+            }
+        }
+        
+        public static List getNotTranslatedKeys() {
+            List l = new ArrayList(notTranslatedKeys);
+            return l;
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/Messages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesLibrary.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n;
+
+import org.gvsig.i18n.tools.impl.DefaultI18Manager;
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * This library is in charge of providing a richer translation manager than the
+ * one used by default.
+ * 
+ * 
+ * @author christian
+ * 
+ */
+public class MessagesLibrary extends AbstractLibrary {
+
+	public void doRegistration() {
+		super.doRegistration();
+		this.registerAsServiceOf(ToolsLibrary.class);
+		require(ToolsLocator.class);
+	}
+
+	protected void doInitialize() throws LibraryException {
+		ToolsLocator.registerI18nManager(DefaultI18Manager.class);
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+        // Nothing to do
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>org.gvsig.i18n package</title>
+</head>
+<body>
+<p>Provides classes which offer some methods to provide internationalization services
+to other projects. Currently, it only consist on the Messages class and the auxiliary
+MessagesClassLoader class.</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/templates/MessagesTemplate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/templates/MessagesTemplate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/templates/MessagesTemplate.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.i18n.templates;
+
+import java.util.Locale;
+
+/**
+* Bridge class to provide internationalization services to the library.
+* It uses the gvsig-i18n library as a backend, and includes its
+* necessary initialization.
+* 
+* @author Cesar Martinez Izquierdo
+*
+*/
+public class MessagesTemplate {
+	/**
+	 * Whether the class has been initialized
+	 */
+	private static boolean isInitialized = false;
+	
+	/**
+	 * The name of the Java package containing this class
+	 */
+	private static final String packageName = MessagesTemplate.class.getPackage().getName();
+	
+	/**
+	 * Loads the translations in the dictionary. It initializes the backend
+	 * gvsig-i18n library
+	 *
+	 */
+	private static void init() {
+		if (!org.gvsig.i18n.Messages.hasLocales()) {
+			org.gvsig.i18n.Messages.addLocale(Locale.getDefault());
+		}
+		org.gvsig.i18n.Messages.addResourceFamily(packageName+".resources.translations.text", MessagesTemplate.class.getClassLoader(), packageName);
+	}
+	
+	/**
+	 * Gets the translation associated with the provided translation key.
+	 * 
+	 * @param key The translation key which identifies the target text
+	 * @return The translation associated with the provided translation key.
+	 */
+	public static String getText(String key) {
+		if (isInitialized==false) {
+			init();
+			isInitialized = true;
+		}
+		return org.gvsig.i18n.Messages.getText(key, packageName);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/templates/MessagesTemplate.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_it.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+aceptar=Accetta
+Las_traducciones_no_pudieron_ser_cargadas=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+No_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceptar
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=No hay lista de idiomas preferidos. Quiza olvido inicializar la clase
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quiz\u00e1 olvid\u00f3 inicializar la clase.
+No_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.i18n.MessagesLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_en.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [en]
+#Wed Nov 08 12:31:46 CET 2006
+=\=\=\=\=\=\=
+<<<<<<<=text_en.properties
+>>>>>>>=1.6
+aceptar=Accept
+Las_traducciones_no_pudieron_ser_cargadas=Translations couldn't be loaded
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=There is no list of favorite languages probably you forgot initialice the class
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+No_se_encontro_la_traduccion_para=Cannot find translation for

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_gl.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceptar
+Las_traducciones_no_pudieron_ser_cargadas=As traducci\u00f3ns non se puideron cargar
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=Non se atopou a lista de idiomas preferidos.Quiz\u00e1s non se lembrou de inicializar a clase
+No_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_ca.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Acceptar
+Las_traducciones_no_pudieron_ser_cargadas=Les traduccions no s'han pogut carregar
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No s'ha trobat la llista d'idiomes preferits. Potser ha oblidat inicialitzar la classe
+No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_pt.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceitar
+Las_traducciones_no_pudieron_ser_cargadas=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+No_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_cs.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [cs]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Budi\u017e
+Las_traducciones_no_pudieron_ser_cargadas=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+No_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_fr.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Accepter
+Las_traducciones_no_pudieron_ser_cargadas=Les traductions ne peuvent pas \u00eatre charg\u00e9es.
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=Impossible de trouver la liste des langues pr\u00e9f\u00e9r\u00e9es. Vous avez peut-\u00eatre oubli\u00e9 d'installer la classe.
+No_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_de.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=OK
+Las_traducciones_no_pudieron_ser_cargadas=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+No_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_eu.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Ados
+Las_traducciones_no_pudieron_ser_cargadas=Itzulpenak ezin izan dira kargatu
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=\=Ez da hobetsitako hizkuntzen zerrenda aurkitu. Agian klasea hasieratzea ahaztu zaizu
+No_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml	(revision 42196)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.i18n</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>Management of texts related to a locale:  loading from resource bundles and getting the text value for the current locale</description>
+
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+        <version>2.0.97</version>
+    </parent>
+            
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.tools.lib</artifactId>
+          <scope>compile</scope>  
+        </dependency>
+    </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestProperties.java	(revision 42196)
@@ -0,0 +1,202 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import junit.framework.TestCase;
+
+/**
+ * @author cesar
+ *
+ */
+public class TestProperties extends TestCase {
+	static final String fileName = "TestProperties-file";
+	InputStream is;
+	OutputStream os;
+	
+	public void initOutputStream() {
+		try {
+			os = new FileOutputStream(fileName);
+		} catch (FileNotFoundException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+	}
+	
+	public void discardOutputStream() {
+		try {
+			os.close();
+			File file = new File(fileName);
+			file.delete();
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+	}
+	
+	public void initInputStream() {
+		try {
+			is = new FileInputStream(fileName);
+		} catch (FileNotFoundException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+	}
+	
+	public void discardInputStream() {
+		try {
+			is.close();
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+	}
+	
+	public void testOrderedPropertiesBasic() {
+		// write file
+		OrderedProperties props1 = new OrderedProperties();
+		props1.setProperty("prueba", "hola");
+		props1.setProperty("prueba2", "holas");
+		props1.setProperty("abrir", "cerrar");
+		props1.setProperty("puerta", "hembrilla");
+		props1.setProperty("12libros", "quijote");
+		props1.setProperty("ca�uto", "\u20acuropeo");
+		props1.setProperty("confli=cto", "amigo");
+		props1.setProperty("  confli =  :cto mayor ", " peque�o conflicto");
+		initOutputStream();
+		try {
+			props1.store(os, "header");
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+		
+		// read file
+		OrderedProperties props2 = new OrderedProperties();
+		initInputStream();
+		try {
+			props2.load(is);
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+		TestCase.assertEquals("\u20acuropeo", props2.getProperty("ca�uto"));
+		TestCase.assertEquals("amigo", props2.getProperty("confli=cto"));
+		TestCase.assertEquals(" peque�o conflicto", props2.getProperty("  confli =  :cto mayor "));
+		TestCase.assertEquals("hola", props2.getProperty("prueba"));
+		TestCase.assertEquals("holas", props2.getProperty("prueba2"));
+		TestCase.assertEquals("cerrar", props2.getProperty("abrir"));
+		TestCase.assertEquals("hembrilla", props2.getProperty("puerta"));
+		TestCase.assertEquals("quijote", props2.getProperty("12libros"));
+		discardInputStream();
+		discardOutputStream();
+	}
+
+	
+	public void testOrderedProperties() {
+		// write file
+		OrderedProperties props1 = new OrderedProperties();
+		props1.setProperty("prueba", "hola");
+		props1.setProperty("prueba2", "holas");
+		props1.setProperty("ca�uto", "\u20acuropeo");
+		props1.setProperty("confli=cto", "amigo");
+		props1.setProperty("  conflis =  :cto mayor ", " peque�o conflicto");
+		props1.setProperty("abrir", "cerrar");
+		props1.setProperty("puerta", "hembrilla");
+		props1.setProperty("12libros", "quijote");
+		initOutputStream();
+		try {
+			props1.store(os, "header", "8859_15");
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+		
+		// read file
+		OrderedProperties props2 = new OrderedProperties();
+		initInputStream();
+		try {
+			props2.load(is, "8859_15");
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+		// estos deber�an salir igual
+		TestCase.assertEquals("hola", props2.getProperty("prueba"));
+		TestCase.assertEquals("holas", props2.getProperty("prueba2"));
+		TestCase.assertEquals("cerrar", props2.getProperty("abrir"));
+		TestCase.assertEquals("hembrilla", props2.getProperty("puerta"));
+		TestCase.assertEquals("quijote", props2.getProperty("12libros"));
+		// con estos en cambio no obtenemos los mismos valores que escribimos anteriormente. Es normal, porque incluimos
+		// caracteres especiales como ":" y "=". Para manejarlos correctamente necesitamos usas los m�todos load/store
+		// sin encoding, los cuales s� escapan los caracteres especiales
+		TestCase.assertEquals("\u20acuropeo", props2.getProperty("ca�uto"));
+		TestCase.assertEquals("cto=amigo", props2.getProperty("confli"));
+		TestCase.assertEquals(":cto mayor = peque�o conflicto", props2.getProperty("conflis"));
+
+		discardInputStream();
+		discardOutputStream();
+		
+		// write file
+		props1 = new OrderedProperties();
+		props1.setProperty("Prueba", "hola");
+		props1.setProperty("prueba2", "holas");
+		props1.setProperty("ca�uto", "\u20acuropeo");
+		props1.setProperty("confli=cto", "amigo");
+		props1.setProperty("  conflis =  :cto mayor ", " peque�o conflicto");
+		props1.setProperty("abrir", "cerrar");
+		props1.setProperty("puerta", "hembrilla");
+		props1.setProperty("12libros", "quijote");
+		initOutputStream();
+		try {
+			props1.store(os, "header", "UTF8");
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+		
+		// read file
+		props2 = new OrderedProperties();
+		initInputStream();
+		try {
+			props2.load(is, "UTF8");
+		} catch (IOException e) {
+			TestCase.fail(e.getLocalizedMessage());
+		}
+		// estos deber�an salir igual
+		TestCase.assertEquals("hola", props2.getProperty("Prueba"));
+		TestCase.assertEquals("holas", props2.getProperty("prueba2"));
+		TestCase.assertEquals("cerrar", props2.getProperty("abrir"));
+		TestCase.assertEquals("hembrilla", props2.getProperty("puerta"));
+		TestCase.assertEquals("quijote", props2.getProperty("12libros"));
+		// con estos en cambio no obtenemos los mismos valores que escribimos anteriormente. Es normal, porque incluimos
+		// caracteres especiales como ":" y "=". Para manejarlos correctamente necesitamos usas los m�todos load/store
+		// sin encoding, los cuales s� escapan los caracteres especiales
+		TestCase.assertEquals("\u20acuropeo", props2.getProperty("ca�uto"));
+		TestCase.assertEquals("cto=amigo", props2.getProperty("confli"));
+		TestCase.assertEquals(":cto mayor = peque�o conflicto", props2.getProperty("conflis"));
+
+		discardInputStream();
+		discardOutputStream();
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestUtils.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.File;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+/**
+ * @author cesar
+ *
+ */
+public class TestUtils extends TestCase {
+	
+	public ConfigOptions loadConfig() {
+		ConfigOptions config = new ConfigOptions();
+		config.setConfigFile("src-test"+File.separator+"org"+File.separator+"gvsig"+File.separator+"i18n"+File.separator+"utils"+File.separator+"config.xml");
+		config.load();
+		return config;
+	}
+	
+	public void testConfigOptions() {
+		ConfigOptions config = loadConfig();
+		
+		String databaseDir=null, basedir=null;
+		try {
+			databaseDir = new File("test-data/database").getCanonicalPath();
+			basedir =  new File("test-data").getCanonicalPath();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		// the values of the projects. They are pairs (dir, basename).
+		String projectValues[]={"src/appgvSIG", "otro", "sources", "src/_fwAndami", "text", "sources"};
+		for (int i=0; i<projectValues.length; i=i+3) {
+			try {
+				// set the canonical path
+				projectValues[i]= new File(basedir+File.separator+projectValues[i]).getCanonicalPath();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		
+		TestCase.assertEquals(databaseDir, config.databaseDir);
+		TestCase.assertEquals(basedir, config.defaultBaseDir);
+		TestCase.assertEquals("text", config.defaultBaseName);
+		
+		String languages = config.languages[0];
+		for (int i=1; i<config.languages.length; i++) {
+			languages=languages+";"+config.languages[i];
+		}
+		TestCase.assertEquals("ca;cs;de;en;es;eu;fr;gl;it;pt", languages);
+		
+		for (int i=0; i<config.projects.size(); i=i+3) {
+			Project project = (Project) config.projects.get(i);
+			TestCase.assertEquals(projectValues[i], project.dir);
+			TestCase.assertEquals(projectValues[i+1], project.basename);
+			TestCase.assertEquals(projectValues[i+2], project.sourceKeys);
+		}
+	}
+	
+	public void testTranslationDatabase() {
+		ConfigOptions config = loadConfig();
+		TranslationDatabase database = new TranslationDatabase(config);
+		database.load();
+		TestCase.assertEquals("A�adir Capa" , database.getTranslation("es", "Anadir_Capa"));
+		TestCase.assertEquals("Add Layer" , database.getTranslation("en", "Anadir_Capa"));
+		TestCase.assertEquals("Afegir Capa" , database.getTranslation("ca", "Anadir_Capa"));
+		TestCase.assertEquals("Layer hinzuf�gen" , database.getTranslation("de", "Anadir_Capa"));
+		TestCase.assertEquals("Ayuda" , database.getTranslation("es", "Ayuda"));
+		TestCase.assertEquals(null , database.getTranslation("es", "test_case.clave_que_no_existe"));
+		
+		// add a translation
+		database.setTranslation("es", "test_case.clave_que_no_existe", "Clave que no existe");
+		// is it present now?
+		TestCase.assertEquals("Clave que no existe" , database.getTranslation("es", "test_case.clave_que_no_existe"));
+		
+		// remove the translation
+		database.removeTranslation("es", "test_case.clave_que_no_existe");
+		// was really removed?
+		TestCase.assertEquals(null , database.getTranslation("es", "test_case.clave_que_no_existe"));
+		
+		// add the translation again
+		database.setTranslation("es", "test_case.clave_que_no_existe", "Clave que no existe");
+		// save to disk
+		database.save();
+		// load from disk
+		database.load();
+		// is the translation still there?
+		TestCase.assertEquals("Clave que no existe" , database.getTranslation("es", "test_case.clave_que_no_existe"));
+		
+		// remove the translation again and save to disk
+		database.removeTranslation("es", "test_case.clave_que_no_existe");
+		TestCase.assertEquals(null , database.getTranslation("es", "test_case.clave_que_no_existe"));
+		TestCase.assertEquals("", database.getTranslation("es", "prueba"));
+		database.save();
+	}
+
+	public void testKeys() {
+		ConfigOptions config = loadConfig();
+		Keys keys = new Keys(config);
+		keys.load();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/config.xml	(revision 42196)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<config>
+	<!-- Aquí especificamos algunas variables de configuración -->
+	<!-- En este fichero se muestran todas las opciones posibles, en sus valores por defecto -->
+
+	<!-- Nombre base por defecto de los ficheros con las traducciones. En nuestro caso suele ser "text",
+		de forma que los ficheros toman nombres como "text.properties", "text_en.properties". Nótese
+		que sólo es el nombre por defecto. Cada proyecto puede especificar un baseName distinto -->
+	<variable name="basename" value="text" />
+
+	<!-- Directorio base. Las rutas relativas especificadas en otras variables (databaseDir, directorios
+		de proyecto) tomarán este directorio como directorio base.  Por defecto es el directorio
+		desde el que se llama a la aplicación -->
+	<variable name="basedir" value="test-data" />
+
+	<!-- Lista de idiomas que se tendrán en cuenta  -->
+	<variable name="languages" value="ca;cs;de;en;es;eu;fr;gl;it;pt" />
+	
+	<!-- El directorio que contendrá la base de datos de traducciones por idioma. Por defecto es el
+		directorio "database", relativo al directorio especificado en la variable "basedir".  -->
+	<variable name="databaseDir" value="database" />
+	
+		<!-- El directorio por defecto que contendrá los property files que almacenan las claves de cada
+	 proyecto". Esto se usa en los proyectos que no especifican un atributo "propertyDir". Si el
+	 directorio no es absoluto, entonces es relativo al directorio de cada proyecto. -->
+	<variable name="defaultPropertyDir" value="config" />
+	
+	<variable name="sourceKeys" value="sources" />
+</config>
+<projects>
+	<!-- Los proyectos que se van a leer. Es necesario especificar un directorio (relativo o absoluto),
+		y opcionalmente se puede incluir un atributo "basename" para especificar un nombre base
+		distinto del nombre base por defecto -->
+	<!-- The projects which are going to be read. An absolute or relative directory name must be specified,
+		in which the property files are located. An optional "basename" attribute is also accepted,
+		to override the default basename -->
+	<project dir="src/appgvSIG" basename="otro"  sourceKeys="sources" propertyDir="config" />
+	<project dir="src/_fwAndami" />
+</projects>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/ConfigOptions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/ConfigOptions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/ConfigOptions.java	(revision 42196)
@@ -0,0 +1,424 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+public class ConfigOptions {
+	// Default values
+	public String defaultBaseName = "text";
+	public String defaultBaseDir = ".";
+	public String databaseDir = "database";
+	private String configFileName = "config.xml";
+	public String[] languages;
+	public ArrayList projects = new ArrayList();
+	private String defaultLangList="ca;cs;de;en;es;eu;fr;gl;it;pt";
+	public String sourceKeys = "sources";
+	private String defaultPropertyDir = "config";
+	public String[] outputLanguages={"en", "es"};
+	public String outputDir="output";
+	public String inputDir="input";
+	public String[] defaultSrcDirs={"src"};
+	
+	
+	/**
+	 * The character encoding of the Java source files, used to search keys in the sources.
+	 */
+	public String sourcesEncoding = "ISO8859_1";
+	/**
+	 * The character encoding of the generated output files for missing keys.
+	 */
+	public String outputEncoding = "UTF8";
+	
+	/**
+	 * Creates a new ConfigOptions object.
+	 */
+	public ConfigOptions() {
+		// Now we transform all directories to absolute canonical paths, so
+		// that the are easier to manage afterwards.
+		// It's also done at the end of parseVars method, but we must also do
+		// it here, because parseVars() might not get executed.
+		try {
+			this.defaultBaseDir = getAbsolutePath(".", this.defaultBaseDir);
+			this.databaseDir = getAbsolutePath(this.defaultBaseDir, this.databaseDir);
+			this.outputDir = getAbsolutePath(this.defaultBaseDir, this.outputDir);
+			this.inputDir = getAbsolutePath(this.defaultBaseDir, this.inputDir);
+			
+			/*
+			 * 
+			 File baseDirFile = new File(this.defaultBaseDir);
+			this.defaultBaseDir = baseDirFile.getCanonicalPath();
+			File databaseDirFile = new File(this.databaseDir);
+			if (databaseDirFile.isAbsolute()) {
+				this.databaseDir = databaseDirFile.getCanonicalPath();
+			}
+			else {
+				this.databaseDir = (new File(this.defaultBaseDir+File.separator+this.databaseDir)).getCanonicalPath();
+			}
+			File outputDirFile = new File(this.outputDir);
+			if (outputDirFile.isAbsolute()) {
+				this.outputDir = outputDirFile.getCanonicalPath();
+			}
+			else {
+				this.outputDir = (new File(this.defaultBaseDir+File.separator+this.outputDir)).getCanonicalPath();
+			}
+			File inputDirFile = new File(this.inputDir);
+			if (inputDirFile.isAbsolute()) {
+				this.inputDir = inputDirFile.getCanonicalPath();
+			}
+			else {
+				this.inputDir = (new File(this.defaultBaseDir+File.separator+this.inputDir)).getCanonicalPath();
+			}
+			*/
+		} catch (IOException e) {
+			System.err.println("Error accediendo a los directorios de las traducciones: "+e.getLocalizedMessage());
+		}
+	}
+	
+	/**
+	 *  Creates a new ConfigOptions object, defining the config file to use.
+	 *  
+	 * @param configFileName The file name of the config file to use.
+	 */
+	public ConfigOptions(String configFileName) {
+		this.configFileName = configFileName;
+		
+		// Now we transform all directories to absolute canonical paths, so
+		// that the are easier to manage afterwards.
+		// It's also done at the end of parseVars method, but we must also do
+		// it here, because parseVars() might not get executed.
+		try {
+			this.defaultBaseDir = getAbsolutePath(".", this.defaultBaseDir);
+			this.databaseDir = getAbsolutePath(this.defaultBaseDir, this.databaseDir);
+			this.outputDir = getAbsolutePath(this.defaultBaseDir, this.outputDir);
+			this.inputDir = getAbsolutePath(this.defaultBaseDir, this.inputDir);
+			
+			/*File baseDirFile = new File(this.defaultBaseDir);
+			this.defaultBaseDir = baseDirFile.getCanonicalPath();
+			File databaseDirFile = new File(this.databaseDir);
+			if (databaseDirFile.isAbsolute()) {
+				this.databaseDir = databaseDirFile.getCanonicalPath();
+			}
+			else {
+				this.databaseDir = (new File(this.defaultBaseDir+File.separator+this.databaseDir)).getCanonicalPath();
+			}
+			File outputDirFile = new File(this.outputDir);
+			if (outputDirFile.isAbsolute()) {
+				this.outputDir = outputDirFile.getCanonicalPath();
+			}
+			else {
+				this.outputDir = (new File(this.defaultBaseDir+File.separator+this.outputDir)).getCanonicalPath();
+			}
+			File inputDirFile = new File(this.inputDir);
+			if (inputDirFile.isAbsolute()) {
+				this.inputDir = inputDirFile.getCanonicalPath();
+			}
+			else {
+				this.inputDir = (new File(this.defaultBaseDir+File.separator+this.inputDir)).getCanonicalPath();
+			}*/
+		} catch (IOException e) {
+			System.err.println("Error accediendo a los directorios de las traducciones: "+e.getLocalizedMessage());
+		}
+	}
+	
+	/**
+	 * Sets the name of the config file to use.
+	 * 
+	 * @param configFileName
+	 */
+	public void setConfigFile(String configFileName) {
+		this.configFileName = configFileName;
+	}
+	
+	/**
+	 * Gets the name of the config file in use.
+	 * 
+	 * @return The name of the config file in use.
+	 */
+	public String getConfigFile() {
+		return configFileName;
+	}
+	
+	/**
+	 *  Loads the config parameters and the projects to consider from the XML
+	 * config file */
+	public boolean load() {
+		KXmlParser parser = new KXmlParser();
+		
+		// we use null encoding, in this way kxml2 tries to detect the encoding
+		try {
+			parser.setInput(new FileInputStream(configFileName), null);
+		} catch (FileNotFoundException e1) {
+			System.err.println(e1.getLocalizedMessage());
+			return false;
+		} catch (XmlPullParserException e1) {
+			// No podemos leer el fichero de configuraci�n. Usamos valores por defecto
+			System.err.println("Aviso: no se pudo leer correctamente el fichero de configuraci�n. Se usar�n los valores por defecto.");
+			return false;
+		}
+		
+		try {
+			for (parser.next(); parser.getEventType()!=KXmlParser.END_DOCUMENT; parser.next()) {
+				// este bucle externo recorre las etiquetas de primer y segundo nivel
+				if (parser.getEventType()==KXmlParser.START_TAG) {
+					if (parser.getName().equals("config")) {
+						parseVars(parser);
+					}
+					else if (parser.getName().equals("projects")) {
+						parseProjects(parser);
+					}
+				}
+			}	
+		} catch (XmlPullParserException e1) {
+			e1.getLocalizedMessage();
+		} catch (IOException e1) {
+			e1.getLocalizedMessage();
+		}
+		
+		File outputDirFile = new File(outputDir);
+		outputDirFile.mkdirs();
+		File databaseDirFile = new File(databaseDir);
+		databaseDirFile.mkdirs();
+		return true;
+	}
+
+	private void parseVars(KXmlParser parser) throws XmlPullParserException, IOException {
+		// recorremos todas las etiquetas 'variable' dentro de config
+		int state;
+		String name, value;
+		
+		for (state = parser.next(); state!=KXmlParser.END_TAG || !parser.getName().equals("config") ; state=parser.next()) {
+			if (state==KXmlParser.START_TAG) {
+				if (parser.getName().equals("variable")) {
+					name = parser.getAttributeValue(null, "name");
+					value = parser.getAttributeValue(null, "value");
+					if (name!=null && value!=null) {
+						value = parser.getAttributeValue(null, "value");
+						if (parser.getAttributeValue(null, "name").equals("basename")) {
+							defaultBaseName = parser.getAttributeValue(null, "value");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("basedir")) {
+							defaultBaseDir = parser.getAttributeValue(null, "value");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("databaseDir")) {
+							databaseDir = parser.getAttributeValue(null, "value");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("defaultPropertyDir")) {
+							defaultPropertyDir = parser.getAttributeValue(null, "value");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("outputDir")) {
+							outputDir = parser.getAttributeValue(null, "value");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("inputDir")) {
+							inputDir = parser.getAttributeValue(null, "value");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("sourceKeys")) {
+							sourceKeys = parser.getAttributeValue(null, "value");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("srcDirs")) {
+							String srcDirs = parser.getAttributeValue(null, "value");
+							this.defaultSrcDirs = srcDirs.split(";");
+						}
+						else if (parser.getAttributeValue(null, "name").equals("languages")) {
+							languages = parser.getAttributeValue(null, "value").split(";");
+							if (languages.length==0) {
+								System.err.println("Aviso: No se definieron idiomas a considerar. Se usar� la lista de idiomas\n por defecto: "+defaultLangList);
+								languages = defaultLangList.split(";");
+							}
+						}
+					}
+					else {
+						if (name==null)
+							System.err.println("Error leyendo el fichero de configuraci�n. No se encontr� el atributo 'name'\nrequerido en la etiqueta <variable>. La etiqueta ser� ignorada.");
+						if (value==null)
+							System.err.println("Error leyendo el fichero de configuraci�n. No se encontr� el atributo 'value'\nrequerido en la etiqueta <variable>. La etiqueta ser� ignorada.");
+					}
+				}
+				else {
+					System.err.println("Aviso: se ignor� una etiqueta desconocida o inesperada: " + parser.getName());
+				}
+			}
+		}
+		
+		// Now we transform all directories to absolute canonical paths, so
+		// that they are easier to manage afterwards.
+		try {
+			this.defaultBaseDir = getAbsolutePath(".", this.defaultBaseDir);
+			this.databaseDir = getAbsolutePath(this.defaultBaseDir, this.databaseDir);
+			this.outputDir = getAbsolutePath(this.defaultBaseDir, this.outputDir);
+			this.inputDir = getAbsolutePath(this.defaultBaseDir, this.inputDir);
+			/**
+			File baseDirFile = new File(this.defaultBaseDir);
+			this.defaultBaseDir = baseDirFile.getCanonicalPath();
+			System.out.println(this.defaultBaseDir);
+			File databaseDirFile = new File(this.databaseDir);
+			if (databaseDirFile.isAbsolute()) {
+				this.databaseDir = databaseDirFile.getCanonicalPath();
+			}
+			else {
+				this.databaseDir = (new File(this.defaultBaseDir+File.separator+this.databaseDir)).getCanonicalPath();
+			}
+			File outputDirFile = new File(this.outputDir);
+			if (outputDirFile.isAbsolute()) {
+				this.outputDir = outputDirFile.getCanonicalPath();
+			}
+			else {
+				this.outputDir = (new File(this.defaultBaseDir+File.separator+this.outputDir)).getCanonicalPath();
+			}
+			File inputDirFile = new File(this.inputDir);
+			if (inputDirFile.isAbsolute()) {
+				this.inputDir = inputDirFile.getCanonicalPath();
+			}
+			else {
+				this.inputDir = (new File(this.defaultBaseDir+File.separator+this.inputDir)).getCanonicalPath();
+			}
+			*/
+		} catch (IOException e) {
+			System.err.println("Error accediendo a los directorios de las traducciones: "+e.getLocalizedMessage());
+		}
+	}
+	
+	/**
+	 * Parse the lines containing <project /> tags (between <projects> and </projects>).
+	 * 
+	 * @param parser The KXmlParser, pointing to the next <project /> tag (if any)
+	 * @throws XmlPullParserException
+	 * @throws IOException
+	 */
+	private void parseProjects(KXmlParser parser) throws XmlPullParserException, IOException {
+		// recorremos todos los proyectos dentro de 'projects'
+		int state;
+		String dir;
+		File dirFile;
+		Project project;
+		
+		for (state = parser.next(); state!=KXmlParser.END_TAG || !parser.getName().equals("projects") ; state=parser.next()) {
+			if (state==KXmlParser.START_TAG) {
+				if (parser.getName().equals("project")) {
+					if (parser.getAttributeValue(null, "dir")!=null) {
+						dir = parser.getAttributeValue(null,  "dir");
+						if (dir!=null) {
+							// we transform it to absolute canonical paths, so
+							// that it is easier to manage afterwards.
+							dirFile = new File(dir);
+							try {
+								if (dirFile.isAbsolute()) {
+									dir = dirFile.getCanonicalPath();
+								}
+								else {
+									dir = new File(this.defaultBaseDir+File.separator+dir).getCanonicalPath();
+								}
+							} catch (IOException e) {
+								System.err.println("Error accediendo a los directorios de las traducciones: "+e.getLocalizedMessage());
+							}
+							project = new Project();
+							project.dir = dir;
+							project.basename = parser.getAttributeValue(null, "basename");
+							if (project.basename==null)
+								project.basename = this.defaultBaseName;
+							
+							project.propertyDir = parser.getAttributeValue(null, "propertyDir");
+							if (project.propertyDir==null) {
+								project.propertyDir = this.defaultPropertyDir;
+							}
+							// we transform it to absolute canonical paths, so
+							// that it is easier to manage afterwards.
+							File propDirFile = new File(project.propertyDir);
+							try {
+								if (propDirFile.isAbsolute()) {
+									project.propertyDir = propDirFile.getCanonicalPath();
+								}
+								else {
+									project.propertyDir = new File(dir+File.separator+project.propertyDir).getCanonicalPath();
+								}
+							} catch (IOException e) {
+								System.err.println("Error accediendo a los directorios de las traducciones: "+e.getLocalizedMessage());
+							}
+
+							String srcDirs = parser.getAttributeValue(null, "srcDirs");
+							if (srcDirs!=null) {
+								project.srcDirs = srcDirs.split(";");
+							}
+							else {
+								project.srcDirs = this.defaultSrcDirs;
+							}
+
+							project.sourceKeys = parser.getAttributeValue(null, "sourceKeys");
+							if (project.sourceKeys==null)
+								project.sourceKeys = this.sourceKeys;
+							projects.add(project);
+						}
+						else
+							System.err.println("Error leyendo el fichero de configuraci�n. No se encontr� el atributo 'dir'\nrequerido en la etiqueta <project>. La etiqueta ser� ignorada.");
+					}
+				}
+				else {
+					System.err.println("Aviso: se ignorar� una etiqueta desconocida o inesperada: " + parser.getName());
+				}
+			}
+		}
+
+	}
+	
+	public void setLanguages(String[] languages) {
+		this.languages = languages; 
+	}
+	
+	public void setProjects(ArrayList projectList) {
+		this.projects = projectList;
+	}
+	
+	/**
+	 * Calculates the canonical path for the given path.
+	 * If the given path is relative, it is calculated from
+	 * the given baseDir.
+	 * The 'path' parameter uses the '/' character to as path
+	 * separator. The returned value uses the default system
+	 * separator as path separator.  
+	 * 
+	 * @param baseDir
+	 * @param path
+	 * @return
+	 * @throws IOException 
+	 */
+	public static String getAbsolutePath(String baseDir, String path) throws IOException {
+		if ('/'!=File.separatorChar)
+			path = path.replace('/', File.separatorChar);
+		File pathFile = new File(path);
+		if (pathFile.isAbsolute())
+			path = pathFile.getCanonicalPath();
+		else {
+			File newFile = new File(baseDir+File.separator+path);
+			path = newFile.getAbsolutePath();
+		}
+		return path;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/ConfigOptions.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/OrderedProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/OrderedProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/OrderedProperties.java	(revision 42196)
@@ -0,0 +1,705 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.i18n.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.PropertyResourceBundle;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.Map.Entry;
+
+/**
+* A set of persistent properties, which can be saved or loaded from a stream.
+* A property list may also contain defaults, searched if the main list
+* does not contain a property for a given key.
+*
+* An example of a properties file for the german language is given
+* here.  This extends the example given in ListResourceBundle.
+* Create a file MyResource_de.properties with the following contents
+* and put it in the CLASSPATH.  (The character
+* <code>\</code><code>u00e4</code> is the german umlaut)
+*
+* 
+<pre>s1=3
+s2=MeineDisk
+s3=3. M\<code></code>u00e4rz 96
+s4=Die Diskette ''{1}'' enth\<code></code>u00e4lt {0} in {2}.
+s5=0
+s6=keine Dateien
+s7=1
+s8=eine Datei
+s9=2
+s10={0,number} Dateien
+s11=Das Formatieren schlug fehl mit folgender Exception: {0}
+s12=FEHLER
+s13=Ergebnis
+s14=Dialog
+s15=Auswahlkriterium
+s16=1,3</pre>
+*
+* <p>Although this is a sub class of a hash table, you should never
+* insert anything other than strings to this property, or several
+* methods, that need string keys and values, will fail.  To ensure
+* this, you should use the <code>get/setProperty</code> method instead
+* of <code>get/put</code>.
+*
+* Properties are saved in the specified encoding. If no encoding is
+* specified, then the ISO 8859-1 encoding is used, with Unicode escapes with
+* a single <code>u</code> for any character which cannot be represented.
+*
+* @author Jochen Hoenicke
+* @author Eric Blake (ebb9@email.byu.edu)
+* @author Cesar Martinez Izquierdo (cesar.martinez@iver.es)
+* @see PropertyResourceBundle
+* @status updated to 1.4
+*/
+public class OrderedProperties extends TreeMap
+{
+	
+/**
+* The property list that contains default values for any keys not
+* in this property list.
+*
+* @serial the default properties
+*/
+protected OrderedProperties defaults;
+
+/**
+* Compatible with JDK 1.0+.
+*/
+private static final long serialVersionUID = -5087876565919950510L;
+
+/**
+* Creates a new empty property list with no default values.
+*/
+public OrderedProperties()
+{
+	super(new StringComparator());
+}
+
+/**
+* Create a new empty property list with the specified default values.
+*
+* @param defaults a Properties object containing the default values
+*/
+public OrderedProperties(OrderedProperties defaults)
+{
+	super(new StringComparator());
+	this.defaults = defaults;
+}
+
+/**
+* Adds the given key/value pair to this properties.  This calls
+* the hashtable method put.
+*
+* @param key the key for this property
+* @param value the value for this property
+* @return The old value for the given key
+* @see #getProperty(String)
+* @since 1.2
+*/
+public Object setProperty(String key, String value)
+{
+ return put(key, value);
+}
+
+/**
+* Reads a property list from an input stream.  The stream should
+* have the following format: <br>
+*
+* An empty line or a line starting with <code>#</code> or
+* <code>!</code> is ignored.  An backslash (<code>\</code>) at the
+* end of the line makes the line continueing on the next line
+* (but make sure there is no whitespace after the backslash).
+* Otherwise, each line describes a key/value pair. <br>
+*
+* The chars up to the first whitespace, = or : are the key.  You
+* can include these caracters in the key, if you precede them with
+* a backslash (<code>\</code>). The key is followed by optional
+* whitespaces, optionally one <code>=</code> or <code>:</code>,
+* and optionally some more whitespaces.  The rest of the line is
+* the resource belonging to the key. <br>
+*
+* Escape sequences <code>\t, \n, \r, \\, \", \', \!, \#, \ </code>(a
+* space), and unicode characters with the
+* <code>\\u</code><em>xxxx</em> notation are detected, and
+* converted to the corresponding single character. <br>
+*
+* 
+<pre># This is a comment
+key     = value
+k\:5      \ a string starting with space and ending with newline\n
+# This is a multiline specification; note that the value contains
+# no white space.
+weekdays: Sunday,Monday,Tuesday,Wednesday,\\
+       Thursday,Friday,Saturday
+# The safest way to include a space at the end of a value:
+label   = Name:\\u0020</pre>
+*
+* @param inStream the input stream
+* @throws IOException if an error occurred when reading the input
+* @throws NullPointerException if in is null
+*/
+public void load(InputStream inStream) throws IOException
+{
+ // The spec says that the file must be encoded using ISO-8859-1.
+ BufferedReader reader =
+   new BufferedReader(new InputStreamReader(inStream, "ISO-8859-1"));
+ String line;
+
+ while ((line = reader.readLine()) != null)
+   {
+     char c = 0;
+     int pos = 0;
+	// Leading whitespaces must be deleted first.
+     while (pos < line.length()
+            && Character.isWhitespace(c = line.charAt(pos)))
+       pos++;
+
+     // If empty line or begins with a comment character, skip this line.
+     if ((line.length() - pos) == 0
+	    || line.charAt(pos) == '#' || line.charAt(pos) == '!')
+       continue;
+
+     // The characters up to the next Whitespace, ':', or '='
+     // describe the key.  But look for escape sequences.
+	// Try to short-circuit when there is no escape char.
+	int start = pos;
+	boolean needsEscape = line.indexOf('\\', pos) != -1;
+     StringBuffer key = needsEscape ? new StringBuffer() : null;
+     while (pos < line.length()
+            && ! Character.isWhitespace(c = line.charAt(pos++))
+            && c != '=' && c != ':')
+       {
+         if (needsEscape && c == '\\')
+           {
+             if (pos == line.length())
+               {
+                 // The line continues on the next line.  If there
+                 // is no next line, just treat it as a key with an
+                 // empty value.
+                 line = reader.readLine();
+		    if (line == null)
+		      line = "";
+                 pos = 0;
+                 while (pos < line.length()
+                        && Character.isWhitespace(c = line.charAt(pos)))
+                   pos++;
+               }
+             else
+               {
+                 c = line.charAt(pos++);
+                 switch (c)
+                   {
+                   case 'n':
+                     key.append('\n');
+                     break;
+                   case 't':
+                     key.append('\t');
+                     break;
+                   case 'r':
+                     key.append('\r');
+                     break;
+                   case 'u':
+                     if (pos + 4 <= line.length())
+                       {
+                         char uni = (char) Integer.parseInt
+                           (line.substring(pos, pos + 4), 16);
+                         key.append(uni);
+                         pos += 4;
+                       }        // else throw exception?
+                     break;
+                   default:
+                     key.append(c);
+                     break;
+                   }
+               }
+           }
+         else if (needsEscape)
+           key.append(c);
+       }
+
+     boolean isDelim = (c == ':' || c == '=');
+
+	String keyString;
+	if (needsEscape)
+	  keyString = key.toString();
+	else if (isDelim || Character.isWhitespace(c))
+	  keyString = line.substring(start, pos - 1);
+	else
+	  keyString = line.substring(start, pos);
+
+     while (pos < line.length()
+            && Character.isWhitespace(c = line.charAt(pos)))
+       pos++;
+
+     if (! isDelim && (c == ':' || c == '='))
+       {
+         pos++;
+         while (pos < line.length()
+                && Character.isWhitespace(c = line.charAt(pos)))
+           pos++;
+       }
+
+	// Short-circuit if no escape chars found.
+	if (!needsEscape)
+	  {
+	    put(keyString, line.substring(pos));
+	    continue;
+	  }
+
+	// Escape char found so iterate through the rest of the line.
+     StringBuffer element = new StringBuffer(line.length() - pos);
+     while (pos < line.length())
+       {
+         c = line.charAt(pos++);
+         if (c == '\\')
+           {
+             if (pos == line.length())
+               {
+                 // The line continues on the next line.
+                 line = reader.readLine();
+
+		    // We might have seen a backslash at the end of
+		    // the file.  The JDK ignores the backslash in
+		    // this case, so we follow for compatibility.
+		    if (line == null)
+		      break;
+
+                 pos = 0;
+                 while (pos < line.length()
+                        && Character.isWhitespace(c = line.charAt(pos)))
+                   pos++;
+                 element.ensureCapacity(line.length() - pos +
+                                        element.length());
+               }
+             else
+               {
+                 c = line.charAt(pos++);
+                 switch (c)
+                   {
+                   case 'n':
+                     element.append('\n');
+                     break;
+                   case 't':
+                     element.append('\t');
+                     break;
+                   case 'r':
+                     element.append('\r');
+                     break;
+                   case 'u':
+                     if (pos + 4 <= line.length())
+                       {
+                         char uni = (char) Integer.parseInt
+                           (line.substring(pos, pos + 4), 16);
+                         element.append(uni);
+                         pos += 4;
+                       }        // else throw exception?
+                     break;
+                   default:
+                     element.append(c);
+                     break;
+                   }
+               }
+           }
+         else
+           element.append(c);
+       }
+     put(keyString, element.toString());
+   }
+}
+
+/**
+* Reads a property list from an input stream, using the
+* provided encoding. The provided stream should be
+* correctly encoded as specified, otherwise an IOException
+* error will be thrown. No escape sequences are accepted
+* to represent any character, and thus this method has some
+* limitations and the
+* format of the accepted property files is slightly
+* different from
+* the standard Java property files.
+* 
+* The main differences are:
+* <ul><li>whitespaces, = or : cannot be present in
+* the key.</li>
+* <li>each pair key/value must be contained in a single line</li>
+* </ul>
+* 
+* The stream should have the following format: <br>
+*
+* An empty line or a line starting with <code>#</code> or
+* <code>!</code> is ignored.
+* Otherwise, each line describes a key/value pair. <br>
+*
+* The chars up to the first whitespace, = or : are the key.  You
+* cannot include these caracters in the key. The key is followed by optional
+* whitespaces, optionally one <code>=</code> or <code>:</code>,
+* and optionally some more whitespaces.  The rest of the line is
+* the resource belonging to the key. <br>
+*
+* @param inStream the input stream
+* @throws IOException if an error occurred when reading the input
+* @throws NullPointerException if in is null
+*/
+public void load(InputStream inStream, String encoding) throws IOException {
+	BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, encoding));
+
+	String line;
+	while ((line = reader.readLine()) != null) {
+		int pos = 0;
+		// Leading whitespaces must be deleted first.
+		while (pos < line.length()
+			 && Character.isWhitespace(line.charAt(pos)))
+			pos++;
+
+     	// If empty line or begins with a comment character, skip this line.
+     	if ((line.length() - pos) == 0
+     			|| line.charAt(pos) == '#' || line.charAt(pos) == '!')
+     		continue;
+
+
+     	// do something
+     	String[] entry = line.substring(pos).split(" *[=: ] *", 2);
+     	if (entry.length==2) {
+     		put(entry[0], entry[1]);
+     	}
+     	else {
+     		put(entry[0], "");
+     	}
+	}
+}
+
+
+/**
+* Writes the key/value pairs to the given output stream, in a format
+* suitable for
+* {@link #load(InputStream, String) load(InputStream is, String encoding)}.
+* Note that this method does not use escape sequences to represent
+* characters outside the encoding range, charset-dependent
+* substitution sequence will
+* be generated if such character is present in the stream.
+* Moreover, because there is no escape sequences, the newline (\n)
+* and carriage return (\r) characters must not be used (the 
+* resulting property file will be incorrect). Because of the
+* same reason, whitespaces, :, =, ! and # must not be used in the
+* key<br>
+*
+* If header is not null, this method writes a comment containing
+* the header as first line to the stream.  The next line (or first
+* line if header is null) contains a comment with the current date.
+* Afterwards the key/value pairs are written to the stream in the
+* following format.<br>
+*
+* Each line has the form <code>key = value</code>.
+*
+* Following the listing, the output stream is flushed but left open.
+*
+* @param out the output stream
+* @param header the header written in the first line, may be null
+* @throws ClassCastException if this property contains any key or
+*         value that isn't a string
+* @throws IOException if writing to the stream fails
+* @throws NullPointerException if out is null
+* @since 1.2
+*/
+public void store(OutputStream out, String header, String encoding) throws IOException {
+	PrintWriter writer
+	   = new PrintWriter(new OutputStreamWriter(out, encoding));
+	if (header != null)
+		writer.println("#" + header);
+	writer.println ("#" + Calendar.getInstance ().getTime ());
+
+	Iterator iter = entrySet ().iterator ();
+	int i = size ();
+	while (--i >= 0) {
+		Entry entry = (Entry) iter.next ();
+	    writer.println (entry.getKey()+"="+entry.getValue());
+	}
+
+	writer.flush ();
+}
+
+
+
+/**
+* Writes the key/value pairs to the given output stream, in a format
+* suitable for {@link #load(InputStream) load(InputStream)}.<br>
+*
+* If header is not null, this method writes a comment containing
+* the header as first line to the stream.  The next line (or first
+* line if header is null) contains a comment with the current date.
+* Afterwards the key/value pairs are written to the stream in the
+* following format.<br>
+*
+* Each line has the form <code>key = value</code>.  Newlines,
+* Returns and tabs are written as <code>\n,\t,\r</code> resp.
+* The characters <code>\, !, #, =</code> and <code>:</code> are
+* preceeded by a backslash.  Spaces are preceded with a backslash,
+* if and only if they are at the beginning of the key.  Characters
+* that are not in the ascii range 33 to 127 are written in the
+* <code>\</code><code>u</code>xxxx Form.<br>
+*
+* Following the listing, the output stream is flushed but left open.
+*
+* @param out the output stream
+* @param header the header written in the first line, may be null
+* @throws ClassCastException if this property contains any key or
+*         value that isn't a string
+* @throws IOException if writing to the stream fails
+* @throws NullPointerException if out is null
+* @since 1.2
+*/
+public void store(OutputStream out, String header) throws IOException
+{
+ // The spec says that the file must be encoded using ISO-8859-1.
+ PrintWriter writer
+   = new PrintWriter(new OutputStreamWriter(out, "ISO-8859-1"));
+ if (header != null)
+   writer.println("#" + header);
+ writer.println ("#" + Calendar.getInstance ().getTime ());
+ 
+ Iterator iter = entrySet ().iterator ();
+ int i = size ();
+ StringBuffer s = new StringBuffer (); // Reuse the same buffer.
+ while (--i >= 0)
+   {
+     Entry entry = (Entry) iter.next ();
+     formatForOutput ((String) entry.getKey (), s, true);
+     s.append ('=');
+     formatForOutput ((String) entry.getValue (), s, false);
+     writer.println (s);
+   }
+
+ writer.flush ();
+}
+
+/**
+* Gets the property with the specified key in this property list.
+* If the key is not found, the default property list is searched.
+* If the property is not found in the default, null is returned.
+*
+* @param key The key for this property
+* @return the value for the given key, or null if not found
+* @throws ClassCastException if this property contains any key or
+*         value that isn't a string
+* @see #defaults
+* @see #setProperty(String, String)
+* @see #getProperty(String, String)
+*/
+public String getProperty(String key)
+{
+ OrderedProperties prop = this;
+ // Eliminate tail recursion.
+ do
+   {
+     String value = (String) prop.get(key);
+     if (value != null)
+       return value;
+     prop = prop.defaults;
+   }
+ while (prop != null);
+ return null;
+}
+
+/**
+* Gets the property with the specified key in this property list.  If
+* the key is not found, the default property list is searched.  If the
+* property is not found in the default, the specified defaultValue is
+* returned.
+*
+* @param key The key for this property
+* @param defaultValue A default value
+* @return The value for the given key
+* @throws ClassCastException if this property contains any key or
+*         value that isn't a string
+* @see #defaults
+* @see #setProperty(String, String)
+*/
+public String getProperty(String key, String defaultValue)
+{
+ String prop = getProperty(key);
+ if (prop == null)
+   prop = defaultValue;
+ return prop;
+}
+
+/**
+* Returns an enumeration of all keys in this property list, including
+* the keys in the default property list.
+*
+* @return an Enumeration of all defined keys
+*/
+public Enumeration propertyNames()
+{
+ // We make a new Set that holds all the keys, then return an enumeration
+ // for that. This prevents modifications from ruining the enumeration,
+ // as well as ignoring duplicates.
+ OrderedProperties prop = this;
+ Set s = new HashSet();
+ // Eliminate tail recursion.
+ do
+   {
+     s.addAll(prop.keySet());
+     prop = prop.defaults;
+   }
+ while (prop != null);
+ return Collections.enumeration(s);
+}
+
+/**
+* Prints the key/value pairs to the given print stream.  This is 
+* mainly useful for debugging purposes.
+*
+* @param out the print stream, where the key/value pairs are written to
+* @throws ClassCastException if this property contains a key or a
+*         value that isn't a string
+* @see #list(PrintWriter)
+*/
+public void list(PrintStream out)
+{
+ PrintWriter writer = new PrintWriter (out);
+ list (writer);
+}
+
+/**
+* Prints the key/value pairs to the given print writer.  This is
+* mainly useful for debugging purposes.
+*
+* @param out the print writer where the key/value pairs are written to
+* @throws ClassCastException if this property contains a key or a
+*         value that isn't a string
+* @see #list(PrintStream)
+* @since 1.1
+*/
+public void list(PrintWriter out)
+{
+ out.println ("-- listing properties --");
+
+ Iterator iter = entrySet ().iterator ();
+ int i = size ();
+ while (--i >= 0)
+   {
+     Entry entry = (Entry) iter.next ();
+     out.print ((String) entry.getKey () + "=");
+
+     // JDK 1.3/1.4 restrict the printed value, but not the key,
+     // to 40 characters, including the truncating ellipsis.
+     String s = (String ) entry.getValue ();
+     if (s != null && s.length () > 40)
+       out.println (s.substring (0, 37) + "...");
+     else
+       out.println (s);
+   }
+ out.flush ();
+}
+
+/**
+* Formats a key or value for output in a properties file.
+* See store for a description of the format.
+*
+* @param str the string to format
+* @param buffer the buffer to add it to
+* @param key true if all ' ' must be escaped for the key, false if only
+*        leading spaces must be escaped for the value
+* @see #store(OutputStream, String)
+*/
+private void formatForOutput(String str, StringBuffer buffer, boolean key)
+{
+ if (key)
+   {
+     buffer.setLength(0);
+     buffer.ensureCapacity(str.length());
+   }
+ else
+   buffer.ensureCapacity(buffer.length() + str.length());
+ boolean head = true;
+ int size = str.length();
+ for (int i = 0; i < size; i++)
+   {
+     char c = str.charAt(i);
+     switch (c)
+       {
+       case '\n':
+         buffer.append("\\n");
+         break;
+       case '\r':
+         buffer.append("\\r");
+         break;
+       case '\t':
+         buffer.append("\\t");
+         break;
+       case ' ':
+         buffer.append(head ? "\\ " : " ");
+         break;
+       case '\\':
+       case '!':
+       case '#':
+       case '=':
+       case ':':
+         buffer.append('\\').append(c);
+         break;
+       default:
+         if (c < ' ' || c > '~')
+           {
+             String hex = Integer.toHexString(c);
+             buffer.append("\\u0000".substring(0, 6 - hex.length()));
+             buffer.append(hex);
+           }
+         else
+           buffer.append(c);
+       }
+     if (c != ' ')
+       head = key;
+   }
+}
+
+} // class OrderedProperties
+
+
+class StringComparator implements Comparator {
+	 public int compare(Object o1, Object o2) {
+		 String s1 = o1.toString();
+		 String s2 = o2.toString();
+
+		 if (s1.compareToIgnoreCase(s2)!=0) // we want case insensitive ordenation, but we still need to differenciate 'OK' from 'Ok'
+			 return s1.compareToIgnoreCase(s2);
+		 else
+			 return -s1.compareTo(s2); // we want lower case before upper case
+	 }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/OrderedProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/TranslationDatabase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/TranslationDatabase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/TranslationDatabase.java	(revision 42196)
@@ -0,0 +1,194 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @author cesar
+ *
+ */
+public class TranslationDatabase {
+	
+	public TranslationDatabase(ConfigOptions config){
+		this.config = config; 
+	}
+	
+	private ConfigOptions config;
+	private HashMap dictionaries;
+	
+	public void load() {
+		// always start with an empty HashMap when loading
+		dictionaries = new HashMap();
+		String lang;
+		DoubleProperties dictionary;
+		
+		FileInputStream stream=null;
+		
+		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+			lang = config.languages[currentLang];
+			dictionary = new DoubleProperties();
+			try {
+				stream = new FileInputStream(config.databaseDir+File.separator+config.defaultBaseName+"_"+lang+".properties");
+				try {
+					dictionary.load(stream);
+				} catch (IOException e) {
+					System.err.println("Error cargando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
+				}
+			} catch (FileNotFoundException e) {
+				System.err.println("Error cargando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
+			}
+			dictionaries.put(lang, dictionary);
+		}
+	}
+	
+	public void save() {
+		String lang;
+		DoubleProperties dictionary;
+		
+		FileOutputStream stream=null;
+
+		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+			lang = config.languages[currentLang];
+			
+			dictionary = ((DoubleProperties)dictionaries.get(lang));
+			
+			try {
+				stream = new FileOutputStream(config.databaseDir+File.separator+config.defaultBaseName+"_"+lang+".properties");
+				try {
+					dictionary.store(stream, "Translations for language: " + lang);
+				} catch (IOException e) {
+					System.err.println("Error guardando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
+				}
+			} catch (FileNotFoundException e) {
+				System.err.println("Error guardando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
+			}
+		}
+	}
+	
+	public String getTranslation(String lang, String key) {
+		if (lang==null || key==null) return null;
+		
+		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
+		if (dictionary==null) return null;
+		return (String) dictionary.get(key);
+	}
+	
+	public String setTranslation(String lang, String key, String translation) {
+		if (lang==null || key==null) return null;
+
+		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
+		if (dictionary==null) return null;
+		String oldvalue = (String) dictionary.get(key);
+		dictionary.put(key, translation);
+		return oldvalue;
+	}
+	
+	/**
+	 * Removes the key from the specified dictionary, and its associated translation.
+	 * It has no effect if the key was not present in the dictionary.
+	 * 
+	 * @param lang The language from which the key should be removed.
+	 * @param key  The key to be removed.
+	 * @return The translation associated with the key, or null if the
+	 * key was not present in the dictionary. It also returns null if any of the parameters is
+	 * null, or if there was no dictionary for the specified language.
+	 */
+	public String removeTranslation(String lang, String key) {
+		if (lang==null || key==null) return null;
+
+		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
+		if (dictionary==null) return null;
+		String oldvalue = (String) dictionary.get(key);
+		dictionary.remove(key);
+		return oldvalue;
+	}
+	
+	/**
+	 * Removes the key and its associated translation from all the dictionaries.
+	 * The key will be deleted from the dictionaries in which it is present (if any).
+	 * 
+	 * @param key  The key to be removed.
+	 * @return True if the key was removed from any dictionary, or false if the key
+	 * was not present in any dictionary.
+	 * @throws NullPointerException if the key is null.
+	 */
+	public boolean removeTranslation(String key) throws NullPointerException {
+		DoubleProperties dictionary;
+		String lang;
+		boolean present=false;
+		
+		Set keys = dictionaries.keySet();
+		Iterator langIterator = keys.iterator();
+		while (langIterator.hasNext()) {
+			lang = (String) langIterator.next();
+			dictionary = (DoubleProperties) dictionaries.get(lang);
+			if (dictionary.containsKey(key)) {
+				present=true;
+				dictionary.remove(key);
+			}
+		}
+		return present;
+	}
+	
+	public boolean containsLanguage(String lang) {
+		return dictionaries.containsKey(lang);
+	}
+
+	public boolean containsKey(String lang, String key) {
+		if (lang==null || key==null) return false;
+
+		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
+		return dictionary.containsKey(key);
+	}
+	
+	public String getAssociatedKey(String lang, String value) {
+		if (lang==null || value==null) return null;
+
+		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
+		return dictionary.getAssociatedKey(value);
+	}
+	
+	public ArrayList getAssociatedKeys(String lang, String value) {
+		if (lang==null || value==null) return null;
+
+		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
+		return dictionary.getAssociatedKeys(value);
+	}
+
+	public boolean containsTranslation(String lang, String translation) {
+		if (lang==null || translation==null) return false;
+
+		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
+		return dictionary.containsValue(translation);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/TranslationDatabase.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/AddNewTranslations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/AddNewTranslations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/AddNewTranslations.java	(revision 42196)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.Enumeration;
+import java.util.Properties;
+
+/**
+ * @author cesar
+ *
+ */
+public class AddNewTranslations {
+	// The filename which stores the configuration (may be overriden by the command line parameter)
+	private String configFileName = "config.xml";
+	
+	// Object to load and store the config options
+	private ConfigOptions config;
+	
+	private TranslationDatabase database;
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		AddNewTranslations process = new AddNewTranslations();
+		
+		// load command line parameters
+		if (!process.readParameters(args)) {
+			usage();
+			System.exit(-1);
+		}
+		
+		// transfer control to the program's main loop
+		process.start();
+	}
+	
+	private void start() {
+		// load config options from the config file
+		if (!loadConfig()) {
+			System.out.println("Error leyendo el fichero de configuraci�n.");
+			usage();
+			System.exit(-1);
+		}
+		
+		loadDataBase();
+		
+		readNewTranslations();
+		
+		database.save();
+	}
+
+	/**
+	 *  Reads the command line parameters */
+	private boolean readParameters(String[] args) {
+		String configPair[];
+
+		for (int i=0; i<args.length; i++) {
+			configPair = args[i].split("=",2);
+			if ( (configPair[0].equals("-c") || configPair[0].equals("--config"))
+					&& configPair.length==2) {
+				configFileName = configPair[1];
+			}
+			else {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	private boolean loadConfig() {
+		config = new ConfigOptions(configFileName);
+		config.load();
+		return true;
+	}
+	
+	private static void usage() {
+		System.out.println("Uso: AddNewTranslations [OPCION]");
+		System.out.println("\t-c\t--config=configFile");
+	}
+	
+	private void loadDataBase() {
+		database = new TranslationDatabase(config);
+		database.load();
+	}
+	
+	private void readNewTranslations() {
+		String lang, key, value, oldValue;
+		
+		for (int i=0; i<config.languages.length; i++) {
+			lang = config.languages[i];
+			try {
+				FileInputStream fisProp = new FileInputStream(config.inputDir+File.separator+config.defaultBaseName+"_"+lang+".properties");
+				Properties prop = new Properties();
+				try {
+					prop.load(fisProp);
+					Enumeration keysEnum  = prop.keys();
+					while (keysEnum.hasMoreElements()){
+						key = (String) keysEnum.nextElement();
+						value = prop.getProperty(key);
+						if (value!=null && !value.equals("")) {
+							if (!database.containsKey(lang, key)) {
+								System.out.println("["+lang+"] Traducci�n a�adida -- "+key+"="+value);
+								database.setTranslation(lang, key, value);
+							}
+							else {
+								oldValue = database.setTranslation(lang, key, value);
+								if (!oldValue.equals(value)) {
+									System.out.println("["+lang+"] Traducci�n actualizada -- "+key+"="+value);
+									System.out.println("Valor anterior: "+database.getTranslation(lang, key));
+								}
+							}
+						}
+					}
+				} catch (IOException e) {
+					System.err.println("Error leyendo traducciones para idioma ["+lang+"]. "+e.getLocalizedMessage());
+				}
+				
+			} catch (FileNotFoundException e) {
+				try {
+					FileInputStream fis = new FileInputStream(config.inputDir+File.separator+config.defaultBaseName+"_"+lang+".properties-"+config.outputEncoding);
+					
+					BufferedReader currentFile=null;
+					try {
+						currentFile = new BufferedReader(new InputStreamReader(fis, config.outputEncoding));
+					} catch (UnsupportedEncodingException e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					}
+					
+				    String line = null;
+				    try {
+						while((line = currentFile.readLine()) != null) {
+							String[] parts = line.split("=");
+							if (parts.length == 2) {
+								key = parts[0];
+								value = parts[1];
+								if (value!=null && !value.equals("")) {
+									if (!database.containsKey(lang, key)) {
+										System.out.println("["+lang+"] Traducci�n a�adida -- "+key+"="+value);
+										database.setTranslation(lang, key, value);
+									}
+									else {
+										oldValue = database.setTranslation(lang, key, value);
+										if (!oldValue.equals(value)) {
+											System.out.println("["+lang+"] Traducci�n actualizada -- "+key+"="+value);
+											System.out.println("Valor anterior: "+database.getTranslation(lang, key));
+										}
+									}
+								}
+							}
+							else {
+								System.err.println("Error leyendo traducciones para idioma ["+lang+"].");
+								System.err.println("L�nea: "+line);
+							}
+						}
+					    currentFile.close();
+					} catch (IOException ex) {
+						System.err.println("Error leyendo traducciones para idioma ["+lang+"]. "+ex.getLocalizedMessage());
+					}
+					
+				} catch (FileNotFoundException e1) {
+					System.out.println("Aviso -- no se encontraron nuevas traducciones para el idioma ["+lang+"].");
+				}
+			}
+			
+		}
+		
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/AddNewTranslations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/config.xml	(revision 42196)
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<config>
+	<!-- Aquí especificamos algunas variables de configuración -->
+	<!-- En este fichero se muestran todas las opciones posibles, en sus valores por defecto -->
+
+	<!-- Nombre base por defecto de los ficheros con las traducciones. En nuestro caso suele ser "text",
+		de forma que los ficheros toman nombres como "text.properties", "text_en.properties". Nótese
+		que sólo es el nombre por defecto. Cada proyecto puede especificar un baseName distinto -->
+	<variable name="basename" value="text" />
+
+	<!-- Directorio base. Las rutas relativas especificadas en otras variables (databaseDir, directorios
+		de proyecto) tomarán este directorio como directorio base.  Por defecto es el directorio
+		desde el que se llama a la aplicación -->
+	<variable name="basedir" value="../" />
+
+	<!-- Lista de idiomas que se tendrán en cuenta  -->
+	<variable name="languages" value="ca;cs;de;en;es;eu;fr;gl;it;nl;pt;pt_BR;pl;ro;sr;sw;zh;en_US" />
+	<!-- El directorio que contendrá la base de datos general de traducciones por idioma. Por defecto es el
+		directorio "database", relativo al directorio especificado en la variable "basedir".  -->
+	<variable name="databaseDir" value="libInternationalization/utils-data/database" />
+	
+	<!-- El directorio por defecto que contendrá los property files que almacenan las claves de cada
+	 proyecto". Esto se usa en los proyectos que no especifican un atributo "propertyDir". Si el
+	 directorio no es absoluto, entonces es relativo al directorio de cada proyecto. -->
+	<variable name="defaultPropertyDir" value="config" />
+	
+	<!-- El directorio en el que se escribirán las cadenas para enviar a traducir. -->
+	<variable name="outputDir" value="libInternationalization/utils-data/output" />
+
+	<!-- El directorio del que se leerán las nuevas cadenas traducidas, que se van a integrar
+	a la base de datos. -->
+	<variable name="inputDir" value="libInternationalization/utils-data/input" />
+	
+	<!-- Los subdirectorios que contienen fuentes, relativos a cada directorio de
+	proyecto. Si se especifican varios subdirectorios,  deben ir separado por
+	 punto y coma (;).  -->
+	<variable name="srcDirs" value="src;config" />
+
+	
+	<!-- 	Esta variable especifica el origen de las claves. Los valores posibles son "sources" y "properties".
+	     	Con esta variable se define el conjunto de valores válidos (esto es, el conjunto de claves que
+		o bien deben estar traducidas o bien debemos enviar a traducir). El valor por defecto es "sources".
+
+              - "properties" significa que el conjunto de claves válido se determinará tomando las claves
+		presentes en el fichero .properties del idioma principal de cada proyecto. El idioma
+		principal de un proyecto se define con el atributo "mainLang" de cada proyecto (si existe),
+		o con la variable general "mainLang" en caso contrario.
+	      - "sources" significa que el conjunto de claves válido se determina buscando en el código fuente del
+		programa. Se buscarán llamadas a las funciones getText y getString y se tomarán las claves de la
+		llamada, también se buscarán las claves presentes en el config.xml de cada extensión.
+
+		Cada proyecto puede especificar un sourceKeys distinto.
+	-->
+	<variable name="sourceKeys" value="sources" />
+
+</config>
+<projects>
+	<!-- Los proyectos que se van a leer. Es necesario especificar un directorio (relativo o absoluto),
+		y opcionalmente se puede incluir un atributo "basename" para especificar un nombre base
+		distinto del nombre base por defecto -->
+	<!-- The projects which are going to be read. An absolute or relative directory name must be specified,
+		in which the property files are located. An optional "basename" attribute is also accepted,
+		to override the default basename -->
+	<project dir="appgvSIG" basename="text" sourceKeys="sources" propertyDir="config"/>
+	<project dir="_fwAndami" />
+	<project dir="extAddEventTheme" />
+	<project dir="extCAD" />
+	<project dir="extCatalogYNomenclator" />
+	<project dir="extCenterViewToPoint" />
+	<project dir="extDataLocator" />
+	<project dir="extGeoProcessing" />
+	<project dir="extGeoprocessingExtensions" />
+	<project dir="extGeoreferencing" />
+	<project dir="extJDBC" />
+	<project dir="extRasterTools" />
+	<project dir="extScripting" />
+	<project dir="extWCS" />
+	<project dir="extWFS2" />
+	<project dir="extWMS" />
+	<project dir="libCorePlugin" />
+	<project dir="libCq CMS for java" />
+<!--	<project dir="libDriverManager" /> -->
+<!--	<project dir="libDwg" /> -->
+	<!-- <project dir="libFMap" /> -->
+	<project dir="libInternationalization" />
+	<project dir="libUI" />
+	<!-- <project dir="libIverUtiles" /> -->
+	<!-- <project dir="libRemoteServices" /> -->
+	<project dir="extArcims" />
+	<project dir="libArcIMS" />
+</projects>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Project.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Project.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Project.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.util.HashMap;
+
+/**
+ * Convenience class to manage the attributes of the project tag from the config.xml
+ * file.
+ * 
+ * 
+ * @author cesar
+ *
+ */
+public class Project {
+
+	public String dir;
+	public String basename;
+	
+	/**
+	 * The directory which stores the property files of the project.
+	 */
+	public String propertyDir;
+	
+	/**
+	 * Source of the keys: whether they are loaded from the property files of
+	 * the project or they are searched inside the sources.
+	 * <ul><li>sourceKeys="sources": The keys are searched inside the Java source
+	 * files and the config.xml files from the extensions.</li>
+	 * <li>sourceKeys="properties": The keys are loaded from the property files
+	 * of each project.</li></ul> 
+	 */
+	public String sourceKeys;
+	
+	/**
+	 * Stores the associated dictionaries. Each value of the
+	 * HashMap is a Properties object, containing the translations for each
+	 * language.
+	 * 
+	 * <p>Example:</p>
+	 * Properties dictionary = (Properties)dictionaries.get("es");
+	 * 
+	 */
+	public HashMap dictionaries;
+	
+	/**
+	 * Stores the subdirectories containing sources. When searching for keys in
+	 * the source files, only these subdirectories will be searched.
+	 */
+	public String[] srcDirs;
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Project.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/DoubleProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/DoubleProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/DoubleProperties.java	(revision 42196)
@@ -0,0 +1,157 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * The DoubleProperties class represents a set of properties. It provides the
+ * same functionality as its parent class, Properties. Besides that, it also
+ * provides an efficient method to get the key associated with a value.  
+ * 
+ * @author cesar
+ *
+ */
+public class DoubleProperties extends OrderedProperties {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1738114064256800193L;
+	HashMap reverseMap = new HashMap();
+
+	public DoubleProperties() {
+		super();
+	}
+	
+
+	public DoubleProperties(OrderedProperties defaults) {
+		super(defaults);
+		Iterator keysIterator = this.keySet().iterator();
+		ArrayList keySet;
+		
+		String key, value;
+		while (keysIterator.hasNext()) {
+			key = (String) keysIterator.next();
+			value = this.getProperty(key);
+			if (reverseMap.containsKey(value)) {
+				keySet = (ArrayList) reverseMap.get(value);
+				keySet.add(key);
+			}
+			else {
+				keySet = new ArrayList();
+				keySet.add(key);
+				reverseMap.put(value, keySet);
+			}
+		}
+	}
+	
+	
+	public void load(InputStream stream) throws IOException {
+		super.load(stream);
+
+		Iterator keysIterator = this.keySet().iterator();
+		ArrayList keySet;
+		
+		String key, value;
+		while (keysIterator.hasNext()) {
+			key = (String) keysIterator.next();
+			value = this.getProperty(key);
+			if (reverseMap.containsKey(value)) {
+				keySet = (ArrayList) reverseMap.get(value);
+				keySet.add(key);
+			}
+			else {
+				keySet = new ArrayList();
+				keySet.add(key);
+				reverseMap.put(value, keySet);
+			}
+		}
+	}
+	
+	public Object setProperty(String key, String value) {
+		ArrayList keySet;
+		
+		Object returnValue = super.setProperty(key, value);
+		if (reverseMap.containsKey(value)) {
+			keySet = (ArrayList) reverseMap.get(value);
+			keySet.add(key);
+		}
+		else {
+			keySet = new ArrayList();
+			keySet.add(key);
+			reverseMap.put(value, keySet);
+		}
+		
+		return returnValue;
+	}
+	
+	/**
+	 * Gets the key associated with the provided value. If there
+	 * are several associated keys, returns one of them.
+	 * 
+	 * @param value
+	 * @return The key associated with the provided value, or null
+	 * if the value is not present in the dictionary. If there
+	 * are several associated keys, returns one of them.
+	 */
+	public String getAssociatedKey(String value) {
+		ArrayList keySet = (ArrayList) reverseMap.get(value);
+		if (keySet==null) return null;
+		return (String) keySet.get(0);
+	}
+	
+	/**
+	 * Returns the keys associated with the provided value. If there
+	 * are several associated keys, returns one of them.
+	 * 
+	 * @param value
+	 * @return An ArrayList containing the keys associated with the
+	 * provided value, or null if the value is not present in the 
+	 * dictionary.
+	 */
+	public ArrayList getAssociatedKeys(String value) {
+		return (ArrayList) reverseMap.get(value);
+	}
+	
+	public Object remove(Object key) {
+		Object value = super.remove(key);
+		if (value==null) return null;
+		ArrayList keySet = (ArrayList) reverseMap.get(value);
+		if (keySet==null) return null;
+		if (keySet.size()<=1) {
+			//if it's the last key associated wit the value, remove the
+			// value from the reverseDictionary			
+			reverseMap.remove(value);
+		}
+		else {
+			// otherwise, remove the key from the list of associated keys
+			keySet.remove(key);
+		}
+		return value;
+	}	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/DoubleProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/UpdateTrans.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/UpdateTrans.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/UpdateTrans.java	(revision 42196)
@@ -0,0 +1,484 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+/**
+ * @author cesar
+ *
+ */
+public class UpdateTrans {
+	// The filename which stores the configuration (may be overriden by the command line parameter)
+	private String configFileName = "config.xml";
+	
+	// Object to load and store the config options
+	private ConfigOptions config;
+	
+	private TranslationDatabase database;
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		UpdateTrans process = new UpdateTrans();
+		
+		// load command line parameters
+		if (!process.readParameters(args)) {
+			usage();
+			System.exit(-1);
+		}
+		
+		// transfer control to the program's main loop
+		process.start();
+	}
+	
+	private void start() {
+		// load config options from the config file
+		if (!loadConfig()) {
+			System.out.println("Error leyendo el fichero de configuraci�n.");
+			usage();
+			System.exit(-1);
+		}
+		
+		loadKeys();
+		loadDataBase();
+		
+		updateDB();
+	}
+	
+	private void updateDB(){
+		String lang, auxLang;
+		String key, value, dbValue;
+		
+		HashMap newKeys = detectNewKeys();
+		TreeMap newKeysDict;
+		HashMap removedKeys = new HashMap();
+		
+		ArrayList removedKeysDict;
+
+		/**
+		 * Process the new or changed keys
+		 */
+		for (int i=0; i<config.languages.length; i++) {
+			lang = config.languages[i];
+			File langDir = new File(config.outputDir+File.separator+lang);
+			langDir.mkdirs();
+			
+			// process the keys
+			newKeysDict = (TreeMap) newKeys.get(lang);
+			removedKeysDict = new ArrayList();
+			removedKeys.put(lang, removedKeysDict);
+			Iterator newKeysIterator = newKeysDict.keySet().iterator();
+			while (newKeysIterator.hasNext()) {
+				int numValues=0;
+				value = null;
+				key = (String) newKeysIterator.next();
+				
+				dbValue = database.getTranslation(lang, key);
+				ArrayList newKeyList = (ArrayList) newKeysDict.get(key);
+				String[] newKey;
+				boolean equal=true;
+				for (int j=0; j<newKeyList.size(); j++) {
+					newKey = (String[]) newKeyList.get(j);
+					if (!newKey[0].equals("")) {
+						if (dbValue!=null && !dbValue.equals(newKey[0]))
+							equal = false;
+						if (numValues==0) { //if there are several non-empty values, take the first one
+							value = newKey[0];
+						}
+						else if (!value.equals(newKey[0])) {
+							equal=false;
+						}
+						numValues++;	
+					}
+				}
+				if (equal==false) {
+					System.err.println("\nAtenci�n -- La clave '"+key+"' tiene diferentes valores para el idioma "  + lang + ".");
+					System.err.println("Valor en base de datos: "+key+"="+dbValue);
+					for (int j=0; j<newKeyList.size(); j++) {
+						newKey = (String[]) newKeyList.get(j);
+						System.err.println(newKey[1] + " -- " + key + "=" + newKey[0]);
+					}
+				}
+				if (value!=null && !value.equals("")) { // the translation has a value
+					if (dbValue==null) {
+						// new translation
+						database.setTranslation(lang, key, value);
+						// it has been added to database, it isn't new anymore
+						// we add the key to the list of keys to remove. We don't remove it now because then there is troubles with the iterator
+						removedKeysDict.add(key);
+					}
+					else if (!dbValue.equals("")) {
+						// if dbValue contains a translation, it isn't a new translation
+						removedKeysDict.add(key);
+					}
+					/*
+					 * else { // if dbValue.equals(""), it means that the key has been changed, and it must be sent for translation
+					 *       //It should not be added to the database with the value from the property file, as it is not valid anymore.
+					 * 
+					 * }
+					 */
+				}
+			}
+		}
+		
+		// remove 
+		for (int i=0; i<config.languages.length; i++) {
+			lang = config.languages[i];
+			removedKeysDict = (ArrayList) removedKeys.get(lang);
+			newKeysDict = (TreeMap) newKeys.get(lang);
+			Iterator removeIterator = removedKeysDict.iterator();
+			while (removeIterator.hasNext()) {
+				key = (String) removeIterator.next();
+				newKeysDict.remove(key);
+			}
+		}
+		
+		removedKeys = new HashMap();
+		
+		// we already added all the new keys with value to the database
+		// now we try to find a translation for the keys without translation
+		for (int i=0; i<config.languages.length; i++) {
+			lang = config.languages[i];
+			File langDir = new File(config.outputDir+File.separator+lang);
+			langDir.mkdirs();
+			
+			// process the keys
+			newKeysDict = (TreeMap) newKeys.get(lang);
+			removedKeysDict = new ArrayList();
+			removedKeys.put(lang, removedKeysDict);
+			Iterator newKeysIterator = newKeysDict.keySet().iterator();
+			while (newKeysIterator.hasNext()) {
+				key = (String) newKeysIterator.next();
+				value = "";
+				String auxValue;
+				for (int currentAuxLang=0; currentAuxLang<config.languages.length && (value==null || value.equals("")); currentAuxLang++) {
+					auxLang = config.languages[currentAuxLang];
+					auxValue = database.getTranslation(auxLang, key);
+					if (auxValue!=null && !auxValue.equals("")) {
+						ArrayList keyList = database.getAssociatedKeys(auxLang, value);
+						if (keyList!=null) {
+							for (int j=0; j<keyList.size() && (value==null || !value.equals("")); j++) {
+								value = database.getTranslation(lang, (String)keyList.get(j));
+							}
+						}
+					}
+				}
+				if (value!=null && !value.equals("")) { // the translation has a value
+					dbValue = database.getTranslation(lang, key);
+					if (dbValue==null || !dbValue.equals("")) {
+						/* if dbValue == "" means that the key has been changed and should be sent for translation.
+						 * It should not be added to the database with the value from the property file, as it is not valid anymore.
+						 */
+											
+						database.setTranslation(lang, key, value);
+						// it has been added to database, it isn't new anymore
+						// we add the key to the list of keys to remove. We don't remove it now because then there is troubles with the iterator
+						removedKeysDict.add(key);
+					}
+				}
+			}
+		}
+		
+		// remove 
+		for (int i=0; i<config.languages.length; i++) {
+			lang = config.languages[i];
+			removedKeysDict = (ArrayList) removedKeys.get(lang);
+			newKeysDict = (TreeMap) newKeys.get(lang);
+			Iterator removeIterator = removedKeysDict.iterator();
+			while (removeIterator.hasNext()) {
+				key = (String) removeIterator.next();
+				newKeysDict.remove(key);
+			}
+		}
+		
+		// output the keys to be translated
+		outputNewKeys(newKeys);
+		
+		// update the values of each project's property files and store to disk
+		saveKeys();
+		
+		// store datase to disk
+		database.save();
+	}
+	
+	private void outputNewKeys(HashMap newKeys) {
+		String lang, auxLang;
+		/**
+		 * Process the new or changed keys
+		 */
+		for (int i=0; i<config.languages.length; i++) {
+			lang = config.languages[i];
+			File langDir = new File(config.outputDir+File.separator+lang);
+			langDir.mkdirs();
+			HashMap outputFiles = new HashMap();
+			HashMap outputPropertiesStream = new HashMap();
+			HashMap outputProperties = new HashMap();
+			
+			// open the output files, one for each defined language
+			for (int j=0; j<config.outputLanguages.length; j++) {
+				auxLang = config.outputLanguages[j];
+				FileOutputStream fos, fosProp;
+				OrderedProperties prop;
+				try {
+					fos = new FileOutputStream(langDir.getPath()+File.separator+config.defaultBaseName+"_"+auxLang+".properties-"+config.outputEncoding);
+					fosProp = new FileOutputStream(langDir.getPath()+File.separator+config.defaultBaseName+"_"+auxLang+".properties");
+					prop = new OrderedProperties();
+					outputPropertiesStream.put(auxLang, fosProp);
+					outputProperties.put(auxLang, prop);
+					try {
+						outputFiles.put(auxLang, new BufferedWriter(new OutputStreamWriter(fos, config.outputEncoding)));
+					} catch (UnsupportedEncodingException e) {
+						// TODO Auto-generated catch block
+						System.err.println(e.getLocalizedMessage());
+						System.exit(-1);
+					}
+				} catch (FileNotFoundException e) {
+					// TODO Auto-generated catch block
+					System.err.println(e.getLocalizedMessage());
+					System.exit(-1);
+				}
+			}
+			
+			// also open the file for language we're processing currently
+			if (!outputFiles.containsKey(lang)) {
+				FileOutputStream fos, fosProp;
+				OrderedProperties prop;
+				try {
+					fos = new FileOutputStream(langDir.getPath()+File.separator+config.defaultBaseName+"_"+lang+".properties-"+config.outputEncoding);
+					fosProp = new FileOutputStream(langDir.getPath()+File.separator+config.defaultBaseName+"_"+lang+".properties");
+					prop = new OrderedProperties();
+					outputPropertiesStream.put(lang, fosProp);
+					outputProperties.put(lang, prop);
+					try {
+						outputFiles.put(lang, new BufferedWriter(new OutputStreamWriter(fos, config.outputEncoding)));
+					} catch (UnsupportedEncodingException e) {
+						// TODO Auto-generated catch block
+						System.err.println(e.getLocalizedMessage());
+						System.exit(-1);
+					}
+				} catch (FileNotFoundException e) {
+					// TODO Auto-generated catch block
+					System.err.println(e.getLocalizedMessage());
+					System.exit(-1);
+				}
+			}
+			
+			TreeMap dict = (TreeMap) newKeys.get(lang);
+			Iterator keyIterator = dict.keySet().iterator();
+			String key, value;
+			while (keyIterator.hasNext()) {
+				key = (String) keyIterator.next();
+
+				Iterator files = outputFiles.keySet().iterator();
+				BufferedWriter writer;
+				while (files.hasNext()) {
+					// we output the pair key-value for the defined output languages (they're used for reference by translators)							
+					auxLang = (String) files.next();
+					writer = (BufferedWriter) outputFiles.get(auxLang);
+					value = database.getTranslation(auxLang, key);
+					try {
+						if (value!=null)
+							writer.write(key+"="+value+"\n");
+						else
+							writer.write(key+"=\n");
+					} catch (IOException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				}
+				Iterator props = outputProperties.keySet().iterator();
+				OrderedProperties prop;
+				while (props.hasNext()) {
+					// we output the pair key-value for the defined output languages (they're used for reference by translators)							
+					auxLang = (String) props.next();
+					prop = (OrderedProperties) outputProperties.get(auxLang);
+					value = database.getTranslation(auxLang, key);
+					if (value!=null)
+						prop.put(key, value);
+					else
+						prop.put(key, "");
+				}
+			}
+			
+			Iterator props = outputProperties.keySet().iterator();
+			OrderedProperties prop;
+			FileOutputStream fos;
+			while (props.hasNext()) {
+				auxLang = (String) props.next();
+				fos = (FileOutputStream) outputPropertiesStream.get(auxLang);
+				prop = (OrderedProperties) outputProperties.get(auxLang);
+				try {
+					prop.store(fos, "Translations for language ["+auxLang+"]");
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+			
+			// close the files now
+			Iterator files = outputFiles.keySet().iterator();
+			while (files.hasNext()) {							
+				auxLang = (String) files.next();
+				BufferedWriter writer = (BufferedWriter) outputFiles.get(auxLang);
+				try {
+					writer.close();
+				} catch (IOException e) {
+					// do nothing here
+				}
+			}
+		}		
+	}
+		
+	private HashMap detectNewKeys() {
+		Project currentProject;
+		String lang;
+		OrderedProperties dict;
+		TreeMap auxDict;
+		Iterator keys;
+		String key, value, dbValue;
+		HashMap newKeys = new HashMap();
+		for (int i=0; i<config.languages.length; i++) {
+			lang = config.languages[i];
+			newKeys.put(lang, new TreeMap());
+		}
+	
+		/**
+		 * Detect the new or changed keys
+		 * We just make a list, we will check the list later (to detect conflicting changes)
+		 */
+		for (int i=0; i<config.projects.size(); i++) {
+			currentProject = (Project) config.projects.get(i);
+			for (int j=0; j<config.languages.length; j++) {
+				lang = config.languages[j];
+				dict = (OrderedProperties) currentProject.dictionaries.get(lang);
+				keys = dict.keySet().iterator();
+				while (keys.hasNext()) {
+					key = (String) keys.next();
+					value = dict.getProperty(key);
+					dbValue = database.getTranslation(lang, key);
+					if (dbValue==null || dbValue.equals("") || (!value.equals("") && !dbValue.equals(value))) {
+						String []newKey = new String[2];
+						newKey[0]=value;
+						newKey[1]= currentProject.dir;
+						auxDict = (TreeMap) newKeys.get(lang);
+						ArrayList keyList = (ArrayList) auxDict.get(key);
+						if (keyList==null) {
+							keyList = new ArrayList();
+						}
+						keyList.add(newKey);
+						auxDict.put(key, keyList);
+					}
+				}
+			}
+		}
+		return newKeys;
+	}
+	
+	private static void usage() {
+		System.out.println("Uso: UpdateTrans [OPCION]");
+		System.out.println("\t-c\t--config=configFile");
+	}
+	
+	/**
+	 *  Reads the command line parameters */
+	private boolean readParameters(String[] args) {
+		String configPair[];
+
+		for (int i=0; i<args.length; i++) {
+			configPair = args[i].split("=",2);
+			if ( (configPair[0].equals("-c") || configPair[0].equals("--config"))
+					&& configPair.length==2) {
+				configFileName = configPair[1];
+			}
+			else {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	private boolean loadConfig() {
+		config = new ConfigOptions(configFileName);
+		config.load();
+		return true;
+	}
+	
+	/**
+	 * Reads the translation keys from the projects speficied in
+	 * the config file. The keys are stored for each project in
+	 * 'config.projects'. 
+	 * 
+	 * @return
+	 */
+	private void loadKeys() {
+		Keys keys = new Keys(config);
+		keys.load();
+	}
+	
+	private void saveKeys() {
+		Project project;
+		OrderedProperties dict;
+		String lang;
+		
+		for (int currentProject=0; currentProject<config.projects.size(); currentProject++) {
+			project = ((Project)config.projects.get(currentProject));
+			
+			for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+				lang = (String) config.languages[currentLang];
+				dict = (OrderedProperties) project.dictionaries.get(lang);
+				String dbValue, key;
+
+				Iterator keysIterator = dict.keySet().iterator();
+				while (keysIterator.hasNext()) {
+					key = (String) keysIterator.next();
+					dbValue = database.getTranslation(lang, key);
+					if (dbValue!=null) {
+						dict.setProperty(key, dbValue);
+					}
+				}
+			}
+		}
+		
+		Keys keys = new Keys(config);
+		keys.save();
+	}
+	
+	private void loadDataBase() {
+		database = new TranslationDatabase(config);
+		database.load();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/UpdateTrans.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Keys.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Keys.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Keys.java	(revision 42196)
@@ -0,0 +1,457 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.i18n.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * @author cesar
+ *
+ */
+public class Keys {
+	private ConfigOptions config;
+	
+	public Keys(ConfigOptions config) {
+		this.config = config;
+	}
+	
+	public void load() {
+		Project project;
+		for (int currentProject=0; currentProject<config.projects.size(); currentProject++) {
+			project = ((Project)config.projects.get(currentProject));
+			/**
+			 * There is two options, "properties" and "sources". "sources" is the default, so
+			 * if there was something different to "properties", we assume "sources".
+			 */
+			if (!project.sourceKeys.equals("properties")) {
+				project.dictionaries = loadProjectFromSources(project);
+			}
+			else {
+				// load the keys for each language from the property file
+			 	project.dictionaries = loadProjectFromProperties(project);
+			 	// add missing keys tp each language
+			 	completeKeys(project);
+			 }
+		}
+	}
+	
+	public void save() {
+		Project project;
+		OrderedProperties dict;
+		FileOutputStream stream=null;
+		String lang;
+		
+		for (int currentProject=0; currentProject<config.projects.size(); currentProject++) {
+			project = ((Project)config.projects.get(currentProject));
+			
+			for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+				lang = (String) config.languages[currentLang];
+				dict = (OrderedProperties) project.dictionaries.get(lang);
+				
+				if (dict.size()>0) {
+					// ensure the directory exists
+					File propertyDir = new File(project.propertyDir);
+					if (propertyDir.mkdirs())
+						System.out.println("Aviso -- directorio creado: "+project.propertyDir);
+					
+					try {
+						// different for spanish...
+						if (lang.equals("es")) {
+							stream = new FileOutputStream(project.propertyDir+File.separator+project.basename+".properties");
+						}
+						else {
+							stream = new FileOutputStream(project.propertyDir+File.separator+project.basename+"_"+lang+".properties");
+						}
+					} catch (FileNotFoundException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+	
+					try {
+						dict.store(stream, "Translations for language ["+lang+"]");
+					} catch (IOException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				}
+			}
+		}	
+	}
+	
+	private HashMap loadProjectFromSources(Project project) {
+		// always start with an empty HashMap when loading
+		HashMap dictionaries = new HashMap();		
+		String lang;
+		
+		/**
+		 * The keys obtained from the sources and the config.xml files of the
+		 * plugins.
+		 */
+		HashSet keys = new HashSet();
+		/**
+		 * The translations loaded from the property files of the project.
+		 */
+		
+		dictionaries =  loadProjectFromProperties(project);
+		
+		for (int i=0; i<project.srcDirs.length; i++) {
+			try {
+				keys = loadKeysFromSources(ConfigOptions.getAbsolutePath(File.separator, project.dir+File.separator+project.srcDirs[i]), keys);
+			}
+			catch (IOException ex) {
+				// It there was an error reading the directory, just warn and skip the dir
+				System.err.println(project.dir +" -- Aviso: no se pudo leer el directorio "+project.dir+File.separator+project.srcDirs[i]);
+			}
+		}
+		
+		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+			lang = config.languages[currentLang];
+
+			OrderedProperties currentDict = (OrderedProperties) dictionaries.get(lang);
+			Iterator keysIterator = keys.iterator();
+			String key;
+			// add missing keys
+			while (keysIterator.hasNext()) {
+				key = (String) keysIterator.next();
+				if (!currentDict.containsKey(key)) {
+					currentDict.put(key, "");
+					System.out.println(project.dir+" -- Aviso -- clave a�adida: "+key);
+				}
+			}
+			
+			// remove extra keys
+			// first make a list of keys to remove, because it's not possible to access the iterator and the TreeMap at the same time
+		/*	HashSet removedKeys = new HashSet();
+			Iterator dictKey = currentDict.keySet().iterator();
+			while (dictKey.hasNext()) {
+				key = (String) dictKey.next();
+				if (!keys.contains(key)) {
+					removedKeys.add(key);
+					System.out.println(project.dir+" -- Aviso -- clave eliminada: "+key);
+				}
+			}
+			// now we really remove the keys
+			Iterator removedKeysIt = removedKeys.iterator();
+			while (removedKeysIt.hasNext()) {
+				key = (String) removedKeysIt.next();
+				currentDict.remove(key);
+			}*/	
+		}
+
+		return dictionaries;
+	}
+	
+	/**
+	 * Reads the keys from all the languages, to make a unique list containing
+	 * all the keys. 
+	 */
+	public void completeKeys(Project project) {
+		/* The list of all the keys */
+		HashSet keys = new HashSet();
+		// always start with an empty HashMap when loading
+		//HashMap dictionaries = new HashMap();		
+		String lang;
+		
+		// calculate all the keys
+		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+			lang = config.languages[currentLang];
+			
+			OrderedProperties currentDict = (OrderedProperties) project.dictionaries.get(lang);
+			if (currentDict==null) {
+				currentDict = new OrderedProperties();
+				project.dictionaries.put(lang, currentDict);
+			}
+			else {
+				Iterator keysIterator = currentDict.keySet().iterator();
+				String key;
+				// add missing keys
+				while (keysIterator.hasNext()) {
+					key = (String) keysIterator.next();
+					keys.add(key);
+				}	
+			}
+		}
+		
+		// add missing keys to each language
+		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+			lang = config.languages[currentLang];
+			
+			OrderedProperties currentDict = (OrderedProperties) project.dictionaries.get(lang);
+			Iterator keysIterator = keys.iterator();
+			String key;
+			// add missing keys
+			while (keysIterator.hasNext()) {
+				key = (String) keysIterator.next();
+				if (!currentDict.containsKey(key)) {
+					currentDict.put(key, "");
+					System.out.println(project.dir+" -- Aviso -- clave a�adida: "+key);
+				}
+			}			
+		}
+	}
+	
+	
+	private HashSet loadKeysFromSources(String directory, HashSet keys) {
+		String key;
+		File dir = new File(directory);
+		File files[] = dir.listFiles();
+		final int BLOCKSIZE = 8192;
+		char[] partialBuffer = new char[BLOCKSIZE+1];
+		String text;
+		StringBuffer buffer;
+		
+		// stores the position of the newlines
+		//ArrayList newLines = new ArrayList();
+		//	int lineNumber;
+		
+		if (files!=null) {
+			//Pattern keyPattern = Pattern.compile("(PluginServices|Messages)\\.(getText|getString|get)\\([^\"\\)]*\"([^\"]*)\"[^\\)]*\\)");
+			Pattern keyPattern = Pattern.compile(
+					"(PluginServices|Messages)\\p{Space}*\\.\\p{Space}*(getText|getString|get)\\p{Space}*\\([^\"\\)]*\"([^\"]*)\"[^\\+\\)]*(\\+[^\\)]*)*\\)");
+			Matcher keyMatcher = keyPattern.matcher("");
+					//"(PluginServices|Messages)\\.(getText|getString|get)\\p{Space}*\\([^\"\\)]*\"([^\"]*)\"[^\\+\\)]*(\\+[^\"]*\"([^\"]*)\"[^\\+\\)]*)*\\)");
+			//Pattern newLinePattern = Pattern.compile("\n");
+			//Matcher newLineMatcher = newLinePattern.matcher("");
+			
+			for (int i=0; i<files.length; i++) {
+				if (files[i].isDirectory()) {
+					keys = loadKeysFromSources(files[i].toString(), keys);
+					continue;
+				}
+				else if (files[i].getName().toLowerCase().equals("PluginServices.java")) {
+					
+					//[Messages.]getText(...)
+					Pattern PsPattern = Pattern.compile("(Messages\\.)*getText\\([^\"\\)]*\"([^\"]*)\"[^\\)]*\\)");
+					Matcher PsMatcher = PsPattern.matcher("");
+					
+					FileInputStream fis=null;
+					try {
+						fis = new FileInputStream(files[i]);
+						
+						buffer = new StringBuffer();
+						BufferedReader currentFile=null;
+						
+						currentFile = new BufferedReader(new InputStreamReader(fis, config.sourcesEncoding));
+						while (currentFile.read(partialBuffer, 0, BLOCKSIZE)!=-1) {
+							buffer.append(partialBuffer);
+						}
+						text = buffer.toString();
+						
+						
+						PsMatcher.reset(text);
+						
+						while (PsMatcher.find()) {
+							key = PsMatcher.group(2);
+							if (!key.equals(""))
+								keys.add(key);
+						}
+						currentFile.close();
+					} catch (UnsupportedEncodingException e1) {
+						System.err.println(e1.getLocalizedMessage());
+						continue;
+					}
+					catch (IOException e1) {
+						System.err.println(e1.getLocalizedMessage());
+						continue;
+					}
+				}
+				else if (files[i].getName().toLowerCase().endsWith(".java")) {
+					FileInputStream fis=null;
+					try {
+						fis = new FileInputStream(files[i]);
+						BufferedReader currentFile=null;
+						
+						currentFile = new BufferedReader(new InputStreamReader(fis, config.sourcesEncoding));
+						buffer = new StringBuffer();
+						
+						int readChars; // number of characters which were read
+						while ( (readChars = currentFile.read(partialBuffer, 0, BLOCKSIZE)) != -1) {
+							buffer.append(partialBuffer, 0, readChars);
+						}
+						text = buffer.toString();
+						
+						/*newLineMatcher.reset(text);
+						 while (newLineMatcher.find()) {
+						 newLines.add(new Integer(newLineMatcher.end()-1));
+						 }*/
+						// lineNumber=1;
+						
+						keyMatcher.reset(text);
+						
+						while (keyMatcher.find()) {
+							
+							// find out in which line number we are
+							/*while (keyMatcher.start() > ((Integer)newLines.get(lineNumber)).intValue() ) lineNumber++;
+							 System.out.println("FileName: "+files[i].getCanonicalPath()+"; lineNumber: "+lineNumber);*/
+							
+//							StringBuffer keyBuffer = new StringBuffer();
+							
+//							for (int ii=0; ii<=keyMatcher.groupCount(); ii++) {
+//							System.out.println("group: "+ ii+ "; " + keyMatcher.group(ii));
+//							}
+//							for (int groupNumb=3; groupNumb<=keyMatcher.groupCount(); groupNumb+=2) {
+//							if (keyMatcher.group(groupNumb)!=null)
+//							keyBuffer.append(keyMatcher.group(groupNumb));
+//							}
+							
+							if (keyMatcher.group(4)!=null) {
+								System.err.println("\nError: clave repartida en varias l�neas");
+								System.err.println("Fichero: "+files[i].getCanonicalPath());
+								System.err.println("C�digo: ");
+								System.err.println(keyMatcher.group());
+							}
+							else {
+								key = keyMatcher.group(3);
+								if (!key.equals(""))
+									keys.add(key);
+							}
+						}
+						currentFile.close();
+					} catch (UnsupportedEncodingException e1) {
+						System.err.println(e1.getLocalizedMessage());
+						continue;
+					}
+					catch (IOException e1) {
+						System.err.println(e1.getLocalizedMessage());
+						continue;
+					}
+				}
+				else if (files[i].getName().equalsIgnoreCase("config.xml")) {
+					keys = loadKeysFromXml(files[i], keys);
+				}
+			}
+		}
+		
+		return keys;
+	}
+	
+	
+	private HashSet loadKeysFromXml(File fileName, HashSet keys) {
+		KXmlParser parser = new KXmlParser();
+		String tagname, attribute;
+		
+		// we use null encoding, in this way kxml2 tries to detect the encoding
+		try {
+			parser.setInput(new FileInputStream(fileName), null);
+		} catch (FileNotFoundException e1) {
+			System.err.println(e1.getLocalizedMessage());
+			return keys;
+		} catch (XmlPullParserException e1) {
+			// No podemos leer el fichero de configuraci�n. Usamos valores por defecto
+			System.err.println("Aviso: error al cargar el fichero "+fileName);
+			return keys;
+		}
+		
+		try {
+			for (parser.next(); parser.getEventType()!=KXmlParser.END_DOCUMENT; parser.next()) {
+				// este bucle externo recorre las etiquetas de primer y segundo nivel
+				if (parser.getEventType()==KXmlParser.START_TAG) {
+					tagname = parser.getName();
+					if (tagname.equals("menu") || tagname.equals("action-tool") || tagname.equals("selectable-tool") || tagname.equals("entry")) {
+						attribute = parser.getAttributeValue(null, "text");
+						if (attribute!=null) {
+							String menuParts[] = attribute.split("/");
+							for (int i=0; i<menuParts.length; i++) {
+								if (!menuParts[i].equals(""))
+									keys.add(menuParts[i]);
+							}
+						}
+						
+						attribute = parser.getAttributeValue(null, "tooltip");
+						if (attribute!=null && !attribute.equals("")) {
+							keys.add(attribute);
+						}
+						
+						
+					}
+					else if (tagname.equals("combo-scale")) {
+						attribute = parser.getAttributeValue(null, "label");
+						if (attribute!=null && !attribute.equals("")) {
+							keys.add(attribute);
+						}
+					}
+					else if (tagname.equals("tool-bar")) {
+						attribute = parser.getAttributeValue(null, "name");
+						if (attribute!=null && !attribute.equals("")) {
+							keys.add(attribute);
+						}
+					}
+
+				}
+			}	
+		} catch (XmlPullParserException e1) {
+			e1.getLocalizedMessage();
+		} catch (IOException e1) {
+			e1.getLocalizedMessage();
+		}
+		return keys;
+	}
+	
+	private HashMap loadProjectFromProperties(Project project) {
+		// always start with an empty HashMap when loading
+		HashMap dictionaries = new HashMap();
+		String lang;
+		OrderedProperties dictionary;
+		
+		FileInputStream stream=null;
+		
+		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
+			lang = config.languages[currentLang];
+			dictionary = new OrderedProperties();
+			try {
+				// different for spanish...
+				if (lang.equals("es")) {
+					stream = new FileInputStream(project.propertyDir+File.separator+project.basename+".properties");
+				}
+				else {
+					stream = new FileInputStream(project.propertyDir+File.separator+project.basename+"_"+lang+".properties");
+				}
+				try {
+					dictionary.load(stream);
+				} catch (IOException e) {
+					System.err.println("Error cargando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
+				}
+			} catch (FileNotFoundException e) {
+				System.err.println(project.dir + " -- Error cargando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
+			}
+			dictionaries.put(lang, dictionary);
+		}
+		return dictionaries;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Keys.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_es.properties	(revision 42196)
@@ -0,0 +1,1958 @@
+#Translations for language: es
+#Thu Nov 09 09:23:00 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+_(Etiquetas_estandar)=(Etiquetas est\u00e1ndar)
+_(Intervalos)=(Intervalos)
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+_(Valores_unicos)=(Valores \u00fanicos)
+__valenciano=Valenciano
+__espacio_vertical=Espacio vertical\:
+__lineas=l\u00edneas
+__proyeccion_actual=Proyecci\u00f3n actual\:
+__redimensionar_texto_escala=Redimensionar el texto a escala con la vista.
+__seleccion_de_fuente=Selecci\u00f3n de fuente
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=Vista nueva
+abajo=Abajo
+abrir=Abrir
+Abrir=Seleccionar
+Abrir_Geoproceso=Abrir Geoproceso
+Abrir_Imagen=Abrir imagen
+abrir_plantilla=Abrir plantilla
+abrir_proyecto=Abrir proyecto
+abrir_tooltip=Abre un proyecto existente
+Abrir_una_capa=Abrir una capa
+abstract=Resumen
+accept=Aceptar
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+Accion_Predefinida=Acci\u00f3n predefinida
+aceptar=Aceptar
+Aceptar=Aceptar
+acerca_de=Acerca de...
+activa_la_ventana=Activa la ventana
+activar=Activar
+activar_regla=Activar regla
+activo=Activo
+activos=Activos
+add=A\u00f1adir
+add_again_question=\u00bfA\u00f1adir de nuevo?
+add_all=A\u00f1adir todas
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_field=A\u00f1adir campo
+add_layer=A\u00f1adir capa
+add_rows=A\u00f1adir filas
+add_vertex=A\u00f1adir v\u00e9rtice
+addlayer=A\u00f1adir capa
+addLayer=A\u00f1adir Capa
+address=Direcci\u00f3n
+address_type=Tipo de direcci\u00f3n
+adjust_grid=Ajustar a la rejilla
+adjust_transparency=Ajustar transparencia
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar l\u00ednea gr\u00e1fica con gr\u00e1ficos
+Ajustar_cobertura_wcs=Ajustar cobertura WCS
+ajustar_rejilla=Ajustar rejilla
+Ajustar_transparencia=Ajustar transparencia
+ajustes_linea_grafica=Ajustes de l\u00ednea gr\u00e1fica
+Al_leer_la_leyenda=Al leer la leyenda
+alerta=Aviso
+algoritmo=Algoritmo
+alias=Alias
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+alineamiento=Alineamiento\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00e1ficos
+all_and_disordered=Todos los items y Desordenados
+all_and_maintain_order=Todos los items y Mantener \u00f3rden
+all_and_ordered=Todos los items y Ordenados
+allowedMEditionPMConfigurationLabel=Permite edici\u00f3n texto con rat\u00f3n
+allowedRepeatedItemsConfigurationLabel=Permite items repetidos
+allWords=Todas las palabras
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Altura fija de texto
+ambito=\u00c1mbito
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+Anadir=A\u00f1adir
+Anadir_al_conjunto=A\u00f1adir al conjunto
+Anadir_capa=A\u00f1adir capa
+Anadir_Capa=A\u00f1adir capa
+Anadir_capa_de_eventos=A\u00f1adir capa de eventos
+anadir_tag=A\u00f1adir etiqueta
+Anadir_tema_de_eventos=A\u00f1adir capa de eventos
+anadir_titulo=A\u00f1adir t\u00edtulo
+Anadir_todos=A\u00f1adir todos
+Analisis=An\u00e1lisis
+Analisis_Desc=Geoprocesos que permiten extraer nueva informaci\u00f3n de
+ancho=Ancho
+ancho_alto=Ancho x Alto
+Ancho_Contorno=Ancho contorno
+Ancho_de_linea=Ancho de l\u00ednea
+anchura=Anchura\:
+angulo_rotacion=\u00c1ngulo de rotaci\u00f3n\:
+anterior=Anterior
+Anterior=Anterior
+anyResult=La b\u00fasqueda no ha producido ning\u00fan resultado
+anyWord=Cualquier palabra
+Aplicar=Aplicar
+apply=Aplicar
+Apply=Aplicar
+arc=Arco
+arc_=ARCO
+Archivo=Archivo
+Archivos_de_Disco=Ficheros de disco
+arcims_catalog_error=Error al recibir el cat\u00e1logo del servidor ArcIMS
+arcims_extent_error=Error al obtener la extensi\u00f3n del servicio ArcIMS
+arcims_image_resource=Imagen ArcIMS
+arcims_legend_error=Error al procesar la leyenda
+arcims_load=Carga de ArcIms
+arcims_no_features=No se han encontrado geometr\u00edas
+arcims_no_server=No se ha hallado un servidor ArcIMS v\u00e1lido
+arcims_properties=Propiedades ArcIMS
+arcims_remote_not_found=Fichero remoto no encontrado
+arcims_server_error=Error en el servidor ArcIMS
+arcims_server_status_col_name=Estado
+arcims_server_timeout=Alcanzado m\u00e1ximo tiempo de espera de respuesta del servidor ArcIMS
+arcims_server_type_col_name=Tipo
+arcims_vect_resource=Feature ArcIMS
+area=\u00c1rea
+Area_de_influencia=\u00c1rea de influencia
+Area_de_influencia_definida_por_un_campo=\u00c1rea de influencia definida por un campo
+Area_de_influencia_definida_por_una_distancia=\u00c1rea de influencia definida por una distancia
+area_trabajo=\u00c1rea de trabajo
+Areas_de_influencia=\u00c1rea de influencia
+Areas_de_influencia._Introduccion_de_datos=\u00c1reas de influencia. Introducci\u00f3n de datos
+array_error=Error en el tama\u00f1o de los arrays
+arriba=Arriba
+ascending_order=Orden ascendente
+ascending_order_tooltip=Ordena por el campo seleccionado en orden ascendente
+asignar_coordenadas=Asignar coordenadas
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+aspect=Configuraci\u00f3n de aspecto
+Atributo=Atributo
+Atributos_Numericos=Atributos num\u00e9ricos
+attributeName=Nombre
+attributes=Atributos
+attributeType=Tipo
+automatico=Autom\u00e1tico
+available_layers=Capas disponibles
+available_services=Servicios disponibles
+aviso_sin_extent_de_referencia=Para usar esta opci\u00f3n necesita tener como m\u00ednimo una capa ya a\u00f1adida que sirva de referencia.
+Ayuda=Ayuda
+back=Anterior
+Back=Anterior
+background_color=Color de fondo
+baja=Baja
+Bajar_capa=Bajar capa
+bandas=Bandas
+bands=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bd=bd
+beepConfigurationLabel=Beep (Sonido de alerta)
+Block_Size_=Tama\u00f1o de bloque\:
+bmp=Ficheros de tipo bmp
+Bold=Negrita
+borra_seleccion=Borra selecci\u00f3n
+borrador=Borrador
+borrar=Borrar
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+box=Cajet\u00edn
+break=Romper
+break_=Break
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+BRX=BRX\:
+BRY=BRY\:
+buffer=Buffer
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calcular_errores=Calcular errores automaticamente
+Calcular_intervalos=Calcular intervalos
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+calidad=Calidad
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+Cambio_Color=Cambio color
+Cambio_de_estilo=Cambio de estilo
+Cambio_Estilo=Cambio estilo
+cambio_nombre=Cambio de nombre
+Cambios_de_estilo=Cambios de estilo
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+Campo_clasifica=Campo de clasificaci\u00f3n
+Campo_de_clasificacion=Campo de clasificaci\u00f3n
+campo_de_documentos_asociados=Campo de documentos asociados
+Campo_de_etiquetado=Campo de etiquetado
+Campo_para_disolver=Campo para disolver
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancel_edition=Cancelar edici\u00f3n
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar=Cancelar
+Cancelar=Cancelar
+cancelar_edicion=Cancelar Edici\u00f3n
+cancelSearchButton=Cancelar
+cannotReproject=No se puede reproyectar este sistema de coordenadas
+cant_connect=No se puede realizar la conexi\u00f3n
+cant_connect_wfs=No ha sido posible realizar la conexi\u00f3n con el WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+cantLoad=No se puede cargar la capa WFS
+cantTestThisMethod=La aplicaci\u00f3n no puede testear esta operaci\u00f3n.
+capa=Capa
+Capa=Capa
+capa_exportada=Capa exportada
+capa_importada=Capa importada. \u00bfDesea crear el \u00edndice espacial?
+capas=Capas
+Capas=Capas
+Capas_del_directorio=Capas del directorio
+Capas_del_localizador=Capas del localizador
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+capaWMS=CapaWMS
+caracteres_erroneos=Caracteres erroneos en la cadena de entrada
+cargar=Cargar
+cargar_fichero=Cargar Fichero
+cargar_leyenda=Cargar leyenda
+cargar_sin_georef=Cargar imagen sin georeferenciar
+cartografico=Cartogr\u00e1fico
+Cascada=Cascada
+cascada_enable=Debe haber al menos una ventana abierta
+cascada_tooltip=Organiza las ventanas en cascada
+caseSensitiveConfigurationLabel=Distingue May\u00fasculas / Min\u00fasculas
+catalog_search=B\u00fasqueda de geodatos
+cathegory=categor\u00eda
+cathegoryAny=Cualquiera
+cathegoryBiota=Biota
+cathegoryBoundaries=L\u00edmites
+cathegoryClimatologyMeteorologyAtmosphere=Atmosfera climatol\u00f3gica y meteorol\u00f3gica
+cathegoryEconomy=Econom\u00eda
+cathegoryElevation=Elevaci\u00f3n
+cathegoryEnvironment=Medio ambiente
+cathegoryFarming=Agricultura
+cathegoryGeoscientificInformation=Informaci\u00f3n geocient\u00edfica
+cathegoryHealth=Salud
+cathegoryImageryBaseMapsEarthCover=Cobertura de la tierra con mapas
+cathegoryInlandWaters=Aguas interiores
+cathegoryIntelligenceMilitary=Inteligencia militar
+cathegoryLocation=Localizaci\u00f3n
+cathegoryOceans=Oceanos
+cathegoryPlanningCadastre=Planeamiento catastral
+cathegorySociety=Sociedad
+cathegoryStructure=Estructuras
+cathegoryTransportation=Transporte
+cathegoryUtilitiesCommunication=Comunicaci\u00f3n y utilidades
+causa_error_desconocida=Error inesperado del servidor
+centimeters=Cent\u00edmetros
+Centimetros=Cent\u00edmetros
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+centrar_punto=Centrar punto seleccionado en la vista
+cerrar=Cerrar
+Cerrar=Cerrar
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_server=Cambiar Servidor
+change_service=Cambiar Servicio
+change_width=Cambiar anchura
+choose_image_format=Elija formato de imagen
+chooseAttribute=Elige un atributo para hacer la b\u00fasqueda
+circle=C\u00edrculo
+circle_=C\u00cdRCULO
+circulo=C\u00edrculo
+Circulo=C\u00edrculo
+circumscribed=Circunscrito
+city=Ciudad
+clave=Clave
+Clean=Limpiar
+clear=Limpiar
+close=Cerrar
+close_polyline=Cerrar polil\u00ednea
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_interseccion=Capa de intersecci\u00f3n
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de salida
+Cobertura_para_unir=Capa para unir
+Coberturas=Coberturas
+Coberturas_de_entrada=Capas de entrada
+coincidir_tamano=Coincidir tama\u00f1o\:
+coincidir_tamanyo=Coincidir tama\u00f1o
+colocar_a_margenes=Colocar con referencia a margenes.
+colocar_alrededor_seleccionados=Colocar alrededor de los gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar alrededor de todos los gr\u00e1ficos.
+colocar_delante=Colocar delante
+colocar_detras=Colocar detr\u00e1s
+color=Color\:
+Color_Contorno=Color contorno
+Color_de_la_Linea=Color de la l\u00ednea\:
+Color_de_Relleno=Color de relleno
+Color_final=Color final\:
+Color_inicial=Color inicial\:
+Color_inicio=Color de inicio
+color_texto=Color del texto\:
+column_not_found=No se encontr\u00f3 la columna
+com.iver.andami.messages.Messages=Mensaje
+comentarios=Comentarios
+comenzar_edicion=Comenzar edici\u00c3\u00b3n
+commands_stack=Pila de comandos
+compleja=Compleja
+completeMatchedItemConfigurationLabel=Completar con item que coincide
+complex_selection=Selecci\u00f3n compleja
+complex_selection_=SELECCI\u00d3N COMPLEJA
+compress=Compresi\u00f3n
+Compression_=Compresi\u00f3n\:
+concordancia=Concordancia
+conectar=Conectar
+conection=Conexi\u00f3n
+conexion_correcta=Conexi\u00f3n correcta
+configuracion_andami_tooltip=Configuraci\u00f3n Andami
+configurar=Configurar
+Configurar=Configurar
+configurar_ANDAMI=Di\u00e1logo de configuraci\u00f3n de ANDAMI.
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador ...
+configurar_todas_las_extensiones=Configurar todas las extensiones
+configurationParameters=Par\u00e1metros Configuraci\u00f3n de Constructores
+confirm_gid=Confirmar gid
+confirmacion=Confirmaci\u00f3n
+confirmar_borrar=\u00bfSeguro que desea borrar el elemento?
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+connect=Conectar
+connect_error=Error de conexi\u00f3n
+connectButton=Conectar
+connection_name=Nombre de la conexi\u00f3n
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00f3n
+Consola=Consola
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+constructors=Constructores
+consulta=Consulta
+contact_info=Informaci\u00f3n de contacto
+contact_organization=Organizaci\u00f3n
+contact_person=Nombre
+contact_position=Cargo
+Contengan=Contengan
+contiene_espacios_en_blanco=Contiene espacios en blanco
+contraste=Contraste
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducci\u00f3n de datos
+coor_geograficas=Coordenadas geogr\u00e1ficas
+coord_system=Sistema de coordenadas
+coordenadas_vacias=Coordenadas vac\u00edas
+coordinates=Coordenadas
+coordinatesContains=contiene
+coordinatesEnclose=incluye
+coordinatesEqual=igual
+coordinatesFullyOutsideOf=est\u00e1 totalmente fuera de
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Cortar
+could_not_find_web_map_context_file=No se pudo encontrar el aarchivo web map context
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=Pa\u00eds
+coverage=Cobertura
+covered_extension=Cobertura de la extensi\u00f3n
+creaction=Creacci\u00f3n
+Crear_Buffer=Crear \u00e1rea de influencia
+Crear_Indice=Crear \u00edndice espacial...
+Crear_Indice_Intro=La creaci\u00f3n de \u00edndices espaciales puede optimizar la realizaci\u00f3n de consultas espaciales.
+Crear_Indice_Pregunta_1=\u00bfDesea crear un \u00edndice espacial para la capa?
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Crear fichero de georreferenciaci\u00f3n (worldfile)
+created_with=Creado con
+creation_date=Fecha de creaci\u00f3n
+credentials=Autenticaci\u00f3n
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/Contiene el pol\u00edgono
+Crucen_con=Crucen con
+Cruz=Cruz
+Cuadrado=Cuadrado
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+cuando_activo=Cuando activo
+current=actual
+current_scale=Escala actual
+cut=Cortar
+Dado_un_campo_de_atributos=Dado un campo de atributos
+data=Datos
+data_origin=Origen de datos
+database=Nombre de la base de datos
+database_connection=Conexi\u00f3n a Base de Datos
+date=Fecha
+datum=Datum
+DBManager=Gestor de Base de datos
+de=de
+De=de
+de\ =de
+de\ 0=de 0
+debe_estar_activada=debe estar activada
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener informaci\u00f3n.
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+decimal_degrees=Grados decimales
+default=Por defecto
+default_name=Capa WFS
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+define_fields=Define los campos
+define_point=Defina el punto
+defined_by_user=Definido por el usuario
+defined_by_view_extent=Usar extensi\u00f3n de la vista
+dehacer=Deshacer
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+deleteText=Borrar texto
+densityfication=Densificaci\u00f3n
+Dentro=dentro del pol\u00edgono
+Dentro_y_fuera=Dentro y fuera del pol\u00edgono
+Derecha=Derecha
+Derecho=Derecho
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar=Desagrupar
+desagrupar_capas=Desagrupar capas
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Orden descendente
+descending_order_tooltip=Ordena por el campo seleccionado en orden descendente
+desconectar=Desconectar
+descripcion=Descripci\u00f3n
+Descripcion=Descripci\u00f3n
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description=Descripci\u00f3n
+description_URL=URL descripci\u00f3n
+desde=desde
+desde_arriba=Desde arriba\:
+desde_izquierda=Desde la izquierda\:
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+Desplazamiento=Desplazamiento
+desviacion_tipica=Desviaci\u00f3n t\u00edpica
+detalles=Detalles
+Detalles=Detalles
+Devuelvo_el_foco_a_=Devuelvo el foco a
+DGNFiles=Ficheros .DGN
+Diferencia=Diferencia
+Diferencia_Introduccion_de_datos=Diferencia. Introducci\u00f3n de datos
+dimension=Dimensi\u00f3n
+dimensiones=Dimensiones
+directorio=Directorio
+directorio_extensiones=Directorio de las extensiones.
+disagregate_layers=Conservar estructura de capas
+Disolver=Disolver
+Disolver._Introduccion_de_datos=Disolver. Introducci\u00f3n de datos
+Disolver_entidades=Disolver entidades
+disordered=Desordenada
+distance_units=Unidades de medida
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir=Distribuir\:
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+divisiones_izquierda=Divisiones a la izquierda
+documento=Documento
+documentos_existentes=Documentos existentes
+downloadColumn=Descarga
+draw_text_only=Dibujar s\u00f3lo el texto
+driver=Driver
+drivers=Drivers
+dxf=dxf
+dxf_files=Ficheros dxf
+Dxffiles=Ficheros .DXF
+dynamic_and_disordered=Coincidencias y Desordenados
+dynamic_and_maintain_order=Coincidencias y Mantener \u00f3rden
+dynamic_and_ordered=Coincidencias y Ordenados
+e-mail=Correo electr\u00f3nico
+edicion=Edici\u00f3n
+edit=Edita
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar v\u00e9rtice
+edit_vertex_=EDITAR V\u00c9RTICE
+editable=Editable
+Editar_leyenda=Editar leyenda
+editar_propiedades=Editar propiedades
+editar_vertices=Editar V\u00e9rtices
+Edition=Edici\u00f3n
+edition_properties=Propiedades de Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando=comando\:\=Execute command\:
+Ejecutando\ comando\:\ =Execute command\:
+el_numero_maximo_de_intervalos_para_este_campo_es=El n\u00famero m\u00e1ximo de intervalos para este campo es
+Elegir_Color=Elegir color
+Elegir_Fuente=Elegir fuente
+elemento_ya_existe=El elemento ya existe
+Elementos_seleccionados_de_la_capa=Elementos seleccionados de la capa
+Elija_una_herramienta_de_analisis=Elija una herramienta de an\u00e1lisis
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=Eliminar columna
+eliminar_extremos=Eliminar extremos
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+elimination=Eliminaci\u00f3n
+ellipse=Elipse
+ellipse_=ELIPSE
+en=en
+en_el_mapa=En el mapa\:
+en_language=Ingl\u00e9s
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=en unidades
+Encuadre=Encuadre
+Encuadre_Vista=Encuadre sobre la vista
+end=Terminar
+end_polygon=Finalizar pol\u00edgono
+endinfo=Estadisticas de finalizaci\u00f3n
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducci\u00f3n de datos
+enlace_vivo=Enlace vivo
+Enlazar_a_fichero_de_texto=Enlazar a ficheros de texto
+Enlazar_a_ficheros_de_imagen=Enlazar a ficheros de imagen
+enter_layer_name=Introducir nombre de la capa
+enter_new_layer_name=Introduzca el nombre de la nueva capa
+enter_path_to_file=Introducir la ruta del fichero
+envelope=Extensi\u00f3n
+equal_intervals=Intervalos iguales
+equidistance=Equidistancia
+error=Error
+Error_abriendo_el_fichero=Error abriendo el fichero
+Error_accediendo_a_los_datos=Error accediendo a los datos
+Error_atributo_no_numerico=Atributo para distancia de buffer no num\u00e9rico
+error_capa_puntos=Error al cargar la capa. Puede que la capa de Georreferenciaci\u00f3n no est\u00e9 activa.
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_chequeando_precondiciones=Error verificando precondiciones
+Error_chequeo_tipo_geometria=Error al chequear el tipo de geometria
+error_comunicacion_servidor=Se ha producido un error comunicando con el servidor
+error_conexion=Error al conectar a la base de datos.
+Error_distancia_buffer=Debes introducir una distancia de buffer
+Error_ejecucion=Error de ejecuci\u00f3n
+Error_entrada_datos=Error de entrada de datos
+error_escritura=No se pudo guardar el proyecto
+Error_escritura_resultados=Error de escritura de resultados
+Error_exportando_SLD=Error exportando SLD
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecuci\u00f3n del geoproceso
+error_file_exists=El fichero ya existe.\u00bfDesea sobreescribirlo?.
+error_file_not_writable=No es posible crear el fichero de salida.
+Error_guardando_la_leyenda=Error guardando la leyenda
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_lectura=No se pudo abrir el proyecto
+Error_offset_no_numerico=Error. Se han introducido valores de desplazamiento no v\u00e1lidos
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_proyecciones_iguales=Error. Las proyecciones de origen y destino son iguales.
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=Error al seleccionar el esquema merge
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Error_spjoinmn_sin_funcion=No has seleccionado ninguna funci\u00f3n resumen para los atributos num\u00e9ricos
+error_writting_file=Error escribiendo el archivo
+errores=Errores
+errores_csv=Incluir los errores en fichero CSV.
+errorFENotSupported=De momento solo se pueden hacer consultas usando la codificaci\u00f3n FILTER ENCODING que no est\u00e1 soportada por el servidor
+errorGetRecords=Se ha producido un error al hacer el getRecords
+errorIsASRWServer=Es un servidor SRW\!
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+errorNotCSWSupportedProtocol=Se ha encontrado el servidor, pero no soporta el protocolo CS-W
+errorNotParsedReply=Error al parsear la respuesta. Se ha encontrado el servidor, pero posiblemente no soporta el protocolo especificado
+errorNotSupportedCapabilities=Error al hacer un GetCapabilities.Esto puede ser debido a dos razones\: O bien ha habido un error al intentar hacer la operaci\u00f3n, o bien el servidor no soporta el protocolo especificado
+errorNotSupportedProtocol=El servidor no soporta el protocolo especificado
+errorNotThesaurusSelected=El protocolo WFS no permite hacer b\u00fasquedas si no se elige un elemento del tesauro
+errorServerException=El servidor ha devuelto una excepci\u00f3n
+errorServerNotFound=No se encuentra el servidor
+errorSOAPProtocol=Error en el protocolo SOAP
+es_country=Espa\u00f1a
+es_language=Espa\u00f1ol
+escala=Escala
+Escala=Escala
+escala_desconocida=Escala desconocida
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada por el usuario
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Espaciado horizontal de la malla
+espaciado_vertical=Espaciado vertical de la malla
+espacio=Espacio\:
+espere=Por favor, espere
+estadisticas=Estad\u00edsticas
+este_por_debajo_de_=Est\u00e9 por debajo de
+este_por_encima_de=Est\u00e9 por encima de
+Esten_contenidos_en=Est\u00e9n contenidos en
+Estilo=Estilo\:
+estilos=Estilos
+Etiqueta=Etiqueta
+Etiquetado=Etiquetado
+Etiquetados=Etiquetados
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas est\u00e1ndar
+exactSentence=Frase exacta
+examinar=Examinar
+Examinar=Examinar
+exploit=Explotar
+exploit_=EXPLOTAR
+export=Exportar
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exportar=Exportar
+exportar_a=Exportar a...
+exportar_ascii=Exportar ASCII
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+exporting_=Exportando
+exportJOP2Title=Exportar a JOP2T
+extend=Alargar
+extend_=ALARGAR
+extension=Extensi\u00f3n
+extension_activada=Extensi\u00f3n activada.
+extensiones=Extensiones
+Extent=Extensi\u00f3n
+extents_no_coincidentes=Extensiones no coincidentes
+factor=Factor
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+fallo_capas=Fallo accediendo a las capas. Las siguientes capas van a ser eliminadas del proyecto
+fallo_crear_conexion=Fallo al crear la conexi\u00f3n
+fallo_crear_pool=Fallo en la creaci\u00f3n del Pool de Conexiones
+fallo_obtener_conexion_existente=Fallo al obtener una conexi\u00f3n ya creada
+fallo_obtener_tablas=Fallo al obtener las tablas de la base de datos
+fallo_realizar_consulta=Fallo al realizar una consulta
+fallo_registrar_conexion=Fallo en registro de una conexi\u00f3n
+family=Familia
+fax=Fax
+feature=Capas
+featureclass=Vectorial
+features_desea_continuar=features, \u00bfdesea continuar?
+featureserver=Servicio vectorial
+feet=Pies
+fichero=Archivo
+Fichero=Archivo
+fichero_existe=Fichero existe
+fichero_incorrecto=Fichero incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+Ficheros_de_cartografia=Ficheros de datos cartogr\u00e1ficos
+Ficheros_SHP=Ficheros SHP
+field=Campo
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+FieldDecimalCount=N\u00famero de decimales
+FieldDefaultValue=Valor por defecto
+FieldLength=Longitud
+FieldName=Nombre
+fields=Campos
+FieldType=Tipo
+file=Archivo
+file_exists=El fichero existe. \u00bfDesea sobreescribirlo?
+file_name=Archivo
+file_version=Versi\u00f3n del fichero
+fill=Rellenar
+filter=Filtro
+filterOnALayer=Filtro sobre una capa
+filterOnAWFSLayer=Filtro sobre una capa WFS
+filtro=Filtro
+final_point=Punto final
+finalizar=Finalizar
+finish=Finalizar
+fit_ArcIms_layer=Ajustar capa ArcIMS
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+fit_WMS_layer=Ajustar capa WMS
+Flatness=Flatness
+Font=Fuente
+forceCoincidencesConfigurationLabel=Forzar a coincidencia
+format=Formato
+formato=Formato
+Formato=Formato
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_de_numero_incorrecto=Formato de n\u00famero incorrecto.
+formato_incorrecto=Formato incorrecto
+formatos=Formatos
+from=Desde
+fuente=Fuente
+Fuente=Fuente
+Fuera=Fuera del pol\u00edgono
+fuera_de_extent=El punto seleccionado est\u00e1 fuera del extent de la imagen
+Funciones_Sumarizacion=Funciones de agrupamiento
+gazetteer_connect=Localizar por Nomencl\u00e1tor
+gazetteer_search=Localizar por Nomencl\u00e1tor
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+gcps_exist="Ya existen puntos de control asociados al raster. \u00bfDesea sobreescribirlos?"
+general=General
+General=General
+Generar_Intervalos=Generar intervalos
+Generate_Tfw_=Generar Tfw\:
+geometry=Geometr\u00eda
+Geometry_types=Tipo de Geometr\u00eda
+GeometryPropertyType=Geometr\u00eda
+Geoprocesos=Geoprocesos
+georaster=Georreferenciaci\u00f3n
+georef=Georreferenciar
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+georreferenciar=Georreferenciar
+gestion_encuadre=Gesti\u00f3n de Encuadres
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+gml_validate_with_schema=Validar el documento con el esquema 
+goto=Hacer un zoom a la b\u00fasqueda
+grado_polinomio=Grado del polinomio
+grados=Grados\:
+Grados=Grados
+Graficos=Gr\u00e1ficos
+Grid=Rejilla
+Grosor_de_linea=Grosor de l\u00ednea
+grosor_linea=Grosor de l\u00ednea\:
+group=Agrupar
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+group_layers=Agrupar capas
+group_layers_option=Agrupaci\u00f3n de capas
+grupo=grupo
+GT2shp=GT2shp
+guardado=Guardado en
+guardar=Guardar
+Guardar=Guardar
+guardar_cambios=\u00bfQuiere guardar los cambios?
+guardar_clave=Guardar clave
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como plantilla
+Guardar_el_zoom_actual=Guardar el zoom
+guardar_leyenda=Guardar leyenda
+Guardar_leyenda=Guardar leyenda
+guardar_proyecto=Guardar proyecto
+guardar_tooltip=Guarda los cambios del proyecto
+Habilitar_etiquetado=Habilitar etiquetado
+hasta=hasta
+height=Alto
+help=Ayuda
+Herramientas=Herramientas
+Herramientas_de_analisis=Herramientas de an\u00e1lisis
+Herramientas_vista=Herramientas de la vista
+hide_grid=Ocultar rejilla
+Hiperenlace=Hiperenlace
+horizontal=Horizontal
+horizontal_space=Espacio horizontal
+host=M\u00e1quina
+hostname=Hostname
+html_in_a_new_view=<HTML>Crea una vista nueva en el proyecto. La nueva vista contendr\u00e1 todas las capas definidas por el fichero.</HTML>
+html_in_other_view=<HTML>A\u00f1ade las capas en la vista que especifique de la lista siguiente\:</HTML>
+html_in_the_current_view=<HTML>A\u00f1ade las capas definidas en el fichero a la vista activa.</HTML>
+Icon_not_found_=No se encontr\u00f3 el icono
+id=ID
+Identificar_Resultados=Identificar resultados
+idioma=Idioma
+Igual_que_la_impresora=Igual que la impresora
+igual_todos_lados=Desplazamiento igual por todos lados.
+image=Imagen
+imagen=Imagen
+Imagen=Imagen
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+imageserver=Servicio de im\u00e1genes
+Implimir=Imprimir
+import=Importar
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+import_layer=Guardar capa en PostGIS.
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+importar=Importar
+importar_extent=Importar el extent actual de la vista
+Imprimir=Imprimir
+in=en
+inches=Pulgadas
+incorrect_option=Opci\u00f3n incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+incorrectNumberOfParametersWritten=N\u00famero incorrecto de par\u00e1metros escritos
+incorrectParameter=Par\u00e1metro incorrecto
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente la capa
+indexar_campos=Indexar campos
+Inferior=Inferior
+info=Informaci\u00f3n
+info_format_not_supported=No se soporta el formato devuelto por el WMS.
+infobreak=Muestra los elementos de la capa usando una gama de colores.
+infodef=Muestra todos los elementos de una capa usando el mismo s\u00edmbolo.
+informacion=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+informaci\u00f3n=ya existente.
+infovalue=Muestra elementos de la capa usando un s\u00edmbolo por cada valor.
+Inicializando=Inicializando
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o [3P]
+insert_central_point_polygon=Insertar punto central del pol\u00edgono
+insert_column=Inserta columna
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar \u00faltimo punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point_arc_or_close=Insertar siguiente punto, Arco[A] o Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_line_or_close=Insertar punto siguiente, Linea[N], Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar pol\u00edgono de selecci\u00f3n[E]
+insert_number_sides=Insertar n\u00famero de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner_or_square=Insertar punto de esquina opuesta o Cuadrado[C]
+insert_point_move=Insertar punto de desplazamiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_point_selection=Precise punto de selecci\u00f3n
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius=Precise r\u00e1dio(r)
+insert_radius_or_second_point=Insertar r\u00e1dio o segundo punto
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Precise \u00e1ngulo de rotaci\u00f3n
+insert_row=Insertar fila
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o \u00e1ngulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insert_third_point=Insertar tercer punto
+insertar=Insertar
+Insertar=Insertar
+insertar_cajetin=Insertar cajet\u00edn
+insertar_capa=Insertar capa
+insertar_circulo=Insertar c\u00edrculo
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_escala=Insertar escala
+insertar_fila=Insertar fila
+insertar_imagen=Insertar imagen
+insertar_leyenda=Insertar leyenda
+insertar_linea=Insertar l\u00ednea
+insertar_norte=Insertar norte
+insertar_poligono=Insertar Pol\u00edgono
+insertar_polilinea=Insertar polil\u00ednea
+insertar_punto=Insertar punto
+insertar_recta=Insertar recta
+insertar_rectangulo=Insertar rect\u00e1ngulo
+insertar_texto=Insertar texto
+insertar_vista=Insertar vista
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del pol\u00edgono
+inteligentSearch=B\u00fasqueda inteligente
+inteligentSearchAscii=Todas las formas de la palabra
+inter_arc=Arco interno
+inter_line=L\u00ednea interna
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+internal_polygon_=Pol\u00edgono interno
+Interseccion=Intersecci\u00f3n
+Interseccion._Introduccion_de_datos=Intersecci\u00f3n. Introducci\u00f3n de datos
+Intersecten_con=Intersecten con
+interval=Intervalo
+intervalo=intervalo
+Intervalo=Intervalo
+Intervalos=Intervalos
+Intervalos_equidistantes=Intervalos equidistantes.
+Intervalos_por_rupturas_naturales=Intervalos por rupturas naturales.
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito en el c\u00edrculo[I] o Circunscrito[C]<C>
+intro_tablename=Introduzca el nombre de la tabla a crear. AVISO\: Si existe la tabla, se borrar\u00e1.
+introduce_nombre=Introduce el nuevo nombre
+Introducir_valores_desplazamiento=Valores de desplazamiento.
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_intervalo_deseado=Introduzca el intervalo deseado
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=Valor inv\u00c3\u00a1lido para el intervalo
+invert_selection=Invertir selecci\u00f3n
+invoke=Invoca
+is_required=es obligatorio
+Italic=Cursiva
+Izquierda=Izquierda
+Izquierdo=Izquierdo
+jComboBoxItemsSeekerConfigurableTestingByTheUser_frameTitle=Testeo del componente JComboBoxItemsSeekerConfigurable
+join=Unir
+join_=UNIR
+jOPMessageFileDoesntExists=El archivo fuente no existe
+jOPMessageFileWithoutReadPermissions=No tienes permisos de lectura para leer el fichero fuente
+jOPMessageIncorrectFile=El archivo fuente no es un fichero
+jpg=Ficheros JPEG
+Juntar=Juntar
+Juntar._Introduccion_de_datos=Juntar. Introducci\u00f3n de datos
+KeyMapping.Caracter_no_valido=Car\u00e1cter no v\u00e1lido\:
+keywords=Palabras clave
+keyWords=Palabras clave
+kilometros=Kil\u00f3metros
+Kilometros=Kil\u00f3metros
+language=Idioma
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+last=Anterior
+lastUpdateDate=Fecha de \u00faltima actualizaci\u00f3n
+latitud=Latitud
+Launcher.config_mal_formado=. Fichero 'config.xml' mal formado
+Launcher.config_no_encontrado=. Fichero 'config.xml' no encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Dependencia no resuelta en plugin
+Launcher.Dos_skin_extension=Dos skin-extension. Usamos el \u00faltimo
+Launcher.Error_con_las_librerias_del_plugin=Error con las librer\u00edas del plugin
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+Launcher.Error_instanciando_la_extension=Error instanciando la extensi\u00f3n
+Launcher.Error_localizando_la_clase_de_la_extension=Error localizando la clase de la extensi\u00f3n
+Launcher.Hay_dependencias_circulares=Hay dependencias circulares entre los plugins
+Launcher.Ignorando_el_directorio=Ignorando el directorio
+Launcher.labelset_class=No se pudo encontrar la clase de las etiquetas (labelset)
+Launcher.look_and_feel=No se pudo poner el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No se encontr\u00f3 la clase de la extensi\u00f3n
+Launcher.No_se_encontro_la_clase_mdi_manager=No se encontr\u00f3 la clase mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No se pudo acceder a la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No se pudo guardar la configuraci\u00f3n de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No se pudo instanciar la clase mdi manager
+Launcher.No_se_puede_acceder_a=No se puede acceder a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Se produjo un error guardando la configuraci\u00f3n de los plugins
+Launcher.Two_extensions_with_the_same_priority=Dos extensiones con la misma prioridad, s\u00f3lo se cargar\u00e1 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00faes con la misma posici\u00f3n, s\u00f3lo se cargar\u00e1 uno
+layer=Capa
+Layer=Capa
+layer_abstract=Resumen de la capa
+layer_name=Nombre de la capa
+layer_not_queriable=El layer no es interrogable
+layer_not_queryable=no acepta este tipo de peticiones
+layer_scale_status=Estado de los l\u00edmites de escala
+layer_title=T\u00edtulo de la capa
+layer_was_already_added=La capa ya se hab\u00eda a\u00f1adido
+layerName=Nombre de la capa
+LayerName=Nombre de la capa
+layers=Capas
+layers_in_other_view=Capas en la vista que yo elija
+layers_in_the_current_view=Capas en la vista actual
+layerType=Tipo de geometr\u00eda
+legend=Leyenda
+length=Tama\u00f1o
+length_of_field=Longitud de campo
+leyenda=Leyenda
+Leyenda=Leyenda
+leyenda_campo_unido=Se est\u00e1 utilizando un campo de la uni\u00f3n en la leyenda (y/o etiquetado). Cambie la leyenda antes de quitar la uni\u00f3n, por favor.
+Leyenda_Por_Defecto=Leyenda por defecto
+line=L\u00ednea
+line_=L\u00cdNEA
+line_type=Tipo l\u00ednea
+linea=L\u00ednea
+Linea=L\u00ednea
+linea_grafica=L\u00ednea gr\u00e1fica
+lineal_directo=Lineal directo
+linf_der=Inf Der
+link=Enlace
+Link=Enlace
+linkColumn=P\u00e1gina Web
+linkError=Ha ocurrido un error al cargar el enlace
+linkLoad=Carga de un recurso web
+load_from_xml=Cargar desde fichero XML (.rmf)
+loadWMS=Carga de WMS
+localizador=Localizador
+Localizador_por_atributo=Localizador por atributo
+localize=Localizar
+location=Ubicaci\u00f3n
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+log=Log
+login_exit=Salida
+login_invalid_user=Usuario no v\u00c3\u00a1lido
+login_name=Nombre
+login_ok=Ok
+login_password=Contrase\u00c3\u00b1a
+logo_URL=URL logotipo
+longitud=Longitud
+lowerCoordinates=Inferiores
+lppp=ppp
+lsup_izq=Sup Izq
+m/pixel=metros/pixel
+maintain_order=Mantener \u00f3rden
+malla_activada=Malla activada
+manage_fields=Modificar estructura de tabla
+mantainold=Eliminar las busquedas anteriores
+mantener_intervalo=Mantener intervalo
+map_context_file_error=Error en el archivo Web Map Context
+map_extent=Extensi\u00f3n
+map_size_in_pixels=Tama\u00f1o del mapa (p\u00edxeles)
+map_units=Unidades de mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco de la vista
+margenes=M\u00e1rgenes\:
+Mas_100=El n\u00famero de valores es superior a 100, y no aporta informaci\u00f3n
+mas_de_100_simbolos=M\u00e1s 100 de s\u00edmbolos no suelen aportar informaci\u00f3n en un plano.
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+max_no_of_pixels=N\u00famero m\u00e1ximo de p\u00edxels
+max_scale=Escala m\u00e1x
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+maximo=M\u00e1ximo
+Maximo=M\u00e1ximo
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Error no capturado por el usuario
+MDIFrame.quiere_salir=\u00bfEst\u00e1 seguro de que quiere salir?
+MDIFrame.salir=Salir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No se encontr\u00f3 ninguna extensi\u00f3n 'skin' entre los plugins
+media=Media
+Media=Media
+medir_area=Medir \u00e1rea
+medir_distancias=Medir distancias
+Mensaje_buffer=Calculando \u00e1reas de influencia...
+Mensaje_clip=Geoproceso recortar...
+Mensaje_convexhull=Geoproceso convex hull...
+Mensaje_difference=Geoproceso diferencia...
+Mensaje_dissolve=Geoproceso dissolve....
+Mensaje_enlace_espacial=Geoproceso enlace espacial...
+Mensaje_interseccion=Geoproceso intersecci\u00f3n...
+Mensaje_juntar=Geoproceso juntar...
+Mensaje_primera_pasada_union=Calculando intersecciones...
+Mensaje_procesando_buffer=Generando buffers...
+Mensaje_procesando_buffer2=Disolviendo buffers...
+Mensaje_procesando_clip_primero=Calculando pol\u00edgono de recorte
+Mensaje_procesando_clip_segundo=Recortando geometrias
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_dissolves=Dissolviendo geometrias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_procesando_interseccion=Calculando intersecciones...
+Mensaje_procesando_juntar=Juntando geometrias...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+Mensaje_union=Geoproceso union...
+Messages._no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+metadata_catalog=B\u00fasqueda de Geodatos - Conexi\u00f3n
+metadata_tree=\u00c1rbol del Metadato
+metadatos=Metadatos
+meters=Metros
+method=Operaci\u00f3n
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Millas
+min_scale=Escala m\u00edn
+minimo=M\u00ednimo
+Minimo=M\u00ednimo
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+minx=min.x
+miny=min.y
+modificar=modificar
+modification_date=\u00daltima fecha de modificaci\u00f3n
+modify=Modificar
+mosaico_tooltip=Mosaico tooltip
+Mostrar_Contorno=Mostrar contorno
+mostrar_descripcion=Mostrar descripci\u00f3n
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_puntos=Mostrar numeraci\u00f3n
+mostrar_rejilla=Mostrar rejilla
+Mostrar_siempre=Mostrar siempre
+mostrar_unidades=Mostrar unidades
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_elements=Desplazar elementos
+Move_from_view=Mover puntos desde la vista
+move_handlers=Desplazar handlers
+move_layer_down=Mover abajo
+move_layer_up=Mover arriba
+Mover_geo=Mover imagen a georreferenciar
+msg_save_raster=Se va a cancelar la operaci\u00f3n. \u00bfDesea continuar?
+mtspixel=Mts/pixel
+muestra=Muestra
+Muestra_atributos=Muestra los atributos de las capas seleccionadas.
+muestra_consola_tooltip=Muestra la consola
+Muestra_los_atributos_de_las_capas_seleccionadas=Muestra los atributos de las capas seleccionadas
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Muestra los elementos de la capa usando un s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Muestra los elementos de la capa usando una gama de colores en funci\u00f3n del valor de un determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Muestra todos los elementos de una capa usando el mismo s\u00edmbolo
+multi_type=Tipo m\u00faltiple
+MultiLineStringPropertyType=Multil\u00ednea
+multiple_value=Valor m\u00faltiple
+multiples_intervalos=M\u00faltiples intervalos
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+MultiPointPropertyType=Multipunto
+MultiPolygonPropertyType=Multipol\u00edgono
+must_specify_a_file=Debe especificar un fichero de destino.
+name=Nombre
+natural_intervals=Intervalos naturales
+navegacion=Navegaci\u00f3n
+navegacion_vista=Navegaci\u00f3n vista
+nearest_point=Punto m\u00e1s cercano
+necesita_un_tema_activo=Necesita una capa activa
+necesita_un_tema_vectorial_activo=Necesita un tema vectorial activo
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new=Nuevo
+New=Field\=Nuevo campo
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+new_layer=Nueva capa
+new_layer_name=Nombre de la nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next=Siguiente
+Next=Siguiente
+next_point_or_end=Siguiente punto o finalizar[E]
+next_previous_add_del_cancel=Punto, Siguiente v\u00e9rtice[S], Anterior[A], A\u00f1adir[I] o Eliminar[E]
+ninguna_impresora_configurada=Ninguna impresora configurada
+Nivel_de_transparencia=Nivel de transparencia
+no=No
+NO=NO
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=No hay lista de idiomas preferidos. Quiza olvido inicializar la clase
+no_activos=No activos
+no_adjust_grid=No ajustar a la rejilla
+No_de_intervalos=N\u00ba de intervalos
+no_es_posible_aplicar_leyenda_vacia=No es posible aplicar la leyenda vac\u00eda.
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=No existe writer para este formato de capa o no tiene permisos de escritura. Los datos no se guardaran. \u00c2\u00bfDesea continuar?.
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quiz\u00e1 olvid\u00f3 inicializar la clase.
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_hay_ninguna_capa_seleccionado=No hay ninguna capa seleccionada
+no_layers_found=No hay capas disponibles
+No_mostrar=No mostrar la capa cuando la escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa cuando la escala
+no_puede_continuar=No puede continuar.
+No_reconocido=No reconocido
+No_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+No_Shape=Este Layer no es de tipo Shape
+No_usar_buffer_redondeado=No usar borde redondeado
+no_visibles=No visibles
+nombre=Nombre
+Nombre=Nombre
+nombre_capa=Nombre de la capa
+nombre_cobertura=Nombre cobertura
+nombre_feature=Nombre de la Feature
+nombre_no_valido=Nombre no v\u00e1lido
+Nombre_que_se_le_dara_al_zoom=Nombre que se le dar\u00e1 al zoom
+nombre_sesion=Nombre de la sesi\u00f3n
+Nombres=Nombres
+none=None
+none_selected=Ninguno seleccionado
+normal=Normal
+north=Norte
+not_available=No disponible
+not_visible=No visible
+Nueva_tabla=Nueva tabla
+nuevo=Nuevo
+Nuevo_conjunto=Nuevo conjunto
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+nuevo_proyecto=Nuevo proyecto
+nuevo_tamano_fuente=Nuevo tama\u00f1o de fuente\:
+nuevo_tooltip=Crea un nuevo proyecto
+num_bandas=N\u00famero de bandas
+num_columnas=N\u00famero de columnas
+num_filas=N\u00famero de filas
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+Numero_anillos_concentricos=N\u00famero de anillos conc\u00e9ntricos
+Numero_de_elementos_seleccionados=N\u00famero de elementos seleccionados
+Numero_de_segmentos_por_cuadrante=N\u00famero de segmentos por cuadrante
+numero_decimales_mostrar=N\u00famero decimales
+numero_incorrecto=N\u00famero incorrecto
+N\u00fam_intervalos=N\u00famero de intervalos
+object=Objeto
+objectsCreation=Creacci\u00f3n de Objetos
+Obtener_mas_proximo=Usar el mas pr\u00f3ximo
+of=de
+offline=Desconectado
+ogc_mapcontext_file=OGC Web Map Context
+ok=Aceptar
+Ok=Aceptar
+online=Conectado
+onlyOneColorOnTextConfigurationLabel=Texto s\u00f3lo de un color
+onSharpening=Activar pansharpening
+opacidad=Opacidad
+opciones=Opciones
+open_first_time=Abrir con la vista
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operaci\u00f3n cancelada
+Operacion_de_overlay=Operaciones de solape
+Operaciones_adicionales=Operaciones adicionales
+optinos.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options=Opciones
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contrase\u00f1a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.layout.paper_properties.landscaped=Apaisado
+options.layout.paper_properties.paper_direction=Orientaci\u00f3n del papel
+options.layout.paper_properties.portrait=Normal
+options.layout.paper_properties.title=Propiedades y tama\u00f1o del papel
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+options.paper_properties.title=Propiedades y tama\u00f1o del papel
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+ordered=Ordenada
+orientacion=Orientaci\u00f3n\:
+origen_de_datos=Origen de datos
+Origen_de_datos=Origen de datos
+Origen_de_Datos=Origen de datos\:
+Otros=Otros
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del pol\u00edgono
+out_rectangle=Fuera del rect\u00e1ngulo
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+owner=Propietario
+page=P\u00e1gina
+paint=Dibujar el resultado
+parameters=Par\u00e1metros
+parametros=Par\u00e1metros
+Parametros=Par\u00e1metros
+parte1=Parte 1
+parte2=Parte 2
+password=Clave
+paste=Pegar
+paste_elements=Pegar elementos
+path=Ruta
+pdf=Pdf
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+Perimetro=Per\u00edmetro
+period=Periodo
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar los elementos del mapa con el valor de un determinado campo
+Personalizado=Personalizado
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+Pies=Pies
+pila_de_comandos=Pila de comandos
+pixel_point=Punto de pixel
+pixeles=p\u00edxeles
+pixels=p\u00edxeles
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+plegar_despl=Plegar/Desplegar
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos clases con el mismo nombre en el plugin
+PluginClassLoader.Error_reading_file=Error leyendo fichero\:
+pluginNotFound=No tienes ninguna extensi\u00f3n para cargar recursos de este tipo
+pluginNotFoundTitle=Carga de capas
+PluginServices.Bug=en el c\u00f3digo\=Error de la aplicaci\u00f3n
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Bug_en_el_codigo=Bug en el c\u00f3digo
+PluginServices.Error=grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n\=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicacion=Error grave de la aplicaci\u00f3n. Es conveniente que guarde sus datos y salga de la aplicaci\u00f3n
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Error grave en la aplicaci\u00c3\u00b3n.
+PluginServices.No_se_encontro_el_recurso_de_traducciones=No se encontr\u00f3 el recurso de traducciones
+PluginServices.No_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No se pudo poner el reloj de arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No se pudo restaurar el cursor del rat\u00f3n
+PluginServices.Procesando=Procesando...
+png=Ficheros png
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+PointPropertyType=Punto
+poligono=Pol\u00edgono
+polilinea=polil\u00ednea
+polygon=Pol\u00edgono
+polygon_=POL\u00cdGONO
+polygon_type=Tipo Pol\u00edgono
+polyline=Polil\u00ednea
+polyline_=POLIL\u00cdNEA
+poner_capas_a=Poner capas a ...
+poner_temas_a=Poner capas a ...
+por_debajo_de=por debajo de\:
+por_encima_de=por encima de\:
+Por_favor_active_el_tema=Por favor active la capa
+Por_favor_active_la_capa=Por favor active la capa
+posicion_linea=Posici\u00f3n de la l\u00ednea
+postcode=C\u00f3digo postal
+postgis=PostGIS
+postgisColumn=Postgis
+postgisError=Ha ocurrido un error al cargar la base de datos
+postgisLoad=Carga de Postgis
+precision=Precisi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferences=Preferencias...
+Preferences=Preferencias
+preferences.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+preferences.foldering.template_folder=Carpeta de plantillas
+preferences.foldering.title=Carpetas
+preferencias=Preferencias
+Preferencias=Preferencias
+preparar_pagina=Preparar p\u00e1gina
+Preparar_pagina=Preparar p\u00e1gina
+presentacion=Presentaci\u00f3n
+previous=Anterior
+previsualizacion=Previsualizaci\u00f3n
+Previsualizacion=Previsualizaci\u00f3n
+Previsualizacion_de_simbolo=Previsualizaci\u00f3n de s\u00edmbolo
+primero=Primero
+prioridad=Prioridad
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+proofs=Pruebas
+properties=Propiedades
+property=Propiedad
+propiedad=Propiedad
+propiedades=Propiedades
+propiedades_cajetin=Propiedades del cajet\u00edn
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+Propiedades_de_la_Capa=Propiedades de la capa
+propiedades_del_tema=Propiedades de la capa
+Propiedades_del_Tema=Propiedades de la capa
+Propiedades_escala_grafica=Propiedades de la escala
+propiedades_grafico=Propiedades del gr\u00e1fico
+propiedades_mapa=Propiedades del mapa
+propiedades_marco_imagenes=Propiedades del marco de im\u00e1genes
+propiedades_marco_leyenda=Propiedades del marco de la leyenda
+propiedades_marco_vista=Propiedades del marco de la vista
+propiedades_raster=Propiedades del r\u00e1ster
+propiedades_sesion=Propiedades de la sesi\u00f3n
+propiedades_tabla=Propiedades de la tabla
+propiedades_tema=Propiedades de la capa
+Propiedades_texto=Propiedades del texto
+propiedades_vista=Propiedades de la vista
+props=Propiedades
+protocolsGroup=Protocolos
+provider=Proveedor
+Proximidad=Proximidad
+Proximidad_Desc=Geoprocesos que realizan an\u00e1lisis de proximidad o corredor.
+Proyeccion_Actual=Proyecci\u00f3n Actual
+Proyeccion_Destino=Proyecci\u00f3n Destino
+Proyecciones=Proyecciones
+prueba_conexion=Prueba de la conexi\u00f3n
+ps=Ps
+puerto=Puerto
+Pulgadas=Pulgadas
+punto=Punto
+puntos=Puntos
+purpose=Prop\u00f3sito
+pwd=Contrase\u00f1a
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=\u00bfEst\u00e1 seguro de que quiere continuar?
+quitar=Quitar
+Quitar=Quitar
+Quitar_capa=Quitar capa
+quitar_enlaces=Quitar enlaces
+Quitar_todos=Quitar todos
+Quitar_Todos=Quitar todos
+quitar_uniones=Quitar uniones
+rango_de_escalas=Rango de escalas
+Rango_de_escalas=Rango de escalas
+raster=Raster
+raster_layer=Capa raster
+Rasterfiles=Ficheros r\u00e1ster
+realce=Realce
+realces=Realces
+realmente_desea_guardar=\u00bfRealmente desea guardar?
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+Recortar=Recortar
+Recortar._Introduccion_de_datos=Recortar. Introducci\u00f3n de datos
+recorte=Recorte
+recorte_colas=Recorte de colas
+recorte_vista=Recorte a vista
+recta=Recta
+rectangle=Rect\u00e1ngulo
+rectangle_=RECT\u00c1NGULO
+rectangulo=Rect\u00e1ngulo
+recuento=Recuento
+Recuperar_leyenda=Recuperar leyenda
+Recuperar_y_eliminar_otros_zoom=Recuperar y eliminar otros zooms
+Recursos=Disponibles\=Recursos Disponibles
+Recursos\ Disponibles=Recursos Disponibles
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+reference_system=Sistema de Referencia
+refrescar=Refrescar
+refresh_capabilities=Refrescar cach\u00e9
+refresh_capabilities_tooltip=Marque esta casilla para sobreescribir los datos anteriores.
+registros=Registros
+registros_seleccionados_total=Total registros seleccionados
+rehacer=Rehacer
+rellenar_marco_vista=Rellenar marco de la vista
+relleno=Relleno\:
+remove=Quitar
+remove_all=Quitar todas
+remove_column=Elimina columna
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+renombrar=Renombrar
+repeated_layer_was_not_added=No se a\u00f1adi\u00f3 la capa repetida
+Reproyeccion._Introduccion_de_datos=Reproyecci\u00f3n. Introducci\u00f3n de datos
+Reproyectar=Reproyectar
+reproyectar_aviso=La proyecci\u00f3n de la capa no es igual que la de la vista.\nAVISO\: Puede ser inexacto con algunas transformaciones.\nPor favor, lea la documentaci\u00f3n.
+reproyectar_pregunta=\u00bfDesea reproyectar?
+reset=Resetear
+resolucion=Resoluci\u00f3n
+resolucion_resultado=Resoluci\u00f3n del resultado\:
+resolution=Resoluci\u00f3n
+resourceLinkColumn=Enlace
+resourceShowColumn=Ver
+resourceTypeColumn=Tipo
+respuesta_error_servidor=No se ha podido obtener la cobertura
+resto_valores=Resto de valores
+restore=Restaurar
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+restrictArea=Restringir el area de b\u00fasqueda
+resultOf=Resultado de
+results=Resultados
+resutsByPage=Resultados por p\u00e1gina
+retry=Reintentar
+return=Volver
+rootName=Ra\u00edz
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotaci\u00f3n
+salir=Salir
+Salir=Salir
+salir_tooltip=Salir
+salvar=Salvar
+salvar_raster=Salvar a raster georreferenciado.
+Sample=Ejemplo
+save_to_ascii=Exportar tabla de puntos a fichero de texto.
+save_to_xml=Salvar a fichero XML (.grf)
+scale=Escalar
+scale_=ESCALAR
+scale_limits=L\u00edmites de escala
+scale_limits_status=Estado de los l\u00edmites de escala
+scaleAny=cualquiera
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=<5.000
+Scripting=Scripting
+Se_han_encontrado_capas_erroneas_en=Se han encontrado varias capas erroneas en
+Se_superponen_a=Se superponen a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Se va a tener en cuenta para borrar los registros desde
+se_van_a_guardar_=Se van a guardar,
+Sean_disjuntos_a=sean disjuntos a
+Sean_iguales_a=sean iguales a
+search_results=Resultados de la b\u00fasqueda
+searchButton=Buscar
+searchConfigurationLabel=B\u00fasquedas
+seleccion=Selecci\u00f3n
+seleccion_campos=Seleccione los campos
+seleccion_compleja=Selecci\u00f3n compleja
+seleccion_de_campos=Selecci\u00f3n de campos
+seleccion_fuente=Selecci\u00f3n de fuente
+Seleccion_por_capa=Selecci\u00f3n por capa
+Seleccion_por_tema=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+seleccionar_coberturas=Seleccionar coberturas
+seleccionar_CRS=Seleccionar CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar de las capas activas los elementos que\:
+Seleccionar_del_conjunto=Seleccionar del conjunto
+Seleccionar_Directorio=Carpeta con capas...
+seleccionar_fichero=Seleccionar fichero
+Seleccionar_fichero=Seleccionar fichero
+seleccionar_formato=Seleccionar formato
+seleccionar_parametros=Seleccionar par\u00e1metros
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00e1ngulo
+seleccionar_puntos=Seleccionar puntos
+seleccionar_srs=Seleccionar SRS
+seleccionar_tiempo=Seleccionar tiempo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccione el campo por el que enlazar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_fecha=Seleccione una fecha...
+seleccione_tabla=Selecciona la tabla
+seleccione_tabla_a_enlazar=Seleccione la tabla a enlazar
+seleccione_tabla_origen=Seleccione la tabla origen de la join
+select=Seleccionar
+select_all=Seleccionar todo
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_charset_for_writing=Seleccione juego de caracteres para escribir
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_driver=Seleccione el driver
+select_features=Selecciona las capas
+select_fields=Seleccionar campos de la capa
+select_formats=Seleccionar formatos
+select_from_point=Seleccionar a partir de un punto
+select_geom_field=Selecciona el campo que lleva la geometr\u00eda
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_geometry_type=Seleccione el tipo de geometr\u00eda
+select_handlers=Seleccionar handlers
+select_layers=Seleccionar capas raster
+select_none=Quitar todos
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+select_unique_field=Seleccione el campo \u00fanico
+selectAComponent=Seleccione un componente
+selectAMethod=Seleccione una operaci\u00f3n
+selectBandaRefinado=Seleccionar Banda de Refinado
+Selected=Capa seleccionada
+selected_dimensions=Dimensiones seleccionadas
+selected_from_list=Seleccionado de la lista
+selected_layer=Capa seleccionada
+selected_layers=Capas seleccionadas
+selected_parameters=Par\u00e1metros seleccionados
+selected_themes=Temas seleccionados
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_=SELECCIONAR
+selection_color=Color de la selecci\u00f3n
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+server=Servidor
+server_abstract=Resumen del servidor
+server_cant_render_layers=Este servidor no puede renderizar estas capas juntas.\nPruebe a hacer peticiones separadas para cada capa.
+server_doesnt_support_selected_image_format=El servidor no proporciona im\u00e1genes en el formato seleccionado
+server_has_no_services=El servidor no ofrece ning\u00fan servicio
+server_provides_no_srs__scale_data_may_be_wrong=El servidor no proporciona sistema de coordenadas. La informaci\u00f3n sobre escalas puede ser err\u00f3nea.
+server_timeout=Alcanzado m\u00e1ximo tiempo de espera de respuesta
+server_title=T\u00edtulo del servidor
+server_type=Tipo de servidor
+server_version=Versi\u00f3n del servidor
+serverReply=Respuesta del servidor
+serverURL=Introduzca la direcci\u00f3n donde se encuentra el servidor de cat\u00e1logo
+serverURLCat=Introduzca la direcci\u00f3n donde se encuentra el servidor de nomencl\u00e1tor
+service=Servicio
+services=Servicios
+service_does_not_exist=Servicio no disponible
+service_info=Informaci\u00f3n del servicio
+service_name=Nombre del servicio
+service_type=Tipo de servicio
+service_type_not_supported=Tipo de servicio no soportado por el cliente
+servicename_selection_mode=Selecci\u00f3n del nombre del servicio
+servidor=Servidor
+Servidor=Servidor
+servidor_wcs_no_responde=El servidor seleccionado no responde
+set=Establecer
+settings=Ajustes
+settings_editor=Editor de ajustes
+shape_seleccion=Exportar selecci\u00f3n.
+Shapefile=Shapefile
+Shapefiles=Ficheros .SHP
+Show\ Errors=Error
+show_grid=Mostrar rejilla
+show_layer_ids=Mostrar ID de las capas
+show_layer_names=Mostrar nombres de capas
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+shp_files=Ficheros .shp
+si=s\u00ed
+siempre=Siempre
+siguiente=Siguiente
+Siguiente=Siguiente
+simbolo=S\u00edmbolo
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbolo_Unico=S\u00edmbolo unico
+Simbologia=Simbolog\u00eda
+simple=Simple
+simplificar=Simplificar
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+sin_realce=Sin realce
+sin_titulo=Sin t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar el color del borde con el del relleno\:
+single_value=Valor simple
+size=Tama\u00f1o
+Size=Tama\u00f1o
+sobre_la_barra=Sobre la barra
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+Solo_disolver_adyacentes=S\u00f3lo disolver adyacentes.
+Solo_para_capas_vectoriales=S\u00f3lo para capas vectoriales
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+splain=Curva
+SplashWindow.Iniciando=Iniciando...
+square=Esquina
+srs=Srs
+start_edition=Comenzar edici\u00f3n
+startConfigurationLabel=Inicio
+state_or_province=Estado/Provincia
+statistics=Estad\u00edsticas
+status=Estado
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3n iniciada
+stop_edition=Terminar edici\u00f3n
+stretch=Estirar
+stretch_=ESTIRAR
+style=Estilo
+Style=Estilo
+Subir_capa=Subir capa
+Sum=Sumatorio
+suma=Suma
+Superior=Superior
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symbol_selector=Selector de simbolog\u00c3\u00ada
+symmetry=Simetr\u00eda
+symmetry_=SIMETR\u00cdA
+S\u00edmbolo=S\u00edmbolo
+Tabla=Tabla
+Tabla_de_Atributos=Tabla de atributos
+Tabla_de_prueba=Tabla de prueba
+tablas=Tablas
+Tablas=Tablas
+table=Tabla
+tag=tag
+tamano=Tama\u00f1o\:
+tamano_metros=Tama\u00f1o en metros
+tamano_pagina=Tama\u00f1o de p\u00e1gina\:
+tamano_posicion=tama\u00f1o/posici\u00f3n
+tamanyo_borde=Tama\u00f1o del borde
+tamanyo_fuente=Tama\u00f1o de fuente
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+tarea_en_progreso=Tarea En progreso
+telephone=Tel\u00e9fono
+tema=Capa
+Tema=Capa
+terminar=Terminar
+Terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+terminate=Terminar
+test=Test
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+test_TableFilterQueryJPanel_title=Test TableFilterQueryJPanel 
+testJComboBoxItemsSeekerErrorMessage=Error de ejecuci\u00f3n en el componente JComboBoxItemsSeeker
+testJComboBoxItemsSeekerErrorTitle=Error
+text_preview_text=Vista previa
+texto=Texto
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+the_scale=Escala
+theme=Capa
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_layer_was_already_added=Esta capa ya se hab\u00eda a\u00f1adido
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+Tiempo=Tiempo
+Tile=Mosaico
+tile_tooltip=Organiza las ventanas en mosaico
+time=Tiempo
+timeout=Timeout
+tipo_dato=Tipo dato
+tipo_de_intervalo=Tipo de intervalo
+Tipo_de_intervalos=Tipo de intervalos
+tipo_de_leyenda=Tipo de leyenda
+Tipo_de_leyenda=Tipo de leyenda
+Tipo_de_linea=Tipo de linea
+tipo_fichero_proyecto=Fichero de proyecto gvSIG (*.gvsproj)
+tipo_leyenda=Ficheros de tipo leyenda (*.GVL)
+tipo_linea=Tipo de L\u00ednea\:
+Tipo_no_reconocido=Tipo no reconocido
+tipo_relleno=Tipo de Relleno\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+title=T\u00edtulo
+titulo=Gestor de proyectos
+titulo_confirmar=Confirmaci\u00f3n
+titulo_consola=Consola de informaci\u00f3n
+titulo_fframetext=T\u00edtulo del campo de texto
+to=Hasta
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+toda_la_tabla=Toda la tabla
+todos=Todos
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+tooltips_enabled=Tool tips activas
+Topology=Topolog\u00c3\u00ada
+Toquen=toquen
+total=Total
+transparencia=Transparencia
+Transparencia=Transparencia
+transparencia_pixel=Transparencia por pixel
+Triangulation=Triangulaci\u00c3\u00b3n
+Triangulo=Tri\u00e1ngulo
+trim=Recortar
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+type=Tipo
+ultimo=\u00daltimo
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Debe seleccionar al menos una capa.
+Unable_to_find_icon=No se pudo encontrar el icono
+unable_to_findout_server_version=No se pudo determinar la versi\u00f3n del servidor
+unable_to_findout_service_type=No se pudo determinar el tipo de servicio
+undo=Deshacer
+undo_error=Error al deshacer un comando
+ungroup=Desagrupar
+unidades=Unidades\: 
+Unidades=Unidades\: 
+Union=Uni\u00f3n
+Union._Introduccion_de_datos=Uni\u00f3n. Introducci\u00f3n de datos
+unite_separate=Unir/Separar
+units=Unidades
+unknown=Desconocido
+unknown_response_format=Formato de respuesta desconocido
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versi\u00f3n de Web Map Context no soportada
+unsupported_version=Versi\u00f3n no soportada
+untitled=Sin t\u00edtulo
+update_catalog=Refrescar lista de servicios
+upperCoordinates=Superiores
+url=url
+us_country=Estados Unidos
+usar_georeferenciacion_de_la_imagen=Usar georeferenciaci\u00f3n de la imagen
+Usar_indice_espacial=Usar \u00edndice espacial
+Usar_los_campos_de_la_capa=Usar los campos de la capa
+usar_marco=Usar marco
+usar_rango=Usa un rango
+Usar_solamente_los_elementos_seleccionados=Usar solamente los elementos seleccionados
+usar_titulo=Usar t\u00edtulo
+Use=Esta herramienta crea una capa virtual para realizar etiquetado avanzado, bas\u00e1ndose en una capa existente. Cambia la visualization de la capa selecctionada, mostrando uno de los valores de sus campos.
+use_custom_size=Tama\u00f1o personalizado
+use_full_extent=Usar extensi\u00f3n total
+use_interpolation_method=Usar metodo de interpolaci\u00f3n
+use_view_size=Tama\u00f1o de la vista
+useHighLightConfigurationLabel=Usar subrayado
+username=Usuario
+usuario=Usuario
+utilizar_margenes_impresora=Utilizar m\u00e1rgenes de la impresora.
+vacia=Vac\u00eda
+valor=Valor
+Valor=Valor
+Valor_azul=Valor Azul
+Valor_Bandas=Valor bandas
+valor_pixel=Valor de pixel
+Valor_rojo=Valor Rojo
+Valor_verde=Valor Verde
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+Valores_Unicos=Valores \u00fanicos
+value=Valor
+value_not_found=No se encontr\u00f3 el valor
+varianza=Varianza
+vector_layer=Capa vectorial
+vector_type=Tipo vectorial
+vectorial=Vectorial
+ventana=Ventana
+Ventana=Ventana
+ventana_proyecto=Ventana de proyecto
+Ver=Ver
+ver_error_capa=Ver errores
+ver_tabla_atributos=Ver Tabla de atributos
+ver_tags=Ver
+ver_tooltip=Muestra la ventana de proyecto
+version=Versi\u00f3n
+version_conflict=Conflicto de versi\u00f3n
+vertical=Vertical
+vertical_space=Espacio vertical
+vertices=v\u00e9rtices
+view=Vista
+visible=Visible
+visibles=Visibles
+Vista=Vista
+vistas=Vistas
+visualizacion=Visualizaci\u00f3n
+Visualizacion=Visualizaci\u00f3n
+visualizar_cuadricula=Visualizar malla
+warning=Aviso
+warning_title=Warning
+warnings=Avisos
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+wcs_properties=Propiedades de WCS
+WCS_properties=Propiedades del WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+wcsColumn=Cobertura
+wcsError=Ha ocurrido un error al cargar la cobertura
+wcsLoad=Carga de WCS
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=Error del servidor wfs
+wfsColumn=Feature
+wfsError=Ha ocurrido un error al cargar la feature
+WFSLayer=Capa WFS
+wfsLoad=Carga de WFS
+where_clause=Cl\u00e1usula where
+width=Ancho
+will_be_truncated=ser\u00e1 truncado
+Window=Ventana
+WMS=WMS
+wms_cant_connect=No ha sido posible realizar la conexi\u00f3n con el WMS
+wms_not_queryable=Este servidor no acepta peticiones de este tipo
+wms_properties=Propiedades WMS
+wms_server_error=Error del servidor WMS
+wms_transparency=Transparencia
+wmsColumn=Mapa
+wmsError=Ha ocurrido un error al cargar el mapa
+WMSLayer=Capa WMS
+wrong_url=Direcci\u00f3n URL no v\u00e1lida
+xmax=xmax
+xmin=xmin
+xOffset=Desplazamiento en X
+xrange=Rango en X
+XYShift=Traslaci\u00f3n 2D
+XYShift._Introduccion_de_datos=Traslaci\u00f3n. Introducci\u00f3n de datos
+XYShift._Progress_Message=Aplicando desplazamiento...
+y_en=y en
+Yardas=Yardas
+yes=Si
+YES=S\u00cd
+ymax=ymax
+ymin=ymin
+yOffset=Desplazamiento en Y
+yrange=Rango en Y
+zone=Huso
+zoom=Zoom
+Zoom=Zoom
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Acercar=Zoom acercar
+Zoom_al_Tema=Zoom a la capa
+Zoom_Alejar=Zoom alejar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre la vista
+zoom_in_factor=Factor zoom m\u00e1s
+Zoom_Mas=Zoom m\u00e1s
+zoom_mas_vista=Zoom m\u00e1s vista
+Zoom_Mas_Vista=Zoom m\u00e1s sobre la vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre la vista
+zoom_out_factor=Factor zoom menos
+Zoom_pixel=Zoom a la resoluci\u00f3n del r\u00e1ster
+Zoom_previo=Extensi\u00f3n anterior
+Zoom_Previo=Zoom previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a lo seleccionado
+Zoom_sgte=Extensi\u00f3n siguiente
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_fr.properties	(revision 42196)
@@ -0,0 +1,1502 @@
+#Translations for language: fr
+#Tue Oct 24 14:07:27 CEST 2006
+(escala_maxima)=(\u00e9chelle maximum)
+(escala_minima)=(\u00e9chelle maximum)
+_(Etiquetas_estandar)=(Etiquettes standard)
+_(Intervalos)=(Intervalles)
+_(Simbolo_unico)=(Symbole unique)
+_(Valores_unicos)=(Valeurs uniques)
+__valenciano=Valenciano
+__espacio_vertical=Espace vertical\:
+__lineas=lignes
+__proyeccion_actual=Projection actuelle\:
+__redimensionar_texto_escala=Redimensionner le texte suivant l'\u00e9chelle de la vue
+__seleccion_de_fuente=S\u00e9lection d'une fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=
+abajo=Descendre
+abrir=Ouvrir
+Abrir=S\u00e9lectionner
+Abrir_Geoproceso=
+Abrir_Imagen=Ouvrir une image
+abrir_plantilla=Ouvrir police
+abrir_proyecto=Ouvrir un projet
+abrir_tooltip=Ouvrir un projet existant
+Abrir_una_capa=Ouvrir une couche
+abstract=R\u00e9sum\u00e9
+accept_tip=
+Accion_Predefinida=Action pr\u00e9d\u00e9finie
+aceptar=Accepter
+Aceptar=Accepter
+acerca_de=A propos de...
+activa_la_ventana=Active la fen\u00eatre
+activar=Activate
+activar_regla=Afficher la r\u00e8gle
+activo=Active
+activos=Toutes actives
+add=Ajouter
+add_field=Ajouter une colone
+add_layer=Ajouter une couche
+add_rows=
+add_vertex=Ajouter un sommet
+addlayer=Ajouter une couche
+address=Adre\u00e7a
+address_type=
+adjust_grid=Ajuster \u00e0 la grille
+adjust_transparency=Ajuster la transparence
+advanced=
+advanced_settings=
+agrupacion=
+agrupar=Grouper
+agrupar_capas=Grouper les couches
+agrupar_graficos=Grouper les graphiques
+agrupar_linea=Grouper les lignes graphiques
+Ajustar_cobertura_wcs=Ajuster couverture WCS
+Ajustar_transparencia=Ajuster la transparence
+ajustes_linea_grafica=Ajuster la ligne graphique
+Al_leer_la_leyenda=A la lecture de la l\u00e9gende
+alerta=Avertissement
+algoritmo=Algorithme
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alignement
+alinear=Aligner
+alinear_graficos=Aligner les graphiques
+allWords=Tous les mots
+alta=Hauteur
+alto=Hauteur
+altura=Hauteur
+Altura_fija_de_texto=Fixe la hauteur du texte
+ambito=Cadre
+ampl_extent=
+Anadir=Ajouter
+Anadir_al_conjunto=Ajouter \u00e0 la s\u00e9lection
+Anadir_capa=Ajouter une couche g\u00e9ographique
+Anadir_Capa=Ajouter une couche g\u00e9ographique
+Anadir_capa_de_eventos=Ajouter une couche g\u00e9ographique de points
+Anadir_tema_de_eventos=Ajouter une couche de localisation ponctuelle
+anadir_titulo=Ajouter un titre
+Anadir_todos=Tout ajouter
+ancho=Largeur
+ancho_alto=Largeur X hauteur
+Ancho_Contorno=Epaisseur du contour
+Ancho_de_linea=Epaisseur de la ligne
+anchura=Largeur\:
+angulo_rotacion=Angle de rotation\:
+anterior=Pr\u00e9c\u00e9dent
+Anterior=Pr\u00e9c\u00e9dent
+anyResult=La requ\u00eate n'a retoun\u00e9 aucun resultat
+anyWord=Tout les mots
+Aplicar=Appliquer
+apply=Appliquer
+Apply=Appliquer
+arc=
+arc_=Arc
+Archivo=Fichier
+Archivos_de_Disco=Fichiers sur le disque
+Area_de_influencia=Zone tampon
+Area_de_influencia_definida_por_un_campo=Zone tampon d\u00e9finie par un champ
+Area_de_influencia_definida_por_una_distancia=Zone tampon d\u00e9finie selon une distance
+area_trabajo=Espace de travail
+Areas_de_influencia=Zone tampon
+Areas_de_influencia._Introduccion_de_datos=Zone tampon. Introduction des donn\u00e9es.
+arriba=Monter
+ascending_order=Ordre ascendant
+ascending_order_tooltip=Classe le champs s\u00e9lectionn\u00e9 par ordre ascendant
+asignar_coordenadas=Affecter les coordonn\u00e9es
+aspect=Configuration de l'aspect
+Atributo=Attribut
+Atributos_Numericos=Attributs num\u00e9riques
+attributeName=
+attributes=Attributs
+attributeType=
+automatico=Automatique
+aviso_sin_extent_de_referencia=Pour utiliser cette option, vous devez disposer d'une couche de r\u00e9f\u00e9rence.
+Ayuda=Aide
+back=Pr\u00e9c\u00e9dent
+Back=Pr\u00e9c\u00e9dent
+background_color=Colour d'arri\u00e8re plan
+baja=Basse
+Bajar_capa=Descendre la couche
+bandas=Bandes
+bands=Bandes
+barra=Barre
+base=Base
+base_datos=Base de donn\u00e9es
+bd=bd
+bmp=Fichiers BMP
+Bold=Gras
+borra_seleccion=Effacer une s\u00e9lection
+borrador=Brouillon
+borrar=Supprimer
+borrar_todos=Supprimer tous les points
+borrar_uno=Supprimer le point s\u00e9lectionn\u00e9
+box=rectangle
+break_=Break
+brillo=Luminosit\u00e9
+brillo_y_contraste=Luminosit\u00e9 et contrate
+browse=
+BRX=BRX
+BRY=BRY
+buffer=Zone tampon
+cajetin=
+calcular_errores=Calcul automatique des erreurs
+Calcular_intervalos=Calculer les intervalles
+calidad=Qualit\u00e9
+Cambio_Color=Changer la couleur
+Cambio_de_estilo=Changer le style
+Cambio_Estilo=Changer de style
+cambio_nombre=Changement de nom
+Cambios_de_estilo=Change le style
+campo=Champ
+Campo=Champ
+campo_altura_texto=Taille du champ textuel\:
+Campo_clasifica=Champ de classification
+Campo_de_clasificacion=Champ de classification
+campo_de_documentos_asociados=Champs de documents associ\u00e9s
+Campo_de_etiquetado=Etiqueter \u00e0 partir d'un champ
+Campo_para_disolver=Champ de regroupement.
+Campos=Champs
+cancel=Annuler
+Cancel=Annuler
+cancel_edition=Annuler l'\u00e9dition
+cancel_tip=
+cancelar=Annuler
+Cancelar=Annuler
+cancelSearchButton=Annuler
+cannotReproject=No es pot reprojectar aquest sistema de refer\u00e8ncia
+cant_connect=Impossible de se connecter
+cant_connect_wfs=
+cantLoad=Impossible de charger la couche WMS
+capa=Couche g\u00e9ographique
+Capa=Couche
+capa_exportada=Couche \u00e0 exporter
+capa_importada=Couche g\u00e9ographique import\u00e9e. Voulez-vous cr\u00e9er un index spatial?
+capas=Couches g\u00e9ographiques
+Capas=Couches g\u00e9ographiques
+Capas_del_directorio=
+Capas_del_localizador=Couches de localisation
+capas_edition_cache=
+capaWMS=CoucheWMS
+caracteres_erroneos=Caract\u00e8res erron\u00e9s dans la couche d'entr\u00e9e.
+cargar=Charger
+cargar_fichero=Charger un fichier
+cargar_leyenda=Charger une l\u00e9gende
+cargar_sin_georef=Charger une image sans g\u00e9or\u00e9f\u00e9rencement
+cartografico=Cartographique
+Cascada=Cascade
+cascada_enable=Au moins une fen\u00eatre doit \u00eatre ouverte
+cascada_tooltip=Organiser les fen\u00eatres en cascade
+catalog_search=Rechercher des g\u00e9odonn\u00e9es
+cathegory=Cat\u00e9gorie
+cathegoryAny=Tous
+cathegoryBiota=Biota
+cathegoryBoundaries=Limites
+cathegoryClimatologyMeteorologyAtmosphere=Climatologie, m\u00e9t\u00e9orologie et atmosph\u00e8re
+cathegoryEconomy=Economie
+cathegoryElevation=Altitude
+cathegoryEnvironment=Environnement
+cathegoryFarming=Agriculture
+cathegoryGeoscientificInformation=Information g\u00e9oscientifique
+cathegoryHealth=Sant\u00e9
+cathegoryImageryBaseMapsEarthCover=Image d'occupation du sol de base pour la terre
+cathegoryInlandWaters=Eaux continentales
+cathegoryIntelligenceMilitary=Intelligence militaire
+cathegoryLocation=Localisation
+cathegoryOceans=Oc\u00e9ans
+cathegoryPlanningCadastre=Plan cadastral
+cathegorySociety=Soci\u00e9t\u00e9
+cathegoryStructure=Structure
+cathegoryTransportation=Transport
+cathegoryUtilitiesCommunication=Communication et utilit\u00e9s
+causa_error_desconocida=Erreur inattendue du serveur
+Centimetros=Centim\u00e8tres
+Centrar_la_Vista_sobre_un_punto=Centrer la vue sur un point
+centrar_punto=
+cerrar=Fermer
+Cerrar=Fermer
+change_before=
+change_behind=
+change_height=
+change_width=
+chooseAttribute=Choisissez un attribut pour r\u00e9aliser la recherche
+circle=Cercle
+circle_=Cercle
+circulo=Cercle
+Circulo=Cercle
+circumscribed=Circonscrit
+city=
+clave=Clef
+clear=Effacer
+close=Fermer
+close_polyline=Fermer la polyligne
+Cobertura_de_datos=Couche g\u00e9ographique
+Cobertura_de_entrada=Couche d'entr\u00e9e
+Cobertura_de_interseccion=Couche d'intersection
+Cobertura_de_recorte=Couche de d\u00e9coupage
+Cobertura_de_salida=Couche de sortie
+Cobertura_para_unir=Couche \u00e0 fusionner
+Coberturas=Couvertures
+Coberturas_de_entrada=Couches d'entr\u00e9e
+coincidir_tamano=Faire co\u00efncider la taille\:
+coincidir_tamanyo=
+colocar_a_margenes=Positionner par rapport aux marges.
+colocar_alrededor_seleccionados=Positionner autour des graphiques s\u00e9lectionn\u00e9s.
+colocar_alrededor_todos=Positionner autour de tous les graphiques.
+colocar_delante=Avant
+colocar_detras=Apr\u00e8s
+color=Couleur \:
+Color_Contorno=Couleur du contour
+Color_de_la_Linea=Couleur de la ligne
+Color_de_Relleno=Couleur de remplissage
+Color_final=Couleur d'arriv\u00e9e \:
+Color_inicial=Couleur de d\u00e9part \:
+Color_inicio=Couleur de d\u00e9part
+color_texto=Couleur du texte\:
+comentarios=Commentaires
+commands_stack=Historique des commandes
+complex_selection=S\u00e9lection complexe
+complex_selection_=S\u00e9lection complexe
+compress=Compression
+concordancia=Concordance
+conectar=Connecter
+conection=Connexion
+conexion_correcta=Connexion correcte
+configuracion_andami_tooltip=Configuration Andami
+configurar=Configurer
+Configurar=Configurer
+configurar_ANDAMI=Fen\u00eatre de configuration d'ANDAMI.
+configurar_localizador=Configurer la vue d'ensemble
+Configurar_localizador=Configurer la vue d'ensemble...
+configurar_todas_las_extensiones=
+confirm_gid=Confirmer gid
+confirmacion=Confirmation
+confirmar_borrar=Confirmer la suppression ?
+connect=
+connect_error=
+connectButton=Connecter
+connection_name=Nom de la connexion
+conservar_escala_visualizacion=Conserver l'\u00e9chelle de la vue
+Consola=Console
+consulta=Requ\u00eate
+contact_info=
+contact_organization=Organitzaci\u00f3
+contact_person=Nom
+contact_position=C\u00e0rrec
+Contengan=Contiennent
+contiene_espacios_en_blanco=
+contraste=Contraste
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introduction des donn\u00e9es
+coor_geograficas=Coordonn\u00e9es g\u00e9ographiques
+coordenadas_vacias=Coordonn\u00e9es vides
+coordinates=Coordonn\u00e9es
+coordinatesContains=contient
+coordinatesEnclose=inclus
+coordinatesEqual=\u00e9gal
+coordinatesFullyOutsideOf=est enti\u00e8rement en dehors de
+copiar=
+copy=Copier
+copy_=Copier
+cortar=
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=
+coverage=
+covered_extension=
+Crear_Buffer=Cr\u00e9er une zone tampon
+Crear_Indice=Cr\u00e9er un index spatial
+Crear_Indice_Intro=La cr\u00e9ation d'index spatiaux peut optimiser la consultation des donn\u00e9es spatiales. 
+Crear_Indice_Pregunta_1=Voulez-vous cr\u00e9er un index spatial pour cette couche ?
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Cr\u00e9er le fichier de g\u00e9or\u00e9f\u00e9rencement (worldfile)
+created_with=Creat amb
+creation_date=Date de cr\u00e9ation
+credentials=Authentification
+cross_circle=Intersect/Contient le cercle
+cross_polygon=Intersect/Contient le polygon
+Crucen_con=Croisent avec
+Cruz=Croix
+Cuadrado=Carr\u00e9
+cuadro_no_asociado=
+cuando_activo=Quand active
+cut=Couper
+Dado_un_campo_de_atributos=Champs d'attributs donn\u00e9
+database=Nom de la base de donn\u00e9es
+de=de
+De=de
+debe_estar_activada=elle doit \u00eatre activ\u00e9
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Vous devez s\u00e9lectionner les couches pour lesquelles vous souhaitez obtenir des informations.
+default_name=Couche WFS
+define_fields=D\u00e9finir les colonnes
+define_point=D\u00e9finir le point
+defined_by_view_extent=
+dehacer=d\u00e9faire
+del=Supprimer
+delete_field=Supprimer une colonne
+densityfication=Densification
+Dentro=int\u00e9rieur du polygone
+Dentro_y_fuera=int\u00e9rieur et exterieur du polygone
+Derecha=Droite
+Derecho=Droit
+desactivar_capa=
+desactivar_puntos=
+desagrupar=Dissocier
+desagrupar_capas=
+desagrupar_graficos=Dissocier les graphiques
+descending_order=Ordre descendant
+descending_order_tooltip=Classe le champs s\u00e9lectionn\u00e9 par ordre descendant
+desconectar=D\u00e9connecter
+descripcion=Description
+Descripcion=Description
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description=Description
+description_URL=
+desde=depuis
+desde_arriba=Depuis le haut\:
+desde_izquierda=Depuis la gauche\:
+desea_borrar_la_capa=
+deshacer=d\u00e9faire
+Desplazamiento=D\u00e9placer
+desviacion_tipica=Ecart type
+detalles=d\u00e9tails
+Detalles=D\u00e9tails
+DGNFiles=Fichiers DGN
+Diferencia=Diff\u00e9rence
+Diferencia_Introduccion_de_datos=Diff\u00e9rence. Introduction des donn\u00e9es
+dimension=Dimension
+dimensiones=Dimensions
+directorio=R\u00e9pertoire
+directorio_extensiones=R\u00e9pertoire des extensions
+disagregate_layers=
+Disolver=Regrouper
+Disolver._Introduccion_de_datos=Regrouper. Introduction des donn\u00e9es.
+Disolver_entidades=Regrouper des entit\u00e9s
+distance_units=Unit\u00e9s de distance
+distribuir=Distribuer \:
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+divisiones_izquierda=Divisions \u00e0 partir de la gauche
+documentos_existentes=Documents existants
+downloadColumn=T\u00e9l\u00e9charger
+driver=Driver
+drivers=Drivers
+dxf_files=Fichiers dxf
+Dxffiles=Fichiers DXF
+e-mail=E-mail
+edicion=\u00e9dition
+edit=\u00e9diter
+edit_vertex=Editer les sommets
+edit_vertex_=Editer les sommets
+editable=
+Editar_leyenda=Editer la l\u00e9gende
+editar_propiedades=Editer les propri\u00e9t\u00e9s
+editar_vertices=\u00e9diter les sommets
+el_numero_maximo_de_intervalos_para_este_campo_es=Le nombre maximum d'intervalles pour ce champ est
+Elegir_Color=Selectionner la couleur
+Elegir_Fuente=Choisir la fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Entit\u00e9s s\u00e9lectionn\u00e9es de la couches
+Elija_una_herramienta_de_analisis=Choisissez un outil d'analyse.
+Eliminar=Supprimer
+eliminar_capa=Supprimer une couche
+eliminar_extremos=Eliminer les extr\u00eames
+eliminar_fila=
+eliminar_punto=Supprimer un point
+eliminar_todos_puntos=Supprimer tous les points
+ellipse=Ellipse
+ellipse_=Ellipse
+en_el_mapa=Dans la carte\:
+En_metros=En m\u00e8tres
+En_pixels=En pixels
+en_unidades=
+Encuadre=Zooms
+Encuadre_Vista=D\u00e9placer
+end=Terminer
+end_polygon=Terminer le polygone
+endinfo=Statistiques
+Enlace_espacial=Jointure spatiale
+Enlace_espacial._Introduccion_de_datos=Jointure spatiale. Introduction des donn\u00e9es.
+enlace_vivo=Lien dynamique
+Enlazar_a_fichero_de_texto=Lier \u00e0 un fichier texte
+Enlazar_a_ficheros_de_imagen=Lier \u00e0 un fichier image
+enter_layer_name=Donner un nom \u00e0 la couche
+enter_path_to_file=Donner le chemin du fichier
+equal_intervals=Intervalles \u00e9gaux
+equidistance=Equidistance
+error=Error
+Error_abriendo_el_fichero=Erreur d'ouverture du fichier
+Error_accediendo_a_los_datos=Erreur d'acc\u00e8s aux donn\u00e9es
+Error_atributo_no_numerico=Les valeurs doivent \u00eatre de format num\u00e9rique.
+error_capa_puntos=Erreur au chargement des couches. 
+Error_capa_vacia=
+Error_chequeando_precondiciones=Les conditions ne sont pas remplies.
+Error_chequeo_tipo_geometria=Erreur au niveau de la g\u00e9om\u00e9trie.
+error_comunicacion_servidor=Il s'est produit une erreur de communication avec le serveur
+error_conexion=Erreur de connexion \u00e0 la base de donn\u00e9es.
+Error_distancia_buffer=Vous devez saisir une distance pour la zone tampon.
+Error_ejecucion=Erreur d'ex\u00e9cution. 
+Error_entrada_datos=Erreur au niveau des donn\u00e9es
+error_escritura=Impossible d'\u00e9crire le fichier
+Error_escritura_resultados=Erreur lors de l'\u00e9criture du r\u00e9sultat.
+Error_exportando_SLD=
+Error_fallo_geoproceso=Erreur lors du g\u00e9otraitement.
+error_file_exists=Le fichier existe d\u00e9j\u00e0. Voulez-vous continuer ?
+error_file_not_writable=Impossible d'\u00e9crire le fichier de sortie.
+Error_guardando_la_leyenda=Erreur en sauvegardant la l\u00e9gende
+Error_guardando_la_plantilla=
+error_lectura=Impossible de lire le fichier
+Error_preparar_escritura_resultados=Erreur lors de l'\u00e9criture des donn\u00e9es.
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=Vous devez sp\u00e9cifier un fichier de resultat.
+Error_spjoinmn_sin_funcion=Vous devez s\u00e9lectionner une fonction d'aggr\u00e9gation pour les attributs num\u00e9riques.
+error_writting_file=
+errores=Erreurs
+errores_csv=
+errorFENotSupported=
+errorGetRecords=Erreur \u00e0 l'issue de l'instruction getRecords
+errorIsASRWServer=Il s'agit d'un serveur SRW\!
+errorNotCSWSupportedProtocol=Serveur trouv\u00e9, cependant le protocol CSW n'est pas support\u00e9.
+errorNotParsedReply=Erreur lors de l'analyse de la reponse. Le serveur a \u00e9t\u00e9 trouv\u00e9 mais il ne supporte pas le protocole sp\u00e9cifi\u00e9.
+errorNotSupportedCapabilities=Erreur avec l'instruction GetCapabilities. Cette erreur peut avoir deux causes \: Ou une erreurs'est produite dans l'op\u00e9ration  ou le serveur ne supporte pas le protocole indiqu\u00e9
+errorNotSupportedProtocol=Le serveur ne supporte pas le protocole indiqu\u00e9.
+errorNotThesaurusSelected=Le protocole WNS ne fonctionne que si vous s\u00e9lectionnez un \u00e9l\u00e9ment du th\u00e9saurus.
+errorServerException=Le serveur a retourn\u00e9 une erreur d'exception
+errorServerNotFound=Le serveur n'existe pas.
+errorSOAPProtocol=Erreur avec le protocole SOAP.
+escala=Echelle
+Escala=Echelle
+escala_maxima=Echelle maximum
+Escala_Maxima=Echelle maximum
+escala_minima=echelle minimum
+Escala_Minima=Echelle minimum
+escala_usuario=Echelle d\u00e9finie par l'utilisateur
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Pas horizontal de la grille
+espaciado_vertical=Pas vertical de la grille
+espacio=Espace\:
+espere=Patientez s.v.p.
+estadisticas=Statistiques
+este_por_debajo_de_=Soit en dessous de
+este_por_encima_de=Soit au dessus de
+Esten_contenidos_en=Sont contenus dans
+Estilo=Style\:
+estilos=Styles
+Etiqueta=Etiquette
+Etiquetado=Etiquetage
+Etiquetados=Etiquettages
+etiquetas=Etiquettes\:
+Etiquetas_estandar=Etiquettes standard
+exactSentence=Phrase exacte
+examinar=Examiner
+Examinar=Parcourir
+exploit=S\u00e9parer
+exploit_=
+export=Exporter
+export_to=
+exportando_features=Export des fonctionalit\u00e9s
+exportar=Exporter
+exportar_a=Exporter vers...
+exportar_ascii=Exporter en ASCII
+exportar_pdf=Exporter en pdf
+exportar_ps=Exportar a ps
+exporting_=Export
+extend=Etendre
+extend_=
+extension=Extension
+extension_activada=Extension activ\u00e9e.
+extensiones=
+Extent=Extension
+extents_no_coincidentes=Les dimmensions de l'image selectionn\u00e9e ne co\u00efncident pas avec celles de l'image d'origine.
+factor=Facteur
+fallo_capas=Erreurs d'acc\u00e8s aux couches. Les couches suivantes seront supprim\u00e9es du projet.
+fallo_crear_conexion=Echec lors de la cr\u00e9ation de la connexion
+fallo_crear_pool=Echec lors de la cr\u00e9ation du Pool de connexion
+fallo_obtener_conexion_existente=Echec pour obtenir une connexion d\u00e9j\u00e0 cr\u00e9\u00e9e
+fallo_obtener_tablas=Echec pour obtenir les tables de la base de donn\u00e9es
+fallo_realizar_consulta=Echec pour r\u00e9aliser une requ\u00eate
+fallo_registrar_conexion=Echec enregistrement connexion
+fax=Fax
+feature=Couches
+features_desea_continuar=
+Fichero=Fichier
+fichero_existe=Le fichier selectionn\u00e9 existe d\u00e9j\u00e0
+fichero_incorrecto=Fichier incorrect
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=Fichiers de donn\u00e9es cartographiques.
+Ficheros_SHP=Fichiers SHP.
+field=Colonne
+fields=Champs
+file=Fichier
+file_exists=Le fichier existe. Voulez-vous l'\u00e9craser ?
+file_name=Nom de fichier 
+file_version=
+filtro=Filtre
+final_point=
+finalizar=Finaliser
+finish=Finaliser
+fit_WCS_layer=
+fit_WFS_layer=
+fit_WMS_layer=Ajuster \u00e0 la couche WMS
+Font=Fonte
+format=Format
+formato=Format
+Formato=Format
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=Format incorrect
+formato_incorrecto=Format incorrect
+formatos=Formats
+from=Depuis
+fuente=Fonte
+Fuente=Fonte
+Fuera=exterieur du polygon
+fuera_de_extent=Le point s\u00e9lectionn\u00e9 est en dehors de la zone d'extension de l'image
+Funciones_Sumarizacion=Fonctions d'aggr\u00e9gation.
+gazetteer_connect=Localisation par toponymes
+gazetteer_search=Localisation par toponymes
+general=G\u00e9n\u00e9ral
+General=G\u00e9n\u00e9ral
+Generar_Intervalos=Calculer les intervalles
+geometry=G\u00e9om\u00e9trie
+Geoprocesos=
+georaster=G\u00e9or\u00e9f\u00e9rencement
+georef=G\u00e9or\u00e9f\u00e9rencer
+georef_file=
+georeferenciado=
+georreferenciar=G\u00e9or\u00e9f\u00e9rencer
+gestion_encuadre=Gestionnaire de positionnement
+Gestor_de_Geoprocesos=
+goto=Atteindre la zone recherch\u00e9e
+grado_polinomio=Degr\u00e9 du polynome
+grados=Degr\u00e9es\:
+Grados=Degr\u00e9es
+Graficos=Graphiques
+Grosor_de_linea=Largeur de la ligne\:
+grosor_linea=Largeur de la ligne
+group=Grouper
+group_graphic_line=
+grupo=
+GT2shp=GT2shp
+guardado=Enregister sous
+guardar=Enregistrer
+Guardar=Enregistrer
+guardar_cambios=Enregistrer les changements ?
+guardar_clave=Enregistrer la clef
+guardar_como=Enregistrer comme...
+guardar_como_plantilla=Garder comme police
+Guardar_el_zoom_actual=Enregistrer le zoom actif
+guardar_leyenda=Enregistrer une l\u00e9gende
+Guardar_leyenda=Enregistrer une l\u00e9gende
+guardar_proyecto=Enregistrer un projet
+guardar_tooltip=Enregistrer le projet
+Habilitar_etiquetado=Etiqueter
+hasta=jusqu'\u00e0
+height=Hauteur
+Herramientas=Outils
+Herramientas_de_analisis=Outils d'analyse
+Herramientas_vista=Fen\u00eatre des outils
+hide_grid=Cacher la grille
+Hiperenlace=Hyperlien
+horizontal=Horizontal
+horizontal_space=
+host=Machine
+hostname=Hostname
+html_in_a_new_view=<HTML>Crea una vista nova al projecte. La nova vista contindr\u00e0 totes les capes definides pel fitxer.</HTML>
+html_in_other_view=<HTML>Afegeix les capes a la vista que especifique de les de la llista seg\u00fcent.</HTML>
+html_in_the_current_view=<HTML>Afegeix les capes definides pel fitxer a la actual vista activa.</HTML>
+id=ID
+Identificar_Resultados=Identifier les r\u00e9sultats
+idioma=Langue
+Igual_que_la_impresora=Identique que l'impression
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+Imagen=Image
+imagen_no_accesible=
+import=Importer
+import_from_ascii=
+import_layer=Importer la couche dans PostGIS.
+import_map_context=Importer des cartes depuis un fichier Web Map Context de l'OGC.
+importar=Importer
+importar_extent=Importer l'extension de la vue
+Imprimir=Imprimer
+in=\u00e0 l'int\u00e9rieur
+incorrect_option=Option incorrect
+incorrect_point=
+incorrect_value=
+Indexando=Indexation...
+Indexando_espacialmente=Indexation spatiale de la couche g\u00e9ographique
+Inferior=Inf\u00e9rieur
+info=Information
+info_format_not_supported=
+infobreak=Montrer les entit\u00e9s de la couche en utilisant une couleur.
+infodef=Montrer les entit\u00e9s de la couche en utilisant le m\u00eame symbole.
+informacion=Propri\u00e9t\u00e9s de l'entit\u00e9 cliqu\u00e9e
+Informacion=
+infovalue=Affiche les entit\u00e9s d'une couche en utilisant un symbole pour chaque valeur
+Inicializando=Initialisation
+initial_warning=
+insert=Ins\u00e9rer
+insert_basis_point=Ins\u00e9rer un point
+insert_central_point_or_3p=Ins\u00e9rer un point central
+insert_central_point_polygon=Ins\u00e9rer le point central du polygone
+insert_column=Ins\u00e9rer une colonne
+insert_destination_point=Donner un point de destination
+insert_distance_another_axis=Donner une distance \u00e0 l'autre axe
+insert_factor_or_reference=Donner un facteur d'\u00e9chelle
+insert_first_point=Ins\u00e9rer le premier point
+insert_first_point_corner=Ins\u00e9rer le premier point de coin
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Ins\u00e9rer le point initial de l'axe de l'ellipse
+insert_last_point=Ins\u00e9rer le dernier point
+insert_last_point_axis=Ins\u00e9rer le dernier point de l'axe de l'ellipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Donner une longitude ou un point
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Ins\u00e9rer le point suivant, Arc[A] ou fermer la polyligne[C] o Terminer[T]
+insert_next_point_line_or_close=Ins\u00e9rer le point suivant, Ligne[A] ou fermer la polyligne[C] o Terminer[T]
+insert_next_point_selection_or_end_polygon=Ins\u00e9rer le point suivant,  terminer le polygone en cours[E]
+insert_number_sides=Donner le nombre de c\u00f4t\u00e9s
+insert_opposited_corner=Ins\u00e9rer un coin oppos\u00e9
+insert_point=Ins\u00e9rer un point
+insert_point_corner_or_square=Ins\u00e9rer coin oppos\u00e9 ou un cadre[C]
+insert_point_move=Ins\u00e9rer un point de d\u00e9placement
+insert_point_or_end=
+insert_point_selection=Pr\u00e9ciser le point de s\u00e9lection
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius=Donner le rayon(r)
+insert_radius_or_second_point=Ins\u00e9rer le rayon ou le deuxi\u00e8me point
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Preciser l'angle de rotation
+insert_row=Ins\u00e9rer une ligne
+insert_second_point=Ins\u00e9rer un deuxi\u00e8me point
+insert_second_point_angle=Ins\u00e9rer un deuxi\u00e8me point ou un angle
+insert_second_point_move=Pr\u00e9ciser le deuxi\u00e8me point de d\u00e9placement
+insert_second_point_selection=Pr\u00e9ciser le deuxi\u00e8me point du rectangle de s\u00e9lection
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Ins\u00e9rer un troisi\u00e8me point
+insertar=Ins\u00e9rer
+Insertar=Ins\u00e9rer
+insertar_cajetin=insertar cajetin
+insertar_circulo=Ins\u00e9rer un cercle
+insertar_escala=Ins\u00e9rer une \u00e9chelle
+insertar_fila=
+insertar_imagen=Ins\u00e9rer une image
+insertar_leyenda=Ins\u00e9rer une l\u00e9gende
+insertar_linea=Ins\u00e9rer une ligne
+insertar_norte=Ins\u00e9rer  nord
+insertar_poligono=Ins\u00e9rer un polygone
+insertar_polilinea=Ins\u00e9rer une polyligne
+insertar_punto=Ins\u00e9rer un point
+insertar_recta=Ins\u00e9rer une ligne diagonale
+insertar_rectangulo=Ins\u00e9rer un rectangle
+insertar_texto=Ins\u00e9rer du texte
+insertar_vista=Ins\u00e9rer une vue
+inside_circle=A l'int\u00e9rieur de  la circonf\u00e9rence
+inside_polygon=A l'int\u00e9rieur du polygone
+inteligentSearch=Recherche intelligente
+inteligentSearchAscii=Tous les mots de la phrase
+inter_arc=Arc interne
+inter_line=Ligne interne
+internal_polygon_=Polygone interne
+Interseccion=Intersection
+Interseccion._Introduccion_de_datos=Intersection. Introduction des donn\u00e9es.
+Intersecten_con=S\u2019intersectent avec
+interval=Intervalle
+intervalo=intervalle
+Intervalo=Intervalle
+Intervalos=Intervalles
+Intervalos_equidistantes=Intervalles \u00e9gaux
+Intervalos_por_rupturas_naturales=Intervalles par seuils naturels
+into_circle=Inscrit
+into_circle_or_circumscribed=Inscrito en el c\u00edrculo[I] o Circunscrito[C]<C>
+intro_tablename=D\u00e9finir le nom de la couche \u00e0 importer. ATTENTION\: Si la table existe d\u00e9j\u00e0, elle sera supprim\u00e9e.
+introduce_nombre=Nouveau type
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_intervalo_deseado=ajouter l'intervalle d\u00e9sirer
+is_required=\u00e9s obligatori
+Italic=Italique
+Izquierda=Gauche
+Izquierdo=Gauche
+join=Joindre
+join_=
+jpg=Fichiers JPEG
+Juntar=Joindre
+Juntar._Introduccion_de_datos=Joindre. Introduction des donn\u00e9es.
+KeyMapping.Caracter_no_valido=Caract\u00e8re non valide\:
+keywords=Paraules clau
+keyWords=Mots cl\u00e9s
+kilometros=Kilom\u00e8tres
+Kilometros=Kilom\u00e8tres
+Las_traducciones_no_pudieron_ser_cargadas=Les traductions ne peuvent pas \u00eatre charg\u00e9es.
+last=Pr\u00e9c\u00e9dent
+lastUpdateDate=Derni\u00e8re actualisation
+latitud=Latitude
+Launcher.config_mal_formado=. Fichier 'config.xml' mal format\u00e9
+Launcher.config_no_encontrado=. Fichier 'config.xml' non trouv\u00e9
+Launcher.Dependencia_no_resuelta_en_plugin=D\u00e9pendance non r\u00e9solue dans le plugin
+Launcher.Dos_skin_extension=Deux "skin-extension". Le dernier sera utilis\u00e9\:
+Launcher.Error_con_las_librerias_del_plugin=Erreur avec les librairies du plugin
+Launcher.Error_instanciando_la_extension=Erreur d'instanciation de l'extension
+Launcher.Error_localizando_la_clase_de_la_extension=Erreur de localisation de la classe d'extension
+Launcher.Hay_dependencias_circulares=Il y a des d\u00e9pendances circulaires entre les plugins
+Launcher.Ignorando_el_directorio=Ignor\u00e9 dans le r\u00e9pertoire
+Launcher.labelset_class=Impossible de trouver la classe des \u00e9tiquettes (labelset)
+Launcher.look_and_feel=Impossible d'afficher le "look and feel"\:
+Launcher.No_se_encontro_la_clase_de_la_extension=Impossible de trouver la classe de l'extension
+Launcher.No_se_encontro_la_clase_mdi_manager=Impossible de trouver la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Impossible d'acc\u00e9der la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Impossible de conserver la configuration d'Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Impossible d'instancier la classe mdi manager
+Launcher.No_se_puede_acceder_a=Impossible d'acc\u00e9der \u00e0
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Une erreur s'est produite lors de la sauvegarde de la configuration des plugins
+Launcher.Two_extensions_with_the_same_priority=Deux extensions ont la m\u00eame priorit\u00e9, une seule sera charg\u00e9e.
+Launcher.Two_menus_with_the_same_position=Deux menus ont la m\u00eame position, un seul sera charg\u00e9
+layer=Couche
+Layer=Couche
+layer_abstract=R\u00e9sum\u00e9
+layer_name=Nom de la couche
+layer_title=Titre de la couche
+layerName=
+LayerName=
+layers_in_other_view=Capes la vista que jo trie
+layers_in_the_current_view=
+layerType=
+length=Longueur
+leyenda=L\u00e9gende
+Leyenda=L\u00e9gende
+leyenda_campo_unido=Un champs d'une table en jointure est utilis\u00e9  dans la l\u00e9gende (et /ou l'\u00e9tiquetage). Changez la l\u00e9gende avant d'enlever la jointure svp.
+Leyenda_Por_Defecto=L\u00e9gende par d\u00e9faut
+line=
+line_=LIGNE
+line_type=Type de ligne
+linea=Ligne
+Linea=Ligne
+linea_grafica=Ligne graphique
+lineal_directo=Lin\u00e9aire direct
+linf_der=Inf. droite
+link=Lien
+Link=Lien
+linkColumn=Site web
+linkError=Erreur lors du chargement du lien
+linkLoad=Cargement du web service
+load_from_xml=Charger \u00e0 partir d'un fichier XML (.rmf)
+loadWMS=Chargement du WMS
+localizador=Localisateur
+Localizador_por_atributo=Localisation par attribut
+localize=Localiser
+logo_URL=URL logotip
+longitud=Longitude
+lowerCoordinates=Inf\u00e9rieures
+lppp=ppp
+lsup_izq=Sup. gauche
+m/pixel=metros/pixel
+malla_activada=Activer la grille
+mantainold=Supprimer toutes les recherches
+mantener_intervalo=Maintenir l'intervalle
+map_context_file_error=
+map_extent=Extension
+map_size_in_pixels=Tamany del mapa (p\u00edxels)
+map_units=Unit\u00e9s de la carte
+mapa=carte
+Mapa=Carte
+mapas=Mises en page
+marco=Cadre
+marco_vista=Espace de travail de la vue
+margenes=Marges\:
+Mas_100=L\u00e9gende limit\u00e9e \u00e0 100 enregistrements
+mas_de_100_simbolos=Plus de 100  symboles n'apportent plus d'information dans un plan
+maxFeatures_aviso=
+maximo=Maximum
+Maximo=Maximum
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Erreur non captur\u00e9e par l'utilisateur
+MDIFrame.quiere_salir=Voulez-vous vraiment quitter gvSIG?
+MDIFrame.salir=Quitter
+MDIManagerFactory.No_skin_extension_in_the_plugins=Aucune extension "skin" n'a \u00e9t\u00e9 trouv\u00e9e parmi les plugins\:
+media=Moyenne
+Media=Moyenne
+medir_area=Mesurer une surface
+medir_distancias=Mesurer les distances
+Mensaje_buffer=Calcul des zones tampons
+Mensaje_clip=G\u00e9otraitement en cours...
+Mensaje_convexhull=G\u00e9otraitement en cours...
+Mensaje_difference=G\u00e9otraitement en cours...
+Mensaje_dissolve=G\u00e9otraitement en cours...
+Mensaje_enlace_espacial=G\u00e9otraitement en cours...
+Mensaje_interseccion=G\u00e9otraitement en cours...
+Mensaje_juntar=G\u00e9otraitement en cours...
+Mensaje_primera_pasada_union=Calcul des intersections...
+Mensaje_procesando_buffer=Calcul des zones tampons...
+Mensaje_procesando_buffer2=Regroupement des zones tampons
+Mensaje_procesando_clip_primero=Calcul du polygon de d\u00e9coupage
+Mensaje_procesando_clip_segundo=D\u00e9coupage des g\u00e9om\u00e9tries.
+Mensaje_procesando_convexhull=Calcul du convex hull...
+Mensaje_procesando_diferencia=Calcul des diff\u00e9rences...
+Mensaje_procesando_dissolves=Regroupement des g\u00e9om\u00e9tries...
+Mensaje_procesando_enlace_espacial=Jointure des \u00e9l\u00e9ments...
+Mensaje_procesando_interseccion=Calcul des intersections...
+Mensaje_procesando_juntar=Jointure des g\u00e9om\u00e9tries...
+Mensaje_segunda_pasada_union=Calcul des diff\u00e9rences entre A et B...
+Mensaje_tercera_pasada_union=Calcul des diff\u00e9rences entre A et B...
+Mensaje_union=G\u00e9otraitement...
+Messages._no_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+metadata_catalog=Recherche de g\u00e9odonn\u00e9es - Connexion
+metadata_tree=Arbre des metadonn\u00e9es
+metadatos=Metadatos
+metros=M\u00e8tres
+Metros=M\u00e8tres
+Milimetros=Millim\u00e8tres
+Millas=Miles
+minimo=Minimum
+Minimo=Minimum
+minx=min.x
+miny=min.y
+modificar=
+modification_date=Date de modification
+modify=
+mosaico_tooltip=info bulle
+Mostrar_Contorno=Activer le contour
+mostrar_descripcion=Montrer description
+mostrar_puntos=Afficher les points
+Mostrar_siempre=Tout afficher
+mostrar_unidades=Montrer unit\u00e9s
+move=D\u00e9placer
+move_=DEPLACEMENT
+move_elements=
+Move_from_view=D\u00e9placer les points depuis la vue.
+move_handlers=
+move_layer_down=Moure avall
+move_layer_up=Moure amunt
+Mover_geo=D\u00e9placer l'image \u00e0 g\u00e9or\u00e9f\u00e9rencer
+msg_save_raster=L'op\u00e9ration va \u00eatre annul\u00e9e ?
+mtspixel=Mts/pixel
+muestra=\u00e9chantillon
+Muestra_atributos=Afficher les attributs de la couche s\u00e9lectionn\u00e9e.
+muestra_consola_tooltip=Montrer la console
+Muestra_los_atributos_de_las_capas_seleccionadas=Afficher les attributs de la couche s\u00e9lectionn\u00e9e.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Afficher les \u00e9l\u00e9ments de la couche en utilisant un symbole pour chaque valeur unique
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Afficher les \u00e9l\u00e9ments de la couche en utilisant une gamme de couleurs en fonction de la valeur d'un champs d'attributs d\u00e9termin\u00e9
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Afficher tous les \u00e9l\u00e9ments d'une couche en utilisant le m\u00eame symbole
+multi_type=Type multiple
+multiple_value=Valeur multiple
+multiples_intervalos=intervalles multiples
+multipoint=
+multipoint_=
+multipoint_type=Type multipoint
+must_specify_a_file=
+name=Nom
+natural_intervals=Intervalles naturels
+navegacion=Navigation
+navegacion_vista=Navigation vue
+necesita_un_tema_activo=N\u00e9cessite un th\u00e8me actif
+necesita_un_tema_vectorial_activo=N\u00e9cessite un th\u00e8me vectoriel actif
+necesita_una_capa_activa=N\u00e9cessite une couche g\u00e9ographique active
+necesita_una_capa_vectorial_activa=N\u00e9cessite une couche g\u00e9ographique vectorielle active
+new_dxf=Nouveau DXF
+new_field=Nouvelle colonne
+new_layer=Nouvelle couche
+new_postgis=Nouveau Postgis
+new_shp=Nouveau SHP
+next=Suivant
+Next=Suivant
+next_point_or_end=Point suivant ou terminer[E]
+next_previous_add_del_cancel=Point, Sommet suivant[S], Pr\u00e9c\u00e9dent[A], Ajouter[I] o Supprimer[E]
+ninguna_impresora_configurada=Aucune imprimante configur\u00e9e
+Nivel_de_transparencia=Niveau de transparence
+no=Non
+no_activos=Toutes inactives
+no_adjust_grid=Ne pas ajuster \u00e0 la grille
+No_de_intervalos=Nombre d'intervalles
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=Impossible de trouver la liste des langues pr\u00e9f\u00e9r\u00e9es. Vous avez peut-\u00eatre oubli\u00e9 d'installer la classe.
+no_hay_ninguna_capa_seleccionada=
+no_hay_ninguna_capa_seleccionado=Aucune couche de s\u00e9lectionn\u00e9e
+No_mostrar=Ne pas afficher la couche lorsque l'\u00e9chelle est
+No_mostrar_la_capa_cuando_la_escala=Ne pas afficher la couche lorsque l'\u00e9chelle
+no_puede_continuar=
+No_reconocido=Non reconnu
+No_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+No_se_pudo_obtener_la_tabla_de_la_capa=Impossible d'obtenir la table de la couche g\u00e9ographiqueS
+No_Shape=Cette couche n'est pas de type Shape
+No_usar_buffer_redondeado=Ne pas utiliser les zones tampons dupliqu\u00e9es.
+no_visibles=Toutes invisibles
+nombre=Nom
+Nombre=Nom
+nombre_capa=Nom de la couche
+nombre_cobertura=Nom de la couverture
+nombre_feature=Nom de la couche
+Nombre_que_se_le_dara_al_zoom=Nom pour le zoom
+nombre_sesion=Nom du projet
+Nombres=Noms
+none_selected=Aucune selection
+normal=Normal
+north=Nord
+not_available=No disponible
+Nueva_tabla=Nouvelle table
+nuevo=Nouveau
+Nuevo_conjunto=Nouvelle s\u00e9lection
+nuevo_proyecto=Nouveau projet
+nuevo_tamano_fuente=Nouvelle taille de fonte\:
+nuevo_tooltip=Cr\u00e9er un nouveau projet
+num_bandas=Nombre de bandes
+num_columnas=Nombre de colonnes
+num_filas=Nombres de lignes
+Num_intervalos=
+Numero_anillos_concentricos=Nombre de points concentriques.
+Numero_de_elementos_seleccionados=Nombre d'\u00e9l\u00e9ments s\u00e9lectionn\u00e9s.
+Numero_de_segmentos_por_cuadrante=Nombre de segments par quadrant.
+numero_incorrecto=
+N\u00fam_intervalos=Nombre d'intervalles
+Obtener_mas_proximo=Utiliser le plus proche.
+of=de
+ogc_mapcontext_file=OGC Web Map Context
+ok=Accepter
+Ok=Accepter
+onSharpening=Am\u00e9liorer la r\u00e9solution planim\u00e9trique
+opacidad=Opacit\u00e9
+opciones=Options
+open_first_time=Ouvrir avec la vue
+open_layers_as=
+Operacion_de_overlay=Op\u00e9rations de superposition.
+Operaciones_adicionales=Op\u00e9rations additionnelles.
+optinos.network.click_to_test_connection=
+options=Options
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.general.select_theme=
+options.network.status=
+orientacion=Orientation\:
+origen_de_datos=Origine des donn\u00e9es
+Origen_de_datos=Origine des donn\u00e9es
+Origen_de_Datos=Origine des donn\u00e9es\:
+Otros=Autres
+out_circle=Exterieur au rayon
+out_polygon=Exterieur au polygone
+out_rectangle=Exterieur au rectangle
+owner=Propri\u00e9taire
+page=Page
+paint=Dessiner le r\u00e9sultat
+parameters=Param\u00e8tres
+parametros=Param\u00e8tres
+Parametros=Param\u00e8tres
+password=Mot de passe
+paste=Copier
+paste_elements=
+path=Chemin
+pegar=
+Perimetro=P\u00e9rim\u00e8tres
+period=P\u00e9riode
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet d'\u00e9tiquetter les \u00e9l\u00e9ments de la carte avec la valeur d'un champs d\u00e9termin\u00e9
+Personalizado=Personnalisation
+Pies=Pieds
+pila_de_comandos=historique des commandes
+pixeles=pixels
+pixels=pixels
+Plain=Normal
+plantilla=
+plegar_despl=Plegar/Desplegar
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Deux classes ont le m\u00eame nom dans le plugin
+PluginClassLoader.Error_reading_file=Erreur dans la lecture du fichier\:
+pluginNotFound=Vous ne disposez pas d'extension pour charger ce type de ressources
+pluginNotFoundTitle=Chargement des couches
+PluginServices.Bug_en_el_codigo=Bug dans le code
+PluginServices.Error_grave_de_la_aplicacion=Erreur grave. Sauvez et quittez l'application.
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Impossible de trouver les fichiers de traductions
+PluginServices.No_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Absence de sablier\:
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Impossible de restaurer le curseur de la souris
+PluginServices.Procesando=Traitement...
+png=Fichiers PNG
+point=Point
+point_=POINT
+point_type=Type de point
+poligono=Polygone
+polilinea=polyligne
+polygon=Polygone
+polygon_=POLYGONE
+polygon_type=Type de polygone
+polyline=Polyligne
+polyline_=POLYLIGNE
+poner_capas_a=Ajouter les couches ...
+poner_temas_a=
+por_debajo_de=en dessous de\:
+por_encima_de=au del\u00e0 de\:
+Por_favor_active_el_tema=
+Por_favor_active_la_capa=Veuillez activer la couche
+posicion_linea=Position de la ligne
+postcode=
+postgisColumn=Postgis
+postgisError=Erreur lors du chargement de la base de donn\u00e9es
+postgisLoad=Chargement de Postgis
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferences=
+preferencias=
+Preferencias=
+preparar_pagina=Pr\u00e9parer la page
+Preparar_pagina=Pr\u00e9parer la page
+presentacion=Pr\u00e9sentation
+previous=Pr\u00e9c\u00e9dent
+previsualizacion=Pr\u00e9visualisation.
+Previsualizacion=Pr\u00e9visualisation
+Previsualizacion_de_simbolo=Pr\u00e9visualisation du symbole
+primero=Premier
+prioridad=Priorit\u00e9
+procesar=Calculer
+process_tip=
+properties=Propri\u00e9t\u00e9s
+propiedad=
+propiedades=Propri\u00e9t\u00e9s
+propiedades_cajetin=Propri\u00e9t\u00e9s du cadre
+propiedades_capa=Propri\u00e9t\u00e9s de la couche
+propiedades_de_la_capa=Propri\u00e9t\u00e9s de la couche\n
+Propiedades_de_la_Capa=Propri\u00e9t\u00e9s de la couche
+propiedades_del_tema=
+Propiedades_del_Tema=Propri\u00e9t\u00e9s de la couche
+Propiedades_escala_grafica=Propri\u00e9t\u00e9s de la barre d'\u00e9chelle
+propiedades_grafico=Propri\u00e9t\u00e9s du graphique
+propiedades_mapa=Propri\u00e9t\u00e9s de la carte
+propiedades_marco_imagenes=Propri\u00e9t\u00e9s du bloc image
+propiedades_marco_leyenda=Propri\u00e9t\u00e9s du bloc de l\u00e9gende
+propiedades_marco_vista=Propri\u00e9t\u00e9s du bloc de vue
+propiedades_raster=Propri\u00e9t\u00e9s du raster
+propiedades_sesion=Propri\u00e9t\u00e9s du project
+propiedades_tabla=Propri\u00e9t\u00e9s de la table
+propiedades_tema=Propri\u00e9t\u00e9s de la couche
+Propiedades_texto=Propri\u00e9t\u00e9s du texte
+propiedades_vista=Propri\u00e9t\u00e9s de la vue
+props=Propri\u00e9t\u00e9s
+protocolsGroup=Protocols
+provider=Fournisseur
+prueba_conexion=Essai connexion
+puerto=Port
+Pulgadas=Pouces
+punto=Point
+puntos=Points
+purpose=
+pwd=Mot de passe
+quantile_intervals=Intervalles quantiles
+quiere_continuar=S\u00fbr de vouloir continuer?
+quitar=Quitter
+Quitar=Quitter
+Quitar_capa=Supprimer une couche
+quitar_enlaces=Enlever liens
+Quitar_todos=Tout supprimer
+Quitar_Todos=Tout supprimer
+quitar_uniones=Enlever unions
+rango_de_escalas=Niveau d'\u00e9chelle
+Rango_de_escalas=Classes d'\u00e9chelles
+Rasterfiles=Fichiers raster
+realce=R\u00e9heussement
+realces=
+realmente_desea_guardar=Voulez-vous sauvegarder ?
+Recortar=D\u00e9couper
+Recortar._Introduccion_de_datos=D\u00e9couper. Introduction des donn\u00e9es.
+recorte=Coupure
+recorte_colas=Couper les r\u00e9sidus
+recorte_vista=Couper la vue
+recta=Ligne diagonale
+rectangle=Rectangle
+rectangle_=RECTANGLE
+rectangulo=Rectangle
+recuento=Recomptage
+Recuperar_leyenda=Charger une l\u00e9gende
+Recuperar_y_eliminar_otros_zoom=R\u00e9cuperer et \u00e9liminer les autres zooms
+redo=Refaire
+redo_error=Erreur d'acc\u00e8s aux Drivers pour renouveler une commande
+reference=R\u00e9f\u00e9rence
+refrescar=Rafra\u00eechir
+refresh_capabilities=Refrescar mem\u00f2ria cau
+refresh_capabilities_tooltip=Marque esta casella per a sobreescriure les dades anteriores.
+registros=Registers
+registros_seleccionados_total=Total registres s\u00e9lectionn\u00e9s
+rehacer=refaire
+rellenar_marco_vista=Remplir le cadre de la vue
+relleno=Remplir \:
+remove=Quitter
+remove_column=Supprimer une colonne
+remove_elements=
+remove_geometry=
+remove_row=Supprimer une ligne
+remove_rows=
+renombrar=Renomer
+reproyectar_aviso=Le syst\u00e8me de projection de la couche est diff\u00e9rent de la vue.\nAVISO\: \=Des probl\u00e8mes peuvent \u00eatre rencontr\u00e9s avec certaines projections. Lisez la documentation
+reproyectar_pregunta=Souhaitez-vous reprojeter ?
+resolucion=R\u00e9solution
+resolucion_resultado=R\u00e9solution du r\u00e9sultat\:
+resolution=R\u00e9solution
+resourceLinkColumn=Lien
+resourceShowColumn=Afficher
+resourceTypeColumn=
+respuesta_error_servidor=La couverture n'a pu \u00eatre obtenue
+resto_valores=Reste des valeurs
+restore=Restaurer
+restrictArea=Limiter l'aire de recherche
+results=Resultats
+resutsByPage=Resultats par page
+rootName=Racince
+rotate=Rotation
+rotate_=ROTATION
+salir=Quitter
+Salir=Quitter
+salir_tooltip=Quitter
+salvar=Enregistrer
+salvar_raster=Enregistrer le raster g\u00e9or\u00e9f\u00e9renc\u00e9.
+Sample=Exemple
+save_to_ascii=Exporter la table des points dans un fichier texte.
+save_to_xml=Enregistrer le fichier XML (.grf)
+scale=Echelle
+scale_=ECHELLE
+scaleAny=tous
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=<5.000
+Se_superponen_a=Se superposent \u00e0
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... pour supprimer les enregistrements \u00e0 partir de
+se_van_a_guardar_=
+Sean_disjuntos_a=sont disjoints de
+Sean_iguales_a=sont identiques \u00e0
+search_results=Resultats de la recherche
+searchButton=Rechercher
+seleccion=S\u00e9lection
+seleccion_campos=S\u00e9lectionnez les champs
+seleccion_de_campos=S\u00e9lection des champs
+seleccion_fuente=S\u00e9lection d'une fonte
+Seleccion_por_capa=S\u00e9lection par couche
+Seleccion_por_tema=S\u00e9lection spatiale
+selecciona_sistema_de_referencia=
+seleccionar=S\u00e9lectionner
+Seleccionar=S\u00e9lectionner
+seleccionar_capas=S\u00e9lectionner des couches
+seleccionar_coberturas=Selectionner couvertures
+seleccionar_CRS=Selectionner CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=S\u00e9lectionner dans la couche active les entit\u00e9s qui\:
+Seleccionar_del_conjunto=Mettre ce texte sur plusieurs lignes
+Seleccionar_Directorio=Repertoire contenant les couches.
+seleccionar_fichero=S\u00e9lectionner le fichier
+Seleccionar_fichero=S\u00e9lectionner un fichier
+seleccionar_formato=S\u00e9lectionner un format
+seleccionar_parametros=Selectionner les param\u00e8tres
+seleccionar_por_punto=S\u00e9lection
+seleccionar_por_rectangulo=S\u00e9lection \u00e0 partir d'un rectangle
+seleccionar_puntos=S\u00e9lectionner les points
+seleccionar_srs=S\u00e9lectionner SRS
+seleccionar_tiempo=Selectionner la position pour le temps
+seleccionar_todos=Tout s\u00e9lectionner
+seleccione_campo_enlace=S\u00e9lectionner le champs \u00e0 relier
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=S\u00e9lection d'une date...
+seleccione_tabla=S\u00e9lectionnez la table
+seleccione_tabla_a_enlazar=S\u00e9lectionner la table a relier
+seleccione_tabla_origen=S\u00e9lectionner la  origine de la jointure
+select=
+select_all=Tout s\u00e9lectionner
+select_driver=S\u00e9lectionner le driver
+select_features=S\u00e9lectionnez les couches
+select_fields=S\u00e9lectionnez les champs de la couche
+select_formats=S\u00e9lection des formats
+select_from_point=S\u00e9lectionner \u00e0 partir d'un point
+select_geom_field=S\u00e9lection la colonne g\u00e9ometrie
+select_geometry=
+select_geometry_type=S\u00e9lectionner le type de g\u00e9om\u00e9trie
+select_handlers=Seleccionar handlers
+select_layers=S\u00e9lectionner des couches
+select_none=Tout supprimmer
+select_other_geometry_or_end=
+select_unique_field=S\u00e9lectionner le champs unique
+selectBandaRefinado=S\u00e9lectionner la bande d'am\u00e9lioration.
+selected_dimensions=S\u00e9lectionner une dimension
+selected_layer=
+selected_layers=Couches s\u00e9lectionn\u00e9es
+selected_parameters=
+selected_themes=Themes s\u00e9lectionn\u00e9s
+selectfromview=S\u00e9lectionner les points depuis la vue.
+selection=S\u00e9lectionner
+selection_=SELECTIONNER
+selection_color=Couleur de s\u00e9lection
+server=Serveur
+server_abstract=R\u00e9sum\u00e9
+server_cant_render_layers=Aquest servidor WMS no pot renderitzar aquestes dues capes conjuntament.\nSepareles en dues cosultes diferents.
+server_timeout=WMS d\u00e9lais d\u00e9pass\u00e9
+server_title=Titre
+server_type=Type de server
+serverReply=Reponse du serveur
+serverURL=Tapez l'adresse du serveur de catalogue
+serverURLCat=Tapez l'adresse du serveur gazetteer
+service_info=Information sur le service
+servidor=Serveur
+Servidor=Serveur
+servidor_wcs_no_responde=Le serveur selectionn\u00e9 ne r\u00e9pond pas
+set=Etablir
+settings=
+settings_editor=
+shape_seleccion=Exporter une s\u00e9lection.
+Shapefile=Shapefile
+Shapefiles=Fichiers SHP
+show_grid=Afficher la grille
+show_layer_names=
+show_this_dialog_next_startup=
+shp_files=Fichiers .shp
+siempre=Toujours
+siguiente=Suivant
+Siguiente=Suivant
+simbolo=
+Simbolo=Symbole
+Simbolo_unico=Symbole unique
+Simbolo_Unico=Symbole unique
+Simbologia=Symbologie
+simple=Simple
+simplificar=Simplifier
+sin_realce=Sans r\u00e9haussement
+sin_titulo=Sans titre
+sincronizar_color_borde_relleno=Synchroniser la couleur de contour avec le fond \:
+single_value=Valeur unique
+size=Taille
+Size=Taille
+sobre_la_barra=Sur la barre
+Sobreescribir_fichero=
+Solo_disolver_adyacentes=Regrouper uniquement les entit\u00e9s adjacentes.
+Solo_para_capas_vectoriales=Seulement pour les couches vectorielles
+splain=Curve
+SplashWindow.Iniciando=Initialisation...
+square=Carr\u00e9
+srs=Srs
+start_edition=Commencer l'\u00e9dition
+state_or_province=
+statistics=Statistiques
+StatusBar.Aplicacion_iniciada=Application initialis\u00e9e
+stop_edition=Terminer l'\u00e9dition
+stretch=Etirer
+stretch_=
+style=Style
+Style=Style
+Subir_capa=Monter une couche
+Sum=Somme
+suma=Somme
+Superior=Sup\u00e9rieure
+suprimir_objetos_origen=
+symmetry=Symetrie
+symmetry_=
+S\u00edmbolo=Symbole
+Tabla=Table
+Tabla_de_Atributos=Table d'attributs
+Tabla_de_prueba=Table test
+tablas=Tables
+Tablas=Tables
+table=Table
+tag=tag
+tamano=Taille\:
+tamano_metros=Taille en m\u00e8tres
+tamano_pagina=Taille de la page\:
+tamano_posicion=Taille et position
+tamanyo_borde=Taille du bord
+tamanyo_fuente=Taille de la source
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+tarea_en_progreso=T\u00e2che en progression.
+telephone=Tel\u00e8fon
+Tema=Couche g\u00e9ographique
+Terminar=Terminer
+terminate=Terminer
+test_now=
+texto=Texte
+theme=Th\u00e8me
+Tiempo=Temps
+Tile=Mosa\u00efque
+tile_tooltip=Organiser les fen\u00eatres en mosa\u00efque
+time=Temps
+timeout=D\u00e9lais d\u00e9pass\u00e9
+tipo_dato=Type de donn\u00e9e
+tipo_de_intervalo=Type d'intervalle
+Tipo_de_intervalos=Type d'intervalles
+tipo_de_leyenda=Type de l\u00e9gende
+Tipo_de_leyenda=Type de l\u00e9gende
+Tipo_de_linea=Type de ligne
+tipo_fichero_proyecto=Fichier de projet gvSIG (*.gvsproj)
+tipo_leyenda=Fichier de l\u00e9gende (*.GVL)
+tipo_linea=Type de Ligne\:
+Tipo_no_reconocido=Type non reconnu
+tipo_relleno=Remplir\:
+tipo_simbolo=Type de symbole\:
+tipos_de_documentos=Type de documents
+title=Titre
+titulo=Gestionnaire de projet
+titulo_confirmar=Confirmer le titre
+titulo_consola=Console d'information
+titulo_fframetext=Titre du champs texte
+to=Jusqu'\u00e0
+to_annotation=Transformer la couche en etiquettes
+to_palette=Changer la palette
+toda_la_tabla=Toute la table
+todos=Tous
+Toquen=touchent
+total=Total
+transparencia=Transparence
+Transparencia=Transparence
+transparencia_pixel=Transparence des pixels
+Triangulo=Triangle
+trim=Trim
+type=Type
+ultimo=Dernier
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Une couche doit-\u00eatre s\u00e9lectionn\u00e9e
+undo=D\u00e9faire
+undo_error=Erreur lors de l'annulation de la commande
+ungroup=Dissocier
+unidades=Unit\u00e9s\:
+Unidades=Unit\u00e9s\:
+Union=Union
+Union._Introduccion_de_datos=Union. Introduction des donn\u00e9es.
+unite_separate=Unir/S\u00e9parer
+unknown=Inconnu
+unknown_response_format=
+unsupported_map_context_version=
+unsupported_version=Versi\u00f3 no suportada
+untitled=Sans titre
+upperCoordinates=Sup\u00e9rieures
+Usar_indice_espacial=Utiliser indice spatial
+Usar_los_campos_de_la_capa=Utiliser les champs de la couche.
+usar_marco=Utiliser le cadre
+usar_rango=Utiliser un seuil
+Usar_solamente_los_elementos_seleccionados=Utiliser uniquement les \u00e9l\u00e9ments s\u00e9lectionn\u00e9s.
+usar_titulo=Utiliser titre
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+username=Nom d'utilisateur
+usuario=Utilisateur
+utilizar_margenes_impresora=Utiliser les marges de l'imprimante.
+vacia=Vide
+valor=Valeur
+Valor=Valeur
+Valor_azul=Valeur bleu
+Valor_Bandas=Valeur des bandes
+valor_pixel=Valeur du pixel
+Valor_rojo=Valeur rouge
+Valor_verde=Valeur vert
+Valores=Valeurs
+Valores_unicos=Valeurs uniques
+Valores_Unicos=Valeurs uniques
+value=Valeur
+varianza=Variance
+ventana=Fen\u00eatre
+Ventana=Fen\u00eatre
+ventana_proyecto=Fen\u00eatre de projet
+Ver=Afficher
+ver_tabla_atributos=Voir la table des attributs
+ver_tooltip=Afficher la fen\u00eatre de projet
+version=Versi\u00f3
+version_conflict=Conflicte de versi\u00f3
+vertical=Vertical
+vertical_space=
+vertices=sommets
+view=Vue
+visible=Visible
+visibles=Toutes visibles
+Vista=Vue
+vistas=Vues
+visualizacion=Vues
+Visualizacion=Visualiser
+visualizar_cuadricula=Afficher la grille
+warning=
+warnings=Attention
+wcs_properties=Propri\u00e9t\u00e9s WCS
+WCS_properties=Propietats del WCS
+wcs_server_error=
+wcsColumn=Couverture
+wcsError=Erreur lors du chargement d'une couverture
+wcsLoad=Chargement du WCS
+web_map_context=Web Map Context
+web_map_context_settings=
+wfs_properties=
+wfsColumn=Entit\u00e9
+wfsError=Erreur lors du chargement de l'entit\u00e9
+wfsLoad=Chargement du WFS
+width=Largeur
+Window=Fen\u00eatre
+WMS=WMS
+wms_cant_connect=Cannot connect to WMS
+wms_not_queryable=Aquest servidor no accepta peticions d\u0092aquest tipus
+wms_properties=Propri\u00e9t\u00e9s WMS
+wms_server_error=Error del servidor WMS
+wms_transparency=Transparence
+wmsColumn=Carte
+wmsError=Erreur lors du chargement de la carte
+WMSLayer=Couche WMS
+xmax=X minimum
+xmin=X minimum
+Yardas=Yards
+yes=Oui
+ymax=Y minimum
+ymin=Y minimum
+zoom=Zoom
+Zoom=Zoomer
+Zoom_a_la_capa=Zoom \u00e0 la couche
+Zoom_Acercar=Zoom rapprocher
+Zoom_al_Tema=Zoom sur la couche
+Zoom_Alejar=Zoom \u00e9loigner
+Zoom_Completo=Vue g\u00e9n\u00e9rale
+Zoom_Completo_Vista=Zoom complet dans le cadre
+Zoom_Mas=Zoom avant.
+zoom_mas_vista=Zoom dans la vue
+Zoom_Mas_Vista=Zoom arri\u00e8re dans le cadre
+Zoom_Menos=Zoom avant
+Zoom_Menos_Vista=Zoom avant dans le cadre
+Zoom_pixel=Zoom a la r\u00e9solution du raster
+Zoom_previo=Zoom pr\u00e9c\u00e9dent.
+Zoom_Previo=Zoom pr\u00e9c\u00e9dent
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom \u00e0 la s\u00e9lection
+Zoom_sgte=
+zooms=D\u00e9placement

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_de.properties	(revision 42196)
@@ -0,0 +1,1497 @@
+#Translations for language: de
+#Tue Oct 24 14:07:27 CEST 2006
+(escala_maxima)=(Gr\u00f6\u00dfter Ma\u00dfstab)
+(escala_minima)=(Kleinster Ma\u00dfstab)
+_(Etiquetas_estandar)=(Standard-Etiketten)
+_(Intervalos)=(Intervalle)
+_(Simbolo_unico)=(Einmaliges symbol)
+_(Valores_unicos)=(Einmalige werte)
+__valenciano=Valencianisch
+__espacio_vertical=Vertikaler abstand\:
+__lineas=linien
+__proyeccion_actual=Aktuelle projektion\:
+__redimensionar_texto_escala=Textgr\u00f6\u00dfe an den ansichtsma\u00dfstab anpassen
+__seleccion_de_fuente=Auswahl der Schriftart
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=
+abajo=Nach unten
+abrir=\u00d6ffnen
+Abrir=Choose
+Abrir_Geoproceso=
+Abrir_Imagen=Bild \u00f6ffnen
+abrir_plantilla=Vorlage \u00f6ffnen
+abrir_proyecto=Projekt \u00f6ffnen
+abrir_tooltip=Vorhandenes Projekt \u00f6ffnen
+Abrir_una_capa=Layer \u00f6ffnen
+abstract=Zusammenfassung
+accept_tip=
+Accion_Predefinida=Vordefinierte aktion
+aceptar=OK
+Aceptar=OK
+acerca_de=\u00dcber...
+activa_la_ventana=Aktiviert das fenster
+activar=Activate
+activar_regla=Lineal aktivieren
+activo=
+activos=Aktiv
+add=Hinzuf\u00fcgen
+add_field=
+add_layer=Layer hinzuf\u00fcgen
+add_rows=
+add_vertex=
+addlayer=Layer hinzuf\u00fcgen
+address=
+address_type=
+adjust_grid=
+adjust_transparency=Transparenz anpassen
+advanced=
+advanced_settings=
+agrupacion=
+agrupar=Gruppieren
+agrupar_capas=Layer gruppieren
+agrupar_graficos=Grafiken gruppieren
+agrupar_linea=Grafiklinie mit grafiken gruppieren
+Ajustar_cobertura_wcs=WCS-Cover anpassen
+Ajustar_transparencia=Transparenz anpassen
+ajustes_linea_grafica=Anpassung grafiklinie
+Al_leer_la_leyenda=Beim lesen der legende
+alerta=Achtung
+algoritmo=
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Ausrichtung\:
+alinear=Ausrichtung
+alinear_graficos=Grafiken ausrichten
+allWords=Alle w\u00f6rter
+alta=Hoch
+alto=Hoch
+altura=H\u00f6he\:
+Altura_fija_de_texto=Fixierte texth\u00f6he
+ambito=Bereich
+ampl_extent=
+Anadir=Hinzuf\u00fcgen
+Anadir_al_conjunto=Zum Datensatz hinzuf\u00fcgen
+Anadir_capa=Layer hinzuf\u00fcgen
+Anadir_Capa=Layer hinzuf\u00fcgen
+Anadir_capa_de_eventos=
+Anadir_tema_de_eventos=Ereignis-Thema
+anadir_titulo=
+Anadir_todos=Alle hinzuf\u00fcgen
+ancho=Breite
+ancho_alto=Breite x h\u00f6he
+Ancho_Contorno=Konturbreite
+Ancho_de_linea=Linienbreite
+anchura=Breite\:
+angulo_rotacion=Drehwinkel\:
+anterior=Zur\u00fcck
+Anterior=Zur\u00fcck
+anyResult=Es wurden keine mit Ihren suchkriterien \u00fcbereinstimmenden dokumente gefunden.
+anyWord=Irgendein wort
+Aplicar=Anwenden
+apply=Anwenden
+Apply=Anwenden
+arc=
+arc_=ARC
+Archivo=Datei
+Archivos_de_Disco=Disketten-Dateien
+Area_de_influencia=Buffer
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+area_trabajo=Arbeitsbereich
+Areas_de_influencia._Introduccion_de_datos=
+arriba=Nach oben
+ascending_order=Aufsteigende ordnung
+ascending_order_tooltip=Sortierung nach dem ausgew\u00e4hlten Feld in aufsteigender Ordnung.
+asignar_coordenadas=
+aspect=Konfiguration der suchanfrage
+Atributo=Attribut
+Atributos_Numericos=
+attributeName=
+attributes=Attribute
+attributeType=
+automatico=Automatisch
+aviso_sin_extent_de_referencia=F\u00fcr diese Option wird mindestens ein bereits hinzugef\u00fcgter Layer als Referenz ben\u00f6tigt.
+Ayuda=Hilfe
+back=Zur\u00fcck
+Back=Zur\u00fcck
+background_color=Hintergrundfarbe
+baja=Niedrig
+Bajar_capa=Layer nach unten
+bandas=Farbstreifen
+bands=Farbstreifen
+barra=Balken\:
+base=base
+base_datos=Datenbank
+bd=db
+bmp=BMP-Dateien
+Bold=Fett
+borra_seleccion=Auswahl l\u00f6schen
+borrador=Entwurf
+borrar=L\u00f6schen
+borrar_todos=
+borrar_uno=
+box=
+break_=Break
+brillo=
+brillo_y_contraste=
+browse=
+BRX=BRX\:
+BRY=BRY\:
+buffer=Buffer
+cajetin=
+calcular_errores=
+Calcular_intervalos=Intervalle berechnen
+calidad=Qualit\u00e4t
+Cambio_Color=Farbe \u00e4ndern
+Cambio_de_estilo=Stil \u00e4ndern
+Cambio_Estilo=Stil \u00e4ndern
+cambio_nombre=Namen \u00e4ndern
+Cambios_de_estilo=Stil \u00e4ndern
+campo=Feld
+Campo=Feld
+campo_altura_texto=H\u00f6he textfeld\:
+Campo_clasifica=Klassifikationsfeld
+Campo_de_clasificacion=Klassifikationsfeld
+campo_de_documentos_asociados=Feld der verbundenen dokumente
+Campo_de_etiquetado=Etikettierfeld
+Campo_para_disolver=
+Campos=Felder
+cancel=Abbrechen
+Cancel=Abbrechen
+cancel_edition=
+cancel_tip=
+cancelar=Abbrechen
+Cancelar=Abbrechen
+cancelSearchButton=abbrechen
+cannotReproject=Dieses koordinatensystem kann nicht reprojektiert werden.
+cant_connect_wfs=Es konnte keine Verbindung zum WFS hergestellt werden.
+cantLoad=
+capa=
+Capa=Layer
+capa_exportada=
+capa_importada=Importierter Layer. Wollen sie den r\u00e4umlichen Index einrichten?
+capas=Layer
+Capas=
+Capas_del_directorio=
+Capas_del_localizador=Navigatorlayer
+capas_edition_cache=
+capaWMS=WMS-Layer
+caracteres_erroneos=
+cargar=
+cargar_fichero=
+cargar_leyenda=Legende laden
+cargar_sin_georef=
+cartografico=kartografisch
+Cascada=Kaskade
+cascada_enable=Es muss mindestens ein Fenster ge\u00f6ffnet sein.
+cascada_tooltip=Organisiert die fenster in der kaskade
+catalog_search=Suche nach geodaten
+cathegory=Kategorie
+cathegoryAny=Irgendeine
+cathegoryBiota=Fauna und Flora
+cathegoryBoundaries=Ausdehnung
+cathegoryClimatologyMeteorologyAtmosphere=Atmosph\u00e4re, Klimatologie und Meteorologie
+cathegoryEconomy=Wirtschaft
+cathegoryElevation=H\u00f6he
+cathegoryEnvironment=Umwelt
+cathegoryFarming=Landwirtschaft
+cathegoryGeoscientificInformation=Geowissenschaftliche Information
+cathegoryHealth=Gesundheit
+cathegoryImageryBaseMapsEarthCover=Abdeckung der Erde mit bildbasierten Karten
+cathegoryInlandWaters=Binnengew\u00e4sser
+cathegoryIntelligenceMilitary=Milit\u00e4rische Aufkl\u00e4rung
+cathegoryLocation=Lokalisation
+cathegoryOceans=Ozeane
+cathegoryPlanningCadastre=Katasterplanung
+cathegorySociety=Gesellschaft
+cathegoryStructure=Strukturen
+cathegoryTransportation=Transport
+cathegoryUtilitiesCommunication=Kommunikation und versorgungseinrichtungen
+causa_error_desconocida=Unerwarteter Server-Fehler
+Centimetros=Zentimeter
+Centrar_la_Vista_sobre_un_punto=
+centrar_punto=
+cerrar=Schlie\u00dfen
+Cerrar=Schlie\u00dfen
+change_before=
+change_behind=
+change_height=
+change_width=
+chooseAttribute=W\u00e4hlen Sie ein Suchkriterium aus.
+circle=
+circle_=
+circulo=Kreis
+Circulo=Kreis
+circumscribed=
+city=Ciutat
+clave=Passwort
+clear=s\u00e4ubern
+close=schlie\u00dfen
+close_polyline=
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_interseccion=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Cobertura_para_unir=
+Coberturas=
+Coberturas_de_entrada=
+coincidir_tamano=Gr\u00f6\u00dfe angleichen\:
+coincidir_tamanyo=
+colocar_a_margenes=Zu den r\u00e4ndern anordnen
+colocar_alrededor_seleccionados=Um ausgew\u00e4hlte graphiken anordnen.
+colocar_alrededor_todos=Um alle grafiken anordnen.
+colocar_delante=Nach vorn
+colocar_detras=Nach hinten
+color=Farbe\:
+Color_Contorno=Konturfarbe\:
+Color_de_la_Linea=Strichfarbe\:
+Color_de_Relleno=F\u00fcllfarbe\:
+Color_final=Endfarbe\:
+Color_inicial=Anfangsfarbe\:
+Color_inicio=Anfangsfarbe
+color_texto=Textfarbe\:
+comentarios=Kommentare
+commands_stack=
+complex_selection=
+complex_selection_=
+compress=Compression
+concordancia=\u00dcbereinstimmung
+conectar=Verbinden
+conection=Connection
+conexion_correcta=Verbindung korrekt
+configuracion_andami_tooltip=Konfiguration Andami
+configurar=Konfigurieren
+Configurar=Konfigurieren
+configurar_ANDAMI=Konfigurationdialog von ANDAMI
+configurar_localizador=Navigator konfigurieren
+Configurar_localizador=Navigator konfigurieren ...
+configurar_todas_las_extensiones=
+confirm_gid=
+confirmacion=
+confirmar_borrar=Sind Sie sicher, dass Sie dieses element l\u00f6schen wollen?
+connect=
+connect_error=Verbindungsfehler
+connectButton=Verbinden
+connection_name=Name der verbindung
+conservar_escala_visualizacion=Darstellungsma\u00dfstab beibehalten
+Consola=Konsole
+consulta=Abfrage
+contact_info=
+contact_organization=Organitzaci\u00f3
+contact_person=Name
+contact_position=C\u00e0rrec
+Contengan=Beinhalten
+contiene_espacios_en_blanco=
+contraste=Contrast
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=
+coor_geograficas=Geografische koordinaten
+coordenadas_vacias=
+coordinates=Koordinaten
+coordinatesContains=enth\u00e4lt
+coordinatesEnclose=schlie\u00dft ein
+coordinatesEqual=gleich
+coordinatesFullyOutsideOf=befindet sich au\u00dferhalb von
+copiar=
+copy=
+copy_=
+cortar=
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=
+coverage=
+covered_extension=Verl\u00e4ngerung
+Crear_Buffer=
+Crear_Indice=
+Crear_Indice_Intro=
+Crear_Indice_Pregunta_1=
+Crear_Indice_Pregunta_2=?
+crear_worldfile=
+created_with=
+creation_date=Erstellungsdatum
+credentials=Autentication
+cross_circle=
+cross_polygon=
+Crucen_con=Sich kreuzen mit
+Cruz=Kreuz
+Cuadrado=Quadrat
+cuadro_no_asociado=
+cuando_activo=Wenn aktiv
+cut=
+Dado_un_campo_de_atributos=Bei vorgegebenen attributfeld\:
+database=Name der Datenbank
+de=of
+De=of
+debe_estar_activada=Sollte aktiviert sein.
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+default_name=
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+densityfication=Flatness
+Dentro=inside de polygon
+Dentro_y_fuera=
+Derecha=Rechts
+Derecho=Rechts
+desactivar_capa=
+desactivar_puntos=
+desagrupar=Gruppe aufl\u00f6sen
+desagrupar_capas=
+desagrupar_graficos=Grafikgruppe aufl\u00f6sen
+descending_order=Absteigende ordnung
+descending_order_tooltip=Sortierung nach dem ausgew\u00e4hlten Feld in absteigender Ordnung.
+desconectar=Verbindung aufl\u00f6sen
+descripcion=Beschreibung
+Descripcion=Beschreibung
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description=Beschreibung
+description_URL=
+desde=von
+desde_arriba=Von oben\:
+desde_izquierda=Von links\:
+desea_borrar_la_capa=
+deshacer=
+Desplazamiento=Verschieben
+desviacion_tipica=Typische Abweichung
+detalles=Details
+Detalles=Details
+DGNFiles=DGN-Datei
+Diferencia=Difference
+Diferencia_Introduccion_de_datos=
+dimension=Dimension
+dimensiones=Dimensionen
+directorio=Verzeichnis
+directorio_extensiones=Verzeichnis der Erweiterungen
+disagregate_layers=
+Disolver=Dissolve
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+distance_units=Ma\u00dfeinheiten
+distribuir=Verteilen\:
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+divisiones_izquierda=Teilungen auf der linken Seite
+documentos_existentes=Vorhandene dokumente
+downloadColumn=Herunterladen
+driver=Treiber
+drivers=Treiber
+dxf_files=DXF files
+Dxffiles=DXF-Dateien
+e-mail=E-mail
+edicion=
+edit=
+edit_vertex=
+edit_vertex_=
+editable=Editierbar
+Editar_leyenda=Legende editieren
+editar_propiedades=Eigenschaften editieren
+editar_vertices=
+el_numero_maximo_de_intervalos_para_este_campo_es=Die maximal Intervallenummer f\u00fcr dieses Feld ist
+Elegir_Color=Farbe ausw\u00e4hlen
+Elegir_Fuente=Schriftart ausw\u00e4hlen
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Ausgew\u00e4hlte elemente des layers
+Elija_una_herramienta_de_analisis=
+Eliminar=L\u00f6schen
+eliminar_capa=Layer l\u00f6schen
+eliminar_extremos=Extreme l\u00f6schen
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+ellipse=Elipse
+ellipse_=ELLIPSE
+en_el_mapa=Auf der karte\:
+En_metros=In Metern
+En_pixels=In pixeln
+en_unidades=
+Encuadre=Bildausschnitt
+Encuadre_Vista=Ansicht im bildausschnitt verschieben
+end=
+end_polygon=
+endinfo=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+enlace_vivo=Aktiver link zum original
+Enlazar_a_fichero_de_texto=Link zu textdateien
+Enlazar_a_ficheros_de_imagen=Link zu bilddateien
+enter_layer_name=
+enter_path_to_file=
+equal_intervals=Gleiche intervalle
+equidistance=
+error=Error
+Error_abriendo_el_fichero=Fehler bei \u00d6ffnen der datei
+Error_accediendo_a_los_datos=Fehler beim zugriff auf die daten
+Error_atributo_no_numerico=
+error_capa_puntos=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+error_comunicacion_servidor=Verbindungsfehler mit dem Server
+error_conexion=Fehler bei der Verbindung zur Datenbank
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+error_escritura=Das Projekt konnte nicht gespeichert werden
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+error_file_exists=
+error_file_not_writable=
+Error_guardando_la_leyenda=Fehler beim Speichern der Legende
+Error_guardando_la_plantilla=
+error_lectura=Das Projekt konnte nicht ge\u00f6ffnet werden
+Error_preparar_escritura_resultados=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+error_writting_file=
+errores=Fehler
+errores_csv=
+errorFENotSupported=Vorerst wird f\u00fcr Abfragen der "Filter encoding"- Code ben\u00f6tigt, der vom Server nicht unterst\u00fctzt wird.
+errorGetRecords=Fehler beim GetRecords
+errorIsASRWServer=Es handelt sich um einen SRW-Server\!
+errorNotCSWSupportedProtocol=Der Server wurde gefunden, aber er scheint das CS-W-Protokoll nicht zu unterst\u00fctzen.
+errorNotParsedReply=Fehler bei der Verarbeitung der Antwort. Der Server wurde gefunden, aber m\u00f6glicherweise unterst\u00fctzt er das angegebene Protokoll nicht.
+errorNotSupportedCapabilities=Fehler beim Erstellen eines Getcapabilities. Dies kann zwei Gr\u00fcnde haben\: Entweder es gab einen Fehler bei der Durchf\u00fchrung der Operation, oder der Server unterst\u00fctzt das angegebene Protokoll nicht.
+errorNotSupportedProtocol=Der Server unterst\u00fctzt das angegebene Protokoll nicht.
+errorNotThesaurusSelected=Das WFS-Protokoll ben\u00f6tigt f\u00fcr die Suche ein Element des Stichwortverzeichnisses.
+errorServerException=Der Server hat eine Ausnahme zur\u00fcckgegeben.
+errorServerNotFound=Konnte den Server nicht finden.
+errorSOAPProtocol=Fehler im SOAP-Protokoll
+escala=Ma\u00dfstab
+Escala=Ma\u00dfstab
+escala_maxima=Maximalma\u00dfstab
+Escala_Maxima=Gr\u00f6\u00dfter ma\u00dfstab
+escala_minima=Minimalma\u00dfstab
+Escala_Minima=Kleinster ma\u00dfstab
+escala_usuario=Benutzerdefinierter Ma\u00dfstab
+Escoger_Fun_Resumen=
+espaciado_horizontal=Horizontaler rasterabstand
+espaciado_vertical=Vertikaler Rasterabstand
+espacio=Leerzeichen\:
+espere=Warten sie bitte.
+estadisticas=Statistiken
+este_por_debajo_de_=Kleiner ist als
+este_por_encima_de=Gr\u00f6\u00dfer ist als
+Esten_contenidos_en=Enthalten sind in
+Estilo=Stil\:
+estilos=Stile
+Etiqueta=Etikett
+Etiquetado=Etikettierung
+Etiquetados=Etikettierung
+etiquetas=Etiketten\:
+Etiquetas_estandar=Standard-Etiketten
+exactSentence=Genauer satz
+examinar=Untersuchen
+Examinar=Browse
+exploit=
+exploit_=
+export=Exportieren
+export_to=Exportieren nach...
+exportando_features=
+exportar=Exportieren
+exportar_a=Exportieren nach...
+exportar_pdf=Als pdf exportieren
+exportar_ps=Als ps exportieren
+exporting_=
+extend=
+extend_=
+extension=Verl\u00e4ngerung
+extension_activada=Erweiterung aktiviert
+extensiones=
+Extent=Bildbereich
+extents_no_coincidentes=Die ausgew\u00e4hlte Bildgr\u00f6\u00dfe stimmt nicht mit dem Originalbild \u00fcberein.
+factor=Factor
+fallo_capas=Fehler beim Zugriff auf die Layer. Die folgenden Layer werden aus dem Projekt entfernt
+fallo_crear_conexion=Verbindungsfehler
+fallo_crear_pool=Fehler beim Herstellen des Verbindungspools
+fallo_obtener_conexion_existente=Fehler beim Laden einer bestehenden Verbindung
+fallo_obtener_tablas=Fehler beim Laden der Tabellen von der Datenbank
+fallo_realizar_consulta=Abfragefehler
+fallo_registrar_conexion=Fehler bei der Verbindungsregistrierung
+fax=Fax
+feature=
+features_desea_continuar=
+Fichero=Datei
+fichero_existe=Ausgew\u00e4hlte datei existiert schon als layergruppe.
+fichero_incorrecto=Unrichtige datei
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=
+Ficheros_SHP=
+field=
+fields=
+file=
+file_exists=
+file_name=
+file_version=
+filtro=Filter
+final_point=
+finalizar=Beenden
+finish=Beenden
+fit_WCS_layer=
+fit_WFS_layer=
+fit_WMS_layer=WMS-Karte anpassen
+Font=Schriftart
+format=Format
+formato=Format
+Formato=Format
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=
+formato_incorrecto=Unrichtig Format
+formatos=Formate
+from=von
+fuente=Schriftart
+Fuente=Schriftart
+Fuera=
+fuera_de_extent=
+Funciones_Sumarizacion=
+gazetteer_connect=Verbindung \u00fcber Namensverzeichnis
+gazetteer_search=Suche \u00fcber Namensverzeichnis
+general=Allgemein
+General=Allgemein
+Generar_Intervalos=Intervalle erzeugen
+geometry=Geometry
+Geoprocesos=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+gestion_encuadre=Verwaltung der Bildausschnitte
+Gestor_de_Geoprocesos=
+goto=Auf das Suchergebnis zoomen
+grado_polinomio=
+grados=Grad\:
+Grados=Grad
+Graficos=Grafiken
+Grosor_de_linea=Strichst\u00e4rke
+grosor_linea=Strichst\u00e4rke
+group=Gruppieren
+group_graphic_line=
+grupo=
+GT2shp=GT2shp
+guardado=Gespeichert in
+guardar=
+Guardar=Speichern
+guardar_cambios=\u00c4nderungen speichern?
+guardar_clave=Passwort speichern
+guardar_como=Speichern unter ...
+guardar_como_plantilla=als Vorlage speichern
+Guardar_el_zoom_actual=Aktuellen zoom speichern
+guardar_leyenda=Legende speichern
+Guardar_leyenda=Legende speichern
+guardar_proyecto=Projekt speichern
+guardar_tooltip=Speichert die \u00c4nderungen des Projekts
+Habilitar_etiquetado=Etikettierung aktivieren
+hasta=bis
+height=
+Herramientas=Werkzeuge
+Herramientas_de_analisis=
+Herramientas_vista=Ansichtswerkzeuge
+hide_grid=
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+horizontal_space=
+host=
+hostname=Hostname
+html_in_a_new_view=
+html_in_other_view=
+html_in_the_current_view=
+id=ID
+Identificar_Resultados=Ergebnisse identifizieren
+idioma=
+Igual_que_la_impresora=Wie drucker
+igual_todos_lados=Gleiche Verschiebung in alle richtungen
+imagen=Bild
+Imagen=Bild
+imagen_no_accesible=
+import=Importieren
+import_from_ascii=
+import_layer=Layer in PostGIS speichern
+import_map_context=
+importar=Importieren
+importar_extent=Aktuellen Ansichtsbereich importieren.
+Imprimir=Drucken
+in=in
+incorrect_option=
+incorrect_point=
+incorrect_value=
+Indexando=Indexing...
+Indexando_espacialmente=
+Inferior=Unten
+info=Information
+info_format_not_supported=
+infobreak=Zeigt die Elemente des Layers mit der gleichen farbpalette.
+infodef=Zeigt alle Elemente des Layers mit dem gleichen symbol.
+informacion=Information
+Informacion=Information
+infovalue=Zeigt elemente des layers mit je einem symbol pro wert.
+Inicializando=Initialisiert
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_column=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar=
+Insertar=Einf\u00fcgen
+insertar_cajetin=
+insertar_circulo=Kreis einf\u00fcgen
+insertar_escala=Ma\u00dfstab einf\u00fcgen
+insertar_fila=
+insertar_imagen=Bild einf\u00fcgen
+insertar_leyenda=Legende einf\u00fcgen
+insertar_linea=Linie einf\u00fcgen
+insertar_norte=Nordung einf\u00fcgen
+insertar_poligono=Polygon einf\u00fcgen
+insertar_polilinea=
+insertar_punto=Punkt einf\u00fcgen
+insertar_recta=Gerade einf\u00fcgen
+insertar_rectangulo=Rechteck einf\u00fcgen
+insertar_texto=Text einf\u00fcgen
+insertar_vista=Ansicht einf\u00fcgen
+inside_circle=
+inside_polygon=
+inteligentSearch=intelligente suche
+inteligentSearchAscii=Sonderzeichen, Gross- und Kleinschreibung usw. ignorieren
+inter_arc=
+inter_line=
+internal_polygon_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+Intersecten_con=Sich \u00fcberschneiden mit
+interval=Intervall
+intervalo=Intervall
+Intervalo=Intervall
+Intervalos=Intervalle
+Intervalos_equidistantes=Gleichwertige IIntervalle
+Intervalos_por_rupturas_naturales=Intervalle durch nat\u00fcrliche brechungen
+into_circle=
+into_circle_or_circumscribed=
+intro_tablename=Bitte den Namen der neuen Tabelle eingeben. ACHTUNG\: Wenn es bereits eine Tabelle dieses Namens gibt, wird sie gel\u00f6scht\!
+introduce_nombre=Geben Sie den neuen Namen ein.
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_intervalo_deseado=Das gew\u00fcnschte Intervall eintragen
+is_required=
+Italic=Kursiv
+Izquierda=Links
+Izquierdo=Links
+join=Verbindung
+join_=
+jpg=JPEG-Datei
+Juntar=
+Juntar._Introduccion_de_datos=
+KeyMapping.Caracter_no_valido=Ung\u00fcltigiges zeichen\:
+keywords=
+keyWords=Schl\u00fcsselw\u00f6rter
+kilometros=Kilometer
+Kilometros=Kilometer
+last=Vorheriger
+lastUpdateDate=Datum der letzten Aktualisierung
+latitud=
+Launcher.config_mal_formado=. Datei 'config.xml' fehlerhaft
+Launcher.config_no_encontrado=Konnte die Datei 'config.xml' nicht finden.
+Launcher.Dependencia_no_resuelta_en_plugin=Ungekl\u00e4rte Plugin-Abh\u00e4ngigkeit
+Launcher.Dos_skin_extension=Zwei skin-extensions. Es wird die letzte verwendet.
+Launcher.Error_con_las_librerias_del_plugin=Fehler bei den Plugin-Bibliotheken
+Launcher.Error_instanciando_la_extension=Kann die erweiterung nicht instanziieren.
+Launcher.Error_localizando_la_clase_de_la_extension=Fehler bei der lokalisierung der erweiterungsklasse
+Launcher.Hay_dependencias_circulares=Kreisf\u00f6rmige abh\u00e4ngigkeiten zwischen den plugins
+Launcher.Ignorando_el_directorio=Das verzeichnis wird ignoriert.
+Launcher.labelset_class=Kann die etikettenklasse (labelset) nicht finden.
+Launcher.look_and_feel=Konnte nicht auf 'look and feel'  stellen.
+Launcher.No_se_encontro_la_clase_de_la_extension=Konnte die erweiterungsklasse nicht finden.
+Launcher.No_se_encontro_la_clase_mdi_manager=Konnte die mdi-manager-klasse nicht finden.
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Konnte nicht auf den mdi-manager zugreifen.
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Konnte die Andami-Erweiterung nicht speichern.
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Konnte den mdi-manager nicht erstellen.
+Launcher.No_se_puede_acceder_a=Kein Zugriff m\u00f6glich auf\:
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Fehler bei der speicherung der plugin-konfiguration
+Launcher.Two_extensions_with_the_same_priority=Zwei Erweiterungen mit der gleichen Priorit\u00e4t. Es wird nur eine geladen.
+Launcher.Two_menus_with_the_same_position=Zwei Men\u00fcs mit der gleichen priorit\u00e4t. Es wird nur eins geladen.
+layer=
+Layer=Layer
+layer_abstract=Zusammenfassung
+layer_name=Name des Layers
+layer_title=Layertitel
+layerName=
+LayerName=
+layers_in_other_view=
+layers_in_the_current_view=
+layerType=
+length=
+leyenda=Legende
+Leyenda=Legende
+leyenda_campo_unido=Man verwendt ein Field der Verbindung in der Legende (und/oder Etikettierung). Tauschen Sie die Legende vorher aus, die Verbindung aufzul\u00f6sen.
+Leyenda_Por_Defecto=Legende nach vorgabe
+line=
+line_=
+line_type=
+linea=Linie
+Linea=Linie
+linea_grafica=Grafiklinie
+lineal_directo=Direktlineal
+linf_der=x unten rechts
+link=Link
+Link=Link
+linkColumn=Website
+linkError=Fehler beim Laden des links
+linkLoad=Netzressource laden
+load_from_xml=
+loadWMS=WMS laden
+localizador=Locator
+Localizador_por_atributo=F\u00fcr attribut lokalisieren
+localize=lokalisieren
+logo_URL=URL logotip
+longitud=
+lowerCoordinates=untere
+lppp=dpi
+lsup_izq=X oben links
+m/pixel=metros/pixel
+malla_activada=Raster aktiviert
+mantainold=Vorherige Suchanfragen l\u00f6schen
+mantener_intervalo=Intervall beibehalten
+map_context_file_error=
+map_extent=Verl\u00e4ngerung
+map_size_in_pixels=
+map_units=Karteneinheiten
+mapa=
+Mapa=Karte
+mapas=Karten
+marco=Rahmen
+marco_vista=Ansichtsrahmen
+margenes=R\u00e4nder\:
+Mas_100=Die Anzahl der Werte ist h\u00f6her als 100 und es ist keine Information verf\u00fcgbar.
+mas_de_100_simbolos=Mehr als 100 Symbols liefern keine Information zu der Karte
+maxFeatures_aviso=
+maximo=Maximal
+Maximo=
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Anwendungsfehler
+MDIFrame.quiere_salir=Sind Sie sicher, dass Sie das Programm beenden wollen?
+MDIFrame.salir=Beenden
+MDIManagerFactory.No_skin_extension_in_the_plugins=Keine skin-extension in den plugins gefunden
+media=Mittel
+Media=
+medir_area=Fl\u00e4che messen
+medir_distancias=Abst\u00e4nde messen
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages._no_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
+metadata_catalog=Suche nach Geodaten - Verbindung
+metadata_tree=Metadatenbaum
+metadatos=
+metros=Meter
+Metros=Meter
+Milimetros=Milimeter
+Millas=Meilen
+minimo=Minimal
+Minimo=
+minx=min.x
+miny=min.y
+modificar=
+modification_date=Letzte \u00c4nderung
+modify=
+mosaico_tooltip=Mosaik
+Mostrar_Contorno=Kontur zeigen
+mostrar_descripcion=Beschreibung anzeigen.
+mostrar_puntos=
+Mostrar_siempre=Immer zeigen
+mostrar_unidades=Einheiten anzeigen
+move=
+move_=
+move_elements=
+Move_from_view=
+move_handlers=
+move_layer_down=Nach unten verschieben
+move_layer_up=Nach oben verschieben
+Mover_geo=
+msg_save_raster=
+mtspixel=Mts/pixel
+muestra=Probe
+Muestra_atributos=Zeigt die attribute der ausgew\u00e4hlten Layer.
+muestra_consola_tooltip=Zeigt die Konsole an.
+Muestra_los_atributos_de_las_capas_seleccionadas=Zeigt die Attribute der ausgew\u00e4hlten Layer.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zeigt Elemente des Layers mit je einem symbol pro Wert.
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zeigt die Elemente des Layers mit der gleichen Farbpalette, abh\u00e4ngig vom Wert eines bestimmten Attributfelds.
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zeigt alle elemente des layers mit dem gleichen symbol.
+multi_type=
+multiple_value=multiple Werte
+multiples_intervalos=Multible Intervalle
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+name=Name
+natural_intervals=Nat\u00fcrliche Intervalle
+navegacion=\u00dcbersicht
+navegacion_vista=\u00dcbersicht der Ansicht
+necesita_un_tema_activo=Es wird ein aktiviertes Thema ben\u00f6tigt.
+necesita_un_tema_vectorial_activo=Es wird ein aktiviertes Medir \u00e1rea vektorthema ben\u00f6tigt.
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_layer=
+new_postgis=
+new_shp=
+next=Weiter
+Next=Weiter
+next_point_or_end=
+next_previous_add_del_cancel=
+ninguna_impresora_configurada=Kein Drucker konfiguriert
+Nivel_de_transparencia=Transparenzgrad
+no=No
+no_activos=inaktiv
+no_adjust_grid=
+No_de_intervalos=Anzahl intervalle
+no_hay_ninguna_capa_seleccionada=
+no_hay_ninguna_capa_seleccionado=
+No_mostrar=Den Layer nicht zeigen, wenn der Ma\u00dfstab ...
+No_mostrar_la_capa_cuando_la_escala=Den layer nicht zeigen, wenn der ma\u00dfstab ...
+no_puede_continuar=
+No_reconocido=Nicht erkannt
+No_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_Shape=Dieser Layer ist kein Shape.
+No_usar_buffer_redondeado=
+no_visibles=Unsichtbar
+nombre=Name
+Nombre=Name
+nombre_capa=Name des Layers
+nombre_cobertura=Name der bedeckung
+nombre_feature=
+Nombre_que_se_le_dara_al_zoom=Name des zooms
+nombre_sesion=Name der session
+Nombres=Namen
+none_selected=keiner ausgew\u00e4hlt
+normal=Normal
+north=Nord
+not_available=Nicht verf\u00fcgbar
+Nueva_tabla=Neue tabelle
+nuevo=Neu
+Nuevo_conjunto=Neuer datensatz
+nuevo_proyecto=Neues projekt
+nuevo_tamano_fuente=Neue schriftgr\u00f6\u00dfe\:
+nuevo_tooltip=Erstellt ein neues projekt
+num_bandas=Anzahl farbstreifen
+num_columnas=
+num_filas=
+Num_intervalos=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+Numero_de_segmentos_por_cuadrante=
+numero_incorrecto=Unrichtig nummer
+N\u00fam_intervalos=Anzahl Intervalle
+Obtener_mas_proximo=
+of=von
+ogc_mapcontext_file=OGC Web Map Context
+ok=OK
+Ok=Ok
+onSharpening=Pansharpening aktivieren
+opacidad=Lichtundurchl\u00e4ssigkeit
+opciones=Optionen
+open_first_time=Eine Ansicht \u00f6ffnen
+open_layers_as=
+Operacion_de_overlay=
+Operaciones_adicionales=
+optinos.network.click_to_test_connection=
+options=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=Password
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.general.select_theme=
+options.network.status=
+orientacion=Ausrichtung
+origen_de_datos=Herkunft der daten
+Origen_de_datos=Herkunft der daten
+Origen_de_Datos=Herkunft der daten\:
+Otros=Andere
+out_circle=
+out_polygon=
+out_rectangle=
+owner=Besitzer
+page=Seite
+paint=Das Ergebnis aufzeichnen
+parameters=Parameter
+parametros=Parameter
+Parametros=Parameter
+password=Passwort
+paste=Paste
+paste_elements=
+path=Pfad
+pegar=
+Perimetro=Umfang
+period=Periode
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Erm\u00f6glicht das etiketieren von elementen der karte, mit dem wert eines bestimmten felds.
+Personalizado=Benutzerdefiniert
+Pies=Feet
+pila_de_comandos=
+pixeles=pixel
+pixels=pixels
+Plain=Einfach
+plantilla=
+plegar_despl=Plegar/Desplegar
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Zwei Klassen mit dem gleichen Namen im Plugin
+PluginClassLoader.Error_reading_file=Dateilesefehler \:
+pluginNotFound=Es fehlt die n\u00f6tige Erweiterung f\u00fcr das Laden dieser Ressource.
+pluginNotFoundTitle=Layer laden
+PluginServices.Bug_en_el_codigo=Bug im Code
+PluginServices.Error_grave_de_la_aplicacion=Schwerer Anwendungsfehler. Sie sollten Ihre daten speichern und die anwendung beenden.
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Konnte die \u00dcbersetzungsressource nicht finden.
+PluginServices.No_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Konnte die Sanduhr nicht stellen.
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Konnte den cursor nicht wiederherstellen.
+PluginServices.Procesando=
+png=PNG-Datei
+point=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+poner_temas_a=
+por_debajo_de=unter\:
+por_encima_de=\u00fcber\:
+Por_favor_active_el_tema=
+Por_favor_active_la_capa=
+posicion_linea=Position der Linie
+postcode=
+postgisColumn=Postgis
+postgisError=Fehler beim Laden der Postgis-Datenbasis
+postgisLoad=Postgis laden
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferences=
+preferencias=
+Preferencias=
+preparar_pagina=Seite einrichten
+Preparar_pagina=Seite einrichten
+presentacion=Pr\u00e4sentation
+previous=
+previsualizacion=
+Previsualizacion=Voransicht
+Previsualizacion_de_simbolo=Symbolvoransicht
+primero=
+prioridad=Priorit\u00e4t
+procesar=
+process_tip=
+properties=Eigenschaften
+propiedad=
+propiedades=Eigenschaften
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=Eigenschaften des Layers
+Propiedades_de_la_Capa=Eigenschaften des layers
+propiedades_del_tema=
+Propiedades_del_Tema=Eigenschaften des themas
+Propiedades_escala_grafica=Eigenschaften des Ma\u00dfstabsbalkens
+propiedades_grafico=Eigenschaften der grafik
+propiedades_mapa=Eigenschaften der Karte
+propiedades_marco_imagenes=Eigenschaften des bildrahmens
+propiedades_marco_leyenda=Eigenschaften des Legenderahmens
+propiedades_marco_vista=Eigenschaften des ansichtsrahmens
+propiedades_raster=Eigenschaften der rasterung
+propiedades_sesion=Eigenschaften der session
+propiedades_tabla=Eigenschaften der tabelle
+propiedades_tema=
+Propiedades_texto=Eigenschaften des textes
+propiedades_vista=Eigenschaften der ansicht
+props=
+protocolsGroup=Protokolle
+provider=Provider
+prueba_conexion=\u00fcberpr\u00fcfen der Verbindung
+puerto=
+Pulgadas=Inches
+punto=Punkt
+puntos=
+purpose=Zweck
+pwd=
+quantile_intervals=Quantile Intervalle
+quiere_continuar=W\u00f6llen Sie wietermachen?
+quitar=Entfernen
+Quitar=Entfernen
+Quitar_capa=Layer entfernen
+quitar_enlaces=Links aufl\u00f6sen
+Quitar_todos=Alle entfernen
+Quitar_Todos=Alle entfernen
+quitar_uniones=Verbindungen aufl\u00f6sen
+rango_de_escalas=Ma\u00dfstabsbereich
+Rango_de_escalas=Ma\u00dfstabsbereich
+Rasterfiles=Rasterungsdateien
+realce=Heraushebung
+realces=
+realmente_desea_guardar=
+Recortar=Clip
+Recortar._Introduccion_de_datos=
+recorte=Zuschnitt
+recorte_colas=Zuschnitt der Randbereiche
+recorte_vista=Ausschneiden nach Augenma\u00df
+recta=Gerade
+rectangle=
+rectangle_=
+rectangulo=Rechteck
+recuento=Nachz\u00e4hlung
+Recuperar_leyenda=Legende laden
+Recuperar_y_eliminar_otros_zoom=Andere zooms laden oder l\u00f6schen
+redo=
+redo_error=
+reference=
+refrescar=Aktualisieren
+refresh_capabilities=Cache aktualisieren
+refresh_capabilities_tooltip=Markieren Sie dieses Feld, um die lokalen Daten zu \u00fcberschreiben.
+registros=Register
+registros_seleccionados_total=Alle ausgew\u00e4hlten register
+rehacer=
+rellenar_marco_vista=Ansichtsrahmen f\u00fcllen
+relleno=F\u00fcllung\:
+remove=Entfernen
+remove_column=
+remove_elements=
+remove_geometry=
+remove_row=
+remove_rows=
+renombrar=Umbenennen
+reproyectar_aviso=Die Layerprojektion deckt sich nicht mit der Ansichtsprojektion. \nACHTUNG\: Bei einigen Transformationen k\u00f6nnte sie ungenau sein.\nLesen Sie bitte die Dokumentation.
+reproyectar_pregunta=W\u00fcnschen Sie eine neue Projektion?
+resolucion=Aufl\u00f6sung
+resolucion_resultado=Ausgabeauf\u00f6sung\:
+resolution=
+resourceLinkColumn=Link
+resourceShowColumn=Zeigen
+resourceTypeColumn=
+respuesta_error_servidor=Konnte das Cover nicht bekommen.
+resto_valores=Andere werte
+restore=
+restrictArea=Suchbereich eingrenzen
+results=Ergebnisse
+resutsByPage=Ergebnisse nach Seiten
+rootName=Stammverzeichnis
+rotate=
+rotate_=
+salir=Schlie\u00dfen
+Salir=Schlie\u00dfen
+salir_tooltip=Schlie\u00dfen
+salvar=
+salvar_raster=Als Rasterung sichern
+Sample=Beispiel
+save_to_ascii=
+save_to_xml=
+scale=Ma\u00dfstab
+scale_=
+scaleAny=irgendein Ma\u00dfstab
+scaleI=>1.000.000
+scaleII=1\: 1.000.000 bis 1 \: 250.000
+scaleIII=1 \: 250.000 bis 1 \: 50.000
+scaleIV=1 \: 50.000 bis 1 \: 10.000
+scaleV=1 \: 10.000 bis 1 \: 5000
+scaleVI=< 1 \: 5.000
+Se_superponen_a=Sich \u00fcberlagern \u00fcber
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=L\u00f6schen aller Register ab ...
+se_van_a_guardar_=
+Sean_disjuntos_a=getrennt sind von
+Sean_iguales_a=gleich sind wie
+search_results=Suchergebnisse
+searchButton=Suchen
+seleccion=Auswahl
+seleccion_campos=W\u00e4hlen sie die felder aus.
+seleccion_de_campos=Auswahl der felder
+seleccion_fuente=Schriftart w\u00e4hlen
+Seleccion_por_capa=
+Seleccion_por_tema=Auswahl \u00fcber thema
+selecciona_sistema_de_referencia=
+seleccionar=
+Seleccionar=ausw\u00e4hlen
+seleccionar_capas=Layer ausw\u00e4hlen
+seleccionar_coberturas=Covers ausw\u00e4hlen
+seleccionar_CRS=CRS ausw\u00e4hlen
+Seleccionar_de_las_capas_activas_los_elementos_que=In den aktiven layern nach elementen suchen, die\:
+Seleccionar_del_conjunto=Aus dem datensatz ausw\u00e4hlen
+Seleccionar_Directorio=
+seleccionar_fichero=
+Seleccionar_fichero=Datei ausw\u00e4hlen
+seleccionar_formato=Format ausw\u00e4hlen
+seleccionar_parametros=Parameter ausw\u00e4hlen
+seleccionar_por_punto=\u00dcber Punkt ausw\u00e4hlen
+seleccionar_por_rectangulo=Auswahlrahmen
+seleccionar_puntos=
+seleccionar_srs=SRS ausw\u00e4hlen
+seleccionar_tiempo=Zeitposition ausw\u00e4hlen
+seleccionar_todos=Alle ausw\u00e4hlen
+seleccione_campo_enlace=W\u00e4hlen Sie das Feld aus, \u00fcber das sie verlinken wollen.
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=W\u00e4hlen sie ein Datum aus ...
+seleccione_tabla=W\u00e4hlen sie die tabelle aus.
+seleccione_tabla_a_enlazar=W\u00e4hlen Sie die Tabelle aus, die Sie verlinken wollen.
+seleccione_tabla_origen=W\u00e4hlen Sie die Originaltabelle f\u00fcr die Verbindung aus.
+select=
+select_all=Alle ausw\u00e4hlen
+select_driver=
+select_features=
+select_fields=
+select_formats=Formate ausw\u00e4hlen
+select_from_point=
+select_geom_field=W\u00e4hlen Sie das Feld mit der Geometrie aus.
+select_geometry=
+select_geometry_type=
+select_handlers=
+select_layers=Layer ausw\u00e4hlen
+select_none=Alle aus der Auswahl entfernen
+select_other_geometry_or_end=
+select_unique_field=W\u00e4hlen Sie das einmalige Feld aus.
+selectBandaRefinado=Pancromatic Band Selector
+selected_dimensions=Dimensionen ausw\u00e4hlen
+selected_layer=
+selected_layers=Ausgew\u00e4hlte layer
+selected_parameters=
+selected_themes=Ausgew\u00e4hlte themen
+selectfromview=
+selection=
+selection_=
+selection_color=Farbe der Auswahl
+server=Server
+server_abstract=Zusammenfasssung
+server_cant_render_layers=Dieser WMS-Server kann diese Layer nicht zusammen rendern. Versuchen Sie, die einzelnen Layer abzufragen.
+server_timeout=Der WMS-Server antwortet nicht\: Time out
+server_title=Titel
+server_type=Servertyp
+serverReply=Antwort des Servers
+serverURL=Geben Sie die Adresse ein, wo sich der Katalogserver (URL) befindet.
+serverURLCat=Geben Sie die Adresse ein, wo sich der Server des Namensverzeichnisses (URL-Cat) befindet.
+service_info=Service-Information
+servidor=Server
+Servidor=Server
+servidor_wcs_no_responde=Der ausgew\u00e4hlte Server reagiert nicht.
+set=Festlegen
+settings=Einstellungen
+settings_editor=Einstellungseditor
+shape_seleccion=Auswahl exportieren
+Shapefile=Shapefile
+Shapefiles=SHP-Dateien
+show_grid=
+show_layer_names=Namen anzeigen
+show_this_dialog_next_startup=
+shp_files=SHP files
+siempre=Immer
+siguiente=Weiter
+Siguiente=N\u00e4chster
+simbolo=
+Simbolo=Symbol
+Simbolo_unico=Einmaliges symbol
+Simbolo_Unico=Einmaliges Symbol
+Simbologia=Symbole
+simple=Einfach
+simplificar=Vereinfachen
+sin_realce=Ohne heraushebung
+sin_titulo=Ohne Titel
+sincronizar_color_borde_relleno=Die randfarbe mit der f\u00fcllung synchronisieren\:
+single_value=einfacher Wert
+size=
+Size=Gr\u00f6\u00dfe
+sobre_la_barra=Auf dem Balken
+Sobreescribir_fichero=
+Solo_disolver_adyacentes=
+Solo_para_capas_vectoriales=Nur f\u00fcr Vektorlayer
+splain=
+SplashWindow.Iniciando=Startet...
+square=
+srs=Srs
+start_edition=
+state_or_province=
+statistics=Statistiken
+StatusBar.Aplicacion_iniciada=Anwendung gestartet
+stop_edition=
+stretch=
+stretch_=
+style=Stil
+Style=Stil
+Subir_capa=Layer nach oben
+Sum=Summatory
+suma=Summe
+Superior=Oben
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+S\u00edmbolo=Symbol
+Tabla=Tabelle
+Tabla_de_Atributos=Attributtabelle
+Tabla_de_prueba=Testtabelle
+tablas=Tabellen
+Tablas=Tabellen
+table=Tabla
+tag=tag
+tamano=Gr\u00f6\u00dfe\:
+tamano_metros=Gr\u00f6\u00dfe in Metern
+tamano_pagina=Seitenformat\:
+tamano_posicion=Gr\u00f6\u00dfe und Position
+tamanyo_borde=Randgr\u00f6\u00dfe
+tamanyo_fuente=Schriftgr\u00f6\u00dfe
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+tarea_en_progreso=Auftrag wird bearbeitet.
+telephone=Tel\u00e8fon
+Tema=Layer
+Terminar=
+terminate=Terminate
+test_now=
+texto=
+theme=
+Tiempo=Zeit
+Tile=Mosaik
+tile_tooltip=Organisiert die Fenster als Mosaik
+time=
+timeout=Timeout
+tipo_dato=Datentyp
+tipo_de_intervalo=Intervallesart
+Tipo_de_intervalos=Intervalltyp
+tipo_de_leyenda=Legendentyp
+Tipo_de_leyenda=Legendentyp
+Tipo_de_linea=Strichtyp
+tipo_fichero_proyecto=Projektdatei gvSIG (*.gvsproj)
+tipo_leyenda=Legendentyp-Datei (*.GVL)
+tipo_linea=Strichtyp\:
+Tipo_no_reconocido=Typ nicht erkannt
+tipo_relleno=F\u00fcllstil\:
+tipo_simbolo=Symboltyp\:
+tipos_de_documentos=Dokumenttyp
+title=Titel
+titulo=Projektverwalter
+titulo_confirmar=Best\u00e4tigung
+titulo_consola=Informationskonsole
+titulo_fframetext=Titel des Textfelds
+to=Bis
+to_annotation=
+to_palette=
+toda_la_tabla=Die gesamte Tabelle
+todos=Alle
+Toquen=fassen an
+total=
+transparencia=Transparenz
+Transparencia=Transparenz
+transparencia_pixel=
+Triangulo=Dreieck
+trim=
+type=Typ
+ultimo=
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=W\u00e4hlen Sie mindestens einen layer aus.
+undo=
+undo_error=
+ungroup=Gruppe aufl\u00f6sen
+unidades=Einheiten\:
+Unidades=Einheiten\:
+Union=Union
+Union._Introduccion_de_datos=
+unite_separate=
+unknown=unbekannt
+unknown_response_format=Unbekanntes format der antwort
+unsupported_map_context_version=
+unsupported_version=
+untitled=Ohne Titel
+upperCoordinates=Obere
+Usar_indice_espacial=R\u00e4umlichen Index benutzen
+Usar_los_campos_de_la_capa=
+usar_marco=Rahmen verwenden
+usar_rango=Eine Rangordnung benutzen
+Usar_solamente_los_elementos_seleccionados=
+usar_titulo=Titel verwenden
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+username=
+usuario=Benutzer
+utilizar_margenes_impresora=Randbegrenzung des Druckers verwenden
+vacia=
+valor=Wert
+Valor=Wert
+Valor_azul=Wert blau
+Valor_Bandas=Wert Farbstreifen
+valor_pixel=Pixelwert
+Valor_rojo=Wert rot
+Valor_verde=Wert gr\u00fcn
+Valores=Werte
+Valores_unicos=Einmalige werte
+Valores_Unicos=Einmalige werte
+value=Wert
+varianza=Varianz
+ventana=Fenster
+Ventana=Fenster
+ventana_proyecto=Projektfenster
+Ver=Sehen
+ver_tabla_atributos=Attributtabelle sehen
+ver_tooltip=Zeigt das Projektfenster
+version=Versi\u00f3
+version_conflict=Versionenkonflikt
+vertical=Vertikal
+vertical_space=
+vertices=
+view=Ansicht
+visible=Sichtbar
+visibles=Sichtbar
+Vista=Ansicht
+vistas=Ansichten
+visualizacion=Darstellung
+Visualizacion=Visualisierung
+visualizar_cuadricula=Raster darstellen
+warning=
+warnings=Warnung
+wcs_properties=WCS-Eigenschaften
+WCS_properties=
+wcs_server_error=
+wcsColumn=Coverage
+wcsError=Fehler beim Laden des Covers
+wcsLoad=WCS laden
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfsColumn=Feature
+wfsError=Fehler beim Laden des Features
+wfsLoad=WFS laden
+width=Ampl\u00e0ria
+Window=Fenster
+WMS=WMS
+wms_cant_connect=Es konnte keine Verbindung zum WMS hergestellt werden.
+wms_not_queryable=Dieser Server aktzeptiert keine Abfragen dieser Art.
+wms_properties=WMS-Eigenschaften
+wms_server_error=WMS-Serverfehler
+wms_transparency=Transparenz
+wmsColumn=Karte
+wmsError=Fehler beim Laden der Karte
+WMSLayer=WMS-Layer
+xmax=Maximalwert x
+xmin=Minimalwert x
+Yardas=Yards
+yes=
+ymax=Maximalwert y
+ymin=Minimalwert y
+zoom=
+Zoom=Zoom
+Zoom_a_la_capa=
+Zoom_Acercar=Heranzoomen
+Zoom_al_Tema=Auf den layer zoomen
+Zoom_Alejar=Wegzoomen
+Zoom_Completo=Zoom auf alles
+Zoom_Completo_Vista=Zoom auf alles im bildausschnitt
+Zoom_Mas=Gr\u00f6\u00dfer zoomen
+zoom_mas_vista=
+Zoom_Mas_Vista=Im bildausschnitt gr\u00f6\u00dfer zoomen
+Zoom_Menos=Kleiner zoomen
+Zoom_Menos_Vista=Im bildausschnitt kleiner zoomen
+Zoom_pixel=Zoom zur Rasteraufl\u00f6sung
+Zoom_previo=
+Zoom_Previo=Letzter zoom
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zur auswahl zoomen
+Zoom_sgte=
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_eu.properties	(revision 42196)
@@ -0,0 +1,1595 @@
+#Translations for language: eu
+#Tue Oct 24 14:07:27 CEST 2006
+(escala_maxima)=(eskala handiena)
+(escala_minima)=(eskala txikiena)
+_(Etiquetas_estandar)=(Etiketa estandarrak)
+_(Intervalos)=(Tarteak)
+_(Simbolo_unico)=(Ikur bakarra)
+_(Valores_unicos)=(Balio bakarrak)
+__valenciano=Valenciano
+__espacio_vertical=Espazio bertikala\:
+__lineas=lerroak
+__proyeccion_actual=Egungo proiekzioa\:
+__redimensionar_texto_escala=Testua bistaren eskalara egokitu.
+__seleccion_de_fuente=Letra-tipoa aukeratu
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=Bista berria
+abajo=Behera
+abrir=Ireki
+Abrir=Hautatu
+Abrir_Geoproceso=
+Abrir_Imagen=Irudia ireki
+abrir_plantilla=Ireki txantiloia
+abrir_proyecto=Proiektua ireki
+abrir_tooltip=Aurreko proiektu bat irekitzen du
+Abrir_una_capa=
+abstract=Laburpena
+accept=Onartu
+accept_tip=
+Accion_Predefinida=Aurretik zehaztutako ekintza
+aceptar=Ados
+Aceptar=Ados
+acerca_de=Honi buruz\:
+activa_la_ventana=Aktibatu leihoa
+activar=Activate
+activar_regla=Erregela aktibatu
+activo=Aktibo
+activos=Aktiboak
+add=Gehitu
+add_again_question=Berriro gehitu?
+add_all=Guztiak gehitu
+add_field=Gehitu eremua
+add_layer=Gehitu geruza
+add_rows=
+add_vertex=Gehitu erpina
+addlayer=Gehitu geruza
+address=Helbidea
+address_type=Helbide mota
+adjust_grid=Doitu saretari
+adjust_transparency=Doitu gardentasuna
+advanced=Aurreratua
+advanced_settings=Aukera aurreratuak
+agrupacion=
+agrupar=Multzokatu
+agrupar_capas=Multzokatu geruzak
+agrupar_graficos=Multzokatu grafikoak
+agrupar_linea=Lerro grafikoa grafikoekin multzokatu.
+Ajustar_cobertura_wcs=WCS estaldura doitu
+Ajustar_transparencia=Doitu gardentasuna
+ajustes_linea_grafica=Lerro grafikoaren doitzeak
+Al_leer_la_leyenda=Legenda irakurtzean
+alerta=Oharra
+algoritmo=Algoritmoa
+alias=Ezizena
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Lerrokadura
+alinear=Lerrokatu
+alinear_graficos=Grafikoak lerrokatu
+allWords=Hitz guztiak
+alta=Goi
+alto=Goi
+altura=Altura\:
+Altura_fija_de_texto=Testuaren altura finkoa
+ambito=Esparrua
+ampl_extent=
+Anadir=Gehitu
+Anadir_al_conjunto=Gehitu multzoari
+Anadir_capa=Gehitu geruza
+Anadir_Capa=Gehitu geruza
+Anadir_capa_de_eventos=Gehitu gertaeren geruza
+Anadir_tema_de_eventos=Gehitu gertaeren gaia
+anadir_titulo=Izenburua gehitu
+Anadir_todos=Gehitu guztiak
+ancho=Zabalera
+ancho_alto=Zabalera altuera
+Ancho_Contorno=Ingeradaren zabalera
+Ancho_de_linea=Lerroaren zabalera
+anchura=Zabalera\:
+angulo_rotacion=Biraketa angelua\:
+anterior=Aurrekoa
+Anterior=Aurrekoa
+anyResult=Bilaketak ez du emaitzarik eman
+anyWord=Edozein hitz
+Aplicar=Aplikatu
+apply=Aplikatu
+Apply=Aplikatu
+arc=
+arc_=ARKUA
+Archivo=Fitxategia
+Archivos_de_Disco=Disko-fitxategiak
+arcims_catalog_error=Errorea ArcIMS zerbitzariaren katalogoa jasotzean
+arcims_extent_error=Errorea ArcIMS zerbitzuaren luzapena lortzean
+arcims_legend_error=Errorea legenda prozesatzean
+arcims_no_features=Ez da geometriarik aurkitu
+arcims_no_server=Ez da ArcIMS zerbitzari baliozkorik aurkitu
+arcims_properties=ArcIMS propietateak
+arcims_remote_not_found=Ez da urruneko fitxategirik aurkitu
+arcims_server_error=Errorea ArcIMS zerbitzarian
+arcims_server_status_col_name=Egoera
+arcims_server_timeout=ArcIMS zerbitzariak erantzuteko duen itxarote-aldia gainditu da
+arcims_server_type_col_name=Mota 
+Area_de_influencia=Eragin-eremua
+Area_de_influencia_definida_por_un_campo=Eremu batek zehaztutako eragin-eremua
+Area_de_influencia_definida_por_una_distancia=Distantzia batek zehaztutako eragin-eremua
+area_trabajo=Lan eremua
+Areas_de_influencia=Eragin-eremua
+Areas_de_influencia._Introduccion_de_datos=Eragin-eremuak. Datuak sartzea
+array_error=Errorea array-en tamainan
+arriba=Gora
+ascending_order=Goranzko hurrenkera
+ascending_order_tooltip=Ordenatu hautatutako eremua goranzko hurrenkeran
+asignar_coordenadas=Esleitu koordenatuak
+aspect=Itxuraren konfigurazioa
+Atributo=Atributua
+Atributos_Numericos=Zenbaki-atributuak
+attributeName=
+attributes=Ezaugarriak
+attributeType=
+automatico=Automatikoa
+available_layers=Geruza erabilgarriak
+available_services=Eskura daitezkeen zerbitzuak
+aviso_sin_extent_de_referencia=Aukera hau erabiltzeko aurretik erreferentzia gisa erabiliko den beste geruza bat erantsita izan behar duzu.
+Ayuda=Laguntza
+back=Aurrekoa
+Back=Aurrekoa
+background_color=Atzeko kolorea
+baja=Behe
+Bajar_capa=Jaitsi geruza
+bandas=Bandak
+bands=Bandak
+barra=Barra\:
+base=base
+base_datos=Datu-baseak
+bd=bd
+bmp=BMP motako fitxategiak
+Bold=
+borra_seleccion=Ezabatu aukeraketa
+borrador=Zirriborroa
+borrar=Ezabatu
+borrar_todos=Ezabatu puntu guztiak
+borrar_uno=Ezabatu hautatutako puntua
+box=
+break_=Break
+brillo=Distira
+brillo_y_contraste=Distira eta kontrastea
+browse=Aztertu
+BRX=BRX\:
+BRY=BRY\:
+buffer=Bufferra
+cajetin=
+calcular_errores=Kalkulatu erroreak automatikoki
+Calcular_intervalos=Kalkulatu bitarteak
+calidad=Kalitatea
+Cambio_Color=Kolore aldaketa
+Cambio_de_estilo=Estilo aldaketa
+Cambio_Estilo=Aldatu estiloa
+cambio_nombre=Izen aldaketa
+Cambios_de_estilo=Estilo aldaketak
+campo=Eremua
+Campo=Eremua
+campo_altura_texto=Testuaren altura eremua\:
+Campo_clasifica=Sailkapen eremua
+Campo_de_clasificacion=Sailkapen eremua
+campo_de_documentos_asociados=Atxikitako dokumentuen eremua
+Campo_de_etiquetado=Etiketatze eremua
+Campo_para_disolver=Disolbatzeko eremua
+Campos=Eremuak
+cancel=Utzi
+Cancel=Utzi
+cancel_edition=Utzi edizioa
+cancel_tip=
+cancelar=Utzi
+Cancelar=Utzi
+cancelSearchButton=Utzi
+cannotReproject=Koordenatu sistema hau ezin da berriro proiektatu
+cant_connect=Ezin da konexioa gauzatu
+cant_connect_wfs=
+cantLoad=Ezin da WFS geruza kargatu
+capa=Geruza
+Capa=Geruza
+capa_exportada=Esportatutako geruza
+capa_importada=Inportatutako geruza. Espazio-indizea sortu nahi duzu?
+capas=Geruzak
+Capas=Geruzak
+Capas_del_directorio=
+Capas_del_localizador=Bilagailuaren geruzak
+capas_edition_cache=
+capaWMS=WMS geruza
+caracteres_erroneos=Sarrera-kateko karaktereetan errorea
+cargar=Kargatu
+cargar_fichero=Kargatu fitxategia
+cargar_leyenda=Kargatu legenda
+cargar_sin_georef=Kargatu irudia geoerreferentziatu gabe
+cartografico=Kartografikoa
+Cascada=Kaskadan
+cascada_enable=Leiho bat, gutxienez, irekita egon behar da
+cascada_tooltip=Antolatu leihoak kaskadan
+catalog_search=Geodatuak bilatzea
+cathegory=Kategoria
+cathegoryAny=Edozein
+cathegoryBiota=Biota
+cathegoryBoundaries=Mugak
+cathegoryClimatologyMeteorologyAtmosphere=Atmosfera klimatologikoa eta meteorologikoa
+cathegoryEconomy=Ekonomia
+cathegoryElevation=Goratzea
+cathegoryEnvironment=Ingurumena
+cathegoryFarming=Nekazaritza
+cathegoryGeoscientificInformation=Informazio geozientifikoa
+cathegoryHealth=Osasuna
+cathegoryImageryBaseMapsEarthCover=Lurra mapez estaltzea
+cathegoryInlandWaters=Ur kontinentalak
+cathegoryIntelligenceMilitary=Inteligentzia zerbitzua
+cathegoryLocation=Kokapena
+cathegoryOceans=Ozeanoak
+cathegoryPlanningCadastre=Katastro plangintza
+cathegorySociety=Gizartea
+cathegoryStructure=Egiturak
+cathegoryTransportation=Garraioa
+cathegoryUtilitiesCommunication=Komunikazioa eta baliabideak
+causa_error_desconocida=Zerbitzariaren ustekabeko errorea
+Centimetros=Zentimetroak
+Centrar_la_Vista_sobre_un_punto=Zentratu bista puntu batekiko
+centrar_punto=
+cerrar=Itxi
+Cerrar=Itxi
+change_before=
+change_behind=
+change_height=
+change_server=Aldatu Zerbitzaria
+change_service=Aldatu Zerbitzua
+change_width=
+choose_image_format=Hautatu irudi formatua
+chooseAttribute=Hautatu ezaugarri bat bilaketa egiteko
+circle=Zirkulua
+circle_=ZIRKULUA
+circulo=Zirkulua
+Circulo=Zirkulua
+circumscribed=Zirkunskribatua
+city=Herria
+clave=Gakoa
+clear=Garbitu
+close=Itxi
+close_polyline=Itxi polilinea
+Cobertura_de_datos=Datu-geruza
+Cobertura_de_entrada=Sarrera-geruza
+Cobertura_de_interseccion=Elkargune-geruza
+Cobertura_de_recorte=Ebakin-geruza
+Cobertura_de_salida=Irteera-geruza
+Cobertura_para_unir=Lotzeko geruza
+Coberturas=Estaldurak
+Coberturas_de_entrada=Sarrera-geruzak
+coincidir_tamano=Egokitu tamaina\:
+coincidir_tamanyo=
+colocar_a_margenes=Jarri marjinak kontuan hartuta.
+colocar_alrededor_seleccionados=Jarri hautatutako grafikoen inguruan.
+colocar_alrededor_todos=Jarri grafiko guztien inguruan.
+colocar_delante=Jarri aurrean
+colocar_detras=Jarri atzean
+color=Kolorea\:
+Color_Contorno=Ingeradaren kolorea
+Color_de_la_Linea=Lerroaren kolorea\:
+Color_de_Relleno=Kolore-betegarria
+Color_final=Amaierako kolorea\:
+Color_inicial=Hasierako kolorea\:
+Color_inicio=Hasierako kolorea
+color_texto=Testuaren kolorea\:
+column_not_found=Ez da zutabea aurkitu
+comentarios=Iruzkinak
+commands_stack=Komando-pila
+complex_selection=Hautaketa konplexua
+complex_selection_=HAUTAKETA KONPLEXUA
+compress=Konpresioa
+concordancia=Komunztadura
+conectar=Konektatu
+conection=Konexioa
+conexion_correcta=Konexio zuzena
+configuracion_andami_tooltip=Andami konfigurazioa
+configurar=Konfiguratu
+Configurar=Konfiguratu
+configurar_ANDAMI=ANDAMIren konfigurazio-elkarrizketa.
+configurar_localizador=Konfiguratu bilagailua
+Configurar_localizador=Konfiguratu bilagailua...
+configurar_todas_las_extensiones=
+confirm_gid=Baieztatu gid-a
+confirmacion=Baieztapena
+confirmar_borrar=Ziur al zaude osagaia ezabatu nahi duzula?
+connect=Konektatu
+connect_error=Konexio-errorea
+connectButton=Konektatu
+connection_name=Konexioaren izena
+conservar_escala_visualizacion=Gorde bistaratze eskala
+Consola=Kontsola
+consulta=Kontsulta
+contact_info=Harremanetarako informazioa
+contact_organization=Antolaketa
+contact_person=Izena
+contact_position=Kargua
+Contengan=Honakoak dituztenak
+contiene_espacios_en_blanco=
+contraste=Kontrastea
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=Convex Hull. Datuak sartzea
+coor_geograficas=Koordenatu geografikoak
+coord_system=Koordenatu sistema
+coordenadas_vacias=Koordenatuak hutsik daude
+coordinates=Koordenatuak
+coordinatesContains=hau duena
+coordinatesEnclose=sartu
+coordinatesEqual=honen berdina
+coordinatesFullyOutsideOf=hemendik guztiz kanpo dagoena
+copiar=
+copy=Kopiatu
+copy_=KOPIATU
+cortar=
+countries_of_the_world=Afganistan;Albania;Aljeria;Ameriketako Samoa;Andorra;Angola;Anguilla;Antartika;Antigua eta Barbuda;Argentina;Armenia;Aruba;Ascension uhartea;Australia;Austria;Azerbaijan;Bahamak;Bahrain;Bangladesh;Barbados;Bielorrusia;Belgika;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia-Herzegovina;Botswana;Bouvet uhartea;Brazil;Indiako ozeanoko Britainiar Lurraldea;Brunei;Bulgaria;Burkina Faso;Burundi;Kanbodia;Kamerun;Kanada;Cabo Verde;Cayman uharteak;Afrika Erdiko Errepublika;Txad;Txile;Txina;Christmas uhartea;Kokoen uhartea(Keeling);Kolonbia;Komoreak;Kongo (KED);Kongo;Cook uharteak;Costa Rica;Boli Kosta;Kroazia;Kuba;Zipre;Txekiar Errepublika;Danimarka;Djibouti;Dominika;Dominikar Errepublika;Ekuador;Egipto;El Salvador;Ekuatore Ginea;Eritrea;Estonia;Etiopia;Falkland uharteak;Faroe uharteak;Fiji;Finlandia;Frantzia;Guyana Frantsesa;Polinesia Frantsesa;Hegoaldeko eta Antartikoko Frantziako lurraldea;Gabon;Gambia;Georgia;Alemania;Ghana;Gibraltar;Grezia;Groenlandia;Grenada;Guadalupe;Guam;Guatemala;Guernesey;Ginea;Ginea-Bissau;Guyana;Haiti;Heard uhartea eta McDonald uharteak;Honduras;Hong Kong SAR;Hungaria;Islandia;India;Indonesia;Iran;Irak;Irlanda;Man uhartea;Israel;Italia;Jamaika;Japonia;Jordania;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kirgizistan;Laos;Latvia;Libano;Lesotho;Liberia;Libia;Liechtenstein;Lituania;Luxenburgo;Macau SAR;Mazedonia;Madagaskar;Malawi;Malaysia;Maldivak;Mali;Malta;Marshall uharteak;Martinika;Mauritania;Maurizio;Mayotte;Mexiko;Mikronesia;Moldavia;Monako;Mongolia;Montserrat;Maroko;Mozambike;Myanmar;Namibia;Nauru;Nepal;Holandarren Antillak;Herbehereak;Kaledonia Berria;Zeelanda Berria;Nikaragua;Niger;Nigeria;Niue;Norfolk uhartea;Ipar Korea;Mariana uharteak;Norvegia;Oman;Pakistan;Palau;Palestinako Agintea;Panama;Papua Ginea Berria;Paraguai;Peru;Filipinak;Pitcairn uharteak;Polonia;Portugal;Puerto Rico;Qatar;Reunion;Errumania;Errusia;Ruanda;Samoa;San Marino;Santo Tome eta Principe;Saudi Arabia;Senegal;Serbia eta Montenegro;Seychelleak;Sierra Leona;Singapur;Eslovakia;Eslovenia;Solomon uharteak;Somalia;Hegoafrika;South Georgia eta hegoaldeko Sandwich uharteak;Espainia;Sri Lanka;Santa Helena;St. Kitts eta Nevis;St. Luzia;Sain-Pierre eta Mikelune;Saint Vincent eta Grenadinak;Sudan;Surinam;Svalbard eta Jan Mayen;Swazilandia;Suedia;Suitza;Siria;Taiwan;Tadjikistan;Tanzania;Thailandia;Timor-Leste;Togo;Tokelau;Tonga;Trinidad eta Tobago;Tristan da Cunha;Tunisia;Turkia;Turkmenistan;Turk eta Caiko uharteak;Tuvalu;Uganda;Ukraina;Arabiar Emirerri Batuak;Britainia Handia;Ameriketako Estatu Batuak;Estatu Batuetako Garrantzia Txikiko Uharte Periferikoak;Uruguai;Uzbekistan;Vanuatu;Vatikano Hiria;Venezuela;Vietnam;Birjina uharteak;Birjina uharteak,Britainia;Wallis eta Futuna;Yemen;Zambia;Zimbabwe
+country=Herrialdea
+coverage=Estaldura
+covered_extension=Hedaduraren estaldura
+Crear_Buffer=Sortu bufferra
+Crear_Indice=Sortu espazio-indizea...
+Crear_Indice_Intro=Espazio-indizeak sortzean espazioari buruzko kontsultak optimiza daitezke.
+Crear_Indice_Pregunta_1=Geruzarako espazio-indizea sortu nahi duzu?
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Sortu geoerreferentziatzeko fitxategia (worldfile)
+created_with=Honekin sortua\:
+creation_date=Sortze data
+credentials=Autentifikazio
+cross_circle=Ebakidura/zirkunferentzian
+cross_polygon=Ebakidura/poligonoan
+Crucen_con=Hauekin gurutzatzen direnak
+Cruz=Gurutzea
+Cuadrado=Laukia
+cuadro_no_asociado=
+cuando_activo=Aktibo dagoenean
+current=unekoa
+current_scale=Uneko eskala
+cut=Ebaki
+Dado_un_campo_de_atributos=Atributu eremua emanda dago
+data_origin=Datu-iturburua
+database=Datu-basearen izena
+de=hemendik
+De=hemendik
+debe_estar_activada=aktibatuta egon behar da
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Geruzak hautatu behar dituzu horien gaineko informazioa jasotzeko.
+decimal_degrees=Gradu hamartarrak
+default=Lehenetsia
+default_name=WFS geruza
+define_fields=Zehaztu eremuak
+define_point=Zehaztu puntua
+defined_by_user=Erabiltzaileak zehaztutakoa
+defined_by_view_extent=
+dehacer=Desegin
+del=Ezabatu
+delete_field=Ezabatu eremua
+densityfication=Dentsifikazioa
+Dentro=poligonoaren barruan
+Dentro_y_fuera=Poligonoaren barruan eta kanpoan
+Derecha=Eskuina
+Derecho=Eskuina
+desactivar_capa=
+desactivar_puntos=
+desagrupar=Desegin multzoak
+desagrupar_capas=
+desagrupar_graficos=Desegin grafikoen multzoak
+descending_order=Beheranzko hurrenkera
+descending_order_tooltip=Ordenatu hautatutako eremua beheranzko hurrenkeran
+desconectar=Deskonektatu
+descripcion=Deskripzioa
+Descripcion=Deskripzioa
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description=Deskripzioa
+description_URL=URL deskribapena
+desde=hona
+desde_arriba=Goitik\:
+desde_izquierda=Ezkerretik\:
+desea_borrar_la_capa=
+deshacer=Desegin
+Desplazamiento=Lekualdaketa
+desviacion_tipica=Ohiko desbideratzea
+detalles=Xehetasunak
+Detalles=Xehetasunak
+DGNFiles=.DGN fitxategiak
+Diferencia=Desberdintasuna
+Diferencia_Introduccion_de_datos=Desberdintasuna. Datuak sartzea
+dimension=Neurria
+dimensiones=Neurriak
+directorio=Direktorioa
+directorio_extensiones=Luzapenen direktorioa.
+disagregate_layers=Geruzen egitura mantendu
+Disolver=Disolbatu
+Disolver._Introduccion_de_datos=Disolbatu. Datuak sartzea
+Disolver_entidades=Disolbatu entitateak
+distance_units=Neurri unitateak
+distribuir=Banatu\:
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+divisiones_izquierda=Zatiketak ezkerrean
+documentos_existentes=Aurretik dauden dokumentuak
+downloadColumn=Behera-kargatzea
+driver=Driver
+drivers=Driverrak
+dxf_files=.dxf fitxategiak
+Dxffiles=.DFX fitxategiak
+e-mail=e-posta
+edicion=Edizioa
+edit=Editatu
+edit_vertex=Editatu erpina
+edit_vertex_=EDITATU ERPINA
+editable=Editagarria
+Editar_leyenda=Editatu legenda
+editar_propiedades=Editatu ezaugarriak
+editar_vertices=Editatu erpinak
+el_numero_maximo_de_intervalos_para_este_campo_es=Eremu honek izan dezakeen tarte kopuru handiena hau da
+Elegir_Color=Hautatu kolorea
+Elegir_Fuente=Hautatu letra-tipoa
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Geruzatik hautatu diren osagaiak
+Elija_una_herramienta_de_analisis=Hautatu aztertzeko tresna
+Eliminar=Ezabatu
+eliminar_capa=Ezabatu geruza
+eliminar_extremos=Ezabatu muturrak
+eliminar_fila=
+eliminar_punto=Ezabatu puntua
+eliminar_todos_puntos=Ezabatu puntu guztiak
+ellipse=Elipsea
+ellipse_=ELIPSEA
+en_el_mapa=Mapan\:
+en_language=Ingelesa
+En_metros=Metrotan
+En_pixels=Pixeletan
+en_unidades=
+Encuadre=Enkoadraketa
+Encuadre_Vista=Bistaren gaineko enkoadraketa
+end=Bukatu
+end_polygon=Amaitu poligonoa
+endinfo=Amaiera estatistikak
+Enlace_espacial=Espazio-lotura
+Enlace_espacial._Introduccion_de_datos=Espazio-lotura. Datuak sartzea
+enlace_vivo=Lotura bizia
+Enlazar_a_fichero_de_texto=Testu fitxategietara estekatu
+Enlazar_a_ficheros_de_imagen=Irudi fitxategietara estekatu
+enter_layer_name=Sartu geruzaren izena
+enter_new_layer_name=Idatzi geruza berriaren izena
+enter_path_to_file=Sartu fitxategiaren bidea
+envelope=Luzapena
+equal_intervals=Tarte berdinak
+equidistance=Distantziakidetasuna
+error=Errorea
+Error_abriendo_el_fichero=Errorea fitxategia irekitzean
+Error_accediendo_a_los_datos=Errorea datuak atzitzean
+Error_atributo_no_numerico=Bufferraren distantziarako ezaugarria ez da zenbakizkoa
+error_capa_puntos=Errorea geruza kargatzean. Agian geoerreferentziazioa ez dago aktibo.
+Error_capa_vacia=
+Error_chequeando_precondiciones=Errorea aurrebaldintzak egiaztatzean
+Error_chequeo_tipo_geometria=Errorea geometria mota egiaztatzean
+error_comunicacion_servidor=Errorea zerbitzariarekin komunikatzean
+error_conexion=Errorea datu-basera konektatzean.
+Error_distancia_buffer=Buffer distantzia sartu behar duzu
+Error_ejecucion=Errorea betearaztean
+Error_entrada_datos=Errorea datuak sartzean
+error_escritura=Ezin izan da proiektua gorde
+Error_escritura_resultados=Errorea emaitzak idaztean
+Error_exportando_SLD=
+Error_fallo_geoproceso=Errorea geoprozesua gauzatzean
+error_file_exists=Fitxategi hau badago. Gainean idaztea nahi duzu?
+error_file_not_writable=Ezin da irteera fitxategirik sortu.
+Error_guardando_la_leyenda=Errorea legenda gordetzean
+Error_guardando_la_plantilla=
+error_lectura=Ezin izan da proiektua ireki
+Error_preparar_escritura_resultados=Errore bat gertatu da emaitzen geruza prestatzean.
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=Nahitaezkoa da emaitzen fitxategi bat zehaztea
+Error_spjoinmn_sin_funcion=Ez duzu laburpen funtziorik hautatu zenbaki-atributuetarako
+error_writting_file=Errorea fitxategia idaztean
+errores=Erroreak
+errores_csv=
+errorFENotSupported=Oraingoz, querys-ak FILTER ENCODING kodeketa erabiliz bakarrik egin daitezke baina zerbitzariak ez du hori onartzen
+errorGetRecords=Errorea getRecords eragiketa egitean
+errorIsASRWServer=SRW zerbitzaria da\!
+errorNotCSWSupportedProtocol=Zerbitzaria aurkitu da, baina badirudi ez duela CS-W protokoloa onartzen
+errorNotParsedReply=Errorea erantzuna prozesatzean. Zerbitzaria aurkitu da baina litekeena da zehaztutako protokoloa ez onartzea
+errorNotSupportedCapabilities=Errorea GetCapabilities eragiketa egitean. Bi arrazoiengatik izan daiteke\: errorea egon delako eragiketa egitean edo zerbitzariak ez duelako zehaztutako protokoloa onartzen
+errorNotSupportedProtocol=Zerbitzariak ezin du hautatutako protokoloa onartu
+errorNotThesaurusSelected=WFS protokoloak ez du ahalbidetzen bilaketarik egitea tesaurusetik osagai bat hautatu gabe
+errorServerException=Zerbitzariak salbuespena itzuli du
+errorServerNotFound=Ezin da zerbitzaria aurkitu
+errorSOAPProtocol=Errorea SOAP protokoloan
+es_country=Espainia
+es_language=Gaztelania
+escala=Eskala
+Escala=Eskala
+escala_maxima=Eskala handiena
+Escala_Maxima=Eskala handiena
+escala_minima=Eskala txikiena
+Escala_Minima=Eskala txikiena
+escala_usuario=Erabiltzaileak zehaztutako eskala
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Sarearen tarte horizontala
+espaciado_vertical=Sarearen tarte bertikala
+espacio=Espazioa\:
+espere=Itxaron, mesedez
+estadisticas=Estatistikak
+este_por_debajo_de_=Honen azpitik egotea\:
+este_por_encima_de=Honen gainetik egotea\:
+Esten_contenidos_en=Hemen daudenak
+Estilo=Estiloa\:
+estilos=Estiloak
+Etiqueta=Etiketa
+Etiquetado=Etiketak
+Etiquetados=Etiketatuak
+etiquetas=Etiketak\:
+Etiquetas_estandar=Etiketa estandarrak
+exactSentence=Esaldi zehatza
+examinar=Aztertu
+Examinar=Aztertu
+exploit=Ustiatu
+exploit_=
+export=Esportatu
+export_to=
+exportando_features=Funtzionalitateak esportatzen
+exportar=Esportatu
+exportar_a=Hona esportatu\:
+exportar_ascii=Esportatu ASCII
+exportar_pdf=Esportatu pdf batera
+exportar_ps=Exportar a ps
+exporting_=Esportatzen
+extend=Luzatu
+extend_=
+extension=Luzapena
+extension_activada=Luzapena gaituta.
+extensiones=
+Extent=Extent
+extents_no_coincidentes=Hedadurak ez datoz bat
+factor=Faktorea
+fallo_capas=Hutsegitea geruzetara iristean. Hurrengo geruzak proiektutik ezabatuko dira
+fallo_crear_conexion=Hutsegitea konexioa sortzerakoan
+fallo_crear_pool=Hutsegitea konexioen elkarbiltzea sortzerakoan
+fallo_obtener_conexion_existente=Hutsegitea sortutako konexioa eskuratzerakoan
+fallo_obtener_tablas=Hutsegitea datu-baseko taulak eskuratzerakoan
+fallo_realizar_consulta=Hutsegitea kontsulta egiterakoan
+fallo_registrar_conexion=Hutsegitea konexioaren erregistroan
+fax=Faxa
+feature=Geruzak
+featureclass=Bektoriala
+features_desea_continuar=
+featureserver=Bektore zerbitzua
+feet=Oinak
+Fichero=Fitxategia
+fichero_existe=Fitxategia badago
+fichero_incorrecto=Fitxategia ez da zuzena
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=Kartografia-datuen fitxategiak
+Ficheros_SHP=SHP fitxategiak
+field=Eremua
+fields=Eremuak
+file=Fitxategia
+file_exists=Fitxategi hau badago. Gainean idaztea nahi duzu?
+file_name=Fitxategia
+file_version=Fitxategiaren bertsioa
+filtro=Iragazkia
+final_point=
+finalizar=Bukatu
+finish=Bukatu
+fit_ArcIms_layer=Doitu ArcIMS geruza
+fit_WCS_layer=Doitu WCS geruza
+fit_WFS_layer=
+fit_WMS_layer=Doitu WMS geruza
+Font=Letra-tipoa
+format=Formatua
+formato=Formatua
+Formato=Formatua
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=Zenbakiaren formatua okerra da
+formato_incorrecto=Formatoa ez da zuzena
+formatos=Formatuak
+from=Hemendik\:
+fuente=Letra-tipoa
+Fuente=Letra-tipoa
+Fuera=Poligonotik kanpo
+fuera_de_extent=Hautatutako puntua irudiaren hedaduratik kanpo dago
+Funciones_Sumarizacion=Taldekapen funtzioak
+gazetteer_connect=Kokatu izenaren arabera
+gazetteer_search=Kokatu izenaren arabera
+general=Orokorra
+General=Orokorra
+Generar_Intervalos=Sortu tarteak
+geometry=Geometria
+Geoprocesos=
+georaster=Geoerreferentziazioa
+georef=Geoerreferentziatu
+georef_file=
+georeferenciado=
+georreferenciar=Geoerreferentziatu
+gestion_encuadre=Enkoadraketen kudeaketa
+Gestor_de_Geoprocesos=
+goto=Zooma egin bilaketan
+grado_polinomio=Polinomioaren gradua
+grados=Graduak\:
+Grados=Graduak
+Graficos=Grafikoak
+Grosor_de_linea=Lerroaren lodiera
+grosor_linea=Lerroaren lodiera\:
+group=Multzokatu
+group_graphic_line=
+group_layers=Multzokatu geruzak
+group_layers_option=Geruza multzoa
+grupo=
+GT2shp=GT2shp
+guardado=Hemen gorde da\:
+guardar=Gorde
+Guardar=Gorde
+guardar_cambios=Aldaketak gorde nahi dituzu?
+guardar_clave=Gorde gakoa
+guardar_como=Gorde honela\:
+guardar_como_plantilla=Gorde txantiloi moduan
+Guardar_el_zoom_actual=Gorde zooma
+guardar_leyenda=Gorde legenda
+Guardar_leyenda=Gorde legenda
+guardar_proyecto=Gorde proiektua
+guardar_tooltip=Gorde proiektuaren aldaketak
+Habilitar_etiquetado=Gaitu etiketak
+hasta=honaino\:
+height=Altuera
+Herramientas=Tresnak
+Herramientas_de_analisis=Aztertzeko tresna
+Herramientas_vista=Bistaren tresnak
+hide_grid=Ezkutatu sareta
+Hiperenlace=Hiperesteka
+horizontal=Horizontala
+horizontal_space=
+host=
+hostname=Hostname
+html_in_a_new_view=Sortu bista berria proiektuan. Bista berrian fitxategiak zehaztutako geruza guztiak jasoko dira.
+html_in_other_view=Gehitu geruzak zerrenda honetan zehaztutako bistan\:
+html_in_the_current_view=<HTML>Fitxategian zehaztutako geruzak aktibo dagoen bistan gehitzen ditu.</HTML>
+id=ID
+Identificar_Resultados=Identifikatu emaitzak
+idioma=Idioma
+Igual_que_la_impresora=Inprimagailuaren neurrira
+igual_todos_lados=Alde guztietatik berdin mugitzea.
+image=Irudia
+imagen=Irudia
+Imagen=Irudia
+imagen_no_accesible=
+imageserver=Irudi zerbitzua
+import=Inportatu
+import_from_ascii=
+import_layer=Geruza PostGIS-en gorde.
+import_map_context=Inportatu mapak OGC Web Map Context fitxategi batetik
+importar=Inportatu
+importar_extent=Inportatu oraingo bistaren extent-a
+Imprimir=Inprimatu
+in=hemen\:
+incorrect_option=Aukera okerra
+incorrect_point=
+incorrect_value=
+Indexando=Indexatzen...
+Indexando_espacialmente=Geruza espazioan indexatzen ari da
+Inferior=Behean
+info=Informazioa
+info_format_not_supported=WMS-k itzulitako formatua ezin da jasan.
+infobreak=Geruzaren osagaiak kolore-sorta erabiliz erakusten ditu.
+infodef=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu.
+informacion=Informazioa
+Informacion=Informazioa
+infovalue=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu.
+Inicializando=Hasten
+initial_warning=
+insert=Txertatu
+insert_basis_point=Zehaztu oinarri-puntua
+insert_central_point_or_3p=Txertatu erdiko puntua edo [3P]
+insert_central_point_polygon=Txertatu poligonoaren erdiko puntua
+insert_column=Txertatu zutabea
+insert_destination_point=Zehaztu xede-puntua
+insert_distance_another_axis=Txertatu beste ardatzarekiko distantzia
+insert_factor_or_reference=Zehaztu eskala-faktorea<2> edo erreferentzia[R]
+insert_first_point=Txertatu lehenengo puntua
+insert_first_point_corner=Txertatu izkinaren lehen puntua
+insert_first_point_scale=Zehaztu eskala-zuzenaren jatorri puntua
+insert_initial_point_axis=Txertatu elipsearen ardatzaren hasierako puntua
+insert_last_point=Txertatu azken puntua
+insert_last_point_axis=Txertatu elipsearen ardatzaren azken puntua
+insert_last_point_reference=Zehaztu zuzen horren azken puntua
+insert_last_point_scale=Zehaztu eskala-zuzenaren azken puntua
+insert_length_or_point=Txertatu luzera edo puntua
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Txertatu hurrengo puntua, arkua[A] edo Itxi polilinea[C] edo Amaitu[T]
+insert_next_point_line_or_close=Txertatu hurrengo puntua, lerroa[N], Itxi polilinea[C] edo Amaitu[T]
+insert_next_point_selection_or_end_polygon=Txertatu hurrengo puntua edo hautatutako poligonoa amaitu[E]
+insert_number_sides=Txertatu alde kopurua
+insert_opposited_corner=Txertatu kontrako izkina
+insert_point=Txertatu puntua
+insert_point_corner_or_square=Txertatu aurkako izkinaren puntua edo laukia[C]
+insert_point_move=Txertatu desplazamendu-puntua
+insert_point_or_end=
+insert_point_selection=Zehaztu hautaketa-puntua
+insert_point_selection_or_types=Zehaztu puntua edo Zirkunf.[IC], Laukiz. kanpoan[OR], Polil.[IP], Pol. ebak.[CP], Pol. kanpoan[OP], Zirkunf. ebak.[CC],Zirkunf. kanpoan[OC]
+insert_radius=Zehaztu erradioa(r)
+insert_radius_or_second_point=Txertatu erradioa edo bigarren puntua
+insert_reference_point_or_factor=Zehaztu zuzenaren jatorri-puntua edo eskala faktorea[F]
+insert_rotation_angle=Zehaztu biraketa angelua
+insert_row=Txertatu ilara
+insert_second_point=Txertatu bigarren puntua
+insert_second_point_angle=Txertatu bigarren puntua edo angelua
+insert_second_point_move=Zehaztu desplazamenduaren bigarren puntua
+insert_second_point_selection=Zehaztu hautatutako laukizuzenaren bigarren puntua
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Txertatu hirugarren puntua
+insertar=Txertatu
+Insertar=Txertatu
+insertar_cajetin=Txertatu inskripzio-laukia
+insertar_circulo=Txertatu zirkulua
+insertar_escala=Txertatu eskala
+insertar_fila=
+insertar_imagen=Txertatu irudia
+insertar_leyenda=Txertatu legenda
+insertar_linea=Txertatu lerroa
+insertar_norte=Iparraldea txertatu
+insertar_poligono=Txertatu poligonoa
+insertar_polilinea=Txertatu polilinea
+insertar_punto=Txertatu puntua
+insertar_recta=Txertatu zuzena
+insertar_rectangulo=Txertatu laukizuzena
+insertar_texto=Txertatu testua
+insertar_vista=Txertatu bista
+inside_circle=Zirkunferentziaren barruan
+inside_polygon=Poligonoaren barruan
+inteligentSearch=Bilaketa aurreratua
+inteligentSearchAscii=Hitzaren aldaera guztiak
+inter_arc=Barruko arkua
+inter_line=Barruko lerroa
+internal_polygon_=Barruko poligonoa
+Interseccion=Elkargunea
+Interseccion._Introduccion_de_datos=Elkargunea. Datuak sartzea
+Intersecten_con=Hauekin ebakitzen direnak
+interval=Tartea
+intervalo=tartea
+Intervalo=Tartea
+Intervalos=Tarteak
+Intervalos_equidistantes=Tarte distantziakideak.
+Intervalos_por_rupturas_naturales=Etete naturalen araberako tarteak.
+into_circle=Inskribatua
+into_circle_or_circumscribed=Zirkuluan inskribatua[I] edo zirkunskribatua[C]<C>
+intro_tablename=Sortuko duzun taularen izena sartu. OHARRA\: Taula aurretik badago, ezabatu egingo da.
+introduce_nombre=Sartu izen berria
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_intervalo_deseado=Sartu hautatutako tartea
+is_required=nahitaezkoa da
+Italic=
+Izquierda=Ezkerra
+Izquierdo=Ezkerra
+join=Lotu
+join_=
+jpg=JPEG fitxategiak
+Juntar=Elkartu
+Juntar._Introduccion_de_datos=Elkartu. Datuak sartzea
+KeyMapping.Caracter_no_valido=Karakterea ez da baliozkoa\:
+keywords=Gako-hitzak
+keyWords=Gako-hitzak
+kilometros=Kilometroak
+Kilometros=Kilometroak
+language=Hizkuntza
+Las_traducciones_no_pudieron_ser_cargadas=Itzulpenak ezin izan dira kargatu
+last=Aurrekoa
+lastUpdateDate=Azken eguneratzearen data
+latitud=Latitudea
+Launcher.config_mal_formado='config.xml' fitxategia txarto eratuta dago
+Launcher.config_no_encontrado='config.xml' fitxategia ez da aurkitu
+Launcher.Dependencia_no_resuelta_en_plugin=Mendekotasuna ez da plugin-ean ebatzi
+Launcher.Dos_skin_extension=Dos skin luzapena. Azkena erabiliko dugu
+Launcher.Error_con_las_librerias_del_plugin=Errorea plugin-aren liburutegietan
+Launcher.Error_instanciando_la_extension=Errorea luzapena instantziatzean
+Launcher.Error_localizando_la_clase_de_la_extension=Errorea luzapen-mota aurkitzean
+Launcher.Hay_dependencias_circulares=Plugin-en artean mendekotasun zirkularrak daude
+Launcher.Ignorando_el_directorio=Ez hartu direktorioa kontuan
+Launcher.labelset_class=Etiketa-mota (labelset) ezin izan da aurkitu
+Launcher.look_and_feel=Ezin izan da jarri 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Luzapen-mota ezin izan da aurkitu
+Launcher.No_se_encontro_la_clase_mdi_manager=Mdi manager klasea ezin izan da aurkitu
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=mdi manager klasea ezin izan da atzitu
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Andamiren konfigurazioa ezin izan da gorde
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Ezin izan da mdi manager klasea instantziatu
+Launcher.No_se_puede_acceder_a=Ezin izan da honakoa atzitu\:
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Errorea plugin-en konfigurazioa gordetzean
+Launcher.Two_extensions_with_the_same_priority=Lehentasun bereko bi luzapen, bakarra kargatuko da.
+Launcher.Two_menus_with_the_same_position=Posizio bereko bi menu, bakarra kargatuko da.
+layer=Geruza
+Layer=Geruze
+layer_abstract=Laburpena
+layer_name=Geruzaren izena
+layer_not_queriable=Layer-a ez dago eskura
+layer_scale_status=Eskala-mugen egoera
+layer_title=Geruzaren izenburua
+layer_was_already_added=Geruza gehituta zegoen
+layerName=
+LayerName=
+layers=Geruzak
+layers_in_other_view=Geruzak nik aukeratutako bistan
+layers_in_the_current_view=Oraingo bistako geruzak
+layerType=
+legend=Legenda
+length=Tamaina
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Legendan (eta/edo etiketan)loturaren eremu bat erabiltzen ari zara. Mesedez, aldatu legenda lotunea kendu aurretik.
+Leyenda_Por_Defecto=Legenda lehenetsia
+line=Lerroa
+line_=LERROA
+line_type=Lerro mota
+linea=Lerroa
+Linea=Lerroa
+linea_grafica=Lerro grafikoa
+lineal_directo=Zuzeneko lineala
+linf_der=Inf Der
+link=Lotura
+Link=Lotura
+linkColumn=Web orria
+linkError=Errorea gertatu da lotura kargatzerakoan
+linkLoad=Web baliabide bat kargatzea
+load_from_xml=Kargatu XML fitxategitik (.rmf)
+loadWMS=WMS kargatzea
+localizador=Bilagailua
+Localizador_por_atributo=Ezaugarrien araberako bilagailua
+localize=Kokatu
+location=Kokalekua
+logo_URL=URL logotipoa
+longitud=Luzera
+lowerCoordinates=Behekoak
+lppp=ppp
+lsup_izq=Goi-ezker
+m/pixel=metros/pixel
+malla_activada=Sarea aktibatuta
+mantainold=Ezabatu aurreko bilaketak
+mantener_intervalo=Tartea mantendu
+map_context_file_error=Errorea Web Map Context fitxategian
+map_extent=Luzapena
+map_size_in_pixels=Maparen tamaina (pixelak)
+map_units=Maparen unitateak
+mapa=
+Mapa=Mapa
+mapas=Mapak
+marco=Markoa
+marco_vista=Bista-eremua
+margenes=Marjinak
+Mas_100=Balio kopurua 100 baino handiagoa da baina ez du informaziorik ematen
+mas_de_100_simbolos=100 sinbolo baino gehiagok ez diote planoari informaziorik eransten.
+max_no_of_pixels=Pixelak, gehienez\:
+max_scale=Eskala geh.
+maxFeatures_aviso=
+maximo=Gehienez
+Maximo=Gehienez
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Erabiltzaileak kapturatu ez duen errorea
+MDIFrame.quiere_salir=Ziur zaude irten nahi duzula?
+MDIFrame.salir=Irten
+MDIManagerFactory.No_skin_extension_in_the_plugins=Ez da aurkitu 'skin' luzapenik plugin-en artean
+media=Batez beste
+Media=Batez beste
+medir_area=Azalera neurtu
+medir_distancias=Distantziak neurtu
+Mensaje_buffer=Eragin-eremuak kalkulatzen...
+Mensaje_clip=Ebaki geoprozesua
+Mensaje_convexhull=Convex hull geoprozesua
+Mensaje_difference=Ezberdintasun geoprozesua...
+Mensaje_dissolve=Disolbatu geoprozesua
+Mensaje_enlace_espacial=Espazio-lotura geoprozesua
+Mensaje_interseccion=Elkargune geoprozesua
+Mensaje_juntar=Bildu geoprozesua
+Mensaje_primera_pasada_union=Elkarguneak kalkulatzen...
+Mensaje_procesando_buffer=Bufferrak kalkulatzen...
+Mensaje_procesando_buffer2=Bufferrak disolbatzen
+Mensaje_procesando_clip_primero=Ebakin poligonoa kalkulatzen
+Mensaje_procesando_clip_segundo=Geometriak ebakitzen
+Mensaje_procesando_convexhull=Convex hull kalkulatzen...
+Mensaje_procesando_diferencia=Ezberdintasuna kalkulatzen...
+Mensaje_procesando_dissolves=Geometriak disolbatzen...
+Mensaje_procesando_enlace_espacial=Osagaiak lotzen...
+Mensaje_procesando_interseccion=Elkarguneak kalkulatzen...
+Mensaje_procesando_juntar=Geometriak batzen...
+Mensaje_segunda_pasada_union=A-B arteko ezberdintasuna kalkulatzen
+Mensaje_tercera_pasada_union=B-A arteko ezberdintasuna kalkulatzen
+Mensaje_union=Batu geoprozesua...
+Messages._no_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+Messages.no_se_encontro_la_traduccion_para=Ez da horretarako itzulpenik aurkitu
+metadata_catalog=Geodatuak bilatzea - Lotura
+metadata_tree=Matadatuaren zuhaitza
+metadatos=Metadatos
+meters=Metroak 
+metros=Metroak
+Metros=Metroak
+Milimetros=Milimetroak
+Millas=Miliak
+min_scale=Eskala gutx.
+minimo=Gutxienez
+Minimo=Gutxienez
+minx=min.x
+miny=min.y
+modificar=
+modification_date=Aldatu zen azken eguna
+modify=
+mosaico_tooltip=Tooltip mosaikoan
+Mostrar_Contorno=Erakutsi ingerada
+mostrar_descripcion=Erakutsi deskribapena
+mostrar_puntos=Erakutsi zenbakiak
+Mostrar_siempre=Erakutsi beti
+mostrar_unidades=Bistaratu unitateak
+move=Lekualdaketa
+move_=LEKUALDAKETA
+move_elements=
+Move_from_view=Mugitu puntuak bistatik
+move_handlers=
+move_layer_down=Behera mugitu
+move_layer_up=Gora mugitu
+Mover_geo=Mugitu geoerreferentziatu beharreko irudia
+msg_save_raster=Eragiketa utzi egingo da. Jarraitu nahi duzu?
+mtspixel=Mts/pixel
+muestra=Erakutsi
+Muestra_atributos=Hautatutako geruzen atributuak erakusten ditu.
+muestra_consola_tooltip=Kontsola erakusten du
+Muestra_los_atributos_de_las_capas_seleccionadas=Hautatutako geruzen atributuak erakusten ditu.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Geruzaren elementuak atributu eremu jakin bateko koloreak erabiliz erakusten ditu
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu
+multi_type=Era anizkuna
+multiple_value=Balio anizkoitzak
+multiples_intervalos=Askotariko tarteak
+multipoint=
+multipoint_=
+multipoint_type=Era puntuanitza
+must_specify_a_file=Xede fitxategi bat zehaztu behar duzu.
+name=Izena
+natural_intervals=Tarte naturalak
+navegacion=Nabigazioa
+navegacion_vista=Nabigazio Ikuspegia
+necesita_un_tema_activo=Gai bat aktibo egon behar da
+necesita_un_tema_vectorial_activo=Bektore-gai bat aktibo egon behar da
+necesita_una_capa_activa=Geruza bat aktibo egon behar da
+necesita_una_capa_vectorial_activa=Bektore-geruza bat aktibo egon behar da
+new_dxf=DXF berria
+new_field=Eremu berria
+new_layer=Geruza berria
+new_layer_name=Geruza berriaren izena
+new_postgis=Postgis berria
+new_shp=SHP berria
+next=Hurrengoa
+Next=Hurrengoa
+next_point_or_end=Hurrengo puntua edo amaitu[E]
+next_previous_add_del_cancel=Puntua, Hurrengo erpina[S], Aurrekoa[A], Gehitu[I] edo Ezabatu[E]
+ninguna_impresora_configurada=Ez dago konfiguratutako inprimagailurik
+Nivel_de_transparencia=Gardentasun maila
+no=Ez
+NO=EZ
+no_activos=Ez daude aktibo
+no_adjust_grid=Ez doitu saretari
+No_de_intervalos=Tarte kop.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=\=Ez da hobetsitako hizkuntzen zerrenda aurkitu. Agian klasea hasieratzea ahaztu zaizu
+no_hay_ninguna_capa_seleccionada=
+no_hay_ninguna_capa_seleccionado=Ez dago aukeratutako geruzarik
+no_layers_found=Ez dago geruza baliagarririk
+No_mostrar=Ez erakutsi geruza eskala horrelakoa bada
+No_mostrar_la_capa_cuando_la_escala=Ez erakutsi geruza eskala horrelakoa bada\:
+no_puede_continuar=
+No_reconocido=Ezagutugabea
+No_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+No_se_pudo_obtener_la_tabla_de_la_capa=Ezin izan da geruzaren taula eskuratu
+No_Shape=Layer hau ez da Shape motakoa
+No_usar_buffer_redondeado=Ez erabili ertz borobildurik
+no_visibles=Ez dago ikusgai
+nombre=Izena
+Nombre=Izena
+nombre_capa=Geruzaren izena
+nombre_cobertura=Estalduraren izena
+nombre_feature=Eginbidearen izena
+Nombre_que_se_le_dara_al_zoom=Zoomari emango zaion izena
+nombre_sesion=Saioaren izena
+Nombres=Izenak
+none_selected=Ez da bat ere ez hautatu
+normal=Normala
+north=Iparraldea
+not_available=Ez dago erabilgarri
+not_visible=Ez dago ikusgai
+Nueva_tabla=Taula berria
+nuevo=Berria
+Nuevo_conjunto=Multzo berria
+nuevo_proyecto=Proiektu berria
+nuevo_tamano_fuente=Iturri-tamaina berria\:
+nuevo_tooltip=Beste proiektu bat sortu
+num_bandas=Banda kopurua
+num_columnas=Zutabe kopurua
+num_filas=Lerro kopurua
+Num_intervalos=
+Numero_anillos_concentricos=Eraztun zentrokideen kopurua
+Numero_de_elementos_seleccionados=Hautatutako osagaien kopurua
+Numero_de_segmentos_por_cuadrante=Segmentu kopurua koadranteka
+numero_incorrecto=Zenbakia ez da zuzena
+N\u00fam_intervalos=Tarte kopurua
+Obtener_mas_proximo=Erabili hurbilena
+of=de
+ogc_mapcontext_file=OGC Web Map Context
+ok=Ados
+Ok=Ados
+onSharpening=Aktibatu pansharpening
+opacidad=Opakotasuna
+opciones=Aukerak
+open_first_time=Bistarekin ireki
+open_layers_as=Zabaldu geruzak honela\:
+Operacion_de_overlay=Gainjartze eragiketak
+Operaciones_adicionales=Eragiketa osagarriak
+optinos.network.click_to_test_connection=
+options=Aukerak
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.general.select_theme=
+options.network.status=
+orientacion=Orientazioa\:
+origen_de_datos=Datu-iturburua
+Origen_de_datos=Datu-iturburua
+Origen_de_Datos=Datu-iturburua\:
+Otros=Beste batzuk
+out_circle=Zirkunferentziatik kanpo
+out_polygon=Poligonotik kanpo
+out_rectangle=Laukizuzenetik kanpo
+owner=Jabea
+page=Orrialdea
+paint=Emaitza marraztu
+parameters=Parametroak
+parametros=Parametroak
+Parametros=Parametroak
+password=Gakoa
+paste=Itsatsi
+paste_elements=
+path=Bidea
+pegar=
+Perimetro=Perimetroa
+period=Epealdia
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mapako elementuak eremu jakin baten balioarekin etiketatzea ahalbidetzen du
+Personalizado=Pertsonalizatua
+Pies=Oinak
+pila_de_comandos=Komando-pila
+pixeles=pixelak
+pixels=pixels
+Plain=
+plantilla=
+plegar_despl=Plegar/Desplegar
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Izen bereko bi klase plugin-ean
+PluginClassLoader.Error_reading_file=Errorea fitxategia irakurtzean\:
+pluginNotFound=Ez duzu luzapenik mota hauetako baliabideak kargatzeko
+pluginNotFoundTitle=Geruzak kargatzea
+PluginServices.Bug_en_el_codigo=Bug-a kodean
+PluginServices.Error_grave_de_la_aplicacion=Aplikazioaren akats larria. Komenigarria da zure datuak gordetzea eta aplikaziotik irtetea
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Itzulpenen baliabidea ez da aurkitu
+PluginServices.No_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Ezin izan da arezko erlojua jarri
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Saguaren kurtsorea ezin izan da berrezarri
+PluginServices.Procesando=Prozesatzen...
+png=png fitxategiak
+point=Puntua
+point_=PUNTUA
+point_type=Puntu mota
+poligono=Poligonoa
+polilinea=polilinea
+polygon=Poligonoa
+polygon_=POLIGONOA
+polygon_type=Poligono mota
+polyline=Polilinea
+polyline_=
+poner_capas_a=Jarri geruzak hemen\:
+poner_temas_a=
+por_debajo_de=Honen azpitik\:
+por_encima_de=Honen gainetik\:
+Por_favor_active_el_tema=Mesedez, gaia aktibatu
+Por_favor_active_la_capa=Mesedez, aktibatu geruza
+posicion_linea=Lerroaren kokalekua
+postcode=Posta kodea
+postgisColumn=Postgis
+postgisError=Errorea gertatu da datu-basea kargatzerakoan
+postgisLoad=Postgis kargatzea
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferences=
+preferencias=
+Preferencias=
+preparar_pagina=Prestatu orria
+Preparar_pagina=Prestatu orria
+presentacion=Aurkezpena
+previous=Aurrekoa
+previsualizacion=Aurrebista
+Previsualizacion=Aurrebista
+Previsualizacion_de_simbolo=Ikurraren aurrebista
+primero=Lehenengoa
+prioridad=Lehentasuna
+procesar=Prozesatu
+process_tip=
+properties=Ezaugarriak
+property=Ezaugarria
+propiedad=
+propiedades=Ezaugarriak
+propiedades_cajetin=Inskripzio-laukiaren ezaugarriak
+propiedades_capa=Geruzaren ezaugarriak
+propiedades_de_la_capa=Geruzaren ezaugarriak
+Propiedades_de_la_Capa=Geruzaren ezaugarriak
+propiedades_del_tema=
+Propiedades_del_Tema=Gaiaren ezaugarriak
+Propiedades_escala_grafica=Eskala grafikoaren ezaugarriak
+propiedades_grafico=Grafikoaren ezaugarriak
+propiedades_mapa=Maparen ezaugarriak
+propiedades_marco_imagenes=Irudi-markoaren ezaugarriak
+propiedades_marco_leyenda=Legenda-markoaren ezaugarriak
+propiedades_marco_vista=Bista-markoaren ezaugarriak
+propiedades_raster=Raster-aren ezaugarriak
+propiedades_sesion=Saioaren ezaugarriak
+propiedades_tabla=Taularen ezaugarriak
+propiedades_tema=Gaiaren ezaugarriak
+Propiedades_texto=Testuaren ezaugarriak
+propiedades_vista=Bistaren ezaugarriak
+props=Ezaugarriak
+protocolsGroup=Protokoloak
+provider=Hornitzailea
+prueba_conexion=Konexio-proba
+puerto=Ataka
+Pulgadas=Hazbeteak
+punto=Puntua
+puntos=Puntuak
+purpose=Xedea
+pwd=Pasahitza
+quantile_intervals=Tarte koantilak
+quiere_continuar=Ziur zaude irten nahi duzula?
+quitar=Kendu
+Quitar=Kendu
+Quitar_capa=Kendu geruza
+quitar_enlaces=Kendu lotuneak
+Quitar_todos=Kendu denak
+Quitar_Todos=Kendu denak
+quitar_uniones=Kendu loturak
+rango_de_escalas=Eskala-maila
+Rango_de_escalas=Eskala-maila
+raster=Raster-a
+raster_layer=Raster geruza
+Rasterfiles=Raster fitxategiak
+realce=Irtengunea
+realces=
+realmente_desea_guardar=Ziur zaude gorde nahi duzula?
+Recortar=Ebaki
+Recortar._Introduccion_de_datos=Ebaki. Datuak sartzea
+recorte=Ebakina
+recorte_colas=Ilarak ebaki
+recorte_vista=Bistarako murrizketa
+recta=Zuzena
+rectangle=Laukizuzena
+rectangle_=LAUKIZUZENA
+rectangulo=Laukizuzena
+recuento=Zenbaketa
+Recuperar_leyenda=Berreskuratu legenda
+Recuperar_y_eliminar_otros_zoom=Beste zoom batzuk berreskuratu eta ezabatu
+redo=Berregin
+redo_error=Errorea komando bat berregiteko driverrak atzitzean
+reference=Erreferentzia
+refrescar=Eguneratu
+refresh_capabilities=Eguneratu aurrememoria
+refresh_capabilities_tooltip=Markatu lauki hau aurreko datuen gainean idazteko
+registros=Erregistroak
+registros_seleccionados_total=Hautatutako erregistroak guztira
+rehacer=Berregin
+rellenar_marco_vista=Bete bista-eremua
+relleno=Betegarria\:
+remove=Kendu
+remove_all=Kendu denak
+remove_column=Ezabatu zutabea
+remove_elements=
+remove_geometry=
+remove_row=Ezabatu lerroa
+remove_rows=
+renombrar=Berriro izendatu
+repeated_layer_was_not_added=Ez da errepikatutako geruza gehitu
+reproyectar_aviso=Geruzaren proiekzioa ez da bistaren proiekzioaren berdina. OHARRA\: Zehaztugabea izan daiteke aldaketa batzuekin. Mesedez, irakurri dokumentazioa.
+reproyectar_pregunta=Berriro proiektatu nahi duzu?
+resolucion=Ebazpena
+resolucion_resultado=Emaitzaren ebazpena\:
+resolution=Ebazpena
+resourceLinkColumn=Lotura
+resourceShowColumn=Ikusi
+resourceTypeColumn=Mota
+respuesta_error_servidor=Ezin izan da estaldura lortu
+resto_valores=Gainerako balioak
+restore=Leheneratu
+restrictArea=Bilaketa eremua murriztu
+results=Emaitzak
+resutsByPage=Emaitzak orrika
+retry=Saiatu berriro
+rootName=Erroa
+rotate=Biratu
+rotate_=BIRATU
+salir=Irten
+Salir=Irten
+salir_tooltip=Irten
+salvar=Gorde
+salvar_raster=Gorde raster geoerreferentziatuan.
+Sample=Adibidea
+save_to_ascii=Esportatu puntuen taula testu fitxategira.
+save_to_xml=Gorde XML (.grf) fitxategira
+scale=Eskala
+scale_=ESKALA
+scale_limits=Eskala mugak
+scale_limits_status=Eskala-mugen egoera
+scaleAny=edozein
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=<5.000
+Se_superponen_a=Honakoei gainjartzen zaizkienak
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Kontuan izango da erregistroak hemendik aurrera ezabatzeko\:
+se_van_a_guardar_=
+Sean_disjuntos_a=honen disjuntu direnak
+Sean_iguales_a=honen berdinak direnak
+search_results=Bilaketaren emaitzak
+searchButton=Bilatu
+seleccion=Hautaketa
+seleccion_campos=Hautatu eremuak
+seleccion_de_campos=Eremuak hautatzea
+seleccion_fuente=Letra-tipoa aukeratu
+Seleccion_por_capa=Hautatu geruzaka
+Seleccion_por_tema=Gaika hautatu
+selecciona_sistema_de_referencia=
+seleccionar=Hautatu
+Seleccionar=Hautatu
+seleccionar_capas=Hautatu geruzak
+seleccionar_coberturas=Hautatu estaldura
+seleccionar_CRS=Hautatu CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Geruza aktiboetatik baldintza hauek betetzen dituzten osagaiak hautatu\:
+Seleccionar_del_conjunto=Multzotik hautatu
+Seleccionar_Directorio=Geruza hauek dituen karpeta\:
+seleccionar_fichero=Hautatu fitxategia
+Seleccionar_fichero=Hautatu fitxategia
+seleccionar_formato=Hautatu formatua
+seleccionar_parametros=Hautatu parametroak
+seleccionar_por_punto=Puntuka hautatu
+seleccionar_por_rectangulo=Laukizuzenka hautatu
+seleccionar_puntos=Hautatu puntuak
+seleccionar_srs=Hautatu SRS
+seleccionar_tiempo=Hautatu denbora
+seleccionar_todos=Hautatu guztiak
+seleccione_campo_enlace=Hautatu lotzeko erabiliko den eremua
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Hautatu data bat...
+seleccione_tabla=Hautatu taula
+seleccione_tabla_a_enlazar=Hautatu lotu beharreko taula
+seleccione_tabla_origen=Hautatu join-aren sorburu-taula
+select=
+select_all=Hautatu dena
+select_driver=Hautatu driverra
+select_features=Hautatu geruzak
+select_fields=Hautatu eremuak geruzatik
+select_formats=Hautatu formatuak
+select_from_point=Hautatu puntu batetik aurrera
+select_geom_field=Hautatu geometria duen eremua
+select_geometry=
+select_geometry_type=Hautatu geometria mota
+select_handlers=Hautatu maneiatzailea
+select_layers=Hautatu geruzak
+select_none=Kendu denak
+select_other_geometry_or_end=
+select_unique_field=Hautatu eremu bakarra
+selectBandaRefinado=Hautatu fintze-banda
+selected_dimensions=Hautatutako dimentsioak
+selected_from_list=Zerrendatik hautatua
+selected_layer=
+selected_layers=Hautatutako geruzak
+selected_parameters=Hautatutako parametroak
+selected_themes=Hautatutako gaiak
+selectfromview=Hautatu puntua bistatik
+selection=Hautatu
+selection_=HAUTATU
+selection_color=Hautaketaren kolorea
+server=Zerbitzaria
+server_abstract=Aurkibidea
+server_cant_render_layers=Zerbitzari honek ezin ditu geruza horiek batera errendatu. Saia zaitez geruza bakoitzerako eskari bat egiten
+server_doesnt_support_selected_image_format=Zerbitzariak ez ditu irudiak hautatutako formatuan ematen
+server_has_no_services=Zerbitzariak ez du inolako zerbitzurik ematen
+server_provides_no_srs__scale_data_may_be_wrong=Zerbitzariak ez du koordenatu sistemarik ematen. Eskalei buruzko informazioa okerra izan daiteke.
+server_timeout=Server timeout
+server_title=Zerbitzariaren izenburua
+server_type=Zerbitzari mota
+server_version=Zerbitzariaren bertsioa
+serverReply=Zerbitzariaren erantzuna
+serverURL=Sartu helbidea katalogoaren zerbitzaria dagoen lekuan
+serverURLCat=Sartu helbidea izendegiaren zerbitzaria dagoen lekuan
+service=Zerbitzua
+service_does_not_exist=Zerbitzua ez dago erabilgarri
+service_info=Zerbitzuari buruzko argibideak
+service_name=Zerbitzuaren izena
+service_type=Zerbitzu mota
+service_type_not_supported=Bezeroak ez du zerbitzu mota onartzen
+servicename_selection_mode=Zerbitzuaren izena hautatu
+servidor=Zerbitzaria
+Servidor=Zerbitzaria
+servidor_wcs_no_responde=Hautatutako zerbitzariak ez du erantzuten
+set=Ezarri
+settings=Doikuntzak
+settings_editor=Doikuntza-editorea
+shape_seleccion=Esportatu hautapena.
+Shapefile=Shapefile
+Shapefiles=.SHP fitxategiak
+show_grid=Erakutsi sareta
+show_layer_ids=Erakutsi geruzen ID
+show_layer_names=Erakutsi geruzen izenak
+show_this_dialog_next_startup=
+shp_files=.shp fitxategiak
+siempre=Beti
+siguiente=Hurrengoa
+Siguiente=Hurrengoa
+simbolo=
+Simbolo=Ikurra
+Simbolo_unico=Ikur bakarra
+Simbolo_Unico=Ikur bakarra
+Simbologia=Sinbologia
+simple=Bakuna
+simplificar=Sinplifikatu
+sin_realce=Irtengunerik gabe
+sin_titulo=Titulurik gabe
+sincronizar_color_borde_relleno=Ertzaren kolorea eta betegarriarena sinkronizatu\:
+single_value=Balio bakuna
+size=Tamaina
+Size=
+sobre_la_barra=Barran
+Sobreescribir_fichero=
+Solo_disolver_adyacentes=Albokoak bakarrik disolbatu.
+Solo_para_capas_vectoriales=Bektore-geruzetarako bakarrik
+splain=Kurba
+SplashWindow.Iniciando=Hasten...
+square=Izkina
+srs=Srs
+start_edition=Hasi edizioa
+state_or_province=Estatua/Probintzia
+statistics=Estatistikak
+status=Egoera
+StatusBar.Aplicacion_iniciada=Aplikazioa hasita dago
+stop_edition=Amaitu edizioa
+stretch=Tiratu
+stretch_=TIRATU
+style=Estiloa
+Style=Estiloa
+Subir_capa=Igo geruza
+Sum=Batukaria
+suma=Batura
+Superior=Goian
+suprimir_objetos_origen=
+symmetry=Simetria
+symmetry_=
+S\u00edmbolo=Ikurra
+Tabla=Taula
+Tabla_de_Atributos=Atributuen taula
+Tabla_de_prueba=Proba-taula
+tablas=Taulak
+Tablas=Taulak
+table=Taula
+tag=tag
+tamano=Tamaina\:
+tamano_metros=Tamaina metrotan
+tamano_pagina=Orrialde-tamaina\:
+tamano_posicion=tamaina/kokalekua
+tamanyo_borde=Ertzaren tamaina
+tamanyo_fuente=Iturri-tamaina
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+tarea_en_progreso=Ataza gauzatzen
+telephone=Telefonoa
+Tema=Geruza
+Terminar=Amaitu
+terminate=Amaitu
+test_now=
+texto=Testua
+theme=Gaia
+this_layer_was_already_added=Geruza hau gehituta zegoen
+Tiempo=Denbora
+Tile=Mosaikoan
+tile_tooltip=Antolatu leihoak mosaikoan
+time=Denbora
+timeout=Timeout
+tipo_dato=Datu mota
+tipo_de_intervalo=Tarte mota
+Tipo_de_intervalos=Tarte-mota
+tipo_de_leyenda=Legenda-mota
+Tipo_de_leyenda=Legenda-mota
+Tipo_de_linea=Lerro-mota
+tipo_fichero_proyecto=gvSIG (*.gvsproj) proiektu fitxategia
+tipo_leyenda=Legenda motako fitxategia (*.GVL)
+tipo_linea=Lerro mota\:
+Tipo_no_reconocido=Mota ezezaguna
+tipo_relleno=Betegarri-mota\:
+tipo_simbolo=Ikur-mota\:
+tipos_de_documentos=Agiri-motak
+title=Izenburua
+titulo=Proiektuen kudeatzailea
+titulo_confirmar=Baieztapena
+titulo_consola=Informazio-kontsola
+titulo_fframetext=Testu eremuaren titulua
+to=Honaino
+to_annotation=Bihurtu oharpen-geruza
+to_palette=Aldatu paletara
+toda_la_tabla=Taula osoa
+todos=Denak
+tooltips_enabled=Tool tip aktibo
+Toquen=hauek ukitzen dituztenak
+total=Guztira
+transparencia=Gardentasuna
+Transparencia=Gardentasuna
+transparencia_pixel=Gardentasuna pixel bakoitzeko
+Triangulo=Hirukia
+trim=Ebaki
+type=Mota
+ultimo=Azkena
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Gutxienez geruza bat hautatu behar duzu.
+unable_to_findout_server_version=Ezin izan da zerbitzariaren bertsioa zehaztu
+unable_to_findout_service_type=Ezin izan da zerbitzu mota zehaztu
+undo=Desegin
+undo_error=Errorea komandoa desegitean
+ungroup=Desegin multzoak
+unidades=Unitateak\:
+Unidades=Unitateak\:
+Union=Lotura
+Union._Introduccion_de_datos=Lotura. Datuak sartzea
+unite_separate=Batu/Banatu
+units=Unitateak
+unknown=Ezezaguna
+unknown_response_format=Erantzunaren formatua ezezaguna da
+unsupported_map_context_version=Web Map Context fitxategiaren bertsioa ezin da jasan
+unsupported_version=Ezin da bertsio hori jasan
+untitled=Titulurik gabe
+update_catalog=Freskatu zerbitzu zerrenda
+upperCoordinates=Goikoak
+us_country=Estatu Batuak
+Usar_indice_espacial=Espazio-indizea erabili
+Usar_los_campos_de_la_capa=Erabili geruzaren eremuak
+usar_marco=Erabili markoa
+usar_rango=Erabili maila bat
+Usar_solamente_los_elementos_seleccionados=Erabili bakarrik hautatutako osagaiak
+usar_titulo=Erabili titulua
+use_custom_size=Tamaina pertsonalizatua
+use_full_extent=
+use_interpolation_method=Erabili interpolazio metodoa
+use_view_size=Bistaren tamaina
+username=Erabiltzailea
+usuario=Erabiltzailea
+utilizar_margenes_impresora=Erabili inprimagailuaren marjinak.
+vacia=Hutsik
+valor=Balioa
+Valor=Balioa
+Valor_azul=Urdin balioa
+Valor_Bandas=Banden balioa
+valor_pixel=Pixelaren balioa
+Valor_rojo=Gorri balioa
+Valor_verde=Berde balioa
+Valores=Balioak
+Valores_unicos=Balio bakarrak
+Valores_Unicos=Balio bakarrak
+value=Balioa
+value_not_found=Ez da balioa aurkitu
+varianza=Bariantza
+vector_layer=Bektore geruza
+vector_type=Bektore mota
+vectorial=Bektoriala
+ventana=Leihoa
+Ventana=Leihoa
+ventana_proyecto=Proiektuaren leihoa
+Ver=Ikusi
+ver_tabla_atributos=Ikusi atributuen taula
+ver_tooltip=Proiektuaren leihoa erakusten du
+version=Bertsioa
+version_conflict=Bertsio-gatazka
+vertical=Bertikala
+vertical_space=
+vertices=erpinak
+view=Bista
+visible=Ikusgai
+visibles=Ikusgai
+Vista=Bista
+vistas=Bista
+visualizacion=Bistaratzea
+Visualizacion=Bistaratzea
+visualizar_cuadricula=Bistaratu sarea
+warning=Oharra
+warnings=Oharrak
+wcs_properties=WCS-aren ezaugarriak
+WCS_properties=WCS-aren ezaugarriak
+wcs_server_error=Errorea WCS zerbitzarian.
+wcsColumn=Estaldura
+wcsError=Errorea gertatu da estaldura kargatzerakoan
+wcsLoad=WCS kargatzea
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context fitxategiaren ezaugarriak
+wfs_properties=
+wfsColumn=Feature
+wfsError=Errorea gertatu da featurea kargatzerakoan
+wfsLoad=WFS kargatzea
+width=Zabalera
+Window=Leihoa
+WMS=WMS
+wms_cant_connect=Ezin izan da WMSrekin konexioa egin
+wms_not_queryable=Zerbitzari honek ez ditu era horretako eskariak onartzen
+wms_properties=WMS ezaugarriak
+wms_server_error=WMS zerbitzariaren errorea
+wms_transparency=Gardentasuna
+wmsColumn=Mapa
+wmsError=Errorea gertatu da mapa kargatzerakoan
+WMSLayer=WMS geruza
+wrong_url=URL helbidea ez da baliozkoa
+xmax=xmax
+xmin=xmin
+xrange=X maila
+Yardas=Yardak
+yes=Bai
+YES=Bai
+ymax=ymax
+ymin=ymin
+yrange=Y maila
+zoom=Zooma
+Zoom=Zooma
+Zoom_a_la_capa=Zooma geruzari
+Zoom_Acercar=Hurbiltzeko zooma
+Zoom_al_Tema=Zooma gaiari
+Zoom_Alejar=Urruntzeko zooma
+Zoom_Completo=Zooma osorik
+Zoom_Completo_Vista=Zooma osorik bistaren gainean
+Zoom_Mas=Zoom handiagoa
+zoom_mas_vista=Zoom handiagoa bistari
+Zoom_Mas_Vista=Zoom handiagoa bistaren gainean
+Zoom_Menos=Zoom txikiagoa
+Zoom_Menos_Vista=Zoom txikiagoa bistaren gainean
+Zoom_pixel=Pixelaren zooma
+Zoom_previo=Aurreko hedadura
+Zoom_Previo=Aurretiko zooma
+Zoom_Real=1\:1 zooma
+Zoom_Select=Zooma hautatutakoari
+Zoom_sgte=
+zooms=Zoomak

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_it.properties	(revision 42196)
@@ -0,0 +1,1778 @@
+#Translations for language: it
+#Wed Nov 08 12:55:49 CET 2006
+(escala_maxima)=(scala massima)
+(escala_minima)=(scala minima)
+_(Etiquetas_estandar)=(Etichette standard)
+_(Intervalos)=(Intervalli)
+_(Simbolo_unico)=(Simbolo unico)
+_(Valores_unicos)=(Valore unico)
+__valenciano=Valenziano
+__espacio_vertical=Spazio verticale\:
+__lineas=linee
+__proyeccion_actual=Proiezione attuale\:
+__redimensionar_texto_escala=Ridimensiona il testo alla scala della vista
+__seleccion_de_fuente=Seleziona carattere
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=Nuova Vista
+abajo=Basso
+abrir=Apri
+Abrir=Seleziona
+Abrir_Geoproceso=Apri Geoprocesso
+Abrir_Imagen=Apri Immagine
+abrir_plantilla=Apri Tavola
+abrir_proyecto=Apri Progetto
+abrir_tooltip=Apri Progetto esistente
+Abrir_una_capa=Apri Layer
+abstract=Riassunto
+accept_tip=Processa i GPS e salva la georeferenziazione. Considera finito l'inserimento dei GPC.
+Accion_Predefinida=Azione predefinita
+aceptar=Accetta
+Aceptar=Accetta
+acerca_de=Cerca...
+activa_la_ventana=Attiva la finestra
+activar=Attiva
+activar_regla=Attiva regola
+activo=
+activos=Attivi
+add=Aggiungi
+add_again_question=Aggiungere di nuovo?
+add_all=Aggiungi tutto
+add_delete_edit_fields=I campi possono essere aggiunti, cancellati o rinominati.
+add_field=Agguingi campo
+add_layer=Aggiungi Layer
+add_rows=Aggiungi righe
+add_vertex=Aggiungi vertice
+addlayer=Aggiungi layer
+addLayer=Aggiungi Layer
+address=Indirizzo
+address_type=
+adjust_grid=
+adjust_transparency=Regola transparenza
+advanced=Avanzata
+advanced_settings=Opzioni avanzate
+Agregacion=Aggregazione
+Agregacion_Desc=Geoprocessi che trasformano dati dettagliati in forma riassuntiva
+agrupacion=Raggruppamento
+agrupar=Raggruppa
+agrupar_capas=Raggruppa layers
+agrupar_graficos=Raggruppa grafici
+agrupar_linea=Raggruppa riquadro di contorno con i grafici 
+Ajustar_cobertura_wcs=Aggiustare copertura WCS
+ajustar_rejilla=Imposta griglia
+Ajustar_transparencia=Regola trasparenza
+ajustes_linea_grafica=Regola spessore linea
+Al_leer_la_leyenda=Leggendo la legenda
+alerta=Avviso
+algoritmo=Algoritmo
+alias=Alias
+align_center=Allinea al centro
+align_down=Allinea in basso
+align_left=Allinea a sinistra
+align_right=Allinea a destra
+align_to_layout_center=Allinea al centro del layout
+align_to_layout_down=Allinea in basso nel layout
+align_to_layout_left=Allinea a sinistra del layout
+align_to_layout_right=Allinea a destra del layout
+align_to_layout_up=Allinea in alto nel layout
+align_to_layout_vertical_center=Allinea al centro del layout verticalmente
+align_up=Allinea in alto
+align_vertical_center=Allinea al centro della verticale
+alineamiento=Allineamento
+alinear=Allinea
+alinear_graficos=Allinea grafici
+allWords=Tutte le parole
+alta=Alta
+alto=Alto
+altura=Altezza\:
+Altura_fija_de_texto=Altezza fissa del testo
+ambito=Ambito
+ampl_extent=Modifica l'estensione dell'immagine da georeferenziare
+Anadir=Aggiungi
+Anadir_al_conjunto=Aggiungi all'insieme
+Anadir_capa=Aggiungi layer
+Anadir_Capa=Aggiungi layer
+Anadir_capa_de_eventos=Aggiungi layer eventi
+anadir_tag=Aggiungi tag
+Anadir_tema_de_eventos=Aggiungi tema degli eventi
+anadir_titulo=
+Anadir_todos=Aggiungi tutto
+Analisis=Analisi
+ancho=Larghezza\:
+ancho_alto=Larghezza X Altezza
+Ancho_Contorno=Spessore contorno
+Ancho_de_linea=Spessore linea
+anchura=Larghezza\:
+angulo_rotacion=Angolo di rotazione\:
+anterior=Precedente
+Anterior=Precedente
+anyResult=La ricerca non ha prodotto alcun risultato
+anyWord=Qualunque parola
+Aplicar=Applica
+apply=Applica
+Apply=Applica
+arc=Arco
+arc_=ARCO
+Archivo=File
+Archivos_de_Disco=Files del disco
+arcims_load=Caricamento ArcIMS
+arcims_properties=Propriet\u00e0 ArcIMS
+arcims_server_error=Errore del server ArcIMS
+arcims_server_status_col_name=Stato
+arcims_server_type_col_name=Tipo
+Area_de_influencia=Area di influenza (buffer)
+Area_de_influencia_definida_por_un_campo=Area di influenza definita per un campo
+Area_de_influencia_definida_por_una_distancia=Area di influenza definita per una distanza
+area_trabajo=Area di lavoro
+Areas_de_influencia=Area di influenza (Buffer)
+Areas_de_influencia._Introduccion_de_datos=Area di influenza (Buffer). Inserimento dati.
+arriba=Alto
+ascending_order=Ordine crescente
+ascending_order_tooltip=Ordina il campo selezionato in ordine crescente
+asignar_coordenadas=
+Asistente_de_geoprocesamiento=Geoprocessi guidati
+aspect=Configurazione aspetto
+Atributo=Attributo
+Atributos_Numericos=Attributi numerici
+attributeName=Nome
+attributes=Attributi
+attributeType=Tipo
+automatico=Automatico
+available_layers=Layers disponibili
+available_services=Servizi disponibili
+aviso_sin_extent_de_referencia=Per usare questa opzione \u00e9 necessario avere come minimo un layer gi\u00e0 aperto che serva da riferimento
+Ayuda=Aiuto
+back=Precedente
+Back=Precedente
+background_color=Colore sfondo
+baja=Basso
+Bajar_capa=Abbassa layer
+bandas=Bande
+bands=Bande
+barra=Barra\:
+base=base
+base_datos=DataBases
+bd=Database
+Block_Size_=Dimensioni blocco\:
+bmp=BMP files
+Bold=Grasseto
+borra_seleccion=Annulla/Elimina selezione
+borrador=Bozza
+borrar=Rimuovi
+borrar_todos=Elimina tutto
+borrar_uno=Elimina punto selezionato
+box=Riquadro
+break=Rompi
+break_=Break
+brillo=Luminosit\u00e1
+brillo_y_contraste=Luminosit\u00e0 e Contrasto
+browse=Sfoglia
+BRX=BRX\:
+BRY=BRY\:
+buffer=Buffer
+cajetin=Riquadro
+calcular_errores=
+Calcular_intervalos=Calcola intervalli
+calidad=Qualit\u00e1
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Adatta altezza degli elementi selezionati al pi\u00f9 alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Adatta larghezza degli elementi selezionati al pi\u00f9 largo.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Adatta la dimensione degli elementi selezionati al maggiore.
+Cambio_Color=Cambio di colore
+Cambio_de_estilo=Cambio di Stile
+Cambio_Estilo=Cambio di stile
+cambio_nombre=Cambio di nome
+Cambios_de_estilo=Cambi di Stile
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo di altezza del testo\:
+Campo_clasifica=Campo di classificazione
+Campo_de_clasificacion=Campo di classificazione
+campo_de_documentos_asociados=Campo dei documenti associati
+Campo_de_etiquetado=Campo di etichetta
+Campo_para_disolver=Campo da dissolvere
+Campos=Campi
+cancel=Cancella
+Cancel=Cancella
+cancel_edition=
+cancel_tip=Annulla le ultime modifiche e chiude la finestra. La georeferenziazione pu\u00f2 essere modificata in seguito.
+cancelar=Cancella
+Cancelar=Cancella
+cancelar_edicion=Termina editing
+cancelSearchButton=Cancella
+cannotReproject=Non \u00e9 possibile proiettare in questo sistema di coordinate
+cant_connect=Non \u00e9 stato possibile realizzare la connessione
+cant_connect_wfs=Non \u00e9 stato possibile realizzare la connessione con il WFS
+cant_reproject_from_any_of=Impossibile riproiettare da nessuno dei
+cantLoad=Impossibile caricare il layer WFS
+capa=
+Capa=Layer
+capa_exportada=
+capa_importada=Layer importato, vuoi creare l'indice spaziale?
+capas=Layers
+Capas=Layers
+Capas_del_directorio=Layers nella cartella
+Capas_del_localizador=Layers del localizzatore
+capas_edition_cache=Selezionare i Layers da utilizzare per lo snapping.
+capaWMS=WMSLayer
+caracteres_erroneos=
+cargar=Carica
+cargar_fichero=
+cargar_leyenda=Carica leggenda
+cargar_sin_georef=
+cartografico=Cartografico
+Cascada=Cascata
+cascada_enable=Devi aprire almeno una finestra
+cascada_tooltip=Organizza le finestre a cascata
+catalog_search=Ricerca dei geodati
+cathegory=Categoria
+cathegoryAny=Qualsiasi
+cathegoryBiota=Biota
+cathegoryBoundaries=Limiti
+cathegoryClimatologyMeteorologyAtmosphere=Climatologia, meteorologia e atmosfera
+cathegoryEconomy=Economia
+cathegoryElevation=Altitudine
+cathegoryEnvironment=Ambiente
+cathegoryFarming=Agricoltura
+cathegoryGeoscientificInformation=Informazione geoscientifica
+cathegoryHealth=Salute
+cathegoryImageryBaseMapsEarthCover=Copertura della terra con mappe
+cathegoryInlandWaters=Acque interne
+cathegoryIntelligenceMilitary=Intelligenza Militare
+cathegoryLocation=Localizzazione
+cathegoryOceans=Oceani
+cathegoryPlanningCadastre=Piano catastale
+cathegorySociety=Societ\u00e1
+cathegoryStructure=Strutture
+cathegoryTransportation=Trasporti
+cathegoryUtilitiesCommunication=Comunicazione e utilit\u00e1
+causa_error_desconocida=Causa dell'errore sconosciuta
+Centimetros=Centimetri
+Centrar_la_Vista_sobre_un_punto=Centra la visuale su un punto
+centrar_punto=Centra punto selezionato nella visuale
+cerrar=Chiudi
+Cerrar=Chiudi
+change=Modifica
+change_before=Porta avanti
+change_behind=Porta indietro
+change_height=Modifica altezza
+change_service=Cambia servizio
+change_width=Modifica larghezza
+choose_image_format=Scegli formato immagine
+chooseAttribute=Scegli un attributo per effettuare la ricerca
+circle=Cerchio
+circle_=CERCHIO
+circulo=Cerchio
+Circulo=Cerchio
+circumscribed=Circoscritto
+city=Citt\u00e0
+clave=Password
+clear=Pulisci
+close=Chiudi
+close_polyline=Polilinea chiusa
+Cobertura_de_datos=Layer dei dati
+Cobertura_de_entrada=Layer di input
+Cobertura_de_interseccion=
+Cobertura_de_recorte=Layer di confronto
+Cobertura_de_salida=Layer di output
+Cobertura_para_unir=
+Coberturas=Coperture
+Coberturas_de_entrada=Insieme dei Layers di input
+coincidir_tamano=Eguagliare dimensioni\:
+coincidir_tamanyo=Adatta dimensione
+colocar_a_margenes=Colloca al margine
+colocar_alrededor_seleccionados=Colloca intorno a quanto selezionato
+colocar_alrededor_todos=Colloca intorno a tutto
+colocar_delante=Colloca davanti
+colocar_detras=Colloca dietro
+color=Colore\:
+Color_Contorno=Colore contorno
+Color_de_la_Linea=Colore linea
+Color_de_Relleno=Colore di riempimento\:
+Color_final=Colore finale\:
+Color_inicial=Colore iniziale\:
+Color_inicio=Colore iniziale
+color_texto=Colore testo\:
+column_not_found=Colonna non trovata
+comentarios=Commenti
+comenzar_edicion=Inizia modifica
+commands_stack=Lista dei comandi
+complex_selection=Selezione complessa
+complex_selection_=SELEZIONE COMPLESSA
+compress=Compressione
+Compression_=Compressione
+concordancia=Concordanza
+conectar=Connetti
+conection=Connessione
+conexion_correcta=Connessione corretta
+configuracion_andami_tooltip=Configurazione Andami
+configurar=Configura
+Configurar=Configura
+configurar_ANDAMI=Finestra di dialogo configurazione di ANDAMI
+configurar_localizador=Configura localizzatore
+Configurar_localizador=Configura localizzatore ...
+configurar_todas_las_extensiones=Configura tutte le estensioni
+confirm_gid=
+confirmacion=Conferma
+confirmar_borrar=Gli elementi saranno rimossi. Sei sicuro?
+conflicto_de_nombres_de_mapas_al_pegar=Si sta tentando di incollare mappe i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflicto_de_nombres_de_tablas_al_pegar=Si sta tentando di incollare tabelle i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflicto_de_nombres_de_vistas_al_pegar=Si sta tentando di incollare Viste i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflito_de_nombres_de_tablas_al_pegar=Conflitto nei nomi delle tabelle durante la copia.
+connect=Conettere
+connect_error=Errore di connessione
+connectButton=Connetti
+connection_name=Nome della connessione
+conservar_escala_visualizacion=Mantieni scala di visualizzazione
+Consola=Console di informazione
+Consola_de_jython=Console di Jython
+Consola_de_jython_tooltip=Apre una console di Jython
+consulta=Consulta
+contact_info=Riferimenti di contatto
+contact_organization=Organizzazione
+contact_person=Nome
+contact_position=Cargo
+Contengan=Contengono
+contiene_espacios_en_blanco=Contiene spazi bianchi
+contraste=Contrasto
+Conversion_de_datos=Conversione dei dati.
+Conversion_de_datos_Desc=Geoprocessi per la trasformazione dei dati (conversione del formato, reproiezione, etc.)
+Convex_Hull=Perimetro Convesso
+Convex_Hull._Introduccion_de_datos=Perimetro Convesso. Inserimento dati
+coor_geograficas=Coordinate geografiche
+coord_system=Sistema di coordinate
+coordenadas_vacias=Coordinate vuote
+coordinates=Coordinate
+coordinatesContains=contiene
+coordinatesEnclose=include
+coordinatesEqual=uguale
+coordinatesFullyOutsideOf=\u00e9 completamente al di fuori di
+copiar=Copia
+copy=Copia
+copy_=COPIA
+cortar=Taglia
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=Paese
+coverage=Copertura
+covered_extension=Copertura dell'estenzione
+Crear_Buffer=Crea area di influenza (buffer)
+Crear_Indice=Creazione dell'indice spaziale...
+Crear_Indice_Intro=
+Crear_Indice_Pregunta_1=Creare un indice spaziale per il layer?
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Crea file di georeferenziazione (worldfile)
+created_with=Creato con
+creation_date=Data creazione
+credentials=
+cross_circle=Interseca/Contiene la circonferenza
+cross_polygon=Interseca/Contiene il poligono
+Crucen_con=Si incrociano con
+Cruz=Croce
+Cuadrado=Quadrato
+cuadro_no_asociado=Il quadro di georeferenziazione non \u00e8 associato con alcun layer nella vista, verr\u00e0 chiuso. Per favore, aprire la finestra di dialogo associata al layer richiesto.
+cuando_activo=Quando attivo
+current_scale=Scala attuale
+cut=Taglia
+Dado_un_campo_de_atributos=Dato un campo di attributi
+data_origin=Origine dati
+database=Nome del database
+database_connection=Connessione Database
+datum=Datum
+DBManager=Gestore dei Database
+de=di
+De=Di
+de\ =di
+de\ 0=di 0
+debe_estar_activada=Deve essere attivata
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Selezionare i layers di cui si desiderano informazioni.
+debera_introducir_nombres_para_las_vistas_a_pegar=E' necessario inserire nuovi nomi per le viste.
+debera_introducir_nombres_para_los_mapas_a_pegar=E' necessario inserire nuovi nomi per le mappe.
+default=Default
+default_name=Layer WFS
+default_projection=Proiezione predefinita
+default_value=Valore predefinito
+define_fields=Definisce i campi
+define_point=Definisce il punto
+defined_by_user=Definito dall'utente
+defined_by_view_extent=Utilizza estensione della vista
+dehacer=Annulla
+del=Elimina
+delete_field=Elimina campo
+deleted_feature=Elemento eliminato
+densityfication=Planarita'
+Dentro=All'interno del poligono
+Dentro_y_fuera=All'interno ed esterno del poligono
+Derecha=Destra
+Derecho=Destro
+desactivar_capa=Nascondi Layer dopo il primo punto.
+desactivar_puntos=Disattiva il layer dei punti dopo il primo punto.
+desagrupar=Separa
+desagrupar_capas=Separa layers
+desagrupar_graficos=Separa grafici
+descending_order=Ordine decrescente
+descending_order_tooltip=Ordina il campo selezionato in ordine decrescente
+desconectar=Sconnettere
+descripcion=Descrizione
+Descripcion=Descrizione
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Per utilizzare valori comuni per tutti i campi del layer lasciare i valori di default. Per personalizzare l'aspetto delle etichette selezionare i campi che contengono i valori corrispondenti.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con questo strumento \u00e8 possibile creare un layer virtuale basato su un layer esistente che permetta di realizzare un'etichettatura avanzata. Modifica la visualizzazione del layer mostrando il valore di uno dei suoi campi.</HTML>
+description=Descrizione
+description_URL=URL descrittiva
+desde=Da
+desde_arriba=Dall'alto\:
+desde_izquierda=Da sinistra\:
+desea_borrar_el_documento=Eliminare i domumenti selezionati?
+desea_borrar_la_capa=Eliminare i layers attivi?
+desea_continuar=Continuare?
+deshacer=Annulla
+desplaza_los_elementos_seleccionados_a_la_derecha=Sposta gli elementi selezionati a destra.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Sposta gli elementi selezionati a sinistra.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Sposta gli elementi selezionati al centro dell'asse X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Sposta gli elementi selezionati al centro dell'asse Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Sposta gli elementi selezionati in basso.
+desplaza_los_elementos_seleccionados_hacia_arriba=Sposta gli elementi selezionati in alto.
+Desplazamiento=Spostamento
+desviacion_tipica=Deviazione standard
+detalles=Dettagli
+Detalles=Dettagli
+DGNFiles=DGNFiles
+Diferencia=Differenza
+Diferencia_Introduccion_de_datos=Differenza. Inserimento dati
+dimension=Dimensione
+dimensiones=Dimensioni
+directorio=Cartella
+directorio_extensiones=Cartella delle estensioni
+disagregate_layers=Conserva la struttura dei layers
+Disolver=Dissolve
+Disolver._Introduccion_de_datos=Dissolve. Inserimento dati
+Disolver_entidades=Dissolvi entit\u00e0
+distance_units=Unit\u00e1 di misura
+distance_x=Distanza X
+distance_y=Distanza Y
+distancia_malla_incorrecta=Spaziatura griglia errata
+distribuir=Distribuisci\:
+distribuir_elementos_sobre_todo_el_layout=Disponi elementi sull'intero layout
+distributes_down=Disponi dal basso
+distributes_horizontal=Disponi orizzontalmente
+distributes_left=Disponi a sinistra
+distributes_right=Disponi a destra
+distributes_to_layout_down=Disponi dalla parte inferiore del layout
+distributes_to_layout_horizontal=Disponi orizzontalmente nel layout
+distributes_to_layout_left=Distibuisci a sinistra nel layout
+distributes_to_layout_right=Disponi dalla destra del layout
+distributes_to_layout_up=Disponi dalla parte superiore del layout
+distributes_to_layout_vertical=Disponi verticalmente nel layout
+distributes_up=Disponi dall'alto
+distributes_vertical=Disponi verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Equidistanzia in orizzontale.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Equidistanzia in verticale.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuisci uniformemente gli elementi selezionati dal basso verso l'alto.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuisci uniformemente gli elementi selezionati dall'alto verso il basso.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuisci uniformemente gli elementi selezionati da destra a sinistra.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuisci uniformemente gli elementi selezionati da sinistra a destra.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuisci uniformemente gli elementi selezionati in orizzontale.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuisci uniformemente gli elementi selezionati in verticale.
+divisiones_izquierda=Separazioni a sinistra
+documentos_existentes=Documento esistente
+downloadColumn=Scarica
+draw_text_only=Disegna il solo testo
+driver=Driver
+drivers=Drivers
+dxf=dxf
+dxf_files=DXF files
+Dxffiles=DXF Files
+e-mail=E-mail
+edicion=Modifica
+edit=
+edit_copy=Copia
+edit_cut=Taglia
+edit_delete=Elimina
+edit_layer_properties_to_fix_them=Modificare le propriet\u00e0 del layer per correggerle
+edit_paste=Incolla
+edit_redo=Ripeti
+edit_select_all=Seleziona tutto
+edit_undo=Annulla
+edit_vertex=Modifica vertice
+edit_vertex_=MODIFICA VERTICE
+editable=Modificabile
+Editar_leyenda=Modifica legenda
+editar_propiedades=Modifica proprieta'
+editar_vertices=Modifica vertici
+Edition=Modifica
+edition_properties=Propriet\u00e0 di modifica
+Edition_Properties=Propriet\u00e0 di modifica
+Ejecutando\ comando\:\ =Esegui comando\:
+el_numero_maximo_de_intervalos_para_este_campo_es=Il numero massimo di intervalli per questo campo \u00e8
+Elegir_Color=Seleziona Colore
+Elegir_Fuente=Seleziona Font
+elemento_ya_existe=L'elemento esiste gi\u00e0
+Elementos_seleccionados_de_la_capa=Gli elementi selezionati nel presente layer
+Elija_una_herramienta_de_analisis=Scegliere uno strumento d'analisi
+Eliminar=Elimina
+eliminar_capa=Elimina layer
+eliminar_columna=Elimina colonna
+eliminar_extremos=Elimina gli estremi
+eliminar_fila=Elimina riga
+eliminar_punto=Elimina punto
+eliminar_todos_puntos=Elimina tutti i punti
+ellipse=Ellisse
+ellipse_=ELLISSE
+en_el_mapa=Nella mappa\:
+En_metros=In metri
+En_pixels=In pixels
+en_unidades=in unit\u00e0
+Encuadre=Zoom
+Encuadre_Vista=Zoom vista
+end=Termina
+end_polygon=Finalizzare poligono
+endinfo=Statistiche di finalizzazione
+Enlace_espacial=Connessione spaziale
+Enlace_espacial._Introduccion_de_datos=Connessione spaziale. Inserimento dati
+enlace_vivo=Collegamento attivo
+Enlazar_a_fichero_de_texto=Collegamento a documento di testo
+Enlazar_a_ficheros_de_imagen=Collegamento a files d'immagine
+enter_layer_name=Inserire nome del layer
+enter_new_layer_name=Inserire il nome del nuovo layer
+enter_path_to_file=Inserire il percordo del file
+envelope=Inviluppo
+equal_intervals=Intevalli uguali
+equidistance=
+error=Errore
+Error_abriendo_el_fichero=Errore aprendo il file
+Error_accediendo_a_los_datos=Errore accedendo ai dati
+Error_atributo_no_numerico=Campo di buffer non numerico
+error_capa_puntos=Errore nel caricamento del layer. E' possibile che il layer di georeferenziazione non sia attivo.
+Error_capa_vacia=Il layer dei risultati \u00e8 vuoto.\nControllare la produzione di eventuali errori.
+Error_chequeando_precondiciones=Errore di controllo delle precondizioni
+Error_chequeo_tipo_geometria=Errore nel controllo della geometria
+error_comunicacion_servidor=Si \u00e9 prodotto un errore comunicando con il server
+error_conexion=Errore nel connettersi al database
+Error_distancia_buffer=Inserire un'ampiezza di buffer
+Error_ejecucion=Errore d'esecuzione
+Error_entrada_datos=Errore d'inserimento dati
+error_escritura=Non puoi scrivere il file
+Error_escritura_resultados=Errore nella scrittura dei risultati
+Error_exportando_SLD=Errore d'esportazione SLD
+Error_fallo_geoproceso=Errore durante l'esecuzione del geoprocesso
+error_file_exists=Il file esiste gi\u00e0. Sovrascriverlo?
+error_file_not_writable=Non \u00e8 possibile scrivere il file di output.
+Error_guardando_la_leyenda=Errore nel salvare la legenda
+Error_guardando_la_plantilla=Errore nel salvare la tavola
+error_lectura=Non puoi leggere il file
+Error_offset_no_numerico=Errore. Valori di offset non validi.
+error_parsing_comboscale_elements=Errore nell'esame degli elementi ComboScale
+error_parsing_comboscale_value=Errore nell'esame del valore ComboScale
+Error_preparar_escritura_resultados=Errore durante la preparazione del layer dei risultati
+Error_proyecciones_iguales=Errore. Le proiezioni di origine e destinazione coincidono.
+Error_reading_isocodes_file=Errore di lettura dei codici ISO della lingua
+Error_seleccionar_capas_merge=Selezionare i layers da unire
+Error_seleccionar_gp=Selezionare un geoprocesso dalla lista
+Error_seleccionar_gp_desc="E' stato selezionato un pacchetto.\nI pacchetti sono raggruppamenti logici di geoprocessi. Per eseguire un geoprocesso selezionarlo dopo aver espanso la lista ad albero.
+Error_seleccionar_resultado=Specificare un file dei risultati
+Error_spjoinmn_sin_funcion=Nella connessione spaziale 1-N \u00e8 necessario specificare una funzione di sommarizzazione
+error_writting_file=Errore nella scrittura del file
+errores=Errori
+errores_csv=Includi errori nel file CSV.
+errorFENotSupported=Al momento \u00e9 possibile effettuare query utilizzando la codifica FILTER ENCODING che non \u00e9 supportata dal Server
+errorGetRecords=Errore durante esecuzione getRecords
+errorIsASRWServer=Server SRW\!
+errorMessageJComboBoxItemsSeekerConfigurable=Invalida configurazione del comportamento.
+errorNotCSWSupportedProtocol=Server trovato, ma sembra non supportare il protocollo CS-W
+errorNotParsedReply=Errore nel processare la risposta. Server trovato, ma probabilmente non supporta il protocollo specificato.
+errorNotSupportedCapabilities=Errore durante esecuzione GetCapabilities.Due ragioni possibili\: errore generato durante l'esecuzione dell'operazioni o il Server non supporta il protocollo specificato.
+errorNotSupportedProtocol=Il Server non supporta il protocollo specificato
+errorNotThesaurusSelected=Il protocollo WFS non permette d'effettuare ricerche se non \u00e9 selezionato un elemento del dizionario
+errorServerException=Il Server ha prodotto un'eccezione
+errorServerNotFound=No se encuentra el servidor
+errorSOAPProtocol=Errore nel protocollo SOAP
+escala=Scala
+Escala=Scala
+escala_desconocida=Scala sconosciuta
+escala_maxima=Scala massima
+Escala_Maxima=Scala massima
+escala_minima=Scala minima
+Escala_Minima=Scala minima
+escala_usuario=Scala specificata dall'utente
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Spazitura orizzontale
+espaciado_vertical=Spaziatura verticale
+espacio=Spazio\:
+espere=Attendere, per favore
+estadisticas=Statistiche
+este_por_debajo_de_=Al di sotto di
+este_por_encima_de=Al di sopra di
+Esten_contenidos_en=Sono contenuti in
+Estilo=Stile\:
+estilos=Stili
+Etiqueta=Etichetta
+Etiquetado=Etichettato
+Etiquetados=Etichettati
+etiquetas=Etichette\:
+Etiquetas_estandar=Etichette standard
+exactSentence=Frase esatta
+examinar=Esamina
+Examinar=Cerca...
+exploit=Esplodi
+exploit_=ESPLODI
+export=Esporta
+export_to=Esporta...
+export_to_map_context=Esporta in Map Context
+exportando_features=Esportando elementi
+exportar=Esporta
+exportar_a=Esporta a...
+exportar_pdf=Esporta come pdf
+exportar_ps=Exporta come ps
+exporting_=Esportando
+extend=Estende
+extend_=ESTENDE
+extension=Estensione
+extension_activada=Estensione attivata
+extensiones=Estensioni
+Extent=Estensione
+extents_no_coincidentes=L'estensione della immagine selezionata non coincide con la immagine di origine.
+factor=Fattore
+factor_zoom_incorrecto=Fattore di zoom errato
+fallo_capas=Errore nell'accedere al layer. I layers seguenti saranno eliminati dal progetto
+fallo_crear_conexion=Errore nel tentare la connessione
+fallo_crear_pool=Errore nella crezione del Pool de Conexiones
+fallo_obtener_conexion_existente=Errore nell'ottenere una connessione gi\u00e0 creata
+fallo_obtener_tablas=Errore nell'ottenere le tavole della base dati
+fallo_realizar_consulta=Errore nel realizzare una ricerca
+fallo_registrar_conexion=Errore nel registrare una connessione
+fax=Fax
+feature=Layers
+features_desea_continuar=elementi, continuare?
+fichero=file
+Fichero=File
+fichero_existe=Il file selezionato esiste gi\u00e1 come banda del layer
+fichero_incorrecto=File non corretto
+fichero_ya_existe_seguro_desea_guardarlo=Il file esiste gi\u00e0, continuare?
+Ficheros_de_cartografia=File dei layers
+Ficheros_SHP=file SHP
+field=Campo
+field_already_exists=Il campo esiste gi\u00e0
+field_decimal_count=Precisione decimale
+field_default_value=Valore predefinito
+field_length=Lunghezza
+field_manager=Editor dei campi
+field_name=Nome del campo
+field_type=Tipo
+fields=
+file=File
+file_exists=
+file_name=File
+file_version=Versione del file
+filtro=Filtro
+final_point=Punto finale
+finalizar=Finalizza
+finish=Termina
+fit_ArcIms_layer=Adatta layer ArcIMS
+fit_WCS_layer=Adatta layer WCS
+fit_WFS_layer=Adatta layer WFS
+fit_WMS_layer=Adatta layer WMS
+Flatness=Planarit\u00e0
+Font=Font
+format=Formato
+formato=Formato
+Formato=Formato
+Formato_de_numero_erroneo=Formato del numero errato
+formato_de_numero_incorrecto=Formato del numero errato.
+formato_incorrecto=Formato non corretto
+formatos=Formati
+from=Da\:
+fuente=Font
+Fuente=Font
+Fuera=Al di fuori del poligono
+fuera_de_extent=Il punto selezionato \u00e8 esterno agli estremi dell'immagine
+Funciones_Sumarizacion=Funzioni di raggruppamento
+gazetteer_connect=Cerca per toponimi
+gazetteer_search=Cerca per toponimi
+GC=Geometria computazionale
+GC_Desc=Geoprocessi che realizzano operazioni di geometria computazionale.
+general=Generale
+General=Generale
+Generar_Intervalos=Crea intervallo
+Generate_Tfw_=Genera Tfw\:
+geometry=Geometria
+GeometryPropertyType=Geometria
+Geoprocesos=Geoprocessi
+georaster=Georeferenziazione
+georef=Georeferenziare
+georef_file=File di georeferenziazione
+georeferenciado=Georeferenziando
+georreferenciar=Georeferenzia immagine
+gestion_encuadre=Gestione zoom
+Gestor_de_Geoprocesos=Gestore dei processi
+gml=GML
+gml_files=File GML
+goto=Effettua zoom a quanto cercato
+grado_polinomio=Grado del polinomio
+grados=Gradi\:
+Grados=Gradi
+Graficos=Grafici
+Grid=Griglia
+Grosor_de_linea=Spessore di linea
+grosor_linea=Spessore linea\:
+group=Raggruppa
+group_graphic_line=Raggruppa bordi grafici
+group_layers=Raggruppa layer
+group_layers_option=Opzioni di raggruppamento layers
+grupo=Gruppo
+GT2shp=GT2shp
+guardado=Salvato
+guardar=Salva
+Guardar=Salvare
+guardar_cambios=Salvare le modifiche
+guardar_clave=Salva la chiave
+guardar_como=Salva come...
+guardar_como_plantilla=Salva come tavola
+Guardar_el_zoom_actual=Salva lo zoom attuale
+guardar_leyenda=Salvare leggenda
+Guardar_leyenda=Salva legenda
+guardar_proyecto=Salva progetto
+guardar_tooltip=Salva progetto
+Habilitar_etiquetado=Attiva etichetta
+hasta=fino a
+height=Altezza
+Herramientas=Strumenti
+Herramientas_de_analisis=Strumenti d'analisi
+Herramientas_vista=Vista Stumenti
+hide_grid=
+Hiperenlace=Collegamento
+horizontal=Orizzontale
+horizontal_space=Spazio orizzontale
+host=HOST
+hostname=Hostaname
+html_in_a_new_view=<HTML>Crea una vista nuova nel progetto. La nuova vista conterr\u00e1 tutti i Layers definiti defini dal file.</HTML>
+html_in_other_view=<HTML>Aggiunge i layer nella vista specificata nella lista seguente\:</HTML>
+html_in_the_current_view=<HTML>Aggiunge i Layers nel file alla vista attiva.</HTML>
+Icon_not_found_=Icona non trovata
+id=ID
+Identificar_Resultados=Identifica risultati
+idioma=Lingua
+Igual_que_la_impresora=Uguale alla stampante
+igual_todos_lados=Uguale per tutti i lati
+imagen=Immagine
+Imagen=Immagine
+imagen_no_accesible=Impossibile accedere all'immagine
+import=Importa
+import_from_ascii=Importa tabella da file CSV (.csv).
+import_layer=Salva layer in PostGIS
+import_map_context=Importa mappe da un file Web Map Context OGC (.cml).
+importar=Importa
+importar_extent=Importare l'estensione attuale della vista
+Imprimir=Stampa
+in=in
+incorrect_option=Opzione errata
+incorrect_point=Punto errato
+incorrect_value=Valore errato
+Indexando=Indicizzando...
+Indexando_espacialmente=Indicizzazione spaziale del layer
+indexar_campos=Indicizzare campi
+Inferior=Inferiore
+info=Informazione
+info_format_not_supported=
+infobreak=Mostra gli elementi del layer usando colori differenti.
+infodef=Mostra gli elementi del layer usando lo stesso simbolo.
+informacion=Informazione
+Informacion=Informazione
+infovalue=Mostra gli elementi del layer usando un simbolo per ogni valore.
+Inicializando=Inizializzando
+initial_warning=<html><b>ATTENZIONE\!</b><br>Versione in via di sviluppo. Pu\u00f2 contenere errori significativi e provocare la corruzione dei file modificati.<br><br>Si consiglia l'uso di una versione stabile di gvSIG per il lavoro quotidiano.</html>
+insert=Inserisci
+insert_basis_point=Inserisci punto base
+insert_central_point_or_3p=Inserisci punto centrale o [3P]
+insert_central_point_polygon=Inserisci punto centrale del poligono
+insert_column=
+insert_destination_point=Inserisci punto di destinazione
+insert_distance_another_axis=Inserisci distanza dall'altro asse
+insert_factor_or_reference=Inserisci fattore di scala [2] o riferimento [R]
+insert_first_point=Inserisci primo punto
+insert_first_point_corner=Inserisci il primo punto d'angolo
+insert_first_point_scale=Inserisci punto iniziale della linea di scala
+insert_initial_point_axis=Inserisci punto iniziale dell'asse dell'ellisse
+insert_last_point=Inserisci ultimo punto
+insert_last_point_axis=Inserisci punto finale dell'asse dell'ellisse
+insert_last_point_reference=Inserisci punto finale della linea di riferimento
+insert_last_point_scale=Inserisci punto finale della linea di scala
+insert_length_or_point=Inserisci lunghezza o punto
+insert_move_first_point=Inserisci il primo punto per lo spostamento
+insert_move_last_point=Inserisci il secondo punto per lo spostamento
+insert_next_point_arc_or_close=Inserisci punto successivo, Arco [A] o Termina [T]
+insert_next_point_line_or_close=Inserisci punto successivo, Linea [N], Chiudi polilinea [C] o Termina [T]
+insert_next_point_selection_or_end_polygon=Inserisci punto successivo o finalizza il poligono di selezione [E]
+insert_number_sides=Inserisci il numero dei lati
+insert_opposited_corner=Inserisci angolo opposto
+insert_point=Inserisci punto
+insert_point_corner_or_square=Inserisci punto dell'angolo opposto o Cornice [C]
+insert_point_move=Inserisci punto per lo spostamento
+insert_point_or_end=Inserisci punto o termina geometria [E]
+insert_point_selection=Insterisci punto di selezione
+insert_point_selection_or_types=Inserisci punto o Cerchio [C], rettangolo esterno [OR], poligono [IP], poligono interno [CP], poligono esterno [OP], cerchio interno [CC], cerchio esterno [OC]
+insert_radius=Inserisci raggio [R]
+insert_radius_or_second_point=Inserisci raggio o secondo punto
+insert_reference_point_or_factor=Inserisci punto iniziale della linea di riferimento o un Fattore di scala [F]
+insert_rotation_angle=Inserisci l'angolo di rotazione
+insert_row=Inserisci riga
+insert_second_point=Inserisci secondo punto
+insert_second_point_angle=Inserisci secondo punto o angolo
+insert_second_point_move=Inserisci secodo punto per il movimento
+insert_second_point_selection=Inserisci secondo punto del rettangolo di selezione
+insert_selection_last_point=Inserisci angolo opposto del rettagolo di selezione
+insert_selection_point=Inserisci punto di selezione
+insert_third_point=Inserisci terzo punto
+insertar=
+Insertar=Inserisci
+insertar_cajetin=Inserisci griglia
+insertar_capa=Inserisci Layer
+insertar_circulo=Inserisci Cerchio
+insertar_columna=Inserisci colonna
+insertar_en_la_vista_la_capa_creada=Aggiungere il nuovo layer nella vista attuale?
+insertar_escala=Inserisci Scala
+insertar_fila=Inserisci riga
+insertar_imagen=Inserisci Immagine
+insertar_leyenda=Inserisci Legenda
+insertar_linea=Inserisci Linea
+insertar_norte=Inserire Nord
+insertar_poligono=Inserisci Poligono
+insertar_polilinea=Inserisci polilinea
+insertar_punto=Inserisci Punto
+insertar_recta=Inserisci retta
+insertar_rectangulo=Inserisci Rettangolo
+insertar_texto=Inserisci Testo
+insertar_vista=Inserisci Vista
+inside_circle=All'interno della circonferenza
+inside_polygon=All'interno del poligono
+inteligentSearch=Ricerca intelligente
+inteligentSearchAscii=Tutte le forme della parola
+inter_arc=Arco interno
+inter_line=Linea interna
+Interleave_=Interlacciato\:
+internal_polygon=Poligono interno
+internal_polygon_=Poligono interno
+Interseccion=Intersezione
+Interseccion._Introduccion_de_datos=Intersezione. Inserimento dati
+Intersecten_con=Intersecano con
+interval=Intervallo
+intervalo=Intervallo
+Intervalo=Intervallo
+Intervalos=Intervalli
+Intervalos_equidistantes=Intervalli equidistanti
+Intervalos_por_rupturas_naturales=Intervalli per rotture naturali.
+into_circle=Inscritto
+into_circle_or_circumscribed=Inscritto nel cerchio [I] o circoscritto [C]
+intro_tablename=Inserisci il nome della tabella da creare. AVVISO\: Se la tabella esiste, si canceller\u00e0.
+introduce_nombre=Inserisci nome
+Introducir_valores_desplazamiento=Introdurre valori di Offset
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Inserire il nome del nuovo layer di annotazioni
+introduzca_intervalo_deseado=Introdusci l'intervallo desiderato
+introduzca_nuevo_nombre_para_la_vista=Inserire il nuovo nome della vista
+invalid_dimension_values=Valori di dimensione errati
+invalid_priority_value=Valore di priorit\u00e0 errato
+invert_selection=Inverti selezione
+is_required=\u00e9 obligatorio
+Italic=Corsivo
+Izquierda=Sinistra
+Izquierdo=Sinistro
+join=Unisci
+join_=UNISCI
+jpg=JPEG files
+Juntar=Unione
+Juntar._Introduccion_de_datos=Unione. Inserimento dati.
+KeyMapping.Caracter_no_valido=Carattere non valido\:
+keywords=Parole chiavi
+keyWords=Parole chiave
+kilometros=Chilometri
+Kilometros=Chilometri
+language=Lingua
+last=Precedente
+lastUpdateDate=Ultimo aggiornamento
+latitud=Latitudine
+Launcher.config_mal_formado=. Documento 'config.xml' mal formato
+Launcher.config_no_encontrado=. Documento 'config.xml' non trovato
+Launcher.Dependencia_no_resuelta_en_plugin=La dipendenza non risulta in plugin
+Launcher.Dos_skin_extension=Due skin-extension. Usare l'ultima
+Launcher.Error_con_las_librerias_del_plugin=Errore con la libreria del plugin
+Launcher.error_getting_class_loader_for_status_bar_control=Errore nell'ottenere il loader delle classi per la barra di stato
+Launcher.Error_instanciando_la_extension=Errore ricorrendo all'estensione
+Launcher.Error_localizando_la_clase_de_la_extension=Errore localizzando la classe dell'estensione
+Launcher.Hay_dependencias_circulares=Ci sono dipendenze circolari tra i plugins
+Launcher.Ignorando_el_directorio=Ignorando il registro
+Launcher.labelset_class=Non si \u00e9 trovata la classe delle etichette (labelset)
+Launcher.look_and_feel=Non si \u00e9 potuto porre il 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Non si \u00e9 trovata la classe dell'estensione
+Launcher.No_se_encontro_la_clase_mdi_manager=No si \u00e9 trovata la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Non si \u00e9 potuto accedere alla clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Non si \u00e9 potuta salvare la configurazione di Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Non si \u00e9 potuto ricorrere alla classe mdi manager
+Launcher.No_se_puede_acceder_a=Non si puo' accedere a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Si \u00e9 prodotto un errore salvando la configurazione dei plugins
+Launcher.Two_extensions_with_the_same_priority=Due estensioni con la stessa priorita', se ne carichera' solo una.
+Launcher.Two_menus_with_the_same_position=Due men\u00fa con la stessa posizione, se ne carichera' solo uno
+layer=Layer
+Layer=Livello
+layer_abstract=Riassunto del Layer
+layer_name=Nome del layer
+layer_scale_status=Stato limiti di scala
+layer_title=Titolo del layer
+layerName=Nome del layer
+LayerName=Nome del layer
+layers=Layers
+layers_in_other_view=Layers in altra vista
+layers_in_the_current_view=Layers nella vista attuale
+layerType=Tipo di geometria
+length=Lunghezza
+length_of_field=Lunghezza del campo
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Si sta utilizzando un campo dell'unione nella legenda (e/o etichettato). Cambia le legenda prima di togliere l'unione.
+Leyenda_Por_Defecto=Legenda standard
+line=Linea
+line_=LINEA
+line_type=Tipo di linea
+linea=Linea
+Linea=Linea
+linea_grafica=Bordo grafico
+lineal_directo=Lineare diretto
+linf_der=X in basso a destra
+link=Collegamento
+Link=Collegamento
+linkColumn=Pagina Web
+linkError=Errore nel caricare il Link
+linkLoad=Caricamento di una pagina web
+load_from_xml=Carica da file XML (.rmf).
+loadWMS=Caricamento di WMS
+localizador=Localizzatore
+Localizador_por_atributo=Localizza per attributo
+localize=Localizza
+locked_element=Elemento bloccato
+locked_element_it_cannot_be_deleted=Elemento bloccato.\nNon pu\u00f2 essere eliminato.
+locked_element_it_cannot_be_renamed=Elemento bloccato.\nNon pu\u00f2 essere rimosso.
+logo_URL=URL logotipo
+longitud=Longitudine
+lowerCoordinates=Inferiori
+lppp=ppp
+lsup_izq=X in alto a sinistra
+m/pixel=metri/pixel
+malla_activada=Rete attivata
+manage_fields=Modifica struttura della tabella
+mantainold=Elimina le ricerche precedenti
+mantener_intervalo=Mantieni intervallo
+map_context_file_error=Errore nel file Web Map Context
+map_extent=Estensione
+map_size_in_pixels=Dimensione della mappa (pixels)
+map_units=Unit\u00e1 di mappa
+mapa=Mappa
+Mapa=Mappa
+mapas=Mappe
+marco=Bordo
+marco_vista=Bordo vista
+margenes=Margini\:
+Mas_100=Pi\u00fa di 100 simboli non apportano informazioni al piano
+mas_de_100_simbolos=Pi\u00fa di 100 simboli non apportano informazioni al piano
+max_features=Max elementi
+max_length_is=La lunghezza massima \u00e8
+max_no_of_pixels=Numero massimo di pixels
+max_scale=Scala massima
+maxFeatures_aviso=Raggiunto numero massimo di elementi permessi. E' possibile \naumentare il numero massimo di elementi da recuperare \nmodificando il parametro "Buffer".
+MaxFeaturesEditionCache=Numero massimo di elementi in memoria.
+maximo=Massimo
+Maximo=Massimo
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Errore non catturato per l'usario
+MDIFrame.quiere_salir=Sei sicuro di voler uscire?
+MDIFrame.salir=Uscire
+MDIManagerFactory.No_skin_extension_in_the_plugins=Non si \u00e9 trovato nessuna estensione 'skin' tra i plugins
+media=Media
+Media=Media
+medir_area=Misura area
+medir_distancias=Misura distanze
+Mensaje_buffer=Calcolo area di influenza...
+Mensaje_clip=Geoprocesso Ritaglio...
+Mensaje_convexhull=Geoprocesso Perimetro convesso...
+Mensaje_difference=Geoprocesso Differenza...
+Mensaje_dissolve=Geoprocesso Dissolve...
+Mensaje_enlace_espacial=Geoprocesso Connessione spaziale...
+Mensaje_interseccion=Geoprocesso Intersezione...
+Mensaje_juntar=Geoprocesso Unione...
+Mensaje_primera_pasada_union=Calcolo intersezioni...
+Mensaje_procesando_buffer=Generazione dei buffer...
+Mensaje_procesando_buffer2=Dissoluzione dei buffers...
+Mensaje_procesando_clip_primero=Calcolo del policono di ritaglio...
+Mensaje_procesando_clip_segundo=Ritaglio geometrie...
+Mensaje_procesando_convexhull=Calcolo Perimetro convesso...
+Mensaje_procesando_diferencia=Calcolo differenze...
+Mensaje_procesando_dissolves=Dissoluzione geometrie...
+Mensaje_procesando_enlace_espacial=Concatenazione elementi...
+Mensaje_procesando_interseccion=Calcolo intersezioni...
+Mensaje_procesando_juntar=Unione geometrie...
+Mensaje_segunda_pasada_union=Calcolo differenze A-B...
+Mensaje_tercera_pasada_union=Calcolo differenze B-A...
+Mensaje_union=Geoprocesso Unione...
+Messages._no_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
+Messages.las_traducciones_no_pudieron_ser_cargadas=Non \u00e8 stato possibile caricare le traduzioni
+Messages.no.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=Lista delle lingue assente. Forse \u00e8 stato dimenticato di inizializzare la classe.
+Messages.no_se_encontro_la_traduccion_para=Non \u00e8 stata individuata la traduzione per
+metadata_catalog=Ricerca di Geodati - Connessione
+metadata_tree=Albero di Metadati
+metadatos=Metadati
+metros=Metri
+Metros=Metri
+Milimetros=Millimetri
+Millas=Miglia
+min_scale=Scala min
+minimo=Minimo
+Minimo=Minimo
+minimum_size_of_line_incorrect=Lunghezza minima delle linea errata.
+minx=min.x
+miny=min.y
+modificar=Modifica
+modification_date=Modifica dati
+modify=Modifica
+mosaico_tooltip=Mosaico
+Mostrar_Contorno=Mostra contorno
+mostrar_descripcion=Mostra descrizione
+mostrar_escala_numerica=Mostra scala numerica
+mostrar_puntos=Mostra numerazione dei GCP
+mostrar_rejilla=Mostra griglia
+Mostrar_siempre=Mostra sempre
+mostrar_unidades=Mostra unit\u00e1
+move=Spostamento
+move_=SPOSTAMENTO
+move_elements=Sposta elementi
+Move_from_view=
+move_handlers=Sposta handlers
+move_layer_down=Muovi in basso
+move_layer_up=Muovi in alto
+Mover_geo=Sposta immagine da georeferenziare
+msg_save_raster=L'operazione verr\u00e0 cancellata. Continuare?
+mtspixel=Mts/pixel
+muestra=
+Muestra_atributos=Mostra gli attributi dei layers selezionati
+muestra_consola_tooltip=Mostra la console
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostra gli attributi dei layers selezionati
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra gli elementi del layer usando un simbolo per ogni valore unico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra gli elementi del layer usando una gamma di colori in funzione del valore di un determinato campo di attributi
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tutti gli elementi di un layer usando lo stesso simbolo
+multi_type=Tipo multiplo
+MultiLineStringPropertyType=Multilinea
+multiple_value=Valore multiplo
+multiples_intervalos=Intervalli multipli
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+MultiPointPropertyType=Multipunto
+MultiPolygonPropertyType=Multipoligono
+must_specify_a_file=Specificare un file di output.
+name=Nome
+natural_intervals=Intervalli naturali
+navegacion=Navigazione
+navegacion_vista=Vista navigazione
+nearest_point=Punto pi\u00f9 prossimo
+necesita_un_tema_activo=Necessita un tema attivo
+necesita_un_tema_vectorial_activo=Necessita un tema vettoriale attivo
+necesita_una_capa_activa=Necessario un layer attivo
+necesita_una_capa_vectorial_activa=Necessario un layer vettoriale attivo
+new_dxf=Nuovo DXF
+new_field=Nuovo campo
+new_field_properties=Propriet\u00e0 del nuovo campo
+new_layer=Nuovo layer
+new_layer_name=Nome del nuovo layer
+new_postgis=Nuovo PostGIS
+new_shp=Nuovo SHP
+next=Successivo
+Next=Seguente
+next_point_or_end=Punto successivo o finalizza [E]
+next_previous_add_del_cancel=Punto, vertice successivo [S], precedente [A], aggiungi [I] o elimina [E]
+ninguna_impresora_configurada=Nessuna stampante individuata
+Nivel_de_transparencia=Livello di trasparenza
+no=No
+NO=NO
+no_activos=Non attivi
+no_adjust_grid=
+No_de_intervalos=No intervalli
+No_extension_associated_with_this_event_=Nessuna estensione associata a questo evento
+No_ha_sido_posible_realizar_la_operacion=Impossibile terminare l'operazione
+no_hay_ninguna_capa_seleccionada=Nessun layer selezionato
+no_hay_ninguna_capa_seleccionado=
+no_layers_found=Non ci sono layer disponibili
+No_mostrar=Non mostrare
+No_mostrar_la_capa_cuando_la_escala=Non mostrare il layer quando la scala
+no_puede_continuar=Impossibile proseguire.
+No_reconocido=Non riconosciuto
+No_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
+no_se_pegaran_las_tablas=Non verr\u00e0 incollata alcuna tabella
+no_se_pegaran_las_vistas_del_conflicto=Le viste in conflitto nonsaranno incollate
+No_se_pudo_obtener_la_tabla_de_la_capa=Impossibile ottenere la tabella dal layer
+No_Shape=Questo Layer non e' del tipo Shape
+No_usar_buffer_redondeado=Non arrotondare bordo agli estremi
+no_visibles=Non visibili
+nombre=Nome
+Nombre=Nome
+nombre_capa=Nome del layer
+nombre_cobertura=Nome della copertura
+nombre_feature=
+nombre_no_valido=Nome non valido
+Nombre_que_se_le_dara_al_zoom=Nome per lo zoom
+nombre_sesion=Nome sessione
+Nombres=Nomi
+none_selected=Nessuna selezione
+normal=Normale
+north=Nord
+not_available=Non disponible
+Nueva_tabla=Nuova tabella
+nuevo=Nuovo
+Nuevo_conjunto=Nuovo insieme
+nuevo_nombre_para_el_mapa=Scrivere il nuovo nome per il layer
+nuevo_proyecto=Nuovo progetto
+nuevo_tamano_fuente=Nuova dimensione carattere\:
+nuevo_tooltip=Crea nuovo progetto
+num_bandas=Numero delle bande
+num_columnas=Numero di colonne
+num_filas=Numero di righe
+Num_intervalos=Numero di intervalli
+num_lados_insuficiente=Numero dei lati insufficiente
+Numero_anillos_concentricos=Numero di anelli concentrici
+Numero_de_elementos_seleccionados=Numero degli elementi selezionati
+Numero_de_segmentos_por_cuadrante=
+numero_decimales_mostrar=Numero decimali
+numero_incorrecto=Numero non corretto
+N\u00fam_intervalos=Numero di Intervalli
+Obtener_mas_proximo=Ussa geometria pi\u00f9 prossima
+of=di
+offline=Disconnesso
+ogc_mapcontext_file=OGC Web Map Context
+ok=Accetta
+Ok=Accetta
+online=Connesso
+onSharpening=Attiva pansharpening
+opacidad=Opacit\u00e1
+opciones=Opzioni
+open_first_time=Apri con la vista
+open_layers_as=Apri layer come
+operacion_cancelada=Operazione cancellata
+Operacion_de_overlay=Operazioni di sovrapposizione
+Operaciones_adicionales=
+optinos.network.click_to_test_connection=Premere il pulsante per verificare la connessione
+options=Opzioni
+options.firewall.http.enabled=Usa proxy HTTP
+options.firewall.http.host=Server proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP invalido
+options.firewall.http.nonProxy=Connetti direttamente a
+options.firewall.http.password=Password
+options.firewall.http.port=Porta proxy HTTP
+options.firewall.http.user=Utente
+options.firewall.socks.enabled=Usa proxy SOCKS
+options.firewall.socks.host=Server proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS invalido
+options.firewall.socks.port=Porta proxy SOCKS
+options.foldering.data_folder=Cartella dati geografici
+options.foldering.projects_folder=Cartella progetti
+options.foldering.template_folder=Cartella tavole
+options.foldering.title=Cartelle
+options.general.remember_windows_pos=Ricorda posizione finestre
+options.general.remember_windows_size=Ricorda dimensione finestre
+options.general.select_theme=Applica tema (necessario riavvio)
+options.network.status=Stato della rete
+orientacion=Orientamento\:
+origen_de_datos=Origine dei dati
+Origen_de_datos=Origine dei dati
+Origen_de_Datos=Origine dei Dati\:
+Otros=Altro
+out_circle=Fuori dal cerchio
+out_polygon=Fuori dal poligono
+out_rectangle=Fuori dal rettangolo
+Overlay=Sovrapposizione
+Overlay_Desc=Geoprocessi che estraggono nuove informazioni dalla sovrapposizione di due layer.
+owner=Proprietario
+page=Pagina
+paint=Mostra risultato
+parameters=Parametri
+parametros=Parametri
+Parametros=Parametri
+password=Password
+paste=Incolla
+paste_elements=Inolla elementi
+path=Percorso
+pegar=Incolla
+pegar_mapas=Incolla mappe
+pegar_vistas=Incolla viste
+Perimetro=Perimetro
+period=Periodo
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permette di etichettare gli elementi della mappa con il valore di un determinato campo
+Personalizado=Personalizzato
+personalizar_margenes=Personalizza margini
+Photometric_=Fotometrica\:
+Pies=Piedi
+pila_de_comandos=Lista dei comandi
+pixeles=Pixels
+pixels=Pixels
+Plain=Normale
+plantilla=Tavola
+please_insert_new_field_name=Inserire nuovo nome del campo
+plegar_despl=Piegare/Stendere
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Due classi con lo stesso nome nel plugin
+PluginClassLoader.Error_reading_file=Errore leggendo il file\:
+pluginNotFound=Non trovo nessuna estensione per caricare questo tipo di risorsa
+pluginNotFoundTitle=Caricamento di layers
+PluginServices.Bug\ en\ el\ c\u00f3digo=Errore dell'applicazione
+PluginServices.Bug_en_el_codigo=Bug nel codice
+PluginServices.Error_grave_de_la_aplicacion=Errore grave dell'applicazione. \u00c9 conveniente salvare i dati ed uscire dall'applicazione
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Errore dell'applicazione. Si raccomanda di riavviare l'applicazione.
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Non si \u00e9 incontrata la risorsa traduzione
+PluginServices.No_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Non si \u00e9 potuta porre la clessidra
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Non si \u00e9 potuto riparare il cursore del mouse
+PluginServices.Procesando=
+png=PNG files
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+PointPropertyType=Punto
+poligono=Poligono
+polilinea=Polilinea
+polygon=Poligono
+polygon_=POLIGONO
+polygon_type=Tipo poligono
+polyline=Polilinea
+polyline_=POLILINEA
+poner_capas_a=Poini Layers come...
+poner_temas_a=Poni layer...
+por_debajo_de=dal basso\:
+por_encima_de=dall'alto\:
+Por_favor_active_el_tema=Per favore attiva il layer
+Por_favor_active_la_capa=Attivare il layer
+posicion_linea=Posiziona della linea
+postcode=Codice postale
+postgis=PostGIS
+postgisColumn=Postgis
+postgisError=Errore nel caricare il database
+postgisLoad=Caricamento Postgis
+precision=Precisione
+pref.appearance=Aspetto
+pref.general=Generale
+pref.network=Rete
+pref.network.firewall=Firewall/Proxy
+preferences=
+Preferences=Preferenze
+preferences.foldering.title=Cartelle
+preferencias=Preferenze
+Preferencias=Preferenze
+preparar_pagina=Imposta pagina
+Preparar_pagina=Imposta pagina
+presentacion=Presentazione definitiva
+previous=Precedente
+previsualizacion=Anteprima
+Previsualizacion=Anteprima
+Previsualizacion_de_simbolo=Anteprima simbolo
+primero=Primo
+prioridad=Priorit\u00e1
+problems_encountered_while_importing=Riscontrati problemi nell'importazione
+procesar=Processa
+process_tip=Processa i GCP e assegna un'estensione temporale alle immagini
+Progressive_=Progressivo\:
+projection=Proiezione
+properties=Propriet\u00e1
+property=Propriet\u00e0
+propiedad=Propriet\u00e0
+propiedades=Propriet\u00e1
+propiedades_cajetin=Propriet\u00e0 riquadro
+propiedades_capa=Propriet\u00e0 del layer
+propiedades_de_la_capa=Propriet\u00e0 del layer
+Propiedades_de_la_Capa=Proprieta' del layer
+propiedades_del_tema=Propriet\u00e1 del layer
+Propiedades_del_Tema=Proprieta' del layer
+Propiedades_escala_grafica=Propriet\u00e1 della scala
+propiedades_grafico=Propriet\u00e1 del grafico
+propiedades_mapa=Propriet\u00e1 della mappa
+propiedades_marco_imagenes=Propriet\u00e1 del bordo dell'Immagine
+propiedades_marco_leyenda=Propriet\u00e1 del bordo della legenda
+propiedades_marco_vista=Propriet\u00e1 del bordo della vista
+propiedades_raster=Propriet\u00e1 del raster
+propiedades_sesion=Propriet\u00e1 di sessione
+propiedades_tabla=Propriet\u00e1 tabella
+propiedades_tema=Proprieta' del layer
+Propiedades_texto=Propriet\u00e1 del testo
+propiedades_vista=Propriet\u00e1 della vista
+props=Propriet\u00e0
+protocolsGroup=Protocolli
+provider=Provider
+Proyeccion_Actual=Proiezione attuale
+Proyeccion_Destino=Proiezione di destinazione
+Proyecciones=Proiezioni
+prueba_conexion=Prova della connessione
+puerto=Porta
+Pulgadas=Pollici
+punto=Punto
+puntos=Punti
+purpose=Proposito
+pwd=
+quantile_intervals=Intervalli quantili
+quiere_continuar=Sei sicuro di voler continuare?
+quitar=Rimuovi
+Quitar=Rimuovi
+Quitar_capa=Elimina layer
+quitar_enlaces=Elimina collegamenti
+Quitar_todos=Elimina tutto
+Quitar_Todos=Rimuovi tutto
+quitar_uniones=Elimina unioni
+rango_de_escalas=Classe delle scale
+Rango_de_escalas=Classe delle scale
+raster=Raster
+Rasterfiles=Rasterfiles
+realce=Ottimizzazione
+realces=Ottimizzazione
+realmente_desea_guardar=Si vuole salvare realmente?
+realmente_desea_guardar_la_capa=Si vuole salvare realmente il layer?
+recargar=Ricarica
+Recortar=Ritaglia
+Recortar._Introduccion_de_datos=Ritaglia. Inserimento dati
+recorte=Ritaglio
+recorte_colas=Ritaglio degli estremi
+recorte_vista=Ritaglio della vista
+recta=Retta
+rectangle=Rettangolo
+rectangle_=RETTANGOLO
+rectangulo=Rettangolo
+recuento=Riconto
+Recuperar_leyenda=Recupera legenda
+Recuperar_y_eliminar_otros_zoom=Recupera ed elimina gli altri zoom
+Recursos\ Disponibles=Risorse disponibili
+redo=Ripeti
+redo_error=Errore nell'accedere ai drivers per ripetere un comando
+reference=Riferimento
+reference_system=Sistema di riferimento
+refrescar=Aggiorna
+refresh_capabilities=Aggiorna cache
+refresh_capabilities_tooltip=Marcare la casella per sovrascrivere i dati precedenti.
+registros=Registri
+registros_seleccionados_total=Totale registri selezionati
+rehacer=Ripeti
+rellenar_marco_vista=Riempi il bordo della vista
+relleno=Riempi\:
+remove=Rimuovi
+remove_all=Rimuovi tutto
+remove_column=
+remove_elements=Rimuovi elementi
+remove_fields=Rimuovi campi
+remove_geometry=Rimuovi geometria
+remove_row=Rimuovi riga
+remove_rows=Rimuovi righe
+rename_field=Rinomina campo
+renombrar=Rinomina
+Reproyeccion._Introduccion_de_datos=Reproiezione. Inserimento dati.
+Reproyectar=Riproiezione
+reproyectar_aviso=La proiezione del Layer non s' la stessa della Vista.\nAVVISO\: Puo' essere incorretto in alcune trasformazioni.\nLeggere la documentazione.
+reproyectar_pregunta=Riproiettare?
+resolucion=Risoluzione
+resolucion_resultado=Qualit\u00e1 di stampa\:
+resolution=Risoluzione
+resourceLinkColumn=Collega
+resourceShowColumn=Ver
+resourceTypeColumn=Tipo
+respuesta_error_servidor=Non si \u00e9 potuto ottenere la copertura
+resto_valores=Resto dei valori
+restore=
+restore_defaults=Ripristina opzioni predefinite
+restore_palette=Ripristina layout di visualizzazione
+restrictArea=Restringere area di ricerca.
+results=Risultati
+resutsByPage=Risultati per pagina
+return=Torna
+rootName=Radice
+rotate=Ruota
+rotate_=RUOTA
+rotation_field=Campo di rotazione
+salir=Esci
+Salir=Esci
+salir_tooltip=Esci
+salvar=
+salvar_raster=Salva raster
+Sample=Esempio
+save_to_ascii=Esporta tabella dei punti in un file di testo.
+save_to_xml=Salva su file XLM (.grf)
+scale=Scala
+scale_=SCALA
+scale_limits=Limiti della scala
+scale_limits_status=Stato dei limiti della scala
+scaleAny=Qualunque
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=<5.000
+Se_superponen_a=Si sovrappongono a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Cancella i registri da
+se_van_a_guardar_=Saranno salvati,
+Sean_disjuntos_a=Sono diversi da
+Sean_iguales_a=Sono uguali a
+search_results=Risultati della ricerca
+searchButton=Cerca
+seleccion=Selezione
+seleccion_campos=Seleziona i campi
+seleccion_compleja=Selezione complessa
+seleccion_de_campos=Selezione dei campi
+seleccion_fuente=Seleziona carattere
+Seleccion_por_capa=Selezione per layer
+Seleccion_por_tema=Seleziona per layer
+selecciona_sistema_de_referencia=Seleziona sistema di riferimento
+seleccionar=Seleziona
+Seleccionar=Seleziona
+seleccionar_capas=Seleziona layers
+seleccionar_capas_raster=Seleziona layer raster
+seleccionar_coberturas=Seleziona coperture
+seleccionar_CRS=Seleziona CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Selezionare dai layers attivi gli elementi che\:
+Seleccionar_del_conjunto=Seleziona dall'insieme
+Seleccionar_Directorio=Percorso con layers...
+seleccionar_fichero=Seleziona file
+Seleccionar_fichero=Seleziona file
+seleccionar_formato=Seleziona formato
+seleccionar_parametros=Seleziona i parametri
+seleccionar_por_poligono=Seleziona con poligono
+seleccionar_por_punto=Seleziona con punto
+seleccionar_por_rectangulo=Seleziona con rettangolo
+seleccionar_puntos=
+seleccionar_srs=Selezionare SRS
+seleccionar_tiempo=Seleziona il tempo
+seleccionar_todos=Seleziona tutto
+seleccione_campo_enlace=Seleziona il campo da collegare
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore d'inclinazione per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di colore per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Selezionare il campo contenente il testo per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il font per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di dimensione del testo per la rappresentazione delle eichette</HTML>
+seleccione_fecha=Seleziona data
+seleccione_tabla=Seleziona la tabella
+seleccione_tabla_a_enlazar=Seleziona la tabella da collegare
+seleccione_tabla_origen=Seleziona la tabella di origine della unione
+select=Seleziona
+select_all=Seleziona tutto
+select_driver=Seleziona driver
+select_features=Seleziona i layers
+select_fields=Seleziona i campi del layer
+select_formats=Seleziona formati
+select_from_point=Seleziona a partire da un punto
+select_geom_field=Seleziona il campo geometrico
+select_geometry=Seleziona una geometria
+select_geometry_to_extend=Seleziona geometria da estendere
+select_geometry_type=Seleziona il tipo di geometria
+select_handlers=Seleziona handlers
+select_layers=Seleziona Layers
+select_none=Togli tutto
+select_other_geometry_or_end=Seleziona altre geometrie o termina [E]
+select_unique_field=Seleziona campo unico
+selectBandaRefinado=Selettore Bande Pancromatica
+Selected=Selezionato
+selected_dimensions=Dimensioni selezionate
+selected_from_list=Seleziona dalla lista
+selected_layer=Layer selezionato
+selected_layers=Layers selezionati
+selected_parameters=Parametri selezionati
+selected_themes=Temi selezionati
+selectfromview=Seleziona un punto dalla vista
+selection=Seleziona
+selection_=SELEZIONA
+selection_color=Seleziona colore
+selection_up=Sposta selezione in alto
+separator=Separatore
+server=Server
+server_abstract=Sommario del Server
+server_cant_render_layers=Il server non \u00e9 in grado di rappresentare i layers contemporaneamente.\nSepararli in diverse viste per ciascun Layer.
+server_doesnt_support_selected_image_format=Il server non supporta il formato dell'immagine selezionata
+server_has_no_services=Il server non offre servizi
+server_provides_no_srs__scale_data_may_be_wrong=Il server non supporta alcun sistema di coordinate. Le informazioni di scala possono non essere corrette.
+server_timeout=Tempo massimo di attesa di risposta WMS terminato
+server_title=Nome del Server
+server_type=Tipo di Server
+server_version=Versione del Server
+serverReply=Risposta del Server
+serverURL=URL di collegamento al Server di catalogo
+serverURLCat=URL di collegamento al Server di nomenclatura
+service=Servizio
+service_does_not_exist=Servizio non disponibile
+service_info=Informazione del servizio
+service_name=Nome del servizio
+service_type=Tipo del servizio
+service_type_not_supported=Tipo di servizio non supportato
+servidor=Server
+Servidor=Server
+servidor_wcs_no_responde=Il server selezionato non risponde
+set=Stabilisci
+settings=Impostazioni
+settings_editor=Editor di impostazioni
+shape_seleccion=Esporta quanto selezionato
+Shapefile=Shapefile
+Shapefiles=Shapefiles
+show_grid=
+show_layer_ids=Mostra ID dei layers
+show_layer_names=Mostra i nomi dei layers
+show_this_dialog_next_startup=Mostra questa finestra al prossimo avvio
+shp=SHP
+shp_files=SHP files
+si=si
+siempre=Sempre
+siguiente=Successivo
+Siguiente=Successivo
+simbolo=Simbolo
+Simbolo=Simbolo
+Simbolo_unico=Simbolo unico
+Simbolo_Unico=Simbolo unico
+Simbologia=Simbologia
+simple=Semplice
+simplificar=Semplifica
+simplificar_leyenda=Semplifica legenda
+simplify=Semplifica
+sin_realce=Senza rilievo
+sin_titulo=Senza titolo
+sincronizar_color_borde_relleno=Sincronizza il colore del bordo pieno\:
+single_value=Valore unico
+size=Dimensione
+Size=Dimensiona
+sobre_la_barra=Sopra la barra
+Sobreescribir_fichero=Sovrascrivi file
+Sobreescribir_fichero_Pregunta_1=Il fiel selezionato esiste gi\u00e0
+Sobreescribir_fichero_Pregunta_2=Sovrascriverlo?
+Solo_disolver_adyacentes=Dissolvi solo adiacenti
+Solo_para_capas_vectoriales=Solo per layers vettoriali
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specificare la dimensione minima delle linee che formeranno le curve.
+splain=
+SplashWindow.Iniciando=Iniziando...
+square=Angolo
+srs=Srs
+start_edition=Inizia Editing
+state_or_province=Stato/Provincia
+statistics=Statistica
+status=Stato
+StatusBar.Aplicacion_iniciada=Applicazione iniziata
+stop_edition=Termina Editing
+stretch=Stira
+stretch_=STIRA
+style=Stile
+Style=Stile
+Subir_capa=Layer s\u00fa
+Sum=Somma
+suma=Somma
+Superior=Superiore
+suprimir_objetos_origen=Rimuovere gli oggetti di origine? Si [Y], No  [N]
+symmetry=Simmetria
+symmetry_=SIMMETRIA
+S\u00edmbolo=Simbolo
+Tabla=Tabella
+Tabla_de_Atributos=Tabella degli attributi
+Tabla_de_prueba=Tabella di prova
+tablas=Tabelle
+Tablas=Tabelle
+table=Tabella
+tag=Tag
+tamano=Dimensione\:
+tamano_metros=Dimensione in metri
+tamano_pagina=Dimensione della pagina
+tamano_posicion=Dimensione e posizione
+tamanyo_borde=Dimensione del margine
+tamanyo_fuente=Dimensione del font
+tamanyo_pagina=Dimensioni della pagina
+tamPixX=Dimensione pixel X
+tamPixY=Dimensione pixel Y
+tarea_en_progreso=Lavoro in progresso
+telephone=Telefono
+Tema=Layer
+terminar=Termina
+Terminar=Termina
+terminar_edicion=Termina Editing
+terminate=Termina
+test_now=Prova ora
+texto=Testo
+the_scale=Scala
+theme=
+this_layer_is_not_self_editable=Questo layer non possiede permessi di scrittura. Sar\u00e0 possibile esportare i dati modificati, ma non nello stesso layer.
+this_layer_was_already_added=Questo layer \u00e8 gi\u00e0 stato aggiunto
+this_table_is_not_self_editable=Tabella non modificabile
+Tiempo=Tempo
+Tile=Titolo
+tile_tooltip=Organizza le finestre a mosaico
+time=Tempo
+timeout=Timeout
+tipo_dato=Tipo di Dato
+tipo_de_intervalo=Tipo intervallo
+Tipo_de_intervalos=Tipo di intervallo
+tipo_de_leyenda=Tipo legenda
+Tipo_de_leyenda=Tipo di leggenda
+Tipo_de_linea=Tipo di linea
+tipo_fichero_proyecto=tipo di file di progetto(*.gvsproj)
+tipo_leyenda=Tipo di leggenda (*.GVL)
+tipo_linea=Tipo di linea\:
+Tipo_no_reconocido=Tipo non riconosciuto
+tipo_relleno=Tipo di riempimento\:
+tipo_simbolo=Tipo di simbolo\:
+tipos_de_documentos=Tipo di documento
+title=Titolo
+titulo=Gestore di progetto
+titulo_confirmar=Conferma titolo
+titulo_consola=Console di informazione
+titulo_fframetext=Titolo del campo di testo
+to=A\:
+to_annotation=Trasforma in layer annotazioni
+to_palette=Modifica layout visualizzazione
+toda_la_tabla=Tutta la tabella
+todos=Tutti
+tolerancia_incorrecta=Tolleranza errata
+tooltip_copiar_al_portapapeles=Copia nella clipboard
+tooltip_cortar_al_portapapeles=Taglia nella clipboard
+tooltip_pegar_desde_el_portapapeles=Incolla dalla clipboard
+Toquen=Toccano
+total=Totale
+transparencia=Transparenza
+Transparencia=Transparenza
+transparencia_pixel=Trasparenza per pixel
+Triangulo=Triangolo
+trim=
+two_or_more_fields_with_the_same_name=Due o pi\u00f9 campi con lo stesso nome
+type=Tipo
+ultimo=Ultimo
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Devi selezionare un layer
+Unable_to_find_icon=Impossibile trovare icona
+unable_to_findout_server_version=Impossibile determinare la versione del server
+undo=Annulla
+undo_error=
+ungroup=Separa
+unidades=Unit\u00e1\:
+Unidades=Unita'
+Union=Unione
+Union._Introduccion_de_datos=Unione. Inserimento dati
+unite_separate=
+units=Unit\u00e0
+unknown=Sconosciuto
+unknown_response_format=Formato di risposta sconosciuto
+unsupported_crs=CRS non supportato
+unsupported_map_context_version=Versione di Web Map Context non supportata
+unsupported_version=Versione non supportata
+untitled=Senza titolo
+update_catalog=Aggiorna la lista dei servizi
+upperCoordinates=Superiori
+url=url
+Usar_indice_espacial=Usa indice spaziale
+Usar_los_campos_de_la_capa=Usa i campi del layer
+usar_marco=Usa margine
+usar_rango=Usa un rango
+Usar_solamente_los_elementos_seleccionados=Usa solo gli elementi selezionati
+usar_titulo=Usa titolo
+use_custom_size=Dimensione personalizzata
+use_full_extent=Usa estensione totale
+use_interpolation_method=Usa metodo di interpolazione
+use_view_size=Dimensione della vista
+username=
+usuario=Utente
+utilizar_margenes_impresora=Utilizza i margini della stampante.
+vacia=Vuota
+valor=Valore
+Valor=Valore
+Valor_azul=Valore blu
+Valor_Bandas=Valori bande
+valor_pixel=Valore pixel
+Valor_rojo=Valore rosso
+Valor_verde=Valore verde
+Valores=Valori
+Valores_unicos=Valori unici
+Valores_Unicos=Valori singoli
+value=Valore
+value_not_found=Valore non trovato
+varianza=Varianza
+vector_type=Tipo vettoriale
+vectorial=Vettoriale
+ventana=Finestra
+Ventana=Finestra
+ventana_proyecto=Finestra di progetto
+Ver=Mostra
+ver_tabla_atributos=Mostra tabella degli attributi
+ver_tags=Mostra tags
+ver_tooltip=Mostra la finestra di progetto
+version=Versione
+version_conflict=Conflitto di versione
+vertical=Verticale
+vertical_space=Spazio verticale
+vertices=
+view=Vista
+visible=Visibile
+visibles=Visibili
+Vista=Vista
+vistas=Viste
+visualizacion=Visualizza
+Visualizacion=Visualizza
+visualizar_cuadricula=Visualizza maglia
+warning=Attenzione
+warnings=Avvisi
+wcs_cant_connect=Impossibile connettersi al WCS
+wcs_properties=Propriet\u00e1 WCS
+WCS_properties=Propriet\u00e1 WCS
+wcs_server_error=Errore nel server WCS
+wcs_server_timeout=WCS Server timeout
+wcsColumn=FEATURE
+wcsError=Errore nel caricare la copertura
+wcsLoad=Caricamento di WCS
+web_map_context=Web Map Context
+web_map_context_settings=Propriet\u00e0 Web Map Context
+wfs_properties=Propriet\u00e0 WFS
+wfs_server_error=Errore col server WFS
+wfsColumn=FEATURE
+wfsError=Errore nel caricare la FEATURE
+WFSLayer=Layer WFS
+wfsLoad=Caricamento di WFS
+width=Larghezza
+Window=Finestra
+WMS=WMS
+wms_cant_connect=Non \u00e9 stato possibile realizzare la connessione con il WMS
+wms_not_queryable=Il server non accetta query di questo tipo
+wms_properties=Propriet\u00e1 WMS
+wms_server_error=Errore del Server WMS
+wms_transparency=Transparenza
+wmsColumn=Mappa
+wmsError=Errore nel caricare la mappa
+WMSLayer=WMS layer
+wrong_url=URL errata
+xmax=X massima
+xmin=X minima
+xOffset=X Offset
+xrange=Intervallo X
+XYShift=Spostamento 2D\#Translations for language [it]
+XYShift._Introduccion_de_datos=Spostamento XY. Inserimento dati
+XYShift._Progress_Message=Applicazione dell'offset xy...
+y_en=e in
+Yardas=Yarde
+yes=Si
+YES=SI
+ymax=Y massima
+ymin=Y minima
+yOffset=Y Offset
+yrange=Intervallo Y
+zone=Fuso
+zoom=
+Zoom=Zoom
+Zoom_a_la_capa=Zoom al layer
+Zoom_Acercar=Zoom\: avvicina
+Zoom_al_Tema=
+Zoom_Alejar=Zoom\: allontana
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo della vista
+zoom_in_factor=Fattore di Zoom-in
+Zoom_Mas=Aumenta zoom
+zoom_mas_vista=
+Zoom_Mas_Vista=Aumenta zoom Vista
+Zoom_Menos=Disminuisci zoom
+Zoom_Menos_Vista=Disminuisci zoom vista
+zoom_out_factor=Fattore di Zoom-out
+Zoom_pixel=Zoom a la risoluzione del raster
+Zoom_previo=Zoom precedente
+Zoom_Previo=Zoom precedente
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom selezionato
+Zoom_sgte=Zoom successivo
+zooms=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_en.properties	(revision 42196)
@@ -0,0 +1,1911 @@
+#Translations for language: en
+#Wed Nov 08 12:55:49 CET 2006
+(escala_maxima)=(maximum scale)
+(escala_minima)=(minimum scale)
+_(Etiquetas_estandar)=(Standard labels)
+_(Intervalos)=(Intervals)
+_(Simbolo_unico)=(Unique symbols)
+_(Valores_unicos)=(Unique values)
+__valenciano=Valencian
+__espacio_vertical=Vertical spacing\:
+__lineas=lines
+__proyeccion_actual=Current projection\:
+__redimensionar_texto_escala=Resize the text to the view scale
+__seleccion_de_fuente=Font selection
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=New view
+abajo=Down
+abrir=Open
+Abrir=Choose
+Abrir_Geoproceso=Open Geoprocess
+Abrir_Imagen=Open image
+abrir_plantilla=Open template
+abrir_proyecto=Open project
+abrir_tooltip=Open an existing project
+Abrir_una_capa=Open layer
+abstract=Abstract
+accept=Accept
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+Accion_Predefinida=Predefined action
+aceptar=Accept
+Aceptar=Accept
+acerca_de=About...
+activa_la_ventana=Activate the window
+activar=Activate
+activar_regla=Activate ruler
+activo=Active
+activos=Active
+add=Add
+add_again_question=Add again?
+add_all=Add all
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_field=Add field
+add_layer=Add layer
+add_rows=Add rows
+add_vertex=Add vertex
+addlayer=Add layer
+addLayer=Add Layer
+address=Address
+address_type=Adress type
+adjust_grid=Adjust grid
+adjust_transparency=Set transparency
+advanced=Advanced
+advanced_settings=Advanced options
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+agrupar=Group
+agrupar_capas=Group layers
+agrupar_graficos=Group graphics
+agrupar_linea=Group graphic line with graphics
+Ajustar_cobertura_wcs=WCS coverage settings
+ajustar_rejilla=Adjust grid
+Ajustar_transparencia=Adjust transparency
+ajustes_linea_grafica=Graphic line settings
+Al_leer_la_leyenda=Reading legend
+alerta=Warning
+algoritmo=Algorithm
+alias=Alias
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+alineamiento=Alignment\:
+alinear=Align
+alinear_graficos=Align graphics
+allWords=Every word
+alta=High
+alto=Height
+altura=Height\:
+Altura_fija_de_texto=Fixed text height
+ambito=Scope
+ampl_extent=Change the extension of the image to georreference
+Anadir=Add
+Anadir_al_conjunto=Add to set
+Anadir_capa=Add layer
+Anadir_Capa=Add layer
+Anadir_capa_de_eventos=Add event layer
+anadir_tag=Add tag
+Anadir_tema_de_eventos=Add event layer
+anadir_titulo=Add title
+Anadir_todos=Add all
+Analisis=Analisis
+Analisis_Desc=Geoprocesses that make explicit information from data
+ancho=Width
+ancho_alto=Width x Height
+Ancho_Contorno=Outline width
+Ancho_de_linea=Line width
+anchura=Width\:
+angulo_rotacion=Angle of rotation\:
+anterior=Previous
+Anterior=Back
+anyResult=The search hasn't retrieve any result
+anyWord=Any word
+Aplicar=Apply
+apply=Apply
+Apply=Apply
+arc=Arc
+arc_=ARC
+Archivo=File
+Archivos_de_Disco=Disc files
+arcims_catalog_error=Error while retrieving ArcIMS catalog
+arcims_extent_error=Error while retrieving ArcIMS service extent
+arcims_image_resource=ArcIMS Image
+arcims_legend_error=Error processing legend
+arcims_load=Loading ArcIms
+arcims_no_features=No geometries found
+arcims_no_server=Not a valid ArcIMS server
+arcims_properties=ArcIMS properties
+arcims_remote_not_found=Remote file not found
+arcims_server_error=ArcIMS server error
+arcims_server_status_col_name=Status
+arcims_server_timeout=ArcIMS server's timeout
+arcims_server_type_col_name=Type
+arcims_vect_resource=ArcIMS Feature
+area=Area
+Area_de_influencia=Buffer
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Area_de_influencia_definida_por_una_distancia=Buffer defined by distance
+area_trabajo=Working area
+Areas_de_influencia=Buffer
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+array_error=Array length error
+arriba=Up
+ascending_order=Ascending order
+ascending_order_tooltip=Sort by selected field in ascending order
+asignar_coordenadas=Assing coordenates
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+aspect=Aspect setup
+Atributo=Attribute
+Atributos_Numericos=Numerical attributes
+attributeName=Name
+attributes=Attributes
+attributeType=Type
+automatico=Automatic
+available_layers=Available layers
+available_services=Available services
+aviso_sin_extent_de_referencia=To use this option you need to have one already added layer to use as reference
+Ayuda=Help
+back=Previous
+Back=Previous
+background_color=Background color
+baja=Low
+Bajar_capa=Move layer down
+bandas=Bands
+bands=Bands
+barra=Bar\:
+base=base
+base_datos=Data base
+bd=db
+Block_Size_=Block Size\:
+bmp=BMP files
+Bold=Bold
+borra_seleccion=Clear selection
+borrador=Draft
+borrar=Delete
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+box=box
+break=Break
+break_=Break
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+BRX=BRX\:
+BRY=BRY\:
+buffer=Buffer
+button.resolution.calculate=Calculate
+cajetin=Box
+calcular_errores=Calculate errors automatically
+Calcular_intervalos=Compute intervals
+calendarBackOneMonth=Back one month
+calendarBackOneYear=Back one year
+calendarForwardOneMonth=Forward one month
+calendarForwardOneYear=Forward one year
+calendarSelectDate=Select date
+calendarTitle=Calendar
+calidad=Quality
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+Cambio_Color=Change color
+Cambio_de_estilo=Change style
+Cambio_Estilo=Change style
+cambio_nombre=Rename
+Cambios_de_estilo=Style changes
+campo=Field
+Campo=Field
+campo_altura_texto=Text field heigth\:
+Campo_clasifica=Classification field
+Campo_de_clasificacion=Classification field
+campo_de_documentos_asociados=Associated documents field
+Campo_de_etiquetado=Labelling field
+Campo_para_disolver=Field to dissolve
+Campos=Fields
+cancel=Cancel
+Cancel=Cancel
+cancel_edition=Cancel edition
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar=Cancel
+Cancelar=Cancel
+cancelar_edicion=Cancel edition
+cancelSearchButton=Cancel
+cannotReproject=Unable to reproject this coordinate system
+cant_connect=Connection failed
+cant_connect_wfs=Cannot connect to WFS
+cant_reproject_from_any_of=Unable to reproject from any of
+cantLoad=The WFS layer can't be loaded
+capa=Layer
+Capa=Layer
+capa_exportada=Layer exported
+capa_importada=Imported layer. Do you want to create the spatial index?
+capas=Layers
+Capas=Layers
+Capas_del_directorio=Layers on directory
+Capas_del_localizador=Locator layers
+capas_edition_cache=Mark the layers to be used for snapping
+capaWMS=WMSLayer
+caracteres_erroneos=wrong characters
+cargar=Load
+cargar_fichero=Load file
+cargar_leyenda=Load legend
+cargar_sin_georef=Load without referencing
+cartografico=Cartographic
+Cascada=Cascade
+cascada_enable=There must be at least one visible window
+cascada_tooltip=Arrange windows in cascade
+catalog_search=Geodata search
+cathegory=Cathegory
+cathegoryAny=Any
+cathegoryBiota=Biota
+cathegoryBoundaries=Boundaries
+cathegoryClimatologyMeteorologyAtmosphere=Climatology meteorology and atmosphere
+cathegoryEconomy=Economy
+cathegoryElevation=Elevation
+cathegoryEnvironment=Environment
+cathegoryFarming=Farming
+cathegoryGeoscientificInformation=Geoscientific information
+cathegoryHealth=Health
+cathegoryImageryBaseMapsEarthCover=Imagery base maps earth cover
+cathegoryInlandWaters=Insland waters
+cathegoryIntelligenceMilitary=Intelligence military
+cathegoryLocation=Location
+cathegoryOceans=Oceans
+cathegoryPlanningCadastre=Planning cadastre
+cathegorySociety=Society
+cathegoryStructure=Structure
+cathegoryTransportation=Transportation
+cathegoryUtilitiesCommunication=Utilities and communication
+causa_error_desconocida=Unexpected server error
+centimeters=Centimeters
+Centimetros=Centimeters
+Centrar_la_Vista_sobre_un_punto=Center view to point
+centrar_punto=Center view in the selected point
+cerrar=Close
+Cerrar=Close
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_server=Change server
+change_service=Change service
+change_width=Change width
+choose_image_format=Choose image format
+chooseAttribute=Choose one attribute to do the search
+circle=Circle
+circle_=CIRCLE
+circulo=Circle
+Circulo=Circle
+circumscribed=Circumscribed
+city=City
+clave=Code
+Clean=Clean
+clear=Clear
+close=Close
+close_polyline=Close polyline
+Cobertura_de_datos=Data cover
+Cobertura_de_entrada=Input cover
+Cobertura_de_interseccion=Intersect cover
+Cobertura_de_recorte=Clip cover
+Cobertura_de_salida=Output cover
+Cobertura_para_unir=Union cover
+Coberturas=Coverages
+Coberturas_de_entrada=Input cover set
+coincidir_tamano=Match size\:
+coincidir_tamanyo=Match size
+colocar_a_margenes=Place with reference to margins.
+colocar_alrededor_seleccionados=Place around the graphics selected.
+colocar_alrededor_todos=Place around all the graphics.
+colocar_delante=Bring to front
+colocar_detras=Place back
+color=Color\:
+Color_Contorno=Color outline
+Color_de_la_Linea=Line color
+Color_de_Relleno=Fill color\:
+Color_final=End color\:
+Color_inicial=Initial color\:
+Color_inicio=Begin color
+color_texto=Text color\:
+column_not_found=Column not found
+com.iver.andami.messages.Messages=Messages
+comentarios=Comments
+comenzar_edicion=Start edition
+commands_stack=Command stack
+compleja=Complex
+complex_selection=Complex selection
+complex_selection_=COMPLEX SELECTION
+compress=Compression
+Compression_=Compression\:
+concordancia=Agreement
+conectar=Connect
+conection=Connection
+conexion_correcta=Correct connection
+configuracion_andami_tooltip=Andami configuration
+configurar=Configure
+Configurar=Configure
+configurar_ANDAMI=ANDAMI configuration dialog.
+configurar_localizador=Configure locator map
+Configurar_localizador=Configure locator ...
+configurar_todas_las_extensiones=Configure all the extensions
+confirm_gid=Confirm gid
+confirmacion=Confirm that...
+confirmar_borrar=The element will be removed. Are you sure?
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+connect=Connect
+connect_error=Error connecting
+connectButton=Connect
+connection_name=Connection name
+conservar_escala_visualizacion=Maintain viewing scale
+Consola=Console
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+consulta=Query
+contact_info=Contact info
+contact_organization=Organization
+contact_person=Name
+contact_position=Position
+Contengan=Contain
+contiene_espacios_en_blanco=It has white space
+contraste=Contrast
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+coor_geograficas=Geographic coordinates
+coord_system=Coordinate system
+coordenadas_vacias=Empty coordinates
+coordinates=Coordinates
+coordinatesContains=contain
+coordinatesEnclose=enclose
+coordinatesEqual=equal
+coordinatesFullyOutsideOf=is fully outside of
+copiar=Copy
+copy=Copy
+copy_=COPY
+cortar=Cut
+could_not_find_web_map_context_file=Could not find web map context file
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=Country
+coverage=Coverage
+covered_extension=Covered extension
+Crear_Buffer=Create Buffer...
+Crear_Indice=Spatial index creation...
+Crear_Indice_Intro=Spatial indexes could optimize spatial querys.
+Crear_Indice_Pregunta_1=Do you want to create an spatial index for layer
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Create worldfile
+created_with=Created with
+creation_date=Creation date
+credentials=Authentication
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+Crucen_con=Cross over
+Cruz=Cross
+Cuadrado=Square
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cuando_activo=When active
+current=Current
+current_scale=Current scale
+cut=Cut
+Dado_un_campo_de_atributos=Given a attribute field
+data=Data
+data_origin=Data source
+database=Database name
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de=of
+De=of
+de\ =of 
+de\ 0=of 0
+debe_estar_activada=must be activated
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+decimal_degrees=Decimal degrees
+default=Default
+default_name=WFS Layer
+default_projection=Default projection
+default_value=Default Value
+define_fields=Define fields
+define_point=Define point
+defined_by_user=User defined
+defined_by_view_extent=Defined by the view\u0092s extent
+dehacer=Undo
+del=Delete
+delete_field=Delete field
+deleted_feature=Deleted feature
+deleteText=Delete text
+densityfication=Flatness
+Dentro=inside de polygon
+Dentro_y_fuera=Inside and outside de polygon
+Derecha=Right
+Derecho=Right
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar=Ungroup
+desagrupar_capas=Ungroup layers
+desagrupar_graficos=Ungroup graphics
+descending_order=Descending order
+descending_order_tooltip=Sort by selected field in descending order
+desconectar=Disconnect
+descripcion=Description
+Descripcion=Description
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description=Description
+description_URL=Description URL
+desde=From
+desde_arriba=From top\:
+desde_izquierda=From left\:
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+Desplazamiento=Panning
+desviacion_tipica=Standard deviation
+detalles=Details
+Detalles=Details
+Devuelvo_el_foco_a_=Returns focus to
+DGNFiles=DGNFiles
+Diferencia=Difference
+Diferencia_Introduccion_de_datos=Difference. Fill in data
+dimension=Dimension
+dimensiones=Dimensions
+directorio=Directory
+directorio_extensiones=Extensions directory.
+disagregate_layers=Maintain layer structure
+Disolver=Dissolve
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Disolver_entidades=Dissolve entities
+distance_units=Measuring units
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir=Distributing\:
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+divisiones_izquierda=Divisions to the left
+documento=Document
+documentos_existentes=Existing documents
+downloadColumn=Download
+draw_text_only=Draw text only
+driver=Driver
+drivers=Drivers
+dxf=dxf
+dxf_files=DXF files
+Dxffiles=DXFFiles
+e-mail=E-mail
+edicion=Edition
+edit=Edit
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+edit_vertex_=EDIT VERTEX
+editable=Editable
+Editar_leyenda=Edit style
+editar_propiedades=Edit properties
+editar_vertices=Edit vertex
+Edition=Edition
+edition_properties=Edition Properties
+Edition_Properties=Edition Properties
+Ejecutando=comando\:\=Execute command\:
+Ejecutando\ comando\:\ =Execute command\:
+el_numero_maximo_de_intervalos_para_este_campo_es=The maximum number of intervals for this field is
+Elegir_Color=Select color
+Elegir_Fuente=Select font
+elemento_ya_existe=The element already exists
+Elementos_seleccionados_de_la_capa=Selected items of a layer
+Elija_una_herramienta_de_analisis=Choose an analisys tool
+Eliminar=Delete
+eliminar_capa=Delete layer
+eliminar_columna=Remove column
+eliminar_extremos=Remove edges
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+ellipse=Elipse
+ellipse_=ELLIPSE
+en=In
+en_el_mapa=In the layout\:
+en_language=English
+En_metros=In meters
+En_pixels=In pixels
+en_unidades=in units
+Encuadre=Zoom Manager
+Encuadre_Vista=View frame pan
+end=End
+end_polygon=End polygon
+endinfo=Finalization Statistics
+Enlace_espacial=Spatial join
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+enlace_vivo=Active link
+Enlazar_a_fichero_de_texto=Link to text files
+Enlazar_a_ficheros_de_imagen=Link to image files
+enter_layer_name=Enter layer name
+enter_new_layer_name=Enter new layer name
+enter_path_to_file=Enter file path
+envelope=Envelope
+equal_intervals=Equal intervals
+equidistance=Equidistance
+error=Error
+Error_abriendo_el_fichero=Error opening file
+Error_accediendo_a_los_datos=Error getting data
+Error_atributo_no_numerico=Not numeric buffer field
+error_capa_puntos=Error loading the layer. Maybe the Georreferencing layer is not active.
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_chequeando_precondiciones=Check preconditions error
+Error_chequeo_tipo_geometria=Error during checking geometry type
+error_comunicacion_servidor=An error connecting to server
+error_conexion=Error connecting to data base
+Error_distancia_buffer=You must enter a buffer distance
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+error_escritura=Can't write file
+Error_escritura_resultados=Data writing error
+Error_exportando_SLD=Error exporting SLD
+Error_fallo_geoproceso=Error during geoprocess execution
+error_file_exists=The file already exists. Do you want to overwrite?
+error_file_not_writable=Could not create output file.
+Error_guardando_la_leyenda=Error saving legend
+Error_guardando_la_plantilla=Error saving the template
+error_lectura=Can't read file
+Error_offset_no_numerico=Error. Invalid offset values.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_preparar_escritura_resultados=Error during preparation of result layer
+Error_proyecciones_iguales=Error. Source and target projections are equals.
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=Error choosing merge eschema
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Error_spjoinmn_sin_funcion=In a 1-N spatial join you must specify sumarization functions
+error_writting_file=Error writting file
+errores=Errors
+errores_csv=Include the errors in the CSV file.
+errorFENotSupported=gvSIG only supports the Filter Encoding Language to do Querys
+errorGetRecords=Error with the getRecords operation
+errorIsASRWServer=It is a SRW server\!
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+errorNotCSWSupportedProtocol=Server found, but it doesn't support the CSW protocol
+errorNotParsedReply=Error parsing the reply. The server has been found, but is possible it doesn't support the specified protocol
+errorNotSupportedCapabilities=GetCapabilities error. This error could has two reasons\: Either an error doing the operation has happened or the server doesn't support the specified protocol
+errorNotSupportedProtocol=The server doesn't support the specified protocol
+errorNotThesaurusSelected=The WFS protocol can't work if you dont select a thesaurus element
+errorServerException=Server exception returned
+errorServerNotFound=The server doesn't exist
+errorSOAPProtocol=SOAP error
+es_country=Spain
+es_language=Spanish
+escala=Scale
+Escala=Scale
+escala_desconocida=Unknown scale
+escala_maxima=Maximum scale
+Escala_Maxima=Maximum scale
+escala_minima=Minimum scale
+Escala_Minima=Minimum scale
+escala_usuario=Scale specified by the user
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Horizontal grid spacing
+espaciado_vertical=Vertical grid spacing
+espacio=Space\:
+espere=Please wait
+estadisticas=Statistics
+este_por_debajo_de_=To be under
+este_por_encima_de=To be over
+Esten_contenidos_en=Contained in
+Estilo=Style\:
+estilos=Styles
+Etiqueta=Label
+Etiquetado=Labelling
+Etiquetados=Labelling
+etiquetas=Lables\:
+Etiquetas_estandar=Standard labels
+exactSentence=Exact sentence
+examinar=Examine
+Examinar=Browse
+exploit=Exploit
+exploit_=EXPLOIT
+export=Export
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exportar=Export
+exportar_a=Export to...
+exportar_ascii=Export ASCII
+exportar_pdf=Export to pdf
+exportar_ps=Export to ps
+exporting_=Exporting
+exportJOP2Title=Export to JOP2T
+extend=Extend
+extend_=EXTEND
+extension=Extension
+extension_activada=Active extension.
+extensiones=Extensions
+Extent=Extent
+extents_no_coincidentes=Extent of the selected image does not match with the origin image.
+factor=Factor
+factor_zoom_incorrecto=Incorrect zoom factor.
+fallo_capas=Layer access error.  The following layers will be deleted from the proyect.
+fallo_crear_conexion=Connection failure
+fallo_crear_pool=Failed to create connection pool
+fallo_obtener_conexion_existente=Failed to get a created connection
+fallo_obtener_tablas=Failed to obtain tables from the data base
+fallo_realizar_consulta=Failed to create a query
+fallo_registrar_conexion=Failed to register a connection
+family=Family
+fax=Fax
+feature=Layers
+featureclass=Feature class
+features_desea_continuar=features, do you want to continue?
+featureserver=Features service
+feet=Feet
+fichero=file
+Fichero=File
+fichero_existe=Selected file already exists as layer band
+fichero_incorrecto=Invalid file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+Ficheros_de_cartografia=Layer files
+Ficheros_SHP=SHP Files
+field=Field
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+FieldDecimalCount=Decimal precision count
+FieldDefaultValue=Default value
+FieldLength=Length
+FieldName=Name
+fields=Fields
+FieldType=Type
+file=File
+file_exists=File exists. Do you want overwrite?
+file_name=File
+file_version=File version
+filter=Filter
+filterOnALayer=Filter on a layer
+filterOnAWFSLayer=Filter on a WFS layer
+filtro=Filter
+final_point=Final point
+finalizar=Finish
+finish=Finish
+fit_ArcIms_layer=ArcIMS layer settings
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+fit_WMS_layer=Config WMS Layer
+Flatness=Flatness
+Font=Font
+format=Format
+formato=Format
+Formato=Format
+Formato_de_numero_erroneo=Incorrect number format
+formato_de_numero_incorrecto=Incorrect number format
+formato_incorrecto=Invalid format
+formatos=Formats
+from=From
+fuente=Font
+Fuente=Font
+Fuera=Outside the polygon
+fuera_de_extent=The selected point is out of the image's extent
+Funciones_Sumarizacion=Group by functions
+gazetteer_connect=Finding by Gazetteer
+gazetteer_search=Finding by Gazetteer
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+gcps_exist=gcps exist
+general=General
+General=General
+Generar_Intervalos=Generate intervals
+Generate_Tfw_=Generate Tfw\:
+geometry=Geometry
+Geometry_types=Geometry types
+GeometryPropertyType=Geometry
+Geoprocesos=Geoprocesses
+georaster=Georeferencing
+georef=Georeference
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+georreferenciar=Georeference image
+gestion_encuadre=Zoom Manager
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+gml_validate_with_schema=Validate the document with the schema
+goto=Go to the place
+grado_polinomio=Polynom deegree
+grados=Degrees\:
+Grados=Degrees
+Graficos=Graphics
+Grid=Grid
+Grosor_de_linea=Line width
+grosor_linea=Line width\:
+group=Group
+group_graphic_line=Group graphic line
+group_layers=Group layers
+group_layers_option=Layer grouping option
+grupo=group
+GT2shp=GT2shp
+guardado=Saved in
+guardar=Save
+Guardar=Save
+guardar_cambios=Save changes?
+guardar_clave=Save code
+guardar_como=Save as...
+guardar_como_plantilla=Save as template
+Guardar_el_zoom_actual=Save current zoom
+guardar_leyenda=Save legend
+Guardar_leyenda=Save legend
+guardar_proyecto=Save project
+guardar_tooltip=Save changes to project
+Habilitar_etiquetado=Enable labelling
+hasta=to
+height=Height
+Herramientas=Tools
+Herramientas_de_analisis=Analisys Tools
+Herramientas_vista=View tools
+hide_grid=Hide grid
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+horizontal_space=Horizontal space
+host=Computer
+hostname=Hostname
+html_in_a_new_view=<HTML>Creates a new view into the project. The new view will contain all the layers defined in the file.</HTML>
+html_in_other_view=<HTML>Adds the layers to the selected view in the list.</HTML>
+html_in_the_current_view=<HTML>Adds the layers defined in the file to the current active view.</HTML>
+Icon_not_found_=Icon not found
+id=ID
+Identificar_Resultados=Identify results
+idioma=Language
+Igual_que_la_impresora=Same as printer
+igual_todos_lados=Equal displacement for all sides.
+image=Image
+imagen=Image
+Imagen=Image
+imagen_no_accesible=Unable to access the image
+imageserver=Raster service
+Implimir=Print
+import=Import
+import_from_ascii=Import table from a CSV (.csv) file.
+import_layer=Save layer in PostGIS
+import_map_context=Import maps from an OGC's Web Map Context file (.cml).
+importar=Import
+importar_extent=Import actual view extent
+Imprimir=Print
+in=in
+inches=Inches
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+Indexando=Indexing...
+Indexando_espacialmente=Spatially indexing the layer
+indexar_campos=Index fields
+Inferior=Lower
+info=Information
+info_format_not_supported=The format returned by WMS is not supported
+infobreak=It shows the elements of the layer using a range of colors.
+infodef=It shows all the elements of a layer using the same symbol.
+informacion=Information
+Informacion=Information
+infovalue=It shows elements of the layer using a symbol for each value.
+Inicializando=Initializing
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or [3P]
+insert_central_point_polygon=Insert central point of the polygon
+insert_column=Insert column
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor_or_reference=Insert scale factor |2| or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point_arc_or_close=Insert next point, Arc [A] or Close [C]
+insert_next_point_line_or_close=Insert next point, Line [N] or Close [C]
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon [E]
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner_or_square=Insert point of opposite corner or square [C]
+insert_point_move=Insert point for move
+insert_point_or_end=Insert point or End geometry [E]
+insert_point_selection=Insert selection point
+insert_point_selection_or_types=Insert point or Circle [IC], Out rect.[OR], Polyg.[IP], Intern. pol.[CP], Out pol.[OP], Intern. circle [CC], Out circle [OC]
+insert_radius=Insert radius [R]
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point_or_factor=Insert origin or Reference Line or Scale Factor [F]
+insert_rotation_angle=Insert rotation angle
+insert_row=Insert row
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar=Insert
+Insertar=Insert
+insertar_cajetin=Insert grid
+insertar_capa=Insert layer
+insertar_circulo=Insert circle
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_escala=Insert scale
+insertar_fila=Insert row
+insertar_imagen=Insert image
+insertar_leyenda=Insert legend
+insertar_linea=Insert line
+insertar_norte=Insert north
+insertar_poligono=Insert polygon
+insertar_polilinea=Insert polyline
+insertar_punto=Insert point
+insertar_recta=Insert straight line
+insertar_rectangulo=Insert rectangle
+insertar_texto=Insert text
+insertar_vista=Insert view
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inteligentSearch=Intelligent search
+inteligentSearchAscii=All word forms
+inter_arc=Internal arc
+inter_line=Internal line
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+Interseccion=Intersect
+Interseccion._Introduccion_de_datos=Intersect. Data input
+Intersecten_con=Intersected with
+interval=Interval
+intervalo=Interval
+Intervalo=Interval
+Intervalos=Intervals
+Intervalos_equidistantes=Equality intervals
+Intervalos_por_rupturas_naturales=Intervals by natural breaks.
+into_circle=Inscribed
+into_circle_or_circumscribed=Inscribed [I] o Circumscribed [C] in circle |C|
+intro_tablename=Type in the name of the table to create. WARNING\: If table exists, it will be deleted.
+introduce_nombre=Type the new name
+Introducir_valores_desplazamiento=Offset values
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_intervalo_deseado=Introduce desired interval
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=Invalid value for gap
+invert_selection=Invert selection
+is_required=is required
+Italic=Italic
+Izquierda=Left
+Izquierdo=Left
+join=Join
+join_=JOIN
+jpg=JPEG files
+Juntar=Merge
+Juntar._Introduccion_de_datos=Merge. Data input
+KeyMapping.Caracter_no_valido=Invalid character
+keywords=Keywords
+keyWords=KeyWords
+kilometros=Kilometers
+Kilometros=Kilometers
+language=Language
+Las_traducciones_no_pudieron_ser_cargadas=Translations couldn't be loaded
+last=Last
+lastUpdateDate=Last update
+latitud=Latitud
+Launcher.config_mal_formado=. Malformed 'config.xml'
+Launcher.config_no_encontrado='config.xml' not found
+Launcher.Dependencia_no_resuelta_en_plugin=Unsatisfied plugin dependency
+Launcher.Dos_skin_extension=Two skin-extension.
+Launcher.Error_con_las_librerias_del_plugin=Plugin library error
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+Launcher.Error_instanciando_la_extension=Cannot instantiate extension
+Launcher.Error_localizando_la_clase_de_la_extension=Cannot locate extension class
+Launcher.Hay_dependencias_circulares=Plugin dependencies involved in circle
+Launcher.Ignorando_el_directorio=Ignoring the directory
+Launcher.labelset_class=Cannot find label set class (labelset)
+Launcher.look_and_feel=Cannot set system 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Cannot find extension class
+Launcher.No_se_encontro_la_clase_mdi_manager=Cannot find mdi manager class
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Cannot access mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Cannot save Andami configuration
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Cannot instantiate mdi manager
+Launcher.No_se_puede_acceder_a=Cannot access to
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Cannot save plugins configuration
+Launcher.Two_extensions_with_the_same_priority=Two extensions with the same priority. Only will load one.
+Launcher.Two_menus_with_the_same_position=Two menus with the same position. Only will load one.
+layer=Layer
+Layer=Layer
+layer_abstract=Abstract
+layer_name=Layer name
+layer_not_queriable=Layer is not queriable
+layer_not_queryable=does not accept this kind of query
+layer_scale_status=Layer scale status
+layer_title=Layer title
+layer_was_already_added=Layer was already added
+layerName=Layer name
+LayerName=Layer name
+layers=Layers
+layers_in_other_view=Layers in other view
+layers_in_the_current_view=Layers in the current view
+layerType=Geometry type
+legend=Legend
+length=Length
+length_of_field=Length of field
+leyenda=Legend
+Leyenda=Legend
+leyenda_campo_unido=You are using a field of the union either in the legend or in the labelling. Please, change the legend before removing the union.
+Leyenda_Por_Defecto=Default legend
+line=Line
+line_=LINE
+line_type=Line type
+linea=Line
+Linea=Line
+linea_grafica=Graphic line
+lineal_directo=Direct linear
+linf_der=lower right X
+link=Link
+Link=Link
+linkColumn=Web Site
+linkError=Link loading error
+linkLoad=Web service load
+load_from_xml=Load from XML file (.rmf)
+loadWMS=WMS load
+localizador=Locator
+Localizador_por_atributo=Locate by attribute
+localize=Localize
+location=Location
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=Exit
+login_invalid_user=Invalid user
+login_name=Name
+login_ok=ok
+login_password=Password
+logo_URL=Logo URL
+longitud=Length
+lowerCoordinates=Lower
+lppp=ppi
+lsup_izq=Upper left X
+m/pixel=metros/pixel
+malla_activada=Active grid
+manage_fields=Manage fields
+mantainold=Remove old searches
+mantener_intervalo=Keep interval
+map_context_file_error=Web Map Context file error
+map_extent=Extent
+map_size_in_pixels=Map size (pixels)
+map_units=Map units
+mapa=Map
+Mapa=Map
+mapas=Maps
+marco=Frame
+marco_vista=Framework of the view
+margenes=Margins\:
+Mas_100=The number of values is higher than 100, and does not provide information
+mas_de_100_simbolos=More than 100 symbols usually do not give any information in a map
+max_features=Max. features
+max_length_is=Max length is
+max_no_of_pixels=Max. number of pixels
+max_scale=Max. scale
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+maximo=Maximum
+Maximo=Maximum
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=User error
+MDIFrame.quiere_salir=Exit gvSIG?
+MDIFrame.salir=Exit
+MDIManagerFactory.No_skin_extension_in_the_plugins=No skin extension in the plugins
+media=Mean
+Media=Average
+medir_area=Measure area
+medir_distancias=Measure distances
+Mensaje_buffer=Computing buffers
+Mensaje_clip=Clip geoprocess...
+Mensaje_convexhull=Convex hull geoproces
+Mensaje_difference=Difference geoprocess...
+Mensaje_dissolve=Dissolve geoprocess....
+Mensaje_enlace_espacial=Spatial Join geoprocess...
+Mensaje_interseccion=Intersection geoprocess...
+Mensaje_juntar=Merge geoprocess...
+Mensaje_primera_pasada_union=Computing intersections...
+Mensaje_procesando_buffer=Processing buffers
+Mensaje_procesando_buffer2=Dissolving buffers...
+Mensaje_procesando_clip_primero=Computing clip polygon...
+Mensaje_procesando_clip_segundo=Clipping geometries...
+Mensaje_procesando_convexhull=Computing convex hull...
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_dissolves=Dissolving geometries...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_procesando_interseccion=Computing intersections...
+Mensaje_procesando_juntar=Merging geometries...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+Mensaje_union=Union geoprocess...
+Messages._no_se_encontro_la_traduccion_para=Cannot find translation for
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+metadata_catalog=Geodata Search - Connection
+metadata_tree=Metadata Tree
+metadatos=Metadatos
+meters=Meters
+metros=Meters
+Metros=Meters
+Milimetros=Milimeters
+Millas=Miles
+min_scale=Min. scale
+minimo=Minimum
+Minimo=Minimum
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+minx=min.x
+miny=min.y
+modificar=modify
+modification_date=Modification date
+modify=Modify
+mosaico_tooltip=Mosaic tooltip
+Mostrar_Contorno=Show outline
+mostrar_descripcion=Show description
+mostrar_escala_numerica=Show numeric scale.
+mostrar_puntos=Show numbers
+mostrar_rejilla=Show grid
+Mostrar_siempre=To show always
+mostrar_unidades=Show units
+move=Move
+move_=MOVE
+move_elements=Move elements
+Move_from_view=Move points from view
+move_handlers=Move handlers
+move_layer_down=Move down
+move_layer_up=Move up
+Mover_geo=Move georeferenced image.
+msg_save_raster=The operation will be canceled. Would you like to continue?
+mtspixel=Mts/pixel
+muestra=Sample
+Muestra_atributos=Show attributes of selected layers.
+muestra_consola_tooltip=Shows the console
+Muestra_los_atributos_de_las_capas_seleccionadas=Show selected layers attributes
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Show the layers features using a each unique value symbol
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Show the layers features using a range of color according to values of a attribute field
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Show all the items of a layer using the same symbol
+multi_type=Multiple type
+MultiLineStringPropertyType=Multiline
+multiple_value=Multiple value
+multiples_intervalos=Multiple Intervals
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+MultiPointPropertyType=Multipoint
+MultiPolygonPropertyType=Multipoligon
+must_specify_a_file=You must specify a target file.
+name=Name
+natural_intervals=Natural intervals
+navegacion=Navigation
+navegacion_vista=Navegation in a view
+nearest_point=Nearest point
+necesita_un_tema_activo=Needs an active theme
+necesita_un_tema_vectorial_activo=Needs an active vectorial theme
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+New=Field\=New Field
+new_dxf=New DXF
+new_field=New field
+new_field_properties=New field properties
+new_layer=New layer
+new_layer_name=New layer's name
+new_postgis=New PostGIS
+new_shp=Nuevo SHP
+next=Next
+Next=Next
+next_point_or_end=Next point or end
+next_previous_add_del_cancel=Point, Next vertex [S], Previous [A], Add [I] or Remove [E]
+ninguna_impresora_configurada=No printer set
+Nivel_de_transparencia=Transparency level
+no=No
+NO=NO
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=There is no list of favorite languages probably you forgot initialice the class
+no_activos=Not active
+no_adjust_grid=Don't adjust grid
+No_de_intervalos=Nr of intervals
+no_es_posible_aplicar_leyenda_vacia=It's imposible to apply empty legend.
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=There are not writer for this layer format or you don't have write permissions
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_hay_ninguna_capa_seleccionado=No layer has been selected
+no_layers_found=No available layers found
+No_mostrar=Do not show the layer when the scale
+No_mostrar_la_capa_cuando_la_escala=Don't show the layer when the scale
+no_puede_continuar=Can't continue
+No_reconocido=Not recognized
+No_se_encontro_la_traduccion_para=Cannot find translation for
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+No_Shape=This Layer is not Shape type
+No_usar_buffer_redondeado=Rectangle end cap
+no_visibles=Not visible
+nombre=Name
+Nombre=Name
+nombre_capa=Name of the layer
+nombre_cobertura=Coverage's name
+nombre_feature=Name of the feature
+nombre_no_valido=Invalid name
+Nombre_que_se_le_dara_al_zoom=Name for the zoom
+nombre_sesion=Session name
+Nombres=Names
+none=none
+none_selected=None selected
+normal=Normal
+north=North
+not_available=Not available
+not_visible=Not visible
+Nueva_tabla=New table
+nuevo=New
+Nuevo_conjunto=New set
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+nuevo_proyecto=New project
+nuevo_tamano_fuente=New size of font\:
+nuevo_tooltip=Create a new project
+num_bandas=Band count
+num_columnas=Number of columns
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=not enough
+Numero_anillos_concentricos=Number of radial buffers
+Numero_de_elementos_seleccionados=Number of selected features
+Numero_de_segmentos_por_cuadrante=Number of segments for a quadrant
+numero_decimales_mostrar=Number of decimals
+numero_incorrecto=Invalid value
+N\u00fam_intervalos=Number of Intervals
+Obtener_mas_proximo=Use nearest geometry
+of=of
+offline=Disconnected
+ogc_mapcontext_file=OGC Web Map Context
+ok=Ok
+Ok=Ok
+online=Connected
+onSharpening=Activate pansharpening
+opacidad=Opacity
+opciones=Options
+open_first_time=Open with the view
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+Operacion_de_overlay=Overlay operation
+Operaciones_adicionales=Additional operations
+optinos.network.click_to_test_connection=Press button to test the connection
+options=Options
+options.configuration.screen=Configuration screen
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Folders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.layout.paper_properties.landscaped=Lands scaped
+options.layout.paper_properties.paper_direction=Paper direction
+options.layout.paper_properties.portrait=Portrait
+options.layout.paper_properties.title=Properties
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=Default map overview back color
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=Default view back color
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+orientacion=Orientation\:
+origen_de_datos=Data origin
+Origen_de_datos=Data origin
+Origen_de_Datos=Data origin\:
+Otros=Other
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+owner=Owner
+page=Page
+paint=Draw result
+parameters=Parameters
+parametros=Parameters
+Parametros=Parameters
+parte1=Part 1
+parte2=Part 2
+password=Password
+paste=Paste
+paste_elements=Paste elements
+path=Path
+pdf=Pdf
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+Perimetro=Perimeter
+period=Period
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Allows to set label of the map elements with the value of a particular field
+Personalizado=Custom
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+Pies=Feet
+pila_de_comandos=commands stack
+pixel_point=Pixel point
+pixeles=pixels
+pixels=pixels
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+plegar_despl=Advanced
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Two classes with the same name
+PluginClassLoader.Error_reading_file=IO error\:
+pluginNotFound=You don't have any extensions to load this type of resources
+pluginNotFoundTitle=Loading Layers
+PluginServices.Bug=en el c\u00f3digo\=Application bug
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Bug_en_el_codigo=Bug
+PluginServices.Error=grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n\=Application error. It's strongly recommended to close the application.
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicacion=Critical error. You better save and exit
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Fatal error
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Cannot find resource bundle
+PluginServices.No_se_encontro_la_traduccion_para=Cannot find translation for
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Cannot set hour glass
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Cannot restore cursor
+PluginServices.Procesando=Processing...
+png=PNG files
+point=Point
+point_=POINT
+point_type=Point type
+PointPropertyType=Point
+poligono=Polygon
+polilinea=polyline
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Polygon type
+polyline=Polyline
+polyline_=POLYLINE
+poner_capas_a=Set layers as
+poner_temas_a=Set layers as
+por_debajo_de=below\:
+por_encima_de=above\:
+Por_favor_active_el_tema=Please activate the layer
+Por_favor_active_la_capa=Please, activate the layer
+posicion_linea=Position of the line
+postcode=Postcode
+postgis=PostGIS
+postgisColumn=Postgis
+postgisError=Database loading error
+postgisLoad=Postgis load
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferences=Preferences...
+Preferences=Preferences
+preferences.foldering.data_folder=Geographic data folder
+preferences.foldering.template_folder=Template folder
+preferences.foldering.title=Folder
+preferencias=Preferences
+Preferencias=Preferences
+preparar_pagina=Prepare page
+Preparar_pagina=Prepare page
+presentacion=Presentation
+previous=Previous
+previsualizacion=Preview
+Previsualizacion=Preview
+Previsualizacion_de_simbolo=Symbol preview
+primero=First
+prioridad=Priority
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+projection=Projection
+properties=Properties
+property=Property
+propiedad=Oroperty
+propiedades=Properties
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+Propiedades_de_la_Capa=Properties of the layer
+propiedades_del_tema=Layer properties
+Propiedades_del_Tema=Layer properties
+Propiedades_escala_grafica=Properties of the scale bar
+propiedades_grafico=Graphic properties
+propiedades_mapa=Map properties
+propiedades_marco_imagenes=Properties of Image framework
+propiedades_marco_leyenda=Properties of legend framework
+propiedades_marco_vista=Properties of view framework
+propiedades_raster=Raster properties
+propiedades_sesion=Session properties
+propiedades_tabla=Table properties
+propiedades_tema=Layer properties
+Propiedades_texto=Properties of text
+propiedades_vista=View properties
+props=Properties
+protocolsGroup=Protocols
+provider=Provider
+Proximidad=Proximity
+Proximidad_Desc=Geoprocesses that make proximity analisis.
+Proyeccion_Actual=Source projection
+Proyeccion_Destino=Target projection
+Proyecciones=Projections
+prueba_conexion=Connection test
+ps=Ps
+puerto=Port
+Pulgadas=Inches
+punto=Point
+puntos=Points
+purpose=Purpose
+pwd=Password
+quantile_intervals=Quantile interval
+quiere_continuar=Would you like to continue?
+quitar=Remove
+Quitar=Remove
+Quitar_capa=Remove layer
+quitar_enlaces=Remove links
+Quitar_todos=Remove all
+Quitar_Todos=Remove all
+quitar_uniones=Remove joins
+rango_de_escalas=Scale range
+Rango_de_escalas=Rank of scales
+raster=Raster
+raster_layer=Raster layer
+Rasterfiles=Rasterfiles
+realce=Enhance
+realces=Enhancement
+realmente_desea_guardar=Would you really like to save?
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+Recortar=Clip
+Recortar._Introduccion_de_datos=Clip. Data input
+recorte=Clipping
+recorte_colas=Tail trimming
+recorte_vista=Cut to view
+recta=Straight line
+rectangle=Rectangle
+rectangle_=RECTANGLE
+rectangulo=Rectangle
+recuento=Recount
+Recuperar_leyenda=Load legend
+Recuperar_y_eliminar_otros_zoom=Recover and delete other zoom
+Recursos=Disponibles\=Available Resources
+Recursos\ Disponibles=Available Resources
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+reference_system=Reference System
+refrescar=Refresh
+refresh_capabilities=Refresh cache
+refresh_capabilities_tooltip=Mark this check to override local data
+registros=Records
+registros_seleccionados_total=Total of selected records
+rehacer=Redo
+rellenar_marco_vista=Fill view framework
+relleno=Fill\:
+remove=Remove
+remove_all=Remove all
+remove_column=Remove column
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+renombrar=Rename
+repeated_layer_was_not_added=Repeated layer was not added
+Reproyeccion._Introduccion_de_datos=Reproject. Data input.
+Reproyectar=Reproject
+reproyectar_aviso=The layer projection is not the same as the views projection.\nATENTION\: It can be unaccurate with some transformations.\nPlease read docs
+reproyectar_pregunta=Do you want to reproject?
+resolucion=Resolution
+resolucion_resultado=Resolution of the result\:
+resolution=Resolution
+resourceLinkColumn=Link
+resourceShowColumn=Show
+resourceTypeColumn=Type
+respuesta_error_servidor=Cannot get the coverage
+resto_valores=Other values
+restore=Restore
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+restrictArea=Restrict search area
+results=Results
+resutsByPage=Results per page
+retry=Retry
+return=Return
+rootName=Root
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+salir=Exit
+Salir=Exit
+salir_tooltip=Exit
+salvar=Save
+salvar_raster=Save as raster
+Sample=Sample
+save_to_ascii=Export table of points into a text file.
+save_to_xml=Save to XML (.grf)
+scale=Scale
+scale_=SCALE
+scale_limits=Scale limits
+scale_limits_status=Scale limits status
+scaleAny=any
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=<5.000
+Scripting=Scripting
+Se_han_encontrado_capas_erroneas_en=Found wrong layers
+Se_superponen_a=Over
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... delete registers from
+se_van_a_guardar_=Will be saved,
+Sean_disjuntos_a=disjoint as
+Sean_iguales_a=same as
+search_results=Search results
+searchButton=Search
+seleccion=Selection
+seleccion_campos=Select fields
+seleccion_compleja=Complex selection
+seleccion_de_campos=Field selection
+seleccion_fuente=Font selection
+Seleccion_por_capa=Selection by Layer
+Seleccion_por_tema=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+Seleccionar=Select
+seleccionar_capas=Select Layers
+seleccionar_capas_raster=Select raster layers
+seleccionar_coberturas=Select Coverages
+seleccionar_CRS=Select CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Select items from active layers that are\:
+Seleccionar_del_conjunto=Select from set
+Seleccionar_Directorio=Path with layers...
+seleccionar_fichero=Select file
+Seleccionar_fichero=Select file
+seleccionar_formato=Select format
+seleccionar_parametros=Select parameters
+seleccionar_por_poligono=Select by polygon
+seleccionar_por_punto=Select by point
+seleccionar_por_rectangulo=Select by rectangle
+seleccionar_puntos=Select points
+seleccionar_srs=Select SRS
+seleccionar_tiempo=Select time position
+seleccionar_todos=Select all
+seleccione_campo_enlace=Select field to use for link
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+seleccione_fecha=Select date...
+seleccione_tabla=Table select
+seleccione_tabla_a_enlazar=Select table to link
+seleccione_tabla_origen=Select origin table of the join
+select=Select
+select_all=Select all
+select_area=Search area
+select_charset_for_writing=Select charset for writing
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_driver=Select driver
+select_features=Select the layer
+select_fields=Select the layer fields
+select_formats=Select formats
+select_from_point=Select from point
+select_geom_field=Select field with geometry
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_layers=Select raster layers
+select_none=Remove all
+select_other_geometry_or_end=Select other geometry or End[E]
+select_unique_field=Select unique field
+selectBandaRefinado=Pancromatic Band Selector
+Selected=Selected
+selected_dimensions=Selected dimensions
+selected_from_list=Selected from list
+selected_layer=Selected layer
+selected_layers=Selected layers
+selected_parameters=Selected parameters
+selected_themes=Selected themes
+selectfromview=Select a point from the view
+selection=Selection
+selection_=SELECTION
+selection_color=Color selection
+selection_up=Move selection to top
+separator=Separator
+server=Server
+server_abstract=Summary
+server_cant_render_layers=This WMS server can't render these layers together.\nTry making separate requests, one for each layer.
+server_doesnt_support_selected_image_format=Server does not support selected image format
+server_has_no_services=Server provides no services
+server_provides_no_srs__scale_data_may_be_wrong=Server provides no SRS. Scale information might be inaccurate
+server_timeout=WMS server time out
+server_title=Title
+server_type=Server Type
+server_version=Server version
+serverReply=Server Answer
+serverURL=Fill the catalog server address
+serverURLCat=Fill the gazetteer server address
+service=Service
+services=Services
+service_does_not_exist=Service not available
+service_info=Service information
+service_name=Service name
+service_type=Service type
+service_type_not_supported=Service type not supported by the client
+servicename_selection_mode=Service name selection mode
+servidor=Server
+Servidor=Server
+servidor_wcs_no_responde=No reply on selected server
+set=Set
+settings=Settings
+settings_editor=Settings editor
+shape_seleccion=Export selection.
+Shapefile=Shapefile
+Shapefiles=Shapefiles
+Show\ Errors=Show errors
+show_grid=Show grid
+show_layer_ids=Show layer IDs
+show_layer_names=Show layer names
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+shp_files=SHP files
+si=yes
+siempre=Always
+siguiente=Next
+Siguiente=Next
+simbolo=Symbol
+Simbolo=Symbol
+Simbolo_unico=Unique symbols
+Simbolo_Unico=Unique symbol
+Simbologia=Symbols
+simple=Simple
+simplificar=Simplify
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+sin_realce=No enhance
+sin_titulo=Untitled
+sincronizar_color_borde_relleno=Sincronize color of stroke and fill\:
+single_value=Single value
+size=Size
+Size=Size
+sobre_la_barra=On the scale bar
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Solo_disolver_adyacentes=Only dissolve adjacents.
+Solo_para_capas_vectoriales=Only for vector layers
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+splain=Splain
+SplashWindow.Iniciando=Starting...
+square=Corner
+srs=Srs
+start_edition=Start edition
+state_or_province=State/Province
+statistics=Statistics
+status=Status
+StatusBar.Aplicacion_iniciada=Application started
+stop_edition=Finish edition
+stretch=Stretch
+stretch_=STRETCH
+style=Style
+Style=Style
+Subir_capa=Move layer up
+Sum=Summatory
+suma=Sum
+Superior=Upper
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symbol_selector=Symbol selector
+symmetry=Symmetry
+symmetry_=SYMMETRY
+S\u00edmbolo=Symbol
+Tabla=Table
+Tabla_de_Atributos=Table of attributes
+Tabla_de_prueba=Test table
+tablas=Tables
+Tablas=Tables
+table=Table
+tag=tag
+tamano=Size\:
+tamano_metros=Size in meters
+tamano_pagina=Page Size
+tamano_posicion=size/position
+tamanyo_borde=Border size
+tamanyo_fuente=Font size
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tarea_en_progreso=Running process
+telephone=Telephone
+tema=Layer
+Tema=Layer
+terminar=Terminate
+Terminar=Finish
+terminar_edicion=Terminate edition
+terminate=Terminate
+test_measure=Measure
+test_now=Check now
+testJComboBoxItemsSeekerErrorMessage=Runtime error in component JComboBoxItemsSeeker
+testJComboBoxItemsSeekerErrorTitle=Error
+text_preview_text=Preview
+texto=Text
+the_length_of_the_line_above_is=The length of line above is
+the_scale=Scale
+theme=Layer
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_layer_was_already_added=This layer was already added
+this_table_is_not_self_editable=Table not editable
+Tiempo=Time
+Tile=Tile
+tile_tooltip=Arrange the windows in tile
+time=Time
+timeout=Timeout
+tipo_dato=Data type
+tipo_de_intervalo=Interval type
+Tipo_de_intervalos=Type of intervals
+tipo_de_leyenda=Type of legend
+Tipo_de_leyenda=Type of legend
+Tipo_de_linea=Line type
+tipo_fichero_proyecto=gvSIG project file(*.gvsproj)
+tipo_leyenda=Legend files (*.GVL)
+tipo_linea=Stroke\:
+Tipo_no_reconocido=Type not recognized
+tipo_relleno=Fill\:
+tipo_simbolo=Type of symbol\:
+tipos_de_documentos=Document types
+title=Title
+titulo=Project manager
+titulo_confirmar=Confirmation
+titulo_consola=Information console
+titulo_fframetext=Text field title
+to=To
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+toda_la_tabla=Entire table
+todos=All
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+tooltips_enabled=Tool tips enabled
+Topology=Topology
+Toquen=in contact with
+total=Total
+transparencia=Transparency
+Transparencia=Transparency
+transparencia_pixel=Transparency per pixel
+Triangulation=Triangulation
+Triangulo=Triangle
+trim=Trim
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+type=Type
+ultimo=Last
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Select at least one layer
+Unable_to_find_icon=Unable to find icon
+unable_to_findout_server_version=unable to find out server version
+unable_to_findout_service_type=Unable to find out service type
+undo=Undo
+undo_error=Error in command undo
+ungroup=Ungroup
+unidades=Units\: 
+Unidades=Units\: 
+Union=Union
+Union._Introduccion_de_datos=Union. Data input
+unite_separate=Unite/Separate
+units=Units
+unknown=Unknown
+unknown_response_format=Unkown response format
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+unsupported_version=Unsupported version
+untitled=Untitled
+update_catalog=Override services list
+upperCoordinates=Upper
+url=url
+us_country=United States
+usar_georeferenciacion_de_la_imagen=Use image georeferentiation
+Usar_indice_espacial=Use spatial index
+Usar_los_campos_de_la_capa=Use fields from cover
+usar_marco=Use frame
+usar_rango=Use a range
+Usar_solamente_los_elementos_seleccionados=Use selected features only
+usar_titulo=Use title
+Use=yathis tool to create a virtual layer to perform advanced labelling, based on an existing layer. It changes the selected tool\u0092s visualization by showing one of its<br> fields\u0092 values.</HTML>
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+username=User
+usuario=User
+utilizar_margenes_impresora=Use printer margins
+vacia=Empty
+valor=Value
+Valor=Value
+Valor_azul=Blue value
+Valor_Bandas=Band value
+valor_pixel=Pixel value
+Valor_rojo=Red value
+Valor_verde=Green value
+Valores=Values
+Valores_unicos=Unique values
+Valores_Unicos=Unique values
+value=Value
+value_not_found=Value not found
+varianza=Variance
+vector_layer=Vector layer
+vector_type=Vector type
+vectorial=Vector
+ventana=Window
+Ventana=Window
+ventana_proyecto=Project window
+Ver=Show
+ver_error_capa=Show errors
+ver_tabla_atributos=See table of attributes
+ver_tags=Show tags
+ver_tooltip=Show project window
+version=Version
+version_conflict=Version conflict
+vertical=Vertical
+vertical_space=Vertical space
+vertices=vertex
+view=View
+visible=Visible
+visibles=Visible
+Vista=View
+vistas=Views
+visualizacion=Viewing
+Visualizacion=Visualization
+visualizar_cuadricula=Visualize grid
+warning=Warning
+warning_title=Warning
+warnings=Warnings
+wcs_cant_connect=Can\u0092t connect to WCS
+wcs_properties=WCS properties
+WCS_properties=WCS Properties
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+wcsColumn=Coverage
+wcsError=Cover loading error
+wcsLoad=WCS load
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=Wfs server error
+wfsColumn=Feature
+wfsError=feature loading error
+WFSLayer=WFS Layer
+wfsLoad=WFS load
+where=this information was implicit.
+where_clause=Where clause
+width=Width
+will_be_truncated=Will be truncated
+Window=Window
+WMS=WMS
+wms_cant_connect=Cannot connect to WMS
+wms_not_queryable=This server is not queryable
+wms_properties=WMS Properties
+wms_server_error=WMS Server error
+wms_transparency=Transparency
+wmsColumn=Map
+wmsError=Map loading error
+WMSLayer=WMS Layer
+wrong_url=Wrong Url
+xmax=Maximum X
+xmin=Minimum X
+xOffset=X Offset
+xrange=X range
+XYShift=XY Shift
+XYShift._Introduccion_de_datos=XY Shift. Data input
+XYShift._Progress_Message=Applying xy offset.
+y_en=and in
+Yardas=Yards
+yes=Yes
+YES=YES
+ymax=Maximum Y
+ymin=Minimum Y
+yOffset=Y Offset
+yrange=Y range
+zone=Zone
+zoom=Zoom
+Zoom=Zoom
+Zoom_a_la_capa=Zoom to layer
+Zoom_Acercar=Zoom in
+Zoom_al_Tema=Zoom to layer
+Zoom_Alejar=Zoom out
+Zoom_Completo=Full extent
+Zoom_Completo_Vista=View frame full extent
+zoom_in_factor=Zoom in factor
+Zoom_Mas=Zoom In
+zoom_mas_vista=Zoom In view frame
+Zoom_Mas_Vista=Zoom In view frame
+Zoom_Menos=Zoom out
+Zoom_Menos_Vista=View frame zoom out
+zoom_out_factor=Zoom out factor
+Zoom_pixel=Zoom to raster resolution
+Zoom_previo=Previous zoom
+Zoom_Previo=Previous zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom to selection
+Zoom_sgte=Next zoom
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_gl.properties	(revision 42196)
@@ -0,0 +1,1594 @@
+#Translations for language: gl
+#Tue Oct 24 14:07:27 CEST 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+_(Etiquetas_estandar)=(Etiquetas est\u00e1ndar)
+_(Intervalos)=(Intervalos)
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+_(Valores_unicos)=(Valores \u00fanicos)
+__valenciano=Valenciano
+__espacio_vertical=Espazo vertical\:
+__lineas=li\u00f1as
+__proyeccion_actual=Proxecci\u00f3n actual\:
+__redimensionar_texto_escala=Redimensionar o texto a escala coa vista.
+__seleccion_de_fuente=Selecci\u00f3n de fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=Nova vista
+abajo=Abaixo
+abrir=Abrir
+Abrir=Seleccionar
+Abrir_Geoproceso=
+Abrir_Imagen=Abrir Imaxe
+abrir_plantilla=Abrir modelo
+abrir_proyecto=Abrir proxecto
+abrir_tooltip=Abre un proxecto existente
+Abrir_una_capa=Abrir capa
+abstract=Resumo
+accept=Aceptar
+accept_tip=
+Accion_Predefinida=Acci\u00f3n predefinida
+aceptar=Aceptar
+Aceptar=Aceptar
+acerca_de=Acerca de...
+activa_la_ventana=Activar a fiestra
+activar=Activate
+activar_regla=Activar regra
+activo=Activo
+activos=Activos
+add=Engadir
+add_again_question=\u00bfEngadir de novo?
+add_all=Engadir todas
+add_field=Engadir campo
+add_layer=Engadir capa
+add_rows=
+add_vertex=Engadir v\u00e9rtice
+addlayer=Engadir capa
+address=Enderezo
+address_type=Tipo de enderezo
+adjust_grid=Axustar a grella
+adjust_transparency=Axustar transparencia
+advanced=Avanzada
+advanced_settings=Opci\u00f3ns avanzadas
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar li\u00f1a gr\u00e1fica con gr\u00e1ficos
+Ajustar_cobertura_wcs=Axustar cobertura WCS
+Ajustar_transparencia=Axustar transparencia
+ajustes_linea_grafica=Axustes de li\u00f1a gr\u00e1fica
+Al_leer_la_leyenda=\u00d3 l\u00e9r a lenda
+alerta=Aviso
+algoritmo=Algoritmo
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Ali\u00f1amento\:
+alinear=Ali\u00f1ar
+alinear_graficos=Ali\u00f1ar gr\u00e1ficos
+allWords=T\u00f3dalas palabras
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Altura fixa do texto
+ambito=\u00c1mbeto
+ampl_extent=
+Anadir=Engadir
+Anadir_al_conjunto=Engadir ao conxunto
+Anadir_capa=Engadir capa
+Anadir_Capa=Engadir capa
+Anadir_capa_de_eventos=Engadir capa de eventos
+Anadir_tema_de_eventos=Engadir tema de eventos
+anadir_titulo=Engadir t\u00edtulo
+Anadir_todos=Engadir todos
+ancho=Largo
+ancho_alto=Ancho alto
+Ancho_Contorno=Largo contorno
+Ancho_de_linea=Largo de li\u00f1a
+anchura=Largo\:
+angulo_rotacion=\u00c1ngulo de rotaci\u00f3n\:
+anterior=Anterior
+Anterior=Anterior
+anyResult=A b\u00fasqueda non produxo ning\u00fan resultado
+anyWord=Calquera palabra
+Aplicar=Aplicar
+apply=Aplicar
+Apply=Aplicar
+arc=
+arc_=ARCO
+Archivo=Arquivo
+Archivos_de_Disco=Arquivos de disco
+arcims_catalog_error=Erro ao recibir o cat\u00e1logo do servidor ArcIMS
+arcims_extent_error=Erro ao obter a extensi\u00f3n do servicio ArcIMS
+arcims_legend_error=Erro ao procesar a lenda
+arcims_no_features=Non se atoparon xeometr\u00edas
+arcims_no_server=Non se atopou un servidor ArcIMS v\u00e1lido
+arcims_properties=Propiedades ArcIMS
+arcims_remote_not_found=Arquivo remoto non atopado
+arcims_server_error=Erro no servidor ArcIMS
+arcims_server_status_col_name=Estado
+arcims_server_timeout=Alcanzado m\u00e1ximo tempo de espera de resposta do servidor ArcIMS
+arcims_server_type_col_name=Tipo
+Area_de_influencia=\u00c1rea de influencia
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=\u00c1rea de influencia definida por unha distancia
+area_trabajo=\u00c1rea de traballo
+Areas_de_influencia=\u00c1rea de influencia
+Areas_de_influencia._Introduccion_de_datos=\u00c1reas de influencia. Introducci\u00f3n de datos
+array_error=Erro no tama\u00f1o dos arrays
+arriba=Arriba
+ascending_order=Orde ascendente
+ascending_order_tooltip=Ordena polo campo seleccionado en orde ascendente
+asignar_coordenadas=
+aspect=Configuraci\u00f3n do aspecto
+Atributo=Atributo
+Atributos_Numericos=Atributos num\u00e9ricos
+attributeName=
+attributes=Atributos
+attributeType=
+automatico=Autom\u00e1tico
+available_layers=Capas dispo\u00f1ibles
+available_services=Servicios dispo\u00f1ibles
+aviso_sin_extent_de_referencia=Para usar esta opci\u00f3n precisa ter como m\u00ednimo unha capa xa engadida que serva de referencia
+Ayuda=Axuda
+back=Anterior
+Back=Anterior
+background_color=C\u00f3r de fondo
+baja=Baixa
+Bajar_capa=Baixar capa
+bandas=Bandas
+bands=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bd=bd
+bmp=Arquivos de tipo bmp
+Bold=
+borra_seleccion=Borra selecci\u00f3n
+borrador=Borrador
+borrar=Borrar
+borrar_todos=Borrar todos os puntos
+borrar_uno=Borrar punto seleccionado
+box=
+break_=Break
+brillo=Brillo
+brillo_y_contraste=Brillo e Contraste
+browse=Examinar
+BRX=BRX\:
+BRY=BRY\:
+buffer=Buffer
+cajetin=
+calcular_errores=Calcular error de xeito autom\u00e1tico
+Calcular_intervalos=Calcular intervalos
+calidad=Calidade
+Cambio_Color=Cambio c\u00f3r
+Cambio_de_estilo=Cambio de estilo
+Cambio_Estilo=Cambio estilo
+cambio_nombre=Cambio de nome
+Cambios_de_estilo=Cambios de estilo
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+Campo_clasifica=Campo de clasificaci\u00f3n
+Campo_de_clasificacion=Campo de clasificaci\u00f3n
+campo_de_documentos_asociados=Campo de documentos asociados
+Campo_de_etiquetado=Campo de etiquetado
+Campo_para_disolver=Campo para disolver
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancel_edition=Cancelar edici\u00f3n
+cancel_tip=
+cancelar=Cancelar
+Cancelar=Cancelar
+cancelSearchButton=Cancelar
+cannotReproject=Non se pode reproxectar este sistema de coordenadas
+cant_connect=Non se pode realizar a conexi\u00f3n
+cant_connect_wfs=
+cantLoad=Non se pode cargar a capa WFS
+capa=Capa
+Capa=Capa
+capa_exportada=
+capa_importada=Capa mportada. Desexa crear o \u00edndice espacial?
+capas=Capas
+Capas=Capas
+Capas_del_directorio=
+Capas_del_localizador=Capas do localizador
+capas_edition_cache=
+capaWMS=CapaWMS
+caracteres_erroneos=Caracteres err\u00f3neo na cadea de entrada
+cargar=
+cargar_fichero=Cargar Arquivo
+cargar_leyenda=Cargar lenda
+cargar_sin_georef=Cargar imaxe sen xeoreferenciar
+cartografico=Cartogr\u00e1fico
+Cascada=Cascada
+cascada_enable=Ten que haber polo menos unha fiestra aberta
+cascada_tooltip=Organiza as fiestras en cascada
+catalog_search=B\u00fasqueda de xeodatos
+cathegory=Categor\u00eda
+cathegoryAny=Calquera
+cathegoryBiota=Biota
+cathegoryBoundaries=L\u00edmites
+cathegoryClimatologyMeteorologyAtmosphere=Atmosfera climatol\u00f3xica e meteorol\u00f3xica
+cathegoryEconomy=Econom\u00eda
+cathegoryElevation=Elevaci\u00f3n
+cathegoryEnvironment=Medio ambente
+cathegoryFarming=Agricultura
+cathegoryGeoscientificInformation=Informaci\u00f3n xeocient\u00edfica
+cathegoryHealth=Sa\u00fade
+cathegoryImageryBaseMapsEarthCover=Covertura da terra con mapas
+cathegoryInlandWaters=Augas interiores
+cathegoryIntelligenceMilitary=Intelixencia militar
+cathegoryLocation=Localizaci\u00f3n
+cathegoryOceans=Oc\u00e9anos
+cathegoryPlanningCadastre=Planeamento cadastral
+cathegorySociety=Sociedade
+cathegoryStructure=Estructuras
+cathegoryTransportation=Transporte
+cathegoryUtilitiesCommunication=Comunicaci\u00f3n e utilidades
+causa_error_desconocida=Error inesperado do servidor
+Centimetros=Cent\u00edmetros
+Centrar_la_Vista_sobre_un_punto=Centrar a vista sobre un punto
+centrar_punto=
+cerrar=Pechar
+Cerrar=Pechar
+change_before=
+change_behind=
+change_height=
+change_server=Cambiar Servidor
+change_service=Cambiar Servicio
+change_width=
+choose_image_format=Escolla formato de imaxe
+chooseAttribute=Elixir un atributo para facer unha b\u00fasqueda
+circle=
+circle_=C\u00cdRCULO
+circulo=C\u00edrculo
+Circulo=C\u00edrculo
+circumscribed=Circunscrito
+city=Cidade
+clave=Clave
+clear=Limpar
+close=Pechar
+close_polyline=Pechar polili\u00f1a
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_interseccion=Capa de intersecci\u00f3n
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de sa\u00edda
+Cobertura_para_unir=Capa para unir
+Coberturas=Coberturas
+Coberturas_de_entrada=Capas de entrada
+coincidir_tamano=Coincidir tama\u00f1o\:
+coincidir_tamanyo=
+colocar_a_margenes=Colocar con referencia a marxes.
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar ao redor de t\u00f3dolos gr\u00e1ficos
+colocar_delante=Colocar diante
+colocar_detras=Colocar detr\u00e1s
+color=Cor\:
+Color_Contorno=Cor contorno
+Color_de_la_Linea=Cor da li\u00f1a
+Color_de_Relleno=Cor de renchido
+Color_final=Cor final
+Color_inicial=Cor inicial\:
+Color_inicio=Cor de inicio
+color_texto=Cor do texto
+column_not_found=Non se atopou a columna
+comentarios=Comentarios
+commands_stack=P\u00eda de comandos
+complex_selection=Selecci\u00f3n complexa
+complex_selection_=SELECCI\u00d3N COMPLEXA
+compress=Compresi\u00f3n
+concordancia=Concordancia
+conectar=Conectar
+conection=Conexi\u00f3n
+conexion_correcta=Conexi\u00f3n correcta
+configuracion_andami_tooltip=Configuraci\u00f3n Andami
+configurar=Configurar
+Configurar=Configurar
+configurar_ANDAMI=Di\u00e1logo de configuraci\u00f3n de ANDAMI.
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador
+configurar_todas_las_extensiones=
+confirm_gid=Confirmar gid
+confirmacion=Confirmaci\u00f3n
+confirmar_borrar=Seguro que desexa borrar o elemento?
+connect=Conectar
+connect_error=Erro de conexi\u00f3n
+connectButton=Conectar
+connection_name=Nome da conexi\u00f3n
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00f3n
+Consola=Consola
+consulta=Consulta
+contact_info=Informaci\u00f3n de contacto
+contact_organization=Organizaci\u00f3n
+contact_person=Nome
+contact_position=Cargo
+Contengan=Conte\u00f1an
+contiene_espacios_en_blanco=
+contraste=Contraste
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducci\u00f3n de datos
+coor_geograficas=Coordenadas xeogr\u00e1ficas
+coord_system=Sistema de coordenadas
+coordenadas_vacias=Coordenadas baleiras
+coordinates=Coordenadas
+coordinatesContains=cont\u00e9n
+coordinatesEnclose=incl\u00fae
+coordinatesEqual=igual
+coordinatesFullyOutsideOf=est\u00e1 totalmente f\u00f3ra de
+copiar=
+copy=Copiar
+copy_=COPIAR
+cortar=
+countries_of_the_world=Acerbaix\u00e1n;Afganist\u00e1n;Albania;Alema\u00f1a;Alxeria;Andorra;Angola;Antiga e Barbuda;Arabia Saud\u00ed;Armenia;Arxentina;Australia;Austria;Bahamas;Bahrein;Bangladesh;Barbados;Belice;B\u00e9lxica;Ben\u00edn;Bermudas;Bielorrusia;Bolivia;Bosnia Hercegovina;Botsuana;Brasil;Brunei;Bulgaria;Burquina Faso;Burundi;But\u00e1n;Cabo Verde;Camboia;Camer\u00fan;Canad\u00e1;Casaquist\u00e1n;Chad;Chequia;Chile;China;Chipre;Cidade do Vaticano;Cimbabue;Colombia;Comores;Congo;Congo, Rep\u00fablica Democr\u00e1tica do;Corea do Norte;Corea do Sur;Costa do Marfil;Costa Rica;Croacia;Cuba;Curdist\u00e1n;Dinamarca;Dominica;Ecuador;Emiratos \u00c1rabes Unidos;Eritrea;Eslovaquia;Eslovenia;Espa\u00f1a;Estados Unidos de Am\u00e9rica;Estonia;Etiop\u00eda;Exipto;Fidxi;Filipinas;Finlandia;Francia;Gab\u00f3n;Gambia;Ghana;Granada;Grecia;Guadalupe;G\u00fciana;Guinea;Guinea Ecuatorial;Guinea-Bissau;Hait\u00ed;Honduras;Hungr\u00eda;Iemen;Illas Marshall;Illas Salom\u00f3n;India;Indonesia;Ir\u00e1n;Iraq;Irlanda;Islandia;Israel;Italia;Laos;Lesoto;Letonia;L\u00edbano;Liberia;Libia;Liechtenstein;Lituania;Luxemburgo;Macedonia, Antiga Rep\u00fablica Iusgolava de;Madagascar;Malaisia;Malaui;Maldivas;Mal\u00ed;Malta;Marrocos;Mauricio;Mauritania;M\u00e9xico;Micronesia, Estados Federados de;Moldavia;M\u00f3naco;Mongolia;Mozambique;Myanmar;Namibia;Nauru;Nepal;Nicaragua;Niue;N\u00edxer;Nixeria;Noruega;Nova Celandia;O Salvador;Om\u00e1n;Pa\u00edses Baixos;Palestina;Panam\u00e1;Pap\u00faa Nova Guinea;Paquist\u00e1n;Paraguai;Per\u00fa;Polonia;Porto Rico;Portugal;Qatar;Quenia;Quirguicist\u00e1n;Quiribati;Quvait;Reino Unido;Rep\u00fablica Centroafricana;Rep\u00fablica Dominicana;Ruanda;Ruman\u00eda;Rusia;Saint Kitts e Nevis;Samoa Occidental;San Mari\u00f1o;San Vicente e Granadinas;Santa Luc\u00eda;Santo Tom\u00e9 e Pr\u00edncipe;Senegal;Serbia e Montenegro;Serra Leona;Seychelles;Singapur;Siria;Somalia;Sri Lanka;Suacilandia;Sud\u00e1frica;Sud\u00e1n;Suecia;Su\u00edza;Surinam;Tailandia;Taiw\u00e1n;Tanzania;Taxiquist\u00e1n;Timor Leste;Togo;Tonga;Toquelau;Trinidade e Tobago;T\u00fanez;Turcomenist\u00e1n;Turqu\u00eda;Tuvalu;Ucra\u00edna;Uganda;Uruguai;Uzbequist\u00e1n;Vanuatu;Venezuela;Vietnam;Xap\u00f3n;Xeorxia;Xibuti;Xordania;Zambia
+country=Pa\u00eds
+coverage=
+covered_extension=Cobertura da extensi\u00f3n
+Crear_Buffer=Crear \u00c1rea de influencia...
+Crear_Indice=Crear \u00edndice espacial...
+Crear_Indice_Intro=A creaci\u00f3n de \u00edndices espacias pode optimizar a realizaci\u00f3n de consultas espaciais.
+Crear_Indice_Pregunta_1=\u00bfDesexa crear un \u00edndice espacial para a capa
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Crear arquivo de xeoreferenciaci\u00f3n (worldfile)
+created_with=Creado con
+creation_date=Data de creaci\u00f3n
+credentials=
+cross_circle=Intersecta/cont\u00e9n a circunferencia
+cross_polygon=Intersecta/Cont\u00e9n o Pol\u00edgono
+Crucen_con=Crucen con
+Cruz=Cruz
+Cuadrado=Cadrado
+cuadro_no_asociado=
+cuando_activo=Cando activo
+current=actual
+current_scale=Escala actual
+cut=
+Dado_un_campo_de_atributos=Dado un campo de atributos
+data_origin=Orixe de datos
+database=Nome da base de datos
+de=de
+De=de
+debe_estar_activada=debe estar activada
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar as capas das que desexe obter informaci\u00f3n
+decimal_degrees=Graos decimais
+default=Por defecto
+default_name=Capa WFS
+define_fields=Define os campos
+define_point=Defina o punto
+defined_by_user=Definido polo usuario
+defined_by_view_extent=
+dehacer=Desfacer
+del=Eliminar
+delete_field=Borrar campo
+densityfication=Densificaci\u00f3n
+Dentro=dentro do pol\u00edgono
+Dentro_y_fuera=Dentro e f\u00f3ra do pol\u00edgono
+Derecha=Dereita
+Derecho=Dereito
+desactivar_capa=
+desactivar_puntos=
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Orde descendente
+descending_order_tooltip=Ordena polo campo seleccionado en orde descendente
+desconectar=Desconectar
+descripcion=Descrici\u00f3n
+Descripcion=Descrici\u00f3n
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description=Descripci\u00f3n
+description_URL=URL descrici\u00f3n
+desde=dende
+desde_arriba=Dende arriba\:
+desde_izquierda=Dende a esquerda
+desea_borrar_la_capa=
+deshacer=Desfacer
+Desplazamiento=Desprazamento
+desviacion_tipica=Desviaci\u00f3n t\u00edpica
+detalles=Detalles
+Detalles=Detalles
+DGNFiles=Arquivos .DGN
+Diferencia=Diferencia
+Diferencia_Introduccion_de_datos=Diferencia. Introducci\u00f3n de datos
+dimension=Dimensi\u00f3n
+dimensiones=Dimensi\u00f3ns
+directorio=Directorio
+directorio_extensiones=Directorio das extensi\u00f3ns
+disagregate_layers=
+Disolver=Disolver
+Disolver._Introduccion_de_datos=Disolver. Introducci\u00f3n de datos
+Disolver_entidades=Disolver entidades
+distance_units=Unidades de medida
+distribuir=Distribu\u00edr\:
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+divisiones_izquierda=Divisi\u00f3ns \u00e1 esquerda
+documentos_existentes=Documentos existentes
+downloadColumn=Descarga
+driver=Driver
+drivers=Drivers
+dxf_files=Arquivos dxf
+Dxffiles=Arquivos .DXF
+e-mail=Correo electr\u00f3nico
+edicion=Edici\u00f3n
+edit=Edita
+edit_vertex=
+edit_vertex_=EDITAR V\u00c9RTICE
+editable=
+Editar_leyenda=Editar lenda
+editar_propiedades=Editar propiedades
+editar_vertices=Editar v\u00e9rtices
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00famero m\u00e1ximo de intervalos para este campo \u00e9
+Elegir_Color=Elixir Cor
+Elegir_Fuente=Elixir fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Elementos seleccionados da capa
+Elija_una_herramienta_de_analisis=Escolla unha ferramente de an\u00e1lise
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_extremos=Eliminar extremos
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+ellipse=Elipse
+ellipse_=ELIPSE
+en_el_mapa=No mapa\:
+en_language=Ingl\u00e9s
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=
+Encuadre=Encadre
+Encuadre_Vista=Encadre sobre a vista
+end=Rematar
+end_polygon=Finalizar pol\u00edgono
+endinfo=Estat\u00edsticas de remate
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducci\u00f3n de datos
+enlace_vivo=Ligaz\u00f3n viva
+Enlazar_a_fichero_de_texto=Ligar a arquivo de texto
+Enlazar_a_ficheros_de_imagen=Ligar a arquivos de imaxe
+enter_layer_name=Introducir nome da capa
+enter_new_layer_name=Introduza o nome da nova capa
+enter_path_to_file=Introducir a ruta do arquivo
+envelope=Extensi\u00f3n
+equal_intervals=Intervalos iguais
+equidistance=Equidistancia
+error=Erro
+Error_abriendo_el_fichero=Erro de apertura do arquivo
+Error_accediendo_a_los_datos=Erro de acceso aos datos
+Error_atributo_no_numerico=Atributo para distancia de buffer non num\u00e9rico
+error_capa_puntos=Erro ao cargar a capa. Pode que a capa de Xeoreferenciaci\u00f3n non est\u00e9 activa
+Error_capa_vacia=
+Error_chequeando_precondiciones=Erro verificando precondici\u00f3ns
+Error_chequeo_tipo_geometria=Erro ao comprobar o tipo de xeometr\u00eda
+error_comunicacion_servidor=Tense producido un erro de comunicaci\u00f3n c\u00f3 servidor
+error_conexion=Erro ao conectar \u00e1 base de datos
+Error_distancia_buffer=Debes inserir unha distancia de \u00e1rea de influencia
+Error_ejecucion=Erro de execuci\u00f3n
+Error_entrada_datos=Erro de entrada de datos
+error_escritura=Non se puido gardar o proxecto
+Error_escritura_resultados=Erro de escritura de resultados
+Error_exportando_SLD=
+Error_fallo_geoproceso=Produc\u00eduse un erro durante a execuci\u00f3n do xeoproceso
+error_file_exists=O arquivo xa existe. \u00bfDesexa sobreescribilo?
+error_file_not_writable=Non \u00e9 posible crear o arquivo de salida
+Error_guardando_la_leyenda=Erro ao gardar a lenda
+Error_guardando_la_plantilla=
+error_lectura=Non se puido abrir o proxecto
+Error_preparar_escritura_resultados=Produc\u00eduse un erro ao preparar a capa de resultados
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=\u00c9 necesario especificar un arquivo de resultados
+Error_spjoinmn_sin_funcion=Non seleccionou ningunha funci\u00f3n resumo para os atributos num\u00e9ricos
+error_writting_file=Erro ao escribir o arquivo
+errores=Erros
+errores_csv=
+errorFENotSupported=Polo momento s\u00f3 se poden facer consultas empregando a codificaci\u00f3n FILTER ENCODING que non est\u00e1 soportada polo servidor
+errorGetRecords=Produciuse un erro ao facer o getRecords
+errorIsASRWServer=\u00c9 un servidor SRW\!
+errorNotCSWSupportedProtocol=Atop\u00f3use o servidor, pero semella que non soporta o protocolo CS-W
+errorNotParsedReply=Erro ao "parsear" a resposta. Atop\u00f3use o servidor, pero posiblemente non soporta o protocolo especificado
+errorNotSupportedCapabilities=Erro o facer un GetCapabilities. Pode ser debido a d\u00faas raz\u00f3ns\: Ou ben ocurreu un eroo ao intentar facer a operaci\u00f3n, ou ben o servidor non soporta o protocolo especificado
+errorNotSupportedProtocol=O servidor non soporta o protocolo especificado
+errorNotThesaurusSelected=O protocolo WFS non deixa facer b\u00fasquedas se non se elixe un elemento do tesauro
+errorServerException=O servidor devolv\u00e9u unha excepci\u00f3n
+errorServerNotFound=Non se d\u00e1 atopado o servidor
+errorSOAPProtocol=Erro no protocolo SOAP
+es_country=Espa\u00f1a
+es_language=Castel\u00e1n
+escala=Escala
+Escala=Escala
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada polo usuario
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Espaciado horizontal da malla
+espaciado_vertical=Espaciado vertical da malla
+espacio=Espazo\:
+espere=Por favor, espere
+estadisticas=Estat\u00edsticas
+este_por_debajo_de_=Estea por debaixo de
+este_por_encima_de=Estea por riba de
+Esten_contenidos_en=Estean contidos en
+Estilo=Estilo\:
+estilos=Estilos
+Etiqueta=Etiqueta
+Etiquetado=Etiquetado
+Etiquetados=Etiquetados
+etiquetas=Etiquetas
+Etiquetas_estandar=Etiquetas est\u00e1ndar
+exactSentence=Frase exacta
+examinar=Examinar
+Examinar=Examinar
+exploit=Explotar
+exploit_=
+export=Exportar
+export_to=
+exportando_features=
+exportar=Exportar
+exportar_a=Exportar a...
+exportar_ascii=Exportar ASCII
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+exporting_=Exportando
+extend=Alongar
+extend_=
+extension=Extensi\u00f3n
+extension_activada=Extensi\u00f3n activada.
+extensiones=
+Extent=Extent
+extents_no_coincidentes=Extensi\u00f3ns non coincidentes
+factor=Factor
+fallo_capas=Erro accedendo \u00e1s capas. As seguintes capas van ser eliminadas do proxecto
+fallo_crear_conexion=Erro ao crear a conexi\u00f3n
+fallo_crear_pool=Erro na creaci\u00f3n do Pool de Conexi\u00f3ns
+fallo_obtener_conexion_existente=Erro ao obter unha conexi\u00f3n xa creada
+fallo_obtener_tablas=Erro ao obter as t\u00e1boas da base de datos
+fallo_realizar_consulta=Erro ao realizar unha consulta
+fallo_registrar_conexion=Erro en rexistro dunha conexi\u00f3n
+fax=Fax
+feature=Capas
+featureclass=Vectorial
+features_desea_continuar=
+featureserver=Servicio vectorial
+feet=P\u00e9s
+Fichero=Arquivo
+fichero_existe=Arquivo existe
+fichero_incorrecto=Arquivo incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=Arquivos de datos cartogr\u00e1ficos
+Ficheros_SHP=Arquivos SHP
+field=Campo
+fields=Campos
+file=Arquivo
+file_exists=O arquivo existe. \u00bfDesexa sobreescribilo?
+file_name=Arquivo
+file_version=Versi\u00f3n do arquivo
+filtro=Filtro
+final_point=
+finalizar=Rematar
+finish=Rematar
+fit_ArcIms_layer=Axustar capa ArcIMS
+fit_WCS_layer=Axustar capa WCS
+fit_WFS_layer=
+fit_WMS_layer=Axustar capa WMS
+Font=Fonte
+format=Formato
+formato=Formato
+Formato=Formato
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=
+formato_incorrecto=Formato incorrecto
+formatos=Formatos
+from=Dende
+fuente=Fonte
+Fuente=Fonte
+Fuera=F\u00f3ra do pol\u00edgono
+fuera_de_extent=O punto seleccionado est\u00e1 f\u00f3ra do 'extent' da imaxe
+Funciones_Sumarizacion=Funci\u00f3ns de agrupamento
+gazetteer_connect=Localizar polo Nomencl\u00e1tor
+gazetteer_search=Localizar polo Nomencl\u00e1tor
+general=Xeral
+General=Xeral
+Generar_Intervalos=Xerar intervalos
+geometry=Xeometr\u00eda
+Geoprocesos=
+georaster=Xeoreferenciaci\u00f3n
+georef=Xeoreferenciar
+georef_file=
+georeferenciado=
+georreferenciar=Xeoreferenciar
+gestion_encuadre=Xesti\u00f3n de Encadre
+Gestor_de_Geoprocesos=
+goto=Facer un zoom \u00e1 b\u00fasqueda
+grado_polinomio=Grao do polinomio
+grados=Graos\:
+Grados=Graos
+Graficos=Gr\u00e1ficos
+Grosor_de_linea=Grosor de li\u00f1a
+grosor_linea=Grosor de li\u00f1a\:
+group=Agrupar
+group_graphic_line=
+group_layers=Agrupar capas
+group_layers_option=Agrupaci\u00f3n de capas
+grupo=
+GT2shp=GT2shp
+guardado=Gardado en
+guardar=Gardar
+Guardar=Gardar
+guardar_cambios=\u00bfQuere gardar os cambios?
+guardar_clave=Gardar clave
+guardar_como=Gardar como
+guardar_como_plantilla=Gardar como dese\u00f1o
+Guardar_el_zoom_actual=Gardar o zoom
+guardar_leyenda=Gardar lenda
+Guardar_leyenda=Gardar lenda
+guardar_proyecto=Gardar proxecto
+guardar_tooltip=Gardar os cambios ao proxecto
+Habilitar_etiquetado=Habilitar etiquetado
+hasta=hata
+height=Alto
+Herramientas=Ferramentas
+Herramientas_de_analisis=Ferramentas de an\u00e1lise
+Herramientas_vista=Ferramentas da vista
+hide_grid=
+Hiperenlace=Hiperligaz\u00f3n
+horizontal=Horizontal
+horizontal_space=
+host=M\u00e1quina
+hostname=Hostname
+html_in_a_new_view=<HTML>Crea unha vista nova no proxecto. A nova vista conter\u00e1 t\u00f3dalas capas definidas polo arquivo.</HTML>
+html_in_other_view=<HTML>Engade as capas na vista que especifique da lista seguinte\:</HTML>
+html_in_the_current_view=<HTML>Engade as capas definidas no arquivo \u00e1 vista activa.</HTML>
+id=ID
+Identificar_Resultados=Identificar resultados
+idioma=
+Igual_que_la_impresora=Igual que a impresora
+igual_todos_lados=Desprazamento igual por t\u00f3dolos lados
+image=Imaxe
+imagen=Imaxe
+Imagen=Imaxe
+imagen_no_accesible=
+imageserver=Servicio de imaxes
+import=Importar
+import_from_ascii=
+import_layer=Gardar capa en PostGIS
+import_map_context=Importar mapas dende un arquivo Web Map Context de OGC
+importar=Importar
+importar_extent=Importar o extent actual da vista
+Imprimir=Imprimir
+in=en
+incorrect_option=Opci\u00f3n incorrecta
+incorrect_point=
+incorrect_value=
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente a capa
+Inferior=Inferior
+info=Informaci\u00f3n
+info_format_not_supported=Non se soporta o formato devolto polo WMS
+infobreak=Amosa os elementos da capa usando unha gama de cores
+infodef=Amosa todolos elementos dunha capa empregando o mesmo s\u00edmbolo
+informacion=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+infovalue=Amosa elementos da capa empregando un s\u00edmbolo por cada valor
+Inicializando=Inicializando
+initial_warning=
+insert=Inserir
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Inserir punto central ou [3P]
+insert_central_point_polygon=Inserir punto central do pol\u00edgono
+insert_column=Inserir columna
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Inserir distancia ao outro eixe
+insert_factor_or_reference=Precise factor de escala<2> ou Referencia[R]
+insert_first_point=Inserir primeiro punto
+insert_first_point_corner=Inserir primeiro punto de esquina
+insert_first_point_scale=Precise punto orixe recta escala
+insert_initial_point_axis=Inserir punto inicial do eixe da elipse
+insert_last_point=Inserir derradeiro punto
+insert_last_point_axis=Inserir punto final do eixe da elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Inserir lonxitude ou punto
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Inserir seguinte punto, Arco[A] ou Pechar polili\u00f1a[C] ou Rematar[T]
+insert_next_point_line_or_close=Inserir punto seguinte, Li\u00f1a[N], Pechar polili\u00f1a[C] ou Rematar[T]
+insert_next_point_selection_or_end_polygon=Inserir seguinte punto ou finalizar pol\u00edgono de selecci\u00f3n[E]
+insert_number_sides=Inserir n\u00famero de lados
+insert_opposited_corner=Inserir esqina oposta
+insert_point=Inserir punto
+insert_point_corner_or_square=Inserir punto da esquina oposta ou Cadrado[C]
+insert_point_move=Inserir punto de desprazamento
+insert_point_or_end=
+insert_point_selection=Precise punto de selecci\u00f3n
+insert_point_selection_or_types=Precise punto ou Circunf.[IC], F\u00f3ra Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], F\u00f3ra pol.[OP], Inter. circunf.[CC], F\u00f3ra circunf.[OC]
+insert_radius=Precise radio(r)
+insert_radius_or_second_point=Inserir radio ou segundo punto
+insert_reference_point_or_factor=Precise punto orixe recta referencia ou Factor de escala[F]
+insert_rotation_angle=Precise \u00e1ngulo de rotaci\u00f3n
+insert_row=Inserir fila
+insert_second_point=Inserir segundo punto
+insert_second_point_angle=Inserir segundo punto ou \u00e1ngulo
+insert_second_point_move=Precisar segundo punto do desprazamento
+insert_second_point_selection=Precise segundo punto do rect\u00e1ngulo de selecci\u00f3n
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Inserir terceiro punto
+insertar=Inserir
+Insertar=Insertar
+insertar_cajetin=Inserir cadro de rotulaci\u00f3n
+insertar_circulo=Insertar c\u00edrculo
+insertar_escala=Insertar escala
+insertar_fila=
+insertar_imagen=Insertar imaxe
+insertar_leyenda=Insertar lenda
+insertar_linea=Insertar li\u00f1a
+insertar_norte=Insertar norte
+insertar_poligono=Insertar pol\u00edgono
+insertar_polilinea=Inserir polili\u00f1a
+insertar_punto=Insertar punto
+insertar_recta=Insertar recta
+insertar_rectangulo=Insertar rect\u00e1ngulo
+insertar_texto=Insertar texto
+insertar_vista=Insertar vista
+inside_circle=Dentro da circunferencia
+inside_polygon=Dentro do pol\u00edgono
+inteligentSearch=B\u00fasqueda intelixente
+inteligentSearchAscii=T\u00f3dalas formas da palabra
+inter_arc=Arco interno
+inter_line=Li\u00f1a interna
+internal_polygon_=Pol\u00edgono interno
+Interseccion=Intersecci\u00f3n
+Interseccion._Introduccion_de_datos=Intersecci\u00f3n. Introducci\u00f3n de datos
+Intersecten_con=Intersecten con
+interval=Int\u00e9rvalo
+intervalo=intervalo
+Intervalo=Intervalo
+Intervalos=Intervalos
+Intervalos_equidistantes=Intervalos equidistantes.
+Intervalos_por_rupturas_naturales=Intervalos por rupturas naturais.
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito no c\u00edrculo[I] ou Circunscrito[C]<C>
+intro_tablename=Introduza o nome da t\u00e1boa a crear. AVISO\: Se a t\u00e1boa xa existe, ser\u00e1 borrada
+introduce_nombre=Introduce o novo nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_intervalo_deseado=Introduza o intervalo desexado
+is_required=\u00e9 obligatorio
+Italic=
+Izquierda=Esquerda
+Izquierdo=Esquerdo
+join=Empalmar
+join_=
+jpg=Arquivos JPEG
+Juntar=Xuntar
+Juntar._Introduccion_de_datos=Xuntar. Introducci\u00f3n de datos
+KeyMapping.Caracter_no_valido=Car\u00e1cter non v\u00e1lido
+keywords=Palabras clave
+keyWords=Palabras chave
+kilometros=Kil\u00f3metros
+Kilometros=Kil\u00f3metros
+language=Idioma
+Las_traducciones_no_pudieron_ser_cargadas=As traducci\u00f3ns non se puideron cargar
+last=Anterior
+lastUpdateDate=Data da \u00faltima actualizaci\u00f3n
+latitud=Latitude
+Launcher.config_mal_formado=. Arquivo 'config.xml' mal formado
+Launcher.config_no_encontrado=. Arquivo 'config.xml' non atopado
+Launcher.Dependencia_no_resuelta_en_plugin=Dependencia non resolta no plugin
+Launcher.Dos_skin_extension=D\u00faas skin-extension. Usamos a \u00faltima
+Launcher.Error_con_las_librerias_del_plugin=Erro coas librar\u00edas do plugin
+Launcher.Error_instanciando_la_extension=Erro instanciando a extensi\u00f3n
+Launcher.Error_localizando_la_clase_de_la_extension=Erro localizando a clase da extensi\u00f3n
+Launcher.Hay_dependencias_circulares=Hai dependencias circulares entre os plugins
+Launcher.Ignorando_el_directorio=Ignorando o directorio
+Launcher.labelset_class=Non se puido atopar a clase de etiquetas (labelset)
+Launcher.look_and_feel=Non se puido activar o 'look ans feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Non se atopou a clase da extensi\u00f3n
+Launcher.No_se_encontro_la_clase_mdi_manager=Non se atopou a clase mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Non se puido acceder \u00e1 clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Non se puido gardar a configuraci\u00f3n de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Non se puido instanciar a clase mdi manager
+Launcher.No_se_puede_acceder_a=Non se pode acceder a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Prod\u00faxose un erro ao gardar a configuraci\u00f3n dosplugins
+Launcher.Two_extensions_with_the_same_priority=D\u00faas extensi\u00f3ns coa mesma prioridade, cargarase soamente unha
+Launcher.Two_menus_with_the_same_position=Dous men\u00fas coa mesma posici\u00f3n, cargarase soamente un
+layer=Capa
+Layer=Capa
+layer_abstract=Resumo da capa
+layer_name=Nome da capa
+layer_not_queriable=A capa non \u00e9 interrogable
+layer_scale_status=Estado dos l\u00edmites da escala
+layer_title=T\u00edtulo da capa
+layer_was_already_added=A capa xa se engadira
+layerName=
+LayerName=
+layers=Capas
+layers_in_other_view=Capas na vista que eu escolla
+layers_in_the_current_view=Capas na vista actual
+layerType=
+legend=Lenda
+length=Tama\u00f1o
+leyenda=Lenda
+Leyenda=Lenda
+leyenda_campo_unido=Estase a utilizar un campo da uni\u00f3n na lenda (e/ou etiquetado). Cambie a lenda antes de quitar a uni\u00f3n, por favor.
+Leyenda_Por_Defecto=Lenda por defecto
+line=Li\u00f1a
+line_=LI\u00d1A
+line_type=Tipo li\u00f1a
+linea=Li\u00f1a
+Linea=Li\u00f1a
+linea_grafica=Li\u00f1a gr\u00e1fica
+lineal_directo=Lineal directo
+linf_der=Inf Der
+link=Ligazon
+Link=Ligaz\u00f3n
+linkColumn=P\u00e1xina Web
+linkError=Ocorreu un erro ao cargar a ligaz\u00f3n
+linkLoad=Carga dun recurso web
+load_from_xml=Cargar desde arquivo XML (.rmf)
+loadWMS=Carga de WMS
+localizador=Localizador
+Localizador_por_atributo=Localizador por atributo
+localize=Localizar
+location=Ubicaci\u00f3n
+logo_URL=URL logotipo
+longitud=Lonxitude
+lowerCoordinates=Inferiores
+lppp=ppp
+lsup_izq=Sup Esq
+m/pixel=metros/pixel
+malla_activada=Malla activada
+mantainold=Elimina-las b\u00fasquedas anteriores
+mantener_intervalo=Manter intervalo
+map_context_file_error=Erro no arquivo Web Map Context
+map_extent=Extensi\u00f3
+map_size_in_pixels=Tama\u00f1o do mapa (p\u00edxeles)
+map_units=Unidades de mapa
+mapa=
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco da vista
+margenes=M\u00e1rxenes\:
+Mas_100=O n\u00famero de valores \u00e9 superior a 100, e non aporta informaci\u00f3n
+mas_de_100_simbolos=M\u00e1is de 100 s\u00edmbolos non adoitan aportar informaci\u00f3n nun plano
+max_no_of_pixels=N\u00famero m\u00e1ximo de p\u00edxels
+max_scale=Escala m\u00e1xima
+maxFeatures_aviso=
+maximo=M\u00e1ximo
+Maximo=M\u00e1ximo
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Erro non capturado polo usuario
+MDIFrame.quiere_salir=Est\u00e1 seguro de que quere sa\u00edr?
+MDIFrame.salir=Sa\u00edr
+MDIManagerFactory.No_skin_extension_in_the_plugins=Non se atopou ningunha extensi\u00f3n 'skin' entre o splugins
+media=Media
+Media=Media
+medir_area=Medir \u00c1rea
+medir_distancias=Medir distancias
+Mensaje_buffer=
+Mensaje_clip=Xeoproceso recortar...
+Mensaje_convexhull=Xeoproceso convex hull...
+Mensaje_difference=Xeoproceso diferencia...
+Mensaje_dissolve=Xeoproceso disolver...
+Mensaje_enlace_espacial=Xeoproceso enlace espacial...
+Mensaje_interseccion=Xeoproceso intersecci\u00f3n...
+Mensaje_juntar=Xeoproceso xuntar...
+Mensaje_primera_pasada_union=Calculando intersecci\u00f3ns...
+Mensaje_procesando_buffer=Xerando \u00e1reas de influencia...
+Mensaje_procesando_buffer2=Disolvendo \u00e1reas de influencia...
+Mensaje_procesando_clip_primero=Calculando pol\u00edgono de recorte
+Mensaje_procesando_clip_segundo=Recortando xeometr\u00edas
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=Disolvendo xeometr\u00edas
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=Calculando intersecci\u00f3ns...
+Mensaje_procesando_juntar=Xuntando xeometr\u00edas...
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=Xeoproceso uni\u00f3n...
+Messages._no_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+Messages.no_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+metadata_catalog=B\u00fasqueda de Xeodatos - Conexi\u00f3n
+metadata_tree=\u00c1rbore de Metadato
+metadatos=Metadatos
+meters=Metros
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Millas
+min_scale=Escala m\u00ednima
+minimo=M\u00ednimo
+Minimo=M\u00ednimo
+minx=min.x
+miny=min.y
+modificar=
+modification_date=\u00daltima data de modificaci\u00f3n
+modify=
+mosaico_tooltip=Mosaico tooltip
+Mostrar_Contorno=Amosar contorno
+mostrar_descripcion=Amosar descrici\u00f3n
+mostrar_puntos=Amosar numeraci\u00f3n
+Mostrar_siempre=Amosar sempre
+mostrar_unidades=Amosar unidades
+move=Desprazamento
+move_=DESPRAZAMENTO
+move_elements=
+Move_from_view=
+move_handlers=
+move_layer_down=Mover abaixo
+move_layer_up=Mover arriba
+Mover_geo=Mover imaxe a xeorefenciar
+msg_save_raster=Vaise canelar a operaci\u00f3n. \u00bfDesexa continuar?
+mtspixel=Mts/pixel
+muestra=Mostra
+Muestra_atributos=Amosa os atributos das capas seleccionadas
+muestra_consola_tooltip=Amosa a consola
+Muestra_los_atributos_de_las_capas_seleccionadas=Amosa os atributos das capas seleccionadas
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Amosa os elementos da capa empregando un s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Amosa os elementos da capa empregando unha gama de cores en funci\u00f3n do valor dun determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Amosa todolos elementos dunha capa empregando o mesmo s\u00edmbolo
+multi_type=Tipo m\u00faltiple
+multiple_value=Valor m\u00faltiple
+multiples_intervalos=Intervalos m\u00faltiples
+multipoint=
+multipoint_=
+multipoint_type=Tipo multipunto
+must_specify_a_file=Debe especificar un arquivo de destino.
+name=Nome
+natural_intervals=Intervalos naturais
+navegacion=Navegaci\u00f3n
+navegacion_vista=Navegaci\u00f3n vista
+necesita_un_tema_activo=Precisa dun tema activo
+necesita_un_tema_vectorial_activo=Precisa dun tema vectorial activo
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=Necesita unha capa vectorial activa
+new_dxf=Novo DXF
+new_field=Novo campo
+new_layer=Nova capa
+new_layer_name=Nome da nova capa
+new_postgis=Novo postgis
+new_shp=Novo shp
+next=Seguinte
+Next=Seguinte
+next_point_or_end=Seguinte punto ou rematar[E]
+next_previous_add_del_cancel=Punto, Seguinte v\u00e9rtice[S], Anterior[A], Engadir[I] ou Eliminar[E]
+ninguna_impresora_configurada=Ningunha impresora configurada
+Nivel_de_transparencia=Nivel de transparencia
+no=Non
+NO=NON
+no_activos=Non activos
+no_adjust_grid=Non axustar \u00e1 grella
+No_de_intervalos=N\u00ba de intervalos
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=Non se atopou a lista de idiomas preferidos.Quiz\u00e1s non se lembrou de inicializar a clase
+no_hay_ninguna_capa_seleccionada=
+no_hay_ninguna_capa_seleccionado=Non hai ningunha capa seleccionada
+no_layers_found=Non hai capas dispo\u00f1ibles
+No_mostrar=Non amosar a capa cando a escala
+No_mostrar_la_capa_cuando_la_escala=Non amosar a capa cando a escala
+no_puede_continuar=
+No_reconocido=Non reco\u00f1ecido
+No_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+No_se_pudo_obtener_la_tabla_de_la_capa=Non se puido obter a t\u00e1boa da capa
+No_Shape=Este Layer non \u00e9 do tipo Shape
+No_usar_buffer_redondeado=Non usar borde redondeado
+no_visibles=Non visibles
+nombre=Nome
+Nombre=Nome
+nombre_capa=Nome da capa
+nombre_cobertura=Nome cobertura
+nombre_feature=Nome da Capa
+Nombre_que_se_le_dara_al_zoom=Nome que se lle dar\u00e1 ao zoom
+nombre_sesion=Nome da sesi\u00f3n
+Nombres=Nomes
+none_selected=Ning\u00fan seleccionado
+normal=Normal
+north=Norte
+not_available=Non dispo\u00f1ible
+not_visible=Non visible
+Nueva_tabla=Nova t\u00e1boa
+nuevo=Novo
+Nuevo_conjunto=Novo conxunto
+nuevo_proyecto=Novo proxecto
+nuevo_tamano_fuente=Novo tama\u00f1o de fonte
+nuevo_tooltip=Crea un novo proxecto
+num_bandas=N\u00famero de bandas
+num_columnas=N\u00famero de columnas
+num_filas=
+Num_intervalos=
+Numero_anillos_concentricos=N\u00famero de aneis conc\u00e9ntricos
+Numero_de_elementos_seleccionados=
+Numero_de_segmentos_por_cuadrante=
+numero_incorrecto=
+N\u00fam_intervalos=
+Obtener_mas_proximo=Usar o m\u00e1is pr\u00f3ximo
+of=de
+ogc_mapcontext_file=OGC Web Map Context
+ok=Aceptar
+Ok=Aceptar
+onSharpening=Activar pansharpening
+opacidad=Opacidade
+opciones=Opci\u00f3ns
+open_first_time=Abrir coa vista
+open_layers_as=Abrir as capas como
+Operacion_de_overlay=Operaci\u00f3ns de solape
+Operaciones_adicionales=Operaci\u00f3ns adicionais
+optinos.network.click_to_test_connection=
+options=Opci\u00f3ns
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.general.select_theme=
+options.network.status=
+orientacion=Orientaci\u00f3n\:
+origen_de_datos=Origen de dades
+Origen_de_datos=Orixe dos datos
+Origen_de_Datos=Orixe dos datos\:
+Otros=Outros
+out_circle=F\u00f3ra da circunferencia
+out_polygon=F\u00f3ra do pol\u00edgono
+out_rectangle=F\u00f3ra do rect\u00e1ngulo
+owner=Propietario
+page=P\u00e1xina
+paint=Debuxar o resultado
+parameters=Par\u00e1metros
+parametros=Par\u00e1metros
+Parametros=Par\u00e1metros
+password=Chave
+paste=Pegar
+paste_elements=
+path=Ruta
+pegar=
+Perimetro=Per\u00edmetro
+period=Per\u00edodo
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa c\u00f3 valor dun determinado campo
+Personalizado=Persoalizado
+Pies=P\u00e9s
+pila_de_comandos=P\u00eda de comandos
+pixeles=p\u00edxeles
+pixels=pixels
+Plain=
+plantilla=
+plegar_despl=Plegar/Desplegar
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=D\u00faas clases c\u00f3 mesmo nome no plugin
+PluginClassLoader.Error_reading_file=Erro l\u00e9ndo arquivo\:
+pluginNotFound=Non t\u00e9s ningunha extensi\u00f3n para cargar recursos deste tipo
+pluginNotFoundTitle=Carga de capas
+PluginServices.Bug_en_el_codigo=Bug no c\u00f3digo
+PluginServices.Error_grave_de_la_aplicacion=Erro grave da aplicaci\u00f3n. \u00c9 conveniente que gardes os teus datos e saias da aplicaci\u00f3n
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Non se atopou o recurso de traducci\u00f3ns
+PluginServices.No_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Non se puido activar o reloxio de area
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Non se puido restaurar o cursor do rato
+PluginServices.Procesando=Procesando...
+png=Arquivos png
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+poligono=Pol\u00edgono
+polilinea=polili\u00f1a
+polygon=Pol\u00edgono
+polygon_=
+polygon_type=Tipo Pol\u00edgono
+polyline=Polili\u00f1a
+polyline_=POLILI\u00d1A
+poner_capas_a=
+poner_temas_a=
+por_debajo_de=por debaixo de\:
+por_encima_de=por riba de\:
+Por_favor_active_el_tema=
+Por_favor_active_la_capa=Por favor active a capa
+posicion_linea=Posici\u00f3n da li\u00f1a
+postcode=C\u00f3digo postal
+postgisColumn=Postgis
+postgisError=Ocorr\u00e9u un erro ao cargar a base de datos
+postgisLoad=Carga de Postgis
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferences=
+preferencias=
+Preferencias=
+preparar_pagina=Prepara p\u00e1xina
+Preparar_pagina=Prepara p\u00e1xina
+presentacion=Presentaci\u00f3n
+previous=Anterior
+previsualizacion=Previsualizaci\u00f3n
+Previsualizacion=Previsualizaci\u00f3n
+Previsualizacion_de_simbolo=
+primero=Primeiro
+prioridad=Prioridade
+procesar=
+process_tip=
+properties=Propiedades
+property=Propiedade
+propiedad=
+propiedades=Propiedades
+propiedades_cajetin=Propiedades da cadro de rotulaci\u00f3n
+propiedades_capa=Propiedades da capa
+propiedades_de_la_capa=Propiedades da capa
+Propiedades_de_la_Capa=Propiedades da capa
+propiedades_del_tema=
+Propiedades_del_Tema=Propiedades do tema
+Propiedades_escala_grafica=Propiedades da escala gr\u00e1fica
+propiedades_grafico=Propiedades del gr\u00e1fico
+propiedades_mapa=Propiedades do mapa
+propiedades_marco_imagenes=Propiedades do marco de imaxes
+propiedades_marco_leyenda=Propiedades do marco de lenda
+propiedades_marco_vista=Propiedades do marco de vista
+propiedades_raster=Propiedades do raster
+propiedades_sesion=Propiedades da sesi\u00f3n
+propiedades_tabla=Propiedades da t\u00e1boa
+propiedades_tema=
+Propiedades_texto=Propiedades do texto
+propiedades_vista=Propiedades da vista
+props=Propiedades
+protocolsGroup=Protocolos
+provider=Proveedor
+prueba_conexion=Proba da conexi\u00f3n
+puerto=Porto
+Pulgadas=Pulgadas
+punto=Punto
+puntos=Puntos
+purpose=
+pwd=Contrasinal
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=Est\u00e1 seguro de que quere continuar?
+quitar=Quitar
+Quitar=Quitar
+Quitar_capa=Quitar capa
+quitar_enlaces=Quitar ligaz\u00f3ns
+Quitar_todos=Quitar todos
+Quitar_Todos=Quitar todos
+quitar_uniones=Quitar uni\u00f3ns
+rango_de_escalas=Rango de escalas
+Rango_de_escalas=Rango de escalas
+raster=Raster
+raster_layer=Capa raster
+Rasterfiles=Arquivos raster
+realce=Realce
+realces=
+realmente_desea_guardar=Realmente desexa gardar?
+Recortar=Recortar
+Recortar._Introduccion_de_datos=Recortar. Introducci\u00f3n de datos
+recorte=Recorte
+recorte_colas=Recorte colas
+recorte_vista=Recorte a vista
+recta=Recta
+rectangle=
+rectangle_=
+rectangulo=Rect\u00e1ngulo
+recuento=Reconto
+Recuperar_leyenda=Recuperar lenda
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zooms
+redo=Refacer
+redo_error=Erro accedendo aos Drivers para refacher un comando
+reference=Referencia
+refrescar=Refrescar
+refresh_capabilities=Refrescar cach\u00e9
+refresh_capabilities_tooltip=Marque esta casilla para sobreescribir os datos anteriores.
+registros=Rexistros
+registros_seleccionados_total=Total rexistros seleccionados
+rehacer=Refacer
+rellenar_marco_vista=Rechear marco da vista
+relleno=Reenchido\:
+remove=Quitar
+remove_all=Quitar todas
+remove_column=Elimina columna
+remove_elements=
+remove_geometry=
+remove_row=Elimina fila
+remove_rows=
+renombrar=Renomear
+repeated_layer_was_not_added=Non se engad\u00edu a capa repetida
+reproyectar_aviso=A proxecci\u00f3n da capa non \u00e9 igual que a da vista\nAVISO\: Pode ser inexacto con algunhas transformaci\u00f3ns.\nPor favor, lea a documentaci\u00f3n
+reproyectar_pregunta=Desexa reproxectar?
+resolucion=Resoluci\u00f3n
+resolucion_resultado=Resoluci\u00f3n do resultado\:
+resolution=Resoluci\u00f3n
+resourceLinkColumn=Ligaz\u00f3n
+resourceShowColumn=Ver
+resourceTypeColumn=
+respuesta_error_servidor=Non se puido obter a cobertura
+resto_valores=Resto de valores
+restore=
+restrictArea=Restrinxir a \u00e1rea de b\u00fasqueda
+results=Resultados
+resutsByPage=Resultados por p\u00e1xina
+retry=Reintentar
+rootName=Ra\u00edz
+rotate=
+rotate_=
+salir=Sa\u00edr
+Salir=Sa\u00edr
+salir_tooltip=Sa\u00edr
+salvar=Gardar
+salvar_raster=Gardar a raster xeoreferenciado
+Sample=Exemplo
+save_to_ascii=Exportar t\u00e1boa de puntos a arquivo de texto.
+save_to_xml=Garda a arquivo XML (.grf)
+scale=Escalar
+scale_=ESCALAR
+scale_limits=L\u00edmite da escala
+scale_limits_status=Estado dos l\u00edmites da escala
+scaleAny=calquera
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=>5.000
+Se_superponen_a=Sobrep\u00f3\u00f1ense a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Vaise ter en conta para borrar os rexistros dende
+se_van_a_guardar_=
+Sean_disjuntos_a=sexan disxuntos a
+Sean_iguales_a=sexan iguais a
+search_results=Resultados da b\u00fasqueda
+searchButton=Buscar
+seleccion=Selecci\u00f3n
+seleccion_campos=Seleccione os campos
+seleccion_de_campos=Selecci\u00f3n de campos
+seleccion_fuente=Selecci\u00f3n de fonte
+Seleccion_por_capa=
+Seleccion_por_tema=Selecci\u00f3n por tema
+selecciona_sistema_de_referencia=
+seleccionar=
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_coberturas=Seleccionar coberturas
+seleccionar_CRS=Seleccionar CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar das capas activas os elementos que\:
+Seleccionar_del_conjunto=Seleccionar do conxunto
+Seleccionar_Directorio=
+seleccionar_fichero=Seleccionar arquivo
+Seleccionar_fichero=Seleccionar arquivo
+seleccionar_formato=Seleccionar formato
+seleccionar_parametros=Seleccionar par\u00e1metros
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00e1ngulo
+seleccionar_puntos=Seleccionar puntos
+seleccionar_srs=Seleccionar SRS
+seleccionar_tiempo=Seleccionar tempo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccionar o campo polo que ligar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccione unha data...
+seleccione_tabla=Seleccione a t\u00e1boa
+seleccione_tabla_a_enlazar=Seleccione a t\u00e1boa a ligar
+seleccione_tabla_origen=Selecciona a t\u00e1boa de orixe da join
+select=
+select_all=Seleccionar todo
+select_driver=Seleccione o driver
+select_features=Selecciona as capas
+select_fields=Seleccionar campos da capa
+select_formats=Seleccionar formatos
+select_from_point=Seleccionar a partir dun punto
+select_geom_field=Selecciona o campo que leva a xeometr\u00eda
+select_geometry=
+select_geometry_type=Seleccione o tipo de xeometr\u00eda
+select_handlers=Seleccionar handlers
+select_layers=Seleccionar capas
+select_none=Quitar todos
+select_other_geometry_or_end=
+select_unique_field=Seleccione o campo \u00fanico
+selectBandaRefinado=Seleccionar Banda de Refinado
+selected_dimensions=Dimensi\u00f3ns seleccionadas
+selected_from_list=Escollido da lista
+selected_layer=
+selected_layers=Capas seleccionadas
+selected_parameters=Par\u00e1metros seleccionados
+selected_themes=Temas seleccionados
+selectfromview=
+selection=
+selection_=SELECCIONAR
+selection_color=Cor da selecci\u00f3n
+server=Servidor
+server_abstract=Resumo do servidor
+server_cant_render_layers=Este servidor non pode renderizar estas capas xuntas. \nFaga petici\u00f3ns separadas para cada capa.
+server_doesnt_support_selected_image_format=O servidor non proporciona imaxes no formato escollido
+server_has_no_services=O servidor non ofrece ning\u00fan servicio
+server_provides_no_srs__scale_data_may_be_wrong=O servidor non proporciona sistema de coordenadas. A informaci\u00f3n sobre escalas pode estar errada.
+server_timeout=Rematou o tempo de conexi\u00f3n ao servidor
+server_title=T\u00edtulo do servidor
+server_type=Tipo de servidor
+server_version=Versi\u00f3n do servidor
+serverReply=Resposta do servidor
+serverURL=Introuza a direcci\u00f3n onde se atopa o servidor de cat\u00e1logo
+serverURLCat=Introduza a direcci\u00f3n  ode se atopa o servidor de nomencl\u00e1tor
+service=Servicio
+service_does_not_exist=Servicio non dispo\u00f1ible
+service_info=Informaci\u00f3n do servicio
+service_name=Nombe do servicio
+service_type=Tipo de servicio
+service_type_not_supported=Tipo de servicio non soportado polo cliente
+servicename_selection_mode=Selecci\u00f3n do nome do servicio
+servidor=Servidor
+Servidor=Servidor
+servidor_wcs_no_responde=O servidor seleccionado non resposta
+set=Establecer
+settings=Axustes
+settings_editor=Editor de axustes
+shape_seleccion=Exportar selecci\u00f3n.
+Shapefile=Shapefile
+Shapefiles=Arquivos .SHP
+show_grid=Amosar grella
+show_layer_ids=Amosar ID das capas
+show_layer_names=Amosar nomes de capas
+show_this_dialog_next_startup=
+shp_files=Arquivos .shp
+siempre=
+siguiente=Seguinte
+Siguiente=Seguinte
+simbolo=
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbolo_Unico=S\u00edmbolo \u00fanico
+Simbologia=Simbolox\u00eda
+simple=Simple
+simplificar=Simplificar
+sin_realce=Sen realce
+sin_titulo=Sen t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar a cor do bordo coa de reenchido\:
+single_value=Valor simple
+size=Tama\u00f1o
+Size=
+sobre_la_barra=Sobre a barra
+Sobreescribir_fichero=
+Solo_disolver_adyacentes=So disolver adxacentes
+Solo_para_capas_vectoriales=S\u00f3 para capas vectoriais
+splain=Curva
+SplashWindow.Iniciando=Iniciando ...
+square=Esquina
+srs=Srs
+start_edition=Comenzar edici\u00f3n
+state_or_province=Estado/Provincia
+statistics=Estat\u00edsticas
+status=Estado
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3n iniciada
+stop_edition=Rematar edici\u00f3n
+stretch=Estirar
+stretch_=Estirar
+style=Estilo
+Style=Estilo
+Subir_capa=Subir capa
+Sum=Sumatorio
+suma=Suma
+Superior=Superior
+suprimir_objetos_origen=
+symmetry=Simetr\u00eda
+symmetry_=
+S\u00edmbolo=S\u00edmbolo
+Tabla=T\u00e1boa
+Tabla_de_Atributos=T\u00e1boa de atributos
+Tabla_de_prueba=T\u00e1boa de proba
+tablas=T\u00e1boas
+Tablas=Taules
+table=T\u00e1boa
+tag=tag
+tamano=Tama\u00f1o\:
+tamano_metros=Tama\u00f1o en metros\:
+tamano_pagina=Tama\u00f1o da p\u00e1xina\:
+tamano_posicion=tama\u00f1o/posici\u00f3n
+tamanyo_borde=Tam\u00f1o do bordo
+tamanyo_fuente=Tama\u00f1o da fonte
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+tarea_en_progreso=Tarea En progreso
+telephone=Tel\u00e9fono
+Tema=Capa
+Terminar=Rematar
+terminate=Rematar
+test_now=
+texto=Texto
+theme=Tema
+this_layer_was_already_added=Esta capa xa se engadira
+Tiempo=Tempo
+Tile=Mosaico
+tile_tooltip=Organiza as fiestras en mosaico
+time=Tempo
+timeout=Rematou o tempo
+tipo_dato=Tipo dato
+tipo_de_intervalo=Tipo de intervalo
+Tipo_de_intervalos=Tipo de intervalos
+tipo_de_leyenda=Tipo de lenda
+Tipo_de_leyenda=Tipo de lenda
+Tipo_de_linea=Tipo de li\u00f1a
+tipo_fichero_proyecto=Arquivo de proxecto gvSIG (*.gvsproj)
+tipo_leyenda=Arquivos de tipo de lenda (*.GVL)
+tipo_linea=Tipo de Li\u00f1a\:
+Tipo_no_reconocido=Tipo non reco\u00f1ecido
+tipo_relleno=Tipo de Reenchido\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+title=T\u00edtulo
+titulo=Xestor de proxectos
+titulo_confirmar=Confirmaci\u00f3n
+titulo_consola=Consola de informacion
+titulo_fframetext=T\u00edtulo do campo de texto
+to=Hata
+to_annotation=Transforma a capa de anotaci\u00f3ns
+to_palette=
+toda_la_tabla=Toda a t\u00e1boa
+todos=Todos
+tooltips_enabled=Tool tips activas
+Toquen=toquen
+total=
+transparencia=Transparencia
+Transparencia=Transparencia
+transparencia_pixel=Transparencia por p\u00edxel
+Triangulo=Tri\u00e1ngulo
+trim=Recortar
+type=Tipo
+ultimo=Derradeiro
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Ten que seleccionar polo menos unha capa
+unable_to_findout_server_version=Non se determinou a versi\u00f3n do servidor
+unable_to_findout_service_type=Non se determinou o tipo de servicio
+undo=Desfacer
+undo_error=Erro ao desfacer un comando
+ungroup=Desagrupar
+unidades=Unidades\:
+Unidades=Unidades\:
+Union=Uni\u00f3n
+Union._Introduccion_de_datos=Uni\u00f3n. Introducci\u00f3n de datos
+unite_separate=Unir/Separar
+units=Unidades
+unknown=Desco\u00f1ecido
+unknown_response_format=Formato de resposta desco\u00f1ecido
+unsupported_map_context_version=
+unsupported_version=Versi\u00f3n non soportada
+untitled=Sen t\u00edtulo
+update_catalog=Refrescar lista de servicios
+upperCoordinates=Superiores
+us_country=Estados Unidos de Am\u00e9rica
+Usar_indice_espacial=Usar \u00edndice espacial
+Usar_los_campos_de_la_capa=Usar os campos da capa
+usar_marco=Empregar marco
+usar_rango=Empregar un rango
+Usar_solamente_los_elementos_seleccionados=Usar soamente os elementos seleccionados
+usar_titulo=Empregar t\u00edtulo
+use_custom_size=Tama\u00f1o personalizado
+use_full_extent=
+use_interpolation_method=
+use_view_size=Tama\u00f1o da vista
+username=Usuario
+usuario=Usuario
+utilizar_margenes_impresora=Empregar m\u00e1rxenes de impresora
+vacia=Baleira
+valor=Valor
+Valor=Valor
+Valor_azul=Valor azul
+Valor_Bandas=Valor bandas
+valor_pixel=Valor de pixel
+Valor_rojo=Valor rermello
+Valor_verde=Valor verde
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+Valores_Unicos=Valores \u00fanicos
+value=Valor
+value_not_found=Non se atopou o valor
+varianza=Varianza
+vector_layer=Capa vectorial
+vector_type=Tipo vectorial
+vectorial=Vectorial
+ventana=Fiestra
+Ventana=Fiestra
+ventana_proyecto=Vent\u00e1 de proxecto
+Ver=Ver
+ver_tabla_atributos=Ver T\u00e1boa de atributos
+ver_tooltip=Amosa a vent\u00e1 de proxecto
+version=Versi\u00f3n
+version_conflict=Conflicto de versi\u00f3n
+vertical=Vertical
+vertical_space=
+vertices=
+view=Vista
+visible=Visible
+visibles=Vis\u00edbeis
+Vista=Vista
+vistas=Vistas
+visualizacion=Visualizaci\u00f3n
+Visualizacion=Visualizaci\u00f3n
+visualizar_cuadricula=Visualizar malla
+warning=Aviso
+warnings=Avisos
+wcs_properties=Propiedades de WCS
+WCS_properties=Propiedades do WCS
+wcs_server_error=Erro no servidor WCS
+wcsColumn=Cobertura
+wcsError=Ocorr\u00e9u un erro ao cargar a cobertura
+wcsLoad=Carga de WCS
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=
+wfsColumn=Entidade
+wfsError=Ocorr\u00e9u un erro ao cargar a feature (entidade)
+wfsLoad=Carga de WFS
+width=Ancho
+Window=Fiestra
+WMS=WMS
+wms_not_queryable=Este servidor non acepta petici\u00f3ns deste tipo
+wms_properties=Propiedades WMS
+wms_server_error=Erro do servidor WMS
+wms_transparency=Transparenza
+wmsColumn=Mapa
+wmsError=Ocorr\u00e9u un erro ao cargar o mapa
+WMSLayer=Capa WMS
+wrong_url=Direcci\u00f3n URL non v\u00e1lida
+xmax=xmax
+xmin=xmin
+xrange=Rango en X
+Yardas=Yardas
+yes=Si
+YES=S\u00cd
+ymax=ymax
+ymin=ymin
+yrange=Rango en Y
+zoom=Zoom
+Zoom=Zoom
+Zoom_a_la_capa=Zoom \u00e1 capa
+Zoom_Acercar=Zoom acercar
+Zoom_al_Tema=
+Zoom_Alejar=Zoom afastar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre a vista
+Zoom_Mas=Zoom m\u00e1is
+zoom_mas_vista=Zoom m\u00e1is vista
+Zoom_Mas_Vista=Zoom m\u00e1is sobre a vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre a vista
+Zoom_pixel=Zoom pixel
+Zoom_previo=
+Zoom_Previo=Zoom previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom ao seleccionado
+Zoom_sgte=
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_ca.properties	(revision 42196)
@@ -0,0 +1,1603 @@
+#Translations for language: ca
+#Tue Oct 24 14:07:27 CEST 2006
+(escala_maxima)=(escala m\u00e0xima)
+(escala_minima)=(escala m\u00ednima)
+_(Etiquetas_estandar)=(Etiquetes est\u00e0ndard)
+_(Intervalos)=(Intervals)
+_(Simbolo_unico)=(S\u00edmbol \u00fanic)
+_(Valores_unicos)=(Valors \u00fanics)
+__valenciano=Valenci\u00e0
+__espacio_vertical=Espai vertical\:
+__lineas=l\u00ednies
+__proyeccion_actual=Projecci\u00f3 actual\:
+__redimensionar_texto_escala=Redimensione el text a escala amb la vista
+__seleccion_de_fuente=Selecci\u00f3 de font
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=Vista nova
+abajo=Avall
+abrir=Obrir
+Abrir=Seleccionar
+Abrir_Geoproceso=
+Abrir_Imagen=Obrir Imatge
+abrir_plantilla=Obrir plantilla
+abrir_proyecto=Obrir projecte
+abrir_tooltip=Obri un projecte existent
+Abrir_una_capa=Obrir una capa
+abstract=Resum
+accept=Acceptar
+accept_tip=
+Accion_Predefinida=Acci\u00f3 predefinida
+aceptar=Acceptar
+Aceptar=Acceptar
+acerca_de=Sobre...
+activa_la_ventana=Activa la finestra
+activar=Activar
+activar_regla=Activar regla
+activo=Actiu
+activos=Actius
+add=Afegir
+add_again_question=Afegir de nou?
+add_all=Afegir totes
+add_field=Afegir camp
+add_layer=Afegir capa
+add_rows=
+add_vertex=Afegir v\u00e8rtex
+addlayer=Afegir capa
+address=Adre\u00e7a
+address_type=Tipus d'adre\u00e7a
+adjust_grid=Ajustar a la graella
+adjust_transparency=Ajustar transpar\u00e8ncia
+advanced=Avan\u00e7ada
+advanced_settings=Opcions avan\u00e7ades
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capes
+agrupar_graficos=Agrupar gr\u00e0fics
+agrupar_linea=Agrupar l\u00ednia gr\u00e0fica amb gr\u00e0fics
+Ajustar_cobertura_wcs=Ajusteu la cobertura WCS
+Ajustar_transparencia=Ajustar transpar\u00e8ncia
+ajustes_linea_grafica=Ajustos de l\u00ednia gr\u00e0fica
+Al_leer_la_leyenda=En llegir la llegenda
+alerta=Av\u00eds
+algoritmo=Algoritme
+alias=\u00c0lies
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alineament\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00e0fics
+allWords=Totes les paraules
+alta=Alta
+alto=Alt
+altura=Altura\:
+Altura_fija_de_texto=Altura fixa de text
+ambito=\u00c0mbit
+ampl_extent=
+Anadir=Afegir
+Anadir_al_conjunto=Afegir al conjunt
+Anadir_capa=Afegir capa
+Anadir_Capa=Afegir capa
+Anadir_capa_de_eventos=Afegir capa d'esdeveniments
+Anadir_tema_de_eventos=Afegir tema d'esdeveniments
+anadir_titulo=Afegir t\u00edtol
+Anadir_todos=Afegir tots
+ancho=Ample
+ancho_alto=Amplada al\u00e7ada
+Ancho_Contorno=Ample contorn
+Ancho_de_linea=Ample de l\u00ednia
+anchura=Ampl\u00e0ria\:
+angulo_rotacion=Angle de rotaci\u00f3\:
+anterior=Anterior
+Anterior=Anterior
+anyResult=La recerca no ha produ\u00eft cap resultat
+anyWord=Qualsevol paraula
+Aplicar=Aplicar
+apply=Aplicar
+Apply=Aplicar
+arc=
+arc_=ARC
+Archivo=Fitxer
+Archivos_de_Disco=Fitxers de disc
+arcims_catalog_error=Error en rebre el cat\u00e0leg del servidor ArcIMS
+arcims_extent_error=Error en obtindre l'extensi\u00f3 del servici ArcIMS
+arcims_legend_error=Error en processar la llegenda
+arcims_no_features=No s'hi han trobat geometries
+arcims_no_server=No s'hi ha trobat un servidor ArcIMS v\u00e0lid
+arcims_properties=Propietats ArcIMS
+arcims_remote_not_found=No s'hi ha trobat el fitxer remot
+arcims_server_error=Error en el servidor ArcIMS
+arcims_server_status_col_name=Estat
+arcims_server_timeout=S'ha arribat al temps m\u00e0xim d'espera de resposta del servidor ArcIMS
+arcims_server_type_col_name=Tipus
+Area_de_influencia=\u00c0rea d'influ\u00e8ncia
+Area_de_influencia_definida_por_un_campo=\u00c0rea d'influ\u00e8ncia definida per un camp
+Area_de_influencia_definida_por_una_distancia=\u00c0rea d'influ\u00e8ncia definida per una dist\u00e0ncia
+area_trabajo=\u00c0rea de treball
+Areas_de_influencia=\u00c0rea d'influ\u00e8ncia
+Areas_de_influencia._Introduccion_de_datos=
+array_error=Error en les dimensions de les matrius
+arriba=Amunt
+ascending_order=Orde ascendent
+ascending_order_tooltip=S'ordena pel camp seleccionat en orde ascendent
+asignar_coordenadas=Assignar Coordenades
+aspect=Configuraci\u00f3 d'aspecte
+Atributo=Atribut
+Atributos_Numericos=Atributs num\u00e8rics
+attributeName=
+attributes=Atributs
+attributeType=
+automatico=Autom\u00e0tic
+available_layers=Capes disponibles
+available_services=Servicis disponibles
+aviso_sin_extent_de_referencia=Per a usar esta opci\u00f3 necessiteu tindre com a  m\u00ednim una capa ja afegida que servisca de refer\u00e8ncia.
+Ayuda=Ajuda
+back=Anterior
+Back=Anterior
+background_color=Color de fons
+baja=Baixa
+Bajar_capa=Baixar capa
+bandas=Bandes
+bands=Bandes
+barra=Barra
+base=base
+base_datos=Base de dades
+bd=bd
+bmp=Fitxers de tipus bmp
+Bold=
+borra_seleccion=Esborrar selecci\u00f3
+borrador=Esborrany
+borrar=Esborrar
+borrar_todos=Esborrar tots els punts
+borrar_uno=Esborrar punt seleccionat
+box=
+break_=Break
+brillo=Brillantor
+brillo_y_contraste=Brillantor i contrast
+browse=Examinar
+BRX=BRX\:
+BRY=BRY\:
+buffer=\u00c0rea d'influ\u00e8ncia
+cajetin=
+calcular_errores=Calcular errors autom\u00e0ticament
+Calcular_intervalos=Calcular intervals
+calidad=Qualitat
+Cambio_Color=Canvi color
+Cambio_de_estilo=Canvi d'estil
+Cambio_Estilo=Canvi estil
+cambio_nombre=Canvi de nom
+Cambios_de_estilo=Canvis d'estil
+campo=Camp
+Campo=Camp
+campo_altura_texto=Camp d'altura de text\:
+Campo_clasifica=Camp de classificaci\u00f3
+Campo_de_clasificacion=Camp de classificaci\u00f3
+campo_de_documentos_asociados=Camp de documents associats
+Campo_de_etiquetado=Camp d'etiquetat
+Campo_para_disolver=Camp per a dissoldre
+Campos=Camps
+cancel=Cancel\u00b7lar
+Cancel=Cancel\u00b7lar
+cancel_edition=Cancel\u00b7lar l'edici\u00f3
+cancel_tip=
+cancelar=Cancel\u00b7lar
+Cancelar=Cancel\u00b7lar
+cancelSearchButton=Cancel\u00b7la
+cannotReproject=No es pot reprojectar este sistema de coordenades
+cant_connect=No es pot realitzar la connexi\u00f3
+cant_connect_wfs=No es pot realitzar la connexi\u00f3 amd WFS
+cantLoad=No es pot carregar la capa WFS
+capa=
+Capa=Capa
+capa_exportada=
+capa_importada=Capa importada. Voleu crear l'\u00edndex espacial?
+capas=Capes
+Capas=Capes
+Capas_del_directorio=Capes del directori
+Capas_del_localizador=Capes del localitzador
+capas_edition_cache=
+capaWMS=CapaWMS
+caracteres_erroneos=Car\u00e0cters erronis en la cadena d'entrada
+cargar=Carregar
+cargar_fichero=Carregar Fitxer
+cargar_leyenda=Carregar llegenda
+cargar_sin_georef=Carregar imatges sense georeferenciar
+cartografico=Cartogr\u00e0fic
+Cascada=Cascada
+cascada_enable=Ha d'haver-hi almenys una finestra oberta
+cascada_tooltip=Organitzar les finestres en cascada
+catalog_search=Recerca de geodades
+cathegory=Categoria
+cathegoryAny=Qualsevol
+cathegoryBiota=Biota
+cathegoryBoundaries=L\u00edmits
+cathegoryClimatologyMeteorologyAtmosphere=Atmosfera climatol\u00f2gica i meteorol\u00f2gica
+cathegoryEconomy=Economia
+cathegoryElevation=Elevaci\u00f3
+cathegoryEnvironment=Medi ambient
+cathegoryFarming=Agricultura
+cathegoryGeoscientificInformation=Informaci\u00f3 geocient\u00edfica
+cathegoryHealth=Salut
+cathegoryImageryBaseMapsEarthCover=Cobertura de la terra amb mapes
+cathegoryInlandWaters=Aig\u00fces interiors
+cathegoryIntelligenceMilitary=Intel\u00b7lig\u00e8ncia militar
+cathegoryLocation=Localitzaci\u00f3
+cathegoryOceans=Oceans
+cathegoryPlanningCadastre=Planejament cadastral
+cathegorySociety=Societat
+cathegoryStructure=Estructures
+cathegoryTransportation=Transport
+cathegoryUtilitiesCommunication=Comunicaci\u00f3 i utilitats
+causa_error_desconocida=Error inesperat del servidor
+Centimetros=Cent\u00edmetres
+Centrar_la_Vista_sobre_un_punto=Centrar la Vista sobre un punt
+centrar_punto=
+cerrar=Tancar
+Cerrar=Tancar
+change_before=
+change_behind=
+change_height=
+change_server=Canviar Servidor
+change_service=Canviar Servici
+change_width=Cambiar ampl\u00e0ria
+choose_image_format=Elegisca format d'imatge
+chooseAttribute=Elegix un atribut per a fer la recerca
+circle=Cercle
+circle_=CERCLE
+circulo=Cercle
+Circulo=Cercle
+circumscribed=Circumscrit
+city=Ciutat
+clave=Clau
+clear=Netejar
+close=Tancar
+close_polyline=Tancar la polil\u00ednia
+Cobertura_de_datos=Capa de dades
+Cobertura_de_entrada=Capa d'entrada
+Cobertura_de_interseccion=Capa d'intersecci\u00f3
+Cobertura_de_recorte=Capa de retall
+Cobertura_de_salida=Capa d'eixida
+Cobertura_para_unir=Capa per a unir
+Coberturas=Cobertures
+Coberturas_de_entrada=Capes d'entrada
+coincidir_tamano=Coincidir dimensi\u00f3\:
+coincidir_tamanyo=
+colocar_a_margenes=Col\u00b7locar amb refer\u00e8ncia a m\u00e0rgens.
+colocar_alrededor_seleccionados=Col\u00b7locar al voltant dels gr\u00e0fics seleccionats.
+colocar_alrededor_todos=Col\u00b7locar al voltant de tots els gr\u00e0fics.
+colocar_delante=Col\u00b7locar davant
+colocar_detras=Col\u00b7locar darrere
+color=Color\:
+Color_Contorno=Color contorn
+Color_de_la_Linea=Color de la l\u00ednia\:
+Color_de_Relleno=Color de farciment
+Color_final=Color final\:
+Color_inicial=Color inicial\:
+Color_inicio=Color d'inici
+color_texto=Color del text\:
+column_not_found=No s'ha trobat la columna
+comentarios=Comentaris
+commands_stack=Pila de comandaments
+complex_selection=Selecci\u00f3 complexa
+complex_selection_=SELECCI\u00d3 COMPLEXA
+compress=Compressi\u00f3
+concordancia=Concordan\u00e7a
+conectar=Connectar
+conection=Connexi\u00f3
+conexion_correcta=Connexi\u00f3 correcta
+configuracion_andami_tooltip=Configuraci\u00f3 Andami
+configurar=Configurar
+Configurar=Configurar
+configurar_ANDAMI=Di\u00e0leg de configuraci\u00f3 d'ANDAMI
+configurar_localizador=Configurar localitzador
+Configurar_localizador=Configurar localitzador ...
+configurar_todas_las_extensiones=
+confirm_gid=Confirmar gid
+confirmacion=Confirmaci\u00f3
+confirmar_borrar=Est\u00e0 segur que desitja esborrar l'element?
+connect=Connectar
+connect_error=Error de connexi\u00f3
+connectButton=Connecta
+connection_name=Nom de la connexi\u00f3
+conservar_escala_visualizacion=Conservar escala de visualitzaci\u00f3
+Consola=Consola
+consulta=Consulta
+contact_info=Informaci\u00f3 de contacte
+contact_organization=Organitzaci\u00f3
+contact_person=Nom
+contact_position=C\u00e0rrec
+Contengan=Ontinguen
+contiene_espacios_en_blanco=
+contraste=Contrast
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=
+coor_geograficas=Coordenades geogr\u00e0fiques
+coord_system=Sistema de coordenades
+coordenadas_vacias=Coordenades buides
+coordinates=Coordenades
+coordinatesContains=cont\u00e9
+coordinatesEnclose=inclou
+coordinatesEqual=igual
+coordinatesFullyOutsideOf=est\u00e0 totalment fora de
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Retallar
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=Pa\u00eds
+coverage=Cobertura
+covered_extension=Cobertura de l'extensi\u00f3
+Crear_Buffer=Crear \u00e0rea d'influ\u00e8ncia
+Crear_Indice=Crear \u00edndex espacial
+Crear_Indice_Intro=La creaci\u00f3 d'indexs espacials pot optimar la realitzaci\u00f3 de consultes espacials
+Crear_Indice_Pregunta_1=Vol crear un \u00edndex espacial per a la capa?
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Crear fitxer de georeferenciaci\u00f3 (worldfile)
+created_with=Creat amb
+creation_date=Data de creaci\u00f3
+credentials=Autenticaci\u00f3
+cross_circle=Intersecta/cont\u00e9 la circumfer\u00e8ncia
+cross_polygon=Intersecta/Cont\u00e9 el pol\u00edgon
+Crucen_con=Encreuen amb
+Cruz=Creu
+Cuadrado=Quadrat
+cuadro_no_asociado=
+cuando_activo=Si est\u00e0 Actiu
+current=actual
+current_scale=Escala actual
+cut=Retallar
+Dado_un_campo_de_atributos=Donat un camp d'atributs
+data_origin=Origen de dades
+database=Nom de la base de dades
+de=de
+De=de
+debe_estar_activada=ha d'estar activada
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Ha de seleccionar les capes de les quals vol obtindre informaci\u00f3
+decimal_degrees=Graus decimals
+default=Per defecte
+default_name=Capa WFS
+define_fields=Definix els camps
+define_point=Definisca el punt
+defined_by_user=Definit per l'usuari
+defined_by_view_extent=Extensi\u00f3 de la vista
+dehacer=Desfer
+del=Eliminar
+delete_field=Esborrar el camp
+densityfication=Densificaci\u00f3
+Dentro=dins del pol\u00edgon
+Dentro_y_fuera=Dins i fora del pol\u00edgon
+Derecha=Dreta
+Derecho=Dret
+desactivar_capa=
+desactivar_puntos=
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e0fics
+descending_order=Orde descendent
+descending_order_tooltip=S'ordena pel camp seleccionat en orde descendent
+desconectar=Desconnectar
+descripcion=Descripci\u00f3
+Descripcion=Descripci\u00f3
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description=Descripci\u00f3
+description_URL=URL descripci\u00f3
+desde=des de
+desde_arriba=Des de Dalt\:
+desde_izquierda=Des de l'esquerra\:
+desea_borrar_la_capa=
+deshacer=Desfer
+Desplazamiento=Despla\u00e7ament
+desviacion_tipica=Desviaci\u00f3 t\u00edpica
+detalles=Detalls
+Detalles=Detalls
+DGNFiles=Fitxers .DGN
+Diferencia=Difer\u00e8ncia
+Diferencia_Introduccion_de_datos=Difer\u00e8ncia. Introducci\u00f3 de dades
+dimension=Dimensi\u00f3
+dimensiones=Dimensions
+directorio=Directori
+directorio_extensiones=Directori de les extensions
+disagregate_layers=Conservar estructura de capes
+Disolver=Dissoldre
+Disolver._Introduccion_de_datos=
+Disolver_entidades=Dissoldre entitats
+distance_units=Unitats de mesura
+distribuir=Distribuir\:
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+divisiones_izquierda=Divisions a l'esquerra
+documentos_existentes=Documents existents
+downloadColumn=Desc\u00e0rrega
+driver=Driver
+drivers=Programes de control
+dxf_files=Fitxers dxf
+Dxffiles=Fitxers .DXF
+e-mail=Correu electr\u00f2nic
+edicion=Edici\u00f3
+edit=Edita
+edit_vertex=Editar v\u00e8rtex
+edit_vertex_=EDITAR V\u00c8RTEX
+editable=
+Editar_leyenda=Editar legenda
+editar_propiedades=Editar propietats
+editar_vertices=Editar v\u00e8rtex
+el_numero_maximo_de_intervalos_para_este_campo_es=El nombre m\u00e0xim d'intervals per a este camps \u00e9s
+Elegir_Color=Elegir color
+Elegir_Fuente=Elegir font
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=elements seleccionats de la capa
+Elija_una_herramienta_de_analisis=Elegisca una eina d'an\u00e0lisi
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_extremos=Eliminar extrems
+eliminar_fila=
+eliminar_punto=Eliminar punt
+eliminar_todos_puntos=Eliminar tots els punts
+ellipse=El\u00b7lipse
+ellipse_=EL\u00b7LIPSE
+en_el_mapa=En el mapa\:
+en_language=Angl\u00e9s
+En_metros=En metres
+En_pixels=En pixels
+en_unidades=
+Encuadre=Enquadre
+Encuadre_Vista=Enquadre sobre la vista
+end=Acabar
+end_polygon=Finalitzar pol\u00edgon
+endinfo=Estad\u00edstiques de finalitzaci\u00f3
+Enlace_espacial=Enlla\u00e7 espacial
+Enlace_espacial._Introduccion_de_datos=
+enlace_vivo=Enlla\u00e7 viu
+Enlazar_a_fichero_de_texto=Enlla\u00e7ar a fitxer de text
+Enlazar_a_ficheros_de_imagen=Enlla\u00e7ar a fitxers d'imatge
+enter_layer_name=Introduir el nom de la capa
+enter_new_layer_name=Introdu\u00efsca el nom de la nova capa
+enter_path_to_file=Introduir la ruta del fitxer
+envelope=Extensi\u00f3
+equal_intervals=Intervals iguals
+equidistance=Equidist\u00e0ncia
+error=Error
+Error_abriendo_el_fichero=Error obrint el fitxer
+Error_accediendo_a_los_datos=Error accedint a les dades
+Error_atributo_no_numerico=Atribut per a dist\u00e0ncia d'\u00e0rea d'influ\u00e8ncia no num\u00e8rica
+error_capa_puntos=Error en carregar la capa. \u00c9s possible que la capa de Georeferenciaci\u00f3 no estiga activa
+Error_capa_vacia=
+Error_chequeando_precondiciones=Error en verificar precondicions
+Error_chequeo_tipo_geometria=Error en inspeccionar el tipus de geometria
+error_comunicacion_servidor=S'ha produ\u00eft un error en comunicar amb el servidor
+error_conexion=Fallada en connectar a la base de dades.
+Error_distancia_buffer=Ha d'introduir una dist\u00e0ncia d'\u00e0rea d'influ\u00e8ncia
+Error_ejecucion=Error d'execuci\u00f3
+Error_entrada_datos=Error d'entrada de dades
+error_escritura=No s'ha pogut guardar el projecte
+Error_escritura_resultados=Error d'escriptura de resultats
+Error_exportando_SLD=
+Error_fallo_geoproceso=S'ha produ\u00eft un error durant l'execuci\u00f3 del geoproc\u00e9s
+error_file_exists=El fitxer ja existix. Vol sobreescriure'l?
+error_file_not_writable=No \u00e9s possible crear el fitxer d'eixida
+Error_guardando_la_leyenda=Error guardant la llegenda
+Error_guardando_la_plantilla=
+error_lectura=No s'ha pogut obrir el projecte
+Error_preparar_escritura_resultados=S'ha produ\u00eft un error en preparar la capa de resultats
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=No ha seleccionat cap funci\u00f3 resum per als atributs num\u00e8rics
+error_writting_file=Error en escriure el fitxer
+errores=Errors
+errores_csv=
+errorFENotSupported=De moment sols es poden fer consultes si s'usa la codificaci\u00f3 FILTER ENCODING que no est\u00e0 suportada pel servidor
+errorGetRecords=S'ha produ\u00eft un error en fer el getRecords
+errorIsASRWServer=\u00c9s un servidor SRW\!
+errorNotCSWSupportedProtocol=S'ha trobat el servidor, per\u00f2 sembla que no suporta el protocol CS-W
+errorNotParsedReply=Hi ha un error en processar la resposta. S'ha trobat el servidor, per\u00f2 possiblement no suporta el protocol especificat
+errorNotSupportedCapabilities=Hi ha un error en fer un GetCapabilities. Aix\u00f2 pot ser per dos raons\: o b\u00e9 hi ha hagut un error en intentar fer l'operaci\u00f3, o b\u00e9 el servidor no suporta el protocol especificat
+errorNotSupportedProtocol=El servidor no suporta el protocol especificat
+errorNotThesaurusSelected=El protocol WFS no permet fer recerques si no s'elegix un element del tesaurus
+errorServerException=El servidor ha tornat una excepci\u00f3
+errorServerNotFound=No es troba el servidor
+errorSOAPProtocol=Error en el protocol SOAP
+es_country=Espanya
+es_language=Espanyol
+escala=Escala
+Escala=Escala
+escala_maxima=Escala m\u00e0xima
+Escala_Maxima=Escala m\u00e0xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada per l'usuari
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Espaiat horitzontal de la malla
+espaciado_vertical=Espaiat vertical de la malla
+espacio=Espai\:
+espere=Per favor, espereu
+estadisticas=Estad\u00edstiques
+este_por_debajo_de_=Que estiga por davall de
+este_por_encima_de=Que estiga per damunt de
+Esten_contenidos_en=Estiguen continguts en
+Estilo=Estil\:
+estilos=Estils
+Etiqueta=Etiqueta
+Etiquetado=Etiquetat
+Etiquetados=Etiquetats
+etiquetas=Etiquetes
+Etiquetas_estandar=Etiquetes est\u00e0ndard
+exactSentence=Frase exacta
+examinar=Examinar
+Examinar=Examinar
+exploit=Explotar
+exploit_=
+export=Exportar
+export_to=
+exportando_features=S'est\u00e0 exportant  funcionalitats
+exportar=Exportar
+exportar_a=Exportar a...
+exportar_ascii=Exportar ASCII
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+exporting_=S'est\u00e0 exportant
+extend=Allargar
+extend_=
+extension=Extensi\u00f3
+extension_activada=Extensi\u00f3 activada
+extensiones=
+Extent=Extensi\u00f3
+extents_no_coincidentes=Extensions no coincidents
+factor=Factor
+fallo_capas=Fallada en l'acc\u00e9s a les capes. Les capes seg\u00fcents seran eliminades del projecte.
+fallo_crear_conexion=Fallada en crear la connexi\u00f3
+fallo_crear_pool=Fallada en la creaci\u00f3 del pool de connexions
+fallo_obtener_conexion_existente=Fallada en obtindre una connexi\u00f3 ja creada
+fallo_obtener_tablas=Fallada en obtindre les taules de la base de dades
+fallo_realizar_consulta=Fallada en realitzar una consulta
+fallo_registrar_conexion=Fallada en el registre d'una connexi\u00f3
+fax=Fax
+feature=Capes
+featureclass=Vectorial
+features_desea_continuar=
+featureserver=Servici vectorial
+feet=Peus
+Fichero=Fitxer
+fichero_existe=Hi ha fitxer
+fichero_incorrecto=Fitxer incorrecte
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=Fitxers de dades cartogr\u00e0fiques
+Ficheros_SHP=Fitxers SHP
+field=Camp
+fields=Camps
+file=Fitxer
+file_exists=El fitxer existix. Vol sobreescriure'l?
+file_name=Fitxer
+file_version=Versi\u00f3 del fitxer
+filtro=Filtre
+final_point=
+finalizar=Finalitzar
+finish=Finalitzar
+fit_ArcIms_layer=Ajustar capa ArcIMS
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+fit_WMS_layer=Ajustar capa WMS
+Font=Font
+format=Format
+formato=Format
+Formato=Format
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=Format de n\u00famero incorrecte
+formato_incorrecto=Format incorrecte
+formatos=Formats
+from=Des de
+fuente=Font
+Fuente=Font
+Fuera=Fora del pol\u00edgon
+fuera_de_extent=El punt seleccionat est\u00e0 fora de l'extensi\u00f3 de la imatge
+Funciones_Sumarizacion=Funcions d'agrupament
+gazetteer_connect=Localitza per nomencl\u00e0tor
+gazetteer_search=Localitza per nomencl\u00e0tor
+general=General
+General=General
+Generar_Intervalos=Generar intervals
+geometry=Geometria
+Geoprocesos=
+georaster=Georeferenciaci\u00f3
+georef=Georeferenciar
+georef_file=
+georeferenciado=
+georreferenciar=Georeferenciar
+gestion_encuadre=Gesti\u00f3 d'Enquadres
+Gestor_de_Geoprocesos=
+goto=Fer un zoom a la recerca
+grado_polinomio=Grau del polinomi
+grados=Graus\:
+Grados=Graus
+Graficos=Gr\u00e0fics
+Grosor_de_linea=Gruix de l\u00ednia
+grosor_linea=Gruix de l\u00ednia\:
+group=Agrupar
+group_graphic_line=
+group_layers=Agrupar capes
+group_layers_option=Agrupaci\u00f3 de capes
+grupo=
+GT2shp=GT2shp
+guardado=Guardat en
+guardar=Guardar
+Guardar=Guardar
+guardar_cambios=Vol guardar els canvis?
+guardar_clave=Guardar la clau
+guardar_como=Guardar com a...
+guardar_como_plantilla=Guardar com a plantilla
+Guardar_el_zoom_actual=Guardar el zoom
+guardar_leyenda=Guardar llegenda
+Guardar_leyenda=Guardar llegenda
+guardar_proyecto=Guardar projecte
+guardar_tooltip=Guarda els canvis del projecte
+Habilitar_etiquetado=Habilitar etiquetat
+hasta=fins a
+height=Al\u00e7ada
+Herramientas=Ferramentes
+Herramientas_de_analisis=Eines d'an\u00e0lisi
+Herramientas_vista=Ferramentes de la vista
+hide_grid=Ocultar la graella
+Hiperenlace=Hiperenlla\u00e7
+horizontal=Horitzontal
+horizontal_space=
+host=M\u00e0quina
+hostname=Hostname
+html_in_a_new_view=<HTML>Crea una vista nova en el projecte. La nova vista contindr\u00e0 totes les capes definides pel fitxer.</HTML>
+html_in_other_view=<HTML>Afig les capes en la vista que especifique de la llista seg\u00fcent\:</HTML>
+html_in_the_current_view=<HTML>Afig les capes definides en el fitxer a la vista activa.</HTML>
+id=ID
+Identificar_Resultados=Identificar resultats
+idioma=Idioma
+Igual_que_la_impresora=Igual que la impressora
+igual_todos_lados=Despla\u00e7ament igual per tots els costats.
+image=Imatge
+imagen=Imatge
+Imagen=Imatge
+imagen_no_accesible=
+imageserver=Servici d'imatges
+import=Importar
+import_from_ascii=
+import_layer=
+import_map_context=Importar mapes des d'un fitxer Web Map Context d'OGC
+importar=Importar
+importar_extent=Importar l'extensi\u00f3 actual de la vista
+Imprimir=Imprimir
+in=en
+incorrect_option=Opci\u00f3 incorrecta
+incorrect_point=
+incorrect_value=
+Indexando=S'est\u00e0 indexant...
+Indexando_espacialmente=S'est\u00e0 indexant espacialment la capa
+Inferior=Inferior
+info=Informaci\u00f3
+info_format_not_supported=No suporta el format tornat pel WMS
+infobreak=Mostra els elements de la capa usant una gamma de colors.
+infodef=Mostra tots els elements d'una capa usant el mateix s\u00edmbol.
+informacion=Informaci\u00f3
+Informacion=Informaci\u00f3
+infovalue=Mostra elements de la capa usant un s\u00edmbol per cada valor.
+Inicializando=Inicialitzant
+initial_warning=
+insert=Inserir
+insert_basis_point=Precise el punt base
+insert_central_point_or_3p=Inserir punt central o [3p]
+insert_central_point_polygon=Inserir punt central del pol\u00edgon
+insert_column=Inserix columna
+insert_destination_point=Precise el punt de dest\u00ed
+insert_distance_another_axis=Inserir dist\u00e0ncia a l'altre eix
+insert_factor_or_reference=Precise factor d'escala<2> o Refer\u00e8ncia[R]
+insert_first_point=Inserir primer punt
+insert_first_point_corner=Inserir primer punt de cant\u00f3
+insert_first_point_scale=Precise punt origen recta escala
+insert_initial_point_axis=Inserir punt inicial d'eix d'el\u00b7lipse
+insert_last_point=Inserir l'\u00faltim punt
+insert_last_point_axis=Inserir punt final d'eix d'el\u00b7lipse
+insert_last_point_reference=Precise punt final recta refer\u00e8ncia
+insert_last_point_scale=Precise punt final recta escala
+insert_length_or_point=Inserir longitud o punt
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Inserir seg\u00fcent punt, Arc[A] o Tancar polil\u00ednia[C] o Acabar[T]
+insert_next_point_line_or_close=Inserir punt seg\u00fcent, L\u00ednia[N], Tancar polil\u00ednia[C] o Acabar[T]
+insert_next_point_selection_or_end_polygon=Inserir punt seg\u00fcent o finalitzar pol\u00edgon de selecci\u00f3[E]
+insert_number_sides=Inserir nombre de costats
+insert_opposited_corner=Inserir cant\u00f3 oposat
+insert_point=Inserir punt
+insert_point_corner_or_square=Inserir punt de cant\u00f3 oposat o Quadrat[C]
+insert_point_move=Inserir punt de despla\u00e7ament
+insert_point_or_end=
+insert_point_selection=Precise punt de selecci\u00f3
+insert_point_selection_or_types=Precise punt o Circumf.[IC], Fora Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fora pol.[OP], Inter. circumf.[CC], Fora circumf.[OC]
+insert_radius=Precise radi
+insert_radius_or_second_point=Inserir radi o segon punt
+insert_reference_point_or_factor=Precise punt d'origen recta refer\u00e8ncia o Factor d'escala[F]
+insert_rotation_angle=Precise angle de rotaci\u00f3
+insert_row=Inserix fila
+insert_second_point=Inserir segon punt
+insert_second_point_angle=Inserir segon punt o angle
+insert_second_point_move=Precisar segon punt del despla\u00e7ament
+insert_second_point_selection=Precise segon punt del rectangle de selecci\u00f3
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Inserir tercer punt
+insertar=Inserir
+Insertar=Inserir
+insertar_cajetin=Inserir caixet\u00ed
+insertar_circulo=Insertar cercle
+insertar_escala=Insertar escala
+insertar_fila=
+insertar_imagen=Insertar imatge
+insertar_leyenda=Insertar llegenda
+insertar_linea=Insertar l\u00ednia
+insertar_norte=Insertar nord
+insertar_poligono=Insertar pol\u00edgon
+insertar_polilinea=Inserir polil\u00ednia
+insertar_punto=Insertar punt
+insertar_recta=Insertar recta
+insertar_rectangulo=Insertar rectangle
+insertar_texto=Insertar text
+insertar_vista=Insertar vista
+inside_circle=Dins de la circumfer\u00e8ncia
+inside_polygon=Dins del pol\u00edgon
+inteligentSearch=Recerca intel\u00b7ligent
+inteligentSearchAscii=Totes les formes de la paraula
+inter_arc=Arc intern
+inter_line=L\u00ednia interna
+internal_polygon_=Pol\u00edgon intern
+Interseccion=Intersecci\u00f3
+Interseccion._Introduccion_de_datos=
+Intersecten_con=Intersecten amb
+interval=Interval
+intervalo=interval
+Intervalo=Interval
+Intervalos=Intervals
+Intervalos_equidistantes=Intervals equidistants.
+Intervalos_por_rupturas_naturales=Intervals per trencaments naturals.
+into_circle=Inscrit
+into_circle_or_circumscribed=Inscrit en el cercle[I] o Circumscrit[C]<C>
+intro_tablename=Introdu\u00efu el nom de la taula que s'ha de crear. AV\u00cdS\: Si existix la taula, s'esborrar\u00e0.
+introduce_nombre=Introdu\u00efx el nou nom
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_intervalo_deseado=Introdu\u00efsca l'interval desitjat
+is_required=\u00e9s obligatori
+Italic=
+Izquierda=Esquerra
+Izquierdo=Esquerre
+join=Unir
+join_=UNIR
+jpg=Fitxers JPEG
+Juntar=Ajuntar
+Juntar._Introduccion_de_datos=
+KeyMapping.Caracter_no_valido=Car\u00e0cter no v\u00e0lid\:
+keywords=Paraules clau
+keyWords=Paraules clau
+kilometros=Kil\u00f2metres
+Kilometros=Kil\u00f2metres
+language=Idioma
+Las_traducciones_no_pudieron_ser_cargadas=Les traduccions no s'han pogut carregar
+last=Anterior
+lastUpdateDate=Data de l'\u00faltima actualitzaci\u00f3
+latitud=Latitud
+Launcher.config_mal_formado=. Fitxer 'config.xml' mal format
+Launcher.config_no_encontrado=. Fitxer 'config.xml' no trobat
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00e8ncia no resolta en el connector
+Launcher.Dos_skin_extension=Dos skin-extension. Usem l'\u00faltim
+Launcher.Error_con_las_librerias_del_plugin=Error amb les llibreries del connector
+Launcher.Error_instanciando_la_extension=Error instanciant l'extensi\u00f3
+Launcher.Error_localizando_la_clase_de_la_extension=Error en localitzar la classe de l'extensi\u00f3
+Launcher.Hay_dependencias_circulares=Hi ha depend\u00e8ncies circulars entre els connectors
+Launcher.Ignorando_el_directorio=Ignorant el directori
+Launcher.labelset_class=No s'ha pogut trobar la classe d'etiquetes (labelset)
+Launcher.look_and_feel=
+Launcher.No_se_encontro_la_clase_de_la_extension=No s'ha trobat la classe de l'extensi\u00f3
+Launcher.No_se_encontro_la_clase_mdi_manager=No s'ha trobat la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No s'ha pogut accedir a la classe mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No s'ha pogut guardar la configuraci\u00f3 d'Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No s'ha pogut instanciar la classe mdi manager
+Launcher.No_se_puede_acceder_a=No es pot accedir a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=S'ha produ\u00eft un error en guardar la configuraci\u00f3 dels connectors
+Launcher.Two_extensions_with_the_same_priority=Dos extensions amb la mateixa prioritat, nom\u00e9s se'n carregar\u00e0 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00fas amb la mateixa posici\u00f3, nom\u00e9s se'n carregar\u00e0 un
+layer=Capa
+Layer=Capa
+layer_abstract=Resum de la capa
+layer_name=Nom de la capa
+layer_not_queriable=La capa no \u00e9s interrogable
+layer_scale_status=Estat dels l\u00edmits d'escala
+layer_title=T\u00edtol de la capa
+layer_was_already_added=La capa ja s'havia afegit
+layerName=Layer Name
+LayerName=
+layers=Capes
+layers_in_other_view=Capes en la llista que jo elegisca
+layers_in_the_current_view=Capes en la vista actual
+layerType=
+legend=Llegenda
+length=Longitud
+leyenda=Llegenda
+Leyenda=Llegenda
+leyenda_campo_unido=S'est\u00e0 utilitzant un camp de la uni\u00f3 en la llegenda (i/o etiquetatge). Canvie la llegenda abans de llevar la uni\u00f3, per favor.
+Leyenda_Por_Defecto=Llegenda per defecte
+line=L\u00ednia
+line_=L\u00cdNIA
+line_type=Tipus l\u00ednia
+linea=L\u00ednia
+Linea=L\u00ednia
+linea_grafica=L\u00ednia gr\u00e0fica
+lineal_directo=Lineal directe
+linf_der=Inf Der
+link=Enlla\u00e7
+Link=Enlla\u00e7
+linkColumn=P\u00e0gina web
+linkError=S'ha produ\u00eft un error en carregar l'enlla\u00e7
+linkLoad=C\u00e0rrega d'un recurs web
+load_from_xml=Carregar des del fitxer XML (.rmf)
+loadWMS=C\u00e0rrega de WMS
+localizador=localitzador
+Localizador_por_atributo=Localitzador per atribut
+localize=Localitza
+location=Ubicaci\u00f3
+logo_URL=URL logotip
+longitud=Longitud
+lowerCoordinates=Inferiors
+lppp=ppp
+lsup_izq=Sup Esq
+m/pixel=metros/pixel
+malla_activada=Malla activada
+mantainold=Elimina les recerques anteriors
+mantener_intervalo=Mantindre interval
+map_context_file_error=Error en el fitxer Web Map Context
+map_extent=Extensi\u00f3
+map_size_in_pixels=Dimensi\u00f3 del mapa (p\u00edxels)
+map_units=Unitats de mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapes
+marco=Marc
+marco_vista=Marc de la vista
+margenes=M\u00e0rgens\:
+Mas_100=El nombre de valors \u00e9s superior a 100, i no aporta informaci\u00f3
+mas_de_100_simbolos=M\u00e9s de 100 s\u00edmbols no solen aportar informaci\u00f3 en un pla
+max_no_of_pixels=Nombre m\u00e0xim de p\u00edxels
+max_scale=Escala m\u00e0x.
+maxFeatures_aviso=
+maximo=M\u00e0xim
+Maximo=M\u00e0xim
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Error no detectat per l'usuari
+MDIFrame.quiere_salir=Est\u00e0 segur que vol eixir?
+MDIFrame.salir=Eixir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No s'ha trobat cap extensi\u00f3 'skin' entre els connectors
+media=Media
+Media=Mitjana
+medir_area=Mesurar \u00e1rea
+medir_distancias=Mesurar dist\u00e0ncies
+Mensaje_buffer=Est\u00e0 calculant \u00e0rees d'influ\u00e8ncia
+Mensaje_clip=Geoproc\u00e9s retallar
+Mensaje_convexhull=Geoproc\u00e9s convex hull
+Mensaje_difference=Geoproc\u00e9s difer\u00e8ncia
+Mensaje_dissolve=Geoproc\u00e9s dissoldre
+Mensaje_enlace_espacial=Geoproc\u00e9s enlla\u00e7 espacial
+Mensaje_interseccion=Geoproc\u00e9s interesecci\u00f3
+Mensaje_juntar=Geoproc\u00e9s ajuntar
+Mensaje_primera_pasada_union=Est\u00e0 calculant interseccions
+Mensaje_procesando_buffer=Est\u00e0 generant \u00e0rees d'influ\u00e8ncia
+Mensaje_procesando_buffer2=Est\u00e0 dissolent \u00e0rees d'influ\u00e8ncia
+Mensaje_procesando_clip_primero=Est\u00e0 calculant pol\u00edgon de retall
+Mensaje_procesando_clip_segundo=Est\u00e0 retallant geometries
+Mensaje_procesando_convexhull=Est\u00e0 calculant convex hull
+Mensaje_procesando_diferencia=Est\u00e0 calculant difer\u00e8ncies
+Mensaje_procesando_dissolves=Est\u00e0 dissolent geometries
+Mensaje_procesando_enlace_espacial=Est\u00e0 enlla\u00e7ant elements
+Mensaje_procesando_interseccion=Est\u00e0 calculant interseccions
+Mensaje_procesando_juntar=Est\u00e0 ajuntant geometries
+Mensaje_segunda_pasada_union=Est\u00e0 calculant difer\u00e8ncies entre A-B
+Mensaje_tercera_pasada_union=Est\u00e0 calculant difer\u00e8ncies entre B-A
+Mensaje_union=Geoproc\u00e9s d'uni\u00f3
+Messages._no_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+Messages.no_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+metadata_catalog=Recerca de geodades - connexi\u00f3
+metadata_tree=Arbre de la metadada
+metadatos=Metadatos
+meters=Metres
+metros=Metres
+Metros=Metres
+Milimetros=Mil\u00b7l\u00edmetres
+Millas=Milles
+min_scale=Escala m\u00edn.
+minimo=M\u00ednim
+Minimo=M\u00ednim
+minx=min.x
+miny=min.y
+modificar=
+modification_date=\u00daltima data de modificaci\u00f3
+modify=
+mosaico_tooltip=Mosaic r\u00e8tol indicador de funci\u00f3
+Mostrar_Contorno=Mostrar contorn
+mostrar_descripcion=Mostrar descripci\u00f3
+mostrar_puntos=Mostrar numeraci\u00f3
+Mostrar_siempre=Mostrar sempre
+mostrar_unidades=Mostrar unitats
+move=Despla\u00e7ament
+move_=DESPLA\u00c7AMENT
+move_elements=
+Move_from_view=Moure punts des de la vista
+move_handlers=
+move_layer_down=Moure amunt
+move_layer_up=Moure avall
+Mover_geo=Moure imatge o georeferenciar
+msg_save_raster=L'operaci\u00f3 va a cancel\u00b7lar-se. Vol continuar?
+mtspixel=Mts/p\u00edxel
+muestra=Mostra
+Muestra_atributos=Mostra els atributs de les capes seleccionades.
+muestra_consola_tooltip=Mostra la consola
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostra els atributs de les capes seleccionades
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra els elements de la capa usant un s\u00edmbol per cada valor \u00fanic
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra els elements de la capa usant una gamma de colors en funci\u00f3 del valor d'un determinat camp d'atributs
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tots els elements d'una capa usant el mateix s\u00edmbol
+multi_type=Tipus m\u00faltiple
+multiple_value=Valor m\u00faltiple
+multiples_intervalos=M\u00faltiples intervals
+multipoint=
+multipoint_=
+multipoint_type=Tipus multipunt
+must_specify_a_file=Ha d'especificar un fitxer de dest\u00ed
+name=Nom
+natural_intervals=Intervals naturals
+navegacion=Navegaci\u00f3
+navegacion_vista=Navegaci\u00f3 vista
+necesita_un_tema_activo=Es necessita un tema actiu
+necesita_un_tema_vectorial_activo=Es necessita un tema vectorial actiu
+necesita_una_capa_activa=Necessita una capa activa
+necesita_una_capa_vectorial_activa=Necessita una capa vectorial activa
+new_dxf=Nou DXF
+new_field=Nou camp
+new_layer=Nova capa
+new_layer_name=Nom de la nova capa
+new_postgis=Nou postgis
+new_shp=Nou SHP
+next=Seg\u00fcent
+Next=Seg\u00fcent
+next_point_or_end=Seg\u00fcent punt o finalitzar[E]
+next_previous_add_del_cancel=Punt, Seg\u00fcent v\u00e8rtex[S], Anterior[A], Afegir[I] o Eliminar[E]
+ninguna_impresora_configurada=Cap impressora configurada
+Nivel_de_transparencia=Nivell de transpar\u00e8ncia
+no=No
+NO=NO
+no_activos=No actius
+no_adjust_grid=No ajustar a la graella
+No_de_intervalos=Nr. d'intervals
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No s'ha trobat la llista d'idiomes preferits. Potser ha oblidat inicialitzar la classe
+no_hay_ninguna_capa_seleccionada=
+no_hay_ninguna_capa_seleccionado=No hi ha cap capa seleccionada
+no_layers_found=No hi ha capes disponibles
+No_mostrar=No mostrar la capa quan l'escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa quan l'escala
+no_puede_continuar=
+No_reconocido=No reconegut
+No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+No_se_pudo_obtener_la_tabla_de_la_capa=No s'ha pogut obtindre la taula de la capa
+No_Shape=Este Layer no \u00e9s de tipus Shape
+No_usar_buffer_redondeado=No use vora arredonida
+no_visibles=No visibles
+nombre=Nom
+Nombre=Nom
+nombre_capa=Nom de la capa
+nombre_cobertura=Nom cobertura
+nombre_feature=Nom de la caracter\u00edstica
+Nombre_que_se_le_dara_al_zoom=Nom que se li donar\u00e0 al zoom
+nombre_sesion=Nom de la sessi\u00f3
+Nombres=Noms
+none_selected=Cap seleccionat
+normal=Normal
+north=Nord
+not_available=No disponible
+not_visible=No visible
+Nueva_tabla=Nova taula
+nuevo=Nou
+Nuevo_conjunto=Nou conjunt
+nuevo_proyecto=Nou projecte
+nuevo_tamano_fuente=Nova Dimensi\u00f3 de font\:
+nuevo_tooltip=Crea un nou projecte
+num_bandas=Nombre de bandes
+num_columnas=Nombre de columnes
+num_filas=Nombre de files
+Num_intervalos=
+Numero_anillos_concentricos=Nombre d'anells conc\u00e8ntrics
+Numero_de_elementos_seleccionados=Nombre d'elements seleccionats
+Numero_de_segmentos_por_cuadrante=Nombre de segments per quadrant
+numero_incorrecto=N\u00famero incorrecte
+N\u00fam_intervalos=Nombre d'intervals
+Obtener_mas_proximo=Usar el m\u00e9s pr\u00f2xim
+of=de
+ogc_mapcontext_file=OGC Web Map Context
+ok=D'acord
+Ok=D'acord
+onSharpening=Activa pansharpening
+opacidad=Opacitat
+opciones=Opcions
+open_first_time=Obrir amb la vista
+open_layers_as=Obrir les capes com a
+Operacion_de_overlay=Operacions d'ocultaci\u00f3
+Operaciones_adicionales=Operacions addicionals
+optinos.network.click_to_test_connection=Prema el bot\u00f3 per comprovar la connexi\u00f3
+options=Opcions
+options.firewall.http.enabled=Fer \u00fas de servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecte
+options.firewall.http.nonProxy=Connectar directament a
+options.firewall.http.password=Contrasenya
+options.firewall.http.port=
+options.firewall.http.user=Nom d\u0092usuario
+options.firewall.socks.enabled=Fer \u00fas de servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecte
+options.firewall.socks.port=
+options.general.select_theme=Usar apari\u00e8ncia (requereix reiniciar)
+options.network.click_to_test_connection=Prema el bot\u00f3 per comprovar la connexi\u00f3
+options.network.status=Estat de la connexi\u00f3
+orientacion=Orientaci\u00f3\:
+origen_de_datos=Origen de dades
+Origen_de_datos=Origen de dades
+Origen_de_Datos=Origen de les dades\:
+Otros=Altres
+out_circle=Fora de la circumfer\u00e8ncia
+out_polygon=Fora del pol\u00edgon
+out_rectangle=Fora del rectangle
+owner=Propietari
+page=P\u00e0gina
+paint=Dibuixar el resultat
+parameters=Par\u00e0metres
+parametros=Par\u00e0metres
+Parametros=Par\u00e0metres
+password=Clau
+paste=Apegar
+paste_elements=
+path=Ruta
+pegar=
+Perimetro=Per\u00edmetre
+period=Periode
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet etiquetar els elements del mapa amb el valor d'un determinat camp
+Personalizado=Personalitzat
+Pies=Peus
+pila_de_comandos=Pila de comandaments
+pixeles=p\u00edxels
+pixels=pixels
+Plain=Normal
+plantilla=plantilla
+plegar_despl=Plegar/Desplegar
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos classes amb el mateix nom en el connector
+PluginClassLoader.Error_reading_file=Error llegint el fitxer\:
+pluginNotFound=No tens cap extensi\u00f3 per a carregar recursos d'este tipus
+pluginNotFoundTitle=C\u00e0rrega de capes
+PluginServices.Bug_en_el_codigo=Error en el codi
+PluginServices.Error_grave_de_la_aplicacion=Error greu de l'aplicaci\u00f3. \u00c9s convenient que guarde les dades i isca de l'aplicaci\u00f3
+PluginServices.No_se_encontro_el_recurso_de_traducciones=No s'ha trobat el recurs de traduccions
+PluginServices.No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No s'ha pogut posar el rellotge d'arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No s'ha pogut restaurar el cursor del ratol\u00ed
+PluginServices.Procesando=Est\u00e0 processant-se
+png=Fitxers png
+point=Punt
+point_=PUNT
+point_type=Tipus punt
+poligono=Pol\u00edgon
+polilinea=polil\u00ednia
+polygon=Pol\u00edgon
+polygon_=POL\u00cdGON
+polygon_type=Tipus pol\u00edgon
+polyline=Polil\u00ednia
+polyline_=POLIL\u00cdNIA
+poner_capas_a=Posar capes a
+poner_temas_a=Posar capes a...
+por_debajo_de=per davall de\:
+por_encima_de=per damunt de\:
+Por_favor_active_el_tema=
+Por_favor_active_la_capa=Per favor active la capa
+posicion_linea=Posici\u00f3 de la l\u00ednia
+postcode=Codi postal
+postgisColumn=Postgis
+postgisError=S'ha produ\u00eft un error en carregar la base de dades
+postgisLoad=C\u00e0rrega de Postgis
+pref.appearance=Apari\u00e8ncia
+pref.general=General
+pref.network=Xarxa
+pref.network.firewall=
+preferences=Prefer\u00e8ncies...
+Preferences=Prefer\u00e8ncies
+preferencias=
+Preferencias=
+preparar_pagina=Preparar p\u00e0gina
+Preparar_pagina=Preparar p\u00e0gina
+presentacion=Presentaci\u00f3
+previous=Anterior
+previsualizacion=Previsualitzaci\u00f3
+Previsualizacion=Previsualitzaci\u00f3
+Previsualizacion_de_simbolo=Previsualitzaci\u00f3 de s\u00edmbol
+primero=Primer
+prioridad=Prioritat
+procesar=Processar
+process_tip=
+projection=Projecci\u00f3
+properties=Propietats
+property=Propietat
+propiedad=
+propiedades=Propietats
+propiedades_cajetin=Propietats del caixet\u00ed
+propiedades_capa=Propietats de la capa
+propiedades_de_la_capa=Propietats de la capa
+Propiedades_de_la_Capa=Propietats de la capa
+propiedades_del_tema=
+Propiedades_del_Tema=Propietats del tema
+Propiedades_escala_grafica=Propietats de l'escala
+propiedades_grafico=Propietats gr\u00e0fic
+propiedades_mapa=Propietats del mapa
+propiedades_marco_imagenes=Propietats del marc d'im\u00e0tgens
+propiedades_marco_leyenda=Propietats del marc de la llegenda
+propiedades_marco_vista=Propietats del marc de la vista
+propiedades_raster=Propietats del raster
+propiedades_sesion=Propietats de la sessi\u00f3
+propiedades_tabla=Propietats de la taula
+propiedades_tema=
+Propiedades_texto=Propietats del text
+propiedades_vista=Propietats de la vista
+props=Propietats
+protocolsGroup=Protocols
+provider=Prove\u00efdor
+prueba_conexion=Prova de la connexi\u00f3
+puerto=
+Pulgadas=Polsades
+punto=Punt
+puntos=Punts
+purpose=Prop\u00f2sit
+pwd=Contrasenya
+quantile_intervals=Intervals quantils
+quiere_continuar=Est\u00e0 segur que vol continuar?
+quitar=Llevar
+Quitar=Llevar
+Quitar_capa=Llevar capa
+quitar_enlaces=LLevar enlla\u00e7os
+Quitar_todos=Llevar tots
+Quitar_Todos=Llevar ots
+quitar_uniones=Llevar unions
+rango_de_escalas=Rang d'escales
+Rango_de_escalas=Rang d'escales
+raster=Raster
+raster_layer=Capa raster
+Rasterfiles=Fitxers raster
+realce=Relleu
+realces=
+realmente_desea_guardar=Realment desitja guardar?
+Recortar=Retallar
+Recortar._Introduccion_de_datos=
+recorte=Retall
+recorte_colas=Retall de cues
+recorte_vista=Retall a vista
+recta=Recta
+rectangle=Rectangle
+rectangle_=RECTANGLE
+rectangulo=Rectangle
+recuento=Recompte
+Recuperar_leyenda=Recuperar llegenda
+Recuperar_y_eliminar_otros_zoom=Recuperar i eliminar altres zooms
+redo=Refer
+redo_error=Error en accedir als programes de control per a refer un comandament
+reference=Refer\u00e8ncia
+reference_system=Sistema de refer\u00e8ncia
+refrescar=Refrescar
+refresh_capabilities=Refrescar la mem\u00f2ria cau
+refresh_capabilities_tooltip=Marque esta casella per a sobreescriure les dades anteriors.
+registros=Registres
+registros_seleccionados_total=Total registres seleccionats
+rehacer=Refer
+rellenar_marco_vista=Reomplir marc de la vista
+relleno=Farciment\:
+remove=Llevar
+remove_all=Llevar totes
+remove_column=Elimina columna
+remove_elements=
+remove_geometry=
+remove_row=Eliminia fila
+remove_rows=
+renombrar=Renomenar
+repeated_layer_was_not_added=No s'hi ha afegit la capa repetida
+reproyectar_aviso=La projecci\u00f3 de la capa no \u00e9s igual que la de la vista.\nAVISO\: pot ser inexacte amb algunes transformaciones.\nPer favor, llija la documentaci\u00f3
+reproyectar_pregunta=Vol reprojectar-la?
+resolucion=Resoluci\u00f3
+resolucion_resultado=Resoluci\u00f3 del resultat\:
+resolution=Resoluci\u00f3
+resourceLinkColumn=Enlla\u00e7
+resourceShowColumn=Visualitza
+resourceTypeColumn=Tipus
+respuesta_error_servidor=No s'ha pogut obtindre la cobertura
+resto_valores=Resta de valors
+restore=Restaurar
+restrictArea=Restricci\u00f3 de l'\u00e0rea de recerca
+results=Resultats
+resutsByPage=Resultats per p\u00e0gina
+retry=Reintentar
+rootName=Arrel
+rotate=Rotar
+rotate_=
+salir=Eixir
+Salir=Eixir
+salir_tooltip=Eixir
+salvar=Salvar
+salvar_raster=Salvar el raster georeferenciat
+Sample=Exemple
+save_to_ascii=Exportar taula de punts a fitxer de text
+save_to_xml=Salvar el fitxer XML (.grf)
+scale=Escalar
+scale_=ESCALAR
+scale_limits=L\u00edmits d'escala
+scale_limits_status=Estat dels l\u00edmits d'escala
+scaleAny=qualsevol
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=<5.000
+Se_superponen_a=Se superposen a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Es tindr\u00e0 en compte per a esborrar els registres des de
+se_van_a_guardar_=
+Sean_disjuntos_a=siguen disjunts a
+Sean_iguales_a=siguen iguals a
+search_results=Resultats de la recerca
+searchButton=Busca
+seleccion=Selecci\u00f3
+seleccion_campos=Seleccioneu els camps
+seleccion_de_campos=Selecci\u00f3 de camps
+seleccion_fuente=Selecci\u00f3 de font
+Seleccion_por_capa=Selecci\u00f3 per capa
+Seleccion_por_tema=Selecci\u00f3 per tema
+selecciona_sistema_de_referencia=Seleccioneu sistema de refer\u00e8ncia
+seleccionar=seleccionar
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capes
+seleccionar_capas_raster=Seleccionar capes r\u00e0ster
+seleccionar_coberturas=Seleccioneu les cobertures
+seleccionar_CRS=Seleccioneu CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccione de les capes actives els elements que\:
+Seleccionar_del_conjunto=Seleccionar del conjunt
+Seleccionar_Directorio=Carpeta amb capes
+seleccionar_fichero=Seleccionar fitxer
+Seleccionar_fichero=Seleccionar fitxer
+seleccionar_formato=Seleccionar format
+seleccionar_parametros=Seleccionar parametres
+seleccionar_por_punto=Seleccionar per punt
+seleccionar_por_rectangulo=Seleccionar per rectangle
+seleccionar_puntos=Seleccionar punts
+seleccionar_srs=Seleccioneu SRS
+seleccionar_tiempo=Seleccionar temps
+seleccionar_todos=Seleccionar tots
+seleccione_campo_enlace=Seleccioneu el camp a trav\u00e9s del qual cal enlla\u00e7ar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccione una data...
+seleccione_tabla=Seleccioneu la taula
+seleccione_tabla_a_enlazar=Seleccioneu la taula que cal enlla\u00e7ar
+seleccione_tabla_origen=Seleccioneu la taula d'origen de la uni\u00f3
+select=
+select_all=Seleccionar tot
+select_driver=Seleccione el programa de control
+select_features=Selecciona les capes
+select_fields=Seleccionar camps de la capa
+select_formats=Seleccionar formats
+select_from_point=Seleccionar a partir d'un punt
+select_geom_field=Selecciona el camp que porta la geometria
+select_geometry=
+select_geometry_type=Seleccione el tipus de geometria
+select_handlers=Seleccionar nodes
+select_layers=Seleccionar capes
+select_none=Llevar tots
+select_other_geometry_or_end=
+select_unique_field=Seleccioneu el camp \u00fanic
+selectBandaRefinado=Seleccionar Banda de Refinat
+selected_dimensions=Dimensions seleccionades
+selected_from_list=Seleccionat de la llista
+selected_layer=
+selected_layers=Capes seleccionades
+selected_parameters=Par\u00e0metres seleccionats
+selected_themes=Temes seleccionats
+selectfromview=Seleccionar punt des de la vista
+selection=
+selection_=SELECCIONAR
+selection_color=Color de la selecci\u00f3
+server=Servidor
+server_abstract=Resum del servidor
+server_cant_render_layers=Este servidor no pot representar estes capes juntes. Prove a fer peticions separades per a cada capa.
+server_doesnt_support_selected_image_format=El servidor no proporciona imatges en el format seleccionat
+server_has_no_services=El servidor no oferix cap servici
+server_provides_no_srs__scale_data_may_be_wrong=El servidor no proporciona sistema de coordenades. La informaci\u00f3 sobre escales pot ser err\u00f2nia.
+server_timeout=Temps de connexi\u00f3 excedit
+server_title=T\u00edtol del servidor
+server_type=Tipus de servidor
+server_version=Versi\u00f3 del servidor
+serverReply=Resposta del servidor
+serverURL=Introdu\u00efu l'adre\u00e7a on es troba el servidor de cat\u00e0leg
+serverURLCat=Introdu\u00efu l'adre\u00e7a on es troba el servidor de nomencl\u00e0tor
+service=Servici
+service_does_not_exist=Servici no disponible
+service_info=Informaci\u00f3 del servici
+service_name=Nom del servici
+service_type=Tipus de servici
+service_type_not_supported=Tipus de servici no suportat pel client
+servicename_selection_mode=Selecci\u00f3 del nom del servici
+servidor=Servidor
+Servidor=Servidor
+servidor_wcs_no_responde=El servidor seleccionat no respon
+set=Establir
+settings=Ajustaments
+settings_editor=Editor d'ajustaments
+shape_seleccion=Exportar la selecci\u00f3
+Shapefile=Shapefile
+Shapefiles=Fitxers .SHP
+show_grid=Mostrar graella
+show_layer_ids=Mostrar ID de les capes
+show_layer_names=Mostrar noms de capes
+show_this_dialog_next_startup=
+shp_files=Fitxers .shp
+siempre=Sempre
+siguiente=Seg\u00fcent
+Siguiente=Seg\u00fcent
+simbolo=S\u00edmbol
+Simbolo=S\u00edmbol
+Simbolo_unico=S\u00edmbol \u00fanic
+Simbolo_Unico=S\u00edmbol \u00danic
+Simbologia=Simbologia
+simple=Simple
+simplificar=Simplificar
+sin_realce=Sense real\u00e7
+sin_titulo=Sense t\u00edtol
+sincronizar_color_borde_relleno=Sincronitzar el color de la vora amb el del farciment\:
+single_value=Valor simple
+size=Dimensi\u00f3
+Size=Dimensi\u00f3
+sobre_la_barra=Sobre la barra
+Sobreescribir_fichero=
+Solo_disolver_adyacentes=Dissoldre nom\u00e9s adjacents
+Solo_para_capas_vectoriales=Sols per a capes vectorials
+splain=Corba
+SplashWindow.Iniciando=Iniciant...
+square=Cant\u00f3
+srs=Srs
+start_edition=Comen\u00e7ar l'edici\u00f3
+state_or_province=Estat/Prov\u00edncia
+statistics=Estad\u00edstiques
+status=Estat
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3 iniciada
+stop_edition=Acabar l'edici\u00f3
+stretch=Estirar
+stretch_=
+style=Estil
+Style=Estil
+Subir_capa=Pujar capa
+Sum=Sumatori
+suma=Suma
+Superior=Superior
+suprimir_objetos_origen=
+symmetry=Simetria
+symmetry_=
+S\u00edmbolo=S\u00edmbol
+Tabla=Taula
+Tabla_de_Atributos=Taula d'Atributs
+Tabla_de_prueba=Taula de prova
+tablas=Taules
+Tablas=Taules
+table=Taula
+tag=tag
+tamano=Dimensi\u00f3\:
+tamano_metros=Dimensi\u00f3 en metres
+tamano_pagina=Dimensi\u00f3 de p\u00e0gina\:
+tamano_posicion=dimensi\u00f3/posici\u00f3
+tamanyo_borde=Grand\u00e0ria de la vora
+tamanyo_fuente=Grand\u00e0ria de font
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+tarea_en_progreso=Tasca en progr\u00e9s
+telephone=Tel\u00e8fon
+Tema=Capa
+Terminar=Acabar
+terminate=Acabar
+test_now=Comprovar ara
+texto=
+the_scale=Escala
+theme=Tema
+this_layer_was_already_added=Esta capa ja s'hi havia afegit
+Tiempo=Temps
+Tile=Mosaic
+tile_tooltip=Organitzar les finestres en mosaic
+time=Temps
+timeout=Temps excedit
+tipo_dato=Tipus de dada
+tipo_de_intervalo=Tipus d'interval
+Tipo_de_intervalos=Tipus d'intervals
+tipo_de_leyenda=Tipus de llegenda
+Tipo_de_leyenda=Tipus de llegenda
+Tipo_de_linea=Tipus de l\u00ednia
+tipo_fichero_proyecto=Fitxer de projecte gvSIG (*.gvsproj)
+tipo_leyenda=Fitxers de tipus llegenda (*.GVL)
+tipo_linea=Tipus de L\u00ednia\:
+Tipo_no_reconocido=Tipus no reconegut
+tipo_relleno=Tipus de Farciment\:
+tipo_simbolo=Tipus de s\u00edmbol\:
+tipos_de_documentos=Tipus de documents
+title=T\u00edtol
+titulo=Gestor de projectes
+titulo_confirmar=Confirmaci\u00f3
+titulo_consola=Consola d'informaci\u00f3
+titulo_fframetext=T\u00edtol del camp de text
+to=Fins a
+to_annotation=Transformar a capa d'anotacions
+to_palette=Canviar a paleta
+toda_la_tabla=Tota la taula
+todos=Tots
+tooltips_enabled=R\u00e8tols indicadors de funci\u00f3 actius
+Toquen=toquen
+total=Total
+transparencia=Transpar\u00e8ncia
+Transparencia=Transpar\u00e8ncia
+transparencia_pixel=Transpar\u00e8ncia per p\u00edxel
+Triangulo=Triangle
+trim=Retallar
+type=Tipus
+ultimo=\u00daltim
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Ha de seleccionar almenys una capa.
+unable_to_findout_server_version=No es pot determinar la versi\u00f3 del servidor
+unable_to_findout_service_type=No es pot determinar el tipus de servici
+undo=Desfer
+undo_error=Error en desfer un comandament
+ungroup=Desagrupar
+unidades=Unitats\:
+Unidades=Unitats\:
+Union=Uni\u00f3
+Union._Introduccion_de_datos=
+unite_separate=Unir/Separar
+units=Unitats
+unknown=Desconegut
+unknown_response_format=Format de resposta desconeguda
+unsupported_map_context_version=Versi\u00f3 de Web Map Context no suportada
+unsupported_version=Versi\u00f3 no suportada
+untitled=Sense t\u00edtol
+update_catalog=Refrescar llista de servicis
+upperCoordinates=Superiors
+us_country=Estats Units d'Am\u00e8rica
+Usar_indice_espacial=Usar \u00edndex espacial
+Usar_los_campos_de_la_capa=Usar els camps de la capa
+usar_marco=Usar marc
+usar_rango=Useu un rang
+Usar_solamente_los_elementos_seleccionados=Usar solament els elements seleccionats
+usar_titulo=Usar t\u00edtol
+use_custom_size=Dimensi\u00f3 personalitzada
+use_full_extent=Extensi\u00f3 total
+use_interpolation_method=Usar m\u00e8tode d'interpolaci\u00f3
+use_view_size=Dimensi\u00f3 de la vista
+username=Usuari
+usuario=Usuari
+utilizar_margenes_impresora=Utilitzar m\u00e0rgens de la impressora.
+vacia=Buida
+valor=Valor
+Valor=Valor
+Valor_azul=Valor blau
+Valor_Bandas=Valor bandes
+valor_pixel=Valor de pixel
+Valor_rojo=Valor roig
+Valor_verde=Valor verd
+Valores=Valors
+Valores_unicos=Valors \u00fanics
+Valores_Unicos=Valors \u00danics
+value=Valor
+value_not_found=No s'hi ha trobat el valor
+varianza=Varian\u00e7a
+vector_layer=Capa vectorial
+vector_type=Tipus vectorial
+vectorial=Vectorial
+ventana=Finestra
+Ventana=Finestra
+ventana_proyecto=Finestra de projecte
+Ver=Veure
+ver_tabla_atributos=Veure Taula d'atributs
+ver_tooltip=Mostra la finestra de projecte
+version=Versi\u00f3
+version_conflict=Conflicte de versi\u00f3
+vertical=Vertical
+vertical_space=
+vertices=v\u00e8rtexs
+view=Vista
+visible=Visible
+visibles=Visibles
+Vista=Vista
+vistas=Vistes
+visualizacion=Visualitzaci\u00f3
+Visualizacion=Visualitzaci\u00f3
+visualizar_cuadricula=Visualitzeu malla
+warning=Av\u00eds
+warnings=
+wcs_cant_connect=No es pot realitzar la connexi\u00f3 WCS
+wcs_properties=Propietats de WCS
+WCS_properties=Propietats del WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Temps d\u0092espera esgotat
+wcsColumn=Cobertura
+wcsError=S'ha produ\u00eft un error en carregar la cobertura
+wcsLoad=C\u00e0rrega de WCS
+web_map_context=Web Map Context
+web_map_context_settings=Propietats Web Map Context
+wfs_properties=Propiedades WFS
+wfsColumn=Caracter\u00edstica
+wfsError=S'ha produ\u00eft un error en carregar la caracter\u00edstica
+wfsLoad=C\u00e0rrega de WFS
+width=Amplada
+Window=Finestra
+WMS=WMS
+wms_cant_connect=No es pot realitzar la connexi\u00f3 amb WMS
+wms_not_queryable=Este servidor no accepta peticions d'este tipus
+wms_properties=Propietats WMS
+wms_server_error=Error del servidor WMS
+wms_transparency=Transpar\u00e8ncia
+wmsColumn=Mapa
+wmsError=S'ha produ\u00eft un error en carregar el mapa
+WMSLayer=Capa WMS
+wrong_url=Adre\u00e7a URL no v\u00e0lida
+xmax=X m\u00e0xima
+xmin=X m\u00ednima
+xrange=Rang en X
+Yardas=Lardes
+yes=S\u00ed
+YES=S\u00cd
+ymax=Y m\u00e0xima
+ymin=Y m\u00ednima
+yrange=Rang en Y
+zoom=Zoom
+Zoom=Zoom
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Acercar=Zoom acostar
+Zoom_al_Tema=
+Zoom_Alejar=Zoom allunyar
+Zoom_Completo=Zoom complet
+Zoom_Completo_Vista=Zoom complet sobre la vista
+Zoom_Mas=Zoom m\u00e9s
+zoom_mas_vista=Zoom m\u00e9s vista
+Zoom_Mas_Vista=Zoom m\u00e9s sobre la vista
+Zoom_Menos=Zoom menys
+Zoom_Menos_Vista=Zoom menys sobre la vista
+Zoom_pixel=Zoom a la resoluci\u00f3 del raster
+Zoom_previo=Extensi\u00f3 anterior
+Zoom_Previo=Zoom previ
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a la part seleccionada
+Zoom_sgte=
+zooms=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_pt.properties	(revision 42196)
@@ -0,0 +1,1498 @@
+#Translations for language: pt
+#Tue Oct 24 14:07:27 CEST 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+_(Etiquetas_estandar)=(Etiquetas padr\u00e3o)
+_(Intervalos)=(Intervalos)
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+_(Valores_unicos)=(Valores \u00fanicos)
+__valenciano=Valenciano
+__espacio_vertical=\u00c1rea vertical\:
+__lineas=linhas
+__proyeccion_actual=Projec\u00e7\u00e3o actual\:
+__redimensionar_texto_escala=Redimensionar o texto de acordo com a escala da vista
+__seleccion_de_fuente=Selec\u00e7\u00e3o da fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=
+abajo=Abaixo
+abrir=Abrir
+Abrir=Choose
+Abrir_Geoproceso=
+Abrir_Imagen=Abrir imagem
+abrir_plantilla=Abrir molde
+abrir_proyecto=Abrir projecto
+abrir_tooltip=Abrir um projecto existente
+Abrir_una_capa=Abrir uma capa
+abstract=Resumo
+accept_tip=
+Accion_Predefinida=Ac\u00e7\u00e3o predefinida
+aceptar=Aceitar
+Aceptar=Aceitar
+acerca_de=Sobre...
+activa_la_ventana=Activa a janela
+activar=Activate
+activar_regla=Activar r\u00e9gua
+activo=
+activos=Activos
+add=Adicionar
+add_field=
+add_layer=Adicionar capa
+add_rows=
+add_vertex=
+addlayer=Adicionar capa
+address=Adre\u00e7a
+address_type=
+adjust_grid=
+adjust_transparency=Configurar transpar\u00eancia
+advanced=
+advanced_settings=
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar linha gr\u00e1fica com gr\u00e1ficos
+Ajustar_cobertura_wcs=Ajustar cobertura WCS
+Ajustar_transparencia=Ajustar transpar\u00eancia
+ajustes_linea_grafica=Ajustes de linha gr\u00e1fica
+Al_leer_la_leyenda=Ao ler a legenda
+alerta=Aviso
+algoritmo=
+alias=Ali\u00e1s
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alinhamento\:
+alinear=Alinhar
+alinear_graficos=Alinhar gr\u00e1ficos
+allWords=Todas as palavras
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Tamanho fixo de texto
+ambito=\u00c2mbito
+ampl_extent=
+Anadir=Adicionar
+Anadir_al_conjunto=Adicionar ao conjunto
+Anadir_capa=Adicionar capa
+Anadir_Capa=Adicionar capa
+Anadir_capa_de_eventos=
+Anadir_tema_de_eventos=Adicionar capa de eventos
+anadir_titulo=
+Anadir_todos=Adicionar todos
+ancho=Largura
+ancho_alto=Largura X altura
+Ancho_Contorno=Grossura do contorno
+Ancho_de_linea=Grossura da linha
+anchura=Grossura\:
+angulo_rotacion=\u00c2ngulo de rota\u00e7\u00e3o\:
+anterior=Anterior
+Anterior=Anterior
+anyResult=A pesquisa n\u00e3o produziu nenhum resultado
+anyWord=Qualquer palavra
+Aplicar=Aplicar
+apply=Aplicar
+Apply=Aplicar
+arc=
+arc_=ARC
+Archivo=Ficheiro
+Archivos_de_Disco=Ficheiros do disco
+Area_de_influencia=Buffer
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+area_trabajo=\u00c1rea de trabalho
+Areas_de_influencia._Introduccion_de_datos=
+arriba=Acima
+ascending_order=Ordem ascendente
+ascending_order_tooltip=Ordenar segundo o campo seleccionado por ordem ascendente
+asignar_coordenadas=
+aspect=Configura\u00e7\u00e3o de aspecto
+Atributo=Atributo
+Atributos_Numericos=
+attributeName=
+attributes=Atributos
+attributeType=
+automatico=Autom\u00e1tico
+aviso_sin_extent_de_referencia=Para usar esta op\u00e7\u00e3o necessita ter como m\u00ednimo uma capa j\u00e1 adicionada que sirva de referencia.
+Ayuda=Ajuda
+back=Anterior
+Back=Anterior
+background_color=Cor de fundo
+baja=Baixa
+Bajar_capa=Mover capa para baixo
+bandas=Bandas
+bands=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de dados
+bd=bd
+bmp=Ficheiros do tipo bmp
+Bold=Negrito
+borra_seleccion=Apagar selec\u00e7\u00e3o
+borrador=Rascunho
+borrar=Apagar
+borrar_todos=
+borrar_uno=
+box=
+break_=Break
+brillo=Brightness
+brillo_y_contraste=
+browse=
+BRX=BRX\:
+BRY=BRY\:
+buffer=Area de influ\u00eancia
+cajetin=
+calcular_errores=
+Calcular_intervalos=Calcular intervalos
+calidad=Qualidade
+Cambio_Color=Mudar de cor
+Cambio_de_estilo=Mudar de estilo
+Cambio_Estilo=Mudar estilo
+cambio_nombre=Mudar de nome
+Cambios_de_estilo=Mudan\u00e7as de estilo
+campo=Campo
+Campo=Campo
+campo_altura_texto=Altura do campo de texto\:
+Campo_clasifica=Campo de classifica\u00e7\u00e3o
+Campo_de_clasificacion=Campo de classifica\u00e7\u00e3o
+campo_de_documentos_asociados=Campo de documentos associados
+Campo_de_etiquetado=Campo da etiqueta
+Campo_para_disolver=
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancel_edition=
+cancel_tip=
+cancelar=Cancelar
+Cancelar=Cancelar
+cancelSearchButton=Cancelar
+cannotReproject=N\u00e3o se pode reprojectar este sistema de coordenadas
+cant_connect=N\u00e3o foi poss\u00edvel realizar a conex\u00e3o
+cant_connect_wfs=N\u00e3o foi poss\u00edvel realizar a conex\u00e3o com WFS
+cantLoad=N\u00e3o se pode carregar a capa WFS
+capa=
+Capa=Capa
+capa_exportada=
+capa_importada=Capa importada. Deseja criar o \u00edndice espacial?
+capas=Capas
+Capas=Capas
+Capas_del_directorio=
+Capas_del_localizador=Localizador de capas
+capas_edition_cache=
+capaWMS=Capa WMS
+caracteres_erroneos=
+cargar=
+cargar_fichero=
+cargar_leyenda=Carregar legenda
+cargar_sin_georef=
+cartografico=Cartogr\u00e1fico
+Cascada=Cascata
+cascada_enable=Deve existir ao menos um quadro vis\u00edvel
+cascada_tooltip=Arranjar janelas em cascata
+catalog_search=Pesquisa de geodados
+cathegory=Categoria
+cathegoryAny=Qualquer
+cathegoryBiota=Biota
+cathegoryBoundaries=Limites
+cathegoryClimatologyMeteorologyAtmosphere=Atmosfera climatol\u00f3gica e meteorol\u00f3gica
+cathegoryEconomy=Economia
+cathegoryElevation=Eleva\u00e7\u00e3o
+cathegoryEnvironment=Meio ambiente
+cathegoryFarming=Agricultura
+cathegoryGeoscientificInformation=Informa\u00e7\u00e3o geocientifica
+cathegoryHealth=Sa\u00fade
+cathegoryImageryBaseMapsEarthCover=Cobertura da Terra com mapas
+cathegoryInlandWaters=\u00c1guas interiores
+cathegoryIntelligenceMilitary=Intelig\u00eancia militar
+cathegoryLocation=Localiza\u00e7\u00e3o
+cathegoryOceans=Oceanos
+cathegoryPlanningCadastre=Cadastro
+cathegorySociety=Sociedade
+cathegoryStructure=Estruturas
+cathegoryTransportation=Transportes
+cathegoryUtilitiesCommunication=Comunica\u00e7\u00e3o e utilidades
+causa_error_desconocida=Erro inesperado do servidor
+Centimetros=Cent\u00edmetros
+Centrar_la_Vista_sobre_un_punto=
+centrar_punto=
+cerrar=Fechar
+Cerrar=Fechar
+change_before=
+change_behind=
+change_height=
+change_width=
+chooseAttribute=Escolhe um atributo para realizar a pesquisa
+circle=
+circle_=
+circulo=C\u00edrculo
+Circulo=C\u00edrculo
+circumscribed=
+city=
+clave=Senha
+clear=Limpar
+close=Fechar
+close_polyline=Close polyline
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_interseccion=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Cobertura_para_unir=
+Coberturas=Coberturas
+Coberturas_de_entrada=
+coincidir_tamano=Coincidir tamanho\:
+coincidir_tamanyo=
+colocar_a_margenes=Colocar com referencia \u00e0s margens
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar ao redor de todos os gr\u00e1ficos.
+colocar_delante=Colocar \u00e0 frente
+colocar_detras=Colocar atr\u00e1s
+color=Cor\:
+Color_Contorno=Cor do contorno
+Color_de_la_Linea=Cor de linha
+Color_de_Relleno=Cor de preenchimento\:
+Color_final=Cor final\:
+Color_inicial=Cor inicial\:
+Color_inicio=Cor inicial
+color_texto=Cor do texto\:
+comentarios=Coment\u00e1rios
+commands_stack=Pila de comandos
+complex_selection=
+complex_selection_=
+compress=Compression
+concordancia=Concord\u00e2ncia
+conectar=Conectar
+conection=Conex\u00e3o
+conexion_correcta=Conex\u00e3o correcta
+configuracion_andami_tooltip=Configura\u00e7\u00e3o Andami
+configurar=Configurar
+Configurar=Configurar
+configurar_ANDAMI=Di\u00e1log de configura\u00e7\u00e3o do ANDAMI.
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador ...
+configurar_todas_las_extensiones=
+confirm_gid=
+confirmacion=
+confirmar_borrar=Aceita apagar o elemento ?
+connect=Conectar
+connect_error=Erro ao conectar
+connectButton=Ligar
+connection_name=Nome da conex\u00e3o
+conservar_escala_visualizacion=Manter escala de vis\u00e3o
+Consola=Console
+consulta=Consulta
+contact_info=
+contact_organization=Organitzaci\u00f3
+contact_person=Nome
+contact_position=C\u00e0rrec
+Contengan=Contenham
+contiene_espacios_en_blanco=
+contraste=Contrast
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=
+coor_geograficas=Coordenadas geogr\u00e1ficas
+coordenadas_vacias=
+coordinates=Coordenadas
+coordinatesContains=cont\u00e9m
+coordinatesEnclose=inclui
+coordinatesEqual=igual
+coordinatesFullyOutsideOf=est\u00e1 totalmente fora de
+copiar=
+copy=
+copy_=
+cortar=
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=
+coverage=
+covered_extension=Extens\u00e3o
+Crear_Buffer=
+Crear_Indice=Spatial index creation...
+Crear_Indice_Intro=
+Crear_Indice_Pregunta_1=
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Crear fichero de georreferenciaci\u00f3n (worldfile)
+created_with=
+creation_date=Data de cria\u00e7\u00e3o
+credentials=Autentica\u00e7\u00e3o
+cross_circle=
+cross_polygon=
+Crucen_con=Cruzem com
+Cruz=Cruz
+Cuadrado=Quadrado
+cuadro_no_asociado=
+cuando_activo=Quando activo
+cut=
+Dado_un_campo_de_atributos=Dado de um campo de atributos
+database=Nome da base de dados
+de=of
+De=of
+debe_estar_activada=Deve estar activada
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+default_name=Capa WFS
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+densityfication=Flatness
+Dentro=inside de polygon
+Dentro_y_fuera=
+Derecha=Direita
+Derecho=Direito
+desactivar_capa=
+desactivar_puntos=
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Ordem descendente
+descending_order_tooltip=Ordenar segundo o campo seleccionado por ordem descendente
+desconectar=Desconectar
+descripcion=Descri\u00e7\u00e3o
+Descripcion=Descri\u00e7\u00e3o
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description=Descri\u00e7\u00e3o
+description_URL=
+desde=Desde
+desde_arriba=Desde cima\:
+desde_izquierda=Desde a esquerda\:
+desea_borrar_la_capa=
+deshacer=
+Desplazamiento=Movimenta\u00e7\u00e3o
+desviacion_tipica=Desvia\u00e7\u00e3o t\u00edpica
+detalles=Detalhes
+Detalles=Detalhes
+DGNFiles=Ficheiros dgn
+Diferencia=Difference
+Diferencia_Introduccion_de_datos=
+dimension=Dimens\u00e3o
+dimensiones=Dimens\u00f5es
+directorio=Diret\u00f3rio
+directorio_extensiones=Diret\u00f3rio de extens\u00f5es
+disagregate_layers=
+Disolver=Dissolve
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+distance_units=Unidades de medida
+distribuir=Distribuir\:
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+divisiones_izquierda=Divis\u00f5es para a esquerda
+documentos_existentes=Documentos existentes
+downloadColumn=Descarga
+driver=Driver
+drivers=Drivers
+dxf_files=DXF files
+Dxffiles=Ficheiros dxf
+e-mail=E-mail
+edicion=
+edit=
+edit_vertex=
+edit_vertex_=
+editable=Editav\u00e9l
+Editar_leyenda=Editar legenda
+editar_propiedades=Editar propriedades
+editar_vertices=
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00famero m\u00e1ximo de intervalos para este campo s\u00e3o
+Elegir_Color=Seleccionar cor
+Elegir_Fuente=Seleccionar fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Elementos seleccionados da capa
+Elija_una_herramienta_de_analisis=
+Eliminar=Remover
+eliminar_capa=Remover capa
+eliminar_extremos=Remover extremos
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+ellipse=Elipse
+ellipse_=ELLIPSE
+en_el_mapa=No mapa\:
+En_metros=Em metros
+En_pixels=Em pixels
+en_unidades=
+Encuadre=Zooms
+Encuadre_Vista=Enquadrar vista
+end=
+end_polygon=
+endinfo=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+enlace_vivo=Hiperliga\u00e7\u00e3o viva
+Enlazar_a_fichero_de_texto=Hiperliga\u00e7\u00e3o para ficheiros de texto
+Enlazar_a_ficheros_de_imagen=Hiperliga\u00e7\u00e3o para ficheiros de imagem
+enter_layer_name=
+enter_path_to_file=
+equal_intervals=Intervalos iguais
+equidistance=
+error=Error
+Error_abriendo_el_fichero=Erro ao abrir ficheiro
+Error_accediendo_a_los_datos=Erro ao aceder aos dados
+Error_atributo_no_numerico=
+error_capa_puntos=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+error_comunicacion_servidor=Produziu-se um erro ao comunicar com o servidor
+error_conexion=Erro ao conectar \u00e0 base de dados.
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+error_escritura=N\u00e3o foi possivel guardar o projecto
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+error_file_exists=
+error_file_not_writable=
+Error_guardando_la_leyenda=Erro ao guardar a legenda
+Error_guardando_la_plantilla=
+error_lectura=N\u00e3o foi possivel abrir o projecto
+Error_preparar_escritura_resultados=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+error_writting_file=
+errores=Erro
+errores_csv=
+errorFENotSupported=De momento s\u00f3 se podem fazer consultas usando a codifica\u00e7\u00e3o "filter encoding" que est\u00e1 suportada pelo servidor
+errorGetRecords=Produziu-se um erro al realizar o "getRecords"
+errorIsASRWServer=\u00c9 um servidor SRW\!
+errorNotCSWSupportedProtocol=Encontru-se o servidor, mas parece que n\u00e3o suporta o protocolo CS-W
+errorNotParsedReply=Erro ao processar a resposta. Encontrou-se o servidor, mas possivelmente n\u00e3o suporta o protocolo especificado
+errorNotSupportedCapabilities=Erro ao realizar un "GetCapabilities". Isto pode ser devido a duas raz\u00f5es\: 1. produziu-se um erro ao tentar realizar a opera\u00e7\u00e3o; 2. o servidor n\u00e3o suporta o protocolo especificado
+errorNotSupportedProtocol=O servidor n\u00e3o suporta o protocolo especificado
+errorNotThesaurusSelected=O protocolo WFS n\u00e3o permite fazer pesquisas se n\u00e3o se escolhe um elemento do "thesaurus"
+errorServerException=O servidor respondeu com uma excep\u00e7\u00e3o
+errorServerNotFound=N\u00e3o se encontra o servidor
+errorSOAPProtocol=Erro no protocolo SOAP
+escala=Escala
+Escala=Escala
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada pelo usu\u00e1rio
+Escoger_Fun_Resumen=
+espaciado_horizontal=Espa\u00e7o horizontal da malha
+espaciado_vertical=Espa\u00e7o vertical da malha
+espacio=Espa\u00e7o\:
+espere=Por favor, espere
+estadisticas=Estat\u00edsticas
+este_por_debajo_de_=Esteja por debaixo de
+este_por_encima_de=Esteja por em cima de
+Esten_contenidos_en=Estejam dentro de
+Estilo=Estilo\:
+estilos=Estilos
+Etiqueta=Etiqueta
+Etiquetado=Etiquetas
+Etiquetados=Etiquetas
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas padr\u00e3o
+exactSentence=Frase exacta
+examinar=Examinar
+Examinar=Procurar
+exploit=
+exploit_=
+export=Exportar
+export_to=
+exportando_features=
+exportar=Exportar
+exportar_a=Exportar para...
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+exporting_=
+extend=
+extend_=
+extension=Extens\u00e3o
+extension_activada=Extens\u00e3o ativa.
+extensiones=
+Extent=Extens\u00e3o
+extents_no_coincidentes=A extens\u00e3o da imagem seleccionada n\u00e3o coincide com a imagem de origem.
+factor=Factor
+fallo_capas=Erro ao aceder \u00e0s capas. As siguientes capas v\u00e3o ser eliminadas do projecto
+fallo_crear_conexion=Erro ao crear a conex\u00e3o
+fallo_crear_pool=Erro na cria\u00e7\u00e3o da ""pool"" de conex\u00f5es
+fallo_obtener_conexion_existente=Erro ao obter uma conex\u00e3o j\u00e1 criada
+fallo_obtener_tablas=Erro ao obter as tabelas da base de dados
+fallo_realizar_consulta=Erro ao realizar uma consulta
+fallo_registrar_conexion=Erro no registo de uma conex\u00e3o
+fax=Fax
+feature=Capas
+features_desea_continuar=
+Fichero=Ficheiro
+fichero_existe=O ficheiro seleccionado j\u00e1 existe como banda da capa
+fichero_incorrecto=Ficheiro incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=
+Ficheros_SHP=
+field=
+fields=Campos
+file=
+file_exists=
+file_name=
+file_version=
+filtro=Filtro
+final_point=
+finalizar=Terminar
+finish=Terminar
+fit_WCS_layer=
+fit_WFS_layer=
+fit_WMS_layer=
+Font=Fonte
+format=Formato
+formato=Formato
+Formato=Formato
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=
+formato_incorrecto=Formato incorrecto
+formatos=Formatos
+from=Desde
+fuente=Fonte
+Fuente=Fonte
+Fuera=
+fuera_de_extent=
+Funciones_Sumarizacion=
+gazetteer_connect=Localizar por "Nomencl\u00e1tor"
+gazetteer_search=Localizar por "Nomencl\u00e1tor"
+general=Geral
+General=Geral
+Generar_Intervalos=Criar intervalos
+geometry=Geometry
+Geoprocesos=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+gestion_encuadre=Gest\u00e3o de enfoque
+Gestor_de_Geoprocesos=
+goto=Fazer um zoom \u00e0 pesquisa
+grado_polinomio=
+grados=Graus\:
+Grados=Graus
+Graficos=Gr\u00e1ficos
+Grosor_de_linea=Grossura da linha
+grosor_linea=Grossura da linha\:
+group=Agrupar
+group_graphic_line=
+grupo=
+GT2shp=GT2shp
+guardado=Guardado em
+guardar=
+Guardar=Guardar
+guardar_cambios=Guardar as altera\u00e7\u00f5es?
+guardar_clave=Guardar senha
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como molde
+Guardar_el_zoom_actual=Guardar zoom actual
+guardar_leyenda=Guardar legenda
+Guardar_leyenda=Guardar legenda
+guardar_proyecto=Guardar projecto
+guardar_tooltip=Guardar as altera\u00e7\u00f5es do projeto
+Habilitar_etiquetado=Activar etiquetas
+hasta=At\u00e9
+height=
+Herramientas=Ferramentas
+Herramientas_de_analisis=
+Herramientas_vista=Ferramentas de vista
+hide_grid=
+Hiperenlace=Hiperliga\u00e7\u00e3o
+horizontal=Horizontal
+horizontal_space=
+host=M\u00e1quina
+hostname=Nome do servidor
+html_in_a_new_view=<HTML>Crea una vista nova al projecte. La nova vista contindr\u00e0 totes les capes definides pel fitxer.</HTML>
+html_in_other_view=
+html_in_the_current_view=<HTML>Afegeix les capes definides pel fitxer a la actual vista activa.</HTML>
+id=ID
+Identificar_Resultados=Identificar resultados
+idioma=Idioma
+Igual_que_la_impresora=Igual \u00e0 impressora
+igual_todos_lados=Igual em todos os lados.
+imagen=Imagem
+Imagen=Imagem
+imagen_no_accesible=
+import=
+import_from_ascii=
+import_layer=Guardar capa em PostGIS.
+import_map_context=
+importar=Importar
+importar_extent=Importar a extens\u00e3o actual da vista
+Imprimir=Imprimir
+in=em
+incorrect_option=
+incorrect_point=
+incorrect_value=
+Indexando=Indexing...
+Indexando_espacialmente=
+Inferior=Abaixo
+info=Informa\u00e7\u00e3o
+info_format_not_supported=
+infobreak=Mostra todos os elementos da capa usando gama de cores.
+infodef=Mostra todos os elementos da capa utilizando o mesmo s\u00edmbolo.
+informacion=Informa\u00e7\u00e3o
+Informacion=Informa\u00e7\u00e3o
+infovalue=Mostra elementos da capa utilizando um s\u00edmbolo para cada valor.
+Inicializando=A iniciar
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_column=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius=Insert radius [R]
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar=
+Insertar=Inserir
+insertar_cajetin=
+insertar_circulo=Inserir c\u00edrculo
+insertar_escala=Inserir escala
+insertar_fila=
+insertar_imagen=Inserir imagem
+insertar_leyenda=Inserir legenda
+insertar_linea=Inserir linha
+insertar_norte=Inserir rosa-dos-ventos
+insertar_poligono=Inserir pol\u00edgono
+insertar_polilinea=
+insertar_punto=Inserir ponto
+insertar_recta=Inserir recta
+insertar_rectangulo=Inserir rect\u00e2ngulo
+insertar_texto=Inserir texto
+insertar_vista=Inserir vista
+inside_circle=
+inside_polygon=
+inteligentSearch=Pesquisa inteligente
+inteligentSearchAscii=Todas as formas da palavra
+inter_arc=
+inter_line=
+internal_polygon_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+Intersecten_con=Intersectam com
+interval=Intervalo
+intervalo=Intervalo
+Intervalo=Intervalo
+Intervalos=Intervalos
+Intervalos_equidistantes=Intervalos equidistantes
+Intervalos_por_rupturas_naturales=Intervalo por quebras naturais.
+into_circle=
+into_circle_or_circumscribed=
+intro_tablename=Introduza o nome da tabela a criar. AVISO\: Se existe a tabela, vai ser apagada.
+introduce_nombre=Introduzir novo nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_intervalo_deseado=Introduza o intervalo desejado
+is_required=\u00e9s obligatori
+Italic=It\u00e1lico
+Izquierda=Esquerda
+Izquierdo=Esquerdo
+join=Uni\u00e3o
+join_=
+jpg=Ficheiros jpeg
+Juntar=
+Juntar._Introduccion_de_datos=
+KeyMapping.Caracter_no_valido=Car\u00e1cter inv\u00e1lido
+keywords=Paraules clau
+keyWords=Palavras chave
+kilometros=Quil\u00f3metros
+Kilometros=Quil\u00f3metros
+last=Anterior
+lastUpdateDate=Data da \u00faltima actualiza\u00e7\u00e3o
+latitud=Latitud
+Launcher.config_mal_formado=. Ficheiro "config.xml" mal formado
+Launcher.config_no_encontrado=. Ficheiro "config.xml" n\u00e3o encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00eancia n\u00e3o resolvida com "plugin"
+Launcher.Dos_skin_extension=Duas estens\u00f5es "skin". Usaremos a \u00faltima
+Launcher.Error_con_las_librerias_del_plugin=Erro com a biblioteca do "plugin"
+Launcher.Error_instanciando_la_extension=Erro ao instanciar a extens\u00e3o
+Launcher.Error_localizando_la_clase_de_la_extension=Erro ao localizar a classe da extens\u00e3o
+Launcher.Hay_dependencias_circulares=Existen depend\u00eancias c\u00edclicas entre os "plugins"
+Launcher.Ignorando_el_directorio=Ignorando o direct\u00f3rio
+Launcher.labelset_class=N\u00e3o foi poss\u00edvel encontrar a classe das etiquetas (labelset)
+Launcher.look_and_feel=N\u00e3o foi poss\u00edvel activar o "look and feel"
+Launcher.No_se_encontro_la_clase_de_la_extension=N\u00e3o se encontrou a classe da extens\u00e3o
+Launcher.No_se_encontro_la_clase_mdi_manager=N\u00e3o se encontrou a classe "mdi manager"
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=N\u00e3o foi poss\u00edvel ter acesso \u00e0 classe "mdi manager"
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=N\u00e3o foi poss\u00edvel guardar a configura\u00e7\u00e3o de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=N\u00e3o foi poss\u00edvel instanciar a classe "mdi manager"
+Launcher.No_se_puede_acceder_a=N\u00e3o se consegue ter acesso a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Produziu-se um erro ao guardar a configura\u00e7\u00e3o dos "plugins"
+Launcher.Two_extensions_with_the_same_priority=Duas extens\u00f5es com a mesma prioridade, s\u00f3 uma ser\u00e1 carregada.
+Launcher.Two_menus_with_the_same_position=Dois menus com a mesma posi\u00e7\u00e3o
+layer=Capa
+Layer=Capa
+layer_abstract=Resumo
+layer_name=Nome da capa
+layer_title=Titulo da capa
+layerName=
+LayerName=
+layers_in_other_view=
+layers_in_the_current_view=
+layerType=
+length=
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Se est\u00e1 a utilizar um campo da uni\u00e3o na legenda (e/ou etiquetas). Mude a legenda antes de retirar a uni\u00e3o, por favor.
+Leyenda_Por_Defecto=Legenda por defeito
+line=
+line_=
+line_type=
+linea=Linha
+Linea=Linha
+linea_grafica=Linha gr\u00e1fica
+lineal_directo=Lineal direito
+linf_der=Inf. dir.  X
+link=Hiperliga\u00e7\u00e3o
+Link=Hiperliga\u00e7\u00e3o
+linkColumn=P\u00e1gina web
+linkError=Erro ao carregar a hiperliga\u00e7\u00e3o
+linkLoad=Carga de um recurso web
+load_from_xml=
+loadWMS=Carga de WMS
+localizador=Locator
+Localizador_por_atributo=Localizador por atributo
+localize=Localizar
+logo_URL=URL logotip
+longitud=
+lowerCoordinates=Inferiores
+lppp=ppp
+lsup_izq=Sup. esq. X
+m/pixel=metros/pixel
+malla_activada=Malha activada
+mantainold=Eliminar as pesquisas anteriores
+mantener_intervalo=Manter intervalo
+map_context_file_error=
+map_extent=Extens\u00e3o
+map_size_in_pixels=Tamany del mapa (p\u00edxels)
+map_units=Unidades do mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco da vista
+margenes=Margens\:
+Mas_100=O n\u00famero de valores \u00e9 superior a 100 e n\u00e3o contribui para uma clara informa\u00e7\u00e3o
+mas_de_100_simbolos=Mais de 100 s\u00edmbolos n\u00e3o contribuem para uma clara informa\u00e7\u00e3o de um mapa.
+maxFeatures_aviso=
+maximo=M\u00e1ximo
+Maximo=
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Erro n\u00e3o capturado pelo usu\u00e1rio
+MDIFrame.quiere_salir=Fechar gvSIG?
+MDIFrame.salir=Fechar
+MDIManagerFactory.No_skin_extension_in_the_plugins=N\u00e3o se encontrou nenhuma extens\u00e3o "skin" entre os "plugins"
+media=M\u00e9dia
+Media=
+medir_area=Medir \u00e1rea
+medir_distancias=Medir dist\u00e2ncias
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages._no_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
+metadata_catalog=Pesquisa de geodados - Conex\u00e3o
+metadata_tree=\u00c1rvore de metadados
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Milhas
+minimo=M\u00ednimo
+Minimo=
+minx=min.x
+miny=min.y
+modificar=
+modification_date=Data de modifica\u00e7\u00e3o
+modify=
+mosaico_tooltip=Mosaico
+Mostrar_Contorno=Mostrar contorno
+mostrar_descripcion=Mostrar descri\u00e7\u00e3o
+mostrar_puntos=Mostrar numeraci\u00f3n de GCP's
+Mostrar_siempre=Mostrar sempre
+mostrar_unidades=Mostrar unidades
+move=
+move_=
+move_elements=
+Move_from_view=
+move_handlers=
+move_layer_down=Mover para baixo
+move_layer_up=Mover para cima
+Mover_geo=
+msg_save_raster=
+mtspixel=Mts/pixel
+muestra=
+Muestra_atributos=Mostrar atributos das capas seleccionadas.
+muestra_consola_tooltip=Mostra a consola
+Muestra_los_atributos_de_las_capas_seleccionadas=Mostrar atributos das capas seleccionadas
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra os elementos da capa usando um s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra os elementos da capa usando uma gama de cores em fun\u00e7\u00e3o do valor de um determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra todos os elementos de uma capa usando o mesmo s\u00edmbolo
+multi_type=
+multiple_value=Valor m\u00faltiplo
+multiples_intervalos=M\u00faltiplos intervalos
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+name=Nome
+natural_intervals=Intervalos naturais
+navegacion=Navega\u00e7\u00e3o
+navegacion_vista=Vista modo navega\u00e7\u00e3o
+necesita_un_tema_activo=Necessita uma capa activada
+necesita_un_tema_vectorial_activo=Necessita uma capa activada
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_layer=
+new_postgis=
+new_shp=
+next=Seguinte
+Next=Seguinte
+next_point_or_end=
+next_previous_add_del_cancel=
+ninguna_impresora_configurada=Nenhuma impressora configurada
+Nivel_de_transparencia=N\u00edvel de transpar\u00eancia
+no=No
+no_activos=N\u00e3o activos
+no_adjust_grid=
+No_de_intervalos=N\u00ba de intervalos
+no_hay_ninguna_capa_seleccionada=
+no_hay_ninguna_capa_seleccionado=
+No_mostrar=N\u00e3o mostrar a capa quando a escala
+No_mostrar_la_capa_cuando_la_escala=N\u00e3o mostrar a capa quando a escala
+no_puede_continuar=
+No_reconocido=N\u00e3o reconhecido
+No_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_Shape=Esta capa n\u00e3o \u00e9 do tipo Shape
+No_usar_buffer_redondeado=
+no_visibles=N\u00e3o vis\u00edvel
+nombre=Nome
+Nombre=Nome
+nombre_capa=Nome da capa
+nombre_cobertura=Nome da cobertura
+nombre_feature=Nome da capa
+Nombre_que_se_le_dara_al_zoom=Nome para o zoom
+nombre_sesion=Nome da sess\u00e3o
+Nombres=Nomes
+none_selected=Nenhum seleccionado
+normal=Normal
+north=Norte
+not_available=N\u00e3o dispon\u00edvel
+Nueva_tabla=Nova tabela
+nuevo=Novo
+Nuevo_conjunto=Novo conjunto
+nuevo_proyecto=Novo projecto
+nuevo_tamano_fuente=Novo tamanho de fonte\:
+nuevo_tooltip=Criar novo projecto
+num_bandas=N\u00famero de bandas
+num_columnas=
+num_filas=
+Num_intervalos=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+Numero_de_segmentos_por_cuadrante=
+numero_incorrecto=
+N\u00fam_intervalos=N\u00famero de intervalos
+Obtener_mas_proximo=
+of=de
+ogc_mapcontext_file=OGC Web Map Context
+ok=Aceitar
+Ok=Aceitar
+onSharpening=Activar "pansharpening"
+opacidad=Opacidade
+opciones=Op\u00e7\u00f5es
+open_first_time=Abrir com a vista
+open_layers_as=
+Operacion_de_overlay=
+Operaciones_adicionales=
+optinos.network.click_to_test_connection=
+options=Op\u00e7\u00f5es
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.general.select_theme=
+options.network.status=
+orientacion=Orienta\u00e7\u00e3o\:
+origen_de_datos=Origem de dados
+Origen_de_datos=Origem dos dados
+Origen_de_Datos=Origem dos dados\:
+Otros=Outros
+out_circle=
+out_polygon=
+out_rectangle=
+owner=Propriet\u00e1rio
+page=P\u00e1gina
+paint=Desenhar o resultado
+parameters=Par\u00e2metros
+parametros=Par\u00e2metros
+Parametros=Par\u00e2metros
+password=Senha
+paste=Paste
+paste_elements=
+path=Rota
+pegar=
+Perimetro=Per\u00edmetro
+period=Per\u00edodo
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa com o valor de um determinado campo
+Personalizado=Personalizado
+Pies=P\u00e9s
+pila_de_comandos=
+pixeles=pixels
+pixels=pixels
+Plain=
+plantilla=
+plegar_despl=Plegar/Desplegar
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Duas classes com o mesmo nome no "plugin"
+PluginClassLoader.Error_reading_file=Erro ao ler o ficheiro\:
+pluginNotFound=N\u00e3o tens nenhuma extens\u00e3o para carregar recursos de este tipo
+pluginNotFoundTitle=Carga de capas
+PluginServices.Bug_en_el_codigo="Bug" no c\u00f3digo
+PluginServices.Error_grave_de_la_aplicacion=Erro grave na aplica\u00e7\u00e3o. \u00c9 conveniente guardar e fechar a aplica\u00e7\u00e3o
+PluginServices.No_se_encontro_el_recurso_de_traducciones=N\u00e3o foi poss\u00edvel encontrar recursos das tradu\u00e7\u00f5es
+PluginServices.No_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=N\u00e3o foi poss\u00edvel activar a ampulheta
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=N\u00e3o foi poss\u00edvel restaurar o cursor
+PluginServices.Procesando=
+png=Ficheiros png
+point=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+poner_temas_a=Por capas a...
+por_debajo_de=Por debaixo de\:
+por_encima_de=Por em cima de\:
+Por_favor_active_el_tema=Por favor, active a capa
+Por_favor_active_la_capa=
+posicion_linea=Posi\u00e7\u00e3o da linha
+postcode=
+postgisColumn=PostGIS
+postgisError=Erro ao carregar a base de dados
+postgisLoad=Carga de PostGIS
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferences=
+preferencias=
+Preferencias=
+preparar_pagina=Preparar p\u00e1gina
+Preparar_pagina=Preparar p\u00e1gina
+presentacion=Apresenta\u00e7\u00e3o
+previous=
+previsualizacion=
+Previsualizacion=Pr\u00e9-visualizar
+Previsualizacion_de_simbolo=Pr\u00e9-visualiza\u00e7\u00e3o do s\u00edmbolo
+primero=
+prioridad=Prioridade
+procesar=
+process_tip=
+properties=Propriedades
+propiedad=
+propiedades=Propriedades
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=
+Propiedades_de_la_Capa=Propriedades da capa
+propiedades_del_tema=Propriedades da capa
+Propiedades_del_Tema=Propriedades da capa
+Propiedades_escala_grafica=Propriedades da escala
+propiedades_grafico=Propriedades gr\u00e1ficas
+propiedades_mapa=Propriedades do mapa
+propiedades_marco_imagenes=Propriedades do marco das imagens
+propiedades_marco_leyenda=Propriedades do marco da legenda
+propiedades_marco_vista=Propriedades do marco da vista
+propiedades_raster=Propiedades da cobertura
+propiedades_sesion=Propriedades da sess\u00e3o
+propiedades_tabla=Propriedades de tabela
+propiedades_tema=Propriedades da capa
+Propiedades_texto=Propriedades do texto
+propiedades_vista=Propriedades da vista
+props=
+protocolsGroup=Protocolos
+provider=Provedor
+prueba_conexion=Testar conex\u00e3o
+puerto=Porta
+Pulgadas=Polegadas
+punto=Ponto
+puntos=
+purpose=
+pwd=Senha
+quantile_intervals=Intervalos quartis
+quiere_continuar=Tem a certeza de que quer continuar?
+quitar=Remover
+Quitar=Remover
+Quitar_capa=Remover capa
+quitar_enlaces=Remover hiperliga\u00e7\u00f5es
+Quitar_todos=Remover todos
+Quitar_Todos=Remover todos
+quitar_uniones=Remover uni\u00f5es
+rango_de_escalas=Amplitude de escalas
+Rango_de_escalas=Amplitude de escalas
+Rasterfiles=Ficheiros raster
+realce=Realce
+realces=
+realmente_desea_guardar=
+Recortar=Clip
+Recortar._Introduccion_de_datos=
+recorte=Recorte
+recorte_colas=Recorte de filas
+recorte_vista=Recortar a vista
+recta=Recta
+rectangle=
+rectangle_=
+rectangulo=Rect\u00e2ngulo
+recuento=Recontar
+Recuperar_leyenda=Recuperar legenda
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zooms
+redo=
+redo_error=
+reference=
+refrescar=Actualizar
+refresh_capabilities=Actualizar cache
+refresh_capabilities_tooltip=Marque esta op\u00e7\u00e3o para reescrever os dados anteriores.
+registros=Registos
+registros_seleccionados_total=Total de registos seleccionados
+rehacer=
+rellenar_marco_vista=Preencher espa\u00e7o da vista
+relleno=Preencher\:
+remove=Remover
+remove_column=
+remove_elements=
+remove_geometry=
+remove_row=
+remove_rows=
+renombrar=Mudar de nome
+reproyectar_aviso=A projec\u00e7\u00e3o da capa n\u00e3o \u00e9 a mesma da que a vista.\nAVISO\: Isto pode gerar imprecis\u00e3o com algumas transforma\u00e7\u00f5es.\nPor favor, leia a documenta\u00e7\u00e3o
+reproyectar_pregunta=Deseja voltar a projectar?
+resolucion=Resolu\u00e7\u00e3o
+resolucion_resultado=Resolu\u00e7\u00e3o do resultado\:
+resolution=
+resourceLinkColumn=Hiperliga\u00e7\u00e3o
+resourceShowColumn=Ver
+resourceTypeColumn=
+respuesta_error_servidor=N\u00e3o foi possivel obter a cobertura
+resto_valores=Resto de valores
+restore=
+restrictArea=Restringir a \u00e1rea de pesquisa
+results=Resultados
+resutsByPage=Resultados por p\u00e1gina
+rootName=Raiz
+rotate=
+rotate_=
+salir=Fechar
+Salir=Fechar
+salir_tooltip=Fechar
+salvar=
+salvar_raster=Guardar como raster
+Sample=Exemplo
+save_to_ascii=
+save_to_xml=
+scale=Escala
+scale_=
+scaleAny=qualquer
+scaleI=> 1 000 000
+scaleII=1 000 000 - 250 000
+scaleIII=250 000 - 50 000
+scaleIV=50 000 - 10 000
+scaleV=10 000 - 5 000
+scaleVI=< 5 000
+Se_superponen_a=Se sobrep\u00f5em a
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=Se ter\u00e1 em conta apagar os registros desde
+se_van_a_guardar_=
+Sean_disjuntos_a=sejam disjuntos a
+Sean_iguales_a=sejam iguais a
+search_results=Resultados da pesquisa
+searchButton=Pesquisar
+seleccion=Selec\u00e7\u00e3o
+seleccion_campos=Seleccione os campos
+seleccion_de_campos=Selec\u00e7\u00e3o de campos
+seleccion_fuente=Selec\u00e7\u00e3o de fonte
+Seleccion_por_capa=
+Seleccion_por_tema=Selec\u00e7\u00e3o por capa
+selecciona_sistema_de_referencia=
+seleccionar=
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_coberturas=Seleccionar coberturas
+seleccionar_CRS=Seleccionar CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar as capas activas dos elementos que\:
+Seleccionar_del_conjunto=Seleccionar o conjunto
+Seleccionar_Directorio=
+seleccionar_fichero=
+Seleccionar_fichero=Seleccionar ficheiro
+seleccionar_formato=Seleccionar formato
+seleccionar_parametros=Seleccionar os par\u00e2metros
+seleccionar_por_punto=Seleccionar por ponto
+seleccionar_por_rectangulo=Seleccioar por rect\u00e2ngulo
+seleccionar_puntos=
+seleccionar_srs=Seleccionar SRS
+seleccionar_tiempo=Seleccionar a posi\u00e7\u00e3o para o tempo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccione o campo a juntar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccionar uma data...
+seleccione_tabla=Selecciona a tabela
+seleccione_tabla_a_enlazar=Seleccione a tabela a juntar
+seleccione_tabla_origen=Seleccione a tabela de origem do join
+select=
+select_all=Seleccionar todos
+select_driver=
+select_features=Selecione as capas
+select_fields=Selecionar campos da capa
+select_formats=Seleccionar formatos
+select_from_point=
+select_geom_field=Selecciona o campo que leva a geometria
+select_geometry=
+select_geometry_type=
+select_handlers=
+select_layers=Seleccionar capas
+select_none=Remover todos
+select_other_geometry_or_end=
+select_unique_field=Seleccione o campo \u00fanico
+selectBandaRefinado=Seleccionador de bandas de refinado
+selected_dimensions=Dimens\u00f5es seleccionadas
+selected_layer=
+selected_layers=Capas seleccionadas
+selected_parameters=
+selected_themes=Temas seleccionados
+selectfromview=
+selection=
+selection_=
+selection_color=Cor de selec\u00e7\u00e3o
+server=Servidor
+server_abstract=Sumario
+server_cant_render_layers=Este servidor n\u00e3o pode "renderizar" estas capas juntas. Tenta fazer peti\u00e7\u00f5es separadas para cada capa.
+server_timeout=Alcan\u00e7ado m\u00e1ximo tempo de espera de resposta do WMS
+server_title=Titulo
+server_type=Tipo de servidor
+serverReply=Resposta do servidor
+serverURL=Introduza o endere\u00e7o do servidor de catalogo
+serverURLCat=Introduza o endere\u00e7o do servidor de "nomencl\u00e1tor"
+service_info=Informa\u00e7\u00e3o do servi\u00e7o
+servidor=Servidor
+Servidor=Servidor
+servidor_wcs_no_responde=O servidor seleccionado n\u00e3o responde
+set=Establecer
+settings=
+settings_editor=Editor de ajustes
+shape_seleccion=Exportar selec\u00e7\u00e3o.
+Shapefile=Ficheiro shp
+Shapefiles=Ficheiros shp
+show_grid=
+show_layer_names=Mostrar nomes
+show_this_dialog_next_startup=
+shp_files=SHP files
+siempre=
+siguiente=Seguinte
+Siguiente=Seguinte
+simbolo=
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbolo_Unico=S\u00edmbolo \u00fanico
+Simbologia=Simbologia
+simple=Simples
+simplificar=Simplificar
+sin_realce=Sem realce
+sin_titulo=Sem t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar a cor do borde com a de preenchimento\:
+single_value=Valor simples
+size=
+Size=Tamanho
+sobre_la_barra=Sobre a barra
+Sobreescribir_fichero=
+Solo_disolver_adyacentes=
+Solo_para_capas_vectoriales=S\u00f3 para capas (vectoriais)
+splain=
+SplashWindow.Iniciando=A iniciar...
+square=
+srs=Srs
+start_edition=
+state_or_province=
+statistics=Estat\u00edsticas
+StatusBar.Aplicacion_iniciada=Aplica\u00e7\u00e3o iniciada
+stop_edition=
+stretch=
+stretch_=
+style=Estilo
+Style=Estilo
+Subir_capa=Mover capa para cima
+Sum=Summatory
+suma=Soma
+Superior=Superior
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+S\u00edmbolo=S\u00edmbolo
+Tabla=Tabela
+Tabla_de_Atributos=Tabela de atributos
+Tabla_de_prueba=Testar tabela
+tablas=Tabelas
+Tablas=Tabelas
+table=Tabla
+tag=tag
+tamano=Tamanho\:
+tamano_metros=Tamanho em metros
+tamano_pagina=Tamanho da p\u00e1gina
+tamano_posicion=Tamanho e posi\u00e7\u00e3o
+tamanyo_borde=Tamanho do borde
+tamanyo_fuente=Tamanho da fonte
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+tarea_en_progreso=Tarefa em progresso
+telephone=Tel\u00e8fon
+Tema=Capa
+Terminar=
+terminate=Terminate
+test_now=
+texto=Texto
+theme=
+Tiempo=Tempo
+Tile=Lado a Lado
+tile_tooltip=Arranjar a janela Lado a Lado
+time=
+timeout=O tempo terminou
+tipo_dato=Tipo de dado
+tipo_de_intervalo=Tipo de intervalo
+Tipo_de_intervalos=Tipo de intevalos
+tipo_de_leyenda=Tipo de legenda
+Tipo_de_leyenda=Tipo de legenda
+Tipo_de_linea=Tipo de linha
+tipo_fichero_proyecto=Ficheiros de projecto gvSIG (*.gvsproj)
+tipo_leyenda=Ficheiros de legenda (*.gvl)
+tipo_linea=Tipo de linha\:
+Tipo_no_reconocido=Tipo n\u00e3o reconhecido
+tipo_relleno=Tipo de preenchimento\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+title=T\u00edtulo
+titulo=Gestor de projectos
+titulo_confirmar=Confirma\u00e7\u00e3o
+titulo_consola=Informa\u00e7\u00e3o de console
+titulo_fframetext=T\u00edtulo do campo de texto
+to=At\u00e9
+to_annotation=
+to_palette=
+toda_la_tabla=Toda a tabela
+todos=Todos
+Toquen=toquem
+total=
+transparencia=Transpar\u00eancia
+Transparencia=Transpar\u00eancia
+transparencia_pixel=
+Triangulo=Tri\u00e2ngulo
+trim=
+type=Tipo
+ultimo=
+ULX=ULX\:
+ULY=ULY\:
+Un_Layer=Seleccione pelo menos uma capa
+undo=
+undo_error=
+ungroup=Desagrupar
+unidades=Unidades\:
+Unidades=Unidades\:
+Union=Union
+Union._Introduccion_de_datos=
+unite_separate=
+unknown=Desconhecido
+unknown_response_format=
+unsupported_map_context_version=
+unsupported_version=Versi\u00f3 no suportada
+untitled=Sem t\u00edtulo
+upperCoordinates=Superiores
+Usar_indice_espacial=Usar \u00edndice espacial
+Usar_los_campos_de_la_capa=
+usar_marco=Usar marco
+usar_rango=Usa uma amplitude
+Usar_solamente_los_elementos_seleccionados=
+usar_titulo=Usar t\u00edtulo
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+username=Usu\u00e1rio
+usuario=Usu\u00e1rio
+utilizar_margenes_impresora=Utilizar m\u00e1rgens da impressora.
+vacia=Vazia
+valor=Valor
+Valor=Valor
+Valor_azul=Valor azul
+Valor_Bandas=Valor bandas
+valor_pixel=Valor do pixel
+Valor_rojo=Valor vermelho
+Valor_verde=Valor verde
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+Valores_Unicos=Valores \u00fanicos
+value=Valor
+varianza=Varia\u00e7\u00e3o
+ventana=Janela
+Ventana=Janela
+ventana_proyecto=Janela de projecto
+Ver=Ver
+ver_tabla_atributos=Ver tabela de atributos
+ver_tooltip=Ver janela de projecto
+version=Versi\u00f3
+version_conflict=Conflito de vers\u00f5es
+vertical=Vertical
+vertical_space=
+vertices=
+view=Vis\u00e3o
+visible=Vis\u00edvel
+visibles=Vis\u00edveis
+Vista=Vista
+vistas=Vis\u00f5es
+visualizacion=Visualiza\u00e7\u00e3o
+Visualizacion=Visualiza\u00e7\u00e3o
+visualizar_cuadricula=Visualizar malha
+warning=
+warnings=Aviso
+wcs_properties=Propriedades WCS
+WCS_properties=Propietats del WCS
+wcs_server_error=
+wcsColumn=Cobertura
+wcsError=Erro ao carregar a cobertura
+wcsLoad=Carga de WCS
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfsColumn=Capa
+wfsError=Erro ao carregar a capa
+wfsLoad=Carga de WFS
+width=Ampl\u00e0ria
+Window=Janela
+WMS=WMS
+wms_cant_connect=N\u00e3o foi poss\u00edvel realizar a conex\u00e3o com WMS
+wms_not_queryable=Este servidor n\u00e3o aceita peti\u00e7\u00f5es deste tipo
+wms_properties=Propriedades WMS
+wms_server_error=Erro do servidor WMS
+wms_transparency=Transpar\u00eancia
+wmsColumn=Mapa
+wmsError=Erro ao carregar o mapa
+WMSLayer=Capa WMS
+xmax=X m\u00e1xima
+xmin=X m\u00ednima
+Yardas=Jardas
+yes=
+ymax=Y m\u00e1xima
+ymin=Y m\u00ednima
+zoom=
+Zoom=Zoom
+Zoom_a_la_capa=
+Zoom_Acercar=Zoom aproximar
+Zoom_al_Tema=Zoom \u00e0 capa
+Zoom_Alejar=Zoom afastar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre a vista
+Zoom_Mas=Zoom mais
+zoom_mas_vista=
+Zoom_Mas_Vista=Zoom mais sobre a vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre a vista
+Zoom_pixel=Zoom \u00e0 resolu\u00e7\u00e3o do raster
+Zoom_previo=
+Zoom_Previo=Zoom anterior
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom \u00e0 selec\u00e7\u00e3o
+Zoom_sgte=
+zooms=Zooms

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_cs.properties	(revision 42196)
@@ -0,0 +1,1670 @@
+#Translations for language: cs
+#Mon Nov 06 08:49:26 CET 2006
+(escala_maxima)=(maxim\u00e1ln\u00ed m\u011b\u0159\u00edtko)
+(escala_minima)=(minim\u00e1ln\u00ed m\u011b\u0159\u00edtko)
+_(Etiquetas_estandar)=(Standardn\u00ed popisy)
+_(Intervalos)=(Intervaly)
+_(Simbolo_unico)=(Unik\u00e1tn\u00ed symboly)
+_(Valores_unicos)=(unik\u00e1tn\u00ed hodnoty)
+__valenciano=Valencian
+__espacio_vertical=Vertik\u00e1ln\u00ed odsazov\u00e1n\u00ed\:
+__lineas=\u0159\u00e1dky
+__proyeccion_actual=Aktu\u00e1ln\u00ed projekce\:
+__redimensionar_texto_escala=Zm\u011bna velikosti textu dle zobrazovac\u00edho m\u011b\u0159\u00edtka
+__seleccion_de_fuente=V\u00fdb\u011br p\u00edsma
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+A5=A5
+A6=A6
+a_new_view=Nov\u00fd pohled
+abajo=Dol\u016f
+abrir=Otev\u0159\u00edt
+Abrir=Otev\u0159\u00edt
+Abrir_Geoproceso=Otev\u0159i Geoprocesing
+Abrir_Imagen=Otev\u0159\u00edt obr\u00e1zek
+abrir_plantilla=Otev\u0159\u00edt \u0161ablonu
+abrir_proyecto=Otev\u0159\u00edt projekt
+abrir_tooltip=Otev\u0159\u00edt existuj\u00edc\u00ed projekt
+Abrir_una_capa=Otev\u0159\u00edt vrstvu
+abstract=Abstrakt
+accept_tip=Zpracuj GCP a ulo\u017e georeferencov\u00e1n\u00ed. Dokon\u010di vkl\u00e1d\u00e1n\u00ed GCP.
+Accion_Predefinida=P\u0159eddefinovan\u00e1 akce
+aceptar=Budi\u017e
+Aceptar=Budi\u017e
+acerca_de=O programu...
+activa_la_ventana=Aktivn\u00ed okno
+activar=Activate
+activar_regla=Aktivace prav\u00edtka
+activo=
+activos=Aktivn\u00ed
+add=P\u0159idat
+add_delete_edit_fields=Atribut m\u016f\u017ee b\u00fdt vlo\u017een, smaz\u00e1n nebo p\u0159ejmenov\u00e1n.
+add_field=P\u0159idej atribut
+add_layer=P\u0159idat vrstvu
+add_rows=P\u0159idej z\u00e1znam
+add_vertex=Vlo\u017e vrchol
+addlayer=P\u0159idat vrstvu
+address=Adre\u00e7a
+address_type=
+adjust_grid=
+adjust_transparency=Nastaven\u00ed pr\u016fhlednosti
+advanced=Pokro\u010dil\u00fd
+advanced_settings=Pokro\u010dil\u00e9 nastaven\u00ed
+Agregacion=Agregace
+Agregacion_Desc=Funkce, kter\u00e1 transformuje detailn\u00ed data na hrub\u00e1 data.
+agrupacion=Seskupen\u00ed
+agrupar=Seskupit
+agrupar_capas=Seskupen\u00ed vrstev
+agrupar_graficos=Seskupen\u00ed prvk\u016f
+agrupar_linea=Seskupen\u00ed lini\u00ed s grafick\u00fdmi prvky
+Ajustar_cobertura_wcs=Nastaven\u00ed WCS
+ajustar_rejilla=Nastav s\u00ed\u0165
+Ajustar_transparencia=Nastavit pr\u016fhlednost
+ajustes_linea_grafica=Nastaven\u00ed lini\u00ed
+Al_leer_la_leyenda=na\u010d\u00edt\u00e1n\u00ed legendy
+alerta=Upozorn\u011bn\u00ed
+algoritmo=Algoritmus
+alias=Alias
+align_center=Zarovnej na st\u0159ed
+align_down=Zarovnej dol\u016f
+align_left=Zarovnej vlevo
+align_right=Zarovnej vpravo
+align_to_layout_center=Zarovnej na st\u0159ed mapy
+align_to_layout_down=Zarovnej k spodn\u00edmu okraji mapy
+align_to_layout_left=Zarovnej k lev\u00e9mu okraji mapy
+align_to_layout_right=Zarovnej k prav\u00e9mu okraji mapy
+align_to_layout_up=Zarovnej k horn\u00edmu okraji mapy
+align_to_layout_vertical_center=Zarovnej na vektik\u00e1ln\u00ed st\u0159ed mapy
+align_up=Zarovnej nahoru
+align_vertical_center=Zarovnej na vektik\u00e1ln\u00ed st\u0159ed
+alineamiento=Zarovn\u00e1n\u00ed\:
+alinear=Zarovn\u00e1n\u00ed
+alinear_graficos=Zarovnat prvek
+allWords=V\u0161echna slova
+alta=Vysok\u00fd
+alto=V\u00fd\u0161ka
+altura=V\u00fd\u0161ka\:
+Altura_fija_de_texto=Pevn\u00e1 v\u00fd\u0161ka textu
+ambito=Rozsah
+ampl_extent=Zm\u011b\u0148 p\u0159\u00edponu georeferencovan\u00e9ho obr\u00e1zku
+Anadir=P\u0159idat
+Anadir_al_conjunto=P\u0159idat do mno\u017einy
+Anadir_capa=P\u0159idat vrstvu
+Anadir_Capa=P\u0159idat vrstvu
+Anadir_capa_de_eventos=P\u0159idej vrstvu ud\u00e1losti
+anadir_tag=P\u010didej tag
+Anadir_tema_de_eventos=P\u0159idat t\u00e9ma ud\u00e1losti
+anadir_titulo=
+Anadir_todos=P\u0159idat v\u0161e
+Analisis=Anal\u00fdzy
+ancho=\u0160\u00ed\u0159ka
+ancho_alto=\u0160\u00ed\u0159ka X v\u00fd\u0161ka
+Ancho_Contorno=\u0160\u00ed\u0159ka ohrani\u010den\u00ed
+Ancho_de_linea=\u0160\u00ed\u0159ka linie
+anchura=\u0160\u00ed\u0159ka\:
+angulo_rotacion=Uhel nato\u010den\u00ed\:
+anterior=P\u0159edchoz\u00ed
+Anterior=P\u0159edchoz\u00ed
+anyResult=Nejsou \u017e\u00e1dn\u00e9 v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed
+anyWord=Jak\u00e9koliv slovo
+Aplicar=Pou\u017e\u00edt
+apply=Pou\u017e\u00edt
+Apply=Pou\u017e\u00edt
+arc=Use\u010dka
+arc_=ARC
+Archivo=Soubor
+Archivos_de_Disco=Soubor na disku
+Area_de_influencia=Buffer
+Area_de_influencia_definida_por_un_campo=Obalov\u00e1 z\u00f3na definovan\u00e1 atributem
+Area_de_influencia_definida_por_una_distancia=Obalov\u00e1 z\u00f3na definovan\u00e1 vzd\u00e1lenosti
+area_trabajo=Pracovn\u00ed oblast
+Areas_de_influencia._Introduccion_de_datos=Obalov\u00e1 z\u00f3na. Vstup dat
+arriba=Nahoru
+ascending_order=Vzestupn\u00e9 po\u0159ad\u00ed
+ascending_order_tooltip=Se\u0159adit podle zvolen\u00e9 polo\u017eky vzestupn\u011b
+asignar_coordenadas=
+Asistente_de_geoprocesamiento=Geoprocesing pr\u016fvodce
+aspect=Konfigurace pohledu
+Atributo=Atribut
+Atributos_Numericos=\u010c\u00edseln\u00fd atribut
+attributeName=N\u00e1zev
+attributes=Atributy
+attributeType=Datov\u00fd typ
+automatico=Automaticky
+aviso_sin_extent_de_referencia=Aby jste mohli pou\u017e\u00edt tuto volbu, pot\u0159ebujete m\u00edt alespo\u0148 jednu vrstvu jako referen\u010dn\u00ed
+Ayuda=N\u00e1pov\u011bda
+back=P\u0159edchoz\u00ed
+Back=P\u0159edchoz\u00ed
+background_color=Barva pozad\u00ed
+baja=Spodn\u00ed
+Bajar_capa=P\u0159esun vrstvy dol\u016f
+bandas=Okraje
+bands=Okraje
+barra=Sloupec\:
+base=base
+base_datos=Datab\u00e1ze
+bd=db
+bmp=BMP soubory
+Bold=Tu\u010dn\u00fd
+borra_seleccion=Vymazat vybran\u00e9
+borrador=Koncept
+borrar=Smazat/Zru\u0161it
+borrar_todos=Sma\u017e v\u0161e
+borrar_uno=Sma\u017e vybran\u00e9 body
+box=box
+break=P\u0159eru\u0161it
+break_=P\u0158ERU\u0160IT
+brillo=Jas
+brillo_y_contraste=Jas a kontrats
+browse=Vyhledej
+BRX=BRX\:
+BRY=BRY\:
+buffer=Buffer
+cajetin=Box
+calcular_errores=
+Calcular_intervalos=V\u00fdpo\u010det intervalu
+calidad=Kvalita
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Zm\u011b\u0148 v\u00fd\u0161ku vybran\u00e9ho elementu na v\u00fd\u0161ku nejvy\u0161\u0161\u00edho elementu.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Zm\u011b\u0148 \u0161\u00ed\u0159ku vybran\u00e9ho elementu na \u0161\u00ed\u0159ku nej\u0161i\u0159\u0161\u00edho elementu.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Zm\u011b\u0148 velikost vybran\u00e9ho elementu na velikost nejv\u011bt\u0161\u00edho elementu.
+Cambio_Color=Zm\u011bna barvy
+Cambio_de_estilo=Zm\u011bna stylu
+Cambio_Estilo=Zm\u011bna stylu
+cambio_nombre=Zm\u011bna n\u00e1zvu
+Cambios_de_estilo=Zm\u011bny stylu
+campo=Pole
+Campo=Pole
+campo_altura_texto=V\u00fd\u0161ka textov\u00e9ho pole\:
+Campo_clasifica=Kl\u00ed\u010dov\u00e1 polo\u017eka
+Campo_de_clasificacion=Kl\u00ed\u010dov\u00e1 polo\u017eka
+campo_de_documentos_asociados=P\u0159\u00edslu\u0161n\u00e9 dokumenty
+Campo_de_etiquetado=Popisn\u00e9 pole
+Campo_para_disolver=Atribut pro dissolve
+Campos=Pole
+cancel=Zru\u0161it
+Cancel=Zru\u0161it
+cancel_edition=
+cancel_tip=Vr\u00e1tit p\u0159edchoz\u00ed zm\u011bny a zav\u0159\u00edt dialog. M\u016f\u017ee b\u00fdt znovu editov\u00e1n pro georeferencov\u00e1n\u00ed.
+cancelar=Zru\u0161it
+Cancelar=Zru\u0161it
+cancelar_edicion=Zru\u0161 editaci
+cancelSearchButton=Zru\u0161it
+cannotReproject=Nelze znovuzobrazit sou\u0159adnicov\u00fd syst\u00e9m
+cant_connect=Nelze se spojit
+cant_connect_wfs=Nelze se spojit s WFS
+cant_reproject_from_any_of=Nen\u00ed mo\u017en\u00e9 zm\u011bn\u00ed projekci pro \u017e\u00e1dn\u00fd z
+cantLoad=Vrstvu WFS nen\u00ed mo\u017en\u00e9 nahr\u00e1t
+capa=
+Capa=Vrstva
+capa_exportada=
+capa_importada=Vrstva importov\u00e1na. Chcete vytvo\u0159it prostorov\u00fd index?
+capas=Vrstvy
+Capas=Vrstvy
+Capas_del_directorio=Vrstvy v adres\u00e1\u0159i
+Capas_del_localizador=Lokalizace vrstev
+capas_edition_cache=Ozna\u010d vrstvy, kter\u00e9 maj\u00ed b\u00fdt pou\u017eity pro p\u0159ichyt\u00e1van\u00ed.
+capaWMS=WMS vrstva
+caracteres_erroneos=
+cargar=Nahrej
+cargar_fichero=
+cargar_leyenda=Na\u010dten\u00ed legendy
+cargar_sin_georef=
+cartografico=Kartografick\u00e9
+Cascada=Kask\u00e1da
+cascada_enable=Alespo\u0148 jedno okno mus\u00ed b\u00fdt viditeln\u00e9
+cascada_tooltip=Se\u0159adit okna do kask\u00e1dy
+catalog_search=Vyhledat geodata
+cathegory=Kategorie
+cathegoryAny=Cokoliv
+cathegoryBiota=Biologie
+cathegoryBoundaries=Meze
+cathegoryClimatologyMeteorologyAtmosphere=Klima meteorologie atmosf\u00e9ra
+cathegoryEconomy=Ekonomie
+cathegoryElevation=Vyv\u00fd\u0161enina
+cathegoryEnvironment=Prost\u0159ed\u00ed
+cathegoryFarming=Zem\u011bd\u011blstv\u00ed
+cathegoryGeoscientificInformation=Geov\u011bda
+cathegoryHealth=Zdrav\u00ed
+cathegoryImageryBaseMapsEarthCover=Obr\u00e1zky zemsk\u00e9ho povrchu
+cathegoryInlandWaters=Vodstvo vnitrozem\u00ed
+cathegoryIntelligenceMilitary=Vojenstv\u00ed
+cathegoryLocation=Oblast
+cathegoryOceans=Oce\u00e1ny
+cathegoryPlanningCadastre=Pl\u00e1nov\u00e1ni katastru
+cathegorySociety=Obyvatelstvo
+cathegoryStructure=Struktura
+cathegoryTransportation=Doprava
+cathegoryUtilitiesCommunication=Komunikace
+causa_error_desconocida=Neo\u010dek\u00e1van\u00e1 chyba na stran\u011b serveru
+Centimetros=Centimetry
+Centrar_la_Vista_sobre_un_punto=Centruj pohled na st\u0159ed
+centrar_punto=Centruj pohled na vybran\u00e9 body
+cerrar=Zav\u0159\u00edt
+Cerrar=Zav\u0159\u00edt
+change_before=P\u0159en\u00e9st do pop\u0159ed\u00ed
+change_behind=Poslad do pozad\u00ed
+change_height=Zm\u011bnit v\u00fd\u0161ku
+change_width=Zm\u011bnit \u0161\u00ed\u0159ku
+chooseAttribute=Vyberte jeden atribut pro vyhled\u00e1n\u00ed
+circle=Kruh
+circle_=KRUH
+circulo=Kru\u017enice
+Circulo=Kru\u017enice
+circumscribed=
+city=M\u011bsto
+clave=K\u00f3d
+clear=Vy\u010distit
+close=zav\u0159\u00edt
+close_polyline=Zav\u0159it l\u00ednii
+Cobertura_de_datos=Pokryt\u00ed dat
+Cobertura_de_entrada=Vstupn\u00ed pokryt\u00ed
+Cobertura_de_interseccion=
+Cobertura_de_recorte=Vyst\u0159ihnout pokryt\u00ed
+Cobertura_de_salida=V\u00fdstupn\u00ed pokryt\u00ed
+Cobertura_para_unir=
+Coberturas=P\u0159ekryvy
+Coberturas_de_entrada=Vstupn\u00ed mno\u017eina pokryt\u00ed
+coincidir_tamano=Shoda velikosti\:
+coincidir_tamanyo=Srovnej velikost
+colocar_a_margenes=Um\u00edstit s referenc\u00ed k okraji
+colocar_alrededor_seleccionados=Um\u00edstit kolem vybran\u00e9 polo\u017eky
+colocar_alrededor_todos=Um\u00edstit kolem v\u0161ech polo\u017eek
+colocar_delante=P\u0159en\u00e9st dop\u0159edu
+colocar_detras=P\u0159en\u00e9st do pozad\u00ed
+color=Barva\:
+Color_Contorno=Barva ohrani\u010den\u00ed
+Color_de_la_Linea=Barva linie
+Color_de_Relleno=Barva v\u00fdpln\u011b\:
+Color_final=Koncov\u00e1 barva\:
+Color_inicial=Po\u010d\u00e1te\u010dn\u00ed barva\:
+Color_inicio=Po\u010d\u00e1te\u010dn\u00ed barva
+color_texto=Barva textu\:
+com.iver.andami.messages.Messages=com.iver.andami.messages.Messages
+comentarios=Koment\u00e1\u0159e
+comenzar_edicion=Zahaj editaci
+commands_stack=Z\u00e1sobn\u00ed p\u0159\u00edkaz\u016f
+complex_selection=Komplexn\u00ed v\u00fdb\u011br
+complex_selection_=KOMPLEXN\u00cd V\u00ddB\u011aR
+compress=Komprese
+concordancia=Souhlas
+conectar=Spojit
+conection=Spojen\u00ed
+conexion_correcta=Opravit spojen\u00ed
+configuracion_andami_tooltip=Konfigurace Andami
+configurar=Konfigurace
+Configurar=Konfigurovat
+configurar_ANDAMI=ANDAMI konfigura\u010dn\u00ed dialog.
+configurar_localizador=Konfikurace mapy lok\u00e1toru
+Configurar_localizador=Konfigurace lok\u00e1toru
+configurar_todas_las_extensiones=Konfiguruj v\u0161echny roz\u0161\u00ed\u0159en\u00ed (p\u0159\u00edpony)
+confirm_gid=
+confirmacion=Potvr\u010f \u017ee
+confirmar_borrar=Prvek bude odstran\u011bn. Jste si jist\u00fd?
+conflicto_de_nombres_de_mapas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit mapu jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflicto_de_nombres_de_tablas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit tabulku jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflicto_de_nombres_de_vistas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit pohled jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflito_de_nombres_de_tablas_al_pegar=konflikt se jm\u00e9nem tabulek p\u0159i vkl\u00e1d\u00e1n\u00ed
+connect=Spoj
+connect_error=Chyba spojen\u00ed
+connectButton=P\u0159ipojit
+connection_name=N\u00e1zev spojen\u00ed
+conservar_escala_visualizacion=Nastaven\u00ed zobrazovac\u00edho m\u011b\u0159\u00edtka
+Consola=Konzola
+Consola_de_jython=Jython Konzole
+Consola_de_jython_tooltip=Otev\u0159i Jython konzoli
+consulta=Query
+contact_info=Kontaktn\u00ed informace
+contact_organization=Organizace
+contact_person=Jm\u00e9no
+contact_position=C\u00e0rrec
+Contengan=Obsahuje
+contiene_espacios_en_blanco=Obsahuje b\u00edl\u00e9 mezery
+contraste=Contrast
+Conversion_de_datos=Konverze dat
+Conversion_de_datos_Desc=Funkce kter\u00e1 transformuje data (form\u00e1ty, projekce, atd.)
+Convex_Hull=Convex Hull
+Convex_Hull._Introduccion_de_datos=
+coor_geograficas=Geografick\u00e9 sou\u0159adnice
+coordenadas_vacias=Pr\u00e1zdn\u00e9 sou\u0159adnice
+coordinates=Sou\u0159adnice
+coordinatesContains=obsahuje
+coordinatesEnclose=uzav\u00edrat
+coordinatesEqual=shodn\u00fd
+coordinatesFullyOutsideOf=je \u00fapln\u011b venku z
+copiar=Kop\u00edrovat
+copy=Kop\u00edrovat
+copy_=KOP\u00cdROVAT
+cortar=P\u0159esu\u0148
+countries_of_the_world=Afghanistan;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Ascension Island;Australia;Austria;Azerbaijan;Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei;Bulgaria;Burkina Faso;Burundi;Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo (DRC);Congo;Cook Islands;Costa Rica;C\u00f4te d\u0092Ivoire;Croatia;Cuba;Cyprus;Czech Republic;Denmark;Djibouti;Dominica;Dominican Republic;Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia;Falkland Islands (Islas Malvinas);Faroe Islands;Fiji Islands;Finland;France;French Guiana;French Polynesia;French Southern and Antarctic Lands;Gabon;Gambia, The;Georgia;Germany;Ghana;Gibraltar;Greece;Greenland;Grenada;Guadeloupe;Guam;Guatemala;Guernsey;Guinea;Guinea-Bissau;Guyana;Haiti;Heard Island and McDonald Islands;Honduras;Hong Kong SAR;Hungary;Iceland;India;Indonesia;Iran;Iraq;Ireland;Isle of Man;Israel;Italy;Jamaica;Japan;Jordan;Jersey;Kazakhstan;Kenya;Kiribati;Korea;Kuwait;Kyrgyzstan;Laos;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg;Macao SAR;Macedonia, Former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia;Moldova;Monaco;Mongolia;Montserrat;Morocco;Mozambique;Myanmar;Namibia;Nauru;Nepal;Netherlands Antilles;Netherlands, The;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;North Korea;Northern Mariana Islands;Norway;Oman;Pakistan;Palau;Palestinian Authority;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn Islands;Poland;Portugal;Puerto Rico;Qatar;Reunion;Romania;Russia;Rwanda;Samoa;San Marino;S\u00e3o Tom\u00e9 and Pr\u00edncipe;Saudi Arabia;Senegal;Serbia and Montenegro;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;St. Helena;St. Kitts and Nevis;St. Lucia;St. Pierre and Miquelon;St. Vincent and the Grenadines;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syria;Taiwan;Tajikistan;Tanzania;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tristan da Cunha;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu;Uganda;Ukraine;United Arab Emirates;United Kingdom;United States of America;United States Minor Outlying Islands;Uruguay;Uzbekistan;Vanuatu;Vatican City;Venezuela;Vietnam;Virgin Islands;Virgin Islands, British;Wallis and Futuna;Yemen;Zambia;Zimbabwe
+country=Zem\u011b
+coverage=Pokryt\u00ed
+covered_extension=Roz\u0161\u00ed\u0159en\u00ed
+Crear_Buffer=
+Crear_Indice=Vytvo\u0159en\u00ed prostorov\u00e9ho indexu...
+Crear_Indice_Intro=
+Crear_Indice_Pregunta_1=P\u0159ejete si vytvo\u0159it prostorov\u00fd index pro vrstvu
+Crear_Indice_Pregunta_2=?
+crear_worldfile=Vytvo\u0159 worldfile
+created_with=Vytvo\u0159eno s
+creation_date=Datum vytvo\u0159en\u00ed
+credentials=
+cross_circle=Prot\u00edn\u00e1n\u00ed/obsahuje kruh
+cross_polygon=Prot\u00edn\u00e1n\u00ed/obsahuje polygon
+Crucen_con=P\u0159ek\u0159\u00ed\u017een\u00fd s
+Cruz=P\u0159ek\u0159\u00ed\u017een\u00ed
+Cuadrado=\u010ctverec
+cuadro_no_asociado=Georeferencovan\u00e1 oblast nen\u00ed p\u0159irazena k \u017e\u00e1dn\u00e9 vrstv\u011b ani pohledu, bude zav\u0159ena. Pros\u00edm, otev\u0159ete dialog p\u0159i\u0159azen\u00fd p\u0159\u00edslu\u0161n\u00e9 vrstv\u011b.
+cuando_activo=Kdy\u017e je aktivn\u00ed
+cut=Vyst\u0159ihnout
+Dado_un_campo_de_atributos=Zadan\u00fd atribut
+database=N\u00e1zev datab\u00e1ze
+database_connection=Datab\u00e1zov\u00e9 spojen\u00ed
+datum=Datum
+de=of
+De=of
+de\ =z
+de\ 0=z ()
+debe_estar_activada=Mus\u00ed b\u00fdt aktivn\u00ed
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Ozna\u010dte vrstvy, ze kter\u00fdch chcete z\u00edskat informace
+debera_introducir_nombres_para_las_vistas_a_pegar=Mus\u00edte napsat nov\u00e9 n\u00e1zvy pohled\u016f
+debera_introducir_nombres_para_los_mapas_a_pegar=Mus\u00edte napsat nov\u00e9 n\u00e1zvy map
+default_name=WFS vrstva
+default_value=Implicitn\u00ed hodnota
+define_fields=Definovat polo\u017eky
+define_point=Definovat bod
+defined_by_view_extent=Definov\u00e1no oblast\u00ed pohledu
+dehacer=Zp\u011bt
+del=Smazat
+delete_field=Smazat polo\u017eku
+deleted_feature=Smazan\u00fd prvek
+densityfication=Flatness
+Dentro=inside de polygon
+Dentro_y_fuera=Uvnit\u0159 a v\u0148\u011b polygonu
+Derecha=Prav\u00e1 strana
+Derecho=Prav\u00fd
+desactivar_capa=Zkr\u00fdt vrstvu po prvn\u00edm bodu.
+desactivar_puntos=Deaktivovat bodovou vrstvu po prvn\u00edm bodu.
+desagrupar=Odskupit
+desagrupar_capas=Odskupit vrstvy
+desagrupar_graficos=Odskupit prvky
+descending_order=Sestupn\u00e9 po\u0159ad\u00ed
+descending_order_tooltip=Se\u0159adit podle zvolen\u00e9 polo\u017eky sestupn\u011b
+desconectar=Odpojit
+descripcion=Popis
+Descripcion=Popis
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Nechte implicitn\u00ed hodnoty, kter\u00e9 jsou sd\u00edlen\u00e9 v\u0161emi atributy vrstvy. Zvolte pole, kter\u00e1 obsahuj\u00ed hodnoty pro \u00fapavu popisu.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Nov\u00e1 virtu\u00e1ln\u00ed vrstva m\u016f\u017ee b\u00fdt vytvo\u0159ena pomoc\u00ed tohoto n\u00e1stroje na z\u00e1klad\u011b existuj\u00edc\u00ed vrstvy, kter\u00e1 umo\u017e\u0148uje pokro\u010dil\u00e9 popisy. Zm\u011bn\u00ed se zobrazen\u00ed <br> zvolen\u00e9 vrstvy na zobrazen\u00ed hodnot sv\u00fdch polo\u017eek.</HTML>
+description=Popis
+description_URL=Popis URL
+desde=Od
+desde_arriba=Shora\:
+desde_izquierda=Z leva\:
+desea_borrar_el_documento=Opravdu chcete smazat vybran\u00e9 dokumenty?
+desea_borrar_la_capa=Opravdu chcete smazat vybran\u00e9 vrstvy?
+desea_continuar=Chcete pokra\u010dovat?
+deshacer=Zp\u011bt
+desplaza_los_elementos_seleccionados_a_la_derecha=P\u0159esunout zvolen\u00e9 vrstvy doprava
+desplaza_los_elementos_seleccionados_a_la_izquierda=P\u0159esunout zvolen\u00e9 vrstvy doleva
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=P\u0159esunout zvolen\u00e9 prvky doprost\u0159ed osy X
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=P\u0159esunout zvolen\u00e9 prvky doprost\u0159ed osy Y
+desplaza_los_elementos_seleccionados_hacia_abajo=P\u0159esunout zvolen\u00e9 prvky dospodu
+desplaza_los_elementos_seleccionados_hacia_arriba=P\u0159esunout zvolen\u00e9 prvky nahoru
+Desplazamiento=P\u0159em\u00edst\u011bn\u00ed
+desviacion_tipica=Standardn\u00ed odchylka
+detalles=Podrobnosti
+Detalles=Podrobnosti
+DGNFiles=DGN soubory
+Diferencia=Difference
+Diferencia_Introduccion_de_datos=Nesoulad. Vypl\u0148te data
+dimension=Rozm\u011br
+dimensiones=Rozm\u011bry
+directorio=Adres\u00e1\u0159
+directorio_extensiones=Adres\u00e1\u0159 extenz\u00ed.
+disagregate_layers=\u00daprava struktury vrstev
+Disolver=Dissolve
+Disolver._Introduccion_de_datos=Zmizen\u00ed. Vstup dat
+Disolver_entidades=Zmizel\u00e9 prvky
+distance_units=Jednotky vzd\u00e1lenosti
+distance_x=Vzd\u00e1lenos X
+distance_y=Vzd\u00e1lenost Y
+distancia_malla_incorrecta=Nespr\u00e1vn\u00e1 vzd\u00e1lenost m\u0159\u00ed\u017eky
+distribuir=Rozm\u00edstit\:
+distribuir_elementos_sobre_todo_el_layout=Uspo\u0159\u00e1dej elementy p\u0159es celou mapu.
+distributes_down=Uspo\u0159\u00e1dej ze spodu
+distributes_horizontal=Uspo\u0159\u00e1dej elementy horizont\u00e1ln\u011b
+distributes_left=Uspo\u0159\u00e1dej zleva
+distributes_right=Uspo\u0159\u00e1dej zprava
+distributes_to_layout_down=Uspo\u0159\u00e1dej ze spodu mapy
+distributes_to_layout_horizontal=Uspo\u0159\u00e1dej mapu horizont\u00e1ln\u011b
+distributes_to_layout_left=Uspo\u0159\u00e1dej mapu z leva
+distributes_to_layout_right=Uspo\u0159\u00e1dej mapu z prava
+distributes_to_layout_up=Uspo\u0159\u00e1dej mapu shora
+distributes_to_layout_vertical=Uspo\u0159\u00e1dej mapu vertik\u00e1ln\u011b
+distributes_up=Uspo\u0159\u00e1dej shora
+distributes_vertical=Uspo\u0159\u00e1dej vertik\u00e1ln\u011b
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Uspo\u0159\u00e1dej horizont\u00e1ln\u011b mezery mezi elementy.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Uspo\u0159\u00e1dej vertik\u00e1ln\u011b mezery mezi elementy.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b ze spodu nahoru.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b shora dolu.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b zprava do leva.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b zleva do prava.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Uspo\u0159\u00e1dej rovnom\u011brn\u011b vybran\u00e9 elementy v horizont\u00e1ln\u00edm sm\u011bru.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Uspo\u0159\u00e1dej rovnom\u011brn\u011b vybran\u00e9 elementy ve vertik\u00e1\u00edln\u00edm sm\u011bru.
+divisiones_izquierda=D\u011blen\u00ed doleva
+documentos_existentes=Existuj\u00edc\u00ed dokumenty
+downloadColumn=St\u00e1hnout
+draw_text_only=Vykresl\u00ed jenom text
+driver=Ovlada\u010d
+drivers=Ovlada\u010de
+dxf=dxf
+dxf_files=DXF files
+Dxffiles=DXF soubory
+e-mail=E-mail
+edicion=Editace
+edit=
+edit_copy=Kop\u00edrovat
+edit_cut=Vyjmout
+edit_delete=Smazat
+edit_layer_properties_to_fix_them=Edituj vlastnosti vrstvy ....
+edit_paste=Vlo\u017e
+edit_redo=Dal\u0161\u00ed zm\u011bna
+edit_select_all=Vyber v\u0161e
+edit_undo=Vra\u0165 zm\u011bnu
+edit_vertex=Edituj vrchol
+edit_vertex_=EDITACE VRCHOLU
+editable=Editovateln\u00fd
+Editar_leyenda=Upravit styl
+editar_propiedades=Nahoru
+editar_vertices=Edituj vrchol
+Edition=Editace
+edition_properties=Vlastnosti Editace
+Edition_Properties=Vlastnosti Editace
+Ejecutando\ comando\:\ =Vykonej p\u0159\u00edkaz\:
+el_numero_maximo_de_intervalos_para_este_campo_es=Maxim\u00e1ln\u00ed po\u010det interval\u016f pro tuto polo\u017eku je
+Elegir_Color=Select Barva
+Elegir_Fuente=Vybrat p\u00edsmo
+elemento_ya_existe=Element u\u017e existuje
+Elementos_seleccionados_de_la_capa=Vybran\u00e9 polo\u017eky z vrstvy
+Elija_una_herramienta_de_analisis=Vyber analytick\u00fd n\u00e1stroj
+Eliminar=Smazat
+eliminar_capa=Smazat vrstvu
+eliminar_columna=Odstra\u0148 sloupec
+eliminar_extremos=Odstranit hrany
+eliminar_fila=Odstra\u0148 z\u00e1znam
+eliminar_punto=ODstra\u0148 bod
+eliminar_todos_puntos=Odstra\u0148 v\u0161echny body
+ellipse=Elipse
+ellipse_=ELLIPSE
+en_el_mapa=Ve vrstv\u011b\:
+En_metros=V metrech
+En_pixels=V pixelech
+en_unidades=v jednotk\u00e1ch
+Encuadre=Zoom
+Encuadre_Vista=Zobrazit posunova\u010d
+end=Konec
+end_polygon=Ukon\u010di polygon
+endinfo=Finalization Statistics
+Enlace_espacial=Prostorov\u00e9 propojen\u00ed
+Enlace_espacial._Introduccion_de_datos=Prostorov\u00e9 propojen\u00ed. Vstup dat
+enlace_vivo=Aktivn\u00ed odkaz
+Enlazar_a_fichero_de_texto=Odkaz na textov\u00e9 soubory
+Enlazar_a_ficheros_de_imagen=Odkaz na soubory s obr\u00e1zky
+enter_layer_name=Vlo\u017ete n\u00e1zev vrstvy 
+enter_path_to_file=Vlo\u017ete cestu k souboru
+equal_intervals=Shodn\u00e9 intervaly
+equidistance=
+error=Error
+Error_abriendo_el_fichero=Chyba p\u0159i otev\u00edr\u00e1n\u00ed souboru
+Error_accediendo_a_los_datos=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed dat
+Error_atributo_no_numerico=Vybran\u00e1 hodnota pro vytvo\u0159en\u00ed obalov\u00e9 z\u00f3ny nen\u00ed \u010d\u00edslo 
+error_capa_puntos=Chyba p\u0159i nahr\u00e1v\u00e1n\u00ed vrstvy. Mo\u017en\u00e1 nen\u00ed aktivn\u00ed vrstva georeferencov\u00e1n\u00ed.
+Error_capa_vacia=
+Error_chequeando_precondiciones=Zkontrolujte chybu v p\u0159edpokladech
+Error_chequeo_tipo_geometria=Chyba p\u0159i kontrole typu geometrie
+error_comunicacion_servidor=Chyba p\u0159i p\u0159ipojov\u00e1n\u00ed k serveru
+error_conexion=Chyba p\u0159i spojen\u00ed s datab\u00e1z\u00ed
+Error_distancia_buffer=Mus\u00edte vlo\u017e\u00edt hodnotu vzd\u00e1lenosti pro obalovou z\u00f3nu.
+Error_ejecucion=Chyba p\u0159i vykon\u00e1n\u00ed
+Error_entrada_datos=Chyba ve vstupu
+error_escritura=Nelze zapisovat do souboru
+Error_escritura_resultados=Chyba p\u0159i z\u00e1pisu
+Error_exportando_SLD=Chyba p\u0159i exportu do SLD
+Error_fallo_geoproceso=Chyba b\u011bhem vykon\u00e1v\u00e1n\u00ed funkce
+error_file_exists=Soubor u\u017e existuje. P\u0159ejete si jej p\u0159epsat?
+error_file_not_writable=Nen\u00ed mo\u017en\u00e9 vytvo\u0159it v\u00fdstupn\u00ed soubor.
+Error_guardando_la_leyenda=Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed legendy
+Error_guardando_la_plantilla=Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed \u0161ablony
+error_lectura=Nelze \u010d\u00edst soubor
+error_parsing_comboscale_elements=Chyba p\u0159i rozd\u011blov\u00e1n\u00ed elementu m\u011b\u0159\u00edtka
+error_parsing_comboscale_value=Chyba p\u0159i rozd\u011blov\u00e1n\u00ed hodnoty m\u011b\u0159\u00edtka
+Error_preparar_escritura_resultados=Chyba b\u011bhem p\u0159\u00edpravy v\u00fdsledn\u00e9 vrstvy 
+Error_reading_isocodes_file=Chyba p\u0159i \u010dten\u00ed iso k\u00f3d\u016f pro jazyky
+Error_seleccionar_capas_merge=Mus\u00edte vybrat vrstvy, kter\u00e9 maj\u00ed b\u00fdt spojeny.
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=Mus\u00edte zvolit v\u00fdsledn\u00fd soubor
+Error_spjoinmn_sin_funcion=P\u0159i prostorov\u00e9m spojen\u00ed 1-N mus\u00edte specifikovat sou\u010dtov\u00e9 funkce
+error_writting_file=Chyba p\u0159i z\u00e1pisu souboru
+errores=Chyby
+errores_csv=V\u010det\u0148\u011b chyb v CSV souboru.
+errorFENotSupported=gvSIG podporuje  pouze Filter Encoding Language pro dotazy
+errorGetRecords=Chyba v metod\u011b getRecords
+errorIsASRWServer=Je to SRW server\!
+errorMessageJComboBoxItemsSeekerConfigurable=Chybn\u00e1 konfigurace chov\u00e1n\u00ed.
+errorNotCSWSupportedProtocol=Server byl nalezen, ale nepodporuje protokol CSW.
+errorNotParsedReply=Chyba p\u0159i zpracov\u00e1n\u00ed odpov\u011bdi. Server byl nalezen, ale pravd\u011bpodobn\u011b nepodporuje specifikovan\u00fd protokol
+errorNotSupportedCapabilities=Chyba GetCapabilities. Tato chyba m\u016f\u017ee m\u00edt dva d\u016fvody\:Bu\u010f nastala chyba v pr\u016fb\u011bhu operace nebo server nepodporuje specifikovan\u00fd protokol
+errorNotSupportedProtocol=Server nepodporuje specifikovan\u00fd protokol.
+errorNotThesaurusSelected=WFS protokol nem\u016f\u017ee fungovat pokud nezvol\u00edte polo\u017eku tezauru
+errorServerException=Server vr\u00e1til v\u00fdjimku
+errorServerNotFound=Server neexistuje
+errorSOAPProtocol=SOAP chyba
+escala=M\u011b\u0159\u00edtko
+Escala=M\u011b\u0159\u00edtko
+escala_desconocida=Nezn\u00e1m\u00e9 m\u011b\u0159\u00edtko
+escala_maxima=Maxim\u00edln\u00ed m\u011b\u0159\u00edtko
+Escala_Maxima=Maxim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+escala_minima=Minim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+Escala_Minima=Minim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+escala_usuario=M\u011b\u0159\u00edtko specifikov\u00e1no u\u017eivatelem
+Escoger_Fun_Resumen=<-
+espaciado_horizontal=Velikost horizont\u00e1ln\u00ed m\u0159\u00ed\u017eky
+espaciado_vertical=Velikost vertik\u00e1ln\u00ed m\u0159\u00ed\u017eky
+espacio=Mezera\:
+espere=Pros\u00edm \u010dekejte
+estadisticas=Statistika
+este_por_debajo_de_=B\u00fdt pod
+este_por_encima_de=B\u00fdt nad
+Esten_contenidos_en=Obsa\u017een\u00fd v
+Estilo=Styl\:
+estilos=Styly
+Etiqueta=Popis
+Etiquetado=Popisov\u00e1n\u00ed
+Etiquetados=Popisov\u00e1n\u00ed
+etiquetas=Popisky\:
+Etiquetas_estandar=Standardn\u00ed popisky
+exactSentence=P\u0159esn\u00fd v\u00fdraz
+examinar=Prohl\u00e9dnout
+Examinar=Proch\u00e1zet
+exploit=Exploit
+exploit_=EXPLOIT
+export=Exportovat
+export_to=Exportovat jako...
+export_to_map_context=Export do Mapov0ho kontextu
+exportando_features=Exportov\u00e1n\u00ed prvk\u016f
+exportar=Exportovat
+exportar_a=Exportovat jako...
+exportar_pdf=Exportovat jako pdf
+exportar_ps=Exportovat jako ps
+exporting_=Exportov\u00e1n\u00ed
+extend=Rozsah
+extend_=ROZSAH
+extension=Roz\u0161\u00ed\u0159en\u00ed
+extension_activada=Aktivn\u00ed extenze.
+extensiones=Roz\u0161\u00ed\u0159en\u00ed
+Extent=Oblast
+extents_no_coincidentes=Zvolen\u00e1 hranice nesouhlas\u00ed s p\u016fvodn\u00edm obr\u00e1zkem.
+factor=Factor
+factor_zoom_incorrecto=Chybn\u00e1 \u00farove\u0148 zv\u011bt\u0161en\u00ed.
+fallo_capas=Chyba  p\u0159\u00edstupu k vrstv\u011b.  N\u00e1sleduj\u00edc\u00ed vrstvy budou vymaz\u00e1ny z projektu.
+fallo_crear_conexion=Chyba spojen\u00ed
+fallo_crear_pool=Chyba vytvo\u0159en\u00ed mno\u017einy p\u0159ipojen\u00ed
+fallo_obtener_conexion_existente=Nelze z\u00edskat vytvo\u0159en\u00e9 spojen\u00ed
+fallo_obtener_tablas=Nelze z\u00edskat tabulky z datab\u00e1ze
+fallo_realizar_consulta=Nelze vytvo\u0159it dotaz
+fallo_registrar_conexion=Nelze zaregistrovat spojen\u00ed
+fax=Fax
+feature=Vrstvy
+features_desea_continuar=prvky, chcete pokra\u010dovat?
+fichero=soubor
+Fichero=Soubor
+fichero_existe=Zvolen\u00fd soubor ji\u017e existuje jako vrstva
+fichero_incorrecto=Chybn\u00fd soubor
+fichero_ya_existe_seguro_desea_guardarlo=Soubor u\u017e existuje, chcete pokra\u010dovat?
+Ficheros_de_cartografia=Soubory vrstev
+Ficheros_SHP=SHP soubory
+field=Polo\u017eka
+field_already_exists=Polo\u017eka ji\u017e existuje
+field_decimal_count=Des\u00edtkov\u00fd po\u010det
+field_default_value=Implicitn\u00ed hodnota
+field_length=D\u00e9lka
+field_manager=Spr\u00e1vce polo\u017eek
+field_name=N\u00e1zev polo\u017eky
+field_type=Typ
+fields=
+file=Soubor
+file_exists=
+file_name=N\u00e1zev souboru
+file_version=Verze souboru
+filtro=Filtr
+final_point=Posledn\u00ed bod
+finalizar=Ukon\u010dit
+finish=Konec
+fit_WCS_layer=P\u0159izp\u016fsobit WCS vrstvu
+fit_WFS_layer=P\u0159izp\u016fsobit WFS vrstvu
+fit_WMS_layer=Upravit WMS Vrstvu
+Flatness=Rovinost
+Font=P\u00edsmo
+format=Form\u00e1t
+formato=Form\u00e1t
+Formato=Dorm\u00e1t
+Formato_de_numero_erroneo=Neplatn\u00e9 \u010d\u00edslo form\u00e1tu
+formato_de_numero_incorrecto=Neplatn\u00e9 \u010d\u00edslo form\u00e1tu
+formato_incorrecto=Chybn\u00fd form\u00e1t
+formatos=Form\u00e1ty
+from=Od
+fuente=P\u00edsmo
+Fuente=P\u00edsmo
+Fuera=V\u0148\u011b polygonu
+fuera_de_extent=Zvolen\u00fd bod je mimo rozsah obr\u00e1zku
+Funciones_Sumarizacion=Seskupit podle funkc\u00ed
+gazetteer_connect=Hled\u00e1n\u00ed slovn\u00edku
+gazetteer_search=Hled\u00e1n\u00ed ve slovn\u00edku
+GC=V\u00fdpo\u010detn\u00ed Geometrie
+GC_Desc=Geoproces, kter\u00fd pracuje s v\u00fdpo\u010detn\u00ed geometri\u00ed.
+general=Obecn\u00fd
+General=Obecn\u00fd
+Generar_Intervalos=Generovat intervaly
+geometry=Geometry
+Geoprocesos=Geoproces
+georaster=Georeferencov\u00e1n\u00ed
+georef=Georeference
+georef_file=Georeferen\u010dn\u00ed soubor
+georeferenciado=Georeferencovan\u00fd
+georreferenciar=Georeferencov\u00e1n\u00ed obr\u00e1zku
+gestion_encuadre=Spr\u00e1va z\u00e1znamu pracovn\u00edch oblast\u00ed
+Gestor_de_Geoprocesos=Panel n\u00e1stroj\u016f pro geoprocesing
+gml=GML
+gml_files=GML soubory
+goto=Jdi na m\u00edsto
+grado_polinomio=Stupe\u0148 polygonu
+grados=Stupn\u011b
+Grados=Stupn\u011b
+Graficos=Prvky
+Grid=M\u0159\u00ed\u017eka
+Grosor_de_linea=\u0160\u00ed\u0159ka \u010d\u00e1ry
+grosor_linea=\u0161\u00ed\u0159ka \u010d\u00e1ry\:
+group=Seskupit
+group_graphic_line=Seskupit grafick\u00e9 linie
+grupo=skupina
+GT2shp=GT2shp
+guardado=Ulo\u017een do
+guardar=Ulo\u017eit
+Guardar=Ulo\u017eit
+guardar_cambios=Ulo\u017eit zm\u011bny?
+guardar_clave=Ulo\u017eit k\u00f3d
+guardar_como=Ulo\u017eit jako...
+guardar_como_plantilla=Ulo\u017eit jako \u0161ablonu
+Guardar_el_zoom_actual=Ulo\u017eit aktu\u00e1ln\u00ed v\u00fd\u0159ez
+guardar_leyenda=Ulo\u017eit legendu
+Guardar_leyenda=Ulo\u017eit styl
+guardar_proyecto=Ulo\u017eit projekt
+guardar_tooltip=Ulo\u017eit zm\u011bny do projektu
+Habilitar_etiquetado=Povolit popisov\u00e1n\u00ed
+hasta=do
+height=V\u00fd\u0161ka
+Herramientas=N\u00e1stroje
+Herramientas_de_analisis=Analytick\u00e9 n\u00e1stroje
+Herramientas_vista=Zobrazit n\u00e1stroje
+hide_grid=
+Hiperenlace=Hyperlink
+horizontal=Horizont\u00e1ln\u00ed
+horizontal_space=Horizont\u00e1ln\u00ed mezera
+host=Po\u010d\u00edta\u010d
+hostname=Host
+html_in_a_new_view=<HTML>Vytvo\u0159\u00ed nov\u00fd pohled do projektu. Tento nov\u00fd pohled bude obsahovat v\u0161echny vrstvy definovan\u00e9 v souboru.</HTML>
+html_in_other_view=<HTML>P\u0159id\u00e1 vrstvy do zvolen\u00e9ho pohledu v seznamu.</HTML>
+html_in_the_current_view=<HTML>P\u0159id\u00e1 vrstvy definovan\u00e9 v souboru do aktu\u00e1ln\u00edho aktivn\u00edho pohledu.</HTML>
+Icon_not_found_=Ikona nenalezena
+id=ID
+Identificar_Resultados=Identifikovat v\u00fdsledky
+idioma=Jazyk
+Igual_que_la_impresora=Stejn\u00e9 jako tisk\u00e1rna
+igual_todos_lados=Stejn\u00fd posun pro v\u0161echny strany
+imagen=Obr\u00e1zek
+Imagen=Obr\u00e1zek
+imagen_no_accesible=Nelze p\u0159istupovat k obr\u00e1zku
+import=Import
+import_from_ascii=Import tabulky z CSV (.csv) souboru.
+import_layer=Ulo\u017eit vrstvu do PostGIS
+import_map_context=Import map z OGC Web Map Context souboru (.cml).
+importar=Import
+importar_extent=Import aktu\u00e1ln\u00ed viditeln\u00e9 oblasti
+Imprimir=Tisk
+in=v
+incorrect_option=Chybn\u00e1 volba
+incorrect_point=Chybn\u00fd bod
+incorrect_value=Chybn\u00e1 hodnota
+Indexando=Indexing...
+Indexando_espacialmente=Prostorov\u00e1 indexace vrstvy
+Inferior=Ni\u017e\u0161\u00ed
+info=Informace
+info_format_not_supported=
+infobreak=Zobrazuje elementy vrstvy za pomoc\u00ed rozsahu barev.
+infodef=Zobrazuje elementy vrstvy stejn\u00fdm symbolem.
+informacion=Informace
+Informacion=Informace
+infovalue=Zobrazuje elemety vrstvy s jedine\u010dn\u00fdm symbolem pro ka\u017edou hodnotu.
+Inicializando=Initializace
+initial_warning=<html><b>WAROV\u00c1N\u00cd\!</b>V\u00fdvojov\u00e1 verze. M\u016f\u017ee obsahovat z\u00e1va\u017en\u00e9 chyby a zp\u016fsobit po\u0161kozen\u00ed editovan\u00fdch soubor\u016f.<br><br>Pro b\u011b\u017enou pr\u00e1ci je doporu\u010dov\u00e1na posledn\u00ed stabiln\u00ed verze gvSIG.</html>
+insert=Vlo\u017eit
+insert_basis_point=Vlo\u017eit z\u00e1kladn\u00ed bod
+insert_central_point_or_3p=Vlo\u017eit centr\u00e1ln\u00ed bod nebo [3P]
+insert_central_point_polygon=Vlo\u017eit centr\u00e1ln\u00ed bod polygonu
+insert_column=
+insert_destination_point=Vlo\u017eit c\u00edlov\u00fd bod
+insert_distance_another_axis=Vlo\u017eit vzd\u00e1lenost k jin\u00e9 ose
+insert_factor_or_reference=Vlo\u017eit n\u00e1sobek m\u011b\u0159\u00edtka [2] nebo Odkaz [R]
+insert_first_point=Vlo\u017ete prvn\u00ed bod
+insert_first_point_corner=Vlo\u017ete prvn\u00ed rohov\u00fd bod
+insert_first_point_scale=Vlo\u017ete p\u016fvodn\u00ed m\u011b\u0159\u00edtko
+insert_initial_point_axis=Vlo\u017ete prvn\u00ed bod osy elipsy
+insert_last_point=Vlo\u017ete posledn\u00ed bod
+insert_last_point_axis=Vlo\u017ete posledn\u00ed bod osy elipsy
+insert_last_point_reference=Vlo\u017ete konec referen\u010dn\u00ed linie
+insert_last_point_scale=Vlo\u017ete konec linie m\u011b\u0159\u00edtka
+insert_length_or_point=Vlo\u017ete d\u00e9lku nebo bod
+insert_move_first_point=Vlo\u017ete prvn\u00ed bod k pohybu
+insert_move_last_point=Vlo\u017ete posledn\u00ed bod k pohybu
+insert_next_point_arc_or_close=Vlo\u017ete dal\u0161\u00ed bod, Arc[A] nebo Close[C]
+insert_next_point_line_or_close=Vlo\u017ete dal\u0161\u00ed bod, Line [N] nebo Close [C]
+insert_next_point_selection_or_end_polygon=Vlo\u017ete dal\u0161\u00ed bod nebo ukon\u010dete v\u00fdb\u011br polygonu [E]
+insert_number_sides=Vlo\u017ete po\u010det stran
+insert_opposited_corner=Vlo\u017ete protilehl\u00fd roh
+insert_point=Vlo\u017e bod
+insert_point_corner_or_square=Vlo\u017e bod protej\u0161\u00edho rohu nebo \u010dtverce [C]
+insert_point_move=Vlo\u017e bod pro posunut\u00ed
+insert_point_or_end=Vlo\u017e bod nebo Ukon\u010di geoprvek [E]
+insert_point_selection=Vlo\u017e v\u00fdb\u011brov\u00fd bod
+insert_point_selection_or_types=Vlo\u017e bod nebo Kru\u017enici [IC], Vn\u011bj\u0161\u00ed obd\u00e9ln\u00edk [OR], Vnit\u0159n\u00ed polygon [CP], Vnit\u0159n\u00ed kru\u017enici [CC], Vn\u011bj\u0161\u00ed Kru\u017enici [OC]
+insert_radius=Insert radius [R]
+insert_radius_or_second_point=Vlo\u017e polom\u011br nebo druh\u00fd bod
+insert_reference_point_or_factor=Vlo\u017e po\u010d\u00e1tek nebo Referen\u010dn\u00ed L\u00ednii nebo M\u011b\u0159\u00edtko [F]
+insert_rotation_angle=Vlo\u017e uhel oto\u010den\u00ed
+insert_row=Vlo\u017e z\u00e1znam
+insert_second_point=Vlo\u017e druh\u00fd bod
+insert_second_point_angle=Vlo\u017e druh\u00fd bod nebo \u00fahel
+insert_second_point_move=Vlo\u017e druh\u00fd bod pro posunut\u00ed
+insert_second_point_selection=Vlo\u017e druh\u00fd bod v\u00fdb\u011brov\u00e9ho obdeln\u00edku
+insert_selection_last_point=Vlo\u017e prot\u011bj\u0161\u00ed roh v\u00fdb\u011brov\u00e9ho obdeln\u00edku
+insert_selection_point=Vlo\u017e bod v\u00fdb\u011bru
+insert_third_point=Vlo\u017e t\u0159et\u00ed bod
+insertar=
+Insertar=Vlo\u017eit
+insertar_cajetin=Vlo\u017e grid
+insertar_capa=Vlo\u017e vrstvu
+insertar_circulo=Vlo\u017eit kru\u017enici
+insertar_columna=Vlo\u017e atribut
+insertar_en_la_vista_la_capa_creada=P\u0159ejete si p\u0159idat novou vrstvu do aktivn\u00edho pohledu?
+insertar_escala=Vlo\u017eit m\u011b\u0159\u00edtko
+insertar_fila=Vlo\u017e \u0159\u00e1dek
+insertar_imagen=Vlo\u017eit obr\u00e1zek
+insertar_leyenda=Vlo\u017eit legendu
+insertar_linea=Vlo\u017eit linii
+insertar_norte=Vlo\u017eit sever
+insertar_poligono=Vlo\u017eit polygon
+insertar_polilinea=Vlo\u017e l\u00ednie
+insertar_punto=Vlo\u017eit bod
+insertar_recta=Vlo\u017eit p\u0159\u00edmku
+insertar_rectangulo=Vlo\u017eit obd\u00e9ln\u00edk
+insertar_texto=Vlo\u017eit text
+insertar_vista=Vlo\u017eit pohled
+inside_circle=Vlo\u017e kru\u017enici
+inside_polygon=Uvnit\u0159 polygonu
+inteligentSearch=Inteligentn\u00ed vyhled\u00e1v\u00e1n\u00ed
+inteligentSearchAscii=V\u0161echny tvary slova
+inter_arc=Vnit\u0159n\u00ed \u016fse\u010dka
+inter_line=Vnit\u0159n\u00ed l\u00ednie
+internal_polygon=Vnit\u0159n\u00ed polygon
+internal_polygon_=Vnit\u0159n\u00ed polygon
+Interseccion=Pr\u016fse\u010d\u00edk
+Interseccion._Introduccion_de_datos=Pr\u016fnik. Vstup dat.
+Intersecten_con=Protnut\u00e9 s
+interval=Interval
+intervalo=Interval
+Intervalo=Interval
+Intervalos=Intervaly
+Intervalos_equidistantes=Stejn\u00e9 intervaly
+Intervalos_por_rupturas_naturales=Intervaly dle p\u0159irozen\u00fdch hranic.
+into_circle=
+into_circle_or_circumscribed=Vepsan\u00fd [I] o Opsan\u00fd [C] v kru\u017enici |C|
+intro_tablename=Zadejte n\u00e1zev tabulky k vytvo\u0159en\u00ed. VAROV\u00c1N\u00cd\: Pokud tabulka existuje bude vymaz\u00e1na.
+introduce_nombre=Zadat nov\u00fd n\u00e1zev.
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Vlo\u017ete n\u00e1zev nov\u00e9 vrstvy pozn\u00e1mek
+introduzca_intervalo_deseado=Zav\u00e9st po\u017eadovan\u00fd interval
+introduzca_nuevo_nombre_para_la_vista=Napi\u0161te nov\u00fd n\u00e1zev pohledu
+invalid_dimension_values=Chybn\u00e9 hodnoty rozm\u011bru
+invalid_priority_value=Chybn\u00e1 hodnota priority
+is_required=\u00e9s obligatori
+Italic=Kurz\u00edva
+Izquierda=Vlevo
+Izquierdo=Vlevo
+join=spojit
+join_=SPOJEN\u00cd
+jpg=JPEG soubor
+Juntar=Spojen\u00ed
+Juntar._Introduccion_de_datos=Spojen\u00ed. Vstup dat
+KeyMapping.Caracter_no_valido=Neplatn\u00fd znak
+keywords=Paraules clau
+keyWords=Kl\u00ed\u010dov\u00e1 slova
+kilometros=Kilometr\u016f
+Kilometros=Kilometr\u016f
+last=Posledn\u00ed
+lastUpdateDate=Posledn\u00ed aktualizace
+latitud=Latitud
+Launcher.config_mal_formado=. Chybn\u00fd 'config.xml'
+Launcher.config_no_encontrado='config.xml' nenalezen
+Launcher.Dependencia_no_resuelta_en_plugin=Poru\u0161en\u00e1 z\u00e1vislost z\u00e1suvn\u00e9ho modulu
+Launcher.Dos_skin_extension=Dv\u011b extenze pro vzhled.
+Launcher.Error_con_las_librerias_del_plugin=Chyba v knihovn\u011b z\u00e1suvn\u00e9ho modulu
+Launcher.error_getting_class_loader_for_status_bar_control=Chyba p\u0159i zji\u0161\u0165ov\u00e1n\u00ed stavu stavov\u00e9ho \u0159\u00e1dku.
+Launcher.Error_instanciando_la_extension=Nelze vytvo\u0159it instanci extenze
+Launcher.Error_localizando_la_clase_de_la_extension=Nelze nal\u00e9zt t\u0159\u00eddu extenze
+Launcher.Hay_dependencias_circulares=Kruhov\u00e1 z\u00e1vislost z\u00e1suvn\u00e9ho modulu
+Launcher.Ignorando_el_directorio=Ignoruji adres\u00e1\u0159
+Launcher.labelset_class=Nelze nal\u00e9zt popisek t\u0159\u00eddy (labelset)
+Launcher.look_and_feel=Nelze nastavit syst\u00e9mov\u00fd vzhled
+Launcher.No_se_encontro_la_clase_de_la_extension=Nelze nal\u00e9zt t\u0159\u00eddu extenze
+Launcher.No_se_encontro_la_clase_mdi_manager=Nelze nal\u00e9zt t\u0159\u00eddu mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=P\u0159\u00edstup k mdi manager odm\u00edtnut
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Nelze ulo\u017eit konfiguraci Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Nelze vytvo\u0159it instanci mdi manager
+Launcher.No_se_puede_acceder_a=Zam\u00edtnut p\u0159\u00edstup k
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Nelze ulo\u017eit konfigurace z\u00e1suvn\u00fdch modul\u016f
+Launcher.Two_extensions_with_the_same_priority=Dv\u011b extenze se stejnou prioritou. Bude na\u010dtena jen jedna.
+Launcher.Two_menus_with_the_same_position=Dv\u011b nab\u00eddky se stejnou pozic\u00ed. Bude na\u010dtena jen jedna.
+layer=Vrstva
+Layer=Vrstva
+layer_abstract=Abstrakt
+layer_name=N\u00e1zev vrstvy
+layer_title=N\u00e1zev vrstvy
+layerName=N\u00e1zev vrstvy
+LayerName=N\u00e1zev vrstvy
+layers_in_other_view=Vrstvy v jin\u00e9m pohledu
+layers_in_the_current_view=Vrstvy v aktu\u00e1ln\u00edm pohledu
+layerType=Typ geometrie
+length=D\u00e9lka
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Pou\u017e\u00edv\u00e1te stejnou polo\u017eku bu\u010f v legend\u011b nebo popisc\u00edch. Pros\u00edm zm\u011b\u0148te \nlegendu p\u0159ed odebr\u00e1n\u00edm spojen\u00ed.
+Leyenda_Por_Defecto=Implicitn\u00ed legenda
+line=Line
+line_=LINIE
+line_type=Typ linie
+linea=Linie
+Linea=Linie
+linea_grafica=Linie
+lineal_directo=P\u0159\u00edmo line\u00e1rn\u00ed
+linf_der=dole vpravo X
+link=Propojit
+Link=Odkaz
+linkColumn=Webov\u00e9 str\u00e1nka
+linkError=Chyba spojen\u00ed
+linkLoad=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed ze s\u00ed\u0165ov\u00e9ho zdroje
+load_from_xml=Na\u010d\u00edst z XML souboru (.rmf)
+loadWMS=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed dat z WMS
+localizador=Locator
+Localizador_por_atributo=Vyhledat podle atributu
+localize=Lokalizovat
+locked_element=Uzam\u010den\u00fd element
+locked_element_it_cannot_be_deleted=Uzam\u010den\u00fd element.\nNelze smazat.
+locked_element_it_cannot_be_renamed=Uzam\u010den\u00fd element.\nNelze odstranit.
+logo_URL=URL logotip
+longitud=
+lowerCoordinates=Doln\u00ed
+lppp=bnp
+lsup_izq=Naho\u0159e vlevo X
+m/pixel=metros/pixel
+malla_activada=Aktivovat grid
+manage_fields=Spravovat polo\u017eky
+mantainold=Ostranit star\u00e9 v\u00fdsledky hled\u00e1n\u00ed
+mantener_intervalo=Zachovat interval
+map_context_file_error=Chyba Web Map Context souboru.
+map_extent=Roz\u0161\u00ed\u0159en\u00ed
+map_size_in_pixels=Velikost mapy (v pixelech)
+map_units=Mapov\u00e9 jednotky
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapy
+marco=R\u00e1mec
+marco_vista=Framework pro zobrazen\u00ed
+margenes=Okraje\:
+Mas_100=Po\u010det hodnot je vy\u0161\u0161\u00ed ne\u017e 100 a neumo\u017e\u0148\u00f2uj\u00ed informovat
+mas_de_100_simbolos=V\u00edce ne\u017e 100 symbol\u016f obvykle nevn\u00e1\u0161\u00ed do mapy \u017e\u00e1dn\u00e9 informace
+maxFeatures_aviso=Byl dosa\u017een maxim\u00e1ln\u00ed povolen\u00fd po\u010det polo\u017eek. M\u016f\u017eete zv\u00fd\u0161it\npo\u010det obnoven\u00fdch polo\u017eek modifikac\u00ed parametru "Buffer".
+maximo=Maximum
+Maximo=Maximum
+maxx=max.x
+maxy=max.y
+MDIFrame.Error_no_capturado_por_el_usuario=Chyba u\u017eivatele
+MDIFrame.quiere_salir=Ukon\u010dit gvSIG?
+MDIFrame.salir=Konec
+MDIManagerFactory.No_skin_extension_in_the_plugins=Neexistuje extenze pro vzhled v z\u00e1suvn\u00e9m modulu
+media=V\u00fdznam
+Media=V\u00fdznam
+medir_area=M\u011b\u0159it plochy
+medir_distancias=M\u011b\u0159it vzd\u00e1lenosti
+Mensaje_buffer=Po\u010d\u00edt\u00e1m obalovou z\u00f3ny
+Mensaje_clip=Funkce o\u0159ez\u00e1v\u00e1n\u00ed...
+Mensaje_convexhull=Funkce konvexn\u00ed ob\u00e1lka
+Mensaje_difference=Funkce od\u010d\u00edt\u00e1n\u00ed...
+Mensaje_dissolve=Funkce prol\u00edn\u00e1n\u00ed...
+Mensaje_enlace_espacial=Funkce prostorov\u00e9ho spojen\u00ed...
+Mensaje_interseccion=Funkce pr\u016fse\u010d\u00edku...
+Mensaje_juntar=Funkce slou\u010den\u00ed...
+Mensaje_primera_pasada_union=Po\u010d\u00edt\u00e1m pr\u016fse\u010d\u00edk...
+Mensaje_procesando_buffer=Zpracov\u00e1v\u00e1m obalov\u00e9 z\u00f3ny
+Mensaje_procesando_buffer2=Spojuj\u00ed obalov\u00e9 z\u00f3ny...
+Mensaje_procesando_clip_primero=Po\u010d\u00edt\u00e1m o\u0159ez\u00e1vac\u00ed polyg\u00f3n...
+Mensaje_procesando_clip_segundo=O\u0159ez\u00e1v\u00e1m geoprvky...
+Mensaje_procesando_convexhull=Po\u010d\u00edt\u00e1m konvexn\u00ed ob\u00e1lku...
+Mensaje_procesando_diferencia=Po\u010d\u00edt\u00e1m rozd\u00edly...
+Mensaje_procesando_dissolves=Prol\u00edn\u00e1m geoprvky...
+Mensaje_procesando_enlace_espacial=Spojuji geoprvky...
+Mensaje_procesando_interseccion=V\u00fdpo\u010det pr\u016fnik\u016f...
+Mensaje_procesando_juntar=Spojov\u00e1n\u00ed geometri\u00ed...
+Mensaje_segunda_pasada_union=V\u00fdpo\u010det A-B rozd\u00edl\u016f...
+Mensaje_tercera_pasada_union=V\u00fdpo\u010det B-A rozd\u00edl\u016f...
+Mensaje_union=Spojen\u00ed geoprocesu...
+Messages._no_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
+Messages.las_traducciones_no_pudieron_ser_cargadas=P\u0159eklady nemohly b\u00fdt na\u010dteny
+Messages.no.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=Seznam jazyk\u016f nen\u00ed dostupn\u00fd. Mo\u017en\u00e1 jste zapom\u011bl inicializovat t\u0159\u00eddu.
+Messages.no_se_encontro_la_traduccion_para=Nebyl nalezen p\u0159eklad pro
+metadata_catalog=Vyhled\u00e1n\u00ed geodat - P\u0159ipojen\u00ed
+metadata_tree=Strom metadat
+metadatos=Metadatos
+metros=Metry
+Metros=Metry
+Milimetros=Milimetry
+Millas=M\u00edle
+minimo=Minimum
+Minimo=Minimum
+minimum_size_of_line_incorrect=Neplatn\u00e1 minim\u00e1ln\u00ed velikost linie.
+minx=min.x
+miny=min.y
+modificar=upravit
+modification_date=Datum zm\u011bny
+modify=Upravit
+mosaico_tooltip=Mozaika
+Mostrar_Contorno=Zobrazit obrysov\u00e9 \u010d\u00e1ry
+mostrar_descripcion=Zobrazen\u00ed popisu
+mostrar_escala_numerica=Sobrazit \u010d\u00edselnou \u0159adu.
+mostrar_puntos=Zobrazit \u010d\u00edsla
+mostrar_rejilla=Zobrazit m\u0159\u00ed\u017eku
+Mostrar_siempre=Zobrazit v\u017edy
+mostrar_unidades=Zobrazen\u00ed jednotek
+move=P\u0159esunout
+move_=P\u0158ESUNOUT
+move_elements=P\u0159esunout prvky
+Move_from_view=
+move_handlers=P\u0159esunout jednotky
+move_layer_down=Dol\u016f
+move_layer_up=Nahoru
+Mover_geo=P\u0159esunout georeferencovan\u00fd obr\u00e1zek.
+msg_save_raster=Operace bude zru\u0161ena. Chcete pokra\u010dovat?
+mtspixel=Mts/pixel
+muestra=P\u0159\u00edklad
+Muestra_atributos=Zobrazit atributy vybran\u00fdch vrstev.
+muestra_consola_tooltip=Zobraz v konzoli
+Muestra_los_atributos_de_las_capas_seleccionadas=Zobrazit atributy vybran\u00fdch vrstev
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zobraz prvky vrstvy, kter\u00e9 maj\u00ed jedine\u010dnou hodnotu symbolu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zobraz prvky vrstvy, kter\u00e9 maj\u00ed rozsah barev podle hodnot atribut\u016f
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zobraz v\u0161echny prvky vrstvy, kter\u00e9 maj\u00ed stejn\u00fd symbol
+multi_type=Mnohon\u00e1sobn\u00fd typ
+multiple_value=N\u00e1sobn\u00e1 hodnota
+multiples_intervalos=N\u00e1sobn\u00e9 intervaly
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Typ multipointu
+must_specify_a_file=Mus\u00edte ur\u010dit v\u00fdsledn\u00fd soubor
+name=Jm\u00e9no
+natural_intervals=P\u0159irozen\u00e9 intervaly
+navegacion=Navigace
+navegacion_vista=Navigace v pohledu
+nearest_point=Nejbli\u017e\u0161\u00ed bod
+necesita_un_tema_activo=Aktivn\u00ed sch\u00e9ma je nezbytn\u00e9
+necesita_un_tema_vectorial_activo=Aktivn\u00ed vektorov\u00e9 sch\u00e9ma je nezbytn\u00e9
+necesita_una_capa_activa=Aktivn\u00ed vrstva je pot\u0159ebn\u00e1
+necesita_una_capa_vectorial_activa=
+new_dxf=Nov\u00fd DXF
+new_field=Nov\u00fd atribut
+new_field_properties=Vlastnosti nov\u00e9ho atributu
+new_layer=Nov\u00e1 vrstva
+new_postgis=Nov\u00fd PostGIS
+new_shp=Nov\u00fd SHP
+next=Dal\u0161\u00ed
+Next=Dal\u0161\u00ed
+next_point_or_end=Dal\u0161\u00ed bod nebo konec
+next_previous_add_del_cancel=Bod, Dal\u0161\u00ed vrchol [S], P\u0159edchoz\u00ed [A], P\u0159idej [I] nebo Odstra\u0148 [E]
+ninguna_impresora_configurada=Nen\u00ed nastavena \u017e\u00e1dn\u00e1 tisk\u00e1rna
+Nivel_de_transparencia=\u00darov\u011b\u00f2 pr\u016fhlednosti
+no=No
+no_activos=Neaktivn\u00ed
+no_adjust_grid=
+No_de_intervalos=Po\u010det interval\u016f
+No_extension_associated_with_this_event_=S touto ud\u00e1losti nen\u00ed asociov\u00e1na \u017e\u00e1dn\u00e1 p\u0159\u00edpona souboru
+No_ha_sido_posible_realizar_la_operacion=Nen\u00ed mo\u017en\u00e9 vykonat operaci
+no_hay_ninguna_capa_seleccionada=Nebyla vybr\u00e1na \u017e\u00e1dn\u00e1 vrstva
+no_hay_ninguna_capa_seleccionado=
+No_mostrar=Nezobrazit vrstvu v p\u0159\u00edpad\u011b m\u011b\u0159\u00edtka
+No_mostrar_la_capa_cuando_la_escala=Ezobrazovat vrstvu, kdy\u017e je m\u011b\u0159\u00edtko
+no_puede_continuar=Nen\u00ed mo\u017en\u00e9 pokra\u010dovat
+No_reconocido=Nerozpozn\u00e1n
+No_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
+no_se_pegaran_las_tablas=Nebude vlo\u017eena \u017e\u00e1dn\u00e1 tabulka
+no_se_pegaran_las_vistas_del_conflicto=Pohled zp\u016fsobuj\u00edc\u00ed konflikt nebude vlo\u017een
+No_se_pudo_obtener_la_tabla_de_la_capa=Nebylo mo\u017en\u00e9 z\u00edskat z vrstvy
+No_Shape=Tato vrstva nen\u00ed typu Shape
+No_usar_buffer_redondeado=Konec obdeln\u00edku
+no_visibles=Nevidiln\u00e9
+nombre=Jm\u00e9no
+Nombre=Jm\u00e9no
+nombre_capa=N\u00e1zev vrstvy
+nombre_cobertura=N\u00e1zev pokryt\u00ed
+nombre_feature=
+nombre_no_valido=\u0160patn\u00e9 jm\u00e9no
+Nombre_que_se_le_dara_al_zoom=N\u00e1zev pro zoom
+nombre_sesion=N\u00e1zev sezen\u00ed
+Nombres=N\u00e1zvy
+none_selected=Nic nezvoleno
+normal=Normal
+north=Sever
+not_available=Nen\u00ed k dispozici
+Nueva_tabla=Nov\u00e1 tabulka
+nuevo=Nov\u00fd
+Nuevo_conjunto=Nov\u00e1 skupina
+nuevo_nombre_para_el_mapa=Zadejte n\u00e1zev nov\u00e9 vrstvy
+nuevo_proyecto=Nov\u00fd projekt
+nuevo_tamano_fuente=Nov\u00e1 velikost p\u00edsma\:
+nuevo_tooltip=Vytvo\u0159it nov\u00fd projekt
+num_bandas=Okrajov\u00e9 hodnoty
+num_columnas=Po\u010det sloupc\u016f
+num_filas=Po\u010det \u0159\u00e1dk\u016f
+Num_intervalos=Po\u010det interval\u016f
+Numero_anillos_concentricos=Po\u010det radi\u00e1ln\u00edch obalov\u00fdch z\u00f3n
+Numero_de_elementos_seleccionados=Po\u010det vybran\u00fdch geoprvk\u016f
+Numero_de_segmentos_por_cuadrante=
+numero_incorrecto=Neplatn\u00e1 hodnota
+N\u00fam_intervalos=Po\u010det interval\u016f
+Obtener_mas_proximo=Pou\u017e\u00edt nejbli\u017e\u0161\u00ed geometrii
+of=/
+offline=Odpojen
+ogc_mapcontext_file=OGC Web Map Context
+ok=Budi\u017e
+Ok=Budi\u017e
+online=P\u0159ipojen
+onSharpening=Aktivace doost\u0159ov\u00e1n\u00ed
+opacidad=Stupe\u0148 pr\u016fsvitnosti
+opciones=Mo\u017enosti
+open_first_time=Otev\u0159\u00edt spole\u010dn\u011b s pohledem
+open_layers_as=Otev\u0159\u00ed vrstvu jako
+operacion_cancelada=Zru\u0161 operaci
+Operacion_de_overlay=Operace p\u0159ekryvu
+Operaciones_adicionales=
+optinos.network.click_to_test_connection=
+options=Mo\u017enosti
+options.firewall.http.enabled=Pou\u017eij proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Neplatn\u00fd HTTP hostitel
+options.firewall.http.nonProxy=P\u0159ipoj p\u0159\u00edmo k
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=U\u017eivatelsk\u00e9 jm\u00e9no
+options.firewall.socks.enabled=Pou\u017eij proxy SOCK server
+options.firewall.socks.host=SOCK proxy hostitel
+options.firewall.socks.incorrect_host=Neplatn\u00fd SOCKS hostitel
+options.firewall.socks.port=SOCK proxy port
+options.general.remember_windows_pos=Zapamotovat pozici okna.
+options.general.remember_windows_size=Zapamatovat velikost okna.
+options.general.select_theme=Pou\u017e\u00edt vzhled (nutn\u00fd restart)
+options.network.click_to_test_connection=Stiskem tla\u010d\u00edtka otestujete spojen\u00ed
+options.network.status=Stav s\u00edt\u011b
+orientacion=Orientace\:
+origen_de_datos=P\u016fvod dat
+Origen_de_datos=P\u016fvod dat
+Origen_de_Datos=Vznik dat\:
+Otros=Jin\u00e9
+out_circle=Vn\u011b kru\u017enice
+out_polygon=vn\u011b polygonu
+out_rectangle=Vn\u011b obd\u00e9ln\u00edku
+Overlay=P\u0159ekryj
+Overlay_Desc=Funkce, kter\u00e1 extrahuje nov\u00e9 informace z p\u0159ekryvu dvou vrtev.
+owner=Vlastn\u00edk
+page=Strana
+paint=Zobrazit v\u00fdsledky
+parameters=Parametry
+parametros=Parametry
+Parametros=Parametry
+parte1=\u010c\u00e1st 1
+parte2=\u010c\u00e1st 2
+password=K\u00f3d
+paste=Paste
+paste_elements=Vlo\u017eit element
+path=Cesta
+pegar=Vlo\u017eit
+pegar_mapas=Vlo\u017eit mapy
+pegar_vistas=Vlo\u017eit podled
+Perimetro=Obvod
+period=Perioda
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mo\u017en\u00ed nastavit popisek mapov\u00fdch prvk\u016f hodnotou jednotliv\u00fdch pol\u00ed
+Personalizado=U\u017eivatelsky
+Pies=Stopy
+pila_de_comandos=z\u00e1sobn\u00edk p\u0159\u00edkaz\u016f
+pixeles=pixely
+pixels=pixels
+Plain=Pravideln\u00fd
+plantilla=\u0161ablona
+please_insert_new_field_name=Prosim vlo\u017ete nov\u00e9 jm\u00e9no atributu.
+plegar_despl=Pokro\u010dil\u00e9
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dv\u011b t\u0159\u00eddy se stejn\u00fdm jm\u00e9nem
+PluginClassLoader.Error_reading_file=IO chyba\:
+pluginNotFound=Nem\u00e1te pot\u0159ebn\u00e9 extenze pro na\u010dten\u00ed tohoto typu zdroje
+pluginNotFoundTitle=Na\u010d\u00edt\u00e1n\u00ed vrstev
+PluginServices.Bug\ en\ el\ c\u00f3digo=Chyba aplikace
+PluginServices.Bug_en_el_codigo=Chyba
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Chyba aplikace. Doporu\u010dujeme uzav\u0159\u00edt aplikaci.
+PluginServices.Error_grave_de_la_aplicacion=Kritick\u00e1 chyba. Rad\u011bji ulo\u017ete pr\u00e1ci a ukon\u010dete
+PluginServices.No_se_encontro_el_recurso_de_traducciones=Nelze nal\u00e9zt p\u0159ekladov\u00fd soubor
+PluginServices.No_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Nelze nastavit p\u0159es\u00fdpac\u00ed hodiny
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Nelze obnovit kurzor
+PluginServices.Procesando=
+png=PNG soubory
+point=Punto
+point_=BOD
+point_type=Typ bodu
+poligono=Polygon
+polilinea=l\u00ednie
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Typ polygonu
+polyline=L\u00ednie
+polyline_=L\u00cdNIE
+poner_capas_a=Nastav  vrstvu jako
+poner_temas_a=
+por_debajo_de=pod\:
+por_encima_de=nad\:
+Por_favor_active_el_tema=
+Por_favor_active_la_capa=
+posicion_linea=Pozice linie
+postcode=Po\u0161tovn\u00ed sm\u011brovac\u00ed \u010d\u00edslo
+postgis=PostGIS
+postgisColumn=Postgis
+postgisError=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed dat z PostGISu
+postgisLoad=Chyba PostGISu
+precision=P\u0159esnost
+pref.appearance=Vzhled
+pref.general=Obecn\u00e9
+pref.network=S\u00ed\u0165
+pref.network.firewall=Firewall/Proxy
+preferences=
+Preferences=Preference
+preferencias=Preference
+Preferencias=Preference
+preparar_pagina=P\u0159ipravit str\u00e1nku
+Preparar_pagina=P\u0159ipravit str\u00e1nku
+presentacion=Prezentace
+previous=P\u0159edchoz\u00ed
+previsualizacion=Preview
+Previsualizacion=N\u00e1hled
+Previsualizacion_de_simbolo=N\u00e1hled symbol\u016f
+primero=Prvn\u00ed
+prioridad=Priorita
+problems_encountered_while_importing=Nalezen probl\u00e9m b\u011bhem importu
+procesar=Zpracuj
+process_tip=Zpracuj GCP a p\u0159i\u0159a\u010f obrazu do\u010dasn\u00fd rozsah
+projection=Projekce
+properties=Vlastnosti
+propiedad=Vlastnost
+propiedades=Vlastnosti
+propiedades_cajetin=
+propiedades_capa=Vlastnosti vrstvy
+propiedades_de_la_capa=Vlastnosti vrstvy
+Propiedades_de_la_Capa=Vlastnosti vrstvy
+propiedades_del_tema=Atributy sch\u00e9matu
+Propiedades_del_Tema=Vlastnosti t\u00e9matu
+Propiedades_escala_grafica=Vlastnosti m\u011b\u0159\u00edtka
+propiedades_grafico=Nastaven\u00ed grafiky
+propiedades_mapa=Nastaven\u00ed mapy
+propiedades_marco_imagenes=Vlastnosti obrazov\u00e9ho r\u00e1mu
+propiedades_marco_leyenda=Vlastnosti r\u00e1mu legendy
+propiedades_marco_vista=Vlastnosti r\u00e1mu pohledu
+propiedades_raster=Vlastnosti rastru
+propiedades_sesion=Vlastnosti sezen\u00ed
+propiedades_tabla=Vlastnosti tabulky
+propiedades_tema=
+Propiedades_texto=Vlastnosti textu
+propiedades_vista=Vlastnosti pohledu
+props=Vlastnosti
+protocolsGroup=Protokoly
+provider=Poskytovatel
+Proyecciones=Projekce
+prueba_conexion=Test spojen\u00ed
+puerto=Port
+Pulgadas=Palce
+punto=Bod
+puntos=Body
+purpose=\u00da\u010del
+pwd=
+quantile_intervals=Interval kvantilu
+quiere_continuar=Chcete pokra\u010dovat?
+quitar=Odstranit
+Quitar=Odstranit
+Quitar_capa=Odstranit vrstvu
+quitar_enlaces=Odebrat spojen\u00ed
+Quitar_todos=Odstranit v\u0161e
+Quitar_Todos=Odstranit v\u0161e
+quitar_uniones=odebrat spojen\u00ed
+rango_de_escalas=Rozsah m\u011b\u0159\u00edtka
+Rango_de_escalas=Velikost m\u011b\u0159\u00edtka
+Rasterfiles=Rastrov\u00e9 soubory
+realce=vylep\u0161en\u00ed
+realces=Vylep\u0161en\u00ed
+realmente_desea_guardar=Upravdu si p\u0159ejete ulo\u017eit?
+realmente_desea_guardar_la_capa=Opravdu si p\u0159ejete ulo\u017eit vrstvu?
+recargar=Nahraj znovu
+Recortar=Clip
+Recortar._Introduccion_de_datos=O\u0159e\u017e. Vstup dat
+recorte=O\u0159ez\u00e1n\u00ed
+recorte_colas=O\u0159ez fronty
+recorte_vista=Vy\u0159\u00edznout dle pohledu
+recta=P\u0159\u00edm\u00e1 linie
+rectangle=Obd\u00e9ln\u00edk
+rectangle_=OBD\u00c9LN\u00cdK
+rectangulo=Obd\u00e9ln\u00edk
+recuento=p\u0159epo\u010det
+Recuperar_leyenda=Nahr\u00e1t legendu
+Recuperar_y_eliminar_otros_zoom=Obnovit a zru\u0161it p\u0159ibl\u00ed\u017een\u00ed
+Recursos\ Disponibles=Dostupn\u00e9 zdroje
+redo=Znovu
+redo_error=Chyba p\u0159i p\u0159\u00edstupu k ovlada\u010d\u016fm znovuproveden\u00ed
+reference=Odkaz
+reference_system=Prostorov\u00fd referen\u010dn\u00ed syst\u00e9m
+refrescar=Obnovit
+refresh_capabilities=Obnovit cache
+refresh_capabilities_tooltip=P\u0159epsat lok\u00e1ln\u00ed data
+registros=Z\u00e1znamy
+registros_seleccionados_total=Celkem zvolen\u00fdch z\u00e1znam\u016f
+rehacer=Znovu
+rellenar_marco_vista=Zaplnit r\u00e1m pohledu
+relleno=Zaplnit\:
+remove=Odstranit
+remove_column=
+remove_elements=Odstra\u0148 element
+remove_fields=Odstra\u0148 atribut
+remove_geometry=Odstra\u0148 geoprvek
+remove_row=Odstra\u0148 z\u00e1znam
+remove_rows=Odstra\u0148 z\u00e1znamy
+rename_field=P\u0159ejmenuj atribut
+renombrar=P\u0159ejmenovat
+reproyectar_aviso=Projekce vrstvy se neshoduje s projekc\u00ed pohledu.\nUpozorn\u011bn\u00ed\: N\u011bkter\u00e9 transformace mohou b\u00fdt nep\u0159esn\u00e9.\nPros\u00edm prostudujte dokumentaci
+reproyectar_pregunta=Chcete p\u0159ev\u00e9st projekci?
+resolucion=Rozli\u0161en\u00ed
+resolucion_resultado=Rozli\u0161en\u00ed v\u00fdsledku\:
+resolution=Rozli\u0161en\u00ed ??
+resourceLinkColumn=Propojen\u00ed
+resourceShowColumn=Prohl\u00ed\u017eet
+resourceTypeColumn=
+respuesta_error_servidor=Nelze z\u00edskat p\u0159ekryv
+resto_valores=Ostatn\u00ed hodnoty
+restore=
+restore_defaults=Obnov standardn\u00ed
+restore_palette=Obnov paletu
+restrictArea=Omezen\u00ed oblasti vyhled\u00e1v\u00e1n\u00ed
+results=V\u00fdsledky
+resutsByPage=V\u00fdsledky po stran\u00e1ch
+rootName=Ko\u0159en
+rotate=Oto\u010d
+rotate_=OTO\u010c
+rotation_field=Atribut oto\u010den\u00ed
+salir=Konec
+Salir=Konec
+salir_tooltip=Konec
+salvar=
+salvar_raster=Ulo\u017eit jako rastr
+Sample=Vzor
+save_to_ascii=Exportuj tabulku bod\u016f do textov\u00e9ho souboru.
+save_to_xml=Ulo\u017e do XML (.grf)
+scale=M\u011b\u0159\u00edtko
+scale_=M\u011a\u0158\u00cdTKO
+scaleAny=jak\u00fdkoliv
+scaleI=>1.000.000
+scaleII=1.000.000 - 250.000
+scaleIII=250.000 - 50.000
+scaleIV=50.000 - 10.000
+scaleV=10.000 - 5000
+scaleVI=<5.000
+Scripting=Skriptov\u00e1n\u00ed
+Se_superponen_a=P\u0159es
+Se_va_a_tener_en_cuenta_para_borrar_los_registros_desde=... smazat registry z
+se_van_a_guardar_=Bude ulo\u017eeno
+Sean_disjuntos_a=rozpojit jako
+Sean_iguales_a=stejn\u00e9 jako
+search_results=V\u00fdsledky hled\u00e1n\u00ed
+searchButton=Vyhledat
+seleccion=V\u00fdb\u011br
+seleccion_campos=V\u00fdb\u011br polo\u017eek
+seleccion_de_campos=V\u00fdb\u011br pole
+seleccion_fuente=Vybrat font
+Seleccion_por_capa=V\u00fdb\u011br podle vrstvy
+Seleccion_por_tema=Vybrat t\u00e9ma
+selecciona_sistema_de_referencia=Vyber prostorov\u00fd referen\u010dn\u00ed syst\u00e9m
+seleccionar=Vyber
+Seleccionar=Vybrat
+seleccionar_capas=Vybrat vrstvu
+seleccionar_coberturas=Vybrat p\u0159ekryvy
+seleccionar_CRS=Vybrat CRS
+Seleccionar_de_las_capas_activas_los_elementos_que=Vybrat polo\u017eky z aktivn\u00edch vrstev kter\u00e9 jsou\:
+Seleccionar_del_conjunto=Vybrat ze sady
+Seleccionar_Directorio=Cesta k vrstv\u00e1m...
+seleccionar_fichero=vyber soubor
+Seleccionar_fichero=Vybrat soubor
+seleccionar_formato=Vybrat form\u00e1t
+seleccionar_parametros=Vybrat parametry
+seleccionar_por_punto=Vybrat po bodech
+seleccionar_por_rectangulo=Vybrat obd\u00e9ln\u00edkem
+seleccionar_puntos=
+seleccionar_srs=Vybrat SRS
+seleccionar_tiempo=Nastavit \u010das
+seleccionar_todos=Vybrat v\u0161e
+seleccione_campo_enlace=Zvolte propojovac\u00ed polo\u017eku
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Vyber atribut pou\u017e\u00edvan\u00fd pro ulo\u017een\u00ed \u00faklonu textov\u00e9ho popisku</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Vyberte polo\u017eku pro ulo\u017een\u00ed barvy popisu</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Vyberte textov\u00e9 pole, kter\u00e9 by m\u011blo b\u00fdt pou\u017eito k zobrazen\u00ed nev\u00e9 virtu\u00e1ln\u00ed vrstvy.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed fontu p\u00edsma.</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed velikosti popisu.</HTML>
+seleccione_fecha=Vybrat datum...
+seleccione_tabla=V\u00fdb\u011br tabulky
+seleccione_tabla_a_enlazar=Zvolte tabulku k propojen\u00ed
+seleccione_tabla_origen=Zvolte p\u016fvodn\u00ed tabulku spojen\u00ed
+select=Vyber
+select_all=Vyber v\u0161e
+select_driver=Vyber disk
+select_features=Vyber vrstvu
+select_fields=Vyber atributy vrstvy
+select_formats=Zvolen\u00e9 form\u00e1ty
+select_from_point=Vyber z bodu???
+select_geom_field=Vyber polo\u017eku s geometri\u00ed
+select_geometry=Vyber geoprvek
+select_geometry_to_extend=Zvolte geometri k roz\u0161\u00ed\u0159en\u00ed.
+select_geometry_type=Vyber typ geoprvku
+select_handlers=Zvolte ovlada\u010de
+select_layers=Vybrat vrstvu
+select_none=Odstra\u0148 v\u0161e
+select_other_geometry_or_end=Vyber jin\u00e9 typy geoprvk\u016f nebo Konec[E]
+select_unique_field=Vyber jedine\u010dnou polo\u017eku
+selectBandaRefinado=V\u00fdb\u011br Panchromatick\u00e9ho p\u00e1sma
+Selected=Vybr\u00e1no
+selected_dimensions=Zvolen\u00e9 rozm\u011bry
+selected_layer=Vybran\u00e9 vrstvy
+selected_layers=Zvolen\u00e9 vrstvy
+selected_parameters=Vybran\u00e9 parametry
+selected_themes=Zvolen\u00e1 t\u00e9mata
+selectfromview=Vyber bod z pohledu
+selection=V\u00fdb\u011br
+selection_=V\u00ddB\u011aR
+selection_color=Vybrat barvu
+selection_up=P\u0159esu\u0148 v\u00fdb\u011br nahoru??? 
+server=Server
+server_abstract=Shrnut\u00ed
+server_cant_render_layers=Tento WMS nem\u016f\u017ee spojit tyto vrstvy. \nPokuste se odd\u011blit dotazy pro ka\u017edou vrstvu.
+server_timeout=WMS vypr\u0161el \u010dasov\u00fd limit
+server_title=N\u00e1zev
+server_type=Typ serveru
+serverReply=Odpov\u011b\u010f serveru
+serverURL=Vypl\u0148te adresu katalogov\u00e9ho serveru
+serverURLCat=Vypl\u0148te adresu serveru se slovn\u00edkem
+service_info=Informace o serveru
+servidor=Server
+Servidor=Server
+servidor_wcs_no_responde=Po\u017eadovan\u00fd server neodpov\u00edd\u00e1
+set=Nastavit
+settings=Nastaven\u00ed
+settings_editor=Editor nastaven\u00ed
+shape_seleccion=Exportovat v\u00fdb\u011br
+Shapefile=Shapefile
+Shapefiles=Shapefiles
+show_grid=
+show_layer_names=Zobraz jm\u00e9na
+show_this_dialog_next_startup=Zobraz tento dialog p\u0159i dal\u0161\u00edm startu
+shp=SHp
+shp_files=SHP files
+si=ano
+siempre=V\u017edy
+siguiente=Dal\u0161\u00ed
+Siguiente=Dal\u0161\u00ed
+simbolo=Symbol
+Simbolo=Symbol
+Simbolo_unico=Jedine\u010dn\u00fd symbol
+Simbolo_Unico=Jedine\u010dn\u00fd symbol
+Simbologia=Symboly
+simple=Prost\u00fd
+simplificar=Zjednodu\u0161it
+simplificar_leyenda=Zjednodu\u0161 legendu
+simplify=Zjednodu\u0161
+sin_realce=\u017d\u00e1dn\u00e9 vylep\u0161en\u00ed
+sin_titulo=Nepojmenovan\u00fd
+sincronizar_color_borde_relleno=Sjednotit barvu obrysu a v\u00fdpln\u011b\:
+single_value=Jedna hodnota
+size=Velikost
+Size=Velikost
+sobre_la_barra=Na sloupci s m\u011b\u0159\u00edtkem
+Sobreescribir_fichero=P\u0159epi\u0161 soubor
+Solo_disolver_adyacentes=Spoj jen p\u0159ilehl\u00e9.
+Solo_para_capas_vectoriales=Jen pro vektory
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Definuj minim\u00e1ln\u00ed velikost linie, kter\u00e1 bude tvo\u0159it k\u0159ivku.
+splain=
+SplashWindow.Iniciando=Spou\u0161t\u00edm...
+square=\u010ctverec
+srs=Srs
+start_edition=Zahaj editaci
+state_or_province=Estat/Prov\u00edncia
+statistics=Statistika
+StatusBar.Aplicacion_iniciada=Aplikace spu\u0161t\u011bna
+stop_edition=Ukon\u010di editaci
+stretch=Rozta\u017een\u00ed
+stretch_=ROZTA\u017dEN\u00cd
+style=Styl
+Style=Styl
+Subir_capa=P\u0159esunout vrstvu v\u00fd\u0161e
+Sum=Summatory
+suma=Sou\u010det
+Superior=Vy\u0161\u0161\u00ed
+suprimir_objetos_origen=M\u00e1 b\u00fdtobjekt odebr\u00e1n ze zdroje? Ano[Y] nebo Ne[N]
+symmetry=Symetrie
+symmetry_=SYMETRIE
+S\u00edmbolo=Symbol
+Tabla=Tabulka
+Tabla_de_Atributos=Tabulka atribut\u016f
+Tabla_de_prueba=Testovac\u00ed tabulka
+tablas=Tabulky
+Tablas=Tabulky
+table=Tabla
+tag=tag
+tamano=Velikost\:
+tamano_metros=Velikost v metrech
+tamano_pagina=Velikost str\u00e1nky
+tamano_posicion=Velikost a um\u00edst\u011bn\u00ed
+tamanyo_borde=Velikost okraje
+tamanyo_fuente=Velikost p\u00edsma
+tamanyo_pagina=Velikost str\u00e1nky
+tamPixX=Velikost pixlu X
+tamPixY=Velikost pixlu Y  
+tarea_en_progreso=B\u011b\u017e\u00edc\u00ed proces
+telephone=Tel\u00e8fon
+Tema=Vrstva
+terminar=Ukon\u010di
+Terminar=Dokon\u010dit
+terminar_edicion=Ukon\u010di editaci
+terminate=Terminate
+test_now=Zkontroluj te\u010f
+texto=Text
+theme=
+this_layer_is_not_self_editable=Tato vrstva je chr\u00e1n\u011bna proti z\u00e1pisu. Bude mo\u017en\u00e9 exportovat editovan\u00e1 data, ale ne do stejn\u00e9 vrstvy.
+this_table_is_not_self_editable=Tabulka nen\u00ed editovateln\u00e1
+Tiempo=\u010cas
+Tile=Dla\u017edice
+tile_tooltip=Dla\u017edicov\u011b se\u0159adit okna
+time=\u010cas
+timeout=Timeout
+tipo_dato=Datov\u00fd typ
+tipo_de_intervalo=Druh intervalu
+Tipo_de_intervalos=Druh intervalu
+tipo_de_leyenda=Druh legendy
+Tipo_de_leyenda=Druh legendy
+Tipo_de_linea=Druh linie
+tipo_fichero_proyecto=Soubor projektu gvSIG(*.gvsproj)
+tipo_leyenda=Soubor legendy (*.GVL)
+tipo_linea=Druh obrysu\:
+Tipo_no_reconocido=Nezn\u00e1m\u00fd druh
+tipo_relleno=V\u00fdpl\u0148\:
+tipo_simbolo=Druh symbolu\:
+tipos_de_documentos=Druhy dokument\u016f
+title=N\u00e1zev
+titulo=Spr\u00e1vce projektu
+titulo_confirmar=Potvrzen\u00ed
+titulo_consola=Informa\u010dn\u00ed konzola
+titulo_fframetext=N\u00e1zev textov\u00e9ho pole
+to=Do
+to_annotation=Zm\u011b\u0148 na vrstvu popisk\u016f
+to_palette=Zm\u011b\u0148 na paletu
+toda_la_tabla=cel\u00e1 tabulka
+todos=V\u0161e
+tolerancia_incorrecta=\u0160patn\u00e1 tolerance
+tooltip_copiar_al_portapapeles=Zkop\u00edruj do schr\u00e1nky
+tooltip_cortar_al_portapapeles=P\u0159em\u00edsti do schr\u00e1nky
+tooltip_pegar_desde_el_portapapeles=Vlo\u017e ze schr\u00e1nky
+Toquen=dot\u00fdkaj\u00edc\u00ed se s
+total=Celkem
+transparencia=Pr\u016fhlednost
+Transparencia=Pr\u016fhlednost
+transparencia_pixel=Pr\u016fhlednost po pixlech
+Triangulo=Troj\u016fheln\u00edk
+trim=
+type=Typ
+ultimo=Posledn\u00ed
+ULX=ULX\:
+ULY=ULY
+Un_Layer=Vyberte alespo\u00f2 jednu vrstvu.
+undo=Zp\u011bt
+undo_error=
+ungroup=Odskupit
+unidades=Jednotky\:
+Unidades=Jednotky\:
+Union=Union
+Union._Introduccion_de_datos=Sjednoceni. Vstup dat
+unite_separate=
+unknown=Nezn\u00e1m\u00fd
+unknown_response_format=Nezn\u00e1m\u00fd form\u00e1t odpov\u011bdi
+unsupported_crs=Nepodporovan\u00fd CRS
+unsupported_map_context_version=Nepodporovan\u00e1 verze kontextu Webov\u00e9 mapy
+unsupported_version=Nepodporovan\u00e1 verze
+untitled=Nepojmenovan\u00fd
+upperCoordinates=Horn\u00ed
+url=url
+Usar_indice_espacial=Pou\u017e\u00edt prostorov\u00fd index
+Usar_los_campos_de_la_capa=Pou\u017e\u00edt polo\u017eky z pokryt\u00ed
+usar_marco=Pou\u017e\u00edt r\u00e1mec
+usar_rango=Pou\u017eit\u00fd rozsah
+Usar_solamente_los_elementos_seleccionados=Pou\u017eij jen vybran\u00e9 prvky
+usar_titulo=Pou\u017e\u00edt n\u00e1zev
+use_custom_size=Voliteln\u00e1 velikost
+use_full_extent=Po\u017e\u00edj zobrazen\u00ed v\u0161eho
+use_interpolation_method=Pou\u017e\u00edj interpola\u010dn\u00ed met\u00f3du
+use_view_size=Velikost pohledu
+username=
+usuario=U\u017eivatel
+utilizar_margenes_impresora=Pou\u017e\u00edt okraje tisk\u00e1rny
+vacia=Pr\u00e1zdn\u00fd
+valor=Hodnota
+Valor=Hodnota
+Valor_azul=Hodnota modr\u00e9
+Valor_Bandas=Velikost okraje
+valor_pixel=hodnota pixelu
+Valor_rojo=Hodnota \u010derven\u00e9
+Valor_verde=Hodnota zelen\u00e9
+Valores=Hodnoty
+Valores_unicos=Jednoduch\u00e9 hodnoty
+Valores_Unicos=Jedine\u010dn\u00e9 hodnoty
+value=Hodnota
+varianza=Odchylka
+ventana=Okno
+Ventana=Okno
+ventana_proyecto=Okno projektu
+Ver=Pohled
+ver_tabla_atributos=Zkontrolujte tabulku atribut\u016f
+ver_tooltip=Uk\u00e1zat okno projektu
+version=Versi\u00f3
+version_conflict=Konflikt verz\u00ed
+vertical=Vertik\u00e1ln\u00ed
+vertical_space=Vertik\u00e1ln\u00ed mezera
+vertices=
+view=Pohled
+visible=Viditeln\u00fd
+visibles=Viditeln\u00fd
+Vista=Pohled
+vistas=Pohledy
+visualizacion=Zobrazit
+Visualizacion=Zobrazit
+visualizar_cuadricula=Zobrazit grid
+warning=Varov\u00e1n\u00ed
+warnings=Varov\u00e1n\u00ed
+wcs_cant_connect=Nelze se p\u0159ipojit k WCS
+wcs_properties=WCS vlastnosti
+WCS_properties=WCS vlastnosti
+wcs_server_error=Chyba WCS serveru
+wcs_server_timeout=Timeout serveru
+wcsColumn=Pokr\u00fdvka
+wcsError=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed dat z katalogu
+wcsLoad=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed dat z WCS
+web_map_context=Kontext webov\u00e9 mapy
+web_map_context_settings=Nastaven\u00ed kontextu webov\u00e9 mapy
+wfs_properties=WFS vlastnosti
+wfs_server_error=WFS chyba servru
+wfsColumn=Objekt
+wfsError=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed objektu
+WFSLayer=WFS vrstva
+wfsLoad=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed dat z WFS
+width=Ampl\u00e0ria
+Window=Okno
+WMS=WMS
+wms_cant_connect=Nelze se spojit s WMS
+wms_not_queryable=Server neum\u00ed vyhled\u00e1vat
+wms_properties=WMS vlastnosti
+wms_server_error=Chyba WMS
+wms_transparency=Pr\u016fhlednost
+wmsColumn=Mapa
+wmsError=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed mapy
+WMSLayer=WMS vrstva
+xmax=maximum X
+xmin=minimum X
+Yardas=Yardy
+yes=Ano
+ymax=maximum Y
+ymin=minimum Y
+zone=Z\u00f3na
+zoom=
+Zoom=Zoom
+Zoom_a_la_capa=P\u0159ibli\u017e na vrstvu
+Zoom_Acercar=P\u0159ibl\u00ed\u017eit
+Zoom_al_Tema=Zoom na vrstvu
+Zoom_Alejar=Odd\u00e1lit
+Zoom_Completo=Zobraz v\u0161e
+Zoom_Completo_Vista=Zobrazit r\u00e1m ve full extent
+zoom_in_factor=P\u0159ibl\u00ed\u017eit
+Zoom_Mas=Zoom In
+zoom_mas_vista=
+Zoom_Mas_Vista=Zoom in v r\u00e1mu pohledu
+Zoom_Menos=Odd\u00e1lit
+Zoom_Menos_Vista=Zoom out v r\u00e1mu pohledu
+zoom_out_factor=\u00darove\u0148 zv\u011bt\u0161en\u00ed
+Zoom_pixel=Zoom na rozli\u0161en\u00ed rastru
+Zoom_previo=P\u0159ede\u0161l\u00e1 zm\u011bna p\u0159ibl\u00ed\u017een\u00ed
+Zoom_Previo=P\u0159edchoz\u00ed zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom na v\u00fdb\u011br
+Zoom_sgte=Dal\u0161\u00ed zm\u011bna p\u0159ibl\u00ed\u017een\u00ed
+zooms=P\u0159ibl\u00ed\u017een\u00ed

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties	(revision 42196)
@@ -0,0 +1,138 @@
+#Translations for language [it]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+Analisis_Desc=
+arcims_load=
+arcims_server_error=
+area=
+attributeName=
+Block_Size_=
+box=
+break=
+button.resolution.calculate=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+centimeters=
+Centrar_la_Vista_sobre_un_punto=
+change=
+circumscribed=
+Clean=
+com.iver.andami.messages.Messages=
+compleja=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Convex_Hull._Introduccion_de_datos=
+could_not_find_web_map_context_file=
+Crear_Buffer=
+DBManager=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+default_projection=
+deleted_feature=
+documento=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+Ejecutando\ comando\:\ =
+en=
+Error_capa_vacia=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+errorMessageJComboBoxItemsSeekerConfigurable=
+export_to_map_context=
+exportJOP2Title=
+filter=
+filterOnAWFSLayer=
+formato_de_numero_incorrecto=
+Generate_Tfw_=
+Icon_not_found_=
+Implimir=
+inches=
+Interleave_=
+into_circle=
+invalid_dimension_values=
+invalid_value_for_gap=
+invert_selection=
+Las_traducciones_no_pudieron_ser_cargadas=
+Launcher.error_getting_class_loader_for_status_bar_control=
+length_of_field=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+max_features=
+max_length_is=
+MaxFeaturesEditionCache=
+Messages.no_se_encontro_la_traduccion_para=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+no_hay_ninguna_capa_seleccionada=
+none=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+options.configuration.screen=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.network.click_to_test_connection=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+parte1=
+parte2=
+pdf=
+personalizar_margenes=
+Photometric_=
+pixel_point=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+Preferences=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+ps=
+Recursos\ Disponibles=
+restore_defaults=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+seleccionar_capas_raster=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+selection_up=
+separator=
+Show\ Errors=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+test_measure=
+text_preview_text=
+the_length_of_the_line_above_is=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+Unable_to_find_icon=
+ver_error_capa=
+warning_title=
+will_be_truncated=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties-UTF8	(revision 42196)
@@ -0,0 +1,136 @@
+1:=
+Analisis_Desc=
+Block_Size_=
+Centrar_la_Vista_sobre_un_punto=
+Clean=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Convex_Hull._Introduccion_de_datos=
+Crear_Buffer=
+DBManager=
+Ejecutando comando: =
+Error_capa_vacia=
+Error_reading_isocodes_file=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Generate_Tfw_=
+Icon_not_found_=
+Implimir=
+Interleave_=
+Las_traducciones_no_pudieron_ser_cargadas=
+Launcher.error_getting_class_loader_for_status_bar_control=
+MaxFeaturesEditionCache=
+Messages.no_se_encontro_la_traduccion_para=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+Photometric_=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show Errors=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+arcims_load=
+arcims_server_error=
+area=
+attributeName=
+box=
+break=
+button.resolution.calculate=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+centimeters=
+change=
+circumscribed=
+com.iver.andami.messages.Messages=
+compleja=
+could_not_find_web_map_context_file=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+default_projection=
+deleted_feature=
+documento=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+en=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+exportJOP2Title=
+export_to_map_context=
+filter=
+filterOnAWFSLayer=
+formato_de_numero_incorrecto=
+inches=
+into_circle=
+invalid_dimension_values=
+invalid_value_for_gap=
+invert_selection=
+length_of_field=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+max_features=
+max_length_is=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+none=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+options.configuration.screen=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.network.click_to_test_connection=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+parte1=
+parte2=
+pdf=
+personalizar_margenes=
+pixel_point=
+ps=
+restore_defaults=
+script_sep=
+seleccionar_capas_raster=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+selection_up=
+separator=
+test_measure=
+text_preview_text=
+the_length_of_the_line_above_is=
+two_or_more_fields_with_the_same_name=
+ver_error_capa=
+warning_title=
+will_be_truncated=
+y_en=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties	(revision 42196)
@@ -0,0 +1,138 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+Analisis_Desc=
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+attributeName=Name
+Block_Size_=Block Size\:
+box=box
+break=Break
+button.resolution.calculate=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+centimeters=
+Centrar_la_Vista_sobre_un_punto=Center view to point
+change=Change
+circumscribed=Circumscribed
+Clean=
+com.iver.andami.messages.Messages=
+compleja=
+Compression_=Compression\:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+could_not_find_web_map_context_file=
+Crear_Buffer=Create Buffer...
+DBManager=DataBase Manager
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+default_projection=Default projection
+deleted_feature=Deleted feature
+documento=
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+Ejecutando\ comando\:\ =Execute command\:
+en=
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+export_to_map_context=Export to Map Context
+exportJOP2Title=
+filter=
+filterOnAWFSLayer=
+formato_de_numero_incorrecto=Incorrect number format
+Generate_Tfw_=Generate Tfw\:
+Icon_not_found_=Icon not found
+Implimir=
+inches=
+Interleave_=Interleave\:
+into_circle=Inscribed
+invalid_dimension_values=Invalid dimension values
+invalid_value_for_gap=
+invert_selection=Invert selection
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+length_of_field=Length of field
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+max_features=Max. features
+max_length_is=Max length is
+MaxFeaturesEditionCache=Max features edition cache
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+none=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+options.configuration.screen=
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.network.click_to_test_connection=Press button to test the connection
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+parte1=
+parte2=
+pdf=
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pixel_point=
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+Preferences=Preferences
+Progressive_=Progressive\:
+Proximidad=
+Proximidad_Desc=
+ps=
+Recursos\ Disponibles=Available Resources
+restore_defaults=Restore defaults
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+seleccionar_capas_raster=Select raster layers
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+selection_up=Move selection to top
+separator=Separator
+Show\ Errors=
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+test_measure=
+text_preview_text=
+the_length_of_the_line_above_is=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+Unable_to_find_icon=Unable to find icon
+ver_error_capa=Show errors
+warning_title=
+will_be_truncated=
+y_en=and in

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,138 @@
+1:=
+Analisis_Desc=
+Block_Size_=Block Size:
+Centrar_la_Vista_sobre_un_punto=Center view to point
+Clean=
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+Crear_Buffer=Create Buffer...
+DBManager=DataBase Manager
+Ejecutando comando: =Execute command:
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Generate_Tfw_=Generate Tfw:
+Icon_not_found_=Icon not found
+Implimir=
+Interleave_=Interleave:
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+MaxFeaturesEditionCache=Max features edition cache
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+Photometric_=Photometric:
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferences
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show Errors=
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+attributeName=Name
+box=box
+break=Break
+button.resolution.calculate=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+centimeters=
+change=Change
+circumscribed=Circumscribed
+com.iver.andami.messages.Messages=
+compleja=
+could_not_find_web_map_context_file=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+default_projection=Default projection
+deleted_feature=Deleted feature
+documento=
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+en=
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+exportJOP2Title=
+export_to_map_context=Export to Map Context
+filter=
+filterOnAWFSLayer=
+formato_de_numero_incorrecto=Incorrect number format
+inches=
+into_circle=Inscribed
+invalid_dimension_values=Invalid dimension values
+invalid_value_for_gap=
+invert_selection=Invert selection
+length_of_field=Length of field
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+max_features=Max. features
+max_length_is=Max length is
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+none=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+options.configuration.screen=
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.network.click_to_test_connection=Press button to test the connection
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+parte1=
+parte2=
+pdf=
+personalizar_margenes=Customize margins
+pixel_point=
+ps=
+restore_defaults=Restore defaults
+script_sep=
+seleccionar_capas_raster=Select raster layers
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+selection_up=Move selection to top
+separator=Separator
+test_measure=
+text_preview_text=
+the_length_of_the_line_above_is=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+ver_error_capa=Show errors
+warning_title=
+will_be_truncated=
+y_en=and in
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties	(revision 42196)
@@ -0,0 +1,138 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+Analisis_Desc=
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=\u00c1rea
+attributeName=Nombre
+Block_Size_=Tama\u00f1o de bloque\:
+box=Cajet\u00edn
+break=
+button.resolution.calculate=Calcula resoluci\u00f3n
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+centimeters=Cent\u00edmetros
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+change=Cambiar
+circumscribed=Circunscrito
+Clean=
+com.iver.andami.messages.Messages=
+compleja=
+Compression_=Compresi\u00f3n\:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducci\u00f3n de datos
+could_not_find_web_map_context_file=
+Crear_Buffer=Crear \u00e1rea de influencia
+DBManager=Gestor de Base de datos
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener informaci\u00f3n.
+default_projection=Proyecci\u00f3n por defecto
+deleted_feature=Feature borrada
+documento=
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+Ejecutando\ comando\:\ =Execute command\:
+en=
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+export_to_map_context=Exportar a Map Context
+exportJOP2Title=
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+formato_de_numero_incorrecto=Formato de n\u00famero incorrecto.
+Generate_Tfw_=Generar Tfw\:
+Icon_not_found_=No se encontr\u00f3 el icono
+Implimir=
+inches=Pulgadas
+Interleave_=Entrelazado\:
+into_circle=Inscrito
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+length_of_field=Longitud de campo
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quiz\u00e1 olvid\u00f3 inicializar la clase.
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+none=
+num_lados_insuficiente=N\u00famero de lados insuficiente
+numero_decimales_mostrar=N\u00famero decimales
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+parte1=
+parte2=
+pdf=
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pixel_point=
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+Preferences=Preferencias
+Progressive_=Progresivo\:
+Proximidad=
+Proximidad_Desc=
+ps=
+Recursos\ Disponibles=Recursos Disponibles
+restore_defaults=Restaurar opciones por defecto
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Show\ Errors=
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+test_measure=Medida de prueba
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+Unable_to_find_icon=No se pudo encontrar el icono
+ver_error_capa=Ver errores
+warning_title=
+will_be_truncated=ser\u00e1 truncado
+y_en=y en

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,138 @@
+1:=
+Analisis_Desc=
+Block_Size_=Tamaño de bloque:
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+Clean=
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducción de datos
+Crear_Buffer=Crear área de influencia
+DBManager=Gestor de Base de datos
+Ejecutando comando: =Execute command:
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Generate_Tfw_=Generar Tfw:
+Icon_not_found_=No se encontró el icono
+Implimir=
+Interleave_=Entrelazado:
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+Messages.no_se_encontro_la_traduccion_para=No se encontró la traducción para
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quizá olvidó inicializar la clase.
+Photometric_=Fotométrica:
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferencias
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show Errors=
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=Área
+attributeName=Nombre
+box=Cajetín
+break=
+button.resolution.calculate=Calcula resolución
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+centimeters=Centímetros
+change=Cambiar
+circumscribed=Circunscrito
+com.iver.andami.messages.Messages=
+compleja=
+could_not_find_web_map_context_file=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener información.
+default_projection=Proyección por defecto
+deleted_feature=Feature borrada
+documento=
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+en=
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+exportJOP2Title=
+export_to_map_context=Exportar a Map Context
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+formato_de_numero_incorrecto=Formato de número incorrecto.
+inches=Pulgadas
+into_circle=Inscrito
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_value_for_gap=
+invert_selection=Invertir selección
+length_of_field=Longitud de campo
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+max_features=Máx. features
+max_length_is=La longitud máxima es
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+none=
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+options.configuration.screen=Configuración de pantalla
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+parte1=
+parte2=
+pdf=
+personalizar_margenes=Personalizar márgenes
+pixel_point=
+ps=
+restore_defaults=Restaurar opciones por defecto
+script_sep=
+seleccionar_capas_raster=Seleccionar capas ráster
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+selection_up=Mover arriba la selección
+separator=Separador
+test_measure=Medida de prueba
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+ver_error_capa=Ver errores
+warning_title=
+will_be_truncated=será truncado
+y_en=y en
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,58 @@
+1:=
+Analisis_Desc=
+Clean=
+Error_seleccionar_esquema_merge=
+Implimir=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+PluginServices.Error_grave_de_la_aplicación=
+Proximidad=
+Proximidad_Desc=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show Errors=
+Topology=
+Triangulation=
+button.resolution.calculate=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+centimeters=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+documento=
+en=
+exportJOP2Title=
+filter=
+filterOnAWFSLayer=
+inches=
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+options.configuration.screen=
+options.view.default_map_overview_back_color=
+options.view.default_view_back_color=
+parte1=
+parte2=
+pdf=
+pixel_point=
+ps=
+script_sep=
+test_measure=
+text_preview_text=
+the_length_of_the_line_above_is=
+ver_tags=
+warning_title=
+wfs_server_error=
+will_be_truncated=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Analisis_Desc=
+button.resolution.calculate=Calcula resoluci\u00f3n
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+centimeters=Cent\u00edmetros
+Clean=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+documento=
+en=
+Error_seleccionar_esquema_merge=
+exportJOP2Title=
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+Implimir=
+inches=Pulgadas
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+num_lados_insuficiente=N\u00famero de lados insuficiente
+numero_decimales_mostrar=N\u00famero decimales
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+parte1=
+parte2=
+pdf=
+pixel_point=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+Proximidad=
+Proximidad_Desc=
+ps=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show\ Errors=
+test_measure=Medida de prueba
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+Topology=
+Triangulation=
+ver_tags=
+warning_title=
+wfs_server_error=
+will_be_truncated=ser\u00e1 truncado

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,58 @@
+1:=
+Analisis_Desc=
+Clean=
+Error_seleccionar_esquema_merge=
+Implimir=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+PluginServices.Error_grave_de_la_aplicación=
+Proximidad=
+Proximidad_Desc=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show Errors=
+Topology=
+Triangulation=
+button.resolution.calculate=Calcula resolución
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+centimeters=Centímetros
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+documento=
+en=
+exportJOP2Title=
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+inches=Pulgadas
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+options.configuration.screen=Configuración de pantalla
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+parte1=
+parte2=
+pdf=
+pixel_point=
+ps=
+script_sep=
+test_measure=Medida de prueba
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+ver_tags=
+warning_title=
+wfs_server_error=
+will_be_truncated=será truncado
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Analisis_Desc=
+button.resolution.calculate=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+centimeters=
+Clean=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+documento=
+en=
+Error_seleccionar_esquema_merge=
+exportJOP2Title=
+filter=
+filterOnAWFSLayer=
+Implimir=
+inches=
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+options.configuration.screen=
+options.view.default_map_overview_back_color=
+options.view.default_view_back_color=
+parte1=
+parte2=
+pdf=
+pixel_point=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+Proximidad=
+Proximidad_Desc=
+ps=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show\ Errors=
+test_measure=
+text_preview_text=
+the_length_of_the_line_above_is=
+Topology=
+Triangulation=
+ver_tags=
+warning_title=
+wfs_server_error=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,469 @@
+1:=
+Abrir_Geoproceso=Open Geoprocess
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+Analisis=Analisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Block_Size_=Block Size:
+Bold=Bold
+Capas_del_directorio=Layers on directory
+Clean=
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+DBManager=DataBase Manager
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando comando: =Execute command:
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw:
+Geoprocesos=Geoprocesses
+Gestor_de_Geoprocesos=Geoprocess toolbox
+Grid=Grid
+Icon_not_found_=Icon not found
+Implimir=
+Interleave_=Interleave:
+Italic=Italic
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+LayerName=Layer name
+MaxFeaturesEditionCache=Max features edition cache
+Mensaje_buffer=Computing buffers
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+Num_intervalos=Number of Intervals
+Numero_de_elementos_seleccionados=Number of selected features
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+Photometric_=Photometric:
+Plain=Regular
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferences
+Preferencias=Preferences
+Previsualizacion_de_simbolo=Symbol preview
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selection by Layer
+Seleccionar_Directorio=Path with layers...
+Selected=Selected
+Show Errors=
+Size=Size
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+WFSLayer=WFS Layer
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+arc=Arc
+arcims_load=Loading ArcIms
+area=Area
+attributeName=Name
+attributeType=Type
+box=box
+break=Break
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_connect_wfs=Cannot connect to WFS
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+contiene_espacios_en_blanco=It has white space
+copiar=Copy
+cortar=Cut
+could_not_find_web_map_context_file=
+coverage=Coverage
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+de =of 
+de 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+defined_by_view_extent=Defined by the views extent
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desea_borrar_el_documento=¿Do you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=¿Do you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+disagregate_layers=Maintain layer structure
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+editable=Editable
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+errores_csv=Include the errors in the CSV file.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+exportJOP2Title=
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WFS_layer=Fit WFS layer
+formato_de_numero_incorrecto=Incorrect number format
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+gml=GML
+gml_files=GML Files
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+idioma=Language
+imagen_no_accesible=Unable to access the image
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+internal_polygon=Internal polygon
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+layerName=Layer name
+layerType=Geometry type
+length_of_field=Length of field
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.
+It cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.
+It cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+mapa=Map
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase 
+the amount of Features recovered by modifying the 
+"Buffer" parameter.
+max_features=Max. features
+max_length_is=Max length is
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+new_field_properties=New field properties
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_filas=Number of rows
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=Invalid value
+offline=Disconnected
+online=Connected
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+polygon_=POLYGON
+poner_capas_a=Set layers as
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+projection=Projection
+propiedad=Oroperty
+ps=
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+rectangle=Rectangle
+rectangle_=RECTANGLE
+reference_system=Reference System
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+script_sep=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the labels text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+selected_layer=Selected layer
+selectfromview=Select a point from the view
+selection=Selection
+selection_up=Move selection to top
+separator=Separator
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+siempre=Always
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tamanyo_pagina=Page size
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+total=Total
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+url=url
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning_title=
+wcs_cant_connect=Cant connect to WCS
+wcs_server_timeout=Server timeout
+wfs_properties=WFS Properties
+wfs_server_error=
+will_be_truncated=
+wms_cant_connect=Cannot connect to WMS
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties-UTF8	(revision 42196)
@@ -0,0 +1,463 @@
+1:=
+Abrir_Geoproceso=
+Agregacion=
+Agregacion_Desc=
+Analisis=
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=
+Asistente_de_geoprocesamiento=
+Block_Size_=
+Bold=
+Capas_del_directorio=
+Clean=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+DBManager=
+Edition=
+Edition_Properties=
+Ejecutando comando: =
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Flatness=
+Formato_de_numero_erroneo=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+Gestor_de_Geoprocesos=
+Grid=
+Icon_not_found_=
+Implimir=
+Interleave_=
+Italic=
+Launcher.error_getting_class_loader_for_status_bar_control=
+LayerName=
+MaxFeaturesEditionCache=
+Mensaje_buffer=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_enlace_espacial=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+Num_intervalos=
+Numero_de_elementos_seleccionados=
+Overlay=
+Overlay_Desc=
+Photometric_=
+Plain=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=
+Preferencias=
+Previsualizacion_de_simbolo=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=
+Seleccionar_Directorio=
+Selected=
+Show Errors=
+Size=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+WFSLayer=
+Zoom_previo=
+Zoom_sgte=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+arc=
+arcims_load=
+area=
+attributeName=
+attributeType=
+box=
+break=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_connect_wfs=
+cant_reproject_from_any_of=
+capas_edition_cache=
+cargar=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+contiene_espacios_en_blanco=
+copiar=
+cortar=
+could_not_find_web_map_context_file=
+coverage=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+defined_by_view_extent=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+disagregate_layers=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+editable=
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+errores_csv=
+escala_desconocida=
+exploit_=
+exportJOP2Title=
+export_to=
+export_to_map_context=
+exportando_features=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WFS_layer=
+formato_de_numero_incorrecto=
+georef_file=
+georeferenciado=
+gml=
+gml_files=
+group_graphic_line=
+grupo=
+horizontal_space=
+idioma=
+imagen_no_accesible=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+internal_polygon=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+layerName=
+layerType=
+length_of_field=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+mapa=
+maxFeatures_aviso=
+max_features=
+max_length_is=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+nearest_point=
+necesita_una_capa_activa=
+new_field_properties=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_filas=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=
+offline=
+online=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+polygon_=
+poner_capas_a=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+projection=
+propiedad=
+ps=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+rectangle=
+rectangle_=
+reference_system=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+script_sep=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+selected_layer=
+selectfromview=
+selection=
+selection_up=
+separator=
+show_this_dialog_next_startup=
+shp=
+si=
+siempre=
+simbolo=
+simplificar_leyenda=
+simplify=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+suprimir_objetos_origen=
+symmetry_=
+tamPixX=
+tamPixY=
+tamanyo_pagina=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+total=
+two_or_more_fields_with_the_same_name=
+unsupported_crs=
+unsupported_map_context_version=
+url=
+use_full_extent=
+use_interpolation_method=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning_title=
+wcs_cant_connect=
+wcs_server_timeout=
+wfs_properties=
+wfs_server_error=
+will_be_truncated=
+wms_cant_connect=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties	(revision 42196)
@@ -0,0 +1,465 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+Abrir_Geoproceso=Abrir Geoproceso
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_rows=A\u00f1adir filas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+anadir_tag=A\u00f1adir etiqueta
+Analisis=An\u00e1lisis
+Analisis_Desc=
+arc=Arco
+arcims_load=Carga de ArcIms
+area=\u00c1rea
+Area_de_influencia_definida_por_un_campo=\u00c1rea de influencia definida por un campo
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+attributeName=Nombre
+attributeType=Tipo
+Block_Size_=Tama\u00f1o de bloque\:
+Bold=Negrita
+box=Cajet\u00edn
+break=
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edici\u00f3n
+cant_connect_wfs=No ha sido posible realizar la conexi\u00f3n con el WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+Capas_del_directorio=Capas del directorio
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Cent\u00edmetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=C\u00edrculo
+Clean=
+coincidir_tamanyo=Coincidir tama\u00f1o
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compresi\u00f3n\:
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+contiene_espacios_en_blanco=Contiene espacios en blanco
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+copiar=Copiar
+cortar=Cortar
+could_not_find_web_map_context_file=
+coverage=Cobertura
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexi\u00f3n a Base de Datos
+datum=Datum
+DBManager=Gestor de Base de datos
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+defined_by_view_extent=Usar extensi\u00f3n de la vista
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+disagregate_layers=Conservar estructura de capas
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar s\u00f3lo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar v\u00e9rtice
+editable=Editable
+Edition=Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+errores_csv=Incluir los errores en fichero CSV.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exportJOP2Title=
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WFS_layer=Ajustar capa WFS
+Flatness=
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_de_numero_incorrecto=Formato de n\u00famero incorrecto.
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw\:
+Geoprocesos=Geoprocesos
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+Grid=Rejilla
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+horizontal_space=Espacio horizontal
+Icon_not_found_=No se encontr\u00f3 el icono
+idioma=Idioma
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+Implimir=
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+Italic=Cursiva
+join_=UNIR
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+layerName=Nombre de la capa
+LayerName=Nombre de la capa
+layerType=Tipo de geometr\u00eda
+length_of_field=Longitud de campo
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+mapa=Mapa
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+Mensaje_buffer=Calculando \u00e1reas de influencia...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+nearest_point=Punto m\u00e1s cercano
+necesita_una_capa_activa=Necesita una capa activa
+new_field_properties=Propiedades del campo nuevo
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+nombre_no_valido=Nombre no v\u00e1lido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_filas=N\u00famero de filas
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+Numero_de_elementos_seleccionados=N\u00famero de elementos seleccionados
+numero_decimales_mostrar=N\u00famero decimales
+numero_incorrecto=N\u00famero incorrecto
+offline=Desconectado
+online=Conectado
+operacion_cancelada=Operaci\u00f3n cancelada
+optinos.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contrase\u00f1a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pixel_point=
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+polygon_=POL\u00cdGONO
+poner_capas_a=Poner capas a ...
+postgis=PostGIS
+precision=Precisi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferencias
+preferencias=Preferencias
+Preferencias=Preferencias
+Previsualizacion_de_simbolo=Previsualizaci\u00f3n de s\u00edmbolo
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+ps=
+realces=Realces
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+rectangle=Rect\u00e1ngulo
+rectangle_=RECT\u00c1NGULO
+Recursos\ Disponibles=Recursos Disponibles
+reference_system=Sistema de Referencia
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotaci\u00f3n
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+Seleccion_por_capa=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+Seleccionar_Directorio=Carpeta con capas...
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+Selected=Capa seleccionada
+selected_layer=Capa seleccionada
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Show\ Errors=
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+si=s\u00ed
+siempre=Siempre
+simbolo=S\u00edmbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+Size=Tama\u00f1o
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETR\u00cdA
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Topology=
+total=Total
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+Unable_to_find_icon=No se pudo encontrar el icono
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versi\u00f3n de Web Map Context no soportada
+url=url
+use_full_extent=Usar extensi\u00f3n total
+use_interpolation_method=Usar metodo de interpolaci\u00f3n
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning_title=
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+wcs_server_timeout=Tiempo de espera agotado
+wfs_properties=Propiedades WFS
+wfs_server_error=
+WFSLayer=Capa WFS
+will_be_truncated=ser\u00e1 truncado
+wms_cant_connect=No ha sido posible realizar la conexi\u00f3n con el WMS
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom m\u00e1s
+zoom_out_factor=Factor zoom menos
+Zoom_previo=Extensi\u00f3n anterior
+Zoom_sgte=Extensi\u00f3n siguiente

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,469 @@
+1:=
+Abrir_Geoproceso=Abrir Geoproceso
+Agregacion=Agregación
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+Analisis=Análisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Área de influencia definida por un campo
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Block_Size_=Tamaño de bloque:
+Bold=Negrita
+Capas_del_directorio=Capas del directorio
+Clean=
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Conversion_de_datos=Conversión de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyección, etc.)
+DBManager=Gestor de Base de datos
+Edition=Edición
+Edition_Properties=Propiedades de Edición
+Ejecutando comando: =Execute command:
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Flatness=
+Formato_de_numero_erroneo=Formato de número incorrecto
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw:
+Geoprocesos=Geoprocesos
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+Grid=Rejilla
+Icon_not_found_=No se encontró el icono
+Implimir=
+Interleave_=Entrelazado:
+Italic=Cursiva
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+LayerName=Nombre de la capa
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+Mensaje_buffer=Calculando áreas de influencia...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operación
+Num_intervalos=Número de intervalos
+Numero_de_elementos_seleccionados=Número de elementos seleccionados
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva información basándose en la superposición de dos capas.
+Photometric_=Fotométrica:
+Plain=Normal
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferencias
+Preferencias=Preferencias
+Previsualizacion_de_simbolo=Previsualización de símbolo
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selección por capa
+Seleccionar_Directorio=Carpeta con capas...
+Selected=Capa seleccionada
+Show Errors=
+Size=Tamaño
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+WFSLayer=Capa WFS
+Zoom_previo=Extensión anterior
+Zoom_sgte=Extensión siguiente
+accept_tip=Procesa los GCP's y salva la georreferenciación. Da por terminada la introducción de GCP's.
+add_delete_edit_fields=Puede añadir, borrar o renombrar los campos
+add_rows=Añadir filas
+agrupacion=Agrupación
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensión de la imagen a georreferenciar
+anadir_tag=Añadir etiqueta
+arc=Arco
+arcims_load=Carga de ArcIms
+area=Área
+attributeName=Nombre
+attributeType=Tipo
+box=Cajetín
+break=
+button.resolution.calculate=Calcula resolución
+cajetin=Cajetín
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el más alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el más ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tamaño de los elementos seleccionados hasta coincidir con el más grande.
+cancel_tip=Cierra el dialogo deshaciendo los últimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edición
+cant_connect_wfs=No ha sido posible realizar la conexión con el WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ningún
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Centímetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detrás
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=Círculo
+coincidir_tamanyo=Coincidir tamaño
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se está intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se está intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se está intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+contiene_espacios_en_blanco=Contiene espacios en blanco
+copiar=Copiar
+cortar=Cortar
+could_not_find_web_map_context_file=
+coverage=Cobertura
+cuadro_no_asociado=El cuadro de georreferenciación no está asociado a ninguna capa sobre la vista, este se cerrará. Por favor, abra el diálogo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexión a Base de Datos
+datum=Datum
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deberá introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deberá introducir nombres nuevos para los mapas
+default_projection=Proyección por defecto
+default_value=Valor por defecto
+defined_by_view_extent=Usar extensión de la vista
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa después del primer punto.
+desactivar_puntos=Desactiva capa de puntos después del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaciÃ³n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desea_borrar_el_documento=¿Está seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=¿Está seguro de que desea borrar las capas activas?
+desea_continuar=¿Desea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+disagregate_layers=Conservar estructura de capas
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar sólo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar vértice
+editable=Editable
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+errores_csv=Incluir los errores en fichero CSV.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+exportJOP2Title=
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, ¿desea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, ¿desea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisión decimal
+field_default_value=Valor por defecto
+field_length=Tamaño
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WFS_layer=Ajustar capa WFS
+formato_de_numero_incorrecto=Formato de número incorrecto.
+georef_file=Fichero de georreferenciación
+georeferenciado=Georeferenciado
+gml=GML
+gml_files=Ficheros gml
+group_graphic_line=Agrupar línea gráfica
+grupo=grupo
+horizontal_space=Espacio horizontal
+idioma=Idioma
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>¡ATENCIÓN!</b><br>Versión en desarrollo. Puede contener errores importantes e incluso provocar daños en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la última versión estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometría [E]
+insert_selection_last_point=Insertar esquina opuesta del rectángulo de selección
+insert_selection_point=Insertar punto de selección
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=¿Desea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+internal_polygon=Polígono interno
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_priority_value=Valor de prioridad inválido
+invalid_value_for_gap=
+invert_selection=Invertir selección
+join_=UNIR
+layerName=Nombre de la capa
+layerType=Tipo de geometría
+length_of_field=Longitud de campo
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.
+No puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.
+No puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+mapa=Mapa
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al máximo 
+ numero de Features permitido. Puede aumentar el número de 
+Features recuperadas modificando el parámetro "Buffer"
+max_features=Máx. features
+max_length_is=La longitud máxima es
+minimum_size_of_line_incorrect=La longitud mínima de línea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala numérica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+nearest_point=Punto más cercano
+necesita_una_capa_activa=Necesita una capa activa
+new_field_properties=Propiedades del campo nuevo
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegará ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegarán las vistas con conflicto
+nombre_no_valido=Nombre no válido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_filas=Número de filas
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+numero_incorrecto=Número incorrecto
+offline=Desconectado
+online=Conectado
+operacion_cancelada=Operación cancelada
+optinos.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.configuration.screen=Configuración de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contraseña
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posición de las ventanas.
+options.general.remember_windows_size=Recordar el tamaño de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.network.status=Estado de la conexión
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar márgenes
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+polygon_=POLÍGONO
+poner_capas_a=Poner capas a ...
+postgis=PostGIS
+precision=Precisión
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+projection=Proyección
+propiedad=Propiedad
+ps=
+realces=Realces
+realmente_desea_guardar_la_capa=¿Desea guardar la capa
+recargar=Recargar
+rectangle=Rectángulo
+rectangle_=RECTÁNGULO
+reference_system=Sistema de Referencia
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometría
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotación
+script_sep=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selección compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas ráster
+seleccionar_por_poligono=Seleccionar por polígono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenará el ángulo con el que se mostrará el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el color con el que se mostrará la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará la fuente con el que se mostrará de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el alto con el que se mostrará la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometría
+select_geometry_to_extend=Seleccionar geometría a extender
+select_other_geometry_or_end=Seleccione otra geometría o finalizar[E]
+selected_layer=Capa seleccionada
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_up=Mover arriba la selección
+separator=Separador
+show_this_dialog_next_startup=Mostrar este diálogo la próxima vez
+shp=SHP
+si=sí
+siempre=Siempre
+simbolo=Símbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tamaño mínimo de las líneas que formarán las curvas.
+suprimir_objetos_origen=¿Suprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETRÍA
+tamPixX=Tamaño pixel X
+tamPixY=Tamaño pixel Y
+tamanyo_pagina=Tamaño de página
+terminar=Terminar
+terminar_edicion=Terminar edición
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podrá exportar los datos editados, pero no podrá guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+total=Total
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versión de Web Map Context no soportada
+url=url
+use_full_extent=Usar extensión total
+use_interpolation_method=Usar metodo de interpolación
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning_title=
+wcs_cant_connect=No se puede realizar la conexión al WCS
+wcs_server_timeout=Tiempo de espera agotado
+wfs_properties=Propiedades WFS
+wfs_server_error=
+will_be_truncated=será truncado
+wms_cant_connect=No ha sido posible realizar la conexión con el WMS
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom más
+zoom_out_factor=Factor zoom menos
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties	(revision 42196)
@@ -0,0 +1,465 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+Abrir_Geoproceso=Open Geoprocess
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+Analisis=Analisis
+Analisis_Desc=
+arc=Arc
+arcims_load=Loading ArcIms
+area=Area
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+attributeName=Name
+attributeType=Type
+Block_Size_=Block Size\:
+Bold=Bold
+box=box
+break=Break
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_connect_wfs=Cannot connect to WFS
+cant_reproject_from_any_of=Unable to reproject from any of
+Capas_del_directorio=Layers on directory
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+Clean=
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compression\:
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+contiene_espacios_en_blanco=It has white space
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+copiar=Copy
+cortar=Cut
+could_not_find_web_map_context_file=
+coverage=Coverage
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de\ =of 
+de\ 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+defined_by_view_extent=Defined by the view\u0092s extent
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+disagregate_layers=Maintain layer structure
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+editable=Editable
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+errores_csv=Include the errors in the CSV file.
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exportJOP2Title=
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WFS_layer=Fit WFS layer
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+formato_de_numero_incorrecto=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw\:
+Geoprocesos=Geoprocesses
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+Grid=Grid
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+Icon_not_found_=Icon not found
+idioma=Language
+imagen_no_accesible=Unable to access the image
+Implimir=
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+Italic=Italic
+join_=JOIN
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+layerName=Layer name
+LayerName=Layer name
+layerType=Geometry type
+length_of_field=Length of field
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+mapa=Map
+max_features=Max. features
+max_length_is=Max length is
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+Mensaje_buffer=Computing buffers
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+new_field_properties=New field properties
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=
+Numero_de_elementos_seleccionados=Number of selected features
+numero_decimales_mostrar=
+numero_incorrecto=Invalid value
+offline=Disconnected
+online=Connected
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pixel_point=
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+polygon_=POLYGON
+poner_capas_a=Set layers as
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferences
+preferencias=Preferences
+Preferencias=Preferences
+Previsualizacion_de_simbolo=Symbol preview
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+projection=Projection
+propiedad=Oroperty
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+ps=
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+rectangle=Rectangle
+rectangle_=RECTANGLE
+Recursos\ Disponibles=Available Resources
+reference_system=Reference System
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+Seleccion_por_capa=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+Seleccionar_Directorio=Path with layers...
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+Selected=Selected
+selected_layer=Selected layer
+selectfromview=Select a point from the view
+selection=Selection
+selection_up=Move selection to top
+separator=Separator
+Show\ Errors=
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+siempre=Always
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+Size=Size
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Topology=
+total=Total
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+Unable_to_find_icon=Unable to find icon
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+url=url
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning_title=
+wcs_cant_connect=Can\u0092t connect to WCS
+wcs_server_timeout=Server timeout
+wfs_properties=WFS Properties
+wfs_server_error=
+WFSLayer=WFS Layer
+will_be_truncated=
+wms_cant_connect=Cannot connect to WMS
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties	(revision 42196)
@@ -0,0 +1,465 @@
+#Translations for language [gl]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+Abrir_Geoproceso=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+Agregacion=
+Agregacion_Desc=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+Analisis=
+Analisis_Desc=
+arc=
+arcims_load=
+area=
+Area_de_influencia_definida_por_un_campo=
+Asistente_de_geoprocesamiento=
+attributeName=
+attributeType=
+Block_Size_=
+Bold=
+box=
+break=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_connect_wfs=
+cant_reproject_from_any_of=
+Capas_del_directorio=
+capas_edition_cache=
+cargar=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+Clean=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+contiene_espacios_en_blanco=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+copiar=
+cortar=
+could_not_find_web_map_context_file=
+coverage=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+DBManager=
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+defined_by_view_extent=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+disagregate_layers=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+editable=
+Edition=
+Edition_Properties=
+Ejecutando\ comando\:\ =
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+errores_csv=
+errorMessageJComboBoxItemsSeekerConfigurable=
+escala_desconocida=
+exploit_=
+export_to=
+export_to_map_context=
+exportando_features=
+exportJOP2Title=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WFS_layer=
+Flatness=
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+georef_file=
+georeferenciado=
+Gestor_de_Geoprocesos=
+gml=
+gml_files=
+Grid=
+group_graphic_line=
+grupo=
+horizontal_space=
+Icon_not_found_=
+idioma=
+imagen_no_accesible=
+Implimir=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+Interleave_=
+internal_polygon=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+join_=
+Launcher.error_getting_class_loader_for_status_bar_control=
+layerName=
+LayerName=
+layerType=
+length_of_field=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+mapa=
+max_features=
+max_length_is=
+maxFeatures_aviso=
+MaxFeaturesEditionCache=
+Mensaje_buffer=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_enlace_espacial=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+nearest_point=
+necesita_una_capa_activa=
+new_field_properties=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_filas=
+Num_intervalos=
+num_lados_insuficiente=
+Numero_de_elementos_seleccionados=
+numero_decimales_mostrar=
+numero_incorrecto=
+offline=
+online=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+Overlay=
+Overlay_Desc=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+Photometric_=
+pixel_point=
+Plain=
+plantilla=
+please_insert_new_field_name=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+polygon_=
+poner_capas_a=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+Preferences=
+preferencias=
+Preferencias=
+Previsualizacion_de_simbolo=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+Progressive_=
+projection=
+propiedad=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+ps=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+rectangle=
+rectangle_=
+Recursos\ Disponibles=
+reference_system=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=
+seleccion_compleja=
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+Seleccionar_Directorio=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+Selected=
+selected_layer=
+selectfromview=
+selection=
+selection_up=
+separator=
+Show\ Errors=
+show_this_dialog_next_startup=
+shp=
+si=
+siempre=
+simbolo=
+simplificar_leyenda=
+simplify=
+Size=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+suprimir_objetos_origen=
+symmetry_=
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Topology=
+total=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+Unable_to_find_icon=
+unsupported_crs=
+unsupported_map_context_version=
+url=
+use_full_extent=
+use_interpolation_method=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning_title=
+wcs_cant_connect=
+wcs_server_timeout=
+wfs_properties=
+wfs_server_error=
+WFSLayer=
+will_be_truncated=
+wms_cant_connect=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=
+Zoom_previo=
+Zoom_sgte=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties-UTF8	(revision 42196)
@@ -0,0 +1,400 @@
+1:=
+Abrir_Geoproceso=
+Agregacion=
+Agregacion_Desc=
+Analisis=
+Analisis_Desc=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+Block_Size_=
+Bold=
+Clean=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+DBManager=
+Disolver._Introduccion_de_datos=
+Edition=
+Edition_Properties=
+Ejecutando comando: =
+Enlace_espacial._Introduccion_de_datos=
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Flatness=
+Formato_de_numero_erroneo=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+Gestor_de_Geoprocesos=
+Grid=
+Icon_not_found_=
+Implimir=
+Interleave_=
+Interseccion._Introduccion_de_datos=
+Italic=
+Juntar._Introduccion_de_datos=
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.look_and_feel=
+LayerName=
+MaxFeaturesEditionCache=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+Num_intervalos=
+Overlay=
+Overlay_Desc=
+Photometric_=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Preferencias=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+Recortar._Introduccion_de_datos=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=
+Show Errors=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+Union._Introduccion_de_datos=
+WFSLayer=
+Zoom_sgte=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+arc=
+arcims_load=
+area=
+attributeName=
+attributeType=
+box=
+break=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_reproject_from_any_of=
+capas_edition_cache=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+contiene_espacios_en_blanco=
+could_not_find_web_map_context_file=
+cuadro_no_asociado=
+database_connection=
+datum=
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+editable=
+edition_properties=
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+en=
+en_unidades=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+errores_csv=
+escala_desconocida=
+exploit_=
+exportJOP2Title=
+export_to=
+export_to_map_context=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filter=
+filterOnAWFSLayer=
+final_point=
+georef_file=
+georeferenciado=
+gml=
+gml_files=
+group_graphic_line=
+grupo=
+horizontal_space=
+imagen_no_accesible=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+internal_polygon=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+layerType=
+length_of_field=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+maxFeatures_aviso=
+max_features=
+max_length_is=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+nearest_point=
+new_field_properties=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=
+online=
+operacion_cancelada=
+options.configuration.screen=
+options.firewall.http.port=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+pixel_point=
+please_insert_new_field_name=
+postgis=
+precision=
+pref.network.firewall=
+preferencias=
+problems_encountered_while_importing=
+process_tip=
+propiedad=
+ps=
+puerto=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotate_=
+rotation_field=
+script_sep=
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+selected_layer=
+selection=
+selection_up=
+separator=
+show_this_dialog_next_startup=
+shp=
+si=
+simplificar_leyenda=
+simplify=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+stretch_=
+suprimir_objetos_origen=
+symmetry_=
+tamPixX=
+tamPixY=
+tamanyo_pagina=
+terminar=
+terminar_edicion=
+test_measure=
+text_preview_text=
+texto=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+two_or_more_fields_with_the_same_name=
+unsupported_crs=
+url=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning_title=
+warnings=
+wfs_server_error=
+will_be_truncated=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties	(revision 42196)
@@ -0,0 +1,402 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Abrir_Geoproceso=Abrir Geoproceso
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_rows=A\u00f1adir filas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+anadir_tag=A\u00f1adir etiqueta
+Analisis=An\u00e1lisis
+Analisis_Desc=
+arc=Arco
+arcims_load=Carga de ArcIms
+area=\u00c1rea
+Areas_de_influencia._Introduccion_de_datos=\u00c1reas de influencia. Introducci\u00f3n de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+attributeName=Nombre
+attributeType=Tipo
+Block_Size_=Tama\u00f1o de bloque\:
+Bold=Negrita
+box=Cajet\u00edn
+break=
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edici\u00f3n
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+centimeters=Cent\u00edmetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+Clean=
+coincidir_tamanyo=Coincidir tama\u00f1o
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compresi\u00f3n\:
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+contiene_espacios_en_blanco=Contiene espacios en blanco
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducci\u00f3n de datos
+could_not_find_web_map_context_file=
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+database_connection=Conexi\u00f3n a Base de Datos
+datum=Datum
+DBManager=Gestor de Base de datos
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+Disolver._Introduccion_de_datos=Disolver. Introducci\u00f3n de datos
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar s\u00f3lo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+editable=Editable
+Edition=Edici\u00f3n
+edition_properties=Propiedades de Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+en=
+en_unidades=en unidades
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducci\u00f3n de datos
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+errores_csv=Incluir los errores en fichero CSV.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportJOP2Title=
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+Flatness=
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw\:
+Geoprocesos=Geoprocesos
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+Grid=Rejilla
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+horizontal_space=Espacio horizontal
+Icon_not_found_=No se encontr\u00f3 el icono
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+Implimir=
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+Interseccion._Introduccion_de_datos=Intersecci\u00f3n. Introducci\u00f3n de datos
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+Italic=Cursiva
+Juntar._Introduccion_de_datos=Juntar. Introducci\u00f3n de datos
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+Launcher.look_and_feel=No se pudo poner el 'look and feel'
+LayerName=Nombre de la capa
+layerType=Tipo de geometr\u00eda
+length_of_field=Longitud de campo
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+nearest_point=Punto m\u00e1s cercano
+new_field_properties=Propiedades del campo nuevo
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+nombre_no_valido=Nombre no v\u00e1lido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+numero_decimales_mostrar=N\u00famero decimales
+offline=Desconectado
+online=Conectado
+operacion_cancelada=Operaci\u00f3n cancelada
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pixel_point=
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+postgis=PostGIS
+precision=Precisi\u00f3n
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+Preferencias=Preferencias
+problems_encountered_while_importing=Se encontraron problemas al importar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+propiedad=Propiedad
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+ps=
+puerto=Puerto
+realces=Realces
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+Recortar._Introduccion_de_datos=Recortar. Introducci\u00f3n de datos
+Recursos\ Disponibles=Recursos Disponibles
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate_=ROTAR
+rotation_field=Campo de rotaci\u00f3n
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+Selected=Capa seleccionada
+selected_layer=Capa seleccionada
+selection=Seleccionar
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Show\ Errors=
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+si=s\u00ed
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+stretch_=ESTIRAR
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETR\u00cdA
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+test_measure=Medida de prueba
+text_preview_text=
+texto=Texto
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+Unable_to_find_icon=No se pudo encontrar el icono
+Union._Introduccion_de_datos=Uni\u00f3n. Introducci\u00f3n de datos
+unsupported_crs=CRS no soportado
+url=url
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning_title=
+warnings=Avisos
+wfs_server_error=
+WFSLayer=Capa WFS
+will_be_truncated=ser\u00e1 truncado
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom m\u00e1s
+zoom_out_factor=Factor zoom menos
+Zoom_sgte=Extensi\u00f3n siguiente

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,406 @@
+1:=
+Abrir_Geoproceso=Abrir Geoproceso
+Agregacion=Agregación
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+Analisis=Análisis
+Analisis_Desc=
+Areas_de_influencia._Introduccion_de_datos=Áreas de influencia. Introducción de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Block_Size_=Tamaño de bloque:
+Bold=Negrita
+Clean=
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Conversion_de_datos=Conversión de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyección, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducción de datos
+DBManager=Gestor de Base de datos
+Disolver._Introduccion_de_datos=Disolver. Introducción de datos
+Edition=Edición
+Edition_Properties=Propiedades de Edición
+Ejecutando comando: =Execute command:
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducción de datos
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Flatness=
+Formato_de_numero_erroneo=Formato de número incorrecto
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw:
+Geoprocesos=Geoprocesos
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+Grid=Rejilla
+Icon_not_found_=No se encontró el icono
+Implimir=
+Interleave_=Entrelazado:
+Interseccion._Introduccion_de_datos=Intersección. Introducción de datos
+Italic=Cursiva
+Juntar._Introduccion_de_datos=Juntar. Introducción de datos
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+Launcher.look_and_feel=No se pudo poner el 'look and feel'
+LayerName=Nombre de la capa
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operación
+Num_intervalos=Número de intervalos
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva información basándose en la superposición de dos capas.
+Photometric_=Fotométrica:
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Preferencias=Preferencias
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+Recortar._Introduccion_de_datos=Recortar. Introducción de datos
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=Capa seleccionada
+Show Errors=
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+Union._Introduccion_de_datos=Unión. Introducción de datos
+WFSLayer=Capa WFS
+Zoom_sgte=Extensión siguiente
+accept_tip=Procesa los GCP's y salva la georreferenciación. Da por terminada la introducción de GCP's.
+add_delete_edit_fields=Puede añadir, borrar o renombrar los campos
+add_rows=Añadir filas
+agrupacion=Agrupación
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensión de la imagen a georreferenciar
+anadir_tag=Añadir etiqueta
+arc=Arco
+arcims_load=Carga de ArcIms
+area=Área
+attributeName=Nombre
+attributeType=Tipo
+box=Cajetín
+break=
+button.resolution.calculate=Calcula resolución
+cajetin=Cajetín
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el más alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el más ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tamaño de los elementos seleccionados hasta coincidir con el más grande.
+cancel_tip=Cierra el dialogo deshaciendo los últimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edición
+cant_reproject_from_any_of=No se puede reproyectar desde ningún
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+centimeters=Centímetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detrás
+change_height=Cambiar altura
+coincidir_tamanyo=Coincidir tamaño
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se está intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se está intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se está intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+contiene_espacios_en_blanco=Contiene espacios en blanco
+could_not_find_web_map_context_file=
+cuadro_no_asociado=El cuadro de georreferenciación no está asociado a ninguna capa sobre la vista, este se cerrará. Por favor, abra el diálogo asociado a la capa que necesite.
+database_connection=Conexión a Base de Datos
+datum=Datum
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deberá introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deberá introducir nombres nuevos para los mapas
+default_projection=Proyección por defecto
+default_value=Valor por defecto
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa después del primer punto.
+desactivar_puntos=Desactiva capa de puntos después del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaciÃ³n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desea_borrar_el_documento=¿Está seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=¿Está seguro de que desea borrar las capas activas?
+desea_continuar=¿Desea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar sólo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+editable=Editable
+edition_properties=Propiedades de Edición
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+en=
+en_unidades=en unidades
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+errores_csv=Incluir los errores en fichero CSV.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+exportJOP2Title=
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, ¿desea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, ¿desea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisión decimal
+field_default_value=Valor por defecto
+field_length=Tamaño
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+georef_file=Fichero de georreferenciación
+georeferenciado=Georeferenciado
+gml=GML
+gml_files=Ficheros gml
+group_graphic_line=Agrupar línea gráfica
+grupo=grupo
+horizontal_space=Espacio horizontal
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>¡ATENCIÓN!</b><br>Versión en desarrollo. Puede contener errores importantes e incluso provocar daños en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la última versión estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometría [E]
+insert_selection_last_point=Insertar esquina opuesta del rectángulo de selección
+insert_selection_point=Insertar punto de selección
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=¿Desea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+internal_polygon=Polígono interno
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_priority_value=Valor de prioridad inválido
+invalid_value_for_gap=
+invert_selection=Invertir selección
+layerType=Tipo de geometría
+length_of_field=Longitud de campo
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.
+No puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.
+No puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al máximo 
+ numero de Features permitido. Puede aumentar el número de 
+Features recuperadas modificando el parámetro "Buffer"
+max_features=Máx. features
+max_length_is=La longitud máxima es
+minimum_size_of_line_incorrect=La longitud mínima de línea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala numérica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+nearest_point=Punto más cercano
+new_field_properties=Propiedades del campo nuevo
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegará ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegarán las vistas con conflicto
+nombre_no_valido=Nombre no válido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+offline=Desconectado
+online=Conectado
+operacion_cancelada=Operación cancelada
+options.configuration.screen=Configuración de pantalla
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posición de las ventanas.
+options.general.remember_windows_size=Recordar el tamaño de las ventanas.
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar márgenes
+pixel_point=
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+postgis=PostGIS
+precision=Precisión
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+problems_encountered_while_importing=Se encontraron problemas al importar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+propiedad=Propiedad
+ps=
+puerto=Puerto
+realces=Realces
+realmente_desea_guardar_la_capa=¿Desea guardar la capa
+recargar=Recargar
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometría
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate_=ROTAR
+rotation_field=Campo de rotación
+script_sep=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selección compleja
+seleccionar_por_poligono=Seleccionar por polígono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenará el ángulo con el que se mostrará el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el color con el que se mostrará la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará la fuente con el que se mostrará de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el alto con el que se mostrará la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometría
+select_geometry_to_extend=Seleccionar geometría a extender
+select_other_geometry_or_end=Seleccione otra geometría o finalizar[E]
+selected_layer=Capa seleccionada
+selection=Seleccionar
+selection_up=Mover arriba la selección
+separator=Separador
+show_this_dialog_next_startup=Mostrar este diálogo la próxima vez
+shp=SHP
+si=sí
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tamaño mínimo de las líneas que formarán las curvas.
+stretch_=ESTIRAR
+suprimir_objetos_origen=¿Suprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETRÍA
+tamPixX=Tamaño pixel X
+tamPixY=Tamaño pixel Y
+tamanyo_pagina=Tamaño de página
+terminar=Terminar
+terminar_edicion=Terminar edición
+test_measure=Medida de prueba
+text_preview_text=
+texto=Texto
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podrá exportar los datos editados, pero no podrá guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+unsupported_crs=CRS no soportado
+url=url
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning_title=
+warnings=Avisos
+wfs_server_error=
+will_be_truncated=será truncado
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom más
+zoom_out_factor=Factor zoom menos
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties	(revision 42196)
@@ -0,0 +1,402 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Abrir_Geoproceso=Open Geoprocess
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+Analisis=Analisis
+Analisis_Desc=
+arc=Arc
+arcims_load=Loading ArcIms
+area=Area
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+attributeName=Name
+attributeType=Type
+Block_Size_=Block Size\:
+Bold=Bold
+box=box
+break=Break
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+Clean=
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compression\:
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+contiene_espacios_en_blanco=It has white space
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+could_not_find_web_map_context_file=
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de\ =of 
+de\ 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+Disolver._Introduccion_de_datos=Dissolve. Data input
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+editable=Editable
+Edition=Edition
+edition_properties=Edition Properties
+Edition_Properties=Edition Properties
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+en=
+en_unidades=in units
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+errores_csv=Include the errors in the CSV file.
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportJOP2Title=
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw\:
+Geoprocesos=Geoprocesses
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+Grid=Grid
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+Icon_not_found_=Icon not found
+imagen_no_accesible=Unable to access the image
+Implimir=
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+Interseccion._Introduccion_de_datos=Intersect. Data input
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+Italic=Italic
+Juntar._Introduccion_de_datos=Merge. Data input
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+Launcher.look_and_feel=Cannot set system 'look and feel'
+LayerName=Layer name
+layerType=Geometry type
+length_of_field=Length of field
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+max_features=Max. features
+max_length_is=Max length is
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+nearest_point=Nearest point
+new_field_properties=New field properties
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=Disconnected
+online=Connected
+operacion_cancelada=Cancelled operation
+options.configuration.screen=
+options.firewall.http.port=HTTP proxy port
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pixel_point=
+please_insert_new_field_name=Please insert new field name.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+postgis=PostGIS
+precision=Precision
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+Preferencias=Preferences
+problems_encountered_while_importing=Problems encountered while importing
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+propiedad=Oroperty
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+ps=
+puerto=Port
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+Recortar._Introduccion_de_datos=Clip. Data input
+Recursos\ Disponibles=Available Resources
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate_=ROTATE
+rotation_field=Rotation field
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+Selected=Selected
+selected_layer=Selected layer
+selection=Selection
+selection_up=Move selection to top
+separator=Separator
+Show\ Errors=
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+text_preview_text=
+texto=Text
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+Unable_to_find_icon=Unable to find icon
+Union._Introduccion_de_datos=Union. Data input
+unsupported_crs=Unsupported CRS
+url=url
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning_title=
+warnings=Warnings
+wfs_server_error=
+WFSLayer=WFS Layer
+will_be_truncated=
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
+Zoom_sgte=Next zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties	(revision 42196)
@@ -0,0 +1,402 @@
+#Translations for language [ca]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Abrir_Geoproceso=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+Agregacion=
+Agregacion_Desc=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+Analisis=
+Analisis_Desc=
+arc=
+arcims_load=
+area=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+attributeName=
+attributeType=
+Block_Size_=
+Bold=
+box=
+break=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_reproject_from_any_of=
+capas_edition_cache=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+Clean=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+contiene_espacios_en_blanco=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+could_not_find_web_map_context_file=
+cuadro_no_asociado=
+database_connection=
+datum=
+DBManager=
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Disolver._Introduccion_de_datos=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+editable=
+Edition=
+edition_properties=
+Edition_Properties=
+Ejecutando\ comando\:\ =
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+en=
+en_unidades=
+Enlace_espacial._Introduccion_de_datos=
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+errores_csv=
+errorMessageJComboBoxItemsSeekerConfigurable=
+escala_desconocida=
+exploit_=
+export_to=
+export_to_map_context=
+exportJOP2Title=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filter=
+filterOnAWFSLayer=
+final_point=
+Flatness=
+Formato_de_numero_erroneo=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+georef_file=
+georeferenciado=
+Gestor_de_Geoprocesos=
+gml=
+gml_files=
+Grid=
+group_graphic_line=
+grupo=
+horizontal_space=
+Icon_not_found_=
+imagen_no_accesible=
+Implimir=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+Interleave_=
+internal_polygon=
+Interseccion._Introduccion_de_datos=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+Juntar._Introduccion_de_datos=
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.look_and_feel=
+LayerName=
+layerType=
+length_of_field=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+max_features=
+max_length_is=
+maxFeatures_aviso=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+nearest_point=
+new_field_properties=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+Num_intervalos=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=
+online=
+operacion_cancelada=
+options.configuration.screen=
+options.firewall.http.port=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+Overlay=
+Overlay_Desc=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+Photometric_=
+pixel_point=
+please_insert_new_field_name=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+postgis=
+precision=
+pref.network.firewall=
+preferencias=
+Preferencias=
+problems_encountered_while_importing=
+process_tip=
+Progressive_=
+propiedad=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+ps=
+puerto=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+Recortar._Introduccion_de_datos=
+Recursos\ Disponibles=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotate_=
+rotation_field=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+Selected=
+selected_layer=
+selection=
+selection_up=
+separator=
+Show\ Errors=
+show_this_dialog_next_startup=
+shp=
+si=
+simplificar_leyenda=
+simplify=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+stretch_=
+suprimir_objetos_origen=
+symmetry_=
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+test_measure=
+text_preview_text=
+texto=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+Unable_to_find_icon=
+Union._Introduccion_de_datos=
+unsupported_crs=
+url=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning_title=
+warnings=
+wfs_server_error=
+WFSLayer=
+will_be_truncated=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=
+Zoom_sgte=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,406 @@
+1:=
+Abrir_Geoproceso=Open Geoprocess
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+Analisis=Analisis
+Analisis_Desc=
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Block_Size_=Block Size:
+Bold=Bold
+Clean=
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+DBManager=DataBase Manager
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando comando: =Execute command:
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw:
+Geoprocesos=Geoprocesses
+Gestor_de_Geoprocesos=Geoprocess toolbox
+Grid=Grid
+Icon_not_found_=Icon not found
+Implimir=
+Interleave_=Interleave:
+Interseccion._Introduccion_de_datos=Intersect. Data input
+Italic=Italic
+Juntar._Introduccion_de_datos=Merge. Data input
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+Launcher.look_and_feel=Cannot set system 'look and feel'
+LayerName=Layer name
+MaxFeaturesEditionCache=Max features edition cache
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+Num_intervalos=Number of Intervals
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+Photometric_=Photometric:
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Preferencias=Preferences
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+Recortar._Introduccion_de_datos=Clip. Data input
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=Selected
+Show Errors=
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+Union._Introduccion_de_datos=Union. Data input
+WFSLayer=WFS Layer
+Zoom_sgte=Next zoom
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+arc=Arc
+arcims_load=Loading ArcIms
+area=Area
+attributeName=Name
+attributeType=Type
+box=box
+break=Break
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+contiene_espacios_en_blanco=It has white space
+could_not_find_web_map_context_file=
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+database_connection=Database Connection
+datum=Datum
+de =of 
+de 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desea_borrar_el_documento=¿Do you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=¿Do you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+editable=Editable
+edition_properties=Edition Properties
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+en=
+en_unidades=in units
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+errores_csv=Include the errors in the CSV file.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+exportJOP2Title=
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+gml=GML
+gml_files=GML Files
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+imagen_no_accesible=Unable to access the image
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+internal_polygon=Internal polygon
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+layerType=Geometry type
+length_of_field=Length of field
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.
+It cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.
+It cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase 
+the amount of Features recovered by modifying the 
+"Buffer" parameter.
+max_features=Max. features
+max_length_is=Max length is
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+nearest_point=Nearest point
+new_field_properties=New field properties
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=Disconnected
+online=Connected
+operacion_cancelada=Cancelled operation
+options.configuration.screen=
+options.firewall.http.port=HTTP proxy port
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+pixel_point=
+please_insert_new_field_name=Please insert new field name.
+postgis=PostGIS
+precision=Precision
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+problems_encountered_while_importing=Problems encountered while importing
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+propiedad=Oroperty
+ps=
+puerto=Port
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate_=ROTATE
+rotation_field=Rotation field
+script_sep=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the labels text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+selected_layer=Selected layer
+selection=Selection
+selection_up=Move selection to top
+separator=Separator
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tamanyo_pagina=Page size
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+text_preview_text=
+texto=Text
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+unsupported_crs=Unsupported CRS
+url=url
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning_title=
+warnings=Warnings
+wfs_server_error=
+will_be_truncated=
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties	(revision 42196)
@@ -0,0 +1,729 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+a_new_view=Vista nueva
+Abrir_Geoproceso=Abrir Geoproceso
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_field=A\u00f1adir campo
+add_rows=A\u00f1adir filas
+add_vertex=A\u00f1adir v\u00e9rtice
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+ajustar_rejilla=Ajustar rejilla
+algoritmo=Algoritmo
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+anadir_tag=A\u00f1adir etiqueta
+Analisis=An\u00e1lisis
+Analisis_Desc=
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=\u00c1rea
+Area_de_influencia_definida_por_un_campo=\u00c1rea de influencia definida por un campo
+Area_de_influencia_definida_por_una_distancia=\u00c1rea de influencia definida por una distancia
+Areas_de_influencia._Introduccion_de_datos=\u00c1reas de influencia. Introducci\u00f3n de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Atributos_Numericos=Atributos num\u00e9ricos
+attributeName=Nombre
+attributeType=Tipo
+Block_Size_=Tama\u00f1o de bloque\:
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+box=Cajet\u00edn
+break=
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+Campo_para_disolver=Campo para disolver
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edici\u00f3n
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+Capas_del_directorio=Capas del directorio
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Cent\u00edmetros
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=C\u00edrculo
+circle_=C\u00cdRCULO
+circumscribed=Circunscrito
+city=Ciudad
+Clean=
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de salida
+Coberturas_de_entrada=Capas de entrada
+coincidir_tamanyo=Coincidir tama\u00f1o
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+complex_selection=Selecci\u00f3n compleja
+complex_selection_=SELECCI\u00d3N COMPLEJA
+Compression_=Compresi\u00f3n\:
+configurar_todas_las_extensiones=Configurar todas las extensiones
+confirmacion=Confirmaci\u00f3n
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+contact_info=Informaci\u00f3n de contacto
+contiene_espacios_en_blanco=Contiene espacios en blanco
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducci\u00f3n de datos
+coordenadas_vacias=Coordenadas vac\u00edas
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=Pa\u00eds
+coverage=Cobertura
+Crear_Buffer=Crear \u00e1rea de influencia
+Crear_Indice_Pregunta_1=\u00bfDesea crear un \u00edndice espacial para la capa?
+created_with=Creado con
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/Contiene el pol\u00edgono
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexi\u00f3n a Base de Datos
+datum=Datum
+DBManager=Gestor de Base de datos
+de\ =
+de\ 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener informaci\u00f3n.
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+define_fields=Define los campos
+define_point=Defina el punto
+defined_by_view_extent=Usar extensi\u00f3n de la vista
+dehacer=Deshacer
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+Dentro_y_fuera=Dentro y fuera del pol\u00edgono
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripci\u00f3n
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+Diferencia_Introduccion_de_datos=Diferencia. Introducci\u00f3n de datos
+disagregate_layers=Conservar estructura de capas
+Disolver._Introduccion_de_datos=Disolver. Introducci\u00f3n de datos
+Disolver_entidades=Disolver entidades
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar s\u00f3lo el texto
+dxf=dxf
+edicion=Edici\u00f3n
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar v\u00e9rtice
+edit_vertex_=EDITAR V\u00c9RTICE
+editar_vertices=Editar V\u00e9rtices
+Edition=Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=El elemento ya existe
+Elija_una_herramienta_de_analisis=Elija una herramienta de an\u00e1lisis
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+end=Terminar
+end_polygon=Finalizar pol\u00edgono
+endinfo=Estadisticas de finalizaci\u00f3n
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducci\u00f3n de datos
+enter_layer_name=Introducir nombre de la capa
+enter_path_to_file=Introducir la ruta del fichero
+Error_atributo_no_numerico=Atributo para distancia de buffer no num\u00e9rico
+error_capa_puntos=Error al cargar la capa. Puede que la capa de Georreferenciaci\u00f3n no est\u00e9 activa.
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_chequeando_precondiciones=Error verificando precondiciones
+Error_chequeo_tipo_geometria=Error al chequear el tipo de geometria
+Error_distancia_buffer=Debes introducir una distancia de buffer
+Error_ejecucion=Error de ejecuci\u00f3n
+Error_entrada_datos=Error de entrada de datos
+Error_escritura_resultados=Error de escritura de resultados
+Error_exportando_SLD=Error exportando SLD
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecuci\u00f3n del geoproceso
+error_file_exists=El fichero ya existe.\u00bfDesea sobreescribirlo?.
+error_file_not_writable=No es posible crear el fichero de salida.
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Error_spjoinmn_sin_funcion=No has seleccionado ninguna funci\u00f3n resumen para los atributos num\u00e9ricos
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+escala_desconocida=Escala desconocida
+Escoger_Fun_Resumen=<-
+exploit=Explotar
+exploit_=EXPLOTAR
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exporting_=Exportando
+exportJOP2Title=
+extend=Alargar
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+Ficheros_de_cartografia=Ficheros de datos cartogr\u00e1ficos
+Ficheros_SHP=Ficheros SHP
+field=Campo
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file=Archivo
+file_name=Archivo
+file_version=Versi\u00f3n del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+fit_WMS_layer=Ajustar capa WMS
+Flatness=
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_de_numero_incorrecto=Formato de n\u00famero incorrecto.
+Fuera=Fuera del pol\u00edgono
+fuera_de_extent=El punto seleccionado est\u00e1 fuera del extent de la imagen
+Funciones_Sumarizacion=Funciones de agrupamiento
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw\:
+Geoprocesos=Geoprocesos
+georaster=Georreferenciaci\u00f3n
+georef=Georreferenciar
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+georreferenciar=Georreferenciar
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+grado_polinomio=Grado del polinomio
+Grid=Rejilla
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+guardar=Guardar
+height=Alto
+Herramientas_de_analisis=Herramientas de an\u00e1lisis
+horizontal_space=Espacio horizontal
+html_in_other_view=<HTML>A\u00f1ade las capas en la vista que especifique de la lista siguiente\:</HTML>
+Icon_not_found_=No se encontr\u00f3 el icono
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+Implimir=
+import=Importar
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+inches=Pulgadas
+incorrect_option=Opci\u00f3n incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+Indexando_espacialmente=Indexando espacialmente la capa
+indexar_campos=Indexar campos
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o [3P]
+insert_central_point_polygon=Insertar punto central del pol\u00edgono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar \u00faltimo punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point_arc_or_close=Insertar siguiente punto, Arco[A] o Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_line_or_close=Insertar punto siguiente, Linea[N], Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar pol\u00edgono de selecci\u00f3n[E]
+insert_number_sides=Insertar n\u00famero de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner_or_square=Insertar punto de esquina opuesta o Cuadrado[C]
+insert_point_move=Insertar punto de desplazamiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_point_selection=Precise punto de selecci\u00f3n
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius_or_second_point=Insertar r\u00e1dio o segundo punto
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Precise \u00e1ngulo de rotaci\u00f3n
+insert_row=Insertar fila
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o \u00e1ngulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insert_third_point=Insertar tercer punto
+insertar_cajetin=Insertar cajet\u00edn
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+insertar_polilinea=Insertar polil\u00ednea
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del pol\u00edgono
+inter_arc=Arco interno
+inter_line=L\u00ednea interna
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+internal_polygon_=Pol\u00edgono interno
+Interseccion=Intersecci\u00f3n
+Interseccion._Introduccion_de_datos=Intersecci\u00f3n. Introducci\u00f3n de datos
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito en el c\u00edrculo[I] o Circunscrito[C]<C>
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+join_=UNIR
+Juntar=Juntar
+Juntar._Introduccion_de_datos=Juntar. Introducci\u00f3n de datos
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+layerName=Nombre de la capa
+LayerName=Nombre de la capa
+layers_in_other_view=Capas en la vista que yo elija
+layers_in_the_current_view=Capas en la vista actual
+layerType=Tipo de geometr\u00eda
+length=Tama\u00f1o
+length_of_field=Longitud de campo
+line=L\u00ednea
+line_=L\u00cdNEA
+line_type=Tipo l\u00ednea
+load_from_xml=Cargar desde fichero XML (.rmf)
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+Maximo=M\u00e1ximo
+Media=Media
+Mensaje_buffer=Calculando \u00e1reas de influencia...
+Mensaje_clip=Geoproceso recortar...
+Mensaje_convexhull=Geoproceso convex hull...
+Mensaje_difference=Geoproceso diferencia...
+Mensaje_dissolve=Geoproceso dissolve....
+Mensaje_enlace_espacial=Geoproceso enlace espacial...
+Mensaje_interseccion=Geoproceso intersecci\u00f3n...
+Mensaje_juntar=Geoproceso juntar...
+Mensaje_primera_pasada_union=Calculando intersecciones...
+Mensaje_procesando_buffer=Generando buffers...
+Mensaje_procesando_buffer2=Disolviendo buffers...
+Mensaje_procesando_clip_primero=Calculando pol\u00edgono de recorte
+Mensaje_procesando_clip_segundo=Recortando geometrias
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_dissolves=Dissolviendo geometrias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_procesando_interseccion=Calculando intersecciones...
+Mensaje_procesando_juntar=Juntando geometrias...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+Mensaje_union=Geoproceso union...
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+Minimo=M\u00ednimo
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_rejilla=Mostrar rejilla
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+Mover_geo=Mover imagen a georreferenciar
+msg_save_raster=Se va a cancelar la operaci\u00f3n. \u00bfDesea continuar?
+multi_type=Tipo m\u00faltiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto m\u00e1s cercano
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+new_layer=Nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next_point_or_end=Siguiente punto o finalizar[E]
+next_previous_add_del_cancel=Punto, Siguiente v\u00e9rtice[S], Anterior[A], A\u00f1adir[I] o Eliminar[E]
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quiz\u00e1 olvid\u00f3 inicializar la clase.
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+No_usar_buffer_redondeado=No usar borde redondeado
+nombre_no_valido=Nombre no v\u00e1lido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_columnas=N\u00famero de columnas
+num_filas=N\u00famero de filas
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+Numero_anillos_concentricos=N\u00famero de anillos conc\u00e9ntricos
+Numero_de_elementos_seleccionados=N\u00famero de elementos seleccionados
+numero_decimales_mostrar=N\u00famero decimales
+numero_incorrecto=N\u00famero incorrecto
+Obtener_mas_proximo=Usar el mas pr\u00f3ximo
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operaci\u00f3n cancelada
+Operacion_de_overlay=Operaciones de solape
+optinos.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contrase\u00f1a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del pol\u00edgono
+out_rectangle=Fuera del rect\u00e1ngulo
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pila_de_comandos=Pila de comandos
+pixel_point=
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+poligono=Pol\u00edgono
+polilinea=polil\u00ednea
+polygon=Pol\u00edgono
+polygon_=POL\u00cdGONO
+polygon_type=Tipo Pol\u00edgono
+polyline=Polil\u00ednea
+polyline_=POLIL\u00cdNEA
+poner_capas_a=Poner capas a ...
+Por_favor_active_la_capa=Por favor active la capa
+postcode=C\u00f3digo postal
+postgis=PostGIS
+precision=Precisi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferencias
+preferencias=Preferencias
+Preferencias=Preferencias
+previous=Anterior
+previsualizacion=Previsualizaci\u00f3n
+primero=Primero
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+propiedades_cajetin=Propiedades del cajet\u00edn
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+props=Propiedades
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+ps=
+puntos=Puntos
+realces=Realces
+realmente_desea_guardar=\u00bfRealmente desea guardar?
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+Recortar._Introduccion_de_datos=Recortar. Introducci\u00f3n de datos
+rectangle=Rect\u00e1ngulo
+rectangle_=RECT\u00c1NGULO
+Recursos\ Disponibles=Recursos Disponibles
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+reference_system=Sistema de Referencia
+rehacer=Rehacer
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+resolution=Resoluci\u00f3n
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotaci\u00f3n
+save_to_ascii=Exportar tabla de puntos a fichero de texto.
+save_to_xml=Salvar a fichero XML (.grf)
+scale_=ESCALAR
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+Seleccion_por_capa=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+Seleccionar_Directorio=Carpeta con capas...
+seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_driver=Seleccione el driver
+select_from_point=Seleccionar a partir de un punto
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_geometry_type=Seleccione el tipo de geometr\u00eda
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+Selected=Capa seleccionada
+selected_layer=Capa seleccionada
+selected_parameters=Par\u00e1metros seleccionados
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_=SELECCIONAR
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+settings=Ajustes
+Show\ Errors=
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+si=s\u00ed
+siempre=Siempre
+simbolo=S\u00edmbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+size=Tama\u00f1o
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+Solo_disolver_adyacentes=S\u00f3lo disolver adyacentes.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+square=Esquina
+start_edition=Comenzar edici\u00f3n
+state_or_province=Estado/Provincia
+stop_edition=Terminar edici\u00f3n
+stretch=Estirar
+stretch_=ESTIRAR
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symmetry=Simetr\u00eda
+symmetry_=SIMETR\u00cdA
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+Terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+time=Tiempo
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Topology=
+total=Total
+transparencia_pixel=Transparencia por pixel
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+ultimo=\u00daltimo
+Unable_to_find_icon=No se pudo encontrar el icono
+undo=Deshacer
+Union._Introduccion_de_datos=Uni\u00f3n. Introducci\u00f3n de datos
+unknown_response_format=Formato de respuesta desconocido
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versi\u00f3n de Web Map Context no soportada
+url=url
+Usar_los_campos_de_la_capa=Usar los campos de la capa
+Usar_solamente_los_elementos_seleccionados=Usar solamente los elementos seleccionados
+use_custom_size=Tama\u00f1o personalizado
+use_full_extent=Usar extensi\u00f3n total
+use_interpolation_method=Usar metodo de interpolaci\u00f3n
+use_view_size=Tama\u00f1o de la vista
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+WFSLayer=Capa WFS
+will_be_truncated=ser\u00e1 truncado
+y_en=y en
+yes=Si
+zone=Huso
+Zoom_a_la_capa=Zoom a la capa
+zoom_in_factor=Factor zoom m\u00e1s
+zoom_out_factor=Factor zoom menos
+Zoom_previo=Extensi\u00f3n anterior
+Zoom_sgte=Extensi\u00f3n siguiente

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties-UTF8	(revision 42196)
@@ -0,0 +1,727 @@
+1:=
+Abrir_Geoproceso=
+Agregacion=
+Agregacion_Desc=
+Analisis=
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+Atributos_Numericos=
+Block_Size_=
+Campo_para_disolver=
+Capas_del_directorio=
+Centrar_la_Vista_sobre_un_punto=
+Clean=
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Coberturas_de_entrada=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+Crear_Buffer=
+Crear_Indice_Pregunta_1=
+DBManager=
+Dentro_y_fuera=
+Diferencia_Introduccion_de_datos=
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+Edition=
+Edition_Properties=
+Ejecutando comando: =
+Elija_una_herramienta_de_analisis=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+Error_atributo_no_numerico=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+Error_guardando_la_plantilla=
+Error_preparar_escritura_resultados=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+Escoger_Fun_Resumen=
+Ficheros_SHP=
+Ficheros_de_cartografia=
+Flatness=
+Formato_de_numero_erroneo=
+Fuera=
+Funciones_Sumarizacion=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+Gestor_de_Geoprocesos=
+Grid=
+Herramientas_de_analisis=
+Icon_not_found_=
+Implimir=
+Indexando_espacialmente=
+Interleave_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+Juntar=
+Juntar._Introduccion_de_datos=
+Las_traducciones_no_pudieron_ser_cargadas=
+Launcher.error_getting_class_loader_for_status_bar_control=
+LayerName=
+MaxFeaturesEditionCache=
+Maximo=
+Media=
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages.no_se_encontro_la_traduccion_para=
+Minimo=
+Mover_geo=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_usar_buffer_redondeado=
+Num_intervalos=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+Obtener_mas_proximo=
+Operacion_de_overlay=
+Overlay=
+Overlay_Desc=
+Photometric_=
+Plain=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=
+Preferences=
+Preferencias=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+Recortar._Introduccion_de_datos=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=
+Seleccionar_Directorio=
+Selected=
+Show Errors=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Solo_disolver_adyacentes=
+Terminar=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+Union._Introduccion_de_datos=
+Usar_los_campos_de_la_capa=
+Usar_solamente_los_elementos_seleccionados=
+WFSLayer=
+Zoom_a_la_capa=
+Zoom_previo=
+Zoom_sgte=
+a_new_view=
+accept_tip=
+add_delete_edit_fields=
+add_field=
+add_rows=
+add_vertex=
+advanced=
+advanced_settings=
+agrupacion=
+ajustar_rejilla=
+algoritmo=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+attributeName=
+attributeType=
+borrar_todos=
+borrar_uno=
+box=
+break=
+brillo_y_contraste=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_reproject_from_any_of=
+capas_edition_cache=
+cargar=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+circle_=
+circumscribed=
+city=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+complex_selection=
+complex_selection_=
+configurar_todas_las_extensiones=
+confirmacion=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+contact_info=
+contiene_espacios_en_blanco=
+coordenadas_vacias=
+copiar=
+copy=
+copy_=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+created_with=
+cross_circle=
+cross_polygon=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+de =
+de 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+disagregate_layers=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edicion=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+edit_vertex_=
+editar_vertices=
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+end=
+end_polygon=
+endinfo=
+enter_layer_name=
+enter_path_to_file=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_capa_puntos=
+error_file_exists=
+error_file_not_writable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+error_writting_file=
+errores_csv=
+escala_desconocida=
+exploit=
+exploit_=
+exportJOP2Title=
+export_to=
+export_to_map_context=
+exportando_features=
+exporting_=
+extend=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file=
+file_name=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+fit_WMS_layer=
+formato_de_numero_incorrecto=
+fuera_de_extent=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+gml=
+gml_files=
+grado_polinomio=
+group_graphic_line=
+grupo=
+guardar=
+height=
+horizontal_space=
+html_in_other_view=
+imagen_no_accesible=
+import=
+import_from_ascii=
+import_map_context=
+inches=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_cajetin=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+insertar_polilinea=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+internal_polygon=
+internal_polygon_=
+into_circle=
+into_circle_or_circumscribed=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+layerName=
+layerType=
+layers_in_other_view=
+layers_in_the_current_view=
+length=
+length_of_field=
+line=
+line_=
+line_type=
+load_from_xml=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+maxFeatures_aviso=
+max_features=
+max_length_is=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move=
+move_=
+move_elements=
+move_handlers=
+msg_save_raster=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+nearest_point=
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_field_properties=
+new_layer=
+new_postgis=
+new_shp=
+next_point_or_end=
+next_previous_add_del_cancel=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_columnas=
+num_filas=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+out_circle=
+out_polygon=
+out_rectangle=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+pila_de_comandos=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+point=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+previous=
+previsualizacion=
+primero=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+projection=
+propiedad=
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=
+props=
+ps=
+puntos=
+realces=
+realmente_desea_guardar=
+realmente_desea_guardar_la_capa=
+recargar=
+rectangle=
+rectangle_=
+redo=
+redo_error=
+reference=
+reference_system=
+rehacer=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_row=
+remove_rows=
+rename_field=
+resolution=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+save_to_ascii=
+save_to_xml=
+scale_=
+script_sep=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+seleccionar_fichero=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_driver=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+selected_layer=
+selected_parameters=
+selectfromview=
+selection=
+selection_=
+selection_up=
+separator=
+settings=
+show_this_dialog_next_startup=
+shp=
+si=
+siempre=
+simbolo=
+simplificar_leyenda=
+simplify=
+size=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+state_or_province=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+tamPixX=
+tamPixY=
+tamanyo_pagina=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+time=
+to_annotation=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+total=
+transparencia_pixel=
+two_or_more_fields_with_the_same_name=
+ultimo=
+undo=
+unknown_response_format=
+unsupported_crs=
+unsupported_map_context_version=
+url=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+will_be_truncated=
+y_en=
+yes=
+zone=
+zoom_in_factor=
+zoom_out_factor=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,733 @@
+1:=
+Abrir_Geoproceso=Abrir Geoproceso
+Agregacion=Agregación
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+Analisis=Análisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Área de influencia definida por un campo
+Area_de_influencia_definida_por_una_distancia=Área de influencia definida por una distancia
+Areas_de_influencia._Introduccion_de_datos=Áreas de influencia. Introducción de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Atributos_Numericos=Atributos numéricos
+Block_Size_=Tamaño de bloque:
+Campo_para_disolver=Campo para disolver
+Capas_del_directorio=Capas del directorio
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+Clean=
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de salida
+Coberturas_de_entrada=Capas de entrada
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Conversion_de_datos=Conversión de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyección, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducción de datos
+Crear_Buffer=Crear área de influencia
+Crear_Indice_Pregunta_1=¿Desea crear un índice espacial para la capa?
+DBManager=Gestor de Base de datos
+Dentro_y_fuera=Dentro y fuera del polígono
+Diferencia_Introduccion_de_datos=Diferencia. Introducción de datos
+Disolver._Introduccion_de_datos=Disolver. Introducción de datos
+Disolver_entidades=Disolver entidades
+Edition=Edición
+Edition_Properties=Propiedades de Edición
+Ejecutando comando: =Execute command:
+Elija_una_herramienta_de_analisis=Elija una herramienta de análisis
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducción de datos
+Error_atributo_no_numerico=Atributo para distancia de buffer no numérico
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_chequeando_precondiciones=Error verificando precondiciones
+Error_chequeo_tipo_geometria=Error al chequear el tipo de geometria
+Error_distancia_buffer=Debes introducir una distancia de buffer
+Error_ejecucion=Error de ejecución
+Error_entrada_datos=Error de entrada de datos
+Error_escritura_resultados=Error de escritura de resultados
+Error_exportando_SLD=Error exportando SLD
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecución del geoproceso
+Error_guardando_la_plantilla=Error guardando la plantilla
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Error_spjoinmn_sin_funcion=No has seleccionado ninguna función resumen para los atributos numéricos
+Escoger_Fun_Resumen=<-
+Ficheros_SHP=Ficheros SHP
+Ficheros_de_cartografia=Ficheros de datos cartográficos
+Flatness=
+Formato_de_numero_erroneo=Formato de número incorrecto
+Fuera=Fuera del polígono
+Funciones_Sumarizacion=Funciones de agrupamiento
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw:
+Geoprocesos=Geoprocesos
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+Grid=Rejilla
+Herramientas_de_analisis=Herramientas de análisis
+Icon_not_found_=No se encontró el icono
+Implimir=
+Indexando_espacialmente=Indexando espacialmente la capa
+Interleave_=Entrelazado:
+Interseccion=Intersección
+Interseccion._Introduccion_de_datos=Intersección. Introducción de datos
+Juntar=Juntar
+Juntar._Introduccion_de_datos=Juntar. Introducción de datos
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+LayerName=Nombre de la capa
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+Maximo=Máximo
+Media=Media
+Mensaje_buffer=Calculando áreas de influencia...
+Mensaje_clip=Geoproceso recortar...
+Mensaje_convexhull=Geoproceso convex hull...
+Mensaje_difference=Geoproceso diferencia...
+Mensaje_dissolve=Geoproceso dissolve....
+Mensaje_enlace_espacial=Geoproceso enlace espacial...
+Mensaje_interseccion=Geoproceso intersección...
+Mensaje_juntar=Geoproceso juntar...
+Mensaje_primera_pasada_union=Calculando intersecciones...
+Mensaje_procesando_buffer=Generando buffers...
+Mensaje_procesando_buffer2=Disolviendo buffers...
+Mensaje_procesando_clip_primero=Calculando polígono de recorte
+Mensaje_procesando_clip_segundo=Recortando geometrias
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_dissolves=Dissolviendo geometrias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_procesando_interseccion=Calculando intersecciones...
+Mensaje_procesando_juntar=Juntando geometrias...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+Mensaje_union=Geoproceso union...
+Messages.no_se_encontro_la_traduccion_para=No se encontró la traducción para
+Minimo=Mínimo
+Mover_geo=Mover imagen a georreferenciar
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operación
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quizá olvidó inicializar la clase.
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+No_usar_buffer_redondeado=No usar borde redondeado
+Num_intervalos=Número de intervalos
+Numero_anillos_concentricos=Número de anillos concéntricos
+Numero_de_elementos_seleccionados=Número de elementos seleccionados
+Obtener_mas_proximo=Usar el mas próximo
+Operacion_de_overlay=Operaciones de solape
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva información basándose en la superposición de dos capas.
+Photometric_=Fotométrica:
+Plain=Normal
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=Por favor active la capa
+Preferences=Preferencias
+Preferencias=Preferencias
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+Recortar._Introduccion_de_datos=Recortar. Introducción de datos
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selección por capa
+Seleccionar_Directorio=Carpeta con capas...
+Selected=Capa seleccionada
+Show Errors=
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Solo_disolver_adyacentes=Sólo disolver adyacentes.
+Terminar=Terminar
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+Union._Introduccion_de_datos=Unión. Introducción de datos
+Usar_los_campos_de_la_capa=Usar los campos de la capa
+Usar_solamente_los_elementos_seleccionados=Usar solamente los elementos seleccionados
+WFSLayer=Capa WFS
+Zoom_a_la_capa=Zoom a la capa
+Zoom_previo=Extensión anterior
+Zoom_sgte=Extensión siguiente
+a_new_view=Vista nueva
+accept_tip=Procesa los GCP's y salva la georreferenciación. Da por terminada la introducción de GCP's.
+add_delete_edit_fields=Puede añadir, borrar o renombrar los campos
+add_field=Añadir campo
+add_rows=Añadir filas
+add_vertex=Añadir vértice
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+agrupacion=Agrupación
+ajustar_rejilla=Ajustar rejilla
+algoritmo=Algoritmo
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensión de la imagen a georreferenciar
+anadir_tag=Añadir etiqueta
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=Área
+attributeName=Nombre
+attributeType=Tipo
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+box=Cajetín
+break=
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+button.resolution.calculate=Calcula resolución
+cajetin=Cajetín
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el más alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el más ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tamaño de los elementos seleccionados hasta coincidir con el más grande.
+cancel_tip=Cierra el dialogo deshaciendo los últimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edición
+cant_reproject_from_any_of=No se puede reproyectar desde ningún
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Centímetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detrás
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=Círculo
+circle_=CÍRCULO
+circumscribed=Circunscrito
+city=Ciudad
+coincidir_tamanyo=Coincidir tamaño
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+complex_selection=Selección compleja
+complex_selection_=SELECCIÓN COMPLEJA
+configurar_todas_las_extensiones=Configurar todas las extensiones
+confirmacion=Confirmación
+conflicto_de_nombres_de_mapas_al_pegar=Se está intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se está intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se está intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+contact_info=Información de contacto
+contiene_espacios_en_blanco=Contiene espacios en blanco
+coordenadas_vacias=Coordenadas vacías
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=País
+coverage=Cobertura
+created_with=Creado con
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/Contiene el polígono
+cuadro_no_asociado=El cuadro de georreferenciación no está asociado a ninguna capa sobre la vista, este se cerrará. Por favor, abra el diálogo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexión a Base de Datos
+datum=Datum
+de =
+de 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener información.
+debera_introducir_nombres_para_las_vistas_a_pegar=Deberá introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deberá introducir nombres nuevos para los mapas
+default_projection=Proyección por defecto
+default_value=Valor por defecto
+define_fields=Define los campos
+define_point=Defina el punto
+defined_by_view_extent=Usar extensión de la vista
+dehacer=Deshacer
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa después del primer punto.
+desactivar_puntos=Desactiva capa de puntos después del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaciÃ³n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripción
+desea_borrar_el_documento=¿Está seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=¿Está seguro de que desea borrar las capas activas?
+desea_continuar=¿Desea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+disagregate_layers=Conservar estructura de capas
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar sólo el texto
+dxf=dxf
+edicion=Edición
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar vértice
+edit_vertex_=EDITAR VÉRTICE
+editar_vertices=Editar Vértices
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+end=Terminar
+end_polygon=Finalizar polígono
+endinfo=Estadisticas de finalización
+enter_layer_name=Introducir nombre de la capa
+enter_path_to_file=Introducir la ruta del fichero
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_capa_puntos=Error al cargar la capa. Puede que la capa de Georreferenciación no esté activa.
+error_file_exists=El fichero ya existe.¿Desea sobreescribirlo?.
+error_file_not_writable=No es posible crear el fichero de salida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+escala_desconocida=Escala desconocida
+exploit=Explotar
+exploit_=EXPLOTAR
+exportJOP2Title=
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exporting_=Exportando
+extend=Alargar
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, ¿desea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, ¿desea continuar?
+field=Campo
+field_already_exists=El campo ya existe
+field_decimal_count=Precisión decimal
+field_default_value=Valor por defecto
+field_length=Tamaño
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file=Archivo
+file_name=Archivo
+file_version=Versión del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+fit_WMS_layer=Ajustar capa WMS
+formato_de_numero_incorrecto=Formato de número incorrecto.
+fuera_de_extent=El punto seleccionado está fuera del extent de la imagen
+georaster=Georreferenciación
+georef=Georreferenciar
+georef_file=Fichero de georreferenciación
+georeferenciado=Georeferenciado
+georreferenciar=Georreferenciar
+gml=GML
+gml_files=Ficheros gml
+grado_polinomio=Grado del polinomio
+group_graphic_line=Agrupar línea gráfica
+grupo=grupo
+guardar=Guardar
+height=Alto
+horizontal_space=Espacio horizontal
+html_in_other_view=<HTML>Añade las capas en la vista que especifique de la lista siguiente:</HTML>
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+import=Importar
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+inches=Pulgadas
+incorrect_option=Opción incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>¡ATENCIÓN!</b><br>Versión en desarrollo. Puede contener errores importantes e incluso provocar daños en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la última versión estable.</html>
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o [3P]
+insert_central_point_polygon=Insertar punto central del polígono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar último punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point_arc_or_close=Insertar siguiente punto, Arco[A] o Cerrar polilínea[C] o Terminar[T]
+insert_next_point_line_or_close=Insertar punto siguiente, Linea[N], Cerrar polilínea[C] o Terminar[T]
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar polígono de selección[E]
+insert_number_sides=Insertar número de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner_or_square=Insertar punto de esquina opuesta o Cuadrado[C]
+insert_point_move=Insertar punto de desplazamiento
+insert_point_or_end=Insertar punto o finalizar geometría [E]
+insert_point_selection=Precise punto de selección
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Políg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius_or_second_point=Insertar rádio o segundo punto
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Precise ángulo de rotación
+insert_row=Insertar fila
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o ángulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rectángulo de selección
+insert_selection_last_point=Insertar esquina opuesta del rectángulo de selección
+insert_selection_point=Insertar punto de selección
+insert_third_point=Insertar tercer punto
+insertar_cajetin=Insertar cajetín
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=¿Desea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+insertar_polilinea=Insertar polilínea
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del polígono
+inter_arc=Arco interno
+inter_line=Línea interna
+internal_polygon=Polígono interno
+internal_polygon_=Polígono interno
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito en el círculo[I] o Circunscrito[C]<C>
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_priority_value=Valor de prioridad inválido
+invalid_value_for_gap=
+invert_selection=Invertir selección
+join_=UNIR
+layerName=Nombre de la capa
+layerType=Tipo de geometría
+layers_in_other_view=Capas en la vista que yo elija
+layers_in_the_current_view=Capas en la vista actual
+length=Tamaño
+length_of_field=Longitud de campo
+line=Línea
+line_=LÍNEA
+line_type=Tipo línea
+load_from_xml=Cargar desde fichero XML (.rmf)
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.
+No puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.
+No puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al máximo 
+ numero de Features permitido. Puede aumentar el número de 
+Features recuperadas modificando el parámetro "Buffer"
+max_features=Máx. features
+max_length_is=La longitud máxima es
+minimum_size_of_line_incorrect=La longitud mínima de línea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala numérica
+mostrar_rejilla=Mostrar rejilla
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+msg_save_raster=Se va a cancelar la operación. ¿Desea continuar?
+multi_type=Tipo múltiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto más cercano
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+new_layer=Nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next_point_or_end=Siguiente punto o finalizar[E]
+next_previous_add_del_cancel=Punto, Siguiente vértice[S], Anterior[A], Añadir[I] o Eliminar[E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegará ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegarán las vistas con conflicto
+nombre_no_valido=Nombre no válido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_columnas=Número de columnas
+num_filas=Número de filas
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+numero_incorrecto=Número incorrecto
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operación cancelada
+optinos.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.configuration.screen=Configuración de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contraseña
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posición de las ventanas.
+options.general.remember_windows_size=Recordar el tamaño de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.network.status=Estado de la conexión
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del polígono
+out_rectangle=Fuera del rectángulo
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar márgenes
+pila_de_comandos=Pila de comandos
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+poligono=Polígono
+polilinea=polilínea
+polygon=Polígono
+polygon_=POLÍGONO
+polygon_type=Tipo Polígono
+polyline=Polilínea
+polyline_=POLILÍNEA
+poner_capas_a=Poner capas a ...
+postcode=Código postal
+postgis=PostGIS
+precision=Precisión
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+previous=Anterior
+previsualizacion=Previsualización
+primero=Primero
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+projection=Proyección
+propiedad=Propiedad
+propiedades_cajetin=Propiedades del cajetín
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+props=Propiedades
+ps=
+puntos=Puntos
+realces=Realces
+realmente_desea_guardar=¿Realmente desea guardar?
+realmente_desea_guardar_la_capa=¿Desea guardar la capa
+recargar=Recargar
+rectangle=Rectángulo
+rectangle_=RECTÁNGULO
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+reference_system=Sistema de Referencia
+rehacer=Rehacer
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometría
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+resolution=Resolución
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotación
+save_to_ascii=Exportar tabla de puntos a fichero de texto.
+save_to_xml=Salvar a fichero XML (.grf)
+scale_=ESCALAR
+script_sep=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selección compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas ráster
+seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por polígono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenará el ángulo con el que se mostrará el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el color con el que se mostrará la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará la fuente con el que se mostrará de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el alto con el que se mostrará la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_driver=Seleccione el driver
+select_from_point=Seleccionar a partir de un punto
+select_geometry=Seleccione una geometría
+select_geometry_to_extend=Seleccionar geometría a extender
+select_geometry_type=Seleccione el tipo de geometría
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=Seleccione otra geometría o finalizar[E]
+selected_layer=Capa seleccionada
+selected_parameters=Parámetros seleccionados
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_=SELECCIONAR
+selection_up=Mover arriba la selección
+separator=Separador
+settings=Ajustes
+show_this_dialog_next_startup=Mostrar este diálogo la próxima vez
+shp=SHP
+si=sí
+siempre=Siempre
+simbolo=Símbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+size=Tamaño
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tamaño mínimo de las líneas que formarán las curvas.
+square=Esquina
+start_edition=Comenzar edición
+state_or_province=Estado/Provincia
+stop_edition=Terminar edición
+stretch=Estirar
+stretch_=ESTIRAR
+suprimir_objetos_origen=¿Suprimir objetos de origen?Si[S] o No[N] |N|
+symmetry=Simetría
+symmetry_=SIMETRÍA
+tamPixX=Tamaño pixel X
+tamPixY=Tamaño pixel Y
+tamanyo_pagina=Tamaño de página
+terminar=Terminar
+terminar_edicion=Terminar edición
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podrá exportar los datos editados, pero no podrá guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+time=Tiempo
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+total=Total
+transparencia_pixel=Transparencia por pixel
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+ultimo=Último
+undo=Deshacer
+unknown_response_format=Formato de respuesta desconocido
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versión de Web Map Context no soportada
+url=url
+use_custom_size=Tamaño personalizado
+use_full_extent=Usar extensión total
+use_interpolation_method=Usar metodo de interpolación
+use_view_size=Tamaño de la vista
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexión al WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+will_be_truncated=será truncado
+y_en=y en
+yes=Si
+zone=Huso
+zoom_in_factor=Factor zoom más
+zoom_out_factor=Factor zoom menos
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties	(revision 42196)
@@ -0,0 +1,729 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+a_new_view=New view
+Abrir_Geoproceso=Open Geoprocess
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_field=Add field
+add_rows=Add rows
+add_vertex=Add vertex
+advanced=Advanced
+advanced_settings=Advanced options
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+algoritmo=Algorithm
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+Analisis=Analisis
+Analisis_Desc=
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Area_de_influencia_definida_por_una_distancia=Buffer defined by distance
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Atributos_Numericos=Numerical attributes
+attributeName=Name
+attributeType=Type
+Block_Size_=Block Size\:
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+box=box
+break=Break
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+Campo_para_disolver=Field to dissolve
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_reproject_from_any_of=Unable to reproject from any of
+Capas_del_directorio=Layers on directory
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+Centrar_la_Vista_sobre_un_punto=Center view to point
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+circle_=CIRCLE
+circumscribed=Circumscribed
+city=City
+Clean=
+Cobertura_de_datos=Data cover
+Cobertura_de_entrada=Input cover
+Cobertura_de_recorte=Clip cover
+Cobertura_de_salida=Output cover
+Coberturas_de_entrada=Input cover set
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+complex_selection=Complex selection
+complex_selection_=COMPLEX SELECTION
+Compression_=Compression\:
+configurar_todas_las_extensiones=Configure all the extensions
+confirmacion=Confirm that...
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+contact_info=Contact info
+contiene_espacios_en_blanco=It has white space
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+coordenadas_vacias=Empty coordinates
+copiar=Copy
+copy=Copy
+copy_=COPY
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+Crear_Buffer=Create Buffer...
+Crear_Indice_Pregunta_1=Do you want to create an spatial index for layer
+created_with=Created with
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de\ =of 
+de\ 0=of 0
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+define_fields=Define fields
+define_point=Define point
+defined_by_view_extent=Defined by the view\u0092s extent
+dehacer=Undo
+del=Delete
+delete_field=Delete field
+deleted_feature=Deleted feature
+Dentro_y_fuera=Inside and outside de polygon
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+Diferencia_Introduccion_de_datos=Difference. Fill in data
+disagregate_layers=Maintain layer structure
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Disolver_entidades=Dissolve entities
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edicion=Edition
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+edit_vertex_=EDIT VERTEX
+editar_vertices=Edit vertex
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=The element already exists
+Elija_una_herramienta_de_analisis=Choose an analisys tool
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+end=End
+end_polygon=End polygon
+endinfo=Finalization Statistics
+Enlace_espacial=Spatial join
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+enter_layer_name=Enter layer name
+enter_path_to_file=Enter file path
+Error_atributo_no_numerico=Not numeric buffer field
+error_capa_puntos=Error loading the layer. Maybe the Georreferencing layer is not active.
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_chequeando_precondiciones=Check preconditions error
+Error_chequeo_tipo_geometria=Error during checking geometry type
+Error_distancia_buffer=You must enter a buffer distance
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+Error_escritura_resultados=Data writing error
+Error_exportando_SLD=Error exporting SLD
+Error_fallo_geoproceso=Error during geoprocess execution
+error_file_exists=The file already exists. Do you want to overwrite?
+error_file_not_writable=Could not create output file.
+Error_guardando_la_plantilla=Error saving the template
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_preparar_escritura_resultados=Error during preparation of result layer
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Error_spjoinmn_sin_funcion=In a 1-N spatial join you must specify sumarization functions
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+escala_desconocida=Unknown scale
+Escoger_Fun_Resumen=<-
+exploit=Exploit
+exploit_=EXPLOIT
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exporting_=Exporting
+exportJOP2Title=
+extend=Extend
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+Ficheros_de_cartografia=Layer files
+Ficheros_SHP=SHP Files
+field=Field
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file=File
+file_name=File
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+fit_WMS_layer=Config WMS Layer
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+formato_de_numero_incorrecto=Incorrect number format
+Fuera=Outside the polygon
+fuera_de_extent=The selected point is out of the image's extent
+Funciones_Sumarizacion=Group by functions
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw\:
+Geoprocesos=Geoprocesses
+georaster=Georeferencing
+georef=Georeference
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+georreferenciar=Georeference image
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+grado_polinomio=Polynom deegree
+Grid=Grid
+group_graphic_line=Group graphic line
+grupo=group
+guardar=Save
+height=Height
+Herramientas_de_analisis=Analisys Tools
+horizontal_space=Horizontal space
+html_in_other_view=<HTML>Adds the layers to the selected view in the list.</HTML>
+Icon_not_found_=Icon not found
+imagen_no_accesible=Unable to access the image
+Implimir=
+import=Import
+import_from_ascii=Import table from a CSV (.csv) file.
+import_map_context=Import maps from an OGC's Web Map Context file (.cml).
+inches=
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+Indexando_espacialmente=Spatially indexing the layer
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or [3P]
+insert_central_point_polygon=Insert central point of the polygon
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor_or_reference=Insert scale factor |2| or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point_arc_or_close=Insert next point, Arc [A] or Close [C]
+insert_next_point_line_or_close=Insert next point, Line [N] or Close [C]
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon [E]
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner_or_square=Insert point of opposite corner or square [C]
+insert_point_move=Insert point for move
+insert_point_or_end=Insert point or End geometry [E]
+insert_point_selection=Insert selection point
+insert_point_selection_or_types=Insert point or Circle [IC], Out rect.[OR], Polyg.[IP], Intern. pol.[CP], Out pol.[OP], Intern. circle [CC], Out circle [OC]
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point_or_factor=Insert origin or Reference Line or Scale Factor [F]
+insert_rotation_angle=Insert rotation angle
+insert_row=Insert row
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar_cajetin=Insert grid
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+insertar_polilinea=Insert polyline
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inter_arc=Internal arc
+inter_line=Internal line
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+Interseccion=Intersect
+Interseccion._Introduccion_de_datos=Intersect. Data input
+into_circle=Inscribed
+into_circle_or_circumscribed=Inscribed [I] o Circumscribed [C] in circle |C|
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+Juntar=Merge
+Juntar._Introduccion_de_datos=Merge. Data input
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+layerName=Layer name
+LayerName=Layer name
+layers_in_other_view=Layers in other view
+layers_in_the_current_view=Layers in the current view
+layerType=Geometry type
+length=Length
+length_of_field=Length of field
+line=Line
+line_=LINE
+line_type=Line type
+load_from_xml=Load from XML file (.rmf)
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+max_features=Max. features
+max_length_is=Max length is
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+Maximo=Maximum
+Media=Average
+Mensaje_buffer=Computing buffers
+Mensaje_clip=Clip geoprocess...
+Mensaje_convexhull=Convex hull geoproces
+Mensaje_difference=Difference geoprocess...
+Mensaje_dissolve=Dissolve geoprocess....
+Mensaje_enlace_espacial=Spatial Join geoprocess...
+Mensaje_interseccion=Intersection geoprocess...
+Mensaje_juntar=Merge geoprocess...
+Mensaje_primera_pasada_union=Computing intersections...
+Mensaje_procesando_buffer=Processing buffers
+Mensaje_procesando_buffer2=Dissolving buffers...
+Mensaje_procesando_clip_primero=Computing clip polygon...
+Mensaje_procesando_clip_segundo=Clipping geometries...
+Mensaje_procesando_convexhull=Computing convex hull...
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_dissolves=Dissolving geometries...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_procesando_interseccion=Computing intersections...
+Mensaje_procesando_juntar=Merging geometries...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+Mensaje_union=Union geoprocess...
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+Minimo=Minimum
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move=Move
+move_=MOVE
+move_elements=Move elements
+move_handlers=Move handlers
+Mover_geo=Move georeferenced image.
+msg_save_raster=The operation will be canceled. Would you like to continue?
+multi_type=Multiple type
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_dxf=New DXF
+new_field=New field
+new_field_properties=New field properties
+new_layer=New layer
+new_postgis=New PostGIS
+new_shp=Nuevo SHP
+next_point_or_end=Next point or end
+next_previous_add_del_cancel=Point, Next vertex [S], Previous [A], Add [I] or Remove [E]
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+No_usar_buffer_redondeado=Rectangle end cap
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_columnas=Number of columns
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=
+Numero_anillos_concentricos=Number of radial buffers
+Numero_de_elementos_seleccionados=Number of selected features
+numero_decimales_mostrar=
+numero_incorrecto=Invalid value
+Obtener_mas_proximo=Use nearest geometry
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+Operacion_de_overlay=Overlay operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pila_de_comandos=commands stack
+pixel_point=
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point=Point
+point_=POINT
+point_type=Point type
+poligono=Polygon
+polilinea=polyline
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Polygon type
+polyline=Polyline
+polyline_=POLYLINE
+poner_capas_a=Set layers as
+Por_favor_active_la_capa=Please, activate the layer
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferences
+preferencias=Preferences
+Preferencias=Preferences
+previous=Previous
+previsualizacion=Preview
+primero=First
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+projection=Projection
+propiedad=Oroperty
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+props=Properties
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+ps=
+puntos=Points
+realces=Enhancement
+realmente_desea_guardar=Would you really like to save?
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+Recortar._Introduccion_de_datos=Clip. Data input
+rectangle=Rectangle
+rectangle_=RECTANGLE
+Recursos\ Disponibles=Available Resources
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+reference_system=Reference System
+rehacer=Redo
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+resolution=Resolution
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+save_to_ascii=Export table of points into a text file.
+save_to_xml=Save to XML (.grf)
+scale_=SCALE
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+Seleccion_por_capa=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+Seleccionar_Directorio=Path with layers...
+seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_driver=Select driver
+select_from_point=Select from point
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_other_geometry_or_end=Select other geometry or End[E]
+Selected=Selected
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selectfromview=Select a point from the view
+selection=Selection
+selection_=SELECTION
+selection_up=Move selection to top
+separator=Separator
+settings=Settings
+Show\ Errors=
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+siempre=Always
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+size=Size
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Solo_disolver_adyacentes=Only dissolve adjacents.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+square=Corner
+start_edition=Start edition
+state_or_province=State/Province
+stop_edition=Finish edition
+stretch=Stretch
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry=Symmetry
+symmetry_=SYMMETRY
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+Terminar=Finish
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+time=Time
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Topology=
+total=Total
+transparencia_pixel=Transparency per pixel
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+ultimo=Last
+Unable_to_find_icon=Unable to find icon
+undo=Undo
+Union._Introduccion_de_datos=Union. Data input
+unknown_response_format=Unkown response format
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+url=url
+Usar_los_campos_de_la_capa=Use fields from cover
+Usar_solamente_los_elementos_seleccionados=Use selected features only
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Can\u0092t connect to WCS
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+WFSLayer=WFS Layer
+will_be_truncated=
+y_en=and in
+yes=Yes
+zone=Zone
+Zoom_a_la_capa=Zoom to layer
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties	(revision 42196)
@@ -0,0 +1,729 @@
+#Translations for language [pt]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+a_new_view=
+Abrir_Geoproceso=
+accept_tip=
+add_delete_edit_fields=
+add_field=
+add_rows=
+add_vertex=
+advanced=
+advanced_settings=
+Agregacion=
+Agregacion_Desc=
+agrupacion=
+ajustar_rejilla=
+algoritmo=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+Analisis=
+Analisis_Desc=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+Atributos_Numericos=
+attributeName=
+attributeType=
+Block_Size_=
+borrar_todos=
+borrar_uno=
+box=
+break=
+brillo_y_contraste=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Campo_para_disolver=
+cancel_tip=
+cancelar_edicion=
+cant_reproject_from_any_of=
+Capas_del_directorio=
+capas_edition_cache=
+cargar=
+centimeters=
+Centrar_la_Vista_sobre_un_punto=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+circle_=
+circumscribed=
+city=
+Clean=
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Coberturas_de_entrada=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+complex_selection=
+complex_selection_=
+Compression_=
+configurar_todas_las_extensiones=
+confirmacion=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+contact_info=
+contiene_espacios_en_blanco=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+coordenadas_vacias=
+copiar=
+copy=
+copy_=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+Crear_Buffer=
+Crear_Indice_Pregunta_1=
+created_with=
+cross_circle=
+cross_polygon=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+DBManager=
+de\ =
+de\ 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+deleted_feature=
+Dentro_y_fuera=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Diferencia_Introduccion_de_datos=
+disagregate_layers=
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edicion=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+edit_vertex_=
+editar_vertices=
+Edition=
+Edition_Properties=
+Ejecutando\ comando\:\ =
+elemento_ya_existe=
+Elija_una_herramienta_de_analisis=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+end=
+end_polygon=
+endinfo=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+enter_layer_name=
+enter_path_to_file=
+Error_atributo_no_numerico=
+error_capa_puntos=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+error_file_exists=
+error_file_not_writable=
+Error_guardando_la_plantilla=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_preparar_escritura_resultados=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+error_writting_file=
+errores_csv=
+errorMessageJComboBoxItemsSeekerConfigurable=
+escala_desconocida=
+Escoger_Fun_Resumen=
+exploit=
+exploit_=
+export_to=
+export_to_map_context=
+exportando_features=
+exporting_=
+exportJOP2Title=
+extend=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=
+Ficheros_SHP=
+field=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file=
+file_name=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+fit_WMS_layer=
+Flatness=
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=
+Fuera=
+fuera_de_extent=
+Funciones_Sumarizacion=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+Gestor_de_Geoprocesos=
+gml=
+gml_files=
+grado_polinomio=
+Grid=
+group_graphic_line=
+grupo=
+guardar=
+height=
+Herramientas_de_analisis=
+horizontal_space=
+html_in_other_view=
+Icon_not_found_=
+imagen_no_accesible=
+Implimir=
+import=
+import_from_ascii=
+import_map_context=
+inches=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+Indexando_espacialmente=
+indexar_campos=
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_cajetin=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+insertar_polilinea=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+Interleave_=
+internal_polygon=
+internal_polygon_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+into_circle=
+into_circle_or_circumscribed=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+Juntar=
+Juntar._Introduccion_de_datos=
+Las_traducciones_no_pudieron_ser_cargadas=
+Launcher.error_getting_class_loader_for_status_bar_control=
+layerName=
+LayerName=
+layers_in_other_view=
+layers_in_the_current_view=
+layerType=
+length=
+length_of_field=
+line=
+line_=
+line_type=
+load_from_xml=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+max_features=
+max_length_is=
+maxFeatures_aviso=
+MaxFeaturesEditionCache=
+Maximo=
+Media=
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages.no_se_encontro_la_traduccion_para=
+Minimo=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move=
+move_=
+move_elements=
+move_handlers=
+Mover_geo=
+msg_save_raster=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+nearest_point=
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_field_properties=
+new_layer=
+new_postgis=
+new_shp=
+next_point_or_end=
+next_previous_add_del_cancel=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_usar_buffer_redondeado=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_columnas=
+num_filas=
+Num_intervalos=
+num_lados_insuficiente=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+numero_decimales_mostrar=
+numero_incorrecto=
+Obtener_mas_proximo=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+Operacion_de_overlay=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+out_circle=
+out_polygon=
+out_rectangle=
+Overlay=
+Overlay_Desc=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+Photometric_=
+pila_de_comandos=
+pixel_point=
+Plain=
+plantilla=
+please_insert_new_field_name=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+Por_favor_active_la_capa=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+Preferences=
+preferencias=
+Preferencias=
+previous=
+previsualizacion=
+primero=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+Progressive_=
+projection=
+propiedad=
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=
+props=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+ps=
+puntos=
+realces=
+realmente_desea_guardar=
+realmente_desea_guardar_la_capa=
+recargar=
+Recortar._Introduccion_de_datos=
+rectangle=
+rectangle_=
+Recursos\ Disponibles=
+redo=
+redo_error=
+reference=
+reference_system=
+rehacer=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_row=
+remove_rows=
+rename_field=
+resolution=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+save_to_ascii=
+save_to_xml=
+scale_=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=
+seleccion_compleja=
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+Seleccionar_Directorio=
+seleccionar_fichero=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_driver=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+Selected=
+selected_layer=
+selected_parameters=
+selectfromview=
+selection=
+selection_=
+selection_up=
+separator=
+settings=
+Show\ Errors=
+show_this_dialog_next_startup=
+shp=
+si=
+siempre=
+simbolo=
+simplificar_leyenda=
+simplify=
+size=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Solo_disolver_adyacentes=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+state_or_province=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+Terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+time=
+to_annotation=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Topology=
+total=
+transparencia_pixel=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+ultimo=
+Unable_to_find_icon=
+undo=
+Union._Introduccion_de_datos=
+unknown_response_format=
+unsupported_crs=
+unsupported_map_context_version=
+url=
+Usar_los_campos_de_la_capa=
+Usar_solamente_los_elementos_seleccionados=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+WFSLayer=
+will_be_truncated=
+y_en=
+yes=
+zone=
+Zoom_a_la_capa=
+zoom_in_factor=
+zoom_out_factor=
+Zoom_previo=
+Zoom_sgte=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,733 @@
+1:=
+Abrir_Geoproceso=Open Geoprocess
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+Analisis=Analisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Area_de_influencia_definida_por_una_distancia=Buffer defined by distance
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Atributos_Numericos=Numerical attributes
+Block_Size_=Block Size:
+Campo_para_disolver=Field to dissolve
+Capas_del_directorio=Layers on directory
+Centrar_la_Vista_sobre_un_punto=Center view to point
+Clean=
+Cobertura_de_datos=Data cover
+Cobertura_de_entrada=Input cover
+Cobertura_de_recorte=Clip cover
+Cobertura_de_salida=Output cover
+Coberturas_de_entrada=Input cover set
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+Crear_Buffer=Create Buffer...
+Crear_Indice_Pregunta_1=Do you want to create an spatial index for layer
+DBManager=DataBase Manager
+Dentro_y_fuera=Inside and outside de polygon
+Diferencia_Introduccion_de_datos=Difference. Fill in data
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Disolver_entidades=Dissolve entities
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando comando: =Execute command:
+Elija_una_herramienta_de_analisis=Choose an analisys tool
+Enlace_espacial=Spatial join
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+Error_atributo_no_numerico=Not numeric buffer field
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_chequeando_precondiciones=Check preconditions error
+Error_chequeo_tipo_geometria=Error during checking geometry type
+Error_distancia_buffer=You must enter a buffer distance
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+Error_escritura_resultados=Data writing error
+Error_exportando_SLD=Error exporting SLD
+Error_fallo_geoproceso=Error during geoprocess execution
+Error_guardando_la_plantilla=Error saving the template
+Error_preparar_escritura_resultados=Error during preparation of result layer
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Error_spjoinmn_sin_funcion=In a 1-N spatial join you must specify sumarization functions
+Escoger_Fun_Resumen=<-
+Ficheros_SHP=SHP Files
+Ficheros_de_cartografia=Layer files
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+Fuera=Outside the polygon
+Funciones_Sumarizacion=Group by functions
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw:
+Geoprocesos=Geoprocesses
+Gestor_de_Geoprocesos=Geoprocess toolbox
+Grid=Grid
+Herramientas_de_analisis=Analisys Tools
+Icon_not_found_=Icon not found
+Implimir=
+Indexando_espacialmente=Spatially indexing the layer
+Interleave_=Interleave:
+Interseccion=Intersect
+Interseccion._Introduccion_de_datos=Intersect. Data input
+Juntar=Merge
+Juntar._Introduccion_de_datos=Merge. Data input
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+LayerName=Layer name
+MaxFeaturesEditionCache=Max features edition cache
+Maximo=Maximum
+Media=Average
+Mensaje_buffer=Computing buffers
+Mensaje_clip=Clip geoprocess...
+Mensaje_convexhull=Convex hull geoproces
+Mensaje_difference=Difference geoprocess...
+Mensaje_dissolve=Dissolve geoprocess....
+Mensaje_enlace_espacial=Spatial Join geoprocess...
+Mensaje_interseccion=Intersection geoprocess...
+Mensaje_juntar=Merge geoprocess...
+Mensaje_primera_pasada_union=Computing intersections...
+Mensaje_procesando_buffer=Processing buffers
+Mensaje_procesando_buffer2=Dissolving buffers...
+Mensaje_procesando_clip_primero=Computing clip polygon...
+Mensaje_procesando_clip_segundo=Clipping geometries...
+Mensaje_procesando_convexhull=Computing convex hull...
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_dissolves=Dissolving geometries...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_procesando_interseccion=Computing intersections...
+Mensaje_procesando_juntar=Merging geometries...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+Mensaje_union=Union geoprocess...
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+Minimo=Minimum
+Mover_geo=Move georeferenced image.
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+No_usar_buffer_redondeado=Rectangle end cap
+Num_intervalos=Number of Intervals
+Numero_anillos_concentricos=Number of radial buffers
+Numero_de_elementos_seleccionados=Number of selected features
+Obtener_mas_proximo=Use nearest geometry
+Operacion_de_overlay=Overlay operation
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+Photometric_=Photometric:
+Plain=Regular
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=Please, activate the layer
+Preferences=Preferences
+Preferencias=Preferences
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+Recortar._Introduccion_de_datos=Clip. Data input
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selection by Layer
+Seleccionar_Directorio=Path with layers...
+Selected=Selected
+Show Errors=
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Solo_disolver_adyacentes=Only dissolve adjacents.
+Terminar=Finish
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+Union._Introduccion_de_datos=Union. Data input
+Usar_los_campos_de_la_capa=Use fields from cover
+Usar_solamente_los_elementos_seleccionados=Use selected features only
+WFSLayer=WFS Layer
+Zoom_a_la_capa=Zoom to layer
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom
+a_new_view=New view
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_field=Add field
+add_rows=Add rows
+add_vertex=Add vertex
+advanced=Advanced
+advanced_settings=Advanced options
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+algoritmo=Algorithm
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+attributeName=Name
+attributeType=Type
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+box=box
+break=Break
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+circle_=CIRCLE
+circumscribed=Circumscribed
+city=City
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+complex_selection=Complex selection
+complex_selection_=COMPLEX SELECTION
+configurar_todas_las_extensiones=Configure all the extensions
+confirmacion=Confirm that...
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+contact_info=Contact info
+contiene_espacios_en_blanco=It has white space
+coordenadas_vacias=Empty coordinates
+copiar=Copy
+copy=Copy
+copy_=COPY
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+created_with=Created with
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+de =of 
+de 0=of 0
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+define_fields=Define fields
+define_point=Define point
+defined_by_view_extent=Defined by the views extent
+dehacer=Undo
+del=Delete
+delete_field=Delete field
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=¿Do you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=¿Do you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+disagregate_layers=Maintain layer structure
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edicion=Edition
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+edit_vertex_=EDIT VERTEX
+editar_vertices=Edit vertex
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+end=End
+end_polygon=End polygon
+endinfo=Finalization Statistics
+enter_layer_name=Enter layer name
+enter_path_to_file=Enter file path
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_capa_puntos=Error loading the layer. Maybe the Georreferencing layer is not active.
+error_file_exists=The file already exists. Do you want to overwrite?
+error_file_not_writable=Could not create output file.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+escala_desconocida=Unknown scale
+exploit=Exploit
+exploit_=EXPLOIT
+exportJOP2Title=
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exporting_=Exporting
+extend=Extend
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field=Field
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file=File
+file_name=File
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+fit_WMS_layer=Config WMS Layer
+formato_de_numero_incorrecto=Incorrect number format
+fuera_de_extent=The selected point is out of the image's extent
+georaster=Georeferencing
+georef=Georeference
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+georreferenciar=Georeference image
+gml=GML
+gml_files=GML Files
+grado_polinomio=Polynom deegree
+group_graphic_line=Group graphic line
+grupo=group
+guardar=Save
+height=Height
+horizontal_space=Horizontal space
+html_in_other_view=<HTML>Adds the layers to the selected view in the list.</HTML>
+imagen_no_accesible=Unable to access the image
+import=Import
+import_from_ascii=Import table from a CSV (.csv) file.
+import_map_context=Import maps from an OGC's Web Map Context file (.cml).
+inches=
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or [3P]
+insert_central_point_polygon=Insert central point of the polygon
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor_or_reference=Insert scale factor |2| or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point_arc_or_close=Insert next point, Arc [A] or Close [C]
+insert_next_point_line_or_close=Insert next point, Line [N] or Close [C]
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon [E]
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner_or_square=Insert point of opposite corner or square [C]
+insert_point_move=Insert point for move
+insert_point_or_end=Insert point or End geometry [E]
+insert_point_selection=Insert selection point
+insert_point_selection_or_types=Insert point or Circle [IC], Out rect.[OR], Polyg.[IP], Intern. pol.[CP], Out pol.[OP], Intern. circle [CC], Out circle [OC]
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point_or_factor=Insert origin or Reference Line or Scale Factor [F]
+insert_rotation_angle=Insert rotation angle
+insert_row=Insert row
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar_cajetin=Insert grid
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+insertar_polilinea=Insert polyline
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inter_arc=Internal arc
+inter_line=Internal line
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+into_circle=Inscribed
+into_circle_or_circumscribed=Inscribed [I] o Circumscribed [C] in circle |C|
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+layerName=Layer name
+layerType=Geometry type
+layers_in_other_view=Layers in other view
+layers_in_the_current_view=Layers in the current view
+length=Length
+length_of_field=Length of field
+line=Line
+line_=LINE
+line_type=Line type
+load_from_xml=Load from XML file (.rmf)
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.
+It cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.
+It cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase 
+the amount of Features recovered by modifying the 
+"Buffer" parameter.
+max_features=Max. features
+max_length_is=Max length is
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move=Move
+move_=MOVE
+move_elements=Move elements
+move_handlers=Move handlers
+msg_save_raster=The operation will be canceled. Would you like to continue?
+multi_type=Multiple type
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_dxf=New DXF
+new_field=New field
+new_field_properties=New field properties
+new_layer=New layer
+new_postgis=New PostGIS
+new_shp=Nuevo SHP
+next_point_or_end=Next point or end
+next_previous_add_del_cancel=Point, Next vertex [S], Previous [A], Add [I] or Remove [E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_columnas=Number of columns
+num_filas=Number of rows
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=Invalid value
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+pila_de_comandos=commands stack
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+point=Point
+point_=POINT
+point_type=Point type
+poligono=Polygon
+polilinea=polyline
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Polygon type
+polyline=Polyline
+polyline_=POLYLINE
+poner_capas_a=Set layers as
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+previous=Previous
+previsualizacion=Preview
+primero=First
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+projection=Projection
+propiedad=Oroperty
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+props=Properties
+ps=
+puntos=Points
+realces=Enhancement
+realmente_desea_guardar=Would you really like to save?
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+rectangle=Rectangle
+rectangle_=RECTANGLE
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+reference_system=Reference System
+rehacer=Redo
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+resolution=Resolution
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+save_to_ascii=Export table of points into a text file.
+save_to_xml=Save to XML (.grf)
+scale_=SCALE
+script_sep=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the labels text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_driver=Select driver
+select_from_point=Select from point
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_other_geometry_or_end=Select other geometry or End[E]
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selectfromview=Select a point from the view
+selection=Selection
+selection_=SELECTION
+selection_up=Move selection to top
+separator=Separator
+settings=Settings
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+siempre=Always
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+size=Size
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+square=Corner
+start_edition=Start edition
+state_or_province=State/Province
+stop_edition=Finish edition
+stretch=Stretch
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry=Symmetry
+symmetry_=SYMMETRY
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tamanyo_pagina=Page size
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+time=Time
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+total=Total
+transparencia_pixel=Transparency per pixel
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+ultimo=Last
+undo=Undo
+unknown_response_format=Unkown response format
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+url=url
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Cant connect to WCS
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+will_be_truncated=
+y_en=and in
+yes=Yes
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,750 @@
+1:=
+Abrir_Geoproceso=Abrir Geoproceso
+Agregacion=Agregación
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+Analisis=Análisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Área de influencia definida por un campo
+Area_de_influencia_definida_por_una_distancia=Área de influencia definida por una distancia
+Areas_de_influencia._Introduccion_de_datos=Áreas de influencia. Introducción de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Atributos_Numericos=Atributos numéricos
+Block_Size_=Tamaño de bloque:
+Campo_para_disolver=Campo para disolver
+Capas_del_directorio=Capas del directorio
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+Clean=
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de salida
+Coberturas_de_entrada=Capas de entrada
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Conversion_de_datos=Conversión de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyección, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducción de datos
+Crear_Buffer=Crear área de influencia
+Crear_Indice=Crear índice espacial...
+Crear_Indice_Pregunta_1=¿Desea crear un índice espacial para la capa?
+DBManager=Gestor de Base de datos
+Dentro_y_fuera=Dentro y fuera del polígono
+Diferencia_Introduccion_de_datos=Diferencia. Introducción de datos
+Disolver._Introduccion_de_datos=Disolver. Introducción de datos
+Disolver_entidades=Disolver entidades
+Edition=Edición
+Edition_Properties=Propiedades de Edición
+Ejecutando comando: =Execute command:
+Elija_una_herramienta_de_analisis=Elija una herramienta de análisis
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducción de datos
+Error_atributo_no_numerico=Atributo para distancia de buffer no numérico
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_chequeando_precondiciones=Error verificando precondiciones
+Error_chequeo_tipo_geometria=Error al chequear el tipo de geometria
+Error_distancia_buffer=Debes introducir una distancia de buffer
+Error_ejecucion=Error de ejecución
+Error_entrada_datos=Error de entrada de datos
+Error_escritura_resultados=Error de escritura de resultados
+Error_exportando_SLD=Error exportando SLD
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecución del geoproceso
+Error_guardando_la_plantilla=Error guardando la plantilla
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Error_spjoinmn_sin_funcion=No has seleccionado ninguna función resumen para los atributos numéricos
+Escoger_Fun_Resumen=<-
+Ficheros_SHP=Ficheros SHP
+Ficheros_de_cartografia=Ficheros de datos cartográficos
+Flatness=
+Formato_de_numero_erroneo=Formato de número incorrecto
+Fuera=Fuera del polígono
+Funciones_Sumarizacion=Funciones de agrupamiento
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw:
+Geoprocesos=Geoprocesos
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+Grid=Rejilla
+Herramientas_de_analisis=Herramientas de análisis
+Icon_not_found_=No se encontró el icono
+Implimir=
+Indexando_espacialmente=Indexando espacialmente la capa
+Interleave_=Entrelazado:
+Interseccion=Intersección
+Interseccion._Introduccion_de_datos=Intersección. Introducción de datos
+Juntar=Juntar
+Juntar._Introduccion_de_datos=Juntar. Introducción de datos
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+LayerName=Nombre de la capa
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+Maximo=Máximo
+Mensaje_buffer=Calculando áreas de influencia...
+Mensaje_clip=Geoproceso recortar...
+Mensaje_convexhull=Geoproceso convex hull...
+Mensaje_difference=Geoproceso diferencia...
+Mensaje_dissolve=Geoproceso dissolve....
+Mensaje_enlace_espacial=Geoproceso enlace espacial...
+Mensaje_interseccion=Geoproceso intersección...
+Mensaje_juntar=Geoproceso juntar...
+Mensaje_primera_pasada_union=Calculando intersecciones...
+Mensaje_procesando_buffer=Generando buffers...
+Mensaje_procesando_buffer2=Disolviendo buffers...
+Mensaje_procesando_clip_primero=Calculando polígono de recorte
+Mensaje_procesando_clip_segundo=Recortando geometrias
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_dissolves=Dissolviendo geometrias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_procesando_interseccion=Calculando intersecciones...
+Mensaje_procesando_juntar=Juntando geometrias...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+Mensaje_union=Geoproceso union...
+Messages.no_se_encontro_la_traduccion_para=No se encontró la traducción para
+Minimo=Mínimo
+Mover_geo=Mover imagen a georreferenciar
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operación
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quizá olvidó inicializar la clase.
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+No_usar_buffer_redondeado=No usar borde redondeado
+Num_intervalos=Número de intervalos
+Numero_anillos_concentricos=Número de anillos concéntricos
+Numero_de_elementos_seleccionados=Número de elementos seleccionados
+Obtener_mas_proximo=Usar el mas próximo
+Operacion_de_overlay=Operaciones de solape
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva información basándose en la superposición de dos capas.
+Photometric_=Fotométrica:
+Plain=Normal
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=Por favor active la capa
+Preferences=Preferencias
+Preferencias=Preferencias
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+Recortar._Introduccion_de_datos=Recortar. Introducción de datos
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selección por capa
+Seleccionar_Directorio=Carpeta con capas...
+Selected=Capa seleccionada
+Show Errors=
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Solo_disolver_adyacentes=Sólo disolver adyacentes.
+Terminar=Terminar
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+Union._Introduccion_de_datos=Unión. Introducción de datos
+Usar_los_campos_de_la_capa=Usar los campos de la capa
+Usar_solamente_los_elementos_seleccionados=Usar solamente los elementos seleccionados
+WFSLayer=Capa WFS
+Zoom_Completo=Zoom completo
+Zoom_Menos=Zoom menos
+Zoom_a_la_capa=Zoom a la capa
+Zoom_previo=Extensión anterior
+Zoom_sgte=Extensión siguiente
+a_new_view=Vista nueva
+accept_tip=Procesa los GCP's y salva la georreferenciación. Da por terminada la introducción de GCP's.
+add_delete_edit_fields=Puede añadir, borrar o renombrar los campos
+add_field=Añadir campo
+add_rows=Añadir filas
+add_vertex=Añadir vértice
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+agrupacion=Agrupación
+ajustar_rejilla=Ajustar rejilla
+algoritmo=Algoritmo
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensión de la imagen a georreferenciar
+anadir_tag=Añadir etiqueta
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=Área
+attributeName=Nombre
+attributeType=Tipo
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+box=Cajetín
+break=
+break_=Break
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+button.resolution.calculate=Calcula resolución
+cajetin=Cajetín
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el más alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el más ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tamaño de los elementos seleccionados hasta coincidir con el más grande.
+cancel_tip=Cierra el dialogo deshaciendo los últimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edición
+cantLoad=No se puede cargar la capa WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ningún
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Centímetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detrás
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=Círculo
+circle_=CÍRCULO
+circumscribed=Circunscrito
+city=Ciudad
+close_polyline=Cerrar polilínea
+coincidir_tamanyo=Coincidir tamaño
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Pila de comandos
+compleja=
+complex_selection=Selección compleja
+complex_selection_=SELECCIÓN COMPLEJA
+compress=Compresión
+conection=Conexión
+configurar_todas_las_extensiones=Configurar todas las extensiones
+confirmacion=Confirmación
+conflicto_de_nombres_de_mapas_al_pegar=Se está intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se está intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se está intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+connect=Conectar
+contact_info=Información de contacto
+contact_organization=Organización
+contiene_espacios_en_blanco=Contiene espacios en blanco
+coordenadas_vacias=Coordenadas vacías
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=País
+coverage=Cobertura
+crear_worldfile=Crear fichero de georreferenciación (worldfile)
+created_with=Creado con
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/Contiene el polígono
+cuadro_no_asociado=El cuadro de georreferenciación no está asociado a ninguna capa sobre la vista, este se cerrará. Por favor, abra el diálogo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexión a Base de Datos
+datum=Datum
+de =
+de 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener información.
+debera_introducir_nombres_para_las_vistas_a_pegar=Deberá introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deberá introducir nombres nuevos para los mapas
+default_name=Capa WFS
+default_projection=Proyección por defecto
+default_value=Valor por defecto
+define_fields=Define los campos
+define_point=Defina el punto
+defined_by_view_extent=Usar extensión de la vista
+dehacer=Deshacer
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa después del primer punto.
+desactivar_puntos=Desactiva capa de puntos después del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaciÃ³n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripción
+desea_borrar_el_documento=¿Está seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=¿Está seguro de que desea borrar las capas activas?
+desea_continuar=¿Desea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar sólo el texto
+dxf=dxf
+edicion=Edición
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar vértice
+edit_vertex_=EDITAR VÉRTICE
+editar_vertices=Editar Vértices
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+end=Terminar
+end_polygon=Finalizar polígono
+enter_layer_name=Introducir nombre de la capa
+enter_path_to_file=Introducir la ruta del fichero
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_capa_puntos=Error al cargar la capa. Puede que la capa de Georreferenciación no esté activa.
+error_file_exists=El fichero ya existe.¿Desea sobreescribirlo?.
+error_file_not_writable=No es posible crear el fichero de salida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+escala_desconocida=Escala desconocida
+exploit=Explotar
+exploit_=EXPLOTAR
+exportJOP2Title=
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exporting_=Exportando
+extend=Alargar
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+feature=Capas
+features_desea_continuar=features, ¿desea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, ¿desea continuar?
+field=Campo
+field_already_exists=El campo ya existe
+field_decimal_count=Precisión decimal
+field_default_value=Valor por defecto
+field_length=Tamaño
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file=Archivo
+file_name=Archivo
+file_version=Versión del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+formato_de_numero_incorrecto=Formato de número incorrecto.
+fuera_de_extent=El punto seleccionado está fuera del extent de la imagen
+georaster=Georreferenciación
+georef=Georreferenciar
+georef_file=Fichero de georreferenciación
+georeferenciado=Georeferenciado
+georreferenciar=Georreferenciar
+gml=GML
+gml_files=Ficheros gml
+grado_polinomio=Grado del polinomio
+group_graphic_line=Agrupar línea gráfica
+grupo=grupo
+guardar=Guardar
+height=Alto
+horizontal_space=Espacio horizontal
+host=Máquina
+html_in_a_new_view=<HTML>Crea una vista nueva en el proyecto. La nueva vista contendrá todas las capas definidas por el fichero.</HTML>
+html_in_other_view=<HTML>Añade las capas en la vista que especifique de la lista siguiente:</HTML>
+html_in_the_current_view=<HTML>Añade las capas definidas en el fichero a la vista activa.</HTML>
+idioma=Idioma
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+inches=Pulgadas
+incorrect_option=Opción incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>¡ATENCIÓN!</b><br>Versión en desarrollo. Puede contener errores importantes e incluso provocar daños en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la última versión estable.</html>
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o [3P]
+insert_central_point_polygon=Insertar punto central del polígono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar último punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point_arc_or_close=Insertar siguiente punto, Arco[A] o Cerrar polilínea[C] o Terminar[T]
+insert_next_point_line_or_close=Insertar punto siguiente, Linea[N], Cerrar polilínea[C] o Terminar[T]
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar polígono de selección[E]
+insert_number_sides=Insertar número de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner_or_square=Insertar punto de esquina opuesta o Cuadrado[C]
+insert_point_move=Insertar punto de desplazamiento
+insert_point_or_end=Insertar punto o finalizar geometría [E]
+insert_point_selection=Precise punto de selección
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Políg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius_or_second_point=Insertar rádio o segundo punto
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Precise ángulo de rotación
+insert_row=Insertar fila
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o ángulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rectángulo de selección
+insert_selection_last_point=Insertar esquina opuesta del rectángulo de selección
+insert_selection_point=Insertar punto de selección
+insert_third_point=Insertar tercer punto
+insertar_cajetin=Insertar cajetín
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=¿Desea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+insertar_polilinea=Insertar polilínea
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del polígono
+inter_arc=Arco interno
+inter_line=Línea interna
+internal_polygon=Polígono interno
+internal_polygon_=Polígono interno
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito en el círculo[I] o Circunscrito[C]<C>
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_priority_value=Valor de prioridad inválido
+invalid_value_for_gap=
+invert_selection=Invertir selección
+join_=UNIR
+layerName=Nombre de la capa
+layerType=Tipo de geometría
+layers_in_other_view=Capas en la vista que yo elija
+layers_in_the_current_view=Capas en la vista actual
+length=Tamaño
+length_of_field=Longitud de campo
+line_=LÍNEA
+line_type=Tipo línea
+load_from_xml=Cargar desde fichero XML (.rmf)
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.
+No puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.
+No puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+map_size_in_pixels=Tamaño del mapa (píxeles)
+mapa=Mapa
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al máximo 
+ numero de Features permitido. Puede aumentar el número de 
+Features recuperadas modificando el parámetro "Buffer"
+max_features=Máx. features
+max_length_is=La longitud máxima es
+minimum_size_of_line_incorrect=La longitud mínima de línea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala numérica
+mostrar_puntos=Mostrar numeración
+mostrar_rejilla=Mostrar rejilla
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+msg_save_raster=Se va a cancelar la operación. ¿Desea continuar?
+multi_type=Tipo múltiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto más cercano
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+new_layer=Nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next_point_or_end=Siguiente punto o finalizar[E]
+next_previous_add_del_cancel=Punto, Siguiente vértice[S], Anterior[A], Añadir[I] o Eliminar[E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegará ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegarán las vistas con conflicto
+nombre_no_valido=Nombre no válido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_columnas=Número de columnas
+num_filas=Número de filas
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operación cancelada
+optinos.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options=Opciones
+options.configuration.screen=Configuración de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posición de las ventanas.
+options.general.remember_windows_size=Recordar el tamaño de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.network.status=Estado de la conexión
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del polígono
+out_rectangle=Fuera del rectángulo
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar márgenes
+pila_de_comandos=Pila de comandos
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+plegar_despl=Plegar/Desplegar
+point_=PUNTO
+point_type=Tipo punto
+poligono=Polígono
+polilinea=polilínea
+polygon=Polígono
+polygon_=POLÍGONO
+polygon_type=Tipo Polígono
+polyline=Polilínea
+polyline_=POLILÍNEA
+poner_capas_a=Poner capas a ...
+postcode=Código postal
+postgis=PostGIS
+precision=Precisión
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+previous=Anterior
+previsualizacion=Previsualización
+primero=Primero
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+projection=Proyección
+propiedad=Propiedad
+propiedades_cajetin=Propiedades del cajetín
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+props=Propiedades
+ps=
+puerto=Puerto
+puntos=Puntos
+realces=Realces
+realmente_desea_guardar=¿Realmente desea guardar?
+realmente_desea_guardar_la_capa=¿Desea guardar la capa
+recargar=Recargar
+rectangle=Rectángulo
+rectangle_=RECTÁNGULO
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+reference_system=Sistema de Referencia
+rehacer=Rehacer
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometría
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+resolution=Resolución
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotación
+save_to_ascii=Exportar tabla de puntos a fichero de texto.
+save_to_xml=Salvar a fichero XML (.grf)
+scale_=ESCALAR
+script_sep=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selección compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas ráster
+seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por polígono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenará el ángulo con el que se mostrará el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el color con el que se mostrará la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará la fuente con el que se mostrará de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el alto con el que se mostrará la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_driver=Seleccione el driver
+select_features=Selecciona las capas
+select_fields=Seleccionar campos de la capa
+select_from_point=Seleccionar a partir de un punto
+select_geometry=Seleccione una geometría
+select_geometry_to_extend=Seleccionar geometría a extender
+select_geometry_type=Seleccione el tipo de geometría
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=Seleccione otra geometría o finalizar[E]
+selected_layer=Capa seleccionada
+selected_parameters=Parámetros seleccionados
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_=SELECCIONAR
+selection_up=Mover arriba la selección
+separator=Separador
+show_layer_names=Mostrar nombres de capas
+show_this_dialog_next_startup=Mostrar este diálogo la próxima vez
+shp=SHP
+si=sí
+simbolo=Símbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+size=Tamaño
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tamaño mínimo de las líneas que formarán las curvas.
+square=Esquina
+start_edition=Comenzar edición
+stop_edition=Terminar edición
+stretch=Estirar
+stretch_=ESTIRAR
+suprimir_objetos_origen=¿Suprimir objetos de origen?Si[S] o No[N] |N|
+symmetry=Simetría
+symmetry_=SIMETRÍA
+tamPixX=Tamaño pixel X
+tamPixY=Tamaño pixel Y
+tamanyo_pagina=Tamaño de página
+terminar=Terminar
+terminar_edicion=Terminar edición
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+texto=Texto
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podrá exportar los datos editados, pero no podrá guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+time=Tiempo
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+total=Total
+transparencia_pixel=Transparencia por pixel
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+ultimo=Último
+undo=Deshacer
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versión de Web Map Context no soportada
+unsupported_version=Versión no soportada
+url=url
+use_custom_size=Tamaño personalizado
+use_full_extent=Usar extensión total
+use_interpolation_method=Usar metodo de interpolación
+use_view_size=Tamaño de la vista
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexión al WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+will_be_truncated=será truncado
+y_en=y en
+yes=Si
+zone=Huso
+zoom_in_factor=Factor zoom más
+zoom_out_factor=Factor zoom menos
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties	(revision 42196)
@@ -0,0 +1,746 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+a_new_view=New view
+Abrir_Geoproceso=Open Geoprocess
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_field=Add field
+add_rows=Add rows
+add_vertex=Add vertex
+advanced=Advanced
+advanced_settings=Advanced options
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+algoritmo=Algorithm
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+Analisis=Analisis
+Analisis_Desc=
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Area_de_influencia_definida_por_una_distancia=Buffer defined by distance
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Atributos_Numericos=Numerical attributes
+attributeName=Name
+attributeType=Type
+Block_Size_=Block Size\:
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+box=box
+break=Break
+break_=Break
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+Campo_para_disolver=Field to dissolve
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_reproject_from_any_of=Unable to reproject from any of
+cantLoad=The WFS layer can't be loaded
+Capas_del_directorio=Layers on directory
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+Centrar_la_Vista_sobre_un_punto=Center view to point
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+circle_=CIRCLE
+circumscribed=Circumscribed
+city=City
+Clean=
+close_polyline=Close polyline
+Cobertura_de_datos=Data cover
+Cobertura_de_entrada=Input cover
+Cobertura_de_recorte=Clip cover
+Cobertura_de_salida=Output cover
+Coberturas_de_entrada=Input cover set
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Command stack
+compleja=
+complex_selection=Complex selection
+complex_selection_=COMPLEX SELECTION
+compress=Compression
+Compression_=Compression\:
+conection=Connection
+configurar_todas_las_extensiones=Configure all the extensions
+confirmacion=Confirm that...
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+connect=Connect
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+contact_info=Contact info
+contact_organization=Organization
+contiene_espacios_en_blanco=It has white space
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+coordenadas_vacias=Empty coordinates
+copiar=Copy
+copy=Copy
+copy_=COPY
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+Crear_Buffer=Create Buffer...
+Crear_Indice=Spatial index creation...
+Crear_Indice_Pregunta_1=Do you want to create an spatial index for layer
+crear_worldfile=Create worldfile
+created_with=Created with
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de\ =of 
+de\ 0=of 0
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_name=WFS Layer
+default_projection=Default projection
+default_value=Default Value
+define_fields=Define fields
+define_point=Define point
+defined_by_view_extent=Defined by the view\u0092s extent
+dehacer=Undo
+del=Delete
+delete_field=Delete field
+deleted_feature=Deleted feature
+Dentro_y_fuera=Inside and outside de polygon
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+Diferencia_Introduccion_de_datos=Difference. Fill in data
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Disolver_entidades=Dissolve entities
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edicion=Edition
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+edit_vertex_=EDIT VERTEX
+editar_vertices=Edit vertex
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=The element already exists
+Elija_una_herramienta_de_analisis=Choose an analisys tool
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+end=End
+end_polygon=End polygon
+Enlace_espacial=Spatial join
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+enter_layer_name=Enter layer name
+enter_path_to_file=Enter file path
+Error_atributo_no_numerico=Not numeric buffer field
+error_capa_puntos=Error loading the layer. Maybe the Georreferencing layer is not active.
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_chequeando_precondiciones=Check preconditions error
+Error_chequeo_tipo_geometria=Error during checking geometry type
+Error_distancia_buffer=You must enter a buffer distance
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+Error_escritura_resultados=Data writing error
+Error_exportando_SLD=Error exporting SLD
+Error_fallo_geoproceso=Error during geoprocess execution
+error_file_exists=The file already exists. Do you want to overwrite?
+error_file_not_writable=Could not create output file.
+Error_guardando_la_plantilla=Error saving the template
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_preparar_escritura_resultados=Error during preparation of result layer
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Error_spjoinmn_sin_funcion=In a 1-N spatial join you must specify sumarization functions
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+escala_desconocida=Unknown scale
+Escoger_Fun_Resumen=<-
+exploit=Exploit
+exploit_=EXPLOIT
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exporting_=Exporting
+exportJOP2Title=
+extend=Extend
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+feature=Layers
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+Ficheros_de_cartografia=Layer files
+Ficheros_SHP=SHP Files
+field=Field
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file=File
+file_name=File
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+formato_de_numero_incorrecto=Incorrect number format
+Fuera=Outside the polygon
+fuera_de_extent=The selected point is out of the image's extent
+Funciones_Sumarizacion=Group by functions
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw\:
+Geoprocesos=Geoprocesses
+georaster=Georeferencing
+georef=Georeference
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+georreferenciar=Georeference image
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+grado_polinomio=Polynom deegree
+Grid=Grid
+group_graphic_line=Group graphic line
+grupo=group
+guardar=Save
+height=Height
+Herramientas_de_analisis=Analisys Tools
+horizontal_space=Horizontal space
+host=Computer
+html_in_a_new_view=<HTML>Creates a new view into the project. The new view will contain all the layers defined in the file.</HTML>
+html_in_other_view=<HTML>Adds the layers to the selected view in the list.</HTML>
+html_in_the_current_view=<HTML>Adds the layers defined in the file to the current active view.</HTML>
+Icon_not_found_=Icon not found
+idioma=Language
+imagen_no_accesible=Unable to access the image
+Implimir=
+import_from_ascii=Import table from a CSV (.csv) file.
+import_map_context=Import maps from an OGC's Web Map Context file (.cml).
+inches=
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+Indexando_espacialmente=Spatially indexing the layer
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or [3P]
+insert_central_point_polygon=Insert central point of the polygon
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor_or_reference=Insert scale factor |2| or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point_arc_or_close=Insert next point, Arc [A] or Close [C]
+insert_next_point_line_or_close=Insert next point, Line [N] or Close [C]
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon [E]
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner_or_square=Insert point of opposite corner or square [C]
+insert_point_move=Insert point for move
+insert_point_or_end=Insert point or End geometry [E]
+insert_point_selection=Insert selection point
+insert_point_selection_or_types=Insert point or Circle [IC], Out rect.[OR], Polyg.[IP], Intern. pol.[CP], Out pol.[OP], Intern. circle [CC], Out circle [OC]
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point_or_factor=Insert origin or Reference Line or Scale Factor [F]
+insert_rotation_angle=Insert rotation angle
+insert_row=Insert row
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar_cajetin=Insert grid
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+insertar_polilinea=Insert polyline
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inter_arc=Internal arc
+inter_line=Internal line
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+Interseccion=Intersect
+Interseccion._Introduccion_de_datos=Intersect. Data input
+into_circle=Inscribed
+into_circle_or_circumscribed=Inscribed [I] o Circumscribed [C] in circle |C|
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+Juntar=Merge
+Juntar._Introduccion_de_datos=Merge. Data input
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+layerName=Layer name
+LayerName=Layer name
+layers_in_other_view=Layers in other view
+layers_in_the_current_view=Layers in the current view
+layerType=Geometry type
+length=Length
+length_of_field=Length of field
+line_=LINE
+line_type=Line type
+load_from_xml=Load from XML file (.rmf)
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+map_size_in_pixels=Map size (pixels)
+mapa=Map
+max_features=Max. features
+max_length_is=Max length is
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+Maximo=Maximum
+Mensaje_buffer=Computing buffers
+Mensaje_clip=Clip geoprocess...
+Mensaje_convexhull=Convex hull geoproces
+Mensaje_difference=Difference geoprocess...
+Mensaje_dissolve=Dissolve geoprocess....
+Mensaje_enlace_espacial=Spatial Join geoprocess...
+Mensaje_interseccion=Intersection geoprocess...
+Mensaje_juntar=Merge geoprocess...
+Mensaje_primera_pasada_union=Computing intersections...
+Mensaje_procesando_buffer=Processing buffers
+Mensaje_procesando_buffer2=Dissolving buffers...
+Mensaje_procesando_clip_primero=Computing clip polygon...
+Mensaje_procesando_clip_segundo=Clipping geometries...
+Mensaje_procesando_convexhull=Computing convex hull...
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_dissolves=Dissolving geometries...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_procesando_interseccion=Computing intersections...
+Mensaje_procesando_juntar=Merging geometries...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+Mensaje_union=Union geoprocess...
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+Minimo=Minimum
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_puntos=Show numbers
+mostrar_rejilla=Show grid
+move=Move
+move_=MOVE
+move_elements=Move elements
+move_handlers=Move handlers
+Mover_geo=Move georeferenced image.
+msg_save_raster=The operation will be canceled. Would you like to continue?
+multi_type=Multiple type
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_dxf=New DXF
+new_field=New field
+new_field_properties=New field properties
+new_layer=New layer
+new_postgis=New PostGIS
+new_shp=Nuevo SHP
+next_point_or_end=Next point or end
+next_previous_add_del_cancel=Point, Next vertex [S], Previous [A], Add [I] or Remove [E]
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+No_usar_buffer_redondeado=Rectangle end cap
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_columnas=Number of columns
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=
+Numero_anillos_concentricos=Number of radial buffers
+Numero_de_elementos_seleccionados=Number of selected features
+numero_decimales_mostrar=
+Obtener_mas_proximo=Use nearest geometry
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+Operacion_de_overlay=Overlay operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options=Options
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pila_de_comandos=commands stack
+pixel_point=
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+plegar_despl=Advanced
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point_=POINT
+point_type=Point type
+poligono=Polygon
+polilinea=polyline
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Polygon type
+polyline=Polyline
+polyline_=POLYLINE
+poner_capas_a=Set layers as
+Por_favor_active_la_capa=Please, activate the layer
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferences
+preferencias=Preferences
+Preferencias=Preferences
+previous=Previous
+previsualizacion=Preview
+primero=First
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+projection=Projection
+propiedad=Oroperty
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+props=Properties
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+ps=
+puerto=Port
+puntos=Points
+realces=Enhancement
+realmente_desea_guardar=Would you really like to save?
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+Recortar._Introduccion_de_datos=Clip. Data input
+rectangle=Rectangle
+rectangle_=RECTANGLE
+Recursos\ Disponibles=Available Resources
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+reference_system=Reference System
+rehacer=Redo
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+resolution=Resolution
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+save_to_ascii=Export table of points into a text file.
+save_to_xml=Save to XML (.grf)
+scale_=SCALE
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+Seleccion_por_capa=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+Seleccionar_Directorio=Path with layers...
+seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_driver=Select driver
+select_features=Select the layer
+select_fields=Select the layer fields
+select_from_point=Select from point
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_other_geometry_or_end=Select other geometry or End[E]
+Selected=Selected
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selectfromview=Select a point from the view
+selection=Selection
+selection_=SELECTION
+selection_up=Move selection to top
+separator=Separator
+Show\ Errors=
+show_layer_names=Show layer names
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+size=Size
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Solo_disolver_adyacentes=Only dissolve adjacents.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+square=Corner
+start_edition=Start edition
+stop_edition=Finish edition
+stretch=Stretch
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry=Symmetry
+symmetry_=SYMMETRY
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+Terminar=Finish
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+texto=Text
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+time=Time
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Topology=
+total=Total
+transparencia_pixel=Transparency per pixel
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+ultimo=Last
+Unable_to_find_icon=Unable to find icon
+undo=Undo
+Union._Introduccion_de_datos=Union. Data input
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+unsupported_version=Unsupported version
+url=url
+Usar_los_campos_de_la_capa=Use fields from cover
+Usar_solamente_los_elementos_seleccionados=Use selected features only
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Can\u0092t connect to WCS
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+WFSLayer=WFS Layer
+will_be_truncated=
+y_en=and in
+yes=Yes
+zone=Zone
+Zoom_a_la_capa=Zoom to layer
+Zoom_Completo=Full extent
+zoom_in_factor=Zoom in factor
+Zoom_Menos=Zoom out
+zoom_out_factor=Zoom out factor
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties	(revision 42196)
@@ -0,0 +1,746 @@
+#Translations for language [cs]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+a_new_view=
+Abrir_Geoproceso=
+accept_tip=
+add_delete_edit_fields=
+add_field=
+add_rows=
+add_vertex=
+advanced=
+advanced_settings=
+Agregacion=
+Agregacion_Desc=
+agrupacion=
+ajustar_rejilla=
+algoritmo=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+Analisis=
+Analisis_Desc=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+Atributos_Numericos=
+attributeName=
+attributeType=
+Block_Size_=
+borrar_todos=
+borrar_uno=
+box=
+break=
+break_=
+brillo=
+brillo_y_contraste=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Campo_para_disolver=
+cancel_tip=
+cancelar_edicion=
+cant_reproject_from_any_of=
+cantLoad=
+Capas_del_directorio=
+capas_edition_cache=
+cargar=
+centimeters=
+Centrar_la_Vista_sobre_un_punto=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+circle_=
+circumscribed=
+city=
+Clean=
+close_polyline=
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Coberturas_de_entrada=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=
+compleja=
+complex_selection=
+complex_selection_=
+compress=
+Compression_=
+conection=
+configurar_todas_las_extensiones=
+confirmacion=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+connect=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+contact_info=
+contact_organization=
+contiene_espacios_en_blanco=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+coordenadas_vacias=
+copiar=
+copy=
+copy_=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+Crear_Buffer=
+Crear_Indice=
+Crear_Indice_Pregunta_1=
+crear_worldfile=
+created_with=
+cross_circle=
+cross_polygon=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+DBManager=
+de\ =
+de\ 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_name=
+default_projection=
+default_value=
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+deleted_feature=
+Dentro_y_fuera=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Diferencia_Introduccion_de_datos=
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edicion=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+edit_vertex_=
+editar_vertices=
+Edition=
+Edition_Properties=
+Ejecutando\ comando\:\ =
+elemento_ya_existe=
+Elija_una_herramienta_de_analisis=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+end=
+end_polygon=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+enter_layer_name=
+enter_path_to_file=
+Error_atributo_no_numerico=
+error_capa_puntos=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+error_file_exists=
+error_file_not_writable=
+Error_guardando_la_plantilla=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_preparar_escritura_resultados=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+error_writting_file=
+errores_csv=
+errorMessageJComboBoxItemsSeekerConfigurable=
+escala_desconocida=
+Escoger_Fun_Resumen=
+exploit=
+exploit_=
+export_to_map_context=
+exportando_features=
+exporting_=
+exportJOP2Title=
+extend=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+feature=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=
+Ficheros_SHP=
+field=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file=
+file_name=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+Flatness=
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=
+Fuera=
+fuera_de_extent=
+Funciones_Sumarizacion=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+Gestor_de_Geoprocesos=
+gml=
+gml_files=
+grado_polinomio=
+Grid=
+group_graphic_line=
+grupo=
+guardar=
+height=
+Herramientas_de_analisis=
+horizontal_space=
+host=
+html_in_a_new_view=
+html_in_other_view=
+html_in_the_current_view=
+Icon_not_found_=
+idioma=
+imagen_no_accesible=
+Implimir=
+import_from_ascii=
+import_map_context=
+inches=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+Indexando_espacialmente=
+indexar_campos=
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_cajetin=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+insertar_polilinea=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+Interleave_=
+internal_polygon=
+internal_polygon_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+into_circle=
+into_circle_or_circumscribed=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+Juntar=
+Juntar._Introduccion_de_datos=
+Las_traducciones_no_pudieron_ser_cargadas=
+Launcher.error_getting_class_loader_for_status_bar_control=
+layerName=
+LayerName=
+layers_in_other_view=
+layers_in_the_current_view=
+layerType=
+length=
+length_of_field=
+line_=
+line_type=
+load_from_xml=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+map_size_in_pixels=
+mapa=
+max_features=
+max_length_is=
+maxFeatures_aviso=
+MaxFeaturesEditionCache=
+Maximo=
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages.no_se_encontro_la_traduccion_para=
+Minimo=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_puntos=
+mostrar_rejilla=
+move=
+move_=
+move_elements=
+move_handlers=
+Mover_geo=
+msg_save_raster=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+nearest_point=
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_field_properties=
+new_layer=
+new_postgis=
+new_shp=
+next_point_or_end=
+next_previous_add_del_cancel=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_usar_buffer_redondeado=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_columnas=
+num_filas=
+Num_intervalos=
+num_lados_insuficiente=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+numero_decimales_mostrar=
+Obtener_mas_proximo=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+Operacion_de_overlay=
+optinos.network.click_to_test_connection=
+options=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+out_circle=
+out_polygon=
+out_rectangle=
+Overlay=
+Overlay_Desc=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+Photometric_=
+pila_de_comandos=
+pixel_point=
+Plain=
+plantilla=
+please_insert_new_field_name=
+plegar_despl=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+Por_favor_active_la_capa=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+Preferences=
+preferencias=
+Preferencias=
+previous=
+previsualizacion=
+primero=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+Progressive_=
+projection=
+propiedad=
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=
+props=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+ps=
+puerto=
+puntos=
+realces=
+realmente_desea_guardar=
+realmente_desea_guardar_la_capa=
+recargar=
+Recortar._Introduccion_de_datos=
+rectangle=
+rectangle_=
+Recursos\ Disponibles=
+redo=
+redo_error=
+reference=
+reference_system=
+rehacer=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_row=
+remove_rows=
+rename_field=
+resolution=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+save_to_ascii=
+save_to_xml=
+scale_=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=
+seleccion_compleja=
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+Seleccionar_Directorio=
+seleccionar_fichero=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_driver=
+select_features=
+select_fields=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+Selected=
+selected_layer=
+selected_parameters=
+selectfromview=
+selection=
+selection_=
+selection_up=
+separator=
+Show\ Errors=
+show_layer_names=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+size=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Solo_disolver_adyacentes=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+Terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+texto=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+time=
+to_annotation=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Topology=
+total=
+transparencia_pixel=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+ultimo=
+Unable_to_find_icon=
+undo=
+Union._Introduccion_de_datos=
+unsupported_crs=
+unsupported_map_context_version=
+unsupported_version=
+url=
+Usar_los_campos_de_la_capa=
+Usar_solamente_los_elementos_seleccionados=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+WFSLayer=
+will_be_truncated=
+y_en=
+yes=
+zone=
+Zoom_a_la_capa=
+Zoom_Completo=
+zoom_in_factor=
+Zoom_Menos=
+zoom_out_factor=
+Zoom_previo=
+Zoom_sgte=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,750 @@
+1:=
+Abrir_Geoproceso=Open Geoprocess
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+Analisis=Analisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Area_de_influencia_definida_por_una_distancia=Buffer defined by distance
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Atributos_Numericos=Numerical attributes
+Block_Size_=Block Size:
+Campo_para_disolver=Field to dissolve
+Capas_del_directorio=Layers on directory
+Centrar_la_Vista_sobre_un_punto=Center view to point
+Clean=
+Cobertura_de_datos=Data cover
+Cobertura_de_entrada=Input cover
+Cobertura_de_recorte=Clip cover
+Cobertura_de_salida=Output cover
+Coberturas_de_entrada=Input cover set
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+Crear_Buffer=Create Buffer...
+Crear_Indice=Spatial index creation...
+Crear_Indice_Pregunta_1=Do you want to create an spatial index for layer
+DBManager=DataBase Manager
+Dentro_y_fuera=Inside and outside de polygon
+Diferencia_Introduccion_de_datos=Difference. Fill in data
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Disolver_entidades=Dissolve entities
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando comando: =Execute command:
+Elija_una_herramienta_de_analisis=Choose an analisys tool
+Enlace_espacial=Spatial join
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+Error_atributo_no_numerico=Not numeric buffer field
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_chequeando_precondiciones=Check preconditions error
+Error_chequeo_tipo_geometria=Error during checking geometry type
+Error_distancia_buffer=You must enter a buffer distance
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+Error_escritura_resultados=Data writing error
+Error_exportando_SLD=Error exporting SLD
+Error_fallo_geoproceso=Error during geoprocess execution
+Error_guardando_la_plantilla=Error saving the template
+Error_preparar_escritura_resultados=Error during preparation of result layer
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Error_spjoinmn_sin_funcion=In a 1-N spatial join you must specify sumarization functions
+Escoger_Fun_Resumen=<-
+Ficheros_SHP=SHP Files
+Ficheros_de_cartografia=Layer files
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+Fuera=Outside the polygon
+Funciones_Sumarizacion=Group by functions
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw:
+Geoprocesos=Geoprocesses
+Gestor_de_Geoprocesos=Geoprocess toolbox
+Grid=Grid
+Herramientas_de_analisis=Analisys Tools
+Icon_not_found_=Icon not found
+Implimir=
+Indexando_espacialmente=Spatially indexing the layer
+Interleave_=Interleave:
+Interseccion=Intersect
+Interseccion._Introduccion_de_datos=Intersect. Data input
+Juntar=Merge
+Juntar._Introduccion_de_datos=Merge. Data input
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+LayerName=Layer name
+MaxFeaturesEditionCache=Max features edition cache
+Maximo=Maximum
+Mensaje_buffer=Computing buffers
+Mensaje_clip=Clip geoprocess...
+Mensaje_convexhull=Convex hull geoproces
+Mensaje_difference=Difference geoprocess...
+Mensaje_dissolve=Dissolve geoprocess....
+Mensaje_enlace_espacial=Spatial Join geoprocess...
+Mensaje_interseccion=Intersection geoprocess...
+Mensaje_juntar=Merge geoprocess...
+Mensaje_primera_pasada_union=Computing intersections...
+Mensaje_procesando_buffer=Processing buffers
+Mensaje_procesando_buffer2=Dissolving buffers...
+Mensaje_procesando_clip_primero=Computing clip polygon...
+Mensaje_procesando_clip_segundo=Clipping geometries...
+Mensaje_procesando_convexhull=Computing convex hull...
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_dissolves=Dissolving geometries...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_procesando_interseccion=Computing intersections...
+Mensaje_procesando_juntar=Merging geometries...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+Mensaje_union=Union geoprocess...
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+Minimo=Minimum
+Mover_geo=Move georeferenced image.
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+No_usar_buffer_redondeado=Rectangle end cap
+Num_intervalos=Number of Intervals
+Numero_anillos_concentricos=Number of radial buffers
+Numero_de_elementos_seleccionados=Number of selected features
+Obtener_mas_proximo=Use nearest geometry
+Operacion_de_overlay=Overlay operation
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+Photometric_=Photometric:
+Plain=Regular
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=Please, activate the layer
+Preferences=Preferences
+Preferencias=Preferences
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+Recortar._Introduccion_de_datos=Clip. Data input
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selection by Layer
+Seleccionar_Directorio=Path with layers...
+Selected=Selected
+Show Errors=
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Solo_disolver_adyacentes=Only dissolve adjacents.
+Terminar=Finish
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+Union._Introduccion_de_datos=Union. Data input
+Usar_los_campos_de_la_capa=Use fields from cover
+Usar_solamente_los_elementos_seleccionados=Use selected features only
+WFSLayer=WFS Layer
+Zoom_Completo=Full extent
+Zoom_Menos=Zoom out
+Zoom_a_la_capa=Zoom to layer
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom
+a_new_view=New view
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_field=Add field
+add_rows=Add rows
+add_vertex=Add vertex
+advanced=Advanced
+advanced_settings=Advanced options
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+algoritmo=Algorithm
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+attributeName=Name
+attributeType=Type
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+box=box
+break=Break
+break_=Break
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cantLoad=The WFS layer can't be loaded
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+circle_=CIRCLE
+circumscribed=Circumscribed
+city=City
+close_polyline=Close polyline
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Command stack
+compleja=
+complex_selection=Complex selection
+complex_selection_=COMPLEX SELECTION
+compress=Compression
+conection=Connection
+configurar_todas_las_extensiones=Configure all the extensions
+confirmacion=Confirm that...
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+connect=Connect
+contact_info=Contact info
+contact_organization=Organization
+contiene_espacios_en_blanco=It has white space
+coordenadas_vacias=Empty coordinates
+copiar=Copy
+copy=Copy
+copy_=COPY
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+crear_worldfile=Create worldfile
+created_with=Created with
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+de =of 
+de 0=of 0
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_name=WFS Layer
+default_projection=Default projection
+default_value=Default Value
+define_fields=Define fields
+define_point=Define point
+defined_by_view_extent=Defined by the views extent
+dehacer=Undo
+del=Delete
+delete_field=Delete field
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=¿Do you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=¿Do you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edicion=Edition
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+edit_vertex_=EDIT VERTEX
+editar_vertices=Edit vertex
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+end=End
+end_polygon=End polygon
+enter_layer_name=Enter layer name
+enter_path_to_file=Enter file path
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_capa_puntos=Error loading the layer. Maybe the Georreferencing layer is not active.
+error_file_exists=The file already exists. Do you want to overwrite?
+error_file_not_writable=Could not create output file.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+escala_desconocida=Unknown scale
+exploit=Exploit
+exploit_=EXPLOIT
+exportJOP2Title=
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exporting_=Exporting
+extend=Extend
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+feature=Layers
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field=Field
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file=File
+file_name=File
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+formato_de_numero_incorrecto=Incorrect number format
+fuera_de_extent=The selected point is out of the image's extent
+georaster=Georeferencing
+georef=Georeference
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+georreferenciar=Georeference image
+gml=GML
+gml_files=GML Files
+grado_polinomio=Polynom deegree
+group_graphic_line=Group graphic line
+grupo=group
+guardar=Save
+height=Height
+horizontal_space=Horizontal space
+host=Computer
+html_in_a_new_view=<HTML>Creates a new view into the project. The new view will contain all the layers defined in the file.</HTML>
+html_in_other_view=<HTML>Adds the layers to the selected view in the list.</HTML>
+html_in_the_current_view=<HTML>Adds the layers defined in the file to the current active view.</HTML>
+idioma=Language
+imagen_no_accesible=Unable to access the image
+import_from_ascii=Import table from a CSV (.csv) file.
+import_map_context=Import maps from an OGC's Web Map Context file (.cml).
+inches=
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or [3P]
+insert_central_point_polygon=Insert central point of the polygon
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor_or_reference=Insert scale factor |2| or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point_arc_or_close=Insert next point, Arc [A] or Close [C]
+insert_next_point_line_or_close=Insert next point, Line [N] or Close [C]
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon [E]
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner_or_square=Insert point of opposite corner or square [C]
+insert_point_move=Insert point for move
+insert_point_or_end=Insert point or End geometry [E]
+insert_point_selection=Insert selection point
+insert_point_selection_or_types=Insert point or Circle [IC], Out rect.[OR], Polyg.[IP], Intern. pol.[CP], Out pol.[OP], Intern. circle [CC], Out circle [OC]
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point_or_factor=Insert origin or Reference Line or Scale Factor [F]
+insert_rotation_angle=Insert rotation angle
+insert_row=Insert row
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar_cajetin=Insert grid
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+insertar_polilinea=Insert polyline
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inter_arc=Internal arc
+inter_line=Internal line
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+into_circle=Inscribed
+into_circle_or_circumscribed=Inscribed [I] o Circumscribed [C] in circle |C|
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+layerName=Layer name
+layerType=Geometry type
+layers_in_other_view=Layers in other view
+layers_in_the_current_view=Layers in the current view
+length=Length
+length_of_field=Length of field
+line_=LINE
+line_type=Line type
+load_from_xml=Load from XML file (.rmf)
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.
+It cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.
+It cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+map_size_in_pixels=Map size (pixels)
+mapa=Map
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase 
+the amount of Features recovered by modifying the 
+"Buffer" parameter.
+max_features=Max. features
+max_length_is=Max length is
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_puntos=Show numbers
+mostrar_rejilla=Show grid
+move=Move
+move_=MOVE
+move_elements=Move elements
+move_handlers=Move handlers
+msg_save_raster=The operation will be canceled. Would you like to continue?
+multi_type=Multiple type
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_dxf=New DXF
+new_field=New field
+new_field_properties=New field properties
+new_layer=New layer
+new_postgis=New PostGIS
+new_shp=Nuevo SHP
+next_point_or_end=Next point or end
+next_previous_add_del_cancel=Point, Next vertex [S], Previous [A], Add [I] or Remove [E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_columnas=Number of columns
+num_filas=Number of rows
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options=Options
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+pila_de_comandos=commands stack
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+plegar_despl=Advanced
+point_=POINT
+point_type=Point type
+poligono=Polygon
+polilinea=polyline
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Polygon type
+polyline=Polyline
+polyline_=POLYLINE
+poner_capas_a=Set layers as
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+previous=Previous
+previsualizacion=Preview
+primero=First
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+projection=Projection
+propiedad=Oroperty
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+props=Properties
+ps=
+puerto=Port
+puntos=Points
+realces=Enhancement
+realmente_desea_guardar=Would you really like to save?
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+rectangle=Rectangle
+rectangle_=RECTANGLE
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+reference_system=Reference System
+rehacer=Redo
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+resolution=Resolution
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+save_to_ascii=Export table of points into a text file.
+save_to_xml=Save to XML (.grf)
+scale_=SCALE
+script_sep=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the labels text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_driver=Select driver
+select_features=Select the layer
+select_fields=Select the layer fields
+select_from_point=Select from point
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_other_geometry_or_end=Select other geometry or End[E]
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selectfromview=Select a point from the view
+selection=Selection
+selection_=SELECTION
+selection_up=Move selection to top
+separator=Separator
+show_layer_names=Show layer names
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+size=Size
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+square=Corner
+start_edition=Start edition
+stop_edition=Finish edition
+stretch=Stretch
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry=Symmetry
+symmetry_=SYMMETRY
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tamanyo_pagina=Page size
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+texto=Text
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+time=Time
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+total=Total
+transparencia_pixel=Transparency per pixel
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+ultimo=Last
+undo=Undo
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+unsupported_version=Unsupported version
+url=url
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Cant connect to WCS
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+will_be_truncated=
+y_en=and in
+yes=Yes
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties	(revision 42196)
@@ -0,0 +1,746 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+a_new_view=Vista nueva
+Abrir_Geoproceso=Abrir Geoproceso
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_field=A\u00f1adir campo
+add_rows=A\u00f1adir filas
+add_vertex=A\u00f1adir v\u00e9rtice
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+ajustar_rejilla=Ajustar rejilla
+algoritmo=Algoritmo
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+anadir_tag=A\u00f1adir etiqueta
+Analisis=An\u00e1lisis
+Analisis_Desc=
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=\u00c1rea
+Area_de_influencia_definida_por_un_campo=\u00c1rea de influencia definida por un campo
+Area_de_influencia_definida_por_una_distancia=\u00c1rea de influencia definida por una distancia
+Areas_de_influencia._Introduccion_de_datos=\u00c1reas de influencia. Introducci\u00f3n de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Atributos_Numericos=Atributos num\u00e9ricos
+attributeName=Nombre
+attributeType=Tipo
+Block_Size_=Tama\u00f1o de bloque\:
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+box=Cajet\u00edn
+break=
+break_=Break
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+Campo_para_disolver=Campo para disolver
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edici\u00f3n
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+cantLoad=No se puede cargar la capa WFS
+Capas_del_directorio=Capas del directorio
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Cent\u00edmetros
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=C\u00edrculo
+circle_=C\u00cdRCULO
+circumscribed=Circunscrito
+city=Ciudad
+Clean=
+close_polyline=Cerrar polil\u00ednea
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de salida
+Coberturas_de_entrada=Capas de entrada
+coincidir_tamanyo=Coincidir tama\u00f1o
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Pila de comandos
+compleja=
+complex_selection=Selecci\u00f3n compleja
+complex_selection_=SELECCI\u00d3N COMPLEJA
+compress=Compresi\u00f3n
+Compression_=Compresi\u00f3n\:
+conection=Conexi\u00f3n
+configurar_todas_las_extensiones=Configurar todas las extensiones
+confirmacion=Confirmaci\u00f3n
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+connect=Conectar
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+contact_info=Informaci\u00f3n de contacto
+contact_organization=Organizaci\u00f3n
+contiene_espacios_en_blanco=Contiene espacios en blanco
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducci\u00f3n de datos
+coordenadas_vacias=Coordenadas vac\u00edas
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=Pa\u00eds
+coverage=Cobertura
+Crear_Buffer=Crear \u00e1rea de influencia
+Crear_Indice=Crear \u00edndice espacial...
+Crear_Indice_Pregunta_1=\u00bfDesea crear un \u00edndice espacial para la capa?
+crear_worldfile=Crear fichero de georreferenciaci\u00f3n (worldfile)
+created_with=Creado con
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/Contiene el pol\u00edgono
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexi\u00f3n a Base de Datos
+datum=Datum
+DBManager=Gestor de Base de datos
+de\ =
+de\ 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener informaci\u00f3n.
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_name=Capa WFS
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+define_fields=Define los campos
+define_point=Defina el punto
+defined_by_view_extent=Usar extensi\u00f3n de la vista
+dehacer=Deshacer
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+Dentro_y_fuera=Dentro y fuera del pol\u00edgono
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripci\u00f3n
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+Diferencia_Introduccion_de_datos=Diferencia. Introducci\u00f3n de datos
+Disolver._Introduccion_de_datos=Disolver. Introducci\u00f3n de datos
+Disolver_entidades=Disolver entidades
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar s\u00f3lo el texto
+dxf=dxf
+edicion=Edici\u00f3n
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar v\u00e9rtice
+edit_vertex_=EDITAR V\u00c9RTICE
+editar_vertices=Editar V\u00e9rtices
+Edition=Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=El elemento ya existe
+Elija_una_herramienta_de_analisis=Elija una herramienta de an\u00e1lisis
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+end=Terminar
+end_polygon=Finalizar pol\u00edgono
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducci\u00f3n de datos
+enter_layer_name=Introducir nombre de la capa
+enter_path_to_file=Introducir la ruta del fichero
+Error_atributo_no_numerico=Atributo para distancia de buffer no num\u00e9rico
+error_capa_puntos=Error al cargar la capa. Puede que la capa de Georreferenciaci\u00f3n no est\u00e9 activa.
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_chequeando_precondiciones=Error verificando precondiciones
+Error_chequeo_tipo_geometria=Error al chequear el tipo de geometria
+Error_distancia_buffer=Debes introducir una distancia de buffer
+Error_ejecucion=Error de ejecuci\u00f3n
+Error_entrada_datos=Error de entrada de datos
+Error_escritura_resultados=Error de escritura de resultados
+Error_exportando_SLD=Error exportando SLD
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecuci\u00f3n del geoproceso
+error_file_exists=El fichero ya existe.\u00bfDesea sobreescribirlo?.
+error_file_not_writable=No es posible crear el fichero de salida.
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Error_spjoinmn_sin_funcion=No has seleccionado ninguna funci\u00f3n resumen para los atributos num\u00e9ricos
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+escala_desconocida=Escala desconocida
+Escoger_Fun_Resumen=<-
+exploit=Explotar
+exploit_=EXPLOTAR
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exporting_=Exportando
+exportJOP2Title=
+extend=Alargar
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+feature=Capas
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+Ficheros_de_cartografia=Ficheros de datos cartogr\u00e1ficos
+Ficheros_SHP=Ficheros SHP
+field=Campo
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file=Archivo
+file_name=Archivo
+file_version=Versi\u00f3n del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+Flatness=
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_de_numero_incorrecto=Formato de n\u00famero incorrecto.
+Fuera=Fuera del pol\u00edgono
+fuera_de_extent=El punto seleccionado est\u00e1 fuera del extent de la imagen
+Funciones_Sumarizacion=Funciones de agrupamiento
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw\:
+Geoprocesos=Geoprocesos
+georaster=Georreferenciaci\u00f3n
+georef=Georreferenciar
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+georreferenciar=Georreferenciar
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+grado_polinomio=Grado del polinomio
+Grid=Rejilla
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+guardar=Guardar
+height=Alto
+Herramientas_de_analisis=Herramientas de an\u00e1lisis
+horizontal_space=Espacio horizontal
+host=M\u00e1quina
+html_in_a_new_view=<HTML>Crea una vista nueva en el proyecto. La nueva vista contendr\u00e1 todas las capas definidas por el fichero.</HTML>
+html_in_other_view=<HTML>A\u00f1ade las capas en la vista que especifique de la lista siguiente\:</HTML>
+html_in_the_current_view=<HTML>A\u00f1ade las capas definidas en el fichero a la vista activa.</HTML>
+Icon_not_found_=No se encontr\u00f3 el icono
+idioma=Idioma
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+Implimir=
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+inches=Pulgadas
+incorrect_option=Opci\u00f3n incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+Indexando_espacialmente=Indexando espacialmente la capa
+indexar_campos=Indexar campos
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o [3P]
+insert_central_point_polygon=Insertar punto central del pol\u00edgono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar \u00faltimo punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point_arc_or_close=Insertar siguiente punto, Arco[A] o Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_line_or_close=Insertar punto siguiente, Linea[N], Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar pol\u00edgono de selecci\u00f3n[E]
+insert_number_sides=Insertar n\u00famero de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner_or_square=Insertar punto de esquina opuesta o Cuadrado[C]
+insert_point_move=Insertar punto de desplazamiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_point_selection=Precise punto de selecci\u00f3n
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius_or_second_point=Insertar r\u00e1dio o segundo punto
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Precise \u00e1ngulo de rotaci\u00f3n
+insert_row=Insertar fila
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o \u00e1ngulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insert_third_point=Insertar tercer punto
+insertar_cajetin=Insertar cajet\u00edn
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+insertar_polilinea=Insertar polil\u00ednea
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del pol\u00edgono
+inter_arc=Arco interno
+inter_line=L\u00ednea interna
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+internal_polygon_=Pol\u00edgono interno
+Interseccion=Intersecci\u00f3n
+Interseccion._Introduccion_de_datos=Intersecci\u00f3n. Introducci\u00f3n de datos
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito en el c\u00edrculo[I] o Circunscrito[C]<C>
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+join_=UNIR
+Juntar=Juntar
+Juntar._Introduccion_de_datos=Juntar. Introducci\u00f3n de datos
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+layerName=Nombre de la capa
+LayerName=Nombre de la capa
+layers_in_other_view=Capas en la vista que yo elija
+layers_in_the_current_view=Capas en la vista actual
+layerType=Tipo de geometr\u00eda
+length=Tama\u00f1o
+length_of_field=Longitud de campo
+line_=L\u00cdNEA
+line_type=Tipo l\u00ednea
+load_from_xml=Cargar desde fichero XML (.rmf)
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+map_size_in_pixels=Tama\u00f1o del mapa (p\u00edxeles)
+mapa=Mapa
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+Maximo=M\u00e1ximo
+Mensaje_buffer=Calculando \u00e1reas de influencia...
+Mensaje_clip=Geoproceso recortar...
+Mensaje_convexhull=Geoproceso convex hull...
+Mensaje_difference=Geoproceso diferencia...
+Mensaje_dissolve=Geoproceso dissolve....
+Mensaje_enlace_espacial=Geoproceso enlace espacial...
+Mensaje_interseccion=Geoproceso intersecci\u00f3n...
+Mensaje_juntar=Geoproceso juntar...
+Mensaje_primera_pasada_union=Calculando intersecciones...
+Mensaje_procesando_buffer=Generando buffers...
+Mensaje_procesando_buffer2=Disolviendo buffers...
+Mensaje_procesando_clip_primero=Calculando pol\u00edgono de recorte
+Mensaje_procesando_clip_segundo=Recortando geometrias
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_dissolves=Dissolviendo geometrias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_procesando_interseccion=Calculando intersecciones...
+Mensaje_procesando_juntar=Juntando geometrias...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+Mensaje_union=Geoproceso union...
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+Minimo=M\u00ednimo
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_puntos=Mostrar numeraci\u00f3n
+mostrar_rejilla=Mostrar rejilla
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+Mover_geo=Mover imagen a georreferenciar
+msg_save_raster=Se va a cancelar la operaci\u00f3n. \u00bfDesea continuar?
+multi_type=Tipo m\u00faltiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto m\u00e1s cercano
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+new_layer=Nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next_point_or_end=Siguiente punto o finalizar[E]
+next_previous_add_del_cancel=Punto, Siguiente v\u00e9rtice[S], Anterior[A], A\u00f1adir[I] o Eliminar[E]
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quiz\u00e1 olvid\u00f3 inicializar la clase.
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+No_usar_buffer_redondeado=No usar borde redondeado
+nombre_no_valido=Nombre no v\u00e1lido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_columnas=N\u00famero de columnas
+num_filas=N\u00famero de filas
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+Numero_anillos_concentricos=N\u00famero de anillos conc\u00e9ntricos
+Numero_de_elementos_seleccionados=N\u00famero de elementos seleccionados
+numero_decimales_mostrar=N\u00famero decimales
+Obtener_mas_proximo=Usar el mas pr\u00f3ximo
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operaci\u00f3n cancelada
+Operacion_de_overlay=Operaciones de solape
+optinos.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options=Opciones
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del pol\u00edgono
+out_rectangle=Fuera del rect\u00e1ngulo
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pila_de_comandos=Pila de comandos
+pixel_point=
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+plegar_despl=Plegar/Desplegar
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point_=PUNTO
+point_type=Tipo punto
+poligono=Pol\u00edgono
+polilinea=polil\u00ednea
+polygon=Pol\u00edgono
+polygon_=POL\u00cdGONO
+polygon_type=Tipo Pol\u00edgono
+polyline=Polil\u00ednea
+polyline_=POLIL\u00cdNEA
+poner_capas_a=Poner capas a ...
+Por_favor_active_la_capa=Por favor active la capa
+postcode=C\u00f3digo postal
+postgis=PostGIS
+precision=Precisi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferencias
+preferencias=Preferencias
+Preferencias=Preferencias
+previous=Anterior
+previsualizacion=Previsualizaci\u00f3n
+primero=Primero
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+propiedades_cajetin=Propiedades del cajet\u00edn
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+props=Propiedades
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+ps=
+puerto=Puerto
+puntos=Puntos
+realces=Realces
+realmente_desea_guardar=\u00bfRealmente desea guardar?
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+Recortar._Introduccion_de_datos=Recortar. Introducci\u00f3n de datos
+rectangle=Rect\u00e1ngulo
+rectangle_=RECT\u00c1NGULO
+Recursos\ Disponibles=Recursos Disponibles
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+reference_system=Sistema de Referencia
+rehacer=Rehacer
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+resolution=Resoluci\u00f3n
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotaci\u00f3n
+save_to_ascii=Exportar tabla de puntos a fichero de texto.
+save_to_xml=Salvar a fichero XML (.grf)
+scale_=ESCALAR
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+Seleccion_por_capa=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+Seleccionar_Directorio=Carpeta con capas...
+seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_driver=Seleccione el driver
+select_features=Selecciona las capas
+select_fields=Seleccionar campos de la capa
+select_from_point=Seleccionar a partir de un punto
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_geometry_type=Seleccione el tipo de geometr\u00eda
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+Selected=Capa seleccionada
+selected_layer=Capa seleccionada
+selected_parameters=Par\u00e1metros seleccionados
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_=SELECCIONAR
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Show\ Errors=
+show_layer_names=Mostrar nombres de capas
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+si=s\u00ed
+simbolo=S\u00edmbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+size=Tama\u00f1o
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+Solo_disolver_adyacentes=S\u00f3lo disolver adyacentes.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+square=Esquina
+start_edition=Comenzar edici\u00f3n
+stop_edition=Terminar edici\u00f3n
+stretch=Estirar
+stretch_=ESTIRAR
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symmetry=Simetr\u00eda
+symmetry_=SIMETR\u00cdA
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+Terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+texto=Texto
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+time=Tiempo
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Topology=
+total=Total
+transparencia_pixel=Transparencia por pixel
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+ultimo=\u00daltimo
+Unable_to_find_icon=No se pudo encontrar el icono
+undo=Deshacer
+Union._Introduccion_de_datos=Uni\u00f3n. Introducci\u00f3n de datos
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versi\u00f3n de Web Map Context no soportada
+unsupported_version=Versi\u00f3n no soportada
+url=url
+Usar_los_campos_de_la_capa=Usar los campos de la capa
+Usar_solamente_los_elementos_seleccionados=Usar solamente los elementos seleccionados
+use_custom_size=Tama\u00f1o personalizado
+use_full_extent=Usar extensi\u00f3n total
+use_interpolation_method=Usar metodo de interpolaci\u00f3n
+use_view_size=Tama\u00f1o de la vista
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+WFSLayer=Capa WFS
+will_be_truncated=ser\u00e1 truncado
+y_en=y en
+yes=Si
+zone=Huso
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Completo=Zoom completo
+zoom_in_factor=Factor zoom m\u00e1s
+Zoom_Menos=Zoom menos
+zoom_out_factor=Factor zoom menos
+Zoom_previo=Extensi\u00f3n anterior
+Zoom_sgte=Extensi\u00f3n siguiente

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties-UTF8	(revision 42196)
@@ -0,0 +1,744 @@
+1:=
+Abrir_Geoproceso=
+Agregacion=
+Agregacion_Desc=
+Analisis=
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+Atributos_Numericos=
+Block_Size_=
+Campo_para_disolver=
+Capas_del_directorio=
+Centrar_la_Vista_sobre_un_punto=
+Clean=
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Coberturas_de_entrada=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+Crear_Buffer=
+Crear_Indice=
+Crear_Indice_Pregunta_1=
+DBManager=
+Dentro_y_fuera=
+Diferencia_Introduccion_de_datos=
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+Edition=
+Edition_Properties=
+Ejecutando comando: =
+Elija_una_herramienta_de_analisis=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+Error_atributo_no_numerico=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+Error_guardando_la_plantilla=
+Error_preparar_escritura_resultados=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+Escoger_Fun_Resumen=
+Ficheros_SHP=
+Ficheros_de_cartografia=
+Flatness=
+Formato_de_numero_erroneo=
+Fuera=
+Funciones_Sumarizacion=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+Gestor_de_Geoprocesos=
+Grid=
+Herramientas_de_analisis=
+Icon_not_found_=
+Implimir=
+Indexando_espacialmente=
+Interleave_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+Juntar=
+Juntar._Introduccion_de_datos=
+Las_traducciones_no_pudieron_ser_cargadas=
+Launcher.error_getting_class_loader_for_status_bar_control=
+LayerName=
+MaxFeaturesEditionCache=
+Maximo=
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages.no_se_encontro_la_traduccion_para=
+Minimo=
+Mover_geo=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_usar_buffer_redondeado=
+Num_intervalos=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+Obtener_mas_proximo=
+Operacion_de_overlay=
+Overlay=
+Overlay_Desc=
+Photometric_=
+Plain=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=
+Preferences=
+Preferencias=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+Recortar._Introduccion_de_datos=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=
+Seleccionar_Directorio=
+Selected=
+Show Errors=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Solo_disolver_adyacentes=
+Terminar=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+Union._Introduccion_de_datos=
+Usar_los_campos_de_la_capa=
+Usar_solamente_los_elementos_seleccionados=
+WFSLayer=
+Zoom_Completo=
+Zoom_Menos=
+Zoom_a_la_capa=
+Zoom_previo=
+Zoom_sgte=
+a_new_view=
+accept_tip=
+add_delete_edit_fields=
+add_field=
+add_rows=
+add_vertex=
+advanced=
+advanced_settings=
+agrupacion=
+ajustar_rejilla=
+algoritmo=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+attributeName=
+attributeType=
+borrar_todos=
+borrar_uno=
+box=
+break=
+break_=
+brillo=
+brillo_y_contraste=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cantLoad=
+cant_reproject_from_any_of=
+capas_edition_cache=
+cargar=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+circle_=
+circumscribed=
+city=
+close_polyline=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=
+compleja=
+complex_selection=
+complex_selection_=
+compress=
+conection=
+configurar_todas_las_extensiones=
+confirmacion=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+connect=
+contact_info=
+contact_organization=
+contiene_espacios_en_blanco=
+coordenadas_vacias=
+copiar=
+copy=
+copy_=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+crear_worldfile=
+created_with=
+cross_circle=
+cross_polygon=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+de =
+de 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_name=
+default_projection=
+default_value=
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edicion=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+edit_vertex_=
+editar_vertices=
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+end=
+end_polygon=
+enter_layer_name=
+enter_path_to_file=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_capa_puntos=
+error_file_exists=
+error_file_not_writable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+error_writting_file=
+errores_csv=
+escala_desconocida=
+exploit=
+exploit_=
+exportJOP2Title=
+export_to_map_context=
+exportando_features=
+exporting_=
+extend=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+feature=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file=
+file_name=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+formato_de_numero_incorrecto=
+fuera_de_extent=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+gml=
+gml_files=
+grado_polinomio=
+group_graphic_line=
+grupo=
+guardar=
+height=
+horizontal_space=
+host=
+html_in_a_new_view=
+html_in_other_view=
+html_in_the_current_view=
+idioma=
+imagen_no_accesible=
+import_from_ascii=
+import_map_context=
+inches=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_cajetin=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+insertar_polilinea=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+internal_polygon=
+internal_polygon_=
+into_circle=
+into_circle_or_circumscribed=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+layerName=
+layerType=
+layers_in_other_view=
+layers_in_the_current_view=
+length=
+length_of_field=
+line_=
+line_type=
+load_from_xml=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+map_size_in_pixels=
+mapa=
+maxFeatures_aviso=
+max_features=
+max_length_is=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_puntos=
+mostrar_rejilla=
+move=
+move_=
+move_elements=
+move_handlers=
+msg_save_raster=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+nearest_point=
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_field_properties=
+new_layer=
+new_postgis=
+new_shp=
+next_point_or_end=
+next_previous_add_del_cancel=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_columnas=
+num_filas=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+out_circle=
+out_polygon=
+out_rectangle=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+pila_de_comandos=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+plegar_despl=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+previous=
+previsualizacion=
+primero=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+projection=
+propiedad=
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=
+props=
+ps=
+puerto=
+puntos=
+realces=
+realmente_desea_guardar=
+realmente_desea_guardar_la_capa=
+recargar=
+rectangle=
+rectangle_=
+redo=
+redo_error=
+reference=
+reference_system=
+rehacer=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_row=
+remove_rows=
+rename_field=
+resolution=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+save_to_ascii=
+save_to_xml=
+scale_=
+script_sep=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+seleccionar_fichero=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_driver=
+select_features=
+select_fields=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+selected_layer=
+selected_parameters=
+selectfromview=
+selection=
+selection_=
+selection_up=
+separator=
+show_layer_names=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+size=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+tamPixX=
+tamPixY=
+tamanyo_pagina=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+texto=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+time=
+to_annotation=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+total=
+transparencia_pixel=
+two_or_more_fields_with_the_same_name=
+ultimo=
+undo=
+unsupported_crs=
+unsupported_map_context_version=
+unsupported_version=
+url=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+will_be_truncated=
+y_en=
+yes=
+zone=
+zoom_in_factor=
+zoom_out_factor=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,43 @@
+1:=
+Analisis_Desc=
+Clean=
+Error_seleccionar_esquema_merge=
+Flatness=
+Implimir=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+PluginServices.Error_grave_de_la_aplicación=
+Proximidad=
+Proximidad_Desc=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show Errors=
+Topology=
+Triangulation=
+break=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+de =
+de 0=
+documento=
+en=
+exportJOP2Title=
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+parte1=
+parte2=
+pdf=
+pixel_point=
+ps=
+script_sep=
+text_preview_text=
+ver_tags=
+warning_title=
+wfs_server_error=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties	(revision 42196)
@@ -0,0 +1,45 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Analisis_Desc=
+break=Break
+Clean=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+de\ =of 
+de\ 0=of 0
+documento=
+en=
+Error_seleccionar_esquema_merge=
+exportJOP2Title=
+Flatness=Flatness
+Implimir=
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+parte1=
+parte2=
+pdf=
+pixel_point=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+Proximidad=
+Proximidad_Desc=
+ps=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show\ Errors=
+text_preview_text=
+Topology=
+Triangulation=
+ver_tags=
+warning_title=
+wfs_server_error=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,43 @@
+1:=
+Analisis_Desc=
+Clean=
+Error_seleccionar_esquema_merge=
+Flatness=Flatness
+Implimir=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+PluginServices.Error_grave_de_la_aplicación=
+Proximidad=
+Proximidad_Desc=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show Errors=
+Topology=
+Triangulation=
+break=Break
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+de =of 
+de 0=of 0
+documento=
+en=
+exportJOP2Title=
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+parte1=
+parte2=
+pdf=
+pixel_point=
+ps=
+script_sep=
+text_preview_text=
+ver_tags=
+warning_title=
+wfs_server_error=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties	(revision 42196)
@@ -0,0 +1,45 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Analisis_Desc=
+break=
+Clean=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+could_not_find_web_map_context_file=
+de\ =
+de\ 0=
+documento=
+en=
+Error_seleccionar_esquema_merge=
+exportJOP2Title=
+Flatness=
+Implimir=
+invalid_value_for_gap=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+none=
+parte1=
+parte2=
+pdf=
+pixel_point=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+Proximidad=
+Proximidad_Desc=
+ps=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Show\ Errors=
+text_preview_text=
+Topology=
+Triangulation=
+ver_tags=
+warning_title=
+wfs_server_error=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties	(revision 42196)
@@ -0,0 +1,458 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+a_new_view=New view
+Abrir_Geoproceso=Open Geoprocess
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+advanced=Advanced
+advanced_settings=Advanced options
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+Analisis=Analisis
+Analisis_Desc=
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+attributeName=Name
+attributeType=Type
+Block_Size_=Block Size\:
+break=Break
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_connect_wfs=Cannot connect to WFS
+cant_reproject_from_any_of=Unable to reproject from any of
+Capas_del_directorio=Layers on directory
+capas_edition_cache=Mark the layers to be used for snapping
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+city=City
+Clean=
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compression\:
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+connect=Connect
+connect_error=Error connecting
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+contact_info=Contact info
+contiene_espacios_en_blanco=It has white space
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+copiar=Copy
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+covered_extension=Covered extension
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de\ =of 
+de\ 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+defined_by_view_extent=Defined by the view\u0092s extent
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+disagregate_layers=Maintain layer structure
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+editable=Editable
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+en=
+en_unidades=in units
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportJOP2Title=
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw\:
+Geoprocesos=Geoprocesses
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+Grid=Grid
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+Icon_not_found_=Icon not found
+imagen_no_accesible=Unable to access the image
+Implimir=
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+Informacion=Information
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+layerName=Layer name
+LayerName=Layer name
+layers_in_the_current_view=Layers in the current view
+layerType=Geometry type
+length_of_field=Length of field
+line=Line
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+max_features=Max. features
+max_length_is=Max length is
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+new_field_properties=New field properties
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=Invalid value
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferences
+preferencias=Preferences
+Preferencias=Preferences
+problems_encountered_while_importing=Problems encountered while importing
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+projection=Projection
+propiedad=Oroperty
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+ps=
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+Recursos\ Disponibles=Available Resources
+reference_system=Reference System
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotation_field=Rotation field
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar_capas_raster=Select raster layers
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+Selected=Selected
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selection_up=Move selection to top
+separator=Separator
+settings=Settings
+settings_editor=Settings editor
+Show\ Errors=
+show_layer_names=Show layer names
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+state_or_province=State/Province
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+Unable_to_find_icon=Unable to find icon
+unknown_response_format=Unkown response format
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+url=url
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Can\u0092t connect to WCS
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+WFSLayer=WFS Layer
+will_be_truncated=
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
+Zoom_sgte=Next zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,462 @@
+1:=
+Abrir_Geoproceso=Open Geoprocess
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+Analisis=Analisis
+Analisis_Desc=
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Block_Size_=Block Size:
+Capas_del_directorio=Layers on directory
+Clean=
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+DBManager=DataBase Manager
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando comando: =Execute command:
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw:
+Geoprocesos=Geoprocesses
+Gestor_de_Geoprocesos=Geoprocess toolbox
+Grid=Grid
+Icon_not_found_=Icon not found
+Implimir=
+Informacion=Information
+Interleave_=Interleave:
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+LayerName=Layer name
+MaxFeaturesEditionCache=Max features edition cache
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+Num_intervalos=Number of Intervals
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+Photometric_=Photometric:
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferences
+Preferencias=Preferences
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=Selected
+Show Errors=
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+WFSLayer=WFS Layer
+Zoom_sgte=Next zoom
+a_new_view=New view
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+advanced=Advanced
+advanced_settings=Advanced options
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+attributeName=Name
+attributeType=Type
+break=Break
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_connect_wfs=Cannot connect to WFS
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+city=City
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+connect=Connect
+connect_error=Error connecting
+contact_info=Contact info
+contiene_espacios_en_blanco=It has white space
+copiar=Copy
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+covered_extension=Covered extension
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+database_connection=Database Connection
+datum=Datum
+de =of 
+de 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+defined_by_view_extent=Defined by the views extent
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=¿Do you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=¿Do you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+disagregate_layers=Maintain layer structure
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+editable=Editable
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+en=
+en_unidades=in units
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+exportJOP2Title=
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+gml=GML
+gml_files=GML Files
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+imagen_no_accesible=Unable to access the image
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+internal_polygon=Internal polygon
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+layerName=Layer name
+layerType=Geometry type
+layers_in_the_current_view=Layers in the current view
+length_of_field=Length of field
+line=Line
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.
+It cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.
+It cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase 
+the amount of Features recovered by modifying the 
+"Buffer" parameter.
+max_features=Max. features
+max_length_is=Max length is
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+new_field_properties=New field properties
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=Invalid value
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+problems_encountered_while_importing=Problems encountered while importing
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+projection=Projection
+propiedad=Oroperty
+ps=
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+reference_system=Reference System
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotation_field=Rotation field
+script_sep=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar_capas_raster=Select raster layers
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the labels text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selection_up=Move selection to top
+separator=Separator
+settings=Settings
+settings_editor=Settings editor
+show_layer_names=Show layer names
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+state_or_province=State/Province
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tamanyo_pagina=Page size
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+unknown_response_format=Unkown response format
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+url=url
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Cant connect to WCS
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+will_be_truncated=
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties	(revision 42196)
@@ -0,0 +1,458 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+a_new_view=Vista nueva
+Abrir_Geoproceso=Abrir Geoproceso
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_rows=A\u00f1adir filas
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+anadir_tag=A\u00f1adir etiqueta
+Analisis=An\u00e1lisis
+Analisis_Desc=
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=\u00c1rea
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+attributeName=Nombre
+attributeType=Tipo
+Block_Size_=Tama\u00f1o de bloque\:
+break=
+browse=Examinar
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edici\u00f3n
+cant_connect_wfs=No ha sido posible realizar la conexi\u00f3n con el WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+Capas_del_directorio=Capas del directorio
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+centimeters=Cent\u00edmetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+city=Ciudad
+Clean=
+coincidir_tamanyo=Coincidir tama\u00f1o
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compresi\u00f3n\:
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+connect=Conectar
+connect_error=Error de conexi\u00f3n
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+contact_info=Informaci\u00f3n de contacto
+contiene_espacios_en_blanco=Contiene espacios en blanco
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+copiar=Copiar
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=Pa\u00eds
+coverage=Cobertura
+covered_extension=Cobertura de la extensi\u00f3n
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+database_connection=Conexi\u00f3n a Base de Datos
+datum=Datum
+DBManager=Gestor de Base de datos
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+defined_by_view_extent=Usar extensi\u00f3n de la vista
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripci\u00f3n
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+disagregate_layers=Conservar estructura de capas
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar s\u00f3lo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+editable=Editable
+Edition=Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+en=
+en_unidades=en unidades
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportJOP2Title=
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file_version=Versi\u00f3n del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+Flatness=
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw\:
+Geoprocesos=Geoprocesos
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+Grid=Rejilla
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+horizontal_space=Espacio horizontal
+Icon_not_found_=No se encontr\u00f3 el icono
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+Implimir=
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+Informacion=Informaci\u00f3n
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+join_=UNIR
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+layerName=Nombre de la capa
+LayerName=Nombre de la capa
+layers_in_the_current_view=Capas en la vista actual
+layerType=Tipo de geometr\u00eda
+length_of_field=Longitud de campo
+line=L\u00ednea
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto m\u00e1s cercano
+new_field_properties=Propiedades del campo nuevo
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+nombre_no_valido=Nombre no v\u00e1lido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+numero_decimales_mostrar=N\u00famero decimales
+numero_incorrecto=N\u00famero incorrecto
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operaci\u00f3n cancelada
+optinos.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contrase\u00f1a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+postcode=C\u00f3digo postal
+postgis=PostGIS
+precision=Precisi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferencias
+preferencias=Preferencias
+Preferencias=Preferencias
+problems_encountered_while_importing=Se encontraron problemas al importar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+ps=
+realces=Realces
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+Recursos\ Disponibles=Recursos Disponibles
+reference_system=Sistema de Referencia
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotation_field=Campo de rotaci\u00f3n
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+Selected=Capa seleccionada
+selected_layer=Capa seleccionada
+selected_parameters=Par\u00e1metros seleccionados
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+settings=Ajustes
+settings_editor=Editor de ajustes
+Show\ Errors=
+show_layer_names=Mostrar nombres de capas
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+si=s\u00ed
+simbolo=S\u00edmbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+state_or_province=Estado/Provincia
+stretch_=ESTIRAR
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETR\u00cdA
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+Unable_to_find_icon=No se pudo encontrar el icono
+unknown_response_format=Formato de respuesta desconocido
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versi\u00f3n de Web Map Context no soportada
+url=url
+use_custom_size=Tama\u00f1o personalizado
+use_full_extent=Usar extensi\u00f3n total
+use_interpolation_method=Usar metodo de interpolaci\u00f3n
+use_view_size=Tama\u00f1o de la vista
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+WFSLayer=Capa WFS
+will_be_truncated=ser\u00e1 truncado
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom m\u00e1s
+zoom_out_factor=Factor zoom menos
+Zoom_sgte=Extensi\u00f3n siguiente

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties	(revision 42196)
@@ -0,0 +1,458 @@
+#Translations for language [fr]
+#Mon Oct 16 10:42:42 CEST 2006
+1\:=
+a_new_view=
+Abrir_Geoproceso=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+advanced=
+advanced_settings=
+Agregacion=
+Agregacion_Desc=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+Analisis=
+Analisis_Desc=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+Asistente_de_geoprocesamiento=
+attributeName=
+attributeType=
+Block_Size_=
+break=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_connect_wfs=
+cant_reproject_from_any_of=
+Capas_del_directorio=
+capas_edition_cache=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+city=
+Clean=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+connect=
+connect_error=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+contact_info=
+contiene_espacios_en_blanco=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+copiar=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+covered_extension=
+cuadro_no_asociado=
+database_connection=
+datum=
+DBManager=
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+defined_by_view_extent=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+disagregate_layers=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+editable=
+Edition=
+Edition_Properties=
+Ejecutando\ comando\:\ =
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+en=
+en_unidades=
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+error_writting_file=
+errores_csv=
+errorMessageJComboBoxItemsSeekerConfigurable=
+escala_desconocida=
+exploit_=
+export_to=
+export_to_map_context=
+exportJOP2Title=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+Flatness=
+Formato_de_numero_erroneo=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+georef_file=
+georeferenciado=
+Gestor_de_Geoprocesos=
+gml=
+gml_files=
+Grid=
+group_graphic_line=
+grupo=
+horizontal_space=
+Icon_not_found_=
+imagen_no_accesible=
+Implimir=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+Informacion=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+Interleave_=
+internal_polygon=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+Launcher.error_getting_class_loader_for_status_bar_control=
+layerName=
+LayerName=
+layers_in_the_current_view=
+layerType=
+length_of_field=
+line=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+max_features=
+max_length_is=
+maxFeatures_aviso=
+MaxFeaturesEditionCache=
+Messages.no_se_encontro_la_traduccion_para=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+must_specify_a_file=
+nearest_point=
+new_field_properties=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+Num_intervalos=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+Overlay=
+Overlay_Desc=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+Photometric_=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+Preferences=
+preferencias=
+Preferencias=
+problems_encountered_while_importing=
+process_tip=
+Progressive_=
+projection=
+propiedad=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+ps=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+Recursos\ Disponibles=
+reference_system=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotation_field=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar_capas_raster=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+Selected=
+selected_layer=
+selected_parameters=
+selection_up=
+separator=
+settings=
+settings_editor=
+Show\ Errors=
+show_layer_names=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+state_or_province=
+stretch_=
+suprimir_objetos_origen=
+symmetry_=
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+Unable_to_find_icon=
+unknown_response_format=
+unsupported_crs=
+unsupported_map_context_version=
+url=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+WFSLayer=
+will_be_truncated=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=
+Zoom_sgte=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,462 @@
+1:=
+Abrir_Geoproceso=Abrir Geoproceso
+Agregacion=Agregación
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+Analisis=Análisis
+Analisis_Desc=
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Block_Size_=Tamaño de bloque:
+Capas_del_directorio=Capas del directorio
+Clean=
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Conversion_de_datos=Conversión de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyección, etc.)
+DBManager=Gestor de Base de datos
+Edition=Edición
+Edition_Properties=Propiedades de Edición
+Ejecutando comando: =Execute command:
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Flatness=
+Formato_de_numero_erroneo=Formato de número incorrecto
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw:
+Geoprocesos=Geoprocesos
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+Grid=Rejilla
+Icon_not_found_=No se encontró el icono
+Implimir=
+Informacion=Información
+Interleave_=Entrelazado:
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+LayerName=Nombre de la capa
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+Messages.no_se_encontro_la_traduccion_para=No se encontró la traducción para
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operación
+Num_intervalos=Número de intervalos
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva información basándose en la superposición de dos capas.
+Photometric_=Fotométrica:
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferencias
+Preferencias=Preferencias
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=Capa seleccionada
+Show Errors=
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+WFSLayer=Capa WFS
+Zoom_sgte=Extensión siguiente
+a_new_view=Vista nueva
+accept_tip=Procesa los GCP's y salva la georreferenciación. Da por terminada la introducción de GCP's.
+add_delete_edit_fields=Puede añadir, borrar o renombrar los campos
+add_rows=Añadir filas
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+agrupacion=Agrupación
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensión de la imagen a georreferenciar
+anadir_tag=Añadir etiqueta
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=Área
+attributeName=Nombre
+attributeType=Tipo
+break=
+browse=Examinar
+button.resolution.calculate=Calcula resolución
+cajetin=Cajetín
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el más alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el más ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tamaño de los elementos seleccionados hasta coincidir con el más grande.
+cancel_tip=Cierra el dialogo deshaciendo los últimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edición
+cant_connect_wfs=No ha sido posible realizar la conexión con el WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ningún
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+centimeters=Centímetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detrás
+change_height=Cambiar altura
+change_width=Cambiar anchura
+city=Ciudad
+coincidir_tamanyo=Coincidir tamaño
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se está intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se está intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se está intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+connect=Conectar
+connect_error=Error de conexión
+contact_info=Información de contacto
+contiene_espacios_en_blanco=Contiene espacios en blanco
+copiar=Copiar
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=País
+coverage=Cobertura
+covered_extension=Cobertura de la extensión
+cuadro_no_asociado=El cuadro de georreferenciación no está asociado a ninguna capa sobre la vista, este se cerrará. Por favor, abra el diálogo asociado a la capa que necesite.
+database_connection=Conexión a Base de Datos
+datum=Datum
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deberá introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deberá introducir nombres nuevos para los mapas
+default_projection=Proyección por defecto
+default_value=Valor por defecto
+defined_by_view_extent=Usar extensión de la vista
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa después del primer punto.
+desactivar_puntos=Desactiva capa de puntos después del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaciÃ³n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripción
+desea_borrar_el_documento=¿Está seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=¿Está seguro de que desea borrar las capas activas?
+desea_continuar=¿Desea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+disagregate_layers=Conservar estructura de capas
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar sólo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+editable=Editable
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+en=
+en_unidades=en unidades
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+exportJOP2Title=
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, ¿desea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, ¿desea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisión decimal
+field_default_value=Valor por defecto
+field_length=Tamaño
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file_version=Versión del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+georef_file=Fichero de georreferenciación
+georeferenciado=Georeferenciado
+gml=GML
+gml_files=Ficheros gml
+group_graphic_line=Agrupar línea gráfica
+grupo=grupo
+horizontal_space=Espacio horizontal
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>¡ATENCIÓN!</b><br>Versión en desarrollo. Puede contener errores importantes e incluso provocar daños en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la última versión estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometría [E]
+insert_selection_last_point=Insertar esquina opuesta del rectángulo de selección
+insert_selection_point=Insertar punto de selección
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=¿Desea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+internal_polygon=Polígono interno
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_priority_value=Valor de prioridad inválido
+invalid_value_for_gap=
+invert_selection=Invertir selección
+join_=UNIR
+layerName=Nombre de la capa
+layerType=Tipo de geometría
+layers_in_the_current_view=Capas en la vista actual
+length_of_field=Longitud de campo
+line=Línea
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.
+No puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.
+No puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al máximo 
+ numero de Features permitido. Puede aumentar el número de 
+Features recuperadas modificando el parámetro "Buffer"
+max_features=Máx. features
+max_length_is=La longitud máxima es
+minimum_size_of_line_incorrect=La longitud mínima de línea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala numérica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto más cercano
+new_field_properties=Propiedades del campo nuevo
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegará ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegarán las vistas con conflicto
+nombre_no_valido=Nombre no válido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+numero_incorrecto=Número incorrecto
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operación cancelada
+optinos.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.configuration.screen=Configuración de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contraseña
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posición de las ventanas.
+options.general.remember_windows_size=Recordar el tamaño de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.network.status=Estado de la conexión
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar márgenes
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+postcode=Código postal
+postgis=PostGIS
+precision=Precisión
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+problems_encountered_while_importing=Se encontraron problemas al importar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+projection=Proyección
+propiedad=Propiedad
+ps=
+realces=Realces
+realmente_desea_guardar_la_capa=¿Desea guardar la capa
+recargar=Recargar
+reference_system=Sistema de Referencia
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometría
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotation_field=Campo de rotación
+script_sep=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selección compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar_capas_raster=Seleccionar capas ráster
+seleccionar_por_poligono=Seleccionar por polígono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenará el ángulo con el que se mostrará el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el color con el que se mostrará la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará la fuente con el que se mostrará de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el alto con el que se mostrará la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometría
+select_geometry_to_extend=Seleccionar geometría a extender
+select_other_geometry_or_end=Seleccione otra geometría o finalizar[E]
+selected_layer=Capa seleccionada
+selected_parameters=Parámetros seleccionados
+selection_up=Mover arriba la selección
+separator=Separador
+settings=Ajustes
+settings_editor=Editor de ajustes
+show_layer_names=Mostrar nombres de capas
+show_this_dialog_next_startup=Mostrar este diálogo la próxima vez
+shp=SHP
+si=sí
+simbolo=Símbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tamaño mínimo de las líneas que formarán las curvas.
+state_or_province=Estado/Provincia
+stretch_=ESTIRAR
+suprimir_objetos_origen=¿Suprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETRÍA
+tamPixX=Tamaño pixel X
+tamPixY=Tamaño pixel Y
+tamanyo_pagina=Tamaño de página
+terminar=Terminar
+terminar_edicion=Terminar edición
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podrá exportar los datos editados, pero no podrá guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+unknown_response_format=Formato de respuesta desconocido
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versión de Web Map Context no soportada
+url=url
+use_custom_size=Tamaño personalizado
+use_full_extent=Usar extensión total
+use_interpolation_method=Usar metodo de interpolación
+use_view_size=Tamaño de la vista
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexión al WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+will_be_truncated=será truncado
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom más
+zoom_out_factor=Factor zoom menos
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties-UTF8	(revision 42196)
@@ -0,0 +1,456 @@
+1:=
+Abrir_Geoproceso=
+Agregacion=
+Agregacion_Desc=
+Analisis=
+Analisis_Desc=
+Asistente_de_geoprocesamiento=
+Block_Size_=
+Capas_del_directorio=
+Clean=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+DBManager=
+Edition=
+Edition_Properties=
+Ejecutando comando: =
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Flatness=
+Formato_de_numero_erroneo=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+Gestor_de_Geoprocesos=
+Grid=
+Icon_not_found_=
+Implimir=
+Informacion=
+Interleave_=
+Launcher.error_getting_class_loader_for_status_bar_control=
+LayerName=
+MaxFeaturesEditionCache=
+Messages.no_se_encontro_la_traduccion_para=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+Num_intervalos=
+Overlay=
+Overlay_Desc=
+Photometric_=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=
+Preferencias=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=
+Show Errors=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+WFSLayer=
+Zoom_sgte=
+a_new_view=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+advanced=
+advanced_settings=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+attributeName=
+attributeType=
+break=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_connect_wfs=
+cant_reproject_from_any_of=
+capas_edition_cache=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+city=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+connect=
+connect_error=
+contact_info=
+contiene_espacios_en_blanco=
+copiar=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+covered_extension=
+cuadro_no_asociado=
+database_connection=
+datum=
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+defined_by_view_extent=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+disagregate_layers=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+editable=
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+en=
+en_unidades=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+error_writting_file=
+errores_csv=
+escala_desconocida=
+exploit_=
+exportJOP2Title=
+export_to=
+export_to_map_context=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+georef_file=
+georeferenciado=
+gml=
+gml_files=
+group_graphic_line=
+grupo=
+horizontal_space=
+imagen_no_accesible=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+internal_polygon=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+layerName=
+layerType=
+layers_in_the_current_view=
+length_of_field=
+line=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+maxFeatures_aviso=
+max_features=
+max_length_is=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+must_specify_a_file=
+nearest_point=
+new_field_properties=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+numero_incorrecto=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+problems_encountered_while_importing=
+process_tip=
+projection=
+propiedad=
+ps=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+reference_system=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotation_field=
+script_sep=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar_capas_raster=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+selected_layer=
+selected_parameters=
+selection_up=
+separator=
+settings=
+settings_editor=
+show_layer_names=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+state_or_province=
+stretch_=
+suprimir_objetos_origen=
+symmetry_=
+tamPixX=
+tamPixY=
+tamanyo_pagina=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+two_or_more_fields_with_the_same_name=
+unknown_response_format=
+unsupported_crs=
+unsupported_map_context_version=
+url=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+will_be_truncated=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties	(revision 42196)
@@ -0,0 +1,752 @@
+#Translations for language [de]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+a_new_view=
+Abrir_Geoproceso=
+accept_tip=
+add_delete_edit_fields=
+add_field=
+add_rows=
+add_vertex=
+address=
+advanced=
+advanced_settings=
+Agregacion=
+Agregacion_Desc=
+agrupacion=
+ajustar_rejilla=
+algoritmo=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+Analisis=
+Analisis_Desc=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+Atributos_Numericos=
+attributeName=
+attributeType=
+Block_Size_=
+borrar_todos=
+borrar_uno=
+box=
+break=
+brillo=
+brillo_y_contraste=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Campo_para_disolver=
+cancel_tip=
+cancelar_edicion=
+cant_connect=
+cant_reproject_from_any_of=
+cantLoad=
+Capas=
+Capas_del_directorio=
+capas_edition_cache=
+cargar=
+centimeters=
+Centrar_la_Vista_sobre_un_punto=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+circle_=
+circumscribed=
+Clean=
+close_polyline=
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Coberturas_de_entrada=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=
+compleja=
+complex_selection=
+complex_selection_=
+Compression_=
+configurar_todas_las_extensiones=
+confirmacion=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+connect=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+contact_info=
+contiene_espacios_en_blanco=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+coordenadas_vacias=
+copiar=
+copy=
+copy_=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+Crear_Buffer=
+Crear_Indice=
+Crear_Indice_Pregunta_1=
+crear_worldfile=
+created_with=
+cross_circle=
+cross_polygon=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+DBManager=
+de\ =
+de\ 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_name=
+default_projection=
+default_value=
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+deleted_feature=
+Dentro_y_fuera=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Diferencia_Introduccion_de_datos=
+disagregate_layers=
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edicion=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+edit_vertex_=
+editar_vertices=
+Edition=
+Edition_Properties=
+Ejecutando\ comando\:\ =
+elemento_ya_existe=
+Elija_una_herramienta_de_analisis=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+end=
+end_polygon=
+endinfo=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+enter_layer_name=
+enter_path_to_file=
+Error_atributo_no_numerico=
+error_capa_puntos=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+error_file_exists=
+error_file_not_writable=
+Error_guardando_la_plantilla=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_preparar_escritura_resultados=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+error_writting_file=
+errores_csv=
+errorMessageJComboBoxItemsSeekerConfigurable=
+escala_desconocida=
+Escoger_Fun_Resumen=
+exploit=
+exploit_=
+export_to_map_context=
+exportando_features=
+exporting_=
+exportJOP2Title=
+extend=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+feature=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+Ficheros_de_cartografia=
+Ficheros_SHP=
+field=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file=
+file_name=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+Flatness=
+Formato_de_numero_erroneo=
+formato_de_numero_incorrecto=
+Fuera=
+fuera_de_extent=
+Funciones_Sumarizacion=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+Gestor_de_Geoprocesos=
+gml=
+gml_files=
+grado_polinomio=
+Grid=
+group_graphic_line=
+grupo=
+guardar=
+height=
+Herramientas_de_analisis=
+horizontal_space=
+host=
+html_in_a_new_view=
+html_in_other_view=
+html_in_the_current_view=
+Icon_not_found_=
+idioma=
+imagen_no_accesible=
+Implimir=
+import_from_ascii=
+import_map_context=
+inches=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+Indexando_espacialmente=
+indexar_campos=
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_cajetin=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+insertar_polilinea=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+Interleave_=
+internal_polygon=
+internal_polygon_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+into_circle=
+into_circle_or_circumscribed=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+is_required=
+join_=
+Juntar=
+Juntar._Introduccion_de_datos=
+keywords=
+Las_traducciones_no_pudieron_ser_cargadas=
+latitud=
+Launcher.error_getting_class_loader_for_status_bar_control=
+layer=
+layerName=
+LayerName=
+layers_in_other_view=
+layers_in_the_current_view=
+layerType=
+length=
+length_of_field=
+line=
+line_=
+line_type=
+load_from_xml=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+map_size_in_pixels=
+mapa=
+max_features=
+max_length_is=
+maxFeatures_aviso=
+MaxFeaturesEditionCache=
+Maximo=
+Media=
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages.no_se_encontro_la_traduccion_para=
+metadatos=
+Minimo=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_puntos=
+mostrar_rejilla=
+move=
+move_=
+move_elements=
+move_handlers=
+Mover_geo=
+msg_save_raster=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+nearest_point=
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_field_properties=
+new_layer=
+new_postgis=
+new_shp=
+next_point_or_end=
+next_previous_add_del_cancel=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_usar_buffer_redondeado=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_columnas=
+num_filas=
+Num_intervalos=
+num_lados_insuficiente=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+numero_decimales_mostrar=
+Obtener_mas_proximo=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+Operacion_de_overlay=
+optinos.network.click_to_test_connection=
+options=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+out_circle=
+out_polygon=
+out_rectangle=
+Overlay=
+Overlay_Desc=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+Photometric_=
+pila_de_comandos=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+Por_favor_active_la_capa=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+Preferences=
+preferencias=
+Preferencias=
+previous=
+previsualizacion=
+primero=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+Progressive_=
+projection=
+propiedad=
+propiedades_cajetin=
+propiedades_capa=
+props=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+ps=
+puerto=
+puntos=
+realces=
+realmente_desea_guardar=
+realmente_desea_guardar_la_capa=
+recargar=
+Recortar._Introduccion_de_datos=
+rectangle=
+rectangle_=
+Recursos\ Disponibles=
+redo=
+redo_error=
+reference=
+reference_system=
+rehacer=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_row=
+remove_rows=
+rename_field=
+resolution=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+save_to_ascii=
+save_to_xml=
+scale_=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=
+seleccion_compleja=
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+Seleccionar_Directorio=
+seleccionar_fichero=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_driver=
+select_features=
+select_fields=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+Selected=
+selected_layer=
+selected_parameters=
+selectfromview=
+selection=
+selection_=
+selection_up=
+separator=
+Show\ Errors=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+size=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Solo_disolver_adyacentes=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+state_or_province=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+Terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+texto=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+time=
+to_annotation=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Topology=
+total=
+transparencia_pixel=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+ultimo=
+Unable_to_find_icon=
+undo=
+Union._Introduccion_de_datos=
+unsupported_crs=
+unsupported_map_context_version=
+unsupported_version=
+url=
+Usar_los_campos_de_la_capa=
+Usar_solamente_los_elementos_seleccionados=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+vacia=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+WCS_properties=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+WFSLayer=
+will_be_truncated=
+y_en=
+yes=
+zone=
+Zoom_a_la_capa=
+zoom_in_factor=
+zoom_out_factor=
+Zoom_previo=
+Zoom_sgte=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,756 @@
+1:=
+Abrir_Geoproceso=Abrir Geoproceso
+Agregacion=Agregación
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+Analisis=Análisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Área de influencia definida por un campo
+Area_de_influencia_definida_por_una_distancia=Área de influencia definida por una distancia
+Areas_de_influencia._Introduccion_de_datos=Áreas de influencia. Introducción de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Atributos_Numericos=Atributos numéricos
+Block_Size_=Tamaño de bloque:
+Campo_para_disolver=Campo para disolver
+Capas=Capas
+Capas_del_directorio=Capas del directorio
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+Clean=
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de salida
+Coberturas_de_entrada=Capas de entrada
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Conversion_de_datos=Conversión de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyección, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducción de datos
+Crear_Buffer=Crear área de influencia
+Crear_Indice=Crear índice espacial...
+Crear_Indice_Pregunta_1=¿Desea crear un índice espacial para la capa?
+DBManager=Gestor de Base de datos
+Dentro_y_fuera=Dentro y fuera del polígono
+Diferencia_Introduccion_de_datos=Diferencia. Introducción de datos
+Disolver._Introduccion_de_datos=Disolver. Introducción de datos
+Disolver_entidades=Disolver entidades
+Edition=Edición
+Edition_Properties=Propiedades de Edición
+Ejecutando comando: =Execute command:
+Elija_una_herramienta_de_analisis=Elija una herramienta de análisis
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducción de datos
+Error_atributo_no_numerico=Atributo para distancia de buffer no numérico
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_chequeando_precondiciones=Error verificando precondiciones
+Error_chequeo_tipo_geometria=Error al chequear el tipo de geometria
+Error_distancia_buffer=Debes introducir una distancia de buffer
+Error_ejecucion=Error de ejecución
+Error_entrada_datos=Error de entrada de datos
+Error_escritura_resultados=Error de escritura de resultados
+Error_exportando_SLD=Error exportando SLD
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecución del geoproceso
+Error_guardando_la_plantilla=Error guardando la plantilla
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Error_spjoinmn_sin_funcion=No has seleccionado ninguna función resumen para los atributos numéricos
+Escoger_Fun_Resumen=<-
+Ficheros_SHP=Ficheros SHP
+Ficheros_de_cartografia=Ficheros de datos cartográficos
+Flatness=
+Formato_de_numero_erroneo=Formato de número incorrecto
+Fuera=Fuera del polígono
+Funciones_Sumarizacion=Funciones de agrupamiento
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw:
+Geoprocesos=Geoprocesos
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+Grid=Rejilla
+Herramientas_de_analisis=Herramientas de análisis
+Icon_not_found_=No se encontró el icono
+Implimir=
+Indexando_espacialmente=Indexando espacialmente la capa
+Interleave_=Entrelazado:
+Interseccion=Intersección
+Interseccion._Introduccion_de_datos=Intersección. Introducción de datos
+Juntar=Juntar
+Juntar._Introduccion_de_datos=Juntar. Introducción de datos
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+LayerName=Nombre de la capa
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+Maximo=Máximo
+Media=Media
+Mensaje_buffer=Calculando áreas de influencia...
+Mensaje_clip=Geoproceso recortar...
+Mensaje_convexhull=Geoproceso convex hull...
+Mensaje_difference=Geoproceso diferencia...
+Mensaje_dissolve=Geoproceso dissolve....
+Mensaje_enlace_espacial=Geoproceso enlace espacial...
+Mensaje_interseccion=Geoproceso intersección...
+Mensaje_juntar=Geoproceso juntar...
+Mensaje_primera_pasada_union=Calculando intersecciones...
+Mensaje_procesando_buffer=Generando buffers...
+Mensaje_procesando_buffer2=Disolviendo buffers...
+Mensaje_procesando_clip_primero=Calculando polígono de recorte
+Mensaje_procesando_clip_segundo=Recortando geometrias
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_dissolves=Dissolviendo geometrias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_procesando_interseccion=Calculando intersecciones...
+Mensaje_procesando_juntar=Juntando geometrias...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+Mensaje_union=Geoproceso union...
+Messages.no_se_encontro_la_traduccion_para=No se encontró la traducción para
+Minimo=Mínimo
+Mover_geo=Mover imagen a georreferenciar
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operación
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quizá olvidó inicializar la clase.
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+No_usar_buffer_redondeado=No usar borde redondeado
+Num_intervalos=Número de intervalos
+Numero_anillos_concentricos=Número de anillos concéntricos
+Numero_de_elementos_seleccionados=Número de elementos seleccionados
+Obtener_mas_proximo=Usar el mas próximo
+Operacion_de_overlay=Operaciones de solape
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva información basándose en la superposición de dos capas.
+Photometric_=Fotométrica:
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=Por favor active la capa
+Preferences=Preferencias
+Preferencias=Preferencias
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+Recortar._Introduccion_de_datos=Recortar. Introducción de datos
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selección por capa
+Seleccionar_Directorio=Carpeta con capas...
+Selected=Capa seleccionada
+Show Errors=
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Solo_disolver_adyacentes=Sólo disolver adyacentes.
+Terminar=Terminar
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+Union._Introduccion_de_datos=Unión. Introducción de datos
+Usar_los_campos_de_la_capa=Usar los campos de la capa
+Usar_solamente_los_elementos_seleccionados=Usar solamente los elementos seleccionados
+WCS_properties=Propiedades del WCS
+WFSLayer=Capa WFS
+Zoom_a_la_capa=Zoom a la capa
+Zoom_previo=Extensión anterior
+Zoom_sgte=Extensión siguiente
+a_new_view=Vista nueva
+accept_tip=Procesa los GCP's y salva la georreferenciación. Da por terminada la introducción de GCP's.
+add_delete_edit_fields=Puede añadir, borrar o renombrar los campos
+add_field=Añadir campo
+add_rows=Añadir filas
+add_vertex=Añadir vértice
+address=Dirección
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+agrupacion=Agrupación
+ajustar_rejilla=Ajustar rejilla
+algoritmo=Algoritmo
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensión de la imagen a georreferenciar
+anadir_tag=Añadir etiqueta
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=Área
+attributeName=Nombre
+attributeType=Tipo
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+box=Cajetín
+break=
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+button.resolution.calculate=Calcula resolución
+cajetin=Cajetín
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el más alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el más ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tamaño de los elementos seleccionados hasta coincidir con el más grande.
+cancel_tip=Cierra el dialogo deshaciendo los últimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edición
+cantLoad=No se puede cargar la capa WFS
+cant_connect=No se puede realizar la conexión
+cant_reproject_from_any_of=No se puede reproyectar desde ningún
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Centímetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detrás
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=Círculo
+circle_=CÍRCULO
+circumscribed=Circunscrito
+close_polyline=Cerrar polilínea
+coincidir_tamanyo=Coincidir tamaño
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Pila de comandos
+compleja=
+complex_selection=Selección compleja
+complex_selection_=SELECCIÓN COMPLEJA
+configurar_todas_las_extensiones=Configurar todas las extensiones
+confirmacion=Confirmación
+conflicto_de_nombres_de_mapas_al_pegar=Se está intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se está intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se está intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+connect=Conectar
+contact_info=Información de contacto
+contiene_espacios_en_blanco=Contiene espacios en blanco
+coordenadas_vacias=Coordenadas vacías
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=País
+coverage=Cobertura
+crear_worldfile=Crear fichero de georreferenciación (worldfile)
+created_with=Creado con
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/Contiene el polígono
+cuadro_no_asociado=El cuadro de georreferenciación no está asociado a ninguna capa sobre la vista, este se cerrará. Por favor, abra el diálogo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexión a Base de Datos
+datum=Datum
+de =
+de 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener información.
+debera_introducir_nombres_para_las_vistas_a_pegar=Deberá introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deberá introducir nombres nuevos para los mapas
+default_name=Capa WFS
+default_projection=Proyección por defecto
+default_value=Valor por defecto
+define_fields=Define los campos
+define_point=Defina el punto
+defined_by_view_extent=Usar extensión de la vista
+dehacer=Deshacer
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa después del primer punto.
+desactivar_puntos=Desactiva capa de puntos después del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaciÃ³n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripción
+desea_borrar_el_documento=¿Está seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=¿Está seguro de que desea borrar las capas activas?
+desea_continuar=¿Desea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+disagregate_layers=Conservar estructura de capas
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar sólo el texto
+dxf=dxf
+edicion=Edición
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar vértice
+edit_vertex_=EDITAR VÉRTICE
+editar_vertices=Editar Vértices
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+end=Terminar
+end_polygon=Finalizar polígono
+endinfo=Estadisticas de finalización
+enter_layer_name=Introducir nombre de la capa
+enter_path_to_file=Introducir la ruta del fichero
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_capa_puntos=Error al cargar la capa. Puede que la capa de Georreferenciación no esté activa.
+error_file_exists=El fichero ya existe.¿Desea sobreescribirlo?.
+error_file_not_writable=No es posible crear el fichero de salida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+escala_desconocida=Escala desconocida
+exploit=Explotar
+exploit_=EXPLOTAR
+exportJOP2Title=
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exporting_=Exportando
+extend=Alargar
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+feature=Capas
+features_desea_continuar=features, ¿desea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, ¿desea continuar?
+field=Campo
+field_already_exists=El campo ya existe
+field_decimal_count=Precisión decimal
+field_default_value=Valor por defecto
+field_length=Tamaño
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file=Archivo
+file_name=Archivo
+file_version=Versión del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+formato_de_numero_incorrecto=Formato de número incorrecto.
+fuera_de_extent=El punto seleccionado está fuera del extent de la imagen
+georaster=Georreferenciación
+georef=Georreferenciar
+georef_file=Fichero de georreferenciación
+georeferenciado=Georeferenciado
+georreferenciar=Georreferenciar
+gml=GML
+gml_files=Ficheros gml
+grado_polinomio=Grado del polinomio
+group_graphic_line=Agrupar línea gráfica
+grupo=grupo
+guardar=Guardar
+height=Alto
+horizontal_space=Espacio horizontal
+host=Máquina
+html_in_a_new_view=<HTML>Crea una vista nueva en el proyecto. La nueva vista contendrá todas las capas definidas por el fichero.</HTML>
+html_in_other_view=<HTML>Añade las capas en la vista que especifique de la lista siguiente:</HTML>
+html_in_the_current_view=<HTML>Añade las capas definidas en el fichero a la vista activa.</HTML>
+idioma=Idioma
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+inches=Pulgadas
+incorrect_option=Opción incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>¡ATENCIÓN!</b><br>Versión en desarrollo. Puede contener errores importantes e incluso provocar daños en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la última versión estable.</html>
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o [3P]
+insert_central_point_polygon=Insertar punto central del polígono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar último punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point_arc_or_close=Insertar siguiente punto, Arco[A] o Cerrar polilínea[C] o Terminar[T]
+insert_next_point_line_or_close=Insertar punto siguiente, Linea[N], Cerrar polilínea[C] o Terminar[T]
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar polígono de selección[E]
+insert_number_sides=Insertar número de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner_or_square=Insertar punto de esquina opuesta o Cuadrado[C]
+insert_point_move=Insertar punto de desplazamiento
+insert_point_or_end=Insertar punto o finalizar geometría [E]
+insert_point_selection=Precise punto de selección
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Políg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius=Precise rádio(r)
+insert_radius_or_second_point=Insertar rádio o segundo punto
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Precise ángulo de rotación
+insert_row=Insertar fila
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o ángulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rectángulo de selección
+insert_selection_last_point=Insertar esquina opuesta del rectángulo de selección
+insert_selection_point=Insertar punto de selección
+insert_third_point=Insertar tercer punto
+insertar_cajetin=Insertar cajetín
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=¿Desea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+insertar_polilinea=Insertar polilínea
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del polígono
+inter_arc=Arco interno
+inter_line=Línea interna
+internal_polygon=Polígono interno
+internal_polygon_=Polígono interno
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito en el círculo[I] o Circunscrito[C]<C>
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_priority_value=Valor de prioridad inválido
+invalid_value_for_gap=
+invert_selection=Invertir selección
+is_required=es obligatorio
+join_=UNIR
+keywords=Palabras clave
+latitud=Latitud
+layer=Capa
+layerName=Nombre de la capa
+layerType=Tipo de geometría
+layers_in_other_view=Capas en la vista que yo elija
+layers_in_the_current_view=Capas en la vista actual
+length=Tamaño
+length_of_field=Longitud de campo
+line=Línea
+line_=LÍNEA
+line_type=Tipo línea
+load_from_xml=Cargar desde fichero XML (.rmf)
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.
+No puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.
+No puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+map_size_in_pixels=Tamaño del mapa (píxeles)
+mapa=Mapa
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al máximo 
+ numero de Features permitido. Puede aumentar el número de 
+Features recuperadas modificando el parámetro "Buffer"
+max_features=Máx. features
+max_length_is=La longitud máxima es
+metadatos=Metadatos
+minimum_size_of_line_incorrect=La longitud mínima de línea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala numérica
+mostrar_puntos=Mostrar numeración
+mostrar_rejilla=Mostrar rejilla
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+msg_save_raster=Se va a cancelar la operación. ¿Desea continuar?
+multi_type=Tipo múltiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto más cercano
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+new_layer=Nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next_point_or_end=Siguiente punto o finalizar[E]
+next_previous_add_del_cancel=Punto, Siguiente vértice[S], Anterior[A], Añadir[I] o Eliminar[E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegará ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegarán las vistas con conflicto
+nombre_no_valido=Nombre no válido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_columnas=Número de columnas
+num_filas=Número de filas
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operación cancelada
+optinos.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options=Opciones
+options.configuration.screen=Configuración de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posición de las ventanas.
+options.general.remember_windows_size=Recordar el tamaño de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.network.status=Estado de la conexión
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del polígono
+out_rectangle=Fuera del rectángulo
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar márgenes
+pila_de_comandos=Pila de comandos
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+poligono=Polígono
+polilinea=polilínea
+polygon=Polígono
+polygon_=POLÍGONO
+polygon_type=Tipo Polígono
+polyline=Polilínea
+polyline_=POLILÍNEA
+poner_capas_a=Poner capas a ...
+postcode=Código postal
+postgis=PostGIS
+precision=Precisión
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+previous=Anterior
+previsualizacion=Previsualización
+primero=Primero
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+projection=Proyección
+propiedad=Propiedad
+propiedades_cajetin=Propiedades del cajetín
+propiedades_capa=Propiedades de la capa
+props=Propiedades
+ps=
+puerto=Puerto
+puntos=Puntos
+realces=Realces
+realmente_desea_guardar=¿Realmente desea guardar?
+realmente_desea_guardar_la_capa=¿Desea guardar la capa
+recargar=Recargar
+rectangle=Rectángulo
+rectangle_=RECTÁNGULO
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+reference_system=Sistema de Referencia
+rehacer=Rehacer
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometría
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+resolution=Resolución
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotación
+save_to_ascii=Exportar tabla de puntos a fichero de texto.
+save_to_xml=Salvar a fichero XML (.grf)
+scale_=ESCALAR
+script_sep=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selección compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas ráster
+seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por polígono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenará el ángulo con el que se mostrará el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el color con el que se mostrará la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará la fuente con el que se mostrará de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el alto con el que se mostrará la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_driver=Seleccione el driver
+select_features=Selecciona las capas
+select_fields=Seleccionar campos de la capa
+select_from_point=Seleccionar a partir de un punto
+select_geometry=Seleccione una geometría
+select_geometry_to_extend=Seleccionar geometría a extender
+select_geometry_type=Seleccione el tipo de geometría
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=Seleccione otra geometría o finalizar[E]
+selected_layer=Capa seleccionada
+selected_parameters=Parámetros seleccionados
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_=SELECCIONAR
+selection_up=Mover arriba la selección
+separator=Separador
+show_this_dialog_next_startup=Mostrar este diálogo la próxima vez
+shp=SHP
+si=sí
+simbolo=Símbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+size=Tamaño
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tamaño mínimo de las líneas que formarán las curvas.
+square=Esquina
+start_edition=Comenzar edición
+state_or_province=Estado/Provincia
+stop_edition=Terminar edición
+stretch=Estirar
+stretch_=ESTIRAR
+suprimir_objetos_origen=¿Suprimir objetos de origen?Si[S] o No[N] |N|
+symmetry=Simetría
+symmetry_=SIMETRÍA
+tamPixX=Tamaño pixel X
+tamPixY=Tamaño pixel Y
+tamanyo_pagina=Tamaño de página
+terminar=Terminar
+terminar_edicion=Terminar edición
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+texto=Texto
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podrá exportar los datos editados, pero no podrá guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+time=Tiempo
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+total=Total
+transparencia_pixel=Transparencia por pixel
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+ultimo=Último
+undo=Deshacer
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versión de Web Map Context no soportada
+unsupported_version=Versión no soportada
+url=url
+use_custom_size=Tamaño personalizado
+use_full_extent=Usar extensión total
+use_interpolation_method=Usar metodo de interpolación
+use_view_size=Tamaño de la vista
+vacia=Vacía
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexión al WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+will_be_truncated=será truncado
+y_en=y en
+yes=Si
+zone=Huso
+zoom_in_factor=Factor zoom más
+zoom_out_factor=Factor zoom menos
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties-UTF8	(revision 42196)
@@ -0,0 +1,750 @@
+1:=
+Abrir_Geoproceso=
+Agregacion=
+Agregacion_Desc=
+Analisis=
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=
+Area_de_influencia_definida_por_una_distancia=
+Areas_de_influencia._Introduccion_de_datos=
+Asistente_de_geoprocesamiento=
+Atributos_Numericos=
+Block_Size_=
+Campo_para_disolver=
+Capas=
+Capas_del_directorio=
+Centrar_la_Vista_sobre_un_punto=
+Clean=
+Cobertura_de_datos=
+Cobertura_de_entrada=
+Cobertura_de_recorte=
+Cobertura_de_salida=
+Coberturas_de_entrada=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+Convex_Hull._Introduccion_de_datos=
+Crear_Buffer=
+Crear_Indice=
+Crear_Indice_Pregunta_1=
+DBManager=
+Dentro_y_fuera=
+Diferencia_Introduccion_de_datos=
+Disolver._Introduccion_de_datos=
+Disolver_entidades=
+Edition=
+Edition_Properties=
+Ejecutando comando: =
+Elija_una_herramienta_de_analisis=
+Enlace_espacial=
+Enlace_espacial._Introduccion_de_datos=
+Error_atributo_no_numerico=
+Error_capa_vacia=
+Error_chequeando_precondiciones=
+Error_chequeo_tipo_geometria=
+Error_distancia_buffer=
+Error_ejecucion=
+Error_entrada_datos=
+Error_escritura_resultados=
+Error_exportando_SLD=
+Error_fallo_geoproceso=
+Error_guardando_la_plantilla=
+Error_preparar_escritura_resultados=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Error_seleccionar_resultado=
+Error_spjoinmn_sin_funcion=
+Escoger_Fun_Resumen=
+Ficheros_SHP=
+Ficheros_de_cartografia=
+Flatness=
+Formato_de_numero_erroneo=
+Fuera=
+Funciones_Sumarizacion=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+Gestor_de_Geoprocesos=
+Grid=
+Herramientas_de_analisis=
+Icon_not_found_=
+Implimir=
+Indexando_espacialmente=
+Interleave_=
+Interseccion=
+Interseccion._Introduccion_de_datos=
+Juntar=
+Juntar._Introduccion_de_datos=
+Las_traducciones_no_pudieron_ser_cargadas=
+Launcher.error_getting_class_loader_for_status_bar_control=
+LayerName=
+MaxFeaturesEditionCache=
+Maximo=
+Media=
+Mensaje_buffer=
+Mensaje_clip=
+Mensaje_convexhull=
+Mensaje_difference=
+Mensaje_dissolve=
+Mensaje_enlace_espacial=
+Mensaje_interseccion=
+Mensaje_juntar=
+Mensaje_primera_pasada_union=
+Mensaje_procesando_buffer=
+Mensaje_procesando_buffer2=
+Mensaje_procesando_clip_primero=
+Mensaje_procesando_clip_segundo=
+Mensaje_procesando_convexhull=
+Mensaje_procesando_diferencia=
+Mensaje_procesando_dissolves=
+Mensaje_procesando_enlace_espacial=
+Mensaje_procesando_interseccion=
+Mensaje_procesando_juntar=
+Mensaje_segunda_pasada_union=
+Mensaje_tercera_pasada_union=
+Mensaje_union=
+Messages.no_se_encontro_la_traduccion_para=
+Minimo=
+Mover_geo=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+No_usar_buffer_redondeado=
+Num_intervalos=
+Numero_anillos_concentricos=
+Numero_de_elementos_seleccionados=
+Obtener_mas_proximo=
+Operacion_de_overlay=
+Overlay=
+Overlay_Desc=
+Photometric_=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=
+Preferences=
+Preferencias=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+Recortar._Introduccion_de_datos=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=
+Seleccionar_Directorio=
+Selected=
+Show Errors=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Solo_disolver_adyacentes=
+Terminar=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+Union._Introduccion_de_datos=
+Usar_los_campos_de_la_capa=
+Usar_solamente_los_elementos_seleccionados=
+WCS_properties=
+WFSLayer=
+Zoom_a_la_capa=
+Zoom_previo=
+Zoom_sgte=
+a_new_view=
+accept_tip=
+add_delete_edit_fields=
+add_field=
+add_rows=
+add_vertex=
+address=
+advanced=
+advanced_settings=
+agrupacion=
+ajustar_rejilla=
+algoritmo=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+arc=
+arcims_load=
+arcims_server_error=
+area=
+attributeName=
+attributeType=
+borrar_todos=
+borrar_uno=
+box=
+break=
+brillo=
+brillo_y_contraste=
+browse=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cantLoad=
+cant_connect=
+cant_reproject_from_any_of=
+capas_edition_cache=
+cargar=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circle=
+circle_=
+circumscribed=
+close_polyline=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=
+compleja=
+complex_selection=
+complex_selection_=
+configurar_todas_las_extensiones=
+confirmacion=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+connect=
+contact_info=
+contiene_espacios_en_blanco=
+coordenadas_vacias=
+copiar=
+copy=
+copy_=
+cortar=
+could_not_find_web_map_context_file=
+country=
+coverage=
+crear_worldfile=
+created_with=
+cross_circle=
+cross_polygon=
+cuadro_no_asociado=
+cut=
+database_connection=
+datum=
+de =
+de 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_name=
+default_projection=
+default_value=
+define_fields=
+define_point=
+defined_by_view_extent=
+dehacer=
+del=
+delete_field=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+description_URL=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+disagregate_layers=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edicion=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+edit_vertex=
+edit_vertex_=
+editar_vertices=
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+eliminar_punto=
+eliminar_todos_puntos=
+en=
+en_unidades=
+end=
+end_polygon=
+endinfo=
+enter_layer_name=
+enter_path_to_file=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_capa_puntos=
+error_file_exists=
+error_file_not_writable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+error_writting_file=
+errores_csv=
+escala_desconocida=
+exploit=
+exploit_=
+exportJOP2Title=
+export_to_map_context=
+exportando_features=
+exporting_=
+extend=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+feature=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+file=
+file_name=
+file_version=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WCS_layer=
+fit_WFS_layer=
+formato_de_numero_incorrecto=
+fuera_de_extent=
+georaster=
+georef=
+georef_file=
+georeferenciado=
+georreferenciar=
+gml=
+gml_files=
+grado_polinomio=
+group_graphic_line=
+grupo=
+guardar=
+height=
+horizontal_space=
+host=
+html_in_a_new_view=
+html_in_other_view=
+html_in_the_current_view=
+idioma=
+imagen_no_accesible=
+import_from_ascii=
+import_map_context=
+inches=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_row=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_cajetin=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+insertar_polilinea=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+internal_polygon=
+internal_polygon_=
+into_circle=
+into_circle_or_circumscribed=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+is_required=
+join_=
+keywords=
+latitud=
+layer=
+layerName=
+layerType=
+layers_in_other_view=
+layers_in_the_current_view=
+length=
+length_of_field=
+line=
+line_=
+line_type=
+load_from_xml=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+map_context_file_error=
+map_size_in_pixels=
+mapa=
+maxFeatures_aviso=
+max_features=
+max_length_is=
+metadatos=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_puntos=
+mostrar_rejilla=
+move=
+move_=
+move_elements=
+move_handlers=
+msg_save_raster=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+must_specify_a_file=
+nearest_point=
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_dxf=
+new_field=
+new_field_properties=
+new_layer=
+new_postgis=
+new_shp=
+next_point_or_end=
+next_previous_add_del_cancel=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_columnas=
+num_filas=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=
+online=
+open_layers_as=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+out_circle=
+out_polygon=
+out_rectangle=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+pila_de_comandos=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+point=
+point_=
+point_type=
+poligono=
+polilinea=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+poner_capas_a=
+postcode=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+previous=
+previsualizacion=
+primero=
+problems_encountered_while_importing=
+procesar=
+process_tip=
+projection=
+propiedad=
+propiedades_cajetin=
+propiedades_capa=
+props=
+ps=
+puerto=
+puntos=
+realces=
+realmente_desea_guardar=
+realmente_desea_guardar_la_capa=
+recargar=
+rectangle=
+rectangle_=
+redo=
+redo_error=
+reference=
+reference_system=
+rehacer=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_row=
+remove_rows=
+rename_field=
+resolution=
+restore_defaults=
+restore_palette=
+rotate=
+rotate_=
+rotation_field=
+save_to_ascii=
+save_to_xml=
+scale_=
+script_sep=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar=
+seleccionar_capas_raster=
+seleccionar_fichero=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_driver=
+select_features=
+select_fields=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+selected_layer=
+selected_parameters=
+selectfromview=
+selection=
+selection_=
+selection_up=
+separator=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+size=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+state_or_province=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+tamPixX=
+tamPixY=
+tamanyo_pagina=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+texto=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+time=
+to_annotation=
+to_palette=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+total=
+transparencia_pixel=
+two_or_more_fields_with_the_same_name=
+ultimo=
+undo=
+unsupported_crs=
+unsupported_map_context_version=
+unsupported_version=
+url=
+use_custom_size=
+use_full_extent=
+use_interpolation_method=
+use_view_size=
+vacia=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning=
+warning_title=
+wcs_cant_connect=
+wcs_server_error=
+wcs_server_timeout=
+web_map_context=
+web_map_context_settings=
+wfs_properties=
+wfs_server_error=
+will_be_truncated=
+y_en=
+yes=
+zone=
+zoom_in_factor=
+zoom_out_factor=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties	(revision 42196)
@@ -0,0 +1,752 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+a_new_view=New view
+Abrir_Geoproceso=Open Geoprocess
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_field=Add field
+add_rows=Add rows
+add_vertex=Add vertex
+address=Address
+advanced=Advanced
+advanced_settings=Advanced options
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+algoritmo=Algorithm
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+Analisis=Analisis
+Analisis_Desc=
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Area_de_influencia_definida_por_una_distancia=Buffer defined by distance
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Atributos_Numericos=Numerical attributes
+attributeName=Name
+attributeType=Type
+Block_Size_=Block Size\:
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+box=box
+break=Break
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+Campo_para_disolver=Field to dissolve
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_connect=Connection failed
+cant_reproject_from_any_of=Unable to reproject from any of
+cantLoad=The WFS layer can't be loaded
+Capas=Layers
+Capas_del_directorio=Layers on directory
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+Centrar_la_Vista_sobre_un_punto=Center view to point
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+circle_=CIRCLE
+circumscribed=Circumscribed
+Clean=
+close_polyline=Close polyline
+Cobertura_de_datos=Data cover
+Cobertura_de_entrada=Input cover
+Cobertura_de_recorte=Clip cover
+Cobertura_de_salida=Output cover
+Coberturas_de_entrada=Input cover set
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Command stack
+compleja=
+complex_selection=Complex selection
+complex_selection_=COMPLEX SELECTION
+Compression_=Compression\:
+configurar_todas_las_extensiones=Configure all the extensions
+confirmacion=Confirm that...
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+connect=Connect
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+contact_info=Contact info
+contiene_espacios_en_blanco=It has white space
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+coordenadas_vacias=Empty coordinates
+copiar=Copy
+copy=Copy
+copy_=COPY
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+Crear_Buffer=Create Buffer...
+Crear_Indice=Spatial index creation...
+Crear_Indice_Pregunta_1=Do you want to create an spatial index for layer
+crear_worldfile=Create worldfile
+created_with=Created with
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de\ =of 
+de\ 0=of 0
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_name=WFS Layer
+default_projection=Default projection
+default_value=Default Value
+define_fields=Define fields
+define_point=Define point
+defined_by_view_extent=Defined by the view\u0092s extent
+dehacer=Undo
+del=Delete
+delete_field=Delete field
+deleted_feature=Deleted feature
+Dentro_y_fuera=Inside and outside de polygon
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+Diferencia_Introduccion_de_datos=Difference. Fill in data
+disagregate_layers=Maintain layer structure
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Disolver_entidades=Dissolve entities
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edicion=Edition
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+edit_vertex_=EDIT VERTEX
+editar_vertices=Edit vertex
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=The element already exists
+Elija_una_herramienta_de_analisis=Choose an analisys tool
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+end=End
+end_polygon=End polygon
+endinfo=Finalization Statistics
+Enlace_espacial=Spatial join
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+enter_layer_name=Enter layer name
+enter_path_to_file=Enter file path
+Error_atributo_no_numerico=Not numeric buffer field
+error_capa_puntos=Error loading the layer. Maybe the Georreferencing layer is not active.
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_chequeando_precondiciones=Check preconditions error
+Error_chequeo_tipo_geometria=Error during checking geometry type
+Error_distancia_buffer=You must enter a buffer distance
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+Error_escritura_resultados=Data writing error
+Error_exportando_SLD=Error exporting SLD
+Error_fallo_geoproceso=Error during geoprocess execution
+error_file_exists=The file already exists. Do you want to overwrite?
+error_file_not_writable=Could not create output file.
+Error_guardando_la_plantilla=Error saving the template
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_preparar_escritura_resultados=Error during preparation of result layer
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Error_spjoinmn_sin_funcion=In a 1-N spatial join you must specify sumarization functions
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+escala_desconocida=Unknown scale
+Escoger_Fun_Resumen=<-
+exploit=Exploit
+exploit_=EXPLOIT
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exporting_=Exporting
+exportJOP2Title=
+extend=Extend
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+feature=Layers
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+Ficheros_de_cartografia=Layer files
+Ficheros_SHP=SHP Files
+field=Field
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file=File
+file_name=File
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+formato_de_numero_incorrecto=Incorrect number format
+Fuera=Outside the polygon
+fuera_de_extent=The selected point is out of the image's extent
+Funciones_Sumarizacion=Group by functions
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw\:
+Geoprocesos=Geoprocesses
+georaster=Georeferencing
+georef=Georeference
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+georreferenciar=Georeference image
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+grado_polinomio=Polynom deegree
+Grid=Grid
+group_graphic_line=Group graphic line
+grupo=group
+guardar=Save
+height=Height
+Herramientas_de_analisis=Analisys Tools
+horizontal_space=Horizontal space
+host=Computer
+html_in_a_new_view=<HTML>Creates a new view into the project. The new view will contain all the layers defined in the file.</HTML>
+html_in_other_view=<HTML>Adds the layers to the selected view in the list.</HTML>
+html_in_the_current_view=<HTML>Adds the layers defined in the file to the current active view.</HTML>
+Icon_not_found_=Icon not found
+idioma=Language
+imagen_no_accesible=Unable to access the image
+Implimir=
+import_from_ascii=Import table from a CSV (.csv) file.
+import_map_context=Import maps from an OGC's Web Map Context file (.cml).
+inches=
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+Indexando_espacialmente=Spatially indexing the layer
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or [3P]
+insert_central_point_polygon=Insert central point of the polygon
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor_or_reference=Insert scale factor |2| or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point_arc_or_close=Insert next point, Arc [A] or Close [C]
+insert_next_point_line_or_close=Insert next point, Line [N] or Close [C]
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon [E]
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner_or_square=Insert point of opposite corner or square [C]
+insert_point_move=Insert point for move
+insert_point_or_end=Insert point or End geometry [E]
+insert_point_selection=Insert selection point
+insert_point_selection_or_types=Insert point or Circle [IC], Out rect.[OR], Polyg.[IP], Intern. pol.[CP], Out pol.[OP], Intern. circle [CC], Out circle [OC]
+insert_radius=Insert radius [R]
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point_or_factor=Insert origin or Reference Line or Scale Factor [F]
+insert_rotation_angle=Insert rotation angle
+insert_row=Insert row
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar_cajetin=Insert grid
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+insertar_polilinea=Insert polyline
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inter_arc=Internal arc
+inter_line=Internal line
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+Interseccion=Intersect
+Interseccion._Introduccion_de_datos=Intersect. Data input
+into_circle=Inscribed
+into_circle_or_circumscribed=Inscribed [I] o Circumscribed [C] in circle |C|
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+is_required=is required
+join_=JOIN
+Juntar=Merge
+Juntar._Introduccion_de_datos=Merge. Data input
+keywords=Keywords
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+latitud=Latitud
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+layer=Layer
+layerName=Layer name
+LayerName=Layer name
+layers_in_other_view=Layers in other view
+layers_in_the_current_view=Layers in the current view
+layerType=Geometry type
+length=Length
+length_of_field=Length of field
+line=Line
+line_=LINE
+line_type=Line type
+load_from_xml=Load from XML file (.rmf)
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+map_size_in_pixels=Map size (pixels)
+mapa=Map
+max_features=Max. features
+max_length_is=Max length is
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+Maximo=Maximum
+Media=Average
+Mensaje_buffer=Computing buffers
+Mensaje_clip=Clip geoprocess...
+Mensaje_convexhull=Convex hull geoproces
+Mensaje_difference=Difference geoprocess...
+Mensaje_dissolve=Dissolve geoprocess....
+Mensaje_enlace_espacial=Spatial Join geoprocess...
+Mensaje_interseccion=Intersection geoprocess...
+Mensaje_juntar=Merge geoprocess...
+Mensaje_primera_pasada_union=Computing intersections...
+Mensaje_procesando_buffer=Processing buffers
+Mensaje_procesando_buffer2=Dissolving buffers...
+Mensaje_procesando_clip_primero=Computing clip polygon...
+Mensaje_procesando_clip_segundo=Clipping geometries...
+Mensaje_procesando_convexhull=Computing convex hull...
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_dissolves=Dissolving geometries...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_procesando_interseccion=Computing intersections...
+Mensaje_procesando_juntar=Merging geometries...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+Mensaje_union=Union geoprocess...
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+metadatos=Metadatos
+Minimo=Minimum
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_puntos=Show numbers
+mostrar_rejilla=Show grid
+move=Move
+move_=MOVE
+move_elements=Move elements
+move_handlers=Move handlers
+Mover_geo=Move georeferenced image.
+msg_save_raster=The operation will be canceled. Would you like to continue?
+multi_type=Multiple type
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_dxf=New DXF
+new_field=New field
+new_field_properties=New field properties
+new_layer=New layer
+new_postgis=New PostGIS
+new_shp=Nuevo SHP
+next_point_or_end=Next point or end
+next_previous_add_del_cancel=Point, Next vertex [S], Previous [A], Add [I] or Remove [E]
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+No_usar_buffer_redondeado=Rectangle end cap
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_columnas=Number of columns
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=
+Numero_anillos_concentricos=Number of radial buffers
+Numero_de_elementos_seleccionados=Number of selected features
+numero_decimales_mostrar=
+Obtener_mas_proximo=Use nearest geometry
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+Operacion_de_overlay=Overlay operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options=Options
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pila_de_comandos=commands stack
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point=Point
+point_=POINT
+point_type=Point type
+poligono=Polygon
+polilinea=polyline
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Polygon type
+polyline=Polyline
+polyline_=POLYLINE
+poner_capas_a=Set layers as
+Por_favor_active_la_capa=Please, activate the layer
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferences
+preferencias=Preferences
+Preferencias=Preferences
+previous=Previous
+previsualizacion=Preview
+primero=First
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+projection=Projection
+propiedad=Oroperty
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+props=Properties
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+ps=
+puerto=Port
+puntos=Points
+realces=Enhancement
+realmente_desea_guardar=Would you really like to save?
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+Recortar._Introduccion_de_datos=Clip. Data input
+rectangle=Rectangle
+rectangle_=RECTANGLE
+Recursos\ Disponibles=Available Resources
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+reference_system=Reference System
+rehacer=Redo
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+resolution=Resolution
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+save_to_ascii=Export table of points into a text file.
+save_to_xml=Save to XML (.grf)
+scale_=SCALE
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+Seleccion_por_capa=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+Seleccionar_Directorio=Path with layers...
+seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_driver=Select driver
+select_features=Select the layer
+select_fields=Select the layer fields
+select_from_point=Select from point
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_other_geometry_or_end=Select other geometry or End[E]
+Selected=Selected
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selectfromview=Select a point from the view
+selection=Selection
+selection_=SELECTION
+selection_up=Move selection to top
+separator=Separator
+Show\ Errors=
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+size=Size
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Solo_disolver_adyacentes=Only dissolve adjacents.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+square=Corner
+start_edition=Start edition
+state_or_province=State/Province
+stop_edition=Finish edition
+stretch=Stretch
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry=Symmetry
+symmetry_=SYMMETRY
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+Terminar=Finish
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+texto=Text
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+time=Time
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Topology=
+total=Total
+transparencia_pixel=Transparency per pixel
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+ultimo=Last
+Unable_to_find_icon=Unable to find icon
+undo=Undo
+Union._Introduccion_de_datos=Union. Data input
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+unsupported_version=Unsupported version
+url=url
+Usar_los_campos_de_la_capa=Use fields from cover
+Usar_solamente_los_elementos_seleccionados=Use selected features only
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+vacia=Empty
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Can\u0092t connect to WCS
+WCS_properties=WCS Properties
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+WFSLayer=WFS Layer
+will_be_truncated=
+y_en=and in
+yes=Yes
+zone=Zone
+Zoom_a_la_capa=Zoom to layer
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,756 @@
+1:=
+Abrir_Geoproceso=Open Geoprocess
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+Analisis=Analisis
+Analisis_Desc=
+Area_de_influencia_definida_por_un_campo=Buffer defined by field
+Area_de_influencia_definida_por_una_distancia=Buffer defined by distance
+Areas_de_influencia._Introduccion_de_datos=Buffer. Data input
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Atributos_Numericos=Numerical attributes
+Block_Size_=Block Size:
+Campo_para_disolver=Field to dissolve
+Capas=Layers
+Capas_del_directorio=Layers on directory
+Centrar_la_Vista_sobre_un_punto=Center view to point
+Clean=
+Cobertura_de_datos=Data cover
+Cobertura_de_entrada=Input cover
+Cobertura_de_recorte=Clip cover
+Cobertura_de_salida=Output cover
+Coberturas_de_entrada=Input cover set
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Data input
+Crear_Buffer=Create Buffer...
+Crear_Indice=Spatial index creation...
+Crear_Indice_Pregunta_1=Do you want to create an spatial index for layer
+DBManager=DataBase Manager
+Dentro_y_fuera=Inside and outside de polygon
+Diferencia_Introduccion_de_datos=Difference. Fill in data
+Disolver._Introduccion_de_datos=Dissolve. Data input
+Disolver_entidades=Dissolve entities
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando comando: =Execute command:
+Elija_una_herramienta_de_analisis=Choose an analisys tool
+Enlace_espacial=Spatial join
+Enlace_espacial._Introduccion_de_datos=Spatial join. Data input
+Error_atributo_no_numerico=Not numeric buffer field
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_chequeando_precondiciones=Check preconditions error
+Error_chequeo_tipo_geometria=Error during checking geometry type
+Error_distancia_buffer=You must enter a buffer distance
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+Error_escritura_resultados=Data writing error
+Error_exportando_SLD=Error exporting SLD
+Error_fallo_geoproceso=Error during geoprocess execution
+Error_guardando_la_plantilla=Error saving the template
+Error_preparar_escritura_resultados=Error during preparation of result layer
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Error_seleccionar_resultado=You must specify a result file
+Error_spjoinmn_sin_funcion=In a 1-N spatial join you must specify sumarization functions
+Escoger_Fun_Resumen=<-
+Ficheros_SHP=SHP Files
+Ficheros_de_cartografia=Layer files
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+Fuera=Outside the polygon
+Funciones_Sumarizacion=Group by functions
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw:
+Geoprocesos=Geoprocesses
+Gestor_de_Geoprocesos=Geoprocess toolbox
+Grid=Grid
+Herramientas_de_analisis=Analisys Tools
+Icon_not_found_=Icon not found
+Implimir=
+Indexando_espacialmente=Spatially indexing the layer
+Interleave_=Interleave:
+Interseccion=Intersect
+Interseccion._Introduccion_de_datos=Intersect. Data input
+Juntar=Merge
+Juntar._Introduccion_de_datos=Merge. Data input
+Las_traducciones_no_pudieron_ser_cargadas=Translations haven't could be loaded
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+LayerName=Layer name
+MaxFeaturesEditionCache=Max features edition cache
+Maximo=Maximum
+Media=Average
+Mensaje_buffer=Computing buffers
+Mensaje_clip=Clip geoprocess...
+Mensaje_convexhull=Convex hull geoproces
+Mensaje_difference=Difference geoprocess...
+Mensaje_dissolve=Dissolve geoprocess....
+Mensaje_enlace_espacial=Spatial Join geoprocess...
+Mensaje_interseccion=Intersection geoprocess...
+Mensaje_juntar=Merge geoprocess...
+Mensaje_primera_pasada_union=Computing intersections...
+Mensaje_procesando_buffer=Processing buffers
+Mensaje_procesando_buffer2=Dissolving buffers...
+Mensaje_procesando_clip_primero=Computing clip polygon...
+Mensaje_procesando_clip_segundo=Clipping geometries...
+Mensaje_procesando_convexhull=Computing convex hull...
+Mensaje_procesando_diferencia=Computing differences...
+Mensaje_procesando_dissolves=Dissolving geometries...
+Mensaje_procesando_enlace_espacial=Joining features...
+Mensaje_procesando_interseccion=Computing intersections...
+Mensaje_procesando_juntar=Merging geometries...
+Mensaje_segunda_pasada_union=Computing A-B differences...
+Mensaje_tercera_pasada_union=Computing B-A differences...
+Mensaje_union=Union geoprocess...
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+Minimo=Minimum
+Mover_geo=Move georeferenced image.
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+No_usar_buffer_redondeado=Rectangle end cap
+Num_intervalos=Number of Intervals
+Numero_anillos_concentricos=Number of radial buffers
+Numero_de_elementos_seleccionados=Number of selected features
+Obtener_mas_proximo=Use nearest geometry
+Operacion_de_overlay=Overlay operation
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+Photometric_=Photometric:
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Por_favor_active_la_capa=Please, activate the layer
+Preferences=Preferences
+Preferencias=Preferences
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+Recortar._Introduccion_de_datos=Clip. Data input
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Seleccion_por_capa=Selection by Layer
+Seleccionar_Directorio=Path with layers...
+Selected=Selected
+Show Errors=
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Solo_disolver_adyacentes=Only dissolve adjacents.
+Terminar=Finish
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+Union._Introduccion_de_datos=Union. Data input
+Usar_los_campos_de_la_capa=Use fields from cover
+Usar_solamente_los_elementos_seleccionados=Use selected features only
+WCS_properties=WCS Properties
+WFSLayer=WFS Layer
+Zoom_a_la_capa=Zoom to layer
+Zoom_previo=Previous zoom
+Zoom_sgte=Next zoom
+a_new_view=New view
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_field=Add field
+add_rows=Add rows
+add_vertex=Add vertex
+address=Address
+advanced=Advanced
+advanced_settings=Advanced options
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+algoritmo=Algorithm
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+arc=Arc
+arcims_load=Loading ArcIms
+arcims_server_error=ArcIMS server error
+area=Area
+attributeName=Name
+attributeType=Type
+borrar_todos=Delete all
+borrar_uno=Delete selected point
+box=box
+break=Break
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cantLoad=The WFS layer can't be loaded
+cant_connect=Connection failed
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+cargar=Load
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circle=Circle
+circle_=CIRCLE
+circumscribed=Circumscribed
+close_polyline=Close polyline
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Command stack
+compleja=
+complex_selection=Complex selection
+complex_selection_=COMPLEX SELECTION
+configurar_todas_las_extensiones=Configure all the extensions
+confirmacion=Confirm that...
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+connect=Connect
+contact_info=Contact info
+contiene_espacios_en_blanco=It has white space
+coordenadas_vacias=Empty coordinates
+copiar=Copy
+copy=Copy
+copy_=COPY
+cortar=Cut
+could_not_find_web_map_context_file=
+country=Country
+coverage=Coverage
+crear_worldfile=Create worldfile
+created_with=Created with
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+cut=Cut
+database_connection=Database Connection
+datum=Datum
+de =of 
+de 0=of 0
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_name=WFS Layer
+default_projection=Default projection
+default_value=Default Value
+define_fields=Define fields
+define_point=Define point
+defined_by_view_extent=Defined by the views extent
+dehacer=Undo
+del=Delete
+delete_field=Delete field
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+description_URL=Description URL
+desea_borrar_el_documento=¿Do you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=¿Do you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+disagregate_layers=Maintain layer structure
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edicion=Edition
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+edit_vertex=Edit vertex
+edit_vertex_=EDIT VERTEX
+editar_vertices=Edit vertex
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+eliminar_punto=Remove point
+eliminar_todos_puntos=Remove all points
+en=
+en_unidades=in units
+end=End
+end_polygon=End polygon
+endinfo=Finalization Statistics
+enter_layer_name=Enter layer name
+enter_path_to_file=Enter file path
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_capa_puntos=Error loading the layer. Maybe the Georreferencing layer is not active.
+error_file_exists=The file already exists. Do you want to overwrite?
+error_file_not_writable=Could not create output file.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+error_writting_file=Error writting file
+errores_csv=Include the errors in the CSV file.
+escala_desconocida=Unknown scale
+exploit=Exploit
+exploit_=EXPLOIT
+exportJOP2Title=
+export_to_map_context=Export to Map Context
+exportando_features=Exporting features
+exporting_=Exporting
+extend=Extend
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+feature=Layers
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field=Field
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+file=File
+file_name=File
+file_version=File version
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WCS_layer=Fit WCS layer
+fit_WFS_layer=Fit WFS layer
+formato_de_numero_incorrecto=Incorrect number format
+fuera_de_extent=The selected point is out of the image's extent
+georaster=Georeferencing
+georef=Georeference
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+georreferenciar=Georeference image
+gml=GML
+gml_files=GML Files
+grado_polinomio=Polynom deegree
+group_graphic_line=Group graphic line
+grupo=group
+guardar=Save
+height=Height
+horizontal_space=Horizontal space
+host=Computer
+html_in_a_new_view=<HTML>Creates a new view into the project. The new view will contain all the layers defined in the file.</HTML>
+html_in_other_view=<HTML>Adds the layers to the selected view in the list.</HTML>
+html_in_the_current_view=<HTML>Adds the layers defined in the file to the current active view.</HTML>
+idioma=Language
+imagen_no_accesible=Unable to access the image
+import_from_ascii=Import table from a CSV (.csv) file.
+import_map_context=Import maps from an OGC's Web Map Context file (.cml).
+inches=
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or [3P]
+insert_central_point_polygon=Insert central point of the polygon
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor_or_reference=Insert scale factor |2| or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point_arc_or_close=Insert next point, Arc [A] or Close [C]
+insert_next_point_line_or_close=Insert next point, Line [N] or Close [C]
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon [E]
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner_or_square=Insert point of opposite corner or square [C]
+insert_point_move=Insert point for move
+insert_point_or_end=Insert point or End geometry [E]
+insert_point_selection=Insert selection point
+insert_point_selection_or_types=Insert point or Circle [IC], Out rect.[OR], Polyg.[IP], Intern. pol.[CP], Out pol.[OP], Intern. circle [CC], Out circle [OC]
+insert_radius=Insert radius [R]
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point_or_factor=Insert origin or Reference Line or Scale Factor [F]
+insert_rotation_angle=Insert rotation angle
+insert_row=Insert row
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar_cajetin=Insert grid
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+insertar_polilinea=Insert polyline
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inter_arc=Internal arc
+inter_line=Internal line
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+into_circle=Inscribed
+into_circle_or_circumscribed=Inscribed [I] o Circumscribed [C] in circle |C|
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+is_required=is required
+join_=JOIN
+keywords=Keywords
+latitud=Latitud
+layer=Layer
+layerName=Layer name
+layerType=Geometry type
+layers_in_other_view=Layers in other view
+layers_in_the_current_view=Layers in the current view
+length=Length
+length_of_field=Length of field
+line=Line
+line_=LINE
+line_type=Line type
+load_from_xml=Load from XML file (.rmf)
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.
+It cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.
+It cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+map_context_file_error=Web Map Context file error
+map_size_in_pixels=Map size (pixels)
+mapa=Map
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase 
+the amount of Features recovered by modifying the 
+"Buffer" parameter.
+max_features=Max. features
+max_length_is=Max length is
+metadatos=Metadatos
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_puntos=Show numbers
+mostrar_rejilla=Show grid
+move=Move
+move_=MOVE
+move_elements=Move elements
+move_handlers=Move handlers
+msg_save_raster=The operation will be canceled. Would you like to continue?
+multi_type=Multiple type
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+must_specify_a_file=You must specify a target file.
+nearest_point=Nearest point
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_dxf=New DXF
+new_field=New field
+new_field_properties=New field properties
+new_layer=New layer
+new_postgis=New PostGIS
+new_shp=Nuevo SHP
+next_point_or_end=Next point or end
+next_previous_add_del_cancel=Point, Next vertex [S], Previous [A], Add [I] or Remove [E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_columnas=Number of columns
+num_filas=Number of rows
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=Disconnected
+online=Connected
+open_layers_as=Open layers as
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options=Options
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+pila_de_comandos=commands stack
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+point=Point
+point_=POINT
+point_type=Point type
+poligono=Polygon
+polilinea=polyline
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Polygon type
+polyline=Polyline
+polyline_=POLYLINE
+poner_capas_a=Set layers as
+postcode=Postcode
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+previous=Previous
+previsualizacion=Preview
+primero=First
+problems_encountered_while_importing=Problems encountered while importing
+procesar=Process
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+projection=Projection
+propiedad=Oroperty
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+props=Properties
+ps=
+puerto=Port
+puntos=Points
+realces=Enhancement
+realmente_desea_guardar=Would you really like to save?
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+rectangle=Rectangle
+rectangle_=RECTANGLE
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+reference_system=Reference System
+rehacer=Redo
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+resolution=Resolution
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotate=Rotate
+rotate_=ROTATE
+rotation_field=Rotation field
+save_to_ascii=Export table of points into a text file.
+save_to_xml=Save to XML (.grf)
+scale_=SCALE
+script_sep=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar=Select
+seleccionar_capas_raster=Select raster layers
+seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the labels text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_driver=Select driver
+select_features=Select the layer
+select_fields=Select the layer fields
+select_from_point=Select from point
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_other_geometry_or_end=Select other geometry or End[E]
+selected_layer=Selected layer
+selected_parameters=Selected parameters
+selectfromview=Select a point from the view
+selection=Selection
+selection_=SELECTION
+selection_up=Move selection to top
+separator=Separator
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+size=Size
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+square=Corner
+start_edition=Start edition
+state_or_province=State/Province
+stop_edition=Finish edition
+stretch=Stretch
+stretch_=STRETCH
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry=Symmetry
+symmetry_=SYMMETRY
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tamanyo_pagina=Page size
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+texto=Text
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+time=Time
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+total=Total
+transparencia_pixel=Transparency per pixel
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+ultimo=Last
+undo=Undo
+unsupported_crs=Unsupported CRS
+unsupported_map_context_version=Uunsupported Web Map Context version.
+unsupported_version=Unsupported version
+url=url
+use_custom_size=Custom size
+use_full_extent=Use full extent
+use_interpolation_method=Use interpolation method
+use_view_size=View size
+vacia=Empty
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning=Warning
+warning_title=
+wcs_cant_connect=Cant connect to WCS
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+web_map_context=Web Map Context
+web_map_context_settings=Web Map Context properties
+wfs_properties=WFS Properties
+wfs_server_error=
+will_be_truncated=
+y_en=and in
+yes=Yes
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties	(revision 42196)
@@ -0,0 +1,752 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+a_new_view=Vista nueva
+Abrir_Geoproceso=Abrir Geoproceso
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_field=A\u00f1adir campo
+add_rows=A\u00f1adir filas
+add_vertex=A\u00f1adir v\u00e9rtice
+address=Direcci\u00f3n
+advanced=Avanzada
+advanced_settings=Opciones avanzadas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+ajustar_rejilla=Ajustar rejilla
+algoritmo=Algoritmo
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+anadir_tag=A\u00f1adir etiqueta
+Analisis=An\u00e1lisis
+Analisis_Desc=
+arc=Arco
+arcims_load=Carga de ArcIms
+arcims_server_error=Error en el servidor ArcIMS
+area=\u00c1rea
+Area_de_influencia_definida_por_un_campo=\u00c1rea de influencia definida por un campo
+Area_de_influencia_definida_por_una_distancia=\u00c1rea de influencia definida por una distancia
+Areas_de_influencia._Introduccion_de_datos=\u00c1reas de influencia. Introducci\u00f3n de datos
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Atributos_Numericos=Atributos num\u00e9ricos
+attributeName=Nombre
+attributeType=Tipo
+Block_Size_=Tama\u00f1o de bloque\:
+borrar_todos=Borrar todos los puntos
+borrar_uno=Borrar punto seleccionado
+box=Cajet\u00edn
+break=
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+Campo_para_disolver=Campo para disolver
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edici\u00f3n
+cant_connect=No se puede realizar la conexi\u00f3n
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+cantLoad=No se puede cargar la capa WFS
+Capas=Capas
+Capas_del_directorio=Capas del directorio
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+cargar=Cargar
+centimeters=Cent\u00edmetros
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circle=C\u00edrculo
+circle_=C\u00cdRCULO
+circumscribed=Circunscrito
+Clean=
+close_polyline=Cerrar polil\u00ednea
+Cobertura_de_datos=Capa de datos
+Cobertura_de_entrada=Capa de entrada
+Cobertura_de_recorte=Capa de recorte
+Cobertura_de_salida=Capa de salida
+Coberturas_de_entrada=Capas de entrada
+coincidir_tamanyo=Coincidir tama\u00f1o
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+commands_stack=Pila de comandos
+compleja=
+complex_selection=Selecci\u00f3n compleja
+complex_selection_=SELECCI\u00d3N COMPLEJA
+Compression_=Compresi\u00f3n\:
+configurar_todas_las_extensiones=Configurar todas las extensiones
+confirmacion=Confirmaci\u00f3n
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+connect=Conectar
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+contact_info=Informaci\u00f3n de contacto
+contiene_espacios_en_blanco=Contiene espacios en blanco
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+Convex_Hull._Introduccion_de_datos=Convex Hull. Introducci\u00f3n de datos
+coordenadas_vacias=Coordenadas vac\u00edas
+copiar=Copiar
+copy=Copiar
+copy_=COPIAR
+cortar=Cortar
+could_not_find_web_map_context_file=
+country=Pa\u00eds
+coverage=Cobertura
+Crear_Buffer=Crear \u00e1rea de influencia
+Crear_Indice=Crear \u00edndice espacial...
+Crear_Indice_Pregunta_1=\u00bfDesea crear un \u00edndice espacial para la capa?
+crear_worldfile=Crear fichero de georreferenciaci\u00f3n (worldfile)
+created_with=Creado con
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/Contiene el pol\u00edgono
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+cut=Cortar
+database_connection=Conexi\u00f3n a Base de Datos
+datum=Datum
+DBManager=Gestor de Base de datos
+de\ =
+de\ 0=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener informaci\u00f3n.
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_name=Capa WFS
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+define_fields=Define los campos
+define_point=Defina el punto
+defined_by_view_extent=Usar extensi\u00f3n de la vista
+dehacer=Deshacer
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+Dentro_y_fuera=Dentro y fuera del pol\u00edgono
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+description_URL=URL descripci\u00f3n
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+Diferencia_Introduccion_de_datos=Diferencia. Introducci\u00f3n de datos
+disagregate_layers=Conservar estructura de capas
+Disolver._Introduccion_de_datos=Disolver. Introducci\u00f3n de datos
+Disolver_entidades=Disolver entidades
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar s\u00f3lo el texto
+dxf=dxf
+edicion=Edici\u00f3n
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+edit_vertex=Editar v\u00e9rtice
+edit_vertex_=EDITAR V\u00c9RTICE
+editar_vertices=Editar V\u00e9rtices
+Edition=Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=El elemento ya existe
+Elija_una_herramienta_de_analisis=Elija una herramienta de an\u00e1lisis
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+eliminar_punto=Eliminar punto
+eliminar_todos_puntos=Eliminar todos los puntos
+en=
+en_unidades=en unidades
+end=Terminar
+end_polygon=Finalizar pol\u00edgono
+endinfo=Estadisticas de finalizaci\u00f3n
+Enlace_espacial=Enlace espacial
+Enlace_espacial._Introduccion_de_datos=Enlace espacial. Introducci\u00f3n de datos
+enter_layer_name=Introducir nombre de la capa
+enter_path_to_file=Introducir la ruta del fichero
+Error_atributo_no_numerico=Atributo para distancia de buffer no num\u00e9rico
+error_capa_puntos=Error al cargar la capa. Puede que la capa de Georreferenciaci\u00f3n no est\u00e9 activa.
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_chequeando_precondiciones=Error verificando precondiciones
+Error_chequeo_tipo_geometria=Error al chequear el tipo de geometria
+Error_distancia_buffer=Debes introducir una distancia de buffer
+Error_ejecucion=Error de ejecuci\u00f3n
+Error_entrada_datos=Error de entrada de datos
+Error_escritura_resultados=Error de escritura de resultados
+Error_exportando_SLD=Error exportando SLD
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecuci\u00f3n del geoproceso
+error_file_exists=El fichero ya existe.\u00bfDesea sobreescribirlo?.
+error_file_not_writable=No es posible crear el fichero de salida.
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Error_spjoinmn_sin_funcion=No has seleccionado ninguna funci\u00f3n resumen para los atributos num\u00e9ricos
+error_writting_file=Error escribiendo el archivo
+errores_csv=Incluir los errores en fichero CSV.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+escala_desconocida=Escala desconocida
+Escoger_Fun_Resumen=<-
+exploit=Explotar
+exploit_=EXPLOTAR
+export_to_map_context=Exportar a Map Context
+exportando_features=Exportando funcionalidades
+exporting_=Exportando
+exportJOP2Title=
+extend=Alargar
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+feature=Capas
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+Ficheros_de_cartografia=Ficheros de datos cartogr\u00e1ficos
+Ficheros_SHP=Ficheros SHP
+field=Campo
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+file=Archivo
+file_name=Archivo
+file_version=Versi\u00f3n del fichero
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WCS_layer=Ajustar capa WCS
+fit_WFS_layer=Ajustar capa WFS
+Flatness=
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_de_numero_incorrecto=Formato de n\u00famero incorrecto.
+Fuera=Fuera del pol\u00edgono
+fuera_de_extent=El punto seleccionado est\u00e1 fuera del extent de la imagen
+Funciones_Sumarizacion=Funciones de agrupamiento
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw\:
+Geoprocesos=Geoprocesos
+georaster=Georreferenciaci\u00f3n
+georef=Georreferenciar
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+georreferenciar=Georreferenciar
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+grado_polinomio=Grado del polinomio
+Grid=Rejilla
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+guardar=Guardar
+height=Alto
+Herramientas_de_analisis=Herramientas de an\u00e1lisis
+horizontal_space=Espacio horizontal
+host=M\u00e1quina
+html_in_a_new_view=<HTML>Crea una vista nueva en el proyecto. La nueva vista contendr\u00e1 todas las capas definidas por el fichero.</HTML>
+html_in_other_view=<HTML>A\u00f1ade las capas en la vista que especifique de la lista siguiente\:</HTML>
+html_in_the_current_view=<HTML>A\u00f1ade las capas definidas en el fichero a la vista activa.</HTML>
+Icon_not_found_=No se encontr\u00f3 el icono
+idioma=Idioma
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+Implimir=
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+import_map_context=Importar mapas desde un fichero Web Map Context de OGC
+inches=Pulgadas
+incorrect_option=Opci\u00f3n incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+Indexando_espacialmente=Indexando espacialmente la capa
+indexar_campos=Indexar campos
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o [3P]
+insert_central_point_polygon=Insertar punto central del pol\u00edgono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar \u00faltimo punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point_arc_or_close=Insertar siguiente punto, Arco[A] o Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_line_or_close=Insertar punto siguiente, Linea[N], Cerrar polil\u00ednea[C] o Terminar[T]
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar pol\u00edgono de selecci\u00f3n[E]
+insert_number_sides=Insertar n\u00famero de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner_or_square=Insertar punto de esquina opuesta o Cuadrado[C]
+insert_point_move=Insertar punto de desplazamiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_point_selection=Precise punto de selecci\u00f3n
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius=Precise r\u00e1dio(r)
+insert_radius_or_second_point=Insertar r\u00e1dio o segundo punto
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Precise \u00e1ngulo de rotaci\u00f3n
+insert_row=Insertar fila
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o \u00e1ngulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insert_third_point=Insertar tercer punto
+insertar_cajetin=Insertar cajet\u00edn
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+insertar_polilinea=Insertar polil\u00ednea
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del pol\u00edgono
+inter_arc=Arco interno
+inter_line=L\u00ednea interna
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+internal_polygon_=Pol\u00edgono interno
+Interseccion=Intersecci\u00f3n
+Interseccion._Introduccion_de_datos=Intersecci\u00f3n. Introducci\u00f3n de datos
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito en el c\u00edrculo[I] o Circunscrito[C]<C>
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+is_required=es obligatorio
+join_=UNIR
+Juntar=Juntar
+Juntar._Introduccion_de_datos=Juntar. Introducci\u00f3n de datos
+keywords=Palabras clave
+Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
+latitud=Latitud
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+layer=Capa
+layerName=Nombre de la capa
+LayerName=Nombre de la capa
+layers_in_other_view=Capas en la vista que yo elija
+layers_in_the_current_view=Capas en la vista actual
+layerType=Tipo de geometr\u00eda
+length=Tama\u00f1o
+length_of_field=Longitud de campo
+line=L\u00ednea
+line_=L\u00cdNEA
+line_type=Tipo l\u00ednea
+load_from_xml=Cargar desde fichero XML (.rmf)
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+map_context_file_error=Error en el archivo Web Map Context
+map_size_in_pixels=Tama\u00f1o del mapa (p\u00edxeles)
+mapa=Mapa
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+Maximo=M\u00e1ximo
+Media=Media
+Mensaje_buffer=Calculando \u00e1reas de influencia...
+Mensaje_clip=Geoproceso recortar...
+Mensaje_convexhull=Geoproceso convex hull...
+Mensaje_difference=Geoproceso diferencia...
+Mensaje_dissolve=Geoproceso dissolve....
+Mensaje_enlace_espacial=Geoproceso enlace espacial...
+Mensaje_interseccion=Geoproceso intersecci\u00f3n...
+Mensaje_juntar=Geoproceso juntar...
+Mensaje_primera_pasada_union=Calculando intersecciones...
+Mensaje_procesando_buffer=Generando buffers...
+Mensaje_procesando_buffer2=Disolviendo buffers...
+Mensaje_procesando_clip_primero=Calculando pol\u00edgono de recorte
+Mensaje_procesando_clip_segundo=Recortando geometrias
+Mensaje_procesando_convexhull=Calculando convex hull...
+Mensaje_procesando_diferencia=Calculando diferencias...
+Mensaje_procesando_dissolves=Dissolviendo geometrias...
+Mensaje_procesando_enlace_espacial=Enlazando elementos...
+Mensaje_procesando_interseccion=Calculando intersecciones...
+Mensaje_procesando_juntar=Juntando geometrias...
+Mensaje_segunda_pasada_union=Calculando diferencias entre A-B...
+Mensaje_tercera_pasada_union=Calculando diferencias entre B-A...
+Mensaje_union=Geoproceso union...
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+metadatos=Metadatos
+Minimo=M\u00ednimo
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_puntos=Mostrar numeraci\u00f3n
+mostrar_rejilla=Mostrar rejilla
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+Mover_geo=Mover imagen a georreferenciar
+msg_save_raster=Se va a cancelar la operaci\u00f3n. \u00bfDesea continuar?
+multi_type=Tipo m\u00faltiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+must_specify_a_file=Debe especificar un fichero de destino.
+nearest_point=Punto m\u00e1s cercano
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+new_layer=Nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next_point_or_end=Siguiente punto o finalizar[E]
+next_previous_add_del_cancel=Punto, Siguiente v\u00e9rtice[S], Anterior[A], A\u00f1adir[I] o Eliminar[E]
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quiz\u00e1 olvid\u00f3 inicializar la clase.
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+No_usar_buffer_redondeado=No usar borde redondeado
+nombre_no_valido=Nombre no v\u00e1lido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_columnas=N\u00famero de columnas
+num_filas=N\u00famero de filas
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+Numero_anillos_concentricos=N\u00famero de anillos conc\u00e9ntricos
+Numero_de_elementos_seleccionados=N\u00famero de elementos seleccionados
+numero_decimales_mostrar=N\u00famero decimales
+Obtener_mas_proximo=Usar el mas pr\u00f3ximo
+offline=Desconectado
+online=Conectado
+open_layers_as=Abrir las capas como
+operacion_cancelada=Operaci\u00f3n cancelada
+Operacion_de_overlay=Operaciones de solape
+optinos.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options=Opciones
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del pol\u00edgono
+out_rectangle=Fuera del rect\u00e1ngulo
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pila_de_comandos=Pila de comandos
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+poligono=Pol\u00edgono
+polilinea=polil\u00ednea
+polygon=Pol\u00edgono
+polygon_=POL\u00cdGONO
+polygon_type=Tipo Pol\u00edgono
+polyline=Polil\u00ednea
+polyline_=POLIL\u00cdNEA
+poner_capas_a=Poner capas a ...
+Por_favor_active_la_capa=Por favor active la capa
+postcode=C\u00f3digo postal
+postgis=PostGIS
+precision=Precisi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferencias
+preferencias=Preferencias
+Preferencias=Preferencias
+previous=Anterior
+previsualizacion=Previsualizaci\u00f3n
+primero=Primero
+problems_encountered_while_importing=Se encontraron problemas al importar
+procesar=Procesar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+propiedades_cajetin=Propiedades del cajet\u00edn
+propiedades_capa=Propiedades de la capa
+props=Propiedades
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+ps=
+puerto=Puerto
+puntos=Puntos
+realces=Realces
+realmente_desea_guardar=\u00bfRealmente desea guardar?
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+Recortar._Introduccion_de_datos=Recortar. Introducci\u00f3n de datos
+rectangle=Rect\u00e1ngulo
+rectangle_=RECT\u00c1NGULO
+Recursos\ Disponibles=Recursos Disponibles
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+reference_system=Sistema de Referencia
+rehacer=Rehacer
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+resolution=Resoluci\u00f3n
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotate=Rotar
+rotate_=ROTAR
+rotation_field=Campo de rotaci\u00f3n
+save_to_ascii=Exportar tabla de puntos a fichero de texto.
+save_to_xml=Salvar a fichero XML (.grf)
+scale_=ESCALAR
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+Seleccion_por_capa=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar=Seleccionar
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+Seleccionar_Directorio=Carpeta con capas...
+seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_driver=Seleccione el driver
+select_features=Selecciona las capas
+select_fields=Seleccionar campos de la capa
+select_from_point=Seleccionar a partir de un punto
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_geometry_type=Seleccione el tipo de geometr\u00eda
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+Selected=Capa seleccionada
+selected_layer=Capa seleccionada
+selected_parameters=Par\u00e1metros seleccionados
+selectfromview=Seleccionar punto desde la vista
+selection=Seleccionar
+selection_=SELECCIONAR
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Show\ Errors=
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+si=s\u00ed
+simbolo=S\u00edmbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+size=Tama\u00f1o
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+Solo_disolver_adyacentes=S\u00f3lo disolver adyacentes.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+square=Esquina
+start_edition=Comenzar edici\u00f3n
+state_or_province=Estado/Provincia
+stop_edition=Terminar edici\u00f3n
+stretch=Estirar
+stretch_=ESTIRAR
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symmetry=Simetr\u00eda
+symmetry_=SIMETR\u00cdA
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+Terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+texto=Texto
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+time=Tiempo
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Topology=
+total=Total
+transparencia_pixel=Transparencia por pixel
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+ultimo=\u00daltimo
+Unable_to_find_icon=No se pudo encontrar el icono
+undo=Deshacer
+Union._Introduccion_de_datos=Uni\u00f3n. Introducci\u00f3n de datos
+unsupported_crs=CRS no soportado
+unsupported_map_context_version=Versi\u00f3n de Web Map Context no soportada
+unsupported_version=Versi\u00f3n no soportada
+url=url
+Usar_los_campos_de_la_capa=Usar los campos de la capa
+Usar_solamente_los_elementos_seleccionados=Usar solamente los elementos seleccionados
+use_custom_size=Tama\u00f1o personalizado
+use_full_extent=Usar extensi\u00f3n total
+use_interpolation_method=Usar metodo de interpolaci\u00f3n
+use_view_size=Tama\u00f1o de la vista
+vacia=Vac\u00eda
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning=Aviso
+warning_title=
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+WCS_properties=Propiedades del WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+web_map_context=Web Map Context
+web_map_context_settings=Propiedades Web Map Context
+wfs_properties=Propiedades WFS
+wfs_server_error=
+WFSLayer=Capa WFS
+will_be_truncated=ser\u00e1 truncado
+y_en=y en
+yes=Si
+zone=Huso
+Zoom_a_la_capa=Zoom a la capa
+zoom_in_factor=Factor zoom m\u00e1s
+zoom_out_factor=Factor zoom menos
+Zoom_previo=Extensi\u00f3n anterior
+Zoom_sgte=Extensi\u00f3n siguiente

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties	(revision 42196)
@@ -0,0 +1,425 @@
+#Translations for language [en]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Abrir_Geoproceso=Open Geoprocess
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+Analisis=Analisis
+Analisis_Desc=
+arc=Arc
+arcims_load=Loading ArcIms
+area=Area
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+attributeName=Name
+attributeType=Type
+Block_Size_=Block Size\:
+Bold=Bold
+box=box
+break=Break
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_connect_wfs=Cannot connect to WFS
+cant_reproject_from_any_of=Unable to reproject from any of
+Capas_del_directorio=Layers on directory
+capas_edition_cache=Mark the layers to be used for snapping
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+Clean=
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compression\:
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+contiene_espacios_en_blanco=It has white space
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+copiar=Copy
+cortar=Cut
+could_not_find_web_map_context_file=
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+database_connection=Database Connection
+datum=Datum
+DBManager=DataBase Manager
+de\ =of 
+de\ 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+defined_by_view_extent=Defined by the view\u0092s extent
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+en=
+en_unidades=in units
+Error_capa_vacia=Result layer is empty.\nCheck for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.\nPackages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+errores_csv=Include the errors in the CSV file.
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+exportJOP2Title=
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WFS_layer=Fit WFS layer
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw\:
+Geoprocesos=Geoprocesses
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+Gestor_de_Geoprocesos=Geoprocess toolbox
+gml=GML
+gml_files=GML Files
+Grid=Grid
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+host=Computer
+Icon_not_found_=Icon not found
+imagen_no_accesible=Unable to access the image
+Implimir=
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+Interleave_=Interleave\:
+internal_polygon=Internal polygon
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+Italic=Italic
+join_=JOIN
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+layerName=Layer name
+LayerName=Layer name
+layerType=Geometry type
+length_of_field=Length of field
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+mapa=Map
+max_features=Max. features
+max_length_is=Max length is
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase \nthe amount of Features recovered by modifying the \n"Buffer" parameter.
+MaxFeaturesEditionCache=Max features edition cache
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+nearest_point=Nearest point
+new_field_properties=New field properties
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+Num_intervalos=Number of Intervals
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=Disconnected
+online=Connected
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+Photometric_=Photometric\:
+pixel_point=
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+polyline_=POLYLINE
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferences
+preferencias=Preferences
+Preferencias=Preferences
+problems_encountered_while_importing=Problems encountered while importing
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+Progressive_=Progressive\:
+projection=Projection
+propiedad=Oroperty
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+ps=
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+Recursos\ Disponibles=Available Resources
+reference_system=Reference System
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotation_field=Rotation field
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar_capas_raster=Select raster layers
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+Selected=Selected
+selected_layer=Selected layer
+selection_up=Move selection to top
+separator=Separator
+Show\ Errors=
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+Size=Size
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+Unable_to_find_icon=Unable to find icon
+unsupported_crs=Unsupported CRS
+url=url
+use_full_extent=Use full extent
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning_title=
+wcs_cant_connect=Can\u0092t connect to WCS
+wcs_server_timeout=Server timeout
+wfs_properties=WFS Properties
+wfs_server_error=
+WFSLayer=WFS Layer
+will_be_truncated=
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
+Zoom_sgte=Next zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties-UTF8	(revision 42196)
@@ -0,0 +1,429 @@
+1:=
+Abrir_Geoproceso=Open Geoprocess
+Agregacion=Aggregation
+Agregacion_Desc=Geoprocesses that transform detailed data in resumed data.
+Analisis=Analisis
+Analisis_Desc=
+Asistente_de_geoprocesamiento=Geoprocessing Wizard
+Block_Size_=Block Size:
+Bold=Bold
+Capas_del_directorio=Layers on directory
+Clean=
+Compression_=Compression:
+Consola_de_jython=Jython Console
+Consola_de_jython_tooltip=Opens a jython console
+Conversion_de_datos=Data conversion
+Conversion_de_datos_Desc=Geoprocesses that transform data (format conversion, reproject, etc.)
+DBManager=DataBase Manager
+Edition=Edition
+Edition_Properties=Edition Properties
+Ejecutando comando: =Execute command:
+Error_capa_vacia=Result layer is empty.
+Check for a possible error.
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_plantilla=Error saving the template
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Error_seleccionar_capas_merge=You must select the layers to merge.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Must select a geoprocess in the tree
+Error_seleccionar_gp_desc="You've selected a package.
+Packages are logic groups of geoprocesses. Expand the tree and select a geoprocess to launch it
+Flatness=Flatness
+Formato_de_numero_erroneo=Incorrect number format
+GC=Computational Geometry
+GC_Desc=Geoprocesses that make task related with computational geometry.
+Generate_Tfw_=Generate Tfw:
+Geoprocesos=Geoprocesses
+Gestor_de_Geoprocesos=Geoprocess toolbox
+Grid=Grid
+Icon_not_found_=Icon not found
+Implimir=
+Interleave_=Interleave:
+Italic=Italic
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+LayerName=Layer name
+MaxFeaturesEditionCache=Max features edition cache
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No extension associated with this event
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+Num_intervalos=Number of Intervals
+Overlay=Overlay
+Overlay_Desc=Geoprocesses that extract new information from the overlay of two layers.
+Photometric_=Photometric:
+Plain=Regular
+PluginServices.Bug en el código=Application bug
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferences
+Preferencias=Preferences
+Progressive_=Progressive:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Projections
+Recursos Disponibles=Available Resources
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=Selected
+Show Errors=
+Size=Size
+Sobreescribir_fichero=Overwrite file
+Sobreescribir_fichero_Pregunta_1=The selected file already exists
+Sobreescribir_fichero_Pregunta_2=Do you want to overwrite it?
+Topology=
+Triangulation=
+Unable_to_find_icon=Unable to find icon
+WFSLayer=WFS Layer
+Zoom_sgte=Next zoom
+accept_tip=Process the GCPs and save the georreferencing. Finish the GCPs introduction.
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_rows=Add rows
+agrupacion=Grouping
+ajustar_rejilla=Adjust grid
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+ampl_extent=Change the extension of the image to georreference
+anadir_tag=Add tag
+arc=Arc
+arcims_load=Loading ArcIms
+area=Area
+attributeName=Name
+attributeType=Type
+box=box
+break=Break
+button.resolution.calculate=
+cajetin=Box
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+cancel_tip=Undo the last changes and close the dialog. It can be edited again to georreference.
+cancelar_edicion=Cancel edition
+cant_connect_wfs=Cannot connect to WFS
+cant_reproject_from_any_of=Unable to reproject from any of
+capas_edition_cache=Mark the layers to be used for snapping
+centimeters=
+centrar_punto=Center view in the selected point
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+coincidir_tamanyo=Match size
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configure all the extensions
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+contiene_espacios_en_blanco=It has white space
+copiar=Copy
+cortar=Cut
+could_not_find_web_map_context_file=
+cuadro_no_asociado=The georreferencing box is not associated with any layer on the view, it will be closed. Please, open the dialog associated to the required layer.
+database_connection=Database Connection
+datum=Datum
+de =of 
+de 0=of 0
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+defined_by_view_extent=Defined by the views extent
+deleted_feature=Deleted feature
+desactivar_capa=Hide the layer after the first point.
+desactivar_puntos=Disable the point layer after the first point.
+desagrupar_capas=Ungroup layers
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desea_borrar_el_documento=¿Do you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=¿Do you want to continue?
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+documento=
+draw_text_only=Draw text only
+dxf=dxf
+edit_copy=Copy
+edit_cut=Cut
+edit_delete=Delete
+edit_layer_properties_to_fix_them=Edit layer properties to fix them
+edit_paste=Paste
+edit_redo=Redo
+edit_select_all=Select all
+edit_undo=Undo
+elemento_ya_existe=The element already exists
+eliminar_columna=Remove column
+eliminar_fila=Remove row
+en=
+en_unidades=in units
+errorMessageJComboBoxItemsSeekerConfigurable=Invalid behaviour configuration.
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+errores_csv=Include the errors in the CSV file.
+escala_desconocida=Unknown scale
+exploit_=EXPLOIT
+exportJOP2Title=
+export_to=Export to ...
+export_to_map_context=Export to Map Context
+extend_=EXTEND
+extensiones=Extensions
+factor_zoom_incorrecto=Incorrect zoom factor.
+features_desea_continuar=features, do you want to continue?
+fichero=file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filter=
+filterOnAWFSLayer=
+final_point=Final point
+fit_WFS_layer=Fit WFS layer
+georef_file=Georeferencing file
+georeferenciado=Georeferenced
+gml=GML
+gml_files=GML Files
+group_graphic_line=Group graphic line
+grupo=group
+horizontal_space=Horizontal space
+host=Computer
+imagen_no_accesible=Unable to access the image
+import_from_ascii=Import table from a CSV (.csv) file.
+inches=
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+indexar_campos=Index fields
+initial_warning=<html><b>WARNING!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_point_or_end=Insert point or End geometry [E]
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insertar_capa=Insert layer
+insertar_columna=Insert column
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+insertar_fila=Insert row
+internal_polygon=Internal polygon
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_dimension_values=Invalid dimension values
+invalid_priority_value=Invalid priority value
+invalid_value_for_gap=
+invert_selection=Invert selection
+join_=JOIN
+layerName=Layer name
+layerType=Geometry type
+length_of_field=Length of field
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.
+It cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.
+It cannot be removed.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Manage fields
+mapa=Map
+maxFeatures_aviso=Reached max amount of Features allowed. You can increase 
+the amount of Features recovered by modifying the 
+"Buffer" parameter.
+max_features=Max. features
+max_length_is=Max length is
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modificar=modify
+modify=Modify
+mostrar_escala_numerica=Show numeric scale.
+mostrar_rejilla=Show grid
+move_elements=Move elements
+move_handlers=Move handlers
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+nearest_point=Nearest point
+new_field_properties=New field properties
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+no_puede_continuar=Can't continue
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+nombre_no_valido=Invalid name
+none=
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=Disconnected
+online=Connected
+operacion_cancelada=Cancelled operation
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=
+options.firewall.http.enabled=Use proxy HTTP server
+options.firewall.http.host=HTTP proxy server
+options.firewall.http.incorrect_host=Invalid HTTP host
+options.firewall.http.nonProxy=Connect directly to
+options.firewall.http.password=Password
+options.firewall.http.port=HTTP proxy port
+options.firewall.http.user=Username
+options.firewall.socks.enabled=Use proxy SOCKS server
+options.firewall.socks.host=SOCKS proxy host
+options.firewall.socks.incorrect_host=Invalid SOCKS host
+options.firewall.socks.port=SOCKS proxy port
+options.foldering.data_folder=Geographycal data folder
+options.foldering.projects_folder=Projects folder
+options.foldering.template_folder=Template folder
+options.foldering.title=Foders
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance (needs restart)
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+parte1=
+parte2=
+paste_elements=Paste elements
+pdf=
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+personalizar_margenes=Customize margins
+pixel_point=
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+polyline_=POLYLINE
+postgis=PostGIS
+precision=Precision
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+problems_encountered_while_importing=Problems encountered while importing
+process_tip=Processes the GCP's and assigns a temporal extent to the images
+projection=Projection
+propiedad=Oroperty
+ps=
+realces=Enhancement
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+recargar=Reload
+reference_system=Reference System
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_geometry=Remove geometry
+remove_rows=Remove rows
+rename_field=Rename field
+restore_defaults=Restore defaults
+restore_palette=Restore palette
+rotation_field=Rotation field
+script_sep=
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+selecciona_sistema_de_referencia=Choose reference system
+seleccionar_capas_raster=Select raster layers
+seleccionar_por_poligono=Select by polygon
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the labels text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the labels height</HTML>
+select=Select
+select_area=Search area
+select_coordinates_manually=Select the coordinates manually
+select_coordinates_using_view=Select the coordinates in the view
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_other_geometry_or_end=Select other geometry or End[E]
+selected_layer=Selected layer
+selection_up=Move selection to top
+separator=Separator
+show_this_dialog_next_startup=Show this dialog on next startup
+shp=SHP
+si=yes
+simbolo=Symbol
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifies the minimum size of the lines that will form the curves.
+suprimir_objetos_origen=Remove objects from source? Yes[Y] or No[N]
+symmetry_=SYMMETRY
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+tamanyo_pagina=Page size
+terminar=Terminate
+terminar_edicion=Terminate edition
+test_measure=
+test_now=Check now
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+this_table_is_not_self_editable=Table not editable
+tolerancia_incorrecta=Incorrect tolerance
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+unsupported_crs=Unsupported CRS
+url=url
+use_full_extent=Use full extent
+ver_error_capa=Show errors
+ver_tags=
+vertical_space=Vertical space
+warning_title=
+wcs_cant_connect=Cant connect to WCS
+wcs_server_timeout=Server timeout
+wfs_properties=WFS Properties
+wfs_server_error=
+will_be_truncated=
+y_en=and in
+zone=Zone
+zoom_in_factor=Zoom in factor
+zoom_out_factor=Zoom out factor
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties	(revision 42196)
@@ -0,0 +1,425 @@
+#Translations for language [es]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Abrir_Geoproceso=Abrir Geoproceso
+accept_tip=Procesa los GCP's y salva la georreferenciaci\u00f3n. Da por terminada la introducci\u00f3n de GCP's.
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_rows=A\u00f1adir filas
+Agregacion=Agregaci\u00f3n
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+agrupacion=Agrupaci\u00f3n
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensi\u00f3n de la imagen a georreferenciar
+anadir_tag=A\u00f1adir etiqueta
+Analisis=An\u00e1lisis
+Analisis_Desc=
+arc=Arco
+arcims_load=Carga de ArcIms
+area=\u00c1rea
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+attributeName=Nombre
+attributeType=Tipo
+Block_Size_=Tama\u00f1o de bloque\:
+Bold=Negrita
+box=Cajet\u00edn
+break=
+button.resolution.calculate=Calcula resoluci\u00f3n
+cajetin=Cajet\u00edn
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un a\u00f1o
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un a\u00f1o
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+cancel_tip=Cierra el dialogo deshaciendo los \u00faltimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edici\u00f3n
+cant_connect_wfs=No ha sido posible realizar la conexi\u00f3n con el WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ning\u00fan
+Capas_del_directorio=Capas del directorio
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+centimeters=Cent\u00edmetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+Clean=
+coincidir_tamanyo=Coincidir tama\u00f1o
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=Compresi\u00f3n\:
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+contiene_espacios_en_blanco=Contiene espacios en blanco
+Conversion_de_datos=Conversi\u00f3n de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyecci\u00f3n, etc.)
+copiar=Copiar
+cortar=Cortar
+could_not_find_web_map_context_file=
+cuadro_no_asociado=El cuadro de georreferenciaci\u00f3n no est\u00e1 asociado a ninguna capa sobre la vista, este se cerrar\u00e1. Por favor, abra el di\u00e1logo asociado a la capa que necesite.
+database_connection=Conexi\u00f3n a Base de Datos
+datum=Datum
+DBManager=Gestor de Base de datos
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+defined_by_view_extent=Usar extensi\u00f3n de la vista
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa despu\u00e9s del primer punto.
+desactivar_puntos=Desactiva capa de puntos despu\u00e9s del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar s\u00f3lo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+Edition=Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+Ejecutando\ comando\:\ =Execute command\:
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+en=
+en_unidades=en unidades
+Error_capa_vacia=La capa de resultados no tiene ning\u00fan registro.\nEs posible que se haya producido alg\u00fan error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.\nLos paquetes son agrupaciones l\u00f3gicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+errores_csv=Incluir los errores en fichero CSV.
+errorMessageJComboBoxItemsSeekerConfigurable=Configuraci\u00f3n del comportamiento inv\u00e1lida.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+exportJOP2Title=
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WFS_layer=Ajustar capa WFS
+Flatness=
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw\:
+Geoprocesos=Geoprocesos
+georef_file=Fichero de georreferenciaci\u00f3n
+georeferenciado=Georeferenciado
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+gml=GML
+gml_files=Ficheros gml
+Grid=Rejilla
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+horizontal_space=Espacio horizontal
+host=M\u00e1quina
+Icon_not_found_=No se encontr\u00f3 el icono
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+Implimir=
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometr\u00eda [E]
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+Interleave_=Entrelazado\:
+internal_polygon=Pol\u00edgono interno
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensi\u00f3n inv\u00e1lidos
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+invalid_value_for_gap=
+invert_selection=Invertir selecci\u00f3n
+Italic=Cursiva
+join_=UNIR
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+layerName=Nombre de la capa
+LayerName=Nombre de la capa
+layerType=Tipo de geometr\u00eda
+length_of_field=Longitud de campo
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+mapa=Mapa
+max_features=M\u00e1x. features
+max_length_is=La longitud m\u00e1xima es
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al m\u00e1ximo \n numero de Features permitido. Puede aumentar el n\u00famero de \nFeatures recuperadas modificando el par\u00e1metro "Buffer"
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+nearest_point=Punto m\u00e1s cercano
+new_field_properties=Propiedades del campo nuevo
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+nombre_no_valido=Nombre no v\u00e1lido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+Num_intervalos=N\u00famero de intervalos
+num_lados_insuficiente=N\u00famero de lados insuficiente
+numero_decimales_mostrar=N\u00famero decimales
+offline=Desconectado
+online=Conectado
+operacion_cancelada=Operaci\u00f3n cancelada
+optinos.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.configuration.screen=Configuraci\u00f3n de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contrase\u00f1a
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geogr\u00e1ficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posici\u00f3n de las ventanas.
+options.general.remember_windows_size=Recordar el tama\u00f1o de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva informaci\u00f3n bas\u00e1ndose en la superposici\u00f3n de dos capas.
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar m\u00e1rgenes
+Photometric_=Fotom\u00e9trica\:
+pixel_point=
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+polyline_=POLIL\u00cdNEA
+postgis=PostGIS
+precision=Precisi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+Preferences=Preferencias
+preferencias=Preferencias
+Preferencias=Preferencias
+problems_encountered_while_importing=Se encontraron problemas al importar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+Progressive_=Progresivo\:
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+ps=
+realces=Realces
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+recargar=Recargar
+Recursos\ Disponibles=Recursos Disponibles
+reference_system=Sistema de Referencia
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometr\u00eda
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotation_field=Campo de rotaci\u00f3n
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el \u00e1rea de b\u00fasqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_other_geometry_or_end=Seleccione otra geometr\u00eda o finalizar[E]
+Selected=Capa seleccionada
+selected_layer=Capa seleccionada
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Show\ Errors=
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+shp=SHP
+si=s\u00ed
+simbolo=S\u00edmbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+Size=Tama\u00f1o
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=\u00bfDesea sobreescribirlo?
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tama\u00f1o m\u00ednimo de las l\u00edneas que formar\u00e1n las curvas.
+suprimir_objetos_origen=\u00bfSuprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETR\u00cdA
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+Unable_to_find_icon=No se pudo encontrar el icono
+unsupported_crs=CRS no soportado
+url=url
+use_full_extent=Usar extensi\u00f3n total
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning_title=
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+wcs_server_timeout=Tiempo de espera agotado
+wfs_properties=Propiedades WFS
+wfs_server_error=
+WFSLayer=Capa WFS
+will_be_truncated=ser\u00e1 truncado
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom m\u00e1s
+zoom_out_factor=Factor zoom menos
+Zoom_sgte=Extensi\u00f3n siguiente

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties	(revision 42196)
@@ -0,0 +1,425 @@
+#Translations for language [eu]
+#Mon Oct 16 10:42:41 CEST 2006
+1\:=
+Abrir_Geoproceso=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+Agregacion=
+Agregacion_Desc=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+Analisis=
+Analisis_Desc=
+arc=
+arcims_load=
+area=
+Asistente_de_geoprocesamiento=
+attributeName=
+attributeType=
+Block_Size_=
+Bold=
+box=
+break=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_connect_wfs=
+cant_reproject_from_any_of=
+Capas_del_directorio=
+capas_edition_cache=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+Clean=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+Compression_=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+contiene_espacios_en_blanco=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+copiar=
+cortar=
+could_not_find_web_map_context_file=
+cuadro_no_asociado=
+database_connection=
+datum=
+DBManager=
+de\ =
+de\ 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+defined_by_view_extent=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+Edition=
+Edition_Properties=
+Ejecutando\ comando\:\ =
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+en=
+en_unidades=
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+errores_csv=
+errorMessageJComboBoxItemsSeekerConfigurable=
+escala_desconocida=
+exploit_=
+export_to=
+export_to_map_context=
+exportJOP2Title=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WFS_layer=
+Flatness=
+Formato_de_numero_erroneo=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+georef_file=
+georeferenciado=
+Gestor_de_Geoprocesos=
+gml=
+gml_files=
+Grid=
+group_graphic_line=
+grupo=
+horizontal_space=
+host=
+Icon_not_found_=
+imagen_no_accesible=
+Implimir=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+Interleave_=
+internal_polygon=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+join_=
+Launcher.error_getting_class_loader_for_status_bar_control=
+layerName=
+LayerName=
+layerType=
+length_of_field=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+mapa=
+max_features=
+max_length_is=
+maxFeatures_aviso=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+nearest_point=
+new_field_properties=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+Num_intervalos=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=
+online=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+Overlay=
+Overlay_Desc=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+Photometric_=
+pixel_point=
+Plain=
+plantilla=
+please_insert_new_field_name=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+polyline_=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+Preferences=
+preferencias=
+Preferencias=
+problems_encountered_while_importing=
+process_tip=
+Progressive_=
+projection=
+propiedad=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+ps=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+Recursos\ Disponibles=
+reference_system=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotation_field=
+script_sep=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar_capas_raster=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+Selected=
+selected_layer=
+selection_up=
+separator=
+Show\ Errors=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+Size=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+suprimir_objetos_origen=
+symmetry_=
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+Unable_to_find_icon=
+unsupported_crs=
+url=
+use_full_extent=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning_title=
+wcs_cant_connect=
+wcs_server_timeout=
+wfs_properties=
+wfs_server_error=
+WFSLayer=
+will_be_truncated=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=
+Zoom_sgte=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties-UTF8	(revision 42196)
@@ -0,0 +1,429 @@
+1:=
+Abrir_Geoproceso=Abrir Geoproceso
+Agregacion=Agregación
+Agregacion_Desc=Geoprocesos que transforman datos de entrada, de mayor detalle, en datos resumidos.
+Analisis=Análisis
+Analisis_Desc=
+Asistente_de_geoprocesamiento=Asistente de geoprocesamiento
+Block_Size_=Tamaño de bloque:
+Bold=Negrita
+Capas_del_directorio=Capas del directorio
+Clean=
+Compression_=Compresión:
+Consola_de_jython=Consola de Jython
+Consola_de_jython_tooltip=Abre una consola de jython
+Conversion_de_datos=Conversión de datos.
+Conversion_de_datos_Desc=Geoprocesos encargados de transformar datos (cambio de formato, proyección, etc.)
+DBManager=Gestor de Base de datos
+Edition=Edición
+Edition_Properties=Propiedades de Edición
+Ejecutando comando: =Execute command:
+Error_capa_vacia=La capa de resultados no tiene ningún registro.
+Es posible que se haya producido algún error.
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_plantilla=Error guardando la plantilla
+Error_reading_isocodes_file=Error al leer el fichero con los códigos ISO de idioma
+Error_seleccionar_capas_merge=Debes seleccionar las capas a juntar.
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=Debes seleccionar un geoproceso
+Error_seleccionar_gp_desc="Has seleccionado un paquete.
+Los paquetes son agrupaciones lógicas de geoprocesos. Para ejectuar el geoproceso sigue expandiendo el arbol y selecciona un Geoproceso.
+Flatness=
+Formato_de_numero_erroneo=Formato de número incorrecto
+GC=Geometria computacional
+GC_Desc=Geoprocesos que realizan tareas de geometria computacional.
+Generate_Tfw_=Generar Tfw:
+Geoprocesos=Geoprocesos
+Gestor_de_Geoprocesos=Gestor de geoprocesos
+Grid=Rejilla
+Icon_not_found_=No se encontró el icono
+Implimir=
+Interleave_=Entrelazado:
+Italic=Cursiva
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+LayerName=Nombre de la capa
+MaxFeaturesEditionCache=Máximo número de entidades en memoria.
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=No hay ninguna extensión asociada con este evento
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operación
+Num_intervalos=Número de intervalos
+Overlay=Solape
+Overlay_Desc=Geoprocesos que extraen nueva información basándose en la superposición de dos capas.
+Photometric_=Fotométrica:
+Plain=Normal
+PluginServices.Bug en el código=Error de la aplicación
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=Error grave de la aplicación. Es conveniente que salgas de la aplicación.
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=Preferencias
+Preferencias=Preferencias
+Progressive_=Progresivo:
+Proximidad=
+Proximidad_Desc=
+Proyecciones=Proyecciones
+Recursos Disponibles=Recursos Disponibles
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=Capa seleccionada
+Show Errors=
+Size=Tamaño
+Sobreescribir_fichero=Sobreescribir archivo
+Sobreescribir_fichero_Pregunta_1=El archivo seleccionado ya existe
+Sobreescribir_fichero_Pregunta_2=¿Desea sobreescribirlo?
+Topology=
+Triangulation=
+Unable_to_find_icon=No se pudo encontrar el icono
+WFSLayer=Capa WFS
+Zoom_sgte=Extensión siguiente
+accept_tip=Procesa los GCP's y salva la georreferenciación. Da por terminada la introducción de GCP's.
+add_delete_edit_fields=Puede añadir, borrar o renombrar los campos
+add_rows=Añadir filas
+agrupacion=Agrupación
+ajustar_rejilla=Ajustar rejilla
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+ampl_extent=Variar la extensión de la imagen a georreferenciar
+anadir_tag=Añadir etiqueta
+arc=Arco
+arcims_load=Carga de ArcIms
+area=Área
+attributeName=Nombre
+attributeType=Tipo
+box=Cajetín
+break=
+button.resolution.calculate=Calcula resolución
+cajetin=Cajetín
+calendarBackOneMonth=Retrocede un mes
+calendarBackOneYear=Retrocede un año
+calendarForwardOneMonth=Avanza un mes
+calendarForwardOneYear=Avanza un año
+calendarSelectDate=Seleccione una fecha.
+calendarTitle=Calendario
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el más alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el más ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tamaño de los elementos seleccionados hasta coincidir con el más grande.
+cancel_tip=Cierra el dialogo deshaciendo los últimos cambios. Puede volver a editarse para georreferenciar.
+cancelar_edicion=Cancelar Edición
+cant_connect_wfs=No ha sido posible realizar la conexión con el WFS
+cant_reproject_from_any_of=No se puede reproyectar desde ningún
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+centimeters=Centímetros
+centrar_punto=Centrar punto seleccionado en la vista
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detrás
+change_height=Cambiar altura
+change_width=Cambiar anchura
+coincidir_tamanyo=Coincidir tamaño
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=Configurar todas las extensiones
+conflicto_de_nombres_de_mapas_al_pegar=Se está intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se está intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se está intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+contiene_espacios_en_blanco=Contiene espacios en blanco
+copiar=Copiar
+cortar=Cortar
+could_not_find_web_map_context_file=
+cuadro_no_asociado=El cuadro de georreferenciación no está asociado a ninguna capa sobre la vista, este se cerrará. Por favor, abra el diálogo asociado a la capa que necesite.
+database_connection=Conexión a Base de Datos
+datum=Datum
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=Deberá introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deberá introducir nombres nuevos para los mapas
+default_projection=Proyección por defecto
+default_value=Valor por defecto
+defined_by_view_extent=Usar extensión de la vista
+deleted_feature=Feature borrada
+desactivar_capa=Oculta la capa después del primer punto.
+desactivar_puntos=Desactiva capa de puntos después del primer punto.
+desagrupar_capas=Desagrupar capas
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaciÃ³n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desea_borrar_el_documento=¿Está seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=¿Está seguro de que desea borrar las capas activas?
+desea_continuar=¿Desea continuar?
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+documento=
+draw_text_only=Dibujar sólo el texto
+dxf=dxf
+edit_copy=Copiar
+edit_cut=Cortar
+edit_delete=Eliminar
+edit_layer_properties_to_fix_them=Editar las propiedades de la capa para corregirlas
+edit_paste=Pegar
+edit_redo=Rehacer
+edit_select_all=Seleccionar todo
+edit_undo=Deshacer
+elemento_ya_existe=El elemento ya existe
+eliminar_columna=Eliminar columna
+eliminar_fila=Eliminar fila
+en=
+en_unidades=en unidades
+errorMessageJComboBoxItemsSeekerConfigurable=Configuración del comportamiento inválida.
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+errores_csv=Incluir los errores en fichero CSV.
+escala_desconocida=Escala desconocida
+exploit_=EXPLOTAR
+exportJOP2Title=
+export_to=Exportar a ...
+export_to_map_context=Exportar a Map Context
+extend_=ALARGAR
+extensiones=Extensiones
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+features_desea_continuar=features, ¿desea continuar?
+fichero=Archivo
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, ¿desea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisión decimal
+field_default_value=Valor por defecto
+field_length=Tamaño
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+filter=Filtro
+filterOnAWFSLayer=Filtro sobre una capa WFS
+final_point=Punto final
+fit_WFS_layer=Ajustar capa WFS
+georef_file=Fichero de georreferenciación
+georeferenciado=Georeferenciado
+gml=GML
+gml_files=Ficheros gml
+group_graphic_line=Agrupar línea gráfica
+grupo=grupo
+horizontal_space=Espacio horizontal
+host=Máquina
+imagen_no_accesible=No ha sido posible acceder a la imagen.
+import_from_ascii=Importar la tabla de puntos desde fichero .csv.
+inches=Pulgadas
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+indexar_campos=Indexar campos
+initial_warning=<html><b>¡ATENCIÓN!</b><br>Versión en desarrollo. Puede contener errores importantes e incluso provocar daños en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la última versión estable.</html>
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_point_or_end=Insertar punto o finalizar geometría [E]
+insert_selection_last_point=Insertar esquina opuesta del rectángulo de selección
+insert_selection_point=Insertar punto de selección
+insertar_capa=Insertar capa
+insertar_columna=Insertar columna
+insertar_en_la_vista_la_capa_creada=¿Desea insertar en la vista la capa creada?
+insertar_fila=Insertar fila
+internal_polygon=Polígono interno
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_dimension_values=Valores de dimensión inválidos
+invalid_priority_value=Valor de prioridad inválido
+invalid_value_for_gap=
+invert_selection=Invertir selección
+join_=UNIR
+layerName=Nombre de la capa
+layerType=Tipo de geometría
+length_of_field=Longitud de campo
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.
+No puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.
+No puede ser renombrado.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=Modificar estructura de tabla
+mapa=Mapa
+maxFeatures_aviso=Se ha recuperado un numero de Features igual al máximo 
+ numero de Features permitido. Puede aumentar el número de 
+Features recuperadas modificando el parámetro "Buffer"
+max_features=Máx. features
+max_length_is=La longitud máxima es
+minimum_size_of_line_incorrect=La longitud mínima de línea es incorrecta.
+modificar=modificar
+modify=Modificar
+mostrar_escala_numerica=Mostrar escala numérica
+mostrar_rejilla=Mostrar rejilla
+move_elements=Desplazar elementos
+move_handlers=Desplazar handlers
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+nearest_point=Punto más cercano
+new_field_properties=Propiedades del campo nuevo
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+no_puede_continuar=No puede continuar.
+no_se_pegaran_las_tablas=No se pegará ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegarán las vistas con conflicto
+nombre_no_valido=Nombre no válido
+none=
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+num_lados_insuficiente=Número de lados insuficiente
+numero_decimales_mostrar=Número decimales
+offline=Desconectado
+online=Conectado
+operacion_cancelada=Operación cancelada
+optinos.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.configuration.screen=Configuración de pantalla
+options.firewall.http.enabled=Usar servidor proxy HTTP
+options.firewall.http.host=Servidor proxy HTTP
+options.firewall.http.incorrect_host=Host HTTP incorrecto
+options.firewall.http.nonProxy=Conectar directamente a
+options.firewall.http.password=Contraseña
+options.firewall.http.port=Puerto proxy HTTP
+options.firewall.http.user=Nombre de usuario
+options.firewall.socks.enabled=Usar servidor proxy SOCKS
+options.firewall.socks.host=Servidor proxy SOCKS
+options.firewall.socks.incorrect_host=Host SOCKS incorrecto
+options.firewall.socks.port=Puerto proxy SOCKS
+options.foldering.data_folder=Carpeta de datos geográficos
+options.foldering.projects_folder=Carpeta de proyectos
+options.foldering.template_folder=Carpeta de plantillas
+options.foldering.title=Carpetas
+options.general.remember_windows_pos=Recordar la posición de las ventanas.
+options.general.remember_windows_size=Recordar el tamaño de las ventanas.
+options.general.select_theme=Usar apariencia (requiere reiniciar)
+options.network.click_to_test_connection=Pulse el botón para comprobar la conexión
+options.network.status=Estado de la conexión
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selección por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=Añadir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+parte1=
+parte2=
+paste_elements=Pegar elementos
+pdf=
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+personalizar_margenes=Personalizar márgenes
+pixel_point=
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+polyline_=POLILÍNEA
+postgis=PostGIS
+precision=Precisión
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+problems_encountered_while_importing=Se encontraron problemas al importar
+process_tip=Procesa los GCP's y asigna un extent temporal a la imagen.
+projection=Proyección
+propiedad=Propiedad
+ps=
+realces=Realces
+realmente_desea_guardar_la_capa=¿Desea guardar la capa
+recargar=Recargar
+reference_system=Sistema de Referencia
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_geometry=Borrar geometría
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+restore_defaults=Restaurar opciones por defecto
+restore_palette=Restaurar paleta
+rotation_field=Campo de rotación
+script_sep=
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selección compleja
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+seleccionar_capas_raster=Seleccionar capas ráster
+seleccionar_por_poligono=Seleccionar por polígono
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenará el ángulo con el que se mostrará el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el color con el que se mostrará la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará la fuente con el que se mostrará de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenará el alto con el que se mostrará la etiqueta</HTML>
+select=Seleccionar
+select_area=Selecciona el área de búsqueda
+select_coordinates_manually=Selecciona las coordenadas manualmente
+select_coordinates_using_view=Selecciona las coordenadas en la vista
+select_geometry=Seleccione una geometría
+select_geometry_to_extend=Seleccionar geometría a extender
+select_other_geometry_or_end=Seleccione otra geometría o finalizar[E]
+selected_layer=Capa seleccionada
+selection_up=Mover arriba la selección
+separator=Separador
+show_this_dialog_next_startup=Mostrar este diálogo la próxima vez
+shp=SHP
+si=sí
+simbolo=Símbolo
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Especifica el tamaño mínimo de las líneas que formarán las curvas.
+suprimir_objetos_origen=¿Suprimir objetos de origen?Si[S] o No[N] |N|
+symmetry_=SIMETRÍA
+tamPixX=Tamaño pixel X
+tamPixY=Tamaño pixel Y
+tamanyo_pagina=Tamaño de página
+terminar=Terminar
+terminar_edicion=Terminar edición
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+text_preview_text=
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podrá exportar los datos editados, pero no podrá guardarlos sobre la misma capa.
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tolerancia_incorrecta=Tolerancia incorrecta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+two_or_more_fields_with_the_same_name=Dos o más campos con el mismo nombre
+unsupported_crs=CRS no soportado
+url=url
+use_full_extent=Usar extensión total
+ver_error_capa=Ver errores
+ver_tags=
+vertical_space=Espacio vertical
+warning_title=
+wcs_cant_connect=No se puede realizar la conexión al WCS
+wcs_server_timeout=Tiempo de espera agotado
+wfs_properties=Propiedades WFS
+wfs_server_error=
+will_be_truncated=será truncado
+y_en=y en
+zone=Huso
+zoom_in_factor=Factor zoom más
+zoom_out_factor=Factor zoom menos
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties-UTF8	(revision 42196)
@@ -0,0 +1,423 @@
+1:=
+Abrir_Geoproceso=
+Agregacion=
+Agregacion_Desc=
+Analisis=
+Analisis_Desc=
+Asistente_de_geoprocesamiento=
+Block_Size_=
+Bold=
+Capas_del_directorio=
+Clean=
+Compression_=
+Consola_de_jython=
+Consola_de_jython_tooltip=
+Conversion_de_datos=
+Conversion_de_datos_Desc=
+DBManager=
+Edition=
+Edition_Properties=
+Ejecutando comando: =
+Error_capa_vacia=
+Error_exportando_SLD=
+Error_guardando_la_plantilla=
+Error_reading_isocodes_file=
+Error_seleccionar_capas_merge=
+Error_seleccionar_esquema_merge=
+Error_seleccionar_gp=
+Error_seleccionar_gp_desc=
+Flatness=
+Formato_de_numero_erroneo=
+GC=
+GC_Desc=
+Generate_Tfw_=
+Geoprocesos=
+Gestor_de_Geoprocesos=
+Grid=
+Icon_not_found_=
+Implimir=
+Interleave_=
+Italic=
+Launcher.error_getting_class_loader_for_status_bar_control=
+LayerName=
+MaxFeaturesEditionCache=
+No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
+No_extension_associated_with_this_event_=
+No_ha_sido_posible_realizar_la_operacion=
+Num_intervalos=
+Overlay=
+Overlay_Desc=
+Photometric_=
+Plain=
+PluginServices.Bug en el código=
+PluginServices.Error grave de la aplicación. Es conveniente que salgas de la aplicación=
+PluginServices.Error_grave_de_la_aplicación=
+Preferences=
+Preferencias=
+Progressive_=
+Proximidad=
+Proximidad_Desc=
+Proyecciones=
+Recursos Disponibles=
+Scripting=
+Se_han_encontrado_capas_erroneas_en=
+Selected=
+Show Errors=
+Size=
+Sobreescribir_fichero=
+Sobreescribir_fichero_Pregunta_1=
+Sobreescribir_fichero_Pregunta_2=
+Topology=
+Triangulation=
+Unable_to_find_icon=
+WFSLayer=
+Zoom_sgte=
+accept_tip=
+add_delete_edit_fields=
+add_rows=
+agrupacion=
+ajustar_rejilla=
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+ampl_extent=
+anadir_tag=
+arc=
+arcims_load=
+area=
+attributeName=
+attributeType=
+box=
+break=
+button.resolution.calculate=
+cajetin=
+calendarBackOneMonth=
+calendarBackOneYear=
+calendarForwardOneMonth=
+calendarForwardOneYear=
+calendarSelectDate=
+calendarTitle=
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+cancel_tip=
+cancelar_edicion=
+cant_connect_wfs=
+cant_reproject_from_any_of=
+capas_edition_cache=
+centimeters=
+centrar_punto=
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+coincidir_tamanyo=
+com.iver.andami.messages.Messages=
+comenzar_edicion=
+compleja=
+configurar_todas_las_extensiones=
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+contiene_espacios_en_blanco=
+copiar=
+cortar=
+could_not_find_web_map_context_file=
+cuadro_no_asociado=
+database_connection=
+datum=
+de =
+de 0=
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+defined_by_view_extent=
+deleted_feature=
+desactivar_capa=
+desactivar_puntos=
+desagrupar_capas=
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+documento=
+draw_text_only=
+dxf=
+edit_copy=
+edit_cut=
+edit_delete=
+edit_layer_properties_to_fix_them=
+edit_paste=
+edit_redo=
+edit_select_all=
+edit_undo=
+elemento_ya_existe=
+eliminar_columna=
+eliminar_fila=
+en=
+en_unidades=
+errorMessageJComboBoxItemsSeekerConfigurable=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+errores_csv=
+escala_desconocida=
+exploit_=
+exportJOP2Title=
+export_to=
+export_to_map_context=
+extend_=
+extensiones=
+factor_zoom_incorrecto=
+features_desea_continuar=
+fichero=
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filter=
+filterOnAWFSLayer=
+final_point=
+fit_WFS_layer=
+georef_file=
+georeferenciado=
+gml=
+gml_files=
+group_graphic_line=
+grupo=
+horizontal_space=
+host=
+imagen_no_accesible=
+import_from_ascii=
+inches=
+incorrect_point=
+incorrect_value=
+indexar_campos=
+initial_warning=
+insert_move_first_point=
+insert_move_last_point=
+insert_point_or_end=
+insert_selection_last_point=
+insert_selection_point=
+insertar_capa=
+insertar_columna=
+insertar_en_la_vista_la_capa_creada=
+insertar_fila=
+internal_polygon=
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_dimension_values=
+invalid_priority_value=
+invalid_value_for_gap=
+invert_selection=
+join_=
+layerName=
+layerType=
+length_of_field=
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+manage_fields=
+mapa=
+maxFeatures_aviso=
+max_features=
+max_length_is=
+minimum_size_of_line_incorrect=
+modificar=
+modify=
+mostrar_escala_numerica=
+mostrar_rejilla=
+move_elements=
+move_handlers=
+multipoint=
+multipoint_=
+nearest_point=
+new_field_properties=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_hay_ninguna_capa_seleccionada=
+no_puede_continuar=
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+nombre_no_valido=
+none=
+nuevo_nombre_para_el_mapa=
+num_lados_insuficiente=
+numero_decimales_mostrar=
+offline=
+online=
+operacion_cancelada=
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+options.firewall.http.enabled=
+options.firewall.http.host=
+options.firewall.http.incorrect_host=
+options.firewall.http.nonProxy=
+options.firewall.http.password=
+options.firewall.http.port=
+options.firewall.http.user=
+options.firewall.socks.enabled=
+options.firewall.socks.host=
+options.firewall.socks.incorrect_host=
+options.firewall.socks.port=
+options.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+options.general.select_theme=
+options.network.click_to_test_connection=
+options.network.status=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+parte1=
+parte2=
+paste_elements=
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+personalizar_margenes=
+pixel_point=
+plantilla=
+please_insert_new_field_name=
+polyline_=
+postgis=
+precision=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+problems_encountered_while_importing=
+process_tip=
+projection=
+propiedad=
+ps=
+realces=
+realmente_desea_guardar_la_capa=
+recargar=
+reference_system=
+remove_elements=
+remove_fields=
+remove_geometry=
+remove_rows=
+rename_field=
+restore_defaults=
+restore_palette=
+rotation_field=
+script_sep=
+se_van_a_guardar_=
+seleccion_compleja=
+selecciona_sistema_de_referencia=
+seleccionar_capas_raster=
+seleccionar_por_poligono=
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+select=
+select_area=
+select_coordinates_manually=
+select_coordinates_using_view=
+select_geometry=
+select_geometry_to_extend=
+select_other_geometry_or_end=
+selected_layer=
+selection_up=
+separator=
+show_this_dialog_next_startup=
+shp=
+si=
+simbolo=
+simplificar_leyenda=
+simplify=
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+suprimir_objetos_origen=
+symmetry_=
+tamPixX=
+tamPixY=
+tamanyo_pagina=
+terminar=
+terminar_edicion=
+test_measure=
+test_now=
+text_preview_text=
+the_length_of_the_line_above_is=
+this_layer_is_not_self_editable=
+this_table_is_not_self_editable=
+tolerancia_incorrecta=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+two_or_more_fields_with_the_same_name=
+unsupported_crs=
+url=
+use_full_extent=
+ver_error_capa=
+ver_tags=
+vertical_space=
+warning_title=
+wcs_cant_connect=
+wcs_server_timeout=
+wfs_properties=
+wfs_server_error=
+will_be_truncated=
+y_en=
+zone=
+zoom_in_factor=
+zoom_out_factor=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.i18n
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,11 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	DefaultExampleManager class.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.metadata.swing.impl.impl.DefaultExampleManager">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/java/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/java/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/java/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+For each class you are going to test, create one Test class with the same
+name as the class to test, ending with Test.
+
+For example, the unit tests of the "ExampleLibrary" class are performed
+by the "ExampleLibraryTest" class.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/test/java/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingManager.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.impl;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.metadata.swing.basic.api.JMetadataPanel;
+import org.gvsig.metadata.swing.basic.api.MetadataSwingManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.usability.UsabilitySwingManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * 04/04/2010
+ *
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ */
+public class BasicMetadataSwingManager implements MetadataSwingManager {
+
+    private static final Logger logger = LoggerFactory.getLogger(BasicMetadataSwingManager.class);
+
+    private I18nManager i18nManager;
+
+    public BasicMetadataSwingManager() {
+        i18nManager = ToolsLocator.getI18nManager();
+    }
+
+    public String translate(String message) {
+        if (message != null) {
+            return i18nManager.getTranslation(message);
+        }
+        return "";
+    }
+
+    public MetadataManager getManager() {
+        return MetadataLocator.getMetadataManager();
+    }
+
+    public JMetadataPanel createJMetadataPanel(Metadata metadata, boolean editable) {
+        try {
+            this.getManager().loadMetadata(metadata);
+
+        } catch (MetadataException e) {
+            logger.warn("Can't load metadata", e);
+        }
+        BasicJMetadataPanel panel = new BasicJMetadataPanel(this, metadata,editable);
+        panel.setMetadata(metadata);
+        return panel;
+    }
+
+    public JMetadataPanel createJMetadataPanel(Metadata metadata) {
+        return this.createJMetadataPanel(metadata, true);
+    }
+
+    public UsabilitySwingManager getUIBuilder() {
+        return ToolsSwingLocator.getUsabilitySwingManager();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicJMetadataPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicJMetadataPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicJMetadataPanel.java	(revision 42196)
@@ -0,0 +1,105 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.impl;
+
+import java.awt.BorderLayout;
+import javax.swing.JLabel;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.metadata.swing.basic.api.AbstractSimpleMetadataPanel;
+import org.gvsig.metadata.swing.basic.api.JMetadataPanel;
+import org.gvsig.metadata.swing.basic.api.MetadataSwingManager;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.DynFormManager;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.service.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BasicJMetadataPanel extends JMetadataPanel {
+
+    private static final Logger logger = LoggerFactory.getLogger(BasicJMetadataPanel.class);
+
+    private static final long serialVersionUID = 6514865354393558940L;
+    private JLabel lblName;
+    private MetadataManager manager;
+    private JDynForm dynform;
+
+    public BasicJMetadataPanel(MetadataSwingManager uiManager,
+            Metadata metadata, boolean editable) {
+        super(uiManager, metadata, editable);
+    }
+
+    protected void initManagers() {
+        manager = MetadataLocator.getMetadataManager();
+    }
+
+    protected void initData() {
+        String metadataName = "";
+        if (!this.hasMetadata()) {
+            return;
+        }
+        try {
+            metadataName = getMetadata().getMetadataName();
+            this.lblName.setText("Metadata Layer of " + metadataName + ":");
+        } catch (MetadataException e) {
+            logger.warn("Can't init panel data", e);
+        }
+    }
+
+    protected void initUI() {
+        this.setLayout(new BorderLayout());
+        this.lblName = new JLabel();
+
+        this.add(this.lblName, BorderLayout.NORTH);
+    }
+
+    public void saveMetadata() throws DynObjectValidateException {
+        try {
+            this.dynform.getValues(this.getMetadata());
+            this.getMetadata().getDynClass().validate(this.getMetadata());
+            manager.storeMetadata(this.getMetadata());
+        } catch (MetadataException e) {
+            logger.warn("Can't save metadata", e);
+        }
+    }
+
+    protected AbstractSimpleMetadataPanel createMetadataComponent(Metadata metadata, boolean refresh) {
+        if (metadata == null) {
+            metadata = getMetadata();
+        }
+        try {
+            DynFormManager dynformmgr = DynFormLocator.getDynFormManager();
+            dynform = dynformmgr.createJDynForm(metadata);
+            this.add(dynform.asJComponent());
+            this.updateUI();
+        } catch (ServiceException e) {
+            logger.warn("Can't create metadata form component", e);
+        }
+        return this;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicJMetadataPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/package.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.metadata.swing.impl package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library description.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#packagecomment">Javadoc Tool documentation about the package file</a></p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingLibrary.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.impl;
+
+import org.gvsig.metadata.MetadataLibrary;
+import org.gvsig.metadata.swing.basic.api.MetadataSwingLibrary;
+import org.gvsig.metadata.swing.basic.api.MetadataSwingLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.swing.api.ToolsSwingLibrary;
+
+/**
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class BasicMetadataSwingLibrary extends AbstractLibrary {
+    
+	public void doRegistration() {
+		super.doRegistration();
+		this.registerAsImplementationOf(MetadataSwingLibrary.class);
+		require(ToolsSwingLibrary.class);
+		require(MetadataLibrary.class);
+    }
+    
+	protected void doInitialize() throws LibraryException {
+		MetadataSwingLocator
+				.registerDefaultMetadataSwingManager(BasicMetadataSwingManager.class);
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        i18nManager.addResourceFamily(
+				"org.gvsig.metadata.swing.basic.impl.i18n.text",
+				BasicMetadataSwingLibrary.class.getClassLoader(),
+				BasicMetadataSwingLibrary.class.getClass().getName());
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/java/org/gvsig/metadata/swing/basic/impl/BasicMetadataSwingLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/javadoc/overview.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/javadoc/overview.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/javadoc/overview.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.metadata.swing.impl package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library overview.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/javadoc/overview.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the Spanish language locale (es)
+Example.returns_value=devuelve el valor
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the English language locale (en)
+Example.returns_value=returns value
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/org/gvsig/metadata/swing/impl/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,7 @@
+Put into this folder the resources needed by your library classes.
+
+This folder is added to the runtime classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, into this folder you can find some examples of resource bundle 
+property files that may be used by your library classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.metadata.swing.basic.impl.BasicMetadataSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/pom.xml	(revision 42196)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.metadata.swing.basic.impl</artifactId>
+    <packaging>jar</packaging>
+	
+    <name>org.gvsig.metadata.swing.basic.impl</name>
+    <description />
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.basic.swing</artifactId>
+        <version>2.0.97</version>
+    </parent>
+	
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>	 
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.services</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>   
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.swing.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>		
+        <!-- FIXME: No deberia tener una dependencia con la implementacion -->
+        <!-- 
+        <dependency>
+                <groupId>org.gvsig</groupId>
+                <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+        </dependency>
+        -->
+    </dependencies>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl
___________________________________________________________________
Added: svn:ignore
   + .classpath

.settings

.project

target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml	(revision 42196)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.metadata.basic.swing</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>    
+  <description>This project contains the basic metadata features.</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.basic</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <modules>
+    <module>org.gvsig.metadata.swing.basic.api</module>
+    <module>org.gvsig.metadata.swing.basic.impl</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/java/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/java/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/java/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+For each class you are going to test, create one Test class with the same
+name as the class to test, ending with Test.
+
+For example, the unit tests of the "ExampleLibrary" class are performed
+by the "ExampleLibraryTest" class.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/java/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,11 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	DefaultExampleManager class.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.metadata.swing.api.impl.DefaultExampleManager">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/javadoc/overview.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/javadoc/overview.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/javadoc/overview.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.metadata.swing.api package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library overview.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/javadoc/overview.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the Spanish language locale (es)
+Example.returns_value=devuelve el valor
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the English language locale (en)
+Example.returns_value=returns value
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/org/gvsig/metadata/swing/api/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,7 @@
+Put into this folder the resources needed by your library classes.
+
+This folder is added to the runtime classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, into this folder you can find some examples of resource bundle 
+property files that may be used by your library classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.metadata.swing.basic.api.MetadataSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/AbstractSimpleMetadataPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/AbstractSimpleMetadataPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/AbstractSimpleMetadataPanel.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.api;
+
+import javax.swing.JPanel;
+
+import org.gvsig.metadata.Metadata;
+
+public abstract class AbstractSimpleMetadataPanel extends JPanel {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 8275085021104037254L;
+    private AbstractSimpleMetadataPanel metadataComponent;
+    private Metadata metadata;
+    private boolean editable;
+
+    protected MetadataSwingManager uiManager;
+
+    public AbstractSimpleMetadataPanel(MetadataSwingManager uiManager,
+            Metadata metadata, boolean editable) {
+        super();
+        this.uiManager = uiManager;
+        this.editable = editable;
+        this.metadata = metadata;
+        init();
+    }
+
+    private void init() {
+        initManagers();
+        initUI();
+        setMetadata(metadata);
+    }
+
+    protected boolean isEditable() {
+        return this.editable;
+    }
+
+    protected void setEditable(boolean isEditable) {
+        this.editable = isEditable;
+    }
+
+    protected abstract void initManagers();
+
+    protected abstract void initData();
+
+    protected abstract void initUI();
+
+    protected abstract AbstractSimpleMetadataPanel createMetadataComponent(Metadata metadata, boolean doRefresh);
+
+    public void setMetadataComponent(AbstractSimpleMetadataPanel metadataComponent) {
+        this.metadataComponent = metadataComponent;
+    }
+
+    public AbstractSimpleMetadataPanel getMetadataComponent() {
+        return metadataComponent;
+    }
+
+    public void setMetadata(Metadata metadata) {
+        this.metadata = metadata;
+        initData();
+        this.setMetadataComponent(createMetadataComponent(getMetadata(), true));
+        this.updateUI();
+    }
+
+    public Metadata getMetadata() {
+        return metadata;
+    }
+
+    protected boolean hasMetadata() {
+        return (this.metadata != null);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/AbstractSimpleMetadataPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataPanel.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.api;
+
+import java.awt.Component;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.tools.dynobject.DynField;
+
+public interface MetadataPanel {
+
+	public Metadata getMetadata();
+
+	public void save();
+
+	public DynField getDynField();
+
+	public Component asJComponent();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingManager.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.api;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.swing.api.usability.UsabilitySwingManager;
+
+/**
+ * 
+ * A basic metadata swing manager to provide a metadata GUI editor.
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ * 
+ */
+public interface MetadataSwingManager {
+
+	/**
+	 * 
+	 * Given a text, it looks for its translation. If none is found, then the
+	 * original text is shown.
+	 * 
+	 * @param text
+	 *            to be translated.
+	 * @return the translation text result.
+	 */
+	public String translate(String message);
+
+	/**
+	 * Gets the main manager that allows interacting with metadata objects.
+	 * 
+	 * @return the metadata Manager
+	 */
+	public MetadataManager getManager();
+
+	/**
+	 * Creates the JPanel in which users can edit and visualize metadata
+	 * objects. Editable by default.
+	 * 
+	 * @param metadata
+	 *            the metadata to be displayed.
+	 * @return the metadata editor Panel
+	 * @throws MetadataException
+	 */
+	public JMetadataPanel createJMetadataPanel(Metadata metadata);
+
+	/**
+	 * Creates the JPanel in which users can edit and visualize metadata
+	 * objects.
+	 * 
+	 * @param metadata
+	 *            the metadata to be displayed.
+	 * @param editable
+	 *            if the metadata panel should be editable or not.
+	 * @return the metadata editor Panel
+	 * @throws MetadataException
+	 */
+	public JMetadataPanel createJMetadataPanel(Metadata metadata,
+			boolean editable);
+
+	/**
+	 * Gets the ToolsLocator usability swing manager to create UI components
+	 * based on gvSIG standards.
+	 * 
+	 * @return
+	 */
+	public UsabilitySwingManager getUIBuilder();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/JMetadataPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/JMetadataPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/JMetadataPanel.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.api;
+
+import java.awt.Component;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.DynFormManager;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+//import org.gvsig.tools.swing.api.dynobject.JDynObjectComponent;
+
+/**
+ *
+ * The metadata editor panel.
+ *
+ * @author gvSIG Team
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ *
+ */
+public abstract class JMetadataPanel extends AbstractSimpleMetadataPanel
+        implements MetadataPanel {
+
+    private static final long serialVersionUID = 3029756241879733963L;
+
+    public JMetadataPanel(MetadataSwingManager uiManager, Metadata metadata,
+            boolean editable) {
+        super(uiManager, metadata, editable);
+    }
+
+    protected JDynForm createJDynObjectComponent(DynClass dynClass,
+            Metadata metadata, boolean isEditable) throws ServiceException {
+        DynFormManager manager = DynFormLocator.getDynFormManager();
+        JDynForm form = manager.createJDynForm(dynClass);
+        if (metadata != null) {
+            form.setValues(metadata);
+        }
+        form.setReadOnly(!isEditable);
+        return form;
+    }
+
+    /**
+     * Saves the current status of the GUI into the Metadata object
+     *
+     * @throws DynObjectValidateException
+     *
+     */
+    public abstract void saveMetadata() throws DynObjectValidateException;
+
+    public void save() {
+        try {
+            saveMetadata();
+        } catch (DynObjectValidateException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    public DynField getDynField() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Component asJComponent() {
+        return this;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/JMetadataPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLocator.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.api;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * Locator for the Metadata Library main object instances.
+ * 
+ * Replaces the MetadataManager by its own services, by adding as many constants
+ * and methods as needed, taking the MetadataManager as a guide.
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ * 
+ */
+public class MetadataSwingLocator extends BaseLocator {
+
+	/**
+	 * Unique instance.
+	 */
+	private static final MetadataSwingLocator instance = new MetadataSwingLocator();
+
+	private static final String METADATA_MANAGER_DESCRIPTION = "Metadata API Library Manager";
+
+	public static final String METADATA_MANAGER_NAME = "org.gvsig.metadata.swing.basic.api.manager";
+
+	/**
+	 * Returns the Metadata singleton instance.
+	 * 
+	 * @return the Metadata singleton instance
+	 */
+	public static MetadataSwingLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Returns a reference to the MetadataManager.
+	 * 
+	 * @return a reference to MetadataManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static MetadataSwingManager getMetadataSwingManager()
+			throws LocatorException {
+		return (MetadataSwingManager) getInstance().get(METADATA_MANAGER_NAME);
+	}
+
+	public static void registerDefaultMetadataSwingManager(Class clazz) {
+		getInstance().registerDefault(METADATA_MANAGER_NAME,
+				METADATA_MANAGER_DESCRIPTION, clazz);
+	}
+
+	/**
+	 * Registers the Class implementing the MetadataManager interface.
+	 * 
+	 * @param clazz
+	 *            implementing the MetadataManager interface
+	 */
+	public static void registerMetadataSwingManager(Class clazz) {
+		getInstance().register(METADATA_MANAGER_NAME,
+				METADATA_MANAGER_DESCRIPTION, clazz);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/CreateJMetadataPanelException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/CreateJMetadataPanelException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/CreateJMetadataPanelException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.api;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.metadata.exceptions.MetadataException;
+
+public class CreateJMetadataPanelException extends MetadataException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7989045357127054749L;
+
+	public CreateJMetadataPanelException(Metadata metadata, Throwable cause) {
+		super(
+				"Can't create a JMetadataPanel based on this metadata: '%(metadata)'",
+				cause,
+				"_cant_create_a_JMetadataPanel_based_on_this_metadata_XmetadataX",
+				serialVersionUID
+		);
+		String name;
+		try {
+			name = metadata.getMetadataName();
+		} catch(Exception e) {
+			name = null;
+		}
+		if( name==null ) {
+			name = "(unknow)";
+		}
+		setValue("metadata", name);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/CreateJMetadataPanelException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLibrary.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.swing.basic.api;
+
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+import org.gvsig.tools.swing.api.ToolsSwingLibrary;
+
+/**
+ * 
+ * Initialization of the basic Metadata API Library.
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ * 
+ */
+public class MetadataSwingLibrary extends AbstractLibrary {
+
+	public void doRegistration() {
+		super.doRegistration();
+		registerAsAPI(MetadataSwingLibrary.class);
+        require(ToolsSwingLibrary.class);
+    }
+    
+	/**
+	 * Performs all the initializations of the library, only related to himself:
+	 * register implementation classes through the Locator, start services, etc.
+	 * 
+	 * @throws LibraryException
+	 *             if there is an error while performing the initialization of
+	 *             the library
+	 */
+	protected void doInitialize() throws LibraryException {
+
+	}
+
+	/**
+	 * Performs all the initializations or validations related to the library
+	 * dependencies, as getting references to objects through other libraries
+	 * Locators.
+	 * 
+	 * @throws LibraryException
+	 *             if there is an error while loading an implementation of the
+	 *             library
+	 */
+	protected void doPostInitialize() throws LibraryException {
+	    // Validate there is any implementation registered.
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                    MetadataLocator.METADATA_MANAGER_NAME, MetadataLocator.getInstance());
+        }
+		/*
+		 * Validates if there is at least an implementation of the
+		 * MetadataManager registered.
+		 */
+		MetadataSwingManager swingManager = MetadataSwingLocator.getMetadataSwingManager();
+
+		if (swingManager == null) {
+			throw new ReferenceNotRegisteredException(
+					MetadataSwingLocator.METADATA_MANAGER_NAME,
+					MetadataSwingLocator.getInstance());
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/src/main/java/org/gvsig/metadata/swing/basic/api/MetadataSwingLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/pom.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.metadata.swing.basic.api</artifactId>
+    <packaging>jar</packaging>
+	
+    <name>org.gvsig.metadata.swing.basic.api</name>
+    <description />
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.basic.swing</artifactId>
+        <version>2.0.97</version>
+    </parent>
+	
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+        </dependency>	    
+    </dependencies>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api
___________________________________________________________________
Added: svn:ignore
   + .project

target

.classpath

.settings



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing
___________________________________________________________________
Added: svn:ignore
   + .project

.settings


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml	(revision 42196)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.metadata.basic</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>    
+  <description>This project contains the basic metadata features.</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <modules>
+    <module>org.gvsig.metadata.basic.lib</module>
+    <module>org.gvsig.metadata.basic.swing</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/javadoc/overview.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/javadoc/overview.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/javadoc/overview.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.metadata.basic package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library overview.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/javadoc/overview.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.metadata.lib.basic.impl.BasicMetadataLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the Spanish language locale (es)
+Example.returns_value=devuelve el valor
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the English language locale (en)
+Example.returns_value=returns value
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/org/gvsig/metadata/lib/basic/impl/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,7 @@
+Put into this folder the resources needed by your library classes.
+
+This folder is added to the runtime classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, into this folder you can find some examples of resource bundle 
+property files that may be used by your library classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataContainer.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.lib.basic.impl;
+
+import org.gvsig.metadata.MetadataContainer;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.impl.DefaultDynObject;
+
+public class BasicMetadataContainer extends DefaultDynObject implements MetadataContainer {
+
+	public BasicMetadataContainer(DynStruct dynClass) {
+		super(dynClass);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/DefaultMetadata.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/DefaultMetadata.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/DefaultMetadata.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.lib.basic.impl;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.tools.dynobject.DynStruct;
+
+/**
+ * Default metadata implementation of the basic implementation module.
+ */
+public class DefaultMetadata extends AbstractMetadata implements Metadata {
+
+	public DefaultMetadata(DynStruct dynClass) {
+		super(dynClass);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/DefaultMetadata.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataLibrary.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.lib.basic.impl;
+
+import java.util.Locale;
+
+import org.gvsig.metadata.MetadataLibrary;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class BasicMetadataLibrary extends AbstractLibrary {
+
+	public void doRegistration() {
+		super.doRegistration();
+		require(ToolsLibrary.class);
+		registerAsImplementationOf(MetadataLibrary.class);
+	}
+
+	protected void doInitialize() throws LibraryException {
+        MetadataLocator.registerMetadataManager(BasicMetadataManager.class);
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        i18nManager.addResourceFamily("org.gvsig.metadata.basic.impl.i18n.text",
+				BasicMetadataLibrary.class.getClassLoader(),
+				BasicMetadataLibrary.class.getClass().getName());
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+		MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+		if (!(metadataManager instanceof MetadataManager)) {
+			throw new LibraryException(BasicMetadataManager.class, null);
+		}
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataManager.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.lib.basic.impl;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.metadata.MetadataContainer;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynStruct;
+
+public class BasicMetadataManager extends AbstractMetadataManager implements
+		MetadataManager {
+
+
+	protected Metadata createMetadata(DynStruct definition) {
+		return new DefaultMetadata(definition);
+	}
+
+	protected MetadataContainer createMetadataContainer(DynClass dynClass) {
+		return new BasicMetadataContainer(dynClass);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/BasicMetadataManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadataManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadataManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadataManager.java	(revision 42196)
@@ -0,0 +1,285 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.lib.basic.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.metadata.MetadataContainer;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.AddMetadataDefinitionException;
+import org.gvsig.metadata.exceptions.DuplicateMetadataDefinitionException;
+import org.gvsig.metadata.exceptions.InvalidMetadataNamespaceException;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.impl.DefaultDynClassName;
+import org.gvsig.tools.persistence.impl.exception.CantFindDefinitionInStreamException;
+
+
+/**
+ * Abstract metadata manager used in both metadata basic and full modules.
+ */
+public abstract class AbstractMetadataManager implements MetadataManager {
+
+	private final Logger LOG = LoggerFactory
+			.getLogger(AbstractMetadataManager.class);
+
+	private Map metadataItems;
+
+	protected DynObjectManager dynManager;
+
+	protected File metadataHomeFile = null;
+
+	private boolean doSavingValidation;
+
+	private boolean doExportingValidation;
+
+	public AbstractMetadataManager() {
+		dynManager = ToolsLocator.getDynObjectManager();
+	}
+
+	protected void initDefinitions() {
+		this.metadataItems = new HashMap();
+		Iterator definitionsIter = ToolsLocator.getDynObjectManager().iterator(
+				MetadataManager.METADATA_NAMESPACE);
+		DynStruct definition;
+		while (definitionsIter.hasNext()) {
+			definition = (DynStruct) definitionsIter.next();
+			if (!this.getMetadataItems().containsKey(definition)) {
+				Metadata metadata = createMetadata(definition);
+				this.getMetadataItems().put(definition, metadata);
+			}
+		}
+	}
+
+	public DynStruct addDefinition(String name, String description)
+			throws MetadataException {
+
+		DynClass definition = dynManager.createDynClass(METADATA_NAMESPACE,
+				name, description);
+
+		addDefinition(definition);
+		return definition;
+	}
+
+	public DynStruct addDefinition(String metadataDefinitionName,
+			InputStream stream, ClassLoader loader) throws MetadataException {
+		Map x;
+		try {
+			x = dynManager.importDynClassDefinitions(stream, loader,
+					METADATA_NAMESPACE);
+		} catch (XmlPullParserException e) {
+			throw new AddMetadataDefinitionException(e, metadataDefinitionName);
+		} catch (IOException e) {
+			throw new AddMetadataDefinitionException(e, metadataDefinitionName);
+		}
+		DynClass definition = (DynClass) x.get(metadataDefinitionName);
+		if (definition == null) {
+			throw new CantFindDefinitionInStreamException(
+					metadataDefinitionName, getKeys(x));
+		}
+		addDefinition(definition);
+		return definition;
+	}
+
+	private String getKeys(Map theMap) {
+		return new ArrayList(theMap.keySet()).toString();
+	}
+
+	public DynStruct getDefinition(Metadata metadata) throws MetadataException {
+		return dynManager.get(METADATA_NAMESPACE, metadata.getMetadataName());
+	}
+
+	public DynStruct getDefinition(String metadataName) {
+		if (metadataName == null)
+			return null;
+		if (metadataName.contains(":")) {
+			int index = metadataName.lastIndexOf(":");
+			return dynManager.get(metadataName.substring(0, index),
+					metadataName.substring(index + 1, metadataName.length()));
+		}
+		return dynManager.get(METADATA_NAMESPACE, metadataName);
+	}
+
+	public void addDefinition(DynClass definition) throws MetadataException {
+		if (definition == null) {
+			return;
+		}
+		if ((definition.getNamespace() == null)
+				|| (definition.getNamespace().equals(""))) {
+			definition.setNamespace(METADATA_NAMESPACE);
+		}
+
+		if (!METADATA_NAMESPACE.equalsIgnoreCase(definition.getNamespace())) {
+			throw new InvalidMetadataNamespaceException(definition.getName(),
+					definition.getNamespace());
+		}
+		if (dynManager.get(definition.getNamespace(), definition.getName()) != null) {
+			throw new DuplicateMetadataDefinitionException(definition.getName());
+		}
+		dynManager.add(definition);
+
+		LOG.trace("Registered metadata definition {}.",
+				definition.getFullName());
+
+	}
+
+	public void removeDefinition(DynStruct dynStruct) {
+		if (dynStruct == null)
+			return;
+		this.metadataItems.remove(dynStruct);
+		dynManager.remove(dynStruct);
+	}
+
+	public MetadataContainer createMetadataContainer(String name) {
+		DynClass dynClass = dynManager.get(METADATA_NAMESPACE, name);
+		if (dynClass == null) {
+			throw new IllegalArgumentException(
+					"Can't locate class '"
+							+ new DefaultDynClassName(METADATA_NAMESPACE, name)
+									.getFullName() + "'.");
+		}
+
+		return createMetadataContainer(dynClass);
+		// return new BasicMetadataContainer(dynClass);
+	}
+
+	protected abstract MetadataContainer createMetadataContainer(
+			DynClass dynClass);
+
+	public void storeMetadata(Metadata metadata) throws MetadataException {
+		// In SimpleMetadataManager do nothing
+	}
+
+	public void loadMetadata(Metadata metadata) throws MetadataException {
+		// In SimpleMetadataManager do nothing
+	}
+
+	private Map getMetadataItems() {
+		if (this.metadataItems == null) {
+			initDefinitions();
+		}
+		return this.metadataItems;
+	}
+
+	public Metadata getMetadata(DynStruct definition)
+			throws InvalidMetadataNamespaceException {
+		if (this.getMetadataItems().containsKey(definition)) {
+			return (Metadata) this.getMetadataItems().get(definition);
+		}
+
+		if (definition == null) {
+			return null;
+		}
+
+		if ((definition.getNamespace() == null)
+				|| (!definition.getNamespace().equals(METADATA_NAMESPACE))) {
+			throw new InvalidMetadataNamespaceException(definition);
+		}
+
+		Metadata metadata = createMetadata(definition);
+
+		this.getMetadataItems().put(definition, metadata);
+
+		LOG.trace("Registered metadata definition {}.",
+				definition.getFullName());
+
+		return metadata;
+	}
+
+	protected abstract Metadata createMetadata(DynStruct definition);
+
+	public File getMetadataHomeRepository() {
+		if (this.metadataHomeFile == null) {
+			String path = System.getProperty("user.home");
+			path += File.separator + ".org.gvsig.metadata";
+			this.metadataHomeFile = new File(path);
+		}
+		if (!this.metadataHomeFile.exists()) {
+			this.metadataHomeFile.mkdirs();
+		}
+		return this.metadataHomeFile;
+	}
+
+	public File getRepositoryFile(String relativePath) {
+		if ((relativePath == null) || (relativePath.equals("")))
+			return this.metadataHomeFile;
+		return new File(getMetadataHomeRepository().toString() + File.separator
+				+ relativePath);
+	}
+
+	public void storeDefinitions() {
+		Iterator it = ToolsLocator.getDynObjectManager().iterator(
+				METADATA_NAMESPACE);
+	}
+
+	public Iterator getDefinitions() {
+		// initDefinitions();
+		return getMetadataItems().values().iterator();
+	}
+
+	public void setMetadataHomeRepository(File metadataHomeFile) {
+		if (metadataHomeFile == null) {
+			return;
+		}
+
+		this.metadataHomeFile = metadataHomeFile;
+		if (!this.metadataHomeFile.exists())
+			this.metadataHomeFile.mkdirs();
+	}
+
+	public Metadata getMetadata(String metadataID)
+			throws InvalidMetadataNamespaceException {
+		return this.getMetadata(getDefinition(metadataID));
+	}
+
+	public void setValidationBeforeSaving(boolean doValidation) {
+		this.doSavingValidation = doValidation;
+	}
+
+	public boolean getValidationBeforeSaving() {
+		return this.doSavingValidation;
+	}
+
+	public void setValidationBeforeExporting(boolean doValidation) {
+		this.doExportingValidation = doValidation;
+	}
+
+	public boolean getValidationBeforeExporting() {
+		return this.doExportingValidation;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadataManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/CantFindDefinitionInStreamException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/CantFindDefinitionInStreamException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/CantFindDefinitionInStreamException.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.lib.basic.impl;
+
+import org.gvsig.metadata.exceptions.AddMetadataDefinitionException;
+
+public class CantFindDefinitionInStreamException extends AddMetadataDefinitionException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 450922621905049558L;
+
+	public CantFindDefinitionInStreamException(String name) {
+		super(
+			"Can't find metadata definition %(name) in stream.", 
+			"_cant_find_metadata_definition_XnameX_in_stream", 
+			serialVersionUID
+		);
+		setValue("name",name);
+	}
+
+	public CantFindDefinitionInStreamException(String name, String found) {
+		super(
+				"Can't find metadata definition %(name) in stream, found %(found).", 
+				"_cant_find_metadata_definition_XnameX_in_stream_found_XfoundX", 
+				serialVersionUID
+			);
+		setValue("name",name);
+		setValue("found",found);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/CantFindDefinitionInStreamException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadata.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadata.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadata.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.lib.basic.impl;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.gvsig.metadata.Metadata;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.impl.DefaultDynObject;
+
+/**
+ * Abstract metadata used in both metadata basic and full modules.
+ */
+public abstract class AbstractMetadata extends DefaultDynObject implements
+		Metadata, Comparable {
+
+	public AbstractMetadata(DynStruct dynClass) {
+		super(dynClass);
+	}
+
+	public Set getMetadataChildren() throws MetadataException {
+		Set children = new HashSet();
+		DynStruct[] items = this.getDynClass().getSuperDynStructs();
+		if (items == null)
+			return children;
+
+		Object item;
+		for (int i = 0; i < items.length; i++) {
+			item = items[i];
+			if (item instanceof Metadata) {
+				children.add(item);
+			}
+		}
+		return children;
+	}
+
+	public Object getMetadataID() throws MetadataException {
+		return this.getDynClass().getFullName();
+	}
+
+	public String getMetadataName() throws MetadataException {
+		return this.getDynClass().getName();
+	}
+
+
+	public int compareTo(Object object) {
+		if (object == null) {
+			return 0;
+		}
+		if (object instanceof Metadata) {
+			return this
+					.getDynClass()
+					.getFullName()
+					.toLowerCase()
+					.compareTo(
+							((Metadata) object).getDynClass().getFullName()
+									.toLowerCase());
+		}
+		if (object instanceof DynStruct) {
+			return this
+					.getDynClass()
+					.getFullName()
+					.toLowerCase()
+					.compareTo(((DynStruct) object).getFullName().toLowerCase());
+		}
+		return 0;
+	}
+
+	public String toString() {
+		String name = this.getDynClass().getName();
+		return name.substring(0, 1).toUpperCase() + name.substring(1);
+	}
+
+	public String toDynObjectString() {
+		return super.toString();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/main/java/org/gvsig/metadata/lib/basic/impl/AbstractMetadata.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/java/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/java/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/java/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+For each class you are going to test, create one Test class with the same
+name as the class to test, ending with Test.
+
+For example, the unit tests of the "ExampleLibrary" class are performed
+by the "ExampleLibraryTest" class.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/java/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,11 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	DefaultExampleManager class.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.metadata.basic.impl.DefaultExampleManager">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/pom.xml	(revision 42196)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+	<packaging>jar</packaging>
+
+	<name>org.gvsig.metadata.lib.basic.impl</name>
+	<description>Metadata library basic implementation</description>
+	<parent>
+		<groupId>org.gvsig</groupId>
+		<artifactId>org.gvsig.metadata.basic.lib</artifactId>
+		<version>2.0.97</version>
+	</parent>
+
+
+	<dependencies>
+		<dependency>
+			<groupId>org.gvsig</groupId>
+			<artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+		</dependency>
+	    <dependency>
+	        <groupId>org.gvsig</groupId>
+	        <artifactId>org.gvsig.tools.lib</artifactId>
+	    </dependency>
+	</dependencies>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl
___________________________________________________________________
Added: svn:ignore
   + .classpath

.project

target

.settings


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/pom.xml	(revision 42196)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.metadata.basic.lib</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>    
+  <description>This project contains the basic metadata features.</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.basic</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <modules>
+    <module>org.gvsig.metadata.lib.basic.api</module>
+    <module>org.gvsig.metadata.lib.basic.impl</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/javadoc/overview.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/javadoc/overview.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/javadoc/overview.html	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.metadata.api package documentation</title>
+</head>
+<body>
+
+	<p>TODO: Example library overview.</p>
+	
+	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/javadoc/overview.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.metadata.MetadataLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the Spanish language locale (es)
+Example.returns_value=devuelve el valor
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+# Resource bundle texts for the English language locale (en)
+Example.returns_value=returns value
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/org/gvsig/metadata/lib/api/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/README.txt	(revision 42196)
@@ -0,0 +1,7 @@
+Put into this folder the resources needed by your library classes.
+
+This folder is added to the runtime classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, into this folder you can find some examples of resource bundle 
+property files that may be used by your library classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataContainer.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata;
+
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+/**
+ * This is a utility interface to implement classes that implement the interface
+ * Metadata.
+ * 
+ * Use the createMetadataContainer in the MetadataManager to create a container
+ * for delegate the implementation of Metadata methods in it.
+ * 
+ * @author gvSIG Team
+ * @author jjdelcerro
+ * 
+ * @version $Id$
+ * 
+ */
+public interface MetadataContainer extends DelegatedDynObject {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLocator.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata;
+
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * 
+ * Locator that provides the Metadata manager instance.
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ * 
+ */
+public class MetadataLocator extends BaseLocator {
+
+	public static final String METADATA_MANAGER_NAME = "org.gvsig.metadata.manager";
+
+	private static final String METADATA_MANAGER_DESCRIPTION = "Implementation for MetadataManager";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final MetadataLocator instance = new MetadataLocator();
+
+	/**
+	 * Return the singleton instance.
+	 * 
+	 * @return the singleton instance
+	 */
+	public static MetadataLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Return a reference to MetadataManager.
+	 * 
+	 * @return a reference to MetadataManager
+	 * @throws org.gvsig.tools.locator.LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see org.gvsig.tools.locator.Locator#get(String)
+	 */
+	public static MetadataManager getMetadataManager() throws LocatorException {
+		return (MetadataManager) getInstance().get(METADATA_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the MetadataManager interface.
+	 * 
+	 * @param clazz
+	 *            implementing the MetadataManager interface
+	 */
+	public static void registerMetadataManager(Class clazz) {
+		getInstance().register(METADATA_MANAGER_NAME,
+				METADATA_MANAGER_DESCRIPTION, clazz);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLibrary.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata;
+
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Library that initalizes the Metadata module.
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ * 
+ */
+public class MetadataLibrary extends AbstractLibrary {
+
+	public void doRegistration() {
+		super.doRegistration();
+		registerAsAPI(MetadataLibrary.class);
+		require(ToolsLibrary.class);
+	}
+
+	protected void doInitialize() throws LibraryException {
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+		// Validate if there is any implementation registered.
+		MetadataManager manager = MetadataLocator.getMetadataManager();
+
+		if (manager == null) {
+			throw new ReferenceNotRegisteredException(
+					MetadataLocator.METADATA_MANAGER_NAME,
+					MetadataLocator.getInstance());
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/DefinitionsMap.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/DefinitionsMap.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/DefinitionsMap.java	(revision 42196)
@@ -0,0 +1,154 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynStruct;
+
+/**
+ * 
+ * This is the intermediary of the ImportExport module, which enables to have a
+ * disposable iterator of a list of DynStructs. It also permits to obtain
+ * another disposable iterator of the related DynFields based on a given
+ * DynStruct. It extends from a Map<String, DynStruct>.
+ * 
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ * 
+ */
+public interface DefinitionsMap extends Map {
+
+
+	/**
+	 * Removes a definition from the list
+	 * 
+	 * @param definition
+	 *            the definition to be removed.
+	 */
+	public void remove(DynStruct definition);
+
+	/**
+	 * Adds a definition to the list
+	 * 
+	 * @param definition
+	 *            the definition to be added.
+	 */
+	public void add(DynStruct newDefinition);
+
+	public void addAll(Map map);
+
+	/**
+	 * Determines if this definition is already included.
+	 * 
+	 * @param definition
+	 *            the current definition to be checked.
+	 * @return true if the definition is contained, false otherwise.
+	 */
+	public boolean hasDefinition(DynStruct definition);
+
+	/**
+	 * Saves the current Metadata elements of the list.
+	 * 
+	 */
+	public void save();
+
+	/**
+	 * Retrieves the size of the list of elements.
+	 */
+	public int size();
+
+	/**
+	 * Sets the current user definitions linked to the current hierarchy
+	 * definitions.
+	 * 
+	 * @param userDefs
+	 *            the user Definitions
+	 * @param hierarchyDefs
+	 *            the hierarchy Definitions
+	 */
+	public void setHierarchyDefinitions(Map userDefs, Map hierarchyDefs);
+
+	/**
+	 * Returns a list containing definitions ( {@link DynStruct} ), which are
+	 * disposable.
+	 * 
+	 * @return the disposable DynStructs iterator.
+	 */
+	public Iterator iterator();
+
+	/**
+	 * Returns a disposable list iteration containing {@link DynField}s based on
+	 * a given definition ( {@link DynStruct} ).
+	 * 
+	 * @param definition
+	 *            the DynStruct definition from which to obtain the associated
+	 *            DynFields.
+	 * @return the disposable DynFields iterator.
+	 */
+	public DisposableIterator dynFieldsIterator(DynStruct definition);
+
+	/**
+	 * Returns a list containing children definitions ({@link DynStruct}s) based
+	 * on a given definition.
+	 * 
+	 * @param definition
+	 *            the DynStruct definition from which to obtain the associated
+	 *            children.
+	 * @return the disposable DynFields iterator.
+	 */
+	public List getChildren(DynStruct definition);
+
+	/**
+	 * Returns a disposable list iteration containing the current elements of
+	 * the list.
+	 * 
+	 * @return the disposable DynFields iterator.
+	 */
+	public DisposableIterator disposableIterator();
+
+	/**
+	 * Returns a list iteration containing the current parent element
+	 * definitions of a given childDefinition.
+	 * 
+	 * @param childDefinition
+	 * @return the parent definitions' iterator.
+	 */
+	public Iterator parentsIterator(DynStruct childDefinition);
+
+	/**
+	 * Returns a list iteration containing the current children element
+	 * definitions of a given parentDefinition.
+	 * 
+	 * @return the parent definitions' iterator.
+	 */
+	public Iterator childrenIterator(DynStruct parentDefinition);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/DefinitionsMap.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataManager.java	(revision 42196)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Iterator;
+
+import org.gvsig.metadata.exceptions.InvalidMetadataNamespaceException;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynStruct;
+
+/**
+ * Manages the load and storage of Metadata objects.
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * 
+ * @version $Id$
+ * 
+ */
+public interface MetadataManager {
+
+	public final static String METADATA_NAMESPACE = "metadata";
+
+	/**
+	 * Adds a new definition in the metadata manager.
+	 * 
+	 * The new definition is defined in the namespace by default for DynClasses
+	 * used for metadata.
+	 * 
+	 * @param name
+	 *            the definition Name
+	 * @param description
+	 *            the definition Description
+	 * @return the created DynStruct definition
+	 * 
+	 * @throws MetadataException
+	 */
+	public DynStruct addDefinition(String name, String description)
+			throws MetadataException;
+
+	/**
+	 * Adds a new definition in the metadata manager.
+	 * 
+	 * The new definition is defined in the namespace by default for DynClasses
+	 * used for metadata.
+	 * 
+	 * @param dynClass
+	 *            the new definition
+	 * 
+	 * @return the DynStruct definition
+	 * 
+	 * @throws MetadataException
+	 */
+	public void addDefinition(DynClass definition) throws MetadataException;
+
+	/**
+	 * Adds a new definition in the metadata manager.
+	 * 
+	 * The new definition is defined in the namespace by default for DynClasses
+	 * used for metadata.
+	 * 
+	 * @param name
+	 *            the definition Name
+	 * @param stream
+	 *            the input stream to be parsed.
+	 * @param loader
+	 *            the Class loader that can parse this input stream
+	 * @return the created DynStruct definition
+	 * 
+	 * @throws MetadataException
+	 */
+	public DynStruct addDefinition(String name, InputStream stream,
+			ClassLoader loader) throws MetadataException;
+
+	/**
+	 * <p>
+	 * If a Metadata definition ( {@link DynStruct} ) with the given definition
+	 * name has been previously registered in this manager, then this method
+	 * returns that definition. Otherwise, it returns null.
+	 * </p>
+	 * 
+	 * @param definitionName
+	 *            the name whose corresponding attribute definition is to be
+	 *            retrieved.
+	 * 
+	 * @return The attribute definition corresponding to the provided metadata
+	 *         class, or null otherwise.
+	 */
+	public DynStruct getDefinition(String definitionName);
+
+	/**
+	 * <p>
+	 * Retrieves all the current definitions in the form of an Iterator
+	 * interface.
+	 * </p>
+	 * 
+	 * @return The Metadata iterator containing the current metadata definitions
+	 */
+	public Iterator getDefinitions();
+
+	/**
+	 * <p>
+	 * If a Metadata definition ( {@link DynStruct} ) with a given metadata that
+	 * has been previously registered in this manager, then this method returns
+	 * that definition. Otherwise, it returns null.
+	 * </p>
+	 * 
+	 * @param metadata
+	 *            the given metadata.
+	 * 
+	 * @return The attribute definition corresponding to the provided metadata
+	 *         class, or null otherwise.
+	 */
+	public DynStruct getDefinition(Metadata metadata) throws MetadataException;
+
+	/**
+	 * 
+	 * If the current dynStruct has been previously registered, it is removed
+	 * from both the dynObjectManager and the metadataManager lists. Otherwise,
+	 * does nothing.
+	 * 
+	 * @param dynStruct
+	 *            the dynStruct to be removed.
+	 */
+	public void removeDefinition(DynStruct dynStruct);
+
+	/**
+	 * Creates a default {@link Metadata} instance based on a given
+	 * {@link DynStruct}, if it has not been previously registered, and adds
+	 * this Metadata to the system.
+	 * 
+	 * @param dynStruct
+	 *            the given dynStruct object.
+	 * @return the resultant Metadata object.
+	 * @throws InvalidMetadataNamespaceException
+	 */
+	public Metadata getMetadata(DynStruct dynStruct)
+			throws InvalidMetadataNamespaceException;
+
+	/**
+	 * This function populates the given Metadata object with the current values
+	 * that the system contains. If there is any invalid access to an undeclared
+	 * field, for example, a MetadataException will be thrown.
+	 * 
+	 * @param metadata
+	 *            the metadata that needs to be populated.
+	 * 
+	 * @throws MetadataException
+	 *             Exception caused by any access violation.
+	 */
+	public void loadMetadata(Metadata metadata) throws MetadataException;
+
+	/**
+	 * This function stores the given Metadata object to an output resource, be
+	 * it a database or a file containing its information.
+	 * 
+	 * @param metadata
+	 *            the metadata that needs to be stored.
+	 * 
+	 * @throws MetadataException
+	 *             Exception caused by any access violation.
+	 */
+	public void storeMetadata(Metadata metadata) throws MetadataException;
+
+	/**
+	 * This is a utility interface to implement classes that implement the
+	 * interface Metadata.
+	 * 
+	 * Use the createMetadataContainer in the MetadataManager to create a
+	 * container for delegate the implementation of Metadata methods in it.
+	 * 
+	 * @param name
+	 *            the DynStruct name.
+	 * 
+	 * @return the metadata container.
+	 */
+	public MetadataContainer createMetadataContainer(String name);
+
+	/**
+	 * Returns the main Metadata extension root repository.
+	 * 
+	 * @return the File object containing the home repository folder
+	 * 
+	 */
+	public File getMetadataHomeRepository();
+
+	/**
+	 * Sets the main Metadata root repository for this manager.
+	 * 
+	 * @param metadataHomeRepository
+	 *            the main Repository folder.
+	 */
+	public void setMetadataHomeRepository(File metadataHomeRepository);
+
+	/**
+	 * Retrieves a metadata object based on its metadata ID. This metadata
+	 * object is basically a dynObject if metadata namespace set to "metadata".
+	 * 
+	 * @param metadataID
+	 *            the metadata ID of the metadata object.
+	 * @return
+	 * @throws InvalidMetadataNamespaceException
+	 *             if the metadataID was not previously registered as Metadata.
+	 */
+	public Metadata getMetadata(String metadataID)
+			throws InvalidMetadataNamespaceException;
+
+	/**
+	 * Added options properties setter for validating before the saving
+	 * function. If it is set to false, the validation will not be performed.
+	 * @param doValidation
+	 *		if the validation must be performed or not before saving metadata objects.
+	 */
+	public void setValidationBeforeSaving(boolean doValidation);
+
+	/**
+	 * Added options properties getter for validating before the saving
+	 * function. If it is set to false, the validation will not be performed.
+	 * @return
+	 *            if the validation must be performed or not before saving metadata objects.
+	 */
+	public boolean getValidationBeforeSaving();
+
+	/**
+	 * Added options properties setter for validating before the exporting
+	 * function. If it is set to false, the validation will not be performed.
+	 * @param doValidation
+	 *		if the validation must be performed or not before saving metadata objects.
+	 */
+	public void setValidationBeforeExporting(boolean doValidation);
+
+	/**
+	 * Added options properties getter for validating before the exporting
+	 * function. If it is set to false, the validation will not be performed.
+	 * @return
+	 *            if the validation must be performed or not before saving metadata objects.
+	 */
+	public boolean getValidationBeforeExporting();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/MetadataManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/Metadata.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/Metadata.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/Metadata.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata;
+
+import java.util.Set;
+
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * Metadata is information or data about data {@link http
+ * ://en.wikipedia.org/wiki/Metadata}.
+ * <p>
+ * This interface extends DynObject to add anything needed over the DynObject
+ * model to be able to be used as a Metadata model.
+ * </p>
+ * 
+ * @author gvSIG Team
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ * @author <a href="mailto:reinhold@uji.es">cmartin</a>
+ * @version $Id$
+ * 
+ */
+public interface Metadata extends DynObject {
+
+	/**
+	 * Returns the unique identifier of the Metadata.
+	 * 
+	 * @return the Metadata identifier
+	 */
+	public Object getMetadataID() throws MetadataException;
+
+	/**
+	 * Returns the name of the Metadata, which allows to identify the type in
+	 * the Metadata registry.
+	 * 
+	 * @return the Metadata name
+	 */
+	public String getMetadataName() throws MetadataException;
+
+	/**
+	 * Returns an unsorted set of child Metadata objects.
+	 * 
+	 * @return an unsorted set of child Metadata objects
+	 */
+	public Set getMetadataChildren() throws MetadataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/Metadata.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataException.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.exceptions;
+
+import org.gvsig.tools.exception.ListBaseException;
+
+public class MetadataException extends ListBaseException {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2654368520999289207L;
+	private final static String MESSAGE_FORMAT = "Error getting or setting the state of the object.";
+	private final static String MESSAGE_KEY = "_MetadataException";
+
+	public MetadataException(Throwable cause) {
+		this(MESSAGE_FORMAT, cause);
+	}
+
+	protected MetadataException(String messageFormat, String messageKey,
+			long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+	protected MetadataException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	public MetadataException(String messageFormat, Throwable cause) {
+		super(messageFormat, cause, MESSAGE_KEY, serialVersionUID);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/AddMetadataDefinitionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/AddMetadataDefinitionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/AddMetadataDefinitionException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.exceptions;
+
+public class AddMetadataDefinitionException extends MetadataException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 564722264607592985L;
+
+	public AddMetadataDefinitionException(Throwable cause, String name) {
+		super("Can't add definition %(name) to metadata manager.", cause,
+				"_Cant_add_definition_XnameX_to_metadata_manager",
+				serialVersionUID);
+	}
+
+	protected AddMetadataDefinitionException(String message, String key,
+			long code) {
+		super(message, key, code);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/AddMetadataDefinitionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/DuplicateMetadataDefinitionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/DuplicateMetadataDefinitionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/DuplicateMetadataDefinitionException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.exceptions;
+
+public class DuplicateMetadataDefinitionException extends
+		AddMetadataDefinitionException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1774035106179247051L;
+	private final static String MESSAGE_FORMAT = "Duplicated name (%(name)s) in definition of metadata.";
+	private final static String MESSAGE_KEY = "_DuplicateMetadataDefinitionException";
+
+	public DuplicateMetadataDefinitionException(String name) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("name", name);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/DuplicateMetadataDefinitionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/InvalidMetadataNamespaceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/InvalidMetadataNamespaceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/InvalidMetadataNamespaceException.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.exceptions;
+
+import org.gvsig.tools.dynobject.DynStruct;
+
+public class InvalidMetadataNamespaceException extends MetadataException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7848869189284006672L;
+	private final static String MESSAGE_FORMAT = "Invalid namespace '%(namespace)s' for class '%(names)s' in metadata context.";
+	private final static String MESSAGE_KEY = "_InvalidMetadataNamespaceException";
+
+	public InvalidMetadataNamespaceException(String definitionName,
+			String namespace) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("name", definitionName);
+		this.setValue("namespace", namespace);
+	}
+
+	public InvalidMetadataNamespaceException(DynStruct dynStruct) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("name", dynStruct.getName());
+		this.setValue("namespace", dynStruct.getNamespace());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/InvalidMetadataNamespaceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataRuntimeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataRuntimeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataRuntimeException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.metadata.exceptions;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * @author jjdelcerro
+ * 
+ */
+public class MetadataRuntimeException extends BaseRuntimeException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1059880619868712491L;
+
+	public MetadataRuntimeException(BaseException exception) {
+		super(exception);
+	}
+
+	protected MetadataRuntimeException(String message, String key, long code) {
+		// Don't make public this method.
+		super(message, key, code);
+	}
+
+	protected MetadataRuntimeException(String message, Throwable cause,
+			String key, long code) {
+		// Don't make public this method.
+		super(message, cause, key, code);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/main/java/org/gvsig/metadata/exceptions/MetadataRuntimeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/line.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/line.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/polygon.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/polygon.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/line.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/line.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/polygon.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/polygon.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/point.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/point.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/point.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/point.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/line.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/line.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/polygon.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/polygon.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/point.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/org/gvsig/metadata/lib/api/point.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,11 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	DefaultExampleManager class.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.metadata.api.junit.AbstractMetadataTest">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/java/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/java/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/java/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+For each class you are going to test, create one Test class with the same
+name as the class to test, ending with Test.
+
+For example, the unit tests of the "ExampleLibrary" class are performed
+by the "ExampleLibraryTest" class.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/src/test/java/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+	<packaging>jar</packaging>
+	<name>org.gvsig.metadata.lib.basic.api</name>
+	<description>Metadata library basic API</description>
+	<parent>
+		<groupId>org.gvsig</groupId>
+		<artifactId>org.gvsig.metadata.basic.lib</artifactId>
+		<version>2.0.97</version>
+	</parent>
+	<dependencies>
+	    <dependency>
+	        <groupId>org.gvsig</groupId>
+	        <artifactId>org.gvsig.tools.lib</artifactId>
+	    </dependency>
+	</dependencies>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api
___________________________________________________________________
Added: svn:ignore
   + target

.project

.settings

.classpath



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib
___________________________________________________________________
Added: svn:ignore
   + .settings

.project



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic
___________________________________________________________________
Added: svn:ignore
   + .project

.settings


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/org/gvsig/fmap/dal/MetadataDefinitions.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/org/gvsig/fmap/dal/MetadataDefinitions.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/org/gvsig/fmap/dal/MetadataDefinitions.xml	(revision 42196)
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="DataProvider" namespace="metadata">
+      <description>Metadata of a feature store</description>
+      <fields>
+        <field name="ProviderName" type="string" mandatory="true">
+          <description>The name of the provider of data</description>
+        </field>
+        <field name="ContainerName" type="string" mandatory="false">
+          <description>Name of the container of the data, by example, in a dbf, the file name of the dbf</description>
+        </field>
+      </fields>
+    </class>
+
+    <class name="FeatureProvider" namespace="metadata">
+      <extends>
+      	<class namespace="metadata" name="DataProvider"/>
+      </extends>
+      <description>Metadata of a feature store</description>
+      <fields>
+        <field name="FeatureType" type="dynobject" subType="org.gvsig.fmap.dal.feature.FeatureType" mandatory="false">
+          <description>The definition of the structure of the store</description>
+        </field>    
+      </fields>
+    </class>
+
+    <class name="SpatialProvider" namespace="metadata">
+      <extends>
+      	<class namespace="metadata" name="FeatureProvider"/>
+      </extends>
+      <description>Metadata of a feature store with spatial support</description>
+      <fields>
+        <field name="CRS" type="crs" mandatory="false">
+          <description></description>
+        </field>    
+        <field name="Envelope" type="envelope" mandatory="false">
+          <description></description>
+        </field>    
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/org/gvsig/fmap/dal/MetadataDefinitions.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1,3 @@
+org.gvsig.fmap.dal.DALLibrary
+org.gvsig.fmap.dal.store.memory.MemoryStoreLibrary
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/Feature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/Feature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/Feature.java	(revision 42196)
@@ -0,0 +1,466 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Date;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.exception.ValidateFeaturesException;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+
+
+/**
+ * <p>Represents the basic data unit of a tabular structure, equivalent
+ * to a record in a data base table. In SIG domain, a Feature is a compound
+ * data structure that may contain a geographic component. The conventional term
+ * Feature comes from the term cartographic feature and both represent the same
+ * concept.
+ * </p>
+ * <p>
+ * A Feature may contain more than one geometry attribute. In the case there is not any geometry data,
+ * the <code>getDefaultGeometry()</code> will return <code>null</code>.
+ * </p>
+ * <p>
+ * Features are not editable as such. To edit a Feature you have to obtain an
+ * editable instance <code>EditableFeature</code> using the method <code>getEditable()</code>.
+ * Modify that editable instance and then apply the changes to the Feature. This
+ * mechanism is to avoid ambiguity and loosing track on the Feature internal state.
+ * </p>
+ * <br>
+ * <p>The Feature:
+ *   <ul>
+ *     <li>Has an unique identifier <code>FeatureReference</code>
+ *     to recognize our Feature from each other from the same data store</li>
+ *     <li>Has a <code>FeatureType</code> that describes the Feature characteristics (attributes,
+ *     data types, default geometry, validation rules).</li>
+ *     <li>Can obtain a copy of itself.</li>
+ *     <li>Can obtain its default geometry attribute and also a list with all the geometry attributes.</li>
+ *     <li>Can obtain its default Spatial Reference System and also a list with all the SRSs used in the geometry attributes.</li>
+ *     <li>Can obtain the envelope (extent) of the default geometry attribute.
+ *     <li>Can obtain the editable instance of the Feature.</li>
+ *     <li>Has a set of utility methods to read attributes when their type is known, by both index and name.</li>
+ *   </ul>
+ * </p>
+ *
+ */
+public interface Feature {
+
+	/**
+	 * Returns a unique identifier for this Feature in the associated store.
+	 *
+	 * @return
+	 * 		a unique FeatureReference in the associated store
+	 */
+	public FeatureReference getReference();
+
+	/**
+	 * Returns the FeatureType that describes the structure of this Feature.
+	 *
+	 * @return
+	 * 		a FeatureType describing this Feature structure.
+	 */
+	public FeatureType getType();
+
+	/**
+	 * Creates and returns a copy of this
+	 *
+	 * @return
+	 * 		a new instance of Feature which is equal to this
+	 */
+	public Feature getCopy();
+
+	/** Mode that indicates the validation of all FeatureRules */
+	static final int ALL = 0;
+
+	/** Mode that indicates the validation of the update FeatureRules */
+	static final int UPDATE = 1;
+
+	/** Mode that indicates the validation of the finish editing FeatureRules */
+	static final int FINISH_EDITING = 2;
+
+	/**
+	 * Validates this Feature by applying the <code>FeatureRules</code>
+	 * corresponding to the given mode.
+	 *
+	 * @param mode
+	 * 			one of the constants {ALL, UPDATE, FINISH_EDITING}
+         * @throws DataException on validation errors
+	 */
+	public void validate(int mode) throws DataException;
+
+	/**
+	 * Returns the editable instance of this Feature.
+	 * EditableFeature offers methods for Feature editing.
+	 *
+	 * @return
+	 * 		EditableFeature of this
+	 */
+	public EditableFeature getEditable();
+
+	/**
+	 * Returns the value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			a string containing the name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Object   get(String name);
+
+	/**
+	 * Returns the value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Object   get(int index);
+
+	/**
+	 * Returns the int value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			a string containing the name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public int      getInt(String name);
+
+	/**
+	 * Returns the int value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public int      getInt(int index);
+
+	/**
+	 * Returns the Boolean value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public boolean  getBoolean(String name);
+
+	/**
+	 * Returns the Boolean value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public boolean  getBoolean(int index);
+
+	/**
+	 * Returns the long value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public long     getLong(String name);
+
+	/**
+	 * Returns the long value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public long     getLong(int index);
+
+	/**
+	 * Returns the float value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public float   getFloat(String name);
+
+	/**
+	 * Returns the float value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public float    getFloat(int index);
+
+	/**
+	 * Returns the double value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public double  getDouble(String name);
+
+	/**
+	 * Returns the double value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public double   getDouble(int index);
+
+	/**
+	 * Returns the Date value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Date    getDate(String name);
+
+	/**
+	 * Returns the Date value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Date     getDate(int index);
+
+	/**
+	 * Returns the String value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public String  getString(String name);
+
+	/**
+	 * Returns the String value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public String   getString(int index);
+
+	/**
+	 * Returns the byte value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public byte    getByte(String name);
+
+	/**
+	 * Returns the byte value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public byte     getByte(int index);
+
+	/**
+	 * Returns the Geometry value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Geometry getGeometry(String name);
+
+	/**
+	 * Returns the Geometry value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Geometry getGeometry(int index);
+
+	/**
+	 * Returns the array value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Object[] getArray(String name);
+
+	/**
+	 * Returns the array value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Object[] getArray(int index);
+
+	/**
+	 * Returns the Feature value of an attribute given its name.
+	 *
+	 * @param name
+	 * 			name of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Feature  getFeature(String name);
+
+	/**
+	 * Returns the Feature value of an attribute given its position.
+	 *
+	 * @param index
+	 * 			position of the attribute
+	 * @return
+	 * 		value of the specified attribute
+	 */
+	public Feature  getFeature(int index);
+
+
+	/**
+	 * Envelope (AKA extent or bounding box) of the default
+	 * geometry attribute.
+	 *
+	 * @return Envelope
+	 * 				of the default geometry attribute
+	 */
+	public Envelope getDefaultEnvelope();
+
+	/**
+	 * Returns the value of the default geometry attribute,
+	 * which is a {@link Geometry}.
+	 *
+	 * @return
+	 * 		value of the default geometry attribute
+	 */
+	public Geometry getDefaultGeometry();
+
+	/**
+	 * Returns a list with the values of this Feature's
+	 * geometry attributes.
+	 *
+	 * @return
+	 * 		a list with the values of this Feature's geometry attributes
+	 */
+	public List getGeometries();
+
+	/**
+	 * Returns the Spatial Reference System in which is
+	 * expressed the default geometry attribute.
+	 *
+	 * @return
+	 * 		A string containing the default geometry attribute SRS.
+	 */
+	public IProjection getDefaultSRS();
+
+	/**
+	 * Returns a list with the Spatial Reference Systems in which
+	 * are expressed this Feature's geometry attributes.
+	 *
+	 * @return
+	 * 		a list with the Spatial Reference Systems.
+	 */
+	public List getSRSs();
+	
+	/**
+     * Returns the instant value of an attribute given its position.
+     *
+     * @param index
+     *          position of the attribute
+     * @return
+     *      value of the specified attribute
+     */
+	public Instant getInstant(int index);
+
+	/**
+     * Returns the instant value of an attribute given its name.
+     *
+     * @param name
+     *          a string containing the name of the attribute
+     * @return
+     *      value of the specified attribute
+     */
+	public Instant getInstant(String name);
+
+    /**
+     * Returns the interval value of an attribute given its position.
+     *
+     * @param index
+     *          position of the attribute
+     * @return
+     *      value of the specified attribute
+     */
+	public Interval getInterval(int index);
+
+	/**
+     * Returns the interval value of an attribute given its name.
+     *
+     * @param name
+     *          a string containing the name of the attribute
+     * @return
+     *      value of the specified attribute
+     */
+	public Interval getInterval(String name);
+
+	public DynObject getAsDynObject();
+	
+	/**
+	 * This lets Feature be used eaily with {@link Evaluator}
+	 * 
+	 * @return
+	 *     An instance of {@link EvaluatorData} which returns the data
+	 *     of this feature
+	 */
+	public EvaluatorData getEvaluatorData();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/Feature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocksGroup.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocksGroup.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocksGroup.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+
+public interface FeatureLocksGroup  {
+
+    boolean unlock();
+
+    boolean isLocked(Feature feature);
+
+    boolean isLocked(FeatureReference feature);
+    
+    long getTimeout();
+    
+    long getXXX();
+    
+    Iterator iterator();
+    
+    long getLocksCount();   
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocksGroup.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransform.java	(revision 42196)
@@ -0,0 +1,128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * A FeatureStoreTransform provides a mechanism for mapping a source FeatureType
+ * to a target FeatureType, allowing to build different views (as in database
+ * view) over different feature types even from different stores.
+ *
+ * @author jmvivo
+ *
+ */
+public interface FeatureStoreTransform extends Persistent, Cloneable {
+
+	/**
+	 * Returns the default {@link FeatureType}.
+	 *
+	 * @return default {@link FeatureType}
+	 *
+	 * @throws DataException
+	 */
+	public FeatureType getDefaultFeatureType() throws DataException;
+
+	/**
+	 * Returns this FeatureStoreTransform's FeatureType(s)
+	 * @return
+	 * @throws DataException
+	 */
+	public List getFeatureTypes() throws DataException;
+
+	/**
+	 * Returns the original store {@link FeatureType} that replaces
+	 * targetFeatureType of this FeatureStoreTransform's
+	 *
+	 * @return source {@link FeatureType}
+	 * @throws DataException
+	 */
+	public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType);
+
+	/**
+	 * Applies this transform between two features, copying the source data to
+	 * the target feature.
+	 *
+	 * @param source
+	 *            feature whose data will be used as source
+	 *
+	 * @param target
+	 *            feature in which the source data will be copied
+	 *
+	 * @throws DataException
+	 */
+	public void applyTransform(Feature source, EditableFeature target)
+			throws DataException;
+
+	/**
+	 * Sets the FeatureStore to which this transform is applied.
+	 *
+	 * @param featureStore
+	 *            FeatureStore to which this transform is applied.
+	 */
+	public void setFeatureStore(FeatureStore featureStore);
+
+	/**
+	 * Returns the FeatureStore to which this transform belongs.
+	 *
+	 * @return FeatureStore to which this transform belongs.
+	 */
+	public FeatureStore getFeatureStore();
+
+	/**
+	 * Retruns true if this make changes of any attributes values or false if
+	 * only {@link FeatureType} definitions is changed.
+	 *
+	 * @see {@link FeatureStoreTransforms#isTransformsOriginalValues()}
+	 * 
+	 * @return
+	 */
+	public boolean isTransformsOriginalValues();
+	
+	public String getName();
+	
+	public String getDescription();
+
+	/**
+	 * Sets the original metadata for this transform
+	 * 
+	 * @param metadata
+	 */
+	public void setSourceMetadata(DynObject metadata);
+	
+    public void setDynValue(String name, Object value)
+            throws DynFieldNotFoundException;
+    
+    public boolean hasDynValue(String name);
+    
+    public Object getDynValue(String name) throws DynFieldNotFoundException;
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRules.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRules.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRules.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+
+/**
+ * This is a container for FeatureRules.
+ * Besides getting a rule by index, this structure allows 
+ * adding a rule, removing a rule, iterating over the rules and copying 
+ * the whole structure.
+ *
+ */
+public interface FeatureRules {
+
+	/**
+	 * Returns an object given its index.
+	 * 
+	 * @param index
+	 * 			a position in this <code>FeatureRules</code>
+	 * @return
+	 * 		the object found in the given index
+	 */
+	public Object get(int index);
+
+	/**
+	 * Returns a {@link FeatureRule} given its index.
+	 * 
+	 * @param index
+	 * 			a position in this <code>FeatureRules</code>
+	 * @return
+	 * 		the {@link FeatureRule} found in the given index
+	 */
+	
+	public FeatureRule getRule(int index);
+
+	/**
+	 * Adds a new rule to this FeatureRules.
+	 * 
+	 * @param rule
+	 * 			the new rule to add.
+	 * @return
+	 * 		the added rule
+	 */
+	public FeatureRule add(FeatureRule rule);
+
+	/**
+	 * Returns the number of rules contained in this FeatureRules.
+	 * 
+	 * @return
+	 * 		number of rules in this FeatureRules
+	 */
+	public int size();
+
+	/**
+	 * Clears this FeatureRules from any rules.
+	 */
+	public void clear();
+
+	/**
+	 * Removes the rule stored in the given index.
+	 * 
+	 * @param index
+	 * 			index of the rule to remove.
+	 * @return
+	 * 		returns the removed rule
+	 */
+	public Object remove(int index);
+
+	/**
+	 * Removes the given rule from this FeatureRules.
+	 * 
+	 * @param rule
+	 * 			FeatureRule to remove
+	 * @return
+	 * 		true indicates success, false indicates that it was not found.
+	 */
+	public boolean remove(FeatureRule rule);
+
+	/**
+	 * Returns an iterator over the available {@link FeatureRule}(s)
+	 * 
+	 * @return
+	 * 		an iterator over the available {@link FeatureRule}(s)
+	 */
+	public Iterator iterator();
+
+	/**
+	 * Returns a new copy of this FeatureRules.
+	 * 
+	 * @return
+	 * 		a new copy of this FeatureRules.
+	 */
+	public FeatureRules getCopy();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRules.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java	(revision 42196)
@@ -0,0 +1,815 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.undo.UndoRedoStack;
+
+/**
+ * <p>
+ * A FeatureStore is a type of store whose data consists on sets of
+ * {@link Feature}(s). {@link Feature}(s) from the same FeatureStore can be of
+ * different {@link FeatureType}(s) (as in GML format for instance).
+ * </p>
+ *
+ * <p>
+ * FeatureStore allows:
+ * </p>
+ * <ul>
+ * <li>Obtaining the default {@link FeatureType}. A FeatureStore always has one
+ * and only one default FeatureType.
+ * <li>Obtaining the list of {@link FeatureType}(s) defined in the FeatureStore.
+ * <li>Obtaining, filtering and sorting subsets of data ({@link FeatureSet})
+ * through {@link FeatureQuery}, as well as background loading.
+ * <li>Obtaining the total {@link Envelope} (AKA bounding box or extent) of the
+ * store.
+ * <li>Support for editing {@link FeatureType}(s).
+ * <li>Obtaining information about contained {@link Geometry} types.
+ * <li>Exporting to another store.
+ * <li>Indexing.
+ * <li>Selection.
+ * <li>Locks management.
+ * </ul>
+ *
+ */
+public interface FeatureStore extends DataStore, UndoRedoStack, Cloneable {
+
+    public static final String METADATA_DEFINITION_NAME = "FeatureStore";
+
+    /** Indicates that this store is in query mode */
+    final static int MODE_QUERY = 0;
+
+    /** Indicates that this store is in full edit mode */
+    final static int MODE_FULLEDIT = 1;
+
+    /** Indicates that this store is in append mode */
+    final static int MODE_APPEND = 2;
+
+    /*
+     * =============================================================
+     *
+     * information related services
+     */
+
+    /**
+     * Indicates whether this store allows writing.
+     *
+     * @return
+     *         true if this store can be written, false if not.
+     */
+    public boolean allowWrite();
+
+    /**
+     * Returns this store's default {@link FeatureType}.
+     *
+     * @return
+     *         this store's default {@link FeatureType}.
+     *
+     * @throws DataException
+     */
+    public FeatureType getDefaultFeatureType() throws DataException;
+
+    /**
+     * Returns this store's featureType {@link FeatureType} matches with
+     * featureTypeId.
+     *
+     * @param featureTypeId
+     *
+     * @return this store's default {@link FeatureType}.
+     *
+     * @throws DataException
+     */
+    public FeatureType getFeatureType(String featureTypeId)
+        throws DataException;
+
+    /**
+     * Returns this store's {@link FeatureType}(s).
+     *
+     * @return a list with this store's {@link FeatureType}(s).
+     *
+     * @throws DataException
+     */
+    public List getFeatureTypes() throws DataException;
+
+    /**
+     * Returns this store's parameters.
+     *
+     * @return
+     *         {@link DataStoreParameters} containing this store's parameters
+     */
+    public DataStoreParameters getParameters();
+
+    /**
+     *@throws DataException
+     * @deprecated Mirar de cambiarlo a metadatos
+     */
+    public boolean canWriteGeometry(int gvSIGgeometryType) throws DataException;
+
+    /**
+     * Returns this store's total envelope (extent).
+     *
+     * @return this store's total envelope (extent) or <code>null</code> if
+     *         store not have geometry information
+     */
+    public Envelope getEnvelope() throws DataException;
+
+    /**
+     *
+     * @deprecated use getDefaultFeatureType().getDefaultSRS()
+     * @return
+     * @throws DataException
+     */
+    public IProjection getSRSDefaultGeometry() throws DataException;
+
+    /**
+     * Exports this store to another store.
+     *
+     * @param explorer
+     *            {@link DataServerExplorer} target
+     * @param params
+     *            New parameters of this store that will be used on the target
+     *            explorer
+     *
+     * @throws DataException
+     *
+     * @Deprecated this method is unstable
+     */
+    public void export(DataServerExplorer explorer, String provider,
+        NewFeatureStoreParameters params) throws DataException;
+
+    /*
+     * =============================================================
+     *
+     * Query related services
+     */
+
+    /**
+     * Returns all available features in the store.
+     * <p>
+     * <em>
+     * <strong>NOTE:</strong> if you use this method to get a
+     * {@link FeatureSet}, you  must get sure it is disposed
+     * (@see {@link DisposableIterator#dispose()}) in any case, even if an
+     * error occurs while getting the data. It is recommended to use the
+     * <code>accept</code> methods instead, which handle everything for you.
+     * Take into account the accept methods may use a fast iterator to
+     * get the features.
+     * </em>
+     * </p>
+     *
+     * @see #accept(org.gvsig.tools.visitor.Visitor)
+     *
+     * @return a collection of features
+     * @throws ReadException
+     *             if there is any error while reading the features
+     */
+    FeatureSet getFeatureSet() throws DataException;
+
+    /**
+     * Returns a subset of features taking into account the properties and
+     * restrictions of the FeatureQuery.
+     * <p>
+     * <em>
+     * <strong>NOTE:</strong> if you use this method to get a
+     * {@link FeatureSet}, you  must get sure it is disposed
+     * (@see {@link DisposableIterator#dispose()}) in any case, even if an
+     * error occurs while getting the data. It is recommended to use the
+     * <code>accept</code> methods instead, which handle everything for you.
+     * Take into account the accept methods may use a fast iterator to
+     * get the features.
+     * </em>
+     * </p>
+     *
+     * @see #accept(org.gvsig.tools.visitor.Visitor,
+     *      org.gvsig.fmap.dal.DataQuery)
+     *
+     * @param featureQuery
+     *            defines the characteristics of the features to return
+     * @return a collection of features
+     * @throws ReadException
+     *             if there is any error while reading the features
+     */
+    FeatureSet getFeatureSet(FeatureQuery featureQuery) throws DataException;
+
+    /**
+     * Loads a subset of features taking into account the properties and
+     * restrictions of the FeatureQuery. Feature loading is performed by calling
+     * the Observer, once each loaded Feature.
+     *
+     * @param featureQuery
+     *            defines the characteristics of the features to return
+     * @param observer
+     *            to be notified of each loaded Feature
+     * @throws DataException
+     *             if there is any error while loading the features
+     */
+    void getFeatureSet(FeatureQuery featureQuery, Observer observer)
+        throws DataException;
+
+    /**
+     * Loads all available feature in the store. The loading of Features is
+     * performed by calling the Observer, once each loaded Feature.
+     *
+     * @param observer
+     *            to be notified of each loaded Feature
+     * @throws DataException
+     *             if there is any error while loading the features
+     */
+    void getFeatureSet(Observer observer) throws DataException;
+
+    /**
+     * Returns the feature given its reference.
+     *
+     * @param reference
+     *            a unique FeatureReference
+     * @return
+     *         The Feature
+     *
+     * @throws DataException
+     *
+     */
+    public Feature getFeatureByReference(FeatureReference reference)
+        throws DataException;
+
+    /**
+     * Returns the feature given its reference and feature type.
+     *
+     * @param reference
+     *            a unique FeatureReference
+     *
+     * @param featureType
+     *            FeatureType to which the requested Feature belongs
+     *
+     * @return
+     *         The Feature
+     *
+     * @throws DataException
+     *
+     */
+    public Feature getFeatureByReference(FeatureReference reference,
+        FeatureType featureType) throws DataException;
+
+    /*
+     * =============================================================
+     *
+     * Editing related services
+     */
+
+    /**
+     * Enters editing state.
+     */
+    public void edit() throws DataException;
+
+    /**
+     * Enters editing state specifying the editing mode.
+     *
+     * @param mode
+     *
+     * @throws DataException
+     */
+    public void edit(int mode) throws DataException;
+
+    /**
+     * Cancels all editing since the last edit().
+     *
+     * @throws DataException
+     */
+    public void cancelEditing() throws DataException;
+
+    /**
+     * Exits editing state.
+     *
+     * @throws DataException
+     */
+    public void finishEditing() throws DataException;
+
+    /**
+     * Save changes in the provider without leaving the edit mode.
+     * Do not call observers to communicate a change of ediding mode.
+     * The operation's history is eliminated to prevent inconsistencies
+     * in the data.
+     *
+     * @throws DataException
+     */
+    public void commitChanges() throws DataException ;
+
+    /**
+     *
+     * Returns true if you can call CommitChanges method.
+     * If not in editing or changes have been made in the structure
+     * return false.
+     *
+     * @return true if can call commitChanges
+     * @throws DataException
+     */
+    public boolean canCommitChanges() throws DataException;
+
+
+    /**
+     * Indicates whether this store is in editing state.
+     *
+     * @return
+     *         true if this store is in editing state, false if not.
+     */
+    public boolean isEditing();
+
+    /**
+     * Indicates whether this store is in appending state. In this state the new
+     * features are automatically inserted at the end of the {@link FeatureSet}.
+     *
+     * @return true if this store is in appending state.
+     */
+    public boolean isAppending();
+
+    /**
+     * Updates a {@link FeatureType} in the store with the changes in the
+     * {@link EditableFeatureType}.<br>
+     *
+     * Any {@link FeatureSet} from this store that are used will be invalidated.
+     *
+     * @param featureType
+     *            an {@link EditableFeatureType} with the changes.
+     *
+     * @throws DataException
+     */
+    public void update(EditableFeatureType featureType) throws DataException;
+
+    /**
+     * Updates a {@link Feature} in the store with the changes in the
+     * {@link EditableFeature}.<br>
+     *
+     * Any {@link FeatureSet} from this store that was still in use will be
+     * invalidated. You can override this using
+     * {@link FeatureSet#update(EditableFeature)}.
+     *
+     * @param feature
+     *            the feature to be updated
+     *
+     * @throws DataException
+     */
+    public void update(EditableFeature feature) throws DataException;
+
+    /**
+     * Deletes a {@link Feature} from the store.<br>
+     *
+     * Any {@link FeatureSet} from this store that was still in use will be
+     * invalidated. You can override this using {@link Iterator#remove()} from
+     * {@link FeatureSet}.
+     *
+     * @param feature
+     *            The feature to be deleted.
+     *
+     * @throws DataException
+     */
+    public void delete(Feature feature) throws DataException;
+
+    /**
+     * Inserts a {@link Feature} in the store.<br>
+     *
+     * Any {@link FeatureSet} from this store that was still in use will be
+     * invalidated. You can override this using
+     * {@link FeatureSet#insert(EditableFeature)}.
+     *
+     * @param feature
+     *            The feature to be inserted
+     *
+     * @throws DataException
+     */
+    public void insert(EditableFeature feature) throws DataException;
+
+    /**
+     * Creates a new feature using the default feature type and returns it as an
+     * {@link EditableFeature}
+     *
+     * @return a new feature in editable state
+     *
+     * @throws DataException
+     */
+    public EditableFeature createNewFeature() throws DataException;
+
+    /**
+     * Creates a new feature of the given {@link FeatureType} and uses the given
+     * {@link Feature} as default values to initialize it.
+     *
+     * @param type
+     *            the new feature's feature type
+     *
+     * @param defaultValues
+     *            a feature whose values are used as default values for the new
+     *            feature.
+     *
+     * @return the new feature.
+     *
+     * @throws DataException
+     */
+    public EditableFeature createNewFeature(FeatureType type,
+        Feature defaultValues) throws DataException;
+
+    /**
+     * Creates a new feature of the given {@link FeatureType}. The flag
+     * defaultValues is used to indicate whether the new feature should be
+     * initialized with default values or not.
+     *
+     * @param type
+     *            the new feature's feature type
+     *
+     * @param defaultValues
+     *            if true the new feature is initialized with each attribute's
+     *            default value.
+     *
+     * @return
+     *         the new feature
+     *
+     * @throws DataException
+     */
+    public EditableFeature createNewFeature(FeatureType type,
+        boolean defaultValues) throws DataException;
+
+    /**
+     * Creates a new feature of default {@link FeatureType}. The flag
+     * defaultValues is used to indicate whether the new feature should be
+     * initialized with default values or not.
+     *
+     * @param defaultValues
+     *            if true the new feature is initialized with each attribute's
+     *            default value.
+     *
+     * @return
+     *         the new feature
+     *
+     * @throws DataException
+     */
+    public EditableFeature createNewFeature(boolean defaultValues)
+        throws DataException;
+
+    /**
+     * Applies the validation rules associated to the given mode to the active
+     * {@link FeatureSet}.
+     *
+     * @param mode
+     *            can be one of {MODE_QUERY, MODE_FULLEDIT, MODE_APPEND}
+     *
+     * @throws DataException
+     */
+    public void validateFeatures(int mode) throws DataException;
+
+    /**
+     * Indicates whether this store supports append mode.
+     *
+     * @return
+     *         true if this store supports append mode.
+     */
+    public boolean isAppendModeSupported();
+
+    /**
+     * Initiates an editing group. This is typically used to group series of
+     * store editing operations.
+     *
+     * @param description
+     *            Description of the editing group.
+     *
+     * @throws NeedEditingModeException
+     */
+    public void beginEditingGroup(String description)
+        throws NeedEditingModeException;
+
+    /**
+     * Finishes an editing group.
+     *
+     * @throws NeedEditingModeException
+     */
+    public void endEditingGroup() throws NeedEditingModeException;
+
+    /*
+     * =============================================================
+     *
+     * Index related services
+     */
+
+    /**
+     * Creates an index which will be applied to the features of the given type,
+     * by using the data of the given attribute.
+     *
+     * @param featureType
+     *            The FeatureType to which the indexed attribute belongs.
+     *
+     * @param attributeName
+     *            The name of the attributed to be indexed
+     *
+     * @param indexName
+     *            The index name
+     *
+     * @return the resulting {@link FeatureIndex}
+     *
+     *
+     * @throws FeatureIndexException
+     *             if there is an error creating the index
+     */
+    public FeatureIndex createIndex(FeatureType featureType,
+        String attributeName, String indexName) throws DataException;
+
+    /**
+     * Creates an index which will be applied to the features of the given type,
+     * by using the data of the given attribute.
+     *
+     * @param indexTypeName
+     *            the type of the index to be created. That name is
+     *            related to one of the registered index providers
+     * @param featureType
+     *            The FeatureType to which the indexed attribute belongs.
+     *
+     * @param attributeName
+     *            The name of the attributed to be indexed
+     *
+     * @param indexName
+     *            The index name
+     *
+     * @return the resulting {@link FeatureIndex}
+     *
+     *
+     * @throws FeatureIndexException
+     *             if there is an error creating the index
+     */
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName)
+        throws DataException;
+
+    /**
+     * Creates an index which will be applied to the features of the given type,
+     * by using the data of the given attribute. This method will return without
+     * waiting for the index to be filled, as that will be performed in
+     * background. An optional {@link Observer} parameter is provided to be
+     * notified ( {@link FeatureStoreNotification#INDEX_FILLING_SUCCESS} )
+     * when the index has finished filling with data and is available to be
+     * used.
+     *
+     * @param featureType
+     *            The FeatureType to which the indexed attribute belongs.
+     *
+     * @param attributeName
+     *            The name of the attributed to be indexed
+     *
+     * @param indexName
+     *            The index name
+     *
+     * @param observer
+     *            to notify to when the created index has finished filling
+     *            with data and is available to be used. The observer will
+     *            receive then a
+     *            {@link FeatureStoreNotification#INDEX_FILLING_SUCCESS}
+     *            notification, with the index object if it has finished
+     *            successfully, or a
+     *            {@link FeatureStoreNotification#INDEX_FILLING_ERROR}
+     *            notification with the exception object if there has been
+     *            any error in the process. Optional.
+     *
+     * @return the resulting {@link FeatureIndex}
+     *
+     * @see FeatureStoreNotification#INDEX_FILLING_STARTED
+     * @see FeatureStoreNotification#INDEX_FILLING_SUCCESS
+     * @see FeatureStoreNotification#INDEX_FILLING_CANCELLED
+     * @see FeatureStoreNotification#INDEX_FILLING_ERROR
+     *
+     * @throws FeatureIndexException
+     *             if there is an error creating the index
+     */
+    public FeatureIndex createIndex(FeatureType featureType,
+        String attributeName, String indexName, Observer observer)
+        throws DataException;
+
+    /**
+     * Creates an index which will be applied to the features of the given type,
+     * by using the data of the given attribute. This method will return without
+     * waiting for the index to be filled, as that will be performed in
+     * background. An optional {@link Observer} parameter is provided to be
+     * notified ( {@link FeatureStoreNotification#INDEX_FILLING_SUCCESS} )
+     * when the index has finished filling with data and is available to be
+     * used.
+     *
+     * @param indexTypeName
+     *            the type of the index to be created. That name is
+     *            related to one of the registered index providers
+     * @param featureType
+     *            The FeatureType to which the indexed attribute belongs.
+     *
+     * @param attributeName
+     *            The name of the attributed to be indexed
+     *
+     * @param indexName
+     *            The index name
+     *
+     * @param observer
+     *            to notify to when the created index has finished filling
+     *            with data and is available to be used. The observer will
+     *            receive then a
+     *            {@link FeatureStoreNotification#INDEX_FILLING_SUCCESS}
+     *            notification, with the index object if it has finished
+     *            successfully, or a
+     *            {@link FeatureStoreNotification#INDEX_FILLING_ERROR}
+     *            notification with the exception object if there has been
+     *            any error in the process. Optional.
+     *
+     * @return the resulting {@link FeatureIndex}
+     *
+     * @see FeatureStoreNotification#INDEX_FILLING_STARTED
+     * @see FeatureStoreNotification#INDEX_FILLING_SUCCESS
+     * @see FeatureStoreNotification#INDEX_FILLING_CANCELLED
+     * @see FeatureStoreNotification#INDEX_FILLING_ERROR
+     *
+     * @throws FeatureIndexException
+     *             if there is an error creating the index
+     */
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName,
+        Observer observer) throws DataException;
+
+    /**
+     * Returns a FeatureIndexes structure containing all available indexes in
+     * the store.
+     *
+     * @return
+     */
+    public FeatureIndexes getIndexes();
+
+    /*
+     * =============================================================
+     *
+     * Selection related services
+     */
+
+    /**
+     * Sets the selection to the passed {@link FeatureSet}
+     *
+     * @param selection
+     *            A {@link FeatureSet} with the requested selection
+     */
+    public void setSelection(FeatureSet selection) throws DataException;
+
+    /**
+     * Creates a {@link FeatureSelection}
+     *
+     * @return
+     *         a {@link FeatureSelection}
+     *
+     * @throws DataException
+     */
+    public FeatureSelection createFeatureSelection() throws DataException;
+
+    /**
+     * Returns the current {@link FeatureSelection}.
+     * Create a empty selection if not exits.
+     *
+     * @return
+     *         current {@link FeatureSelection}.
+     *
+     * @throws DataException
+     */
+    public FeatureSelection getFeatureSelection() throws DataException;
+
+    /*
+     * =============================================================
+     *
+     * Lock related services
+     */
+
+    /**
+     * Indicates whether this store supports locks.
+     *
+     * @return
+     *         true if this store supports locks, false if not.
+     */
+    public boolean isLocksSupported();
+
+    /**
+     * Returns the set of locked features
+     *
+     * @return
+     *         set of locked features
+     *
+     * @throws DataException
+     */
+    public FeatureLocks getLocks() throws DataException;
+
+    /*
+     * =============================================================
+     * Transforms related services
+     * =============================================================
+     */
+
+    /**
+     * Returns this store transforms
+     *
+     * @return
+     *         this store transforms
+     */
+    public FeatureStoreTransforms getTransforms();
+
+    /**
+     * Returns a new {@link FeatureQuery} associated to this store.
+     *
+     * @return
+     *         a new {@link FeatureQuery} associated to this store.
+     */
+    public FeatureQuery createFeatureQuery();
+
+    /**
+     * Returns featue count of this store.
+     *
+     * @return
+     * @throws DataException
+     */
+    public long getFeatureCount() throws DataException;
+
+    /**
+     * Creates a vectorial cache that is used to save and retrieve data.
+     *
+     * @param name
+     *            the cache name.
+     * @param parameters
+     *            parameters to create the stores used to save data.
+     * @throws DataException
+     */
+    public void createCache(String name, DynObject parameters)
+        throws DataException;
+
+    /**
+     * @return the vectorial cache
+     */
+    public FeatureCache getCache();
+
+    /**
+     * Return if the provider knows the real envelope of a layer. If not,
+     * the {@link FeatureStoreProvider#getEnvelope()} method doesn't return
+     * the full envelope.
+     *
+     * @return
+     *         <true> if it knows the real envelope.
+     */
+    public boolean isKnownEnvelope();
+
+    /**
+     * Return if the maximum number of features provided by the
+     * provider are limited.
+     *
+     * @return
+     *         <true> if there is a limit of features.
+     */
+    public boolean hasRetrievedFeaturesLimit();
+
+    /**
+     * If the {@link FeatureStoreProvider#hasRetrievedFeaturesLimit()} returns
+     * true,
+     * it returns the limit of features retrieved from the provider.
+     *
+     * @return
+     *         The limit of the retrieved features.
+     */
+    public int getRetrievedFeaturesLimit();
+
+    /**
+     * Return the associated feature to the dynobject.
+     * If the dynobject isn't associated to a feature of this store, return null.
+     *
+     * @param dynobject
+     * @return
+     */
+    public Feature getFeature(DynObject dynobject);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureAttributeDescriptor.java	(revision 42196)
@@ -0,0 +1,265 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.text.DateFormat;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeIntegrityException;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.evaluator.Evaluator;
+
+/**
+ * This interface represents a FeatureAttributeDescriptor in editable state.
+ * To edit a FeatureAttributeDescriptor you have to obtain its instance of
+ * EditableFeatureAttributeDescriptor and then perform editing operations on it.
+ *
+ * Once you have completed the editing you can save the changes to the original
+ * FeatureAttributeDescriptor. This is the only way to edit a FeatureAttributeDescriptor.
+ */
+public interface EditableFeatureAttributeDescriptor extends
+		FeatureAttributeDescriptor {
+
+	/**
+	 * Checks attribute integrity
+	 */
+	void checkIntegrity() throws AttributeFeatureTypeIntegrityException;
+
+	/**
+	 * Sets the name
+	 * @param
+	 * 		name to set
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setName(String name);
+
+	/**
+	 * Sets the data type
+	 * @param
+	 * 		type one of the constants defined in {@link DataTypes}
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setDataType(int type);
+
+	/**
+	 * Sets the size
+	 * @param size
+	 * 			a size of type int
+	 * @return this
+	 *
+	 */
+	public EditableFeatureAttributeDescriptor setSize(int size);
+
+	/**
+	 * Sets the precision
+	 *
+	 * @param
+	 * 		precision of type int
+	 *
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setPrecision(int precision);
+
+	/**
+	 * Sets the Class to which the related FeatureAttribute can be cast
+	 *
+	 * @param theClass
+	 * 				Class to which the related FeatureAttribute can be cast
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setObjectClass(Class theClass);
+
+	/**
+	 * Sets the number of minimum occurrences
+	 *
+	 * @param minimumOccurrences
+	 *
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setMinimumOccurrences(
+			int minimumOccurrences);
+
+	/**
+	 * Sets the maximum number of occurrences
+	 *
+	 * @param maximumOccurrences
+	 *
+	 * @return
+	 */
+	public EditableFeatureAttributeDescriptor setMaximumOccurrences(
+			int maximumOccurrences);
+
+	/**
+	 * Sets whether the related FeatureAttribute is part of the FeatureType's primary key
+	 *
+	 * @param isPrimaryKey
+	 * 				true if is part of the primary key
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setIsPrimaryKey(
+			boolean isPrimaryKey);
+
+	/**
+	 * Sets the expression evaluator that the FeatureAttribute will use
+	 * @param evaluator
+	 * 				an implementation of DAL's Evaluator interface
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setEvaluator(Evaluator evaluator);
+
+     	/**
+	 * Sets the {@link FeatureAttributeEmulator} that is used to update the 
+	 * presentation of a field.
+	 * @param featureAttributeEmulator
+	 *             the {@link FeatureAttributeEmulator} to set.
+	 */
+	public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(FeatureAttributeEmulator featureAttributeEmulator);
+
+	/**
+	 * Sets whether the related FeatureAttribute is read only
+	 *
+	 * @param isReadOnly
+	 *
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setIsReadOnly(boolean isReadOnly);
+
+	/**
+	 * Sets whether the related FeatureAttribute can have a null value
+	 *
+	 * @param allowNull
+	 * 				a boolean value determining whether the FeatureAttribute can be null
+	 *
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setAllowNull(boolean allowNull);
+
+	/**
+	 * Sets the SRS.
+	 *
+	 * @param SRS
+	 *
+	 * @return
+	 */
+	public EditableFeatureAttributeDescriptor setSRS(IProjection SRS);
+
+	    /**
+     * Sets the geometry type
+     * 
+     * @param geometryType
+     * 
+     * @return this
+     * @deprecated use {@link #setGeometryType(GeometryType)} instead
+     */
+	public EditableFeatureAttributeDescriptor setGeometryType(int geometryType);
+
+
+	    /**
+     * Sets the geometry subtype
+     * 
+     * @param geometrySubType
+     * 
+     * @return this
+     * @deprecated use {@link #setGeometryType(GeometryType)} instead
+     */
+	public EditableFeatureAttributeDescriptor setGeometrySubType(
+			int geometrySubType);
+
+    /**
+     * Sets the geometry type
+     * 
+     * @param geometryType
+     * 
+     * @return this
+     */
+    public EditableFeatureAttributeDescriptor setGeometryType(
+        GeometryType geometryType);
+
+    /**
+     * Sets the default value
+     * 
+     * @param defaultValue
+     * 
+     * @return this
+     */
+	public EditableFeatureAttributeDescriptor setDefaultValue(
+			Object defaultValue);
+ 
+	/**
+	 * Sets additional information of the attribute
+	 * @return TODO
+	 *
+	 *
+	 */
+	public EditableFeatureAttributeDescriptor setAdditionalInfo(String infoName, Object value);
+
+	/**
+	 * Sets whether the related FeatureAttribute is part of the FeatureType's
+	 * primary key
+	 *
+	 * @param isPrimaryKey
+	 *            true if is part of the primary key
+	 * @return this
+	 */
+	public EditableFeatureAttributeDescriptor setIsAutomatic(
+			boolean isAutomatic);
+
+	/**
+	 * Sets is the attribute is a temporal attribute.
+     *
+ 	 * @param isTime
+ 	 *        <code>true</code> if the attribute is temporal
+	 * @return
+	 *         this
+	 */
+	public EditableFeatureAttributeDescriptor setIsTime(boolean isTime);
+	
+        /**
+         * Sets if this attribute is indexed in the table.
+         * @param isIndexed
+         * @return  this
+         */
+        public EditableFeatureAttributeDescriptor setIsIndexed(boolean isIndexed);
+        
+        public EditableFeatureAttributeDescriptor setAllowIndexDuplicateds(boolean allowDuplicateds);
+        
+        public EditableFeatureAttributeDescriptor setIsIndexAscending(boolean ascending);
+        
+	/**
+	 * Returns the attribute descriptor's name before
+	 * it was changed or null if never changed 
+	 * @return
+	 */
+        public String getOriginalName();
+    
+       /**
+	 * If this attribute is of type Date, then this method set
+	 * the date format set by the data store.
+	 *
+	 * @return
+	 */
+	public EditableFeatureAttributeDescriptor  setDateFormat(DateFormat dateFormat);
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureAttributeDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReference.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReference.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReference.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * A FeatureReference is a lightweight unique identifier for a
+ * {@link Feature}. It is used to keep references on features
+ * without maintaining the whole feature in memory, thus improving
+ * memory needs.
+ * 
+ */
+public interface FeatureReference {
+
+	/**
+	 * Returns the referenced {@link Feature}
+	 * 
+	 * @return the {@link Feature} identified by this {@link FeatureReference}
+	 * 
+	 * @throws DataException
+	 */
+	public Feature getFeature() throws DataException;
+
+	/**
+	 * Returns the referenced {@link Feature}
+	 * 
+	 * @param featureType
+	 *            The {@link FeatureType} to which the referenced
+	 *            {@link Feature} belongs.
+	 * 
+	 * @return the {@link Feature} identified by this {@link FeatureReference}
+	 * 
+	 * @throws DataException
+	 */
+	public Feature getFeature(FeatureType featureType) throws DataException;
+        
+        
+	/**
+	 * Inform that represented feature is not stored in the original data store
+	 *
+	 * @return true if not in the original store
+	 */
+	public boolean isNewFeature();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReference.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQueryOrder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQueryOrder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQueryOrder.java	(revision 42196)
@@ -0,0 +1,244 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class FeatureQueryOrder implements Persistent, Cloneable {
+
+	private List members = new ArrayList();
+
+	public class FeatureQueryOrderMember implements Persistent, Cloneable {
+		String attributeName = null;
+		Evaluator evaluator = null;
+		boolean ascending;
+
+		FeatureQueryOrderMember(String attributeName, boolean ascending) {
+			this.attributeName = attributeName;
+			this.ascending = ascending;
+		}
+		FeatureQueryOrderMember(Evaluator evaluator, boolean ascending) {
+			this.evaluator = evaluator;
+            this.ascending = ascending;
+		}
+		public boolean hasEvaluator() {
+			return this.evaluator != null;
+		}
+		public Evaluator getEvaluator() {
+			return this.evaluator;
+		}
+		public boolean getAscending() {
+			return this.ascending;
+		}
+		public String getAttributeName() {
+			return this.attributeName;
+		}
+		public void loadFromState(PersistentState state)
+				throws PersistenceException {
+			this.attributeName = state.getString("attributeName");
+			this.ascending = state.getBoolean("ascending");
+			this.evaluator = (Evaluator) state.get("evaluator");
+		}
+
+		public void saveToState(PersistentState state)
+				throws PersistenceException {
+			state.set("attributeName", this.attributeName);
+			state.set("ascending", this.ascending);
+			if (this.evaluator != null) {
+				state.set("evaluator", evaluator);
+			}
+
+		}
+
+		public Object clone() throws CloneNotSupportedException {
+			// Nothing more to clone
+			return super.clone();
+		}
+	}
+
+	public Object add(String attributeName, boolean ascending) {
+        FeatureQueryOrderMember member = new FeatureQueryOrderMember(
+                attributeName, ascending);
+		if( members.add(member) ) {
+			return member;
+		}
+		return null;
+	}
+
+	public Object add(Evaluator evaluator, boolean ascending) {
+		FeatureQueryOrderMember member = new FeatureQueryOrderMember(
+				evaluator,
+				ascending);
+		if (members.add(member)) {
+			return member;
+		}
+		return null;
+	}
+
+	public Iterator iterator() {
+		return members.iterator();
+	}
+
+	public boolean remove(FeatureQueryOrderMember member) {
+		return members.remove(member);
+	}
+
+	public void remove(int index) {
+		members.remove(index);
+	}
+
+	public void clear() {
+		members.clear();
+	}
+
+	public int size() {
+		return this.members.size();
+	}
+
+	public Comparator getFeatureComparator() {
+		return new DefaultFeatureComparator(this);
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		FeatureQueryOrder clone = (FeatureQueryOrder) super.clone();
+
+		if (members != null) {
+			clone.members = new ArrayList(members.size());
+			for (int i = 0; i < members.size(); i++) {
+				clone.members.add(((Cloneable) members.get(i)).clone());
+			}
+		}
+
+		return clone;
+	}
+
+	public FeatureQueryOrder getCopy() {
+		FeatureQueryOrder aCopy = new FeatureQueryOrder();
+		Iterator iter = this.members.iterator();
+		FeatureQueryOrderMember member;
+		while (iter.hasNext()) {
+			member = (FeatureQueryOrderMember) iter.next();
+			if (member.hasEvaluator()) {
+				aCopy.add(member.getEvaluator(), member.getAscending());
+			} else {
+				aCopy.add(member.getAttributeName(), member.getAscending());
+			}
+		}
+		return aCopy;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		this.members = (List) state.get("menbers");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("menbers", members);
+	}
+	
+	private class DefaultFeatureComparator implements Comparator {
+
+		private FeatureQueryOrder order;
+
+
+		public DefaultFeatureComparator(FeatureQueryOrder order) {
+			this.order = order;
+			// TODO optimizar en un array???
+
+		}
+
+
+		private int myCompare(Object arg0, Object arg1) {
+			if (arg0 == null){
+				if (arg1 == null){
+					return 0;
+				} else{
+					return 1;
+				}
+			} else if (arg1 == null){
+				if (arg0 == null) {
+					return 0;
+				} else {
+					return 1;
+				}
+			}
+			if (arg0 instanceof Comparable) {
+				return ((Comparable) arg0).compareTo(arg1);
+			} else if (arg1 instanceof Comparable) {
+				return ((Comparable) arg1).compareTo(arg0) * -1;
+			}
+
+			if (arg0.equals(arg1)){
+				return 0;
+			} else{
+				return -1;
+			}
+
+		}
+
+		public int compare(Object arg0, Object arg1) {
+			Iterator iter = this.order.iterator();
+			int returnValue = 0;
+			Feature f0 = (Feature) arg0;
+			Feature f1 = (Feature) arg1;
+			Object item;
+			String attrName;
+			Evaluator evaluator;
+			while (returnValue == 0 && iter.hasNext()) {
+				item = iter.next();
+				if (item instanceof String) {
+					attrName = (String) item;
+					returnValue = this
+							.myCompare(f0.get(attrName), f1
+							.get(attrName));
+				} else {
+					evaluator = (Evaluator) item;
+					try {
+						returnValue = this.myCompare(evaluator
+								.evaluate((EvaluatorData) f0), evaluator
+								.evaluate((EvaluatorData) f1));
+					} catch (EvaluatorException e) {
+						throw new DataEvaluatorRuntimeException(e);
+					}
+				}
+			}
+
+			return returnValue;
+		}
+
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQueryOrder.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeDescriptor.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.text.DateFormat;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.evaluator.Evaluator;
+
+/**
+ * A feature attribute descriptor contains information about
+ * one of the attributes in a feature, such as its name, data type
+ * or precision.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface FeatureAttributeDescriptor extends DynField {
+
+	/**
+	 * Returns a clone of this attribute descriptor
+	 *
+	 * @return FeatureAttributeDescriptor
+	 * 						A new copy of this
+	 */
+	public FeatureAttributeDescriptor getCopy();
+
+	/**
+	 * Returns the name of this attribute's data type.
+	 *
+	 * @return
+	 * 		a string containing the name of this attribute's data type.
+	 */
+	public String getDataTypeName();
+
+	/**
+	 * Returns a number that indicates the size of this attribute. See the
+	 * documentation for the various constants of {@link DataTypes}
+	 * for how to interpret this value. As an example, when the data type is
+	 * {@link DataTypes#STRING}, this value indicates the maximum length of the string.
+	 *
+	 * @return
+	 * 		an <code>int</code> indicating the size of the attribute.
+	 */
+	public int getSize();
+
+	/**
+	 * For attributes of type {@link DataTypes#DOUBLE} and {@link DataTypes#FLOAT}
+	 * , this returns the maximum number of places after the decimal point. For
+	 * other types, this must always return zero.
+	 */
+	public int getPrecision();
+
+	/**
+	 * For attributes of type {@link DataTypes#OBJECT},
+	 * this returns the Java {@link Class} object that class or interface that
+	 * all values of this attribute can be cast to.
+	 */
+	public Class getObjectClass();
+
+	/**
+	 * Returns the minimum number of occurrences of this attribute on a given
+	 * feature.  The vast majority of data sources and data consumers will only
+	 * function with this value being zero or one.  If the minimum number of
+	 * occurrences is zero, this is equivalent, in SQL terms, to the attribute
+	 * being nillable.
+	 */
+	public int getMinimumOccurrences();
+
+	/**
+	 * Returns the maximum number of occurrences of this attribute on a given
+	 * feature.  The vast majority of data sources and data consumers will only
+	 * function with this value being one.  A value of {@link Integer#MAX_VALUE}
+	 * indicates that the maximum number of occurrences is unbounded.
+	 */
+	public int getMaximumOccurrences();
+
+	/**
+	 * Returns {@code true} if this attribute forms all or part of the unique identifying
+	 * value for the feature it is contained by.  The primary key attributes uniquely
+	 * identify this feature from other features of the same type.  This is different
+	 * from the {@linkplain Feature#getReference()}, which must uniquely identify
+	 * the {@link Feature} among all feature types.
+	 */
+	public boolean isPrimaryKey();
+
+	/**
+	 * Indicates whether this attribute accepts null values.
+	 *
+	 * @return
+	 * 		true if this attribute can be null, false if not.
+	 */
+	public boolean allowNull();
+
+	/**
+	 * Returns an evaluator that will be used to calculate
+	 * the value of this attribute
+	 */
+	public Evaluator getEvaluator();
+
+	/**
+	 * If this attribute is a {@link Geometry}, this method returns its
+	 * Spatial Reference System.
+	 *
+	 * @return
+	 * 		the SRS if this attribute is a {@link Geometry}, otherwise this method returns null.
+	 */
+	public IProjection getSRS();
+
+	    /**
+     * If this attribute is a {@link Geometry}, this method returns the specific
+     * geometry type,
+     * as defined in {@link Geometry.TYPES}.
+     * 
+     * @return
+     *         One of {@link Geometry.TYPES}
+     * @deprecated use {@link #getGeomType()} instead. To be removed in gvSIG
+     *             2.1.
+     */
+	public int getGeometryType();
+
+	    /**
+     * If this attribute is a {@link Geometry}, this method returns the specific
+     * geometry subtype,
+     * as defined in {@link Geometry.SUBTYPES}.
+     * 
+     * @return
+     *         One of {@link Geometry.SUBTYPES}
+     * @deprecated use {@link #getGeomType()} instead. To be removed in gvSIG
+     *             2.1.
+     */
+	public int getGeometrySubType();
+
+    /**
+     * Returns the {@link GeometryType} of the attribute if it is a geometry.
+     * 
+     * @return the geometry type
+     */
+    public GeometryType getGeomType();
+
+	/**
+	 * If this attribute is of type Date, then this method returns
+	 * the date format set by the data store.
+	 *
+	 * @return
+	 * 		a date format
+	 */
+	public DateFormat getDateFormat();
+
+	/**
+	 * Returns this attribute relative position within the {@link Feature}.
+	 *
+	 * @return
+	 * 		an index
+	 */
+	public int getIndex();
+
+	/**
+	 * Returns additional information of the attribute
+	 *
+	 * @return info
+	 *
+	 */
+	public Object getAdditionalInfo(String infoName);
+
+	/**
+	 * Returns if value is created automatically by the source
+	 */
+	public boolean isAutomatic();
+
+	/**
+	 * Gets if the attribute is a temporal attribute.
+	 * @return
+	 *         <code>true</code> if is a temporal attribute
+	 */
+	public boolean isTime();  
+
+        /**
+         * Return true if the attribute has and index in the table.
+         * 
+         * @return true if indexed.
+         */
+        public boolean isIndexed();
+        public boolean allowIndexDuplicateds();
+        public boolean isIndexAscending();
+        
+	/**
+	 * Gets if the attribute has a {@link FeatureAttributeGetter}.
+	 * @return
+	 *             a FeatureAttributeGetter or null.
+         * @deprecated use getFeatureAttributeGetterAndSetter
+	 */
+	public FeatureAttributeGetter getFeatureAttributeGetter();
+	
+	/**
+	 * Sets the {@link FeatureAttributeGetter} that is used to update the 
+	 * presentation of a field.
+	 * @param featureAttributeGetter
+	 *             the {@link FeatureAttributeGetter} to set.
+         * @deprecated use setFeatureAttributeGetterAndSetter
+	 */
+	public void setFeatureAttributeGetter(FeatureAttributeGetter featureAttributeGetter);
+
+     	/**
+	 * Gets the attribute emulator associatted {@link FeatureAttributeEmulator} to this attribute.
+	 * @return
+	 *             a FeatureAttributeEmulator or null.
+	 */
+	public FeatureAttributeEmulator getFeatureAttributeEmulator();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureCache.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureCache.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+/**
+ * This class represents a vectorial cache that is used to save and retrieve
+ * {@link FeatureSet}s. First time that a {@link FeatureStore} have to retrieve
+ * data from a {@link FeatureStoreProvider} can save the {@link FeatureSet} in
+ * the cache with its envelope. Next time that the store has to access to a envelope
+ * contained in the previous envelope can retrieve the features directly 
+ * from the cache and it is not necessary to retrieve data from the provider.
+ * 
+ * The cache supports different scales and creates
+ *  
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface FeatureCache {
+
+	/**
+	 * Delete all the features for a concrete scale.
+	 * @param scale
+	 * The scale.
+	 * @throws DataException
+	 */
+	public void delete(double scale) throws DataException;
+	
+	/**
+	 * Delete all the features for all the scales in the cache system.
+	 * @throws DataException
+	 */
+	public void deleteAll() throws DataException;
+	
+	/**
+	 * Add a set of features contained in a envelope for a concrete scale.
+	 * @param featureSet
+	 * The feature set retrieved from the server.
+	 * @throws DataException
+	 */
+	public void addFeatures(FeatureSet featureSet, FeatureStore featureStore) throws DataException;
+	
+	/**
+	 * Return a feature set form a concrete envelope and a scale.
+	 * @param envelope
+	 * The envelope.
+	 * @param scale
+	 * The scale.
+	 * @return
+	 * A feature set contained in the evelope.
+	 * @throws DataException
+	 */
+	public FeatureSet getFeatureSet(Envelope envelope, double scale) throws DataException;
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureCache.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreNotification.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.tools.undo.command.Command;
+
+public interface FeatureStoreNotification extends DataStoreNotification {
+
+
+
+	public static final String BEFORE_UNDO = "before_Undo_DataStore";
+	public static final String BEFORE_REDO = "before_Redo_DataStore";
+
+	public static final String AFTER_UNDO = "after_Undo_DataStore";
+	public static final String AFTER_REDO = "after_Redo_DataStore";
+
+	public static final String BEFORE_REFRESH = "before_refresh";
+	public static final String AFTER_REFRESH = "after_refresh";
+
+	public static final String LOCKS_CHANGE = "after_LockedChange_DataStore";
+
+	public static final String BEFORE_STARTEDITING = "before_StartEditing_DataStore";
+	public static final String AFTER_STARTEDITING = "after_StartEditing_DataStore";
+
+	public static final String BEFORE_CANCELEDITING = "before_CancelEditing_DataStore";
+	public static final String AFTER_CANCELEDITING = "after_CancelEditing_DataStore";
+
+	public static final String BEFORE_FINISHEDITING = "before_FinishEditing_DataStore";
+	public static final String AFTER_FINISHEDITING = "after_FinishEditing_DataStore";
+
+
+	public static final String BEFORE_UPDATE_TYPE = "before_Update_Type";
+	public static final String AFTER_UPDATE_TYPE = "after_Update_Type";
+
+	public static final String BEFORE_UPDATE = "before_Update_Feature";
+	public static final String AFTER_UPDATE = "after_Update_Feature";
+
+	public static final String BEFORE_DELETE = "before_Delete_Feature";
+	public static final String AFTER_DELETE = "after_Delete_Feature";
+
+	public static final String BEFORE_INSERT = "before_Insert_Feature";
+	public static final String AFTER_INSERT = "after_Insert_Feature";
+
+	public static final String LOAD_FINISHED = "Load_Finished";
+	public static final String TRANSFORM_CHANGE = "Transform_Change";
+
+    /**
+     * Notifies about a Feature index filling operation being started. The
+     * notification object will provide the index object.
+     */
+    public static final String INDEX_FILLING_STARTED = "Index_Filling_Started";
+    /**
+     * Notifies about a Feature index finished filling successfully. The
+     * notification object will provide the index object.
+     */
+    public static final String INDEX_FILLING_SUCCESS = "Index_Filling_Success";
+    /**
+     * Notifies about a Feature index filling operation being cancelled. The
+     * notification object will provide the index object.
+     */
+    public static final String INDEX_FILLING_CANCELLED =
+        "Index_Filling_Cancelled";
+    /**
+     * Notifies about a Feature index finished operation error. The notification
+     * will provide the source exception.
+     */
+    public static final String INDEX_FILLING_ERROR = "Index_Filling_Error";
+
+	public Feature getFeature();
+
+	public DataSet getCollectionResult();
+
+	public boolean loadSucefully();
+
+	public Exception getExceptionLoading();
+
+	public Command getCommand();
+
+	public EditableFeatureType getFeatureType();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManager.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.operation;
+
+import java.util.Map;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+
+public interface LegendLabelingManager {
+
+	public void startLoading(Map params);
+
+	public void add(Feature feature, Map params) throws DataException;
+
+	public Object getDefaultLegend();
+
+	public Object getLabeling();
+
+	public void endLoading();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.feature.operation package documentation</title>
+</head>
+<body>
+
+<p>Provides API for feature operations.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManagerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManagerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManagerFactory.java	(revision 42196)
@@ -0,0 +1,29 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.operation;
+
+public interface LegendLabelingManagerFactory {
+
+	public LegendLabelingManager newManager();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/operation/LegendLabelingManagerFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReferenceSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReferenceSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReferenceSelection.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Implement data selection}
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataSelection;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.observer.ComplexObservable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * Interface to manage selection of objects from an undetermined set. Allows to
+ * add and remove values from the selection, as well as reversing the selection.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public interface FeatureReferenceSelection extends DataSelection, Observer,
+		WeakReferencingObservable, ComplexObservable, Persistent {
+
+    /**
+     * Adds a feature to the selection.
+     *
+     * @param reference
+     *            the selected feature reference
+     * @return true if the feature was not selected before selecting it
+     */
+    boolean select(FeatureReference reference);
+
+    /**
+     * Removes a feature from the selection.
+     *
+     * @param reference
+     *            the deselected feature reference
+     * @return true if the feature was selected before deselecting it
+     */
+    boolean deselect(FeatureReference reference);
+
+    /**
+     * Selects all values.
+     * 
+     * @throws DataException
+     *             if there is an error selecting all values
+     */
+    void selectAll() throws DataException;
+
+    /**
+     * Deselects all values.
+     * 
+     * @throws DataException
+     *             if there is an error deselecting all values
+     */
+    void deselectAll() throws DataException;
+
+    /**
+     * Returns if a feature is selected.
+     *
+     * @param reference
+     *            to check
+     * @return if it is selected
+     */
+    boolean isSelected(FeatureReference reference);
+
+    /**
+     * Reverses the selection. Currently selected objects will become the not
+     * selected ones, so any other object will be a selected one.
+     */
+    void reverse();
+
+    /**
+     * Returns the number of selected values.
+     *
+     * @return the number of selected values
+     */
+    long getSelectedCount();
+
+    /**
+     * Returns an unmodifiable Iterator of selected feature references.
+     *
+     * @return the iterator of selected feature references
+     */
+    Iterator referenceIterator();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReferenceSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQuery.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQuery.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQuery.java	(revision 42196)
@@ -0,0 +1,270 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create Parameter object to define FeatureCollections queries}
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.lang.Cloneable;
+
+/**
+ * Defines the properties of a collection of Features, as a result of a query
+ * through a FeatureStore.
+ * <p>
+ * A FeatureQuery is always defined by a FeatureType, or by the list of
+ * attribute names of the FeatureStore to return.
+ * </p>
+ * <p>
+ * The filter allows to select Features whose properties have values with the
+ * characteristics defined by the filter.
+ * </p>
+ * <p>
+ * The order is used to set the order of the result FeatureCollection, based on
+ * the values of the properties of the Features.
+ * </p>
+ * <p>
+ * The scale parameter can be used by the FeatureStore as a hint about the
+ * quality or resolution of the data needed to view or operate with the data
+ * returned. As an example, the FeatureStore may use the scale to return only a
+ * representative subset of the data, or maybe to return Features with less
+ * detail, like a point or a line instead of a polygon.
+ * </p>
+ * <p>
+ * If an implementation of FeatureStore is able to get other parameters to
+ * customize the behavior of the getDataCollection methods, there is an option
+ * to set more parameters through the setAttribute method.
+ * </p>
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public interface FeatureQuery extends DataQuery, Cloneable {
+
+	/**
+	 * Returns the names of the attributes to load from each {@link Feature}.
+	 * 
+	 * @return the attribute names to load
+	 */
+	String[] getAttributeNames();
+
+	/**
+	 * Sets the names of the attributes to load from each {@link Feature}.
+	 * 
+	 * @param attributeNames
+	 *            the attribute names to load
+	 */
+	void setAttributeNames(String[] attributeNames);
+	
+	/**
+	 * Adds the name of an attribute that has to be used to load each
+	 * {@link Feature}.
+	 * 
+	 * @param attributeName
+	 *             the attribute name to load
+	 */
+	void addAttributeName(String attributeName);
+
+        /**
+         * Return true if has set attribute names
+         * 
+         * @return true if has attribute names, otherwise false
+         */
+        boolean hasAttributeNames();
+        
+        /**
+         * Remove all the attribute names specifieds.
+         */
+        void clearAttributeNames();
+
+        /**
+	 * Returns the names of the attributes that are constants in each {@link Feature}.
+	 * These attributes will not be charged.
+         * 
+	 * @return the attribute names that are constant
+	 */
+	String[] getConstantsAttributeNames();
+
+	/**
+	 * Set of attribute names to be treated as constants for each {@link Feature}.
+	 * 
+	 * @param attributeNames
+	 *            the attribute names to be constants
+	 */
+	void setConstantsAttributeNames(String[] attributeNames);
+	
+	/**
+	 * Add an attribute name that will be treated as constant for each 
+	 * {@link Feature}.
+	 * 
+	 * @param attributeName
+	 *             the attribute name to be treated as constant
+	 */
+	void addConstantAttributeName(String attributeName);
+
+        /**
+         * Return true if has set constants attribute names
+         * 
+         * @return true if has constants attribute names, otherwise false
+         */
+        boolean hasConstantsAttributeNames();
+        
+        /**
+         * Remove all the names specified as constants attributes.
+         */
+        void clearConstantsAttributeNames();
+        
+	/**
+	 * Sets the {@link FeatureType} of the {@link Feature}s to load. It may be
+	 * used as an alternative way to set a subset of the list of attribute names
+	 * to load, by creating a sub-FeatureType.
+	 * 
+	 * @param featureType
+	 *            the feature type of the data to load
+	 */
+	void setFeatureType(FeatureType featureType);
+
+	/**
+	 * Returns the {@link FeatureType} id of the {@link Feature}s to load.
+	 * 
+	 * @return the {@link FeatureType} id of the {@link Feature}s to load
+	 */
+	String getFeatureTypeId();
+
+	/**
+	 * Sets the {@link FeatureType} id of the {@link Feature}s to load. This way
+	 * all {@link Feature} attributes will be loaded.
+	 * 
+	 * @param featureTypeId
+	 *            the {@link FeatureType} id of the {@link Feature}s to load
+	 */
+	void setFeatureTypeId(String featureTypeId);
+
+	/**
+	 * Returns the filter to apply to the {@link Feature}s to load.
+	 * 
+	 * @return the filter
+	 */
+	Evaluator getFilter();
+
+	/**
+	 * Sets the filter to apply to the {@link Feature}s to load.
+	 * 
+	 * @param filter
+	 *            the filter to apply to the {@link Feature}s to load
+	 */
+	void setFilter(Evaluator filter);
+	
+	/**
+	 * Adds a filter to apply to the {@link Feature}s to load. A query
+	 * can have more that one filter and all of them are applied when
+	 * the query is applied.
+	 * 
+	 * @param filter
+	 *             a filter to apply to the {@link Feature}s to load
+	 */
+	void addFilter(Evaluator filter);
+
+	/**
+	 * Returns if a filter has been defined for the query.
+	 * 
+	 * @return if a filter has been defined for the query
+	 */
+	boolean hasFilter();
+
+	/**
+	 * Returns the order of the {@link Feature}s to load.
+	 * 
+	 * @return the order of the {@link Feature}s to load
+	 */
+	FeatureQueryOrder getOrder();
+
+	/**
+	 * Sets the order of the {@link Feature}s to load.
+	 * 
+	 * @param order
+	 *            the order of the {@link Feature}s to load
+	 */
+	void setOrder(FeatureQueryOrder order);
+
+	/**
+	 * Returns if an order has been set for the elements returned by the query.
+	 * 
+	 * @return if an order has been set for the elements returned by the query
+	 */
+	boolean hasOrder();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see #clone()
+	 */
+	FeatureQuery getCopy();
+
+	/**
+	 * Returns the maximum number of elements to return with this query.
+	 * <p>
+	 * <strong>NOTE:</strong> this value may be ignored by the underlying data
+	 * source, or only used as a hint, so don't rely on it being used, as you
+	 * may actually get more values than the limit.
+	 * </p>
+	 * 
+	 * @return the maximum number of elements to return with this query
+	 */
+	long getLimit();
+
+	/**
+	 * Sets the maximum number of elements to return with this query.
+	 * <p>
+	 * <strong>NOTE:</strong> this value may be ignored by the underlying data
+	 * source, or only used as a hint, so don't rely on it being used, as you
+	 * may actually get more values than the limit.
+	 * </p>
+	 * 
+	 * @param limit
+	 *            the maximum number of elements to return with this query
+	 */
+	void setLimit(long limit);
+
+	/**
+	 * Returns the load page size, as the number of elements to be retrieved in
+	 * block by the data source. This value is only used as a hint to the
+	 * underlying data source, as a way to tell how many Features may be read in
+	 * a block.
+	 * 
+	 * @return the load page size
+	 */
+	long getPageSize();
+
+	/**
+	 * Sets the load page size, as the number of elements to be retrieved in
+	 * block by the data source. This value is only used as a hint to the
+	 * underlying data source, as a way to tell how many Features may be read in
+	 * a block.
+	 * 
+	 * @param pageSize
+	 *            the load page size
+	 */
+	void setPageSize(long pageSize);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureQuery.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRule.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRule.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRule.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * Represents a Feature validation rule. These rules are used to 
+ * check Feature state integrity in editing mode.
+ * 
+ * Desde una rule que se ejecuta en el UPDATE podemos ejecutar un
+ * update de esta feature en el store. Pero si la rule se ejecuta
+ * en el FINISH_EDITING no es posible hacer update de ninguna feature
+ * del store.
+ *
+ */
+public interface FeatureRule {
+	
+	/**
+	 * Returns the rule name
+	 * 
+	 * @return
+	 * 		the rule name
+	 */
+	public String getName();
+	
+	/**
+	 * Returns the rule description
+	 * 
+	 * @return
+	 * 		the rule description
+	 */
+	public String getDescription();
+	
+	/**
+	 * This is the method that applies this rule to the {@link Feature}, given also its associated {@link FeatureStore}.
+	 * @param feature
+	 * 			Feature to which apply the rule
+	 * @param featureStore
+	 * 			FeatureStore to which the Feature belongs
+	 * @throws DataException
+	 * 			if an error occurs during validation
+	 */
+	public void validate(Feature feature, FeatureStore featureStore)
+			throws DataException;
+	
+	/**
+	 * Indicates whether this rule should be checked at update.
+	 * 
+         * Only in this rules can be updated the feature in the store.
+         * 
+	 * @return
+	 * 		true if this rule should be checked at update, otherwise false.
+	 */
+	public boolean checkAtUpdate();
+	
+	/**
+	 * Returns true if this rule should be applied just when editing is being finished.
+	 *
+         * In this rules, can't be updated any feature in the store.
+         * 
+	 * @return	
+	 * 		true if this rule should be applied when editing is being finished, otherwise false.
+	 */
+	public boolean checkAtFinishEditing();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRule.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.feature.paging package documentation</title>
+</head>
+<body>
+
+<p>Utilities to perform paged loading of Features from a FeatureSet</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/FeaturePagingHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/FeaturePagingHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/FeaturePagingHelper.java	(revision 42196)
@@ -0,0 +1,154 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Add pagination to a FeatureCollection}
+ */
+package org.gvsig.fmap.dal.feature.paging;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dynobject.DynObjectPagingHelper;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Helper interface to access the values of a FeatureCollection by position.
+ * 
+ * @author gvSIG team
+ */
+public interface FeaturePagingHelper extends DynObjectPagingHelper {
+
+    /**
+     * Returns the Feature located at the index position.
+     * 
+     * @param index
+     *            to locate the Feature in the Collection
+     * @return the Feature located at the index position
+     * @throws BaseException
+     *             if there is an error getting the Feature
+     */
+    Feature getFeatureAt(long index) throws BaseException;
+
+    /**
+     * Returns all the values of the current loaded page.
+     *
+     * @return all the values of the current loaded page
+     */
+    Feature[] getCurrentPageFeatures();
+
+    /**
+     * Returns the FeatureStore used to fetch the data.
+     *
+     * @return the FeatureStore
+     */
+    FeatureStore getFeatureStore();
+
+    /**
+     * Returns the query used to load the Features.
+     *
+     * @return the query used to load the Features
+     */
+    FeatureQuery getFeatureQuery();
+
+	/**
+	 * Returns the FeatureType used of the data.
+	 *
+	 * @return the FeatureType of the data
+	 */
+	FeatureType getFeatureType();
+
+    /**
+     * Updates a {@link Feature} with the given {@link EditableFeature} in the
+     * current {@link FeatureSet}. <br>
+     * 
+     * @param feature
+     *            an instance of {@link EditableFeature} with which to update
+     *            the associated {@link Feature}.
+     * 
+     * @throws BaseException
+     * 
+     * @see {@link FeatureSet#update(EditableFeature)}
+     *      {@link FeaturePagingHelper#getFeatureSet()}
+     */
+	void update(EditableFeature feature) throws BaseException;
+
+    /**
+     * Deletes a {@link Feature} from current {@link FeatureSet}.<br>
+     * 
+     * @param feature
+     *            the {@link Feature} to delete.
+     * 
+     * @throws BaseException
+     * 
+     * @see {@link FeatureSet#delete(Feature)}
+     *      {@link FeaturePagingHelper#getFeatureSet()}
+     */
+	void delete(Feature feature) throws BaseException;
+
+    /**
+     * Inserts a new feature in this {@link FeatureSet}. It needs to be an
+     * instance of {@link EditableFeature} as it has not been stored yet.<br>
+     * 
+     * Any {@link Iterator} from this store that was still in use can will not
+     * reflect this change.
+     * 
+     * @param feature
+     *            the {@link EditableFeature} to insert.
+     * 
+     * @throws BaseException
+     * 
+     * @see {@link FeatureSet#insert(EditableFeature)}
+     *      {@link FeaturePagingHelper#getFeatureSet()}
+     */
+	void insert(EditableFeature feature) throws BaseException;
+
+	/**
+	 * Sets that the selected Features get returned first.
+	 */
+	void setSelectionUp(boolean selectionUp);
+
+        boolean isSelectionUp();
+        
+     /**
+      * Return a List of Fearures with the contents of this PagingHelper
+      * 
+      * @return List of Features
+      */
+     List asList();
+    
+     /**
+      * Return a List of DynObjects with the contents of this PagingHelper
+      * 
+      * @return List of DynObjects
+      */
+     List asListOfDynObjects();
+    
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/FeaturePagingHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocks.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocks.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocks.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * Manages locks of Features.
+ *
+ * @author <a href="mailto:jjdelcerro@gvsig.org">Joaquin del Cerro</a>
+ */
+
+public interface FeatureLocks extends WeakReferencingObservable, Persistent {
+
+	public void apply();
+
+	public Iterator getGroups();
+
+	public int getGroupsCount();
+
+	public boolean isLocked(FeatureReference reference);
+
+	public boolean isLocked(Feature feature);
+
+	public long getLocksCount();
+
+	public Iterator getLocks();
+
+    void setDefaultTimeout(long milisecs);
+
+    long getDefaultTimeout();
+
+
+
+    boolean lock(FeatureReference reference);
+
+    boolean lock(Feature feature);
+
+    boolean lock(FeatureSet features) throws DataException;
+
+    void lockAll() throws DataException;
+
+    boolean unlock(FeatureReference reference);
+
+    boolean unlock(Feature feature);
+
+    boolean unlock(FeatureSet features) throws DataException;
+
+    void unlockAll() throws DataException;
+
+	public long getUnappliedLocksCount();
+
+    Iterator getUnappliedLocks();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureLocks.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransforms.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransforms.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransforms.java	(revision 42196)
@@ -0,0 +1,126 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.lang.Cloneable;
+
+/**
+ * This interface represents a container for store transforms.
+ *
+ * Provides access to transforms by index and by iterator, and also allows
+ * adding and removing transforms.
+ *
+ */
+public interface FeatureStoreTransforms extends Cloneable {
+
+	/**
+	 * Returns the FeatureStoreTransform given its index.
+	 *
+	 * @param index
+	 * 			a position in this FeatureStoreTransforms
+	 *
+	 * @return
+	 * 		the FeatureStoreTransform that is stored in the given index.
+	 */
+	public FeatureStoreTransform getTransform(int index);
+
+	/**
+	 * Adds a FeatureStoreTransform to this container.
+	 *
+	 * @param transform
+	 * 			the FeatureStoreTransform to add
+	 *
+	 * @return
+	 * 		the added FeatureStoreTransform
+	 *
+	 * @throws DataException
+	 */
+	public FeatureStoreTransform add(FeatureStoreTransform transform)
+			throws DataException;
+
+	/**
+	 * Returns the number of FeatureStoreTransforms stored in this container
+	 *
+	 * @return
+	 * 		number of FeatureStoreTransforms stored in this container
+	 */
+	public int size();
+
+	/**
+	 * Indicates whether this container is empty.
+	 *
+	 * @return
+	 * 		true if this container is empty, false if not
+	 */
+	public boolean isEmpty();
+
+	/**
+	 * Returns an iterator over this container elements.
+	 *
+	 * @return
+	 * 		an iterator over this container elements.
+	 */
+	public Iterator iterator();
+
+	/**
+	 * Empties this container.
+	 *
+	 */
+	public void clear();
+
+	/**
+	 * Removes the {@link FeatureStoreTransform} given its index.
+	 *
+	 * @param index
+	 * 			the position of the {@link FeatureStoreTransform} to remove.
+	 * @return
+	 * 		the removed object
+	 */
+	public Object remove(int index);
+
+	/**
+	 * Removes the given {@link FeatureStoreTransform}.
+	 *
+	 * @param transform
+	 * 				{@link FeatureStoreTransform} to remove
+	 * @return
+	 * 		true if the transform was successfully removed, false if not.
+	 */
+	public boolean remove(FeatureStoreTransform transform);
+
+	/**
+	 * Retruns true if any {@link FeatureStoreTransform} make changes of any
+	 * previous attributes values.<br>
+	 *
+	 * If all {@link FeatureStoreTransform} affects only to attributes defition,
+	 * the {@link FeatureSet} performance can be better.
+	 *
+	 * @return
+	 */
+	public boolean isTransformsOriginalValues();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTransforms.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureType.java	(revision 42196)
@@ -0,0 +1,185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.tools.evaluator.Evaluator;
+
+/**
+ * This interface represents a FeatureType in editable state. 
+ * To edit a FeatureType you have to obtain its instance of 
+ * EditableFeatureType and then perform editing operations on it.
+ * 
+ * Once you have completed the editing you can save the changes to the original 
+ * FeatureType. This is the only way to edit a FeatureType.
+ */
+public interface EditableFeatureType extends FeatureType {
+
+	/**
+	 * Sets the default geometry attribute name
+	 * 
+	 * @param name
+	 * 			string containing the default geometry attribute name
+	 */
+	public void setDefaultGeometryAttributeName(String name);
+
+	/**
+	 * Removes an attribute from this EditableFeatureType, given
+	 * a reference to its descriptor.
+	 * 
+	 * @param attribute
+	 * 				descriptor of the attribute to remove
+	 * 
+	 * @return
+	 * 		true if the attribute was removed successfully, false if not.
+	 */
+	public boolean remove(EditableFeatureAttributeDescriptor attribute);
+
+	/**
+	 * Removes an attribute given its name
+	 * 
+	 * @param name
+	 * 			string containing the name of the attribute to be removed
+	 * @return
+	 * 		
+	 */
+	public Object remove(String name);
+
+	/**
+	 * Removes an attribute given its index
+	 * 
+	 * @param index
+	 * 			position of the attribute to be removed
+	 * 
+	 * @return
+	 * 		
+	 */
+	public Object remove(int index);
+
+	/**
+	 * Adds an attribute to this EditableFeatureType. 
+	 * @param name
+	 * 			string containing the name of the attribute
+	 * @param type
+	 * 			data type of the attribute (one from {@link DataTypes})
+	 * 
+	 * @return a new EditableFeatureAttributeDescriptor
+	 */
+	public EditableFeatureAttributeDescriptor add(String name, int type);
+
+	/**
+	 * Adds an attribute to this EditableFeatureType.
+	 *  
+	 * @param name
+	 * 			string containing the name of the attribute
+	 * 
+	 * @param type
+	 * 			data type of the attribute (one from {@link DataTypes})
+	 * 
+	 * @param size
+	 * 			size of the attribute.
+	 * 
+	 * @return a new EditableFeatureAttributeDescriptor
+	 */
+	public EditableFeatureAttributeDescriptor add(String name, int type,
+			int size);
+
+	/**
+	 * Adds a calculated attribute to this EditableFeatureType.
+	 *  
+	 * @param name
+	 * 			string containing the name of the attribute
+	 * 
+	 * @param type
+	 * 			data type of the attribute (one from {@link DataTypes})
+	 * 
+	 * @param evaluator
+	 * 			an evaluator containing the desired expression
+	 * 
+	 * @return a new EditableFeatureAttributeDescriptor
+	 */	
+	public EditableFeatureAttributeDescriptor add(String name, int type,
+			Evaluator evaluator);
+
+	public EditableFeatureAttributeDescriptor add(String name, int type,
+			FeatureAttributeEmulator emulator);
+	/**
+	 * Returns the associated FeatureType.
+	 *  
+	 * @return the associated FeatureType
+	 */
+	public FeatureType getSource();
+
+	/**
+	 * Returns a copy of the associated FeatureType.
+	 * 
+	 * @return associated FeatureType
+	 */
+	public FeatureType getNotEditableCopy();
+
+	/**
+	 * Sets whether this EditableFeatureType has an OID.
+	 * An OID is a unique serializable reference to a feature
+	 * (a primary key of sorts that may or may not be defined 
+	 * by the store). If the store does not define this OID then
+	 * it will be generated by the feature reference itself.
+	 * 
+	 * Its main use is to provide a way to persist data associated 
+	 * to a feature by this OID.
+	 * 
+	 * @param hasOID true if it has an OID, or false if not.
+	 */
+	public void setHasOID(boolean hasOID);
+	
+	/**
+	 * Sets the default time attribute name
+     * 
+     * @param name
+     *          string containing the default time attribute name
+	 */
+	public void setDefaultTimeAttributeName(String name);
+        
+	/**
+	 * Returns a {@link FeatureAttributeDescriptor} given the attribute name,
+	 * or null if an attribute with the given name does not exist.
+	 *
+	 * @param name
+	 * 			of the attribute
+	 *
+	 * @return
+	 * 		a {@link FeatureAttributeDescriptor}
+	 */
+	public EditableFeatureAttributeDescriptor getEditableAttributeDescriptor(String name);
+
+	/**
+	 * Returns a {@link FeatureAttributeDescriptor} given the attribute index.
+	 *
+	 * @param index
+	 * 			of the attribute
+	 *
+	 * @return
+	 * 		a {@link FeatureAttributeDescriptor}
+	 */
+	public EditableFeatureAttributeDescriptor getEditableAttributeDescriptor(int index);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeatureType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureStoreTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureStoreTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureStoreTransform.java	(revision 42196)
@@ -0,0 +1,190 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * Abstract feature store transform intended for giving a partial default implementation 
+ * of the {@link FeatureStoreTransform} interface to other transform implementations. It is recommended
+ * to extend this class when implementing new {@link FeatureStoreTransform}s.
+ * 
+ * The {@link FeatureType} of this class is not persistent: it has to be generated
+ * by the child implementations of this abstract class when they are created
+ * using the persistence mechanism.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public abstract class AbstractFeatureStoreTransform implements
+FeatureStoreTransform {
+    public static final String METADATA_DEFINITION_NAME = "FeatureStoreTransform";
+	public static final String ABSTRACT_FEATURESTORE_DYNCLASS_NAME = "AbstractFeatureStoreTransform";
+
+	private FeatureStore store;
+
+	private FeatureType defaultFeatureType = null;
+	private List featureTypes = new ArrayList();
+
+    protected String name;
+
+    protected String descripcion;
+
+    private DynObject originalMetadata = null;
+
+    
+    public AbstractFeatureStoreTransform() {
+        this(null, "");
+    }
+
+    public AbstractFeatureStoreTransform(String name, String description) {
+        if( name == null || "".equals(name) ) {
+            this.name = this.getClass().getName();
+        } else {
+            this.name = name;
+        }
+        this.descripcion = description;
+
+    }
+    
+	public String getDescription() {
+	    return this.descripcion;
+	}
+	
+	public String getName() {
+	    return this.name;
+	}
+	
+	public FeatureType getDefaultFeatureType() throws DataException {
+		return defaultFeatureType;
+	}
+
+	public List getFeatureTypes() throws DataException {
+		return featureTypes;
+	}
+
+	public void setFeatureStore(FeatureStore store) {
+		this.store = store;
+	}
+
+	public FeatureStore getFeatureStore() {
+		return store;
+	}
+
+	protected void setFeatureTypes(List types, FeatureType defaultType) {
+		this.featureTypes.clear();
+		this.featureTypes.addAll(types);
+		this.defaultFeatureType = defaultType;
+	}
+
+	public static void registerPersistent() {
+	    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+	    DynStruct definition = persistenceManager.getDefinition(ABSTRACT_FEATURESTORE_DYNCLASS_NAME);
+
+	    if (definition == null){
+	        definition = persistenceManager.addDefinition(
+	            AbstractFeatureStoreTransform.class, 
+	            ABSTRACT_FEATURESTORE_DYNCLASS_NAME, 
+	            "AbstractFeatureStoreTransform Persistent definition", 
+	            null, 
+	            null
+	        );
+
+	        definition.addDynFieldObject("store")
+	            .setClassOfValue(FeatureStore.class)
+	            .setMandatory(true);
+	    }
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		this.store = (FeatureStore) state.get("store");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("store", store);	
+	}
+
+	
+	public final void setSourceMetadata(DynObject metadata) {
+		this.originalMetadata = metadata;
+	}
+	
+	protected DynObject getSourceMetadata() {
+		return this.originalMetadata;
+	}
+	
+	/**
+	 * Get the metadata value for the name <code>name</code>.
+	 * 
+	 * Overwrite this method to support that this transform overwrite the values
+	 * of the statore's metadata.
+	 * 
+	 * @see {#Metadata.getDynValue}
+	 */
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		throw new DynFieldNotFoundException(name, "transform");
+	}
+
+	/**
+	 * Return true is the value <code>name</name> has a value in the metadata
+	 * 
+	 * Overwrite this method to support that this transform overwrite the values
+	 * of the statore's metadata.
+	 * 
+	 * @see {#Metadata.hasDynValue}
+	 */
+	public boolean hasDynValue(String name) {
+		return false;
+	}
+
+	/**
+	 * Set the value of a metadata.
+	 * 
+	 * Overwrite this method to support that this transform overwrite the values
+	 * of the statore's metadata.
+	 * 
+	 * @see {#Metadata.getDynValue}
+	 */
+	public void setDynValue(String name, Object value)
+			throws DynFieldNotFoundException {
+		throw new DynFieldNotFoundException(name, "transform");
+	}
+	
+	  
+	public Object clone() throws CloneNotSupportedException {
+	    return super.clone();
+	    
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureStoreTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.tools.dataTypes.DataType;
+
+
+/**
+ * @deprecated use instead FeatureAttributeGetterAndSetter
+ *
+ */
+public interface FeatureAttributeGetter {
+    
+    public Object getter(Object sourceAttributeValue);
+    
+    public Object setter(Object targetAttributeValue);
+    
+    public DataType getDataType();    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureType.java	(revision 42196)
@@ -0,0 +1,294 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.evaluator.Evaluator;
+
+/**
+ * <p>
+ * This interface provides all the information that describes the structure of
+ * a type of feature, methods for managing it and also offers a variety of utility
+ * methods for simplicity's sake.
+ * </p>
+ *
+ * <p>
+ * The relevant information that compounds a FeatureType includes:
+ * </p>
+ *
+ *  <ul>
+ *  <li> {@link FeatureAttributeDescriptor}(s)
+ *  <li> {@link FeatureRule}(s)
+ *  <li> Its size
+ *  <li> Its SRS(s)
+ *  <li> Its identifier
+ *  <li> Whether features of this type have an OID or not (identifier assigned by the store).
+ * </ul>
+ *
+ * <p>
+ * Methods for management include:
+ * </p>
+ *
+ *  <ul>
+ *  <li>Obtaining its editable instance.
+ *  <li>Obtaining an iterator over its attributes.
+ *  <li>Knowing whether this FeatureType has any associated evaluator for calculated attributes.
+ *  </ul>
+ *
+ * <p>
+ * Utility methods include:
+ * </p>
+ *
+ * <ul>
+ * <li>Getting a copy of the FeatureType.
+ * <li>Getting the default geometry attribute.
+ * <li>Getting the default spatial reference system.
+ * <ul/>
+ */
+public interface FeatureType extends DynClass {
+
+	/**
+	 * Returns a new copy of this FeatureType
+	 *
+	 * @return
+	 * 		a new copy of this FeatureType
+	 */
+	public FeatureType getCopy();
+
+	/**
+	 * Returns a {@link FeatureRules} containing
+	 * all rules applicable to features of this type.
+	 *
+	 * @return
+	 * 		a {@link FeatureRules} containing all rules
+	 * 		applicable to features of this type.
+	 */
+	public FeatureRules getRules();
+
+	/**
+	 * Returns an editable instance of this FeatureType.
+	 * Any modifications on a FeatureType must be done
+	 * through its editable instance.
+	 *
+	 * @return
+	 * 		the editable instance of this FeatureType.
+	 *
+	 * @see EditableFeatureType
+	 */
+	public EditableFeatureType getEditable();
+
+	/**
+	 * Given the name of an attribute, this method returns
+	 * its position in this FeatureType.
+	 *
+	 * @param name
+	 * 			of the attribute
+	 * @return
+	 * 		position of the attribute
+	 */
+	public int getIndex(String name);
+
+	/**
+	 * Returns an attribute descriptor given its name.
+	 *
+	 * @param name
+	 * 			of the attribute
+	 * @return
+	 * 		descriptor of the attribute, a {@link FeatureAttributeDescriptor}.
+	 */
+	public Object get(String name);
+
+	/**
+	 * Returns an attribute descriptor given its index
+	 *
+	 * @param index
+	 * 			of the attribute
+	 *
+	 * @return
+	 * 		descriptor of the attribute, a {@link FeatureAttributeDescriptor}
+	 */
+	public Object get(int index);
+
+	/**
+	 * Returns a {@link FeatureAttributeDescriptor} given the attribute name,
+	 * or null if an attribute with the given name does not exist.
+	 *
+	 * @param name
+	 * 			of the attribute
+	 *
+	 * @return
+	 * 		a {@link FeatureAttributeDescriptor}
+	 */
+	public FeatureAttributeDescriptor getAttributeDescriptor(String name);
+
+	/**
+	 * Returns a {@link FeatureAttributeDescriptor} given the attribute index.
+	 *
+	 * @param index
+	 * 			of the attribute
+	 *
+	 * @return
+	 * 		a {@link FeatureAttributeDescriptor}
+	 */
+	public FeatureAttributeDescriptor getAttributeDescriptor(int index);
+
+	/**
+	 * Returns an iterator over this FeatureType's attributes. Elements
+	 * returned by this iterator are of type {@link FeatureAttributeDescriptor}.
+	 *
+	 * @return
+	 * 		An iterator over this FeatureType's {@link FeatureAttributeDescriptor}s.
+	 */
+	public Iterator iterator();
+
+	/**
+	 * Returns this FeatureType size. The size of a FeatureType is determined
+	 * by its number of attributes.
+	 *
+	 * @return
+	 * 		this FeatureType size, defined as the number of attributes it is composed of.
+	 *
+	 */
+	public int size();
+
+	/**
+	 * Returns this FeatureType identifier. This identifier must always be equal
+	 * to a store.
+	 *
+	 * @return the identifier.
+	 */
+	public String getId();
+
+	/**
+	 * Returns the name of the attribute that will be used as default
+	 * geometry attribute for those processes that require a geometry (for
+	 * instance rendering).
+	 *
+	 * @return
+	 * 		name of the default geometry attribute.
+	 */
+	public String getDefaultGeometryAttributeName();
+
+	/**
+	 * Returns the index of the attribute that will be used as default
+	 * geometry attribute.
+	 *
+	 * @return
+	 * 		index of the default geometry attribute.
+	 */
+	public int getDefaultGeometryAttributeIndex();
+
+	/**
+	 * Returns a list with the SRSs in which this FeatureType geometries are
+	 * expressed. Normally there may be one SRS for each attribute of type
+	 * {@link Geometry}.
+	 *
+	 * @return
+	 * 		a list with the SRS in which this FeatureType geometries are expressed.
+	 */
+	public List getSRSs();
+
+	/**
+	 * Returns the SRS in which the default geometry attribute is expressed.
+	 *
+	 * @return
+	 * 		the SRS in which the default geometry attribute is expressed,
+	 *      null if not has a default geometry attribute.
+	 */
+	public IProjection getDefaultSRS();
+
+	/**
+	 * Indicates whether this FeatureType has any assigned {@link Evaluator}(s).
+	 * Evaluators are used to obtain the values for calculated
+	 * attributes.
+	 *
+	 * @return
+	 * 		true if this FeatureType has any assigned {@link Evaluator}(s).
+	 */
+	public boolean hasEvaluators(); // FIXME: Quitar del interface y dejar en DefaultFeatureType
+
+	/**
+	 * Indicates whether {@link Feature}(s) of this FeatureType have an OID defined.
+	 * An OID is the Feature unique identifier.
+	 *
+	 * Some stores provide their own OIDs which are always unique
+	 * (such as Postgre) while others don't support this concept and
+	 * then it is the library who creates runtime ad-hoc OIDs as
+	 * it see fits, but then integrity of this OIDs among different
+	 * work sessions cannot be guaranteed (this is the case for shape
+	 * files).
+	 *
+	 * @return
+	 * 		true if this FeatureType has an OID defined, false otherwise.
+	 *
+	 */
+	public boolean hasOID();
+
+	/**
+	 * Incicates if attibutes with automatic values are allowed in the source
+	 *
+	 * @return true if source supports this feature, false otherwise
+	 */
+	public boolean allowAutomaticValues();
+
+	/**
+	 * Returns an Array of the FeatureAttributeDescriptor
+	 *
+	 * @return
+	 */
+	public FeatureAttributeDescriptor[] getAttributeDescriptors();
+
+	/**
+	 * Returns an Array of the FeatureAttributeDescriptor that compounds the
+	 * primary key
+	 *
+	 * @return
+	 */
+	public FeatureAttributeDescriptor[] getPrimaryKey();
+
+	/**
+	 * Returns the default geometry FeatureAttributeDescriptor. Return null if
+	 * it's not set
+	 *
+	 * @return
+	 */
+	public FeatureAttributeDescriptor getDefaultGeometryAttribute();
+	
+	/**
+     * Returns the default time FeatureAttributeDescriptor. Return null if
+     * it's not set.
+     *
+     * @return
+     *          the default time attribute
+     */
+	public FeatureAttributeDescriptor getDefaultTimeAttribute();
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSelection.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Implement data selection}
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.lang.Cloneable;
+
+/**
+ * Manages a selection of Features.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public interface FeatureSelection extends FeatureReferenceSelection,
+		FeatureSet, Cloneable {
+
+    /**
+     * Adds a feature to the selection.
+     * 
+     * @param feature
+     *            the selected feature
+     * @return true if the feature was not selected before selecting it
+     */
+    boolean select(Feature feature);
+
+    /**
+     * Removes a feature from the selection.
+     * 
+     * @param feature
+     *            the deselected feature
+     * @return true if the feature was selected before deselecting it
+     */
+    boolean deselect(Feature feature);
+
+    /**
+     * Adds a DataSet of features to the selection.
+     * 
+     * @param features
+     *            the selected features
+     * @return true if any of the feature was not selected before selecting it
+     * @throws DataException
+     *             if there is an error reading the FeatureSet values
+     */
+    boolean select(FeatureSet features) throws DataException;
+
+    /**
+     * Removes a DataSet of features from the selection.
+     * 
+     * @param features
+     *            the deselected features
+     * @return true if any of the features was selected before deselecting it
+     * @throws DataException
+     *             if there is an error reading the FeatureSet values
+     */
+    boolean deselect(FeatureSet features) throws DataException;
+
+    /**
+     * Returns if a feature is selected.
+     * 
+     * @param feature
+     *            to check
+     * @return if it is selected
+     */
+    boolean isSelected(Feature feature);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/NewFeatureStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/NewFeatureStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/NewFeatureStoreParameters.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+
+public interface NewFeatureStoreParameters extends NewDataStoreParameters {
+
+    /**
+     * Parameter name for specify the feature type in the creacion of
+     * news stores.
+     *
+     * Is defined only in "new" paramaters.
+     *
+     */
+    public static final String FEATURETYPE_PARAMTER_NAME = "FeatureType";
+
+    
+    public void setDefaultFeatureType(FeatureType defaultFeatureType);
+
+    public EditableFeatureType getDefaultFeatureType();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/NewFeatureStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSet.java	(revision 42196)
@@ -0,0 +1,323 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.IndexedVisitable;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * A FeatureSet represents a set of {@link Feature}(s). These sets of features
+ * are typically obtained directly from a {@link FeatureStore}, or through a
+ * {@link FeatureQuery}.
+ * 
+ * A FeatureSet may contain subsets of {@link Feature}(s) of different
+ * {@link FeatureType}(s). It allows iterating and editing the features.
+ * 
+ * FIXME: Actualizar javadoc
+ * 
+ * Si el store en el que esta basado el featureset es modificado, se realiza un
+ * update, insert, delete o se modifican los featuretype de este, el FeatureSet
+ * quedara invalidado, y cualquier acceso a el provocara que se lance una
+ * excepcion de tiempo de ejecucion ConcurrentModificationException.
+ * 
+ * Habria que indicar que invocar al metodo accept del interface visitor
+ * provocara la excepcion ConcurrentModificationException si el store a sido
+ * modificado desde otro punto.
+ * 
+ * Indicar que los metodos insert/delete/update ademas de actuar sobre el set,
+ * actuan sobre el store en el que este esta basado, pero que no invalidan el
+ * set sobre el que se ejecutan. No se si esto deberia hacerse mencion en esos
+ * metodos o en la doc general del featureset.
+ * 
+ */
+public interface FeatureSet extends DataSet, IndexedVisitable {
+
+	/**
+	 * Returns the default {@link FeatureType} of this FeatureSet.
+	 * 
+	 * @return default {@link FeatureType} in this FeatureSet.
+	 */
+	public FeatureType getDefaultFeatureType();
+
+	/**
+	 * Returns a list of the {@link FeatureType}(s) in this FeatureSet.
+	 * 
+	 * @return list of the {@link FeatureType}(s) in this FeatureSet.
+	 */
+	public List getFeatureTypes();
+
+	/**
+	 * Returns the number of {@link Feature}(s) contained in this FeatureSet.
+	 * 
+	 * The value returned by this method won't be accurate when
+	 * the FeatureStore is being edited and this set's features
+	 * are modified, added or deleted.
+	 *  
+	 * @return number of {@link Feature}(s) contained in this FeatureSet.
+	 * 
+	 * @throws DataException
+	 */
+    public long getSize() throws DataException;
+
+    /**
+     * Returns an iterator over the elements in this collection, in the order
+     * (if any) defined when the collection was obtained.
+     * 
+     * The iterator starts at the specified position in this collection. The
+     * specified index indicates the first element that would be returned by an
+     * initial call to the <tt>next</tt> method. An initial call to the
+     * <tt>previous</tt> method would return the element with the specified
+     * index minus one.
+     * 
+     * <p>
+     * <em>
+     * <strong>NOTE:</strong> if you use this method to get the iterator, you
+     * must get sure the iterator is disposed (@see
+     * {@link DisposableIterator#dispose()}) in any case, even if an error occurs
+     * while getting the data. It is recommended to use the <code>accept</code>
+     * methods instead, which handle everything for you. 
+     * Take into account the accept methods may use a fast iterator to 
+     * get the features.
+     * </em>
+     * </p>
+     * 
+     * @see #accept(org.gvsig.tools.visitor.Visitor)
+     * @see #accept(org.gvsig.tools.visitor.Visitor, long)
+     * @see #fastIterator()
+     * @see #fastIterator(long)
+     * 
+     * @param index
+     *            index of first element to be returned from the iterator (by a
+     *            call to the <tt>next</tt> method).
+     * @return an iterator of the elements in this collection (in proper
+     *         sequence), starting at the specified position in the collection.
+     * @throws DataException
+     *             if the index is out of range (index &lt; 0 || index &gt;
+     *             size()).
+     * @deprecated use {@link #fastIterator(long)} instead
+     */
+	DisposableIterator iterator(long index) throws DataException;
+
+    /**
+     * Returns an iterator over the elements in this collection, in the order
+     * (if any) defined when the collection was obtained.
+     * 
+     * <p>
+     * <em>
+     * <strong>NOTE:</strong> if you use this method to get the iterator, you
+     * must get sure the iterator is disposed (@see
+     * {@link DisposableIterator#dispose()}) in any case, even if an error occurs
+     * while getting the data. It is recommended to use the <code>accept</code>
+     * methods instead, which handle everything for you. 
+     * Take into account the accept methods may use a fast iterator to 
+     * get the features.
+     * </em>
+     * </p>
+     * 
+     * @see #accept(org.gvsig.tools.visitor.Visitor)
+     * @see #accept(org.gvsig.tools.visitor.Visitor, long)
+     * @see #fastIterator()
+     * @see #fastIterator(long)
+     * 
+     * @return an iterator of the elements in this collection (in proper
+     *         sequence).
+     * 
+     * @throws DataException
+     *             if there is an error getting the iterator
+     * 
+     * @deprecated use {@link #fastIterator()} instead
+     */
+	DisposableIterator iterator() throws DataException;
+
+    /**
+     * Returns a fast iterator over this set.
+     * <p>
+     * Fast in this case means that each of the elements returned may be a
+     * reused or pooled object instance, so don't use it to be stored in any
+     * way.
+     * </p>
+     * <p>
+     * If you need to store one of the {@link Feature} of the iterator, use the
+     * {@link Feature#getCopy()} to create a clone of the object.
+     * </p>
+     * 
+     * <p>
+     * <em>
+     * <strong>NOTE:</strong> if you use this method to get the iterator, you
+     * must get sure the iterator is disposed (@see
+     * {@link DisposableIterator#dispose()}) in any case, even if an error occurs
+     * while getting the data. It is recommended to use the <code>accept</code>
+     * methods instead, which handle everything for you. 
+     * Take into account the accept methods may use a fast iterator to 
+     * get the features.
+     * </em>
+     * </p>
+     * 
+     * @see #accept(org.gvsig.tools.visitor.Visitor)
+     * @see #accept(org.gvsig.tools.visitor.Visitor, long)
+     * 
+     * @return an iterator over this set.
+     * 
+     * @throws DataException
+     */
+	public DisposableIterator fastIterator() throws DataException;
+
+    /**
+     * Returns a fast iterator over this set, starting from the given index.
+     * <p>
+     * Fast in this case means that each of the elements returned may be a
+     * reused or pooled object instance, so don't use it to be stored in any
+     * way.
+     * </p>
+     * <p>
+     * If you need to store one of the {@link Feature} of the iterator, use the
+     * {@link Feature#getCopy()} to create a clone of the object.
+     * </p>
+     * 
+     * <p>
+     * <em>
+     * <strong>NOTE:</strong> if you use this method to get the iterator, you
+     * must get sure the iterator is disposed (@see
+     * {@link DisposableIterator#dispose()}) in any case, even if an error occurs
+     * while getting the data. It is recommended to use the <code>accept</code>
+     * methods instead, which handle everything for you. 
+     * Take into account the accept methods may use a fast iterator to 
+     * get the features.
+     * </em>
+     * </p>
+     * 
+     * @see #accept(org.gvsig.tools.visitor.Visitor)
+     * @see #accept(org.gvsig.tools.visitor.Visitor, long)
+     * 
+     * @param index
+     *            position in which the iterator is initially located.
+     * 
+     * @return an iterator initially located at the position indicated by the
+     *         given index
+     * 
+     * @throws DataException
+     */
+	public DisposableIterator fastIterator(long index) throws DataException;
+
+	/**
+	 * Indicates whether this FeatureSet contains zero features.
+	 * 
+	 * The value returned by this method won't be accurate when
+	 * the FeatureStore is being edited and this set's features
+	 * are modified, added or deleted.
+	 *  
+	 * @return true if this FeatureSet is empty, false otherwise.
+	 * 
+	 * @throws DataException
+	 */
+	boolean isEmpty() throws DataException;
+
+	/**
+	 * Updates a {@link Feature} with the given {@link EditableFeature}.<br>
+	 * 
+	 * Any {@link DisposableIterator} from this store that was still in use can will not
+	 * reflect this change.
+	 * 
+	 * @param feature
+	 *            an instance of {@link EditableFeature} with which to update
+	 *            the associated {@link Feature}.
+	 * 
+	 * @throws DataException
+	 */
+	public void update(EditableFeature feature) throws DataException;
+
+	/**
+	 * Deletes a {@link Feature} from this FeatureSet.<br>
+	 * 
+	 * Any {@link DisposableIterator} from this store that was still in use will be
+	 * <i>unsafe</i>. Use {@link DisposableIterator#remove()} instead.
+	 * 
+	 * @param feature
+	 *            the {@link Feature} to delete.
+	 * 
+	 * @throws DataException
+	 */
+	public void delete(Feature feature) throws DataException;
+
+	/**
+	 * Inserts a new feature in this set. It needs to be an instance of
+	 * {@link EditableFeature} as it has not been stored yet.<br>
+	 * 
+	 * Any {@link DisposableIterator} from this store that was still in use can will not
+	 * reflect this change.
+	 * 
+	 * @param feature
+	 *            the {@link EditableFeature} to insert.
+	 * 
+	 * @throws DataException
+	 */
+	public void insert(EditableFeature feature) throws DataException;
+
+    /**
+     * Returns a {@link DynObjectSet} of the contents of this set.
+     * Defaults to fast iteration.
+     * 
+     * @return a {@link DynObjectSet}
+     */
+    public DynObjectSet getDynObjectSet();
+
+    /**
+     * Returns a {@link DynObjectSet} of the contents of this set.
+     * 
+     * @param fast
+     *            if the set will be able to be iterated in a fast way, by
+     *            reusing the {@link DynObject} instance for each
+     *            {@link Feature} instance.
+     * @return a {@link DynObjectSet}
+     */
+    public DynObjectSet getDynObjectSet(boolean fast);
+
+    /**
+     * Provides each value of this Store to the provided {@link Visitor},
+     * beginning from the provided index position.
+     * The values received through the {@link Visitor#visit(Object)} method
+     * may be transient, reused or externally modifiable, so they can't
+     * be used to be stored in any external form out of the visit method.
+     * 
+     * If you need to store any of the values out of the
+     * {@link Visitor#visit(Object)} method execution, create a copy or clone
+     * the received value in order to be stored.
+     * 
+     * @param visitor
+     *            the visitor to apply to each value.
+     * @param firstValueIndex
+     *            index of first element to be visited by the {@link Visitor}
+     * @exception BaseException
+     *                if there is an error while performing the visit
+     */
+    void accept(Visitor visitor, long firstValueIndex) throws BaseException;
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureRule.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureRule.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureRule.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+
+/**
+ * Abstract feature rule intended for giving a partial default implementation 
+ * of the {@link FeatureRule} interface to other rule implementations. It is recommended
+ * to extend this class when implementing new {@link FeatureRule}s.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public abstract class AbstractFeatureRule implements FeatureRule {
+	protected String name;
+	protected String description;
+	protected boolean checkAtUpdate;
+	protected boolean checkAtFinishEdition;
+
+	protected AbstractFeatureRule(String name, String description) {
+		this.init(name,description,true,true);
+	}
+
+	protected AbstractFeatureRule(String name, String description,
+			boolean checkAtUpdate, boolean checkAtFinishEdition) {
+		this.init(name, description, checkAtUpdate, checkAtFinishEdition);
+	}
+
+	protected void init(String name, String description, boolean checkAtUpdate,
+			boolean checkAtFinishEdition) {
+		this.name=name;
+		this.description=description;
+		this.checkAtUpdate = checkAtUpdate;
+		this.checkAtFinishEdition = checkAtFinishEdition;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public boolean checkAtFinishEditing() {
+		return this.checkAtFinishEdition;
+	}
+
+	public boolean checkAtUpdate() {
+		return this.checkAtUpdate;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureRule.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndexes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndexes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndexes.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {{Company}}   {{Task}}
+ */
+
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.tools.evaluator.Evaluator;
+
+/**
+ * This interface gives access to a store's local indexes
+ * and also provides a delegated method for obtaining a
+ * resulting {@link FeatureSet} using the appropriate
+ * index given an {@link Evaluator}.
+ *
+ *
+ * @author jyarza
+ *
+ */
+public interface FeatureIndexes {
+
+
+	/**
+	 * Returns a FeatureIndex given the name with which it was created.
+	 *
+	 * @param name FeatureIndex name
+	 *
+	 * @return FeatureIndex or null if it is not found.
+	 */
+	public FeatureIndex getFeatureIndex(String name);
+
+	/**
+	 * Using the given evaluator attributes, choose and use an appropriate index
+	 * to obtain a FeatureSet. If no index can be applied, then this method
+	 * returns null
+	 *
+	 * @param evaluator
+	 * @return FeatureSet or null if could not find any appropriate index.
+	 * @throws FeatureIndexException
+	 *
+	 */
+	public FeatureSet getFeatureSet(Evaluator evaluator)
+			throws FeatureIndexException;
+
+	/**
+	 * Returns an iterator over the indexes. Elements are of type FeatureIndex.
+	 *
+	 * @return Iterator over the FeatureIndex(es).
+	 */
+	public Iterator iterator();
+
+    /**
+     * Returns if all the indexes are valid and might be used to get Features.
+     * 
+     * @return if the indexes are valid
+     */
+    public boolean areValid();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndexes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreProviderFactory.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+
+public interface FeatureStoreProviderFactory extends DataStoreProviderFactory {
+
+    
+    /**
+     * Returns a list of {@link DataTypes} supported
+     * by this FeatureStoreProviderFactory
+     * 
+     * @return  list of {@link DataTypes} supported
+     * by this FeatureStoreProviderFactory or null
+     * if it has no restrictions on data types
+     */
+    public List getSupportedDataTypes();
+    
+	/**
+	 * {@link Geometry}
+	 * 
+	 * Return a matrix (list of pairs) (int, int]
+	 * [Geometry.TYPE,GEOMETRY.SUBTYPE]
+	 * with types and subtypes supported by this provider.
+	 * 
+	 * If the provider has not vector support
+	 * or has not restrictions over geometry types return null.
+	 * 
+	 * @return Matrix of Geometry.TYPES, SUBTYPES or null
+	 */
+	public List getSupportedGeometryTypesSubtypes();
+	
+	/**
+	 * 
+	 * @return whether this factory allows mandatory attributes
+	 * in the generated stores' feature types.   
+	 */
+	public boolean allowsMandatoryAttributes();
+	
+	/**
+	 * 
+     * @return whether this factory allows primary key attributes
+     * in the generated stores' feature types.  
+	 */
+	public boolean allowsPrimaryKeyAttributes();
+	
+	/**
+	 * 
+	 * @return a new instance of a default feature type
+	 * (changes to that feature type do not affect following calls)
+	 */
+	public FeatureType createDefaultFeatureType();
+	
+	/**
+	 * 
+	 * @return whether stores created by this factory
+	 * allow several geometry types.
+	 * Actually redundant after adding
+	 * getSupportedGeometryTypesSubtypes())
+	 */
+	// public int allowMultipleGeometryTypes();
+	
+	public int allowEditableFeatureType();
+
+        public int useLocalIndexesCanImprovePerformance();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.feature package documentation</title>
+</head>
+<body>
+
+<p>Provides API for accessing and managing tabular (Feature based) data.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeNameTooLongException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeNameTooLongException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeNameTooLongException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class AttributeNameTooLongException extends AttributeNameException {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final static String MESSAGE_FORMAT =
+			"Attribute name '%(attrname)' is too long in '%(storeName)'. Max length is %(maxlen)";
+	private final static String MESSAGE_KEY = "_AttributeNameTooLongException";
+
+	public AttributeNameTooLongException(
+			String attrname,
+			String storeName,
+			int maxlen) {
+		
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("attrname", attrname);
+		setValue("storeName", storeName);
+		setValue("maxlen", Integer.toString(maxlen));
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindFeatureTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindFeatureTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindFeatureTypeException.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+public class PersistenceCantFindFeatureTypeException extends PersistenceException {
+
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1254048284332411193L;
+	private final static String MESSAGE_FORMAT = "Can't find feature type (%(featureTypeName)) in data store (%(storeName)) to restore.";
+	private final static String MESSAGE_KEY = "_PersistenceCantFindFeatureTypeException";
+
+	public PersistenceCantFindFeatureTypeException(String storeName, String featureTypeName){
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("storeName", storeName);
+		this.setValue("featureTypeName", featureTypeName);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindFeatureTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/DataExportException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/DataExportException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/DataExportException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class DataExportException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 2776287871021464378L;
+
+	private final static String MESSAGE_FORMAT = "Can't export to %(target)s.";
+	private final static String MESSAGE_KEY = "_DataExportException";
+
+	public DataExportException(Throwable cause, String target) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		this.setValue("target", target);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/DataExportException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceStoreAlreadyLoadedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceStoreAlreadyLoadedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceStoreAlreadyLoadedException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+public class PersistenceStoreAlreadyLoadedException extends PersistenceException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8995540779271989345L;
+	private final static String MESSAGE_FORMAT = "Can't reload store ('%(name)'), provider already initilized.";
+	private final static String MESSAGE_KEY = "_PersistenceStoreAlreadyLoadedException";
+
+	public PersistenceStoreAlreadyLoadedException(String name){
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("name", name);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceStoreAlreadyLoadedException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SetReadOnlyAttributeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SetReadOnlyAttributeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SetReadOnlyAttributeException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class SetReadOnlyAttributeException extends DataRuntimeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7608679825253499090L;
+	private final static String MESSAGE_FORMAT = "Attribute '%(attribute)'[%(typename)] is read only.";
+	private final static String MESSAGE_KEY = "_SetReadOnlyAttributeException";
+
+	public SetReadOnlyAttributeException(String name, FeatureType type) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+                this.setValue("attribute", name);
+                this.setValue("typename", type.getName());
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SetReadOnlyAttributeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureTypeException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreUpdateFeatureTypeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -3117799038163318881L;
+	private final static String MESSAGE_FORMAT = "Can't update feature type in store '%(store)s.";
+	private final static String MESSAGE_KEY = "_StoreUpdateFeatureTypeException";
+
+	public StoreUpdateFeatureTypeException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		this.setValue("store", store);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindDefaultFeatureTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindDefaultFeatureTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindDefaultFeatureTypeException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+public class PersistenceCantFindDefaultFeatureTypeException extends PersistenceException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 2869975221925191656L;
+	private final static String MESSAGE_FORMAT = "Can't find feature type (%(featureTypeName)) in data store (%(storeName)) to restore.";
+	private final static String MESSAGE_KEY = "_PersistenceCantFindDefaultFeatureTypeException";
+
+	public PersistenceCantFindDefaultFeatureTypeException(String storeName, String featureTypeName){
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("storeName", storeName);
+		this.setValue("featureTypeName", featureTypeName);
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PersistenceCantFindDefaultFeatureTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionNotAllowedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionNotAllowedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionNotAllowedException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class SelectionNotAllowedException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 6572957305406890773L;
+	private final static String MESSAGE_FORMAT = "Selection not allowed in store %(store)s.";
+	private final static String MESSAGE_KEY = "_SelectionNotAllowedException";
+
+	public SelectionNotAllowedException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("store", store);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionNotAllowedException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PerformEditingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PerformEditingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PerformEditingException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class PerformEditingException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -4303159486787919718L;
+	private final static String MESSAGE_FORMAT = "Can't perform changes in '%(resource)s'.";
+	private final static String MESSAGE_KEY = "_PerformEditingException";
+
+	public PerformEditingException(String resource, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/PerformEditingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateFeatureException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateFeatureException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateFeatureException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class CreateFeatureException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7335241420683266251L;
+	private final static String MESSAGE_FORMAT = "Can't create feature in store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_CreateFeatureException";
+
+	public CreateFeatureException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateFeatureException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUndoException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUndoException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUndoException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreUndoException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -944510163710231013L;
+	private final static String MESSAGE_FORMAT = "Can't undo in store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_StoreUndoException";
+
+	public StoreUndoException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUndoException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/WriteNotAllowedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/WriteNotAllowedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/WriteNotAllowedException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class WriteNotAllowedException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 4935538241520381746L;
+	private final static String MESSAGE_FORMAT = "Unsuported writing for the store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_WriteNotAllowedException";
+
+	public WriteNotAllowedException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/WriteNotAllowedException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedDataTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedDataTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedDataTypeException.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class UnsupportedDataTypeException extends DataRuntimeException {
+
+	private int dataType;
+	private final static String MESSAGE_FORMAT = "Unsupported data type '%(typeValue)' of attribute '%(attrname)'.";
+	private final static String MESSAGE_KEY = "_UnsupportedTypeException";
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1313736269863651404L;
+
+	public UnsupportedDataTypeException(String attrname, int dataType) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("attrname", attrname);
+		setValue("typeValue", Integer.toString(dataType));
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedDataTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NeedEditingModeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NeedEditingModeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NeedEditingModeException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class NeedEditingModeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 4295472399799040181L;
+
+	private final static String MESSAGE_FORMAT = "Operation not allowed if not in editing mode for store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_NeedEditingModeException";
+
+	public NeedEditingModeException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NeedEditingModeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class IllegalFeatureException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1367845204038351116L;
+	private final static String MESSAGE_FORMAT = "Feature not allowed for the store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_IllegalFeatureException";
+
+	public IllegalFeatureException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AlreadyEditingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AlreadyEditingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AlreadyEditingException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class AlreadyEditingException extends DataException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 6589349326410416899L;
+
+	private final static String MESSAGE_FORMAT = "Store '%(store)s' is already in editing mode.";
+	private final static String MESSAGE_KEY = "_AlreadyEditingException";
+
+	public AlreadyEditingException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AlreadyEditingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NoNewFeatureInsertException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NoNewFeatureInsertException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NoNewFeatureInsertException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class NoNewFeatureInsertException extends DataException {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1597158676397711190L;
+	private final static String MESSAGE_FORMAT = "Exception intializing '%(store)s'.";
+	private final static String MESSAGE_KEY = "_InitializeException";
+
+	public NoNewFeatureInsertException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NoNewFeatureInsertException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NullFeatureTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NullFeatureTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NullFeatureTypeException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class NullFeatureTypeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -8969897372454817704L;
+	private final static String MESSAGE_FORMAT = "Can't allowed a feature type to null in store %(store)s.";
+	private final static String MESSAGE_KEY = "_NullFeatureTypeException";
+
+	public NullFeatureTypeException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("store", store);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/NullFeatureTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureSetInitializeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureSetInitializeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureSetInitializeException.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+
+/**
+ * Exception thrown when an error is produced while creating or initializing a
+ * {@link FeatureSet}.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class FeatureSetInitializeException extends DataException {
+
+	private static final long serialVersionUID = 3626939908400169082L;
+	private final static String MESSAGE_FORMAT =
+			"Error initializing a FeatureSet";
+	private final static String MESSAGE_KEY = "_FeatureSetInitializeException";
+
+	/**
+	 * Creates a new {@link FeatureSetInitializeException}.
+	 * 
+	 * @param cause
+	 *            the original cause of the exception
+	 */
+	public FeatureSetInitializeException(Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureSetInitializeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/InvalidFeatureIndexException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/InvalidFeatureIndexException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/InvalidFeatureIndexException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+
+/**
+ * Exception thrown when a {@link FeatureIndex} is used but its state is not
+ * valid.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class InvalidFeatureIndexException extends FeatureIndexException {
+    
+    private static final long serialVersionUID = 3857591701014208141L;
+    private static final String MESSAGE_KEY = "_InvalidFeatureIndexException";
+    private static final String FORMAT_STRING = 
+        "The feature index is not valid in its current state and can't be used";
+    
+    /**
+     * Creates a new {@link InvalidFeatureIndexException}.
+     */
+    public InvalidFeatureIndexException() {
+        super(FORMAT_STRING, MESSAGE_KEY, serialVersionUID);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/InvalidFeatureIndexException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureTypeIntegrityException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureTypeIntegrityException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureTypeIntegrityException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataListException;
+
+
+public class FeatureTypeIntegrityException extends DataListException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -1599605985631014641L;
+
+	private final static String MESSAGE_FORMAT = "Feature type (%(typeId)s) incorrect.";
+	private final static String MESSAGE_KEY = "_FeatureTypeIntegrityException";
+
+	public FeatureTypeIntegrityException(String typeId) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("typeId", typeId);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureTypeIntegrityException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreInsertFeatureException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreInsertFeatureException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreInsertFeatureException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreInsertFeatureException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1309051657301097896L;
+	private final static String MESSAGE_FORMAT = "Can't insert feature in store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_StoreInsertFeatureException";
+
+	public StoreInsertFeatureException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreInsertFeatureException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreEditException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreEditException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreEditException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreEditException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -5529148262961765052L;
+
+	private final static String MESSAGE_FORMAT = "Can't enter in editing mode for store '%(store)s.";
+	private final static String MESSAGE_KEY = "_StoreEditException";
+
+	public StoreEditException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		this.setValue("store", store);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreEditException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeNameException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeNameException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeNameException.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * 
+ * Used to notify the case when the name of an attribute is not valid
+ * for a certain data store. Example: A field name longer than
+ * 11 characters in a DBF file. Perhaps: a field name with invalid characters
+ * in a database.
+ * 
+ * @author jldominguez
+ *
+ */
+public class AttributeNameException extends DataException {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final static String MESSAGE_FORMAT =
+			"Attribute name '%(attrname)' not valid in '%(storeName)'.";
+	private final static String MESSAGE_KEY = "_AttributeNameException";
+
+	public AttributeNameException(
+			String attrname,
+			String storeName) {
+		
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("attrname", attrname);
+		setValue("storeName", storeName);
+
+	}
+	
+	public AttributeNameException(
+			String messageFormat, String messageKey, long code) {
+		
+		super(messageFormat, messageKey, code);
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexOperationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexOperationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexOperationException.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+
+/**
+ * Exception thrown when a {@link FeatureIndex} operation has failed.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class FeatureIndexOperationException extends FeatureIndexException {
+
+    private static final long serialVersionUID = 3857591701014208141L;
+    private static final String MESSAGE_KEY = "_FeatureIndexOperationException";
+    private static final String FORMAT_STRING =
+        "Error performing operation: %(operation), on feature index: %(index)";
+
+    /**
+     * Creates a new {@link FeatureIndexOperationException}.
+     */
+    public FeatureIndexOperationException(FeatureIndex index, String operation,
+        Throwable source) {
+        super(FORMAT_STRING, source, MESSAGE_KEY, serialVersionUID);
+        setValue("index", index.toString());
+        setValue("operation", operation);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexOperationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedGeometryException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedGeometryException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedGeometryException.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class UnsupportedGeometryException extends DataRuntimeException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 2381749762973472962L;
+	private final static String MESSAGE_FORMAT = "Unsupported geometry: '%(geomTypeName)'(%(geomType),%(geomSubtype)).";
+	private final static String MESSAGE_KEY = "_UnsupportedGeometryException";
+
+
+	public UnsupportedGeometryException(int geomType, int geomSubtype) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("geomType", Integer.toString(geomType));
+		setValue("geomSubtype", Integer.toString(geomSubtype));
+		setValue("geomTypeName", "{unknow}");
+		try {
+			GeometryType type = GeometryLocator.getGeometryManager()
+					.getGeometryType(geomType, geomSubtype);
+			setValue("geomTypeName", type.getName());
+		} catch (Exception ex) {
+			// Nothing to do
+		}
+	}
+	public UnsupportedGeometryException(GeometryType geomType) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("geomType", Integer.toString(geomType.getType()));
+		setValue("geomSubtype", Integer.toString(geomType.getSubType()));
+		setValue("geomTypeName", geomType.getName());
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnsupportedGeometryException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreCancelEditingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreCancelEditingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreCancelEditingException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreCancelEditingException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -4303159486787919718L;
+	private final static String MESSAGE_FORMAT = "Can't cancel editing in store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_StoreCancelEditingException";
+
+	public StoreCancelEditingException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreCancelEditingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalValueException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalValueException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalValueException.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class IllegalValueException extends DataRuntimeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 7398202284121091833L;
+	private final static String MESSAGE_FORMAT = "Value %(value) not allowed for the attribute '%(attribute)' of type '%(typename)'.";
+	private final static String MESSAGE_KEY = "_IllegalValueException";
+
+	public IllegalValueException(FeatureAttributeDescriptor attribute,
+			Object value) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("attribute", attribute.getName());
+		setValue("typename", attribute.getDataTypeName());
+		if (value == null) {
+			setValue("value", "null");
+		} else {
+			setValue("value", "'"+value.toString()+"'");
+		}
+	}
+	public IllegalValueException(FeatureAttributeDescriptor attribute,
+			Object value, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("attribute", attribute.getName());
+		setValue("typename", attribute.getDataTypeName());
+		if (value == null) {
+			setValue("value", "{null}");
+		} else {
+			setValue("value", value.toString());
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalValueException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreRedoException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreRedoException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreRedoException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreRedoException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -3619737749583530176L;
+	private final static String MESSAGE_FORMAT = "Can't redo in store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_StoreRedoException";
+
+	public StoreRedoException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreRedoException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreUpdateFeatureException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -8532519106338060835L;
+	private final static String MESSAGE_FORMAT = "Can't update feature in store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_StoreUpdateFeatureException";
+
+	public StoreUpdateFeatureException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreUpdateFeatureException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeSizeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeSizeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeSizeException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class AttributeFeatureTypeSizeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 2997663523084109588L;
+
+	private final static String MESSAGE_FORMAT = "invalid size '%(size)s'.";
+	private final static String MESSAGE_KEY = "_AttributeFeatureTypeSizeException";
+
+	public AttributeFeatureTypeSizeException(int size) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("size", Integer.toString(size));
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeSizeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateGeometryException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateGeometryException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateGeometryException.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class CreateGeometryException extends DataException {
+	private static final long serialVersionUID = -3963756418194447731L;
+	private final static String MESSAGE_FORMAT = "Exception creating a geometry with type: '%(type)' and subtype:'%(subtype)'.";
+	private final static String MESSAGE_KEY = "_CreateGeometryException";
+
+	public CreateGeometryException(Throwable cause) {
+		this(TYPES.NULL, SUBTYPES.UNKNOWN, cause);
+	}
+	
+	public CreateGeometryException(int type, int subtype, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("type", new Integer(type));
+		setValue("subtype", new Integer(subtype));
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/CreateGeometryException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeIntegrityException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeIntegrityException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeIntegrityException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataListException;
+
+public class AttributeFeatureTypeIntegrityException extends DataListException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -1599605985631014641L;
+
+	private final static String MESSAGE_FORMAT = "Integrity error in attribute '%(attrname)s'.";
+	private final static String MESSAGE_KEY = "_AttributeFeatureTypeIntegrityException";
+
+	public AttributeFeatureTypeIntegrityException(String attrname) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("attrname", attrname);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeIntegrityException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexException.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+
+/**
+ * @author jiyarza
+ */
+public class FeatureIndexException extends DataException {
+	
+	private static final long serialVersionUID = 932690269454242645L;	
+	
+	private static final String MESSAGE_KEY = "index_exception";
+	private static final String FORMAT_STRING = 
+		"Index Exception.";	
+	
+	/**
+	 * Main constructor that provides a cause Exception
+	 * @param e
+	 */
+	public FeatureIndexException(Exception e) {
+        this(FORMAT_STRING, e, MESSAGE_KEY, serialVersionUID);
+	}
+
+    /**
+     * @see DataException#DataException(String, String, long)
+     */
+    public FeatureIndexException(String messageFormat, String messageKey,
+        long code) {
+        super(messageFormat, messageKey, code);
+    }
+
+    /**
+     * @see DataException#DataException(String, Throwable, String, long)
+     */
+    public FeatureIndexException(String messageFormat, Throwable cause,
+        String messageKey, long code) {
+        super(messageFormat, cause, messageKey, code);
+    }
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FeatureIndexException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FinishEditingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FinishEditingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FinishEditingException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class FinishEditingException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 5568229519842721381L;
+
+	private final static String MESSAGE_FORMAT = "Can't finish edition.";
+	private final static String MESSAGE_KEY = "_FinishEditingException";
+
+	public FinishEditingException(Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/FinishEditingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteEditableFeatureException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteEditableFeatureException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteEditableFeatureException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreDeleteEditableFeatureException extends DataException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -996334019316255990L;
+
+	private final static String MESSAGE_FORMAT = "Can't delete an editable feature in store %(store)s.";
+	private final static String MESSAGE_KEY = "_DeleteEditableFeatureException";
+
+	public StoreDeleteEditableFeatureException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("store", store);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteEditableFeatureException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IteratorIndexTooBigException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IteratorIndexTooBigException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IteratorIndexTooBigException.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+
+/**
+ * Exception thrown when the index value for an iterator of a {@link FeatureSet}
+ * is too big.
+ * 
+ * @see FeatureSet#iterator(long)
+ * @see FeatureSet#fastIterator(long)
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class IteratorIndexTooBigException extends DataException {
+	
+	private static final long serialVersionUID = -2774419869818426273L;
+	
+	private final static String MESSAGE_FORMAT =
+			"The index value %(value) is bigger than the "
+					+ "Iterator maximum value: %(maxValue)";
+	private final static String MESSAGE_KEY = "_IteratorIndexTooBigException";
+
+	/**
+	 * Creates a new {@link IteratorIndexTooBigException}.
+	 * 
+	 * @param value
+	 *            the wanted Iterator index value
+	 * @param maxValue
+	 *            the maximum Iterator index value
+	 */
+	public IteratorIndexTooBigException(long value, long maxValue) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("value", new Long(value));
+		setValue("maxValue", new Long(maxValue));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IteratorIndexTooBigException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionStateException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionStateException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionStateException.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SelectionStateException extends DataException {
+
+    private final static String MESSAGE_FORMAT = "Error getting or setting the selection state";
+    private final static String MESSAGE_KEY = "_SelectionStateException";
+
+    private static final long serialVersionUID = -1183610070098605104L;
+
+    /**
+     * Creates a new SelectionStateException.
+     */
+    public SelectionStateException() {
+        super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+    }
+
+    /**
+     * Creates a new SelectionStateException with a cause.
+     */
+    public SelectionStateException(Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/SelectionStateException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureTypeException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class IllegalFeatureTypeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -3151888912258726109L;
+	private final static String MESSAGE_FORMAT = "Feature type not allowed for the store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_IllegalFeatureTypeException";
+
+	public IllegalFeatureTypeException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/IllegalFeatureTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeNotSuportedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeNotSuportedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeNotSuportedException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class AttributeFeatureTypeNotSuportedException extends DataException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 7317879648245754186L;
+	private final static String MESSAGE_FORMAT = "Attribute type %(typeValue)s ('%(typeName)s') of attribute '%(attrname)s' no supported for '%(storeName)s'.";
+	private final static String MESSAGE_KEY = "_AttributeFeatureTypeNotSuportedException";
+
+	public AttributeFeatureTypeNotSuportedException(String attrname,
+			int typeValue,
+			String typeName, String storeName) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("attrname", attrname);
+		setValue("typeValue", "" + typeValue);
+		setValue("typeName", typeName);
+		setValue("storeName", storeName);
+
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/AttributeFeatureTypeNotSuportedException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ValidateFeaturesException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ValidateFeaturesException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ValidateFeaturesException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class ValidateFeaturesException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 6175223093153209836L;
+	private final static String MESSAGE_FORMAT = "Can't validate features of store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_ValidateFeaturesException";
+
+	public ValidateFeaturesException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ValidateFeaturesException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnknownDataTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnknownDataTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnknownDataTypeException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class UnknownDataTypeException extends DataException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7481521283837021787L;
+	private final static String MESSAGE_FORMAT = "Unknown data type '%(typeValue)s' of attribute '%(attrname)s' from '%(storeName)s'.";
+	private final static String MESSAGE_KEY = "_UnknownDataTypeException";
+
+	public UnknownDataTypeException(String attrname,
+			String typeValue,
+			String storeName) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("attrname", attrname);
+		setValue("typeValue", typeValue);
+		setValue("storeName", storeName);
+
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/UnknownDataTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteFeatureException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteFeatureException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteFeatureException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class StoreDeleteFeatureException extends DataException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 5730673193453142604L;
+	private final static String MESSAGE_FORMAT = "Can't delete feature in store %(store)s.";
+	private final static String MESSAGE_KEY = "_StoreDeleteFeatureException";
+
+	public StoreDeleteFeatureException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		this.setValue("store", store);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/StoreDeleteFeatureException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/GetFeatureTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/GetFeatureTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/GetFeatureTypeException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class GetFeatureTypeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 6691256137001562925L;
+	private final static String MESSAGE_FORMAT = "Can't get feature type of store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_GetFeatureTypeException";
+
+	public GetFeatureTypeException(Throwable cause, String store) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/GetFeatureTypeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ReversedSelectionIteratorException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ReversedSelectionIteratorException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ReversedSelectionIteratorException.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+
+/**
+ * For errors when creating an iterator from a reversed selection.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class ReversedSelectionIteratorException extends DataRuntimeException {
+
+    private final static String MESSAGE_FORMAT = "Error getting the Features of a reversed selection";
+    private final static String MESSAGE_KEY = "_ReversedSelectionIteratorException";
+
+    private static final long serialVersionUID = -1183610070098605104L;
+
+    /**
+     * Creates a new SelectionStateException.
+     */
+    public ReversedSelectionIteratorException() {
+        super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+    }
+
+    /**
+     * Creates a new SelectionStateException with a cause.
+     */
+    public ReversedSelectionIteratorException(Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ReversedSelectionIteratorException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.feature.exception package documentation</title>
+</head>
+<body>
+
+<p>Provides DAL's feature level exceptions.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ConcurrentDataModificationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ConcurrentDataModificationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ConcurrentDataModificationException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.exception;
+
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+
+public class ConcurrentDataModificationException extends DataRuntimeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -8352205502388246169L;
+	private final static String MESSAGE_FORMAT = "Concurrent modification in store '%(store)s'.";
+	private final static String MESSAGE_KEY = "_ConcurrentDataModificationException";
+
+	public ConcurrentDataModificationException(String store) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/exception/ConcurrentDataModificationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndex.java	(revision 42196)
@@ -0,0 +1,165 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+
+
+/**
+ * This interface represents a local index on feature based data.
+ * 
+ * All indexes are stored in local files. Creating server 
+ * side indexes is not supported.
+ * 
+ * 
+ * @author jyarza
+ *
+ */
+public interface FeatureIndex {
+	
+	/** Index name */
+	public String getName();
+	
+	/** Attribute names */
+	public List getAttributeNames();
+	
+	/** Data type */
+	public int getDataType();
+	
+	/**
+	 * Inserts a Feature in the index.
+	 * The Feature must contain a column that matches this index's column (name and data type)
+	 * @param feat
+	 */
+    public void insert(Feature feat) throws DataException;
+
+	/**
+	 * Inserts a FeatureSet into this index
+	 * FeatureType is not checked so it will accept any FeatureType
+	 * as long as exists a column with a valid name
+	 */	
+	public void insert(FeatureSet data) throws DataException;
+	
+	/**
+	 * Deletes a Feature in the index.
+	 * The Feature must contain a column that matches this index's column (name and data type)
+	 * @param feat
+	 */
+    public void delete(Feature feat) throws DataException;
+
+	/**
+	 * Deletes a FeatureSet from this index
+	 * FeatureType is not checked so it will accept any FeatureType
+	 * as long as exists a column with a valid name
+	 */	
+	public void delete(FeatureSet data) throws FeatureIndexException;	
+	
+	/**
+	 * Returns a FeatureSet with the set of values that match the given value. 
+	 * 
+	 * @param value 
+	 * 			is the value to match.
+	 * @return
+	 * 		a FeatureSet containing the values in the index that match the given value.
+	 * 
+	 * @throws FeatureIndexException
+	 */
+	public FeatureSet getMatchFeatureSet(Object value)
+			throws FeatureIndexException;
+
+	/**
+	 * Returns a FeatureSet with the set of values that belong to the range defined by value1 and value2.
+	 * 
+	 * @param value1
+	 * 			range lower limit.
+	 * 
+	 * @param value2
+	 * 			range higher limit.
+	 * 
+	 * @return
+	 * 		a FeatureSet with the set of values that belong to the range defined by value1 and value2.
+	 * 
+	 * @throws FeatureIndexException
+	 */
+	public FeatureSet getRangeFeatureSet(Object value1, Object value2)
+			throws FeatureIndexException;
+
+	/**
+	 * Returns a FeatureSet with the set of up to <code>count</code> values that are nearest to the given value.
+	 * 
+	 * @param count
+	 * 			maximum number of values that their resulting FeatureSet will return
+	 * 
+	 * @param value
+	 * 			the value around which the nearest <code>count</code> will be looked up.
+	 * 
+	 * @return
+	 * 		a FeatureSet with the set of up to <code>count</code> values that are nearest to the given value.
+	 * 
+	 * @throws FeatureIndexException
+	 */
+	public FeatureSet getNearestFeatureSet(int count, Object value)
+			throws FeatureIndexException;
+
+	/**
+	 * Returns a FeatureSet with the set of up to <code>count</code> values whose distance to the given value
+	 * is not greater than <code>tolerance</code>
+	 * 
+	 * @param count
+	 * 			maximum number of values that their resulting FeatureSet will return
+	 * 
+	 * @param value
+	 * 			the value around which the nearest <code>count</code> will be looked up.
+	 * 
+	 * @param tolerance
+	 * 			maximum distance from the given value.
+	 * 
+	 * @return
+	 * 		a FeatureSet with the set of up to <code>count</code> values that are nearest to the given value.
+	 * 
+	 * @throws FeatureIndexException
+	 */
+	public FeatureSet getNearestFeatureSet(int count, Object value, 
+			Object tolerance) throws FeatureIndexException;
+
+	
+    /**
+     * Returns if the index is valid and might be used to get Features.
+     * 
+     * @return if the index is valid
+     */
+    public boolean isValid();
+
+    /**
+     * Returns if the index is in the process of being filled with the Features
+     * of a store.
+     * 
+     * @return if the index is filling with data
+     */
+    public boolean isFilling();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureIndex.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeature.java	(revision 42196)
@@ -0,0 +1,320 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Date;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+
+/**
+ * This interface represents a Feature in editable state. To edit a Feature
+ * you have to obtain its instance of EditableFeature and then perform editing
+ * operations on it. Once you have completed the editing you can save the changes
+ * to the original Feature. This is the only way to edit a Feature.
+ */
+public interface EditableFeature extends Feature {
+
+	/**
+	 * Sets the value of an attribute given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void set(String name, Object value);
+
+	/**
+	 * Sets the value of an attribute given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void set(int index, Object value);
+
+	/**
+	 * Sets the value of an attribute of type integer, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setInt(String name, int value);
+
+	/**
+	 * Sets the value of an attribute of type integer, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setInt(int index, int value);
+
+	/**
+	 * Sets the value of an attribute of type boolean, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setBoolean(String name, boolean value);
+
+	/**
+	 * Sets the value of an attribute of type boolean, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setBoolean(int index, boolean value);
+
+	/**
+	 * Sets the value of an attribute of type long, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setLong(String name, long value);
+
+	/**
+	 * Sets the value of an attribute of type long, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setLong(int index, long value);
+
+	/**
+	 * Sets the value of an attribute of type float, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setFloat(String name, float value);
+
+	/**
+	 * Sets the value of an attribute of type float, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setFloat(int index, float value);
+
+	/**
+	 * Sets the value of an attribute of type double, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setDouble(String name, double value);
+
+	/**
+	 * Sets the value of an attribute of type double, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setDouble(int index, double value);
+
+	/**
+	 * Sets the value of an attribute of type date, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setDate(String name, Date value);
+
+	/**
+	 * Sets the value of an attribute of type date, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setDate(int index, Date value);
+
+	/**
+	 * Sets the value of an attribute of type string, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setString(String name, String value);
+
+	/**
+	 * Sets the value of an attribute of type string, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setString(int index, String value);
+
+	/**
+	 * Sets the value of an attribute of type byte, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setByte(String name, byte value);
+
+	/**
+	 * Sets the value of an attribute of type byte, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setByte(int index, byte value);
+
+	/**
+	 * Sets the value of an attribute of type geometry, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setGeometry(String name, Geometry value);
+
+	/**
+	 * Sets the value of an attribute of type geometry, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setGeometry(int index, Geometry value);
+
+	/**
+	 * Sets the value of an attribute of type array, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setArray(String name, Object[] value);
+
+	/**
+	 * Sets the value of an attribute of type array, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setArray(int index, Object[] value);
+
+	/**
+	 * Sets the value of an attribute of type feature, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setFeature(String name, Feature value);
+
+	/**
+	 * Sets the value of an attribute of type feature, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setFeature(int index, Feature value);
+
+	/**
+	 * Returns the Feature from which this EditableFeature was created
+	 *
+	 * @return Feature from which this EditableFeature was created
+	 */
+	public Feature getSource();
+
+	/**
+	 * Returns a non editable copy of the Feature.
+	 *
+	 * @return non editable copy of the Feature.
+	 */
+	public Feature getNotEditableCopy();
+
+	/**
+	 * Sets de value of the default geometry attribute.
+	 *
+	 * @param value geometry to set.
+	 */
+	public void setDefaultGeometry(Geometry value);
+	
+	/**
+	 * Copies the values of all attributes from the source feature to this feature
+	 * 
+	 * @param source
+	 * 			source feature from which the values will be copied.
+	 */
+	public void copyFrom(Feature source);	
+	
+	/**
+     * Sets the value of an attribute of type instant, given its name
+     * @param name
+     *          attribute's name
+     * @param value
+     *          value to set
+     */
+	public void setInstant(String name, Instant value);
+
+	/**
+     * Sets the value of an attribute of type instant, given its index
+     * @param index
+     *          attribute's index
+     * @param value
+     *          value to set
+     */
+	public void setInstant(int index, Instant value);  
+
+	/**
+     * Sets the value of an attribute of type interval, given its name
+     * @param name
+     *          attribute's name
+     * @param value
+     *          value to set
+     */
+	public void setInterval(String name, Interval value);
+
+	/**
+     * Sets the value of an attribute of type interval, given its index
+     * @param index
+     *          attribute's index
+     * @param value
+     *          value to set
+     */
+	public void setInterval(int index, Interval value); 
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/CheckMandatoryAttributesRule.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/CheckMandatoryAttributesRule.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/CheckMandatoryAttributesRule.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.rule;
+
+import org.gvsig.fmap.dal.feature.FeatureRule;
+
+
+
+/**
+ * 
+ * Empty interface to tag the FeatureRule that check the
+ * compliance of mandatory attributes. This is used to
+ * check if there is already a rule that checks this
+ * in a certain feature type.
+ * 
+ * @author jldominguez
+ *
+ */
+public interface CheckMandatoryAttributesRule extends FeatureRule {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/CheckMandatoryAttributesRule.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/FeatureRulePolygon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/FeatureRulePolygon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/FeatureRulePolygon.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.rule;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureRule;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Surface;
+
+
+public class FeatureRulePolygon extends AbstractFeatureRule {
+	private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	
+	public FeatureRulePolygon() {
+		super("RulePolygon", "Ensure orientation of geometry");
+	}
+
+	public void validate(Feature feature, FeatureStore store)
+			throws DataException {
+
+        try {
+			Geometry geom = feature.getDefaultGeometry();
+			GeneralPathX gp = new GeneralPathX();
+			gp.append(geom.getPathIterator(null, geomManager.getFlatness()), true);
+
+			if (gp.isClosed()) {
+				if (gp.isCCW()) {
+					gp.flip();
+					GeometryManager geomManager = GeometryLocator.getGeometryManager();
+					Surface surface = (Surface)geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
+					surface.setGeneralPath(gp);
+					geom = surface;
+	        		EditableFeature editable = feature.getEditable();
+					editable.setDefaultGeometry(geom);
+					store.update(editable);
+				}
+	        }
+		} catch (Exception e) {
+			throw new FeatureRulePolygonException(e, store.getName());
+		}
+	}
+
+	public class FeatureRulePolygonException extends DataException {
+
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = -3014970171661713021L;
+		private final static String MESSAGE_FORMAT = "Can't apply rule  in store %(store)s.";
+		private final static String MESSAGE_KEY = "_FeatureRulePolygonException";
+
+		public FeatureRulePolygonException(Throwable cause, String store) {
+			super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+			this.setValue("store", store);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/FeatureRulePolygon.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.feature.rule package documentation</title>
+</head>
+<body>
+
+<p>Provides API for feature rules.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/rule/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeEmulator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeEmulator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeEmulator.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.tools.dataTypes.DataType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface FeatureAttributeEmulator {
+    
+    public Object get(Feature feature);
+    
+    public void set(EditableFeature feature, Object value);
+    
+    public boolean allowSetting();
+    
+    public String[] getRequiredFieldNames();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureAttributeEmulator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPool.java	(revision 42196)
@@ -0,0 +1,35 @@
+
+
+package org.gvsig.fmap.dal;
+
+import java.util.Iterator;
+import org.gvsig.tools.persistence.Persistent;
+
+
+public interface DataServerExplorerPool extends Persistent {
+    
+    
+    public void add(String name, DataServerExplorerParameters explorer);
+
+    public void add(String name, String description, DataServerExplorerParameters explorer);
+    
+    public boolean contains(String name);
+    
+    public boolean contains(DataServerExplorerPoolEntry entry);
+    
+    public boolean isEmpty();
+    
+    public void remove(DataServerExplorerPoolEntry explorer);
+    
+    public void remove(int explorerIndex);
+    
+    public void remove(String name);
+    
+    public int size();
+    
+    public DataServerExplorerPoolEntry get(int index);
+
+    public DataServerExplorerPoolEntry get(String name);
+    
+    public Iterator iterator();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProviderServices.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataStore;
+
+/**
+ * Base interface of Services for data providers
+ *
+ * @author jmvivo
+ *
+ */
+public interface DataStoreProviderServices {
+
+	public static final String BASE_PARAMETERS_PROVIDER_DEFINITION_NAME = "ProviderParameters";
+	public static final String BASE_PARAMETERS_PROVIDER_DEFINITION_FULLNAME = "DAL:"+BASE_PARAMETERS_PROVIDER_DEFINITION_NAME;
+	
+	public static final String BASE_NEWPARAMETERS_PROVIDER_DEFINITION_NAME = "NewProviderParameters";
+	public static final String BASE_NEWPARAMETERS_PROVIDER_DEFINITION_FULLNAME = "DAL:"+BASE_NEWPARAMETERS_PROVIDER_DEFINITION_NAME;
+	
+	public static final String PROVIDER_PARAMTER_NAME = "ProviderName";
+	public static final String PROVIDER_PARAMTER_FULLNAME = "DAL:"+PROVIDER_PARAMTER_NAME;
+
+
+	/**
+	 * Return the Store instance
+	 * 
+	 * @return
+	 */
+	public DataStore getStore();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+
+/**
+ * Interface for all DataStore factories. Each type or set of types of stores
+ * register a factory. A factory is capable of building one or more types of
+ * stores throught its parameters.
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public interface DataStoreFactory {
+
+	/**
+	 * Sets DataParameters object
+	 * @param parameters
+	 */
+	public void setParameters(DataParameters parameters);
+	
+	/**
+	 * Builds a specific kind of store
+	 * @return
+	 */
+	public DataStore createStore() throws InitializeException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ProviderNotRegisteredException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ProviderNotRegisteredException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ProviderNotRegisteredException.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class ProviderNotRegisteredException extends DataException {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 4873697202452898968L;
+	private final static String MESSAGE_FORMAT = "'%(providerName) not registered'.";
+	private final static String MESSAGE_KEY = "_ProviderNotRegisteredException";
+
+	public ProviderNotRegisteredException(String providerName) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("providerName", providerName);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ProviderNotRegisteredException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/WriteException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/WriteException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/WriteException.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+/**
+ * FIXME
+ *
+ *
+ */
+
+public class WriteException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 3656543768356545436L;
+	private final static String MESSAGE_FORMAT = "Exception writing '%(resource)'.";
+	private final static String MESSAGE_KEY = "_WriteException";
+
+	public WriteException(String resource, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+	
+	protected WriteException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/WriteException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+public class DataEvaluatorException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 4694862217382272837L;
+	private final static String MESSAGE_FORMAT = "Evaluator exception";
+	private final static String MESSAGE_KEY = "_DataEvaluatorException";
+
+	public DataEvaluatorException(Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/FileNotFoundException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/FileNotFoundException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/FileNotFoundException.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+import java.io.File;
+
+public class FileNotFoundException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 8748874874719052534L;
+	private final static String MESSAGE_FORMAT = "File '%(file)' not found.";
+	private final static String MESSAGE_KEY = "_OpenException";
+
+	public FileNotFoundException(String filePath) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("file", filePath);
+	}
+
+	public FileNotFoundException(File file) {
+		this(file.getAbsolutePath());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/FileNotFoundException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/RemoveException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/RemoveException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/RemoveException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class RemoveException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -4463253141583983345L;
+	private final static String MESSAGE_FORMAT = "Exception removing '%(resource)'.";
+	private final static String MESSAGE_KEY = "_RemoveException";
+
+	public RemoveException(String resource, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/RemoveException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedVersionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedVersionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedVersionException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+public class UnsupportedVersionException extends DataException {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 4614439562201218739L;
+	private final static String MESSAGE_FORMAT = "Version '%(formatVersion) of '%(storeName)' not supported'.";
+	private final static String MESSAGE_KEY = "_UnsupportedVersionException";
+
+	public UnsupportedVersionException(String storeName, String formatVersion) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("storeName", storeName);
+		setValue("formatVersion", formatVersion);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedVersionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyParametersException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyParametersException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyParametersException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class CopyParametersException extends DataRuntimeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -401333851837941591L;
+	private final static String MESSAGE_FORMAT = "Exception in copy '%(name)'.";
+	private final static String MESSAGE_KEY = "_CopyParametersException";
+
+	public CopyParametersException(String name, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("name", name);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyParametersException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.exception package documentation</title>
+</head>
+<body>
+
+<p>Provides DAL's top level exceptions.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedEncodingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedEncodingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedEncodingException.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+public class UnsupportedEncodingException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 7149758900102271415L;
+	private final static String MESSAGE_FORMAT = "Unsupported encoding Exception.";
+	private final static String MESSAGE_KEY = "_UnsupportedEncodingException";
+
+	public UnsupportedEncodingException(Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/UnsupportedEncodingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ServerExplorerAddException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ServerExplorerAddException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ServerExplorerAddException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class ServerExplorerAddException extends DataException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6146358748129171538L;
+	private final static String MESSAGE_FORMAT = "Exception creating '%(store)'.";
+	private final static String MESSAGE_KEY = "_ServerExplorerAddException";
+
+	public ServerExplorerAddException(String store, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ServerExplorerAddException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloneException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloneException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloneException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public class CloneException extends DataRuntimeException {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -6605425077113421529L;
+
+    /**
+     * 
+     * @param cause
+     */
+    public CloneException(Throwable cause) {
+        
+        super("Cannot clone object.", cause,
+            "_Cannot_clone_object", serialVersionUID);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloneException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorRuntimeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorRuntimeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorRuntimeException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.fmap.dal.exception;
+
+
+public class DataEvaluatorRuntimeException extends DataRuntimeException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 957625345447753115L;
+	private final static String MESSAGE_FORMAT = "Evaluator exception.";
+	private final static String MESSAGE_KEY = "_DataEvaluatorRuntimeException";
+
+	public DataEvaluatorRuntimeException(Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataEvaluatorRuntimeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/OpenException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/OpenException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/OpenException.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class OpenException extends DataException {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -8318431541669401823L;
+	private final static String MESSAGE_FORMAT = "Exception opening '%(store)'.";
+	private final static String MESSAGE_KEY = "_OpenException";
+
+	public OpenException(String store, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/OpenException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/InitializeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/InitializeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/InitializeException.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+public class InitializeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -3054877505579218816L;
+	private final static String MESSAGE_FORMAT = "Exception intializing '%(resource)'.";
+	private final static String MESSAGE_KEY = "_InitializeException";
+
+	public InitializeException(String resource, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+
+	public InitializeException(Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", "{unknow}");
+	}
+
+	protected InitializeException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	protected InitializeException(String messageFormat, String messageKey,
+			long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/InitializeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CreateException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CreateException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CreateException.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class CreateException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 9186224366705822305L;
+	private final static String MESSAGE_FORMAT = "Exception creating '%(resource)'.";
+	private final static String MESSAGE_KEY = "_CreateException";
+
+	public CreateException(String resource, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+
+	protected CreateException(String messageFormat, String messageKey,
+			long serialversionuid2) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CreateException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataListException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataListException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataListException.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.exception.ListBaseException;
+
+public abstract class DataListException extends ListBaseException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -131815899234291797L;
+
+	protected Map values = new HashMap();
+
+	public DataListException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	public DataListException(String messageFormat, String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+	protected void setValue(String name, String value) {
+		this.values.put(name, value);
+	}
+
+	protected Map values() {
+		return this.values;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataListException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloseException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloseException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloseException.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+/**
+ * FIXME
+ *
+ */
+
+public class CloseException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 9186224366705822305L;
+	private final static String MESSAGE_FORMAT = "Exception closing '%(store)s'.";
+	private final static String MESSAGE_KEY = "_CloseException";
+
+	public CloseException(String store, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CloseException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ValidateDataParametersException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ValidateDataParametersException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ValidateDataParametersException.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class ValidateDataParametersException extends DataListException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 3286674610036657162L;
+
+	private final static String MESSAGE_FORMAT = "Checks parameters";
+	private final static String MESSAGE_KEY = "_ValidateDataParametersException";
+
+	public ValidateDataParametersException() {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+
+	public ValidateDataParametersException(Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        }
+        
+        protected ValidateDataParametersException(String fmt, Throwable cause, String msgkey, int code) {
+            super(fmt, cause, msgkey, code);
+        }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ValidateDataParametersException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataException.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+
+public abstract class DataException extends BaseException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -1951723534438433226L;
+
+	protected Map values = new HashMap();
+
+	public DataException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	public DataException(String messageFormat, String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+	protected void setValue(String name, String value) {
+		this.values.put(name, value);
+	}
+
+	protected Map values() {
+		return this.values;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ParameterMissingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ParameterMissingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ParameterMissingException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class ParameterMissingException extends DataException {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 2572750697666854452L;
+	private final static String MESSAGE_FORMAT = "Missing parameter '%(parameterName)'.";
+	private final static String MESSAGE_KEY = "_ParameterMissingException";
+
+	public ParameterMissingException(String parameterName) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("parameterName", parameterName);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ParameterMissingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class CopyException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 6998431565823817880L;
+	private final static String MESSAGE_FORMAT = "Exception in copy '%(name)s'.";
+	private final static String MESSAGE_KEY = "_CopyException";
+
+	public CopyException(String name, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("name", name);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CopyException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+
+/**
+ * FIXME
+ *
+ *
+ */
+
+public class ReadException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -8512708060535066804L;
+	private final static String MESSAGE_FORMAT = "Exception reading '%(store)'.";
+	private final static String MESSAGE_KEY = "_ReadException";
+
+	public ReadException(String store, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+        
+        protected ReadException(String fmt, Throwable cause, String msgkey, int code) {
+            super(fmt, cause, msgkey, code);
+        }        
+        
+        protected ReadException(String fmt, Throwable cause, String msgkey, long code) {
+            super(fmt, cause, msgkey, code);
+        }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataRuntimeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataRuntimeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataRuntimeException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+public abstract class DataRuntimeException extends BaseRuntimeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -5882808169007262182L;
+	protected Map values = new HashMap();
+
+	public DataRuntimeException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	public DataRuntimeException(String messageFormat, String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+	protected void setValue(String name, String value) {
+		this.values.put(name, value);
+	}
+
+	protected Map values() {
+		return this.values;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/DataRuntimeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadRuntimeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadRuntimeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadRuntimeException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+* AUTHORS (In addition to CIT):
+* 2008 {{Company}}   {{Task}}
+*/
+
+
+package org.gvsig.fmap.dal.exception;
+
+
+public class ReadRuntimeException extends DataRuntimeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7756645643644789613L;
+	private final static String MESSAGE_FORMAT = "Exception reading from a store of type '%(store)'.";
+	private final static String MESSAGE_KEY = "_ReadRuntimeException";
+
+	public ReadRuntimeException(String store, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/ReadRuntimeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/LoadException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/LoadException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/LoadException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.exception;
+
+public class LoadException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private final static String MESSAGE_FORMAT = "Can't load '%(resource)'.";
+	private final static String MESSAGE_KEY = "_OpenException";
+
+	public LoadException(Throwable cause, String resource) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/LoadException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal package documentation</title>
+</head>
+<body>
+
+<p>Provides DAL's top level abstraction API.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSelection.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Implement data selection}
+ */
+package org.gvsig.fmap.dal;
+
+/**
+ * Interface to manage selection of objects from an undetermined set.
+ * 
+ * @author <a href="mailto:cordin@disid.com">César Ordiñana</a>
+ */
+public interface DataSelection extends DataSet {
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoveragerStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoveragerStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoveragerStoreParameters.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.raster;
+
+
+public interface CoveragerStoreParameters {
+
+	public String getDataStoreName();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoveragerStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.raster package documentation</title>
+</head>
+<body>
+
+<p>Provides API for accessing and managing raster data.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSelection.java	(revision 42196)
@@ -0,0 +1,29 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.raster;
+
+public interface CoverageSelection extends CoverageSet {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSet.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.raster;
+
+import org.gvsig.fmap.dal.DataSet;
+
+public interface CoverageSet extends DataSet {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageStore.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.raster;
+
+import org.gvsig.fmap.dal.DataStore;
+
+public interface CoverageStore extends DataStore {
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/CoverageStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer.java	(revision 42196)
@@ -0,0 +1,153 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.Disposable;
+
+/**
+ * DataServerExplorer is an abstraction for any type of data server. It allows
+ * connecting to the server and browsing its contents.
+ *
+ * More specifically, this interface provides a list of the available data
+ * stores in a server.
+ */
+public interface DataServerExplorer extends Disposable {
+
+	/**
+	 * Returns the DataServerExplorer's name
+	 *
+	 * @return String containing this DataServerExplorer's name
+	 */
+	public String getProviderName();
+
+	/**
+	 * Indicates whether this DataServerExplorer can create a new DataStore in the
+	 * server.
+	 *
+	 * @return true if this DataServerExplorer can be created or false otherwise.
+	 */
+	public boolean canAdd();
+
+	/**
+	 * Indicates whether this DataServerExplorer can create a new DataStore in
+	 * the server, given the store name.
+	 *
+	 * @param storeName
+	 *            store name.
+	 *
+	 * @return true if this DataServerExplorer can create a new store or false
+	 *         otherwise.
+	 *
+	 * @throws DataException
+	 */
+	public boolean canAdd(String storeName)
+			throws DataException;
+
+	/**
+	 * Provides a list of available stores in the server.
+	 *
+	 * @return list of DataStoreParameters
+	 *
+	 * @throws DataException
+	 */
+	public List list() throws DataException;
+
+	public static final int MODE_ALL = 0;
+	public static final int MODE_FEATURE = 1;
+	public static final int MODE_GEOMETRY = 2;
+	public static final int MODE_RASTER = 4;
+
+	/**
+	 * Provides a list of available stores in the server of a type.
+	 * 
+	 * @param mode
+	 *            , filter store from a type: {@link #MODE_ALL},
+	 *            {@link #MODE_FEATURE}, {@link #MODE_FEATURE_GEOMETRY},
+	 *            {@link #MODE_RASTER}
+	 * 
+	 * @return list of DataStoreParameters
+	 * 
+	 * @throws DataException
+	 */
+	public List list(int mode) throws DataException;
+
+	/**
+	 * Creates a new DataStore in this server.
+	 *
+	 * @param parameters
+	 *            , an instance of DataStoreParameters from
+	 *            {@link DataServerExplorer#getAddParameters(String)} that
+	 *            describes the new DataStore.
+	 * @param overwrite
+	 *            if the store already exists
+	 *
+	 * @return true if the DataStoreParameters were successfully added, false
+	 *         otherwise.
+	 *
+	 * @throws DataException
+	 */
+	public boolean add(String provider, NewDataStoreParameters parameters, boolean overwrite)
+			throws DataException;
+
+	/**
+	 * Removes a store from the server given its DataStoreParameters. If the
+	 * store is a file then this method deletes the file, if it is a table in a
+	 * database then this method drops the table, and so on.
+	 *
+	 * @param parameters
+	 * @throws DataException
+	 */
+	void remove(DataStoreParameters parameters) throws DataException;
+
+	/**
+	 * Given the store's name, returns its parameters for creation.
+	 *
+	 * @param storeName
+	 *
+	 * @return parameters to create a store
+	 *
+	 * @throws DataException
+	 */
+	public NewDataStoreParameters getAddParameters(String storeName)
+			throws DataException;
+
+	/**
+	 * Returns this DataServerExplorer parameters
+	 *
+	 * @return an instance of DataServerExplorerParameters containing this
+	 *         DataServerExplorer parameters.
+	 */
+	public DataServerExplorerParameters getParameters();
+
+	/**
+	 * Return the list of provider names that this server allow.
+	 *  
+	 * @return List of provider names
+	 */
+	public List getDataStoreProviderNames();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLocator.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ *
+ * This locator is the entry point of gvSIG's DAL, providing access to all DAL services.
+ * DAL services are grouped in two managers {@link DataManager} and {@link ResourceManager}.
+ *
+ * This locator offers methods for registering as well as for obtaining both managers' unique instances.
+ *
+ * @see Locator
+ */
+public class DALLocator extends AbstractLocator {
+
+	private static final String LOCATOR_NAME = "DALLocator";
+
+	/**
+	 * DataManager name used by the locator to access the instance
+	 */
+	public static final String DATA_MANAGER_NAME = "DataManager";
+
+	private static final String DATA_MANAGER_DESCRIPTION = "DataManager of gvSIG Data Access Library";
+
+	/**
+	 * ResourceManager name used by the locator to access the instance
+	 */
+	public static final String RESOURCE_MANAGER_NAME = "ResourceManager";
+
+	private static final String RESOURCE_MANAGER_DESCRIPTION = "ResourceManager of gvSIG Data Access Library";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final DALLocator instance = new DALLocator();
+
+	/**
+	 * Return the singleton instance.
+	 *
+	 * @return the singleton instance
+	 */
+	public static DALLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Returns the Locator name.
+	 *
+	 * @return String containing the locator name.
+	 */
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+
+	/**
+	 * Return a reference to DataManager.
+	 *
+	 * @return a reference to DataManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static DataManager getDataManager() throws LocatorException {
+		return (DataManager) getInstance().get(DATA_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the DataManager interface.
+	 *
+	 * @param clazz
+	 *            implementing the DataManager interface
+	 */
+	public static void registerDataManager(Class clazz) {
+		getInstance().register(DATA_MANAGER_NAME, DATA_MANAGER_DESCRIPTION,
+				clazz);
+	}
+
+	/**
+	 * Registers a class as the default DataManager.
+	 *
+	 * @param clazz
+	 * 			  implementing the DataManager interface
+	 */
+	public static void registerDefaultDataManager(Class clazz) {
+		getInstance().registerDefault(DATA_MANAGER_NAME, DATA_MANAGER_DESCRIPTION,
+				clazz);
+	}
+
+	/**
+	 * Return a reference to ResourceManager.
+	 *
+	 * @return a reference to ResourceManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static ResourceManager getResourceManager() throws LocatorException {
+		return (ResourceManager) getInstance().get(RESOURCE_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the MDManager interface.
+	 *
+	 * @param clazz
+	 *            implementing the MDManager interface
+	 */
+	public static void registerResourceManager(Class clazz) {
+		getInstance().register(RESOURCE_MANAGER_NAME,
+				RESOURCE_MANAGER_DESCRIPTION, clazz);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/NewDataStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/NewDataStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/NewDataStoreParameters.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+/**
+ * This class is used to distinguish a new instance of DataStoreParameters
+ * that still needs to be initialized (and therefore lacks of any valid parameter 
+ * values), from a ready to use initialized instance.
+ * 
+ * @author jmvivo
+ *
+ */
+public interface NewDataStoreParameters extends DataStoreParameters {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/NewDataStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSet.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.Visitable;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * <p> Interface that represents a generic set of data. It may proceed either from a data 
+ * query, a user selection or a collection of locked elements.</p>
+ */
+public interface DataSet extends Visitable, Disposable {
+	
+	/**
+	 * Indicates whether this DataSet belongs to a specific store
+	 * @param store 
+	 * 			a DataStore   
+	 * @return true if this belongs to the given DataStore, false if not.
+	 */
+	public boolean isFromStore(DataStore store);
+
+    /**
+     * Provides each value of this Store to the provided {@link Visitor}.
+     * The values received through the {@link Visitor#visit(Object)} method
+     * may be transient, reused or externally modifiable, so they can't
+     * be used to be stored in any external form out of the visit method.
+     * 
+     * If you need to store any of the values out of the
+     * {@link Visitor#visit(Object)} method execution, create a copy or clone
+     * the received value in order to be stored.
+     * 
+     * @param visitor
+     *            the visitor to apply to each value.
+     * @exception BaseException
+     *                if there is an error while performing the visit
+     */
+    public void accept(Visitor visitor) throws BaseException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLibrary.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.ProjectionLibrary;
+
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.geom.GeometryLibrary;
+import org.gvsig.metadata.MetadataLibrary;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.timesupport.TimeSupportLibrary;
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Initializes gvSIG's desktop DAL by registering the default implementation for
+ * {@link DataManager} and {@link ResourceManager}.
+ * 
+ */
+public class DALLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsAPI(DALLibrary.class);
+        require(ToolsLibrary.class);
+        require(MetadataLibrary.class);
+        require(ProjectionLibrary.class);
+        require(GeometryLibrary.class);
+        require(TimeSupportLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        List exs = new ArrayList();
+
+        try {
+            registerDataStoreMetadataDefinition();
+        } catch (MetadataException e) {
+            exs.add(e);
+        }
+        try {
+            registerSpatialDataStoreMetadataDefinition();
+        } catch (MetadataException e) {
+            exs.add(e);
+        }
+        try {
+            registerFeatureStoreMetadataDefinition();
+        } catch (MetadataException e) {
+            exs.add(e);
+        }
+
+        // Validate there is any implementation registered.
+        DataManager dataManager = DALLocator.getDataManager();
+        if (dataManager == null) {
+            throw new ReferenceNotRegisteredException(
+                DALLocator.DATA_MANAGER_NAME, DALLocator.getInstance());
+        }
+
+        if (exs.size() > 0) {
+            throw new LibraryException(this.getClass(), exs);
+        }
+    }
+
+    private void registerDataStoreMetadataDefinition() throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(DataStore.METADATA_DEFINITION_NAME) == null) {
+            manager
+                .addDefinition(DataStore.METADATA_DEFINITION_NAME,
+                    DALLibrary.class
+                        .getResourceAsStream("MetadataDefinitions.xml"),
+                    DALLibrary.class.getClassLoader());
+        }
+    }
+
+    private void registerSpatialDataStoreMetadataDefinition()
+        throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(DataStore.SPATIAL_METADATA_DEFINITION_NAME) == null) {
+            manager
+                .addDefinition(DataStore.SPATIAL_METADATA_DEFINITION_NAME,
+                    DALLibrary.class
+                        .getResourceAsStream("MetadataDefinitions.xml"),
+                    DALLibrary.class.getClassLoader());
+        }
+    }
+
+    private void registerFeatureStoreMetadataDefinition()
+        throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(DataStore.FEATURE_METADATA_DEFINITION_NAME) == null) {
+            manager
+                .addDefinition(DataStore.FEATURE_METADATA_DEFINITION_NAME,
+                    DALLibrary.class
+                        .getResourceAsStream("MetadataDefinitions.xml"),
+                    DALLibrary.class.getClassLoader());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStore.java	(revision 42196)
@@ -0,0 +1,323 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.metadata.Metadata;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.RelativeInterval;
+import org.gvsig.timesupport.Time;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.ComplexWeakReferencingObservable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.visitor.Visitable;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * <p>
+ * This is the basic interface for all data stores. Depending on the context, it
+ * can represent a geographic layer, an alphanumeric database table or any data
+ * file. DataStore offers generic services like:
+ * <ul>
+ * <li>Open and close data stores</li>
+ * <li>Access to data sets, with the possibility of loading data in background.</li>
+ * <li>Use of selection and locks, as well as data sets</li>
+ * <li>Editing</li>
+ * <li>Register event observers through the Observable interface</li>
+ * <li>Access to embedded data stores (like GML)</li>
+ * <li>Information about the Spatial Reference Systems used by the data store</li>
+ * </ul>
+ * </p>
+ * <br>
+ *
+ */
+public interface DataStore extends ComplexWeakReferencingObservable,
+		Persistent, Metadata, Disposable, Visitable {
+
+	public static final String METADATA_DEFINITION_NAME = "DataProvider";
+
+	public static final String FEATURE_METADATA_DEFINITION_NAME = "FeatureProvider";
+
+	public static final String SPATIAL_METADATA_DEFINITION_NAME = "SpatialProvider";
+
+	/**
+	 * Metadata property name for the provider name provided by the data provider.
+	 * 
+	 * This metadata is provided by all data providers.
+	 */
+	public static final String METADATA_PROVIDER = "ProviderName";
+
+	/**
+	 * Metadata property name for Container name provided by the data provider.
+	 * By explample, in a dbf file, this is the name of dbf.
+	 * 
+	 * This metadata is provided by all data providers.
+	 */
+	public static final String METADATA_CONTAINERNAME = "ContainerName";
+
+	/**
+	 * Metadata property name for the feature type provided by the data provider.
+	 * 
+	 * This metadata is provided by all tabular data providers.
+	 */
+	public static final String METADATA_FEATURETYPE = "FeatureType";
+
+	/**
+	 * Metadata property name for CRS provided by the data provider.
+	 * 
+	 * This metadata is only provided by data provider with spatial 
+	 * information.
+	 */
+	public static final String METADATA_CRS = "CRS";
+
+	/**
+	 * Metadata property name for Envelope provided by the data provider
+	 * 
+	 * This metadata is only provided by data provider with spatial 
+	 * information.
+	 */
+	public static final String METADATA_ENVELOPE = "Envelope";
+
+	/**
+	 * Returns the name associated to the store.
+	 * This name is provided for informational purposes only.
+	 * Explamples:
+	 * 
+	 * In a dbf the filename without the path
+	 * 
+	 * In a DDBB table the name of the table
+	 * 
+	 * In a WFS layer the name of the layer.
+	 *
+	 * @return String containing this store's name.
+	 */
+	public String getName();
+	
+	/**
+	 * Returns a more descriptive name for the store that getName.
+	 * This name is provided for informational purposes only.
+	 * Explamples:
+	 * 
+	 * In a file based store may return the full name of the filename, path and filename.
+	 * 
+	 * In a data base based store may return "server:dbname:tablename"
+	 * 
+	 * In a WFS layer based store may return "server:layername"
+	 * 
+	 * @return String Containing the full name of the store
+	 */
+	public String getFullName();
+
+	/**
+	 * Return the of parameters of this store
+	 *
+	 * @return parameters of this store
+	 */
+	public DataStoreParameters getParameters();
+
+	/**
+	 * Return the provider name that use this store.
+	 * 
+	 * @return provider name of this store
+	 */
+	public String getProviderName();
+	
+	/**
+	 * Refreshes this store state.
+	 *
+	 * @throws DataException
+	 */
+	public void refresh() throws DataException;
+
+	/**
+	 * Returns all available data.
+	 *
+	 * @return a set of data
+	 * @throws DataException
+	 *             if there is any error while loading the data
+	 */
+	DataSet getDataSet() throws DataException;
+
+	/**
+	 * Returns a subset of data taking into account the properties and
+	 * restrictions of the DataQuery.
+	 *
+	 * @param dataQuery
+	 *            defines the properties of the requested data
+	 * @return a set of data
+	 * @throws DataException
+	 *             if there is any error while loading the data
+	 */
+	DataSet getDataSet(DataQuery dataQuery) throws DataException;
+
+    /**
+     * Provides each value of this Store to the provided {@link Visitor}.
+     * The values received through the {@link Visitor#visit(Object)} method
+     * may be transient, reused or externally modifiable, so they can't
+     * be used to be stored in any external form out of the visit method.
+     * 
+     * If you need to store any of the values out of the
+     * {@link Visitor#visit(Object)} method execution, create a copy or clone
+     * the received value in order to be stored.
+     * 
+     * @param visitor
+     *            the visitor to apply to each value.
+     * @exception BaseException
+     *                if there is an error while performing the visit
+     */
+    public void accept(Visitor visitor) throws BaseException;
+
+	/**
+     * Provides each value of this Store to the provided {@link Visitor}.
+     * The values received through the {@link Visitor#visit(Object)} method
+     * may be transient, reused or externally modifiable, so they can't
+     * be used to be stored in any external form out of the visit method.
+     * 
+     * If you need to store any of the values out of the
+     * {@link Visitor#visit(Object)} method execution, create a copy or clone
+     * the received value in order to be stored.
+     * 
+     * @param visitor
+     *            the visitor to apply to each value.
+     * @param dataQuery
+     *            defines the properties of the data to visit
+     * @exception BaseException
+     *                if there is an error while performing the visit
+     */
+	public void accept(Visitor visitor, DataQuery dataQuery)
+			throws BaseException;
+
+	/**
+	 * Loads all available data and notifies the observer for each loaded block of data.
+	 *
+	 * @param observer
+	 *            to be notified for each block of data loaded
+	 * @throws DataException
+	 *             if there is any error while loading the data
+	 */
+	void getDataSet(Observer observer) throws DataException;
+
+	/**
+	 * Loads a subset of data taking into account the properties and
+	 * restrictions of the DataQuery. Data loading is performed by calling the
+	 * Observer, once each data block is loaded.
+	 *
+	 * @param dataQuery
+	 *            defines the properties of the requested data
+	 * @param observer
+	 *            to be notified for each block of data loaded
+	 * @throws DataException
+	 *             if there is any error while loading the data
+	 */
+	void getDataSet(DataQuery dataQuery, Observer observer) throws DataException;
+
+	/**
+	 * Returns the selected set of data
+	 *
+	 * @return DataSet
+	 */
+
+	public DataSet getSelection() throws DataException;
+
+	/**
+	 * Sets the current data selection with the given data set.
+	 *
+	 * @param DataSet
+	 *            selection
+	 * @throws DataException
+	 */
+	public void setSelection(DataSet selection) throws DataException;
+
+	/**
+	 * Creates a new selection.
+	 *
+	 * @return DataSet that contains the selection
+	 *
+	 * @throws DataException
+	 */
+	public DataSet createSelection() throws DataException;
+
+	/**
+	 * Returns an iterator over this store children
+	 *
+	 * @return Iterator over this DataStore children
+	 */
+	public Iterator getChildren();
+
+	/**
+	 * Returns the DataServerExplorer to which this DataStore belongs, if there
+	 * is any.
+	 * 
+	 * @return DataServerExplorer to which this DataStore belongs, or
+	 *         <code>null</code> if this was not accessed through any
+	 *         DataServerExplorer.
+	 * 
+	 * @throws DataException
+	 * @throws ValidateDataParametersException
+	 */
+	public DataServerExplorer getExplorer() throws DataException,
+			ValidateDataParametersException;
+
+
+	/**
+	 * Returns a new instance of a {@link DataQuery}.
+	 *
+	 * @return new {@link DataQuery} instance.
+	 *
+	 * @throws DataException
+	 */
+	public DataQuery createQuery();
+	
+	/**
+	 * Gets the {@link Interval} of the store, that means the temporal
+	 * interval where the store has valid data.
+	 * @return
+	 *         a time interval or null if there is not time support
+	 */
+	public Interval getInterval();
+	
+	/**
+	 * Gets all the possible values of time for which the store has data.  
+	 * @return
+	 *         a collection of {@link Time} objects.
+	 */
+	public Collection getTimes();
+	
+	/**
+	 * Gets all the possible values of time for which the store has data
+	 * and intersects with an interval.
+	 * @param interval
+	 *         the interval of time
+	 * @return
+	 *         a collection of {@link Time} objects.
+	 */
+	public Collection getTimes(Interval interval);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProviderFactory.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.service.spi.ProviderFactory;
+
+public interface DataStoreProviderFactory extends ProviderFactory {
+	
+	public static final int UNKNOWN = 0;
+	public static final int YES = 1;
+	public static final int NO = 2;
+	
+	/**
+	 * Returns the name of the provider
+	 * 
+	 * @return name of the provider
+	 */
+	public String getName();
+	
+	/**
+	 * Return a short descripion about the provider
+	 * 
+	 * @return description about the provider
+	 */
+	public String getDescription();
+	
+	/**
+	 * The provider has read support
+	 * 
+	 * @return YES if has read support
+	 */
+	public int allowRead();
+	
+	/**
+	 * The provider has write support
+	 * 
+	 * @return YES if has write support
+	 */
+	public int allowWrite();
+
+	/**
+	 * The provider can create new stores.
+	 * 
+	 * @return YES if has creation support
+	 */
+	public int allowCreate();
+
+	/**
+	 * The provider has tabular support.
+	 * This support is the minimum requisite for a FeatureStore.
+	 * 
+	 * @return YES if has write support
+	 */
+	public int hasTabularSupport();
+
+	/**
+	 * The provider has vectorial support.
+	 * 
+	 * @return YES if has vectorial support
+	 */
+	public int hasVectorialSupport();
+	
+	/**
+	 * The provider has raster support.
+	 * 
+	 * @return YES if has raster support
+	 */
+	public int hasRasterSupport();
+		
+	/**
+	 * Builds a specific provider
+	 * 
+	 * @return the provider
+	 */
+	public DataStoreProvider createProvider(DataParameters parameters, DataStoreProviderServices providerServices) throws InitializeException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenDataStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenDataStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenDataStoreParameters.java	(revision 42196)
@@ -0,0 +1,15 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.dal;
+
+/**
+ *
+ * @author usuario
+ */
+public interface OpenDataStoreParameters extends DataStoreParameters {
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameters.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * This interface is a generic persistent parameter container. It is used in a
+ * variety of contexts in which a set of arbitrary parameters is needed.
+ */
+public interface DataParameters extends Persistent, DynObject {
+
+	/**
+	 * clears the parameter container.
+	 */
+	public void clear();
+
+	/**
+	 * Creates and returns a new copy of this DataParameters.
+	 *
+	 * @return a new copy of this
+	 */
+	public DataParameters getCopy();
+
+	/**
+	 * Checks its valid
+	 *
+	 * @throws ValidateDataParametersException
+	 *             if any problem was detected
+	 */
+	public void validate() throws ValidateDataParametersException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPoolEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPoolEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPoolEntry.java	(revision 42196)
@@ -0,0 +1,19 @@
+
+
+
+package org.gvsig.fmap.dal;
+
+import org.gvsig.tools.persistence.Persistent;
+
+
+
+public interface DataServerExplorerPoolEntry extends Persistent {
+    
+    public String getName();
+
+    public DataServerExplorerParameters getExplorerParameters();
+    
+    public String getDescription();
+    
+    public void copyTo(DataServerExplorerPoolEntry target);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreNotification.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+/**
+ * This interface represents a notification produced by a DataStore.
+ * 
+ * Notifications can be of several types. This interface also defines a set 
+ * of constants that represent the types of notifications that a DataStore 
+ * can produce.
+ */
+public interface DataStoreNotification {
+
+	/** Complex notification for special situations */
+	public static final String COMPLEX_NOTIFICATION = "complex_notification";
+
+	/** Fired before opening the store */
+	public static final String BEFORE_OPEN = "before_Open_DataStore";
+	
+	/** Fired after opening the store */
+	public static final String AFTER_OPEN = "after_Open_DataStore";
+
+	/** Fired before closing the store */
+	public static final String BEFORE_CLOSE = "before_Close_DataStore";
+	
+	/** Fired after closing the store */
+	public static final String AFTER_CLOSE = "after_Close_DataStore";
+
+	/** Fired before disposing the store */
+	public static final String BEFORE_DISPOSE = "before_Dispose_DataStore";
+	
+	/** Fired after disposing the store */
+	public static final String AFTER_DISPOSE = "after_Dispose_DataStore";
+
+	/** Fired after the store selection has changed */
+	public static final String SELECTION_CHANGE = "after_SelectionChange_DataStore";
+
+	/** Fired when a resource of the store has changed */
+	public static final String RESOURCE_CHANGED = "resourceChange_DataStore";
+
+	/**
+	 * Returns the DataStore that produced this notification
+	 * @return DataStore source of this
+	 */
+	public DataStore getSource();
+	
+	/**
+	 * Returns the type of this notification, represented by one of the constants defined in this interface.
+	 * @return a String containing this notification's type
+	 */
+	public String getType();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypes.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+/**
+ * This interface defines a set of constants for all data types supported by the
+ * DAL.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public interface DataTypes extends org.cresques.DataTypes,
+    org.gvsig.fmap.geom.DataTypes, org.gvsig.timesupport.DataTypes {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataQuery.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataQuery.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataQuery.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create Parameter object to define queries}
+ */
+package org.gvsig.fmap.dal;
+
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * Defines the properties of a collection of data, as a result of a query
+ * through a DataStore.
+ * <p>
+ * The scale parameter can be used by the DataStore as a hint about the quality
+ * or resolution of the data needed to view or operate with the data returned.
+ * As an example, it may use the scale to return only a representative subset of
+ * the data, or maybe to return Data with less detail, like a point or a line
+ * instead of a polygon.
+ * </p>
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public interface DataQuery extends Persistent {
+
+    /**
+     * Sets the scale.
+     *
+     * @param scale
+     *            the scale to set
+     */
+	void setScale(double scale);
+
+	/**
+	 * Returns the scale of the data to load.
+	 * 
+	 * @return the scale of the data to load
+	 */
+	double getScale();
+
+	/**
+	 * Returns the value of an query parameter.
+	 *
+	 * @param name
+	 *            of the parameter
+	 * @return the parameter value
+	 */
+	Object getQueryParameter(String name);
+
+	/**
+	 * Sets the value of an query parameter.
+	 *
+	 * @param name
+	 *            of the query parameter
+	 * @param value
+	 *            for the query parameter
+	 */
+	void setQueryParameter(String name, Object value);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataQuery.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProvider.java	(revision 42196)
@@ -0,0 +1,28 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+public interface DataStoreProvider {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java	(revision 42196)
@@ -0,0 +1,409 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * There are two top level management roles within DAL: data access and resource management.
+ *
+ * This class is responsible of the data access management role. It provides ways
+ * for registering and instantiating {@link DataServerExplorer}(s), {@link DataStore}(s),
+ * {@link Evaluator}(s) and {@link FeatureIndex}(es).
+ *
+ * @see ResourceManager
+ *
+ */
+
+public interface DataManager {
+        public static final String CREATE_STORE_AUTHORIZATION = "dal-create-store";
+        public static final String READ_STORE_AUTHORIZATION = "dal-read-store";
+        public static final String WRITE_STORE_AUTHORIZATION = "dal-write-store";
+
+        /**
+	 * Returns the default DAL's temporary directory
+	 *
+	 * @return Temporary directory name
+	 */
+	public String getTemporaryDirectory();
+
+	/*
+	 * ====================================================================
+	 *
+	 * Store related services
+	 */
+
+	/**
+	 * Creates, initializes and returns an instance of DataStoreParameters given
+	 * the name with which their provider is registered.
+	 * 
+	 * @param name
+	 *            provider name
+	 * 
+	 * @throws ProviderNotRegisteredException
+	 *             if the memory provider is not registered
+	 * @throws InitializeException
+	 *             if there is an error initializing the parameters for the
+	 *             memory provider
+	 **/
+	public DataStoreParameters createStoreParameters(String name)
+			throws InitializeException, ProviderNotRegisteredException;
+
+	/**
+	 * 
+	 * Creates, initializes and returns an instance of NewDataStoreParameters
+	 * given the name with which their provider is registered.
+	 * 
+	 * @param name
+	 * 
+	 * @throws InitializeException
+	 * @throws ProviderNotRegisteredException
+	 */
+	public NewDataStoreParameters createNewStoreParameters(String explorer, String provider)
+			throws InitializeException, ProviderNotRegisteredException;
+
+	/**
+	 * 
+	 * Creates, initializes and returns an instance of DataStore given the
+	 * DataStoreParameters.
+	 * 
+	 * @param parameters
+	 *            parameters used to instantiate and initialize the DataStore
+	 * 
+	 * @throws ProviderNotRegisteredException
+	 *             if the memory provider is not registered
+	 * @throws InitializeException
+	 *             if there is an error initializing the parameters for the
+	 *             memory provider
+	 * @throws ValidateDataParametersException
+	 *             if the parameters to open the memory based store are not
+	 *             valid
+	 */
+	public DataStore openStore(String provider, DataStoreParameters parameters)
+			throws InitializeException, ProviderNotRegisteredException,
+			ValidateDataParametersException;
+
+	/**
+	 * @deprecated see openStore
+	 */
+	public DataStore createStore(DataStoreParameters parameters)
+			throws InitializeException, ProviderNotRegisteredException,
+			ValidateDataParametersException;
+
+	/**
+	 * Create a new physical store 
+	 *  
+	 * @param parameters
+	 *
+	 * @throws InitializeException
+	 * @throws ProviderNotRegisteredException
+	 * @throws ValidateDataParametersException
+	 */
+	public void newStore(String explorer, String provider, NewDataStoreParameters parameters, boolean overwrite)
+			throws InitializeException, ProviderNotRegisteredException,
+			ValidateDataParametersException;
+
+	/**
+	 * Returns a list of Strings containing the names of all available DataStore
+	 * providers.
+	 *
+	 * @return list of String containing available DataStore provider names
+	 */
+	public List getStoreProviders();
+
+	/**
+	 * Returns a list of Strings containing the names of all available DataStore
+	 * providers for an explorer.
+	 * 
+	 * @param explorer
+	 *            name
+	 */
+	public List getStoreProviders(String name);
+
+	/*
+	 * ====================================================================
+	 *
+	 * Explorer related services
+	 */
+	/**
+	 * Returns an instance of {@link DataServerExplorerParameters} corresponding to
+	 * the given name.
+	 *
+	 * @param name
+	 *            name of a registered server explorer provider
+	 *
+	 * @throws InitializeException
+	 * 			if parameter initialization causes an error.
+	 *
+	 * @throws ProviderNotRegisteredException
+	 * 			if could not find a provider by the given name.
+	 *
+	 **/
+	public DataServerExplorerParameters createServerExplorerParameters(
+			String name)
+			throws InitializeException, ProviderNotRegisteredException;
+
+	/**
+	 * Returns an instance of {@link DataServerExplorer} given its parameters.
+	 *
+	 * @param parameters
+	 *            parameters used to instantiate and initialize the
+	 *            {@link DataServerExplorer}.
+	 *
+	 * @return an instance of {@link DataServerExplorer}.
+	 *
+	 * @throws InitializeException
+	 *
+	 * @throws ProviderNotRegisteredException
+	 * @throws ValidateDataParametersException
+	 */
+	public DataServerExplorer openServerExplorer(
+			String name,
+			DataServerExplorerParameters parameters)
+			throws InitializeException, ProviderNotRegisteredException,
+			ValidateDataParametersException;
+
+	/**
+	 * @deprecated see openServerExplorer
+	 */
+	public DataServerExplorer createServerExplorer(
+			DataServerExplorerParameters parameters)
+			throws InitializeException, ProviderNotRegisteredException,
+			ValidateDataParametersException;
+
+	/**
+	 * Returns a list of String containing the names of the available
+	 * DataServerExplorer providers.
+	 *
+	 * @return list of String containing the names of the available
+	 *         DataServerExplorer providers.
+	 */
+	public List getExplorerProviders();
+
+	/*
+	 * ====================================================================
+	 *
+	 * Expression evaluation related services
+	 */
+
+	/**
+	 * Registers the default expression evaluator. It is used by DAL to evaluate
+	 * and resolve query filters and expressions.
+	 *
+	 * @param evaluator
+	 *            Class that will be called to evaluate the expression. It must
+	 *            implement {@link Evaluator}.
+	 */
+	public void registerDefaultEvaluator(Class evaluator);
+
+	/**
+	 * Creates an instance of Evaluator that represents the given expression.
+	 *
+	 * @param expression
+	 *            String containing a CQL expression.
+	 * @return instance of Evaluator representing the given expression.
+	 * @throws InitializeException
+	 */
+	public Evaluator createExpresion(String expression)
+			throws InitializeException;
+
+	/*
+	 * ====================================================================
+	 *
+	 * Index related services
+	 */
+
+
+	/**
+	 * Returns a list of String containing the names of the available index providers.
+	 *
+	 * @return
+	 * 		list of strings with the names of the available index providers
+	 */
+	public List getFeatureIndexProviders();
+
+	/**
+	 * Sets the default DataIndexProvider for the given data type.
+	 *
+	 * @param dataType
+	 * 				one of the data types defined in {@link DataTypes}.
+	 * @param name
+	 * 			Provider's name
+	 */
+    public void setDefaultFeatureIndexProviderName(int dataType, String name);
+
+	/**
+	 * Returns the default DataIndexProvider name, given a data type. Data types
+	 * are defined in {@link DataTypes}.
+	 *
+	 * @param dataType
+	 *            one of the constants in {@link DataTypes}.
+	 *
+	 * @return
+	 * 		the name of the default {@link FeatureIndexProvider} if there is
+	 * 		anyone available for the given data type.
+	 */
+    public String getDefaultFeatureIndexProviderName(int dataType);
+
+    /**
+	 * Returns a list of String containing the names of the available cache providers.
+	 *
+	 * @return
+	 * 		list of strings with the names of the available cache providers
+	 */    
+    public List getFeatureCacheProviders();
+
+	/**
+	 * Returns an instance of {@link DataServerExplorerParameters} corresponding
+	 * to the given name used by the cache to create a store to save the
+	 * retrieved data.
+	 * 
+	 * @param name
+	 *            name of a registered feature cache provider
+	 * 
+	 * @throws InitializeException
+	 *             if parameter initialization causes an error.
+	 * 
+	 * @throws ProviderNotRegisteredException
+	 *             if could not find a cache provider by the given name.
+	 * 
+	 */
+	public DynObject createCacheParameters(String name)
+			throws InitializeException, ProviderNotRegisteredException;
+
+	/**
+	 * Utility method to create the {@link DataStoreParameters} to create a
+	 * {@link FeatureStore} based on the {@link MemoryStoreProvider}.
+	 * 
+	 * @param autoOrderAttributeName
+	 *            the name of the {@link Feature} attribute to be used to order
+	 *            the store {@link Feature}s by default. Set to null if you
+	 *            don't want any order by default
+	 * @return the parameters for the memory based store
+	 * @throws InitializeException
+	 *             if there is an error initializing the parameters for the
+	 *             memory provider
+	 */
+	public DataStoreParameters createMemoryStoreParameters(
+			String autoOrderAttributeName) throws InitializeException;
+
+	/**
+	 * Utility method to create the a {@link FeatureStore} based on the
+	 * {@link MemoryStoreProvider}.
+	 * 
+	 * @param autoOrderAttributeName
+	 *            the name of the {@link Feature} attribute to be used to order
+	 *            the store {@link Feature}s by default. Set to null if you
+	 *            don't want any order by default
+	 * @return the the memory based store
+	 * @throws InitializeException
+	 *             if there is an error initializing the parameters for the
+	 *             memory provider
+	 */
+	public FeatureStore createMemoryStore(String autoOrderAttributeName)
+			throws InitializeException;
+
+    /**
+     * Creates a {@link FeaturePagingHelper} to paginate data from a
+     * {@link FeatureStore}.
+     * 
+     * @param featureStore
+     *            to get the {@link Feature}s from
+     * @param pageSize
+     *            the page size
+     * @return a {@link FeaturePagingHelper}
+     * @throws BaseException
+     *             if there is an error creating the helper
+     */
+	public FeaturePagingHelper createFeaturePagingHelper(
+        FeatureStore featureStore, int pageSize) throws BaseException;
+
+	/**
+     * Creates a {@link FeaturePagingHelper} to paginate data from a
+     * {@link FeatureStore}.
+     * 
+     * @param featureStore
+     *            to get the {@link Feature}s from
+     * @param featureQuery
+     *            to filter and/or order the data
+     * @param pageSize
+     *            the page size
+     * @return a {@link FeaturePagingHelper}
+     * @throws BaseException
+     *             if there is an error creating the helper
+     */
+	public FeaturePagingHelper createFeaturePagingHelper(
+			FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
+        throws BaseException;
+	
+	public void setOpenErrorHandler(OpenErrorHandler handler);
+	
+	public DataStoreProviderFactory getStoreProviderFactory(String name);
+
+	public EditableFeatureType createFeatureType();
+	
+	public List getDataTypes();
+	
+	/**
+	 * Registers a class that can be used to create a {@link FeatureAttributeGetter}
+	 * and associate it to a {@link FeatureAttributeDescriptor}.
+	 * 
+   	 * @param name
+   	 *             the name used to register the class.
+	 * @param clazz
+	 *             it has to be an instance of {@link FeatureAttributeDescriptor}         
+	 */
+	public void registerFeatureAttributeGetter(String name, Class clazz);
+	
+	/**
+	 * Creates a {@link FeatureAttributeGetter} by name. If there is not any class
+	 * registered with this name or if there is any error an exception is thrown.
+	 * 
+	 * @param name
+	 *             the name that was used to register the class              
+	 * @return
+	 *             a {@link FeatureAttributeGetter}
+	 * @throws InitializeException
+	 *             if there is any error creating the object
+	 */
+	public FeatureAttributeGetter createFeatureAttributeGetter(String name) throws InitializeException;
+        
+        public DataServerExplorerPool getDataServerExplorerPool();
+        public void setDataServerExplorerPool(DataServerExplorerPool pool);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerParameters.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal;
+
+/**
+ * DataServerExplorer parameter container. Provides a way to obtain the name 
+ * of the specific data explorer type described by this parameters.
+ * 
+ */
+public interface DataServerExplorerParameters extends DataParameters {
+
+	/**
+	 * Returns the name of the data explorer type of the DataServerExplorer
+	 * represented by this DataServerExplorerParameters
+	 * 
+	 * @return a String containing the name of the data explorer type
+	 */
+	public String getExplorerName();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceAction.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource;
+
+/**
+ * Action to execute in the context of a {@link Resource}. This is used to run
+ * actions which use a {@link Resource}.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public interface ResourceAction {
+
+	/**
+	 * Executes the action to perform with a {@link Resource}.
+	 * 
+	 * @return the result of the action, or null if none required
+	 * @throws Exception
+	 *             if there is an error executing the action
+	 */
+	Object run() throws Exception;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/Resource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/Resource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/Resource.java	(revision 42196)
@@ -0,0 +1,187 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource;
+
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+
+/**
+ * Encapsulates a system resource (file, database connection, etc). 
+ * It is used to manage usage and availability of shared system 
+ * resources. This interface allows monitoring a resource and helps 
+ * preventing dead locks on it as well as being freed as soon as
+ * it is not being used.
+ * 
+ * Data providers can provide implementations for their own resources. This
+ * is specially interesting when resources require a specific treatment
+ * beyond the standard shared file or connection, for instance to manage 
+ * connections to a server through its own connection pool.
+ */
+public interface Resource {
+
+	/**
+	 * Returns the resource's name.
+	 * 
+	 * @return resource's name
+	 * 
+	 * @throws AccessResourceException
+	 */
+	public String getName() throws AccessResourceException;
+
+	/**
+	 * Returns the resource parameters. These parameters contain
+	 * all the necessary information to access the resource.
+	 * 
+	 * @return resource parameters.
+	 */
+	public ResourceParameters getParameters();
+
+	/**
+	 * Returns the date and time in which this resource was opened for the last
+	 * time.
+	 * 
+	 * @return date and time in which this resource was opened for the last
+	 *         time, in milliseconds.
+	 */
+	public long getLastTimeOpen();
+
+	/**
+	 * Returns the date and time in which this resource was accessed for the
+	 * last time.
+	 * 
+	 * @return date and time in which this resource was accessed for the last
+	 *         time, in milliseconds.
+	 */
+	public long getLastTimeUsed();
+
+	/**
+	 * Returns whether this resource is already in use by someone.
+	 * 
+	 * @return
+	 * 		true if this resource is in use, false if not.
+	 */
+	public boolean inUse();
+
+	/**
+	 * Returns whether this resource is opened.
+	 * 
+	 * @return
+	 * 		true if this resource is opened, false if not.
+	 */
+	public boolean isOpen();
+
+	/**
+	 * Returns the number of times this resource has been opened 
+	 * since it was created.
+	 * 
+	 * @return 
+	 * 		number of times this resource has been opened 
+	 * since it was created.
+	 */
+	public int openCount();
+
+	/**
+	 * Executes an action which uses the current {@link Resource}.
+	 * 
+	 * @param runnable
+	 *            to execute
+	 * @return the action return value
+	 * @throws ResourceException
+	 *             if there is an error executing the action
+	 */
+	public Object execute(ResourceAction action)
+			throws ResourceExecuteException;
+
+	/**
+	 * If the resource is not in use, calling this method will send a close request 
+	 * to all consumers referencing this resource. If the resource is in use, 
+	 * calling this method will do nothing.
+	 * 
+	 * @throws ResourceException
+	 */
+	public void closeRequest() throws ResourceException;
+
+	/**
+	 * Adds a consumer to this resource. This will create a weak reference 
+	 * to the consumer in this resource's consumer list.
+	 * 
+	 * @param consumer
+	 * 				the consumer that will be added to this resource's consumer list.
+	 */
+	public void addConsumer(ResourceConsumer consumer);
+
+	/**
+	 * Removes a consumer from this resource's consumer list.
+	 * 
+	 * @param consumer
+	 * 				the consumer that will be removed.
+	 */
+	public void removeConsumer(ResourceConsumer consumer);
+
+	/**
+	 * Returns this resource's current number of consumers.
+	 * 
+	 * @return
+	 * 		current number of consumers of this resource.
+	 */
+	public int getConsumersCount();
+	
+	/**
+	 * Returns an object that represents the resource. The actual type
+	 * depends on the resource provider. It could be a string with a 
+	 * descriptive name or something more elaborated.
+	 * 
+	 * @return
+	 * 		an object that represents the resource.
+	 * 
+	 * @throws AccessResourceException
+	 */
+	public Object get() throws AccessResourceException;
+
+	/**
+	 * Returns a custom object containing extended data relative to 
+	 * this resource.
+	 * 
+	 * This is part of a simple mechanism to allow passing further data to 
+	 * the resource that may be necessary for optimal treatment.
+	 * 
+	 * @return
+	 * 		data related to this resource
+	 */
+	public Object getData();
+
+	/**
+	 * Sets a custom object as this resource's extended data.
+     *
+	 * This is part of a simple mechanism to allow passing further data to 
+	 * the resource that may be necessary for optimal treatment.
+	 *
+	 * @param data
+	 * 			a custom object containing data related to this resource.
+	 */
+	public void setData(Object data);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/Resource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceParameters.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource;
+
+import org.gvsig.fmap.dal.DataParameters;
+
+/**
+ * Interface that contains any resource parameters.
+ * Each specific subtype of resource will extend this
+ * interface with its own relevant parameters.
+ *
+ */
+public interface ResourceParameters extends DataParameters {
+
+	/**
+	 * Returns the type name of the related resource.
+	 * 
+	 * @return
+	 * 		type name of the resource.
+	 */
+	public String getTypeName();
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceProvider.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.PrepareResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyChangesException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyCloseException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyDisposeException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyOpenException;
+
+
+public interface ResourceProvider extends Resource {
+
+	public void notifyOpen() throws ResourceNotifyOpenException;
+
+	public void notifyClose() throws ResourceNotifyCloseException;
+
+	public void notifyDispose() throws ResourceNotifyDisposeException;
+
+	public void notifyChanges() throws ResourceNotifyChangesException;
+
+	public void prepare() throws PrepareResourceException;
+
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceConsumer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceConsumer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceConsumer.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+
+
+public interface ResourceConsumer {
+
+	public boolean closeResourceRequested(ResourceProvider resource);
+
+	public void resourceChanged(ResourceProvider resource);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceConsumer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceNotification.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource;
+
+
+/**
+ * A resource notification is related to a change in the state of a resource.
+ * It is sent to all resource observers when appropriate. The notification contains
+ * the type of change and access to the resource information.
+ * 
+ * This includes:
+ * 
+ * <ul>
+ * 	<li>A resource has been opened</li>
+ *  <li>A resource has been closed</li>
+ *  <li>A resource has been prepared</li>
+ *  <li>A resource property has been changed</li>
+ *  <li>A resource is being disposed</li>
+ *  <li>A resource is being opened</li>
+ *  <li>A resource is being closed</li>
+ * </ul>	
+ * 
+ * @author jmvivo
+ */
+public interface ResourceNotification {
+
+	/** A resource has been opened */
+	public static final String OPENED = "Opened_Resource";
+	/** A resource has been closed */
+	public static final String CLOSED = "Closed_Resource";
+	/** A resource has been prepared */
+	public static final String PREPARE = "Prepare_Resource";
+	/** A resource property has been changed */
+	public static final String CHANGED = "Changed_Resource";
+	/** A resource is being disposed */
+	public static final String DISPOSE = "Begin_Dispose_Resource";
+	/** A resource is being opened */
+	public static final String OPEN = "Begin_Open_Resource";
+	/** A resource is being closed */
+	public static final String CLOSE = "Begin_Close_Resource";
+
+	/**
+	 * Returns the parameters of the resource that caused
+	 * this notification.
+	 * 
+	 * @return
+	 * 		the parameters of this notification's source
+	 */
+	public ResourceParameters getParameters();
+	
+	/**
+	 * Returns the resource that caused this notification.
+	 * 
+	 * @return
+	 * 		this notification's source
+	 */
+	public Resource getResource();
+	
+	/**
+	 * Returns the type of this notification.
+	 * 
+	 * @return
+	 * 		this notification's type. For the allowed values see the 
+	 * constants defined in this interface.
+	 */
+	public String getType();
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.feature.resource.exception package documentation</title>
+</head>
+<body>
+
+<p>Provides DAL's resource level exceptions.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotClosedOnDisposeManagerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotClosedOnDisposeManagerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotClosedOnDisposeManagerException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+public class ResourceNotClosedOnDisposeManagerException extends ResourceException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -4030443484190503144L;
+	private final static String MESSAGE_FORMAT = "The '%(resource)' still open when the manager begin to dispose.";
+	private final static String MESSAGE_KEY = "_ResourceNotClosedOnDisposeManagerException";
+
+	public ResourceNotClosedOnDisposeManagerException(Resource resource) {
+		super(resource, MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotClosedOnDisposeManagerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyOpenException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyOpenException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyOpenException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+public class ResourceNotifyOpenException extends ResourceException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1114089673521505999L;
+	private final static String MESSAGE_FORMAT = "Resource '%(resource)s' changed.";
+	private final static String MESSAGE_KEY = "_ResourceNotifyOpenException";
+
+	public ResourceNotifyOpenException(Resource resource) {
+		super(resource, MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyOpenException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/DisposeResorceManagerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/DisposeResorceManagerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/DisposeResorceManagerException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.exception.DataListException;
+
+public class DisposeResorceManagerException extends DataListException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -1818272776768733342L;
+
+	private final static String MESSAGE_FORMAT = "Exception disposing.";
+	private final static String MESSAGE_KEY = "_DisposeResorceManagerException";
+
+	public DisposeResorceManagerException() {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/DisposeResorceManagerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/PrepareResourceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/PrepareResourceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/PrepareResourceException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+public class PrepareResourceException extends ResourceException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 2198478752691400900L;
+	private final static String MESSAGE_FORMAT = "Exception preparing '%(resource)s'.";
+	private final static String MESSAGE_KEY = "_PrepareResourceException";
+
+	public PrepareResourceException(Resource resource, Throwable cause) {
+		super(resource, MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/PrepareResourceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotRegisteredException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotRegisteredException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotRegisteredException.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+
+public class ResourceNotRegisteredException extends InitializeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -3783563399272946137L;
+	private final static String MESSAGE_FORMAT = "The '%(resourceType)' resource type is not registered.";
+	private final static String MESSAGE_KEY = "_ResourceNotRegisteredException";
+
+	public ResourceNotRegisteredException(String resourceType) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.values.put("resourceType", resourceType);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotRegisteredException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyCloseException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyCloseException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyCloseException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+public class ResourceNotifyCloseException extends ResourceException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -805056352573291250L;
+	private final static String MESSAGE_FORMAT = "Resource '%(resource)s' changed.";
+	private final static String MESSAGE_KEY = "_ResourceNotifyCloseExceptionn";
+
+	public ResourceNotifyCloseException(Resource resource) {
+		super(resource, MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyCloseException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceException.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.resource.Resource;
+
+public abstract class ResourceException extends DataException {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	protected Map values = new HashMap();
+
+	private Resource resource;
+
+	public ResourceException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	public ResourceException(String messageFormat, String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+	public ResourceException(Resource resource, String messageFormat,
+			Throwable cause, String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+		this.resource = resource;
+		try {
+			setValue("resource", resource.getName());
+		} catch (AccessResourceException e) {
+			setValue("resource", "unknow");
+		}
+	}
+
+	public ResourceException(Resource resource, String messageFormat,
+			String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+		this.resource = resource;
+		try {
+			setValue("resource", resource.getName());
+		} catch (AccessResourceException e) {
+			setValue("resource", "unknow");
+		}
+	}
+
+	public Resource getResource() {
+		return resource;
+	}
+
+	protected void setValue(String name, String value) {
+		this.values.put(name, value);
+	}
+
+	protected Map values() {
+		return this.values;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyDisposeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyDisposeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyDisposeException.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+public class ResourceNotifyDisposeException extends ResourceException {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7470242143471869600L;
+	private final static String MESSAGE_FORMAT = "Resource '%(resource)s' changed.";
+	private final static String MESSAGE_KEY = "_ResourceNotifyDisposeException";
+
+	public ResourceNotifyDisposeException(Resource resource) {
+		super(resource, MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyDisposeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/AccessResourceException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/AccessResourceException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/AccessResourceException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+public class AccessResourceException extends ResourceException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -4409107196914175174L;
+	private final static String MESSAGE_FORMAT = "Error while atemp to access resource '%(resource)'.";
+	private final static String MESSAGE_KEY = "_AccessResourceException";
+
+	public AccessResourceException(Resource resource, Throwable cause) {
+		super(resource, MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+        
+        protected AccessResourceException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	protected AccessResourceException(String messageFormat, String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/AccessResourceException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyChangesException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyChangesException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyChangesException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+
+
+public class ResourceNotifyChangesException extends ResourceException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -2048575104684692260L;
+	private final static String MESSAGE_FORMAT = "Resource '%(resource)s' changed.";
+	private final static String MESSAGE_KEY = "_ResourceNotifyChangesException";
+
+	public ResourceNotifyChangesException(Resource resource) {
+		super(resource, MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceNotifyChangesException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceExecuteException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceExecuteException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceExecuteException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.exception;
+
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Exception thrown when there is an error in the
+ * {@link Resource#execute(org.gvsig.fmap.dal.resource.ResourceAction)} method.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class ResourceExecuteException extends BaseRuntimeException {
+
+	private static final long serialVersionUID = 1879135914687984787L;
+	private final static String MESSAGE_FORMAT =
+			"Error executing action in resource '%(resource)'.";
+	private final static String MESSAGE_KEY = "_ResourceExecuteException";
+
+	/**
+	 * Create a new {@link ResourceExecuteException}.
+	 * 
+	 * @param resource
+	 *            the resource where the exception was produced
+	 * @param cause
+	 *            the original cause of the exception
+	 */
+	public ResourceExecuteException(Resource resource, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/exception/ResourceExecuteException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fmap.dal.resource package documentation</title>
+</head>
+<body>
+
+<p>Provides API for system resource management.</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceManager.java	(revision 42196)
@@ -0,0 +1,112 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.resource.exception.DisposeResorceManagerException;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+
+/**
+ * This interface is the responsible of shared resources management.
+ *
+ * Allows getting a resource, iterating over the available resources, and
+ * collecting resources to free them as they become unused
+ *
+ */
+public interface ResourceManager extends WeakReferencingObservable {
+	public Resource getResource(String name);
+
+	/**
+	 * Returns an iterator over the available resources.
+	 *
+	 * @return
+	 * 		iterator over the resources.
+	 */
+	public Iterator iterator();
+
+	/**
+	 * Iterates over the resources and frees them if they are ready to be freed
+	 * or try to close them if they are idle.
+	 * 
+	 * @throws DataException
+	 * @see {@link ResourceManager#getTimeToBeIdle()}
+	 *      {@link ResourceManager#setTimeToBeIdle(int)}
+	 */
+	public void collectResources() throws DataException;
+
+	/**
+	 * Returns the wait time to consider that a resource is idle in seconds.
+	 * Used in collect resouces action. <br>
+	 * if is lower than 1 never is idle.
+	 *
+	 * @return seconds
+	 *
+	 * @see {@link ResourceManager#collectResources()}
+	 * @see {@link ResourceManager#startResourceCollector(long, Observer)}
+	 */
+	public int getTimeToBeIdle();
+
+	/**
+	 * Sets the wait time to consider that a resource is idle. Used in collect
+	 * resouces action. <br>
+	 * if is lower than 1 never is idle.
+	 *
+	 * @see {@link ResourceManager#collectResources()}
+	 * @see {@link ResourceManager#startResourceCollector(long, Observer)}
+	 */
+
+	public void setTimeToBeIdle(int seconds);
+
+	/**
+	 * Initializes the resource collection background process. Allows setting
+	 * of the delay between each execution of the collector and also an
+	 * observer to be notified on each execution.
+	 *
+	 * @param milis
+	 * 			delay between each execution of the resource collection process, in milliseconds.
+	 *
+	 * @param observer
+	 * 			an observer that will be notified on each execution of the resource collection process.
+	 */
+	public void startResourceCollector(long milis, Observer observer);
+
+	/**
+	 * Stops successive executions of the resource collector process. It does not interrupt
+	 * the process if it is currently running, but it will not be executed anymore times.
+	 */
+	public void stopResourceCollector();
+
+	/**
+	 * Close all register resources.
+	 *
+	 * @throws DataException
+	 */
+	public void closeResources() throws DataException;
+
+	public void dispose() throws DisposeResorceManagerException;
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/resource/ResourceManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenErrorHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenErrorHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenErrorHandler.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.DataParameters;
+
+/**
+ * This class is used to handle errors that occur at not finding the data source
+ * by opening a layer.
+ * 
+ */
+public interface OpenErrorHandler {
+
+	/**
+	 * Returns true if the opening can be retried.
+	 * 
+	 * @param e
+	 * @param parameters
+	 * 
+	 * @return true if the opening can be retried.
+	 */
+
+	public boolean canRetryOpen(Exception e, DataParameters parameters);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenErrorHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameterDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameterDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameterDescriptor.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+/**
+ * This interface describes the properties of a parameter. It is useful 
+ * for any component that needs to know how to edit or visualize it.
+ *
+ */
+public interface DataParameterDescriptor {
+	
+	/** Accepts a single value */
+	public static final int SINGLE = 1;
+	/** Accepts a single value from a value set */
+	public static final int CHOICE = 2;
+	/** Accepts a range of values defined with a minimum and a maximum value */
+	public static final int RANGE = 3;
+
+	/**
+	 * Returns the parameter's name
+	 * 
+	 * @return String containing the parameter's name
+	 */
+	public String getName();
+	
+	/**
+	 * Returns the parameter's description
+	 * 
+	 * @return String containing the parameter's description.
+	 */
+	public String getDescription();
+
+	/**
+	 * Returns the parameter's data type.
+	 * 
+	 * @return parameter's data type.
+	 * 
+	 * @see DataTypes
+	 */
+	public int getDataType();
+
+	/**
+	 * Returns the parameter's default value.
+	 * 
+	 * @return an Object containing the default value. Use the data type to cast.
+	 */
+	public Object getDefaultValue();
+	
+	/**
+	 * Returns one of the available values type.
+	 * 
+	 * @return an <code>int</code> with one of the available values type.
+	 * 
+	 * @see #SINGLE
+	 * @see #CHOICE
+	 * @see #RANGE
+	 */
+	public int getAvailableValuesType();
+
+	/**
+	 * Returns an array containing the available values accepted by the parameter.
+	 * 
+	 * @return array of Object containing the available values accepted by the parameter. Use the data type to cast.
+	 */
+	public Object[] getAvailableValues();
+
+	/**
+	 * Returns the minimum value when the parameter accepts a range of values.
+	 * 
+	 * @return range's minimum value
+	 */
+	public Object getMinValue();
+
+	/**
+	 * Returns the maximum value when the parameter accepts a range of values.
+	 * 
+	 * @return range's maximum value.
+	 */
+	public Object getMaxValue();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameterDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreParameters.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal;
+
+
+/**
+ * This interface is used by any store implementation that requires
+ * store specific parameters.
+ * 
+ */
+public interface DataStoreParameters extends
+		DataParameters {
+
+	/**
+	 * Returns the DataStore's name
+	 * 
+	 * @return a String containing the DataStore's name
+	 */
+	public abstract String getDataStoreName();
+
+	/**
+	 * Indicates whether these parameters are valid.
+	 * 
+	 * @return true if these parameters are valid, false if not.
+	 */
+	public abstract boolean isValid();
+
+	/**
+	 * Returns the DataStore's description
+	 * 
+	 * @return a String containing the DataStore's description
+	 */
+	public abstract String getDescription();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/pom.xml	(revision 42196)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.api</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>jar</packaging>    
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <!-- Implementation dependencies for TESTS -->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+    </dependency>
+
+    <dependency>
+      <groupId>easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>easymock</groupId>
+      <artifactId>easymockclassextension</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <description>Define the API of the Data Access Library.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/resources/org/gvsig/fmap/dal/spi/ProviderParametersDefinition.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/resources/org/gvsig/fmap/dal/spi/ProviderParametersDefinition.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/resources/org/gvsig/fmap/dal/spi/ProviderParametersDefinition.xml	(revision 42196)
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class namespace="dal" name="ProviderParameters">
+      <description>Parameters used for open a store</description>
+      <fields>
+        <field name="ProviderName" type="string" mandatory="true" group="Advanced">
+          <description>Name of the provider</description>
+        </field>
+      </fields>
+    </class>
+
+    <class namespace="dal" name="NewProviderParameters">
+      <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Parameters used for create a new store in the server</description>
+      <fields>
+        <field name="FeatureType" type="object" mandatory="true" hidden="true" classOfValue="org.gvsig.fmap.dal.feature.FeatureType">
+          <description>Define the structure of the new store</description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/resources/org/gvsig/fmap/dal/spi/ProviderParametersDefinition.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1,3 @@
+org.gvsig.fmap.dal.DALLibrary
+org.gvsig.fmap.dal.store.memory.MemoryStoreLibrary
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProvider.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.raster.spi;
+
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+
+public interface CoverageStoreProvider extends DataStoreProvider {
+	public String getProviderName();
+
+	public CoverageStoreProviderServices getStoreServices();
+
+	public boolean allowWrite();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractCoverageStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractCoverageStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractCoverageStoreProvider.java	(revision 42196)
@@ -0,0 +1,217 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.raster.spi;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.raster.CoverageSelection;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public abstract class AbstractCoverageStoreProvider extends AbstractDisposable
+		implements CoverageStoreProvider {
+	protected CoverageStoreProviderServices store;
+	protected DelegatedDynObject metadata;
+	protected DataStoreParameters parameters;
+
+
+	protected AbstractCoverageStoreProvider(DataStoreParameters params,
+			DataStoreProviderServices storeServices, DynObject metadata) {
+		init(params, storeServices, metadata);
+	}
+
+	protected AbstractCoverageStoreProvider(DataStoreParameters params,
+			DataStoreProviderServices storeServices) {
+		init(params, storeServices, null);
+	}
+	
+	protected AbstractCoverageStoreProvider() {
+	}
+	
+	protected void init(DataStoreParameters params,
+			DataStoreProviderServices storeServices, DynObject metadata) {
+		this.store = (CoverageStoreProviderServices) storeServices;
+		this.metadata = (DelegatedDynObject) metadata;
+		this.parameters = params;
+	}
+	
+	/**
+	 * Gets the DataStoreParameters
+	 * @return DataStoreParameters
+	 */
+	public DataStoreParameters getDataStoreParameters() {
+		return parameters;
+	}
+
+	/**
+	 * Set metada container if this not set at construction time and only in one
+	 * time. In other case an Exception will be throw
+	 *
+	 * @param metadata
+	 */
+	protected void setMetadata(DynObject metadata) {
+		if (this.metadata != null) {
+			// FIXME Exception
+			throw new IllegalStateException();
+		}
+		this.metadata = (DelegatedDynObject) metadata;
+	}
+
+	protected ResourceProvider createResource(String type, Object[] params)
+			throws InitializeException {
+		ResourceManagerProviderServices manager = (ResourceManagerProviderServices) DALLocator
+				.getResourceManager();
+		ResourceProvider resource = manager.createAddResource(type, params);
+		return resource;
+	}
+
+	public CoverageStoreProviderServices getStoreServices() {
+		return this.store;
+	}
+
+	public String getClassName() {
+		return this.getClass().getName();
+	}
+
+	public boolean allowWrite() {
+		return false;
+	}
+
+	public CoverageSelection createCoverageSelection() throws DataException {
+		return this.store.createDefaultCoverageSelection();
+	}
+
+	public void refresh() throws OpenException {
+		// Do nothing by default
+	}
+
+	public void close() throws CloseException {
+		// Do nothing by default
+	}
+
+	protected void doDispose() throws BaseException {
+		this.metadata = null;
+		this.store = null;
+		this.parameters = null;
+	}
+
+	public Envelope getEnvelope() throws DataException {
+		return null;
+	}
+
+	public abstract DataServerExplorer getExplorer() throws ReadException,
+			ValidateDataParametersException;
+
+	public void delegate(DynObject dynObject) {
+		if (this.metadata == null) {
+			return;
+		}
+		this.metadata.delegate(dynObject);
+	}
+
+	public DynClass getDynClass() {
+		if (this.metadata == null) {
+			return null;
+		}
+		return this.metadata.getDynClass();
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.getDynValue(name);
+	}
+
+	public boolean hasDynValue(String name) {
+		if (this.metadata == null) {
+			return false;
+		}
+		// TODO this.open??
+		return this.metadata.hasDynValue(name);
+	}
+
+	public void implement(DynClass dynClass) {
+		if (this.metadata == null) {
+			return;
+		}
+		this.metadata.implement(dynClass);
+
+	}
+
+	public Object invokeDynMethod(int code, DynObject context)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, code, context);
+	}
+
+	public Object invokeDynMethod(String name, DynObject context)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, name, context);
+	}
+
+	public void setDynValue(String name, Object value)
+			throws DynFieldNotFoundException {
+		if (this.metadata == null) {
+			return;
+		}
+		// TODO this.open??
+		this.metadata.setDynValue(name, value);
+	}
+
+	public void clear() {
+		if (metadata != null) {
+			metadata.clear();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractCoverageStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProviderServices.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.raster.spi;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.raster.CoverageSelection;
+import org.gvsig.fmap.dal.raster.CoverageStore;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.undo.command.Command;
+
+public interface CoverageStoreProviderServices extends
+		DataStoreProviderServices, CoverageStore {
+	public void notifyChange(String notification);
+
+	public void notifyChange(String notification, Resource resource);
+
+	public void notifyChange(String notification, Command command);
+
+	public CoverageSelection createDefaultCoverageSelection()
+			throws DataException;
+
+	public DataManager getManager();
+
+	public CoverageStoreProvider getProvider();
+
+	public CoverageStore getCoverageStore();
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/CoverageStoreProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResource.java	(revision 42196)
@@ -0,0 +1,243 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.PrepareResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyChangesException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyCloseException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyDisposeException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyOpenException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Resource implementation which is able to show an unique interface to a group
+ * of Resources.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MultiResource extends AbstractResource {
+
+	public static final String TYPE_NAME = "multi";
+
+	public static final String DESCRIPTION = "Group of multiple resources";
+
+	private static final Logger LOG =
+			LoggerFactory.getLogger(MultiResource.class);
+
+	private List resources = new ArrayList();
+
+	// Initially, the first one
+	private int defaultResourcePos = 0;
+
+	/**
+	 * Creates a new {@link MultiResource} from the given parameters.
+	 * 
+	 * @param parameters
+	 *            to create the resource from
+	 * @throws InitializeException
+	 *             if there is an error creating the resource
+	 */
+	public MultiResource(MultiResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+	private List getResources() {
+		return resources;
+	}
+
+	/**
+	 * Adds a new {@link ResourceProvider} to the list of Resources managed by
+	 * this group.
+	 * 
+	 * @param parameters
+	 *            to create the resource from
+	 * @param defaultResource
+	 *            if the added resource is to be used as the multi resource
+	 *            default one
+	 * @throws InitializeException
+	 *             if there is an error adding the resource
+	 */
+	public void addResource(ResourceParameters parameters,
+			boolean defaultResource) throws InitializeException {
+		ResourceProvider resourceProvider =
+				((ResourceManagerProviderServices) DALLocator.getResourceManager()).createResource(parameters);
+		resources.add(resourceProvider);
+		if (defaultResource) {
+			defaultResourcePos = resources.size() - 1;
+		}
+	}
+
+	/**
+	 * Adds a new {@link ResourceProvider} to the list of Resources managed by
+	 * this group.
+	 * 
+	 * @param name
+	 *            of the resource to add
+	 * @param params
+	 *            parameters to create the resource with
+	 * @param defaultResource
+	 *            if the added resource is to be used as the multi resource
+	 *            default one
+	 * @throws InitializeException
+	 *             if there is an error adding the resource
+	 */
+	public void addResource(String name, Object[] params,
+			boolean defaultResource) throws InitializeException {
+		ResourceProvider resourceProvider =
+				((ResourceManagerProviderServices) DALLocator.getResourceManager()).createResource(
+						name, params);
+		resources.add(resourceProvider);
+		if (defaultResource) {
+			defaultResourcePos = resources.size() - 1;
+		}
+	}
+
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		if (parameters instanceof MultiResourceParameters) {
+			MultiResourceParameters multiParams =
+					(MultiResourceParameters) parameters;
+			return multiParams.getName() != null
+					&& multiParams.getName().equals(
+							getMultiResourceParameters().getName());
+		}
+
+		return false;
+	}
+
+	public void notifyChanges() throws ResourceNotifyChangesException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).notifyChanges();
+		}
+	}
+
+	public void notifyClose() throws ResourceNotifyCloseException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).notifyClose();
+		}
+	}
+
+	public void notifyDispose() throws ResourceNotifyDisposeException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).notifyDispose();
+		}
+	}
+
+	public void notifyOpen() throws ResourceNotifyOpenException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).notifyOpen();
+		}
+	}
+
+	public void prepare() throws PrepareResourceException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).prepare();
+		}
+	}
+
+	public void closeRequest() throws ResourceException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).closeRequest();
+		}
+	}
+
+	public Object get() throws AccessResourceException {
+		ResourceProvider defaultResource = getDefaultResource();
+		if (defaultResource == null) {
+			return null;
+		} else {
+			return defaultResource.get();
+		}
+	}
+
+	public Object getData() {
+		ResourceProvider defaultResource = getDefaultResource();
+		if (defaultResource == null) {
+			return null;
+		} else {
+			return defaultResource.getData();
+		}
+	}
+
+	private MultiResourceParameters getMultiResourceParameters() {
+		return (MultiResourceParameters) getParameters();
+	}
+
+	public String getName() throws AccessResourceException {
+		StringBuffer buffer =
+				new StringBuffer().append("MultiResource ").append(
+						getMultiResourceParameters().getName()).append(":: ");
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			buffer.append(((ResourceProvider) resources.get(i)).getName());
+			if (defaultResourcePos == i) {
+				buffer.append(" (default)");
+			}
+			if (i < resources.size() - 1) {
+				buffer.append(", ");
+			}
+		}
+		return buffer.toString();
+	}
+
+	public String toString() {
+		try {
+			return getName();
+		} catch (AccessResourceException e) {
+			LOG.error("Error getting the resource name", e);
+		}
+		return super.toString();
+	}
+
+	private ResourceProvider getDefaultResource() {
+		if (getResources().size() > 0) {
+			return (ResourceProvider) getResources().get(defaultResourcePos);
+		} else {
+			return null;
+		}
+	}
+
+	public void setData(Object data) {
+		ResourceProvider defaultResource = getDefaultResource();
+		if (defaultResource != null) {
+			defaultResource.setData(data);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResourceParameters.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import org.gvsig.fmap.dal.feature.spi.memory.MemoryResource;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObjectManager;
+
+/**
+ * Parameters for the creation of a multi resource.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MultiResourceParameters extends AbstractResourceParameters {
+
+	public static final String DYNCLASS_NAME = "MultiResourceParameters";
+
+	private static final String FIELD_NAME = "name";
+
+	private DelegatedDynObject delegatedDynObject;
+
+	/**
+	 * Creates a new {@link MultiResourceParameters}.
+	 */
+	public MultiResourceParameters() {
+		this.delegatedDynObject =
+				(DelegatedDynObject) ToolsLocator.getDynObjectManager()
+						.createDynObject(registerDynClass());
+	}
+
+	/**
+	 * Creates a new {@link MultiResourceParameters}.
+	 * 
+	 * @param name
+	 *            for the parameters. Will be used as the name of the
+	 *            {@link MemoryResource} created with this parametres.
+	 */
+	public MultiResourceParameters(String name) {
+		this();
+		setName(name);
+	}
+
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return delegatedDynObject;
+	}
+
+	public String getTypeName() {
+		return MultiResource.TYPE_NAME;
+	}
+
+	public String getName() {
+		return (String) getDelegatedDynObject().getDynValue(FIELD_NAME);
+	}
+
+	public void setName(String name) {
+		getDelegatedDynObject().setDynValue(FIELD_NAME, name);
+	}
+
+	/**
+	 * Registers the {@link DynClass} of this parameters attributes.
+	 * 
+	 * @return the dyn class of this parameters
+	 */
+	private static synchronized DynClass registerDynClass() {
+		DynObjectManager dynman = ToolsLocator.getDynObjectManager();
+		DynClass dynClass = dynman.get(DYNCLASS_NAME);
+		if (dynClass == null) {
+			dynClass = dynman.add(DYNCLASS_NAME);
+			dynClass.addDynFieldString(FIELD_NAME).setDescription(
+					"The name of the multi resource");
+		}
+		return dynClass;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/MultiResourceParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResource.java	(revision 42196)
@@ -0,0 +1,355 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.CopyParametersException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.ResourceNotification;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.PrepareResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyChangesException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyCloseException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyDisposeException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyOpenException;
+import org.gvsig.fmap.dal.resource.impl.DefaultResourceNotification;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * Base implementation for Resource
+ * </p>
+ * 
+ * <p>
+ * This implementation not define the {@link Resource#begin()} and
+ * {@link Resource#end()}
+ * </p>
+ * 
+ * @author jmvivo
+ * 
+ */
+public abstract class AbstractResource implements ResourceProvider,
+		WeakReferencingObservable {
+
+        private static Logger logger = LoggerFactory.getLogger(AbstractResource.class);
+                
+	private DelegateWeakReferencingObservable delegateObservable;
+
+	private List consumers;
+
+	private long lastTimeOpen;
+	private long lastTimeUsed;
+
+	private ResourceParameters parameters;
+	private ResourceParameters preparedParameters;
+
+	private Object data;
+
+	private int openCount;
+
+	/**
+	 * Number of times an execute is being simultaneously performed with this
+	 * resource.
+	 */
+	private int executeCount = 0;
+
+	protected final Object lock;
+
+	protected AbstractResource(ResourceParameters parameters)
+			throws InitializeException {
+		consumers = new ArrayList();
+		lastTimeOpen = System.currentTimeMillis();
+		lastTimeUsed = lastTimeOpen;
+
+		openCount = 0;
+
+		preparedParameters = null;
+		delegateObservable = new DelegateWeakReferencingObservable(this);
+		lock = new Object();
+		try {
+			this.parameters = (ResourceParameters) parameters.getCopy();
+		} catch (CopyParametersException e) {
+			throw new InitializeException(e);
+		}
+
+	}
+
+	protected final void updateLastTimeUsed() {
+		lastTimeUsed = System.currentTimeMillis();
+	}
+
+	protected final void updateLastTimeOpen() {
+		lastTimeOpen = System.currentTimeMillis();
+		lastTimeUsed = lastTimeOpen;
+	}
+
+	public final long getLastTimeOpen() {
+		return lastTimeOpen;
+	}
+
+	public final long getLastTimeUsed() {
+		return lastTimeUsed;
+	}
+
+	public final ResourceParameters getParameters() {
+		if (preparedParameters != null) {
+			return preparedParameters;
+		}
+		return this.parameters;
+	}
+
+	public void prepare(ResourceParameters params)
+			throws PrepareResourceException {
+		ResourceNotification notification =
+				new DefaultResourceNotification(this,
+						ResourceNotification.PREPARE, params);
+		this.delegateObservable.notifyObservers(notification);
+	}
+
+	public void prepare() throws PrepareResourceException {
+		if (preparedParameters == null) {
+			try {
+				ResourceParameters params =
+						(ResourceParameters) parameters.getCopy();
+				prepare(params);
+				preparedParameters = params;
+			} catch (CopyParametersException e) {
+				throw new PrepareResourceException(this, e);
+			}
+		}
+
+	}
+
+	public void notifyOpen() throws ResourceNotifyOpenException {
+		this.notifyObserver(ResourceNotification.OPEN);
+		updateLastTimeOpen();
+		openCount++;
+	}
+
+	public void notifyClose() throws ResourceNotifyCloseException {
+		if (openCount <= 0) {
+                    try {
+                        throw new IllegalStateException();
+                    } catch(IllegalStateException ex) {
+                        this.
+                        logger.warn("notify close in a resource already closed ("+this.parameters.toString()+").", ex);
+                    }
+                    this.notifyObserver(ResourceNotification.CLOSE);
+		} else {
+                    this.notifyObserver(ResourceNotification.CLOSE);
+                    openCount--;
+                }
+	}
+
+	public void notifyChanges() throws ResourceNotifyChangesException {
+		this.notifyObserver(ResourceNotification.CHANGED);
+
+		Iterator it = consumers.iterator();
+		while (it.hasNext()) {
+			ResourceConsumer consumer =
+					(ResourceConsumer) ((WeakReference) it.next()).get();
+			if (consumer != null) {
+				consumer.resourceChanged(this);
+			} else {
+				it.remove();
+			}
+		}
+	}
+
+	public boolean isOpen() {
+		return this.openCount > 0;
+	}
+
+	public int openCount() {
+		return this.openCount;
+	}
+
+	public void addObserver(Observer o) {
+		this.delegateObservable.addObserver(o);
+	}
+
+	public void deleteObserver(Observer o) {
+		this.delegateObservable.deleteObserver(o);
+	}
+
+	public void deleteObservers() {
+		this.delegateObservable.deleteObservers();
+
+	}
+
+	public final void addObservers(BaseWeakReferencingObservable observers) {
+		this.delegateObservable.addObservers(observers);
+	}
+
+	public final void addConsumer(ResourceConsumer consumer) {
+		this.updateConsumersList();
+		consumers.add(new WeakReference(consumer));
+	}
+
+	public final void removeConsumer(ResourceConsumer consumer) {
+		ResourceConsumer cur;
+		Iterator it = consumers.iterator();
+		while (it.hasNext()) {
+			cur = (ResourceConsumer) ((WeakReference) it.next()).get();
+			if (cur == null || (cur == consumer)) {
+				it.remove();
+			}
+		}
+	}
+
+	public int getConsumersCount() {
+		this.updateConsumersList();
+		return consumers.size();
+	}
+
+	private synchronized void updateConsumersList() {
+		Iterator it = consumers.iterator();
+		WeakReference ref;
+		while (it.hasNext()) {
+			ref = (WeakReference) it.next();
+			if (ref.get() == null) {
+				it.remove();
+			}
+		}
+	}
+
+	public void closeRequest() throws ResourceException {
+		if (inUse()) {
+			return;
+		}
+		if (consumers != null) {
+			for (int i = 0; i < consumers.size(); i++) {
+
+			}
+		}
+		if (consumers != null) {
+			Iterator it = consumers.iterator();
+			while (it.hasNext()) {
+				ResourceConsumer consumer =
+						(ResourceConsumer) ((WeakReference) it.next()).get();
+				if (consumer != null) {
+					consumer.closeResourceRequested(this);
+				} else {
+					it.remove();
+				}
+			}
+		}
+	}
+
+	public void setData(Object data) {
+		this.data = data;
+	}
+
+	public Object getData() {
+		return this.data;
+	}
+
+	protected void notifyObserver(String type) {
+		if (delegateObservable != null) {
+			this.delegateObservable.notifyObservers(new DefaultResourceNotification(
+					this, type));
+		}
+	}
+
+	public void notifyDispose() throws ResourceNotifyDisposeException {
+		this.notifyObserver(ResourceNotification.DISPOSE);
+
+		if (consumers != null) {
+			consumers.clear();
+		}
+
+		lastTimeOpen = 0l;
+		lastTimeUsed = 0l;
+
+		data = null;
+
+		if (delegateObservable != null) {
+			delegateObservable.deleteObservers();
+		}
+	}
+
+	public final boolean inUse() {
+		return executeCount > 0;
+	}
+
+	public Object execute(ResourceAction action)
+			throws ResourceExecuteException {
+		Object value = null;
+		synchronized (lock) {
+			executeBegins();
+			try {
+				value = performExecution(action);
+			} catch (Exception e) {
+				throw new ResourceExecuteException(this, e);
+			} finally {
+				executeEnds();
+			}
+		}
+		return value;
+	}
+
+	protected Object performExecution(ResourceAction action) throws Exception {
+		return action.run();
+	}
+
+	protected final void executeBegins() {
+		executeCount++;
+	}
+
+	protected final void executeEnds() {
+		updateLastTimeUsed();
+		executeCount--;
+	}
+
+	/**
+	 * Returns the name of the {@link Resource}.
+	 * 
+	 * @throws AccessResourceException
+	 *             if there is an error while accessing the resource
+	 */
+	public abstract String getName() throws AccessResourceException;
+
+	/**
+	 * Returns the real resource represented by this object.
+	 * 
+	 * @throws AccessResourceException
+	 *             if there is an error while accessing the resource
+	 */
+	public abstract Object get() throws AccessResourceException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractNonBlockingResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractNonBlockingResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractNonBlockingResource.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+
+/**
+ * <p>
+ * Abstract Implementation for Resource that allows the concurrent access.
+ * </p>
+ * 
+ * @author jmvivo
+ * 
+ */
+public abstract class AbstractNonBlockingResource extends AbstractResource {
+
+	/**
+	 * @param parameters
+	 * @throws InitializeException
+	 */
+	public AbstractNonBlockingResource(ResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+	public Object execute(ResourceAction action)
+			throws ResourceExecuteException {
+		Object value = null;
+		synchronized (lock) {
+			executeBegins();
+		}
+		try {
+			value = performExecution(action);
+		} catch (Exception e) {
+			throw new ResourceExecuteException(this, e);
+		} finally {
+			synchronized (lock) {
+				executeEnds();
+			}
+		}
+		return value;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractNonBlockingResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceParameters.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+
+public abstract class AbstractResourceParameters extends AbstractDataParameters
+		implements ResourceParameters {
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceManagerProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceManagerProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceManagerProviderServices.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+
+public interface ResourceManagerProviderServices extends ResourceManager {
+
+	public boolean register(String type, String description, Class handler,
+			Class params);
+
+	public DataParameters createParameters(String type)
+			throws InitializeException;
+
+	public ResourceProvider createAddResource(ResourceParameters params)
+			throws InitializeException;
+
+	public ResourceProvider createResource(ResourceParameters params)
+			throws InitializeException;
+
+	public ResourceProvider createAddResource(String type, Object[] params)
+			throws InitializeException;
+
+	public ResourceProvider createResource(String type, Object[] params)
+			throws InitializeException;
+
+	public void remove(Resource resource) throws DataException;
+
+	public void remove(String name) throws DataException;
+	
+	public List getResourceProviders();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/spi/ResourceManagerProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceNotification.java	(revision 42196)
@@ -0,0 +1,70 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.impl;
+
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceNotification;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class DefaultResourceNotification implements ResourceNotification {
+
+	private Resource resource;
+	private String type;
+	private Object data = null;
+
+
+	public DefaultResourceNotification(Resource resource,String type){
+		this.resource = resource;
+		this.type = type;
+		this.data = null;
+	}
+
+	public DefaultResourceNotification(Resource resource, String type,
+			Object data) {
+		this.resource = resource;
+		this.type = type;
+		this.data = data;
+	}
+
+	public Resource getResource() {
+		return this.resource;
+	}
+
+	public String getType() {
+		return this.type;
+	}
+
+	public Object getData() {
+		return this.data;
+	}
+
+	public ResourceParameters getParameters() {
+		return (ResourceParameters) this.data;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureSetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureSetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureSetProvider.java	(revision 42196)
@@ -0,0 +1,137 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+
+/**
+ * Base implementation for {@link FeatureSetProvider}s, adding some utility
+ * methods.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractFeatureSetProvider extends AbstractDisposable
+		implements FeatureSetProvider {
+
+	private final AbstractFeatureStoreProvider store;
+	private final FeatureQuery query;
+	private final FeatureType featureType;
+
+	/**
+	 * Creates a new {@link FeatureSetProvider}.
+	 * 
+	 * @param store
+	 *            the underlying {@link FeatureStoreProvider} to get the data
+	 *            from
+	 * @param query
+	 *            used to create the {@link FeatureSetProvider}
+	 * @param featureType
+	 *            the type of feature to get
+	 */
+	public AbstractFeatureSetProvider(AbstractFeatureStoreProvider store,
+			FeatureQuery query, FeatureType featureType) {
+		this.store = store;
+		this.query = query;
+		this.featureType = featureType;
+	}
+
+	/**
+	 * Return the {@link AbstractFeatureStoreProvider}.
+	 * 
+	 * @return the store
+	 */
+	protected AbstractFeatureStoreProvider getStore() {
+		return store;
+	}
+
+	/**
+	 * Returns the {@link FeatureQuery} used to create this set.
+	 * 
+	 * @return the query
+	 */
+	protected FeatureQuery getQuery() {
+		return query;
+	}
+
+	/**
+	 * Returns the type of features to load.
+	 * 
+	 * @return the featureType
+	 */
+	protected FeatureType getFeatureType() {
+		return featureType;
+	}
+
+	public final DisposableIterator fastIterator() throws DataException {
+		return fastIterator(0);
+	}
+
+	public final DisposableIterator fastIterator(long index)
+			throws DataException {
+		return createFastIterator(index);
+	}
+
+	public final DisposableIterator iterator() throws DataException {
+		return iterator(0);
+	}
+
+	public final DisposableIterator iterator(long index) throws DataException {
+		return createIterator(index);
+	}
+
+	/**
+	 * Creates a new {@link Iterator}, begginning at the specified data index.
+	 * 
+	 * @param index
+	 *            the first element position to be returned by the
+	 *            {@link Iterator}
+	 * @return a new {@link Iterator}
+	 * @throws DataException
+	 *             if there is an error creating the {@link Iterator}
+	 */
+	protected abstract AbstractFeatureProviderIterator createIterator(long index)
+			throws DataException;
+
+	/**
+	 * Creates a new fast {@link Iterator}, begginning at the specified data
+	 * index. By fast this means the object instances of data (
+	 * {@link FeatureProvider}) may be reused between the
+	 * {@link Iterator#next()} method invocations.
+	 * 
+	 * @param index
+	 *            the first element position to be returned by the
+	 *            {@link Iterator}
+	 * @return a new {@link Iterator}
+	 * @throws DataException
+	 *             if there is an error creating the {@link Iterator}
+	 */
+	protected abstract AbstractFeatureProviderIterator createFastIterator(
+			long index) throws DataException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureSetProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureProvider.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+
+/**
+ * Inteface for feature of feature based data provider
+ *
+ * @author jmvivo
+ *
+ */
+public interface FeatureProvider {
+
+        /**
+         * Indicates whether the attributo must be assigned by the provider.
+         * Return true if can be assigned, otherwise return false.
+         * 
+         * @param i
+         *      index of the attribute 
+         * @return True if the attribute i can't be set
+         */
+        public boolean isReadOnly(int i);
+        
+	public void set(int i, Object value);
+
+	public Object get(int i);
+
+	public void set(String name, Object value);
+
+	public Object get(String name);
+
+	public void setOID(Object oid);
+
+	public Object getOID();
+
+	public FeatureType getType();
+
+	public FeatureProvider getCopy();
+
+	public Envelope getDefaultEnvelope();
+
+	public Geometry getDefaultGeometry();
+
+	public void setDefaultEnvelope(Envelope extent);
+
+	public void setDefaultGeometry(Geometry geom);
+
+	public boolean isNull(int i);
+
+	public boolean isNull(String name);
+
+	public boolean isNew();
+
+	public void setNew(boolean isNew);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProvider.java	(revision 42196)
@@ -0,0 +1,541 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureLocks;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Abstract implementation of {@link FeatureStoreProvider}
+ *
+ */
+public abstract class AbstractFeatureStoreProvider extends AbstractDisposable
+		implements FeatureStoreProvider {
+
+	private FeatureStoreProviderServices store;
+	private DelegatedDynObject metadata;
+	private DataStoreParameters parameters;
+
+	/**
+	 * Default Constructor.
+	 *
+	 * @param params
+	 * @param storeServices
+	 * @param metadata
+	 */
+	protected AbstractFeatureStoreProvider(DataStoreParameters params,
+			DataStoreProviderServices storeServices, DynObject metadata) {
+		this.store = (FeatureStoreProviderServices) storeServices;
+		this.metadata = (DelegatedDynObject) metadata;
+		this.parameters = params;
+	}
+
+	/**
+	 * Constructor when cannot create metada in constrution time. <br>
+	 * <br>
+	 * <strong>Note: </strong> Don't use it if not is necesary. Set metada
+	 * <strong>as soon as posible</strong> by
+	 * {@link AbstractFeatureStoreProvider#setMetadata(DynObject)}
+	 * 
+	 * @param params
+	 * @param storeServices
+	 */
+	protected AbstractFeatureStoreProvider(DataStoreParameters params,
+			DataStoreProviderServices storeServices) {
+		this.store = (FeatureStoreProviderServices) storeServices;
+		this.metadata = null;
+		this.parameters = params;
+	}
+
+	public final FeatureProvider getFeatureProviderByReference(
+			final FeatureReferenceProviderServices reference)
+			throws DataException {
+		this.open();
+		FeatureProvider featureProvider = (FeatureProvider) getResource()
+				.execute(new ResourceAction() {
+					public Object run() throws Exception {
+						return internalGetFeatureProviderByReference(reference);
+					}
+                                        public String toString() {
+                                            return "getFeatureByReference";
+                                        }
+                                        
+				});
+
+		if (featureProvider == null) {
+			throw new FeatureProviderNotFoundException(reference);
+		}
+
+		return featureProvider;
+	}
+
+	public final FeatureProvider getFeatureProviderByReference(
+			final FeatureReferenceProviderServices reference,
+			final FeatureType featureType) throws DataException {
+		this.open();
+		FeatureProvider featureProvider = (FeatureProvider) getResource()
+				.execute(new ResourceAction() {
+			public Object run() throws Exception {
+				return internalGetFeatureProviderByReference(reference,
+						featureType);
+			}
+		});
+
+		if (featureProvider == null) {
+			throw new FeatureProviderNotFoundException(reference);
+		}
+
+		return featureProvider;
+	}
+
+	/**
+	 * Returns a {@link FeatureProvider} by reference, using the default
+	 * {@link FeatureType}. This method may be rewritten by the child classes as
+	 * an implementation of the
+	 * {@link #getFeatureProviderByReference(FeatureReferenceProviderServices)}
+	 * method.
+	 * 
+	 * @param reference
+	 *            the reference to the {@link FeatureProvider}
+	 * @return the {@link FeatureProvider} being referenced
+	 * @throws DataException
+	 *             if there is an error loading the {@link FeatureProvider}
+	 */
+	protected FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference) throws DataException {
+		return internalGetFeatureProviderByReference(reference,
+				getStoreServices().getDefaultFeatureType());
+	}
+
+	/**
+	 * Set metada container if this not set at construction time and only in one
+	 * time. In other case an Exception will be throw
+	 *
+	 * @param metadata
+	 */
+	protected void setMetadata(DynObject metadata) {
+		if (this.metadata != null) {
+			// FIXME Exception
+			throw new IllegalStateException();
+		}
+		this.metadata = (DelegatedDynObject) metadata;
+	}
+
+	/**
+	 * @return the parameters
+	 */
+	public DataStoreParameters getParameters() {
+		return parameters;
+	}
+
+	/**
+	 * Create or get a resource of <code>type</code> for <code>params</code> in
+	 * {@link ResourceManager}
+	 *
+	 * @param type
+	 * @param params
+	 * @return
+	 * @throws InitializeException
+	 */
+	protected ResourceProvider createResource(String type, Object[] params)
+			throws InitializeException {
+		ResourceManagerProviderServices manager = (ResourceManagerProviderServices) DALLocator
+				.getResourceManager();
+		ResourceProvider resource = manager.createAddResource(type, params);
+		return resource;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getStoreServices()
+	 */
+	public FeatureStoreProviderServices getStoreServices() {
+		return this.store;
+	}
+
+	public FeatureStore getFeatureStore() {
+		if(this.store == null){
+			return null;
+		}
+		return this.store.getFeatureStore();
+	}
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#allowWrite()
+	 */
+	public boolean allowWrite() {
+		return false;
+	}
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#performChanges(Iterator,
+	 *      Iterator, Iterator, Iterator)
+	 */
+
+	public void performChanges(Iterator deleteds, Iterator inserteds,
+			Iterator updateds, Iterator featureTypesChanged)
+			throws DataException {
+		// FIXME exception
+		throw new UnsupportedOperationException();
+
+	}
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#isLocksSupported()
+	 */
+	public boolean isLocksSupported() {
+		return false;
+	}
+
+	/**
+	 * Default Factory of {@link FeatureProvider}. Create a new default
+	 * {@link FeatureProvider} instance.<br>
+	 *
+	 * Override this if you need an special implemtation of
+	 * {@link FeatureProvider}.
+	 *
+	 * @return
+	 * @throws DataException
+	 *
+	 * @see {@link org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createFeatureProvider(FeatureType)}
+	 */
+
+	public FeatureProvider createFeatureProvider(FeatureType type)
+			throws DataException {
+		return this.store.createDefaultFeatureProvider(type);
+	}
+
+	/**
+	 * unsupported by default (return <code>null</code>), override this
+	 * otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createFeatureLocks()
+	 */
+	public FeatureLocks createFeatureLocks() throws DataException {
+		return null;
+	}
+
+	/**
+	 * Default Factory of {@link FeatureSelection}. Create a new default
+	 * {@link FeatureSelection} instance.<br>
+	 *
+	 * Override this if you need an special implemtation of
+	 * {@link FeatureSelection}.
+	 *
+	 * @return
+	 * @throws DataException
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createFeatureSelection()
+	 */
+	public FeatureSelection createFeatureSelection() throws DataException {
+		return this.store.createDefaultFeatureSelection();
+	}
+
+	/**
+	 * do nothing by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#refresh()
+	 */
+	public void refresh() throws OpenException {
+		// Do nothing by default
+	}
+
+	/**
+	 * do nothing by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#close()
+	 */
+	public void close() throws CloseException {
+		// Do nothing by default
+	}
+
+	protected void doDispose() throws BaseException {
+		this.metadata = null;
+		this.store = null;
+	}
+
+	/**
+	 * unsupported geometry by default (return <code>null</code>), override this
+	 * otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getEnvelope()
+	 */
+	public Envelope getEnvelope() throws DataException {
+		return null;
+	}
+
+	/**
+	 * unsupported geometry write by default (return <code>false</code>),
+	 * override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#canWriteGeometry(int,
+	 *      int)
+	 */
+	public boolean canWriteGeometry(int geometryType, int geometrySubType)
+			throws DataException {
+		return false;
+	}
+
+	// --- Metadata methods ---
+
+	public void delegate(DynObject dynObject) {
+		if (this.metadata == null) {
+			return;
+		}
+		this.metadata.delegate(dynObject);
+	}
+
+	public DynClass getDynClass() {
+		if (this.metadata == null) {
+			return null;
+		}
+		return this.metadata.getDynClass();
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.getDynValue(name);
+	}
+
+	public boolean hasDynValue(String name) {
+		if (this.metadata == null) {
+			return false;
+		}
+		// TODO this.open??
+		return this.metadata.hasDynValue(name);
+	}
+
+	public void implement(DynClass dynClass) {
+		if (this.metadata == null) {
+			return;
+		}
+		this.metadata.implement(dynClass);
+
+	}
+
+	public Object invokeDynMethod(int code, DynObject context)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, code, context);
+	}
+
+	public Object invokeDynMethod(String name, DynObject context)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, name, context);
+	}
+
+	public void setDynValue(String name, Object value)
+			throws DynFieldNotFoundException {
+		if (this.metadata == null) {
+			return;
+		}
+		// TODO this.open??
+		this.metadata.setDynValue(name, value);
+	}
+
+	// --- end Metadata methods ---
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#allowAutomaticValues()
+	 */
+	public boolean allowAutomaticValues() {
+		return false;
+
+	}
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#append(org.gvsig.
+	 *      fmap.dal.feature.spi.FeatureProvider)
+	 */
+	public void append(FeatureProvider featureProvider) throws DataException {
+		// FIXME exception
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#beginAppend()
+	 */
+	public void beginAppend() throws DataException {
+		// FIXME exception
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#endAppend()
+	 */
+	public void endAppend() throws DataException {
+		// FIXME exception
+		throw new UnsupportedOperationException();
+	}
+
+	public void abortAppend() throws DataException {
+		// FIXME exception
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * unsupported by default, override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#supportsAppendMode()
+	 */
+	public boolean supportsAppendMode() {
+		return false;
+	}
+
+	/**
+	 * unsupported by default (return null), override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getChilds()
+	 */
+	public Iterator getChilds() {
+		return null;
+	}
+
+	/**
+	 * unsupported by default (return null), override this otherwise
+	 *
+	 * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getExplorer()
+	 */
+	public DataServerExplorer getExplorer() throws ReadException,
+			ValidateDataParametersException {
+		return null;
+	}
+
+	public void clear() {
+		if (metadata != null) {
+			metadata.clear();
+		}
+	}
+
+	/**
+	 * Returns a {@link FeatureProvider} by reference, using the provided
+	 * {@link FeatureType}. This is the child classes implementation of the
+	 * {@link #getFeatureProviderByReference(FeatureReferenceProviderServices)}
+	 * method.
+	 * 
+	 * @param reference
+	 *            the reference to the {@link FeatureProvider}
+	 * @param featureType
+	 *            the type of feature to load
+	 * @return the {@link FeatureProvider} being referenced
+	 * @throws DataException
+	 *             if there is an error loading the {@link FeatureProvider}
+	 */
+	protected abstract FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference, FeatureType featureType)
+			throws DataException;
+
+	public static class FeatureProviderNotFoundException extends DataException {
+
+		private static final long serialVersionUID = 5161749797695723151L;
+
+		public FeatureProviderNotFoundException(FeatureReference reference) {
+			super("Cannot retreive FeatureProvider for reference %(reference)",
+					"_FeatureProviderNotFoundException", serialVersionUID);
+			setValue("reference", reference.toString());
+		}
+	}
+	
+	public boolean isKnownEnvelope(){
+	    return true;
+	}
+    
+    public boolean hasRetrievedFeaturesLimit(){
+        return false;
+    }
+    
+    public int getRetrievedFeaturesLimit(){
+        return -1;
+    }
+
+    public Interval getInterval() {       
+        return null;
+    }    
+
+    public Collection getTimes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection getTimes(Interval interval) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultFeatureProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultFeatureProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultFeatureProvider.java	(revision 42196)
@@ -0,0 +1,258 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.SetReadOnlyAttributeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+/**
+ * Default implementation for {@link FeatureProvider}
+ *
+ */
+public class DefaultFeatureProvider implements FeatureProvider {
+
+	protected FeatureType featureType;
+	protected boolean[] nulls;
+	protected Object[] values;
+	protected Geometry defaultGeometry;
+	protected Envelope envelope;
+	private Object oid;
+	private boolean isNew=false;
+
+	public DefaultFeatureProvider(FeatureType type) {
+		if (type instanceof EditableFeatureType) {
+			throw new IllegalArgumentException("type can't by editable.");
+		}
+		this.featureType = type;
+		this.values = new Object[featureType.size()];
+		this.nulls = new boolean[featureType.size()];
+
+		this.envelope = null;
+		this.defaultGeometry = null;
+		this.oid = null;
+	}
+
+	public DefaultFeatureProvider(FeatureType type, Object oid) {
+		this(type);
+		this.oid = oid;
+	}
+
+        public boolean isReadOnly(int i) {
+            FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(i);
+            if (attribute.getEvaluator() != null) {
+                    return true;
+            }
+            return false;
+        }
+        
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#set(int,
+	 * java.lang.Object)
+	 */
+	public void set(int i, Object value) {
+                FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(i);
+                if( this.isReadOnly(i) ) {
+			return;
+		}
+		if (featureType.getDefaultGeometryAttributeIndex() == i) {
+			defaultGeometry = (Geometry) value;
+			envelope = null;
+		}
+		if (value == null) {
+			nulls[i] = true;
+			values[i] = attribute.getDefaultValue();
+		} else {
+			values[i] = value;
+			nulls[i] = false;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#set(java.lang.String,
+	 * java.lang.Object)
+	 */
+	public void set(String name, Object value) {
+		set(featureType.getIndex(name), value);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#get(int)
+	 */
+	public Object get(int i) {
+		return values[i];
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#get(java.lang.String)
+	 */
+	public Object get(String name) {
+		FeatureAttributeDescriptor featureAttributeDescriptor = featureType.getAttributeDescriptor(name);	
+		return values[featureAttributeDescriptor.getIndex()];
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getType()
+	 */
+	public FeatureType getType() {
+		return featureType;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getCopy()
+	 */
+	public FeatureProvider getCopy() {
+		DefaultFeatureProvider data = new DefaultFeatureProvider(
+				this.getType());
+		return getCopy(data);
+	}
+
+	/**
+	 * Copy values from current instance to <code>data</code>
+	 */
+	protected FeatureProvider getCopy(DefaultFeatureProvider data) {
+		data.oid = this.oid;
+		System.arraycopy(this.values, 0, data.values, 0, this.values.length);
+		data.defaultGeometry = this.defaultGeometry;
+		data.envelope = this.envelope;
+		data.isNew=this.isNew;
+		return data;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getDefaultEnvelope()
+	 */
+	public Envelope getDefaultEnvelope() {
+		if (envelope == null && getDefaultGeometry() != null) {
+			envelope = getDefaultGeometry().getEnvelope();
+		}
+		return envelope;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getDefaultGeometry()
+	 */
+	public Geometry getDefaultGeometry() {
+            return this.defaultGeometry;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.gvsig.fmap.dal.feature.spi.FeatureProvider#setDefaultEnvelope(org
+	 * .gvsig.fmap.geom.primitive.Envelope)
+	 */
+	public void setDefaultEnvelope(Envelope envelope) {
+		this.envelope = envelope;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.gvsig.fmap.dal.feature.spi.FeatureProvider#setDefaultGeometry(org
+	 * .gvsig.fmap.geom.Geometry)
+	 */
+	public void setDefaultGeometry(Geometry geom) {
+		int i = featureType.getDefaultGeometryAttributeIndex();
+                this.set(i, geom);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNull(int)
+	 */
+	public boolean isNull(int i) {
+		return nulls[i];
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNull(java.lang.String)
+	 */
+	public boolean isNull(String name) {
+		int i = featureType.getIndex(name);
+		return isNull(i);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getOID()
+	 */
+	public Object getOID() {
+		return this.oid;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.gvsig.fmap.dal.feature.spi.FeatureProvider#setOID(java.lang.Object)
+	 */
+	public void setOID(Object oid) {
+		this.oid = oid;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNew()
+	 */
+	public boolean isNew(){
+		return isNew;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#setNew(boolean)
+	 */
+	public void setNew(boolean isNew){
+		this.isNew=isNew;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultFeatureProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureSetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureSetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureSetProvider.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Interface for set of feature based data providers
+ *
+ *
+ * @author jmvivo
+ *
+ */
+public interface FeatureSetProvider extends Disposable {
+
+	boolean canFilter();
+
+	boolean canOrder();
+
+	boolean canIterateFromIndex();
+
+	long getSize() throws DataException;
+
+	boolean isEmpty() throws DataException;
+
+    /**
+     * Returns an iterator over the elements in this set, in the order
+     * (if any) defined when the collection was obtained.
+     * 
+     * <p>
+     * Fast in this case means that each of the elements returned may be a
+     * reused or pooled object instance, so don't use it to be stored in any
+     * way.
+     * </p>
+     * <p>
+     * If you need to store one of the {@link FeatureProvider} of the iterator,
+     * use the {@link FeatureProvider#getCopy()} to create a clone of the
+     * object.
+     * </p>
+     * 
+     * @return an iterator of the elements in this collection (in proper
+     *         sequence).
+     * 
+     * @throws DataException
+     *             if there is an error getting the iterator
+     * 
+     * @deprecated use {@link #fastIterator()} instead
+     */
+	DisposableIterator iterator() throws DataException;
+
+    /**
+     * Returns an iterator over the elements in this set, in the order
+     * (if any) defined when the collection was obtained.
+     * 
+     * <p>
+     * Fast in this case means that each of the elements returned may be a
+     * reused or pooled object instance, so don't use it to be stored in any
+     * way.
+     * </p>
+     * <p>
+     * If you need to store one of the {@link FeatureProvider} of the iterator,
+     * use the {@link FeatureProvider#getCopy()} to create a clone of the
+     * object.
+     * </p>
+     * 
+     * @param index
+     *            index of first element to be returned from the iterator (by a
+     *            call to the <tt>next</tt> method).
+     * @return an iterator of the elements in this collection (in proper
+     *         sequence).
+     * 
+     * @throws DataException
+     *             if there is an error getting the iterator
+     * 
+     * @deprecated use {@link #fastIterator()} instead
+     */
+	DisposableIterator iterator(long index) throws DataException;
+
+    /**
+     * Returns an iterator over the elements in this set, in the order
+     * (if any) defined when the collection was obtained.
+     * 
+     * @see #fastIterator()
+     * @see #fastIterator(long)
+     * 
+     * @return an iterator of the elements in this collection (in proper
+     *         sequence).
+     * 
+     * @throws DataException
+     *             if there is an error getting the iterator
+     */
+    DisposableIterator fastIterator() throws DataException;
+
+    /**
+     * Returns an iterator over the elements in this set, in the order
+     * (if any) defined when the collection was obtained.
+     * 
+     * @see #fastIterator()
+     * @see #fastIterator(long)
+     * 
+     * @param index
+     *            index of first element to be returned from the iterator (by a
+     *            call to the <tt>next</tt> method).
+     * @return an iterator of the elements in this collection (in proper
+     *         sequence).
+     * 
+     * @throws DataException
+     *             if there is an error getting the iterator
+     */
+	DisposableIterator fastIterator(long index) throws DataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureSetProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider.java	(revision 42196)
@@ -0,0 +1,255 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureLocks;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+/**
+ *
+ * Interface for all feature based data providers.<br>
+ * <br>
+ * 
+ * 
+ * A FeatureStoreProvier must have a contructor like this:<br>
+ * <br>
+ * <code>
+ * FeatureStoreProvider({@link DataStoreParameters}, {@link FeatureStoreProviderServices})
+ * </code>
+ * 
+ */
+public interface FeatureStoreProvider extends DataStoreProvider {
+
+	/**
+	 * Return a new OID valid for a new feature.
+	 *
+	 * @return a new OID
+	 * @see {@link FeatureStoreProvider#getOIDType()}
+	 */
+	public Object createNewOID();
+
+	/**
+	 * Return OID data type (from {@link DataTypes}) of this store.
+	 *
+	 * @return OID data type
+	 * @see {@link FeatureStoreProvider#createNewOID()} {@link DataTypes}
+	 */
+	public int getOIDType();
+
+	/**
+	 * Factory of {@link FeatureProvider}. Create a new {@link FeatureProvider} instance
+	 * valid for this Store.
+	 *
+	 * @param {@link FeatureType} of the {@link FeatureProvider}
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureProvider createFeatureProvider(FeatureType type) throws DataException;
+
+	/**
+	 * Factory of {@link FeatureSelection}. Create a new
+	 * {@link FeatureSelection} instance valid for this Store.
+	 *
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureSelection createFeatureSelection() throws DataException;
+
+	/**
+	 * Factory of {@link FeatureLocks}. Create a new {@link FeatureLocks}
+	 * instance valid for this Store.
+	 *
+	 *
+	 * @return {@link FeatureLocks} or <code>null</code> if not
+	 *         {@link FeatureStoreProvider#isLocksSupported()}
+	 * @throws DataException
+	 */
+	public FeatureLocks createFeatureLocks() throws DataException;
+
+	/**
+	 * Factory of {@link FeatureSetProvider}. Create a new
+	 * {@link FeatureSetProvider} that represents result of {@link FeatureQuery}
+	 * .
+	 *
+	 * @param query
+	 *            (never will be null)
+	 * @param featureType
+	 *            (never will be null)
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureSetProvider createSet(FeatureQuery query,
+			FeatureType featureType) throws DataException;
+
+	/**
+	 * Return {@link FeatureProvider} from a
+	 * {@link FeatureReferenceProviderServices} using
+	 * {@link FeatureStore#getDefaultFeatureType()} as {@link FeatureType}
+	 *
+	 * @param reference
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureProvider getFeatureProviderByReference(FeatureReferenceProviderServices reference)
+			throws DataException;
+
+	/**
+	 * Return {@link FeatureProvider} from a
+	 * {@link FeatureReferenceProviderServices} using <code>featureType</code>
+	 * as {@link FeatureType}
+	 *
+	 * @param reference
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureProvider getFeatureProviderByReference(
+			FeatureReferenceProviderServices reference, FeatureType featureType)
+			throws DataException;
+	/**
+	 * Informs that store supports write.
+	 *
+	 * @return <true> if write is supported
+	 */
+	public boolean allowWrite();
+
+	/**
+	 *Informs that store supports write a geometry.
+	 *
+	 * @param geometryType
+	 * @param geometrySubType
+	 * @return
+	 * @throws DataException
+	 */
+	public boolean canWriteGeometry(int geometryType, int geometrySubType) throws DataException;
+
+
+	public interface FeatureTypeChanged {
+		FeatureType getSource();
+
+		FeatureType getTarget();
+	}
+
+	/**
+	 * Perform changes on store.
+	 *
+	 * @param deleteds
+	 *            iterator of {@link FeatureReferenceProviderServices}
+	 * @param inserteds
+	 *            iterator of {@link FeatureProvider}
+	 * @param updateds
+	 *            iterator of {@link FeatureProvider}
+	 * @param featureTypesChanged
+	 *            iterator of {@link FeatureTypeChanged}
+	 *
+	 * @throws DataException
+	 */
+	public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator featureTypesChanged) throws DataException;
+
+	/**
+	 * Returns this store's total envelope (extent).
+	 *
+	 * @return this store's total envelope (extent) or <code>null</code> if
+	 *         store not have geometry information
+	 */
+	public Envelope getEnvelope() throws DataException;
+
+	/**
+	 * Informs if store supports locks
+	 *
+	 * @return
+	 */
+	public boolean isLocksSupported();
+
+	/**
+	 * Return {@link FeatureStoreProviderServices} for this store
+	 *
+	 * @return
+	 */
+	public FeatureStoreProviderServices getStoreServices();
+
+	/**
+	 * Inform if the store provider supports automatic values for attributues
+	 * (autonumeric)
+	 *
+	 * @return <code>true</code> if supported
+	 */
+	public boolean allowAutomaticValues();
+
+	/**
+	 * Returns total feature count of this store.
+	 *
+	 * @return
+	 * @throws DataException
+	 */
+	public long getFeatureCount() throws DataException;
+
+
+	public boolean supportsAppendMode();
+
+	public void beginAppend() throws DataException;
+
+	public void endAppend() throws DataException;
+
+	public void append(FeatureProvider featureProvider) throws DataException;
+        
+        public void abortAppend() throws DataException;
+
+	/**
+	 * Return if the provider knows the real envelope of a layer. If not,
+	 * the {@link FeatureStoreProvider#getEnvelope()} method doesn't return
+	 * the full envelope.
+	 * 
+	 * @return
+	 * <true> if it knows the real envelope.
+	 */
+	public boolean isKnownEnvelope(); 
+	
+	/**
+	 * Return if the maximum number of features provided by the
+	 * provider are limited.
+	 * 
+	 * @return
+	 * <true> if there is a limit of features.
+	 */
+	public boolean hasRetrievedFeaturesLimit();
+	
+	/**
+	 * If the {@link FeatureStoreProvider#hasRetrievedFeaturesLimit()} returns true,
+	 * it returns the limit of features retrieved from the provider.
+	 * @return
+	 * The limit of the retrieved features.
+	 */
+	public int getRetrievedFeaturesLimit();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProviderFactory.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.dal.feature.spi.cache;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.ProviderFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public interface FeatureCacheProviderFactory extends ProviderFactory{
+
+	  /**
+	   * Returns the name of the providers created by this factory.
+	   * 
+	   * @return the provider name
+	   */
+	  String getName();
+
+	  /**
+	   * Creates a new CacheProvider.
+	   * 
+	   * @param parameters
+	   *            for the CacheProvider
+	   * @return the new CacheProvider
+	   * @throws DataException
+	   *             if the parameters are not valid or there is an error creating
+	   *             the CacheProvider
+	   */
+	  public FeatureCacheProvider createCacheProvider(DynObject parameters) throws DataException;
+
+	  /**
+	   * Creates the parameters for the {@link Provider} created by this factory.
+	   * 
+	   * @return the provider parameters
+	   */
+	  DynObject createParameters();
+
+	  /**
+	   * Initialices the factory.
+	   */
+	  void initialize();
+
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProvider.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.dal.feature.spi.cache;
+
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureCache;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface FeatureCacheProvider extends FeatureStoreProvider, FeatureCache{
+
+	void initialize(DataServerExplorerParameters parameters) throws DataException;
+	
+	void apply(FeatureStoreProviderServices featureStoreProviderServices,
+			FeatureStoreProvider featureStoreProvider) throws DataException;
+	
+	public FeatureStore createDataStore(double scale) throws DataException;
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/cache/FeatureCacheProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProviderServices.java	(revision 42196)
@@ -0,0 +1,195 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+
+/**
+ * Interface of Services for feature based data providers
+ *
+ * @author jmvivo
+ *
+ */
+public interface FeatureStoreProviderServices extends
+		DataStoreProviderServices {
+
+	/**
+	 * Call this to send a notification to observers of this store
+	 *
+	 * @param notification
+	 */
+	public void notifyChange(String notification);
+
+	/**
+	 * Call this to send a notification to observers of this store
+	 * 
+	 * @param notification
+	 */
+	public void notifyChange(String notification, FeatureProvider data);
+
+	/**
+	 * Call this to send a notification to observers of this store
+	 * 
+	 * @param notification
+	 */
+	public void notifyChange(FeatureStoreNotification storeNotification);
+
+	/**
+	 * Call this to send a notification to observers of this store relative to
+	 * Resources
+	 * 
+	 * @param notification
+	 */
+	public void notifyChange(String notification, Resource resource);
+
+	/**
+	 * Create a new instance of default implementation of a
+	 * {@link FeatureSelection}
+	 *
+	 * @return new {@link FeatureSelection}
+	 * @throws DataException
+	 */
+	public FeatureSelection createDefaultFeatureSelection()
+			throws DataException;
+
+	/**
+	 * Create a new instance of default implementation of a {@link FeatureProvider}
+	 *
+	 * @return new {@link FeatureProvider}
+	 * @throws DataException
+	 */
+	public FeatureProvider createDefaultFeatureProvider(FeatureType type)
+			throws DataException;
+
+	/**
+	 * Sets {@link FeatureType} available from this store.<br>
+	 *
+	 * <strong>Note:</strong> <code>defaultType</code> must be in
+	 * <code>types</code>
+	 *
+	 * @param list
+	 *            of all {@link FeatureType} available
+	 * @param {@link FeatureType} used in
+	 *        {@link FeatureStore#getDefaultFeatureType()}
+	 */
+	public void setFeatureTypes(List types, FeatureType defaultType);
+
+	/**
+	 * Reaturn {@link DataManager} instance.
+	 *
+	 * @return
+	 */
+	public DataManager getManager();
+
+	/**
+	 * Create a {@link Feature} instance for {@link FeatureProvider}
+	 * <code>data</code>
+	 *
+	 * <br>
+	 * <br>
+	 * <strong>NOTE:</strong> Normaly <strong> Providers must use</strong>
+	 * {@link FeatureProvider} instances instead Feature
+	 *
+	 * @param data
+	 * @return a {@link Feature}
+	 * @throws DataException
+	 */
+	public Feature createFeature(FeatureProvider data)
+	throws DataException;
+
+	/**
+	 * Creates a new instance of EditableFeatureType. Uses 'default' as
+	 * identifier.
+	 *
+	 * @return
+	 */
+	public EditableFeatureType createFeatureType();
+
+	/**
+	 * Creates a new instance of EditableFeatureType. Uses 'id' as identifier.
+	 *
+	 * @return
+	 */
+	public EditableFeatureType createFeatureType(String id);
+
+	/**
+	 * Return the instance of {@link FeatureStoreProvider} for this store.
+	 *
+	 * @return
+	 */
+	public FeatureStoreProvider getProvider();
+
+
+	/**
+	 * Return original {@link FeatureType} of {@link FeatureStoreProvider}.
+	 *
+	 * @param id
+	 *            of the {@link FeatureType}
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureType getProviderFeatureType(String featureTypeId);
+
+	/**
+	 * Extract {@link FeatureProvider} from a {@link Feature} instance.
+	 *
+	 * @param feature
+	 * @return
+	 */
+	public FeatureProvider getFeatureProviderFromFeature(Feature feature);
+
+	/**
+	 * Return current FeatureStore
+	 *
+	 * @return
+	 */
+	public FeatureStore getFeatureStore();
+
+	/**
+	 * Return current FeatureStore name.
+	 *
+	 * @return
+	 */
+	public String getName();
+
+	/**
+	 * Return default {@link FeatureType} of the store
+	 *
+	 * @return
+	 */
+	public FeatureType getDefaultFeatureType() throws DataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProvider.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi.index;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+
+
+public interface FeatureIndexProvider {
+	
+	/** Sets the IndexProviderServices that will provide application services to this index provider */
+	public void setFeatureIndexProviderServices(FeatureIndexProviderServices services);
+	
+	/** Initializes this provider */
+	public void initialize() throws InitializeException;
+
+	/** Inserts a value into the index */
+	public void insert(Object value, FeatureReferenceProviderServices fref);
+
+	/** Deletes a value from the index, given its reference */
+	public void delete(Object value, FeatureReferenceProviderServices fref);
+	
+	/** Performs a search in the index and returns a list with all the values that match the given value 
+	 * @throws FeatureIndexException TODO*/
+	public List match(Object value) throws FeatureIndexException;
+	
+	/** Performs a search in the index and returns a list with the values that intersect with the given interval 
+	 * @throws FeatureIndexException TODO*/
+	public List range(Object value1, Object value2) throws FeatureIndexException;
+	
+	/** Performs a search in the index and returns the list of up to n values which are nearest to the given value. */
+	public List nearest(int count, Object value) throws FeatureIndexException;	
+
+	/** Performs a search in the index and returns the list of up to n values which are nearest to the given value and within the distance specified by tolerance. */
+	public List nearest(int count, Object value, Object tolerance) throws FeatureIndexException;	
+	
+	
+	/** Returns true if the provider supports the match function */
+	public boolean isMatchSupported();
+	/** Returns true if the provider supports the range function */
+	public boolean isRangeSupported();
+	/** Returns true if the provider supports the nearest function */
+	public boolean isNearestSupported();
+	/** Returns true if the provider supports the nearest with tolerance function */
+	public boolean isNearestToleranceSupported();
+	public boolean allowNulls();
+
+    /**
+     * Removes all indexed data.
+     * 
+     * @throws DataException
+     *             if there is an error clearing the index
+     */
+    public void clear() throws DataException;
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/AbstractFeatureIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/AbstractFeatureIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/AbstractFeatureIndexProvider.java	(revision 42196)
@@ -0,0 +1,159 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi.index;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+
+
+public abstract class AbstractFeatureIndexProvider implements FeatureIndexProvider {
+
+	private FeatureIndexProviderServices services = null;
+
+	public void initialize() throws InitializeException {
+	}
+
+	public void setFeatureIndexProviderServices(
+			FeatureIndexProviderServices services) {
+		this.services = services;
+	}
+
+	public FeatureIndexProviderServices getFeatureIndexProviderServices() {
+		return services;
+	}
+	
+	public boolean allowNulls() {
+		return false;
+	}
+
+	protected class LongList implements java.util.List{
+		private ArrayList list;
+		public LongList(java.util.List list) {
+			this.list=(ArrayList)list;
+		}
+		public void add(int arg0, Object arg1) {
+			list.add(arg0, arg1);
+		}
+
+		public boolean add(Object arg0) {
+			return list.add(arg0);
+		}
+
+		public Object set(int arg0, Object arg1) {
+			return list.set(arg0, arg1);
+		}
+		public boolean addAll(Collection arg0) {
+			return list.addAll(arg0);
+		}
+		public boolean addAll(int arg0, Collection arg1) {
+			return list.addAll(arg0, arg1);
+		}
+		public void clear() {
+			list.clear();
+		}
+		public boolean contains(Object o) {
+			return list.contains(o);
+		}
+		public boolean containsAll(Collection arg0) {
+			return list.containsAll(arg0);
+		}
+		public Object get(int index) {
+			Object obj=list.get(index);
+			if (obj instanceof Integer){
+				return new Long(((Integer)obj).longValue());
+			}
+			return obj;
+		}
+		public int indexOf(Object o) {
+			return list.indexOf(o);
+		}
+		public boolean isEmpty() {
+			return list.isEmpty();
+		}
+		public Iterator iterator() {
+			return new LongIterator(list.iterator());
+		}
+		public int lastIndexOf(Object o) {
+			return list.lastIndexOf(o);
+		}
+		public ListIterator listIterator() {
+			return list.listIterator();
+		}
+		public ListIterator listIterator(int index) {
+			return list.listIterator(index);
+		}
+		public boolean remove(Object o) {
+			return list.remove(o);
+		}
+		public Object remove(int index) {
+			return list.remove(index);
+		}
+		public boolean removeAll(Collection arg0) {
+			return list.removeAll(arg0);
+		}
+		public boolean retainAll(Collection arg0) {
+			return list.retainAll(arg0);
+		}
+		public int size() {
+			return list.size();
+		}
+		public List subList(int fromIndex, int toIndex) {
+			return list.subList(fromIndex, toIndex);
+		}
+		public Object[] toArray() {
+			return list.toArray();
+		}
+		public Object[] toArray(Object[] arg0) {
+			return list.toArray(arg0);
+		}
+		class LongIterator implements Iterator{
+			private Iterator iterator;
+			public LongIterator(Iterator it) {
+				iterator=it;
+			}
+			public boolean hasNext() {
+				return iterator.hasNext();
+			}
+
+			public Object next() {
+				Object obj=iterator.next();
+				if (obj instanceof Integer){
+					return new Long(((Integer)obj).longValue());
+				}
+				return obj;
+			}
+
+			public void remove() {
+				iterator.remove();
+			}
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/AbstractFeatureIndexProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProviderServices.java	(revision 42196)
@@ -0,0 +1,130 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi.index;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+/**
+ * SPI for all index implementations.
+ * 
+ * This observable object provides notificationswhen the index has finished
+ * filling with data and is available to be used. The observer will
+ * receive then a {@link FeatureStoreNotification#INDEX_FILLING_SUCCESS}
+ * notification, with the index object if it has finished
+ * successfully, or a {@link FeatureStoreNotification#INDEX_FILLING_ERROR}
+ * notification with the exception object if there has been
+ * any error in the process.
+ * 
+ * @see FeatureStoreNotification#INDEX_FILLING_SUCCESS
+ * @see FeatureStoreNotification#INDEX_FILLING_ERROR
+ * 
+ * @author gvSIG team
+ */
+public interface FeatureIndexProviderServices extends FeatureIndex, Observable,
+    Disposable {
+
+    /** Initializes this provider */
+    public void initialize() throws InitializeException;
+
+    /** Column to which belongs this index */
+    public FeatureAttributeDescriptor getFeatureAttributeDescriptor();
+
+    /** FeatureType to which belongs this index */
+    public FeatureType getFeatureType();
+
+    /** FeatureStore to which belongs this index */
+    public FeatureStoreProviderServices getFeatureStoreProviderServices();
+
+    /**
+     * Returns the absolute path (directory + filename) where this index is or
+     * will be stored
+     */
+    public String getFileName();
+
+    /**
+     * Returns a temporary absolute path (directory + filename) according to the
+     * system environment
+     */
+    public String getTemporaryFileName();
+
+    /**
+     * Calculates and returns a new filename for an index, using the given
+     * prefix and suffix
+     */
+    public String getNewFileName(String prefix, String sufix);
+
+    /**
+     * Fills this index with the store's data. This operation will not return
+     * until the index has filled with all the store's data.
+     * 
+     * @throws FeatureIndexException
+     *             if there is an error while filling the index
+     */
+    public void fill() throws FeatureIndexException;
+
+    /**
+     * Fills this index with the store's data.
+     * 
+     * @param background
+     *            if the filling must be performed in background
+     * @param observer
+     *            optional observer to be notified when the
+     *            fill index operation finishes
+     * 
+     * @throws FeatureIndexException
+     *             if there is an error while filling the index
+     * 
+     * @see FeatureStoreNotification#INDEX_FILLING_STARTED
+     * @see FeatureStoreNotification#INDEX_FILLING_SUCCESS
+     * @see FeatureStoreNotification#INDEX_FILLING_CANCELLED
+     * @see FeatureStoreNotification#INDEX_FILLING_ERROR
+     */
+    public void fill(boolean background, Observer observer)
+        throws FeatureIndexException;
+
+    /**
+     * Sets the index as valid or invalid, so it may be used or not.
+     * 
+     * @param valid
+     *            status to set the index to
+     */
+    public void setValid(boolean valid);
+
+    /**
+     * If the index is in the process of being filled by a background task,
+     * synchronize this method or add some mechanism for external callers to
+     * block on it.
+     */
+    public void waitForIndex();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/index/FeatureIndexProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureProviderAttributeMapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureProviderAttributeMapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureProviderAttributeMapper.java	(revision 42196)
@@ -0,0 +1,216 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi.memory;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+/**
+ * Envuelve un FeatureProvider en memoria para que muestre un FeautureType
+ * distinto del orginal sin modificarlo
+ *
+ *
+ * Wrap a FeatureProvider stored in memory to display a FeautureType other than
+ * the original one without change it
+ *
+ * @author jmvivo
+ *
+ */
+public class MemoryFeatureProviderAttributeMapper implements FeatureProvider {
+	private DefaultFeatureProvider original;
+	private FeatureType myFeatureType;
+
+	/**
+	 * Default constructor.
+	 * 
+	 * @param original
+	 *            featureProvider
+	 * @param featureType
+	 *            to expose
+	 */
+	public MemoryFeatureProviderAttributeMapper(DefaultFeatureProvider original,
+			FeatureType featureType) {
+		this.original = original;
+		this.myFeatureType = featureType;
+
+	}
+
+        public boolean isReadOnly(int i) {
+            FeatureAttributeDescriptor attribute = myFeatureType.getAttributeDescriptor(i);
+            if (attribute.getEvaluator() == null) {
+                    return true;
+            }
+            return false;
+        }
+        
+        /*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#get(int)
+	 */
+	public Object get(int i) {
+		return original.get(myFeatureType.getAttributeDescriptor(i).getName());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#get(java.lang.String)
+	 */
+	public Object get(String name) {
+		return original.get(name);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getCopy()
+	 */
+	public FeatureProvider getCopy() {
+		DefaultFeatureProvider data = new DefaultFeatureProvider(myFeatureType);
+		data.setOID(this.original.getOID());
+		Iterator iter = myFeatureType.iterator();
+		FeatureAttributeDescriptor attr;
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			data.set(attr.getIndex(), this.original.get(attr.getName()));
+		}
+		data.setNew(this.original.isNew());
+		return data;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getDefaultEnvelope()
+	 */
+	public Envelope getDefaultEnvelope() {
+		return original.getDefaultEnvelope();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getDefaultGeometry()
+	 */
+	public Geometry getDefaultGeometry() {
+		return original.getDefaultGeometry();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getOID()
+	 */
+	public Object getOID() {
+		return original.getOID();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getType()
+	 */
+	public FeatureType getType() {
+		return myFeatureType;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNew()
+	 */
+	public boolean isNew() {
+		return original.isNew();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNull(int)
+	 */
+	public boolean isNull(int i) {
+		return original.isNull(myFeatureType.getAttributeDescriptor(i)
+				.getName());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNull(java.lang.String)
+	 */
+	public boolean isNull(String name) {
+		return original.isNull(name);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#set(int, java.lang.Object)
+	 */
+	public void set(int i, Object value) {
+		original.set(myFeatureType.getAttributeDescriptor(i).getName(),
+				value);
+
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#set(java.lang.String, java.lang.Object)
+	 */
+	public void set(String name, Object value) {
+		original.set(name, value);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#setDefaultEnvelope(org.gvsig.fmap.geom.primitive.Envelope)
+	 */
+	public void setDefaultEnvelope(Envelope extent) {
+		original.setDefaultEnvelope(extent);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#setDefaultGeometry(org.gvsig.fmap.geom.Geometry)
+	 */
+	public void setDefaultGeometry(Geometry geom) {
+		original.setDefaultGeometry(geom);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#setNew(boolean)
+	 */
+	public void setNew(boolean isNew) {
+		original.setNew(isNew);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#setOID(java.lang.Object)
+	 */
+	public void setOID(Object oid) {
+		original.setOID(oid);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureProviderAttributeMapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureSet.java	(revision 42196)
@@ -0,0 +1,167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi.memory;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.IteratorIndexTooBigException;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureProviderIterator;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureSetProvider;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Implementation of {@link FeatureSetProvider} used in
+ * {@link AbstractMemoryStoreProvider}
+ *
+ */
+public class MemoryFeatureSet extends AbstractFeatureSetProvider {
+
+	protected List data;
+
+	public MemoryFeatureSet(AbstractFeatureStoreProvider store,
+			FeatureQuery query, FeatureType featureType, List data) {
+		super(store, query,
+		/*
+		 * Comprobar si los attributos solicitados son distintos a los
+		 * originales.
+		 */
+		featureType.equals(store.getStoreServices()
+				.getProviderFeatureType(featureType.getId())) ? null
+				: featureType);
+		this.data = data;
+		/*
+		 * Nota: Como no sabe filtrar ni ordenar ignora el query.
+		 */
+	}
+
+	public boolean canFilter() {
+		return false;
+	}
+
+	public boolean canOrder() {
+		return false;
+	}
+
+	public boolean canIterateFromIndex() {
+		return true;
+	}
+
+	public long getSize() throws DataException {
+		return data.size();
+	}
+
+	public boolean isEmpty() throws DataException {
+		return data.isEmpty();
+	}
+
+	protected void doDispose() throws BaseException {
+		//data only has to be deleted when the store.dispose method is called
+		//data.clear();
+	}
+
+	protected AbstractFeatureProviderIterator createFastIterator(long index)
+			throws DataException {
+		return createIterator(index);
+	}
+
+	protected AbstractFeatureProviderIterator createIterator(long index)
+			throws DataException {
+		if (index > 0 && index >= data.size()) {
+			throw new IteratorIndexTooBigException(index, data.size());
+		}
+		Iterator iter =
+				index <= 0 ? data.iterator() : data.listIterator((int) index);
+		if (getFeatureType() == null) {
+			return new DelegatedDisposableIterator(getStore(), iter);
+		} else {
+			return new DelegatedDisposableWrappedIterator(getStore(), iter,
+					getFeatureType());
+		}
+	}
+
+	protected class DelegatedDisposableIterator extends
+			AbstractFeatureProviderIterator {
+		private Iterator delegated;
+
+		public DelegatedDisposableIterator(AbstractFeatureStoreProvider store,
+				Iterator it) {
+			super(store);
+			this.delegated = it;
+		}
+
+		protected void internalDispose() {
+			this.delegated = null;
+		}
+
+		protected boolean internalHasNext() {
+			return delegated.hasNext();
+		}
+
+		protected Object internalNext() {
+			return delegated.next();
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+
+		protected void doDispose() throws BaseException {
+			if (delegated instanceof Disposable) {
+				((Disposable) delegated).dispose();
+			}
+		}
+	}
+
+	protected class DelegatedDisposableWrappedIterator extends
+			DelegatedDisposableIterator {
+		private FeatureType fType;
+
+		public DelegatedDisposableWrappedIterator(
+				AbstractFeatureStoreProvider store, Iterator it,
+				FeatureType featureType) {
+			super(store, it);
+			this.fType = featureType;
+		}
+
+		protected Object internalNext() {
+			DefaultFeatureProvider feature =
+					(DefaultFeatureProvider) super.internalNext();
+			if (fType == null) {
+				return feature;
+			} else {
+				return new MemoryFeatureProviderAttributeMapper(feature,
+						this.fType);
+			}
+
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryFeatureSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResource.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi.memory;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.spi.AbstractNonBlockingResource;
+
+/**
+ * Resource based on memory. It may be used to represent some data loaded into
+ * memory, so it can be named as the data or the source resource loaded.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MemoryResource extends AbstractNonBlockingResource {
+
+	public static final String NAME = "memory";
+	public static final String DESCRIPTION = "Memory based resource";
+
+	/**
+	 * Creates a new {@link MemoryResource}.
+	 * 
+	 * @param parameters
+	 *            to create the resource
+	 * @throws InitializeException
+	 *             if there is an error creating the resource
+	 */
+	public MemoryResource(MemoryResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+	public Object get() throws AccessResourceException {
+		return getName();
+	}
+
+	public String getName() throws AccessResourceException {
+		return NAME;
+	}
+
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/AbstractMemoryStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/AbstractMemoryStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/AbstractMemoryStoreProvider.java	(revision 42196)
@@ -0,0 +1,139 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi.memory;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Abstract implementation for {@link FeatureStoreProvider} for provider that
+ * are loaded statically in memory
+ * 
+ */
+public abstract class AbstractMemoryStoreProvider extends
+		AbstractFeatureStoreProvider {
+
+	protected List data;
+
+	protected AbstractMemoryStoreProvider(DataStoreParameters params,
+			DataStoreProviderServices storeServices, DynObject metadata) {
+		super(params, storeServices, metadata);
+	}
+
+	protected AbstractMemoryStoreProvider(DataStoreParameters params,
+			DataStoreProviderServices storeServices) {
+		super(params, storeServices);
+	}
+
+	public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator originalFeatureTypesUpdated) throws PerformEditingException {
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * Load a {@link FeatureProvider} into memory store.<br>
+	 * Use this when loading data.
+	 * 
+	 * @param data
+	 */
+	public void addFeatureProvider(FeatureProvider data) {
+		data.setOID(this.createNewOID());
+		this.data.add(data);
+	}
+
+	/**
+	 * Return the current size of the memory store.
+	 * 
+	 * @return
+	 * @throws DataException
+	 */
+	public long getDataSize() throws DataException {
+		this.open();
+		return this.data.size();
+	}
+
+	protected FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference) throws DataException {
+		int oid = ((Long) reference.getOID()).intValue();
+		return (FeatureProvider) this.data.get(oid);
+	}
+
+	protected FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference, FeatureType featureType)
+			throws DataException {
+        return new MemoryFeatureProviderAttributeMapper(
+            (DefaultFeatureProvider) internalGetFeatureProviderByReference(reference),
+            featureType);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createSet(org.gvsig.fmap.dal.feature.FeatureQuery, org.gvsig.fmap.dal.feature.FeatureType)
+	 */
+	public FeatureSetProvider createSet(FeatureQuery query, FeatureType featureType)
+			throws DataException {
+		this.open();
+		return new MemoryFeatureSet(this, query, featureType, this.data);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#createFeatureProvider(org.gvsig.fmap.dal.feature.FeatureType)
+	 */
+	public FeatureProvider createFeatureProvider(FeatureType featureType)throws DataException  {
+		this.open();
+		return new DefaultFeatureProvider(featureType);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureCount()
+	 */
+	public long getFeatureCount() throws DataException {
+		return data.size();
+	}
+
+	protected AbstractMemoryStoreProvider getMemoryProvider() {
+		return this;
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		data = null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/AbstractMemoryStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResourceParameters.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi.memory;
+
+import org.gvsig.fmap.dal.resource.spi.AbstractResourceParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObjectManager;
+
+/**
+ * Parameters to create a {@link MemoryResource}.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class MemoryResourceParameters extends AbstractResourceParameters {
+
+	public static final String DYNCLASS_NAME = "MemoryResourceParameters";
+
+	private static String FIELD_NAME = "name";
+
+	private DelegatedDynObject delegatedDynObject;
+
+	/**
+	 * Creates a new memory resource parameters.
+	 */
+	public MemoryResourceParameters() {
+		delegatedDynObject =
+				(DelegatedDynObject) ToolsLocator.getDynObjectManager()
+						.createDynObject(registerDynClass());
+	}
+
+	/**
+	 * Creates a new memory resource parameters with the given memory resource
+	 * name.
+	 * 
+	 * @param name
+	 *            of the resource
+	 */
+	public MemoryResourceParameters(String name) {
+		this();
+		setDynValue(FIELD_NAME, name);
+	}
+
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return delegatedDynObject;
+	}
+
+	public String getTypeName() {
+		return MemoryResource.NAME;
+	}
+
+	/**
+	 * Registers the DynClass related to this parameters.
+	 * 
+	 */
+    private static synchronized DynClass registerDynClass() {
+        DynObjectManager dynman = ToolsLocator.getDynObjectManager();
+        DynClass dynClass = dynman.get(DYNCLASS_NAME);
+        if (dynClass == null) {
+            dynClass = dynman.add(DYNCLASS_NAME);
+
+			dynClass.addDynFieldString(FIELD_NAME).setDescription(
+					"The name of the memory resource");
+        }
+        return dynClass;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/memory/MemoryResourceParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureReferenceProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureReferenceProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureReferenceProviderServices.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * Interface for feature references services for feature based data providers
+ *
+ *
+ * @author jmvivo
+ *
+ */
+public interface FeatureReferenceProviderServices extends FeatureReference {
+
+	/**
+	 * Return the OID (Object IDentifier) object that represents this reference
+	 *
+	 * <strong>Note:</strong> this can be <code>null</code> if provider does not
+	 * support OID
+	 *
+	 * @return <code>Object</code> that identifies a feature
+	 *
+	 * @see FeatureStoreProvider#getOIDType()
+	 * @see FeatureType#hasOID()
+	 */
+	public Object getOID();
+
+	/**
+	 * Return the attribute names that compound the Primary Key of represented
+	 * feature
+	 *
+	 * @return attribute names
+	 *
+	 * @see #getKeyValue(String)
+	 */
+	public String[] getKeyNames();
+
+	/**
+	 * Return the value of an attribute that compound the Primary Key of
+	 * represented feature
+	 *
+	 * @param name
+	 * @return
+	 *
+	 * @see #getKeyNames()
+	 */
+	public Object getKeyValue(String name);
+
+	/**
+	 * Return the identifier of the {@link FeatureType} of the represented
+	 * feature
+	 *
+	 * @return
+	 */
+	public String getFeatureTypeId();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureReferenceProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/LongList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/LongList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/LongList.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.util.Iterator;
+
+/**
+ * Interface like {@link java.util.List} but with <code>long</code> capacity
+ * 
+ * @author jmvivo
+ *
+ */
+public interface LongList {
+
+	public long getSize();
+	public boolean isEmpty();
+	public Iterator iterator();
+	public Iterator iterator(long index);
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/LongList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProviderFactory.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
+
+public abstract class AbstractFeatureStoreProviderFactory extends
+		AbstractDataStoreProviderFactory implements FeatureStoreProviderFactory {
+
+
+	public AbstractFeatureStoreProviderFactory(String name, String description) {
+		super(name, description);
+	}
+
+	public int allowMultipleGeometryTypes() {
+		return UNKNOWN;
+	}
+	
+	public int allowEditableFeatureType() {
+		return UNKNOWN;
+	}
+	
+    public List getSupportedDataTypes() {
+        // null means all supported
+        return null;
+    }
+    
+    public List getSupportedGeometryTypesSubtypes() {
+        // null means all supported
+        return null;
+    }
+    
+    public boolean allowsMandatoryAttributes() {
+        return true;
+    }
+    
+    public boolean allowsPrimaryKeyAttributes() {
+        return true;
+    }
+
+    public int useLocalIndexesCanImprovePerformance() {
+	return UNKNOWN;
+    }    
+
+    /**
+     * @return  dummy feature type. Must be overridden by subclasses
+     * 
+     */
+    public FeatureType createDefaultFeatureType() {
+        DataManager dm = DALLocator.getDataManager();
+        EditableFeatureType eft = dm.createFeatureType();
+        
+        if (allowEditableFeatureType() == DataStoreProviderFactory.YES) {
+            return eft;
+        } else {
+            return eft.getNotEditableCopy();
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultLongList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultLongList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultLongList.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Default implementation for {@link LongList}<br>
+ * <br>
+ *
+ * <strong>Note:</strong> This class is based on {@link java.util.List}
+ */
+public class DefaultLongList implements LongList {
+
+	private List list = null;
+
+	public DefaultLongList(List list) {
+		this.list = list;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.LongList#getSize()
+	 */
+	public long getSize() {
+		return list.size();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.LongList#isEmpty()
+	 */
+	public boolean isEmpty() {
+		return list.isEmpty();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.LongList#iterator()
+	 */
+	public Iterator iterator() {
+		return list.iterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.gvsig.fmap.dal.feature.spi.LongList#iterator(long)
+	 */
+	public Iterator iterator(long index) {
+		if (index > Integer.MAX_VALUE || index < Integer.MIN_VALUE) {
+			throw new IndexOutOfBoundsException();
+		}
+		return list.listIterator((int) index);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DefaultLongList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.lang.reflect.Constructor;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class DataStoreProviderToFeatureStoreProviderFactoryWrapper extends
+		AbstractFeatureStoreProviderFactory implements FeatureStoreProviderFactory {
+
+	private Class providerClass = null;
+	private Class parametersClass = null;
+
+	public DataStoreProviderToFeatureStoreProviderFactoryWrapper(String name, String description,
+			Class provider, Class parametersClass) {
+		super(name, description);
+		this.providerClass = provider;
+		this.parametersClass = parametersClass;
+	}
+
+	public DataStoreProvider createProvider(DataParameters parameters,
+			DataStoreProviderServices providerServices)
+			throws InitializeException {
+		try {
+			Class[] argsTypes = new Class[] { DataParameters.class,
+					DataStoreProviderServices.class };
+			Object[] args = new Object[] { parameters, providerServices };
+
+			Constructor contructor;
+			contructor = findConstructor(providerClass, argsTypes);
+			return (DataStoreProvider) contructor.newInstance(args);
+		} catch (Throwable e) {
+			throw new InitializeException(e);
+		}
+	}
+
+	public final DynObject createParameters() {
+		try {
+			return (DynObject) parametersClass.newInstance();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+	
+	protected Constructor findConstructor(Class clazz, Class[] types)
+			throws SecurityException, NoSuchMethodException {
+		try {
+			return clazz.getConstructor(types);
+		} catch (NoSuchMethodException e) {
+			// Nothing to do
+		}
+
+		// search for the required constructor
+		Constructor[] constrs = clazz.getConstructors();
+		boolean allMatch;
+		for (int i = 0; i < constrs.length; i++) {
+			Class[] paramTypes = constrs[i].getParameterTypes();
+			if (paramTypes.length == types.length) { // a general candidate
+				allMatch = true;
+				for (int j = 0; j < paramTypes.length; j++) {
+					if (!isParameterCompatible(types[j], paramTypes[j])) {
+						allMatch = false;
+						break;
+					}
+				}
+				if (allMatch) {
+					return constrs[i];
+				}
+
+			}
+		}
+		StringBuffer strb = new StringBuffer();
+		strb.append(clazz.getName());
+		strb.append('(');
+		if (types.length > 0) {
+			for (int i = 0; i < types.length - 1; i++) {
+				strb.append(types[i].getName());
+				strb.append(',');
+			}
+			strb.append(types[types.length - 1].getName());
+		}
+		strb.append(')');
+		throw new NoSuchMethodException(strb.toString());
+	}
+
+	private boolean isParameterCompatible(Class current, Class defined) {
+		if (current == null) {
+			return !defined.isPrimitive();
+		} else {
+			return current.isAssignableFrom(defined);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureProviderIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureProviderIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureProviderIterator.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.spi;
+
+import org.gvsig.fmap.dal.spi.AbstractDataProviderIterator;
+
+/**
+ * Abstract base implementation for {@link FeatureProvider} iterators.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractFeatureProviderIterator extends
+		AbstractDataProviderIterator {
+
+	/**
+	 * Creates a new iterator instance.
+	 * 
+	 * @param storeProvider
+	 *            to load the {@link FeatureProvider}s from
+	 */
+	public AbstractFeatureProviderIterator(FeatureStoreProvider storeProvider) {
+		super(storeProvider);
+	}
+
+	/**
+	 * Returns the {@link FeatureStoreProvider}.
+	 * 
+	 * @return the {@link FeatureSetProvider}
+	 */
+	protected FeatureStoreProvider getFeatureStoreProvider() {
+		return (FeatureStoreProvider) getDataStoreProvider();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureProviderIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProvider.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+
+/**
+ * Base interface for providers of data server explorers
+ *
+ *
+ * @author jmvivo
+ * 
+ */
+public interface DataServerExplorerProvider extends DataServerExplorer {
+
+	public DataServerExplorerProviderServices getServerExplorerProviderServices();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStoreProviderFactory.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+public abstract class AbstractDataStoreProviderFactory implements
+		DataStoreProviderFactory {
+
+	private String name = null;
+	private String description = "";
+
+
+	protected AbstractDataStoreProviderFactory(String name, String description) {
+		this.name = name;
+		this.description = description;
+	}
+	
+	public final Provider create(DynObject parameters, ProviderServices services)
+			throws ServiceException {
+		throw new UnsupportedOperationException();
+	}
+
+	public final void initialize() {
+		throw new UnsupportedOperationException();
+	}
+
+	public final String getName() {
+		return this.name;
+	}
+
+	public final String getDescription() {
+		return this.description;
+	}
+
+	public int allowRead() {
+		return UNKNOWN;
+	}
+
+	public int allowWrite() {
+		return UNKNOWN;
+	}
+
+	public int allowCreate() {
+		return UNKNOWN;
+	}
+
+	public int hasTabularSupport() {
+		return UNKNOWN;
+	}
+
+	public int hasVectorialSupport() {
+		return UNKNOWN;
+	}
+
+	public int hasRasterSupport() {
+		return UNKNOWN;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.resource.Resource;
+
+/**
+ * Base inferface of services for data servers explorers
+ * 
+ * @author jmvivo
+ * 
+ */
+public interface DataServerExplorerProviderServices {
+
+	public EditableFeatureType createNewFeatureType();
+
+	public Resource createResource(String name, Object[] params)
+			throws InitializeException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataParameters.java	(revision 42196)
@@ -0,0 +1,245 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.spi;
+
+//import com.google.gson.stream.JsonReader;
+//import com.google.gson.stream.JsonToken;
+import java.io.StringWriter;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.CopyParametersException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+//import com.google.gson.stream.JsonWriter;
+//import java.io.IOException;
+//import java.io.StringReader;
+
+/**
+ * @author jmvivo
+ *
+ */
+public abstract class AbstractDataParameters implements DataParameters {
+	private static final Logger logger = LoggerFactory.getLogger(AbstractDataParameters.class);
+
+	public Object getDynValue(String name) {
+		return getDelegatedDynObject().getDynValue(name);
+	}
+
+	public String toString() {
+		return getDelegatedDynObject().toString();
+	}
+
+//        public boolean fromString(String values) {
+//            boolean ok = true;
+//            try {
+//                DynObject obj = getDelegatedDynObject();
+//                JsonReader reader = new JsonReader(new StringReader(values));
+//                reader.setLenient(true);
+//                reader.beginObject();
+//                String name = null;
+//                String value = null;
+//                while (reader.hasNext()) {
+//                    name ="unknow";
+//                    try {
+//                        name = reader.nextName();
+//                        if (reader.peek() == JsonToken.NULL) {
+//                            value = null;
+//                        } else {
+//                            value = reader.nextString();
+//                        }
+//                        obj.setDynValue(name, value);
+//                    } catch (Exception ex) {
+//                        logger.warn("Can't restore parameter '"+name+"' from string "+values+".", ex);
+//                        ok = false;
+//                    }
+//                }
+//                reader.endObject();
+//            } catch (IOException ex) {
+//                logger.warn("Can't restore parameters from string "+values+".", ex);
+//                ok = false;
+//            }
+//            return ok;
+//        }
+//
+//        public String toString() {
+//            try {
+//                DynObject obj = getDelegatedDynObject();
+//                DynClass dynClass = obj.getDynClass();
+//                DynField[] fields = dynClass.getDynFields();
+//                StringWriter swriter = new StringWriter();
+//                JsonWriter writer = new JsonWriter(swriter);
+//                writer.setSerializeNulls(true);
+//                writer.setLenient(true);
+//                writer.setHtmlSafe(false);
+//                writer.setIndent("");
+//                writer.beginObject();
+//                if (  fields != null && fields.length >0 ) {
+//                    for ( int i = 0; i < fields.length; i++ ) {
+//                        String fieldname = fields[i].getName();
+//                        Object value = obj.getDynValue(fieldname);
+//                        writer.name(fieldname);
+//                        if( value == null ) {
+//                            writer.value((String)null);
+//                        } else {
+//                            writer.value(value.toString());
+//                        }
+//                    }
+//                }
+//                writer.endObject();
+//                writer.close();
+//                return swriter.toString();
+//            } catch (IOException ex) {
+//                logger.warn("Can't serializar DataParamerters correctly.",ex);
+//                return getDelegatedDynObject().toString();
+//            }
+//        }
+//
+        public void setDynValue(String name, Object value) {
+		DelegatedDynObject delegated = getDelegatedDynObject();
+		if (delegated.getDynClass().getDynField(name)!=null){
+			delegated.setDynValue(name, value);	
+		} else {
+                    try {
+                      throw new IllegalArgumentException(name);
+                    } catch(IllegalArgumentException ex) {
+			logger.warn("Attribute '"+name+"' is not defined in "
+					+delegated.getDynClass().getFullName()+ " definition",ex);
+                    }
+		}
+	}
+
+	public void clear() {
+		// TODO Delegar en el DynObject cuando tenga este servicio
+
+		DynField[] fields =
+				getDelegatedDynObject().getDynClass()
+				.getDeclaredDynFields();
+
+		for (int i = 0; i < fields.length; i++) {
+			this.setDynValue(fields[i].getName(), fields[i].getDefaultValue());
+		}
+	}
+
+	protected void copyValuesTo(AbstractDataParameters target) {
+		// TODO Delegar en el DynObject cuando tenga este servicio
+		DynField[] fields =
+				getDelegatedDynObject().getDynClass()
+				.getDynFields();
+
+
+		for (int i = 0; i < fields.length; i++) {
+			target.setDynValue(fields[i].getName(), this.getDynValue(fields[i]
+					.getName()));
+		}
+	}
+
+	public DataParameters getCopy() {
+		// TODO Delegar en el DynObject cuando tenga este servicio
+		AbstractDataParameters copy;
+		try {
+			copy = (AbstractDataParameters) this.getClass().newInstance();
+		} catch (InstantiationException e) {
+			throw new CopyParametersException("data parameters", e);
+		} catch (IllegalAccessException e) {
+			throw new CopyParametersException("data parameters", e);
+		}
+		this.copyValuesTo(copy);
+		return copy;
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		DynField[] fields =
+				getDelegatedDynObject().getDynClass().getDynFields();
+
+		for (int i = 0; i < fields.length; i++) {
+		    if (fields[i].isPersistent()) {
+		    	String name = fields[i].getName(); 
+		    	Object value = this.getDynValue(fields[i].getName()); 
+				state.set(name,value);
+			}
+		}
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		Iterator it = state.getNames();
+		while (it.hasNext()) {
+			String name = (String) it.next();
+			this.setDynValue(name, state.get(name));
+		}
+	}
+
+	public void delegate(DynObject dynObject) {
+		getDelegatedDynObject().delegate(dynObject);
+
+	}
+
+	public DynClass getDynClass() {
+		return getDelegatedDynObject().getDynClass();
+	}
+
+	public boolean hasDynValue(String name) {
+		return getDelegatedDynObject().hasDynValue(name);
+	}
+
+	public void implement(DynClass dynClass) {
+		getDelegatedDynObject().implement(dynClass);
+	}
+
+	public Object invokeDynMethod(String name, DynObject context)
+			throws DynMethodException {
+		return getDelegatedDynObject().invokeDynMethod(this, name, context);
+	}
+
+	public Object invokeDynMethod(int code, DynObject context)
+			throws DynMethodException {
+		return getDelegatedDynObject().invokeDynMethod(this, code, context);
+	}
+
+	public void validate() throws ValidateDataParametersException {
+	    try {
+            this.getDynClass().validate(this);
+        } catch (DynObjectValidateException e) {
+            throw new ValidateDataParametersException(e);
+        }
+	}
+
+	/**
+	 * Returns an instance of the {@link DynObject} to delegate to.
+	 * 
+	 * @return the delegate {@link DynObject}
+	 */
+	protected abstract DelegatedDynObject getDelegatedDynObject();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProvider.java	(revision 42196)
@@ -0,0 +1,170 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.spi;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.Time;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * Base interface for all data providers
+ * 
+ * @author jmvivo
+ *
+ */
+public interface DataStoreProvider extends org.gvsig.fmap.dal.DataStoreProvider, DynObject, Disposable {
+
+	/**
+	 * Retruns an {@link java.util.Iterator} of SubStores from this store. it
+	 * this hasn't SubStores returns <code>null</code>.
+	 *
+	 * @return SubStores iterator
+	 */
+	public abstract Iterator getChilds();
+
+	/**
+	 * Create a {@link DataServerExplorer} from the same source that this store.
+	 *
+	 * @return ServerExplorer
+	 * @throws ReadException
+	 * @throws ValidateDataParametersException
+	 */
+	public abstract DataServerExplorer getExplorer() throws ReadException,
+			ValidateDataParametersException;
+
+	/**
+	 * Open store. You must call it before do anything whith store.<br>
+	 * This method can be called repeatly.
+	 *
+	 * @throws OpenException
+	 */
+	public abstract void open() throws OpenException;
+
+	/**
+	 * Request to close de source
+	 *
+	 * @throws CloseException
+	 */
+	public abstract void close() throws CloseException;
+
+	/**
+	 * Returns the {@link Resource} from where the data is being loaded.
+	 * 
+	 * @return the data {@link Resource}
+	 */
+	ResourceProvider getResource();
+
+	/**
+	 * Force to reload information of Store
+	 *
+	 * @throws OpenException
+	 * @throws InitializeException
+	 */
+	public abstract void refresh() throws OpenException, InitializeException;
+
+	/**
+	 * Returns the unique identifier of the Store
+	 *
+	 * FIXME add examples
+	 *
+	 * @return
+	 */
+	public abstract Object getSourceId();
+
+	/**
+	 * Return the name of the provider.
+	 * Examples: dbf, shp, jdbc, postgresql, wfs, gml
+	 * 
+	 * @return
+	 */
+	public String getProviderName();
+
+	/**
+	 * Returns the name associated to the provider.
+	 * This name is provided for informational purposes only.
+	 * Explamples:
+	 * 
+	 * In a dbf the filename without the path
+	 * 
+	 * In a DDBB table the name of the table
+	 * 
+	 * In a WFS layer the name of the layer.
+	 *
+	 * @return String containing this store's name.
+	 */
+	public String getName();
+	
+	/**
+	 * Returns a more descriptive name for the provider that getName.
+	 * This name is provided for informational purposes only.
+	 * Explamples:
+	 * 
+	 * In a file based store may return the full name of the filename, path and filename.
+	 * 
+	 * In a data base based store may return "server:dbname:tablename"
+	 * 
+	 * In a WFS layer based store may return "server:layername"
+	 * 
+	 * @return String Containing the full name of the store
+	 */
+	public String getFullName();
+	
+	/**
+     * Gets the {@link Interval} of the store, that means the temporal
+     * interval where the store has valid data.
+     * @return
+     *         a time interval or null if there is not time support
+     */
+    public Interval getInterval();
+    
+    /**
+     * Gets all the possible values of time for which the store has data.  
+     * @return
+     *         a collection of {@link Time} objects.
+     */
+    public Collection getTimes();
+    
+    /**
+     * Gets all the possible values of time for which the store has data
+     * and intersects with an interval.
+     * @param interval
+     *         the interval of time
+     * @return
+     *         a collection of {@link Time} objects.
+     */
+    public Collection getTimes(Interval interval);
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataProviderIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataProviderIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataProviderIterator.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+
+/**
+ * Abstract base implementation for data iterators.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public abstract class AbstractDataProviderIterator extends AbstractDisposable
+		implements DisposableIterator {
+
+	private final DataStoreProvider dataStoreProvider;
+
+	private final ResourceAction nextResourceAction = new ResourceAction() {
+		public Object run() throws Exception {
+			dataStoreProvider.open();
+			return internalNext();
+		}
+	};
+
+	private final ResourceAction hasNextResourceAction = new ResourceAction() {
+		public Object run() throws Exception {
+			boolean value = internalHasNext();
+			return value ? Boolean.TRUE : Boolean.FALSE;
+		}
+	};
+
+	/**
+	 * Creates a new iterator instance.
+	 * 
+	 * @param storeProvider
+	 *            to load the {@link FeatureProvider}s from
+	 */
+	public AbstractDataProviderIterator(DataStoreProvider dataStoreProvider) {
+		this.dataStoreProvider = dataStoreProvider;
+	}
+
+    public Object next() {
+		return getResource().execute(nextResourceAction);
+	}
+
+    public boolean hasNext() {
+		Object hasNext = getResource().execute(hasNextResourceAction);
+		return ((Boolean) hasNext).booleanValue();
+	}
+
+	/**
+	 * Returns the {@link Resource} from where the data is going to be loaded.
+	 * 
+	 * @return the {@link Resource} from where the data is going to be loaded
+	 */
+	protected final Resource getResource() {
+		return getDataStoreProvider().getResource();
+	}
+
+	/**
+	 * Returns the {@link DataStoreProvider} to load the Iterator data.
+	 * 
+	 * @return the {@link DataStoreProvider}
+	 */
+	protected DataStoreProvider getDataStoreProvider() {
+		return dataStoreProvider;
+	}
+
+	/**
+	 * Returns the next iterator element. It is the child classes implementation
+	 * for the {@link #next()} method.
+	 * 
+	 * @return the next element
+	 */
+	protected abstract Object internalNext();
+
+	/**
+	 * Returns if there are more elements to get from the iterator. It is the
+	 * child classes implementation for the {@link #hasNext()} method.
+	 * 
+	 * @return if there are more elements
+	 */
+	protected abstract boolean internalHasNext();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataProviderIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataManagerProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataManagerProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataManagerProviderServices.java	(revision 42196)
@@ -0,0 +1,156 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProvider;
+import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProviderFactory;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+/**
+ * Inteface of DataManager of Services for data providers
+ *
+ * @author jmvivo
+ *
+ */
+public interface DataManagerProviderServices extends DataManager {
+
+	public void registerStoreProvider(String name,
+			Class dataStoreProviderClass,
+			Class parametersClass);
+	
+	/**
+	 * Registers a store factory. 
+	 * @param name
+	 * @param dataStoreProviderClass
+	 * @param factoryClass
+	 */
+	public void registerStoreFactory(String name,
+			Class storeFactoryClass);
+
+	/**
+	 * Register a new provider of data server explorer
+	 *
+	 * FIXME
+	 *
+	 * @param <code>name</code> of de provider
+	 * @param dataSourceClass
+	 *            class of provider
+	 * @param parametersClass
+	 *            parameters class of provider
+	 */
+	public void registerExplorerProvider(String name,
+			Class dataSourceClass, Class parametersClass);
+
+
+    /**
+     * Registers a new feature index provider.
+     *
+     * @param name
+     * 			provider's name
+     *
+     * @param description
+     * 			provider's description
+     *
+     * @param clazz
+     * 			a custom FeatureIndexProvider implementation
+     *
+     * @param dataType
+     * 			one of the constants in {@link DataTypes}. This means that this provider
+     * 			can build indexes based on attributes of this type.
+     */
+	public void registerFeatureIndexProvider(String name, String description, Class clazz, int dataType);
+
+	/**
+	 * Returns a DataIndexProvider compatible with the attribute data type.
+	 *
+	 * @param store
+	 *            associated FeatureStore
+	 * @param type
+	 *            associated FeatureType
+	 * @param attr
+	 *            associated FeatureAttributeDescriptor
+	 * @param providerNames
+	 *            array of strings containing one or more preferred providers
+	 * @return empty DataIndexProvider, initialized and ready to use
+	 */
+	public FeatureIndexProviderServices createFeatureIndexProvider(String name, FeatureStore store, FeatureType type,
+			String indexName,
+			FeatureAttributeDescriptor attr) throws InitializeException,
+			ProviderNotRegisteredException;
+
+	 /**
+     * Registers a new cache provider.
+     *
+     * @param name
+     * 			provider's name
+     *
+     * @param description
+     * 			provider's description
+     *
+     * @param clazz
+     * 			a custom FeatureCacheProvider implementation
+     */
+	 public void registerFeatureCacheProvider(FeatureCacheProviderFactory providerFactory);
+		    
+	 /**
+	  * Creates a FeatureCacheProvider from a name and the parameters to configure 
+	  * its data server explorer. The cache provider creates new stores using the
+	  * {@link DataServerExplorerParameters}.
+	  * @param name provider's name.	   	
+	  * @param parameters parameters used to create a explorer.
+	  * @return A cache provider
+	  * @throws DataException
+	  */
+	 public FeatureCacheProvider createFeatureCacheProvider(String name, DynObject parameters) throws DataException;
+
+
+	 /**
+	  *
+	  * Creates a new instance of the provider associated to the passed parameters.
+	  * 
+	  * @param store
+	  * @param parameters
+	  * @return
+	  * @throws InitializeException
+	  * @throws ProviderNotRegisteredException
+	  */
+	 public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException;	 
+
+	 public void registerStoreProviderFactory(DataStoreProviderFactory factory);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataManagerProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreInitializer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreInitializer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreInitializer.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+
+public interface DataStoreInitializer {
+	void intializePhase1(DataManager dataManager,
+			DataStoreParameters parameters) throws InitializeException;
+
+	void intializePhase2(DataStoreProvider provider) throws InitializeException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreInitializer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/pom.xml	(revision 42196)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+      
+<dependency>
+    <groupId>com.google.code.gson</groupId>
+    <artifactId>gson</artifactId>
+    <version>2.3.1</version>
+</dependency>
+      
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <description>This project contains the SPI of the Data Access Library used to implement providers of data.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.DALFileLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLocator.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+public class DALFileLocator extends AbstractLocator {
+
+
+	private static final String LOCATOR_NAME = "DALFileLocator";
+
+	/**
+	 * DataManager name used by the locator to access the instance
+	 */
+	public static final String FILESYSTEMSERVEREXPLORERE_MANAGER_NAME = "FilesystemServerExplorereManager";
+
+	private static final String FILESYSTEMSERVEREXPLORERE_MANAGER_DESCRIPTION = "FilesystemServerExplorereManager of gvSIG Data Access Library";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final DALFileLocator instance = new DALFileLocator();
+
+	/**
+	 * Return the singleton instance.
+	 *
+	 * @return the singleton instance
+	 */
+	public static DALFileLocator getInstance() {
+		return instance;
+	}
+
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+
+	/**
+	 * Return a reference to FilesystemServerExplorerManager.
+	 *
+	 * @return a reference to FilesystemServerExplorerManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static FilesystemServerExplorerManager getFilesystemServerExplorerManager()
+			throws LocatorException {
+		return (FilesystemServerExplorerManager) getInstance().get(
+				FILESYSTEMSERVEREXPLORERE_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the FilesystemSeverExplorerManager
+	 * interface.
+	 * 
+	 * @param clazz
+	 *            implementing the FilesystemSeverExplorerManager interface
+	 */
+	public static void registerFilesystemSeverExplorerManager(Class clazz) {
+		getInstance().register(FILESYSTEMSERVEREXPLORERE_MANAGER_NAME,
+				FILESYSTEMSERVEREXPLORERE_MANAGER_DESCRIPTION,
+				clazz);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLibrary.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.resource.file.FileResourceParameters;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.DefaultFilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.DefaultFilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+
+public class DALFileLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+    	DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
+
+    	ResourceManagerProviderServices resman = (ResourceManagerProviderServices) DALLocator.getResourceManager();
+
+    	if (!resman.getResourceProviders().contains(FileResource.NAME)) {
+			resman.register(FileResource.NAME, FileResource.DESCRIPTION,
+					FileResource.class, FileResourceParameters.class);
+		}
+
+    	if (!dataman.getExplorerProviders().contains(FilesystemServerExplorer.NAME)) {
+			dataman.registerExplorerProvider(FilesystemServerExplorer.NAME,
+					DefaultFilesystemServerExplorer.class,
+					FilesystemServerExplorerParameters.class);
+			DALFileLocator
+					.registerFilesystemSeverExplorerManager(DefaultFilesystemServerExplorerManager.class);
+    	}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/DALFileLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResourceParameters.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.file;
+
+import java.io.File;
+
+import org.gvsig.fmap.dal.resource.spi.AbstractResourceParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+
+public class FileResourceParameters extends AbstractResourceParameters {
+
+    public static final String DYNCLASS_NAME = "FileResourceParameters";
+
+    private static final String DYNFIELDNAME_FILE = "file";
+
+	private DelegatedDynObject delegatedDynObject;
+
+    public FileResourceParameters() {
+		this.delegatedDynObject = (DelegatedDynObject) ToolsLocator
+				.getDynObjectManager()
+				.createDynObject(registerDynClass());
+	}
+
+	public FileResourceParameters(Object[] params) {
+		this();
+		// XXX puede que sobre
+        setDynValue(DYNFIELDNAME_FILE, params[0]);
+	}
+
+	public FileResourceParameters(String name) {
+		this();
+		setDynValue(DYNFIELDNAME_FILE, name);
+	}
+
+	public String getFileName() {
+		if( this.getFile()== null ) {
+			return null;
+		}
+		return this.getFile().getPath();
+	}
+
+	public FileResourceParameters setFileName(String fileName) {
+		this.setDynValue(DYNFIELDNAME_FILE, fileName);
+		return this;
+	}
+
+	public File getFile() {
+		return (File) this.getDynValue(DYNFIELDNAME_FILE);
+	}
+
+	public FileResourceParameters setFile(File file) {
+		this.setDynValue(DYNFIELDNAME_FILE, file);
+		return this;
+	}
+
+	public FileResourceParameters setFile(String fileName) {
+		this.setDynValue(DYNFIELDNAME_FILE, fileName);
+		return this;
+	}
+
+	public String getTypeName() {
+		return FileResource.NAME;
+	}
+
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return delegatedDynObject;
+	}
+
+	/**
+	 * Added "static synchronized" because sometimes
+	 * there is a "DuplicateDynClassException" when user
+	 * selects more than one file (SHP, for example) to be
+	 * added to the view. "definition" is null but then there is
+	 * an exception because in the meantime another thread has registered it
+	 * (I'm not sure this is the cause, but I cannot imagine another
+	 * reason)
+	 */
+    private static synchronized DynClass registerDynClass() {
+    	PersistenceManager manager = ToolsLocator.getPersistenceManager();
+    	DynClass definition = (DynClass) manager.getDefinition(DYNCLASS_NAME);
+    	if( definition == null ) {
+    		definition = (DynClass) manager.addDefinition(
+    				FileResourceParameters.class,
+    				DYNCLASS_NAME, 
+    				DYNCLASS_NAME+" persistence definition", 
+    				null, 
+    				null
+    		);
+
+			definition.addDynField(DYNFIELDNAME_FILE).setType(DataTypes.FILE)
+					.setDescription("The file");
+        }
+        return definition;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResourceParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResource.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.file;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.text.MessageFormat;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.PrepareResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyOpenException;
+import org.gvsig.fmap.dal.resource.spi.AbstractResource;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class FileResource extends AbstractResource {
+
+	final public static String NAME = "file";
+	final public static String DESCRIPTION = "File of filesystem";
+
+	private File file;
+
+	public FileResource(FileResourceParameters params)
+			throws InitializeException {
+		super(params);
+		file = null;
+	}
+
+	public Object get() throws AccessResourceException {
+		return getFile();
+	}
+
+	public String getFileName() throws AccessResourceException {
+		return (String) getFile().getPath();
+	}
+
+	public File getFile() throws AccessResourceException {
+
+		try {
+			prepare();
+		} catch (PrepareResourceException e) {
+			throw new AccessResourceException(this, e);
+		}
+		return ((FileResourceParameters)getParameters()).getFile();
+	}
+
+	// TODO ???
+	public FileInputStream getFileInputStream() throws AccessResourceException,
+			FileNotFoundException {
+		FileInputStream fis = new FileInputStream(getFile());
+		try {
+			notifyOpen();
+		} catch (ResourceNotifyOpenException e) {
+			throw new AccessResourceException(this, e);
+		}
+		return fis;
+	}
+
+	public String getName() throws AccessResourceException {
+		return MessageFormat.format("FileResource({0})",
+				new Object[] { getFileName() });
+	}
+
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		if (!(parameters instanceof FileResourceParameters)) {
+			return false;
+		}
+		FileResourceParameters params;
+		params = (FileResourceParameters) parameters.getCopy();
+		prepare(params);
+		return params.getFileName().equals(this.getFileName());
+
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/resource/file/FileResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemFileFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemFileFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemFileFilter.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem;
+
+import java.io.FileFilter;
+
+public interface FilesystemFileFilter extends FileFilter {
+
+	public String getDataStoreProviderName();
+	public String getDescription();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemFileFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/AbsolutePathRequiredException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/AbsolutePathRequiredException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/AbsolutePathRequiredException.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem;
+
+import org.gvsig.fmap.dal.exception.CreateException;
+
+public class AbsolutePathRequiredException extends CreateException {
+
+	private static final long serialVersionUID = 8723525042950358334L;
+	private final static String MESSAGE_FORMAT = "Absolute path required creating '%(resource)'.";
+	private final static String MESSAGE_KEY = "_AbsolutePathRequiredException";
+
+	public AbsolutePathRequiredException(String resource) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/AbsolutePathRequiredException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProviderServices.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.serverexplorer.filesystem.spi;
+
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProvider;
+
+public interface FilesystemServerExplorerProviderServices extends
+		DataServerExplorerProvider, FilesystemServerExplorer {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerManager.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.serverexplorer.filesystem.spi;
+
+import java.util.Iterator;
+
+public interface FilesystemServerExplorerManager {
+	final public static String FILE_FILTER_EPSNAME = "FilesystemExplorerFilters";
+	final public String FILE_FILTER_EPSDESCRIPTION = "Registro de filtros asociados al explorador del sistema de ficheros.";
+
+	public void registerProvider(String name, String description,
+			Class filesystemServerProvicerClass);
+
+	public Iterator getRegisteredProviders();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProvider.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem.spi;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.CreateException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemFileFilter;
+
+/**
+ * @author jmvivo
+ *
+ */
+public interface FilesystemServerExplorerProvider extends FilesystemFileFilter {
+
+	public void initialize(FilesystemServerExplorerProviderServices serverExplorer);
+
+	public boolean canCreate();
+
+	public void create(NewDataStoreParameters parameters, boolean overwrite)
+			throws CreateException;
+
+	public NewDataStoreParameters getCreateParameters() throws DataException;
+
+	public void remove(DataStoreParameters parameters) throws RemoveException;
+
+	public boolean canCreate(NewDataStoreParameters parameters);
+	
+	public String getResourceRootPathName(DataStore dataStore);
+	
+	public int getMode();
+
+	/**
+	 * Return true if any mode in the parameter is supported.
+	 * 
+	 * @param mode
+	 * @return
+	 */
+	public boolean isMode(int mode);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/spi/FilesystemServerExplorerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorer.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.serverexplorer.filesystem;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+
+public interface FilesystemServerExplorer extends DataServerExplorer {
+
+	public static final String NAME = "FilesystemExplorer";
+
+	public void setCurrentPath(File path) throws FileNotFoundException;
+
+	public File getCurrentPath();
+
+	public File getRoot();
+	
+	public List getProviderNameList(File file);
+
+	public String getProviderName(File file);
+	
+	public NewDataStoreParameters getAddParameters(File file)
+			throws DataException;
+
+	public DataStoreParameters createStoreParameters(File file)
+			throws DataException;
+	public DataStoreParameters createStoreParameters(File file, String providerName) 
+			throws DataException;
+
+//	public DataStore open(File file) throws DataException,
+//			ValidateDataParametersException;
+
+	public Iterator getFilters();
+
+	public Iterator getFilters(int mode);
+	
+	public FilesystemFileFilter getFilter(int mode, String description);
+	
+	public FilesystemFileFilter getGenericFilter();
+	
+	public File getResourcePath(DataStore dataStore, String resourceName) throws DataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorerParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorerParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorerParameters.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem;
+
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObjectManager;
+
+public class FilesystemServerExplorerParameters extends AbstractDataParameters
+		implements DataServerExplorerParameters {
+
+    public static final String DYNCLASS_NAME = "FilesystemServerExplorerParameters";
+
+    private static final String FIELD_ROOT = "root";
+
+	private DelegatedDynObject delegatedDynObject;
+
+	public FilesystemServerExplorerParameters() {
+		this.delegatedDynObject = (DelegatedDynObject) ToolsLocator
+				.getDynObjectManager()
+				.createDynObject(this.registerDynClass());
+	}
+
+	private DynClass registerDynClass() {
+	   	DynObjectManager dynman = ToolsLocator.getDynObjectManager();
+    	DynClass dynClass = dynman.get(DYNCLASS_NAME);
+    	DynField field;
+    	if (dynClass == null) {
+    		dynClass = dynman.add(DYNCLASS_NAME);
+
+    		field = dynClass.addDynField(FIELD_ROOT);
+    		field.setType(DataTypes.STRING);
+    		field.setDescription("Root directory path of the explorer");
+    		field.setTheTypeOfAvailableValues(DynField.ANY);
+
+
+    		field = dynClass.addDynField("initialpath");
+			field.setType(DataTypes.STRING);
+			field.setDescription("Initial path of the explorer");
+			field.setTheTypeOfAvailableValues(DynField.ANY);
+
+    	}
+    	return dynClass;
+	}
+
+	public void setRoot(String path) {
+		this.setDynValue(FIELD_ROOT, path);
+	}
+
+	public String getRoot() {
+		return (String) this.getDynValue(FIELD_ROOT);
+	}
+
+	public void setInitialpath(String path) {
+		this.setDynValue("initialpath", path);
+	}
+
+	public String getInitialpath() {
+		return (String) this.getDynValue("initialpath");
+	}
+
+	public String getExplorerName() {
+		return FilesystemServerExplorer.NAME;
+	}
+
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return delegatedDynObject;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemServerExplorerParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/AbstractFilesystemServerExplorerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/AbstractFilesystemServerExplorerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/AbstractFilesystemServerExplorerProvider.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+import java.io.File;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public abstract class AbstractFilesystemServerExplorerProvider implements FilesystemServerExplorerProvider {
+
+	public String getResourceRootPathName(DataStore dataStore) {
+		if (dataStore.getParameters().hasDynValue(FileResource.NAME)){
+			Object obj = (dataStore.getParameters().getDynValue(FileResource.NAME));
+			if (obj != null){	
+				return removeFileExtension(new File(obj.toString()));		
+			}
+		}
+		return null;
+	}
+	
+	protected String removeFileExtension(File file){
+		int whereDot = file.getName().lastIndexOf(".");	
+		if ((0 < whereDot) && (whereDot <= file.getName().length() - 2)) {
+			whereDot = file.getAbsolutePath().lastIndexOf(".");
+			return file.getAbsolutePath().substring(0, whereDot);
+		}	
+		return file.getAbsolutePath();
+	}
+	
+	public int getMode() {
+		return DataServerExplorer.MODE_ALL;
+	}
+	
+	public boolean isMode(int mode) {
+		if( mode == DataServerExplorer.MODE_ALL ) {
+			return true;
+		}
+		return (this.getMode() & mode) != 0;
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/AbstractFilesystemServerExplorerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorerManager.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.tools.ToolsLocator;
+
+public class DefaultFilesystemServerExplorerManager implements
+		FilesystemServerExplorerManager {
+
+	public Iterator getRegisteredProviders() {
+		return ToolsLocator.getExtensionPointManager().get(FILE_FILTER_EPSNAME)
+				.iterator();
+	}
+
+	public void registerProvider(String name, String description,
+			Class filesystemServerProvicerClass) {
+		ToolsLocator.getExtensionPointManager().add(FILE_FILTER_EPSNAME,
+				FILE_FILTER_EPSDESCRIPTION).append(
+				name, description,
+				filesystemServerProvicerClass);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorer.java	(revision 42196)
@@ -0,0 +1,518 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.gvsig.fmap.dal.DALFileLocator;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.exception.ServerExplorerAddException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemFileFilter;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+
+public class DefaultFilesystemServerExplorer extends AbstractDisposable
+		implements FilesystemServerExplorerProviderServices,
+		FilesystemFileFilter {
+
+	FilesystemServerExplorerParameters parameters;
+
+	private File root;
+
+	private File current; // Current path
+
+	private DataServerExplorerProviderServices providerServices;
+
+	private List serverProviders;
+
+	public DefaultFilesystemServerExplorer(
+			FilesystemServerExplorerParameters parameters,
+			DataServerExplorerProviderServices services)
+			throws InitializeException {
+		this.parameters = parameters;
+		this.providerServices = services;
+		if (this.parameters.getRoot() != null) {
+			this.root = new File(this.parameters.getRoot());
+		}
+		if (this.parameters.getInitialpath() != null) {
+			this.current = new File(this.parameters.getInitialpath());
+		}
+		if (this.root == null && this.current == null) {
+			// throw new InitializeException(this.getName(),
+			// new IllegalArgumentException());
+		} else if (this.current == null) {
+			this.current = new File(this.parameters.getRoot());
+		}
+	}
+
+	public DataServerExplorerParameters getParameters() {
+		return parameters;
+	}
+
+	protected void doDispose() throws BaseException {
+		this.parameters = null;
+		this.root = null;
+	}
+
+	public List list(int mode) throws DataException {
+		if (this.current == null) {
+			throw new IllegalStateException();
+		}
+		if (!this.current.exists()) {
+			new org.gvsig.fmap.dal.exception.FileNotFoundException(this.current);
+		}
+
+		if (!this.current.isDirectory()) {
+			new IllegalArgumentException(this.getProviderName()
+					+ ": Path not a directory '" + this.current + "'");
+		}
+
+		List files = new ArrayList(); // return files
+		List providers = this.getProviders(mode); 
+		String allfiles[] = this.current.list();
+
+		for (int i = 0; i < allfiles.length; i++) {
+			File file = new File(this.root, allfiles[i]);
+			Iterator providersit = providers.iterator();
+			while (providersit.hasNext()) {
+				FilesystemServerExplorerProvider provider = (FilesystemServerExplorerProvider) providersit
+						.next();
+				if( provider.accept(file)) {
+					DataStoreParameters dsp = this.createStoreParameters(file);
+					if (dsp != null) {
+						files.add(dsp);
+					}
+					break;
+				}
+			}
+		}
+		return files;
+	}
+
+	public List list() throws DataException {
+		if (this.current == null) {
+			throw new IllegalStateException(); // FIXME
+		}
+		if (!this.current.exists()) {
+			// TODO crear excepcion de Data??
+			new org.gvsig.fmap.dal.exception.FileNotFoundException(this.current);
+		}
+
+		if (!this.current.isDirectory()) {
+			new IllegalArgumentException(this.getProviderName()
+					+ ": Path not a directory '" + this.current + "'");
+		}
+
+		String files[] = this.current.list();
+		int i;
+		File theFile;
+		ArrayList list = new ArrayList();
+		DataStoreParameters dsp = null;
+
+		for (i = 0; i < files.length; i++) {
+			theFile = new File(this.root, files[i]);
+			dsp = this.createStoreParameters(theFile);
+			if (dsp != null) {
+				list.add(dsp);
+			}
+		}
+		return list;
+	}
+
+	public void setCurrentPath(File path) throws FileNotFoundException {
+		// FIXME Comprobar si es un directorio existente
+		if (!path.exists()) {
+			throw new FileNotFoundException(path);
+		}
+		if (!path.isDirectory()) {
+			throw new IllegalArgumentException(path.getPath()
+					+ " is not a directory");
+		}
+		if (!isFromRoot(path)) {
+			throw new IllegalArgumentException(path.getPath()
+					+ " is not from root");
+
+		}
+
+		this.current = path;
+	}
+
+	public File getCurrentPath() {
+		return this.current;
+	}
+
+	public File getRoot() {
+		return this.root;
+	}
+
+	public void remove(DataStoreParameters dsp) throws RemoveException {
+		String providerName = dsp.getDataStoreName();
+		try {
+			this.checkIsMine(dsp);
+			FilesystemServerExplorerProvider provider = this
+					.getProvider(providerName);
+
+			provider.remove(dsp);
+		} catch (DataException e) {
+			throw new RemoveException(this.getProviderName(), e);
+		}
+	}
+
+	public boolean add(String providerName, NewDataStoreParameters ndsp,
+			boolean overwrite) throws DataException {
+
+		try {
+			this.checkIsMine(ndsp);
+			FilesystemServerExplorerProvider provider = this
+					.getProvider(providerName);
+
+			ndsp.validate();
+			provider.create(ndsp, overwrite);
+			return true; 
+		} catch (DataException e) {
+			throw new ServerExplorerAddException(this.getProviderName(), e);
+		} catch (ValidateDataParametersException e) {
+			throw new ServerExplorerAddException(this.getProviderName(), e);
+		}
+	}
+
+	public boolean canAdd() {
+		return this.root.canWrite();
+	}
+
+	public String getProviderName() {
+		return FilesystemServerExplorer.NAME;
+	}
+
+	public NewDataStoreParameters getAddParameters(String storeName)
+			throws DataException {
+		FilesystemServerExplorerProvider provider = this.getProvider(storeName);
+		if (provider == null) {
+			throw new IllegalArgumentException(
+					"Not registered in this explorer"); // FIXME
+		}
+
+		NewDataStoreParameters nParams = provider.getCreateParameters();
+		// nParams.setAttribute("path", this.getCurrentPath().getPath());
+		return nParams;
+	}
+
+	public boolean canAdd(String storeName) throws DataException {
+		if (storeName == null) {
+			return false;// CanAdd with genericFilter
+		}
+		FilesystemServerExplorerProvider provider = this.getProvider(storeName);
+		if (provider == null) {
+			throw new IllegalArgumentException(
+					"Not registered in this explorer"); // FIXME
+		}
+
+		return provider.canCreate();
+
+	}
+
+	// ==========================================
+
+	private FilesystemServerExplorerProvider getProvider(String storeName)
+			throws InitializeException, ProviderNotRegisteredException {
+		Iterator providers = getProviders(FilesystemServerExplorer.MODE_ALL).iterator();
+		FilesystemServerExplorerProvider provider;
+		while (providers.hasNext()) {
+			provider = (FilesystemServerExplorerProvider) providers.next();
+			if (provider.getDataStoreProviderName().equals(storeName)) {
+				return provider;
+			}
+		}
+		return null;
+	}
+
+	private DataManagerProviderServices getManager() {
+		return (DataManagerProviderServices) DALLocator.getDataManager();
+	}
+	
+	public DataStoreParameters createStoreParameters(File file, String providerName) throws DataException {
+
+		return this.getParametersFor(file, providerName, true);
+	}
+
+	public DataStoreParameters createStoreParameters(File file) throws DataException {
+
+		return this.getParametersFor(file, null, true);
+	}
+	
+	public DataStoreParameters getParametersFor(File file, String providerName, boolean checksExist) throws DataException {
+		
+		if (checksExist) {
+			if (!file.exists()) {
+				return null;
+			}
+			if (!file.isFile()) {
+				return null;
+			}
+			if (!file.canRead()) {
+				return null;
+			}
+			if (file.isHidden()) { // XXX ???
+				return null;
+			}
+		}
+		if(providerName == null)
+			providerName = this.getProviderName(file);
+		if (providerName != null) {
+			DataStoreParameters params = this.getManager()
+			.createStoreParameters(providerName);
+			((FilesystemStoreParameters) params).setFile(file);
+			return params;
+
+		}
+		return null;
+	}
+	
+	public List getProviderNameList(File file) {
+		Iterator filters = getFilters();
+		List list = new ArrayList();
+		while (filters.hasNext()) {
+			FilesystemFileFilter filter = (FilesystemFileFilter) filters.next();
+			if (filter.accept(file)) {
+				list.add(filter.getDataStoreProviderName());
+			}
+		}
+		return list;
+	}
+
+	public String getProviderName(File file) {
+		Iterator filters = getFilters();
+		while (filters.hasNext()) {
+			FilesystemFileFilter filter = (FilesystemFileFilter) filters.next();
+			if (filter.accept(file)) {
+				return filter.getDataStoreProviderName();
+			}
+		}
+		return null;
+	}
+
+	public List getDataStoreProviderNames() {
+		Set names = new HashSet();
+		
+		Iterator filters = getFilters();
+		while (filters.hasNext()) {
+			FilesystemFileFilter filter = (FilesystemFileFilter) filters.next();
+			names.add(filter.getDataStoreProviderName());
+		}
+		return new ArrayList(names);	
+	}
+
+	private void checkIsMine(DataStoreParameters dsp)
+			throws IllegalArgumentException, DataException {
+		// FIXME Exception ???
+		if (!(dsp instanceof FilesystemStoreParameters)) {
+			new IllegalArgumentException(
+					"not instance of FilesystemStoreParameters");
+		}
+		Iterator filters = getFilters();
+		File file = ((FilesystemStoreParameters) dsp).getFile();
+		if (!this.isFromRoot(file)) {
+			throw new IllegalArgumentException("worng explorer");
+		}
+		FilesystemFileFilter filter;
+		while (filters.hasNext()) {
+			filter = (FilesystemFileFilter) filters.next();
+			if (dsp.getDataStoreName()
+					.equals(filter.getDataStoreProviderName())) {
+				return;
+			}
+		}
+		throw new IllegalArgumentException("worng explorer");
+	}
+
+	private boolean isFromRoot(File file) {
+		if (this.root == null) {
+			return true;
+		}
+		return file.getAbsolutePath().startsWith(this.root.getAbsolutePath());
+	}
+
+	public List getProviders() {
+		if (this.serverProviders == null) {
+			Iterator iter = DALFileLocator.getFilesystemServerExplorerManager()
+					.getRegisteredProviders();
+			this.serverProviders = new ArrayList();
+			Extension ext;
+			FilesystemServerExplorerProvider provider;
+			while (iter.hasNext()) {
+				ext = (Extension) iter.next();
+				try {
+					provider = (FilesystemServerExplorerProvider) ext.create();
+				} catch (Exception e) {
+					throw new RuntimeException(e);// FIXME !!!
+				}
+				provider.initialize(this);
+				this.serverProviders.add(provider);
+			}
+		}
+		return this.serverProviders;
+	}
+
+	public List getProviders(int mode) {
+		Iterator iter = DALFileLocator.getFilesystemServerExplorerManager()
+				.getRegisteredProviders();
+		List providers = new ArrayList();
+		Extension ext;
+		FilesystemServerExplorerProvider provider;
+		while (iter.hasNext()) {
+			ext = (Extension) iter.next();
+			try {
+				provider = (FilesystemServerExplorerProvider) ext.create();
+			} catch (Exception e) {
+				throw new RuntimeException(e);// FIXME !!!
+			}
+			if (provider.isMode(mode)) {
+				provider.initialize(this);
+				providers.add(provider);
+			}
+		}
+		return providers;
+	}
+
+	public Iterator getFilters(int mode) {
+		return this.getProviders(mode).iterator();
+	}
+	
+	public Iterator getFilters() {
+		return this.getProviders().iterator();
+	}
+
+	public FilesystemFileFilter getFilter(int mode, final String description ) {
+		
+		final List filters = new ArrayList();
+		Iterator it = this.getFilters(mode);
+		while( it.hasNext() ) {
+			filters.add( it.next() );
+		}
+		FilesystemFileFilter filter = new FilesystemFileFilter() {
+			
+			public boolean accept(File f) {
+				if (f.isDirectory()) {
+					return true;
+				}
+				for(int i=0; i<filters.size(); i++) {
+					if( ((FilesystemFileFilter)filters.get(i)).accept(f) ) {
+						return true;
+					}
+				}
+				return false;
+			}
+			
+			public String getDescription() {
+				return description;
+			}
+			
+			public String getDataStoreProviderName() {
+				return null;
+			}
+		};
+		return filter;
+	}
+
+	public FilesystemFileFilter getGenericFilter() {
+		// FIXME: Este metodo, getGenericFilter, no tengo claro que deba existir (jjdc)
+		return this;
+	}
+
+	public String getDataStoreProviderName() {
+		return null;
+	}
+
+	public String getDescription() {
+		return "All supporteds";
+	}
+
+	public boolean accept(File pathname) {
+		try {
+			return this.createStoreParameters(pathname) != null;
+		} catch (DataException e) {
+			throw new RuntimeException(e); // FIXME excpetion??
+		}
+	}
+
+	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
+		return this.providerServices;
+	}
+
+	public DataStore open(File file) throws DataException,
+			ValidateDataParametersException {
+		DataManager manager =  DALLocator.getDataManager();
+		String providerName = this.getProviderName(file);
+		
+        DataStoreParameters params = this.getAddParameters(file);
+		return manager.openStore(providerName, params);
+	}
+
+	public NewDataStoreParameters getAddParameters(File file)
+			throws DataException {
+		DataStoreParameters params = this.getParametersFor(file, null, false);
+		NewDataStoreParameters newParams = this.getAddParameters(params
+				.getDataStoreName());
+		((FilesystemStoreParameters) newParams)
+				.setFile(((FilesystemStoreParameters) params).getFile());
+		return newParams;
+	}
+
+	public File getResourcePath(DataStore dataStore, String resourceName) throws DataException {
+		FilesystemServerExplorerProvider provider = 
+			this.getProvider(dataStore.getProviderName());
+		if (provider == null){
+			return null;
+		}		
+		String rootPath = provider.getResourceRootPathName(dataStore);
+		if (rootPath == null){
+			return null;
+		}
+		return new File(rootPath + "." + resourceName);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/impl/DefaultFilesystemServerExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemStoreParameters.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem;
+
+import java.io.File;
+
+/**
+ * @author jmvivo
+ *
+ */
+public interface FilesystemStoreParameters {
+
+	public File getFile();
+
+	public void setFile(File file);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/FilesystemStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/FileHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/FileHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/FileHelper.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import java.io.InputStream;
+
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FileHelper {
+
+	private static final Logger LOG = LoggerFactory.getLogger(FileHelper.class);
+
+	private FileHelper() {
+		// Do nothing
+	}
+	
+	public static DynStruct registerParametersDefinition(String name, Class theClass, String filename) {
+		DynStruct definition = null;
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		definition = manager.getDefinition(name);
+		if ( definition == null) {
+			InputStream stream = theClass.getResourceAsStream(filename);
+			if( stream == null ) {
+				throw new DefinitionNotFoundException(theClass,filename);
+			}
+			definition = manager.addDefinition(
+					theClass,
+					name, 
+					stream,
+					theClass.getClassLoader(), 
+					null, 
+					null
+			);
+		}
+		return definition;
+	}
+	
+	public static DynStruct registerMetadataDefinition(String name, Class theClass, String filename) throws MetadataException {
+		DynStruct definition = null;
+
+		MetadataManager manager = MetadataLocator.getMetadataManager();
+		definition = manager.getDefinition(name);
+		if ( definition == null) {
+			InputStream stream = theClass.getResourceAsStream(filename);
+			if( stream == null ) {
+				throw new DefinitionNotFoundException(theClass,filename);
+			}
+			definition = manager.addDefinition(
+					name, 
+					theClass.getResourceAsStream(filename),
+					theClass.getClassLoader()
+			);
+		}
+		return definition;
+	}
+
+	public static DynObject newParameters(String name) {
+    	return ToolsLocator.getDynObjectManager()
+			.createDynObject(
+				ToolsLocator.getPersistenceManager().getDefinition(name)
+			);
+	}
+	
+	public static DynObject newMetadataContainer(String name) {
+		try {
+			MetadataManager manager = MetadataLocator.getMetadataManager();
+			DynStruct definition = manager.getDefinition(name);
+	    	return ToolsLocator.getDynObjectManager().createDynObject(definition);
+		} catch(NullPointerException e) {
+			throw new CantCreateMetadataException(name,e);
+		}
+	}
+
+	private static class DefinitionNotFoundException extends BaseRuntimeException {
+		
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 7598155353307119897L;
+
+		public DefinitionNotFoundException(Class theClass, String filename ) {
+			super(
+				"Can't open parameters definition '%(filename)' from class %(classname).",
+				"_ResourceForParametersDefinitionNotFoundException",
+				serialVersionUID
+			);
+			this.setValue("filename", filename);
+			this.setValue("classname", theClass.getClass().getName());
+		}
+	}
+	
+	private static class CantCreateMetadataException extends RuntimeException {
+		
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = -8373306339537106075L;
+
+		CantCreateMetadataException(String name, Throwable cause) {
+			super("Can't retrieve metadata definition for '"+name+"'.", cause);			
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/FileHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/pom.xml	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.file</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+  </dependencies>
+
+  <modules>
+    <module>org.gvsig.fmap.dal.file.lib</module>
+    <module>org.gvsig.fmap.dal.file.dbf</module>
+    <module>org.gvsig.fmap.dal.file.shp</module>
+    <module>org.gvsig.fmap.dal.file.csv</module>
+  </modules>
+  <description>This library has the implementation of the provider of te Data Access Library for accesing to file resources, like SHP, DBF or CSV.</description>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15642Test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15642Test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15642Test.java	(revision 42196)
@@ -0,0 +1,115 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import junit.framework.TestCase;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.fromjts.FromJTS;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Code to test bug gvsig-desktop#15642. This is based on the code provided by
+ * the bug reporter (see ticket), thanks to him!!
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Bug15642Test extends TestCase {
+
+    public void testBug15642() throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        DataManager manager = DALLocator.getDataManager();
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        NewFeatureStoreParameters destParams =
+                (NewFeatureStoreParameters) manager.createNewStoreParameters(
+                    "FilesystemExplorer", "Shape");
+
+        EditableFeatureType type = destParams.getDefaultFeatureType();
+        GeometryType geometryType =
+            geometryManager.getGeometryType(Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        type.add("geom", org.gvsig.fmap.geom.DataTypes.GEOMETRY)
+            .setGeometryType(geometryType);
+        type.setDefaultGeometryAttributeName("geom");
+        type.add("float", DataTypes.FLOAT).setSize(5);
+        type.add("long", DataTypes.LONG).setSize(5);
+
+        destParams.setDynValue("shpfile", "/tmp/mySHP.shp");
+        destParams.setDynValue("dbffile", "/tmp/mySHP.dbf");
+        destParams.setDynValue("shxfile", "/tmp/mySHP.shx");
+        destParams.setDynValue("crs", "EPSG:23030");
+        destParams.setDefaultFeatureType(type);
+
+        manager.newStore("FilesystemExplorer", "Shape", destParams, true);
+        FeatureStore store =
+            (FeatureStore) manager.openStore("Shape", destParams);
+
+        store.edit();
+        EditableFeature feature = store.createNewFeature().getEditable();
+        com.vividsolutions.jts.geom.Geometry g =
+            new GeometryFactory().createPoint(new Coordinate(0, 0));
+
+        int opCode = geometryManager.getGeometryOperationCode(FromJTS.NAME);
+        GeometryOperation converter =
+            geometryManager.getGeometryOperation(opCode, Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        GeometryOperationContext ctx = new GeometryOperationContext();
+        ctx.setAttribute(FromJTS.PARAM, g);
+        Geometry fmapGeom = (Geometry) converter.invoke(null, ctx);
+        feature.setGeometry(feature.getType()
+            .getDefaultGeometryAttributeIndex(), fmapGeom);
+        feature.setFloat("float", 34.0f);
+        feature.setLong("long", 34l);
+        store.insert(feature);
+        store.finishEditing();
+
+        FeatureAttributeDescriptor defaultGeometryAttribute =
+            store.getDefaultFeatureType().getDefaultGeometryAttribute();
+
+        geometryType = defaultGeometryAttribute.getGeomType();
+        assertEquals(Geometry.TYPES.POINT, geometryType.getType());
+        assertEquals(Geometry.SUBTYPES.GEOM2D, geometryType.getSubType());
+
+        store.dispose();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15642Test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15643Test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15643Test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15643Test.java	(revision 42196)
@@ -0,0 +1,126 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import junit.framework.TestCase;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.fromjts.FromJTS;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Code to test bug gvsig-desktop#15643. This is based on the code provided by
+ * the bug reporter (see ticket), thanks to him!!
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Bug15643Test extends TestCase {
+
+    public void testBug15643() throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        DataManager manager = DALLocator.getDataManager();
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        NewFeatureStoreParameters destParams =
+                (NewFeatureStoreParameters) manager.createNewStoreParameters(
+                    "FilesystemExplorer", "Shape");
+        EditableFeatureType type = destParams.getDefaultFeatureType();
+        GeometryType geometryType =
+            geometryManager.getGeometryType(Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        type.add("geom", org.gvsig.fmap.geom.DataTypes.GEOMETRY)
+            .setGeometryType(geometryType);
+        type.setDefaultGeometryAttributeName("geom");
+        type.add("float", DataTypes.FLOAT).setSize(5);
+        type.add("double", DataTypes.DOUBLE).setSize(5);
+        type.add("int", DataTypes.INT).setSize(5);
+        type.add("long", DataTypes.LONG).setSize(5);
+
+        destParams.setDynValue("shpfile", "/tmp/mySHP.shp");
+        destParams.setDynValue("dbffile", "/tmp/mySHP.dbf");
+        destParams.setDynValue("shxfile", "/tmp/mySHP.shx");
+        destParams.setDynValue("crs", "EPSG:23030");
+        destParams.setDefaultFeatureType(type);
+
+        manager.newStore("FilesystemExplorer", "Shape", destParams, true);
+        FeatureStore store =
+            (FeatureStore) manager.openStore("Shape", destParams);
+
+        store.edit();
+        EditableFeature feature = store.createNewFeature().getEditable();
+        com.vividsolutions.jts.geom.Geometry g =
+            new GeometryFactory().createPoint(new Coordinate(0, 0));
+
+        int opCode = geometryManager.getGeometryOperationCode(FromJTS.NAME);
+        GeometryOperation converter =
+            geometryManager.getGeometryOperation(opCode, Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        GeometryOperationContext ctx = new GeometryOperationContext();
+        ctx.setAttribute(FromJTS.PARAM, g);
+        Geometry fmapGeom = (Geometry) converter.invoke(null, ctx);
+        feature.setGeometry(feature.getType()
+            .getDefaultGeometryAttributeIndex(), fmapGeom);
+        feature.setFloat("float", 34.0f);
+        feature.setDouble("double", 34.0d);
+        feature.setInt("int", 34);
+        feature.setLong("long", 34l);
+        store.insert(feature);
+        store.finishEditing();
+
+        store.accept(new Visitor() {
+
+            public void visit(Object obj) throws VisitCanceledException,
+                BaseException {
+                Feature feature = (Feature) obj;
+                assertEquals(34.0f, feature.getFloat("float"));
+                assertEquals(34.0d, feature.getDouble("double"));
+                assertEquals(34, feature.getInt("int"));
+                assertEquals(34l, feature.getLong("long"));
+            }
+        });
+
+        store.dispose();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15643Test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15670Test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15670Test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15670Test.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import junit.framework.TestCase;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Code to test bug gvsig-desktop#15670. This is based on the code provided by
+ * the bug reporter (see ticket), thanks to him!!
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Bug15670Test extends TestCase {
+
+    public void testBug15670() throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        DataManager manager = DALLocator.getDataManager();
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        NewFeatureStoreParameters destParams =
+                (NewFeatureStoreParameters) manager.createNewStoreParameters(
+                    "FilesystemExplorer", "Shape");
+        EditableFeatureType type = destParams.getDefaultFeatureType();
+        GeometryType geometryType =
+            geometryManager.getGeometryType(Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        type.add("GEOMETRY", org.gvsig.fmap.geom.DataTypes.GEOMETRY)
+            .setGeometryType(geometryType);
+        type.setDefaultGeometryAttributeName("GEOMETRY");
+
+        destParams.setDynValue("shpfile", "/tmp/mySHP.shp");
+        destParams.setDynValue("dbffile", "/tmp/mySHP.dbf");
+        destParams.setDynValue("shxfile", "/tmp/mySHP.shx");
+        destParams.setDynValue("crs", "EPSG:23030");
+        destParams.setDefaultFeatureType(type);
+
+        manager.newStore("FilesystemExplorer", "Shape", destParams, true);
+        FeatureStore store =
+            (FeatureStore) manager.openStore("Shape", destParams);
+
+        store.edit();
+        EditableFeature feature = store.createNewFeature().getEditable();
+        final Point geom =
+            geometryManager.createPoint(10.0, 10.0, Geometry.SUBTYPES.GEOM2D);
+        feature.setGeometry("GEOMETRY", geom);
+        store.insert(feature);
+        store.finishEditing();
+
+        store.accept(new Visitor() {
+
+            public void visit(Object obj) throws VisitCanceledException,
+                BaseException {
+                Feature feature = (Feature) obj;
+                assertEquals(geom, feature.getGeometry("GEOMETRY"));
+            }
+        });
+        store.dispose();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15670Test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15617Test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15617Test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15617Test.java	(revision 42196)
@@ -0,0 +1,131 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import junit.framework.TestCase;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.fromjts.FromJTS;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Code to test bug gvsig-desktop#15617.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Bug15617Test extends TestCase {
+
+    public void testBug15617() throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        DataManager manager = DALLocator.getDataManager();
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        NewFeatureStoreParameters destParams =
+                (NewFeatureStoreParameters) manager.createNewStoreParameters(
+                    "FilesystemExplorer", "Shape");
+
+        EditableFeatureType type = destParams.getDefaultFeatureType();
+        GeometryType geometryType =
+            geometryManager.getGeometryType(Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        type.add("geom", org.gvsig.fmap.geom.DataTypes.GEOMETRY)
+            .setGeometryType(geometryType);
+        type.setDefaultGeometryAttributeName("geom");
+//        type.add("float", DataTypes.FLOAT).setSize(5);
+//        type.add("double", DataTypes.DOUBLE).setSize(5);
+        type.add("int", DataTypes.INT).setSize(5);
+//        type.add("long", DataTypes.LONG).setSize(5);
+        type.add("bool", DataTypes.BOOLEAN);
+
+        destParams.setDynValue("shpfile", "/tmp/mySHP.shp");
+        destParams.setDynValue("dbffile", "/tmp/mySHP.dbf");
+        destParams.setDynValue("shxfile", "/tmp/mySHP.shx");
+        destParams.setDynValue("crs", "EPSG:23030");
+        destParams.setDefaultFeatureType(type);
+
+        manager.newStore("FilesystemExplorer", "Shape", destParams, true);
+        FeatureStore store =
+            (FeatureStore) manager.openStore("Shape", destParams);
+
+        store.edit();
+        EditableFeature feature = store.createNewFeature().getEditable();
+        com.vividsolutions.jts.geom.Geometry g =
+            new GeometryFactory().createPoint(new Coordinate(0, 0));
+
+        int opCode = geometryManager.getGeometryOperationCode(FromJTS.NAME);
+        GeometryOperation converter =
+            geometryManager.getGeometryOperation(opCode, Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        GeometryOperationContext ctx = new GeometryOperationContext();
+        ctx.setAttribute(FromJTS.PARAM, g);
+        Geometry fmapGeom = (Geometry) converter.invoke(null, ctx);
+        
+        feature.setGeometry(feature.getType()
+            .getDefaultGeometryAttributeIndex(), fmapGeom);
+//        feature.setFloat("float", 34.0f);
+//        feature.setDouble("double", 34.0d);
+        feature.setInt("int", 25);
+//        feature.setLong("long", 34l);
+        feature.setBoolean("bool", true);
+        assertEquals(true, feature.getBoolean("bool"));
+        store.insert(feature);
+        store.finishEditing();
+
+        store.accept(new Visitor() {
+
+            public void visit(Object obj) throws VisitCanceledException,
+                BaseException {
+                Feature feature = (Feature) obj;
+//                assertEquals(34.0f, feature.getFloat("float"));
+//                assertEquals(34.0d, feature.getDouble("double"));
+                assertEquals(25, feature.getInt("int"));
+//                assertEquals(34l, feature.getLong("long"));
+                assertEquals(true, feature.getBoolean("bool"));
+            }
+        });
+
+        store.dispose();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15617Test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15671Test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15671Test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15671Test.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import junit.framework.TestCase;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Code to test bug gvsig-desktop#15671. This is based on the code provided by
+ * the bug reporter (see ticket), thanks to him!!
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Bug15671Test extends TestCase {
+
+    public void testBug15671() throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        DataManager manager = DALLocator.getDataManager();
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+
+        NewFeatureStoreParameters destParams =
+            (NewFeatureStoreParameters) manager.createNewStoreParameters(
+                "FilesystemExplorer", "Shape");
+
+        EditableFeatureType type = destParams.getDefaultFeatureType();
+        GeometryType geometryType =
+            geometryManager.getGeometryType(Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        type.add("GEOMETRY", org.gvsig.fmap.geom.DataTypes.GEOMETRY)
+            .setGeometryType(geometryType);
+        type.setDefaultGeometryAttributeName("GEOMETRY");
+        type.add("double", DataTypes.DOUBLE);
+
+        
+        destParams.setDynValue("shpfile", "/tmp/mySHP.shp");
+        destParams.setDynValue("dbffile", "/tmp/mySHP.dbf");
+        destParams.setDynValue("shxfile", "/tmp/mySHP.shx");
+        destParams.setDynValue("crs", "EPSG:23030");
+        //destParams.setDefaultFeatureType(type);
+        
+
+        manager.newStore("FilesystemExplorer", "Shape", destParams, true);
+        FeatureStore store =
+            (FeatureStore) manager.openStore("Shape", destParams);
+
+        store.edit();
+        EditableFeature feature = store.createNewFeature().getEditable();
+        feature.setGeometry("GEOMETRY", null);
+        feature.setDouble("double", 42.0d);
+        store.insert(feature);
+        store.finishEditing();
+
+        store.accept(new Visitor() {
+
+            public void visit(Object obj) throws VisitCanceledException,
+                BaseException {
+                Feature feature = (Feature) obj;
+                Geometry geometry = feature.getGeometry("GEOMETRY");
+                assertEquals(
+                    "Read geometry must be of Null Geometry type instead of "
+                        + geometry.getGeometryType().getName(),
+                    Geometry.TYPES.NULL, geometry.getType());
+            }
+        });
+        store.dispose();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15671Test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15597Test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15597Test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15597Test.java	(revision 42196)
@@ -0,0 +1,167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Code to test bug gvsig-desktop#15597. This is based on the code provided by
+ * the bug reporter (see ticket), thanks to him!!
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Bug15597Test extends TestCase {
+    private static final String TEMP_PATH = System.getProperty("java.io.tmpdir") + File.separator;
+    
+    public void testBug15642() throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        DataManager manager = DALLocator.getDataManager();
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        //Create a store
+        NewFeatureStoreParameters destParams =
+            (NewFeatureStoreParameters) manager.createNewStoreParameters(
+                "FilesystemExplorer", "Shape");
+
+        //Create a feature type with two fields: "geom" and "field1"
+        EditableFeatureType type = destParams.getDefaultFeatureType();
+        GeometryType geometryType =
+            geometryManager.getGeometryType(Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D);
+        type.add("geom", org.gvsig.fmap.geom.DataTypes.GEOMETRY)
+            .setGeometryType(geometryType);
+        type.setDefaultGeometryAttributeName("geom");
+        type.add("field1", DataTypes.STRING).setSize(2);
+       
+        destParams.setDynValue("shpfile", TEMP_PATH + "mySHP.shp");      
+        destParams.setDynValue("crs", "EPSG:23030");
+        destParams.setDefaultFeatureType(type);
+
+        manager.newStore("FilesystemExplorer", "Shape", destParams, true);
+        FeatureStore store =
+            (FeatureStore) manager.openStore("Shape", destParams);
+
+                
+        //Edit the store and add a new Feature.
+        store.edit();
+             
+        EditableFeature feature1 = store.createNewFeature().getEditable();
+        feature1.setGeometry(type.getDefaultGeometryAttributeIndex(), 
+            geometryManager.createPoint(0, 0, SUBTYPES.GEOM2D));
+        feature1.set("field1", "Hi");                     
+      
+        store.insert(feature1);
+        
+        //Finish the edition
+        store.finishEditing();
+
+        //Edit the feature type and add a new field: "field2"
+        store.edit();
+       
+        EditableFeatureType type2 = 
+            store.getDefaultFeatureType().getEditable();        
+        type2.add("field2", DataTypes.STRING).setSize(10);
+        store.update(type2);    
+        
+        assertEquals(store.getDefaultFeatureType().getAttributeDescriptors().length, 3);
+        
+        //Add a second feature
+        EditableFeature feature2 = store.createNewFeature().getEditable();
+        feature2.setGeometry(type2.getDefaultGeometryAttributeIndex(),
+            geometryManager.createPoint(1, 1, SUBTYPES.GEOM2D));
+        feature2.set("field1", "Hi");    
+        feature2.set("field2", "Max");   
+       
+        store.insert(feature2);
+        
+        //The edition is not finished. Check if all the features have the two fields
+        FeatureSet featureSet = store.getFeatureSet();
+        DisposableIterator it = featureSet.fastIterator();
+        
+        it.hasNext();
+        Feature feature = (Feature)it.next();   
+        assertNotNull(feature.getDefaultGeometry());
+        assertEquals("Hi", feature.get("field1"));
+        assertNull(feature.get("field2"));
+        
+        it.hasNext();
+        feature = (Feature)it.next();   
+        assertNotNull(feature.getDefaultGeometry());
+        assertEquals("Hi", feature.get("field1"));
+        assertEquals("Max", feature.get("field2"));        
+        
+        it.dispose();
+        store.finishEditing();
+        
+        //Edit the feature type and remove the field: "field1"
+        store.edit();
+        
+        EditableFeatureType type3 = 
+            store.getDefaultFeatureType().getEditable();        
+        type3.remove("field1");
+        store.update(type3);    
+        
+        assertEquals(store.getDefaultFeatureType().getAttributeDescriptors().length, 2);
+                
+        //Finish the edition
+        store.finishEditing();
+        
+        //Check if all the features have one field
+        featureSet = store.getFeatureSet();
+        it = featureSet.fastIterator();        
+        
+        it.hasNext();
+        feature = (Feature)it.next();   
+        assertNotNull(feature.getDefaultGeometry());       
+        assertEquals("", feature.get("field2"));
+        
+        it.hasNext();
+        feature = (Feature)it.next();   
+        assertNotNull(feature.getDefaultGeometry());
+        assertEquals("Max", feature.get("field2"));     
+        
+        it.dispose();
+        store.dispose();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/Bug15597Test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/prueba.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/prueba.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/pruebaNull.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/pruebaNull.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/pruebaNull.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/pruebaNull.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/poly-valencia.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/poly-valencia.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/prueba.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/prueba.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/prueba.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/prueba.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/pruebaNull.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/pruebaNull.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/poly-valencia.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/poly-valencia.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/poly-valencia.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/data/poly-valencia.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/TestSHP.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/TestSHP.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/TestSHP.java	(revision 42196)
@@ -0,0 +1,294 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.BaseTestEditableFeatureStore;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreProvider;
+
+public class TestSHP extends BaseTestEditableFeatureStore {
+
+	private FilesystemServerExplorer myExplorer;
+
+	public static final File file_prueba = new File(TestSHP.class.getResource(
+			"data/prueba.shp").getFile());
+	public static final File file_prueba_destino = new File(file_prueba
+			.getParent()
+			+ File.separatorChar + "pruebaTemp.shp");
+	public static final File file_pruebaNull = new File(TestSHP.class
+			.getResource("data/pruebaNull.shp").getFile());
+
+	public static final File file_poly_valencia = new File(TestSHP.class
+			.getResource("data/poly-valencia.shp").getFile());
+
+	public void testSimpleIteration() throws Exception {
+
+		FeatureStore store = null;
+		SHPStoreParameters shpParameters = null;
+
+		shpParameters = (SHPStoreParameters) dataManager
+				.createStoreParameters(SHPStoreProvider.NAME);
+
+		// shpParameters.setFile(file_poly_valencia);
+		shpParameters.setFile(file_prueba);
+
+		shpParameters.setCRS("EPSG:23030");
+
+		store = (FeatureStore) dataManager.createStore(shpParameters);
+		FeatureSet set;
+		FeatureType type = store.getDefaultFeatureType();
+		set = store.getFeatureSet();
+
+		System.out.println("Num:" + set.getSize());
+		DisposableIterator it = set.iterator();
+		Iterator ftIt;
+		FeatureAttributeDescriptor desc;
+
+		int i = 0;
+		Feature feature;
+		while (it.hasNext()) {
+			ftIt = type.iterator();
+
+			feature = (Feature) it.next();
+			// while (ftIt.hasNext()) {
+			// desc = (FeatureAttributeDescriptor) ftIt.next();
+			// System.out.println(desc.getName() + ":"
+			// + feature.get(desc.getIndex()));
+			//
+			// }
+			// System.out.println(feature.get("NOMBRE"));
+			System.out.print(feature.getDefaultEnvelope() + "\t");
+			// System.out.print(feature.getDefaultGeometry() + "\t");
+			// System.out.println(feature.get("NOMBRE"));
+			System.out.println("row:" + i);
+			i++;
+
+
+		}
+
+		it.dispose();
+		set.dispose();
+
+		store.dispose();
+
+	}
+
+	public void testEditing(Object x) throws Exception {
+		FeatureStore store = null;
+		SHPStoreParameters shpParameters = null;
+
+		shpParameters = (SHPStoreParameters) dataManager
+				.createStoreParameters(SHPStoreProvider.NAME);
+
+		shpParameters.setFile(file_poly_valencia);
+
+		store = (FeatureStore) dataManager.createStore(shpParameters);
+		FeatureSet set;
+		FeatureType type = store.getDefaultFeatureType();
+		System.err.println("Antes de la edici�n");
+		set = store.getFeatureSet();
+		System.out.println("Num:" + set.getSize());
+		DisposableIterator it = set.iterator();
+		Iterator ftIt;
+		FeatureAttributeDescriptor desc;
+
+		int i = 0;
+		Feature feature;
+		while (it.hasNext()) {
+			ftIt = type.iterator();
+
+			feature = (Feature) it.next();
+			// while (ftIt.hasNext()) {
+			// desc = (FeatureAttributeDescriptor) ftIt.next();
+			// System.out.println(desc.getName() + ":"
+			// + feature.get(desc.getIndex()));
+			//
+			// }
+			// System.out.println(feature.get("NOMBRE"));
+			System.out.print(feature.getDefaultEnvelope() + "\t");
+			// System.out.print(feature.getDefaultGeometry() + "\t");
+			// System.out.println(feature.get("NOMBRE"));
+			System.out.println("row:" + i);
+			i++;
+
+
+		}
+
+		it.dispose();
+		set.dispose();
+		store.edit();
+		EditableFeature ef = store.createNewFeature();
+		store.insert(ef);
+		store.finishEditing();
+		System.err.println("Despu�s de la edici�n");
+		set = store.getFeatureSet();
+		System.out.println("Num:" + set.getSize());
+		it = set.iterator();
+
+		i = 0;
+		while (it.hasNext()) {
+			ftIt = type.iterator();
+
+			feature = (Feature) it.next();
+			// while (ftIt.hasNext()) {
+			// desc = (FeatureAttributeDescriptor) ftIt.next();
+			// System.out.println(desc.getName() + ":"
+			// + feature.get(desc.getIndex()));
+			//
+			// }
+			// System.out.println(feature.get("NOMBRE"));
+			System.out.print(feature.getDefaultEnvelope() + "\t");
+			// System.out.print(feature.getDefaultGeometry() + "\t");
+			// System.out.println(feature.get("NOMBRE"));
+			System.out.println("row:" + i);
+			i++;
+
+
+		}
+
+		it.dispose();
+		set.dispose();
+
+		store.dispose();
+
+	}
+
+	public void testExport(Object x) throws Exception {
+		DBFStoreParameters dbfParameters = null;
+
+		dbfParameters = (DBFStoreParameters) dataManager
+				.createStoreParameters(DBFStoreProvider.NAME);
+
+		dbfParameters.setFile(file_prueba);
+
+		FeatureStore store = (FeatureStore) dataManager
+				.createStore(dbfParameters);
+		FilesystemServerExplorerParameters explorerParams = (FilesystemServerExplorerParameters) dataManager
+				.createServerExplorerParameters(FilesystemServerExplorerParameters.DYNCLASS_NAME);
+		explorerParams.setRoot(file_prueba.getParent());
+
+		FilesystemServerExplorer explorer = (FilesystemServerExplorer) dataManager
+				.createServerExplorer(explorerParams);
+
+		NewFeatureStoreParameters newParams = (NewFeatureStoreParameters) explorer
+				.getAddParameters(file_prueba_destino);
+
+		store.export(explorer, DBFStoreProvider.NAME, newParams);
+
+		FeatureStore result = (FeatureStore) dataManager.createStore(newParams);
+
+		FeatureSet set = result.getFeatureSet();
+		FeatureSet originalSet = store.getFeatureSet();
+		assertEquals(set.getSize(), originalSet.getSize());
+
+		DisposableIterator originalIter = originalSet.iterator();
+		DisposableIterator iter = set.iterator();
+		while (iter.hasNext()) {
+			assertEquals(originalIter.next(), iter.next());
+		}
+
+		originalIter.dispose();
+		iter.dispose();
+		result.dispose();
+		explorer.remove(newParams);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.feature.BaseTestFeatureStore#getDefaultDataStoreParameters
+	 * ()
+	 */
+	public DataStoreParameters getDefaultDataStoreParameters()
+			throws DataException {
+		SHPStoreParameters shpParameters = (SHPStoreParameters) dataManager
+				.createStoreParameters(SHPStoreProvider.NAME);
+
+		//			shpParameters.setFile(file_poly_valencia);
+		shpParameters.setFile(file_prueba);
+		shpParameters.setCRS("EPSG:23030");
+		return shpParameters;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#hasExplorer()
+	 */
+	public boolean hasExplorer() {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @seeorg.gvsig.fmap.dal.feature.BaseTestEditableFeatureStore#
+	 * getDefaultNewDataStoreParameters()
+	 */
+	public NewFeatureStoreParameters getDefaultNewDataStoreParameters()
+			throws Exception {
+		SHPStoreParameters parameters = (SHPStoreParameters) this
+				.getDefaultDataStoreParameters();
+
+		if (this.myExplorer == null) {
+			FeatureStore store = (FeatureStore) dataManager
+					.createStore(parameters);
+			myExplorer = (FilesystemServerExplorer) store.getExplorer();
+			store.dispose();
+		}
+
+		SHPNewStoreParameters result = (SHPNewStoreParameters) myExplorer
+				.getAddParameters(file_prueba_destino);
+
+		result.setCRS(parameters.getCRS());
+		return result;
+	}
+
+	public boolean usesResources() {
+		return true;
+	}
+
+	public boolean resourcesNotifyChanges() {
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/java/org/gvsig/fmap/dal/store/shp/TestSHP.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.shp.SHPLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPMetadata.xml	(revision 42196)
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!--
+Definitions of metadata fields of a shp file.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    
+    <class name="Shape" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="dbf"/>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a Shape store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPMetadata.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPParameters.xml	(revision 42196)
@@ -0,0 +1,88 @@
+<?xml version= "1.0 "?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+    <version>1.0.0</version>
+    <classes>
+        <class name="SHPStoreParameters">
+            <extends>
+                <class namespace="dal" name="ProviderParameters" />
+                <class name="DBFStoreParameters" />
+            </extends>
+            <tags>
+                <value name="defaultGroup" value="Basic"/>
+            </tags>                        
+            <description>Store the parameters need to open a shp file
+            </description>
+            <fields>
+                <field name="dbfFile" type="file" mandatory="false" group="Advanced">
+                    <description>dbf file</description>
+                </field>
+                <field name="shxFile" type="file" mandatory="false" group="Advanced">
+                    <description>The shx file associated to this shape file
+                    </description>
+                </field>
+                <field name="shpFile" type="file" mandatory="true" group="Basic">
+                    <description>The shp file associated to this shape file
+                    </description>
+                </field>
+                <field name="CRS" type="crs" mandatory="true" group="Basic">
+                    <description>The coordinate reference system used in this shape
+                        file</description>
+                </field>
+                <field name="useNullGeometry" label="Use NullGeometry instead of null" type="boolean" mandatory="false" group="Advanced" defaultValue="false">
+                    <description>If set, use NullGeometry object instead a null value</description>
+                </field>
+                <field name="allowInconsistenciesInGeometryType" label="Allow inconsistencies in geometry type" type="boolean" mandatory="false" group="Advanced" defaultValue="false">
+                    <description>If set, attempts to load the geometry but does not match the type of shape file.</description>
+                </field>
+            </fields>
+        </class>
+
+        <class name="SHPNewStoreParameters">
+            <description>Store the parameters need to create a shape file
+            </description>
+            <extends>
+                <class>SHPStoreParameters</class>
+                <class>DBFNewStoreParameters</class>
+            </extends>
+            <fields>
+                <field name="geometryType" type="integer" mandatory="true" group="Basic">
+                    <description>Geometry type use Geometry.TYPES</description>
+                    <availableValues>
+                        <value label="POINT">1</value>
+                        <value label="CURVE">2</value>
+                        <value label="SURFACE">3</value>
+                        <value label="MULTIPOINT">7</value>
+                        <value label="MULTICURVE">8</value>
+                        <value label="MULTISURFACE">9</value>
+                    </availableValues>
+                </field>
+            </fields>
+        </class>
+
+    </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/resources/org/gvsig/fmap/dal/store/shp/SHPParameters.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPNewStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPNewStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPNewStoreParameters.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.shp;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.DBFNewStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+
+public class SHPNewStoreParameters extends SHPStoreParameters implements
+    NewFeatureStoreParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME =
+        "SHPNewStoreParameters";
+    public static final String FEATURETYPE_PARAMTER_NAME = "FeatureType";
+    protected static final String GEOMETRYTYPE_PARAMETER_NAME = "geometryType";
+
+    public SHPNewStoreParameters() {
+        super(PARAMETERS_DEFINITION_NAME);
+    }
+
+    public byte getCodePage() {
+        return ((Byte) this
+            .getDynValue(DBFNewStoreParameters.CODEPAGE_PARAMTER_NAME))
+            .byteValue();
+    }
+
+    public void setCodePage(byte value) {
+        setDynValue(DBFNewStoreParameters.CODEPAGE_PARAMTER_NAME, new Byte(
+            value));
+    }
+
+    public int getGeometryType() {
+        Integer type = (Integer) this.getDynValue(GEOMETRYTYPE_PARAMETER_NAME);
+        if (type == null) {
+            return Geometry.TYPES.NULL;
+        }
+        return type.intValue();
+    }
+
+    public void setGeometryType(int type) {
+        this.setDynValue(GEOMETRYTYPE_PARAMETER_NAME, new Integer(type));
+    }
+
+    public EditableFeatureType getDefaultFeatureType() {
+
+        FeatureType featureType = (FeatureType) this.getDynValue(FEATURETYPE_PARAMTER_NAME);
+        if(featureType instanceof EditableFeatureType){
+            return (EditableFeatureType)featureType;
+        }
+        return (EditableFeatureType) featureType.getEditable();
+    }
+
+    public void setDefaultFeatureType(FeatureType featureType) {
+        this.setDynValue(FEATURETYPE_PARAMTER_NAME, featureType);
+    }
+
+    @Override
+    public void fixParameters() {
+        super.fixParameters();
+        EditableFeatureType featureType = getDefaultFeatureType();
+        if (featureType != null) {
+            FeatureAttributeDescriptor geometryAttribute =
+            	featureType.getAttributeDescriptor(featureType.getDefaultGeometryAttributeName());
+            if (geometryAttribute != null) {
+                if (this.getDynValue(GEOMETRYTYPE_PARAMETER_NAME) == null) {
+                    //Set the geometryType parameter
+                    int geometryType =
+                        featureType.getAttributeDescriptor(
+                            geometryAttribute.getName())
+                            .getGeometryType();
+                    setGeometryType(geometryType);
+                }
+
+                //If the CRS parameter has not been fixed, but there is
+                //a geometric attribute with the CRS, this attribute
+                //can be used.
+                if (getCRS() == null) {
+                    setCRS(geometryAttribute.getSRS());
+                }
+            }
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPNewStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProviderFactory.java	(revision 42196)
@@ -0,0 +1,230 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class SHPStoreProviderFactory extends AbstractFeatureStoreProviderFactory implements FeatureStoreProviderFactory{
+
+    private static final Logger logger = LoggerFactory.getLogger(SHPStoreProviderFactory.class);
+    
+    public static final String DEFAULT_GEOMETRY_FIELD_NAME = "GEOMETRY";
+    public static final int DEFAULT_GEOMETRY_TYPE = Geometry.TYPES.SURFACE;
+    public static final int DEFAULT_GEOMETRY_SUBTYPE = Geometry.SUBTYPES.GEOM2D;
+    
+	protected SHPStoreProviderFactory(String name, String description) {
+		super(name, description);
+	}
+
+	public DataStoreProvider createProvider(DataParameters parameters,
+			DataStoreProviderServices providerServices)
+			throws InitializeException {
+		return new SHPStoreProvider((SHPStoreParameters) parameters, providerServices);
+	}
+
+	public DynObject createParameters() {
+		return new SHPStoreParameters();
+	}
+	
+	public int allowCreate() {
+		return YES;
+	}
+	
+	public int allowWrite() {
+		return YES;
+	}
+
+	public int allowRead() {
+		return YES;
+	}
+	
+	public int hasRasterSupport() {
+		return NO;
+	}
+	
+	public int hasTabularSupport() {
+		return YES;
+	}
+	
+	public int hasVectorialSupport() {
+		return YES;
+	}
+
+	public int allowMultipleGeometryTypes() {
+		return NO;
+	}
+	
+	
+    public int allowEditableFeatureType() {
+        return YES;
+    }
+
+    public int useLocalIndexesCanImprovePerformance() {
+        return YES;
+    }
+        
+    public List getSupportedDataTypes() {
+        
+        DataTypesManager manager = ToolsLocator.getDataTypesManager();
+
+        List resp = new ArrayList<Integer>();
+        resp.add(manager.get(DataTypes.STRING));
+        resp.add(manager.get(DataTypes.INT));
+        resp.add(manager.get(DataTypes.FLOAT));
+        resp.add(manager.get(DataTypes.DATE));
+        resp.add(manager.get(DataTypes.GEOMETRY));
+        return resp;
+    }
+    
+    public List getSupportedGeometryTypesSubtypes() {
+        // null means all supported
+        int[] item = null;
+        List resp = new ArrayList<int[]>();
+        // ====================================== 2d
+        item = new int[2];
+        item[0] = Geometry.TYPES.POINT;
+        item[1] = Geometry.SUBTYPES.GEOM2D;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.CURVE;
+        item[1] = Geometry.SUBTYPES.GEOM2D;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.SURFACE;
+        item[1] = Geometry.SUBTYPES.GEOM2D;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.MULTIPOINT;
+        item[1] = Geometry.SUBTYPES.GEOM2D;
+        resp.add(item);
+        // ====================================== 3d
+        item = new int[2];
+        item[0] = Geometry.TYPES.POINT;
+        item[1] = Geometry.SUBTYPES.GEOM3D;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.CURVE;
+        item[1] = Geometry.SUBTYPES.GEOM3D;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.SURFACE;
+        item[1] = Geometry.SUBTYPES.GEOM3D;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.MULTIPOINT;
+        item[1] = Geometry.SUBTYPES.GEOM3D;
+        resp.add(item);
+        // ====================================== 2dm
+        item = new int[2];
+        item[0] = Geometry.TYPES.POINT;
+        item[1] = Geometry.SUBTYPES.GEOM2DM;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.CURVE;
+        item[1] = Geometry.SUBTYPES.GEOM2DM;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.SURFACE;
+        item[1] = Geometry.SUBTYPES.GEOM2DM;
+        resp.add(item);
+        
+        item = new int[2];
+        item[0] = Geometry.TYPES.MULTIPOINT;
+        item[1] = Geometry.SUBTYPES.GEOM2DM;
+        resp.add(item);
+        // ======================================
+        
+        return resp;
+    }
+    
+    public boolean allowsMandatoryAttributes() {
+        return false;
+    }
+    
+    public boolean allowsPrimaryKeyAttributes() {
+        return false;
+    }
+
+    /**
+     * @return  dummy feature type. Must be overridden by subclasses
+     * 
+     */
+    public FeatureType createDefaultFeatureType() {
+        DataManager dm = DALLocator.getDataManager();
+        EditableFeatureType eft = dm.createFeatureType();
+        
+        EditableFeatureAttributeDescriptor efatd =
+            eft.add(DEFAULT_GEOMETRY_FIELD_NAME, DataTypes.GEOMETRY);
+
+        GeometryType gt = null;
+        try {
+            gt = GeometryLocator.getGeometryManager().getGeometryType(
+                DEFAULT_GEOMETRY_TYPE,
+                DEFAULT_GEOMETRY_SUBTYPE);
+            efatd.setGeometryType(gt);
+        } catch (Exception ex) {
+            logger.info("Error while setting geom type: " + ex.getMessage());
+            logger.info("Trying deprecated way...");
+            efatd.setGeometryType(DEFAULT_GEOMETRY_TYPE);
+            efatd.setGeometrySubType(DEFAULT_GEOMETRY_SUBTYPE);
+        }
+        eft.setDefaultGeometryAttributeName(DEFAULT_GEOMETRY_FIELD_NAME);
+        return eft.getNotEditableCopy();
+    }
+
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreParameters.java	(revision 42196)
@@ -0,0 +1,156 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+import org.apache.commons.lang3.BooleanUtils;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreParameters;
+import org.gvsig.fmap.dal.store.shp.utils.SHP;
+
+public class SHPStoreParameters extends DBFStoreParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "SHPStoreParameters";
+
+    private static final String SHXFILE_PARAMTER_NAME = "shxfile";
+    private static final String SHPFILE_PARAMTER_NAME = "shpfile";
+    private static final String CRS_PARAMTER_NAME = "CRS";
+    private static final String USE_NULLGEOMETRY_PARAMTER_NAME = "useNullGeometry";
+    private static final String ALLOW_INCONSISTENCIES_IN_GEOMETRY_TYPE = "allowInconsistenciesInGeometryType";
+
+	public SHPStoreParameters() {
+		this(PARAMETERS_DEFINITION_NAME);
+	}
+
+	@Override
+	public void validate() throws ValidateDataParametersException {
+		fixParameters();
+		super.validate();
+	}
+	
+	public void fixParameters() {
+		File file = this.getSHPFile();
+		if( file!=null ) {
+			if (this.getDBFFile() == null){
+				this.setDBFFile(SHP.getDbfFile(file));
+			}
+			if (this.getSHXFile() == null) {
+				this.setSHXFile(SHP.getShxFile(file));
+			}
+		}
+	}
+	
+	public SHPStoreParameters(String parametersDefinitionName) {
+		super(parametersDefinitionName, SHPStoreProvider.NAME);
+	}
+
+	public boolean isValid() {
+		return super.isValid() && (this.getSHPFileName() != null);
+	}
+
+	public File getFile() {
+		return this.getSHPFile();
+	}
+
+	public void setFile(File file) {
+		this.setSHPFile(file);
+	}
+	public void setFile(String fileName) {
+		this.setSHPFile(fileName);
+	}
+	
+	
+	public String getSHPFileName() {
+		if( this.getSHPFile()==null ) {
+			return null;
+		}
+		return this.getSHPFile().getAbsolutePath();
+	}
+
+	public File getSHPFile() {
+		return (File) this.getDynValue(SHPFILE_PARAMTER_NAME);
+	}
+
+	public void setSHPFile(File file) {
+		this.setDynValue(SHPFILE_PARAMTER_NAME, file);
+		if (this.getDBFFile() == null){
+			this.setDBFFile(SHP.getDbfFile(file));
+		}
+		if (this.getSHXFile() == null) {
+			this.setSHXFile(SHP.getShxFile(file));
+		}
+	}
+
+	public void setSHPFile(String fileName) {
+		this.setDynValue(SHPFILE_PARAMTER_NAME, fileName);
+		File file = (File) this.getDynValue(SHPFILE_PARAMTER_NAME);
+		if (this.getDBFFile() == null){
+			this.setDBFFile(SHP.getDbfFile(file));
+		}
+		if (this.getSHXFile() == null) {
+			this.setSHXFile(SHP.getShxFile(file));
+		}
+	}
+
+	public String getSHXFileName() {
+		if( this.getSHXFile()==null ) {
+			return null;
+		}
+		return this.getSHXFile().getPath();
+	}
+
+	public File getSHXFile() {
+		return (File) this.getDynValue(SHXFILE_PARAMTER_NAME);
+	}
+	public void setSHXFile(File file) {
+		this.setDynValue(SHXFILE_PARAMTER_NAME, file);
+	}
+
+	public void setSHXFile(String fileName) {
+		this.setDynValue(SHXFILE_PARAMTER_NAME, fileName);
+	}
+
+	public void setCRS(IProjection srs) {
+		setDynValue(CRS_PARAMTER_NAME, srs);
+	}
+
+	public void setCRS(String srs) {
+		setDynValue(CRS_PARAMTER_NAME, srs);
+	}
+
+	public IProjection getCRS() {
+		return (IProjection) getDynValue(CRS_PARAMTER_NAME);
+	}
+
+        public boolean getUseNullGeometry() {
+		return BooleanUtils.isTrue((Boolean) getDynValue(USE_NULLGEOMETRY_PARAMTER_NAME));
+	}
+
+        public boolean getAllowInconsistenciesInGeometryType() {
+		return BooleanUtils.isTrue((Boolean) getDynValue(ALLOW_INCONSISTENCIES_IN_GEOMETRY_TYPE));
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPLibrary.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.shp;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALFileLibrary;
+import org.gvsig.fmap.dal.DALFileLocator;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.store.dbf.DBFLibrary;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class SHPLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+        require(DALFileLibrary.class);
+        require(DBFLibrary.class);
+    }
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		List<Throwable> exs = new ArrayList<Throwable>();
+
+		FileHelper.registerParametersDefinition(
+				SHPStoreParameters.PARAMETERS_DEFINITION_NAME,
+				SHPStoreParameters.class, "SHPParameters.xml");
+		FileHelper.registerParametersDefinition(
+				SHPNewStoreParameters.PARAMETERS_DEFINITION_NAME,
+				SHPNewStoreParameters.class, "SHPParameters.xml");
+		try {
+			FileHelper.registerMetadataDefinition(
+					SHPStoreProvider.METADATA_DEFINITION_NAME,
+					SHPStoreProvider.class, "SHPMetadata.xml");
+		} catch (MetadataException e1) {
+			exs.add(e1);
+		}
+		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+				.getDataManager();
+
+		try {
+			if (!dataman.getStoreProviders().contains(SHPStoreProvider.NAME)) {
+				dataman.registerStoreProviderFactory(new SHPStoreProviderFactory(SHPStoreProvider.NAME, SHPStoreProvider.DESCRIPTION));
+
+			}
+		} catch (RuntimeException e) {
+			exs.add(e);
+		}
+
+		try {
+			DALFileLocator.getFilesystemServerExplorerManager()
+					.registerProvider(SHPStoreProvider.NAME,
+							SHPStoreProvider.DESCRIPTION,
+							SHPFilesystemServerProvider.class);
+		} catch (RuntimeException e) {
+			exs.add(e);
+		}
+
+		if (exs.size() > 0) {
+			throw new LibraryException(this.getClass(), exs);
+		}
+	}
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		// Do nothing
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile2.java	(revision 42196)
@@ -0,0 +1,768 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.store.shp.SHPStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.PointGeometryType;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+/**
+ * @author jmvivo
+ * 
+ */
+public class SHPFile2 implements ISHPFile {
+
+    private static final Logger logger = LoggerFactory.getLogger(SHPFile2.class);
+    private Envelope extent;
+    private int type;
+    private int subType;
+    private String srsParameters;
+
+    private FileInputStream fin;
+    private FileChannel channel;
+    private BigByteBuffer2 bb;
+    private FileInputStream finShx;
+    private FileChannel channelShx;
+    private BigByteBuffer2 bbShx;
+
+    private SHPStoreParameters params;
+
+    private int[] supportedGeometryTypes;
+    private final GeometryManager gManager = GeometryLocator
+        .getGeometryManager();
+
+    private GeometryType gtypeNull;
+    private PointGeometryType gtypePoint2D;
+    private GeometryType gtypeCurve2D;
+    private GeometryType gtypeSurface2D;
+    private GeometryType gtypeMultiPoint2D;
+
+    private boolean useNullGeometry = false;
+    
+    private boolean allowInconsistenciesInGeometryTypeWarningShow = false;
+    
+    public SHPFile2(SHPStoreParameters params) {
+        this.params = params;
+        try {
+            gtypeNull = gManager.getGeometryType(TYPES.NULL, SUBTYPES.GEOM2D);
+            gtypePoint2D
+                    = (PointGeometryType) gManager.getGeometryType(TYPES.POINT,
+                    SUBTYPES.GEOM2D);
+            gtypeCurve2D
+                    = gManager.getGeometryType(TYPES.CURVE, SUBTYPES.GEOM2D);
+            gtypeSurface2D
+                    = gManager.getGeometryType(TYPES.SURFACE, SUBTYPES.GEOM2D);
+            gtypeMultiPoint2D
+                    = gManager.getGeometryType(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+
+        } catch (GeometryTypeNotSupportedException e) {
+            throw new RuntimeException(
+                "Unable to get the 2D geometry types to use", e);
+        } catch (GeometryTypeNotValidException e) {
+            throw new RuntimeException(
+                "Unable to get the 2D geometry types to use", e);
+        }
+    }
+
+    public void setUseNullGeometry(boolean useNullGeometry) {
+        this.useNullGeometry = useNullGeometry;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.fmap.dal.Resource#doClose()
+     */
+    public void close() throws CloseException {
+        CloseException ret = null;
+
+        logger.debug("Closing shp/shx file '"+this.params.getSHPFileName()+"'");
+        
+        // FIXME: Arreglar esto para que se acumulen los errores
+        try {
+            channel.close();
+            channelShx.close();
+        } catch (IOException e) {
+            ret = new CloseException("SHPFile.close", e);
+        } finally {
+            try {
+                fin.close();
+                finShx.close();
+            } catch (IOException e1) {
+                ret = new CloseException("SHPFile.close", e1);
+            }
+        }
+
+        if (ret != null) {
+            throw ret;
+        }
+        bb = null;
+        bbShx = null;
+        fin = null;
+        finShx = null;
+        channel = null;
+        channelShx = null;
+        srsParameters = null;
+    }
+
+    public boolean isOpen() {
+        return this.fin != null;
+    }
+
+    public synchronized void open() throws DataException {
+        try {
+            fin = new FileInputStream(this.params.getSHPFile());
+        } catch (java.io.FileNotFoundException e) {
+            throw new FileNotFoundException(this.params.getSHPFileName());
+        }
+
+        // Open the file and then get a channel from the stream
+        channel = fin.getChannel();
+
+        // long size = channel.size();
+        // Get the file's size and then map it into memory
+        // bb = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+        try {
+            bb = new BigByteBuffer2(channel, FileChannel.MapMode.READ_ONLY);
+        } catch (IOException e) {
+            throw new ReadException(this.params.getSHPFileName(), e);
+
+        }
+        try {
+            finShx = new FileInputStream(this.params.getSHXFile());
+        } catch (java.io.FileNotFoundException e) {
+            throw new FileNotFoundException(this.params.getSHXFileName());
+        }
+
+        // Open the file and then get a channel from the stream
+        channelShx = finShx.getChannel();
+
+        // long sizeShx = channelShx.size();
+        // Get the file's size and then map it into memory
+        // bb = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+        // bbShx = channelShx.map(FileChannel.MapMode.READ_ONLY, 0, sizeShx);
+        try {
+            bbShx
+                    = new BigByteBuffer2(channelShx, FileChannel.MapMode.READ_ONLY);
+        } catch (IOException e) {
+            throw new ReadException(this.params.getSHXFileName(), e);
+
+        }
+        bbShx.order(ByteOrder.BIG_ENDIAN);
+
+        // create a new header.
+        ShapeFileHeader2 myHeader = new ShapeFileHeader2();
+
+        bb.position(0);
+
+        // read the header
+        myHeader.readHeader(bb);
+
+        double[] min = new double[2];
+        min[0] = myHeader.myXmin;
+        min[1] = myHeader.myYmin;
+        double[] max = new double[2];
+        max[0] = myHeader.myXmax;
+        max[1] = myHeader.myYmax;
+
+        try {
+            extent =
+                gManager.createEnvelope(min[0], min[1], max[0], max[1],
+                    SUBTYPES.GEOM2D);
+        } catch (CreateEnvelopeException e1) {
+            logger.warn("Error creating the envelope", e1);
+        }
+        // extent = new Rectangle2D.Double(myHeader.myXmin, myHeader.myYmin,
+        // myHeader.myXmax - myHeader.myXmin,
+        // myHeader.myYmax - myHeader.myYmin);
+
+        type = myHeader.myShapeType;
+        subType = getGeometrySubType();
+
+        this.initSupportedGeometryTypes();
+
+        double x = myHeader.myXmin;
+        double y = myHeader.myYmin;
+        double w = myHeader.myXmax - myHeader.myXmin;
+        double h = myHeader.myYmax - myHeader.myYmin;
+
+        if (w == 0) {
+            x -= 0.1;
+            w = 0.2;
+        }
+
+        if (h == 0) {
+            y -= 0.1;
+            h = 0.2;
+        }
+
+        // TODO: SRS
+        File prjFile = SHP.getPrjFile(this.params.getSHPFile());
+        if (prjFile.exists()) {
+            BufferedReader input = null;
+            try {
+                input = new BufferedReader(new FileReader(prjFile));
+            } catch (java.io.FileNotFoundException e) {
+                throw new FileNotFoundException(prjFile.getAbsolutePath());
+            }
+
+            try {
+                this.srsParameters = input.readLine();
+            } catch (IOException e) {
+                throw new ReadException("SHPFile.open prj", e);
+            } finally {
+                try {
+                    input.close();
+                } catch (IOException e) {
+                    // TODO ???
+                }
+            }
+
+        } else {
+            this.srsParameters = null;
+        }
+    }
+
+    public Envelope getFullExtent() throws ReadException {
+        return this.extent;
+    }
+
+    public boolean isEditable() {
+        return this.params.getDBFFile().canWrite()
+            && this.params.getSHPFile().canWrite()
+            && this.params.getSHXFile().canWrite();
+    }
+
+    public int getGeometryType() throws ReadException {
+        int auxType = 0;
+
+        switch (type) {
+        case (SHP.POINT2D):
+        case (SHP.POINT3D):
+            auxType = auxType | Geometry.TYPES.POINT;
+
+            break;
+
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYLINE3D):
+            auxType = auxType | Geometry.TYPES.MULTICURVE;
+
+            break;
+
+        case (SHP.POLYGON2D):
+        case (SHP.POLYGON3D):
+            auxType = auxType | Geometry.TYPES.MULTISURFACE;
+
+            break;
+        case (SHP.MULTIPOINT2D):
+        case (SHP.MULTIPOINT3D):
+            auxType = auxType | Geometry.TYPES.MULTIPOINT;
+
+            break;
+        }
+
+        return auxType;
+    }
+
+    public int getGeometrySubType() throws ReadException {
+        switch (type) {
+        case (SHP.POINT2D):
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYGON2D):
+        case (SHP.MULTIPOINT2D):
+            return SUBTYPES.GEOM2D;
+        case (SHP.POINT3D):
+        case (SHP.POLYLINE3D):
+        case (SHP.POLYGON3D):
+        case (SHP.MULTIPOINT3D):
+            return SUBTYPES.GEOM3D;
+        case (SHP.POINTM):
+        case (SHP.POLYLINEM):
+        case (SHP.POLYGONM):
+        case (SHP.MULTIPOINTM):
+            return SUBTYPES.GEOM2DM;
+        }
+
+        return SUBTYPES.UNKNOWN;
+    }
+
+    public Geometry getNullGeometry() throws CreateGeometryException {
+        if (this.useNullGeometry) {
+            return gtypeNull.create();
+        }
+        return null;
+    }
+    
+    /**
+     * Gets the geometry with the index provided. Set to synchronized to prevent
+     * concurrent threads issue (?)
+     * 
+     * @param position
+     * @return
+     * @throws ReadException
+     * @throws CreateGeometryException
+     */
+    public synchronized Geometry getGeometry(long position)
+        throws ReadException, CreateGeometryException {
+
+        int shapeType;
+        bb.position(getPositionForRecord(position));
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+        shapeType = bb.getInt();
+        
+        if (shapeType == SHP.NULL) {
+            return getNullGeometry();
+        }
+        
+        /*
+         * Inconsistency: this particular shape is not
+         * of the expected type. This can be because the SHP file
+         * is corrupt and it can cause "out of memory error"
+         * because the code will possibly try to instantiate a
+         * huge (absurd) array, so it's safer to return a null geometry
+         */
+        if (shapeType != type) {
+            if( !allowInconsistenciesInGeometryTypeWarningShow ) {
+                logger.warn("Geometry type of Shape ("+type+") does not match the geometry found ("+shapeType+") in the shape '"+this.params.getSHPFileName()+".");
+                allowInconsistenciesInGeometryTypeWarningShow = true;
+            }
+            if( ! this.params.getAllowInconsistenciesInGeometryType() ) {
+                return getNullGeometry();
+            }
+        }
+
+        // retrieve that shape.
+        // tempRecord.setShape(readShape(tempShapeType, tempContentLength, in));
+        switch (type) {
+        case (SHP.POINT2D):
+        case (SHP.POINT3D):
+        case (SHP.POINTM):
+            Point point = readPoint(bb);
+            fillPoint(point);
+            return point;
+
+        case (SHP.POLYLINE2D):
+            Curve curve = (Curve) gtypeCurve2D.create();
+            fillCurve(curve);
+            if( curve.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return curve;
+
+        case (SHP.POLYGON2D):
+            Surface surface = (Surface) gtypeSurface2D.create();
+            fillSurface(surface);
+            if( surface.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return surface;
+
+        case (SHP.POLYLINE3D):
+            Curve curve3D =
+                (Curve) gManager.create(TYPES.CURVE, SUBTYPES.GEOM3D);
+            fillCurve(curve3D);
+            fillZ(curve3D);
+            if( curve3D.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return curve3D;
+
+        case (SHP.POLYGON3D):
+            Surface surface3D =
+                (Surface) gManager.create(TYPES.SURFACE, SUBTYPES.GEOM3D);
+            fillSurface(surface3D);
+            fillZ(surface3D);
+            if( surface3D.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return surface3D;
+
+        case (SHP.MULTIPOINT2D):
+
+            Point p = null;
+            int numPoints;
+            int i;
+            int j;
+            bb.position(bb.position() + 32);
+            numPoints = bb.getInt();
+
+            Point[] points = new Point[numPoints];
+
+            for (i = 0; i < numPoints; i++) {
+                points[i] =
+                    (Point) gManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+                points[i].setX(bb.getDouble());
+                points[i].setY(bb.getDouble());
+            }
+
+            MultiPoint multipoint = (MultiPoint) gtypeMultiPoint2D.create();
+            // MultiPoint multipoint =
+            // (MultiPoint)GeometryLocator.getGeometryManager().create(TYPES.MULTIPOINT,
+            // SUBTYPES.GEOM2D);
+            for (int k = 0; k < points.length; k++) {
+                multipoint.addPoint(points[k]);
+            }
+
+            if( multipoint.getPrimitivesNumber()==0 ) {
+                return getNullGeometry();
+            }
+            return multipoint;
+
+        case (SHP.MULTIPOINT3D):
+            bb.position(bb.position() + 32);
+            numPoints = bb.getInt();
+
+            double[] temX = new double[numPoints];
+            double[] temY = new double[numPoints];
+            double[] temZ = new double[numPoints];
+
+            for (i = 0; i < numPoints; i++) {
+                temX[i] = bb.getDouble();
+                temY[i] = bb.getDouble();
+                // temZ[i] = bb.getDouble();
+            }
+
+            for (i = 0; i < numPoints; i++) {
+                temZ[i] = bb.getDouble();
+            }
+
+            MultiPoint multipoint3D =
+                (MultiPoint) gManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM3D);
+            for (int k = 0; k < temX.length; k++) {
+                Point pointAux =
+                    (Point) gManager.create(TYPES.POINT, SUBTYPES.GEOM3D);
+                pointAux.setX(temX[k]);
+                pointAux.setY(temY[k]);
+                pointAux.setCoordinateAt(2, temZ[k]);
+                multipoint3D.addPoint(pointAux);
+            }
+            if( multipoint3D.getPrimitivesNumber()==0 ) {
+                return getNullGeometry();
+            }
+            return multipoint3D;
+        }
+
+        return null;
+    }
+
+    private void fillPoint(Point point) throws ReadException {
+        if (subType == Geometry.SUBTYPES.GEOM3D) {
+            point.setCoordinateAt(Geometry.DIMENSIONS.Z, bb.getDouble());
+        } else
+            if (subType == Geometry.SUBTYPES.GEOM2DM) {
+                point.setCoordinateAt(2, bb.getDouble());
+            }
+    }
+
+    private void fillCurve(Curve curve)
+        throws CreateGeometryException, ReadException {
+        Point p = null;
+        int numParts;
+        int numPoints;
+        int i;
+        int j;
+
+        bb.position(bb.position() + 32);
+        numParts = bb.getInt();
+        numPoints = bb.getInt();
+
+        int[] tempParts = new int[numParts];
+
+        for (i = 0; i < numParts; i++) {
+            tempParts[i] = bb.getInt();
+        }
+
+        j = 0;
+
+        for (i = 0; i < numPoints; i++) {
+            p = readPoint(bb);
+
+            if (i == tempParts[j]) {
+                curve.addMoveToVertex(p);
+
+                if (j < (numParts - 1)) {
+                    j++;
+                }
+            } else {
+                curve.addVertex(p);
+            }
+        }
+    }
+    
+    private void fillSurface(Surface surface)
+        throws CreateGeometryException, ReadException {
+        Point p = null;
+        int numParts;
+        int numPoints;
+        int i;
+        int partIndex;
+
+        bb.position(bb.position() + 32);
+        numParts = bb.getInt();
+        numPoints = bb.getInt();
+
+        int[] tempParts = new int[numParts];
+
+        for (i = 0; i < numParts; i++) {
+            tempParts[i] = bb.getInt();
+        }
+
+        partIndex = 0;
+
+        for (i = 0; i < numPoints; i++) {
+            p = readPoint(bb);
+
+            if (i == tempParts[partIndex]) {
+                surface.addMoveToVertex(p);
+                if (partIndex < (numParts - 1)) {
+                    partIndex++;
+                }
+            } else {
+                if ((i == tempParts[partIndex] - 1) || (i == numPoints - 1)) {
+                    surface.closePrimitive();
+                } else {
+                    surface.addVertex(p);
+                }
+            }
+        }
+    }
+
+    private void fillZ(OrientablePrimitive orientablePrimitive)
+        throws CreateGeometryException, ReadException {
+        double[] boxZ = new double[2];
+        boxZ[0] = bb.getDouble();
+        boxZ[1] = bb.getDouble();
+
+        for (int i = 0; i < orientablePrimitive.getNumVertices(); i++) {
+            orientablePrimitive.setCoordinateAt(i, 2, bb.getDouble());
+        }
+    }
+
+    private long getPositionForRecord(long numRec) {
+        // shx file has a 100 bytes header, then, records
+        // 8 bytes length, one for each entity.
+        // first 4 bytes are the offset
+        // next 4 bytes are length
+
+        int posIndex = 100 + ((int) numRec * 8);
+        // bbShx.position(posIndex);
+        long pos = 8 + 2 * bbShx.getInt(posIndex);
+
+        return pos;
+    }
+
+    /**
+     * Reads the Point from the shape file.
+     * 
+     * @param in ByteBuffer.
+     * 
+     * @return Point2D.
+     * @throws ReadException
+     * @throws CreateGeometryException
+     */
+    private Point readPoint(BigByteBuffer2 in)
+        throws CreateGeometryException, ReadException {
+        return readPoint(subType, in);
+    }
+
+    private Point readPoint(int subtype, BigByteBuffer2 in)
+            throws CreateGeometryException, ReadException {
+        // bytes 1 to 4 are the type and have already been read.
+        // bytes 4 to 12 are the X coordinate
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        double x = in.getDouble();
+        double y = in.getDouble();
+        Point p = gManager.createPoint(x, y, subtype);
+        return p;
+    }
+
+    /**
+     * Lee un rect�ngulo del fichero.
+     * 
+     * @param in ByteBuffer.
+     * 
+     * @return Rect�ngulo.
+     * @throws CreateEnvelopeException
+     * 
+     * @throws IOException
+     */
+    private Envelope readRectangle(BigByteBuffer2 in)
+        throws CreateEnvelopeException {
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        double x = in.getDouble();
+        double y = in.getDouble();
+
+        double x2 = in.getDouble();
+
+        if (x2 - x == 0) {
+            x2 += 0.2;
+            x -= 0.1;
+        }
+
+        double y2 = in.getDouble();
+
+        if (y2 - y == 0) {
+            y2 += 0.2;
+            y -= 0.1;
+        }
+        Envelope tempEnvelope
+                = gManager.createEnvelope(x, y, x2, y2, SUBTYPES.GEOM2D);
+        return tempEnvelope;
+    }
+
+    /**
+     * Gets the geometry bbox with the index provided. Set to synchronized to
+     * prevent concurrent threads issue (?)
+     * 
+     * @param featureIndex
+     * @return
+     * @throws ReadException
+     * @throws CreateEnvelopeException
+     * @throws CreateGeometryException
+     */
+    public synchronized Envelope getBoundingBox(long featureIndex)
+        throws ReadException, CreateEnvelopeException, CreateGeometryException {
+        Point p;
+        Envelope BoundingBox = null;
+        try {
+            bb.position(getPositionForRecord(featureIndex));
+        } catch (Exception e) {
+            throw new ReadException("getBondingBox (" + featureIndex + ")", e);
+            // logger.error(" Shapefile is corrupted. Drawing aborted. ="+e+
+            // "  "+"index = "+index);
+        }
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+
+        int tipoShape = bb.getInt();
+
+        // AZABALA: si tipoShape viene con valores erroneos deja de funcionar
+        // el metodo getShape(i)
+        // if (tipoShape != SHP.NULL) {
+        // type = tipoShape;
+        // }
+        // retrieve that shape.
+        // tempRecord.setShape(readShape(tempShapeType, tempContentLength, in));
+        switch (tipoShape) {
+        case (SHP.POINT2D):
+        case (SHP.POINT3D):
+            p = readPoint(bb);
+                BoundingBox
+                        = gManager.createEnvelope(p.getX() - 0.1, p.getY() - 0.1,
+                    p.getX() + 0.2, p.getY() + 0.2, SUBTYPES.GEOM2D);
+            // new Rectangle2D.Double(p.getX() - 0.1,
+            // p.getY() - 0.1, 0.2, 0.2);
+
+            break;
+
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYGON2D):
+        case (SHP.MULTIPOINT2D):
+        case (SHP.POLYLINE3D):
+        case (SHP.POLYGON3D):
+        case (SHP.MULTIPOINT3D):
+
+            // BoundingBox
+            BoundingBox = readRectangle(bb);
+
+            break;
+        }
+
+        return BoundingBox;
+    }
+
+    /**
+     * @return
+     */
+    public String getSRSParameters() {
+        return this.srsParameters;
+    }
+
+    private void initSupportedGeometryTypes() throws ReadException {
+        switch (this.getGeometryType()) {
+        case Geometry.TYPES.POINT:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.POINT, Geometry.TYPES.NULL};
+            break;
+        case Geometry.TYPES.MULTIPOINT:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.MULTIPOINT, Geometry.TYPES.NULL};
+            break;
+        case Geometry.TYPES.MULTICURVE:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.CURVE, Geometry.TYPES.ELLIPSE,
+                    Geometry.TYPES.ARC, Geometry.TYPES.CIRCLE,
+                    Geometry.TYPES.SURFACE, Geometry.TYPES.NULL,
+                            Geometry.TYPES.MULTICURVE};
+            break;
+        case Geometry.TYPES.MULTISURFACE:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.ELLIPSE, Geometry.TYPES.CIRCLE,
+                    Geometry.TYPES.SURFACE, Geometry.TYPES.NULL,
+                            Geometry.TYPES.MULTISURFACE};
+            break;
+
+        default:
+                supportedGeometryTypes = new int[]{};
+        }
+    }
+
+    public boolean canWriteGeometry(int gvSIGgeometryType) {
+        for (int i = 0; i < supportedGeometryTypes.length; i++) {
+            if (gvSIGgeometryType == supportedGeometryTypes[i]) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile3.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile3.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile3.java	(revision 42196)
@@ -0,0 +1,785 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+import java.util.logging.Level;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.store.shp.SHPStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.PointGeometryType;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class SHPFile3 implements ISHPFile {
+
+    private static final Logger logger = LoggerFactory.getLogger(SHPFile3.class);
+    private Envelope extent;
+    private int type;
+    private int subType;
+    private String srsParameters;
+
+    private FileInputStream fin;
+    private FileChannel channel;
+    private BigByteBuffer2 bb;
+    private FileInputStream finShx;
+    private FileChannel channelShx;
+    private BigByteBuffer2 bbShx;
+
+    private SHPStoreParameters params;
+
+    private int[] supportedGeometryTypes;
+    private final GeometryManager gManager = GeometryLocator
+            .getGeometryManager();
+
+    private GeometryType gtypeNull;
+    private PointGeometryType gtypePoint2D;
+    private GeometryType gtypeCurve2D;
+    private GeometryType gtypeSurface2D;
+    private GeometryType gtypeMultiPoint2D;
+
+    private boolean useNullGeometry = false;
+
+    private boolean allowInconsistenciesInGeometryTypeWarningShow = false;
+    
+    public SHPFile3(SHPStoreParameters params) {
+        this.params = params;
+        try {
+            gtypeNull = gManager.getGeometryType(TYPES.NULL, SUBTYPES.GEOM2D);
+            gtypePoint2D
+                    = (PointGeometryType) gManager.getGeometryType(TYPES.POINT,
+                            SUBTYPES.GEOM2D);
+            gtypeCurve2D
+                    = gManager.getGeometryType(TYPES.CURVE, SUBTYPES.GEOM2D);
+            gtypeSurface2D
+                    = gManager.getGeometryType(TYPES.SURFACE, SUBTYPES.GEOM2D);
+            gtypeMultiPoint2D
+                    = gManager.getGeometryType(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+
+        } catch (GeometryTypeNotSupportedException e) {
+            throw new RuntimeException(
+                    "Unable to get the 2D geometry types to use", e);
+        } catch (GeometryTypeNotValidException e) {
+            throw new RuntimeException(
+                    "Unable to get the 2D geometry types to use", e);
+        }
+    }
+
+    public void setUseNullGeometry(boolean useNullGeometry) {
+        this.useNullGeometry = useNullGeometry;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.fmap.dal.Resource#doClose()
+     */
+    public void close() throws CloseException {
+        CloseException ret = null;
+
+        logger.debug("Closing shp/shx file '"+this.params.getSHPFileName()+"'");
+        
+        // FIXME: Arreglar esto para que se acumulen los errores
+        try {
+            channel.close();
+            channelShx.close();
+        } catch (IOException e) {
+            ret = new CloseException("SHPFile.close", e);
+        } finally {
+            try {
+                fin.close();
+                finShx.close();
+            } catch (IOException e1) {
+                ret = new CloseException("SHPFile.close", e1);
+            }
+        }
+
+        if (ret != null) {
+            throw ret;
+        }
+        bb = null;
+        bbShx = null;
+        fin = null;
+        finShx = null;
+        channel = null;
+        channelShx = null;
+        srsParameters = null;
+    }
+
+    public boolean isOpen() {
+        return this.fin != null;
+    }
+
+    public synchronized void open() throws DataException {
+        try {
+            fin = new FileInputStream(this.params.getSHPFile());
+        } catch (java.io.FileNotFoundException e) {
+            throw new FileNotFoundException(this.params.getSHPFileName());
+        }
+
+        // Open the file and then get a channel from the stream
+        channel = fin.getChannel();
+
+        // long size = channel.size();
+        // Get the file's size and then map it into memory
+        // bb = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+        try {
+            bb = new BigByteBuffer2(channel, FileChannel.MapMode.READ_ONLY);
+        } catch (IOException e) {
+            throw new ReadException(this.params.getSHPFileName(), e);
+
+        }
+        try {
+            finShx = new FileInputStream(this.params.getSHXFile());
+        } catch (java.io.FileNotFoundException e) {
+            throw new FileNotFoundException(this.params.getSHXFileName());
+        }
+
+        // Open the file and then get a channel from the stream
+        channelShx = finShx.getChannel();
+
+        // long sizeShx = channelShx.size();
+        // Get the file's size and then map it into memory
+        // bb = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+        // bbShx = channelShx.map(FileChannel.MapMode.READ_ONLY, 0, sizeShx);
+        try {
+            bbShx
+                    = new BigByteBuffer2(channelShx, FileChannel.MapMode.READ_ONLY);
+        } catch (IOException e) {
+            throw new ReadException(this.params.getSHXFileName(), e);
+
+        }
+        bbShx.order(ByteOrder.BIG_ENDIAN);
+
+        // create a new header.
+        ShapeFileHeader2 myHeader = new ShapeFileHeader2();
+
+        bb.position(0);
+
+        // read the header
+        myHeader.readHeader(bb);
+
+        double[] min = new double[2];
+        min[0] = myHeader.myXmin;
+        min[1] = myHeader.myYmin;
+        double[] max = new double[2];
+        max[0] = myHeader.myXmax;
+        max[1] = myHeader.myYmax;
+
+        try {
+            extent
+                    = gManager.createEnvelope(min[0], min[1], max[0], max[1],
+                            SUBTYPES.GEOM2D);
+        } catch (CreateEnvelopeException e1) {
+            logger.warn("Error creating the envelope", e1);
+        }
+        // extent = new Rectangle2D.Double(myHeader.myXmin, myHeader.myYmin,
+        // myHeader.myXmax - myHeader.myXmin,
+        // myHeader.myYmax - myHeader.myYmin);
+
+        type = myHeader.myShapeType;
+        subType = getGeometrySubType();
+
+        this.initSupportedGeometryTypes();
+
+        double x = myHeader.myXmin;
+        double y = myHeader.myYmin;
+        double w = myHeader.myXmax - myHeader.myXmin;
+        double h = myHeader.myYmax - myHeader.myYmin;
+
+        if (w == 0) {
+            x -= 0.1;
+            w = 0.2;
+        }
+
+        if (h == 0) {
+            y -= 0.1;
+            h = 0.2;
+        }
+
+        // TODO: SRS
+        File prjFile = SHP.getPrjFile(this.params.getSHPFile());
+        if (prjFile.exists()) {
+            BufferedReader input = null;
+            try {
+                input = new BufferedReader(new FileReader(prjFile));
+            } catch (java.io.FileNotFoundException e) {
+                throw new FileNotFoundException(prjFile.getAbsolutePath());
+            }
+
+            try {
+                this.srsParameters = input.readLine();
+            } catch (IOException e) {
+                throw new ReadException("SHPFile.open prj", e);
+            } finally {
+                try {
+                    input.close();
+                } catch (IOException e) {
+                    // TODO ???
+                }
+            }
+
+        } else {
+            this.srsParameters = null;
+        }
+    }
+
+    public Envelope getFullExtent() throws ReadException {
+        return this.extent;
+    }
+
+    public boolean isEditable() {
+        return this.params.getDBFFile().canWrite()
+                && this.params.getSHPFile().canWrite()
+                && this.params.getSHXFile().canWrite();
+    }
+
+    public int getGeometryType() throws ReadException {
+        int auxType = 0;
+
+        switch (type) {
+            case (SHP.POINT2D):
+            case (SHP.POINT3D):
+                auxType = auxType | Geometry.TYPES.POINT;
+
+                break;
+
+            case (SHP.POLYLINE2D):
+            case (SHP.POLYLINE3D):
+                auxType = auxType | Geometry.TYPES.MULTICURVE;
+
+                break;
+
+            case (SHP.POLYGON2D):
+            case (SHP.POLYGON3D):
+                auxType = auxType | Geometry.TYPES.MULTISURFACE;
+
+                break;
+            case (SHP.MULTIPOINT2D):
+            case (SHP.MULTIPOINT3D):
+                auxType = auxType | Geometry.TYPES.MULTIPOINT;
+
+                break;
+        }
+
+        return auxType;
+    }
+
+    public int getGeometrySubType() throws ReadException {
+        switch (type) {
+            case (SHP.POINT2D):
+            case (SHP.POLYLINE2D):
+            case (SHP.POLYGON2D):
+            case (SHP.MULTIPOINT2D):
+                return SUBTYPES.GEOM2D;
+            case (SHP.POINT3D):
+            case (SHP.POLYLINE3D):
+            case (SHP.POLYGON3D):
+            case (SHP.MULTIPOINT3D):
+                return SUBTYPES.GEOM3D;
+            case (SHP.POINTM):
+            case (SHP.POLYLINEM):
+            case (SHP.POLYGONM):
+            case (SHP.MULTIPOINTM):
+                return SUBTYPES.GEOM2DM;
+        }
+
+        return SUBTYPES.UNKNOWN;
+    }
+
+    public Geometry getNullGeometry() throws CreateGeometryException {
+        if (this.useNullGeometry) {
+            return gtypeNull.create();
+        }
+        return null;
+    }
+
+    /**
+     * Gets the geometry with the index provided. Set to synchronized to prevent
+     * concurrent threads issue (?)
+     *
+     * @param position
+     * @return
+     * @throws ReadException
+     * @throws CreateGeometryException
+     */
+    public synchronized Geometry getGeometry(long position)
+            throws ReadException, CreateGeometryException {
+
+        int shapeType;
+        bb.position(getPositionForRecord(position));
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+        shapeType = bb.getInt();
+
+        if (shapeType == SHP.NULL) {
+            return getNullGeometry();
+        }
+
+        /*
+         * Inconsistency: this particular shape is not
+         * of the expected type. This can be because the SHP file
+         * is corrupt and it can cause "out of memory error"
+         * because the code will possibly try to instantiate a
+         * huge (absurd) array, so it's safer to return a null geometry
+         */
+        if (shapeType != type) {
+            if( !allowInconsistenciesInGeometryTypeWarningShow ) {
+                logger.warn("Geometry type of Shape ("+type+") does not match the geometry found ("+shapeType+") in the shape '"+this.params.getSHPFileName()+".");
+                allowInconsistenciesInGeometryTypeWarningShow = true;
+            }
+            if( ! this.params.getAllowInconsistenciesInGeometryType() ) {
+                return getNullGeometry();
+            }
+        }
+
+        Geometry geometry;
+        Point point;
+        switch (type) {
+            case (SHP.POINT2D):
+                point = readPoint(bb);
+                return point;
+
+            case (SHP.POINT3D):
+                point = readPoint(bb);
+                point.setCoordinateAt(
+                        Geometry.DIMENSIONS.Z,
+                        bb.getDouble()
+                );
+                return point;
+
+            case (SHP.POINTM):
+                point = readPoint(bb);
+                point.setCoordinateAt(2, bb.getDouble());
+                return point;
+
+            case (SHP.POLYLINE2D):
+                geometry = readGeometry(
+                        Geometry.TYPES.CURVE,
+                        Geometry.TYPES.MULTICURVE,
+                        Geometry.SUBTYPES.GEOM2D);
+                if (geometry == null) {
+                    return getNullGeometry();
+                }
+                return geometry;
+
+            case (SHP.POLYGON2D):
+                geometry = readGeometry(
+                        Geometry.TYPES.SURFACE,
+                        Geometry.TYPES.MULTISURFACE,
+                        Geometry.SUBTYPES.GEOM2D);
+                if (geometry == null) {
+                    return getNullGeometry();
+                }
+                return geometry;
+
+            case (SHP.POLYLINE3D):
+                geometry = readGeometry(
+                        Geometry.TYPES.CURVE,
+                        Geometry.TYPES.MULTICURVE,
+                        Geometry.SUBTYPES.GEOM3D);
+                if (geometry == null) {
+                    return getNullGeometry();
+                }
+                return geometry;
+
+            case (SHP.POLYGON3D):
+                geometry = readGeometry(
+                        Geometry.TYPES.SURFACE,
+                        Geometry.TYPES.MULTISURFACE,
+                        Geometry.SUBTYPES.GEOM3D);
+                if (geometry == null) {
+                    return getNullGeometry();
+                }
+                return geometry;
+
+            case (SHP.MULTIPOINT2D):
+                geometry = readMultiPoint(SUBTYPES.GEOM2D);
+                if (geometry == null) {
+                    return getNullGeometry();
+                }
+                return geometry;
+
+            case (SHP.MULTIPOINT3D):
+                geometry = readMultiPoint(SUBTYPES.GEOM3D);
+                if (geometry == null) {
+                    return getNullGeometry();
+                }
+                return geometry;
+        }
+
+        return null;
+    }
+
+    private Geometry readMultiPoint(int subtype) throws CreateGeometryException, ReadException {
+        Point point;
+
+        bb.position(bb.position() + 32);
+        int numPoints = bb.getInt();
+        
+        if( numPoints < 1 ) {
+            return null;
+        }
+
+//        Point[] points = new Point[numPoints];
+
+        MultiPrimitive multi = (MultiPrimitive) gManager.create(Geometry.TYPES.MULTIPOINT, subtype);
+        multi.ensureCapacity(numPoints);
+
+        for (int i = 0; i < numPoints; i++) {
+            point = (Point) gManager.create(TYPES.POINT, subtype);
+            point.setX(bb.getDouble());
+            point.setY(bb.getDouble());
+            multi.addPrimitive(point);
+        }
+
+        if (subtype == Geometry.SUBTYPES.GEOM3D) {
+            for (int i = 0; i < numPoints; i++) {
+                double z = bb.getDouble();
+                point = (Point) multi.getPrimitiveAt(i);
+                point.setCoordinateAt(Geometry.DIMENSIONS.Z, z);
+            }
+        }
+        if (multi.getPrimitivesNumber() == 0) {
+            return null;
+        }
+        return multi;
+    }
+
+    private Geometry readGeometry(int type, int typemulti, int subtype)
+            throws CreateGeometryException, ReadException {
+
+        bb.position(bb.position() + 32);
+
+        int numberOfMultis = bb.getInt();
+        int numberOfPoints = bb.getInt();
+        
+        if( numberOfPoints<1  ) {
+            return null;
+        }
+        if( numberOfMultis<1 ) {
+            numberOfMultis=0;
+        }
+
+        int[] indexOfPointsOfMulti = new int[numberOfMultis+1];
+        for (int i = 0; i < numberOfMultis; i++) {
+            indexOfPointsOfMulti[i] = bb.getInt();
+        }
+        indexOfPointsOfMulti[numberOfMultis] = -1;
+                
+        MultiPrimitive multi = null;
+        if (numberOfMultis > 1) {
+            multi = (MultiPrimitive) gManager.create(typemulti, subtype);
+        }
+        OrientablePrimitive primitive = null;
+
+        int nextSurface = 0;
+
+        for (int i = 0; i < numberOfPoints; i++) {
+            Point p = readPoint(subtype, bb);
+            if (i == indexOfPointsOfMulti[nextSurface]) {
+                // Cambiamos de poligono
+                if( primitive != null ) {
+                    if( multi != null ) {
+                        dumpAddMultiInfo(multi,primitive);
+                        primitive.closePrimitive();
+                        multi.addPrimitive(primitive);
+                    }
+                }
+                primitive = (OrientablePrimitive) gManager.create(type, subtype);
+                primitive.addVertex(p);
+                nextSurface++;
+            } else {
+                primitive.addVertex(p);
+            }
+        }
+        if (multi != null) {
+            dumpAddMultiInfo(multi,primitive);
+            primitive.closePrimitive();
+            multi.addPrimitive(primitive);
+            if (subtype == Geometry.SUBTYPES.GEOM3D) {
+                fillZ(multi);
+            }
+            return multi;
+        }
+        if (primitive==null || primitive.getNumVertices() < 1) {
+            return null;
+        }
+        if (subtype == Geometry.SUBTYPES.GEOM3D) {
+            fillZ(primitive);
+        }
+        return primitive;
+    }
+
+    private void dumpAddMultiInfo(MultiPrimitive multi, OrientablePrimitive primitive) {
+        String last = "???";
+        String first = "???";
+        try {
+            first = primitive.getVertex(0).convertToWKT();
+        } catch (Exception ex) {
+
+        }
+        try {
+            last = primitive.getVertex(primitive.getNumVertices()-1).convertToWKT();            
+        } catch (Exception ex) {
+
+        }
+        logger.debug("multi["+multi.getPrimitivesNumber()+"], vertex:"+primitive.getNumVertices()+", first:"+first+", last"+last+".");
+    }
+    
+    private void fillZ(Geometry geometry)
+            throws CreateGeometryException, ReadException {
+        double[] boxZ = new double[2];
+        boxZ[0] = bb.getDouble();
+        boxZ[1] = bb.getDouble();
+
+        if (geometry == null) {
+            return;
+        }
+        if (geometry instanceof Aggregate) {
+            Aggregate multi = (Aggregate) geometry;
+            for (int i = 0; i < multi.getPrimitivesNumber(); i++) {
+                OrientablePrimitive primitive = (OrientablePrimitive) geometry;
+                for (int p = 0; p < primitive.getNumVertices(); p++) {
+                    primitive.setCoordinateAt(p, 2, bb.getDouble());
+                }
+            }
+        } else if (geometry instanceof OrientablePrimitive) {
+            OrientablePrimitive primitive = (OrientablePrimitive) geometry;
+            for (int p = 0; p < primitive.getNumVertices(); p++) {
+                primitive.setCoordinateAt(p, 2, bb.getDouble());
+            }
+        } else {
+            logger.warn("Geoemtry type '" + geometry.getClass().getName() + "'unexpected ");
+        }
+    }
+
+    private long getPositionForRecord(long numRec) {
+        // shx file has a 100 bytes header, then, records
+        // 8 bytes length, one for each entity.
+        // first 4 bytes are the offset
+        // next 4 bytes are length
+
+        int posIndex = 100 + ((int) numRec * 8);
+        // bbShx.position(posIndex);
+        long pos = 8 + 2 * bbShx.getInt(posIndex);
+
+        return pos;
+    }
+
+    /**
+     * Reads the Point from the shape file.
+     *
+     * @param in ByteBuffer.
+     *
+     * @return Point2D.
+     * @throws ReadException
+     * @throws CreateGeometryException
+     */
+    private Point readPoint(BigByteBuffer2 in)
+            throws CreateGeometryException, ReadException {
+        return readPoint(subType, in);
+    }
+
+    private Point readPoint(int subtype, BigByteBuffer2 in)
+            throws CreateGeometryException, ReadException {
+        // bytes 1 to 4 are the type and have already been read.
+        // bytes 4 to 12 are the X coordinate
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        double x = in.getDouble();
+        double y = in.getDouble();
+        Point p = gManager.createPoint(x, y, subtype);
+        return p;
+    }
+
+    /**
+     * Lee un rect�ngulo del fichero.
+     *
+     * @param in ByteBuffer.
+     *
+     * @return Rect�ngulo.
+     * @throws CreateEnvelopeException
+     *
+     * @throws IOException
+     */
+    private Envelope readRectangle(BigByteBuffer2 in)
+            throws CreateEnvelopeException {
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        double x = in.getDouble();
+        double y = in.getDouble();
+
+        double x2 = in.getDouble();
+
+        if (x2 - x == 0) {
+            x2 += 0.2;
+            x -= 0.1;
+        }
+
+        double y2 = in.getDouble();
+
+        if (y2 - y == 0) {
+            y2 += 0.2;
+            y -= 0.1;
+        }
+        Envelope tempEnvelope
+                = gManager.createEnvelope(x, y, x2, y2, SUBTYPES.GEOM2D);
+        return tempEnvelope;
+    }
+
+    /**
+     * Gets the geometry bbox with the index provided. Set to synchronized to
+     * prevent concurrent threads issue (?)
+     *
+     * @param featureIndex
+     * @return
+     * @throws ReadException
+     * @throws CreateEnvelopeException
+     * @throws CreateGeometryException
+     */
+    public synchronized Envelope getBoundingBox(long featureIndex)
+            throws ReadException, CreateEnvelopeException, CreateGeometryException {
+        Point p;
+        Envelope BoundingBox = null;
+        try {
+            bb.position(getPositionForRecord(featureIndex));
+        } catch (Exception e) {
+            throw new ReadException("getBondingBox (" + featureIndex + ")", e);
+            // logger.error(" Shapefile is corrupted. Drawing aborted. ="+e+
+            // "  "+"index = "+index);
+        }
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+
+        int tipoShape = bb.getInt();
+
+        // AZABALA: si tipoShape viene con valores erroneos deja de funcionar
+        // el metodo getShape(i)
+        // if (tipoShape != SHP.NULL) {
+        // type = tipoShape;
+        // }
+        // retrieve that shape.
+        // tempRecord.setShape(readShape(tempShapeType, tempContentLength, in));
+        switch (tipoShape) {
+            case (SHP.POINT2D):
+            case (SHP.POINT3D):
+                p = readPoint(bb);
+                BoundingBox
+                        = gManager.createEnvelope(p.getX() - 0.1, p.getY() - 0.1,
+                                p.getX() + 0.2, p.getY() + 0.2, SUBTYPES.GEOM2D);
+                // new Rectangle2D.Double(p.getX() - 0.1,
+                // p.getY() - 0.1, 0.2, 0.2);
+
+                break;
+
+            case (SHP.POLYLINE2D):
+            case (SHP.POLYGON2D):
+            case (SHP.MULTIPOINT2D):
+            case (SHP.POLYLINE3D):
+            case (SHP.POLYGON3D):
+            case (SHP.MULTIPOINT3D):
+
+                // BoundingBox
+                BoundingBox = readRectangle(bb);
+
+                break;
+        }
+
+        return BoundingBox;
+    }
+
+    /**
+     * @return
+     */
+    public String getSRSParameters() {
+        return this.srsParameters;
+    }
+
+    private void initSupportedGeometryTypes() throws ReadException {
+        switch (this.getGeometryType()) {
+            case Geometry.TYPES.POINT:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.POINT, Geometry.TYPES.NULL};
+                break;
+            case Geometry.TYPES.MULTIPOINT:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.MULTIPOINT, Geometry.TYPES.NULL};
+                break;
+            case Geometry.TYPES.MULTICURVE:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.CURVE, Geometry.TYPES.ELLIPSE,
+                            Geometry.TYPES.ARC, Geometry.TYPES.CIRCLE,
+                            Geometry.TYPES.SURFACE, Geometry.TYPES.NULL,
+                            Geometry.TYPES.MULTICURVE};
+                break;
+            case Geometry.TYPES.MULTISURFACE:
+                supportedGeometryTypes
+                        = new int[]{Geometry.TYPES.ELLIPSE, Geometry.TYPES.CIRCLE,
+                            Geometry.TYPES.SURFACE, Geometry.TYPES.NULL,
+                            Geometry.TYPES.MULTISURFACE};
+                break;
+
+            default:
+                supportedGeometryTypes = new int[]{};
+        }
+    }
+
+    public boolean canWriteGeometry(int gvSIGgeometryType) {
+        for (int i = 0; i < supportedGeometryTypes.length; i++) {
+            if (gvSIGgeometryType == supportedGeometryTypes[i]) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiLine.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiLine.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiLine.java	(revision 42196)
@@ -0,0 +1,420 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.awt.geom.PathIterator;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Elemento shape de tipo multil�nea.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SHPMultiLine implements SHPShape {
+	protected int m_type;
+	protected int[] parts;
+	protected Point[] points;
+	protected double[] zs;
+	//double flatness = 0.8; // Por ejemplo. Cuanto m�s peque�o, m�s segmentos necesitar� la curva
+	private GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(SHPShape.class);
+
+	/**
+	 * Crea un nuevo SHPMultiLine.
+	 */
+	public SHPMultiLine() {
+		m_type = SHP.POLYLINE2D;
+	}
+
+	/**
+	 * Crea un nuevo SHPMultiLine.
+	 *
+	 * @param type Tipo de multil�nea.
+	 *
+	 * @throws ShapefileException
+	 */
+	public SHPMultiLine(int type) {
+		if ((type != SHP.POLYLINE2D) &&
+				(type != SHP.POLYLINEM) &&
+				(type != SHP.POLYLINE3D)) {
+//			throw new ShapefileException("No es de tipo 3,13 ni 23");
+		}
+
+		m_type = type;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#read(MappedByteBuffer, int)
+	 */
+	public Geometry read(MappedByteBuffer buffer, int type) {
+//		double minX = buffer.getDouble();
+//		double minY = buffer.getDouble();
+//		double maxX = buffer.getDouble();
+//		double maxY = buffer.getDouble();
+//		Rectangle2D rec = new Rectangle2D.Double(minX, minY, maxX - minX, maxY
+//				- maxY);
+
+		int numParts = buffer.getInt();
+		int numPoints = buffer.getInt(); //total number of points
+
+		int[] partOffsets = new int[numParts];
+
+		for (int i = 0; i < numParts; i++) {
+			partOffsets[i] = buffer.getInt();
+		}
+
+		Point[] points = new Point[numPoints];
+
+		for (int t = 0; t < numPoints; t++) {
+			try {
+				points[t] = (Point)geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+				points[t].setX(buffer.getDouble());
+				points[t].setY(buffer.getDouble());
+			} catch (CreateGeometryException e) {
+				logger.error("Error creating a point",e);
+			}
+		}
+
+		/*   if (type == FConstant.SHAPE_TYPE_POLYLINEZ) {
+		   //z min, max
+		   buffer.position(buffer.position() + (2 * 8));
+		   for (int t = 0; t < numPoints; t++) {
+		       points[t].z = buffer.getDouble(); //z value
+		   }
+		   }
+		 */
+		Curve curve = null;
+		try {
+			curve = (Curve)geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
+			curve.setGeneralPath(getGeneralPathX(points, partOffsets));
+		} catch (CreateGeometryException e) {
+			logger.error("Error creating the curve",e);
+		}
+		return curve;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public void write(ByteBuffer buffer, Geometry geometry) {
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+		int numParts = parts.length;
+		int npoints = points.length;
+		buffer.putInt(numParts);
+		buffer.putInt(npoints);
+
+		for (int i = 0; i < numParts; i++) {
+			buffer.putInt(parts[i]);
+		}
+
+		for (int t = 0; t < npoints; t++) {
+			buffer.putDouble(points[t].getX());
+			buffer.putDouble(points[t].getY());
+		}
+
+		  if (m_type == SHP.POLYLINE3D) {
+		   double[] zExtreame = SHP.getZMinMax(zs);
+		   if (Double.isNaN(zExtreame[0])) {
+		       buffer.putDouble(0.0);
+		       buffer.putDouble(0.0);
+		   } else {
+		       buffer.putDouble(zExtreame[0]);
+		       buffer.putDouble(zExtreame[1]);
+		   }
+		   for (int t = 0; t < npoints; t++) {
+		       double z = zs[t];
+		       if (Double.isNaN(z)) {
+		           buffer.putDouble(0.0);
+		       } else {
+		           buffer.putDouble(z);
+		       }
+		   }
+
+		   }
+		   if (m_type == SHP.POLYLINEM) {
+		       buffer.putDouble(-10E40);
+		       buffer.putDouble(-10E40);
+		       for (int t = 0; t < npoints; t++) {
+		           buffer.putDouble(-10E40);
+		       }
+		   }
+
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(int)
+	 */
+	public int getLength(Geometry fgeometry) {
+		int numlines;
+		int numpoints;
+		int length;
+
+		numlines = parts.length;
+		numpoints = points.length;
+		if (m_type == SHP.POLYLINE2D) {
+			length = 44 + (4 * numlines) + (numpoints * 16);
+		} else if (m_type == SHP.POLYLINEM) {
+			length = 44 + (4 * numlines) + (numpoints * 16) +
+				(8 * numpoints) + 16;
+		} else if (m_type == SHP.POLYLINE3D) {
+			length = 44 + (4 * numlines) + (numpoints * 16) +
+				(8 * numpoints) + 16;
+		} else {
+			throw new IllegalStateException("Expected ShapeType of Arc, got " +
+				m_type);
+		}
+
+		return length;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param po DOCUMENT ME!
+	 * @param pa DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	protected GeneralPathX getGeneralPathX(Point[] po, int[] pa) {
+		GeneralPathX gPX = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD,
+				po.length);
+		int j = 0;
+
+		for (int i = 0; i < po.length; i++) {
+			if (i == pa[j]) {
+				gPX.moveTo(po[i].getX(), po[i].getY());
+
+				if (j < (pa.length - 1)) {
+					j++;
+				}
+			} else {
+				gPX.lineTo(po[i].getX(), po[i].getY());
+			}
+		}
+
+		return gPX;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#obtainsPoints(com.iver.cit.gvsig.fmap.core.GeneralPathXIterator)
+	 */
+	public void obtainsPoints(Geometry g) {
+		ArrayList arrayPoints = new ArrayList();
+		ArrayList arrayParts = new ArrayList();
+		ArrayList arrayZs = new ArrayList();
+		
+		boolean is3D = false;
+		if ((SHP.POLYLINE3D == m_type) || (SHP.POLYGON3D == m_type)) {
+			if (g.getGeometryType().isTypeOf(Geometry.TYPES.AGGREGATE)) {
+				MultiPrimitive multiPrimitive = (MultiPrimitive)g;
+				int countVertex = 0;
+				for (int i = 0; i < multiPrimitive.getPrimitivesNumber(); i++) {
+					OrientablePrimitive orientablePrimitive = (OrientablePrimitive)multiPrimitive.getPrimitiveAt(i);
+					countVertex += orientablePrimitive.getNumVertices();
+				}
+				
+				zs = new double[countVertex];
+				int indexZS = 0;
+				for (int nPrimitive = 0; nPrimitive < multiPrimitive.getPrimitivesNumber(); nPrimitive++) {
+					OrientablePrimitive orientablePrimitive = (OrientablePrimitive)multiPrimitive.getPrimitiveAt(nPrimitive);
+					for (int nVertex = 0; nVertex < orientablePrimitive.getNumVertices(); nVertex++) {
+						zs[indexZS] = orientablePrimitive.getCoordinateAt(nVertex, 2);
+					}
+				}
+			} else {
+				OrientablePrimitive orientablePrimitive = (OrientablePrimitive)g;
+				zs = new double[orientablePrimitive.getNumVertices()];
+				for (int i = 0; i < zs.length; i++) {
+					zs[i] = orientablePrimitive.getCoordinateAt(i, 2);
+				}
+			}
+			is3D = true;
+		}
+
+		
+		if (g.getGeometryType().isTypeOf(Geometry.TYPES.AGGREGATE)) {
+		    MultiPrimitive multiPrimitive = (MultiPrimitive)g;
+		    int index = 0;
+		    for (int i = 0; i < multiPrimitive.getPrimitivesNumber(); i++) {
+		    	index = obtainsPoints(
+		    				multiPrimitive.getPrimitiveAt(i), 
+		    				arrayPoints, 
+		    				arrayParts, 
+		    				arrayZs, 
+		    				is3D, 
+		    				index);
+		    }
+		}else{
+		    obtainsPoints((Primitive)g, arrayPoints, arrayParts, arrayZs, is3D, 0);
+		}	
+		
+		Integer[] integers = (Integer[]) arrayParts.toArray(new Integer[0]);
+        parts = new int[integers.length];
+        for (int i = 0; i < integers.length; i++) {
+            parts[i] = integers[i].intValue();
+        }
+        if (arrayPoints == null) {
+            points = new Point[0];
+            return;
+        }
+        points = (Point[]) arrayPoints.toArray(new Point[0]);
+        
+        if (is3D) {
+            Double[] doubleZs = (Double[])arrayZs.toArray(new Double[0]);
+            zs = new double[doubleZs.length];
+            for (int i = 0; i < doubleZs.length; i++){
+                zs[i] = doubleZs[i].doubleValue();
+            }
+        }
+	}
+	
+	private int obtainsPoints(Primitive primitive, List arrayPoints, List arrayParts, List arrayZs, boolean is3D, int index) {
+		PathIterator theIterator = primitive.getPathIterator(null, geomManager.getFlatness());
+		double[] theData = new double[6];
+		java.awt.geom.Point2D pFirst = null;
+		int pos = 0;
+				
+		boolean first = true;
+		
+		Double firstZ = null;
+		while (!theIterator.isDone()) {
+			int theType = theIterator.currentSegment(theData);
+			switch (theType) {
+				case PathIterator.SEG_MOVETO:
+					if (first) {
+						first = false;
+					} else {
+						if (m_type == SHP.POLYGON2D ||
+								m_type == SHP.POLYGON3D ||
+								m_type == SHP.POLYGONM) {
+							try {
+								Point point = geomManager.createPoint(pFirst.getX(), pFirst.getY(), SUBTYPES.GEOM2D);
+								if (!arrayPoints.get(arrayPoints.size()-1).equals(point)) {
+									arrayPoints.add(point);
+									if (is3D) {
+										arrayZs.add(firstZ);
+									}
+								}
+							} catch (CreateGeometryException e) {
+								logger.error("Error creating a point", e);
+							}
+						}
+					}
+					arrayParts.add(new Integer(index));
+					pFirst = new java.awt.geom.Point2D.Double(theData[0], theData[1]);
+					try {
+						arrayPoints.add(geomManager.createPoint(theData[0], theData[1], SUBTYPES.GEOM2D));
+					} catch (CreateGeometryException e1) {
+						logger.error("Error creating a point", e1);
+					}
+					if (is3D) {
+						Double z = 0D;
+						if(pos < zs.length)
+							z = new Double(zs[pos]);
+						firstZ = z;
+						arrayZs.add(z);
+						pos++;
+					}
+					break;
+
+				case PathIterator.SEG_LINETO:
+					try {
+						arrayPoints.add(geomManager.createPoint(theData[0], theData[1], SUBTYPES.GEOM2D));
+					} catch (CreateGeometryException e) {
+						logger.error("Error creating a point", e);
+					}
+					if (is3D){
+						Double z = 0D;
+						if(pos < zs.length)
+							z = new Double(zs[pos]);
+						arrayZs.add(z);
+						pos++;
+					}
+					break;
+
+				case PathIterator.SEG_QUADTO:
+					System.out.println("Not supported here");
+
+					break;
+
+				case PathIterator.SEG_CUBICTO:
+					System.out.println("Not supported here");
+
+					break;
+
+				case PathIterator.SEG_CLOSE:
+					try{
+						Point point = geomManager.createPoint(pFirst.getX(), pFirst.getY(), SUBTYPES.GEOM2D);
+						if (!arrayPoints.get(arrayPoints.size()-1).equals(point)) {
+							arrayPoints.add(point);
+							if (is3D) {
+								arrayZs.add(firstZ);
+							}
+							index++;
+						}
+					} catch (CreateGeometryException e) {
+						logger.error("Error creating a point", e);
+					}
+					break;
+			} //end switch
+			if(theType != PathIterator.SEG_CLOSE)
+				index++;
+			theIterator.next();
+		}
+		return index;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiLine.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiPoint.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Elemento shape de tipo multipunto.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SHPMultiPoint implements SHPShape {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(SHPMultiPoint.class);
+	private int m_type;
+	private int numpoints;
+	private Point2D[] points;
+	private double[] zs;
+
+	/**
+	 * Crea un nuevo SHPMultiPoint.
+	 */
+	public SHPMultiPoint() {
+		m_type = SHP.MULTIPOINT2D;
+	}
+
+	/**
+	 * Crea un nuevo SHPMultiPoint.
+	 *
+	 * @param type Tipo de multipunto.
+	 *
+	 * @throws ShapefileException
+	 */
+	public SHPMultiPoint(int type) {
+		if ((type != SHP.MULTIPOINT2D) &&
+				(type != SHP.MULTIPOINTM) &&
+				(type != SHP.MULTIPOINT3D)) {
+//			throw new ShapefileException("No es de tipo 8, 18, o 28");
+		}
+
+		m_type = type;
+	}
+
+	/**
+	 * Devuelve el tipo de multipoint en concreto.
+	 *
+	 * @return Tipo de multipoint.
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#read(MappedByteBuffer, int)
+	 */
+	public Geometry read(MappedByteBuffer buffer, int type) {
+		double minX = buffer.getDouble();
+		double minY = buffer.getDouble();
+		double maxX = buffer.getDouble();
+		double maxY = buffer.getDouble();
+		Rectangle2D rec = new Rectangle2D.Double(minX, minY, maxX - minX,
+				maxY - maxY);
+		int numpoints = buffer.getInt();
+		org.gvsig.fmap.geom.primitive.Point[] p = new org.gvsig.fmap.geom.primitive.Point[numpoints];
+
+		for (int t = 0; t < numpoints; t++) {
+			double x = buffer.getDouble();
+			double y = buffer.getDouble();
+			try {
+				p[t] = geomManager.createPoint(x, y, SUBTYPES.GEOM2D);
+			} catch (CreateGeometryException e) {
+				logger.error("Error creating a point", e);
+			}
+		}
+
+		/*   if (m_type == FConstant.SHAPE_TYPE_MULTIPOINTZ) {
+		   buffer.position(buffer.position() + (2 * 8));
+		   for (int t = 0; t < numpoints; t++) {
+		       p[t].z = buffer.getDouble(); //z
+		   }
+		   }
+		 */
+		MultiPoint multipoint = null;
+		try {
+			multipoint = (MultiPoint)geomManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+			for (int i=0 ; i<p.length ; i++){
+				multipoint.addPoint(p[i]);
+			}			
+		} catch (CreateGeometryException e) {
+			logger.error("Error creating the multipoint", e);
+		}
+		return multipoint;		
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public void write(ByteBuffer buffer, Geometry geometry) {
+		// FMultiPoint2D mp = (FMultiPoint2D) geometry.getShape();
+//		int p = buffer.position();
+
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+		///obtainsPoints(geometry.getGeneralPathXIterator());
+		buffer.putInt(numpoints);
+
+		for (int t = 0, tt = numpoints; t < tt; t++) {
+			Point2D point = points[t];
+			buffer.putDouble(point.getX());
+			buffer.putDouble(point.getY());
+		}
+
+		  if (m_type == SHP.MULTIPOINT3D) {
+		   double[] zExtreame = SHP.getZMinMax(zs);
+		   if (Double.isNaN(zExtreame[0])) {
+		       buffer.putDouble(0.0);
+		       buffer.putDouble(0.0);
+		   } else {
+		       buffer.putDouble(zExtreame[0]);
+		       buffer.putDouble(zExtreame[1]);
+		   }
+		   for (int t = 0; t < numpoints; t++) {
+		       double z = zs[t];
+		       if (Double.isNaN(z)) {
+		           buffer.putDouble(0.0);
+		       } else {
+		           buffer.putDouble(z);
+		       }
+		   }
+		   }
+		   if ((m_type == SHP.MULTIPOINTM) ||
+		           (m_type == SHP.MULTIPOINT3D)) {
+		       buffer.putDouble(-10E40);
+		       buffer.putDouble(-10E40);
+		       for (int t = 0; t < numpoints; t++) {
+		           buffer.putDouble(-10E40);
+		       }
+		   }
+
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(com.iver.cit.gvsig.core.BasicShape.FGeometry)
+	 */
+	public int getLength(Geometry fgeometry) {
+		//FMultiPoint2D mp = (FMultiPoint2D) fgeometry.getShape();
+		///obtainsPoints(fgeometry.getGeneralPathXIterator());
+
+		int length;
+
+		if (m_type == SHP.MULTIPOINT2D) {
+			// two doubles per coord (16 * numgeoms) + 40 for header
+			length = (numpoints * 16) + 40;
+		} else if (m_type == SHP.MULTIPOINTM) {
+			// add the additional MMin, MMax for 16, then 8 per measure
+			length = (numpoints * 16) + 40 + 16 + (8 * numpoints);
+		} else if (m_type == SHP.MULTIPOINT3D) {
+			// add the additional ZMin,ZMax, plus 8 per Z
+			length = (numpoints * 16) + 40 + 16 + (8 * numpoints);
+		} else {
+			throw new IllegalStateException("Expected ShapeType of Arc, got " +
+				m_type);
+		}
+
+		return length;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.drivers.shp.write.SHPShape#obtainsPoints(com.iver.cit.gvsig.fmap.core.GeneralPathXIterator)
+	 */
+	public void obtainsPoints(Geometry g) {
+		if (SHP.MULTIPOINT3D == m_type){
+			MultiPoint multipoint = (MultiPoint)g;
+			zs = new double[multipoint.getPrimitivesNumber()];
+			for (int i=0 ; i<zs.length ; i++){
+				zs[i] = multipoint.getPointAt(i).getCoordinateAt(2);
+			}		
+		}
+		PathIterator theIterator = g.getPathIterator(null); //polyLine.getPathIterator(null, flatness);
+		double[] theData = new double[6];
+		ArrayList ps=new ArrayList();
+		while (!theIterator.isDone()) {
+			//while not done
+//			int theType = theIterator.currentSegment(theData);
+			theIterator.currentSegment(theData);
+
+			ps.add(new Point2D.Double(theData[0], theData[1]));
+			theIterator.next();
+		} //end while loop
+		points=(Point2D[])ps.toArray(new Point2D.Double[0]);
+		numpoints=points.length;
+	}
+//	public void setFlatness(double flatness) {
+//		//this.flatness=flatness;
+//	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPMultiPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPolygon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPolygon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPolygon.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.awt.geom.Rectangle2D;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Elemento shape de tipo Pol�gono.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SHPPolygon extends SHPMultiLine {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(SHPPolygon.class);
+
+	/**
+	 * Crea un nuevo SHPPolygon.
+	 */
+	public SHPPolygon() {
+		m_type = SHP.POLYGON2D;
+	}
+
+	/**
+	 * Crea un nuevo SHPPolygon.
+	 *
+	 * @param type Tipo de shape.
+	 *
+	 * @throws ShapefileException
+	 */
+	public SHPPolygon(int type) {
+		if ((type != SHP.POLYGON2D) &&
+				(type != SHP.POLYGONM) &&
+				(type != SHP.POLYGON3D)) {
+//			throw new ShapefileException("No es de tipo 5, 15, o 25");
+		}
+
+		m_type = type;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#read(MappedByteBuffer, int)
+	 */
+	public synchronized Geometry read(MappedByteBuffer buffer, int type) {
+		double minX = buffer.getDouble();
+		double minY = buffer.getDouble();
+		double maxX = buffer.getDouble();
+		double maxY = buffer.getDouble();
+		Rectangle2D rec = new Rectangle2D.Double(minX, minY, maxX - minX,
+				maxY - maxY);
+		int numParts = buffer.getInt();
+		int numPoints = buffer.getInt();
+
+		int[] partOffsets = new int[numParts];
+
+		for (int i = 0; i < numParts; i++) {
+			partOffsets[i] = buffer.getInt();
+		}
+
+		Point[] points = readPoints(buffer, numPoints);
+
+		/* if (m_type == FConstant.SHAPE_TYPE_POLYGONZ) {
+		   //z
+		   buffer.position(buffer.position() + (2 * 8));
+		   for (int t = 0; t < numPoints; t++) {
+		       points[t].z = buffer.getDouble();
+		   }
+		   }
+		 */
+		int offset = 0;
+		int start;
+		int finish;
+		int length;
+
+		for (int part = 0; part < numParts; part++) {
+			start = partOffsets[part];
+
+			if (part == (numParts - 1)) {
+				finish = numPoints;
+			} else {
+				finish = partOffsets[part + 1];
+			}
+
+			length = finish - start;
+
+			Point[] pointsPart = new Point[length];
+
+			for (int i = 0; i < length; i++) {
+				pointsPart[i] = points[offset++];
+			}
+		}
+
+		try {
+			return geomManager.createSurface(getGeneralPathX(points, partOffsets), SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			logger.error("Error creating a surface", e);
+			return null;
+		}
+	}
+
+	/**
+	 * Lee los puntos del buffer.
+	 *
+	 * @param buffer
+	 * @param numPoints N�mero de puntos.
+	 *
+	 * @return Vector de Puntos.
+	 */
+	private synchronized Point[] readPoints(final MappedByteBuffer buffer,
+		final int numPoints) {
+		Point[] points = new Point[numPoints];
+
+		for (int t = 0; t < numPoints; t++) {
+			try {
+				points[t] = geomManager.createPoint(buffer.getDouble(), buffer.getDouble(), SUBTYPES.GEOM2D);
+			} catch (CreateGeometryException e) {
+				logger.error("Error creating a point", e);
+			}
+		}
+
+		return points;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public synchronized void write(ByteBuffer buffer, Geometry geometry) {
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+		
+		int nparts = parts.length;
+		int npoints = points.length;
+
+		buffer.putInt(nparts);
+		buffer.putInt(npoints);
+
+		for (int t = 0; t < nparts; t++) {
+			buffer.putInt(parts[t]);
+		}
+
+		for (int t = 0; t < points.length; t++) {
+			buffer.putDouble(points[t].getX());
+			buffer.putDouble(points[t].getY());
+		}
+
+		if (m_type == SHP.POLYGON3D) {
+			double[] zExtreame = SHP.getZMinMax(zs);
+			if (Double.isNaN(zExtreame[0])) {
+				buffer.putDouble(0.0);
+				buffer.putDouble(0.0);
+			} else {
+				buffer.putDouble(zExtreame[0]);
+				buffer.putDouble(zExtreame[1]);
+			}
+			for (int t = 0; t < npoints; t++) {
+				double z = zs[t];
+				if (Double.isNaN(z)) {
+					buffer.putDouble(0.0);
+				} else {
+					buffer.putDouble(z);
+				}
+			}
+		}
+
+		if ((m_type == SHP.POLYGONM)) {
+			buffer.putDouble(-10E40);
+			buffer.putDouble(-10E40);
+
+			for (int t = 0; t < npoints; t++) {
+				buffer.putDouble(-10E40);
+			}
+		}
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(com.iver.cit.gvsig.core.BasicShape.FGeometry)
+	 */
+	public synchronized int getLength(Geometry fgeometry) {
+		int npoints = points.length;
+
+		int length;
+
+		if (m_type == SHP.POLYGON3D || m_type == SHP.POLYGONM) {
+			length = 44 + (4 * parts.length) + (16 * npoints) + (8 * npoints) + 16;
+		} else if (m_type == SHP.POLYGON2D) {
+			length = 44 + (4 * parts.length) + (16 * npoints);
+		} else {
+			throw new IllegalStateException("Expected ShapeType of Polygon, got " + m_type);
+		}
+
+		return length;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPolygon.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/ISHPFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/ISHPFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/ISHPFile.java	(revision 42196)
@@ -0,0 +1,74 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface ISHPFile {
+
+    boolean canWriteGeometry(int gvSIGgeometryType);
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.dal.Resource#doClose()
+     */
+    void close() throws CloseException;
+
+    /**
+     * Gets the geometry bbox with the index provided.
+     * Set to synchronized to prevent concurrent threads issue (?)
+     *
+     * @param featureIndex
+     * @return
+     * @throws ReadException
+     * @throws CreateEnvelopeException
+     * @throws CreateGeometryException
+     */
+    Envelope getBoundingBox(long featureIndex) throws ReadException, CreateEnvelopeException, CreateGeometryException;
+
+    Envelope getFullExtent() throws ReadException;
+
+    /**
+     * Gets the geometry with the index provided.
+     * Set to synchronized to prevent concurrent threads issue (?)
+     *
+     * @param position
+     * @return
+     * @throws ReadException
+     * @throws CreateGeometryException
+     */
+    Geometry getGeometry(long position) throws ReadException, CreateGeometryException;
+
+    int getGeometrySubType() throws ReadException;
+
+    int getGeometryType() throws ReadException;
+
+    /**
+     * @return
+     */
+    String getSRSParameters();
+
+    boolean isEditable();
+
+    boolean isOpen();
+
+    void open() throws DataException;
+
+    void setUseNullGeometry(boolean useNullGeometry);
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/InconsistenciesInGeometryTypeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/InconsistenciesInGeometryTypeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/InconsistenciesInGeometryTypeException.java	(revision 42196)
@@ -0,0 +1,18 @@
+
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import org.gvsig.fmap.dal.exception.ReadException;
+
+
+public class InconsistenciesInGeometryTypeException extends ReadException {
+
+    private final static String MESSAGE_FORMAT = "Inconsistencies in geometry type '%(store)'.";
+    private final static String MESSAGE_KEY = "InconsistenciesInGeometryTypeException";
+    private static final long serialVersionUID = -1098020049568796722L;
+
+    public InconsistenciesInGeometryTypeException(String store, Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, (int)serialVersionUID);
+        setValue("store", store);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPoint.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.awt.geom.PathIterator;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SHPPoint implements SHPShape {
+    private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private static final Logger logger = LoggerFactory.getLogger(SHPPoint.class);
+    private int m_type;
+    private Point point;
+    private double z;
+
+    /**
+     * Crea un nuevo SHPPoint.
+     *
+     * @param type DOCUMENT ME!
+     *
+     * @throws ShapefileException DOCUMENT ME!
+     */
+    public SHPPoint(int type)  {
+        if ((type != SHP.POINT2D) &&
+            (type != SHP.POINTM) &&
+            (type != SHP.POINT3D)) { // 2d, 2d+m, 3d+m
+            //			throw new ShapefileException("No es un punto 1,11 ni 21");
+        }
+
+        m_type = type;
+    }
+
+    /**
+     * Crea un nuevo SHPPoint.
+     */
+    public SHPPoint() {
+        m_type = SHP.POINT2D; //2d
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+     */
+    public int getShapeType() {
+        return m_type;
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.shp.SHPShape#read(MappedByteBuffer, int)
+     */
+    public Geometry read(MappedByteBuffer buffer, int type) {
+        double x = buffer.getDouble();
+        double y = buffer.getDouble();
+        double z = Double.NaN;
+
+        if (m_type == SHP.POINTM) {
+            buffer.getDouble();
+        }
+
+        if (m_type == SHP.POINT3D) {
+            z = buffer.getDouble();
+            Point point;
+            try {
+                point = geomManager.createPoint(x, y, SUBTYPES.GEOM3D);
+                point.setCoordinateAt(2, z);
+                return point;
+                //FIXME que hacems con esto
+            } catch (CreateGeometryException e) {
+                logger.error("Error creating a point", e);
+            }			
+        }
+        try {
+            return geomManager.createPoint(x, y, SUBTYPES.GEOM2D);
+        } catch (CreateGeometryException e) {
+            logger.error("Error creating a point", e);
+        }
+        return null;
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+     */
+    public void write(ByteBuffer buffer, Geometry geometry) {
+        buffer.putDouble(point.getX());
+        buffer.putDouble(point.getY());
+
+        if ((m_type == SHP.POINT3D) ||  (m_type == SHP.POINTM)){
+            if (Double.isNaN(z)) { // nan means not defined
+                buffer.putDouble(0.0);
+            } else {
+                buffer.putDouble(z);
+            }
+        }
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(int)
+     */
+    public int getLength(Geometry fgeometry) {
+        int length;
+
+        if (m_type == SHP.POINT2D) {
+            length = 20;
+        } else if (m_type == SHP.POINTM || m_type == SHP.POINT3D) {
+            length = 28;
+        } else {
+            throw new IllegalStateException("Expected ShapeType of Point, got" +
+                m_type);
+        }
+
+        return length;
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.drivers.shp.write.SHPShape#obtainsPoints(com.iver.cit.gvsig.fmap.core.GeneralPathXIterator)
+     */
+    public void obtainsPoints(Geometry g) {
+        if (m_type == SHP.POINTM || m_type == SHP.POINT3D){
+            z = ((Point)g).getCoordinateAt(2);
+        }
+        PathIterator theIterator = g.getPathIterator(null); //polyLine.getPathIterator(null, flatness);
+        double[] theData = new double[6];
+
+        while (!theIterator.isDone()) {
+            //while not done
+            //			int theType = theIterator.currentSegment(theData);
+            theIterator.currentSegment(theData);
+
+            try {
+                point = geomManager.createPoint(theData[0], theData[1], SUBTYPES.GEOM2D);
+            } catch (CreateGeometryException e) {
+                logger.error("Error creating a point", e);
+            }
+
+            theIterator.next();
+        } //end while loop
+    }
+    //	public void setFlatness(double flatness) {
+    //	//	this.flatness=flatness;
+    //	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFileWrite.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFileWrite.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFileWrite.java	(revision 42196)
@@ -0,0 +1,334 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SHPFileWrite {
+
+    private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private static final Logger logger = LoggerFactory.getLogger(SHPFileWrite.class);
+    private SHPShape m_shape = null;
+    private ByteBuffer m_bb = null;
+    private ByteBuffer m_indexBuffer = null;
+    private int m_pos = 0;
+    private int m_offset;
+    private int m_type = SHP.NULL;
+    private int m_cnt;
+    private FileChannel shpChannel;
+    private FileChannel shxChannel;
+    private int inconsistenciesInGeometryTypeCounter = 0;
+
+    public SHPFileWrite(FileChannel shpChannel, FileChannel shxChannel) {
+        this.shpChannel = shpChannel;
+        this.shxChannel = shxChannel;
+    }
+
+    /**
+     * Make sure our buffer is of size.
+     *
+     */
+    private void checkShapeBuffer(int size) {
+        if ( m_bb.capacity() < size ) {
+            m_bb = ByteBuffer.allocateDirect(size);
+        }
+    }
+
+    /**
+     * Drain internal buffers into underlying channels.
+     *
+     * @throws WriteException
+     *
+     */
+    private void drain() throws WriteException {
+        m_bb.flip();
+        m_indexBuffer.flip();
+        try {
+            while ( m_bb.remaining() > 0 ) {
+                shpChannel.write(m_bb);
+            }
+
+            while ( m_indexBuffer.remaining() > 0 ) {
+                shxChannel.write(m_indexBuffer);
+            }
+        } catch (IOException e) {
+            throw new WriteException("SHP File Write Drain", e);
+        }
+        m_bb.flip().limit(m_bb.capacity());
+        m_indexBuffer.flip().limit(m_indexBuffer.capacity());
+    }
+
+    private void allocateBuffers() {
+        m_bb = ByteBuffer.allocateDirect(16 * 1024);
+        m_indexBuffer = ByteBuffer.allocateDirect(100);
+    }
+
+    /**
+     * Close the underlying Channels.
+     */
+    public void close() throws WriteException {
+        try {
+            shpChannel.close();
+            shxChannel.close();
+        } catch (IOException e) {
+            throw new WriteException("SHP File Write Close", e);
+        }
+        shpChannel = null;
+        shxChannel = null;
+        m_shape = null;
+
+        if ( m_indexBuffer instanceof ByteBuffer ) {
+            if ( m_indexBuffer != null ) {
+                ///NIOUtilities.clean(m_indexBuffer);
+            }
+        }
+
+        if ( m_indexBuffer instanceof ByteBuffer ) {
+            if ( m_indexBuffer != null ) {
+                ///NIOUtilities.clean(m_bb);
+            }
+        }
+
+        m_indexBuffer = null;
+        m_bb = null;
+    }
+
+    public void write(Geometry[] geometries, int type)
+            throws WriteException {
+        m_shape = SHP.create(type);
+        writeHeaders(geometries, type);
+
+        m_pos = m_bb.position();
+
+        for ( int i = 0, ii = geometries.length; i < ii; i++ ) {
+            writeGeometry(geometries[i]);
+        }
+
+        close();
+    }
+
+    private void writeHeaders(Geometry[] geometries, int type)
+            throws WriteException {
+        this.m_type = type;
+        this.inconsistenciesInGeometryTypeCounter = 0;
+
+        int fileLength = 100;
+        Envelope envelope = null;
+        try {
+            envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
+        } catch (CreateEnvelopeException e) {
+            logger.error("Error creating the envelope", e);
+        }
+
+        for ( int i = geometries.length - 1; i >= 0; i-- ) {
+            Geometry fgeometry = geometries[i];
+            m_shape.obtainsPoints(fgeometry);
+            int size = m_shape.getLength(fgeometry) + 8;
+            fileLength += size;
+            envelope.add(fgeometry.getEnvelope());
+        }
+
+        writeHeaders(envelope, type, geometries.length, fileLength);
+
+    }
+
+    /**
+     * Writes shape header (100 bytes)
+     */
+    public void writeHeaders(Envelope bounds, int type,
+            int numberOfGeometries,
+            int fileLength) throws WriteException {
+
+        this.m_type = type;
+        this.inconsistenciesInGeometryTypeCounter = 0;
+
+        if ( m_bb == null ) {
+            allocateBuffers();
+        }
+        // Posicionamos al principio.
+        m_bb.position(0);
+        m_indexBuffer.position(0);
+
+        ShapeFileHeader2 header = new ShapeFileHeader2();
+
+        header.write(m_bb, type, numberOfGeometries, fileLength / 2,
+                bounds
+                .getMinimum(0), bounds.getMinimum(1), bounds.getMaximum(0),
+                bounds.getMaximum(1), 0, 0, 0, 0);
+
+        header.write(m_indexBuffer, type, numberOfGeometries,
+                50 + (4 * numberOfGeometries), bounds.getMinimum(0), bounds.getMinimum(1),
+                bounds.getMaximum(0), bounds.getMaximum(1), 0, 0, 0, 0);
+
+        m_offset = 50;
+        m_cnt = 0;
+
+        try {
+            shpChannel.position(0);
+            shxChannel.position(0);
+        } catch (IOException e) {
+            throw new WriteException("SHP File Write Headers", e);
+        }
+        drain();
+    }
+
+    public int writeIGeometry(Geometry g) throws WriteException {
+        if ( g == null ) {
+            m_shape = SHP.create(0);
+        } else {
+            int shapeType = getShapeType(g.getType(), g.getGeometryType().getSubType());
+            m_shape = SHP.create(shapeType);
+        }
+        return writeGeometry(g);
+    }
+
+    /**
+     * Writes a single Geometry.
+     *
+     * @param g
+     * @return the position of buffer (after the last geometry, it will allow
+     * you to write the file size in the header.
+     */
+    public synchronized int writeGeometry(Geometry g)
+            throws WriteException {
+        if ( m_shape.getShapeType() != this.m_type ) {
+            if ( this.inconsistenciesInGeometryTypeCounter < 10 ) {
+                logger.warn("Saving a geometry of type '" + SHP.getTypeName(m_shape.getShapeType()) + "' in a shape of type '" + SHP.getTypeName(this.m_type) + "'.");
+            } else if ( this.inconsistenciesInGeometryTypeCounter < 11 ) {
+                logger.warn("Too many warnings. Saving a geometry of type '" + SHP.getTypeName(m_shape.getShapeType()) + "' in a shape of type '" + SHP.getTypeName(this.m_type) + "'.");
+            }
+            this.inconsistenciesInGeometryTypeCounter++;
+        }
+
+        if ( m_bb == null ) {
+            allocateBuffers();
+            m_offset = 50;
+            m_cnt = 0;
+
+            try {
+                shpChannel.position(0);
+                shxChannel.position(0);
+            } catch (IOException e) {
+                throw new WriteException("SHP File Write", e);
+            }
+        }
+
+        m_pos = m_bb.position();
+        m_shape.obtainsPoints(g);
+        int length = m_shape.getLength(g);
+
+        // must allocate enough for shape + header (2 ints)
+        checkShapeBuffer(length + 8);
+
+        length /= 2;
+
+        m_bb.order(ByteOrder.BIG_ENDIAN);
+        m_bb.putInt(++m_cnt);
+        m_bb.putInt(length);
+        m_bb.order(ByteOrder.LITTLE_ENDIAN);
+        m_bb.putInt(m_shape.getShapeType());
+        m_shape.write(m_bb, g);
+
+        m_pos = m_bb.position();
+
+        // write to the shx
+        m_indexBuffer.putInt(m_offset);
+        m_indexBuffer.putInt(length);
+        m_offset += (length + 4);
+        drain();
+
+        return m_pos; // Devolvemos hasta donde hemos escrito
+    }
+
+    /**
+     * Returns a shapeType compatible with shapeFile constants from a gvSIG's
+     * IGeometry type
+     *
+     * @param geometryType
+     * @return a shapeType compatible with shapeFile constants from a gvSIG's
+     * IGeometry type
+     */
+    public int getShapeType(int geometryType, int geometrySubType) {
+
+        if ( geometrySubType == Geometry.SUBTYPES.GEOM3D ||  geometrySubType == Geometry.SUBTYPES.GEOM3DM  ) {
+            switch (geometryType) {
+            case Geometry.TYPES.NULL:
+                return SHP.NULL;
+
+            case Geometry.TYPES.POINT:
+                return SHP.POINT3D;
+
+            case Geometry.TYPES.CURVE:
+            case Geometry.TYPES.MULTICURVE:
+            case Geometry.TYPES.ELLIPSE:
+            case Geometry.TYPES.CIRCLE:
+            case Geometry.TYPES.ARC:
+            case Geometry.TYPES.SPLINE:
+                return SHP.POLYLINE3D;
+
+            case Geometry.TYPES.SURFACE:
+            case Geometry.TYPES.MULTISURFACE:
+                return SHP.POLYGON3D;
+
+            case Geometry.TYPES.MULTIPOINT:
+                return SHP.MULTIPOINT3D; //TODO falta aclarar cosas aqu�.
+            }
+
+        } else {
+            switch (geometryType) {
+            case Geometry.TYPES.POINT:
+                return SHP.POINT2D;
+
+            case Geometry.TYPES.CURVE:
+            case Geometry.TYPES.MULTICURVE:
+            case Geometry.TYPES.ELLIPSE:
+            case Geometry.TYPES.CIRCLE:
+            case Geometry.TYPES.ARC:
+            case Geometry.TYPES.SPLINE:
+                return SHP.POLYLINE2D;
+
+            case Geometry.TYPES.SURFACE:
+            case Geometry.TYPES.MULTISURFACE:
+                return SHP.POLYGON2D;
+
+            case Geometry.TYPES.MULTIPOINT:
+                return SHP.MULTIPOINT2D; //TODO falta aclarar cosas aqu�.
+            }
+        }
+        return SHP.NULL;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFileWrite.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPNull.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPNull.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPNull.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+
+import org.gvsig.fmap.geom.Geometry;
+
+public class SHPNull implements SHPShape {
+	public int getShapeType() {
+        return SHP.NULL;
+	}
+
+	public SHPNull(int type)  {
+	}
+	public SHPNull() {
+	}
+	public Geometry read(MappedByteBuffer buffer, int type) {
+		return null;
+	}
+
+	public void write(ByteBuffer buffer, Geometry geometry) {
+	}
+
+	public int getLength(Geometry fgeometry) {
+		return 4;
+	}
+
+	public void obtainsPoints(Geometry g) {
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPNull.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHP.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHP.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHP.java	(revision 42196)
@@ -0,0 +1,280 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.io.File;
+
+
+
+/**
+ * Clase con las constantes que representan los diferentes tipos de Shape y
+ * m�todos est�ticos relativos a los shapes.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SHP {
+
+    public static final int NULL = 0;
+    public static final int POINT2D = 1;
+    public static final int POLYLINE2D = 3;
+    public static final int POLYGON2D = 5;
+    public static final int MULTIPOINT2D = 8;
+    public static final int POINT3D = 11;
+    public static final int POLYLINE3D = 13;
+    public static final int POLYGON3D = 15;
+    public static final int MULTIPOINT3D = 18;
+	public final static int POINTM = 21;
+	public final static int POLYLINEM = 23;
+	public final static int POLYGONM = 25;
+	public final static int MULTIPOINTM = 28;
+    /**
+     * Crea a partir del tipo de geometr�a un shape del tipo m�s adecuado.
+     *
+     * @param type Tipo de geometr�a.
+     *
+     * @return Geometr�a m�s adecuada.
+     *
+     * @throws ShapefileException Se lanza cuando es causada por la creaci�n
+     *         del shape.
+     */
+    public static SHPShape create(int type) {
+        SHPShape shape;
+
+        switch (type) {
+        case NULL:
+            shape = new SHPNull(type);
+            break;
+
+        case POINT2D:
+        case POINT3D:
+        case POINTM:
+            shape = new SHPPoint(type);
+
+            break;
+
+        case POLYLINE2D:
+        case POLYLINE3D:
+        case POLYLINEM:
+            shape = new SHPMultiLine(type);
+
+            break;
+
+        case POLYGON2D:
+        case POLYGON3D:
+        case POLYGONM:
+            shape = new SHPPolygon(type);
+
+            break;
+
+        case MULTIPOINT2D:
+        case MULTIPOINT3D:
+        case MULTIPOINTM:
+            shape = new SHPMultiPoint(type);
+
+            break;
+
+        default:
+            shape = null;
+        }
+
+        return shape;
+    }
+
+    public static String getTypeName(int type) {
+
+        switch (type) {
+        case NULL:
+            return "NULL";
+        case POINT2D:
+            return "POINT2D";
+        case POINT3D:
+            return "POINT3D";
+        case POINTM:
+            return "POINTM";
+        case POLYLINE2D:
+            return "POLYLINE2D";
+        case POLYLINE3D:
+            return "POLYLINE3D";
+        case POLYLINEM:
+            return "POLYLINEM";
+        case POLYGON2D:
+            return "POLYGON2D";
+        case POLYGON3D:
+            return "POLYGON3D";
+        case POLYGONM:
+            return "POLYGONM";
+        case MULTIPOINT2D:
+            return "MULTIPOINT2D";
+        case MULTIPOINT3D:
+            return "MULTIPOINT3D";
+        case MULTIPOINTM:
+            return "MULTIPOINTM";
+        default:
+            return Integer.toString(type);
+        }
+    }
+
+    /**
+     * Devuelve un array con dos doubles, el primero representa el m�nimo valor
+     * y el segundo el m�ximo de entre los valores que se pasan como par�metro
+     * en forma de array.
+     *
+     * @param zs Valores a comprobar.
+     *
+     * @return Array de doubles con el valor m�nimo y el valor m�ximo.
+     */
+    public static double[] getZMinMax(double[] zs) {
+        if (zs == null) {
+            return null;
+        }
+
+        double min = Double.MAX_VALUE;
+        double max = Double.NEGATIVE_INFINITY;
+
+        for (int i = 0; i < zs.length; i++) {
+            if (zs[i] > max) {
+                max = zs[i];
+            }
+
+            if (zs[i] < min) {
+                min = zs[i];
+            }
+        }
+
+        return new double[] { min, max };
+    }
+    public static File getDbfFile(File shpFile){
+    	String str = shpFile.getAbsolutePath();
+		File directory=shpFile.getParentFile();
+		File[] files=new File[0];
+		if (directory!=null){
+			MyFileFilter myFileFilter = new MyFileFilter(str);
+			files=directory.listFiles(myFileFilter);
+		}
+		String[] ends=new String[] {"dbf","DBF","Dbf","dBf","DBf","dbF","DbF","dBF"};
+		File dbfFile=findEnd(str,files,ends);
+		return dbfFile;
+    }
+
+    public static File getShpFile(File dbfFile){
+    	String str = dbfFile.getAbsolutePath();
+		File directory=dbfFile.getParentFile();
+		File[] files=new File[0];
+		if (directory!=null){
+			MyFileFilter myFileFilter = new MyFileFilter(str);
+			files=directory.listFiles(myFileFilter);
+		}
+		String[] ends=new String[] {"shp","SHP","Shp","sHp","SHp","shP","ShP","sHP"};
+		File shpFile=findEnd(str,files,ends);
+		return shpFile;
+    }
+
+    public static File getShxFile(File shpFile){
+    	String str = shpFile.getAbsolutePath();
+		File directory=shpFile.getParentFile();
+		File[] files=new File[0];
+		if (directory!=null){
+			MyFileFilter myFileFilter = new MyFileFilter(str);
+			files=directory.listFiles(myFileFilter);
+		}
+		String[] ends=new String[] {"shx","SHX","Shx","sHx","SHx","shX","ShX","sHX"};
+		File shxFile=findEnd(str,files,ends);
+		return shxFile;
+    }
+
+    public static File getPrjFile(File shpFile) {
+		String str = shpFile.getAbsolutePath();
+		File directory = shpFile.getParentFile();
+		File[] files = new File[0];
+		if (directory != null) {
+			MyFileFilter myFileFilter = new MyFileFilter(str);
+			files = directory.listFiles(myFileFilter);
+		}
+		String[] ends = new String[] { "prj", "PRJ", "Prj", "pRj", "PRj",
+				"prJ", "PrJ", "pRJ" };
+		File shxFile = findEnd(str, files, ends);
+		return shxFile;
+	}
+
+    private static File findEnd(String str,File[] files, String[] ends) {
+    	for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[0])) {
+				return dbfFile;
+			}
+		}
+		for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[1])) {
+				return dbfFile;
+			}
+		}
+		for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[2])) {
+				return dbfFile;
+			}
+		}
+		for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[3])) {
+				return dbfFile;
+			}
+		}
+		for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[4])) {
+				return dbfFile;
+			}
+		}
+		for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[5])) {
+				return dbfFile;
+			}
+		}
+		for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[6])) {
+				return dbfFile;
+			}
+		}
+		for (int i=0;i<files.length;i++) {
+			File dbfFile=files[i];
+			if (dbfFile.getAbsolutePath().endsWith(ends[7])) {
+				return dbfFile;
+			}
+		}
+		return new File(removeExtension(str)+"."+ends[0]);
+    }
+    
+    private static String removeExtension(String fname){
+    	int i = fname.lastIndexOf(".");
+    	if (i<0){
+    		return fname;
+    	}
+    	return fname.substring(0,i);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHP.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile.java	(revision 42196)
@@ -0,0 +1,762 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.store.shp.SHPStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.PointGeometryType;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class SHPFile implements ISHPFile {
+
+    private static final Logger logger = LoggerFactory.getLogger(SHPFile.class);
+    private Envelope extent;
+    private int type;
+    private int subType;
+    private String srsParameters;
+
+    private FileInputStream fin;
+    private FileChannel channel;
+    private BigByteBuffer2 bb;
+    private FileInputStream finShx;
+    private FileChannel channelShx;
+    private BigByteBuffer2 bbShx;
+
+    private SHPStoreParameters params;
+
+    private int[] supportedGeometryTypes;
+    private final GeometryManager gManager = GeometryLocator
+        .getGeometryManager();
+
+    private GeometryType gtypeNull;
+    private PointGeometryType gtypePoint2D;
+    private GeometryType gtypeCurve2D;
+    private GeometryType gtypeSurface2D;
+    private GeometryType gtypeMultiPoint2D;
+
+    private boolean useNullGeometry = false;
+
+    public SHPFile(SHPStoreParameters params) {
+        this.params = params;
+        try {
+            gtypeNull = gManager.getGeometryType(TYPES.NULL, SUBTYPES.GEOM2D);
+            gtypePoint2D =
+                (PointGeometryType) gManager.getGeometryType(TYPES.POINT,
+                    SUBTYPES.GEOM2D);
+            gtypeCurve2D =
+                gManager.getGeometryType(TYPES.CURVE, SUBTYPES.GEOM2D);
+            gtypeSurface2D =
+                gManager.getGeometryType(TYPES.SURFACE, SUBTYPES.GEOM2D);
+            gtypeMultiPoint2D =
+                gManager.getGeometryType(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
+
+        } catch (GeometryTypeNotSupportedException e) {
+            throw new RuntimeException(
+                "Unable to get the 2D geometry types to use", e);
+        } catch (GeometryTypeNotValidException e) {
+            throw new RuntimeException(
+                "Unable to get the 2D geometry types to use", e);
+        }
+    }
+
+    public void setUseNullGeometry(boolean useNullGeometry) {
+        this.useNullGeometry = useNullGeometry;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.dal.Resource#doClose()
+     */
+    public void close() throws CloseException {
+        CloseException ret = null;
+
+        // FIXME: Arreglar esto para que se acumulen los errores
+        try {
+            channel.close();
+            channelShx.close();
+        } catch (IOException e) {
+            ret = new CloseException("SHPFile.close", e);
+        } finally {
+            try {
+                fin.close();
+                finShx.close();
+            } catch (IOException e1) {
+                ret = new CloseException("SHPFile.close", e1);
+            }
+        }
+
+        if (ret != null) {
+            throw ret;
+        }
+        bb = null;
+        bbShx = null;
+        fin = null;
+        finShx = null;
+        channel = null;
+        channelShx = null;
+        srsParameters = null;
+    }
+
+    public boolean isOpen() {
+        return this.fin != null;
+    }
+
+    public synchronized void open() throws DataException {
+        try {
+            fin = new FileInputStream(this.params.getSHPFile());
+        } catch (java.io.FileNotFoundException e) {
+            throw new FileNotFoundException(this.params.getSHPFileName());
+        }
+
+        // Open the file and then get a channel from the stream
+        channel = fin.getChannel();
+
+        // long size = channel.size();
+
+        // Get the file's size and then map it into memory
+        // bb = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+        try {
+            bb = new BigByteBuffer2(channel, FileChannel.MapMode.READ_ONLY);
+        } catch (IOException e) {
+            throw new ReadException(this.params.getSHPFileName(), e);
+
+        }
+        try {
+            finShx = new FileInputStream(this.params.getSHXFile());
+        } catch (java.io.FileNotFoundException e) {
+            throw new FileNotFoundException(this.params.getSHXFileName());
+        }
+
+        // Open the file and then get a channel from the stream
+        channelShx = finShx.getChannel();
+
+        // long sizeShx = channelShx.size();
+
+        // Get the file's size and then map it into memory
+        // bb = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
+        // bbShx = channelShx.map(FileChannel.MapMode.READ_ONLY, 0, sizeShx);
+        try {
+            bbShx =
+                new BigByteBuffer2(channelShx, FileChannel.MapMode.READ_ONLY);
+        } catch (IOException e) {
+            throw new ReadException(this.params.getSHXFileName(), e);
+
+        }
+        bbShx.order(ByteOrder.BIG_ENDIAN);
+
+        // create a new header.
+        ShapeFileHeader2 myHeader = new ShapeFileHeader2();
+
+        bb.position(0);
+
+        // read the header
+        myHeader.readHeader(bb);
+
+        double[] min = new double[2];
+        min[0] = myHeader.myXmin;
+        min[1] = myHeader.myYmin;
+        double[] max = new double[2];
+        max[0] = myHeader.myXmax;
+        max[1] = myHeader.myYmax;
+
+        try {
+            extent =
+                gManager.createEnvelope(min[0], min[1], max[0], max[1],
+                    SUBTYPES.GEOM2D);
+        } catch (CreateEnvelopeException e1) {
+            logger.error("Error creating the envelope", e1);
+        }
+        // extent = new Rectangle2D.Double(myHeader.myXmin, myHeader.myYmin,
+        // myHeader.myXmax - myHeader.myXmin,
+        // myHeader.myYmax - myHeader.myYmin);
+
+        type = myHeader.myShapeType;
+        subType = getGeometrySubType();
+
+        this.initSupportedGeometryTypes();
+
+        double x = myHeader.myXmin;
+        double y = myHeader.myYmin;
+        double w = myHeader.myXmax - myHeader.myXmin;
+        double h = myHeader.myYmax - myHeader.myYmin;
+
+        if (w == 0) {
+            x -= 0.1;
+            w = 0.2;
+        }
+
+        if (h == 0) {
+            y -= 0.1;
+            h = 0.2;
+        }
+
+        // TODO: SRS
+        File prjFile = SHP.getPrjFile(this.params.getSHPFile());
+        if (prjFile.exists()) {
+            BufferedReader input = null;
+            try {
+                input = new BufferedReader(new FileReader(prjFile));
+            } catch (java.io.FileNotFoundException e) {
+                throw new FileNotFoundException(prjFile.getAbsolutePath());
+            }
+
+            try {
+                this.srsParameters = input.readLine();
+            } catch (IOException e) {
+                throw new ReadException("SHPFile.open prj", e);
+            } finally {
+                try {
+                    input.close();
+                } catch (IOException e) {
+                    // TODO ???
+                }
+            }
+
+        } else {
+            this.srsParameters = null;
+        }
+    }
+
+    public Envelope getFullExtent() throws ReadException {
+        return this.extent;
+    }
+
+    public boolean isEditable() {
+        return this.params.getDBFFile().canWrite()
+            && this.params.getSHPFile().canWrite()
+            && this.params.getSHXFile().canWrite();
+    }
+
+    public int getGeometryType() throws ReadException {
+        int auxType = 0;
+
+        switch (type) {
+        case (SHP.POINT2D):
+        case (SHP.POINT3D):
+            auxType = auxType | Geometry.TYPES.POINT;
+
+            break;
+
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYLINE3D):
+            auxType = auxType | Geometry.TYPES.MULTICURVE;
+
+            break;
+
+        case (SHP.POLYGON2D):
+        case (SHP.POLYGON3D):
+            auxType = auxType | Geometry.TYPES.MULTISURFACE;
+
+            break;
+        case (SHP.MULTIPOINT2D):
+        case (SHP.MULTIPOINT3D):
+            auxType = auxType | Geometry.TYPES.MULTIPOINT;
+
+            break;
+        }
+
+        return auxType;
+    }
+
+    public int getGeometrySubType() throws ReadException {
+        switch (type) {
+        case (SHP.POINT2D):
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYGON2D):
+        case (SHP.MULTIPOINT2D):
+            return SUBTYPES.GEOM2D;
+        case (SHP.POINT3D):
+        case (SHP.POLYLINE3D):
+        case (SHP.POLYGON3D):
+        case (SHP.MULTIPOINT3D):
+            return SUBTYPES.GEOM3D;
+        case (SHP.POINTM):
+        case (SHP.POLYLINEM):
+        case (SHP.POLYGONM):
+        case (SHP.MULTIPOINTM):
+            return SUBTYPES.GEOM2DM;
+        }
+
+        return SUBTYPES.UNKNOWN;
+    }
+
+    private Geometry getNullGeometry() throws CreateGeometryException {
+        if( this.useNullGeometry ) {
+            return gtypeNull.create();
+        }
+        return null;
+    }
+
+    /**
+     * Gets the geometry with the index provided.
+     * Set to synchronized to prevent concurrent threads issue (?)
+     *
+     * @param position
+     * @return
+     * @throws ReadException
+     * @throws CreateGeometryException
+     */
+    public synchronized Geometry getGeometry(long position)
+        throws ReadException, CreateGeometryException {
+
+        int shapeType;
+        bb.position(getPositionForRecord(position));
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+        shapeType = bb.getInt();
+
+        // el shape tal con tema tal y n�mro tal es null
+        if (shapeType == SHP.NULL) {
+            return getNullGeometry();
+        }
+
+        /*
+         * Inconsistency: this particular shape is not
+         * of the expected type. This can be because the SHP file
+         * is corrupt and it can cause "out of memory error"
+         * because the code will possibly try to instantiate a
+         * huge (absurd) array, so it's safer to return a null geometry
+         */
+        if (shapeType != type) {
+            return getNullGeometry();
+        }
+
+        // retrieve that shape.
+        // tempRecord.setShape(readShape(tempShapeType, tempContentLength, in));
+        switch (type) {
+        case (SHP.POINT2D):
+        case (SHP.POINT3D):
+        case (SHP.POINTM):
+            Point point = readPoint(bb);
+            fillPoint(point);
+            return point;
+
+        case (SHP.POLYLINE2D):
+            Curve curve = (Curve) gtypeCurve2D.create();
+            fillCurve(curve);
+            if( curve.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return curve;
+
+        case (SHP.POLYGON2D):
+            Surface surface = (Surface) gtypeSurface2D.create();
+            fillSurface(surface);
+            if( surface.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return surface;
+
+        case (SHP.POLYLINE3D):
+            Curve curve3D =
+                (Curve) gManager.create(TYPES.CURVE, SUBTYPES.GEOM3D);
+            fillCurve(curve3D);
+            fillZ(curve3D);
+            if( curve3D.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return curve3D;
+
+        case (SHP.POLYGON3D):
+            Surface surface3D =
+                (Surface) gManager.create(TYPES.SURFACE, SUBTYPES.GEOM3D);
+            fillSurface(surface3D);
+            fillZ(surface3D);
+            if( surface3D.getNumVertices()==0 ) {
+                return getNullGeometry();
+            }
+            return surface3D;
+
+        case (SHP.MULTIPOINT2D):
+
+            Point p = null;
+            int numPoints;
+            int i;
+            int j;
+            bb.position(bb.position() + 32);
+            numPoints = bb.getInt();
+
+            Point[] points = new Point[numPoints];
+
+            for (i = 0; i < numPoints; i++) {
+                points[i] =
+                    (Point) gManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+                points[i].setX(bb.getDouble());
+                points[i].setY(bb.getDouble());
+            }
+
+            MultiPoint multipoint = (MultiPoint) gtypeMultiPoint2D.create();
+            // MultiPoint multipoint =
+            // (MultiPoint)GeometryLocator.getGeometryManager().create(TYPES.MULTIPOINT,
+            // SUBTYPES.GEOM2D);
+            for (int k = 0; k < points.length; k++) {
+                multipoint.addPoint(points[k]);
+            }
+
+            if( multipoint.getPrimitivesNumber()==0 ) {
+                return getNullGeometry();
+            }
+            return multipoint;
+
+        case (SHP.MULTIPOINT3D):
+            bb.position(bb.position() + 32);
+            numPoints = bb.getInt();
+
+            double[] temX = new double[numPoints];
+            double[] temY = new double[numPoints];
+            double[] temZ = new double[numPoints];
+
+            for (i = 0; i < numPoints; i++) {
+                temX[i] = bb.getDouble();
+                temY[i] = bb.getDouble();
+                // temZ[i] = bb.getDouble();
+            }
+
+            for (i = 0; i < numPoints; i++) {
+                temZ[i] = bb.getDouble();
+            }
+
+            MultiPoint multipoint3D =
+                (MultiPoint) gManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM3D);
+            for (int k = 0; k < temX.length; k++) {
+                Point pointAux =
+                    (Point) gManager.create(TYPES.POINT, SUBTYPES.GEOM3D);
+                pointAux.setX(temX[k]);
+                pointAux.setY(temY[k]);
+                pointAux.setCoordinateAt(2, temZ[k]);
+                multipoint3D.addPoint(pointAux);
+            }
+            if( multipoint3D.getPrimitivesNumber()==0 ) {
+                return getNullGeometry();
+            }
+            return multipoint3D;
+        }
+
+        return null;
+    }
+
+    private void fillPoint(Point point) throws ReadException {
+        if (subType == Geometry.SUBTYPES.GEOM3D) {
+            point.setCoordinateAt(Geometry.DIMENSIONS.Z, bb.getDouble());
+        } else
+            if (subType == Geometry.SUBTYPES.GEOM2DM) {
+                point.setCoordinateAt(2, bb.getDouble());
+            }
+    }
+
+    private void fillCurve(Curve curve)
+        throws CreateGeometryException, ReadException {
+        Point p = null;
+        int numParts;
+        int numPoints;
+        int i;
+        int j;
+
+        bb.position(bb.position() + 32);
+        numParts = bb.getInt();
+        numPoints = bb.getInt();
+
+        int[] tempParts = new int[numParts];
+
+        for (i = 0; i < numParts; i++) {
+            tempParts[i] = bb.getInt();
+        }
+
+        j = 0;
+
+        for (i = 0; i < numPoints; i++) {
+            p = readPoint(bb);
+
+            if (i == tempParts[j]) {
+                curve.addMoveToVertex(p);
+
+                if (j < (numParts - 1)) {
+                    j++;
+                }
+            } else {
+                curve.addVertex(p);
+            }
+        }
+    }
+
+    private void fillSurface(Surface surface)
+        throws CreateGeometryException, ReadException {
+        Point p = null;
+        int numParts;
+        int numPoints;
+        int i;
+        int partIndex;
+
+        bb.position(bb.position() + 32);
+        numParts = bb.getInt();
+        numPoints = bb.getInt();
+
+        int[] tempParts = new int[numParts];
+
+        for (i = 0; i < numParts; i++) {
+            tempParts[i] = bb.getInt();
+        }
+
+        partIndex = 0;
+
+        for (i = 0; i < numPoints; i++) {
+            p = readPoint(bb);
+
+            if (i == tempParts[partIndex]) {
+                surface.addMoveToVertex(p);
+                if (partIndex < (numParts - 1)) {
+                    partIndex++;
+                }
+            } else {
+                if ((i == tempParts[partIndex] - 1) || (i == numPoints - 1)) {
+                    surface.closePrimitive();
+                } else {
+                    surface.addVertex(p);
+                }
+            }
+        }
+    }
+
+    private void fillZ(OrientablePrimitive orientablePrimitive)
+        throws CreateGeometryException, ReadException {
+        double[] boxZ = new double[2];
+        boxZ[0] = bb.getDouble();
+        boxZ[1] = bb.getDouble();
+
+        for (int i = 0; i < orientablePrimitive.getNumVertices(); i++) {
+            orientablePrimitive.setCoordinateAt(i, 2, bb.getDouble());
+        }
+    }
+
+    private long getPositionForRecord(long numRec) {
+        // shx file has a 100 bytes header, then, records
+        // 8 bytes length, one for each entity.
+        // first 4 bytes are the offset
+        // next 4 bytes are length
+
+        int posIndex = 100 + ((int) numRec * 8);
+        // bbShx.position(posIndex);
+        long pos = 8 + 2 * bbShx.getInt(posIndex);
+
+        return pos;
+    }
+
+    /**
+     * Reads the Point from the shape file.
+     *
+     * @param in
+     *            ByteBuffer.
+     *
+     * @return Point2D.
+     * @throws ReadException
+     * @throws CreateGeometryException
+     */
+    private Point readPoint(BigByteBuffer2 in)
+        throws CreateGeometryException, ReadException {
+        // bytes 1 to 4 are the type and have already been read.
+        // bytes 4 to 12 are the X coordinate
+        in.order(ByteOrder.LITTLE_ENDIAN);
+
+        return Geometry.SUBTYPES.GEOM2D == subType ? gtypePoint2D.createPoint(
+            in.getDouble(), in.getDouble()) : gManager.createPoint(
+            in.getDouble(),
+            in.getDouble(), subType);
+    }
+
+    /**
+     * Lee un rect�ngulo del fichero.
+     *
+     * @param in
+     *            ByteBuffer.
+     *
+     * @return Rect�ngulo.
+     * @throws CreateEnvelopeException
+     *
+     * @throws IOException
+     */
+    private Envelope readRectangle(BigByteBuffer2 in)
+        throws CreateEnvelopeException {
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        double x = in.getDouble();
+        double y = in.getDouble();
+
+        double x2 = in.getDouble();
+
+        if (x2 - x == 0) {
+            x2 += 0.2;
+            x -= 0.1;
+        }
+
+        double y2 = in.getDouble();
+
+        if (y2 - y == 0) {
+            y2 += 0.2;
+            y -= 0.1;
+        }
+        Envelope tempEnvelope =
+            gManager.createEnvelope(x, y, x2, y2, SUBTYPES.GEOM2D);
+        return tempEnvelope;
+    }
+
+    /**
+     * Gets the geometry bbox with the index provided.
+     * Set to synchronized to prevent concurrent threads issue (?)
+     *
+     * @param featureIndex
+     * @return
+     * @throws ReadException
+     * @throws CreateEnvelopeException
+     * @throws CreateGeometryException
+     */
+    public synchronized Envelope getBoundingBox(long featureIndex)
+        throws ReadException, CreateEnvelopeException, CreateGeometryException {
+        Point p = null;
+        Envelope BoundingBox = null;
+        try {
+            bb.position(getPositionForRecord(featureIndex));
+        } catch (Exception e) {
+            throw new ReadException("getBondingBox (" + featureIndex + ")", e);
+            // logger.error(" Shapefile is corrupted. Drawing aborted. ="+e+
+            // "  "+"index = "+index);
+        }
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+
+        int tipoShape = bb.getInt();
+
+        // AZABALA: si tipoShape viene con valores erroneos deja de funcionar
+        // el metodo getShape(i)
+        // if (tipoShape != SHP.NULL) {
+        // type = tipoShape;
+
+        // }
+
+        // retrieve that shape.
+        // tempRecord.setShape(readShape(tempShapeType, tempContentLength, in));
+        switch (tipoShape) {
+        case (SHP.POINT2D):
+        case (SHP.POINT3D):
+            p = readPoint(bb);
+            BoundingBox =
+                gManager.createEnvelope(p.getX() - 0.1, p.getY() - 0.1,
+                    p.getX() + 0.2, p.getY() + 0.2, SUBTYPES.GEOM2D);
+            // new Rectangle2D.Double(p.getX() - 0.1,
+            // p.getY() - 0.1, 0.2, 0.2);
+
+            break;
+
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYGON2D):
+        case (SHP.MULTIPOINT2D):
+        case (SHP.POLYLINE3D):
+        case (SHP.POLYGON3D):
+        case (SHP.MULTIPOINT3D):
+
+            // BoundingBox
+            BoundingBox = readRectangle(bb);
+
+            break;
+        }
+
+        return BoundingBox;
+    }
+
+    /**
+     * @return
+     */
+    public String getSRSParameters() {
+        return this.srsParameters;
+    }
+
+    private void initSupportedGeometryTypes() throws ReadException {
+        switch (this.getGeometryType()) {
+        case Geometry.TYPES.POINT:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.POINT, Geometry.TYPES.NULL };
+            break;
+        case Geometry.TYPES.MULTIPOINT:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.MULTIPOINT, Geometry.TYPES.NULL };
+            break;
+        case Geometry.TYPES.MULTICURVE:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.CURVE, Geometry.TYPES.ELLIPSE,
+                    Geometry.TYPES.ARC, Geometry.TYPES.CIRCLE,
+                    Geometry.TYPES.SURFACE, Geometry.TYPES.NULL,
+                    Geometry.TYPES.MULTICURVE };
+            break;
+        case Geometry.TYPES.MULTISURFACE:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.ELLIPSE, Geometry.TYPES.CIRCLE,
+                    Geometry.TYPES.SURFACE, Geometry.TYPES.NULL,
+                    Geometry.TYPES.MULTISURFACE };
+            break;
+
+        default:
+            supportedGeometryTypes = new int[] {};
+        }
+    }
+
+    public boolean canWriteGeometry(int gvSIGgeometryType) {
+        for (int i = 0; i < supportedGeometryTypes.length; i++) {
+            if (gvSIGgeometryType == supportedGeometryTypes[i]) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPFile.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/MyFileFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/MyFileFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/MyFileFilter.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.io.File;
+import java.io.FileFilter;
+
+public class MyFileFilter implements FileFilter {
+	private String shpPath;
+	public MyFileFilter(String shpPath){
+		this.shpPath=shpPath;
+	}
+	public boolean accept(File pathname) {
+		String strend=pathname.getAbsolutePath();
+		strend=strend.substring(0,strend.length()-3);
+		String strshp=shpPath.substring(0, shpPath.length() - 3);
+		if (strend.equals(strshp)) {
+			return true;
+		}
+		return false;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/MyFileFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPShape.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPShape.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPShape.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+
+import org.gvsig.fmap.geom.Geometry;
+
+/**
+ * Interfaz de todos los tipos de formato shape.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface SHPShape {
+	/**
+	 * Devuelve el tipo de shape de que se trata.
+	 *
+	 * @return Tipo de shape.
+	 */
+	public int getShapeType();
+
+	/**
+	 * Lee del buffer el shape y crea una nueva geometr�a.
+	 *
+	 * @param buffer Buffer de donde se lee.
+	 * @param type Tipo de shape en concreto.
+	 *
+	 * @return Nueva geometr�a.
+	 */
+	public Geometry read(MappedByteBuffer buffer, int type);
+
+	/**
+	 * Escribe en el buffer la geometr�a que se pasa como par�metro.
+	 *
+	 * @param buffer Buffer donde escribir.
+	 * @param geometry Geometr�a a escribir.
+	 */
+	public void write(ByteBuffer buffer, Geometry geometry);
+
+	/**
+	 * Devuelve el tama�o de la geometr�a.
+	 *
+	 * @param fgeometry Geometr�a a medir.
+	 *
+	 * @return Tama�o de la geometr�a.
+	 */
+	public int getLength(Geometry fgeometry);
+
+	/**
+	 * Obtiene los puntos y partes del GeneralPathXIterator del shape.
+	 *
+	 * @param iter
+	 */
+	public void obtainsPoints(Geometry g);
+
+//	public void setFlatness(double flatness);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/SHPShape.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/ShapeFileHeader2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/ShapeFileHeader2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/ShapeFileHeader2.java	(revision 42196)
@@ -0,0 +1,308 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+
+
+/*
+ *    GISToolkit - Geographical Information System Toolkit
+ *    (C) 2002, Ithaqua Enterprises Inc.
+ *
+ *    This library is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU Lesser General Public
+ *    License as published by the Free Software Foundation;
+ *    version 2.1 of the License.
+ *
+ *    This library is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *    Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public
+ *    License along with this library; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+package org.gvsig.fmap.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+
+
+/**
+ * Class to represent the header in the shape file.
+ */
+public class ShapeFileHeader2 {
+    /**
+     * Shape Type Value Shape Type 0 Null Shape 1 Point 3 PolyLine 5 Polygon 8
+     * MultiPoint 11 PointZ 13 PolyLineZ 15 PolygonZ 18 MultiPointZ 21 PointM
+     * 23 PolyLineM 25 PolygonM 28 MultiPointM 31 MultiPatch
+     */
+
+    /* The null shape type, there is no shape for this record. */
+    public static final int SHAPE_NULL = 0;
+    public static final int SHAPE_POINT = 1;
+    public static final int SHAPE_POLYLINE = 3;
+    public static final int SHAPE_POLYGON = 5;
+    public static final int SHAPE_MULTIPOINT = 8;
+    public static final int SHAPE_POINTZ = 11;
+    public static final int SHAPE_POLYLINEZ = 13;
+    public static final int SHAPE_POLYGONZ = 15;
+    public static final int SHAPE_MULTIPOINTZ = 18;
+    public static final int SHAPE_POINTM = 21;
+    public static final int SHAPE_POLYLINEM = 23;
+    public static final int SHAPE_POLYGONM = 25;
+    public static final int SHAPE_MULTIPOINTM = 28;
+    public static final int SHAPE_MULTIPATCH = 31;
+
+    /** File Code, must be the value 9994 */
+    public int myFileCode = 9994;
+
+    /** Unused 1; */
+    public int myUnused1 = 0;
+
+    /** Unused 2; */
+    public int myUnused2 = 0;
+
+    /** Unused 3; */
+    public int myUnused3 = 0;
+
+    /** Unused 4; */
+    public int myUnused4 = 0;
+
+    /** Unused 5; */
+    public int myUnused5 = 0;
+
+    /** File Length; */
+    public int myFileLength = 0;
+
+    /** Version of the file. */
+    public int myVersion = 1000;
+    public int myShapeType = 0;
+
+    /** BoundingBox Xmin */
+    public double myXmin = 0;
+
+    /** BoundingBox Ymin */
+    public double myYmin = 0;
+
+    /** BoundingBox Xmax */
+    public double myXmax = 0;
+
+    /** BoundingBox Ymax */
+    public double myYmax = 0;
+
+    /** BoundingBox Zmin */
+    public double myZmin = 0;
+
+    /** BoundingBox Zmax */
+    public double myZmax = 0;
+
+    /** BoundingBox Zmin */
+    public double myMmin = 0;
+
+    /** BoundingBox Zmax */
+    public double myMmax = 0;
+
+    // notify about warnings.
+    private boolean myWarning = true;
+
+    /**
+     * ShapeFileHeader constructor comment.
+     */
+    public ShapeFileHeader2() {
+        super();
+    }
+
+    /**
+     * Return the file code.
+     *
+     * @return Entero.
+     */
+    public int getFileCode() {
+        return myFileCode;
+    }
+
+    /**
+     * Return the version of the file.
+     *
+     * @return Versi�n.
+     */
+    public int getVersion() {
+        return myVersion;
+    }
+
+    /**
+     * Get the extents of the shape file.
+     *
+     * @return FullExtent.
+     */
+    public java.awt.geom.Rectangle2D.Double getFileExtents() {
+        return new java.awt.geom.Rectangle2D.Double(myXmin, myYmin,
+            myXmax - myXmin, myYmax - myYmin);
+    }
+
+    /**
+     * Print warnings to system.out.
+     *
+     * @param inWarning boolean.
+     */
+    public void setWarnings(boolean inWarning) {
+        myWarning = inWarning;
+    }
+
+    /**
+     * Return the length of the header in 16 bit words..
+     *
+     * @return Longitud de la cabecera.
+     */
+    public int getHeaderLength() {
+        return 50;
+    }
+
+    /**
+     * Return the number of 16 bit words in the shape file as recorded in the
+     * header
+     *
+     * @return Longitud del fichero.
+     */
+    public int getFileLength() {
+        return myFileLength;
+    }
+
+    /**
+     * Read the header from the shape file.
+     *
+     * @param in ByteBuffer.
+     */
+    public void readHeader(BigByteBuffer2 in) {
+        // the first four bytes are integers
+        // in.setLittleEndianMode(false);
+        in.order(ByteOrder.BIG_ENDIAN);
+        myFileCode = in.getInt();
+
+        if (myFileCode != 9994) {
+            warn("File Code = " + myFileCode + " Not equal to 9994");
+        }
+
+        // From 4 to 8 are unused.
+        myUnused1 = in.getInt();
+
+        // From 8 to 12 are unused.
+        myUnused2 = in.getInt();
+
+        // From 12 to 16 are unused.
+        myUnused3 = in.getInt();
+
+        // From 16 to 20 are unused.
+        myUnused4 = in.getInt();
+
+        // From 20 to 24 are unused.
+        myUnused5 = in.getInt();
+
+        // From 24 to 28 are the file length.
+        myFileLength = in.getInt();
+
+        // From 28 to 32 are the File Version.
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        myVersion = in.getInt();
+
+        // From 32 to 36 are the Shape Type.
+        myShapeType = in.getInt();
+
+        // From 36 to 44 are Xmin.
+        myXmin = in.getDouble(); // Double.longBitsToDouble(in.getLong());
+
+        // From 44 to 52 are Ymin.
+        myYmin = in.getDouble();
+
+        // From 52 to 60 are Xmax.
+        myXmax = in.getDouble();
+
+        // From 60 to 68 are Ymax.
+        myYmax = in.getDouble();
+
+        // From 68 to 76 are Zmin.
+        myZmin = in.getDouble();
+
+        // From 76 to 84 are Zmax.
+        myZmax = in.getDouble();
+
+        // From 84 to 92 are Mmin.
+        myMmin = in.getDouble();
+
+        // From 92 to 100 are Mmax.
+        myMmax = in.getDouble();
+
+        // that is all 100 bytes of the header.
+    }
+    public void write(ByteBuffer out,int type,
+  		  int numGeoms,int length,double minX,double minY,double maxX,double maxY,double minZ,double maxZ,double minM,double maxM){
+  		    out.order(ByteOrder.BIG_ENDIAN);
+
+  		    out.putInt(myFileCode);
+
+  		    for (int i = 0; i < 5; i++) {
+  		      out.putInt(0); //Skip unused part of header
+  		    }
+
+  		    out.putInt(length);
+
+  		    out.order(ByteOrder.LITTLE_ENDIAN);
+
+  		    out.putInt(myVersion);
+  		    out.putInt(type);
+
+  		    //write the bounding box
+  		    out.putDouble(minX);
+  		    out.putDouble(minY);
+  		    out.putDouble(maxX);
+  		    out.putDouble(maxY);
+  		    /*
+  		    out.putDouble(minZ);
+  		    out.putDouble(minZ);
+  		    out.putDouble(maxM);
+  		    out.putDouble(maxM);*/
+  		    out.order(ByteOrder.BIG_ENDIAN);
+  		    for (int i = 0; i < 8; i++) {
+  		      out.putInt(0); //Skip unused part of header
+  		    }
+
+  		  }
+
+    /**
+     * Muestra por consola los warning.
+     *
+     * @param inWarn warning.
+     */
+    private void warn(String inWarn) {
+        if (myWarning) {
+            System.out.print("WARNING: ");
+            System.out.println(inWarn);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/utils/ShapeFileHeader2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureProvider.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadRuntimeException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public class SHPFeatureProvider extends DefaultFeatureProvider {
+	protected SHPStoreProvider store;
+	protected boolean loading;
+	protected boolean loaded;
+
+
+	public SHPFeatureProvider(SHPStoreProvider store, FeatureType type) {
+		super(type);
+		this.store = store;
+		loading = false;
+		loaded = false;
+	}
+
+	protected void load() {
+		if (loading || loaded || this.isNew()) {
+			return;
+		}
+		loading = true;
+		try {
+			this.store.loadFeatureProviderByIndex(this);
+		} catch (DataException e) {
+			throw new ReadRuntimeException("DBFFeatureProvider.load", e);
+		} finally {
+			loading = false;
+			loaded = true;
+		}
+	}
+
+	public void set(int i, Object value) {
+		this.load();
+		super.set(i, value);
+	}
+
+	public void set(String name, Object value) {
+		this.load();
+		super.set(featureType.getIndex(name), value);
+	}
+
+	public Object get(int i) {
+		this.load();
+		return super.get(i);
+	}
+
+	public Object get(String name) {
+		this.load();
+		return super.get(name);
+	}
+
+	public Geometry getDefaultGeometry() {
+		this.load();
+		return this.defaultGeometry;
+	}
+
+	public Envelope getDefaultEnvelope() {
+		return this.envelope;
+	}
+
+	public void setOID(Object oid) {
+		this.loaded = false;
+		super.setOID(oid);
+	}
+
+	public FeatureProvider getCopy() {
+		this.load();
+		return super.getCopy();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFilesystemServerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFilesystemServerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFilesystemServerProvider.java	(revision 42196)
@@ -0,0 +1,374 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+import java.io.IOException;
+import javax.xml.datatype.DatatypeConfigurationException;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.CreateException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyChangesException;
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.resource.spi.MultiResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.AbsolutePathRequiredException;
+import org.gvsig.fmap.dal.store.dbf.DBFFilesystemServerProvider;
+import org.gvsig.tools.dataTypes.DataTypes;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class SHPFilesystemServerProvider extends DBFFilesystemServerProvider {
+
+	public boolean accept(File pathname) {
+		return pathname.getName().toLowerCase().endsWith(".shp");
+	}
+
+	public int getMode() {
+		return DataServerExplorer.MODE_GEOMETRY|DataServerExplorer.MODE_FEATURE;
+	}
+
+	public boolean canCreate() {
+		return true;
+	}
+
+	// private FileResource[] createResources(File[] files)
+	// throws InitializeException {
+	// FileResource[] result = new FileResource[files.length];
+	// for (int i = 0; i < files.length; i++) {
+	// result[i] = this.createResource(files[i]);
+	// }
+	//
+	// return result;
+	// }
+
+	private ResourceProvider createResource(File shpFile, File[] otherFiles)
+			throws InitializeException {
+
+		Object[] shpParams = new Object[] { shpFile.getAbsolutePath() };
+
+		MultiResource resource =
+				(MultiResource) serverExplorer.getServerExplorerProviderServices()
+						.createResource(MultiResource.TYPE_NAME, shpParams);
+
+		resource.addResource(FileResource.NAME, shpParams, true);
+
+		for (int i = 0; i < otherFiles.length; i++) {
+			resource.addResource(FileResource.NAME,
+					new Object[] { otherFiles[i].getAbsolutePath() }, false);
+		}
+
+		resource.addConsumer(this);
+		return resource;
+	}
+
+	// private FileResource createResource(File file) throws InitializeException
+	// {
+	// FileResource resource;
+	// resource =
+	// (FileResource) this.serverExplorer.getServerExplorerProviderServices()
+	// .createResource(FileResource.NAME,
+	// new Object[] { file.getAbsolutePath() });
+	// resource.addConsumer(this);
+	// return resource;
+	// }
+
+	public boolean canCreate(NewDataStoreParameters parameters) {
+		if (!super.canCreate(parameters)) {
+			return false;
+		}
+		SHPNewStoreParameters params = (SHPNewStoreParameters) parameters;
+		if (params.getSHPFile().getParentFile().canWrite()) {
+			return false;
+		}
+		if (params.getSHPFile().exists()) {
+			if (!params.getSHPFile().canWrite()) {
+				return false;
+			}
+		}
+		if (params.getSHXFile().getParentFile().canWrite()) {
+			return false;
+		}
+		if (params.getSHXFile().exists()) {
+			if (!params.getSHXFile().canWrite()) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	public boolean closeResourceRequested(ResourceProvider resource) {
+		// while it is using a resource anyone can't close it
+		return false;
+	}
+
+	public void create(NewDataStoreParameters parameters, boolean overwrite)
+			throws CreateException {
+
+		final SHPNewStoreParameters params = (SHPNewStoreParameters) parameters;
+                final EditableFeatureType fType  = params.getDefaultFeatureType();
+
+                // Parche para crear con el tama�o que tocan los campos del DBF
+                // Asumo que el dbfFtype se va a destruir tras crear el dbf.
+                final EditableFeatureType dbfFtype = fixFeatureType(fType);
+
+		SHPStoreProvider.removeGeometryColumn(dbfFtype);
+
+		EditableFeatureAttributeDescriptor efad = SHPStoreProvider.addGeometryColumn((EditableFeatureType) fType);
+//		efad.setGeometryType(params.getGeometryType());
+
+		File dbfFile = params.getDBFFile();
+		File shpFile = params.getSHPFile();
+		File shxFile = params.getSHXFile();
+
+		if (!shpFile.isAbsolute()) {
+			throw new AbsolutePathRequiredException(shpFile.getPath());
+		}
+
+		if (!dbfFile.isAbsolute()) {
+			throw new AbsolutePathRequiredException(dbfFile.getPath());
+		}
+
+		if (!shxFile.isAbsolute()) {
+			throw new AbsolutePathRequiredException(shxFile.getPath());
+		}
+
+		// File[] files = new File[] { shpFile, shxFile, dbfFile };
+		// TODO .prj file
+
+		// FileResource[] resources;
+		ResourceProvider resource;
+		try {
+			// resources =
+			resource = createResource(shpFile, new File[] { shxFile, dbfFile });
+			resource.closeRequest();
+			// closeResources(resources);
+		} catch (DataException e1) {
+			throw new CreateException(shpFile.getPath(), e1);
+		}
+
+		if (shpFile.exists()) {
+			if (overwrite) {
+				// FIXME
+				// if (!shpFile.delete()) {
+				// throw new CreateException(this.getDataStoreProviderName(),
+				// new IOException(
+				// "cannot delete file: " + shpFile.getPath()));
+				// }
+				// if (shxFile.exists()) {
+				// if (!shxFile.delete()) {
+				// throw new CreateException(this.getDataStoreProviderName(),
+				// new IOException("cannot delete file: "
+				// + shxFile.getPath()));
+				// }
+				//
+				// }
+			} else {
+				throw new CreateException(this.getDataStoreProviderName(),
+						new IOException("file already exist"));
+			}
+		}
+
+		try {
+
+//			beginResources(resources);
+
+			resource.execute(new ResourceAction() {
+				public Object run() throws Exception {
+					SHPFeatureWriter writer =
+							new SHPFeatureWriter(getDataStoreProviderName());
+
+					writer.begin(params, fType, dbfFtype, 0);
+
+					writer.end();
+					return null;
+				}
+			});
+
+//			notifyChangesResources(resources);
+			resource.notifyChanges();
+		} catch (Exception e) {
+			throw new CreateException(this.getDataStoreProviderName(), e);
+		} finally {
+			// endResources(resources);
+			// removeConsumer(resources);
+			resource.removeConsumer(this);
+		}
+	}
+
+	// private boolean closeResources(FileResource[] resources)
+	// throws ResourceException {
+	// for (int i = 0; i < resources.length; i++) {
+	// // TODO
+	// // if (!resources[i].closeRequest()){
+	// // return false;
+	// // }
+	// resources[i].closeRequest();
+	// }
+	// return true;
+	//
+	// }
+
+	private void removeConsumer(FileResource[] resources) {
+		for (int i = 0; i < resources.length; i++) {
+			resources[i].removeConsumer(this);
+		}
+	}
+
+	// private void endResources(FileResource[] resources) {
+	// for (int i = 0; i < resources.length; i++) {
+	// resources[i].end();
+	// }
+	// }
+
+	private void notifyChangesResources(FileResource[] resources)
+			throws ResourceNotifyChangesException {
+		for (int i = 0; i < resources.length; i++) {
+			resources[i].notifyChanges();
+		}
+
+	}
+
+	// private void beginResources(FileResource[] resources)
+	// throws ResourceExecuteException {
+	// for (int i = 0; i < resources.length; i++) {
+	// resources[i].begin();
+	// }
+	//
+	// }
+
+	public NewDataStoreParameters getCreateParameters() {
+		SHPNewStoreParameters params =
+				(SHPNewStoreParameters) super.getCreateParameters();
+
+		EditableFeatureType fType =
+				(EditableFeatureType) params.getDefaultFeatureType();
+		// SHPStoreProvider.addGeometryColumn(fType);
+		// params.setDefaultFeatureType(fType);
+		return params;
+	}
+
+	protected NewDataStoreParameters createInstanceNewDataStoreParameters() {
+		return new SHPNewStoreParameters();
+	}
+
+	public String getDataStoreProviderName() {
+		return SHPStoreProvider.NAME;
+	}
+
+	public String getDescription() {
+		return SHPStoreProvider.DESCRIPTION;
+	}
+
+	public DataStoreParameters getParameters(File file) throws DataException {
+		DataManager manager = DALLocator.getDataManager();
+		SHPStoreParameters params =
+				(SHPStoreParameters) manager.createStoreParameters(this.getDataStoreProviderName());
+		params.setSHPFile(file.getPath());
+		return params;
+
+	}
+
+	public void remove(DataStoreParameters parameters) throws RemoveException {
+		SHPStoreParameters params = (SHPStoreParameters) parameters;
+
+		final File dbfFile = params.getDBFFile();
+		final File shpFile = params.getSHPFile();
+		final File shxFile = params.getSHXFile();
+		// TODO .prj file
+
+		// File[] files = new File[] { shpFile, shxFile, dbfFile };
+		//
+		// FileResource[] resources;
+
+		File[] otherFiles = new File[] { shxFile, dbfFile };
+		final ResourceProvider resource;
+		try {
+			// resources = this.createResources(files);
+			resource = createResource(shpFile, otherFiles);
+			resource.closeRequest();
+			resource.closeRequest();
+			// closeResources(resources);
+		} catch (DataException e1) {
+			throw new RemoveException(shpFile.getPath(), e1);
+		}
+
+		try {
+//			beginResources(resources);
+			resource.execute(new ResourceAction() {
+				public Object run() throws Exception {
+					deleteFile(shpFile);
+					deleteFile(dbfFile);
+					deleteFile(shxFile);
+					resource.notifyChanges();
+					return null;
+				}
+			});
+			// for (int i = 0; i < files.length; i++) {
+			// if (!files[i].exists()) {
+			// continue;
+			// }
+			// if (!files[i].delete()) {
+			// throw new RemoveException(this.getDataStoreProviderName(),
+			// new IOException()); // FIXME Exception
+			// }
+			// }
+
+			// notifyChangesResources(resources);
+		} catch (Exception e) {
+			throw new RemoveException(this.getDataStoreProviderName(), e);
+		} finally {
+//			endResources(resources);
+//			removeConsumer(resources);
+			resource.removeConsumer(this);
+		}
+	}
+
+	private void deleteFile(File file) throws RemoveException {
+		if (file.exists() && !file.delete()) {
+			throw new RemoveException(this.getDataStoreProviderName(),
+					new IOException()); // FIXME Exception
+		}
+	}
+
+	public String getResourceRootPathName(DataStore dataStore) {
+		SHPStoreParameters shpParams = (SHPStoreParameters) dataStore.getParameters();
+		return removeFileExtension(shpParams.getSHPFile());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFilesystemServerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProvider.java	(revision 42196)
@@ -0,0 +1,623 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyChangesException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyCloseException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyOpenException;
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.resource.spi.MultiResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreProvider;
+import org.gvsig.fmap.dal.store.shp.utils.ISHPFile;
+import org.gvsig.fmap.dal.store.shp.utils.SHPFile2;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.exception.BaseException;
+
+public class SHPStoreProvider extends DBFStoreProvider {
+
+    private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private static final Logger logger = LoggerFactory.getLogger(GeometryManager.class);
+    public static String NAME = "Shape";
+    public static String DESCRIPTION = "Shape file";
+    private ISHPFile shpFile;
+
+    private MultiResource resource;
+
+    protected static final String GEOMETRY_ATTIBUTE_NAME = "GEOMETRY";
+
+    public static final String METADATA_DEFINITION_NAME = NAME;
+
+    private SHPFeatureWriter writer = null;
+
+    public SHPStoreProvider(SHPStoreParameters params,
+            DataStoreProviderServices storeServices)
+            throws InitializeException {
+        super(
+                params,
+                storeServices,
+                FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
+        );
+    }
+
+    protected void init(DBFStoreParameters params,
+            DataStoreProviderServices storeServices) throws InitializeException {
+
+        this.shpFile = new SHPFile2((SHPStoreParameters) params);
+        super.init(params, storeServices);
+        this.shpFile.setUseNullGeometry(this.getShpParameters().getUseNullGeometry());
+    }
+
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if (DataStore.METADATA_CRS.equalsIgnoreCase(name)) {
+
+            /*
+             * String srs =  this.shpFile.getSRSParameters();
+             if (srs != null){
+             // This can be non null but not sure how to handle
+             }
+             */
+            return this.getShpParameters().getCRS();
+
+        } else if (DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name)) {
+            try {
+                return this.shpFile.getFullExtent();
+            } catch (ReadException e) {
+                return null;
+            }
+        }
+        return super.getDynValue(name);
+    }
+
+    protected void initResource(DBFStoreParameters params,
+            DataStoreProviderServices storeServices) throws InitializeException {
+
+        SHPStoreParameters shpParams = (SHPStoreParameters) params;
+        resource
+                = (MultiResource) createResource(MultiResource.TYPE_NAME,
+                        new Object[]{shpParams.getSHPFileName()});
+
+        resource.addResource(FileResource.NAME,
+                new Object[]{shpParams.getSHPFileName()}, true);
+        resource.addResource(FileResource.NAME,
+                new Object[]{shpParams.getSHXFileName()}, true);
+        resource.addResource(FileResource.NAME,
+                new Object[]{shpParams.getDBFFileName()}, true);
+
+        resource.addConsumer(this);
+    }
+
+    ;
+
+	public ResourceProvider getResource() {
+        return resource;
+    }
+
+    /**
+     *
+     * @throws ResourceNotifyChangesException
+     */
+    protected void resourcesNotifyChanges()
+            throws ResourceNotifyChangesException {
+		// super.resourcesNotifyChanges();
+        // this.shpResource.notifyChanges();
+        // this.shxResource.notifyChanges();
+        getResource().notifyChanges();
+        // TODO .prj
+
+    }
+
+    /**
+     * @throws ResourceNotifyCloseException
+     *
+     */
+    protected void resourcesNotifyClose() throws ResourceNotifyCloseException {
+//		super.resourcesNotifyClose();
+//		this.shpResource.notifyClose();
+//		this.shxResource.notifyClose();
+        getResource().notifyClose();
+        // TODO .prj
+
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        getResource().removeConsumer(this);
+        this.writer = null;
+        this.shpFile = null;
+    }
+
+    protected void disposeResource() {
+        getResource().removeConsumer(this);
+    }
+
+    /**
+     * @throws ResourceNotifyOpenException
+     *
+     */
+    protected void resourcesOpen() throws ResourceNotifyOpenException {
+		// super.resourcesOpen();
+        // this.shpResource.notifyOpen();
+        // this.shxResource.notifyOpen();
+        getResource().notifyOpen();
+    }
+
+    protected static EditableFeatureAttributeDescriptor addGeometryColumn(
+            EditableFeatureType fType) {
+
+        EditableFeatureAttributeDescriptor attrTmp = null;
+        EditableFeatureAttributeDescriptor attr = null;
+        Iterator iter = fType.iterator();
+        while (iter.hasNext()) {
+            attrTmp = (EditableFeatureAttributeDescriptor) iter.next();
+            if (attrTmp.getType() == DataTypes.GEOMETRY) {
+                if (attr != null) {
+                    // Two geom fields not allowed
+                    fType.remove(attrTmp.getName());
+                } else {
+                    attr = attrTmp;
+                    // attr.setName(GEOMETRY_ATTIBUTE_NAME);
+                }
+            }
+        }
+
+        if (attr == null) {
+            String geofield = createGeometryFieldName(fType);
+            attr = fType.add(geofield, DataTypes.GEOMETRY);
+            attr.setDefaultValue(null);
+        }
+
+        attr.setObjectClass(Geometry.class);
+        fType.setDefaultGeometryAttributeName(attr.getName());
+        return attr;
+
+    }
+
+    private static String createGeometryFieldName(FeatureType ft) {
+
+        if (ft.getAttributeDescriptor(GEOMETRY_ATTIBUTE_NAME) == null) {
+            return GEOMETRY_ATTIBUTE_NAME;
+        }
+
+        int i = 0;
+        String candidate = GEOMETRY_ATTIBUTE_NAME + i;
+        while (ft.getAttributeDescriptor(candidate) != null) {
+            i++;
+            candidate = GEOMETRY_ATTIBUTE_NAME + i;
+        }
+        return candidate;
+    }
+
+    protected static FeatureType removeGeometryColumn(
+            EditableFeatureType fType) {
+        Iterator iter = fType.iterator();
+        FeatureAttributeDescriptor attr;
+        while (iter.hasNext()) {
+            attr = (FeatureAttributeDescriptor) iter.next();
+            if (attr.getType() == DataTypes.GEOMETRY) {
+                iter.remove();
+            }
+        }
+        fType.setDefaultGeometryAttributeName(null);
+        return fType.getNotEditableCopy();
+    }
+
+    protected EditableFeatureType getTheFeatureType()
+            throws InitializeException, OpenException {
+        final EditableFeatureType fType = super.getTheFeatureType();
+        this.open();
+		// try {
+        // this.resourcesBegin();
+        // } catch (DataException e) {
+        // throw new InitializeException(this.getName(), e);
+        // }
+        try {
+            getResource().execute(new ResourceAction() {
+                public Object run() throws Exception {
+                    EditableFeatureAttributeDescriptor attr
+                            = addGeometryColumn(fType);
+                    attr.setGeometryType(shpFile.getGeometryType());
+                    attr.setGeometrySubType(shpFile.getGeometrySubType());
+
+                    IProjection srs = getShpParameters().getCRS();
+                    attr.setSRS(srs);
+
+                    return null;
+                }
+            });
+            return fType;
+        } catch (ResourceExecuteException e) {
+            throw new InitializeException(e);
+			// } finally {
+            // this.resourcesEnd();
+        }
+    }
+
+//	private String getSRSFromPrj(String srsParameters) {
+//		// TODO identificar que SRS hay que usar, ya sea
+//		// el que se recibe de los parametros o el que
+//		// conicida con el que se ha encontrado en el
+//		// prg... y si ninguna de las dos que?
+//		return null;
+//	}
+    protected SHPStoreParameters getShpParameters() {
+        return (SHPStoreParameters) getParameters();
+    }
+
+    public String getProviderName() {
+        return NAME;
+    }
+
+    public boolean allowWrite() {
+        return this.shpFile.isEditable();
+    }
+
+    /**
+     *
+     * @param index
+     * @param featureType
+     * @return
+     * @throws ReadException
+     */
+    protected FeatureProvider getFeatureProviderByIndex(long index,
+            FeatureType featureType) throws DataException {
+		// this.open();
+        // this.resourcesBegin();
+        try {
+
+            FeatureProvider featureProvider = super.getFeatureProviderByIndex(index,
+                    featureType);
+            featureProvider.setDefaultEnvelope(this.shpFile.getBoundingBox(index));
+            return featureProvider;
+        } catch (DataException e) {
+            throw e;
+        } catch (CreateEnvelopeException e) {
+            throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(e);
+        } catch (CreateGeometryException e) {
+            throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(e);
+        }
+
+    }
+
+    protected void initFeatureProviderByIndex(FeatureProvider featureProvider,
+            long index, FeatureType featureType) throws DataException {
+		// this.open();
+        // this.resourcesBegin();
+        try {
+            super.initFeatureProviderByIndex(featureProvider, index, featureType);
+            featureProvider.setDefaultEnvelope(this.shpFile.getBoundingBox(index));
+        } catch (CreateEnvelopeException e) {
+            throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(e);
+        } catch (CreateGeometryException e) {
+            throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(e);
+        }
+    }
+
+    /**
+     *
+     * @param featureProvider
+     * @throws DataException
+     */
+    protected void loadFeatureProviderByIndex(FeatureProvider featureProvider)
+            throws DataException {
+
+        FeatureType featureType = featureProvider.getType();
+        long index = ((Long) featureProvider.getOID()).longValue();
+        boolean hasGeometry = false;
+        int i = featureType.getDefaultGeometryAttributeIndex();
+        if (i >= 0) {
+            if (!featureProvider.isReadOnly(i)) {
+                try {
+                    Geometry geom = this.shpFile.getGeometry(index);
+                    featureProvider.set(i, geom);
+                } catch (CreateGeometryException e) {
+                    throw new ReadException(getProviderName(), e);
+                }
+            }
+            hasGeometry = true;
+        }
+        if (hasDBFAttributes(featureType, hasGeometry)) {
+            super.loadFeatureProviderByIndex(featureProvider);
+        }
+
+    }
+
+    private boolean hasDBFAttributes(FeatureType featureType,
+            boolean hasGeometry) {
+        FeatureAttributeDescriptor[] attributes
+                = featureType.getAttributeDescriptors();
+        // If there aren't any attributes, nor has any DBF attributes
+        if (attributes == null || attributes.length == 0) {
+            return false;
+        }
+        // If there is only one attribute and it is the geometry one
+        if (attributes.length == 1 && hasGeometry) {
+            return false;
+        }
+        // In any other case
+        return true;
+    }
+
+    protected void loadValue(FeatureProvider featureProvider, int rowIndex,
+            FeatureAttributeDescriptor descriptor) throws ReadException {
+        if (descriptor.getType() == DataTypes.GEOMETRY) {
+            return;
+        } else {
+            super.loadValue(featureProvider, rowIndex, descriptor);
+        }
+    }
+
+    public FeatureProvider createFeatureProvider(FeatureType type) throws DataException {
+        FeatureProvider data = new SHPFeatureProvider(this, type);
+        return data;
+    }
+
+    protected void openFile() throws IOException, DataException {
+        super.openFile();
+        this.shpFile.open();
+
+    }
+
+    protected void closeFile() throws CloseException {
+        super.closeFile();
+        if (!this.shpFile.isOpen()) {
+            return;
+        }
+        this.shpFile.close();
+    }
+
+    public boolean canWriteGeometry(final int geometryType, int geometrySubType)
+            throws DataException {
+        this.open();
+        return ((Boolean) getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                boolean value = shpFile.canWriteGeometry(geometryType);
+                return value ? Boolean.TRUE : Boolean.FALSE;
+            }
+        })).booleanValue();
+//		this.resourcesBegin();
+//		try {
+//			return this.shpFile.canWriteGeometry(geometryType);
+//
+//		} finally {
+//			this.resourcesEnd();
+//		}
+    }
+
+    public void performChanges(Iterator deleteds, Iterator inserteds,
+            Iterator updateds, Iterator originalFeatureTypesUpdated)
+            throws PerformEditingException {
+
+        /*
+         * This will throw an exception if there are new fields
+         * with names too long
+         */
+        checkNewFieldsNameSize(originalFeatureTypesUpdated);
+
+        final FeatureType fType;
+        try {
+            fType = this.getStoreServices().getDefaultFeatureType();
+        } catch (DataException e) {
+            throw new PerformEditingException(this.getProviderName(), e);
+        }
+        // TODO Comprobar el campo de geometria
+
+        final EditableFeatureType dbfFtype = fType.getEditable();
+
+        removeGeometryColumn(dbfFtype);
+
+		// try {
+        // this.resourcesBegin();
+        // } catch (ResourceExecuteException e1) {
+        // throw new PerformEditingException(this.getName(), e1);
+        // }
+        try {
+
+            getResource().execute(new ResourceAction() {
+                public Object run() throws Exception {
+                    FeatureSet set = null;
+                    DisposableIterator iter = null;
+                    try {
+                        set = getFeatureStore().getFeatureSet();
+                        writer = new SHPFeatureWriter(getProviderName());
+
+                        SHPStoreParameters shpParams = getShpParameters();
+                        SHPStoreParameters tmpParams
+                                = (SHPStoreParameters) shpParams.getCopy();
+
+                        File tmp_base = File.createTempFile(
+                                "tmp_" + System.currentTimeMillis(), null);
+                        String str_base = tmp_base.getCanonicalPath();
+
+                        tmpParams.setDBFFile(str_base + ".dbf");
+                        tmpParams.setSHPFile(str_base + ".shp");
+                        tmpParams.setSHXFile(str_base + ".shx");
+
+                        writer.begin(tmpParams, fType, dbfFtype, set.getSize());
+
+                        iter = set.fastIterator();
+                        while (iter.hasNext()) {
+                            Feature feature = (Feature) iter.next();
+                            writer.append(feature);
+                        }
+
+                        writer.end();
+
+                        close();
+                        resourceCloseRequest();
+
+                        if (!shpParams.getDBFFile().delete()) {
+                            logger.debug("Can't delete dbf file '"+shpParams.getDBFFile()+"'.");
+                            throw new IOException("Can't delete dbf '"+FilenameUtils.getBaseName(shpParams.getDBFFileName())+"' file to replace with the new dbf.\nThe new dbf is in temporary file '"+str_base+"'");
+                        }
+                        if (!shpParams.getSHPFile().delete()) {
+                            logger.debug("Can't delete dbf file '"+shpParams.getSHPFile()+"'.");
+                            throw new IOException("Can't delete shp '"+FilenameUtils.getBaseName(shpParams.getSHPFileName())+"' file to replace with the new shp.\nThe new shp is in temporary file '"+str_base+"'");
+                        }
+                        if (!shpParams.getSHXFile().delete()) {
+                            logger.debug("Can't delete dbf file '"+shpParams.getSHXFile()+"'.");
+                            throw new IOException("Can't delete shx '"+FilenameUtils.getBaseName(shpParams.getSHXFileName())+"' file to replace with the new shx.\nThe new shx is in temporary file '"+str_base+"'");
+                        }
+                        FileUtils.moveFile(
+                                tmpParams.getDBFFile(),
+                                shpParams.getDBFFile());
+                        FileUtils.moveFile(
+                                tmpParams.getSHPFile(),
+                                shpParams.getSHPFile());
+                        FileUtils.moveFile(
+                                tmpParams.getSHXFile(),
+                                shpParams.getSHXFile());
+
+                        resourcesNotifyChanges();
+                        initFeatureType();
+                        return null;
+                    } finally {
+                        dispose(set);
+                        dispose(iter);
+                    }
+                }
+            });
+
+        } catch (Exception e) {
+            throw new PerformEditingException(this.getProviderName(), e);
+        }
+
+    }
+
+    protected void resourceCloseRequest() throws ResourceException {
+		// super.resourceCloseRequest();
+        // this.shpResource.closeRequest();
+        // this.shxResource.closeRequest();
+        getResource().closeRequest();
+    }
+
+    public Envelope getEnvelope() throws DataException {
+        this.open();
+        return (Envelope) this.getDynValue("Envelope");
+    }
+
+    public void append(final FeatureProvider featureProvider) throws DataException {
+//		this.resourcesBegin();
+//		try {
+
+        getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                writer.append(getStoreServices().createFeature(featureProvider));
+                return null;
+            }
+        });
+//		} finally {
+//			this.resourcesEnd();
+//		}
+
+    }
+
+    public void beginAppend() throws DataException {
+		// this.resourcesBegin();
+        // try {
+
+        getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                FeatureStore store = getFeatureStore();
+                FeatureType fType = store.getDefaultFeatureType();
+
+				// TODO Comprobar el campo de geometria
+                EditableFeatureType dbfFtype = fType.getEditable();
+
+                removeGeometryColumn(dbfFtype);
+                FeatureSet set = store.getFeatureSet();
+
+                writer = new SHPFeatureWriter(getProviderName());
+
+                writer.begin(getShpParameters(), fType, dbfFtype, set.getSize());
+                return null;
+            }
+        });
+		// } finally {
+        // this.resourcesEnd();
+        // }
+
+    }
+
+    public void endAppend() throws DataException {
+//		this.resourcesBegin();
+//		try {
+        getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                writer.end();
+                close();
+                resourcesNotifyChanges();
+                return null;
+            }
+        });
+//		} finally {
+//			this.resourcesEnd();
+//		}
+
+    }
+
+    public Object getSourceId() {
+        return this.getShpParameters().getFile();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureWriter.java	(revision 42196)
@@ -0,0 +1,213 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.dbf.DBFFeatureWriter;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreParameters;
+import org.gvsig.fmap.dal.store.shp.utils.SHPFileWrite;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+public class SHPFeatureWriter extends DBFFeatureWriter {
+
+    private static final GeometryManager geomManager = GeometryLocator
+        .getGeometryManager();
+    private static final Logger logger = LoggerFactory
+        .getLogger(GeometryManager.class);
+
+    private SHPFileWrite shpWrite;
+    private Envelope envelope = null;
+    private int[] supportedGeometryTypes;
+    private int fileSize;
+    private FeatureType shpFeatureType;
+
+    protected SHPFeatureWriter(String name) {
+        super(name);
+    }
+
+    public void begin(DBFStoreParameters dbfParameters,
+        FeatureType featureType, FeatureType dbfFeatureType, long numRows)
+        throws DataException {
+        SHPStoreParameters shpParameters = (SHPStoreParameters) dbfParameters;
+        File shpFile = shpParameters.getSHPFile();
+        File shxFile = shpParameters.getSHXFile();
+
+        FileChannel shpChannel = null;
+        FileChannel shxChannel = null;
+
+        try {
+            shpChannel =
+                (FileChannel) getWriteChannel(shpFile.getAbsolutePath());
+            shxChannel =
+                (FileChannel) getWriteChannel(shxFile.getAbsolutePath());
+        } catch (IOException e) {
+            throw new WriteException(this.name, e);
+        }
+
+        shpWrite = new SHPFileWrite(shpChannel, shxChannel);
+        int shapeType = getShapeTypeAndSetSupportedGeometries(featureType);
+        try {
+            shpWrite.writeHeaders(
+                geomManager.createEnvelope(0, 0, 0, 0, featureType.getDefaultGeometryAttribute().getGeomType().getSubType()),
+                shapeType, 0, 0);
+        } catch (CreateEnvelopeException e) {
+            logger.error("Error creating the envelope", e);
+        }
+
+        this.shpFeatureType = featureType;
+        super.begin(dbfParameters, dbfFeatureType, numRows);
+
+    }
+
+    private int getShapeTypeAndSetSupportedGeometries(FeatureType featureType) {
+
+        FeatureAttributeDescriptor geometryAttr =
+            featureType.getAttributeDescriptor(featureType
+                .getDefaultGeometryAttributeIndex());
+        int gvSIG_geometryType;
+        int gvSIG_geometrySubType;
+        try{
+            GeometryType geomType = geometryAttr.getGeomType();
+            gvSIG_geometryType = geomType.getType();
+            gvSIG_geometrySubType = geomType.getSubType();
+        } catch(Exception e){
+            gvSIG_geometryType = geometryAttr.getGeometryType();
+            gvSIG_geometrySubType = geometryAttr.getGeometrySubType();
+        }
+        this.setSupportedGeometryTypes(gvSIG_geometryType);
+        int shapeType = 0;
+        shapeType =
+            shpWrite.getShapeType(gvSIG_geometryType, gvSIG_geometrySubType);
+        return shapeType;
+    }
+
+    public void dispose() {
+        super.dispose();
+        this.envelope = null;
+        this.shpWrite = null;
+    }
+
+    public void end() throws DataException {
+        if (envelope == null) {
+            try {
+                envelope =
+                    geomManager.createEnvelope(0, 0, 0, 0, SUBTYPES.GEOM2D);
+            } catch (CreateEnvelopeException e) {
+                logger.error("Error creating the envelope", e);
+            }
+        }
+        int shapeType = getShapeTypeAndSetSupportedGeometries(shpFeatureType);
+        shpWrite.writeHeaders(envelope, shapeType, super.getRowCount(),
+            fileSize);
+        super.end();
+        shpWrite.close();
+    }
+
+    public void append(Feature feature) throws DataException {
+
+        Geometry theGeom = feature.getDefaultGeometry();
+        if (theGeom != null) {
+            if (!canWriteGeometry(theGeom.getType())) {
+                throw new WriteException(this.name, // FIXME Excepcion correcta
+                    new RuntimeException("UnsupportedGeometryType: "
+                        + theGeom.getGeometryType().getName()));
+            }
+            super.append(feature);
+            fileSize = shpWrite.writeIGeometry(theGeom);
+            Envelope envelope = theGeom.getEnvelope();
+            if (envelope != null) {
+                if (this.envelope != null) {
+                    this.envelope.add(envelope);
+                } else {
+                    this.envelope = envelope;
+                }
+            }
+        } else {
+            super.append(feature);
+            fileSize = shpWrite.writeIGeometry(theGeom);
+        }
+    }
+
+    private void setSupportedGeometryTypes(int gvSIG_geometryType) {
+        switch (gvSIG_geometryType) {
+        case Geometry.TYPES.POINT:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.POINT, Geometry.TYPES.NULL };
+            break;
+        case Geometry.TYPES.MULTIPOINT:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.MULTIPOINT, Geometry.TYPES.NULL };
+            break;
+        case Geometry.TYPES.MULTICURVE:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.CURVE, Geometry.TYPES.ELLIPSE,
+                    Geometry.TYPES.ARC, Geometry.TYPES.CIRCLE,
+                    Geometry.TYPES.ELLIPSE, Geometry.TYPES.MULTICURVE,
+                    Geometry.TYPES.SPLINE, Geometry.TYPES.NULL };
+            break;
+        case Geometry.TYPES.MULTISURFACE:
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.SURFACE, Geometry.TYPES.CIRCLE,
+                    Geometry.TYPES.ELLIPSE, Geometry.TYPES.MULTISURFACE,
+                    Geometry.TYPES.SPLINE, Geometry.TYPES.NULL };
+            break;
+
+        default:
+            supportedGeometryTypes = new int[] {};
+        }
+    }
+
+    public boolean canWriteGeometry(int gvSIGgeometryType) {
+        for (int i = 0; i < supportedGeometryTypes.length; i++) {
+            if (gvSIGgeometryType == supportedGeometryTypes[i]) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void begin(DBFStoreParameters storeParameters,
+        FeatureType featureType, long numRows) throws DataException {
+        throw new UnsupportedOperationException();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/main/java/org/gvsig/fmap/dal/store/shp/SHPFeatureWriter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/pom.xml	(revision 42196)
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.dbf</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <scope>compile</scope>
+    </dependency>
+<!--     <dependency> -->
+<!--       <groupId>org.gvsig</groupId> -->
+<!--       <artifactId>org.gvsig.fmap.mapcontext.api</artifactId> -->
+<!--       <scope>compile</scope> -->
+<!--     </dependency> -->
+
+    <!-- Test -->
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.generalpath</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.operation</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+            <source>1.5</source>
+            <target>1.5</target>
+            <encoding>ISO-8859-1</encoding>
+        </configuration>
+        <executions>
+          <execution>
+            <id>default-testCompile</id>
+            <phase>process-test-sources</phase>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <configuration>
+              <skip>true</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.pom.xml.swp


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/test1.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/test1.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/test1.csv	(revision 42196)
@@ -0,0 +1,4 @@
+Name;last name;city;postalcode:integer;email
+Joaquin;del Cerro;Valencia;4601;xyz.joaquin@gmail.com
+Mario;Carreta;Valencia;4601;xyz.mario@gmail.com
+Manuel;Madrid;Valencia;4601;xyz-manuel@gmail.com
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/java/org/gvsig/fmap/dal/store/csv/test.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/java/org/gvsig/fmap/dal/store/csv/test.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/java/org/gvsig/fmap/dal/store/csv/test.java	(revision 42196)
@@ -0,0 +1,32 @@
+package org.gvsig.fmap.dal.store.csv;
+
+
+public class test {
+/*
+	public static void main(String[] args) throws IOException {
+		new test().doMain(args);
+	}
+
+	public void doMain(String[] args) throws IOException {
+		CSVFormat format = CSVFormat.DEFAULT
+				.withHeader()
+				.withSkipHeaderRecord(true)
+				.withIgnoreEmptyLines(true)
+				.withDelimiter(';');
+		URL data = this.getClass().getResource("/test1.csv");
+		CSVParser parser = CSVParser.parse(data,Charset.forName("UTF-8"), format); 
+		Map headerMap = parser.getHeaderMap();
+		String header[] = new String[headerMap.size()];
+		int i=0;
+		Iterator it = headerMap.keySet().iterator();
+		while(it.hasNext()) {
+			header[i++] = (String) it.next();
+		}
+		for(i=0; i<header.length;i++) {
+			System.out.println("header["+i+"]="+header[i]);
+		}
+		List r = parser.getRecords();
+		System.out.println(r.toString());
+	}
+	*/
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/java/org/gvsig/fmap/dal/store/csv/test.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.csv.CSVLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVMetadata.xml	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of metadata fields of a shp file.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    
+    <class name="CSV" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a CSV store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVMetadata.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVParameters.xml	(revision 42196)
@@ -0,0 +1,99 @@
+<?xml version= "1.0 "?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="CSVStoreParameters">
+       <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <tags>
+          <value name="defaultGroup" value="Basic"/>
+      </tags>      
+      <description>Store the parameters need to open a CSV file</description>
+      <fields>
+        <field name="File" type="file" mandatory="true" group="Basic">
+          <description>CSV file</description>
+        </field>
+        <field name="profile" type="string" mandatory="true" defaultValue="EXCEL_NORTH_EUROPE_PREFERENCE" group="Basic">
+          <description>Predefined formats</description>
+  		  <availableValues>
+            <value label="Standard (double quote, comma and crlf)">STANDARD_PREFERENCE</value>
+            <value label="Excel (double quote, comma and lf)">EXCEL_PREFERENCE</value>
+            <value label="Excel North Europe (double quote, semicolon and lf)">EXCEL_NORTH_EUROPE_PREFERENCE</value>
+            <value label="Tabs (double quote, tabs and lf)">TAB_PREFERENCE</value>
+          </availableValues>          
+        </field>
+        <field name="quotePolicy" type="string" mandatory="false" defaultValue="NormalQuoteMode" group="Basic">
+          <description>Sets the output quote policy of the format to the specified value. </description>
+  		  <availableValues>
+          	<value label="Quote all">AlwaysQuoteMode</value>
+            <value label="Quotes fields which contain special characters">NormalQuoteMode</value>
+          </availableValues>          
+        </field>
+        <field name="locale" type="string" mandatory="true" defaultValue="DEFAULT" group="Basic">
+          <description>Locale used to parse double and float values (BCP47 language tag representing the locale)</description>
+  	  <availableValues>
+            <value label="Default (use system locale)">DEFAULT</value>
+            <value label="Canada (english)">en-CA</value>
+            <value label="Canada (french)">fr-CA</value>
+            <value label="Chinese">zh</value>
+            <value label="English">en</value>
+            <value label="French">fr</value>
+            <value label="German">de</value>
+            <value label="Italian">it</value>
+            <value label="Japanese">ja</value>
+            <value label="Korea">ko</value>
+            <value label="Spain">es</value>
+            <value label="Uk">en-GB</value>
+            <value label="Us">en-US</value>
+          </availableValues>          
+        </field>
+        <field name="recordSeparator" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Sets the record separator of the format to the specified character.</description>
+        </field>
+        <field name="delimiter" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Sets the field delimiter of the format to the specified character.</description>
+        </field>
+        <field name="quoteCharacter" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Sets the quoteChar of the format to the specified character.</description>
+        </field>
+        <field name="commentStartMarker" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Sets the comment start marker of the format to the specified character.</description>
+        </field>
+        <field name="automaticTypesDetection" type="boolean" mandatory="false" defaultValue="true" group="Advanced">
+          <description>This flag activate the autodetection of types in the CSV. Can be slow.</description>
+        </field>
+        <field name="escapeCharacter" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Sets the escape character of the format to the specified character</description>
+        </field>
+        <field name="header" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>The header or empty if parsed automatically</description>
+        </field>
+        <field name="skipLines" label="Number of lines to skip" type="integer" mandatory="false" defaultValue="0" group="Advanced">
+          <description>The number of lines to skip at begin of file</description>
+        </field>
+        <field name="fieldsDefinition" label="Fields definition" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>If set use this to define fields of fixed length instead of use a separator.\nThe format is a list of values separateds by spaces of the form N:M\nwhere N is the position of the first character of field, and M the last.\nCan accept N: to use form the N character to the end of line.</description>
+        </field>
+        <field name="surroundingSpacesNeedQuotes" type="boolean" mandatory="false" defaultValue="false" group="Advanced">
+          <description>the surroundingSpacesNeedQuotes flag.</description>
+        </field>
+        <field name="CRS" type="crs" mandatory="false" group="Advanced">
+          <description>The coordinate reference system used in this CSV file if contains geometries</description>
+        </field>
+        <field name="fieldtypes" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Comma separated list of field types. If empty strings are assumed (Eg: integer,string,double,boolean,float,geometry).</description>
+        </field>
+        <field name="charset" type="string" mandatory="false" defaultValue="UTF-8" group="Advanced">
+          <description>Sets the String to use for null values for output.</description>
+        </field>
+        <field name="point" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>This field allow to add a Geometry column to the table. It is a list of field names separated by commas used as dimensions for the attribute GEOM of type point to add to the table.</description>
+        </field>
+        <field name="ignoreErrors" type="boolean" mandatory="false" defaultValue="false" group="Advanced">
+          <description>Set to true to ignore errors during load of data.</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/resources/org/gvsig/fmap/dal/store/csv/CSVParameters.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVLibrary.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.csv;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALFileLibrary;
+import org.gvsig.fmap.dal.DALFileLocator;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class CSVLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+        require(DALFileLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		List<Throwable> exs = new ArrayList<Throwable>();
+
+		FileHelper.registerParametersDefinition(
+				CSVStoreParameters.PARAMETERS_DEFINITION_NAME,
+				CSVStoreParameters.class, "CSVParameters.xml");
+		try {
+			FileHelper.registerMetadataDefinition(
+					CSVStoreProvider.METADATA_DEFINITION_NAME,
+					CSVStoreProvider.class, "CSVMetadata.xml");
+		} catch (MetadataException e) {
+			exs.add(e);
+		}
+
+		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+				.getDataManager();
+
+		try {
+			if (!dataman.getStoreProviders().contains(CSVStoreProvider.NAME)) {
+				dataman.registerStoreProviderFactory(new CSVStoreProviderFactory(CSVStoreProvider.NAME, CSVStoreProvider.DESCRIPTION));
+
+			}
+		} catch (RuntimeException e) {
+			exs.add(e);
+		}
+
+		try {
+			DALFileLocator.getFilesystemServerExplorerManager()
+					.registerProvider(CSVStoreProvider.NAME,
+							CSVStoreProvider.DESCRIPTION,
+							CSVFilesystemServerProvider.class);
+		} catch (RuntimeException e) {
+			exs.add(e);
+		}
+
+		if (exs.size() > 0) {
+			throw new LibraryException(this.getClass(), exs);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVFilesystemServerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVFilesystemServerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVFilesystemServerProvider.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.File;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.CreateException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
+
+public class CSVFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider 
+	implements FilesystemServerExplorerProvider, ResourceConsumer {
+
+	private FilesystemServerExplorerProviderServices serverExplorer;
+
+	public String getDataStoreProviderName() {
+		return CSVStoreProvider.NAME;
+	}
+
+	public int getMode() {
+		return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
+	}
+
+	public boolean accept(File pathname) {
+		return (pathname.getName().toLowerCase().endsWith(".csv"));
+	}
+
+	public String getDescription() {
+		return CSVStoreProvider.DESCRIPTION;
+	}
+
+	public DataStoreParameters getParameters(File file) throws DataException {
+		DataManager manager = DALLocator.getDataManager();
+		CSVStoreParameters params = (CSVStoreParameters) manager
+				.createStoreParameters(this
+				.getDataStoreProviderName());
+		params.setFile(file);
+		return params;
+	}
+
+	public boolean canCreate() {
+		return false;
+	}
+
+	public boolean canCreate(NewDataStoreParameters parameters) {
+			throw new UnsupportedOperationException(); 
+	}
+
+	public void create(NewDataStoreParameters parameters, boolean overwrite)
+			throws CreateException {
+		throw new UnsupportedOperationException(); 
+	}
+
+	public NewDataStoreParameters getCreateParameters() throws DataException {
+		throw new UnsupportedOperationException(); 
+	}
+
+	public void initialize(
+			FilesystemServerExplorerProviderServices serverExplorer) {
+		this.serverExplorer = serverExplorer;
+	}
+
+	public void remove(DataStoreParameters parameters) throws RemoveException {
+		File file = ((CSVStoreParameters) parameters).getFile();
+		if (!file.exists()) {
+			throw new RemoveException(this.getDataStoreProviderName(),
+					new FileNotFoundException(file));
+		}
+		if (!file.delete()) {
+			// FIXME throws ???
+		}
+
+	}
+
+	public boolean closeResourceRequested(ResourceProvider resource) {
+		// while it is using a resource anyone can't close it
+		return false;
+	}
+
+	public void resourceChanged(ResourceProvider resource) {
+		//Do nothing
+
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVFilesystemServerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java	(revision 42196)
@@ -0,0 +1,1181 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.fmap.dal.feature.spi.memory.AbstractMemoryStoreProvider;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.csv.simplereaders.CSVReader;
+import org.gvsig.fmap.dal.store.csv.simplereaders.FixedLenReader;
+import org.gvsig.fmap.dal.store.csv.simplereaders.SimpleReader;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+import org.gvsig.tools.dataTypes.DataTypesManager.CoercionWithLocale;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.NotYetImplemented;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.supercsv.io.CsvListWriter;
+import org.supercsv.prefs.CsvPreference;
+
+public class CSVStoreProvider extends AbstractMemoryStoreProvider implements
+        ResourceConsumer {
+
+    private static final Logger logger = LoggerFactory.getLogger(CSVStoreProvider.class);
+
+    public static final String NAME = "CSV";
+    public static final String DESCRIPTION = "CSV file";
+
+    public static final String METADATA_DEFINITION_NAME = NAME;
+
+    private ResourceProvider resource;
+
+    private long counterNewsOIDs = 0;
+    private Envelope envelope;
+    private boolean need_calculate_envelope = false;
+    private SimpleTaskStatus taskStatus;
+
+    public CSVStoreProvider(CSVStoreParameters parameters,
+            DataStoreProviderServices storeServices) throws InitializeException {
+        super(
+                parameters,
+                storeServices,
+                FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
+        );
+
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        this.taskStatus = manager.createDefaultSimpleTaskStatus("CSV");
+
+        counterNewsOIDs = 0;
+
+        File file = getCSVParameters().getFile();
+        resource = this.createResource(
+                FileResource.NAME,
+                new Object[]{file.getAbsolutePath()}
+        );
+
+        resource.addConsumer(this);
+        initializeFeatureTypes();
+    }
+
+    private CSVStoreParameters getCSVParameters() {
+        return (CSVStoreParameters) this.getParameters();
+    }
+
+    public String getProviderName() {
+        return NAME;
+    }
+
+    public boolean allowWrite() {
+        return false;
+    }
+
+    private String getFullFileName() {
+        // Usar solo para mostrar mensajes en el logger.
+        String s = "(unknow)";
+        try {
+            s = getCSVParameters().getFile().getAbsolutePath();
+        } catch (Exception e2) {
+            s = "(unknow)";
+        }
+        return s;
+    }
+
+    public void open() throws OpenException {
+        if ( this.data != null ) {
+            return;
+        }
+        this.data = new ArrayList<FeatureProvider>();
+        resource.setData(new HashMap());
+        counterNewsOIDs = 0;
+        try {
+            loadFeatures();
+        } catch (RuntimeException e) {
+            logger.warn("Can't load features from CSV '" + getFullFileName() + "'.", e);
+            throw e;
+        } catch (Exception e) {
+            logger.warn("Can't load features from CSV '" + getFullFileName() + "'.", e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    public DataServerExplorer getExplorer() throws ReadException {
+        DataManager manager = DALLocator.getDataManager();
+        FilesystemServerExplorerParameters params;
+        try {
+            params = (FilesystemServerExplorerParameters) manager
+                    .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+            params.setRoot(this.getCSVParameters().getFile().getParent());
+            return manager.openServerExplorer(FilesystemServerExplorer.NAME, params);
+        } catch (DataException e) {
+            throw new ReadException(this.getProviderName(), e);
+        } catch (ValidateDataParametersException e) {
+            throw new ReadException(this.getProviderName(), e);
+        }
+
+    }
+
+    class Writer {
+
+        private Envelope envelope = null;
+        private boolean calculate_envelope = false;
+        private CsvListWriter listWriter = null;
+        private CsvPreference csvpreferences = null;
+        private FileWriter fwriter = null;
+        private FeatureType ftype;
+        private File file;
+        private String[] values;
+        private FeatureAttributeDescriptor[] descriptors;
+        private Coercion convert = null;
+        private int errorcounts = 0;
+        private Throwable lasterror = null;
+        private Locale locale = null;
+
+        public void initialize(File file, FeatureType ftype, CsvPreference csvpreferences) {
+            this.file = file;
+            this.ftype = ftype;
+            this.csvpreferences = csvpreferences;
+            this.locale = CSVStoreParameters.getLocale(getCSVParameters());
+            if ( csvpreferences == null ) {
+                this.csvpreferences = CsvPreference.STANDARD_PREFERENCE;
+            }
+            if ( ftype.getDefaultGeometryAttributeName() != null ) {
+                this.calculate_envelope = true;
+            }
+            this.descriptors = this.ftype.getAttributeDescriptors();
+            this.convert = ToolsLocator.getDataTypesManager().getCoercion(org.gvsig.tools.dataTypes.DataTypes.STRING);
+            this.errorcounts = 0;
+        }
+
+        public void begin() {
+            try {
+                this.fwriter = new FileWriter(file);
+            } catch (IOException e) {
+                logger.warn("Can't open file for write (" + file.getAbsolutePath() + ").", e);
+                throw new RuntimeException(e);
+            }
+            this.listWriter = new CsvListWriter(this.fwriter, this.csvpreferences);
+            int n = 0;
+            for ( int i = 0; i < descriptors.length; i++ ) {
+                FeatureAttributeDescriptor descriptor = descriptors[i];
+                if ( descriptor.getEvaluator() == null ) {
+                    n++;
+                }
+            }
+
+            String[] header = new String[n];
+            this.values = new String[n];
+            n = 0;
+            for ( int i = 0; i < descriptors.length; i++ ) {
+                FeatureAttributeDescriptor descriptor = descriptors[i];
+                if ( descriptor.getEvaluator() == null ) {
+                    String name = descriptor.getName();
+                    String typeName = descriptor.getDataTypeName();
+                    if ( descriptor.getDataType().getType() == DataTypes.STRING ) {
+                        header[n++] = name + "__" + typeName + "__" + descriptor.getSize();
+                    } else {
+                        header[n++] = name + "__" + typeName;
+                    }
+                }
+            }
+            try {
+                listWriter.writeHeader(header);
+            } catch (Exception e) {
+                logger.warn("Can't write header '" + header.toString() + "' file for write (" + file.getAbsolutePath() + ").", e);
+                throw new RuntimeException(e);
+            }
+        }
+
+        public void add(FeatureProvider feature) {
+            if ( this.calculate_envelope ) {
+                Geometry geom = feature.getDefaultGeometry();
+                if ( geom != null ) {
+                    if ( envelope == null ) {
+                        try {
+                            envelope = (Envelope) geom.getEnvelope().clone();
+                        } catch (CloneNotSupportedException e) {
+                            logger.warn("Este error no deberia pasar, siempre se puede hacer un clone de un envelope.", e);
+                        }
+                    } else {
+                        envelope.add(geom.getEnvelope());
+                    }
+                }
+            }
+            int n = 0;
+            for ( int i = 0; i < descriptors.length; i++ ) {
+                FeatureAttributeDescriptor descriptor = descriptors[i];
+                if ( descriptor.getEvaluator() == null ) {
+                    Object value = feature.get(i);
+                    try {
+                        n++;
+                        if ( this.convert != null && this.convert instanceof CoercionWithLocale ) {
+                            values[n] = (String) ((CoercionWithLocale) this.convert).coerce(value, this.locale);
+                        } else {
+                            values[n] = (String) this.convert.coerce(value);
+                        }
+                    } catch (CoercionException e) {
+                        try {
+                            values[n] = value.toString();
+                        } catch (Exception ex) {
+                            values[n] = "";
+                        }
+                        if ( errorcounts++ <= 10 ) {
+                            this.lasterror = e;
+                            logger.warn("Can't convert value of field " + i + " to string in CVS file '" + getFullFileName() + "'.", e);
+                            if ( errorcounts == 10 ) {
+                                logger.warn("Too many error writing CVS file '" + getFullFileName() + "', don't output more.");
+                            }
+                        }
+                    }
+                }
+            }
+            try {
+                this.listWriter.writeHeader(values);
+            } catch (IOException e) {
+                if ( errorcounts++ <= 10 ) {
+                    this.lasterror = e;
+                    logger.warn("Can't write values to CVS file '" + getFullFileName() + "'.", e);
+                    if ( errorcounts == 10 ) {
+                        logger.warn("Too many error writing CVS file '" + getFullFileName() + "', don't output more.");
+                    }
+                }
+            }
+
+        }
+
+        public void end() throws PerformEditingException {
+            if ( this.errorcounts > 0 ) {
+                throw new PerformEditingException(this.file.getAbsolutePath(), lasterror);
+            }
+            if ( listWriter != null ) {
+                try {
+                    listWriter.close();
+                } catch (Exception ex) {
+                    // Ignore error
+                }
+                listWriter = null;
+            }
+            if ( fwriter != null ) {
+                try {
+                    fwriter.close();
+                } catch (Exception ex) {
+                    // Ignore error
+                }
+                fwriter = null;
+            }
+        }
+
+        public Envelope getEnvelope() {
+            return this.envelope;
+        }
+    }
+
+    public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator originalFeatureTypesUpdated) throws PerformEditingException {
+
+        try {
+            this.taskStatus.add();
+            taskStatus.message("_preparing");
+            getResource().execute(new ResourceAction() {
+                public Object run() throws Exception {
+                    FeatureSet features = null;
+                    DisposableIterator it = null;
+                    try {
+                        File file = (File) resource.get();
+
+                        Writer writer = new Writer();
+                        writer.initialize(file, getStoreServices().getDefaultFeatureType(), getCSVPreferences());
+                        features
+                                = getStoreServices().getFeatureStore()
+                                .getFeatureSet();
+                        List<FeatureProvider> newdata = new ArrayList<FeatureProvider>();
+                        writer.begin();
+                        it = features.fastIterator();
+                        taskStatus.setRangeOfValues(0, 0);
+                        long counter = 0;
+                        while ( it.hasNext() ) {
+                            taskStatus.setCurValue(counter++);
+                            FeatureProvider feature = getStoreServices().getFeatureProviderFromFeature(
+                                    (org.gvsig.fmap.dal.feature.Feature) it.next());
+                            writer.add(feature);
+                            if ( feature.getOID() == null ) {
+                                logger.warn("feature without OID");
+                                feature.setOID(createNewOID());
+                            }
+                            newdata.add(feature);
+                        }
+                        data = newdata;
+                        if ( writer.getEnvelope() != null ) {
+                            envelope = writer.getEnvelope().getGeometry().getEnvelope();
+                        }
+                        resource.notifyChanges();
+                        writer.end();
+                    } finally {
+                        if ( it != null ) {
+                            it.dispose();
+                        }
+                        if ( features != null ) {
+                            features.dispose();
+                        }
+                    }
+                    return null;
+                }
+
+                private CsvPreference getCSVPreferences() {
+                    CSVReader reader = new CSVReader(getCSVParameters());
+                    return reader.getCSVPreferences();
+                }
+                
+            });
+            this.taskStatus.terminate();
+        } catch (Exception e) {
+            this.taskStatus.abort();
+            throw new PerformEditingException(getResource().toString(), e);
+        } finally {
+            this.taskStatus.remove();
+        }
+    }
+
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        return true;
+    }
+
+    public int getOIDType() {
+        return DataTypes.LONG;
+    }
+
+    public boolean supportsAppendMode() {
+        return false;
+    }
+
+    public void append(FeatureProvider featureProvider) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void beginAppend() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void endAppend() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        throw new NotYetImplemented();
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        throw new NotYetImplemented();
+    }
+
+    public Object createNewOID() {
+        return new Long(counterNewsOIDs++);
+    }
+
+    protected void initializeFeatureTypes() throws InitializeException {
+        try {
+            this.open();
+        } catch (OpenException e) {
+            throw new InitializeException(this.getProviderName(), e);
+        }
+    }
+
+    public Envelope getEnvelope() throws DataException {
+        this.open();
+        if ( this.envelope != null ) {
+            return this.envelope;
+        }
+        if ( !this.need_calculate_envelope ) {
+            return null;
+        }
+        FeatureStore fs = this.getFeatureStore();
+        FeatureType ft = fs.getDefaultFeatureType();
+        FeatureAttributeDescriptor fad = ft.getAttributeDescriptor(ft.getDefaultGeometryAttributeIndex());
+
+        try {
+            this.envelope = GeometryLocator.getGeometryManager().createEnvelope(fad.getGeomType().getSubType());
+            fs.accept(new Visitor() {
+                public void visit(Object obj) throws VisitCanceledException, BaseException {
+                    Feature f = (Feature) obj;
+                    Geometry geom = f.getDefaultGeometry();
+                    if ( geom != null ) {
+                        envelope.add(geom.getEnvelope());
+                    }
+                }
+            });
+        } catch (BaseException e) {
+            logger.warn("Can't calculate the envelope of CSV file '" + this.getFullName() + "'.", e);
+            this.envelope = null;
+        }
+
+        this.need_calculate_envelope = false;
+        return this.envelope;
+    }
+
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if ( DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name) ) {
+            try {
+                return this.getEnvelope();
+            } catch (DataException e) {
+                return null;
+            }
+        } else {
+            if ( DataStore.METADATA_CRS.equalsIgnoreCase(name) ) {
+                IProjection pro = CSVStoreParameters.getCRS(this.getCSVParameters());
+                if ( pro != null ) {
+                    return pro;
+                }
+            }
+        }
+        return super.getDynValue(name);
+    }
+
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(
+                DataStoreNotification.RESOURCE_CHANGED,
+                resource);
+    }
+
+    public Object getSourceId() {
+        return this.getCSVParameters().getFile();
+    }
+
+    public String getName() {
+        String name = this.getCSVParameters().getFile().getName();
+        return FilenameUtils.getBaseName(name);
+    }
+
+    public String getFullName() {
+        return this.getCSVParameters().getFile().getAbsolutePath();
+    }
+
+    public ResourceProvider getResource() {
+        return resource;
+    }
+
+    private boolean isEmpty(String s) {
+        if ( s == null ) {
+            return true;
+        }
+        return s.trim().length() == 0;
+    }
+
+    private class FieldTypeParser {
+
+        public String name = null;
+        public int type = DataTypes.STRING;
+        public int size = 0;
+        public boolean allowNulls = true;
+        public int geometryType = Geometry.TYPES.GEOMETRY;
+
+        private String typename = "string";
+
+        FieldTypeParser() {
+        }
+
+        private int getType(String value) {
+            DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+            return dataTypesManager.getType(typename);
+        }
+
+        // El formato seria:
+        //   name[:typename[:size[:notnull|null]]]
+        //   name[:GEOMETRY[:geometry_type[:notnull|null]]]
+        //   name[__typename[__size[__notnull|null]]]
+        //
+        public boolean parse(String value) {
+            String typename = null;
+            String[] ss = null;
+            if ( value.contains(":") ) {
+                ss = value.split(":");
+            } else if ( value.contains("__") ) {
+                ss = value.split("__");
+            }
+            if ( ss == null ) {
+                this.name = value;
+                return true;
+            }
+            switch (ss.length) {
+            case 4:
+                if ( !StringUtils.isBlank(ss[3]) ) {
+                    if ( "notnull".equalsIgnoreCase(ss[3].trim()) ) {
+                        this.allowNulls = false;
+                    } else {
+                        this.allowNulls = true;
+                    }
+                }
+            case 3:
+                if ( !StringUtils.isBlank(ss[1]) ) {
+                    this.typename = ss[1].trim();
+                    this.type = this.getType(this.typename);
+                    if ( this.type == DataTypes.INVALID ) {
+                        this.type = DataTypes.STRING;
+                        logger.info("Type '" + typename + "' not valid for attribute '" + value + "' in CSV file '" + getFullFileName() + "'.");
+                    }
+                }
+                if ( !StringUtils.isBlank(ss[2]) ) {
+                    if( this.type == DataTypes.GEOMETRY ) {
+                        String s = ss[2].trim();
+                        if( s.equalsIgnoreCase("line") || s.equalsIgnoreCase("linestring") || s.equalsIgnoreCase("curve") ) {
+                            this.geometryType = Geometry.TYPES.CURVE;
+                        } else if( s.equalsIgnoreCase("multiline") || s.equalsIgnoreCase("multilinestring")  || s.equalsIgnoreCase("multicurve") ) {
+                            this.geometryType = Geometry.TYPES.MULTICURVE;
+                        } else if( s.equalsIgnoreCase("point") ) {
+                            this.geometryType = Geometry.TYPES.POINT;
+                        } else if( s.equalsIgnoreCase("multipoint") ) {
+                            this.geometryType = Geometry.TYPES.MULTIPOINT;
+                        } else if( s.equalsIgnoreCase("polygon") || s.equalsIgnoreCase("surface") ) {
+                            this.geometryType = Geometry.TYPES.POLYGON;
+                        } else if( s.equalsIgnoreCase("multipolygon") || s.equalsIgnoreCase("multisurface") ) {
+                            this.geometryType = Geometry.TYPES.MULTISURFACE;
+                        }
+                        this.size = 1;
+                    } else {
+                        try {
+                            this.size = Integer.parseInt(ss[2]);
+                        } catch (Exception ex) {
+                            logger.warn("Ignore incorrect field size for field " + value + " in CSV header of '" + getFullFileName() + "'.", ex);
+                        }
+                    }
+                }
+                this.name = ss[0].trim();
+                break;
+            case 2:
+                if ( !StringUtils.isBlank(ss[1]) ) {
+                    this.typename = ss[1].trim();
+                    this.type = this.getType(this.typename);
+                    if ( this.type == DataTypes.INVALID ) {
+                        this.type = DataTypes.STRING;
+                        logger.info("Type '" + typename + "' not valid for attribute '" + value + "' in CSV file '" + getFullFileName() + "'.");
+                    }
+                }
+            case 1:
+                this.name = ss[0].trim();
+                break;
+            }
+
+            if ( this.type != DataTypes.STRING ) {
+                this.size = 0;
+            }
+            return true;
+        }
+
+    }
+
+    private EditableFeatureType getFeatureType(String headers[], int automaticTypes[]) {
+        EditableFeatureType fType = getStoreServices().createFeatureType(this.getName());
+        fType.setHasOID(true);
+
+        FieldTypeParser[] fieldTypes = new FieldTypeParser[headers.length];
+        //
+        // Calculamos cuales pueden ser los tipos de datos
+        //
+        for ( int i = 0; i < fieldTypes.length; i++ ) {
+            fieldTypes[i] = new FieldTypeParser();
+        }
+
+        // Asuminos los tipos pasados por parametro, que se supone
+        // son los detectados automaticamente.
+        if ( automaticTypes != null ) {
+            for ( int i = 0; i < fieldTypes.length && i < automaticTypes.length; i++ ) {
+                fieldTypes[i].type = automaticTypes[i];
+            }
+        }
+        // Luego probamos con lo que diga las cabezeras del CVS, sobreescribiendo
+        // los tipos anteriores en caso de definirse en la cabezara.
+        for ( int i = 0; i < fieldTypes.length; i++ ) {
+            if ( !fieldTypes[i].parse(headers[i]) ) {
+                continue;
+            }
+
+        }
+
+        // Y por ultimo hacemos caso a lo que se haya especificado en los parametros
+        // de apertura del CSV, teniendo esto prioridad sobre todo.
+        String param_types_def = CSVStoreParameters.getRawFieldTypes(this.getParameters());
+        if (StringUtils.isNotBlank(param_types_def)) {
+            String sep = CSVStoreParameters.getDelimiter(param_types_def);
+            if ( StringUtils.isNotBlank(sep) ) {
+                String[] param_types = param_types_def.split(sep);
+                for (int i = 0; i < fieldTypes.length && i < param_types.length; i++) {
+                    if (!fieldTypes[i].parse(param_types[i])) {
+                        continue;
+                    }
+
+                }
+            }
+        }
+        //
+        // Una vez ya sabemos los tipos de datos rellenamos el feature-type
+        //
+        for ( int i = 0; i < fieldTypes.length; i++ ) {
+            EditableFeatureAttributeDescriptor fad = fType.add(
+                    fieldTypes[i].name,
+                    fieldTypes[i].type
+            );
+            fad.setSize(fieldTypes[i].size);
+            fad.setAllowNull(fieldTypes[i].allowNulls);
+            if ( fieldTypes[i].type == DataTypes.GEOMETRY ) {                
+                if( fType.getDefaultGeometryAttributeName() == null ) {
+                    fType.setDefaultGeometryAttributeName(fieldTypes[i].name);
+                }
+                fad.setGeometryType(fieldTypes[i].geometryType);
+            }
+        }
+        String[] pointDimensionNames = CSVStoreParameters.getPointDimensionNames(this.getParameters());
+        if ( pointDimensionNames != null ) {
+            PointAttributeEmulator emulator = new PointAttributeEmulator(pointDimensionNames);
+            EditableFeatureAttributeDescriptor attr = fType.add("GEOM", DataTypes.GEOMETRY, emulator);
+            GeometryManager geommgr = GeometryLocator.getGeometryManager();
+            GeometryType gt;
+            try {
+                gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM3D);
+                attr.setGeometryType(gt);
+                attr.setGeometryType(Geometry.TYPES.POINT);
+                attr.setGeometrySubType(Geometry.SUBTYPES.GEOM3D);                
+            } catch (Exception e) {
+                logger.warn("Can't set geometry type for the calculated field in CSV file '" + getFullFileName() + "'.", e);
+            }
+        }
+        return fType;
+    }
+
+    static class PointAttributeEmulator implements FeatureAttributeEmulator {
+
+        private static final Logger logger = LoggerFactory.getLogger(ToPointEvaluaror.class);
+
+        private static final int XNAME = 0;
+        private static final int YNAME = 1;
+        private static final int ZNAME = 2;
+
+        private final GeometryManager geommgr;
+        private final String[] fieldNames;
+        private final Coercion toDouble;
+        private final DataType dataType;
+        private int errorcount = 0;
+
+        public PointAttributeEmulator(String[] pointDimensionNames) {
+            if ( pointDimensionNames.length > 2 ) {
+                this.fieldNames = new String[3];
+                this.fieldNames[ZNAME] = pointDimensionNames[2];
+            } else {
+                this.fieldNames = new String[2];
+            }
+            this.fieldNames[XNAME] = pointDimensionNames[0];
+            this.fieldNames[YNAME] = pointDimensionNames[1];
+            this.geommgr = GeometryLocator.getGeometryManager();
+            DataTypesManager datatypeManager = ToolsLocator.getDataTypesManager();
+
+            this.toDouble = datatypeManager.getCoercion(DataTypes.DOUBLE);
+            this.dataType = datatypeManager.get(DataTypes.GEOMETRY);
+        }
+
+        public Object get(Feature feature) {
+            try {
+                Object valueX = feature.get(this.fieldNames[XNAME]);
+                valueX = toDouble.coerce(valueX);
+                if ( valueX == null ) {
+                    return null;
+                }
+                Object valueY = feature.get(this.fieldNames[YNAME]);
+                valueY = toDouble.coerce(valueY);
+                if ( valueY == null ) {
+                    return null;
+                }
+                Object valueZ = null;
+                if ( this.fieldNames.length > 2 ) {
+                    valueZ = toDouble.coerce(feature.get(this.fieldNames[ZNAME]));
+                    if ( valueZ == null ) {
+                        return null;
+                    }
+                }
+
+                double x = ((Double) valueX).doubleValue();
+                double y = ((Double) valueY).doubleValue();
+                Point point = geommgr.createPoint(x, y, Geometry.SUBTYPES.GEOM3D);
+                if ( this.fieldNames.length > 2 ) {
+                    double z = ((Double) valueZ).doubleValue();
+                    point.setCoordinateAt(2, z);
+                }
+                return point;
+            } catch (Exception ex) {
+                if ( ++errorcount < 5 ) {
+                    logger.warn("[" + errorcount + "] Can't create point in CSV provider. XNAME='"
+                            + this.fieldNames[XNAME] + "', YNAME='" + this.fieldNames[XNAME] + "' feature=" + feature.toString(), ex);
+                }
+                return null;
+            }
+        }
+
+        public void set(EditableFeature feature, Object value) {
+            if ( value == null ) {
+                return;
+            }
+            Point point = null;
+            if ( value instanceof MultiPoint ) {
+                point = (Point) ((MultiPoint) value).getPrimitiveAt(0);
+            } else {
+                point = (Point) value;
+            }
+            feature.set(this.fieldNames[XNAME], point.getX());
+            feature.set(this.fieldNames[YNAME], point.getY());
+            if ( this.fieldNames.length > 2 ) {
+                feature.set(this.fieldNames[ZNAME], point.getCoordinateAt(2));
+            }
+        }
+
+        public boolean allowSetting() {
+            return true;
+        }
+
+        public String[] getRequiredFieldNames() {
+            return this.fieldNames;
+        }
+
+    }
+
+    static class ToPointEvaluaror extends AbstractEvaluator {
+
+        private static final Logger logger = LoggerFactory.getLogger(ToPointEvaluaror.class);
+
+        private GeometryManager geommgr = null;
+        private String xname = null;
+        private String yname = null;
+        private String zname = null;
+        private Coercion toDouble;
+        private int errorcount = 0;
+
+        ToPointEvaluaror(String[] pointDimensionNames) {
+            this.xname = pointDimensionNames[0];
+            this.yname = pointDimensionNames[1];
+            if ( pointDimensionNames.length > 2 ) {
+                this.zname = pointDimensionNames[2];
+            }
+            this.geommgr = GeometryLocator.getGeometryManager();
+            this.toDouble = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.DOUBLE);
+        }
+
+        public Object evaluate(EvaluatorData data) throws EvaluatorException {
+            try {
+                double x = ((Double) toDouble.coerce(data.getDataValue(xname))).doubleValue();
+                double y = ((Double) toDouble.coerce(data.getDataValue(yname))).doubleValue();
+                Point point = geommgr.createPoint(x, y, Geometry.SUBTYPES.GEOM3D);
+                if ( zname != null ) {
+                    double z = ((Double) toDouble.coerce(data.getDataValue(zname))).doubleValue();
+                    point.setCoordinateAt(2, z);
+                }
+                return point;
+            } catch (Exception ex) {
+                if ( ++errorcount < 5 ) {
+                    logger.warn("[" + errorcount + "] Can't create point in CSV provider. XNAME='"
+                            + xname + "', YNAME='" + yname + "', ZNAME='" + zname + "', data=" + data.toString());
+                }
+                return null;
+            }
+        }
+
+        public String getName() {
+            return "ToPointEvaluaror";
+        }
+
+    }
+
+    private SimpleReader getSimpleReader(FileReader in) {
+        SimpleReader reader;
+        if ( CSVStoreParameters.getRawFieldsDefinition(getCSVParameters()) != null ) {
+            reader = new FixedLenReader(in, getCSVParameters());
+        } else {
+            reader = new CSVReader(in, getCSVParameters());
+        }
+        return reader;
+    }
+
+    private void loadFeatures() throws IOException, DataException,
+            CoercionException, CloneNotSupportedException {
+        FileReader in = null;
+        SimpleReader reader = null;
+        try {
+            String headers[] = null;
+            FeatureStoreProviderServices store = this.getStoreServices();
+
+            boolean ignore_errors = CSVStoreParameters.getIgnoreErrors(getCSVParameters());
+            
+            in = new FileReader(this.getCSVParameters().getFile());
+
+            reader = getSimpleReader(in);
+
+            headers = CSVStoreParameters.getHeaders(getCSVParameters());
+            if ( headers == null ) {
+                headers = reader.getHeader();
+                if ( headers == null ) {
+                    String msg = "Can't retrieve header from csv file '"
+                            + this.getCSVParameters().getFile()
+                            .getAbsolutePath()
+                            + "' and not specified in the parameters.";
+                    logger.warn(msg);
+                    throw new RuntimeException(msg);
+                }
+            }
+
+            // Initialize the feature types
+            EditableFeatureType edftype = this.getFeatureType(headers, automaticDetectionOfTypes());
+            FeatureType ftype = edftype.getNotEditableCopy();
+            List<FeatureType> ftypes = new ArrayList<FeatureType>();
+            ftypes.add(ftype);
+            store.setFeatureTypes(ftypes, ftype);
+
+            Coercion coercion[] = new Coercion[ftype.size()];
+            int sizes[] = new int[ftype.size()];
+            for ( int i = 0; i < ftype.size(); i++ ) {
+                sizes[i] = -1;
+                FeatureAttributeDescriptor ad = ftype.getAttributeDescriptor(i);
+                coercion[i] = ad.getDataType().getCoercion();
+                if ( ad.getDataType().getType() == DataTypes.STRING ) {
+                    if ( ad.getSize() == 0 ) {
+                        // Es un string y no tiene un size asignado.
+                        // Lo ponemos a cero para calcularlo.
+                        sizes[i] = 0;
+                    }
+                }
+            }
+            if ( ftype.getDefaultGeometryAttributeName() != null ) {
+                this.need_calculate_envelope = true;
+            }
+
+            Locale locale = CSVStoreParameters.getLocale(getCSVParameters());
+            taskStatus.message("_loading");
+            int count = 0;
+
+            int count_errors = 0;
+
+            List<String> row = reader.read();
+
+            int skipLines = CSVStoreParameters.getSkipLines(getCSVParameters());
+            if ( skipLines > 0 ) {
+                row = reader.skip(skipLines);
+            }
+
+            while ( row != null ) {
+                taskStatus.setCurValue(++count);
+                FeatureProvider feature = this.createFeatureProvider(ftype);
+                for ( int i = 0; i < row.size(); i++ ) {
+                    Object rawvalue = row.get(i);
+                    try {
+                        Object value = null;
+                        if ( locale != null && coercion[i] instanceof CoercionWithLocale ) {
+                            value = ((CoercionWithLocale) (coercion[i])).coerce(rawvalue, locale);
+                        } else {
+                            value = coercion[i].coerce(rawvalue);
+                        }
+                        feature.set(i, value);
+                        if ( sizes[i] >= 0 && value != null ) {
+                            int x = ((String) value).length();
+                            if ( sizes[i] < x ) {
+                                sizes[i] = x;
+                            }
+                        }
+                    } catch (RuntimeException ex) {
+                        if ( !ignore_errors ) {
+                            throw ex;
+                        }
+                        if ( count_errors++ < 10 ) {
+                            logger.warn("Can't load value of attribute " + i + " in row " + count + ".", ex);
+                        }
+                        if ( count_errors == 10 ) {
+                            logger.info("Too many errors, suppress messages.");
+                        }
+                    }
+                }
+                this.addFeatureProvider(feature);
+                row = reader.read();
+            }
+            for ( int i = 0; i < ftype.size(); i++ ) {
+                if ( sizes[i] > 0 ) {
+                    EditableFeatureAttributeDescriptor efad = ((EditableFeatureAttributeDescriptor) edftype.getAttributeDescriptor(i));
+                    efad.setSize(sizes[i]);
+                }
+            }
+            // Volvemos a asignar al store el featuretype, ya que puede
+            // haber cambiado.
+            ftype = edftype.getNotEditableCopy();
+            ftypes = new ArrayList<FeatureType>();
+            ftypes.add(ftype);
+            store.setFeatureTypes(ftypes, ftype);
+
+            taskStatus.terminate();
+        } catch(Exception ex) {
+            int lineno = 0;
+            if( reader!=null ) {
+                lineno = reader.getLine();
+            }
+            throw new RuntimeException("Problems reading file '"+getFullFileName()+"' near line "+lineno+".", ex);
+
+        } finally {
+            if ( reader != null ) {
+                try {
+                    reader.close();
+                } catch (Exception ex) {
+                    // Do nothing
+                }
+                reader = null;
+            }
+            if ( in != null ) {
+                try {
+                    in.close();
+                } catch (Exception ex) {
+                    // Do nothing
+                }
+                in = null;
+            }
+        }
+    }
+
+    private int[] automaticDetectionOfTypes() throws IOException {
+        boolean automatic_types_detection = CSVStoreParameters.getAutomaticTypesDetection(getCSVParameters());
+        if ( !automatic_types_detection ) {
+            return null;
+        }
+
+        final int T_INT = 0;
+        final int T_FLOAT = 1;
+        final int T_DOUBLE = 2;
+        final int T_LONG = 3;
+        final int T_URL = 4;
+        final int T_DATE = 5;
+        boolean possibleDataTypes[][] = null;
+        Locale locale = null;
+        int[] types = null;
+
+        FileReader in = null;
+        SimpleReader reader = null;
+        String headers[] = null;
+        SimpleDateFormat dateFormat = new SimpleDateFormat();
+
+        try {
+
+            in = new FileReader(this.getCSVParameters().getFile());
+
+            reader = getSimpleReader(in);
+            headers = reader.getHeader();
+            if ( headers == null ) {
+                headers = CSVStoreParameters.getHeaders(getCSVParameters());
+            }
+            types = new int[headers.length];
+
+            possibleDataTypes = new boolean[headers.length][6];
+            for ( int i = 0; i < possibleDataTypes.length; i++ ) {
+                for ( int j = 0; j < 4; j++ ) {
+                    possibleDataTypes[i][j] = true;
+                }
+            }
+            locale = CSVStoreParameters.getLocale(getCSVParameters());
+            if ( locale == null ) {
+                locale = Locale.getDefault();
+            }
+
+            DataTypesManager typeManager = ToolsLocator.getDataTypesManager();
+            CoercionWithLocale toDouble = (CoercionWithLocale) typeManager.getCoercion(DataTypes.DOUBLE);
+            CoercionWithLocale toFloat = (CoercionWithLocale) typeManager.getCoercion(DataTypes.FLOAT);
+            CoercionWithLocale toDate = (CoercionWithLocale) typeManager.getCoercion(DataTypes.DATE);
+            Coercion toInt = typeManager.getCoercion(DataTypes.INT);
+            Coercion toLong = typeManager.getCoercion(DataTypes.LONG);
+
+            List<String> row = reader.read();
+
+            while ( row != null ) {
+                for ( int i = 0; i < row.size(); i++ ) {
+                    Object rawvalue = row.get(i);
+                    Object value = null;
+                    if ( possibleDataTypes[i][T_DOUBLE] ) {
+                        try {
+                            value = toDouble.coerce(rawvalue, locale);
+                            possibleDataTypes[i][T_DOUBLE] = true;
+                        } catch (Exception ex) {
+                            possibleDataTypes[i][T_DOUBLE] = false;
+                        }
+                    }
+                    if ( possibleDataTypes[i][T_FLOAT] ) {
+                        try {
+                            value = toFloat.coerce(rawvalue, locale);
+                            possibleDataTypes[i][T_FLOAT] = true;
+                        } catch (Exception ex) {
+                            possibleDataTypes[i][T_FLOAT] = false;
+                        }
+                    }
+                    if ( possibleDataTypes[i][T_LONG] ) {
+                        try {
+                            value = toLong.coerce(rawvalue);
+                            possibleDataTypes[i][T_LONG] = true;
+                        } catch (Exception ex) {
+                            possibleDataTypes[i][T_LONG] = false;
+                        }
+                    }
+                    if ( possibleDataTypes[i][T_INT] ) {
+                        try {
+                            value = toInt.coerce(rawvalue);
+                            possibleDataTypes[i][T_INT] = true;
+                        } catch (Exception ex) {
+                            possibleDataTypes[i][T_INT] = false;
+                        }
+                    }
+                    if ( possibleDataTypes[i][T_DATE] ) {
+                        try {
+                            value = toDate.coerce(rawvalue, locale);
+                            possibleDataTypes[i][T_DATE] = true;
+                        } catch (Exception ex) {
+                            possibleDataTypes[i][T_DATE] = false;
+                        }
+                    }
+                    if ( possibleDataTypes[i][T_URL] ) {
+                        try {
+                            value = new URL((String) rawvalue);
+                            possibleDataTypes[i][T_URL] = true;
+                        } catch (Exception ex) {
+                            possibleDataTypes[i][T_URL] = false;
+                        }
+                    }
+                }
+                row = reader.read();
+            }
+        } catch(Exception ex) {
+            int lineno = 0;
+            if( reader!=null ) {
+                lineno = reader.getLine();
+            }
+            throw new RuntimeException("Problems reading file '"+getFullFileName()+"' near line "+lineno+".", ex);
+
+        } finally {
+            if ( reader != null ) {
+                try {
+                    reader.close();
+                } catch (Exception ex) {
+                    // Do nothing
+                }
+                reader = null;
+            }
+            if ( in != null ) {
+                try {
+                    in.close();
+                } catch (Exception ex) {
+                    // Do nothing
+                }
+                in = null;
+            }
+
+        }
+        for ( int i = 0; i < possibleDataTypes.length; i++ ) {
+            if ( possibleDataTypes[i][T_INT] ) {
+                types[i] = DataTypes.INT;
+                continue;
+            }
+            if ( possibleDataTypes[i][T_LONG] ) {
+                types[i] = DataTypes.LONG;
+                continue;
+            }
+            if ( possibleDataTypes[i][T_FLOAT] ) {
+                types[i] = DataTypes.FLOAT;
+                continue;
+            }
+            if ( possibleDataTypes[i][T_DOUBLE] ) {
+                types[i] = DataTypes.DOUBLE;
+                continue;
+            }
+            if ( possibleDataTypes[i][T_URL] ) {
+                types[i] = DataTypes.URL;
+                continue;
+            }
+            if ( possibleDataTypes[i][T_DATE] ) {
+                types[i] = DataTypes.DATE;
+                continue;
+            }
+            types[i] = DataTypes.STRING;
+        }
+        return types;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProviderFactory.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.csv;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class CSVStoreProviderFactory extends AbstractFeatureStoreProviderFactory implements FeatureStoreProviderFactory{
+
+	protected CSVStoreProviderFactory(String name, String description) {
+		super(name, description);
+	}
+
+	public DataStoreProvider createProvider(DataParameters parameters,
+			DataStoreProviderServices providerServices)
+			throws InitializeException {
+		return new CSVStoreProvider((CSVStoreParameters) parameters, providerServices);
+	}
+
+	public DynObject createParameters() {
+		return new CSVStoreParameters();
+	}
+	
+	public int allowCreate() {
+		return NO;
+	}
+	
+	public int allowWrite() {
+		return NO;
+	}
+
+	public int allowRead() {
+		return YES;
+	}
+	
+	public int hasRasterSupport() {
+		return NO;
+	}
+	
+	public int hasTabularSupport() {
+		return YES;
+	}
+	
+	public int hasVectorialSupport() {
+		return YES;
+	}
+
+	public int allowMultipleGeometryTypes() {
+		return YES;
+	}
+	
+	public int allowEditableFeatureType() {
+		return NO;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreParameters.java	(revision 42196)
@@ -0,0 +1,428 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.File;
+import java.util.Locale;
+import org.apache.commons.lang3.BooleanUtils;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.OpenDataStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.supercsv.prefs.CsvPreference;
+import org.supercsv.quote.AlwaysQuoteMode;
+import org.supercsv.quote.NormalQuoteMode;
+import org.supercsv.quote.QuoteMode;
+
+public class CSVStoreParameters extends AbstractDataParameters implements
+        OpenDataStoreParameters, FilesystemStoreParameters {
+
+    private static final Logger logger = LoggerFactory.getLogger(CSVStoreParameters.class);
+
+    public static final String PARAMETERS_DEFINITION_NAME = "CSVStoreParameters";
+
+    private static final String FILE = "file";
+    private static final String IGNOREERRORS = "ignoreErrors";
+    private static final String PROFILE = "profile";
+    private static final String QUOTEPOLICY = "quotePolicy";
+    private static final String QUOTECHAR = "quoteCharacter";
+    private static final String RECORDSEPARATOR = "recordSeparator";
+    private static final String DELIMITER = "delimiter";
+    private static final String COMMENTSTARTMARKER = "commentStartMarker";
+    private static final String AUTOMATICTYPESDETECTION = "automaticTypesDetection";
+
+    //private static final String ESCAPECHARACTER = "escapeCharacter";
+    private static final String HEADER = "header";
+    private static final String SURROUNDINGSPACESNEEDQUOTES = "surroundingSpacesNeedQuotes";
+
+    //private static final String IGNOREEMPTYLINES = "ignoreEmptyLines";
+    private static final String CRS = "CRS";
+    private static final String FIELDTYPES = "fieldtypes";
+//    private static final String NULLTO = "nullTo";
+    private static final String CHARSET = "charset"; // Default "UTF-8"
+    private static final String LOCALE = "locale";
+
+    private DelegatedDynObject parameters;
+
+    public CSVStoreParameters() {
+        this(PARAMETERS_DEFINITION_NAME);
+    }
+
+    protected CSVStoreParameters(String parametersDefinitionName) {
+        this(parametersDefinitionName, CSVStoreProvider.NAME);
+    }
+
+    public CSVStoreParameters(String parametersDefinitionName, String name) {
+        super();
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(parametersDefinitionName);
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
+    }
+
+    public String getDataStoreName() {
+        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+
+    public String getDescription() {
+        return this.getDynClass().getDescription();
+    }
+
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+    public boolean isValid() {
+        if ( getFileName(this) == null ) {
+            return false;
+        }
+        return true;
+    }
+
+    public File getFile() {
+        return (File) this.getDynValue(FILE);
+    }
+
+    public void setFile(File file) {
+        this.setDynValue(FILE, file);
+    }
+
+    public static CsvPreference getPredefinedCSVPreferences(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(PROFILE);
+        if ( "NONE".equalsIgnoreCase(s) ) {
+            return null;
+        }
+        if ( "STANDARD_PREFERENCE".equalsIgnoreCase(s) ) {
+            return CsvPreference.STANDARD_PREFERENCE;
+        }
+        if ( "EXCEL_PREFERENCE".equalsIgnoreCase(s) ) {
+            return CsvPreference.EXCEL_PREFERENCE;
+        }
+        if ( "EXCEL_NORTH_EUROPE_PREFERENCE".equalsIgnoreCase(s) ) {
+            return CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE;
+        }
+        if ( "TAB_PREFERENCE".equalsIgnoreCase(s) ) {
+            return CsvPreference.TAB_PREFERENCE;
+        }
+        return null;
+    }
+
+    public static QuoteMode getQuoteMode(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(QUOTEPOLICY);
+        if ( "AlwaysQuoteMode".equalsIgnoreCase(s) ) {
+            return new AlwaysQuoteMode();
+        }
+        if ( "NormalQuoteMode".equalsIgnoreCase(s) ) {
+            return new NormalQuoteMode();
+        }
+        return null;
+    }
+
+    static IProjection getCRS(DynObject dynobj) {
+        return (IProjection) dynobj.getDynValue(CRS);
+    }
+
+    static String getFileName(DynObject dynobj) {
+        File f = (File) dynobj.getDynValue(FILE);
+        if ( f == null ) {
+            return null;
+        }
+        return f.getPath();
+    }
+
+    static File getFile(DynObject dynobj) {
+        File f = (File) dynobj.getDynValue(FILE);
+        return f;
+    }
+
+    public static String getRecordSeparator(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(RECORDSEPARATOR);
+        return StringEscapeUtils.unescapeJava(s);
+    }
+
+    static Locale getLocale(DynObject dynobj) {
+        try {
+            String s = (String) dynobj.getDynValue(LOCALE);
+            if ( s.trim().length() == 0 ) {
+                return null;
+            }
+            if ( "DEFAULT".equalsIgnoreCase(s.trim()) ) {
+                return Locale.getDefault();
+            }
+            Locale locale = null;
+            // locale = Locale.forLanguageTag(s); // Since java 1.7
+            String[] ss = s.split("-");
+            switch (ss.length) {
+            case 1:
+                locale = new Locale(ss[0]);
+                break;
+            case 2:
+                locale = new Locale(ss[0], ss[1]);
+                break;
+            case 3:
+            default:
+                locale = new Locale(ss[0], ss[1], ss[2]);
+                break;
+            }
+            return locale;
+        } catch (Exception ex) {
+            logger.warn("Can't get locale from CSV parameters.", ex);
+            return null;
+        }
+    }
+
+    public static String getCommentStartMarker(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(COMMENTSTARTMARKER);
+        return StringEscapeUtils.unescapeJava(s);
+    }
+
+    public static String getQuoteCharacter(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(QUOTECHAR);
+        s = StringEscapeUtils.unescapeJava(s);
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.substring(0, 1);
+    }
+
+    public static String getDelimiter(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(DELIMITER);
+        s = StringEscapeUtils.unescapeJava(s);
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.substring(0, 1);
+    }
+
+    static String getHeader(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(HEADER);
+        s = StringEscapeUtils.unescapeJava(s);
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s;
+    }
+
+    static String[] getHeaders(DynObject dynobj) {
+        String s = getHeader(dynobj);
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        String sep = getDelimiter(dynobj);
+        if ( sep == null ) {
+            sep = getDelimiter(s);
+            if ( sep == null ) {
+                // Chungo
+                return null;
+            }
+        }
+        String[] ss = s.split("[" + sep + "]");
+        return ss;
+    }
+
+    static String getDelimiter(String line) {
+        if( StringUtils.isBlank(line) ) {
+            return null;
+        }
+        String sep = null;
+        // Cuidado con los ":", los he puesto al final a proposito
+        // ya que podian estar en la cadena para separar el size
+        // de cada tipo.
+        String seps = ",;-|@#/+$%&!:";
+        for ( int i = 0; i < seps.length(); i++ ) {
+            sep = seps.substring(i, 1);
+            if ( line.contains(seps.substring(i, 1)) ) {
+                break;
+            }
+            sep = null;
+        }
+        return sep;
+    }
+
+    static String getCharset(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(CHARSET);
+        return StringEscapeUtils.unescapeJava(s);
+    }
+
+    static String[] getPointDimensionNames(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue("point");
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.split(",");
+    }
+
+    public static boolean getSurroundingSpacesNeedQuotes(DynObject dynobj) {
+        Boolean b = (Boolean) dynobj.getDynValue(SURROUNDINGSPACESNEEDQUOTES);
+        return BooleanUtils.isTrue(b);
+    }
+
+    static boolean getAutomaticTypesDetection(DynObject dynobj) {
+        Boolean b = (Boolean) dynobj.getDynValue(AUTOMATICTYPESDETECTION);
+        return BooleanUtils.isTrue(b);
+    }
+
+    static boolean getIgnoreErrors(DynObject dynobj) {
+        Boolean b = (Boolean) dynobj.getDynValue(IGNOREERRORS);
+        return BooleanUtils.isTrue(b);
+    }
+
+//    static int[] getFieldTypes(DynObject dynobj) {
+//        String s = (String) dynobj.getDynValue(FIELDTYPES);
+//        if ( StringUtils.isBlank(s) ) {
+//            return null;
+//        }
+//        String sep = getDelimiter(s);
+//        if ( sep == null ) {
+//            return null;
+//        }
+//        DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager();
+//        String fieldTypeNames[] = s.split("[" + sep + "]");
+//        int fieldTypes[] = new int[fieldTypeNames.length];
+//        for ( int i = 0; i < fieldTypeNames.length; i++ ) {
+//            s = fieldTypeNames[i].trim();
+//            if ( s.contains(":") ) {
+//                s = s.split(":")[0];
+//            }
+//            fieldTypes[i] = dataTypeManager.getType(s);
+//        }
+//        return fieldTypes;
+//    }
+//
+//    static int[] getFieldSizes(DynObject dynobj) {
+//        String s = (String) dynobj.getDynValue(FIELDTYPES);
+//        if ( StringUtils.isBlank(s) ) {
+//            return null;
+//        }
+//        String sep = getDelimiter(s);
+//        if ( sep == null ) {
+//            return null;
+//        }
+//        DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager();
+//        String fieldTypeNames[] = s.split("[" + sep + "]");
+//        int fieldSizes[] = new int[fieldTypeNames.length];
+//        for ( int i = 0; i < fieldTypeNames.length; i++ ) {
+//            String fieldtypeDef = fieldTypeNames[i].trim();
+//            if ( fieldtypeDef.contains(":") ) {
+//                try {
+//                    String[] parts = fieldtypeDef.split(":");
+//                    int fieldType = dataTypeManager.getType(parts[0]);
+//                    if( fieldType == DataTypes.GEOMETRY ) {
+//                        fieldSizes[i] = 1;
+//                    } else {
+//                        s = parts[1];
+//                        fieldSizes[i] = Integer.parseInt(s);
+//                    }
+//                } catch (Exception ex) {
+//                    logger.warn("Can't get size of field " + i + " (" + fieldtypeDef + ").", ex);
+//                }
+//            } else {
+//                fieldSizes[i] = 0;
+//            }
+//        }
+//        return fieldSizes;
+//    }
+
+    static String getRawFieldTypes(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(FIELDTYPES);
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.trim();
+    }
+
+    static int getSkipLines(DynObject dynobj) {
+        Integer n = (Integer) dynobj.getDynValue("skipLines");
+        if ( n == null ) {
+            return 0;
+        }
+        return new Integer(n);
+    }
+
+    static String getRawFieldsDefinition(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue("fieldsDefinition");
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.trim();
+    }
+
+    public static class FieldDefinition {
+
+        private int start;
+        private int end;
+
+        public FieldDefinition(String def) {
+            def = def.trim();
+            String[] ss = def.split(":");
+            this.start = Integer.parseInt(ss[0])-1;
+            if ( ss.length < 2 ) {
+                this.end = -1;
+            } else {
+                this.end = Integer.parseInt(ss[1])-1;
+            }
+        }
+
+        public int getStart() {
+            return this.start;
+        }
+
+        public int getEnd() {
+            return this.end;
+        }
+
+        public boolean getToEndOfLine() {
+            return this.end == -1;
+        }
+    }
+
+    public static FieldDefinition[] getFieldsDefinition(DynObject dynobj) {
+        String definition = getRawFieldsDefinition(dynobj);
+        if ( definition == null ) {
+            return null;
+        }
+        int i=0;
+        try {
+            String[] defs = StringUtils.split(definition);
+            FieldDefinition[] fieldsDefinition = new FieldDefinition[defs.length];
+            for ( i = 0; i < defs.length; i++ ) {
+                fieldsDefinition[i] = new FieldDefinition(defs[i]);
+            }
+            return fieldsDefinition;
+        } catch (Exception ex) {
+            throw  new IllegalArgumentException("Can't recognize the format field definition '"+definition+"' ("+i+").");
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/SimpleReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/SimpleReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/SimpleReader.java	(revision 42196)
@@ -0,0 +1,17 @@
+package org.gvsig.fmap.dal.store.csv.simplereaders;
+
+import java.io.IOException;
+import java.util.List;
+
+public interface SimpleReader {
+
+    public String[] getHeader() throws IOException;
+
+    public List<String> read() throws IOException;
+
+    public void close() throws IOException;
+
+    public List<String> skip(int lines) throws IOException;
+    
+    public int getLine();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/CSVReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/CSVReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/CSVReader.java	(revision 42196)
@@ -0,0 +1,137 @@
+package org.gvsig.fmap.dal.store.csv.simplereaders;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.store.csv.CSVStoreParameters;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.supercsv.comment.CommentStartsWith;
+import org.supercsv.io.CsvListReader;
+import org.supercsv.prefs.CsvPreference;
+import org.supercsv.quote.QuoteMode;
+
+public class CSVReader implements SimpleReader {
+
+    //
+    // http://supercsv.sourceforge.net/examples_reading.html
+    // http://supercsv.sourceforge.net/apidocs/index.html
+    //
+    private static final Logger logger = LoggerFactory.getLogger(CSVReader.class);
+    CsvListReader reader;
+    private CSVStoreParameters parameters;
+
+    public CSVReader(FileReader in, CSVStoreParameters parameters) {
+        this.parameters = parameters;
+        CsvPreference preferences = getCSVPreferences();
+        this.reader = new CsvListReader(in, preferences);
+    }    
+    
+    public CSVReader(CSVStoreParameters parameters) {
+        this.parameters = parameters;
+        CsvPreference preferences = getCSVPreferences();
+        this.reader = null;
+    }
+
+    public CSVStoreParameters getParameters() {
+        return this.parameters;
+    }
+
+    public String[] getHeader() throws IOException {
+        return this.reader.getHeader(true);
+    }
+
+    public List<String> read() throws IOException {
+        return reader.read();
+    }
+
+    public void close() throws IOException {
+        this.reader.close();
+    }
+
+    public List<String> skip(int lines) throws IOException {
+        List<String> row = null;
+        for ( int i = 0; i < lines; i++ ) {
+            row = reader.read();
+        }
+        return row;
+    }
+
+    public CsvPreference getCSVPreferences() {
+        try {
+            String s = null;
+            char quoteChar;
+            int delimiterChar;
+            String endOfLineSymbols;
+
+            DynObject params = this.getParameters();
+
+            CsvPreference.Builder builder = null;
+
+            CsvPreference defaultPreference = CSVStoreParameters
+                    .getPredefinedCSVPreferences(params);
+            if ( defaultPreference == null ) {
+                defaultPreference = CsvPreference.STANDARD_PREFERENCE;
+            }
+
+            endOfLineSymbols = CSVStoreParameters.getRecordSeparator(params);
+            if ( StringUtils.isBlank(endOfLineSymbols) ) {
+                endOfLineSymbols = defaultPreference.getEndOfLineSymbols();
+            }
+            s = CSVStoreParameters.getQuoteCharacter(params);
+            if ( StringUtils.isBlank(s) ) {
+                quoteChar = (char) defaultPreference.getQuoteChar();
+            } else {
+                quoteChar = s.charAt(0);
+            }
+            s = CSVStoreParameters.getDelimiter(params);
+            if ( StringUtils.isBlank(s) ) {
+                delimiterChar = defaultPreference.getDelimiterChar();
+            } else {
+                delimiterChar = s.charAt(0);
+            }
+
+            builder = new CsvPreference.Builder(quoteChar, delimiterChar,
+                    endOfLineSymbols);
+
+            s = CSVStoreParameters.getCommentStartMarker(params);
+            if ( !StringUtils.isBlank(s) ) {
+                CommentStartsWith cs = new CommentStartsWith(s);
+                builder.skipComments(cs);
+            }
+
+            builder.surroundingSpacesNeedQuotes(CSVStoreParameters
+                    .getSurroundingSpacesNeedQuotes(params));
+            QuoteMode quoteMode = CSVStoreParameters.getQuoteMode(params);
+            if ( quoteMode != null ) {
+                builder.useQuoteMode(quoteMode);
+            }
+            return builder.build();
+        } catch (Exception e) {
+            logger.warn("Can't make preferences for CSV '" + getFullFileName()
+                    + "'.", e);
+            return null;
+        }
+    }
+    
+    private String getFullFileName() {
+        // Usar solo para mostrar mensajes en el logger.
+        String s = "(unknow)";
+        try {
+            s = getParameters().getFile().getAbsolutePath();
+        } catch (Exception e2) {
+            s = "(unknow)";
+        }
+        return s;        
+    }
+
+    public int getLine() {
+        if( this.reader==null ) {
+            return 0;
+        }
+        return this.reader.getLineNumber();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/FixedLenReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/FixedLenReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/FixedLenReader.java	(revision 42196)
@@ -0,0 +1,99 @@
+
+package org.gvsig.fmap.dal.store.csv.simplereaders;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.fmap.dal.store.csv.CSVStoreParameters;
+
+
+public class FixedLenReader implements SimpleReader {
+
+    BufferedReader reader = null;
+    CSVStoreParameters.FieldDefinition fieldsDefinition[] = null;
+    List fields = null;
+    private final int fieldCount;
+//    private final CSVStoreParameters parameters;
+    private final String commentStartMarker;
+    private int currentLine =1;
+
+    public FixedLenReader(FileReader reader, CSVStoreParameters parameters) {
+//        this.parameters = parameters;
+        this.reader = new BufferedReader(reader);
+        this.fieldsDefinition = CSVStoreParameters.getFieldsDefinition(parameters);
+        this.fieldCount = this.fieldsDefinition.length;
+        this.fields = new ArrayList(this.fieldCount);
+        for( int i=0; i<this.fieldCount; i++ ) {
+            this.fields.add(null);
+        }
+        this.commentStartMarker = CSVStoreParameters.getCommentStartMarker(parameters);
+    }
+
+    public String[] getHeader() throws IOException {
+        String[] header = new String[this.fieldCount];
+        for( int i=0; i<this.fieldCount; i++ ) {
+            header[i] = Character.toString((char) (i+'A')).toUpperCase();
+        }
+        return header;
+    }
+
+    public List<String> read() throws IOException {
+        String line = this.reader.readLine();
+        this.currentLine++;
+        while( line!=null && this.commentStartMarker!=null && line.startsWith(this.commentStartMarker) ) {
+            line = this.reader.readLine();
+            this.currentLine++;
+        }
+        return this.parse(line);
+    }
+
+    public List<String> parse(String line) throws IOException {
+        if( line == null ) {
+            return null;
+        }
+        for ( int i = 0; i < this.fieldCount; i++ ) {
+            CSVStoreParameters.FieldDefinition fieldDefinition = this.fieldsDefinition[i];
+            String value = null;
+            try {
+                if ( fieldDefinition.getToEndOfLine() ) {
+                    value = line.substring(fieldDefinition.getStart());
+                } else {
+                    value = line.substring(
+                            fieldDefinition.getStart(),
+                            fieldDefinition.getEnd()
+                    );
+                }
+            } catch(Exception ex) {
+                // Ignore errors
+                // Probablemente por que las lineas no tienen tantos caracteres como
+                // se han indicado en la definicion.
+            }
+            this.fields.set(i, value);
+        }
+        return this.fields;
+    }
+
+    public void close() throws IOException {
+        this.reader.close();
+        this.reader = null;
+    }
+
+    public List<String> skip(int lines) throws IOException {
+        String line = null;
+        for ( int i = 0; i < lines; i++ ) {
+            line = this.reader.readLine();
+            this.currentLine++;
+            while( line!=null && this.commentStartMarker!=null && line.startsWith(this.commentStartMarker) ) {
+                line = this.reader.readLine();
+                this.currentLine++;
+            }
+        }
+        return this.parse(line);
+    }
+
+    public int getLine() {
+        return this.currentLine;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/pom.xml	(revision 42196)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.file.csv</artifactId>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <dependencies>
+    <dependency>
+        <groupId>commons-io</groupId>
+        <artifactId>commons-io</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+	  <groupId>org.apache.commons</groupId>
+	  <artifactId>commons-lang3</artifactId>
+      <scope>compile</scope>
+    </dependency>
+	<dependency>
+	  <groupId>net.sf.supercsv</groupId>
+	  <artifactId>super-csv</artifactId>
+      <scope>compile</scope>
+	</dependency>
+
+  </dependencies>
+
+  <build>
+      <plugins>
+          <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-compiler-plugin</artifactId>
+              <configuration>
+                  <source>1.5</source>
+                  <target>1.5</target>
+                  <encoding>ISO-8859-1</encoding>
+              </configuration>
+          </plugin>
+    
+      </plugins>
+  </build>
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv
___________________________________________________________________
Added: svn:ignore
   + .settings

.classpath

.project

target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/data/pruebaNull.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/data/pruebaNull.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/data/prueba.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/data/prueba.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/JoinTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/JoinTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/JoinTransform.java	(revision 42196)
@@ -0,0 +1,376 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class JoinTransform extends AbstractFeatureStoreTransform {
+
+	/**
+	 * Store from which the join transform will get the additional attributes
+	 */
+	private FeatureStore store2;
+
+	/**
+	 * name of the key attr in store1 that will be used to match features in
+	 * store2
+	 */
+	private String keyAttr1;
+
+	/**
+	 * name of the key attr in store2 that will be used to match features in
+	 * store1
+	 */
+	private String keyAttr2;
+
+	/**
+	 * names of the attributes to join from store2 to store1
+	 */
+	private String[] attrs;
+
+	/**
+	 * Attribute names may change after transformation if they are repeated in
+	 * both stores. This map keeps correspondence between store2 original names
+	 * and their transformed counterparts.
+	 */
+	private Map targetNamesMap;
+
+	private JoinTransformEvaluator evaluator = null;
+
+	private FeatureType originalFeatureType;
+
+	private String[] attrsForQuery;
+
+	private String prefix1;
+
+	private String prefix2;
+
+	/**
+	 * A default constructor
+	 */
+	public JoinTransform() {
+		targetNamesMap = new HashMap();
+	}
+
+	/**
+	 * Initializes all the necessary data for this transform
+	 *
+	 * @param store1
+	 *            store whose default feature type is the target of this
+	 *            transform
+	 *
+	 * @param store2
+	 *            store whose default feature type will provide the new
+	 *            attributes to join
+	 *
+	 * @param keyAttr1
+	 *            key attribute in store1 that matches keyAttr2 in store2
+	 *            (foreign key), used for joining both stores.
+	 *
+	 * @param keyAttr2
+	 *            key attribute in store2 that matches keyAttr1 in store2
+	 *            (foreign key), used for joining both stores.
+	 *
+	 * @param attrs
+	 *            names of the attributes in store2 that will be joined to
+	 *            store1.
+	 */
+	public void initialize(FeatureStore store1, FeatureStore store2,
+			String keyAttr1, String keyAttr2, String prefix1, String prefix2,
+			String[] attrs)
+			throws DataException {
+
+		if (store1 == store2) {
+			throw new IllegalArgumentException("store1 == store2");
+		}
+
+		// Initialize needed data
+		this.setFeatureStore(store1);
+		this.store2 = store2;
+		this.keyAttr1 = keyAttr1;
+		this.keyAttr2 = keyAttr2;
+		this.prefix1 = prefix1; // TODO
+		this.prefix2 = prefix2; // TODO
+		this.attrs = attrs;
+
+		// calculate this transform resulting feature type
+		// by adding all specified attrs from store2 to store1's default
+		// feature type
+		// FIXME for more than one FTypes ??
+		this.originalFeatureType = this.getFeatureStore()
+				.getDefaultFeatureType();
+
+		// TODO tener en cuenta prefix1
+		EditableFeatureType type = this.getFeatureStore().getDefaultFeatureType().getEditable();
+
+		FeatureType type2 = store2.getDefaultFeatureType();
+
+		// TODO tener en cuenta prefix2
+		for (int i = 0; i < attrs.length; i++) {
+			String name = attrs[i];
+
+			// If an attribute already exists with the same name in store1's
+			// default feature type,
+			// calculate an alternate name and add it to our type
+			int j = 0;
+			while (type.getIndex(name) >= 0) {
+				name = attrs[i] + "_" + ++j;
+			}
+			type.add(name,
+					type2.getAttributeDescriptor(attrs[i]).getType());
+
+			// keep correspondence between original name and transformed name
+			this.targetNamesMap.put(attrs[i], name);
+		}
+		if (this.targetNamesMap.containsKey(keyAttr2)) {
+			this.attrsForQuery = this.attrs;
+		} else {
+			ArrayList list = new ArrayList(this.attrs.length + 1);
+			list.addAll(Arrays.asList(this.attrs));
+			list.add(keyAttr2);
+			this.attrsForQuery = (String[]) list.toArray(new String[] {});
+		}
+
+		// assign calculated feature type as this transform's feature type
+		FeatureType[] types = new FeatureType[] { type.getNotEditableCopy() };
+		setFeatureTypes(Arrays.asList(types), types[0]);
+	}
+
+	/**
+	 *
+	 *
+	 * @param source
+	 *
+	 * @param target
+	 *
+	 * @throws DataException
+	 */
+	public void applyTransform(Feature source, EditableFeature target)
+			throws DataException {
+
+		// copy the data from store1 into the resulting feature
+		this.copySourceToTarget(source, target);
+
+		// ask store2 for the specified attributes, filtering by the key
+		// attribute value
+		// from the source feature
+		JoinTransformEvaluator eval = this.getEvaluator();
+		eval.updateValue(source.get(this.keyAttr1));
+
+		FeatureQuery query = this.getFeatureStore().createFeatureQuery();
+		query.setAttributeNames(attrsForQuery);
+		query.setFilter(eval);
+
+		FeatureSet set = store2.getFeatureSet(query);
+
+		// In this join implementation, we will take only the first matching
+		// feature found in store2
+
+		FeatureAttributeDescriptor attr;
+		Feature feat;
+		String targetName;
+
+		Iterator itAttr;
+
+		DisposableIterator itFeat = set.iterator();
+		if (itFeat.hasNext()) {
+			feat = (Feature) itFeat.next();
+
+			// copy all attributes from joined feature to target
+			this.copyJoinToTarget(feat, target);
+		}
+		itFeat.dispose();
+		set.dispose();
+	}
+
+	/**
+	 * @param feat
+	 * @param target
+	 */
+	private void copyJoinToTarget(Feature join, EditableFeature target) {
+		Iterator iter = targetNamesMap.entrySet()
+				.iterator();
+		Entry entry;
+		FeatureType trgType = target.getType();
+		FeatureAttributeDescriptor attr;
+		while (iter.hasNext()) {
+			entry = (Entry) iter.next();
+			attr = trgType.getAttributeDescriptor((String) entry.getValue());
+			if (attr != null) {
+				target.set(attr.getIndex(), join.get((String) entry.getKey()));
+			}
+		}
+
+
+	}
+
+	/**
+	 * @param source
+	 * @param target
+	 */
+	private void copySourceToTarget(Feature source, EditableFeature target) {
+		FeatureAttributeDescriptor attr, attrTrg;
+		FeatureType ftSrc = source.getType();
+		FeatureType ftTrg = target.getType();
+
+
+		for (int i = 0; i < source.getType().size(); i++) {
+			attr = ftSrc.getAttributeDescriptor(i);
+			if (ftTrg.getIndex(attr.getName()) > -1) {
+				try {
+					target.set(attr.getName(), source.get(i));
+				} catch (IllegalArgumentException e) {
+					attrTrg = ftTrg.getAttributeDescriptor(attr.getName());
+					target.set(attrTrg.getIndex(), attrTrg.getDefaultValue());
+				}
+
+			}
+		}
+
+	}
+
+	private JoinTransformEvaluator getEvaluator() {
+		if (this.evaluator == null){
+			this.evaluator = new JoinTransformEvaluator(keyAttr2);
+		}
+		return evaluator;
+
+	}
+
+	private class JoinTransformEvaluator implements Evaluator {
+
+		private String attribute;
+		private Object value;
+		private String sql;
+		private EvaluatorFieldsInfo info = null;
+
+		//		private int attributeIndex;
+
+		public JoinTransformEvaluator(String attribute) {
+			this.attribute = attribute;
+			this.value = null;
+			this.info = new EvaluatorFieldsInfo();
+
+			//			this.attributeIndex = attrIndex;
+		}
+
+		public void updateValue(Object value) {
+			this.value = value;
+			this.sql = this.attribute + "= '" + this.value + "'";
+			this.info = new EvaluatorFieldsInfo();
+			this.info.addMatchFieldValue(this.attribute, value);
+		}
+
+		public Object evaluate(EvaluatorData arg0) throws EvaluatorException {
+			Object curValue = arg0.getDataValue(attribute);
+			if (curValue == null) {
+				return new Boolean(value == null);
+			}
+			return new Boolean(curValue.equals(value));
+		}
+
+		public String getSQL() {
+			return this.sql;
+		}
+
+		public String getDescription() {
+			return "Evaluates join transform match";
+		}
+
+		public String getName() {
+			return "JoinTransformEvaluator";
+		}
+
+		public EvaluatorFieldsInfo getFieldsInfo() {
+			return this.info;
+		}
+
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureType getSourceFeatureTypeFrom(FeatureType arg0) {
+		EditableFeatureType orgType = originalFeatureType.getEditable();
+		Iterator iter = arg0.iterator();
+		FeatureAttributeDescriptor attr;
+		ArrayList toRetain = new ArrayList();
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			if (this.targetNamesMap.containsValue(attr.getName())) {
+				continue;
+			}
+			toRetain.add(attr.getName());
+		}
+
+		if (!toRetain.contains(keyAttr1)) {
+			toRetain.add(keyAttr1);
+		}
+
+		iter = originalFeatureType.iterator();
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			if (!toRetain.contains(attr.getName())) {
+				orgType.remove(attr.getName());
+			}
+
+		}
+
+		return orgType.getNotEditableCopy();
+	}
+
+	public boolean isTransformsOriginalValues() {
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/JoinTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/TestDBF.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/TestDBF.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/TestDBF.java	(revision 42196)
@@ -0,0 +1,158 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.BaseTestEditableFeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+
+public class TestDBF extends BaseTestEditableFeatureStore {
+
+	public static final File dbf_prueba = new File(TestDBF.class.getResource(
+			"data/prueba.dbf").getFile());
+	public static final File dbf_prueba_destino= new File(TestDBF.class.getResource(
+			"data").getFile()+"/pruebaTemp.dbf");
+	public static final File dbf_pruebaNull = new File(TestDBF.class
+			.getResource("data/pruebaNull.dbf").getFile());
+
+	private FilesystemServerExplorer myExplorer = null;
+
+	public DataStoreParameters getDefaultDataStoreParameters() throws DataException {
+		DBFStoreParameters dbfParameters = null;
+		dbfParameters = (DBFStoreParameters) dataManager
+				.createStoreParameters(DBFStoreProvider.NAME);
+
+		dbfParameters.setFile(dbf_prueba);
+
+		return dbfParameters;
+	}
+
+	public void testExplorerList() throws Exception {
+		this.testExplorerList(2);
+	}
+
+	public void testJoin() throws Exception {
+		DBFStoreParameters dbfParameters = null;
+		FeatureStore store1, store2;
+
+		dbfParameters = (DBFStoreParameters) dataManager
+				.createStoreParameters(DBFStoreProvider.NAME);
+
+		dbfParameters.setFile(dbf_prueba);
+
+		store1 = (FeatureStore) dataManager.createStore(dbfParameters);
+		store2 = (FeatureStore) dataManager.createStore(dbfParameters);
+
+		JoinTransform join = new JoinTransform();
+
+		ArrayList names = new ArrayList();// <String>
+		Iterator iter = store2.getDefaultFeatureType().iterator();// <FeatureAttributeDescriptor>
+		while (iter.hasNext()) {
+			names.add(((FeatureAttributeDescriptor) iter.next()).getName());
+		}
+
+		join.initialize(store1, store2, "NOMBRE", "NOMBRE", null, null,
+				(String[]) names.toArray(new String[0]));
+		store1.getTransforms().add(join);
+
+		this.testSimpleIteration(store1);
+
+		FeatureQuery query = store1.createFeatureQuery();
+		FeatureType ftFinal = store1.getDefaultFeatureType();
+		String[] queryNames = new String[] {
+				ftFinal.getAttributeDescriptor(0).getName(),
+				ftFinal.getAttributeDescriptor(1).getName(),
+				ftFinal.getAttributeDescriptor(ftFinal.size() - 1).getName() };
+		query.setAttributeNames(queryNames);
+
+		this.testSimpleIteration(store1, query);
+
+		queryNames = new String[] {
+				ftFinal.getAttributeDescriptor(ftFinal.size() - 1).getName(),
+				ftFinal.getAttributeDescriptor(1).getName(),
+				ftFinal.getAttributeDescriptor(0).getName(),
+				ftFinal.getAttributeDescriptor(ftFinal.size() - 2).getName() };
+
+		query.setAttributeNames(queryNames);
+		this.testSimpleIteration(store1, query);
+
+		store1.dispose();
+		store2.dispose();
+
+
+
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#hasExplorer()
+	 */
+	public boolean hasExplorer() {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @seeorg.gvsig.fmap.dal.feature.BaseTestEditableFeatureStore#
+	 * getDefaultNewDataStoreParameters()
+	 */
+	public NewFeatureStoreParameters getDefaultNewDataStoreParameters()
+			throws Exception {
+		if (this.myExplorer == null) {
+			DBFStoreParameters dbfParameters = (DBFStoreParameters) this
+					.getDefaultDataStoreParameters();
+			FeatureStore store = (FeatureStore) dataManager
+					.createStore(dbfParameters);
+			myExplorer = (FilesystemServerExplorer) store.getExplorer();
+			store.dispose();
+		}
+
+		return (NewFeatureStoreParameters) myExplorer
+				.getAddParameters(dbf_prueba_destino);
+	}
+
+	public boolean usesResources() {
+		return true;
+	}
+
+	@Override
+	public boolean resourcesNotifyChanges() {
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/store/dbf/TestDBF.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/explorer/filesystem/FileSystemExplorerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/explorer/filesystem/FileSystemExplorerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/explorer/filesystem/FileSystemExplorerTest.java	(revision 42196)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.explorer.filesystem;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreProvider;
+import org.gvsig.fmap.dal.store.dbf.TestDBF;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+public class FileSystemExplorerTest extends AbstractLibraryAutoInitTestCase {
+
+	private static DataManager dataManager = null;
+	public static final File dbf_data = new File(TestDBF.class.getResource(
+			"data/prueba.dbf").getFile()).getParentFile();
+
+	protected void doSetUp() throws Exception {
+		dataManager = DALLocator.getDataManager();
+	}
+
+	public void testList() throws Exception {
+		FilesystemServerExplorerParameters exParam = (FilesystemServerExplorerParameters) dataManager
+				.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+
+		exParam.setRoot(dbf_data.getPath());
+
+		DataServerExplorer ex = dataManager.createServerExplorer(exParam);
+
+		List list = ex.list();
+
+		assertEquals(2, list.size());
+
+		if (((FilesystemStoreParameters) list.get(0)).getFile().getPath()
+				.equals(TestDBF.dbf_prueba.getPath())) {
+			assertEquals(((FilesystemStoreParameters) list.get(1)).getFile()
+					.getPath(), TestDBF.dbf_pruebaNull.getPath());
+
+		} else {
+			assertEquals(((FilesystemStoreParameters) list.get(0)).getFile()
+					.getPath(), TestDBF.dbf_pruebaNull.getPath());
+			assertEquals(((FilesystemStoreParameters) list.get(1)).getFile()
+					.getPath(), TestDBF.dbf_prueba.getPath());
+		}
+
+		Iterator iter = list.iterator();
+		TestDBF testDBF = new TestDBF();
+		while (iter.hasNext()) {
+			testDBF.testSimpleIteration((DBFStoreParameters) iter.next());
+		}
+
+
+
+	}
+
+	private boolean deleteDir(File dir) {
+		File[] files = dir.listFiles();
+		for (int i = 0; i < files.length; i++) {
+			if (files[i].isDirectory()) {
+				if (!deleteDir(files[i])) {
+					return false;
+				}
+			}
+			if (!files[i].delete()) {
+				return false;
+			}
+		}
+		return dir.delete();
+	}
+
+	public void testAddRemove() throws Exception {
+		File tmpDir = new File("target/_FilesystemExplorer.tmp");
+
+		if (tmpDir.exists()) {
+			if (!deleteDir(tmpDir)) {
+				fail("Clean tmp dir:" + tmpDir.getAbsolutePath());
+			}
+		}
+
+		tmpDir.mkdir();
+
+		FilesystemServerExplorerParameters exParam = (FilesystemServerExplorerParameters) dataManager
+				.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+
+		exParam.setRoot(tmpDir.getAbsolutePath());
+
+		DataServerExplorer ex = dataManager.createServerExplorer(exParam);
+
+		assertTrue(ex.canAdd());
+
+		assertTrue(ex.canAdd(DBFStoreProvider.NAME));
+
+		assertEquals(0, ex.list().size());
+
+		NewDataStoreParameters newParams = ex
+				.getAddParameters(DBFStoreProvider.NAME);
+
+		((FilesystemStoreParameters) newParams).setFile(new File(tmpDir,
+				"tmp1.dbf"));
+		EditableFeatureType fType;
+		if (((NewFeatureStoreParameters) newParams).getDefaultFeatureType() instanceof EditableFeatureType) {
+			fType = (EditableFeatureType) ((NewFeatureStoreParameters) newParams)
+					.getDefaultFeatureType();
+		} else {
+			fType = ((NewFeatureStoreParameters) newParams)
+					.getDefaultFeatureType().getEditable();
+		}
+		fType.add("campo1", DataTypes.STRING).setSize(10);
+		((NewFeatureStoreParameters) newParams).setDefaultFeatureType(fType);
+		ex.add(DBFStoreProvider.NAME, newParams, false);
+
+		List list = ex.list();
+		assertEquals(1, list.size());
+
+		Iterator iter = list.iterator();
+		TestDBF testDBF = new TestDBF();
+		while (iter.hasNext()) {
+			testDBF.testSimpleIteration((DBFStoreParameters) iter.next());
+		}
+
+		ex.remove((DataStoreParameters) list.get(0));
+
+		assertEquals(0, ex.list().size());
+
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/java/org/gvsig/fmap/dal/explorer/filesystem/FileSystemExplorerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFLibrary.java	(revision 42196)
@@ -0,0 +1,135 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.gvsig.fmap.dal.DALFileLibrary;
+import org.gvsig.fmap.dal.DALFileLocator;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class DBFLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+        require(DALFileLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		List<Throwable> exs = new ArrayList<Throwable>();
+
+		FileHelper.registerParametersDefinition(
+				DBFStoreParameters.PARAMETERS_DEFINITION_NAME, 
+				DBFStoreParameters.class,
+				"DBFParameters.xml"
+		);
+		updateEncodingDefinition();
+		FileHelper.registerParametersDefinition(
+				DBFNewStoreParameters.PARAMETERS_DEFINITION_NAME, 
+				DBFNewStoreParameters.class,
+				"DBFParameters.xml"
+		);
+		try {
+			FileHelper.registerMetadataDefinition(
+					DBFStoreProvider.METADATA_DEFINITION_NAME, 
+					DBFStoreProvider.class,
+					"DBFMetadata.xml"
+			);
+		} catch (MetadataException e) {
+			exs.add(e);
+		}
+
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+				.getDataManager();
+
+		try {
+			if (!dataman.getStoreProviders().contains(DBFStoreProvider.NAME)) {
+				dataman.registerStoreProvider(DBFStoreProvider.NAME,
+						DBFStoreProvider.class, DBFStoreParameters.class);
+			}
+		} catch (RuntimeException e) {
+			exs.add(e);
+		}
+
+		try {
+			DALFileLocator.getFilesystemServerExplorerManager()
+					.registerProvider(DBFStoreProvider.NAME,
+							DBFStoreProvider.DESCRIPTION,
+							DBFFilesystemServerProvider.class);
+		} catch (RuntimeException e) {
+			exs.add(e);
+		}
+
+		if( exs.size()>0 ) {
+			throw new LibraryException(this.getClass(), exs);
+		}
+	}
+	
+	private static void updateEncodingDefinition() {
+		DynStruct parametersDefinition = ToolsLocator.getPersistenceManager().getDefinition(DBFStoreParameters.PARAMETERS_DEFINITION_NAME);
+		
+		DynObjectValueItem[] values = parametersDefinition.getDynField("encoding").getAvailableValues();
+    	
+		Set<DynObjectValueItem> charsetSet = new LinkedHashSet<DynObjectValueItem>(160);
+
+		charsetSet.addAll( Arrays.asList(values) );
+		Map<String,Charset> charsets = Charset.availableCharsets();
+		Iterator<String> iter = charsets.keySet().iterator();
+		while (iter.hasNext()){
+			String value = (String) iter.next();
+			String label= value;
+			charsetSet.add(new DynObjectValueItem(value, label));
+		}
+
+		parametersDefinition.getDynField("Encoding")
+			.setAvailableValues(
+					(DynObjectValueItem[]) charsetSet.toArray(new DynObjectValueItem[charsets.size()])
+			);
+
+		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/FieldNameTooLongException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/FieldNameTooLongException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/FieldNameTooLongException.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf.utils;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+
+
+/**
+ * 
+ * Indicates that field name is too long for DBF file
+ * 
+ * @author jldominguez
+ *
+ */
+public class FieldNameTooLongException extends WriteException {
+
+    /**
+     * @param resource
+     * @param cause
+     */
+    public FieldNameTooLongException(String resource, String field) {
+        super(resource, new Exception("Field name is too long (max "+DbaseFile.MAX_FIELD_NAME_LENGTH+" char): '" + field + "'"));
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/FieldNameTooLongException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileHeader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileHeader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileHeader.java	(revision 42196)
@@ -0,0 +1,786 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf.utils;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedMap;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.UnsupportedVersionException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeNotSuportedException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+
+
+/**
+ * Class to represent the header of a Dbase III file. Creation date: (5/15/2001
+ * 5:15:30 PM)
+ */
+public class DbaseFileHeader {
+    // Constant for the size of a record
+    private final int FILE_DESCRIPTOR_SIZE = 32;
+
+	// type of the file, must be 03h
+	private static final byte MAGIC = 0x03;
+
+	private static final int MINIMUM_HEADER = 33;
+
+    // type of the file, must be 03h
+    private int myFileType = 0x03;
+
+    // Date the file was last updated.
+    private Date myUpdateDate = new Date();
+
+    // Number of records in the datafile
+	private int myNumRecords = 0;
+
+    // Length of the header structure
+    private int myHeaderLength;
+
+    /**
+     * Length of the records. Set to 1 as the default value as if there is
+     * not any defined column, at least the deleted status initial byte
+     * is taken into account.
+     */
+    private int myRecordLength = 1;
+
+    // Number of fields in the record.
+    private int myNumFields;
+
+    // collection of header records.
+    private DbaseFieldDescriptor[] myFieldDescriptions;
+
+	private byte myLanguageID;
+	
+	private List<String>   encodingSupportedByString = null;
+
+    /**
+     * DbaseFileHreader constructor comment.
+     */
+    public DbaseFileHeader() {
+        super();
+        
+        encodingSupportedByString = new ArrayList<String>();
+		SortedMap<String, Charset> m = Charset.availableCharsets();
+		Set<String> k = m.keySet();
+		Iterator<String> it = k.iterator();
+		while(it.hasNext()) {
+			encodingSupportedByString.add(it.next());
+		}
+    }
+
+    /**
+     * Add a column to this DbaseFileHeader. The type is one of (C N L or D)
+     * character, number, logical(true/false), or date. The Field length is
+     * the total length in bytes reserved for this column. The decimal count
+     * only applies to numbers(N), and floating point values (F), and refers
+     * to the number of characters to reserve after the decimal point.
+     *
+     * @param inFieldName DOCUMENT ME!
+     * @param inFieldType DOCUMENT ME!
+     * @param inFieldLength DOCUMENT ME!
+     * @param inDecimalCount DOCUMENT ME!
+     * @throws org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeNotSuportedException
+
+     */
+    public void addColumn(String inFieldName, char inFieldType,
+        int inFieldLength, int inDecimalCount)
+			throws AttributeFeatureTypeNotSuportedException {
+        if (inFieldLength <= 0) {
+            inFieldLength = 1;
+        }
+
+        if (myFieldDescriptions == null) {
+            myFieldDescriptions = new DbaseFieldDescriptor[0];
+        }
+
+        int tempLength = 1; // the length is used for the offset, and there is a * for deleted as the first byte
+        DbaseFieldDescriptor[] tempFieldDescriptors = new DbaseFieldDescriptor[myFieldDescriptions.length +
+            1];
+
+        for (int i = 0; i < myFieldDescriptions.length; i++) {
+            myFieldDescriptions[i].myFieldDataAddress = tempLength;
+            tempLength = tempLength + myFieldDescriptions[i].myFieldLength;
+            tempFieldDescriptors[i] = myFieldDescriptions[i];
+        }
+
+        tempFieldDescriptors[myFieldDescriptions.length] = new DbaseFieldDescriptor();
+        tempFieldDescriptors[myFieldDescriptions.length].myFieldLength = inFieldLength;
+        tempFieldDescriptors[myFieldDescriptions.length].myDecimalCount = inDecimalCount;
+        tempFieldDescriptors[myFieldDescriptions.length].myFieldDataAddress = tempLength;
+
+        // set the field name
+        String tempFieldName = inFieldName;
+
+        if (tempFieldName == null) {
+            tempFieldName = "NoName";
+        }
+
+        if (tempFieldName.length() > DbaseFile.MAX_FIELD_NAME_LENGTH) {
+            tempFieldName = tempFieldName.substring(0, DbaseFile.MAX_FIELD_NAME_LENGTH);
+            warn("FieldName " + inFieldName +
+                " is longer than "+DbaseFile.MAX_FIELD_NAME_LENGTH+" characters, truncating to " +
+                tempFieldName);
+        }
+
+        tempFieldDescriptors[myFieldDescriptions.length].myFieldName = tempFieldName;
+        tempFieldDescriptors[myFieldDescriptions.length].myFieldName_trim = tempFieldName
+				.trim();
+
+        // the field type
+        if ((inFieldType == 'C') || (inFieldType == 'c')) {
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldType = 'C';
+
+            if (inFieldLength > 254) {
+                warn("Field Length for " + inFieldName + " set to " +
+                    inFieldLength +
+                    " Which is longer than 254, not consistent with dbase III");
+            }
+        } else if ((inFieldType == 'S') || (inFieldType == 's')) {
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldType = 'C';
+            warn("Field type for " + inFieldName +
+                " set to S which is flat out wrong people!, I am setting this to C, in the hopes you meant character.");
+
+            if (inFieldLength > 254) {
+                warn("Field Length for " + inFieldName + " set to " +
+                    inFieldLength +
+                    " Which is longer than 254, not consistent with dbase III");
+            }
+
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldLength = 8;
+        } else if ((inFieldType == 'D') || (inFieldType == 'd')) {
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldType = 'D';
+
+            if (inFieldLength != 8) {
+                warn("Field Length for " + inFieldName + " set to " +
+                    inFieldLength + " Setting to 8 digets YYYYMMDD");
+            }
+
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldLength = 8;
+        } else if ((inFieldType == 'F') || (inFieldType == 'f')) {
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldType = 'F';
+
+            if (inFieldLength > 20) {
+                warn("Field Length for " + inFieldName + " set to " +
+                    inFieldLength +
+                    " Preserving length, but should be set to Max of 20 not valid for dbase IV, and UP specification, not present in dbaseIII.");
+            }
+        } else if ((inFieldType == 'N') || (inFieldType == 'n')) {
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldType = 'N';
+
+            if (inFieldLength > 18) {
+                warn("Field Length for " + inFieldName + " set to " +
+                    inFieldLength +
+                    " Preserving length, but should be set to Max of 18 for dbase III specification.");
+            }
+
+            if (inDecimalCount < 0) {
+                warn("Field Decimal Position for " + inFieldName + " set to " +
+                    inDecimalCount +
+                    " Setting to 0 no decimal data will be saved.");
+                tempFieldDescriptors[myFieldDescriptions.length].myDecimalCount = 0;
+            }
+//
+//            if (inDecimalCount > (inFieldLength - 1)) {
+//                warn("Field Decimal Position for " + inFieldName + " set to " +
+//                    inDecimalCount + " Setting to " + (inFieldLength - 1) +
+//                    " no non decimal data will be saved.");
+//                tempFieldDescriptors[myFieldDescriptions.length].myDecimalCount = inFieldLength -
+//                    1;
+//            }
+        } else if ((inFieldType == 'L') || (inFieldType == 'l')) {
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldType = 'L';
+
+            if (inFieldLength != 1) {
+                warn("Field Length for " + inFieldName + " set to " +
+                    inFieldLength +
+                    " Setting to length of 1 for logical fields.");
+            }
+
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldLength = 1;
+        } else {
+            throw new AttributeFeatureTypeNotSuportedException(tempFieldName,
+					inFieldType, ToolsLocator.getDataTypesManager().getTypeName(inFieldType), "DBF");
+        }
+
+        // the length of a record
+        tempLength = tempLength +
+            tempFieldDescriptors[myFieldDescriptions.length].myFieldLength;
+
+        // set the new fields.
+        myFieldDescriptions = tempFieldDescriptors;
+        myHeaderLength = 33 + (32 * myFieldDescriptions.length);
+        myNumFields = myFieldDescriptions.length;
+        myRecordLength = tempLength;
+    }
+
+    /**
+     * Remove a column from this DbaseFileHeader.
+     *
+     * @param inFieldName DOCUMENT ME!
+     *
+     * @return index of the removed column, -1 if no found
+     */
+    public int removeColumn(String inFieldName) {
+        int retCol = -1;
+        int tempLength = 1;
+        DbaseFieldDescriptor[] tempFieldDescriptors = new DbaseFieldDescriptor[myFieldDescriptions.length -
+            1];
+
+        for (int i = 0, j = 0; i < myFieldDescriptions.length; i++) {
+            if (!inFieldName.equalsIgnoreCase(
+                        myFieldDescriptions[i].myFieldName.trim())) {
+                // if this is the last field and we still haven't found the
+                // named field
+                if ((i == j) && (i == (myFieldDescriptions.length - 1))) {
+//                    System.err.println("Could not find a field named '" +
+//                        inFieldName + "' for removal");
+
+                    return retCol;
+                }
+
+                tempFieldDescriptors[j] = myFieldDescriptions[i];
+                tempFieldDescriptors[j].myFieldDataAddress = tempLength;
+                tempLength += tempFieldDescriptors[j].myFieldLength;
+
+                // only increment j on non-matching fields
+                j++;
+            } else {
+                retCol = i;
+            }
+        }
+
+        // set the new fields.
+        myFieldDescriptions = tempFieldDescriptors;
+        myHeaderLength = 33 + (32 * myFieldDescriptions.length);
+        myNumFields = myFieldDescriptions.length;
+        myRecordLength = tempLength;
+
+        return retCol;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param inWarn DOCUMENT ME!
+     */
+    private void warn(String inWarn) {
+        //TODO Descomentar esto cuando tenga la clase warning support
+        //    	warnings.warn(inWarn);
+    }
+
+    /**
+     * Return the Field Descriptor for the given field.
+     * @param inIndex, the index of the requeted field description
+     * @return the dbase field descriptor.
+     */
+    public DbaseFieldDescriptor getFieldDescription(int inIndex) {
+        return myFieldDescriptions[inIndex];
+    }
+
+    // Retrieve the length of the field at the given index
+    public int getFieldLength(int inIndex) {
+        return myFieldDescriptions[inIndex].myFieldLength;
+    }
+
+    // Retrieve the location of the decimal point within the field.
+    public int getFieldDecimalCount(int inIndex) {
+        return myFieldDescriptions[inIndex].myDecimalCount;
+    }
+
+    // Retrieve the Name of the field at the given index
+    public String getFieldName(int inIndex) {
+        return myFieldDescriptions[inIndex].myFieldName;
+    }
+
+    public int getFieldIndex(String name) {
+		for (int i = 0; i < myFieldDescriptions.length; i++) {
+			if (myFieldDescriptions[i].myFieldName_trim
+					.equalsIgnoreCase(name)) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+    // Retrieve the type of field at the given index
+    public char getFieldType(int inIndex) {
+        return myFieldDescriptions[inIndex].myFieldType;
+    }
+
+    /**
+     * Return the date this file was last updated.
+     *
+     * @return DOCUMENT ME!
+     */
+    public Date getLastUpdateDate() {
+        return myUpdateDate;
+    }
+
+     /**
+     * Return the number of fields in the records.
+     *
+     * @return DOCUMENT ME!
+     */
+    public int getNumFields() {
+        return myNumFields;
+    }
+
+    /**
+     * Return the number of records in the file
+     *
+     * @return DOCUMENT ME!
+     */
+    public int getNumRecords() {
+        return myNumRecords;
+    }
+
+    /**
+     * Return the length of the records in bytes.
+     *
+     * @return DOCUMENT ME!
+     */
+    public int getRecordLength() {
+        return myRecordLength;
+    }
+
+    /**
+     * Return the length of the header
+     *
+     * @return DOCUMENT ME!
+     */
+    public int getHeaderLength() {
+        return myHeaderLength;
+    }
+
+	/**
+	 * Read the header data from the DBF file.
+	 *
+	 * @param in
+	 *            DOCUMENT ME!
+         * @param charsName
+	 * @throws UnsupportedVersionException
+	 * @throws UnsupportedEncodingException
+
+	 */
+    public void readHeader(BigByteBuffer2 in, String charsName)
+			throws UnsupportedVersionException, UnsupportedEncodingException {
+        // type of file.
+        myFileType = in.get();
+
+        if (myFileType != 0x03) {
+            throw new UnsupportedVersionException("DBF", Integer.toHexString(myFileType));
+        }
+
+        // parse the update date information.
+        int tempUpdateYear = in.get();
+        int tempUpdateMonth = in.get();
+        int tempUpdateDay = in.get();
+        tempUpdateYear = tempUpdateYear + 1900;
+
+        Calendar c = Calendar.getInstance();
+        c.set(Calendar.YEAR, tempUpdateYear);
+        c.set(Calendar.MONTH, tempUpdateMonth - 1);
+        c.set(Calendar.DATE, tempUpdateDay);
+        myUpdateDate = c.getTime();
+
+        // read the number of records.
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        myNumRecords = in.getInt();
+
+        // read the length of the header structure.
+        myHeaderLength = in.getShort();
+
+        // read the length of a record
+        myRecordLength = in.getShort(); //posicon 0h
+
+        in.order(ByteOrder.BIG_ENDIAN);
+
+        // skip the reserved bytes in the header.
+        // in.position(in.position() + 20);
+
+        // Leemos el byte de language
+        in.position(29);
+        myLanguageID = in.get();
+        if (charsName == null) {
+        	charsName = getCharsetName();
+        	charsName = mappingEncoding(charsName);
+		}
+
+
+        // Posicionamos para empezar a leer los campos.
+        in.position(32);
+
+        // calculate the number of Fields in the header
+        myNumFields = (myHeaderLength - FILE_DESCRIPTOR_SIZE - 1) / FILE_DESCRIPTOR_SIZE;
+
+        // read all of the header records
+        myFieldDescriptions = new DbaseFieldDescriptor[myNumFields];
+        int fieldOffset = 0;
+
+        for (int i = 0; i < myNumFields; i++) {
+            myFieldDescriptions[i] = new DbaseFieldDescriptor();
+
+            // read the field name
+            byte[] buffer = new byte[11];
+            in.get(buffer);
+            if (charsName != null) {
+				myFieldDescriptions[i].myFieldName = new String(buffer,
+						charsName);
+			} else {
+				myFieldDescriptions[i].myFieldName = new String(buffer);
+			}
+            myFieldDescriptions[i].myFieldName_trim = myFieldDescriptions[i].myFieldName
+					.trim();
+
+            // read the field type
+            myFieldDescriptions[i].myFieldType = (char) in.get();
+
+            // read the field data address, offset from the start of the record.
+            myFieldDescriptions[i].myFieldDataAddress = in.getInt();
+
+            // read the field length in bytes
+            int tempLength = in.get();
+
+            if (tempLength < 0) {
+                tempLength = tempLength + 256;
+            }
+
+            myFieldDescriptions[i].myFieldLength = tempLength;
+
+            // read the field decimal count in bytes
+            myFieldDescriptions[i].myDecimalCount = in.get();
+
+            // NUEVO: Calculamos los offsets aqu� para no
+            // tener que recalcular cada vez que nos piden
+            // algo.
+            myFieldDescriptions[i].myFieldDataAddress = fieldOffset;
+            fieldOffset += tempLength;
+            // Fin NUEVO
+            // read the reserved bytes.
+            in.position(in.position() + 14);
+        }
+
+        // Last byte is a marker for the end of the field definitions.
+        in.get();
+    }
+
+    /**
+     * Set the number of records in the file
+     *
+     * @param inNumRecords DOCUMENT ME!
+     */
+    public void setNumRecords(int inNumRecords) {
+        myNumRecords = inNumRecords;
+    }
+
+    /*
+     * Write the header data to the DBF file.
+     *
+     * @param out DOCUMENT ME!
+     *
+     * @throws Exception DOCUMENT ME!
+     *
+           public void writeHeader(LEDataOutputStream out) throws Exception {
+               // write the output file type.
+               out.writeByte(myFileType);
+               // write the date stuff
+               Calendar c = Calendar.getInstance();
+               c.setTime(new Date());
+               out.writeByte(c.get(Calendar.YEAR) - 1900);
+               out.writeByte(c.get(Calendar.MONTH) + 1);
+               out.writeByte(c.get(Calendar.DAY_OF_MONTH));
+               // write the number of records in the datafile.
+               out.writeInt(myNumRecords);
+               // write the length of the header structure.
+               out.writeShort(myHeaderLength);
+               // write the length of a record
+               out.writeShort(myRecordLength);
+               // write the reserved bytes in the header
+               for (int i = 0; i < 20; i++)
+                   out.writeByte(0);
+               // write all of the header records
+               int tempOffset = 0;
+               for (int i = 0; i < myFieldDescriptions.length; i++) {
+                   // write the field name
+                   for (int j = 0; j < 11; j++) {
+                       if (myFieldDescriptions[i].myFieldName.length() > j) {
+                           out.writeByte((int) myFieldDescriptions[i].myFieldName.charAt(
+                                   j));
+                       } else {
+                           out.writeByte(0);
+                       }
+                   }
+                   // write the field type
+                   out.writeByte(myFieldDescriptions[i].myFieldType);
+                   // write the field data address, offset from the start of the record.
+                   out.writeInt(tempOffset);
+                   tempOffset += myFieldDescriptions[i].myFieldLength;
+                   // write the length of the field.
+                   out.writeByte(myFieldDescriptions[i].myFieldLength);
+                   // write the decimal count.
+                   out.writeByte(myFieldDescriptions[i].myDecimalCount);
+                   // write the reserved bytes.
+                   for (int j = 0; j < 14; j++)
+                       out.writeByte(0);
+               }
+               // write the end of the field definitions marker
+               out.writeByte(0x0D);
+           }
+     */
+
+    /**
+     * Class for holding the information assicated with a record.
+     */
+    public class DbaseFieldDescriptor {
+        // Field Name
+        String myFieldName;
+
+        String myFieldName_trim;
+
+        // Field Type (C N L D F or M)
+        char myFieldType;
+
+        // Field Data Address offset from the start of the record.
+        int myFieldDataAddress;
+
+        // Length of the data in bytes
+        int myFieldLength;
+
+        // Field decimal count in Binary, indicating where the decimal is
+        int myDecimalCount;
+    }
+
+	public byte getLanguageID() {
+		return myLanguageID;
+	}
+
+
+
+	public static DbaseFileHeader createDbaseHeader(FeatureType featureType)
+			throws AttributeFeatureTypeNotSuportedException {
+		DbaseFileHeader header = new DbaseFileHeader();
+		Iterator iterator=featureType.iterator();
+		// TODO header.myLanguageID = langId;
+		while (iterator.hasNext()) {
+			FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) iterator.next();
+
+
+			int type = descriptor.getType();
+			String colName = descriptor.getName();
+
+			int fieldLen = descriptor.getSize(); // TODO aqu� el
+			// tama�o no es
+			// correcto hay que
+			// calcularlo, ahora
+			// mismo est� puesto
+			// a pi��n.
+			int decimales = descriptor.getPrecision();
+			if ((type==DataTypes.DOUBLE || type==DataTypes.FLOAT) && decimales==0){
+				decimales=1;
+			}
+
+			if (DataTypes.DOUBLE == type || DataTypes.FLOAT == type
+					|| DataTypes.INT == type || DataTypes.LONG == type) {
+				header.addColumn(colName, 'N', Math.min(fieldLen, 18),
+						decimales);
+			} else if (DataTypes.DATE == type) {
+				header.addColumn(colName, 'D', fieldLen, 0);
+			} else if (DataTypes.BOOLEAN == type) {
+				header.addColumn(colName, 'L', 1, 0);
+			} else if (DataTypes.STRING == type) {
+				header.addColumn(colName, 'C', Math.min(254, fieldLen), 0);
+			}
+
+
+		}
+		return header;
+	}
+	/**
+	 * Write the header data to the DBF file.
+	 *
+	 * @param out
+	 *            A channel to write to. If you have an OutputStream you can
+	 *            obtain the correct channel by using
+	 *            java.nio.Channels.newChannel(OutputStream out).
+	 *
+	 * @throws IOException
+	 *             If errors occur.
+	 */
+	public void writeHeader(FileChannel out) throws IOException {
+		// take care of the annoying case where no records have been added...
+		if (myHeaderLength <= 0) {
+			myHeaderLength = MINIMUM_HEADER;
+		}
+
+		// Desde el principio
+		out.position(0);
+
+		ByteBuffer buffer = ByteBuffer.allocateDirect(myHeaderLength);
+		buffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		// write the output file type.
+		buffer.put(MAGIC);
+
+		// write the date stuff
+		Calendar c = Calendar.getInstance();
+		c.setTime(new Date());
+		buffer.put((byte) (c.get(Calendar.YEAR) % 100));
+		buffer.put((byte) (c.get(Calendar.MONTH) + 1));
+		buffer.put((byte) (c.get(Calendar.DAY_OF_MONTH)));
+
+		// write the number of records in the datafile.
+		buffer.putInt(myNumRecords);
+
+		// write the length of the header structure.
+		buffer.putShort((short) myHeaderLength);
+
+		// write the length of a record
+		buffer.putShort((short) myRecordLength);
+
+		// // write the reserved bytes in the header
+		// for (int i=0; i<20; i++) out.writeByteLE(0);
+		buffer.position(buffer.position() + 20);
+
+		// write all of the header records
+		int tempOffset = 0;
+
+		if (myFieldDescriptions != null) {
+			for (int i = 0; i < myFieldDescriptions.length; i++) {
+				// write the field name
+				for (int j = 0; j < DbaseFile.MAX_FIELD_NAME_LENGTH+1; j++) {
+					if (myFieldDescriptions[i].myFieldName.length() > j) {
+						buffer.put((byte) myFieldDescriptions[i].myFieldName.charAt(j));
+					} else {
+						buffer.put((byte) 0);
+					}
+				}
+
+				// write the field type
+				buffer.put((byte) myFieldDescriptions[i].myFieldType);
+
+				// // write the field data address, offset from the start of the
+				// record.
+				buffer.putInt(tempOffset);
+				tempOffset += myFieldDescriptions[i].myFieldLength;
+
+				// write the length of the field.
+				buffer.put((byte) myFieldDescriptions[i].myFieldLength);
+
+				// write the decimal count.
+				buffer.put((byte) myFieldDescriptions[i].myDecimalCount);
+
+				// write the reserved bytes.
+				// for (in j=0; jj<14; j++) out.writeByteLE(0);
+				buffer.position(buffer.position() + 14);
+			}
+		}
+		// write the end of the field definitions marker
+		buffer.put((byte) 0x0D);
+
+		buffer.position(0);
+
+		int r = buffer.remaining();
+
+		while ((r -= out.write(buffer)) > 0) {
+			; // do nothing
+		}
+	}
+
+	/**
+	 * 	01h		DOS USA	code page 437
+		02h		DOS Multilingual code page 850
+		03h		Windows ANSI code page 1252
+		04h		Standard Macintosh
+		64h		EE MS-DOS code page 852
+		65h		Nordic MS-DOS code page 865
+		66h		Russian MS-DOS code page 866
+		67h		Icelandic MS-DOS
+		68h		Kamenicky (Czech) MS-DOS
+		69h		Mazovia (Polish) MS-DOS
+		6Ah		Greek MS-DOS (437G)
+		6Bh		Turkish MS-DOS
+		96h		Russian Macintosh
+		97h		Eastern European Macintosh
+		98h		Greek Macintosh
+		C8h		Windows EE	code page 1250
+		C9h		Russian Windows
+		CAh		Turkish Windows
+		CBh		Greek Windows
+	 * @return
+	 */
+	public String getCharsetName() {
+		switch (getLanguageID()) {
+		case 0x01:
+			return "US-ASCII";
+		case 0x02:
+			return "ISO-8859-1";
+		case 0x03:
+			return "windows-1252";
+		case 0x04:
+			return "mac";
+		case 0x64:
+			return "ISO-8859-1";
+		case 0x65:
+			return "ISO-8859-1";
+		case 0x66:
+			return "ISO-8859-1";
+		case 0x67:
+			return "ISO-8859-1";
+		case 0x68:
+			return "greek";
+		case 0x69:
+			return "ISO-8859-1";
+		case 0x6A:
+			return "greek";
+		case 0x6B:
+			return "ISO-8859-1";
+
+		default:
+			return "ISO-8859-1";
+		}
+	}
+	
+	public String mappingEncoding(String dbfEnconding) {
+		if(encodingSupportedByString.contains(dbfEnconding))
+			return dbfEnconding;
+		else
+			return "UTF-8";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileHeader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileWriter.java	(revision 42196)
@@ -0,0 +1,512 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf.utils;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+import java.text.FieldPosition;
+import java.text.NumberFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Locale;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.UnsupportedEncodingException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * A DbaseFileReader is used to read a dbase III format file. The general use of
+ * this class is: <CODE><PRE>
+ * DbaseFileHeader header = ...
+ * WritableFileChannel out = new FileOutputStream("thefile.dbf").getChannel();
+ * DbaseFileWriter w = new DbaseFileWriter(header,out);
+ * while ( moreRecords ) {
+ *   w.write( getMyRecord() );
+ * }
+ * w.close();
+ * </PRE></CODE> You must supply the <CODE>moreRecords</CODE> and
+ * <CODE>getMyRecord()</CODE> logic...
+ * 
+ * @author Ian Schneider
+ */
+public class DbaseFileWriter {
+
+    private DbaseFileHeader header;
+    private DbaseFileWriter.FieldFormatter formatter =
+        new DbaseFileWriter.FieldFormatter();
+    FileChannel channel;
+    private ByteBuffer buffer;
+    // private final Number NULL_NUMBER = new Integer(0);
+    private final String NULL_STRING = "";
+    private final String NULL_DATE = "        ";
+    private boolean headDrity = false;
+
+    // TODO: READ HEADER AND STABLIST THE RIGHT CHARSET
+    private Charset charset = Charset.forName("ISO-8859-1");
+
+    /**
+     * Create a DbaseFileWriter using the specified header and writing to the
+     * given channel.
+     * 
+     * @param header
+     *            The DbaseFileHeader to write.
+     * @param out
+     *            The Channel to write to.
+     * 
+     * 
+     * @throws InitializeWriterException
+     * @throws IOException
+     *             If errors occur while initializing.
+     */
+    public DbaseFileWriter(DbaseFileHeader header, FileChannel out,
+        boolean isNew) throws InitializeException {
+        this.header = header;
+        this.channel = out;
+        this.headDrity = isNew;
+
+        init();
+    }
+
+    private void init() throws InitializeException {
+        try {
+            if (this.channel.size() < this.header.getHeaderLength()) {
+                this.writeHeader();
+            }
+            buffer = ByteBuffer.allocateDirect(header.getRecordLength());
+        } catch (Exception e) {
+            throw new InitializeException("DBF Writer", e);
+        }
+    }
+
+    private void write() throws WriteException {
+        buffer.position(0);
+        int r = buffer.remaining();
+        try {
+            while ((r -= channel.write(buffer)) > 0) {
+                ; // do nothing
+            }
+        } catch (IOException e) {
+            throw new WriteException("DBF Writer", e);
+        }
+    }
+
+    private void writeHeader() throws WriteException {
+        try {
+            channel.position(0);
+            header.writeHeader(channel);
+        } catch (IOException e) {
+            throw new WriteException("DBF Writer", e);
+        }
+    }
+
+    /**
+     * Write a single dbase record.
+     * 
+     * @param record
+     *            The entries to write.
+     * @throws UnsupportedEncodingException
+     * @throws WriteException
+     */
+    public void append(Feature feature) throws WriteException,
+        UnsupportedEncodingException {
+        this.fillBuffer(feature);
+        try {
+            this.moveToEOF();
+        } catch (IOException e) {
+            throw new WriteException("DbaseFileWriter", e);
+        }
+        this.header.setNumRecords(this.header.getNumRecords() + 1);
+        write();
+
+        this.headDrity = true;
+    }
+
+    private void fillBuffer(Feature feature)
+        throws UnsupportedEncodingException, WriteException {
+        FeatureType featureType = feature.getType();
+        try {
+            buffer.position(0);
+
+            // put the 'not-deleted' marker
+            buffer.put((byte) ' ');
+
+            @SuppressWarnings("unchecked")
+            Iterator<FeatureAttributeDescriptor> iterator =
+                featureType.iterator();
+            while (iterator.hasNext()) {
+                FeatureAttributeDescriptor fad = iterator.next();
+                
+                if (fad.getName().length() > DbaseFile.MAX_FIELD_NAME_LENGTH) {
+                    throw new FieldNameTooLongException(
+                        "DBF file", fad.getName());
+                }
+                
+                int type = fad.getType();
+                if (type == DataTypes.GEOMETRY) {
+                    continue;
+                }
+                String fieldString = fieldString(fad, feature);
+                if (fieldString == null) {
+                    if (type == DataTypes.STRING) {
+                        fieldString = NULL_STRING;
+                    } else
+                        if (type == DataTypes.DATE) {
+                            fieldString = NULL_DATE;
+                        } else {
+                            fieldString = "0";
+                        }
+                }
+                try {
+                    buffer.put(fieldString.getBytes(charset.name()));
+                } catch (java.io.UnsupportedEncodingException e) {
+                    throw new UnsupportedEncodingException(e);
+                }
+            }
+        } catch (Exception e) {
+            throw new WriteException("DbaseFileWriter", e);
+        }
+    }
+
+    private void moveToEOF() throws IOException {
+        this.moveTo(this.header.getNumRecords());
+    }
+
+    private void moveTo(long numReg) throws IOException {
+        // if (!(channel instanceof FileChannel)) {
+        // throw new IOException(
+        // "DbaseFileWriterNIO: channel is not a FileChannel. Cannot position properly");
+        // }
+
+        long newPos =
+            header.getHeaderLength() + numReg * header.getRecordLength();
+        if (this.channel.position() != newPos) {
+            this.channel.position(newPos);
+        }
+    }
+
+    /**
+     * Write a single dbase record. Useful to update a dbf.
+     * 
+     * @param record
+     *            The entries to write.
+     * @throws WriteException
+     * @throws UnsupportedEncodingException
+     */
+    public void update(Feature feature, long numReg) throws WriteException,
+        UnsupportedEncodingException {
+        this.fillBuffer(feature);
+
+        try {
+            this.moveTo(numReg);
+        } catch (IOException e) {
+            throw new WriteException("DbaseFileWriter", e);
+        }
+
+        write();
+    }
+
+    private String fieldString(FeatureAttributeDescriptor attr, Feature feature) {
+        int type = attr.getType();
+        int dbfFieldIndex = this.header.getFieldIndex(attr.getName());
+        final int fieldLen = header.getFieldLength(dbfFieldIndex);
+        String fieldString = "";
+        if (DataTypes.BOOLEAN == type) {
+            boolean b = feature.getBoolean(attr.getIndex());
+            if (b) {
+                fieldString = "T";
+            } else {
+                fieldString = "F";
+            }
+        } else
+            if (DataTypes.BYTE == type) {
+                fieldString = String.valueOf(feature.getByte(attr.getIndex()));
+            } else
+                if (DataTypes.DATE == type) {
+                    Date date = feature.getDate(attr.getIndex());
+                    fieldString = formatter.getFieldString(date);
+                } else
+                    if (DataTypes.DOUBLE == type) {
+                        double d = feature.getDouble(attr.getIndex());
+                        fieldString =
+                            formatter.getFieldString(fieldLen,
+                                header.getFieldDecimalCount(dbfFieldIndex), d);
+                    } else
+                        if (DataTypes.FLOAT == type) {
+                            float f = feature.getFloat(attr.getIndex());
+                            fieldString =
+                                formatter.getFieldString(fieldLen,
+                                    header.getFieldDecimalCount(dbfFieldIndex),
+                                    f);
+                        } else
+                            if (DataTypes.INT == type) {
+                                int integer = feature.getInt(attr.getIndex());
+                                fieldString =
+                                    formatter.getFieldString(fieldLen, header
+                                        .getFieldDecimalCount(dbfFieldIndex),
+                                        integer);
+                            } else
+                                if (DataTypes.LONG == type) {
+                                    long l = feature.getLong(attr.getIndex());
+                                    fieldString =
+                                        formatter
+                                            .getFieldString(
+                                                fieldLen,
+                                                header
+                                                    .getFieldDecimalCount(dbfFieldIndex),
+                                                l);
+                                } else
+                                    if (DataTypes.STRING == type) {
+                                        String s =
+                                            feature.getString(attr.getIndex());
+                                        fieldString =
+                                            formatter.getFieldString(fieldLen,
+                                                s);
+                                    }
+        return fieldString;
+
+    }
+
+    // private String fieldString(Object obj,final int col) {
+    // String o;
+    // final int fieldLen = header.getFieldLength(col);
+    // switch (header.getFieldType(col)) {
+    // case 'C':
+    // case 'c':
+    // o = formatter.getFieldString(
+    // fieldLen,
+    // (obj instanceof NullValue)? NULL_STRING : ((StringValue) obj).getValue()
+    // );
+    // break;
+    // case 'L':
+    // case 'l':
+    // o = (obj instanceof NullValue) ? "F" : ((BooleanValue)obj).getValue() ==
+    // true ? "T" : "F";
+    // break;
+    // case 'M':
+    // case 'G':
+    // o = formatter.getFieldString(
+    // fieldLen,
+    // (obj instanceof NullValue) ? NULL_STRING : ((StringValue) obj).getValue()
+    // );
+    // break;
+    // /* case 'N':
+    // case 'n':
+    // // int?
+    // if (header.getFieldDecimalCount(col) == 0) {
+    //
+    // o = formatter.getFieldString(
+    // fieldLen, 0, (Number) (obj == null ? NULL_NUMBER :
+    // Double.valueOf(obj.toString()))
+    // );
+    // break;
+    //
+    // }
+    // */
+    // case 'N':
+    // case 'n':
+    // case 'F':
+    // case 'f':
+    // Number number = null;
+    // if(obj instanceof NullValue){
+    // number = NULL_NUMBER;
+    // }else{
+    // NumericValue gVal = (NumericValue) obj;
+    // number = new Double(gVal.doubleValue());
+    // }
+    // o = formatter.getFieldString(fieldLen,
+    // header.getFieldDecimalCount(col),
+    // number);
+    // break;
+    // case 'D':
+    // case 'd':
+    // if (obj instanceof NullValue)
+    // o = NULL_DATE;
+    // else
+    // o = formatter.getFieldString(((DateValue)obj).getValue());
+    // break;
+    // default:
+    // throw new RuntimeException("Unknown type " + header.getFieldType(col));
+    // }
+    //
+    // return o;
+    // }
+
+    /**
+     * Release resources associated with this writer. <B>Highly recommended</B>
+     * 
+     * @throws CloseException
+     * @throws IOException
+     *             If errors occur.
+     */
+    public void close() throws CloseException {
+        // IANS - GEOT 193, bogus 0x00 written. According to dbf spec, optional
+        // eof 0x1a marker is, well, optional. Since the original code wrote a
+        // 0x00 (which is wrong anyway) lets just do away with this :)
+        // - produced dbf works in OpenOffice and ArcExplorer java, so it must
+        // be okay.
+        // buffer.position(0);
+        // buffer.put((byte) 0).position(0).limit(1);
+        // write();
+
+        if (headDrity) {
+            try {
+                this.writeHeader();
+            } catch (WriteException e) {
+                throw new CloseException("DbaseFileWriter", e);
+            }
+        }
+
+        try {
+            channel.close();
+        } catch (IOException e) {
+            throw new CloseException("DBF Writer", e);
+        }
+        if (buffer instanceof MappedByteBuffer) {
+            // NIOUtilities.clean(buffer);
+        }
+
+        buffer = null;
+        channel = null;
+        formatter = null;
+    }
+
+    /** Utility for formatting Dbase fields. */
+    public static class FieldFormatter {
+
+        private StringBuffer buffer = new StringBuffer(255);
+        private NumberFormat numFormat = NumberFormat
+            .getNumberInstance(Locale.US);
+        private Calendar calendar = Calendar.getInstance(Locale.US);
+        private String emtpyString;
+        private static final int MAXCHARS = 255;
+
+        public FieldFormatter() {
+            // Avoid grouping on number format
+            numFormat.setGroupingUsed(false);
+
+            // build a 255 white spaces string
+            StringBuffer sb = new StringBuffer(MAXCHARS);
+            sb.setLength(MAXCHARS);
+            for (int i = 0; i < MAXCHARS; i++) {
+                sb.setCharAt(i, ' ');
+            }
+
+            emtpyString = sb.toString();
+        }
+
+        public String getFieldString(int size, String s) {
+            buffer.replace(0, size, emtpyString);
+            buffer.setLength(size);
+
+            if (s != null) {
+                buffer.replace(0, size, s);
+                if (s.length() <= size) {
+                    for (int i = s.length(); i < size; i++) {
+                        buffer.append(' ');
+                    }
+                }
+            }
+
+            buffer.setLength(size);
+            return buffer.toString();
+        }
+
+        public String getFieldString(Date d) {
+
+            if (d != null) {
+                buffer.delete(0, buffer.length());
+
+                calendar.setTime(d);
+                int year = calendar.get(Calendar.YEAR);
+                int month = calendar.get(Calendar.MONTH) + 1; // returns 0 based
+                                                              // month?
+                int day = calendar.get(Calendar.DAY_OF_MONTH);
+
+                if (year < 1000) {
+                    if (year >= 100) {
+                        buffer.append("0");
+                    } else
+                        if (year >= 10) {
+                            buffer.append("00");
+                        } else {
+                            buffer.append("000");
+                        }
+                }
+                buffer.append(year);
+
+                if (month < 10) {
+                    buffer.append("0");
+                }
+                buffer.append(month);
+
+                if (day < 10) {
+                    buffer.append("0");
+                }
+                buffer.append(day);
+            } else {
+                buffer.setLength(8);
+                buffer.replace(0, 8, emtpyString);
+            }
+
+            buffer.setLength(8);
+            return buffer.toString();
+        }
+
+        public String getFieldString(int size, int decimalPlaces, double n) {
+            buffer.delete(0, buffer.length());
+
+            // if (n != null) {
+            numFormat.setMaximumFractionDigits(decimalPlaces);
+            numFormat.setMinimumFractionDigits(decimalPlaces);
+            numFormat.format(n, buffer, new FieldPosition(
+                NumberFormat.INTEGER_FIELD));
+            // }
+
+            int diff = size - buffer.length();
+            if (diff >= 0) {
+                while (diff-- > 0) {
+                    buffer.insert(0, ' ');
+                }
+            } else {
+                buffer.setLength(size);
+            }
+            return buffer.toString();
+        }
+    }
+
+    public void setCharset(Charset charset) {
+        this.charset = charset;
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileWriter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFile.java	(revision 42196)
@@ -0,0 +1,548 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+import java.text.FieldPosition;
+import java.text.NumberFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.UnsupportedEncodingException;
+import org.gvsig.fmap.dal.exception.UnsupportedVersionException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Class to read and write data to a dbase III format file. Creation date:
+ * (5/15/2001 5:15:13 PM)
+ */
+public class DbaseFile {
+
+    private static final Logger logger = LoggerFactory.getLogger(DbaseFile.class);
+            
+    public static final int MAX_FIELD_NAME_LENGTH = 10;
+    
+	// Header information for the DBase File
+	private DbaseFileHeader myHeader;
+
+	private File file;
+
+	private RandomAccessFile raf;
+
+	private FileChannel channel;
+
+	private BigByteBuffer2 buffer;
+
+	private FileChannel.MapMode mode;
+
+	private FieldFormatter formatter = new FieldFormatter();
+
+	private long posActual = -1;
+
+	private int recordOffset;
+
+	private ByteBuffer cachedRecord = null;
+
+	private byte[] bytesCachedRecord = null;
+
+	private final Number NULL_NUMBER = new Integer(0);
+
+	private final String NULL_STRING = "";
+
+	private final String NULL_DATE = "        ";
+
+	private Charset chars = null;
+	private Charset charsOriginal;
+
+	private boolean isOpen = false;
+
+
+	/** Utility for formatting Dbase fields. */
+	public static class FieldFormatter {
+		private StringBuffer buffer = new StringBuffer(255);
+
+		private NumberFormat numFormat = NumberFormat
+				.getNumberInstance(Locale.US);
+
+		private Calendar calendar = Calendar.getInstance(Locale.US);
+
+		private String emtpyString;
+
+		private static final int MAXCHARS = 255;
+
+		public FieldFormatter() {
+			// Avoid grouping on number format
+			numFormat.setGroupingUsed(false);
+
+			// build a 255 white spaces string
+			StringBuffer sb = new StringBuffer(MAXCHARS);
+			sb.setLength(MAXCHARS);
+			for (int i = 0; i < MAXCHARS; i++) {
+				sb.setCharAt(i, ' ');
+			}
+
+			emtpyString = sb.toString();
+		}
+
+		public String getFieldString(int size, String s) {
+			buffer.replace(0, size, emtpyString);
+			buffer.setLength(size);
+
+			if (s != null) {
+				buffer.replace(0, size, s);
+				if (s.length() <= size) {
+					for (int i = s.length(); i < size; i++) {
+						buffer.append(' ');
+					}
+				}
+			}
+
+			buffer.setLength(size);
+			return buffer.toString();
+		}
+
+		public String getFieldString(Date d) {
+
+			if (d != null) {
+				buffer.delete(0, buffer.length());
+
+				calendar.setTime(d);
+				int year = calendar.get(Calendar.YEAR);
+				int month = calendar.get(Calendar.MONTH) + 1; // returns 0
+																// based month?
+				int day = calendar.get(Calendar.DAY_OF_MONTH);
+
+				if (year < 1000) {
+					if (year >= 100) {
+						buffer.append("0");
+					} else if (year >= 10) {
+						buffer.append("00");
+					} else {
+						buffer.append("000");
+					}
+				}
+				buffer.append(year);
+
+				if (month < 10) {
+					buffer.append("0");
+				}
+				buffer.append(month);
+
+				if (day < 10) {
+					buffer.append("0");
+				}
+				buffer.append(day);
+			} else {
+				buffer.setLength(8);
+				buffer.replace(0, 8, emtpyString);
+			}
+
+			buffer.setLength(8);
+			return buffer.toString();
+		}
+
+		public String getFieldString(int size, int decimalPlaces, Number n) {
+			buffer.delete(0, buffer.length());
+
+			if (n != null) {
+				numFormat.setMaximumFractionDigits(decimalPlaces);
+				numFormat.setMinimumFractionDigits(decimalPlaces);
+				numFormat.format(n, buffer, new FieldPosition(
+						NumberFormat.INTEGER_FIELD));
+			}
+
+			int diff = size - buffer.length();
+			if (diff >= 0) {
+				while (diff-- > 0) {
+					buffer.insert(0, ' ');
+				}
+			} else {
+				buffer.setLength(size);
+			}
+			return buffer.toString();
+		}
+	}
+
+	public DbaseFile(File afile){
+		this(afile, null);
+	}
+
+	public DbaseFile(File afile, Charset chars) {
+		this.file = afile;
+		this.chars = chars;
+	}
+
+	public byte getCodePage() {
+		return myHeader.getLanguageID();
+	}
+
+	// Retrieve number of records in the DbaseFile
+	public int getRecordCount() {
+		return myHeader.getNumRecords();
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public int getFieldCount() {
+		return myHeader.getNumFields();
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param rowIndex
+	 *            DOCUMENT ME!
+	 * @param fieldId
+	 *            DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public boolean getBooleanFieldValue(int rowIndex, int fieldId) {
+		int recordOffset = (myHeader.getRecordLength() * rowIndex)
+				+ myHeader.getHeaderLength() + 1;
+
+		// Se calcula el offset del campo
+		int fieldOffset = 0;
+
+		for (int i = 0; i < (fieldId - 1); i++) {
+			fieldOffset += myHeader.getFieldLength(i);
+		}
+
+		buffer.position(recordOffset + fieldOffset);
+
+		char bool = (char) buffer.get();
+
+		return ((bool == 't') || (bool == 'T') || (bool == 'Y') || (bool == 'y'));
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param rowIndex
+	 *            DOCUMENT ME!
+	 * @param fieldId
+	 *            DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 * @throws UnsupportedEncodingException
+	 */
+	public String getStringFieldValue(int rowIndex, int fieldId)
+			throws UnsupportedEncodingException {
+		int fieldOffset = myHeader.getFieldDescription(fieldId).myFieldDataAddress;
+		byte[] data = new byte[myHeader.getFieldLength(fieldId)];
+		if (rowIndex != posActual) {
+			recordOffset = (myHeader.getRecordLength() * rowIndex)
+					+ myHeader.getHeaderLength() + 1;
+
+			/*
+			 * System.err.println("getStringFieldValue: rowIndex = " +
+			 * rowIndex); System.err.println("recordOffset = " + recordOffset + "
+			 * fieldOffset=" + fieldOffset);
+			 */
+
+			buffer.position(recordOffset);
+			buffer.get(bytesCachedRecord);
+			cachedRecord = ByteBuffer.wrap(bytesCachedRecord);
+			posActual = rowIndex;
+
+		}
+		cachedRecord.position(fieldOffset);
+		cachedRecord.get(data);
+
+		try {
+			return new String(data, chars.name());
+		} catch (java.io.UnsupportedEncodingException e) {
+			throw new UnsupportedEncodingException(
+					e);
+		}
+
+	}
+
+	public void setFieldValue(int rowIndex, int fieldId, Object obj) throws UnsupportedEncodingException, WriteException {
+		try{
+			int fieldOffset = myHeader.getFieldDescription(fieldId).myFieldDataAddress;
+			String str = fieldString(obj, fieldId);
+			byte[] data = new byte[myHeader.getFieldLength(fieldId)];
+			recordOffset = (myHeader.getRecordLength() * rowIndex)
+					+ myHeader.getHeaderLength() + 1;
+
+			ByteBuffer aux = ByteBuffer.wrap(data);
+			aux.put(str.getBytes(chars.name()));
+//			raf.seek(recordOffset + fieldOffset);
+//			raf.writeBytes(str);
+			aux.flip();
+//			int numBytesWritten = channel.write(aux, recordOffset + fieldOffset);
+			channel.write(aux, recordOffset + fieldOffset);
+			//channel.force(true);
+		}catch (java.io.UnsupportedEncodingException e) {
+			throw new UnsupportedEncodingException(e);
+		}catch (IOException e) {
+			throw new WriteException("DBF",e);
+		}
+
+	}
+
+
+	/**
+	 * Retrieve the name of the given column.
+	 *
+	 * @param inIndex
+	 *            DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public String getFieldName(int inIndex) {
+		return myHeader.getFieldName(inIndex).trim();
+	}
+
+	/**
+	 * Retrieve the type of the given column.
+	 *
+	 * @param inIndex
+	 *            DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public char getFieldType(int inIndex) {
+		return myHeader.getFieldType(inIndex);
+	}
+
+	/**
+	 * Retrieve the length of the given column.
+	 *
+	 * @param inIndex
+	 *            DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public int getFieldLength(int inIndex) {
+		return myHeader.getFieldLength(inIndex);
+	}
+
+	/*
+	 * Retrieve the value of the given column as string.
+	 *
+	 * @param idField DOCUMENT ME! @param idRecord DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * public Object getFieldValue(int idField, long idRecord) throws
+	 * IOException { Object[] tmpReg = getRecord(idRecord); return
+	 * tmpReg[idField]; }
+	 */
+	/*
+	 * DOCUMENT ME!
+	 *
+	 * @param idField DOCUMENT ME! @param idRecord DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * public double getFieldValueAsDouble(int idField, int idRecord) throws
+	 * IOException { Object[] tmpReg = getRecord(idRecord); return (double)
+	 * Double.parseDouble(tmpReg[idField].toString()); }
+	 */
+
+	/**
+	 * Retrieve the location of the decimal point.
+	 *
+	 * @param inIndex
+	 *            DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public int getFieldDecimalLength(int inIndex) {
+		return myHeader.getFieldDecimalCount(inIndex);
+	}
+
+	/**
+	 * read the DBF file into memory.
+	 *
+	 * @param file
+	 *            DOCUMENT ME!
+	 * @throws FileNotFoundException
+	 * @throws UnsupportedVersionException
+	 * @throws IOException
+	 *
+	 * @throws IOException
+	 *             DOCUMENT ME!
+	 */
+	public void open() throws FileNotFoundException,
+			UnsupportedVersionException, IOException {
+		/*
+		 * 01h DOS USA code page 437 02h DOS Multilingual code page 850 03h
+		 * Windows ANSI code page 1252 04h Standard Macintosh 64h EE MS-DOS code
+		 * page 852 65h Nordic MS-DOS code page 865 66h Russian MS-DOS code page
+		 * 866 67h Icelandic MS-DOS 68h Kamenicky (Czech) MS-DOS 69h Mazovia
+		 * (Polish) MS-DOS 6Ah Greek MS-DOS (437G) 6Bh Turkish MS-DOS 96h
+		 * Russian Macintosh 97h Eastern European Macintosh 98h Greek Macintosh
+		 * C8h Windows EE code page 1250 C9h Russian Windows CAh Turkish Windows
+		 * CBh Greek Windows
+		 */
+		if (!file.exists()) {
+			throw new FileNotFoundException(file);
+		}
+//		if (file.canWrite()) {
+//			try {
+//				raf = new RandomAccessFile(file, "rw");
+//				mode = FileChannel.MapMode.READ_WRITE;
+//			} catch (java.io.FileNotFoundException e) {
+//				raf = new RandomAccessFile(file, "r");
+//				mode = FileChannel.MapMode.READ_ONLY;
+//			}
+//		} else {
+			raf = new RandomAccessFile(file, "r");
+			mode = FileChannel.MapMode.READ_ONLY;
+//		}
+		channel = raf.getChannel();
+
+		// buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0,
+		// channel.size());
+		buffer = new BigByteBuffer2(channel, mode);
+
+		// create the header to contain the header information.
+		myHeader = new DbaseFileHeader();
+		if (chars == null) {
+			myHeader.readHeader(buffer, null);
+		} else {
+			myHeader.readHeader(buffer, chars.name());
+		}
+		charsOriginal = Charset.forName(myHeader.mappingEncoding(myHeader.getCharsetName()));
+		if (chars == null) {
+			chars = charsOriginal;
+		}
+		bytesCachedRecord = new byte[myHeader.getRecordLength()];
+		this.isOpen = true;
+	}
+
+	/**
+	 * Removes all data from the dataset
+	 * @throws CloseException
+	 *
+	 * @throws IOException
+	 *             DOCUMENT ME!
+	 */
+	public void close() throws CloseException {
+                logger.debug("Closing dbf file '"+this.file.getAbsolutePath()+"'");
+
+		try{
+		raf.close();
+		channel.close();
+		buffer = null;
+		posActual=-1;
+		myHeader = null;
+		}catch (Exception e) {
+			throw new CloseException("DBF",e);
+		}
+		this.isOpen = false;
+	}
+
+	public FileChannel getWriteChannel() {
+		return channel;
+	}
+
+	private String fieldString(Object obj, final int col) {
+		String o;
+		final int fieldLen = myHeader.getFieldLength(col);
+		switch (myHeader.getFieldType(col)) {
+		case 'C':
+		case 'c':
+			o = formatter.getFieldString(fieldLen, (obj == null) ? NULL_STRING
+					: ((String) obj));
+			break;
+		case 'L':
+		case 'l':
+			o = (obj == null) ? "F"
+					: ((Boolean) obj).booleanValue() == true ? "T" : "F";
+			break;
+		case 'M':
+		case 'G':
+			o = formatter.getFieldString(fieldLen, (obj == null) ? NULL_STRING
+					: ((String) obj));
+			break;
+		case 'N':
+		case 'n':
+		case 'F':
+		case 'f':
+			Number number = null;
+			if (obj == null) {
+				number = NULL_NUMBER;
+			} else {
+				Number gVal = (Number) obj;
+				number = new Double(gVal.doubleValue());
+			}
+			o = formatter.getFieldString(fieldLen, myHeader
+					.getFieldDecimalCount(col), number);
+			break;
+		case 'D':
+		case 'd':
+			if (obj == null) {
+				o = NULL_DATE;
+			} else {
+				o = formatter.getFieldString(((Date) obj));
+			}
+			break;
+		default:
+			throw new RuntimeException("Unknown type "
+					+ myHeader.getFieldType(col));
+		}
+
+		return o;
+	}
+
+	public boolean isOpen() {
+		return this.isOpen;
+	}
+
+	public int getFieldIndex(String name) {
+		return myHeader.getFieldIndex(name);
+	}
+
+	public Charset getCurrenCharset() {
+		return chars;
+	}
+
+	public Charset getOriginalCharset() {
+		return charsOriginal;
+	}
+
+	public void setCharset(Charset chars) {
+		this.chars = chars;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFile.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/MyTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/MyTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/MyTransform.java	(revision 42196)
@@ -0,0 +1,153 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class MyTransform extends AbstractFeatureStoreTransform {
+
+    private String geomName;
+	private String xname;
+	private String yname;
+
+    private GeometryManager geomManager;
+
+	/**
+	 * A default constructor with out parameters
+	 */
+	public MyTransform() {
+		this.geomManager = GeometryLocator.getGeometryManager();
+
+	}
+
+	/**
+	 * Initializes the transform by assigning the source store and the names of
+	 * the necessary attributes.
+	 *
+	 * @param store
+	 *            source store.
+	 *
+	 * @param geomName
+	 *            name of the geometry attribute in the default feature type
+	 *            from the source store.
+	 *
+	 * @param xname
+	 *            name of the attribute containing the X coordinates
+	 *
+	 * @param yname
+	 *            name of the attribute containing the Y coordinates
+	 *
+	 * @throws DataException
+	 */
+	public MyTransform initialize(FeatureStore store, String geomName,
+			String xname, String yname) throws DataException {
+
+		// Initialize some data
+		setFeatureStore(store);
+		this.geomName = geomName;
+		this.xname = xname;
+		this.yname = yname;
+
+		// obtain the feature type, add the new attribute
+		// and keep a reference to the
+		// resulting feature type
+		EditableFeatureType type = getFeatureStore().getDefaultFeatureType()
+				.getEditable();
+		type.add(geomName, DataTypes.GEOMETRY);
+		List list = new ArrayList(1);
+		list.add(type.getNotEditableCopy());
+		setFeatureTypes(list, (FeatureType) list.get(0));
+		return this;
+	}
+
+	/**
+	 * Applies this transform to a target editable feature, using data from the
+	 * source feature.
+	 */
+	public void applyTransform(Feature source, EditableFeature target)
+			throws DataException {
+
+		// copy source feature data over target feature
+		target.copyFrom(source);
+
+		// calculate and assign new attribute's value
+		Geometry geom;
+		try {
+			geom = geomManager.createPoint(source.getDouble(xname), source
+					.getDouble(yname), Geometry.SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			throw new ReadException("XYTranform", e);
+		}
+		target.setGeometry(this.geomName, geom);
+	}
+
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("xname", xname);
+		state.set("yname", yname);
+		state.set("geomName", geomName);
+	}
+
+    public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		this.xname = state.getString("xname");
+		this.yname = state.getString("yname");
+		this.geomName = state.getString("geomName");
+	}
+
+    /**
+	 * Returns the FeatureType to use to get data from original store
+	 */
+	public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
+		EditableFeatureType ed = targetFeatureType.getEditable();
+		ed.remove(this.geomName);
+		return ed.getNotEditableCopy();
+	}
+
+	/**
+	 * Informs that original values of store don't will be modified
+	 */
+	public boolean isTransformsOriginalValues() {
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/MyTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureProvider.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadRuntimeException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public class DBFFeatureProvider extends DefaultFeatureProvider {
+	protected DBFStoreProvider store;
+	protected boolean loading;
+	protected boolean loaded;
+
+	public DBFFeatureProvider(DBFStoreProvider store, FeatureType type) {
+		super(type);
+		this.store = store;
+		loading = false;
+		loaded = false;
+	}
+
+	protected void load() {
+		if (loading || loaded || this.isNew()) {
+			return;
+		}
+		loading = true;
+		try {
+			this.store.loadFeatureProviderByIndex(this);
+		} catch (DataException e) {
+			throw new ReadRuntimeException("DBFFeatureProvider.load", e);
+		} finally {
+			loading = false;
+			loaded = true;
+		}
+	}
+
+	public void set(int i, Object value) {
+		this.load();
+		super.set(i, value);
+	}
+
+	public void set(String name, Object value) {
+		this.load();
+		super.set(featureType.getIndex(name), value);
+	}
+
+	public Object get(int i) {
+		this.load();
+		return super.get(i);
+	}
+
+	public Object get(String name) {
+		this.load();
+		return super.get(name);
+	}
+
+	public Geometry getDefaultGeometry() {
+		return null;
+	}
+
+	public Envelope getDefaultEnvelope() {
+		return null;
+	}
+
+	public void setOID(Object oid) {
+		this.loaded = false;
+		super.setOID(oid);
+	}
+
+	public FeatureProvider getCopy() {
+		this.load();
+		return super.getCopy();
+	}
+
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFilesystemServerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFilesystemServerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFilesystemServerProvider.java	(revision 42196)
@@ -0,0 +1,250 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.CreateException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.AbsolutePathRequiredException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
+import org.gvsig.tools.dataTypes.DataTypes;
+
+public class DBFFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider 
+	implements FilesystemServerExplorerProvider, ResourceConsumer {
+
+	protected FilesystemServerExplorerProviderServices serverExplorer;
+
+	public String getDataStoreProviderName() {
+		return DBFStoreProvider.NAME;
+	}
+
+	public int getMode() {
+		return DataServerExplorer.MODE_FEATURE;
+	}
+
+	public boolean accept(File pathname) {
+		return (pathname.getName().toLowerCase().endsWith(".dbf"));
+	}
+
+	public String getDescription() {
+		return DBFStoreProvider.DESCRIPTION;
+	}
+
+	public DataStoreParameters getParameters(File file) throws DataException {
+		DataManager manager = DALLocator.getDataManager();
+		DBFStoreParameters params = (DBFStoreParameters) manager
+				.createStoreParameters(this.getDataStoreProviderName());
+		params.setDBFFile(file.getPath());
+		return params;
+	}
+
+	public boolean canCreate() {
+		return true;
+	}
+
+	public boolean canCreate(NewDataStoreParameters parameters) {
+		DBFNewStoreParameters params = (DBFNewStoreParameters) parameters;
+		if (params.getDBFFile().getParentFile().canWrite()) {
+			return false;
+		}
+		if (params.getDBFFile().exists()) {
+			if (!params.getDBFFile().canWrite()) {
+				return false;
+			}
+		}
+		if (params.getDefaultFeatureType() == null) {
+			return false;
+		}
+		return true;
+	}
+
+	public void create(NewDataStoreParameters parameters, boolean overwrite)
+			throws CreateException {
+
+		final DBFNewStoreParameters params = (DBFNewStoreParameters) parameters;
+		File file = params.getDBFFile();
+		
+		if (!file.isAbsolute()) {
+			throw new AbsolutePathRequiredException(file.getPath());
+		}
+
+
+		if (file.exists()) {
+			if (overwrite) {
+//				if (!file.delete()) {
+//					throw new CreateException(this.getDataStoreProviderName(),
+//							new IOException(
+//							"cannot delete file"));
+//				}
+			} else {
+				throw new CreateException(this.getDataStoreProviderName(),
+						new IOException(
+						"file already exist"));
+			}
+		}
+
+		final FileResource resource;
+		try {
+
+			resource = (FileResource) this.serverExplorer
+					.getServerExplorerProviderServices().createResource(
+							FileResource.NAME,
+					new Object[] { file.getAbsolutePath() });
+		} catch (InitializeException e1) {
+			throw new CreateException(params.getDBFFileName(), e1);
+		}
+		resource.addConsumer(this);
+
+		try {
+			resource.execute(new ResourceAction() {
+				public Object run() throws Exception {
+					DBFFeatureWriter writer =
+							new DBFFeatureWriter(getDataStoreProviderName());
+
+					writer.begin(
+                                                params, 
+                                                fixFeatureType(params.getDefaultFeatureType()), 
+                                                0
+                                        );
+					writer.end();
+					writer.dispose();
+					resource.notifyChanges();
+					return null;
+				}
+			});
+		} catch (ResourceExecuteException e) {
+			throw new CreateException(this.getDataStoreProviderName(), e);
+		} finally {
+			resource.removeConsumer(this);
+		}
+
+
+	}
+
+
+	protected NewDataStoreParameters createInstanceNewDataStoreParameters() {
+		return new DBFNewStoreParameters();
+	}
+
+
+	public NewDataStoreParameters getCreateParameters() {
+		NewFeatureStoreParameters params = (NewFeatureStoreParameters) this
+				.createInstanceNewDataStoreParameters();
+		params.setDefaultFeatureType(this.serverExplorer
+				.getServerExplorerProviderServices().createNewFeatureType());
+		return params;
+	}
+
+	public void initialize(FilesystemServerExplorerProviderServices serverExplorer) {
+		this.serverExplorer = serverExplorer;
+
+	}
+
+	public void remove(DataStoreParameters parameters) throws RemoveException {
+		DBFStoreParameters params = (DBFStoreParameters) parameters;
+		File file = params.getDBFFile();
+		if (!file.exists()) {
+			throw new RemoveException(this.getDataStoreProviderName(),
+					new FileNotFoundException(params.getDBFFile()));
+		}
+		if (!file.delete()) {
+			throw new RemoveException(this.getDataStoreProviderName(),
+					new IOException()); // FIXME Exception
+		}
+	}
+
+	public boolean closeResourceRequested(ResourceProvider resource) {
+		// while it is using a resource anyone can't close it
+		return !(this.equals(resource));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.
+	 * gvsig.fmap.dal.resource.spi.ResourceProvider)
+	 */
+	public void resourceChanged(ResourceProvider resource) {
+		// Do nothing
+	}
+
+        protected EditableFeatureType fixFeatureType(FeatureType featureType) {
+            EditableFeatureType newFeatureType;
+            
+            if( featureType instanceof EditableFeatureType ) {
+                newFeatureType = (EditableFeatureType) featureType.getCopy();
+            } else {
+                newFeatureType = featureType.getEditable();
+            }
+            
+            for( int i=0; i<newFeatureType.size(); i++ ) {
+                EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) newFeatureType.getAttributeDescriptor(i);
+                String s; 
+                switch(attr.getType()) {
+                case DataTypes.INT:
+                    s = String.valueOf(Integer.MAX_VALUE);
+                    attr.setSize(18);
+                    attr.setPrecision(0);
+                    break;
+                case DataTypes.LONG:
+                    s = String.valueOf(Long.MAX_VALUE);
+                    attr.setSize(18);
+                    attr.setPrecision(0);
+                    break;
+                case DataTypes.FLOAT:
+                    attr.setSize(18);
+                    attr.setPrecision(6);
+                    break;
+                case DataTypes.DOUBLE:
+                    attr.setSize(18);
+                    attr.setPrecision(6);
+                    break;
+                }
+            }
+            return newFeatureType;
+        }
+        
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFilesystemServerProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFSetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFSetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFSetProvider.java	(revision 42196)
@@ -0,0 +1,166 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadRuntimeException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureProviderIterator;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureSetProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author jjdelcerro
+ *
+ */
+public class DBFSetProvider extends AbstractFeatureSetProvider {
+
+	public DBFSetProvider(DBFStoreProvider store, FeatureQuery query,
+			FeatureType featureType)
+			throws DataException {
+		super(store, query, featureType);
+	}
+
+	public boolean canFilter() {
+		return false;
+	}
+
+	public boolean canIterateFromIndex() {
+		return true;
+	}
+
+	public boolean canOrder() {
+		return false;
+	}
+
+	public long getSize() throws DataException {
+		return getStore().getFeatureCount();
+	}
+
+	public boolean isEmpty() throws DataException {
+		return getSize() == 0;
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+	}
+
+	protected AbstractFeatureProviderIterator createIterator(long index)
+			throws DataException {
+		return new DBFIterator((DBFStoreProvider) getStore(), getFeatureType(),
+				index);
+	}
+
+	protected AbstractFeatureProviderIterator createFastIterator(long index)
+			throws DataException {
+		return new FastDBFIterator((DBFStoreProvider) getStore(),
+				getFeatureType(), index);
+	}
+
+	protected class DBFIterator extends AbstractFeatureProviderIterator {
+		protected long index;
+		protected FeatureType type;
+		protected long count;
+
+		public DBFIterator(DBFStoreProvider store, FeatureType type,
+				long startOn) throws DataException {
+			super(store);
+			this.index = startOn;
+			this.type = type;
+			this.count = store.getFeatureCount();
+		}
+
+		protected boolean internalHasNext() {
+			return this.count > index;
+		}
+
+		protected Object internalNext() {
+			if (index >= this.count) {
+				throw new NoSuchElementException();
+			}
+			try {
+
+				FeatureProvider ret =
+						getDBFStoreProvider().getFeatureProviderByIndex(index,
+								this.type);
+				index++;
+				return ret;
+			} catch (DataException e) {
+				throw new ReadRuntimeException(getDBFStoreProvider().getProviderName(),
+						e);
+			}
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+
+		protected void internalDispose() {
+			type = null;
+		}
+
+		protected DBFStoreProvider getDBFStoreProvider() {
+			return (DBFStoreProvider) getFeatureStoreProvider();
+		}
+
+		@Override
+		protected void doDispose() throws BaseException {
+			// Nothing to do
+		}
+	}
+
+	protected class FastDBFIterator extends DBFIterator {
+		protected FeatureProvider data;
+
+		public FastDBFIterator(DBFStoreProvider store, FeatureType type,
+				long startOn) throws DataException {
+			super(store, type, startOn);
+			this.data = getFeatureStoreProvider().createFeatureProvider(type);
+		}
+
+		protected Object internalNext() {
+			if (index >= this.count) {
+				throw new NoSuchElementException();
+			}
+
+			try {
+				getDBFStoreProvider().initFeatureProviderByIndex(this.data,
+						index, type);
+			} catch (DataException e) {
+				throw new ReadRuntimeException("next", e);
+			}
+			index++;
+			return this.data;
+		}
+
+		protected void internalDispose() {
+			super.internalDispose();
+			data = null;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFSetProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreProvider.java	(revision 42196)
@@ -0,0 +1,876 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.UnsupportedVersionException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.AttributeNameException;
+import org.gvsig.fmap.dal.feature.exception.AttributeNameTooLongException;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.exception.UnknownDataTypeException;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider.FeatureTypeChanged;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyChangesException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyCloseException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyOpenException;
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.dbf.utils.DbaseFile;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.exception.BaseException;
+
+public class DBFStoreProvider extends AbstractFeatureStoreProvider implements
+        ResourceConsumer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DBFStoreProvider.class);
+
+    public static final int MAX_FIELD_NAME_LENGTH = DbaseFile.MAX_FIELD_NAME_LENGTH;
+
+    public static String NAME = "DBF";
+    public static String DESCRIPTION = "DBF file";
+    private static final Locale ukLocale = new Locale("en", "UK");
+
+    public static final String METADATA_DEFINITION_NAME = NAME;
+    private static final String METADATA_ENCODING = "Encoding";
+    private static final String METADATA_CODEPAGE = "CodePage";
+
+    private DbaseFile dbfFile = null;
+    private ResourceProvider dbfResource;
+    private long counterNewsOIDs = -1;
+    private DBFFeatureWriter writer;
+
+    private static long lastLogTime = 0;
+
+    protected static void registerMetadataDefinition() throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(METADATA_DEFINITION_NAME) == null) {
+            manager.addDefinition(
+                    METADATA_DEFINITION_NAME,
+                    DBFStoreParameters.class.getResourceAsStream("DBFStoreMetadata.xml"),
+                    DBFStoreParameters.class.getClassLoader()
+            );
+        }
+    }
+
+    public DBFStoreProvider(DBFStoreParameters params,
+            DataStoreProviderServices storeServices)
+            throws InitializeException {
+        super(
+                params,
+                storeServices,
+                FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
+        );
+        this.init(params, storeServices);
+    }
+
+    protected DBFStoreProvider(DBFStoreParameters params,
+            DataStoreProviderServices storeServices, DynObject metadata)
+            throws InitializeException {
+        super(params, storeServices, metadata);
+        this.init(params, storeServices);
+    }
+
+    protected void init(DBFStoreParameters params,
+            DataStoreProviderServices storeServices) throws InitializeException {
+        if (params == null) {
+            throw new InitializeException(new NullPointerException("params is null"));
+        }
+        File theFile = getDBFParameters().getDBFFile();
+        if (theFile == null) {
+            throw new InitializeException(new NullPointerException("dbf file is null"));
+        }
+        initResource(params, storeServices);
+
+        Charset charset = params.getEncoding();
+        this.dbfFile = new DbaseFile(theFile, charset);
+
+        writer = new DBFFeatureWriter(this.getProviderName());
+
+        this.initFeatureType();
+
+    }
+
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        try {
+            this.open();
+        } catch (OpenException e) {
+            throw new RuntimeException(e);
+        }
+        if (METADATA_ENCODING.equalsIgnoreCase(name)) {
+            return this.dbfFile.getOriginalCharset();
+        } else if (METADATA_CODEPAGE.equalsIgnoreCase(name)) {
+            return new Byte(this.dbfFile.getCodePage());
+        }
+        return super.getDynValue(name);
+    }
+
+    protected void initResource(DBFStoreParameters params,
+            DataStoreProviderServices storeServices) throws InitializeException {
+
+        File theFile = getDBFParameters().getDBFFile();
+        dbfResource
+                = this.createResource(FileResource.NAME,
+                        new Object[]{theFile.getAbsolutePath()});
+        dbfResource.addConsumer(this);
+    }
+
+    public String getProviderName() {
+        return NAME;
+    }
+
+    protected DBFStoreParameters getDBFParameters() {
+        return (DBFStoreParameters) super.getParameters();
+    }
+
+    public DataServerExplorer getExplorer() throws ReadException {
+        DataManager manager = DALLocator.getDataManager();
+        FilesystemServerExplorerParameters params;
+        try {
+            params = (FilesystemServerExplorerParameters) manager
+                    .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+            params.setRoot(this.getDBFParameters().getDBFFile().getParent());
+            return manager.openServerExplorer(FilesystemServerExplorer.NAME, params);
+        } catch (DataException e) {
+            throw new ReadException(this.getProviderName(), e);
+        } catch (ValidateDataParametersException e) {
+            // TODO Auto-generated catch block
+            throw new ReadException(this.getProviderName(), e);
+        }
+    }
+
+    protected FeatureProvider internalGetFeatureProviderByReference(
+            FeatureReferenceProviderServices reference, FeatureType featureType)
+            throws DataException {
+        return this.getFeatureProviderByIndex(
+                ((Long) reference.getOID()).longValue(), featureType);
+    }
+
+    public void performChanges(Iterator deleteds, Iterator inserteds,
+            Iterator updateds, Iterator originalFeatureTypesUpdated)
+            throws PerformEditingException {
+
+        /*
+         * This will throw an exception if there are new fields
+         * with names too long
+         */
+        checkNewFieldsNameSize(originalFeatureTypesUpdated);
+
+        try {
+            final FeatureStore store
+                    = this.getStoreServices().getFeatureStore();
+            getResource().execute(new ResourceAction() {
+
+                public Object run() throws Exception {
+                    FeatureSet set = null;
+                    DisposableIterator iter = null;
+                    try {
+                        set = store.getFeatureSet();
+                        DBFStoreParameters tmpParams
+                                = (DBFStoreParameters) getDBFParameters().getCopy();
+
+                        File tmp_file = File.createTempFile(
+                                "tmp_" + System.currentTimeMillis(), ".dbf");
+                        tmp_file.deleteOnExit();
+
+                        tmpParams.setDBFFile(tmp_file);
+
+                        writer.begin(tmpParams, store.getDefaultFeatureType(),
+                                set.getSize());
+
+                        iter = set.fastIterator();
+                        while (iter.hasNext()) {
+                            Feature feature = (Feature) iter.next();
+                            writer.append(feature);
+                        }
+
+                        writer.end();
+
+                        try {
+                            close();
+                        } catch (CloseException e1) {
+                            throw new PerformEditingException(getProviderName(), e1);
+                        }
+                        getDBFParameters().getDBFFile().delete();
+
+                        File target_file = getDBFParameters().getDBFFile();
+                        if (target_file.exists()) {
+                            target_file.delete();
+                        }
+                        tmp_file.renameTo(target_file);
+
+                        if (tmp_file.exists() && !target_file.exists()) {
+                            // Renaming failed, let's simply copy.
+                            // We assume we cannot delete it, but we
+                            // used deleteOnExit and it's
+                            // temporary, so no problem
+                            LOG.info("Warning: copying tmp file instead of renaming: "
+                                    + target_file.getName());
+                            FileUtils.copyFile(tmp_file, target_file);
+                        }
+
+                        resourcesNotifyChanges();
+                        initFeatureType();
+                    } finally {
+                        if (set != null) {
+                            set.dispose();
+                        }
+                        if (iter != null) {
+                            iter.dispose();
+                        }
+                    }
+                    return null;
+                }
+            });
+        } catch (ResourceExecuteException e) {
+            throw new PerformEditingException(this.getProviderName(), e);
+        }
+
+        this.counterNewsOIDs = -1;
+    }
+
+    protected void checkNewFieldsNameSize(Iterator ft_upd) throws PerformEditingException {
+
+        String long_fields = getNewFieldsWithNameTooLong(ft_upd);
+        if (long_fields != null) {
+            AttributeNameException ane = new AttributeNameTooLongException(
+                    long_fields,
+                    getProviderName(),
+                    MAX_FIELD_NAME_LENGTH);
+            throw new PerformEditingException(getProviderName(), ane);
+        }
+    }
+
+    /**
+     * Returns null or a string which is a comma-separated list
+     *
+     * @param ft_updated
+     * @return
+     */
+    protected String getNewFieldsWithNameTooLong(Iterator ft_updated) {
+
+        String resp = "";
+        FeatureTypeChanged item = null;
+        FeatureType ft = null;
+        FeatureAttributeDescriptor[] atts = null;
+        while (ft_updated.hasNext()) {
+            item = (FeatureTypeChanged) ft_updated.next();
+            ft = item.getTarget();
+            atts = ft.getAttributeDescriptors();
+            for (int i = 0; i < atts.length; i++) {
+                if (atts[i].getName().length() > MAX_FIELD_NAME_LENGTH) {
+                    if (resp.length() == 0) {
+                        resp = atts[i].getName();
+                    } else {
+                        resp = resp + ", " + atts[i].getName();
+                    }
+                }
+            }
+        }
+
+        if (resp.length() == 0) {
+            return null;
+        } else {
+            return "(" + resp + ")";
+        }
+    }
+    /*
+     * ==================================================
+     */
+
+    public FeatureProvider createFeatureProvider(FeatureType type) throws DataException {
+        return new DBFFeatureProvider(this, type);
+    }
+
+
+    /*
+     * ===================================================
+     */
+    protected void initFeatureType() throws InitializeException {
+        try {
+            FeatureType defaultType
+                    = this.getTheFeatureType().getNotEditableCopy();
+            List types = new ArrayList(1);
+            types.add(defaultType);
+            this.getStoreServices().setFeatureTypes(types, defaultType);
+        } catch (OpenException e) {
+            throw new InitializeException(getResource().toString(), e);
+        }
+    }
+
+    protected EditableFeatureType getTheFeatureType()
+            throws InitializeException, OpenException {
+        try {
+            this.open();
+        } catch (DataException e) {
+            throw new InitializeException(this.getProviderName(), e);
+        }
+        return (EditableFeatureType) getResource().execute(
+                new ResourceAction() {
+
+                    public Object run() throws Exception {
+                        int fieldCount = -1;
+                        fieldCount = dbfFile.getFieldCount();
+
+                        EditableFeatureType fType = getStoreServices().createFeatureType(getName());
+
+                        fType.setHasOID(true);
+                        int precision;
+                        for (int i = 0; i < fieldCount; i++) {
+                            char fieldType = dbfFile.getFieldType(i);
+                            EditableFeatureAttributeDescriptor attr;
+
+                            if (fieldType == 'L') {
+                                attr = fType.add(dbfFile.getFieldName(i), DataTypes.BOOLEAN);
+                                attr.setDefaultValue(new Boolean(false));
+                                attr.setAllowNull(false);
+
+                            } else if ((fieldType == 'F') || (fieldType == 'N')) {
+                                precision = dbfFile.getFieldDecimalLength(i);
+                                if (precision > 0) {
+                                    attr = fType.add(dbfFile.getFieldName(i),
+                                            DataTypes.DOUBLE,
+                                            dbfFile.getFieldLength(i));
+                                    attr.setPrecision(precision);
+                                    attr.setDefaultValue(new Double(0));
+
+                                } else {
+                                    int length = dbfFile.getFieldLength(i);
+                                    int type = DataTypes.INT;
+                                    if (length > 9) {
+                                        type = DataTypes.LONG;
+                                    }
+                                    attr = fType.add(dbfFile.getFieldName(i),
+                                            type,
+                                            length);
+                                    attr.setDefaultValue(new Integer(0));
+                                }
+                                attr.setAllowNull(false);
+
+                            } else if (fieldType == 'C' || getDBFParameters().handleDatesAsStrings()) {
+                                attr = fType.add(dbfFile.getFieldName(i), DataTypes.STRING);
+                                attr.setSize(dbfFile.getFieldLength(i));
+                                attr.setDefaultValue("");
+                                attr.setAllowNull(false);
+
+                            } else if (fieldType == 'D') {
+                                attr = fType.add(dbfFile.getFieldName(i), DataTypes.DATE);
+                                attr.setDefaultValue(new Date(0)); // def value 1-1-1970
+                                attr.setAllowNull(true);
+                                String sfmt = getDBFParameters().getDateFormat();
+                                if (!StringUtils.isBlank(sfmt)) {
+                                    try {
+                                        SimpleDateFormat datefmt = new SimpleDateFormat(sfmt, getDBFParameters().getLocale());
+                                        attr.setDateFormat(datefmt);
+                                    } catch (Exception ex) {
+                                        LOG.warn("Invalid date format ("+sfmt+") specified in DBF parameters.",ex);
+                                    }
+                                }
+                            } else {
+                                throw new InitializeException(getProviderName(),
+                                        new UnknownDataTypeException(
+                                                dbfFile.getFieldName(i), ""
+                                                + fieldType, getProviderName()));
+                            }
+                        }
+
+                        // FeatureRules rules = fType.getRules();
+                        // rules.add(new DBFRowValidator());
+                        return fType;
+                    }
+                }
+        );
+    }
+
+    protected void loadValue(FeatureProvider featureProvider, int rowIndex,
+            FeatureAttributeDescriptor descriptor) throws ReadException {
+
+        if (descriptor.getEvaluator() != null) {
+            // Nothing to do
+            return;
+        }
+
+        int dbfIndex = this.dbfFile.getFieldIndex(descriptor.getName());
+
+        if (dbfIndex < 0) {
+            // Someone asked to load a field
+            // which does not exist in the DBF file. This can happen 
+            // in editing process when a field has been added
+            // in the current editing session, so we simply do nothing.
+            // The expansion manager is expected to manage those new fields
+            // and their values.
+            long curr_time = System.currentTimeMillis();
+            // This ensures not more than one log every 2 seconds
+            if (curr_time - lastLogTime > 2000) {
+                LOG.info("Warning: The requested field does not exist in the DBF file. Assumed it's a new field in editing mode.");
+                lastLogTime = curr_time;
+            }
+            return;
+        }
+
+        String value = null;
+        try {
+            value = this.dbfFile.getStringFieldValue(rowIndex, dbfIndex);
+        } catch (DataException e) {
+            throw new ReadException(this.getProviderName(), e);
+        }
+        value = value.trim();
+        int fieldType = descriptor.getType();
+        switch (fieldType) {
+            case DataTypes.STRING:
+                featureProvider.set(descriptor.getIndex(), value);
+                break;
+
+            case DataTypes.DOUBLE:
+                try {
+                    featureProvider.set(descriptor.getIndex(), new Double(value));
+                } catch (NumberFormatException e) {
+                    featureProvider.set(descriptor.getIndex(), null);
+                }
+                break;
+
+            case DataTypes.INT:
+                try {
+                    featureProvider.set(descriptor.getIndex(), new Integer(value));
+                } catch (NumberFormatException e) {
+                    featureProvider.set(descriptor.getIndex(), null);
+                }
+                break;
+
+            case DataTypes.FLOAT:
+                try {
+                    featureProvider.set(descriptor.getIndex(), new Float(value));
+                } catch (NumberFormatException e) {
+                    featureProvider.set(descriptor.getIndex(), null);
+                }
+                break;
+
+            case DataTypes.LONG:
+                try {
+                    featureProvider.set(descriptor.getIndex(), new Long(value));
+                } catch (NumberFormatException e) {
+                    featureProvider.set(descriptor.getIndex(), null);
+                }
+                break;
+
+            case DataTypes.BOOLEAN:
+                if (value.equalsIgnoreCase("T")) {
+                    featureProvider.set(descriptor.getIndex(), Boolean.TRUE);
+                } else {
+                    featureProvider.set(descriptor.getIndex(), Boolean.FALSE);
+
+                }
+                break;
+
+            case DataTypes.BYTE:
+                try {
+                    featureProvider.set(descriptor.getIndex(), new Byte(value));
+                } catch (NumberFormatException e) {
+                    featureProvider.set(descriptor.getIndex(), null);
+                }
+                break;
+
+            case DataTypes.DATE:
+                if (value.equals("")) {
+                    value = null;
+                    return;
+                }
+                Date dat = null;
+                DateFormat df = new SimpleDateFormat("yyyyMMdd");
+                try {
+                    dat = df.parse(value);
+                } catch (ParseException e) {
+                    throw new InvalidDateException(df.toString(), value, this.getProviderName(), e);
+                }
+                featureProvider.set(descriptor.getIndex(), dat);
+                break;
+
+            default:
+                featureProvider
+                        .set(descriptor.getIndex(), descriptor.getDefaultValue());
+                break;
+        }
+    }
+
+    private static class InvalidDateException extends ReadException {
+        public InvalidDateException(String dateFormat, String value, String store, Throwable cause) {
+            super(
+                    "Can't parse date value '%(value)' with format '%(dateFormat)' in dbf '%(store)'.",
+                    cause,
+                    "Cant_parse_date_value_XvalueX_with_format_XdateFormatX_in_dbf_XstoreX",
+                    0
+            );
+            setValue("dateFormat",dateFormat);
+            setValue("value", value);
+            setValue("store",store);   
+        }
+    }
+    
+    /**
+     * *
+     * NOT supported in Alter Mode
+     *
+     * @param index
+     * @return
+     * @throws ReadException
+     */
+    protected FeatureProvider getFeatureProviderByIndex(long index) throws DataException {
+        return this
+                .getFeatureProviderByIndex(index, this.getStoreServices()
+                        .getDefaultFeatureType());
+    }
+
+    public long getFeatureCount() throws ReadException, OpenException,
+            ResourceNotifyChangesException {
+        this.open();
+        return ((Long) getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                return Long.valueOf(dbfFile.getRecordCount());
+            }
+        })).longValue();
+    }
+
+    public FeatureSetProvider createSet(FeatureQuery query, FeatureType featureType)
+            throws DataException {
+        return new DBFSetProvider(this, query, featureType);
+    }
+
+    public boolean canCreate() {
+        return true;
+    }
+
+    public boolean canWriteGeometry(int geometryType, int geometrySubType) throws DataException {
+        return false;
+    }
+
+    public void open() throws OpenException {
+        if (this.dbfFile.isOpen()) {
+            return;
+        }
+        try {
+            getResource().execute(new ResourceAction() {
+                public Object run() throws Exception {
+                    openFile();
+                    resourcesOpen();
+                    return null;
+                }
+            });
+
+        } catch (ResourceExecuteException e) {
+            throw new OpenException(this.getProviderName(), e);
+        }
+    }
+
+    protected void openFile() throws FileNotFoundException,
+            UnsupportedVersionException, IOException, DataException {
+        this.dbfFile.open();
+    }
+
+    public void close() throws CloseException {
+        if (dbfFile == null || !this.dbfFile.isOpen()) {
+            return;
+        }
+        super.close();
+        //Cerrar recurso
+        try {
+            getResource().execute(new ResourceAction() {
+                public Object run() throws Exception {
+                    closeFile();
+                    resourcesNotifyClose();
+                    return null;
+                }
+            });
+        } catch (ResourceExecuteException e) {
+            throw new CloseException(this.getProviderName(), e);
+        }
+    }
+
+    protected void closeFile() throws CloseException {
+        this.dbfFile.close();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        this.close();
+        dbfFile = null;
+        disposeResource();
+        super.doDispose();
+    }
+
+    protected void disposeResource() {
+        this.dbfResource.removeConsumer(this);
+        dbfResource = null;
+    }
+
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        try {
+            this.close();
+        } catch (CloseException e) {
+            return false;
+        }
+        return true;
+    }
+
+    public boolean allowWrite() {
+        File file;
+        try {
+            file = ((File) this.dbfResource.get());
+        } catch (AccessResourceException e) {
+            return false;
+        }
+        return file.canWrite();
+    }
+
+    public void refresh() throws OpenException {
+        try {
+            this.close();
+        } catch (CloseException e) {
+            throw new OpenException(this.getProviderName(), e);
+        }
+        this.open();
+        try {
+            this.initFeatureType();
+        } catch (InitializeException e) {
+            throw new OpenException(this.getProviderName(), e);
+        }
+    }
+
+    /**
+     *
+     * @param index
+     * @param featureType
+     * @return
+     * @throws ReadException
+     */
+    protected FeatureProvider getFeatureProviderByIndex(long index,
+            FeatureType featureType) throws DataException {
+        FeatureProvider featureProvider = this.createFeatureProvider(featureType);
+        featureProvider.setOID(new Long(index));
+        return featureProvider;
+    }
+
+    protected void initFeatureProviderByIndex(FeatureProvider featureProvider,
+            long index, FeatureType featureType) throws DataException {
+        featureProvider.setOID(new Long(index));
+    }
+
+    /**
+     *
+     * @param featureProvider
+     * @throws DataException
+     */
+    protected void loadFeatureProviderByIndex(FeatureProvider featureProvider)
+            throws DataException {
+
+        long index = ((Long) featureProvider.getOID()).longValue();
+        int rec_count = this.dbfFile.getRecordCount();
+
+        if (index >= rec_count) {
+
+            ReadException rex = new ReadException(NAME,
+                    new ArrayIndexOutOfBoundsException(
+                            "Index of requested feature ("
+                            + index + ") is >= record count (" + rec_count + ")"));
+
+            LOG.info("Error while loading feature. ", rex);
+            throw rex;
+        }
+
+        Iterator iterator = featureProvider.getType().iterator();
+        while (iterator.hasNext()) {
+            FeatureAttributeDescriptor descriptor
+                    = (FeatureAttributeDescriptor) iterator.next();
+            this.loadValue(featureProvider, (int) index, descriptor);
+        }
+    }
+
+    public int getOIDType() {
+        return DataTypes.LONG;
+    }
+
+    public Object createNewOID() {
+        if (this.counterNewsOIDs < 0) {
+            try {
+                this.counterNewsOIDs = this.getFeatureCount();
+            } catch (DataException e) {
+                e.printStackTrace();
+            }
+
+        } else {
+            this.counterNewsOIDs++;
+        }
+        return new Long(counterNewsOIDs);
+    }
+
+    public boolean supportsAppendMode() {
+        return true;
+    }
+
+    public void append(final FeatureProvider featureProvider)
+            throws DataException {
+        getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                writer.append(getStoreServices().createFeature(featureProvider));
+                return null;
+            }
+        });
+    }
+
+    public void beginAppend() throws DataException {
+        this.close();
+        getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                writer.begin(getDBFParameters(),
+                        getStoreServices().getDefaultFeatureType(),
+                        getStoreServices().getFeatureStore().getFeatureCount());
+                return null;
+            }
+        });
+    }
+
+    public void endAppend() throws DataException {
+        getResource().execute(new ResourceAction() {
+            public Object run() throws Exception {
+                writer.end();
+                resourcesNotifyChanges();
+                counterNewsOIDs = -1;
+                return null;
+            }
+        });
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.
+     * gvsig.fmap.dal.resource.spi.ResourceProvider)
+     */
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(
+                DataStoreNotification.RESOURCE_CHANGED,
+                resource);
+    }
+
+    /**
+     *
+     * @throws ResourceNotifyChangesException
+     */
+    protected void resourcesNotifyChanges()
+            throws ResourceNotifyChangesException {
+        this.dbfResource.notifyChanges();
+    }
+
+    /**
+     * @throws ResourceNotifyCloseException
+     *
+     */
+    protected void resourcesNotifyClose() throws ResourceNotifyCloseException {
+        this.dbfResource.notifyClose();
+    }
+
+    /**
+     * @throws ResourceNotifyOpenException
+     *
+     */
+    protected void resourcesOpen() throws ResourceNotifyOpenException {
+        this.dbfResource.notifyOpen();
+    }
+
+    public Object getSourceId() {
+        return this.getDBFParameters().getFile();
+    }
+
+    public String getName() {
+        String name = this.getDBFParameters().getFile().getName();
+        int n = name.lastIndexOf(".");
+        if (n < 1) {
+            return name;
+        }
+        return name.substring(0, n);
+    }
+
+    public String getFullName() {
+        return this.getDBFParameters().getFile().getAbsolutePath();
+    }
+
+    protected void resourceCloseRequest() throws ResourceException {
+        this.dbfResource.closeRequest();
+    }
+
+    public ResourceProvider getResource() {
+        return dbfResource;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureWriter.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.channels.FileChannel;
+import java.nio.channels.WritableByteChannel;
+import java.nio.charset.Charset;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeNotSuportedException;
+import org.gvsig.fmap.dal.store.dbf.utils.DbaseFileHeader;
+import org.gvsig.fmap.dal.store.dbf.utils.DbaseFileWriter;
+
+public class DBFFeatureWriter {
+	protected FeatureType featuretype;
+	private DbaseFileWriter dbfWriter = null;
+	protected String name;
+	private File dbfFile;
+	private DbaseFileHeader myHeader;
+	private FileChannel dbfChannel;
+
+	protected DBFFeatureWriter(String name) {
+		this.name= name;
+	}
+
+	public void begin(DBFStoreParameters storeParameters,
+			FeatureType featureType, long numRows) throws DataException {
+
+		// TODO if is new set the langID
+		try {
+			myHeader = DbaseFileHeader.createDbaseHeader(featureType);
+		} catch (AttributeFeatureTypeNotSuportedException e1) {
+			throw new WriteException(this.name, e1);
+		}
+
+		dbfFile = storeParameters.getDBFFile();
+
+		dbfChannel = null;
+
+		try {
+			dbfChannel = (FileChannel) getWriteChannel(dbfFile
+					.getAbsolutePath());
+		} catch (IOException e) {
+			throw new WriteException(this.name, e);
+		}
+		try{
+			this.dbfWriter = new DbaseFileWriter(myHeader, dbfChannel, true);
+
+
+			this.dbfWriter.setCharset(Charset.forName("ISO-8859-1"));
+			} catch (InitializeException e) {
+				throw new WriteException(this.name, e);
+			}
+
+
+		this.featuretype=featureType;
+		dbfFile = storeParameters.getDBFFile();
+
+	}
+
+	public void append(Feature feature) throws DataException {
+		// TODO use FeatureProvider
+		dbfWriter.append(feature);
+	}
+
+	public void end() throws DataException {
+		dbfWriter.close();
+	}
+
+	public void dispose() {
+		dbfWriter = null;
+
+	}
+
+	protected static WritableByteChannel getWriteChannel(String path)
+	throws IOException {
+		WritableByteChannel channel;
+
+		File f = new File(path);
+
+		if (!f.exists()) {
+			//			System.out.println("Creando fichero " + f.getAbsolutePath());
+
+			if (!f.createNewFile()) {
+				System.err.print("Error al crear el fichero "
+						+ f.getAbsolutePath());
+				throw new IOException("Cannot create file " + f);
+			}
+		}
+
+		RandomAccessFile raf = new RandomAccessFile(f, "rw");
+		channel = raf.getChannel();
+
+		return channel;
+	}
+
+	/**
+	 * @return
+	 */
+	protected int getRowCount() {
+		return this.myHeader.getNumRecords();
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFFeatureWriter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFNewStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFNewStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFNewStoreParameters.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.dbf;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+
+public class DBFNewStoreParameters extends DBFStoreParameters implements
+		NewFeatureStoreParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "DBFNewStoreParameters";
+
+    public static final String FEATURETYPE_PARAMTER_NAME = "FeatureType";
+    
+    public static final String CODEPAGE_PARAMTER_NAME = "codePage";
+    
+    public DBFNewStoreParameters() {
+    	super(PARAMETERS_DEFINITION_NAME);
+    }
+
+	public byte getCodePage(){
+		return ((Byte) this.getDynValue(CODEPAGE_PARAMTER_NAME)).byteValue();
+	}
+
+	public void setCodePage(byte value){
+		setDynValue(CODEPAGE_PARAMTER_NAME, new Byte(value));
+	}
+
+	public EditableFeatureType getDefaultFeatureType() {
+		return (EditableFeatureType) this.getDynValue(FEATURETYPE_PARAMTER_NAME);
+	}
+
+	public void setDefaultFeatureType(FeatureType featureType) {
+		this.setDynValue(FEATURETYPE_PARAMTER_NAME, featureType);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFNewStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreParameters.java	(revision 42196)
@@ -0,0 +1,213 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.OpenDataStoreParameters;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DBFStoreParameters extends AbstractDataParameters implements
+		OpenDataStoreParameters, FilesystemStoreParameters {
+
+    private static final Logger logger = LoggerFactory.getLogger(DBFStoreParameters.class);
+            
+    public static final String PARAMETERS_DEFINITION_NAME = "DBFStoreParameters";
+
+	public static final String DBFFILE_PARAMTER_NAME = "dbfFile";
+	public static final String ENCODING_PARAMTER_NAME = "encoding";
+	public static final String HANDLE_DATES_AS_STRINGS = "handleDatesAsStrings";
+	public static final String DATE_FORMAT = "dateFormat";
+	public static final String LOCALE = "locale";
+
+	private DelegatedDynObject parameters;
+
+	public DBFStoreParameters() {
+		this(PARAMETERS_DEFINITION_NAME);
+	}
+
+	protected DBFStoreParameters(String parametersDefinitionName) {
+		this(parametersDefinitionName, DBFStoreProvider.NAME);
+	}
+
+	public DBFStoreParameters(String parametersDefinitionName, String name) {
+		super();
+		this.parameters = (DelegatedDynObject) FileHelper.newParameters(parametersDefinitionName);
+		this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
+	}
+
+	public String getDataStoreName() {
+		return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+	}
+
+	public String getDescription() {
+		return this.getDynClass().getDescription();
+	}
+
+	public boolean isValid() {
+		return (this.getDBFFileName() != null);
+	}
+
+	public File getFile() {
+		return (File) this.getDynValue(DBFFILE_PARAMTER_NAME);
+	}
+
+	public void setFile(File file) {
+		this.setDynValue(DBFFILE_PARAMTER_NAME, file);
+	}
+
+	public void setFile(String fileName) {
+		this.setDynValue(DBFFILE_PARAMTER_NAME, fileName);
+	}
+
+	public String getDBFFileName() {
+		if( this.getDBFFile() == null ) {
+			return null;
+		}
+		return this.getDBFFile().getAbsolutePath();
+	}
+
+	public File getDBFFile() {
+		return (File) this.getDynValue(DBFFILE_PARAMTER_NAME);
+	}
+
+	public void setDBFFile(File file) {
+		this.setDynValue(DBFFILE_PARAMTER_NAME, file);
+	}
+
+	public void setDBFFile(String fileName) {
+		this.setDynValue(DBFFILE_PARAMTER_NAME, fileName);
+	}
+
+	public String getEncodingName() {
+		String s = (String) getDynValue(ENCODING_PARAMTER_NAME);
+                if( StringUtils.isBlank(s) ) {
+                        return null;
+                }
+                if( "DEFAULT".equalsIgnoreCase(s.trim()) ) {
+                    return null;
+                }
+                return s.trim();
+        }
+	
+	public Charset getEncoding() {
+		String name = getEncodingName();
+                if( StringUtils.isBlank(name) ) {
+                        return null;
+                }
+		return Charset.forName(name);
+	}
+
+	public void setEncoding(String encoding) {
+		this.setEncoding(Charset.forName(encoding));
+	}
+
+        public boolean handleDatesAsStrings() {
+            Boolean x = (Boolean) getDynValue(HANDLE_DATES_AS_STRINGS);
+            return BooleanUtils.isTrue(x);
+        }
+        
+	public void setEncoding(Charset charset) {
+		this.setDynValue(ENCODING_PARAMTER_NAME, charset.name());
+	}
+
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return parameters;
+	}
+        
+        public Locale getLocale() {
+            try {
+                    String s = (String) this.getDynValue(LOCALE);
+                    if( s.trim().length()==0 ) {
+                            return null;
+                    }
+                    if( "DEFAULT".equalsIgnoreCase(s.trim()) ) {
+                        return Locale.getDefault();
+                    }
+                    Locale locale = null;
+                    // locale = Locale.forLanguageTag(s); // Since java 1.7
+                    String[] ss = s.split("-");
+                    switch(ss.length) {
+                    case 1:
+                       locale = new Locale(ss[0]);
+                        break;
+                    case 2:
+                       locale = new Locale(ss[0],ss[1]);
+                       break;
+                    case 3:
+                    default:
+                       locale = new Locale(ss[0],ss[1],ss[2]);
+                       break;
+                    }
+                    return locale;
+            } catch( Exception ex) {
+                    logger.warn("Can't get locale from DBF parameters.", ex);
+                    return Locale.getDefault();
+            }
+        }
+
+        public String getDateFormat() {
+		return (String) getDynValue(DATE_FORMAT);
+	}
+
+        public void validate() throws ValidateDataParametersException {
+            super.validate();
+            String sfmt = getDateFormat();
+            if( !StringUtils.isBlank(sfmt) ) {
+                try {
+                    SimpleDateFormat datefmt = new SimpleDateFormat(sfmt, getLocale());
+                } catch(Exception ex) {
+                    throw new InvalidDateFormatException(sfmt,ex);
+                }
+            }
+        }
+	
+        private static class InvalidDateFormatException extends ValidateDataParametersException {
+            
+            public InvalidDateFormatException(String sfmt, Throwable cause) {
+                super(
+                        "Date format specified '%(dataformat)' is not valid.",
+                        cause,
+                        "Date_format_specified_XdataformatX_is_not_valid",
+                        0
+                );
+                setValue("dataformat",sfmt);
+                        
+            }
+        }
+        
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/DBFStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.dbf.DBFLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFMetadata.xml	(revision 42196)
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!--
+Definitions of metadata fields of a dbf file.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="DBF" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="FeatureProvider"/>
+      </extends>
+      <description>Metadata of a DBF store</description>
+      <fields>
+        <field name="Encoding" type="string" mandatory="false">
+          <description>Encoding used</description>
+          <availableValues>
+          	<value label="(default)"></value>
+            <value label="US-ASCII">US-ASCII</value>
+            <value label="ISO-8859-1">ISO-8859-1</value>
+            <value label="ISO-8859-15">ISO-8859-15</value>
+            <value label="windows-1250">windows-1250</value>
+            <value label="windows-1252">windows-1252</value>
+            <value label="UTF-8">UTF-8</value>
+            <value label="UTF-16">UTF-16</value>
+            <value label="UTF-16BE">UTF-16BE</value>
+            <value label="UTF-16LE">UTF-16LE</value>
+          </availableValues>
+        </field>
+        <field name="CodePage" type="Integer" mandatory="false">          
+          <description>Code page used</description>
+          <availableValues>
+            <value label="DOS USA">0x01</value>
+            <value label="DOS Multilingual">0x02</value>
+            <value label="Windows ANSI">0x03</value>
+            <value label="Standard Macintosh">0x04</value>
+            <value label="EE MS-DOS">0x64</value>
+            <value label="Nordic MS-DOS">0x65</value>
+            <value label="Russian MS-DOS">0x66</value>
+            <value label="Icelandic MS-DOS">0x67</value>
+            <value label="Kamenicky (Czech) MS-DOS">0x68</value>
+            <value label="Mazovia (Polish) MS-DOS">0x69</value>
+            <value label="Greek MS-DOS (437G)">0x6A</value>
+            <value label="Turkish MS-DOS">0x6B</value>
+            <value label="Russian Macintosh">0x96</value>
+            <value label="Macintosh">0x97</value>
+            <value label="Greek Macintosh">0x98</value>
+            <value label="Windows EE">0xC8</value>
+            <value label="Russian Windows">0xC9</value>
+            <value label="Turkish Windows">0xCA</value>
+            <value label="Greek Windows">0xCB</value>
+          </availableValues> 
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFMetadata.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFParameters.xml	(revision 42196)
@@ -0,0 +1,119 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="DBFStoreParameters">
+      <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <tags>
+          <value name="defaultGroup" value="Basic"/>
+      </tags>
+      <description>Store the parameters need to open a dbf file</description>
+      <fields>
+        <field name="DbfFile" label="DBF file" type="file" mandatory="true" group="Basic">
+          <description>dbf file</description>
+        </field>
+        <field name="Encoding" type="string" mandatory="false" defaultValue="DEFAULT" group="Basic">
+          <description>Encoding used in this file</description>
+          <availableValues>
+            <value label="Default (use dbf language)">DEFAULT</value>
+            <value label="US-ASCII">US-ASCII</value>
+            <value label="ISO-8859-1">ISO-8859-1</value>
+            <value label="ISO-8859-15">ISO-8859-15</value>
+            <value label="windows-1250">windows-1250</value>
+            <value label="windows-1252">windows-1252</value>
+            <value label="UTF-8">UTF-8</value>
+            <value label="UTF-16">UTF-16</value>
+            <value label="UTF-16BE">UTF-16BE</value>
+            <value label="UTF-16LE">UTF-16LE</value>
+          </availableValues>
+        </field>
+        <field name="handleDatesAsStrings" label="Handle dates as strings" type="boolean" mandatory="false" defaultValue="false" group="Advanced">
+          <description>If set handle fields of date types as strings.</description>
+        </field>
+        <field name="locale" type="string" mandatory="true" defaultValue="DEFAULT" group="Advanced">
+          <description>Locale used to parse dates (BCP47 language tag representing the locale)</description>
+  	  <availableValues>
+            <value label="Default (use system locale)">DEFAULT</value>
+            <value label="Canada (english)">en-CA</value>
+            <value label="Canada (french)">fr-CA</value>
+            <value label="Chinese">zh</value>
+            <value label="English">en</value>
+            <value label="French">fr</value>
+            <value label="German">de</value>
+            <value label="Italian">it</value>
+            <value label="Japanese">ja</value>
+            <value label="Korea">ko</value>
+            <value label="Spain">es</value>
+            <value label="Uk">en-GB</value>
+            <value label="Us">en-US</value>
+          </availableValues>          
+        </field>  
+        <field name="dateFormat" label="Date format" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Date format used to parse fields of type date.</description>
+        </field>             
+      </fields>
+    </class>
+
+    <class name="DBFNewStoreParameters">
+      <description>Store the parameters need to create a dbf file</description>
+      <extends>
+        <class>DBFStoreParameters</class>
+        <class namespace="dal" name="NewProviderParameters"/>
+      </extends>
+      <fields>
+        <field name="codePage" type="Integer" mandatory="false"  group="Advanced">          
+          <description>Code page used in this file</description>
+          <availableValues>
+            <value label="DOS USA">0x01</value>
+            <value label="DOS Multilingual">0x02</value>
+            <value label="Windows ANSI">0x03</value>
+            <value label="Standard Macintosh">0x04</value>
+            <value label="EE MS-DOS">0x64</value>
+            <value label="Nordic MS-DOS">0x65</value>
+            <value label="Russian MS-DOS">0x66</value>
+            <value label="Icelandic MS-DOS">0x67</value>
+            <value label="Kamenicky (Czech) MS-DOS">0x68</value>
+            <value label="Mazovia (Polish) MS-DOS">0x69</value>
+            <value label="Greek MS-DOS (437G)">0x6A</value>
+            <value label="Turkish MS-DOS">0x6B</value>
+            <value label="Russian Macintosh">0x96</value>
+            <value label="Macintosh">0x97</value>
+            <value label="Greek Macintosh">0x98</value>
+            <value label="Windows EE">0xC8</value>
+            <value label="Russian Windows">0xC9</value>
+            <value label="Turkish Windows">0xCA</value>
+            <value label="Greek Windows">0xCB</value>
+          </availableValues> 
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/resources/org/gvsig/fmap/dal/store/dbf/DBFParameters.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/pom.xml	(revision 42196)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.file.dbf</artifactId>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <dependencies>
+    <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+      <plugins>
+          <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-compiler-plugin</artifactId>
+              <configuration>
+                  <source>1.5</source>
+                  <target>1.5</target>
+                  <encoding>ISO-8859-1</encoding>
+              </configuration>
+          </plugin>
+    
+      </plugins>
+  </build>
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n"/>
+        </layout>
+    </appender>
+
+  <category name="org.gvsig.fmap.dal">
+    <priority value="WARN"/>
+  </category>
+
+    <root>
+        <priority value="INFO" />
+        <appender-ref ref="CONSOLE" />
+    </root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/commands/CommandTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/commands/CommandTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/commands/CommandTest.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.commands;
+
+import junit.framework.TestCase;
+
+public class CommandTest extends TestCase {
+
+	public static void main(String[] args) {
+		junit.textui.TestRunner.run(CommandTest.class);
+	}
+
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	public void testInitialize() {
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/commands/CommandTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/DataStoreTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/DataStoreTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/DataStoreTest.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import junit.framework.TestCase;
+
+public class DataStoreTest extends TestCase {
+    
+    public void testVoid() {
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/DataStoreTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceTest.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import junit.framework.TestCase;
+
+import org.easymock.MockControl;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotifyOpenException;
+
+/**
+ * Unit tests for the class {@link AbstractResource}
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class AbstractResourceTest extends TestCase {
+
+	private AbstractResource resource;
+	private MockControl paramsControl;
+	private ResourceParameters params;
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		paramsControl = MockControl.createNiceControl(ResourceParameters.class);
+		params = (ResourceParameters) paramsControl.getMock();
+		resource = new TestResource(params);
+	}
+
+	/**
+	 * Test method for {@link org.gvsig.fmap.dal.resource.spi.AbstractResource#getLastTimeOpen()}.
+	 */
+	public void testGetLastTimeOpen() throws ResourceNotifyOpenException {
+		long time = resource.getLastTimeOpen();
+		resource.notifyOpen();
+		assertTrue("The resource last time open hasn't been updated",
+				resource.getLastTimeOpen() > time);
+	}
+
+	/**
+	 * Test method for {@link org.gvsig.fmap.dal.resource.spi.AbstractResource#getLastTimeUsed()}.
+	 */
+	public void testGetLastTimeUsed() throws Exception {
+		long time = resource.getLastTimeUsed();
+		resource.execute(new ResourceAction() {
+			public Object run() throws Exception {
+				try {
+					// Wait for 100 milliseconds
+					Thread.sleep(100);
+				} catch (InterruptedException e) {
+					// No problem
+				}
+				return null;
+			}
+		});
+		assertTrue("The resource last time used hasn't been updated",
+				resource.getLastTimeUsed() > time);
+	}
+
+	/**
+	 * Test method for {@link org.gvsig.fmap.dal.resource.spi.AbstractResource#openCount()}.
+	 */
+	public void testOpenCount() throws Exception {
+		assertEquals(0, resource.openCount());
+		resource.notifyOpen();
+		assertEquals(1, resource.openCount());
+		resource.notifyOpen();
+		resource.notifyOpen();
+		assertEquals(3, resource.openCount());
+		resource.notifyClose();
+		assertEquals(2, resource.openCount());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.resource.spi.AbstractResource#execute(java.lang.Runnable)}
+	 * .
+	 */
+	public void testExecute() throws Exception {
+		final MutableBoolean testValue = new MutableBoolean();
+		resource.execute(new ResourceAction() {
+			public Object run() throws Exception {
+				testValue.setValue(true);
+				return null;
+			}
+		});
+		assertTrue("Runnable execution not performed", testValue.isValue());
+	}
+
+	public class MutableBoolean {
+		private boolean value = false;
+
+		public void setValue(boolean value) {
+			this.value = value;
+		}
+
+		public boolean isValue() {
+			return value;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/AbstractResourceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestNonBlockingResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestNonBlockingResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestNonBlockingResource.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+
+/**
+ * Test resource implementation.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class TestNonBlockingResource extends AbstractNonBlockingResource {
+
+	protected TestNonBlockingResource(ResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+	public Object get() throws AccessResourceException {
+		return getName();
+	}
+
+	public String getName() throws AccessResourceException {
+		return getClass().getName();
+	}
+
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestNonBlockingResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestAbstractResourcePerformance.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestAbstractResourcePerformance.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestAbstractResourcePerformance.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import junit.framework.TestCase;
+
+import org.easymock.MockControl;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+
+public class TestAbstractResourcePerformance extends TestCase {
+	private MockControl paramsControl;
+	private ResourceParameters params;
+	private AbstractResource resource;
+	private MockControl paramsControl2;
+	private ResourceParameters params2;
+	private AbstractNonBlockingResource nonBlockingResource;
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		paramsControl = MockControl.createNiceControl(ResourceParameters.class);
+		params = (ResourceParameters) paramsControl.getMock();
+		resource = new TestResource(params);
+		paramsControl2 =
+				MockControl.createNiceControl(ResourceParameters.class);
+		params2 = (ResourceParameters) paramsControl2.getMock();
+		nonBlockingResource = new TestNonBlockingResource(params2);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.resource.spi.AbstractResource#execute(java.lang.Runnable)}
+	 * .
+	 */
+	public void testExecuteBlockingPerformance() throws Exception {
+		executePerformance(new ResourceAction() {
+			public Object run() throws Exception {
+				return null;
+			}
+		}, resource);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.resource.spi.AbstractResource#execute(java.lang.Runnable)}
+	 * .
+	 */
+	public void testExecuteNonBlockingPerformance() throws Exception {
+		executePerformance(new ResourceAction() {
+			public Object run() throws Exception {
+				return null;
+			}
+		}, nonBlockingResource);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.resource.spi.AbstractResource#execute(java.lang.Runnable)}
+	 * .
+	 */
+	public void executePerformance(ResourceAction action, Resource resource)
+			throws Exception {
+
+		final int executions = 100000;
+		long time1 = System.currentTimeMillis();
+		for (int i = 0; i < executions; i++) {
+			resource.execute(action);
+		}
+		long time2 = System.currentTimeMillis();
+
+		System.out.print(resource.getName());
+		System.out.print(": total time: " + (time2 - time1) + " ms.");
+		System.out.println(" - time per execution: "
+				+ ((float) (time2 - time1) / (float) executions) + " ms.");
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestAbstractResourcePerformance.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestResource.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.spi;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+
+/**
+ * Test non blocking resource implementation.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class TestResource extends AbstractResource {
+
+	protected TestResource(ResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+	public Object get() throws AccessResourceException {
+		return getName();
+	}
+
+	public String getName() throws AccessResourceException {
+		return getClass().getName();
+	}
+
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/resource/spi/TestResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/AllTests.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.gvsig.fmap.dal.commands.CommandTest;
+import org.gvsig.fmap.dal.feature.FeatureTest;
+
+public class AllTests extends TestCase{
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for libDataSource");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(CommandTest.class);
+		suite.addTestSuite(DataStoreTest.class);
+		suite.addTestSuite(FeatureTest.class);
+
+		//$JUnit-END$
+		return suite;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestFeatureStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestFeatureStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestFeatureStore.java	(revision 42196)
@@ -0,0 +1,2081 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import java.util.TreeSet;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember;
+import org.gvsig.fmap.dal.feature.testmulithread.StoreTask;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.persistence.PersistentState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ *
+ */
+public abstract class BaseTestFeatureStore extends
+		AbstractLibraryAutoInitTestCase {
+
+	private static Logger logger = null;
+
+	protected DataManager dataManager = null;
+	private static Random rnd;
+
+	public Logger getLogger() {
+		if (logger == null) {
+			logger = LoggerFactory.getLogger(this.getClass());
+		}
+		return logger;
+	}
+
+	public abstract boolean usesResources();
+
+	public abstract boolean hasExplorer();
+
+	public FeatureQuery getDefaultQuery(FeatureStore store)
+			throws DataException {
+		FeatureQuery query = store.createFeatureQuery();
+		FeatureAttributeDescriptor[] key = store.getDefaultFeatureType()
+				.getPrimaryKey();
+		for (int i = 0; i < key.length; i++) {
+			query.getOrder().add(key[i].getName(), true);
+		}
+
+		return query;
+	}
+
+
+	public abstract DataStoreParameters getDefaultDataStoreParameters()
+			throws DataException;
+
+
+	protected void doSetUp() throws Exception {
+		dataManager = DALLocator.getDataManager();
+	}
+
+
+	//=================================================
+
+
+	public void printFeature(Feature feature, int maxColSize) {
+		printFeature(feature, true, maxColSize);
+	}
+
+
+	public void printFeature(Feature feature, boolean showColName,int maxColSize) {
+		FeatureType fType = feature.getType();
+		if (showColName){
+			this.printFeatureTypeColNames(feature.getType(), maxColSize);
+		}
+		StringBuffer row = new StringBuffer();
+		Iterator iter = fType.iterator();
+		FeatureAttributeDescriptor attr;
+
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			row.append(truncateOrFillString(feature.get(attr.getName()),
+					maxColSize + 1, ' '));
+		}
+		System.out.println(row.toString());
+	}
+
+	public String truncateOrFillString(Object str, int max, char fillWith) {
+		if (str == null) {
+			return truncateOrFillString("{null}", max, fillWith);
+		}
+		return truncateOrFillString(str.toString(), max, fillWith);
+	}
+
+	public String truncateOrFillString(String str, int max, char fillWith) {
+		if (str.length() > max) {
+			return str.substring(0, max - 1) + " ";
+		} else {
+			StringBuffer strB = new StringBuffer(str);
+			while (strB.length() < max) {
+				strB.append(fillWith);
+			}
+			return strB.toString();
+		}
+
+	}
+
+	public void printFeatureTypeColNames(FeatureType fType, int maxColSize) {
+		Iterator iter = fType.iterator();
+		FeatureAttributeDescriptor attr;
+		StringBuffer colNames = new StringBuffer();
+		StringBuffer typeNames = new StringBuffer();
+		StringBuffer sep = new StringBuffer();
+		if (maxColSize < 1){
+			maxColSize = 15;
+		}
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			colNames.append(truncateOrFillString(attr.getName(), maxColSize + 1, ' '));
+			typeNames.append(truncateOrFillString("(" + attr.getDataTypeName() + ")",
+					maxColSize + 1, ' '));
+			sep.append(truncateOrFillString("", maxColSize, '='));
+			sep.append(' ');
+		}
+
+		System.out.println("");
+		System.out.println("");
+		System.out.println(colNames.toString());
+		System.out.println(typeNames.toString());
+		System.out.println(sep.toString());
+	}
+
+	protected FeatureAttributeDescriptor getFirstAttributeOfType(
+			FeatureType ftype, int dataType) {
+		return getFirstAttributeOfType(ftype, new int[] { dataType });
+	}
+
+	protected FeatureAttributeDescriptor getFirstAttributeOfType(
+			FeatureType ftype, int[] dataTypes) {
+		FeatureAttributeDescriptor attr;
+		Iterator iter = ftype.iterator();
+		int i;
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			for (i = 0; i < dataTypes.length; i++) {
+				if (attr.getType() == dataTypes[i]) {
+					return attr;
+				}
+			}
+		}
+		return null;
+	}
+
+	protected boolean compareDynObject(DynObject obj1, DynObject obj2) {
+		DynClass dynClass = obj1.getDynClass();
+		if (!dynClass.getName().equals(obj2.getDynClass().getName())) {
+			return false;
+		}
+
+		DynField[] fields = dynClass.getDeclaredDynFields();
+		String fieldName;
+		Object v1, v2;
+		for (int i = 0; i < fields.length; i++) {
+			fieldName = fields[i].getName();
+			v1 = obj1.getDynValue(fieldName);
+			v2 = obj2.getDynValue(fieldName);
+			if (v1 == v2) {
+				continue;
+			} else if (v1 != null) {
+				if (!v1.equals(v2)) {
+					return false;
+				}
+			}
+		}
+
+		return true;
+	}
+
+	protected boolean compareStores(FeatureStore store1, FeatureStore store2)
+			throws DataException {
+		if (store1.getParameters().getClass() != store2.getParameters()
+				.getClass()) {
+			return false;
+		}
+		if (!compareDynObject(store1.getParameters(), store2.getParameters())) {
+			return false;
+		}
+
+		if (store1.getEnvelope() != store2.getEnvelope()) {
+			if (store1.getEnvelope() != null) {
+				return store1.getEnvelope().equals(store2.getEnvelope());
+			} else {
+				return false;
+			}
+		}
+
+		if (!store1.getName().equals(store2.getName())) {
+			return false;
+		}
+		if (((FeatureSelection) store1.getSelection()).getSize() != ((FeatureSelection) store2
+				.getSelection()).getSize()) {
+			return false;
+		}
+		DisposableIterator iter1 = ((FeatureSelection) store1.getSelection())
+				.fastIterator();
+		DisposableIterator iter2 = ((FeatureSelection) store2.getSelection())
+				.fastIterator();
+		if (!compareFeatureIterators(iter1, iter2)) {
+			return false;
+		}
+		iter1.dispose();
+		iter2.dispose();
+
+		if (store1.getFeatureTypes().size() != store2.getFeatureTypes().size()) {
+			return false;
+		}
+		Iterator iterTypes1 = store1.getFeatureTypes().iterator();
+		Iterator iterTypes2 = store2.getFeatureTypes().iterator();
+		while (iterTypes1.hasNext()) {
+			if (!compareTypes((FeatureType) iterTypes1.next(),
+					(FeatureType) iterTypes2
+					.next())) {
+				return false;
+			}
+		}
+		if (!compareTypes(store1.getDefaultFeatureType(), store2
+				.getDefaultFeatureType())) {
+			return false;
+		}
+
+		if (store1.getLocks() != null) {
+			if (store1.getLocks().getLocksCount() != store2.getLocks()
+					.getLocksCount()) {
+				return false;
+			}
+			if (!compareFeatureIterators(store1.getLocks().getLocks(), store2
+					.getLocks().getLocks())) {
+				return false;
+			}
+
+		} else if (store2.getLocks() != null) {
+			return false;
+		}
+
+		return true;
+	}
+
+	protected boolean compareFeatureIterators(Iterator iter1, Iterator iter2) {
+		Feature feature;
+		Feature ffeature;
+		while (iter1.hasNext()) {
+			feature = (Feature) iter1.next();
+			ffeature = (Feature) iter2.next();
+			if (!this.compareFeatures(feature, ffeature)) {
+				return false;
+			}
+		}
+
+		if (!iter2.hasNext()) {
+			return true;
+		} else {
+			getLogger().warn("size !=");
+			return false;
+		}
+
+	}
+
+	protected boolean compareFeatureIterators(Iterator iter1, Iterator iter2,
+			String[] attrNames) {
+		Feature feature;
+		Feature ffeature;
+		while (iter1.hasNext()) {
+			feature = (Feature) iter1.next();
+			ffeature = (Feature) iter2.next();
+			if (!this.compareFeatures(feature, ffeature, attrNames)) {
+				return false;
+			}
+		}
+
+		return !iter2.hasNext();
+
+	}
+
+
+
+	protected boolean compareTypes(FeatureType ft1, FeatureType ft2) {
+		if (ft1.size() != ft2.size()) {
+			getLogger().warn("size !=");
+			return false;
+		}
+		if (ft1.getDefaultGeometryAttributeIndex() != ft2
+				.getDefaultGeometryAttributeIndex()) {
+			getLogger().warn(
+					"getDefaultGeometryAttributeIndex "
+							+ ft1.getDefaultGeometryAttributeIndex() +
+					" !="+ ft2.getDefaultGeometryAttributeIndex());
+			return false;
+		}
+		if (ft1.getDefaultGeometryAttributeIndex() > -1) {
+			if (ft1.getDefaultSRS() != null) {
+				if (!ft1.getDefaultSRS().equals(ft2.getDefaultSRS())) {
+					getLogger().warn("getDefaultSRS !=");
+					return false;
+				}
+
+			} else {
+				if (ft2.getDefaultSRS() != null) {
+					getLogger().warn("getDefaultSRS !=");
+					return false;
+				}
+			}
+		}
+
+		if (ft1.getDefaultGeometryAttributeName() != null) {
+			if (!ft1.getDefaultGeometryAttributeName().equals(
+					ft2.getDefaultGeometryAttributeName())) {
+				getLogger().warn("getDefaultGeometryAttributeName !=");
+
+				return false;
+			}
+		} else {
+			if (ft2.getDefaultGeometryAttributeName() != null) {
+				getLogger().warn("getDefaultGeometryAttributeName !=");
+				return false;
+			}
+		}
+
+
+
+		FeatureAttributeDescriptor attr1, attr2;
+		for (int i = 0; i < ft1.size(); i++) {
+			attr1 = ft1.getAttributeDescriptor(i);
+			attr2 = ft2.getAttributeDescriptor(i);
+
+			if (!compareAttributes(attr1, attr2)) {
+				return false;
+			}
+
+		}
+		return true;
+
+	}
+
+	protected boolean compareAttributes(FeatureAttributeDescriptor attr1,
+			FeatureAttributeDescriptor attr2) {
+		if (attr1 == null || attr2 == null) {
+			getLogger().warn("attr1 == null || attr2 == null");
+			return false;
+		}
+		if (!attr1.getName().equals(attr2.getName())) {
+			getLogger().warn(
+					"name '" + attr1.getName() + "' != '" + attr2.getName()
+							+ "'");
+			return false;
+		}
+
+		if (attr1.getDataType() != attr2.getDataType()) {
+			getLogger().warn(
+					attr1.getName() + ":" +
+					"dataType '" + attr1.getDataTypeName() + "'["
+							+ attr1.getDataType() + "] != '"
+							+ attr2.getDataTypeName() + "'["
+							+ attr2.getDataType() + "]");
+			return false;
+		}
+
+		if (attr1.getSize() != attr2.getSize()) {
+			getLogger().warn(
+					attr1.getName() + ":" +
+					"size " + attr1.getSize() + " != " + attr2.getSize());
+			return false;
+		}
+
+		if (attr1.getPrecision() != attr2.getPrecision()) {
+			getLogger().warn(
+					attr1.getName() + ":" +
+					"precision " + attr1.getPrecision() + " != "
+							+ attr1.getPrecision());
+			return false;
+		}
+
+		if (attr1.getGeometryType() != attr2.getGeometryType()) {
+			getLogger().warn(
+					attr1.getName() + ":" +
+					"GeometryType " + attr1.getGeometryType() + " != "
+							+ attr2.getGeometryType());
+			return false;
+		}
+
+		if (attr1.getGeometrySubType() != attr2.getGeometrySubType()) {
+			getLogger().warn(
+					attr1.getName() + ":" +
+					"GeometrySubType " + attr1.getGeometrySubType() + " != "
+							+ attr2.getGeometrySubType());
+
+			return false;
+		}
+
+		if (attr1.getSRS() != null) {
+			if (!attr1.getSRS().equals(attr2.getSRS())) {
+				getLogger().warn(
+						attr1.getName() + ":" +
+						"srs " + attr1.getSRS() + " != " + attr2.getSRS());
+				return false;
+			}
+		} else {
+			if (attr2.getSRS() != null) {
+				getLogger().warn(
+						attr1.getName() + ":" +
+						"srs " + attr1.getSRS() + " != " + attr2.getSRS());
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	protected boolean compareFeatures(Feature f1, Feature f2,
+			String[] attrsNames) {
+		FeatureAttributeDescriptor attr1;
+		FeatureAttributeDescriptor attr2;
+		Object v1, v2;
+		for (int i = 0; i < attrsNames.length; i++) {
+			attr1 = f1.getType().getAttributeDescriptor(attrsNames[i]);
+			attr2 = f2.getType().getAttributeDescriptor(attrsNames[i]);
+			if (attr1 != attr2) {
+				if (!compareAttributes(attr1, attr1)) {
+					return false;
+				}
+			}
+			v1 = f1.get(attr1.getName());
+			v2 = f2.get(attr2.getName());
+			if (!compareFeatureValue(v1, v2, attr1)) {
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	protected boolean compareFeatures(Feature f1, Feature f2) {
+		if (!compareTypes(f1.getType(), f2.getType())) {
+			return false;
+		}
+		Iterator iter = f1.getType().iterator();
+		FeatureAttributeDescriptor attr;
+		Object v1, v2;
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			v1 = f1.get(attr.getName());
+			v2 = f2.get(attr.getName());
+			if (!compareFeatureValue(v1, v2, attr)) {
+				return false;
+			}
+		}
+
+		return true;
+
+	}
+
+	protected boolean compareFeatureValue(Object v1, Object v2,
+			FeatureAttributeDescriptor attr) {
+
+		if ((v1 == null || v2 == null) &&  !attr.allowNull() ){
+			getLogger().warn("null and !allowNull:"
+							+ attr.getName());
+			return false;
+		}
+
+		if (v1 == v2) {
+			return true;
+		} else if (v1 == null) {
+			getLogger().warn(" v1 == null and v2 != null:"
+							+ attr.getName());
+			return false;
+		} else if (v2 == null) {
+			getLogger().warn("v2 == null and v1 != null:"
+							+ attr.getName());
+			return false;
+
+		}
+		switch (attr.getType()) {
+		case DataTypes.GEOMETRY:
+			Geometry geom1 = (Geometry) v1;
+			Geometry geom2 = (Geometry) v2;
+			if (!geom1.equals(geom2)) {
+				getLogger().warn(" v1 != v2 (Geom):" + attr.getName());
+				return false;
+
+			}
+			return true;
+		case DataTypes.DOUBLE:
+			double diff = ((Double) v1).doubleValue()
+					- ((Double) v1).doubleValue();
+			if (!(Math.abs(diff) < 0.000001)) {
+				getLogger().warn(" v1 != v2 (Dobule):" + attr.getName());
+				return false;
+
+			}
+			return true;
+
+		case DataTypes.OBJECT:
+			if (!v1.equals(v2)) {
+				getLogger().warn(
+						" v1 != v2 (object):" + attr.getName() + " [ignored]");
+				return false;
+			}
+			return true;
+
+		default:
+			if (!v1.equals(v2)) {
+				getLogger()
+						.warn(
+								" v1 != v2:" + attr.getName() + ": " + v1
+										+ " != " + v2);
+				return false;
+			}
+		}
+		return true;
+
+	}
+
+
+	//------------------------------------------------
+
+	public void testSimpleIteration(FeatureStore store) {
+		this.testSimpleIteration(store, null);
+	}
+
+	protected String[] getRandomAttibuteList(FeatureType fType) {
+		String[] attrNames = new String[fType.size()];
+		Iterator iter = fType.iterator();
+		int i = 0;
+		while (iter.hasNext()) {
+			attrNames[i] = ((FeatureAttributeDescriptor) iter.next()).getName();
+			i++;
+		}
+		return this.getRandomAttibuteList(attrNames);
+	}
+
+	protected Random getRandom(){
+		if (rnd == null){
+			rnd = new Random();
+			rnd.setSeed(System.currentTimeMillis());
+		}
+		return rnd;
+	}
+
+	protected String[] getRandomAttibuteList(String[] attrNames) {
+		int nAttributes = getRandom().nextInt(
+				attrNames.length + (attrNames.length / 2)) + 1;
+		TreeSet set = new TreeSet();
+		for (int i = 0; i < nAttributes; i++) {
+			set.add(attrNames[getRandom().nextInt(attrNames.length)]);
+		}
+		return (String[]) set.toArray(new String[0]);
+	}
+
+	public void testIterationFastAndStandart(FeatureStore store)
+			throws Exception {
+		this.testIterationFastAndStandart(store, null);
+
+		FeatureQuery query = this.getDefaultQuery(store);
+		// Random Attribute list
+		query.setAttributeNames(getRandomAttibuteList(store
+				.getDefaultFeatureType()));
+		this.testIterationFastAndStandart(store, query);
+
+		// Sorted
+		FeatureAttributeDescriptor attr = getFirstAttributeOfType(store
+				.getDefaultFeatureType(), new int[] { DataTypes.INT,
+				DataTypes.LONG, DataTypes.STRING, DataTypes.DOUBLE, DataTypes.FLOAT });
+		{
+			// asure that attr is in query attributes
+			boolean attrFound = false;
+			String[] curAttrs = query.getAttributeNames();
+			for (int i = 0; i < curAttrs.length; i++) {
+				if (curAttrs[i].equals(attr.getName())) {
+					attrFound = true;
+					break;
+
+				}
+			}
+			if (!attrFound) {
+				String[] newAttrs = new String[curAttrs.length + 1];
+				for (int i = 0; i < curAttrs.length; i++) {
+					newAttrs[i] = curAttrs[i];
+				}
+				newAttrs[curAttrs.length] = attr.getName();
+				query.setAttributeNames(newAttrs);
+			}
+		}
+
+
+		query.getOrder().add(attr.getName(), true);
+		this.testIterationFastAndStandart(store, query);
+
+		// Filter
+		query = this.getDefaultQuery(store);
+
+		query.setFilter(new Evaluator(){
+		    private EvaluatorFieldsInfo evaluatorFieldsInfo = new EvaluatorFieldsInfo();
+		    
+			public Object evaluate(EvaluatorData data)
+					throws EvaluatorException {
+				// TODO Auto-generated method stub
+				return Boolean.TRUE;
+			}
+
+			public String getSQL() {
+				return "true = true";
+			}
+
+			public String getDescription() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public String getName() {
+				return "AlwaysTrue";
+			}
+
+			public EvaluatorFieldsInfo getFieldsInfo() {				
+				return evaluatorFieldsInfo;
+			}
+
+		});
+		this.testIterationFastAndStandart(store, query);
+
+		// Filter + Sorted
+		query.getOrder().add(attr.getName(), true);
+		this.testIterationFastAndStandart(store, query);
+	}
+
+	public void testSimpleIteration(FeatureStore store, FeatureQuery query) {
+		FeatureSet set;
+		try {
+
+			if (query == null) {
+				query = this.getDefaultQuery(store);
+			}
+			set = store.getFeatureSet(query);
+			FeatureType type = set.getDefaultFeatureType();
+
+			DisposableIterator it = set.iterator();
+			Feature feature;
+			printFeatureTypeColNames(type, 15);
+			while (it.hasNext()) {
+
+				feature = (Feature) it.next();
+				printFeature(feature, false, 15);
+			}
+
+			it.dispose();
+			set.dispose();
+
+		} catch (DataException e3) {
+			e3.printStackTrace();
+			fail();
+			return;
+		}
+
+	}
+
+	public void testIterationFastAndStandart(FeatureStore store,
+			FeatureQuery query) {
+		FeatureSet set;
+		try {
+
+			if (query == null) {
+				query = this.getDefaultQuery(store);
+			}
+			set = store.getFeatureSet(query);
+
+			DisposableIterator it = set.iterator();
+			DisposableIterator fit = set.fastIterator();
+
+			assertTrue(this.compareFeatureIterators(it, fit));
+
+			it.dispose();
+			fit.dispose();
+			set.dispose();
+
+		} catch (DataException e3) {
+			e3.printStackTrace();
+			fail();
+			return;
+		}
+
+	}
+
+	public void testSimpleIteration(DataStoreParameters parameters)
+			throws Exception {
+		FeatureStore store = null;
+		store = (FeatureStore) dataManager.openStore(parameters
+				.getDataStoreName(), parameters);
+
+		this.testSimpleIteration(store);
+
+		store.dispose();
+
+	}
+
+	public void testIterationFastAndStandart(DataStoreParameters parameters)
+			throws Exception {
+		FeatureStore store = null;
+		store = (FeatureStore) dataManager.openStore(parameters
+				.getDataStoreName(), parameters);
+
+		this.testIterationFastAndStandart(store);
+
+		store.dispose();
+
+	}
+
+	/**
+	 *
+	 * @param count
+	 *            if (< 0) list.size() >= 1 else list.size() == count
+	 * @throws Exception
+	 */
+	public void testExplorerList(int count) throws Exception {
+		FeatureStore store = null;
+		DataStoreParameters params = getDefaultDataStoreParameters();
+		store = (FeatureStore) dataManager.openStore(params.getDataStoreName(),
+				params);
+
+		DataServerExplorer explorer;
+		explorer = store.getExplorer();
+
+		if (count < 0) {
+			assertTrue(explorer.list().size() >= 1);
+		} else {
+			assertTrue(explorer.list().size() == count);
+		}
+
+		store.dispose();
+
+		explorer.dispose();
+	}
+
+	//=================================================
+	//=================================================
+
+
+
+
+	public void testIterationFastAndStandart() throws Exception {
+		this.testIterationFastAndStandart(this.getDefaultDataStoreParameters());
+	}
+
+	public void testSimpleIteration() throws Exception {
+		this.testSimpleIteration(this.getDefaultDataStoreParameters());
+	}
+
+	public void testInitializeStore() throws Exception {
+		DataStoreParameters params = getDefaultDataStoreParameters();
+		FeatureStore store = (FeatureStore) dataManager.openStore(params
+				.getDataStoreName(), params);
+
+		assertNotNull(store.getMetadataID());
+		assertNotNull(store.getName());
+		assertEquals(store.getEnvelope(), store.getDynValue("Envelope"));
+		assertTrue("Feature count not > 0", store.getFeatureCount() > 0);
+		if (store.isLocksSupported()) {
+			assertNotNull(store.getLocks());
+		} else {
+			assertNull(store.getLocks());
+		}
+		store.dispose();
+	}
+
+
+	public void testExplorer() throws Exception {
+		if (!this.hasExplorer()) {
+			return;
+		}
+		this.testExplorerList(-1);
+
+	}
+
+	public void testSelection() throws Exception {
+		DataStoreParameters parameters = this.getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.openStore(parameters
+				.getDataStoreName(), parameters);
+		FeatureSet set = store.getFeatureSet();
+
+		assertTrue(store.getFeatureSelection().isEmpty());
+		store.setSelection(set);
+		assertFalse(store.getFeatureSelection().isEmpty());
+
+		assertEquals(set.getSize(), store.getFeatureSelection().getSize());
+
+		DisposableIterator iter = set.iterator();
+		while (iter.hasNext()) {
+			assertTrue(store.getFeatureSelection().isSelected(
+					(Feature) iter.next()));
+		}
+		iter.dispose();
+
+		store.getFeatureSelection().reverse();
+		assertTrue(store.getFeatureSelection().isEmpty());
+		assertEquals(0, store.getFeatureSelection().getSize());
+		iter = set.iterator();
+		while (iter.hasNext()) {
+			assertFalse(store.getFeatureSelection().isSelected(
+					(Feature) iter.next()));
+		}
+		iter.dispose();
+
+		store.getFeatureSelection().reverse();
+		assertEquals(set.getSize(), store.getFeatureSelection().getSize());
+		assertFalse(store.getFeatureSelection().isEmpty());
+
+		set.dispose();
+
+	}
+
+	public void testCustomFTypeSet() throws Exception {
+		DataStoreParameters dbfParameters = this
+				.getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
+				.getDataStoreName(), dbfParameters);
+
+		testCustomFTypeSet(store);
+
+		store.dispose();
+	}
+
+	public void testCustomFTypeSet(FeatureStore store) throws Exception{
+
+		FeatureSet set, set1;
+		FeatureQuery query;
+		DisposableIterator iter, iter1;
+		Iterator attrIter;
+		FeatureAttributeDescriptor attr;
+
+		set = store.getFeatureSet(this.getDefaultQuery(store));
+		attrIter = store.getDefaultFeatureType().iterator();
+
+		String[] names;
+		while (attrIter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) attrIter.next();
+			int fieldIndex = attr.getIndex();
+
+			query = this.getDefaultQuery(store);
+			String fieldName = store.getDefaultFeatureType()
+			.getAttributeDescriptor(fieldIndex).getName();
+
+			names = new String[] { fieldName };
+			query.setAttributeNames(names);
+			set1 = store.getFeatureSet(query);
+
+			if (getRandom().nextBoolean()) {
+				iter = set.fastIterator();
+			} else {
+				iter = set.iterator();
+			}
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+
+			assertTrue(compareFeatureIterators(iter, iter1, names));
+
+			iter.dispose();
+			iter1.dispose();
+			set1.dispose();
+		}
+
+		int ntimes = getRandom().nextInt(10) + 5;
+		FeatureType type = store.getDefaultFeatureType();
+		query = this.getDefaultQuery(store);
+		for (int i = 0; i < ntimes; i++) {
+			names = getRandomAttibuteList(type);
+
+			query.setAttributeNames(names);
+			set1 = store.getFeatureSet(query);
+
+			if (getRandom().nextBoolean()) {
+				iter = set.fastIterator();
+			} else {
+				iter = set.iterator();
+			}
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+
+			assertTrue(compareFeatureIterators(iter, iter1, names));
+
+			iter.dispose();
+			iter1.dispose();
+
+			iter1 = set1.fastIterator();
+			assertTrue(checksAttributesPositions(iter1, names));
+			iter1.dispose();
+
+			iter1 = set1.iterator();
+			assertTrue(checksAttributesPositions(iter1, names));
+			iter1.dispose();
+
+			set1.dispose();
+
+
+		}
+
+
+
+		set.dispose();
+
+	}
+
+	protected boolean checksAttributesPositions(DisposableIterator iter,
+			String[] names) {
+		Feature feature;
+		FeatureType type;
+		FeatureAttributeDescriptor attr;
+		while (iter.hasNext()) {
+			feature = (Feature) iter.next();
+			type = feature.getType();
+			for (int i = 0; i < names.length; i++) {
+				attr = type.getAttributeDescriptor(i);
+				if (!names[i].equals(attr.getName())) {
+					getLogger().error(
+							"Error in attribute {} (expected: '{}' have: '{}'",
+							new Object[] { new Integer(i), names[i],
+									attr.getName() });
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	 public void testPersistence() throws Exception {
+		if (ToolsLocator.getPersistenceManager() == null) {
+			fail("Default Persistence Manager not register");
+		}
+		DataStoreParameters params = this.getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.openStore(params
+				.getDataStoreName(), params);
+
+		testSimpleIteration(store);
+
+		PersistentState state = ToolsLocator.getPersistenceManager().getState(
+				store);
+
+		FeatureStore store2 = (FeatureStore) ToolsLocator
+				.getPersistenceManager().create(state);
+
+		testSimpleIteration(store2);
+
+		assertTrue(compareStores(store, store2));
+
+		store.dispose();
+		store2.dispose();
+
+	}
+
+
+	public void testSort() throws Exception {
+		DataStoreParameters dbfParameters = this
+				.getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
+				.getDataStoreName(), dbfParameters);
+
+		testSort(store);
+
+		store.dispose();
+
+	}
+
+	public void testSort(FeatureStore store) throws Exception{
+		FeatureSet set1;
+		FeatureQuery query;
+		DisposableIterator iter1;
+		Iterator attrIter;
+		FeatureAttributeDescriptor attr;
+
+		attrIter = store.getDefaultFeatureType().iterator();
+
+		String[] names;
+		while (attrIter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) attrIter.next();
+
+			if (attr.getType() == DataTypes.GEOMETRY) {
+				continue;
+			}
+			query = this.getDefaultQuery(store);
+			String fieldName = attr.getName();
+
+
+
+			names = new String[] { fieldName };
+			query.setAttributeNames(names);
+			query.getOrder().add(fieldName, getRandom().nextBoolean());
+
+			set1 = store.getFeatureSet(query);
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+
+			assertTrue(checkSort(iter1, query));
+
+			iter1.dispose();
+			set1.dispose();
+		}
+
+		int ntimes = getRandom().nextInt(10) + 5;
+		FeatureType type = store.getDefaultFeatureType();
+		query = this.getDefaultQuery(store);
+		for (int i = 0; i < ntimes; i++) {
+			names = getRandomAttibuteList(type);
+
+			int nShortFields = getRandom().nextInt(names.length) + 1;
+			query.getOrder().clear();
+			for (int j = 0; j < nShortFields; j++) {
+				attr = store.getDefaultFeatureType().getAttributeDescriptor(names[getRandom().nextInt(names.length)]);
+				if (attr.getType() == DataTypes.INT
+						|| attr.getType() == DataTypes.LONG
+						|| attr.getType() == DataTypes.DOUBLE
+						|| attr.getType() == DataTypes.STRING
+						|| attr.getType() == DataTypes.DATE
+						|| attr.getType() == DataTypes.BOOLEAN
+						|| attr.getType() == DataTypes.BYTE
+						|| attr.getType() == DataTypes.FLOAT) {
+
+					query.getOrder().add(attr.getName(),
+							getRandom().nextBoolean());
+				}
+			}
+
+			query.setAttributeNames(names);
+			set1 = store.getFeatureSet(query);
+
+			// if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+				// } else {
+				// iter1 = set1.iterator();
+				// }
+
+				assertTrue(checkSort(iter1, query));
+
+				iter1.dispose();
+				set1.dispose();
+
+		}
+
+	}
+
+
+	public boolean checkSort(Iterator iter, FeatureQuery query) {
+
+		FeatureQueryOrderMember order;
+		Feature prevFeature = null;
+		Feature currFeature = null;
+		boolean isFirst = true;
+		Comparable v1, v2;
+		Object o1, o2;
+		int v;
+		FeatureQueryOrder queryOrder = query.getOrder();
+
+		Iterator orderIter;
+
+		//for debug only
+		/*
+		System.out.println("\nCheck order:");
+		Iterator orderIter = queryOrder.iterator();
+		while (orderIter.hasNext()) {
+			order = (FeatureQueryOrderMember) orderIter.next();
+			System.out.print(order.getAttributeName() + " ");
+			if (order.getAscending()) {
+				System.out.print("Asc, ");
+			} else {
+				System.out.print("Desc, ");
+			}
+		}
+		System.out.println(";");
+		*/
+
+		while (iter.hasNext()) {
+			currFeature = (Feature) iter.next();
+			if (isFirst) {
+				prevFeature = currFeature.getCopy();
+				// printFeature(prevFeature, true, 15);
+				isFirst = false;
+				continue;
+			}
+			// printFeature(currFeature, false, 15);
+			orderIter = queryOrder.iterator();
+			while (orderIter.hasNext()) {
+				order = (FeatureQueryOrderMember) orderIter.next();
+				if (order.hasEvaluator()) {
+					try {
+						o1 = order.getEvaluator().evaluate(
+								(EvaluatorData) prevFeature);
+						o2 = order.getEvaluator().evaluate(
+								(EvaluatorData) currFeature);
+					} catch (EvaluatorException e) {
+						throw new DataEvaluatorRuntimeException(e);
+					}
+				} else {
+
+					o1 = prevFeature.get(order.getAttributeName());
+					o2 = currFeature.get(order.getAttributeName());
+				}
+				if (o1 instanceof Comparable && o2 instanceof Comparable) {
+					v1 = (Comparable) o1;
+					v2 = (Comparable) o2;
+				} else {
+					// uncomparable objets
+					break;
+				}
+				if (v1 == null) {
+					if (v2 == null) {
+						break;
+					} else {
+						v = 1;
+					}
+				} else {
+					v = v1.compareTo(v2);
+				}
+				if (v != 0) {
+					if (!order.getAscending()) {
+						v = -v;
+					}
+				}
+				if (v < 0) {
+					break;
+				} else if (v > 0) {
+					// Checks for ignore case short
+					if (v1 instanceof String && v2 instanceof String) {
+						v1 = ((String)v1).toLowerCase();
+						v2 = ((String)v2).toLowerCase();
+						v = v1.compareTo(v2);
+						if (v != 0) {
+							if (!order.getAscending()) {
+								v = -v;
+							}
+						}
+						if (v < 0) {
+							getLogger()
+									.warn("Short compartor String ok with ignore case");
+							break;
+						} else if (v > 0) {
+							return false;
+						}
+					} else {
+						return false;
+					}
+				}
+			}
+			prevFeature = currFeature.getCopy();
+		}
+
+		return true;
+	}
+
+	protected void fullStoreIteratorTest(FeatureStore store) throws Exception{
+		testIterationFastAndStandart(store);
+		testCustomFTypeSet(store);
+		testSort(store);
+	}
+
+
+	public void testTransformsData() throws Exception {
+		DataStoreParameters dbfParameters = this
+				.getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
+				.getDataStoreName(), dbfParameters);
+
+		FeatureStore store1 = (FeatureStore) dataManager.openStore(
+				dbfParameters.getDataStoreName(), dbfParameters);
+
+		FeatureStoreTransform transform = new StringsToLowerTransform();
+		transform.setFeatureStore(store);
+
+		store.getTransforms().add(transform);
+
+		FeatureSet set, set1;
+		DisposableIterator iter, iter1;
+		Iterator iterAttr;
+		FeatureAttributeDescriptor attr;
+		Feature feature, feature1;
+		int i, ntimes;
+		Object v1, v2;
+
+
+		fullStoreIteratorTest(store);
+
+		set = store.getFeatureSet();
+		set1 = store1.getFeatureSet();
+		ntimes = getRandom().nextInt(3) + 1;
+		for (i = 0; i < ntimes; i++) {
+			if (getRandom().nextBoolean()) {
+				iter = set.fastIterator();
+			} else {
+				iter = set.iterator();
+			}
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+			while (iter.hasNext()) {
+				feature = (Feature) iter.next();
+				feature1 = (Feature) iter1.next();
+
+				iterAttr = set.getDefaultFeatureType().iterator();
+				while (iterAttr.hasNext()) {
+					attr = (FeatureAttributeDescriptor) iterAttr.next();
+					v1 = feature.get(attr.getIndex());
+					v2 = feature1.get(attr.getIndex());
+					if (attr.getType() == DataTypes.STRING) {
+						if (v2 != null) {
+							v2 = ((String) v2).toLowerCase();
+						}
+
+					}
+					assertTrue(compareFeatureValue(v1, v2, attr));
+				}
+			}
+			assertFalse(iter1.hasNext());
+			iter.dispose();
+			iter1.dispose();
+		}
+
+
+		set.dispose();
+		set1.dispose();
+
+
+		transform = new StringsToUpperTransform();
+		transform.setFeatureStore(store);
+
+		store.getTransforms().add(transform);
+
+		fullStoreIteratorTest(store);
+
+		set = store.getFeatureSet();
+		set1 = store1.getFeatureSet();
+		ntimes = getRandom().nextInt(3) + 1;
+		for (i = 0; i < ntimes; i++) {
+			if (getRandom().nextBoolean()) {
+				iter = set.fastIterator();
+			} else {
+				iter = set.iterator();
+			}
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+			while (iter.hasNext()) {
+				feature = (Feature) iter.next();
+				feature1 = (Feature) iter1.next();
+
+				iterAttr = set.getDefaultFeatureType().iterator();
+				while (iterAttr.hasNext()) {
+					attr = (FeatureAttributeDescriptor) iterAttr.next();
+					v1 = feature.get(attr.getIndex());
+					v2 = feature1.get(attr.getIndex());
+					if (attr.getType() == DataTypes.STRING) {
+						if (v2 != null) {
+							v2 = ((String) v2).toUpperCase();
+						}
+
+					}
+					compareFeatureValue(v1, v2, attr);
+				}
+			}
+			assertFalse(iter1.hasNext());
+			iter.dispose();
+			iter1.dispose();
+		}
+		set.dispose();
+		set1.dispose();
+
+
+		transform = new AddPrefixAttributeName("_");
+		transform.setFeatureStore(store);
+
+		store.getTransforms().add(transform);
+
+		fullStoreIteratorTest(store);
+
+		set = store.getFeatureSet();
+		set1 = store1.getFeatureSet();
+		ntimes = getRandom().nextInt(3) + 1;
+		for (i = 0; i < ntimes; i++) {
+			if (getRandom().nextBoolean()) {
+				iter = set.fastIterator();
+			} else {
+				iter = set.iterator();
+			}
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+			while (iter.hasNext()) {
+				feature = (Feature) iter.next();
+				feature1 = (Feature) iter1.next();
+
+				iterAttr = set1.getDefaultFeatureType().iterator();
+				while (iterAttr.hasNext()) {
+					attr = (FeatureAttributeDescriptor) iterAttr.next();
+					v1 = feature.get("_" + attr.getName());
+					v2 = feature1.get(attr.getIndex());
+					if (attr.getType() == DataTypes.STRING) {
+						if (v2 != null) {
+							v2 = ((String) v2).toUpperCase();
+						}
+
+					}
+					compareFeatureValue(v1, v2, attr);
+				}
+			}
+			assertFalse(iter1.hasNext());
+			iter.dispose();
+			iter1.dispose();
+		}
+		set.dispose();
+		set1.dispose();
+
+		transform = new AddAttribute("__new__", DataTypes.STRING, "$$OK$$", 10);
+		transform.setFeatureStore(store);
+
+		store.getTransforms().add(transform);
+
+		fullStoreIteratorTest(store);
+
+		set = store.getFeatureSet();
+		set1 = store1.getFeatureSet();
+		ntimes = getRandom().nextInt(3) + 1;
+		for (i = 0; i < ntimes; i++) {
+			if (getRandom().nextBoolean()) {
+				iter = set.fastIterator();
+			} else {
+				iter = set.iterator();
+			}
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+			while (iter.hasNext()) {
+				feature = (Feature) iter.next();
+				feature1 = (Feature) iter1.next();
+
+				iterAttr = set1.getDefaultFeatureType().iterator();
+				while (iterAttr.hasNext()) {
+					attr = (FeatureAttributeDescriptor) iterAttr.next();
+					v1 = feature.get("_" + attr.getName());
+					v2 = feature1.get(attr.getIndex());
+					if (attr.getType() == DataTypes.STRING) {
+						if (v2 != null) {
+							v2 = ((String) v2).toUpperCase();
+						}
+
+					}
+					compareFeatureValue(v1, v2, attr);
+				}
+				compareFeatureValue(feature.get("__new__"), "$$OK$$", set1
+						.getDefaultFeatureType().getAttributeDescriptor(
+								"__new__"));
+			}
+			assertFalse(iter1.hasNext());
+			iter.dispose();
+			iter1.dispose();
+		}
+		set.dispose();
+		set1.dispose();
+
+
+		transform = new RemoveAttribute("__new__");
+		transform.setFeatureStore(store);
+
+		store.getTransforms().add(transform);
+
+		fullStoreIteratorTest(store);
+
+		set = store.getFeatureSet();
+		set1 = store1.getFeatureSet();
+		ntimes = getRandom().nextInt(3) + 1;
+		for (i = 0; i < ntimes; i++) {
+			if (getRandom().nextBoolean()) {
+				iter = set.fastIterator();
+			} else {
+				iter = set.iterator();
+			}
+			if (getRandom().nextBoolean()) {
+				iter1 = set1.fastIterator();
+			} else {
+				iter1 = set1.iterator();
+			}
+			while (iter.hasNext()) {
+				feature = (Feature) iter.next();
+				feature1 = (Feature) iter1.next();
+
+				iterAttr = set1.getDefaultFeatureType().iterator();
+				while (iterAttr.hasNext()) {
+					attr = (FeatureAttributeDescriptor) iterAttr.next();
+					v1 = feature.get("_" + attr.getName());
+					v2 = feature1.get(attr.getIndex());
+					if (attr.getType() == DataTypes.STRING) {
+						if (v2 != null) {
+							v2 = ((String) v2).toUpperCase();
+						}
+
+					}
+					compareFeatureValue(v1, v2, attr);
+				}
+				assertNull(feature.getType().getAttributeDescriptor("__new__"));
+			}
+			assertFalse(iter1.hasNext());
+			iter.dispose();
+			iter1.dispose();
+		}
+		set.dispose();
+		set1.dispose();
+
+		store.getTransforms().clear();
+
+		compareStores(store, store1);
+
+
+		store.dispose();
+		store1.dispose();
+	}
+
+	abstract class myTransform extends AbstractFeatureStoreTransform {
+		protected FeatureStore store;
+		protected FeatureType orgDefaultFType;
+		protected List orgFTypes;
+
+		public void applyTransform(Feature source, EditableFeature target)
+				throws DataException {
+
+			Iterator iter = target.getType().iterator();
+			FeatureAttributeDescriptor attr;
+			while (iter.hasNext()) {
+				attr = (FeatureAttributeDescriptor) iter.next();
+				this.setValue(source, target, attr);
+			}
+
+		}
+
+		protected void setValue(Feature source, EditableFeature target,
+				FeatureAttributeDescriptor attrTarget) throws DataException {
+			target.set(attrTarget.getIndex(), source.get(attrTarget.getName()));
+		}
+
+		public FeatureType getDefaultFeatureType() throws DataException {
+			return orgDefaultFType;
+		}
+
+		public FeatureStore getFeatureStore() {
+			return store;
+		}
+
+		public List getFeatureTypes() throws DataException {
+			return orgFTypes;
+		}
+
+		public void setFeatureStore(FeatureStore featureStore) {
+			this.store = featureStore;
+			try {
+				this.orgDefaultFType = this.store.getDefaultFeatureType();
+				this.orgFTypes = this.store.getFeatureTypes();
+
+			} catch (DataException e) {
+				throw new RuntimeException(e);
+			}
+
+		}
+
+		public FeatureType getSourceFeatureTypeFrom(
+				FeatureType targetFeatureType) {
+
+			return targetFeatureType;
+		}
+		
+        public String getName() {
+//            System.out
+//                .println("\nmyFeatureStore.getname(): " + store.getName());
+            return store.getName();
+        }
+
+        public String getDescription() {
+//            System.out.println("\nmyFeatureStore.getDescription(getfullname): "
+//                + store.getFullName());
+            return store.getFullName();
+        }
+
+	}
+
+	abstract class TransformTypeTransform extends myTransform {
+
+		private FeatureType myDefaultFeatureType = null;
+		private List myFeatureTypes = null;
+
+		public FeatureType getDefaultFeatureType() throws DataException {
+			if (this.myDefaultFeatureType == null) {
+				this.myDefaultFeatureType = this.transformType(orgDefaultFType);
+			}
+
+			return this.myDefaultFeatureType;
+		}
+
+		protected abstract FeatureType transformType(FeatureType type);
+
+		protected abstract FeatureType restoreType(FeatureType type);
+
+
+		public List getFeatureTypes() throws DataException {
+			if (this.myFeatureTypes == null) {
+				ArrayList list = new ArrayList();
+				Iterator iter = orgFTypes.iterator();
+				while (iter.hasNext()) {
+					FeatureType type = (FeatureType) iter.next();
+					if (type.getId().equals(
+							this.getDefaultFeatureType().getId())) {
+						list.add(this.getDefaultFeatureType());
+					} else {
+						list.add(this.transformType(type));
+					}
+				}
+				this.myFeatureTypes = Collections.unmodifiableList(list);
+			}
+			return this.myFeatureTypes;
+		}
+
+		public boolean isTransformsOriginalValues() {
+			return false;
+		}
+
+		public FeatureType getSourceFeatureTypeFrom(
+				FeatureType targetFeatureType) {
+			FeatureType org = null;
+			FeatureType cur = null;
+			Iterator iter = null;
+			try {
+				iter = this.getFeatureTypes().iterator();
+			} catch (DataException e) {
+				new RuntimeException(e);
+			}
+			while (iter.hasNext()) {
+				cur = (FeatureType) iter.next();
+				if (cur.getId().equals(targetFeatureType.getId())) {
+					org = cur;
+					break;
+				}
+			}
+			if (org == null) {
+				throw new RuntimeException();
+			}
+
+			return this.restoreType(org);
+		}
+
+	}
+
+	abstract class TransformAttributeNameTransform extends
+			TransformTypeTransform {
+
+		protected void setValue(Feature source, EditableFeature target,
+				FeatureAttributeDescriptor attrTarget) throws DataException {
+			target.set(attrTarget.getIndex(), source.get(this
+					.restoreAttributeName(attrTarget.getName())));
+		}
+
+
+		protected FeatureType transformType(FeatureType type) {
+			EditableFeatureType result = type.getEditable();
+			Iterator iter = result.iterator();
+			EditableFeatureAttributeDescriptor attr;
+			while (iter.hasNext()) {
+				attr = (EditableFeatureAttributeDescriptor) iter.next();
+				attr.setName(transformAttributeName(attr.getName()));
+			}
+			return result.getNotEditableCopy();
+		}
+
+		protected abstract String transformAttributeName(String source);
+
+		protected abstract String restoreAttributeName(String target);
+
+		protected FeatureType restoreType(FeatureType type) {
+			EditableFeatureType result;
+			if (type instanceof EditableFeatureType) {
+				result = (EditableFeatureType) type.getCopy();
+			} else {
+				result = type.getEditable();
+			}
+			Iterator iter = result.iterator();
+			EditableFeatureAttributeDescriptor attr;
+			while (iter.hasNext()) {
+				attr = (EditableFeatureAttributeDescriptor) iter.next();
+
+				attr.setName(restoreAttributeName(attr.getName()));
+			}
+			return result.getNotEditableCopy();
+		}
+
+		public FeatureType getSourceFeatureTypeFrom(
+				FeatureType targetFeatureType) {
+			FeatureType org = null;
+			FeatureType cur = null;
+			Iterator iter = null;
+			iter = this.orgFTypes.iterator();
+			while (iter.hasNext()) {
+				cur = (FeatureType) iter.next();
+				if (cur.getId().equals(targetFeatureType.getId())) {
+					org = cur;
+					break;
+				}
+			}
+			if (cur == null) {
+				throw new RuntimeException();
+			}
+			EditableFeatureType r = org.getEditable();
+			iter = r.iterator();
+			FeatureAttributeDescriptor attr;
+			while (iter.hasNext()) {
+				attr = (FeatureAttributeDescriptor) iter.next();
+				if (targetFeatureType.getIndex(transformAttributeName(attr
+						.getName())) == -1) {
+					iter.remove();
+				}
+			}
+			return r.getNotEditableCopy();
+		}
+
+	}
+
+
+	class AddPrefixAttributeName extends TransformAttributeNameTransform {
+
+		private String prefix;
+
+		AddPrefixAttributeName(String prefix) {
+			this.prefix = prefix;
+		}
+
+		protected String restoreAttributeName(String target) {
+			return target.substring(getPrefix().length(), target.length());
+		}
+
+		private String getPrefix() {
+			return prefix;
+		}
+
+		protected String transformAttributeName(String source) {
+			return getPrefix() + source;
+		}
+
+	}
+
+	class AddAttribute extends TransformTypeTransform {
+
+		private String name;
+		private int type;
+		private Object defValue;
+		private int size;
+		private Evaluator eval;
+
+		AddAttribute(String name) {
+			this(name, DataTypes.STRING, null, 15);
+		}
+
+		AddAttribute(String name, int type) {
+			this(name, type, null, 15);
+		}
+
+		AddAttribute(String name, int type, Object defValue) {
+			this(name, type, defValue, 15);
+		}
+
+		AddAttribute(String name, int type, Evaluator evaluator, int size) {
+			this.name = name;
+			this.type = type;
+			this.defValue = null;
+			this.size = size;
+			this.eval = evaluator;
+		}
+
+		AddAttribute(String name, int type, Object defValue, int size) {
+			this.name = name;
+			this.type = type;
+			this.defValue = defValue;
+			this.size = size;
+			this.eval = null;
+		}
+
+
+
+		protected FeatureType restoreType(FeatureType type) {
+			EditableFeatureType result;
+			if (type instanceof EditableFeatureType) {
+				result = (EditableFeatureType) type.getCopy();
+			} else {
+				result = type.getEditable();
+			}
+			result.remove(this.name);
+			return result.getNotEditableCopy();
+		}
+
+		protected FeatureType transformType(FeatureType type) {
+			EditableFeatureType result = type.getEditable();
+
+			EditableFeatureAttributeDescriptor att;
+			if (this.eval == null) {
+				att = result.add(name, this.type)
+						.setDefaultValue(this.defValue);
+			} else {
+				att = result.add(name, this.type, this.eval);
+			}
+			att.setSize(size);
+
+
+			return result.getNotEditableCopy();
+		}
+
+		protected void setValue(Feature source, EditableFeature target,
+				FeatureAttributeDescriptor attrTarget) throws DataException {
+			if (attrTarget.getName().equals(this.name)) {
+				target.set(attrTarget.getIndex(), attrTarget.getDefaultValue());
+			} else {
+				target.set(attrTarget.getIndex(), source.get(attrTarget
+						.getName()));
+			}
+		}
+	}
+
+
+	class RemoveAttribute extends TransformTypeTransform {
+
+		private String attributeName;
+		private String fTypeIdToRemoveAttribute = null;
+		private FeatureAttributeDescriptor attr;
+
+		RemoveAttribute(String attributeName) {
+			this.attributeName = attributeName;
+		}
+
+		RemoveAttribute(String attributeName, FeatureType fType) {
+			this.attributeName = attributeName;
+		}
+
+		protected FeatureType restoreType(FeatureType type) {
+			if (!type.getId().equals(this.fTypeIdToRemoveAttribute)) {
+				return type;
+			}
+			EditableFeatureType result = type.getEditable();
+
+			EditableFeatureAttributeDescriptor att;
+			if (this.attr.getEvaluator() == null) {
+				att = result.add(attributeName, this.attr.getType())
+						.setDefaultValue(this.attr.getDefaultValue());
+			} else {
+				att = result.add(attributeName, this.attr.getType(),
+						this.attr.getEvaluator());
+			}
+			att.setSize(this.attr.getSize());
+			att.setAllowNull(this.attr.allowNull());
+			att.setGeometryType(this.attr.getGeometryType());
+			att.setSRS(this.attr.getSRS());
+			att.setPrecision(this.attr.getPrecision());
+			// TODO
+
+
+			return result.getNotEditableCopy();
+		}
+
+		protected FeatureType transformType(FeatureType type) {
+			if (!type.getId().equals(this.fTypeIdToRemoveAttribute)) {
+				return type;
+			}
+
+			EditableFeatureType result;
+			if (type instanceof EditableFeatureType) {
+				result = (EditableFeatureType) type.getCopy();
+			} else {
+				result = type.getEditable();
+			}
+			result.remove(this.attributeName);
+			return result.getNotEditableCopy();
+
+		}
+
+		public void setFeatureStore(FeatureStore featureStore) {
+			Iterator iter;
+			try {
+				iter = featureStore.getFeatureTypes().iterator();
+			} catch (DataException e) {
+				throw new RuntimeException(e);
+			}
+			FeatureType type;
+			FeatureAttributeDescriptor attrTmp;
+			while (iter.hasNext()) {
+				type = (FeatureType) iter.next();
+				attrTmp = type.getAttributeDescriptor(this.attributeName);
+				if (attrTmp != null) {
+					this.fTypeIdToRemoveAttribute = type.getId();
+					this.attr = attrTmp;
+					break;
+				}
+			}
+			super.setFeatureStore(featureStore);
+		}
+
+		public void applyTransform(Feature source, EditableFeature target)
+				throws DataException {
+			// TODO Auto-generated method stub
+			super.applyTransform(source, target);
+		}
+
+
+
+	}
+
+
+	public class StringsToLowerTransform extends myTransform {
+
+		public boolean isTransformsOriginalValues() {
+			return true;
+		}
+
+		protected void setValue(Feature source, EditableFeature target,
+				FeatureAttributeDescriptor attr) throws DataException {
+			if (attr.getType() == DataTypes.STRING) {
+				String v = ((String) source.get(attr.getName()));
+				if (v != null){
+					v = v.toLowerCase();
+				} else if (!attr.allowNull()) {
+					v = (String) attr.getDefaultValue();
+					v = v.toLowerCase();
+				}
+				target.set(attr.getName(), v);
+			} else {
+				target.set(attr.getName(), source.get(attr.getName()));
+			}
+		}
+
+	}
+
+	class StringsToUpperTransform extends StringsToLowerTransform {
+		protected void setValue(Feature source, EditableFeature target,
+				FeatureAttributeDescriptor attr) throws DataException {
+			if (attr.getType() == DataTypes.STRING) {
+				String v = ((String) source.get(attr.getName()));
+				if (v != null) {
+					v = v.toUpperCase();
+				} else if (!attr.allowNull()) {
+					v = (String) attr.getDefaultValue();
+					v.toUpperCase();
+				}
+				target.set(attr.getName(), v);
+			} else {
+				target.set(attr.getName(), source.get(attr.getName()));
+			}
+		}
+
+	}
+
+
+	public void testFeatureReference() throws Exception {
+		DataStoreParameters dbfParameters = this
+				.getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
+				.getDataStoreName(), dbfParameters);
+
+		Feature feature, refered;
+		FeatureSet set;
+		int nTimes2 = getRandom().nextInt(2) + 1;
+
+		for (int j = 0; j < nTimes2; j++) {
+			set = store.getFeatureSet();
+			DisposableIterator iter;
+
+			int nTimes = getRandom().nextInt(2) + 3;
+			for (int i = 0; i < nTimes; i++) {
+				if (getRandom().nextBoolean()) {
+					iter = set.fastIterator();
+				} else {
+					iter = set.fastIterator();
+				}
+				while (iter.hasNext()) {
+					feature = (Feature) iter.next();
+					refered = feature.getReference().getFeature();
+					compareFeatures(feature, refered);
+				}
+				iter.dispose();
+			}
+
+			set.dispose();
+		}
+
+		nTimes2 = getRandom().nextInt(5) + 2;
+		FeatureQuery query = store.createFeatureQuery();
+
+		for (int j = 0; j < nTimes2; j++) {
+			DisposableIterator iter;
+
+			query.setAttributeNames(getRandomAttibuteList(store
+					.getDefaultFeatureType()));
+			set = store.getFeatureSet(query);
+
+			int nTimes = getRandom().nextInt(3) + 3;
+			for (int i = 0; i < nTimes; i++) {
+				if (getRandom().nextBoolean()) {
+					iter = set.fastIterator();
+				} else {
+					iter = set.fastIterator();
+				}
+				while (iter.hasNext()) {
+					feature = (Feature) iter.next();
+					refered = feature.getReference().getFeature(
+							set.getDefaultFeatureType());
+					compareFeatures(feature, refered);
+				}
+				iter.dispose();
+			}
+
+			set.dispose();
+		}
+
+
+
+		store.dispose();
+
+	}
+
+	public void testResourcesLocks() throws Exception {
+
+		if (!this.usesResources()) {
+			return;
+		}
+
+		DataStoreParameters dbfParameters = this
+				.getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
+				.getDataStoreName(), dbfParameters);
+
+		int nThreads = getRandom().nextInt(4) + 2;
+		List threads = new ArrayList();
+		TaskTestIterators task;
+		for (int i = 0; i < nThreads; i++) {
+			task = new TaskTestIterators(this, "" + i, store);
+			threads.add(task);
+			task.start();
+		}
+
+		Iterator iter;
+		List stillAlives = new ArrayList();
+		stillAlives.addAll(threads);
+
+		while (!stillAlives.isEmpty()) {
+			iter = stillAlives.iterator();
+			while (iter.hasNext()) {
+				task = (TaskTestIterators) iter.next();
+				if (!task.isAlive()) {
+					iter.remove();
+				} else if ((!task.isFinished()) && task.isOutOfDate()) {
+					iter.remove();
+					getLogger().error("task {} outOfDate", task.getName());
+				} else {
+					Thread.yield();
+					Thread.sleep(100);
+				}
+			}
+		}
+
+		store.dispose();
+
+		iter = threads.iterator();
+		while (iter.hasNext()) {
+			task = (TaskTestIterators) iter.next();
+			assertTrue(task.isFinishedOk());
+		}
+	}
+
+	class TaskTestIterators extends StoreTask {
+		private BaseTestFeatureStore testInstance;
+
+		public TaskTestIterators(BaseTestFeatureStore testInstance,
+				String name, FeatureStore store) {
+			super(name, store);
+			this.testInstance = testInstance;
+		}
+
+		public TaskTestIterators(BaseTestFeatureStore testInstance,
+				String name, FeatureStore store, int timeToWait) {
+			super(name, store, timeToWait);
+			this.testInstance = testInstance;
+		}
+
+		public void run() {
+			if (!this.startProcess()) {
+				return;
+			}
+			try {
+				this.testInstance.fullStoreIteratorTest(store);
+
+				finishedOk();
+			} catch (Throwable e) {
+				finishedError(e);
+				return;
+			}
+		}
+
+
+	}
+
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		if (!usesResources()) {
+			return;
+		}
+
+		ResourceManager resMan = DALLocator.getResourceManager();
+		resMan.closeResources();
+	}
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestFeatureStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculatorTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculatorTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculatorTest.java	(revision 42196)
@@ -0,0 +1,362 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.paging.impl;
+
+import junit.framework.TestCase;
+
+import org.gvsig.tools.paging.PagingCalculator.Sizeable;
+
+/**
+ * Unit tests for the {@link OneSubsetOneSetPagingCalculator} class.
+ * 
+ * @author gvSIG team
+ */
+public class OneSubsetOneSetPagingCalculatorTest extends
+ TestCase {
+
+	private static final int MAX_PAGE_SIZE = 4;
+
+	private TestSizeable sizeable1 = new TestSizeable(6);
+	private TestSizeable sizeable2 = new TestSizeable(17);
+
+	private OneSubsetOneSetPagingCalculator calculator;
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		calculator =
+            new OneSubsetOneSetPagingCalculator(sizeable1, sizeable2,
+                MAX_PAGE_SIZE);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#getFirstSetSize()}
+	 * .
+	 */
+	public void testGetFirstSetSize() {
+		assertEquals(sizeable1.getSize(), calculator.getFirstSetSize());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#getSecondSetSize()}
+	 * .
+	 */
+	public void testGetSecondSetSize() {
+		assertEquals(sizeable2.getSize() - sizeable1.getSize(), calculator.getSecondSetSize());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#getFirstSetInitialIndex()}
+	 * .
+	 */
+	public void testGetFirstSetInitialIndex() {
+		calculator.setCurrentPage(0);
+		assertEquals(0, calculator.getFirstSetInitialIndex());
+
+		calculator.setCurrentPage(1);
+		assertEquals(0 + MAX_PAGE_SIZE, calculator.getFirstSetInitialIndex());
+
+		calculator.setCurrentPage(2);
+		assertEquals(-1, calculator.getFirstSetInitialIndex());
+
+		calculator.setCurrentPage(3);
+		assertEquals(-1, calculator.getFirstSetInitialIndex());
+
+		calculator.setCurrentPage(calculator.getNumPages() - 1);
+		assertEquals(-1, calculator.getFirstSetInitialIndex());
+
+		// Change values so all data fits into a single page
+		sizeable1.setSize(1l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertEquals(0, calculator.getFirstSetInitialIndex());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#getSecondSetInitialIndex()}
+	 * .
+	 */
+	public void testGetSecondSetInitialIndex() {
+		calculator.setCurrentPage(0);
+		assertEquals(-1, calculator.getSecondSetInitialIndex());
+
+		calculator.setCurrentPage(1);
+		assertEquals(0, calculator.getSecondSetInitialIndex());
+
+		calculator.setCurrentPage(2);
+		assertEquals(2, calculator.getSecondSetInitialIndex());
+
+		calculator.setCurrentPage(3);
+		assertEquals(2 + MAX_PAGE_SIZE, calculator.getSecondSetInitialIndex());
+
+		calculator.setCurrentPage(calculator.getNumPages() - 1);
+		assertEquals(2 + ((calculator.getNumPages() - 3) * MAX_PAGE_SIZE),
+				calculator.getSecondSetInitialIndex());
+
+		// Change values so all data fits into a single page
+		sizeable1.setSize(1l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertEquals(0, calculator.getSecondSetInitialIndex());
+
+		// Set the two sets equal, so all elements in the first set are
+		// contained in the second one
+		sizeable1.setSize(15l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(4);
+
+		calculator.setCurrentPage(0);
+		assertEquals(-1, calculator.getSecondSetInitialIndex());
+
+		calculator.setCurrentPage(1);
+		assertEquals(-1, calculator.getSecondSetInitialIndex());
+
+		calculator.setCurrentPage(2);
+		assertEquals(-1, calculator.getSecondSetInitialIndex());
+
+		calculator.setCurrentPage(3);
+		assertEquals(-1, calculator.getSecondSetInitialIndex());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#getFirstSetHowMany()}
+	 * .
+	 */
+	public void testGetFirstSetHowMany() {
+		calculator.setCurrentPage(0);
+		assertEquals(MAX_PAGE_SIZE, calculator.getFirstSetHowMany());
+
+		calculator.setCurrentPage(1);
+		assertEquals(2, calculator.getFirstSetHowMany());
+
+		calculator.setCurrentPage(2);
+		assertEquals(0, calculator.getFirstSetHowMany());
+
+		calculator.setCurrentPage(3);
+		assertEquals(0, calculator.getFirstSetHowMany());
+
+		calculator.setCurrentPage(calculator.getNumPages() - 1);
+		assertEquals(0, calculator.getFirstSetHowMany());
+
+		// Change values so all data fits into a single page
+		sizeable1.setSize(1l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertEquals(1, calculator.getFirstSetHowMany());
+
+		// Change values so all data is available into the first set
+		sizeable1.setSize(25l);
+		sizeable2.setSize(25l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertEquals(20, calculator.getFirstSetHowMany());
+
+		calculator.setCurrentPage(1);
+		assertEquals(5, calculator.getFirstSetHowMany());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#getSecondSetHowMany()}
+	 * .
+	 */
+	public void testGetSecondSetHowMany() {
+		calculator.setCurrentPage(0);
+		assertEquals(0l, calculator.getSecondSetHowMany());
+
+		calculator.setCurrentPage(1);
+		assertEquals(2l, calculator.getSecondSetHowMany());
+
+		calculator.setCurrentPage(2);
+		assertEquals(MAX_PAGE_SIZE, calculator.getSecondSetHowMany());
+
+		calculator.setCurrentPage(3);
+		assertEquals(MAX_PAGE_SIZE, calculator.getSecondSetHowMany());
+
+		calculator.setCurrentPage(calculator.getNumPages() - 1);
+		assertEquals(1l, calculator.getSecondSetHowMany());
+
+		// Change values so all data fits into a single page
+		sizeable1.setSize(1l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertEquals(14l, calculator.getSecondSetHowMany());
+
+		// Set the two sets equal, so all elements in the first set are
+		// contained in the second one
+		sizeable1.setSize(15l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(4);
+
+		calculator.setCurrentPage(0);
+		assertEquals(0l, calculator.getSecondSetHowMany());
+
+		calculator.setCurrentPage(1);
+		assertEquals(0l, calculator.getSecondSetHowMany());
+
+		calculator.setCurrentPage(2);
+		assertEquals(0l, calculator.getSecondSetHowMany());
+
+		calculator.setCurrentPage(3);
+		assertEquals(0l, calculator.getSecondSetHowMany());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#hasCurrentPageAllValuesInFirstSet()}
+	 * .
+	 */
+	public void testHasCurrentPageAllValuesInFirstSet() {
+		calculator.setCurrentPage(0);
+		assertTrue(calculator.hasCurrentPageAllValuesInFirstSet());
+
+		calculator.setCurrentPage(1);
+		assertFalse(calculator.hasCurrentPageAllValuesInFirstSet());
+
+		calculator.setCurrentPage(2);
+		assertFalse(calculator.hasCurrentPageAllValuesInFirstSet());
+
+		calculator.setCurrentPage(3);
+		assertFalse(calculator.hasCurrentPageAllValuesInFirstSet());
+
+		calculator.setCurrentPage(calculator.getNumPages() - 1);
+		assertFalse(calculator.hasCurrentPageAllValuesInFirstSet());
+
+		// Change values so all data fits into a single page
+		sizeable1.setSize(1l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertFalse(calculator.hasCurrentPageAllValuesInFirstSet());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#hasCurrentPageAnyValuesInFirstSet()}
+	 * .
+	 */
+	public void testHasCurrentPageAnyValuesInFirstSet() {
+		calculator.setCurrentPage(0);
+		assertTrue(calculator.hasCurrentPageAnyValuesInFirstSet());
+
+		calculator.setCurrentPage(1);
+		assertTrue(calculator.hasCurrentPageAnyValuesInFirstSet());
+
+		calculator.setCurrentPage(2);
+		assertFalse(calculator.hasCurrentPageAnyValuesInFirstSet());
+
+		calculator.setCurrentPage(3);
+		assertFalse(calculator.hasCurrentPageAnyValuesInFirstSet());
+
+		calculator.setCurrentPage(calculator.getNumPages() - 1);
+		assertFalse(calculator.hasCurrentPageAnyValuesInFirstSet());
+
+		// Change values so all data fits into a single page
+		sizeable1.setSize(1l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertTrue(calculator.hasCurrentPageAnyValuesInFirstSet());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.dal.feature.paging.impl.OneSubsetOneSetPagingCalculator#hasCurrentPageAnyValuesInSecondSet()}
+	 * .
+	 */
+	public void testHasCurrentPageAnyValuesInSecondSet() {
+		calculator.setCurrentPage(0);
+		assertFalse(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		calculator.setCurrentPage(1);
+		assertTrue(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		calculator.setCurrentPage(2);
+		assertTrue(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		calculator.setCurrentPage(3);
+		assertTrue(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		calculator.setCurrentPage(calculator.getNumPages() - 1);
+		assertTrue(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		// Change values so all data fits into a single page
+		sizeable1.setSize(1l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(20);
+
+		calculator.setCurrentPage(0);
+		assertTrue(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		// Set the two sets equal, so all elements in the first set are
+		// contained in the second one
+		sizeable1.setSize(15l);
+		sizeable2.setSize(15l);
+		calculator.setMaxPageSize(4);
+
+		calculator.setCurrentPage(0);
+		assertFalse(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		calculator.setCurrentPage(1);
+		assertFalse(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		calculator.setCurrentPage(2);
+		assertFalse(calculator.hasCurrentPageAnyValuesInSecondSet());
+
+		calculator.setCurrentPage(3);
+		assertFalse(calculator.hasCurrentPageAnyValuesInSecondSet());
+	}
+
+    private class TestSizeable implements Sizeable {
+
+		private long size;
+
+		public TestSizeable(long size) {
+			this.size = size;
+		}
+
+		public long getSize() {
+			return size;
+		}
+
+		public void setSize(long size) {
+			this.size = size;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculatorTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureTest.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import junit.framework.TestCase;
+
+public class FeatureTest extends TestCase {
+
+    public void testVoid() {
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestEditableFeatureStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestEditableFeatureStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestEditableFeatureStore.java	(revision 42196)
@@ -0,0 +1,1444 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.dal.feature.testmulithread.DeleteFirstAndLastFeature;
+import org.gvsig.fmap.dal.feature.testmulithread.DeleteLastFeature;
+import org.gvsig.fmap.dal.feature.testmulithread.InsertFeature;
+import org.gvsig.fmap.dal.feature.testmulithread.StoreTask;
+import org.gvsig.fmap.dal.feature.testmulithread.UpdateFeature;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldValue;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+/**
+ * @author jmvivo
+ *
+ */
+public abstract class BaseTestEditableFeatureStore extends BaseTestFeatureStore {
+
+	public abstract NewFeatureStoreParameters getDefaultNewDataStoreParameters()
+			throws Exception;
+
+	public abstract boolean resourcesNotifyChanges();
+
+	//=================================================
+	//=================================================
+
+
+	public void fillPrimaryKeyInserFeature(EditableFeature feature) {
+		return;
+	}
+
+	protected Evaluator getEvaluatorToLower(String attibuteName) {
+		return new ToLower(attibuteName);
+
+	}
+
+	protected Evaluator getEvaluatorToUpper(String attibuteName) {
+		return new ToUpper(attibuteName);
+	}
+
+	public class ToLower extends AbstractEvaluator {
+		private String attributeName;
+
+		public ToLower(String attrName) {
+			this.attributeName = attrName;
+			this.getFieldsInfo().addFieldValue(this.attributeName);
+		}
+
+		public Object evaluate(EvaluatorData data) throws EvaluatorException {
+			String value = (String) data.getDataValue(this.attributeName);
+			if (value == null) {
+				return null;
+			}
+			return value.toLowerCase();
+		}
+
+		public String getSQL() {
+			return null;
+		}
+
+		public String getDescription() {
+			return null;
+		}
+
+		public String getName() {
+			return null;
+		}
+
+	}
+
+	public class ToUpper extends AbstractEvaluator {
+		private String attributeName;
+
+		public ToUpper(String attrName) {
+			this.attributeName = attrName;
+			this.getFieldsInfo().addFieldValue(this.attributeName);
+		}
+
+		public Object evaluate(EvaluatorData data) throws EvaluatorException {
+			String value = (String) data.getDataValue(this.attributeName);
+			if (value == null) {
+				return null;
+			}
+			return value.toUpperCase();
+		}
+
+		public String getSQL() {
+			return null;
+		}
+
+		public String getDescription() {
+			return null;
+		}
+
+		public EvaluatorFieldValue[] getFieldValues(String name) {
+			return null;
+		}
+
+		public String getName() {
+			return null;
+		}
+
+	}
+
+	protected FeatureStore getStoreCopy(FeatureStore source,
+			NewFeatureStoreParameters targetParams) throws DataException,
+			ValidateDataParametersException {
+		DataServerExplorer explorer = source.getExplorer();
+		source.export(explorer, source.getProviderName(), targetParams);
+		FeatureStore result = (FeatureStore) dataManager.openStore(source.getProviderName(), targetParams);
+
+		return result;
+	}
+
+	protected void clearCopy(FeatureStore source,
+			NewFeatureStoreParameters targetParams) throws Exception {
+		DataServerExplorer explorer = source.getExplorer();
+		explorer.remove(targetParams);
+
+	}
+
+	protected boolean compareFeatures(Feature f1, Feature f2,
+			String[] attrsNames, UpdateFeature updated, long index,
+			long lastIndex) throws DataException, EvaluatorException {
+		FeatureAttributeDescriptor attr1;
+		FeatureAttributeDescriptor attr2;
+		EditableFeature f2e = f2.getEditable();
+		updated.applyUpdateList(f2e, index, lastIndex);
+
+		Object v1, v2;
+		for (int i = 0; i < attrsNames.length; i++) {
+			attr1 = f1.getType().getAttributeDescriptor(attrsNames[i]);
+			attr2 = f2e.getType().getAttributeDescriptor(attrsNames[i]);
+			if (attr1 != attr2) {
+				if (!compareAttributes(attr1, attr1)) {
+					return false;
+				}
+			}
+			v1 = f1.get(attr1.getName());
+			v2 = f2.get(attr2.getName());
+			if (!compareFeatureValue(v1, v2, attr1)) {
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	protected boolean compareFeatures(Feature f1, Feature f2,
+			UpdateFeature updated, long index, long lastIndex)
+			throws DataException, EvaluatorException {
+		if (!compareTypes(f1.getType(), f2.getType())) {
+			System.out.println("compareFeatures() type !=");
+			return false;
+		}
+		Iterator iter = f1.getType().iterator();
+		FeatureAttributeDescriptor attr;
+		EditableFeature f1e = f1.getEditable();
+		updated.applyUpdateList(f1e, index, lastIndex);
+		Object v1, v2;
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			v1 = f1e.get(attr.getName());
+			v2 = f2.get(attr.getName());
+			if (!compareFeatureValue(v1, v2, attr)) {
+				return false;
+			}
+		}
+
+
+		return true;
+
+	}
+
+
+	//---------------
+
+
+
+
+	//=================================================
+	//=================================================
+
+
+
+
+	public void testExport() throws Exception {
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+				.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		fullStoreIteratorTest(result);
+
+		FeatureSet set;
+		FeatureSet originalSet;
+		if (result.getDefaultFeatureType().getPrimaryKey() != null
+				&& result.getDefaultFeatureType().getPrimaryKey().length > 0) {
+			FeatureQuery queryR = result.createFeatureQuery();
+			FeatureQuery queryO = store.createFeatureQuery();
+			FeatureAttributeDescriptor[] pk = result.getDefaultFeatureType()
+					.getPrimaryKey();
+			for (int i = 0; i < pk.length; i++) {
+				queryO.getOrder().add(pk[i].getName(), true);
+				queryR.getOrder().add(pk[i].getName(), true);
+			}
+
+
+			set = result.getFeatureSet(queryR);
+			originalSet = store.getFeatureSet(queryO);
+
+
+		} else {
+			set = result.getFeatureSet();
+			originalSet = store.getFeatureSet();
+		}
+		assertEquals(set.getSize(), originalSet.getSize());
+
+		DisposableIterator originalIter = originalSet.iterator();
+		DisposableIterator iter = set.iterator();
+		assertTrue(compareFeatureIterators(originalIter, iter));
+		originalIter.dispose();
+		iter.dispose();
+
+		if (store.getEnvelope() != result.getEnvelope()) {
+			if (store.getEnvelope() != null) {
+				assertTrue(store.getEnvelope().equals(result.getEnvelope()));
+			} else {
+				fail("Envelope: src=" + store.getEnvelope() + " traget="
+						+ store.getEnvelope());
+			}
+		}
+
+		set.dispose();
+		originalSet.dispose();
+
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+	}
+
+	public void testRemove() throws Exception {
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+				.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
+		FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
+		assertEquals(set.getSize(), originalSet.getSize());
+
+		DisposableIterator originalIter = originalSet.iterator();
+		DisposableIterator iter = set.iterator();
+		int i = 0;
+		while (iter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
+					(Feature) iter.next()));
+			i++;
+		}
+
+		iter.remove();
+
+
+		assertEquals(originalSet.getSize() - 1, set.getSize());
+
+		iter.dispose();
+		originalIter.dispose();
+
+
+		originalIter = originalSet.iterator();
+		iter = set.iterator();
+		i = 0;
+		while (iter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
+					(Feature) iter.next()));
+			i++;
+		}
+
+		iter.remove();
+
+		assertEquals(originalSet.getSize() - 2, set.getSize());
+
+		iter.dispose();
+		originalIter.dispose();
+
+		set.dispose();
+
+		result.finishEditing();
+
+		set = result.getFeatureSet();
+		assertEquals(originalSet.getSize() - 2, set.getSize());
+
+		originalIter = originalSet.iterator();
+		iter = set.iterator();
+		i = 0;
+		while (iter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
+					(Feature) iter.next()));
+			i++;
+		}
+
+		iter.dispose();
+		originalIter.dispose();
+
+
+		set.dispose();
+		originalSet.dispose();
+
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+
+	}
+
+	public void testInsert() throws Exception {
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+
+		FeatureStore store = (FeatureStore) dataManager
+		.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			//Do nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
+		FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
+		assertEquals(set.getSize(), originalSet.getSize());
+
+		EditableFeature newFeature = result.createNewFeature(true);
+		fillPrimaryKeyInserFeature(newFeature);
+		set.insert(newFeature);
+		DisposableIterator originalIter = originalSet.iterator();
+		DisposableIterator iter = set.iterator();
+		int i = 0;
+		while (originalIter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter
+					.next(), (Feature) iter.next()));
+			i++;
+		}
+		assertTrue(iter.hasNext());
+		assertNotNull(iter.next());
+		assertFalse(iter.hasNext());
+
+		assertEquals(originalSet.getSize() + 1, set.getSize());
+
+		iter.dispose();
+		originalIter.dispose();
+
+		originalIter = originalSet.iterator();
+		iter = set.iterator();
+		i = 0;
+		while (originalIter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter
+					.next(), (Feature) iter.next()));
+			i++;
+		}
+		assertTrue(iter.hasNext());
+		assertNotNull(iter.next());
+
+		newFeature = result.createNewFeature(true);
+		fillPrimaryKeyInserFeature(newFeature);
+		set.insert(newFeature);
+
+		assertEquals(originalSet.getSize() + 2, set.getSize());
+
+		iter.dispose();
+		originalIter.dispose();
+
+		set.dispose();
+
+		result.finishEditing();
+
+		set = result.getFeatureSet();
+		assertEquals(originalSet.getSize() + 2, set.getSize());
+
+		originalIter = originalSet.iterator();
+		iter = set.iterator();
+		i = 0;
+		while (originalIter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter
+					.next(), (Feature) iter.next()));
+			i++;
+		}
+
+		assertNotNull(iter.next());
+		assertNotNull(iter.next());
+		assertFalse(iter.hasNext());
+
+		iter.dispose();
+		originalIter.dispose();
+
+		set.dispose();
+		originalSet.dispose();
+
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+
+	}
+
+
+
+	public void testConcurrentRemove() throws Exception {
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		DeleteFirstAndLastFeature deleteFeature = new DeleteFirstAndLastFeature(
+				"1", result, StoreTask.TIME_TO_WAIT_NO_WAIT);
+
+		FeatureSet set = result.getFeatureSet();
+
+		DisposableIterator iter = set.iterator();
+		assertTrue(iter.hasNext());
+		assertNotNull(iter.next());
+
+		deleteFeature.start();
+
+		while (deleteFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
+			Thread.yield();
+			Thread.sleep(100);
+			if (deleteFeature.isOutOfDate()) {
+				break;
+			}
+		}
+
+		assertEquals(deleteFeature.getCurrentStatus(),
+				StoreTask.STATUS_FINISHED_OK);
+
+		Exception ex = null;
+		try {
+			iter.next();
+		} catch (Exception e) {
+			ex = e;
+		}
+		assertNotNull(ex);
+		assertEquals(ConcurrentDataModificationException.class, ex.getClass());
+
+		ex = null;
+		try {
+			set.getSize();
+		} catch (Exception e) {
+			ex = e;
+		}
+		assertNotNull(ex);
+		assertEquals(ConcurrentDataModificationException.class, ex.getClass());
+
+		iter.dispose();
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+	}
+
+	public void testConcurrentInsert() throws Exception{
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		InsertFeature insertFeature = new InsertFeature("1", result,
+				StoreTask.TIME_TO_WAIT_NO_WAIT, this);
+
+		FeatureSet set = result.getFeatureSet();
+
+		DisposableIterator iter = set.iterator();
+		assertTrue(iter.hasNext());
+		assertNotNull(iter.next());
+
+		insertFeature.start();
+
+		while (insertFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
+			Thread.yield();
+			Thread.sleep(100);
+			if (insertFeature.isOutOfDate()) {
+				break;
+			}
+		}
+
+		assertEquals(StoreTask.STATUS_FINISHED_OK, insertFeature
+				.getCurrentStatus());
+
+		Exception ex = null;
+		try {
+			iter.next();
+		} catch (Exception e) {
+			ex = e;
+		}
+		assertNotNull(ex);
+		assertEquals(ConcurrentDataModificationException.class, ex.getClass());
+
+		ex = null;
+		try {
+			set.getSize();
+		} catch (Exception e) {
+			ex = e;
+		}
+		assertNotNull(ex);
+		assertEquals(ConcurrentDataModificationException.class, ex.getClass());
+
+		iter.dispose();
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+	}
+
+	public void testConcurrentUpdate() throws Exception {
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		UpdateFeature updateFeature = new UpdateFeature("1", result,
+				StoreTask.TIME_TO_WAIT_NO_WAIT);
+
+		FeatureType fType = result.getDefaultFeatureType();
+		FeatureAttributeDescriptor attr;
+		Iterator fTypeIter = fType.iterator();
+		String attrName = null;
+		while (fTypeIter.hasNext()){
+			attr = (FeatureAttributeDescriptor) fTypeIter.next();
+			if (attr.getType() == DataTypes.STRING && !attr.isReadOnly() && !attr.isPrimaryKey() && !attr.isAutomatic()){
+				attrName= attr.getName();
+			}
+		}
+		if (attrName == null) {
+			fail("This test needs an normal attribute String (no Pk, no ReadOnly & no Auto)");
+			return;
+		}
+
+
+		updateFeature.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attrName,
+				"XXX");
+
+		FeatureSet set = result.getFeatureSet();
+
+		DisposableIterator iter = set.iterator();
+		assertTrue(iter.hasNext());
+		assertNotNull(iter.next());
+
+		updateFeature.start();
+
+		while (updateFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
+			Thread.yield();
+			Thread.sleep(100);
+			if (updateFeature.isOutOfDate()) {
+				break;
+			}
+		}
+
+		assertEquals(StoreTask.STATUS_FINISHED_OK, updateFeature
+				.getCurrentStatus());
+
+		Exception ex = null;
+		try {
+			iter.next();
+		} catch (Exception e) {
+			ex = e;
+		}
+		assertNotNull(ex);
+		assertEquals(ConcurrentDataModificationException.class, ex.getClass());
+
+		ex = null;
+		try {
+			set.getSize();
+		} catch (Exception e) {
+			ex = e;
+		}
+		assertNotNull(ex);
+		assertEquals(ConcurrentDataModificationException.class, ex.getClass());
+
+		iter.dispose();
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+
+
+	}
+
+	public void testSequencedRemove() throws Exception {
+		DataStoreParameters parameters = null;
+
+		int ntimes = 3;
+
+		parameters = getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		DeleteLastFeature[] deletesFeature = new DeleteLastFeature[ntimes];
+		int i;
+		for (i = 0; i < deletesFeature.length; i++) {
+			deletesFeature[i] = new DeleteLastFeature("DeleteLastFeature:" + i,
+					result, 300 * i);
+		}
+
+		for (i = 0; i < deletesFeature.length; i++) {
+			deletesFeature[i].start();
+		}
+
+		try {
+			for (int x = 0; x < (deletesFeature.length + 2); x++) {
+				Thread.yield();
+				Thread.sleep(500);
+			}
+
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+			result.dispose();
+			fail();
+			return;
+		}
+
+		boolean testAll = false;
+		boolean restart;
+		DeleteLastFeature item;
+		while (!testAll) {
+			restart = false;
+			for (i = 0; i < deletesFeature.length; i++) {
+				item = deletesFeature[i];
+				if (item.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
+					if (item.isOutOfDate()) {
+						result.dispose();
+						fail("OutOfDate: " + i);
+						return;
+					}
+					try {
+						Thread.yield();
+						Thread.sleep(400);
+					} catch (InterruptedException e) {
+						e.printStackTrace();
+						result.dispose();
+						fail();
+						return;
+					}
+					restart = true;
+					break;
+				} else if (item.getCurrentStatus() == StoreTask.STATUS_ERROR) {
+					item.getException().printStackTrace();
+					result.dispose();
+					fail("ERROR: " + i);
+					return;
+				} else if (item.getCurrentStatus() != StoreTask.STATUS_FINISHED_OK) {
+					item.getException().printStackTrace();
+					result.dispose();
+					fail("Data ERROR: " + i);
+					return;
+				}
+			}
+			if (restart) {
+				continue;
+			}
+			testAll = true;
+		}
+
+		FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
+		FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
+		assertEquals(originalSet.getSize() - deletesFeature.length, set
+				.getSize());
+
+		DisposableIterator originalIter = originalSet.iterator();
+		DisposableIterator iter = set.iterator();
+
+		i = 0;
+		while (iter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
+					(Feature) iter.next()));
+			i++;
+		}
+
+		originalIter.dispose();
+		iter.dispose();
+
+		set.dispose();
+
+		result.finishEditing();
+
+		set = result.getFeatureSet(getDefaultQuery(result));
+		assertEquals(originalSet.getSize() - deletesFeature.length, set
+				.getSize());
+
+		originalIter = originalSet.iterator();
+		iter = set.iterator();
+		i = 0;
+		while (iter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
+					(Feature) iter.next()));
+			i++;
+		}
+
+
+		originalIter.dispose();
+		iter.dispose();
+
+		set.dispose();
+		originalSet.dispose();
+
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+	}
+
+	public void testSequencedInsert() throws Exception {
+		DataStoreParameters parameters = null;
+
+		int ntimes = 3;
+
+		parameters = getDefaultDataStoreParameters();
+
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		InsertFeature[] insertsFeature = new InsertFeature[ntimes];
+		int i;
+		for (i = 0; i < insertsFeature.length; i++) {
+			insertsFeature[i] = new InsertFeature("InsertFeature:" + i, result,
+					300 * i, this);
+		}
+
+		for (i = 0; i < insertsFeature.length; i++) {
+			insertsFeature[i].start();
+		}
+
+		try {
+
+			for (int x = 0; x < (insertsFeature.length + 2); x++) {
+				Thread.yield();
+				Thread.sleep(500);
+			}
+
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+			result.dispose();
+			fail();
+			return;
+		}
+
+		boolean testAll = false;
+		boolean restart;
+		InsertFeature item;
+		while (!testAll) {
+			restart = false;
+			for (i = 0; i < insertsFeature.length; i++) {
+				item = insertsFeature[i];
+				if (item.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
+					if (item.isOutOfDate()) {
+						result.dispose();
+						fail("OutOfDate: " + i);
+						return;
+					}
+					try {
+						Thread.yield();
+						Thread.sleep(400);
+					} catch (InterruptedException e) {
+						e.printStackTrace();
+						result.dispose();
+						fail();
+						return;
+					}
+					restart = true;
+					break;
+				} else if (item.getCurrentStatus() == StoreTask.STATUS_ERROR) {
+					item.getException().printStackTrace();
+					result.dispose();
+					fail("ERROR: " + i);
+					return;
+				} else if (item.getCurrentStatus() == StoreTask.STATUS_FINISHED_NO_OK) {
+					result.dispose();
+					fail("No OK: " + i);
+					return;
+				} else if (item.getCurrentStatus() != StoreTask.STATUS_FINISHED_OK) {
+					item.getException().printStackTrace();
+					result.dispose();
+					fail("Data ERROR: " + i);
+					return;
+
+				}
+			}
+			if (restart) {
+				continue;
+			}
+			testAll = true;
+		}
+
+		FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
+		FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
+		assertEquals(originalSet.getSize() + insertsFeature.length, set
+				.getSize());
+
+		DisposableIterator originalIter = originalSet.iterator();
+		DisposableIterator iter = set.iterator();
+
+		i = 0;
+		while (originalIter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
+					(Feature) iter.next()));
+			i++;
+		}
+		for (; i < insertsFeature.length; i++) {
+			iter.next();
+		}
+
+
+		originalIter.dispose();
+		iter.dispose();
+
+		set.dispose();
+
+		result.finishEditing();
+
+		set = result.getFeatureSet();
+		assertEquals(originalSet.getSize() + insertsFeature.length, set
+				.getSize());
+
+		originalIter = originalSet.iterator();
+		iter = set.iterator();
+		i = 0;
+		while (originalIter.hasNext()) {
+			assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
+					(Feature) iter.next()));
+			i++;
+		}
+		for (; i < insertsFeature.length; i++) {
+			iter.next();
+		}
+
+		set.dispose();
+		originalSet.dispose();
+
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+	}
+
+
+	public void testUpdate() throws Exception {
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit(FeatureStore.MODE_FULLEDIT);
+
+		FeatureSet set = result.getFeatureSet();
+		long size = set.getSize();
+
+		set.dispose();
+
+		UpdateFeature updater = new UpdateFeature("1", result,
+				UpdateFeature.TIME_TO_WAIT_NO_WAIT);
+		FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
+				.getDefaultFeatureType(), DataTypes.STRING);
+		assertNotNull("No String attributes found", attr);
+
+		updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
+				getEvaluatorToLower(attr.getName()));
+
+		updater.run();
+		while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
+				&& !updater.isOutOfDate()) {
+			Thread.yield();
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+				fail();
+			}
+		}
+		set = result.getFeatureSet(getDefaultQuery(result));
+		DisposableIterator iter = set.iterator();
+
+		printFeatureTypeColNames(set.getDefaultFeatureType(), 15);
+		Feature f;
+		while (iter.hasNext()) {
+			f = (Feature) iter.next();
+			this.printFeature(f, false, 15);
+		}
+
+		iter.dispose();
+
+		FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
+
+		DisposableIterator originalIter = originalSet.iterator();
+
+		iter = set.iterator();
+
+		long i = 0;
+		while (originalIter.hasNext()) {
+			try {
+				assertTrue("" + i, compareFeatures((Feature) originalIter
+						.next(), (Feature) iter.next(), updater, i, size));
+			} catch (EvaluatorException e) {
+				e.printStackTrace();
+				fail();
+			}
+			i++;
+		}
+		iter.dispose();
+		originalIter.dispose();
+
+
+		set.dispose();
+
+		result.finishEditing();
+
+		set = result.getFeatureSet();
+		assertEquals(originalSet.getSize(), set.getSize());
+
+		originalIter = originalSet.iterator();
+		iter = set.iterator();
+		i = 0;
+		while (originalIter.hasNext()) {
+			try {
+				assertTrue("" + i, compareFeatures((Feature) originalIter
+						.next(), (Feature) iter.next(), updater, i, size));
+			} catch (EvaluatorException e) {
+				e.printStackTrace();
+				fail();
+			}
+			i++;
+		}
+
+
+		iter.dispose();
+		originalIter.dispose();
+		set.dispose();
+
+
+		updater = new UpdateFeature("1", result,
+				UpdateFeature.TIME_TO_WAIT_NO_WAIT);
+
+		updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
+				getEvaluatorToLower(attr.getName()));
+
+		updater.run();
+		while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
+				&& !updater.isOutOfDate()) {
+			Thread.yield();
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+				fail();
+			}
+		}
+		set = result.getFeatureSet();
+
+		iter = set.iterator();
+		originalIter = originalSet.iterator();
+		i = 0;
+		while (originalIter.hasNext()) {
+			try {
+				assertTrue("" + i, compareFeatures((Feature) originalIter
+						.next(), (Feature) iter.next(), updater, i, size));
+			} catch (EvaluatorException e) {
+				e.printStackTrace();
+				fail();
+			}
+			i++;
+		}
+
+		iter.dispose();
+		originalIter.dispose();
+		set.dispose();
+
+
+
+
+
+		originalSet.dispose();
+
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+	}
+
+
+	public void testResourceChangeNotification() throws Exception{
+		if (!resourcesNotifyChanges()) {
+			return;
+		}
+
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		FeatureStore result2 = (FeatureStore) dataManager
+		.createStore(newParams);
+
+		FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
+				.getDefaultFeatureType(), DataTypes.STRING);
+		assertNotNull("No String attributes found", attr);
+
+
+		UpdateFeature updater = new UpdateFeature("1", result,
+				UpdateFeature.TIME_TO_WAIT_NO_WAIT);
+
+		updater.addUpdate(UpdateFeature.UPDATE_LAST_FEATURE, attr.getName(),
+				getEvaluatorToLower(attr.getName()));
+
+		StoreObserverForNotify observer = new StoreObserverForNotify(result2,
+				FeatureStoreNotification.RESOURCE_CHANGED);
+		result2.addObserver(observer);
+
+		result.edit();
+		updater.run();
+		while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
+				&& !updater.isOutOfDate()) {
+			Thread.yield();
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+				fail();
+			}
+		}
+
+		result.finishEditing();
+
+		assertTrue("The observer hasn't been notified", observer.notified());
+
+		result2.refresh();
+
+		FeatureSet set = result.getFeatureSet();
+		FeatureSet set2 = result2.getFeatureSet();
+
+		DisposableIterator iter1 = set.iterator();
+		DisposableIterator iter2 = set2.iterator();
+		assertTrue(this.compareFeatureIterators(iter1, iter2));
+		iter1.dispose();
+		iter2.dispose();
+
+		set2.dispose();
+		set.dispose();
+
+		// TODO checks FeatureType change
+
+		result2.dispose();
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+	}
+
+	public abstract class StoreObserver implements Observer{
+
+		public DataStore store = null;
+
+	}
+
+	public class StoreObserverForNotify implements Observer{
+
+		public DataStore store = null;
+
+		public String notifyType = null;
+
+		private boolean notifyRecived = false;
+
+		public StoreObserverForNotify(DataStore store,String notifyType){
+			this.store = store;
+			this.notifyType = notifyType;
+			this.notifyRecived = false;
+		}
+
+		public boolean notified(){
+			return notifyRecived;
+		}
+
+		public void update(Observable observable, Object notification) {
+			if (!(observable == this.store)){
+				return;
+			}
+			if (!(notification instanceof FeatureStoreNotification)){
+				return;
+			}
+			FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
+
+			if (fsNotification.getType().equals(this.notifyType)){
+				notifyRecived = true;
+			}
+		}
+
+	}
+
+	public void testUpdateFeatureType_AddField() throws Exception {
+		DataStoreParameters parameters = null;
+
+		parameters = getDefaultDataStoreParameters();
+
+		FeatureStore store = (FeatureStore) dataManager
+		.createStore(parameters);
+
+		NewFeatureStoreParameters newParams = this
+		.getDefaultNewDataStoreParameters();
+		try {
+			this.clearCopy(store, newParams);
+		} catch (RemoveException e) {
+			// Dp nothing
+		}
+
+		int pkAttributesCount = 0;
+
+		FeatureStore result = this.getStoreCopy(store, newParams);
+
+		result.edit();
+
+
+		String[] orgAttNames = new String[result.getDefaultFeatureType()
+		                                  .size()];
+
+		Iterator iter = result.getDefaultFeatureType().iterator();
+		int i = 0;
+
+		while (iter.hasNext()) {
+			FeatureAttributeDescriptor attr = ((FeatureAttributeDescriptor) iter
+					.next());
+			orgAttNames[i] = attr.getName();
+			i++;
+			if (attr.isPrimaryKey()) {
+				pkAttributesCount++;
+			}
+		}
+
+		EditableFeatureType edFtype = result
+		.getDefaultFeatureType().getEditable();
+
+		edFtype.add("__ATTR1__", DataTypes.STRING).setSize(10)
+		.setDefaultValue(
+				"HOLA");
+
+		result.update(edFtype);
+
+		assertEquals(store.getDefaultFeatureType().size() + 1, result
+				.getDefaultFeatureType().size());
+
+		testIterationFastAndStandart(result);
+
+		FeatureSet orgSet = store.getFeatureSet(getDefaultQuery(store));
+		FeatureSet curSet = result.getFeatureSet(getDefaultQuery(result));
+
+		assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
+				.getDefaultFeatureType().size());
+
+		DisposableIterator orgIter = orgSet.iterator();
+		DisposableIterator curIter = curSet.iterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+
+		orgIter.dispose();
+		curIter.dispose();
+
+		orgIter = orgSet.fastIterator();
+		curIter = curSet.fastIterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+		orgIter.dispose();
+		curIter.dispose();
+
+		orgIter = orgSet.iterator();
+		curIter = curSet.fastIterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+		orgIter.dispose();
+		curIter.dispose();
+
+		orgIter = orgSet.fastIterator();
+		curIter = curSet.iterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+		orgIter.dispose();
+		curIter.dispose();
+
+		curIter = curSet.iterator();
+		Feature feature;
+		while (curIter.hasNext()) {
+			feature = (Feature) curIter.next();
+			assertEquals("HOLA", feature.get("__ATTR1__"));
+		}
+		curIter.dispose();
+		curSet.dispose();
+
+		FeatureQuery query = this.getDefaultQuery(result);
+		query.setAttributeNames(new String[] { "__ATTR1__" });
+		curSet = result.getFeatureSet(query);
+
+		assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
+				.size());
+
+		assertEquals(orgSet.getSize(), curSet.getSize());
+		curIter = curSet.iterator();
+		while (curIter.hasNext()) {
+			feature = (Feature) curIter.next();
+			assertEquals("HOLA", feature.get("__ATTR1__"));
+		}
+		curIter.dispose();
+		curSet.dispose();
+
+		result.finishEditing();
+
+		testIterationFastAndStandart(result);
+
+		assertEquals(store.getDefaultFeatureType().size() + 1, result
+				.getDefaultFeatureType().size());
+
+
+		orgSet = store.getFeatureSet(getDefaultQuery(store));
+		curSet = result.getFeatureSet(getDefaultQuery(result));
+
+		assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
+				.getDefaultFeatureType().size());
+
+		orgIter = orgSet.iterator();
+		curIter = curSet.iterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+		orgIter.dispose();
+		curIter.dispose();
+
+		orgIter = orgSet.fastIterator();
+		curIter = curSet.fastIterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+		orgIter.dispose();
+		curIter.dispose();
+
+		orgIter = orgSet.iterator();
+		curIter = curSet.fastIterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+		orgIter.dispose();
+		curIter.dispose();
+
+		orgIter = orgSet.fastIterator();
+		curIter = curSet.iterator();
+
+		assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
+		orgIter.dispose();
+		curIter.dispose();
+
+		curIter = curSet.iterator();
+		while (curIter.hasNext()) {
+			feature = (Feature) curIter.next();
+			assertEquals("HOLA", feature.get("__ATTR1__"));
+		}
+		curIter.dispose();
+		curSet.dispose();
+
+		query = this.getDefaultQuery(result);
+		query.setAttributeNames(new String[] { "__ATTR1__" });
+		curSet = result.getFeatureSet(query);
+
+		assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
+				.size());
+
+		assertEquals(orgSet.getSize(), curSet.getSize());
+		curIter = curSet.iterator();
+		while (curIter.hasNext()) {
+			feature = (Feature) curIter.next();
+			assertEquals("HOLA", feature.get("__ATTR1__"));
+		}
+		curIter.dispose();
+		curSet.dispose();
+
+		orgSet.dispose();
+		result.dispose();
+		this.clearCopy(store, newParams);
+		store.dispose();
+
+
+	}
+
+	public void testResourcesLocks() throws Exception {
+
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/BaseTestEditableFeatureStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteFirstAndLastFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteFirstAndLastFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteFirstAndLastFeature.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.testmulithread;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class DeleteFirstAndLastFeature extends StoreTask {
+
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public DeleteFirstAndLastFeature(String id, FeatureStore store) {
+		super(id, store);
+	}
+
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public DeleteFirstAndLastFeature(String id, FeatureStore store, int timeToWait) {
+		super(id, store, timeToWait);
+	}
+
+	public void run() {
+		if (!this.startProcess()) {
+			return;
+		}
+		FeatureSet set;
+		DisposableIterator iter = null;
+		try {
+			set = this.store.getFeatureSet();
+		} catch (DataException e) {
+			finishedError(e);
+			return;
+		}
+
+		try {
+			long size = set.getSize();
+			try {
+
+				iter = set.iterator();
+
+				if (!iter.hasNext()) {
+					finishedNoOk();
+					return;
+				}
+				iter.next();
+
+				try {
+					iter.remove();
+					size--;
+				} catch (DataRuntimeException e) {
+					if (e.getCause() instanceof ConcurrentDataModificationException) {
+						finishedConcurrentError(e);
+						return;
+					}
+					finishedError(e);
+					return;
+
+				} catch (RuntimeException e) {
+					finishedError(e);
+					return;
+				}
+
+
+				if (size != set.getSize()) {
+					finishedNoOk();
+					return;
+				}
+
+				while (iter.hasNext()) {
+					iter.next();
+				}
+			} catch (ConcurrentDataModificationException e) {
+				finishedConcurrentError(e);
+				return;
+			} catch (DataException e) {
+				finishedError(e);
+				return;
+			}
+			try {
+
+				iter.remove();
+				size--;
+			} catch (DataRuntimeException e) {
+				if (e.getCause() instanceof ConcurrentDataModificationException) {
+					finishedConcurrentError(e);
+					return;
+				}
+				finishedError(e);
+				return;
+
+			} catch (RuntimeException e) {
+				finishedError(e);
+				return;
+			}
+			if (size != set.getSize()) {
+				finishedNoOk();
+			} else {
+				finishedOk();
+			}
+		} catch (Throwable e) {
+			finishedError(e);
+			return;
+		} finally {
+			iter.dispose();
+			set.dispose();
+		}
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteFirstAndLastFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/UpdateFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/UpdateFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/UpdateFeature.java	(revision 42196)
@@ -0,0 +1,190 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.testmulithread;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class UpdateFeature extends StoreTask {
+
+	private List updateList = new ArrayList();
+
+	public static final int UPDATE_ALL_FEATURES = -2;
+	public static final int UPDATE_LAST_FEATURE = -1;
+
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public UpdateFeature(String id, FeatureStore store) {
+		super(id, store);
+	}
+
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public UpdateFeature(String id, FeatureStore store, int timeToWait) {
+		super(id, store, timeToWait);
+	}
+
+	public void addUpdate(int featureToUpdate, String attName, Object newValue) {
+		UpdateItem item = new UpdateItem();
+		item.featureToUpdate = featureToUpdate;
+		item.attributeName = attName;
+		item.newValue = newValue;
+		item.evaluator = null;
+		this.updateList.add(item);
+	}
+
+	public void addUpdate(int featureToUpdate, String attName,
+			Evaluator evaluator) {
+		UpdateItem item = new UpdateItem();
+		item.featureToUpdate = featureToUpdate;
+		item.attributeName = attName;
+		item.newValue = null;
+		item.evaluator = evaluator;
+		this.updateList.add(item);
+	}
+
+	public Iterator getUpdateList() {
+		return this.updateList.iterator();
+	}
+
+	public UpdateItem getUpdate(int index) {
+		return (UpdateItem) this.updateList.get(index);
+	}
+
+	public int getUpdateListSize() {
+		return this.updateList.size();
+	}
+
+	public EditableFeature applyUpdateList(Feature feature, long index,
+			long lastIndex)
+			throws DataException, EvaluatorException {
+		Iterator iter = this.getUpdateList();
+		EditableFeature editable = feature.getEditable();
+		boolean hasChanges = false;
+		while (iter.hasNext()) {
+			UpdateItem update = (UpdateItem) iter.next();
+			if (index == update.featureToUpdate
+					|| update.featureToUpdate == UPDATE_ALL_FEATURES
+					|| (update.featureToUpdate == UPDATE_LAST_FEATURE && (index == lastIndex))) {
+				if (update.evaluator != null) {
+					editable.set(update.attributeName, update.evaluator
+							.evaluate((EvaluatorData) feature));
+				} else {
+					editable.set(update.attributeName, update.newValue);
+				}
+				hasChanges = true;
+			}
+
+		}
+		if (hasChanges) {
+			return editable;
+		}
+		return null;
+	}
+
+	public void run() {
+		if (!this.startProcess()) {
+			return;
+		}
+		if (this.updateList.size() == 0) {
+			finishedNoOk();
+			return;
+		}
+		FeatureSet set;
+		DisposableIterator iter = null;
+		try {
+			set = this.store.getFeatureSet();
+		} catch (DataException e) {
+			finishedError(e);
+			return;
+		}
+		try {
+			long size = set.getSize();
+			EditableFeature newFeature = this.store.createNewFeature(true);
+
+			long i = 0;
+			try {
+
+				iter = set.iterator();
+				while (iter.hasNext()) {
+					Feature feature = (Feature) iter.next();
+					EditableFeature result = this.applyUpdateList(feature,
+							i, size - 1);
+					if (result != null) {
+						set.update(result);
+					}
+					i++;
+				}
+			} catch (ConcurrentDataModificationException e) {
+				finishedConcurrentError(e);
+				return;
+			} catch (DataException e) {
+				finishedError(e);
+				return;
+			}
+
+			if ((size == set.getSize()) && (set.getSize() == i)) {
+				finishedOk();
+			} else {
+				finishedNoOk();
+			}
+		} catch (Throwable e) {
+			finishedError(e);
+			return;
+		} finally {
+			iter.dispose();
+			set.dispose();
+		}
+	}
+
+
+	public class UpdateItem{
+		public long featureToUpdate = UPDATE_ALL_FEATURES;
+		public String attributeName = null;
+		public Evaluator evaluator = null;
+		public Object newValue = null;
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/UpdateFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/StoreTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/StoreTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/StoreTask.java	(revision 42196)
@@ -0,0 +1,190 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.testmulithread;
+
+import java.util.Random;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+public abstract class StoreTask extends Thread {
+
+	public static final int STATUS_NONE = -1;
+	public static final int STATUS_WAITING = 0;
+	public static final int STATUS_RUNING = 1;
+
+	public static final int STATUS_FINISHED_OK = 20;
+	public static final int STATUS_FINISHED_NO_OK = 30;
+	public static final int STATUS_FINISHED_ERROR = 40;
+	public static final int STATUS_FINISHED_CONCURRENT_ERROR = 50;
+	public static final int STATUS_ERROR = 60;
+
+	public static final int TIME_TO_WAIT_RANDOM = -1;
+	public static final int TIME_TO_WAIT_NO_WAIT = 0;
+
+	private long startTimer = 0;
+	private long afterWaitTimer = 0;
+	private long finishTimer = 0;
+
+	private int timeToWait = 0;
+	private int finalTimeToWait = 0;
+
+	private int timeToOutOfDate = 5000;
+
+	private int curStatus = STATUS_NONE;
+
+	protected FeatureStore store;
+	protected Throwable exception;
+
+	public StoreTask(String name, FeatureStore store) {
+		super(name);
+		this.store = store;
+		this.timeToWait = TIME_TO_WAIT_NO_WAIT;
+	}
+
+	public StoreTask(String name, FeatureStore store, int timeToWait) {
+		super(name);
+		this.store = store;
+		this.timeToWait = timeToWait;
+	}
+
+	public int getTimeToOutOfDate() {
+		return this.timeToOutOfDate;
+	}
+
+	public void setTimeToOutOfDate(int mlSeconds) {
+		this.timeToOutOfDate = mlSeconds;
+	}
+
+	public long getStartTimer() {
+		return this.startTimer;
+	}
+
+	public long getAfterWaitTimer() {
+		return this.afterWaitTimer;
+	}
+
+	public long getFinishTimer() {
+		return this.finishTimer;
+	}
+
+	public int getCurrentStatus() {
+		return this.curStatus;
+	}
+
+	public boolean isFinishedOk() {
+		return this.curStatus == STATUS_FINISHED_OK;
+	}
+
+	public Throwable getException() {
+		return exception;
+	}
+
+	public boolean isOutOfDate() {
+		if (curStatus < STATUS_RUNING) {
+			return false;
+		}
+		long curTimer = System.currentTimeMillis();
+		if ((curTimer - afterWaitTimer) > (finalTimeToWait + 5000)) {
+			return true;
+		}
+		return false;
+	}
+
+	protected boolean startProcess() {
+		if (this.curStatus != STATUS_NONE) {
+			throw new IllegalStateException();
+		}
+		this.startTimer = System.currentTimeMillis();
+		this.curStatus = STATUS_WAITING;
+		if (timeToWait != TIME_TO_WAIT_NO_WAIT) {
+			if (timeToWait == TIME_TO_WAIT_RANDOM) {
+				Random rnd = new Random();
+				rnd.setSeed(System.currentTimeMillis());
+				finalTimeToWait = rnd.nextInt(200) + 4;
+
+			} else {
+				finalTimeToWait = timeToWait;
+			}
+			try {
+				for (int x = 0; x < 4; x++) {
+					yield();
+					sleep(finalTimeToWait / 4);
+				}
+			} catch (InterruptedException e) {
+				this.curStatus = STATUS_FINISHED_ERROR;
+				this.exception = e;
+				return false;
+			}
+		}
+		this.afterWaitTimer = System.currentTimeMillis();
+		this.curStatus = STATUS_RUNING;
+
+		return true;
+	}
+
+	protected void finishedOk() {
+		if (this.curStatus != STATUS_RUNING) {
+			throw new IllegalStateException();
+		}
+		this.finishTimer = System.currentTimeMillis();
+		this.curStatus = STATUS_FINISHED_OK;
+
+	}
+
+	protected void finishedNoOk() {
+		if (this.curStatus != STATUS_RUNING) {
+			throw new IllegalStateException();
+		}
+		this.finishTimer = System.currentTimeMillis();
+		this.curStatus = STATUS_FINISHED_NO_OK;
+
+	}
+
+	protected void finishedError(Throwable ex) {
+		if (this.curStatus != STATUS_RUNING) {
+			throw new IllegalStateException();
+		}
+		this.finishTimer = System.currentTimeMillis();
+		this.curStatus = STATUS_FINISHED_ERROR;
+		this.exception = ex;
+	}
+
+	protected void finishedConcurrentError(Exception ex) {
+		if (this.curStatus != STATUS_RUNING) {
+			throw new IllegalStateException();
+		}
+		this.finishTimer = System.currentTimeMillis();
+		this.curStatus = STATUS_FINISHED_CONCURRENT_ERROR;
+		this.exception = ex;
+	}
+
+
+	public boolean isFinished() {
+		return curStatus >= STATUS_FINISHED_OK;
+
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/StoreTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/InsertFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/InsertFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/InsertFeature.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.testmulithread;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.BaseTestEditableFeatureStore;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class InsertFeature extends StoreTask {
+
+	private BaseTestEditableFeatureStore test;
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public InsertFeature(String id, FeatureStore store,
+			BaseTestEditableFeatureStore test) {
+		super(id, store);
+		this.test = test;
+	}
+
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public InsertFeature(String id, FeatureStore store, int timeToWait,
+			BaseTestEditableFeatureStore test) {
+		super(id, store, timeToWait);
+		this.test = test;
+	}
+
+	public void run() {
+		if (!this.startProcess()) {
+			return;
+		}
+		FeatureSet set;
+		DisposableIterator iter = null;
+		try {
+			set = this.store.getFeatureSet();
+		} catch (DataException e) {
+			finishedError(e);
+			return;
+		}
+		try {
+			long size = set.getSize();
+			EditableFeature newFeature = this.store.createNewFeature(true);
+			test.fillPrimaryKeyInserFeature(newFeature);
+
+
+			long i = 0;
+			try {
+
+				iter = set.iterator();
+				set.insert(newFeature);
+				iter.dispose();
+				iter = set.iterator();
+				while (iter.hasNext()) {
+					iter.next();
+					i++;
+				}
+			} catch (ConcurrentDataModificationException e) {
+				finishedConcurrentError(e);
+				return;
+			} catch (DataException e) {
+				finishedError(e);
+				return;
+			}
+
+			if ((size + 1 == set.getSize()) && (set.getSize() == i)) {
+				finishedOk();
+			} else {
+				finishedNoOk();
+			}
+		} catch (Throwable e) {
+			finishedError(e);
+			return;
+		} finally {
+			if (iter != null) {
+				iter.dispose();
+			}
+			if (set != null) {
+				set.dispose();
+			}
+		}
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/InsertFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteLastFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteLastFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteLastFeature.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.testmulithread;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class DeleteLastFeature extends StoreTask {
+
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public DeleteLastFeature(String id, FeatureStore store) {
+		super(id, store);
+	}
+
+	/**
+	 * @param store
+	 * @param timeToWait
+	 */
+	public DeleteLastFeature(String id, FeatureStore store, int timeToWait) {
+		super(id, store, timeToWait);
+	}
+
+	public void run() {
+		if (!this.startProcess()) {
+			return;
+		}
+		FeatureSet set;
+		DisposableIterator iter = null;
+		try {
+			set = this.store.getFeatureSet();
+		} catch (DataException e) {
+			finishedError(e);
+			return;
+		}
+		try {
+
+			try {
+				iter = set.iterator();
+				while (iter.hasNext()) {
+					iter.next();
+				}
+			} catch (ConcurrentDataModificationException e) {
+				finishedConcurrentError(e);
+				return;
+			} catch (DataException e) {
+				finishedError(e);
+				return;
+			}
+			try {
+
+				iter.remove();
+			} catch (DataRuntimeException e) {
+				if (e.getCause() instanceof ConcurrentDataModificationException) {
+					finishedConcurrentError(e);
+					return;
+				}
+				finishedError(e);
+				return;
+
+			} catch (RuntimeException e) {
+				finishedError(e);
+				return;
+			}
+			finishedOk();
+		} catch (Throwable e) {
+			finishedError(e);
+			return;
+		} finally {
+			iter.dispose();
+			set.dispose();
+		}
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/testmulithread/DeleteLastFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureSetTestParent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureSetTestParent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureSetTestParent.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature;
+
+import junit.framework.TestCase;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Unit tests for the {@link AbstractFeatureCollection} class.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public abstract class FeatureSetTestParent extends TestCase {
+
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        register();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    /**
+     * Test method for
+     * {@link org.gvsig.fmap.dal.feature.AbstractFeatureCollection#iterator(int)}
+     * .
+     *
+     * @throws Exception
+     */
+    public void testIteratorInt() throws Exception {
+        FeatureSet featureSet = createFeatureCollection();
+        testIteratorInt(featureSet);
+        featureSet.dispose();
+    }
+
+    public void testIteratorInt(FeatureSet featureSet) throws DataException {
+
+        if (featureSet.getSize() < 3) {
+            fail("The Collection to create for the test must contain "
+                    + "at least 3 values");
+        }
+
+        try {
+            featureSet.iterator(-5);
+            fail("Iterator index accepted with a value < 0");
+        } catch (Exception ex) {
+            // Good
+        }
+
+        try {
+            featureSet.iterator(featureSet.getSize() + 2);
+            fail("Iterator index accepted with a value > collection size");
+        } catch (Exception ex) {
+            // Good
+        }
+
+        long index = featureSet.getSize() - 3l;
+        DisposableIterator iter = featureSet.iterator(index);
+        int iterations = 0;
+        while (iter.hasNext()) {
+            iter.next();
+            iterations++;
+        }
+        assertEquals("The number of iterations remaining is not correct", 3,
+                iterations);
+        iter.dispose();
+
+        iter = featureSet.iterator(0);
+        iterations = 0;
+        while (iter.hasNext()) {
+            iter.next();
+            iterations++;
+        }
+        assertEquals("The number of iterations is not the "
+                + "total size of the collection", featureSet.getSize(),
+                iterations);
+        iter.dispose();
+    }
+
+    protected FeatureSet createFeatureCollection() throws Exception {
+        FeatureStore store = createFeatureStore();
+        FeatureType ft = store.getDefaultFeatureType();
+        return createFeatureCollection(store, ft);
+    }
+
+    protected FeatureStore createFeatureStore() throws Exception {
+        DataManager manager = DALLocator.getDataManager();
+        return (FeatureStore) manager
+                .createStore(createStoreParameters(manager));
+    }
+
+    protected abstract void register();
+
+    protected abstract DataStoreParameters createStoreParameters(
+            DataManager manager)
+            throws Exception;
+
+    /**
+     * If this method is rewritten, the returned FeatureCollection must have at
+     * least 3 values.
+     */
+    protected abstract FeatureSet createFeatureCollection(
+            FeatureStore store,
+            FeatureType ft) throws DataException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/FeatureSetTestParent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/MyTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/MyTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/MyTransform.java	(revision 42196)
@@ -0,0 +1,148 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Arrays;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * This transform adds a new attribute of type Geometry to the original store's
+ * default FeatureType. When applying the transform to a single feature this new
+ * attribute is assigned the value of a point whose coordinates proceed from two
+ * numeric attributes from the store, called xname, yname.
+ *
+ */
+class MyTransform extends AbstractFeatureStoreTransform {
+
+	private FeatureType originalType;
+	private String geomName;
+	private String xname;
+	private String yname;
+
+	/**
+	 * Empty default constructor
+	 */
+	public MyTransform() {
+	}
+
+	/**
+	 * Initializes the transform by assigning the source store and the names of
+	 * the necessary attributes.
+	 *
+	 * @param store
+	 *            source store.
+	 *
+	 * @param geomName
+	 *            name of the geometry attribute in the default feature type
+	 *            from the source store.
+	 *
+	 * @param xname
+	 *            name of the attribute containing the X coordinates
+	 *
+	 * @param yname
+	 *            name of the attribute containing the Y coordinates
+	 *
+	 * @throws DataException
+	 */
+	public void initialize(FeatureStore store, String geomName, String xname, String yname) throws DataException {
+
+		// Initialize some data
+		this.setFeatureStore(store);
+		this.geomName = geomName;
+		this.xname = xname;
+		this.yname = yname;
+
+		this.originalType = store.getDefaultFeatureType();
+		// obtain the feature type, add the new attribute and keep a reference to the resulting feature type
+		EditableFeatureType type = store.getDefaultFeatureType().getEditable();
+		type.add(geomName, DataTypes.GEOMETRY);
+		FeatureType[] types = new FeatureType[] { type.getNotEditableCopy() };
+		setFeatureTypes(Arrays.asList(types), types[0]);
+	}
+
+	/**
+	 * Applies this transform to a target editable feature, using data from the
+	 * source feature.
+	 */
+	public void applyTransform(Feature source, EditableFeature target)
+			throws DataException {
+
+		// copy source feature data over target feature
+		target.copyFrom(source);
+
+		// calculate and assign new attribute's value
+		GeometryManager geomManager = GeometryLocator.getGeometryManager();
+		Point point;
+		try {
+			point = (Point)geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+			point.setX(source.getDouble(xname));
+			point.setY(source.getDouble(yname));
+			target.setGeometry(this.geomName, point);
+		} catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+        	throw new CreateGeometryException(TYPES.POINT, SUBTYPES.GEOM2D, e);
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("geomName", this.geomName);
+		state.set("xname", this.xname);
+		state.set("yname", this.yname);
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.feature.FeatureStoreTransform#getSourceFeatureTypeFrom
+	 * (org.gvsig.fmap.dal.feature.FeatureType)
+	 */
+	public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
+		return originalType;
+	}
+
+	public boolean isTransformsOriginalValues() {
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/MyTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelectionTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelectionTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelectionTest.java	(revision 42196)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.easymock.MockControl;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class DefaultFeatureReferenceSelectionTest extends AbstractLibraryAutoInitTestCase {
+
+    private FeatureReferenceSelection selection;
+    private MockControl refControl1;
+    private FeatureReference ref1;
+    private MockControl refControl2;
+    private FeatureReference ref2;
+    private MockControl storeControl;
+    private FeatureStore store;
+    private MockControl fsetControl;
+    private FeatureSet featureSet;
+    private MockControl helperControl;
+    private FeatureSelectionHelper helper;
+
+    private int total = 10;
+
+    protected void doSetUp() throws Exception {     
+        refControl1 = MockControl.createNiceControl(FeatureReference.class);
+        ref1 = (FeatureReference) refControl1.getMock();
+        refControl2 = MockControl.createNiceControl(FeatureReference.class);
+        ref2 = (FeatureReference) refControl2.getMock();
+
+        storeControl = MockControl.createNiceControl(FeatureStore.class);
+        store = (FeatureStore) storeControl.getMock();
+        storeControl.expectAndReturn(store.getFeatureCount(), total);
+
+        helperControl = MockControl
+                .createNiceControl(FeatureSelectionHelper.class);
+        helper = (FeatureSelectionHelper) helperControl.getMock();
+        helperControl.expectAndDefaultReturn(helper.getFeatureStoreDeltaSize(),
+                0);
+
+        fsetControl = MockControl.createNiceControl(FeatureSet.class);
+        featureSet = (FeatureSet) fsetControl.getMock();
+
+        storeControl.expectAndReturn(store.getFeatureSet(), featureSet);
+        fsetControl.expectAndReturn(featureSet.getSize(), total);
+
+
+
+        storeControl.replay();
+        fsetControl.replay();
+        helperControl.replay();
+
+        selection = new DefaultFeatureReferenceSelection(store, helper);
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public void testSelect() throws Exception {
+        // Add a feature
+        selection.select(ref1);
+        assertTrue(selection.isSelected(ref1));
+        assertFalse(selection.isSelected(ref2));
+
+        selection.select(ref2);
+        assertTrue(selection.isSelected(ref2));
+    }
+
+    public void testSelectAll() throws Exception {
+        selection.selectAll();
+        assertTrue(selection.isSelected(ref1));
+        assertTrue(selection.isSelected(ref2));
+    }
+
+    public void testDeselect() throws Exception {
+        // Remove a feature
+        selection.select(ref1);
+        selection.select(ref2);
+        assertTrue(selection.isSelected(ref2));
+        selection.deselect(ref2);
+        assertFalse(selection.isSelected(ref2));
+        selection.deselect(ref1);
+        assertFalse(selection.isSelected(ref1));
+    }
+
+    public void testDeselectAll() throws Exception {
+        selection.select(ref1);
+        selection.select(ref2);
+        selection.deselectAll();
+        assertFalse(selection.isSelected(ref1));
+        assertFalse(selection.isSelected(ref2));
+    }
+
+    public void testReverse() throws Exception {
+        // Reverse selection
+        selection.select(ref1);
+        selection.reverse();
+        assertFalse(selection.isSelected(ref1));
+        assertTrue(selection.isSelected(ref2));
+    }
+
+    public void testGetSelectedCount() throws Exception {
+        // None selected
+        assertEquals(0, selection.getSelectedCount());
+        selection.select(ref1);
+        selection.select(ref2);
+        // Two selected
+        assertEquals(2, selection.getSelectedCount());
+        // Deselect one, so one left selected
+        selection.deselect(ref2);
+        assertEquals(1, selection.getSelectedCount());
+        // Reverse the selection, so all buy one selected
+        selection.reverse();
+        assertEquals(total - 1, selection.getSelectedCount());
+        // Deselect another one, so all but two selected
+        selection.deselect(ref2);
+        assertEquals(total - 2, selection.getSelectedCount());
+        // Deselect an already deselected one, nothing changes
+        selection.deselect(ref2);
+        assertEquals(total - 2, selection.getSelectedCount());
+    }
+
+    public void testGetSelectedValues() throws DataException {
+        selection.deselectAll();
+        selection.select(ref1);
+        selection.select(ref2);
+
+        boolean ref1Pending = true;
+        boolean ref2Pending = true;
+
+        for (Iterator references = selection.referenceIterator(); references
+                .hasNext();) {
+            FeatureReference reference = (FeatureReference) references.next();
+            if (reference.equals(ref1)) {
+                if (ref1Pending) {
+                    ref1Pending = false;
+                } else {
+                    fail("FeatureReference 1 was already obtained");
+                }
+            } else if (reference.equals(ref2)) {
+                if (ref2Pending) {
+                    ref2Pending = false;
+                } else {
+                    fail("FeatureReference 2 was already obtained");
+                }
+            } else {
+                fail("A reference not selected was obtained: " + reference);
+            }
+        }
+    }
+
+    public void testDispose() {
+        selection.select(ref1);
+        selection.select(ref2);
+        selection.dispose();
+        assertFalse(selection.isSelected(ref1));
+        assertFalse(selection.isSelected(ref2));
+    }
+
+    public void testAccept() throws BaseException {
+        // Create a Mopck Visitor and add expected usage
+        MockControl visitorControl = MockControl
+                .createNiceControl(Visitor.class);
+        Visitor visitor = (Visitor) visitorControl.getMock();
+
+        visitor.visit(ref1);
+        visitor.visit(ref2);
+        visitorControl.replay();
+
+        // Add selected references
+        selection.select(ref1);
+        selection.select(ref2);
+
+        // Use visitor
+        selection.accept(visitor);
+
+        // check correct visitor usage
+        visitorControl.verify();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelectionTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionTest.java	(revision 42196)
@@ -0,0 +1,204 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import org.easymock.MockControl;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+/**
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class DefaultFeatureSelectionTest extends AbstractLibraryAutoInitTestCase {
+    private FeatureSelection selection;
+    private MockControl refControl1;
+    private FeatureReference ref1;
+    private MockControl refControl2;
+    private FeatureReference ref2;
+    private MockControl fControl1;
+    private Feature feature1;
+    private MockControl fControl2;
+    private Feature feature2;
+    private MockControl storeControl;
+    private FeatureType featureType;
+    private MockControl fTypeControl;
+    private FeatureStore store;
+    private MockControl fsetControl;
+    private FeatureSet featureSet;
+    private MockControl helperControl;
+    private FeatureSelectionHelper helper;
+
+    private int total = 10;
+
+    protected void doSetUp() throws Exception { 
+        refControl1 = MockControl.createNiceControl(FeatureReference.class);
+        ref1 = (FeatureReference) refControl1.getMock();
+        refControl2 = MockControl.createNiceControl(FeatureReference.class);
+        ref2 = (FeatureReference) refControl2.getMock();
+
+        fControl1 = MockControl.createControl(Feature.class);
+        feature1 = (Feature) fControl1.getMock();
+        fControl2 = MockControl.createControl(Feature.class);
+        feature2 = (Feature) fControl2.getMock();
+
+        fTypeControl = MockControl.createNiceControl(FeatureType.class);
+        featureType = (FeatureType) fTypeControl.getMock();
+
+        fControl1.expectAndDefaultReturn(feature1.getType(), featureType);
+        fControl2.expectAndDefaultReturn(feature2.getType(), featureType);
+
+        storeControl = MockControl.createNiceControl(FeatureStore.class);
+        store = (FeatureStore) storeControl.getMock();
+        storeControl.expectAndReturn(store.getFeatureCount(), total);
+
+        helperControl = MockControl
+                .createNiceControl(FeatureSelectionHelper.class);
+        helper = (FeatureSelectionHelper) helperControl.getMock();
+        helperControl.expectAndDefaultReturn(helper.getFeatureStoreDeltaSize(),
+                0);
+
+        fsetControl = MockControl.createNiceControl(FeatureSet.class);
+        featureSet = (FeatureSet) fsetControl.getMock();
+
+        storeControl.expectAndReturn(store.getFeatureSet(), featureSet);
+        fsetControl.expectAndReturn(featureSet.getSize(), total);
+
+        storeControl.replay();
+        fsetControl.replay();
+        helperControl.replay();
+
+        selection = new DefaultFeatureSelection(store, helper);
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    /**
+     * Test method for
+     * {@link org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection#select(org.gvsig.fmap.dal.feature.Feature)}
+     * .
+     */
+    public void testSelectFeature() {
+        fControl1.expectAndReturn(feature1.getReference(), ref1, 2);
+        fControl2.expectAndReturn(feature2.getReference(), ref2, 3);
+        fControl1.replay();
+        fControl2.replay();
+
+        // Add a feature
+        selection.select(feature1);
+        assertTrue("Selected feature1 is not recognized as selected", selection
+                .isSelected(feature1));
+        assertFalse("Selected feature2 is recognized as selected", selection
+                .isSelected(feature2));
+
+        selection.select(feature2);
+        assertTrue(selection.isSelected(feature2));
+    }
+
+    /**
+     * Test method for
+     * {@link org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection#deselect(org.gvsig.fmap.dal.feature.Feature)}
+     * .
+     */
+    public void testDeselectFeature() {
+        fControl1.expectAndReturn(feature1.getReference(), ref1, 3);
+        fControl2.expectAndReturn(feature2.getReference(), ref2, 4);
+        fControl1.replay();
+        fControl2.replay();
+
+        // Remove a feature
+        selection.select(feature1);
+        selection.select(feature2);
+        assertTrue(selection.isSelected(feature2));
+        selection.deselect(feature2);
+        assertFalse(selection.isSelected(feature2));
+        selection.deselect(feature1);
+        assertFalse(selection.isSelected(feature1));
+    }
+
+    /**
+     * Test method for
+     * {@link org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection#getSize()}
+     * .
+     */
+    public void testGetSize() throws Exception {
+        fControl1.expectAndReturn(feature1.getReference(), ref1, 1);
+        fControl2.expectAndReturn(feature2.getReference(), ref2, 4);
+        fControl1.replay();
+        fControl2.replay();
+
+        // None selected
+        assertEquals(0, selection.getSize());
+        selection.select(feature1);
+        selection.select(feature2);
+        // Two selected
+        assertEquals(2, selection.getSize());
+        // Deselect one, so one left selected
+        selection.deselect(feature2);
+        assertEquals(1, selection.getSize());
+        // Reverse the selection, so all buy one selected
+        selection.reverse();
+        assertEquals(total - 1, selection.getSize());
+        // Deselect another one, so all but two selected
+        selection.deselect(feature2);
+        assertEquals(total - 2, selection.getSize());
+        // Deselect an already deselected one, nothing changes
+        selection.deselect(feature2);
+        assertEquals(total - 2, selection.getSize());
+    }
+
+    /**
+     * Test method for
+     * {@link org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection#isEmpty()}
+     * .
+     */
+    public void testIsEmpty() throws Exception {
+        fControl1.expectAndReturn(feature1.getReference(), ref1, 1);
+        fControl2.expectAndReturn(feature2.getReference(), ref2, 4);
+        fControl1.replay();
+        fControl2.replay();
+
+        // None selected
+        assertTrue(selection.isEmpty());
+
+        // One selected
+        selection.select(feature1);
+        assertFalse(selection.isEmpty());
+
+        // Deselect all
+        selection.deselectAll();
+        assertTrue(selection.isEmpty());
+
+        // Reverse
+        selection.reverse();
+        assertFalse(selection.isEmpty());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/JoinTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/JoinTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/JoinTransform.java	(revision 42196)
@@ -0,0 +1,231 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class JoinTransform extends AbstractFeatureStoreTransform {
+
+	/**
+	 * Store from which the join transform will get the additional attributes
+	 */
+	private FeatureStore store2;
+
+	/**
+	 * name of the key attr in store1 that will be used to match features in
+	 * store2
+	 */
+	private String keyAttr1;
+
+	/**
+	 * name of the key attr in store2 that will be used to match features in
+	 * store1
+	 */
+	private String keyAttr2;
+
+	/**
+	 * names of the attributes to join from store2 to store1
+	 */
+	private String[] attrs;
+
+	/**
+	 * Attribute names may change after transformation if they are repeated in
+	 * both stores. This map keeps correspondence between store2 original names
+	 * and their transformed counterparts.
+	 */
+	private Map targetNamesMap;
+
+	private FeatureType originalFeatureType;
+
+	/**
+	 * A default constructor
+	 */
+	public JoinTransform() {
+		targetNamesMap = new HashMap();
+	}
+
+	/**
+	 * Initializes all the necessary data for this transform
+	 *
+	 * @param store1
+	 *            store whose default feature type is the target of this
+	 *            transform
+	 *
+	 * @param store2
+	 *            store whose default feature type will provide the new
+	 *            attributes to join
+	 *
+	 * @param keyAttr1
+	 *            key attribute in store1 that matches keyAttr2 in store2
+	 *            (foreign key), used for joining both stores.
+	 *
+	 * @param keyAttr2
+	 *            key attribute in store2 that matches keyAttr1 in store2
+	 *            (foreign key), used for joining both stores.
+	 *
+	 * @param attrs
+	 *            names of the attributes in store2 that will be joined to
+	 *            store1.
+	 */
+	public void initialize(FeatureStore store1, FeatureStore store2,
+			String keyAttr1, String keyAttr2, String[] attrs)
+			throws DataException {
+
+		// Initialize needed data
+		this.setFeatureStore(store1);
+
+		this.store2 = store2;
+		this.keyAttr1 = keyAttr1;
+		this.keyAttr2 = keyAttr2;
+		this.attrs = attrs;
+		this.originalFeatureType = this.getFeatureStore()
+				.getDefaultFeatureType();
+
+		// calculate this transform resulting feature type
+		// by adding all specified attrs from store2 to store1's default
+		// feature type
+		EditableFeatureType type = this.getFeatureStore().getDefaultFeatureType().getEditable();
+
+		for (int i = 0; i < attrs.length; i++) {
+			String name = attrs[i];
+
+			// If an attribute already exists with the same name in store1's
+			// default feature type,
+			// calculate an alternate name and add it to our type
+			int j = 0;
+			while (type.getIndex(name) >= 0) {
+				name = attrs[i] + "_" + ++j;
+			}
+			type.add(name, store2.getDefaultFeatureType()
+					.getAttributeDescriptor(attrs[i]).getType());
+
+			// keep correspondence between original name and transformed name
+			this.targetNamesMap.put(attrs[i], name);
+		}
+
+		// assign calculated feature type as this transform's feature type
+		FeatureType[] types = new FeatureType[] { type.getNotEditableCopy() };
+		setFeatureTypes(Arrays.asList(types), types[0]);
+	}
+
+	/**
+	 *
+	 *
+	 * @param source
+	 *
+	 * @param target
+	 *
+	 * @throws DataException
+	 */
+	public void applyTransform(Feature source, EditableFeature target)
+			throws DataException {
+
+		// copy the data from store1 into the resulting feature
+		target.copyFrom(source);
+
+		// ask store2 for the specified attributes, filtering by the key
+		// attribute value
+		// from the source feature
+		Evaluator eval = DALLocator.getDataManager().createExpresion(
+				keyAttr2 + "=" + source.get(keyAttr1));
+		FeatureQuery query = this.getFeatureStore().createFeatureQuery();
+		query.setAttributeNames(attrs);
+		query.setFilter(eval);
+
+		FeatureSet set = null;
+		DisposableIterator it = null;
+
+		try {
+			set = store2.getFeatureSet(query);
+
+			// In this join implementation, we will take only the first matching
+			// feature found in store2
+			it = set.iterator();
+			if (it.hasNext()) {
+				Feature feat = (Feature) it.next();
+
+				// copy all attributes from joined feature to target
+				Iterator it2 = feat.getType().iterator();
+				while (it2.hasNext()) {
+					FeatureAttributeDescriptor attr =
+							(FeatureAttributeDescriptor) it2.next();
+					// find original attribute name
+					String targetName =
+							(String) this.targetNamesMap.get(attr.getName());
+					// copy its value to target feature attribute
+					target.set(targetName, feat.get(attr.getName()));
+				}
+			}
+		} finally {
+			DisposeUtils.dispose(set);
+			DisposeUtils.dispose(it);
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.feature.FeatureStoreTransform#getSourceFeatureTypeFrom
+	 * (org.gvsig.fmap.dal.feature.FeatureType)
+	 */
+	public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
+		return this.originalFeatureType;
+	}
+
+	public boolean isTransformsOriginalValues() {
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/feature/impl/JoinTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderTest.java	(revision 42196)
@@ -0,0 +1,371 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.fmap.dal.store.memory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MemoryStoreProviderTest extends AbstractLibraryAutoInitTestCase {
+	protected Logger logger = LoggerFactory.getLogger(getClass());;
+	protected static DataManager dataManager = null;
+	protected static GeometryManager geomManager = null;
+
+	protected static final String ID = "id";
+	protected static final String GEOM = "geom";
+	protected static final String IDSYM = "idsym";
+	protected static final String LABEL = "label";
+	protected static final String FEATUREID = "featureid";
+
+	protected void doSetUp() throws Exception {
+		dataManager = DALLocator.getDataManager();
+		geomManager = GeometryLocator.getGeometryManager();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#getDefaultDataStoreParameters()
+	 */
+	public DataStoreParameters getDefaultDataStoreParameters()
+	throws DataException {
+		MemoryStoreParameters memoryParameters = null;
+
+		memoryParameters = (MemoryStoreParameters) dataManager
+		.createStoreParameters(MemoryStoreProvider.NAME);
+		return memoryParameters;
+	}
+
+	public void testInitializeStore() throws Exception {
+		FeatureStore store = (FeatureStore) dataManager.createStore(this
+				.getDefaultDataStoreParameters());
+
+		assertNotNull(store.getMetadataID());
+		assertNotNull(store.getName());
+		assertEquals(store.getEnvelope(), store.getDynValue("Envelope"));
+		assertTrue(store.getFeatureCount() == 0);
+		if (store.isLocksSupported()) {
+			assertNotNull(store.getLocks());
+		} else {
+			assertNull(store.getLocks());
+		}
+		store.dispose();
+	}
+
+	public void testAddFeatureType() throws DataException, ValidateDataParametersException{
+		FeatureStore store = createEditableFeatureStore();
+		FeatureAttributeDescriptor attributeDescriptor = store.getDefaultFeatureType().getAttributeDescriptor(ID);
+		assertNotNull(attributeDescriptor);
+		assertEquals(attributeDescriptor.getType(), DataTypes.OBJECT);
+
+		store.dispose();
+	}
+
+	protected FeatureStore createEditableFeatureStore() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException{
+		FeatureStore store = (FeatureStore) dataManager.createStore(this
+				.getDefaultDataStoreParameters());
+
+		store.edit();
+
+		EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
+
+		EditableFeatureAttributeDescriptor idDescriptor = editableFeatureType.add(ID, DataTypes.OBJECT).setObjectClass(Object.class);
+		idDescriptor.setIsPrimaryKey(true);
+		EditableFeatureAttributeDescriptor geometryDescriptor = 
+			editableFeatureType.add(GEOM, DataTypes.GEOMETRY);
+		geometryDescriptor.setGeometryType(TYPES.GEOMETRY);
+		editableFeatureType.setDefaultGeometryAttributeName(GEOM);
+
+		editableFeatureType.add(IDSYM, DataTypes.OBJECT).setObjectClass(Object.class);
+		editableFeatureType.add(LABEL, DataTypes.STRING);
+		EditableFeatureAttributeDescriptor featureIdDescriptor = 
+			editableFeatureType.add(FEATUREID, DataTypes.OBJECT).setObjectClass(Object.class);		
+		
+		//editableFeatureType.setHasOID(true);
+
+		store.update(editableFeatureType);	
+		store.finishEditing();
+		return store;
+	}
+
+	public void testAddFeature() throws DataException, ValidateDataParametersException, CreateGeometryException{
+		FeatureStore store = createEditableFeatureStore();
+
+		store.edit();
+
+		EditableFeature feature = store.createNewFeature().getEditable();
+		feature.set(ID, "0");
+		feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
+
+		store.insert(feature);
+
+		Envelope envelope = store.getEnvelope();
+		assertNotNull(envelope);
+
+		store.finishEditing();
+
+		FeatureSet featureSet = store.getFeatureSet();
+		DisposableIterator it = featureSet.fastIterator();
+		while (it.hasNext()){
+			Feature feature2 = (Feature)it.next();
+			assertEquals(feature.getType().get(0), feature2.getType().get(0));
+			assertEquals(feature.get(0), feature2.get(0));
+
+			assertEquals(feature.getType().get(1), feature2.getType().get(1));
+			assertEquals(feature.get(1), feature2.get(1));
+		}	
+
+		envelope = store.getEnvelope();
+		assertNotNull(envelope);
+
+		store.dispose();
+	}
+
+	public void testAddFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
+		FeatureStore store = createEditableFeatureStore();
+
+		store.edit();
+
+		EditableFeature feature = store.createNewFeature().getEditable();
+		feature.set(ID, "0");
+		feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
+
+		// One
+		store.insert(feature);
+
+		EditableFeature feature2 = store.createNewFeature().getEditable();
+		feature2.set(ID, "1");
+		Curve curve =  geomManager.createCurve(Geometry.SUBTYPES.GEOM2D);
+		curve.addVertex(0,0);
+		curve.addVertex(1,0);
+		curve.addVertex(1,1);
+		curve.addVertex(0,1);
+		curve.addVertex(0,0);
+		feature2.set(GEOM, curve);
+
+		// Two
+		store.insert(feature2);
+
+		EditableFeature feature3 = store.createNewFeature().getEditable();
+		feature3.set(ID, "2");
+		Surface surface =  geomManager.createSurface(Geometry.SUBTYPES.GEOM2D);
+		surface.addVertex(0,0);
+		surface.addVertex(1,0);
+		surface.addVertex(1,1);
+		surface.addVertex(0,1);
+		surface.addVertex(0,0);
+		feature3.set(GEOM, surface);
+
+		//Three
+		store.insert(feature3);
+
+		Envelope envelope = store.getEnvelope();
+		assertNotNull(envelope);
+
+		store.finishEditing();
+
+		FeatureSet featureSet = store.getFeatureSet();
+		DisposableIterator it = featureSet.fastIterator();
+
+		//Count the features in the set
+		int i=0;
+		while (it.hasNext()){
+			Feature feat = (Feature)it.next();
+			i++;
+		}	
+
+		//Are all three inside?
+		assertEquals(3,i);
+
+		envelope = store.getEnvelope();
+		assertNotNull(envelope);
+
+		// Editing other time
+		store.edit();
+		EditableFeature feature4 = store.createNewFeature().getEditable();
+		feature4.set(ID, "4");
+		surface =  geomManager.createSurface(Geometry.SUBTYPES.GEOM2D);
+		surface.addVertex(0,0);
+		surface.addVertex(1,0);
+		surface.addVertex(1,1);
+		surface.addVertex(0,1);
+		surface.addVertex(0,0);
+		feature4.set(GEOM, surface);
+
+		//four
+		store.insert(feature4);
+
+		store.finishEditing();
+		
+		//Are all four inside?
+		assertEquals(4,store.getFeatureCount());
+
+		store.dispose();
+	}
+
+	public void testRemoveFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
+		FeatureStore store = createEditableFeatureStore();
+
+		store.edit();
+
+		EditableFeature feature = store.createNewFeature().getEditable();
+		feature.set(ID, "0");
+		feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
+
+		// One
+		store.insert(feature);
+
+		EditableFeature feature2 = store.createNewFeature().getEditable();
+		feature2.set(ID, "1");
+		Curve curve =  geomManager.createCurve(Geometry.SUBTYPES.GEOM2D);
+		curve.addVertex(0,0);
+		curve.addVertex(1,0);
+		curve.addVertex(1,1);
+		curve.addVertex(0,1);
+		curve.addVertex(0,0);
+		feature2.set(GEOM, curve);
+
+		// Two
+		store.insert(feature2);
+
+		EditableFeature feature3 = store.createNewFeature().getEditable();
+		feature3.set(ID, "2");
+		Surface surface =  geomManager.createSurface(Geometry.SUBTYPES.GEOM2D);
+		surface.addVertex(0,0);
+		surface.addVertex(1,0);
+		surface.addVertex(1,1);
+		surface.addVertex(0,1);
+		surface.addVertex(0,0);
+		feature3.set(GEOM, surface);
+
+		//Three
+		store.insert(feature3);
+
+		Envelope envelope = store.getEnvelope();
+		assertNotNull(envelope);
+
+		store.finishEditing();
+
+		// Editing other time and remove the second one
+		store.edit();
+			
+
+		FeatureSet featureSet = store.getFeatureSet();
+		DisposableIterator it = featureSet.fastIterator();
+
+		//Count the features in the set
+		int i=1;
+		Feature addedFeature2 = null;
+		while (it.hasNext()){
+			Feature feat = (Feature)it.next();
+			if (i == 2){
+				addedFeature2 = feat;
+			}			
+			i++;
+		}	
+		
+		store.delete(addedFeature2);
+
+		store.finishEditing();
+		//Are two inside?
+		assertEquals(2,store.getFeatureCount());
+
+		store.dispose();
+	}
+	
+	public void testUpdateFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
+		FeatureStore store = createEditableFeatureStore();
+
+		store.edit();
+
+		EditableFeature feature = store.createNewFeature().getEditable();
+		feature.set(ID, "0");
+		feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
+		feature.set(LABEL, "Hi");		
+		store.insert(feature);
+		store.finishEditing();
+
+		// Editing other time and update 
+		store.edit();
+			
+		FeatureSet featureSet = store.getFeatureSet();
+		DisposableIterator it = featureSet.fastIterator();
+		
+		EditableFeature editableFeature = null;
+		while (it.hasNext()){			
+			Feature feat = (Feature)it.next();
+			editableFeature = feat.getEditable();
+			editableFeature.set(LABEL, "Bye");			
+		}
+		
+		store.update(editableFeature);
+		
+		store.finishEditing();
+		
+		//Check the value
+		featureSet = store.getFeatureSet();
+		it = featureSet.fastIterator();
+
+		while (it.hasNext()){
+			Feature feat = (Feature)it.next();
+			assertEquals("Bye", feat.get(LABEL));
+		}	
+		
+		store.dispose();
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeatureSetSizeableDelegate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeatureSetSizeableDelegate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeatureSetSizeableDelegate.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.paging.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.tools.paging.PagingCalculator.Sizeable;
+
+/**
+ * @author 2010- C�sar Ordi�ana - gvSIG team
+ */
+public class FeatureSetSizeableDelegate implements Sizeable {
+
+	private static final Logger LOG =
+			LoggerFactory.getLogger(FeatureSetSizeableDelegate.class);
+
+	private final FeatureSet set;
+
+	public FeatureSetSizeableDelegate(FeatureSet set) {
+		this.set = set;
+	}
+
+	public long getSize() {
+		try {
+			return set.getSize();
+		} catch (DataException e) {
+			LOG.error("Error getting the size of the FeatureSet: " + set, e);
+			return 0l;
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeatureSetSizeableDelegate.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeaturePagingHelperImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeaturePagingHelperImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeaturePagingHelperImpl.java	(revision 42196)
@@ -0,0 +1,695 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.paging.impl;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.impl.featureset.DynObjectFeatureFacade;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.impl.DefaultDynObjectPagingHelper;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Helper class to access the values of a FeatureCollection by position. Handles
+ * pagination automatically to avoid filling the memory in case of big
+ * collections.
+ *
+ * TODO: evaluate if its more convenient to read values in the background when
+ * the returned value is near the end of the page, instead of loading a page on
+ * demand.
+ *
+ * @author gvSIG Team
+ */
+public class FeaturePagingHelperImpl extends DefaultDynObjectPagingHelper
+    implements FeaturePagingHelper {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(FeaturePagingHelperImpl.class);
+
+    private FeatureQuery query;
+
+    private FeatureStore featureStore;
+
+    /** If the selected Features must be returned as the first ones. **/
+    private boolean selectionUp = false;
+
+    private FeatureSet featSet = null;
+    private FeatureSelection initialSelection = null;
+
+    private Feature[] features = null;
+
+    private boolean initialization_completed = false;
+    /**
+     * Constructs a FeaturePagingHelperImpl from data of a FeatureStore.
+     *
+     * @param featureStore
+     *            to extract data from
+     * @throws DataException
+     *             if there is an error initializing the helper
+     */
+    public FeaturePagingHelperImpl(FeatureStore featureStore)
+        throws BaseException {
+        this(featureStore, DEFAULT_PAGE_SIZE);
+    }
+
+    /**
+     * Constructs a FeaturePagingHelperImpl from data of a FeatureStore.
+     *
+     * @param featureStore
+     *            to extract data from
+     * @param pageSize
+     *            the number of elements per page data
+     * @throws DataException
+     *             if there is an error initializing the helper
+     */
+    public FeaturePagingHelperImpl(FeatureStore featureStore, int pageSize)
+        throws BaseException {
+        this(featureStore, null, pageSize);
+    }
+
+    /**
+     * Constructs a FeaturePagingHelperImpl from data of a FeatureStore.
+     *
+     * @param featureStore
+     *            to extract data from
+     * @throws DataException
+     *             if there is an error initializing the helper
+     */
+    public FeaturePagingHelperImpl(FeatureStore featureStore,
+        FeatureQuery featureQuery) throws BaseException {
+        this(featureStore, featureQuery, DEFAULT_PAGE_SIZE);
+    }
+
+    /**
+     * Constructs a FeaturePagingHelperImpl from data of a FeatureStore.
+     *
+     * @param featureSet
+     *            to extract data from
+     * @param pageSize
+     *            the number of elements per page data
+     * @throws DataException
+     *             if there is an error initializing the helper
+     */
+    public FeaturePagingHelperImpl(FeatureStore featureStore,
+        FeatureQuery featureQuery, int pageSize) throws BaseException {
+        super();
+        FeatureQuery query = featureQuery;
+        if (featureQuery == null) {
+            query = featureStore.createFeatureQuery();
+            query.setFeatureType(featureStore.getDefaultFeatureType());
+        }
+
+        this.featureStore = featureStore;
+        this.query = query;
+        this.query.setPageSize(pageSize);
+
+        setDefaultCalculator(new Sizeable() {
+            public long getSize() {
+            	FeatureSet featureSet = getFeatureSet(false);
+                try {
+					return featureSet.getSize();
+                } catch (BaseException e) {
+                    LOG.error("Error getting the size of the FeatureSet: "
+                        + featureSet, e);
+                    return 0l;
+                }
+            }
+        }, pageSize);
+
+
+        if (LOG.isDebugEnabled()) {
+
+            LOG.debug("FeaturePagingHelperImpl created with {} pages, "
+                + "and a page size of {}", new Long(getCalculator()
+                .getNumPages()), new Integer(pageSize));
+        }
+        this.initialization_completed = true;
+    }
+
+    /**
+     * @return the selectionUp status
+     */
+    public boolean isSelectionUp() {
+        return selectionUp;
+    }
+
+    public void setSelectionUp(boolean selectionUp) {
+        this.selectionUp = selectionUp;
+        try {
+            FeatureSelection currentSelection = getFeatureStore().getFeatureSelection();
+            if (selectionUp && !currentSelection.isEmpty()) {
+                initialSelection =(FeatureSelection) currentSelection.clone();
+                setCalculator(new OneSubsetOneSetPagingCalculator(
+                    new FeatureSetSizeableDelegate(initialSelection),
+                    new FeatureSetSizeableDelegate(getFeatureSet(false)),
+                    getMaxPageSize()));
+            } else {
+                if (initialSelection != null) {
+                    initialSelection.dispose();
+                    initialSelection = null;
+                }
+                setDefaultCalculator(new FeatureSetSizeableDelegate(
+                    getFeatureSet(false)), getMaxPageSize());
+            }
+        } catch (BaseException e) {
+            LOG.error("Error setting the selection up setting to: "
+                + selectionUp, e);
+        } catch (CloneNotSupportedException e) {
+            LOG.error("Error cloning the selection "
+                + "while setting the selection up", e);
+        }
+    }
+
+    public Feature getFeatureAt(long index) throws BaseException {
+        // Check if we have currently loaded the viewed page data,
+        // or we need to load a new one
+        long pageForIndex = (long) Math.floor(index / getMaxPageSize());
+
+        if (pageForIndex != getCurrentPage()) {
+            setCurrentPage(pageForIndex);
+        }
+
+        long positionForIndex = index - (getCurrentPage() * getMaxPageSize());
+
+        if (positionForIndex >= getCurrentPageFeatures().length) {
+            throw new FeatureIndexException(
+                new IndexOutOfBoundsException("positionForIndex too big: "
+                    + positionForIndex));
+        } else {
+            Feature feature = getCurrentPageFeatures()[(int) positionForIndex];
+            return feature;
+        }
+
+    }
+
+    public Feature[] getCurrentPageFeatures() {
+        if( this.features==null ) {
+            try {
+                this.loadCurrentPageData();
+            } catch (BaseException ex) {
+                // Do nothing
+            }
+            if( this.features == null ) {
+                String msg = "Can't retrieve the features from current page.";
+                LOG.warn(msg);
+                throw new RuntimeException(msg);
+            }
+        }
+        return features;
+    }
+
+    /**
+     * Gets the feature set.
+     * The boolean tells whether we must create the featureset
+     * again (for example perhaps we need it after a feature
+     * has been added/removed)
+     */
+    private FeatureSet getFeatureSet(boolean reset) {
+
+        if (featSet == null || reset) {
+
+            if (featSet != null) {
+                try {
+                    featSet.dispose();
+                } catch (Exception ex) {
+                    LOG.info("Error while disposing featset.", ex);
+                }
+            }
+
+            try {
+                FeatureStore featureStore = getFeatureStore();
+                synchronized (featureStore) {
+                    featSet = featureStore.getFeatureSet(getFeatureQuery());
+                }
+            } catch (DataException e) {
+                throw new RuntimeException("Error getting a feature set with the query " + getFeatureQuery());
+            }
+        }
+        return featSet;
+    }
+
+    public DynObjectSet getDynObjectSet() {
+    	return getFeatureSet(false).getDynObjectSet();
+    }
+
+    public void reloadCurrentPage() throws BaseException {
+
+        boolean sel_up = this.isSelectionUp();
+
+        setSelectionUp(false);
+        if (getCalculator().getCurrentPage() > -1) {
+            loadCurrentPageData();
+        }
+
+        if (sel_up) {
+            setSelectionUp(true);
+        }
+    }
+
+    public void reload() throws BaseException {
+
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+
+        setDefaultCalculator(new Sizeable() {
+            public long getSize() {
+            	FeatureSet featureSet = getFeatureSet(false);
+                try {
+					return featureSet.getSize();
+                } catch (BaseException e) {
+                    LOG.error("Error getting the size of the FeatureSet: "
+                        + featureSet, e);
+                    return 0l;
+                }
+            }
+        }, getCalculator().getMaxPageSize());
+        reloadCurrentPage();
+    }
+
+    public FeatureStore getFeatureStore() {
+        return featureStore;
+    }
+
+    public FeatureQuery getFeatureQuery() {
+        return query;
+    }
+
+    /**
+     * Loads all the Features of the current page.
+     */
+    protected void loadCurrentPageData() throws BaseException {
+        if( !initialization_completed ) {
+            return;
+        }
+        final int currentPageSize = getCalculator().getCurrentPageSize();
+        final Feature[] values = new Feature[currentPageSize];
+
+        long t1 = 0;
+        if (LOG.isTraceEnabled()) {
+            t1 = System.currentTimeMillis();
+        }
+
+        if (selectionUp) {
+            loadCurrentPageDataWithSelectionUp(values);
+        } else {
+            loadCurrentPageDataNoSelection(values);
+        }
+
+        if (LOG.isTraceEnabled()) {
+            long t2 = System.currentTimeMillis();
+            LOG.trace("Time to load {} features: {} ms", new Integer(
+                currentPageSize), new Long(t2 - t1));
+        }
+
+        this.features = values;
+    }
+
+    private void loadCurrentPageDataWithSelectionUp(final Feature[] values)
+            throws BaseException {
+        FeatureSelection selection = initialSelection;
+        if (selection == null) {
+            loadCurrentPageDataNoSelection(values);
+        } else {
+            FeatureSet set = getFeatureSet(false);
+            try {
+                OneSubsetOneSetPagingCalculator twoSetsCalculator = null;
+                if (getCalculator() instanceof OneSubsetOneSetPagingCalculator) {
+                    twoSetsCalculator
+                            = (OneSubsetOneSetPagingCalculator) getCalculator();
+                } else {
+                    twoSetsCalculator
+                            = new OneSubsetOneSetPagingCalculator(
+                                    new FeatureSetSizeableDelegate(selection),
+                                    new FeatureSetSizeableDelegate(set),
+                                    getMaxPageSize(), getCalculator().getCurrentPage());
+                    setCalculator(twoSetsCalculator);
+                }
+
+	        // First load values from the selection, if the current page has
+                // elements from it
+                if (twoSetsCalculator.hasCurrentPageAnyValuesInFirstSet()) {
+                    loadDataFromFeatureSet(values, 0, selection,
+                            twoSetsCalculator.getFirstSetInitialIndex(),
+                            twoSetsCalculator.getFirstSetHowMany(), null);
+                }
+	        // Next, load values from the FeatureSet if the current page has values
+                // from it
+                if (twoSetsCalculator.hasCurrentPageAnyValuesInSecondSet()) {
+                    loadDataFromFeatureSet(
+                            values,
+                            // The cast will work as that size will be <= maxpagesize,
+                            // which is an int
+                            (int) twoSetsCalculator.getFirstSetHowMany(), set,
+                            twoSetsCalculator.getSecondSetInitialIndex(),
+                            twoSetsCalculator.getSecondSetHowMany(), selection);
+                }
+            } finally {
+                /*
+                 * This is the feature set
+                 * we dont want to lose it
+                 */
+                // set.dispose();
+            }
+        }
+    }
+
+    private void loadCurrentPageDataNoSelection(final Feature[] values)
+        throws BaseException {
+
+        long firstPosition = getCalculator().getInitialIndex();
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Loading {} Features starting at position {}",
+                new Integer(getCalculator().getCurrentPageSize()), new Long(
+                    firstPosition));
+        }
+
+        FeatureSet featureSet = getFeatureSet(false);
+        try {
+        	loadDataFromFeatureSet(values, 0, featureSet, firstPosition,
+        			getCalculator().getCurrentPageSize(), null);
+        } catch(DataException ex) {
+            throw ex;
+            // } finally {
+        	// featureSet.dispose();
+        }
+
+    }
+
+    private void loadDataFromFeatureSet(final Feature[] values,
+        final int valuesPosition, FeatureSet set, long initialIndex,
+        final long howMany, final FeatureSelection selectedFeaturesToSkip)
+        throws DataException {
+
+        try {
+            set.accept(new Visitor() {
+
+                private int i = valuesPosition;
+
+                public void visit(Object obj) throws VisitCanceledException,
+                    BaseException {
+                    if (i >= valuesPosition + howMany) {
+                        throw new VisitCanceledException();
+                    }
+                    Feature current = (Feature) obj;
+                    // Add the current Feature only if we don't skip selected
+                    // features or the feature is not selected
+                    if (selectedFeaturesToSkip == null
+                        || !selectedFeaturesToSkip.isSelected(current)) {
+                        try {
+                            values[i] = current.getCopy();
+                            i++;
+                        } catch(Exception ex) {
+                            // Aqui no deberia petar, pero...
+                            // me he encontrado un caso que tenia una referencia a
+                            // una feature seleccionada que ya no existia. No se como
+                            // habia pasado, se habia quedado de antes guardada en el
+                            // proyecto pero la feature ya no existia, y eso hacia que
+                            // petase al intentar leer de disco la feature a partir
+                            // de una referencia no valida.
+                        }
+                    }
+                }
+            }, initialIndex);
+        } catch (BaseException e) {
+            if (e instanceof DataException) {
+                throw ((DataException) e);
+            } else {
+                LOG.error("Error loading the data starting at position {}",
+                    new Long(initialIndex), e);
+            }
+        }
+    }
+
+    public void delete(Feature feature) throws BaseException {
+        featureStore.delete(feature);
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+        reloadCurrentPage();
+    }
+
+    public void insert(EditableFeature feature) throws BaseException {
+    	featureStore.insert(feature);
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+        reloadCurrentPage();
+    }
+
+    public void update(EditableFeature feature) throws BaseException {
+    	featureStore.update(feature);
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+        reloadCurrentPage();
+    }
+
+    public FeatureType getFeatureType() {
+
+        FeatureType ft = null;
+
+        try {
+            ft = featureStore.getDefaultFeatureType();
+        } catch (DataException e) {
+            LOG.error("Error while getting feature type: " +
+                e.getMessage(), e);
+        }
+        return ft;
+
+        /*
+         *
+        FeatureSet featureSet = getFeatureSet();
+        try {
+            return featureSet.getDefaultFeatureType();
+        } finally {
+            featureSet.dispose();
+        }
+        */
+
+
+    }
+
+    protected void doDispose() throws BaseException {
+        initialSelection.dispose();
+        if (featSet != null) {
+            try {
+                featSet.dispose();
+            } catch (Exception ex) {
+                LOG.info("Error while disposing featset.", ex);
+            }
+        }
+    }
+
+    public DynObject[] getCurrentPageDynObjects() {
+        Feature[] features = getCurrentPageFeatures();
+        DynObject[] dynobjects = new DynObject[features.length];
+        for (int i = 0; i < dynobjects.length; i++) {
+            dynobjects[i] = new DynObjectFeatureFacade(features[i]);
+        }
+        return dynobjects;
+    }
+
+    public DynObject getDynObjectAt(long index) throws BaseException {
+        return new DynObjectFeatureFacade(getFeatureAt(index));
+    }
+
+    public List asList() {
+        return new FeaturePagingHelperList();
+    }
+
+    public List asListOfDynObjects() {
+        return new DynObjectPagingHelperList();
+    }
+
+    private class FeaturePagingHelperList extends PagingHelperList {
+        public Object get(int i) {
+            try {
+                return getFeatureAt(i);
+            } catch (BaseException ex) {
+                throw  new RuntimeException(ex);
+            }
+        }
+    }
+
+    private class DynObjectPagingHelperList extends PagingHelperList {
+        public Object get(int i) {
+            try {
+                return getDynObjectAt(i);
+            } catch (BaseException ex) {
+                throw  new RuntimeException(ex);
+            }
+        }
+    }
+
+    private abstract class PagingHelperList implements List {
+
+        public int size() {
+            try {
+                return (int) getFeatureSet(false).getSize();
+            } catch (DataException ex) {
+                throw  new RuntimeException(ex);
+            }
+        }
+
+        public boolean isEmpty() {
+            try {
+                return getFeatureSet(false).isEmpty();
+            } catch (DataException ex) {
+                throw  new RuntimeException(ex);
+            } catch (ConcurrentDataModificationException ex) {
+                LOG.warn(
+                    "Error to asking about the emptiness of the store. Retrying reloading data.",
+                    ex);
+                try {
+                    reload();
+                } catch (BaseException e) {
+                    LOG.warn("Error reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+                try {
+                    return getFeatureSet(false).isEmpty();
+                } catch (DataException e) {
+                    LOG.warn(
+                        "Error to asking about the emptiness of the store after reloading data.",
+                        e);
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+
+        public Iterator iterator() {
+            try {
+                return getFeatureSet(false).fastIterator();
+            } catch (DataException ex) {
+                throw  new RuntimeException(ex);
+            }
+        }
+
+        public boolean contains(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public Object[] toArray() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public Object[] toArray(Object[] ts) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean add(Object e) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean remove(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean containsAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean addAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean addAll(int i, Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean removeAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean retainAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public void clear() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public Object set(int i, Object e) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public void add(int i, Object e) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public Object remove(int i) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public int indexOf(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public int lastIndexOf(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public ListIterator listIterator() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public ListIterator listIterator(int i) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public List subList(int i, int i1) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/FeaturePagingHelperImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculator.java	(revision 42196)
@@ -0,0 +1,181 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.paging.impl;
+
+import org.gvsig.tools.paging.DefaultPagingCalculator;
+
+/**
+ * Performs the calculations needed to be able to do pagination with two Sets of
+ * data which must be viewed as a single set of data. The first set is supposed
+ * to be a subset of the second one, so the size of the first set must be
+ * subtracted from the second one.
+ * 
+ * @author gvSIG team
+ */
+public class OneSubsetOneSetPagingCalculator extends DefaultPagingCalculator {
+
+    private final Sizeable firstSet;
+    private final Sizeable secondSet;
+
+    /**
+     * @see AbstractPagingCalculator#AbstractPagingCalculator(int).
+     * @param firstSet
+     *            the first set of elements to calculate pagination for
+     * @param secondSet
+     *            the second set of elements to calculate pagination for
+     */
+    public OneSubsetOneSetPagingCalculator(Sizeable firstSet,
+        Sizeable secondSet, int maxPageSize) {
+        super(firstSet, maxPageSize);
+        this.firstSet = firstSet;
+        this.secondSet = secondSet;
+    }
+
+    /**
+     * @see AbstractPagingCalculator#AbstractPagingCalculator(int, long).
+     * @param firstSet
+     *            the first set of elements to calculate pagination for
+     * @param secondSet
+     *            the second set of elements to calculate pagination for
+     */
+    public OneSubsetOneSetPagingCalculator(Sizeable firstSet,
+        Sizeable secondSet, int maxPageSize, long currentPage) {
+        super(firstSet, maxPageSize, currentPage);
+        this.firstSet = firstSet;
+        this.secondSet = secondSet;
+    }
+
+    public long getTotalSize() {
+        return secondSet.getSize();
+    }
+
+    /**
+     * Returns the size of the first set.
+     * 
+     * @return the first set size
+     */
+    public long getFirstSetSize() {
+        return firstSet.getSize();
+    }
+
+    /**
+     * Returns the size of the second set.
+     * 
+     * @return the second set size
+     */
+    public long getSecondSetSize() {
+        return secondSet.getSize() - getFirstSetSize();
+    }
+
+    /**
+     * Returns the index of the first element in the page which is available
+     * into the first set, if the current page has elements on it.
+     * 
+     * @return the index of the first element into the first set
+     */
+    public long getFirstSetInitialIndex() {
+        if (hasCurrentPageAnyValuesInFirstSet()) {
+            return calculateFirstSetInitialIndex();
+        } else {
+            return -1;
+        }
+    }
+
+    private long calculateFirstSetInitialIndex() {
+        return getCurrentPage() * getMaxPageSize();
+    }
+
+    /**
+     * Returns the index of the first element in the page which is available
+     * into the second set, if the current page has elements on it.
+     * 
+     * @return the index of the first element into the second set
+     */
+    public long getSecondSetInitialIndex() {
+        if (hasCurrentPageAnyValuesInSecondSet()) {
+            if (hasCurrentPageAnyValuesInFirstSet()) {
+                return 0;
+            } else {
+                return getInitialIndex() - getFirstSetSize();
+            }
+        } else {
+            return -1;
+        }
+    }
+
+    /**
+     * Returns the number of elements of the current page into the first set.
+     * 
+     * @return the number of elements of the current page into the first set
+     */
+    public long getFirstSetHowMany() {
+        if (hasCurrentPageAnyValuesInFirstSet()) {
+            return (hasCurrentPageAllValuesInFirstSet()) ? getCurrentPageSize()
+                : (getFirstSetSize() - calculateFirstSetInitialIndex());
+        } else {
+            return 0;
+        }
+    }
+
+    /**
+     * Returns the number of elements of the current page into the second set.
+     * 
+     * @return the number of elements of the current page into the second set
+     */
+    public long getSecondSetHowMany() {
+        if (hasCurrentPageAnyValuesInSecondSet()) {
+            return getLastIndex() - getFirstSetSize()
+                - getSecondSetInitialIndex() + 1;
+        } else {
+            return 0;
+        }
+    }
+
+    /**
+     * Returns if the current page has all its values into the first set.
+     * 
+     * @return if the current page has all its values into the first set
+     */
+    protected boolean hasCurrentPageAllValuesInFirstSet() {
+        return calculateFirstSetInitialIndex() + getCurrentPageSize() <= getFirstSetSize();
+    }
+
+    /**
+     * Returns if the current page has any of its values into the first set.
+     * 
+     * @return if the current page has any of its values into the first set
+     */
+    public boolean hasCurrentPageAnyValuesInFirstSet() {
+        return calculateFirstSetInitialIndex() < getFirstSetSize();
+    }
+
+    /**
+     * Returns if the current page has any of its values into the second set.
+     * 
+     * @return if the current page has any of its values into the second set
+     */
+    public boolean hasCurrentPageAnyValuesInSecondSet() {
+        return getLastIndex() >= getFirstSetSize();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/paging/impl/OneSubsetOneSetPagingCalculator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java	(revision 42196)
@@ -0,0 +1,2176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloneException;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.CreateException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureCache;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureLocks;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.exception.AlreadyEditingException;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.dal.feature.exception.CreateFeatureException;
+import org.gvsig.fmap.dal.feature.exception.DataExportException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.exception.FinishEditingException;
+import org.gvsig.fmap.dal.feature.exception.GetFeatureTypeException;
+import org.gvsig.fmap.dal.feature.exception.IllegalFeatureException;
+import org.gvsig.fmap.dal.feature.exception.IllegalFeatureTypeException;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.dal.feature.exception.NoNewFeatureInsertException;
+import org.gvsig.fmap.dal.feature.exception.NullFeatureTypeException;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.exception.PersistenceCantFindDefaultFeatureTypeException;
+import org.gvsig.fmap.dal.feature.exception.PersistenceCantFindFeatureTypeException;
+import org.gvsig.fmap.dal.feature.exception.PersistenceStoreAlreadyLoadedException;
+import org.gvsig.fmap.dal.feature.exception.SelectionNotAllowedException;
+import org.gvsig.fmap.dal.feature.exception.StoreCancelEditingException;
+import org.gvsig.fmap.dal.feature.exception.StoreDeleteEditableFeatureException;
+import org.gvsig.fmap.dal.feature.exception.StoreDeleteFeatureException;
+import org.gvsig.fmap.dal.feature.exception.StoreEditException;
+import org.gvsig.fmap.dal.feature.exception.StoreInsertFeatureException;
+import org.gvsig.fmap.dal.feature.exception.StoreUpdateFeatureException;
+import org.gvsig.fmap.dal.feature.exception.StoreUpdateFeatureTypeException;
+import org.gvsig.fmap.dal.feature.exception.ValidateFeaturesException;
+import org.gvsig.fmap.dal.feature.exception.WriteNotAllowedException;
+import org.gvsig.fmap.dal.feature.impl.expansionadapter.MemoryExpansionAdapter;
+import org.gvsig.fmap.dal.feature.impl.featureset.DefaultFeatureSet;
+import org.gvsig.fmap.dal.feature.impl.featureset.DynObjectFeatureFacade;
+import org.gvsig.fmap.dal.feature.impl.undo.DefaultFeatureCommandsStack;
+import org.gvsig.fmap.dal.feature.impl.undo.FeatureCommandsStack;
+import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProvider;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.NotYetImplemented;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.undo.command.Command;
+import org.gvsig.tools.visitor.Visitor;
+
+public class DefaultFeatureStore extends AbstractDisposable implements
+    DataStoreInitializer, FeatureStoreProviderServices, FeatureStore, Observer {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultFeatureStore.class);
+
+    private static final String PERSISTENCE_DEFINITION_NAME = "FeatureStore";
+
+    private DataStoreParameters parameters = null;
+    private FeatureSelection selection;
+    private FeatureLocks locks;
+
+    private DelegateWeakReferencingObservable delegateObservable =
+        new DelegateWeakReferencingObservable(this);
+
+    private FeatureCommandsStack commands;
+    private FeatureTypeManager featureTypeManager;
+    private FeatureManager featureManager;
+    private SpatialManager spatialManager;
+
+    private FeatureType defaultFeatureType = null;
+    private List featureTypes = new ArrayList();
+
+    private int mode = MODE_QUERY;
+    private long versionOfUpdate = 0;
+    private boolean hasStrongChanges = true;
+    private boolean hasInserts = true;
+
+    private DefaultDataManager dataManager = null;
+
+    private FeatureStoreProvider provider = null;
+
+    private DefaultFeatureIndexes indexes;
+
+    private DefaultFeatureStoreTransforms transforms;
+
+    DelegatedDynObject metadata;
+
+    private Set metadataChildren;
+
+    private Long featureCount = null;
+
+    private long temporalOid = 0;
+
+    private FeatureCacheProvider cache;
+
+    /*
+     * TODO:
+     *
+     * - Comprobar que solo se pueden a�adir reglas de validacion sobre un
+     * EditableFeatureType. - Comprobar que solo se puede hacer un update con un
+     * featureType al que se le han cambiado las reglas de validacion cuando
+     * hasStrongChanges=false.
+     */
+
+    public DefaultFeatureStore() {
+
+    }
+
+    public void intializePhase1(DataManager dataManager,
+        DataStoreParameters parameters) throws InitializeException {
+
+        DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
+
+        this.metadata =
+            (DelegatedDynObject) dynManager.createDynObject(
+                METADATA_DEFINITION_NAME, MetadataManager.METADATA_NAMESPACE);
+
+        this.dataManager = (DefaultDataManager) dataManager;
+
+        this.parameters = parameters;
+        this.transforms = new DefaultFeatureStoreTransforms(this);
+        try {
+            indexes = new DefaultFeatureIndexes(this);
+        } catch (DataException e) {
+            throw new InitializeException(e);
+        }
+
+    }
+
+    public void intializePhase2(DataStoreProvider provider) {
+        this.provider = (FeatureStoreProvider) provider;
+        this.delegate(provider);
+        this.metadataChildren = new HashSet();
+        this.metadataChildren.add(provider);
+    }
+
+    public DataStoreParameters getParameters() {
+        return parameters;
+    }
+
+    public int getMode() {
+        return this.mode;
+    }
+
+    public DataManager getManager() {
+        return this.dataManager;
+    }
+
+    public Iterator getChildren() {
+        return this.provider.getChilds();
+    }
+
+    public FeatureStoreProvider getProvider() {
+        return this.provider;
+    }
+
+    public FeatureManager getFeatureManager() {
+        return this.featureManager;
+    }
+
+    public void setFeatureTypes(List types, FeatureType defaultType) {
+        this.featureTypes = types;
+        this.defaultFeatureType = defaultType;
+    }
+
+    public void open() throws OpenException {
+        if (this.mode != MODE_QUERY) {
+            // TODO: Se puede hacer un open estando en edicion ?
+            try {
+                throw new IllegalStateException();
+            } catch(Exception ex) {
+                LOG.warn("Opening a store in editing/append mode ("+this.getFullName()+").",ex);
+            }
+        }
+        this.notifyChange(DataStoreNotification.BEFORE_OPEN);
+        this.provider.open();
+        this.notifyChange(DataStoreNotification.AFTER_OPEN);
+    }
+
+    public void refresh() throws OpenException, InitializeException {
+        if (this.mode != MODE_QUERY) {
+            throw new IllegalStateException();
+        }
+        this.notifyChange(FeatureStoreNotification.BEFORE_REFRESH);
+        this.featureCount = null;
+        this.provider.refresh();
+        this.notifyChange(FeatureStoreNotification.AFTER_REFRESH);
+    }
+
+    public void close() throws CloseException {
+        if (this.mode != MODE_QUERY) {
+            // TODO: Se puede hacer un close estando en edicion ?
+            try {
+                throw new IllegalStateException();
+            } catch(Exception ex) {
+                LOG.warn("Clossing a store in editing/append mode ("+this.getFullName()+").",ex);
+            }
+        }
+        this.notifyChange(DataStoreNotification.BEFORE_CLOSE);
+        this.featureCount = null;
+        this.provider.close();
+        this.notifyChange(DataStoreNotification.AFTER_CLOSE);
+    }
+
+    protected void doDispose() throws BaseException {
+        if (this.mode != MODE_QUERY) {
+            // TODO: Se puede hacer un dispose estando en edicion ?
+            try {
+                throw new IllegalStateException();
+            } catch(Exception ex) {
+                LOG.warn("Dispossing a store in editing/append mode ("+this.getFullName()+").",ex);
+            }
+        }
+        this.notifyChange(DataStoreNotification.BEFORE_DISPOSE);
+        this.disposeIndexes();
+        this.provider.dispose();
+        if (this.selection != null) {
+            this.selection.dispose();
+            this.selection = null;
+        }
+        this.commands = null;
+        this.featureCount = null;
+        if (this.locks != null) {
+            // this.locks.dispose();
+            this.locks = null;
+        }
+
+        if (this.featureTypeManager != null) {
+            this.featureTypeManager.dispose();
+            this.featureTypeManager = null;
+        }
+
+        this.featureManager = null;
+        this.spatialManager = null;
+
+        this.parameters = null;
+        this.notifyChange(DataStoreNotification.AFTER_DISPOSE);
+        if (delegateObservable != null) {
+            this.delegateObservable.deleteObservers();
+            this.delegateObservable = null;
+        }
+    }
+
+    public boolean allowWrite() {
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        if( ! identityManager.getCurrentIdentity().isAuthorized(DataManager.WRITE_STORE_AUTHORIZATION,this.getParameters(), this.getName()) ) {
+            return false;
+        }
+        return this.provider.allowWrite();
+    }
+
+    public boolean canWriteGeometry(int geometryType) throws DataException {
+        return this.provider.canWriteGeometry(geometryType, 0);
+    }
+
+    public DataServerExplorer getExplorer() throws ReadException,
+        ValidateDataParametersException {
+        return this.provider.getExplorer();
+    }
+
+    /*
+     * public Metadata getMetadata() throws MetadataNotFoundException {
+     * // TODO:
+     * // Si el provider devuelbe null habria que ver de construir aqui
+     * // los metadatos basicos, como el Envelope y el SRS.
+     *
+     * // TODO: Estando en edicion el Envelope deberia de
+     * // actualizarse usando el spatialManager
+     * return this.provider.getMetadata();
+     * }
+     */
+
+    public Envelope getEnvelope() throws DataException {
+        if (this.mode == MODE_FULLEDIT) {
+        	// Just in case another thread tries to write in the store
+        	synchronized (this) {
+        		return this.spatialManager.getEnvelope();
+			}
+        }
+        if (hasDynValue(DataStore.METADATA_ENVELOPE)){
+            return (Envelope)getDynValue(DataStore.METADATA_ENVELOPE);
+        }
+        return this.provider.getEnvelope();
+    }
+
+    /**
+     * @deprecated use getDefaultFeatureType().getDefaultSRS()
+     */
+    public IProjection getSRSDefaultGeometry() throws DataException {
+        return this.getDefaultFeatureType().getDefaultSRS();
+    }
+
+    public FeatureSelection createDefaultFeatureSelection()
+        throws DataException {
+        return new DefaultFeatureSelection(this);
+    }
+
+    public FeatureProvider createDefaultFeatureProvider(FeatureType type)
+        throws DataException {
+        if (type.hasOID()) {
+            return new DefaultFeatureProvider(type,
+                this.provider.createNewOID());
+        }
+        return new DefaultFeatureProvider(type);
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        /*if (this.mode != FeatureStore.MODE_QUERY) {
+            throw new PersistenceException(new IllegalStateException(
+                this.getName()));
+        }*/
+        state.set("dataStoreName", this.getName());
+        state.set("parameters", this.parameters);
+        state.set("selection", this.selection);
+        state.set("transforms", this.transforms);
+        // TODO locks persistence
+        // state.set("locks", this.locks);
+        // TODO indexes persistence
+        // state.set("indexes", this.indexes);
+        Map evaluatedAttr = new HashMap(1);
+        Iterator iterType = featureTypes.iterator();
+        Iterator iterAttr;
+        FeatureType type;
+        DefaultFeatureAttributeDescriptor attr;
+        List attrs;
+        while (iterType.hasNext()) {
+            type = (FeatureType) iterType.next();
+            attrs = new ArrayList();
+            iterAttr = type.iterator();
+            while (iterAttr.hasNext()) {
+                attr = (DefaultFeatureAttributeDescriptor) iterAttr.next();
+                if ((attr.getEvaluator() != null)
+                    && (attr.getEvaluator() instanceof Persistent)) {
+                    attrs.add(attr);
+                }
+            }
+            if (!attrs.isEmpty()) {
+                evaluatedAttr.put(type.getId(), attrs);
+            }
+
+        }
+
+        if (evaluatedAttr.isEmpty()) {
+            evaluatedAttr = null;
+        }
+
+        state.set("evaluatedAttributes", evaluatedAttr);
+        state.set("defaultFeatureTypeId", defaultFeatureType.getId());
+
+    }
+
+    public void loadFromState(PersistentState state)
+        throws PersistenceException {
+        if (this.provider != null) {
+            throw new PersistenceStoreAlreadyLoadedException(this.getName());
+        }
+        if (this.getManager() == null) {
+            this.dataManager = (DefaultDataManager) DALLocator.getDataManager();
+        }
+
+        DataStoreParameters params =
+            (DataStoreParameters) state.get("parameters");
+
+        try {
+
+            this.dataManager.intializeDataStore(this, params);
+            this.selection = (FeatureSelection) state.get("selection");
+            this.transforms =
+                (DefaultFeatureStoreTransforms) state.get("transforms");
+            Map evaluatedAttributes = (Map) state.get("evaluatedAttributes");
+            if ((evaluatedAttributes != null) && !evaluatedAttributes.isEmpty()) {
+                List attrs;
+                Iterator iterEntries =
+                    evaluatedAttributes.entrySet().iterator();
+                Entry entry;
+                while (iterEntries.hasNext()) {
+                    entry = (Entry) iterEntries.next();
+                    attrs = (List) entry.getValue();
+                    if (attrs.isEmpty()) {
+                        continue;
+                    }
+                    int fTypePos = -1;
+                    DefaultFeatureType type = null;
+                    for (int i = 0; i < featureTypes.size(); i++) {
+                        type = (DefaultFeatureType) featureTypes.get(i);
+                        if (type.getId().equals(entry.getKey())) {
+                            fTypePos = i;
+                            break;
+                        }
+                    }
+                    if (fTypePos < 0) {
+                        throw new PersistenceCantFindFeatureTypeException(
+                            this.getName(), (String) entry.getKey());
+                    }
+                    DefaultEditableFeatureType eType =
+                        (DefaultEditableFeatureType) type.getEditable();
+                    Iterator iterAttr = attrs.iterator();
+                    FeatureAttributeDescriptor attr;
+                    while (iterAttr.hasNext()) {
+                        attr = (FeatureAttributeDescriptor) iterAttr.next();
+                        eType.addLike(attr);
+                    }
+                    featureTypes.set(fTypePos, eType.getNotEditableCopy());
+
+                }
+
+            }
+
+            String defFTypeid = state.getString("defaultFeatureTypeId");
+            FeatureType ftype = null;
+
+            if (this.defaultFeatureType == null ||
+                this.defaultFeatureType.getId() == null ||
+                !this.defaultFeatureType.getId().equals(
+                state.getString("defaultFeatureTypeId"))) {
+
+                ftype = getFeatureType(defFTypeid);
+                if (ftype == null) {
+                    throw new PersistenceCantFindDefaultFeatureTypeException(
+                        this.getName(), defFTypeid);
+                }
+                this.defaultFeatureType = ftype;
+            }
+
+        } catch (InitializeException e) {
+            throw new PersistenceException(e);
+        } catch (DataException e) {
+            throw new PersistenceException(e);
+        }
+
+    }
+
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if (manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null) {
+            DynStruct definition =
+                manager.addDefinition(DefaultFeatureStore.class,
+                    PERSISTENCE_DEFINITION_NAME, PERSISTENCE_DEFINITION_NAME
+                        + " Persistent definition", null, null);
+            definition.addDynFieldString("dataStoreName").setMandatory(true)
+                .setPersistent(true);
+
+            definition.addDynFieldObject("parameters")
+                .setClassOfValue(DynObject.class).setMandatory(true)
+                .setPersistent(true);
+
+            definition.addDynFieldObject("selection")
+                .setClassOfValue(FeatureSelection.class).setMandatory(false)
+                .setPersistent(true);
+
+            definition.addDynFieldObject("transforms")
+                .setClassOfValue(DefaultFeatureStoreTransforms.class)
+                .setMandatory(true).setPersistent(true);
+
+            definition.addDynFieldMap("evaluatedAttributes")
+                .setClassOfItems(List.class) // List<DefaultFeatureAttributeDescriptor>
+                .setMandatory(false).setPersistent(true);
+
+            definition.addDynFieldString("defaultFeatureTypeId")
+                .setMandatory(true).setPersistent(true);
+        }
+    }
+
+    public static void registerMetadataDefinition() throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(METADATA_DEFINITION_NAME) == null) {
+            DynStruct metadataDefinition =
+                manager.addDefinition(METADATA_DEFINITION_NAME, null);
+            metadataDefinition.extend(manager
+                .getDefinition(DataStore.METADATA_DEFINITION_NAME));
+        }
+    }
+
+    //
+    // ====================================================================
+    // Gestion de la seleccion
+    //
+
+    public void setSelection(DataSet selection) throws DataException {
+        this.setSelection((FeatureSet) selection);
+    }
+
+    public DataSet createSelection() throws DataException {
+        return createFeatureSelection();
+    }
+
+    public DataSet getSelection() throws DataException {
+        return this.getFeatureSelection();
+    }
+
+    public void setSelection(FeatureSet selection) throws DataException {
+        setSelection(selection, true);
+    }
+
+    /**
+     * @see #setSelection(FeatureSet)
+     * @param undoable
+     *            if the action must be undoable
+     */
+    public void setSelection(FeatureSet selection, boolean undoable)
+        throws DataException {
+        if (selection == null) {
+            if (undoable) {
+                throw new SelectionNotAllowedException(getName());
+            }
+
+        } else {
+            if (selection.equals(this.selection)) {
+                return;
+            }
+            if (!selection.isFromStore(this)) {
+                throw new SelectionNotAllowedException(getName());
+            }
+        }
+
+        if (this.selection != null) {
+            this.selection.deleteObserver(this);
+        }
+        if (selection == null) {
+            if (this.selection != null) {
+                this.selection.dispose();
+            }
+            this.selection = null;
+            return;
+        }
+        if (selection instanceof FeatureSelection) {
+            if (undoable && isEditing()) {
+                commands.selectionSet(this, this.selection,
+                    (FeatureSelection) selection);
+            }
+            if (this.selection != null) {
+                this.selection.dispose();
+            }
+            this.selection = (FeatureSelection) selection;
+        } else {
+            if (undoable && isEditing()) {
+                commands.startComplex("_selectionSet");
+            }
+            if (selection instanceof DefaultFeatureSelection) {
+                DefaultFeatureSelection defSelection =
+                    (DefaultFeatureSelection) selection;
+                defSelection.deselectAll(undoable);
+                defSelection.select(selection, undoable);
+            } else {
+                this.selection.deselectAll();
+                this.selection.select(selection);
+            }
+            if (undoable && isEditing()) {
+                commands.endComplex();
+            }
+        }
+        this.selection.addObserver(this);
+
+        this.notifyChange(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    public FeatureSelection createFeatureSelection() throws DataException {
+        return this.provider.createFeatureSelection();
+    }
+
+    public FeatureSelection getFeatureSelection() throws DataException {
+        if (selection == null) {
+            this.selection = createFeatureSelection();
+            this.selection.addObserver(this);
+        }
+        return selection;
+    }
+
+    //
+    // ====================================================================
+    // Gestion de notificaciones
+    //
+
+    public void notifyChange(String notification) {
+        if (delegateObservable != null) {
+            notifyChange(new DefaultFeatureStoreNotification(this, notification));
+        }
+
+    }
+
+    public void notifyChange(String notification, FeatureProvider data) {
+        try {
+            notifyChange(notification, createFeature(data));
+        } catch (DataException ex) {
+            LOG.error("Error notifying about the notification: " + notification
+                + ", with the data: " + data, ex);
+        }
+    }
+
+    public void notifyChange(String notification, Feature feature) {
+        notifyChange(new DefaultFeatureStoreNotification(this, notification,
+            feature));
+    }
+
+    public void notifyChange(String notification, Command command) {
+        notifyChange(new DefaultFeatureStoreNotification(this, notification,
+            command));
+    }
+
+    public void notifyChange(String notification, EditableFeatureType type) {
+        notifyChange(new DefaultFeatureStoreNotification(this, notification,
+            type));
+    }
+
+    public void notifyChange(FeatureStoreNotification storeNotification) {
+        delegateObservable.notifyObservers(storeNotification);
+    }
+
+    public void notifyChange(String notification, Resource resource) {
+        notifyChange(new DefaultFeatureStoreNotification(this,
+            DataStoreNotification.RESOURCE_CHANGED));
+    }
+
+    //
+    // ====================================================================
+    // Gestion de bloqueos
+    //
+
+    public boolean isLocksSupported() {
+        return this.provider.isLocksSupported();
+    }
+
+    public FeatureLocks getLocks() throws DataException {
+        if (!this.provider.isLocksSupported()) {
+            LOG.warn("Locks not supported");
+            return null;
+        }
+        if (locks == null) {
+            this.locks = this.provider.createFeatureLocks();
+        }
+        return locks;
+    }
+
+    //
+    // ====================================================================
+    // Interface Observable
+    //
+
+    public void disableNotifications() {
+        this.delegateObservable.disableNotifications();
+
+    }
+
+    public void enableNotifications() {
+        this.delegateObservable.enableNotifications();
+    }
+
+    public void beginComplexNotification() {
+        this.delegateObservable.beginComplexNotification();
+
+    }
+
+    public void endComplexNotification() {
+        this.delegateObservable.endComplexNotification();
+
+    }
+
+    public void addObserver(Observer observer) {
+        if (delegateObservable != null) {
+            this.delegateObservable.addObserver(observer);
+        }
+    }
+
+    public void deleteObserver(Observer observer) {
+        if (delegateObservable != null) {
+            this.delegateObservable.deleteObserver(observer);
+        }
+    }
+
+    public void deleteObservers() {
+        this.delegateObservable.deleteObservers();
+
+    }
+
+    //
+    // ====================================================================
+    // Interface Observer
+    //
+    // Usado para observar:
+    // - su seleccion
+    // - sus bloqueos
+    // - sus recursos
+    //
+
+    public void update(Observable observable, Object notification) {
+        if (observable instanceof FeatureSet) {
+            if (observable == this.selection) {
+                this.notifyChange(DataStoreNotification.SELECTION_CHANGE);
+            } else
+                if (observable == this.locks) {
+                    this.notifyChange(FeatureStoreNotification.LOCKS_CHANGE);
+                }
+
+        } else
+            if (observable instanceof FeatureStoreProvider) {
+                if (observable == this.provider) {
+
+                }
+
+            }
+    }
+
+    //
+    // ====================================================================
+    // Edicion
+    //
+
+    private void newVersionOfUpdate() {
+        this.versionOfUpdate++;
+    }
+
+    private long currentVersionOfUpdate() {
+        return this.versionOfUpdate;
+    }
+
+    private void checkInEditingMode() throws NeedEditingModeException {
+        if (mode != MODE_FULLEDIT) {
+            throw new NeedEditingModeException(this.getName());
+        }
+    }
+
+    private void checkNotInAppendMode() throws IllegalStateException {
+        if (mode == MODE_APPEND) {
+			throw new IllegalStateException("Error: store "
+					+ this.getFullName() + " is in append mode");
+        }
+    }
+
+    private void checkIsOwnFeature(Feature feature)
+        throws IllegalFeatureException {
+        if (((DefaultFeature) feature).getStore() != this) {
+            throw new IllegalFeatureException(this.getName());
+        }
+        // FIXME: fixFeatureType no vale para el checkIsOwnFeature
+        // fixFeatureType((DefaultFeatureType) feature.getType());
+    }
+
+    private void exitEditingMode() {
+        if (commands != null) {
+            commands.clear();
+            commands = null;
+        }
+
+        if (featureTypeManager != null) {
+            featureTypeManager.dispose();
+            featureTypeManager = null;
+
+        }
+
+        // TODO implementar un dispose para estos dos
+        featureManager = null;
+        spatialManager = null;
+
+        featureCount = null;
+
+        mode = MODE_QUERY;
+        hasStrongChanges = true; // Lo deja a true por si las moscas
+        hasInserts = true;
+    }
+
+    synchronized public void edit() throws DataException {
+        edit(MODE_FULLEDIT);
+    }
+
+    synchronized public void edit(int mode) throws DataException {
+        LOG.debug("Starting editing in mode: {}", new Integer(mode));
+        try {
+            if (this.mode != MODE_QUERY) {
+                throw new AlreadyEditingException(this.getName());
+            }
+            if (!this.provider.supportsAppendMode()) {
+                mode = MODE_FULLEDIT;
+            }
+            switch (mode) {
+            case MODE_QUERY:
+                throw new IllegalStateException(this.getName());
+
+            case MODE_FULLEDIT:
+                if (!this.transforms.isEmpty()) {
+                    throw new IllegalStateException(this.getName());
+                }
+                notifyChange(FeatureStoreNotification.BEFORE_STARTEDITING);
+                invalidateIndexes();
+                featureManager =
+                    new FeatureManager(new MemoryExpansionAdapter());
+                featureTypeManager =
+                    new FeatureTypeManager(this, new MemoryExpansionAdapter());
+                spatialManager =
+                    new SpatialManager(this, provider.getEnvelope());
+
+                commands =
+                    new DefaultFeatureCommandsStack(this, featureManager,
+                        spatialManager, featureTypeManager);
+                this.mode = MODE_FULLEDIT;
+                hasStrongChanges = false;
+                hasInserts = false;
+                notifyChange(FeatureStoreNotification.AFTER_STARTEDITING);
+                break;
+            case MODE_APPEND:
+                if (!this.transforms.isEmpty()) {
+                    throw new IllegalStateException(this.getName());
+                }
+                notifyChange(FeatureStoreNotification.BEFORE_STARTEDITING);
+                invalidateIndexes();
+                this.provider.beginAppend();
+                this.mode = MODE_APPEND;
+                hasInserts = false;
+                notifyChange(FeatureStoreNotification.AFTER_STARTEDITING);
+                break;
+            }
+        } catch (Exception e) {
+            throw new StoreEditException(e, this.getName());
+        }
+    }
+
+    private void invalidateIndexes() {
+        setIndexesValidStatus(false);
+    }
+
+    private void setIndexesValidStatus(boolean valid) {
+        FeatureIndexes indexes = getIndexes();
+        LOG.debug("Setting the store indexes to valid status {}: {}", (valid
+            ? Boolean.TRUE : Boolean.FALSE), indexes);
+        for (Iterator iterator = indexes.iterator(); iterator.hasNext();) {
+            FeatureIndex index = (FeatureIndex) iterator.next();
+            if (index instanceof FeatureIndexProviderServices) {
+                FeatureIndexProviderServices indexServices =
+                    (FeatureIndexProviderServices) index;
+                indexServices.setValid(valid);
+            }
+        }
+    }
+
+    private void updateIndexes() throws FeatureIndexException {
+        FeatureIndexes indexes = getIndexes();
+        LOG.debug("Refilling indexes: {}", indexes);
+        for (Iterator iterator = indexes.iterator(); iterator.hasNext();) {
+            FeatureIndex index = (FeatureIndex) iterator.next();
+            if (index instanceof FeatureIndexProviderServices) {
+                FeatureIndexProviderServices indexServices =
+                    (FeatureIndexProviderServices) index;
+                indexServices.fill(true, null);
+            }
+        }
+    }
+
+    private void waitForIndexes() {
+        FeatureIndexes indexes = getIndexes();
+        LOG.debug("Waiting for indexes to finish filling: {}", indexes);
+        for (Iterator iterator = indexes.iterator(); iterator.hasNext();) {
+            FeatureIndex index = (FeatureIndex) iterator.next();
+            if (index instanceof FeatureIndexProviderServices) {
+                FeatureIndexProviderServices indexServices =
+                    (FeatureIndexProviderServices) index;
+                indexServices.waitForIndex();
+            }
+        }
+    }
+
+    private void disposeIndexes() {
+        FeatureIndexes indexes = getIndexes();
+        LOG.debug("Disposing indexes: {}", indexes);
+        for (Iterator iterator = indexes.iterator(); iterator.hasNext();) {
+            FeatureIndex index = (FeatureIndex) iterator.next();
+            if (index instanceof FeatureIndexProviderServices) {
+                FeatureIndexProviderServices indexServices =
+                    (FeatureIndexProviderServices) index;
+                indexServices.dispose();
+            }
+        }
+    }
+
+    public boolean isEditing() {
+        return mode == MODE_FULLEDIT;
+    }
+
+    public boolean isAppending() {
+        return mode == MODE_APPEND;
+    }
+
+    synchronized public void update(EditableFeatureType type)
+        throws DataException {
+        try {
+            checkInEditingMode();
+            if (type == null) {
+                throw new NullFeatureTypeException(getName());
+            }
+            // FIXME: Comprobar que es un featureType aceptable.
+            notifyChange(FeatureStoreNotification.BEFORE_UPDATE_TYPE, type);
+            newVersionOfUpdate();
+
+            FeatureType oldt = type.getSource().getCopy();
+            FeatureType newt = type.getCopy();
+            commands.update(newt, oldt);
+
+            if (((DefaultEditableFeatureType) type).hasStrongChanges()) {
+                hasStrongChanges = true;
+            }
+            notifyChange(FeatureStoreNotification.AFTER_UPDATE_TYPE, type);
+        } catch (Exception e) {
+            throw new StoreUpdateFeatureTypeException(e, this.getName());
+        }
+    }
+
+    public void delete(Feature feature) throws DataException {
+        this.commands.delete(feature);
+    }
+
+    synchronized public void doDelete(Feature feature) throws DataException {
+        try {
+            checkInEditingMode();
+            checkIsOwnFeature(feature);
+            if (feature instanceof EditableFeature) {
+                throw new StoreDeleteEditableFeatureException(getName());
+            }
+            notifyChange(FeatureStoreNotification.BEFORE_DELETE, feature);
+
+            //Update the featureManager and the spatialManager
+            featureManager.delete(feature.getReference());
+            spatialManager.deleteFeature(feature);
+
+            newVersionOfUpdate();
+            hasStrongChanges = true;
+            notifyChange(FeatureStoreNotification.AFTER_DELETE, feature);
+        } catch (Exception e) {
+            throw new StoreDeleteFeatureException(e, this.getName());
+        }
+    }
+
+    private static EditableFeature lastChangedFeature = null;
+
+    public synchronized void insert(EditableFeature feature)
+        throws DataException {
+        LOG.debug("In editing mode {}, insert feature: {}", new Integer(mode),
+            feature);
+        try {
+            switch (mode) {
+            case MODE_QUERY:
+                throw new NeedEditingModeException(this.getName());
+
+            case MODE_APPEND:
+                checkIsOwnFeature(feature);
+                if (feature.getSource() != null) {
+                    throw new NoNewFeatureInsertException(this.getName());
+                }
+                this.featureCount = null;
+                notifyChange(FeatureStoreNotification.BEFORE_INSERT, feature);
+                feature.validate(Feature.UPDATE);
+                provider.append(((DefaultEditableFeature) feature).getData());
+                hasStrongChanges = true;
+                hasInserts = true;
+                notifyChange(FeatureStoreNotification.AFTER_INSERT, feature);
+                break;
+
+            case MODE_FULLEDIT:
+                if (feature.getSource() != null) {
+                    throw new NoNewFeatureInsertException(this.getName());
+                }
+                commands.insert(feature);
+            }
+        } catch (Exception e) {
+            throw new StoreInsertFeatureException(e, this.getName());
+        }
+    }
+
+    synchronized public void doInsert(EditableFeature feature)
+        throws DataException {
+        checkIsOwnFeature(feature);
+
+        waitForIndexes();
+
+        notifyChange(FeatureStoreNotification.BEFORE_INSERT, feature);
+        newVersionOfUpdate();
+        if ((lastChangedFeature == null)
+            || (lastChangedFeature.getSource() != feature.getSource())) {
+            lastChangedFeature = feature;
+            feature.validate(Feature.UPDATE);
+            lastChangedFeature = null;
+        }
+        //Update the featureManager and the spatialManager
+        ((DefaultEditableFeature) feature).setInserted(true);
+        DefaultFeature newFeature = (DefaultFeature) feature.getNotEditableCopy();
+
+
+        featureManager.add(newFeature);
+        spatialManager.insertFeature(newFeature);
+
+        hasStrongChanges = true;
+        hasInserts = true;
+        notifyChange(FeatureStoreNotification.AFTER_INSERT, feature);
+    }
+
+    public void update(EditableFeature feature)
+    throws DataException {
+        if ((feature).getSource() == null) {
+            insert(feature);
+            return;
+        }
+        commands.update(feature, feature.getSource());
+    }
+
+    synchronized public void doUpdate(EditableFeature feature, Feature oldFeature)
+        throws DataException {
+        try {
+            checkInEditingMode();
+            checkIsOwnFeature(feature);
+            notifyChange(FeatureStoreNotification.BEFORE_UPDATE, feature);
+            newVersionOfUpdate();
+            if ((lastChangedFeature == null)
+                || (lastChangedFeature.getSource() != feature.getSource())) {
+                lastChangedFeature = feature;
+                feature.validate(Feature.UPDATE);
+                lastChangedFeature = null;
+            }
+
+            //Update the featureManager and the spatialManager
+            Feature newf = feature.getNotEditableCopy();
+            featureManager.update(newf, oldFeature);
+            spatialManager.updateFeature(newf, oldFeature);
+
+            hasStrongChanges = true;
+            notifyChange(FeatureStoreNotification.AFTER_UPDATE, feature);
+        } catch (Exception e) {
+            throw new StoreUpdateFeatureException(e, this.getName());
+        }
+    }
+
+    synchronized public void redo() throws RedoException {
+        Command redo = commands.getNextRedoCommand();
+        try {
+            checkInEditingMode();
+        } catch (NeedEditingModeException ex) {
+            throw new RedoException(redo, ex);
+        }
+        notifyChange(FeatureStoreNotification.BEFORE_REDO, redo);
+        newVersionOfUpdate();
+        commands.redo();
+        hasStrongChanges = true;
+        notifyChange(FeatureStoreNotification.AFTER_REDO, redo);
+    }
+
+    synchronized public void undo() throws UndoException {
+        Command undo = commands.getNextUndoCommand();
+        try {
+            checkInEditingMode();
+        } catch (NeedEditingModeException ex) {
+            throw new UndoException(undo, ex);
+        }
+        notifyChange(FeatureStoreNotification.BEFORE_UNDO, undo);
+        newVersionOfUpdate();
+        commands.undo();
+        hasStrongChanges = true;
+        notifyChange(FeatureStoreNotification.AFTER_UNDO, undo);
+    }
+
+    public List getRedoInfos() {
+        if (isEditing() && (commands != null)) {
+            return commands.getRedoInfos();
+        } else {
+            return null;
+        }
+    }
+
+    public List getUndoInfos() {
+        if (isEditing() && (commands != null)) {
+            return commands.getUndoInfos();
+        } else {
+            return null;
+        }
+    }
+
+    public synchronized FeatureCommandsStack getCommandsStack()
+        throws DataException {
+        checkInEditingMode();
+        return commands;
+    }
+
+    synchronized public void cancelEditing() throws DataException {
+        spatialManager.cancelModifies();
+        try {
+            checkInEditingMode();
+
+            boolean clearSelection = this.hasStrongChanges;
+            if (this.selection instanceof FeatureReferenceSelection) {
+                clearSelection = this.hasInserts;
+            }
+            notifyChange(FeatureStoreNotification.BEFORE_CANCELEDITING);
+            exitEditingMode();
+            if (clearSelection) {
+                ((FeatureSelection) this.getSelection()).deselectAll();
+            }
+            updateIndexes();
+            notifyChange(FeatureStoreNotification.AFTER_CANCELEDITING);
+        } catch (Exception e) {
+            throw new StoreCancelEditingException(e, this.getName());
+        }
+    }
+
+    synchronized public void finishEditing() throws DataException {
+        LOG.debug("finish editing of mode: {}", new Integer(mode));
+        try {
+
+            /*
+             * Selection needs to be cleared when editing stops
+             * to prevent conflicts with selection remaining from
+             * editing mode.
+             */
+            ((FeatureSelection) this.getSelection()).deselectAll();
+
+            switch (mode) {
+            case MODE_QUERY:
+                throw new NeedEditingModeException(this.getName());
+
+            case MODE_APPEND:
+                notifyChange(FeatureStoreNotification.BEFORE_FINISHEDITING);
+                provider.endAppend();
+                exitEditingMode();
+                updateIndexes();
+                notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING);
+                break;
+
+            case MODE_FULLEDIT:
+                if (hasStrongChanges && !this.allowWrite()) {
+                    throw new WriteNotAllowedException(getName());
+                }
+                notifyChange(FeatureStoreNotification.BEFORE_FINISHEDITING);
+                if (hasStrongChanges) {
+                    validateFeatures(Feature.FINISH_EDITING);
+
+                    /*
+                     * This will throw a PerformEditingExceptionif the provider
+                     * does not accept the changes (for example, an invalid field name)
+                     */
+                    provider.performChanges(featureManager.getDeleted(),
+                        featureManager.getInserted(),
+                        featureManager.getUpdated(),
+                        featureTypeManager.getFeatureTypesChanged());
+                }
+                exitEditingMode();
+                updateIndexes();
+                notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING);
+                break;
+            }
+        } catch (PerformEditingException pee) {
+            throw new WriteException(provider.getSourceId().toString(), pee);
+        } catch (Exception e) {
+            throw new FinishEditingException(e);
+        }
+    }
+
+    /**
+     * Save changes in the provider without leaving the edit mode.
+     * Do not call observers to communicate a change of ediding mode.
+     * The operation's history is eliminated to prevent inconsistencies
+     * in the data.
+     *
+     * @throws DataException
+     */
+    synchronized public void commitChanges() throws DataException {
+      LOG.debug("commitChanges of mode: {}", new Integer(mode));
+      if( !canCommitChanges() ) {
+    	  throw new WriteNotAllowedException(getName());
+      }
+      try {
+        switch (mode) {
+        case MODE_QUERY:
+          throw new NeedEditingModeException(this.getName());
+
+        case MODE_APPEND:
+          this.provider.endAppend();
+          exitEditingMode();
+          invalidateIndexes();
+          this.provider.beginAppend();
+          hasInserts = false;
+          break;
+
+        case MODE_FULLEDIT:
+          if (hasStrongChanges && !this.allowWrite()) {
+            throw new WriteNotAllowedException(getName());
+          }
+          if (hasStrongChanges) {
+            validateFeatures(Feature.FINISH_EDITING);
+            provider.performChanges(featureManager.getDeleted(),
+              featureManager.getInserted(),
+              featureManager.getUpdated(),
+              featureTypeManager.getFeatureTypesChanged());
+          }
+          invalidateIndexes();
+          featureManager =
+            new FeatureManager(new MemoryExpansionAdapter());
+          featureTypeManager =
+            new FeatureTypeManager(this, new MemoryExpansionAdapter());
+          spatialManager =
+            new SpatialManager(this, provider.getEnvelope());
+
+          commands =
+            new DefaultFeatureCommandsStack(this, featureManager,
+              spatialManager, featureTypeManager);
+          featureCount = null;
+          hasStrongChanges = false;
+          hasInserts = false;
+          break;
+        }
+      } catch (Exception e) {
+        throw new FinishEditingException(e);
+      }
+    }
+
+    synchronized public boolean canCommitChanges() throws DataException {
+        if ( !this.allowWrite()) {
+        	return false;
+        }
+    	switch (mode) {
+    	default:
+        case MODE_QUERY:
+        	return false;
+
+        case MODE_APPEND:
+        	return true;
+
+        case MODE_FULLEDIT:
+            List types = this.getFeatureTypes();
+            for( int i=0; i<types.size(); i++ ) {
+            	Object type = types.get(i);
+            	if( type instanceof DefaultEditableFeatureType ) {
+	            	if( ((DefaultEditableFeatureType)type).hasStrongChanges() ) {
+	            		return false;
+	            	}
+            	}
+            }
+            return true;
+    	}
+    }
+
+    public void beginEditingGroup(String description)
+        throws NeedEditingModeException {
+        checkInEditingMode();
+        commands.startComplex(description);
+    }
+
+    public void endEditingGroup() throws NeedEditingModeException {
+        checkInEditingMode();
+        commands.endComplex();
+    }
+
+    public boolean isAppendModeSupported() {
+        return this.provider.supportsAppendMode();
+    }
+
+    public void export(DataServerExplorer explorer, String provider,
+        NewFeatureStoreParameters params) throws DataException {
+
+        if (this.getFeatureTypes().size() != 1) {
+            throw new NotYetImplemented(
+                "export whith more than one type not yet implemented");
+        }
+        FeatureSelection featureSelection = (FeatureSelection) getSelection();
+        FeatureStore target = null;
+        FeatureSet features = null;
+        DisposableIterator iterator = null;
+        try {
+            FeatureType type = this.getDefaultFeatureType();
+            if ((params.getDefaultFeatureType() == null)
+                || (params.getDefaultFeatureType().size() == 0)) {
+                params.setDefaultFeatureType(type.getEditable());
+
+            }
+            explorer.add(provider, params, true);
+
+            DataManager manager = DALLocator.getDataManager();
+            target = (FeatureStore) manager.openStore(provider, params);
+            FeatureType targetType = target.getDefaultFeatureType();
+
+            target.edit(MODE_APPEND);
+            FeatureAttributeDescriptor[] pk = type.getPrimaryKey();
+            if (featureSelection.getSize() > 0) {
+                features = this.getFeatureSelection();
+            } else {
+                if ((pk != null) && (pk.length > 0)) {
+                    FeatureQuery query = createFeatureQuery();
+                    for (int i = 0; i < pk.length; i++) {
+                        query.getOrder().add(pk[i].getName(), true);
+                    }
+                    features = this.getFeatureSet(query);
+                } else {
+                    features = this.getFeatureSet();
+                }
+            }
+            iterator = features.fastIterator();
+            while (iterator.hasNext()) {
+                DefaultFeature feature = (DefaultFeature) iterator.next();
+                target.insert(target.createNewFeature(targetType, feature));
+            }
+            target.finishEditing();
+            target.dispose();
+        } catch (Exception e) {
+            throw new DataExportException(e, params.toString());
+        } finally {
+            dispose(iterator);
+            dispose(features);
+            dispose(target);
+        }
+    }
+
+    //
+    // ====================================================================
+    // Obtencion de datos
+    // getDataCollection, getFeatureCollection
+    //
+
+    public DataSet getDataSet() throws DataException {
+        checkNotInAppendMode();
+        FeatureQuery query =
+            new DefaultFeatureQuery(this.getDefaultFeatureType());
+        return new DefaultFeatureSet(this, query);
+    }
+
+    public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+        checkNotInAppendMode();
+        return new DefaultFeatureSet(this, (FeatureQuery) dataQuery);
+    }
+
+    public void getDataSet(Observer observer) throws DataException {
+        checkNotInAppendMode();
+        this.getFeatureSet(null, observer);
+    }
+
+    public void getDataSet(DataQuery dataQuery, Observer observer)
+        throws DataException {
+        checkNotInAppendMode();
+        this.getFeatureSet((FeatureQuery) dataQuery, observer);
+    }
+
+    public FeatureSet getFeatureSet() throws DataException {
+        checkNotInAppendMode();
+        FeatureQuery query =
+            new DefaultFeatureQuery(this.getDefaultFeatureType());
+        return new DefaultFeatureSet(this, query);
+    }
+
+    public FeatureSet getFeatureSet(FeatureQuery featureQuery)
+        throws DataException {
+        checkNotInAppendMode();
+        return new DefaultFeatureSet(this, featureQuery);
+    }
+
+    public void accept(Visitor visitor) throws BaseException {
+        FeatureSet set = getFeatureSet();
+        try {
+            set.accept(visitor);
+        } finally {
+            set.dispose();
+        }
+    }
+
+    public void accept(Visitor visitor, DataQuery dataQuery)
+        throws BaseException {
+        FeatureSet set = getFeatureSet((FeatureQuery) dataQuery);
+        try {
+            set.accept(visitor);
+        } finally {
+            set.dispose();
+        }
+    }
+
+    public FeatureType getFeatureType(FeatureQuery featureQuery)
+        throws DataException {
+        DefaultFeatureType fType =
+            (DefaultFeatureType) this.getFeatureType(featureQuery
+                .getFeatureTypeId());
+        if( featureQuery.hasAttributeNames() || featureQuery.hasConstantsAttributeNames() ) {
+            return fType.getSubtype(featureQuery.getAttributeNames(), featureQuery.getConstantsAttributeNames() );
+        }
+        return fType;
+    }
+
+    public void getFeatureSet(Observer observer) throws DataException {
+        checkNotInAppendMode();
+        this.getFeatureSet(null, observer);
+    }
+
+    public void getFeatureSet(FeatureQuery query, Observer observer)
+        throws DataException {
+        class LoadInBackGround implements Runnable {
+
+            private FeatureStore store;
+            private FeatureQuery query;
+            private Observer observer;
+
+            public LoadInBackGround(FeatureStore store, FeatureQuery query,
+                Observer observer) {
+                this.store = store;
+                this.query = query;
+                this.observer = observer;
+            }
+
+            void notify(FeatureStoreNotification theNotification) {
+                observer.update(store, theNotification);
+                return;
+            }
+
+            public void run() {
+                FeatureSet set = null;
+                try {
+                    set = store.getFeatureSet(query);
+                    notify(new DefaultFeatureStoreNotification(store,
+                        FeatureStoreNotification.LOAD_FINISHED, set));
+                } catch (Exception e) {
+                    notify(new DefaultFeatureStoreNotification(store,
+                        FeatureStoreNotification.LOAD_FINISHED, e));
+                } finally {
+                    dispose(set);
+                }
+            }
+        }
+
+        checkNotInAppendMode();
+        if (query == null) {
+            query = new DefaultFeatureQuery(this.getDefaultFeatureType());
+        }
+        LoadInBackGround task = new LoadInBackGround(this, query, observer);
+        Thread thread = new Thread(task, "Load Feature Set in background");
+        thread.start();
+    }
+
+    public Feature getFeatureByReference(FeatureReference reference)
+        throws DataException {
+        checkNotInAppendMode();
+        DefaultFeatureReference ref = (DefaultFeatureReference) reference;
+        FeatureType featureType;
+        if (ref.getFeatureTypeId() == null) {
+            featureType = this.getDefaultFeatureType();
+        } else {
+            featureType = this.getFeatureType(ref.getFeatureTypeId());
+        }
+        return this.getFeatureByReference(reference, featureType);
+    }
+
+    public Feature getFeatureByReference(FeatureReference reference,
+        FeatureType featureType) throws DataException {
+        checkNotInAppendMode();
+        featureType = fixFeatureType((DefaultFeatureType) featureType);
+        if (this.mode == MODE_FULLEDIT) {
+            Feature f = featureManager.get(reference, this, featureType);
+            if (f != null) {
+                return f;
+            }
+        }
+
+        FeatureType sourceFeatureType = featureType;
+        if (!this.transforms.isEmpty()) {
+            sourceFeatureType = this.transforms.getSourceFeatureTypeFrom(featureType);
+        }
+        // TODO comprobar que el id es de este store
+
+        DefaultFeature feature =
+            new DefaultFeature(this,
+                this.provider.getFeatureProviderByReference(
+                    (FeatureReferenceProviderServices) reference, sourceFeatureType));
+
+        if (!this.transforms.isEmpty()) {
+            return this.transforms.applyTransform(feature, featureType);
+        }
+        return feature;
+    }
+
+    //
+    // ====================================================================
+    // Gestion de features
+    //
+
+    private FeatureType fixFeatureType(DefaultFeatureType type)
+        throws DataException {
+        FeatureType original = this.getDefaultFeatureType();
+
+        if ((type == null) || type.equals(original)) {
+            return original;
+        } else {
+            if (!type.isSubtypeOf(original)) {
+                Iterator iter = this.getFeatureTypes().iterator();
+                FeatureType tmpType;
+                boolean found = false;
+                while (iter.hasNext()) {
+                    tmpType = (FeatureType) iter.next();
+                    if (type.equals(tmpType)) {
+                        return type;
+
+                    } else
+                        if (type.isSubtypeOf(tmpType)) {
+                            found = true;
+                            original = tmpType;
+                            break;
+                        }
+
+                }
+                if (!found) {
+                    throw new IllegalFeatureTypeException(getName());
+                }
+            }
+        }
+
+        // Checks that type has all fields of pk
+        // else add the missing attributes at the end.
+        if (!original.hasOID()) {
+            // Gets original pk attributes
+            DefaultEditableFeatureType edOriginal =
+                (DefaultEditableFeatureType) original.getEditable();
+            FeatureAttributeDescriptor orgAttr;
+            Iterator edOriginalIter = edOriginal.iterator();
+            while (edOriginalIter.hasNext()) {
+                orgAttr = (FeatureAttributeDescriptor) edOriginalIter.next();
+                if (!orgAttr.isPrimaryKey()) {
+                    edOriginalIter.remove();
+                }
+            }
+
+            // Checks if all pk attributes are in type
+            Iterator typeIterator;
+            edOriginalIter = edOriginal.iterator();
+            FeatureAttributeDescriptor attr;
+            while (edOriginalIter.hasNext()) {
+                orgAttr = (FeatureAttributeDescriptor) edOriginalIter.next();
+                typeIterator = type.iterator();
+                while (typeIterator.hasNext()) {
+                    attr = (FeatureAttributeDescriptor) typeIterator.next();
+                    if (attr.getName().equals(orgAttr.getName())) {
+                        edOriginalIter.remove();
+                        break;
+                    }
+                }
+            }
+
+            // add missing pk attributes if any
+            if (edOriginal.size() > 0) {
+                boolean isEditable = type instanceof DefaultEditableFeatureType;
+                DefaultEditableFeatureType edType =
+                    (DefaultEditableFeatureType) original.getEditable();
+                edType.clear();
+                edType.addAll(type);
+                edType.addAll(edOriginal);
+                if (!isEditable) {
+                    type = (DefaultFeatureType) edType.getNotEditableCopy();
+                }
+            }
+
+        }
+
+        return type;
+    }
+
+    public void validateFeatures(int mode) throws DataException {
+        FeatureSet collection = null;
+        DisposableIterator iter = null;
+        try {
+            checkNotInAppendMode();
+            collection = this.getFeatureSet();
+            iter = collection.fastIterator();
+            long previousVersionOfUpdate = currentVersionOfUpdate();
+            while (iter.hasNext()) {
+                ((DefaultFeature) iter.next()).validate(mode);
+                if (previousVersionOfUpdate != currentVersionOfUpdate()) {
+                    throw new ConcurrentDataModificationException(getName());
+                }
+            }
+        } catch (Exception e) {
+            throw new ValidateFeaturesException(e, getName());
+        } finally {
+            dispose(iter);
+            dispose(collection);
+        }
+    }
+
+    public FeatureType getDefaultFeatureType() throws DataException {
+        try {
+
+            if (isEditing()) {
+                FeatureType auxFeatureType =
+                    featureTypeManager.getType(defaultFeatureType.getId());
+                if (auxFeatureType != null) {
+                    return avoidEditable(auxFeatureType);
+                }
+            }
+            FeatureType type = this.transforms.getDefaultFeatureType();
+            if (type != null) {
+                return avoidEditable(type);
+            }
+
+            return avoidEditable(defaultFeatureType);
+
+        } catch (Exception e) {
+            throw new GetFeatureTypeException(e, getName());
+        }
+    }
+
+    private FeatureType avoidEditable(FeatureType ft) {
+        if (ft instanceof EditableFeatureType) {
+            return ((EditableFeatureType) ft).getNotEditableCopy();
+        } else {
+            return ft;
+        }
+    }
+
+    public FeatureType getFeatureType(String featureTypeId)
+        throws DataException {
+        if (featureTypeId == null) {
+            return this.getDefaultFeatureType();
+        }
+        try {
+            if (isEditing()) {
+                FeatureType auxFeatureType =
+                    featureTypeManager.getType(featureTypeId);
+                if (auxFeatureType != null) {
+                    return auxFeatureType;
+                }
+            }
+            FeatureType type = this.transforms.getFeatureType(featureTypeId);
+            if (type != null) {
+                return type;
+            }
+            Iterator iter = this.featureTypes.iterator();
+            while (iter.hasNext()) {
+                type = (FeatureType) iter.next();
+                if (type.getId().equals(featureTypeId)) {
+                    return type;
+                }
+            }
+            return null;
+        } catch (Exception e) {
+            throw new GetFeatureTypeException(e, getName());
+        }
+    }
+
+    public FeatureType getProviderDefaultFeatureType() {
+        return defaultFeatureType;
+    }
+
+    public List getFeatureTypes() throws DataException {
+        try {
+            List types;
+            if (isEditing()) {
+                types = new ArrayList();
+                Iterator it = featureTypes.iterator();
+                while (it.hasNext()) {
+                    FeatureType type = (FeatureType) it.next();
+                    FeatureType typeaux =
+                        featureTypeManager.getType(type.getId());
+                    if (typeaux != null) {
+                        types.add(typeaux);
+                    } else {
+                        types.add(type);
+                    }
+                }
+                it = featureTypeManager.newsIterator();
+                while (it.hasNext()) {
+                    FeatureType type = (FeatureType) it.next();
+                    types.add(type);
+                }
+            } else {
+                types = this.transforms.getFeatureTypes();
+                if (types == null) {
+                    types = featureTypes;
+                }
+            }
+            return Collections.unmodifiableList(types);
+        } catch (Exception e) {
+            throw new GetFeatureTypeException(e, getName());
+        }
+    }
+
+    public List getProviderFeatureTypes() throws DataException {
+        return Collections.unmodifiableList(this.featureTypes);
+    }
+
+    public Feature createFeature(FeatureProvider data) throws DataException {
+        DefaultFeature feature = new DefaultFeature(this, data);
+        return feature;
+    }
+
+    public Feature createFeature(FeatureProvider data, FeatureType type)
+        throws DataException {
+        // FIXME: falta por implementar
+        // Comprobar si es un subtipo del feature de data
+        // y construir un feature usando el subtipo.
+        // Probablemente requiera generar una copia del data.
+        throw new NotYetImplemented();
+    }
+
+    public EditableFeature createNewFeature(FeatureType type,
+        Feature defaultValues) throws DataException {
+        try {
+            FeatureProvider data = createNewFeatureProvider(type);
+            DefaultEditableFeature feature =
+                new DefaultEditableFeature(this, data);
+            feature.initializeValues(defaultValues);
+            data.setNew(true);
+
+            return feature;
+        } catch (Exception e) {
+            throw new CreateFeatureException(e, getName());
+        }
+    }
+
+    private FeatureProvider createNewFeatureProvider(FeatureType type)
+        throws DataException {
+        type = this.fixFeatureType((DefaultFeatureType) type);
+        FeatureProvider data = this.provider.createFeatureProvider(type);
+        data.setNew(true);
+        if (type.hasOID() && (data.getOID() == null)) {
+            data.setOID(this.provider.createNewOID());
+        } else {
+            data.setOID(this.getTemporalOID());
+        }
+        return data;
+
+    }
+
+    public EditableFeature createNewFeature(FeatureType type,
+        boolean defaultValues) throws DataException {
+        try {
+            FeatureProvider data = createNewFeatureProvider(type);
+            DefaultEditableFeature feature =
+                new DefaultEditableFeature(this, data);
+            if (defaultValues) {
+                feature.initializeValues();
+            }
+            return feature;
+        } catch (Exception e) {
+            throw new CreateFeatureException(e, getName());
+        }
+    }
+
+    public EditableFeature createNewFeature(boolean defaultValues)
+        throws DataException {
+        return this.createNewFeature(this.getDefaultFeatureType(),
+            defaultValues);
+    }
+
+    public EditableFeature createNewFeature() throws DataException {
+        return this.createNewFeature(this.getDefaultFeatureType(), true);
+    }
+
+    public EditableFeatureType createFeatureType() {
+        DefaultEditableFeatureType ftype = new DefaultEditableFeatureType();
+        return ftype;
+    }
+
+    public EditableFeatureType createFeatureType(String id) {
+        DefaultEditableFeatureType ftype = new DefaultEditableFeatureType(id);
+        return ftype;
+    }
+
+    //
+    // ====================================================================
+    // Index related methods
+    //
+
+    public FeatureIndexes getIndexes() {
+        return this.indexes;
+    }
+
+    public FeatureIndex createIndex(FeatureType featureType,
+        String attributeName, String indexName) throws DataException {
+        return createIndex(null, featureType, attributeName, indexName);
+    }
+
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName)
+        throws DataException {
+
+        return createIndex(indexTypeName, featureType, attributeName,
+            indexName, false, null);
+    }
+
+    public FeatureIndex createIndex(FeatureType featureType,
+        String attributeName, String indexName, Observer observer)
+        throws DataException {
+        return createIndex(null, featureType, attributeName, indexName,
+            observer);
+    }
+
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName,
+        final Observer observer) throws DataException {
+
+        return createIndex(indexTypeName, featureType, attributeName,
+            indexName, true, observer);
+    }
+
+    private FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName,
+        boolean background, final Observer observer) throws DataException {
+
+        checkNotInAppendMode();
+        FeatureIndexProviderServices index = null;
+        index =
+            dataManager.createFeatureIndexProvider(indexTypeName, this,
+                featureType, indexName,
+                featureType.getAttributeDescriptor(attributeName));
+
+        try {
+            index.fill(background, observer);
+        } catch (FeatureIndexException e) {
+            throw new InitializeException(index.getName(), e);
+        }
+
+        ((DefaultFeatureIndexes) getIndexes()).addIndex(index);
+        return index;
+    }
+
+    //
+    // ====================================================================
+    // Transforms related methods
+    //
+
+    public FeatureStoreTransforms getTransforms() {
+        return this.transforms;
+    }
+
+    public FeatureQuery createFeatureQuery() {
+        return new DefaultFeatureQuery();
+    }
+
+    public DataQuery createQuery() {
+        return createFeatureQuery();
+    }
+
+    //
+    // ====================================================================
+    // UndoRedo related methods
+    //
+
+    public boolean canRedo() {
+        return commands.canRedo();
+    }
+
+    public boolean canUndo() {
+        return commands.canUndo();
+    }
+
+    public void redo(int num) throws RedoException {
+        for (int i = 0; i < num; i++) {
+            redo();
+        }
+    }
+
+    public void undo(int num) throws UndoException {
+        for (int i = 0; i < num; i++) {
+            undo();
+        }
+    }
+
+    //
+    // ====================================================================
+    // Metadata related methods
+    //
+
+    public Object getMetadataID() {
+        return this.provider.getSourceId();
+    }
+
+    public void delegate(DynObject dynObject) {
+        this.metadata.delegate(dynObject);
+    }
+
+    public DynClass getDynClass() {
+        return this.metadata.getDynClass();
+    }
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		if( this.transforms.hasDynValue(name) ) {
+			return this.transforms.getDynValue(name);
+		}
+		if (this.metadata.hasDynValue(name)) {
+			return this.metadata.getDynValue(name);
+		}
+		if (METADATA_PROVIDER.equalsIgnoreCase(name)) {
+			return this.provider.getProviderName();
+		} else if (METADATA_CONTAINERNAME.equalsIgnoreCase(name)) {
+			return this.provider.getSourceId();
+		} else if (METADATA_FEATURETYPE.equalsIgnoreCase(name)) {
+			try {
+				return this.getDefaultFeatureType();
+			} catch (DataException e) {
+				return null;
+			}
+		}
+		return this.metadata.getDynValue(name);
+	}
+
+    public boolean hasDynValue(String name) {
+		if( this.transforms.hasDynValue(name) ) {
+			return true;
+		}
+        return this.metadata.hasDynValue(name);
+    }
+
+    public void implement(DynClass dynClass) {
+        this.metadata.implement(dynClass);
+    }
+
+    public Object invokeDynMethod(String name, DynObject context)
+        throws DynMethodException {
+        return this.metadata.invokeDynMethod(this, name, context);
+    }
+
+    public Object invokeDynMethod(int code, DynObject context)
+        throws DynMethodException {
+        return this.metadata.invokeDynMethod(this, code, context);
+    }
+
+    public void setDynValue(String name, Object value)
+        throws DynFieldNotFoundException {
+		if( this.transforms.hasDynValue(name) ) {
+			this.transforms.setDynValue(name, value);
+			return;
+		}
+        this.metadata.setDynValue(name, value);
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.metadata.Metadata#getMetadataChildren()
+     */
+    public Set getMetadataChildren() {
+        return this.metadataChildren;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.metadata.Metadata#getMetadataName()
+     */
+    public String getMetadataName() {
+        return this.provider.getProviderName();
+    }
+
+    public FeatureTypeManager getFeatureTypeManager() {
+        return this.featureTypeManager;
+    }
+
+    public long getFeatureCount() throws DataException {
+        if (featureCount == null) {
+            featureCount = new Long(this.provider.getFeatureCount());
+        }
+        if (this.isEditing() && !this.isAppending()) {
+            return featureCount.longValue()
+                - this.featureManager.getDeltaSize();
+        }
+        return featureCount.longValue();
+    }
+
+    private Long getTemporalOID() {
+        return new Long(this.temporalOid++);
+    }
+
+    public FeatureType getProviderFeatureType(String featureTypeId) {
+        if (featureTypeId == null) {
+            return this.defaultFeatureType;
+        }
+        FeatureType type;
+        Iterator iter = this.featureTypes.iterator();
+        while (iter.hasNext()) {
+            type = (FeatureType) iter.next();
+            if (type.getId().equals(featureTypeId)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public FeatureProvider getFeatureProviderFromFeature(Feature feature) {
+        return ((DefaultFeature) feature).getData();
+    }
+
+    public DataStore getStore() {
+        return this;
+    }
+
+    public FeatureStore getFeatureStore() {
+        return this;
+    }
+
+    public void createCache(String name, DynObject parameters)
+        throws DataException {
+        cache = dataManager.createFeatureCacheProvider(name, parameters);
+        if (cache == null) {
+            throw new CreateException("FeaureCacheProvider", null);
+        }
+        cache.apply(this, provider);
+        provider = cache;
+
+        featureCount = null;
+    }
+
+    public FeatureCache getCache() {
+        return cache;
+    }
+
+    public void clear() {
+        if (metadata != null) {
+            metadata.clear();
+        }
+    }
+
+    public String getName() {
+        return this.provider.getName();
+    }
+
+    public String getFullName() {
+        try {
+            return this.provider.getFullName();
+        } catch(Throwable th) {
+            return null;
+        }
+    }
+
+    public String getProviderName() {
+        return this.provider.getProviderName();
+    }
+
+    public boolean isKnownEnvelope() {
+        return this.provider.isKnownEnvelope();
+    }
+
+    public boolean hasRetrievedFeaturesLimit() {
+        return this.provider.hasRetrievedFeaturesLimit();
+    }
+
+    public int getRetrievedFeaturesLimit() {
+        return this.provider.getRetrievedFeaturesLimit();
+    }
+
+    public Interval getInterval() {
+        return this.provider.getInterval();
+    }
+
+    public Collection getTimes() {
+        return this.provider.getTimes();
+    }
+
+    public Collection getTimes(Interval interval) {
+        return this.provider.getTimes(interval);
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#clone()
+     */
+    public Object clone() throws CloneNotSupportedException {
+
+        DataStoreParameters dsp = getParameters();
+
+        DefaultFeatureStore cloned_store = null;
+
+        try {
+            cloned_store = (DefaultFeatureStore) DALLocator.getDataManager().
+                openStore(this.getProviderName(), dsp);
+            if (transforms != null) {
+                cloned_store.transforms = (DefaultFeatureStoreTransforms) transforms.clone();
+                cloned_store.transforms.setStoreForClone(cloned_store);
+            }
+        } catch (Exception e) {
+            throw new CloneException(e);
+        }
+        return cloned_store;
+
+    }
+
+    public Feature getFeature(DynObject dynobject) {
+        if (dynobject instanceof DynObjectFeatureFacade){
+            Feature f = ((DynObjectFeatureFacade)dynobject).getFeature();
+            return f;
+        }
+        return null;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureAttributeDescriptor.java	(revision 42196)
@@ -0,0 +1,288 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.text.DateFormat;
+import java.util.HashMap;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeIntegrityException;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeSizeException;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public class DefaultEditableFeatureAttributeDescriptor extends
+    DefaultFeatureAttributeDescriptor implements
+    EditableFeatureAttributeDescriptor {
+    
+    private static Logger logger = LoggerFactory.getLogger(
+        DefaultEditableFeatureAttributeDescriptor.class);
+
+    private DefaultFeatureAttributeDescriptor source;
+    private boolean hasStrongChanges;
+    private String originalName = null;
+
+    protected DefaultEditableFeatureAttributeDescriptor(
+        DefaultFeatureAttributeDescriptor other) {
+        super(other);
+        if (other instanceof DefaultEditableFeatureAttributeDescriptor) {
+            DefaultEditableFeatureAttributeDescriptor other_edi =
+                (DefaultEditableFeatureAttributeDescriptor) other;
+            originalName = other_edi.getOriginalName();
+            this.source = other_edi.getSource();
+        } else {
+            this.source = other;
+        }
+        hasStrongChanges = false;
+    }
+
+    public DefaultEditableFeatureAttributeDescriptor() {
+        super();
+        this.source = null;
+        hasStrongChanges = false;
+    }
+
+    public DefaultFeatureAttributeDescriptor getSource() {
+        return this.source;
+    }
+
+    public void fixAll() {
+    }
+
+    public void checkIntegrity() throws AttributeFeatureTypeIntegrityException {
+        AttributeFeatureTypeIntegrityException ex =
+            new AttributeFeatureTypeIntegrityException(getName());
+        if (this.size < 0) {
+            ex.add(new AttributeFeatureTypeSizeException(this.size));
+        }
+
+        if( this.dataType.isObject() && this.objectClass == null ) {
+            logger.warn("Incorrect data type object, objectClass is null.");
+            ex.add(new AttributeFeatureTypeIntegrityException(this.name));
+        }
+        
+        // TODO: Add other integrity checks...
+
+        if (ex.size() > 0) {
+            throw ex;
+        }
+    }
+
+    public EditableFeatureAttributeDescriptor setAllowNull(boolean allowNull) {
+        this.allowNull = allowNull;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setDataType(int type) {
+        this.dataType = ToolsLocator.getDataTypesManager().get(type);
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setDefaultValue(
+        Object defaultValue) {
+        this.defaultValue = defaultValue;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setEvaluator(Evaluator evaluator) {
+        if (this.evaluator != null && evaluator == null) {
+            hasStrongChanges = true;
+        }
+        this.evaluator = evaluator;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(FeatureAttributeEmulator featureAttributeEmulator) {
+        this.featureAttributeEmulator = featureAttributeEmulator;
+        return this;
+    }
+        
+    public EditableFeatureAttributeDescriptor setGeometryType(int type) {
+        this.geometryType = type;
+        this.geomType = null;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setGeometrySubType(int subType) {
+        this.geometrySubType = subType;
+        this.geomType = null;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setGeometryType(
+        GeometryType geometryType) {
+        this.geomType = geometryType;
+        this.geometryType = this.geomType.getType();
+        this.geometrySubType = this.geomType.getSubType();
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsPrimaryKey(
+        boolean isPrimaryKey) {
+        this.primaryKey = isPrimaryKey;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsReadOnly(boolean isReadOnly) {
+        this.readOnly = isReadOnly;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setMaximumOccurrences(
+        int maximumOccurrences) {
+        this.maximumOccurrences = maximumOccurrences;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setMinimumOccurrences(
+        int minimumOccurrences) {
+        this.minimumOccurrences = minimumOccurrences;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setName(String name) {
+        if (originalName == null) {
+            originalName = this.name;
+            hasStrongChanges = true;
+        }
+        this.name = name;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+    
+    public String getOriginalName() {
+        return originalName;
+    }
+
+    public EditableFeatureAttributeDescriptor setObjectClass(Class theClass) {
+        this.objectClass = theClass;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setPrecision(int precision) {
+        this.precision = precision;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setSRS(IProjection SRS) {
+        this.SRS = SRS;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setSize(int size) {
+        this.size = size;
+        if (this.evaluator != null) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public boolean hasStrongChanges() {
+        return hasStrongChanges;
+    }
+
+    public EditableFeatureAttributeDescriptor setAdditionalInfo(
+        String infoName, Object value) {
+        if (this.additionalInfo == null) {
+            this.additionalInfo = new HashMap();
+        }
+        this.additionalInfo.put(infoName, value);
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsAutomatic(boolean isAutomatic) {
+        this.isAutomatic = isAutomatic;
+        return this;
+    }
+    
+    public EditableFeatureAttributeDescriptor setIsTime(boolean isTime) {
+            this.isTime = isTime;
+            if( this.evaluator != null ) {
+        hasStrongChanges=true;
+    }
+            return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setDateFormat(DateFormat dateFormat) {
+        this.dateFormat = dateFormat;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsIndexed(boolean isIndexed) {
+        this.indexed = isIndexed;
+        return this;
+    }
+    
+    public EditableFeatureAttributeDescriptor setAllowIndexDuplicateds(boolean allowDuplicateds) {
+        this.allowIndexDuplicateds = allowDuplicateds;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsIndexAscending(boolean ascending) {
+        this.isIndexAscending = ascending;
+        return this;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureAttributeDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReference.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReference.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReference.java	(revision 42196)
@@ -0,0 +1,317 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.lang.ref.WeakReference;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class DefaultFeatureReference implements
+		FeatureReferenceProviderServices, Persistent {
+
+	private Object oid;
+	private Integer myHashCode = null;
+	private Object[] pk;
+	private String[] pkNames;
+	private WeakReference storeRef;
+	private boolean isNewFeature;
+	private String featureTypeId;
+	 
+	/**
+     * Constructor used by the persistence manager. Don't use directly.
+     * After to invoke this method, the persistence manager calls 
+     * the the method {@link #loadFromState(PersistentState)} to set 
+     * the values of the internal attributes that this class needs to work.
+     */
+	public DefaultFeatureReference() {
+		super();		
+	}
+	
+	public DefaultFeatureReference(DefaultFeature feature) {
+		this(feature.getStore(), feature.getData());
+	}
+
+	public DefaultFeatureReference(FeatureStore store,
+			FeatureProvider fdata) {
+		this.isNewFeature = fdata.isNew();
+		this.oid = null;
+		this.pk = null;
+		this.storeRef = new WeakReference(store);
+		this.featureTypeId = fdata.getType().getId();
+
+		if (fdata.getType().hasOID() || isNewFeature) {
+			this.oid = fdata.getOID();
+			if (this.oid == null) {
+				// FIXME Exception
+				throw new RuntimeException("Missing OID");
+			}
+		} else {
+			this.calculatePK(fdata);
+			if (this.pk == null) {
+				// FIXME Exception
+				throw new RuntimeException("Missing pk attributes");
+			}
+		}
+
+	}
+
+	/*
+	 * Use only for Persistent.setState
+	 */
+	public DefaultFeatureReference(FeatureStore store) {
+		this.isNewFeature = false;
+		this.oid = null;
+		this.pk = null;
+		this.storeRef = new WeakReference(store);
+	}
+
+	public DefaultFeatureReference(FeatureStore store, Object oid) {
+		// FIXME featureTypeId is needed !!!
+		this.isNewFeature = false;
+		this.oid = oid;
+		this.pk = null;
+		this.storeRef = new WeakReference(store);
+	}
+
+	private DefaultFeatureStore getStore() {
+		return (DefaultFeatureStore) this.storeRef.get();
+	}
+
+	private void calculatePK(FeatureProvider fdata) {
+		ArrayList keys = new ArrayList();
+		ArrayList keyNames = new ArrayList();
+		FeatureType type = fdata.getType();
+		Iterator it = type.iterator();
+		while (it.hasNext()) {
+			FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) it
+					.next();
+			if (attr.isPrimaryKey()) {
+				keys.add(fdata.get(attr.getIndex()));
+				keyNames.add(attr.getName());
+			}
+		}
+		if (keys.size() < 1) {
+			pk = null;
+			pkNames = null;
+		} else {
+			pk = keys.toArray();
+            pkNames = (String[]) keyNames.toArray(new String[keyNames.size()]);
+		}
+	}
+
+	public Feature getFeature() throws DataException {
+		return this.getStore().getFeatureByReference(this);
+	}
+
+	public Feature getFeature(FeatureType featureType) throws DataException {
+		return this.getStore().getFeatureByReference(this, featureType);
+	}
+
+	public Object getOID() {
+		return this.oid;
+	}
+
+	public boolean isNewFeature() {
+		return this.isNewFeature;
+	}
+
+
+	public boolean equals(Object obj) {
+		if (!(obj instanceof DefaultFeatureReference)) {
+			return false;
+		}
+		DefaultFeatureReference other = (DefaultFeatureReference) obj;
+
+		FeatureStore otherStore = (FeatureStore) other.storeRef.get();
+		FeatureStore myrStore = (FeatureStore) this.storeRef.get();
+		if (otherStore == null || myrStore == null) {
+			return false;
+		}
+		if (!myrStore.equals(otherStore)) {
+			return false;
+		}
+		if (myHashCode != null && other.myHashCode != null) {
+			return myHashCode.equals(other.myHashCode);
+		}
+		if (this.oid != null) {
+			return this.oid.equals(other.oid);
+		}
+		if(pk != null) {
+			if(other.pk == null) {
+				return false;
+			}
+    		for (int i = 0; i < this.pk.length; i++) {
+    			if (!this.pk[i].equals(other.pk[i])) {
+    				return false;
+    			}
+    		}
+		}
+		return true;
+	}
+
+	public int hashCode() {
+		if (this.oid != null) {
+			return this.oid.hashCode();
+		}
+		if (myHashCode == null) {
+			StringBuffer buff = new StringBuffer();
+
+			for (int i = 0; i < this.pk.length; i++) {
+				buff.append(this.pk[i].hashCode());
+				buff.append("##");
+			}
+			myHashCode = new Integer(buff.toString().hashCode());
+		}
+		return myHashCode.intValue();
+	}
+
+	public String[] getKeyNames() {
+		return pkNames;
+	}
+
+	public Object getKeyValue(String name) {
+		for (int i = 0; i < pkNames.length; i++) {
+			if (pkNames[i].equalsIgnoreCase(name)) {
+				return pk[i];
+			}
+		}
+		// FIXME exception????
+		return null;
+	}
+
+	public String getFeatureTypeId() {
+		return featureTypeId;
+	}
+
+	// *** Persistence ***
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		this.oid = state.get("oid");
+		this.myHashCode = (Integer) state.get("myHashCode");
+		this.storeRef = new WeakReference(state.get("store"));
+		this.isNewFeature = state.getBoolean("isNewFeature");
+		this.featureTypeId = state.getString("featureTypeId");
+		List pkList = (List) state.get("pk");
+		if (pkList != null) {
+			List pkNamesList = (List) state.get("pkNames");
+			if (pkNamesList == null || pkList.size() != pkNamesList.size()) {
+				throw new PersistenceException("bad pkNames value");
+			}
+			this.pk = pkList.toArray();
+            this.pkNames =
+                (String[]) pkNamesList.toArray(new String[pkList.size()]);
+		} else {
+			this.pk = null;
+			this.pkNames = null;
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("oid", oid);
+		state.set("myHashCode", myHashCode);
+		state.set("isNewFeature", isNewFeature);
+		state.set("store", (Persistent) storeRef.get());
+		state.set("featureTypeId", featureTypeId);
+		if (pk == null) {
+			state.setNull("pk");
+			state.setNull("pkNames");
+		} else {
+			state.set("pk", pk);
+			state.set("pkNames", pkNames);
+		}
+
+	}
+
+	public static void registerPersistent() {
+		DynStruct definition = ToolsLocator.getPersistenceManager().addDefinition(
+				DefaultFeatureReference.class, 
+				"Reference", 
+				"DefaultFeatureReference Persistent definition", 
+				null, 
+				null
+			);
+
+		definition.addDynFieldObject("oid")
+			.setClassOfValue(Object.class)
+			.setMandatory(false)
+			.setPersistent(true);
+			
+		definition.addDynFieldBoolean("isNewFeature")
+			.setMandatory(true)
+			.setPersistent(true);
+	
+		definition.addDynFieldObject("store")
+			.setClassOfValue(FeatureStore.class)
+			.setMandatory(true)
+			.setPersistent(true);
+
+		definition.addDynFieldInt("myHashCode")
+			.setMandatory(false)
+			.setPersistent(true);
+	
+		definition.addDynFieldString("featureTypeId")
+			.setMandatory(true)
+			.setPersistent(true);
+
+		definition.addDynFieldArray("pk")
+			.setClassOfItems(Object.class)
+			.setMandatory(false)
+			.setPersistent(true);
+
+        definition.addDynFieldArray("pkNames")
+			.setClassOfItems(String.class)
+			.setMandatory(false)
+			.setPersistent(true);
+
+	}
+
+	public String toString() {
+		return MessageFormat.format(
+				"FeatureReference: oid = {0}, myHashCode = {1}, "
+				+ "pks = {2}, pkNames = {3}, "
+				+ "isNewFeature = {4}, featureTypeId = {5}", new Object[] {
+				oid, myHashCode, (pk == null ? null : Arrays.asList(pk)),
+				(pkNames == null ? null : Arrays.asList(pkNames)),
+				new Boolean(isNewFeature),
+				featureTypeId });
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReference.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndexes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndexes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndexes.java	(revision 42196)
@@ -0,0 +1,253 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorFieldValue;
+import org.gvsig.tools.evaluator.EvaluatorFieldValueMatch;
+import org.gvsig.tools.evaluator.EvaluatorFieldValueNearest;
+import org.gvsig.tools.evaluator.EvaluatorFieldValueRange;
+
+/**
+ * This class provides access to a FeatureStore local indexes and also decides
+ * which index to use given an evaluator containing the filter expression.
+ * 
+ * @author jyarza
+ */
+public class DefaultFeatureIndexes implements FeatureIndexes {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultFeatureIndexes.class);
+    // Access by index name
+    private Map names;
+    // Store to which this belongs
+    private DefaultFeatureStore store;
+
+    /**
+     * Creates an empty DataIndexes for the given FeatureStore
+     * 
+     * @param store
+     *            FeatureStore to whom this belongs
+     * @throws DataException
+     */
+    public DefaultFeatureIndexes(DefaultFeatureStore store)
+        throws DataException {
+        names = new HashMap();
+        this.store = store;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.fmap.dal.index.DataIndexes#getDataIndex(java.lang.String)
+     */
+    public FeatureIndex getFeatureIndex(String name) {
+        return (FeatureIndex) names.get(name);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.gvsig.fmap.dal.index.DataIndexes#addIndex(org.gvsig.fmap.dal.feature
+     * .FeatureType,
+     * java.lang.String, org.gvsig.fmap.dal.feature.DataIndex)
+     */
+    public void addIndex(FeatureIndexProviderServices index) {
+        // By name
+        names.put(index.getName(), index);
+    }
+
+    public Iterator iterator() {
+        return names.values().iterator();
+    }
+
+    /**
+     * Using the given evaluator attributes, choose and use an appropriate index
+     * to obtain a FeatureSet. If no index can be applied, then this method
+     * returns null
+     * 
+     * @param evaluator
+     * @return FeatureSet or null if could not find any appropriate index.
+     * @throws FeatureIndexException
+     * 
+     */
+    public FeatureSet getFeatureSet(Evaluator evaluator)
+        throws FeatureIndexException {
+
+        class ApplyIndex {
+
+            DefaultFeatureIndex index;
+            EvaluatorFieldValue[] data;
+
+            ApplyIndex(DefaultFeatureIndex index, EvaluatorFieldValue[] data) {
+                this.index = index;
+                this.data = data;
+            }
+
+            /**
+             * Checks whether the index supports the evaluator request
+             * 
+             * @return
+             */
+            boolean isSupported() {
+                switch (data[0].getType()) {
+                case EvaluatorFieldValue.MATCH:
+                    return index.getFeatureIndexProvider().isMatchSupported();
+                case EvaluatorFieldValue.NEAREST:
+                    return index.getFeatureIndexProvider().isNearestSupported();
+                case EvaluatorFieldValue.RANGE:
+                    return index.getFeatureIndexProvider().isRangeSupported();
+                default:
+                    return false;
+                }
+            }
+
+            /**
+             * Applies the index using the evaluator fields
+             * 
+             * @return FeatureSet with the result
+             * @throws FeatureIndexException
+             */
+            IndexFeatureSet apply() throws FeatureIndexException {
+
+                EvaluatorFieldValueRange rangeField;
+                EvaluatorFieldValueNearest nearestField;
+                // Trick: we know DefaultIndexProvider returns an
+                // IndexFeatureSet,
+                // which implements both FeatureSetProvider and FeatureSet.
+                switch (data[0].getType()) {
+                case EvaluatorFieldValue.MATCH:
+                    return (IndexFeatureSet) index
+                        .getMatchFeatureSet(((EvaluatorFieldValueMatch) data[0])
+                            .getValue());
+                case EvaluatorFieldValue.RANGE:
+                    rangeField = (EvaluatorFieldValueRange) data[0];
+                    return (IndexFeatureSet) index.getRangeFeatureSet(
+                        rangeField.getValue1(), rangeField.getValue2());
+                case EvaluatorFieldValue.NEAREST:
+                    nearestField = (EvaluatorFieldValueNearest) data[0];
+                    if ((nearestField.getTolerance() == null)
+                        || (!isSupported())) {
+                        return (IndexFeatureSet) index.getNearestFeatureSet(
+                            nearestField.getCount(), nearestField.getValue());
+                    } else {
+                        return (IndexFeatureSet) index.getNearestFeatureSet(
+                            nearestField.getCount(), nearestField.getValue(),
+                            nearestField.getTolerance());
+                    }
+                }
+                return null;
+            }
+        }
+
+        // Select applicable indexes
+        List applyIndexes = new ArrayList();
+        Iterator indexes = this.iterator();
+        while (indexes.hasNext()) {
+            DefaultFeatureIndex index = (DefaultFeatureIndex) indexes.next();
+            if (index.isValid()) {
+                String[] attrs =
+                    (String[]) index.getAttributeNames().toArray(new String[0]);
+                for (int i = 0; i < attrs.length; i++) {
+                    String attrname = attrs[i];
+                    EvaluatorFieldValue[] values = null;
+                    if (evaluator.getFieldsInfo() != null) {
+                        values =
+                            evaluator.getFieldsInfo().getFieldValues(attrname);
+                    }
+                    if (values != null) {
+                        applyIndexes.add(new ApplyIndex(index, values));
+                        break;
+                    }
+                }
+            }
+        }
+
+        // If there's not any applicable index, return null
+        if (applyIndexes.size() == 0) {
+            return null;
+        }
+
+        // Lookup an index with support for the requested function
+        Iterator it = applyIndexes.iterator();
+        ApplyIndex index = (ApplyIndex) it.next();
+        while (it.hasNext() && (!index.isSupported())) {
+            index = (ApplyIndex) it.next();
+        }
+
+        // If there is not any any index supporting the function, use the
+        // first one
+        if (!index.isSupported()) {
+            LOG.info("No index support for the evaluator values. Using default index.");
+            index = (ApplyIndex) applyIndexes.get(0);
+        }
+
+        // Apply index
+        return index.apply();
+
+    }
+
+    public boolean areValid() {
+        Iterator indexes = this.iterator();
+        while (indexes.hasNext()) {
+            FeatureIndex index = (FeatureIndex) indexes.next();
+            if (!index.isValid()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public String toString() {
+        StringBuffer text = new StringBuffer(super.toString());
+        text.append(": [");
+        Iterator indexes = this.iterator();
+        while (indexes.hasNext()) {
+            FeatureIndex index = (FeatureIndex) indexes.next();
+            text.append(index);
+            text.append("]");
+            if (indexes.hasNext()) {
+                text.append(", ");
+            }
+        }
+        return text.toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndexes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureAttributeDescriptor.java	(revision 42196)
@@ -0,0 +1,690 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.text.DateFormat;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynField_LabelAttribute;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldIsNotAContainerException;
+import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class DefaultFeatureAttributeDescriptor implements
+    FeatureAttributeDescriptor, Persistent, DynField, DynField_LabelAttribute {
+
+    protected boolean allowNull;
+    protected DataType dataType;
+    protected DateFormat dateFormat;
+    protected Object defaultValue;
+    protected int index;
+    protected int maximumOccurrences;
+    protected int minimumOccurrences;
+    protected int size;
+    protected String name;
+    protected Class objectClass;
+    protected int precision;
+    protected Evaluator evaluator;
+    protected boolean primaryKey;
+    protected boolean readOnly;
+    protected IProjection SRS;
+    protected GeometryType geomType;
+    protected int geometryType;
+    protected int geometrySubType;
+    protected Map additionalInfo;
+    protected boolean isAutomatic;
+    protected boolean isTime = false;
+    protected FeatureAttributeGetter featureAttributeGetter = null;
+    protected FeatureAttributeEmulator featureAttributeEmulator = null;
+    protected boolean indexed = false;
+    protected boolean isIndexAscending = true;
+    protected boolean allowIndexDuplicateds = true;
+
+    protected DefaultFeatureAttributeDescriptor() {
+        this.allowNull = true;
+        this.dataType = null;
+        this.dateFormat = null;
+        this.defaultValue = null;
+        this.index = -1;
+        this.maximumOccurrences = 0;
+        this.minimumOccurrences = 0;
+        this.size = 0;
+        this.name = null;
+        this.objectClass = null;
+        this.precision = 0;
+        this.evaluator = null;
+        this.primaryKey = false;
+        this.readOnly = false;
+        this.SRS = null;
+        this.geometryType = Geometry.TYPES.NULL;
+        this.geometrySubType = Geometry.SUBTYPES.UNKNOWN;
+        this.additionalInfo = null;
+        this.isAutomatic = false;
+    }
+
+    protected DefaultFeatureAttributeDescriptor(
+        DefaultFeatureAttributeDescriptor other) {
+        this.allowNull = other.allowNull;
+        this.dataType = other.dataType;
+        this.dateFormat = other.dateFormat;
+        this.defaultValue = other.defaultValue;
+        this.index = other.index;
+        this.maximumOccurrences = other.maximumOccurrences;
+        this.minimumOccurrences = other.minimumOccurrences;
+        this.size = other.size;
+        this.name = other.name;
+        this.objectClass = other.objectClass;
+        this.precision = other.precision;
+        this.evaluator = other.evaluator;
+        this.primaryKey = other.primaryKey;
+        this.readOnly = other.readOnly;
+        this.SRS = other.SRS;
+        this.geometryType = other.geometryType;
+        this.geometrySubType = other.geometrySubType;
+        this.geomType = other.geomType;
+        if (other.additionalInfo != null) {
+            Iterator iter = other.additionalInfo.entrySet().iterator();
+            Map.Entry entry;
+            this.additionalInfo = new HashMap();
+            while (iter.hasNext()) {
+                entry = (Entry) iter.next();
+                this.additionalInfo.put(entry.getKey(), entry.getValue());
+            }
+        } else {
+            this.additionalInfo = null;
+        }
+        this.isAutomatic = other.isAutomatic;
+        this.isTime = other.isTime;
+        this.featureAttributeEmulator = other.featureAttributeEmulator;
+        this.indexed = other.indexed;
+        this.isIndexAscending = other.isIndexAscending;
+        this.allowIndexDuplicateds = other.allowIndexDuplicateds;
+    }
+
+    public String getDataTypeName() {
+		if( this.getDataType() == null ) {
+            return "(unknow)";
+        }
+		return this.getDataType().getName();
+    }
+
+    public FeatureAttributeDescriptor getCopy() {
+        return new DefaultFeatureAttributeDescriptor(this);
+    }
+
+    public boolean allowNull() {
+        return allowNull;
+    }
+
+    public DataType getDataType() {
+		if (featureAttributeGetter != null){
+		    return featureAttributeGetter.getDataType();
+		}
+        return this.dataType;
+    }
+
+    public DateFormat getDateFormat() {
+        return this.dateFormat;
+    }
+
+    public Object getDefaultValue() {
+        return this.defaultValue;
+    }
+
+    public Evaluator getEvaluator() {
+        return this.evaluator;
+    }
+
+    public int getGeometryType() {
+        return this.geometryType;
+    }
+
+    public int getGeometrySubType() {
+        return this.geometrySubType;
+    }
+
+    public GeometryType getGeomType() {
+        if (this.geomType == null) {
+            try {
+                this.geomType =
+                    GeometryLocator.getGeometryManager().getGeometryType(
+                        this.geometryType, this.geometrySubType);
+            } catch (GeometryException e) {
+                throw new RuntimeException(
+                    "Error getting geometry type with type = "
+                        + this.geometryType + ", subtype = "
+                        + this.geometrySubType, e);
+            }
+        }
+        return this.geomType;
+    }
+
+    public int getIndex() {
+        return this.index;
+    }
+
+    protected FeatureAttributeDescriptor setIndex(int index) {
+        this.index = index;
+        return this;
+    }
+
+    public int getMaximumOccurrences() {
+        return this.maximumOccurrences;
+    }
+
+    public int getMinimumOccurrences() {
+        return this.minimumOccurrences;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public Class getObjectClass() {
+		if (getDataType().getType() == DataTypes.OBJECT) {
+            return objectClass;
+        }
+		return getDataType().getDefaultClass();
+    }
+
+    public int getPrecision() {
+        return this.precision;
+    }
+
+    public IProjection getSRS() {
+        return this.SRS;
+    }
+
+    public int getSize() {
+        return this.size;
+    }
+
+    public boolean isPrimaryKey() {
+        return this.primaryKey;
+    }
+
+    public boolean isReadOnly() {
+        if( this.readOnly ) {
+            return true;
+        }
+        if( this.getEvaluator()!=null ) {
+            return true;
+        }
+        if( this.featureAttributeEmulator!=null ) {
+            return !this.featureAttributeEmulator.allowSetting();
+        }
+        return false;
+    }
+
+    public Object getAdditionalInfo(String infoName) {
+        if (this.additionalInfo == null) {
+            return null;
+        }
+        return this.additionalInfo.get(infoName);
+    }
+
+    public boolean isAutomatic() {
+        return this.isAutomatic;
+    }
+
+    private boolean compareObject(Object a, Object b) {
+        if (a != b) {
+            if (a == null) {
+                return false;
+            }
+            return a.equals(b);
+        }
+        return true;
+
+    }
+
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof DefaultFeatureAttributeDescriptor)) {
+            return false;
+        }
+        DefaultFeatureAttributeDescriptor other =
+            (DefaultFeatureAttributeDescriptor) obj;
+
+        if (this.allowNull != other.allowNull) {
+            return false;
+        }
+
+        if (this.index != other.index) {
+            return false;
+        }
+
+        if (!compareObject(this.name, other.name)) {
+            return false;
+        }
+
+		if (this.getDataType() != other.getDataType()) {
+            return false;
+        }
+
+        if (this.size != other.size) {
+            return false;
+        }
+
+        if (!compareObject(this.defaultValue, other.defaultValue)) {
+            return false;
+        }
+
+        if (!compareObject(this.defaultValue, other.defaultValue)) {
+            return false;
+        }
+
+        if (this.primaryKey != other.primaryKey) {
+            return false;
+        }
+
+        if (this.isAutomatic != other.isAutomatic) {
+            return false;
+        }
+
+        if (this.readOnly != other.readOnly) {
+            return false;
+        }
+
+        if (this.precision != other.precision) {
+            return false;
+        }
+
+        if (this.maximumOccurrences != other.maximumOccurrences) {
+            return false;
+        }
+
+        if (this.minimumOccurrences != other.minimumOccurrences) {
+            return false;
+        }
+
+        if (this.geometryType != other.geometryType) {
+            return false;
+        }
+
+        if (this.geometrySubType != other.geometrySubType) {
+            return false;
+        }
+
+        if (!compareObject(this.evaluator, other.evaluator)) {
+            return false;
+        }
+
+        if (!compareObject(this.SRS, other.SRS)) {
+            return false;
+        }
+
+        if (!compareObject(this.dateFormat, other.dateFormat)) {
+            return false;
+        }
+
+        if (!compareObject(this.objectClass, other.objectClass)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    public void loadFromState(PersistentState state)
+        throws PersistenceException {
+        allowNull = state.getBoolean("allowNull");
+        dataType =
+            ToolsLocator.getDataTypesManager().get(state.getInt("dataType"));
+        // FIXME how persist dateFormat ???
+        // dateFormat;
+        defaultValue = state.get("defaultValue");
+
+        index = state.getInt("index");
+        maximumOccurrences = state.getInt("maximumOccurrences");
+        minimumOccurrences = state.getInt("minimumOccurrences");
+        size = state.getInt("size");
+        name = state.getString("name");
+        try {
+            objectClass = Class.forName(state.getString("objectClass"));
+        } catch (ClassNotFoundException e) {
+            throw new PersistenceException(e);
+        }
+        precision = state.getInt("precision");
+        evaluator = (Evaluator) state.get("evaluator");
+        primaryKey = state.getBoolean("primaryKey");
+        readOnly = state.getBoolean("readOnly");
+        String srsId = state.getString("srsId");
+        if (srsId != null) {
+            SRS = CRSFactory.getCRS(srsId);
+        }
+        geometryType = state.getInt("geometryType");
+        geometrySubType = state.getInt("geometrySubType");
+        additionalInfo = (Map) state.get("aditionalInfo");
+        isAutomatic = state.getBoolean("isAutomatic");
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("allowNull", allowNull);
+        state.set("dataType", dataType);
+        // FIXME how persist dateFormat ???
+        // dateFormat;
+
+        defaultValue = state.get("defaultValue");
+
+        index = state.getInt("index");
+        maximumOccurrences = state.getInt("maximumOccurrences");
+        minimumOccurrences = state.getInt("minimumOccurrences");
+        size = state.getInt("size");
+        name = state.getString("name");
+        try {
+            objectClass = Class.forName(state.getString("objectClass"));
+        } catch (ClassNotFoundException e) {
+            throw new PersistenceException(e);
+        }
+        precision = state.getInt("precision");
+        evaluator = (Evaluator) state.get("evaluator");
+        primaryKey = state.getBoolean("primaryKey");
+        readOnly = state.getBoolean("readOnly");
+        String srsId = state.getString("srsId");
+        if (srsId != null) {
+            SRS = CRSFactory.getCRS(srsId);
+        }
+        geometryType = state.getInt("geometryType");
+        geometrySubType = state.getInt("geometrySubType");
+        additionalInfo = (Map) state.get("aditionalInfo");
+        isAutomatic = state.getBoolean("isAutomatic");
+    }
+
+    /**
+     * Start of DynField interface Implementation
+     * READONLY
+     */
+
+    public DynObjectValueItem[] getAvailableValues() {
+        return null;
+    }
+
+    public String getDescription() {
+        return getName();
+    }
+
+    public Object getMaxValue() {
+        return null;
+    }
+
+    public Object getMinValue() {
+        return null;
+    }
+
+    public int getTheTypeOfAvailableValues() {
+        return 0;
+    }
+
+    public int getType() {
+	    if (featureAttributeGetter != null){
+            return featureAttributeGetter.getDataType().getType();
+        }
+        return getDataType().getType();
+    }
+
+    public boolean isMandatory() {
+        return !allowNull() || isPrimaryKey();
+    }
+
+    public boolean isPersistent() {
+        return false;
+    }
+
+    public DynField setAvailableValues(DynObjectValueItem[] values) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setDescription(String description) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setMandatory(boolean mandatory) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setMaxValue(Object maxValue) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setMinValue(Object minValue) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setPersistent(boolean persistent) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setTheTypeOfAvailableValues(int type) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setType(int type) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setDefaultDynValue(Object defaultValue) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField addElementsType() throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException();
+    }
+
+    public Class getClassOfValue() {
+        return null;
+    }
+
+    public DynField getElementsType() {
+        return null;
+    }
+
+    public DynField setClassOfValue(Class theClass)
+        throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setElementsType(DynStruct type)
+        throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setElementsType(int type)
+        throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setSubtype(String subtype) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void validate(Object value) throws DynFieldValidateException {
+        
+        if (value == null && !this.allowNull()) {
+            throw new DynFieldValidateException(value, this, null);
+        }
+        
+        try {
+            this.dataType.coerce(value);
+        } catch (CoercionException e) {
+            throw new DynFieldValidateException(value, this, e);
+        }
+        
+        /*
+         * Other checks will be needed
+         */
+    }
+
+    public String getSubtype() {
+	    if (featureAttributeGetter != null){
+            return featureAttributeGetter.getDataType().getSubtype();
+        }       
+        return this.dataType.getSubtype();
+    }
+
+    public Object coerce(Object value) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setAvailableValues(List values) {
+        throw new UnsupportedOperationException();
+    }
+
+    public String getGroup() {
+        return null;
+    }
+
+    public int getOder() {
+        return 0;
+    }
+
+    public String getLabel() {
+        return this.getName();
+    }
+
+    public DynField setLabel(String label) {
+        throw new UnsupportedOperationException("Not supported yet."); 
+    }
+
+    public DynField setGroup(String groupName) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setOrder(int order) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setHidden(boolean hidden) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean isHidden() {
+        return false;
+    }
+
+    public DynField setReadOnly(boolean arg0) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean isContainer() {
+        return false;
+    }
+
+    public Class getClassOfItems() {
+        return null;
+    }
+
+    public DynField setDefaultFieldValue(Object defaultValue) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setClassOfItems(Class theClass) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField setType(DataType type) {
+        throw new UnsupportedOperationException();
+    }
+
+	public boolean isTime() {		
+		return isTime;
+	}
+
+    public FeatureAttributeGetter getFeatureAttributeGetter() {
+       return featureAttributeGetter;        
+    }
+
+    public void setFeatureAttributeGetter(
+        FeatureAttributeGetter featureAttributeTransform) {
+        this.featureAttributeGetter = featureAttributeTransform;              
+    }	
+
+    public FeatureAttributeEmulator getFeatureAttributeEmulator() {
+        return this.featureAttributeEmulator;
+    }
+
+    public boolean isIndexed() {
+        return this.indexed;
+    }
+
+    public boolean allowIndexDuplicateds() {
+        return this.allowIndexDuplicateds;
+    }
+
+    public boolean isIndexAscending() {
+        return this.isIndexAscending;
+    }
+
+    private class ConstantValueEvaluator extends AbstractEvaluator {
+        public Object evaluate(EvaluatorData data) throws EvaluatorException {
+            return defaultValue;
+        }
+        public String getName() {
+            return "Constant attribute "+name;
+        }
+    }
+
+    public void setConstantValue(boolean isConstantValue) {
+        if( isConstantValue ) {
+            /* Cuando un attributo tiene asociado un evaluador, este se interpreta
+             * como que no debe cargarse de la fuente de datos subyacente, siendo 
+             * el evaluador el que se encarga de proporcionar su valor.
+             * Nos limitamos a asignar un evaluador que retorna simpre el valor
+             * por defecto para ese attributo.
+             */
+            this.evaluator = new ConstantValueEvaluator();
+        } else {
+            this.evaluator = null;
+        }
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureAttributeDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreNotification.java	(revision 42196)
@@ -0,0 +1,124 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.tools.undo.command.Command;
+
+public class DefaultFeatureStoreNotification implements
+		FeatureStoreNotification {
+	private Feature feature = null;
+	private DataSet collectionResult = null;
+	private boolean loadCollectionSucefully = false;
+	private Exception exceptionLoading = null;
+	private Command command = null;
+	private EditableFeatureType featureType = null;
+	private String type;
+	private DataStore source;
+    private FeatureIndex index;
+
+	protected void init(DataStore source, String type) {
+		this.source = source;
+		this.type = type;
+	}
+
+	public DefaultFeatureStoreNotification(DataStore source, String type) {
+		this.init(source, type);
+	}
+
+	public DefaultFeatureStoreNotification(DataStore source, String type, Feature feature) {
+		this.init(source, type);
+		this.feature = feature;
+	}
+	public DefaultFeatureStoreNotification(DataStore source, String type, Command command) {
+		this.init(source, type);
+		this.command = command;
+	}
+
+	public DefaultFeatureStoreNotification(DataStore source, String type, Exception exception) {
+		this.init(source, type);
+		this.loadCollectionSucefully = false;
+		this.exceptionLoading = exception;
+	}
+
+	public DefaultFeatureStoreNotification(DataStore source, String type, DataSet collection) {
+		this.init(source, type);
+		this.loadCollectionSucefully = true;
+		this.collectionResult = collection;
+	}
+
+
+	public DefaultFeatureStoreNotification(DataStore source, String type,
+			EditableFeatureType featureType) {
+		this.init(source, type);
+		this.featureType = featureType;
+	}
+
+    public DefaultFeatureStoreNotification(DataStore source, String type,
+        FeatureIndex index) {
+        this.init(source, type);
+        this.index = index;
+    }
+
+	public Feature getFeature() {
+		return feature;
+	}
+
+	public EditableFeatureType getFeatureType() {
+		return featureType;
+	}
+
+	public DataSet getCollectionResult() {
+		return this.collectionResult;
+	}
+
+	public Exception getExceptionLoading() {
+		return this.exceptionLoading;
+	}
+
+	public boolean loadSucefully() {
+		return this.loadCollectionSucefully;
+	}
+
+	public Command getCommand() {
+		return this.command;
+	}
+
+	public DataStore getSource() {
+		return source;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+    public FeatureIndex getIndex() {
+        return index;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/DefaultFeatureCommandsStack.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/DefaultFeatureCommandsStack.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/DefaultFeatureCommandsStack.java	(revision 42196)
@@ -0,0 +1,171 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.impl.FeatureManager;
+import org.gvsig.fmap.dal.feature.impl.FeatureTypeManager;
+import org.gvsig.fmap.dal.feature.impl.SpatialManager;
+import org.gvsig.fmap.dal.feature.impl.undo.command.FTypeUpdateCommand;
+import org.gvsig.fmap.dal.feature.impl.undo.command.FeatureDeleteCommand;
+import org.gvsig.fmap.dal.feature.impl.undo.command.FeatureInsertCommand;
+import org.gvsig.fmap.dal.feature.impl.undo.command.FeatureUpdateCommand;
+import org.gvsig.fmap.dal.feature.impl.undo.command.SelectionCommandReverse;
+import org.gvsig.fmap.dal.feature.impl.undo.command.SelectionCommandSelect;
+import org.gvsig.fmap.dal.feature.impl.undo.command.SelectionCommandSelectAll;
+import org.gvsig.fmap.dal.feature.impl.undo.command.SelectionCommandSet;
+import org.gvsig.tools.undo.command.Command;
+import org.gvsig.tools.undo.command.impl.DefaultUndoRedoCommandStack;
+
+/**
+ * Clase en memoria para registrar y gestionar los comandos que vamos
+ * realizando. La forma en que ha sido implementada esta clase, en vez de una
+ * �nica lista para albergar los comandos de deshacer(undos) y los de
+ * rehacer(redos), se ha optado por dos pilas una para deshacer(undos) y otra
+ * para rehacer(redos), de esta forma : Cuando se a�ade un nuevo comando, se
+ * inserta este a la pila de deshacer(undos) y se borra de la de rehacer(redos).
+ * Si se realiza un deshacer se desapila este comando de la pila deshacer(undos)
+ * y se apila en la de rehacer(redos). Y de la misma forma cuando se realiza un
+ * rehacer se desapila este comando de la pila de rehacer(redos) y pasa a la de
+ * deshacer(undos).
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class DefaultFeatureCommandsStack extends DefaultUndoRedoCommandStack
+        implements FeatureCommandsStack {
+    private FeatureManager expansionManager;
+    private SpatialManager spatialManager;
+    private FeatureTypeManager featureTypeManager;
+    private DefaultFeatureStore featureStore;
+
+    public DefaultFeatureCommandsStack(DefaultFeatureStore featureStore,
+        FeatureManager expansionManager, SpatialManager spatialManager, 
+        FeatureTypeManager featureTypeManager) {
+        this.featureStore = featureStore;
+        this.expansionManager = expansionManager;
+        this.spatialManager = spatialManager;
+        this.featureTypeManager = featureTypeManager;
+    }
+
+    public void clear() {
+        super.clear();
+        expansionManager.clear();
+        featureTypeManager.clear();
+        spatialManager.clear();
+    }
+
+    public void deselect(DefaultFeatureReferenceSelection selection,
+            FeatureReference reference) {
+        SelectionCommandSelect command = new SelectionCommandSelect(selection,
+                reference, false, "_selectionDeselect");
+        add(command);
+    }
+
+    public void deselectAll(DefaultFeatureReferenceSelection selection)
+            throws DataException {
+        if (isSameLastCommand("_selectionDeselectAll")){
+        	return;
+        }
+    	SelectionCommandSelectAll command = new SelectionCommandSelectAll(
+                selection, false, "_selectionDeselectAll");
+        add(command);
+    }
+    
+    private boolean isSameLastCommand(String description){
+    	if (getUndoInfos().size() > 0){
+	    	Command lastCommand = getNextUndoCommand();
+	    	if (lastCommand.getDescription().equals(description)){
+	    		return true;
+	    	}
+    	}
+    	return false;
+    }
+
+    public void select(DefaultFeatureReferenceSelection selection,
+            FeatureReference reference) {
+        SelectionCommandSelect command = new SelectionCommandSelect(selection,
+                reference, true, "_selectionSelect");
+        add(command);
+    }
+
+    public void selectAll(DefaultFeatureReferenceSelection selection)
+            throws DataException {
+    	 if (isSameLastCommand("_selectionSelectAll")){
+         	return;
+         }
+    	SelectionCommandSelectAll command = new SelectionCommandSelectAll(
+                selection, true, "_selectionSelectAll");
+        add(command);
+    }
+
+    public void selectionReverse(DefaultFeatureReferenceSelection selection) {
+        SelectionCommandReverse command = new SelectionCommandReverse(
+                selection, "_selectionReverse");
+        add(command);
+    }
+
+    public void selectionSet(DefaultFeatureStore store,
+            FeatureSelection oldSelection, FeatureSelection newSelection) {
+        SelectionCommandSet command = new SelectionCommandSet(store,
+                oldSelection, newSelection, "_selectionSet");
+        add(command);
+    }
+
+    public void delete(Feature feature) throws DataException {
+        FeatureDeleteCommand command = new FeatureDeleteCommand(featureStore,
+                feature, "_featureDelete");
+        add(command);
+        command.execute();
+    }
+
+    public void insert(Feature feature) throws DataException {
+        FeatureInsertCommand command = new FeatureInsertCommand(featureStore,
+                feature, "_featureInsert");
+        add(command);
+        command.execute();
+    }
+
+    public void update(Feature feature, Feature oldFeature) throws DataException {
+        FeatureUpdateCommand command = new FeatureUpdateCommand(featureStore,
+               feature, oldFeature,
+                "_featureUpdate");
+        add(command);
+        command.execute();
+    }
+
+    public void update(FeatureType featureType, FeatureType oldFeatureType) {
+        FTypeUpdateCommand command = new FTypeUpdateCommand(
+                featureTypeManager, featureType, oldFeatureType,
+                "_typeUpdate");
+        add(command);
+        command.execute();
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/DefaultFeatureCommandsStack.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelect.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelect.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelect.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.undo.command.impl.AbstractCommand;
+
+/**
+ * Command to allow undo and redo over a select or deselect operation performed
+ * on a selection.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SelectionCommandSelect extends AbstractCommand {
+
+	private final DefaultFeatureReferenceSelection selection;
+    private final FeatureReference reference;
+    private final boolean select;
+
+    public SelectionCommandSelect(DefaultFeatureReferenceSelection selection,
+            FeatureReference reference, boolean select, String description) {
+        super(description);
+        this.selection = selection;
+        this.reference = reference;
+        this.select = select;
+	}
+
+	public void execute() {
+	    // Nothing to do
+	}
+
+	public int getType() {
+        return UPDATE; // select ? INSERT : DELETE;
+	}
+	
+	public void undo() throws UndoException {
+        performSelection(!select);
+    }
+
+	public void redo() throws RedoException {
+        performSelection(select);
+	}
+
+    private void performSelection(boolean doSelection) {
+        if (doSelection) {
+            selection.select(reference, false);
+        } else {
+            selection.deselect(reference, false);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelect.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FTypeUpdateCommand.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FTypeUpdateCommand.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FTypeUpdateCommand.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.FeatureTypeManager;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FTypeUpdateCommand extends AbstractFTypeCommand {
+    private FeatureType oldType;
+    private int position=-1;
+
+    public FTypeUpdateCommand(FeatureTypeManager expansionManager,
+        FeatureType type, FeatureType oldType, String description) {
+        super(expansionManager, type, description);
+        this.oldType = oldType;
+    }
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.dal.commands.Command#undo()
+    */
+    public void undo() throws UndoException {
+//        if (expansionManager.contains(oldFeature.getReference())) {
+//            expansionManager.deleteLastFeature(feature.getReference());
+//        } else {
+//            expansionManager.delete(type.getId());
+//        }
+
+        expansionManager.restore(oldType.getId(),position);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.commands.Command#redo()
+     */
+    public void redo() throws RedoException {
+        execute();
+    }
+
+    public int getType() {
+        return UPDATE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.commands.Command#execute()
+     */
+    public void execute() {
+        //		 Si la geometr�a no ha sido modificada
+//        if (!expansionManager.contains(oldType.getId())) {
+//        if (expansionManager.delete(oldType.getId())!=null){
+//            expansionManager.add(type);
+//        } else {
+          position =  expansionManager.update(type, oldType);
+//        }
+    }
+
+	public FeatureType getOldFeatureType() {
+		return oldType;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FTypeUpdateCommand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFTypeCommand.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFTypeCommand.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFTypeCommand.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.FeatureTypeManager;
+import org.gvsig.tools.undo.command.impl.AbstractCommand;
+
+/**
+ * Add the methods and constructors to use FeatureType.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public abstract class AbstractFTypeCommand extends AbstractCommand {
+    protected FeatureType type;
+    protected FeatureTypeManager expansionManager;
+
+    protected AbstractFTypeCommand(FeatureTypeManager expansionManager,
+    		FeatureType type,
+    		String description) {
+        super(description);
+        this.type = type;
+        this.expansionManager = expansionManager;
+    }
+
+    /**
+     * Returns the FeatureType of this command.
+     *
+     * @return FeatureType.
+     */
+    public FeatureType getFeatureType() {
+        return type;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFTypeCommand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureDeleteCommand.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureDeleteCommand.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureDeleteCommand.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.tools.undo.UndoException;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FeatureDeleteCommand extends AbstractFeatureCommand {
+
+    public FeatureDeleteCommand(DefaultFeatureStore featureStore,        
+        Feature feature, String description) {
+        super(featureStore, feature, description);
+    }
+
+    public void undo() throws UndoException {
+        try {
+            featureStore.doInsert(feature.getEditable());
+        } catch (DataException e) {
+            throw new UndoException(this, e);
+        }
+    }
+
+    public int getType() {
+        return DELETE;
+    }
+
+    public void execute() throws DataException {
+       featureStore.doDelete(feature);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureDeleteCommand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureUpdateCommand.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureUpdateCommand.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureUpdateCommand.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.tools.undo.UndoException;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FeatureUpdateCommand extends AbstractFeatureCommand {
+    private Feature oldFeature;
+
+    public FeatureUpdateCommand(DefaultFeatureStore featureStore,        
+        Feature feature, Feature oldFeature, String description) {
+        super(featureStore, feature, description);
+        this.oldFeature = oldFeature;
+    }
+
+    public void undo() throws UndoException {
+        try {
+            featureStore.doUpdate(oldFeature.getEditable(), 
+                ((EditableFeature)feature).getNotEditableCopy());
+        } catch (DataException e) {
+            throw new UndoException(this, e);
+        }
+    }
+
+    public int getType() {
+        return UPDATE;
+    }
+    
+    public void execute() throws DataException {
+        featureStore.doUpdate((EditableFeature)feature, oldFeature);
+    }
+
+	public Feature getOldFeature() {
+		return oldFeature;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureUpdateCommand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelectAll.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelectAll.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelectAll.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.feature.exception.SelectionStateException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection.SelectionData;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.undo.command.impl.AbstractCommand;
+
+/**
+ * Command to allow undo and redo over a select or deselect ALL operation
+ * performed on a selection.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SelectionCommandSelectAll extends AbstractCommand {
+
+    private final DefaultFeatureReferenceSelection selection;
+    private final boolean allSelected;
+    private SelectionData selectionData;
+
+    public SelectionCommandSelectAll(
+            DefaultFeatureReferenceSelection selection,
+            boolean allSelected, String description)
+            throws SelectionStateException {
+        super(description);
+        this.selection = selection;
+        this.allSelected = allSelected;
+        try {
+            this.selectionData = (SelectionData) selection.getData().clone();
+        } catch (CloneNotSupportedException ex) {
+            throw new SelectionStateException(ex);
+        }
+    }
+
+    public void execute() {
+        // Nothing to do
+    }
+
+    public int getType() {
+        return allSelected ? INSERT : DELETE;
+    }
+
+    public void undo() throws UndoException {
+        selection.setData(selectionData);
+    }
+
+    public void redo() throws RedoException {
+        try {
+            // Re-Obtain the state
+            selectionData = (SelectionData) selection.getData().clone();
+            if (allSelected) {
+                selection.selectAll(false);
+            } else {
+                selection.deselectAll(false);
+            }
+        } catch (Exception ex) {
+            throw new RedoException(this, ex);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSelectAll.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFeatureCommand.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFeatureCommand.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFeatureCommand.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.command.impl.AbstractCommand;
+
+
+/**
+ * Add the methods and constructors to use Features.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public abstract class AbstractFeatureCommand extends AbstractCommand {
+    protected Feature feature;
+    protected DefaultFeatureStore featureStore;
+    
+    protected AbstractFeatureCommand(DefaultFeatureStore featureStore,         
+        Feature feature, String description) {
+        super(description);
+        this.featureStore = featureStore;
+        this.feature = feature;
+    }
+
+    /**
+     * Returns the Feature of this command.
+     * 
+     * @return Feature.
+     */
+    public Feature getFeature() {
+        return feature;
+    }
+
+
+    public int getType() {
+        return DELETE;
+    }
+    
+    
+    public void redo() throws RedoException {
+        try {
+            execute();
+        } catch (DataException e) {
+            throw new RedoException(this, e);
+        }
+    }
+
+    public abstract void execute() throws DataException;      
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/AbstractFeatureCommand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureInsertCommand.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureInsertCommand.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureInsertCommand.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.tools.undo.UndoException;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FeatureInsertCommand extends AbstractFeatureCommand {
+
+    public FeatureInsertCommand(DefaultFeatureStore featureStore,        
+        Feature feature, String description) {
+        super(featureStore, feature, description);
+    }
+
+    public void undo() throws UndoException {
+       try {
+           featureStore.doDelete(((EditableFeature)feature).getNotEditableCopy());
+       } catch (DataException e) {
+           throw new UndoException(this, e);
+       }
+    }
+
+    public int getType() {
+        return INSERT;
+    }
+
+    public void execute() throws DataException {
+        featureStore.doInsert((EditableFeature)feature);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/FeatureInsertCommand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandReverse.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandReverse.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandReverse.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.undo.command.impl.AbstractCommand;
+
+/**
+ * Command to allow undo and redo over a reverse operation performed on a
+ * selection.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SelectionCommandReverse extends AbstractCommand {
+
+    private final DefaultFeatureReferenceSelection selection;
+
+    /**
+     * Creates a new SelectionCommandReverse over a selection.
+     * 
+     * @param selection
+     *            where the reverse has been performed
+     */
+    public SelectionCommandReverse(DefaultFeatureReferenceSelection selection,
+            String description) {
+        super(description);
+        this.selection = selection;
+    }
+
+    public void execute() {
+        // Nothing to do
+    }
+
+    public int getType() {
+        return UPDATE;
+    }
+    
+    public void undo() throws UndoException {
+        selection.reverse(false);
+    }
+
+    public void redo() throws RedoException {
+        selection.reverse(false);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandReverse.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSet.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo.command;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.undo.command.impl.AbstractCommand;
+
+/**
+ * Command to allow undo and redo over a set selection operation performed on a
+ * store.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SelectionCommandSet extends AbstractCommand {
+
+    private final FeatureSelection oldSelection;
+    private final FeatureSelection newSelection;
+    private final DefaultFeatureStore store;
+
+    public SelectionCommandSet(DefaultFeatureStore store,
+            FeatureSelection oldSelection, FeatureSelection newSelection,
+            String description) {
+        super(description);
+        this.store = store;
+        this.oldSelection = oldSelection;
+        this.newSelection = newSelection;
+    }
+
+    public void execute() {
+        // Nothing to do
+    }
+
+    public int getType() {
+        return UPDATE;
+    }
+    
+    public void undo() throws UndoException {
+        try {
+            store.setSelection(oldSelection, false);
+        } catch (DataException ex) {
+            throw new UndoException(this, ex);
+        }
+    }
+
+    public void redo() throws RedoException {
+        try {
+            store.setSelection(newSelection, false);
+        } catch (DataException ex) {
+            throw new RedoException(this, ex);
+        }   
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/command/SelectionCommandSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/FeatureCommandsStack.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/FeatureCommandsStack.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/FeatureCommandsStack.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.undo;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.*;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.tools.undo.command.UndoRedoCommandStack;
+
+public interface FeatureCommandsStack extends UndoRedoCommandStack {
+
+    public void insert(Feature feature) throws DataException;
+
+    public void update(Feature feature, Feature oldFeature) throws DataException;
+
+    public void delete(Feature feature) throws DataException;
+
+    public void update(FeatureType featureType, FeatureType oldFeatureType);
+
+    public void select(DefaultFeatureReferenceSelection selection,
+            FeatureReference reference);
+
+    public void deselect(DefaultFeatureReferenceSelection selection,
+            FeatureReference reference);
+
+    public void selectAll(DefaultFeatureReferenceSelection selection)
+            throws DataException;
+
+    public void deselectAll(DefaultFeatureReferenceSelection selection)
+            throws DataException;
+
+    public void selectionReverse(DefaultFeatureReferenceSelection selection);
+
+    public void selectionSet(DefaultFeatureStore store,
+            FeatureSelection oldSelection, FeatureSelection newSelection);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/undo/FeatureCommandsStack.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/ExpansionAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/ExpansionAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/ExpansionAdapter.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.expansionadapter;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+
+/**
+ * Maneja el fichero de extensi�n en el que se almacenan las modificacionesy adici�nes
+ * durante la edici�n. Los �ndices que devuelve esta clase en sus m�todos
+ * addFeature y modifyFeature son invariables, es decir, que si se invoca un
+ * m�todo addFeature que retorna un 8, independientemente de las operaciones
+ * que se realicen posteriormente, una llamada a getFeature(8) retornar�
+ * dicha fila. Si esta geometr�a es eliminada posteriormente, se retornar� un
+ * null. Esto �ltimo se cumple mientras no se invoque el m�todo compact, mediante
+ * el que se reorganizan las geometr�as dejando en el fichero s�lo las que tienen
+ * validez en el momento de realizar la invocaci�n.
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public interface ExpansionAdapter {
+	/**
+	 * A�ade una geometria al final del fichero y retorna el �ndice que ocupa
+	 * esta geometria en el mismo
+	 *
+	 * @param feature
+	 * @param status TODO
+	 * @param indexInternalFields fields that where valid when this feature was added.
+	 *
+	 * @return calculated index of the new feature.
+	 */
+	int addObject(Object obj);
+
+	/**
+	 * Modifica la index-�sima geometr�a del fichero devolviendo la posici�n en
+	 * la que se pone la geometria modificada.
+	 *
+	 * @param calculated index of feature to be modified
+	 * @param feature newFeature that replaces the old feature.
+	 *
+	 * @return new calculated index of the modified feature.
+	 */
+//	int updateObject(Object obj);
+
+	/**
+	 * Obtiene la geometria que hay en el �ndice 'index' o null si la geometr�a
+	 * ha sido invalidada.
+	 *
+	 * @param index caculatedIndex of the feature to be read.
+	 * @return feature
+	 */
+	Object getObject(int index);
+
+	/**
+	 * Realiza una compactaci�n del fichero que maneja esta clase
+	 *
+	 * @param relations DOCUMENT ME!
+	 */
+	void compact(HashMap relations);
+
+	/**
+     * Mueve el puntero de escritura de manera que las siguientes escrituras
+     * machacar�n la �ltima fila
+     */
+    void deleteLastObject();
+
+    /**
+     * Abre el fichero de expansi�n para comenzar la edici�n
+     */
+    void open();
+
+    /**
+     * Cierra el fichero de expansi�n al terminar la edici�n
+     */
+    void close();
+
+    int getSize();
+
+    Iterator iterator();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/ExpansionAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/MemoryExpansionAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/MemoryExpansionAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/MemoryExpansionAdapter.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.expansionadapter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+
+/**
+ * Implementaci�n en memoria de ExpansionAdapter.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MemoryExpansionAdapter implements ExpansionAdapter {
+	private List objects = new ArrayList();
+
+	public MemoryExpansionAdapter(){
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#addFeature(org.gvsig.fmap.dal.feature.Feature)
+	 */
+	public int addObject(Object obj) {
+//		Feature feature=(Feature)obj;
+		int newIndex = objects.size();
+		objects.add(obj);
+		return newIndex;
+	}
+
+//	/* (non-Javadoc)
+//	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#modifyFeature(int, org.gvsig.fmap.dal.feature.Feature)
+//	 */
+//	public int updateObject(Object obj) {
+////		Feature feature=(Feature)obj;
+//		objects.add(obj);
+//		return objects.size() - 1;
+//	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#getFeature(int)
+	 */
+	public Object getObject(int index){
+		return objects.get(index);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#compact(java.util.HashMap)
+	 */
+	public void compact(HashMap relations) {
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#deleteLastFeature()
+	 */
+	public void deleteLastObject() {
+		objects.remove(objects.size()-1);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#open()
+	 */
+	public void open() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#close()
+	 */
+	public void close() {
+		objects.clear();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.expansionadapter.ExpansionAdapter#getSize()
+	 */
+	public int getSize() {
+		return objects.size();
+	}
+
+	public Iterator iterator() {
+		return objects.iterator();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/expansionadapter/MemoryExpansionAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelection.java	(revision 42196)
@@ -0,0 +1,578 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.lang.ref.Reference;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.impl.undo.FeatureCommandsStack;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Default implementation of a FeatureReferenceSelection, based on the usage of
+ * a java.util.Set to store individual selected or not selected
+ * FeatureReferences, depending on the usage of the {@link #reverse()} method.
+ *
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class DefaultFeatureReferenceSelection extends AbstractDisposable
+		implements FeatureReferenceSelection {
+
+	public static final String DYNCLASS_PERSISTENT_NAME =
+			"DefaultFeatureReferenceSelection";
+
+    protected SelectionData selectionData = new SelectionData();
+
+    private FeatureStore featureStore;
+
+    private FeatureSelectionHelper helper;
+
+	private DelegateWeakReferencingObservable delegateObservable =
+			new DelegateWeakReferencingObservable(this);
+
+	/**
+	 * Creates a new Selection with the total size of Features from which the
+	 * selection will be performed.
+	 *
+	 * @param featureStore
+	 *            the FeatureStore of the selected FeatureReferences
+	 * @throws DataException
+	 *             if there is an error while getting the total number of
+	 *             Features of the Store.
+	 */
+    public DefaultFeatureReferenceSelection(DefaultFeatureStore featureStore)
+            throws DataException {
+        super();
+        this.featureStore = featureStore;
+        this.helper = new DefaultFeatureSelectionHelper(featureStore);
+        selectionData.setTotalSize(featureStore.getFeatureCount());
+    }
+
+    /**
+     * Creates a new Selection with the total size of Features from which the
+     * selection will be performed.
+     *
+     * @param featureStore
+     *            the FeatureStore of the selected FeatureReferences
+     * @param helper
+     *            to get some information of the Store
+     * @throws DataException
+     *             if there is an error while getting the total number of
+     *             Features of the Store.
+     */
+    public DefaultFeatureReferenceSelection(FeatureStore featureStore,
+            FeatureSelectionHelper helper)
+            throws DataException {
+        super();
+        this.featureStore = featureStore;
+        this.helper = helper;
+        selectionData.setTotalSize(featureStore.getFeatureCount());
+    }
+
+	/**
+	 * Constructor used by the persistence manager. Don't use directly. After to
+	 * invoke this method, the persistence manager calls the the method
+	 * {@link #loadFromState(PersistentState)} to set the values of the internal
+	 * attributes that this class needs to work.
+	 */
+	public DefaultFeatureReferenceSelection() {
+		super();
+	}
+
+    public boolean select(FeatureReference reference) {
+        return select(reference, true);
+    }
+
+    /**
+     * @see #select(FeatureReference)
+     * @param undoable
+     *            if the action must be undoable
+     */
+    public boolean select(FeatureReference reference, boolean undoable) {
+        
+        if (reference == null) {
+            throw new IllegalArgumentException("reference");
+        }
+        
+        if (isSelected(reference)) {
+            return false;
+        }
+
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().select(this, reference);
+        }
+        boolean change = false;
+        if (selectionData.isReversed()) {
+            change = selectionData.remove(reference);
+        } else {
+            change = selectionData.add(reference);
+        }
+
+        if (change) {
+            notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+        }
+
+        return change;
+    }
+
+    public boolean deselect(FeatureReference reference) {
+        return deselect(reference, true);
+    }
+
+    /**
+     * @see #deselect(FeatureReference)
+     * @param undoable
+     *            if the action must be undoable
+     */
+    public boolean deselect(FeatureReference reference, boolean undoable) {
+        if (!isSelected(reference)) {
+            return false;
+        }
+
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().deselect(this, reference);
+        }
+        boolean change = false;
+        if (selectionData.isReversed()) {
+            change = selectionData.add(reference);
+        } else {
+            change = selectionData.remove(reference);
+        }
+
+        if (change) {
+            notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+        }
+
+        return change;
+    }
+
+    public void selectAll() throws DataException {
+        selectAll(true);
+    }
+
+    /**
+     * @see #selectAll()
+     * @param undoable
+     *            if the action must be undoable
+     */
+    public void selectAll(boolean undoable) throws DataException {
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().startComplex("_selectionSelectAll");
+            getCommands().selectAll(this);
+        }
+        if (!selectionData.isReversed()) {
+            selectionData.setReversed(true);
+        }
+        clearFeatureReferences();
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().endComplex();
+        }
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    public void deselectAll() throws DataException {
+        deselectAll(false);
+    }
+
+    /**
+     * @see #deselectAll()
+     * @param undoable
+     *            if the action must be undoable
+     */
+    public void deselectAll(boolean undoable) throws DataException {
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().startComplex("_selectionDeselectAll");
+            getCommands().deselectAll(this);
+        }
+        if (selectionData.isReversed()) {
+            selectionData.setReversed(false);
+        }
+        clearFeatureReferences();
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().endComplex();
+        }
+
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    public boolean isSelected(FeatureReference reference) {
+        if (selectionData.isReversed()) {
+            return !selectionData.contains(reference);
+        } else {
+            return selectionData.contains(reference);
+        }
+    }
+
+    public void reverse() {
+        reverse(true);
+    }
+
+    /**
+     * @see #reverse()
+     * @param undoable
+     *            if the action must be undoable
+     */
+    public void reverse(boolean undoable) {
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().selectionReverse(this);
+        }
+        selectionData.setReversed(!selectionData.isReversed());
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    public long getSelectedCount() {
+        if (selectionData.isReversed()) {
+                return selectionData.getTotalSize() - selectionData.getSize()
+                        + helper.getFeatureStoreDeltaSize();
+        } else {
+            return selectionData.getSize();
+        }
+    }
+
+    public Iterator referenceIterator() {
+        return Collections.unmodifiableSet(selectionData.getSelected())
+                .iterator();
+    }
+
+	protected void doDispose() throws BaseException {
+		delegateObservable.deleteObservers();
+		deselectAll(false);
+    }
+
+    public boolean isFromStore(DataStore store) {
+        return featureStore.equals(store);
+    }
+
+    public void accept(Visitor visitor) throws BaseException {
+        for (Iterator iter = selectionData.getSelected().iterator(); iter
+                .hasNext();) {
+            visitor.visit(iter.next());
+        }
+    }
+
+    public void update(Observable observable,
+			Object notification) {
+        // If a Feature is deleted, remove it from the selection Set.
+        if (notification instanceof FeatureStoreNotification) {
+            FeatureStoreNotification storeNotif = (FeatureStoreNotification) notification;
+            if (FeatureStoreNotification.AFTER_DELETE
+                    .equalsIgnoreCase(storeNotif.getType())) {
+                selectionData.remove(storeNotif.getFeature().getReference());
+            }
+        }
+    }
+
+    public SelectionData getData() {
+        return selectionData;
+    }
+
+    public void setData(SelectionData selectionData) {
+        this.selectionData = selectionData;
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    public String toString() {
+        return getClass().getName() + ": " + getSelectedCount()
+                + " features selected, reversed = "
+                + selectionData.isReversed() + ", featureIds contained: "
+                + selectionData.getSelected();
+    }
+
+    protected boolean isReversed() {
+        return selectionData.isReversed();
+    }
+
+    /**
+     * Removes all the stored FeatureRefence objects.
+     */
+    protected void clearFeatureReferences() {
+        selectionData.clear();
+    }
+
+	/**
+	 * Returns the FeatureStore of the selected FeatureReferences.
+	 *
+	 * @return the featureStore
+	 */
+    protected FeatureStore getFeatureStore() {
+        return featureStore;
+    }
+
+	/**
+	 * Returns the reference to the commands record.
+	 *
+	 * @return the reference to the commands record
+	 */
+    protected FeatureCommandsStack getCommands() {
+        return helper.getFeatureStoreCommandsStack();
+    }
+
+	public static class SelectionData implements Cloneable {
+        private Set selected = new HashSet();
+
+        /**
+         * Sets how the Set of selected values has to be dealt.
+         * <p>
+         * If selected is FALSE, then values into the Set are the selected ones,
+         * anything else is not selected.
+         * </p>
+         * <p>
+         * If selected is TRUE, then values into the Set are values not
+         * selected, anything else is selected.
+         * </p>
+         */
+        private boolean reversed = false;
+
+        private long totalSize;
+
+        /**
+         * @return the selected
+         */
+        public Set getSelected() {
+            return selected;
+        }
+
+        /**
+         * @param selected
+         *            the selected to set
+         */
+        public void setSelected(Set selected) {
+            this.selected = selected;
+        }
+
+        /**
+         * @return the reversed
+         */
+        public boolean isReversed() {
+            return reversed;
+        }
+
+        /**
+         * @param reversed
+         *            the reversed to set
+         */
+        public void setReversed(boolean reversed) {
+            this.reversed = reversed;
+        }
+
+        /**
+         * @return the totalSize
+         */
+        public long getTotalSize() {
+            return totalSize;
+        }
+
+        /**
+         * @param totalSize
+         *            the totalSize to set
+         */
+        public void setTotalSize(long totalSize) {
+            this.totalSize = totalSize;
+        }
+
+        public boolean add(FeatureReference reference) {
+            return selected.add(reference);
+        }
+
+        public boolean remove(FeatureReference reference) {
+            return selected.remove(reference);
+        }
+
+        public void clear() {
+            selected.clear();
+        }
+
+        public boolean contains(FeatureReference reference) {
+            return selected.contains(reference);
+        }
+
+        public int getSize() {
+            return selected.size();
+        }
+
+        public Object clone() throws CloneNotSupportedException {
+			SelectionData clone = (SelectionData) super.clone();
+			// reversed and totalSize already cloned by parent.
+			// clone the selected Set
+			clone.selected = new HashSet(selected);
+            return clone;
+        }
+    }
+
+    // *** Persistence ***
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("store", featureStore);
+		state.set("reversed", selectionData.isReversed());
+		state.set("totalSize", selectionData.getTotalSize());
+		state.set("selected", selectionData.getSelected().iterator());
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		featureStore = (FeatureStore)state.get("store");
+		helper = new DefaultFeatureSelectionHelper((DefaultFeatureStore)featureStore);
+		selectionData.setReversed(state.getBoolean("reversed"));
+		selectionData.setTotalSize(state.getLong("totalSize"));
+		Iterator it = state.getIterator("selected");
+		while (it.hasNext()) {
+			DefaultFeatureReference ref = (DefaultFeatureReference) it.next();
+			selectionData.add(ref);
+		}
+		
+		/*
+		 * If we do not do this, feature store will not listen
+		 * to changes in selection after instantiating a
+		 * persisted selection. For non-persisted instances,
+		 * this line corresponds to the line found in method:
+		 * getFeatureSelection() in DefaultFeatureStore.
+		 * This is not dangerous because "addObserver" only adds
+		 * if they were not already added, so future invocations
+		 * with same instances will have no effect.
+		 */
+		this.addObserver((DefaultFeatureStore)featureStore);
+	}
+
+	public static void registerPersistent() {
+		DynStruct definition = ToolsLocator.getPersistenceManager().addDefinition(
+				DefaultFeatureReferenceSelection.class, 
+				DYNCLASS_PERSISTENT_NAME, 
+				"DefaultFeatureReferenceSelection Persistent definition",
+				null, 
+				null
+			);
+
+		definition.addDynFieldObject("store").setClassOfValue(FeatureStore.class).setMandatory(true);
+		definition.addDynFieldBoolean("reversed").setMandatory(true);
+		definition.addDynFieldLong("totalSize").setMandatory(true);
+		definition.addDynFieldList("selected").setClassOfItems(DefaultFeatureReference.class).setMandatory(true);
+
+	}
+
+	public void addObserver(Observer observer) {
+		delegateObservable.addObserver(observer);
+	}
+
+	public void addObserver(Reference ref) {
+		delegateObservable.addObserver(ref);
+	}
+
+	public void addObservers(BaseWeakReferencingObservable observable) {
+		delegateObservable.addObservers(observable);
+	}
+
+	public void beginComplexNotification() {
+		delegateObservable.beginComplexNotification();
+	}
+
+	public int countObservers() {
+		return delegateObservable.countObservers();
+	}
+
+	public void deleteObserver(Observer observer) {
+		delegateObservable.deleteObserver(observer);
+	}
+
+	public void deleteObserver(Reference ref) {
+		delegateObservable.deleteObserver(ref);
+	}
+
+	public void deleteObservers() {
+		delegateObservable.deleteObservers();
+	}
+
+	public void disableNotifications() {
+		delegateObservable.disableNotifications();
+	}
+
+	public void enableNotifications() {
+		delegateObservable.enableNotifications();
+	}
+
+	public void endComplexNotification() {
+		// We don't want to notify many times in a complex notification
+		// scenario, so ignore notifications if in complex.
+		// Only one notification will be sent when the complex notification
+		// ends.
+		delegateObservable
+				.notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+		delegateObservable.endComplexNotification();
+	}
+
+	public boolean inComplex() {
+		return delegateObservable.inComplex();
+	}
+
+	public boolean isEnabledNotifications() {
+		return delegateObservable.isEnabledNotifications();
+	}
+
+	public void notifyObservers() {
+		// We don't want to notify many times in a complex notification
+		// scenario, so ignore notifications if in complex.
+		// Only one notification will be sent when the complex notification
+		// ends.
+		if (!delegateObservable.inComplex()) {
+			delegateObservable.notifyObservers();
+		}
+	}
+
+	public void notifyObservers(Object arg) {
+		if (!delegateObservable.inComplex()) {
+			delegateObservable.notifyObservers(arg);
+		}
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		DefaultFeatureReferenceSelection clone = (DefaultFeatureReferenceSelection) super
+				.clone();
+		// Original observers aren't cloned
+		clone.delegateObservable = new DelegateWeakReferencingObservable(clone);
+		// Clone internal data
+		clone.selectionData = (SelectionData) selectionData.clone();
+		// featureStore and helper are already swallow cloned by our parent
+		return clone;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureManager.java	(revision 42196)
@@ -0,0 +1,401 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.expansionadapter.ExpansionAdapter;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FeatureManager {
+    private ExpansionAdapter expansionAdapter;
+    private Collection deleted = new LinkedHashSet();//<FeatureID>
+    private int deltaSize=0;
+	private Map added = new LinkedHashMap();
+	private Map addedAndDeleted = new LinkedHashMap();
+	private HashMap modifiedFromOriginal=new HashMap();
+    
+	public FeatureManager(ExpansionAdapter expansionAdapter){
+    	this.expansionAdapter=expansionAdapter;
+    }
+
+	/**
+	 * Deletes feature from this manager. 
+	 * @param id 
+	 * @return The deleted feature or null if the
+	 * feature had not been edited or previously added in the editing session 
+	 */
+    public Feature delete(FeatureReference id) {
+        deleted.add(id);
+		Integer num = (Integer) added.remove(id);
+        Feature feature=null;
+        if (num == null || num.intValue() == -1) {
+            num = (Integer) modifiedFromOriginal.remove(id);
+            if (num != null) {
+                feature = (Feature) expansionAdapter.getObject(num.intValue());
+            }
+            // if num is null here, method returns null
+		}else{
+			feature = (Feature) expansionAdapter.getObject(num.intValue());
+			addedAndDeleted.put(id, num);
+		}
+        deltaSize--;
+        return feature;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param feature DOCUMENT ME!
+     */
+    public void add(Feature feature) {
+        int pos = expansionAdapter.addObject(feature);
+        added.put(feature.getReference(),new Integer(pos));
+        deleted.remove(feature.getReference());
+        deltaSize++;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * @param id DOCUMENT ME!
+     */
+    public Feature deleteLastFeature() {
+        expansionAdapter.deleteLastObject();
+        Feature feature=(Feature)expansionAdapter.getObject(expansionAdapter.getSize()-1);
+        added.remove(feature.getReference());
+        modifiedFromOriginal.remove(feature.getReference());
+        deltaSize--;
+        return feature;
+    }
+
+    /**
+     * Returns a Feature of the default type.
+     *
+     * @param id
+     *            the feature reference
+     * @param store
+     *            the store to get the feature from
+     * @return a Feature with the given reference
+     * @throws DataException
+     *             if there is an error getting the Feature
+     */
+    public Feature get(FeatureReference id, FeatureStore store)
+            throws DataException {
+        return get(id, store, null);
+    }
+
+    /**
+     * Returns a Feature of the given type.
+     *
+     * @param id
+     *            the feature reference
+     * @param store
+     *            the store to get the feature from
+     * @param featureType
+     *            the type of the feature to return
+     * @return a Feature with the given reference
+     * @throws DataException
+     *             if there is an error getting the Feature
+     */
+    public Feature get(FeatureReference id, FeatureStore store,
+			FeatureType featureType) throws DataException {
+    	// FIXME: y si el featuretype que paso esta modificado.
+    	//        Deberia buscarlo en el featuretypemanager ?
+		//
+    	//        Si no existe feature con ese id... � retorna null ?
+    	//        en EditedDefaultIterator se hace uso de ese comportamiento.
+    	//
+    	Integer intNum = ((Integer) added.get(id));
+    	if (intNum == null){
+    		intNum =((Integer) modifiedFromOriginal.get(id));
+        	if (intNum == null){        		
+        	    //If the feature has been added and deleted
+        	    intNum = (Integer)addedAndDeleted.get(id);
+        	    if (intNum == null){
+        	        return null;
+        	    }
+        	}
+    	}
+        int num = intNum.intValue();
+        if (num==-1) {
+			return null;
+		}
+        Feature feature=(Feature)expansionAdapter.getObject(num);
+        if (featureType== null){
+        	featureType = store.getDefaultFeatureType();
+        }
+       	return getCorrectFeature(feature, store,featureType);
+    }
+
+    private Feature getCorrectFeature(Feature feature, FeatureStore store,
+			FeatureType featureType) throws DataException {
+    	 Iterator iterator=featureType.iterator();
+         EditableFeature newFeature=feature.getEditable();//store.createNewFeature(featureType, false);
+         FeatureType orgType = feature.getType();
+         int orgIndex;
+         while (iterator.hasNext()) {
+ 			FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) iterator.next();
+ 			orgIndex = orgType.getIndex(fad.getName());
+ 			if (orgIndex<0){
+ 				continue;
+ 			}
+ 			if (fad.isAutomatic() || fad.isReadOnly()
+					|| fad.getEvaluator() != null) {
+				continue;
+			}
+ 			Object value = feature.get(orgIndex);
+			if (value == null && !fad.allowNull()) {
+				continue;
+			}
+			newFeature.set(orgIndex, value);
+ 		}
+        return newFeature.getNotEditableCopy();
+	}
+
+	/**
+     * DOCUMENT ME!
+     *
+     * @param feature DOCUMENT ME!
+     * @param oldFeature DOCUMENT ME!
+     */
+    public int update(Feature feature, Feature oldFeature) {
+    	int oldNum=-1;
+        int num = expansionAdapter.addObject(feature);
+        FeatureReference id=feature.getReference();
+        if (added.containsKey(id)){
+        	oldNum=((Integer)added.get(id)).intValue();
+        	added.put(id,new Integer(num));
+        }else{
+        	if (modifiedFromOriginal.get(id)!=null) {
+				oldNum=((Integer)modifiedFromOriginal.get(id)).intValue();
+			}
+        	modifiedFromOriginal.put(id,new Integer(num));
+        }
+        return oldNum;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param id DOCUMENT ME!
+     */
+    public void restore(FeatureReference id) {
+        deleted.remove(id);
+        deltaSize++;
+    }
+    public void restore(FeatureReference id,int num){
+    	if (added.containsKey(id)){
+        	added.put(id,new Integer(num));
+        }else{
+        	modifiedFromOriginal.put(id,new Integer(num));
+        }
+    }
+
+
+    public boolean isDeleted(Feature feature){
+    	return deleted.contains(feature.getReference());
+    }
+
+    public boolean isDeleted(FeatureReference featureID) {
+		return deleted.contains(featureID);
+	}
+
+	public void clear() {
+		added.clear();
+		modifiedFromOriginal.clear();
+	    expansionAdapter.close();
+	    deleted.clear();//<FeatureID>
+	    addedAndDeleted.clear();
+	    deltaSize=0;
+	}
+
+
+	public boolean hasChanges() {
+		return added.size()>0 || modifiedFromOriginal.size() > 0 || deleted.size() > 0;
+	}
+
+	public Iterator getDeleted() {
+		return new DeletedIterator();
+
+	}
+
+	class DeletedIterator implements Iterator {
+		private Boolean hasnext = null;
+		private Iterator iter;
+		private DefaultFeatureReference obj;
+
+		public DeletedIterator(){
+			iter = deleted.iterator();
+		}
+
+		public boolean hasNext() {
+			if (hasnext != null) {
+				return hasnext.booleanValue();
+			}
+			hasnext = Boolean.FALSE;
+			while (iter.hasNext()) {
+				obj = (DefaultFeatureReference) iter.next();
+				if (obj.isNewFeature()) {
+					continue;
+				}
+				hasnext = Boolean.TRUE;
+				break;
+			}
+			return hasnext.booleanValue();
+		}
+
+		public Object next() {
+			if (!hasNext()) {
+				throw new NoSuchElementException();
+			}
+
+			hasnext = null;
+			return obj;
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+
+		}
+
+	}
+
+	public Iterator getInserted() {
+		return new InsertedIterator();
+	}
+
+	class InsertedIterator implements Iterator {
+
+		private Iterator addedIter;
+		private DefaultFeature obj;
+		private Boolean hasnext = null;
+
+		public InsertedIterator(){
+			addedIter = added.values().iterator();
+		}
+
+		public boolean hasNext() {
+			if (hasnext != null) {
+				return hasnext.booleanValue();
+			}
+			hasnext = Boolean.FALSE;
+			int pos;
+			while (addedIter.hasNext()) {
+				pos = ((Integer) addedIter.next()).intValue();
+				obj = (DefaultFeature) expansionAdapter.getObject(pos);
+				if (!deleted.contains(obj.getReference())) {
+					hasnext = Boolean.TRUE;
+					break;
+				}
+			}
+			return hasnext.booleanValue();
+		}
+
+		public Object next() {
+			if (!hasNext()) {
+				throw new NoSuchElementException();
+			}
+			hasnext = null;
+			return obj.getData();
+		}
+
+		public void remove() {
+			addedIter.remove();
+		}
+
+	}
+	public Iterator getUpdated() {
+		return new UpdatedIterator();
+	}
+	class UpdatedIterator implements Iterator{
+		private Boolean hasnext = null;
+		private Iterator iter;
+		private DefaultFeature obj;
+		private int pos;
+
+		public UpdatedIterator() {
+			iter = expansionAdapter.iterator();
+			pos = -1;
+		}
+
+		public boolean hasNext() {
+			if (hasnext != null) {
+				return hasnext.booleanValue();
+			}
+			hasnext = Boolean.FALSE;
+			while (iter.hasNext()) {
+				pos++;
+				obj = (DefaultFeature) iter.next();
+				if (deleted.contains(obj.getReference())){
+					continue;
+				}else if (!modifiedFromOriginal.containsValue(new Integer(pos))){
+					continue;
+				}else {
+					hasnext = Boolean.TRUE;
+					break;
+				}
+			}
+			return hasnext.booleanValue();
+		}
+
+		public Object next() {
+			if (!hasNext()) {
+				throw new NoSuchElementException();
+			}
+			hasnext = null;
+			return obj.getData();
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+
+		}
+	}
+
+	public boolean hasNews() {
+		return !added.isEmpty();
+	}
+
+	public long getDeltaSize() {
+		return deltaSize;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQuery.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQuery.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQuery.java	(revision 42196)
@@ -0,0 +1,486 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.evaluator.AndEvaluator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * Defines the properties of a collection of Features, as a result of a query
+ * through a FeatureStore.
+ * <p>
+ * A FeatureQuery is always defined by a FeatureType, or by the list of
+ * attribute names of the FeatureStore to return.
+ * </p>
+ * <p>
+ * The filter allows to select Features whose properties have values with the
+ * characteristics defined by the filter.
+ * </p>
+ * <p>
+ * The order is used to set the order of the result FeatureCollection, based on
+ * the values of the properties of the Features.
+ * </p>
+ * <p>
+ * The scale parameter can be used by the FeatureStore as a hint about the
+ * quality or resolution of the data needed to view or operate with the data
+ * returned. As an example, the FeatureStore may use the scale to return only a
+ * representative subset of the data, or maybe to return Features with less
+ * detail, like a point or a line instead of a polygon.
+ * </p>
+ * <p>
+ * If an implementation of FeatureStore is able to get other parameters to
+ * customize the behavior of the getDataCollection methods, there is an option
+ * to set more parameters through the setAttribute method.
+ * </p>
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class DefaultFeatureQuery implements FeatureQuery {
+
+    public static final String SCALE_PARAM_NAME = "Scale";
+
+    private Map queryParameters = new HashMap();
+
+    private String featureTypeId = null;
+
+    private List attributeNames = new ArrayList();
+
+    private List constantsAttributeNames = new ArrayList();
+
+    private Evaluator filter;
+
+    /**
+     * This boolean value is used to know if the current filter
+     * has been added using the {@link FeatureQuery#addFilter(Evaluator)}
+     * method or the {@link FeatureQuery#setFilter(Evaluator)} method.
+     */
+    private boolean isAddFilter = true;
+
+    private FeatureQueryOrder order = new FeatureQueryOrder();
+
+    private long limit;
+
+    private long pageSize;
+
+    /**
+     * Creates a FeatureQuery which will load all available Features of a type.
+     * 
+     * @param featureType
+     *            the type of Features of the query
+     */
+    public DefaultFeatureQuery() {
+        super();
+    }
+
+    /**
+     * Creates a FeatureQuery which will load all available Features of a type.
+     * 
+     * @param featureType
+     *            the type of Features of the query
+     */
+    public DefaultFeatureQuery(FeatureType featureType) {
+        super();
+        this.setFeatureType(featureType);
+    }
+
+    /**
+     * Creates a FeatureQuery with the type of features, a filter and the order
+     * for the FeatureCollection.
+     * 
+     * @param featureType
+     *            the type of Features of the query
+     * @param filter
+     *            based on the properties of the Features
+     * @param order
+     *            for the result
+     */
+    public DefaultFeatureQuery(FeatureType featureType, Evaluator filter) {
+        super();
+        this.setFeatureType(featureType);
+        this.filter = filter;
+    }
+
+    /**
+     * Creates a FeatureQuery with the type of features, a filter, the order for
+     * the FeatureCollection and the view scale.
+     * 
+     * @param featureType
+     *            the type of Features of the query
+     * @param filter
+     *            based on the properties of the Features
+     * @param order
+     *            for the result
+     * @param scale
+     *            to view the Features.
+     */
+    public DefaultFeatureQuery(FeatureType featureType, Evaluator filter,
+        double scale) {
+        this.setFeatureType(featureType);
+        this.filter = filter;
+        this.setScale(scale);
+    }
+
+    /**
+     * Creates a FeatureQuery which will load a list of attribute names of all
+     * available Features.
+     * 
+     * @param attributeNames
+     *            the list of attribute names to load
+     */
+    public DefaultFeatureQuery(String[] attributeNames) {
+        super();
+        setAttributeNames(attributeNames);
+    }
+
+    /**
+     * Creates a FeatureQuery with the list of attribute names of feature, a
+     * filter and the order for the FeatureCollection.
+     * 
+     * @param attributeNames
+     *            the list of attribute names to load
+     * @param filter
+     *            based on the properties of the Features
+     * @param order
+     *            for the result
+     */
+    public DefaultFeatureQuery(String[] attributeNames, Evaluator filter) {
+        super();
+        setAttributeNames(attributeNames);
+        this.filter = filter;
+    }
+
+    /**
+     * Creates a FeatureQuery with the list of attribute names of feature, a
+     * filter, the order for the FeatureCollection and the view scale.
+     * 
+     * @param attributeNames
+     *            the list of attribute names to load
+     * @param filter
+     *            based on the properties of the Features
+     * @param order
+     *            for the result
+     * @param scale
+     *            to view the Features.
+     */
+    public DefaultFeatureQuery(String[] attributeNames, Evaluator filter,
+        double scale) {
+        setAttributeNames(attributeNames);
+        this.filter = filter;
+        this.setScale(scale);
+    }
+
+    public double getScale() {
+        Double scale = (Double) this.getQueryParameter(SCALE_PARAM_NAME);
+        if (scale == null) {
+            return 0;
+        }
+        return scale.doubleValue();
+    }
+
+    public void setScale(double scale) {
+        this.setQueryParameter(SCALE_PARAM_NAME, new Double(scale));
+    }
+
+    public Object getQueryParameter(String name) {
+        return queryParameters.get(name);
+    }
+
+    public void setQueryParameter(String name, Object value) {
+        queryParameters.put(name, value);
+    }
+
+    public void setFeatureType(FeatureType featureType) {
+        this.featureTypeId = featureType.getId();
+    }
+
+    public String[] getAttributeNames() {
+        return (String[])attributeNames.toArray(new String[attributeNames.size()]);
+    }
+
+    public void setAttributeNames(String[] attributeNames) {
+        this.attributeNames.clear();
+        if (attributeNames != null){
+            for (int i=0 ; i<attributeNames.length ; i++){
+                this.attributeNames.add(attributeNames[i]);
+            }   
+        }
+    }
+    
+    public void addAttributeName(String attributeName){
+        //If the attribute exists finish the method
+        for (int i=0 ; i<attributeNames.size() ; i++){
+            if (attributeNames.get(i).equals(attributeName)){
+                return;
+            }            
+        } 
+        this.attributeNames.add(attributeName);
+    }
+
+    public boolean hasAttributeNames() {
+        return !this.attributeNames.isEmpty();
+    }
+
+    public void clearAttributeNames() {
+        this.attributeNames = new ArrayList();
+    }
+
+    public Evaluator getFilter() {
+        return filter;
+    }
+
+    public void setFilter(Evaluator filter) {
+        this.filter = filter;
+        addFilterAttributes(filter);
+        isAddFilter = false;
+    }
+
+    public void addFilter(Evaluator evaluator) {
+        if (isAddFilter){
+            if (this.filter == null){
+                this.filter = evaluator;
+            }else{
+                if (evaluator != null){
+                    if (this.filter instanceof AndEvaluator){
+                        ((AndEvaluator)this.filter).addEvaluator(evaluator);
+                    }else{
+                        this.filter = new AndEvaluator(this.filter);
+                        ((AndEvaluator)this.filter).addEvaluator(evaluator);
+                    }
+                }
+            }
+        }else{
+            this.filter = evaluator;
+        }
+        addFilterAttributes(evaluator);
+        isAddFilter = true;
+    }
+    
+    private void addFilterAttributes(Evaluator evaluator){
+        if (evaluator != null){
+            EvaluatorFieldsInfo fieldsInfo = evaluator.getFieldsInfo();
+            if (fieldsInfo == null){
+                // FieldsInfo is not available in this evaluator
+                return;
+            }
+            String[] fieldNames = fieldsInfo.getFieldNames();
+            if (fieldNames== null){
+                // fieldNames is not available in this evaluator
+                return;
+            }
+            
+            for (int i=0 ; i<fieldNames.length ; i++){
+                addAttributeName(fieldNames[i]);
+            }
+        }
+    }
+
+    public FeatureQueryOrder getOrder() {
+        return order;
+    }
+
+    public void setOrder(FeatureQueryOrder order) {
+        this.order = order;
+    }
+
+    public boolean hasFilter() {
+        return this.filter != null;
+    }
+
+    public boolean hasOrder() {
+        return this.order != null && this.order.size() > 0;
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        DefaultFeatureQuery clone = (DefaultFeatureQuery) super.clone();
+
+        // Clone attribute names array
+        if (attributeNames != null) {
+            clone.attributeNames = new ArrayList();
+            for (int i=0 ; i<attributeNames.size() ; i++){
+                clone.attributeNames.add(attributeNames.get(i));
+            }       
+        }
+
+        // Clone order
+        if (order != null) {
+            clone.order = (FeatureQueryOrder) order.clone();
+        }
+
+        return clone;
+    }
+
+    public FeatureQuery getCopy() {
+        try {
+            return (FeatureQuery) clone();
+        } catch (CloneNotSupportedException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return null;
+        }
+        // DefaultFeatureQuery aCopy = new DefaultFeatureQuery();
+        //
+        // aCopy.featureTypeId = this.featureTypeId;
+        //
+        // if (this.attributeNames != null) {
+        // aCopy.attributeNames = (String[]) Arrays
+        // .asList(this.attributeNames).toArray(new String[0]);
+        // }
+        //
+        // aCopy.filter = this.filter;
+        //
+        // if (this.order != null) {
+        // aCopy.order = this.order.getCopy();
+        // }
+        //
+        // return aCopy;
+    }
+
+    public String getFeatureTypeId() {
+        return featureTypeId;
+    }
+
+    public void setFeatureTypeId(String featureTypeId) {
+        this.featureTypeId = featureTypeId;
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // FIXME: falta por terminar de implementar
+        state.set("queryParameters", this.queryParameters);
+        state.set("featureTypeId", this.featureTypeId);
+        state.set("attributeNames", this.attributeNames);
+        // state.set("filter", this.filter);
+        state.set("limit", this.limit);
+        state.set("pageSize", this.pageSize);
+
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        // FIXME: falta por terminar de implementar
+        this.queryParameters = (Map) state.get("queryParameters");
+        this.featureTypeId = state.getString("featureTypeId");
+        this.attributeNames = state.getList("attributeNames");
+        this.filter = (Evaluator) state.get("filter");
+        this.limit = state.getLong("limit");
+        this.pageSize = state.getLong("pageSize");
+
+    }
+
+    /**
+     * Register the class on PersistenceManager
+     * 
+     */
+    public static void registerPersistent() {
+        DynStruct definition =
+            ToolsLocator.getPersistenceManager()
+            .addDefinition(DefaultFeatureQuery.class,
+                "DefaultFeatureQuery",
+                "DefaultFeatureQuery Persistent definition",
+                null,
+                null);
+
+        definition.addDynFieldMap("queryParameters")
+        .setClassOfItems(Object.class)
+        .setMandatory(true);
+
+        definition.addDynFieldString("featureTypeId").setMandatory(false);
+
+        definition.addDynFieldList("attributeNames")
+        .setClassOfItems(String.class)
+        .setMandatory(false);
+
+        definition.addDynFieldObject("filter")
+        .setClassOfValue(Evaluator.class)
+        .setMandatory(false);
+
+        definition.addDynFieldObject("order")
+        .setClassOfValue(FeatureQueryOrder.class)
+        .setMandatory(false);
+
+        definition.addDynFieldLong("limit").setMandatory(false);
+
+        definition.addDynFieldLong("pageSize").setMandatory(false);
+
+    }
+
+    public long getLimit() {
+        return limit;
+    }
+
+    public long getPageSize() {
+        return pageSize;
+    }
+
+    public void setLimit(long limit) {
+        this.limit = limit;
+    }
+
+    public void setPageSize(long pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public String[] getConstantsAttributeNames() {
+        return (String[])constantsAttributeNames.toArray(new String[constantsAttributeNames.size()]);
+    }
+
+    public void setConstantsAttributeNames(String[] constantsAttributeNames) {
+        this.constantsAttributeNames.clear();
+        if (constantsAttributeNames != null){
+            for (int i=0 ; i<constantsAttributeNames.length ; i++){
+                this.constantsAttributeNames.add(constantsAttributeNames[i]);
+            }   
+        }
+    }
+    
+    public void addConstantAttributeName(String attributeName) {
+        //If the attribute exists finish the method
+        for (int i=0 ; i<constantsAttributeNames.size() ; i++){
+            if (constantsAttributeNames.get(i).equals(attributeName)){
+                return;
+            }            
+        } 
+        this.constantsAttributeNames.add(attributeName);
+    }
+
+    public boolean hasConstantsAttributeNames() {
+        return !this.constantsAttributeNames.isEmpty();
+    }
+
+    public void clearConstantsAttributeNames() {
+        this.constantsAttributeNames = new ArrayList();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQuery.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectFeatureFacade.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectFeatureFacade.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectFeatureFacade.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.lang.Cloneable;
+
+/**
+ * {@link DynObject} implementation to facade a Feature and allow to be used
+ * as a {@link DynObject}.
+ * 
+ * This implementation may be reused to be used with many {@link Feature}
+ * objects, but not at the same time.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DynObjectFeatureFacade implements DynObject , Cloneable{
+
+    private Feature feature;
+    
+    private EditableFeature editable;
+
+    private final Object lock = new Object();
+
+    /**
+     * Empty constructor.
+     */
+    public DynObjectFeatureFacade() {
+        // Nothing to do
+    }
+
+    /**
+     * Creates a facade over a {@link Feature}.
+     */
+    public DynObjectFeatureFacade(Feature feature) {
+        setFeatureCopy(feature);
+    }
+
+    public DynClass getDynClass() {
+        return getFeature().getType();
+    }
+
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        return getFeature().get(name);
+    }
+
+    public void setDynValue(String name, Object value)
+        throws DynFieldNotFoundException {
+        synchronized (lock) {
+            if (editable == null) {
+                editable = feature.getEditable();
+            }            
+        }
+        editable.set(name, value);
+    }
+
+    public boolean hasDynValue(String name) {
+        return getFeature().get(name) != null;
+    }
+
+    public Object invokeDynMethod(String name, DynObject context)
+        throws DynMethodException {
+        throw new UnsupportedOperationException();
+    }
+
+    public Object invokeDynMethod(int code, DynObject context)
+        throws DynMethodException {
+        throw new UnsupportedOperationException();
+    }
+
+    public void implement(DynClass dynClass) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void delegate(DynObject dynObject) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void clear() {
+        // Nothing to do
+    }
+    
+    public Feature getFeature() {
+        return editable == null ? feature : editable;
+    }
+    
+    public void setFeatureCopy(Feature feature) {
+        synchronized (lock) {
+            this.feature = feature.getCopy();
+            this.editable = null;
+        }
+    }
+
+    public void setFeature(Feature feature) {
+        synchronized (lock) {
+            this.feature = feature;
+            this.editable = null;
+        }
+    }
+
+    public EditableFeature getEditable() {
+        return editable;
+    }
+    
+    public String toString() {
+	    if (editable != null) {
+	        return editable.toString();
+	    }            
+	    return this.feature.toString();
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+    	DynObjectFeatureFacade other = new DynObjectFeatureFacade();
+    	if( feature != null ) {
+    		other.feature = this.feature.getCopy();
+    	}
+    	if( editable != null ) {
+    		other.editable = (EditableFeature) this.editable.getCopy();
+    	}
+    	return other;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectFeatureFacade.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectIteratorFeatureIteratorFacade.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectIteratorFeatureIteratorFacade.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectIteratorFeatureIteratorFacade.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+
+/**
+ * {@link DynObject} implementation to facade a iterator of a {@link FeatureSet}
+ * and allow to be used as a {@link DynObjectSet} iterator.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DynObjectIteratorFeatureIteratorFacade implements
+    DisposableIterator {
+
+    private final DisposableIterator featureIterator;
+    private DynObjectFeatureFacade featureFacade;
+
+    /**
+     * Creates a new DynObjects iterator facade over a feature iterator.
+     * Each {@link Feature} will be returned through a new or reused
+     * {@link DynObjectFeatureFacade} which allows the {@link Feature} to be
+     * used like a DynObject.
+     * 
+     * @param featureIterator
+     *            to facade
+     * @param featureFacade
+     *            if not null this object will be reused as the facade for the
+     *            Feature objects of the feature iterator
+     */
+    public DynObjectIteratorFeatureIteratorFacade(
+        DisposableIterator featureIterator, DynObjectFeatureFacade featureFacade) {
+        this.featureIterator = featureIterator;
+        this.featureFacade = featureFacade;
+    }
+
+    /**
+     * Creates a new DynObjects iterator facade over a feature iterator.
+     * Each {@link Feature} will be returned through a new
+     * {@link DynObjectFeatureFacade} which allows the {@link Feature} to be
+     * used like a DynObject.
+     * 
+     * @param featureIterator
+     *            to facade
+     */
+    public DynObjectIteratorFeatureIteratorFacade(
+        DisposableIterator featureIterator) {
+        this.featureIterator = featureIterator;
+    }
+
+    public void dispose() {
+        featureIterator.dispose();
+    }
+
+    public boolean hasNext() {
+        return featureIterator.hasNext();
+    }
+
+    public Object next() {
+        Feature feature = (Feature) featureIterator.next();
+        if (featureFacade == null) {
+        	featureFacade = new DynObjectFeatureFacade();
+        }
+        featureFacade.setFeatureCopy(feature);
+        return featureFacade;
+    }
+
+    public void remove() {
+        featureIterator.remove();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectIteratorFeatureIteratorFacade.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedFilteredIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedFilteredIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedFilteredIterator.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.exception.DataEvaluatorException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+public class FastEditedFilteredIterator extends FastEditedIterator {
+
+	public FastEditedFilteredIterator(DefaultFeatureSet featureSet, long index)
+			throws DataException {
+		super(featureSet, index);
+	}
+
+
+	public boolean match(DefaultFeature feature) throws DataException {
+		try {
+			return ((Boolean) this.filter.evaluate(feature)).booleanValue();
+		} catch (EvaluatorException e) {
+			throw new DataEvaluatorException(e);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedFilteredIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedIterator.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Iterator implementation which shares the returned Feature object instance.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class FastEditedIterator extends EditedIterator {
+
+    DefaultFeature myFeature;
+
+    public FastEditedIterator(DefaultFeatureSet featureSet, long index)
+        throws DataException {
+        super(featureSet);
+        this.initializeFeature();
+        if (index > 0) {
+        	
+            this.iterator = featureSet.provider.fastIterator();
+            setNewsFeatures(null);
+            skypto(index);
+
+            /*
+            * This did not work because the provider
+            * skips to the index without considering the
+            * changes in editing mode. We need the
+            * "skypto" method which knows about those
+            * changes.
+        	*
+            if (featureSet.provider.canIterateFromIndex()) {
+                try {
+                    this.iterator = featureSet.provider.fastIterator(index);
+                } catch (IllegalArgumentException e) {
+                    this.iterator = featureSet.provider.fastIterator();
+                    setNewsFeatures(null);
+                    skypto(index);
+                } catch (UnsupportedOperationException e) {
+                    this.iterator = featureSet.provider.fastIterator();
+                    setNewsFeatures(null);
+                    skypto(index);
+                }
+            } else {
+                this.iterator = featureSet.provider.fastIterator();
+                setNewsFeatures(null);
+                skypto(index);
+            }
+            */
+            
+        } else {
+            this.iterator = featureSet.provider.fastIterator();
+            setNewsFeatures(featureManager.getInserted());
+        }
+
+    }
+
+    protected void initializeFeature() {
+        myFeature = new DefaultFeature(fset.store);
+    }
+
+    protected DefaultFeature createFeature(FeatureProvider data) throws DataException {
+
+        DefaultFeature f = null;
+        try {
+            data.setNew(isFeatureIsNew());
+            FeatureReference ref =
+                new DefaultFeatureReference(fset.store, data);
+            f =
+                (DefaultFeature) featureManager.get(ref, fset.store,
+                    data.getType());
+        } catch (DataException e) {
+            RuntimeException ex = new RuntimeException();
+            e.initCause(e);
+            throw ex;
+        }
+        if (f == null) {
+            this.myFeature.setData(data);
+        } else {
+            // TODO Sacamos una copia del data o no???
+            this.myFeature.setData(f.getData().getCopy());
+        }
+        if (this.fset.transform.isEmpty()) {
+            return myFeature;
+        } else {
+            
+            if (f == null) {
+                myFeature = (DefaultFeature)
+                    this.fset.transform.applyTransform(myFeature,
+                        fset.getDefaultFeatureType());
+            } else {
+                /*
+                 * In this case "f != null" the data comes from the featureManager,
+                 * so it is data inserted/updated by the user, so we must
+                 * overwrite the data after applying the transformations
+                 * because the transformations can be "Adding field"
+                 * and are necessary in some cases:
+                 */
+                DefaultFeature saved_feat = (DefaultFeature) myFeature.getCopy();
+                myFeature = (DefaultFeature)
+                    this.fset.transform.applyTransform(myFeature,
+                        fset.getDefaultFeatureType());
+                myFeature = overwrite(myFeature, saved_feat);
+            }
+            return myFeature;
+        }       
+
+    }
+
+    private DefaultFeature overwrite(
+        DefaultFeature old_feat,
+        DefaultFeature new_feat) {
+        
+        DefaultEditableFeature resp = (DefaultEditableFeature) old_feat.getEditable();
+        
+        FeatureType fty = new_feat.getData().getType();
+        FeatureAttributeDescriptor[] atts = fty.getAttributeDescriptors();
+        for (int i=0; i<atts.length; i++) {
+            try {
+                resp.set(atts[i].getName(), new_feat.get(atts[i].getName()));
+            } catch (Exception exc) {
+                // Field not found
+            }
+        }
+        return (DefaultFeature) resp.getNotEditableCopy();
+    }
+
+    public void remove() {
+        super.remove();
+        this.initializeFeature();
+    }
+
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        myFeature = null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastEditedIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastFilteredIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastFilteredIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastFilteredIterator.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+public class FastFilteredIterator extends FilteredIterator {
+
+	DefaultFeature myFeature;
+
+	FastFilteredIterator(DefaultFeatureSet featureSet, long index)
+			throws DataException {
+		super(featureSet);
+		initializeFeature();
+
+		this.iterator = featureSet.provider.fastIterator();
+		if (index > 0) {
+			this.skypto(index);
+		}
+	}
+
+	protected DefaultFeature createFeature(FeatureProvider fData)
+			throws DataException {
+		fData.setNew(false);
+		this.myFeature.setData(fData);
+
+		if (this.fset.transform.isEmpty()) {
+			return myFeature;
+		} else {
+			return (DefaultFeature) this.fset.transform.applyTransform(
+					myFeature, fset.getDefaultFeatureType());
+		}
+	}
+
+	protected void initializeFeature() {
+		myFeature = new DefaultFeature(fset.store);
+	}
+
+	public void remove() {
+		super.remove();
+		this.initializeFeature();
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		myFeature = null;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastFilteredIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedFilteredIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedFilteredIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedFilteredIterator.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.exception.DataEvaluatorException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+
+public class EditedFilteredIterator extends EditedIterator {
+
+	EditedFilteredIterator(DefaultFeatureSet fset, long index)
+			throws DataException {
+		super(fset, index);
+	}
+
+	public boolean match(DefaultFeature feature) throws DataException {
+		try {
+			return ((Boolean) this.filter.evaluate(feature)).booleanValue();
+		} catch (EvaluatorException e) {
+			throw new DataEvaluatorException(e);
+		}
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedFilteredIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedIterator.java	(revision 42196)
@@ -0,0 +1,196 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.impl.FeatureManager;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Iterator for stores in edition mode.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * @deprecated use the {@link FastEditedIterator} instead
+ */
+public class EditedIterator extends FilteredIterator {
+
+    private Iterator newsFeatures;
+    private boolean featureIsNew;
+    private DefaultFeatureStore store;
+    protected FeatureManager featureManager;
+
+    public EditedIterator(DefaultFeatureSet featureSet) {
+        super(featureSet);
+        this.store = featureSet.store;
+        this.featureManager = this.store.getFeatureManager();
+    }
+
+    public EditedIterator(DefaultFeatureSet featureSet, long index)
+        throws DataException {
+        this(featureSet);
+        this.newsFeatures = null;
+        if (index > 0) {
+
+            this.iterator = featureSet.provider.iterator();
+            skypto(index);
+
+            /*
+             * This did not work because the provider
+             * skips to the index without considering the
+             * changes in editing mode. We need the
+             * "skypto" method which knows about those
+             * changes.
+             * 
+        	if (featureSet.provider.canIterateFromIndex()) {
+                try {
+                    this.iterator = featureSet.provider.iterator(index);
+                } catch (IllegalArgumentException e) {
+                    this.iterator = featureSet.provider.iterator();
+                    skypto(index);
+                } catch (UnsupportedOperationException e) {
+                    this.iterator = featureSet.provider.iterator();
+                    skypto(index);
+                }
+            } else {
+                this.iterator = featureSet.provider.iterator();
+                skypto(index);
+            }
+             */
+            
+        } else {
+            this.iterator = featureSet.provider.iterator();
+        }
+
+    }
+    
+    public void remove() {
+    	if(this.getIterator() == newsFeatures) {
+    		newsFeatures.remove();
+    	} else {
+    		super.remove();
+    	}
+    }
+
+    public boolean hasNext() {
+        if (store.isEditing()) {
+            return super.hasNext();
+        } else {
+            throw new ConcurrentDataModificationException(store.getFullName());
+        }
+    }
+
+    public Object next() {
+        if (store.isEditing()) {
+            return super.next();
+        } else {
+            throw new ConcurrentDataModificationException(store.getFullName());
+        }
+    }
+
+    protected void setNewsFeatures(Iterator newsFeatures) {
+        this.newsFeatures = newsFeatures;
+    }
+
+    protected boolean isFeatureIsNew() {
+        return featureIsNew;
+    }
+
+    protected Iterator getIterator() {
+        if (this.featureIsNew) {
+            return this.newsFeatures;
+        } else
+            if (this.iterator.hasNext()) {
+                featureIsNew = false;
+                return this.iterator;
+            } else {
+                featureIsNew = true;
+                this.newsFeatures = this.featureManager.getInserted();
+                return this.newsFeatures;
+            }
+    }
+
+    protected DefaultFeature createFeature(FeatureProvider data) throws DataException {
+
+        DefaultFeature f = null;
+        data.setNew(featureIsNew);
+        try {
+            FeatureReference ref = new DefaultFeatureReference(store, data);
+            f =
+                (DefaultFeature) this.featureManager.get(ref, store,
+                    data.getType());
+        } catch (DataException e) {
+            RuntimeException ex = new RuntimeException();
+            e.initCause(e);
+            throw ex;
+        }
+        if (f == null) {
+            // La feature no se ha editado.
+            f = new DefaultFeature(store, data);
+        }
+        if (this.fset.transform.isEmpty()) {
+            return f;
+        } else {
+            return (DefaultFeature) this.fset.transform.applyTransform(
+                    f, fset.getDefaultFeatureType());
+        }     
+    }
+
+    protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
+
+        // XXX
+        // si recorriendo los originales nos
+        // encontramos uno nuevo, no lo devolvemos
+        // porque se recorrera mas tarde.
+        // Esto es una interaccion con los indices
+        // ya que estos contienen todas las features ya
+        // sea nuevas o no
+
+        if (data.isNew() && !featureIsNew) {
+            return true;
+        }
+        FeatureReference ref = new DefaultFeatureReference(store, data);
+        return this.featureManager.isDeleted(ref);
+    }
+
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        if (newsFeatures instanceof DisposableIterator) {
+            ((DisposableIterator) newsFeatures).dispose();
+        }
+        newsFeatures = null;
+        this.featureManager = null;
+        this.store = null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/EditedIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FilteredIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FilteredIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FilteredIterator.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.exception.DataEvaluatorException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.exception.BaseException;
+
+public class FilteredIterator extends DefaultIterator {
+
+	protected boolean nextChecked;
+	protected DefaultFeature current;
+	protected Evaluator filter;
+
+
+	protected FilteredIterator(DefaultFeatureSet featureSet) {
+		super(featureSet);
+		this.current = null;
+		this.nextChecked = false;
+		this.filter = featureSet.query.getFilter();
+	}
+
+	FilteredIterator(DefaultFeatureSet featureSet, long index)
+			throws DataException {
+		super(featureSet);
+		this.iterator = featureSet.provider.iterator();
+		if (index > 0) {
+			this.skypto(index);
+		}
+		this.current = null;
+		this.nextChecked = false;
+		this.filter = featureSet.query.getFilter();
+	}
+
+	protected void skypto(long index) {
+		// TODO: Comprobar si esta bien la condicion de n<=
+		for (long n = 0; n < index && this.hasNext(); n++, this.next()) {
+			;
+		}
+	}
+
+	protected void doNext() throws DataException {
+		nextChecked = true;
+		DefaultFeature feature;
+		FeatureProvider data;
+		Object obj;
+		while (this.getIterator().hasNext()) {
+			obj =this.getIterator().next();
+			if (obj instanceof FeatureProvider){
+				data = (FeatureProvider)obj;
+				if (isDeletedOrHasToSkip(data)) {
+					continue;
+				}
+				feature = this.createFeature(data);
+			} else {
+				feature = (DefaultFeature)obj;
+				if (isDeletedOrHasToSkip(feature.getData())) {
+					continue;
+				}
+			}
+			if (this.match(feature)) {
+				this.current = feature;
+				return;
+			}
+		}
+		this.current = null;
+	}
+
+	protected Iterator getIterator() {
+		return this.iterator;
+	}
+
+	public boolean hasNext() {
+		fset.checkSourceStoreModified();
+		if (nextChecked) {
+			return this.current != null;
+		}
+		try {
+			doNext();
+		} catch( DataException e) {
+			NullPointerException ex = new NullPointerException();
+			ex.initCause(e);
+			throw ex;
+		}
+		return this.current != null;
+	}
+
+	public boolean match(DefaultFeature feature) throws DataException {
+		try {
+			if (filter==null) {
+				return true;
+			}
+			return ((Boolean) this.filter.evaluate(feature)).booleanValue();
+		} catch (EvaluatorException e) {
+			throw new DataEvaluatorException(e);
+		}
+	}
+
+	public Object next() {
+		fset.checkSourceStoreModified();
+		if (!nextChecked) {
+			hasNext();
+		}
+		if (this.current == null) {
+			throw new NoSuchElementException();
+		}
+		this.lastFeature = null;
+		nextChecked = false;
+		DefaultFeature feature = this.current;
+		this.current = null;
+		this.lastFeature = feature;
+		return feature;
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		current = null;
+		filter = null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FilteredIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectSetFeatureSetFacade.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectSetFeatureSetFacade.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectSetFeatureSetFacade.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * {@link DynObject} implementation to facade of a {@link FeatureSet} and allow
+ * to be used as a {@link DynObjectSet}.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class DynObjectSetFeatureSetFacade extends BaseWeakReferencingObservable
+    implements DynObjectSet, Observer {
+
+    private final FeatureSet featureSet;
+
+    private final FeatureStore store;
+
+    private final DynObjectFeatureFacade featureFacade =
+        new DynObjectFeatureFacade();
+
+    private final boolean fast;
+
+    /**
+     * Creates a new facade over a given feature set, with fast dynobject
+     * iteration.
+     * 
+     * @param featureSet
+     *            to facade
+     */
+    public DynObjectSetFeatureSetFacade(FeatureSet featureSet,
+        FeatureStore store) {
+        this(featureSet, store, true);
+    }
+
+    /**
+     * Creates a new facade over a given feature set, with fast dynobject
+     * iteration.
+     * 
+     * @param featureSet
+     *            to facade
+     * @param fast
+     *            if true try to reuse objects as much as possible to make the
+     *            object iteration faster. If true, DynObjects got through the
+     *            returned set must not be stored unless cloned.
+     */
+    public DynObjectSetFeatureSetFacade(FeatureSet featureSet,
+        FeatureStore store, boolean fast) {
+        this.featureSet = featureSet;
+        this.store = store;
+        store.addObserver(this);
+        this.fast = fast;
+    }
+
+    public void dispose() {
+        store.deleteObserver(this);
+    }
+
+    public void accept(final Visitor visitor, long firstValueIndex)
+        throws BaseException {
+        featureSet.accept(new Visitor() {
+
+            public void visit(Object obj) throws VisitCanceledException,
+                BaseException {
+                DynObjectFeatureFacade feature;
+                if (fast) {
+                    feature = featureFacade;
+                } else {
+                    feature = new DynObjectFeatureFacade();
+                }
+                feature.setFeatureCopy((Feature) obj);
+                visitor.visit(feature);
+            }
+        }, firstValueIndex);
+    }
+
+    public void accept(final Visitor visitor) throws BaseException {
+        featureSet.accept(new Visitor() {
+
+            public void visit(Object obj) throws VisitCanceledException,
+                BaseException {
+                featureFacade.setFeatureCopy((Feature) obj);
+                visitor.visit(featureFacade);
+            }
+        });
+    }
+
+    public long getSize() throws BaseException {
+        return featureSet.getSize();
+    }
+
+    public DisposableIterator iterator(long index) throws BaseException {
+        if (fast) {
+            return new DynObjectIteratorFeatureIteratorFacade(
+                featureSet.fastIterator(index), featureFacade);
+        } else {
+            return new DynObjectIteratorFeatureIteratorFacade(
+                featureSet.fastIterator(index));
+        }
+    }
+
+    public DisposableIterator iterator() throws BaseException {
+        if (fast) {
+            return new DynObjectIteratorFeatureIteratorFacade(
+                featureSet.fastIterator(), featureFacade);
+        } else {
+            return new DynObjectIteratorFeatureIteratorFacade(
+                featureSet.fastIterator());
+        }
+    }
+
+    public boolean isEmpty() throws BaseException {
+        return featureSet.isEmpty();
+    }
+
+    public boolean isDeleteEnabled() {
+        return store.isEditing();
+    }
+
+    public void delete(DynObject dynObject) throws BaseException {
+        DynObjectFeatureFacade facade = (DynObjectFeatureFacade) dynObject;
+        featureSet.delete(facade.getFeature());
+    }
+
+    public boolean isUpdateEnabled() {
+        return store.isEditing();
+    }
+
+    public void update(DynObject dynObject) throws BaseException {
+        DynObjectFeatureFacade facade = (DynObjectFeatureFacade) dynObject;
+        featureSet.update(facade.getEditable());
+    }
+
+    public void update(Observable observable, Object notification) {
+        if (observable.equals(store)
+            && notification instanceof FeatureStoreNotification) {
+            FeatureStoreNotification event =
+                (FeatureStoreNotification) notification;
+            if (event.getType() == FeatureStoreNotification.AFTER_STARTEDITING
+                || event.getType() == FeatureStoreNotification.AFTER_FINISHEDITING
+                || event.getType() == FeatureStoreNotification.AFTER_CANCELEDITING) {
+                setChanged();
+                notify(this, new Notification() {
+
+                    public String getType() {
+                        return Notification.EDITION_STATUS_CHANGE;
+                    }
+                });
+            }
+        }
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DynObjectSetFeatureSetFacade.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.java	(revision 42196)
@@ -0,0 +1,556 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.dal.feature.exception.FeatureSetInitializeException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.gvsig.tools.visitor.impl.AbstractIndexedVisitable;
+
+public class DefaultFeatureSet extends AbstractIndexedVisitable implements
+    FeatureSet, Observer {
+
+    private static final int NO_CHECKED = -1;
+    private static final int DEFAULT = 0;
+    private static final int FILTERED = 1;
+    private static final int ORDERED = 2;
+    private static final int ORDERED_FILTERED = 3;
+    private static final int EDITED = 4;
+    private static final int EDITED_FILTERED = 5;
+    private static final int ORDERD_EDITED = 6;
+    private static final int ORDERED_EDITED_FILTER = 7;
+
+    private boolean sourceStoreModified;
+    private boolean ownFeaturesModified;
+    DefaultFeatureStore store;
+    private List featureTypes;
+    FeatureQuery query;
+    FeatureSetProvider provider;
+    private long size;
+    private int iteratorMode;
+    List orderedData;
+    private Feature featureToIgnoreNotification;
+    DefaultFeatureStoreTransforms transform;
+    private FeatureQuery queryForProvider;
+    private FeatureType defatulFeatureType;
+    private FeatureType defatulFeatureTypeForProvider;
+
+    public DefaultFeatureSet(DefaultFeatureStore store, FeatureQuery query)
+        throws DataException {
+        this.featureToIgnoreNotification = null;
+        this.iteratorMode = NO_CHECKED;
+        this.sourceStoreModified = false;
+        this.ownFeaturesModified = false;
+        this.size = -1;
+        this.orderedData = null;
+        this.store = store;
+        if (this.store.isEditing()) {
+            this.transform = this.store.getFeatureTypeManager().getTransforms();
+        } else {
+            this.transform =
+                (DefaultFeatureStoreTransforms) store.getTransforms();
+        }
+        this.query = query;
+        try {
+            this.queryForProvider = (FeatureQuery) query.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new FeatureSetInitializeException(e);
+        }
+
+        this.featureTypes = new ArrayList();
+        if (this.query.getFeatureTypeId() == null
+            && this.query.getAttributeNames() == null) {
+            this.defatulFeatureType = this.store.getDefaultFeatureType();
+            this.featureTypes.addAll(this.store.getFeatureTypes());
+        } else {
+            this.defatulFeatureType = this.store.getFeatureType(this.query);
+            this.featureTypes.add(this.defatulFeatureType);
+        }
+        if (this.transform != null && !this.transform.isEmpty()) {
+            this.fixQueryForProvider(this.queryForProvider, this.transform);
+        } else {
+            this.defatulFeatureTypeForProvider = this.defatulFeatureType;
+        }
+
+        FeatureIndexes indexes = store.getIndexes();
+        if (this.queryForProvider.hasFilter() && indexes != null
+            && indexes.areValid()) {
+            this.provider =
+                (FeatureSetProvider) indexes
+                    .getFeatureSet(this.queryForProvider.getFilter());
+        }
+        if (this.provider == null) {
+            this.provider =
+                this.store.getProvider().createSet(this.queryForProvider,
+                    this.defatulFeatureTypeForProvider);
+        }
+        this.store.addObserver(this);
+    }
+
+    private void fixQueryForProvider(FeatureQuery theQueryForProvider,
+        DefaultFeatureStoreTransforms transformsToUse) throws DataException {
+        theQueryForProvider.setAttributeNames(null);
+        FeatureType ftype =
+            transformsToUse.getSourceFeatureTypeFrom(this.defatulFeatureType);
+        theQueryForProvider.setFeatureTypeId(ftype.getId());
+        this.defatulFeatureTypeForProvider = ftype;
+
+        if (transformsToUse.isTransformsOriginalValues()) {
+            theQueryForProvider.setFilter(null);
+            FeatureQueryOrder fqo = theQueryForProvider.getOrder();
+            if (fqo != null) {
+                fqo.clear();
+            }
+            return;
+
+        }
+
+        // Filter
+        Evaluator filter = theQueryForProvider.getFilter();
+        if (filter != null) {
+            boolean canUseFilter = true;
+            if (filter.getFieldsInfo() == null) {
+                canUseFilter = false;
+            } else {
+                canUseFilter = areEvaluatorFieldsInAttributes(filter, ftype);
+            }
+
+            if (!canUseFilter) {
+                theQueryForProvider.setFilter(null);
+            }
+
+        }
+
+        // Order
+        if (theQueryForProvider.hasOrder()) {
+            boolean canUseOrder = true;
+            Iterator iter = theQueryForProvider.getOrder().iterator();
+            FeatureQueryOrderMember item;
+            while (iter.hasNext()) {
+                item = (FeatureQueryOrderMember) iter.next();
+                if (item.hasEvaluator()) {
+                    if (!areEvaluatorFieldsInAttributes(item.getEvaluator(),
+                        ftype)) {
+                        canUseOrder = false;
+                        break;
+                    }
+                } else {
+                    if (ftype.get(item.getAttributeName()) == null) {
+                        canUseOrder = false;
+                        break;
+                    }
+                }
+            }
+
+            if (!canUseOrder) {
+                theQueryForProvider.getOrder().clear();
+            }
+        }
+
+    }
+
+    private boolean areEvaluatorFieldsInAttributes(Evaluator evaluator,
+        FeatureType fType) {
+        if (evaluator.getFieldsInfo() == null) {
+            return false;
+        }
+        String[] fieldNames = evaluator.getFieldsInfo().getFieldNames();
+        if (fieldNames.length == 0) {
+            return false;
+        } else {
+            for (int i = 0; i < fieldNames.length; i++) {
+                if (fType.get(fieldNames[i]) == null) {
+                    return false;
+                }
+
+            }
+        }
+        return true;
+    }
+
+    public FeatureType getDefaultFeatureType() {
+        return this.defatulFeatureType;
+    }
+
+    public List getFeatureTypes() {
+        return Collections.unmodifiableList(this.featureTypes);
+    }
+
+    public long getSize() throws DataException {
+        this.checkSourceStoreModified();
+        if (size < 0) {
+            size = calculateSize();
+        }
+        return size;
+    }
+
+    private long calculateSize() throws DataException {
+        int mode = this.getIteratorMode();
+        if ((mode & EDITED) != EDITED) {
+            if (this.provider.isEmpty()) {
+                return 0;
+            }
+        }
+        if ((mode & FILTERED) == FILTERED) {
+            long mySize = 0;
+            DisposableIterator iter = null;
+            try {
+                iter = this.fastIterator();
+                while (true) {
+                    iter.next();
+                    mySize++;
+                }
+            } catch (NoSuchElementException e) {
+                return mySize;
+            } finally {
+                iter.dispose();
+            }
+        } else
+            if ((mode & EDITED) == EDITED) {
+                return provider.getSize()
+                    + store.getFeatureManager().getDeltaSize();
+            }
+        return provider.getSize();
+    }
+
+    public void dispose() {
+        this.store.deleteObserver(this);
+        this.provider.dispose();
+        this.provider = null;
+
+        this.featureToIgnoreNotification = null;
+        if (orderedData != null) {
+            orderedData.clear();
+        }
+        this.orderedData = null;
+        this.store = null;
+        this.transform = null;
+        this.query = null;
+        this.queryForProvider = null;
+        this.featureTypes = null;
+        this.defatulFeatureType = null;
+        this.defatulFeatureTypeForProvider = null;
+    }
+
+    public boolean isFromStore(DataStore store) {
+        return this.store.equals(store);
+    }
+
+    public void update(Observable obsevable, Object notification) {
+        if (sourceStoreModified) {
+            return;
+        }
+
+        String type = ((FeatureStoreNotification) notification).getType();
+
+        if (type.equalsIgnoreCase(FeatureStoreNotification.AFTER_INSERT)
+            || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_DELETE)
+            || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_UPDATE)) {
+            if (this.featureToIgnoreNotification == ((FeatureStoreNotification) notification)
+                .getFeature()) {
+                return;
+            }
+            sourceStoreModified = true;
+            return;
+        }
+        if (type.equalsIgnoreCase(FeatureStoreNotification.AFTER_UPDATE_TYPE)
+            || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_REDO)
+            || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_UNDO)
+            || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_REFRESH)
+            || type
+                .equalsIgnoreCase(FeatureStoreNotification.COMPLEX_NOTIFICATION)
+            || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_CLOSE)
+            || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_DISPOSE)
+            || type.equalsIgnoreCase(FeatureStoreNotification.RESOURCE_CHANGED)
+            || type.equalsIgnoreCase(FeatureStoreNotification.TRANSFORM_CHANGE)) {
+            sourceStoreModified = true;
+            return;
+        }
+        if (type.equalsIgnoreCase(FeatureStoreNotification.AFTER_CANCELEDITING)
+            && ownFeaturesModified) {
+            sourceStoreModified = true;
+            return;
+        }
+    }
+
+    protected void doAccept(Visitor visitor, long firstValueIndex)
+        throws VisitCanceledException, BaseException {
+        DisposableIterator iterator = fastIterator(firstValueIndex);
+
+        try {
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                visitor.visit(feature);
+            }
+        } finally {
+            iterator.dispose();
+        }
+    }
+
+    protected void checkSourceStoreModified() {
+        if (sourceStoreModified) {
+			throw new ConcurrentDataModificationException(store == null ? ""
+					: store.getName());
+        }
+    }
+
+    public boolean isEmpty() throws DataException {
+        checkSourceStoreModified();
+        return this.getSize() == 0;
+    }
+
+    public DisposableIterator fastIterator() throws DataException {
+        return this.fastIterator(0);
+    }
+
+    public DisposableIterator fastIterator(long index) throws DataException {
+        if (index < 0) {
+            throw new IndexOutOfBoundsException("The index (" + index
+                + ") is less than 0");
+        }
+        int mode = this.getIteratorMode();
+
+        switch (mode) {
+        case DEFAULT:
+            return new FastDefaultIterator(this, index);
+
+        case FILTERED:
+            return new FastFilteredIterator(this, index);
+
+        case ORDERED:
+            if (this.orderedData != null) {
+                return new FastOrderedIterator(this, index);
+            } else {
+                return new FastOrderedIterator(this, new FastDefaultIterator(
+                    this, 0), index);
+            }
+
+        case ORDERED_FILTERED:
+            if (this.orderedData != null) {
+                return new FastOrderedIterator(this, index);
+            } else {
+                return new FastOrderedIterator(this, new FastFilteredIterator(
+                    this, 0), index);
+            }
+
+        case EDITED:
+            return new FastEditedIterator(this, index);
+
+        case EDITED_FILTERED:
+            return new FastEditedFilteredIterator(this, index);
+
+        case ORDERD_EDITED:
+            if (this.orderedData != null) {
+                return new FastOrderedIterator(this, index);
+            } else {
+                return new FastOrderedIterator(this, new FastEditedIterator(
+                    this, 0), index);
+            }
+
+        case ORDERED_EDITED_FILTER:
+            if (this.orderedData != null) {
+                return new FastOrderedIterator(this, index);
+            } else {
+                return new FastOrderedIterator(this,
+                    new FastEditedFilteredIterator(this, 0), index);
+            }
+        default:
+            throw new IllegalArgumentException();
+        }
+    }
+
+    public DisposableIterator iterator() throws DataException {
+        return this.iterator(0);
+    }
+
+    public DisposableIterator iterator(long index) throws DataException {
+        if (index < 0) {
+            throw new IndexOutOfBoundsException("The index (" + index
+                + ") is less than 0");
+        }
+        int mode = this.getIteratorMode();
+
+        switch (mode) {
+        case DEFAULT:
+            return new DefaultIterator(this, index);
+
+        case FILTERED:
+            return new FilteredIterator(this, index);
+
+        case ORDERED:
+            if (orderedData != null) {
+                return new OrderedIterator(this, index);
+
+            } else {
+                return new OrderedIterator(this, new DefaultIterator(this, 0),
+                    index);
+            }
+
+        case ORDERED_FILTERED:
+            return new OrderedIterator(this, new FilteredIterator(this, 0),
+                index);
+
+        case EDITED:
+            return new EditedIterator(this, index);
+
+        case EDITED_FILTERED:
+            return new EditedFilteredIterator(this, index);
+
+        case ORDERD_EDITED:
+            return new OrderedIterator(this, new EditedIterator(this, 0), index);
+
+        case ORDERED_EDITED_FILTER:
+            return new OrderedIterator(this,
+                new EditedFilteredIterator(this, 0), index);
+
+        default:
+            throw new IllegalArgumentException();
+        }
+
+    }
+
+    private boolean providerCanOrder() {
+        return this.provider.canOrder();
+    }
+
+    private boolean providerCanFilter() {
+        return this.provider.canFilter();
+    }
+
+    private int getIteratorMode() {
+
+        if (this.iteratorMode != NO_CHECKED) {
+            return this.iteratorMode;
+        }
+
+        // TODO Tener en cuenta las transformaciones ???
+
+        if (store.isEditing() && store.getFeatureManager().hasChanges()) {
+            if (this.query.hasOrder()) { // En edicion siempre ordeno yo.
+                if (this.query.hasFilter()) {
+                    return ORDERED_EDITED_FILTER;
+                } else {
+                    return ORDERD_EDITED;
+                }
+            } else {
+                if (this.query.hasFilter()) {
+                    return EDITED_FILTERED;
+                } else {
+                    return EDITED;
+                }
+            }
+        } else {
+            boolean useMyFilter = this.query.hasFilter();
+            boolean useMyOrder = this.query.hasOrder();
+            if (this.providerCanOrder() && this.transform.isEmpty()) {
+                useMyOrder = false;
+            }
+            if (this.providerCanFilter() && this.transform.isEmpty()) {
+                useMyFilter = false;
+            }
+
+            if (useMyOrder) {
+                if (useMyFilter) {
+                    return ORDERED_FILTERED;// ORDERED_FILTERED;
+                } else {
+                    return ORDERED;// ORDERED;
+                }
+            } else {
+                if (useMyFilter) {
+                    return FILTERED;// FILTERED;
+                } else {
+                    return DEFAULT;// DEFAULT;
+                }
+            }
+        }
+
+    }
+
+    public void delete(Feature feature) throws DataException {
+        this.featureToIgnoreNotification = feature;
+        this.store.delete(feature);
+        if (this.size > 0) {
+            this.size--;
+        }
+        this.featureToIgnoreNotification = null;
+        this.ownFeaturesModified = true;
+    }
+
+    public void insert(EditableFeature feature) throws DataException {
+        this.featureToIgnoreNotification = feature;
+        this.store.insert(feature);
+        if (this.size >= 0) {
+            this.size++;
+        }
+        this.featureToIgnoreNotification = null;
+        this.ownFeaturesModified = true;
+    }
+
+    public void update(EditableFeature feature) throws DataException {
+        this.featureToIgnoreNotification = feature;
+        this.store.update(feature);
+        this.featureToIgnoreNotification = null;
+        this.ownFeaturesModified = true;
+    }
+
+    public DynObjectSet getDynObjectSet() {
+        return this.getDynObjectSet(true);
+    }
+
+    public DynObjectSet getDynObjectSet(boolean fast) {
+        return new DynObjectSetFeatureSetFacade(this, store, fast);
+    }
+
+    public FeatureStore getFeatureStore() {
+        return store;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastDefaultIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastDefaultIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastDefaultIterator.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+public class FastDefaultIterator extends DefaultIterator {
+
+	DefaultFeature myFeature;
+
+	public FastDefaultIterator(DefaultFeatureSet featureSet, long index)
+			throws DataException {
+		super(featureSet);
+		this.initializeFeature();
+		if (index > 0) {
+			if (featureSet.provider.canIterateFromIndex()) {
+				try {
+					this.iterator = featureSet.provider.fastIterator(index);
+				} catch (UnsupportedOperationException e) {
+					this.iterator = featureSet.provider.fastIterator();
+					skypto(index);
+				}
+			} else {
+				this.iterator = featureSet.provider.fastIterator();
+				skypto(index);
+			}
+		} else {
+			this.iterator = featureSet.provider.fastIterator();
+		}
+
+	}
+
+	protected DefaultFeature createFeature(FeatureProvider fData)
+			throws DataException {
+		fData.setNew(false);
+		this.myFeature.setData(fData);
+
+		if (this.fset.transform.isEmpty()) {
+			return myFeature;
+		} else {
+			return (DefaultFeature) this.fset.transform.applyTransform(
+					myFeature, fset
+							.getDefaultFeatureType());
+		}
+	}
+
+	protected void initializeFeature() {
+		myFeature = new DefaultFeature(fset.store);
+	}
+
+	public void remove() {
+		super.remove();
+		this.initializeFeature();
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		myFeature = null;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastDefaultIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+public class FastOrderedIterator extends DefaultIterator {
+	DefaultFeature myFeature;
+	protected Feature lastFeature = null;
+
+	FastOrderedIterator(DefaultFeatureSet featureSet, Iterator iterator, long index) {
+		super(featureSet);
+		try {
+			this.initializeFeature();
+			if (featureSet.orderedData == null) {
+				// FIXME QUE PASA CON SIZE > Integer.MAX_VALUE ?????
+	
+				List data = new ArrayList();
+				Object item;
+				while (iterator.hasNext()) {
+					item = iterator.next();
+					if (item instanceof DefaultFeature){
+						data.add(((DefaultFeature) item).getData().getCopy());
+					} else {
+						data.add(((FeatureProvider)item).getCopy());
+					}
+				}
+				Collections.sort(data, new FeatureProviderComparator(featureSet.store,
+						featureSet.query.getOrder()));
+				featureSet.orderedData = data;
+			}
+	
+			if (index < Integer.MAX_VALUE) {
+				this.iterator = featureSet.orderedData.listIterator((int) index);
+			} else {
+				this.iterator = featureSet.orderedData.iterator();
+				this.skypto(index);
+			}
+		}
+		finally {			
+			if (iterator instanceof DisposableIterator) {
+				((DisposableIterator) iterator).dispose();
+			}
+		}
+	}
+
+	public FastOrderedIterator(DefaultFeatureSet featureSet, long index) {
+		super(featureSet);
+		this.initializeFeature();
+
+		if (index < Integer.MAX_VALUE) {
+			this.iterator = featureSet.orderedData.listIterator((int) index);
+		} else {
+			this.iterator = featureSet.orderedData.iterator();
+			this.skypto(index);
+		}
+	}
+
+	protected DefaultFeature createFeature(FeatureProvider fData) {
+		fData.setNew(false);
+		this.myFeature.setData(fData);
+		return this.myFeature;
+	}
+
+	protected void initializeFeature() {
+		myFeature = new DefaultFeature(fset.store);
+	}
+
+	public Object next() {
+		lastFeature = null;
+		lastFeature = (Feature) super.next();
+		return lastFeature;
+	}
+
+	public void remove() {
+		if (!fset.store.isEditing()) {
+			throw new UnsupportedOperationException();
+		}
+		if (this.lastFeature == null) {
+			throw new IllegalStateException();
+		}
+		try {
+			fset.store.delete(this.lastFeature);
+		} catch (DataException e) {
+			// FIXME Cambiar excepcion a una Runtime de DAL
+			throw new RuntimeException(e);
+		}
+		this.iterator.remove();
+		this.initializeFeature();
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		myFeature = null;
+		lastFeature = null;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultIterator.java	(revision 42196)
@@ -0,0 +1,146 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+
+
+class DefaultIterator extends AbstractDisposable implements DisposableIterator {
+
+	protected Iterator iterator;
+	protected DefaultFeatureSet fset;
+	protected Feature lastFeature = null;
+
+	public DefaultIterator(DefaultFeatureSet featureSet) {
+		this.fset = featureSet;
+	}
+
+	public DefaultIterator(DefaultFeatureSet featureSet, long index)
+			throws DataException {
+		this.fset = featureSet;
+		if (index > 0) {
+			if (featureSet.provider.canIterateFromIndex()) {
+				try {
+					this.iterator = featureSet.provider.iterator(index);
+				} catch (UnsupportedOperationException e) {
+					this.iterator = featureSet.provider.iterator();
+					skypto(index);
+				}
+			} else {
+				this.iterator = featureSet.provider.iterator();
+				skypto(index);
+			}
+		} else {
+			this.iterator = featureSet.provider.iterator();
+		}
+	}
+
+	protected void skypto(long index) {
+		// TODO: Comprobar si esta bien la condicion de n<=
+		for (long n = 0; n <= index && this.getIterator().hasNext(); n++, this
+				.getIterator()
+				.next()) {
+			;
+		}
+	}
+
+	public boolean hasNext() {
+		fset.checkSourceStoreModified();
+		return this.getIterator().hasNext();
+	}
+
+	public Object next() {
+		fset.checkSourceStoreModified();
+		lastFeature = null;
+		if (!this.hasNext()) {
+			throw new NoSuchElementException();
+		}
+		try {
+			lastFeature = this.createFeature((FeatureProvider) this.getIterator()
+					.next());
+			return lastFeature;
+		} catch (DataException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public void remove() {
+		if (!fset.store.isEditing()) {
+			throw new UnsupportedOperationException();
+		}
+		if (lastFeature == null) {
+			throw new IllegalStateException();
+		}
+		try {
+			this.fset.delete(this.lastFeature);
+		} catch (DataException e) {
+			// FIXME Cambiar excepcion a una Runtime de DAL
+			throw new RuntimeException(e);
+		}
+		lastFeature = null;
+	}
+
+	protected DefaultFeature createFeature(FeatureProvider fData)
+			throws DataException {
+		fData.setNew(false);
+		if (this.fset.transform.isEmpty()) {
+			return new DefaultFeature(fset.store, fData);
+		} else {
+			return (DefaultFeature) this.fset.transform.applyTransform(
+					new DefaultFeature(fset.store, fData), fset
+							.getDefaultFeatureType());
+		}
+	}
+
+	protected Iterator getIterator() {
+		return this.iterator;
+	}
+
+	protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
+		return false;
+	}
+
+	protected void doNext() throws DataException {
+
+	}
+
+	protected void doDispose() throws BaseException {
+		if (iterator instanceof DisposableIterator){
+			((DisposableIterator)this.iterator).dispose();
+		}
+		this.iterator = null;
+		this.fset = null;
+		this.lastFeature = null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FeatureProviderComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FeatureProviderComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FeatureProviderComparator.java	(revision 42196)
@@ -0,0 +1,146 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import java.util.Comparator;
+import java.util.Iterator;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+/*
+ *
+ * Compara dos Feature o FeatureProvider.
+ */
+public class FeatureProviderComparator implements Comparator {
+
+	private FeatureQueryOrder order;
+	private DefaultFeature f1;
+	private DefaultFeature f2;
+	private DefaultFeatureStore store;
+	private OrderElement[] elements = null;
+
+	private class OrderElement {
+		FeatureQueryOrderMember order = null;
+		int fieldIndex = -1;
+	}
+
+	public FeatureProviderComparator(DefaultFeatureStore store, FeatureQueryOrder order) {
+		this.order = order;
+		this.store = store;
+		this.f1 = new DefaultFeature(this.store);
+		this.f2 = new DefaultFeature(this.store);
+	}
+
+	private void initElements(FeatureType type) {
+		elements = new OrderElement[this.order.size()];
+		OrderElement cur;
+		Iterator iter = order.iterator();
+		FeatureQueryOrderMember orderItem;
+		int i = 0;
+		while (iter.hasNext()) {
+			cur = new OrderElement();
+			cur.order = (FeatureQueryOrderMember) iter.next();
+			if (!cur.order.hasEvaluator()) {
+				cur.fieldIndex = type.getIndex(cur.order.getAttributeName());
+			}
+			elements[i] = cur;
+			i++;
+		}
+
+	}
+
+	public int compare(Object arg0, Object arg1) {
+		FeatureQueryOrderMember order;
+		Comparable v1;
+		Comparable v2;
+		Object o1;
+		Object o2;
+		int v;
+		int fieldIndex;
+
+		f1.setData((FeatureProvider) arg0);
+		f2.setData((FeatureProvider) arg1);
+
+		if (elements == null){
+			initElements(f1.getType());
+		}
+
+		OrderElement element;
+
+		for (int i = 0; i < elements.length; i++) {
+			element = elements[i];
+
+			if (element.order.hasEvaluator()) {
+				Evaluator evaluator = element.order.getEvaluator();
+				try {
+					o1 = evaluator.evaluate(f1);
+					o2 = evaluator.evaluate(f2);
+				} catch (EvaluatorException e) {
+					throw new DataEvaluatorRuntimeException(e);
+				}
+			} else {
+				o1 = f1.get(element.fieldIndex);
+				o2 = f2.get(element.fieldIndex);
+			}
+			if (o1 == null) {
+				if (o2 == null) {
+					return 0;
+				} else {
+					v = 1;
+				}
+			} else {
+				if (o1 instanceof String && o2 instanceof String) {
+					v = CompatLocator.getStringUtils().compare((String) o1,
+							(String) o2, true);
+				}
+				else if (o1 instanceof Comparable && o2 instanceof Comparable) {
+					v1 = (Comparable) o1;
+					v2 = (Comparable) o2;
+					v = v1.compareTo(v2);
+				} else {
+					v = -1;
+				}
+			}
+
+			if (v != 0) {
+				if (element.order.getAscending()) {
+					return v;
+				} else {
+					return -v;
+				}
+			}
+		}
+		return 0;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FeatureProviderComparator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/OrderedIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/OrderedIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/OrderedIterator.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.featureset;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+public class OrderedIterator extends DefaultIterator {
+
+	protected Feature lastFeature = null;
+
+	OrderedIterator(DefaultFeatureSet featureSet, Iterator iterator, long index) {
+		super(featureSet);
+		// FIXME QUE PASA CON SIZE > Integer.MAX_VALUE ?????
+		if (featureSet.orderedData == null) {
+			List data = new ArrayList();
+			Object item;
+			while (iterator.hasNext()) {
+				item = iterator.next();
+				if (item instanceof DefaultFeature) {
+					data.add(((DefaultFeature) item).getData());
+				} else {
+					data.add(item);
+				}
+			}
+			Collections.sort(data, new FeatureProviderComparator(featureSet.store,
+					featureSet.query.getOrder()));
+			featureSet.orderedData = data;
+		}
+		if (iterator instanceof DisposableIterator) {
+			((DisposableIterator) iterator).dispose();
+		}
+		iterator = null;
+
+		if (index < Integer.MAX_VALUE) {
+			this.iterator = featureSet.orderedData.listIterator((int) index);
+		} else {
+			this.iterator = featureSet.orderedData.iterator();
+			this.skypto(index);
+		}
+	}
+
+	public OrderedIterator(DefaultFeatureSet featureSet, long index) {
+		super(featureSet);
+		if (index < Integer.MAX_VALUE) {
+			this.iterator = featureSet.orderedData.listIterator((int) index);
+		} else {
+			this.iterator = featureSet.orderedData.iterator();
+			this.skypto(index);
+		}
+	}
+
+	public void remove() {
+		super.remove();
+		this.iterator.remove();
+	}
+
+	protected DefaultFeature createFeature(FeatureProvider fData)
+			throws DataException {
+		fData.setNew(false);
+		return new DefaultFeature(fset.store, fData);
+
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		lastFeature = null;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/OrderedIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/SpatialManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/SpatialManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/SpatialManager.java	(revision 42196)
@@ -0,0 +1,313 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SpatialManager {
+    private static final Logger LOG = LoggerFactory.getLogger(SpatialManager.class);
+    
+    protected boolean isFullExtentDirty = true;
+    private FeatureStore featureStore;
+    private FeatureIndex featureIndex = null;
+    private Envelope originalEnvelope = null;
+    private Envelope fullEnvelope = null;
+    private ArrayList feaOperation=new ArrayList();
+    private boolean noSpatialData = false;
+
+    public SpatialManager(FeatureStore featureStore, Envelope originalEnvelope)
+            throws DataException {
+        this.featureStore=featureStore;
+        FeatureIndexes findexes=featureStore.getIndexes();
+        // Comprobamos si hay algun campo espacial a manejar
+
+        FeatureType fType = this.featureStore.getDefaultFeatureType();
+        // TODO Multy FType !!
+        if (fType.getDefaultGeometryAttributeIndex() < 0) {
+            noSpatialData = true;
+            return;
+        }
+        FeatureAttributeDescriptor attr = fType.getAttributeDescriptor(fType
+                .getDefaultGeometryAttributeIndex());
+        this.originalEnvelope = originalEnvelope;
+        if ((originalEnvelope != null) && (!originalEnvelope.isEmpty())) {
+            this.fullEnvelope = originalEnvelope.getGeometry().getEnvelope();
+        } else {
+            FeatureAttributeDescriptor geoAttr = fType.getAttributeDescriptor(fType.getDefaultGeometryAttributeIndex());
+            try {
+                this.fullEnvelope = GeometryLocator.getGeometryManager()
+                        .createEnvelope(geoAttr.getGeometrySubType());
+            } catch (Exception e) {
+                // FIXME Excpetion
+                throw new RuntimeException(e);
+            }
+        }
+        if (!fType.hasOID()) {
+            return;
+        }
+
+        Iterator iterator = findexes.iterator();
+        FeatureIndex index;
+        while (iterator.hasNext()) {
+            index = (FeatureIndex) iterator.next();
+            if (index.getAttributeNames().size() == 1
+                    && index.getAttributeNames().contains(attr.getName())) {
+                featureIndex = index;
+                break;
+            }
+        }
+
+        if (featureIndex instanceof DefaultFeatureIndex) {
+            ((DefaultFeatureIndex) featureIndex).setValid(true);
+        }
+    }
+
+
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param feature DOCUMENT ME!
+     * @param oldFeature DOCUMENT ME!
+     */
+    public void updateFeature(Feature feature, Feature oldFeature) {
+        if (noSpatialData) {
+            return;
+        }
+            try {
+            	if (featureIndex != null) {
+            		featureIndex.delete(oldFeature);
+            	}
+                feaOperation.add(new FeatureOperation(((DefaultFeature) oldFeature)
+                        .getReference(), FeatureOperation.DELETE));
+            	if (featureIndex != null) {
+            		featureIndex.insert(feature);
+            	}
+                feaOperation.add(new FeatureOperation(((DefaultFeature) feature)
+                        .getReference(), FeatureOperation.INSERT));
+            } catch (DataException e) {
+                throw new RuntimeException("Exception updating feature: "
+                    + feature, e);
+            }
+            // } else {
+            // fullEnvelope.add(feature.getDefaultEnvelope());
+        isFullExtentDirty = true;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param feature DOCUMENT ME!
+     */
+    public void insertFeature(Feature feature) {
+        if (noSpatialData) {
+            return;
+        }
+            try {
+            	if (featureIndex != null) {
+            		featureIndex.insert(feature);
+            	}
+                feaOperation.add(new FeatureOperation(
+                    ((DefaultFeature) feature).getReference(),
+                    FeatureOperation.INSERT));
+            } catch (DataException e) {
+                throw new RuntimeException("Exception inserting feature: "
+                    + feature, e);
+            }
+            isFullExtentDirty = true;
+//        } else if (!isFullExtentDirty) {
+//            fullEnvelope.add(feature.getDefaultEnvelope());
+//        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param feature DOCUMENT ME!
+     */
+    public void deleteFeature(Feature feature) {
+        if (noSpatialData) {
+            return;
+        }
+            try {
+            	if (featureIndex != null) {
+            		featureIndex.delete(feature);
+            	}
+                feaOperation.add(new FeatureOperation(((DefaultFeature) feature)
+                        .getReference(), FeatureOperation.DELETE));
+            } catch (DataException e) {
+                throw new RuntimeException("Exception deleting feature: "
+                    + feature, e);
+            }
+        isFullExtentDirty = true;
+    }
+
+    public void clear() {
+    }
+
+    public Envelope getEnvelope() throws DataException {
+        if (noSpatialData) {
+            return null;
+        }
+        if (!isFullExtentDirty){
+            return this.fullEnvelope;
+        }
+
+        // FIXME in every changes when anyone ask for envelope it was regenerated.
+        //       if we assume that the envelope may not be the minimum in edit mode
+        //       this call must be very much faster
+
+
+        FeatureAttributeDescriptor attr = featureStore.getDefaultFeatureType()
+                .getAttributeDescriptor(
+                        featureStore.getDefaultFeatureType()
+                                .getDefaultGeometryAttributeIndex());
+        Envelope fullEnvelope = null;
+
+        FeatureSet set = null;
+        DisposableIterator iterator = null;
+        try {
+            set = featureStore.getFeatureSet();
+            iterator = set.fastIterator();
+            //First while to initialize the feature envelope
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Envelope envelope = feature.getDefaultEnvelope();
+                if (envelope != null){
+                    fullEnvelope = (Envelope)envelope.clone();
+                    break;
+                }
+            }           
+            //Second while to add new evelopes tho the full envelope
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Envelope envelope = feature.getDefaultEnvelope();           
+                if(envelope!=null){
+                    fullEnvelope.add(envelope);
+                }
+            }
+            //Creating an empty envelope by default
+            if (fullEnvelope == null){
+                fullEnvelope = GeometryLocator.getGeometryManager().createEnvelope(
+                    attr.getGeometrySubType());
+            }
+        } catch (ConcurrentModificationException e) {
+            throw e;
+        } catch (ConcurrentDataModificationException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+            if (set != null) {
+                set.dispose();
+            }
+        }
+        this.fullEnvelope = fullEnvelope;
+        this.isFullExtentDirty = false;
+        return fullEnvelope;
+    }
+
+
+
+    public void cancelModifies() {
+        if (noSpatialData) {
+            return;
+        }
+        if (featureIndex != null){
+            for (int i = feaOperation.size()-1 ; i>=0 ; i--){
+                try {
+                    FeatureOperation fo = (FeatureOperation) feaOperation.get(i);
+                    if (fo.getOperation() == FeatureOperation.INSERT){                     
+                        featureIndex.delete(fo.getFeatureReference().getFeature());
+                    }else if (fo.getOperation() == FeatureOperation.DELETE){
+                        featureIndex.insert(fo.getFeatureReference().getFeature());
+                    }
+                } catch (DataException e) {
+                    LOG.error("Error canceling the edition", e);
+                }           
+            }
+        }
+        if (originalEnvelope!=null){
+            try {
+                fullEnvelope = (Envelope) originalEnvelope.clone();
+            } catch (CloneNotSupportedException e) {
+                // Should never happen
+                LOG.error("While cloning envelope", e);
+            }
+        } else {
+            fullEnvelope = null;
+        }
+        isFullExtentDirty = false;
+    }
+
+    private class FeatureOperation{
+        final static int INSERT=0;
+        final static int DELETE=1;
+        private FeatureReference ref;
+        private int operation;
+        public FeatureOperation(FeatureReference fe,int op){
+            ref=fe;
+            operation=op;
+        }
+        public FeatureReference getFeatureReference() {
+            return ref;
+        }
+        public void setFeatureReference(FeatureReference ref) {
+            this.ref = ref;
+        }
+        public int getOperation() {
+            return operation;
+        }
+        public void setOperation(int operation) {
+            this.operation = operation;
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/SpatialManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/JSIRSpatialIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/JSIRSpatialIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/JSIRSpatialIndexProvider.java	(revision 42196)
@@ -0,0 +1,231 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.index.AbstractFeatureIndexProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+
+import com.infomatiq.jsi.IntProcedure;
+import com.infomatiq.jsi.Rectangle;
+import com.infomatiq.jsi.rtree.RTree;
+
+public class JSIRSpatialIndexProvider extends AbstractFeatureIndexProvider {
+
+	public static final String NAME = "JSIRSpatialIndexProvider";
+	
+	private RTree rtree = null;
+	
+	class ListIntProcedure implements IntProcedure {
+
+        List solution = new ArrayList();
+
+        public boolean execute(int arg0) {
+            solution.add(new Integer(arg0));
+            return true;
+        }
+
+        public List getSolution() {
+            return solution;
+        }
+    }
+	
+	public JSIRSpatialIndexProvider() {
+		
+	}
+	
+    public void initialize() {
+    	try {
+    		this.rtree = createRTree();
+		} catch (Exception e) {
+			throw new RuntimeException();
+		}
+    }
+    
+    private RTree createRTree() {
+        RTree rtree = new RTree();
+        Properties props = new Properties();
+        // props.setProperty("MaxNodeEntries", "500");
+        // props.setProperty("MinNodeEntries", "200");
+        rtree.init(props);
+        return rtree;
+    }
+
+    public void insert(Object value, FeatureReferenceProviderServices fref) {
+        Envelope env = getEnvelope(value);
+
+        if (env == null) {
+            throw new IllegalArgumentException(
+                "value is neither Geometry or Envelope");
+        }
+
+        Object oid = fref.getOID();
+        if (!isCompatibleOID(oid)) {
+            throw new IllegalArgumentException("OID type not compatible: "
+                + oid.getClass().getName());
+        }
+
+        rtree.add(toJsiRect(env), ((Number) oid).intValue());
+    }
+
+    public void delete(Object value, FeatureReferenceProviderServices fref) {
+        Envelope env = getEnvelope(value);
+
+        if (env == null) {
+            throw new IllegalArgumentException(
+                "value is neither Geometry or Envelope");
+        }
+
+        Object oid = fref.getOID();
+        if (!isCompatibleOID(oid)) {
+            throw new IllegalArgumentException("OID type not compatible: "
+                + oid.getClass().getName());
+        }
+
+        rtree.delete(toJsiRect(env), ((Number) oid).intValue());
+    }
+
+    public List match(Object value) throws FeatureIndexException {
+        Envelope env = getEnvelope(value);
+
+        if (env == null) {
+            throw new IllegalArgumentException(
+                "value is neither Geometry or Envelope");
+        }
+        ListIntProcedure solution = new ListIntProcedure();
+        rtree.intersects(toJsiRect(env), solution);
+        return new LongList(solution.getSolution());
+    }
+
+    public List match(Object min, Object max) {
+        throw new UnsupportedOperationException(
+            "Can't perform this kind of search.");
+    }
+
+    public List nearest(int count, Object value) {
+        if (value == null) {
+            throw new IllegalArgumentException("value is null");
+        }
+
+        if (value instanceof Point) {
+            Point p = (Point) value;
+            com.infomatiq.jsi.Point jsiPoint =
+                new com.infomatiq.jsi.Point((float) p.getDirectPosition()
+                    .getOrdinate(0), (float) p.getDirectPosition().getOrdinate(
+                    1));
+            return (List) rtree.nearest(jsiPoint, count);
+        } else {
+            Envelope env = getEnvelope(value);
+
+            if (env == null) {
+                throw new IllegalArgumentException(
+                    "value is neither Geometry or Envelope");
+            }
+            return new LongList((List) rtree.nearest(toJsiRect(env), count));
+        }
+    }
+
+    public boolean isMatchSupported() {
+        return true;
+    }
+
+    public boolean isNearestSupported() {
+        return true;
+    }
+
+    public boolean isNearestToleranceSupported() {
+        return false;
+    }
+
+    public boolean isRangeSupported() {
+        return false;
+    }
+
+    public List nearest(int count, Object value, Object tolerance)
+        throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    public List range(Object value1, Object value2)
+        throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Indicates whether the given OID's type is compatible
+     * with this provider
+     * 
+     * @param oid
+     * 
+     * @return
+     *         true if this index provider supports the given oid type
+     */
+    private boolean isCompatibleOID(Object oid) {
+        if (!(oid instanceof Number)) {
+            return false;
+        }
+
+        long num = ((Number) oid).longValue();
+
+        if (num > Integer.MAX_VALUE || num < Integer.MIN_VALUE) {
+            return false;
+        }
+
+        return true;
+    }
+
+    protected Envelope getEnvelope(Object value) {
+        Envelope env = null;
+
+        if (value instanceof Envelope) {
+            env = (Envelope) value;
+        } else
+            if (value instanceof Geometry) {
+                env = ((Geometry) value).getEnvelope();
+            }
+        return env;
+    }
+    
+    protected Rectangle toJsiRect(Envelope env) {
+        Point min = env.getLowerCorner();
+        Point max = env.getUpperCorner();
+
+        Rectangle jsiRect =
+            new Rectangle((float) min.getX(), (float) min.getY(),
+                (float) max.getX(), (float) max.getY());
+        return jsiRect;
+    }
+
+    public void clear() throws DataException {
+        rtree = createRTree();
+    }
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/JSIRSpatialIndexProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureTypeManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureTypeManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureTypeManager.java	(revision 42196)
@@ -0,0 +1,437 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.expansionadapter.ExpansionAdapter;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider.FeatureTypeChanged;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class FeatureTypeManager {
+
+    private ExpansionAdapter expansionAdapter;
+    private ArrayList deleted = new ArrayList();// <FeatureID>
+    private int deltaSize = 0;
+    private HashMap added = new HashMap();
+    private HashMap modifiedFromOriginal = new HashMap();
+    private FeatureType originalType = null;
+    private boolean first = true;
+    private FeatureTypeManagerFeatureStoreTransforms transforms;
+    private FeatureStore store;
+
+    public FeatureTypeManager(FeatureStore store,
+            ExpansionAdapter expansionAdapter) {
+        this.expansionAdapter = expansionAdapter;
+        this.store = store;
+        this.transforms = new FeatureTypeManagerFeatureStoreTransforms();
+        this.transforms.setFeatureStore(store);
+    }
+
+    public void dispose() {
+        this.expansionAdapter.close();
+        this.expansionAdapter = null;
+        this.deleted.clear();
+        this.deleted = null;
+        this.transforms.clear();
+    }
+
+    public FeatureType getType(String id) throws DataException {
+        Integer intNum = ((Integer) added.get(id));
+        if (intNum == null) {
+            intNum = ((Integer) modifiedFromOriginal.get(id));
+            if (intNum == null) {
+                return null;
+            }
+        }
+        int num = intNum.intValue();
+
+        if (num == -1) {
+            /*
+             * This happens for example when we are going back to the
+             * original feature type which is not managed by
+             * expansionAdapter
+             */
+            return null;
+        }
+
+        FeatureType type = (FeatureType) expansionAdapter.getObject(num);
+        return type;
+    }
+
+    public int update(FeatureType type, FeatureType oldType) {
+        // deleted.add(oldType.getId());
+        if (first) {
+            originalType = oldType;
+            first = false;
+        }
+        int oldNum = -1;
+        int num = expansionAdapter.addObject(type);
+        String id = type.getId();
+
+        if (added.containsKey(id)) {
+            oldNum = ((Integer) added.get(id)).intValue();
+            added.put(id, new Integer(num));
+        } else {
+            if (modifiedFromOriginal.get(id) != null) {
+                oldNum = ((Integer) modifiedFromOriginal.get(id)).intValue();
+            }
+            modifiedFromOriginal.put(id, new Integer(num));
+        }
+
+        try {
+            this.transforms.add(new UpdateFeatureTypeTransform(this.store,
+                    oldType, type));
+        } catch (DataException e) {
+            throw new RuntimeException(); // FIXME (pero esto no deberia de
+            // pasar nunca)
+        }
+        return oldNum;
+    }
+
+    private class UpdateFeatureTypeTransform extends AbstractFeatureStoreTransform {
+
+        private FeatureType ftSource;
+
+        private EditableFeatureType ftTarget_editable;
+        private FeatureType ftTarget_non_editable;
+
+        private WeakReference wkRefStore;
+        private List ftypes = null;
+        private List attrInSourceToUse;
+
+        UpdateFeatureTypeTransform(FeatureStore featureStore,
+                FeatureType ftSource, FeatureType ftTarget) {
+            this.ftSource = ftSource;
+
+            if (ftTarget instanceof EditableFeatureType) {
+
+                ftTarget_editable = (EditableFeatureType) ftTarget;
+                ftTarget_non_editable = ftTarget_editable.getNotEditableCopy();
+            } else {
+                ftTarget_non_editable = ftTarget;
+            }
+
+            this.wkRefStore = new WeakReference(featureStore);
+            this.initializeAttributesToUse();
+        }
+
+        private void initializeAttributesToUse() {
+            attrInSourceToUse = new ArrayList();
+
+            Iterator iter = null;
+            if (ftTarget_editable != null) {
+                iter = ftTarget_editable.iterator();
+            } else {
+                iter = ftTarget_non_editable.iterator();
+            }
+
+            FeatureAttributeDescriptor tAttr, sAttr;
+            EditableFeatureAttributeDescriptor ead = null;
+            while (iter.hasNext()) {
+                tAttr = (FeatureAttributeDescriptor) iter.next();
+                sAttr = this.ftSource.getAttributeDescriptor(tAttr.getName());
+                if (sAttr == null) {
+                    if (tAttr instanceof EditableFeatureAttributeDescriptor) {
+                        ead = (EditableFeatureAttributeDescriptor) tAttr;
+                        if (ead.getOriginalName() != null) {
+                            sAttr = this.ftSource.getAttributeDescriptor(ead.getOriginalName());
+                            if (sAttr == null) {
+                                continue;
+                            }
+                        } else {
+                            continue;
+                        }
+                    } else {
+                        continue;
+                    }
+                }
+                if (tAttr.getType() != sAttr.getType()) {
+                    /*
+                     * Ignore if type is not the same (user removed field
+                     * and added another with same name but different type)
+                     */
+                    continue;
+                }
+                attrInSourceToUse.add(sAttr.getName());
+            }
+        }
+
+        public void applyTransform(Feature source, EditableFeature target)
+                throws DataException {
+
+            Iterator iter = target.getType().iterator();
+            FeatureAttributeDescriptor tAttr;
+            FeatureAttributeDescriptor tAttr_edi;
+            FeatureAttributeDescriptor srcAtt;
+
+            /*
+             * field name in source feature
+             */
+            String s_name;
+
+            /*
+             * field name in target feature (the same as in source
+             * except if renamed)
+             */
+            String t_name;
+
+            EditableFeatureAttributeDescriptor eatd = null;
+            while (iter.hasNext()) {
+                tAttr = (FeatureAttributeDescriptor) iter.next();
+
+                if (ftTarget_editable != null) {
+                    /*
+                     * If target FT is editable, try to get original name
+                     */
+                    t_name = tAttr.getName();
+                    s_name = t_name;
+                    tAttr_edi = ftTarget_editable.getAttributeDescriptor(t_name);
+                    if (tAttr_edi instanceof EditableFeatureAttributeDescriptor) {
+                        eatd = (EditableFeatureAttributeDescriptor) tAttr_edi;
+                        s_name = eatd.getOriginalName();
+                    }
+
+                    /*
+                     * If not found, use normal name
+                     */
+                    if (s_name == null) {
+                        s_name = tAttr.getName();
+                    }
+                } else {
+                    /*
+                     * If target FT is not editable, use normal name
+                     */
+                    t_name = tAttr.getName();
+                    s_name = t_name;
+                }
+
+                srcAtt = source.getType().getAttributeDescriptor(s_name);
+
+                if (srcAtt != null
+                        && /*
+                         * This prevents the case when user has removed field and
+                         * added new field with same name and different type.
+                         * In that case, value will be the default value (else below)
+                         */ srcAtt.getType() == tAttr.getType()) {
+
+                    target.set(t_name, source.get(s_name));
+
+                } else {
+                    target.set(t_name, tAttr.getDefaultValue());
+                }
+            }
+        }
+
+        public FeatureType getDefaultFeatureType() throws DataException {
+            return this.ftTarget_non_editable;
+        }
+
+        public FeatureStore getFeatureStore() {
+            return (FeatureStore) this.wkRefStore.get();
+        }
+
+        public List getFeatureTypes() throws DataException {
+            if (this.ftypes == null) {
+                this.ftypes = Arrays
+                        .asList(new FeatureType[]{this.ftTarget_non_editable});
+            }
+            return this.ftypes;
+        }
+
+        public FeatureType getSourceFeatureTypeFrom(
+                FeatureType targetFeatureType) {
+            EditableFeatureType orgType = ftSource.getEditable();
+            Iterator iter = orgType.iterator();
+            FeatureAttributeDescriptor attr;
+            EditableFeatureAttributeDescriptor efad = null;
+
+            while (iter.hasNext()) {
+                attr = (FeatureAttributeDescriptor) iter.next();
+                if (!attrInSourceToUse.contains(attr.getName())) {
+                    if (attr instanceof EditableFeatureAttributeDescriptor) {
+                        efad = (EditableFeatureAttributeDescriptor) attr;
+                        if (efad.getOriginalName() != null
+                                && !attrInSourceToUse.contains(efad.getOriginalName())) {
+                            iter.remove();
+                        }
+                    } else {
+                        iter.remove();
+                    }
+                }
+            }
+            return orgType.getNotEditableCopy();
+        }
+
+        public void setFeatureStore(FeatureStore featureStore) {
+            this.wkRefStore = new WeakReference(featureStore);
+        }
+
+        public boolean isTransformsOriginalValues() {
+            return false;
+        }
+
+    }
+
+    public void restore(String id) {
+        deleted.remove(id);
+        deltaSize++;
+    }
+
+    public void restore(String id, int num) {
+        if (added.containsKey(id)) {
+            added.put(id, new Integer(num));
+        } else {
+            modifiedFromOriginal.put(id, new Integer(num));
+        }
+    }
+
+    public boolean isDeleted(FeatureType type) {
+        return deleted.contains(type.getId());
+    }
+
+    public boolean isDeleted(String id) {
+        return deleted.contains(id);
+    }
+
+    public void clear() {
+        added.clear();
+        modifiedFromOriginal.clear();
+        expansionAdapter.close();
+        deleted.clear();// <FeatureID>
+        deltaSize = 0;
+    }
+
+    public boolean hasChanges() {
+        return added.size() > 0 || modifiedFromOriginal.size() > 0
+                || deleted.size() > 0;
+    }
+
+    public Iterator newsIterator() {
+        return added.values().iterator();
+    }
+
+    public boolean hasNews() {
+        return !added.isEmpty();
+    }
+
+    public long getDeltaSize() {
+        return deltaSize;
+    }
+
+    public FeatureType getOriginalFeatureType() {
+        return originalType;
+    }
+
+    public DefaultFeatureStoreTransforms getTransforms() {
+        return this.transforms;
+    }
+
+    public class FeatureTypeManagerFeatureStoreTransforms extends
+            DefaultFeatureStoreTransforms {
+
+        private FeatureTypeManagerFeatureStoreTransforms() {
+
+        }
+
+        protected void checkEditingMode() {
+        }
+
+        protected void notifyChangeToStore() {
+        }
+
+        public PersistentState getState() throws PersistenceException {
+            // FIXME
+            throw new UnsupportedOperationException();
+        }
+
+        public void loadState(PersistentState state)
+                throws PersistenceException {
+            // FIXME
+            throw new UnsupportedOperationException();
+        }
+
+        public void loadFromState(PersistentState state) throws PersistenceException {
+            // FIXME
+            throw new UnsupportedOperationException();
+        }
+
+        public FeatureStoreTransform add(FeatureStoreTransform transform)
+                throws DataException {
+            if (!(transform instanceof UpdateFeatureTypeTransform)) {
+                // FIXME
+                throw new IllegalArgumentException();
+            }
+            return super.add(transform);
+        }
+
+    }
+
+    public class FeatureTypesChangedItem implements FeatureTypeChanged {
+
+        private FeatureType source;
+        private FeatureType target;
+
+        public FeatureTypesChangedItem(FeatureType source, FeatureType target) {
+            this.source = source;
+            this.target = target;
+        }
+
+        public FeatureType getSource() {
+            return source;
+        }
+
+        public FeatureType getTarget() {
+            return target;
+        }
+
+    }
+
+    public Iterator getFeatureTypesChanged() throws DataException {
+        // FIXME this don't work for Store.fType.size() > 1
+        List list = new ArrayList();
+        if (modifiedFromOriginal.size() > 0) {
+            FeatureType src = this.getOriginalFeatureType();
+            list.add(new FeatureTypesChangedItem(src, this.store
+                    .getFeatureType(src.getId())));
+        }
+        return list.iterator();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureTypeManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureComparator.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Comparator;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+public class DefaultFeatureComparator implements Comparator {
+
+	private FeatureQueryOrder order;
+
+
+	public DefaultFeatureComparator(FeatureQueryOrder order) {
+		this.order = order;
+		// TODO optimizar en un array???
+
+	}
+
+
+	private int myCompare(Object arg0, Object arg1) {
+		if (arg0 == null){
+			if (arg1 == null){
+				return 0;
+			} else{
+				return 1;
+			}
+		} else if (arg1 == null){
+			if (arg0 == null) {
+				return 0;
+			} else {
+				return 1;
+			}
+		}
+		if (arg0 instanceof Comparable) {
+			return ((Comparable) arg0).compareTo(arg1);
+		} else if (arg1 instanceof Comparable) {
+			return ((Comparable) arg1).compareTo(arg0) * -1;
+		}
+
+		if (arg0.equals(arg1)){
+			return 0;
+		} else{
+			return -1;
+		}
+
+	}
+
+	public int compare(Object arg0, Object arg1) {
+		Iterator iter = this.order.iterator();
+		int returnValue = 0;
+		Feature f0 = (Feature) arg0;
+		Feature f1 = (Feature) arg1;
+		Object item;
+		String attrName;
+		Evaluator evaluator;
+		while (returnValue == 0 && iter.hasNext()) {
+			item = iter.next();
+			if (item instanceof String) {
+				attrName = (String) item;
+				returnValue = this
+						.myCompare(f0.get(attrName), f1
+						.get(attrName));
+			} else {
+				evaluator = (Evaluator) item;
+				try {
+					returnValue = this.myCompare(evaluator
+							.evaluate((EvaluatorData) f0), evaluator
+							.evaluate((EvaluatorData) f1));
+				} catch (EvaluatorException e) {
+					throw new DataEvaluatorRuntimeException(e);
+				}
+			}
+		}
+
+		return returnValue;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureComparator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndex.java	(revision 42196)
@@ -0,0 +1,583 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.Messages;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexOperationException;
+import org.gvsig.fmap.dal.feature.exception.InvalidFeatureIndexException;
+import org.gvsig.fmap.dal.feature.spi.DefaultLongList;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.CancellableTask;
+import org.gvsig.tools.task.MonitorableTask;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default feature index provider services.
+ * 
+ * @author gvSIG team
+ */
+public class DefaultFeatureIndex extends AbstractDisposable implements
+    FeatureIndexProviderServices,
+    WeakReferencingObservable {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultFeatureIndex.class);
+
+    private final FeatureStoreProviderServices featureStore;
+    private final FeatureType featureType;
+    private final String attributeName;
+    private final String indexName;
+    private final int dataType;
+    private final FeatureIndexProvider indexProvider;
+    private List attributeNames;
+
+    private Object featureOperationTaskLock = new Object();
+    private FeatureIndexOperationTask featureIndexTask;
+
+    private boolean valid = true;
+
+    private DelegateWeakReferencingObservable observable =
+        new DelegateWeakReferencingObservable(this);
+
+    public DefaultFeatureIndex(FeatureStoreProviderServices featureStore,
+        FeatureType featureType, FeatureIndexProvider indexProvider,
+        String attributeName, String indexName) {
+
+        if (featureStore == null) {
+            throw new IllegalArgumentException("featureStore cannot be null.");
+        }
+        if (featureType == null) {
+            throw new IllegalArgumentException("featureType cannot be null.");
+        }
+        if (attributeName == null) {
+            throw new IllegalArgumentException("attributeName cannot be null.");
+        }
+        if (indexName == null) {
+            throw new IllegalArgumentException("indexName cannot be null.");
+        }
+
+        // FIXME Esto debe ir al provider
+        if (featureStore.getProvider().getOIDType() != DataTypes.INT
+            && featureStore.getProvider().getOIDType() != DataTypes.LONG) {
+            throw new IllegalArgumentException();
+        }
+
+        FeatureAttributeDescriptor attr =
+            featureType.getAttributeDescriptor(attributeName);
+        if (attr == null) {
+            throw new IllegalArgumentException("Attribute " + attributeName
+                + " not found in FeatureType " + featureType.toString());
+        }
+
+        this.featureStore = featureStore;
+        this.featureType = featureType;
+        this.attributeName = attributeName;
+        this.indexName = indexName;
+        this.dataType = attr.getType();
+        this.indexProvider = indexProvider;
+
+        attributeNames = new ArrayList();
+        attributeNames.add(attributeName);
+    }
+
+    public final FeatureAttributeDescriptor getFeatureAttributeDescriptor() {
+        return featureType.getAttributeDescriptor(attributeName);
+    }
+
+    public final FeatureStoreProviderServices getFeatureStoreProviderServices() {
+        return featureStore;
+    }
+
+    public final FeatureType getFeatureType() {
+        return featureType;
+    }
+
+    public final String getAttributeName() {
+        return attributeName;
+    }
+
+    public final int getDataType() {
+        return dataType;
+    }
+
+    /**
+     * {@link MonitorableTask} and {@link CancellableTask} to perform long
+     * operations on the index: filling and inserting or deleting a feature set.
+     * 
+     * @author gvSIG Team
+     * @version $Id$
+     */
+    private static class FeatureIndexOperationTask extends
+        AbstractMonitorableTask {
+
+        private final DefaultFeatureIndex index;
+
+        public static final int OP_FILL = 0;
+        public static final int OP_INSERT_FSET = 1;
+        public static final int OP_DELETE_FSET = 2;
+
+        private static final String[] OP_NAMES = { //
+            Messages.getText("filling_index"), // OP_FILL
+                Messages.getText("updating_index"), // OP_INSERT_FSET
+                Messages.getText("updating_index"), // OP_DELETE_FSET
+            };
+
+        private final int operation;
+
+        private final FeatureSet data;
+
+        private final Observer operationObserver;
+
+        private final FeatureStore store;
+
+        /**
+         * Creates a new {@link FeatureIndexOperationTask}
+         * 
+         * @param index
+         *            to operate on
+         * @param store
+         *            to index data from
+         * @param operation
+         *            to perform: {@link #OP_FILL}, {@link #OP_INSERT_FSET} or
+         *            {@link #OP_DELETE_FSET}
+         * @param data
+         *            feature set to insert or delete in the insert or delete
+         *            operations
+         * @param operationObserver
+         *            to be notified when the operation starts, finishes, is
+         *            cancelled or has finished with errors
+         */
+        protected FeatureIndexOperationTask(DefaultFeatureIndex index,
+            FeatureStore store, int operation, FeatureSet data,
+            Observer operationObserver) {
+            super(OP_NAMES[operation]);
+            this.index = index;
+            this.store = store;
+            this.operation = operation;
+            this.data = data;
+            this.operationObserver = operationObserver;
+            setDaemon(true);
+            setPriority(MIN_PRIORITY);
+        }
+
+        public void run() {
+            try {
+                switch (operation) {
+                case OP_FILL:
+                    notify(FeatureStoreNotification.INDEX_FILLING_STARTED);
+                    clearAndFill();
+                    break;
+
+                case OP_INSERT_FSET:
+                    notify(FeatureStoreNotification.INDEX_FILLING_STARTED);
+                    insert(data);
+                    break;
+
+                case OP_DELETE_FSET:
+                    notify(FeatureStoreNotification.INDEX_FILLING_STARTED);
+                    delete(data);
+                    break;
+                }
+            } catch (Exception e) {
+                Exception fioex =
+                    new FeatureIndexOperationException(index,
+                        OP_NAMES[operation], e);
+                notify(FeatureStoreNotification.INDEX_FILLING_ERROR, fioex);
+                throw new RuntimeException(fioex);
+            } finally {
+                index.removeTask(this);
+            }
+        }
+
+        /**
+         * Clears the index data and fills it again.
+         */
+        private void clearAndFill() throws DataException {
+            FeatureSet set = null;
+            try {
+                synchronized (index) {
+                    set = store.getFeatureSet();
+                    if (isCancellationRequested()) {
+                        cancel();
+                        return;
+                    }
+                    index.clear();
+                    if (isCancellationRequested()) {
+                        cancel();
+                        return;
+                    }
+                    insert(set);
+                    index.setValid(true);
+                }
+            } catch (IllegalStateException e) {
+            	// The feature store has entered in editing or 
+            	// append mode again, cancel indexing.
+            	cancel();
+            } finally {
+                DisposeUtils.dispose(set);
+            }
+        }
+
+        private void insert(FeatureSet data) throws DataException {
+            DisposableIterator it = null;
+            long counter = 0;
+            try {
+                it = data.fastIterator();
+                synchronized (index) {
+                    taskStatus.setRangeOfValues(0, data.getSize());
+                    taskStatus.add();
+                    while (it.hasNext()) {
+                        if (isCancellationRequested()) {
+                            index.clear();
+                            cancel();
+                            return;
+                        }
+                        Feature feat = (Feature) it.next();
+                        index.insert(feat);
+                        taskStatus.setCurValue(counter++);
+                    }
+                    notify(FeatureStoreNotification.INDEX_FILLING_SUCCESS);
+                }
+                taskStatus.terminate();
+            } catch (IllegalStateException e) {
+            	// The feature store has entered in editing or 
+            	// append mode again, cancel indexing.
+            	taskStatus.cancel();
+            } catch (RuntimeException e) {
+                taskStatus.abort();
+                throw e;
+            } catch (DataException e) {
+                taskStatus.abort();
+                throw e;
+            } finally {
+                DisposeUtils.dispose(it);
+                taskStatus.remove();
+            }
+        }
+
+        private void delete(FeatureSet data) throws FeatureIndexException {
+            DisposableIterator it = null;
+            try {
+                it = data.fastIterator();
+                synchronized (index) {
+                    while (it.hasNext()) {
+                        if (isCancellationRequested()) {
+                            cancel();
+                            return;
+                        }
+                        Feature feat = (Feature) it.next();
+                        index.delete(feat);
+                    }
+                    notify(FeatureStoreNotification.INDEX_FILLING_SUCCESS);
+                }
+            } catch (DataException e) {
+                throw new FeatureIndexException(e);
+            } finally {
+                DisposeUtils.dispose(it);
+            }
+        }
+
+        private void cancel() {
+            notify(FeatureStoreNotification.INDEX_FILLING_CANCELLED);
+            taskStatus.cancel();
+        }
+
+        public void notifyOperationObserver(DataStoreNotification notification) {
+            if (this.operationObserver != null) {
+                this.operationObserver.update(index, notification);
+            }
+        }
+
+        private void notify(String notificationType) {
+            DataStoreNotification notification =
+                new DefaultFeatureStoreNotification(store, notificationType,
+                    index);
+            notifyOperationObserver(notification);
+            index.notifyObservers(notification);
+        }
+
+        private void notify(String notificationType, Exception exception) {
+            DataStoreNotification notification =
+                new DefaultFeatureStoreNotification(store, notificationType,
+                    exception);
+            notifyOperationObserver(notification);
+            index.notifyObservers(notification);
+        }
+    }
+
+    private FeatureIndexOperationTask createIndexTask(int operation,
+        FeatureSet data, Observer observer) {
+        synchronized (featureOperationTaskLock) {
+            if (featureIndexTask != null) {
+                this.featureIndexTask.cancelRequest();
+                removeTask(this.featureIndexTask);
+            }
+            FeatureIndexOperationTask fillingTask =
+                new FeatureIndexOperationTask(this,
+                    featureStore.getFeatureStore(), operation, data, observer);
+            this.featureIndexTask = fillingTask;
+            return fillingTask;
+        }
+    }
+
+    private void removeTask(FeatureIndexOperationTask task) {
+        synchronized (featureOperationTaskLock) {
+            // Remove if it is not null and the same task
+            if (this.featureIndexTask == task) {
+                featureIndexTask = null;
+            }
+        }
+    }
+
+    public void fill() throws FeatureIndexException {
+        fill(false, null);
+    }
+
+    public void fill(boolean background, Observer observer)
+        throws FeatureIndexException {
+        FeatureIndexOperationTask task =
+            createIndexTask(FeatureIndexOperationTask.OP_FILL, null, observer);
+        if (background) {
+            task.start();
+        } else {
+            task.run();
+        }
+    }
+
+    public final void insert(FeatureSet data) throws DataException {
+        if (!isValid()) {
+            throw new InvalidFeatureIndexException();
+        }
+        FeatureIndexOperationTask task =
+            createIndexTask(FeatureIndexOperationTask.OP_INSERT_FSET, data,
+                null);
+        task.run();
+    }
+
+    public synchronized final void insert(Feature feat) throws DataException {
+        try {
+        	FeatureIndexProvider prov = getIndexProvider();
+        	Object value = feat.get(getAttributeName());
+        	if(prov.allowNulls() || value != null ) {
+        		prov.insert(value,
+        				(FeatureReferenceProviderServices) feat.getReference());
+        	}
+        } catch (NullPointerException e) {
+            throw new IllegalArgumentException("Could not add Feature: " + feat
+                + " to index " + this
+                + ". It does not contain a column with name "
+                + getAttributeName());
+        } catch (ClassCastException e) {
+            throw new IllegalArgumentException("Could not add Feature: " + feat
+                + " to index " + this + ". Attribute " + getAttributeName()
+                + " data type is not valid.");
+        }
+    }
+
+    public final void delete(FeatureSet data) throws FeatureIndexException {
+        if (!isValid()) {
+            throw new InvalidFeatureIndexException();
+        }
+        FeatureIndexOperationTask task =
+            createIndexTask(FeatureIndexOperationTask.OP_DELETE_FSET, data,
+                null);
+        task.run();
+    }
+
+    public synchronized final void delete(Feature feat) throws DataException {
+        getIndexProvider().delete(feat.get(getAttributeName()),
+            (FeatureReferenceProviderServices) feat.getReference());
+    }
+
+    private synchronized void clear() throws DataException {
+        getIndexProvider().clear();
+    }
+
+    public synchronized FeatureSet getMatchFeatureSet(Object value)
+        throws FeatureIndexException {
+        if (!isValid()) {
+            throw new InvalidFeatureIndexException();
+        }
+        return new IndexFeatureSet(this, new DefaultLongList(
+            indexProvider.match(value)));
+    }
+
+    public synchronized FeatureSet getRangeFeatureSet(Object value1,
+        Object value2) throws FeatureIndexException {
+        if (!isValid()) {
+            throw new InvalidFeatureIndexException();
+        }
+        return new IndexFeatureSet(this, new DefaultLongList(
+            indexProvider.range(value1, value2)));
+    }
+
+    public synchronized FeatureSet getNearestFeatureSet(int count, Object value)
+        throws FeatureIndexException {
+        if (!isValid()) {
+            throw new InvalidFeatureIndexException();
+        }
+        return new IndexFeatureSet(this, new DefaultLongList(
+            indexProvider.nearest(count, value)));
+    }
+
+    public synchronized FeatureSet getNearestFeatureSet(int count,
+        Object value, Object tolerance) throws FeatureIndexException {
+        if (!isValid()) {
+            throw new InvalidFeatureIndexException();
+        }
+        return new IndexFeatureSet(this, new DefaultLongList(
+            indexProvider.nearest(count, value, tolerance)));
+    }
+
+    public void initialize() throws InitializeException {
+        indexProvider.setFeatureIndexProviderServices(this);
+        indexProvider.initialize();
+    }
+
+    public List getAttributeNames() {
+        return attributeNames;
+    }
+
+    public String getNewFileName(String prefix, String sufix) {
+        int n = 0;
+        File file = new File(prefix + getName(), sufix);
+        while (file.exists()) {
+            n++;
+            file = new File(prefix + getName() + n, sufix);
+        }
+        return file.getAbsolutePath();
+    }
+
+    public String getFileName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getTemporaryFileName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+
+    public FeatureIndexProvider getFeatureIndexProvider() {
+        return this.indexProvider;
+    }
+
+    public boolean isFilling() {
+        synchronized (featureOperationTaskLock) {
+            return featureIndexTask != null;
+        }
+    }
+
+    public boolean isValid() {
+        synchronized (featureOperationTaskLock) {
+            return !isFilling() && valid;
+        }
+    }
+
+    public synchronized void waitForIndex() {
+        // Nothing to do, this is just used for anyone to block until the index
+        // has finished being used by a FeatureIndexOperation.
+        LOG.debug("Wait finished for index: {}", this);
+    }
+
+    public void setValid(boolean valid) {
+        synchronized (featureOperationTaskLock) {
+            this.valid = valid;
+        }
+    }
+
+    protected void doDispose() throws BaseException {
+        synchronized (featureOperationTaskLock) {
+            setValid(false);
+            if (this.featureIndexTask != null) {
+                this.featureIndexTask.cancelRequest();
+                this.featureIndexTask = null;
+            }
+        }
+        // Wait for any task until it finishes running
+        synchronized (this) {
+            return;
+        }
+    }
+
+    public String toString() {
+        return "Feature index with name" + indexName
+            + ", for the FeatureType: " + featureType + ", and the attribute: "
+            + attributeName;
+    }
+
+    public void notifyObservers(Object notification) {
+        observable.notifyObservers(notification);
+    }
+
+    public String getName() {
+        return indexName;
+    }
+
+    private FeatureIndexProvider getIndexProvider() {
+        return indexProvider;
+    }
+
+    public void addObserver(Observer observer) {
+        observable.addObserver(observer);
+    }
+
+    public void deleteObserver(Observer observer) {
+        observable.deleteObserver(observer);
+    }
+
+    public void deleteObservers() {
+        observable.deleteObservers();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureIndex.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/MemorySpatialIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/MemorySpatialIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/MemorySpatialIndexProvider.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.index.AbstractFeatureIndexProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public class MemorySpatialIndexProvider extends AbstractFeatureIndexProvider {
+
+	public static final String NAME = "MemorySpatialIndexProvider";
+	
+	private SpatialIndex index = null;
+	
+	public MemorySpatialIndexProvider() {
+		
+	}
+	
+    public void initialize() {
+    	try {
+			this.index = GeometryLocator.getGeometryManager().createDefaultMemorySpatialIndex();
+		} catch (Exception e) {
+			throw new RuntimeException();
+		}
+    }
+
+    public void delete(Object o, FeatureReferenceProviderServices fref) {
+        Geometry geom = (Geometry) o;
+        this.index.remove(geom, fref.getOID());
+    }
+
+    public void insert(Object o, FeatureReferenceProviderServices fref) {
+        if (o == null ) {
+            return;
+        }
+        Geometry geom = (Geometry) o;
+        this.index.insert(geom, fref.getOID());
+
+    }
+
+    public List match(Object value) throws FeatureIndexException {
+        Envelope env = null;
+        if (value instanceof Envelope) {
+            env = (Envelope) value;
+        } else {
+            if (value instanceof Geometry) {
+                env = ((Geometry) value).getEnvelope();
+            }
+        }
+        return new LongList(this.index.queryAsList(env));
+        
+    }
+
+    public List match(Object min, Object max) {
+        throw new UnsupportedOperationException(
+            "Can't perform this kind of search.");
+    }
+
+    public List nearest(int count, Object value) throws FeatureIndexException {
+        throw new UnsupportedOperationException(
+            "Can't perform this kind of search.");
+    }
+
+    public boolean isMatchSupported() {
+        return true;
+    }
+
+    public boolean isNearestSupported() {
+        return false;
+    }
+
+    public boolean isNearestToleranceSupported() {
+        return false;
+    }
+
+    public boolean isRangeSupported() {
+        return false;
+    }
+
+    public List nearest(int count, Object value, Object tolerance)
+        throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    public List range(Object value1, Object value2)
+        throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    public void clear() throws DataException {
+        this.index.removeAll();
+    }
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/MemorySpatialIndexProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeature.java	(revision 42196)
@@ -0,0 +1,271 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Date;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+
+public class DefaultEditableFeature extends DefaultFeature implements
+        EditableFeature {
+
+    private DefaultFeature source;
+
+    protected DefaultEditableFeature(DefaultFeature feature) {
+        super(feature);
+        this.source = feature;
+    }
+
+    protected DefaultEditableFeature(DefaultEditableFeature feature) {
+        super(feature);
+        this.source = (DefaultFeature) feature.getSource();
+    }
+
+    public DefaultEditableFeature(DefaultFeatureStore store, FeatureProvider data) {
+        // Se trata de un editable feature sobre una ya existente
+        super(store, data);
+        this.source = null;
+    }
+
+    public Feature getSource() {
+        return this.source;
+    }
+
+    public EditableFeature getEditable() {
+        return this;
+    }
+
+    public Feature getCopy() {
+        return new DefaultEditableFeature(this);
+    }
+
+    public Feature getNotEditableCopy() {
+        return new DefaultFeature(this);
+    }
+
+    public void setDefaultGeometry(Geometry geometry) {
+        FeatureAttributeDescriptor attribute = this.getType()
+                .getAttributeDescriptor(
+                        this.getType().getDefaultGeometryAttributeIndex());
+        this.set(attribute, geometry);
+    }
+
+    public void set(String name, Object value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void set(int index, Object value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+
+    public void setArray(String name, Object[] value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void setArray(int index, Object[] value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+
+    public void setBoolean(String name, boolean value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, Boolean.valueOf(value));
+    }
+
+    public void setBoolean(int index, boolean value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, Boolean.valueOf(value));
+    }
+
+    public void setByte(String name, byte value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, new Byte(value));
+    }
+
+    public void setByte(int index, byte value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, new Byte(value));
+    }
+
+    public void setDate(String name, Date value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void setDate(int index, Date value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+
+    public void setDouble(String name, double value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, new Double(value));
+    }
+
+    public void setDouble(int index, double value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, new Double(value));
+    }
+
+    public void setFeature(String name, Feature value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void setFeature(int index, Feature value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+
+    public void setFloat(String name, float value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, new Float(value));
+    }
+
+    public void setFloat(int index, float value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, new Float(value));
+    }
+
+    public void setGeometry(String name, Geometry value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void setGeometry(int index, Geometry value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+
+    public void setInt(String name, int value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, new Integer(value));
+    }
+
+    public void setInt(int index, int value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, new Integer(value));
+    }
+
+    public void setLong(String name, long value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, new Long(value));
+    }
+
+    public void setLong(int index, long value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, new Long(value));
+    }
+
+    public void setString(String name, String value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void setString(int index, String value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+
+    public void copyFrom(Feature source) {
+        // iterate over the attributes and copy one by one
+        Iterator it = this.getType().iterator();
+        while ( it.hasNext() ) {
+            FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) it.next();
+            set(attr.getIndex(), source.get(attr.getIndex()));
+        }
+    }
+
+    public void setInstant(String name, Instant value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void setInstant(int index, Instant value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+
+    public void setInterval(String name, Interval value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        this.set(attribute, value);
+    }
+
+    public void setInterval(int index, Interval value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        this.set(attribute, value);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureType.java	(revision 42196)
@@ -0,0 +1,384 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.text.MessageFormat;
+
+import java.util.Iterator;
+import java.util.zip.CRC32;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataListException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.FeatureTypeIntegrityException;
+import org.gvsig.fmap.dal.feature.exception.UnsupportedDataTypeException;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public class DefaultEditableFeatureType extends DefaultFeatureType implements
+		EditableFeatureType {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -713976880396024389L;
+
+	private boolean hasStrongChanges;
+	private DefaultFeatureType source;
+
+	public DefaultEditableFeatureType() {
+		super();
+		this.hasStrongChanges = false;
+		this.source = null;
+	}
+
+	public DefaultEditableFeatureType(String id) {
+		super(id);
+		this.hasStrongChanges = false;
+		this.source = null;
+	}
+
+	protected DefaultEditableFeatureType(DefaultEditableFeatureType other) {
+		super(other);
+		this.source = (DefaultFeatureType) other.getSource();
+	}
+
+	protected DefaultEditableFeatureType(DefaultFeatureType other) {
+		super(other);
+		this.source = other;
+	}
+
+	protected void intitalizeAddAttibute(DefaultFeatureAttributeDescriptor attr) {
+		super.add(new DefaultEditableFeatureAttributeDescriptor(attr));
+	}
+
+
+	public boolean hasStrongChanges() {
+		if (hasStrongChanges) {
+			return true;
+		}
+		Iterator iter = this.iterator();
+		DefaultEditableFeatureAttributeDescriptor attr;
+		while (iter.hasNext()) {
+			attr = (DefaultEditableFeatureAttributeDescriptor) iter.next();
+			if (attr.hasStrongChanges()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public FeatureType getCopy() {
+		return new DefaultEditableFeatureType(this);
+	}
+
+	public EditableFeatureType getEditable() {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean addAll(DefaultFeatureType other) {
+		Iterator iter = other.iterator();
+		DefaultFeatureAttributeDescriptor attr;
+		DefaultEditableFeatureAttributeDescriptor editableAttr;
+		while (iter.hasNext()) {
+			attr = (DefaultFeatureAttributeDescriptor) iter.next();
+			if (attr instanceof DefaultEditableFeatureAttributeDescriptor) {
+				editableAttr = new DefaultEditableFeatureAttributeDescriptor(
+						attr);
+			} else {
+				editableAttr = new DefaultEditableFeatureAttributeDescriptor(
+						attr);
+			}
+			super.add(editableAttr);
+		}
+		this.pk = null;
+		this.fixAll();
+		return true;
+	}
+
+	public EditableFeatureAttributeDescriptor addLike(
+			FeatureAttributeDescriptor other) {
+		DefaultEditableFeatureAttributeDescriptor editableAttr;
+		if (other instanceof DefaultEditableFeatureAttributeDescriptor) {
+			editableAttr = new DefaultEditableFeatureAttributeDescriptor(
+					(DefaultFeatureAttributeDescriptor) other);
+		} else {
+			editableAttr = new DefaultEditableFeatureAttributeDescriptor(
+					(DefaultFeatureAttributeDescriptor) other);
+		}
+		super.add(editableAttr);
+		this.fixAll();
+		return editableAttr;
+
+	}
+
+	public FeatureType getSource() {
+		return source;
+	}
+
+        private long getCRC() {
+            StringBuffer buffer = new StringBuffer();
+            for( int i=0; i< this.size(); i++) {
+                FeatureAttributeDescriptor x = this.getAttributeDescriptor(i);
+                buffer.append(x.getName());
+                buffer.append(x.getDataTypeName());
+                buffer.append(x.getSize());
+            }
+            CRC32 crc = new CRC32();
+            byte[] data = buffer.toString().getBytes();
+            crc.update(data);
+            return crc.getValue();
+        }
+        
+
+        public FeatureType getNotEditableCopy() {
+		this.fixAll();
+		DefaultFeatureType copy = new DefaultFeatureType(this, false);
+		Iterator iter = this.iterator();
+		DefaultFeatureAttributeDescriptor attr;
+		while (iter.hasNext()) {
+			attr = (DefaultFeatureAttributeDescriptor) iter.next();
+			copy.add(new DefaultFeatureAttributeDescriptor(attr));
+		}
+		return copy;
+	}
+
+	public EditableFeatureAttributeDescriptor add(String name, int type) {
+	    return this.add(name,type,true);
+	}
+	
+    private EditableFeatureAttributeDescriptor add(String name, int type, boolean updateHasStrongChanges) {
+		DefaultEditableFeatureAttributeDescriptor attr = new DefaultEditableFeatureAttributeDescriptor();
+		Iterator iter = this.iterator();
+		while (iter.hasNext()) {
+			EditableFeatureAttributeDescriptor descriptor = (EditableFeatureAttributeDescriptor) iter.next();
+			if(descriptor.getName().equalsIgnoreCase(name)){
+				throw new RuntimeException(
+						MessageFormat.format("Name descriptor {0} duplicated.",new String[]{name})
+						);
+			}
+			
+		}
+		attr.setName(name);
+		switch (type) {
+		case DataTypes.BOOLEAN:
+		case DataTypes.BYTE:
+		case DataTypes.BYTEARRAY:
+		case DataTypes.CHAR:
+		case DataTypes.DATE:
+		case DataTypes.DOUBLE:
+		case DataTypes.FLOAT:
+		case DataTypes.GEOMETRY:
+		case DataTypes.INT:
+		case DataTypes.LONG:
+		case DataTypes.OBJECT:
+		case DataTypes.STRING:
+		case DataTypes.TIME:
+		case DataTypes.TIMESTAMP:
+			break;
+
+		default:
+			throw new UnsupportedDataTypeException(name, type);
+		}
+		attr.setDataType(type);
+		attr.setIndex(this.size());
+		super.add(attr);
+		if (!hasStrongChanges && updateHasStrongChanges){
+		    hasStrongChanges = true;
+		}
+		this.pk = null;
+		return attr;
+	}
+
+	public EditableFeatureAttributeDescriptor add(String name, int type,
+			int size) {
+		return this.add(name, type,true).setSize(size);
+	}
+
+	public EditableFeatureAttributeDescriptor add(String name, int type,
+			Evaluator evaluator) {
+	    if (evaluator == null){
+	        throw new IllegalArgumentException();
+	    }
+		return this.add(name, type, false).setEvaluator(evaluator);
+	}
+
+	public EditableFeatureAttributeDescriptor add(String name, int type,
+			         FeatureAttributeEmulator emulator) {
+	    if (emulator == null){
+	        throw new IllegalArgumentException();
+	    }
+            return this.add(name, type, false).setFeatureAttributeEmulator(emulator);
+	}
+
+	public Object remove(String name) {
+		DefaultFeatureAttributeDescriptor attr = (DefaultFeatureAttributeDescriptor) this
+				.get(name);
+		if (attr == null) {
+			return null;
+		}
+		if (attr.getEvaluator() == null) {
+			hasStrongChanges = true;
+		}
+		super.remove(attr);
+		this.pk = null;
+		this.fixAll();
+		return attr;
+	}
+
+	protected void fixAll() {
+		int i = 0;
+		Iterator iter = super.iterator();
+		DefaultFeatureAttributeDescriptor attr;
+
+		while (iter.hasNext()) {
+			attr = (DefaultFeatureAttributeDescriptor) iter
+					.next();
+			attr.setIndex(i++);
+			if (attr instanceof DefaultEditableFeatureAttributeDescriptor) {
+				((DefaultEditableFeatureAttributeDescriptor) attr).fixAll();
+			}
+			if( attr.getEvaluator()!=null ) {
+				this.hasEvaluators = true;
+			}
+                        if( attr.getFeatureAttributeEmulator()!=null ) {
+                            this.hasEmulators = true;
+                        }
+			if( this.defaultGeometryAttributeName == null && attr.getType() == DataTypes.GEOMETRY ) {
+				this.defaultGeometryAttributeName = attr.getName();
+			}
+		}
+		if (this.defaultGeometryAttributeName != null) {
+			this.defaultGeometryAttributeIndex = this.getIndex(this.defaultGeometryAttributeName);
+		}
+                this.internalID = Long.toHexString(this.getCRC());
+	}
+
+	public void checkIntegrity() throws DataListException {
+		Iterator iter = super.iterator();
+		FeatureTypeIntegrityException ex = null;
+
+		while (iter.hasNext()) {
+			DefaultEditableFeatureAttributeDescriptor attr = (DefaultEditableFeatureAttributeDescriptor) iter
+					.next();
+			try {
+				attr.checkIntegrity();
+			} catch (Exception e) {
+				if (ex == null) {
+					ex = new FeatureTypeIntegrityException(this.getId());
+				}
+				ex.add(e);
+			}
+		}
+		if (ex != null) {
+			throw ex;
+		}
+	}
+
+	public boolean remove(EditableFeatureAttributeDescriptor attribute) {
+		if (attribute.getEvaluator() != null) {
+			hasStrongChanges = true;
+		}
+		if (!super.remove(attribute)) {
+			return false;
+		}
+		this.fixAll();
+		return true;
+	}
+
+	public void setDefaultGeometryAttributeName(String name) {
+		if (name == null || name.length() == 0) {
+			this.defaultGeometryAttributeName = null;
+			this.defaultGeometryAttributeIndex = -1;
+			return;
+		}
+		DefaultFeatureAttributeDescriptor attr = (DefaultFeatureAttributeDescriptor) this
+				.get(name);
+		if (attr == null) {
+			throw new IllegalArgumentException("Attribute '" + name
+					+ "' not found.");
+		}
+		if (attr.getType() != DataTypes.GEOMETRY) {
+			throw new IllegalArgumentException("Attribute '" + name
+					+ "' is not a geometry.");
+		}
+		this.defaultGeometryAttributeName = name;
+		this.defaultGeometryAttributeIndex = attr.getIndex();
+	}
+
+	public void setHasOID(boolean hasOID) {
+		this.hasOID = hasOID;
+	}
+
+	protected Iterator getIterator(Iterator iter) {
+		return new EditableDelegatedIterator(iter, this);
+	}
+
+    public EditableFeatureAttributeDescriptor getEditableAttributeDescriptor(String name) {
+        return (EditableFeatureAttributeDescriptor) this.getAttributeDescriptor(name);
+    }
+
+    public EditableFeatureAttributeDescriptor getEditableAttributeDescriptor(int index) {
+       return (EditableFeatureAttributeDescriptor) this.getAttributeDescriptor(index);
+    }
+
+	protected class EditableDelegatedIterator extends DelegatedIterator {
+
+		private DefaultEditableFeatureType fType;
+
+		public EditableDelegatedIterator(Iterator iter,
+				DefaultEditableFeatureType fType) {
+			super(iter);
+			this.fType = fType;
+		}
+
+		public void remove() {
+			this.iterator.remove();
+			this.fType.fixAll();
+		}
+
+	}
+
+	protected void setAllowAutomaticValues(boolean value) {
+		this.allowAtomaticValues = value;
+	}
+
+    public void setDefaultTimeAttributeName(String name) {
+        if (name == null || name.length() == 0) {
+            this.defaultTimeAttributeIndex = -1;
+            return;
+        }
+        DefaultFeatureAttributeDescriptor attr = (DefaultFeatureAttributeDescriptor) this
+                .get(name);
+        if (attr == null) {
+            throw new IllegalArgumentException("Attribute '" + name
+                    + "' not found.");
+        }
+
+        this.defaultTimeAttributeIndex = attr.getIndex();        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreTransforms.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreTransforms.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreTransforms.java	(revision 42196)
@@ -0,0 +1,381 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class DefaultFeatureStoreTransforms implements FeatureStoreTransforms,
+		Persistent {
+
+	private DefaultFeatureStore store;
+	private List transforms;
+	private Boolean isTramsformValues;
+	private TransformTemporalList lastTransformStack;
+
+	public DefaultFeatureStoreTransforms() {
+		this.store = null;
+		this.transforms = new ArrayList();
+		this.isTramsformValues = Boolean.FALSE;
+	}
+
+	public DefaultFeatureStoreTransforms(DefaultFeatureStore store) {
+		this.store = store;
+		this.transforms = new ArrayList();
+	}
+
+	protected void checkEditingMode() {
+		if (store == null || store.getMode() != FeatureStore.MODE_QUERY) {
+			throw new IllegalStateException();
+		}
+	}
+
+	protected void notifyChangeToStore() {
+		this.store.notifyChange(FeatureStoreNotification.TRANSFORM_CHANGE);
+	}
+
+	public FeatureStoreTransform add(FeatureStoreTransform transform)
+			throws DataException {
+		checkEditingMode();
+		if (transform.getDefaultFeatureType()!=null){
+			if( ! transform.getFeatureTypes().contains(transform.getDefaultFeatureType())) {
+				throw new IllegalArgumentException(); // FIXME: A�adir tipo especifico.
+			}
+			this.transforms.add(transform);
+			transform.setSourceMetadata(this.store.metadata);
+			this.notifyChangeToStore();
+			if (this.isTramsformValues == null
+					|| (!this.isTramsformValues.booleanValue())) {
+				if (transform.isTransformsOriginalValues()) {
+					this.isTramsformValues = Boolean.TRUE;
+				}
+
+			}
+		}
+
+		return transform;
+	}
+
+
+	public void clear() {
+		checkEditingMode();
+		this.transforms.clear();
+		this.notifyChangeToStore();
+		this.isTramsformValues = Boolean.FALSE;
+	}
+
+	public FeatureStoreTransform getTransform(int index) {
+		return (FeatureStoreTransform) this.transforms.get(index);
+	}
+
+	public Iterator iterator() {
+		return Collections.unmodifiableList(transforms).iterator();
+	}
+
+	public Object remove(int index) {
+		checkEditingMode();
+		Object trans = this.transforms.remove(index);
+		this.notifyChangeToStore();
+		this.isTramsformValues = null;
+		return trans;
+	}
+
+	public boolean remove(FeatureStoreTransform transform) {
+		checkEditingMode();
+		boolean removed = this.transforms.remove(transform);
+		if (removed) {
+			this.notifyChangeToStore();
+
+		}
+		this.isTramsformValues = null;
+		return removed;
+
+	}
+
+	public int size() {
+		return this.transforms.size();
+	}
+
+	public boolean isEmpty() {
+		return this.transforms.isEmpty();
+	}
+
+	private class TransformTemporalListElement {
+		public FeatureStoreTransform transform = null;
+		public FeatureType targetFeatureType = null;
+	}
+
+	private class TransformTemporalList extends ArrayList {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1677014259279944000L;
+		private FeatureType targetFType;
+
+		public boolean add(Object arg0) {
+			if (this.isEmpty()) {
+				targetFType = ((TransformTemporalListElement) arg0).targetFeatureType;
+			}
+			return super.add(arg0);
+		}
+
+	}
+
+	protected TransformTemporalList getTransformTemporalList(
+			FeatureType targetFeatureType) {
+		if (this.lastTransformStack == null
+				|| this.lastTransformStack.size() != this.transforms.size()
+				|| !(this.lastTransformStack.targetFType
+						.equals(targetFeatureType))) {
+			TransformTemporalList result = new TransformTemporalList();
+			TransformTemporalListElement item;
+			FeatureType nextFType = targetFeatureType;
+
+			for (int i = transforms.size() - 1; i > -1; i--) {
+				item = new TransformTemporalListElement();
+				item.transform = (FeatureStoreTransform) transforms.get(i);
+				item.targetFeatureType = nextFType;
+				nextFType = item.transform
+						.getSourceFeatureTypeFrom(item.targetFeatureType);
+				result.add(item);
+			}
+			this.lastTransformStack = result;
+		}
+		return this.lastTransformStack;
+	}
+
+	public Feature applyTransform(DefaultFeature source,
+			FeatureType targetFeatureType)
+			throws DataException {
+		if (this.transforms.isEmpty()) {
+			return source;
+		}
+
+		TransformTemporalList stack = this
+				.getTransformTemporalList(targetFeatureType);
+		TransformTemporalListElement item;
+		FeatureProvider targetData;
+		EditableFeature target;
+		ListIterator iterator = stack.listIterator(stack.size());
+		FeatureType tft = null;
+
+
+		while (iterator.hasPrevious()) {
+			item = (TransformTemporalListElement) iterator.previous();
+			
+			tft = item.targetFeatureType;
+			if (tft instanceof EditableFeatureType) {
+			    /*
+			     * Must be non-editable to create 
+			     * DefaultFeatureProvider
+			     */
+			    tft = ((EditableFeatureType) tft).getNotEditableCopy();
+			}
+			
+			targetData = this.store.createDefaultFeatureProvider(tft);
+			targetData.setOID(source.getData().getOID());
+			targetData.setNew(false);
+			target = (new DefaultEditableFeature(this.store, targetData))
+					.getEditable();
+			item.transform.applyTransform(source, target);
+ 			source = (DefaultFeature) target.getNotEditableCopy();
+		}
+
+		return source;
+
+	}
+
+	public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
+		FeatureType tmpFType = targetFeatureType;
+
+		for (int i = transforms.size() - 1; i > -1; i--) {
+			FeatureStoreTransform transform = (FeatureStoreTransform) transforms
+					.get(i);
+			tmpFType = transform.getSourceFeatureTypeFrom(tmpFType);
+		}
+		return tmpFType;
+	}
+
+	public FeatureType getDefaultFeatureType() throws DataException {
+		if (this.transforms.isEmpty()) {
+			return null;
+		}
+		FeatureStoreTransform transform = (FeatureStoreTransform) this.transforms
+				.get(this.transforms.size() - 1);
+		return transform.getDefaultFeatureType();
+	}
+
+	public List getFeatureTypes() throws DataException {
+		if (this.transforms.isEmpty()) {
+			return null;
+		}
+		FeatureStoreTransform transform = (FeatureStoreTransform) this.transforms
+				.get(this.transforms.size() - 1);
+		return transform.getFeatureTypes();
+	}
+
+	public FeatureStore getFeatureStore() {
+		return this.store;
+	}
+
+	public void setFeatureStore(FeatureStore featureStore) {
+		if (this.store != null) {
+			throw new IllegalStateException();// FIXME: A�adir tipo especifico.
+		}
+		this.store = (DefaultFeatureStore) featureStore;
+	}
+	
+	   
+	public void setStoreForClone(FeatureStore featureStore) {
+	        this.store = (DefaultFeatureStore) featureStore;
+	}
+
+	public boolean isTransformsOriginalValues() {
+		if (this.isTramsformValues == null) {
+			Iterator iter = this.transforms.iterator();
+			FeatureStoreTransform transform;
+			this.isTramsformValues = Boolean.FALSE;
+			while (iter.hasNext()) {
+				transform = (FeatureStoreTransform) iter.next();
+				if (transform.isTransformsOriginalValues()){
+					this.isTramsformValues = Boolean.TRUE;
+					break;
+				}
+			}
+		}
+		return this.isTramsformValues.booleanValue();
+	}
+
+	public FeatureType getFeatureType(String featureTypeId)
+			throws DataException {
+		if (this.transforms.isEmpty()) {
+			return null;
+		}
+		if (featureTypeId == null) {
+			return this.getDefaultFeatureType();
+		}
+		Iterator iter = this.getFeatureTypes().iterator();
+		FeatureType fType;
+		while (iter.hasNext()) {
+			fType = (FeatureType) iter.next();
+			if (fType.getId().equals(featureTypeId)) {
+				return fType;
+			}
+		}
+		return null;
+	}
+
+
+
+	// *** Persistence ***
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("store", store);
+		state.set("isTramsformValues", this.isTramsformValues);
+		state.set("transforms", this.transforms);
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		this.isTramsformValues = (Boolean) state.get("isTramsformValues");
+		this.transforms = (List) state.get("transforms");
+		this.store = (DefaultFeatureStore) state.get("store");
+	}
+
+	public static void registerPersistent() {
+		DynStruct definition = ToolsLocator.getPersistenceManager().addDefinition(
+				DefaultFeatureStoreTransforms.class, 
+				"DefaultFeatureStoreTransforms", 
+				"DefaultFeatureStoreTransforms Persistent definition",
+				null, 
+				null
+			);
+
+		definition.addDynFieldBoolean("isTramsformValues").setMandatory(false);
+		definition.addDynFieldList("transforms").setClassOfItems(FeatureStoreTransform.class).setMandatory(true);
+		definition.addDynFieldObject("store").setClassOfValue(FeatureStore.class).setMandatory(true);
+
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		if( ! this.transforms.isEmpty() ) {
+			FeatureStoreTransform transform = (FeatureStoreTransform) transforms.get(this.transforms.size()-1);
+			if( transform.hasDynValue(name) ) {
+				return transform.getDynValue(name);
+			}
+		}
+		throw new DynFieldNotFoundException(name, "transforms");
+	}
+
+	public void setDynValue(String name, Object value) throws DynFieldNotFoundException {
+		if( ! this.transforms.isEmpty() ) {
+			FeatureStoreTransform transform = (FeatureStoreTransform) transforms.get(this.transforms.size()-1);
+			transform.setDynValue(name, value);
+		}
+	}
+
+	public boolean hasDynValue(String name) {
+		if( ! this.transforms.isEmpty() ) {
+			FeatureStoreTransform transform = (FeatureStoreTransform) transforms.get(this.transforms.size()-1);
+			if( transform.hasDynValue(name) ) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+	    
+	    DefaultFeatureStoreTransforms cloned = (DefaultFeatureStoreTransforms) super.clone();
+	    cloned.transforms = new ArrayList();
+	    int n = this.transforms.size();
+	    for (int i=0; i<n; i++) {
+	        cloned.transforms.add(((FeatureStoreTransform) this.transforms.get(i)).clone());
+	    }
+	    cloned.lastTransformStack = null;
+	    
+	    return cloned;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStoreTransforms.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractRelativeInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractRelativeInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractRelativeInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.tools.dataTypes.DataType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public abstract class AbstractRelativeInstantFeatureAttributeGetter  extends AbstractObjectToTimefeatureAttributeGetter {
+    protected DataType dataType = null;
+    protected long millisInUnit = 1;
+
+    public AbstractRelativeInstantFeatureAttributeGetter(long millisInUnit) {
+        super();
+        this.dataType = DATA_TYPES_MANAGER.get(DataTypes.INSTANT);
+        this.millisInUnit = millisInUnit;
+    }
+
+    public DataType getDataType() {  
+        return dataType;
+    }
+    
+    public Object getter(Object sourceAttributeValue) {
+        if (sourceAttributeValue == null){
+            return TIME_SUPPORT_MANAGER.createRelativeInstant(0);
+        }
+        return TIME_SUPPORT_MANAGER.createRelativeInstant((long)new Double(sourceAttributeValue.toString()).doubleValue() * millisInUnit);
+     }
+
+    public Object setter(Object targetAttributeValue) {
+        return new Long(((RelativeInstant)targetAttributeValue).toMillis() / millisInUnit);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractRelativeInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class DayToAbsoluteInstantFeatureAttributeGetter extends AbstractAbsoluteInstantFeatureAttributeGetter {
+
+    public DayToAbsoluteInstantFeatureAttributeGetter() {
+        super(AbsoluteInstantType.DAY_OF_MONTH);      
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class HourToAbsoluteInstantFeatureAttributeGetter extends AbstractAbsoluteInstantFeatureAttributeGetter {
+
+    public HourToAbsoluteInstantFeatureAttributeGetter() {
+        super(AbsoluteInstantType.HOUR_OF_DAY);      
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToRelativeInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToRelativeInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToRelativeInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MinuteToRelativeInstantFeatureAttributeGetter extends AbstractRelativeInstantFeatureAttributeGetter {
+    static final long MILLIS_IN_A_MINUTE = 1000 * 60; 
+    
+    public MinuteToRelativeInstantFeatureAttributeGetter() {
+        super(MILLIS_IN_A_MINUTE);       
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToRelativeInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteInstantTypeNotRegisteredException;
+import org.gvsig.tools.dataTypes.DataType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public abstract class AbstractAbsoluteInstantFeatureAttributeGetter extends AbstractObjectToTimefeatureAttributeGetter {
+    protected int dateTimeFieldtype = -1;
+    protected DataType dataType = null;
+    
+    public AbstractAbsoluteInstantFeatureAttributeGetter(
+        int dateTimeFieldtype) {
+        super();
+        this.dateTimeFieldtype = dateTimeFieldtype;
+        this.dataType = DATA_TYPES_MANAGER.get(DataTypes.INSTANT);
+    }   
+
+    public Object getter(Object sourceAttributeValue) {        
+        try {
+            if (sourceAttributeValue == null){
+                return TIME_SUPPORT_MANAGER.createAbsoluteInstant(dateTimeFieldtype, 0);
+            }
+            return TIME_SUPPORT_MANAGER.createAbsoluteInstant(dateTimeFieldtype, ((Integer)sourceAttributeValue).intValue());
+        } catch (AbsoluteInstantTypeNotRegisteredException e) {
+           LOG.error("Impossible to apply the tranformation for this field", e);
+        }
+        return TIME_SUPPORT_MANAGER.createAbsoluteInstant();
+    }
+
+    public Object setter(Object targetAttributeValue) {
+        return new Integer(((AbsoluteInstant)targetAttributeValue).getValue(0));        
+    }
+    
+    public DataType getDataType() {        
+        return dataType;
+    }
+ }

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/YearToAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/YearToAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/YearToAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class YearToAbsoluteInstantFeatureAttributeGetter extends AbstractAbsoluteInstantFeatureAttributeGetter {
+
+    public YearToAbsoluteInstantFeatureAttributeGetter() {
+        super(AbsoluteInstantType.YEAR);      
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/YearToAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MinuteToAbsoluteInstantFeatureAttributeGetter extends AbstractAbsoluteInstantFeatureAttributeGetter {
+
+    public MinuteToAbsoluteInstantFeatureAttributeGetter() {
+        super(AbsoluteInstantType.MINUTE_OF_HOUR);      
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MinuteToAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToRelativeInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToRelativeInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToRelativeInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MilliToRelativeInstantFeatureAttributeGetter extends AbstractRelativeInstantFeatureAttributeGetter {
+        
+    public MilliToRelativeInstantFeatureAttributeGetter() {
+        super(1);       
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToRelativeInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MonthToAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MonthToAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MonthToAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MonthToAbsoluteInstantFeatureAttributeGetter extends AbstractAbsoluteInstantFeatureAttributeGetter {
+
+    public MonthToAbsoluteInstantFeatureAttributeGetter() {
+        super(AbsoluteInstantType.MONTH_OF_YEAR);      
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MonthToAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MilliToAbsoluteInstantFeatureAttributeGetter extends AbstractAbsoluteInstantFeatureAttributeGetter {
+
+    public MilliToAbsoluteInstantFeatureAttributeGetter() {
+        super(AbsoluteInstantType.MILLIS_OF_SECOND);      
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/MilliToAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToRelativeInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToRelativeInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToRelativeInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class SecondToRelativeInstantFeatureAttributeGetter extends AbstractRelativeInstantFeatureAttributeGetter {
+    static final long MILLIS_IN_SECOND = 1000; 
+        
+    public SecondToRelativeInstantFeatureAttributeGetter() {
+        super(MILLIS_IN_SECOND);       
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToRelativeInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractObjectToTimefeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractObjectToTimefeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractObjectToTimefeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public abstract class AbstractObjectToTimefeatureAttributeGetter implements FeatureAttributeGetter {
+    protected static final TimeSupportManager TIME_SUPPORT_MANAGER = TimeSupportLocator.getManager();
+    protected static final DataTypesManager DATA_TYPES_MANAGER = ToolsLocator.getDataTypesManager();
+    protected static final Logger LOG = LoggerFactory.getLogger(AbstractObjectToTimefeatureAttributeGetter.class);
+        
+    public AbstractObjectToTimefeatureAttributeGetter() {
+        super();       
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/AbstractObjectToTimefeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToRelativeInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToRelativeInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToRelativeInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class DayToRelativeInstantFeatureAttributeGetter extends AbstractRelativeInstantFeatureAttributeGetter {
+    static final long MILLIS_IN_A_DAY = 1000 * 60 * 60 * 24; 
+   
+   public DayToRelativeInstantFeatureAttributeGetter() {
+       super(MILLIS_IN_A_DAY);       
+   }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/DayToRelativeInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToRelativeInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToRelativeInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToRelativeInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class HourToRelativeInstantFeatureAttributeGetter extends AbstractRelativeInstantFeatureAttributeGetter {
+    static final long MILLIS_IN_A_HOUR = 1000 * 60 * 60; 
+    
+    public HourToRelativeInstantFeatureAttributeGetter() {
+        super(MILLIS_IN_A_HOUR);       
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/HourToRelativeInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToAbsoluteInstantFeatureAttributeGetter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToAbsoluteInstantFeatureAttributeGetter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToAbsoluteInstantFeatureAttributeGetter.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl.attributegetter;
+
+import org.gvsig.timesupport.AbsoluteInstantType;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class SecondToAbsoluteInstantFeatureAttributeGetter extends AbstractAbsoluteInstantFeatureAttributeGetter {
+
+    public SecondToAbsoluteInstantFeatureAttributeGetter() {
+        super(AbsoluteInstantType.SECOND_OF_MINUTE);      
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/attributegetter/SecondToAbsoluteInstantFeatureAttributeGetter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureToFeatureProviderIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureToFeatureProviderIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureToFeatureProviderIterator.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Iterator;
+
+/**
+ * 
+ * Envuelve un iterador de Features para que se comporte como
+ * un iterador de FeatireDatas.
+ * 
+ */
+public class FeatureToFeatureProviderIterator implements Iterator {
+	Iterator featuresIterator;
+	
+	public FeatureToFeatureProviderIterator(Iterator it) {
+		featuresIterator=it;
+	}	
+	
+	public boolean hasNext() {
+		return featuresIterator.hasNext();
+	}
+
+	public Object next() {
+		return ((DefaultFeature)featuresIterator.next()).getData();
+	}
+
+	public void remove() {
+		featuresIterator.remove();
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureToFeatureProviderIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/IndexFeatureSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/IndexFeatureSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/IndexFeatureSet.java	(revision 42196)
@@ -0,0 +1,251 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadRuntimeException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.featureset.DynObjectSetFeatureSetFacade;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.fmap.dal.feature.spi.LongList;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.Visitor;
+
+
+public class IndexFeatureSet implements FeatureSet, FeatureSetProvider {
+
+	LongList featureReferences = null;
+	FeatureStoreProvider storeProvider = null;
+	FeatureStoreProviderServices store = null;
+	FeatureIndexProviderServices index = null;
+	List featureTypes = null;
+
+	public class IndexIterator implements DisposableIterator {
+		Iterator it = null;
+
+		public IndexIterator(Iterator it) {
+			this.it = it;
+		}
+
+		public boolean hasNext() {
+			return it.hasNext();
+		}
+
+		public Object next() {
+			Object oid = it.next();
+			FeatureReference ref = new DefaultFeatureReference(store
+					.getFeatureStore(), oid);
+			try {
+				return store.getFeatureStore().getFeatureByReference(ref);
+			} catch (DataException e) {
+				throw new ReadRuntimeException(store.getName(), e);
+			}
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+
+		public void dispose() {
+			this.it = null;
+		}
+	}
+
+	public class FastIndexIterator implements DisposableIterator {
+		Iterator it = null;
+		DefaultFeature feature = null;
+
+		public FastIndexIterator(Iterator it) throws DataException {
+			this.it = it;
+			feature = (DefaultFeature) store.createFeature(storeProvider
+					.createFeatureProvider(index.getFeatureType()));
+		}
+
+		public boolean hasNext() {
+			return it.hasNext();
+		}
+
+		public Object next() {
+			Object oid = it.next();
+			try {
+				//				Long longer=new Long(((Integer)oid).longValue());
+				FeatureReference ref = new DefaultFeatureReference(store
+						.getFeatureStore(), oid);
+				FeatureProvider data = storeProvider
+						.getFeatureProviderByReference((FeatureReferenceProviderServices) ref);
+
+				feature.setData(data);
+
+				return feature;
+			} catch (DataException e) {
+				throw new ReadRuntimeException(store.getName(), e);
+			}
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+
+		public void dispose() {
+			this.it = null;
+			this.feature = null;
+
+		}
+	}
+
+	public IndexFeatureSet(FeatureIndexProviderServices index, LongList featureReferences) {
+		this.featureReferences = featureReferences;
+		this.store = index.getFeatureStoreProviderServices();
+		this.storeProvider = store.getProvider();
+		this.index = index;
+	}
+
+	public boolean canFilter() {
+		return false;
+	}
+
+	public boolean canIterateFromIndex() {
+		return true;
+	}
+
+	public boolean canOrder() {
+		return false;
+	}
+
+	public DisposableIterator fastIterator(long index) throws DataException {
+		if (store.getFeatureStore().isEditing()) {
+			return this.iterator(index);
+		}
+		return new FastIndexIterator(this.featureReferences.iterator(index));
+	}
+
+	public DisposableIterator fastIterator() throws DataException {
+		if (store.getFeatureStore().isEditing()) {
+			return this.iterator();
+		}
+		return new FastIndexIterator(this.featureReferences.iterator());
+	}
+
+	public long getSize() throws DataException {
+		return featureReferences.getSize();
+	}
+
+	public boolean isEmpty() throws DataException {
+		return featureReferences.isEmpty();
+	}
+
+	public DisposableIterator iterator() throws DataException {
+		return new IndexIterator(this.featureReferences.iterator());
+	}
+
+	public DisposableIterator iterator(long index) throws DataException {
+		return new IndexIterator(this.featureReferences.iterator(index));
+	}
+
+	public void delete(Feature feature) throws DataException {
+		index.delete(feature);
+		store.getFeatureStore().delete(feature);
+	}
+
+	public FeatureType getDefaultFeatureType() {
+		return index.getFeatureType();
+	}
+
+	public List getFeatureTypes() {
+		List types = new ArrayList();
+		types.add(index.getFeatureType());
+		return Collections.unmodifiableList(types);
+	}
+
+	public void insert(EditableFeature feature) throws DataException {
+		index.insert(feature);
+		store.getFeatureStore().insert(feature);
+	}
+
+	public void update(EditableFeature feature) throws DataException {
+		store.getFeatureStore().update(feature);
+		// we need to re-index the feature, since its shape might have changed
+		index.delete(feature);
+		index.insert(feature);
+	}
+
+	public void dispose() {
+
+	}
+
+	public boolean isFromStore(DataStore store) {
+		return this.store.equals(store);
+	}
+
+	public void accept(Visitor visitor) throws BaseException {
+		accept(visitor, 0);
+	}
+
+	public void accept(Visitor visitor, long firstValueIndex)
+			throws BaseException {
+		synchronized (store.getFeatureStore()) {
+			DisposableIterator iterator = fastIterator(firstValueIndex);
+			
+			if (iterator != null) {
+				try {
+					while (iterator.hasNext()) {
+						Feature feature = (Feature) iterator.next();
+						visitor.visit(feature);
+					}
+				} finally {
+					iterator.dispose();
+				}
+			}
+		}
+	}
+
+    public DynObjectSet getDynObjectSet() {
+        return new DynObjectSetFeatureSetFacade(this, store.getFeatureStore());
+    }
+
+    public DynObjectSet getDynObjectSet(boolean fast) {
+        return new DynObjectSetFeatureSetFacade(this, store.getFeatureStore(),
+            fast);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/IndexFeatureSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeature.java	(revision 42196)
@@ -0,0 +1,646 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.lang.ref.WeakReference;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.IllegalValueException;
+import org.gvsig.fmap.dal.feature.exception.SetReadOnlyAttributeException;
+import org.gvsig.fmap.dal.feature.impl.featureset.DynObjectFeatureFacade;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.gvsig.tools.lang.Cloneable;
+
+public class DefaultFeature implements Feature, EvaluatorData, Cloneable {
+
+	private static DataTypesManager dataTypesManager = null; 
+	protected FeatureProvider data;
+	protected FeatureReference reference;
+	private WeakReference storeRef;
+	
+	private boolean inserted = false;
+
+    /*
+	 * Usar con mucha precaucion o mejor no usar. Lo precisa el
+	 * DefaultFeatureSet en la ordenacion.
+	 */
+	public DefaultFeature(FeatureStore store) {
+		this.storeRef = new WeakReference(store);
+		this.reference = null;
+	}
+
+	public DefaultFeature(FeatureStore store, FeatureProvider data) {
+		this.data = data;
+		this.storeRef = new WeakReference(store);
+		this.reference = null;
+		this.inserted = !data.isNew();
+	}
+
+	DefaultFeature(DefaultFeature feature) {
+		this.data = feature.data.getCopy();
+		this.storeRef = feature.storeRef;
+		this.reference = feature.reference;
+		this.inserted = feature.isInserted();
+	}
+
+	public void setData(FeatureProvider data) {
+		this.data = data;
+		this.reference = null;
+		this.inserted = true; 
+	}
+
+	public FeatureProvider getData() {
+		return this.data;
+	}
+
+	protected DataTypesManager getDataTypesManager() {
+		if( dataTypesManager==null ) {
+			dataTypesManager = ToolsLocator.getDataTypesManager();
+		}
+		return dataTypesManager;
+	}
+
+    void set(FeatureAttributeDescriptor attribute, Object value) {
+        int i = attribute.getIndex();
+
+        if ( attribute.isReadOnly() ) {
+            throw new SetReadOnlyAttributeException(attribute.getName(), this.getType());
+        }
+        FeatureAttributeEmulator emulator = attribute.getFeatureAttributeEmulator();
+        if( emulator!= null ) {
+            emulator.set((EditableFeature) this,value);
+            return;
+        }
+        
+        if ( value == null ) {
+            if ( !attribute.allowNull() ) {
+                if ( !attribute.isAutomatic() ) {
+                    throw new IllegalValueException(attribute, value);
+                }
+            }
+            this.data.set(i, null);
+            return;
+
+        }
+
+        if ( attribute.getFeatureAttributeGetter() != null ) {
+            value = attribute.getFeatureAttributeGetter().setter(value);
+        }
+
+        if ( attribute.getObjectClass().isInstance(value) ) {
+            this.data.set(i, value);
+            return;
+        }
+
+        if ( !attribute.getObjectClass().isInstance(value) ) {
+            try {
+                value
+                        = this.getDataTypesManager().coerce(attribute.getType(),
+                                value);
+            } catch (CoercionException e) {
+                throw new IllegalArgumentException("Can't convert to "
+                        + this.getDataTypesManager().getTypeName(
+                                attribute.getType()) + " from '"
+                        + value.getClass().getName() + "' with value '"
+                        + value.toString() + "'.");
+            }
+        }
+
+        this.data.set(i, value);
+    }
+	
+    private Object get(int index,Class theClass, int type) {
+        Object value = this.get(index);
+        if( theClass.isInstance(value) ) {
+            return value;
+        }
+
+        
+        try {
+            return this.getDataTypesManager().coerce(type, value);
+        } catch (CoercionException e) {
+            
+            if (value == null) {
+                return null;
+            }
+            throw new IllegalArgumentException(
+                    "Can't convert to "+theClass.getName()+
+                    " from '"+value.getClass().getName()+
+                    "' with value '"+value.toString()+"'.");
+        }
+    }
+    
+//  private Object getNumberByType(Number value, int type) {
+//      if (type==DataTypes.DOUBLE){
+//          return new Double(value.doubleValue());
+//      }else if (type==DataTypes.FLOAT){
+//          return new Float(value.floatValue());
+//      }else if (type==DataTypes.LONG){
+//          return new Long(value.longValue());
+//      }else if (type==DataTypes.INT){
+//          return new Integer(value.intValue());
+//      }else if (type==DataTypes.STRING){
+//          return value.toString();
+//      }
+//      return value;
+//  }
+
+    public void initializeValues() {
+        FeatureType type = this.getType();
+        Iterator iterator = type.iterator();
+
+        while (iterator.hasNext()) {
+            FeatureAttributeDescriptor attribute = (FeatureAttributeDescriptor) iterator
+            .next();
+            if (attribute.isAutomatic() || attribute.isReadOnly()
+                    || attribute.getEvaluator() != null) {
+                continue;
+            }
+            if (attribute.getDefaultValue() == null && !attribute.allowNull()) {
+                continue;
+            }
+            this.set(attribute, attribute.getDefaultValue());
+        }
+    }
+
+    public void clear() {
+        initializeValues();
+    }
+
+    public void initializeValues(Feature feature) {
+        FeatureType myType=this.getType();
+        FeatureType type =feature.getType();
+        Iterator iterator = type.iterator();
+
+        while (iterator.hasNext()) {
+            FeatureAttributeDescriptor attribute = (FeatureAttributeDescriptor) iterator
+            .next();
+            FeatureAttributeDescriptor myAttribute=myType.getAttributeDescriptor(attribute.getName());
+            if (myAttribute != null) {
+                this.set(myAttribute, feature.get(attribute.getIndex()));
+            }
+        }
+    }
+
+
+    public FeatureStore getStore() {
+        return (FeatureStore) this.storeRef.get();
+    }
+
+    public FeatureType getType() {
+        return this.data.getType();
+    }
+
+    public EditableFeature getEditable() {
+        return new DefaultEditableFeature(this);
+    }
+
+    public Feature getCopy() {
+        return new DefaultFeature(this);
+    }
+    
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultFeature(this);
+    }
+
+    public FeatureReference getReference() {
+        if (this.reference == null) {
+            if (!isInserted()) {
+                return null;
+            }
+            reference = new DefaultFeatureReference(this);
+        }
+        return this.reference;
+    }
+
+    class UnableToGetReferenceException extends BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1812805035204824163L;
+
+        /**
+         * @param exception
+         */
+        public UnableToGetReferenceException(BaseException exception) {
+            super("Unable to get reference", "_UnableToGetReferenceException",
+                serialVersionUID);
+            this.initCause(exception);
+            
+        }
+        
+    }
+    
+    public void validate(int mode) throws DataException  {
+        ((DefaultFeatureType) this.data.getType()).validateFeature(this, mode);
+    }
+
+    public List getSRSs() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Envelope getDefaultEnvelope() {
+        Envelope envelope = this.data.getDefaultEnvelope();
+        if( envelope == null ) {
+            Geometry geom = this.getDefaultGeometry();
+            if( geom!=null ) {
+                envelope = geom.getEnvelope();
+            }
+        }
+        return envelope;
+    }
+
+    public Geometry getDefaultGeometry() {
+    	Geometry geom = this.data.getDefaultGeometry();
+    	if( geom!=null ) {
+    		return geom;
+    	}
+    	int i = this.data.getType().getDefaultGeometryAttributeIndex();
+    	geom = (Geometry) this.get(i);
+        return geom;
+    }
+
+    public IProjection getDefaultSRS() {
+        return this.data.getType().getDefaultSRS();
+    }
+
+    public List getGeometries() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object get(String name) {
+        int index = this.data.getType().getIndex(name);
+        if( index < 0 ) {
+            throw new IllegalArgumentException("Attribute name '"+name+"' not found in the feature.");
+        }
+        return this.get(index);
+    }
+
+
+    public Object get(int index) {
+        FeatureType type = this.data.getType();
+        if( index <0 || index >= type.size() ) {
+            throw new IllegalArgumentException("Attribute index '"+index+"' out of range (0 to "+this.data.getType().size()+".");
+        }
+        FeatureAttributeDescriptor attribute = type.getAttributeDescriptor(index);
+        if (!this.data.getType().hasEvaluators()) {
+            return get(attribute, this.data.get(index));		
+        }		
+        Evaluator eval = attribute.getEvaluator();
+        if (eval == null) {
+            return this.data.get(index);
+        } else {
+            Object value = this.data.get(index);
+            if (value != null) { // FIXME: para comprobar si esta calculado usar
+                // un array
+                // especifico.
+                return get(attribute, this.data.get(index));
+            }
+            try {
+                value = eval.evaluate(this);
+            } catch (EvaluatorException e) {
+                throw new DataEvaluatorRuntimeException(e);
+            }
+            this.data.set(index, value);
+            return  get(attribute, value);
+        }		
+    }
+
+    private Object get(FeatureAttributeDescriptor featureAttributeDescriptor, Object value){
+        FeatureAttributeEmulator emulator = featureAttributeDescriptor.getFeatureAttributeEmulator();
+        if( emulator != null ) {
+            return emulator.get(this);
+        }
+        FeatureAttributeGetter getter = featureAttributeDescriptor.getFeatureAttributeGetter();
+        if( getter != null ) {
+            return getter.getter(value);
+        }
+        return value;
+    }
+
+    public Object[] getArray(String name) {
+        return this.getArray(this.data.getType().getIndex(name));
+    }
+
+    public Object[] getArray(int index) {
+        return (Object[]) this.get(index);
+    }
+
+    public boolean getBoolean(String name) {
+        return this.getBoolean(this.data.getType().getIndex(name));
+    }
+
+    public boolean getBoolean(int index) {
+        Boolean value = ((Boolean) this.get(index,Boolean.class,DataTypes.BOOLEAN));
+        if (value == null) {
+            return false;
+        }
+        return value.booleanValue();
+    }
+
+    public byte getByte(String name) {
+        return this.getByte(this.data.getType().getIndex(name));
+    }
+
+    public byte getByte(int index) {
+        Byte value = ((Byte) this.get(index,Byte.class,DataTypes.BYTE));
+        if (value == null) {
+            return 0;
+        }
+        return value.byteValue();
+    }
+
+    public Date getDate(String name) {
+        return this.getDate(this.data.getType().getIndex(name));
+    }
+
+    public Date getDate(int index) {
+        Date value = ((Date) this.get(index,Date.class,DataTypes.DATE));
+
+        return value;
+    }
+
+    public double getDouble(String name) {
+        return this.getDouble(this.data.getType().getIndex(name));
+    }
+
+    public double getDouble(int index) {
+        
+        Double value = ((Double) this.get(index,Double.class,DataTypes.DOUBLE));
+        if (value == null) {
+            return 0;
+        }
+        return value.doubleValue();
+    }
+
+    public Feature getFeature(String name) {
+        return this.getFeature(this.data.getType().getIndex(name));
+    }
+
+    public Feature getFeature(int index) {
+        return (Feature) this.get(index);
+    }
+
+    public float getFloat(String name) {
+        return this.getFloat(this.data.getType().getIndex(name));
+    }
+
+    public float getFloat(int index) {
+        Float value = ((Float) this.get(index,Float.class,DataTypes.FLOAT));
+        if (value == null) {
+            return 0;
+        }
+        return value.floatValue();
+    }
+
+    public Geometry getGeometry(String name) {
+        return this.getGeometry(this.data.getType().getIndex(name));
+    }
+
+    public Geometry getGeometry(int index) {
+        return (Geometry) this.get(index,Geometry.class,DataTypes.GEOMETRY);
+    }
+
+    public int getInt(String name) {
+        return this.getInt(this.data.getType().getIndex(name));
+    }
+
+    public int getInt(int index) {
+        Integer value = ((Integer) this.get(index,Integer.class,DataTypes.INT));
+        if (value == null) {
+            return 0;
+        }
+        return ((Integer)value).intValue();
+    }
+
+    public long getLong(String name) {
+        return this.getLong(this.data.getType().getIndex(name));
+    }
+
+    public long getLong(int index) {
+        Long value = ((Long) this.get(index,Long.class,DataTypes.LONG));
+        if (value == null) {
+            return 0;
+        }
+        return value.longValue();
+    }
+
+    public String getString(String name) {
+        return this.getString(this.data.getType().getIndex(name));
+    }
+
+    public String getString(int index) {
+        return (String) this.get(index,String.class,DataTypes.STRING);
+    }
+
+    public Object getContextValue(String name) {
+        name = name.toLowerCase();
+        if (name.equals("store")) {
+            return this.getStore();
+        }
+
+        if (name.equals("featuretype")) {
+            return this.data.getType();
+        }
+
+        if (name.equals("feature")) {
+            return this;
+        }
+
+        throw new IllegalArgumentException(name);
+    }
+
+    public Iterator getDataNames() {
+        class DataNamesIterator implements Iterator {
+            Iterator attributeIteraror;
+
+            DataNamesIterator(DefaultFeature feature) {
+                this.attributeIteraror = feature.getType().iterator();
+            }
+
+            public boolean hasNext() {
+                return this.attributeIteraror.hasNext();
+            }
+
+            public Object next() {
+                return ((FeatureAttributeDescriptor) this.attributeIteraror
+                        .next()).getName();
+            }
+
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+
+        }
+        return new DataNamesIterator(this);
+    }
+
+    public Object getDataValue(String name) {
+        name = name.toLowerCase();
+        try {
+            return get(name);
+        } catch (IllegalArgumentException ex) {
+            if( "defaultgeometry".equalsIgnoreCase(name )) {
+                return this.getDefaultGeometry();
+            }
+            throw ex;
+        }
+    }
+
+    public Iterator getDataValues() {
+        class DataValuesIterator implements Iterator {
+            DefaultFeature feature;
+            int current = 0;
+
+            DataValuesIterator(DefaultFeature feature) {
+                this.feature = feature;
+            }
+
+            public boolean hasNext() {
+                return current < feature.getType().size() - 1;
+            }
+
+            public Object next() {
+                return feature.get(current++);
+            }
+
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+
+        }
+        return new DataValuesIterator(this);
+    }
+
+    public boolean hasContextValue(String name) {
+        name = name.toLowerCase();
+        if (name.equals("store")) {
+            return true;
+        }
+
+        if (name.equals("featuretype")) {
+            return true;
+        }
+
+        if (name.equals("feature")) {
+            return true;
+        }
+        return false;
+    }
+
+    public boolean hasDataValue(String name) {
+        name = name.toLowerCase();
+        return this.data.getType().getIndex(name) >= 0;
+    }
+    
+    public Instant getInstant(int index) {
+        return ((Instant) this.get(index,Date.class,DataTypes.INSTANT));
+    }
+
+    public Instant getInstant(String name) {
+        return this.getInstant(this.data.getType().getIndex(name));
+    }
+
+    public Interval getInterval(int index) {
+        return ((Interval) this.get(index,Date.class,DataTypes.INTERVAL));
+    }
+
+    public Interval getInterval(String name) {
+        return this.getInterval(this.data.getType().getIndex(name));
+    }
+
+    public DynObject getAsDynObject() {
+        DynObjectFeatureFacade facade = new DynObjectFeatureFacade();
+        facade.setFeature(this);
+        return facade;
+    }
+
+    public String toString() {
+       // StringBuffer buffer = new StringBuffer("Feature with values: ");
+    	StringBuffer buffer = new StringBuffer("");
+        FeatureAttributeDescriptor[] attributeDescriptors =
+            getType().getAttributeDescriptors();
+        for (int i = 0; i < attributeDescriptors.length; i++) {
+            String name = attributeDescriptors[i].getName();
+            //buffer.append(name).append("=").append(get(name));
+            buffer.append(get(name));
+            if (i < attributeDescriptors.length - 1) {
+                buffer.append(", ");
+            }
+        }
+        return buffer.toString();
+    }
+    
+    
+
+
+	/**
+     * @return the inserted
+     */
+    public boolean isInserted() {
+        return inserted;
+    }
+
+    
+    /**
+     * @param inserted the inserted to set
+     */
+    public void setInserted(boolean inserted) {
+        this.inserted = inserted;
+    }
+
+    public EvaluatorData getEvaluatorData() {
+        return this;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureSelectionHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureSelectionHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureSelectionHelper.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.impl.undo.FeatureCommandsStack;
+
+/**
+ * Helper methods for the Default Selection implementation classes.
+ * 
+ * @see DefaultFeatureReferenceSelection
+ * @see DefaultFeatureSelection
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public interface FeatureSelectionHelper {
+    
+    /**
+     * If the store is in editing mode, it will have the count of added or
+     * removed features. This is used to correct the total count of Features.
+     * 
+     * @return the total number of added and deleted features
+     */
+    long getFeatureStoreDeltaSize();
+
+    /**
+     * Returns the {@link FeatureCommandsStack} of the {@link FeatureStore}. If
+     * the store is not in editing mode, this method may return null
+     * 
+     * @return the commands stack of the {@link FeatureStore}
+     */
+    FeatureCommandsStack getFeatureStoreCommandsStack();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureSelectionHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java	(revision 42196)
@@ -0,0 +1,765 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.zip.CRC32;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureRules;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynMethod;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+
+public class DefaultFeatureType extends ArrayList implements FeatureType,
+		DynClass {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7988721447349282215L;
+
+	private DefaultFeatureRules rules;
+	protected boolean hasEvaluators;
+	protected boolean hasEmulators;
+	protected String defaultGeometryAttributeName;
+	protected int defaultGeometryAttributeIndex;
+	protected int defaultTimeAttributeIndex;
+	private String id;
+	protected boolean hasOID;
+	protected boolean allowAtomaticValues;
+	protected FeatureAttributeDescriptor[] pk = null;
+	protected String internalID = null;
+
+	private List srsList = null; 
+
+	protected DefaultFeatureType(String id) {
+		this.internalID = Integer.toHexString((int) (Math.random()*100000)).toUpperCase();
+		this.id = id;
+		this.rules = new DefaultFeatureRules();
+		this.hasEvaluators = false;
+		this.hasEmulators = false;
+		this.defaultGeometryAttributeName = null;
+		this.defaultGeometryAttributeIndex = -1;
+		this.defaultTimeAttributeIndex = -1;
+		this.allowAtomaticValues = false;
+	}
+
+	protected DefaultFeatureType() {
+		this("default");
+	}
+
+	protected DefaultFeatureType(DefaultFeatureType other) {
+		this("default");
+		initialize(other, true);
+	}
+
+	protected DefaultFeatureType(DefaultFeatureType other,
+			boolean copyAttributes) {
+		this("default");
+		initialize(other, copyAttributes);
+	}
+        
+	protected void initialize(DefaultFeatureType other, boolean copyAttributes) {
+		this.id = other.getId();
+		if (copyAttributes) {
+			Iterator iter = other.iterator();
+			DefaultFeatureAttributeDescriptor attr;
+			while (iter.hasNext()) {
+				attr = (DefaultFeatureAttributeDescriptor) iter.next();
+				this.intitalizeAddAttibute(attr);
+			}
+		}
+		this.defaultGeometryAttributeName = other.defaultGeometryAttributeName;
+		this.hasEvaluators = other.hasEvaluators;
+		this.hasEmulators = other.hasEmulators;
+		this.rules = (DefaultFeatureRules) other.rules.getCopy();
+		this.defaultGeometryAttributeIndex = other.defaultGeometryAttributeIndex;
+		this.defaultTimeAttributeIndex = other.defaultTimeAttributeIndex;
+		this.hasOID = other.hasOID;
+		this.id = other.id; // XXX ???? copiar o no esto????
+                this.internalID = other.internalID;
+	}
+
+	protected void intitalizeAddAttibute(DefaultFeatureAttributeDescriptor attr) {
+		super.add(attr.getCopy());
+	}
+
+	public String getId() {
+		return this.id;
+	}
+
+	public Object get(String name) {
+		FeatureAttributeDescriptor attr;
+		Iterator iter = this.iterator();
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			if (attr.getName().equalsIgnoreCase(name)) {
+				return attr;
+			}
+		}
+		return null;
+	}
+
+	public FeatureAttributeDescriptor getAttributeDescriptor(String name) {
+		FeatureAttributeDescriptor attr;
+		Iterator iter = this.iterator();
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			if (attr.getName().equalsIgnoreCase(name)) {
+				return attr;
+			}
+		}
+		return null;
+	}
+
+	public FeatureAttributeDescriptor getAttributeDescriptor(int index) {
+		return (FeatureAttributeDescriptor) super.get(index);
+	}
+
+	public FeatureType getCopy() {
+		return new DefaultFeatureType(this);
+	}
+
+	public int getDefaultGeometryAttributeIndex() {
+		return this.defaultGeometryAttributeIndex;
+	}
+
+	public String getDefaultGeometryAttributeName() {
+		return this.defaultGeometryAttributeName;
+	}
+
+	public EditableFeatureType getEditable() {
+		return new DefaultEditableFeatureType(this);
+	}
+
+	public int getIndex(String name) {
+		FeatureAttributeDescriptor attr;
+		Iterator iter = this.iterator();
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			if (attr.getName().equalsIgnoreCase(name)) {
+				return attr.getIndex();
+			}
+		}
+		return -1;
+	}
+
+	public FeatureRules getRules() {
+		return this.rules;
+	}
+
+	public boolean hasEvaluators() {
+		return this.hasEvaluators;
+	}
+
+	public boolean hasEmulators() {
+		return this.hasEmulators;
+	}
+
+	public List getSRSs() {
+		if (this.srsList == null) {
+			ArrayList tmp = new ArrayList();
+			Iterator iter = iterator();
+			Iterator tmpIter;
+			boolean allreadyHave;
+			IProjection tmpSRS;
+			FeatureAttributeDescriptor attr;
+			while (iter.hasNext()){
+				attr = (FeatureAttributeDescriptor) iter.next();
+				if (attr.getDataType().getType() == DataTypes.GEOMETRY
+						&& attr.getSRS() != null) {
+					allreadyHave = false;
+					tmpIter = tmp.iterator();
+					while (tmpIter.hasNext()) {
+						tmpSRS = (IProjection) tmpIter.next();
+						if (tmpSRS.getAbrev().equals(attr.getSRS().getAbrev())) {
+							allreadyHave = true;
+							break;
+						}
+					}
+					if (!allreadyHave) {
+						tmp.add(attr.getSRS());
+					}
+				}
+			}
+			this.srsList = Collections.unmodifiableList(tmp);
+		}
+		return this.srsList;
+	}
+
+	public IProjection getDefaultSRS() {
+		if (this.getDefaultGeometryAttributeIndex() < 0) {
+			return null;
+		}
+		return this.getAttributeDescriptor(
+				this.getDefaultGeometryAttributeIndex()).getSRS();
+	}
+
+	public void validateFeature(Feature feature, int mode) throws DataException {
+            DefaultFeatureRules rules = (DefaultFeatureRules) this.getRules();
+            rules.validate(feature,mode);
+	}
+
+	public FeatureType getSubtype(String[] names) throws DataException {
+                if( names==null || names.length <1) {
+                    return (FeatureType) this.clone();
+                }
+		return new SubtypeFeatureType(this, names, null);
+	}
+
+	public FeatureType getSubtype(String[] names, String[] constantsNames) throws DataException {
+                if( (names==null || names.length <1) && (constantsNames==null || constantsNames.length <1) ) {
+                    return (FeatureType) this.clone();
+                }
+		return new SubtypeFeatureType(this, names,constantsNames);
+	}
+
+	public boolean isSubtypeOf(FeatureType featureType) {
+		return false;
+	}
+
+
+
+	class SubtypeFeatureType extends DefaultFeatureType {
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = 6913732960073922540L;
+		WeakReference parent;
+
+                SubtypeFeatureType(DefaultFeatureType parent, String[] names, String[] constantsNames)
+                        throws DataException {
+                    super(parent, false);
+                    DefaultFeatureAttributeDescriptor attrcopy;
+                    DefaultFeatureAttributeDescriptor attr;
+                    Set attrnames = null;
+
+                    // Copy attributes
+                    if ( names != null && names.length > 0 ) {
+                        attrnames = new HashSet();
+                        attrnames.addAll(Arrays.asList(names));
+                        if ( parent.hasEmulators ) {
+                            for ( int i = 0; i < parent.size(); i++ ) {
+                                attr = (DefaultFeatureAttributeDescriptor) parent.getAttributeDescriptor(i);
+                                FeatureAttributeEmulator emulator = attr.getFeatureAttributeEmulator();
+                                if ( emulator != null ) {
+                                    String ss[] = emulator.getRequiredFieldNames();
+                                    if ( ss != null ) {
+                                        attrnames.addAll(Arrays.asList(ss));
+                                    }
+                                }
+                            }
+                        }
+                        Iterator it = attrnames.iterator();
+                        int i = 0;
+                        while ( it.hasNext() ) {
+                            String name = (String) it.next();
+                            attr = (DefaultFeatureAttributeDescriptor) parent
+                                    .getAttributeDescriptor(name);
+                            if ( attr == null ) {
+                                throw new SubtypeFeatureTypeNameException(name, parent
+                                        .getId());
+                            }
+                            attrcopy = new DefaultFeatureAttributeDescriptor(attr);
+                            this.add(attrcopy);
+                            attrcopy.index = i++;
+                        }
+
+                    } else {
+                        for ( int i = 0; i < parent.size(); i++ ) {
+                            attr = (DefaultFeatureAttributeDescriptor) parent.getAttributeDescriptor(i);
+                            attrcopy = new DefaultFeatureAttributeDescriptor(attr);
+                            this.add(attrcopy);
+                            attrcopy.index = i;
+                        }
+                    }
+
+                    // Set the consttants attributes.
+                    if ( constantsNames != null && constantsNames.length > 0 ) {
+                        for ( int i = 0; i < constantsNames.length; i++ ) {
+                            if ( attrnames != null && attrnames.contains(constantsNames[i]) ) {
+                                continue;
+                            }
+                            attr = (DefaultFeatureAttributeDescriptor) this.getAttributeDescriptor(constantsNames[i]);
+                            attr.setConstantValue(true);
+                        }
+                    }
+
+                    // Add missing pk fiels if any
+                    if ( !parent.hasOID() ) {
+                        Iterator iter = parent.iterator();
+                        while ( iter.hasNext() ) {
+                            attr = (DefaultFeatureAttributeDescriptor) iter.next();
+                            if ( attr.isPrimaryKey() && this.getIndex(attr.getName()) < 0 ) {
+                                attrcopy = new DefaultFeatureAttributeDescriptor(attr);
+                                this.add(attrcopy);
+                                attrcopy.index = this.size() - 1;
+                            }
+                        }
+                    }
+
+                    this.defaultGeometryAttributeIndex = this
+                            .getIndex(this.defaultGeometryAttributeName);
+                    if ( this.defaultGeometryAttributeIndex < 0 ) {
+                        this.defaultGeometryAttributeName = null;
+                    }
+                    this.parent = new WeakReference(parent);
+                }
+
+		public FeatureType getSubtype(String[] names) throws DataException {
+			return new SubtypeFeatureType((DefaultFeatureType) this.parent
+					.get(), names, null);
+		}
+
+		public boolean isSubtypeOf(FeatureType featureType) {
+			if (featureType == null) {
+				return false;
+			}
+			FeatureType parent = (FeatureType) this.parent.get();
+			return featureType.equals(parent);
+		}
+
+		public EditableFeatureType getEditable() {
+			throw new UnsupportedOperationException();
+		}
+	}
+
+	public class SubtypeFeatureTypeNameException extends DataException {
+
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = -4414242486723260101L;
+		private final static String MESSAGE_FORMAT = "Attribute name '%(name)s' not found in type (%(type)s).";
+		private final static String MESSAGE_KEY = "_SubtypeFeatureTypeNameException";
+
+		public SubtypeFeatureTypeNameException(String name, String type) {
+			super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+			setValue("name", name);
+			setValue("type", type);
+		}
+	}
+
+	public boolean hasOID() {
+		return hasOID;
+	}
+	public String toString(){
+		StringBuffer s = new StringBuffer();
+		s.append(this.getId());
+		s.append(":[");
+		String attName;
+		for (int i = 0; i < size(); i++) {
+			attName =((FeatureAttributeDescriptor)get(i)).getName().toString();
+			s.append(attName);
+			if (i < size() - 1) {
+				s.append(',');
+			}
+		}
+		s.append(']');
+		return s.toString();
+	}
+
+	public Iterator iterator() {
+		return getIterator(super.iterator());
+	}
+
+	protected Iterator getIterator(Iterator iter) {
+		return new DelegatedIterator(iter);
+	}
+
+	protected class DelegatedIterator implements Iterator {
+
+		protected Iterator iterator;
+
+		public DelegatedIterator(Iterator iter) {
+			this.iterator = iter;
+		}
+
+		public boolean hasNext() {
+			return iterator.hasNext();
+		}
+
+		public Object next() {
+			return iterator.next();
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+
+	}
+
+	public boolean allowAutomaticValues() {
+		return this.allowAtomaticValues;
+	}
+
+	public FeatureAttributeDescriptor[] getAttributeDescriptors() {
+		return (FeatureAttributeDescriptor[]) super
+				.toArray(new FeatureAttributeDescriptor[super.size()]);
+	}
+
+	public FeatureAttributeDescriptor[] getPrimaryKey() {
+		if (pk == null) {
+			List pkList = new ArrayList();
+			Iterator iter = super.iterator();
+			FeatureAttributeDescriptor attr;
+			while (iter.hasNext()){
+				attr = (FeatureAttributeDescriptor) iter.next();
+				if (attr.isPrimaryKey()){
+					pkList.add(attr);
+				}
+			}
+			pk = (FeatureAttributeDescriptor[]) pkList
+					.toArray(new FeatureAttributeDescriptor[pkList.size()]);
+		}
+		return pk;
+	}
+
+	public FeatureAttributeDescriptor getDefaultGeometryAttribute() {
+		if (this.defaultGeometryAttributeIndex < 0) {
+			return null;
+		}
+		return (FeatureAttributeDescriptor) super
+				.get(this.defaultGeometryAttributeIndex);
+	}
+
+
+
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof DefaultFeatureType)) {
+			return false;
+		}
+		DefaultFeatureType otherType = (DefaultFeatureType) other;
+		if (!this.id.equals(otherType.id)) {
+			return false;
+		}
+		if (this.size() != otherType.size()) {
+			return false;
+		}
+		FeatureAttributeDescriptor attr,attrOther;
+		Iterator iter,iterOther;
+		iter = this.iterator();
+		iterOther = otherType.iterator();
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor) iter.next();
+			attrOther = (FeatureAttributeDescriptor) iterOther.next();
+			if (!attr.equals(attrOther)) {
+				return false;
+			}
+		}
+
+		if (defaultGeometryAttributeName != otherType.defaultGeometryAttributeName) {
+			if (defaultGeometryAttributeName == null) {
+				return false;
+			}
+			return defaultGeometryAttributeName
+					.equals(otherType.defaultGeometryAttributeName);
+
+		}
+		return true;
+
+	}
+
+	/**
+	 * Start of DynClass interface implementation
+	 * READONLY
+	 */
+
+	public DynField addDynField(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField getDeclaredDynField(String name) {
+		return (DynField) getAttributeDescriptor(name);
+	}
+
+	public DynField[] getDeclaredDynFields() {
+		return (DynField[]) getAttributeDescriptors();
+	}
+
+	public String getDescription() {
+		return null;
+	}
+
+	public DynField getDynField(String name) {
+		return (DynField) getAttributeDescriptor(name);
+	}
+
+	public DynField[] getDynFields() {
+		return (DynField[]) getAttributeDescriptors();
+	}
+
+	public String getName() {
+		return this.id + "_" + internalID;
+	}
+
+	public void removeDynField(String name) {
+		throw new UnsupportedOperationException();
+
+	}
+
+	public void addDynMethod(DynMethod dynMethod) {
+		throw new UnsupportedOperationException();
+
+	}
+
+	public void extend(DynClass dynClass) {
+		throw new UnsupportedOperationException();
+
+	}
+
+	public void extend(String dynClassName) {
+		throw new UnsupportedOperationException();
+
+	}
+
+	public void extend(String namespace, String dynClassName) {
+		throw new UnsupportedOperationException();
+
+	}
+
+	public DynMethod getDeclaredDynMethod(String name)
+			throws DynMethodException {
+		return null;
+	}
+
+	public DynMethod[] getDeclaredDynMethods() throws DynMethodException {
+		return null;
+	}
+
+	public DynMethod getDynMethod(String name) throws DynMethodException {
+		return null;
+	}
+
+	public DynMethod getDynMethod(int code) throws DynMethodException {
+		return null;
+	}
+
+	public DynMethod[] getDynMethods() throws DynMethodException {
+		return null;
+	}
+
+	public DynClass[] getSuperDynClasses() {
+		return null;
+	}
+
+	public boolean isInstance(DynObject dynObject) {
+		if (dynObject.getDynClass().getName() == getName()) {
+			return true;
+		}
+		return false;
+	}
+
+	public DynObject newInstance() {
+
+		throw new UnsupportedOperationException();
+	}
+
+	public void removeDynMethod(String name) {
+		throw new UnsupportedOperationException();
+
+	}
+
+	public DynField addDynFieldChoice(String name, int type,
+			Object defaultValue, DynObjectValueItem[] values,
+			boolean mandatory, boolean persistent) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldRange(String name, int type,
+			Object defaultValue, Object min, Object max, boolean mandatory,
+			boolean persistent) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldSingle(String name, int type,
+			Object defaultValue, boolean mandatory, boolean persistent) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void validate(DynObject object) throws DynObjectValidateException {
+		//FIXME: not sure it's the correct code
+		if (object instanceof Feature) {
+			Feature fea = (Feature) object;
+			if (fea.getType().equals(this)) {
+				return;
+			}
+		}
+		throw new DynObjectValidateException(this.id);
+	}
+
+	public DynField addDynFieldLong(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldChoice(String name, int type,
+			Object defaultValue, DynObjectValueItem[] values) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldRange(String name, int type,
+			Object defaultValue, Object min, Object max) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldSingle(String name, int type, Object defaultValue) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldString(String name) {
+		throw new UnsupportedOperationException();
+	}
+	
+	public DynField addDynFieldInt(String name) {
+		throw new UnsupportedOperationException();
+	}
+	
+	public DynField addDynFieldDouble(String name) {
+		throw new UnsupportedOperationException();
+	}
+	
+	public DynField addDynFieldFloat(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldBoolean(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldList(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldMap(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldObject(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldSet(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldArray(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldDate(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void extend(DynStruct struct) {
+		throw new UnsupportedOperationException();
+	}
+
+	public String getFullName() {
+        // TODO: usar el DynClassName
+		return this.id;
+	}
+
+	public String getNamespace() {
+		return "DALFeature";
+	}
+
+	public DynStruct[] getSuperDynStructs() {
+		return null;
+	}
+
+	public void setDescription(String description) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void setNamespace(String namespace) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldFile(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldFolder(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldURL(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DynField addDynFieldURI(String name) {
+		throw new UnsupportedOperationException();
+	}
+
+    public boolean isExtendable(DynStruct dynStruct) {
+        return false;
+    }
+
+	public void extend(DynStruct[] structs) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void remove(DynStruct superDynStruct) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void removeAll(DynStruct[] superDynStruct) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public FeatureAttributeDescriptor getDefaultTimeAttribute() {
+		if (this.defaultTimeAttributeIndex < 0) {
+			return null;
+		}
+		return (FeatureAttributeDescriptor) super
+				.get(this.defaultTimeAttributeIndex);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionHelper.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.impl.undo.FeatureCommandsStack;
+
+/**
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class DefaultFeatureSelectionHelper implements FeatureSelectionHelper {
+
+    private final DefaultFeatureStore store;
+
+    public DefaultFeatureSelectionHelper(DefaultFeatureStore store) {
+        this.store = store;
+    }
+
+    public FeatureCommandsStack getFeatureStoreCommandsStack() {
+        try {
+            return store.getCommandsStack();
+        } catch (DataException e) {
+            // Ignore
+            return null;
+        }
+    }
+
+    public long getFeatureStoreDeltaSize() {
+        // If the FeatureManager is present, and the store is in editing
+        // mode, the number of current Features may have changed.
+        if (store.isEditing() && store.getFeatureManager() != null) {
+            return store.getFeatureManager().getDeltaSize();
+        } else {
+            return 0;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelectionHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelection.java	(revision 42196)
@@ -0,0 +1,597 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.ReversedSelectionIteratorException;
+import org.gvsig.fmap.dal.feature.impl.featureset.DynObjectSetFeatureSetFacade;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Default implementation of the FeatureSelection interface. Internally, only
+ * FeatureReference values are stored.
+ * 
+ * This implementation performs better if used with the selection related
+ * methods: select, deselect and isSelected ones.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class DefaultFeatureSelection extends DefaultFeatureReferenceSelection
+		implements FeatureSelection {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(DefaultFeatureSelection.class);
+
+	private Map featureTypeCounts = new HashMap(1);
+
+	/**
+	 * Creates a DefaultFeatureSelection, with a FeatureStore.
+	 * 
+	 * @param featureStore
+	 *            the FeatureStore to load Features from
+	 * @throws DataException
+	 *             if there is an error while getting the total number of
+	 *             Features of the Store.
+	 * @see AbstractSetBasedDataSelection#DefaultSelection(int)
+	 */
+	public DefaultFeatureSelection(DefaultFeatureStore featureStore)
+			throws DataException {
+		super(featureStore);
+	}
+
+	/**
+	 * Creates a new Selection with the total size of Features from which the
+	 * selection will be performed.
+	 * 
+	 * @param featureStore
+	 *            the FeatureStore of the selected FeatureReferences
+	 * @param helper
+	 *            to get some information of the Store
+	 * @throws DataException
+	 *             if there is an error while getting the total number of
+	 *             Features of the Store.
+	 */
+	public DefaultFeatureSelection(FeatureStore featureStore,
+			FeatureSelectionHelper helper) throws DataException {
+		super(featureStore, helper);
+	}
+
+	/**
+	 * Constructor used by the persistence manager. Don't use directly. After to
+	 * invoke this method, the persistence manager calls the the method
+	 * {@link #loadFromState(PersistentState)} to set the values of the internal
+	 * attributes that this class needs to work.
+	 */
+	public DefaultFeatureSelection() {
+		super();
+	}
+
+	public boolean select(Feature feature) {
+		return select(feature, true);
+	}
+
+	/**
+	 * @see #select(Feature)
+	 * @param undoable
+	 *            if the action must be undoable
+	 */
+	public boolean select(Feature feature, boolean undoable) {
+		// TODO: should we check if the feature is from the same FeatureStore??
+		if (feature == null) {
+			return false;
+		}
+
+		// LOGGER.debug("Selected feature: {}", feature);
+
+		if (isReversed()) {
+			removeFeatureTypeCount(feature.getType());
+		} else {
+			addFeatureTypeCount(feature.getType());
+		}
+		return select(feature.getReference(), undoable);
+	}
+
+	public boolean select(FeatureSet features) throws DataException {
+		return select(features, true);
+	}
+
+	/**
+	 * @see #select(FeatureSet)
+	 * @param undoable
+	 *            if the action must be undoable
+	 */
+	public boolean select(FeatureSet features, boolean undoable)
+			throws DataException {
+		boolean change = false;
+		boolean inComplex = false;
+		if (undoable && getFeatureStore().isEditing()
+				&& !getCommands().inComplex()) {
+			
+			getCommands().startComplex("_selectionSelectFeatureSet");
+			inComplex = getCommands().inComplex();
+		}
+
+		disableNotifications();
+		DisposableIterator iter = null;
+		try {
+			for (iter = features.fastIterator(); iter.hasNext();) {
+				change |= select((Feature) iter.next(), undoable);
+			}
+		} finally {
+			dispose(iter);
+		}
+		enableNotifications();
+		if (undoable && getFeatureStore().isEditing() && inComplex) {
+			getCommands().endComplex();
+		}
+		if (change) {
+			notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+		}
+		return change;
+	}
+
+	public boolean deselect(Feature feature) {
+		return deselect(feature, true);
+	}
+
+	/**
+	 * @see #deselect(Feature)
+	 * @param undoable
+	 *            if the action must be undoable
+	 */
+	public boolean deselect(Feature feature, boolean undoable) {
+		if (feature == null) {
+			return false;
+		}
+
+		LOG.debug("Deselected feature: {}", feature);
+
+		if (isReversed()) {
+			addFeatureTypeCount(feature.getType());
+		} else {
+			removeFeatureTypeCount(feature.getType());
+		}
+		return deselect(feature.getReference(), undoable);
+	}
+
+	public boolean deselect(FeatureSet features) throws DataException {
+		return deselect(features, true);
+	}
+
+	/**
+	 * @see #deselect(FeatureSet)
+	 * @param undoable
+	 *            if the action must be undoable
+	 */
+	public boolean deselect(FeatureSet features, boolean undoable)
+			throws DataException {
+		boolean change = false;
+		if (undoable && getFeatureStore().isEditing()) {
+			getCommands().startComplex("_selectionDeselectFeatureSet");
+		}
+		disableNotifications();
+		DisposableIterator iter = null;
+		try {
+			for (iter = features.fastIterator(); iter.hasNext();) {
+				change |= deselect((Feature) iter.next(), undoable);
+			}
+		} finally {
+			dispose(iter);
+		}
+		enableNotifications();
+		if (undoable && getFeatureStore().isEditing()) {
+			getCommands().endComplex();
+		}
+		if (change) {
+			notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+		}
+		return change;
+	}
+
+	public boolean isSelected(Feature feature) {
+		if (feature == null) {
+			return false;
+		}
+
+        // Use the selection data size as a small optimization for the most
+        // common case, when nothing is selected and every feature is checked
+        // while drawing or painting the table document.
+        if (selectionData.isReversed()) {
+            return selectionData.getSize() == 0
+                || !selectionData.contains(feature.getReference());
+        } else {
+            return selectionData.getSize() > 0
+                && selectionData.contains(feature.getReference());
+        }
+	}
+
+	public FeatureType getDefaultFeatureType() {
+		try {
+			return getFeatureStore().getDefaultFeatureType();
+		} catch (DataException ex) {
+			LOG.error("Error getting the default feature type "
+					+ "of the FeatureStore: " + getFeatureStore(), ex);
+		}
+		return null;
+	}
+
+	public List getFeatureTypes() {
+		// Go through the map of FeatureTypes, and return only the ones that
+		// have at least a Feature.
+		List types = new ArrayList();
+		for (java.util.Iterator iterator = featureTypeCounts.entrySet()
+				.iterator(); iterator.hasNext();) {
+			Map.Entry entry = (Entry) iterator.next();
+			FeatureType type = (FeatureType) entry.getKey();
+			Long count = (Long) entry.getValue();
+
+			if (count.longValue() > 0) {
+				types.add(type);
+			}
+		}
+
+		return types;
+	}
+
+	public long getSize() throws DataException {
+		return getSelectedCount();
+	}
+
+	public boolean isEmpty() throws DataException {
+		return getSelectedCount() == 0;
+	}
+
+	/**
+	 * Returns the list of selected values, or the deselected ones if the
+	 * selection has been reversed.
+	 */
+	public DisposableIterator iterator() {
+		return iterator(0);
+	}
+
+	/**
+	 * Returns the list of selected values, or the deselected ones if the
+	 * selection has been reversed.
+	 * 
+	 * WARN: not very good performance implementation.
+	 */
+	public DisposableIterator iterator(long index) {
+		return iterator(index, false);
+	}
+
+	/**
+	 * Returns the list of selected values, or the deselected ones if the
+	 * selection has been reversed.
+	 * 
+	 * WARN: not really a fast implementation.
+	 */
+	public DisposableIterator fastIterator() {
+		return fastIterator(0);
+	}
+
+	/**
+	 * Returns the list of selected values, or the deselected ones if the
+	 * selection has been reversed.
+	 * 
+	 * WARN: not really a fast implementation.
+	 */
+	public DisposableIterator fastIterator(long index) {
+		return iterator(index, true);
+	}
+
+	protected void clearFeatureReferences() {
+		super.clearFeatureReferences();
+		featureTypeCounts.clear();
+	}
+
+	/**
+	 * Creates an iterator for the Selection.
+	 */
+	private DisposableIterator iterator(long index, boolean fastIterator) {
+		if (isReversed()) {
+			DisposableIterator iter = new ReversedFeatureIteratorFacade(
+					getData(), getFeatureStore(), fastIterator);
+			for (long l = 0; l < index && iter.hasNext(); l++) {
+				iter.next();
+			}
+			return iter;
+
+		} else {
+			// TODO: maybe we could add a new referenceIterator(int index)
+			// method that could be implemented in a more performant way
+
+			java.util.Iterator iter = referenceIterator();
+			for (long l = 0; l < index && iter.hasNext(); l++) {
+				iter.next();
+			}
+			return new FeatureIteratorFacade(iter, getFeatureStore());
+		}
+	}
+
+	private Long removeFeatureTypeCount(FeatureType featureType) {
+		Long count = (Long) featureTypeCounts.get(featureType);
+		if (count == null) {
+			count = new Long(-1);
+		} else {
+			count = new Long(count.longValue() - 1);
+		}
+		featureTypeCounts.put(featureType, count);
+		return count;
+	}
+
+	private Long addFeatureTypeCount(FeatureType featureType) {
+		Long count = (Long) featureTypeCounts.get(featureType);
+		if (count == null) {
+			count = new Long(1);
+		} else {
+			count = new Long(count.longValue() + 1);
+		}
+		featureTypeCounts.put(featureType, count);
+		return count;
+	}
+
+	/**
+	 * Facade over a Iterator of FeatureReferences, to return Features instead.
+	 * 
+	 * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+	 */
+	private class FeatureIteratorFacade implements DisposableIterator {
+
+		private final Logger LOGGER = LoggerFactory
+				.getLogger(FeatureIteratorFacade.class);
+
+		private java.util.Iterator refIterator;
+
+		private FeatureStore featureStore;
+
+		public FeatureIteratorFacade(java.util.Iterator iter,
+				FeatureStore featureStore) {
+			this.refIterator = iter;
+			this.featureStore = featureStore;
+		}
+
+		public boolean hasNext() {
+			return refIterator.hasNext();
+		}
+
+		public Object next() {
+			FeatureReference ref = nextFeatureReference();
+			try {
+				return featureStore.getFeatureByReference(ref);
+			} catch (DataException ex) {
+				LOGGER.error(
+						"Error loading the Feature with FeatureReference: "
+								+ ref, ex);
+				return null;
+			}
+		}
+
+		/**
+		 * Returns the next FeatureReference.
+		 * 
+		 * @return the next FeatureReference
+		 */
+		public FeatureReference nextFeatureReference() {
+			return (FeatureReference) refIterator.next();
+		}
+
+		public void remove() {
+			refIterator.remove();
+		}
+
+		public void dispose() {
+			if (refIterator instanceof DisposableIterator) {
+				((DisposableIterator) refIterator).dispose();
+			}
+			refIterator = null;
+			featureStore = null;
+		}
+	}
+
+	/**
+	 * Facade over a Iterator of FeatureReferences, to return Features instead,
+	 * when the Selection is reversed
+	 * 
+	 * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+	 */
+	private class ReversedFeatureIteratorFacade implements DisposableIterator {
+
+		private SelectionData selectionData;
+
+		private DisposableIterator iterator;
+
+		private Feature nextFeature = null;
+
+		private FeatureSet featureSet;
+
+		public ReversedFeatureIteratorFacade(SelectionData selectionData,
+				FeatureStore featureStore, boolean fastIterator) {
+			this.selectionData = selectionData;
+
+			// Load a Set with all the store features
+			try {
+				featureSet = featureStore.getFeatureSet();
+				if (fastIterator) {
+					iterator = featureSet.fastIterator();
+				} else {
+					iterator = featureSet.iterator();
+				}
+			} catch (DataException ex) {
+				throw new ReversedSelectionIteratorException(ex);
+			}
+
+			// Filter the features not selected and position in the next
+			// selected feature
+			positionInNextElement();
+		}
+
+		public boolean hasNext() {
+			return nextFeature != null;
+		}
+
+		public Object next() {
+			Feature tmp = nextFeature.getCopy();
+			positionInNextElement();
+			return tmp;
+		}
+
+		public void remove() {
+			iterator.remove();
+		}
+
+		private void positionInNextElement() {
+			nextFeature = null;
+			while (iterator.hasNext()) {
+				nextFeature = (Feature) iterator.next();
+				if (selectionData.contains(nextFeature.getReference())) {
+					nextFeature = null;
+				} else {
+					break;
+				}
+			}
+		}
+
+		public void dispose() {
+			this.featureSet.dispose();
+			this.iterator.dispose();
+			this.selectionData = null;
+			this.nextFeature = null;
+		}
+	}
+
+	public void delete(Feature feature) throws DataException {
+		throw new UnsupportedOperationException();
+	}
+
+	public void insert(EditableFeature feature) throws DataException {
+		throw new UnsupportedOperationException();
+	}
+
+	public void update(EditableFeature feature) throws DataException {
+		throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection#
+	 * loadFromState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		super.loadFromState(state);
+
+	}
+
+	public void accept(Visitor visitor) throws BaseException {
+		accept(visitor, 0);
+	}
+
+	public final void accept(Visitor visitor, long firstValueIndex)
+			throws BaseException {
+		try {
+			doAccept(visitor, firstValueIndex);
+		} catch (VisitCanceledException ex) {
+			// The visit has been cancelled by the visitor, so we finish here.
+			LOG.debug(
+					"The visit, beggining on position {}, has been cancelled "
+							+ "by the visitor: {}", new Long(firstValueIndex),
+					visitor);
+		}
+	}
+
+	private void doAccept(Visitor visitor, long firstValueIndex)
+			throws BaseException {
+		DisposableIterator iterator = fastIterator(firstValueIndex);
+
+		if (iterator != null) {
+			try {
+				while (iterator.hasNext()) {
+					Feature feature = (Feature) iterator.next();
+					visitor.visit(feature);
+				}
+			} finally {
+				iterator.dispose();
+			}
+		}
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		featureTypeCounts.clear();
+	}
+
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				DefaultFeatureSelection.class, "DefaultFeatureSelection",
+				"DefaultFeatureSelection Persistent definition", null, null);
+
+		definition.extend(manager.getDefinition(DefaultFeatureReferenceSelection.DYNCLASS_PERSISTENT_NAME));
+		definition.addDynFieldMap("featureTypeCounts")
+				.setClassOfItems(Long.class).setMandatory(false);
+
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		DefaultFeatureSelection clone = (DefaultFeatureSelection) super.clone();
+		clone.featureTypeCounts = new HashMap(featureTypeCounts);
+		return clone;
+	}
+
+    public DynObjectSet getDynObjectSet() {
+        return new DynObjectSetFeatureSetFacade(this, getFeatureStore());
+    }
+
+    public DynObjectSet getDynObjectSet(boolean fast) {
+        return new DynObjectSetFeatureSetFacade(this, getFeatureStore(), fast);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureRules.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureRules.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureRules.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureRule;
+import org.gvsig.fmap.dal.feature.FeatureRules;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.ValidateFeaturesException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultFeatureRules extends ArrayList implements FeatureRules {
+        
+        private final static Logger logger = LoggerFactory.getLogger(DefaultFeatureRules.class);
+        
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -8084546505498274121L;
+
+	public FeatureRule add(FeatureRule rule) {
+		if (super.add(rule)) {
+			return rule;
+		}
+		return null;
+	}
+
+	public FeatureRule getRule(int index) {
+		return (FeatureRule) super.get(index);
+	}
+
+	public boolean remove(FeatureRule rule) {
+		return super.remove(rule);
+	}
+
+	public FeatureRules getCopy() {
+		DefaultFeatureRules copy = new DefaultFeatureRules();
+		copy.addAll(this);
+		return copy;
+	}
+
+        /**
+         * @deprecated use validate(Feature feature, int mode)
+         * @param feature
+         * @throws DataException 
+         */
+	public void validate(Feature feature) throws DataException {
+            logger.warn("Calling deprecated method validate without mode.");
+            FeatureStore store = ((DefaultFeature)feature).getStore();
+            Iterator featureRules=iterator();
+            while (featureRules.hasNext()) {
+                    FeatureRule rule = (FeatureRule) featureRules.next();
+                    rule.validate(feature, store);
+            }
+
+	}
+
+	public void validate(Feature feature, int mode) throws DataException {
+            FeatureStore store = ((DefaultFeature)feature).getStore();
+            Iterator featureRules=iterator();
+            while (featureRules.hasNext()) {
+                FeatureRule rule = (FeatureRule) featureRules.next();
+                if( rule.checkAtFinishEditing() && mode == Feature.FINISH_EDITING ) {
+                    rule.validate(feature, store);
+                }
+                if( rule.checkAtUpdate() && mode == Feature.UPDATE ) {
+                    rule.validate(feature, store);
+                }
+            }
+
+	}
+
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureRules.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProvider.java	(revision 42196)
@@ -0,0 +1,324 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.memory;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.fmap.dal.feature.spi.memory.AbstractMemoryStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.memory.MemoryResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ * 
+ *         TODO: take into account the parameter "autoOrderAttributeName" to
+ *         order the {@link Feature}s by default by that attribute, in ascending
+ *         order.
+ */
+public class MemoryStoreProvider extends AbstractMemoryStoreProvider {
+
+    private static final Logger logger = LoggerFactory
+        .getLogger(MemoryStoreProvider.class);
+
+    public static final String NAME = "Memory";
+    public static final String DESCRIPTION = "Memory provider";
+
+    public static final String METADATA_DEFINITION_NAME = "MemoryProvider";
+
+    private long counterNewsOIDs = 0;
+    private Envelope envelope = null;
+    private Map oids = null;
+
+    private Double sourceID = null;
+
+    private ResourceProvider memoryResource;
+
+    public static DynObject newMetadataContainer(String name) {
+        return ToolsLocator.getDynObjectManager().createDynObject(
+            MetadataLocator.getMetadataManager().getDefinition(name));
+    }
+
+    public MemoryStoreProvider(MemoryStoreParameters memoryStoreParameters,
+        DataStoreProviderServices storeServices) throws InitializeException {
+        super(memoryStoreParameters, storeServices,
+            newMetadataContainer(METADATA_DEFINITION_NAME));
+        sourceID = new Double(Math.random());
+        data = new ArrayList();
+        oids = new Hashtable();
+        initialize();
+        memoryResource =
+            createResource(MemoryResource.NAME,
+                new Object[] { memoryStoreParameters.getName() });
+    }
+
+    public String getName() {
+        return "Memory_" + Integer.toHexString((int) (Math.random()*100000)).toUpperCase();
+    }
+
+    public String getFullName() {
+        return "memory:" + Double.toHexString(this.sourceID.doubleValue());
+    }
+
+    private void initialize() {
+        FeatureType featureType =
+            getStoreServices().createFeatureType(getName()).getNotEditableCopy();
+        List types = new ArrayList(1);
+        types.add(featureType);
+        getStoreServices().setFeatureTypes(types, featureType);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createNewOID()
+     */
+    public Object createNewOID() {
+        return new Long(counterNewsOIDs++);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getName()
+     */
+    public String getProviderName() {
+        return NAME;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getOIDType()
+     */
+    public int getOIDType() {
+        return DataTypes.LONG;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getSourceId()
+     */
+    public Object getSourceId() {
+        return sourceID;
+    }
+
+    public void open() throws OpenException {
+    }
+
+    public static void registerMetadataDefinition() throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(METADATA_DEFINITION_NAME) == null) {
+            DynStruct metadataDefinition =
+                manager.addDefinition(METADATA_DEFINITION_NAME, "Memory Store");
+            metadataDefinition.extend(manager
+                .getDefinition(DataStore.SPATIAL_METADATA_DEFINITION_NAME));
+        }
+    }
+
+    public boolean allowWrite() {
+        return true;
+    }
+
+    public void performChanges(Iterator deleteds, Iterator inserteds,
+        Iterator updateds, Iterator originalFeatureTypesUpdated)
+        throws PerformEditingException {
+        FeatureSet set = null;
+        DisposableIterator iter = null;
+        try {
+            FeatureType featureType =
+                this.getStoreServices().getDefaultFeatureType();
+            List types = new ArrayList(1);
+            types.add(featureType);
+            getStoreServices().setFeatureTypes(types, featureType);
+
+            set = this.getFeatureStore().getFeatureSet();
+
+            // Create a visitor to generate new data
+            EditionVisitor visitor = new EditionVisitor(set.getSize());
+
+            // collect new data
+            set.accept(visitor);
+
+            // update data objects
+            data = visitor.getData();
+            oids = visitor.getOids();
+            envelope = visitor.getEnvelope();
+
+        } catch (DataException e) {
+            logger.error("Error adding features", e);
+        } catch (BaseException e) {
+            logger.error("Error performing edition", e);
+        } finally {
+            dispose(iter);
+            dispose(set);
+        }
+    }
+
+    public Envelope getEnvelope() throws DataException {
+        return envelope;
+    }
+
+    protected FeatureProvider internalGetFeatureProviderByReference(
+        FeatureReferenceProviderServices reference) throws DataException {
+        return (FeatureProvider) oids.get(reference.getOID());
+    }
+
+    public ResourceProvider getResource() {
+        return memoryResource;
+    }
+
+    public boolean supportsAppendMode() {
+        return true;
+    }
+
+    public void append(FeatureProvider featureProvider) throws DataException {
+        FeatureProvider newFeatureProvider = featureProvider.getCopy();
+        if (data.isEmpty()) {
+            try {
+                envelope =
+                    (Envelope) newFeatureProvider.getDefaultEnvelope().clone();
+            } catch (CloneNotSupportedException e) {
+                envelope = newFeatureProvider.getDefaultEnvelope();
+            }
+        } else {
+            envelope.add(newFeatureProvider.getDefaultEnvelope());
+        }
+
+        newFeatureProvider.setNew(false);
+        data.add(newFeatureProvider);
+        oids.put(newFeatureProvider.getOID(), newFeatureProvider);
+        logger.debug("Envelope after adding feature: ", envelope.toString());
+    }
+
+    public void beginAppend() throws DataException {
+        // Nothing to do
+    }
+
+    public void endAppend() throws DataException {
+        // Nothing to do
+    }
+
+    /**
+     * Visitor to create new data objects from finish edition operation
+     * 
+     * @author jmvivo ( jmvivo at disid dot com)
+     * 
+     */
+    private class EditionVisitor implements Visitor {
+
+        private List data;
+        private Map oids;
+        private Envelope envelope;
+        private FeatureStoreProviderServices services;
+
+        /**
+         * @param size
+         *            to use to initialize data structures
+         * @throws CreateEnvelopeException
+         */
+        public EditionVisitor(long size) {
+            data = new ArrayList((int) size);
+            oids = new Hashtable((int) size);
+            envelope = null;
+            services = MemoryStoreProvider.this.getStoreServices();
+        }
+
+        public void visit(Object obj) throws VisitCanceledException,
+            BaseException {
+            Feature feature = (Feature) obj;
+            FeatureProvider featureProvider =
+                services.getFeatureProviderFromFeature(feature);
+            featureProvider.setNew(false);
+            data.add(featureProvider);
+            oids.put(featureProvider.getOID(), featureProvider);
+            if (envelope == null) {
+                try {
+                    envelope = (Envelope) feature.getDefaultEnvelope().clone();
+                } catch (CloneNotSupportedException e) {
+                    envelope = feature.getDefaultEnvelope();
+                }
+            } else {
+                envelope.add(feature.getDefaultEnvelope());
+            }
+            Envelope aux = feature.getDefaultEnvelope();
+            if (aux != null) { //There are geometries
+            	if (envelope == null) {
+            		try {
+            			envelope = (Envelope) aux.clone();
+            		} catch (CloneNotSupportedException e) {
+            			envelope = feature.getDefaultEnvelope();
+            		}
+            	} else {
+            		envelope.add(feature.getDefaultEnvelope());
+            	}
+            }
+        }
+
+        public List getData() {
+            return data;
+        }
+
+        public Map getOids() {
+            return oids;
+        }
+
+        public Envelope getEnvelope() {
+            return envelope;
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreParameters.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.dal.store.memory;
+
+import org.gvsig.fmap.dal.OpenDataStoreParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MemoryStoreParameters extends AbstractDataParameters implements
+OpenDataStoreParameters{
+	  
+	private static final String PARAMETERS_DEFINITION_NAME = "MemoryStoreParameters";
+
+	private static final String NAME_PARAMETER_NAME = "name";
+	private static final String NAME_PARAMETER_DESCRIPTION = "Memory data name";
+	public static final String ORDER_PARAMETER_NAME = "autoOrderAttributeName";
+	private static final String ORDER_PARAMETER_DESCRIPTION = "Atribute name to order by, by default";
+
+	private DelegatedDynObject parameters;
+
+	public MemoryStoreParameters() {
+		this(MemoryStoreProvider.NAME);
+	}
+
+	public MemoryStoreParameters(String name) {
+		super();
+		initialize(name);
+	}
+
+	protected void initialize(String name) {
+		this.parameters = (DelegatedDynObject) ToolsLocator.getDynObjectManager()
+			.createDynObject(
+					ToolsLocator.getPersistenceManager().getDefinition(PARAMETERS_DEFINITION_NAME)
+		);
+		setDynValue(NAME_PARAMETER_NAME, name);
+	}
+
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return parameters;
+	}
+	
+	   protected static void registerParametersDefinition() {
+	    	PersistenceManager manager = ToolsLocator.getPersistenceManager();
+	    	if( manager.getDefinition(PARAMETERS_DEFINITION_NAME) == null ) {
+				DynStruct parametersDefinition = manager.addDefinition(
+						MemoryStoreParameters.class, 
+						PARAMETERS_DEFINITION_NAME,
+						(String)null,
+						null, 
+						null
+				);
+				parametersDefinition.addDynFieldString(NAME_PARAMETER_NAME)
+					.setDescription(NAME_PARAMETER_DESCRIPTION)
+					.setMandatory(true);
+				parametersDefinition.addDynFieldString(ORDER_PARAMETER_NAME)
+					.setDescription(ORDER_PARAMETER_DESCRIPTION);
+				
+	    	}
+	    }
+	
+	public String getDataStoreName() {
+		return MemoryStoreProvider.NAME;
+	}
+
+	public String getDescription() {
+		return MemoryStoreProvider.DESCRIPTION;		
+	}
+
+	public boolean isValid() {
+		return true;
+	}
+
+	public String getName() {
+		return (String) parameters.getDynValue(NAME_PARAMETER_NAME);
+	}
+
+	public String getOrderByAttributeName() {
+		return (String) parameters.getDynValue(ORDER_PARAMETER_NAME);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreLibrary.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+ 
+package org.gvsig.fmap.dal.store.memory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class MemoryStoreLibrary extends AbstractLibrary{
+
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+    }
+
+	public void doInitialize()  {
+		
+	}
+
+	public void doPostInitialize()  {
+		List exs = new ArrayList();
+		
+		MemoryStoreParameters.registerParametersDefinition();
+		try {
+			MemoryStoreProvider.registerMetadataDefinition();
+		} catch (MetadataException e) {
+			exs.add(e);
+		}
+		
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+		.getDataManager();
+        
+		if (!dataman.getStoreProviders().contains(MemoryStoreProvider.NAME)) {
+			dataman.registerStoreProvider(MemoryStoreProvider.NAME,
+					MemoryStoreProvider.class, MemoryStoreParameters.class);
+		}
+
+		if( exs.size()>0 ) {
+			throw new LibraryException(this.getClass(), exs);
+		}
+	}
+}
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStoreNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStoreNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStoreNotification.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.raster.impl;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.tools.undo.command.Command;
+
+public class DefaultCoverageStoreNotification implements DataStoreNotification {
+
+	public DefaultCoverageStoreNotification(
+			DefaultCoverageStore defaultCoverageStore, String notification,
+			Command command) {
+		// TODO Auto-generated constructor stub
+	}
+
+	public DefaultCoverageStoreNotification(
+			DefaultCoverageStore defaultCoverageStore, String notification) {
+		// TODO Auto-generated constructor stub
+	}
+
+	public DataStore getSource() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getType() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStoreNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStore.java	(revision 42196)
@@ -0,0 +1,507 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.raster.impl;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStoreNotification;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.raster.CoverageSelection;
+import org.gvsig.fmap.dal.raster.CoverageStore;
+import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.CoverageStoreProviderServices;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.RelativeInterval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.undo.command.Command;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class DefaultCoverageStore extends AbstractDisposable implements
+		CoverageStore, CoverageStoreProviderServices, DataStoreInitializer {
+
+//	final static private Logger logger = LoggerFactory
+//			.getLogger(DefaultFeatureStore.class);
+
+	private DataStoreParameters parameters = null;
+	private CoverageSelection selection;
+
+//	private long versionOfUpdate = 0;
+
+	private DefaultDataManager dataManager = null;
+
+	private CoverageStoreProvider provider = null;
+
+	private DelegatedDynObject metadata;
+
+	private DelegateWeakReferencingObservable delegateObservable = new DelegateWeakReferencingObservable(
+			this);
+
+	public DefaultCoverageStore() {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.impl.DataStoreImplementation#intializePhase1(org.gvsig
+	 * .fmap.dal.impl.DefaultDataManager,
+	 * org.gvsig.fmap.dal.DataStoreParameters)
+	 */
+	public void intializePhase1(DataManager dataManager,
+			DataStoreParameters parameters) throws InitializeException {
+		DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
+
+		this.metadata = (DelegatedDynObject) dynManager
+				.createDynObject( 
+						MetadataLocator.getMetadataManager().getDefinition(DataStore.SPATIAL_METADATA_DEFINITION_NAME)
+				);
+		this.dataManager = (DefaultDataManager)dataManager;
+		this.parameters = parameters;
+
+	}
+
+
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.impl.DataStoreImplementation#intializePhase2(org.gvsig
+	 * .fmap.dal.spi.DataStoreProvider)
+	 */
+	public void intializePhase2(DataStoreProvider provider)
+			throws InitializeException {
+
+		this.provider = (CoverageStoreProvider) provider;
+		this.delegate(provider);
+
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#createSelection()
+	 */
+	public DataSet createSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getChildren()
+	 */
+	public Iterator getChildren() {
+		return this.provider.getChilds();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getDataSet()
+	 */
+	public DataSet getDataSet() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getDataSet(org.gvsig.fmap.dal.DataQuery)
+	 */
+	public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void accept(Visitor visitor) throws BaseException {
+		// TODO Auto-generated method stub
+	}
+
+	public void accept(Visitor visitor, DataQuery dataQuery)
+			throws BaseException {
+		// TODO Auto-generated method stub
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getDataSet(org.gvsig.tools.observer.Observer)
+	 */
+	public void getDataSet(Observer observer) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getDataSet(org.gvsig.fmap.dal.DataQuery, org.gvsig.tools.observer.Observer)
+	 */
+	public void getDataSet(DataQuery dataQuery, Observer observer)
+			throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getExplorer()
+	 */
+	public DataServerExplorer getExplorer() throws DataException,
+			ValidateDataParametersException {
+		return provider.getExplorer();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getParameters()
+	 */
+	public DataStoreParameters getParameters() {
+		return this.parameters;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#getSelection()
+	 */
+	public DataSet getSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#refresh()
+	 */
+	public void refresh() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.DataStore#setSelection(org.gvsig.fmap.dal.DataSet)
+	 */
+	public void setSelection(DataSet selection) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.observer.ComplexObservable#beginComplexNotification()
+	 */
+	public void beginComplexNotification() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.observer.ComplexObservable#disableNotifications()
+	 */
+	public void disableNotifications() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.observer.ComplexObservable#enableNotifications()
+	 */
+	public void enableNotifications() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.observer.ComplexObservable#endComplexNotification()
+	 */
+	public void endComplexNotification() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.observer.Observable#addObserver(org.gvsig.tools.observer.Observer)
+	 */
+	public void addObserver(Observer o) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.observer.Observable#deleteObserver(org.gvsig.tools.observer.Observer)
+	 */
+	public void deleteObserver(Observer o) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.observer.Observable#deleteObservers()
+	 */
+	public void deleteObservers() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#getState()
+	 */
+	public PersistentState getState() throws PersistenceException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#loadState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void saveToState(PersistentState state) throws PersistenceException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#setState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		// TODO Auto-generated method stub
+
+	}
+
+	//
+	// ====================================================================
+	// Metadata related methods
+	//
+
+	public Object getMetadataID() {
+		return this.provider.getSourceId();
+	}
+
+	public void delegate(DynObject dynObject) {
+		this.metadata.delegate(dynObject);
+	}
+
+	public DynClass getDynClass() {
+		return this.metadata.getDynClass();
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		return this.metadata.getDynValue(name);
+	}
+
+	public boolean hasDynValue(String name) {
+		return this.metadata.hasDynValue(name);
+	}
+
+	public void implement(DynClass dynClass) {
+		this.metadata.implement(dynClass);
+	}
+
+	public Object invokeDynMethod(String name, DynObject context)
+			throws DynMethodException {
+		return this.metadata.invokeDynMethod(this, name, context);
+	}
+
+	public Object invokeDynMethod(int code, DynObject context)
+			throws DynMethodException {
+		return this.metadata.invokeDynMethod(this, code, context);
+	}
+
+	public void setDynValue(String name, Object value)
+			throws DynFieldNotFoundException {
+		this.metadata.setDynValue(name, value);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.metadata.Metadata#getMetadataChildren()
+	 */
+	public Set getMetadataChildren() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.metadata.Metadata#getMetadataName()
+	 */
+	public String getMetadataName() {
+		return this.provider.getProviderName();
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.raster.spi.CoverageStoreProviderServices#createDefaultCoverageSelection()
+	 */
+	public CoverageSelection createDefaultCoverageSelection()
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.raster.spi.CoverageStoreProviderServices#getManager()
+	 */
+	public DataManager getManager() {
+		return this.dataManager;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.raster.spi.CoverageStoreProviderServices#getProvider()
+	 */
+	public CoverageStoreProvider getProvider() {
+		return this.provider;
+	}
+
+	public void notifyChange(String notification) {
+		delegateObservable
+				.notifyObservers(new DefaultCoverageStoreNotification(
+				this, notification));
+
+	}
+
+
+	public void notifyChange(String notification, Command command) {
+		delegateObservable
+				.notifyObservers(new DefaultCoverageStoreNotification(
+				this, notification, command));
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices#notifyChange
+	 * (java.lang.String, org.gvsig.fmap.dal.resource.Resource)
+	 */
+	public void notifyChange(String notification, Resource resource) {
+		delegateObservable.notifyObservers(new DefaultFeatureStoreNotification(
+				this, FeatureStoreNotification.RESOURCE_CHANGED));
+	}
+
+	public void open() throws OpenException {
+		// TODO: Se puede hacer un open estando en edicion ?
+		this.notifyChange(DataStoreNotification.BEFORE_OPEN);
+		this.provider.open();
+		this.notifyChange(DataStoreNotification.AFTER_OPEN);
+	}
+
+	public void close() throws CloseException {
+		// TODO: Se puede hacer un close estando en edicion ?
+		this.notifyChange(DataStoreNotification.BEFORE_CLOSE);
+		this.provider.close();
+		this.notifyChange(DataStoreNotification.AFTER_CLOSE);
+	}
+
+	protected void doDispose() throws BaseException {
+		this.notifyChange(DataStoreNotification.BEFORE_DISPOSE);
+		this.provider.dispose();
+		if (this.selection != null) {
+			this.selection.dispose();
+			this.selection = null;
+		}
+
+		this.parameters = null;
+		this.notifyChange(DataStoreNotification.AFTER_DISPOSE);
+		this.delegateObservable.deleteObservers();
+		this.delegateObservable = null;
+	}
+
+	public boolean allowWrite() {
+		return this.provider.allowWrite();
+	}
+
+	public DataQuery createQuery() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataStore getStore() {
+		return this;
+	}
+
+	public CoverageStore getCoverageStore() {
+		return this;
+	}
+
+	public void clear() {
+		if (metadata != null) {
+			metadata.clear();
+		}
+	}
+
+	public String getProviderName() {
+		return this.provider.getProviderName();
+	}
+	
+	public String getName() {
+		return this.provider.getName();
+	}
+
+	public String getFullName() {
+		return this.provider.getFullName();
+	}
+
+    public Interval getInterval() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public Collection getTimes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection getTimes(Interval interval) {
+        // TODO Auto-generated method stub
+        return null;
+    }   
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultCoverageStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/DefaultCoverageStoreFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/DefaultCoverageStoreFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/DefaultCoverageStoreFactory.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.raster;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreFactory;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.raster.impl.DefaultCoverageStore;
+
+public class DefaultCoverageStoreFactory implements DataStoreFactory {
+
+    public void setParameters(DataParameters parameters) {
+        // Do Nothing
+        
+    }
+
+    public DataStore createStore() throws InitializeException {
+        return new DefaultCoverageStore();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/DefaultCoverageStoreFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerPool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerPool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerPool.java	(revision 42196)
@@ -0,0 +1,124 @@
+package org.gvsig.fmap.dal.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class DefaultDataServerExplorerPool implements DataServerExplorerPool {
+
+    
+    private static final String PERSISTENCE_DEFINITION_NAME = "DataServerExplorerPool";
+
+    private List pool;
+
+    public DefaultDataServerExplorerPool() {
+        this.pool = new ArrayList();
+    }
+
+    public boolean contains(String name) {
+        DataServerExplorerPoolEntry entry = this.get(name);
+        return entry!=null;
+    }
+    
+    public boolean contains(DataServerExplorerPoolEntry entry) {
+        return contains(entry.getName());
+    }
+    
+    public boolean isEmpty() {
+        return this.pool.isEmpty();
+    }
+    
+    public void add(String name, DataServerExplorerParameters explorer) {
+        this.add(name, null, explorer);
+    }
+
+    public void add(String name, String description, DataServerExplorerParameters explorer) {
+        DefaultDataServerExplorerPoolEntry newexplorer = new DefaultDataServerExplorerPoolEntry(name, description, explorer);
+        DataServerExplorerPoolEntry existent = this.get(name);
+        if( existent!=null ) {
+            newexplorer.copyTo(existent);
+        } else {
+            this.pool.add(newexplorer);
+        }
+    }
+
+    public void remove(DataServerExplorerPoolEntry entry) {
+        this.remove(entry.getName());
+    }
+
+    public void remove(int explorerIndex) {
+        this.pool.remove(explorerIndex);
+    }
+
+    public void remove(String name) {
+        if( StringUtils.isBlank(name) ) {
+            return;
+        }
+        for( int i=0; i<this.pool.size(); i++ ) {
+            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) this.pool.get(i);
+            if( name.equalsIgnoreCase(entry.getName()) ) {
+                this.remove(i);
+            }
+        }
+    }
+    
+    public int size() {
+        return this.pool.size();
+    }
+
+    public DataServerExplorerPoolEntry get(int index) {
+        return (DataServerExplorerPoolEntry) this.pool.get(index);
+    }
+
+    public DataServerExplorerPoolEntry get(String name) {
+        if( StringUtils.isBlank(name) ) {
+            return null;
+        }
+        for( int i=0; i<this.pool.size(); i++ ) {
+            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) this.pool.get(i);
+            if( name.equalsIgnoreCase(entry.getName()) ) {
+                return entry;
+            }
+        }
+        return null;
+    }
+
+    public Iterator iterator() {
+        return this.pool.iterator();
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("pool", pool);
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        List l = state.getList("pool");
+        this.pool = new ArrayList();
+        this.pool.addAll(l);
+    }
+
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if ( manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null ) {
+            DynStruct definition
+                    = manager.addDefinition(DefaultDataServerExplorerPool.class,
+                            PERSISTENCE_DEFINITION_NAME, PERSISTENCE_DEFINITION_NAME
+                            + " Persistent definition", null, null);
+
+            definition.addDynFieldList("pool")
+                    .setClassOfItems(DefaultDataServerExplorerPoolEntry.class)
+                    .setMandatory(true)
+                    .setPersistent(true);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/coerce
===================================================================
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerPoolEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerPoolEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerPoolEntry.java	(revision 42196)
@@ -0,0 +1,94 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.gvsig.fmap.dal.impl;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * @author usuario
+ */
+public class DefaultDataServerExplorerPoolEntry implements DataServerExplorerPoolEntry {
+
+    private static final String PERSISTENCE_DEFINITION_NAME = "DataServerExplorerPoolEntry";
+
+    protected String name;
+    protected String description;
+    protected DataServerExplorerParameters explorer;
+
+    public DefaultDataServerExplorerPoolEntry() {
+        // Required by Persistent 
+    }
+    
+    public DefaultDataServerExplorerPoolEntry(String name, String description, DataServerExplorerParameters explorer) {
+        this.name = name;
+        this.description = description;
+        this.explorer = explorer;
+
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void copyTo(DataServerExplorerPoolEntry target) {
+        DefaultDataServerExplorerPoolEntry other = (DefaultDataServerExplorerPoolEntry)target;
+        other.name = this.name;
+        other.description = this.description;
+        other.explorer = this.explorer;                 
+    }
+    
+    public DataServerExplorerParameters getExplorerParameters() {
+        return this.explorer;
+    }
+
+    public String getDescription() {
+        return this.description;
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("name", this.name);
+        state.set("description", this.description);
+        state.set("explorer", this.explorer);
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.description = state.getString("description");
+        this.name = state.getString("name");
+        this.explorer = (DataServerExplorerParameters) state.get("explorer");
+    }
+
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if ( manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null ) {
+            DynStruct definition
+                    = manager.addDefinition(DefaultDataServerExplorerPoolEntry.class,
+                            PERSISTENCE_DEFINITION_NAME, PERSISTENCE_DEFINITION_NAME
+                            + " Persistent definition", null, null);
+
+            definition.addDynFieldString("name")
+                    .setMandatory(true)
+                    .setPersistent(true);
+            
+            definition.addDynFieldString("description")
+                    .setMandatory(false)
+                    .setPersistent(true);
+            
+            definition.addDynFieldObject("explorer")
+                    .setClassOfValue(DataServerExplorerParameters.class)
+                    .setMandatory(true)
+                    .setPersistent(true);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerProviderServices.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.impl;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+
+public class DefaultDataServerExplorerProviderServices implements
+		DataServerExplorerProviderServices {
+
+	public EditableFeatureType createNewFeatureType() {
+		return new DefaultEditableFeatureType();
+	}
+
+	public Resource createResource(String name, Object[] params)
+			throws InitializeException {
+		ResourceManagerProviderServices manager = (ResourceManagerProviderServices) DALLocator
+				.getResourceManager();
+		ResourceProvider resource = manager.createAddResource(name, params);
+		return resource;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataServerExplorerProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java	(revision 42196)
@@ -0,0 +1,943 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.impl;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreFactory;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.OpenErrorHandler;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureIndex;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl;
+import org.gvsig.fmap.dal.feature.spi.DataStoreProviderToFeatureStoreProviderFactoryWrapper;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProvider;
+import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProviderFactory;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
+import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
+import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProvider;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.memory.MemoryStoreParameters;
+import org.gvsig.fmap.dal.store.memory.MemoryStoreProvider;
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+import org.gvsig.tools.identitymanagement.UnauthorizedException;
+import org.gvsig.tools.operations.OperationManager;
+
+public class DefaultDataManager implements DataManager,
+    DataManagerProviderServices {
+
+    final static private String DATA_MANAGER_STORE = "Data.manager.stores";
+    final static private String DATA_MANAGER_STORE_DESCRIPTION =
+        "DAL stores providers";
+
+    final static private String DATA_MANAGER_STORE_PARAMS =
+        "Data.manager.stores.params";
+    final static private String DATA_MANAGER_STORE_PARAMS_DESCRIPTION =
+        "DAL stores providers parameters";
+
+    final static private String DATA_MANAGER_EXPLORER =
+        "Data.manager.explorers";
+    final static private String DATA_MANAGER_EXPLORER_DESCRIPTION =
+        "DAL explorers providers";
+
+    final static private String DATA_MANAGER_EXPLORER_PARAMS =
+        "Data.manager.explorers.params";
+    final static private String DATA_MANAGER_EXPLORER_PARAMS_DESCRIPTION =
+        "DAL explorer providers parameters";
+
+    final static private String DATA_MANAGER_INDEX = "Data.manager.indexes";
+    final static private String DATA_MANAGER_INDEX_DESCRIPTION =
+        "DAL index providers";
+
+    final static private String DATA_MANAGER_CACHE = "Data.manager.caches";
+    final static private String DATA_MANAGER_CACHE_DESCRIPTION =
+        "DAL cache providers";
+
+    final static private String DATA_MANAGER_EXPRESION_EVALUATOR =
+        "Data.manager.expresion.evaluator";
+    final static private String DATA_MANAGER_EXPRESION_EVALUATOR_DEFAULT =
+        "default";
+    final static private String DATA_MANAGER_EXPRESION_EVALUATOR_DESCRIPTION =
+        "DAL expresion evaluators.";
+
+    final static private String DATA_MANAGER_STORE_FACTORY =
+        "Data.manager.stores.factory";
+    final static private String DATA_MANAGER_STORE_FACTORY_DESCRIPTION =
+        "DAL stores factories";
+
+    final static private String DATA_MANAGER_STORE_PROVIDER_FACTORY =
+        "Data.manager.providers.factory";
+    final static private String DATA_MANAGER_STORE_PROVIDER_FACTORY_DESCRIPTION =
+        "DAL store provider factories";
+    
+    final static private String DATA_MANAGER_FEATURE_ATTTRIBUTE_GETTER = 
+        "Data.manager.feature.attribute.getter";
+    final static private String DATA_MANAGER_FEATURE_ATTTRIBUTE_GETTER_DESCRIPTION = 
+        "DAL feature attribute getters";
+
+    /** This map contains the name of the default provider for each data type */
+    private Map defaultDataIndexProviders;
+
+    private OpenErrorHandler openErrorHandler;
+
+    private List dataTypes;
+    
+    private DataServerExplorerPool dataServerExplorerPool = null;
+    
+
+    public DefaultDataManager() {
+        /*
+         * Create te extensions point in te registry.
+         */
+        ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_STORE,
+            DATA_MANAGER_STORE_DESCRIPTION);
+
+        ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_STORE_PARAMS,
+            DATA_MANAGER_STORE_PARAMS_DESCRIPTION);
+
+        ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_EXPLORER,
+            DATA_MANAGER_EXPLORER_DESCRIPTION);
+
+        ToolsLocator.getExtensionPointManager().add(
+            DATA_MANAGER_EXPLORER_PARAMS,
+            DATA_MANAGER_EXPLORER_PARAMS_DESCRIPTION);
+
+        ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_INDEX,
+            DATA_MANAGER_INDEX_DESCRIPTION);
+
+        ToolsLocator.getExtensionPointManager().add(
+            DATA_MANAGER_EXPRESION_EVALUATOR,
+            DATA_MANAGER_EXPRESION_EVALUATOR_DESCRIPTION);
+
+        ToolsLocator.getExtensionPointManager().add(
+            DATA_MANAGER_STORE_PROVIDER_FACTORY,
+            DATA_MANAGER_STORE_PROVIDER_FACTORY_DESCRIPTION);
+
+        initializeIndexes();
+    }
+
+    /**
+     * 
+     * @return ResourceManager
+     */
+
+    public ResourceManager getResourceManager() {
+        return DALLocator.getResourceManager();
+    }
+
+    public OperationManager getOperationManager() {
+        return ToolsLocator.getOperationManager();
+    }
+
+    public String getTemporaryDirectory() {
+        // FIXME Define a better tempdir solution
+        String tmp = System.getProperty("TMP");
+        if (tmp == null) {
+            tmp = System.getProperty("TEMP");
+        }
+        if (tmp == null) {
+            File tmp_file = new File(System.getProperty("HOME"), "_daltmp_");
+            int i = 1;
+            while (!tmp_file.exists() || !tmp_file.isDirectory()) {
+                tmp_file = new File(tmp_file.getAbsolutePath() + i);
+                i++;
+            }
+            if (!tmp_file.exists()) {
+                tmp_file.mkdir();
+            }
+            tmp = tmp_file.getAbsolutePath();
+        }
+        return tmp;
+    }
+
+    /*
+     * ====================================================================
+     * 
+     * Store related services
+     */
+    public void registerStoreProvider(String name, Class storeProviderClass,
+        Class parametersClass) {
+        if (name == null || storeProviderClass == null
+            || parametersClass == null) {
+            // FIXME Exception
+            throw new IllegalArgumentException("Any parameters can be null");
+        }
+
+        if (!DataStoreParameters.class.isAssignableFrom(parametersClass)) {
+            // FIXME Exception
+            throw new IllegalArgumentException(parametersClass.getName()
+                + " must implement org.gvsig.fmap.dal.DataStoreParameters");
+        }
+
+        if (CoverageStoreProvider.class.isAssignableFrom(storeProviderClass)) {
+            ToolsLocator.getExtensionPointManager()
+                .add(DATA_MANAGER_STORE, DATA_MANAGER_STORE_DESCRIPTION)
+                .append(name, null, storeProviderClass);
+
+            ToolsLocator
+                .getExtensionPointManager()
+                .add(DATA_MANAGER_STORE_PARAMS,
+                    DATA_MANAGER_STORE_PARAMS_DESCRIPTION)
+                .append(name, null, parametersClass);
+            return;
+        }
+
+        if (FeatureStoreProvider.class.isAssignableFrom(storeProviderClass)) {
+            // Envuelve al proveedor en una factoria por defecto.
+            this.registerStoreProviderFactory(new DataStoreProviderToFeatureStoreProviderFactoryWrapper(
+                name, "", storeProviderClass, parametersClass));
+            return;
+        }
+
+        throw new IllegalArgumentException("Not supported implemtation: name="
+            + name + " provider class=" + storeProviderClass.getName());
+
+    }
+
+    public void registerStoreProviderFactory(DataStoreProviderFactory factory) {
+        ExtensionPoint factories =
+            ToolsLocator.getExtensionPointManager().add(
+                DATA_MANAGER_STORE_PROVIDER_FACTORY,
+                DATA_MANAGER_STORE_PROVIDER_FACTORY_DESCRIPTION);
+        factories.append(factory.getName(), factory.getDescription(), factory);
+
+    }
+
+    public void registerStoreFactory(String name, Class storeProviderClass) {
+        if (name == null || storeProviderClass == null) {
+            // FIXME Exception
+            throw new IllegalArgumentException("Any parameters can be null");
+        }
+
+        if (!(DataStoreFactory.class.isAssignableFrom(storeProviderClass))) {
+            // FIXME Exception
+            throw new IllegalArgumentException(
+                "Not supported implemtation: name=" + name + " provider class="
+                    + storeProviderClass.getName());
+        }
+
+        ToolsLocator
+            .getExtensionPointManager()
+            .add(DATA_MANAGER_STORE_FACTORY,
+                DATA_MANAGER_STORE_FACTORY_DESCRIPTION)
+            .append(name, null, storeProviderClass);
+    }
+
+    public DataStoreParameters createStoreParameters(String name)
+        throws InitializeException, ProviderNotRegisteredException {
+        try {
+
+            // Si hay una factoria para ese proveedor se los pedimos a la
+            // factoria
+            DataStoreProviderFactory providerFactory =
+                (DataStoreProviderFactory) ToolsLocator
+                    .getExtensionPointManager()
+                    .get(DATA_MANAGER_STORE_PROVIDER_FACTORY).create(name);
+            if (providerFactory != null) {
+                return (DataStoreParameters) providerFactory.createParameters();
+            }
+
+            // Si no hay factoria lo hacemos como se hacia antes por mantener
+            // compatibilidad.
+            DataStoreParameters params =
+                (DataStoreParameters) ToolsLocator.getExtensionPointManager()
+                    .get(DATA_MANAGER_STORE_PARAMS).create(name);
+            if (params == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            return params;
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        } catch (SecurityException e) {
+            throw new InitializeException(e);
+        } catch (IllegalArgumentException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    private DataStore localOpenStore(String provider,
+        DataStoreParameters parameters) throws InitializeException,
+        ProviderNotRegisteredException, ValidateDataParametersException {
+        
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        if( ! identityManager.getCurrentIdentity().isAuthorized(READ_STORE_AUTHORIZATION, parameters, provider) ) {
+            throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, provider);
+        }
+        
+        String name = provider; // parameters.getDataStoreName();
+
+        parameters.validate();
+
+        DataStore store;
+        try {
+            DataStoreProviderFactory providerFactory;
+            providerFactory =
+                (DataStoreProviderFactory) ToolsLocator
+                    .getExtensionPointManager()
+                    .get(DATA_MANAGER_STORE_PROVIDER_FACTORY).create(name);
+            if (providerFactory != null) {
+                if (FeatureStoreProviderFactory.class
+                    .isAssignableFrom(providerFactory.getClass())) {
+                    store = new DefaultFeatureStore();
+                    this.intializeDataStore(store, parameters);
+                    return store;
+                }
+            }
+        } catch (InstantiationException e1) {
+            // ignore
+        } catch (IllegalAccessException e1) {
+            // ignore
+        }
+
+        Extension storeProviderExtension =
+            ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_STORE)
+                .get(name);
+
+        if (storeProviderExtension == null) {
+            throw new ProviderNotRegisteredException(name);
+        }
+
+        Class providerClass = storeProviderExtension.getExtension();
+        if (providerClass == null) {
+            throw new ProviderNotRegisteredException(name);
+        }
+
+        if (CoverageStoreProvider.class.isAssignableFrom(providerClass)) {
+            ExtensionPoint.Extension point =
+                ToolsLocator.getExtensionPointManager()
+                    .get(DATA_MANAGER_STORE_FACTORY).get(name);
+            DataStoreFactory factory = null;
+            try {
+                factory = (DataStoreFactory) point.create();
+            } catch (InstantiationException e) {
+                throw new InitializeException(e);
+            } catch (IllegalAccessException e) {
+                throw new InitializeException(e);
+            }
+            factory.setParameters(parameters);
+            store = factory.createStore();
+        } else
+            if (FeatureStoreProvider.class.isAssignableFrom(providerClass)) {
+
+                store = new DefaultFeatureStore();
+
+            } else {
+                // FIXME Exception
+                throw new InitializeException(name, new RuntimeException(
+                    "Not supported implemtation: name=" + name
+                        + " provider class=" + providerClass.getName()));
+            }
+
+        this.intializeDataStore(store, parameters);
+
+        return store;
+    }
+
+    public DataStore openStore(String provider, DataStoreParameters parameters)
+        throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException {
+
+        return localOpenStore(provider, parameters);
+    }
+
+    /**
+     * @deprecated see openStore
+     */
+    public DataStore createStore(DataStoreParameters parameters)
+        throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException {
+        return openStore(parameters.getDataStoreName(), parameters);
+    }
+
+    public List getStoreProviders() {
+        ExtensionPointManager epmanager =
+            ToolsLocator.getExtensionPointManager();
+        List names1 = epmanager.get(DATA_MANAGER_STORE).getNames();
+        List names2 =
+            epmanager.get(DATA_MANAGER_STORE_PROVIDER_FACTORY).getNames();
+        List names3 = new ArrayList();
+        names3.addAll(names1);
+        names3.addAll(names2);
+        return names3;
+    }
+
+    public DataStoreProviderFactory getStoreProviderFactory(String name) {
+        try {
+            return (DataStoreProviderFactory) ToolsLocator
+                .getExtensionPointManager()
+                .get(DATA_MANAGER_STORE_PROVIDER_FACTORY).create(name);
+        } catch (InstantiationException e) {
+            return null;
+        } catch (IllegalAccessException e) {
+            return null;
+        }
+    }
+
+    public List getStoreProviders(String name) {
+        return getStoreProviders(); // FIXME: need filter from the name of
+        // the explorer
+    }
+
+    public NewDataStoreParameters createNewStoreParameters(String explorer,
+        String provider) throws InitializeException,
+        ProviderNotRegisteredException {
+
+        DataServerExplorerParameters parameters;
+        DataServerExplorer server;
+        try {
+            parameters = this.createServerExplorerParameters(explorer);
+            server =
+                this.openServerExplorerWithoutValidate(explorer, parameters);
+            return server.getAddParameters(provider);
+        } catch (ValidateDataParametersException e) {
+            throw new InitializeException(e);
+        } catch (DataException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public void newStore(String explorer, String provider,
+        NewDataStoreParameters parameters, boolean overwrite)
+        throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException {
+        
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        if( ! identityManager.getCurrentIdentity().isAuthorized(CREATE_STORE_AUTHORIZATION, parameters, provider) ) {
+            throw new UnauthorizedException(CREATE_STORE_AUTHORIZATION, parameters, provider);
+        }
+        parameters.validate();
+
+        DataServerExplorerParameters explorerParameters;
+        DataServerExplorer server;
+        explorerParameters = this.createServerExplorerParameters(explorer);
+        server =
+            this.openServerExplorerWithoutValidate(explorer, explorerParameters);
+        try {
+            server.add(provider, parameters, overwrite);
+        } catch (DataException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    /*
+     * ====================================================================
+     * 
+     * Explorer related services
+     */
+    public void registerExplorerProvider(String name, Class explorerClass,
+        Class parametersClass) {
+
+        if (name == null || explorerClass == null || parametersClass == null) {
+            // FIXME Exception
+            throw new IllegalArgumentException("Any parameters can be null");
+        }
+
+        if (!DataServerExplorerParameters.class
+            .isAssignableFrom(parametersClass)) {
+            // FIXME Exception
+            throw new IllegalArgumentException(
+                parametersClass.getName()
+                    + " must implement org.gvsig.fmap.dal.DataServerExplorerParameters");
+        }
+
+        if (!DataServerExplorer.class.isAssignableFrom(explorerClass)) {
+            // FIXME Exception
+            throw new IllegalArgumentException(explorerClass.getName()
+                + " must implement org.gvsig.fmap.dal.DataServerExplorer");
+        }
+
+        ToolsLocator.getExtensionPointManager()
+            .add(DATA_MANAGER_EXPLORER, DATA_MANAGER_EXPLORER_DESCRIPTION)
+            .append(name, null, explorerClass);
+
+        ToolsLocator
+            .getExtensionPointManager()
+            .add(DATA_MANAGER_EXPLORER_PARAMS,
+                DATA_MANAGER_EXPLORER_PARAMS_DESCRIPTION)
+            .append(name, null, parametersClass);
+    }
+
+    public DataServerExplorerParameters createServerExplorerParameters(
+        String name) throws InitializeException, ProviderNotRegisteredException {
+        try {
+            DataServerExplorerParameters params =
+                (DataServerExplorerParameters) ToolsLocator
+                    .getExtensionPointManager()
+                    .get(DATA_MANAGER_EXPLORER_PARAMS).create(name);
+            if (params == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            return params;
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        } catch (SecurityException e) {
+            throw new InitializeException(e);
+        } catch (IllegalArgumentException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public DataServerExplorer openServerExplorer(String explorer,
+        DataServerExplorerParameters parameters) throws InitializeException,
+        ProviderNotRegisteredException, ValidateDataParametersException {
+
+        if (parameters != null) {
+            parameters.validate();
+        }
+        return this.openServerExplorerWithoutValidate(explorer, parameters);
+    }
+
+    private DataServerExplorer openServerExplorerWithoutValidate(
+        String explorerName, DataServerExplorerParameters parameters)
+        throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException {
+
+        String name = explorerName; // parameters.getExplorerName();
+
+        try {
+            DataServerExplorerProvider server =
+                (DataServerExplorerProvider) ToolsLocator
+                    .getExtensionPointManager()
+                    .get(DATA_MANAGER_EXPLORER)
+                    .create(
+                        name,
+                        new Object[] { parameters,
+                            new DefaultDataServerExplorerProviderServices() });
+            if (server == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            return server;
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        } catch (SecurityException e) {
+            throw new InitializeException(e);
+        } catch (IllegalArgumentException e) {
+            throw new InitializeException(e);
+        } catch (NoSuchMethodException e) {
+            throw new InitializeException(e);
+        } catch (InvocationTargetException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    /**
+     * @deprecated see openServerExplorer
+     */
+    public DataServerExplorer createServerExplorer(
+        DataServerExplorerParameters parameters) throws InitializeException,
+        ProviderNotRegisteredException, ValidateDataParametersException {
+        return openServerExplorer(parameters.getExplorerName(), parameters);
+    }
+
+    public List getExplorerProviders() {
+        return ToolsLocator.getExtensionPointManager()
+            .get(DATA_MANAGER_EXPLORER).getNames();
+    }
+
+    /*
+     * ====================================================================
+     * 
+     * Expresion evaluation related services
+     */
+    public Evaluator createExpresion(String expresion)
+        throws InitializeException {
+        try {
+            return (Evaluator) ToolsLocator
+                .getExtensionPointManager()
+                .get(DATA_MANAGER_EXPRESION_EVALUATOR)
+                .create(DATA_MANAGER_EXPRESION_EVALUATOR_DEFAULT,
+                    new Object[] { expresion });
+        } catch (SecurityException e) {
+            throw new InitializeException(e);
+        } catch (IllegalArgumentException e) {
+            throw new InitializeException(e);
+        } catch (NoSuchMethodException e) {
+            throw new InitializeException(e);
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        } catch (InvocationTargetException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public void registerDefaultEvaluator(Class evaluatorClass) {
+        if (!Evaluator.class.isAssignableFrom(evaluatorClass)) {
+            throw new ClassCastException();
+        }
+        ToolsLocator
+            .getExtensionPointManager()
+            .add(DATA_MANAGER_EXPRESION_EVALUATOR,
+                DATA_MANAGER_EXPRESION_EVALUATOR_DESCRIPTION)
+            .append(DATA_MANAGER_EXPRESION_EVALUATOR_DEFAULT,
+                "Default expresion evaluator for use in DAL", evaluatorClass);
+    }
+
+    /*
+     * ====================================================================
+     * 
+     * Index related services
+     */
+
+    public List getFeatureIndexProviders() {
+        return ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_INDEX)
+            .getNames();
+    }
+
+    public void setDefaultFeatureIndexProviderName(int dataType, String name) {
+        defaultDataIndexProviders.put(new Integer(dataType), name);
+    }
+
+    public String getDefaultFeatureIndexProviderName(int dataType) {
+        return (String) defaultDataIndexProviders.get(new Integer(dataType));
+    }
+
+    public FeatureIndexProviderServices createFeatureIndexProvider(String name,
+        FeatureStore store, FeatureType type, String indexName,
+        FeatureAttributeDescriptor attr) throws InitializeException,
+        ProviderNotRegisteredException {
+
+        if (name == null) {
+            name = getDefaultFeatureIndexProviderName(attr.getType());
+        }
+
+        if (name == null) {
+            throw new InitializeException(
+                "There not any index provider registered.", null);
+        }
+
+        try {
+            FeatureIndexProvider provider =
+                (FeatureIndexProvider) ToolsLocator.getExtensionPointManager()
+                    .get(DATA_MANAGER_INDEX).create(name);
+            if (provider == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            FeatureIndexProviderServices services =
+                new DefaultFeatureIndex((FeatureStoreProviderServices) store,
+                    type, provider, attr.getName(), indexName);
+            services.initialize();
+            return services;
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        } catch (SecurityException e) {
+            throw new InitializeException(e);
+        } catch (IllegalArgumentException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public void registerFeatureIndexProvider(String name, String description,
+        Class clazz, int dataType) {
+        ToolsLocator.getExtensionPointManager()
+            .add(DATA_MANAGER_INDEX, DATA_MANAGER_INDEX_DESCRIPTION)
+            .append(name, null, clazz);
+
+        if (getDefaultFeatureIndexProviderName(dataType) == null) {
+            setDefaultFeatureIndexProviderName(dataType, name);
+        }
+    }
+
+    private void initializeIndexes() {
+        this.defaultDataIndexProviders = new HashMap();
+    }
+
+    public void intializeDataStore(DataStore store,
+        DataStoreParameters parameters) throws InitializeException,
+        ProviderNotRegisteredException {
+
+        ((DataStoreInitializer) store).intializePhase1(this, parameters);
+        DataStoreProvider provider =
+            this.createProvider((DataStoreProviderServices) store, parameters);
+        ((DataStoreInitializer) store).intializePhase2(provider);
+
+    }
+
+    public DataStoreProvider createProvider(
+        DataStoreProviderServices providerServices,
+        DataStoreParameters parameters) throws InitializeException,
+        ProviderNotRegisteredException {
+        String name = parameters.getDataStoreName();
+        DataStoreProvider provider = null;
+        boolean retry = true;
+        while (retry) {
+            try {
+                DataStoreProviderFactory providerFactory =
+                    (DataStoreProviderFactory) ToolsLocator
+                        .getExtensionPointManager()
+                        .get(DATA_MANAGER_STORE_PROVIDER_FACTORY).create(name);
+                if (providerFactory != null) {
+                    provider =
+                        (DataStoreProvider) providerFactory.createProvider(
+                            parameters, providerServices);
+                } else {
+                    provider =
+                        (DataStoreProvider) ToolsLocator
+                            .getExtensionPointManager()
+                            .get(DATA_MANAGER_STORE)
+                            .create(name,
+                                new Object[] { parameters, providerServices });
+                }
+                retry = false;
+            } catch (Exception e) {
+                if (openErrorHandler != null) {
+                    retry = openErrorHandler.canRetryOpen(e, parameters);
+                } else {
+                    retry = false;
+                }
+                if (!retry) {
+                    throw new InitializeException(
+                        parameters.getDataStoreName(), e);
+                }
+            }
+        }
+        if (provider == null) {
+            throw new ProviderNotRegisteredException(name);
+        }
+        return provider;
+    }
+
+    public void registerFeatureCacheProvider(
+        FeatureCacheProviderFactory providerFactory) {
+        ToolsLocator.getExtensionPointManager()
+            .add(DATA_MANAGER_CACHE, DATA_MANAGER_CACHE_DESCRIPTION)
+            .append(providerFactory.getName(), "", providerFactory);
+    }
+
+    public FeatureCacheProvider createFeatureCacheProvider(String name,
+        DynObject parameters) throws DataException {
+        if (name == null) {
+            throw new InitializeException(
+                "It is necessary to provide a cache name", null);
+        }
+        if (parameters == null) {
+            throw new InitializeException(
+                "It is necessary to provide parameters to create the explorer",
+                null);
+        }
+        FeatureCacheProviderFactory featureCacheProviderFactory;
+        try {
+            featureCacheProviderFactory =
+                (FeatureCacheProviderFactory) ToolsLocator
+                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
+                    .create(name);
+            if (featureCacheProviderFactory == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            return featureCacheProviderFactory.createCacheProvider(parameters);
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public List getFeatureCacheProviders() {
+        ExtensionPoint extensionPoint =
+            ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_CACHE);
+        if (extensionPoint != null) {
+            return ToolsLocator.getExtensionPointManager()
+                .get(DATA_MANAGER_CACHE).getNames();
+        } else {
+            return new ArrayList();
+        }
+    }
+
+    public DynObject createCacheParameters(String name)
+        throws InitializeException, ProviderNotRegisteredException {
+        if (name == null) {
+            throw new InitializeException(
+                "It is necessary to provide a cache name", null);
+        }
+        FeatureCacheProviderFactory featureCacheProviderFactory;
+        try {
+            featureCacheProviderFactory =
+                (FeatureCacheProviderFactory) ToolsLocator
+                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
+                    .create(name);
+            if (featureCacheProviderFactory == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            return featureCacheProviderFactory.createParameters();
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public DataStoreParameters createMemoryStoreParameters(
+        String autoOrderAttributeName) throws InitializeException {
+
+        DataStoreParameters parameters;
+        try {
+            parameters = createStoreParameters(MemoryStoreProvider.NAME);
+            if (autoOrderAttributeName != null) {
+                parameters.setDynValue(
+                    MemoryStoreParameters.ORDER_PARAMETER_NAME,
+                    autoOrderAttributeName);
+            }
+            return parameters;
+        } catch (ProviderNotRegisteredException e) {
+            throw new InitializeException("MemoryStoreProvider", e);
+        }
+    }
+
+    public FeatureStore createMemoryStore(String autoOrderAttributeName)
+        throws InitializeException {
+
+        DataStoreParameters parameters =
+            createMemoryStoreParameters(autoOrderAttributeName);
+        try {
+            return (FeatureStore) createStore(parameters);
+        } catch (ValidateDataParametersException e) {
+            throw new InitializeException("MemoryStoreProvider", e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new InitializeException("MemoryStoreProvider", e);
+        }
+    }
+
+    public FeaturePagingHelper createFeaturePagingHelper(
+        FeatureStore featureStore, int pageSize) throws BaseException {
+        return new FeaturePagingHelperImpl(featureStore, pageSize);
+    }
+
+    public FeaturePagingHelper createFeaturePagingHelper(
+        FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
+        throws BaseException {
+        return new FeaturePagingHelperImpl(featureStore, featureQuery, pageSize);
+    }
+
+    public void setOpenErrorHandler(OpenErrorHandler handler) {
+        openErrorHandler = handler;
+
+    }
+
+    public EditableFeatureType createFeatureType() {
+        return new DefaultEditableFeatureType();
+    }
+
+    public List getDataTypes() {
+        if (dataTypes == null) {
+            DataTypesManager manager = ToolsLocator.getDataTypesManager();
+            dataTypes = new ArrayList();
+            dataTypes.add(manager.get(DataTypes.STRING));
+            dataTypes.add(manager.get(DataTypes.BOOLEAN));
+            dataTypes.add(manager.get(DataTypes.INT));
+            dataTypes.add(manager.get(DataTypes.DOUBLE));
+            dataTypes.add(manager.get(DataTypes.DATE));
+            dataTypes.add(manager.get(DataTypes.GEOMETRY));
+        }
+        return dataTypes;
+    }
+    
+    public void registerFeatureAttributeGetter(String name, Class clazz) {
+        if (name == null || clazz == null) {           
+            throw new IllegalArgumentException("Any parameters can be null");
+        }
+        if(!(FeatureAttributeGetter.class.isAssignableFrom(clazz))) {            
+            throw new IllegalArgumentException(
+                "Not supported implemtation: name=" + name
+                + " class=" + clazz.getName());
+        }
+    }
+    
+    public FeatureAttributeGetter createFeatureAttributeGetter(String name) throws InitializeException {
+        if (name == null) {           
+            throw new IllegalArgumentException("The parameter can not be null");
+        }
+
+        try{
+            return (FeatureAttributeGetter) ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_FEATURE_ATTTRIBUTE_GETTER).create(name);
+        } catch (InstantiationException e) {
+            throw new InitializeException("FeatureAttributeGetter", e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException("FeatureAttributeGetter", e);
+        }
+    }
+
+    public DataServerExplorerPool getDataServerExplorerPool() {
+        if( this.dataServerExplorerPool==null )  {
+            this.dataServerExplorerPool = new DefaultDataServerExplorerPool();
+        }
+        return this.dataServerExplorerPool;
+    }
+    
+    public void setDataServerExplorerPool(DataServerExplorerPool pool) {
+        this.dataServerExplorerPool = pool;
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DALDefaultImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DALDefaultImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DALDefaultImplLibrary.java	(revision 42196)
@@ -0,0 +1,211 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQuery;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.impl.JSIRSpatialIndexProvider;
+import org.gvsig.fmap.dal.feature.impl.MemorySpatialIndexProvider;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.DayToAbsoluteInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.DayToRelativeInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.HourToAbsoluteInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.HourToRelativeInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.MilliToAbsoluteInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.MilliToRelativeInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.MinuteToAbsoluteInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.MinuteToRelativeInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.MonthToAbsoluteInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.SecondToAbsoluteInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.SecondToRelativeInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.impl.attributegetter.YearToAbsoluteInstantFeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.spi.memory.MemoryResource;
+import org.gvsig.fmap.dal.feature.spi.memory.MemoryResourceParameters;
+import org.gvsig.fmap.dal.resource.impl.DefaultResourceManager;
+import org.gvsig.fmap.dal.resource.spi.MultiResource;
+import org.gvsig.fmap.dal.resource.spi.MultiResourceParameters;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.i18n.Messages;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * Initialize the implementation of DAL.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DALDefaultImplLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsImplementationOf(DALLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        DALLocator.registerDefaultDataManager(DefaultDataManager.class);
+        DALLocator.registerResourceManager(DefaultResourceManager.class);
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        List exs = new ArrayList();
+
+        Messages.addResourceFamily("org.gvsig.fmap.dal.i18n.text",
+            DALDefaultImplLibrary.class.getClassLoader(),
+            DALDefaultImplLibrary.class.getClass().getName());
+
+        try {
+            registerBaseNewProvidersParametersDefinition();
+        } catch (XmlPullParserException e) {
+            exs.add(e);
+        } catch (IOException e) {
+            exs.add(e);
+        }
+
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        identityManager.registerAction(DataManager.CREATE_STORE_AUTHORIZATION);
+        identityManager.registerAction(DataManager.READ_STORE_AUTHORIZATION);
+        identityManager.registerAction(DataManager.WRITE_STORE_AUTHORIZATION);
+        
+        
+        DefaultFeatureQuery.registerPersistent();
+        DefaultFeatureReference.registerPersistent();
+        DefaultFeatureStoreTransforms.registerPersistent();
+        AbstractFeatureStoreTransform.registerPersistent();
+        DefaultFeatureReferenceSelection.registerPersistent();
+        DefaultFeatureSelection.registerPersistent();
+        // DefaultCoverageStore.registerPersistent();
+
+        DefaultFeatureStore.registerPersistenceDefinition();
+        DefaultDataServerExplorerPool.registerPersistenceDefinition();
+        DefaultDataServerExplorerPoolEntry.registerPersistenceDefinition();
+        try {
+            DefaultFeatureStore.registerMetadataDefinition();
+        } catch (MetadataException e) {
+            exs.add(e);
+        }
+
+        // DefaultFeatureAttributeDescriptor.registerPersistent();
+
+        //Register the FeatureAttributeTransform
+        DataManager dataManager = DALLocator.getDataManager();
+        if (dataManager == null) {
+            throw new ReferenceNotRegisteredException(
+                    DALLocator.DATA_MANAGER_NAME, DALLocator.getInstance());
+        }
+        dataManager.registerFeatureAttributeGetter("milliToRelativeInstant", MilliToRelativeInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("milliToAbsoluteInstant", MilliToAbsoluteInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("secondToRelativeInstant", SecondToRelativeInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("secondToAbsoluteInstant",SecondToAbsoluteInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("minuteToRelativeInstant",MinuteToRelativeInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("minuteToAbsoluteInstant", MinuteToAbsoluteInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("hourToRelativeInstant", HourToRelativeInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("hourToAbsoluteInstant", HourToAbsoluteInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("dayToAbsoluteInstant", DayToAbsoluteInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("dayToRelativeInstant", DayToRelativeInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("monthToAbsoluteInstant", MonthToAbsoluteInstantFeatureAttributeGetter.class);
+        dataManager.registerFeatureAttributeGetter("yearToAbsoluteInstant", YearToAbsoluteInstantFeatureAttributeGetter.class);
+        
+        // Register a default spatial index based in the default memory spatial index of geom library
+    	if (!dataManager.getFeatureIndexProviders().contains(MemorySpatialIndexProvider.NAME)) {
+    		((DataManagerProviderServices)dataManager).registerFeatureIndexProvider(MemorySpatialIndexProvider.NAME, "Default Spatial index",
+    				MemorySpatialIndexProvider.class, DataTypes.GEOMETRY);
+    		dataManager.setDefaultFeatureIndexProviderName(DataTypes.GEOMETRY, MemorySpatialIndexProvider.NAME);
+    	}
+    	if (!dataManager.getFeatureIndexProviders().contains(JSIRSpatialIndexProvider.NAME)) {
+    		((DataManagerProviderServices)dataManager).registerFeatureIndexProvider(JSIRSpatialIndexProvider.NAME, "JSIR Spatial index",
+    				JSIRSpatialIndexProvider.class, DataTypes.GEOMETRY);
+    	}
+    	
+        ResourceManagerProviderServices resourceManager =
+                (ResourceManagerProviderServices) DALLocator.getResourceManager();
+        if (resourceManager == null) {
+            throw new ReferenceNotRegisteredException(
+                DALLocator.RESOURCE_MANAGER_NAME, DALLocator.getInstance());
+        }
+
+        if (!resourceManager.getResourceProviders().contains(
+            MultiResource.TYPE_NAME)) {
+            resourceManager.register(MultiResource.TYPE_NAME,
+                MultiResource.DESCRIPTION, MultiResource.class,
+                MultiResourceParameters.class);
+        }
+
+        if (!resourceManager.getResourceProviders().contains(
+            MemoryResource.NAME)) {
+            resourceManager.register(MemoryResource.NAME,
+                MemoryResource.DESCRIPTION, MemoryResource.class,
+                MemoryResourceParameters.class);
+        }
+
+        if (exs.size() > 0) {
+            throw new LibraryException(this.getClass(), exs);
+        }
+    }
+
+    private void registerBaseNewProvidersParametersDefinition()
+        throws XmlPullParserException, IOException {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (manager
+            .get(
+                "DAL",
+                DataStoreProviderServices.BASE_NEWPARAMETERS_PROVIDER_DEFINITION_NAME) == null) {
+            Map definitions =
+                manager
+                    .importDynClassDefinitions(
+                        DataStoreProviderServices.class
+                            .getResourceAsStream("ProviderParametersDefinition.xml"),
+                        DataStoreProviderServices.class.getClassLoader());
+            manager
+                .add((DynClass) definitions
+                    .get(DataStoreProviderServices.BASE_NEWPARAMETERS_PROVIDER_DEFINITION_FULLNAME));
+            manager
+                .add((DynClass) definitions
+                    .get(DataStoreProviderServices.BASE_PARAMETERS_PROVIDER_DEFINITION_FULLNAME));
+        }
+    }
+
+}       

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DALDefaultImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreImplementation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreImplementation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreImplementation.java	(revision 42196)
@@ -0,0 +1,23 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreImplementation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceManager.java	(revision 42196)
@@ -0,0 +1,387 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.CopyParametersException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.DisposeResorceManagerException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotClosedOnDisposeManagerException;
+import org.gvsig.fmap.dal.resource.exception.ResourceNotRegisteredException;
+import org.gvsig.fmap.dal.resource.spi.AbstractResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+
+
+public class DefaultResourceManager implements ResourceManagerProviderServices {
+
+	final static private String DATA_MANAGER_RESOURCE = "Data.manager.resources";
+	final static private String DATA_MANAGER_RESOURCE_PARAMS = "Data.manager.resources.params";
+
+	// FIXME: rellenar las cadenas
+	private static final String DATA_MANAGER_RESOURCE_DESCRIPTION = "DAL Resources types";
+	private static final String DATA_MANAGER_RESOURCE_PARAMS_DESCRIPTION = "DAL Resources types Parameters";
+
+	private Map resources = new HashMap();
+
+	private DelegateWeakReferencingObservable delegateObservable = new DelegateWeakReferencingObservable(this);
+
+	private Timer timer = null;
+	private Logger logger;
+
+	private long mlsecondsToBeIdle = 0;
+
+	public DefaultResourceManager() {
+		/*
+		 * Create te extensions point in te registry.
+		 */
+		ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_RESOURCE,
+				DATA_MANAGER_RESOURCE_DESCRIPTION);
+
+		ToolsLocator.getExtensionPointManager().add(
+				DATA_MANAGER_RESOURCE_PARAMS,
+				DATA_MANAGER_RESOURCE_PARAMS_DESCRIPTION);
+	}
+
+	public Logger getLogger() {
+		if (this.logger == null) {
+			this.logger = LoggerFactory.getLogger(this.getClass());
+		}
+		return this.logger;
+	}
+
+	public synchronized void remove(Resource resource)
+			throws DataException {
+		remove(resource.getName());
+	}
+
+	public synchronized void remove(String name)
+			throws DataException {
+		ResourceProvider res = (ResourceProvider) this.resources.get(name);
+		if (res == null){
+			throw new IllegalArgumentException("Resource not register:" + name);
+		}
+		if (res.getConsumersCount() < 1) {
+			this.resources.remove(name);
+			res.notifyDispose();
+		}
+		res = null;
+	}
+
+    public synchronized Resource getResource(String key) {
+		return (Resource)this.resources.get(key);
+	}
+
+    public synchronized Iterator iterator() {
+		return this.resources.values().iterator();
+	}
+
+	public void addObserver(Observer o) {
+		// TODO a�adir el observador a los recursos que ya existiesen
+		this.delegateObservable.addObserver(o);
+	}
+
+	public void deleteObserver(Observer o) {
+		this.delegateObservable.deleteObserver(o);
+	}
+
+	public void deleteObservers() {
+		this.delegateObservable.deleteObservers();
+	}
+
+	public synchronized void collectResources() throws
+			DataException {
+		ResourceProvider res;
+		Iterator iter = this.resources.entrySet().iterator();
+		while (iter.hasNext()) {
+			Entry entry = (Entry) iter.next();
+			res = (ResourceProvider) entry.getValue();
+			if (res.getConsumersCount() < 1) {
+				res.closeRequest();
+				res.notifyDispose();
+				iter.remove();
+				continue;
+			}
+			if (mlsecondsToBeIdle > 0
+					&& System.currentTimeMillis()
+							- res.getLastTimeUsed() > mlsecondsToBeIdle) {
+
+			}
+
+		}
+	}
+
+    private synchronized AbstractResource findResource(ResourceParameters params) {
+		AbstractResource res;
+		Iterator iter = this.resources.values().iterator();
+		while (iter.hasNext()) {
+			res = (AbstractResource) iter.next();
+			try {
+				if (res.isThis(params)) {
+					return res;
+				}
+			} catch (ResourceException e) {
+				getLogger()
+						.warn(
+								"Se ha producido un error comprobando si se puede reutilizar el recurso.",
+								e);
+			} catch (CopyParametersException e) {
+				getLogger()
+						.warn(
+								"Se ha producido un error comprobando si se puede reutilizar el recurso.",
+								e);
+			}
+		}
+		return null;
+	}
+
+    private synchronized AbstractResource addResource(AbstractResource resource)
+			throws AccessResourceException {
+		resources.put(resource.getName(), resource);
+		resource.addObservers(this.delegateObservable);
+		return resource;
+	}
+
+	public void startResourceCollector(long milis, Observer observer) {
+		if (this.timer == null){
+			this.timer = new Timer();
+		} else{
+			this.timer.cancel();
+		}
+		// TODO observer
+		this.timer.scheduleAtFixedRate(new TimerTask() {
+
+
+			public void run() {
+				try {
+					DALLocator.getResourceManager().collectResources();
+				} catch (DataException e) {
+					// TODO Notificar con el observer
+				}
+			}
+
+		}, milis, milis);
+	}
+
+	public void stopResourceCollector() {
+		if (this.timer != null) {
+			this.timer.cancel();
+		}
+
+	}
+
+	public DataParameters createParameters(String type, Object[] args)
+			throws InitializeException {
+		try {
+			DataParameters parameters;
+			if (args == null) {
+				parameters = (DataParameters) ToolsLocator.getExtensionPointManager()
+						.get(
+						DATA_MANAGER_RESOURCE_PARAMS).create(type);
+			} else {
+
+				parameters = (DataParameters) ToolsLocator.getExtensionPointManager()
+						.get(DATA_MANAGER_RESOURCE_PARAMS).create(type, args);
+			}
+			if (parameters == null){
+				throw new ResourceNotRegisteredException(type);
+			}
+			return parameters;
+		} catch (InstantiationException e) {
+			throw new InitializeException(type, e);
+		} catch (IllegalAccessException e) {
+			throw new InitializeException(type, e);
+		} catch (SecurityException e) {
+			throw new InitializeException(type, e);
+		} catch (IllegalArgumentException e) {
+			throw new InitializeException(type, e);
+		} catch (NoSuchMethodException e) {
+			throw new InitializeException(type, e);
+		} catch (InvocationTargetException e) {
+			throw new InitializeException(type, e);
+		}
+	}
+
+	public DataParameters createParameters(String type)
+			throws InitializeException {
+		return createParameters(type, null);
+	}
+
+	public ResourceProvider createAddResource(String type, Object[] params)
+			throws InitializeException {
+		return createAddResource((ResourceParameters) createParameters(type,
+				params));
+	}
+
+	public ResourceProvider createResource(String type, Object[] params)
+			throws InitializeException {
+		return createResource((ResourceParameters) createParameters(type,
+				params));
+	}
+
+	public ResourceProvider createResource(ResourceParameters params)
+			throws InitializeException {
+		AbstractResource resource = this.findResource(params);
+		if (resource != null) {
+			return resource;
+		}
+
+		try {
+
+			resource = (AbstractResource) ToolsLocator
+					.getExtensionPointManager().get(DATA_MANAGER_RESOURCE)
+					.create(
+							params.getTypeName(), new Object[] { params }
+				);
+			if (resource == null) {
+				throw new ResourceNotRegisteredException(params.getTypeName());
+			}
+		} catch (InstantiationException e) {
+			throw new InitializeException(e);
+		} catch (IllegalAccessException e) {
+			throw new InitializeException(e);
+		} catch (SecurityException e) {
+			throw new InitializeException(e);
+		} catch (IllegalArgumentException e) {
+			throw new InitializeException(e);
+		} catch (NoSuchMethodException e) {
+			throw new InitializeException(e);
+		} catch (InvocationTargetException e) {
+			throw new InitializeException(e);
+		}
+
+		return resource;
+	}
+
+	public ResourceProvider createAddResource(ResourceParameters params)
+			throws InitializeException {
+
+		try {
+			return addResource((AbstractResource) createResource(params));
+		} catch (AccessResourceException e) {
+			throw new InitializeException(params.getTypeName(), e);
+		}
+	}
+
+	public boolean register(String type, String description,
+			Class resourceHandler, Class resourceParams) {
+
+
+		ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_RESOURCE,
+				DATA_MANAGER_RESOURCE_DESCRIPTION).append(type, description,
+						resourceHandler);
+
+		ToolsLocator.getExtensionPointManager().add(
+				DATA_MANAGER_RESOURCE_PARAMS,
+				DATA_MANAGER_RESOURCE_PARAMS_DESCRIPTION).append(type,
+				description, resourceParams);
+
+		return true;
+	}
+
+	public List getResourceProviders() {
+		return ToolsLocator.getExtensionPointManager().get(
+				DATA_MANAGER_RESOURCE).getNames();
+	}
+
+    public synchronized void closeResources() throws DataException {
+		this.collectResources();
+		Resource res;
+		Iterator iter = this.resources.values().iterator();
+		while (iter.hasNext()) {
+			res = (Resource) iter.next();
+			res.closeRequest();
+		}
+	}
+
+    public synchronized void dispose() throws DisposeResorceManagerException {
+        DisposeResorceManagerException exception = new DisposeResorceManagerException();
+
+        try {
+            this.collectResources();
+        } catch (DataException e) {
+            exception.add(e);
+        }
+        Resource res;
+        Iterator iter = this.resources.values().iterator();
+        while (iter.hasNext()) {
+            res = (Resource) iter.next();
+            try {
+                if (res.openCount() > 0) {
+                    exception.add(
+                            new ResourceNotClosedOnDisposeManagerException(
+                                    res));
+                }
+                res.closeRequest();
+                iter.remove();
+            } catch (ResourceException e) {
+                exception.add(e);
+            }
+        }
+
+        this.resources = null;
+        this.delegateObservable.deleteObservers();
+        this.delegateObservable = null;
+
+        if (!exception.isEmpty()) {
+            throw exception;
+        }
+    }
+
+	public int getTimeToBeIdle() {
+		if (mlsecondsToBeIdle == 0) {
+			return 0;
+		}
+		return (int) (mlsecondsToBeIdle / 1000);
+	}
+
+	public void setTimeToBeIdle(int seconds) {
+		if (seconds < 0) {
+			throw new IllegalArgumentException("seconds must be >= 0");
+		}
+		mlsecondsToBeIdle = seconds * 1000;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/resource/impl/DefaultResourceManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,2 @@
+filling_index=Filling index
+updating_index=Updating index
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text.properties	(revision 42196)
@@ -0,0 +1,2 @@
+filling_index=Llenando �ndice
+updating_index=Actualizando �ndice
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/org/gvsig/fmap/dal/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.impl.DALDefaultImplLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/pom.xml	(revision 42196)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal</artifactId>
+        <version>2.0.97</version>
+    </parent>  
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <scope>compile</scope>
+        </dependency>      
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf</groupId>
+            <artifactId>jsi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>gnu.trove</groupId>
+            <artifactId>trove</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>easymock</groupId>
+            <artifactId>easymock</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>easymock</groupId>
+            <artifactId>easymockclassextension</artifactId>
+        </dependency>
+
+    </dependencies>
+
+
+    <build>
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <!-- Generates a jar file only with the test classes -->
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                        <configuration>
+                            <includes>
+                                <include>**/**</include>
+                            </includes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
+    <description>This project contains the implementation of the API of the Data Access Library.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/pom.xml	(revision 42196)
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.db</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.db.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>commons-dbcp</groupId>
+        <artifactId>commons-dbcp</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    
+    <!-- Tests -->
+    
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+        <type>test-jar</type>
+        <scope>test</scope>
+    </dependency>
+    
+    <dependency>
+        <groupId>mysql</groupId>
+        <artifactId>mysql-connector-java</artifactId>
+        <scope>test</scope>
+    </dependency>
+    
+  </dependencies>
+
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>default-testCompile</id>
+            <phase>process-test-sources</phase>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <configuration>
+              <skip>true</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTestWrite.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTestWrite.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTestWrite.java	(revision 42196)
@@ -0,0 +1,221 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.BaseTestEditableFeatureStore;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+
+import com.mysql.jdbc.Driver;
+
+
+public class JDBCTestWrite extends BaseTestEditableFeatureStore {
+	private JDBCNewStoreParameters newParams;
+	private JDBCServerExplorer myExplorer;
+	private int newId = 50000;
+
+	public void fillPrimaryKeyInserFeature(EditableFeature feature) {
+		feature.set("id", newId);
+		newId++;
+	}
+
+	@Override
+	protected void doSetUp() throws Exception {
+		// Nothing to do	
+	}
+
+	public DataStoreParameters getDefaultDataStoreParameters()
+			throws DataException {
+		JDBCStoreParameters parameters = null;
+		parameters = (JDBCStoreParameters) dataManager
+				.createStoreParameters(JDBCStoreProvider.NAME);
+
+		parameters.setHost("localhost");
+		parameters.setPort(3306);
+		parameters.setUser("test");
+		parameters.setPassword("test");
+		parameters.setDBName("gis");
+		parameters.setTable("alfanum");
+		parameters.setUrl("jdbc:mysql://" + parameters.getHost() + ":"
+				+ parameters.getPort() + "/" + parameters.getDBName());
+		parameters.setJDBCDriverClassName(Driver.class.getName());
+
+		return parameters;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#hasExplorer()
+	 */
+	@Override
+	public boolean hasExplorer() {
+		// TODO Auto-generated method stub
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#usesResources()
+	 */
+	@Override
+	public boolean usesResources() {
+		// TODO Auto-generated method stub
+		return true;
+	}
+
+	/*
+	public void testImportDB() throws Exception {
+		JDBCNewStoreParameters newParasm = (JDBCNewStoreParameters) getDefaultNewDataStoreParameters();
+		JDBCServerExplorerParameters seParams = (JDBCServerExplorerParameters) dataManager
+				.createServerExplorerParameters(JDBCServerExplorer.NAME);
+
+		assertTrue(myExplorer.add(newParasm, true));
+
+		FeatureStore store = (FeatureStore) dataManager
+				.createStore(getDefaultDataStoreParameters());
+
+		FeatureStore newstore = (FeatureStore) dataManager
+				.createStore(newParasm);
+
+
+
+		newstore.edit(FeatureStore.MODE_APPEND);
+		FeatureSet set = store.getFeatureSet();
+		DisposableIterator iter = set.iterator();
+		Feature org;
+		EditableFeature trg;
+		Iterator attrIter;
+		FeatureAttributeDescriptor attr;
+		while (iter.hasNext()) {
+			org = (Feature) iter.next();
+			trg = newstore.createNewFeature(false);
+			attrIter = trg.getType().iterator();
+			while (attrIter.hasNext()) {
+				attr = (FeatureAttributeDescriptor) attrIter.next();
+				trg.set(attr.getName(), org.get(attr.getName()));
+			}
+			newstore.insert(trg);
+		}
+		newstore.finishEditing();
+
+		iter.dispose();
+		set.dispose();
+		store.dispose();
+		newstore.dispose();
+
+
+	}
+	*/
+
+	@Override
+	public NewFeatureStoreParameters getDefaultNewDataStoreParameters()
+			throws Exception {
+
+
+		JDBCStoreParameters params = (JDBCStoreParameters) getDefaultDataStoreParameters();
+
+		if (this.myExplorer == null) {
+
+			JDBCServerExplorerParameters seParameters = null;
+			seParameters = (JDBCServerExplorerParameters) dataManager
+					.createServerExplorerParameters(JDBCServerExplorer.NAME);
+
+			seParameters.setHost("localhost");
+			seParameters.setPort(3306);
+			seParameters.setUser("test");
+			seParameters.setPassword("test");
+			seParameters.setDBName("gis");
+
+			seParameters.setUrl("jdbc:mysql://" + seParameters.getHost() + ":"
+					+ seParameters.getPort() + "/" + seParameters.getDBName());
+			seParameters.setJDBCDriverClassName(Driver.class.getName());
+
+
+			myExplorer = (JDBCServerExplorer) dataManager
+					.createServerExplorer(seParameters);
+		}
+		if (this.newParams == null) {
+			FeatureStore store = (FeatureStore) dataManager.createStore(params);
+
+			newParams = (JDBCNewStoreParameters) myExplorer
+					.getAddParameters();
+
+
+//			newParams.setTable(params.getTable() + "_test");
+			FeatureType ftOrg = store.getDefaultFeatureType();
+			EditableFeatureType ftTrg = ftOrg.getEditable();
+
+//			EditableFeatureType ftTrg = (EditableFeatureType) newParams
+//					.getDefaultFeatureType();
+			newParams.setDefaultFeatureType(ftTrg);
+
+//			FeatureAttributeDescriptor org;
+//			EditableFeatureAttributeDescriptor trg;
+//			Iterator iter = ftOrg.iterator();
+//			while (iter.hasNext()) {
+//				org = (FeatureAttributeDescriptor) iter.next();
+//				trg = ftTrg.add(org.getName(), org.getDataType());
+//				trg.setAllowNull(org.allowNull());
+//				trg.setDefaultValue(org.getDefaultValue());
+//				trg.setGeometrySubType(org.getGeometrySubType());
+//				trg.setGeometryType(org.getGeometryType());
+//				trg.setIsAutomatic(org.isAutomatic());
+//				trg.setIsPrimaryKey(org.isPrimaryKey());
+//				trg.setIsReadOnly(org.isReadOnly());
+//				trg.setMaximumOccurrences(org.getMaximumOccurrences());
+//				trg.setMinimumOccurrences(org.getMinimumOccurrences());
+//				trg.setPrecision(org.getPrecision());
+//				trg.setSize(org.getSize());
+//				trg.setSRS(org.getSRS());
+//				trg.setAdditionalInfo("SQLType", org
+//						.getAdditionalInfo("SQLType"));
+//				trg.setAdditionalInfo("SQLTypeName", org
+//						.getAdditionalInfo("SQLTypeName"));
+//
+//			}
+//			ftTrg.setDefaultGeometryAttributeName(ftOrg
+//					.getDefaultGeometryAttributeName());
+//			ftTrg.setHasOID(ftOrg.hasOID());
+
+			store.dispose();
+		}
+
+		return this.newParams;
+	}
+
+	@Override
+	public boolean resourcesNotifyChanges() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTestWrite.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTest.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.BaseTestFeatureStore;
+
+import com.mysql.jdbc.Driver;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCTest extends BaseTestFeatureStore {
+
+	@Override
+	protected void doSetUp() throws Exception {
+		// Nothing to do	
+	}
+
+	public DataStoreParameters getDefaultDataStoreParameters()
+			throws DataException {
+		JDBCStoreParameters parameters = null;
+		parameters = (JDBCStoreParameters) dataManager
+				.createStoreParameters(JDBCStoreProvider.NAME);
+
+
+		parameters.setHost("localhost");
+		parameters.setPort(3306);
+		parameters.setUser("test");
+		parameters.setPassword("test");
+		parameters.setDBName("gis");
+		parameters.setTable("alfanum");
+		parameters.setUrl("jdbc:mysql://" + parameters.getHost() + ":"
+				+ parameters.getPort() + "/" + parameters.getDBName());
+		parameters.setJDBCDriverClassName(Driver.class.getName());
+
+		return parameters;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#hasExplorer()
+	 */
+	@Override
+	public boolean hasExplorer() {
+		// TODO Auto-generated method stub
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#usesResources()
+	 */
+	@Override
+	public boolean usesResources() {
+		// TODO Auto-generated method stub
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc/JDBCTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCMetadata.xml	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="JDBC" namespace="Metadata">
+      <extends>
+      	<class name="SpatialProvider" namespace="Metadata"/>
+      </extends>
+      <description>Metadata of a JDBC store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCMetadata.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCParameters.xml	(revision 42196)
@@ -0,0 +1,122 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="JDBCResourceParameters">
+      <description></description>
+      <extends>
+        <class>DBResourceParameters</class>
+      </extends>
+      <fields>
+        <field name="JDBCDriverClass" type="string" mandatory="true" group="Advanced">
+          <description>JDBC Driver class</description>
+        </field>
+        <field name="URL" type="string" mandatory="true" group="Connection">
+          <description>JDBC url connection</description>
+        </field>
+        <field name="Catalog" type="string" mandatory="false" group="Basic">
+          <description>Database catalog</description>
+        </field>
+        <field name="Schema" type="string" mandatory="false" group="Basic">
+          <description>Database schema</description>
+        </field>
+      </fields>
+    </class>
+
+    <class name="JDBCStoreParameters">
+      <extends>
+        <class>JDBCResourceParameters</class>
+        <class>DBStoreParameters</class>
+      </extends>
+      <tags>
+          <value name="defaultGroup" value="Basic"/>
+      </tags>
+      <fields>
+      </fields>
+    </class>
+
+    <class name="JDBCNewStoreParameters">
+      <description></description>
+      <extends>
+        <class>JDBCResourceParameters</class>
+        <class>DBNewStoreParameters</class>
+      </extends>
+      <tags>
+          <value name="defaultGroup" value="Basic"/>
+      </tags>
+      <fields>
+        <field name="selectRole" label="Roles for select" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have select privilegies</description>
+        </field>
+        <field name="insertRole" label="Roles for insert" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have insert privilegies</description>
+        </field>
+        <field name="updateRole" label="Roles for update" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have update privilegies</description>
+        </field>
+        <field name="deleteRole" label="Roles for delete" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have delete privilegies</description>
+        </field>
+        <field name="truncateRole" label="Roles for truncate" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have truncate privilegies</description>
+        </field>
+        <field name="referenceRole" label="Roles for reference" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have reference privilegies</description>
+        </field>
+        <field name="triggerRole" label="Roles for trigger" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have trigger privilegies</description>
+        </field>
+        <field name="allRole" label="Roles for all" type="String" mandatory="false" defaultValue="" group="Permissions">
+          <description>Roles asigned to have all privilegies</description>
+        </field>
+        <field name="postCreatingStatement" label="Post-creating statement" type="String" mandatory="false" defaultValue="" group="Advanced">
+          <description>Roles asigned to have all privilegies</description>
+        </field>
+
+      </fields>
+    </class>
+    
+    <class name="JDBCServerExplorerParameters">
+      <extends>
+        <class>JDBCResourceParameters</class>
+        <class>DBServerExplorerParameters</class>
+      </extends>
+      <tags>
+          <value name="defaultGroup" value="Basic"/>
+      </tags>
+      <fields>
+        <field name="ShowInformationDBTables" type="boolean" 
+            mandatory="false" defaultValue="false" group="Basic">
+          <description>Show information tables</description>
+        </field>
+      </fields>
+    </class>
+
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/org/gvsig/fmap/dal/store/jdbc/JDBCParameters.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.jdbc.JDBCLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelper.java	(revision 42196)
@@ -0,0 +1,1288 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.logging.Level;
+import org.apache.commons.lang3.StringUtils;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.UnsupportedDataTypeException;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCTransactionCommitException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCTransactionRollbackException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+/*
+import org.gvsig.fmap.geom.operation.fromwkb.FromWKB;
+import org.gvsig.fmap.geom.operation.fromwkb.FromWKBGeometryOperationContext;
+import org.gvsig.fmap.geom.operation.towkb.ToWKB;
+import org.gvsig.fmap.geom.operation.towkb.ToWKBOperationContext;
+*/
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCHelper extends AbstractDisposable implements ResourceConsumer {
+
+	private static Logger logger = LoggerFactory.getLogger(JDBCHelper.class);
+
+	protected JDBCHelperUser user;
+	protected boolean isOpen;
+	protected String name;
+	protected String defaultSchema;
+	protected JDBCConnectionParameters params;
+	private JDBCResource resource;
+
+	protected GeometryManager geomManager = null;
+
+	private Boolean allowAutomaticValues = null;
+	private Boolean supportsUnions = null;
+
+	private String identifierQuoteString;
+
+	protected JDBCHelper(JDBCHelperUser consumer,
+			JDBCConnectionParameters params) throws InitializeException {
+		this.geomManager = GeometryLocator.getGeometryManager();
+		this.user = consumer;
+		this.name = user.getProviderName();
+		this.params = params;
+		initializeResource();
+
+	}
+
+        public static ResultSet executeQuery(Statement st, String sql) throws SQLException {
+            logger.debug("execute SQL: "+sql);
+            ResultSet rs = st.executeQuery(sql);
+            return rs;
+        }
+        
+        public static void execute(Statement st, String sql) throws SQLException {
+            logger.debug("execute SQL: "+sql);
+            st.execute(sql);
+        }
+        
+        public static ResultSet executeQuery(PreparedStatement st, String sql) throws SQLException {
+            logger.debug("execute SQL: "+sql);
+            ResultSet rs = st.executeQuery();
+            return rs;
+        }
+
+        public static void execute(PreparedStatement st, String sql) throws SQLException {
+            logger.debug("execute SQL: "+sql);
+            st.execute();
+        }
+        
+        public static int executeUpdate(PreparedStatement st) throws SQLException {
+            return st.executeUpdate();
+        }
+        
+        public void closeConnection(Connection connection) {
+            this.getResource().closeConnection(connection);
+        }
+        
+        public void execute(String sql) throws JDBCExecuteSQLException {
+            try {
+                Connection conn = this.getConnection();
+                Statement st = conn.createStatement();
+                JDBCHelper.execute(st, sql);            
+                this.closeConnection(conn);
+            } catch (Exception ex) {
+               throw new JDBCExecuteSQLException(sql, ex);
+            }
+        }
+        
+	protected void initializeResource() throws InitializeException {
+		ResourceManagerProviderServices manager = (ResourceManagerProviderServices) DALLocator
+				.getResourceManager();
+		JDBCResource resource = (JDBCResource) manager
+				.createAddResource(
+				JDBCResource.NAME, new Object[] { params.getUrl(),
+						params.getHost(), params.getPort(), params.getDBName(),
+						params.getUser(), params.getPassword(),
+						params.getJDBCDriverClassName() });
+		this.setResource(resource);
+
+	}
+
+	protected final void setResource(JDBCResource resource) {
+		this.resource = resource;
+		this.resource.addConsumer(this);
+	}
+
+	public boolean closeResourceRequested(ResourceProvider resource) {
+		return user.closeResourceRequested(resource);
+	}
+
+	public void resourceChanged(ResourceProvider resource) {
+		user.resourceChanged(resource);
+
+	}
+
+	/**
+	 * open the resource
+	 *
+	 * @return true if the resourse was open in this call
+	 * @throws OpenException
+	 */
+	public boolean open() throws OpenException {
+		if (isOpen) {
+			return false;
+		}
+		// try {
+		// begin();
+		// } catch (ResourceExecuteException e1) {
+		// throw new OpenException(name, e1);
+		// }
+		try {
+			getResource().execute(new ResourceAction() {
+				public Object run() throws Exception {
+					getResource().connect();
+					getResource().notifyOpen();
+
+					user.opendDone();
+
+					isOpen = true;
+					return null;
+				}
+                                public String toString() {
+                                    return "open";
+                                }
+			});
+			return true;
+		} catch (ResourceExecuteException e) {
+			throw new OpenException(name, e);
+			// } finally {
+			// end();
+		}
+
+	}
+
+	public JDBCResource getResource() {
+		return resource;
+	}
+
+	public void close() throws CloseException {
+		if (!isOpen) {
+			return;
+		}
+		// try {
+		// begin();
+		// } catch (ResourceExecuteException e) {
+		// throw new CloseException(name, e);
+		// }
+		try {
+			getResource().execute(new ResourceAction() {
+				public Object run() throws Exception {
+					isOpen = false;
+
+					resource.notifyClose();
+					user.closeDone();
+					return null;
+				}
+			});
+		} catch (ResourceExecuteException e) {
+			throw new CloseException(this.name, e);
+			// } finally {
+			// end();
+		}
+	}
+
+	// public void end() {
+	// resource.end();
+	// }
+	//
+	// public void begin() throws ResourceExecuteException {
+	// this.resource.begin();
+	// }
+
+	public Connection getConnection() throws AccessResourceException {
+		return resource.getJDBCConnection();
+
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+                this.close();
+		resource.removeConsumer(this);
+	}
+
+	public boolean isOpen() {
+		return isOpen;
+	}
+
+	/**
+	 * Executes an atomic action that uses an DB Connection.<br>
+	 *
+	 * This methos prepares a connection and close it at the end of execution of
+	 * action.<br>
+	 *
+	 * if <code>action</code> is an instance of {@link TransactionalAction} the
+	 * action will be execute inside of a DB transaction.
+	 *
+	 *
+	 * @param action
+	 * @throws Exception
+	 */
+	public Object doConnectionAction(final ConnectionAction action)
+			throws Exception {
+		this.open();
+//		this.begin();
+		return getResource().execute(new ResourceAction() {
+			public Object run() throws Exception {
+				Object result = null;
+				Connection conn = null;
+				boolean beginTrans = false;
+				try {
+					conn = getConnection();
+					if (action instanceof TransactionalAction) {
+						// XXX OJO esta condicion NO ES FIABLE
+						if (!conn.getAutoCommit()) {
+							if (!((TransactionalAction) action)
+									.continueTransactionAllowed()) {
+								// FIXME exception
+								throw new Exception();
+							}
+						}
+						try {
+							conn.setAutoCommit(false);
+						} catch (SQLException e) {
+							throw new JDBCSQLException(e);
+						}
+						beginTrans = true;
+					}
+
+					result = action.action(conn);
+
+					if (beginTrans) {
+						try {
+							conn.commit();
+						} catch (SQLException e) {
+							throw new JDBCTransactionCommitException(e);
+						}
+					}
+
+					return result;
+
+				} catch (Exception e) {
+
+					if (beginTrans) {
+						try {
+							conn.rollback();
+						} catch (Exception e1) {
+							throw new JDBCTransactionRollbackException(e1, e);
+						}
+					}
+					throw e;
+
+				} finally {
+                                    closeConnection(conn);
+				}
+			}
+		});
+
+	}
+
+	protected String getDefaultSchema(Connection conn) throws JDBCException {
+		return defaultSchema;
+	}
+
+	protected EditableFeatureAttributeDescriptor createAttributeFromJDBC(
+			EditableFeatureType fType, Connection conn,
+			ResultSetMetaData rsMetadata, int colIndex)
+        throws java.sql.SQLException {
+
+		EditableFeatureAttributeDescriptor column;
+		switch (rsMetadata.getColumnType(colIndex)) {
+		case java.sql.Types.INTEGER:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.INT);
+			break;
+		case java.sql.Types.BIGINT:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.LONG);
+			break;
+		case java.sql.Types.REAL:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.DOUBLE);
+			break;
+		case java.sql.Types.DOUBLE:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.DOUBLE);
+			break;
+		case java.sql.Types.CHAR:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.STRING);
+			break;
+		case java.sql.Types.VARCHAR:
+		case java.sql.Types.LONGVARCHAR:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.STRING);
+			break;
+		case java.sql.Types.FLOAT:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.DOUBLE);
+			break;
+        case java.sql.Types.NUMERIC:
+            column = fType.add(rsMetadata.getColumnName(colIndex),
+                    DataTypes.DOUBLE);
+            break;
+		case java.sql.Types.DECIMAL:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.FLOAT);
+			break;
+		case java.sql.Types.DATE:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.DATE);
+			break;
+		case java.sql.Types.TIME:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.TIME);
+			break;
+		case java.sql.Types.TIMESTAMP:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.TIMESTAMP);
+			break;
+		case java.sql.Types.BOOLEAN:
+		case java.sql.Types.BIT:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.BOOLEAN);
+			break;
+		case java.sql.Types.BLOB:
+		case java.sql.Types.BINARY:
+		case java.sql.Types.LONGVARBINARY:
+			column = fType.add(rsMetadata.getColumnName(colIndex),
+					DataTypes.BYTEARRAY);
+			break;
+
+		default:
+		    column = createAttributeFromJDBCNativeType(fType, rsMetadata, colIndex);
+			break;
+		}
+
+		return column;
+
+	}
+	
+	
+	protected EditableFeatureAttributeDescriptor createAttributeFromJDBCNativeType(
+        EditableFeatureType fType, ResultSetMetaData rsMetadata, int colIndex)
+        throws SQLException {
+        EditableFeatureAttributeDescriptor column;
+        column = fType.add(rsMetadata.getColumnName(colIndex),
+                DataTypes.OBJECT);
+        column.setAdditionalInfo("SQLType", new Integer(rsMetadata
+                .getColumnType(colIndex)));
+        column.setAdditionalInfo("SQLTypeName", rsMetadata
+                .getColumnTypeName(colIndex));
+        return column;
+    }
+	
+
+	protected EditableFeatureAttributeDescriptor getAttributeFromJDBC(
+			EditableFeatureType fType, Connection conn,
+			ResultSetMetaData rsMetadata, int colIndex) throws JDBCException {
+		EditableFeatureAttributeDescriptor column;
+		try {
+
+			column = createAttributeFromJDBC(fType, conn, rsMetadata, colIndex);
+			// column.setCaseSensitive(rsMetadata.isCaseSensitive(colIndex));
+			// column.setSqlType(rsMetadata.getColumnType(colIndex));
+			column.setAllowNull(
+					rsMetadata.isNullable(colIndex) == ResultSetMetaData.columnNullable);
+			column.setIsAutomatic(rsMetadata.isAutoIncrement(colIndex));
+			column.setIsReadOnly(rsMetadata.isReadOnly(colIndex));
+			// column.setWritable(rsMetadata.isWritable(colIndex));
+			// column.setClassName(rsMetadata.getColumnClassName(colIndex));
+			// column.setCatalogName(rsMetadata.getCatalogName(colIndex));
+			// column.setDefinitelyWritable(rsMetadata
+			// .isDefinitelyWritable(colIndex));
+			// column.setLabel(rsMetadata.getColumnLabel(colIndex));
+			// column.setSchemaName(rsMetadata.getSchemaName(colIndex));
+			// column.setTableName(rsMetadata.getTableName(colIndex));
+			// column.setCatalogName(rsMetadata.getCatalogName(colIndex));
+			// column.setSqlTypeName();
+			// column.setSearchable(rsMetadata.isSearchable(colIndex));
+			// column.setSigned(rsMetadata.isSigned(colIndex));
+			// column.setCurrency(rsMetadata.isCurrency(colIndex));
+			column.setPrecision(rsMetadata.getPrecision(colIndex));
+			column.setSize(rsMetadata.getColumnDisplaySize(colIndex));
+
+		} catch (java.sql.SQLException e) {
+			throw new JDBCSQLException(e);
+		}
+
+		return column;
+
+	}
+
+	/**
+	 * Fill <code>featureType</code> geometry attributes with SRS and ShapeType
+	 * information
+	 *
+	 * <b>Override this if provider has native eometry support</b>
+	 *
+	 * @param conn
+	 * @param rsMetadata
+	 * @param featureType
+	 * @throws ReadException
+	 */
+	protected void loadSRS_and_shapeType(Connection conn,
+			ResultSetMetaData rsMetadata, EditableFeatureType featureType,
+			String baseSchema, String baseTable) throws JDBCException {
+
+		// Nothing to do
+
+	}
+
+	public void loadFeatureType(EditableFeatureType featureType,
+			JDBCStoreParameters storeParams) throws DataException {
+		if (storeParams.getSQL() != null
+				&& storeParams.getSQL().trim().length() > 0) {
+			loadFeatureType(featureType, storeParams, storeParams.getSQL(),
+					null, null);
+		} else {
+			String sql = "Select * from " + storeParams.tableID()
+					+ " where false";
+			loadFeatureType(featureType, storeParams, sql, storeParams
+					.getSchema(), storeParams.getTable());
+		}
+	}
+
+	public void loadFeatureType(final EditableFeatureType featureType,
+			final JDBCStoreParameters storeParams, final String sql,
+			final String schema, final String table) throws DataException {
+		this.open();
+//		this.begin();
+		getResource().execute(new ResourceAction() {
+			public Object run() throws Exception {
+				Connection conn = null;
+				try {
+					conn = getConnection();
+					
+					String[] pks = storeParams.getPkFields();
+					if (pks == null || pks.length < 1) {
+						if (storeParams.getTable() != null
+								&& storeParams.getTable().trim().length() > 0) {
+							pks = getPksFrom(conn, storeParams);
+							
+						}
+					}
+					
+					loadFeatureType(conn, featureType, sql, pks, storeParams
+							.getDefaultGeometryField(), schema, table);
+					if (storeParams.getCRS()!=null && ((EditableFeatureAttributeDescriptor)featureType.getDefaultGeometryAttribute()) != null){
+						((EditableFeatureAttributeDescriptor)featureType.getDefaultGeometryAttribute()).setSRS(storeParams.getCRS());
+					}
+					
+				} finally {
+					try {
+						conn.close();
+					} catch (Exception e) {
+					}
+//			this.end();
+				}
+				return null;
+			}
+		});
+	}
+
+	protected String[] getPksFrom(Connection conn, JDBCStoreParameters params)
+		throws JDBCException {
+		try{
+			DatabaseMetaData metadata = conn.getMetaData();
+			ResultSet rsPrimaryKeys = null;
+			ResultSet rs = null;
+			String catalog = params.getCatalog();
+			String schema = params.getSchema();
+
+			try{
+				rs = metadata.getTables(catalog,
+						schema, params.getTable(), null);
+
+				if (!rs.next()) {
+					// No tables found with default values, ignoring catalog
+					rs.close();
+					catalog = null;
+					schema = null;
+					rs = metadata
+							.getTables(catalog, schema, params.getTable(), null);
+
+					if (!rs.next()) {
+						// table not found
+						return null;
+					} else if (rs.next()){
+						// More that one, cant identify
+						return null;
+					}
+
+				} else if (rs.next()) {
+					// More that one, cant identify
+					return null;
+				}
+				rsPrimaryKeys = metadata.getPrimaryKeys(catalog, schema, params
+						.getTable());
+				List pks = new ArrayList();
+				while (rsPrimaryKeys.next()){
+					pks.add(rsPrimaryKeys.getString("COLUMN_NAME"));
+				}
+				return (String[]) pks.toArray(new String[pks.size()]);
+
+
+			} finally {
+				try{if (rs != null) {
+					rs.close();
+				}} catch (SQLException ex) {logger.warn("Exception closing tables rs", ex);};
+				try{if (rsPrimaryKeys != null) {
+					rsPrimaryKeys.close();
+				}} catch (SQLException ex) {logger.warn("Exception closing pk rs", ex);};
+			}
+
+
+		} catch (SQLException e) {
+			logger.warn("Unable to get pk from DatabaseMetada", e);
+			return getPksFromInformationSchema(conn, params);
+		}
+
+	}
+
+	protected String[] getPksFromInformationSchema(Connection conn,
+			JDBCStoreParameters params)
+			throws JDBCException {
+		Statement st;
+		StringBuffer sql = new StringBuffer();
+		ResultSet rs;
+		ArrayList list = new ArrayList();
+
+		/*
+		 select column_name as primary_key
+			from information_schema.table_constraints t_cons
+				inner join information_schema.key_column_usage c on
+					c.constraint_catalog = t_cons.table_catalog and
+				    c.table_schema = t_cons.table_schema and
+				    c.table_name = t_cons.table_name and
+					c.constraint_name = t_cons.constraint_name
+				where t_cons.table_schema = <schema>
+				and t_cons.constraint_catalog = <catalog>
+ 				and t_cons.table_name = <table>
+ 				and constraint_type = 'PRIMARY KEY'
+		 */
+		/*
+		 * SELECT column_name FROM INFORMATION_SCHEMA.constraint_column_usage
+		 * left join INFORMATION_SCHEMA.table_constraints on
+		 * (INFORMATION_SCHEMA.table_constraints.constraint_name =
+		 * INFORMATION_SCHEMA.constraint_column_usage.constraint_name and
+		 * INFORMATION_SCHEMA.table_constraints.table_name =
+		 * INFORMATION_SCHEMA.constraint_column_usage.table_name and
+		 * INFORMATION_SCHEMA.table_constraints.table_schema =
+		 * INFORMATION_SCHEMA.constraint_column_usage.table_schema) WHERE
+		 * INFORMATION_SCHEMA.constraint_column_usage.table_name like
+		 * 'muni10000_peq' AND
+		 * INFORMATION_SCHEMA.constraint_column_usage.table_schema like 'public'
+		 * AND INFORMATION_SCHEMA.constraint_column_usage.table_catalog like
+		 * 'gis' AND constraint_type='PRIMARY KEY'
+		 */
+
+		sql.append("select column_name as primary_key ");
+		sql.append("from information_schema.table_constraints t_cons ");
+		sql.append("inner join information_schema.key_column_usage c on ");
+		sql.append("c.constraint_catalog = t_cons.constraint_catalog and ");
+		sql.append("c.table_schema = t_cons.table_schema and ");
+		sql.append("c.table_name = t_cons.table_name and ");
+		sql.append("c.constraint_name = t_cons.constraint_name ");
+		sql.append("WHERE t_cons.table_name like '");
+
+		sql.append(params.getTable());
+		sql.append("' ");
+		String schema = null;
+
+
+		if (params.getSchema() == null || params.getSchema() == "") {
+			schema = getDefaultSchema(conn);
+		} else {
+			schema = params.getSchema();
+		}
+		if (schema != null) {
+			sql.append(" and t_cons.table_schema like '");
+			sql.append(schema);
+			sql.append("' ");
+		}
+
+		if (params.getCatalog() != null && params.getCatalog() != "") {
+			sql
+					.append(" and t_cons.constraint_catalog like '");
+			sql.append(params.getCatalog());
+			sql.append("' ");
+		}
+
+		sql.append("' and constraint_type = 'PRIMARY KEY'");
+
+		// System.out.println(sql.toString());
+		try {
+			st = conn.createStatement();
+			try {
+				rs = JDBCHelper.executeQuery(st, sql.toString());
+			} catch (java.sql.SQLException e) {
+				throw new JDBCExecuteSQLException(sql.toString(), e);
+			}
+			while (rs.next()) {
+				list.add(rs.getString(1));
+			}
+			rs.close();
+			st.close();
+
+		} catch (java.sql.SQLException e) {
+			throw new JDBCSQLException(e);
+		}
+		if (list.size() == 0) {
+			return null;
+		}
+
+		return (String[]) list.toArray(new String[0]);
+
+	}
+
+    protected void loadFeatureType(Connection conn,
+            EditableFeatureType featureType, String sql, String[] pks,
+            String defGeomName, String schema, String table)
+            throws DataException {
+
+        Statement stAux = null;
+        ResultSet rs = null;
+        try {
+
+            stAux = conn.createStatement();
+            stAux.setFetchSize(1);
+
+            try {
+                rs = JDBCHelper.executeQuery(stAux, sql);
+            } catch (SQLException e) {
+                throw new JDBCExecuteSQLException(sql, e);
+            }
+            ResultSetMetaData rsMetadata = rs.getMetaData();
+
+            List pksList = null;
+            if (pks != null) {
+                pksList = Arrays.asList(pks);
+
+            }
+
+            int i;
+            int geometriesColumns = 0;
+            String lastGeometry = null;
+
+            EditableFeatureAttributeDescriptor attr;
+            boolean firstGeometryAttrFound = false;
+            for (i = 1; i <= rsMetadata.getColumnCount(); i++) {
+                attr = getAttributeFromJDBC(featureType, conn, rsMetadata, i);
+                if (pksList != null && pksList.contains(attr.getName())) {
+                    attr.setIsPrimaryKey(true);
+                }
+                if (attr.getType() == DataTypes.GEOMETRY) {
+                    geometriesColumns++;
+                    lastGeometry = attr.getName();
+                    // Set the default geometry attribute if it is the one
+                    // given as parameter or it is the first one, just in case.
+                    if (!firstGeometryAttrFound
+                            || lastGeometry.equals(defGeomName)) {
+                        firstGeometryAttrFound = true;
+                        featureType
+                                .setDefaultGeometryAttributeName(lastGeometry);
+                    }
+                }
+
+            }
+
+            if (geometriesColumns > 0) {
+                loadSRS_and_shapeType(conn, rsMetadata, featureType, schema,
+                        table);
+            }
+
+            if (defGeomName == null && geometriesColumns == 1) {
+                featureType.setDefaultGeometryAttributeName(lastGeometry);
+                defGeomName = lastGeometry;
+            }
+
+        } catch (java.sql.SQLException e) {
+            throw new JDBCSQLException(e); // FIXME exception
+        } finally {
+            try {
+                rs.close();
+            } catch (Exception e) {
+            }
+            try {
+                stAux.close();
+            } catch (Exception e) {
+            }
+
+        }
+
+    }
+
+	/**
+	 * Override if provider has geometry support
+	 *
+	 * @param storeParams
+	 * @param geometryAttrName
+	 * @param limit
+	 * @return
+	 * @throws DataException
+	 */
+	public Envelope getFullEnvelopeOfField(JDBCStoreParameters storeParams,
+			String geometryAttrName, Envelope limit) throws DataException {
+
+		// TODO
+		return null;
+
+	}
+
+	public Geometry getGeometry(byte[] buffer) throws BaseException {
+		if (buffer == null) {
+			return null;
+		}
+		return geomManager.createFrom(buffer);
+	}
+
+	public String escapeFieldName(String field) {
+		if (field.matches("[a-z][a-z0-9_]*")) {
+			return field;
+		}
+		String quote = getIdentifierQuoteString();
+		return quote + field + quote;
+	}
+
+	public class DalValueToJDBCException extends WriteException {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = -3608973505723097889L;
+		private final static String MESSAGE_FORMAT = "Can't convert value of attribute '%(attributeName)' to JDBC type. %(problem) (attribute type '%(attributeType)', value class '%(valueClass)').";
+		private final static String MESSAGE_KEY = "_Cant_convert_value_of_attribute_XattributeNameX_to_JDBC_type_XproblemX_attribute_type_XattributeTypeX_value_class_XvalueClassX";
+
+		public DalValueToJDBCException(FeatureAttributeDescriptor attributeDescriptor, Object object, Throwable cause) {
+                    this(attributeDescriptor, object, (String)null, cause);
+                }
+                
+		public DalValueToJDBCException(FeatureAttributeDescriptor attributeDescriptor, Object object, String problem, Throwable cause) {
+			super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+			if( attributeDescriptor != null ) {
+				setValue("attributeName",attributeDescriptor.getName());
+				setValue("attributeType",attributeDescriptor.getDataTypeName());
+			} else {
+				setValue("attributeName","unknown");
+				setValue("attributeType","unknown");
+			}
+			if( object!=null ) {
+				setValue("valueClass", object.getClass().getName());
+			} else {
+				setValue("valueClass", "null");
+			}
+                        if( problem!=null ) {
+                            setValue("problem","");
+                        } else {
+                            setValue("problem",problem);
+                        }
+		}
+
+	}
+
+    protected Geometry coerce(GeometryType type, Geometry geometry) {
+        try {
+            GeometryType geomType = geometry.getGeometryType();
+            if (geomType.isTypeOf(type)) {
+                return geometry;
+            }
+
+            if (type.isTypeOf(Geometry.TYPES.MULTISURFACE)) {
+                if (geomType.isTypeOf(Geometry.TYPES.SURFACE)) {
+                    MultiPrimitive geom2 = (MultiPrimitive) geomManager.create(type.getType(), geomType.getSubType());
+                    geom2.addPrimitive((Primitive) geometry);
+                    return geom2;
+                }
+            } else if (type.isTypeOf(Geometry.TYPES.MULTICURVE)) {
+                if (geomType.isTypeOf(Geometry.TYPES.CURVE)) {
+                    MultiPrimitive geom2 = (MultiPrimitive) geomManager.create(type.getType(), geomType.getSubType());
+                    geom2.addPrimitive((Primitive) geometry);
+                    return geom2;
+                }
+            } else if (type.isTypeOf(Geometry.TYPES.MULTIPOINT)) {
+                if (geomType.isTypeOf(Geometry.TYPES.POINT)) {
+                    MultiPrimitive geom2 = (MultiPrimitive) geomManager.create(type.getType(), geomType.getSubType());
+                    geom2.addPrimitive((Primitive) geometry);
+                    return geom2;
+                }
+            }
+        } catch (CreateGeometryException ex) {
+            // Do nothing, return the same geometry.
+            logger.debug("Can't coerce geometry '"+geometry+"' to '"+type+"'.",ex);
+        }
+        return geometry;
+    }
+        
+    public Object dalValueToJDBC(
+            FeatureAttributeDescriptor attributeDescriptor, Object value)
+            throws WriteException {
+
+        try {
+            if (value == null) {
+                return null;
+            }
+            Date jdate = null;
+            switch (attributeDescriptor.getType()) {
+                case DataTypes.DATE:
+                    jdate = (Date)value;
+                    java.sql.Date sqldate = new java.sql.Date(jdate.getTime());
+                    return sqldate;
+                    
+                case DataTypes.TIME:
+                    jdate = (Date)value;
+                    java.sql.Time sqltime = new java.sql.Time(jdate.getTime());
+                    return sqltime;
+
+                case DataTypes.GEOMETRY:
+                    IProjection srs = null;
+                    byte[] wkb = null;
+                    Geometry geom = null;
+                    try {
+                        geom = (Geometry)value;
+                        Geometry geom1 = coerce(attributeDescriptor.getGeomType(), geom);
+                        srs = attributeDescriptor.getSRS();
+                        if (srs != null) {
+                            wkb = geom1.convertToWKBForcingType(getProviderSRID(srs), attributeDescriptor.getGeomType().getType());
+                        } else {
+                            wkb = geom1.convertToWKB();
+                        }
+                    } catch (Exception e) {
+                        String problem = "";
+                        if (geom != null) {
+                            Geometry.ValidationStatus vs = geom.getValidationStatus();
+                            problem = vs.getMessage();
+                        }
+                        throw new DalValueToJDBCException(attributeDescriptor, value, problem, e);
+                    }
+                    return wkb;
+                
+                default:
+                    return value;
+            }
+            
+        } catch(DalValueToJDBCException ex) {
+            throw ex;
+        } catch (Exception e) {
+            throw new DalValueToJDBCException(attributeDescriptor, value, e);
+        }
+
+    }
+
+	public String getSqlColumnTypeDescription(FeatureAttributeDescriptor attr) {
+		switch (attr.getType()) {
+		case DataTypes.STRING:
+			if (attr.getSize() < 1 || attr.getSize() > 255) {
+				return "text";
+			} else {
+				return "varchar(" + attr.getSize() + ")";
+			}
+		case DataTypes.BOOLEAN:
+			return "bool";
+
+		case DataTypes.BYTE:
+			return "smallint";
+
+		case DataTypes.DATE:
+			return "date";
+
+		case DataTypes.TIMESTAMP:
+			return "timestamp";
+
+		case DataTypes.TIME:
+			return "time";
+
+		case DataTypes.BYTEARRAY:
+		case DataTypes.GEOMETRY:
+			return "blob";
+
+		case DataTypes.DOUBLE:
+//			if (attr.getPrecision() > 0) {
+//			    return "double precision(" + attr.getPrecision() + ')';
+//			} else {
+		    //It works with PostgreSQL and MySQL. Check with others
+			    return "double precision";
+//			}
+		case DataTypes.FLOAT:
+			return "real";
+
+		case DataTypes.INT:
+			if (attr.isAutomatic() && allowAutomaticValues()) {
+				return "serial";
+			} else {
+				return "integer";
+			}
+		case DataTypes.LONG:
+			if (attr.isAutomatic()) {
+				return "bigserial";
+			} else {
+				return "bigint";
+			}
+
+		default:
+			String typeName = (String) attr.getAdditionalInfo("SQLTypeName");
+			if (typeName != null) {
+				return typeName;
+			}
+
+			throw new UnsupportedDataTypeException(attr.getDataTypeName(), attr
+					.getType());
+		}
+	}
+
+	public int getProviderSRID(String srs) {
+		return -1;
+	}
+
+	public int getProviderSRID(IProjection srs) {
+		return -1;
+	}
+
+	public String getSqlFieldName(FeatureAttributeDescriptor attribute) {
+		return escapeFieldName(attribute.getName());
+	}
+
+	public String getSqlFieldDescription(FeatureAttributeDescriptor attr)
+			throws DataException {
+
+		/**
+		 * column_name data_type [ DEFAULT default_expr ] [ column_constraint [
+		 * ... ] ]
+		 *
+		 * where column_constraint is:
+		 *
+		 * [ CONSTRAINT constraint_name ] { NOT NULL | NULL | UNIQUE | PRIMARY
+		 * KEY | CHECK (expression) | REFERENCES reftable [ ( refcolumn ) ] [
+		 * MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON
+		 * UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY
+		 * DEFERRED | INITIALLY IMMEDIATE ]
+		 */
+
+		StringBuilder strb = new StringBuilder();
+		// name
+		strb.append(escapeFieldName(attr.getName()));
+		strb.append(" ");
+
+		// Type
+		strb.append(this.getSqlColumnTypeDescription(attr));
+		strb.append(" ");
+
+		boolean allowNull = attr.allowNull()
+				&& !(attr.isPrimaryKey() || attr.isAutomatic());
+		// Default
+		if (attr.getDefaultValue() == null) {
+			if (allowNull) {
+				strb.append("DEFAULT NULL ");
+			}
+		} else {
+			String value = getDefaltFieldValueString(attr);
+			strb.append("DEFAULT '");
+			strb.append(value);
+			strb.append("' ");
+		}
+
+		// Null
+		if (allowNull) {
+			strb.append("NULL ");
+		} else {
+			strb.append("NOT NULL ");
+		}
+
+		// Primery key
+		if (attr.isPrimaryKey()) {
+			strb.append("PRIMARY KEY ");
+		}
+		return strb.toString();
+	}
+
+	/**
+	 * @deprecated use getDefaultFieldValueString this has a type writer error.
+	 */
+	protected String getDefaltFieldValueString(FeatureAttributeDescriptor attr)
+			throws WriteException {
+		return getDefaultFieldValueString(attr);
+	}
+
+	protected String getDefaultFieldValueString(FeatureAttributeDescriptor attr)
+			throws WriteException {
+		return dalValueToJDBC(attr, attr.getDefaultValue()).toString();
+	}
+
+	public String compoundLimitAndOffset(long limit, long offset) {
+		StringBuilder sql = new StringBuilder();
+		// limit
+		if (limit > 0) {
+			sql.append(" limit ");
+			sql.append(limit);
+			sql.append(' ');
+		}
+
+		// offset
+		if (offset > 0) {
+			sql.append(" offset ");
+			sql.append(offset);
+			sql.append(' ');
+		}
+		return sql.toString();
+	}
+
+	public boolean supportOffset() {
+		return true;
+	}
+
+	public List getAdditionalSqlToCreate(NewDataStoreParameters ndsp,
+			FeatureType fType) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+
+	public String stringJoin(List listToJoin,String sep){
+		StringBuilder strb = new StringBuilder();
+		stringJoin(listToJoin,sep,strb);
+		return strb.toString();
+	}
+
+	public void stringJoin(List listToJoin, String sep, StringBuilder strb) {
+		if (listToJoin.size() < 1) {
+			return;
+		}
+		if (listToJoin.size() > 1) {
+			for (int i = 0; i < listToJoin.size() - 1; i++) {
+				strb.append(listToJoin.get(i));
+				strb.append(sep);
+			}
+		}
+		strb.append(listToJoin.get(listToJoin.size() - 1));
+	}
+
+	/**
+	 * Inform that provider has supports for geometry store and operations
+	 * natively
+	 *
+	 * @return
+	 */
+	protected boolean supportsGeometry() {
+		return false;
+	}
+
+	public boolean allowAutomaticValues() {
+		if (allowAutomaticValues == null) {
+			ConnectionAction action = new ConnectionAction(){
+
+				public Object action(Connection conn) throws DataException {
+
+					ResultSet rs;
+					try {
+						DatabaseMetaData meta = conn.getMetaData();
+						rs = meta.getTypeInfo();
+						try{
+							while (rs.next()) {
+								if (rs.getInt("DATA_TYPE") == java.sql.Types.INTEGER) {
+									if (rs.getBoolean("AUTO_INCREMENT")) {
+										return Boolean.TRUE;
+									} else {
+										return Boolean.FALSE;
+									}
+								}
+							}
+						}finally{
+							try{ rs.close();} catch (SQLException ex) {logger.error("Exception closing resulset", ex);};
+						}
+					} catch (SQLException e) {
+						throw new JDBCSQLException(e);
+					}
+					return Boolean.FALSE;
+				}
+
+			};
+
+
+
+			try {
+				allowAutomaticValues = (Boolean) doConnectionAction(action);
+			} catch (Exception e) {
+				logger.error("Exception checking for automatic integers", e);
+				allowAutomaticValues = Boolean.FALSE;
+			}
+		}
+		return allowAutomaticValues.booleanValue();
+	}
+
+	public boolean supportsUnion() {
+		if (supportsUnions == null) {
+			ConnectionAction action = new ConnectionAction() {
+
+				public Object action(Connection conn) throws DataException {
+
+					try {
+						DatabaseMetaData meta = conn.getMetaData();
+						return new Boolean(meta.supportsUnion());
+					} catch (SQLException e) {
+						throw new JDBCSQLException(e);
+					}
+				}
+
+			};
+
+			try {
+				supportsUnions = (Boolean) doConnectionAction(action);
+			} catch (Exception e) {
+				logger.error("Exception checking for unions support", e);
+				supportsUnions = Boolean.FALSE;
+			}
+		}
+		return supportsUnions.booleanValue();
+	}
+
+	protected String getIdentifierQuoteString() {
+		if (identifierQuoteString == null) {
+		ConnectionAction action = new ConnectionAction() {
+
+			public Object action(Connection conn) throws DataException {
+
+				try {
+					DatabaseMetaData meta = conn.getMetaData();
+					return meta.getIdentifierQuoteString();
+				} catch (SQLException e) {
+					throw new JDBCSQLException(e);
+				}
+			}
+
+		};
+
+		try {
+			identifierQuoteString = (String) doConnectionAction(action);
+		} catch (Exception e) {
+			logger.error("Exception checking for unions support", e);
+			identifierQuoteString = " ";
+			}
+		}
+		return identifierQuoteString;
+	}
+
+	protected boolean isReservedWord(String field) {
+		// TODO
+		return false;
+	}
+
+        protected List createGrantStatements(JDBCNewStoreParameters ndsp) {
+            return this.createGrantStatements(ndsp, ndsp.tableID());
+        }
+        
+        protected List createGrantStatements(JDBCNewStoreParameters ndsp, String table) {
+            String priviligeParamNames[] = new String[] {   
+                "SelectRole",
+                "InsertRole",
+                "UpdateRole",
+                "DeleteRole",
+                "TruncateRole",
+                "ReferenceRole",
+                "TriggerRole",
+                "AllRole"
+            };
+            String priviligeNames[] = new String[] {   
+                "SELECT",
+                "INSERT",
+                "UPDATE",
+                "DELETE",
+                "TRUNCATE",
+                "REFERENCE",
+                "TRIGGER",
+                "ALL"
+            };
+            List statements = new ArrayList();;
+            
+            for( int i=0; i<priviligeParamNames.length; i++ ) {
+                String paramName = priviligeParamNames[i];
+                String roles = StringUtils.defaultIfBlank(
+                        (String) ndsp.getDynValue(paramName), 
+                        null
+                );
+                if( roles!=null ) {
+                    statements.addAll(this.createGrantStatements(table, priviligeNames[i], roles));
+                }
+            }
+            return statements;
+        }
+
+        protected List createGrantStatements(String tableName, String privilege, String theRoles) {
+            List statements = new ArrayList();
+            String[] roles = StringUtils.split(theRoles,",");
+            for( int i=0; i<roles.length; i++) {
+                String statement = "GRANT "+ privilege + " ON TABLE " + tableName + " TO \"" + roles[i] + "\"";
+                statements.add(statement);
+            }
+            return statements;
+        } 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreParameters.java	(revision 42196)
@@ -0,0 +1,286 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.text.MessageFormat;
+
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+
+/**
+ * Parameters class for JDBC generic provider
+ *
+ * @author jmvivo
+ *
+ */
+public class JDBCStoreParameters extends DBStoreParameters
+		implements JDBCConnectionParameters {
+
+	public static final String PARAMETERS_DEFINITION_NAME = "JDBCStoreParameters";
+
+	public JDBCStoreParameters() {
+		super(PARAMETERS_DEFINITION_NAME,JDBCStoreProvider.NAME);
+	}
+
+	protected JDBCStoreParameters(String parametersDefinitionName) {
+		super(parametersDefinitionName,JDBCStoreProvider.NAME);
+	}
+
+	protected JDBCStoreParameters(String parametersDefinitionName, String providerName) {
+		super(parametersDefinitionName,providerName);
+	}
+
+	public boolean isValid() {
+		return this.getHost() != null;
+	}
+
+	public String getHost() {
+		return (String) this.getDynValue(HOST_PARAMTER_NAME);
+	}
+
+	public Integer getPort() {
+		return (Integer) this.getDynValue(PORT_PARAMTER_NAME);
+	}
+
+	public String getDBName() {
+		return (String) this.getDynValue(DBNAME_PARAMTER_NAME);
+	}
+
+	public String getUser() {
+		return (String) this.getDynValue(USER_PARAMTER_NAME);
+	}
+
+	public String getPassword() {
+		return (String) this.getDynValue(PASSWORD_PARAMTER_NAME);
+	}
+
+	public void setHost(String host) {
+		this.setDynValue(HOST_PARAMTER_NAME, host);
+	}
+
+	public void setPort(int port) {
+		this.setDynValue(PORT_PARAMTER_NAME, new Integer(port));
+	}
+
+	public void setPort(Integer port) {
+		this.setDynValue(PORT_PARAMTER_NAME, port);
+	}
+
+	public void setDBName(String dbName) {
+		this.setDynValue(DBNAME_PARAMTER_NAME, dbName);
+	}
+
+	public void setUser(String user) {
+		this.setDynValue(USER_PARAMTER_NAME, user);
+	}
+
+	public void setPassword(String password) {
+		this.setDynValue(PASSWORD_PARAMTER_NAME, password);
+	}
+
+	/**
+	 * Set <code>JDBC Driver class name</code> parameter
+	 *
+	 * @param className
+	 */
+	public void setJDBCDriverClassName(String className) {
+		this.setDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME, className);
+	}
+
+	public String getJDBCDriverClassName() {
+		return (String) this.getDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME);
+	}
+
+	public String getCatalog() {
+		return (String) this.getDynValue(CATALOG_PARAMTER_NAME);
+	}
+
+
+	/**
+	 * Set <code>catalog</code> parameter
+	 *
+	 * @param className
+	 */
+	public void setCatalog(String catalog) {
+		this.setDynValue(CATALOG_PARAMTER_NAME, catalog);
+	}
+
+	public String getSchema() {
+		return (String) this.getDynValue(SCHEMA_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set <code>schema</code> parameter
+	 *
+	 * @param className
+	 */
+	public void setSchema(String schema) {
+		this.setDynValue(SCHEMA_PARAMTER_NAME, schema);
+	}
+
+	public String getTable() {
+		return (String) this.getDynValue(TABLE_PARAMTER_NAME);
+	}
+
+	public void setTable(String table) {
+		this.setDynValue(TABLE_PARAMTER_NAME, table);
+	}
+
+	public String getFieldsString() {
+		return (String) this.getDynValue(FIELDS_PARAMTER_NAME);
+	}
+
+	public String[] getFields() {
+		String fields = (String) this.getDynValue(FIELDS_PARAMTER_NAME);
+		if (fields == null) {
+			return null;
+		}
+		// FIXME check for fields with spaces and special chars
+		return fields.split(",");
+	}
+
+	public void setFields(String fields) {
+		this.setDynValue(FIELDS_PARAMTER_NAME, fields);
+	}
+
+	public void setFields(String[] fields) {
+		StringBuilder str = new StringBuilder();
+		for (int i = 0; i < fields.length - 1; i++) {
+			str.append(fields[i]);
+			str.append(",");
+		}
+		str.append(fields[fields.length - 1]);
+
+		this.setDynValue(FIELDS_PARAMTER_NAME, str.toString());
+	}
+
+	public String getSQL() {
+		return (String) this.getDynValue(SQL_PARAMTER_NAME);
+	}
+
+	public void setSQL(String sql) {
+		this.setDynValue(SQL_PARAMTER_NAME, sql);
+	}
+
+	public String getBaseFilter() {
+		return (String) this.getDynValue(BASEFILTER_PARAMTER_NAME);
+	}
+
+	public void setBaseFilter(String initialFilter) {
+		this.setDynValue(BASEFILTER_PARAMTER_NAME, initialFilter);
+	}
+
+	public String getBaseOrder() {
+		return (String) this.getDynValue(BASEORDER_PARAMTER_NAME);
+	}
+
+	public void setBaseOrder(String order) {
+		this.setDynValue(BASEORDER_PARAMTER_NAME, order);
+	}
+
+	public String getPkFieldsString() {
+		return (String) this.getDynValue(PKFIELDS_PARAMTER_NAME);
+	}
+
+	public String[] getPkFields() {
+		String fields = (String) this.getDynValue(PKFIELDS_PARAMTER_NAME);
+		if (fields == null) {
+			return null;
+		}
+		// FIXME check for fields with spaces and special chars
+		return fields.split(",");
+	}
+
+	public void setPkFields(String fields) {
+		this.setDynValue(PKFIELDS_PARAMTER_NAME, fields);
+	}
+
+	public void setPkFields(String[] fields) {
+		StringBuilder str = new StringBuilder();
+		for (int i = 0; i < fields.length - 1; i++) {
+			str.append(fields[i]);
+			str.append(",");
+		}
+		str.append(fields[fields.length - 1]);
+
+		this.setDynValue(PKFIELDS_PARAMTER_NAME, str.toString());
+	}
+
+	/**
+	 * Return table <code>name</code> or <code>schema.tableName</code> if
+	 * <code>schema</code> parameter is set.
+	 *
+	 * @return
+	 */
+	public String tableID() {
+		if (this.getSchema() == null || this.getSchema() == "") {
+            return escapeName(this.getTable());
+		}
+        return escapeName(this.getSchema()) + "." + escapeName(this.getTable());
+	}
+
+    protected String escapeName(String name) {
+        return "\"".concat(name).concat("\"");
+    }
+
+	/**
+	 * Compound a string that can identify the source
+	 *
+	 * @return
+	 */
+	public String getSourceId() {
+		if (getTable() != null) {
+			return MessageFormat.format(
+					"provider={0}:url=\"{1}\":table=\"{2}\":user={3}:driverclass={4}", 
+					this.getDataStoreName(),
+					this.getUrl(),
+					this.getTable(),
+					this.getUser(),
+					this.getJDBCDriverClassName()
+			);
+		}
+		return MessageFormat.format(
+				"provider={0}:url=\"{1}\":sql=\"{2}\":user={3}:driverclass={4}", 
+				this.getDataStoreName(),
+				this.getUrl(),
+				this.getSQL(),
+				this.getUser(),
+				this.getJDBCDriverClassName()
+		);
+	}
+
+	public String getUrl() {
+		return (String) this.getDynValue(URL_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set <code>JDBC connection url</code> parameter
+	 *
+	 * @param url
+	 */
+	public void setUrl(String url) {
+		this.setDynValue(URL_PARAMTER_NAME, url);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCConnectionParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCConnectionParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCConnectionParameters.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.serverexplorer.db.DBConnectionParameter;
+
+/**
+ * Interface JDBC Store Parameters
+ *
+ * @author jmvivo
+ *
+ */
+public interface JDBCConnectionParameters extends DBConnectionParameter {
+
+	/**
+	 * Parameter name for <code>JDBC driver class name</code>
+	 */
+	public static final String JDBC_DRIVER_CLASS_PARAMTER_NAME = "jdbcdriverclass";
+
+	/**
+	 * Parameter name for <code>catalog</code> 
+	 */
+	public static final String CATALOG_PARAMTER_NAME = "catalog";
+
+	/**
+	 * Parameter name for <code>schema</code> 
+	 */
+	public static final String SCHEMA_PARAMTER_NAME = "schema";
+
+	/**
+	 * Parameter name for <code>JDBC connection URL</code>
+	 */
+	public static final String URL_PARAMTER_NAME = "url";
+
+	/**
+	 * Return <code>JDBC driver class name</code> parameter
+	 *
+	 * @return
+	 */
+	public String getJDBCDriverClassName();
+
+	/**
+	 * Return <code>catalog</code> parameter
+	 *
+	 * @return
+	 */
+	public String getCatalog();
+
+	/**
+	 * Return <code>schema</code> parameter
+	 *
+	 * @return
+	 */
+	public String getSchema();
+
+	/**
+	 * Return <code>JDBC connection URL</code> parameter
+	 * 
+	 * @return
+	 */
+	public String getUrl();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCConnectionParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResource.java	(revision 42196)
@@ -0,0 +1,261 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.text.MessageFormat;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.dbcp.BasicDataSource;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.db.AbstractDBResourceNoBlocker;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCDriverClassNotFoundException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JDBCResource extends AbstractDBResourceNoBlocker {
+
+	final static private Logger logger = LoggerFactory
+			.getLogger(JDBCResource.class);
+
+	public final static String NAME = "JDBCResource";
+	public static final String DESCRIPTION = "JDBC Connection";
+
+	protected DataSource dataSource = null;
+
+	public JDBCResource(JDBCResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+		registerJDBCDriver();
+
+	}
+
+	public String getName() throws AccessResourceException {
+		JDBCResourceParameters params = (JDBCResourceParameters) this
+				.getParameters();
+		return MessageFormat.format("JDBCResource({0},{1},{2},{3},{4})",
+				new Object[] {
+				params.getJDBCDriverClassName(),
+						params.getHost(), params.getPort(),
+				params.getUser(), params.getDBName() });
+	}
+
+	@SuppressWarnings("unchecked")
+	protected void registerJDBCDriver() throws InitializeException {
+		String className = ((JDBCResourceParameters) getParameters())
+				.getJDBCDriverClassName();
+		if (className == null) {
+			return;
+		}
+
+		Class theClass = null;
+		try {
+			theClass = Class.forName(className);
+		} catch (Exception e){
+			throw new InitializeException(e);
+		}
+		if (theClass == null) {
+			try {
+				throw new JDBCDriverClassNotFoundException(this.getName(),
+						className);
+			} catch (AccessResourceException e) {
+				throw new InitializeException(e);
+
+			}
+		}
+	}
+
+
+	public Connection getJDBCConnection() throws AccessResourceException {
+		return (Connection) get();
+	}
+        
+        public void closeConnection(Connection connection) {
+            try {
+                logger.debug("before-close connection"+ this.getStatusInformation());
+                connection.close();
+                logger.debug("after close connection "+ this.getStatusInformation());
+            } catch (Exception ex) {
+                logger.warn("Problems closing connection.",ex);
+            }            
+        }
+
+	private void debugPoolStatus(String src) {
+		if (logger.isDebugEnabled() ) {
+			logger.debug(src + "  " + this.getStatusInformation());
+		}
+	}
+        
+        public String getStatusInformation() {
+		if ( !(dataSource instanceof BasicDataSource) ) {
+                    return "Connected: " + this.isConnected();
+                }
+        	BasicDataSource ds = (BasicDataSource) dataSource;
+                String s = "Connected: " + this.isConnected() + ", " +
+                        "actives: "+ ds.getNumActive() + "/"+ ds.getMaxActive() + ", " + 
+                        "idle: " + ds.getNumIdle() + "/"+ ds.getMaxIdle() ;
+                return s;
+        }
+
+	protected synchronized Object getTheConnection() throws DataException {
+		try {
+			Object conn = this.dataSource.getConnection();
+			debugPoolStatus("getTheConnection");
+			return conn;
+		} catch (SQLException e) {
+			throw new JDBCSQLException(e);
+		}
+	}
+
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		if (!super.isThis(parameters)) {
+			return false;
+		}
+
+		String dbName = ((JDBCResourceParameters) parameters).getDBName();
+		String myDbName = ((JDBCResourceParameters) getParameters())
+				.getDBName();
+		if (dbName != myDbName) {
+			if (!(dbName != null && dbName.equals(myDbName))) {
+				return false;
+			}
+
+		}
+
+		String driver = ((JDBCResourceParameters) parameters)
+				.getJDBCDriverClassName();
+		String myDriver = ((JDBCResourceParameters) getParameters())
+				.getJDBCDriverClassName();
+		if (driver != myDriver) {
+			if (!(driver != null && driver.equals(myDriver))) {
+				return false;
+			}
+		}
+		return true;
+
+	}
+
+	public boolean isConnected() {
+		if (dataSource == null) {
+			return false;
+		}
+		if (dataSource instanceof BasicDataSource) {
+			return ((BasicDataSource) dataSource).getNumActive() > 0
+					|| ((BasicDataSource) dataSource).getNumIdle() > 0;
+		}
+		return true;
+	}
+
+	protected DataSource createDataSource() {
+		JDBCResourceParameters jdbcParams = (JDBCResourceParameters) this
+		.getParameters();
+		BasicDataSource dataSource = new BasicDataSource();
+		dataSource.setDriverClassName(jdbcParams.getJDBCDriverClassName());
+		dataSource.setUsername(jdbcParams.getUser());
+		dataSource.setPassword(jdbcParams.getPassword());
+		dataSource.setUrl(jdbcParams.getUrl());
+
+
+		dataSource.setMaxWait(60L * 1000); // FIXME
+
+		// FIXME Set Pool parameters:
+		/*
+		dataSource.setMaxActive(maxActive);
+		dataSource.setMaxIdle(maxActive);
+		dataSource.setMaxOpenPreparedStatements(maxActive);
+		dataSource.setMaxWait(maxActive);
+		dataSource.setInitialSize(initialSize);
+		dataSource.setDefaultReadOnly(defaultReadOnly);
+		dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);
+		dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+		dataSource.setMinIdle(minIdle);
+		dataSource.setTestOnBorrow(testOnBorrow);
+		dataSource.setTestOnReturn(testOnReturn);
+		dataSource.setTestWhileIdle(testOnReturn);
+		dataSource
+			.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+
+		dataSource.setAccessToUnderlyingConnectionAllowed(allow);
+		dataSource.setLoginTimeout(seconds);
+		dataSource.setLogWriter(out);
+		 */
+		return dataSource;
+	}
+
+	protected void connectToDB() throws DataException {
+		if (this.dataSource != null) {
+			return;
+		}
+		JDBCResourceParameters jdbcParams = (JDBCResourceParameters) this
+				.getParameters();
+		BasicDataSource dataSource = new BasicDataSource();
+		dataSource.setDriverClassName(jdbcParams.getJDBCDriverClassName());
+		dataSource.setUsername(jdbcParams.getUser());
+		dataSource.setPassword(jdbcParams.getPassword());
+		dataSource.setUrl(jdbcParams.getUrl());
+
+		dataSource.setMaxWait(60L * 1000); // FIXME
+
+		// FIXME Set Pool parameters:
+		/*
+		dataSource.setMaxActive(maxActive);
+		dataSource.setMaxIdle(maxActive);
+		dataSource.setMaxOpenPreparedStatements(maxActive);
+		dataSource.setMaxWait(maxActive);
+		dataSource.setInitialSize(initialSize);
+		dataSource.setDefaultReadOnly(defaultReadOnly);
+		dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);
+		dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+		dataSource.setMinIdle(minIdle);
+		dataSource.setTestOnBorrow(testOnBorrow);
+		dataSource.setTestOnReturn(testOnReturn);
+		dataSource.setTestWhileIdle(testOnReturn);
+		dataSource
+				.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+
+		dataSource.setAccessToUnderlyingConnectionAllowed(allow);
+		dataSource.setLoginTimeout(seconds);
+		dataSource.setLogWriter(out);
+		*/
+
+		this.dataSource = dataSource;
+	}
+
+        public void beginUse() {
+            this.executeBegins();
+        }
+        
+        public void endUse() {
+           this.executeEnds();
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorer.java	(revision 42196)
@@ -0,0 +1,593 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.db.spi.AbstractDBServerExplorer;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCServerExplorer extends AbstractDBServerExplorer
+		implements JDBCHelperUser {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(JDBCServerExplorer.class);
+	
+	private static final String METADATA_COLUMN_TABLE_CATALOG = "TABLE_CAT";
+	private static final String METADATA_COLUMN_TABLE_SCHEMA = "TABLE_SCHEM";
+	private static final String METADATA_COLUMN_TABLE_NAME = "TABLE_NAME";
+
+	public static final String NAME = "JDBCServerExplorer";
+	protected JDBCHelper helper;
+
+	private Boolean canAdd;
+
+	public JDBCServerExplorer(JDBCServerExplorerParameters parameters,
+			DataServerExplorerProviderServices services)
+			throws InitializeException {
+		super(parameters, services);
+		this.helper = createHelper();
+	}
+
+	protected JDBCServerExplorerParameters getJDBCParameters() {
+		return (JDBCServerExplorerParameters) getParameters();
+	}
+
+	protected JDBCHelper createHelper() throws InitializeException {
+		return new JDBCHelper(this, getJDBCParameters());
+	}
+
+	protected JDBCHelper getHelper() {
+		return helper;
+	}
+
+
+	public List list() throws DataException {
+		return this.list(MODE_ALL);
+	}
+
+	public List list(boolean showInformationDBTables) throws DataException {
+		return this.list(MODE_ALL, showInformationDBTables);
+	}
+
+	public List list(int mode) throws DataException {
+		JDBCServerExplorerParameters parameters = getJDBCParameters();
+		if (parameters.getShowInformationDBTables() != null) {
+			return this.list(mode, parameters.getShowInformationDBTables()
+					.booleanValue());
+		}
+		Boolean show = (Boolean) parameters
+				.getDynClass()
+				.getDynField(
+						JDBCServerExplorerParameters.SHOWINFORMATIONDBTABLES_PARAMTER_NAME)
+				.getDefaultValue();
+		if (show == null){
+			show = Boolean.FALSE;
+		}
+
+		return this.list(mode, show.booleanValue());
+	}
+
+
+	protected DataManagerProviderServices getManager() {
+		return (DataManagerProviderServices) DALLocator.getDataManager();
+	}
+
+	public boolean hasGeometrySupport() {
+		return false;
+	}
+
+	public boolean closeResourceRequested(ResourceProvider resource) {
+		try {
+			this.helper.close();
+		} catch (CloseException e) {
+			LOG.error("Exception in close Request", e);
+		}
+		return !this.helper.isOpen();
+	}
+
+	public void resourceChanged(ResourceProvider resource) {
+		// Nothing to do
+	}
+
+	public void remove(DataStoreParameters dsp) throws RemoveException {
+		final JDBCStoreParameters dsParams =(JDBCStoreParameters) dsp;
+
+		TransactionalAction action = new TransactionalAction() {
+			public boolean continueTransactionAllowed() {
+				return false;
+			}
+			public Object action(Connection conn) throws DataException {
+				Statement st;
+				try{
+					st = conn.createStatement();
+				} catch (SQLException e) {
+					throw new JDBCSQLException(e);
+				}
+
+				String sqlDrop = "Drop table "
+					+ dsParams.tableID();
+
+				try{
+					try{
+                                                JDBCHelper.execute(st, sqlDrop);
+					} catch (SQLException e) {
+						throw new JDBCExecuteSQLException(sqlDrop, e);
+					}
+
+				} finally{
+					try{ st.close(); } catch (SQLException e) {};
+				}
+				return null;
+			}
+		};
+		try {
+			this.helper.doConnectionAction(action);
+		} catch (Exception e) {
+			throw new RemoveException(this.getProviderName(), e);
+		}
+	}
+
+	public DataStoreParameters getOpenParameters() throws DataException {
+		JDBCServerExplorerParameters parameters = getJDBCParameters();
+		JDBCStoreParameters params = new JDBCStoreParameters();
+		params.setHost(parameters.getHost());
+		params.setPort(parameters.getPort());
+		params.setDBName(parameters.getDBName());
+		params.setUser(parameters.getUser());
+		params.setPassword(parameters.getPassword());
+		params.setCatalog(parameters.getCatalog());
+		params.setSchema(parameters.getSchema());
+		params.setJDBCDriverClassName(parameters.getJDBCDriverClassName());
+		params.setUrl(parameters.getUrl());
+		return params;
+        }
+
+        public NewDataStoreParameters getAddParameters() throws DataException {
+		JDBCServerExplorerParameters parameters = getJDBCParameters();
+		JDBCNewStoreParameters params = new JDBCNewStoreParameters();
+		params.setHost(parameters.getHost());
+		params.setPort(parameters.getPort());
+		params.setDBName(parameters.getDBName());
+		params.setUser(parameters.getUser());
+		params.setPassword(parameters.getPassword());
+		params.setCatalog(parameters.getCatalog());
+		params.setSchema(parameters.getSchema());
+		params.setJDBCDriverClassName(parameters.getJDBCDriverClassName());
+		params.setUrl(parameters.getUrl());
+
+		params.setDefaultFeatureType(this.getServerExplorerProviderServices()
+				.createNewFeatureType());
+
+		return params;
+	}
+
+	public void closeDone() throws DataException {
+		// Nothing to do
+	}
+
+	public void opendDone() throws DataException {
+		// Nothin to do
+
+	}
+
+	public DataStore open(DataStoreParameters dsp) throws DataException {
+		checkIsMine(dsp);
+		DataManager dataMan = DALLocator.getDataManager();
+		DataStore store;
+		try {
+			store = dataMan.openStore(dsp.getDataStoreName(), dsp);
+		} catch (ValidateDataParametersException e) {
+			throw new InitializeException(e);
+		}
+
+		return store;
+	}
+
+	protected void checkIsMine(DataStoreParameters dsp) {
+		if (!(dsp instanceof JDBCConnectionParameters)) {
+			// FIXME Exception ???
+			throw new IllegalArgumentException(
+					"not instance of FilesystemStoreParameters");
+		}
+
+		// try {
+		// dsp.validate();
+		// } catch (ValidateDataParametersException e) {
+		// throw new IllegalArgumentException("check parameters", e);
+		// }
+
+		JDBCServerExplorerParameters parameters = getJDBCParameters();
+
+		JDBCConnectionParameters pgp = (JDBCConnectionParameters) dsp;
+		if (!compare(pgp.getHost(), parameters.getHost())) {
+			throw new IllegalArgumentException("wrong explorer: Host (mine: "
+					+ parameters.getHost() + " other:" + pgp.getHost() + ")");
+		}
+		if (!compare(pgp.getPort(), parameters.getPort())) {
+			throw new IllegalArgumentException("wrong explorer: Port (mine: "
+					+ parameters.getPort() + " other:" + pgp.getPort() + ")");
+		}
+		if (!compare(pgp.getDBName(), parameters.getDBName())) {
+			throw new IllegalArgumentException("wrong explorer: DBName (mine: "
+					+ parameters.getDBName() + " other:" + pgp.getDBName()
+					+ ")");
+		}
+		if (parameters.getCatalog() != null && !parameters.getCatalog().trim().equals("")) {
+			// implicit catalog
+			if (!compare(pgp.getCatalog(), parameters.getCatalog())) {
+				throw new IllegalArgumentException(
+						"wrong explorer: Catalog (mine: "
+								+ parameters.getCatalog() + " other:"
+								+ pgp.getCatalog() + ")");
+			}
+		}
+		if (parameters.getSchema() != null && !parameters.getSchema().trim().equals("")) {
+			// implicit schema
+			if (!compare(pgp.getSchema(), parameters.getSchema())) {
+				throw new IllegalArgumentException(
+						"wrong explorer: Schema (mine: "
+								+ parameters.getSchema() + " other:"
+								+ pgp.getSchema() + ")");
+			}
+		}
+	}
+
+	protected boolean compare(Object str1, Object str2) {
+		if (str1 == str2){
+			return true;
+		}
+		if (str1 == null){
+			return false;
+		}
+		return  str1.equals(str2);
+	}
+
+	protected JDBCStoreParameters createStoreParams()
+			throws InitializeException, ProviderNotRegisteredException {
+		DataManagerProviderServices manager = this.getManager();
+		JDBCServerExplorerParameters parameters = getJDBCParameters();
+		JDBCStoreParameters orgParams = (JDBCStoreParameters) manager
+				.createStoreParameters(getStoreName());
+		orgParams.setHost(parameters.getHost());
+		orgParams.setPort(parameters.getPort());
+		orgParams.setDBName(parameters.getDBName());
+		orgParams.setUser(parameters.getUser());
+		orgParams.setPassword(parameters.getPassword());
+        orgParams.setCatalog(parameters.getCatalog());
+        orgParams.setJDBCDriverClassName(parameters.getJDBCDriverClassName());
+        orgParams.setSchema(parameters.getSchema());
+        orgParams.setUrl(parameters.getUrl());
+		return orgParams;
+	}
+
+	public List list(final int mode, final boolean showInformationDBTables)
+			throws DataException {
+
+		final JDBCStoreParameters orgParams = createStoreParams();
+
+		ConnectionAction action = new ConnectionAction() {
+
+			public Object action(Connection conn) throws DataException {
+
+				String[] tableTypes = null;
+				if (!showInformationDBTables) {
+					tableTypes = new String[] { "TABLE", "VIEW" };
+				}
+
+				ResultSet result = null;
+				try {
+					DatabaseMetaData metadata = conn.getMetaData();
+					result = metadata.getTables(null, null, null,
+							tableTypes);
+					List<JDBCStoreParameters> paramList = new ArrayList<JDBCStoreParameters>();
+					while (result.next()) {
+						JDBCStoreParameters params = (JDBCStoreParameters) orgParams
+								.getCopy();
+						params.setCatalog(result
+								.getString(METADATA_COLUMN_TABLE_CATALOG));
+						params.setSchema(result
+								.getString(METADATA_COLUMN_TABLE_SCHEMA));
+						params.setTable(result
+								.getString(METADATA_COLUMN_TABLE_NAME));
+						paramList.add(params);
+					}
+
+					return paramList;
+				} catch (SQLException e) {
+					throw new JDBCSQLException(e);
+				} finally {
+					if (result != null) {
+						try {
+							result.close();
+						} catch (Exception e) {
+							LOG.error("Error closing DatabaseMetadata "
+									+ "getTables() Resultset", e);
+						}
+					}
+				}
+			}
+
+		};
+
+		try {
+			return (List) helper.doConnectionAction(action);
+		} catch (Exception e) {
+			throw new ReadException(this.getProviderName(), e);
+		}
+	}
+
+
+	public void open() throws OpenException {
+		helper.open();
+	}
+
+	public void close() throws CloseException {
+		helper.close();
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+		helper.dispose();
+		helper = null;
+	}
+
+	public String getProviderName() {
+		return NAME;
+	}
+
+	public String getStoreName() {
+		return JDBCStoreProvider.NAME;
+	}
+
+	public boolean canAdd() {
+		if (this.canAdd == null){
+			ConnectionAction action = new ConnectionAction(){
+
+				public Object action(Connection conn) throws DataException {
+					try {
+					DatabaseMetaData metadata = conn.getMetaData();
+						if (metadata.isReadOnly()) {
+							return Boolean.FALSE;
+						}
+						return Boolean.TRUE;
+					} catch (SQLException e) {
+						throw new JDBCSQLException(e);
+					}
+				}
+
+			};
+
+			try {
+				this.canAdd = (Boolean) helper.doConnectionAction(action);
+			} catch (Exception e) {
+				// FIXME Exception
+				throw new RuntimeException(e);
+			}
+		}
+		return this.canAdd.booleanValue();
+	}
+
+	public FeatureType getFeatureType(DataStoreParameters dsp)
+			throws DataException {
+		checkIsMine(dsp);
+
+		// TODO: checks geometry columns and driver geometry supports
+		EditableFeatureType edType = this.getServerExplorerProviderServices()
+				.createNewFeatureType();
+		helper.loadFeatureType(edType, (JDBCStoreParameters) dsp);
+
+		return edType;
+
+	}
+        
+	public boolean add(String providerName, NewDataStoreParameters ndsp, boolean overwrite)
+			throws DataException {
+
+		/**
+		 * CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name (
+		 * { column_name data_type [ DEFAULT default_expr ] [ column_constraint
+		 * [ ... ] ] | table_constraint | LIKE parent_table [ { INCLUDING |
+		 * EXCLUDING } DEFAULTS ] } [, ... ] ) [ INHERITS ( parent_table [, ...
+		 * ] ) ] [ WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS |
+		 * DELETE ROWS | DROP } ]
+		 *
+		 * where column_constraint is:
+		 *
+		 * [ CONSTRAINT constraint_name ] { NOT NULL | NULL | UNIQUE | PRIMARY
+		 * KEY | CHECK (expression) | REFERENCES reftable [ ( refcolumn ) ] [
+		 * MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON
+		 * UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY
+		 * DEFERRED | INITIALLY IMMEDIATE ]
+		 *
+		 * and table_constraint is:
+		 *
+		 * [ CONSTRAINT constraint_name ] { UNIQUE ( column_name [, ... ] ) |
+		 * PRIMARY KEY ( column_name [, ... ] ) | CHECK ( expression ) | FOREIGN
+		 * KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ...
+		 * ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE
+		 * action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE ] [
+		 * INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
+		 */
+
+		if (!(ndsp instanceof JDBCNewStoreParameters)) {
+			// FIXME exception
+			throw new IllegalArgumentException();
+		}
+		checkIsMine(ndsp);
+
+		JDBCNewStoreParameters jdbcnsp = (JDBCNewStoreParameters) ndsp;
+
+		StringBuilder sql = new StringBuilder();
+
+		if (!jdbcnsp.isValid()) {
+			// TODO Exception
+			throw new InitializeException(this.getProviderName(), new Exception(
+					"Parameters not valid"));
+		}
+		try {
+			jdbcnsp.validate();
+		} catch (ValidateDataParametersException e1) {
+			throw new InitializeException(this.getProviderName(), e1);
+		}
+
+		FeatureType fType = jdbcnsp.getDefaultFeatureType();
+
+		sql.append("Create table " + jdbcnsp.tableID()
+				+ "(");
+		Iterator attrs = fType.iterator();
+		String sqlAttr;
+		List sqlAttrs = new ArrayList();
+
+		while (attrs.hasNext()) {
+			sqlAttr = helper
+					.getSqlFieldDescription((FeatureAttributeDescriptor) attrs
+							.next());
+			if (sqlAttr != null) {
+				sqlAttrs.add(sqlAttr);
+			}
+		}
+
+		helper.stringJoin(sqlAttrs, ", ", sql);
+
+		sql.append(")");
+
+		final String sqlCreate = sql.toString();
+		final List sqlAdditional = helper.getAdditionalSqlToCreate(ndsp, fType);
+
+                List permissions = this.getHelper().createGrantStatements((JDBCNewStoreParameters) ndsp);
+                if( permissions != null ) {
+                    sqlAdditional.addAll(permissions);
+                }
+                
+                if( ((JDBCNewStoreParameters) ndsp).getPostCreatingStatement()!=null ) {
+                    sqlAdditional.add(((JDBCNewStoreParameters) ndsp).getPostCreatingStatement());
+                }
+                
+		TransactionalAction action = new TransactionalAction() {
+
+			public boolean continueTransactionAllowed() {
+				// TODO Auto-generated method stub
+				return false;
+			}
+
+			public Object action(Connection conn) throws DataException {
+				Statement st = null;
+
+				try {
+					st = conn.createStatement();
+				} catch (SQLException e1) {
+					throw new JDBCSQLException(e1);
+				}
+				String sql = null;
+
+				try {
+					sql = sqlCreate;
+                                        JDBCHelper.execute(st, sql);
+					if (sqlAdditional != null) {
+						Iterator iter = sqlAdditional.iterator();
+						while (iter.hasNext()) {
+							sql = (String) iter.next();
+                                                        JDBCHelper.execute(st, sql);
+						}
+					}
+
+				} catch (SQLException e) {
+					throw new JDBCExecuteSQLException(sql, e);
+				} finally {
+					try {
+						st.close();
+					} catch (SQLException e) {
+						LOG.error("Exception clossing statement", e);
+					}
+					;
+				}
+
+				return Boolean.TRUE;
+			}
+
+		};
+
+		Boolean result = Boolean.FALSE;
+
+		try {
+			result = (Boolean) helper.doConnectionAction(action);
+		} catch (DataException e) {
+                    throw  e;
+		} catch (Exception e) {
+                    // FIXME Exception
+                    throw new RuntimeException(e);
+		}
+
+		return result.booleanValue();
+	}
+
+	public List getDataStoreProviderNames() {
+		List x = new ArrayList(1);
+		x.add(JDBCStoreProvider.NAME);
+		return x;
+	}
+        
+        public void updateTableStatistics(String tableName) throws JDBCExecuteSQLException {
+            
+        }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCIterator.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureProviderIterator;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCIterator extends AbstractFeatureProviderIterator {
+
+	protected int resultSetID;
+	protected Boolean hasNext = null;
+	protected FeatureType featureType;
+	protected JDBCSetProvider set;
+
+	protected JDBCIterator(JDBCStoreProvider store, JDBCSetProvider set,
+			FeatureType featureType,
+			int resulsetID) throws DataException {
+		super(store);
+		this.resultSetID = resulsetID;
+		this.featureType = featureType;
+		this.set = set;
+		this.hasNext = null;
+		if (this.set != null && resulsetID >= 0){
+	        this.set.addResulsetReference(resulsetID);
+		}
+	}
+
+	private JDBCStoreProvider getJDBCStoreProvider() {
+		return (JDBCStoreProvider) getFeatureStoreProvider();
+	}
+
+    public final Object next() {
+        try {
+            getDataStoreProvider().open();
+        } catch (OpenException e) {
+            throw new RuntimeException(e);
+        }
+        return internalNext();
+    }
+
+    public final boolean hasNext() {
+        return internalHasNext();
+    }
+
+	@Override
+	protected boolean internalHasNext() {
+		if (hasNext == null) {
+			try {
+				if (getJDBCStoreProvider().resulsetNext(resultSetID)) {
+					hasNext = Boolean.TRUE;
+				} else {
+					hasNext = Boolean.FALSE;
+					this.close();
+				}
+			} catch (DataException e) {
+				// FIXME Exception
+				throw new RuntimeException(e);
+			}
+		}
+		return hasNext.booleanValue();
+	}
+
+	@Override
+	protected Object internalNext() {
+		if (!hasNext()) {
+			throw new NoSuchElementException();
+		}
+		FeatureProvider data;
+		try {
+			data = getFeatureProvider();
+		} catch (DataException e) {
+			// FIXME Exception
+			throw new RuntimeException(e);
+		}
+		hasNext = null;
+		return data;
+	}
+
+	public void remove() {
+		throw new UnsupportedOperationException();
+	}
+
+	protected FeatureProvider createFeatureProvider() throws DataException {
+		return getFeatureStoreProvider().createFeatureProvider(featureType);
+	}
+
+	protected FeatureProvider getFeatureProvider() throws DataException {
+		FeatureProvider data = createFeatureProvider();
+		getJDBCStoreProvider().loadFeatureProvider(data, resultSetID);
+		return data;
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+		if (resultSetID >= 0){
+			this.close();
+		}
+		this.featureType = null;
+	}
+
+	protected void close() {
+		try {
+			this.set.removeResulsetReference(resultSetID);
+			getJDBCStoreProvider().closeResulset(resultSetID);
+			resultSetID = -1;
+		} catch (DataException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCNewStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCNewStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCNewStoreParameters.java	(revision 42196)
@@ -0,0 +1,205 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.store.db.DBNewStoreParameters;
+
+import static org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters.CATALOG_PARAMTER_NAME;
+import static org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters.JDBC_DRIVER_CLASS_PARAMTER_NAME;
+import static org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters.SCHEMA_PARAMTER_NAME;
+
+public class JDBCNewStoreParameters extends DBNewStoreParameters implements
+        JDBCConnectionParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "JDBCNewStoreParameters";
+
+    public JDBCNewStoreParameters() {
+        super(PARAMETERS_DEFINITION_NAME, JDBCStoreProvider.NAME);
+    }
+
+    protected JDBCNewStoreParameters(String parametersDefinitionName, String providerName) {
+        super(parametersDefinitionName, providerName);
+    }
+
+    /**
+     * Set <code>JDBC Driver class name</code> parameter
+     *
+     * @param className
+     */
+    public void setJDBCDriverClassName(String className) {
+        this.setDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME, className);
+    }
+
+    public String getJDBCDriverClassName() {
+        return (String) this.getDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME);
+    }
+
+    public String getCatalog() {
+        return (String) this.getDynValue(CATALOG_PARAMTER_NAME);
+    }
+
+    /**
+     * Set <code>catalog</code> parameter
+     *
+     * @param className
+     */
+    public void setCatalog(String catalog) {
+        this.setDynValue(CATALOG_PARAMTER_NAME, catalog);
+    }
+
+    public String getSchema() {
+        return (String) this.getDynValue(SCHEMA_PARAMTER_NAME);
+    }
+
+    /**
+     * Set <code>schema</code> parameter
+     *
+     * @param className
+     */
+    public void setSchema(String schema) {
+        this.setDynValue(SCHEMA_PARAMTER_NAME, schema);
+    }
+
+    public String getUrl() {
+        return (String) this.getDynValue(URL_PARAMTER_NAME);
+    }
+
+    /**
+     * Set <code>JDBC connection url</code> parameter
+     *
+     * @param url
+     */
+    public void setUrl(String url) {
+        this.setDynValue(URL_PARAMTER_NAME, url);
+    }
+
+    /**
+     * Return table <code>name</code> or <code>schema.tableName</code> if
+     * <code>schema</code> parameter is set.
+     *
+     * @return
+     */
+    public String tableID() {
+        if (this.getSchema() == null || this.getSchema() == "") {
+            return escapeName(this.getTable());
+        }
+        return escapeName(this.getSchema()) + "." + escapeName(this.getTable());
+    }
+
+    protected String escapeName(String name) {
+        return "\"".concat(name).concat("\"");
+    }
+
+    public String getSelectRole() {
+        String value = (String) this.getDynValue("SelectRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    public String getInsertRole() {
+        String value = (String) this.getDynValue("InsertRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    
+    public String getUpdateRole() {
+        String value = (String) this.getDynValue("UpdateRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    
+    public String getDeleteRole() {
+        String value = (String) this.getDynValue("DeleteRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    
+    public String getTruncateRole() {
+        String value = (String) this.getDynValue("TruncateRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    
+    public String getReferenceRole() {
+        String value = (String) this.getDynValue("ReferenceRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    
+    public String getTriggerRole() {
+        String value = (String) this.getDynValue("TriggerRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    
+    public String getAllRole() {
+        String value = (String) this.getDynValue("AllRole");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+    
+    
+    public String getPostCreatingStatement() {
+        String value = (String) this.getDynValue("PostCreatingStatement");
+        return StringUtils.defaultIfBlank(value, null);
+    }
+
+    
+    public void setSelectRole(String role) {
+        this.setDynValue("SelectRole", role);
+    }
+    
+    public void setInsertRole(String role) {
+        this.setDynValue("InsertRole", role);
+    }
+    
+    public void setUpdateRole(String role) {
+        this.setDynValue("UpdateRole", role);
+    }
+    
+    public void setDeleteRole(String role) {
+        this.setDynValue("DeleteRole", role);
+    }
+    
+    public void setTruncateRole(String role) {
+        this.setDynValue("TruncateRole", role);
+    }
+    
+    public void setReferenceRole(String role) {
+        this.setDynValue("ReferenceRole", role);
+    }
+    
+    public void setTriggerRole(String role) {
+        this.setDynValue("TriggerRole", role);
+    }
+    
+    public void setAllRole(String role) {
+        this.setDynValue("AllRole", role);
+    }
+    
+    public void setPostCreatingStatement(String statement) {
+        this.setDynValue("PostCreatingStatement", statement);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCNewStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecuteSQLException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecuteSQLException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecuteSQLException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import java.sql.SQLException;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCExecuteSQLException extends JDBCException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 634889167216570034L;
+
+	private final static String MESSAGE_FORMAT = "Problems executing sql: %(sql)";
+	private final static String MESSAGE_KEY = "_JDBCExecuteSQLException";
+
+	public JDBCExecuteSQLException(String sql, Exception cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("sql", sql);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecuteSQLException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecutePreparedSQLException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecutePreparedSQLException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecutePreparedSQLException.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import java.sql.SQLException;
+import java.util.List;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCExecutePreparedSQLException extends JDBCException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 634889167216570034L;
+
+	private final static String MESSAGE_FORMAT = "An JDBC exception was throw when execute SQL: '%(sql)' with params %(params)";
+	private final static String MESSAGE_KEY = "_JDBCExecutePreparedSQLException";
+
+	public JDBCExecutePreparedSQLException(String sql, Object[] parameters,
+			SQLException cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("sql", sql);
+		String params = "{unknow}";
+		if (parameters != null) {
+
+			StringBuilder strb = new StringBuilder();
+			strb.append('[');
+			for (int i = 0; i < parameters.length - 1; i++) {
+				strb.append(getParamValue(parameters[i]));
+				strb.append(", ");
+			}
+			strb.append(getParamValue(parameters[parameters.length - 1]));
+			strb.append(']');
+			params = strb.toString();
+		}
+		setValue("params", params);
+	}
+
+	public JDBCExecutePreparedSQLException(String sql, List parameters,
+			SQLException cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("sql", sql);
+		String params = "{unknow}";
+		if (parameters != null) {
+
+			StringBuilder strb = new StringBuilder();
+			strb.append('[');
+			for (int i = 0; i < parameters.size() - 1; i++) {
+				strb.append(getParamValue(parameters.get(i)));
+				strb.append(", ");
+			}
+			strb.append(getParamValue(parameters.get(parameters.size() - 1)));
+			strb.append(']');
+			params = strb.toString();
+		}
+		setValue("params", params);
+	}
+
+	private String getParamValue(Object param) {
+
+		if (param instanceof String) {
+			return "'" + param + "'";
+		}
+		if (param == null) {
+			return "null";
+		}
+		return param.toString();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCExecutePreparedSQLException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCPreparingSQLException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCPreparingSQLException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCPreparingSQLException.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import java.sql.SQLException;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCPreparingSQLException extends JDBCException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 396002379466607941L;
+	private final static String MESSAGE_FORMAT = "An JDBC exception was throw when preparing SQL: %(sql)";
+	private final static String MESSAGE_KEY = "_JDBCPreparingSQLException";
+
+	public JDBCPreparingSQLException(String sql, SQLException cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("sql", sql);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCPreparingSQLException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/InvalidResultSetIdException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/InvalidResultSetIdException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/InvalidResultSetIdException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public class InvalidResultSetIdException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 6819010675588720112L;
+
+	private final static String MESSAGE_FORMAT = "ResultSet id (%(id)s) invalid or closed.";
+	private final static String MESSAGE_KEY = "_InvalidResultSetIdException";
+
+	public InvalidResultSetIdException(int id) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("id", id + "");
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/InvalidResultSetIdException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCDriverClassNotFoundException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCDriverClassNotFoundException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCDriverClassNotFoundException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+
+public class JDBCDriverClassNotFoundException extends InitializeException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 3667181771913616775L;
+	private final static String MESSAGE_FORMAT = "Exception intializing '%(resource)': JDBC driver class not found: '%(className)'.";
+	private final static String MESSAGE_KEY = "_InitializeException";
+
+	public JDBCDriverClassNotFoundException(String resource, String className) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+		setValue("className", className);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCDriverClassNotFoundException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionCommitException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionCommitException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionCommitException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCTransactionCommitException extends JDBCException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1983159118684700720L;
+	private final static String MESSAGE_FORMAT = "An excetion was throw in commit";
+	private final static String MESSAGE_KEY = "_JDBCTransactionCommitException";
+
+
+
+	public JDBCTransactionCommitException(Exception cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionCommitException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCException.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public abstract class JDBCException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 4083959722123051090L;
+
+
+	protected JDBCException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	protected JDBCException(String messageFormat, String messageKey,
+			long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCSQLException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCSQLException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCSQLException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import java.sql.SQLException;
+
+
+public class JDBCSQLException extends JDBCException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 3706210974175686915L;
+	private final static String MESSAGE_FORMAT = "An JDBC driver exception was throw";
+	private final static String MESSAGE_KEY = "_JDBCSQLException";
+
+
+
+	public JDBCSQLException(SQLException cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+	}
+        
+	protected JDBCSQLException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	protected JDBCSQLException(String messageFormat, String messageKey,
+			long code) {
+		super(messageFormat, messageKey, code);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCSQLException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionRollbackException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionRollbackException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionRollbackException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import org.gvsig.fmap.dal.exception.DataListException;
+
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCTransactionRollbackException extends DataListException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1983159118684700720L;
+	private final static String MESSAGE_FORMAT = "An excetion was throw in rollback";
+	private final static String MESSAGE_KEY = "_JDBCTransactionRollbackException";
+
+
+	public JDBCTransactionRollbackException(Throwable cause, Throwable original) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		this.add(original);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCTransactionRollbackException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCUpdateWithoutChangesException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCUpdateWithoutChangesException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCUpdateWithoutChangesException.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+import java.util.List;
+
+
+
+public class JDBCUpdateWithoutChangesException extends JDBCException {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 3706210974175686915L;
+	private final static String MESSAGE_FORMAT = "An update SQL statement has no efect: SQL=\"{sql}\" Values='{sqlValues}'";
+	private final static String MESSAGE_KEY = "_JDBCUpdateWithoutChangesException";
+
+
+	public JDBCUpdateWithoutChangesException(String sql, List values) {
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		this.setValue("sql", sql);
+		if (values == null || values.size() == 0) {
+			this.setValue("sqlValues", "[]");
+		} else {
+			StringBuffer buff = new StringBuffer();
+			buff.append('[');
+			for (int i = 0; i < values.size() - 1; i++) {
+				buff.append(values.get(i));
+				buff.append(',');
+			}
+			buff.append(values.get(values.size() - 1));
+			buff.append(']');
+			this.setValue("sqlValues", buff.toString());
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/exception/JDBCUpdateWithoutChangesException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCAppender.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCAppender.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCAppender.java	(revision 42196)
@@ -0,0 +1,139 @@
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.exception.AlreadyEditingException;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.exception.StoreCancelEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCPreparingSQLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JDBCAppender implements Appender {
+
+    final static private Logger logger = LoggerFactory
+            .getLogger(JDBCAppender.class);
+
+    public String sql;
+    public List<FeatureAttributeDescriptor> attributes;
+    public Connection connection = null;
+    protected JDBCStoreProviderWriter provider;
+
+    public JDBCAppender(JDBCStoreProviderWriter provider) {
+        this.provider = provider;
+    }
+
+    public void begin() throws DataException {
+        if (this.connection != null) {
+            throw new AlreadyEditingException(this.getSourceId());
+        }
+        try {
+            StringBuilder sqlb = new StringBuilder();
+            List<FeatureAttributeDescriptor> attrs = new ArrayList<FeatureAttributeDescriptor>();
+
+            prepareSQLAndAttributeListForInsert(sqlb, attrs);
+
+            sql = sqlb.toString();
+            attributes = attrs;
+            this.connection = this.provider.getHelper().getConnection();
+            this.provider.getHelper().getResource().beginUse();
+            this.connection.setAutoCommit(false);
+        } catch (SQLException ex) {
+            try {
+                this.connection = null;
+                this.provider.getHelper().getResource().endUse();
+            } catch(Exception ex1) {
+                // Ignore errors
+            }
+            throw new PerformEditingException(this.getSourceId(), ex);               
+        }
+    }
+
+    public void end() throws DataException {
+        if (this.connection == null) {
+            throw new NeedEditingModeException(this.getSourceId());
+        }
+        sql = null;
+        attributes = null;
+        resetCount();
+        try {
+            this.connection.commit();
+        } catch (SQLException ex) {
+            throw new PerformEditingException(this.getSourceId().toString(), ex);
+        } finally {
+            this.provider.getHelper().closeConnection(this.connection);
+            this.connection = null;
+            this.provider.getHelper().getResource().endUse();
+        }
+
+    }
+
+    public void abort() throws DataException {
+        if (this.connection == null) {
+            throw new StoreCancelEditingException(null, this.getSourceId());
+        }
+        sql = null;
+        attributes = null;
+        resetCount();
+        try {
+            this.connection.rollback();
+        } catch (SQLException ex) {
+            throw new PerformEditingException(this.getSourceId(), ex);
+        } finally {
+            this.connection = null;
+            this.provider.getHelper().getResource().endUse();
+        }
+    }
+
+    public void append(FeatureProvider feature) throws DataException {
+        if (this.connection == null) {
+            throw new NeedEditingModeException(this.getSourceId());
+        }
+
+        PreparedStatement st = null;
+        try {
+            st = connection.prepareStatement(sql);
+            perfomInsert(connection, st, sql, feature, attributes);
+            resetCount();
+
+        } catch (SQLException e) {
+            throw new JDBCPreparingSQLException(sql, e);
+        } catch (Exception e) {
+            throw new PerformEditingException(this.getSourceId(), e);
+        } finally {
+            try {
+                st.close();
+            } catch (Exception ex) {
+                // Do nothing
+            }
+        }
+    }
+
+    protected void prepareSQLAndAttributeListForInsert(StringBuilder sqlb,
+            List<FeatureAttributeDescriptor> attributes) throws DataException {
+        this.provider.prepareSQLAndAttributeListForInsert(sqlb, attributes);
+    }
+
+    private void perfomInsert(Connection conn, PreparedStatement insertSt,
+            String sql, FeatureProvider feature, List<FeatureAttributeDescriptor> attributes)
+            throws DataException {
+        this.provider.perfomInsert(conn, insertSt, sql, feature, attributes);
+    }
+
+    private void resetCount() {
+        this.provider.resetCount();
+    }
+
+    private String getSourceId() {
+        return this.provider.getSourceId().toString();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProviderWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProviderWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProviderWriter.java	(revision 42196)
@@ -0,0 +1,748 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureRules;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.db.FeatureTypeHelper;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecutePreparedSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCPreparingSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCUpdateWithoutChangesException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCStoreProviderWriter extends JDBCStoreProvider {
+
+	final static private Logger logger = LoggerFactory
+			.getLogger(JDBCStoreProviderWriter.class);
+
+        protected Appender appender;
+
+	public JDBCStoreProviderWriter(JDBCStoreParameters params,
+			DataStoreProviderServices storeServices)
+			throws InitializeException {
+		super(params, storeServices);
+                this.appender = this.createAppender();
+	}
+
+	protected JDBCStoreProviderWriter(JDBCStoreParameters params,
+			DataStoreProviderServices storeServices, DynObject metadata)
+			throws InitializeException {
+		super(params, storeServices, metadata);
+                this.appender = this.createAppender();
+	}
+
+        protected Appender createAppender() {
+            return new JDBCAppender(this);
+        }
+
+        public boolean supportsAppendMode() {
+            return true;
+        }
+
+        public void endAppend() throws DataException {
+            this.appender.end();
+        }
+
+        public void beginAppend() throws DataException {
+            this.appender.begin();
+        }
+
+        public void append(final FeatureProvider featureProvider) throws DataException {
+            this.appender.append(featureProvider);
+        }
+
+	protected void addToListFeatureValues(FeatureProvider featureProvider,
+			FeatureAttributeDescriptor attrOfList,
+			FeatureAttributeDescriptor attr, List<Object> values) throws DataException {
+		if (attr == null) {
+			if (attrOfList.isPrimaryKey()) {
+				throw new RuntimeException("pk attribute '"
+						+ attrOfList.getName() + "' not found in feature");
+			}
+			values.add(helper
+					.dalValueToJDBC(attr, attrOfList.getDefaultValue()));
+		} else {
+			values.add(helper.dalValueToJDBC(attr, featureProvider.get(attr
+					.getIndex())));
+		}
+
+	}
+
+	protected void addToListFeatureValues(FeatureProvider featureProvider,
+			List<FeatureAttributeDescriptor> attributes, List<Object> values) throws DataException {
+		FeatureAttributeDescriptor attr, attrOfList;
+		FeatureType fType = featureProvider.getType();
+		for (int i = 0; i < attributes.size(); i++) {
+			attrOfList = (FeatureAttributeDescriptor) attributes.get(i);
+			attr = fType.getAttributeDescriptor(attrOfList.getName());
+			addToListFeatureValues(featureProvider, attrOfList, attr, values);
+		}
+	}
+
+	protected void appendToSQLPreparedPkWhereClause(StringBuilder sql,
+			List<FeatureAttributeDescriptor> pkAttributes) {
+		sql.append(" Where ");
+		FeatureAttributeDescriptor attr;
+		for (int i = 0; i < pkAttributes.size() - 1; i++) {
+			attr = (FeatureAttributeDescriptor) pkAttributes.get(i);
+			sql.append(helper.escapeFieldName(attr.getName()));
+			sql.append(" = ? AND ");
+		}
+		attr = (FeatureAttributeDescriptor) pkAttributes.get(pkAttributes
+				.size() - 1);
+		sql.append(helper.escapeFieldName(attr.getName()));
+		sql.append(" = ? ");
+	}
+
+	protected void executeRemovePreparedStatement(Connection conn, String sql,
+			List<FeatureAttributeDescriptor> attributes, Iterator<FeatureReferenceProviderServices> featureReferences) throws DataException {
+				PreparedStatement st;
+				try {
+					st = conn.prepareStatement(sql);
+				} catch (SQLException e) {
+					throw new JDBCPreparingSQLException(sql, e);
+				}
+				try {
+					List<Object> values = new ArrayList<Object>();
+					FeatureReferenceProviderServices featureRef;
+//					FeatureType featureType;
+					while (featureReferences.hasNext()) {
+						st.clearParameters();
+						featureRef = featureReferences.next();
+						values.clear();
+//						featureType = this.getFeatureStore()
+//							.getFeatureType(featureRef.getFeatureTypeId());
+
+						Iterator<FeatureAttributeDescriptor> iter = attributes.iterator();
+						FeatureAttributeDescriptor attr;
+						while (iter.hasNext()) {
+							attr =  iter.next();
+							values.add( helper.dalValueToJDBC(attr, featureRef
+									.getKeyValue(attr.getName())));
+						}
+
+						for (int i = 0; i < values.size(); i++) {
+							st.setObject(i + 1, values.get(i));
+						}
+						try {
+							int nAffected =JDBCHelper.executeUpdate(st);
+							if (nAffected == 0) {
+								throw new JDBCUpdateWithoutChangesException(sql, values);
+							}
+							if (nAffected > 1){
+								logger.warn("Remove statement affectst to {} rows: {}",
+										nAffected, sql);
+							}
+
+						} catch (SQLException e) {
+							throw new JDBCExecutePreparedSQLException(sql, values, e);
+						}
+
+					}
+				} catch (SQLException e) {
+					throw new JDBCSQLException(e);
+				} finally {
+					try {st.close();} catch (SQLException e) {	};
+				}
+
+			}
+
+	protected void executeUpdatePreparedStatement(Connection conn, String sql,
+			List<FeatureAttributeDescriptor> attributes, Iterator<FeatureProvider> featureProviders) throws DataException {
+				PreparedStatement st;
+				try {
+					st = conn.prepareStatement(sql);
+				} catch (SQLException e) {
+					throw new JDBCPreparingSQLException(sql, e);
+				}
+				try {
+					List<Object> values = new ArrayList<Object>();
+					FeatureProvider featureProvider;
+					while (featureProviders.hasNext()) {
+						st.clearParameters();
+						featureProvider = (FeatureProvider) featureProviders.next();
+						values.clear();
+						addToListFeatureValues(featureProvider, attributes, values);
+						for (int i = 0; i < values.size(); i++) {
+							st.setObject(i + 1, values.get(i));
+						}
+						try {
+							if ( JDBCHelper.executeUpdate(st) == 0) {
+								throw new JDBCUpdateWithoutChangesException(sql, values);
+							}
+						} catch (SQLException e) {
+							throw new JDBCExecutePreparedSQLException(sql, values, e);
+						}
+
+					}
+				} catch (SQLException e) {
+					throw new JDBCSQLException(e);
+				} finally {
+					try {st.close();} catch (SQLException e) {	};
+				}
+
+			}
+
+	protected void performDeletes(Connection conn, Iterator<FeatureReferenceProviderServices> deleteds, List<FeatureAttributeDescriptor> pkAttributes)
+			throws DataException {
+
+				if (pkAttributes.size() < 0) {
+					throw new RuntimeException("Operation requires missing pk");
+				}
+
+				// ************ Prepare SQL ****************
+				StringBuilder sqlb = new StringBuilder();
+				sqlb.append("Delete from ");
+				sqlb.append(getJDBCParameters().tableID());
+				appendToSQLPreparedPkWhereClause(sqlb, pkAttributes);
+				String sql = sqlb.toString();
+				// ************ Prepare SQL (end) ****************
+
+				executeRemovePreparedStatement(conn, sql, pkAttributes, deleteds);
+			}
+
+	protected String getSqlStatementAddField(FeatureAttributeDescriptor attr,
+			List<String> additionalStatement) throws DataException {
+		StringBuilder strb = new StringBuilder();
+		strb.append("ADD ");
+		strb.append(this.helper.getSqlFieldDescription(attr));
+		return strb.toString();
+	}
+
+	protected String getSqlStatementDropField(FeatureAttributeDescriptor attr,List<String> additionalStatement) {
+		// DROP [ COLUMN ] column
+		return " DROP COLUMN "
+				+ this.helper.escapeFieldName(attr.getName());
+
+	}
+
+	protected List<String> getSqlStatementAlterField(
+			FeatureAttributeDescriptor attrOrg,
+			FeatureAttributeDescriptor attrTrg, List<String> additionalStatement)
+			throws DataException {
+		//
+		List<String> actions = new ArrayList<String>();
+		StringBuilder strb;
+		if (attrOrg.getDataType() != attrTrg.getDataType()) {
+			// ALTER COLUMN {col} TYPE {type} character varying(35)
+			strb = new StringBuilder();
+			strb.append("ALTER COLUMN ");
+			strb.append(helper.escapeFieldName(attrTrg.getName()));
+			strb.append(" ");
+			strb.append(helper.getSqlColumnTypeDescription(attrTrg));
+
+			actions.add(strb.toString());
+		}
+
+		if (attrOrg.allowNull() != attrTrg.allowNull()) {
+			// ALTER [ COLUMN ] column { SET | DROP } NOT NULL
+
+			strb = new StringBuilder();
+			strb.append("ALTER COLUMN ");
+			strb.append(helper.escapeFieldName(attrTrg.getName()));
+			strb.append(' ');
+			if (attrTrg.allowNull()) {
+				strb.append("SET ");
+			} else {
+				strb.append("DROP ");
+			}
+			strb.append("NOT NULL");
+			actions.add(strb.toString());
+		}
+
+		if (attrOrg.getDefaultValue() != attrTrg.getDefaultValue()) {
+			if (attrTrg.getDefaultValue() == null) {
+				// ALTER [ COLUMN ] column DROP DEFAULT
+
+				strb = new StringBuilder();
+				strb.append("ALTER COLUMN ");
+				strb.append(helper.escapeFieldName(attrTrg.getName()));
+				strb.append(" DROP DEFAULT");
+				actions.add(strb.toString());
+			} else if (!attrTrg.getDefaultValue().equals(
+					attrOrg.getDefaultValue())) {
+				// ALTER [ COLUMN ] column DROP DEFAULT
+
+				strb = new StringBuilder();
+				strb.append("ALTER COLUMN ");
+				strb.append(helper.escapeFieldName(attrTrg.getName()));
+				strb.append(" SET DEFAULT");
+				strb.append(helper.dalValueToJDBC(attrTrg, attrTrg
+						.getDefaultValue()));
+				actions.add(strb.toString());
+			}
+		}
+
+		return actions;
+	}
+
+	protected void performUpdateTable(Connection conn, FeatureType original,
+			FeatureType target) throws DataException {
+
+		/*
+		 *
+		 * ALTER TABLE [ ONLY ] name [ * ] action [, ... ]
+		 */
+
+		List<String> toDrop = new ArrayList<String>();
+		List<String> toAdd = new ArrayList<String>();
+		List<String> toAlter = new ArrayList<String>();
+
+		List<String> additionalStatement = new ArrayList<String>();
+
+		FeatureAttributeDescriptor attrOrg;
+		FeatureAttributeDescriptor attrTrg;
+		Iterator<FeatureAttributeDescriptor> attrs = FeatureTypeHelper.iterator(original);
+		while (attrs.hasNext()) {
+			attrOrg = (FeatureAttributeDescriptor) attrs.next();
+			attrTrg = target.getAttributeDescriptor(attrOrg.getName());
+			if (attrTrg == null) {
+				toDrop.add(getSqlStatementDropField(attrOrg,
+						additionalStatement));
+			} else {
+				toAlter.addAll(getSqlStatementAlterField(attrOrg, attrTrg,additionalStatement));
+			}
+
+		}
+		attrs = FeatureTypeHelper.iterator(target);
+		while (attrs.hasNext()) {
+			attrTrg = (FeatureAttributeDescriptor) attrs.next();
+			if (original.getAttributeDescriptor(attrTrg.getName()) == null) {
+				toAdd.add(getSqlStatementAddField(attrTrg,
+								additionalStatement));
+			}
+		}
+
+		StringBuilder sqlb = new StringBuilder();
+
+		sqlb.append("ALTER TABLE ");
+		sqlb.append(getJDBCParameters().tableID());
+		sqlb.append(' ');
+
+		List<String> actions = new ArrayList<String>();
+		actions.addAll(toDrop);
+		actions.addAll(toAlter);
+		actions.addAll(toAdd);
+
+		Iterator<String> it = actions.iterator();
+		while (it.hasNext()) {
+			if (it.next() == null) {
+				it.remove();
+			}
+		}
+
+		it = additionalStatement.iterator();
+		while (it.hasNext()) {
+			if (it.next() == null) {
+				it.remove();
+			}
+		}
+
+		if (actions.size() < 1) {
+			return;
+		}
+
+		helper.stringJoin(actions, ", ", sqlb);
+
+		String sql = sqlb.toString();
+
+		Statement st = null;
+
+		try {
+			st = conn.createStatement();
+		} catch (SQLException e1) {
+			throw new JDBCSQLException(e1);
+		}
+		try {
+			JDBCHelper.execute(st, sql);
+			Iterator<String> iter = additionalStatement.iterator();
+			while (iter.hasNext()) {
+				sql = (String) iter.next();
+                                JDBCHelper.execute(st, sql);
+			}
+		} catch (SQLException e1) {
+			throw new JDBCExecuteSQLException(sql, e1);
+		} finally {
+			try {
+				st.close();
+			} catch (Exception e) {
+				logger.error("Exception closing statement", e);
+			}
+			;
+		}
+
+	}
+
+
+	public void perfomInsert(Connection conn, PreparedStatement insertSt,
+			String sql, FeatureProvider feature, List<FeatureAttributeDescriptor> attributes)
+			throws DataException {
+
+		try {
+			insertSt.clearParameters();
+			List<Object> values = new ArrayList<Object>();
+			addToListFeatureValues(feature, attributes, values);
+//			FeatureAttributeDescriptor attr;
+			int j = 1;
+			for (int i = 0; i < values.size(); i++) {
+				insertSt.setObject(j, values.get(i));
+				j++;
+			}
+			if (logger.isDebugEnabled()) {
+				logger.debug("Executing insert. sql={} value={}", new Object[] {
+						sql, values });
+			}
+			try {
+                                JDBCHelper.execute(insertSt, sql);
+			} catch (SQLException e) {
+				throw new JDBCExecutePreparedSQLException(sql, values, e);
+			}
+
+		} catch (Exception e1) {
+			throw new JDBCExecuteSQLException(sql, e1);
+		}
+	}
+
+
+	protected void prepareAttributeForUpdate(FeatureAttributeDescriptor attr,
+			List<String> values) {
+		values.add(helper.escapeFieldName(attr.getName()) + " = ?");
+	}
+
+	protected void prepareAttributeForInsert(FeatureAttributeDescriptor attr,
+			List<String> fields, List<String> values) {
+
+		fields.add(helper.escapeFieldName(attr.getName()));
+		values.add("?");
+
+	}
+
+
+	protected void prepareSQLAndAttributeListForInsert(StringBuilder sqlb,
+			List<FeatureAttributeDescriptor> attributes) throws DataException {
+		/*
+		 * INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES (
+		 * { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * |
+		 * output_expression [ AS output_name ] [, ...] ]
+		 */
+
+		sqlb.append("INSERT INTO ");
+		sqlb.append(getJDBCParameters().tableID());
+
+		sqlb.append(" (");
+
+		FeatureType type = this.getFeatureStore().getDefaultFeatureType();
+
+		List<String> fields = new ArrayList<String>();
+		List<String> values = new ArrayList<String>();
+
+		Iterator<FeatureAttributeDescriptor> iter = FeatureTypeHelper.iterator(type);
+		FeatureAttributeDescriptor attr;
+		while (iter.hasNext()) {
+			attr = iter.next();
+			if (attr.isAutomatic() || attr.isReadOnly()) {
+				continue;
+			}
+			attributes.add(attr);
+			prepareAttributeForInsert(attr, fields, values);
+
+		}
+		if (attributes.size() < 1) {
+			throw new RuntimeException("no fields to set");
+		}
+
+		helper.stringJoin(fields, ", ", sqlb);
+
+		sqlb.append(") VALUES (");
+		helper.stringJoin(values, ", ", sqlb);
+
+		sqlb.append(") ");
+
+	}
+
+
+	protected void performInserts(Connection conn, Iterator<FeatureProvider> inserteds)
+			throws DataException {
+
+		StringBuilder sqlb = new StringBuilder();
+		List<FeatureAttributeDescriptor> attrs = new ArrayList<FeatureAttributeDescriptor>();
+
+		prepareSQLAndAttributeListForInsert(sqlb, attrs);
+
+		String sql = sqlb.toString();
+		PreparedStatement st;
+		try {
+			st = conn.prepareStatement(sql);
+		} catch (SQLException e) {
+			throw new JDBCPreparingSQLException(sql, e);
+		}
+		try {
+			while (inserteds.hasNext()) {
+				perfomInsert(conn, st, sql, inserteds.next(),
+						attrs);
+			}
+		} finally {
+			try {st.close();} catch (SQLException e) {logger.error("Error closing statement", e);};
+		}
+	}
+
+	protected void performUpdates(Connection conn, Iterator<FeatureProvider> updateds,
+			List<FeatureAttributeDescriptor> pkAttributes) throws DataException {
+		/*
+		 * UPDATE [ ONLY ] table [ [ AS ] alias ] SET { column = { expression |
+		 * DEFAULT } | ( column [, ...] ) = ( { expression | DEFAULT } [, ...] )
+		 * } [, ...] [ FROM fromlist ] [ WHERE condition ] [ RETURNING * |
+		 * output_expression [ AS output_name ] [, ...] ]
+		 */
+
+		if (pkAttributes.size() < 0) {
+			throw new RuntimeException("Operation requires missing pk");
+		}
+
+		// ************ Prepare SQL ****************
+
+		StringBuilder sqlb = new StringBuilder();
+		sqlb.append("UPDATE ");
+		sqlb.append(getJDBCParameters().tableID());
+
+		sqlb.append(" SET ");
+
+		List<String> values = new ArrayList<String>();
+
+		FeatureType type = this.getFeatureStore().getDefaultFeatureType();
+
+		Iterator<FeatureAttributeDescriptor> iter = FeatureTypeHelper.iterator(type);
+		FeatureAttributeDescriptor attr;
+		List<FeatureAttributeDescriptor> updateAttrs = new ArrayList<FeatureAttributeDescriptor>();
+		while (iter.hasNext()) {
+			attr = iter.next();
+			if (attr.isPrimaryKey() || attr.isAutomatic() || attr.isReadOnly()) {
+				continue;
+			}
+			updateAttrs.add(attr);
+			prepareAttributeForUpdate(attr, values);
+
+		}
+		if (updateAttrs.size() < 1) {
+			throw new RuntimeException("no fields to set");
+		}
+
+		helper.stringJoin(values, ", ", sqlb);
+
+		sqlb.append(' ');
+		appendToSQLPreparedPkWhereClause(sqlb, pkAttributes);
+
+		String sql = sqlb.toString();
+		// ************ Prepare SQL (end) ****************
+
+		updateAttrs.addAll(pkAttributes);
+
+		executeUpdatePreparedStatement(conn, sql, updateAttrs, updateds);
+	}
+
+
+
+	protected TransactionalAction getPerformChangesAction(
+			final Iterator<FeatureReferenceProviderServices> deleteds, 
+			final Iterator<FeatureProvider> inserteds,
+			final Iterator<FeatureProvider> updateds, 
+			final Iterator<FeatureTypeChanged> featureTypesChanged) {
+
+		TransactionalAction action = new TransactionalAction() {
+
+			public Object action(Connection conn) throws DataException {
+
+				if (featureTypesChanged.hasNext()) {
+
+					FeatureTypeChanged item = featureTypesChanged.next();
+					performUpdateTable(conn, item.getSource(), item.getTarget());
+				}
+
+				List<FeatureAttributeDescriptor> pkAttributes = null;
+				if (deleteds.hasNext() || updateds.hasNext()) {
+					pkAttributes = Arrays.asList(getFeatureStore()
+							.getDefaultFeatureType()
+							.getPrimaryKey());
+				}
+
+				if (deleteds.hasNext()) {
+					performDeletes(conn, deleteds, pkAttributes);
+				}
+
+				if (updateds.hasNext()) {
+					performUpdates(conn, updateds, pkAttributes);
+				}
+
+				if (inserteds.hasNext()) {
+					performInserts(conn, inserteds);
+				}
+
+				return null;
+			}
+
+			public boolean continueTransactionAllowed() {
+				return false;
+			}
+
+		};
+
+		return action;
+
+	}
+
+	@SuppressWarnings("unchecked")
+	public void performChanges(Iterator deleteds, Iterator inserteds,
+			Iterator updateds, Iterator featureTypesChanged)
+			throws PerformEditingException {
+
+		boolean countChanged = deleteds.hasNext() || inserteds.hasNext();
+
+		try {
+			this.helper.doConnectionAction(getPerformChangesAction(deleteds,
+					inserteds, updateds, featureTypesChanged));
+
+			/*
+			 * Get rules before initializing feature type
+			 */
+			FeatureRules old_rules = getFeatureStore().getDefaultFeatureType().getRules();
+			
+			/*
+			 * This initialization loses the feature type rules
+			 */
+			this.initFeatureType();
+			
+			/*
+			 * Get new feature type, clear rules and add
+			 * the ones saved previously
+			 */
+			FeatureType ft = getFeatureStore().getDefaultFeatureType();
+			FeatureRules new_rules = ft.getRules();
+			new_rules.clear();
+			for (int i=0; i<old_rules.size(); i++) {
+			    new_rules.add(old_rules.getRule(i));
+			}
+			// ===================================================
+			
+			if (countChanged) {
+				resetCount();
+			}
+
+		} catch (Exception e) {
+			throw new PerformEditingException(this.getSourceId().toString(), e);
+		}
+	}
+
+
+	public boolean allowWrite() {
+		if (directSQLMode) {
+			return false;
+		}
+		
+        FeatureType ft = null;
+        try {
+            ft = this.getFeatureStore().getDefaultFeatureType();
+        } catch (DataException e) {
+            logger.error("While getting default Feature Type", e);
+        }
+        
+        String[] storePK = getPK(ft);
+        JDBCHelper helper = this.getHelper();
+        String[] dbPK = null;
+        try {
+            Connection conn = helper.getConnection();
+            dbPK = helper.getPksFrom(conn, getJDBCParameters());
+            conn.close();
+        } catch (Exception exc) {
+            logger.error("While getting PK from DB", exc);
+            return false;
+        }
+        return sameStrings(storePK, dbPK);
+	}
+
+    private boolean sameStrings(String[] a, String[] b) {
+        
+        if (a==null || b==null || a.length!=b.length || a.length==0) {
+            /*
+             * Must not be empty
+             */
+            return false;
+        }
+        int len = a.length;
+        boolean found = false;
+        /*
+         * Check same 
+         */
+        for (int ai=0; ai<len; ai++) {
+            found = false;
+            for (int bi=0; bi<len; bi++) {
+                if (b[bi].compareTo(a[ai]) == 0) {
+                    found = true;
+                    break;
+                }
+            }
+            if (! found) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private String[] getPK(FeatureType ft) {
+        
+        List resp = new ArrayList();
+        FeatureAttributeDescriptor attr;
+        Iterator<FeatureAttributeDescriptor> iter = FeatureTypeHelper.iterator(ft);
+        while (iter.hasNext()) {
+            attr = (FeatureAttributeDescriptor) iter.next();
+            if (attr.isPrimaryKey()) {
+                resp.add(attr.getName());
+            }
+        }
+        return (String[]) resp.toArray(new String[0]);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProviderWriter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCLibrary.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.resource.db.DBResourceLibrary;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.fmap.dal.store.db.DBStoreLibrary;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Initialize JDBC Provider Library
+ * 
+ * @author jmvivo
+ *
+ */
+public class JDBCLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+        require(DBStoreLibrary.class);
+        require(DBResourceLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		LibraryException ex=null;
+		
+		DBHelper.registerParametersDefinition(
+				 JDBCStoreParameters.PARAMETERS_DEFINITION_NAME,
+				 JDBCStoreParameters.class,
+				 "JDBCParameters.xml"
+		);
+		DBHelper.registerParametersDefinition(
+				JDBCNewStoreParameters.PARAMETERS_DEFINITION_NAME,
+				JDBCNewStoreParameters.class,
+				"JDBCParameters.xml"
+		);
+		DBHelper.registerParametersDefinition(
+				JDBCServerExplorerParameters.PARAMETERS_DEFINITION_NAME, 
+				JDBCServerExplorerParameters.class, 
+				"JDBCParameters.xml"
+		);
+		DBHelper.registerParametersDefinition(
+				JDBCResourceParameters.PARAMETERS_DEFINITION_NAME, 
+				JDBCResourceParameters.class, 
+				"JDBCParameters.xml"
+		);
+		
+		try {
+			DBHelper.registerMetadataDefinition(
+					JDBCStoreProvider.METADATA_DEFINITION_NAME, 
+					JDBCStoreProvider.class, 
+					"JDBCMetadata.xml"
+			);
+		} catch (MetadataException e) {
+			ex = new LibraryException(this.getClass(),e);
+		}
+		
+		
+    	ResourceManagerProviderServices resman = (ResourceManagerProviderServices) DALLocator
+		.getResourceManager();
+
+		if (!resman.getResourceProviders().contains(JDBCResource.NAME)) {
+			resman.register(JDBCResource.NAME, JDBCResource.DESCRIPTION,
+					JDBCResource.class, JDBCResourceParameters.class);
+		}
+		
+		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+				.getDataManager();
+		
+		
+		if (!dataman.getStoreProviders().contains(JDBCStoreProvider.NAME)) {
+			dataman.registerStoreProvider(JDBCStoreProvider.NAME,
+					JDBCStoreProviderWriter.class, JDBCStoreParameters.class);
+		}
+		
+		if (!dataman.getExplorerProviders().contains(JDBCStoreProvider.NAME)) {
+			dataman.registerExplorerProvider(JDBCServerExplorer.NAME,
+					JDBCServerExplorer.class,
+					JDBCServerExplorerParameters.class);
+		}
+		
+		if( ex!=null ) {
+			throw ex;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCSetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCSetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCSetProvider.java	(revision 42196)
@@ -0,0 +1,411 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureSetProvider;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorFieldValue;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCSetProvider extends AbstractFeatureSetProvider {
+
+	final static private Logger logger = LoggerFactory
+			.getLogger(JDBCSetProvider.class);
+
+	protected String filter;
+	protected String order;
+	protected Long size = null;
+	protected Boolean isEmpty = null;
+
+	protected List resultSetIDReferenced;
+
+	private JDBCHelper helper = null;
+
+	private int defaultFetchSize = 1000;
+
+	private long limit = -1l;
+
+    private boolean directSQLMode;
+
+	public JDBCSetProvider(JDBCStoreProvider store, FeatureQuery query,
+			FeatureType featureType) throws DataException {
+		super(store, query, featureType);
+		this.helper = store.getHelper();
+		this.resultSetIDReferenced = new ArrayList();
+		this.directSQLMode =  store.isDirectSQLMode();
+	
+		if (query.hasFilter() && this.canFilter()) {
+			setFilter(query.getFilter());
+		} else {
+			setFilter(null);
+		}
+
+		if (query.hasOrder() && canOrder()) {
+			setOrder(query.getOrder());
+		} else {
+			setOrder(null);
+		}
+
+		if (query != null) {
+			limit = query.getLimit();
+		}
+	}
+
+	/**
+	 * @return the defaultFetchSize
+	 */
+	public int getDefaultFetchSize() {
+		return defaultFetchSize;
+	}
+
+	/**
+	 * @param defaultFetchSize
+	 *            the defaultFetchSize to set
+	 */
+	public void setDefaultFetchSize(int defaultFetchSize) {
+		this.defaultFetchSize = defaultFetchSize;
+	}
+
+	protected String getSqlForEvaluator(Evaluator filter) {
+		if (filter == null) {
+			return null;
+		}
+		EvaluatorFieldsInfo info = filter.getFieldsInfo();
+		String filterString = filter.getSQL();
+		if (info == null) {
+			return filterString;
+		}
+		String[] filterNames = info.getFieldNames();
+		String[] finalNames = new String[filterNames.length];
+		EvaluatorFieldValue[] fValues;
+
+		List values = new ArrayList();
+
+		FeatureAttributeDescriptor attr;
+		for (int i = 0; i < filterNames.length; i++) {
+			attr = getFeatureType().getAttributeDescriptor(filterNames[i]);
+			if (attr == null) {
+				finalNames[i] = filterNames[i];
+				continue;
+			}
+			finalNames[i] = getEscapedFieldName(attr.getName());
+
+		}
+
+		for (int i = 0; i < filterNames.length; i++) {
+			if (!filterNames[i].equals(finalNames[i])) {
+				filterString = filterString.replaceAll(
+						"\\b" + filterNames[i] + "\\b",
+						finalNames[i]);
+			}
+		}
+
+		return filterString;
+	}
+
+
+	protected String getEscapedFieldName(String fieldName) {
+		if (helper == null) {
+			helper = getJDBCStoreProvider().getHelper();
+		}
+		return helper.escapeFieldName(fieldName);
+	}
+
+
+	protected void setOrder(FeatureQueryOrder order) {
+		if (order == null || order.size() == 0) {
+			this.order = null;
+			return;
+		}
+
+		StringBuilder buffer = new StringBuilder();
+		Iterator iter = order.iterator();
+		FeatureQueryOrderMember menber;
+		while (true) {
+			menber = (FeatureQueryOrderMember) iter.next();
+			if (menber.hasEvaluator()) {
+				buffer.append(getSqlForEvaluator(menber.getEvaluator()));
+			} else {
+				buffer.append(getEscapedFieldName(menber.getAttributeName()));
+			}
+			if (menber.getAscending()) {
+				buffer.append(" ASC");
+			} else {
+				buffer.append(" DESC");
+			}
+			if (iter.hasNext()) {
+				buffer.append(", ");
+			} else {
+				buffer.append(' ');
+				break;
+			}
+		}
+
+		this.order = buffer.toString();
+	}
+
+	protected void setFilter(Evaluator filter) {
+		this.filter = getSqlForEvaluator(filter);
+	}
+
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#canFilter()
+	 */
+	public boolean canFilter() {
+		Evaluator filter = getQuery().getFilter();
+		if (directSQLMode){
+		    return false;
+		}
+		if (filter != null) {
+			if (filter.getSQL() == null || filter.getSQL().length() == 0) {
+				return false;
+			} else {
+				// TODO Check Geom fields if
+				EvaluatorFieldsInfo fInfo = filter.getFieldsInfo();
+				if (fInfo == null || fInfo.getFieldNames() == null) {
+					return true;
+				}
+				Iterator names = Arrays.asList(fInfo.getFieldNames())
+						.iterator();
+				String name;
+				int type;
+				while (names.hasNext()) {
+					name = (String) names.next();
+					type =
+							this.getFeatureType()
+									.getAttributeDescriptor(name)
+							.getType();
+					if (type == DataTypes.GEOMETRY
+							&& !this.helper.supportsGeometry()) {
+						return false;
+					}
+
+
+
+				}
+
+				return true;
+			}
+
+		} else{
+			return false;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#canIterateFromIndex()
+	 */
+	public boolean canIterateFromIndex() {
+		return helper.supportOffset();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#canOrder()
+	 */
+	public boolean canOrder() {
+	    if (directSQLMode){
+	        return false;
+	    }
+		// TODO Check Geom fields if postgis not are available
+		FeatureQuery query = getQuery();
+		if (query.hasOrder()) {
+			Iterator iter = query.getOrder().iterator();
+			FeatureQueryOrderMember menber;
+			String sql;
+			while (iter.hasNext()){
+				menber = (FeatureQueryOrderMember) iter.next();
+				if (menber.hasEvaluator()){
+					sql = menber.getEvaluator().getSQL();
+					if (sql == null || sql.length() == 0) {
+						return false;
+					}
+				}
+			}
+		}
+		return true;
+	}
+
+	private JDBCStoreProvider getJDBCStoreProvider() {
+		return (JDBCStoreProvider) getStore();
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+		if (resultSetIDReferenced != null) {
+			Iterator iter = resultSetIDReferenced.iterator();
+			Integer resID;
+			while (iter.hasNext()) {
+				resID = (Integer) iter.next();
+				if (resID != null) {
+					logger.warn(
+						"ResultSet (ID {}) not closed on dispose, will close",
+						resID);
+					try {
+						getJDBCStoreProvider().closeResulset(resID.intValue());
+					} catch (DataException e) {
+						logger.error("Close resulset Exception", e);
+					}
+				}
+				iter.remove();
+			}
+		}
+		resultSetIDReferenced = null;
+		filter = null;
+		order = null;
+		size = null;
+		isEmpty = null;
+	}
+
+	protected String getSQL(long fromIndex) throws DataException {
+		return getJDBCStoreProvider().compoundSelect(getFeatureType(), filter,
+				order, limit, fromIndex);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#getSize()
+	 */
+	public long getSize() throws DataException {
+		if (size == null) {
+			size = new Long(getJDBCStoreProvider().getCount(filter));
+		}
+		return size.longValue();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#isEmpty()
+	 */
+	public boolean isEmpty() throws DataException {
+		JDBCStoreProvider store = getJDBCStoreProvider();
+		if (isEmpty == null) {
+			if (size == null) {
+				String sql =
+						store.compoundSelect(getFeatureType(), filter, null, 1,
+								0);
+				int rsID = store.createResultSet(sql, getFetchSize());
+				isEmpty = new Boolean(!store.resulsetNext(rsID));
+				store.closeResulset(rsID);
+			} else {
+				isEmpty = new Boolean(size.longValue() < 1);
+			}
+		}
+		return isEmpty.booleanValue();
+	}
+
+	protected int getFetchSize() {
+		long pageSize = -1;
+		if (getQuery() != null) {
+			pageSize = getQuery().getPageSize();
+			pageSize =
+					pageSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : pageSize;
+		}
+		return (pageSize > 0 ? (int) pageSize : defaultFetchSize);
+	}
+
+	protected JDBCIterator createFastIterator(long index) throws DataException {
+		if (isEmpty != null && isEmpty.booleanValue()) {
+			return new EmptyJDBCIterator(getJDBCStoreProvider());
+		}
+		int rsID =
+				getJDBCStoreProvider().createResultSet(getSQL(index),
+						getFetchSize());
+		return createDefaultFastIterator(rsID);
+	}
+
+	protected JDBCIterator createDefaultFastIterator(int resultSetID)
+			throws DataException {
+		return new JDBCFastIterator(getJDBCStoreProvider(), this,
+				getFeatureType(), resultSetID);
+	}
+
+	protected JDBCIterator createIterator(long index) throws DataException {
+        if (isEmpty != null && isEmpty.booleanValue()) {
+            return new EmptyJDBCIterator(getJDBCStoreProvider());
+        }
+        int rsID =
+                getJDBCStoreProvider().createResultSet(getSQL(index),
+                        getFetchSize());
+        return createDefaultIterator(rsID);
+	}
+
+	protected JDBCIterator createDefaultIterator(int resultSetID)
+			throws DataException {
+		return new JDBCIterator(getJDBCStoreProvider(), this, getFeatureType(),
+				resultSetID);
+	}
+
+	public void addResulsetReference(int resulsetID) {
+		this.resultSetIDReferenced.add(new Integer(resulsetID));
+	}
+
+	public void removeResulsetReference(int resulsetID) {
+		this.resultSetIDReferenced.remove(new Integer(resulsetID));
+	}
+
+	private class EmptyJDBCIterator extends JDBCIterator {
+
+		protected EmptyJDBCIterator(JDBCStoreProvider store) throws DataException {
+			super(store, null, null, -1);
+		}
+
+		@Override
+		protected boolean internalHasNext() {
+			return false;
+		}
+
+		@Override
+		protected Object internalNext() {
+			throw new NoSuchElementException();
+		}
+
+		@Override
+		protected void doDispose() throws BaseException {
+			// nothing to do
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCSetProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProvider.java	(revision 42196)
@@ -0,0 +1,915 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.security.InvalidParameterException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.fmap.dal.store.db.FeatureTypeHelper;
+import org.gvsig.fmap.dal.store.jdbc.exception.InvalidResultSetIdException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecutePreparedSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCStoreProvider extends AbstractFeatureStoreProvider
+		implements JDBCHelperUser {
+
+	final static private Logger logger = LoggerFactory
+			.getLogger(JDBCStoreProvider.class);
+
+	private List<ResultSetInfo> resulsetList;
+
+	public static String NAME = "JDBC";
+	public static String DESCRIPTION = "JDBC source";
+
+	public static final String METADATA_DEFINITION_NAME = NAME;
+
+	private long mlsecondsToZombie = 1000 * 60 * 10; // 10 Min
+
+	protected JDBCHelper helper;
+
+	protected boolean directSQLMode;
+
+	private Long totalCount = null;
+	private GeometryManager geomManager = null;
+
+	public JDBCStoreProvider(JDBCStoreParameters params,
+			DataStoreProviderServices storeServices) throws InitializeException {
+		this(
+				params, 
+				storeServices,
+				DBHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
+		);
+	}
+
+	protected JDBCStoreProvider(JDBCStoreParameters params,
+			DataStoreProviderServices storeServices, DynObject metadata)
+			throws InitializeException {
+		super(params, storeServices, metadata);
+		geomManager = GeometryLocator.getGeometryManager();
+		
+		resulsetList = new ArrayList<ResultSetInfo>(10);
+
+		helper = createHelper();
+		if (params.getSQL() != null && (params.getSQL()).trim().length() > 0) {
+			directSQLMode = true;
+		}
+
+		this.initFeatureType();
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		try {
+			if( DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name) ) {
+				Envelope env = this.getEnvelope();
+				if( env != null ) {
+					return env;
+				}
+			} else if( DataStore.METADATA_CRS.equalsIgnoreCase(name) ) {
+				IProjection proj;
+				proj = this.getFeatureStore().getDefaultFeatureType().getDefaultSRS();
+				if( proj != null ) {
+					return proj;
+				}
+			}
+		} catch (DataException e) {
+			throw new RuntimeException(e);
+		}
+		return super.getDynValue(name);
+	}
+	
+
+	protected JDBCStoreParameters getJDBCParameters() {
+		return (JDBCStoreParameters) this.getParameters();
+	}
+
+
+	/**
+	 * Load data form a resulset.<br>
+	 *
+	 * <strong>Note:</strong><br>
+	 * this method have to perform <code>resouceBegin</code> at the begining and
+	 * <code>resourceEnd</code> at the end of execution.
+	 *
+	 *
+	 * @param data
+	 * @param resulsetID
+	 *
+	 * @return
+	 * @throws DataException
+	 */
+	public void loadFeatureProvider(final FeatureProvider data, final int resultsetID)
+			throws DataException {
+		getResource().execute(new ResourceAction() {
+			public Object run() throws Exception {
+				ResultSet rs = getResultSet(resultsetID);
+				FeatureAttributeDescriptor attr;
+				Iterator<FeatureAttributeDescriptor> iter = FeatureTypeHelper.iterator(data.getType());
+				while (iter.hasNext()) {
+					attr = iter.next();
+					loadFeatureProviderValue(data, rs, attr);
+				}
+				return null;
+			}
+                        public String toString() {
+                            return "loadFeature";
+                        }
+
+		});
+	}
+
+	protected void loadFeatureProviderValue(FeatureProvider data, ResultSet rs,
+			FeatureAttributeDescriptor attr) throws DataException {
+		if (attr.getType() == DataTypes.GEOMETRY) {
+			byte[] buffer;
+			try {
+				buffer = rs.getBytes(attr.getIndex() + 1);
+				if (buffer == null) {
+					data.set(attr.getIndex(), null);
+				} else {
+					data.set(attr.getIndex(), this.helper.getGeometry(buffer));
+				}
+			} catch (SQLException e) {
+				throw new JDBCSQLException(e);
+			} catch (BaseException e) {
+				throw new ReadException(getProviderName(), e);
+			}
+
+		} else {
+			try {
+				data.set(attr.getIndex(), rs.getObject(attr.getIndex() + 1));
+			} catch (SQLException e) {
+				throw new JDBCSQLException(e);
+			}
+		}
+	}
+
+	public long getTimeToResulSetZombie() {
+		return mlsecondsToZombie;
+	}
+
+	public void setTimeToResulSetZombie(long mlSeconds) {
+		mlsecondsToZombie = mlSeconds;
+	}
+
+	private class ResultSetInfo{
+		private ResultSet resultSet = null;
+		private long lastUse = 0;
+
+		public ResultSetInfo(ResultSet resulSet) {
+			this.resultSet = resulSet;
+			used();
+		}
+
+		private void used() {
+			lastUse = System.currentTimeMillis();
+		}
+
+
+		public ResultSet get() {
+			used();
+			return resultSet;
+		}
+
+		public boolean isZombie() {
+			return System.currentTimeMillis() - lastUse > mlsecondsToZombie;
+		}
+	}
+
+	public final int createResultSet(String sql, int fetchSize)
+			throws DataException {
+        return createResultSet(sql, null, fetchSize);
+	}
+
+	public final int createResultSet(final String sql, final Object[] values,
+			final int fetchSize)
+			throws DataException {
+		synchronized (this) {
+			checksResulsets();
+			return ((Integer) getResource().execute(new ResourceAction() {
+				public Object run() throws Exception {
+					ResultSetInfo newRs =
+							new ResultSetInfo(createNewResultSet(sql, values,
+									fetchSize));
+					int newId = getNewId();
+					if (newId < 0) {
+						newId = resulsetList.size();
+						resulsetList.add(newRs);
+					} else {
+						resulsetList.set(newId, newRs);
+					}
+					logger.debug("Created resultset id: {} (total open: {})",
+							newId, getResultsetOpenCount());
+
+					return Integer.valueOf(newId);
+				}
+			})).intValue();
+		}
+	}
+
+	private int getNewId() {
+		int newId;
+		if (resulsetList.size() < 1) {
+			return -1;
+		}
+		for (newId = 0; newId < resulsetList.size(); newId++) {
+			if (resulsetList.get(newId) == null) {
+				return newId;
+			}
+		}
+		return -1;
+	}
+
+	protected final void forceCloseAllResultSet()
+			throws ResourceExecuteException,
+			JDBCException {
+		synchronized (this) {
+			// FIXME: Esto no deberia funcionar. 
+			Iterator iter = resulsetList.iterator();
+			Integer rsID = null;
+			while (iter.hasNext()) {
+				rsID = (Integer) iter.next();
+				if (rsID != null) {
+					try {
+						forceCloseResultSet(rsID.intValue());
+					} catch (InvalidResultSetIdException e) {
+						continue;
+					}
+				}
+				iter.remove();
+			}
+
+		}
+	}
+	
+	protected final void forceCloseResultSet(int rsID)
+			throws ResourceExecuteException, JDBCException,
+			InvalidResultSetIdException {
+		logger.warn("Close forced of resultSet ({})", rsID);
+		closeResulset(rsID);
+	}
+
+	protected final ResultSet getResultSet(int resultsetID)
+			throws InvalidResultSetIdException {
+		if (resultsetID >= resulsetList.size()) {
+			throw new InvalidResultSetIdException(resultsetID);
+		}
+		ResultSetInfo rsInfo = resulsetList.get(resultsetID);
+		if (rsInfo == null) {
+			throw new InvalidResultSetIdException(resultsetID);
+		}
+		return rsInfo.get();
+
+	}
+
+	private ResultSet dropResultSet(int resultsetID)
+			throws InvalidResultSetIdException {
+		if (resultsetID >= resulsetList.size()) {
+			throw new InvalidResultSetIdException(resultsetID);
+		}
+		ResultSetInfo rsInfo = (ResultSetInfo) resulsetList.get(resultsetID);
+		if (rsInfo == null) {
+			throw new InvalidResultSetIdException(resultsetID);
+		}
+		if (resultsetID == resulsetList.size() - 1) {
+			resulsetList.remove(resultsetID);
+		} else {
+			resulsetList.set(resultsetID, null);
+		}
+		return rsInfo.get();
+	}
+
+
+	public final boolean resulsetNext(final int resultsetID)
+			throws JDBCException,
+			InvalidResultSetIdException, ResourceExecuteException {
+		return ((Boolean) getResource().execute(new ResourceAction() {
+			public Object run() throws Exception {
+			    boolean bool = getResultSet(resultsetID).next();
+				return Boolean.valueOf(bool);
+			}
+		})).booleanValue();
+	}
+
+	public final void closeResulset(final int resultsetID)
+			throws JDBCException,
+			InvalidResultSetIdException, ResourceExecuteException {
+		synchronized (this) {
+			getResource().execute(new ResourceAction() {
+				public Object run() throws Exception {
+					ResultSet rs = dropResultSet(resultsetID);
+					closeResulset(rs);
+					return null;
+				}
+			});
+			if (logger.isDebugEnabled()) {
+				logger.debug(" id: " + resultsetID + " (total "
+						+ getResultsetOpenCount() + ")");
+			}
+			checksResulsets();
+		}
+	}
+
+	public final void checksResulsets() throws JDBCException,
+			InvalidResultSetIdException, ResourceExecuteException {
+		synchronized (this) {
+			getResource().execute(new ResourceAction() {
+				public Object run() throws Exception {
+					ResultSetInfo rsInfo;
+					for (int i = 0; i < resulsetList.size(); i++) {
+						rsInfo = (ResultSetInfo) resulsetList.get(i);
+						if (rsInfo == null) {
+							continue;
+						}
+						if (rsInfo.isZombie()) {
+							forceCloseResultSet(i);
+						}
+					}
+					return null;
+				}
+			});
+		}
+	}
+
+	protected void closeResulset(final ResultSet rs) throws JDBCException,
+			ResourceExecuteException {
+		getResource().execute(new ResourceAction() {
+			public Object run() throws Exception {
+				Statement st = rs.getStatement();
+				Connection con = st.getConnection();
+				try {
+					rs.close();
+				} finally {
+					// TODO revisar esto
+					try{ st.close();  } catch (Exception ex){ };
+					try{ con.close(); } catch (Exception ex){ };
+				}
+				return null;
+			}
+		});
+	}
+
+	private int getResultsetOpenCount() {
+		int count = 0;
+		Iterator<ResultSetInfo> iter = resulsetList.iterator();
+		while (iter.hasNext()) {
+			if (iter.next() != null) {
+				count++;
+			}
+		}
+		return count;
+	}
+
+	protected final int openResulsetCount() {
+		int count = 0;
+		Iterator<ResultSetInfo> iter = resulsetList.iterator();
+		while (iter.hasNext()) {
+			if (iter.next() != null) {
+				count++;
+			}
+		}
+		return count;
+	}
+
+	public boolean closeResourceRequested(ResourceProvider resource) {
+		try {
+			checksResulsets();
+			return openResulsetCount() == 0 && closeResource(resource);
+		} catch (DataException e) {
+			logger.error("Exception throws", e);
+			return false;
+		}
+	}
+
+
+	protected String fixFilter(String filter) {
+		if (filter == null) {
+			return null;
+		}
+
+		return filter;
+	}
+
+	protected JDBCHelper createHelper() throws InitializeException {
+		return new JDBCHelper(this, getJDBCParameters());
+	}
+
+	protected JDBCHelper getHelper() {
+		return helper;
+	}
+
+	protected void resetCount() {
+		totalCount = null;
+	}
+
+	/**
+	 * Get feature count for a <code>filter</code>.<br>
+	 *
+	 * <code>filter</code> can be <code>null</code>.<br>
+	 *
+	 * <strong>Note:</strong><br>
+	 * this method have to perform <code>resouceBegin</code> at the begining and
+	 * <code>resourceEnd</code> at the end of execution.
+	 *
+	 *
+	 * @param filter
+	 * @return
+	 * @throws DataException
+	 */
+	protected long getCount(String filter)
+			throws DataException {
+		this.open();
+		if (filter == null && totalCount != null) {
+			return totalCount.longValue();
+		}
+		final String sql = compoundCountSelect(filter);
+
+		long count = ((Long) getResource().execute(new ResourceAction() {
+			public Object run() throws Exception {
+				long count = 0;
+				ResultSet rs = createNewResultSet(sql, null, 1);
+				try {
+					if (rs.next()) {
+						count = rs.getLong(1);
+					}
+				} catch (SQLException e) {
+					throw new JDBCSQLException(e);
+				} finally {
+					closeResulset(rs);
+				}
+				return Long.valueOf(count);
+			}
+		})).longValue();
+
+		if (filter == null) {
+			totalCount = new Long(count);
+		}
+		return count;
+	}
+
+	public void close() throws CloseException {
+		helper.close();
+	}
+
+	public void open() throws OpenException {
+		helper.open();
+	}
+
+	@Override
+	protected FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference) throws DataException {
+		return internalGetFeatureProviderByReference(reference,
+				getFeatureStore()
+				.getDefaultFeatureType());
+	}
+
+	/**
+	 * Return "is null" expression for current provider<br/>
+	 */
+	protected String getIsNullExpression() {
+	    return "is null";
+	}
+	
+	@Override
+	protected FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference,
+			FeatureType featureType)
+			throws DataException {
+		StringBuilder filter = new StringBuilder();
+		FeatureAttributeDescriptor[] pk =
+				getFeatureStore().getFeatureType(featureType.getId())
+						.getPrimaryKey();
+
+		List<Object> values = new ArrayList<Object>();
+
+		int i;
+		Object value;
+		for (i = 0; i < pk.length; i++) {
+		    value = reference.getKeyValue(pk[i].getName());
+		    filter.append(helper.getSqlFieldName(pk[i]));
+		    if (value == null) {
+		        filter.append(" ");
+		        filter.append(getIsNullExpression());
+		        filter.append("");
+		    } else {
+			values.add(helper.dalValueToJDBC(pk[i], value));
+			filter.append(" = ? ");
+		    }
+		    if (i < pk.length -1) {
+		        filter.append(" AND ");
+		    }
+		}
+		String sql = compoundSelect(featureType, filter.toString(), null, 1, 0);
+
+		FeatureProvider data;
+		int rsId = createResultSet(sql, values.toArray(), 1);
+		try {
+			if (!resulsetNext(rsId)) {
+				throw new RuntimeException("Reference Not found");
+			}
+			data = createFeatureProvider(featureType);
+			loadFeatureProvider(data, rsId);
+		} finally {
+			closeResulset(rsId);
+		}
+
+		return data;
+	}
+
+	public int getOIDType() {
+		return DataTypes.UNKNOWN;
+	}
+
+	protected void initFeatureType() throws InitializeException {
+
+		EditableFeatureType edFType = null;
+		try {
+			edFType = this.getStoreServices().createFeatureType(getName());
+
+			helper.loadFeatureType(edFType, getJDBCParameters());
+
+		} catch (DataException e) {
+			throw new InitializeException(this.getProviderName(), e);
+		}
+
+		FeatureType defaultType = edFType.getNotEditableCopy();
+		List<FeatureType> types = Collections.singletonList(defaultType);
+		this.getStoreServices().setFeatureTypes(types, defaultType);
+	}
+
+	protected ResultSet createNewResultSet(final String sql,
+			final Object[] values, final int fetchSize)
+			throws DataException {
+		this.open();
+		return (ResultSet) getResource().execute(new ResourceAction() {
+			public Object run() throws Exception {
+				Connection conn = null;
+				PreparedStatement st = null;
+				ResultSet rs = null;
+				try {
+
+					conn = helper.getConnection();
+					conn.setAutoCommit(false);
+					st = conn.prepareStatement(sql);
+
+					if (values != null) {
+						Object value;
+						for (int i = 0; i < values.length; i++) {
+							value = values[i];
+							if (value instanceof Geometry) {
+								byte[] bytes;
+								try {
+									bytes = ((Geometry) value).convertToWKB();
+								} catch (BaseException e) {
+									throw new InvalidParameterException();
+								}
+								st.setBytes(i + 1, bytes);
+							}
+							st.setObject(i + 1, value);
+						}
+					}
+
+					if (fetchSize > 0) {
+						st.setFetchSize(fetchSize);
+					}
+                                        rs = JDBCHelper.executeQuery(st, sql);
+					if (fetchSize > 0) {
+						rs.setFetchSize(fetchSize);
+					}
+					return rs;
+				} catch (SQLException e) {
+					try {
+						rs.close();
+					} catch (Exception e1) {
+					}
+					try {
+						st.close();
+					} catch (Exception e1) {
+					}
+					try {
+						conn.close();
+					} catch (Exception e1) {
+					}
+					throw new JDBCExecutePreparedSQLException(sql,values,e);
+				}
+			}
+		});
+	}
+
+	protected boolean closeResource(ResourceProvider resource) {
+		try {
+			this.helper.close();
+		} catch (CloseException e) {
+			logger.error("Exception in close Request", e);
+		}
+		return !this.helper.isOpen();
+	}
+
+	protected String compoundCountSelect(String filter) {
+
+		// Select
+		StringBuilder sql = new StringBuilder();
+		sql.append("Select count(");
+		String[] pkFields = getJDBCParameters().getPkFields();
+		if (pkFields != null && pkFields.length == 1) {
+			sql.append(helper.escapeFieldName(pkFields[0]));
+		} else {
+			sql.append('*');
+
+		}
+		sql.append(") ");
+
+		sql.append("from ");
+		if (this.directSQLMode) {
+			sql.append("(");
+			sql.append(getJDBCParameters().getSQL());
+			sql.append(") as _subquery_alias_ ");
+		} else {
+			sql.append(getJDBCParameters().tableID());
+		}
+		sql.append(' ');
+
+		appendWhere(sql, filter);
+
+		return sql.toString();
+	}
+
+	protected void appendWhere(StringBuilder sql, String filter) {
+		filter = fixFilter(filter);
+		String initialFilter = getJDBCParameters().getBaseFilter();
+		if ((initialFilter != null && initialFilter.length() != 0)
+				|| (filter != null && filter.length() != 0)) {
+			sql.append("where (");
+
+			if (initialFilter != null && initialFilter.length() != 0
+					&& filter != null && filter.length() != 0) {
+				// initialFilter + filter
+				sql.append('(');
+				sql.append(initialFilter);
+				sql.append(") and (");
+				sql.append(filter);
+				sql.append(')');
+			} else if (initialFilter != null && initialFilter.length() != 0) {
+				// initialFilter only
+				sql.append(initialFilter);
+			} else {
+				// filter only
+				sql.append(filter);
+			}
+			sql.append(") ");
+		}
+	}
+
+	public void closeDone() throws DataException {
+		// Do nothing
+	}
+
+	public void opendDone() throws DataException {
+		// Nothing to do
+	}
+
+	public Envelope getEnvelope() throws DataException {
+		this.open();
+		String defaultGeometryAttributeName;
+		defaultGeometryAttributeName = this.getFeatureStore()
+			.getDefaultFeatureType()
+				.getDefaultGeometryAttributeName();
+		if( defaultGeometryAttributeName != null ) {
+			return this.helper.getFullEnvelopeOfField(
+					this.getJDBCParameters(),
+					defaultGeometryAttributeName, 
+					this.getJDBCParameters().getWorkingArea()
+				);
+		}
+		return null;
+	}
+
+	public void resourceChanged(ResourceProvider resource) {
+		this.getStoreServices().notifyChange(
+				DataStoreNotification.RESOURCE_CHANGED,
+				resource);
+	}
+
+	public boolean allowAutomaticValues() {
+		return this.helper.allowAutomaticValues();
+	}
+
+	public DataServerExplorer getExplorer() throws ReadException {
+		DataManager manager = DALLocator.getDataManager();
+		JDBCServerExplorerParameters exParams;
+		JDBCStoreParameters params = getJDBCParameters();
+		try {
+			exParams = (JDBCServerExplorerParameters) manager
+					.createServerExplorerParameters(JDBCServerExplorer.NAME);
+			exParams.setHost(params.getHost());
+			exParams.setPort(params.getPort());
+			exParams.setDBName(params.getDBName());
+			exParams.setUser(params.getUser());
+			exParams.setPassword(params.getPassword());
+			exParams.setUrl(params.getUrl());
+			exParams.setCatalog(params.getCatalog());
+			exParams.setSchema(params.getSchema());
+			exParams.setJDBCDriverClassName(params.getJDBCDriverClassName());
+
+			return manager.openServerExplorer(JDBCServerExplorer.NAME,exParams);
+		} catch (DataException e) {
+			throw new ReadException(this.getProviderName(), e);
+		} catch (ValidateDataParametersException e) {
+			throw new ReadException(this.getProviderName(), e);
+		}
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+		this.close();
+		resulsetList = null;
+		this.helper.dispose();
+		super.doDispose();
+	}
+
+	public Object createNewOID() {
+		return null;
+	}
+
+	public String compoundSelect(FeatureType type, String filter, String order,
+			long limit, long offset) throws DataException {
+		StringBuilder sql = new StringBuilder();
+		JDBCStoreParameters params = getJDBCParameters();
+			FeatureAttributeDescriptor[] fields = type
+					.getAttributeDescriptors();
+
+			// Select
+			sql.append("Select ");
+			for (int i = 0; i < fields.length - 1; i++) {
+				sql.append(helper.getSqlFieldName(fields[i]));
+				sql.append(", ");
+			}
+			sql.append(helper.getSqlFieldName(fields[fields.length - 1]));
+			sql.append(' ');
+
+			FeatureAttributeDescriptor[] pkFields = getStoreServices()
+					.getProviderFeatureType(type.getId()).getPrimaryKey();
+
+			if (pkFields != null && pkFields.length > 0) {
+				// checks for pk fields are in select
+				boolean toAdd;
+				for (int i = 0; i < pkFields.length; i++) {
+					toAdd = true;
+					for (int j = 0; j < fields.length; j++) {
+						if (pkFields[i].getName().equals(fields[j].getName())) {
+							toAdd = false;
+							break;
+						}
+					}
+					if (toAdd) {
+						sql.append(", ");
+						sql.append(helper.getSqlFieldName(pkFields[i]));
+					}
+				}
+				sql.append(' ');
+			}
+
+			// table
+			sql.append("from ");
+			if (directSQLMode) {
+			    sql.append(" (");
+			    sql.append(params.getSQL());
+	                    sql.append(") as _subquery_alias_ ");
+			} else {
+			    sql.append(params.tableID());
+			}
+			sql.append(' ');
+
+			// Where
+			appendWhere(sql, filter);
+
+			// Order
+			if ((params.getBaseOrder() != null && params.getBaseOrder()
+					.length() != 0)
+					|| (order != null && order.length() != 0)) {
+				sql.append("order by ");
+
+				if (order != null && order.length() != 0) {
+					// order
+					sql.append(order);
+				} else {
+					// initial order
+					sql.append(params.getBaseOrder());
+				}
+				sql.append(' ');
+			}
+		// limit offset
+		if (limit > 0 || offset > 0) {
+			sql.append(helper.compoundLimitAndOffset(limit,offset));
+		}
+		return sql.toString();
+	}
+
+	public long getFeatureCount() throws DataException {
+		return getCount(null);
+	}
+
+	public String getProviderName() {
+		return NAME;
+	}
+
+	public boolean hasGeometrySupport() {
+		return false;
+	}
+
+	public FeatureSetProvider createSet(FeatureQuery query,
+			FeatureType featureType) throws DataException {
+
+		return new JDBCSetProvider(this, query, featureType);
+	}
+
+	public Object getSourceId() {
+		return this.getJDBCParameters().getSourceId();
+	}
+	
+	public String getName() {
+		return this.getJDBCParameters().tableID();
+	}
+	
+	public String getFullName() {
+		return this.getJDBCParameters().getHost()+":"+this.getJDBCParameters().getDBName()+":"+this.getJDBCParameters().tableID();
+	}
+	
+
+	public ResourceProvider getResource() {
+		return getHelper().getResource();
+	}
+	
+	protected boolean isDirectSQLMode(){
+	    return directSQLMode;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCFastIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCFastIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCFastIterator.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class JDBCFastIterator extends JDBCIterator {
+
+	protected FeatureProvider featureProvider;
+
+	protected JDBCFastIterator(JDBCStoreProvider store, JDBCSetProvider set,
+			FeatureType featureType, int resultsetID) throws DataException {
+		super(store, set, featureType, resultsetID);
+		this.featureProvider = super.createFeatureProvider();
+	}
+
+	protected FeatureProvider createFeatureProvider() throws DataException {
+		return this.featureProvider;
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		featureProvider = null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCFastIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/ConnectionAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/ConnectionAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/ConnectionAction.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.sql.Connection;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * Contains an action to execute with
+ * {@link JDBCHelper#doConnectionAction(ConnectionAction)}
+ * 
+ * @see {@link JDBCHelper#doConnectionAction(ConnectionAction)},
+ *      {@link TransactionalAction}
+ */
+public interface ConnectionAction {
+	Object action(Connection conn) throws DataException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/ConnectionAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/Appender.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/Appender.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/Appender.java	(revision 42196)
@@ -0,0 +1,27 @@
+
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCPreparingSQLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public interface Appender {
+    
+    public void begin() throws DataException;
+
+    public void end() throws DataException;
+
+    public void abort() throws DataException ;
+
+    public void append(FeatureProvider feature) throws DataException ;
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResourceParameters.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.resource.db.DBResourceParameters;
+
+public class JDBCResourceParameters extends DBResourceParameters
+		implements JDBCConnectionParameters {
+
+    protected static final String PARAMETERS_DEFINITION_NAME = "JDBCResourceParameters";
+
+	protected JDBCResourceParameters(String parametersDefinitionName, String providerName) {
+		super(parametersDefinitionName,providerName);
+	}
+	
+	public JDBCResourceParameters() {
+		this(PARAMETERS_DEFINITION_NAME, JDBCResource.NAME);
+	}
+
+    public JDBCResourceParameters(String parametersDefinitionName, String providerName, 
+    		String url, String host, Integer port,
+			String dbName, String user, String password, 
+			String jdbcDriverClassName) {
+		this(parametersDefinitionName,providerName);
+
+		this.setUrl(url);
+		this.setHost(host);
+		this.setPort(port);
+		this.setDBName(dbName);
+		this.setUser(user);
+		this.setPassword(password);
+		this.setJDBCDriverClassName(jdbcDriverClassName);
+	}
+
+    public JDBCResourceParameters(String url, String host, Integer port,
+			String dbName,
+			String user, String password, String jdbcDriverClassName) {
+		this(PARAMETERS_DEFINITION_NAME, JDBCResource.NAME, url, host, port, dbName, user, password, jdbcDriverClassName);
+	}
+
+	public void setJDBCDriverClassName(String className) {
+		this.setDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME, className);
+	}
+
+	public String getJDBCDriverClassName() {
+		return (String) this.getDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME);
+	}
+
+	public String getCatalog() {
+		return (String) this.getDynValue(CATALOG_PARAMTER_NAME);
+	}
+
+	public void setCatalog(String catalog) {
+		this.setDynValue(CATALOG_PARAMTER_NAME, catalog);
+	}
+
+	public String getSchema() {
+		return (String) this.getDynValue(SCHEMA_PARAMTER_NAME);
+	}
+
+	public void setSchema(String schema) {
+		this.setDynValue(SCHEMA_PARAMTER_NAME, schema);
+	}
+
+	public String getUrl() {
+		return (String) this.getDynValue(URL_PARAMTER_NAME);
+	}
+
+	public void setUrl(String url) {
+		this.setDynValue(URL_PARAMTER_NAME, url);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCResourceParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorerParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorerParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorerParameters.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
+
+public class JDBCServerExplorerParameters extends
+		DBServerExplorerParameters implements JDBCConnectionParameters {
+	
+	public static final String PARAMETERS_DEFINITION_NAME = "JDBCServerExplorerParameters";
+
+	public static final String SHOWINFORMATIONDBTABLES_PARAMTER_NAME = "showInformationDBTables";
+
+	public JDBCServerExplorerParameters() {
+		super(PARAMETERS_DEFINITION_NAME, JDBCServerExplorer.NAME);
+	}
+	
+	public JDBCServerExplorerParameters(String parametersDefinitionName, String name) {
+		super(parametersDefinitionName, name);
+	}
+
+	public void setJDBCDriverClassName(String className) {
+		this.setDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME, className);
+	}
+
+	public String getJDBCDriverClassName() {
+		return (String) this.getDynValue(JDBC_DRIVER_CLASS_PARAMTER_NAME);
+	}
+
+	public String getCatalog() {
+		return (String) this.getDynValue(CATALOG_PARAMTER_NAME);
+	}
+
+	public void setCatalog(String catalog) {
+		this.setDynValue(CATALOG_PARAMTER_NAME, catalog);
+	}
+
+	public String getSchema() {
+		return (String) this.getDynValue(SCHEMA_PARAMTER_NAME);
+	}
+
+	public void setSchema(String schema) {
+		this.setDynValue(SCHEMA_PARAMTER_NAME, schema);
+	}
+
+	public void setShowInformationDBTables(boolean show){
+		this.setShowInformationDBTables(new Boolean(show));
+	}
+
+	public void setShowInformationDBTables(Boolean show) {
+		this.setDynValue(SHOWINFORMATIONDBTABLES_PARAMTER_NAME, show);
+	}
+
+	public Boolean getShowInformationDBTables() {
+		return (Boolean) this.getDynValue(SHOWINFORMATIONDBTABLES_PARAMTER_NAME);
+	}
+
+	public String getUrl() {
+		return (String) this.getDynValue(URL_PARAMTER_NAME);
+	}
+
+	public void setUrl(String url) {
+		this.setDynValue(URL_PARAMTER_NAME, url);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCServerExplorerParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/TransactionalAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/TransactionalAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/TransactionalAction.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.jdbc;
+
+/**
+ * Contains an action to execute with
+ * {@link JDBCHelper#doConnectionAction(ConnectionAction)} inside of a DB
+ * transaction.
+ * 
+ * @see {@link JDBCHelper#doConnectionAction(ConnectionAction)},
+ *      {@link ConnectionAction}
+ */
+public interface TransactionalAction extends ConnectionAction {
+
+	/**
+	 * If before run <code>action</code> there's a transaction open and this
+	 * methos returns <code>false</code> an exception will be throwed
+	 *
+	 * @return
+	 */
+	boolean continueTransactionAllowed();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/TransactionalAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelperUser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelperUser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelperUser.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+
+/**
+ * Interface for classes that uses {@link JDBCHelperUser}
+ *
+ * @author jmvivo
+ *
+ */
+public interface JDBCHelperUser extends ResourceConsumer {
+
+	/**
+	 * Get the user name
+	 * 
+	 * @return
+	 */
+	String getProviderName();
+
+	/**
+	 * Called when the resource was open
+	 *
+	 * @throws DataException
+	 */
+	void opendDone() throws DataException;
+
+	/**
+	 * Called when the resource was close
+	 *
+	 * @throws DataException
+	 */
+	void closeDone() throws DataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc/JDBCHelperUser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/pom.xml	(revision 42196)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.db.lib</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.db</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/FeatureTypeHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/FeatureTypeHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/FeatureTypeHelper.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.db;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+public final class FeatureTypeHelper {
+	@SuppressWarnings("unchecked")
+	public static  Iterator<FeatureAttributeDescriptor> iterator(FeatureType type) {
+		return type.iterator();
+	}
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/FeatureTypeHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBNewStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBNewStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBNewStoreParameters.java	(revision 42196)
@@ -0,0 +1,179 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.db;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.db.DBConnectionParameter;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+
+/**
+ * Abstract Data base Store Parameters
+ *
+ * @author jmvivo
+ *
+ */
+public abstract class DBNewStoreParameters extends AbstractDataParameters
+        implements NewFeatureStoreParameters, DBConnectionParameter {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "DBNewStoreParameters";
+
+    
+    /**
+     * Parameter name for the name of <code>table</code><br>
+     *
+     * @see #getTable()
+     * @see #setTable(String)
+     */
+    public static final String TABLE_PARAMTER_NAME = "Table";
+    
+    /**
+     * This instance contains the value of the current parameters.
+     */
+    private DelegatedDynObject parameters;
+
+    public DBNewStoreParameters(String parametersDefinitionName, String providerName) {
+        this.parameters = (DelegatedDynObject) DBHelper.newParameters(parametersDefinitionName);
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, providerName);
+    }
+
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+    public String getDataStoreName() {
+        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+
+    public String getDescription() {
+        return this.getDynClass().getDescription();
+    }
+
+    public boolean isValid() {
+        return this.getHost() != null;
+    }
+
+    public String getHost() {
+        return (String) this.getDynValue(HOST_PARAMTER_NAME);
+    }
+
+    public Integer getPort() {
+        return (Integer) this.getDynValue(PORT_PARAMTER_NAME);
+    }
+
+    public String getDBName() {
+        return (String) this.getDynValue(DBNAME_PARAMTER_NAME);
+    }
+
+    public String getUser() {
+        return (String) this.getDynValue(USER_PARAMTER_NAME);
+    }
+
+    public String getPassword() {
+        return (String) this.getDynValue(PASSWORD_PARAMTER_NAME);
+    }
+
+    public void setHost(String host) {
+        this.setDynValue(HOST_PARAMTER_NAME, host);
+    }
+
+    public void setPort(int port) {
+        this.setDynValue(PORT_PARAMTER_NAME, new Integer(port));
+    }
+
+    /**
+     * Set <code>port/code> parameter value
+     *
+     * @param port
+     */
+    public void setPort(Integer port) {
+        this.setDynValue(PORT_PARAMTER_NAME, port);
+    }
+
+    /**
+     * Set <code>data base name/code> parameter value
+     *
+     * @param data
+     *            base name
+     */
+    public void setDBName(String dbName) {
+        this.setDynValue(DBNAME_PARAMTER_NAME, dbName);
+    }
+
+    /**
+     * Set <code>user/code> parameter value
+     *
+     * @param user
+     */
+    public void setUser(String user) {
+        this.setDynValue(USER_PARAMTER_NAME, user);
+    }
+
+    /**
+     * Set <code>password/code> parameter value
+     *
+     * @param password
+     */
+    public void setPassword(String password) {
+        this.setDynValue(PASSWORD_PARAMTER_NAME, password);
+    }
+
+    public EditableFeatureType getDefaultFeatureType() {
+        return (EditableFeatureType) this.getDynValue(FEATURETYPE_PARAMTER_NAME);
+    }
+
+    public void setDefaultFeatureType(FeatureType featureType) {
+        this.setDynValue(FEATURETYPE_PARAMTER_NAME, featureType);
+    }
+
+    /**
+     * Get <code>table</code> parameter value<br>
+     * <br>
+     *
+     * This parameters describes what table we want to create.<br>
+     *
+     * @see #setTable(String)
+     */
+    public String getTable() {
+        return (String) this.getDynValue(TABLE_PARAMTER_NAME);
+    }
+
+    /**
+     * Set <code>table</code> parameter value<br>
+     * <br>
+     *
+     * This parameters describes what table we want to create.<br>
+     *
+     * @param table
+     *
+     * @see #getTable(String)
+     */
+    public void setTable(String table) {
+        this.setDynValue(TABLE_PARAMTER_NAME, table);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBNewStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBHelper.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.store.db;
+
+import java.io.InputStream;
+
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+public final class DBHelper {
+
+	private DBHelper() {
+		// Do nothing
+	}
+	
+	@SuppressWarnings("unchecked")
+	public static void registerParametersDefinition(String name, Class theClass, String filename) {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if (manager.getDefinition(name) == null) {
+			InputStream resource = theClass.getResourceAsStream(filename);
+			if( resource==null ) {
+				throw new IllegalArgumentException("File '"+ filename + "' not found as a resource of '"+theClass.getName()+"'.");
+			}
+			manager.addDefinition(
+					theClass,
+					name, 
+					resource,
+					theClass.getClassLoader(), 
+					null, 
+					null
+			);
+		}
+	}
+	
+	@SuppressWarnings("unchecked")
+	public static void registerMetadataDefinition(String name, Class theClass, String filename) throws MetadataException {
+		MetadataManager manager = MetadataLocator.getMetadataManager();
+		if( manager.getDefinition(name)==null ) {
+			InputStream resource = theClass.getResourceAsStream(filename);
+			if( resource==null ) {
+				throw new IllegalArgumentException("File '"+ filename + "' not found as a resource of '"+theClass.getName()+"'.");
+			}
+			manager.addDefinition(
+					name, 
+					theClass.getResourceAsStream(filename),
+					theClass.getClassLoader()
+			);
+		}
+	}
+
+	public static DynObject newParameters(String name) {
+    	return ToolsLocator.getDynObjectManager()
+			.createDynObject(
+				ToolsLocator.getPersistenceManager().getDefinition(name)
+			);
+	}
+	
+	public static DynObject newMetadataContainer(String name) {
+    	return ToolsLocator.getDynObjectManager()
+			.createDynObject(
+				MetadataLocator.getMetadataManager().getDefinition(name)
+			);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreParameters.java	(revision 42196)
@@ -0,0 +1,610 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.db;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.OpenDataStoreParameters;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.serverexplorer.db.DBConnectionParameter;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+/**
+ * Abstract Data base Store Parameters
+ *
+ * @author jmvivo
+ *
+ */
+public abstract class DBStoreParameters extends AbstractDataParameters
+		implements
+		OpenDataStoreParameters, DBConnectionParameter {
+
+	public static final String PARAMETERS_DEFINITION_NAME = "DBStoreParameters";
+
+	/**
+	 * Parameter name for <code>sql</code><br>
+	 *
+	 * @see #getSQL()
+	 * @see #setSQL(String)
+	 */
+	public static final String SQL_PARAMTER_NAME = "SQL";
+
+	/**
+	 * Parameter name for <code>fields</code><br>
+	 *
+	 * @see #getFields()
+	 * @see #getFieldsString()
+	 * @see #setFields(String)
+	 * @see #setFields(String[])
+	 */
+	public static final String FIELDS_PARAMTER_NAME = "Fields";
+
+	/**
+	 * Parameter name for <code>initial filter</code><br>
+	 *
+	 * @see #getBaseFilter()
+	 * @see #setBaseFilter(String)
+	 */
+	public static final String BASEFILTER_PARAMTER_NAME = "BaseFilter";
+
+	/**
+	 * Parameter name for <code>initial order</code><br>
+	 *
+	 * @see #getBaseOrder()
+	 * @see #setBaseOrder(String)
+	 */
+	public static final String BASEORDER_PARAMTER_NAME = "BaseOrder";
+
+	/**
+	 * Parameter name for <code>pk fields</code><br>
+	 *
+	 * @see #getPkFields()
+	 * @see #getPkFieldsString()
+	 * @see #setPkFields(String)
+	 * @see #setPkFields(String[])
+	 */
+	public static final String PKFIELDS_PARAMTER_NAME = "PKFields";
+
+	/**
+	 * Parameter name for <code>default geometry</code><br>
+	 *
+	 * @see #getDefaultGeometryField()
+	 * @see #setDefaultGeometryField(String)
+	 */
+	public static final String DEFAULTGEOMETRY_PARAMTER_NAME = "DefaultGeometryField";
+
+	/**
+	 * Parameter name for the name of <code>table</code><br>
+	 *
+	 * @see #getTable()
+	 * @see #setTable(String)
+	 */
+	public static final String TABLE_PARAMTER_NAME = "Table";
+
+	/**
+	 * Parameter name for <code>working area</code><br>O
+	 *
+	 * @see #getWorkingArea()
+	 * @see #setWorkingArea(Envelope)
+	 */
+	public static final String WORKINGAREA_PARAMTER_NAME = "Workingarea";
+
+
+	/**
+	 * Parameter name for <code>CRS</code><br>
+	 * 
+	 * @see #setSRSID(String)
+	 * @see #getSRS()
+	 * @see #setSRS(IProjection)
+	 */
+	public static final String CRS_PARAMTER_NAME = "CRS";
+
+	/**
+	 * This instance contains the value of the current parameters.
+	 */
+	private DelegatedDynObject parameters;
+
+	public DBStoreParameters(String parametersDefinitionName, String providerName) {
+		this.parameters  = (DelegatedDynObject) DBHelper.newParameters(parametersDefinitionName);
+		this.setDynValue( DataStoreProviderServices.PROVIDER_PARAMTER_NAME, providerName);
+	}
+	
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return parameters;
+	}
+
+	public String getDataStoreName() {
+		return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+	}
+
+	public String getDescription() {
+		return this.getDynClass().getDescription();
+	}
+
+	public boolean isValid() {
+		return this.getHost() != null;
+	}
+
+	public String getHost() {
+		return (String) this.getDynValue(HOST_PARAMTER_NAME);
+	}
+
+	public Integer getPort() {
+		return (Integer) this.getDynValue(PORT_PARAMTER_NAME);
+	}
+
+	public String getDBName() {
+		return (String) this.getDynValue(DBNAME_PARAMTER_NAME);
+	}
+
+	public String getUser() {
+		return (String) this.getDynValue(USER_PARAMTER_NAME);
+	}
+
+	public String getPassword() {
+		return (String) this.getDynValue(PASSWORD_PARAMTER_NAME);
+	}
+
+	public void setHost(String host) {
+		this.setDynValue(HOST_PARAMTER_NAME, host);
+	}
+
+	public void setPort(int port) {
+		this.setDynValue(PORT_PARAMTER_NAME, new Integer(port));
+	}
+
+	/**
+	 * Set <code>port/code> parameter value
+	 *
+	 * @param port
+	 */
+	public void setPort(Integer port) {
+		this.setDynValue(PORT_PARAMTER_NAME, port);
+	}
+
+	/**
+	 * Set <code>data base name/code> parameter value
+	 *
+	 * @param data
+	 *            base name
+	 */
+	public void setDBName(String dbName) {
+		this.setDynValue(DBNAME_PARAMTER_NAME, dbName);
+	}
+
+	/**
+	 * Set <code>user/code> parameter value
+	 *
+	 * @param user
+	 */
+	public void setUser(String user) {
+		this.setDynValue(USER_PARAMTER_NAME, user);
+	}
+
+	/**
+	 * Set <code>password/code> parameter value
+	 *
+	 * @param password
+	 */
+	public void setPassword(String password) {
+		this.setDynValue(PASSWORD_PARAMTER_NAME, password);
+	}
+
+	/**
+	 * Get <code>table</code> parameter value<br>
+	 * <br>
+	 *
+	 * This parameters describes what table or view we want to connect.<br>
+	 *
+	 * Not used if <code>sql</code> parameter set.
+	 *
+	 *
+	 * @param password
+	 *
+	 * @see #setTable(String)
+	 * @see #getSQL()
+	 * @see #setSQL(String)
+	 */
+	public String getTable() {
+		return (String) this.getDynValue(TABLE_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set <code>table</code> parameter value<br>
+	 * <br>
+	 *
+	 * This parameters describes what table or view we want to connect.<br>
+	 *
+	 * Not used if <code>sql</code> parameter set.
+	 *
+	 *
+	 * @param password
+	 *
+	 * @see #getTable(String)
+	 * @see #getSQL()
+	 * @see #setSQL(String)
+	 */
+	public void setTable(String table) {
+		this.setDynValue(TABLE_PARAMTER_NAME, table);
+	}
+
+	/**
+	 * Get a comma separated list of the field names that we want to use.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> or empty string means that we want all fields
+	 * available.
+	 *
+	 * @return
+	 * @see #getFields()
+	 * @see #setFields(String)
+	 * @see #setFields(String[])
+	 */
+	public String getFieldsString() {
+		return (String) this.getDynValue(FIELDS_PARAMTER_NAME);
+	}
+
+	/**
+	 * Get an array of the field names that we want to use.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> means that we want all fields available.
+	 *
+	 * @return
+	 * @see #getFieldsString()
+	 * @see #setFields(String)
+	 * @see #setFields(String[])
+	 */
+	public String[] getFields() {
+		String fields = (String) this.getDynValue(FIELDS_PARAMTER_NAME);
+		if (fields == null) {
+			return null;
+		}
+		// FIXME check for fields with spaces and special chars
+		return fields.split(",");
+	}
+
+	/**
+	 * Set a comma separated list of the field names that we want to use.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> means that we want all fields available.
+	 *
+	 * @return
+	 * @see #getFields()
+	 * @see #getFieldsString()
+	 * @see #setFields(String[])
+	 */
+	public void setFields(String fields) {
+		this.setDynValue(FIELDS_PARAMTER_NAME, fields);
+	}
+
+	/**
+	 * Set an array of the field names that we want to use.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> means that we want all fields available.
+	 *
+	 * @return
+	 * @see #getFieldsString()
+	 * @see #getFields()
+	 * @see #setFields(String)
+	 */
+	public void setFields(String[] fields) {
+		StringBuilder str = new StringBuilder();
+		for (int i = 0; i < fields.length - 1; i++) {
+			str.append(fields[i]);
+			str.append(",");
+		}
+		str.append(fields.length - 1);
+
+		this.setDynValue(FIELDS_PARAMTER_NAME, fields);
+	}
+
+	/**
+	 * Get the SQL to use as source of the store instead a table or a view.<br>
+	 * <br>
+	 *
+	 * If this property is set the store changes his work flow:
+	 * <ul>
+	 * <li>store is in <i>read only</i> mode.</li>
+	 * <li><code>table</code> property is ignored.</li>
+	 * <li><code>pkFields</code> is not identified automatically</li>
+	 * <li>filter and order will be resolved locally <i>(pour performance)</i></li>
+	 * </ul>
+	 *
+	 * @return sql to use
+	 *
+	 * @see #getTable()
+	 * @see #setTable()
+	 * @see #getPkFields()
+	 * @see #setPkFields(String)
+	 */
+	public String getSQL() {
+		return (String) this.getDynValue(SQL_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set the SQL to use as source of the store instead a table or a view.<br>
+	 * <br>
+	 * <strong>Note:</strong>see {@link #getSQL()} for description
+	 *
+	 * @see #getSQL()
+	 * @see #getTable()
+	 * @see #setTable()
+	 * @see #getPkFields()
+	 * @see #setPkFields(String)
+	 */
+	public void setSQL(String sql) {
+		this.setDynValue(SQL_PARAMTER_NAME, sql);
+	}
+
+	/**
+	 * Get initial filter to use.<br>
+	 * <br>
+	 *
+	 * This filter is passed to BD provider on each request as a base filter.
+	 *
+	 * @return filter
+	 *
+	 * @see #setBaseFilter(String)
+	 */
+	public String getBaseFilter() {
+		return (String) this.getDynValue(BASEFILTER_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set initial filter to use.<br>
+	 * <br>
+	 *
+	 * This filter is passed to BD provider on each request as a base filter.
+	 *
+	 * @return filter
+	 *
+	 * @see #getInitialFilter(String)
+	 */
+	public void setBaseFilter(String filter) {
+		this.setDynValue(BASEFILTER_PARAMTER_NAME, filter);
+	}
+
+	/**
+	 * Get initial order to use.<br>
+	 * <br>
+	 *
+	 * This order is used if no custom order is request in query.
+	 *
+	 * @return order
+	 *
+	 * @see #setBaseOrder(String)
+	 */
+	public String getBaseOrder() {
+		return (String) this.getDynValue(BASEORDER_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set initial order to use.<br>
+	 * <br>
+	 *
+	 * This order is used if no custom order is request in query.
+	 *
+	 * @return filter
+	 *
+	 * @see #getBaseOrder()
+	 */
+	public void setBaseOrder(String order) {
+		this.setDynValue(BASEORDER_PARAMTER_NAME, order);
+	}
+
+	/**
+	 * Get a comma separated list of the field names that compound the primary
+	 * key.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> or empty string means that library must detect this
+	 * information.<br>
+	 * <br>
+	 * <strong>Note:</strong>If this parameters is undefined, the library can't
+	 * do this detection, some services will don't be available for this store
+	 * (<i>like selection, editing or {@link Feature#getReference()}</i>)
+	 *
+	 * @return
+	 * @see #getPkFields()
+	 * @see #setPkFields(String)
+	 * @see #setPkFields(String[])
+	 */
+	public String getPkFieldsString() {
+		return (String) this.getDynValue(PKFIELDS_PARAMTER_NAME);
+	}
+
+	/**
+	 * Get an array of the field names that compound the primary key.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> or empty string means that library must detect this
+	 * information.<br>
+	 * <br>
+	 * <strong>Note:</strong> see {@link #getPkFieldsString()}
+	 *
+	 * @return
+	 * @see #getPkFieldsString()
+	 * @see #setPkFields(String)
+	 * @see #setPkFields(String[])
+	 */
+	public String[] getPkFields() {
+		String fields = (String) this.getDynValue(PKFIELDS_PARAMTER_NAME);
+		if (fields == null) {
+			return null;
+		}
+		// FIXME check for fields with spaces and special chars
+		return fields.split(",");
+	}
+
+	/**
+	 * Set a comma separated list of the field names that compound the primary
+	 * key.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> or empty string means that library must detect this
+	 * information.<br>
+	 * <br>
+	 * <strong>Note:</strong> see {@link #getPkFieldsString()}
+	 *
+	 * @return
+	 * @see #getPkFields()
+	 * @see #getPkFieldsString()
+	 * @see #setPkFields(String[])
+	 */
+	public void setPkFields(String fields) {
+		this.setDynValue(PKFIELDS_PARAMTER_NAME, fields);
+	}
+
+	/**
+	 * Set an array of the field names that compound the primary key.<br>
+	 * <br>
+	 *
+	 * A <code>null</code> or empty string means that library must detect this
+	 * information.<br>
+	 * <br>
+	 * <strong>Note:</strong> see {@link #getPkFieldsString()}
+	 *
+	 * @return
+	 * @see #getPkFieldsString()
+	 * @see #getPkFieldsString()
+	 * @see #setPkFields(String)
+	 */
+	public void setPkFields(String[] fields) {
+		StringBuilder str = new StringBuilder();
+		for (int i = 0; i < fields.length - 1; i++) {
+			str.append(fields[i]);
+			str.append(",");
+		}
+		str.append(fields.length - 1);
+
+		this.setDynValue(PKFIELDS_PARAMTER_NAME, fields);
+	}
+
+	/**
+	 * Return the geometry field to use like default geometry (<i>see
+	 * {@link Feature#getDefaultGeometry()}</i>)<br>
+	 * <br>
+	 *
+	 * This option is supported only in geometry providers.<br>
+	 * If this parameters is not set and store has only one field geometry then
+	 * library uses that field as default
+	 *
+	 * @return
+	 *
+	 * @see #setDefaultGeometryField(String)
+	 */
+	public String getDefaultGeometryField() {
+		return (String) this.getDynValue(DEFAULTGEOMETRY_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set the geometry field to use like default geometry.<br>
+	 * See {@link #getDefaultGeometryField()} for description.
+	 *
+	 * @param geomName
+	 *
+	 * @see #getDefaultGeometryField()
+	 */
+	public void setDefaultGeometryField(String geomName) {
+		this.setDynValue(DEFAULTGEOMETRY_PARAMTER_NAME, geomName);
+	}
+
+	/**
+	 * Get the filter by area of {@link #getDefaultGeometryField()} used in this
+	 * store.<br>
+	 * <br>
+	 *
+	 * Supported only for stores with geometric fields
+	 *
+	 * @return
+	 */
+	public Envelope getWorkingArea() {
+		return (Envelope) this.getDynValue(WORKINGAREA_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set the filter by area of {@link #getDefaultGeometryField()} used in this
+	 * store.<br>
+	 * <br>
+	 *
+	 * Supported only for stores with geometric fields
+	 *
+	 */
+	public void setWorkingArea(Envelope workingArea) {
+		this.setDynValue(WORKINGAREA_PARAMTER_NAME, workingArea);
+	}
+
+	/**
+	 * Set manually the SRS for the <code>default geometry</code> field of this
+	 * layer.<br>
+	 * <br>
+	 * 
+	 * if is set to <code>null</code> or empty string means that the library
+	 * must detect it automatically.<br>
+	 * <br>
+	 * 
+	 * Supported only for stores with geometric fields.
+	 * 
+	 * @return
+	 * 
+	 * @see #setSRSID(String)
+	 * @see #getSRSID()
+	 * @see #getSRS()
+	 */
+	public void setCRS(IProjection srs) {
+		setDynValue(CRS_PARAMTER_NAME, srs);
+	}
+
+	public void setCRS(String srs) {
+		setDynValue(CRS_PARAMTER_NAME, srs);
+	}
+
+	/**
+	 * Get the SRS id string set manually for the <code>default geometry</code>
+	 * field of this layer.<br>
+	 * <br>
+	 *
+	 * if is set to <code>null</code> means that the library must detect it
+	 * automatically.<br>
+	 * <br>
+	 *
+	 * Supported only for stores with geometric fields.
+	 *
+	 * @return
+	 *
+	 * @see #setSRSID(String)
+	 * @see #getSRS()
+	 * @see #setSRS(IProjection)
+	 */
+	public IProjection getCRS() {
+		return (IProjection) getDynValue(CRS_PARAMTER_NAME);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreLibrary.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.store.db;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.resource.db.DBResourceLibrary;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Data Base Store Library intialization
+ * 
+ *
+ */
+public class DBStoreLibrary extends AbstractLibrary {
+	
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+        require(DBResourceLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		DBHelper.registerParametersDefinition(
+				DBStoreParameters.PARAMETERS_DEFINITION_NAME,
+				DBStoreParameters.class,
+				"DBParameters.xml"
+		);
+		DBHelper.registerParametersDefinition(
+				DBNewStoreParameters.PARAMETERS_DEFINITION_NAME,
+				DBNewStoreParameters.class,
+				"DBParameters.xml"
+		);
+		DBHelper.registerParametersDefinition(
+				DBServerExplorerParameters.PARAMETERS_DEFINITION_NAME, 
+				DBServerExplorerParameters.class, 
+				"DBParameters.xml"
+		);
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/store/db/DBStoreLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceLibrary.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.resource.db;
+
+import org.gvsig.fmap.dal.DALDbLibrary;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library to initialize Data Base Resources
+ *
+ * @author jmvivo
+ *
+ */
+public class DBResourceLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+        require(DALDbLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		DBHelper.registerParametersDefinition(
+				DBResourceParameters.PARAMETERS_DEFINITION_NAME, 
+				DBResourceParameters.class, 
+				"DBParameters.xml"
+		);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceBlocker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceBlocker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceBlocker.java	(revision 42196)
@@ -0,0 +1,168 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.resource.db;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.spi.AbstractResource;
+
+/**
+ * Abstract Data Base Resource implementation that prevents the concurrent
+ * access.
+ *
+ * @author jmvivo
+ * 
+ */
+public abstract class AbstractDBResourceBlocker extends AbstractResource
+		implements
+		DBResource {
+
+	/**
+	 * Default constructor
+	 *
+	 * @param parameters
+	 * @throws InitializeException
+	 */
+	protected AbstractDBResourceBlocker(DBResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+
+	/**
+	 * Return a connection to the data base.<br>
+	 * Connect to the Data Base if is needed
+	 *
+	 * @return connection to the data base
+	 */
+	public Object get() throws AccessResourceException {
+		if (!isConnected()) {
+			try {
+				this.connect();
+			} catch (DataException e) {
+				throw new AccessResourceException(this, e);
+			}
+		}
+		try {
+			return getTheConnection();
+		} catch (DataException e) {
+			throw new AccessResourceException(this, e);
+		}
+	}
+
+	/**
+	 * Return a connection to the data base.<br>
+	 * Connect to the Data Base if is needed
+	 *
+	 *
+	 * @return connection to the data base
+	 * @see #get()
+	 */
+	public Object getConnection() throws AccessResourceException {
+		return get();
+	}
+
+	/**
+	 * Establish connection to data base
+	 *
+	 * @throws DataException
+	 */
+	public final void connect() throws DataException {
+		if (this.isConnected()) {
+			return;
+		}
+		prepare();
+		connectToDB();
+	}
+
+	/**
+	 * Check if parameters is the same for this resource.<br>
+	 * <br>
+	 *
+	 * <strong>Note:</strong> override this method to add checks for specify
+	 * final implementation parameters
+	 *
+	 *
+	 * @see AbstractResource#isThis(ResourceParameters)
+	 */
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		if (!(parameters instanceof DBResourceParameters)) {
+			return false;
+		}
+		DBResourceParameters params = (DBResourceParameters) parameters
+				.getCopy();
+		prepare(params);
+		DBResourceParameters myParams = (DBResourceParameters) this
+				.getParameters();
+
+		if (!equals(myParams.getHost(), params.getHost())) {
+			return false;
+		}
+		if (!equals(myParams.getPort(), params.getPort())) {
+			return false;
+		}
+		if (!equals(myParams.getUser(), params.getUser())) {
+			return false;
+		}
+
+		return true;
+	}
+
+	@SuppressWarnings("unchecked")
+	protected boolean equals(Comparable v1, Comparable v2) {
+		if (v1 == v2) {
+			return true;
+		}
+		if ((v1 != null) && (v2 != null)) {
+			return v1.compareTo(v2) == 0;
+		}
+		return false;
+	}
+
+	/**
+	 * final implementation method to Establish connection to data base<br>
+	 * Called from {@link #get()}<br>
+	 * <br>
+	 *
+	 *
+	 * @throws DataException
+	 */
+	protected abstract void connectToDB() throws DataException;
+
+	/**
+	 * final implementation method to get a connection to data base<br>
+	 * Called from {@link #connect()}<br>
+	 * <br>
+	 * This method is called with the connection establish
+	 *
+	 * @throws DataException
+	 */
+	protected abstract Object getTheConnection() throws DataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceBlocker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBParameters.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.resource.db;
+
+/**
+ * Interface for describe parameters of a Data Base
+ *
+ *
+ * @author jmvivo
+ *
+ */
+public interface DBParameters {
+
+	/**
+	 * Parameter name for <code>host</code>
+	 */
+	public static final String HOST_PARAMTER_NAME = "host";
+
+	/**
+	 * Parameter name for <code>port</code> 
+	 */
+	public static final String PORT_PARAMTER_NAME = "port";
+
+	/**
+	 * Parameter name for <code>data base name</code> 
+	 */
+	public static final String DBNAME_PARAMTER_NAME = "dbname";
+
+	/**
+	 * Parameter name for <code>user</code>
+	 */
+	public static final String USER_PARAMTER_NAME = "dbuser";
+
+	/**
+	 * Parameter name for <code>password</code>
+	 */
+	public static final String PASSWORD_PARAMTER_NAME = "password";
+
+	/**
+	 * Return the value of <code>host</code> parameter
+	 *
+	 * @return
+	 */
+	public String getHost();
+
+	/**
+	 * Return the value of <code>port</code> parameter
+	 *
+	 * @return
+	 */
+	public Integer getPort();
+
+	/**
+	 * Return the value of <code>data base name</code> parameter
+	 *
+	 * @return
+	 */
+	public String getDBName();
+
+	/**
+	 * Return the value of <code>password</code> parameter
+	 *
+	 * @return
+	 */
+	public String getPassword();
+
+	/**
+	 * Return the value of <code>user</code> parameter
+	 *
+	 * @return
+	 */
+	public String getUser();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResource.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.resource.db;
+
+import org.gvsig.fmap.dal.resource.Resource;
+
+/**
+ * Interface for Resources of a Data Base
+ *
+ * @author jmvivo
+ *
+ */
+public interface DBResource extends Resource {
+
+	/**
+	 * inform if connection to the data base is established
+	 *
+	 * @return
+	 */
+	public boolean isConnected();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceNoBlocker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceNoBlocker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceNoBlocker.java	(revision 42196)
@@ -0,0 +1,194 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.resource.db;
+
+import java.sql.SQLException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.exception.ResourceException;
+import org.gvsig.fmap.dal.resource.spi.AbstractNonBlockingResource;
+
+/**
+ * <p>
+ * Abstract Data Base Resource implementation that allow the concurrent access.
+ * </p>
+ * 
+ * <p>
+ * Useful for Pooled Data Base Access.
+ * </p>
+ * 
+ * @author jmvivo
+ *
+ */
+public abstract class AbstractDBResourceNoBlocker extends AbstractNonBlockingResource {
+
+	/**
+	 * Default constructor
+	 *
+	 * @param parameters
+	 * @throws InitializeException
+	 */
+	protected AbstractDBResourceNoBlocker(DBResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+        private static class CanConnectException extends AccessResourceException {
+            public CanConnectException(String resource, DataException cause) {
+                super("Can't get a connection to the resource (%(resource))", cause, "_CanConnectException", 0);
+                setValue("resource", resource);
+            }
+        }
+        private static class CanGetConnectException extends AccessResourceException {
+            public CanGetConnectException(String datasource, DataException cause) {
+                super("Can't get the connection of the resource (%(resource))", cause, "_CanGetConnectionException", 0);
+                setValue("resource", datasource);
+            }
+        }
+    
+	/**
+	 * Return a connection to the data base.<br>
+	 * Connect to the Data Base if is needed
+	 *
+	 * @return connection to the data base
+	 */
+	public Object get() throws AccessResourceException {
+		if (!isConnected()) {
+			try {
+				this.connect();
+			} catch (DataException e) {
+				throw new CanConnectException(this.toString(), e);
+			}
+		}
+		try {
+			return getTheConnection();
+		} catch (DataException e) {
+			throw new CanGetConnectException(this.toString(), e);
+		}
+	}
+
+	/**
+	 * Return a connection to the data base.<br>
+	 * Connect to the Data Base if is needed
+	 *
+	 *
+	 * @return connection to the data base
+	 * @see #get()
+	 */
+	public Object getConnection() throws AccessResourceException {
+		return get();
+	}
+
+	/**
+	 * inform if connection to the data base is established
+	 *
+	 * @return
+	 */
+	public abstract boolean isConnected();
+
+	/**
+	 * Establish connection to data base
+	 *
+	 * @throws DataException
+	 */
+	public final void connect() throws DataException {
+		if (this.isConnected()) {
+			return;
+		}
+		prepare();
+		connectToDB();
+	}
+
+	/**
+	 * final implementation method to Establish connection to data base<br>
+	 * Called from {@link #get()}<br>
+	 * <br>
+	 *
+	 *
+	 * @throws DataException
+	 */
+	protected abstract void connectToDB() throws DataException;
+
+	/**
+	 * final implementation method to get a connection to data base<br>
+	 * Called from {@link #connect()}<br>
+	 * <br>
+	 * This method is called with the connection establish
+	 *
+	 * @throws DataException
+	 */
+	protected abstract Object getTheConnection() throws DataException;
+
+	/**
+	 * Check if parameters is the same for this resource.<br>
+	 * <br>
+	 *
+	 * <strong>Note:</strong> override this method to add checks for specify
+	 * final implementation parameters
+	 *
+	 *
+	 * @see AbstractResource#isThis(ResourceParameters)
+	 */
+	public boolean isThis(ResourceParameters parameters)
+			throws ResourceException {
+		if (!(parameters instanceof DBResourceParameters)) {
+			return false;
+		}
+		DBResourceParameters params = (DBResourceParameters) parameters
+				.getCopy();
+		prepare(params);
+		DBResourceParameters myParams = (DBResourceParameters) this
+				.getParameters();
+
+		if (!equals(myParams.getHost(), params.getHost())) {
+			return false;
+		}
+		if (!equals(myParams.getPort(), params.getPort())) {
+			return false;
+		}
+		if (!equals(myParams.getUser(), params.getUser())) {
+			return false;
+		}
+        if (!equals(myParams.getPassword(), params.getPassword())) {
+            return false;
+        }
+		return true;
+	}
+
+	@SuppressWarnings("unchecked")
+	protected boolean equals(Comparable v1, Comparable v2) {
+		if (v1 == v2) {
+			return true;
+		}
+		if ((v1 != null) && (v2 != null)) {
+			return v1.compareTo(v2) == 0;
+		}
+		return false;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/AbstractDBResourceNoBlocker.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceParameters.java	(revision 42196)
@@ -0,0 +1,132 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.resource.db;
+
+import org.gvsig.fmap.dal.resource.spi.AbstractResourceParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+/**
+ * Base Abstract class to Data Base Resources Parameters
+ *
+ * @author jmvivo
+ *
+ */
+public abstract class DBResourceParameters extends AbstractResourceParameters
+		implements DBParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "DBResourceParameters";
+	private DelegatedDynObject parameters;
+
+    public DBResourceParameters(String parametersDefinitionName, String typeName) {
+    	this.parameters = (DelegatedDynObject) DBHelper.newParameters(parametersDefinitionName);
+    	this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, typeName);
+	}
+
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return parameters;
+	}
+
+	public String getTypeName() {
+    	return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+    
+    public String getHost() {
+		return (String) this.getDynValue(HOST_PARAMTER_NAME);
+	}
+
+	public Integer getPort() {
+		return (Integer) this.getDynValue(PORT_PARAMTER_NAME);
+	}
+
+	public String getDBName() {
+		return (String) this.getDynValue(DBNAME_PARAMTER_NAME);
+	}
+
+	public String getUser() {
+		return (String) this.getDynValue(USER_PARAMTER_NAME);
+	}
+
+	public String getPassword() {
+		return (String) this.getDynValue(PASSWORD_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set <code>host</code> parameter value
+	 *
+	 * @param host
+	 */
+	public void setHost(String host) {
+		this.setDynValue(HOST_PARAMTER_NAME, host);
+	}
+
+	/**
+	 * Set <code>port</code> parameter value
+	 *
+	 * @param port
+	 */
+	public void setPort(int port) {
+		this.setDynValue(PORT_PARAMTER_NAME, new Integer(port));
+	}
+
+	/**
+	 * Set <code>port</code> parameter value
+	 *
+	 * @param port
+	 */
+	public void setPort(Integer port) {
+		this.setDynValue(PORT_PARAMTER_NAME, port);
+	}
+
+	/**
+	 * Set <code>data base name</code> parameter value
+	 *
+	 * @param data
+	 *            base name
+	 */
+	public void setDBName(String dbName) {
+		this.setDynValue(DBNAME_PARAMTER_NAME, dbName);
+	}
+
+	/**
+	 * Set <code>user</code> parameter value
+	 * 
+	 * @param user
+	 */
+	public void setUser(String user) {
+		this.setDynValue(USER_PARAMTER_NAME, user);
+	}
+
+	/**
+	 * Set <code>password</code> parameter value
+	 * 
+	 * @param password
+	 */
+	public void setPassword(String password) {
+		this.setDynValue(PASSWORD_PARAMTER_NAME, password);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/resource/db/DBResourceParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorer.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.serverexplorer.db;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * Base interface of {@link DataServerExplorer} for Data Base type server
+ *
+ * @author jmvivo
+ *
+ */
+public interface DBServerExplorer extends DataServerExplorer {
+
+	/**
+	 * Return a instance of {@link NewDataStoreParameters} to fill
+	 *
+	 * @return
+	 * @throws DataException
+	 */
+	public NewDataStoreParameters getAddParameters()
+			throws DataException;
+
+	/**
+	 * Return the {@link FeatureType} of the store of <code>dsp</code> store
+	 *
+	 * @param dsp
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureType getFeatureType(DataStoreParameters dsp)
+			throws DataException;
+	/**
+	 * Open a store defined by <code>dsp</code>
+	 *
+	 * @param dsp
+	 * @return
+	 * @throws DataException
+	 */
+	public DataStore open(DataStoreParameters dsp)
+			throws DataException;
+
+	/**
+	 * Open connection to the server
+	 *
+	 * @throws OpenException
+	 */
+	public void open() throws OpenException;
+
+
+	/**
+	 * Close connection to the server
+	 *
+	 * @throws OpenException
+	 */
+	public void close() throws CloseException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorerParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorerParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorerParameters.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.db;
+
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+/**
+ * Abstract class of {@link DataServerExplorerParameters} for Data Base type
+ * server
+ *
+ * @author jmvivo
+ *
+ */
+public abstract class DBServerExplorerParameters extends AbstractDataParameters
+		implements DataServerExplorerParameters, DBConnectionParameter {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "DBServerExplorerParameters";
+
+    private DelegatedDynObject parameters;
+
+	public DBServerExplorerParameters(String parametersDefinitionName, String explorerName) {
+		this.parameters = (DelegatedDynObject) DBHelper.newParameters(parametersDefinitionName);
+		this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, explorerName);
+	}
+
+	public String getExplorerName() {
+		return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+	}
+	
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return parameters;
+	}
+
+	public String getHost() {
+		return (String) this.getDynValue(HOST_PARAMTER_NAME);
+	}
+
+	public Integer getPort() {
+		return (Integer) this.getDynValue(PORT_PARAMTER_NAME);
+	}
+
+	public String getDBName() {
+		return (String) this.getDynValue(DBNAME_PARAMTER_NAME);
+	}
+
+	public String getUser() {
+		return (String) this.getDynValue(USER_PARAMTER_NAME);
+	}
+
+	public String getPassword() {
+		return (String) this.getDynValue(PASSWORD_PARAMTER_NAME);
+	}
+
+	/**
+	 * Set <code>host</code> parameter value
+	 *
+	 * @param host
+	 */
+	public void setHost(String host) {
+		this.setDynValue(HOST_PARAMTER_NAME, host);
+	}
+
+	/**
+	 * Set <code>port/code> parameter value
+	 *
+	 * @param port
+	 */
+	public void setPort(int port) {
+		this.setDynValue(PORT_PARAMTER_NAME, new Integer(port));
+	}
+
+	/**
+	 * Set <code>port/code> parameter value
+	 *
+	 * @param port
+	 */
+	public void setPort(Integer port) {
+		this.setDynValue(PORT_PARAMTER_NAME, port);
+	}
+
+	/**
+	 * Set <code>data base name/code> parameter value
+	 *
+	 * @param data
+	 *            base name
+	 */
+	public void setDBName(String dbName) {
+		this.setDynValue(DBNAME_PARAMTER_NAME, dbName);
+	}
+
+	/**
+	 * Set <code>user/code> parameter value
+	 *
+	 * @param user
+	 */
+	public void setUser(String user) {
+		this.setDynValue(USER_PARAMTER_NAME, user);
+	}
+
+	/**
+	 * Set <code>password/code> parameter value
+	 * 
+	 * @param password
+	 */
+	public void setPassword(String password) {
+		this.setDynValue(PASSWORD_PARAMTER_NAME, password);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBServerExplorerParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBConnectionParameter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBConnectionParameter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBConnectionParameter.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.db;
+
+import org.gvsig.fmap.dal.resource.db.DBParameters;
+
+/**
+ * Interface for describe parameters of a Data Base connection
+ *
+ *
+ * @author jmvivo
+ *
+ */
+
+public interface DBConnectionParameter extends DBParameters {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/DBConnectionParameter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/spi/AbstractDBServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/spi/AbstractDBServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/spi/AbstractDBServerExplorer.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.db.spi;
+
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProvider;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+
+/**
+ * Abstract class for {@link DBServerExplorer} implementation
+ *
+ * @author jmvivo
+ *
+ */
+public abstract class AbstractDBServerExplorer extends AbstractDisposable
+		implements DBServerExplorer, DataServerExplorerProvider {
+
+	private DataServerExplorerProviderServices dataServerExplorerProviderServices;
+	private DataServerExplorerParameters dataServerParameters;
+
+	protected AbstractDBServerExplorer(DataServerExplorerParameters parameters,
+			DataServerExplorerProviderServices services) {
+		this.dataServerParameters = parameters;
+		this.dataServerExplorerProviderServices = services;
+	}
+
+	/**
+	 * Return the name of {@link DataStoreProvider} returned by this
+	 * ServerExplorer
+	 *
+	 * @return
+	 */
+	public abstract String getStoreName();
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer#canAdd(java.lang.String)
+	 */
+	public boolean canAdd(String storeName) throws DataException {
+		return getStoreName().equals(storeName);
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer#getAddParameters(java.lang.String)
+	 */
+	public NewDataStoreParameters getAddParameters(String storeName)
+			throws DataException {
+		if (!getStoreName().equals(storeName)) {
+			// FIXME exception
+			throw new IllegalArgumentException();
+		}
+		return getAddParameters();
+	}
+
+	/**
+	 * Return instance of {@link DataServerExplorerProviderServices}
+	 *
+	 */
+	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
+		return dataServerExplorerProviderServices;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer#getParameters()
+	 */
+	public DataServerExplorerParameters getParameters() {
+		return dataServerParameters;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/serverexplorer/db/spi/AbstractDBServerExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/DALDbLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/DALDbLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/DALDbLibrary.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Initialize DAL data base basic support
+ *
+ * @author jmvivo
+ * 
+ */
+public class DALDbLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/java/org/gvsig/fmap/dal/DALDbLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/resource/db/DBParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/resource/db/DBParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/resource/db/DBParameters.xml	(revision 42196)
@@ -0,0 +1,56 @@
+<?xml version= "1.0 "?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="DBResourceParameters">
+      <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a table of a database</description>
+      <fields>
+        <field name="host" type="string" mandatory="false" group="Connection">
+          <description></description>
+        </field>
+        <field name="port" type="integer" mandatory="false" group="Connection">
+          <description></description>
+        </field>
+
+        <field name="dbname" type="string" mandatory="false" group="Basic">
+          <description></description>
+        </field>
+        <field name="dbuser" type="string" mandatory="false" group="Basic">
+          <description></description>
+        </field>
+        <field name="password" type="string" mandatory="false" group="Basic">
+          <description></description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/resource/db/DBParameters.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/serverexplorer/db/DBParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/serverexplorer/db/DBParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/serverexplorer/db/DBParameters.xml	(revision 42196)
@@ -0,0 +1,41 @@
+<?xml version= "1.0 "?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="DBServerExplorerParameters">
+      <description></description>
+      <extends>
+      	<class name="DBResourceParameters"/>
+      </extends>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/serverexplorer/db/DBParameters.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/store/db/DBParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/store/db/DBParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/store/db/DBParameters.xml	(revision 42196)
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<definitions>
+    <version>1.0.0</version>
+    <classes>
+
+        <class name="DBStoreParameters">
+            <description>Store the parameters need to open a table of a database</description>
+            <extends>
+                <class name="DBResourceParameters"/>
+            </extends>
+            <fields>
+                <!--  Basic data -->
+                <field name="Table" type="string" mandatory="true" group="Basic">
+                    <description>Name of the table or view to access</description>
+                </field>
+                <field name="DefaultGeometryField" type="string" mandatory="false" 
+               group="Basic">
+                    <description>Default geometry field</description>
+                </field>
+
+                <!-- Advanced  -->
+                <field name="CRS" type="crs" mandatory="false">
+                    <description>CRS used to override the autodetection</description>
+                </field>
+                <field name="SQL" type="string" mandatory="false">
+                    <description>SQL to use instead the table name</description>
+                </field>
+                <field name="Fields" type="string" mandatory="false">
+                    <description>comma separated list of the field names that we want to use</description>
+                </field>
+                <field name="BaseFilter" type="string" mandatory="false">
+                    <description>This filter is passed to BD provider on each request as a base filter.</description>
+                </field>
+                <field name="BaseOrder" type="string" mandatory="false">
+                    <description>This order is used if no custom order is request in query.</description>
+                </field>
+                <field name="PKFields" type="string" mandatory="false">
+                    <description>Comma separated list of the field names that compound the primary key</description>
+                </field>
+                <field name="Workingarea" type="envelope" mandatory="false">
+                    <description>Envelop that define the filter by area used</description>
+                </field>
+            </fields>
+        </class>
+
+        <class name="DBNewStoreParameters">
+            <description>Store the parameters need to open a table of a database</description>
+            <extends>
+                <class name="DBResourceParameters"/>
+                <class namespace="dal" name="NewProviderParameters"/>
+            </extends>
+            <fields>
+                <field name="Table" type="string" mandatory="true" group="Basic">
+                    <description>Name of the table or view to access</description>
+                </field>
+            </fields>
+        </class>
+
+    </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/org/gvsig/fmap/dal/store/db/DBParameters.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1,3 @@
+org.gvsig.fmap.dal.DALDbLibrary
+org.gvsig.fmap.dal.resource.db.DBResourceLibrary
+org.gvsig.fmap.dal.store.db.DBStoreLibrary
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/org/gvsig/fmap/dal/store/h2/H2Metadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/org/gvsig/fmap/dal/store/h2/H2Metadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/org/gvsig/fmap/dal/store/h2/H2Metadata.xml	(revision 42196)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="H2" namespace="Metadata">
+      <extends>
+      	<class name="JDBC" namespace="Metadata"/>
+      </extends>
+      <description>Metadata of a H2 store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/org/gvsig/fmap/dal/store/h2/H2Parameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/org/gvsig/fmap/dal/store/h2/H2Parameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/org/gvsig/fmap/dal/store/h2/H2Parameters.xml	(revision 42196)
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="H2ResourceParameters">
+      <extends>
+        <class>JDBCResourceParameters</class>
+      </extends>
+      <fields>
+        <field name="JDBCDriverClass" type="string" mandatory="true"
+          defaultValue="org.h2.Driver" group="Advanced">
+          <description>JDBC Driver class</description>
+        </field>
+		<field name="port" type="integer" mandatory="false"
+          defaultValue="9123" group="Connection">
+          <description></description>
+        </field>
+        <field name="UseSSL" type="boolean" mandatory="false"
+          defaultValue="false" group="Basic">
+          <description>Use SSL connetion</description>
+        </field>
+      </fields>
+    </class>
+
+    <class name="H2StoreParameters">
+      <extends>
+        <class>JDBCStoreParameters</class>
+        <class>H2ResourceParameters</class>
+      </extends>
+      <fields/>
+    </class>
+
+    <class name="H2NewStoreParameters">
+      <extends>
+        <class>JDBCNewStoreParameters</class>
+        <class>H2ResourceParameters</class>
+      </extends>
+      <fields/>
+    </class>
+
+
+    <class name="H2ServerExplorerParameters">
+      <extends>
+        <class>H2ResourceParameters</class>
+        <class>JDBCServerExplorerParameters</class>
+      </extends>
+      <fields/>
+    </class>
+
+
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.h2.H2Library
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ConnectionParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ConnectionParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ConnectionParameters.java	(revision 42196)
@@ -0,0 +1,50 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 IVER T.I   {{Task}}
+*/
+
+/**
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.io.File;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+
+/**
+ * @author jmvivo
+ *
+ */
+public interface H2ConnectionParameters extends
+		JDBCConnectionParameters {
+
+	public static final String PARAMETER_NAME_USESSL = "UseSSL";
+        
+        public static final String PARAMETER_NAME_BASEFOLDER = "BaseFolder";
+
+        public File getBaseFolder();
+        
+	public Boolean getUseSSL();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ParametersHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ParametersHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ParametersHelper.java	(revision 42196)
@@ -0,0 +1,112 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class H2ParametersHelper {
+
+    private static Logger logger = LoggerFactory.getLogger(H2ParametersHelper.class);
+
+    public static String getConnectionString(H2ConnectionParameters params) {
+        String connectionString = null;
+
+        File baseFolder = params.getBaseFolder();
+        String baseFolderPath = null;
+        if ( baseFolder == null ) {
+            baseFolder = getDefaultBaseFolder();
+        }
+        if ( baseFolder == null ) {
+            baseFolderPath = baseFolder.getAbsolutePath();
+            baseFolderPath = baseFolderPath.replace("\\", "/");
+        }
+        
+        String dbname = params.getDBName();
+        if ( dbname == null ) {
+            logger.warn("dbname is null.");
+            throw new IllegalArgumentException("dbname is null");
+        }
+
+        String host = params.getHost();
+
+        Integer port = params.getPort();
+        if ( port == null ) {
+            port = new Integer(9123);
+        }
+
+        if ( StringUtils.isBlank(host) ) {
+            if( baseFolderPath == null ) {
+                throw new IllegalArgumentException("baseFolder required");
+            }
+            connectionString = "jdbc:h2:" + baseFolderPath + "/" + dbname + ";MODE=PostgreSQL;AUTO_SERVER=TRUE";
+        } else {
+            if ( host.trim().equalsIgnoreCase("localhost") ) {
+                if( baseFolderPath == null ) {
+                    connectionString = "jdbc:h2:tcp://localhost:" + port.intValue() + "/" + dbname + ";MODE=PostgreSQL";
+                } else {
+                    connectionString = "jdbc:h2:" + baseFolderPath + "/" + dbname + ";MODE=PostgreSQL;AUTO_SERVER=TRUE;AUTO_SERVER_PORT=" + port;
+                }
+            } else {
+                if( baseFolderPath == null ) {
+                    connectionString = "jdbc:h2:tcp://" + host + ":" + port.intValue() + "/" + dbname + ";MODE=PostgreSQL";
+                } else {
+                    connectionString = "jdbc:h2:tcp://" + host + ":" + port.intValue() + "/" + dbname + ":" + baseFolder + ";MODE=PostgreSQL";
+                }
+            }
+        }
+
+        return connectionString;
+    }
+
+    public static File getDefaultBaseFolder() {
+        File baseFolder = null;
+        String s = System.getProperty("user.home");
+        File baseFolderInHome = new File(s + File.separator + "gvSIG" + File.separator + "dbs.h2");
+        if ( !baseFolderInHome.exists() ) {
+            try {
+                FileUtils.forceMkdir(baseFolderInHome);
+                baseFolder = baseFolderInHome;
+            } catch (IOException ex) {
+
+            }
+        }
+        if ( baseFolder == null ) {
+            s = System.getProperty("java.io.tmpdir");
+            File baseFolderInTemp = new File(s + File.separator + "gvSIG" + File.separator + "dbs.h2");
+            if ( !baseFolderInTemp.exists() ) {
+                try {
+                    FileUtils.forceMkdir(baseFolderInTemp);
+                    baseFolder = baseFolderInTemp;
+                } catch (IOException ex) {
+
+                }
+            }
+        }
+        return baseFolder;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Library.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Library.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Library.java	(revision 42196)
@@ -0,0 +1,113 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCLibrary;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class H2Library extends AbstractLibrary {
+
+    static String DEFAULT_H2_DRIVER_NAME = "org.h2.Driver";
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+        require(JDBCLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        LibraryException ex = null;
+
+        //new JDBCLibrary().postInitialize();
+
+        DBHelper.registerParametersDefinition(
+                H2StoreParameters.PARAMETERS_DEFINITION_NAME,
+                H2StoreParameters.class,
+                "H2SQLParameters.xml"
+        );
+        DBHelper.registerParametersDefinition(
+                H2NewStoreParameters.PARAMETERS_DEFINITION_NAME,
+                H2NewStoreParameters.class,
+                "H2SQLParameters.xml"
+        );
+        DBHelper.registerParametersDefinition(
+                H2ServerExplorerParameters.PARAMETERS_DEFINITION_NAME,
+                H2ServerExplorerParameters.class,
+                "H2SQLParameters.xml"
+        );
+        DBHelper.registerParametersDefinition(
+                H2ResourceParameters.PARAMETERS_DEFINITION_NAME,
+                H2ResourceParameters.class,
+                "H2SQLParameters.xml"
+        );
+        try {
+            DBHelper.registerMetadataDefinition(
+                    H2StoreProvider.METADATA_DEFINITION_NAME,
+                    H2StoreProvider.class,
+                    "H2SQLMetadata.xml"
+            );
+        } catch (MetadataException e) {
+            ex = new LibraryException(this.getClass(), e);
+        }
+
+        ResourceManagerProviderServices resman = (ResourceManagerProviderServices) DALLocator
+                .getResourceManager();
+
+        if ( !resman.getResourceProviders().contains(H2Resource.NAME) ) {
+            resman.register(H2Resource.NAME,
+                    H2Resource.DESCRIPTION, H2Resource.class,
+                    H2ResourceParameters.class);
+        }
+
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+                .getDataManager();
+
+        if ( !dataman.getStoreProviders().contains(H2StoreProvider.NAME) ) {
+            dataman.registerStoreProvider(H2StoreProvider.NAME,
+                    H2StoreProvider.class,
+                    H2StoreParameters.class);
+        }
+
+        if ( !dataman.getExplorerProviders().contains(
+                H2StoreProvider.NAME) ) {
+            dataman.registerExplorerProvider(H2ServerExplorer.NAME,
+                    H2ServerExplorer.class,
+                    H2ServerExplorerParameters.class);
+        }
+        if ( ex != null ) {
+            throw ex;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2SetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2SetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2SetProvider.java	(revision 42196)
@@ -0,0 +1,210 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 IVER T.I   {{Task}}
+*/
+
+/**
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCSetProvider;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreProvider;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorFieldValue;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class H2SetProvider extends JDBCSetProvider {
+
+    private static Logger logger = LoggerFactory.getLogger(H2SetProvider.class);
+    
+	public H2SetProvider(JDBCStoreProvider store, FeatureQuery query,
+			FeatureType featureType) throws DataException {
+		super(store, query, featureType);
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#canFilter()
+	 */
+	public boolean canFilter() {
+		// TODO more checks
+		if (!super.canFilter()) {
+			return false;
+		}
+		return true;
+
+	}
+	
+    protected String getSqlForEvaluator(Evaluator filter) {
+        
+        String resp = null;
+        if (filter != null && filter.getSQL() != null) {
+            // =================================================
+            EvaluatorFieldsInfo info = filter.getFieldsInfo();
+            String filterString = filter.getSQL();
+            
+            String[] filterNames = null;
+            String[] finalNames = null;
+            
+            if (info == null) {
+                filterNames = getFieldNames(getFeatureType());
+            } else {
+                filterNames = info.getFieldNames();
+            }
+            
+            finalNames = new String[filterNames.length];
+            FeatureAttributeDescriptor attr;
+            for (int i = 0; i < filterNames.length; i++) {
+                attr = getFeatureType().getAttributeDescriptor(filterNames[i]);
+                if (attr == null) {
+                    finalNames[i] = filterNames[i];
+                    continue;
+                }
+                finalNames[i] = getEscapedFieldName(attr.getName());
+            }
+
+            for (int i = 0; i < filterNames.length; i++) {
+                if (!filterNames[i].equals(finalNames[i])) {
+                    filterString = filterString.replaceAll(
+                            "\\b" + filterNames[i] + "\\b",
+                            finalNames[i]);
+                }
+            }
+            resp = filterString;        
+        }
+        // ================================
+        // In any case, append working area filter
+        
+        try {
+            resp = appendWorkingAreaCondition(resp);
+        } catch (Exception e) {
+            logger.error("While appending working area condition.", e);
+        }
+        return resp;
+    }	
+    
+    private String[] getFieldNames(FeatureType ft) {
+        
+        if (ft == null) {
+            return new String[0];
+        }
+        FeatureAttributeDescriptor[] atts = ft.getAttributeDescriptors();
+        String[] resp = new String[atts.length];
+        for (int i=0; i<atts.length; i++) {
+            resp[i] = atts[i].getName();
+        }
+        return resp;
+    }
+    
+    private String getFunctionName(String newFunctionName) {
+        
+        H2StoreProvider pg_sto_prov = (H2StoreProvider) this.getStore();
+        H2Helper hpr = pg_sto_prov.getPgHelper();
+        if (hpr == null) {
+            logger.info("Unable to get PG helper.", new Exception("Helper is null"));
+            return newFunctionName;
+        } else {
+            return hpr.getFunctionName(newFunctionName);
+        }
+    }
+
+
+    private String appendWorkingAreaCondition(String sql) throws Exception {
+        
+        
+        DBStoreParameters dbParams = 
+        (DBStoreParameters) getStore().getParameters();
+        
+        Envelope wa = dbParams.getWorkingArea(); 
+        if (wa == null) {
+            return sql;
+        } else {
+            
+            FeatureStore fstore = this.getStore().getFeatureStore();
+            String geoname =
+                fstore.getDefaultFeatureType().getDefaultGeometryAttributeName();
+            
+            StringBuffer strbuf = new StringBuffer();
+            
+            if (sql == null)  {
+                strbuf.append(
+                    getFunctionName("ST_Intersects") + "("
+                    + getFunctionName("ST_GeomFromText") + "('");
+            } else {
+                strbuf.append("(");
+                strbuf.append(sql);
+                strbuf.append(") AND "
+                    + getFunctionName("ST_Intersects") + "("
+                    + getFunctionName("ST_GeomFromText") + "('");
+            }
+            
+            String workAreaWkt = null;
+            workAreaWkt = wa.getGeometry().convertToWKT();
+            strbuf.append(workAreaWkt);
+            strbuf.append("', ");
+            
+            H2StoreProvider sprov = (H2StoreProvider) getStore();
+            H2Helper helper = sprov.getPgHelper();
+            
+            IProjection proj = dbParams.getCRS();
+            int sridInt = helper.getProviderSRID(proj); 
+            if (sridInt == -1) {
+                throw new CreateGeometryException(
+                        new Exception("CRS is null or unknown."));
+            } else {
+                strbuf.append(Integer.toString(sridInt));
+            }
+            strbuf.append("), " + getFunctionName("ST_Envelope") + "(");
+            strbuf.append(helper.escapeFieldName(geoname));
+            strbuf.append("))");
+            
+            return strbuf.toString();
+        }
+    }
+	
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Resource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Resource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Resource.java	(revision 42196)
@@ -0,0 +1,210 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 IVER T.I   {{Task}}
+*/
+
+package org.gvsig.fmap.dal.store.h2;
+
+import java.sql.SQLException;
+import java.text.MessageFormat;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.dbcp.BasicDataSource;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResource;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResourceParameters;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCDriverClassNotFoundException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class H2Resource extends JDBCResource {
+	
+	final static private Logger logger = LoggerFactory
+			.getLogger(H2Resource.class);
+
+	public final static String NAME = "H2SQLResource";
+	public static final String DESCRIPTION = "H2SQL Connection";
+
+	public H2Resource(H2ResourceParameters parameters)
+			throws InitializeException {
+		super(parameters);
+	}
+
+	public String getName() throws AccessResourceException {
+		H2ResourceParameters params = (H2ResourceParameters) this.getParameters();
+		return MessageFormat.format("H2SQLResource({0},{1})",
+				new Object[] { params.getUrl(),params.getUser() });
+	}
+        
+        public String toString() {
+            try {
+                return this.getName();
+            } catch(Exception ex) {
+                return super.toString();
+            }
+        }
+
+	protected void connectToDB() throws DataException {
+		if (this.dataSource != null) {
+			return;
+		}
+		JDBCResourceParameters jdbcParams = (JDBCResourceParameters) this
+				.getParameters();
+		BasicDataSource dataSource = new BasicDataSource();
+		dataSource.setDriverClassName(jdbcParams.getJDBCDriverClassName());
+		dataSource.setUsername(jdbcParams.getUser());
+		dataSource.setPassword(jdbcParams.getPassword());
+		dataSource.setUrl(jdbcParams.getUrl());
+
+		dataSource.setMaxWait(60L * 1000); // FIXME
+
+		// FIXME Set Pool parameters:
+		/*
+		dataSource.setMaxActive(maxActive);
+		dataSource.setMaxIdle(maxActive);
+		dataSource.setMaxOpenPreparedStatements(maxActive);
+		dataSource.setMaxWait(maxActive);
+		dataSource.setInitialSize(initialSize);
+		dataSource.setDefaultReadOnly(defaultReadOnly);
+		dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);
+		dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+		dataSource.setMinIdle(minIdle);
+		dataSource.setTestOnBorrow(testOnBorrow);
+		dataSource.setTestOnReturn(testOnReturn);
+		dataSource.setTestWhileIdle(testOnReturn);
+		dataSource
+				.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+
+		dataSource.setAccessToUnderlyingConnectionAllowed(allow);
+		dataSource.setLoginTimeout(seconds);
+		dataSource.setLogWriter(out);
+		*/
+
+		this.dataSource = dataSource;
+	}	
+	protected void registerJDBCDriver() throws InitializeException {
+		String className = ((JDBCResourceParameters) getParameters())
+				.getJDBCDriverClassName();
+		if (className == null) {
+			return;
+		}
+
+		Class theClass = null;
+		try {
+			theClass = Class.forName(className);
+		} catch (Exception e){
+			throw new InitializeException(e);
+		}
+		if (theClass == null) {
+			try {
+				throw new JDBCDriverClassNotFoundException(this.getName(),
+						className);
+			} catch (AccessResourceException e) {
+				throw new InitializeException(e);
+
+			}
+		}
+	}
+	
+	protected DataSource createDataSource() {
+		H2ResourceParameters jdbcParams = (H2ResourceParameters) this
+				.getParameters();
+		BasicDataSource dataSource = new BasicDataSource();
+		dataSource.setDriverClassName(jdbcParams.getJDBCDriverClassName());
+		dataSource.setUsername(jdbcParams.getUser());
+		dataSource.setPassword(jdbcParams.getPassword());
+		dataSource.setUrl(jdbcParams.getUrl());
+
+		dataSource.setMaxWait(60L * 1000); // FIXME
+
+		// FIXME Set Pool parameters:
+		/*
+		dataSource.setMaxActive(maxActive);
+		dataSource.setMaxIdle(maxActive);
+		dataSource.setMaxOpenPreparedStatements(maxActive);
+		dataSource.setMaxWait(maxActive);
+		dataSource.setInitialSize(initialSize);
+		dataSource.setDefaultReadOnly(defaultReadOnly);
+		dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);
+		dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+		dataSource.setMinIdle(minIdle);
+		dataSource.setTestOnBorrow(testOnBorrow);
+		dataSource.setTestOnReturn(testOnReturn);
+		dataSource.setTestWhileIdle(testOnReturn);
+		dataSource
+			.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+
+		dataSource.setAccessToUnderlyingConnectionAllowed(allow);
+		dataSource.setLoginTimeout(seconds);
+		dataSource.setLogWriter(out);
+		 */
+		return dataSource;
+	}
+	
+	
+	public boolean isConnected() {
+		if (dataSource == null) {
+			return false;
+		}
+		if (dataSource instanceof BasicDataSource) {
+			return ((BasicDataSource) dataSource).getNumActive() > 0
+					|| ((BasicDataSource) dataSource).getNumIdle() > 0;
+		}
+		return true;
+	}	
+	
+	private void logPoolStatus(String src) {
+		if (logger.isDebugEnabled() && dataSource instanceof BasicDataSource) {
+			BasicDataSource ds = (BasicDataSource) dataSource;
+			logger.debug(src + "  actives:" + ds.getNumActive() + "("
+					+ ds.getMaxActive() + ") idle:" + ds.getNumIdle() + "("
+					+ ds.getMaxIdle() + ")");
+		}
+
+	}
+
+        private static class CanGetConnectionException extends JDBCSQLException {
+            public CanGetConnectionException(String datasource, SQLException cause) {
+                super("Can't get a connection to the data source (%(datasource))", cause, "_CanGetConnectionException", 0);
+                setValue("datasource", datasource);
+            }
+        }
+    
+	protected synchronized Object getTheConnection() throws DataException {
+		try {
+			Object conn = this.dataSource.getConnection();
+			logPoolStatus("getTheConnection");
+			return conn;
+		} catch (SQLException e) {
+			throw new CanGetConnectionException(this.toString(),e);
+		}
+	}	
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ServerExplorer.java	(revision 42196)
@@ -0,0 +1,253 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 IVER T.I   {{Task}}
+ */
+/**
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.TransactionalAction;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class H2ServerExplorer extends JDBCServerExplorer {
+
+    final static private Logger logger = LoggerFactory
+            .getLogger(H2ServerExplorer.class);
+
+    public static final String NAME = "H2SQLExplorer";
+
+    public H2ServerExplorer(
+            H2ServerExplorerParameters parameters,
+            DataServerExplorerProviderServices services)
+            throws InitializeException {
+        super(parameters, services);
+    }
+
+    private H2ServerExplorerParameters getH2SQLParameters() {
+        return (H2ServerExplorerParameters) getParameters();
+    }
+
+    protected JDBCHelper createHelper() throws InitializeException {
+        return new H2Helper(this, getH2SQLParameters());
+    }
+
+    public String getStoreName() {
+        return H2StoreProvider.NAME;
+    }
+
+    public String getProviderName() {
+        return NAME;
+    }
+
+    protected JDBCStoreParameters createStoreParams()
+            throws InitializeException, ProviderNotRegisteredException {
+        H2StoreParameters orgParams = (H2StoreParameters) super
+                .createStoreParams();
+
+        orgParams.setUseSSL(getH2SQLParameters().getUseSSL());
+
+        return orgParams;
+    }
+
+	// ****************************
+    public boolean canAdd() {
+        return true;
+    }
+
+    public DataStoreParameters getOpenParameters() throws DataException {
+        H2ServerExplorerParameters parameters = getH2SQLParameters();
+        H2StoreParameters params = new H2StoreParameters();
+        params.setHost(parameters.getHost());
+        params.setPort(parameters.getPort());
+        params.setDBName(parameters.getDBName());
+        params.setUser(parameters.getUser());
+        params.setPassword(parameters.getPassword());
+        params.setCatalog(parameters.getCatalog());
+        params.setSchema(parameters.getSchema());
+        params.setJDBCDriverClassName(parameters.getJDBCDriverClassName());
+        params.setUrl(parameters.getUrl());
+        return params;
+    }
+
+    protected void checkIsMine(DataStoreParameters dsp) {
+        if (!(dsp instanceof H2ConnectionParameters)) {
+            // FIXME Excpetion ???
+            throw new IllegalArgumentException(
+                    "not instance of H2SQLConnectionParameters");
+        }
+        super.checkIsMine(dsp);
+
+        H2ConnectionParameters pgp = (H2ConnectionParameters) dsp;
+        if (pgp.getUseSSL().booleanValue() != getH2SQLParameters()
+                .getUseSSL()) {
+            throw new IllegalArgumentException("worng explorer: Host");
+        }
+    }
+
+    public void remove(DataStoreParameters dsp) throws RemoveException {
+        final H2StoreParameters pgParams = (H2StoreParameters) dsp;
+
+        TransactionalAction action = new TransactionalAction() {
+            public boolean continueTransactionAllowed() {
+                return false;
+            }
+
+            public Object action(Connection conn) throws DataException {
+
+                Statement st;
+                try {
+                    st = conn.createStatement();
+                } catch (SQLException e) {
+                    throw new JDBCSQLException(e);
+                }
+
+                String sqlDrop = "Drop table "
+                        + pgParams.tableID();
+
+                StringBuilder strb = new StringBuilder();
+                strb.append("Delete from GEOMETRY_COLUMNS where f_table_schema = ");
+                if (pgParams.getSchema() == null || pgParams.getSchema().length() == 0) {
+                    strb.append("current_schema() ");
+                } else {
+                    strb.append('\'');
+                    strb.append(pgParams.getSchema());
+                    strb.append("' ");
+                }
+                strb.append("and f_table_name = '");
+                strb.append(pgParams.getTable());
+                strb.append('\'');
+
+                String sqlDeleteFromGeometry_column = strb.toString();
+                try {
+                    try {
+                        JDBCHelper.execute(st, sqlDrop);
+                    } catch (SQLException e) {
+                        throw new JDBCExecuteSQLException(sqlDrop, e);
+                    }
+
+                    try {
+                        JDBCHelper.execute(st, sqlDeleteFromGeometry_column);
+                    } catch (SQLException e) {
+                        throw new JDBCExecuteSQLException(
+                                sqlDeleteFromGeometry_column, e);
+                    }
+
+                } finally {
+                    try {
+                        st.close();
+                    } catch (SQLException e) {
+                    };
+                }
+                return null;
+            }
+        };
+        try {
+            this.helper.doConnectionAction(action);
+        } catch (Exception e) {
+            throw new RemoveException(this.getProviderName(), e);
+        }
+    }
+
+    public NewDataStoreParameters getAddParameters() throws DataException {
+        H2ServerExplorerParameters parameters = getH2SQLParameters();
+        H2NewStoreParameters params = new H2NewStoreParameters();
+        params.setHost(parameters.getHost());
+        params.setPort(parameters.getPort());
+        params.setDBName(parameters.getDBName());
+        params.setUser(parameters.getUser());
+        params.setPassword(parameters.getPassword());
+        params.setCatalog(parameters.getCatalog());
+        params.setSchema(parameters.getSchema());
+        params.setJDBCDriverClassName(parameters.getJDBCDriverClassName());
+        params.setUrl(parameters.getUrl());
+        params.setUseSSL(parameters.getUseSSL());
+
+        params.setDefaultFeatureType(this.getServerExplorerProviderServices()
+                .createNewFeatureType());
+
+        return params;
+    }
+
+    public boolean hasGeometrySupport() {
+        return true;
+    }
+
+    protected H2Helper getPgHelper() {
+        return (H2Helper) getHelper();
+    }
+
+    @Override
+    public List getDataStoreProviderNames() {
+        List x = new ArrayList(1);
+        x.add(H2StoreProvider.NAME);
+        return x;
+    }
+
+    public void updateTableStatistics(String tableName) throws JDBCExecuteSQLException {
+        String sql="";
+        try {
+            
+            if( tableName.startsWith("\"") ) {
+                sql = "VACUUM ANALYZE " + tableName ;
+            } else {
+                sql = "VACUUM ANALYZE \"" + tableName + "\"";
+            }
+            Connection conn = this.getHelper().getConnection();
+            Statement st = conn.createStatement();
+            JDBCHelper.execute(st, sql);
+        } catch (Exception ex) {
+            throw new JDBCExecuteSQLException(sql, ex);
+        }
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2StoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2StoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2StoreProvider.java	(revision 42196)
@@ -0,0 +1,395 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 IVER T.I   {{Task}}
+*/
+
+package org.gvsig.fmap.dal.store.h2;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreProviderWriter;
+import org.gvsig.fmap.geom.Geometry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class H2StoreProvider extends JDBCStoreProviderWriter {
+
+	public final static Logger logger = LoggerFactory
+			.getLogger(H2StoreProvider.class);
+
+	public static final String NAME = "H2";
+	public static final String DESCRIPTION = "H2 source";
+
+	public static final String METADATA_DEFINITION_NAME = NAME;
+	
+	public H2StoreProvider(H2StoreParameters params,
+			DataStoreProviderServices storeServices)
+			throws InitializeException {
+		super(params, storeServices, DBHelper.newMetadataContainer(METADATA_DEFINITION_NAME));
+	}
+
+	private H2StoreParameters getPGParameters() {
+		return (H2StoreParameters) this.getParameters();
+	}
+
+	protected JDBCHelper createHelper() throws InitializeException {
+	    JDBCHelper resp = new H2Helper(this, getPGParameters());
+	    
+	    return resp;
+	}
+
+
+
+	protected String fixFilter(String _filter) {
+		if (_filter == null) {
+			return null;
+		}
+		
+		String filter = fixFunctionNames(_filter);
+
+		// Transform SRS to code
+		// GeomFromText\s*\(\s*'[^']*'\s*,\s*('[^']*')\s*\)
+		
+		String geom_from_text = this.getFunctionName("ST_GeomFromText");
+		Pattern pattern = Pattern
+				.compile(geom_from_text + "\\s*\\(\\s*'[^']*'\\s*,\\s*'([^']*)'\\s*\\)");
+		Matcher matcher = pattern.matcher(filter);
+		StringBuilder strb = new StringBuilder();
+		int pos = 0;
+		String srsCode;
+		while (matcher.find(pos)) {
+			strb.append(filter.substring(pos, matcher.start(1)));
+			srsCode = matcher.group(1).trim();
+			if (srsCode.startsWith("'")) {
+				srsCode = srsCode.substring(1);
+			}
+			if (srsCode.endsWith("'")) {
+				srsCode = srsCode.substring(0, srsCode.length() - 1);
+			}
+			strb.append(helper.getProviderSRID(srsCode));
+			strb.append(filter.substring(matcher.end(1), matcher.end()));
+			pos = matcher.end();
+
+		}
+		strb.append(filter.substring(pos));
+
+		return strb.toString();
+	}
+
+
+    public String getName() {
+		return NAME;
+	}
+
+	public FeatureSetProvider createSet(FeatureQuery query,
+			FeatureType featureType) throws DataException {
+
+		return new H2SetProvider(this, query, featureType);
+	}
+
+
+	public DataServerExplorer getExplorer() throws ReadException {
+		DataManager manager = DALLocator.getDataManager();
+		H2ServerExplorerParameters exParams;
+		H2StoreParameters params = getPGParameters();
+		try {
+			exParams = (H2ServerExplorerParameters) manager
+					.createServerExplorerParameters(H2ServerExplorer.NAME);
+			exParams.setUrl(params.getUrl());
+			exParams.setHost(params.getHost());
+			exParams.setPort(params.getPort());
+			exParams.setDBName(params.getDBName());
+			exParams.setUser(params.getUser());
+			exParams.setPassword(params.getPassword());
+			exParams.setCatalog(params.getCatalog());
+			exParams.setSchema(params.getSchema());
+			exParams.setJDBCDriverClassName(params.getJDBCDriverClassName());
+			exParams.setUseSSL(params.getUseSSL());
+
+			return manager.openServerExplorer(H2ServerExplorer.NAME, exParams);
+		} catch (DataException e) {
+			throw new ReadException(this.getName(), e);
+		} catch (ValidateDataParametersException e) {
+			throw new ReadException(this.getName(), e);
+		}
+	}
+
+	public boolean allowAutomaticValues() {
+		return true;
+	}
+
+
+	public boolean hasGeometrySupport() {
+		return true;
+	}
+
+
+	protected H2Helper getPgHelper() {
+		return (H2Helper) getHelper();
+	}
+
+
+
+	public boolean canWriteGeometry(int geometryType, int geometrySubtype)
+			throws DataException {
+		FeatureType type = getFeatureStore().getDefaultFeatureType();
+		FeatureAttributeDescriptor geomAttr = type.getAttributeDescriptor(type
+								.getDefaultGeometryAttributeName());
+		if (geomAttr == null) {
+			return false;
+		}
+		if (geometrySubtype != geomAttr.getGeometrySubType()) {
+			return false;
+		}
+		switch (geomAttr.getGeometryType()) {
+		case Geometry.TYPES.GEOMETRY:
+			return true;
+
+		case Geometry.TYPES.MULTISURFACE:
+			return geometryType == Geometry.TYPES.MULTISURFACE
+					|| geometryType == Geometry.TYPES.SURFACE;
+
+		case Geometry.TYPES.MULTIPOINT:
+			return geometryType == Geometry.TYPES.MULTIPOINT
+					|| geometryType == Geometry.TYPES.POINT;
+
+		case Geometry.TYPES.MULTICURVE:
+			return geometryType == Geometry.TYPES.MULTICURVE
+					|| geometryType == Geometry.TYPES.CURVE;
+
+		case Geometry.TYPES.MULTISOLID:
+			return geometryType == Geometry.TYPES.MULTISOLID
+					|| geometryType == Geometry.TYPES.SOLID;
+
+		default:
+			return geometryType == geomAttr.getGeometryType();
+		}
+
+	}
+
+
+	protected void addToListFeatureValues(FeatureProvider featureProvider,
+			FeatureAttributeDescriptor attrOfList,
+			FeatureAttributeDescriptor attr,
+			List<Object> values) throws DataException {
+
+		super.addToListFeatureValues(featureProvider, attrOfList, attr, values);
+		if (attr.getType() == DataTypes.GEOMETRY) {
+			values.add(helper.getProviderSRID(attr.getSRS()));
+		}
+	}
+
+	protected void prepareAttributeForInsert(
+			FeatureAttributeDescriptor attr, List<String> fields, List<String> values) {
+
+		if (attr.getType() == DataTypes.GEOMETRY) {
+			fields.add(helper.escapeFieldName(attr.getName()));
+			values.add(getFunctionName("ST_GeomFromWKB") + "(?,?)");
+		} else {
+			super.prepareAttributeForInsert(attr, fields, values);
+		}
+
+	}
+
+	protected void prepareAttributeForUpdate(FeatureAttributeDescriptor attr,
+			List<String> values) {
+		if (attr.getType() == DataTypes.GEOMETRY) {
+			values.add(helper.escapeFieldName(attr.getName())
+					+ " = " + getFunctionName("ST_GeomFromWKB") + "(?,?)");
+		} else {
+			super.prepareAttributeForUpdate(attr, values);
+		}
+	}
+
+	protected String getSqlStatementAddField(FeatureAttributeDescriptor attr,
+			List<String> additionalStatement) throws DataException {
+		if (attr.getType() == DataTypes.GEOMETRY) {
+			H2StoreParameters params = getPGParameters();
+			additionalStatement.addAll(	((H2Helper) helper)
+					.getSqlGeometyFieldAdd(attr, params.getTable(), params
+							.getSchema()));
+
+		}
+		return super.getSqlStatementAddField(attr, additionalStatement);
+
+	}
+	private String getSqlGeometyFieldDrop(FeatureAttributeDescriptor attr) {
+		StringBuilder strb = new StringBuilder();
+		H2StoreParameters params = getPGParameters();
+		strb.append("Delete from geometry_columns where f_geometry_column = '");
+		strb.append(attr.getName());
+		strb.append("' and f_table_nam = '");
+		strb.append(params.getTable());
+		strb.append("' and f_table_schema = ");
+		if (params.getSchema() == null || params.getSchema().length() == 0) {
+			strb.append("current_schema()");
+		} else {
+			strb.append("'");
+			strb.append(params.getSchema());
+			strb.append("'");
+		}
+		if (params.getCatalog() != null && params.getCatalog().length() > 0) {
+			strb.append(" and f_table_catalog = '");
+			strb.append(params.getCatalog());
+			strb.append("'");
+		}
+		return strb.toString();
+	}
+
+	protected String getSqlStatementDropField(FeatureAttributeDescriptor attr,
+			List<String> additionalStatement) {
+		String result = super.getSqlStatementDropField(attr,
+				additionalStatement);
+		if (attr.getType() == DataTypes.GEOMETRY) {
+			additionalStatement.add(getSqlGeometyFieldDrop(attr));
+		}
+		return result;
+	}
+
+	protected List<String> getSqlStatementAlterField(
+			FeatureAttributeDescriptor attrOrg,
+			FeatureAttributeDescriptor attrTrg, List<String> additionalStatement)
+			throws DataException {
+		//
+		List<String> actions = super.getSqlStatementAlterField(attrOrg, attrTrg,
+				additionalStatement);
+		H2StoreParameters params = getPGParameters();
+		if (attrOrg.getDataType() != attrTrg.getDataType()) {
+			if (attrOrg.getType() == DataTypes.GEOMETRY) {
+				additionalStatement.add(getSqlGeometyFieldDrop(attrOrg));
+			}
+			if (attrTrg.getType() == DataTypes.GEOMETRY) {
+				additionalStatement.addAll(((H2Helper) helper)
+						.getSqlGeometyFieldAdd(attrTrg, params.getTable(),
+								params.getSchema()));
+			}
+		}
+		if (attrOrg.getDataType() == attrTrg.getDataType()
+				&& attrTrg.getType() == DataTypes.GEOMETRY) {
+			// TODO Checks SRS and GeomType/Subtype
+		}
+
+		return actions;
+	}
+	
+
+	private String getFunctionName(String newFunctionName) {
+        
+        H2Helper hpr = getPgHelper();
+        if (hpr == null) {
+            logger.info("Unable to get PG helper.", new Exception("Helper is null"));
+            return newFunctionName;
+        } else {
+            return hpr.getFunctionName(newFunctionName);
+        }
+    }
+	
+    private String fixFunctionNames(String _filter) {
+        
+        Properties props = this.getPgHelper().getBeforePostgis13Properties();
+        Iterator iter = props.keySet().iterator();
+        String kstr = null;
+        String vstr = null;
+        
+        String resp = _filter;
+        
+        while (iter.hasNext()) {
+            kstr = (String) iter.next();
+            vstr = getPgHelper().getFunctionName(kstr);
+            resp = replace(resp, kstr, vstr);
+        }
+        return resp;
+    }
+
+    private String replace(String str, String oldstr, String newstr) {
+        
+        if (oldstr == null || newstr == null ||
+            oldstr.length() == 0 || oldstr.equals(newstr)) {
+            return str;
+        }
+        
+        String lowerstr = str.toLowerCase();
+        String lowerold = oldstr.toLowerCase();
+        
+        if (lowerstr.indexOf(lowerold) == -1) {
+            // nothing to do
+            return str;
+        }
+        
+        Pattern p = Pattern.compile(lowerold, Pattern.LITERAL);
+        String[] parts = p.split(lowerstr); 
+        
+        StringBuffer resp = new StringBuffer();
+        int auxind = 0;
+        resp.append(str.subSequence(0, parts[0].length()));
+        for (int i=1; i<parts.length; i++) {
+            resp.append(newstr);
+            auxind = getIndex(parts, i-1, oldstr.length());
+            resp.append(str.subSequence(auxind, auxind + parts[i].length()));
+        }
+        return resp.toString();
+    }
+
+    /**
+     * This method gets the index where the n-th part (0-based)
+     * starts in the original string
+     * 
+     * @param parts
+     * @param n
+     * @param length
+     * @return
+     */
+    private int getIndex(String[] parts, int till_n, int length) {
+        
+        int resp = 0;
+        for (int i=0; i<(till_n+1); i++) {
+            resp = resp + parts[i].length();
+            resp = resp + length;
+        }
+        return resp;
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2NewStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2NewStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2NewStoreParameters.java	(revision 42196)
@@ -0,0 +1,65 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.io.File;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+
+public class H2NewStoreParameters extends JDBCNewStoreParameters
+        implements NewFeatureStoreParameters, H2ConnectionParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "H2SQLNewStoreParameters";
+
+    public H2NewStoreParameters() {
+        super(PARAMETERS_DEFINITION_NAME, H2StoreProvider.NAME);
+    }
+
+    public EditableFeatureType getDefaultFeatureType() {
+        return (EditableFeatureType) this.getDynValue(FEATURETYPE_PARAMTER_NAME);
+    }
+
+    public void setDefaultFeatureType(FeatureType featureType) {
+        this.setDynValue(FEATURETYPE_PARAMTER_NAME, featureType);
+    }
+
+    public Boolean getUseSSL() {
+        return (Boolean) this.getDynValue(PARAMETER_NAME_USESSL);
+    }
+
+    public void setUseSSL(Boolean useSSL) {
+        this.setDynValue(PARAMETER_NAME_USESSL, useSSL);
+    }
+    
+    
+    public File getBaseFolder() {
+        return (File) this.getDynValue(PARAMETER_NAME_BASEFOLDER);
+    }
+
+    public void setBaseFolder(File baseFolder) {
+        this.setDynValue(PARAMETER_NAME_BASEFOLDER, baseFolder);
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ResourceParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ResourceParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ResourceParameters.java	(revision 42196)
@@ -0,0 +1,75 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 IVER T.I   {{Task}}
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.io.File;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResourceParameters;
+
+import static org.gvsig.fmap.dal.store.h2.H2ConnectionParameters.PARAMETER_NAME_BASEFOLDER;
+
+public class H2ResourceParameters extends JDBCResourceParameters
+        implements H2ConnectionParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "H2SQLResourceParameters";
+
+    public H2ResourceParameters() {
+        super(PARAMETERS_DEFINITION_NAME, H2Resource.NAME);
+    }
+
+    public H2ResourceParameters(String url, String host, Integer port,
+            String dbName, String user, String password,
+            String jdbcDriverClassName, Boolean ssl) {
+        super(PARAMETERS_DEFINITION_NAME, H2Resource.NAME, url, host, port, dbName, user, password, jdbcDriverClassName);
+        if ( ssl != null ) {
+            this.setUseSSL(ssl.booleanValue());
+        }
+    }
+
+    public String getUrl() {
+        return H2ParametersHelper.getConnectionString(this);
+    }
+
+    public Boolean getUseSSL() {
+        return (Boolean) this.getDynValue(PARAMETER_NAME_USESSL);
+    }
+
+    public void setUseSSL(Boolean useSSL) {
+        this.setDynValue(PARAMETER_NAME_USESSL, useSSL);
+    }
+
+    public void setUseSSL(boolean useSSL) {
+        this.setDynValue(PARAMETER_NAME_USESSL, new Boolean(useSSL));
+    }
+
+    public File getBaseFolder() {
+        return (File) this.getDynValue(PARAMETER_NAME_BASEFOLDER);
+    }
+
+    public void setBaseFolder(File baseFolder) {
+        this.setDynValue(PARAMETER_NAME_BASEFOLDER, baseFolder);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ServerExplorerParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ServerExplorerParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2ServerExplorerParameters.java	(revision 42196)
@@ -0,0 +1,82 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 IVER T.I   {{Task}}
+ */
+/**
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.io.File;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+
+public class H2ServerExplorerParameters extends
+        JDBCServerExplorerParameters implements H2ConnectionParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "H2SQLServerExplorerParameters";
+
+    public H2ServerExplorerParameters() {
+        super(PARAMETERS_DEFINITION_NAME, H2ServerExplorer.NAME);
+    }
+
+    public Boolean getUseSSL() {
+        return (Boolean) this.getDynValue(PARAMETER_NAME_USESSL);
+    }
+
+    public void setUseSSL(Boolean useSSL) {
+        this.setDynValue(PARAMETER_NAME_USESSL, useSSL);
+    }
+
+    public void setUseSSL(boolean useSSL) {
+        this.setDynValue(PARAMETER_NAME_USESSL, new Boolean(useSSL));
+    }
+
+    public File getBaseFolder() {
+        return (File) this.getDynValue(PARAMETER_NAME_BASEFOLDER);
+    }
+
+    public void setBaseFolder(File baseFolder) {
+        this.setDynValue(PARAMETER_NAME_BASEFOLDER, baseFolder);
+    }
+
+    public void validate() throws ValidateDataParametersException {
+        if ( getJDBCDriverClassName() == null ) {
+            setJDBCDriverClassName(H2Library.DEFAULT_H2_DRIVER_NAME);
+        }
+        if( getBaseFolder()==null ) {
+            this.setBaseFolder(H2ParametersHelper.getDefaultBaseFolder());
+        }
+        if ( getPort() == null ) {
+            setPort(new Integer(9123));
+        }
+        if ( getUrl() == null ) {
+            setUrl(H2ParametersHelper.getConnectionString(this));
+        }
+
+        super.validate();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Helper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Helper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2Helper.java	(revision 42196)
@@ -0,0 +1,989 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 IVER T.I   {{Task}}
+ */
+/**
+ *
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.dal.feature.exception.UnsupportedDataTypeException;
+import org.gvsig.fmap.dal.resource.ResourceAction;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.ConnectionAction;
+import org.gvsig.fmap.dal.store.jdbc.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCHelperUser;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecutePreparedSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCPreparingSQLException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class H2Helper extends JDBCHelper {
+
+    private static Logger logger = LoggerFactory
+            .getLogger(H2Helper.class);
+
+    private Map pgSR2SRSID = new TreeMap();
+    private Map srsID2pgSR = new TreeMap();
+
+    private static Properties beforePostgis13 = null;
+    private int[] postGISVersion = {0, 0, 0};
+    private boolean versionSet = false;
+
+    H2Helper(JDBCHelperUser consumer,
+            H2ConnectionParameters params)
+            throws InitializeException {
+
+        super(consumer, params);
+    }
+
+    protected void initializeResource() throws InitializeException {
+        ResourceManagerProviderServices manager = (ResourceManagerProviderServices) DALLocator
+                .getResourceManager();
+        H2Resource resource = (H2Resource) manager
+                .createAddResource(
+                        H2Resource.NAME, new Object[]{
+                            params.getUrl(), params.getHost(),
+                            params.getPort(), params.getDBName(), params.getUser(),
+                            params.getPassword(),
+                            params.getJDBCDriverClassName(),
+                            ((H2ConnectionParameters) params).getUseSSL()});
+        this.setResource(resource);
+    }
+
+    protected String getDefaultSchema(Connection conn)
+            throws JDBCException {
+        if ( defaultSchema == null ) {
+            String sql = "Select current_schema()";
+            ResultSet rs = null;
+            Statement st = null;
+            String schema = null;
+            try {
+                st = conn.createStatement();
+                try {
+                    rs = JDBCHelper.executeQuery(st, sql);
+                } catch (java.sql.SQLException e) {
+                    throw new JDBCExecuteSQLException(sql, e);
+                }
+                rs.next();
+                schema = rs.getString(1);
+            } catch (java.sql.SQLException e) {
+                throw new JDBCSQLException(e);
+            } finally {
+                try {
+                    rs.close();
+                } catch (Exception e) {
+                    logger.error("Exception clossing resulset", e);
+                };
+                try {
+                    st.close();
+                } catch (Exception e) {
+                    logger.error("Exception clossing statement", e);
+                };
+                rs = null;
+                st = null;
+            }
+            defaultSchema = schema;
+        }
+
+        return defaultSchema;
+    }
+
+    public Envelope getFullEnvelopeOfField(
+            JDBCStoreParameters storeParams,
+            String geometryAttrName, Envelope limit)
+            throws DataException {
+
+        StringBuilder strb = new StringBuilder();
+        strb.append("Select " + getFunctionName("ST_AsBinary") + "("
+                + getFunctionName("ST_Extent") + "(");
+        strb.append(escapeFieldName(geometryAttrName));
+        strb.append(")) from ");
+
+        if ( storeParams.getSQL() != null
+                && storeParams.getSQL().trim().length() > 0 ) {
+            strb.append('(');
+            strb.append(storeParams.getSQL());
+            strb.append(") as _subquery_alias_ ");
+        } else {
+            strb.append(storeParams.tableID());
+        }
+
+        if ( limit != null || (storeParams.getBaseFilter() != null
+                && storeParams.getBaseFilter().trim().length() > 0) ) {
+            strb.append(" where  ");
+
+            if ( limit != null ) {
+                strb.append(" ( " + getFunctionName("ST_Intersects") + "("
+                        + getFunctionName("ST_GeomFromText") + "('");
+                String workAreaWkt = null;
+                try {
+                    workAreaWkt = limit.getGeometry().convertToWKT();
+                } catch (Exception e) {
+                    throw new CreateGeometryException(e);
+                }
+                strb.append(workAreaWkt);
+                strb.append("', ");
+
+                IProjection proj = storeParams.getCRS();
+                int sridInt = this.getProviderSRID(proj);
+                if ( sridInt == -1 ) {
+                    throw new CreateGeometryException(
+                            new Exception("CRS is null or unknown."));
+                } else {
+                    strb.append(Integer.toString(sridInt));
+                }
+                strb.append("), " + getFunctionName("ST_Envelope") + "(");
+                strb.append(escapeFieldName(geometryAttrName));
+                strb.append(")) ) ");
+
+            }
+            if ( storeParams.getBaseFilter() != null && storeParams.getBaseFilter().trim().length() > 0 ) {
+                if ( limit != null ) {
+                    strb.append(" and ");
+                }
+                strb.append(" ( ");
+                strb.append(storeParams.getBaseFilter());
+                strb.append(" ) ");
+            }
+
+        }
+
+        final String sql = strb.toString();
+
+        this.open();
+
+        return (Envelope) getResource().execute(new ResourceAction() {
+            public String toString() {
+                return "getEnvelope";
+            }
+
+            public Object run() throws Exception {
+                ResultSet rs = null;
+                Statement st = null;
+                Connection conn = null;
+                Envelope fullEnvelope = null;
+
+                Envelope emptyEnv
+                        = geomManager.createEnvelope(Geometry.SUBTYPES.GEOM2D);
+
+                try {
+
+                    conn = getConnection();
+                    st = conn.createStatement();
+                    try {
+                        rs = JDBCHelper.executeQuery(st, sql);
+                    } catch (java.sql.SQLException e) {
+                        throw new JDBCExecuteSQLException(sql, e);
+                    }
+                    if ( !rs.next() ) {
+                        return emptyEnv;
+                    }
+
+                    byte[] data = rs.getBytes(1);
+                    if ( data == null ) {
+                        return emptyEnv;
+                    }
+
+                    Geometry geom = geomManager.createFrom(data);
+
+                    fullEnvelope = geom.getEnvelope();
+
+                    return fullEnvelope;
+                } catch (java.sql.SQLException e) {
+                    throw new JDBCSQLException(e);
+                } catch (BaseException e) {
+                    throw new ReadException(user.getProviderName(), e);
+                } finally {
+                    try {
+                        rs.close();
+                    } catch (Exception e) {
+                    }
+                    try {
+                        st.close();
+                    } catch (Exception e) {
+                    }
+                    try {
+                        conn.close();
+                    } catch (Exception e) {
+                    }
+                    rs = null;
+                    st = null;
+                    conn = null;
+                }
+            }
+        });
+    }
+
+    @Override
+    protected boolean supportsGeometry() {
+        return true;
+    }
+
+    /**
+     * Fill <code>featureType</code> geometry attributes with SRS and ShapeType
+     * information stored in the table GEOMETRY_COLUMNS
+     *
+     * @param conn
+     * @param rsMetadata
+     * @param featureType
+     * @throws ReadException
+     */
+    protected void loadSRS_and_shapeType(Connection conn,
+            ResultSetMetaData rsMetadata, EditableFeatureType featureType,
+            String baseSchema, String baseTable)
+            throws JDBCException {
+
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            // Sacamos la lista de los attributos geometricos
+            EditableFeatureAttributeDescriptor attr;
+            List geoAttrs = new ArrayList();
+
+            Iterator iter = featureType.iterator();
+            while ( iter.hasNext() ) {
+                attr = (EditableFeatureAttributeDescriptor) iter.next();
+                if ( attr.getType() == DataTypes.GEOMETRY ) {
+                    geoAttrs.add(attr);
+                }
+            }
+            if ( geoAttrs.size() < 1 ) {
+                return;
+            }
+
+			// preparamos un set con las lista de tablas de origen
+            // de los campos
+            class TableId {
+
+                public String schema = null;
+                public String table = null;
+                public String field = null;
+
+                public void appendToSQL(StringBuilder strb) {
+                    if ( schema == null || schema.length() == 0 ) {
+                        strb
+                                .append("( F_TABLE_SCHEMA = current_schema() AND F_TABLE_NAME = '");
+                    } else {
+                        strb.append("( F_TABLE_SCHEMA = '");
+                        strb.append(schema);
+                        strb.append("' AND F_TABLE_NAME = '");
+                    }
+                    strb.append(table);
+                    strb.append("' AND F_GEOMETRY_COLUMN = '");
+                    strb.append(field);
+                    strb.append("' )");
+                }
+
+            }
+            Comparator cmp = new Comparator() {
+                public int compare(Object arg0, Object arg1) {
+                    TableId a0 = (TableId) arg0;
+                    TableId a1 = (TableId) arg1;
+
+                    int aux = a0.field.compareTo(a1.field);
+                    if ( aux != 0 ) {
+                        return aux;
+                    }
+
+                    aux = a0.table.compareTo(a1.table);
+                    if ( aux != 0 ) {
+                        return aux;
+                    }
+
+                    if ( a0.schema == null ) {
+                        if ( a1.schema == null ) {
+                            aux = 0;
+                        } else {
+                            aux = -1;
+                        }
+                    } else {
+                        if ( a1.schema == null ) {
+                            aux = -1;
+                        } else {
+                            aux = a0.schema.compareTo(a1.schema);
+                        }
+                    }
+                    return aux;
+                }
+            };
+            TreeSet set = new TreeSet(cmp);
+            TableId tableId;
+            iter = geoAttrs.iterator();
+            int rsIndex;
+            while ( iter.hasNext() ) {
+                attr = (EditableFeatureAttributeDescriptor) iter.next();
+                tableId = new TableId();
+                rsIndex = attr.getIndex() + 1;
+
+                if ( baseSchema == null && baseTable == null ) {
+                    tableId.schema = rsMetadata.getSchemaName(rsIndex);
+                    tableId.table = rsMetadata.getTableName(rsIndex);
+                    tableId.field = rsMetadata.getColumnName(rsIndex);
+                } else {
+                    tableId.schema = baseSchema;
+                    tableId.table = baseTable;
+                    tableId.field = rsMetadata.getColumnName(rsIndex);
+                }
+                if ( tableId.table == null || tableId.table.length() == 0 ) {
+					// Si no tiene tabla origen (viene de algun calculo por ej.)
+                    // lo saltamos ya que no estara en la tabla GEOMETRY_COLUMNS
+                    continue;
+                }
+                set.add(tableId);
+            }
+
+            if ( set.size() == 0 ) {
+                return;
+            }
+
+            // Preparamos una sql para que nos saque el resultado
+            StringBuilder strb = new StringBuilder();
+            strb.append("Select geometry_columns.*,auth_name || ':' || auth_srid as SRSID ");
+            strb.append("from geometry_columns left join spatial_ref_sys on ");
+            strb.append("geometry_columns.srid = spatial_ref_sys.srid WHERE ");
+            iter = set.iterator();
+            for ( int i = 0; i < set.size() - 1; i++ ) {
+                tableId = (TableId) iter.next();
+                tableId.appendToSQL(strb);
+                strb.append(" OR ");
+            }
+            tableId = (TableId) iter.next();
+            tableId.appendToSQL(strb);
+            String sql = strb.toString();
+
+            st = conn.createStatement();
+            try {
+                rs = JDBCHelper.executeQuery(st, sql);
+            } catch (SQLException e) {
+                throw new JDBCExecuteSQLException(sql, e);
+            }
+            String srsID;
+            int pgSrid;
+            int geometryType;
+            int geometrySubtype;
+            String geomTypeStr;
+            int dimensions;
+            IProjection srs;
+
+            while ( rs.next() ) {
+                srsID = rs.getString("SRSID");
+                pgSrid = rs.getInt("SRID");
+                geomTypeStr = rs.getString("TYPE").toUpperCase();
+                geometryType = Geometry.TYPES.GEOMETRY;
+                if ( geomTypeStr.startsWith("POINT") ) {
+                    geometryType = Geometry.TYPES.POINT;
+                } else if ( geomTypeStr.startsWith("LINESTRING") ) {
+                    geometryType = Geometry.TYPES.CURVE;
+                } else if ( geomTypeStr.startsWith("POLYGON") ) {
+                    geometryType = Geometry.TYPES.SURFACE;
+                } else if ( geomTypeStr.startsWith("MULTIPOINT") ) {
+                    geometryType = Geometry.TYPES.MULTIPOINT;
+                } else if ( geomTypeStr.startsWith("MULTILINESTRING") ) {
+                    geometryType = Geometry.TYPES.MULTICURVE;
+                } else if ( geomTypeStr.startsWith("MULTIPOLYGON") ) {
+                    geometryType = Geometry.TYPES.MULTISURFACE;
+                }
+                dimensions = rs.getInt("coord_dimension");
+                geometrySubtype = Geometry.SUBTYPES.GEOM2D;
+                if ( dimensions > 2 ) {
+                    if ( dimensions == 3 ) {
+                        if ( geomTypeStr.endsWith("M") ) {
+                            geometrySubtype = Geometry.SUBTYPES.GEOM2DM;
+                        } else {
+                            geometrySubtype = Geometry.SUBTYPES.GEOM3D;
+                        }
+
+                    } else {
+                        geometrySubtype = Geometry.SUBTYPES.GEOM3DM;
+                    }
+                }
+                addToPgSRToSRSID(pgSrid, srsID);
+
+                iter = geoAttrs.iterator();
+                while ( iter.hasNext() ) {
+                    attr = (EditableFeatureAttributeDescriptor) iter.next();
+                    rsIndex = attr.getIndex() + 1;
+                    if ( !rsMetadata.getColumnName(rsIndex).equals(
+                            rs.getString("f_geometry_column")) ) {
+                        continue;
+                    }
+
+                    if ( baseSchema == null && baseTable == null ) {
+
+                        if ( !rsMetadata.getTableName(rsIndex).equals(
+                                rs.getString("f_table_name")) ) {
+                            continue;
+                        }
+                        String curSchema = rs.getString("f_table_schema");
+                        String metaSchema = rsMetadata
+                                .getSchemaName(rsIndex);
+                        if ( !metaSchema.equals(curSchema) ) {
+                            if ( metaSchema.length() == 0
+                                    && metaSchema == getDefaultSchema(conn) ) {
+                            } else {
+                                continue;
+                            }
+                        }
+                    }
+                    attr.setGeometryType(geometryType);
+                    attr.setGeometrySubType(geometrySubtype);
+                    if ( srsID != null && srsID.length() > 0 ) {
+                        attr.setSRS(CRSFactory.getCRS(srsID));
+                    }
+                    iter.remove();
+                }
+                iter = geoAttrs.iterator();
+                while ( iter.hasNext() ) {
+                    attr = (EditableFeatureAttributeDescriptor) iter.next();
+                    attr.setSRS(null);
+                    attr.setGeometryType(Geometry.TYPES.GEOMETRY);
+
+                }
+            }
+
+        } catch (java.sql.SQLException e) {
+            throw new JDBCSQLException(e);
+        } finally {
+            try {
+                rs.close();
+            } catch (Exception e) {
+            };
+            try {
+                st.close();
+            } catch (Exception e) {
+            };
+        }
+
+    }
+
+    public String getSqlColumnTypeDescription(FeatureAttributeDescriptor attr) {
+        if ( attr.getType() == DataTypes.GEOMETRY ) {
+            return "geometry";
+        }
+        return super.getSqlColumnTypeDescription(attr);
+    }
+
+    public int getPostgisGeomDimensions(int geometrySubType) {
+        switch (geometrySubType) {
+        case Geometry.SUBTYPES.GEOM2D:
+            return 2;
+        case Geometry.SUBTYPES.GEOM2DM:
+        case Geometry.SUBTYPES.GEOM3D:
+            return 3;
+
+        case Geometry.SUBTYPES.GEOM3DM:
+            return 4;
+        default:
+            throw new UnsupportedDataTypeException(
+                    ToolsLocator.getDataTypesManager().getTypeName(DataTypes.GEOMETRY),
+                    DataTypes.GEOMETRY);
+        }
+    }
+
+    public String getPostgisGeomType(int geometryType, int geometrySubType) {
+        String pgGeomType;
+        switch (geometryType) {
+        case Geometry.TYPES.GEOMETRY:
+            pgGeomType = "GEOMETRY";
+            break;
+        case Geometry.TYPES.POINT:
+            pgGeomType = "POINT";
+            break;
+        case Geometry.TYPES.CURVE:
+            pgGeomType = "LINESTRING";
+            break;
+        case Geometry.TYPES.SURFACE:
+            pgGeomType = "POLYGON";
+            break;
+        case Geometry.TYPES.MULTIPOINT:
+            pgGeomType = "MULTIPOINT";
+            break;
+        case Geometry.TYPES.MULTICURVE:
+            pgGeomType = "MULTILINESTRING";
+            break;
+        case Geometry.TYPES.MULTISURFACE:
+            pgGeomType = "MULTIPOLYGON";
+            break;
+        default:
+            logger.warn("Can't determine PostGIS geometry type, use GEOMETRY.");
+            pgGeomType = "GEOMETRY";
+        }
+        if ( geometrySubType == Geometry.SUBTYPES.GEOM2DM
+                || geometrySubType == Geometry.SUBTYPES.GEOM3DM ) {
+            pgGeomType = pgGeomType + "M";
+        } /* else  if (geometrySubType == Geometry.SUBTYPES.GEOM3D) {
+         throw new UnsupportedGeometryException(geometryType,
+         geometrySubType);
+         /
+         } */
+
+        return pgGeomType;
+    }
+
+    public int getProviderSRID(String srs) {
+        if ( srs != null ) {
+            Integer pgSRID = (Integer) srsID2pgSR.get(srs);
+            if ( pgSRID != null ) {
+                return pgSRID.intValue();
+            }
+
+            return searchpgSRID(srs);
+
+        }
+        return -1;
+    }
+
+    public int getProviderSRID(IProjection srs) {
+        if ( srs != null ) {
+            Integer pgSRID = (Integer) srsID2pgSR.get(srs.getAbrev());
+            if ( pgSRID != null ) {
+                return pgSRID.intValue();
+            }
+
+            return searchpgSRID(srs);
+
+        }
+        return -1;
+    }
+
+    private int searchpgSRID(final IProjection srs) {
+        if ( srs == null ) {
+            return -1;
+        }
+        return searchpgSRID(srs.getAbrev());
+    }
+
+    private int searchpgSRID(final String srsID) {
+        if ( srsID == null ) {
+            return -1;
+        }
+
+        ConnectionAction action = new ConnectionAction() {
+
+            public Object action(Connection conn) throws DataException {
+
+                String[] abrev = srsID.split(":");
+                StringBuilder sqlb = new StringBuilder();
+                sqlb.append("select srid from spatial_ref_sys where ");
+                if ( abrev.length > 1 ) {
+                    sqlb.append("auth_name = ? and ");
+                }
+                sqlb.append("auth_srid = ?");
+
+                String sql = sqlb.toString();
+                PreparedStatement st;
+                try {
+                    st = conn.prepareStatement(sql);
+                } catch (SQLException e) {
+                    throw new JDBCPreparingSQLException(sql, e);
+                }
+                ResultSet rs = null;
+                try {
+                    int i = 0;
+                    if ( abrev.length > 1 ) {
+                        st.setString(i + 1, abrev[i]);
+                        i++;
+                    }
+                    st.setInt(i + 1, Integer.parseInt(abrev[i]));
+
+                    try {
+                        rs = JDBCHelper.executeQuery(st, sql);
+
+                    } catch (SQLException e) {
+                        throw new JDBCExecutePreparedSQLException(sql, abrev, e);
+                    }
+
+                    if ( !rs.next() ) {
+                        return null;
+                    }
+
+                    return new Integer(rs.getInt(1));
+
+                } catch (SQLException e) {
+                    throw new JDBCSQLException(e);
+                } finally {
+                    try {
+                        rs.close();
+                    } catch (Exception e) {
+                    };
+                    try {
+                        st.close();
+                    } catch (Exception e) {
+                    };
+                }
+
+            }
+
+        };
+
+        Integer pgSRSID = null;
+        try {
+            pgSRSID = (Integer) doConnectionAction(action);
+        } catch (Exception e) {
+            logger.error("Excetion searching pgSRS", e);
+            return -1;
+        }
+
+        if ( pgSRSID != null ) {
+            addToPgSRToSRSID(pgSRSID.intValue(), srsID);
+            return pgSRSID.intValue();
+        }
+        return -1;
+
+    }
+
+    private void addToPgSRToSRSID(int pgSRID, String srsId) {
+        if ( pgSRID < 0 || srsId == null || srsId.length() == 0 ) {
+            return;
+        }
+        Integer pgSRIDInteger = new Integer(pgSRID);
+        pgSR2SRSID.put(pgSRIDInteger, srsId);
+        srsID2pgSR.put(srsId, pgSRIDInteger);
+    }
+
+    public List<String> getSqlGeometyFieldAdd(FeatureAttributeDescriptor attr,
+            String table, String schema) {
+                    // SELECT AddGeometryColumn({schema}, {table}, {field}, {srid}(int),
+        // {geomType}(Str), {dimensions}(int))
+
+                    // gemoType:
+                    /*
+         * POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING,
+         * MULTIPOLYGON, GEOMETRYCOLLECTION POINTM, LINESTRINGM, POLYGONM,
+         * MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTIONM
+         */
+        List<String> sqls = new ArrayList<String>();
+
+        StringBuilder strb = new StringBuilder();
+        strb.append("SELECT AddGeometryColumn('");
+        if ( schema != null && schema.length() > 0 ) {
+            strb.append(schema);
+            strb.append("', '");
+        }
+        strb.append(table);
+        strb.append("', '");
+        strb.append(attr.getName().toLowerCase());
+        strb.append("', ");
+        strb.append(getProviderSRID(attr.getSRS()));
+        strb.append(", '");
+
+        strb.append(getPostgisGeomType(
+                attr.getGeometryType(),
+                attr.getGeometrySubType()
+        )
+        );
+        strb.append("', ");
+        strb.append(getPostgisGeomDimensions(attr.getGeometrySubType()));
+        strb.append(")");
+
+        sqls.add(strb.toString());
+
+        return sqls;
+    }
+
+    public String getSqlFieldName(FeatureAttributeDescriptor attribute) {
+        if ( attribute.getType() == DataTypes.GEOMETRY ) {
+            return getFunctionName("ST_AsBinary") + "("
+                    + super.getSqlFieldName(attribute) + ")";
+        }
+        return super.getSqlFieldName(attribute);
+    }
+
+    protected EditableFeatureAttributeDescriptor createAttributeFromJDBC(
+            EditableFeatureType type, Connection conn,
+            ResultSetMetaData rsMetadata, int colIndex) throws SQLException {
+        if ( rsMetadata.getColumnType(colIndex) == java.sql.Types.OTHER ) {
+            if ( rsMetadata.getColumnTypeName(colIndex).equalsIgnoreCase(
+                    "geometry") ) {
+                EditableFeatureAttributeDescriptor attr = type.add(rsMetadata.getColumnName(colIndex),
+                        DataTypes.GEOMETRY);
+                // Set default values for geometry type
+                attr.setGeometryType(Geometry.TYPES.GEOMETRY);
+                attr.setGeometrySubType(Geometry.SUBTYPES.GEOM2D);
+                return attr;
+
+            }
+        }
+
+        return super.createAttributeFromJDBC(type, conn, rsMetadata, colIndex);
+    }
+
+    public List getAdditionalSqlToCreate(NewDataStoreParameters ndsp,
+            FeatureType fType) {
+        FeatureAttributeDescriptor attr;
+        Iterator iter = fType.iterator();
+        List result = new ArrayList();
+        H2NewStoreParameters pgNdsp = (H2NewStoreParameters) ndsp;
+        while ( iter.hasNext() ) {
+            attr = (FeatureAttributeDescriptor) iter.next();
+            if ( attr.getType() == DataTypes.GEOMETRY ) {
+                result.addAll(getSqlGeometyFieldAdd(attr, pgNdsp.getTable(),
+                        pgNdsp
+                        .getSchema()));
+            }
+            if ( attr.isIndexed() ) {
+                result.add(getCreateIndexStatement((JDBCNewStoreParameters) ndsp, attr));
+            }
+            if ( attr.isAutomatic() ) {
+                // A�adimos los GRANT para la secuencia asociada a la tabla.
+                String table = "\"" + pgNdsp.getSchema() + "\".\"" + pgNdsp.getTable() + "_" + attr.getName() + "_seq\" ";
+                result.addAll(this.createGrantStatements(pgNdsp, table));
+            }
+        }
+
+        return result;
+    }
+
+    protected String getCreateIndexStatement(JDBCNewStoreParameters params, FeatureAttributeDescriptor attr) {
+        String indexName = "idx_" + params.getTable() + "_" + attr.getName();
+
+        String statement = "CREATE ";
+        if ( !attr.allowIndexDuplicateds() ) {
+            statement += " UNIQUE ";
+        }
+        statement += "INDEX \"" + indexName + "\" ";
+        statement += "ON " + params.tableID() + " ";
+        if ( attr.getType() == DataTypes.GEOMETRY ) {
+            statement += " USING GIST ";
+            statement += "( \"" + attr.getName() + "\")";
+        } else {
+            statement += "( \"" + attr.getName() + "\"";
+            if ( attr.isIndexAscending() ) {
+                statement += " ASC )";
+            } else {
+                statement += " DESC )";
+            }
+        }
+        return statement;
+    }
+
+    public String getSqlFieldDescription(FeatureAttributeDescriptor attr)
+            throws DataException {
+        if ( attr.getType() == DataTypes.GEOMETRY ) {
+            return null;
+        }
+        return super.getSqlFieldDescription(attr);
+    }
+
+    public boolean allowAutomaticValues() {
+        return Boolean.TRUE;
+    }
+
+    public boolean supportOffset() {
+        return true;
+    }
+
+    public boolean supportsUnion() {
+        return true;
+    }
+
+    public String escapeFieldName(String field) {
+        /*
+         if (!reservedWord(field) && 
+         field.matches("[a-z][a-z0-9_]*")) {
+         return field;
+         }
+         */
+        String quote = getIdentifierQuoteString();
+        return quote + field + quote;
+    }
+
+    protected EditableFeatureAttributeDescriptor createAttributeFromJDBCNativeType(
+            EditableFeatureType fType, ResultSetMetaData rsMetadata, int colIndex)
+            throws SQLException {
+
+        EditableFeatureAttributeDescriptor column;
+
+        String nativeType = rsMetadata.getColumnTypeName(colIndex);
+
+        if ( nativeType.startsWith("int") ) {
+            column = fType.add(rsMetadata.getColumnName(colIndex),
+                    DataTypes.INT);
+            column.setAdditionalInfo("SQLType", new Integer(rsMetadata
+                    .getColumnType(colIndex)));
+            column.setAdditionalInfo("SQLTypeName", rsMetadata
+                    .getColumnTypeName(colIndex));
+            return column;
+        }
+        return super.createAttributeFromJDBCNativeType(fType, rsMetadata, colIndex);
+    }
+
+    public Object dalValueToJDBC(
+            FeatureAttributeDescriptor attributeDescriptor, Object object)
+            throws WriteException {
+        if ( "int2".equals(attributeDescriptor.getAdditionalInfo("SQLTypeName")) ) {
+            return new Short(String.valueOf(object));
+        }
+
+        return super.dalValueToJDBC(attributeDescriptor, object);
+    }
+
+    // =======================================
+    public String getFunctionName(String newFuncName) {
+
+        if ( !versionSet ) {
+            postGISVersion = getPostgisVersion();
+            versionSet = true;
+        }
+        return getFunctionNameForVersion(newFuncName, postGISVersion);
+    }
+
+    private String getFunctionNameForVersion(String newFuncName, int[] pv) {
+
+        if ( newFuncName == null || pv == null ) {
+            return newFuncName;
+        }
+
+        if ( pv.length < 2 ) {
+            // cannot compare
+            return newFuncName;
+        }
+
+        if ( pv[0] > 1 ) {
+            return newFuncName;
+        }
+
+        if ( pv[0] == 1 && pv[1] >= 3 ) {
+            return newFuncName;
+        }
+
+        Properties pp = this.getBeforePostgis13Properties();
+        String k = newFuncName.toLowerCase();
+        String v = pp.getProperty(k);
+        if ( v == null ) {
+            return newFuncName;
+        } else {
+            return v;
+        }
+    }
+
+    private int[] getPostgisVersion() {
+
+        String sql = "SELECT PostGIS_Lib_Version()";
+        ResultSet rs = null;
+        Statement st = null;
+        String v = null;
+        Connection conn = null;
+        try {
+            conn = this.getConnection();
+            st = conn.createStatement();
+            rs = JDBCHelper.executeQuery(st, sql);
+            rs.next();
+            v = rs.getString(1);
+            if ( v == null ) {
+                throw new Exception("Returned version is NULL");
+            }
+        } catch (Exception exc) {
+            logger.error("Unable to get Postgis version: " + exc.getMessage(), exc);
+            return null;
+        } finally {
+            try {
+                rs.close();
+            } catch (Exception e) {
+            };
+            try {
+                st.close();
+            } catch (Exception e) {
+            };
+            try {
+                conn.close();
+            } catch (Exception e) {
+            };
+        }
+
+        String[] vv = v.split("\\.");
+        int[] resp = new int[3];
+        try {
+            for ( int i = 0; i < 3; i++ ) {
+                resp[i] = Integer.parseInt(vv[i]);
+            }
+        } catch (Exception exc) {
+            logger.error("Unable to parse version: " + v, exc);
+            return null;
+        }
+        return resp;
+    }
+
+    protected Properties getBeforePostgis13Properties() {
+        if ( beforePostgis13 == null ) {
+
+            beforePostgis13 = new Properties();
+            // Left side MUST be in lower case
+            // Right side will be used if Postgis version < 1.3
+            beforePostgis13.setProperty("st_intersects", "Intersects");
+            beforePostgis13.setProperty("st_extent", "Extent");
+            beforePostgis13.setProperty("st_envelope", "Envelope");
+            beforePostgis13.setProperty("st_asbinary", "AsBinary");
+            beforePostgis13.setProperty("st_geomfromtext", "GeomFromText");
+            beforePostgis13.setProperty("st_geomfromwkb", "GeomFromWKB");
+        }
+        return beforePostgis13;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2StoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2StoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2StoreParameters.java	(revision 42196)
@@ -0,0 +1,85 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 IVER T.I   {{Task}}
+ */
+package org.gvsig.fmap.dal.store.h2;
+
+import java.io.File;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+
+import static org.gvsig.fmap.dal.store.h2.H2ConnectionParameters.PARAMETER_NAME_BASEFOLDER;
+
+public class H2StoreParameters extends JDBCStoreParameters implements
+        H2ConnectionParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "H2SQLStoreParameters";
+
+    public H2StoreParameters() {
+        super(PARAMETERS_DEFINITION_NAME, H2StoreProvider.NAME);
+    }
+
+    public H2StoreParameters(String parametersDefinitionName) {
+        super(parametersDefinitionName, H2StoreProvider.NAME);
+    }
+
+    public Boolean getUseSSL() {
+        return (Boolean) this.getDynValue(PARAMETER_NAME_USESSL);
+    }
+
+    public void setUseSSL(Boolean useSSL) {
+        this.setDynValue(PARAMETER_NAME_USESSL, useSSL);
+    }
+
+    public void setUseSSL(boolean useSSL) {
+        this.setDynValue(PARAMETER_NAME_USESSL, new Boolean(useSSL));
+    }
+
+    public File getBaseFolder() {
+        return (File) this.getDynValue(PARAMETER_NAME_BASEFOLDER);
+    }
+
+    public void setBaseFolder(File baseFolder) {
+        this.setDynValue(PARAMETER_NAME_BASEFOLDER, baseFolder);
+    }
+
+    public void validate() throws ValidateDataParametersException {
+        if ( getJDBCDriverClassName() == null ) {
+            setJDBCDriverClassName(H2Library.DEFAULT_H2_DRIVER_NAME);
+        }
+        if( getBaseFolder()==null ) {
+            this.setBaseFolder(H2ParametersHelper.getDefaultBaseFolder());
+        }
+        if ( getPort() == null ) {
+            setPort(new Integer(9123));
+        }
+        if ( getUrl() == null ) {
+            setUrl(H2ParametersHelper.getConnectionString(this));
+        }
+
+        super.validate();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/pom.xml	(revision 42196)
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.fmap.dal.db.h2</artifactId>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.db</artifactId>
+        <version>2.0.97</version>
+    </parent>  
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.4.181</version>
+            <scope>compile</scope>
+        </dependency>      
+        <dependency>
+            <!--
+            http://www.h2gis.org/
+            https://github.com/irstv/H2GIS
+            https://github.com/irstv/orbisgis-samples/blob/master/demoh2gis/src/main/java/org/orbisgis/demoh2gis/Main.java
+            
+            -->
+            <groupId>org.orbisgis</groupId>
+            <artifactId>h2spatial</artifactId>
+            <version>1.1.0</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.googlecode.log4jdbc</groupId>
+            <artifactId>log4jdbc</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.db.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.operation</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>  
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.utils</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <scope>compile</scope>
+        </dependency>    
+    </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml	(revision 42196)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.db</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <build>
+    <plugins>
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <configuration>
+              <source>1.5</source>
+              <target>1.5</target>
+              <encoding>ISO-8859-1</encoding>
+          </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <modules>
+    <module>org.gvsig.fmap.dal.db.lib</module>
+    <module>org.gvsig.fmap.dal.db.jdbc</module>
+    <module>org.gvsig.fmap.dal.db.h2</module>
+  </modules>
+  <description>This library has the implementation of the provider of te Data Access Library for accesing to database resources, like JDBC, PostgreSQL or H2.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml	(revision 42196)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>    
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <modules>
+    <module>org.gvsig.fmap.dal.api</module>
+    <module>org.gvsig.fmap.dal.impl</module>
+    <module>org.gvsig.fmap.dal.spi</module>
+    <module>org.gvsig.fmap.dal.file</module>
+    <module>org.gvsig.fmap.dal.db</module>
+    <module>org.gvsig.fmap.dal.swing</module>
+  </modules>
+
+  <description>This project contains the Data Access Library of gvSIG, a uniform framwork to some data sources.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.swing.DALSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/FeatureFormDefinitionsProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/FeatureFormDefinitionsProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/FeatureFormDefinitionsProvider.java	(revision 42196)
@@ -0,0 +1,15 @@
+
+package org.gvsig.featureform.swing;
+
+import java.io.IOException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.DynClass;
+
+
+public interface FeatureFormDefinitionsProvider {
+
+    public void put(FeatureStore store) throws DataException, IOException;
+    
+    public DynClass get(FeatureStore store) throws DataException;
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/JFeatureForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/JFeatureForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/JFeatureForm.java	(revision 42196)
@@ -0,0 +1,58 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.featureform.swing;
+
+import java.awt.Dimension;
+
+import javax.swing.JComponent;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface JFeatureForm {
+
+    public void setPreferredSize(Dimension dimension);
+
+    public void bind(FeatureStore store) throws ServiceException, DataException;
+
+    public void setQuery(FeatureQuery query) throws LocatorException, BaseException;
+
+    public long getDataSetSize();
+
+    public void showForm(MODE mode) throws ServiceException, DataException;
+
+    public JComponent asJComponent();
+
+    public void saveChanges() throws BaseException;
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/CreateJFeatureFormException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/CreateJFeatureFormException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/featureform/swing/CreateJFeatureFormException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.featureform.swing;
+
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class CreateJFeatureFormException extends BaseException {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -447463757561352194L;
+    private final static String MESSAGE_FORMAT = "Exception creating JFeatureForm.";
+    private final static String MESSAGE_KEY = "create_JFeatureForm_Exception";
+
+    public CreateJFeatureFormException(Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DALSwingLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DALSwingLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DALSwingLocator.java	(revision 42196)
@@ -0,0 +1,91 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.swing;
+
+import org.gvsig.tools.locator.BaseLocator;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DALSwingLocator extends BaseLocator {
+
+    /**
+     * AttributeEditor swing manager name.
+     */
+    public static final String SWING_MANAGER_NAME
+            = "AttributeEditor.swing.manager";
+
+    /**
+     * AttributeEditor swing manager description.
+     */
+    public static final String SWING_MANAGER_DESCRIPTION
+            = "AttributeEditor UIManager";
+
+    private static final String LOCATOR_NAME = "AttributeEditor.swing.locator";
+
+    /**
+     * Unique instance.
+     */
+    private static final DALSwingLocator INSTANCE
+            = new DALSwingLocator();
+
+    /**
+     * Return the singleton instance.
+     *
+     * @return the singleton instance
+     */
+    public static DALSwingLocator getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Return the Locator's name
+     *
+     * @return a String with the Locator's name
+     */
+    public final String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Registers the Class implementing the PersistenceManager interface.
+     *
+     * @param clazz implementing the SwingManager interface
+     */
+    public static void registerSwingManager(Class clazz) {
+        getInstance().register(SWING_MANAGER_NAME, SWING_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    /**
+     * Gets the instance of the {@link DataSwingManager} registered.
+     *
+     * @return {@link DataSwingManager}
+     */
+    public static DataSwingManager getSwingManager() {
+        return (DataSwingManager) getInstance()
+                .get(SWING_MANAGER_NAME);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DataSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DataSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DataSwingManager.java	(revision 42196)
@@ -0,0 +1,45 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.swing;
+
+import org.gvsig.featureform.swing.CreateJFeatureFormException;
+import org.gvsig.featureform.swing.FeatureFormDefinitionsProvider;
+import org.gvsig.featureform.swing.JFeatureForm;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface DataSwingManager {
+
+    public void registerFeatureFormDefinitionsProvider(FeatureFormDefinitionsProvider provider);
+    
+    public FeatureFormDefinitionsProvider getFeatureFormDefinitionsProvider();
+    
+    public JFeatureForm createJFeatureForm(FeatureStore store) throws CreateJFeatureFormException;
+
+    public JDBCConnectionPanel createJDBCConnectionPanel();
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DALSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DALSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/DALSwingLibrary.java	(revision 42196)
@@ -0,0 +1,60 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.swing;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DALSwingLibrary  extends AbstractLibrary{
+
+
+
+    public void doRegistration() {
+        registerAsAPI(DALSwingLibrary.class);
+    }
+
+
+    protected void doInitialize() throws LibraryException {
+        // TODO Auto-generated method stub
+
+    }
+
+
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        DataSwingManager manager =
+            DALSwingLocator.getSwingManager();
+        if (manager == null) {
+            throw new ReferenceNotRegisteredException(
+                DALSwingLocator.SWING_MANAGER_NAME,
+                DALSwingLocator.getInstance());
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/jdbc/JDBCConnectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/jdbc/JDBCConnectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/src/main/java/org/gvsig/fmap/dal/swing/jdbc/JDBCConnectionPanel.java	(revision 42196)
@@ -0,0 +1,16 @@
+package org.gvsig.fmap.dal.swing.jdbc;
+
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.tools.swing.api.Component;
+
+
+
+public interface JDBCConnectionPanel extends Component {
+
+    public void setServerExplorerParameters(JDBCServerExplorerParameters parameters);
+    public JDBCServerExplorerParameters getServerExplorerParameters();
+    public void delete();
+    public void clear();
+    public String getConnectionName();
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/pom.xml	(revision 42196)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.swing.api</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>jar</packaging>    
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.swing</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
+      <version>2.0.97</version>
+      <type>jar</type>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <version>3.0.56</version>
+      <type>jar</type>
+    </dependency>
+  </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.swing</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>    
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+
+  <modules>
+    <module>org.gvsig.fmap.dal.swing.api</module>
+    <module>org.gvsig.fmap.dal.swing.impl</module>
+  </modules>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/pom.xml	(revision 42196)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.dal.swing.impl</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>jar</packaging>    
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.swing</artifactId>
+      <version>2.0.97</version>
+  </parent>  
+    
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+     <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
+      <scope>compile</scope>
+   </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.swing.api</artifactId>
+     <scope>compile</scope>
+    </dependency>   
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.dynform.api</artifactId>
+       <scope>compile</scope>
+   </dependency>
+  </dependencies>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/featureform/swing/impl/DefaultJFeatureForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/featureform/swing/impl/DefaultJFeatureForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/featureform/swing/impl/DefaultJFeatureForm.java	(revision 42196)
@@ -0,0 +1,357 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.featureform.swing.impl;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.featureform.swing.JFeatureForm;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynform.AbortActionException;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.DynFormManager;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormSet;
+import org.gvsig.tools.dynform.JDynFormSet.JDynFormSetListener;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultJFeatureForm implements JFeatureForm, JDynFormSetListener{
+
+    private static final Logger LOGGER = LoggerFactory
+        .getLogger(DefaultJFeatureForm.class);
+
+    private static final int PAGE_SIZE = 500;
+    private JPanel panel;
+    private JDynFormSet formset;
+    private FeatureStore store;
+    private FeaturePagingHelper ph;
+    private DynClass definition = null;
+
+    /**
+     *
+     */
+    public DefaultJFeatureForm() {
+        this.panel = new JPanel(new BorderLayout());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.attributeeditor.swing.JFeatureForm#setPreferredSize(java.awt
+     * .Dimension)
+     */
+    public void setPreferredSize(Dimension dimension) {
+        panel.setPreferredSize(dimension);
+    }
+
+    public JComponent asJComponent() {
+        return this.panel;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.attributeeditor.swing.JFeatureForm#bind(org.gvsig.fmap.dal.
+     * feature.FeatureStore)
+     */
+    public void bind(FeatureStore store) throws ServiceException, DataException {
+        this.bind(store,store.getDefaultFeatureType());
+    }
+         
+    public void bind(FeatureStore store, DynClass definition) throws ServiceException, DataException {
+        if (this.store == store) {
+            return;
+        }
+
+        if (formset != null) {
+            this.panel.remove(formset.asJComponent());
+            this.formset = null;
+        }
+        this.store = store;
+        this.ph = null;
+        this.definition = definition;
+    }
+
+    private JDynFormSet getFormset() throws ServiceException, DataException{
+        if (this.formset == null){
+            DynFormManager formManager = DynFormLocator.getDynFormManager();
+            this.formset = formManager.createJDynFormSet(this.definition);
+
+            this.formset.setLayoutMode(JDynForm.USE_SEPARATORS);
+            this.formset.setReadOnly(false);
+            this.formset.setAllowClose(true);
+            this.formset.setAllowDelete(false);
+            this.formset.setAllowNew(false);
+            this.formset.setAllowSearch(false);
+            this.formset.setAllowUpdate(true);
+            this.formset.setAutosave(true);
+
+            this.formset.addListener(this);
+        }
+        return this.formset;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.attributeeditor.swing.JFeatureForm#setQuery(org.gvsig.fmap.
+     * dal.feature.FeatureQuery)
+     */
+    public void setQuery(FeatureQuery query) throws LocatorException,
+        BaseException {
+        if (this.ph != null) {
+            if (this.formset != null && this.formset.isAutosave()
+                && this.formset.countValues() > 0) {
+                if (!store.isEditing()) {
+                    try {
+                        store.edit();
+                    } catch (DataException e1) {
+                        throw new StoreEditException(e1, store.getName());
+                    }
+                }
+                saveChanges(this.formset);
+            }
+        }
+        if (this.formset == null){
+            this.formset = getFormset();
+            this.panel.add(this.formset.asJComponent(),BorderLayout.CENTER);
+        }
+        this.ph =
+            DALLocator.getDataManager().createFeaturePagingHelper(store, query,
+                PAGE_SIZE);
+        FeatureSelection selection = (FeatureSelection) store.getSelection();
+        selection.deselectAll();
+        List features = ph.asList();
+        for (Iterator iterator = features.iterator(); iterator.hasNext();) {
+            Feature feature = (Feature) iterator.next();
+            selection.select(feature);
+        }
+        if (features.size()>0) {
+            this.showForm(MODE.TOOL);
+        }
+
+        this.formset.setValues(ph.asListOfDynObjects());
+        this.formset.setReadOnly(false);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.attributeeditor.swing.JFeatureForm#showForm()
+     */
+    public void showForm(MODE mode) throws ServiceException, DataException {
+        if (this.formset == null) {
+            this.formset = getFormset();
+            this.panel.add(this.formset.asJComponent(),BorderLayout.CENTER);
+            WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+            winmgr.showWindow(panel, store.getName(), mode);
+        }
+        this.panel.setVisible(true);
+
+    }
+
+    public void formMessage(String message) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void formClose() {
+        this.panel.setVisible(false);
+    }
+
+    public void formMovedTo(int currentPosition) throws AbortActionException {
+        LOGGER.info("formMovedTo " + currentPosition);
+    }
+
+    class StoreEditException extends AbortActionException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = -7682017811778577130L;
+
+        public StoreEditException(Throwable cause, String storename) {
+            super("Can't edit the store '%(storename)'", cause,
+                "cant_edit_the store_XstorenameX", serialVersionUID);
+            setValue("storename", storename);
+        }
+    }
+
+    public void formBeforeSave(JDynFormSet dynformSet)
+        throws AbortActionException {
+        LOGGER.info("formBeforeSave");
+        if (!store.isEditing()) {
+            try {
+                store.edit();
+            } catch (DataException e1) {
+                throw new StoreEditException(e1, store.getName());
+            }
+        }
+    }
+
+    public void formBeforeNew(JDynFormSet dynformSet)
+        throws AbortActionException {
+        LOGGER.info("formBeforeNew");
+    }
+
+    public void formBeforeDelete(JDynFormSet dynformSet)
+        throws AbortActionException {
+        LOGGER.info("formBeforeDelete");
+    }
+
+    class GetFeatureException extends AbortActionException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = -3545660152672760731L;
+
+        public GetFeatureException(Throwable cause, int index) {
+            super("Can't get the associated feature to index '%(index)'",
+                cause, "cant_get_the_associated_feature_to_index_XindexX",
+                serialVersionUID);
+            setValue("index", new Integer(index));
+        }
+    }
+
+    class UpdateFeatureException extends AbortActionException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = 6473287361543242618L;
+
+        public UpdateFeatureException(Throwable cause, int index,
+            String storename) {
+            super(
+                "Can't update the feature '%(index)' in the store '%(storename)'",
+                cause,
+                "cant_update_the_feature_XindexX_in_the_store_XstorenameX",
+                serialVersionUID);
+            setValue("storename", storename);
+            setValue("index", new Integer(index));
+        }
+    }
+
+    public void formAfterSave(JDynFormSet dynformSet)
+        throws AbortActionException {
+
+        LOGGER.info("formAfterSave");
+        saveChanges(dynformSet);
+    }
+
+    private void saveChanges(JDynFormSet dynformSet)
+        throws AbortActionException {
+        int index = dynformSet.getCurrentIndex();
+        DynObject dynObject = dynformSet.get(index);
+        dynformSet.getFormValues(dynObject);
+        Feature feat = store.getFeature(dynObject);
+        if (feat == null) {
+            LOGGER.warn("Can't get the associated feature index " + index);
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            dynformSet.message(i18nManager
+                .getTranslation("error_saving_data_will_not_save"));
+            throw new GetFeatureException(null, index);
+        }
+
+        try {
+            ph.update((EditableFeature) feat);
+        } catch (BaseException e) {
+            throw new UpdateFeatureException(null, index, store.getName());
+        }
+    }
+
+    public void saveChanges() throws BaseException {
+        if (this.formset != null && this.formset.countValues() > 0 ) {
+            if (store != null && !store.isEditing()) {
+                try {
+                    store.edit();
+                } catch (DataException e1) {
+                    LOGGER.warn("Can't edit the store " + store.getName());
+                    throw new StoreEditException(e1, store.getName());
+                }
+            }
+            this.saveChanges(this.formset);
+        }
+    }
+
+    public void formAfterNew(JDynFormSet dynformSet)
+        throws AbortActionException {
+        LOGGER.info("formAfterNew");
+    }
+
+    public void formAfterDelete(JDynFormSet dynformSet)
+        throws AbortActionException {
+        LOGGER.info("formAfterDelete");
+    }
+
+    public void formBeforeSearch(JDynFormSet dynformSet)
+        throws AbortActionException {
+        LOGGER.info("formBeforeSearch");
+    }
+
+    public void formAfterSearch(JDynFormSet dynformSet)
+        throws AbortActionException {
+        LOGGER.info("formAfterSearch");
+    }
+
+    public long getDataSetSize() {
+        if (this.ph != null) {
+            return ph.getTotalSize();
+        }
+        return 0;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/DefaultDataSwingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/DefaultDataSwingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/DefaultDataSwingManager.java	(revision 42196)
@@ -0,0 +1,80 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.swing.impl;
+
+import org.gvsig.featureform.swing.CreateJFeatureFormException;
+import org.gvsig.featureform.swing.FeatureFormDefinitionsProvider;
+
+import org.gvsig.featureform.swing.JFeatureForm;
+import org.gvsig.featureform.swing.impl.DefaultJFeatureForm;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.impl.jdbc.DefaultJDBCConnectionPanel;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.service.ServiceException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultDataSwingManager implements
+DataSwingManager {
+
+    private FeatureFormDefinitionsProvider featureFormDefinitionsProvider = null;
+            
+    public JFeatureForm createJFeatureForm(FeatureStore store) throws CreateJFeatureFormException {
+        DefaultJFeatureForm form = new DefaultJFeatureForm();
+        try {
+            if( featureFormDefinitionsProvider!=null ) {
+                form.bind(store, this.featureFormDefinitionsProvider.get(store));
+            } else {
+                form.bind(store);
+            }
+        } catch (ServiceException e) {
+            throw new CreateJFeatureFormException(e);
+        } catch (DataException e) {
+            throw new CreateJFeatureFormException(e);
+        }
+        return form;
+    }
+
+    public void registerFeatureFormDefinitionsProvider(FeatureFormDefinitionsProvider provider) {
+        this.featureFormDefinitionsProvider = provider;
+    }
+
+    public FeatureFormDefinitionsProvider getFeatureFormDefinitionsProvider() {
+        return this.featureFormDefinitionsProvider;
+    }
+
+    public JDBCConnectionPanel createJDBCConnectionPanel() {
+        JDBCConnectionPanel x = new DefaultJDBCConnectionPanel();
+        return x;
+    }
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/DefaultDALSwingLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/DefaultDALSwingLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/DefaultDALSwingLibrary.java	(revision 42196)
@@ -0,0 +1,54 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2014 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.swing.impl;
+
+import org.gvsig.fmap.dal.swing.DALSwingLibrary;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultDALSwingLibrary  extends AbstractLibrary{
+
+
+
+    public void doRegistration() {
+        registerAsImplementationOf(DALSwingLibrary.class);
+    }
+
+
+    protected void doInitialize() throws LibraryException {
+        DALSwingLocator.registerSwingManager(DefaultDataSwingManager.class);
+
+    }
+
+
+    protected void doPostInitialize() throws LibraryException {
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanelLayout.java	(revision 42196)
@@ -0,0 +1,202 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.fmap.dal.swing.impl.jdbc;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultJDBCConnectionPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form DBConnectionPanelLayout
+     */
+    public DefaultJDBCConnectionPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        lblConnectionName = new javax.swing.JLabel();
+        lblConnector = new javax.swing.JLabel();
+        lblServer = new javax.swing.JLabel();
+        lblPort = new javax.swing.JLabel();
+        lblDataBase = new javax.swing.JLabel();
+        lblUsername = new javax.swing.JLabel();
+        lblPassword = new javax.swing.JLabel();
+        cboConnectors = new javax.swing.JComboBox();
+        txtServer = new javax.swing.JTextField();
+        txtPort = new javax.swing.JTextField();
+        txtDataBase = new javax.swing.JTextField();
+        txtUsername = new javax.swing.JTextField();
+        txtPassword = new javax.swing.JPasswordField();
+        lblFoother = new javax.swing.JLabel();
+        cboConnections = new javax.swing.JComboBox();
+        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
+
+        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        lblConnectionName.setText("Nombre de la conexion:");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblConnectionName, gridBagConstraints);
+
+        lblConnector.setText("Conector");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblConnector, gridBagConstraints);
+
+        lblServer.setText("Servidor");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblServer, gridBagConstraints);
+
+        lblPort.setText("Puerto");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblPort, gridBagConstraints);
+
+        lblDataBase.setText("Base de datos");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblDataBase, gridBagConstraints);
+
+        lblUsername.setText("Usuario");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblUsername, gridBagConstraints);
+
+        lblPassword.setText("Clave");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        add(lblPassword, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(cboConnectors, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtServer, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtPort, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtDataBase, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtUsername, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(txtPassword, gridBagConstraints);
+
+        lblFoother.setText("<html>\nTenga en cuenta que el nombre de usuario y la  contrase�a deben coincidir en mayusculas y minusculas con el registrado en la base de dato.\n<html>"); // NOI18N
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.gridwidth = 5;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(lblFoother, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 0.1;
+        add(cboConnections, gridBagConstraints);
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 20;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.2;
+        add(filler1, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected javax.swing.JComboBox cboConnections;
+    protected javax.swing.JComboBox cboConnectors;
+    protected javax.swing.Box.Filler filler1;
+    protected javax.swing.JLabel lblConnectionName;
+    protected javax.swing.JLabel lblConnector;
+    protected javax.swing.JLabel lblDataBase;
+    protected javax.swing.JLabel lblFoother;
+    protected javax.swing.JLabel lblPassword;
+    protected javax.swing.JLabel lblPort;
+    protected javax.swing.JLabel lblServer;
+    protected javax.swing.JLabel lblUsername;
+    protected javax.swing.JTextField txtDataBase;
+    protected javax.swing.JPasswordField txtPassword;
+    protected javax.swing.JTextField txtPort;
+    protected javax.swing.JTextField txtServer;
+    protected javax.swing.JTextField txtUsername;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanel.java	(revision 42196)
@@ -0,0 +1,325 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.gvsig.fmap.dal.swing.impl.jdbc;
+
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Iterator;
+import java.util.List;
+import javax.swing.ComboBoxModel;
+import javax.swing.JComponent;
+import javax.swing.JTextField;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel
+public class DefaultJDBCConnectionPanel extends DefaultJDBCConnectionPanelLayout implements JDBCConnectionPanel{
+
+    private static final Logger
+ logger = LoggerFactory.getLogger(DefaultJDBCConnectionPanel.class);
+    private JDBCServerExplorerParameters forcedParameters;
+
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    private static class ServerExplorerParametersComboItem {
+
+        private JDBCServerExplorerParameters params;
+        private String label;
+
+        public ServerExplorerParametersComboItem(String label, JDBCServerExplorerParameters params) {
+            this.params = params;
+            this.label = label;
+        }
+
+        public ServerExplorerParametersComboItem(JDBCServerExplorerParameters params) {
+            this(params.getExplorerName(), params);
+        }
+
+        public String toString() {
+            return this.label;
+        }
+
+        public JDBCServerExplorerParameters getParams() {
+            return this.params;
+        }
+
+        public String getLabel() {
+            return this.label;
+        }
+    }
+
+    public DefaultJDBCConnectionPanel() {
+        initComponents();
+    }
+
+    protected void initComponents() {
+        this.cboConnections.setEditable(true);
+        this.cboConnections.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                onChangeConnection();
+            }
+        });
+        this.cboConnectors.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                onChangeConnector();
+            }
+        });
+        try {
+            fillConnections();
+            fillConnectors();
+        } catch(Throwable th) {
+            // Ignore it to allow use in GUI builders
+        }
+        this.translate();
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblConnectionName.setText(i18nManager.getTranslation("_Connection_name"));
+        this.lblConnector.setText(i18nManager.getTranslation("_Driver_type"));
+        this.lblServer.setText(i18nManager.getTranslation("_Host"));
+        this.lblPort.setText(i18nManager.getTranslation("_Port"));
+        this.lblDataBase.setText(i18nManager.getTranslation("_Database"));
+        this.lblUsername.setText(i18nManager.getTranslation("_User"));
+        this.lblPassword.setText(i18nManager.getTranslation("_Password"));
+        this.lblFoother.setText("<html>"+i18nManager.getTranslation("_JDBCConecctionPanel_foother")+"</html>");
+    }
+    
+    public void setServerExplorerParameters(JDBCServerExplorerParameters parameters) {
+        this.forcedParameters = (JDBCServerExplorerParameters) parameters.getCopy();
+        
+        int indexConnector = this.getIndexOfConnector(parameters);
+        if ( indexConnector >= 0 && this.cboConnectors.getSelectedIndex()!=indexConnector ) {
+            this.cboConnectors.setSelectedIndex(indexConnector);
+        }
+
+        this.txtServer.setText(parameters.getHost());
+        Integer port = parameters.getPort();
+        if ( port == null ) {
+            this.txtPort.setText("");
+        } else {
+            this.txtPort.setText(String.valueOf(port));
+        }
+        this.txtDataBase.setText(parameters.getDBName());
+        this.txtUsername.setText(parameters.getUser());
+        this.txtPassword.setText(parameters.getPassword());
+    }
+
+    public JDBCServerExplorerParameters getServerExplorerParameters() {
+        JDBCServerExplorerParameters params;
+        JDBCServerExplorerParameters connector = this.getConnector();
+        if( this.forcedParameters==null ) {
+            params = (JDBCServerExplorerParameters) connector.getCopy();
+        } else {
+            params = (JDBCServerExplorerParameters) this.forcedParameters.getCopy();
+        }
+        String s = this.getServer();
+        if( s!=null ) {
+            params.setHost(s);
+        }
+        int n = this.getPort();
+        if( n>0 ) {
+            params.setPort(n);
+        }
+        s = this.getDataBaseName();
+        if( s!=null ) {
+            params.setDBName(s);
+        }
+        s = this.getUsername();
+        if( s!=null ) {
+            params.setUser(s);
+        }
+        s = this.getPassword();
+        if( s!=null ) {
+            params.setPassword(s);
+        }
+
+        if ( this.getConnectionName() != null ) {
+            DataManager dataManager = DALLocator.getDataManager();
+            DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+            pool.add(this.getConnectionName(), params);
+        }
+        return params;
+    }
+
+    protected void setConnectionName(String connectionName) {
+        JTextField txtConnections = (JTextField) this.cboConnections.getEditor().getEditorComponent();
+        txtConnections.setText(connectionName);
+    }
+
+    public String getConnectionName() {
+        JTextField txtConnections = (JTextField) this.cboConnections.getEditor().getEditorComponent();
+        String value = txtConnections.getText();
+        return (String) StringUtils.defaultIfBlank(value, null);
+    }
+
+    protected JDBCServerExplorerParameters getConnector() {
+        ServerExplorerParametersComboItem item = (ServerExplorerParametersComboItem) this.cboConnectors.getSelectedItem();
+        JDBCServerExplorerParameters value = item.getParams();
+        return value;
+    }
+
+    protected String getConnectorName() {
+        JDBCServerExplorerParameters value = this.getConnector();
+        if ( value == null ) {
+            return null;
+        }
+        return (String) StringUtils.defaultIfBlank(value.getExplorerName(), null);
+    }
+
+    protected String getServer() {
+        return (String) StringUtils.defaultIfBlank(this.txtServer.getText(), null);
+    }
+
+    protected int getPort() {
+        String svalue = (String) StringUtils.defaultIfBlank(this.txtPort.getText(), null);
+        int ivalue = -1;
+        try {
+            ivalue = Integer.parseInt(svalue);
+        } catch (Exception ex) {
+            ivalue = -1;
+        }
+        return ivalue;
+    }
+
+    protected String getDataBaseName() {
+        return (String) StringUtils.defaultIfBlank(this.txtDataBase.getText(), null);
+    }
+
+    protected String getUsername() {
+        return (String) StringUtils.defaultIfBlank(this.txtUsername.getText(), null);
+    }
+
+    protected String getPassword() {
+        return (String) StringUtils.defaultIfBlank(this.txtPassword.getText(), null);
+    }
+
+    private void onChangeConnector() {
+        ServerExplorerParametersComboItem item = (ServerExplorerParametersComboItem) this.cboConnectors.getSelectedItem();
+        if( item==null ) {
+            return;
+        }
+        JDBCServerExplorerParameters connector = item.getParams();
+        
+        if ( connector == null ) {
+            return;
+        }
+        this.setServerExplorerParameters(connector);
+    }
+
+    private void onChangeConnection() {
+        Object item = this.cboConnections.getSelectedItem();
+        if ( item instanceof ServerExplorerParametersComboItem ) {
+            JDBCServerExplorerParameters connection = ((ServerExplorerParametersComboItem) item).getParams();
+            if ( connection == null ) {
+                return;
+            }
+            this.setServerExplorerParameters(connection);
+        }
+    }
+    
+
+    private int getIndexOfConnector(JDBCServerExplorerParameters explorerParameters) {
+        String code = null;
+        try {
+            code = explorerParameters.toString();
+            ComboBoxModel model = this.cboConnectors.getModel();
+            for ( int i = 0; i < model.getSize(); i++ ) {
+                ServerExplorerParametersComboItem x = (ServerExplorerParametersComboItem) model.getElementAt(i);
+                if ( x.getLabel().equalsIgnoreCase(explorerParameters.getExplorerName()) ) {
+                    return i;
+                }
+            }
+        } catch (Exception ex) {
+            logger.warn("Can't get index of exporer parameter '" + code + "'.", ex);
+        }
+        return -1;
+    }
+
+    private void fillConnectors() {
+        DataManager dataManager = DALLocator.getDataManager();
+        List  explorers = dataManager.getExplorerProviders();
+
+        DataServerExplorerParameters params;
+
+        JDBCServerExplorerParameters last = null;
+        Iterator it = explorers.iterator();
+        while ( it.hasNext() ) {
+            String explorerName = (String) it.next();
+            try {
+                params = dataManager.createServerExplorerParameters(explorerName);
+            } catch (DataException e) {
+                continue;
+            }
+            if ( params instanceof JDBCServerExplorerParameters ) {
+                JDBCServerExplorerParameters dbParams = (JDBCServerExplorerParameters) params;
+                if( dbParams.getClass().getName().equals(JDBCServerExplorerParameters.class.getName()) ) {
+                    last = dbParams;
+                } else {
+                    this.cboConnectors.addItem(
+                            new ServerExplorerParametersComboItem(dbParams)
+                    );
+                }
+            }
+        }
+        if( last!=null ) {
+            this.cboConnectors.addItem(
+                    new ServerExplorerParametersComboItem(last)
+            );
+        }
+    }
+
+    private void fillConnections() {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+
+        DataServerExplorerParameters params;
+
+        Iterator it = pool.iterator();
+        while ( it.hasNext() ) {
+            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
+            if ( entry.getExplorerParameters() instanceof JDBCServerExplorerParameters ) {
+                JDBCServerExplorerParameters dbParams = (JDBCServerExplorerParameters) entry.getExplorerParameters();
+                this.cboConnections.addItem(
+                        new ServerExplorerParametersComboItem(entry.getName(), dbParams)
+                );
+            }
+        }
+        this.cboConnections.setSelectedIndex(-1);
+    }
+
+    public void delete() {
+        String name = this.getConnectionName();
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+        
+        pool.remove(name);
+    }
+    
+    public void clear() {
+        this.cboConnections.setSelectedIndex(-1);
+        this.cboConnectors.setSelectedIndex(-1);
+        this.txtServer.setText("");
+        this.txtPort.setText("");
+        this.txtDataBase.setText("");
+        this.txtUsername.setText("");
+        this.txtPassword.setText("");
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/jdbc/DefaultJDBCConnectionPanelLayout.form	(revision 42196)
@@ -0,0 +1,1726 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblConnectionName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Nombre de la conexion:"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblConnector">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Conector"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblServer">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Servidor"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblPort">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Puerto"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblDataBase">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Base de datos"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="10" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblUsername">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Usuario"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="12" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblPassword">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Clave"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="14" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cboConnectors">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="4" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtServer">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtPort">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="8" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtDataBase">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="10" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtUsername">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="12" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JPasswordField" name="txtPassword">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="14" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblFoother">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;Tenga en cuenta que el nombre de usuario y la  contrase&#xf1;a deben coincidir en mayusculas y minusculas con el registrado en la base de dato.&#xa;&lt;html&gt;" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="18" gridWidth="5" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cboConnections">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[0, 32767]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="20" gridWidth="1" gridHeight="1" fill="3" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.2"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_lblConnectionName">
+          <CodeVariable name="lblConnectionName" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblConnectionName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16_lblConnector">
+          <CodeVariable name="lblConnector" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblConnector"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="17_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22_lblServer">
+          <CodeVariable name="lblServer" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblServer"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="17_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="23_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="23_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28_lblPort">
+          <CodeVariable name="lblPort" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblPort"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="23_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="29_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34_lblDataBase">
+          <CodeVariable name="lblDataBase" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblDataBase"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="29_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="35_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40_lblUsername">
+          <CodeVariable name="lblUsername" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblUsername"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="35_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="41_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="41_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46_lblPassword">
+          <CodeVariable name="lblPassword" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblPassword"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="41_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="47_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54_cboConnectors">
+          <CodeVariable name="cboConnectors" type="8196" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cboConnectors"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="47_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="55_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="58">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="55_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62_txtServer">
+          <CodeVariable name="txtServer" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtServer"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="55_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="63_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="68">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="63_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="69">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70_txtPort">
+          <CodeVariable name="txtPort" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtPort"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="63_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="71_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="71_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="77">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78_txtDataBase">
+          <CodeVariable name="txtDataBase" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtDataBase"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="71_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="79_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="80">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="82">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="83">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="84">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="85">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="86_txtUsername">
+          <CodeVariable name="txtUsername" type="8196" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtUsername"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="79_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="87_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="88">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="89">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="90">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="91">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="92">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="87_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="93">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="94_txtPassword">
+          <CodeVariable name="txtPassword" type="8196" declaredType="javax.swing.JPasswordField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtPassword"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="87_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="95_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="96">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="97">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="98">
+          <ExpressionOrigin>
+            <Value type="int" value="5"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="99">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="95_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="100">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="101_lblFoother">
+          <CodeVariable name="lblFoother" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblFoother"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="95_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="102_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="103">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="104">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="105">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="106">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="102_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="107">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="108_cboConnections">
+          <CodeVariable name="cboConnections" type="8196" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cboConnections"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="102_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="109_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="110">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="111">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="112">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="109_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="113">
+          <ExpressionOrigin>
+            <Value type="double" value="0.2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="114_filler1">
+          <CodeVariable name="filler1" type="8196" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="109_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.swing.impl.DefaultDALSwingLibrary
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl
___________________________________________________________________
Added: svn:ignore
   + target



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml	(revision 42196)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.compat</artifactId>
+  <packaging>pom</packaging>    
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  
+  <modules>
+    <module>org.gvsig.compat.api</module>
+    <module>org.gvsig.compat.se</module>
+  </modules>
+  <description>This library contains utiities to mantain compatibility with java 1.4 on CDC JVMs.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/MathUtilsTestParent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/MathUtilsTestParent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/MathUtilsTestParent.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.lang;
+
+import junit.framework.TestCase;
+
+/**
+ * Parent class for Unit tests for {@link org.gvsig.compat.lang.MathUtils}
+ * implementations.
+ * 
+ * @author <a href="mailto:jcarrasco@prodevelop.es">Javier Carrasco</a>
+ */
+public abstract class MathUtilsTestParent extends TestCase{
+	
+	private MathUtils utils;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        utils = createUtils();
+    }
+
+    /**
+     * Return a new instance of an implementation of the MathUtils interface.
+     * 
+     * @return a new MathUtils instance
+     */
+    protected abstract MathUtils createUtils();
+    
+    /**
+     * Test method for
+     * {@link org.gvsig.compat.se.lang.MathUtils#log10(double)}
+     * .
+     */
+    public void testLog10() {
+    	assertEquals(utils.log10(1000),3.0,0.00000000001);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/MathUtilsTestParent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/StringUtilsTestParent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/StringUtilsTestParent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/StringUtilsTestParent.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.lang;
+
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * Parent class for Unit tests for {@link org.gvsig.compat.lang.StringUtils}
+ * implementations.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public abstract class StringUtilsTestParent extends TestCase {
+
+	private StringUtils utils;
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		utils = createUtils();
+	}
+
+	/**
+	 * Return a new instance of an implementation of the StringUtils interface.
+	 * 
+	 * @return a new StringUtils instance
+	 */
+	protected abstract StringUtils createUtils();
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.compat.se.lang.StandardStringUtils#split(java.lang.String, java.lang.String)}
+	 * .
+	 */
+	public void testSplitString() {
+		// Check the result is the same as the returned with the String.split
+		// method.
+		List list1;
+		List list2;
+
+		String testString = "En un lugar de la Mancha";
+		String regex = " ";
+
+		list1 = Arrays.asList(new String[] { "En", "un", "lugar", "de", "la",
+				"Mancha" });
+
+		list2 = Arrays.asList(utils.split(testString, regex));
+
+		assertEquals(list1, list2);
+
+		list1 = Arrays.asList(new String[] { "En", "un lugar de la Mancha" });
+
+		list2 = Arrays.asList(utils.split(testString, regex, 2));
+
+		assertEquals(list1, list2);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.compat.se.lang.StandardStringUtils#replaceAll(java.lang.String, java.lang.String, java.lang.String)}
+	 * .
+	 */
+	public void testReplaceAll() {
+		// Check the result is the same as the returned with the
+		// String.replaceAll method.
+		String testString = "En un lugar de la Mancha";
+		String regex = " ";
+		String replacement = "_";
+
+		assertEquals("En_un_lugar_de_la_Mancha",
+				utils.replaceAll(testString, regex, replacement));
+
+		// Check replaceFirst
+		assertEquals("En_un lugar de la Mancha",
+				utils.replaceFirst(testString, regex, replacement));
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.compat.se.lang.StandardStringUtils#compare(String, String, boolean)}
+	 * .
+	 */
+	public void testCompare() {
+		String avion = "Avi�n";
+		String avionaccent = "Avion";
+		String barco = "Barco";
+
+		// Same value
+		assertEquals(avion + " is not equal to " + avion, 0,
+				utils.compare(avion, avion, false));
+		assertEquals(avion + " is not equal to " + avion, 0,
+				utils.compare(avion, avion, true));
+
+		// Non localized comparison
+		assertTrue(utils.compare(avion, barco, false) < 0);
+		assertTrue(utils.compare(avion, avionaccent, false) > 0);
+		assertTrue(utils.compare(barco, avion, false) > 0);
+		assertTrue(utils.compare(avionaccent, avion, false) < 0);
+
+		// Localized comparison, so accents must not be taken into account
+		assertTrue(utils.compare(avion, barco, true) < 0);
+		assertEquals(0, utils.compare(avion, avionaccent, true));
+		assertTrue(utils.compare(barco, avion, true) > 0);
+		assertEquals(0, utils.compare(avionaccent, avion, true));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/StringUtilsTestParent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/SECompatLibraryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/SECompatLibraryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/SECompatLibraryTest.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se;
+
+import junit.framework.TestCase;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.se.lang.StandardStringUtils;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ * Unit tests for the {@link SECompatLibrary} class.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class SECompatLibraryTest extends TestCase {
+
+    /**
+     * Test method for {@link org.gvsig.compat.se.SECompatLibrary#initialize()}.
+     */
+    public void testInitialize() {
+        new DefaultLibrariesInitializer().fullInitialize();
+
+        // Check if the correct implementation is returned
+        assertEquals(StandardStringUtils.class, CompatLocator.getStringUtils()
+                .getClass());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/SECompatLibraryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/SEMathUtilsTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/SEMathUtilsTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/SEMathUtilsTest.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se.lang;
+
+import org.gvsig.compat.lang.MathUtils;
+import org.gvsig.compat.lang.MathUtilsTestParent;
+
+public class SEMathUtilsTest extends MathUtilsTestParent{
+
+	protected MathUtils createUtils() {
+		return new SEMathUtils();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/SEMathUtilsTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/StandardStringUtilsTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/StandardStringUtilsTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/StandardStringUtilsTest.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se.lang;
+
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.compat.lang.StringUtilsTestParent;
+
+/**
+ * Unit tests for the {@link org.gvsig.compat.se.lang.StandardStringUtils}
+ * class.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class StandardStringUtilsTest extends StringUtilsTestParent {
+
+    protected StringUtils createUtils() {
+        return new StandardStringUtils();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/StandardStringUtilsTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/CompatLibraryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/CompatLibraryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/CompatLibraryTest.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat;
+
+import junit.framework.TestCase;
+
+import org.gvsig.tools.library.Library;
+
+/**
+ * Unit tests for the {@link CompatLibrary} class.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class CompatLibraryTest extends TestCase {
+
+    /**
+     * Test method for {@link org.gvsig.compat.se.SECompatLibrary#initialize()}.
+     */
+    public void testInitialize() {
+        Library api = new CompatLibrary();
+
+        // 1: Initialize the Library
+        api.initialize();
+
+        // 2: postInitialize them
+        // as we don't initialize an implementation library,
+        // the postInitialization must throw an Exception
+        try {
+            api.postInitialize();
+            fail("Library postInitialization is not checking "
+                    + "for implementation availability");
+        } catch (Exception ex) {
+            // Good
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/CompatLibraryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.compat">
+		<priority value="DEBUG" /> 
+	</category>
+
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.compat.se.SECompatLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/Downloader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/Downloader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/Downloader.java	(revision 42196)
@@ -0,0 +1,17 @@
+package org.gvsig.compat.se.net.downloader;
+
+import java.net.URL;
+
+public interface Downloader extends org.gvsig.compat.net.Downloader {
+
+    public void setDownloadException(Exception exception);
+
+    public boolean getCanceled(Object groupId);
+    
+    void addDownloadedURL(URL url, String filePath);
+    
+    long getLatency();
+    
+    void setCanceled(Object groupId, boolean isCanceled);
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEDownloaderTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEDownloaderTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEDownloaderTask.java	(revision 42196)
@@ -0,0 +1,146 @@
+package org.gvsig.compat.se.net.downloader.se;
+
+import java.io.BufferedOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.prefs.Preferences;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import org.gvsig.compat.se.net.downloader.Downloader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class SEDownloaderTask implements Runnable {
+
+    private URL url = null;
+    private File dstFile = null;
+    private Object groupID = null;
+    private String data = null;
+    private Downloader downloader = null;
+    private static Logger LOG = LoggerFactory.getLogger(SEDownloaderTask.class);
+    private int maxbytes = -1;
+
+    public SEDownloaderTask(Downloader downloader, URL url, String data, File dstFile, Object groupID) {
+        this.url = url;
+        this.data = data;
+        this.dstFile = dstFile;
+        this.groupID = groupID;
+        this.downloader = downloader;
+        downloader.setDownloadException(null);
+    }
+
+    public void setMaxbytes(int maxbytes) {
+        this.maxbytes = maxbytes;
+    }
+
+    public int getMaxbytes() {
+        return maxbytes;
+    }
+
+    
+    public void run() {
+        LOG.info("downloading '" + url.toString() + "' to: " + dstFile.getAbsolutePath());
+        if (data != null) {
+            LOG.info("using POST, request = " + data);
+        }
+        // getting timeout from preferences in milliseconds.
+        Preferences prefs = Preferences.userRoot().node("gvsig.downloader");
+        // by default 1 minute (60000 milliseconds.
+        int timeout = prefs.getInt("timeout", 60000);
+
+        DataOutputStream dos;
+        try {
+            DataInputStream is;
+            OutputStreamWriter os = null;
+            HttpURLConnection connection = null;
+            //If the used protocol is HTTPS
+            if (url.getProtocol().equals("https")) {
+                disableHttsValidation();
+            }
+            connection = (HttpURLConnection) url.openConnection();
+            connection.setUseCaches(false);
+            connection.setRequestProperty("User-Agent", "Mozilla/5.0 (gvSIG) like Gecko");
+            connection.setConnectTimeout(timeout);
+            //If it uses a HTTP POST
+            if (data != null) {
+                connection.setRequestProperty("SOAPAction", "post");
+                connection.setRequestMethod("POST");
+                connection.setDoOutput(true);
+                connection.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
+                os = new OutputStreamWriter(connection.getOutputStream());
+                os.write(data);
+                os.flush();
+            }
+            is = new DataInputStream(connection.getInputStream());
+
+            dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dstFile)));
+            byte[] buffer = new byte[1024 * 4];
+
+            long readed = 0;
+            for (int i = is.read(buffer); !downloader.getCanceled(groupID) && i > 0; i = is.read(buffer)) {
+                dos.write(buffer, 0, i);
+                readed += i;
+                if( maxbytes>0 && readed>maxbytes ) {
+                    break;
+                }
+
+            }
+            if (os != null) {
+                os.close();
+            }
+            dos.close();
+            is.close();
+            is = null;
+            dos = null;
+            if (downloader.getCanceled(groupID)) {
+                LOG.info("[RemoteServices] '" + url + "' CANCELED.");
+                dstFile.delete();
+                dstFile = null;
+            } else {
+                downloader.addDownloadedURL(url, dstFile.getAbsolutePath());
+            }
+        } catch (Exception e) {
+            LOG.info("Error downloading", e);
+            downloader.setDownloadException(e);
+        }
+    }
+
+    /**
+     * This method disables the Https certificate validation.
+     *
+     * @throws KeyManagementException
+     * @throws NoSuchAlgorithmException
+     */
+    private void disableHttsValidation() throws KeyManagementException, NoSuchAlgorithmException {
+        // Create a trust manager that does not validate certificate chains
+        TrustManager[] trustAllCerts = new TrustManager[]{
+            new X509TrustManager() {
+                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+
+                public void checkClientTrusted(
+                        java.security.cert.X509Certificate[] certs, String authType) {
+                }
+
+                public void checkServerTrusted(
+                        java.security.cert.X509Certificate[] certs, String authType) {
+                }
+            }
+        };
+
+        // Install the all-trusting trust manager
+        SSLContext sc = SSLContext.getInstance("SSL");
+        sc.init(null, trustAllCerts, new java.security.SecureRandom());
+        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEMonitor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEMonitor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEMonitor.java	(revision 42196)
@@ -0,0 +1,52 @@
+package org.gvsig.compat.se.net.downloader.se;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.compat.se.net.downloader.Downloader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class SEMonitor implements Runnable {
+
+    ICancellable c;
+    private volatile boolean finish = false;
+    Downloader downloader;
+    private static Logger LOG = LoggerFactory.getLogger(SEMonitor.class);
+
+    public SEMonitor(Downloader downloader, ICancellable cancel) {
+        downloader.setCanceled(cancel.getID(), false);
+        this.c = cancel;
+        this.downloader = downloader;
+    }
+
+    public void run() {
+        while (!c.isCanceled() && !getFinish()) {
+            try {
+                Thread.sleep(downloader.getLatency());
+            } catch (InterruptedException e) {
+                LOG.error("Error", e);
+            }
+        }
+
+        /*  WARNING!! This works because only one download is being processed at once.
+         *  You could prefer to start several transfers simultaneously. If so, you
+         *  should consideer using a non-static variable such is Utilities.canceled to
+         *  control when and which transfer in particular has been canceled.
+         *
+         *  The feature of transfer several files is at the moment under study. We are
+         *  planning to add an intelligent system that will give you a lot of services
+         *  and ease-of-use. So, we encourage you to wait for it instead of write your
+         *  own code.
+         */
+        if (c.isCanceled()) {
+            downloader.setCanceled(c.getID(), true);
+        }
+    }
+
+    public synchronized void setFinish(boolean value) {
+        finish = value;
+    }
+
+    public synchronized boolean getFinish() {
+        return finish;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEDownloader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEDownloader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEDownloader.java	(revision 42196)
@@ -0,0 +1,465 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se.net.downloader.se;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.URI;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.Hashtable;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.compat.se.net.downloader.Downloader;
+
+/**
+ * Clase con m�todos de utilidad en el protocolo WMS
+ *
+ * @authors Laura D�az, jaume dominguez faus
+ */
+public class SEDownloader implements Downloader {
+
+//    String characters;
+    private boolean canceled;
+    private final long latency = 500;
+    private static int count = 0;
+    private static Logger LOG = LoggerFactory.getLogger(SEDownloader.class);
+
+    /**
+     * Used to cancel a group of files
+     * <b>key</b>: Group id, <b>value</b>: Boolean (true if the group has to be
+     * canceled. Otherwise it is false)
+     */
+    private Hashtable canceledGroup = new Hashtable();
+    /**
+     * <b>key</b>: URL, <b>value</b>: path to the downloaded file.
+     */
+    private Hashtable cachedURItoFile;
+    private Exception downloadException;
+    final String tempDirectoryPath = System.getProperty("java.io.tmpdir") + "/tmp-andami";
+
+    public SEDownloader() {
+        super();
+//        characters = "";
+//        for (int j = 32; j <= 127; j++) {
+//            characters += (char) j;
+//        }
+//        characters += "�������������������������������������������ǡ�����\n\r\f\t��";
+    }
+
+    /**
+     * Return the content of a file that has been created from a URL using the
+     * HTTP GET protocol
+     *
+     * @param url The URL
+     * @return File containing this URL's content or null if no file was found.
+     */
+    private File getPreviousDownloadedURL(URL url) {
+        return getPreviousDownloaded(url);
+    }
+
+    /**
+     * Return the content of a file that has been created from a URL using the
+     * HTTP POST protocol
+     *
+     * @param url The URL
+     * @param data The data to send on the query
+     * @return File containing this URL's content or null if no file was found.
+     */
+    private File getPreviousDownloadedURL(URL url, String data) {
+        if (data == null) {
+            return getPreviousDownloaded(url);
+        }
+        return getPreviousDownloaded(url.toString() + data);
+    }
+
+    /**
+     * Returns the content of a URL as a file from the file system.<br>
+     * <p>
+     * If the URL has been already downloaded in this session and notified to
+     * the system using the static <b>Utilities.addDownloadedURL(URL)</b>
+     * method, it can be restored faster from the file system avoiding to
+     * download it again.
+     * </p>
+     *
+     * @param url
+     * @return File containing this URL's content or null if no file was found.
+     */
+    private File getPreviousDownloaded(Object theurl) {
+
+        File f = null;
+        Object thekey = null;
+        try {
+            if (theurl instanceof URL) {
+                thekey = ((URL) theurl).toURI();
+            } else {
+                thekey = theurl;
+            }
+        } catch (Exception e) {
+            LOG.info("Warning: did not check url: " + theurl, e);
+            return null;
+        }
+
+        if (cachedURItoFile != null && cachedURItoFile.containsKey(thekey)) {
+            String filePath = (String) cachedURItoFile.get(thekey);
+            f = new File(filePath);
+            if (!f.exists()) {
+                return null;
+            }
+        }
+        return f;
+    }
+
+    /**
+     * Adds an URL to the table of downloaded files for further uses. If the URL
+     * already exists in the table its filePath value is updated to the new one
+     * and the old file itself is removed from the file system.
+     *
+     * @param url
+     * @param filePath
+     */
+    public void addDownloadedURL(URL url, String filePath) {
+        if (cachedURItoFile == null) {
+            cachedURItoFile = new Hashtable();
+        }
+
+        URI theuri = null;
+        try {
+            theuri = url.toURI();
+        } catch (Exception e) {
+            LOG.info("Warning: did not cache bad url: " + url, e);
+            return;
+        }
+
+        String fileName = (String) cachedURItoFile.put(theuri, filePath);
+        //JMV: No se puede eliminar el anterior porque puede que alguien lo
+        // este usando
+		/*
+         if (fileName!=null){
+         File f = new File(fileName);
+         if (f.exists())
+         f.delete();
+         }
+         */
+    }
+
+    /**
+     * Downloads an URL into a temporary file that is removed the next time the
+     * tempFileManager class is called, which means the next time gvSIG is
+     * launched.
+     *
+     * @param url
+     * @param name
+     * @return
+     * @throws IOException
+     * @throws ServerErrorResponseException
+     * @throws ConnectException
+     * @throws UnknownHostException
+     */
+    public synchronized File downloadFile(URL url, String name, ICancellable cancel) throws IOException, ConnectException, UnknownHostException {
+        File f = null;
+
+        if ((f = getPreviousDownloadedURL(url)) == null) {
+            File tempDirectory = new File(tempDirectoryPath);
+            if (!tempDirectory.exists()) {
+                tempDirectory.mkdir();
+            }
+
+            f = new File(calculateFileName(name));
+
+            if (cancel == null) {
+                cancel = new ICancellable() {
+                    public boolean isCanceled() {
+                        return false;
+                    }
+
+                    public Object getID() {
+                        return SEDownloader.class.getName();
+                    }
+                };
+            }
+
+            SEMonitor monitorObj = new SEMonitor(this, cancel);
+            Thread downloader = new Thread(createDownloaderTask(this, url, null, f, cancel.getID().getClass(),-1));
+            Thread monitor = new Thread(monitorObj);
+
+            monitor.start();
+            downloader.start();
+            while (!getCanceled(cancel.getID()) && downloader.isAlive()) {
+                try {
+                    Thread.sleep(latency);
+                } catch (InterruptedException e) {
+                    LOG.error("Error", e);
+                }
+            }
+
+            try {
+                monitorObj.setFinish(true);
+                monitor.join();
+                downloader.join();
+            } catch (InterruptedException e1) {
+                LOG.warn(e1.getMessage());
+            }
+            downloader = null;
+            monitor = null;
+
+            if (getCanceled(cancel.getID())) {
+                return null;
+            }
+            downloader = null;
+            monitor = null;
+            if (this.downloadException != null) {
+                Exception e = this.downloadException;
+                if (e instanceof FileNotFoundException) {
+                    throw (IOException) e;
+                } else if (e instanceof IOException) {
+                    throw (IOException) e;
+                } else if (e instanceof ConnectException) {
+                    throw (ConnectException) e;
+                } else if (e instanceof UnknownHostException) {
+                    throw (UnknownHostException) e;
+                }
+            }
+        } else {
+            LOG.info(url.toString() + " cached at '" + f.getAbsolutePath() + "'");
+        }
+
+        return f;
+    }
+
+    private String calculateFileName(String name) {
+        count++;
+        int index = name.lastIndexOf(".");
+        if (index > 0) {
+            return tempDirectoryPath + "/" + name.substring(0, index) + System.currentTimeMillis() + count
+                    + name.substring(index, name.length());
+        }
+        return tempDirectoryPath + "/" + name + System.currentTimeMillis() + count;
+    }
+
+    /**
+     * Downloads a URL using the HTTP Post protocol
+     *
+     * @param url The server URL
+     * @param data The data to send in the request
+     * @param name A common name for all the retrieved files
+     * @param cancel Used to cancel the downloads
+     * @return The retrieved file
+     * @throws IOException
+     * @throws ConnectException
+     * @throws UnknownHostException
+     */
+    public synchronized File downloadFile(URL url, String data, String name, ICancellable cancel) throws IOException, ConnectException, UnknownHostException {
+        return downloadFile(url, data, name, cancel, -1);
+    }
+        
+    public synchronized File downloadFile(URL url, String data, String name, ICancellable cancel,int maxbytes) throws IOException, ConnectException, UnknownHostException {
+        File f = null;
+
+        if ((f = getPreviousDownloadedURL(url, data)) == null) {
+            File tempDirectory = new File(tempDirectoryPath);
+            if (!tempDirectory.exists()) {
+                tempDirectory.mkdir();
+            }
+
+            f = new File(calculateFileName(name));
+
+            if (cancel == null) {
+                cancel = new ICancellable() {
+                    public boolean isCanceled() {
+                        return false;
+                    }
+
+                    public Object getID() {
+                        return SEDownloader.class.getName();
+                    }
+                };
+            }
+            SEMonitor monitorObj = new SEMonitor(this, cancel);
+            Thread downloader = new Thread(
+                    createDownloaderTask(this, url, data, f, cancel.getID(),maxbytes)
+            );
+            
+            Thread monitor = new Thread(monitorObj);
+            monitor.start();
+            downloader.start();
+            while (!getCanceled(cancel.getID()) && downloader.isAlive()) {
+                try {
+                    Thread.sleep(latency);
+                } catch (InterruptedException e) {
+                    LOG.error("Error", e);
+                }
+            }
+
+            try {
+                monitorObj.setFinish(true);
+                monitor.join();
+                downloader.join();
+            } catch (InterruptedException e1) {
+                LOG.warn(e1.getMessage());
+            }
+            downloader = null;
+            monitor = null;
+
+            if (getCanceled(cancel.getID())) {
+                return null;
+            }
+            if (this.downloadException != null) {
+                Exception e = this.downloadException;
+                if (e instanceof FileNotFoundException) {
+                    throw (IOException) e;
+                } else if (e instanceof IOException) {
+                    throw (IOException) e;
+                } else if (e instanceof ConnectException) {
+                    throw (ConnectException) e;
+                } else if (e instanceof UnknownHostException) {
+                    throw (UnknownHostException) e;
+                }
+            }
+        } else {
+            LOG.info(url.toString() + " cached at '" + f.getAbsolutePath() + "'");
+        }
+
+        return f;
+    }
+
+    /**
+     * Try if a group of downloads has been canceled
+     *
+     * @param groupId Group id
+     * @return If the group has been canceled
+     */
+    public boolean getCanceled(Object groupId) {
+        Object obj = canceledGroup.get(groupId);
+        if (obj != null) {
+            return ((Boolean) obj).booleanValue();
+        }
+        return false;
+    }
+
+    /**
+     * Cancel a group of downloads
+     *
+     * @param groupId Group id
+     * @param isCanceled if the group has to be canceled
+     */
+    public void setCanceled(Object groupId, boolean isCanceled) {
+        if (groupId == null) {
+            groupId = SEDownloader.class.getName();
+        }
+        canceledGroup.put(groupId, new Boolean(isCanceled));
+    }
+
+    /**
+     * Cleans every temporal file previously downloaded.
+     */
+    public void cleanUpTempFiles() {
+        try {
+            File tempDirectory = new File(tempDirectoryPath);
+
+            File[] files = tempDirectory.listFiles();
+            if (files != null) {
+                for (int i = 0; i < files.length; i++) {
+                    // s�lo por si en un futuro se necesitan crear directorios temporales
+                    if (files[i].isDirectory()) {
+                        deleteDirectory(files[i]);
+                    }
+                    files[i].delete();
+                }
+            }
+            tempDirectory.delete();
+        } catch (Exception e) {
+        }
+
+    }
+
+    /**
+     * Recursive directory delete.
+     *
+     * @param f
+     */
+    private void deleteDirectory(File f) {
+        File[] files = f.listFiles();
+        for (int i = 0; i < files.length; i++) {
+            if (files[i].isDirectory()) {
+                deleteDirectory(files[i]);
+            }
+            files[i].delete();
+        }
+
+    }
+
+    /**
+     * Remove an URL from the system cache. The file will remain in the file
+     * system for further eventual uses.
+     *
+     * @param request
+     */
+    public void removeURL(URL url) {
+
+        URI theuri = null;
+
+        try {
+            theuri = url.toURI();
+        } catch (Exception e) {
+            LOG.info("Warning: did not remove bad url: " + url, e);
+            return;
+        }
+
+        if (cachedURItoFile != null && cachedURItoFile.containsKey(theuri)) {
+            cachedURItoFile.remove(theuri);
+        }
+    }
+
+    /**
+     * Remove an URL from the system cache. The file will remain in the file
+     * system for further eventual uses.
+     *
+     * @param request
+     */
+    public void removeURL(Object url) {
+        if (cachedURItoFile != null && cachedURItoFile.containsKey(url)) {
+            cachedURItoFile.remove(url);
+        }
+    }
+
+    public void setDownloadException(Exception exception) {
+        this.downloadException = exception;
+    }
+
+    public long getLatency() {
+        return this.latency;
+    }
+
+    protected Runnable createDownloaderTask(Downloader downloader, URL url, String data, File target, Object groupID,int maxbytes){
+        SEDownloaderTask t = new SEDownloaderTask(downloader, url, data, target, groupID);
+        t.setMaxbytes(maxbytes);
+        return t;
+                
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/se/SEDownloader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/print/SePrintAttributes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/print/SePrintAttributes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/print/SePrintAttributes.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se.print;
+
+import org.gvsig.compat.print.PrintAttributes;
+
+/**
+ * JSE (Desktop Java) implementation of {@link PrintAttributes}
+ * 
+ * @author Juan Lucas Dominguez Rubio jldominguez at prodevelop.es
+ * 
+ * @see PrintAttributes
+ *
+ */
+public class SePrintAttributes implements PrintAttributes{
+
+	int pq = 0;
+	
+	public int getPrintQuality() {
+		return pq;
+	}
+
+	public void setPrintQuality(int pq) {
+		this.pq=pq;
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/print/SePrintAttributes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/SECompatLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/SECompatLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/SECompatLibrary.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se;
+
+import org.gvsig.compat.CompatLibrary;
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.se.lang.SEGraphUtils;
+import org.gvsig.compat.se.lang.SEMathUtils;
+import org.gvsig.compat.se.lang.StandardStringUtils;
+import org.gvsig.compat.se.net.downloader.se.SEDownloader;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Initialization of the libCompat library, Java Standard Edition
+ * implementation.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C?sar Ordi?ana</a>
+ */
+public class SECompatLibrary extends AbstractLibrary {
+	
+    public void doRegistration() {
+        registerAsImplementationOf(CompatLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+		CompatLocator.registerStringUtils(StandardStringUtils.class);
+		CompatLocator.registerMathUtils(SEMathUtils.class);
+		CompatLocator.registerGraphicsUtils(SEGraphUtils.class);
+		CompatLocator.registerDownloader(SEDownloader.class);
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEMathUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEMathUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEMathUtils.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se.lang;
+
+import org.gvsig.compat.lang.MathUtils;
+
+/**
+ * JSE (Desktop Java) implementation of {@link MathUtils}
+ * 
+ * @author Juan Lucas Dominguez Rubio jldominguez at prodevelop.es
+ * 
+ * @see MathUtils
+ *
+ */
+public class SEMathUtils implements MathUtils{
+
+	public double log10(double value) {
+		return Math.log10(value);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEMathUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/StandardStringUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/StandardStringUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/StandardStringUtils.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se.lang;
+
+import java.text.Collator;
+
+import org.gvsig.compat.lang.StringUtils;
+
+/**
+ * String utilities implementation for Java Standard Edition.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class StandardStringUtils implements StringUtils {
+
+	public String[] split(String input, String regex) {
+		return input == null ? null : input.split(regex);
+	}
+
+	public String[] split(String input, String regex, int limit) {
+		return input == null ? null : input.split(regex, limit);
+	}
+
+	public String replaceAll(String input, String regex, String replacement) {
+		return input == null ? null : input.replaceAll(regex, replacement);
+	}
+
+	public String replaceFirst(String input, String regex, String replacement) {
+		return input == null ? null : input.replaceFirst(regex, replacement);
+	}
+
+	public int compare(String source, String target, boolean localized) {
+		if (localized) {
+			Collator collator = Collator.getInstance();
+			collator.setStrength(Collator.PRIMARY);
+			return collator.compare(source, target);
+		} else {
+			return source.compareTo(target);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/StandardStringUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEGraphUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEGraphUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEGraphUtils.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.se.lang;
+
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.Toolkit;
+import java.awt.image.BufferedImage;
+import java.awt.image.WritableRaster;
+import java.util.prefs.Preferences;
+
+import org.gvsig.compat.lang.GraphicsUtils;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.compat.se.print.SePrintAttributes;
+
+/**
+ * JSE (Desktop Java) implementation of {@link GraphicsUtils}
+ * 
+ * @author Juan Lucas Dominguez Rubio jldominguez at prodevelop.es
+ * 
+ * @see GraphicsUtils
+ *
+ */
+public class SEGraphUtils implements GraphicsUtils{
+
+	public BufferedImage copyBufferedImage(BufferedImage img) {
+		
+		BufferedImage image = new BufferedImage(img.getWidth(), img.getHeight(), img.getType());
+		WritableRaster w = image.getRaster();
+		img.copyData(w);
+		return image;
+	}
+
+	public BufferedImage createBufferedImage(int w, int h, int type) {
+		BufferedImage res = new BufferedImage(
+				w,
+				h,
+				type);
+		return res;
+	}
+
+	public PrintAttributes createPrintAttributes() {
+		return new SePrintAttributes();
+	}
+
+	public Font deriveFont(Font srcfont, float newheight) {
+		return srcfont.deriveFont(newheight);
+	}
+
+	/**
+	 * Tries to use DPI value from gvSIG preferences. If this does not exist, gets
+	 * value from Java Toolkit. 
+	 */
+	public int getScreenDPI() {
+		
+		Preferences prefsResolution = Preferences.userRoot().node("gvsig.configuration.screen");
+		Toolkit kit = Toolkit.getDefaultToolkit();
+		int dpi = prefsResolution.getInt("dpi", kit.getScreenResolution());
+		return dpi;
+	}
+
+	public void translate(Graphics2D g, double x, double y) {
+		g.translate(x, y);
+		
+	}
+
+	public void setRenderingHintsForDrawing(Graphics2D g) {
+		
+		RenderingHints renderHints = new RenderingHints(
+				RenderingHints.KEY_ANTIALIASING,
+				RenderingHints.VALUE_ANTIALIAS_ON);
+		renderHints.put(RenderingHints.KEY_RENDERING,
+				RenderingHints.VALUE_RENDER_QUALITY);
+		renderHints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
+				RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+		g.setRenderingHints(renderHints);
+		
+	}
+
+	public void setRenderingHintsForPrinting(Graphics2D g) {
+		
+		RenderingHints renderHints = new RenderingHints(
+				RenderingHints.KEY_ANTIALIASING,
+				RenderingHints.VALUE_ANTIALIAS_ON);
+		renderHints.put(RenderingHints.KEY_RENDERING,
+				RenderingHints.VALUE_RENDER_QUALITY);
+		g.setRenderingHints(renderHints);
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEGraphUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/pom.xml	(revision 42196)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.compat.se</artifactId>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <description>This library contains the implementation for JavaSE 1.5 of the API definition of the library for compatibility with java 1.4 in JVM CDC</description>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.compat.CompatLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/print/PrintAttributes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/print/PrintAttributes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/print/PrintAttributes.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.print;
+
+/**
+ * Multi-platform interface to store print attributes.
+ * Currently ionly supports the printing quality attribute
+ * 
+ * @author Juan Lucas Dominguez Rubio jldominguez at prodevelop.es
+ *
+ */
+public interface PrintAttributes {
+	
+	/**
+	 * Constant to indicate a poor printing quality (useful for drafts, etc) 
+	 */
+    public static final int PRINT_QUALITY_DRAFT = 0;
+	/**
+	 * Constant to indicate a normal printing quality 
+	 */
+	public static final int PRINT_QUALITY_NORMAL = 1;
+	/**
+	 * Constant to indicate a high printing quality 
+	 */
+	public static final int PRINT_QUALITY_HIGH = 2;
+	
+	/**
+	 * DPI standard values associated with indices
+	 */
+    public static final int[] PRINT_QUALITY_DPI = { 72, 300, 600 };
+	
+	/**
+	 * Gets the print quality value for this object.
+	 * @return the print quality value for this object.
+	 */
+	public int getPrintQuality();
+	
+	/**
+	 * Sets the print quality value for this object.
+	 * @param pq the new value for the print quality value
+	 */
+	public void setPrintQuality(int pq);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/print/PrintAttributes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/GraphicsUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/GraphicsUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/GraphicsUtils.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.lang;
+
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.compat.print.PrintAttributes;
+
+/**
+ * Multi-platform graphic utils interface.
+ * This allows platforms with poor java.awt.Graphics2D implementations to
+ * share most of the application source code.
+ *   
+ * @author Juan Lucas Dominguez Rubio jldominguez at prodevelop.es
+ *
+ */
+public interface GraphicsUtils {
+	
+	/**
+	 * Create a buffered Image of the given size and type.
+	 * In this context, buffered image means editable image (admits setRGB etc)
+	 *  
+	 * @param w width in pixels of the requested image
+	 * @param h height in pixels of the requested image
+	 * @param type image type (refers to bands, etc. see {@link Image}
+	 * @return a buffered (editable) image of the desired size and type
+	 */
+	public BufferedImage createBufferedImage(int w, int h, int type);
+	
+	/**
+	 * Produces a copy of a buffered image with the same graphic content (pixel color)
+	 * @param img image to be copied
+	 * @return new instance of a BufferedImage (editable) with same size, type and graphic content.
+	 */
+	public BufferedImage copyBufferedImage(BufferedImage img);
+	
+	/**
+	 * Returns an istance of Font which is the same as the one provided except for the size.
+	 * 
+	 * @param srcfont provided font to be used as model
+	 * @param newheight height in pixels of the new fonr 
+	 * @return the new font, same properties as the provided font, but different size
+	 */
+	public Font deriveFont(Font srcfont, float newheight);
+	
+	/**
+	 * Returns device screen DPI (dots per inch)
+	 * 
+	 * @return number of pixels per inch in the current screen
+	 */
+	public int getScreenDPI();
+
+	/**
+	 * Adds a translation operation to the Graphics2D object's transformation matrix.
+	 *   
+	 * @param g Object whose transformation matrix has to be modified
+	 * @param x horizontal offset of the translation 
+	 * @param y vertical offset of the translation
+	 */
+	public void translate(Graphics2D g, double x, double y);
+	
+	/**
+	 * Creates an object that implements the PrintAttributes interface with default/trivial values.
+	 * 
+	 * @return an object that implements the PrintAttributes interface with default/trivial values.
+	 */
+	public PrintAttributes createPrintAttributes();
+	
+	/**
+	 * Sets the rendering hints to the Graphics2D object in a way that is suitable for drawing.
+	 *  
+	 * @param g the Graphics2D object whose rendering hints have to be set for drawing
+	 */
+	public void setRenderingHintsForDrawing(Graphics2D g);
+	
+	/**
+	 * Sets the rendering hints to the Graphics2D object in a way that is suitable for printing.
+	 *  
+	 * @param g the Graphics2D object whose rendering hints have to be set for printing
+	 */
+	public void setRenderingHintsForPrinting(Graphics2D g);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/GraphicsUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/StringUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/StringUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/StringUtils.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.lang;
+
+/**
+ * String Utilities used for Java SE-ME compatibility.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public interface StringUtils {
+    
+    /**
+     * Compatible implementation of the String.split(regexp) method.
+     * @see String#split(String)
+     */
+    String[] split(String input, String regex);
+    
+    /**
+     * Compatible implementation of the String.split(regexp, limit) method.
+     * @see String#split(String, int)
+     */
+    String[] split(String input, String regex, int limit);
+    
+    /**
+     * Compatible implementation of the String.replaceAll(regexp, replacement)
+     * method.
+     * 
+     * @see String#replaceAll(String, String)
+     */
+    String replaceAll(String input, String regex,
+            String replacement);
+    
+    /**
+     * Compatible implementation of the String.replaceFirst(regexp, replacement)
+     * method.
+     * 
+     * @see String#replaceFirst(String, String)
+     */
+    String replaceFirst(String input, String regex,
+            String replacement);
+
+	/**
+	 * Compares two Strings, maybe taking into account the current locale.
+	 * 
+	 * @param source
+	 *            the source text
+	 * @param target
+	 *            the target text to compare to
+	 * @param localized
+	 *            if the comparison must be made with the current locale (ex: if
+	 *            making a difference between accented characters or not).
+	 * @return Returns an integer value. Value is less than zero if source is
+	 *         less than target, value is zero if source and target are equal,
+	 *         value is greater than zero if source is greater than target.
+	 */
+	int compare(String source, String target, boolean localized);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/StringUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/MathUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/MathUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/MathUtils.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.lang;
+
+/**
+ * Math Utilities used for Java SE-ME compatibility.
+ * 
+ * @author <a href="mailto:jcarrasco@prodevelop.es">Javier Carrasco</a>
+ */
+public interface MathUtils {
+	/**
+     * Compatible implementation of the Math.log10(double) method.
+     * @see Math#log10(double)
+     */
+    double log10(double value);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/MathUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/Downloader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/Downloader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/Downloader.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.net;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.URL;
+import java.net.UnknownHostException;
+
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface Downloader {
+    /**
+     * Downloads an URL into a temporary file that is removed the next time the
+     * tempFileManager class is called, which means the next time gvSIG is launched.
+     *
+     * @param url
+     * @param name
+     * @return
+     * @throws IOException
+     * @throws ServerErrorResponseException
+     * @throws ConnectException
+     * @throws UnknownHostException
+     */
+    public File downloadFile(URL url, String name, ICancellable cancel) throws IOException,ConnectException, UnknownHostException;
+    
+
+    /**
+     * Downloads a URL using the HTTP Post protocol
+     * @param url
+     * The server URL
+     * @param data
+     * The data to send in the request
+     * @param name
+     * A common name for all the retrieved files
+     * @param cancel
+     * Used to cancel the downloads
+     * @return
+     * The retrieved file
+     * @throws IOException
+     * @throws ConnectException
+     * @throws UnknownHostException
+     */
+    public File downloadFile(URL url, String data, String name, ICancellable cancel) throws IOException,ConnectException, UnknownHostException;
+
+    public File downloadFile(URL url, String data, String name, ICancellable cancel, int maxbytes) throws IOException,ConnectException, UnknownHostException;
+
+    public void removeURL(URL url);
+    
+    public void removeURL(Object url);
+    
+    /**
+     * Cleans every temporal file previously downloaded.
+     */
+    public void cleanUpTempFiles();
+       
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/Downloader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/ICancellable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/ICancellable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/ICancellable.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat.net;
+
+/**
+ * <p>When a task is accessing to remote data, takes an indeterminate time, and occasionally gets locked. That's
+ * the reason a task should support to be cancelable.</p>
+ * <p><code>ICancellable</code> interface is designed for getting information about the cancellation of a
+ * task of downloading remote information.</p>
+ */
+public interface ICancellable {
+	/**
+	 * <p>Returns <code>true</code> if a download or a group of downloads tasks has been canceled.</p>
+	 * 
+	 * @return <code>true</code> if a download or a group of downloads tasks has been canceled, otherwise <code>false</code>
+	 */
+	public boolean isCanceled();
+	
+	/**
+	 * <p>Used to cancel only a group of downloads tasks with the same identifier.</p>
+	 * 
+	 * @return the identifier
+	 */
+	public Object getID();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/ICancellable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLocator.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat;
+
+import org.gvsig.compat.lang.GraphicsUtils;
+import org.gvsig.compat.lang.MathUtils;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.compat.net.Downloader;
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * Locator for the libCompat Library. Returns references to the library's main
+ * utilities.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class CompatLocator extends BaseLocator {
+    
+    /**
+     * The name of the StringUtils reference.
+     */
+    public static final String STRINGUTILS_NAME = "StringUtils";
+    
+    /**
+     * The name of the MathUtils reference.
+     */
+    public static final String MATHUTILS_NAME = "MathUtils";
+    public static final String GRAPHICSUTILS_NAME = "GraphicsUtils";
+
+    /**
+     * The description of the StringUtils reference.
+     */
+    private static final String STRINGUTILS_DESCRIPTION = "Compatible implementation for String Utilities";
+    
+    /**
+     * The description of the MathUtils reference.
+     */
+    private static final String MATHUTILS_DESCRIPTION = "Compatible implementation for Math Utilities";
+    private static final String GRAPHICSUTILS_DESCRIPTION = "Compatible implementation for Graphics Utilities";
+    
+    /**
+     * The name and the description for the {@link Downloader} reference.
+     */
+    public static final String DOWNLOADER_NAME = "Downloader";
+    public static final String DOWNLOADER_DESCRIPTION = "Downloader descripction";
+
+    /**
+     * Unique instance.
+     */
+    private static final CompatLocator instance = new CompatLocator();
+
+    /**
+     * Return the singleton instance.
+     * 
+     * @return the singleton instance
+     */
+    public static CompatLocator getInstance() {
+        return instance;
+    }
+
+    /**
+     * Return a reference to StringUtils.
+     * 
+     * @return a reference to StringUtils
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static StringUtils getStringUtils() throws LocatorException {
+        return (StringUtils) getInstance().get(STRINGUTILS_NAME);
+    }
+
+    /**
+     * Return a reference to MathUtils.
+     * 
+     * @return a reference to MathUtils
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static MathUtils getMathUtils() throws LocatorException {
+        return (MathUtils) getInstance().get(MATHUTILS_NAME);
+    }
+
+    
+    /**
+     * Registers the Class implementing the MathUtils interface.
+     * 
+     * @param clazz
+     *            implementing the MathUtils interface
+     */
+    public static void registerMathUtils(Class clazz) {
+        getInstance()
+                .register(MATHUTILS_NAME, MATHUTILS_DESCRIPTION, clazz);
+    }
+    
+    /**
+     * Registers the Class implementing the StringUtils interface.
+     * 
+     * @param clazz
+     *            implementing the StringUtils interface
+     */
+    public static void registerStringUtils(Class clazz) {
+        getInstance()
+                .register(STRINGUTILS_NAME, STRINGUTILS_DESCRIPTION, clazz);
+    }
+    
+    // ============================================================
+    // ============================================================
+    // ============================================================
+    
+    /**
+     * Return a reference to GraphicsUtils.
+     * 
+     * @return a reference to GraphicsUtils
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static GraphicsUtils getGraphicsUtils() throws LocatorException {
+        return (GraphicsUtils) getInstance().get(GRAPHICSUTILS_NAME);
+    }
+
+    
+    /**
+     * Registers the Class implementing the GraphicsUtils interface.
+     * 
+     * @param clazz
+     *            implementing the GraphicsUtils interface
+     */
+    public static void registerGraphicsUtils(Class clazz) {
+        getInstance()
+                .register(GRAPHICSUTILS_NAME, GRAPHICSUTILS_DESCRIPTION, clazz);
+    }
+    
+    /**
+     * Return a reference to GraphicsUtils.
+     * 
+     * @return a reference to GraphicsUtils
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static Downloader getDownloader() throws LocatorException {
+        return (Downloader) getInstance().get(DOWNLOADER_NAME);
+    }
+
+    
+    /**
+     * Registers the Class implementing the GraphicsUtils interface.
+     * 
+     * @param clazz
+     *            implementing the GraphicsUtils interface
+     */
+    public static void registerDownloader(Class clazz) {
+        getInstance()
+                .register(DOWNLOADER_NAME, DOWNLOADER_DESCRIPTION, clazz);
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLibrary.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.compat;
+
+import org.gvsig.compat.lang.GraphicsUtils;
+import org.gvsig.compat.lang.MathUtils;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.compat.net.Downloader;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Initialization of the libCompat library.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class CompatLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsAPI(CompatLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+		// Nothing to do
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+		// Validate there is any implementation registered.
+		StringUtils stringUtils = CompatLocator.getStringUtils();
+		
+		if (stringUtils == null) {
+			throw new ReferenceNotRegisteredException(
+					CompatLocator.STRINGUTILS_NAME, CompatLocator.getInstance());
+		}
+		
+		// Validate there is any implementation registered.
+		MathUtils mathUtils = CompatLocator.getMathUtils();
+		
+		if (mathUtils == null) {
+			throw new ReferenceNotRegisteredException(
+					CompatLocator.MATHUTILS_NAME, CompatLocator.getInstance());
+		}
+		
+		// Validate there is any implementation registered.
+		GraphicsUtils gUtils = CompatLocator.getGraphicsUtils();
+		
+		if (gUtils == null) {
+			throw new ReferenceNotRegisteredException(
+					CompatLocator.GRAPHICSUTILS_NAME, CompatLocator.getInstance());
+		}
+		
+		  // Validate there is any implementation registered for the Downloader.
+        Downloader downloader = CompatLocator.getDownloader();
+        
+        if (downloader == null) {
+            throw new ReferenceNotRegisteredException(
+                    CompatLocator.DOWNLOADER_NAME, CompatLocator.getInstance());
+        }
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/pom.xml	(revision 42196)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.compat.api</artifactId>
+  <packaging>jar</packaging>    
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.compat</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <includes>
+            <include>**</include>
+          </includes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-log4j12</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+  </dependencies>
+
+  <description>This library contains the API definition of the library for compatibility with java 1.4 in JVM CDC.</description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.compat
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml	(revision 42196)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.mapcontext</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <modules>
+      <module>org.gvsig.fmap.mapcontext.api</module>
+      <module>org.gvsig.fmap.mapcontext.impl</module>
+      <module>org.gvsig.fmap.mapcontext.operation</module>
+  </modules>
+
+  <description>This project contains the core of the map drawer of gvSIG.</description>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.fmap.mapcontext">
+		<priority value="DEBUG" /> 
+	</category>
+
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummyVectorLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummyVectorLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummyVectorLegend.java	(revision 42196)
@@ -0,0 +1,231 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbol;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.LegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+
+public class DummyVectorLegend implements IVectorLegend {
+
+    private long shpType = -1;
+
+    private ISymbol sym = new DummySymbol(Color.RED, TYPES.SOLID);
+
+    public DummyVectorLegend() {
+        shpType = System.currentTimeMillis() % 1000000;
+    }
+
+    public DummyVectorLegend(int type) {
+        shpType = type; // System.currentTimeMillis() % 1000000;
+    }
+
+    public void draw(BufferedImage image, Graphics2D graphics2D,
+        ViewPort viewPort, Cancellable cancel, double scale,
+        Map queryParameters, ICoordTrans coordTrans,
+        FeatureStore featureStore, FeatureQuery featureQuery) throws LegendException {
+
+    }
+    public void draw(BufferedImage image, Graphics2D graphics2D,
+        ViewPort viewPort, Cancellable cancel, double scale,
+        Map queryParameters, ICoordTrans coordTrans,
+        FeatureStore featureStore) throws LegendException {
+
+        try {
+            FeatureSet fs = featureStore.getFeatureSet();
+            Iterator iter = fs.iterator();
+            Feature feat = null;
+            ISymbol symb = null;
+            while (iter.hasNext()) {
+                feat = (Feature) iter.next();
+                symb = this.getSymbolByFeature(feat);
+                symb.draw(graphics2D, viewPort.getAffineTransform(), feat.getDefaultGeometry(), feat, null);
+            }
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        // TODO Auto-generated method stub
+
+    }
+
+    public int getShapeType() {
+        // TODO Auto-generated method stub
+        return (int) shpType;
+    }
+
+    public ISymbol getSymbolByFeature(Feature feat) {
+        return sym;
+    }
+
+    public boolean isSuitableForShapeType(int shapeType) {
+        return sym.getSymbolType() == shapeType;
+    }
+
+    public boolean isUseDefaultSymbol() {
+        return true;
+    }
+
+    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+        double scale, Object object, ICoordTrans coordTrans,
+        FeatureStore featureStore, Evaluator evaluator, PrintAttributes properties)
+    throws LegendException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void setDefaultSymbol(ISymbol s) throws IllegalArgumentException {
+        sym = s;
+    }
+
+    public void setShapeType(int shapeType) {
+        shpType = shapeType;
+    }
+
+    public void useDefaultSymbol(boolean b) {
+    }
+
+    public void addLegendListener(LegendContentsChangedListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public ILegend cloneLegend() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void fireDefaultSymbolChangedEvent(SymbolLegendEvent event) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public ISymbol getDefaultSymbol() {
+        return sym;
+    }
+
+    public LegendContentsChangedListener[] getListeners() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void removeLegendListener(LegendContentsChangedListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public String getClassName() {
+        return this.getClass().getName();
+    }
+
+
+
+
+    public void addDrawingObserver(Observer observer) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void deleteDrawingObserver(Observer observer) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void deleteDrawingObservers() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        shpType = state.getLong("shpType");
+    }
+
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("shpType", shpType);
+    }
+
+    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+        double scale, Map queryParameters, ICoordTrans coordTrans,
+        FeatureStore featureStore, FeatureQuery featureQuery, PrintAttributes properties)
+    throws LegendException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+        double scale, Map queryParameters, ICoordTrans coordTrans,
+        FeatureStore featureStore, PrintAttributes properties)
+    throws LegendException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public static void registerPersistent() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.addDefinition(
+            DummyVectorLegend.class,
+            "DummyVectorLegend",
+            "DummyVectorLegend Persistence definition",
+            null, 
+            null
+        );
+        definition.addDynFieldLong("shpType")
+        .setMandatory(true);
+    }
+
+
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummyVectorLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummySymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummySymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummySymbol.java	(revision 42196)
@@ -0,0 +1,181 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbol;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+
+public class DummySymbol implements ISymbol {
+
+	private Color color = Color.GREEN;
+	private int type = TYPES.SOLID;
+	
+	public DummySymbol(Color c, int geomtype) {
+		color = c;
+		type = geomtype;
+	}
+	
+	public Object clone() {
+		return null;
+	}
+	
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature f, Cancellable cancel) {
+		
+		g.setColor(color);
+		
+		if (geom instanceof Point) {
+			Point p = (Point) geom;
+			p.transform(affineTransform);
+			g.drawRect((int) p.getX(), (int) p.getY(), 3, 3);
+		} else {
+			PathIterator piter = geom.getPathIterator(affineTransform); 
+			drawPathIterator(g, piter);
+		}
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r,
+			PrintAttributes properties) throws SymbolDrawingException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public String getDescription() {
+		return "a dummy symbol";
+	}
+
+	public int getOnePointRgb() {
+		return color.getRGB();
+	}
+
+	public void getPixExtentPlus(Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public ISymbol getSymbolForSelection() {
+		return new DummySymbol(Color.YELLOW, type);
+	}
+
+	public int getSymbolType() {
+		return type;
+	}
+
+	public boolean isOneDotOrPixel(Geometry geom,
+			double[] positionOfDotOrPixel, ViewPort viewPort, int dpi) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isShapeVisible() {
+		return true;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return type == geom.getType();
+	}
+
+	public void setColor(Color c) {
+		color = c;
+	}
+
+	public void setDescription(String desc) {
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+	}
+
+	public void print(Graphics2D g, AffineTransform at, Geometry shape,
+			PrintAttributes properties) {
+	}
+	
+	
+	
+	/**
+	 * Draws the general path on the graphics object with the given affine transformation
+	 * @param g the graphics object
+	 * @param gp the general path
+	 */
+	public static void drawPathIterator(Graphics2D g, PathIterator pit) {
+		
+		ArrayList x = new ArrayList();
+		ArrayList y = new ArrayList();
+		double[] current = new double[6];
+		
+		while (!pit.isDone()) {
+			pit.currentSegment(current);
+			x.add(new Integer((int) current[0]));
+			y.add(new Integer((int) current[1]));
+			pit.next();
+		}
+		
+		int[] gx = integerArrayListToIntArray(x);
+		int[] gy = integerArrayListToIntArray(y);
+
+		g.drawPolyline(gx, gy, gx.length);
+	}
+	
+	
+	/**
+	 * Converts array list of Integer objects into array of int
+	 * @param l
+	 * @return array of int
+	 */
+	public static int[] integerArrayListToIntArray(ArrayList l) {
+
+		int size = l.size();
+		int[] resp = new int[size];
+		for (int i=0; i<size; i++) {
+			resp[i] = ((Integer) l.get(i)).intValue();
+		}
+		return resp;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/rendering/symbol/DummySymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactoryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactoryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactoryTest.java	(revision 42196)
@@ -0,0 +1,100 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.Color;
+
+import org.easymock.MockControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+
+/**
+ * Unit tests for the class {@link ColorPersistenceFactory}.
+ * 
+ * @author gvSIG team
+ */
+public class ColorPersistenceFactoryTest extends
+		AbstractLibraryAutoInitTestCase {
+
+	private ColorPersistenceFactory factory;
+	private MockControl stateControl;
+	private PersistentState state;
+	private Color color;
+
+	protected void doSetUp() throws Exception {
+		PersistenceManager persistenceManager = ToolsLocator
+				.getPersistenceManager();
+		factory = (ColorPersistenceFactory) persistenceManager.getFactories()
+				.get(Color.class);
+		stateControl = MockControl.createNiceControl(PersistentState.class);
+		state = (PersistentState) stateControl.getMock();
+		color = Color.magenta;
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.ColorPersistenceFactory#createFromState(org.gvsig.tools.persistence.PersistentState, java.lang.Class)}
+	 * .
+	 */
+	public void testCreateFromState() throws Exception {
+		stateControl.expectAndReturn(state
+				.getInt(ColorPersistenceFactory.FIELD_RED), color.getRed());
+		stateControl.expectAndReturn(state
+				.getInt(ColorPersistenceFactory.FIELD_GREEN), color.getGreen());
+		stateControl.expectAndReturn(state
+				.getInt(ColorPersistenceFactory.FIELD_BLUE), color.getBlue());
+		stateControl.expectAndReturn(state
+				.getInt(ColorPersistenceFactory.FIELD_ALPHA), color.getAlpha());
+		stateControl.replay();
+
+		Color newColor = (Color) factory.createFromState(state);
+		assertTrue(newColor.equals(color));
+
+		stateControl.verify();
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.ColorPersistenceFactory#saveToState(org.gvsig.tools.persistence.PersistentState, java.lang.Object)}
+	 * .
+	 */
+	public void testSaveToState() throws Exception {
+		state.set(ColorPersistenceFactory.FIELD_RED, color.getRed());
+		state.set(ColorPersistenceFactory.FIELD_GREEN, color.getGreen());
+		state.set(ColorPersistenceFactory.FIELD_BLUE, color.getBlue());
+		state.set(ColorPersistenceFactory.FIELD_ALPHA, color.getAlpha());
+		stateControl.replay();
+
+		factory.saveToState(state, color);
+
+		stateControl.verify();
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactoryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactoryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactoryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactoryTest.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.geom.Point2D;
+
+import org.easymock.MockControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+
+/**
+ * Unit tests for the class {@link Point2DPersistenceFactory}.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class Point2DPersistenceFactoryTest extends
+		AbstractLibraryAutoInitTestCase {
+
+	private Point2DPersistenceFactory factory;
+	private MockControl stateControl;
+	private PersistentState state;
+	private Point2D point;
+
+	protected void doSetUp() throws Exception {
+		PersistenceManager persistenceManager = ToolsLocator
+				.getPersistenceManager();
+		factory = (Point2DPersistenceFactory) persistenceManager.getFactories()
+				.get(Point2D.class);
+		stateControl = MockControl.createNiceControl(PersistentState.class);
+		state = (PersistentState) stateControl.getMock();
+		double x = Math.random() * 1000d;
+		double y = Math.random() * 1000d;
+		point = new Point2D.Double(x, y);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.Point2DPersistenceFactory#createFromState(PersistentState, Class)}
+	 * .
+	 */
+	public void testCreateFromState() throws Exception {
+		stateControl.expectAndReturn(state
+				.getDouble(Point2DPersistenceFactory.FIELD_X), point.getX());
+		stateControl.expectAndReturn(state
+				.getDouble(Point2DPersistenceFactory.FIELD_Y), point.getY());
+		stateControl.replay();
+
+		Point2D newPoint = (Point2D) factory.createFromState(state);
+		assertTrue(newPoint.equals(point));
+
+		stateControl.verify();
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.Point2DPersistenceFactory#saveToState(org.gvsig.tools.persistence.PersistentState, java.lang.Object)}
+	 * .
+	 */
+	public void testSaveToState() throws Exception {
+		state.set(Point2DPersistenceFactory.FIELD_X, point.getX());
+		state.set(Point2DPersistenceFactory.FIELD_Y, point.getY());
+		stateControl.replay();
+
+		factory.saveToState(state, point);
+
+		stateControl.verify();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactoryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactoryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactoryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactoryTest.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.Dimension;
+
+import org.easymock.MockControl;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+
+/**
+ * Unit tests for the class {@link DimensionPersistenceFactory}.
+ * 
+ * @author gvSIG team
+ */
+public class DimensionPersistenceFactoryTest extends
+		AbstractLibraryAutoInitTestCase {
+
+	private DimensionPersistenceFactory factory;
+	private MockControl stateControl;
+	private PersistentState state;
+	private Dimension dimension;
+
+	protected void doSetUp() throws Exception {
+		PersistenceManager persistenceManager = ToolsLocator
+				.getPersistenceManager();
+		factory = (DimensionPersistenceFactory) persistenceManager
+				.getFactories().get(Dimension.class);
+		stateControl = MockControl.createNiceControl(PersistentState.class);
+		state = (PersistentState) stateControl.getMock();
+		dimension = new Dimension(320, 200);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.DimensionPersistenceFactory#createFromState(org.gvsig.tools.persistence.PersistentState, java.lang.Class)}
+	 * .
+	 */
+	public void testCreateFromState() throws Exception {
+		stateControl.expectAndReturn(state
+				.getInt(DimensionPersistenceFactory.FIELD_WIDTH), dimension.width);			
+		stateControl.expectAndReturn(state
+				.getInt(DimensionPersistenceFactory.FIELD_HEIGHT), dimension.height);				
+		stateControl.replay();
+
+		Dimension newDimension = (Dimension) factory.createFromState(state);
+		assertTrue(newDimension.equals(dimension));
+
+		stateControl.verify();
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.DimensionPersistenceFactory#saveToState(org.gvsig.tools.persistence.PersistentState, java.lang.Object)}
+	 * .
+	 */
+	public void testSaveToState() throws Exception {
+		state.set(DimensionPersistenceFactory.FIELD_WIDTH, dimension.width);
+		state.set(DimensionPersistenceFactory.FIELD_HEIGHT, dimension.height);
+				
+		stateControl.replay();
+
+		factory.saveToState(state, dimension);
+
+		stateControl.verify();
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactoryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactoryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactoryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactoryTest.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.Font;
+
+import org.easymock.MockControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+
+/**
+ * Unit tests for the class {@link FontPersistenceFactory}.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class FontPersistenceFactoryTest extends AbstractLibraryAutoInitTestCase {
+
+	private FontPersistenceFactory factory;
+	private MockControl stateControl;
+	private PersistentState state;
+	private Font font;
+
+	protected void doSetUp() throws Exception {
+		PersistenceManager persistenceManager = ToolsLocator
+				.getPersistenceManager();
+		factory = (FontPersistenceFactory) persistenceManager.getFactories()
+				.get(Font.class);
+		stateControl = MockControl.createNiceControl(PersistentState.class);
+		state = (PersistentState) stateControl.getMock();
+		font = new Font("Arial", Font.BOLD, 18);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.FontPersistenceFactory#createFromState(org.gvsig.tools.persistence.PersistentState, java.lang.Class)}
+	 * .
+	 */
+	public void testCreateFromState() throws Exception {
+		stateControl.expectAndReturn(state
+				.getString(FontPersistenceFactory.FIELD_NAME), font.getName());
+		stateControl.expectAndReturn(state
+				.getInt(FontPersistenceFactory.FIELD_STYLE), font.getStyle());
+		stateControl.expectAndReturn(state
+				.getInt(FontPersistenceFactory.FIELD_SIZE), font.getSize());
+		stateControl.replay();
+
+		Font newFont = (Font) factory.createFromState(state);
+		assertTrue(newFont.equals(font));
+
+		stateControl.verify();
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.FontPersistenceFactory#saveToState(org.gvsig.tools.persistence.PersistentState, java.lang.Object)}
+	 * .
+	 */
+	public void testSaveToState() throws Exception {
+		state.set(FontPersistenceFactory.FIELD_NAME, font.getName());
+		state.set(FontPersistenceFactory.FIELD_STYLE, font.getStyle());
+		state.set(FontPersistenceFactory.FIELD_SIZE, font.getSize());
+		stateControl.replay();
+
+		factory.saveToState(state, font);
+
+		stateControl.verify();
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactoryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactoryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactoryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactoryTest.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.geom.Rectangle2D;
+
+import org.easymock.MockControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+
+/**
+ * Unit tests for the class {@link Rectangle2DPersistenceFactory}.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class Rectangle2DPersistenceFactoryTest extends
+		AbstractLibraryAutoInitTestCase {
+
+	private Rectangle2DPersistenceFactory factory;
+	private MockControl stateControl;
+	private PersistentState state;
+	private Rectangle2D rectangle;
+
+	protected void doSetUp() throws Exception {
+		PersistenceManager persistenceManager = ToolsLocator
+				.getPersistenceManager();
+		factory = (Rectangle2DPersistenceFactory) persistenceManager
+				.getFactories().get(Rectangle2D.class);
+		stateControl = MockControl.createNiceControl(PersistentState.class);
+		state = (PersistentState) stateControl.getMock();
+		double x = Math.random() * 1000d;
+		double y = Math.random() * 1000d;
+		rectangle = new Rectangle2D.Double(x, y, 320, 200);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.Rectangle2DPersistenceFactory#createFromState(PersistentState, Class)}
+	 * .
+	 */
+	public void testCreateFromState() throws Exception {
+		stateControl.expectAndReturn(state
+				.getDouble(Rectangle2DPersistenceFactory.FIELD_X), rectangle
+				.getX());
+		stateControl.expectAndReturn(state
+				.getDouble(Rectangle2DPersistenceFactory.FIELD_Y), rectangle
+				.getY());
+		stateControl.expectAndReturn(state
+				.getDouble(Rectangle2DPersistenceFactory.FIELD_WIDTH),
+				rectangle.getWidth());
+		stateControl.expectAndReturn(state
+				.getDouble(Rectangle2DPersistenceFactory.FIELD_HEIGHT),
+				rectangle.getHeight());
+		stateControl.replay();
+
+		Rectangle2D newRectangle = (Rectangle2D) factory.createFromState(state);
+
+		System.out.println("Orig x = " + rectangle.getX() + " - New x = "
+				+ newRectangle.getX());
+		assertEquals(rectangle.getX(), newRectangle.getX(), 0.0d);
+		System.out.println("Orig y = " + rectangle.getY() + " - New y = "
+				+ newRectangle.getY());
+		assertEquals(rectangle.getY(), newRectangle.getY(), 0.0d);
+		System.out.println("Orig width = " + rectangle.getWidth()
+				+ " - New width = " + newRectangle.getWidth());
+		assertEquals(rectangle.getWidth(), newRectangle.getWidth(), 0.0d);
+		System.out.println("Orig height = " + rectangle.getHeight()
+				+ " - New height = " + newRectangle.getHeight());
+		assertEquals(rectangle.getHeight(), newRectangle.getHeight(), 0.0d);
+
+		assertTrue(newRectangle.equals(rectangle));
+
+		stateControl.verify();
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.tools.persistence.Rectangle2DPersistenceFactory#saveToState(org.gvsig.tools.persistence.PersistentState, java.lang.Object)}
+	 * .
+	 */
+	public void testSaveToState() throws Exception {
+		state.set(Rectangle2DPersistenceFactory.FIELD_X, rectangle.getX());
+		state.set(Rectangle2DPersistenceFactory.FIELD_Y, rectangle.getY());
+		state.set(Rectangle2DPersistenceFactory.FIELD_WIDTH, rectangle
+				.getWidth());
+		state.set(Rectangle2DPersistenceFactory.FIELD_HEIGHT, rectangle
+				.getHeight());
+		stateControl.replay();
+
+		factory.saveToState(state, rectangle);
+
+		stateControl.verify();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactoryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManagerTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManagerTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManagerTest.java	(revision 42196)
@@ -0,0 +1,342 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.impl;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextDrawer;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.MapContextRuntimeException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.IncompatibleLegendReadException;
+import org.gvsig.fmap.mapcontext.exceptions.ReadLegendException;
+import org.gvsig.fmap.mapcontext.exceptions.WriteLegendException;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialIntervalLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.LegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendReader;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendWriter;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class DefaultMapContextManagerTest extends
+AbstractLibraryAutoInitTestCase {
+
+    private DefaultMapContextManager manager;
+
+    protected void doSetUp() throws Exception {
+        manager = new DefaultMapContextManager();
+
+        manager.registerLegend("DummyLegend", DummyVectorLegend.class);
+        manager.setDefaultVectorLegend("DummyLegend");
+        manager.registerLegendReader("Dummy", DummyLegendReader.class);
+        // manager.registerLegendWriter("DummyLegend".getClass(), "Dummy", DummyLegendWriter.class);
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    /**
+     * Test method for
+     * {@link org.gvsig.fmap.mapcontext.impl.DefaultMapContextManager#createDefaultMapContextDrawerInstance()}
+     * .
+     */
+    public void testGetDefaultMapContextDrawerInstance() throws Exception {
+
+        manager.setDefaultMapContextDrawer(DummyMapContextDrawer.class);
+
+        MapContextDrawer drawer = manager
+        .createDefaultMapContextDrawerInstance();
+
+        assertNotNull("The created MapContextDrawer instance can't be null",
+            drawer);
+        assertTrue(
+            "The created MapContextDrawer is not instance of the registered class"
+            + DummyMapContextDrawer.class,
+            drawer instanceof DummyMapContextDrawer);
+    }
+
+    /**
+     * Test method for
+     * {@link org.gvsig.fmap.mapcontext.impl.DefaultMapContextManager#setDefaultMapContextDrawer(java.lang.Class)}
+     * .
+     */
+    public void testSetDefaultMapContextDrawer() throws Exception {
+
+        // First, try to register an invalid class
+        try {
+            manager.setDefaultMapContextDrawer(Object.class);
+            fail("Error, a class that does not implement the MapContextDrawer "
+                + "interface has been accepted");
+        } catch (MapContextRuntimeException e) {
+            // OK
+        }
+
+        // Next, try to register a valid class
+        manager.setDefaultMapContextDrawer(DummyMapContextDrawer.class);
+    }
+
+    public void testCreateGraphicsLayer() throws Exception {
+        assertNotNull(manager.createGraphicsLayer(CRSFactory.getCRS("EPSG:23030")));
+    }
+
+    public void testCreateDefaultVectorLegend() throws Exception {
+
+        IVectorLegend legend = manager.createDefaultVectorLegend(1);
+        assertNotNull(legend);
+        assertTrue(legend instanceof DummyVectorLegend);
+    }
+
+    public void testRegisterCreateLegend() throws Exception {
+
+        manager.registerLegend("DummyLegend", DummyVectorLegend.class);
+
+        ILegend legend = manager.createLegend("DummyLegend");
+        assertNotNull(legend);
+        assertTrue(legend instanceof DummyVectorLegend);
+
+        assertNull(manager.createLegend("NONE"));
+    }
+
+    public void testRegisterCreateLegendReader() throws Exception {
+
+        manager.registerLegendReader("Dummy", DummyLegendReader.class);
+
+        ILegendReader legendReader = manager.createLegendReader("Dummy");
+        assertNotNull(legendReader);
+        assertTrue(legendReader instanceof DummyLegendReader);
+
+        assertNull(manager.createLegendReader("NONE"));
+    }
+
+    public void testRegisterCreateLegendWriter() throws Exception {
+
+        manager.registerLegend("DummyLegend", DummyVectorLegend.class);
+
+        manager.registerLegendWriter(ISingleSymbolLegend.class, "Dummy",
+            DummyLegendWriter.class);
+
+        // Test the registered writer is created
+        ILegendWriter legendWriter = manager.createLegendWriter(
+            ISingleSymbolLegend.class, "Dummy");
+        assertNotNull(legendWriter);
+        assertTrue(legendWriter instanceof DummyLegendWriter);
+
+        // Test non registered cases
+        assertNull(manager.createLegendWriter(IVectorialIntervalLegend.class, "Dummy"));
+        assertNull(manager.createLegendWriter(IVectorialIntervalLegend.class, "NONE"));
+        assertNull(manager.createLegendWriter(IVectorialIntervalLegend.class, "NONE"));
+    }
+
+    public static class DummyMapContextDrawer implements MapContextDrawer {
+
+        public void dispose() {
+        }
+
+        public void draw(FLayers root, BufferedImage image, Graphics2D g,
+            Cancellable cancel, double scale) throws ReadException {
+        }
+
+        public void print(FLayers root, Graphics2D g, Cancellable cancel,
+            double scale, PrintAttributes properties) throws ReadException {
+        }
+
+        public void setMapContext(MapContext mapContext) {
+        }
+
+        public void setViewPort(ViewPort viewPort) {
+        }
+
+    }
+
+    public static class DummyLegendReader implements ILegendReader {
+
+        public ILegend read(File inFile, int geometryType)
+            throws ReadLegendException, IncompatibleLegendReadException,
+            IOException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+    }
+
+    public static class DummyLegendWriter implements ILegendWriter {
+
+        public void write(ILegend legend, File outFile, String format)
+            throws WriteLegendException, IOException {
+            // TODO Auto-generated method stub
+            
+        }
+
+    }
+
+    public static class DummyVectorLegend implements IVectorLegend {
+
+        public void draw(BufferedImage image, Graphics2D graphics2d,
+            ViewPort viewPort, Cancellable cancel, double scale,
+            Map queryParameters, ICoordTrans coordTrans,
+            FeatureStore featureStore, FeatureQuery featureQuery) throws LegendException {
+            // Empty method
+        }
+
+        public void draw(BufferedImage image, Graphics2D graphics2d,
+            ViewPort viewPort, Cancellable cancel, double scale,
+            Map queryParameters, ICoordTrans coordTrans,
+            FeatureStore featureStore) throws LegendException {
+            // Empty method
+        }
+
+        public int getShapeType() {
+            // Empty method
+            return 0;
+        }
+
+        public ISymbol getSymbolByFeature(Feature feat)
+        throws MapContextException {
+            // Empty method
+            return null;
+        }
+
+        public boolean isSuitableForShapeType(int shapeType) {
+            // Empty method
+            return false;
+        }
+
+        public boolean isUseDefaultSymbol() {
+            // Empty method
+            return false;
+        }
+
+        public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+            double scale, Map queryParameters, ICoordTrans coordTrans,
+            FeatureStore featureStore, PrintAttributes properties)
+        throws LegendException {
+            // Empty method
+        }
+
+        public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+            double scale, Map queryParameters, ICoordTrans coordTrans,
+            FeatureStore featureStore, FeatureQuery featureQuery, PrintAttributes properties)
+        throws LegendException {
+            // Empty method
+        }
+
+        public void setDefaultSymbol(ISymbol s) {
+            // Empty method
+        }
+
+        public void setShapeType(int shapeType) {
+            // Empty method
+        }
+
+        public void useDefaultSymbol(boolean b) {
+            // Empty method
+        }
+
+        public void addLegendListener(LegendContentsChangedListener listener) {
+            // Empty method
+        }
+
+        public ILegend cloneLegend() {
+            // Empty method
+            return null;
+        }
+
+        public Object clone() throws CloneNotSupportedException {
+            // TODO Auto-generated method stub
+            return super.clone();
+        }
+
+        public void fireDefaultSymbolChangedEvent(SymbolLegendEvent event) {
+            // Empty method
+        }
+
+        public ISymbol getDefaultSymbol() {
+            // Empty method
+            return null;
+        }
+
+        public LegendContentsChangedListener[] getListeners() {
+            // Empty method
+            return null;
+        }
+
+        public void removeLegendListener(LegendContentsChangedListener listener) {
+            // Empty method
+        }
+
+        public void loadFromState(PersistentState state)
+        throws PersistenceException {
+            // Empty method
+        }
+
+        public void saveToState(PersistentState state)
+        throws PersistenceException {
+            // Empty method
+        }
+
+        public void addDrawingObserver(Observer observer) {
+            // Empty method
+        }
+
+        public void deleteDrawingObserver(Observer observer) {
+            // Empty method
+        }
+
+        public void deleteDrawingObservers() {
+            // Empty method
+        }
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManagerTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyFileFeatureStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyFileFeatureStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyFileFeatureStore.java	(revision 42196)
@@ -0,0 +1,1391 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.persistence;
+
+import java.text.DateFormat;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.FeatureCache;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureLocks;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureRules;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynMethod;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldIsNotAContainerException;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.visitor.Visitor;
+
+public class DummyFileFeatureStore implements FeatureStore {
+
+	public static class DummyFeatureAttributeDescriptor implements
+			FeatureAttributeDescriptor {
+
+		public boolean allowNull() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public Object getAdditionalInfo(String infoName) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public FeatureAttributeDescriptor getCopy() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public DataType getDataType() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public String getDataTypeName() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public DateFormat getDateFormat() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public Object getDefaultValue() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public Evaluator getEvaluator() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public int getGeometrySubType() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public int getGeometryType() {
+			return Geometry.TYPES.POINT;
+		}
+
+		public int getIndex() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public int getMaximumOccurrences() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public int getMinimumOccurrences() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public String getName() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public Class getObjectClass() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public int getPrecision() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public IProjection getSRS() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public int getSize() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public int getType() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public boolean isAutomatic() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public boolean isPrimaryKey() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public boolean isReadOnly() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+        public String getSubtype() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public int getTheTypeOfAvailableValues() {
+            // TODO Auto-generated method stub
+            return 0;
+        }
+
+        public boolean isContainer() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public boolean isHidden() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public boolean isMandatory() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public boolean isPersistent() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public DynField setAvailableValues(DynObjectValueItem[] values) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setAvailableValues(List values) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setClassOfItems(Class theClass)
+            throws DynFieldIsNotAContainerException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setClassOfValue(Class theClass)
+            throws DynFieldIsNotAContainerException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setDefaultDynValue(Object defaultValue) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setDefaultFieldValue(Object defaultValue) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setDescription(String description) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setElementsType(int type)
+            throws DynFieldIsNotAContainerException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setElementsType(DynStruct type)
+            throws DynFieldIsNotAContainerException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setGroup(String groupName) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setHidden(boolean hidden) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setMandatory(boolean mandatory) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setMaxValue(Object maxValue) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setMinValue(Object minValue) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setOrder(int order) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setPersistent(boolean persistent) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setReadOnly(boolean isReadOnly) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setSubtype(String subtype) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setTheTypeOfAvailableValues(int type) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setType(int type) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField setType(DataType type) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public void validate(Object value) throws DynFieldValidateException {
+            // TODO Auto-generated method stub
+
+        }
+
+        public Object coerce(Object value) throws CoercionException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynObjectValueItem[] getAvailableValues() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Class getClassOfItems() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Class getClassOfValue() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getDescription() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField getElementsType() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getGroup() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Object getMaxValue() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Object getMinValue() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public int getOder() {
+            // TODO Auto-generated method stub
+            return 0;
+        }
+
+        public GeometryType getGeomType() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public boolean isTime() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public FeatureAttributeGetter getFeatureAttributeGetter() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public void setFeatureAttributeGetter(
+            FeatureAttributeGetter featureAttributeGetter) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public FeatureAttributeEmulator getFeatureAttributeEmulator() {
+            return null;
+        }
+
+        public boolean isIndexed() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean allowIndexDuplicateds() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        public boolean isIndexAscending() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+	}
+
+	public static class DummyFeatureType implements FeatureType {
+
+		public boolean allowAutomaticValues() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public Object get(String name) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public Object get(int index) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public FeatureAttributeDescriptor getAttributeDescriptor(String name) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public FeatureAttributeDescriptor getAttributeDescriptor(int index) {
+			return new DummyFeatureAttributeDescriptor();
+		}
+
+		public FeatureAttributeDescriptor[] getAttributeDescriptors() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public FeatureType getCopy() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public FeatureAttributeDescriptor getDefaultGeometryAttribute() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public int getDefaultGeometryAttributeIndex() {
+			return 0;
+		}
+
+		public String getDefaultGeometryAttributeName() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public IProjection getDefaultSRS() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public EditableFeatureType getEditable() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public String getId() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public int getIndex(String name) {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public FeatureAttributeDescriptor[] getPrimaryKey() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public FeatureRules getRules() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public List getSRSs() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public boolean hasEvaluators() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public boolean hasOID() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		public Iterator iterator() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public int size() {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+        public DynClass[] getSuperDynClasses() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public void removeDynMethod(String name) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public DynField addDynField(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldArray(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldBoolean(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldChoice(String name, int type,
+            Object defaultValue, DynObjectValueItem[] values,
+            boolean mandatory, boolean persistent) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldChoice(String name, int type,
+            Object defaultValue, DynObjectValueItem[] values) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldDate(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldDouble(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldFile(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldFloat(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldFolder(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldInt(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldList(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldLong(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldMap(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldObject(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldRange(String name, int type,
+            Object defaultValue, Object min, Object max, boolean mandatory,
+            boolean persistent) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldRange(String name, int type,
+            Object defaultValue, Object min, Object max) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldSet(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldSingle(String name, int type,
+            Object defaultValue, boolean mandatory, boolean persistent) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldSingle(String name, int type,
+            Object defaultValue) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldString(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldURI(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField addDynFieldURL(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public void extend(DynStruct struct) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void extend(String namespace, String structName) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void extend(String structName) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public DynField getDeclaredDynField(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField[] getDeclaredDynFields() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getDescription() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField getDynField(String name) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynField[] getDynFields() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getFullName() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getName() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getNamespace() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynStruct[] getSuperDynStructs() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public boolean isInstance(DynObject dynObject) {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        public DynObject newInstance() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public void removeDynField(String name) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void setDescription(String description) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void setNamespace(String namespace) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void validate(DynObject object)
+            throws DynObjectValidateException {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void addDynMethod(DynMethod dynMethod) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public DynMethod getDeclaredDynMethod(String name)
+            throws DynMethodException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynMethod[] getDeclaredDynMethods() throws DynMethodException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynMethod getDynMethod(String name) throws DynMethodException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynMethod getDynMethod(int code) throws DynMethodException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public DynMethod[] getDynMethods() throws DynMethodException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public boolean isExtendable(DynStruct dynStruct) {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+		public void extend(DynStruct[] structs) {
+			// TODO Auto-generated method stub
+
+		}
+
+		public void remove(DynStruct superDynStruct) {
+			// TODO Auto-generated method stub
+
+		}
+
+		public void removeAll(DynStruct[] superDynStruct) {
+			// TODO Auto-generated method stub
+
+		}
+
+        public FeatureAttributeDescriptor getDefaultTimeAttribute() {
+            // TODO Auto-generated method stub
+            return null;
+	}
+
+	}
+
+	private String name = "[empty]";
+
+	public DummyFileFeatureStore() {
+
+	}
+
+	public DummyFileFeatureStore(String id) {
+		name = "[FILE FEATURE STORE - " + id + "]";
+	}
+
+	public boolean allowWrite() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void beginEditingGroup(String description)
+			throws NeedEditingModeException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean canWriteGeometry(int gvSIGgeometryType) throws DataException {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void cancelEditing() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureQuery createFeatureQuery() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureSelection createFeatureSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureIndex createIndex(FeatureType featureType,
+			String attributeName, String indexName) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureIndex createIndex(FeatureType featureType,
+			String attributeName, String indexName, Observer observer)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature(FeatureType type,
+			Feature defaultValues) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature(FeatureType type,
+			boolean defaultValues) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature(boolean defaultValues)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void delete(Feature feature) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void edit() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void edit(int mode) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void endEditingGroup() throws NeedEditingModeException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void finishEditing() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureType getDefaultFeatureType() throws DataException {
+		return new DummyFeatureType();
+	}
+
+	public Envelope getEnvelope() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Feature getFeatureByReference(FeatureReference reference)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Feature getFeatureByReference(FeatureReference reference,
+			FeatureType featureType) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public long getFeatureCount() throws DataException {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public FeatureSelection getFeatureSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureSet getFeatureSet() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureSet getFeatureSet(FeatureQuery featureQuery)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void getFeatureSet(FeatureQuery featureQuery, Observer observer)
+			throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void getFeatureSet(Observer observer) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureType getFeatureType(String featureTypeId)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List getFeatureTypes() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureIndexes getIndexes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureLocks getLocks() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataStoreParameters getParameters() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IProjection getSRSDefaultGeometry() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureStoreTransforms getTransforms() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void insert(EditableFeature feature) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean isAppendModeSupported() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isAppending() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isEditing() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isLocksSupported() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void setSelection(FeatureSet selection) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void update(EditableFeatureType featureType) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void update(EditableFeature feature) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void validateFeatures(int mode) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public DataQuery createQuery() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataSet createSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void dispose() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Iterator getChildren() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataSet getDataSet() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void getDataSet(Observer observer) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void getDataSet(DataQuery dataQuery, Observer observer)
+			throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public DataServerExplorer getExplorer() throws DataException,
+			ValidateDataParametersException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public DataSet getSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void refresh() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setSelection(DataSet selection) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void beginComplexNotification() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void disableNotifications() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void enableNotifications() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void endComplexNotification() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void addObserver(Observer o) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void deleteObserver(Observer o) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void deleteObservers() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		name = state.getString("name");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("name", name);
+	}
+
+	public Set getMetadataChildren() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object getMetadataID() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getMetadataName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void delegate(DynObject dynObject) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public DynClass getDynClass() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean hasDynValue(String name) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void implement(DynClass dynClass) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Object invokeDynMethod(String name, DynObject context)
+			throws DynMethodException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object invokeDynMethod(int code, DynObject context)
+			throws DynMethodException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void setDynValue(String name, Object value)
+			throws DynFieldNotFoundException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean canRedo() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean canUndo() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public List getRedoInfos() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List getUndoInfos() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void redo() throws RedoException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void redo(int num) throws RedoException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void undo() throws UndoException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void undo(int num) throws UndoException {
+		// TODO Auto-generated method stub
+
+	}
+
+
+
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				DummyFileFeatureStore.class,
+				"DummyFileFeatureStore",
+				"DummyFileFeatureStore Persistence definition",
+				null,
+				null
+		);
+		definition.addDynFieldString("name")
+			.setMandatory(true);
+	}
+
+	public void accept(Visitor visitor) throws BaseException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void accept(Visitor visitor, DataQuery dataQuery)
+			throws BaseException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void createCache(String name, DynObject parameters)
+			throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureCache getCache() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void clear() {
+		// Nothing to do
+	}
+
+	public void export(DataServerExplorer explorer, String provider,
+			NewFeatureStoreParameters params) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public String getProviderName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getFullName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public boolean isKnownEnvelope() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean hasRetrievedFeaturesLimit() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public int getRetrievedFeaturesLimit() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public Interval getInterval() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection getTimes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection getTimes(Interval interval) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName)
+        throws DataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName,
+        Observer observer) throws DataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        // TODO Auto-generated method stub
+        return super.clone();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.feature.FeatureStore#commitChanges()
+     */
+    public void commitChanges() throws DataException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.feature.FeatureStore#canCommitChanges()
+     */
+    public boolean canCommitChanges() throws DataException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public Feature getFeature(DynObject dynobject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyFileFeatureStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/MapContextPersistenceTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/MapContextPersistenceTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/MapContextPersistenceTest.java	(revision 42196)
@@ -0,0 +1,380 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.persistence;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.symbol.DummyVectorLegend;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MapContextPersistenceTest extends AbstractLibraryAutoInitTestCase {
+
+	final static private Logger logger =
+			LoggerFactory.getLogger(MapContextPersistenceTest.class);
+
+	protected void doSetUp() throws Exception {
+		DummyVectorLegend.registerPersistent();
+		DummyDBFeatureStore.registerPersistent();
+		DummyFileFeatureStore.registerPersistent();
+
+		MapContextLocator.getMapContextManager().registerLegend("DummyLegend",
+				DummyVectorLegend.class);
+		MapContextLocator.getMapContextManager().setDefaultVectorLegend(
+				"DummyLegend");
+	}
+	
+	private File getTempFile() throws Exception {
+
+		File tempFile = File.createTempFile("persisted_mapcontext", ".xml");
+		if (tempFile.exists())
+			tempFile.delete();
+		tempFile.createNewFile();
+		
+		System.out.println("TEMP FILE: " + tempFile.getAbsolutePath());
+		return tempFile;
+	}
+	
+	public void testMapContext() throws Exception {
+		ViewPort vp = getViewPort();
+		logger.debug("Creating mapcontext...");
+		MapContext mc = new MapContext(vp);
+		addDummyLayers(mc);
+		doTestPersist(mc);
+	}
+
+	public void noTestFLyrs() throws Exception {
+		
+		int lyr_count = 3;
+		// testPersist(mc);
+		FLyrVect[] lyr = new FLyrVect[lyr_count];
+		FeatureStore[] fs = new FeatureStore[lyr_count];
+		FLayers lyrs = new FLayers();
+		
+		for (int i=0; i<lyr_count; i++) {
+			fs[i] = new DummyFileFeatureStore("" + System.currentTimeMillis());
+			lyr[i] = createLayer(fs[i]);
+			lyr[i].setName("Layer " + (i+System.currentTimeMillis()));
+			lyr[i].setIsLabeled(false);
+			try { lyr[i].setLegend(new DummyVectorLegend(TYPES.SOLID)); } catch (LegendLayerException e) {
+				assertTrue("Error while creating legend: " + e.getMessage(), false);
+			}
+			lyrs.addLayer(lyr[i]);
+			lyr[i].dispose();
+		}
+		
+		for (int i=0; i<lyr_count; i++) {
+			fs[i] = new DummyDBFeatureStore("" + System.currentTimeMillis());
+			lyr[i] = createLayer(fs[i]);
+			lyr[i].setName("Layer " + (10000 + i + System.currentTimeMillis()));
+			lyr[i].setIsLabeled(false);
+			try { lyr[i].setLegend(new DummyVectorLegend(TYPES.SOLID)); } catch (LegendLayerException e) {
+				assertTrue("Error while creating legend: " + e.getMessage(), false);
+			}
+			lyrs.addLayer(lyr[i]);
+			lyr[i].dispose();
+		}
+		
+		doTestPersist(lyrs);
+	}
+	
+	
+	
+	private ViewPort getViewPort() throws LocatorException, CreateEnvelopeException {
+		
+		ViewPort vp = new ViewPort(CRSFactory.getCRS("EPSG:4326"));
+		vp.setImageSize(new Dimension(640, 480));
+		Envelope env = createEnvelope2D(0, 0, 1000000, 1000000);
+		vp.setEnvelope(env);
+		env = createEnvelope2D(200000, 200000, 500000, 500000);
+		vp.setEnvelope(env);
+		env = createEnvelope2D(300000, 300000, 300000, 300000);
+		vp.setEnvelope(env);
+		env = createEnvelope2D(400000, 400000, 200000, 200000);
+		vp.setEnvelope(env);
+		env = createEnvelope2D(440000, 440000, 100000, 100000);
+		vp.setEnvelope(env);
+		env = createEnvelope2D(480000, 480000, 30000, 30000);
+		vp.setEnvelope(env);
+		vp.setBackColor(Color.YELLOW);
+		vp.setClipRect(new Rectangle2D.Double(0, 0, 10, 10));
+		return vp;
+	}
+	
+	private Envelope createEnvelope2D(double minX,double minY,double maxX, double maxY) throws LocatorException, CreateEnvelopeException {
+		return GeometryLocator.getGeometryManager().createEnvelope(minX, minY, maxX, maxY, Geometry.SUBTYPES.GEOM2D);
+	}
+
+	private void addDummyLayers(MapContext mcon) throws Exception {
+		
+		FLayers resp = new FLayers();
+		resp.setMapContext(mcon);
+		resp.setName("root layer");
+		
+		FLayers aux = new FLayers();
+		aux.setMapContext(mcon);
+		aux.setName("Group");
+		
+		FLyrVect lyr = null;
+		IVectorLegend lgn = null;
+		FeatureStore fs = null;
+		
+		logger.debug("Adding dummy layers...");
+			
+		fs = new DummyFileFeatureStore("1");
+		lyr = createLayer(fs);
+		lyr.setName("Layer 1");
+		try { lyr.setLegend(new DummyVectorLegend(TYPES.SOLID)); } catch (LegendLayerException e) { }
+		
+		aux.addLayer(lyr);
+		lyr.dispose();
+		
+		fs = new DummyDBFeatureStore("A");
+		lyr = createLayer(fs);
+		lyr.setName("Layer A");
+		try { lyr.setLegend(new DummyVectorLegend(TYPES.SOLID)); } catch (LegendLayerException e) { }
+
+		aux.addLayer(lyr);
+		lyr.dispose();
+		
+		fs = new DummyFileFeatureStore("2");
+		lyr = createLayer(fs);
+		lyr.setName("Layer 2");
+		try { lyr.setLegend(new DummyVectorLegend(TYPES.SOLID)); } catch (LegendLayerException e) { }
+
+		aux.addLayer(lyr);
+		lyr.dispose();
+		
+		fs = new DummyDBFeatureStore("B");
+		lyr = createLayer(fs);
+		lyr.setName("Layer 1");
+		try { lyr.setLegend(new DummyVectorLegend(TYPES.SOLID)); } catch (LegendLayerException e) { }
+		
+		resp.addLayer(lyr);
+		resp.addLayer(aux);
+		lyr.dispose();
+		aux.dispose();
+		
+		mcon.getLayers().addLayer(resp);
+		resp.dispose();
+	}
+
+	private FLyrVect createLayer(FeatureStore fs) throws Exception {
+		
+		FLyrVect resp = new FLyrVect();
+		resp.setDataStore(fs);
+		resp.wakeUp();
+		resp.load();
+		return resp;
+	}
+
+	private void doTestPersist(Persistent p) throws Exception {
+		
+		System.out.println("Starting persistence test for class: " + p.getClass().getName());
+
+		File perfile = getTempFile();
+		FileOutputStream fos = new FileOutputStream(perfile);
+		System.out.println("Getting state for class: " + p.getClass().getName());
+		PersistentState pst = ToolsLocator.getPersistenceManager().getState(p);
+		System.out.println("Saving state...");
+
+		System.out.println("Saving state...");
+		ToolsLocator.getPersistenceManager().saveState(pst, fos);
+		System.out.println("Saving state... done.");
+
+		fos.close();
+
+		// ==============================================
+		// ==============================================
+		System.out.println("Is now persisted: " + p.getClass().getName());
+		// ==============================================
+
+		// if (true) return;
+
+		System.out.println("Opening persistence file...");
+		FileInputStream fis = new FileInputStream(perfile);
+
+		System.out.println("Loading state from file...");
+		pst = ToolsLocator.getPersistenceManager().loadState(fis);
+
+		System.out.println("Instantiating " + p.getClass().getName()
+				+ " from state, pst = " + pst);
+		Object p2 = ToolsLocator.getPersistenceManager().create(pst);
+
+		System.out.println("Comparing original and current...");
+		comparePersistent(p, p2);
+
+		System.out.println("Successful mapcontext persistence test!");
+		
+	}
+
+	
+	// FeatureStore, ILegend, ViewPort
+	private void comparePersistent(Persistent p, Object p2) {
+		
+		if (p2.getClass().getName().compareTo(p.getClass().getName()) == 0) {
+			
+			if (p instanceof MapContext) {
+				compareMapContexts((MapContext) p, (MapContext) p2);
+			} else {
+				if (p instanceof FLayer) {
+					compareLayers((FLayer) p, (FLayer) p2);
+				} else {
+					if (p instanceof FeatureStore) {
+						compareStore((FeatureStore) p, (FeatureStore) p2);
+					} else {
+						if (p instanceof ILegend) {
+							compareLegend((ILegend) p, (ILegend) p2);
+						} else {
+							if (p instanceof ViewPort) {
+								compareViewPorts((ViewPort) p, (ViewPort) p2);
+							} else {
+								fail("Did not compare: " + p.getClass().getName());
+							}
+						}
+					}
+				}
+			}
+		} else {
+			fail("Comparing different classes (?)");
+		}
+		
+	}
+
+	private void compareMapContexts(MapContext m1, MapContext m2) {
+		
+		logger.debug("Getting viewports to compare...");
+		ViewPort vp1 = m1.getViewPort();
+		ViewPort vp2 = m2.getViewPort();
+		
+		compareViewPorts(vp1, vp2);
+
+		logger.debug("Getting root flayers to compare...");
+		FLayers lyr1 = m1.getLayers();
+		FLayers lyr2 = m2.getLayers();
+		compareLayers(lyr1, lyr2);
+	}
+
+	private void compareLayers(FLayer l1, FLayer l2) {
+		
+		logger.debug("Comparing layers...");
+
+		assertTrue("Layers of diff type!", l1.getClass().getName().compareTo(l2.getClass().getName()) == 0);
+		if (l1 instanceof FLayers) {
+			
+			logger.debug("(type FLayers)...");
+			FLayers ls1 = (FLayers) l1;
+			FLayers ls2 = (FLayers) l2;
+			assertEquals(ls1.getLayersCount(), ls2.getLayersCount());
+			int sz = ls2.getLayersCount();
+			for (int i=0; i<sz; i++) {
+				compareLayers(ls1.getLayer(i), ls2.getLayer(i));
+			}
+			
+		} else {
+			if (l1 instanceof FLyrVect) {
+				
+				logger.debug("(type FLyrVect)...");
+				FLyrVect ls1 = (FLyrVect) l1;
+				FLyrVect ls2 = (FLyrVect) l2;
+				compareVectLayers(ls1, ls2);
+				
+			} else {
+				
+			}
+		}
+
+	}
+
+	private void compareVectLayers(FLyrVect l1, FLyrVect l2) {
+		compareLegend(l1.getLegend(), l2.getLegend());
+		compareStore(l1.getFeatureStore(), l2.getFeatureStore());
+	}
+
+	private void compareStore(FeatureStore fs1,
+			FeatureStore fs2) {
+		
+		logger.debug("Comparing stores...");
+		assertTrue("Diff stores!", fs1.getName().compareTo(fs2.getName()) == 0);
+	}
+
+	private void compareLegend(ILegend l1, ILegend l2) {
+
+		logger.debug("Comparing legends...");
+		IVectorLegend vl1 = (IVectorLegend) l1;
+		IVectorLegend vl2 = (IVectorLegend) l2;
+		assertTrue("Diff legends!", vl1.getShapeType() == vl2.getShapeType());
+		
+	}
+
+	private void compareViewPorts(ViewPort vp1, ViewPort vp2) {
+
+
+		logger.debug("Comparing viewports...");
+		
+		assertEquals(
+				vp1.getAdjustedEnvelope().getMinimum(0),
+				vp2.getAdjustedEnvelope().getMinimum(0),
+				0.00000000000001);
+		assertEquals(
+				vp1.getAdjustedEnvelope().getMinimum(1),
+				vp2.getAdjustedEnvelope().getMinimum(1),
+				0.00000000000001);
+		assertEquals(
+				vp1.getAdjustedEnvelope().getMaximum(0),
+				vp2.getAdjustedEnvelope().getMaximum(0),
+				0.00000000000001);
+		assertEquals(
+				vp1.getAdjustedEnvelope().getMaximum(1),
+				vp2.getAdjustedEnvelope().getMaximum(1),
+				0.00000000000001);
+	}
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/MapContextPersistenceTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyDBFeatureStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyDBFeatureStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyDBFeatureStore.java	(revision 42196)
@@ -0,0 +1,645 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.persistence;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureCache;
+import org.gvsig.fmap.dal.feature.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureLocks;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.visitor.Visitor;
+
+public class DummyDBFeatureStore implements FeatureStore {
+
+	private String name = "[empty]";
+
+	public DummyDBFeatureStore() {
+
+	}
+
+	public DummyDBFeatureStore(String id) {
+		name = "[DATABASE FEATURE STORE - " + id + "]";
+	}
+
+	public boolean allowWrite() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void beginEditingGroup(String description)
+			throws NeedEditingModeException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean canWriteGeometry(int gvSIGgeometryType) throws DataException {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void cancelEditing() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureQuery createFeatureQuery() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureSelection createFeatureSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureIndex createIndex(FeatureType featureType,
+			String attributeName, String indexName) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureIndex createIndex(FeatureType featureType,
+			String attributeName, String indexName, Observer observer)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature(FeatureType type,
+			Feature defaultValues) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature(FeatureType type,
+			boolean defaultValues) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public EditableFeature createNewFeature(boolean defaultValues)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void delete(Feature feature) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void edit() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void edit(int mode) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void endEditingGroup() throws NeedEditingModeException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void export(DataServerExplorer explorer,
+			String providerName,
+			NewFeatureStoreParameters params) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void finishEditing() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureType getDefaultFeatureType() throws DataException {
+		return new DummyFileFeatureStore.DummyFeatureType();
+	}
+
+	public Envelope getEnvelope() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Feature getFeatureByReference(FeatureReference reference)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Feature getFeatureByReference(FeatureReference reference,
+			FeatureType featureType) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public long getFeatureCount() throws DataException {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public FeatureSelection getFeatureSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureSet getFeatureSet() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureSet getFeatureSet(FeatureQuery featureQuery)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void getFeatureSet(FeatureQuery featureQuery, Observer observer)
+			throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void getFeatureSet(Observer observer) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureType getFeatureType(String featureTypeId)
+			throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List getFeatureTypes() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureIndexes getIndexes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureLocks getLocks() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataStoreParameters getParameters() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IProjection getSRSDefaultGeometry() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public FeatureStoreTransforms getTransforms() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void insert(EditableFeature feature) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean isAppendModeSupported() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isAppending() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isEditing() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isLocksSupported() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void setSelection(FeatureSet selection) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void update(EditableFeatureType featureType) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void update(EditableFeature feature) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void validateFeatures(int mode) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public DataQuery createQuery() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataSet createSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void dispose() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Iterator getChildren() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataSet getDataSet() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void getDataSet(Observer observer) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void getDataSet(DataQuery dataQuery, Observer observer)
+			throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public DataServerExplorer getExplorer() throws DataException,
+			ValidateDataParametersException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getName() {
+		// TODO Auto-generated method stub
+		return name;
+	}
+
+	public DataSet getSelection() throws DataException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void refresh() throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setSelection(DataSet selection) throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void beginComplexNotification() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void disableNotifications() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void enableNotifications() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void endComplexNotification() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void addObserver(Observer o) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void deleteObserver(Observer o) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void deleteObservers() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		name = state.getString("name");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("name", name);
+	}
+
+	public Set getMetadataChildren() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object getMetadataID() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getMetadataName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void delegate(DynObject dynObject) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public DynClass getDynClass() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean hasDynValue(String name) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void implement(DynClass dynClass) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Object invokeDynMethod(String name, DynObject context)
+			throws DynMethodException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object invokeDynMethod(int code, DynObject context)
+			throws DynMethodException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void setDynValue(String name, Object value)
+			throws DynFieldNotFoundException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean canRedo() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean canUndo() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public List getRedoInfos() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List getUndoInfos() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void redo() throws RedoException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void redo(int num) throws RedoException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void undo() throws UndoException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void undo(int num) throws UndoException {
+		// TODO Auto-generated method stub
+
+	}
+
+
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				DummyDBFeatureStore.class,
+				"DummyDBFeatureStore",
+				"DummyDBFeatureStore Persistence definition",
+				null,
+				null
+		);
+		definition.addDynFieldString("name");
+	}
+
+	public void accept(Visitor visitor) throws BaseException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void accept(Visitor visitor, DataQuery dataQuery)
+			throws BaseException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void createCache(String name, DynObject parameters)
+			throws DataException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public FeatureCache getCache() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void clear() {
+		// Nothing to do
+	}
+
+	public String getProviderName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getFullName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public boolean isKnownEnvelope() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean hasRetrievedFeaturesLimit() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public int getRetrievedFeaturesLimit() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public Interval getInterval() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection getTimes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection getTimes(Interval interval) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName)
+        throws DataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public FeatureIndex createIndex(String indexTypeName,
+        FeatureType featureType, String attributeName, String indexName,
+        Observer observer) throws DataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#clone()
+     */
+    public Object clone() throws CloneNotSupportedException {
+        // TODO Auto-generated method stub
+        return super.clone();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.feature.FeatureStore#commitChanges()
+     */
+    public void commitChanges() throws DataException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.feature.FeatureStore#canCommitChanges()
+     */
+    public boolean canCommitChanges() throws DataException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public Feature getFeature(DynObject dynobject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/persistence/DummyDBFeatureStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/ExtentHistoryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/ExtentHistoryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/ExtentHistoryTest.java	(revision 42196)
@@ -0,0 +1,153 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.awt.Rectangle;
+import java.awt.geom.Rectangle2D;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for the class {@link ExtentHistory}.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class ExtentHistoryTest extends TestCase {
+
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.ExtentHistory#put(java.awt.geom.Rectangle2D)}
+	 * .
+	 */
+	public void testPut() {
+		ExtentHistory history = new ExtentHistory();
+
+		Rectangle2D rectangle = new Rectangle2D.Double(1, 1, 2, 2);
+		Rectangle2D rectangle2 = new Rectangle2D.Double(2, 2, 3, 3);
+		Rectangle2D rectangle3 = new Rectangle2D.Double(3, 3, 4, 4);
+		history.put(rectangle3);
+		history.put(rectangle2);
+		history.put(rectangle);
+
+		assertEquals(rectangle, history.getPrev());
+
+		history = new ExtentHistory(2);
+
+		history.put(rectangle);
+		history.put(rectangle2);
+		history.put(rectangle3);
+
+		assertEquals(rectangle3, history.getPrev());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.ExtentHistory#hasPrevious()}.
+	 */
+	public void testHasPrevious() {
+		ExtentHistory history = new ExtentHistory();
+
+		assertFalse(history.hasPrevious());
+
+		Rectangle2D rectangle = new Rectangle2D.Double(1, 1, 2, 2);
+		history.put(rectangle);
+
+		assertTrue(history.hasPrevious());
+
+		history.setPreviousExtent(); //.getPrev();//.removePrev();
+		assertFalse(history.hasPrevious());
+	}
+
+	 /**
+   * Test method for
+   * {@link org.gvsig.fmap.mapcontext.ExtentHistory#hasNext()}.
+   */
+  public void testHasNext() {
+    ExtentHistory history = new ExtentHistory();
+
+    assertFalse(history.hasNext());
+
+    Rectangle2D rectangle = new Rectangle2D.Double(1, 1, 2, 2);
+    history.put(rectangle);
+
+    assertTrue(history.hasPrevious());
+
+    history.setPreviousExtent();
+    assertTrue(history.hasNext());
+  }
+
+	/**
+	 * Test method for {@link org.gvsig.fmap.mapcontext.ExtentHistory#getPrev()}.
+	 */
+	public void testGet() {
+		ExtentHistory history = new ExtentHistory();
+
+		assertNull("The ExtentHistory has got an element without adding one",
+				history.getPrev());
+
+		Rectangle2D rectangle = new Rectangle2D.Double(1, 1, 2, 2);
+		Rectangle2D rectangle2 = new Rectangle2D.Double(2, 2, 3, 3);
+
+		history.put(rectangle);
+		assertEquals(rectangle, history.getPrev());
+
+		history.put(rectangle2);
+		assertEquals(rectangle2, history.getPrev());
+
+		assertEquals(rectangle, history.setPreviousExtent());
+
+		assertNull("The ExtentHistory hasn't got a previous element", history.setPreviousExtent());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.gvsig.fmap.mapcontext.ExtentHistory#removePrev()}.
+	 */
+	public void testRemovePrev() {
+		ExtentHistory history = new ExtentHistory();
+
+		assertNull(
+				"The ExtentHistory allows setting an element without adding "
+						+ "at least one", history.setPreviousExtent());
+
+		Rectangle2D rectangle = new Rectangle2D.Double(1, 1, 2, 2);
+		Rectangle2D rectangle2 = new Rectangle2D.Double(2, 2, 3, 3);
+
+		history.put(rectangle);
+		history.put(rectangle2);
+
+		assertEquals(rectangle, history.setPreviousExtent());
+
+		assertNull("The ExtentHistory allows to set the last element, "
+				+ "but all have been previously removed", history.setPreviousExtent());
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/ExtentHistoryTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ExtentHistory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ExtentHistory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ExtentHistory.java	(revision 42196)
@@ -0,0 +1,431 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+
+/**
+ * <p>
+ * <code>ExtentHistory</code> is designed for managing a history of extents.
+ * </p>
+ * <p>
+ * Note: An <i>extent</i> is a rectangular area, with information of its
+ * top-left 2D corner.
+ * </p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ExtentHistory implements Persistent {
+
+  private static final String FIELD_CURRENT_EXTENT = "current";
+  private static final String FIELD_NUM_PREVIOUS = "num";
+  private static final String FIELD_NUM_NEXT = "numnext";
+  private static final String FIELD_NUM_RECORDS = "numrec";
+  private static final String FIELD_PREVIOUS_EXTENTS = "extents";
+  private static final String FIELD_NEXT_EXTENTS = "extentsNext";
+  
+  /**
+   * <p>
+   * Maximum number of extents that can store.
+   * </p>
+   */
+  private int NUMREC;
+
+  /**
+   * <p>
+   * Array with the previous extents.
+   * </p>
+   *
+   * @see #hasPrevious()
+   * @see #put(Rectangle2D)
+   * @see #getPrev()
+   * @see #popPrev()
+   */
+  private Rectangle2D[] extentsPrev;
+
+  /**
+   * <p>
+   * Array with the next extents.
+   * </p>
+   *
+   * @see #hasNext()
+   * @see #putNext(Rectangle2D)
+   * @see #getNext()
+   * @see #popNext()
+   */
+  private Rectangle2D[] extentsNext;
+
+  /**
+   * <p>
+   * The current extent of the viewport.
+   * </p>
+   */
+  private Rectangle2D currentExtent;
+
+  /**
+   * <p>
+   * Number of previous extents stored.
+   * </p>
+   *
+   * @see #hasPrevious()
+   * @see #put(Rectangle2D)
+   * @see #getPrev()
+   * @see #popPrev()
+   */
+  private int numPrev = 0;
+
+  /**
+   * <p>
+   * Number of next extents stored.
+   * </p>
+   *
+   * @see #hasNext()
+   * @see #putNext(Rectangle2D)
+   * @see #getNext()
+   * @see #popNext()
+   */
+  private int numNext = 0;
+
+  /**
+   * <p>
+   * Creates a new instance of <code>ExtentsHistory</code> with an history of 10
+   * extents.
+   * </p>
+   */
+  public ExtentHistory() {
+    this(10);
+  }
+
+  /**
+   * <p>
+   * Creates a new instance of <code>ExtentsHistory</code> with an history of
+   * <code>numEntries</code> extents.
+   * </p>
+   *
+   * @param numEntries the maximum number of extents that will store the
+   *          instance
+   */
+  public ExtentHistory(int numEntries) {
+    NUMREC = numEntries;
+    extentsPrev = new Rectangle2D[NUMREC];
+    extentsNext = new Rectangle2D[NUMREC];
+  }
+
+  /**
+   * <p>
+   * Appends the specified extent at the end of the array of previous zooms.
+   * </p>
+   *
+   * @param ext the new extent
+   */
+  public void put(Rectangle2D ext) {
+    
+    // Si al cargar de la persistencia currentExtent es null ViewPort nos dar� su extent
+    if(currentExtent == null) {
+      this.currentExtent = ext;
+      return;
+    }
+    
+    if ( !ext.equals(getPrev()) && !ext.equals(getNext()) ) {
+      clearNumNext();
+    }
+
+    pushPrevious(currentExtent);
+
+    this.currentExtent = ext;
+  }
+
+  /**
+   * <p>
+   * Returns <code>true</code> if there are previous extents registered.
+   * </p>
+   *
+   * @return <code>true</code> if there are previous extents registered;
+   *         <code>false</code> otherwise
+   */
+  public boolean hasPrevious() {
+    return numPrev > 0;
+  }
+
+  /**
+   * <p>
+   * Returns <code>true</code> if there are next extents registered.
+   * </p>
+   *
+   * @return <code>true</code> if there are next extents registered;
+   *         <code>false</code> otherwise
+   */
+  public boolean hasNext() {
+    return numNext > 0;
+  }
+
+  /**
+   * <p>
+   * Returns the last previous extent in the history.
+   * </p>
+   *
+   * @return the last previous extent in the history
+   */
+  public Rectangle2D getPrev() {
+    if (numPrev <= 0) {
+      return null;
+    }
+    Rectangle2D ext = extentsPrev[numPrev - 1];
+
+    return ext;
+  }
+
+  /**
+   * <p>
+   * Returns the last next extent in the history.
+   * </p>
+   *
+   * @return the last next extent in the history
+   */
+  public Rectangle2D getNext() {
+    if (numNext <= 0) {
+      return null;
+    }
+
+    Rectangle2D ext = extentsNext[numNext - 1];
+    return ext;
+  }
+
+  /**
+   * <p>
+   * Extracts (removing) the last previous extent from the history.
+   * </p>
+   *
+   * @return last previous extent in the history
+   */
+  private Rectangle2D popPrev() {
+    if (numPrev <= 0) {
+      return null;
+    }
+
+    Rectangle2D ext = extentsPrev[--numPrev];
+    return ext;
+  }
+
+  /**
+   * <p>
+   * Extracts (removing) the last next extent from the history.
+   * </p>
+   *
+   * @return last next extent in the history
+   */
+  private Rectangle2D popNext() {
+    if (numNext <= 0) {
+      return null;
+    }
+
+    Rectangle2D ext = extentsNext[--numNext];
+    return ext;
+  }
+
+  /**
+   * <p>
+   * Sets to zero the number of previous extents from the history.
+   * </p>
+   */
+  private void clearNumPrev() {
+    numPrev = 0;
+  }
+
+  /**
+   * <p>
+   * Sets to zero the number of next extents from the history.
+   * </p>
+   */
+  private void clearNumNext() {
+    numNext = 0;
+  }
+
+  /**
+   * <p>
+   * Adds the current extent to the next extents history and sets the last
+   * previous extent as the new current extent.
+   * </p>
+   *
+   * @return the last previous extent as the new current extent
+   */
+  public Rectangle2D setPreviousExtent() {
+    
+    if (currentExtent != null) {
+      pushNext(currentExtent);
+    }
+    currentExtent = popPrev();
+    return currentExtent;
+  }
+
+  private void pushNext(Rectangle2D ext) {
+    if (numNext < (NUMREC)) {
+      extentsNext[numNext] = ext;
+      numNext = numNext + 1;
+    }
+    else {
+      for (int i = 0; i < (NUMREC - 1); i++) {
+        extentsNext[i] = extentsNext[i + 1];
+      }
+      extentsNext[numNext - 1] = ext;
+    }
+  }
+
+  /**
+   * <p>
+   * Adds the current extent to the previous extents history and sets the last
+   * next extent as the new current extent.
+   * </p>
+   * 
+   * @return the last next extent as the new current extent
+   */
+  public Rectangle2D setNextExtent() {
+
+    if (currentExtent != null) {
+      pushPrevious(currentExtent);
+      
+    }
+    currentExtent = popNext();
+    return currentExtent;
+  }
+
+  private void pushPrevious(Rectangle2D ext) {
+    if (numPrev < (NUMREC)) {
+      extentsPrev[numPrev] = ext;
+      numPrev++;
+    } else {
+      for (int i = 0; i < (NUMREC - 1); i++) {
+        extentsPrev[i] = extentsPrev[i + 1];
+      }
+      extentsPrev[numPrev - 1] = ext;
+    }
+  }
+  
+  public Rectangle2D getCurrent() {
+    return currentExtent;
+  }
+
+  public void loadFromState(PersistentState state) throws PersistenceException {
+
+    if (state.hasValue("num")) {
+      numPrev = state.getInt("num");
+    }
+    else {
+      clearNumPrev();
+    }
+
+    if (state.hasValue("numnext")) {
+      numNext = state.getInt("numnext");
+    }
+    else {
+      clearNumNext();
+    }
+
+    if (state.hasValue("numrec")) {
+      NUMREC = state.getInt("numrec");
+    }
+    else {
+      NUMREC = 10;
+    }
+
+    if (state.hasValue("extents")) {
+      extentsPrev = (Rectangle2D[]) state
+          .getArray("extents", Rectangle2D.class);
+    }
+    else {
+      extentsPrev = new Rectangle2D[NUMREC];
+      clearNumPrev();
+    }
+
+    if (state.hasValue("extentsNext")) {
+      extentsNext = (Rectangle2D[]) state.getArray("extentsNext",
+          Rectangle2D.class);
+    }
+    else {
+      extentsNext = new Rectangle2D[NUMREC];
+      clearNumNext();
+    }
+    
+    if (state.hasValue("current")) {
+      currentExtent = (Rectangle2D) state.get("current");
+    }
+    else {
+      currentExtent = null;
+    }
+  }
+
+  /**
+   * <p>
+   * Returns information of this object. All information is stored as
+   * properties:<br>
+   * </p>
+   * <p>
+   * <b>Properties:</b>
+   * <ul>
+   * <li><i>className</i>: name of this class.
+   * <li><i>num</i>: number of extents registered.
+   * <li><i>numrec</i>: maximum number of extents that can register.
+   * <li><i>extents</i>: .
+   * </ul>
+   * </p>
+   */
+  public void saveToState(PersistentState state) throws PersistenceException {
+
+    state.set(FIELD_NUM_PREVIOUS, numPrev);
+    state.set(FIELD_NUM_NEXT, numNext);
+    state.set(FIELD_NUM_RECORDS, NUMREC);
+    state.set(FIELD_PREVIOUS_EXTENTS, extentsPrev);
+    state.set(FIELD_NEXT_EXTENTS, extentsNext);
+    state.set(FIELD_CURRENT_EXTENT, currentExtent);
+  }
+
+  public static class RegisterPersistence implements Callable {
+
+    public Object call() {
+      PersistenceManager manager = ToolsLocator.getPersistenceManager();
+      DynStruct definition = manager.addDefinition(ExtentHistory.class,
+          "ExtentHistory", "ExtentHistory Persistence definition", null, null);
+      definition.addDynFieldInt(FIELD_NUM_PREVIOUS).setMandatory(true);
+      definition.addDynFieldInt(FIELD_NUM_NEXT).setMandatory(true);
+      definition.addDynFieldInt(FIELD_NUM_RECORDS).setMandatory(true);
+      definition.addDynFieldArray(FIELD_PREVIOUS_EXTENTS).setClassOfItems(Rectangle2D.class)
+          .setMandatory(true);
+      definition.addDynFieldArray(FIELD_NEXT_EXTENTS)
+          .setClassOfItems(Rectangle2D.class).setMandatory(true);
+      definition.addDynFieldObject(FIELD_CURRENT_EXTENT)
+      .setClassOfValue(Rectangle2D.class).setMandatory(false);
+
+      return Boolean.TRUE;
+    }
+  }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ExtentHistory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ILegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ILegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ILegend.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * Information about the legend to be represented in the interface.
+ *
+ */
+public interface ILegend extends Persistent, Cloneable {
+	/**
+	 * Obtains the default symbol of the legend.
+	 *
+	 * @return default symbol.
+	 */
+	ISymbol getDefaultSymbol();
+
+	/**
+	 * Clones the legend.
+	 *
+	 * @return Cloned legend.
+	 *
+	 * @throws XMLException
+	 */
+	ILegend cloneLegend();
+	/**
+	 * Adds a new listener to the legend.
+	 *
+	 * @param listener to be added
+	 */
+	void addLegendListener(LegendContentsChangedListener listener);
+	/**
+	 * Removes a listener from the legend.
+	 *
+	 * @param listener to be removed
+	 */
+	public void removeLegendListener(LegendContentsChangedListener listener);
+	/**
+	 * Executed when the default symbol of a legend is changed.
+	 *
+	 * @param event
+	 */
+	public void fireDefaultSymbolChangedEvent(SymbolLegendEvent event);
+	/**
+	 * Obtains the listeners of a legend.
+	 *
+	 * @return LegendListener[] array composed by the listeners of a legend.
+	 */
+	public LegendContentsChangedListener[] getListeners();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ILegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IZoomConstraints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IZoomConstraints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IZoomConstraints.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+import org.gvsig.tools.persistence.Persistent;
+
+
+/**
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IZoomConstraints extends Persistent {
+	/**
+	 * Uses the same constraints than the layer. Which is the same than no constraints.
+	 */
+	public static final int DEFINED_BY_THE_LAYER = 0;
+
+	/**
+	 * The user defines when the labes will be drawn.
+	 * Notice that if the layer is not drawn it does not take effect.
+	 */
+	public static final int DEFINED_BY_THE_USER = 1;
+
+	/**
+	 * Sets the mode of the zoom constraints.
+	 * @param mode, int one of DEFINED_BY_THE_LAYER or DEFINED_BY_THE_USER.
+	 */
+	public abstract void setMode(int mode);
+
+	/**
+	 * Returns the max scale limit of the constraints.
+	 * @return   float, max limit
+	 * @uml.property  name="maxScale"
+	 */
+	public abstract long getMaxScale();
+
+	/**
+	 * Sets the max scale limit of the constraints
+	 * @param   maxScale, float
+	 * @uml.property  name="maxScale"
+	 */
+	public abstract void setMaxScale(long maxScale);
+
+	/**
+	 * Returns the min scale limit of the constraints.
+	 * @return   float, min limit
+	 * @uml.property  name="minScale"
+	 */
+	public abstract long getMinScale();
+
+	/**
+	 * Sets the min scale limit of the constraints
+	 * @param   minScale, float
+	 * @uml.property  name="minScale"
+	 */
+	public abstract void setMinScale(long minScale);
+
+	/**
+	 * Returns <b>true</b> if the mode is DEFINED_BY_THE_USER.
+	 * @return
+	 */
+	public abstract boolean isUserDefined();
+
+	/**
+	 * Returns <b>true</b> if the mode is DEFINED_BY_THE_USER.
+	 * @return
+	 */
+	public abstract boolean isLayerDefined();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IZoomConstraints.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelClassFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelClassFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelClassFactory.java	(revision 42196)
@@ -0,0 +1,14 @@
+
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+public interface ILabelClassFactory {
+
+    public String getName();
+
+    public String getID();
+    
+    public ILabelClass create();
+
+    public String toString();
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingMethod.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingMethod.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingMethod.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.persistence.Persistent;
+
+
+/**
+ * Interface that defines provides support to a ILabelingStrategy to supply
+ * the set of <b>LabelClass</b>(es) that handle the label's style, content, etc..
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface ILabelingMethod extends Persistent {
+
+	/**
+	 * Returns all the labels defined by this Labeling Method
+	 * @return all the labels in this labeling method;
+	 */
+	public ILabelClass[] getLabelClasses();
+
+	/**
+	 * Returns the LabelClass contained by this ILabelingMethod whose name matches
+	 * with the string passed in <b>labelName</b>.
+	 * @param labelName
+	 * @return
+	 */
+	public ILabelClass getLabelClassByName(String labelName);
+
+	/**
+	 * Adds a LabelClass to the set of LabelClass contained by this ILabelingMethod.
+	 * @param lbl
+	 */
+	public void addLabelClass(ILabelClass lbl);
+
+	/**
+	 * Removes the LabelClass from the set of LabelClasses contained by this
+	 * ILabelingMethod.
+	 * @param lbl, the LabelClass to be removed
+	 */
+	public void deleteLabelClass(ILabelClass lbl);
+
+	/**
+	 * Returns <b>true</b> if this ILabelingMethod allos the definition of more
+	 * LabelClasses than just the default LabelClass.
+	 * @return boolean
+	 */
+	public boolean allowsMultipleClass();
+
+	/**
+	 * Changes the mane of a given LabelClass
+	 * @param lbl, the LabelClass
+	 * @param newName, the new name
+	 */
+	public void renameLabelClass(ILabelClass lbl, String newName);
+
+	/**
+	 * 
+	 * 
+	 * @param layer
+	 * @param lc
+	 * @param viewPort
+	 * @param usedFields
+	 * @return
+	 * @throws DataException
+	 */
+	public FeatureSet getFeatureIteratorByLabelClass(
+			FLyrVect layer,
+			ILabelClass lc,
+			ViewPort viewPort,
+			String[] usedFields) throws DataException;
+
+	public boolean definesPriorities();
+
+	public void setDefinesPriorities(boolean flag);
+
+	public void clearAllClasses();
+
+	public ILabelingMethod cloneMethod();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingMethod.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelLocationMetrics.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelLocationMetrics.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelLocationMetrics.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Point;
+import java.awt.geom.Point2D;
+
+public interface ILabelLocationMetrics {
+
+	Point2D getAnchor();
+
+	void setAnchor(Point anchor);
+
+	double getRotation();
+
+	void setRotation(double rotation);
+
+	boolean isFixed();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelLocationMetrics.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingStrategy.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingStrategy.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingStrategy.java	(revision 42196)
@@ -0,0 +1,123 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.task.Cancellable;
+
+
+
+/**
+ * A LabelingStrategy is a way to define how the labels are painted in a map, or potentially other object implementing ILabelable. It contains methods for allowing the definition of labeling classes through the labeling method (see <b>ILabelingMethod</b>), the placement of such labels (see <b>IPlacementConstraints</b>), and the zoom properties (see <b>ZoomConstraints</b>)
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface ILabelingStrategy extends Persistent {
+
+	/**
+	 * Returns the labeling method currently in use. The labeling method handles
+	 * a list of LabelClass that allows to handle several definition of labels
+	 * in the layer.
+	 * @return ILabelingMethod, the current one.
+	 * @see ILabelingMethod
+	 */
+	public ILabelingMethod getLabelingMethod();
+
+	/**
+	 * Sets the labeling method that will be used the next time the the draw is invoked.
+	 * @param   method, the new labeling method
+	 */
+	public void setLabelingMethod(ILabelingMethod method);
+
+
+	/**
+	 * Returns the current placement constraints that determine the position
+	 * where the label is placed.
+	 * @return
+	 */
+	public IPlacementConstraints getPlacementConstraints();
+
+	/**
+	 * Sets the PlacementConstraints that will determine where to place the labels. The change will take effect next time the draw(...) method is invoked.
+	 * @param  constraints
+	 */
+	public void setPlacementConstraints(IPlacementConstraints constraints);
+
+	/**
+	 * Returns the current placement constraints that determine the position
+	 * where the label is placed.
+	 * @return
+	 */
+	public IZoomConstraints getZoomConstraints();
+
+	/**
+	 * Sets the PlacementConstraints that will determine where to place the labels. The change will take effect next time the draw(...) method is invoked.
+	 * @param  constraints
+	 */
+	public void setZoomConstraints(IZoomConstraints constraints);
+
+	/** Causes the labels to be drawn. The policy of process is determined by
+	 * the LabelingStrategy previously set.
+	 *
+	 * @param mapImage
+	 * @param mapGraphics
+	 * @param viewPort
+	 * @param cancel
+	 * @param dpi TODO
+	 * @throws ReadException
+	 */
+	public void draw(BufferedImage mapImage, Graphics2D mapGraphics, double scale, ViewPort viewPort,
+			Cancellable cancel, double dpi) throws ReadException;
+
+	/**
+	 * Applies the printer properties to the rendering process to match its attributes.
+	 * The result is manifested in the Graphics2D g which is the object sent to the printer.
+	 * @param g
+	 * @param viewPort
+	 * @param cancel
+	 * @param properties
+	 * @throws ReadException
+	 */
+	public void print(Graphics2D g, double scale, ViewPort viewPort, Cancellable cancel, PrintAttributes properties)
+	throws ReadException;
+
+	/**
+	 * Returns a non-null String[] containing the names of the fields involved in the
+	 * labeling. If this strategy contains more than one LabelClass the result is an
+	 * array with all the names of the fields used by all the LabelClass, with no duplicates.
+	 * @return
+	 */
+	public String[] getUsedFields();
+
+	public void setLayer(FLayer layer) ;
+
+	public boolean shouldDrawLabels(double scale);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelingStrategy.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IPlacementConstraints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IPlacementConstraints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IPlacementConstraints.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+import org.gvsig.tools.persistence.Persistent;
+
+
+
+/**
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IPlacementConstraints extends Persistent, Cloneable {
+	public static int DefaultDuplicateLabelsMode = IPlacementConstraints.ONE_LABEL_PER_FEATURE_PART;
+
+	// constants regarding label duplication
+	public static final int REMOVE_DUPLICATE_LABELS             =       2;
+	public static final int ONE_LABEL_PER_FEATURE               =       3;
+	public static final int ONE_LABEL_PER_FEATURE_PART          =       4;
+
+	// constants regarding point settings
+	public static final int OFFSET_HORIZONTALY_AROUND_THE_POINT =       5;
+	public static final int ON_TOP_OF_THE_POINT                 =       6;
+	public static final int AT_SPECIFIED_ANGLE                  =       7;
+	public static final int AT_ANGLE_SPECIFIED_BY_A_FIELD       =       8;
+
+	// constants regarding polygon settings (also apply for lines)
+	public static final int HORIZONTAL                          =       9;
+	public static final int PARALLEL                            =      10;
+
+	// constants regarding line settings
+	public static final int FOLLOWING_LINE                      =      11;
+	public static final int PERPENDICULAR                 	    =      12;
+
+	// constants regarding the location along the line
+	public static final int AT_THE_END_OF_THE_LINE              =      13;
+	public static final int AT_THE_MIDDLE_OF_THE_LINE           =      14;
+	public static final int AT_THE_BEGINING_OF_THE_LINE         =      15;
+	public static final int AT_BEST_OF_LINE 					=	   16;
+
+	public abstract void setPlacementMode(int mode);
+
+	// regarding label position along the line
+	public abstract boolean isBelowTheLine();
+	public abstract void setBelowTheLine(boolean b);
+	public abstract boolean isAboveTheLine();
+	public abstract void setAboveTheLine(boolean b);
+	public abstract boolean isOnTheLine();
+	public abstract void setOnTheLine(boolean b);
+	public abstract void setLocationAlongTheLine(int location);
+
+
+	// regarding the orientation system
+	public abstract boolean isPageOriented();
+	public abstract void setPageOriented(boolean b);
+
+	// regarding the label duplication
+	public abstract void setDuplicateLabelsMode(int mode);
+	public abstract int getDuplicateLabelsMode();
+
+
+	public abstract boolean isParallel();
+
+	public abstract boolean isFollowingLine();
+
+	public abstract boolean isPerpendicular();
+
+	public abstract boolean isHorizontal();
+
+	public abstract boolean isAtTheBeginingOfLine();
+
+	public abstract boolean isInTheMiddleOfLine();
+
+	public abstract boolean isAtTheEndOfLine();
+
+	public boolean isAtBestOfLine();
+
+	public abstract boolean isOnTopOfThePoint();
+
+	public abstract boolean isAroundThePoint();
+
+	public boolean isFitInsidePolygon();
+
+	public void setFitInsidePolygon(boolean b);
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/IPlacementConstraints.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelable.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ * This interface enables support for labeling an object such as a layer, but also others, if any. It gives support for detecting if labeling is being applied (<code>isLabeled()</code> and <code>setIsLabeled()</code>), to manage the labeling strategy (<code>getLabelingStrategy()</code> and <code>setLabelingStrategy</code>). The labeling is performed by the <code>drawLabels(..)</code> method.
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface ILabelable {
+	/**
+	 * Returns <b>true</b> if labels are drawn, or <b>false</b> otherwise.
+	 * @return <b>boolean</b> telling if labels are drawn
+	 */
+	public boolean isLabeled();
+
+	/**
+	 * Enables or disables the label drawing.
+	 * @param isLabeled, if true then labels will be drawn
+	 */
+	public void setIsLabeled(boolean isLabeled);
+
+	/**
+	 * Returns the current labeling strategy
+	 * @return ILabelingStrategy
+	 * @see ILabelingStrategy
+	 */
+	public ILabelingStrategy getLabelingStrategy();
+
+	/**
+	 * Sets the new labeling strategy. Changes on the results will take effect next time the drawLabels(...) method is invoked.
+	 * @param  strategy
+	 * @uml.property  name="labelingStrategy"
+	 */
+	public void setLabelingStrategy(ILabelingStrategy strategy);
+
+    /**
+     * Causes the labels to be drawn. The policy of process is determined by the
+     * LabelingStrategy previously set.
+     * 
+     * @param image
+     * @param g
+     * @param viewPort
+     * @param cancel
+     * @param scale
+     * @param dpi
+     * @throws ReadException
+     */
+	public void drawLabels(BufferedImage image, Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, double dpi) throws ReadException;
+	public void printLabels(Graphics2D g, ViewPort viewPort,
+    		Cancellable cancel, double scale, PrintAttributes properties) throws ReadException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelClass.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelClass.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelClass.java	(revision 42196)
@@ -0,0 +1,207 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.styling;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.lang.Cloneable;
+
+public interface ILabelClass extends Cloneable, Persistent, CartographicSupport{
+
+	/**
+	 * Returns true if the label will be showed in the map
+	 *
+	 * @return isVisible boolean
+	 */
+	boolean isVisible();
+
+	/**
+	 * Returns true if the label will be showed in the map
+	 *
+	 * @return isVisible boolean
+	 */
+	boolean isVisible(double scale);
+
+	/**
+	 * Sets the visibility of the label in the map.
+	 *
+	 * @param isVisible boolean
+	 */
+	void setVisible(boolean isVisible);
+
+	/**
+	 * Returns the text symbol that is being used for the text(the font,
+	 * size,style,aligment)
+	 *
+	 * @return label ITextSymbol
+	 */
+	ITextSymbol getTextSymbol();
+
+	/**
+	 * Stablishes the text symbol that is going to be used for the text(the
+	 * font,size,style,aligment)
+	 *
+	 * @param textSymbol ITextSymbol
+	 */
+	void setTextSymbol(ITextSymbol textSymbol);
+
+	/**
+	 * Stablishes the style for the label.
+	 *
+	 * @param labelStyle ILabelStyle
+	 */
+	void setLabelStyle(ILabelStyle labelStyle);
+
+	/**
+	 * Returns the style of the label
+	 *
+	 */
+	ILabelStyle getLabelStyle();
+
+	/**
+	 * Returns the name of the label
+	 *
+	 */
+	String getName();
+
+	/**
+	 * Stablishes the name of the label
+	 * @param name
+	 */
+	void setName(String name);
+
+	String toString();
+
+	/**
+	 * Sets the text for the label
+	 *
+	 * @param texts String[]
+	 */
+	void setTexts(String[] texts);
+
+	/**
+	 * Return the text for the label
+	 *
+	 * @param texts String[]
+	 */
+	String[] getTexts();
+
+	/**
+	 * <p>
+	 * LabelLocationMetrics, contains the anchor point, rotation, and some
+	 * other geometric calculations computed by the PlacementManager.
+	 * </p>
+	 *
+	 * <p>
+	 * The shp argument is passed as an accessory for subclasses of this
+	 * class in case they need futher geometric calculations
+	 * </p>
+	 * @param graphics, graphics to use to paint the label.
+	 * @param llm, concrete settings of the placement of this layer
+	 * @param shp, the Shape over whose the label is painted
+	 */
+	void draw(Graphics2D graphics, ILabelLocationMetrics llm, Geometry geom);
+
+	/**
+	 * Useful to render a Label with size inside little rectangles.
+	 *
+	 * @param graphics Graphics2D
+	 * @param bounds Rectangle
+	 * @throws SymbolDrawingException
+	 */
+	void drawInsideRectangle(Graphics2D graphics, Rectangle bounds)
+			throws SymbolDrawingException;
+
+	int getPriority();
+
+	void setPriority(int priority);
+
+	Geometry getShape(ILabelLocationMetrics llm) throws CreateGeometryException;
+
+	String getClassName();
+
+	double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom);
+
+	int getReferenceSystem();
+
+	int getUnit();
+
+	void setCartographicSize(double cartographicSize, Geometry geom);
+
+	void setReferenceSystem(int referenceSystem);
+
+	void setUnit(int unitIndex);
+
+	double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom);
+
+	Rectangle getBounds();
+
+	String getSQLQuery();
+
+	void setSQLQuery(String sqlQuery);
+
+	/*
+	 * Extended API to add latest improvements from gvSIG 1.X (sept 2013)
+	 */
+	
+	/**
+	 * Returns the expression that defines the text which will be showed in
+	 * the label
+	 *
+	 * @return labelExpressions String[]
+	 */
+	public 	String[] getLabelExpressions();
+	
+	/**
+	 * Sets the expression that defines the text which will be showed in
+	 * the label
+	 *
+	 * @return labelExpressions String[]
+	 */
+	public void setLabelExpressions(String[] lbl_exps);
+
+	public void setUseSqlQuery(boolean use_sql);
+	
+	public boolean isUseSqlQuery();
+	
+	/**
+	 * Returns the expression that defines the text which will be showed in
+	 * the label ready to be used for the label parser
+	 *
+	 * @return labelExpression String
+	 */
+	public 	String getStringLabelExpression();
+
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/styling/ILabelClass.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendWriter.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.driver;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.gvsig.fmap.mapcontext.exceptions.WriteLegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+
+public interface ILegendWriter {
+    
+    
+    /**
+     * Writes a legend to a file.
+     * 
+     * Format is a MIME type string. Examples:
+     * 
+     * "application/zip; subtype=gvsleg",
+     * "text/xml; subtype=sld/1.0.0",
+     * "text/xml; subtype=sld/1.1.0",
+     * 
+     * @param legend
+     * @param outFile
+     * @param format
+     * @throws WriteLegendException
+     * @throws IOException
+     */
+    public void write(ILegend legend, File outFile, String format)
+    throws WriteLegendException, IOException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendWriter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendReader.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.driver;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.gvsig.fmap.mapcontext.exceptions.IncompatibleLegendReadException;
+import org.gvsig.fmap.mapcontext.exceptions.ReadLegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+
+public interface ILegendReader {
+    
+    /**
+     * 
+     * Create a legend from a file.
+     * 
+     * 
+     * @param inFile
+     * @param geometryType Geometry type of the target layer
+     * @return
+     * @throws ReadLegendException
+     * @throws IncompatibleLegendReadException
+     * @throws IOException
+     */
+    public ILegend read(File inFile, int geometryType)
+        throws ReadLegendException, IncompatibleLegendReadException, IOException; 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/driver/ILegendReader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/LegendException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/LegendException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/LegendException.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {{Task}}
+*/
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Legend related exceptions.
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public abstract class LegendException extends MapContextException {
+
+	private static final long serialVersionUID = -5441479826620031136L;
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	public LegendException(String message, String key, long code) {
+		super(message, key, code);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public LegendException(String message, Throwable cause, String key,
+			long code) {
+		super(message, cause, key, code);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/LegendException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedRasterLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedRasterLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedRasterLegend.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.IRasterLegend;
+
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IClassifiedRasterLegend extends IRasterLegend,
+		IClassifiedLegend {
+
+	// The interface does not add any new methods.
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedRasterLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedVectorLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedVectorLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedVectorLegend.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+/**
+ * Interface that offers the methods to classify the legend.
+ */
+public interface IClassifiedVectorLegend extends IClassifiedLegend, IVectorLegend{
+	/**
+	 * Deletes all the information of classification:
+	 * intervals, values, or other classifying elements
+	 */
+	public abstract void clear();
+
+	/**
+	 * Returns the name of the field
+	 *
+	 * @return Name of the field.
+	 *
+	 * TODO refactor to allow more than one field name
+	 */
+	public abstract String[] getClassifyingFieldNames();
+
+	/**
+	 * Inserts the name of the field
+	 *
+	 * @param fieldNames Names of the fields.
+	 * TODO refactor to allow more than one field name
+	 */
+	public abstract void setClassifyingFieldNames(String[] fieldNames);
+
+	 /**
+     * Inserts a symbol.
+     *
+     * @param key.
+     * @param symbol.
+     */
+	public abstract void addSymbol(Object key, ISymbol symbol);
+
+    /**
+     * Deletes a symbol using for that its key which is the parameter of the
+     * method.
+     *
+     * @param key clave.
+     */
+	public abstract void delSymbol(Object key);
+
+	/**
+	 * Removes <b>oldSymbol</b> from the Legend and substitutes it with the <b>newSymbol</b>
+	 * @param oldSymbol
+	 * @param newSymbol
+	 */
+	public abstract void replace(ISymbol oldSymbol, ISymbol newSymbol);
+
+	public int[] getClassifyingFieldTypes();
+
+	public void setClassifyingFieldTypes(int[] fieldTypes);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedVectorLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ZSort.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ZSort.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ZSort.java	(revision 42196)
@@ -0,0 +1,337 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.IntervalLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LabelLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendClearEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.ValueLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+/**
+ * Class ZSort is used in order to store information about the symbols
+ * which are placed in the Z axis (because a level of symbols has been
+ * used).
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class ZSort implements LegendContentsChangedListener {
+	// private static final String COLUMN_SEPARATOR = ",";
+	// private static final String ROW_SEPARATOR = ";";
+	private int[][] matrix;
+	private boolean usingZSort;
+	private Map symbols = new HashMap();
+
+	public ZSort(ILegend legend) {
+		initialize(legend);
+	}
+
+	private void initialize(ILegend legend) {
+		ISymbol[] symbols;
+		if (legend instanceof IClassifiedLegend) {
+			symbols = ((IClassifiedLegend) legend).getSymbols();
+
+		} else {
+			symbols = new ISymbol[] {legend.getDefaultSymbol()};
+		}
+		matrix = new int[symbols.length][];
+
+		for (int i = 0; i < symbols.length; i++) {
+			this.symbols.put(symbols[i], new Integer(i));
+			int rowLength =  symbols[i] instanceof IMultiLayerSymbol ?
+                  	 ((IMultiLayerSymbol) symbols[i]).getLayerCount() :
+	                 1;
+			matrix[i] = new int[rowLength];
+		}
+		legend.addLegendListener(this);
+	}
+
+	private void addSymbol(ISymbol sym){
+		if (!symbols.containsKey(sym)) {
+			int rowLength =  sym instanceof IMultiLayerSymbol ?
+					((IMultiLayerSymbol) sym).getLayerCount() : 1;
+			int[][] auxMatrix = new int[matrix.length+1][];
+			int newIndex = matrix.length;
+			for (int i=0; i<newIndex; i++){
+				auxMatrix[i] = matrix[i];
+			}
+			int[] row = new int[rowLength];
+			for (int i=0; i<rowLength; i++){
+				row[i] = 0;
+			}
+			auxMatrix[newIndex] = row;
+			matrix = auxMatrix;
+			this.symbols.put(sym, new Integer(newIndex));
+		}
+	}
+
+	public void legendChanged(LegendChangedEvent e) throws MapContextException {
+		symbols.clear();
+		usingZSort = false;
+		initialize(e.getNewLegend());
+
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public int getLevelCount() {
+		int count = -1;
+		for (int i = 0; i < matrix.length; i++) {
+			for (int j = 0; j < matrix[i].length; j++) {
+				count = Math.max(count, matrix[i][j]);
+			}
+		}
+		return count + 1;
+	}
+
+
+	public void setUsingZSort(boolean usingZSort) {
+		this.usingZSort = usingZSort;
+	}
+
+	public void setLevels(ISymbol sym, int[] values) {
+		setLevels(((Integer)symbols.get(sym)).intValue(), values);
+	}
+
+
+	public void setLevels(int row, int[] values) {
+		matrix[row] = values;
+	}
+
+	public int[] getLevels(ISymbol sym) {
+		Integer row = (Integer) symbols.get(sym);
+		if (row != null) {
+			return getLevels(row.intValue());
+		} else {
+			ISymbol[] theSymbols = getSymbols();
+			for (int i = 0; i < theSymbols.length; i++) {
+				ISymbol auxSymbol = theSymbols[i];
+				if (auxSymbol.equals(sym)){
+					return getLevels(((Integer)symbols.get(auxSymbol)).intValue());
+				}
+			}
+		}
+		return null;
+	}
+
+
+	public int[] getLevels(int row) {
+		return matrix[row];
+	}
+
+
+	public boolean isUsingZSort() {
+		return usingZSort;
+	}
+
+
+	public ISymbol[] getSymbols() {
+		return (ISymbol[])symbols.keySet().toArray(new ISymbol[0]);
+	}
+
+
+	public String[] getDescriptions() {
+		ISymbol[] symbols = getSymbols();
+		String[] descs = new String[symbols.length];
+		for (int i = 0; i < descs.length; i++) {
+			descs[i] = symbols[i].getDescription();
+		}
+		return descs;
+	}
+
+	/*
+	 * [PACO] Comentarizado porque no hace lo que se esperar�a de �l.
+	 * Si tenemos una leyenda con un simbolo Multilayer compuesto
+	 * por, entre otros, un simbolo simple que coincide con otro de
+	 * los simbolos de la leyenda, este metodo devuelve el nivel
+	 * del s�mbolo que encuentra primero.
+	 *
+	 * Se ha eliminado cualquier referencia a este metodo en el resto
+	 * del workspace, sustituyendola convenientemente por
+	 * referencias a getLevels.
+	 */
+//	public int getSymbolLevel(ISymbol layer) {
+//		ISymbol[] theSymbols = getSymbols();
+//
+//		for (int i = 0; i < theSymbols.length; i++) {
+//			ISymbol mySymbol = theSymbols[i];
+//
+//			if (mySymbol instanceof IMultiLayerSymbol) {
+//				IMultiLayerSymbol multiSym = (IMultiLayerSymbol) mySymbol;
+//				for (int j = 0; j < multiSym.getLayerCount(); j++) {
+//					ISymbol myInnerSymbol = multiSym.getLayer(j);
+//					if (myInnerSymbol.equals(layer)) {
+//						int row = ((Integer)symbols.get(multiSym)).intValue();
+//						return matrix[row][j];
+//					}
+//				}
+//			} else {
+//				if (mySymbol.equals(layer)) {
+//					return matrix[((Integer)symbols.get(layer)).intValue()][0];
+//				}
+//			}
+//		}
+//
+////		return 0;
+//		return -1;
+//	}
+
+	public int getTopLevelIndexAllowed() {
+		ISymbol[] symbols = getSymbols();
+		int count=0;
+		for (int i = 0; i < symbols.length; i++) {
+			if (symbols[i] instanceof IMultiLayerSymbol) {
+				IMultiLayerSymbol mSymbol = (IMultiLayerSymbol) symbols[i];
+				count = Math.max(count, mSymbol.getLayerCount());
+			} else
+				count = Math.max(count, 1);
+		}
+		return count;
+	}
+
+	public String toString() {
+		String out = "Symbols:\n---------\n\n";
+		ISymbol[] syms = getSymbols();
+		for (int i = 0; i < syms.length; i++) {
+			out += syms.getClass()+":\t"+syms[i].getDescription();
+		}
+		out += "\nMatrix:\n--------\n\n";
+		out += "    \t";
+		for (int i = 0; i < getTopLevelIndexAllowed(); i++) {
+			out += "column"+i+"\t\t";
+		}
+		out += "\n";
+		for (int i = 0; i < matrix.length; i++) {
+			out += "row "+i+":\t";
+			for (int j = 0; j < matrix[i].length; j++) {
+				out += matrix[i][j]+"\t\t";
+			}
+			out += "\n";
+		}
+		return out;
+	}
+
+	private void replaceSymbol(ISymbol oldSymbol, ISymbol newSymbol) {
+		if (oldSymbol == newSymbol) return;
+
+		if(oldSymbol != null){
+
+			Integer value = (Integer)symbols.get(oldSymbol);
+			if (value != null){
+
+				int intValue=value.intValue();
+				if (newSymbol == null) {
+					// emptying
+					symbols.remove(oldSymbol);
+					matrix[intValue] = new int[1];
+				} else {
+					symbols.remove(oldSymbol);
+
+					symbols.put(newSymbol, value);
+
+					// update matrix values if need
+					int newArrayLength = newSymbol instanceof IMultiLayerSymbol ?
+							((IMultiLayerSymbol) newSymbol).getLayerCount() : 1;
+
+							int[] newRow = new int[newArrayLength];
+							if (matrix[intValue].length == newArrayLength) {
+								/*
+								 * the new row is exactly the same long than the
+								 * old one. Will use the old values
+								 */
+								newRow = matrix[intValue];
+							} else	if (matrix[intValue].length < newArrayLength) {
+								/*
+								 * the new row is larger than the old one,
+								 * let's copy all the first values and fill
+								 * the rest with the last copied value
+								 */
+								int val=0;
+								for (int i = 0; i < newRow.length; i++) {
+									if (i<matrix[intValue].length) {
+										val = matrix[intValue][i];
+									}
+
+									newRow[i] = val;
+								}
+							} else if (matrix[intValue].length > newArrayLength) {
+								/*
+								 * the new row is smaller than the old one,
+								 * let's copy the first values
+								 */
+								for (int i = 0; i < newRow.length; i++) {
+									newRow[i] = matrix[intValue][i];
+								}
+							}
+							matrix[intValue] = newRow;
+				}
+			}
+		} else {
+			addSymbol(newSymbol);
+		}
+	}
+
+	public boolean symbolChanged(SymbolLegendEvent e) {
+		replaceSymbol(e.getOldSymbol(), e.getNewSymbol());
+		return true;
+	}
+
+
+	public boolean classifiedSymbolChange(SymbolLegendEvent e) {
+		replaceSymbol(e.getOldSymbol(), e.getNewSymbol());
+		return true;
+	}
+
+	public boolean intervalChange(IntervalLegendEvent e) {
+		return false;
+	}
+
+	public boolean valueChange(ValueLegendEvent e) {
+		System.out.println("log ValueLegendEvent:"+e.getOldValue()+"->"+e.getNewValue());
+		return false;
+	}
+
+	// TODO should not exist here
+	public boolean labelFieldChange(LabelLegendEvent e) {
+		return false;
+	}
+
+
+	public void legendCleared(LegendClearEvent event) {
+//		this.usingZSort = false;
+//		symbols.clear();
+//		matrix = null;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ZSort.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ClassificationLegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ClassificationLegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ClassificationLegendEvent.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+
+/**
+ * <p>Event produced on a classified legend.</p>
+ *
+ * @author Vicente Caballero Navarro
+ * @author jaume domimguez faus - jaume.dominguez@iver.es
+ */
+public class ClassificationLegendEvent extends LegendEvent {
+	/**
+	 * <p>Gets the index of the class where the classification has changed.</p>
+	 *
+	 * @return index of the class where the classification has changed
+	 */
+	public int getClassIndex() {
+		//TODO Implementar bien
+		return -1;
+	}
+	/**
+	 * <p>Returns the type of this legend event.</p>
+	 * 
+	 * @return type of this legend event
+	 * 
+	 * @see LegendEvent#LEGEND_CLASSIFICATION_CHANGED
+	 */
+	public int getEventType() {
+		return LegendEvent.LEGEND_CLASSIFICATION_CHANGED;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ClassificationLegendEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendContentsChangedListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendContentsChangedListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendContentsChangedListener.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+
+
+/**
+ * Interfaz con los eventos que puede realizar una leyenda.
+ */
+public interface LegendContentsChangedListener {
+
+	/**
+	 * Invocado cuando se cambia en el legend el s�mbolo por defecto. Si
+	 * cualquiera de los listeners devuelve false, el cambio no se realiza
+	 *
+	 * @param e SymbolLegendEvent
+	 *
+	 * @return True si ha sido correcto.
+	 */
+	boolean symbolChanged(SymbolLegendEvent e);
+
+	void legendCleared(LegendClearEvent event);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendContentsChangedListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ValueLegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ValueLegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ValueLegendEvent.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.ClassificationLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendEvent;
+
+
+/**
+ * <p>Event produced when changes any value of a legend.</p>
+ *
+ * @see FMapEvent
+ * @author Vicente Caballero Navarro
+ */
+public class ValueLegendEvent extends ClassificationLegendEvent {
+	/**
+	 * <p>Previous legend value.</p>
+	 */
+	private Object oldValue;
+
+	/**
+	 * <p>New legend value.</p>
+	 */
+	private Object newValue;
+
+	/**
+	 * <p>Creates a new value legend event.</p>
+	 *
+	 * @param oldValue previous legend value
+	 * @param newValue new legend value
+	 */
+	public ValueLegendEvent(Object oldValue, Object newValue) {
+		this.oldValue = oldValue;
+		this.newValue = newValue;
+	}
+
+	/**
+	 * <p>Gets the previous value.</p>
+	 *
+	 * @return the previous value
+	 */
+	public Object getOldValue() {
+		return oldValue;
+	}
+
+	/**
+	 * <p>Gets the new value.</p>
+	 *
+	 * @return the new value
+	 */
+	public Object getNewValue() {
+		return newValue;
+	}
+
+	/**
+	 * <p>Returns the type of this legend event.</p>
+	 * 
+	 * @return the type of this legend event
+	 * 
+	 * @see LegendEvent#LEGEND_VALUE_CHANGED
+	 */
+	public int getEventType() {
+		return LegendEvent.LEGEND_VALUE_CHANGED;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/ValueLegendEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/FeatureDrawnNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/FeatureDrawnNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/FeatureDrawnNotification.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+
+public interface FeatureDrawnNotification {
+
+	Feature getFeature();
+
+	/**
+	 * @return the {@link Geometry} to be finally drawn, as it may
+	 * have been reprojected
+	 */
+	Geometry getDrawnGeometry();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/FeatureDrawnNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LabelLegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LabelLegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LabelLegendEvent.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendEvent;
+
+
+
+/**
+ * <p>Event produced when changes the value in the field of labeling of a legend.</p>
+ *
+ * @see FMapEvent
+ * @author Vicente Caballero Navarro
+ */
+public class LabelLegendEvent extends LegendEvent {
+	/**
+	 * <p>Previous field value.</p>
+	 */
+	private int oldFieldId;
+	
+	/**
+	 * <p>New field value.</p>
+	 */
+	private int newFieldId;
+
+	/**
+	 * <p>Creates a new legend label event.</p>
+	 *
+	 * @param oldFieldId previous field value
+	 * @param newFieldId new field value
+	 */
+	public LabelLegendEvent(int oldFieldId, int newFieldId) {
+		this.oldFieldId = oldFieldId;
+		this.newFieldId = newFieldId;
+	}
+
+	/**
+	 * <p>Gets the new field value.</p>
+	 *
+	 * @return the new field value
+	 */
+	public int getNewFieldId() {
+		return newFieldId;
+	}
+
+	/**
+	 * <p>Gets the previous field value.</p>
+	 *
+	 * @return the previous field value
+	 */
+	public int getOldFieldId() {
+		return oldFieldId;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LabelLegendEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendEvent.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.layers.operations.ClassifiableVectorial;
+
+
+
+
+/**
+ * <p><code>LegendEvent</code> represents an event produced at a legend in a layer.</p>
+ * 
+ * @see FMapEvent
+ */
+public class LegendEvent extends FMapEvent {
+	/**
+	 * <p>Identifies this event as a change of the value of a legend.</p>
+	 */
+	public static final int LEGEND_VALUE_CHANGED = 200;
+
+	/**
+	 * <p>Identifies this event as a change of the symbol of a legend.</p>
+	 */
+	public static final int LEGEND_SYMBOL_CHANGED = 201;
+
+	/**
+	 * <p>Identifies this event as a legend interval change.</p>
+	 */
+	public static final int LEGEND_INTERVAL_CHANGED = 202;
+
+	/**
+	 * <p>Identifies this event as a clear of a legend.</p>
+	 */
+	public static final int LEGEND_CLEARED = 203;
+
+	/**
+	 * <p>Identifies this event as a change on the classification of a legend.</p>
+	 */
+	public static final int LEGEND_CLASSIFICATION_CHANGED = 204;
+
+	/**
+	 * Layer of the legend where the event was produced.
+	 * 
+	 * @see #getLayer()
+	 * @see #setLayer(ClassifiableVectorial)
+	 */
+	private ClassifiableVectorial layer;
+
+	/**
+	 * <p>Returns the layer of the legend where the event was produced, as a classifiable and vector layer.</p>
+	 *
+	 * @return the layer where the event was produced, as classifiable vector
+	 * 
+	 * @see #setLayer(ClassifiableVectorial)
+	 */
+	public ClassifiableVectorial getLayer() {
+		return layer;
+	}
+
+	/**
+	 * <p>Sets the layer of the legend where the event was produced, as a classifiable and vector layer.</p>
+	 *
+	 * @param layer the layer where the event was produced, as classifiable vector
+	 * 
+	 * @see #getLayer()
+	 */
+	public void setLayer(ClassifiableVectorial layer) {
+		this.layer = layer;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/IntervalLegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/IntervalLegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/IntervalLegendEvent.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+
+
+/**
+ * <p>Event produced when changes the interval value of a classification legend.</p>
+ * 
+ * @see FMapEvent
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class IntervalLegendEvent extends ClassificationLegendEvent {
+	/**
+	 * <p>Previous legend interval.</p> 
+	 */
+	private IInterval oldInterval;
+	/**
+	 * <p>Previous legend interval.</p> 
+	 */
+	private IInterval newInterval;
+
+	/**
+	 * <p>Creates a new legend interval event.</p>
+	 *
+	 * @param oldInterval previous legend interval
+	 * @param newInterval new legend interval
+	 */
+	public IntervalLegendEvent(IInterval oldInterval, IInterval newInterval) {
+		this.oldInterval = oldInterval;
+		this.newInterval = newInterval;
+	}
+
+	/**
+	 * <p>Gets the previous legend interval.</p>
+	 *
+	 * @return the previous legend interval
+	 */
+	public IInterval getOldInterval() {
+		return oldInterval;
+	}
+
+	/**
+	 * <p>Gets the new legend interval.</p>
+	 *
+	 * @return the new legend interval
+	 */
+	public IInterval getNewInterval() {
+		return newInterval;
+	}
+
+	/**
+	 * <p>Returns the type of this legend event.</p>
+	 * 
+	 * @return the type of this legend event
+	 * 
+	 * @see LegendEvent#LEGEND_INTERVAL_CHANGED
+	 */
+	public int getEventType() {
+		return LegendEvent.LEGEND_INTERVAL_CHANGED;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/IntervalLegendEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/SymbolLegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/SymbolLegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/SymbolLegendEvent.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+
+/**
+ * <p>Event produced when changes one of the symbols of a classified legend.</p>
+ *
+ * @see FMapEvent
+ * @author Vicente Caballero Navarro
+ */
+public class SymbolLegendEvent extends ClassificationLegendEvent {
+/**
+	 * <p>Previous symbol style.</p>
+	 */
+	private ISymbol oldSymbol;
+	
+	/**
+	 * <p>New symbol style.</p>
+	 */
+	private ISymbol newSymbol;
+
+	/**
+	 * <p>Creates a new symbol legend event.</p>
+	 *
+	 * @param oldValue previous symbol style
+	 * @param newValue new symbol style
+	 */
+	public SymbolLegendEvent(ISymbol oldSymbol, ISymbol newSymbol) {
+		this.oldSymbol = oldSymbol;
+		this.newSymbol = newSymbol;
+	}
+
+	/**
+	 * <p>Gets the previous symbol style.</p>
+	 *
+	 * @return the previous symbol style
+	 */
+	public ISymbol getOldSymbol() {
+		return oldSymbol;
+	}
+
+	/**
+	 * <p>Gets the new symbol style.</p>
+	 *
+	 * @return the new symbol style
+	 */
+	public ISymbol getNewSymbol() {
+		return newSymbol;
+	}
+
+	/**
+	 * <p>Returns the type of this legend event.</p>
+	 * 
+	 * @return the type of this legend event
+	 * 
+	 * @see LegendEvent#LEGEND_SYMBOL_CHANGED
+	 */
+	public int getEventType() {
+		return LegendEvent.LEGEND_SYMBOL_CHANGED;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/SymbolLegendEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendClearEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendClearEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendClearEvent.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+/**
+ * <p>The class <code>LegendClearEvent</code> stores all necessary information of an event 
+ * produced when a legend is cleared.</p>
+ * 
+ * @see FMapEvent
+ * @author Vicente Caballero Navarro
+ */
+public class LegendClearEvent extends ClassificationLegendEvent {
+	private ISymbol[] oldSymbols;
+	/**
+	 * Constructor method
+	 * @param oldSymbols
+	 */
+	public LegendClearEvent(ISymbol[] oldSymbols) {
+		this.oldSymbols = oldSymbols;
+	}
+	/**
+	 * Obtains the old symbols of the legend
+	 * @return
+	 */
+	public ISymbol[] getOldSymbols() {
+		return oldSymbols;
+	}
+	/**
+	 * Returns the type of the event
+	 */
+	public int getEventType() {
+		return LegendEvent.LEGEND_CLEARED;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendClearEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/listeners/LegendListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/listeners/LegendListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/listeners/LegendListener.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events.listeners;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+
+
+
+/**
+ * Interfaz con los eventos que puede realizar una leyenda.
+ */
+public interface LegendListener {
+
+	/**
+     * Called when the legend of a vector layer has changed.
+     *
+     * @param e the <code>LegendChangedEvent</code> contains contextual information about the event
+     */
+    void legendChanged(LegendChangedEvent e);
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/listeners/LegendListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendChangedEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendChangedEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendChangedEvent.java	(revision 42196)
@@ -0,0 +1,119 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend.events;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+
+
+
+/**
+ * <p>Event or set of events produced when changes a legend.</p>
+ * 
+ * @see FMapEvent
+ * @author Vicente Caballero Navarro
+ */
+public class LegendChangedEvent extends LegendEvent {
+	/**
+	 * <p>Identifies this event as a changed of a legend.</p>
+ 	 */
+	private static final int LEGEND_CHANGED = 0;
+
+	/**
+	 * <p>Previous vector legend.</p>
+	 */
+	private ILegend oldLegend;
+
+	/**
+	 * <p>New vector legend.</p>
+	 */
+	private ILegend newLegend;
+
+	/**
+	 * <p>Events that constitute this one.</p>
+	 */
+	private LegendChangedEvent[] events;
+
+	/**
+	 * <p>Creates a new legend change event.</p>
+	 * 
+	 * @param oldLegend previous vector legend
+	 * @param newLegend new vector legend
+	 * 
+	 * @return a new legend change event
+	 */
+	public static LegendChangedEvent createLegendChangedEvent(ILegend oldLegend,
+			ILegend newLegend){
+		return new LegendChangedEvent(oldLegend, newLegend, LEGEND_CHANGED);
+	}
+	
+	/**
+	 * <p>Creates a new legend change event.</p>
+	 *
+	 * @param oldLegend previous vector legend
+	 * @param newLegend new vector legend
+	 */
+	private LegendChangedEvent(ILegend oldLegend,
+			ILegend newLegend, int eventType) {
+		this.oldLegend = oldLegend;
+		this.newLegend = newLegend;
+		setEventType(eventType);
+	}
+
+	/**
+	 * <p>Gets the previous vector legend.</p>
+	 *
+	 * @return the previous vector legend
+	 */
+	public ILegend getOldLegend() {
+		return oldLegend;
+	}
+
+	/**
+	 * <p>Gets the new vector legend.</p>
+	 *
+	 * @return the new vector legend
+	 */
+	public ILegend getNewLegend() {
+		return newLegend;
+	}
+
+	/**
+	 * <p>Gets the events that constitute this one.</p>
+	 *
+	 * @return an array with the events that constitute this one
+	 */
+	public LegendChangedEvent[] getEvents() {
+		return events;
+	}
+
+	/**
+	 * <p>Sets the events that constitute this one.</p>
+	 *
+	 * @param events an array with the events that constitute this one
+	 */
+	public void setEvents(LegendChangedEvent[] events) {
+		this.events = events;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendChangedEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialIntervalLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialIntervalLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialIntervalLegend.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+
+/**
+ * Interface that allows the methods to classify the legend through intervals.
+ *
+ */
+public interface IVectorialIntervalLegend extends IClassifiedVectorLegend {
+	
+	public static final String LEGEND_NAME = "VectorialInterval";
+
+    public void setDefaultSymbol(ISymbol s);
+
+    public IInterval getInterval(Object v) ;
+    public int getIntervalType();
+
+	/**
+	 *
+	 * Returns the symbol starting from an interval
+	 *
+	 * @param key interval.
+	 *
+	 * @return symbol.
+	 */
+    public ISymbol getSymbolByInterval(IInterval key);
+
+
+    /**
+     * Inserts the type of the classification of the intervals.
+	 *
+	 * @param tipoClasificacion type of the classification.
+	 */
+    public void setIntervalType(int tipoClasificacion);
+
+    /**
+	 * Inserts the initial color
+	 * @param startColor initial color.
+	 */
+	public void setStartColor(Color startColor);
+
+    /**
+	 * Inserts the final color.
+	 * @param endColor final color.
+	 */
+	public void setEndColor(Color endColor);
+
+    /**
+	 * Returns the initial color.
+	 * @return  Color initial color.
+	 */
+	public Color getStartColor();
+
+    /**
+	 * Returns the final color
+	 * @return Color  final color.
+	 */
+	public Color getEndColor();
+
+	public IInterval[] calculateIntervals(FeatureStore featureStore,
+			String selectedItem, int intervalCount, int shapeType)
+			throws DataException;
+
+
+//    public ISymbol getSymbol(FeatureReference id) throws DataException;
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialIntervalLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IRasterLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IRasterLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IRasterLegend.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+
+/**
+ * Interface of raster legend.
+ */
+public interface IRasterLegend extends ILegend {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IRasterLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorLegend.java	(revision 42196)
@@ -0,0 +1,182 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.util.Map;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.task.Cancellable;
+
+
+
+/**
+ * Interface of a vectorial legend.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public interface IVectorLegend extends ILegend, DrawingObservable {
+	/**
+	 * Inserts the DataSource.
+	 *
+	 * @param ds DataSource.
+	 * @throws DataException TODO
+	 * @throws FieldNotFoundException when the field is not found.
+	 */
+//	void setFeatureStore(FeatureStore fs)
+//		throws DataException;
+
+	/**
+	 * Returns the symbol to be used to represent the feature in the i-th
+	 * record in the DataSource
+	 * @param i, the record index
+	 *
+	 * @return ISymbol.
+	 */
+//	ISymbol getSymbol(int i) throws ReadException;
+	/**
+     * Returns a symbol starting from an IFeature.
+	 *
+	 * TAKE CARE!! When we are using a feature iterator as a database
+	 * the only field that will be filled is the fieldID.
+	 * The rest of fields will be null to reduce the time of creation
+	 *
+	 * @param feat IFeature.
+	 *
+	 * @return S�mbolo.
+	 * @throws MapContextException 
+	 */
+    ISymbol getSymbolByFeature(Feature feat) throws MapContextException;
+
+	/**
+	 * Returns the type of the shape.
+	 *
+	 * @return Returns the type of the shapes that the legend is ready to use.
+	 *
+	 */
+	int getShapeType();
+
+	/**
+	 * Defines the type of the shape.
+	 *
+	 * @param shapeType type of the shape.
+	 */
+	void setShapeType(int shapeType);
+
+	/**
+	 * Establishes the default symbol of a legend. In a SingleSymbolLegend the symbol
+	 * is established by calling this method.
+	 *
+	 * @param s default symbol.
+	 */
+	void setDefaultSymbol(ISymbol s);
+
+	/**
+     * Returns true or false depending on if the rest of values are used.
+	 *
+	 * @return  True if the rest of values are used.
+	 */
+    public boolean isUseDefaultSymbol();
+
+    void useDefaultSymbol(boolean b);
+
+//   jjdc los eliminamos, y debe quedar dependiente de la implementacion y n de api
+//   public ZSort getZSort();
+//
+//	public void setZSort(ZSort zSort);
+//
+	public boolean isSuitableForShapeType(int shapeType);
+
+	/**
+	 * Draws the {@link FeatureStore} data using this legend simbology.
+	 * 
+	 * @param image
+	 *            the base image to draw over
+	 * @param graphics2D
+	 *            the {@link Graphics2D} to draw to
+	 * @param viewPort
+	 *            the ViewPort to use
+	 * @param cancel
+	 *            the {@link Cancellable} delegate object
+	 * @param scale
+	 *            the scale of the view
+	 * @param queryParameters
+	 *            the query parameters
+	 * @param coordTrans
+	 *            the transformation coordinates to use for reprojection
+	 * @param featureStore
+	 * 			  {@link FeatureStore} to load the data to draw from
+	 * @throws LegendException
+	 */
+	void draw(BufferedImage image, Graphics2D graphics2D, ViewPort viewPort,
+			Cancellable cancel, double scale, Map queryParameters,
+			ICoordTrans coordTrans, FeatureStore featureStore)
+			throws LegendException;
+	
+	 /**
+     * Draws the {@link FeatureStore} data using this legend simbology.
+     * 
+     * @param image
+     *            the base image to draw over
+     * @param graphics2D
+     *            the {@link Graphics2D} to draw to
+     * @param viewPort
+     *            the ViewPort to use
+     * @param cancel
+     *            the {@link Cancellable} delegate object
+     * @param scale
+     *            the scale of the view
+     * @param queryParameters
+     *            the query parameters
+     * @param coordTrans
+     *            the transformation coordinates to use for reprojection
+     * @param featureStore
+     *            {@link FeatureStore} to load the data to draw from
+     * @param featureQuery 
+     *            the query used to filter the features.
+     * @throws LegendException
+     */
+    void draw(BufferedImage image, Graphics2D graphics2D, ViewPort viewPort,
+            Cancellable cancel, double scale, Map queryParameters,
+            ICoordTrans coordTrans, FeatureStore featureStore, FeatureQuery featureQuery)
+            throws LegendException;
+
+	void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+			double scale, Map queryParameters, ICoordTrans coordTrans,
+			FeatureStore featureStore, PrintAttributes properties) throws LegendException;
+	
+	void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+        double scale, Map queryParameters, ICoordTrans coordTrans,
+        FeatureStore featureStore, FeatureQuery featureQuery, PrintAttributes properties) throws LegendException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IInterval.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+public interface IInterval extends Persistent, Cloneable {
+
+	/**
+	 * Returns if the given value is included into the interval.
+	 * 
+	 * @param v
+	 *            value to check. Must be instance of {@link Number}
+	 * 
+	 * @return if the given value is included into the interval
+	 */
+	boolean isInInterval(Object v);
+
+	/**
+	 * Returns the interval minimum included value.
+	 * 
+	 * @return the minimum value
+	 */
+	double getMin();
+
+	/**
+	 * Returns the interval maximum included value.
+	 * 
+	 * @return the maximum value
+	 */
+	double getMax();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IInterval.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedLegend.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+
+/**
+ * Information of the legend that allows to be represented graphically to the user
+ * 
+ */
+public interface IClassifiedLegend extends ILegend {
+	/**
+	 * Obtains the descriptions of the classes that are in the classification
+	 * @return DOCUMENT ME!
+	 */
+	String[] getDescriptions();
+
+	/**
+	 * Obtains the symbols of each class of the classification for the user.
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	ISymbol[] getSymbols();
+
+	/**
+	 * Obtains the values in relation with each class of the classification
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	Object[] getValues();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ISingleSymbolLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ISingleSymbolLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ISingleSymbolLegend.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {gvSIG}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+
+/**
+ * Legend based on one single symbol to use while rendering.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public interface ISingleSymbolLegend extends IVectorLegend {
+	
+	public static final String LEGEND_NAME = "SingleSymbol";
+	
+	ZSort getZSort();
+
+	void setZSort(ZSort zSort);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/ISingleSymbolLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/DrawingObservable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/DrawingObservable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/DrawingObservable.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+import org.gvsig.tools.observer.Observer;
+
+/**
+ * Interface for observable drawing operations.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public interface DrawingObservable {
+
+	/**
+	 * Adds a new {@link Observer}.
+	 * 
+	 * @param observer
+	 *            the {@link Observer} to add
+	 */
+	void addDrawingObserver(Observer observer);
+
+	/**
+	 * Deletes a registered drawing {@link Observer} from the list of registered
+	 * ones.
+	 * 
+	 * @param observer
+	 *            to delete from the registered ones
+	 */
+	void deleteDrawingObserver(Observer observer);
+
+	/**
+	 * Deletes all the registered drawing {@link Observer} objects. 
+	 */
+	void deleteDrawingObservers();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/DrawingObservable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialUniqueValueLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialUniqueValueLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialUniqueValueLegend.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.legend;
+
+
+import java.awt.Color;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+
+/**
+ * Interface for the legend with unique values.
+ *
+ */
+public interface IVectorialUniqueValueLegend extends IClassifiedVectorLegend {
+	
+	public static final String LEGEND_NAME = "VectorialUniqueValue";
+	
+    /**
+     * Establishes the symbol for the value which is the argument of the function.
+     *
+     * @param id index.
+     * @param symbol symbol.
+     */
+    void setValueSymbolByID(int id, ISymbol symbol);
+
+
+    /**
+     * Returns the symbols starting from an ID. It looks in m_ArrayKeys for the
+     * element ID and with this key obtains the FSymbol.
+
+     * @param key ID.
+     *
+     * @return symbol associated with the ID
+     */
+
+    // public FSymbol getSymbolByID(int ID);
+
+    /**
+     * Returns the symbols starting from its key.
+     *
+     * @param key ID.
+     *
+     * @return symbol associated with the key.
+     * @throws MapContextException 
+     */
+    public ISymbol getSymbolByValue(Object key);
+
+	/**
+	 * Returns the key related to a registered {@link ISymbol} or null if it is
+	 * not registered.
+	 * 
+	 * @param symbol
+	 *            to look for
+	 * @return the related key
+	 */
+	Object getSymbolKey(ISymbol symbol);
+
+	ZSort getZSort();
+
+	void setZSort(ZSort zSort);
+
+	Color[] getColorScheme();
+
+	void setColorScheme(Color[] colors);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialUniqueValueLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ISymbol_v2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ISymbol_v2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ISymbol_v2.java	(revision 42196)
@@ -0,0 +1,20 @@
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+public interface ISymbol_v2 extends ISymbol {
+
+    /**
+     * Set the id ob the symbol (the basename of file).
+     * This attribute is not persistent.
+     *
+     * @param id
+     */
+    public void setID(String id);
+
+    /**
+     * Get the id ob the symbol (the basename of file).
+     * This attribute is not persistent.
+     *
+     * @param id
+     */
+    public String getID();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IMultiLayerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IMultiLayerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IMultiLayerSymbol.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+
+/**
+ * Allows to create multi layer symbols using the composition of
+ * several symbols of the same type.Depending on the type of the symbols that are
+ * used to compose the final symbol, the user will have MultiLayerMarkerSymbol,
+ * MultiLayerLineSymbol,...
+ *
+ */
+
+public interface IMultiLayerSymbol extends ISymbol {
+
+	/**
+	 * Establishes a concret symbol for a layer
+	 *
+	 * @param index, index of the layer
+	 * @param layer, symbol to be "applied" to the layer
+	 * @throws IndexOutOfBoundsException
+	 */
+	public abstract void setLayer(int index, ISymbol layer)
+	throws IndexOutOfBoundsException;
+	/**
+	 * Changes the position of two layers in a multilayersymbol
+	 * @param index1, index of the layer
+	 * @param index2, index of the layer
+	 */
+	public abstract void swapLayers(int index1, int index2);
+	/**
+	 * Obtains  the symbol that "contains" a layer whose index is the argument of the method.
+	 * @param layerIndex
+	 * @return
+	 */
+	public abstract ISymbol getLayer(int layerIndex);
+	/**
+	 * Returns the number of layers
+	 * @return int
+	 */
+	public abstract int getLayerCount();
+
+	/**
+	 * Stacks a new symbol to the symbol list. The symbol is appended to the
+	 * list and, in terms of use, it will be the last symbol to be processed.
+	 * @param ISymbol newLayer
+	 */
+	public abstract void addLayer(ISymbol newLayer);
+	/**
+	 * Stacks a new symbol to the symbol list. The symbol is appended to the
+	 * list in the specified position.
+	 * @param ISymbol newLayer
+	 */
+	public abstract void addLayer(ISymbol newLayer, int layerIndex)
+	throws IndexOutOfBoundsException;
+
+	/**
+	 * TODO maybe push it up to ISymbol
+	 * @param layer
+	 * @return true if this symbol contains the removed one
+	 */
+	public abstract boolean removeLayer(ISymbol layer);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IMultiLayerSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolPreferences.java	(revision 42196)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import java.awt.Color;
+import java.awt.Font;
+
+/**
+ * Preferences for symbol configuration and default values.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public interface SymbolPreferences {
+
+	/**
+	 * Returns the file extension to use for persisted symbols.
+	 * 
+	 * @return the symbol file extension
+	 */
+	String getSymbolFileExtension();
+
+	/**
+	 * Sets the file extension to use for persisted symbols.
+	 * 
+	 * @param extension
+	 *            the file extension to use for persisted symbols
+	 */
+	void setSymbolFileExtension(String extension);
+
+	/**
+	 * Returns the default color to use for symbols.
+	 * 
+	 * @return the symbol default color
+	 */
+	Color getDefaultSymbolColor();
+
+	/**
+	 * Sets the default color to use for symbols.
+	 * 
+	 * @param defaultSymbolColor
+	 *            the symbol default color
+	 */
+	void setDefaultSymbolColor(Color defaultSymbolColor);
+
+	/**
+	 * Sets the default color for symbols to the original value.
+	 */
+	void resetDefaultSymbolColor();
+
+	/**
+	 * Returns the default fill color to use for symbols.
+	 * 
+	 * @return the default fill color
+	 */
+	Color getDefaultSymbolFillColor();
+
+	/**
+	 * Sets the default fill color to use for symbols.
+	 * 
+	 * @param defaultSymbolFillColor
+	 *            the default fill color
+	 */
+	void setDefaultSymbolFillColor(Color defaultSymbolFillColor);
+
+	/**
+	 * Sets the default fill color for symbols to the original value.
+	 */
+	void resetDefaultSymbolFillColor();
+
+	/**
+	 * Returns if the default symbol fill color has been generated in a aleatory
+	 * way.
+	 * 
+	 * @return if the default symbol fill color is aleatory
+	 */
+	boolean isDefaultSymbolFillColorAleatory();
+
+	/**
+	 * Sets if the default symbol fill color has been generated in a aleatory
+	 * way.
+	 * 
+	 * @param defaultSymbolFillColorAleatory
+	 *            if the default symbol fill color is aleatory
+	 */
+	void setDefaultSymbolFillColorAleatory(
+			boolean defaultSymbolFillColorAleatory);
+
+	/**
+	 * Sets if the default symbol fill color is aleatory to the default value.
+	 */
+	void resetDefaultSymbolFillColorAleatory();
+
+	/**
+	 * Returns the default font to use for symbols.
+	 * 
+	 * @return the default symbol font
+	 */
+	Font getDefaultSymbolFont();
+
+	/**
+	 * Sets the default font to use for symbols.
+	 * 
+	 * @param defaultSymbolFont
+	 *            the default symbol font
+	 */
+	void setDefaultSymbolFont(Font defaultSymbolFont);
+
+	/**
+	 * Sets the default font to use for symbols to the original value.
+	 */
+	void resetDefaultSymbolFont();
+
+	/**
+	 * Returns the path to the symbol library, where the persisted symbols can
+	 * be found.
+	 * 
+	 * @return the path to the symbol library
+	 */
+	String getSymbolLibraryPath();
+
+	/**
+	 * Sets the path to the symbol library, where the persisted symbols can be
+	 * found.
+	 * 
+	 * @param symbolLibraryPath
+	 *            the path to the symbol library
+	 */
+	void setSymbolLibraryPath(String symbolLibraryPath);
+
+	/**
+	 * Sets the path to the symbol library to the original value.
+	 */
+	void resetSymbolLibraryPath();
+
+	/**
+	 * Returns the unit that will be used when creating new symbols with
+	 * Cartographic support.
+	 * 
+	 * @return the default cartographic support measure unit
+	 * @see CartographicSupport#getUnit()
+	 */
+	int getDefaultCartographicSupportMeasureUnit();
+
+	/**
+	 * Sets the unit that will be used when creating new symbols with
+	 * Cartographic support.
+	 * 
+	 * @param defaultCartographicSupportMeasureUnit
+	 *            the default cartographic support measure unit
+	 * @see CartographicSupport#setUnit()
+	 */
+	void setDefaultCartographicSupportMeasureUnit(
+			int defaultCartographicSupportMeasureUnit);
+
+	/**
+	 * Returns the reference system that will be used when creating new symbols
+	 * with Cartographic support.
+	 * 
+	 * @return the cartographic reference system
+	 * @see CartographicSupport#PAPER
+	 * @see CartographicSupport#WORLD
+	 */
+	int getDefaultCartographicSupportReferenceSystem();
+
+	/**
+	 * Sets the reference system that will be used when creating new symbols
+	 * with Cartographic support.
+	 * 
+	 * @param defaultCartographicSupportReferenceSystem
+	 *            the cartographic reference system
+	 * @see CartographicSupport#PAPER
+	 * @see CartographicSupport#WORLD
+	 */
+	void setDefaultCartographicSupportReferenceSystem(
+			int defaultCartographicSupportReferenceSystem);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IPrintable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IPrintable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IPrintable.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.geom.Geometry;
+
+public interface IPrintable {
+	public void print(Graphics2D g,
+					  AffineTransform at,
+					  Geometry shape,
+					  PrintAttributes properties);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IPrintable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ISymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ISymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ISymbol.java	(revision 42196)
@@ -0,0 +1,200 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.lang.Cloneable;
+
+
+/**
+ *
+ * Interface for symbols.It is the most general one which is implemented by other
+ * specific symbols.For this reason this interface has a method to obtain the derived
+ * version of a common symbol(apart from others). The main purpose is to offer a set of
+ * symbols that will be part of the FMap kernel and allow the developer to add new symbols
+ * without changes in the initial implementation.
+ *
+ *
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface ISymbol extends Persistent, IPrintable, Cloneable {
+
+	public static Color SELECTION_COLOR = Color.YELLOW;
+
+	/**
+	 * Returns the derived version of the symbol that will be used to draw the
+	 * feature when it is selected.
+	 * @return <b>ISymbol</b> applied to a feature when it has been selected.
+	 */
+	public ISymbol getSymbolForSelection();
+
+	/**
+	 * Used when a symbol is going to be drawn.The method to do
+	 * it will depend on the derived version of the symbol.
+	 * @param g
+	 * @param affineTransform
+	 * @param shp
+	 * @param cancel TODO
+	 */
+	public void draw(Graphics2D g, AffineTransform affineTransform, Geometry geom, Feature f, Cancellable cancel);
+
+	/**
+	 * <p>
+	 * Returns <b>the distance between the shape's bounding box and the
+	 * symbol-that-represents-this-shape's bounding box</b> in a two-length-float
+	 * array passed as parameter.<br>
+	 * </p>
+	 * <p>
+	 * After this method returns, the float array passed will contain two values
+	 * representing <b>the amount of pixels</b> separating each of the X (first element)
+	 * and Y (second element) axes.<br>
+	 * </p>
+	 * <p>
+	 * This distance maybe dependent on:
+	 * 	<ol>
+	 * 		<li>
+	 * 			<b>The ViewPort</b>: if the symbol is an instance of CartographicSupport
+	 * 			the units it uses are not pixels and the reference system is
+	 * 			CarthographicSupport.WORLD.
+	 * 		</li>
+	 * 		<li>
+	 * 			<b>The target rendering context's dpi (dots-per-inch)</b>: if the symbol
+	 * 			is an instance of CartographicSupport the units it uses are not pixels and
+	 * 			CarthographicSupport.PAPER.
+	 * 		</li>
+	 * 	</ol>
+	 * <br>
+	 * </p>
+	 * <p>
+	 * And in any other case, if the unit of the symbol is pixels or the symbol is not
+	 * even an instance of CartographicSupport, the returning values are only
+	 * defined by the symbol and are not calculated.
+	 * </p>
+	 * @param ViewPort viewPort
+	 * @param Shape shp
+	 * @param int dpi
+	 * @param float[] distances, the array of floats where to store the distances in x and y axis
+	 */
+	public void getPixExtentPlus(Geometry geom, float[] distances, ViewPort viewPort, int dpi);
+	
+	
+	/**
+	 * Informs that the geometry will be represented with that symbol in just one pixel or dot
+	 * 
+	 * 
+	 * 
+	 * @param geom
+	 * @param positionOfDotOrPixel (out) filled with pixel or dot location
+	 * @param viewPort
+	 * @param dpi
+	 * @return
+	 */
+	public boolean isOneDotOrPixel(Geometry geom, double[] positionOfDotOrPixel,
+			ViewPort viewPort, int dpi);
+
+	/**
+	 * Returns the rgb of the symbol when it is drawn like a point.
+	 *
+	 * @return rgb of the symbol.
+	 */
+	public int getOnePointRgb();
+
+
+
+
+
+	/**
+	 * The description is a human-readable text used to label it when show in a symbol menu or something like that.
+	 * @return   description of this symbol.
+	 * @uml.property  name="description"
+	 */
+	public String getDescription();
+
+	/**
+	 * Tells whether the shape of the symbol will be drawn or not.
+	 *
+	 * @return <b>true</b> if Shape must be drawn. Useful if you are labelling
+	 */
+	public boolean isShapeVisible();
+
+	/**
+	 * Sets the description of this symbol
+	 * @param   desc, a string with the description
+	 * @see   ISymbol.getDescription();
+	 * @uml.property  name="description"
+	 */
+	public void setDescription(String desc);
+
+	/**
+	 * The use of this method -and its mechanism- is being valorated. It probably
+	 * will be <b>deprecated</b>.
+	 * @return FSymbol constants. I think it is better to use isSuitableFor
+	 *
+	 */
+	public int getSymbolType();
+
+	/**
+	 * True if this symbol is ok for the geometry. For example, a FillSymbol will
+	 * be suitable for a Polygon.
+	 * @param geom
+	 * @return
+	 */
+	public boolean isSuitableFor(Geometry geom);
+
+	/**
+	 * Useful to render the symbol inside the TOC, or inside little
+	 * rectangles. For example, think about rendering a Label with size
+	 * in meters => You will need to specify a size in pixels.
+	 * Of course, you can also to choose to render a prepared image, etc.
+	 * @param scaleInstance
+	 * @param r
+	 * @param properties TODO
+	 * @param g2
+	 * @throws SymbolDrawingException TODO
+	 */
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException;
+	
+	/**
+	 * Returns the {@link Color} to use to render the symbol.
+	 * @param 
+	 * @return  the {@link Color} to use to render the symbol
+	 */
+	public Color getColor();
+	
+	/**
+	 * Sets the {@link Color} to use to render the symbol.
+	 * @param color to render the symbol
+	 */
+	public void setColor(Color color);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ISymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolDrawingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolDrawingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolDrawingException.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import org.gvsig.fmap.mapcontext.Messages;
+
+/**
+ * Exception thrown when a symbol cannot be drawn. The type of the exception
+ * will determine the cause.
+ * <ol>
+ * 	<li><b>Unsupported set of settings</b>: getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS</li>
+ * 	<li><b>Shape type mismatch</b>: getType() == SymbolDrawingException.SHAPETYPE_MISMATCH</li>
+ * </ol>
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class SymbolDrawingException extends Exception {
+	private static final long serialVersionUID = 4059410328246182074L;
+	public static final int UNSUPPORTED_SET_OF_SETTINGS = 0;
+	public static final int SHAPETYPE_MISMATCH = 1;
+	public static final String STR_UNSUPPORTED_SET_OF_SETTINGS = Messages.getString("unsupported_set_of_settings");
+	
+	private int type;
+	
+	public int getType() {
+		return type;
+	}
+	/**
+	 * Creates a new instance of this exception.
+	 * <ol>
+	 * 	<li><b>Unsupported set of settings</b>: getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS</li>
+	 * 	<li><b>Shape type mismatch</b>: getType() == SymbolDrawingException.SHAPETYPE_MISMATCH</li>
+	 * </ol>
+	 */ 
+	public SymbolDrawingException(int type) {
+		this.type = type;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolDrawingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolManager.java	(revision 42196)
@@ -0,0 +1,290 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import java.awt.Color;
+import java.io.File;
+import java.io.FileFilter;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.MapContextRuntimeException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.task.CancellableTask;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Symbols management: creation, registration, etc.
+ * 
+ * @author gvSIG team
+ */
+public interface SymbolManager {
+
+    public static final String LEGEND_FILE_EXTENSION = ".gvsleg";
+    public static final String LABELINGSTRATEGY_FILE_EXTENSION = ".gvslab";
+    
+	/**
+	 * Loads the symbols persisted into a folder. It loads the symbols through
+	 * the use of the current {@link PersistenceManager}, loading all files
+	 * found into the folder.
+	 * 
+	 * @param folder
+	 *            to load the persisted symbols from
+	 * @return the list of loaded symbols
+	 * @throws SymbolException
+	 *             if there is an error loading the symbols
+	 */
+	ISymbol[] loadSymbols(File folder) throws SymbolException;
+
+	/**
+	 * Loads the symbols persisted into a folder. It loads the symbols through
+	 * the use of the current {@link PersistenceManager}, loading the files
+	 * found into the folder which apply to the provided filter.
+	 * 
+	 * @param folder
+	 *            to load the persisted symbols from
+	 * @param filter
+	 *            to apply to know which files to load
+	 * @return the list of loaded symbols
+	 * @throws SymbolException
+	 *             if there is an error loading the symbols
+	 */
+	ISymbol[] loadSymbols(File folder, FileFilter filter)
+			throws SymbolException;
+	
+	public CancellableTask loadSymbols(File folder, FileFilter filter, Visitor visitor);
+	/**
+	 * Persists a {@link ISymbol} into the given folder, with the given file
+	 * name.
+	 * 
+	 * @param symbol
+	 *            to persist
+	 * @param fileName
+	 *            of the file to create
+	 * @param folder
+	 *            where to create the file
+	 * @throws SymbolException
+	 *             if there is an error persisting the symbol, or the file to
+	 *             create already exists
+	 */
+	void saveSymbol(ISymbol symbol, String fileName, File folder)
+			throws SymbolException;
+
+	/**
+	 * Persists a {@link ISymbol} into the given folder, with the given file
+	 * name.
+	 * 
+	 * @param symbol
+	 *            to persist
+	 * @param fileName
+	 *            of the file to create
+	 * @param folder
+	 *            where to create the file
+	 * @param overwrite
+	 *            what to do if the file to create already exists
+	 * @throws SymbolException
+	 *             if there is an error persisting the symbol, or the file to
+	 *             create already exists and overwrite is false
+	 */
+	void saveSymbol(ISymbol symbol, String fileName, File folder,
+			boolean overwrite) throws SymbolException;
+
+	/**
+	 * Returns the current {@link SymbolPreferences}.
+	 * 
+	 * @return the current {@link SymbolPreferences}
+	 */
+	SymbolPreferences getSymbolPreferences();
+
+	/**
+	 * Creates a new {@link ISymbol}.
+	 * 
+	 * @param symbolName
+	 *            the name of the symbol to create
+	 * @return a new {@link ISymbol}
+	 * @throws MapContextRuntimeException
+	 *             if there is an error creating the symbol
+	 */
+	ISymbol createSymbol(String symbolName) throws MapContextRuntimeException;
+
+	/**
+	 * Creates a new {@link ISymbol} which can be used to render the given
+	 * {@link Geometry} type.
+	 * 
+	 * @param geomType
+	 *            the {@link Geometry} type to render
+	 * @return a new {@link ISymbol}
+	 * @throws MapContextRuntimeException
+	 *             if there is an error creating the symbol
+	 */
+	ISymbol createSymbol(int geomType) throws MapContextRuntimeException;
+
+	/**
+	 * Creates a new {@link ISymbol} with the given {@link Color}.
+	 * 
+	 * @param symbolName
+	 *            the name of the symbol to create
+	 * @param color
+	 *            the color for the symbol
+	 * @return a new {@link ISymbol}
+	 * @throws MapContextRuntimeException
+	 *             if there is an error creating the symbol
+	 */
+	ISymbol createSymbol(String symbolName, Color color)
+			throws MapContextRuntimeException;
+
+	/**
+	 * Creates a new {@link ISymbol} which can be used to render the given
+	 * {@link Geometry} type, with the given {@link Color}.
+	 * 
+	 * @param geomType
+	 *            the {@link Geometry} type to render
+	 * @param color
+	 *            the color for the symbol
+	 * @return a new {@link ISymbol}
+	 * @throws MapContextRuntimeException
+	 *             if there is an error creating the symbol
+	 */
+	ISymbol createSymbol(int geomType, Color color)
+			throws MapContextRuntimeException;
+
+	/**
+	 * Creates a new {@link IMultiLayerSymbol}.
+	 * 
+	 * @param symbolName
+	 *            the name of the symbol to create
+	 * @return a new {@link IMultiLayerSymbol}
+	 * @throws MapContextRuntimeException
+	 *             if there is an error creating the symbol
+	 */
+	IMultiLayerSymbol createMultiLayerSymbol(String symbolName)
+			throws MapContextRuntimeException;
+
+	/**
+	 * Creates a new {@link IMultiLayerSymbol} which can be used to render the
+	 * given {@link Geometry} type.
+	 * 
+	 * @param geomType
+	 *            the {@link Geometry} type to render
+	 * @return a new {@link IMultiLayerSymbol}
+	 * @throws MapContextRuntimeException
+	 *             if there is an error creating the symbol
+	 */
+	IMultiLayerSymbol createMultiLayerSymbol(int geomType)
+			throws MapContextRuntimeException;
+
+	/**
+	 * Registers a {@link ISymbol} implementation class with a name. This way
+	 * the symbol class is not related to any geometry type, so it can be
+	 * created only through the {@link #createSymbol(String)} method.
+	 * 
+	 * @param symbolName
+	 *            the symbol name
+	 * @param symbolClass
+	 *            the symbol implementation class
+	 * @throws MapContextRuntimeException
+	 *             if the provided class does not implement the ISymbol
+	 *             interface
+	 */
+	void registerSymbol(String symbolName, Class symbolClass)
+			throws MapContextRuntimeException;
+
+	/**
+	 * Registers a {@link ISymbol} implementation class with a name and a list
+	 * of geometry types which the symbol is able to render.
+	 * 
+	 * @param symbolName
+	 *            the symbol name
+	 * @param geomTypes
+	 *            the list of geometry types the symbol is able to render
+	 * @param symbolClass
+	 *            the symbol implementation class
+	 * @throws MapContextRuntimeException
+	 *             if the provided class does not implement the ISymbol
+	 *             interface
+	 */
+	void registerSymbol(String symbolName, int[] geomTypes, Class symbolClass)
+			throws MapContextException;
+
+	/**
+	 * Registers a {@link IMultiLayerSymbol} implementation class with a name.
+	 * This way the symbol class is not related to any geometry type, so it can
+	 * be created only through the {@link #createMultiLayerSymbol(String)}
+	 * method.
+	 * 
+	 * @param symbolName
+	 *            the symbol name
+	 * @param symbolClass
+	 *            the symbol implementation class
+	 * @throws MapContextRuntimeException
+	 *             if the provided class does not implement the
+	 *             {@link IMultiLayerSymbol} interface
+	 */
+	void registerMultiLayerSymbol(String symbolName, Class symbolClass)
+			throws MapContextRuntimeException;
+
+	/**
+	 * Registers a {@link IMultiLayerSymbol} implementation class with a name
+	 * and a list of geometry types which the symbol is able to render.
+	 * 
+	 * @param symbolName
+	 *            the symbol name
+	 * @param geomTypes
+	 *            the list of geometry types the symbol is able to render
+	 * @param symbolClass
+	 *            the symbol implementation class
+	 * @throws MapContextRuntimeException
+	 *             if the provided class does not implement the
+	 *             {@link IMultiLayerSymbol} interface
+	 */
+	void registerMultiLayerSymbol(String symbolName, int[] geomTypes,
+			Class symbolClass) throws MapContextRuntimeException;
+
+	/**
+	 * Returns an instance of {@link IWarningSymbol}.
+	 * 
+	 * TODO: revisar el uso de esto, a ver si es necesario o se puede ocultar
+	 * dentro de la implementaci�n.
+	 * 
+	 * @param message
+	 * @param symbolDesc
+	 * @param symbolDrawExceptionType
+	 * @return the warning symbol
+	 * @throws MapContextRuntimeException
+	 */
+	IWarningSymbol getWarningSymbol(String message, String symbolDesc,
+			int symbolDrawExceptionType) throws MapContextRuntimeException;
+	
+	void setSymbolPreferences(SymbolPreferences symbolPreferences);
+        
+        public List getSymbolLibraryNames();
+        
+        public ISymbol getSymbol(String libraryName, String symbolID) throws SymbolException ;
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SaveSymbolException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SaveSymbolException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SaveSymbolException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.impl;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
+
+/**
+ * Exception thrown when there is an error while a symbol is being persisted. 
+ * @author gvSIG team
+ */
+public class SaveSymbolException extends SymbolException {
+
+	private static final long serialVersionUID = 2386696269496820720L;
+
+	private static final String KEY = "SaveSymbolException";
+
+    private static final String MESSAGE = "Error while persisting a symbol";
+    
+	public SaveSymbolException(Throwable cause) {
+		super(MESSAGE, cause, KEY, serialVersionUID);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SaveSymbolException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/LoadSymbolException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/LoadSymbolException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/LoadSymbolException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {gvSIG} {Create Symbol management API}
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.impl;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
+
+/**
+ * Exception thrown when there is an error while a persisted symbol is being
+ * loaded.
+ * 
+ * @author gvSIG team
+ */
+public class LoadSymbolException extends SymbolException {
+
+	private static final long serialVersionUID = 3182880573327780775L;
+
+	private static final String KEY = "LoadSymbolException";
+
+	private static final String MESSAGE = "Error while loading a persisted symbol";
+
+	public LoadSymbolException(Throwable cause) {
+		super(MESSAGE, cause, KEY, serialVersionUID);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/LoadSymbolException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolManager.java	(revision 42196)
@@ -0,0 +1,642 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.impl;
+
+/*
+ * Based on portions of code from www.ColorBrewer.org
+ *
+ * Colors from www.ColorBrewer.org by Cynthia A. Brewer,
+ * Geography, Pennsylvania State University.
+ * Using groups of 4 colors from the 9 Diverging Schemes
+ * 4 * 9 = 36 colors
+ */
+
+
+import java.awt.Color;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.filefilter.FileFilterUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.mapcontext.MapContextRuntimeException;
+import org.gvsig.fmap.mapcontext.impl.InvalidRegisteredClassException;
+import org.gvsig.fmap.mapcontext.impl.RegisteredClassInstantiationException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol_v2;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.CancellableTask;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default {@link SymbolManager} implementation.
+ *
+ * @author gvSIG team
+ */
+public class DefaultSymbolManager implements SymbolManager {
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultSymbolManager.class);
+
+    private SymbolPreferences symbolPreferences
+            = new DefaultSymbolPreferences();
+
+    private Map symbolsByName = Collections.synchronizedMap(new HashMap());
+
+    private Map symbolsByShapeType = Collections.synchronizedMap(new HashMap());
+
+    private Map multiLineSymbolsByName
+            = Collections.synchronizedMap(new HashMap());
+
+    private Map multiLineSymbolsByShapeType
+            = Collections.synchronizedMap(new HashMap());
+
+    private IWarningSymbol warningSymbol;
+
+    private Object warningSymbolLock = new Object();
+
+    public ISymbol[] loadSymbols(File folder) throws SymbolException {
+        return loadSymbols(folder, null);
+    }
+
+    public ISymbol[] loadSymbols(File folder, FileFilter fileFilter)
+            throws SymbolException {
+        // TODO: add symbol caching
+
+        if (folder.exists()) {
+
+            File[] symbolFiles = null;
+            if (fileFilter == null) {
+                symbolFiles = folder.listFiles();
+            } else {
+                symbolFiles = folder.listFiles(fileFilter);
+            }
+
+            if (symbolFiles != null) {
+                TaskStatusManager tm = ToolsLocator.getTaskStatusManager();
+                SimpleTaskStatus status = tm.createDefaultSimpleTaskStatus("Load symbols");
+                status.setRangeOfValues(0, symbolFiles.length);
+                status.setAutoremove(true);
+                status.add();
+
+                /*
+                 * Sorting by file name before loading.
+                 * The problem here is that some
+                 * descriptions can be empty, so sorting using description
+                 * can have strange behavior. Sorting by file name is not
+                 * very elegant, though.
+                 */
+                status.message("sorting symbols");
+                Arrays.sort(symbolFiles, new Comparator() {
+                    public int compare(Object o1, Object o2) {
+                        File f1 = (File) o1;
+                        File f2 = (File) o2;
+                        return f1.getName().compareTo(f2.getName());
+                    }
+                });
+
+                ISymbol[] symbols = null;
+                try {
+                    symbols = new ISymbol[symbolFiles.length];
+                    for (int i = 0; i < symbolFiles.length; i++) {
+                        status.setCurValue(i);
+                        File symbolFile = symbolFiles[i];
+                        try {
+                            symbols[i] = loadSymbol(symbolFile);
+                        } catch(Throwable th) {
+                            logger.warn("Can't load symbol '"+symbolFile.getAbsolutePath()+"'.",th);
+                        }
+                    }
+
+                } finally {
+                    status.terminate();
+                }
+                return symbols;
+            }
+        }
+
+        return null;
+    }
+
+    public class SymbolsLoaderTask extends AbstractMonitorableTask {
+
+        private File folder;
+        private FileFilter filter;
+        private Visitor visitor;
+
+        public SymbolsLoaderTask(File folder, FileFilter filter, Visitor visitor) {
+            super("Load symbols", true);
+            this.folder = folder;
+            this.filter = filter;
+            this.visitor = visitor;
+            if (folder == null) {
+                throw new IllegalArgumentException("folder is null");
+            }
+            if (visitor == null) {
+                throw new IllegalArgumentException("visitor is null");
+            }
+        }
+
+        private File[] getFiles() {
+            if (filter == null) {
+                return folder.listFiles();
+            } else {
+                return folder.listFiles(filter);
+            }
+        }
+
+        private String getVisitorName() {
+            String s = visitor.toString() + "/" + visitor.getClass().getName();
+            return s;
+        }
+
+        private void visit(final File file, final ISymbol symbol) throws VisitCanceledException {
+            try {
+                visitor.visit(symbol);
+            } catch (BaseException e) {
+                logger.warn("Can't call visit '" + getVisitorName() + "' to offer the symbol '" + file.getAbsolutePath() + "'.", e);
+            }
+        }
+
+        public void run() {
+            // TODO: add symbol caching
+            try {
+                logger.info("[SymbolsLoaderTask" + this.getId() + "] process initited.");
+                if (folder.exists()) {
+                    taskStatus.setAutoremove(true);
+                    taskStatus.message("preparing");
+                    File[] symbolFiles = getFiles();
+
+                    if (symbolFiles != null) {
+                        taskStatus.setRangeOfValues(0, symbolFiles.length);
+
+                        /*
+                         * Sorting by file name before loading. The problem here
+                         * is that some descriptions can be empty, so sorting
+                         * using description can have strange behavior. Sorting
+                         * by file name is not very elegant, though.
+                         */
+                        taskStatus.message("sorting");
+                        Arrays.sort(symbolFiles, new Comparator() {
+                            public int compare(Object o1, Object o2) {
+                                File f1 = (File) o1;
+                                File f2 = (File) o2;
+                                return f1.getName().compareTo(f2.getName());
+                            }
+                        });
+
+                        taskStatus.message("loading");
+                        for (int i = 0; i < symbolFiles.length; i++) {
+                            taskStatus.setCurValue(i);
+                            if (taskStatus.isCancellationRequested()) {
+                                logger.info("[SymbolsLoaderTask" + this.getId() + "] process canceled.");
+                                break;
+                            }
+                            ISymbol symbol = null;
+                            try {
+                                symbol = loadSymbol(symbolFiles[i]);
+                                visit(symbolFiles[i], symbol);
+                            } catch (VisitCanceledException e) {
+                                break;
+                            } catch (Throwable e) {
+                                logger.warn("Can't load symbol '"
+                                        + symbolFiles[i].getAbsolutePath()
+                                        + "'.", e);
+                            }
+                        }
+                        taskStatus.message("");
+
+                    }
+                }
+
+            } finally {
+                taskStatus.terminate();
+            }
+            logger.info("[SymbolsLoaderTask" + this.getId() + "] process terminated.");
+
+        }
+    }
+
+    public CancellableTask loadSymbols(File folder, FileFilter filter, Visitor visitor) {
+        SymbolsLoaderTask task = new SymbolsLoaderTask(folder, filter, visitor);
+        task.start();
+        return task;
+    }
+
+    public void saveSymbol(ISymbol symbol, String fileName, File folder)
+            throws SymbolException {
+        saveSymbol(symbol, fileName, folder, false);
+
+    }
+
+    public void saveSymbol(ISymbol symbol, String fileName, File folder,
+            boolean overwrite) throws SymbolException {
+        // TODO: add symbol caching
+
+        PersistenceManager persistenceManager = ToolsLocator
+                .getPersistenceManager();
+
+        File symbolFile = new File(folder, fileName);
+        if (!overwrite && symbolFile.exists()) {
+            throw new SymbolFileAlreadyExistsException(symbolFile);
+        }
+
+        try {
+            FileOutputStream fos = new FileOutputStream(symbolFile);
+
+            persistenceManager.saveState(persistenceManager.getState(symbol),
+                    fos);
+
+            fos.flush();
+            fos.close();
+        } catch (PersistenceException e) {
+            throw new SaveSymbolException(e);
+        } catch (IOException e) {
+            throw new SaveSymbolException(e);
+        }
+        if (symbol instanceof ISymbol_v2) {
+            ISymbol_v2 symbolv2 = (ISymbol_v2) symbol;
+            if (StringUtils.isBlank(symbolv2.getID())) {
+                symbolv2.setID(FilenameUtils.getBaseName(fileName));
+            }
+        }
+    }
+
+    /**
+     * Loads a persisted symbol from the given file.
+     */
+    private ISymbol loadSymbol(File file) throws SymbolException {
+        if (file.exists()) {
+            try {
+                FileInputStream fis = new FileInputStream(file);
+
+                PersistenceManager persistenceManager = ToolsLocator
+                        .getPersistenceManager();
+
+                PersistentState state = persistenceManager.loadState(fis);
+                ISymbol symbol = (ISymbol) persistenceManager.create(state);
+
+                fis.close();
+                if (symbol instanceof ISymbol_v2) {
+                    ISymbol_v2 symbolv2 = (ISymbol_v2) symbol;
+                    symbolv2.setID(FilenameUtils.getBaseName(file.getName()));
+                }
+                return symbol;
+            } catch (PersistenceException e) {
+                throw new LoadSymbolException(e);
+            } catch (IOException e) {
+                throw new LoadSymbolException(e);
+            }
+        }
+
+        return null;
+    }
+
+    public SymbolPreferences getSymbolPreferences() {
+        return symbolPreferences;
+    }
+
+    public ISymbol createSymbol(String symbolName)
+            throws MapContextRuntimeException {
+        return createSymbol(symbolName, (Class) symbolsByName.get(symbolName),
+                ISymbol.class);
+    }
+
+    public ISymbol createSymbol(int shapeType)
+            throws MapContextRuntimeException {
+        String symbolName
+                = (String) symbolsByShapeType.get(new Integer(shapeType));
+
+        return symbolName == null ? null : createSymbol(symbolName);
+    }
+
+    public ISymbol createSymbol(String symbolName, Color color)
+            throws MapContextRuntimeException {
+        ISymbol symbol = createSymbol(symbolName);
+
+        if (symbol != null) {
+            symbol.setColor(color);
+        }
+
+        return symbol;
+    }
+
+    public ISymbol createSymbol(int shapeType, Color color)
+            throws MapContextRuntimeException {
+        String symbolName
+                = (String) symbolsByShapeType.get(new Integer(shapeType));
+
+        return symbolName == null ? null : createSymbol(symbolName, color);
+    }
+
+    public IMultiLayerSymbol createMultiLayerSymbol(String symbolName)
+            throws MapContextRuntimeException {
+        return (IMultiLayerSymbol) createSymbol(symbolName,
+                (Class) multiLineSymbolsByName.get(symbolName),
+                IMultiLayerSymbol.class);
+    }
+
+    public IMultiLayerSymbol createMultiLayerSymbol(int shapeType)
+            throws MapContextRuntimeException {
+        String symbolName
+                = (String) multiLineSymbolsByShapeType.get(new Integer(shapeType));
+
+        return symbolName == null ? null : createMultiLayerSymbol(symbolName);
+    }
+
+    public void registerSymbol(String symbolName, Class symbolClass)
+            throws MapContextRuntimeException {
+        if (symbolClass == null || !ISymbol.class.isAssignableFrom(symbolClass)) {
+            throw new InvalidRegisteredClassException(ISymbol.class,
+                    symbolClass, symbolName);
+        }
+        symbolsByName.put(symbolName, symbolClass);
+    }
+
+    public void registerSymbol(String symbolName, int[] shapeTypes,
+            Class symbolClass) throws MapContextRuntimeException {
+        registerSymbol(symbolName, symbolClass);
+        if (shapeTypes != null) {
+            for (int i = 0; i < shapeTypes.length; i++) {
+                symbolsByShapeType.put(new Integer(shapeTypes[i]), symbolName);
+            }
+        }
+    }
+
+    public void registerMultiLayerSymbol(String symbolName, Class symbolClass)
+            throws MapContextRuntimeException {
+        if (symbolClass == null
+                || !IMultiLayerSymbol.class.isAssignableFrom(symbolClass)) {
+            throw new InvalidRegisteredClassException(IMultiLayerSymbol.class,
+                    symbolClass, symbolName);
+        }
+
+        multiLineSymbolsByName.put(symbolName, symbolClass);
+    }
+
+    public void registerMultiLayerSymbol(String symbolName, int[] shapeTypes,
+            Class symbolClass) throws MapContextRuntimeException {
+        registerMultiLayerSymbol(symbolName, symbolClass);
+        if (shapeTypes != null) {
+            for (int i = 0; i < shapeTypes.length; i++) {
+                multiLineSymbolsByShapeType.put(new Integer(shapeTypes[i]),
+                        symbolName);
+            }
+        }
+    }
+
+    public IWarningSymbol getWarningSymbol(String message, String symbolDesc,
+            int symbolDrawExceptionType) throws MapContextRuntimeException {
+        synchronized (warningSymbolLock) {
+            if (warningSymbol == null) {
+                warningSymbol = (IWarningSymbol) createSymbol("warning");
+            }
+        }
+
+        // TODO: set those values as parameter values in the draw method.
+        warningSymbol.setDescription(symbolDesc);
+        warningSymbol.setMessage(message);
+        warningSymbol.setDrawExceptionType(symbolDrawExceptionType);
+
+        return warningSymbol;
+    }
+
+    private ISymbol createSymbol(String symbolName, Class symbolClass,
+            Class expectedType) throws MapContextRuntimeException {
+        ISymbol symbol;
+        try {
+            symbol
+                    = (ISymbol) (symbolClass == null ? null
+                    : symbolClass.newInstance());
+        } catch (InstantiationException e) {
+            throw new RegisteredClassInstantiationException(expectedType,
+                    symbolClass, symbolName, e);
+        } catch (IllegalAccessException e) {
+            throw new RegisteredClassInstantiationException(expectedType,
+                    symbolClass, symbolName, e);
+        }
+
+        Color the_color = null;
+
+        if (getSymbolPreferences().isDefaultSymbolFillColorAleatory()) {
+
+            the_color = getRandomBrewerBasedColor();
+
+        } else {
+            // not random
+            the_color = getSymbolPreferences().getDefaultSymbolFillColor();
+        }
+        symbol.setColor(the_color);
+        // Perform this initialization into the Symbol implementation
+        // if (symbol instanceof CartographicSupport) {
+        // CartographicSupport cs = (CartographicSupport) symbol;
+        // cs.setUnit(getDefaultCartographicSupportMeasureUnit());
+        // cs
+        // .setReferenceSystem(getDefaultCartographicSupportReferenceSystem();
+        // }
+
+        return symbol;
+    }
+
+    public void setSymbolPreferences(SymbolPreferences symbolPreferences) {
+        this.symbolPreferences = symbolPreferences;
+    }
+
+    public List getSymbolLibraryNames() {
+        File rootfolder = new File(this.getSymbolPreferences().getSymbolLibraryPath());
+        Collection libraries = FileUtils.listFiles(rootfolder, FileFilterUtils.directoryFileFilter(), null);
+        List l = new ArrayList();
+        l.addAll(libraries);
+        return l;
+    }
+
+    public ISymbol getSymbol(String libraryName, String symbolID) throws SymbolException {
+        Collection symbols = null;
+        File rootfolder = null;
+        try {
+            rootfolder = new File(this.getSymbolPreferences().getSymbolLibraryPath());
+            symbols = FileUtils.listFiles(rootfolder,
+                    FileFilterUtils.nameFileFilter(symbolID + getSymbolPreferences().getSymbolFileExtension()),
+                    FileFilterUtils.trueFileFilter()
+            );
+        } catch(Exception ex) {
+            logger.warn("Can't get symbol from symbol library (library:'"+libraryName+"', symbol:'"+symbolID+"', symbolLibraryPath'"+rootfolder+"')", ex);
+        }
+        if (symbols == null) {
+            return null;
+        }
+        if (symbols.isEmpty()) {
+            return null;
+        }
+
+        File f = null;
+        try {
+            f = (File) symbols.iterator().next();
+            ISymbol symbol = loadSymbol(f);
+            return symbol;
+        } catch(Exception ex) {
+            String fname = ((f==null)?"Null":f.getAbsolutePath());
+            logger.warn("Can't load symbol from symbol library (library:'"+libraryName+"', symbol:'"+symbolID+"', symbolLibraryPath'"+rootfolder+"', symbolFile:'"+fname+"')", ex);
+        }
+        return null;
+    }
+
+    /**
+     *
+     * @param col
+     * @return color 1/3 closer to black
+     */
+    public static Color darker(Color col) {
+        return new Color(
+                (2 * col.getRed()) / 3,
+                (2 * col.getGreen()) / 3,
+                (2 * col.getBlue()) / 3,
+                col.getAlpha());
+    }
+
+    /**
+     *
+     * @param col
+     * @return color 1/3 closer to white
+     */
+    public static Color lighter(Color col) {
+        Color resp = invert(col);
+        resp = darker(resp);
+        return invert(resp);
+    }
+
+    /**
+     *
+     * @param col
+     * @return inverted color (inverts each band, same alpha)
+     */
+    public static Color invert(Color col) {
+        return new Color(
+                255 - col.getRed(),
+                255 - col.getGreen(),
+                255 - col.getBlue(),
+                col.getAlpha());
+    }
+
+    private static Color getRandomBrewerBasedColor() {
+
+        int ind = rnd.nextInt(BREWER_COLOR.length);
+        Color resp = BREWER_COLOR[ind];
+        ind = rnd.nextInt(100);
+        if (ind > 66) {
+            resp = darker(resp);
+        } else {
+            if (ind > 33) {
+                resp = lighter(resp);
+            }
+            // ...else resp remains the same
+        }
+
+        // finally add some dark noise 
+        resp = addDarkNoise(resp);
+        return resp;
+    }
+
+    private static Color addDarkNoise(Color c) {
+        int r = Math.max(0, c.getRed() - rnd.nextInt(30));
+        int g = Math.max(0, c.getGreen() - rnd.nextInt(30));
+        int b = Math.max(0, c.getBlue() - rnd.nextInt(30));
+        return new Color(r, g, b, c.getAlpha());
+    }
+
+    private static Color[] BREWER_COLOR = new Color[36];
+    private static final Random rnd = new Random();
+
+    static {
+        /**
+         * Colors from www.ColorBrewer.org by Cynthia A. Brewer, Geography,
+         * Pennsylvania State University.
+         *
+         * Using groups of 4 colors from the 9 Diverging Schemes 4 * 9 = 36
+         * colors
+         */
+        BREWER_COLOR[0] = new Color(230, 97, 1);
+        BREWER_COLOR[1] = new Color(253, 184, 99);
+        BREWER_COLOR[2] = new Color(178, 171, 210);
+        BREWER_COLOR[3] = new Color(94, 60, 153);
+        BREWER_COLOR[4] = new Color(166, 97, 26);
+        BREWER_COLOR[5] = new Color(223, 194, 125);
+        BREWER_COLOR[6] = new Color(128, 205, 193);
+        BREWER_COLOR[7] = new Color(1, 133, 113);
+        BREWER_COLOR[8] = new Color(123, 50, 148);
+        BREWER_COLOR[9] = new Color(194, 165, 207);
+        BREWER_COLOR[10] = new Color(166, 219, 160);
+        BREWER_COLOR[11] = new Color(0, 136, 55);
+        BREWER_COLOR[12] = new Color(208, 28, 139);
+        BREWER_COLOR[13] = new Color(241, 182, 218);
+        BREWER_COLOR[14] = new Color(184, 225, 134);
+        BREWER_COLOR[15] = new Color(77, 172, 38);
+        BREWER_COLOR[16] = new Color(202, 0, 32);
+        BREWER_COLOR[17] = new Color(244, 165, 130);
+        BREWER_COLOR[18] = new Color(146, 197, 222);
+        BREWER_COLOR[19] = new Color(5, 113, 176);
+        BREWER_COLOR[20] = new Color(202, 0, 32);
+        BREWER_COLOR[21] = new Color(244, 165, 130);
+        BREWER_COLOR[22] = new Color(186, 186, 186);
+        BREWER_COLOR[23] = new Color(64, 64, 64);
+        BREWER_COLOR[24] = new Color(215, 25, 28);
+        BREWER_COLOR[25] = new Color(253, 174, 97);
+        BREWER_COLOR[26] = new Color(171, 217, 233);
+        BREWER_COLOR[27] = new Color(44, 123, 182);
+        BREWER_COLOR[28] = new Color(215, 25, 28);
+        BREWER_COLOR[29] = new Color(253, 174, 97);
+        BREWER_COLOR[30] = new Color(171, 221, 164);
+        BREWER_COLOR[31] = new Color(43, 131, 186);
+        BREWER_COLOR[32] = new Color(215, 25, 28);
+        BREWER_COLOR[33] = new Color(253, 174, 97);
+        BREWER_COLOR[34] = new Color(166, 217, 106);
+        BREWER_COLOR[35] = new Color(26, 150, 65);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SymbolFileAlreadyExistsException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SymbolFileAlreadyExistsException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SymbolFileAlreadyExistsException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.impl;
+
+import java.io.File;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
+
+/**
+ * Exception thrown when a symbol file is going to be created and the file
+ * already exists. 
+ * @author gvSIG team
+ */
+public class SymbolFileAlreadyExistsException extends SymbolException {
+
+	private static final long serialVersionUID = 2327496845968384363L;
+
+    private static final String KEY = "SymbolFileAlreadyExistsException";
+
+    private static final String MESSAGE = "A symbol was going to be stored on " +
+    		"the file %(file), which already exists";
+    
+	public SymbolFileAlreadyExistsException(File symbolFile) {
+		super(MESSAGE, KEY, serialVersionUID);
+		setValue("file", symbolFile);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/SymbolFileAlreadyExistsException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolPreferences.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.impl;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.io.File;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+
+/**
+ * Default {@link SymbolPreferences} implementation based on object attributes.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class DefaultSymbolPreferences implements SymbolPreferences {
+
+	private String symbolFileExtension = ".gvssym";
+
+	private Color defaultSymbolColor;
+
+	private Color defaultSymbolFillColor;
+
+	private boolean defaultSymbolFillColorAleatory;
+
+	private Font defaultSymbolFont;
+
+	private String symbolLibraryPath;
+
+	/**
+	 * The unit that will be used when creating new symbols with Cartographic
+	 * support.
+	 */
+	private int defaultCartographicSupportMeasureUnit = -1;
+
+	/**
+	 * The reference system that will be used when creating new symbols with
+	 * Cartographic support.
+	 */
+	private int defaultCartographicSupportReferenceSystem =
+			CartographicSupport.WORLD;
+
+	public DefaultSymbolPreferences() {
+		resetDefaultSymbolColor();
+		resetDefaultSymbolFillColor();
+		resetDefaultSymbolFillColorAleatory();
+		resetSymbolLibraryPath();
+		resetDefaultSymbolFont();
+	}
+
+	public String getSymbolFileExtension() {
+		return symbolFileExtension;
+	}
+
+	public void setSymbolFileExtension(String symbolFileExtension) {
+		this.symbolFileExtension = symbolFileExtension;
+	}
+	public String getSymbolLibraryPath() {
+		return symbolLibraryPath;
+	}
+
+	public void setSymbolLibraryPath(String symbolLibraryPath) {
+		this.symbolLibraryPath = symbolLibraryPath;
+	}
+
+	public void resetSymbolLibraryPath() {
+	    
+		symbolLibraryPath =
+				System.getProperty("user.home") + File.separator + "gvSIG"
+				+ File.separator + "plugins" + File.separator +
+				"org.gvsig.app.mainplugin" + File.separator + "Symbols";
+	}
+
+	public Color getDefaultSymbolColor() {
+		return defaultSymbolColor;
+	}
+
+	public void setDefaultSymbolColor(Color defaultSymbolColor) {
+		this.defaultSymbolColor = defaultSymbolColor;
+	}
+
+	public void resetDefaultSymbolColor() {
+		defaultSymbolColor = Color.DARK_GRAY;
+	}
+
+	public Color getDefaultSymbolFillColor() {
+		return defaultSymbolFillColor;
+	}
+
+	public void setDefaultSymbolFillColor(Color defaultSymbolFillColor) {
+		this.defaultSymbolFillColor = defaultSymbolFillColor;
+	}
+
+	public void resetDefaultSymbolFillColor() {
+		defaultSymbolFillColor = new Color(60, 235, 235);
+	}
+
+	public boolean isDefaultSymbolFillColorAleatory() {
+		return defaultSymbolFillColorAleatory;
+	}
+
+	public void setDefaultSymbolFillColorAleatory(
+			boolean defaultSymbolFillColorAleatory) {
+		this.defaultSymbolFillColorAleatory = defaultSymbolFillColorAleatory;
+	}
+
+	public void resetDefaultSymbolFillColorAleatory() {
+		defaultSymbolFillColorAleatory = false;
+	}
+
+	public Font getDefaultSymbolFont() {
+		return defaultSymbolFont;
+	}
+
+	public void setDefaultSymbolFont(Font defaultSymbolFont) {
+		this.defaultSymbolFont = defaultSymbolFont;
+	}
+
+	public void resetDefaultSymbolFont() {
+		defaultSymbolFont = new Font("SansSerif", Font.PLAIN, 14);
+	}
+
+	public int getDefaultCartographicSupportMeasureUnit() {
+		return defaultCartographicSupportMeasureUnit;
+	}
+
+	public void setDefaultCartographicSupportMeasureUnit(
+			int defaultCartographicSupportMeasureUnit) {
+		this.defaultCartographicSupportMeasureUnit =
+				defaultCartographicSupportMeasureUnit;
+	}
+
+	public int getDefaultCartographicSupportReferenceSystem() {
+		return defaultCartographicSupportReferenceSystem;
+	}
+
+	public void setDefaultCartographicSupportReferenceSystem(
+			int defaultCartographicSupportReferenceSystem) {
+		this.defaultCartographicSupportReferenceSystem =
+				defaultCartographicSupportReferenceSystem;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/impl/DefaultSymbolPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/CartographicSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/CartographicSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/CartographicSupport.java	(revision 42196)
@@ -0,0 +1,132 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+
+/**
+ * <p>This interface enables Cartographic support for those graphical elements that require
+ * additional runtime information rather than the feature itself geometric definitions.<br></p>
+ *
+ * <p>It allows to realworld's measure units dimensioning.<br></p>
+ *
+ * <p>It also supplies a toolkit to perform operations with centralized static methods.
+ * @see CartographicSupportToolkit inner class' methods<br></p>
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface CartographicSupport {
+	public static final int WORLD = 0;
+	public static final int PAPER = 1;
+
+	/**
+	 * Defines the unit used to express measures. It is the position of the unit in the <b>MapContext.NAMES</b> array.
+	 * @param unitIndex, the index of the unit in the MapContext.NAMES array
+	 */
+	public abstract void setUnit(int unitIndex);
+	/**
+	 * Returns the unit used to express measures. It is the position of the unit in the <b>MapContext.NAMES</b> array.
+	 * @returns an <b>int</b> with the index of the unit in the MapContext.NAMES array, or -1 if the size is specified in pixel
+	 */
+	public abstract int getUnit();
+
+	/**
+	 * Returns the <b>Reference System</b> used to draw the elements of the image.<br>
+	 * <p>
+	 * The elements have to be scaled to <b>pixel</b> when the image is bein drawn in
+	 * order to compose the map. The elements of the map may define its size in
+	 * other units than pixel.<br>
+	 * </p>
+	 * <p><b>CartographicSupport</b> enables the elements to define the size in
+	 * measure units but these units may refer to different reference system. Two
+	 * kinds of Reference Systems are allowed in this context: <b>CartographicSupport.WORLD</b>,
+	 * and <b>CartographicSupport.PAPER</b>.
+	 * <br></p>
+	 * <p>
+	 * Depending on which <b>Reference System</b> is used the unit used by this element
+	 * refers to distances in the real world (then they are map's CRS-dependant)
+	 * or screen or printer output (then they are output DPI-dependant)<br>
+	 * </p>
+	 * <p>
+	 * In case the unit used is <b>pixel</b> then the reference system does not
+	 * have any effect since the source unit is the same than the target unit.
+	 * <br>
+	 * </p>
+	 * @return
+	 */
+	public abstract int getReferenceSystem();
+
+	/**
+	 * Sets the <b>Reference System</b> that defines how this units have to be
+	 * handled. Possible values are:
+	 * <ol>
+	 *   <li><b>CartographySupport.WORLD</b>: Defines that the unit values refer
+	 *   to distances in the world. So, the size of the element displayed <b>depends
+	 *   directly on the scale and CRS</b> used by the map. The size of the elements
+	 *   defined to use CartographicSupport.WORLD will match exactly to their
+	 *   actual size in the real world.</li>
+	 *   <li><b>CartographySupport.PAPER</b>: Defines that the unit values refer
+	 *   to the length that the element will have regardless where it appears. If
+	 *   ReferenceSystem is <b>CartographySupport.PAPER</b>, and the length is (e.g.)
+	 *   millimeters the element will be displayed with the <b>same</b> amount of
+	 *   millimeters of length whether in the <b>screen</b> or the <b>printer</b>
+	 *   (screen DPI and printer DPI must be correctly configured).</li>
+	 * </ol>
+	 */
+	public abstract void setReferenceSystem(int referenceSystem);
+
+	/**
+	 * Computes and sets the size (in pixels) of the cartographic element according
+	 * to the current rendering context (output dpi, map scale, map units) and the
+	 * symbol cartgraphic settings (unit, size, and unit reference system).
+	 *
+	 * @param viewPort, the ViewPort containing the symbol.
+	 * @param dpi, current output dpi (screen or printer)
+	 * @param shp, used only for MultiShapeSymbols in order to discriminate the internal symbol to be applied
+	 * @return a double containing the previous defined size
+	 */
+	public abstract double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom);
+
+	/**
+	 * Sets the size of the cartographic element in pixels.
+	 *
+	 * @param cartographicSize, the size in pixels of the element
+	 * @param shp, used only for MultiShapeSymbols in order to discriminate the internal symbol to be applied
+	 */
+	public abstract void setCartographicSize(double cartographicSize, Geometry geom);
+
+	/**
+	 * Gets the size (in pixels) of the cartographic element according
+	 * to the current rendering context (output dpi, map scale, map units) and the
+	 * symbol cartgraphic settings (unit, size, and unit reference system).
+	 * @param viewPort
+	 * @param dpi
+	 * @param shp
+	 * @return double containing the size in [screen/printer] pixels for the current symbol
+	 */
+	public abstract double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom);
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/CartographicSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ITextSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ITextSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ITextSymbol.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Rectangle;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ *
+ * ITextSymbol.java<br>
+ * Represents an ISymbol that draws a text.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 11, 2007
+ *
+ */
+public interface ITextSymbol extends ISymbol {
+	
+	public static final String SYMBOL_NAME = "text";
+	
+	public final static int SYMBOL_STYLE_ALIGNMENT_LEFT = 94;
+	public final static int SYMBOL_STYLE_ALIGNMENT_RIGHT = 95;
+	public final static int SYMBOL_STYLE_ALIGNMENT_CENTERED = 96;
+	public final static int SYMBOL_STYLE_ALIGNMENT_JUSTIFY = 97;
+	/**
+	 * Establishes the font that will be used to render this ITextSymbol.
+	 * @param font
+	 */
+	public abstract void setFont(Font font);
+
+	/**
+	 * Returns the currently set font.
+	 * @return Font
+	 */
+	public abstract Font getFont();
+
+	/**
+	 * Returns the currently color set to be applied to the text
+	 * @return Color
+	 */
+	public abstract Color getTextColor();
+
+	/**
+	 * Sets the color of the text
+	 * @param color
+	 */
+	public abstract void setTextColor(Color color);
+
+	/**
+	 * Returns the text contained by this symbol
+	 * @return
+	 * @deprecated ?do i need it?
+	 */
+	public abstract String getText();
+
+	/**
+	 * Sets the text to be rendered by this symbol
+	 * @param text, a String
+	 */
+	public abstract void setText(String text);
+
+	/**
+	 * Sets the font size currently set to this symbol
+	 * @param d
+	 */
+	public abstract void setFontSize(double d);
+
+	/**
+	 * Computes a Geometry wrapping the text to be applied
+	 * @param p target location
+	 * @return
+	 */
+	public abstract Geometry getTextWrappingShape(Point p);
+
+	public abstract Rectangle getBounds();
+
+	public abstract void setAutoresizeEnabled(boolean autoresizeFlag);
+
+	public abstract boolean isAutoresizeEnabled();
+	
+	// halo API
+	public Color getHaloColor();
+	public void setHaloColor(Color haloColor);
+
+	public float getHaloWidth();
+	public void setHaloWidth(float haloWidth);
+
+	public boolean isDrawWithHalo();
+	public void setDrawWithHalo(boolean drawWithHalo);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/ITextSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/IBackgroundFileStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/IBackgroundFileStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/IBackgroundFileStyle.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.styles;
+
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.net.URL;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+
+/**
+ * 
+ * Styles implementing this interface will use an image as background.
+ * Example: style for labeling
+ * 
+ * 
+ * @author gvSIG Team
+ *
+ */
+public interface IBackgroundFileStyle extends IStyle {
+	
+	/**
+	 * 
+	 * @return Gets URL of source file (svg, jpg, etc)
+	 */
+	public URL getSource();
+	
+	/**
+	 * 
+	 * Sets URL of source file (svg, jpg, etc)
+	 * 
+	 * @param src
+	 */
+	public void setSource(URL src) throws IOException;;
+	
+	
+	public Rectangle getBounds();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/ILabelStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/ILabelStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/ILabelStyle.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.styles;
+
+import java.awt.Dimension;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Defines the style that a Label symbol can contain which typically define
+ * a background of the label as an Image, the texts that the label holds
+ * and their position within the label in rendering time.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public interface ILabelStyle extends IStyle {
+	/**
+	 * @return int, the amount of fields this style allows
+	 */
+	public int getFieldCount();
+
+	/**
+	 * Sets the texts that will appear in the label.
+	 * @param texts
+	 */
+	public void setTextFields(String[] texts);
+
+
+	/**
+	 * Returns an array of rectangles defining the text boxes where text is
+	 * placed.
+	 * @return
+	 */
+	public Rectangle2D[] getTextBounds();
+
+	public Dimension getSize();
+
+	/**
+	 * Returns the position of the point labeled by this label in percent units relative
+	 * to the label bounds. It determines the offset to be applied to the label to be
+	 * placed and allows the user to use custom styles.
+	 */
+	public Point2D getMarkerPoint();
+
+	/**
+	 * Sets the position of the point labeled by this in percent units relative to the
+	 * label bounds
+	 * @param p
+	 * @throws IllegalArgumentException if the point coordinates are >0.0 or <1.0
+	 */
+	public void setMarkerPoint(Point2D p) throws IllegalArgumentException;
+
+	/**
+	 * Sets a TextFieldArea using its index. With this method the user can
+	 * modify the size of the rectangle for the TextFieldArea
+	 * @param index
+	 * @param rect
+	 */
+	public void setTextFieldArea(int index, Rectangle2D rect);
+	
+	/**
+	 * Adds a new TextFieldArea with an specific size which is defined as a rectangle.
+	 * @param index,int
+	 * @param rect,Rectangle2D
+	 */
+	public void addTextFieldArea(Rectangle2D rect);
+	
+	/**
+	 * Delete the TextFieldArea specified by its index.
+	 * @param index,int
+	 */
+	public void deleteTextFieldArea(int index);
+	
+	/**
+	 * Sets the size for a laber and stablishes an unit scale factor to not change
+	 * too much its content
+	 * @param width
+	 * @param height
+	 */
+	public void setSize(double width, double height);
+	
+	
+	public IBackgroundFileStyle getBackgroundFileStyle() ;
+
+	public void setBackgroundFileStyle(IBackgroundFileStyle background);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/ILabelStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/IStyle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/IStyle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/IStyle.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols.styles;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * Used by Objects that have to define an style for them.This interface has
+ * methods to stablish a description and get it,to specify if an object
+ * that implements this interface is suitable for a kind of symbol and other
+ * methods to draw symbols.
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public interface IStyle extends Persistent, Cloneable {
+	/**
+	 * Defines the description of a symbol.It will be specified with an
+	 * string.
+	 * @param desc,String
+	 */
+	public abstract void setDescription(String desc);
+	/**
+	 * Returns the description of a symbol
+	 * @return Description of a symbol
+	 */
+	public abstract String getDescription();
+	/**
+	 * Useful to render the symbol inside the TOC, or inside little
+	 * rectangles. For example, think about rendering a Label with size
+	 * in meters => You will need to specify a size in pixels.
+	 * Of course. You may also preffer to render a prepared image, etc.
+	 * @param g Graphics2D
+	 * @param r Rectangle
+	 */
+	public abstract void drawInsideRectangle(Graphics2D g, Rectangle r) throws SymbolDrawingException;
+
+	/**
+	 * True if this symbol is ok for the style or class.
+	 * @param symbol ISymbol
+	 */
+
+	public abstract boolean isSuitableFor(ISymbol symbol);
+
+	/**
+	 * Used to show an outline of the style to graphically show its properties.
+	 * @param g, the Graphics2D where to draw
+	 * @param r, the bounds of the style inside such Graphics2D
+	 */
+	public abstract void drawOutline(Graphics2D g, Rectangle r) throws SymbolDrawingException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/styles/IStyle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IWarningSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IWarningSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IWarningSymbol.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+public interface IWarningSymbol extends ISymbol {
+	
+	public static final String SYMBOL_NAME = "warning";
+
+	void setDrawExceptionType(int symbolDrawExceptionType);
+
+	void setMessage(String message);
+	
+	void setDescription(String description);
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/IWarningSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolException.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Parent exception of symbol related exceptions.
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public abstract class SymbolException extends MapContextException {
+
+	private static final long serialVersionUID = -5432842435290441524L;
+
+	/**
+	 * @see BaseException#BaseException(String, String, long)
+	 */
+	public SymbolException(String message, String key, long code) {
+		super(message, key, code);
+	}
+
+	/**
+	 * @see BaseException#BaseException(String, Throwable, String, long)
+	 */
+	public SymbolException(String message, Throwable cause, String key,
+			long code) {
+		super(message, cause, key, code);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/symbols/SymbolException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedZoomVisitor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedZoomVisitor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedZoomVisitor.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.strategies;
+
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.LayersVisitor;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.NotSupportedOperationException;
+import org.gvsig.tools.visitor.Visitable;
+import org.gvsig.tools.visitor.Visitor;
+
+
+/**
+ * Visitor de zoom a lo seleccionado.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SelectedZoomVisitor implements LayersVisitor, Visitor {
+	private Envelope rectangle = null;
+
+	/**
+	 * Devuelve el Extent de los shapes seleccionados, y si no hay ning�n shape
+	 * seleccionado devuelve null.
+	 *
+	 * @return Extent de los shapes seleccionados.
+	 */
+	public Envelope getSelectBound() {
+		return rectangle;
+	}
+
+	public String getProcessDescription() {
+		return "Defining rectangle to zoom from selected geometries";
+	}
+
+	public void visit(Feature feature) throws BaseException {
+		if (rectangle == null) {
+			rectangle = (feature.getDefaultGeometry()).getEnvelope();
+		} else {
+			rectangle.add((feature.getDefaultGeometry())
+					.getEnvelope());
+		}
+	}
+
+	public void visit(FeatureReference featureRefence) throws BaseException {
+		this.visit(featureRefence.getFeature());
+	}
+
+	public void visit(Object obj) throws BaseException {
+		if (obj instanceof FeatureReference) {
+			this.visit((FeatureReference) obj);
+			return;
+		}
+		if (obj instanceof Feature) {
+			this.visit((Feature) obj);
+			return;
+		}
+		if (obj instanceof FLayer) {
+			this.visit((FLayer) obj);
+			return;
+		}
+
+		throw new NotSupportedOperationException(this, obj);
+	}
+
+	public void visit(FLayer layer) throws BaseException {
+		if (!(layer instanceof SingleLayer)) {
+			return;
+		} else if (!layer.isActive()) {
+			return;
+		}
+		DataSet selection = ((SingleLayer) layer).getDataStore()
+				.getSelection();
+
+		if (selection instanceof Visitable) {
+			((Visitable) selection).accept(this);
+		}
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedZoomVisitor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/MemoryShapeInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/MemoryShapeInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/MemoryShapeInfo.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.strategies;
+
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+
+
+/**
+ * Estructura de datos con la informaci�n relativa a las geometr�as de una
+ * fuente de datos necesaria para acelerar el procesado de la capa en memoria.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MemoryShapeInfo implements ShapeInfo {
+	ArrayList infos = new ArrayList();
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.ShapeInfo#addShapeInfo(java.awt.geom.Rectangle2D,
+	 * 		int)
+	 */
+	public void addShapeInfo(Rectangle2D boundingBox, int type) {
+		infos.add(new Info(boundingBox, type));
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.ShapeInfo#addShapeInfo(int,
+	 * 		java.awt.geom.Rectangle2D, int)
+	 */
+	public void setShapeInfo(int index, Rectangle2D boundingBox, int type)
+		throws ArrayIndexOutOfBoundsException {
+		infos.set(index, new Info(boundingBox, type));
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.ShapeInfo#getBoundingBox(int)
+	 */
+	public Rectangle2D getBoundingBox(int index) {
+		return ((Info) infos.get(index)).getRect();
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.ShapeInfo#getType(int)
+	 */
+	public int getType(int index) {
+		return ((Info) infos.get(index)).getType();
+	}
+
+	/**
+	 * Clase con el rect�ngulo y el tipo de shape.
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class Info {
+		private Rectangle2D rect;
+		private int type;
+
+		/**
+		 * Crea un nuevo Info.
+		 *
+		 * @param rect Extent del shape.
+		 * @param type Tipo de shape.
+		 */
+		public Info(Rectangle2D rect, int type) {
+			this.rect = rect;
+			this.type = type;
+		}
+
+		/**
+		 * Devuelve el extent del shape.
+		 *
+		 * @return Extent del shape.
+		 */
+		public Rectangle2D getRect() {
+			return rect;
+		}
+
+		/**
+		 * Devuelve el tipo de shape.
+		 *
+		 * @return Tipo de shape.
+		 */
+		public int getType() {
+			return type;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/MemoryShapeInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedEnvelopeVisitor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedEnvelopeVisitor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedEnvelopeVisitor.java	(revision 42196)
@@ -0,0 +1,186 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.strategies;
+
+import org.cresques.cts.ICoordTrans;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.LayersVisitor;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.NotSupportedOperationException;
+
+/**
+ * This visitor accumulates the envelope of the
+ * selected geometries
+ */
+public class SelectedEnvelopeVisitor implements LayersVisitor {
+    
+    private static final Logger logger =
+        LoggerFactory.getLogger(SelectedEnvelopeVisitor.class);
+    
+	private Envelope rectangle = null;
+	public Envelope getSelectioEnvelope() {
+	    return rectangle;
+	}
+
+	public String getProcessDescription() {
+		return "Defining rectangle to zoom from selected geometries";
+	}
+
+	public void visit(Object obj) throws BaseException {
+		if (obj instanceof FLayer) {
+			this.visit((FLayer) obj);
+		} else {
+		    throw new NotSupportedOperationException(this, obj);
+		}
+	}
+
+	public void visit(FLayer layer) throws BaseException {
+	    
+		if (!(layer instanceof SingleLayer)) {
+			return;
+		} else if (!layer.isActive()) {
+			return;
+        } else if (!(layer instanceof FLyrVect)) {
+            return;
+        }
+		
+		FLyrVect lyr_vect = (FLyrVect) layer;
+		BaseException be = null;
+		
+		DataSet selection = ((SingleLayer) layer).getDataStore()
+				.getSelection();
+		
+		if (selection != null && (selection instanceof FeatureSelection)) {
+		    
+		    long tot_count = lyr_vect.getFeatureStore().getFeatureCount();
+		    FeatureSelection fsel = (FeatureSelection) selection;
+		    long sel_count = fsel.getSize();
+		    if (tot_count == sel_count) {
+		        try {
+		            /*
+		             * If all selected, use layer envelope
+		             */
+		            rectangle = accum(rectangle, lyr_vect.getFullEnvelope(), null);
+		        } catch (CloneNotSupportedException ex) {
+                    /*
+                     * This should not happen because
+                     * envelopes support clone 
+                     */
+		            logger.debug("Error while adding envelope: " + ex.getMessage(), ex);
+		        }
+		    } else {
+		        
+		        /*
+		         * We'll use this reprojection if not null
+		         * to convert feature envelopes
+		         */
+		        ICoordTrans ct = lyr_vect.getCoordTrans();
+		        
+		        DisposableIterator iter = fsel.fastIterator();
+		        Feature feat = null;
+		        while (iter.hasNext()) {
+		            feat = (Feature) iter.next();
+		            try {
+	                    rectangle = accum(
+	                        rectangle, feat.getDefaultEnvelope(), ct);
+		            } catch (CloneNotSupportedException ex) {
+	                    /*
+	                     * This should not happen because
+	                     * envelopes support clone 
+	                     */
+	                    logger.debug("Error while adding envelope: " + ex.getMessage(), ex);
+	                    break;
+		            }
+		        }
+		        iter.dispose();
+		    }
+		}
+	}
+
+	/**
+	 * Adds add_env envelope to ini_env after reprojecting add_env
+	 * if cotr not null
+	 * 
+	 * @param ini_env
+	 * @param add_env
+	 * @param cotr
+	 * @return
+	 */
+    private Envelope accum(
+        Envelope ini_env,
+        Envelope add_env,
+        ICoordTrans cotr) throws CloneNotSupportedException {
+        
+        if (add_env == null) {
+            /*
+             * Nothing to add
+             */
+            return ini_env;
+        } else {
+            
+            if (cotr == null) {
+                
+                /*
+                 * No reprojection needed
+                 */
+                if (ini_env == null) {
+                    return add_env;
+                } else {
+                    Envelope resp = (Envelope) ini_env.clone(); 
+                    resp.add(add_env);
+                    return resp;
+                }
+                
+            } else {
+                
+                /*
+                 * Reproject before adding
+                 */
+                Envelope add_rep = (Envelope) add_env.convert(cotr).clone();
+                if (ini_env == null) {
+                    /*
+                     * Initial was null
+                     */
+                    return add_rep;
+                } else {
+                    Envelope resp = (Envelope) ini_env.clone(); 
+                    resp.add(add_rep);
+                    return resp;
+                }
+            }
+        }
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/SelectedEnvelopeVisitor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/ShapeInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/ShapeInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/ShapeInfo.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.rendering.strategies;
+
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Estructura de datos con la informaci�n relativa a las geometr�as de una
+ * fuente de datos necesaria para acelerar el procesado de la capa
+ */
+public interface ShapeInfo {
+	/**
+	 * A�ade al final de la estructura de datos la informaci�n de una geometr�a
+	 *
+	 * @param boundingBox Extent del shape.
+	 * @param type Tipo de shape.
+	 */
+	void addShapeInfo(Rectangle2D boundingBox, int type);
+
+	/**
+	 * Establece en la posici�n index-�sima de la estructura de datos la
+	 * informaci�n de una geometr�a
+	 *
+	 * @param index �ndice.
+	 * @param boundingBox Extent del shape.
+	 * @param type Tipo de shape.
+	 *
+	 * @throws ArrayIndexOutOfBoundsException Si se intenta establecer la
+	 * 		   informaci�n para una geometr�a que no existe
+	 */
+	void setShapeInfo(int index, Rectangle2D boundingBox, int type)
+		throws ArrayIndexOutOfBoundsException;
+
+	/**
+	 * Obtiene el bounding box de la geometr�a index-�sima
+	 *
+	 * @param index �ndice de la geometr�a.
+	 *
+	 * @return Extent de la geometr�a.
+	 */
+	Rectangle2D getBoundingBox(int index);
+
+	/**
+	 * Obtiene el tipo de la geometr�a index-�sima
+	 *
+	 * @param index �ndice.
+	 *
+	 * @return Tipo de geometr�a.
+	 */
+	int getType(int index);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/strategies/ShapeInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextException.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Parent class for MapContext exceptions.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public abstract class MapContextException extends BaseException {
+
+    private static final long serialVersionUID = 8122532768532097211L;
+
+    /**
+     * @see BaseException#BaseException(String, String, long)
+     */
+    protected MapContextException(String message, String key, long code) {
+        super(message, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long)
+     */
+    protected MapContextException(String message, Throwable cause, String key,
+            long code) {
+        super(message, cause, key, code);
+    }
+
+    public MapContextException(Throwable cause) {
+        this(
+        		"MapContext related error",
+        		cause,
+        		"_MapContext_related_error", 
+        		serialVersionUID
+        );
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/NameLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/NameLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/NameLayerException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class NameLayerException extends LoadLayerException {
+
+	public NameLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_name_layer";
+		formatString = "Can�t named the layer: %(layer) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/NameLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/TypeLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/TypeLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/TypeLayerException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class TypeLayerException extends LoadLayerException {
+
+	public TypeLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_type_layer";
+		formatString = "Can�t use type of the layer: %(layer) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/TypeLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/IncompatibleLegendReadException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/IncompatibleLegendReadException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/IncompatibleLegendReadException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import java.io.File;
+
+/**
+ * Used when geometry type of read legend is not suitable for target layer
+ */
+public class IncompatibleLegendReadException extends ReadLegendException {
+    
+    private static final long serialVersionUID = -4021930535527337311L;
+
+    public IncompatibleLegendReadException(
+        File inFile,
+        int geometryType,
+        Throwable th) {
+        
+        super(
+            "Can�t load legend from file %(fileName) for geometry type ${geametryType}.",
+            "Cant_load_legend_from_file_XfileNameX_for_geometry_type_XgeometryTypeX",
+            inFile, th, serialVersionUID);
+        setValue("geametryType", new Integer(geometryType));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CancelEditingLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CancelEditingLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CancelEditingLayerException.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class CancelEditingLayerException extends BaseException {
+
+	private String layer = null;
+
+	public CancelEditingLayerException(String layer,Throwable exception) {
+		this.layer = layer;
+		init();
+		initCause(exception);
+	}
+
+	private void init() {
+		messageKey = "error_cancel_editing_layer";
+		formatString = "Can�t cancel editing the layer: %(layer) ";
+	}
+
+	protected Map values() {
+		Hashtable params = new Hashtable();
+		params.put("layer",layer);
+		return params;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CancelEditingLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/DriverLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/DriverLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/DriverLayerException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class DriverLayerException extends LoadLayerException {
+
+	public DriverLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_driver_layer";
+		formatString = "Can�t load driver of the layer: %(layer) ";
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/DriverLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReadLegendException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReadLegendException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReadLegendException.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import java.io.File;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+
+public class ReadLegendException extends MapContextException {
+
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 9053764488887957505L;
+
+    public ReadLegendException(File file, Throwable cause) {
+		super(
+				"Can�t load legend from file %(fileName).",
+				cause,
+				"Cant_load_legend_from_file_XfileNameX",
+				serialVersionUID
+		);
+		setValue("fileName", file == null ? "Null" : file.getName());
+	}
+    
+    
+    public ReadLegendException(
+        String format,
+        String message,
+        File file,
+        Throwable cause,
+        long code) {
+        
+        super(
+                format,
+                cause,
+                message,
+                code
+        );
+        setValue("fileName", file == null ? "Null" : file.getName());
+    }
+
+	
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReprojectLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReprojectLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReprojectLayerException.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class ReprojectLayerException extends LoadLayerException {
+
+	public ReprojectLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_projection_layer";
+		formatString = "Can�t reproject the layer: %(layer) ";
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReprojectLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/UnsupportedVersionLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/UnsupportedVersionLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/UnsupportedVersionLayerException.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+
+/**
+ * Excepci�n provocada por el WMS.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class UnsupportedVersionLayerException extends LoadLayerException {
+	public UnsupportedVersionLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_version_layer";
+		formatString = "Can�t use this version of the layer: %(layer) ";
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/UnsupportedVersionLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LegendLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LegendLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LegendLayerException.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class LegendLayerException extends LoadLayerException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4033030636689365030L;
+
+    protected LegendLayerException(String message, Throwable cause, String key,
+            long code) {
+        super(message, cause, key, code);
+    }
+    
+	public LegendLayerException(String layer,Throwable cause) {
+		super(
+				"Can�t load the legend for layer %(layer).",
+				cause,
+				"Cant_load_the_legend_for_layer_XlayerX",
+				serialVersionUID
+		);
+		setValue("layer", layer);
+	}
+	
+	public LegendLayerException(String layer) {
+		this(layer,null);
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LegendLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StopEditionLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StopEditionLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StopEditionLayerException.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class StopEditionLayerException extends BaseException{
+
+	private String layer;
+	public StopEditionLayerException(String l,Throwable exception) {
+		this.layer=l;
+		init();
+		initCause(exception);
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_stop_editing_layer";
+		formatString = "Can�t stop editing the layer: %(tag) ";
+	}
+
+
+	protected Map values() {
+		Hashtable params = new Hashtable();
+		params.put("layer",layer);
+		return params;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StopEditionLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/URLLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/URLLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/URLLayerException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class URLLayerException extends LoadLayerException {
+
+	public URLLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_url_layer";
+		formatString = "Can�t create the url of the layer: %(layer) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/URLLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CreateLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CreateLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CreateLayerException.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class CreateLayerException extends MapContextException {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7923597739786110983L;
+
+
+    protected CreateLayerException(String message, Throwable cause, String key,
+            long code) {
+        super(message, cause, key, code);
+    }
+    
+
+	public CreateLayerException(String layer,Throwable cause) {
+		super(
+				"Can�t create the layer %(layer).",
+				cause,
+				"Cant_create_the_layer_XlayerX",
+				serialVersionUID
+		);
+		setValue("layer", layer);
+	}
+
+
+	public CreateLayerException(String layer) {
+		super(
+				"Can�t create the layer %(layer).",
+				"Cant_create_the_layer_XlayerX",
+				serialVersionUID
+		);
+		setValue("layer", layer);
+	}
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CreateLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReloadLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReloadLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReloadLayerException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class ReloadLayerException extends LoadLayerException {
+
+	public ReloadLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_reload_layer";
+		formatString = "Can�t reload the layer: %(layer) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ReloadLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StartEditionLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StartEditionLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StartEditionLayerException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class StartEditionLayerException extends BaseException {
+	private String layer;
+	public StartEditionLayerException(String l,Throwable exception) {
+		this.layer=l;
+		init();
+		initCause(exception);
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_start_editing_layer";
+		formatString = "Can�t start editing the layer: %(tag) ";
+	}
+
+
+	protected Map values() {
+		Hashtable params = new Hashtable();
+		params.put("layer",layer);
+		return params;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/StartEditionLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ConnectionErrorLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ConnectionErrorLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ConnectionErrorLayerException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class ConnectionErrorLayerException extends LoadLayerException {
+
+	public ConnectionErrorLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_connection_layer";
+		formatString = "Can�t connet the layer: %(layer) ";
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ConnectionErrorLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/WriteLegendException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/WriteLegendException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/WriteLegendException.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class WriteLegendException extends MapContextException {
+
+	/**
+     * 
+     */
+    private static final long serialVersionUID = 6257078688077356677L;
+
+    public WriteLegendException(ILegend legend, Throwable cause) {
+		super(
+				"Cannot write to file the legend %(legend).",
+				cause,
+				"Cannot_write_to_file_the_legend_XlayerX",
+				serialVersionUID
+		);
+		setValue("legend", legend);
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ProjectionLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ProjectionLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ProjectionLayerException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class ProjectionLayerException extends LoadLayerException {
+
+	public ProjectionLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_projection_layer";
+		formatString = "Can�t project the layer: %(layer) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/ProjectionLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/FileLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/FileLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/FileLayerException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class FileLayerException extends LoadLayerException {
+
+	public FileLayerException(String l,Throwable exception) {
+		super(l,exception);
+		init();
+	}
+	/**
+	 *
+	 */
+	private void init() {
+		messageKey = "error_file_layer";
+		formatString = "Can�t found the file of the layer: %(layer) ";
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/FileLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LoadLayerException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LoadLayerException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LoadLayerException.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.exceptions;
+
+import org.gvsig.fmap.mapcontext.MapContextException;
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class LoadLayerException extends MapContextException {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -7500729722899605739L;
+
+    protected LoadLayerException(String message, Throwable cause, String key,
+            long code) {
+        super(message, cause, key, code);
+    }
+    
+
+	public LoadLayerException(String layer,Throwable cause) {
+		super(
+				"Can�t load the layer %(layer).",
+				cause,
+				"Cant_load_the_layer_XlayerX",
+				serialVersionUID
+		);
+		setValue("layer", layer);
+	}
+
+
+	public LoadLayerException(String layer) {
+		super(
+				"Can�t load the layer %(layer).",
+				"Cant_load_the_layer_XlayerX",
+				serialVersionUID
+		);
+		setValue("layer", layer);
+	}
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/LoadLayerException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextRuntimeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextRuntimeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextRuntimeException.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.BaseRuntimeException;
+
+/**
+ * Parent class for MapContext runtime exceptions.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class MapContextRuntimeException extends BaseRuntimeException {
+
+	private static final long serialVersionUID = 3993964182701795153L;
+
+	/**
+     * @see BaseException#BaseException(String, String, long)
+     */
+    protected MapContextRuntimeException(String message, String key, long code) {
+        super(message, null, key, code);
+    }
+
+    /**
+     * @see BaseException#BaseException(String, Throwable, String, long)
+     */
+    protected MapContextRuntimeException(String message, Throwable cause, String key,
+            long code) {
+        super(message, cause, key, code);
+    }
+    
+    public MapContextRuntimeException(Throwable cause) {
+        this(
+        		"MapContext related error",
+        		cause,
+        		"_MapContext_related_error", 
+        		serialVersionUID
+        );
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextRuntimeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLocator.java	(revision 42196)
@@ -0,0 +1,238 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Locator for the MapContext library.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class MapContextLocator extends BaseLocator {
+
+	private static Logger logger = LoggerFactory.getLogger(MapContextLocator.class);
+	
+	public static final String MAPCONTEXT_MANAGER_NAME = "mapcontextlocator.manager";
+	private static final String MAPCONTEXT_MANAGER_DESCRIPTION = "MapContext Library manager";
+
+	public static final String SYMBOL_MANAGER_NAME = "symbol.manager";
+	private static final String SYMBOL_MANAGER_DESCRIPTION = "Symbols manager";
+
+	public static final String DEFAULT_LAYER_ORDER_MANAGER_NAME = "default.layer.order.manager";
+	private static final String DEFAULT_LAYER_ORDER_MANAGER_DESCRIPTION = "Default layer order manager";
+	public static final String LAYER_ORDER_MANAGER_NAME =
+			"layer.order.manager.name";
+	public static final String LAYER_ORDER_MANAGER_EXT_POINT =
+			"layer.order.manager.extension.point";
+
+	private static final MapContextLocator instance = new MapContextLocator();
+
+	/**
+	 * Private constructor, we don't want it to be able to be instantiated
+	 * outside this class.
+	 */
+	private MapContextLocator() {
+		// Nothing to do
+	}
+
+	public static MapContextLocator getInstance() {
+		return instance;
+	}
+
+	/**
+	 * Return a reference to MapContextManager.
+	 * 
+	 * @return a reference to MapContextManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static MapContextManager getMapContextManager()
+			throws LocatorException {
+		return (MapContextManager) getInstance().get(MAPCONTEXT_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the MapContextManager interface.
+	 * 
+	 * @param clazz
+	 *            implementing the MapContextManager interface
+	 */
+	public static void registerMapContextManager(Class clazz) {
+		getInstance().register(MAPCONTEXT_MANAGER_NAME,
+				MAPCONTEXT_MANAGER_DESCRIPTION, clazz);
+	}
+
+	/**
+	 * Return a reference to the {@link SymbolManager}.
+	 * 
+	 * @return a reference to the SymbolManager.
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static SymbolManager getSymbolManager() throws LocatorException {
+		return (SymbolManager) getInstance().get(SYMBOL_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the SymbolManager interface.
+	 * 
+	 * @param clazz
+	 *            implementing the SymbolManager interface
+	 */
+	public static void registerSymbolManager(Class clazz) {
+		getInstance().register(SYMBOL_MANAGER_NAME, SYMBOL_MANAGER_DESCRIPTION,
+				clazz);
+	}
+	
+	/* *************************************
+	 * Layer order management
+	 * *************************************
+	 */
+	
+	/**
+	 * Register the class as the default order manager.
+	 * This will only work if there is not a default order manager already.
+	 * Also registers the class in the list of available order managers.
+	 * 
+	 * @param lom_class
+	 * @throws LocatorException
+	 */
+	public static void registerDefaultOrderManager(Class lom_class)
+			throws LocatorException {
+		
+		if (LayerOrderManager.class.isAssignableFrom(lom_class)) {
+			getInstance().registerDefault(
+					DEFAULT_LAYER_ORDER_MANAGER_NAME,
+					DEFAULT_LAYER_ORDER_MANAGER_DESCRIPTION,
+					lom_class);
+			
+			// Also register as available order manager
+			registerOrderManager(lom_class);
+			
+		} else {
+			// not valid class passed:
+			throw new LocatorException(
+					"Class '" +
+			(lom_class == null ? "NULL" : lom_class.getClass().getName()) +
+			"' does not implement LayerOrderManager.",
+					"", -1);
+		}
+	}
+
+	/**
+	 * Adds the class to the list of available order managers
+	 * 
+	 * @param lom_class
+	 */
+	public static void registerOrderManager(Class lom_class) {
+		
+		if (LayerOrderManager.class.isAssignableFrom(lom_class)) {
+			
+			ExtensionPointManager epMan = ToolsLocator.getExtensionPointManager();
+			ExtensionPoint ep = epMan.add(LAYER_ORDER_MANAGER_EXT_POINT, "");
+			ep.append(LAYER_ORDER_MANAGER_NAME + "." + lom_class.getName(),
+					"", lom_class);
+		} else {
+			// not valid class passed:
+			throw new LocatorException(
+					"Class '"
+			+ (lom_class == null ? "NULL" : lom_class.getClass().getName()) 
+			+ "' does not implement LayerOrderManager.",
+					"", -1);
+		}
+	}
+	
+	/**
+	 * Returns the default order manager or null if none was
+	 * registered as default.
+	 * 
+	 * @return
+	 * @throws LocatorException
+	 */
+	public static LayerOrderManager getDefaultOrderManager()
+			throws LocatorException {
+		
+		LayerOrderManager resp = null;
+		try {
+			resp = (LayerOrderManager) getInstance().get(
+					DEFAULT_LAYER_ORDER_MANAGER_NAME);
+		} catch (Exception ex) {
+			logger.info("Cant get default layer order manager", ex);
+		}
+		return resp;
+	}
+	
+
+	/**
+	 * Gets list of available order managers.
+	 * 
+	 * @return
+	 */
+	public static List getOrderManagers() {
+		
+		ExtensionPointManager epMan = ToolsLocator.getExtensionPointManager();
+		ExtensionPoint ep = epMan.get(LAYER_ORDER_MANAGER_EXT_POINT);
+
+		List managers = new ArrayList();
+		Iterator iter = ep.iterator();
+
+	        
+		while (iter.hasNext()) {
+			Extension extension = (Extension) iter.next();
+			LayerOrderManager lom = null;
+			try {
+				lom = (LayerOrderManager) extension.create();
+			} catch (Exception e) {
+				logger.warn("Cant create LayerOrderManager " + extension.getName(), e);
+				continue;
+			}
+			managers.add(lom);
+		}
+		return managers;
+	}
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLibrary.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.CompatLibrary;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.impl.DefaultMapContextDrawer;
+import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesHelper;
+import org.gvsig.fmap.mapcontext.layers.FLayerStatus;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
+import org.gvsig.fmap.mapcontext.layers.LayerFactory;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.ReprojectDefaultGeometry;
+import org.gvsig.fmap.mapcontext.tools.persistence.ColorPersistenceFactory;
+import org.gvsig.fmap.mapcontext.tools.persistence.DimensionPersistenceFactory;
+import org.gvsig.fmap.mapcontext.tools.persistence.FontPersistenceFactory;
+import org.gvsig.fmap.mapcontext.tools.persistence.Point2DPersistenceFactory;
+import org.gvsig.fmap.mapcontext.tools.persistence.Rectangle2DPersistenceFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.util.Caller;
+import org.gvsig.tools.util.impl.DefaultCaller;
+
+/**
+ * Library for the MapContext library API.
+ * @author jmvivo
+ */
+public class MapContextLibrary extends AbstractLibrary {
+	final static private Logger LOG = LoggerFactory.getLogger(FLyrDefault.class);
+
+    public void doRegistration() {
+        registerAsAPI(MapContextLibrary.class);
+        require(DALLibrary.class);
+        require(CompatLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+		LayerFactory.getInstance().registerLayerToUseForStore(
+				FeatureStore.class, FLyrVect.class);
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+            Caller caller = new DefaultCaller();
+
+            MapContextManager manager = MapContextLocator.getMapContextManager();
+
+            if (manager == null) {
+                    throw new ReferenceNotRegisteredException(
+                                    MapContextLocator.MAPCONTEXT_MANAGER_NAME,
+                                    MapContextLocator.getInstance());
+            }
+            
+            caller.add( new FLyrDefault.RegisterMetadata() );
+            caller.add( new DefaultMapContextDrawer.RegisterMapContextDrawer() );
+            
+            caller.add( new ViewPort.RegisterPersistence() );
+            caller.add( new ExtendedPropertiesHelper.RegisterPersistence() );
+            caller.add( new MapContext.RegisterPersistence() );
+            caller.add( new ExtentHistory.RegisterPersistence() );
+            caller.add( new ReprojectDefaultGeometry.RegisterPersistence() );
+            caller.add( new FLayerStatus.RegisterPersistence() );
+            caller.add( new FLyrDefault.RegisterPersistence() );
+            caller.add( new FLyrVect.RegisterPersistence() );
+            caller.add( new FLayers.RegisterPersistence() );
+
+            caller.add( new ColorPersistenceFactory.RegisterPersistence() );
+            caller.add( new Point2DPersistenceFactory.RegisterPersistence() );
+            caller.add( new FontPersistenceFactory.RegisterPersistence() );
+            caller.add( new Rectangle2DPersistenceFactory.RegisterPersistence() );
+            caller.add( new DimensionPersistenceFactory.RegisterPersistence() );
+
+            if( !caller.call() ) {
+                    throw new LibraryException(MapContextLibrary.class, caller.getExceptions());
+            }
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Messages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Messages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Messages.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+
+/**
+ * Clase que accede a los recursos para la i18n
+ */
+public class Messages {
+    /** DOCUMENT ME! */
+    private static final String BUNDLE_NAME = "com.iver.cit.gvsig.fmap.FMap";
+
+    /** DOCUMENT ME! */
+    private static ResourceBundle RESOURCE_BUNDLE = null;
+
+    /**
+     * Inicializa la clase con el locale adecuado
+     *
+     * @param loc Locale de la aplicaci�n
+     */
+    private static void init() {
+        Locale loc = Locale.getDefault();
+        RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, loc);
+    }
+
+    
+    /**
+     * Obtiene el valor del recurso con clave 'key'
+     *
+     * @param key clave del recurso que se quiere obtener
+     *
+     * @return recurso que se quiere obtener o !key! en caso de no encontrarlo.
+     *         En dicho caso no se notifica al framework ya que  estos son los
+     *         mensajes propios de la aplicaci�n y deben de estar todos
+     */
+    public static String getString(String key) {
+        try {
+            // La primera vez, cargamos las cadenas.
+            if (RESOURCE_BUNDLE == null)
+                init();
+            return RESOURCE_BUNDLE.getString(key);
+        } catch (MissingResourceException e) {
+            return '!' + key + '!';
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Messages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextManager.java	(revision 42196)
@@ -0,0 +1,479 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {Create Manager to register MapContextDrawer implementation}
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.io.File;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendReader;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendWriter;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.tools.observer.Observable;
+
+/**
+ * Manager of the MapContext library.
+ * 
+ * Holds the default implementation of the {@link MapContextDrawer}.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ * @author <a href="mailto:jjdelcerro@gvsig.org">Joaquin Jose del Cerro</a>
+ */
+public interface MapContextManager extends Observable {
+
+        public static final String GET_DEFAULT_CRS = "MAPCONTEXTMANAGER_GET_DEFAULT_CRS";
+        public static final String CREATE_LEGEND = "MAPCONTEXTMANAGER_CREATE_LEGEND";
+        public static final String CREATE_MAPCONTEXT_DRAWER = "MAPCONTEXTMANAGER_CREATE_MAPCONTEXT_DRAWER";
+        public static final String SET_MAPCONTEXT_DRAWER = "MAPCONTEXTMANAGER_SET_MAPCONTEXT_DRAWER";
+        public static final String CREATE_GRAPHICS_LAYER = "MAPCONTEXTMANAGER_CREATE_GRAPHICS_LAYER";
+        public static final String REGISTER_LEGEND = "MAPCONTEXTMANAGER_REGISTER_LEGEND";
+        public static final String REGISTER_LEGEND_READER = "MAPCONTEXTMANAGER_REGISTER_LEGEND_READER";
+        public static final String CREATE_LEGEND_READER = "MAPCONTEXTMANAGER_CREATE_LEGEND_READER";
+        public static final String REGISTER_LEGEND_WRITER = "MAPCONTEXTMANAGER_REGISTER_LEGEND_WRITER";
+        public static final String CREATE_SYMBOL = "MAPCONTEXTMANAGER_CREATE_SYMBOL";
+        public static final String LOAD_SYMBOLS = "MAPCONTEXTMANAGER_LOAD_SYMBOLS";
+        public static final String REGISTER_MULTILAYER_SYMBOL = "MAPCONTEXTMANAGER_REGISTER_MULTILAYER_SYMBOL";
+        public static final String REGISTER_SYMBOL = "MAPCONTEXTMANAGER_REGISTER_SYMBOL";
+        public static final String CREATE_LAYER = "MAPCONTEXTMANAGER_CREATE_LAYER";
+        public static final String LOAD_LAYER = "MAPCONTEXTMANAGER_LOAD_LAYER";
+        public static final String REGISTER_ICON_LAYER = "MAPCONTEXTMANAGER_REGISTER_ICON_LAYER";
+        public static final String CREATE_MAPCONTEXT = "MAPCONTEXTMANAGER_CREATE_MAPCONTEXT";
+        public static final String LOAD_MAPCONTEXT = "MAPCONTEXTMANAGER_LOAD_MAPCONTEXT";
+
+
+	public MapContext createMapContext();
+	
+	/**
+	 * Create a new layer from the data parameters passed as parameter.
+	 * 
+	 * @param layerName name used in for the new layer. 
+	 * @param parameters used for create the {@link DataStore} of the new layer
+	 * 
+	 * @return the new FLayer
+	 * 
+	 * @throws LoadLayerException
+	 */
+	public FLayer createLayer(String layerName,
+			DataStoreParameters parameters) throws LoadLayerException;
+
+	/**
+	 * Create a layer from a {@link DataStore}.
+	 * 
+	 * @param layerName name used in for the new layer. 
+	 * @param store used for the new layer
+	 * 
+	 * @return the new FLayer
+	 * 
+	 * @throws LoadLayerException
+	 */
+	public FLayer createLayer(String layerName, DataStore store)
+			throws LoadLayerException;
+
+	/**
+	 * Create a layer to be used as the {@link GraphicLayer}.
+	 * 
+	 * @param projection used in the layer.
+	 * 
+	 * @return the new {@link GraphicLayer}.
+	 */
+	public GraphicLayer createGraphicsLayer(IProjection projection);
+
+	/**
+	 * Returns the current {@link SymbolManager}.
+	 * 
+	 * @return the {@link SymbolManager}
+	 */
+	SymbolManager getSymbolManager();
+
+	/**
+	 * Sets the class to use as the default implementation for the
+	 * {@link MapContextDrawer}.
+	 * 
+	 * @param drawerClazz
+	 *            the {@link MapContextDrawer} class to use
+	 * @throws MapContextException
+	 *             if there is any error setting the class
+	 */
+	public void setDefaultMapContextDrawer(Class drawerClazz)
+			throws MapContextException;
+
+	public void validateMapContextDrawer(Class drawerClazz) throws MapContextException;
+
+	/**
+	 * Creates a new instance of the default {@link MapContextDrawer}
+	 * implementation.
+	 * 
+	 * @return the new {@link MapContextDrawer} instance
+	 * @throws MapContextException
+	 *             if there is an error creating the new object instance
+	 */
+	public MapContextDrawer createDefaultMapContextDrawerInstance()
+			throws MapContextException;
+
+	/**
+	 * Creates a new instance of the provided {@link MapContextDrawer}
+	 * implementation.
+	 * 
+	 * @param drawerClazz
+	 *            the {@link MapContextDrawer} implementation class
+	 * @return the new {@link MapContextDrawer} instance
+	 * @throws MapContextException
+	 *             if there is an error creating the new object instance
+	 */
+	public MapContextDrawer createMapContextDrawerInstance(Class drawerClazz)
+			throws MapContextException;
+
+	
+	
+	void registerLegend(String legendName, Class legendClass)
+			throws MapContextRuntimeException;
+
+	ILegend createLegend(String legendName) throws MapContextRuntimeException;
+
+	void setDefaultVectorLegend(String legendName);
+
+	IVectorLegend createDefaultVectorLegend(int shapeType)
+			throws MapContextRuntimeException;
+
+    // ================================================================
+	// = Legend reading/writing (GVSLEG, SLD, etc)
+	
+	/**
+	 * Registers legend writer.
+     * Format is a MIME type string. Examples:
+	 * 
+	 * "application/zip; subtype=gvsleg",
+     * "text/xml; subtype=sld/1.0.0",
+     * "text/xml; subtype=sld/1.1.0",
+	 * 
+	 * @param legendClass Legend class
+	 * @param format File type in mime format.
+	 * @param writerClass Class object of the writer
+	 * @throws MapContextRuntimeException
+	 */
+	void registerLegendWriter(Class legendClass, String format,
+			Class writerClass) throws MapContextRuntimeException;
+
+	/**
+	 * 
+     * Registers legend reader.
+     * Format is a MIME type string. Examples:
+     * 
+     * "application/zip; subtype=gvsleg",
+     * "text/xml; subtype=sld/1.0.0",
+     * "text/xml; subtype=sld/1.1.0",
+	 * 
+	 * @param format
+	 * @param readerClass
+	 * @throws MapContextRuntimeException
+	 */
+	void registerLegendReader(String format, Class readerClass)
+			throws MapContextRuntimeException;
+
+	/**
+	 * Creates a legend writer for the specified legend class
+	 * 
+	 */
+	ILegendWriter createLegendWriter(Class legendClass, String format)
+			throws MapContextException;
+
+	/**
+	 * Creates a legend reader for the given format
+	 * ("sld", "gvsleg", etc are extracted from the MIME long string)
+	 */
+	ILegendReader createLegendReader(String format)
+			throws MapContextRuntimeException;
+	
+	/**
+	 * 
+     * Format is a MIME type string. Examples:
+     * 
+     * "application/zip; subtype=gvsleg",
+     * "text/xml; subtype=sld/1.0.0",
+     * "text/xml; subtype=sld/1.1.0",
+	 * 
+	 * @return A list of Strings with the available formats for reading
+	 * legends
+	 */
+	List getLegendReadingFormats();
+
+	/**
+	 * 
+     * Format is a MIME type string. Examples:
+     * 
+     * "application/zip; subtype=gvsleg",
+     * "text/xml; subtype=sld/1.0.0",
+     * "text/xml; subtype=sld/1.1.0",
+	 * 
+	 * @return A list of Strings with the available formats for writing
+	 * legends
+	 */
+	List getLegendWritingFormats();
+
+	
+    // ================================================================
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	int getDefaultCartographicSupportMeasureUnit();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void setDefaultCartographicSupportMeasureUnit(
+			int defaultCartographicSupportMeasureUnit);
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	int getDefaultCartographicSupportReferenceSystem();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void setDefaultCartographicSupportReferenceSystem(
+			int defaultCartographicSupportReferenceSystem);
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	Color getDefaultSymbolColor();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void setDefaultSymbolColor(Color defaultSymbolColor);
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void resetDefaultSymbolColor();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	Color getDefaultSymbolFillColor();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void setDefaultSymbolFillColor(Color defaultSymbolFillColor);
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void resetDefaultSymbolFillColor();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	boolean isDefaultSymbolFillColorAleatory();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void setDefaultSymbolFillColorAleatory(
+			boolean defaultSymbolFillColorAleatory);
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void resetDefaultSymbolFillColorAleatory();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	Font getDefaultSymbolFont();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void setDefaultSymbolFont(Font defaultSymbolFont);
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void resetDefaultSymbolFont();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	String getSymbolLibraryPath();
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void setSymbolLibraryPath(String symbolLibraryPath);
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0
+	 * @see {@link SymbolPreferences}.
+	 */
+	void resetSymbolLibraryPath();
+	
+	
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	ISymbol createSymbol(String symbolName) throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	ISymbol createSymbol(int shapeType) throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	ISymbol createSymbol(String symbolName, Color color)
+			throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	ISymbol createSymbol(int shapeType, Color color)
+			throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	IMultiLayerSymbol createMultiLayerSymbol(String symbolName)
+			throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	IMultiLayerSymbol createMultiLayerSymbol(int shapeType)
+			throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	void registerSymbol(String symbolName, Class symbolClass)
+			throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	void registerSymbol(String symbolName, int[] shapeTypes, Class symbolClass)
+			throws MapContextException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	void registerMultiLayerSymbol(String symbolName, Class symbolClass)
+			throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	void registerMultiLayerSymbol(String symbolName, int[] shapeTypes,
+			Class symbolClass) throws MapContextRuntimeException;
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+	 */
+	IWarningSymbol getWarningSymbol(String message, String symbolDesc,
+			int symbolDrawExceptionType) throws MapContextRuntimeException;
+	
+	/**
+	 * It returns the legend associated with a {@link DataStore}.
+	 * If the legend doesn't exist it returns <code>null</code>.
+	 * @param dataStore
+	 * the store that could have a legend.
+	 * @return
+	 * the legend or <code>null</code>.
+	 */
+	ILegend getLegend(DataStore dataStore);	
+	
+	/**
+     * It returns the labeling strategy associated with a {@link DataStore}.
+     * If the labeling strategy doesn't exist it returns <code>null</code>.
+     * @param dataStore
+     * the store that could have a labeling strategy.
+     * @return
+     * the labeling strategy or <code>null</code>.
+     */
+	ILabelingStrategy getLabelingStrategy(DataStore dataStore);
+
+
+	void registerIconLayer(String store, String iconName);
+	
+	String getIconLayer(DataStore store);
+	
+    // TODO:
+    // DynObjectModel getFeatureTypeUIModel(DataStore store,
+    // FeatureType featureType);
+	
+	/**
+	 * Returns the default CRS.
+	 * This is NOT taken from the app
+	 * preferences because this is a library. It is a
+	 * "hard-coded" default CRS, used as a last resort.
+	 * @return the default CRS
+	 */
+	IProjection getDefaultCRS();
+        
+        public File getColorTableLibraryFolder();
+        
+        public void setColorTableLibraryFolder(File colorTableLibraryFolder);
+        
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Record.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Record.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Record.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+public interface Record {
+    int getFieldCount() ;
+
+    String getFieldName(int index) ;
+
+    String getFieldValue(int index) ;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Record.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ViewPort.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ViewPort.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ViewPort.java	(revision 42196)
@@ -0,0 +1,1848 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.GeoCalc;
+import org.cresques.cts.IProjection;
+import org.gvsig.compat.CompatLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.events.ColorEvent;
+import org.gvsig.fmap.mapcontext.events.ExtentEvent;
+import org.gvsig.fmap.mapcontext.events.ProjectionEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.ViewPortListener;
+import org.gvsig.timesupport.Time;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * <p>
+ * <code>ViewPort</code> class represents the logic needed to transform a
+ * rectangular area of a map to the available area in screen to display it.
+ * </p>
+ * <p>
+ * Includes an affine transformation, between the rectangular area selected of
+ * the external map, in its own <i>map coordinates</i>, to the rectangular area
+ * available of a view in <i>screen coordinates</i>.
+ * </p>
+ * <p>
+ * Elements:
+ * <ul>
+ * <li><i>extent</i>: the area selected of the map, in <i>map coordinates</i>.
+ * <li><i>imageSize</i>: width and height in pixels (<i>screen coordinates</i>)
+ * of the area available in screen to display the area selected of the map.
+ * <li><i>adjustedExtent</i>: the area selected must be an scale of
+ * <i>imageSize</i>.<br>
+ * This implies adapt the extent, preserving and centering it, and adding around
+ * the needed area to fill all the image size. That added area will be extracted
+ * from the original map, wherever exists, and filled with the background color
+ * wherever not.
+ * <li><i>scale</i>: the scale between the adjusted extent and the image size.
+ * <li><i>backColor</i>: the default background color in the view, if there is
+ * no map.
+ * <li><i>trans</i>: the affine transformation.
+ * <li><i>proj</i>: map projection used in this view.
+ * <li><i>distanceUnits</i>: distance measurement units, of data in screen.
+ * <li><i>mapUnits</i>: measurement units, of data in map.
+ * <li><i>extents</i>: an {@link ExtentHistory ExtentHistory} with the last
+ * previous extents.
+ * <li><i>offset</i>: position in pixels of the available rectangular area,
+ * where start drawing the map.
+ * <li><i>dist1pixel</i>: the distance in <i>world coordinates</i> equivalent to
+ * 1 pixel in the view with the current extent.
+ * <li><i>dist3pixel</i>: the distance in <i>world coordinates</i> equivalent to
+ * 3 pixels in the view with the current extent.
+ * <li><i>listeners</i>: list with the {@link ViewPortListener ViewPortListener}
+ * registered.
+ * </ul>
+ * </p>
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class ViewPort implements Persistent, Cloneable {
+
+  private static final String FIELD_DISTANCE_AREA = "distanceArea";
+
+  private static final String FIELD_IMAGE_SIZE = "imageSize";
+
+  private static final String FIELD_PROJ = "proj";
+
+  private static final String FIELD_OFFSET = "offset";
+
+  private static final String FIELD_MAP_UNITS = "mapUnits";
+
+  private static final String FIELD_EXTENT = "extent";
+
+  private static final String FIELD_EXTENTS = "extents";
+
+  private static final String FIELD_DISTANCE_UNITS = "distanceUnits";
+
+  private static final String FIELD_DIST3PIXEL = "dist3pixel";
+
+  private static final String FIELD_DIST1PIXEL = "dist1pixel";
+
+  private static final String FIELD_CLIP = "clip";
+
+  private static final String FIELD_BACK_COLOR = "backColor";
+
+  private static final String FIELD_ADJUSTED_EXTENT = "adjustedExtent";
+
+  private static final GeometryManager geomManager = GeometryLocator
+      .getGeometryManager();
+
+  private static final Logger logger = LoggerFactory.getLogger(ViewPort.class);
+
+  /**
+   * <p>
+   * Area selected by user using some tool.
+   * </p>
+   * <p>
+   * When the zoom changes (for instance when using the zoom in or zoom out
+   * tools, but also zooming to a selected feature or shape) the extent that
+   * covers that area is the value returned by this method. It is not the actual
+   * area shown in the view because it does not care about the aspect ratio of
+   * the available area. However, any part of the real world contained in this
+   * extent is shown in the view.
+   * </p>
+   * <p>
+   * Probably this is not what you are looking for. If you are looking for the
+   * complete extent currently shown, you must use
+   * {@linkplain #getAdjustedExtent()} method which returns the extent that
+   * contains this one but regarding the current view's aspect ratio.
+   * </p>
+   * 
+   * @see #getExtent()
+   * @see #setEnvelope(Envelope)
+   */
+  protected Rectangle2D extent;
+
+  protected Time time;
+
+  /**
+   * <p>
+   * Location and dimensions of the extent adjusted to the image size.
+   * </p>
+   * 
+   * @see #getAdjustedExtent()
+   */
+  protected Rectangle2D adjustedExtent;
+
+  /**
+   * Draw version of the context. It's used for know when de componend has
+   * changed any visualization property
+   * 
+   * @see getDrawVersion
+   * @see updateDrawVersion
+   */
+  private long drawVersion = 0L;
+
+  /**
+   * <p>
+   * History with the last extents of the view.
+   * </p>
+   * 
+   * @see #setPreviousExtent()
+   * @see #getExtents()
+   */
+  protected ExtentHistory extentsHistory = new ExtentHistory();
+
+  /**
+   * <p>
+   * Size in <i>screen coordinates</i> of the rectangle where the image is
+   * displayed.
+   * </p>
+   * <p>
+   * Used by {@linkplain #calculateAffineTransform()} to calculate:<br>
+   * <ul>
+   * <li>The new {@link #scale scale} .
+   * <li>The new {@link #adjustedExtent adjustableExtent} .
+   * <li>The new {@link #trans trans} .
+   * <li>The new real world coordinates equivalent to 1 pixel (
+   * {@link #dist1pixel dist1pixel}) .
+   * <li>The new real world coordinates equivalent to 3 pixels (
+   * {@link #dist3pixel dist3pixel}) .
+   * </ul>
+   * </p>
+   * 
+   * @see #getImageSize()
+   * @see #getImageHeight()
+   * @see #getImageWidth()
+   * @see #setImageSize(Dimension)
+   */
+  private Dimension imageSize;
+
+  /**
+   * <p>
+   * the affine transformation between the {@link #extent extent} in <i>map 2D
+   * coordinates</i> to the image area in the screen, in <i>screen 2D
+   * coordinates</i> (pixels).
+   * </p>
+   * 
+   * @see AffineTransform
+   * @see #getAffineTransform()
+   * @see #setAffineTransform(AffineTransform)
+   * @see #calculateAffineTransform()
+   */
+  private AffineTransform trans = new AffineTransform();
+
+  /**
+   * <p>
+   * Measurement unit used for measuring distances and displaying information.
+   * </p>
+   * 
+   * @see #getDistanceUnits()
+   * @see #setDistanceUnits(int)
+   */
+  private int distanceUnits = 1;
+
+  /**
+   * <p>
+   * Measurement unit used for measuring areas and displaying information.
+   * </p>
+   * 
+   * @see #getDistanceArea()
+   * @see #setDistanceArea(int)
+   */
+  private int distanceArea = 1;
+
+  /**
+   * <p>
+   * Measurement unit used by this view port for the map.
+   * </p>
+   * 
+   * @see #getMapUnits()
+   * @see #setMapUnits(int)
+   */
+  private int mapUnits = 1;
+
+  /**
+   * <p>
+   * Array with the {@link ViewPortListener ViewPortListener}s registered to
+   * this view port.
+   * </p>
+   * 
+   * @see #addViewPortListener(ViewPortListener)
+   * @see #removeViewPortListener(ViewPortListener)
+   */
+  private ArrayList listeners = new ArrayList();
+
+  /**
+   * <p>
+   * The offset is the position where start drawing the map.
+   * </p>
+   * <p>
+   * The offset of a <a href="http://www.gvsig.gva.es/">gvSIG</a>'s <i>View</i>
+   * is always (0, 0) because the drawing area fits with the full window area.
+   * But in a <a href="http://www.gvsig.gva.es/">gvSIG</a>'s <i>Layout</i> it's
+   * up to the place where the <code>FFrameView</code> is located.
+   * </p>
+   * 
+   * @see #getOffset()
+   * @see #setOffset(Point2D)
+   */
+  private Point2D offset = new Point2D.Double(0, 0);
+
+  /**
+   * <p>
+   * Clipping area.
+   * </p>
+   */
+  // private Rectangle2D clip;
+
+  /**
+   * <p>
+   * Background color of this view.
+   * </p>
+   * 
+   * @see #getBackColor()
+   * @see #setBackColor(Color)
+   */
+  private Color backColor = null; // Color.WHITE;
+
+  /**
+   * <p>
+   * Information about the map projection used in this view.
+   * </p>
+   * 
+   * @see #getProjection()
+   * @see #setProjection(IProjection)
+   */
+  private IProjection proj;
+
+  /**
+   * <p>
+   * Represents the distance in <i>world coordinates</i> equivalent to 1 pixel
+   * in the view with the current extent.
+   * </p>
+   * 
+   * @see #getDist1pixel()
+   * @see #setDist1pixel(double)
+   */
+  private double dist1pixel;
+
+  /**
+   * <p>
+   * Represents the distance in <i>world coordinates</i> equivalent to 3 pixels
+   * in the view with the current extent.
+   * </p>
+   * 
+   * @see #getDist3pixel()
+   * @see #setDist3pixel(double)
+   */
+  private double dist3pixel;
+
+  /**
+   * <p>
+   * Ratio between the size of <code>imageSize</code> and <code>extent</code>: <br>
+   * <i>
+   * 
+   * <pre>
+   * min{(imageSize.getHeight()/extent.getHeight(), imageSize.getWidth()/extent.getWidth())}
+   * </pre>
+   * 
+   * </i>
+   * </p>
+   */
+  private double scale;
+
+  /**
+   * <p>
+   * Clipping area.
+   * </p>
+   * 
+   * @see #setClipRect(Rectangle2D)
+   */
+  private Rectangle2D cliprect;
+
+  /**
+   * <p>
+   * Enables or disables the <i>"adjustable extent"</i> mode.
+   * </p>
+   * <p>
+   * When calculates the affine transform, if
+   * <ul>
+   * <li><i>enabled</i>: the new <code>adjustedExtent</code> will have the (X,
+   * Y) coordinates of the <code>extent</code> and an area that will be an scale
+   * of the image size. That area will have different height or width (not both)
+   * of the extent according the least ratio (height or width) in
+   * 
+   * <pre>
+   * image.size/extent.size&quot;
+   * </pre>.
+   * <li><i>disabled</i>: the new <code>adjustedExtent</code> will be like
+   * <code>extent</code>.
+   * </ul>
+   * </p>
+   * 
+   * @see #setAdjustable(boolean)
+   */
+  private boolean adjustableExtent = true;
+
+  /**
+   * <p>
+   * ViewPort resolution in <i>dots-per-inch</i>. Useful to calculate the
+   * geographic scale of the view.
+   * </p>
+   * 
+   * @see Toolkit#getScreenResolution()
+   * @see MapContext#getScaleView()
+   */
+  private Double dpi = null;
+
+  public ViewPort() {
+
+  }
+
+  /**
+   * <p>
+   * Creates a new view port with the information of the projection in
+   * <code>proj</code> argument, and default configuration:
+   * </p>
+   * <p>
+   * <ul>
+   * <li><i><code>distanceUnits</code></i> = meters
+   * <li><i><code>mapUnits</code></i> = meters
+   * <li><i><code>backColor</code></i> = <i>undefined</i>
+   * <li><i><code>offset</code></i> = <code>new Point2D.Double(0, 0);</code>
+   * </ul>
+   * </p>
+   * 
+   * @param proj information of the projection for this view port
+   */
+  public ViewPort(IProjection proj) {
+    // Por defecto
+    this.proj = proj;
+  }
+
+  /**
+   * <p>
+   * Changes the status of the <i>"adjustable extent"</i> option to enabled or
+   * disabled.
+   * </p>
+   * <p>
+   * If view port isn't adjustable, won't bear in mind the aspect ratio of the
+   * available rectangular area to calculate the affine transform from the
+   * original map in real coordinates. (Won't scale the image to adapt it to the
+   * available rectangular area).
+   * </p>
+   * 
+   * @param boolean the boolean to be set
+   */
+  public void setAdjustable(boolean adjustable) {
+    if (adjustable == adjustableExtent) {
+      return;
+    }
+    adjustableExtent = adjustable;
+    this.updateDrawVersion();
+  }
+
+  /**
+   * <p>
+   * Appends the specified {@link ViewPortListener ViewPortListener} listener if
+   * weren't.
+   * </p>
+   * 
+   * @param arg0 the listener to add
+   * @return <code>true</code> if has been added successfully
+   * @see #removeViewPortListener(ViewPortListener)
+   */
+  public boolean addViewPortListener(ViewPortListener arg0) {
+    if (!listeners.contains(arg0)) {
+      return listeners.add(arg0);
+    }
+    return false;
+  }
+
+  /**
+   * <p>
+   * Removes the specified {@link ViewPortListener ViewPortListener} listener,
+   * if existed.
+   * </p>
+   * 
+   * @param arg0 the listener to remove
+   * @return <code>true</code> if the contained the specified listener.
+   * @see #addViewPortListener(ViewPortListener)
+   */
+  public boolean removeViewPortListener(ViewPortListener arg0) {
+    return listeners.remove(arg0);
+  }
+
+  /**
+   * <p>
+   * Converts and returns the distance <code>d</code>, that is in <i>map
+   * coordinates</i> to <i>screen coordinates</i> using a <i>delta transform</i>
+   * with the transformation affine information in the {@link #trans #trans}
+   * attribute.
+   * </p>
+   * 
+   * @param d distance in <i>map coordinates</i>
+   * @return distance equivalent in <i>screen coordinates</i>
+   * @see #toMapDistance(int)
+   * @see AffineTransform#deltaTransform(Point2D, Point2D)S
+   */
+  public int fromMapDistance(double d) {
+    Point2D.Double pWorld = new Point2D.Double(1, 1);
+    Point2D.Double pScreen = new Point2D.Double();
+
+    try {
+      trans.deltaTransform(pWorld, pScreen);
+    }
+    catch (Exception e) {
+      System.err.print(e.getMessage());
+    }
+
+    return (int) (d * pScreen.x);
+  }
+
+  /**
+   * <p>
+   * Converts and returns the 2D point <code>(x,y)</code>, that is in <i>map
+   * coordinates</i> to <i>screen coordinates</i> (pixels) using the affine
+   * transformation in the {@link #trans #trans} attribute.
+   * </p>
+   * 
+   * @param x the <code>x</code> <i>map coordinate</i> of a 2D point
+   * @param y the <code>y</code> <i>map coordinate</i> of a 2D point
+   * @return 2D point equivalent in <i>screen coordinates</i> (pixels)
+   * @see #fromMapPoint(Point2D)
+   * @see AffineTransform#transform(Point2D, Point2D)
+   */
+  public Point2D fromMapPoint(double x, double y) {
+    Point2D.Double pWorld = new Point2D.Double(x, y);
+    Point2D.Double pScreen = new Point2D.Double();
+
+    try {
+      trans.transform(pWorld, pScreen);
+    }
+    catch (Exception e) {
+      System.err.print(e.getMessage());
+    }
+
+    return pScreen;
+  }
+
+  /**
+   * <p>
+   * Converts and returns the 2D point argument, that is in <i>map
+   * coordinates</i> to <i>screen coordinates</i> (pixels) using the affine
+   * transformation in the {@link #trans #trans} attribute.
+   * </p>
+   * 
+   * @param point the 2D point in <i>map coordinates</i>
+   * @return 2D point equivalent in <i>screen coordinates</i> (pixels)
+   * @see #toMapPoint(Point2D)
+   * @see #fromMapPoint(double, double)
+   */
+  public Point2D fromMapPoint(Point2D point) {
+    return fromMapPoint(point.getX(), point.getY());
+  }
+
+  /**
+   * <p>
+   * Converts and returns the 2D point <code>(x,y)</code>, that is in <i>screen
+   * coordinates</i> (pixels) to <i>map coordinates</i> using the affine
+   * transformation in the {@link #trans #trans} attribute.
+   * </p>
+   * 
+   * @param x the <code>x</code> <i>screen coordinate</i> of a 2D point
+   * @param y the <code>y</code> <i>screen coordinate</i> of a 2D point
+   * @return 2D point equivalent in <i>map coordinates</i>
+   * @see #toMapPoint(Point2D)
+   * @see #fromMapPoint(double, double)
+   * @deprecated use {@link #convertToMapPoint(int, int)}
+   */
+  public Point2D toMapPoint(int x, int y) {
+    Point2D pScreen = new Point2D.Double(x, y);
+
+    return toMapPoint(pScreen);
+  }
+
+  /**
+   * <p>
+   * Converts and returns the {@link Rectangle2D Rectangle2D}, that is in
+   * <i>screen coordinates</i> (pixels) to <i>map coordinates</i> using
+   * {@linkplain #toMapDistance(int)}, and {@linkplain #toMapPoint(int, int)}.
+   * </p>
+   * 
+   * @param r the 2D rectangle in <i>screen coordinates</i> (pixels)
+   * @return 2D rectangle equivalent in <i>map coordinates</i>
+   * @see #fromMapRectangle(Rectangle2D)
+   * @see #toMapDistance(int)
+   * @see #toMapPoint(int, int)
+   */
+  public Rectangle2D toMapRectangle(Rectangle2D r) {
+    Rectangle2D rect = new Rectangle2D.Double();
+    Point2D p1 = toMapPoint((int) r.getX(), (int) r.getY());
+    Point2D p2 = toMapPoint((int) r.getMaxX(), (int) r.getMaxY());
+    rect.setFrameFromDiagonal(p1, p2);
+    return rect;
+  }
+
+  /**
+   * <p>
+   * Converts and returns the distance <code>d</code>, that is in <i>screen
+   * coordinates</i> to <i>map coordinates</i> using the transformation affine
+   * information in the {@link #trans #trans} attribute.
+   * </p>
+   * 
+   * @param d distance in pixels
+   * @return distance equivalent in <i>map coordinates</i>
+   * @see #fromMapDistance(double)
+   * @see AffineTransform
+   */
+  public double toMapDistance(int d) {
+    double dist = d / trans.getScaleX();
+
+    return dist;
+  }
+
+  /**
+   * <p>
+   * Converts and returns the 2D point argument, that is in <i>screen
+   * coordinates</i> (pixels) to <i>map coordinates</i> using the inverse affine
+   * transformation of the {@link #trans #trans} attribute.
+   * </p>
+   * 
+   * @param pScreen the 2D point in <i>screen coordinates</i> (pixels)
+   * @return 2D point equivalent in <i>map coordinates</i>
+   * @see #toMapPoint(int, int)
+   * @see AffineTransform#createInverse()
+   * @see AffineTransform#transform(Point2D, Point2D)
+   * @deprecated use {@link #convertToMapPoint(Point2D)}
+   */
+  public Point2D toMapPoint(Point2D pScreen) {
+    Point2D.Double pWorld = new Point2D.Double();
+    AffineTransform at;
+
+    try {
+      at = trans.createInverse();
+      at.transform(pScreen, pWorld);
+    }
+    catch (NoninvertibleTransformException e) {
+      throw new RuntimeException("Non invertible transform Exception", e);
+    }
+
+    return pWorld;
+  }
+
+  public Point convertToMapPoint(Point2D pScreen) {
+    Point2D p = toMapPoint(pScreen);
+    try {
+      return geomManager.createPoint(p.getX(), p.getY(),
+          Geometry.SUBTYPES.GEOM2D);
+    }
+    catch (CreateGeometryException e) {
+      // FIXME: Use a most especific exception.
+      throw new RuntimeException(e);
+    }
+  }
+
+  public Point convertToMapPoint(int x, int y) {
+    Point2D pScreen = new Point2D.Double(x, y);
+
+    return convertToMapPoint(pScreen);
+  }
+
+  /**
+   * <p>
+   * Returns the real distance (in <i>world coordinates</i>) at the graphic
+   * layers of two 2D points (in <i>map coordinates</i>) of the plane where is
+   * selected the <i>extent</i>.
+   * </p>
+   * <p>
+   * If the projection of this view is UTM, considers the Earth curvature.
+   * </p>
+   * 
+   * @param pt1 a 2D point in <i>map coordinates</i>
+   * @param pt2 another 2D point in <i>map coordinates</i>
+   * @return the distance in meters between the two points 2D
+   * @see GeoCalcImpl#distanceVincenty(Point2D, Point2D)
+   */
+  public double distanceWorld(Point2D pt1, Point2D pt2) {
+
+    double dist = 0;
+    if (proj.isProjected()) {
+      dist = pt1.distance(pt2);
+      dist = dist * MapContext.getDistanceTrans2Meter()[getMapUnits()];
+    }
+    else {
+      GeoCalc geocalc = new GeoCalc(proj);
+      dist = geocalc.distanceVincenty(pt1, pt2);
+    }
+    return dist;
+  }
+
+  /**
+   * <p>
+   * Sets as extent and adjusted extent of this view port, the previous.
+   * Recalculating its parameters.
+   * </p>
+   * 
+   * @see #getExtents()
+   * @see #calculateAffineTransform()
+   * @deprecated use {@link ViewPort#setPreviousEnvelope()}
+   */
+  public void setPreviousExtent() {
+    setPreviousEnvelope();
+  }
+
+  /**
+   * <p>
+   * Sets as envelope and adjusted envelope of this view port, the previous.
+   * Recalculating its parameters.
+   * Stores the current extent in the next extents of the history.
+   * </p>
+   * 
+   * @see #getExtents()
+   * @see #calculateAffineTransform()
+   */
+  public void setPreviousEnvelope() {
+    this.updateDrawVersion();
+    
+//    extentsHistory.putNext(extent);
+//    extent = extentsHistory.removePrev();
+    extent = extentsHistory.setPreviousExtent();
+
+    // Calcula la transformaci�n af�n
+    calculateAffineTransform();
+
+    // Lanzamos los eventos de extent cambiado
+    callExtentChanged(getAdjustedExtent());
+  }
+
+  /**
+   * <p>
+   * Sets as envelope and adjusted envelope of this view port, the next.
+   * Recalculating its parameters.
+   * Stores the current extent in the previous extents of the history.
+   * </p>
+   * 
+   * @see #getExtents()
+   * @see #calculateAffineTransform()
+   */
+  public void setNextEnvelope() {
+    this.updateDrawVersion();
+    
+    extent = extentsHistory.setNextExtent();
+    
+    // Calcula la transformaci�n af�n
+    calculateAffineTransform();
+
+    // Lanzamos los eventos de extent cambiado
+    callExtentChanged(getAdjustedExtent());
+  }
+
+  /**
+   * <p>
+   * Gets the area selected by user using some tool.
+   * </p>
+   * <p>
+   * When the zoom changes (for instance using the <i>zoom in</i> or <i>zoom
+   * out</i> tools, but also zooming to a selected feature or shape) the extent
+   * that covers that area is the value returned by this method. It is not the
+   * actual area shown because it doesn't care about the aspect ratio of the
+   * image size of the view. However, any part of the real world contained in
+   * this extent is shown in the view.
+   * </p>
+   * <p>
+   * If you are looking for the complete extent currently shown, you must use
+   * the {@linkplain #getAdjustedExtent()} method.
+   * </p>
+   * 
+   * @return the current extent
+   * @see #setEnvelope(Envelope)
+   * @see #getAdjustedExtent()
+   * @see #setPreviousExtent()
+   * @see #getExtents()
+   * @deprecated use {@link ViewPort#getEnvelope()}
+   */
+  public Rectangle2D getExtent() {
+    return extent;
+  }
+
+  /**
+   * <p>
+   * Gets the envelope selected by user using some tool.
+   * </p>
+   * <p>
+   * When the zoom changes (for instance using the <i>zoom in</i> or <i>zoom
+   * out</i> tools, but also zooming to a selected feature or shape) the
+   * envelope that covers that area is the value returned by this method. It is
+   * not the actual envelope shown because it doesn't care about the aspect
+   * ratio of the image size of the view. However, any part of the real world
+   * contained in this envelope is shown in the view.
+   * </p>
+   * <p>
+   * If you are looking for the complete extent currently shown, you must use
+   * the {@linkplain #getAdjustedEnvelope()} method.
+   * </p>
+   * 
+   * @return the current envelope
+   * @see #setEnvelope(Envelope)
+   * @see #getAdjustedEnvelope()
+   * @see #setPreviousEnvelope()
+   * @see #getEnvelopes()
+   */
+  public Envelope getEnvelope() {
+    if (this.extent == null) {
+      return null;
+    }
+    try {
+      return geomManager.createEnvelope(extent.getMinX(), extent.getMinY(),
+          extent.getMaxX(), extent.getMaxY(), SUBTYPES.GEOM2D);
+      // This class has to use Envelope instead of Rectangle2D. This catch
+      // will disappear
+    }
+    catch (CreateEnvelopeException e) {
+      logger.error("Error creating the envelope");
+    }
+    return null;
+  }
+
+  /**
+   * <p>
+   * Changes the <i>extent</i> and <i>adjusted extent</i> of this view port:<br>
+   * <ul>
+   * <li>Stores the previous extent.
+   * <li>Calculates the new extent using <code>r</code>:
+   * 
+   * <pre>
+   * extent = new Rectangle2D.Double(r.getMinX() - 0.1, r.getMinY() - 0.1,
+   *     r.getWidth() + 0.2, r.getHeight() + 0.2);
+   * </pre>
+   * <li>Executes {@linkplain #calculateAffineTransform()}: getting the new
+   * scale, adjusted extent, affine transformation between map and screen
+   * coordinates, the real world coordinates equivalent to 1 pixel, and the real
+   * world coordinates equivalent to 3 pixels.
+   * <li>Notifies all {@link ViewPortListener ViewPortListener} registered that
+   * the extent has changed.
+   * </ul>
+   * </p>
+   * 
+   * @param r the new extent
+   * @see #getExtent()
+   * @see #getExtents()
+   * @see #calculateAffineTransform()
+   * @see #setPreviousExtent()
+   * @see #clear()
+   */
+  public void setEnvelope(Envelope r) {
+    Rectangle2D newExtent = null;
+    // Esto comprueba que el extent no es de anchura o altura = "0"
+    // y si es as� lo redimensiona.
+    if (r != null) {
+      if ((r.getMaximum(0) - r.getMinimum(0) == 0)
+          || (r.getMaximum(1) - r.getMinimum(1) == 0)) {
+        newExtent = new Rectangle2D.Double(r.getMinimum(0) - 0.1,
+            r.getMinimum(1) - 0.1, r.getMaximum(0) - r.getMinimum(0) + 0.2,
+            r.getMaximum(1) - r.getMinimum(1) + 0.2);
+      }
+      else {
+        newExtent = new Rectangle2D.Double(r.getMinimum(0), r.getMinimum(1),
+            Math.abs(r.getMaximum(0) - r.getMinimum(0)), Math.abs(r
+                .getMaximum(1) - r.getMinimum(1)));
+      }
+    }
+
+    if (this.extent != null && this.extent.equals(newExtent)) {
+      return;
+    }
+
+    this.updateDrawVersion();
+    this.extent = newExtent;
+    extentsHistory.put(extent);
+
+    // Calcula la transformaci�n af�n
+    calculateAffineTransform();
+   
+
+    // Lanzamos los eventos de extent cambiado
+    callExtentChanged(getAdjustedExtent());
+  }
+
+  /**
+   * <p>
+   * Changes the <i>extent</i> and <i>adjusted extent</i> of this view port:<br>
+   * <ul>
+   * <li>Executes {@linkplain #calculateAffineTransform()}: getting the new
+   * scale, adjusted extent, affine transformation between map and screen
+   * coordinates, the real world coordinates equivalent to 1 pixel, and the real
+   * world coordinates equivalent to 3 pixels.
+   * <li>Notifies to all {@link ViewPortListener ViewPortListener} registered
+   * that the extent has changed.
+   * </ul>
+   * </p>
+   * 
+   * @see #setEnvelope(Envelope)
+   * @see #calculateAffineTransform()
+   */
+  public void refreshExtent() {
+    //Por compatibilidad con versiones anteriores a la introducci�n de las lista de zooms siguientes
+    if (extentsHistory.getCurrent() == null) {
+      extentsHistory.put(extent);
+    } else {
+      extent = extentsHistory.getCurrent();
+    }
+
+    // Calcula la transformaci�n af�n
+    calculateAffineTransform();
+
+    // Lanzamos los eventos de extent cambiado
+    callExtentChanged(getAdjustedExtent());
+  }
+
+  /**
+   * <p>
+   * Calculates and returns using the current projection of this view port, the
+   * scale that is the extent in <i>screen coordinates</i> from the image in
+   * <i>map coordinates</i>.
+   * </p>
+   * 
+   * @return the scale <i>extent / image size</i> projected by this view port
+   * @deprecated since 07/09/07, use {@linkplain MapContext#getScaleView()}
+   */
+  private double getScale() {
+
+    double[] trans2Meter = MapContext.getDistanceTrans2Meter();
+    if (proj == null) {
+      double wmeters = ((getImageSize().width / this.getDPI()) * 0.0254);
+      return (long) ((trans2Meter[getMapUnits()] * getAdjustedEnvelope()
+          .getLength(0)) / wmeters);
+    }
+    else {
+      return Math.round(proj.getScale(getAdjustedEnvelope().getMinimum(0)
+          * trans2Meter[getMapUnits()], getAdjustedEnvelope().getMaximum(0)
+          * trans2Meter[getMapUnits()], getImageSize().width, this.getDPI()));
+    }
+
+    /*
+     * return proj.getScale(extent.getMinX(), extent.getMaxX(), imageSize.width,
+     * dpi);
+     */
+  }
+
+  /**
+   * <p>
+   * Affine transformation between <i>map 2D coordinates</i> to <i>screen 2D
+   * coordinates</i> (pixels), preserving the "straightness" and "parallelism"
+   * of the lines.
+   * </p>
+   * 
+   * @return the affine transformation
+   * @see #setAffineTransform(AffineTransform)
+   * @see #calculateAffineTransform()
+   */
+  public AffineTransform getAffineTransform() {
+    return trans;
+  }
+
+  /**
+   * <p>
+   * Returns the size of the image projected.
+   * </p>
+   * 
+   * @return the image size
+   * @see #setImageSize(Dimension)
+   * @see #getImageHeight()
+   * @see #getImageWidth()
+   */
+  public Dimension getImageSize() {
+    return imageSize;
+  }
+
+  /**
+   * <p>
+   * Sets the size of the image projected, recalculating the parameters of this
+   * view port.
+   * </p>
+   * 
+   * @param imageSize the image size
+   * @see #getImageSize()
+   * @see #calculateAffineTransform()
+   */
+  public void setImageSize(Dimension imageSize) {
+
+    if (this.imageSize == null || (!this.imageSize.equals(imageSize))) {
+      this.updateDrawVersion();
+      this.imageSize = imageSize;
+      calculateAffineTransform();
+    }
+  }
+
+  /**
+   * <p>
+   * Notifies to all view port listeners registered, that the adjusted extent of
+   * this view port has changed.
+   * </p>
+   * 
+   * @param newRect the new adjusted extend
+   * @see #refreshExtent()
+   * @see #setEnvelope(Envelope)
+   * @see #setPreviousExtent()
+   * @see ExtentEvent
+   * @see ViewPortListener
+   */
+  protected void callExtentChanged(Envelope newRect) {
+    ExtentEvent ev = ExtentEvent.createExtentEvent(newRect);
+
+    for (int i = 0; i < listeners.size(); i++) {
+      ViewPortListener listener = (ViewPortListener) listeners.get(i);
+      listener.extentChanged(ev);
+    }
+  }
+
+  /**
+   * <p>
+   * Notifies to all view port listeners registered, that the time of this view
+   * port has changed.
+   * </p>
+   * 
+   * @param newTime the new time
+   * @see #refreshExtent()
+   * @see #setTime(Time)
+   * @see ExtentEvent
+   * @see ViewPortListener
+   */
+  protected void callTimeChanged(Time newTime) {
+    ExtentEvent viewPortEvent = new ExtentEvent(newTime);
+
+    for (int i = 0; i < listeners.size(); i++) {
+      ViewPortListener listener = (ViewPortListener) listeners.get(i);
+      listener.extentChanged(viewPortEvent);
+    }
+  }
+
+  /**
+   * <p>
+   * Notifies to all view port listeners registered, that the background color
+   * of this view port has changed.
+   * </p>
+   * 
+   * @param c the new background color
+   * @see #setBackColor(Color)
+   * @see ColorEvent
+   * @see ViewPortListener
+   */
+  private void callColorChanged(Color c) {
+    ColorEvent ce = ColorEvent.createColorEvent(c);
+
+    for (int i = 0; i < listeners.size(); i++) {
+      ViewPortListener listener = (ViewPortListener) listeners.get(i);
+      listener.backColorChanged(ce);
+    }
+  }
+
+  /**
+   * <p>
+   * Notifies to all view port listeners registered, that the projection of this
+   * view port has changed.
+   * </p>
+   * 
+   * @param projection the new projection
+   * @see #setProjection(IProjection)
+   * @see ProjectionEvent
+   * @see ViewPortListener
+   */
+  private void callProjectionChanged(IProjection projection) {
+    ProjectionEvent ev = ProjectionEvent.createProjectionEvent(projection);
+
+    for (int i = 0; i < listeners.size(); i++) {
+      ViewPortListener listener = (ViewPortListener) listeners.get(i);
+      listener.projectionChanged(ev);
+    }
+  }
+
+  /**
+   * <p>
+   * Calculates the affine transformation between the {@link #extent extent} in
+   * <i>map 2D coordinates</i> to the image area in the screen, in <i>screen 2D
+   * coordinates</i> (pixels).
+   * </p>
+   * <p>
+   * This process recalculates some parameters of this view port:<br>
+   * <ul>
+   * <li>The new {@link #scale scale} .
+   * <li>The new {@link #adjustedExtent adjustedExtent} .
+   * <li>The new {@link #trans trans} .
+   * <li>The new real world coordinates equivalent to 1 pixel (
+   * {@link #dist1pixel dist1pixel}) .
+   * <li>The new real world coordinates equivalent to 3 pixels (
+   * {@link #dist3pixel dist3pixel}) .
+   * </ul>
+   * </p>
+   * 
+   * @see #getAffineTransform()
+   * @see #setAffineTransform(AffineTransform)
+   * @see #refreshExtent()
+   * @see #setEnvelope(Envelope)
+   * @see #setImageSize(Dimension)
+   * @see #setPreviousExtent()
+   * @see #createFromXML(XMLEntity)
+   * @see AffineTransform
+   */
+  private void calculateAffineTransform() {
+    if ((imageSize == null) || (extent == null) || (imageSize.width <= 0)
+        || (imageSize.height <= 0)) {
+      return;
+    }
+
+    AffineTransform escalado = new AffineTransform();
+    AffineTransform translacion = new AffineTransform();
+
+    double escalaX;
+    double escalaY;
+
+    escalaX = imageSize.width / extent.getWidth();
+    escalaY = imageSize.height / extent.getHeight();
+
+    double xCenter = extent.getCenterX();
+    double yCenter = extent.getCenterY();
+    double newHeight;
+    double newWidth;
+
+    adjustedExtent = new Rectangle2D.Double();
+
+    if (adjustableExtent) {
+      if (escalaX < escalaY) {
+        scale = escalaX;
+        newHeight = imageSize.height / scale;
+        adjustedExtent.setRect(xCenter - (extent.getWidth() / 2.0), yCenter
+            - (newHeight / 2.0), extent.getWidth(), newHeight);
+      }
+      else {
+        scale = escalaY;
+        newWidth = imageSize.width / scale;
+        adjustedExtent.setRect(xCenter - (newWidth / 2.0),
+            yCenter - (extent.getHeight() / 2.0), newWidth, extent.getHeight());
+      }
+      escalado.setToScale(scale, -scale);
+    }
+    else { // adjusted is same as extent
+      scale = escalaX;
+      adjustedExtent.setFrame(extent);
+      escalado.setToScale(escalaX, -escalaY);
+    }
+    Envelope env = getAdjustedExtent();
+    if (env == null) {
+      return;
+    }
+    translacion.setToTranslation(-env.getMinimum(0), -env.getMinimum(1)
+        - getAdjustedExtent().getLength(1));
+
+    AffineTransform offsetTrans = new AffineTransform();
+    offsetTrans.setToTranslation(offset.getX(), offset.getY());
+
+    trans.setToIdentity();
+    trans.concatenate(offsetTrans);
+    trans.concatenate(escalado);
+
+    trans.concatenate(translacion);
+
+    // Calculamos las distancias de 1 pixel y 3 pixel con esa
+    // transformaci�n
+    // de coordenadas, de forma que est�n precalculadas para cuando las
+    // necesitemos
+    AffineTransform at;
+
+    try {
+      at = trans.createInverse();
+
+      Point2D pPixel = new Point2D.Float(1, 1);
+
+      Point2D.Float pProv = new Point2D.Float();
+      at.deltaTransform(pPixel, pProv);
+
+      dist1pixel = pProv.x;
+      dist3pixel = 3 * pProv.x;
+    }
+    catch (NoninvertibleTransformException e) {
+      System.err.println("transformada afin = " + trans.toString());
+      System.err.println("extent = " + extent.toString() + " imageSize= "
+          + imageSize.toString());
+      throw new RuntimeException("Non invertible transform Exception", e);
+    }
+  }
+
+  /**
+   * <p>
+   * Sets the offset.
+   * </p>
+   * <p>
+   * The offset is the position where start drawing the map.
+   * </p>
+   * 
+   * @param p 2D point that represents the offset in pixels
+   * @see #getOffset()
+   */
+  public void setOffset(Point2D p) {
+    if (!offset.equals(p)) {
+      this.updateDrawVersion();
+      offset = p;
+    }
+  }
+
+  /**
+   * <p>
+   * Gets the offset.
+   * </p>
+   * <p>
+   * The offset is the position where start drawing the map.
+   * </p>
+   * 
+   * @return 2D point that represents the offset in pixels
+   * @see #setOffset(Point2D)
+   */
+  public Point2D getOffset() {
+    return offset;
+  }
+
+  /**
+   * <p>
+   * Sets the background color.
+   * </p>
+   * 
+   * @param c the new background color
+   * @see #getBackColor()
+   */
+  public void setBackColor(Color c) {
+    if (!c.equals(this.backColor)) {
+      this.updateDrawVersion();
+      backColor = c;
+      callColorChanged(backColor);
+    }
+  }
+
+  /**
+   * <p>
+   * Gets the background color.
+   * </p>
+   * 
+   * @return the background color of the view
+   * @see #setBackColor(Color)
+   */
+  public Color getBackColor() {
+    return backColor;
+  }
+
+  /**
+   * <p>
+   * Returns the extent currently covered by the view adjusted (scaled) to the
+   * image size aspect.
+   * </p>
+   * 
+   * @return extent of the view adjusted to the image size aspect
+   * @see #setAdjustable(boolean)
+   * @deprecated use {@link ViewPort#getAdjustedEnvelope()} instead
+   */
+  public Envelope getAdjustedExtent() {
+    return getAdjustedEnvelope();
+  }
+
+  /**
+   * <p>
+   * Returns the envelope currently covered by the view adjusted (scaled) to the
+   * image size aspect.
+   * </p>
+   * 
+   * @return envelope of the view adjusted to the image size aspect
+   * @see #setAdjustable(boolean)
+   */
+  public Envelope getAdjustedEnvelope() {
+    if (cliprect != null) {
+      Rectangle2D r = adjustedExtent.createIntersection(cliprect);
+      try {
+        return geomManager.createEnvelope(r.getX(), r.getY(), r.getMaxX(),
+            r.getMaxY(), SUBTYPES.GEOM2D);
+      }
+      catch (CreateEnvelopeException e) {
+        e.printStackTrace();
+        logger.error("Error adjusting the extent", e);
+      }
+    }
+    if (adjustedExtent != null) {
+      try {
+        return geomManager.createEnvelope(adjustedExtent.getX(),
+            adjustedExtent.getY(), adjustedExtent.getMaxX(),
+            adjustedExtent.getMaxY(), SUBTYPES.GEOM2D);
+      }
+      catch (CreateEnvelopeException e) {
+        e.printStackTrace();
+        logger.error("Error adjusting the extent", e);
+      }
+    }
+    return null;
+  }
+
+  /**
+   * <p>
+   * Returns the measurement unit of this view port used for measuring distances
+   * and displaying information.
+   * </p>
+   * 
+   * @return the measurement unit of this view used for measuring distances and
+   *         displaying information
+   * @see #setDistanceUnits(int)
+   */
+  public int getDistanceUnits() {
+    return distanceUnits;
+  }
+
+  /**
+   * <p>
+   * Returns the measurement unit of this view port used for measuring areas and
+   * displaying information.
+   * </p>
+   * 
+   * @return the measurement unit of this view used for measuring areas and
+   *         displaying information
+   * @see #setDistanceUnits(int)
+   */
+  public int getDistanceArea() {
+    return distanceArea;
+  }
+
+  /**
+   * <p>
+   * Sets the measurement unit of this view port used for measuring distances
+   * and displaying information.
+   * </p>
+   * 
+   * @param distanceUnits the measurement unit of this view used for measuring
+   *          distances and displaying information
+   * @see #getDistanceUnits()
+   */
+  public void setDistanceUnits(int distanceUnits) {
+    this.distanceUnits = distanceUnits;
+  }
+
+  /**
+   * <p>
+   * Sets the measurement unit of this view port used for measuring areas and
+   * displaying information.
+   * </p>
+   * 
+   * @param distanceUnits the measurement unit of this view used for measuring
+   *          areas and displaying information
+   * @see #getDistanceUnits()
+   */
+  public void setDistanceArea(int distanceArea) {
+    this.distanceArea = distanceArea;
+  }
+
+  /**
+   * <p>
+   * Gets the measurement unit used by this view port for the map.
+   * </p>
+   * 
+   * @return Returns the current map measure unit
+   * @see #setMapUnits(int)
+   */
+  public int getMapUnits() {
+    return mapUnits;
+  }
+
+  /**
+   * <p>
+   * Sets the measurement unit used by this view port for the map.
+   * </p>
+   * 
+   * @param mapUnits the new map measure unit
+   * @see #getMapUnits()
+   */
+  public void setMapUnits(int mapUnits) {
+    this.mapUnits = mapUnits;
+  }
+
+  /**
+   * <p>
+   * Gets the width in <i>screen coordinates</i> of the rectangle where the
+   * image is displayed.
+   * </p>
+   * <p>
+   * Used by {@linkplain #calculateAffineTransform()} to calculate:<br>
+   * <ul>
+   * <li>The new {@link #scale scale} .
+   * <li>The new {@link #adjustedExtent adjustableExtent} .
+   * <li>The new {@link #trans trans} .
+   * <li>The new real world coordinates equivalent to 1 pixel (
+   * {@link #dist1pixel dist1pixel}) .
+   * <li>The new real world coordinates equivalent to 3 pixels (
+   * {@link #dist3pixel dist3pixel}) .
+   * </ul>
+   * </p>
+   * 
+   * @see #getImageHeight()
+   * @see #getImageSize()
+   * @see #setImageSize(Dimension)
+   */
+  public int getImageWidth() {
+    return imageSize.width;
+  }
+
+  /**
+   * <p>
+   * Gets the height in <i>screen coordinates</i> of the rectangle where the
+   * image is displayed.
+   * </p>
+   * <p>
+   * Used by {@linkplain #calculateAffineTransform()} to calculate:<br>
+   * <ul>
+   * <li>The new {@link #scale scale} .
+   * <li>The new {@link #adjustedExtent adjustableExtent} .
+   * <li>The new {@link #trans trans} .
+   * <li>The new real world coordinates equivalent to 1 pixel (
+   * {@link #dist1pixel dist1pixel}) .
+   * <li>The new real world coordinates equivalent to 3 pixels (
+   * {@link #dist3pixel dist3pixel}) .
+   * </ul>
+   * </p>
+   * 
+   * @see #getImageWidth()
+   * @see #getImageSize()
+   * @see #setImageSize(Dimension)
+   */
+  public int getImageHeight() {
+    return imageSize.height;
+  }
+
+  /**
+   * <p>
+   * Gets the distance in <i>world coordinates</i> equivalent to 1 pixel in the
+   * view with the current extent.
+   * </p>
+   * 
+   * @return the distance
+   * @see #setDist1pixel(double)
+   */
+  public double getDist1pixel() {
+    return dist1pixel;
+  }
+
+  /**
+   * <p>
+   * Sets the distance in <i>world coordinates</i> equivalent to 1 pixel in the
+   * view with the current extent.
+   * </p>
+   * 
+   * @param dist1pixel the distance
+   * @see #getDist1pixel()
+   */
+  public void setDist1pixel(double dist1pixel) {
+    if (dist1pixel == this.dist1pixel) {
+      return;
+    }
+    this.updateDrawVersion();
+    this.dist1pixel = dist1pixel;
+  }
+
+  /**
+   * <p>
+   * Gets the distance in <i>world coordinates</i> equivalent to 3 pixels in the
+   * view with the current extent.
+   * </p>
+   * 
+   * @return the distance
+   * @see #setDist3pixel(double)
+   */
+  public double getDist3pixel() {
+    return dist3pixel;
+  }
+
+  /**
+   * <p>
+   * Sets the distance in <i>world coordinates</i> equivalent to 3 pixels in the
+   * view with the current extent.
+   * </p>
+   * 
+   * @param dist3pixel the distance
+   * @see #getDist3pixel()
+   */
+  public void setDist3pixel(double dist3pixel) {
+    if (this.dist3pixel == dist3pixel) {
+      return;
+    }
+    this.updateDrawVersion();
+    this.dist3pixel = dist3pixel;
+  }
+
+  /**
+   * <p>
+   * Returns the last previous extents of this view port.
+   * </p>
+   * 
+   * @return the last previous extents of this view port
+   * @see #setPreviousExtent()
+   * @deprecated use {@link ViewPort#getEnvelopes()}
+   */
+  public ExtentHistory getExtents() {
+    return getEnvelopes();
+  }
+
+  /**
+   * <p>
+   * Returns the last previous extents of this view port.
+   * </p>
+   * 
+   * @return the last previous extents of this view port
+   * @see #setPreviousExtent()
+   */
+  public ExtentHistory getEnvelopes() {
+    return extentsHistory;
+  }
+
+  /**
+   * <p>
+   * Gets the projection used in this view port.
+   * </p>
+   * 
+   * @return projection used in this view port
+   * @see #setProjection(IProjection)
+   */
+  public IProjection getProjection() {
+    return proj;
+  }
+
+  /**
+   * <p>
+   * Sets the projection to this view port.
+   * </p>
+   * 
+   * @param proj the new projection
+   * @see #getProjection()
+   */
+  public void setProjection(IProjection proj) {
+    if (this.proj == null || !this.proj.getAbrev().equals(proj.getAbrev())) {
+      this.updateDrawVersion();
+      this.proj = proj;
+      callProjectionChanged(proj);
+    }
+  }
+
+  // -----------------------------------------------------------------------------------------------------------
+  // NOTA PARA DESARROLLADORES SOBRE EL M�TODO
+  // "public void setAffineTransform(AffineTransform at)"
+  // ==============================================================================================
+  // Only used for print, should be removed, redefining the {@link
+  // RasterAdapter RasterAdapter} interface,
+  // allowing it to receive a {@link ViewPortData ViewPortData} .
+  // -----------------------------------------------------------------------------------------------------------
+
+  /**
+   * <p>
+   * Sets only the affine transform to this view port, without updating
+   * dependent attributes.
+   * </p>
+   * <p>
+   * <b><i>This method could be problematic!</i></b>
+   * </p>
+   * 
+   * @param at the affine transform to set
+   * @see #getAffineTransform()
+   * @see #calculateAffineTransform()
+   */
+  public void setAffineTransform(AffineTransform at) {
+    this.trans = at;
+  }
+
+  /**
+   * <p>
+   * Returns an XML entity that represents this view port instance:<br>
+   * <ul>
+   * <li>Properties:
+   * <ul>
+   * <li><i>className</i>: name of this class.
+   * <li>If defined, the adjusted extent:
+   * <ul>
+   * <li><i>adjustedExtentX</i>: X coordinate of the adjusted extent.
+   * <li><i>adjustedExtentY</i>: Y coordinate of the adjusted extent.
+   * <li><i>adjustedExtentW</i>: width of the adjusted extent.
+   * <li><i>adjustedExtentH</i>: height of the adjusted extent.
+   * </ul>
+   * <li>If defined, the background color:
+   * <ul>
+   * <li><i>backColor</i>: background color.
+   * </ul>
+   * <li>If defined, the clip:
+   * <ul>
+   * <li><i>clipX</i>: X coordinate of the clip.
+   * <li><i>clipY</i>: Y coordinate of clip.
+   * <li><i>clipW</i>: width of the clip.
+   * <li><i>clipH</i>: height of the clip.
+   * </ul>
+   * <li><i>dist1pixel</i>: the distance in world coordinates equivalent to 1
+   * pixel in the view.
+   * <li><i>dist3pixel</i>: the distance in world coordinates equivalent to 3
+   * pixels in the view.
+   * <li><i>distanceUnits</i>: the distance measurement unit.
+   * <li>If defined, the extent:
+   * <ul>
+   * <li><i>extentX</i>: X coordinate of the extent.
+   * <li><i>extentY</i>: Y coordinate of the extent.
+   * <li><i>extentW</i>: width of the extent.
+   * <li><i>extentH</i>: height of the extent.
+   * </ul>
+   * <li><i>mapUnits</i>: the map measurement unit.
+   * <li><i>offsetX</i>: X coordinate of the offset.
+   * <li><i>offsetY</i>: Y coordinate of the offset.
+   * <li>If defined, the projection:
+   * <ul>
+   * <li>If its defined, the projection:
+   * <ul>
+   * <li><i>proj</i>: the projection.</li>
+   * </ul>
+   * </ul>
+   * <li><i>scale</i>: ratio between the size of <code>imageSize</code> and
+   * <code>extent</code>.
+   * </ul>
+   * <li>Child branches:
+   * <ul>
+   * <li>XML entity of the internal {@link ExtentHistory ExtentHistory} .
+   * </ul>
+   * </ul>
+   * 
+   * @return the XML entity
+   * @see #createFromXML(XMLEntity)
+   */
+  public void saveToState(PersistentState state) throws PersistenceException {
+
+    state.set(FIELD_ADJUSTED_EXTENT, adjustedExtent);
+    state.set(FIELD_BACK_COLOR, backColor);
+    state.set(FIELD_CLIP, cliprect);
+    state.set(FIELD_DIST1PIXEL, dist1pixel);
+    state.set(FIELD_DIST3PIXEL, dist3pixel);
+    state.set(FIELD_DISTANCE_UNITS, distanceUnits);
+    state.set(FIELD_DISTANCE_AREA, distanceArea);
+
+    state.set(FIELD_EXTENT, extent);
+    state.set(FIELD_EXTENTS, extentsHistory);
+
+    state.set(FIELD_MAP_UNITS, mapUnits);
+    state.set(FIELD_OFFSET, offset);
+
+    state.set(FIELD_PROJ, proj);
+
+    state.set(FIELD_IMAGE_SIZE, imageSize);
+  }
+
+  public void loadFromState(PersistentState state) throws PersistenceException {
+
+    adjustedExtent = (Rectangle2D) state.get(FIELD_ADJUSTED_EXTENT);
+    backColor = (Color) state.get(FIELD_BACK_COLOR);
+    cliprect = (Rectangle2D) state.get(FIELD_CLIP);
+    dist1pixel = state.getDouble(FIELD_DIST1PIXEL);
+    dist3pixel = state.getDouble(FIELD_DIST3PIXEL);
+    distanceUnits = state.getInt(FIELD_DISTANCE_UNITS);
+    extentsHistory = (ExtentHistory) state.get(FIELD_EXTENTS);
+    extent = (Rectangle2D) state.get(FIELD_EXTENT);
+    mapUnits = state.getInt(FIELD_MAP_UNITS);
+    offset = (Point2D) state.get(FIELD_OFFSET);
+    proj = (IProjection) state.get(FIELD_PROJ);
+    imageSize = (Dimension) state.get(FIELD_IMAGE_SIZE);
+    distanceArea = state.getInt(FIELD_DISTANCE_AREA);
+
+    refreshExtent();
+  }
+
+  public static class RegisterPersistence implements Callable {
+
+    public Object call() throws Exception {
+      PersistenceManager manager = ToolsLocator.getPersistenceManager();
+      if (manager.getDefinition("ViewPort") == null) {
+        DynStruct definition = manager.addDefinition(ViewPort.class,
+            "ViewPort", "ViewPort Persistence definition", null, null);
+
+        definition.addDynFieldObject(FIELD_ADJUSTED_EXTENT)
+            .setClassOfValue(Rectangle2D.class).setMandatory(false);
+
+        definition.addDynFieldObject(FIELD_BACK_COLOR)
+            .setClassOfValue(Color.class).setMandatory(false);
+
+        definition.addDynFieldObject(FIELD_CLIP)
+            .setClassOfValue(Rectangle2D.class).setMandatory(false);
+
+        definition.addDynFieldDouble(FIELD_DIST1PIXEL).setMandatory(true);
+
+        definition.addDynFieldDouble(FIELD_DIST3PIXEL).setMandatory(true);
+
+        definition.addDynFieldInt(FIELD_DISTANCE_UNITS).setMandatory(true);
+
+        definition.addDynFieldInt(FIELD_DISTANCE_AREA).setMandatory(false);
+
+        definition.addDynFieldObject(FIELD_EXTENT)
+            .setClassOfValue(Rectangle2D.class).setMandatory(false);
+
+        definition.addDynFieldObject(FIELD_EXTENTS)
+            .setClassOfValue(ExtentHistory.class).setMandatory(true);
+
+        definition.addDynFieldInt(FIELD_MAP_UNITS).setMandatory(true);
+
+        definition.addDynFieldObject(FIELD_OFFSET)
+            .setClassOfValue(Point2D.class).setMandatory(false);
+
+        definition.addDynFieldObject(FIELD_PROJ)
+            .setClassOfValue(IProjection.class).setMandatory(true);
+
+        definition.addDynFieldObject(FIELD_IMAGE_SIZE)
+            .setClassOfValue(Dimension.class).setMandatory(false);
+      }
+      return Boolean.TRUE;
+    }
+
+  }
+
+  /**
+   * Clone the view port without clone the listeners nor the extent history.
+   * 
+   * @return the cloned view port
+   */
+  public Object clone() throws CloneNotSupportedException {
+
+    ViewPort clonedViewPort = (ViewPort) super.clone();
+    clonedViewPort.listeners = new ArrayList();
+    clonedViewPort.extentsHistory = new ExtentHistory();
+
+    if (this.adjustedExtent != null) {
+      clonedViewPort.adjustedExtent = (Rectangle2D) this.adjustedExtent.clone();
+    }
+
+    if (this.cliprect != null) {
+      clonedViewPort.cliprect = (Rectangle2D) this.cliprect.clone();
+    }
+
+    if (this.extent != null) {
+      clonedViewPort.extent = (Rectangle2D) this.extent.clone();
+    }
+    if (this.imageSize != null) {
+      clonedViewPort.imageSize = (Dimension) this.imageSize.clone();
+    }
+
+    if (this.offset != null) {
+      clonedViewPort.offset = (Point2D) this.offset.clone();
+    }
+    if (proj != null) {
+      clonedViewPort.proj = (IProjection) this.proj.clone();
+    }
+
+    clonedViewPort.trans = (AffineTransform) this.trans.clone();
+
+    return clonedViewPort;
+  }
+
+  /**
+   * <p>
+   * Returns a <code>String</code> representation of the main values of this
+   * view port: <code>{@linkplain #extent}</code>,
+   * <code>{@linkplain #adjustedExtent}</code>,
+   * <code>{@linkplain #imageSize}</code>, <code>{@linkplain #scale}</code>, and
+   * <code>{@linkplain #trans}</code>.
+   * </p>
+   * 
+   * @return a <code>string</code> representation of the main values of this
+   *         view port
+   */
+  public String toString() {
+
+    String str;
+    str = "Datos del viewPort:\nExtent=" + extent + "\nadjustedExtent="
+        + adjustedExtent + "\nimageSize=" + imageSize + "\nescale=" + scale
+        + "\ntrans=" + trans;
+
+    return str;
+  }
+
+  /**
+   * <p>
+   * Sets the position and size of the clipping rectangle.
+   * </p>
+   * 
+   * @param rectView the clipping rectangle to set
+   */
+  public void setClipRect(Rectangle2D rectView) {
+    this.updateDrawVersion();
+    cliprect = rectView;
+  }
+
+  /**
+   * <p>
+   * Converts and returns the {@link Rectangle2D Rectangle2D}, that is in <i>map
+   * coordinates</i> to <i>screen coordinates</i> (pixels) using an <i>inverse
+   * transform</i> with the transformation affine information in the
+   * {@link #trans #trans} attribute.
+   * </p>
+   * 
+   * @param r the 2D rectangle in <i>map coordinates</i>
+   * @return 2D rectangle equivalent in <i>screen coordinates</i> (pixels)
+   * @see #toMapRectangle(Rectangle2D)
+   * @see #fromMapDistance(double)
+   * @see #fromMapPoint(Point2D)
+   */
+  public Rectangle2D fromMapRectangle(Rectangle2D r) {
+    Rectangle2D rect = new Rectangle2D.Double();
+    Point2D p1 = fromMapPoint((int) r.getX(), (int) r.getY());
+    Point2D p2 = fromMapPoint((int) r.getMaxX(), (int) r.getMaxY());
+    rect.setFrameFromDiagonal(p1, p2);
+    return rect;
+  }
+
+  /**
+   * <p>
+   * Recalculates the current <code>{@linkplain #extent}</code> using an scale.
+   * It's necessary execute {@linkplain #refreshExtent()} after.
+   * </p>
+   * 
+   * @param s the scale to set
+   * @deprecated since 07/09/07, use {@linkplain MapContext#setScaleView(long)}
+   */
+  public void setScale(long s) {
+    double x = extent.getX();
+    double y = extent.getY();
+    double escalaX = imageSize.width / extent.getWidth();
+    // double w = imageSize.width / s;
+    // double h = imageSize.height / s;
+    double difw = escalaX / s;
+
+    double x1 = (-x * difw) - x + extent.getWidth() / 2;
+    double y1 = (-y * difw) - y + extent.getHeight() / 2;
+    double w1 = extent.getWidth() * difw;
+    double h1 = extent.getHeight() * difw;
+    extent.setRect(-x1, -y1, w1, h1);
+  }
+
+  public long getDrawVersion() {
+    return this.drawVersion;
+  }
+
+  protected void updateDrawVersion() {
+    this.drawVersion++;
+  }
+
+  public Time getTime() {
+    return time;
+  }
+
+  public void setTime(Time time) {
+    this.time = time;
+    this.updateDrawVersion();
+    callTimeChanged(time);
+  }
+
+  public double getDPI() {
+    if (this.dpi == null) {
+      return CompatLocator.getGraphicsUtils().getScreenDPI();
+    }
+    return this.dpi.doubleValue();
+  }
+
+  public void setDPI(double dpi) {
+    this.dpi = new Double(dpi);
+  }
+
+  public void setDPIToScreenDPI() {
+    this.dpi = null;
+  }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ViewPort.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/Tiling.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/Tiling.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/Tiling.java	(revision 42196)
@@ -0,0 +1,373 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * Created on 16-feb-2005
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.awt.Dimension;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * C�lculo de Partes (Tiles) en las que se divide un raster grande.
+ * Se usa para imprimir rasters y capas raste remotas (WMS).
+ *
+ * Para no pedir imagenes demasiado grandes, vamos
+ * a hacer lo mismo que hace EcwFile: chunkear.
+ * Llamamos a drawView con cuadraditos m�s peque�os
+ * del BufferedImage ni caso, cuando se imprime viene con null
+ * c�digo original de Fran Pe�arrubia
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+
+public class Tiling {	
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(Tiling.class);
+	private static final int		MIN_SIZE = 50; //Tama�o m�nimo en pixeles del tile
+	private boolean 				debug = true;
+	private int 					tileMaxWidth, tileMaxHeight;
+	private int 					numRows, numCols;
+	private double[][] 				srcPts;
+	private Rectangle2D[] 			tile;
+	private double 					width = 500, height = 500;
+	private AffineTransform 		mat;
+	private ViewPort 				vp;
+
+	public Tiling(){}
+
+	public Tiling(int tileW, int tileH, Rectangle2D r) {
+		int[] size = this.calcMaxTileSize(tileW, tileH, r);
+		tileMaxWidth = size[0];
+		tileMaxHeight = size[1];
+
+        int stepX, stepY;
+        int xProv, yProv;
+        int altoAux, anchoAux;
+
+        //Vamos a hacerlo en trozos de AxH
+        numCols = 1+(int) (r.getWidth()) / tileMaxWidth;
+        numRows = 1+(int) (r.getHeight()) / tileMaxHeight;
+
+        srcPts = new double[numCols*numRows][8];
+        tile = new Rectangle2D[numCols*numRows];
+
+    	yProv = (int) r.getY();
+        for (stepY=0; stepY < numRows; stepY++) {
+    		if ((yProv + tileMaxHeight) > r.getMaxY())
+    			altoAux = (int) r.getMaxY() - yProv;
+    		else
+    			altoAux = tileMaxHeight;
+
+    		xProv = (int) r.getX();
+        	for (stepX=0; stepX < numCols; stepX++) {
+	    		if ((xProv + tileMaxWidth) > r.getMaxX())
+	    			anchoAux = (int) r.getMaxX() - xProv;
+	    		else
+	    			anchoAux = tileMaxWidth;
+
+        		//Rectangle newRect = new Rectangle(xProv, yProv, anchoAux, altoAux);
+        		int tileCnt = stepY*numCols+stepX;
+        		// Parte que dibuja
+        		srcPts[tileCnt][0] = xProv;
+        		srcPts[tileCnt][1] = yProv;
+        		srcPts[tileCnt][2] = xProv + anchoAux+1;
+        		srcPts[tileCnt][3] = yProv;
+        		srcPts[tileCnt][4] = xProv + anchoAux+1;
+        		srcPts[tileCnt][5] = yProv + altoAux+1;
+        		srcPts[tileCnt][6] = xProv;
+        		srcPts[tileCnt][7] = yProv + altoAux+1;
+
+        		tile[tileCnt] = new Rectangle2D.Float(xProv, yProv, anchoAux+1, altoAux+1);
+
+				xProv += tileMaxWidth;
+        	}
+        	yProv += tileMaxHeight;
+        }
+	}
+
+	/**
+	 * Calcula el tama�o m�ximo de tile controlando que ning�n tile tenga menos de MIN_SIZE
+	 * pixeles
+	 * @param tileW Ancho del tile
+	 * @param tileH	Alto del tile
+	 * @param r Rectangulo que define el area de la imagen
+	 */
+	public int[] calcMaxTileSize(int tileW, int tileH, Rectangle2D r){
+		
+		if(r.getWidth() < tileW || r.getHeight() < tileH){
+			int[] sizeTiles = {tileW, tileH};
+			return sizeTiles;
+		}
+
+        int wLastCol = 0;
+        tileW += MIN_SIZE;
+		do{
+			tileW -= MIN_SIZE;
+	        int numCols = (int) (r.getWidth() / tileW);
+	        int w = 0;
+	        for(int i = 0; i < numCols; i++)
+	        	w += tileW;
+	        wLastCol = ((int) r.getWidth()) - w;
+		}while(wLastCol < MIN_SIZE && tileW > (MIN_SIZE * 2));
+
+		int hLastRow = 0;
+        tileH += MIN_SIZE;
+		do{
+			tileH -= MIN_SIZE;
+	        int numRows = (int) (r.getHeight() / tileH);
+	        int h = 0;
+	        for(int i = 0; i < numRows; i++)
+	        	h += tileH;
+	        hLastRow = ((int) r.getHeight()) - h;
+		}while(hLastRow < MIN_SIZE && tileH > (MIN_SIZE * 2));
+
+		tileMaxWidth = tileW;
+		tileMaxHeight = tileH;
+		int[] sizeTiles = {tileMaxWidth, tileMaxHeight};
+		return sizeTiles;
+	}
+
+	public double [] getTilePts(int colNr, int rowNr) {
+		return srcPts[rowNr*numCols+colNr];
+	}
+
+	public double [] getTilePts(int num) {
+		return srcPts[num];
+	}
+
+	public Rectangle2D getTileSz(int colNr, int rowNr) {
+		return tile[rowNr*numCols+colNr];
+	}
+
+	public Rectangle2D getTile(int num) {
+		return tile[num];
+	}
+
+	/**
+	 * @return Returns the numCols.
+	 */
+	public int getNumCols() {
+		return numCols;
+	}
+	/**
+	 * @return Returns the numRows.
+	 */
+	public int getNumRows() {
+		return numRows;
+	}
+
+	public int getNumTiles() { return numRows*numCols; }
+	/**
+	 * @return Returns the tileHeight.
+	 */
+	public int getMaxTileHeight() {
+		return tileMaxHeight;
+	}
+	/**
+	 * @return Returns the tileWidth.
+	 */
+	public int getMaxTileWidth() {
+		return tileMaxWidth;
+	}
+
+	ViewPort[] viewPortList = null;
+	private void calcViewPort(ViewPort viewPort)throws NoninvertibleTransformException{
+		viewPortList = new ViewPort[numCols*numRows];
+
+		/*if(viewPort.getImageWidth() < width && viewPort.getImageHeight() < height){
+			viewPortList[0] = viewPort;
+			return;
+		}*/
+
+	    int vpCnt = 0;
+
+	    double imgPxX = viewPort.getImageWidth();
+	    double dWcX = viewPort.getAdjustedExtent().getLength(0);
+	    double tileWcW = (getTile(vpCnt).getWidth() * dWcX) / imgPxX;
+
+	    double imgPxY = viewPort.getImageHeight();
+	    double dWcY = viewPort.getAdjustedExtent().getLength(1);
+	    double tileWcH = (getTile(vpCnt).getHeight() * dWcY) / imgPxY;
+
+	    try {
+            viewPortList[0] = (ViewPort) viewPort.clone();
+        } catch (CloneNotSupportedException e) {
+            logger.error("Error clonning the viewport", e);
+            e.printStackTrace();
+        }
+	    
+	    int auxw = (int) getTile(vpCnt).getWidth();
+	    int auxh = (int) getTile(vpCnt).getHeight();
+	    Dimension auxdim = new Dimension(auxw, auxh);
+	    
+	    viewPortList[0].setImageSize(auxdim);
+	    Envelope r=viewPort.getAdjustedExtent();
+	    try {
+			viewPortList[0].setEnvelope(geomManager.createEnvelope(r.getMinimum(0), r.getMaximum(1) - tileWcH,r.getMinimum(0)+tileWcW, r.getMaximum(1), SUBTYPES.GEOM2D));
+		} catch (CreateEnvelopeException e) {
+			logger.error("Error setting the envelope", e);
+			e.printStackTrace();
+		}
+	    viewPortList[0].setAffineTransform(mat);
+
+	    double wt = tileWcW;
+	    double ht = tileWcH;
+	    double xt = viewPort.getAdjustedExtent().getMinimum(0);
+	    double yt = viewPort.getAdjustedExtent().getMaximum(1) - tileWcH;
+
+	    for (int stepY=0; stepY < numRows; stepY++) {
+	    	wt = tileWcW;
+	    	xt = viewPort.getAdjustedExtent().getMinimum(0);
+	    	for (int stepX=0; stepX < numCols; stepX++) {
+	    		vpCnt = stepY*numCols+stepX;
+	    		if(vpCnt > 0){
+	    			if(stepX > 0)
+	    				xt += wt;
+	    			if((xt + wt) > viewPort.getAdjustedExtent().getMaximum(0))
+	    				wt = Math.abs(viewPort.getAdjustedExtent().getMaximum(0) - xt);
+
+	    			try {
+                        viewPortList[vpCnt] = (ViewPort) viewPort.clone();
+                    } catch (CloneNotSupportedException e) {
+                        logger.error("Error clonning the viewport", e);
+                        e.printStackTrace();
+                    }
+	    			
+	    		    auxw = (int) getTile(vpCnt).getWidth();
+	    		    auxh = (int) getTile(vpCnt).getHeight();
+	    		    auxdim = new Dimension(auxw, auxh);
+
+	    			viewPortList[vpCnt].setImageSize(auxdim);
+	    			
+	    			try {
+						viewPortList[vpCnt].setEnvelope(geomManager.createEnvelope(xt, yt,xt + wt, yt + ht, SUBTYPES.GEOM2D));
+					} catch (CreateEnvelopeException e) {
+						logger.error("Error setting the envelope", e);
+						e.printStackTrace();
+					}
+	    			viewPortList[vpCnt].setAffineTransform(mat);
+
+	    		}
+	    		//System.out.println("ViewPort: "+vpCnt+" "+viewPortList[vpCnt].getAdjustedExtent()+" "+getTile(vpCnt).getSize());
+	    	}
+	    	if((yt - ht) < viewPort.getAdjustedExtent().getMinimum(1)){
+	    		ht = Math.abs(yt - viewPort.getAdjustedExtent().getMinimum(1));
+	    		yt = viewPort.getAdjustedExtent().getMinimum(1);
+	    	}else
+	    		yt -= ht;
+	    }
+	}
+
+	public ViewPort getTileViewPort(ViewPort viewPort, int tileNr) throws NoninvertibleTransformException {
+		/*if(viewPortList == null)
+			this.calcViewPort(viewPort);
+		return viewPortList[tileNr];*/
+
+		if(tile.length == 1)
+			return viewPort;
+
+		double [] dstPts = new double[8];
+		double [] srcPts = getTilePts(tileNr);
+		Rectangle2D tile = getTile(tileNr);
+		//Rectangle newRect = new Rectangle((int)srcPts[0], (int)srcPts[1], tileSz[0], tileSz[1]);
+
+		mat.inverseTransform(srcPts, 0, dstPts, 0, 4);
+		double x = dstPts[0], w = dstPts[2] - dstPts[0];
+		double y = dstPts[1], h = dstPts[5] - dstPts[3];
+		if (w < 0) { x = dstPts[2]; w = dstPts[0] - dstPts[2]; }
+		if (h < 0) { y = dstPts[5]; h = dstPts[3] - dstPts[5]; }
+		Envelope rectCuadricula = null;
+		try {
+			rectCuadricula = geomManager.createEnvelope(x, y,x+ w,y+ h, SUBTYPES.GEOM2D);
+		} catch (CreateEnvelopeException e) {
+			logger.error("Error setting the envelope", e);
+			e.printStackTrace();
+		}
+		//Extent extent = new Extent(rectCuadricula);
+
+		ViewPort vp = null;
+		try {
+		    vp = (ViewPort) viewPort.clone();
+
+
+		    int auxw = (int) tile.getWidth();
+		    int auxh = (int) tile.getHeight();
+		    Dimension auxdim = new Dimension(auxw, auxh);
+
+		    vp.setImageSize(auxdim);
+		    vp.setOffset(new Point2D.Double(tile.getX(), tile.getY()));
+ 		    vp.setEnvelope(rectCuadricula);
+
+		    if (debug)
+		        System.out.println("Tiling.print(): tile "+tileNr+" de "
+		            + getNumTiles() +
+		            "\n, Extent = "+vp.getAdjustedExtent() + " tile: "
+		            + tile);
+
+		} catch (CloneNotSupportedException e) {
+            logger.error("Error clonning the viewport", e);
+            e.printStackTrace();
+        }
+        return vp;
+	}
+	/**
+	 * @return Returns the mat.
+	 */
+	public AffineTransform getAffineTransform() {
+		return mat;
+	}
+	/**
+	 * @param mat The mat to set.
+	 */
+	public void setAffineTransform(AffineTransform mat) {
+		this.mat = mat;
+	}
+	/**
+	 * @return Returns the debug.
+	 */
+	public boolean isDebug() {
+		return debug;
+	}
+	/**
+	 * @param debug The debug to set.
+	 */
+	public void setDebug(boolean debug) {
+		this.debug = debug;
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/Tiling.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerStatus.java	(revision 42196)
@@ -0,0 +1,314 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+
+/**
+ * <p>All layers in <i>libFMap</i> can be in a set of <i>states</i>, that their combination represent the <i>status</i> of a layer.</p>
+ * 
+ * <p><code>FLayerStatus</code> class supports the common status for all kind of {@link FLyrDefault FLyrDefault} layers.</p>
+ * 
+ * <p>This means that not necessarily all layers can stay in all possible status, it depends on its particular
+ * nature.</p>
+ * 
+ * <p>Layer status states defined in <code>FLayerStatus</code> are:
+ *  <ul>
+ *  <li><i><b>Available</b></i>: the layer is available if the source of its data is on-line.</li>
+ *  <li><i><b>Visible</b></i>: one layer is visible if it's selected its <i>check box</i> associated in TOC. This implies that 
+ *  layer will be called to be painted unless the necessary data would be unavailable; this situation is more frequent with layers of
+ *  remote services.</li>
+ *  <li><i><b>Active</b></i>: is active if it's selected at the TOC.</li>
+ *  <li><i><b>Dirty</b></i>: is dirty if needs to be refreshed.</li>
+ *  <li><i><b>In TOC</b></i>: if it's being listed in a TOC GUI.</li>
+ *  <li><i><b>Editing</b></i>: if the layer it's being edited now.</li>
+ *  <li><i><b>Writable</b></i>: if can be modified and saved the changes.</li>
+ *  <li><i><b>Cache drawn layers</b></i>: if stores previous draws. This is useful to accelerate the draw of the layer.</li>
+ *  <li><i><b>Driver loaded</b></i>: if driver for managing the layer has been loaded successfully.</li>
+ *  </ul>
+ * </p>
+ * 
+ * @see IFLayerStatus
+ * 
+ * @author azabala
+ */
+public class FLayerStatus implements IFLayerStatus {
+	/**
+	 * <p>Layer's availability: the layer is available if the source of its data is on-line.</p>
+	 */
+	public boolean available;
+	
+	/**
+	 * <p>Layer's visibility: the layer is visible if it's selected its <i>check box</i> associated in TOC. This implies that 
+	 *  layer will tried to be painted unless the necessary data would be unavailable; this situation is more frequent with layers of
+	 *  remote services.</p>
+	 */
+	public boolean visible;
+	
+	/**
+	 * <p>The layer is active if it's selected at the TOC.</p>
+	 */
+	public boolean active;
+	
+	/**
+	 * <p>One layer is dirty if needs to be refreshed.</p>
+	 */
+	public boolean dirty;
+	
+	/**
+	 * <p>The layer is in TOC if it's being listed in a TOC GUI.</p>
+	 */
+	public boolean inTOC;
+	
+	/**
+	 * <p>This parameter reports if the layer it's being edited now.</p>
+	 */
+	public boolean editing;
+	
+	/**
+	 * <p>This parameter reports if the layer can be modified and saved the changes.</p>
+	 */
+	public boolean writable;
+	
+	/**
+	 * <p>This state reports if the layer stores previous draws. That's useful to accelerate the draw of the layer.</p>
+	 */
+	public boolean cacheDrawnLayers;
+
+	private boolean temporal = false;
+	/**
+	 * <p>List with the information of the driver errors produced working this layer.</p>
+	 */
+	private List layerErrors;
+		
+	/**
+	 * <p>This state reports if the driver for managing the layer has been loaded successfully.</p>
+	 */
+	private boolean driverLoaded=true;
+
+	/**
+	 * <p>Creates an instance with the default status of a <code>FLyrDefault</code> layer:
+	 * <br>
+	 *  <ul>
+	 *  <li><b><i>Visible</i></b>: <code>true</code> .</li>
+	 *  <li><b><i>Active</i></b>: <code>false</code> .</li>
+	 *  <li><b><i>In TOC</i></b>: <code>true</code> .</li>
+	 *  <li><b><i>Editing</i></b>: <code>false</code> .</li>
+	 *  <li><b><i>Cache drawn layers</i></b>: <code>false</code> .</li>
+	 *  <li><b><i>Dirty</i></b>: <code>false</code> .</li>
+	 *  <li><b><i>Available</i></b>: <code>true</code> .</li>
+	 *  <li><b><i>Driver loaded</i></b>: <code>true</code> .</li>
+	 *  <li><b><i>Writable</i></b>: <code>false</code> .</li>
+	 *  <li>Without driver errors.</li>
+	 *  </ul>
+	 * </p>
+	 */
+	public FLayerStatus(){
+		this.layerErrors = new ArrayList();
+		visible = true;
+		active = false;
+		inTOC = true;
+		editing = false;
+		cacheDrawnLayers = false;
+		dirty = false;
+		available = true;
+
+		writable = false;
+
+	}
+
+	/**
+	 * <p>Stores information of an exception produced working with a driver of the layer.</p>
+	 * 
+	 * @param error the driver exception
+	 */
+	public void addLayerError(BaseException error){
+		layerErrors.add(error);
+	}
+
+	public FLayerStatus cloneStatus(){
+		FLayerStatus newStatus = new FLayerStatus();
+		newStatus.layerErrors.addAll(this.layerErrors);
+		newStatus.visible = this.visible;
+		newStatus.active = this.active;
+		newStatus.inTOC = this.inTOC;
+		newStatus.editing = this.editing;
+		newStatus.cacheDrawnLayers = this.cacheDrawnLayers;
+		newStatus.dirty = this.dirty;
+		newStatus.available = this.available;
+		newStatus.driverLoaded = this.driverLoaded;	
+		newStatus.writable = this.writable;
+	
+		return newStatus;
+	}
+	
+	
+
+	public boolean equals(Object obj) {
+		FLayerStatus other;
+		if (obj instanceof FLayerStatus) {
+			other = (FLayerStatus) obj;
+		} else{
+			return false;
+		}
+
+		if (other.visible != this.visible 
+				|| other.active != this.active
+				|| other.inTOC != this.inTOC || other.editing != this.editing
+				|| other.cacheDrawnLayers != this.cacheDrawnLayers
+				|| other.dirty != this.dirty
+				|| other.available != this.available
+				|| other.driverLoaded != this.driverLoaded
+				|| other.writable != this.writable) {
+			return false;
+		}
+		
+
+		
+		if ((!other.layerErrors.containsAll(this.layerErrors)) || other.layerErrors.size() != this.layerErrors.size()){
+			return false;
+		}
+		return super.equals(obj);
+	}
+
+	/**
+	 * <p>Gets the number of driver exceptions produced working with the layer.</p>
+	 * 
+	 * @return number of driver exceptions produced
+	 */
+	public int getNumErrors(){
+		return layerErrors.size();
+	}
+
+	/**
+	 * <p>Gets the information of the <i>nth</i> layer driver exception registered in the status.</p>
+	 * 
+	 * @param i ith layer exception registered
+	 * 
+	 * @return the <i>nth</i> layer driver exception registered
+	 */
+	public BaseException getError(int i){
+		return (BaseException) layerErrors.get(i);
+	}
+
+	/**
+	 * <p>Returns if there have been driver errors working with the layer.</p>
+	 * 
+	 * @return <code>true</code> if there have driver errors working with the layer; otherwise <code>false</code>
+	 */
+	public boolean isOk(){
+		return layerErrors.size() == 0;
+	}
+
+	/**
+	 * <p>Returns a list of errors produced in a layer working with its driver.</p>
+	 * 
+	 * @return list errors produced in a layer working with its driver
+	 */
+	public List getErrors() {
+		return layerErrors;
+	}
+
+	/**
+	 * <p>Returns if has been loaded successfully the driver for managing the layer.</p>
+	 * 
+	 * @return <code>true</code> if has been loaded successfully the driver for managing the layer; otherwise <code>false</code>
+	 */
+	public boolean isDriverLoaded() {
+		return driverLoaded;
+	}
+
+	/**
+	 * <p>Sets if has been loaded successfully the driver for managing the layer.</p>
+	 * 
+	 * @param driverLoaded <code>true</code> if has been loaded successfully the driver for managing the layer; otherwise <code>false</code>
+	 */
+	public void setDriverLoaded(boolean driverLoaded) {
+		this.driverLoaded = driverLoaded;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+
+		visible = state.getBoolean("visible");
+		active = state.getBoolean("active");
+		inTOC = state.getBoolean("inTOC");
+		editing = state.getBoolean("editing");
+		cacheDrawnLayers = state.getBoolean("cacheDrawnLayers");
+		dirty = state.getBoolean("dirty");
+		available = state.getBoolean("available");
+		writable = state.getBoolean("writable");
+		driverLoaded = state.getBoolean("driverLoaded");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		
+		state.set("visible", visible);
+		state.set("active", active);
+		state.set("inTOC", inTOC);
+		state.set("editing", editing);
+		state.set("cacheDrawnLayers", cacheDrawnLayers);
+		state.set("dirty", dirty);
+		state.set("available", available);
+		state.set("writable", writable);
+		state.set("driverLoaded", driverLoaded);
+	}
+	
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				FLayerStatus.class,
+				"FLayerStatus",
+				"FLayerStatus Persistence definition",
+				null, 
+				null
+		);
+		definition.addDynFieldBoolean("visible").setMandatory(true);
+		definition.addDynFieldBoolean("active").setMandatory(true);
+		definition.addDynFieldBoolean("inTOC").setMandatory(true);
+		definition.addDynFieldBoolean("editing").setMandatory(true);
+		definition.addDynFieldBoolean("cacheDrawnLayers").setMandatory(true);
+		definition.addDynFieldBoolean("dirty").setMandatory(true);
+		definition.addDynFieldBoolean("available").setMandatory(true);
+		definition.addDynFieldBoolean("writable").setMandatory(true);
+		definition.addDynFieldBoolean("driverLoaded").setMandatory(true);
+		//definition.addDynFieldBoolean("locked").setMandatory(true);
+            
+            return Boolean.TRUE;
+        }
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerStatus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionEvent.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+
+
+/**
+ * <p>Event associated to a selection on a vector layer.</p>
+ * 
+ * @see FMapEvent
+ */
+public class SelectionEvent extends FMapEvent {
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawingListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawingListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawingListener.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+
+
+/**
+ * <p><code>LayerDrawingListener</code> defines listeners
+ *  to catch and handle drawing events from layers.</p>
+ */
+public interface LayerDrawingListener {
+    /**
+ 	 * <p>Called before a layer of type {@link FLayer FLayer} or {@link FLayers FLayers} is drawn.</p>
+ 	 * 
+     * @param e a layer event object
+     * 
+     * @throws CancelationException if cancels the operation, this exception will have the message
+     *  that user will see.
+     * 
+     * @see LayerDrawEvent
+     */
+    void beforeLayerDraw(LayerDrawEvent e) throws CancelationException;
+    
+    /**
+     * <p>Process to execute after a layer had been drawn.</p>
+     * 
+     * @param e a layer event object
+     * 
+     * @throws CancelationException if cancels the operation, this exception will have the message
+     *  that user will see.
+     * 
+     * @see LayerDrawEvent
+     */
+    void afterLayerDraw(LayerDrawEvent e) throws CancelationException;
+    
+    /**
+     * <p>Process to execute before a {@link GraphicLayer GraphicLayer} had been drawn.</p>
+     *
+     * @param e a layer event object
+     * 
+     * @throws CancelationException if cancels the operation, this exception will have the message
+     *  that user will see.
+     * 
+     * @see LayerDrawEvent
+     */
+    void beforeGraphicLayerDraw(LayerDrawEvent e) throws CancelationException;
+
+    /**
+     * <p>Process to execute after a {@link GraphicLayer GraphicLayer} had been drawn.</p>
+     * 
+     * @param e a layer event object
+     * 
+     * @throws CancelationException if cancels the operation, this exception will have the message
+     *  that user will see.
+     * 
+     * @see LayerDrawEvent
+     */
+    void afterLayerGraphicDraw(LayerDrawEvent e) throws CancelationException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawingListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/AbstractLinkProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/AbstractLinkProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/AbstractLinkProperties.java	(revision 42196)
@@ -0,0 +1,174 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.awt.geom.Point2D;
+import java.net.URI;
+
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+
+/**
+ * This is an abstract class to keep the properties of the HyperLink. One layer may have
+ * one or zero LinkProperties. The properties of a Link are:
+ * - fieldName, the field�s name of the selected column of the table associated to the
+ * 	layer
+ * - extName, the name of the extension that the usser indicates
+ * - typeLink, the type of the Link
+ * The class implements  'IPersistance' interface to provide persistance to the properties
+ * of HyperLink
+ * 
+ * @deprecated this functionality has extracted of the core in gvSIG 2.0 
+ */
+public abstract class AbstractLinkProperties implements Persistent {
+	private String fieldName;
+	private String extName;
+	private int typeLink;
+
+
+	/**
+	 * Default constructor
+	 */
+	public AbstractLinkProperties(){
+		fieldName=null;
+		extName=null;
+		typeLink=-1;
+	}
+
+	/**
+	 * Provides an array with URIs. Returns one URI by geometry that includes the point
+	 * in its own geometry limits with a allowed tolerance.
+	 * @param layer, the layer
+	 * @param point, the point to check that is contained or not in the geometries in the layer
+	 * @param tolerance, the tolerance allowed. Allowed margin of error to detect if the  point
+	 * 		is contained in some geometries of the layer
+	 * @return
+	 * @throws ReadException
+	 * @throws BehaviorException
+	 */
+	public abstract URI[] getLink(FLayer layer, Point2D point, double tolerance) throws ReadException;
+
+	/**
+	 * Gets the field�s name of the table that the user has selected
+	 * @return this name of the field
+	 */
+	public String getField(){
+		return this.fieldName;
+	}
+
+	/**
+	 * Sets the field�s name
+	 * @param campo, the field�s name
+	 */
+	public void setField(String campo){
+		this.fieldName=campo;
+	}
+
+	/**
+	 * Gets the type of the HyperLink
+	 * @return the type
+	 */
+	public int getType(){
+		return this.typeLink;
+	}
+
+	/**
+	 * Sets the type of the HyperLink
+	 * @param tipo
+	 */
+	public void setType(int tipo){
+		this.typeLink=tipo;
+	}
+
+	/**
+	 * Gets the extension of the files that the user has indicated like properties of the
+	 * HyperLink, this extension is added to the content of the field selected in the table
+	 *
+	 * @return the extension
+	 */
+	public String getExt(){
+		return this.extName;
+	}
+
+	/**
+	 * Sets the extension
+	 * @param extension, the extension of the files
+	 */
+	public void setExt(String extension){
+		this.extName=extension;
+	}
+
+//	/**
+//	 * Provides persistance to the properties of the HyperLink.
+//	 * @return XMLEntity with the information of the HyperLink
+//	 */
+//	public XMLEntity getXMLEntity() {
+//		XMLEntity xml=new XMLEntity();
+//		xml.putProperty("typeChild","linkProperties");
+//		xml.putProperty("extName",extName);
+//		xml.putProperty("fieldName",fieldName);
+//		xml.putProperty("typeLink",typeLink);
+//		return xml;
+//	}
+//
+//	/**
+//	 * Sets the properties of the HyperLink using a XMLEntity that contains the information
+//	 * @param XMLEntity
+//	 */
+//	public void setXMLEntity(XMLEntity xml) {
+//		extName=xml.getStringProperty("extName");
+//		fieldName=xml.getStringProperty("fieldName");
+//		typeLink=xml.getIntProperty("typeLink");
+//	}
+	
+	/**
+	 * Saves the internal state of the object on the provided
+	 * PersistentState object.
+	 * 
+	 * @param state
+	 */
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("extName",extName);
+		state.set("fieldName",fieldName);
+		state.set("typeLink",typeLink);
+	}
+
+	/**
+	 * Set the state of the object from the state passed as parameter.
+	 *
+	 * @param state
+	 */
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		
+		extName = state.getString("extName");
+		fieldName = state.getString("fieldName");
+		typeLink = state.getInt("typeLink");
+	}
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/AbstractLinkProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/CancelationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/CancelationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/CancelationException.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+/**
+ * <p>There are classes and event handlers that allow cancel some of their operations when they are running. 
+ * If fails that cancellation, a <code>CancelationException</code> exception is thrown.</p>
+ * 
+ * @see RuntimeException
+ */
+public class CancelationException extends RuntimeException {
+	/**
+	 * <p>Constructs a new cancelation exception with <code>null</code> as its detail message.
+	 *  The cause is not initialized, and may subsequently be initialized by a call to <code>initCause</code>.</p>
+	 */
+	public CancelationException() {
+		super();
+	}
+
+	/**
+	 * <p>Constructs a new cancelation exception with the specified detail message. The cause is not
+	 *  initialized, and may subsequently be initialized by a call to <code>initCause</code>.
+	 * 
+	 * @param message the detail message. The detail message is saved for later retrieval by the <code>getMessage()</code> method.
+	 */
+	public CancelationException(String message) {
+		super(message);
+	}
+
+	/**
+	 * <p>Constructs a new cancelation exception with the specified detail message and cause.</p>
+	 * <p>Note that the detail message associated with cause is not automatically incorporated in this
+	 *  exception's detail message.</p>
+	 *  
+	 * @param message the detail message (which is saved for later retrieval by the <code>getMessage()</code> method).
+	 * @param cause the cause (which is saved for later retrieval by the <code>getCause()</code> method). (A <code>null</code>
+	 *  value is permitted, and indicates that the cause is nonexistent or unknown).
+	 */
+	public CancelationException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	/**
+	 * <p>Constructs a cancelation exception with the specified <code>cause</code> and a detail message of <code>(cause==null ?
+	 *  null : cause.toString())</code> (which typically contains the class and detailed information about cause).
+	 *  
+	 * @param cause the cause (which is saved for later retrieval by the <code>getCause()</code> method). (A <code>null</code>
+	 *  value is permitted, and indicates that the cause is nonexistent or unknown).
+	 */
+	public CancelationException(Throwable cause) {
+		super(cause);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/CancelationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerPositionEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerPositionEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerPositionEvent.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+
+/**
+ * <p>Event produced when a layer has been or is being moved from a collection of layers.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class LayerPositionEvent extends LayerCollectionEvent {
+	/**
+	 * <p>If this event is a <i>LAYER_MOVED</i> type, stores the previous index of the affected layer in the layer
+	 *  collection; otherwise its value will be the same as the <code>newPos</code> one.</p>
+	 */
+	private int oldPos;
+
+	/**
+	 * <p>The new index in the layer collection of the layer affected.</p>
+	 */
+	private int newPos;
+
+	/**
+	 * <p>Identifies this event as a action on a layer that is being moved.</p>
+	 */
+	private final static int LAYER_MOVING = 4;
+
+	/**
+	 * <p>Identifies this event as a action on a layer that has been moved.</p>
+	 */
+	private final static int LAYER_MOVED = 1;
+
+	/**
+	 * <p>Creates a new layer position event notifying a "layer moved" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * @param oldp previous index of the affected layer in the layer collection
+	 * @param newp new index of the affected layer in the layer collection
+	 * 
+	 * @return a new layer position event
+	 */
+	public static LayerPositionEvent createLayerMovedEvent(FLayer lyr, int oldp, int newp){
+		return new LayerPositionEvent(lyr, oldp, newp, LAYER_MOVED);
+	}
+
+	/**
+	 * <p>Creates a new layer position event notifying a "layer moving" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * @param oldp previous index of the affected layer in the layer collection
+	 * @param newp new index of the affected layer in the layer collection
+	 * 
+	 * @return a new layer position event
+	 */
+	public static LayerPositionEvent createLayerMovingEvent(FLayer lyr, int oldp, int newp){
+		return new LayerPositionEvent(lyr, oldp, newp, LAYER_MOVING);
+	}
+
+	/**
+	 * <p>Creates a new layer position event of the specified type.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * @param oldp previous index of the affected layer in the layer collection
+	 * @param newp new index of the affected layer in the layer collection
+	 * @param eventType type of layer collection event
+	 * 
+	 * @return a new layer position event
+	 */
+	private LayerPositionEvent(FLayer lyr, int oldp, int newp, int eventType) {
+		super(lyr, eventType);
+		oldPos = oldp;
+		newPos = newp;
+	}
+
+	/**
+	 * <p>Gets the previous index of the affected layer in the layer collection.</p>
+	 *
+	 * @return the previous index
+	 */
+	public int getOldPos() {
+		return oldPos;
+	}
+
+	/**
+	 * <p>Gets the new index of the affected layer in the layer collection.</p>
+	 *
+	 * @return the new index
+	 */
+	public int getNewPos() {
+		return newPos;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerPositionEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayers.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayers.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayers.java	(revision 42196)
@@ -0,0 +1,1444 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextRuntimeException;
+import org.gvsig.fmap.mapcontext.Messages;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.InfoByPoint;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerNotFoundInCollectionException;
+import org.gvsig.fmap.mapcontext.layers.operations.LayersVisitable;
+import org.gvsig.fmap.mapcontext.layers.operations.LayersVisitor;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.impl.MultiDynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.gvsig.tools.visitor.NotSupportedOperationException;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+
+/**
+ * <p>Represents a generic collection of layers, that can be represented as a node in a tree of nodes of layers.</p>
+ *
+ * <p>Adapts the basic functionality implemented for a layer in the abstract class <code>FLyrDefault</code>, to
+ *  a collection of layers, implementing, as well, specific methods for this kind of object, defined in the
+ *  interfaces <code>VectorialData</code>, <code>LayerCollection</code>, and <code>InfoByPoint</code>.</p>
+ *
+ * @see FLyrDefault
+ */
+public class FLayers extends FLyrDefault implements LayerCollection,
+InfoByPoint {
+
+	
+	/**
+	 * List with all listeners registered for this kind of node.
+	 *
+	 * @see #addLayerCollectionListener(LayerCollectionListener)
+	 * @see #removeLayerCollectionListener(LayerCollectionListener)
+	 * @see #callLayerAdded(LayerCollectionEvent)
+	 * @see #callLayerAdding(LayerCollectionEvent)
+	 * @see #callLayerMoved(LayerPositionEvent)
+	 * @see #callLayerMoving(LayerPositionEvent)
+	 * @see #callLayerRemoved(LayerCollectionEvent)
+	 * @see #callLayerRemoving(LayerCollectionEvent)
+	 */
+	protected ArrayList layerCollectionListeners = null;
+
+	/**
+	 * A synchronized list with the layers.
+	 *
+	 * @see #setAllVisibles(boolean)
+	 * @see #addLayer(FLayer)
+	 * @see #addLayer(int, FLayer)
+	 * @see #moveTo(int, int)
+	 * @see #removeLayer(FLayer)
+	 * @see #removeLayer(int)
+	 * @see #removeLayer(String)
+	 * @see #replaceLayer(String, FLayer)
+	 * @see #getVisibles()
+	 * @see #getLayer(int)
+	 * @see #getLayer(String)
+	 * @see #getLayersCount()
+	 * @see #getFullEnvelope()
+	 */
+	protected List layers = null;
+
+	/**
+	 * The model of the layer.
+	 *
+	 * @see #getMapContext()
+	 */
+	protected MapContext fmap;
+
+	/**
+	 * Useful for debug the problems during the implementation.
+	 */
+	private static Logger logger = LoggerFactory.getLogger(FLayers.class);
+
+	public FLayers() {
+		super();
+		layerCollectionListeners = new ArrayList();
+		layers = Collections.synchronizedList(new ArrayList());
+		
+		logger = LoggerFactory.getLogger(FLayers.class);
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#addLayerCollectionListener(com.iver.cit.gvsig.fmap.layers.LayerCollectionListener)
+	 */
+	public void addLayerCollectionListener(LayerCollectionListener listener) {
+		if (!layerCollectionListeners.contains(listener)) {
+			layerCollectionListeners.add(listener);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#setAllVisibles(boolean)
+	 */
+	public void setAllVisibles(boolean visible) {
+		FLayer lyr;
+
+		for (int i = 0; i < layers.size(); i++) {
+			lyr = ((FLayer) layers.get(i));
+			lyr.setVisible(visible);
+
+			if (lyr instanceof LayerCollection) {
+				((LayerCollection) lyr).setAllVisibles(visible);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayerCollectionListener(com.iver.cit.gvsig.fmap.layers.LayerCollectionListener)
+	 */
+	public void removeLayerCollectionListener(LayerCollectionListener listener) {
+		layerCollectionListeners.remove(listener);
+	}
+
+	/**
+	 * Adds a layer on an specified position in this node.
+	 *
+	 * @param pos position in the inner list where the layer will be added
+	 * @param layer a layer
+	 */
+	private void doAddLayer(int pos,FLayer layer) {
+		layers.add(pos,layer);
+		ToolsLocator.getDisposableManager().bind(layer);
+		layer.setParentLayer(this);
+		IProjection layerProj = layer.getProjection();
+		if(layerProj != null && fmap != null) {
+			IProjection mapContextProj = fmap.getProjection();
+			// TODO REVISAR ESTO !!!!
+			// Esta condici�n puede que no fuese exacta para todos los casos
+			if (!layerProj.getAbrev().equals(mapContextProj.getAbrev())) {
+				ICoordTrans ct = layerProj.getCT(mapContextProj);
+				layer.setCoordTrans(ct);
+			} else {
+				layer.setCoordTrans(null);
+			}
+		}
+		this.updateDrawVersion();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#addLayer(com.iver.cit.gvsig.fmap.layers.FLayer)
+	 */
+	public void addLayer(FLayer layer) {
+		
+		MapContext mco = this.getMapContext();
+		
+		if (mco != null) {
+			/*
+			 * Get order manager from map context
+			 */
+			int position = mco.getOrderManager().getPosition(this, layer);
+			addLayer(position, layer);
+		} else {
+			/*
+			 * This happens when FLayers object is not in a
+			 * map context, so no order manager is available.
+			 */
+			addLayer(layers.size(),layer);
+		}
+	}
+
+	/**
+	 * Adds a layer in an specified position in this node.
+	 *
+	 * @param layer a layer
+	 */
+	public void addLayer(int pos,FLayer layer) {
+		try {
+			//Notificamos a la capa que va a ser a�adida
+			if (layer instanceof FLyrDefault) {
+				((FLyrDefault)layer).wakeUp();
+			}
+
+			if (layer instanceof FLayers){
+				FLayers layers=(FLayers)layer;
+				fmap.addAsCollectionListener(layers);
+			}
+			callLayerAdding(LayerCollectionEvent.createLayerAddingEvent(layer));
+
+			doAddLayer(pos,layer);
+
+			callLayerAdded(LayerCollectionEvent.createLayerAddedEvent(layer));
+		} catch (CancelationException e) {
+			logger.warn(e.getMessage());
+		} catch (LoadLayerException e) {
+			layer.setAvailable(false);
+			layer.addError(e);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#moveTo(int, int)
+	 */
+	public void moveTo(int from, int to) throws CancelationException {
+		int newfrom=layers.size()-from-1;
+		int newto=layers.size()-to-1;
+		if ( newfrom < 0 || newfrom >=layers.size() || newto < 0 || newto >= layers.size()) {
+			return;
+		}
+		FLayer aux = (FLayer) layers.get(newfrom);
+		callLayerMoving(LayerPositionEvent.createLayerMovingEvent(aux, newfrom, newto));
+		layers.remove(newfrom);
+		layers.add(newto, aux);
+		this.updateDrawVersion();
+		callLayerMoved(LayerPositionEvent.createLayerMovedEvent(aux, newfrom, newto));
+	}
+
+	/**
+	 * Removes an inner layer.
+	 *
+	 * @param lyr a layer
+	 */
+	private void doRemoveLayer(FLayer lyr) {
+		layers.remove(lyr);
+		lyr.dispose();
+		this.updateDrawVersion();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayer(com.iver.cit.gvsig.fmap.layers.FLayer)
+	 */
+	public void removeLayer(FLayer lyr) throws CancelationException {
+		callLayerRemoving(LayerCollectionEvent.createLayerRemovingEvent(lyr));
+		doRemoveLayer(lyr);
+		callLayerRemoved(LayerCollectionEvent.createLayerRemovedEvent(lyr));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayer(int)
+	 */
+	public void removeLayer(int idLayer) {
+		FLayer lyr = (FLayer) layers.get(idLayer);
+		callLayerRemoving(LayerCollectionEvent.createLayerRemovingEvent(lyr));
+		this.doRemoveLayer(lyr);
+//		layers.remove(idLayer);
+//		this.updateDrawVersion();
+		callLayerRemoved(LayerCollectionEvent.createLayerRemovedEvent(lyr));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayer(java.lang.String)
+	 */
+	public void removeLayer(String layerName) {
+		FLayer lyr;
+
+		for (int i = 0; i < layers.size(); i++) {
+			lyr = ((FLayer) layers.get(i));
+
+			if (lyr.getName().compareToIgnoreCase(layerName) == 0) {
+				removeLayer(i);
+
+				break;
+			}
+		}
+	}
+
+	/**
+	 * Replace a layer identified by its name, by another.
+	 *
+	 * @param layerName the name of the layer to be replaced
+	 * @param layer the new layer
+	 * @deprecated use {@link FLayers#replaceLayer(FLayer, FLayer)}
+	 */
+	public void replaceLayer(String layerName, FLayer layer) throws LoadLayerException
+	{
+		replaceLayer(getLayer(layerName), layer);
+	}
+	
+	/**
+     * Replace a layer by another layer.  It search recursively by all the 
+     * ILayerCollection nodes
+     *
+     * @param layer
+     *          the layer to be replaced
+     * @param newLayer
+     *          the new layer
+     */
+    public void replaceLayer(FLayer layer, FLayer newLayer) throws LoadLayerException
+    {        
+        replaceLayer(this, layer, newLayer);
+    }
+    
+    /**
+     * Replace a layer by other layer. It search recursively by all the 
+     * ILayerCollection nodes
+     * @param parentLayer
+     *          the parent layer
+     * @param layer
+     *          the layer to be replaced
+     * @param newLayer
+     *          the new layer
+     * @throws LoadLayerException
+     */
+    private void replaceLayer(FLayers parentLayer, FLayer layer, FLayer newLayer) throws LoadLayerException
+    {        
+        FLayer lyr;       
+        for (int i = 0; i < parentLayer.getLayersCount(); i++) {
+            lyr = ((FLayer) parentLayer.getLayer(i));
+            if (lyr.equals(layer)) {              
+                parentLayer.removeLayer(i);             
+                parentLayer.addLayer(i, newLayer);                
+                break;
+            }
+            if (lyr instanceof LayerCollection){
+                replaceLayer((FLayers)lyr, layer, newLayer);
+            }
+        }
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getVisibles()
+	 */
+	public FLayer[] getVisibles() {
+		ArrayList array = new ArrayList();
+		LayersIterator iter = new LayersIterator(this) {
+			public boolean evaluate(FLayer layer) {
+				return layer.isVisible();
+			}
+
+		};
+
+		while (iter.hasNext()) {
+			array.add(iter.nextLayer());
+		}
+
+		return (FLayer[]) array.toArray(new FLayer[0]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getLayer(int)
+	 */
+	public FLayer getLayer(int index) {
+		return (FLayer) layers.get(index);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getLayer(java.lang.String)
+	 */
+	public FLayer getLayer(String layerName) {
+		FLayer lyr;
+		FLayer lyr2;
+		ArrayList layerList;
+
+		for (int i = 0; i < layers.size(); i++) {
+			lyr = ((FLayer) layers.get(i));
+
+			if (lyr.getName().compareToIgnoreCase(layerName) == 0) {
+				return lyr;
+			}
+
+			layerList = new ArrayList();
+			splitLayerGroup(lyr,layerList);
+			for(int j = 0; j<layerList.size(); j++ )
+			{
+				lyr2 = ((FLayer)layerList.get(j));
+				if (lyr2.getName().compareToIgnoreCase(layerName) == 0) {
+					return lyr2;
+				}
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * <p> Splits up a layer group in order to get a layer by name when there are layer groups</p>
+	 *
+	 * <p>In <code>result</code> always will be at least one layer.</p>
+	 *
+	 * @param layer the layer we are looking for
+	 * @param result an array list that will have the results of the search
+	 */
+	private void splitLayerGroup(FLayer layer, ArrayList result)
+	{
+		int i;
+		FLayers layerGroup;
+		if (layer instanceof FLayers)
+		{
+			layerGroup = (FLayers)layer;
+			for (i=0; i < layerGroup.getLayersCount(); i++ )
+			{
+				splitLayerGroup(layerGroup.getLayer(i),result);
+			}
+		}
+		else
+		{
+			result.add(layer);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getLayersCount()
+	 */
+	public int getLayersCount() {
+		return layers.size();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.utiles.swing.threads.Cancellable, double)
+	 */
+	public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
+			Cancellable cancel, double scale) throws ReadException {
+		// FIXME Arreglar este error
+		throw new RuntimeException("Esto no deberia de llamarse");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#print(java.awt.Graphics2D,
+	 * com.iver.cit.gvsig.fmap.ViewPort,
+	 * com.iver.utiles.swing.threads.Cancellable, double,
+	 * javax.print.attribute.PrintAttributes)
+	 */
+	public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+			double scale, PrintAttributes properties)
+	throws ReadException {
+		throw new RuntimeException("No deberia pasar por aqui");
+	}
+
+	public void print_old(Graphics2D g, ViewPort viewPort, Cancellable cancel,
+			double scale, PrintAttributes properties)
+	throws ReadException {
+		this.print_old(g, viewPort, cancel, scale, properties, null);
+	}
+
+	/**
+	 * <p>Checks all layers (each one as a sub-node of this node <i>collection of layers</i>) of this collection and draws their requested properties. If a node is
+	 *  a group of layers (<code>ComposedLayer</code>), executes it's drawn.</p>
+	 *
+	 * <p>All nodes which could group with the composed layer <code>group</code>, will be drawn together. And once the <code>
+	 * group</code> is drawn, will be set to <code>null</code> if hasn't a parent layer.</p>
+	 *
+	 * <p>The particular implementation depends on the kind of each layer and composed layer. And this process can be cancelled at any
+	 *  time by the shared object <code>cancel</code>.</p>
+	 *
+	 * <p>According the print quality, labels will be printed in different resolution:
+	 *  <ul>
+	 *   <li><b>PrintQuality.DRAFT</b>: 72 dpi (dots per inch).</li>
+	 *   <li><b>PrintQuality.NORMAL</b>: 300 dpi (dots per inch).</li>
+	 *   <li><b>PrintQuality.HIGH</b>: 600 dpi (dots per inch).</li>
+	 *  </ul>
+	 * </p>
+	 *
+	 * @param g for rendering 2-dimensional shapes, text and images on the Java(tm) platform
+	 * @param viewPort the information for drawing the layers
+	 * @param cancel shared object that determines if this layer can continue being drawn
+	 * @param scale the scale of the view. Must be between {@linkplain FLayer#getMinScale()} and {@linkplain FLayer#getMaxScale()}.
+	 * @param properties properties that will be print
+	 * @param group a composed layer pending to paint; if this parameter is <code>null</code>, the composed layer
+	 *
+	 * @return <code>null</code> if the layers in <code>group</code> had been drawn or were <code>null</code>; otherwise, the <code>group</code>
+	 *
+	 * @see FLayer#print(Graphics2D, ViewPort, Cancellable, double, PrintAttributes)
+	 *
+	 * @throws ReadDriverException if fails the driver reading the data.
+	 */
+	public ComposedLayer print_old(Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, PrintAttributes properties, ComposedLayer group)
+	throws ReadException {
+		double dpi = 72;
+
+		int resolution = properties.getPrintQuality();
+		if (resolution == PrintAttributes.PRINT_QUALITY_NORMAL) {
+			dpi = 300;
+		} else if (resolution == PrintAttributes.PRINT_QUALITY_HIGH){
+			dpi = 600;
+		} else if (resolution == PrintAttributes.PRINT_QUALITY_DRAFT){
+			dpi = 72;
+		}
+
+		// TODO: A la hora de imprimir, isWithinScale falla, porque est�
+		// calculando la escala en pantalla, no para el layout.
+		// Revisar esto.
+
+		// TODO: We have to check when we have to call the drawLabels method when exists a ComposedLayer group.
+		for (int i=0; i < layers.size(); i++) {
+			FLayer lyr = (FLayer) layers.get(i);
+			if (!lyr.isVisible() || !lyr.isWithinScale(scale)) {
+				continue;
+			}
+
+			try{
+
+				///// CHEMA ComposedLayer
+				// Checks for draw group (ComposedLayer)
+				if (group != null) {
+					if (lyr instanceof FLayers){
+						group = ((FLayers)lyr).print_old(g, viewPort, cancel,scale,properties,group);
+					} else {
+						// If layer can be added to the group, does it
+						if (lyr instanceof ILabelable
+								&& ((ILabelable) lyr).isLabeled()
+								&& ((ILabelable) lyr).getLabelingStrategy() != null
+								&& ((ILabelable) lyr).getLabelingStrategy().shouldDrawLabels(scale)) {
+							group.add(lyr);
+						} else {
+							// draw the 'pending to draw' layer group
+							group.print(g,viewPort,cancel,scale,properties);
+
+							// gets a new group instance
+							if (lyr instanceof ILabelable
+									&& ((ILabelable) lyr).isLabeled()
+									&& ((ILabelable) lyr).getLabelingStrategy() != null
+									&& ((ILabelable) lyr).getLabelingStrategy().shouldDrawLabels(scale)) {
+								group = lyr.newComposedLayer();
+							} else {
+								group = null;
+							}
+							// if layer hasn't group, draws it inmediately
+							if (group == null) {
+								if (lyr instanceof FLayers){
+									group = ((FLayers)lyr).print_old(g, viewPort, cancel,scale,properties,group);
+								} else {
+									lyr.print(g, viewPort, cancel,scale,properties);
+									if (lyr instanceof ILabelable
+											&& ((ILabelable) lyr).isLabeled()
+											&& ((ILabelable) lyr).getLabelingStrategy() != null
+											&& ((ILabelable) lyr).getLabelingStrategy().shouldDrawLabels(scale)) {
+										ILabelable lLayer = (ILabelable) lyr;
+										lLayer.drawLabels(null, g, viewPort, cancel, scale, dpi);
+									}
+								}
+							} else {
+								// add the layer to the group
+								group.setMapContext(fmap);
+								group.add(lyr);
+
+							}
+
+						}
+					}
+				} else {
+					// gets a new group instance
+					group = lyr.newComposedLayer();
+					// if layer hasn't group, draws it inmediately
+					if (group == null) {
+						if (lyr instanceof FLayers){
+							group = ((FLayers)lyr).print_old(g, viewPort, cancel,scale,properties,group);
+						} else {
+							lyr.print(g, viewPort, cancel,scale,properties);
+							if (lyr instanceof ILabelable && ((ILabelable) lyr).isLabeled()) {
+								ILabelable lLayer = (ILabelable) lyr;
+
+								lLayer.drawLabels(null, g, viewPort, cancel, scale, dpi);
+							}
+						}
+					} else {
+						// add the layer to the group
+						group.setMapContext(fmap);
+						group.add(lyr);
+
+					}
+				}
+				///// CHEMA ComposedLayer
+
+			} catch (Exception e){
+				String mesg = Messages.getString("error_printing_layer")+" "+ lyr.getName() + ": " + e.getMessage();
+				fmap.addLayerError(mesg);
+				logger.error(mesg, e);
+			}
+
+		}
+
+		///// CHEMA ComposedLayer
+		if (group != null && this.getParentLayer() == null) {
+			//si tenemos un grupo pendiente de pintar, pintamos
+			group.print(g, viewPort, cancel,scale,properties);
+			group = null;
+
+		}
+		///// CHEMA ComposedLayer
+
+		//		if (getVirtualLayers() != null) {
+		//			getVirtualLayers().print( g, viewPort, cancel, scale, properties);
+		//		}
+
+		///// CHEMA ComposedLayer
+		return group;
+		///// CHEMA ComposedLayer
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getFullExtent()
+	 */
+	public Envelope getFullEnvelope() {
+		Envelope rAux = null;
+		boolean first = true;
+
+
+		for (Iterator iter = layers.iterator(); iter.hasNext();) {
+			FLayer capa = (FLayer) iter.next();
+			try{
+				if (first) {
+					rAux = (Envelope)capa.getFullEnvelope().clone();
+					first=false;
+				} else {
+					rAux.add(capa.getFullEnvelope());
+				}
+			}catch (Exception e) {
+				e.printStackTrace();//TODO hay que revisar para determinar el comportamiento que espera el usuario.
+			}
+		}
+
+		return rAux;
+	}
+
+	/**
+	 * Notifies all listeners associated to this collection of layers,
+	 *  that another layer is going to be added or replaced in the internal
+	 *  list of layers.
+	 *
+	 * @param e a layer collection event with the new layer
+	 */
+	protected void callLayerAdding(LayerCollectionEvent event)
+	throws CancelationException {
+		ArrayList aux = (ArrayList) layerCollectionListeners.clone();
+		for (Iterator iter = aux.iterator(); iter.hasNext();) {
+			((LayerCollectionListener) iter.next()).layerAdding(event);
+		}
+	}
+
+	/**
+	 * Notifies all listeners associated to this collection of layers,
+	 *  that a layer is going to be removed from the internal list of layers.
+	 *
+	 * @param event a layer collection event with the layer being removed
+	 *
+	 * @throws CancelationException any exception produced during the cancellation of the driver.
+	 */
+	protected void callLayerRemoving(LayerCollectionEvent event)
+	throws CancelationException {
+		ArrayList aux = (ArrayList) layerCollectionListeners.clone();
+		for (Iterator iter = aux.iterator(); iter.hasNext();) {
+			((LayerCollectionListener) iter.next()).layerRemoving(event);
+		}
+	}
+
+	/**
+	 * Notifies all listeners associated to this collection of layers,
+	 *  that a layer is going to be moved in the internal list of layers.
+	 *
+	 * @param event a layer collection event with the layer being moved, and the initial and final positions
+	 *
+	 * @throws CancelationException any exception produced during the cancellation of the driver.
+	 */
+	protected void callLayerMoving(LayerPositionEvent event)
+	throws CancelationException {
+		ArrayList aux = (ArrayList) layerCollectionListeners.clone();
+		for (Iterator iter = aux.iterator(); iter.hasNext();) {
+			((LayerCollectionListener) iter.next()).layerMoving(event);
+		}
+	}
+
+	/**
+	 * Notifies all listeners associated to this collection of layers,
+	 *  that another layer has been added or replaced in the internal
+	 *  list of layers.
+	 *
+	 * @param e a layer collection event with the new layer
+	 */
+	protected void callLayerAdded(LayerCollectionEvent event) {
+		ArrayList aux = (ArrayList) layerCollectionListeners.clone();
+		for (Iterator iter = aux.iterator(); iter.hasNext();) {
+			((LayerCollectionListener) iter.next()).layerAdded(event);
+		}
+	}
+
+	/**
+	 * Notifies all listeners associated to this collection of layers,
+	 *  that another layer has been removed from the internal list of layers.
+	 *
+	 * @param e a layer collection event with the layer removed
+	 */
+	protected void callLayerRemoved(LayerCollectionEvent event) {
+		ArrayList aux = (ArrayList) layerCollectionListeners.clone();
+		for (Iterator iter = aux.iterator(); iter.hasNext();) {
+			((LayerCollectionListener) iter.next()).layerRemoved(event);
+		}
+	}
+
+	/**
+	 * Notifies all listeners associated to this collection of layers,
+	 *  that another layer has been moved in the internal list of layers.
+	 *
+	 * @param e a layer collection event with the layer moved, and the initial and final positions
+	 */
+	protected void callLayerMoved(LayerPositionEvent event) {
+		ArrayList aux = (ArrayList) layerCollectionListeners.clone();
+		for (Iterator iter = aux.iterator(); iter.hasNext();) {
+			((LayerCollectionListener) iter.next()).layerMoved(event);
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		
+		super.saveToState(state);
+		
+		state.set("mapContext", fmap);
+                
+                List layersToSave = new ArrayList();
+		Iterator iter = this.layers.iterator();
+		while (iter.hasNext()) {
+			FLayer layer = (FLayer) iter.next();
+                        if( !layer.isTemporary() ) {
+                            layersToSave.add(layer); 
+                        }
+		}                
+		state.set("layers", layersToSave);
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+
+		super.loadFromState(state);
+
+		setMapContext((MapContext) state.get("mapContext"));
+		Iterator iter = state.getIterator("layers");
+		while (iter.hasNext()) {
+			FLayer item = (FLayer) iter.next();
+			layers.add(item); 
+		}
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getMapContext()
+	 */
+	public MapContext getMapContext() {
+		return fmap;
+	}
+
+	/*
+	 * I don't think this implementation makes any sense.
+	 * We can group layers with different transformations,
+	 * we cannot set the ICoordTrans for all (?)
+	 * 
+	public void setCoordTrans(ICoordTrans ct) {
+		super.setCoordTrans(ct);
+
+		for (Iterator iter = layers.iterator(); iter.hasNext();) {
+			FLayer layer = (FLayer) iter.next();
+			layer.setCoordTrans(ct);
+		}
+	}
+	*/
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#setAllActives(boolean)
+	 */
+	public void setAllActives(boolean active) {
+		FLayer lyr;
+
+		for (int i = 0; i < layers.size(); i++) {
+			lyr = ((FLayer) layers.get(i));
+			lyr.setActive(active);
+
+			if (lyr instanceof LayerCollection) {
+				((LayerCollection) lyr).setAllActives(active);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getActives()
+	 */
+	public FLayer[] getActives() {
+		ArrayList ret = new ArrayList();
+		LayersIterator it = new LayersIterator(this) {
+
+			public boolean evaluate(FLayer layer) {
+				return layer.isActive();
+			}
+
+		};
+
+		while (it.hasNext())
+		{
+			ret.add(it.next());
+		}
+		return (FLayer[]) ret.toArray(new FLayer[0]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getMinScale()
+	 */
+	public double getMinScale() {
+		return -1; // La visibilidad o no la controla cada capa
+		// dentro de una colecci�n
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getMaxScale()
+	 */
+	public double getMaxScale() {
+		return -1;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#setMinScale(double)
+	 */
+	public void setMinScale(double minScale)
+	{
+		for (Iterator iter = layers.iterator(); iter.hasNext();) {
+			FLayer lyr = (FLayer) iter.next();
+			lyr.setMinScale(minScale);
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#setMaxScale(double)
+	 */
+	public void setMaxScale(double maxScale)
+	{
+		for (Iterator iter = layers.iterator(); iter.hasNext();) {
+			FLayer lyr = (FLayer) iter.next();
+			lyr.setMinScale(maxScale);
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#setActive(boolean)
+	 */
+	public void setActive(boolean b){
+		super.setActive(b);
+		for (int i=0;i<layers.size();i++){
+			((FLayer)layers.get(i)).setActive(b);
+		}
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#addLayerListener(com.iver.cit.gvsig.fmap.layers.LayerListener)
+	 */
+	public boolean addLayerListener(LayerListener o) {
+		for (int i = 0; i < layers.size(); i++) {
+			((FLayer) layers.get(i)).addLayerListener(o);
+		}
+		return true;
+	}
+
+    public DynObjectSet getInfo(Point p, double tolerance,
+			Cancellable cancel) throws LoadLayerException, DataException {
+    	return getInfo(this.getMapContext().getViewPort().convertToMapPoint(p), tolerance);
+    }
+
+    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel,
+        boolean fast) throws LoadLayerException, DataException {
+    	return getInfo(this.getMapContext().getViewPort().convertToMapPoint(p), tolerance);
+    }
+    
+    public DynObjectSet getInfo(org.gvsig.fmap.geom.primitive.Point p,
+    		double tolerance) throws LoadLayerException, DataException {
+        int i;
+        FLayer layer;
+        List res = new ArrayList();
+        for (i = 0; i < this.layers.size(); i++) {
+            layer = (FLayer) layers.get(i);
+            if (layer instanceof InfoByPoint) {
+                InfoByPoint queryable_layer = (InfoByPoint) layer;
+                res.add(queryable_layer.getInfo(p, tolerance));
+            }
+        }
+        DynObjectSet[] innerSets =
+            (DynObjectSet[]) res.toArray(new DynObjectSet[res.size()]);
+        return new MultiDynObjectSet(innerSets);
+    }
+    
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getTocImageIcon()
+	 */
+	public String getTocImageIcon() {
+		return "layer-icon-group";
+	}
+
+	/**
+	 * <p>Adds the layer with the information in an XML entity and the specified name, to this collection of layers. And
+	 *  returns <code>true</code> if there hasn't been errors.</p>
+	 *
+	 * @see CopyOfFLayers#addLayerFromXML(XMLEntity, String)
+	 *
+	 * @param xml tree-node structure with information about layers
+	 * @param name name of the layer to add
+	 * @return <code>true</code> if there were no errors adding the layer, <code>false</code> otherwise
+	 *
+	 * @throws LoadLayerException if fails loading this layer.
+	 */
+	//	public boolean addLayerFromXMLEntity(XMLEntity xml, String name) throws LoadLayerException {
+	//		fmap.clearErrors();
+	//		this.addLayerFromXML(xml,name);
+	//
+	//		return (fmap.getLayersError().size() == 0);
+	//
+	//	}
+
+//	/**
+//	 * <p>Adds the layer with the information in an XML entity and the specified name, to this collection of layers.</p>
+//	 *
+//	 * <p>This method really executes the addition, considering the kind of layer (<code>FLyrVect</code>,
+//	 *  <code>FLyrAnnotation</code>, <code>FLyrRaster</code>, a collection of layers (<code>FLayers</code>),
+//	 *  or another kind of layer (<code>FLayer</code>)), and the driver in the layer.</p>
+//	 *
+//	 * @param xml tree-node structure with information about layers
+//	 * @param name name of the layer to add
+//	 *
+//	 * @throws LoadLayerException if fails loading this layer.
+//	 */
+//	private void addLayerFromXML(XMLEntity xml, String name) throws LoadLayerException {
+//		FLayer layer = null;
+//
+//		try {
+//			if (name == null) {
+//				name = xml.getName();
+//			}
+//
+//
+//			String className = xml.getStringProperty("className");
+//			Class clase = Class.forName(className);
+//			layer = (FLayer) clase.newInstance();
+//			if (FLayers.class.isAssignableFrom(clase)) {
+//				((FLayers)layer).setMapContext(getMapContext());
+//				((FLayers)layer).setParentLayer(this);
+//				//			layer = new FLayers(getMapContext(),this);
+//				layer.setXMLEntity(xml);
+//			} else {
+//				// Capas Nuevas (externas)
+//				layer.setName(name);
+//				layer.setXMLEntity(xml);
+//				layer.load();
+//			}
+//
+//			//		//TODO VCN FLyrAnnotation es un parche para no tener que duplicar todo el c�digo de aq� y de los diferentes m�todos de LayerFactory,
+//			//		//ya que los drivers de una FLyrAnnotation no sabemos cual es puede ser cualquier Driver Vectorial.
+//			//		if (className.equals(FLyrVect.class.getName())){// || className.equals(FLyrAnnotation.class.getName())) {
+//			//			String type = xml.getStringProperty("type");
+//			//			if ("vectorial".equals(type)){
+//			//				//String recordsetName = xml.getChild(i).getStringProperty("recordset-name");
+//			//				IProjection proj = null;
+//			//				if (xml.contains("proj")) {
+//			//					proj = CRSFactory.getCRS(xml.getStringProperty("proj"));
+//			//				}
+//			//				else
+//			//				{
+//			//					proj = this.getMapContext().getViewPort().getProjection();
+//			//				}
+//			//				if (xml.contains("file")) {
+//			//					Driver d;
+//			//					try {
+//			//						d = LayerFactory.getDM().getDriver(xml.getStringProperty("driverName"));
+//			//					} catch (DriverLoadException e1) {
+//			//						throw new DriverLayerException(name,e1);
+//			//					}
+//			//					layer = LayerFactory.createLayer(name, (VectorialFileDriver) d,
+//			//							new File(xml.getStringProperty("file")),
+//			//							proj);
+//			//
+//			//
+//			//				}
+//			//				if (xml.contains("db")) {
+//			//
+//			//					String driverName = xml.getStringProperty("db");
+//			//					IVectorialDatabaseDriver driver;
+//			//					try {
+//			//						driver = (IVectorialDatabaseDriver) LayerFactory.getDM().getDriver(driverName);
+//			//						//Hay que separar la carga de los datos del XMLEntity del load.
+//			//						driver.setXMLEntity(xml.getChild(2));
+//			//
+//			//						boolean loadOk = false;
+//			//						((DefaultJDBCDriver)driver).load();
+//			//						if (((DefaultJDBCDriver)driver).getConnection() != null) {
+//			//							loadOk = true;
+//			//						}
+//			//						layer = LayerFactory.createDBLayer(driver, name, proj);
+//			//						if (!loadOk) {
+//			//							layer.setAvailable(false);
+//			//						}
+//			//
+//			//					} catch (DriverLoadException e) {
+//			//						throw new DriverLayerException(name,e);
+//			//					} catch (XMLException e) {
+//			//						throw new DriverLayerException(name,e);
+//			//					} catch (ReadException e) {
+//			//						throw new DriverLayerException(name,e);
+//			//					}
+//			//
+//			//				}
+//			//				// Clases con algun driver gen�rico creado por otro
+//			//				// programador
+//			//				if (xml.contains("other")) {
+//			//
+//			//					String driverName = xml.getStringProperty("other");
+//			//					VectorialDriver driver = null;
+//			//					try {
+//			//						driver = (VectorialDriver) LayerFactory.getDM().getDriver(driverName);
+//			//					} catch (DriverLoadException e) {
+//			//						// Si no existe ese driver, no pasa nada.
+//			//						// Puede que el desarrollador no quiera que
+//			//						// aparezca en el cuadro de di�logo y ha metido
+//			//						// el jar con sus clases en nuestro directorio lib.
+//			//						// Intentamos cargar esa clase "a pelo".
+//			//						if (xml.getChild(2).contains("className"))
+//			//						{
+//			//							String className2 = xml.getChild(2).getStringProperty("className");
+//			//							try {
+//			//								driver = (VectorialDriver) Class.forName(className2).newInstance();
+//			//							} catch (Exception e1) {
+//			//								throw new DriverLayerException(name,e);
+//			//							}
+//			//						}
+//			//					} catch (NullPointerException npe) {
+//			//						// Si no existe ese driver, no pasa nada.
+//			//						// Puede que el desarrollador no quiera que
+//			//						// aparezca en el cuadro de di�logo y ha metido
+//			//						// el jar con sus clases en nuestro directorio lib.
+//			//						// Intentamos cargar esa clase "a pelo".
+//			//						if (xml.getChild(2).contains("className"))
+//			//						{
+//			//							String className2 = xml.getChild(2).getStringProperty("className");
+//			//							try {
+//			//								driver = (VectorialDriver) Class.forName(className2).newInstance();
+//			//							} catch (Exception e1) {
+//			//								throw new DriverLayerException(name,e1);
+//			//							}
+//			//						}
+//			//					}
+//			//					if (driver instanceof IPersistence)
+//			//					{
+//			//						IPersistence persist = (IPersistence) driver;
+//			//						persist.setXMLEntity(xml.getChild(2));
+//			//					}
+//			//					layer = LayerFactory.createLayer(name, driver, proj);
+//			//				}
+//			//
+//			//			}
+//			//
+//			//			//TODO VCN FLyrAnnotation es un parche para no tener que duplicar todo el c�digo de aq� y de los diferentes m�todos de LayerFactory,
+//			//			//ya que los drivers de una FLyrAnnotation no sabemos cual es puede ser cualquier Driver Vectorial.
+//			//			if (className.equals(FLyrAnnotation.class.getName())){
+//			//				layer=FLyrAnnotation.createLayerFromVect((FLyrVect)layer);
+//			//			}
+//			//
+//			//
+//			//			layer.setXMLEntity(xml);
+//			//
+//			//		} else {
+//			//			Class clase = LayerFactory.getLayerClassForLayerClassName(className);
+//			//			layer = (FLayer) clase.newInstance();
+//			//			if (clase.isAssignableFrom(FLayers.class)) {
+//			//				((FLayers)layer).setMapContext(getMapContext());
+//			//				((FLayers)layer).setParentLayer(this);
+//			////				layer = new FLayers(getMapContext(),this);
+//			//				layer.setXMLEntity(xml);
+//			//			} else {
+//			//				// Capas Nuevas (externas)
+//			//				layer.setName(name);
+//			//				layer.setXMLEntity(xml);
+//			//				layer.load();
+//			//			}
+//			//		}
+//			this.addLayer(layer);
+//			logger.debug("layer: "+ layer.getName() +" loaded");
+//			// Comprobar que la proyecci�n es la misma que la de FMap
+//			// Si no lo es, es una capa que est� reproyectada al vuelo
+//			IProjection proj = layer.getProjection();
+//			if ((proj != null)) {
+//				if (!proj.getFullCode().equals(getMapContext().getProjection().getFullCode()))
+//				{
+//					ICoordTrans ct = proj.getCT(getMapContext().getProjection());
+//					// TODO: REVISAR CON LUIS
+//					// Se lo fijamos a todas, luego cada una que se reproyecte
+//					// si puede, o que no haga nada
+//
+//					layer.setCoordTrans(ct);
+//				}
+//			}
+//		} catch (XMLException e) {
+//			fmap.addLayerError(xml.getStringProperty("name"));
+//			throw new LoadLayerException(name,e);
+//		} catch (ClassNotFoundException e) {
+//			fmap.addLayerError(xml.getStringProperty("name"));
+//			throw new LoadLayerException(name,e);
+//		} catch (InstantiationException e) {
+//			fmap.addLayerError(xml.getStringProperty("name"));
+//			throw new LoadLayerException(name,e);
+//		} catch (IllegalAccessException e) {
+//			fmap.addLayerError(xml.getStringProperty("name"));
+//			throw new LoadLayerException(name,e);
+//		} catch (LoadLayerException e){
+//			fmap.addLayerError(xml.getStringProperty("name"));
+//			throw e;
+//		}
+//	}
+
+	/**
+	 * <p>Sets the <code>MapContext</code> that contains this layer node.</p>
+	 *
+	 * @param mapContext the <code>MapContext</code> that contains this layer node
+	 */
+	public void setMapContext(MapContext mapContext) {
+		this.fmap = mapContext;
+	}
+
+//	/**
+//	 * <p>Creates a new layer of the same class as the property <i>className</i> of the XML, after, adds the XML entity to that layer
+//	 *  and loads the layer. Then, adds the layer to this collection of layers, and if there is a projection defined,
+//	 *  inserts the transformation coordinates to the layer.</p>
+//	 *
+//	 * <p>If the new layer is an instance of <code>FLyrVect</code>, and has a label field, creates a label layer on the layer.</p>
+//	 *
+//	 * @param xml tree-node structure with information about layers
+//	 * @param name name of the layer to add
+//	 */
+//	private void addLayerFromXMLNew(XMLEntity xml, String name) {
+//		//		FLayer layer = null;
+//		//
+//		//
+//		//		try {
+//		//			String className = xml.getStringProperty("className");
+//		//			Class clazz = Class.forName(className);
+//		//			if (clazz.isAssignableFrom(FLayers.class)) {
+//		//				layer = (FLayer) clazz.newInstance();
+//		//				((FLayers)layer).setMapContext(getMapContext());
+//		//				((FLayers)layer).setParentLayer(this);
+//		//	//		if (className.equals((FLayers.class.getName()))){
+//		//	//			layer = new FLayers(getMapContext(),this);
+//		//			} else {
+//		//	//			Por compatibilidad
+//		//				if (className.equals(FLyrVect.class.getName())) {
+//		//					if (xml.contains("file")) {
+//		//						layer = new FLayerFileVectorial();
+//		//					} else if (xml.contains("db")) {
+//		//						try {
+//		//							layer = (FLayer)((ExtensionPoint)ExtensionPointsSingleton.getInstance().get("Layers")).create("com.iver.cit.gvsig.fmap.layers.FLayerJDBCVectorial");
+//		//						} catch (Exception e) {
+//		//							throw new XMLException(new Exception("No se tiene registrada la capa de tipo JDBC"));
+//		//						}
+//		//						//className = FLayerJDBCVectorial.class.getName();
+//		//					} else if (xml.contains("other")){
+//		//						layer = new FLayerGenericVectorial();
+//		//					} else {
+//		//						throw new XMLException(new Exception("Capa vectorial de tipo no reconocido"));
+//		//					}
+//		//	//				Fin por compatibilidad
+//		//				} else {
+//		//					try {
+//		//						layer = (FLayer)(((ExtensionPoint)ExtensionPointsSingleton.getInstance().get("Layers")).create(className));
+//		//					} catch (Exception e) {
+//		//						//puende que no este registrada como punto de extension
+//		//						Class clase = Class.forName(className);
+//		//						layer = (FLayer) clase.newInstance();
+//		//						// FIXME: Hacemos algo aqui o dejamos que suba el error?
+//		//					}
+//		//				}
+//		//
+//		//			}
+//		//			layer.setXMLEntity(xml);
+//		//			if (name != null) layer.setName(name);
+//		//			layer.load();
+//		//
+//		//			this.addLayer(layer);
+//		//			logger.debug("layer: "+ layer.getName() +" loaded");
+//		//			// Comprobar que la proyecci�n es la misma que la de FMap
+//		//			// Si no lo es, es una capa que est� reproyectada al vuelo
+//		//			IProjection proj = layer.getProjection();
+//		//			if ((proj != null))
+//		//				if (proj != getMapContext().getProjection())
+//		//				{
+//		//					ICoordTrans ct = proj.getCT(getMapContext().getProjection());
+//		//					// TODO: REVISAR CON LUIS
+//		//					// Se lo fijamos a todas, luego cada una que se reproyecte
+//		//					// si puede, o que no haga nada
+//		//					layer.setCoordTrans(ct);
+//		//
+//		//				}
+//		//		}catch (Exception e) {
+//		//			fmap.addLayerError(xml.getStringProperty("name"));
+//		//			logger.debug(Messages.getString("could_not_load_layer")+": "+xml.getStringProperty("name") + ".\n"
+//		//					+Messages.getString("reason")+":", e);
+//		//		}
+//	}
+        public void accept(Visitor visitor) throws BaseException {
+            for (int i = 0; i < this.getLayersCount(); i++) {
+                FLayer layer = this.getLayer(i);
+                try {
+                    if (layer instanceof LayersVisitable) {
+                        ((LayersVisitable) layer).accept(visitor);
+                    } else {
+                        visitor.visit(layer);
+                    }
+                } catch (VisitCanceledException ex) {
+                    break;
+                }
+            }
+        }
+
+	public void accept(LayersVisitor visitor) throws BaseException {
+		for (int i = 0; i < this.getLayersCount(); i++) {
+			FLayer layer = this.getLayer(i);
+			if (layer instanceof LayersVisitable) {
+				((LayersVisitable) layer).accept(visitor);
+			} else {
+				visitor.visit(layer);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.metadata.Metadata#getMetadataID()
+	 */
+	public Object getMetadataID() throws MetadataException {
+		StringBuffer strb = new StringBuffer();
+		strb.append("Layers(");
+		strb.append(this.getName());
+		strb.append("):{");
+		Iterator iter = this.layers.iterator();
+		while (iter.hasNext()) {
+			strb.append(((FLayer) iter.next()).getMetadataID());
+			strb.append(",");
+		}
+		strb.append("}");
+		return strb.toString();
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.metadata.Metadata#getMetadataChildren()
+	 */
+	public Set getMetadataChildren() {
+		Set ret = new TreeSet();
+		Iterator iter = this.layers.iterator();
+		while (iter.hasNext()) {
+			ret.add(iter.next());
+		}
+		return ret;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.gvsig.metadata.Metadata#getMetadataName()
+	 */
+	public String getMetadataName() throws MetadataException {
+		StringBuffer strb = new StringBuffer();
+		strb.append("Layer Group '");
+		strb.append(this.getName());
+		strb.append("': {");
+		Iterator iter = this.layers.iterator();
+		while (iter.hasNext()) {
+			strb.append(((FLayer) iter.next()).getMetadataName());
+			strb.append(",");
+		}
+		strb.append("}");
+		return strb.toString();
+	}
+
+
+	public void beginDraw(Graphics2D g, ViewPort viewPort) {
+		LayerDrawEvent beforeEvent = new LayerDrawEvent(this, g, viewPort, LayerDrawEvent.LAYER_BEFORE_DRAW);
+		fmap.fireLayerDrawingEvent(beforeEvent);
+	}
+
+	public void endDraw(Graphics2D g, ViewPort viewPort) {
+		LayerDrawEvent afterEvent = new LayerDrawEvent(this, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW);
+		fmap.fireLayerDrawingEvent(afterEvent);
+	}
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				FLayers.class,
+				"FLayers",
+				"FLayers Persistence definition",
+				null, 
+				null
+		);
+		definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, "FLyrDefault");
+		
+		definition.addDynFieldObject("mapContext").setClassOfValue(MapContext.class).setMandatory(true);
+		definition.addDynFieldList("layers").setClassOfItems(FLayer.class).setMandatory(true);
+            
+            return Boolean.TRUE;
+        }
+    }
+
+	protected void doDispose() throws BaseException {
+		if (layers != null) {
+			for (int i = 0; i < layers.size(); i++) {
+				dispose((Disposable) layers.get(i));
+			}
+		}
+	}
+	
+	public void move(FLayer layer, LayerCollection group, int where, FLayer adjoiningLayer) throws LayerNotFoundInCollectionException{
+			
+		callLayerRemoving(LayerCollectionEvent.createLayerRemovingEvent(layer));
+		group.addLayer(layer, where, adjoiningLayer);
+		removeLayer(layer);
+		this.updateDrawVersion();
+		callLayerRemoved(LayerCollectionEvent.createLayerRemovedEvent(layer));
+
+	}
+	
+	public void join(FLayer layer, LayerCollection group) {
+		try {
+			layers.remove(layer);
+			group.addLayer(layer, END, null);
+			this.updateDrawVersion();
+		} catch (LayerNotFoundInCollectionException e){
+			throw new MapContextRuntimeException(e);
+		}
+	}
+
+	public void move(FLayer layer, LayerCollection group) {
+		try {
+			move(layer, group, END, null);
+		} catch (LayerNotFoundInCollectionException e){
+			throw new MapContextRuntimeException(e);
+		}
+	}
+	
+	public void addLayer(FLayer layer, int where, FLayer adjoiningLayer)
+	throws LayerNotFoundInCollectionException {
+
+		switch (where) {
+		case BEGIN:
+			addLayer(0,layer);
+			break;
+		case BEFORE:
+			if (adjoiningLayer!=null){
+				if (this.layers.contains(adjoiningLayer)){
+					for(int i=0; i<this.getLayersCount(); i++){
+						if(adjoiningLayer==this.getLayer(i)){
+							addLayer(i, layer);
+							break;
+						}
+					}
+				} else {
+					throw new LayerNotFoundInCollectionException(adjoiningLayer, this);
+				}
+			} else {
+				addLayer(0,layer);
+			}
+			break;
+		case AFTER:
+			if (adjoiningLayer!=null){
+				if (this.layers.contains(adjoiningLayer)){
+					for(int i=0; i<this.getLayersCount(); i++){
+						if(adjoiningLayer==this.getLayer(i)){
+							addLayer(i+1, layer);
+							break;
+						}
+					}
+				} else {
+					throw new LayerNotFoundInCollectionException(adjoiningLayer, this);
+				}
+			} else {
+				this.addLayer(layer);
+			}
+			break;
+		default: // By default add layer an the end of the collection
+			this.addLayer(layer);
+			break;
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayers.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/OperationNotSupportedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/OperationNotSupportedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/OperationNotSupportedException.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+/**
+ * Lanzada cuando se intenta realizar una operaci�n generalmente sobre una
+ * clase abstracta o interfaz y la implementaci�n de dicha clase abstracta o
+ * interfaz no soporta dicha  operaci�n. Ver la descripci�n del m�todo que la
+ * origin�
+ */
+public class OperationNotSupportedException extends Exception {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1057162354181561395L;
+
+	/**
+	 * Crea una nueva OperationNotSupportedException.
+	 */
+	public OperationNotSupportedException() {
+		super();
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 */
+	public OperationNotSupportedException(String message) {
+		super(message);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public OperationNotSupportedException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param cause
+	 */
+	public OperationNotSupportedException(Throwable cause) {
+		super(cause);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/OperationNotSupportedException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayersIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayersIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayersIterator.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
+
+
+/**
+ * Interator for iterate in a Layers tree
+ * <P>
+ * Extend this class to create an expecific layer iterator
+ * and override the method <code>evaluate</code> for check
+ * if a layer will be in the iteration list.
+ * <P> 
+ * @author jmvivo
+ *
+ */
+public class LayersIterator implements Iterator {
+	ArrayList layersList  =new ArrayList();
+	int index = 0;
+	
+	public LayersIterator() {
+		
+	}
+	
+	public LayersIterator(FLayer layer) {
+		this.appendLayer(layer);
+	}
+	
+	protected void appendLayer(FLayer layer) {
+		if (this.evaluate(layer)) {
+			layersList.add(layer);
+		}
+		if (layer instanceof LayerCollection) {
+			appendLayers((LayerCollection)layer);			
+		}
+	}
+	
+	private void appendLayers(LayerCollection layers) {
+		int i;
+		for (i=0;i< layers.getLayersCount();i++) {
+			appendLayer(layers.getLayer(i));
+		}
+	}
+
+	public void remove() {
+		throw new UnsupportedOperationException();		
+	}
+
+	public boolean hasNext() {
+		return  index < layersList.size();
+	}
+
+	public Object next() {		
+		return nextLayer();
+	}
+	
+    /**
+     * Returns the next layer in the iteration.
+     *
+     * @return the next layer in the iteration.
+     * @exception NoSuchElementException iteration has no more elements.
+     * 
+     * @see next()
+     */
+	public FLayer nextLayer() {
+		if (!this.hasNext()) {
+			throw new NoSuchElementException();
+		}
+		FLayer aux = (FLayer)layersList.get(index);
+		index++;
+		return aux;
+	}
+	
+	/**
+	 * Called before add a layer to the iteration
+	 * list.	 
+	 * @param layer the layer to check
+	 * @return true if the layer will be in the iteration list
+	 */
+	public boolean evaluate(FLayer layer) {
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayersIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerChangeSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerChangeSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerChangeSupport.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+
+
+
+/**
+ * <p>Manages all legend listeners of a layer, notifying them any legend change event produced.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class LayerChangeSupport {
+	/**
+	 * <p>The legend listeners of a layer.</p>
+	 */
+	private ArrayList listeners = new ArrayList();
+
+	/**
+	 * <p>Registers a <code>LegendListener</code>.</p>
+	 * 
+	 * @param listener the legend listener
+	 */
+	public void addLayerListener(LegendListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * <p>Removes a registered <code>LegendListener</code>.</p>
+	 *
+	 * @param listener the legend listener
+	 */
+	public void removeLayerListener(LegendListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * <p>Notifies a legend change to all legend listeners registered.</p>
+	 *
+	 * @param e a legend event with the new legend and events that compound this one
+	 */
+	public void callLegendChanged(LegendChangedEvent e) {
+		for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+			LegendListener listener = (LegendListener) iter.next();
+
+			listener.legendChanged(e);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerChangeSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SpatialCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SpatialCache.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SpatialCache.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SpatialCache  {
+    
+    private static final Logger logger = LoggerFactory.getLogger(SpatialCache.class);
+    private int maxFeatures = 1000; // Por defecto, pero se puede cambiar
+	private int fastNumTotalRegs=0;
+	private SpatialIndex index = null;
+	
+	private boolean enabled = false;
+
+	public SpatialCache() {
+		try {
+			this.index = GeometryLocator.getGeometryManager().createDefaultMemorySpatialIndex();
+		} catch (Exception e) {
+			logger.info("Can't create spatial index", e);
+		}
+	}
+	
+	public int getMaxFeatures() {
+		return maxFeatures;
+	}
+
+	public void setMaxFeatures(int maxFeatures) {
+		this.maxFeatures = maxFeatures;
+	}
+
+	public synchronized void insert(Envelope bounds, Geometry geom) {
+		if (isEnabled() && getMaxFeatures() >= size()) {
+		    this.index.insert(bounds, geom);
+		}
+	}
+
+	public synchronized void query(Envelope searchEnv, Visitor visitor)
+	{
+		this.index.query(searchEnv, visitor);
+		
+	}
+	public synchronized List query(Envelope searchEnv)
+	{
+		List result = new ArrayList();
+		Iterator it = index.query(searchEnv);
+		while( it.hasNext() ) {
+			result.add( it.next());
+		}
+		return result;
+	}
+
+	public void insert(Envelope itemEnv, Object item) {
+		if (isEnabled() && getMaxFeatures() >= size()) {
+			this.index.insert(itemEnv, item);
+			fastNumTotalRegs++;
+		}
+	}
+
+	public boolean remove(Envelope itemEnv, Object item) {
+		boolean resul = this.index.remove(itemEnv,item);
+		if (resul)
+			fastNumTotalRegs--;
+		return resul;
+	}
+
+	public int size() {
+		return fastNumTotalRegs;
+	}
+
+	public void clearAll() {
+		index.removeAll();
+		fastNumTotalRegs = 0;
+	}
+
+	public void remove(org.gvsig.fmap.geom.primitive.Envelope bounds, Geometry geom) {
+        index.remove(bounds, geom);
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SpatialCache.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayer.java	(revision 42196)
@@ -0,0 +1,561 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.Projected;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.ReloadLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.StartEditionLayerException;
+import org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer;
+import org.gvsig.metadata.Metadata;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.task.Cancellable;
+
+
+
+/**
+ * Definition of the basic functionality that all kind of layers should implement.
+ * <br>
+ * This kind of layers store their data, are drawable, projectable (with a projection), can be a node of a tree of layers, and
+ * could be editable and have a cache with previous draws. They also can be visible or not, and active or not.
+ * <br>
+ * A layer can also store information about errors produced working with it, and have a name (kind of layer) and
+ * a brief summary explaining what's for.
+ * <br>
+ * Each particular implementation can add new properties, and limit or expand the functionality.</p
+ * <br>
+ * @see Projected
+ */
+public interface FLayer extends Projected, Persistent, Metadata, Disposable, ExtendedPropertiesSupport
+{
+	public final String METADATA_DEFINITION_NAME = "Layer";
+	public final String METADATA_DEFINITION_DESCRIPTION = "Basic layer metadata definition";
+
+	public static final String METADATA_CRS = DataStore.METADATA_CRS;
+	public static final String METADATA_NAME = "name";
+
+	/**
+	 * <p>Changes the status of this layer to active or inactive.</p>
+	 * <p>One layer is active if is selected in TOC.</p>
+	 *
+	 * @param selected the boolean to be set
+	 *
+	 * @see #isActive()
+	 */
+	void setActive(boolean selected);
+
+	/**
+	 * <p>Returns if this layer is active or not in TOC.</p>
+	 * <p>One layer is active if is selected in TOC.</p>
+	 *
+	 * @return <code>true</code> if this layer is active; <code>false</code> otherwise
+	 *
+	 * @see #setActive(boolean)
+	 */
+	boolean isActive();
+
+	/**
+	 * Sets a name to this layer.
+	 *
+	 * @param name the string that is to be this layer's name
+	 *
+	 * @see #getName()
+	 */
+	void setName(String name);
+
+	/**
+	 * Returns the name of this layer.
+	 *
+	 * @return an string with this layer's name
+	 *
+	 * @see #setName(String)
+	 */
+	String getName();
+
+	/**
+	 * <p>Executes the initialization operations of this layer. This method is invoked
+	 * only one time during the life of this layer and just before visualize it.</p>
+	 *
+	 * @throws LoadLayerException if fails loading the layer.
+	 *
+	 * @see #reload()
+	 */
+	void load() throws LoadLayerException;
+	/**
+	 * <p>Changes the status of this layer to visible or not.</p>
+	 * <p>One layer is visible if it's check box associated is selected. This means
+	 *  that layer will tried to be painted. If the data associated isn't available,
+	 *  then this property will change to <code>false</code>.</p>
+	 *
+	 * @param visibility the boolean to be set
+	 *
+	 * @see #isVisible()
+	 * @see #visibleRequired()
+	 * @see #isAvailable()
+	 */
+	void setVisible(boolean visibility);
+
+	/**
+	 * <p>Returns if this layer is visible and available.</p>
+	 * <p>One layer is visible if it's check box associated is selected. This means
+	 *  that layer will tried to be painted.</p>
+	 * <p>One layer is available if the source of data is on-line.</p>
+	 * <p>It's probably that one layer selected hadn't available it's data, for example
+	 *  in a remote service.</p>
+	 *
+	 * @return <code>true</code> if this layer is visible and available; <code>false</code> otherwise
+	 *
+	 * @see #isAvailable()
+	 * @see #setAvailable(boolean)
+	 * @see #visibleRequired()
+	 */
+	boolean isVisible();
+
+	/**
+	 * Returns the parent {@link FLayers FLayers} node of this layer.
+	 *
+	 * @return the parent of this layer, or <code>null</code> if hasn't parent
+	 *
+	 * @see #setParentLayer(FLayers)
+	 */
+	public FLayers getParentLayer();
+
+	/**
+	 * <p>Returns a reference to the model of this layer, or null if this layer has no model.</p>
+	 *
+	 * @return the model of this layer
+	 */
+	public MapContext getMapContext();
+
+	/**
+	 * Inserts the parent {@link FLayers FLayers} node of the layer.
+	 *
+	 * @param root a <code>FLayers</code> object
+	 *
+	 * @see #getParentLayer()
+	 */
+	public void setParentLayer(FLayers root);
+	/**
+	 * Returns the full extension of the layer node.
+	 *
+	 * @return location and dimension of this layer node
+	 *
+	 * @throws ReadException if fails the driver used in this method.
+	 */
+	Envelope getFullEnvelope() throws ReadException;
+
+	/**
+	 * Draws the layer using a buffer.
+	 *
+	 * @param image an image used to accelerate the screen draw
+	 * @param g for rendering 2-dimensional shapes, text and images on the Java(tm) platform
+	 * @param viewPort information for drawing this layer
+	 * @param cancel an object thread that implements the <code>Cancellable</code> interface, and will allow to cancel the draw
+	 * @param scale value that represents the scale
+	 *
+	 * @throws ReadException if fails the driver used in this method.
+	 *
+	 * @see #print(Graphics2D, ViewPort, Cancellable, double, PrintAttributes)
+	 */
+	void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
+			Cancellable cancel,double scale) throws ReadException;
+
+	/**
+	 * Prints this layer according to some properties requested.
+	 *
+	 * @param g for rendering 2-dimensional shapes, text and images on the Java(tm) platform
+	 * @param viewPort the information for drawing the layers
+	 * @param cancel an object thread that implements the {@link Cancellable Cancellable} interface, and will allow to cancel the draw
+	 * @param scale the scale of the view. Must be between {@linkplain FLayer#getMinScale()} and {@linkplain FLayer#getMaxScale()}.
+	 * @param properties a set with the settings to be applied to a whole print job and to all the docs in the print job
+	 *
+	 * @throws ReadException if fails the driver used in this method.
+	 *
+	 * @see #draw(BufferedImage, Graphics2D, ViewPort, Cancellable, double)
+	 */
+	void print(Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, PrintAttributes properties)
+	throws ReadException;
+
+	/**
+	 * Inserts the transformation coordinates.
+	 *
+	 * @param ct transformation coordinates
+	 *
+	 * @see #getCoordTrans()
+	 */
+	void setCoordTrans(ICoordTrans ct);
+
+	/**
+	 * Returns the transformation coordinates.
+	 *
+	 * @return transformation coordinates
+	 *
+	 * @see #setCoordTrans(ICoordTrans)
+	 */
+	ICoordTrans getCoordTrans();
+
+	/**
+	 * Adds a <code>LayerListener</code> to the listener list.
+	 *
+	 * @param o a layer listener
+	 *
+	 * @return <code>true</code> if hasn't been any problem during the insertion of the listener
+	 *
+	 * @see #getLayerListeners()
+	 * @see #removeLayerListener(LayerListener)
+	 */
+	public boolean addLayerListener(LayerListener o);
+	/**
+	 * Returns all <code>LayerListener</code>s of this layer as an array.
+	 *
+	 * @return an array with all layer listeners associated to this layer
+	 *
+	 * @see #addLayerListener(LayerListener)
+	 * @see #removeLayerListener(LayerListener)
+	 */
+	public LayerListener[] getLayerListeners();
+	/**
+	 * Removes the <code>LayerListener</code> argument from this layer.
+	 *
+	 * @param o a layer listener
+	 *
+	 * @return <code>true</code> if hasn't been any problem doing this process
+	 *
+	 * @see #addLayerListener(LayerListener)
+	 * @see #getLayerListeners()
+	 */
+	public boolean removeLayerListener(LayerListener o);
+	/**
+	 * <p>Returns if the value of <code>scale</code> argument
+	 *  is within the maximum and minimum scale of this layer.</p>
+	 *
+	 * @param scale the scale > 0
+	 *
+	 * @return <code>true</code> if the <code>scale</code> argument is within the range of scales of this layer; <code>false</code> otherwise
+	 *
+	 * @see #setMinScale(double)
+	 * @see #setMaxScale(double)
+	 */
+	public boolean isWithinScale(double scale);
+
+
+	/**
+	 * Returns the minimum scale visible. Lower scales won't be drawn.
+	 *
+	 * @return the minimum scale > 0, -1 if not defined
+	 *
+	 * @see #setMinScale(double)
+	 */
+	public double getMinScale();
+
+	/**
+	 * Returns the maximum scale visible. Higher scales won't be drawn.
+	 *
+	 * @return the maximum scale > 0, -1 if not defined
+	 *
+	 * @see #setMaxScale(double)
+	 */
+	public double getMaxScale();
+	/**
+	 * Sets the minimum scale visible. Lower scales won't be drawn.
+	 *
+	 * @param minScale the scale > 0, -1 if not defined
+	 *
+	 * @see #getMinScale()
+	 */
+	public void setMinScale(double minScale);
+	/**
+	 * Sets the maximum scale visible. Higher scales won't be drawn.
+	 *
+	 * @param maxScale the scale > 0, -1 if not defined
+	 *
+	 * @see #getMaxScale()
+	 */
+	public void setMaxScale(double maxScale);
+
+        /**
+	 * <p>Returns if this layer is editable.</p>
+	 * <p>One layer is editable if user can modify its information with graphical tools.</p>
+	 *
+	 * @return <code>true</code> if this layer is editable; <code>false</code> otherwise
+	 *
+	 * @see #setEditing(boolean)
+	 */
+	public boolean isEditing();
+
+	/**
+	 * Returns the image icon that will be shown in the TOC next to this layer.
+	 *
+	 * @return a String reference to the image icon, or <code>null</code> if there isn't any
+	 */
+	public String getTocImageIcon();
+
+	/**
+	 * <p>Returns if this layer appears in the TOC.</p>
+	 * <p>If doesn't appears, remains in the view and in the project.</p>
+	 *
+	 * @return <code>true</code> if this layer appears in the TOC; <code>false</code> otherwise
+	 */
+	boolean isInTOC();
+	/**
+	 * <p>Sets that this layer appears or not in the TOC.</p>
+	 *
+	 * @param b <code>true</code> if appears in the TOC; <code>false</code> otherwise
+	 */
+	void setInTOC(boolean b);
+	/**
+	 * Returns the status of this layer.
+	 *
+	 * @return the status stored in a <code>FLayerStatus</code> object
+	 *
+	 * @see #setFLayerStatus(FLayerStatus)
+	 */
+	public FLayerStatus getFLayerStatus();
+	/**
+	 * Sets the status of this layer.
+	 *
+	 * @param status information of the status for this layer
+	 *
+	 * @see #getFLayerStatus()
+	 */
+	public void setFLayerStatus(FLayerStatus status);
+	/*
+	 * This stuff is to save error's info that causes
+	 * unavailable status.
+	 * */
+	/**
+	 * <p>Returns if this layer hasn't got errors.</p>
+	 *
+	 * @return <code>true</code> if this layer hasn't got errors; <code>false</code> otherwise
+	 */
+	public boolean isOk();
+	/**
+	 * Returns the number of errors which causes this layer to be in unavailable status.
+	 *
+	 * @return number of errors >= 0
+	 *
+	 * @see #getError(int)
+	 * @see #getErrors()
+	 */
+	public int getNumErrors();
+
+	/**
+	 * Returns the specified error.
+	 *
+	 * @param i index of the error >= 0 && < <code>getNumErrors</code>
+	 *
+	 * @return a singular error
+	 *
+	 * @see #getNumErrors()
+	 * @see #getErrors()
+	 */
+	public BaseException getError(int i);
+
+    /**
+     * Adds an error reason that describes this layer's wrong status.
+     * 
+     * @param exception
+     *            a <code>BaseException</code> with the information of the error
+     * 
+     * @see #getNumErrors()
+     * @see #getError(int)
+     * @see #getErrors()
+     */
+	public void addError(BaseException exception);
+
+	/**
+	 * Returns a list with all layer errors.
+	 *
+	 * @return an <code>ArrayList</code> with the errors
+	 *
+	 * @see #getError(int)
+	 * @see #getNumErrors()
+	 */
+	public List getErrors();
+	/**
+	 * <p>Changes the status of availability of this layer.</p>
+	 * <p>One layer is available if the source of data is on-line.</p>
+	 *
+	 * @param available the boolean to be set
+	 *
+	 * @see #isAvailable()
+	 */
+	public void setAvailable(boolean available);
+	/**
+	 * <p>Returns the status of availability of this layer.</p>
+	 * <p>One layer is available if the source of data is on-line.</p>
+	 *
+	 * @return <code>true</code> if the source of data is on-line; <code>false</code> otherwise
+	 *
+	 * @see #setAvailable(boolean)
+	 * @see #isVisible()
+	 */
+	public boolean isAvailable();
+
+    /**
+     * <p>
+     * Tries recover a layer of a possible error.
+     * </p>
+     * <p>
+     * If it has any problem during the load, marks the availability to false
+     * and throws an exception.
+     * </p>
+     * 
+     * @throws ReloadLayerException
+     *             if it's thrown a <code>ReadException</code> or an
+     *             <code>IOException</code> during the load of this layer.
+     * 
+     * @see #load()
+     */
+	public void reload() throws ReloadLayerException;
+
+	/**
+	 * Returns <code>true</code> if this layer has the visible status enabled.
+	 *
+	 * @return <code>true</code> if visible this layer has the visible status enabled, otherwise <code>false</code>
+	 *
+	 * @see #isVisible()
+	 * @see #setVisible(boolean)
+	 */
+	boolean visibleRequired();
+	/**
+	 * Returns an string with the information of this layer.
+	 *
+	 * @return the string that is to be this component's information
+	 */
+	public String getInfoString();
+	/**
+	 * <p>Returns the writing status of this layer.</p>
+	 * <p>One layer is writable if there is a writing driver for this layer.</p>
+	 *
+	 * @return <code>true</code> if there is a writing driver for this layer; <code>false</code> otherwise
+	 */
+	public boolean isWritable();
+
+	/**
+	 * <p>This method can be used to have a fast cloned layer.</p>
+	 * <p>The implementations should take care of not recreate this layer. Instead of this,
+	 *  is better to use the same source (driver) and <i>deepclone</i> the legend. Exception:
+	 *   the labels aren't <i>deepcloned</i> to avoid memory consumption.</p>
+	 * <p><i>Note</i>: Labels are memory consuming to speed up layers like PostGIS and so on.</p>
+	 *
+	 * @return a layer that is a clonation of this layer
+	 *
+	 * @throws java.lang.Exception any exception produced during the cloning of this layer.
+	 */
+	public FLayer cloneLayer() throws Exception;
+
+	/**
+	 * <p>Returns a new instance of {@link ComposedLayer ComposedLayer}.</p>
+	 *
+	 * <p>This allows make a single draw for a group
+	 * of layers with the same source.</p>
+	 *
+	 * <p>If this operation isn't applicable for this
+	 * kind of layer, this method returns null.</p>
+	 *
+	 * <p>By default this operation is not supported.</p>
+	 *
+	 * @see org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer
+	 *
+	 * @return a new composed layer or <code>null</code> if not supported
+	 */
+	public ComposedLayer  newComposedLayer();
+
+	/**
+	 * Returns the image icon that will be shown in the TOC next to this layer, according its status.
+	 *
+	 * @return the image
+	 */
+	Image getTocStatusImage();
+
+	/**
+	 * <p>Sets the projection to this layer.</p>
+	 *
+	 * @param proj information about the new projection
+	 *
+	 */
+	public void setProjection(IProjection proj);
+	
+	public long getDrawVersion();
+
+        public boolean isTemporary();
+        
+        public void setTemporary(boolean temporary);
+        
+        /**
+         * Do nothing.
+         * 
+         * @param b
+         * @throws org.gvsig.fmap.mapcontext.exceptions.StartEditionLayerException
+	 * @deprecated Editing status is managed internally by layer, cannot be assigned here.
+	 */
+	public void setEditing(boolean b) throws StartEditionLayerException;
+	
+	/**
+         * Alwais return false
+         * @return false
+         * @deprecated see https://redmine.gvsig.net/redmine/projects/gvsig-hyperlink
+	 */
+	public boolean allowLinks();
+
+	/**
+         * Alwais return null.
+         * @return null
+         * @deprecated see https://redmine.gvsig.net/redmine/projects/gvsig-hyperlink
+	 */
+	public AbstractLinkProperties getLinkProperties();
+
+	/**
+         * alwais return null
+         * 
+         * @param point
+         * @param tolerance
+         * @return null
+         * @throws org.gvsig.fmap.dal.exception.ReadException
+         * @deprecated see https://redmine.gvsig.net/redmine/projects/gvsig-hyperlink
+	 */
+	public URI[] getLink(Point2D point, double tolerance) throws ReadException;
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/VectorialSecuencial.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/VectorialSecuencial.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/VectorialSecuencial.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.dal.feature.FeatureSet;
+
+public interface VectorialSecuencial {
+
+    // public int getRowIndexByFID(IFeature FID);
+    public FeatureSet getFeatureIterator(Rectangle2D r, String strEPSG);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/VectorialSecuencial.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/MappingAnnotation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/MappingAnnotation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/MappingAnnotation.java	(revision 42196)
@@ -0,0 +1,139 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * 
+ * @deprecated
+ *
+ */
+public class MappingAnnotation implements Persistent {
+
+	private int columnText = -1;
+	private int columnRotate = -1;
+	private int columnColor = -1;
+	private int columnHeight = -1;
+	private int columnTypeFont = -1;
+	private int columnStyleFont = -1;
+
+	public MappingAnnotation() {
+		
+	}
+	
+	public int getColumnColor() {
+		return columnColor;
+	}
+
+	public void setColumnColor(int columnColor) {
+		this.columnColor = columnColor;
+	}
+
+	public int getColumnHeight() {
+		return columnHeight;
+	}
+
+	public void setColumnHeight(int columnHeight) {
+		this.columnHeight = columnHeight;
+	}
+
+	public int getColumnRotate() {
+		return columnRotate;
+	}
+
+	public void setColumnRotate(int columnRotate) {
+		this.columnRotate = columnRotate;
+	}
+
+	public int getColumnStyleFont() {
+		return columnStyleFont;
+	}
+
+	public void setColumnStyleFont(int columnStyleFont) {
+		this.columnStyleFont = columnStyleFont;
+	}
+
+	public int getColumnText() {
+		return columnText;
+	}
+
+	public void setColumnText(int columnText) {
+		this.columnText = columnText;
+	}
+
+	public int getColumnTypeFont() {
+		return columnTypeFont;
+	}
+
+	public void setColumnTypeFont(int columnTypeFont) {
+		this.columnTypeFont = columnTypeFont;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+
+		columnText = state.getInt("columnText");
+		columnRotate = state.getInt("columnRotate");
+		columnColor = state.getInt("columnColor");
+		columnHeight = state.getInt("columnHeight");
+		columnTypeFont = state.getInt("columnTypeFont");
+		columnStyleFont = state.getInt("columnStyleFont");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+
+		state.set("columnText", columnText);
+		state.set("columnRotate", columnRotate);
+		state.set("columnColor", columnColor);
+		state.set("columnHeight", columnHeight);
+		state.set("columnTypeFont", columnTypeFont);
+		state.set("columnStyleFont", columnStyleFont);
+
+	}
+	
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				MappingAnnotation.class,
+				"MappingAnnotation",
+				"MappingAnnotation Persistence definition",
+				null, 
+				null
+		);
+		definition.addDynFieldInt("columnText").setMandatory(true);
+		definition.addDynFieldInt("columnRotate").setMandatory(true);
+		definition.addDynFieldInt("columnColor").setMandatory(true);
+		definition.addDynFieldInt("columnHeight").setMandatory(true);
+		definition.addDynFieldInt("columnTypeFont").setMandatory(true);
+		definition.addDynFieldInt("columnStyleFont").setMandatory(true);
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/MappingAnnotation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerHidesArea.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerHidesArea.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerHidesArea.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public interface FLayerHidesArea {
+
+	boolean hidesThisArea(Envelope area);
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayerHidesArea.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SingleLayerIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SingleLayerIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SingleLayerIterator.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.ArrayList;
+
+
+/**
+ * @author fjp
+ *
+ * Class to iterate for all layers in FLayers, but assuring not FLayers is returned.
+ * The layer you receive in next method is a "leaf" layer, not grouped. 
+ */
+public class SingleLayerIterator {
+
+	ArrayList singleLayers  =new ArrayList();
+	int i = 0;
+	int subIndex = 0;	
+	public SingleLayerIterator(FLayers layers)
+	{
+		addSubLayer(layers);
+		
+	}
+
+	public boolean hasNext() {
+		return (i < singleLayers.size());
+	}
+
+	public FLayer next() {
+		FLayer aux = (FLayer) singleLayers.get(i); 
+		i++;
+		return aux;
+	}
+	
+	private void addSubLayer(FLayer lyr) {
+		FLayers layers;
+		if (lyr instanceof FLayers)
+		{
+			layers = (FLayers)lyr;
+			for (int i=0; i < layers.getLayersCount(); i++)
+			{
+				addSubLayer(layers.getLayer(i));
+			}			
+		}
+		else
+		{
+			singleLayers.add(lyr);
+		}		
+	}
+	
+	public void rewind()
+	{
+		i=0;
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SingleLayerIterator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionEvent.java	(revision 42196)
@@ -0,0 +1,173 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+
+
+/**
+ * <p>Event produced when a layer is been added or removed, or has been added or
+ *  removed, or its visibility or activation state has changed from a collection of layers.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class LayerCollectionEvent extends FMapEvent {
+	/**
+	 * <p>Identifies this event as a action on a layer that has been added.</p>
+	 */
+    public final static int LAYER_ADDED = 0;
+
+	/**
+	 * <p>Identifies this event as a action on a layer that has been removed.</p>
+	 */
+	public final static int LAYER_REMOVED = 2;
+
+	/**
+	 * <p>Identifies this event as a action on a layer that is being added.</p>
+	 */
+	public final static int LAYER_ADDING = 3;
+
+	/**
+	 * <p>Identifies this event as a action on a layer that is being removed.</p>
+	 */
+	public final static int LAYER_REMOVING = 5;
+	
+	/**
+	 * <p>Identifies this event as a action of change of the activation status of a layer.</p>
+	 */
+	public final static int LAYER_ACTIVATION_CHANGED = 6;
+	
+	/**
+	 * <p>Identifies this event as a action of change of the visibility status of a layer.</p>
+	 */
+	public final static int LAYER_VISIBILITY_CHANGED = 7;
+
+	/**
+	 * <p>Reference to the collection of layers.</p>
+	 */
+	private FLayers layers;
+
+	/**
+	 * <p>Reference to the layer which this layer notifies.</p>
+	 */
+	private FLayer affected;
+
+	/**
+	 * <p>Creates a new layer collection event notifying a "layer added" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * 
+	 * @return a new layer collection event
+	 */
+	public static LayerCollectionEvent createLayerAddedEvent(FLayer lyr){
+		return new LayerCollectionEvent(lyr, LAYER_ADDED);
+	}
+
+	/**
+	 * <p>Creates a new layer collection event notifying a "layer removed" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * 
+	 * @return a new layer collection event
+	 */
+	public static LayerCollectionEvent createLayerRemovedEvent(FLayer lyr){
+		return new LayerCollectionEvent(lyr, LAYER_REMOVED);
+	}
+
+	/**
+	 * <p>Creates a new layer collection event notifying a "layer adding" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * 
+	 * @return a new layer collection event
+	 */
+	public static LayerCollectionEvent createLayerAddingEvent(FLayer lyr){
+		return new LayerCollectionEvent(lyr, LAYER_ADDING);
+	}
+
+	/**
+	 * <p>Creates a new layer collection event notifying a "layer removing" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * 
+	 * @return a new layer collection event
+	 */
+	public static LayerCollectionEvent createLayerRemovingEvent(FLayer lyr){
+		return new LayerCollectionEvent(lyr, LAYER_REMOVING);
+	}
+
+	/**
+	 * <p>Creates a new layer collection event notifying a "layer activation changed" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * 
+	 * @return a new layer collection event
+	 */
+	public static LayerCollectionEvent createLayerActivationEvent(FLayer lyr){
+		return new LayerCollectionEvent(lyr, LAYER_ACTIVATION_CHANGED);
+	}
+
+	/**
+	 * <p>Creates a new layer collection event notifying a "layer visibility changed" action.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * 
+	 * @return a new layer collection event
+	 */
+	public static LayerCollectionEvent createLayerVisibilityEvent(FLayer lyr){
+		return new LayerCollectionEvent(lyr, LAYER_VISIBILITY_CHANGED);
+	}
+	
+	/**
+	 * <p>Creates a new layer collection event of the specified type.</p>
+	 * 
+	 * @param lyr layer affected by the action
+	 * @param eventType type of layer collection event
+	 * 
+	 * @return a new layer collection event
+	 */
+	protected LayerCollectionEvent(FLayer lyr, int eventType) {
+		layers = lyr.getParentLayer();
+		affected = lyr;
+		setEventType(eventType);
+	}
+
+	/**
+	 * <p>Gets the collection of layers which the layer affected belongs.</p>
+	 *
+	 * @return the collection of layers affected
+	 */
+	public FLayers getLayers() {
+		return layers;
+	}
+
+	/**
+	 * <p>Gets the layer that this event references.</p>
+	 *
+	 * @return the layer that this event references
+	 */
+	public FLayer getAffectedLayer() {
+		return affected;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/DifferentVersionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/DifferentVersionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/DifferentVersionException.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+/**
+ * Excepci�n que se lanzara cunado exista un problema de versi�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class DifferentVersionException extends Exception {
+	/**
+	 * Crea una nueva DifferentVersionException
+	 */
+	public DifferentVersionException() {
+		super();
+	}
+
+	/**
+	 * Crea una nueva DifferentVersionException
+	 *
+	 * @param arg0
+	 */
+	public DifferentVersionException(String arg0) {
+		super(arg0);
+	}
+
+	/**
+	 * Crea una nueva DifferentVersionException
+	 *
+	 * @param arg0
+	 * @param arg1
+	 */
+	public DifferentVersionException(String arg0, Throwable arg1) {
+		super(arg0, arg1);
+	}
+
+	/**
+	 * Crea una nueva DifferentVersionException
+	 *
+	 * @param arg0
+	 */
+	public DifferentVersionException(Throwable arg0) {
+		super(arg0);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/DifferentVersionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionListener.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+
+/**
+ * <p>The interface <code>SelectionListener</code> defines the interface for an object that listens
+ *  to changes in a vector layer.</p>
+ */
+public interface SelectionListener {
+	/**
+	 * <p>Called when the selection in a vector layer has changed.</p>
+	 * 
+	 * <p>The <code>SelectionEvent</code> event must be launched invoking
+	 *  the <code>fireSelectionEvents</code> method of the layer.</p>
+	 *
+	 * @param e a selection event on a vector layer
+	 */
+	void selectionChanged(SelectionEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/SelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/order/LayerOrderManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/order/LayerOrderManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/order/LayerOrderManager.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.order;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * 
+ * This manager will decide the position where layers ({@link FLayer})
+ * are added to a layer collection ({@link FLayers})
+ * 
+ * @author gvSIG Team
+ *
+ */
+public interface LayerOrderManager extends Persistent, Cloneable {
+	
+	/**
+	 * <p>Gets the proposed position for the newLayer in the target layer
+	 * collection. The OrderManager will study the arrangement of the
+	 * target layer collection and will decide the right position for
+	 * the new layer, according to its own criterion.</p>
+	 * 
+	 * @param target The target collection to which <code>newLayer</code>
+	 * will be added
+	 * @param newLayer The layer to be inserted in the layer collection
+	 * 
+	 * @return The proposed position for the new layer
+	 */
+	public int getPosition(FLayers target, FLayer newLayer);
+
+	/**
+	 * <p>Gets the name. The name should identify the
+	 * policy followed by this OrderManager to sort the layers.</p>
+	 * 
+	 * @return The name of the OrderManager
+	 */
+	public String getName();
+
+	/**
+	 * <p>Gets the description. The description should be enough to get
+	 * an idea of the policy and features of this OrderManager.</p>
+	 * 
+	 * @return The description of the OrderManager
+	 */
+	public String getDescription();
+
+	/**
+	 * <p>Gets the code used to register this OrderManager.</p>
+	 * 
+	 * @return The code used to register this orderManager 
+	 */
+	public String getCode();
+	
+	public Object clone() throws CloneNotSupportedException;
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawEvent.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.awt.Graphics2D;
+
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+
+
+/**
+ * <p>The <code>LayerDrawEvent</code> class represents an event produced on a layer about a drawing change.</p>
+ * <p>This event can be a notification before or after a {@link FLayer FLayer}, {@link FLayers FLayers}, or
+ *  {@link GraphicLayer GraphicLayer} is drawn.</p>
+ */
+public class LayerDrawEvent extends FMapEvent {
+	/**
+	 * <p>The view port the information for drawing the layer in which this event has been produced.</p>
+	 */
+	ViewPort vp;
+	
+	/**
+	 * <p>Reference to an object for rendering 2D on the Java(tm) platform.</p>
+	 */
+	Graphics2D g;
+	
+	/**
+	 * <p>Reference to the layer where this event has been produced.</p>
+	 */
+	FLayer lyr;
+	
+	/**
+	 * Public constant that identifies the kind of <code>LayerDrawEvent</code> as an event produced
+	 *  before drawing on a {@link FLayer FLayer} or {@link FLayers FLayers}.
+	 */
+	public static final int LAYER_BEFORE_DRAW = 101;
+	
+	/**
+	 * Public constant that identifies the kind of <code>LayerDrawEvent</code> as an event produced
+	 *  after drawing on a {@link FLayer FLayer} or {@link FLayers FLayers}.
+	 */
+	public static final int LAYER_AFTER_DRAW = 102;
+	
+	/**
+	 * Public constant that identifies the kind of <code>LayerDrawEvent</code> as an event produced
+	 *  before drawing on a {@link GraphicLayer GraphicLayer}.
+	 */
+	public static final int GRAPHICLAYER_BEFORE_DRAW = 103;
+	
+	/**
+	 * Public constant that identifies the kind of <code>LayerDrawEvent</code> as an event produced
+	 *  after drawing on a {@link GraphicLayer GraphicLayer}.
+	 */
+	public static final int GRAPHICLAYER_AFTER_DRAW = 104;
+
+	/**
+	 * <p>Creates a new layer draw event with all necessary information.</p>
+	 * 
+	 * @param lyr layer in which the event has been produced
+	 * @param g object for rendering 2D on the Java(tm) platform
+	 * @param vp object with information for drawing the layer in which this event has been produced
+	 * @param eventType identifies the kind of this event: {@linkplain #LAYER_BEFORE_DRAW}, {@linkplain #LAYER_AFTER_DRAW},
+	 *  {@linkplain #GRAPHICLAYER_BEFORE_DRAW} or {@linkplain #GRAPHICLAYER_AFTER_DRAW}.
+	 */
+	public LayerDrawEvent(FLayer lyr, Graphics2D g, ViewPort vp, int eventType) {
+		this.lyr = lyr;
+		this.g = g;
+		this.vp = vp;
+		setEventType(eventType);
+	}
+	
+	/**
+	 * <p>Returns an object for rendering 2-dimensional shapes, text and images on the Java(tm) platform.</p>
+	 * 
+	 * @return object for rendering 2D on the Java(tm) platform
+	 */
+	public Graphics2D getGraphics() {
+		return g;
+	}
+	
+	/**
+	 * <p>Returns the view port the information for drawing the layer in which this event has been produced.</p>
+	 * 
+	 * @return object with information for drawing the layer in which this event has been produced
+	 */
+	public ViewPort getViewPort() {
+		return vp;
+	}
+
+	/**
+	 * <p>Returns a reference to the layer where this event has been produced.</p> 
+	 * 
+	 * @return layer in which this event has been produced
+	 */
+	public FLayer getLayer() {
+		return lyr;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerDrawEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionListener.java	(revision 42196)
@@ -0,0 +1,105 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+
+/**
+ * <p><code>LayerCollectionListener</code> defines listeners for events that can be produced in a
+ *  collection of layers.</p>
+ */
+public interface LayerCollectionListener {
+    /**
+ 	 * <p>Called when a layer has been added or replaced in the internal list of layers.</p>
+     *
+     * @param e a layer collection event object
+     */
+    void layerAdded(LayerCollectionEvent e);
+
+    /**
+ 	 * <p>Called when a layer has been moved in the internal list of layers.</p>
+     *
+     * @param e a layer collection event object
+     */
+    void layerMoved(LayerPositionEvent e);
+
+    /**
+  	 * <p>Called when a layer has been removed from the internal list of layers.</p>
+     *
+     * @param e a layer collection event object
+     */
+    void layerRemoved(LayerCollectionEvent e);
+
+    /**
+ 	 * <p>Called when a layer is just going to be added or replaced in the internal list of layers.</p>
+     *
+     * @param e a layer collection event object
+     *
+     * @throws CancelationException if cancels the adding operation, this exception will have the message
+     *  that user will see.
+     */
+    void layerAdding(LayerCollectionEvent e) throws CancelationException;
+
+    /**
+ 	 * <p>Called when a layer is just going to be moved in the internal list of layers.</p>
+     *
+     * @param e a layer collection event object
+     *
+     * @throws CancelationException if cancels the moving operation, this exception will have the message
+     *  that user will see.
+     */
+    void layerMoving(LayerPositionEvent e) throws CancelationException;
+
+    /**
+ 	 * <p>Called when a layer is just going to be removed from the internal list of layers.</p>
+     *
+     * @param e a layer collection event object
+     *
+     * @throws CancelationException if cancels the removing operation, this exception will have the message
+     *  that user will see.
+     */
+    void layerRemoving(LayerCollectionEvent e) throws CancelationException;
+
+
+    ///**
+    // * <p>Called when the activation state of the collection of layers has changed.</p>
+    // *
+    // * @param e a layer collection event object
+    // *
+    // * @throws CancelationException Si se quiere cancelar la operaci�n. El
+    // *         mensaje de la excepci�n es el que se mostrar� al usuario en su
+    // *         caso
+    // */
+    //  useless. Please, use LayerListener interface instead
+    // void activationChanged(LayerCollectionEvent e) throws CancelationException;
+
+    /**
+ 	 * <p>Called when the visibility of the collection of layers has changed.</p>
+     *
+     * @param e a layer collection event object
+     *
+     * @throws CancelationException if cancels the operation of change visibility, this exception will have the
+     *  message that user will see.
+     */
+    void visibilityChanged(LayerCollectionEvent e) throws CancelationException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerCollectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/IFLayerStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/IFLayerStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/IFLayerStatus.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: IFLayerStatus.java 20989 2008-05-28 11:05:57Z jmvivo $
+* $Log$
+* Revision 1.1  2006-09-21 17:23:39  azabala
+* First version in cvs
+*
+*
+*/
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * <p>According to the particular constitution of a layer, it can be in a set of states,
+ *  some of them simultaneously, that altogether represent its <i>status</i>.</p>
+ *   
+ * <p><code>IFLayerStatus</code> is a "marked" interface (we don't define any methods), that represents
+ *  the common status of all kind of layers.</p>
+ * 
+ * @author azabala
+ */
+public interface IFLayerStatus extends Persistent {
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/IFLayerStatus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/SingleLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/SingleLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/SingleLayer.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+/**
+ * DOCUMENT ME!
+ *
+ */
+public interface SingleLayer extends FLayer {
+	/**
+	 * M�todo que devuelve el DataStore del que saca los datos la capa.
+	 *
+	 * @return DataStore de la capa.
+	 */
+	public DataStore getDataStore();
+
+	/**
+	 * Fija el DataStore asociado a la capa. 
+	 * Este metodo no deberia ser usado desde el API, es un metodo interno que solo
+	 * deberia ser usado por la factoria de capas.
+	 *
+	 * @param dataStore a usar en la capa.
+	 *
+	 * @throws LoadLayerException
+	 * @throws {@link UnsupportedOperationException}
+	 *
+	 * @deprecated no esta permitido cambiar el datastore de ua capa una vez creada esta.
+	 */
+	public void setDataStore(DataStore dataStore) throws LoadLayerException;
+
+    /**
+     * By default null
+     * @return
+     */
+//    public Strategy getStrategy();
+//    public void setStrategy(Strategy s);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/SingleLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitor.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.visitor.Visitor;
+
+public interface LayersVisitor extends Visitor {
+	public void visit(FLayer layer) throws BaseException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/InfoByPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/InfoByPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/InfoByPoint.java	(revision 42196)
@@ -0,0 +1,130 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.task.Cancellable;
+
+
+/**
+ * <p>Interface that must be implemented by layers which support the operation "<i>information by point</i>".</p>
+ *
+ * <p>That operation allows get meta-information from a point and an area around, of a layer.</p>
+ */
+public interface InfoByPoint {
+
+    /**
+     * <p>
+     * Executes a consultation about information of a point on the layer.
+     * </p>
+     * 
+     * <p>
+     * There is an area around the point where will got the information.
+     * </p>
+     * 
+     * @param p
+     *            point where is the consultation
+     * @param tolerance
+     *            permissible margin around the coordinates of the point where
+     *            the method will got the information. Each
+     *            singular implementation of this method would use it in a
+     *            different way. The coordinates also depend on the
+     *            implementation.
+     * @param cancel
+     *            shared object that determines if this layer can continue being
+     *            drawn
+     * 
+     * @return a DynObjectSet. If the InfoByPoint Object is a vector layer it
+     *         should return a FeatureSet.
+     * @throws DataException
+     *             TODO
+     * @throws LoadLayerException
+     *             any exception produced using the driver.
+     *             
+     * @deprecated use instead {@link #getInfo(Point, double)}
+     */
+    public DynObjectSet getInfo(java.awt.Point p, double tolerance, Cancellable cancel)
+        throws LoadLayerException, DataException;
+
+    /**
+     * <p>
+     * Executes a consultation about information of a point on the layer.
+     * </p>
+     * 
+     * <p>
+     * There is an area around the point where will got the information.
+     * </p>
+     * 
+     * @param p
+     *            point where is the consultation
+     * @param tolerance
+     *            permissible margin around the coordinates of the point where
+     *            the method will got the information. Each
+     *            singular implementation of this method would use it in a
+     *            different way. The coordinates also depend on the
+     *            implementation.
+     * @param cancel
+     *            shared object that determines if this layer can continue being
+     *            drawn
+     * 
+     * @param fast
+     *            if true try to reuse objects as much as possible to make the
+     *            object iteration faster. If true, DynObjects got through the
+     *            returned set must not be stored unless cloned.
+     * 
+     * @return a DynObjectSet. If the InfoByPoint Object is a vector layer it
+     *         should return a FeatureSet.
+     * @throws DataException
+     *             TODO
+     * @throws LoadLayerException
+     *             any exception produced using the driver.
+     *             
+     * @deprecated use instead {@link #getInfo(Point, double)}
+     */
+    public DynObjectSet getInfo(java.awt.Point p, double tolerance, Cancellable cancel,
+        boolean fast) throws LoadLayerException, DataException;
+
+    /**
+     * <p>
+     * Executes a consultation about information of a point on the layer.
+     * </p>
+     * 
+     * <p>
+     * There is an area around the point where will got the information.
+     * </p>
+     * 
+     * @param p
+     *            point in map coordinates where is the consultation
+     * @param tolerance
+     *            permissible margin around the coordinates of the point where
+     *            the method will got the information. Each
+     *            singular implementation of this method would use it in a
+     *            different way. The unit are in map coordinates.
+     */            
+    public DynObjectSet getInfo(Point p, double tolerance) throws LoadLayerException, DataException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/InfoByPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/Classifiable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/Classifiable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/Classifiable.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+
+/**
+ * <p>Interface that all layers that can be classifiable, must implement.</p>
+ * <p>The interface <code>Classifiable</code> allows classify a layer in <i>raster</i> or <i>vector</i>,
+ *  and then, generates a legend.</p>
+ */
+public interface Classifiable {
+	/**
+	 * Adds the specified legend listener to receive legend events from the inner legend.
+	 *  If the parameter is null, no exception is thrown and no action is performed.
+	 *
+	 * @param listener the legend listener
+	 *
+	 * @see #removeLegendListener(LegendListener)
+	 */
+	void addLegendListener(LegendListener listener);
+
+	/**
+	 * Removes the specified legend listener so that it no longer receives legend events from the inner
+	 *  legend. This method performs no function, nor does it throw an exception, if the listener specified
+	 *  by the argument was not previously added to the legend. If the parameter is null, no exception is
+	 *  thrown and no action is performed.
+	 *
+	 * @param listener the legend listener
+	 *
+	 * @see #addLegendListener(LegendListener)
+	 */
+	void removeLegendListener(LegendListener listener);
+
+	/**
+	 * Returns the inner legend.
+	 *
+	 * @return Legend.
+	 */
+	public ILegend getLegend();
+
+	/**
+	 * <p>Returns the type of the shape.</p>
+	 * <p>All geometry types are defined in <code>Geometry.TYPES</code>.
+	 *  For getting the equivalent shape of a geometry type, you must use a method like
+	 *  <code>{@linkplain SHPFileWrite#getShapeType()}</code>.</p>
+	 *
+	 * @return the type of this shape.
+	 * @throws ReadException
+	 *
+	 * @see Geometry
+	 * @see Constant
+	 *
+	 * @throws ReadDriverException if the driver fails reading the data.
+	 * 
+	 * @deprecated to be removed in gvSIG 2.1. Use {@link #getGeometryType()} instead.
+	 */
+	public int getShapeType() throws ReadException;
+	
+    /**
+     * Returns the layer's geometry type
+     * 
+     * @return the geometry type
+     * 
+     * @throws ReadException
+     *             if there is an error getting the geometry type
+     */
+    public GeometryType getGeometryType() throws ReadException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/Classifiable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableRaster.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableRaster.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableRaster.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.IRasterLegend;
+
+
+/**
+ * <p>Interface that all raster layers that can be classifiable and can have associated a legend,
+ *  must implement.</p>
+ *
+ * @see Classifiable
+ */
+public interface ClassifiableRaster extends Classifiable {
+	/**
+	 * <p>Sets the layer's legend as a raster legend.</p>
+	 *
+	 * @param r the legend with raster data
+	 *
+	 * @throws DriverException if fails the driver used in this method.
+	 */
+	void setLegend(IRasterLegend r);
+
+	/**
+	 * <p>Returns the type of this shape.</p>
+	 * <p>All geometry types are defined in <code>Geometry.TYPES</code>, and their shape equivalent in <code>FConstant</code>.</p>
+	 *
+	 * @return the type of this shape
+	 *
+	 * @see Geometry
+	 * @see Constant
+	 */
+	int getShapeType();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableRaster.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitable.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.Visitable;
+
+public interface LayersVisitable extends Visitable {
+	public void accept(LayersVisitor visitor) throws BaseException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayersVisitable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ComposedLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ComposedLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ComposedLayer.java	(revision 42196)
@@ -0,0 +1,166 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerDrawEvent;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ * Abstract class for the classes that make able
+ * a single draw for a layers group
+ *
+ * @see  org.gvsig.fmap.mapcontext.layers.FLayer#newComposedLayer()
+ */
+public abstract class ComposedLayer {
+
+	ArrayList pendingLayersEvents= new ArrayList();
+	MapContext mapContext = null;
+
+	public ComposedLayer(){
+
+	}
+
+	public void setMapContext(MapContext mapContext) {
+		this.mapContext = mapContext;
+	}
+
+	/**
+	 * Checks if the layer can be added to this group
+	 *
+	 * @param layer
+	 * @return layer can be added or not
+	 */
+	public abstract boolean canAdd(FLayer layer);
+
+	/**
+	 * Adds the layer to the draw group.
+	 * You have to implements the doAdd(FLayer) method.
+	 *
+	 *
+	 * @see org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer#canAdd(FLayer)
+	 *
+	 * @param layer
+	 * @throws Exception
+	 */
+	public final void add(FLayer layer) throws Exception {
+		if (this.mapContext == null){
+			this.mapContext =layer.getMapContext();
+		}
+        doAdd(layer);
+    	pendingLayersEvents.add(layer);
+	}
+
+	/**
+	 * Draws all the group in one pass
+	 * You have to implements the doDraw method.
+	 *
+	 * @see  org.gvsig.fmap.mapcontext.layers.FLayer#draw(BufferedImage, Graphics2D, ViewPort, Cancellable, double)
+	 */
+    public final void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
+			Cancellable cancel,double scale) throws ReadException {
+    	fireLayerDrawingEvents(g,viewPort, LayerDrawEvent.LAYER_BEFORE_DRAW);
+    	doDraw(image, g, viewPort, cancel, scale);
+    	fireLayerDrawingEvents(g,viewPort, LayerDrawEvent.LAYER_AFTER_DRAW);
+		pendingLayersEvents.clear();
+    }
+
+	/**
+	 * Prints all the group in one pass
+	 * You have to implements the doDraw method.
+	 *
+	 * @see  org.gvsig.fmap.mapcontext.layers.FLayer#draw(BufferedImage, Graphics2D, ViewPort, Cancellable, double)
+	 */
+    public final void print(Graphics2D g, ViewPort viewPort,
+			Cancellable cancel,double scale,PrintAttributes properties) throws ReadException {
+    	doPrint(g, viewPort, cancel, scale,properties);
+		pendingLayersEvents.clear();
+    }
+
+	/**
+	 * Fires the event LayerDrawEvent.LAYER_AFTER_DRAW for every
+	 * layers of the group.
+	 *
+	 *
+	 *  @see org.gvsig.fmap.mapcontext.layers.LayerDrawEvent
+	 *
+	 */
+	private void fireLayerDrawingEvents(Graphics2D g, ViewPort viewPort, int eventType) {
+		Iterator iter = pendingLayersEvents.iterator();
+		LayerDrawEvent afterEvent;
+		FLayer layer = null ;
+		while (iter.hasNext()) {
+			layer =(FLayer)iter.next();
+			afterEvent = new LayerDrawEvent(layer, g, viewPort, eventType);
+			// System.out.println("+++ evento " + afterEvent.getLayer().getName());
+			mapContext.fireLayerDrawingEvent(afterEvent);
+		}
+	}
+
+
+	/**
+	 * Adds the layer to the draw group.
+	 * Specific implementation.
+	 *
+	 * @see org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer#add(FLayer)
+	 *
+	 * @see org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer#canAdd(FLayer)
+	 *
+	 * @param layer
+	 * @throws Exception
+	 */
+	protected abstract void doAdd(FLayer layer) throws Exception ;
+
+	/**
+	 * Draws all the group in one pass.
+	 * Specific implementation.
+	 *
+	 * @see  org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer#draw(BufferedImage, Graphics2D, ViewPort, Cancellable, double)
+	 *
+	 * @see  org.gvsig.fmap.mapcontext.layers.FLayer#draw(BufferedImage, Graphics2D, ViewPort, Cancellable, double)
+	 */
+	protected abstract void doDraw(BufferedImage image, Graphics2D g, ViewPort viewPort,
+			Cancellable cancel,double scale) throws ReadException ;
+
+	/**
+	 * Prints all the group in one pass.
+	 * Specific implementation.
+	 *
+	 * @see  org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer#print(Graphics2D, ViewPort, Cancellable, double)
+	 *
+	 * @see  org.gvsig.fmap.mapcontext.layers.FLayer#print(Graphics2D, ViewPort, Cancellable, double)
+	 */
+	protected abstract void doPrint(Graphics2D g, ViewPort viewPort,
+			Cancellable cancel,double scale,PrintAttributes properties) throws ReadException ;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ComposedLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/IHasImageLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/IHasImageLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/IHasImageLegend.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import java.awt.Image;
+
+public interface IHasImageLegend {
+
+	Image getImageLegend();
+	String getPathImage();
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/IHasImageLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerCollection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerCollection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerCollection.java	(revision 42196)
@@ -0,0 +1,261 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import java.awt.Graphics2D;
+
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+
+
+
+/**
+ * <p>Interface with methods for a collection of layers.</p>
+ */
+public interface LayerCollection extends LayersVisitable {
+
+	/**
+	 * Value used to specify the insertion at the beginning.
+	 */
+	public final static int BEGIN = 0;
+	/**
+	 * Value used to specify the insertion at the end.
+	 */
+	public final static int END = 1;
+	/**
+	 * Value used to specify the insertion before an element.
+	 */
+	public final static int BEFORE = 2;
+	/**
+	 * Value used to specify the insertion after an element.
+	 */
+	public final static int AFTER = 3;
+
+	/**
+	 * <p>Adds a listener of events produced on a collection of layers.</p>
+	 *
+	 * @param listener a <code>LayerCollectionListener</code>
+	 *
+	 * @see #removeLayerCollectionListener(LayerCollectionListener)
+	 */
+	public void addLayerCollectionListener(LayerCollectionListener listener);
+
+	/**
+	 * <p>Removes a listener of events produced on a collection of layers.</p>
+	 *
+	 * @param listener a <code>LayerCollectionListener</code>
+	 *
+	 * @see #addLayerCollectionListener(LayerCollectionListener)
+	 */
+	public void removeLayerCollectionListener(LayerCollectionListener listener);
+
+	/**
+	 * <p>Adds a new layer to this collection.</p>
+	 *
+	 * @param layer the new layer
+	 *
+	 * @throws CancelationException any exception produced during the cancellation of the driver.
+	 * @throws LoadLayerException any exception produced loading the layer.
+	 *
+	 * @see #removeLayer(FLayer)
+	 * @see #removeLayer(int)
+	 * @see #removeLayer(String)
+	 */
+	public void addLayer(FLayer layer) throws CancelationException, LoadLayerException;
+
+	/**
+	 * <p>Adds a new layer to this collection before or after an element if supplied, 
+	 * and if not at the beginning or end of the collection.</p>.</p>
+	 *
+	 * @param layer a FLayer to move
+	 * @param group a LayerCollection in which the layer has to be moved
+	 * @param where the position parameter. The valid values are:<br>
+	 * 	0 = BEGIN (first position)<br>
+	 * 	1 = END (last position)<br>
+	 * 	2 = BEFORE (before target layer)<br>
+	 * 	3 = AFTER (after target layer)<br>
+	 * 
+	 * @param adjoiningLayer a FLayer a layer adjacent to where to insert the layer.
+	 *
+	 * @throws CancelationException any exception produced during the cancellation of the driver.
+	 * @throws LoadLayerException any exception produced loading the layer.
+	 *
+	 * @see #moveTo(FLayer, LayerCollection, int, FLayer)
+	 */
+	public void addLayer(FLayer layer, int where, FLayer adjoiningLayer) throws LayerNotFoundInCollectionException ;
+
+	/**
+	 * <p>Moves a layer of the collection to another position in internal list. It doesn't consider sub-nodes of layers.</p>
+	 *
+	 * @param from origin position
+	 * @param to destination position
+	 *
+	 * @throws CancelationException any exception produced during the cancellation of the driver.
+	 */
+	public void moveTo(int from, int to) throws CancelationException;
+
+	/**
+	 * <p>Removes a layer from this collection.</p>
+	 *
+	 * @param lyr a layer
+	 *
+	 * @throws CancelationException any exception produced during the cancellation of the driver.
+	 *
+	 * @see #removeLayer(int)
+	 * @see #removeLayer(String)
+	 * @see #addLayer(FLayer)
+	 */
+	public void removeLayer(FLayer lyr) throws CancelationException;
+
+	/**
+	 * <p>Removes a layer using its identifier.</p>
+	 *
+	 * @param idLayer layer identifier
+	 *
+	 * @see #removeLayer(FLayer)
+	 * @see #removeLayer(String)
+	 * @see #addLayer(FLayer)
+	 */
+	public void removeLayer(int idLayer);
+
+	/**
+	 * <p>Removes a layer using its name.</p>
+	 *
+	 * @param layerName the name of the layer
+	 *
+	 * @see #removeLayer(FLayer)
+	 * @see #removeLayer(int)
+	 * @see #addLayer(FLayer)
+	 */
+	public void removeLayer(String layerName);
+
+	/**
+	 * <p>Returns an array with all visible layers in this collection.</p>
+	 *
+	 * @return array with first-level visible layer nodes, or <code>null</code> if no there is no layer visible
+	 *
+	 * @see #setAllVisibles(boolean)
+	 */
+	public FLayer[] getVisibles();
+
+	/**
+	 * <p>Returns an array with all active layers in this collection.</p>
+	 *
+	 * @return array with first-level active layer nodes, or <code>null</code> if no there is no layer actived
+	 *
+	 * @see #setAllActives(boolean)
+	 */
+	public FLayer[] getActives();
+
+	/**
+	 * <p>Returns the ith-output directed son (from bottom up) of this collection.</p>
+	 *
+	 * @param index index of the ith-output layer in this collection.
+	 *
+	 * @return a layer
+	 *
+	 * @see #getLayer(String)
+	 */
+	public FLayer getLayer(int index);
+
+	/**
+	 * <p>Returns a first-level layer of this collection, using its name.</p>
+	 *
+	 * @param layerName name of a layer of this collection
+	 *
+	 * @return a layer
+	 *
+	 * @see #getLayer(int)
+	 */
+	public FLayer getLayer(String layerName);
+
+	/**
+	 * <p>Returns the number of layers that are at the first level inside this one.</p>
+	 *
+	 * <p>Doesn't counts the sublayers (of <code>FLayers</code> subnodes).</p>
+	 *
+	 * @return number >= 0 with layers that are at the same first-level
+	 *
+	 * @see #getLayer(int)
+	 * @see #getLayer(String)
+	 */
+	public int getLayersCount();
+
+	/**
+	 * <p>Changes the status of all layers to active or inactive.</p>
+	 *
+	 * @param active a boolean value
+	 *
+	 * @see #getActives()
+	 */
+	public void setAllActives(boolean active);
+
+	/**
+	 * <p>Changes the status of all layers to visible or invisible.</p>
+	 *
+	 * @param visible a boolean value
+	 *
+	 * @see #getVisibles()
+	 */
+	public void setAllVisibles(boolean visible);
+
+
+	public void beginDraw(Graphics2D g, ViewPort viewPort);
+	public void endDraw(Graphics2D g, ViewPort viewPort);
+	
+	/**
+	 * <p>Moves a layer from this collection to another collection 
+	 * before or after an element if supplied, 
+	 * and if not at the beginning or end of the collection.</p>
+	 *
+	 * @param layer a FLayer to move
+	 * @param group a LayerCollection in which the layer has to be moved
+	 * @param where the position parameter. The valid values are:<br>
+	 * 	0 = BEGIN (first position)<br>
+	 * 	1 = END (last position)<br>
+	 * 	2 = BEFORE (before target layer)<br>
+	 * 	3 = AFTER (after target layer)<br>
+	 * 
+	 * @param adjoiningLayer a FLayer a layer adjacent to where to insert the layer.
+	 * @throws LayerNotFoundInCollectionException 
+	 * 
+	 * @see #addLayer(FLayer, int, FLayer)
+	 */
+	public void move(FLayer layer, LayerCollection group, int where, FLayer adjoiningLayer) throws LayerNotFoundInCollectionException;
+
+	/**
+	 * <p>Moves a layer from this collection to the end of another collection.</p>
+	 *
+	 * @param layer a FLayer to move
+	 * @param group a LayerCollection in which the layer has to be moved
+	 * @throws LayerNotFoundInCollectionException 
+	 *
+	 */
+	public void move(FLayer layer, LayerCollection group);
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerCollection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableVectorial.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableVectorial.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableVectorial.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+
+/**
+ * <p>All vector layers that can be classifiable and can have associated a legend, must implement
+ *  <code>ClassifiableVectorial</code>.</p>
+ *
+ * @see Classifiable
+ */
+public interface ClassifiableVectorial extends Classifiable{
+	/**
+	 * <p>Sets the layer's legend as a vector legend.</p>
+	 *
+	 * @param r the legend with vector data
+	 *
+	 * @throws LegendLayerException if fails setting the legend to this layer.
+	 */
+	void setLegend(IVectorLegend r) throws LegendLayerException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/ClassifiableVectorial.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerNotFoundInCollectionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerNotFoundInCollectionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerNotFoundInCollectionException.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.operations;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.exception.BaseException;
+
+public class LayerNotFoundInCollectionException extends BaseException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1936414534310013616L;
+	private final static String MESSAGE_FORMAT = "Layer '%(layer)' not found in collection '%(collection)'.";
+	private final static String MESSAGE_KEY = "_LayerNotFoundInCollectionException";
+	
+	public LayerNotFoundInCollectionException(FLayer layer, LayerCollection collection){
+		super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+		setValue("layer", layer.getName());
+		setValue("collection", collection.toString());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/operations/LayerNotFoundInCollectionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerFactory.java	(revision 42196)
@@ -0,0 +1,213 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+
+/**
+ * Crea un adaptador del driver que se le pasa como par�metro en los m�todos
+ * createLayer. Si hay memoria suficiente se crea un FLyrMemory que pasa todas
+ * las features del driver a memoria
+ */
+public class LayerFactory {
+//	final static private Logger logger = LoggerFactory.getLogger(LayerFactory.class);
+
+	private static LayerFactory instance = null;
+
+
+
+	public static LayerFactory getInstance() {
+		if (instance == null) {
+			instance = new LayerFactory();
+		}
+		return instance;
+	}
+
+	/**
+	 * Guarda registro de que clase de capa debe usar para un determinado Store
+	 *
+	 * como clave usamos el nombre de registro del dataStore
+	 */
+	private Map layersToUseForStore = new HashMap();
+
+	/**
+	 * Registra que clase tiene que usar para un {@link DataStore} determinado. <br>
+	 * Por defecto, si el
+	 *
+	 *
+	 * @param dataStoreName
+	 *            Nombre de registro del {@link DataStore} dentro del
+	 *            {@link DataManager}
+	 * @param layerClassToUse
+	 *            clase que implementa {@link SingleLayer}
+	 * @return
+	 */
+
+	public boolean registerLayerToUseForStore(String dataStoreName,
+			Class layerClassToUse) {
+
+		DataManager dm = DALLocator.getDataManager();
+		DataStoreParameters dsparams;
+		try {
+			dsparams = dm.createStoreParameters(dataStoreName);
+		} catch (InitializeException e) {
+			e.printStackTrace();
+			return false;
+		} catch (ProviderNotRegisteredException e) {
+			e.printStackTrace();
+			return false;
+		}
+		if (!layerClassToUse.isAssignableFrom(SingleLayer.class)) {
+			return false;
+		}
+		this.layersToUseForStore.put(dsparams.getDataStoreName(),
+				layerClassToUse);
+
+		return true;
+	}
+
+	public boolean registerLayerToUseForStore(Class storeClass,
+			Class layerClassToUse) {
+
+//		DataManager dm = DALLocator.getDataManager();
+		if (!DataStore.class.isAssignableFrom(storeClass)) {
+			return false;
+		}
+
+		if (!SingleLayer.class.isAssignableFrom(layerClassToUse)
+				|| !FLayer.class.isAssignableFrom(layerClassToUse)) {
+			return false;
+		}
+		this.layersToUseForStore.put(storeClass,
+				layerClassToUse);
+
+		return true;
+	}
+
+	private Class getLayerClassFor(DataStore store) {
+		Class result = (Class) this.layersToUseForStore.get(store.getName());
+		if (result == null) {
+			Iterator iter = this.layersToUseForStore.entrySet().iterator();
+			Map.Entry entry;
+			Class key;
+			while (iter.hasNext()) {
+				entry = (Entry) iter.next();
+				if (entry.getKey() instanceof Class) {
+					key = (Class) entry.getKey();
+					if (key.isAssignableFrom(store.getClass())) {
+						result = (Class) entry.getValue();
+						break;
+					}
+				}
+			}
+		}
+		return result;
+
+	}
+
+
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.1
+	 * @see {@link MapContextManager}.
+	 */
+	public FLayer createLayer(String layerName,
+			DataStoreParameters storeParameters) throws LoadLayerException {
+		// Se obtiene el driver que lee
+		try{
+			DataManager dataManager=DALLocator.getDataManager();
+			DataStore dataStore=dataManager.createStore(storeParameters);
+			return createLayer(layerName, dataStore);
+		}catch (Exception e) {
+			throw new LoadLayerException(layerName,e);
+		}
+	}
+
+	/**
+	 * @deprecated to be removed in gvSIG 2.1
+	 * @see {@link MapContextManager}.
+	 */
+	public FLayer createLayer(String layerName, DataStore dataStore) throws LoadLayerException{
+		try{	
+			Class layerClass = this.getLayerClassFor(dataStore);
+			if (layerClass == null) {
+				throw new CantRetrieveLayerByStoreException(layerName,dataStore.getName());
+			}
+			FLayer layer;
+			try {
+				layer = (FLayer) layerClass.newInstance();
+			} catch (InstantiationException e) {
+				throw new LoadLayerException(layerName, e);
+			} catch (IllegalAccessException e) {
+				throw new LoadLayerException(layerName, e);
+			}
+
+			layer.setName(layerName);
+			((SingleLayer) layer).setDataStore(dataStore);
+			IProjection proj = (IProjection)dataStore.getDynValue(FeatureStore.METADATA_CRS);
+			if (proj != null) {
+				layer.setProjection(proj);
+			}
+			layer.load();
+			return layer;
+		} catch (Exception e) {
+			throw new LoadLayerException(layerName,e);
+		}
+	}
+	
+	private class CantRetrieveLayerByStoreException extends LoadLayerException {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1442450896900126712L;
+
+		CantRetrieveLayerByStoreException(String layerName, String storeName) {
+			super(
+				"Can't retrieve the class leyer of %(layer) to use for store %(store).",
+				null,
+				"_Cant_retrieve_the_class_leyer_of_XlayerX_to_use_for_store_XstoreX",
+				serialVersionUID
+			);
+			setValue("layer", layerName);
+			setValue("store", storeName);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossesGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossesGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossesGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class CrossesGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+	private String geometryWKT;
+
+	public CrossesGeometryEvaluator(Geometry geometry,
+			IProjection projection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = projection.getAbrev();
+		
+		ICoordTrans ct = null;
+		IProjection fad_proj = fad.getSRS();
+		
+		if (fad_proj != null && !fad_proj.equals(projection)) {
+		    ct = projection.getCT(fad_proj);
+		}
+
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		
+		try {
+			Geometry geom = null;
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom = feature.getDefaultGeometry();
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if ( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(geometryTrans.crosses(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "crosses with geometry";
+	}
+
+	public String getSQL() {
+		if (geometryWKT == null) {
+			try {
+				geometryWKT = geometry.convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+
+		return " ST_crosses(ST_GeomFromText('" + geometryWKT + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossesGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/impl/DefaultGraphicLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/impl/DefaultGraphicLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/impl/DefaultGraphicLayer.java	(revision 42196)
@@ -0,0 +1,354 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial.impl;
+
+import java.util.Iterator;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialUniqueValueLegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default {@link GraphicLayer} implementation. 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultGraphicLayer extends FLyrVect implements GraphicLayer{
+	private static final String DEFAULT = "default";
+	protected static final Logger logger = LoggerFactory.getLogger(DefaultGraphicLayer.class);
+	private static DataManager dataManager = DALLocator.getDataManager();
+	private IVectorialUniqueValueLegend legend = null;
+	
+	private FeatureStore store = null;
+	private long ids = 0;
+
+	private int symbolId = -1;
+	
+	private int featureIdIndex;
+	private int groupIdIndex;
+	private int geomIndex;
+	private int idsymIndex;
+	private int labelIndex;
+	private int tagIndex;
+	private int priorityIndex;
+	
+	public void initialize(IProjection projection) throws ValidateDataParametersException, DataException, LoadLayerException {
+		GeometryManager geomManager = GeometryLocator.getGeometryManager();
+		store = dataManager.createMemoryStore(FEATURE_ATTR_PRIORITY);
+		store.edit();
+
+		EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
+
+		editableFeatureType.add(GraphicLayer.FEATURE_ATTR_GROUPID, DataTypes.STRING);
+
+		EditableFeatureAttributeDescriptor geometryDescriptor = editableFeatureType.add(GraphicLayer.FEATURE_ATTR_GEOMETRY, DataTypes.GEOMETRY);
+		try {
+			geometryDescriptor.setGeometryType(geomManager.getGeometryType(TYPES.GEOMETRY, SUBTYPES.GEOM2D));
+		} catch (Exception e) {
+			logger.info("Can't create/assign geomery type to feature type of GraphicLayer.", e);
+		}
+		geometryDescriptor.setSRS(projection);
+		editableFeatureType.setDefaultGeometryAttributeName(GraphicLayer.FEATURE_ATTR_GEOMETRY);
+
+		editableFeatureType.add(GraphicLayer.FEATURE_ATTR_IDSYMBOL, DataTypes.INT);
+
+		editableFeatureType.add(GraphicLayer.FEATURE_ATTR_LABEL, DataTypes.STRING);
+
+		EditableFeatureAttributeDescriptor featureIdDescriptor = 
+			editableFeatureType.add(GraphicLayer.FEATURE_ATTR_FEATUREID, DataTypes.LONG);
+
+		editableFeatureType.add(GraphicLayer.FEATURE_ATTR_TAG, DataTypes.OBJECT);
+		editableFeatureType.add(GraphicLayer.FEATURE_ATTR_PRIORITY, DataTypes.INT);
+		
+		featureIdDescriptor.setIsPrimaryKey(true);
+		editableFeatureType.setHasOID(true);
+
+		store.update(editableFeatureType);	
+
+		store.finishEditing();
+		
+		FeatureType ftype = store.getDefaultFeatureType();
+		featureIdIndex = ftype.getIndex(GraphicLayer.FEATURE_ATTR_FEATUREID);
+		groupIdIndex = ftype.getIndex(GraphicLayer.FEATURE_ATTR_GROUPID);
+		geomIndex = ftype.getIndex(GraphicLayer.FEATURE_ATTR_GEOMETRY);
+		idsymIndex = ftype.getIndex(GraphicLayer.FEATURE_ATTR_IDSYMBOL);
+		labelIndex = ftype.getIndex(GraphicLayer.FEATURE_ATTR_LABEL);
+		tagIndex = ftype.getIndex(GraphicLayer.FEATURE_ATTR_TAG);
+		priorityIndex = ftype.getIndex(GraphicLayer.FEATURE_ATTR_PRIORITY);
+
+		this.bindToDataStore(store);
+		
+		setName("Graphic Layer");
+	}
+	
+	public void addGraphic(String groupId, Geometry geom, int idsym) {
+		addGraphic(groupId, geom, idsym, null, null, DEFAULT_PRIORITY);
+	}
+
+	public void addGraphic(Geometry geom, int idsym) {
+		addGraphic(DEFAULT, geom, idsym, null, null, DEFAULT_PRIORITY);
+	}
+
+	public void addGraphic(Geometry geom, int idsym, String label) {
+		addGraphic(DEFAULT, geom, idsym, label, null, DEFAULT_PRIORITY);
+	}
+
+	public void addGraphic(String groupId, Geometry geom, int idsym, String label) {
+		addGraphic(groupId, geom, idsym, label, null, DEFAULT_PRIORITY);
+	}
+	
+	public void addGraphic(String groupId, Geometry geom, int idsym, String label,
+			Object tag, int priority) {
+
+		try{
+			store.beginComplexNotification();
+        	// Just in case another thread is going to read from the store
+			synchronized (store) {				
+				if (!store.isEditing()){
+					store.edit(FeatureStore.MODE_APPEND);
+					insertGeometry(groupId, geom, idsym, label, tag, priority);
+					store.finishEditing();
+				} else {
+					insertGeometry(groupId, geom, idsym, label, tag, priority);
+				}
+			}
+			store.endComplexNotification();
+		} catch (DataException e) {
+			logger.error("Error adding a geometry to the graphic layer", e);
+		}
+	}
+
+    private void insertGeometry(String groupId, Geometry geom, int idsym,
+        String label, Object tag, int priority) throws DataException {
+        EditableFeature feature = store.createNewFeature().getEditable();
+        feature.setString(groupIdIndex, groupId);
+        feature.setGeometry(geomIndex, geom);
+        feature.setInt(idsymIndex, idsym);	
+        feature.setString(labelIndex, label);	
+        feature.setLong(featureIdIndex, ids);
+        feature.set(tagIndex, tag);
+        feature.setInt(priorityIndex, priority);
+
+        ids++;
+
+        store.insert(feature);
+    }	
+
+    public void addGraphics(String groupId, Iterator geoms, int idsym) {
+        addGraphics(groupId, geoms, idsym, null, null, DEFAULT_PRIORITY);
+    }
+
+    public void addGraphics(String groupId, Iterator geoms, int idsym,
+        String label) {
+        addGraphics(groupId, geoms, idsym, label, null, DEFAULT_PRIORITY);
+    }
+
+    public void addGraphics(String groupId, Iterator geoms, int idsym,
+        String label, Object tag, int priority) {
+        try {
+        	// Just in case another thread is going to read from the store
+        	synchronized (store) {				
+        		if (!store.isEditing()) {
+        			store.edit(FeatureStore.MODE_APPEND);
+            		store.disableNotifications();
+            		for (; geoms.hasNext();) {
+            			Geometry geom = (Geometry) geoms.next();
+            			insertGeometry(groupId, geom, idsym, label, tag, priority);
+            		}
+            		store.enableNotifications();
+            		store.finishEditing();
+        		} else {
+            		store.disableNotifications();
+            		for (; geoms.hasNext();) {
+            			Geometry geom = (Geometry) geoms.next();
+            			insertGeometry(groupId, geom, idsym, label, tag, priority);
+            		}
+            		store.enableNotifications();
+        		}
+			}
+        } catch (DataException e) {
+            logger.error("Error adding a geometry to the graphic layer", e);
+        }
+    }
+
+	public int addSymbol(ISymbol newSymbol) {
+		symbolId++;
+		legend.addSymbol(new Integer(symbolId), newSymbol);
+		return symbolId;
+	}
+
+	public ISymbol getSymbol(int symbolPos) {
+		return legend.getSymbolByValue(new Integer(symbolPos));		
+	}
+
+	public int getSymbolId(ISymbol symbol) {
+		Object key = legend.getSymbolKey(symbol);
+		return key == null ? -1 : ((Number) key).intValue();
+	}
+
+	public void clearAllGraphics() {
+		DisposableIterator iterator = null;
+		FeatureSet featureSet = null;
+		try{
+			if (!store.isEditing()){
+				store.edit();
+				featureSet = store.getFeatureSet();
+				for (iterator = featureSet.fastIterator(); iterator.hasNext();) {
+					Feature feature = (Feature) iterator.next();
+					featureSet.delete(feature);
+				}
+				store.finishEditing();			
+			} else {
+				featureSet = store.getFeatureSet();
+				for (iterator = featureSet.fastIterator(); iterator.hasNext();) {
+					Feature feature = (Feature) iterator.next();
+					featureSet.delete(feature);
+				}
+			}
+		} catch (DataException e) {
+			logger.error("Error clearing all the geometry of the graphic layer", e);
+		} finally {
+			if (featureSet != null) {
+				featureSet.dispose();
+			}
+			if (iterator != null) {
+				iterator.dispose();
+			}
+		}
+	}
+
+	public int clearAllSymbols() {
+		legend.clear();
+		symbolId = -1;
+		return symbolId;
+	}
+
+	public void removeGraphics(String groupId) {
+		DisposableIterator iterator = null;
+		FeatureSet featureSet = null;
+		try{
+			store.beginComplexNotification();
+			if (!store.isEditing()){
+				store.edit();
+				featureSet = store.getFeatureSet();
+				store.beginEditingGroup(groupId);
+				for (iterator = featureSet.fastIterator(); iterator.hasNext();) {
+					Feature feature = (Feature) iterator.next();
+					if (feature.get(FEATURE_ATTR_GROUPID).equals(groupId)) {
+						featureSet.delete(feature);
+					}
+				}
+				store.endEditingGroup();
+				store.finishEditing();
+			} else {
+				featureSet = store.getFeatureSet();
+				store.beginEditingGroup(groupId);
+				for (iterator = featureSet.fastIterator(); iterator.hasNext();) {
+					Feature feature = (Feature) iterator.next();
+					if (feature.get(FEATURE_ATTR_GROUPID).equals(groupId)) {
+						featureSet.delete(feature);
+					}
+				}
+				store.endEditingGroup();
+			}
+			store.endComplexNotification();
+		} catch (DataException e) {
+			logger.error("Error clearing all the geometry of the graphic layer", e);
+		} finally {
+			if (featureSet != null) {
+				featureSet.dispose();
+			}
+			if (iterator != null) {
+				iterator.dispose();
+			}
+		}
+	}
+
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		if (store != null) {
+			store.dispose();
+			store = null;
+		}
+	}
+
+	public void setLegend(IVectorLegend legend) throws LegendLayerException {
+		if (legend instanceof IVectorialUniqueValueLegend){		
+			super.setLegend(legend);
+			this.legend = (IVectorialUniqueValueLegend)legend;
+			this.legend.setClassifyingFieldNames(new String[]{FEATURE_ATTR_IDSYMBOL});
+		}else{
+			if( this.legend != null ) { // Skip the first assignment, is always bad.
+				logger.warn("The allocation of legend type '"+legend.getClass().getName()+"' is ignored. Required a legend of type IVectorialUniqueValueLegend.");
+			}
+		}
+	}
+	
+    public Envelope getFullEnvelope() throws ReadException {
+        Envelope rAux;
+        try {
+            rAux = getFeatureStore().getEnvelope();
+        } catch (BaseException e) {
+            throw new ReadException(getName(), e);
+        }
+
+        if (rAux == null) {
+        	return null;
+        }
+        
+        ICoordTrans ct = getCoordTrans();
+        if (ct != null) {
+        	rAux = rAux.convert(ct);
+        }
+        return rAux;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/impl/DefaultGraphicLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/DisjointGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/DisjointGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/DisjointGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class DisjointGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+	private String geometryWKT;
+
+	public DisjointGeometryEvaluator(Geometry geometry,
+			IProjection projection,
+			FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = projection.getAbrev();
+		
+		IProjection fad_proj = fad.getSRS();
+		ICoordTrans ct = null;
+		
+		if (fad_proj != null && !fad_proj.equals(projection)) {
+		    ct = projection.getCT(fad_proj);
+		}
+
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		try {
+			Geometry geom = null;
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom = feature.getDefaultGeometry();
+
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if ( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(geometryTrans.disjoint(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "disjoint with geometry";
+	}
+
+	public String getSQL() {
+		if (geometryWKT == null) {
+			try {
+				geometryWKT = geometry.convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+		return " ST_disjoint(ST_GeomFromText('" + geometryWKT + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/DisjointGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+public class IntersectsGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private String geometryWKT = null;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+
+	public IntersectsGeometryEvaluator(Geometry geometry,
+			IProjection projection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = projection.getAbrev();
+		ICoordTrans ct = null;
+		
+		IProjection ipro = fad.getSRS();
+		if (ipro != null && !ipro.equals(projection)) {
+		    ct = projection.getCT(ipro);
+		}
+		
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		try {
+			Geometry geom = null;
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom =feature.getDefaultGeometry();
+
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if( geom==null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(geometryTrans.intersects(geom));
+
+		} catch (Exception e) {
+                    return Boolean.FALSE;
+                    // throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "intersects with geometry";
+	}
+
+	public String getSQL() {
+		if (geometryWKT == null) {
+			try {
+				geometryWKT = geometry.convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+		return " ST_intersects(ST_GeomFromText('" + geometryWKT + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsTimeEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsTimeEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsTimeEvaluator.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.timesupport.Time;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class IntersectsTimeEvaluator extends AbstractEvaluator {
+    private Time time;
+    private String timeAttributeName;
+   
+    public IntersectsTimeEvaluator(Time time, String timeAttributeName) {
+        super();  
+        this.time = time;
+        this.timeAttributeName = timeAttributeName;
+        this.getFieldsInfo().addMatchFieldValue(timeAttributeName, time);
+    }
+
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        Feature feature = ((Feature) data.getContextValue("feature"));
+        Time featureTime = (Time)feature.get(timeAttributeName);
+        if( featureTime==null ) {
+            return Boolean.FALSE;
+        }
+        return new Boolean(time.intersects(featureTime));       
+    }
+
+    public String getName() {       
+        return "intersets with time";
+    }
+
+    public String getSQL() {
+        // TODO add the time filter!!!
+        return super.getSQL();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsTimeEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVectLinkProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVectLinkProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVectLinkProperties.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import java.awt.geom.Point2D;
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.AbstractLinkProperties;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+
+/**
+ * This class extends AbstractLinkProperties and implements the method to get an array of URI
+ * using a point2D and a tolerance. This class extends AstractLinkProperties to add HyperLink
+ * to Vectorial Layer(FLyrVect)
+ * 
+ * @deprecated this functionality has extracted of the core form gvSIG 2.0 
+ */
+
+public class FLyrVectLinkProperties extends AbstractLinkProperties {
+
+    /**
+     * Default Constructor. Costructs a LinkProperties with the necessary information
+     *
+     */
+    public FLyrVectLinkProperties(){
+        setType(0);
+        setField(null);
+        setExt(null);
+    }
+
+    /**
+     * Constructor. Constructs a LinkProperties with the information that receives
+     * @param tipo
+     * @param fieldName
+     * @param extension
+     */
+    public FLyrVectLinkProperties(int tipo, String fieldName, String extension){
+        setType(tipo);
+        setField(fieldName);
+        setExt(extension);
+    }
+
+    /**
+     * Creates an array of URI. With the point and the tolerance makes a query to the layer
+     * and gets the geometries that contains the point with a certain error (tolerance).
+     * For each one of this geometries creates one URI and adds it to the array
+     * @param layer
+     * @param point
+     * @param tolerance
+     * @return Array of URI
+     * @throws ReadException
+     */
+    public URI[] getLink(FLayer layer, Point2D point, double tolerance) throws ReadException{
+    	//Sacado de la clase LinkListener
+		FLyrVect lyrVect = (FLyrVect) layer;
+		FeatureStore fStore = null;
+		FeatureSet fSet=null;
+		DisposableIterator iter = null;
+
+    	try {
+    		fStore = lyrVect.getFeatureStore();
+    		//URI uri[]=null;
+
+    		//Construimos el BitSet (V�ctor con componentes BOOLEAN) con la consulta que
+    		try {
+    			fSet = lyrVect.queryByPoint(point, tolerance, fStore.getDefaultFeatureType());//fStore.getFeatureSet(featureQuery);
+    		} catch (ReadException e) {
+    			return null;
+    		} catch (DataException e) {
+    			return null;
+			}
+
+    		//Si el bitset creado no est� vac�o creamos el vector de URLS correspondientes
+    		//a la consulta que hemos hecho.
+
+    		ArrayList tmpUris=new ArrayList();
+    		String auxext="";
+    		int idField = fStore.getDefaultFeatureType().getIndex(this.getField());
+
+
+
+
+    		//Consigo el identificador del campo pasandole como par�metro el
+    		//nombre del campo del �nlace
+    		if (idField == -1){
+        		throw new ReadException(lyrVect.getName()+": '"+this.getField()+"' not found",new Exception());
+    		}
+    		//Recorremos el BitSet siguiendo el ejmplo de la clase que se
+    		//proporciona en la API
+    		iter = fSet.iterator();
+    		while (iter.hasNext()){
+    			//TODO
+    			//Sacado de la clase LinkPanel, decidir como pintar la URL le
+    			//corresponde a LinkPanel, aqu� solo creamos el vector de URL�s
+    			if (!super.getExt().equals("")){
+    				auxext="."+this.getExt();
+    			}
+    			//Creamos el fichero con el nombre del campo y la extensi�n.
+    			Feature feature = (Feature) iter.next();
+    			String auxField=feature.getString(idField);
+    			URI tmpUri = null;
+    			if(auxField.startsWith("http:/")){
+    				tmpUri= new URI(auxField);
+    			}else{
+    				File file =new File(feature.getString(idField)+auxext);
+    				tmpUri = file.toURI();
+    			}
+    			tmpUris.add(tmpUri);
+    			System.out.println(tmpUri.toString());
+
+
+    		}
+
+    		if (tmpUris.size()==0){
+    			return null;
+    		}
+
+    		// Creo el vector de URL�s con la misma longitud que el bitset
+
+    		return (URI[]) tmpUris.toArray(new URI[0]);
+
+    	} catch (ReadException e) {
+    		throw new ReadException(lyrVect.getName(),e);
+    	} catch (URISyntaxException e) {
+    		throw new ReadException(lyrVect.getName(),e);
+		} catch (DataException e) {
+			throw new ReadException(lyrVect.getName(),e);
+		}finally{
+			if (iter != null) {
+				iter.dispose();
+			}
+			if (fSet != null) {
+				fSet.dispose();
+			}
+		}
+
+    }
+
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				FLyrVectLinkProperties.class,
+				"FLyrVectLinkProperties",
+				"FLyrVectLinkProperties Persistence definition",
+				null, 
+				null
+		);
+		definition.addDynFieldInt("typeLink").setMandatory(true);
+		definition.addDynFieldString("fieldName").setMandatory(true);
+		definition.addDynFieldString("extName").setMandatory(true);
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVectLinkProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/EqualsGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/EqualsGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/EqualsGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class EqualsGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private String geometryWKT = null;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+
+	public EqualsGeometryEvaluator(Geometry geometry,
+			IProjection projection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = projection.getAbrev();
+		
+		IProjection fad_proj = fad.getSRS();
+		ICoordTrans ct = null;
+		
+		if (fad_proj != null && !fad_proj.equals(projection)) {
+		    ct = projection.getCT(fad_proj);
+		}
+
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		try {
+			Geometry geom = null;
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom =feature.getDefaultGeometry();
+
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if ( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(geometryTrans.equals(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "equals with geometry";
+	}
+
+	public String getSQL() {
+		if (geometryWKT == null) {
+			try {
+				geometryWKT = geometry.convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+		return " ST_equals(ST_GeomFromText('" + geometryWKT + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/EqualsGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OverlapsGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OverlapsGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OverlapsGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,105 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class OverlapsGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+
+	public OverlapsGeometryEvaluator(Geometry geometry,
+			IProjection envelopeProjection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = envelopeProjection.getAbrev();
+		
+		IProjection fad_proj = fad.getSRS();
+		ICoordTrans ct = null;
+		
+		if (fad_proj != null && !fad_proj.equals(envelopeProjection)) {
+		    ct = envelopeProjection.getCT(fad_proj);
+		}
+		
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+
+		try {
+			Geometry geom = null;
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom = feature.getDefaultGeometry();
+
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if ( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(geometryTrans.overlaps(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "overlaps with geometry";
+	}
+
+	public String getSQL() {
+		return " ST_overlaps(ST_GeomFromText('" + geometry.toString() + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OverlapsGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVect.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVect.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVect.java	(revision 42196)
@@ -0,0 +1,1185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.ReloadLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.StartEditionLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.LegendException;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.FeatureDrawnNotification;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendClearEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.persistence.exception.PersistenceRuntimeException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Capa b�sica Vectorial.
+ * 
+ */
+
+public class FLyrVect extends FLyrDefault implements VectorLayer,
+    LegendContentsChangedListener, Observer {
+
+    final static private org.slf4j.Logger logger =
+        LoggerFactory.getLogger(FLyrVect.class);
+    private final GeometryManager geomManager =
+        GeometryLocator.getGeometryManager();
+
+    /** Leyenda de la capa vectorial */
+    private IVectorLegend legend;
+    private int typeShape = -1;
+    private FeatureStore featureStore = null;
+    private SpatialCache spatialCache = new SpatialCache();
+
+    /**
+     * An implementation of gvSIG spatial index
+     */
+    // protected ISpatialIndex spatialIndex = null;
+    private IVectorLegend loadLegend = null;
+
+    private boolean isLabeled;
+    protected ILabelingStrategy strategy;
+//	private ReprojectDefaultGeometry reprojectTransform;
+
+    public FLyrVect() {
+        super();
+    }
+    
+	public String getTocImageIcon() {
+	    if (this.isAvailable()) {
+            return MapContextLocator.getMapContextManager().getIconLayer(this.getDataStore());
+	    } else {
+	        /*
+	         * data store can be be null,
+	         * for example, a layer not loaded from persistence
+	         */
+            return "layer-icon-unavailable";
+	    }
+		
+	}
+
+    /**
+     * Devuelve el VectorialAdapater de la capa.
+     * 
+     * @return VectorialAdapter.
+     */
+    public DataStore getDataStore() {
+        if (!this.isAvailable()) {
+            return null;
+        }
+        return featureStore;
+    }
+    
+    /**
+     * Asigna el data-store a la capa.
+     * Esta operacion no se deneria poder hacer desde fuera de la clase.
+     * 
+     * @param dataStore
+     * @throws LoadLayerException
+     * @deprecated use {@link #bindToDataStore(DataStore)}
+     */
+    public void setDataStore(DataStore dataStore) throws LoadLayerException {
+    	bindToDataStore(dataStore);
+    }
+    
+    /**
+     * Enlaza la capa con el DataStore indicado.
+     *  
+     * @param dataStore
+     * @throws LoadLayerException
+     */
+    protected void bindToDataStore(DataStore dataStore) throws LoadLayerException {
+        if (this.featureStore != null && this.featureStore != dataStore) {
+            this.featureStore.deleteObserver(this);
+        }
+
+        featureStore = (FeatureStore) dataStore;
+
+        MapContextManager mapContextManager =
+            MapContextLocator.getMapContextManager();
+        
+        //Set the legend
+        IVectorLegend legend =
+            (IVectorLegend)mapContextManager.getLegend(dataStore);
+
+        if (legend == null) {
+            throw new LegendLayerException(this.getName());
+        }
+
+        this.setLegend(legend);
+
+        //Set the labeling strategy
+        ILabelingStrategy labeler = 
+            (ILabelingStrategy) mapContextManager.getLabelingStrategy(dataStore);
+
+        if (labeler != null) {
+            labeler.setLayer(this);
+            this.setLabelingStrategy(labeler);
+            this.setIsLabeled(true); // TODO: ac� no s'hauria de detectar si t�
+                                     // etiquetes?????
+        }
+
+        this.delegate(dataStore);
+
+        dataStore.addObserver(this);
+
+        ToolsLocator.getDisposableManager().bind(dataStore);
+    }
+
+    public Envelope getFullEnvelope() throws ReadException {
+        Envelope rAux;
+        try {
+            rAux = getFeatureStore().getEnvelope();
+        } catch (BaseException e) {
+            throw new ReadException(getName(), e);
+        }
+
+        // Esto es para cuando se crea una capa nueva con el fullExtent de ancho
+        // y alto 0.
+        if (rAux == null || rAux.isEmpty() || rAux.getMaximum(0) - rAux.getMinimum(0) == 0
+            && rAux.getMaximum(1) - rAux.getMinimum(1) == 0) {
+            try {
+                rAux =
+                    geomManager.createEnvelope(0, 0, 90, 90, SUBTYPES.GEOM2D);
+            } catch (CreateEnvelopeException e) {
+                logger.error("Error creating the envelope", e);
+                e.printStackTrace();
+            }
+        }
+        // Si existe reproyecci�n, reproyectar el extent
+        ICoordTrans ct = getCoordTrans();
+        if (ct != null) {
+        	rAux = rAux.convert(ct);
+        }
+        return rAux;
+
+    }
+
+    /**
+     * Draws using IFeatureIterator. This method will replace the old draw(...)
+     * one.
+     * 
+     * @autor jaume dominguez faus - jaume.dominguez@iver.es
+     * @param image
+     * @param g
+     * @param viewPort
+     * @param cancel
+     * @param scale
+     * @throws ReadDriverException
+     */
+    public void draw(BufferedImage image,
+        Graphics2D g,
+        ViewPort viewPort,
+        Cancellable cancel,
+        double scale) throws ReadException {
+
+        if (legend == null) {
+            return;
+        }
+
+        if (!this.isWithinScale(scale)) {
+            return;
+        }
+        if (cancel.isCanceled()) {
+            return;
+        }
+
+        if (spatialCache.isEnabled()) {
+            spatialCache.clearAll();
+            legend.addDrawingObserver(this);
+        }
+
+        FeatureQuery featureQuery = null;
+        try {
+            FeatureAttributeDescriptor featureAttributeDescriptor =
+                getFeatureStore().getDefaultFeatureType().getDefaultTimeAttribute();
+
+            if ((viewPort.getTime() != null) && (featureAttributeDescriptor != null)){
+                featureQuery = getFeatureStore().createFeatureQuery();
+                IntersectsTimeEvaluator intersectsTimeEvaluator =
+                    new IntersectsTimeEvaluator(viewPort.getTime(), featureAttributeDescriptor.getName());
+                featureQuery.addFilter(intersectsTimeEvaluator);
+            }
+        } catch (DataException e1) {
+            logger.error("Impossible to get the temporal filter", e1);
+        }
+
+        try {
+            
+            long tini = System.currentTimeMillis();
+            
+            legend.draw(image,
+                g,
+                viewPort,
+                cancel,
+                scale,
+                null,
+                getCoordTrans(),
+                getFeatureStore(),
+                featureQuery);
+            
+            logger.debug("Layer " + this.getName() + " drawn in " +
+                (System.currentTimeMillis() - tini) + " milliseconds.");
+
+        } catch (LegendException e) {
+            this.setVisible(false);
+            this.setActive(false);
+            throw new ReadException(getName(), e);
+        } finally {
+            if (spatialCache.isEnabled()) {
+                legend.deleteDrawingObserver(this);
+            }
+        }
+    }
+
+    public void print(Graphics2D g,
+        ViewPort viewPort,
+        Cancellable cancel,
+        double scale,
+        PrintAttributes properties) throws ReadException {
+        if (!this.isWithinScale(scale)) {
+            return;
+        }
+        if (cancel.isCanceled()) {
+            return;
+        }
+
+        try {
+            legend.print(g,
+                viewPort,
+                cancel,
+                scale,
+                null,
+                getCoordTrans(),
+                getFeatureStore(),
+                null,
+                properties);
+
+        } catch (LegendException e) {
+            this.setVisible(false);
+            this.setActive(false);
+            throw new ReadException(getName(), e);
+        }
+    }
+
+    public void setLegend(IVectorLegend legend) throws LegendLayerException {
+        if (this.legend == legend) {
+            return;
+        }
+        if (this.legend != null && this.legend.equals(legend)) {
+            return;
+        }
+        IVectorLegend oldLegend = this.legend;
+        this.legend = legend;
+        if (oldLegend != null) {
+            oldLegend.removeLegendListener(this);
+            oldLegend.deleteDrawingObserver(this);
+        }
+        if (legend != null) {
+            this.legend.addDrawingObserver(this);
+            this.legend.addLegendListener(this);
+        }
+        LegendChangedEvent e =
+            LegendChangedEvent.createLegendChangedEvent(oldLegend, this.legend);
+        e.setLayer(this);
+        updateDrawVersion();
+        callLegendChanged(e);
+    }
+
+    /**
+     * Devuelve la Leyenda de la capa.
+     * 
+     * @return Leyenda.
+     */
+    public ILegend getLegend() {
+        return legend;
+    }
+
+    public int getShapeType() throws ReadException {
+    	if (typeShape == -1) {
+    		FeatureType featureType = null;
+    		try {
+    			if( getDataStore()!=null ){
+    				featureType =
+    					(((FeatureStore) getDataStore()).getDefaultFeatureType());
+    			}
+    		} catch (DataException e) {
+    			throw new ReadException(getName(), e);
+    		}
+    		if( featureType!=null ){
+    			int indexGeom = featureType.getDefaultGeometryAttributeIndex();
+    			typeShape =
+    				featureType.getAttributeDescriptor(indexGeom).getGeometryType();
+    		}
+    	}
+    	return typeShape;
+    }
+
+    /**
+     * Returns the layer's geometry type
+     * 
+     * @return the geometry type
+     * 
+     * @throws ReadException
+     *             if there is an error getting the geometry type
+     */
+    public GeometryType getGeometryType() throws ReadException {
+        FeatureType featureType = null;
+        try {
+            if (getDataStore() != null) {
+                featureType =
+                    (((FeatureStore) getDataStore()).getDefaultFeatureType());
+            }
+        } catch (DataException e) {
+            throw new ReadException(getName(), e);
+        }
+        return featureType == null ? null : featureType
+            .getDefaultGeometryAttribute().getGeomType();
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+
+        FeatureStore featureStore = null;
+
+        if ( !this.isAvailable() ) {
+            logger.info("The '" + this.getName() + "' layer is not available, it will persist not.");
+            return;
+        }
+        
+        try {
+            super.saveToState(state);
+
+            if ( getLegend() != null ) {
+                state.set("legend", getLegend());
+            }
+
+            featureStore = getFeatureStore();
+
+            if ( featureStore != null ) {
+                state.set("featureStore", featureStore);
+            }
+
+            state.set("isLabeled", isLabeled);
+
+            if ( strategy != null ) {
+                state.set("labelingStrategy", strategy);
+            }
+
+            if ( getLinkProperties() != null ) {
+                state.set("linkProperties", getLinkProperties());
+            }
+
+            state.set("typeShape", typeShape);
+        } catch (PersistenceException ex) {
+            logger.warn("Can't persist to state the layer '" + this.getName() + "'.", ex);
+            throw ex;
+        } catch (RuntimeException ex) {
+            logger.warn("Can't persist to state the layer '" + this.getName() + "'.", ex);
+            throw ex;
+        }
+
+    }
+
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+
+        DataStore store = null;
+        IVectorLegend vectorLegend = null;
+        ILabelingStrategy labelingStrategy = null;
+        Boolean isLabeled = Boolean.FALSE;
+
+        try {
+                super.loadFromState(state);
+                store = (DataStore) state.get("featureStore");
+
+            try {
+                this.bindToDataStore(store);
+            } catch (LoadLayerException e) {
+                throw new PersistenceException("Can't bind layer '"+this.getName()+"' to store '"+store.getFullName()+"'.",e);
+            }
+
+
+            vectorLegend = (IVectorLegend) state.get("legend");
+
+            try {
+                this.setLegend(vectorLegend);
+            } catch (LegendLayerException e) {
+                throw new PersistenceException("Can't set vector legend to the layer.", e);
+            }
+
+
+            try {
+                isLabeled = (Boolean) state.get("isLabeled");
+                if ( isLabeled.booleanValue() ) {
+                    labelingStrategy = (ILabelingStrategy) state.get("labelingStrategy");
+                }
+            } catch (Exception ex) {
+                throw new PersistenceException("Can't load labeling strategi from persistent state.",
+                        ex);
+            }
+
+            if ( isLabeled.booleanValue() ) {
+                this.setIsLabeled(true);
+                this.setLabelingStrategy(labelingStrategy);
+            } else {
+                this.setIsLabeled(false);
+                this.setLabelingStrategy(null);
+            }
+
+            typeShape = state.getInt("typeShape");
+
+        } catch (Throwable e) {
+            String storeName = (store == null)? "unknow" : store.getFullName();
+            logger.warn("can't load layer '" + this.getName() + "' (store="+storeName+") from persisted state.", e);
+            this.setAvailable(false);
+            return;
+        }
+
+    }
+
+    /**
+     * Sobreimplementaci�n del m�todo toString para que las bases de datos
+     * identifiquen la capa.
+     * 
+     * @return DOCUMENT ME!
+     */
+    public String toString() {
+        /*
+         * Se usa internamente para que la parte de datos identifique de forma
+         * un�voca las tablas
+         */
+        String ret = super.toString();
+
+        return "layer" + ret.substring(ret.indexOf('@') + 1);
+    }
+
+    public boolean isEditing() {
+        FeatureStore fs = getFeatureStore();
+        if (fs == null) {
+            /*
+             * This happens when layer is not available, for example,
+             * it was not possible to load from persistence
+             */
+            return false;
+        } else {
+            return fs.isEditing();
+        }
+    }
+    
+    
+    public void setEditing(boolean b) throws StartEditionLayerException {
+        
+        try {
+            throw new RuntimeException();
+        } catch (Throwable th) {
+            logger.info("This method is deprecated. ", th);
+        }
+        
+        if (b == super.isEditing()) {
+            return;
+        }
+        
+        super.setEditing(b);
+        FeatureStore fs = getFeatureStore();
+        if (b) {
+            try {
+                fs.edit();
+            } catch (DataException e) {
+                throw new StartEditionLayerException(getName(), e);
+            }
+        }
+        setSpatialCacheEnabled(b);
+        callEditionChanged(LayerEvent.createEditionChangedEvent(this, "edition"));
+    }
+
+
+    /**
+     * @deprecated Use {@link #getSpatialCache()}
+     */
+    public void clearSpatialCache() {
+        spatialCache.clearAll();
+    }
+
+    /**
+     * @deprecated Use {@link #getSpatialCache()}
+     */
+    public boolean isSpatialCacheEnabled() {
+        return spatialCache.isEnabled();
+    }
+
+    /**
+     * @deprecated Use {@link #getSpatialCache()}
+     */
+    public void setSpatialCacheEnabled(boolean spatialCacheEnabled) {
+        spatialCache.setEnabled(spatialCacheEnabled);
+    }
+
+    public SpatialCache getSpatialCache() {
+        return spatialCache;
+    }
+
+    /**
+     * Siempre es un numero mayor de 1000
+     * 
+     * @param maxFeatures
+     */
+    public void setMaxFeaturesInEditionCache(int maxFeatures) {
+        if (maxFeatures > spatialCache.getMaxFeatures()) {
+            spatialCache.setMaxFeatures(maxFeatures);
+        }
+
+    }
+
+    /**
+     * This method returns a boolean that is used by the FPopMenu
+     * to make visible the properties menu or not. It is visible by
+     * default, and if a later don't have to show this menu only
+     * has to override this method.
+     * 
+     * @return
+     *         If the properties menu is visible (or not)
+     */
+    public boolean isPropertiesMenuVisible() {
+        return true;
+    }
+
+    public void reload() throws ReloadLayerException {
+        super.reload();
+        try {
+            getFeatureStore().refresh();
+        } catch (Exception e) {
+            throw new ReloadLayerException(getName(), e);
+        }
+    }
+
+    protected void setLoadSelection(Object xml) {
+        // this.loadSelection = xml;
+    }
+
+    protected void setLoadLegend(IVectorLegend legend) {
+        this.loadLegend = legend;
+    }
+
+    protected void putLoadSelection() {
+        // if (this.loadSelection == null) return;
+        // try {
+        // this.getRecordset().getSelectionSupport().setXMLEntity(this.loadSelection);
+        // } catch (ReadDriverException e) {
+        // throw new XMLException(e);
+        // }
+        // this.loadSelection = null;
+
+    }
+
+    protected void putLoadLegend() throws LegendLayerException {
+        if (this.loadLegend == null) {
+            return;
+        }
+        this.setLegend(this.loadLegend);
+        this.loadLegend = null;
+    }
+
+    protected void cleanLoadOptions() {
+        this.loadLegend = null;
+    }
+
+    public boolean isWritable() {
+        return getFeatureStore().allowWrite();
+    }
+
+    public FLayer cloneLayer() throws Exception {
+        FLyrVect clonedLayer = new FLyrVect();
+        clonedLayer.bindToDataStore(getDataStore());
+        // if (isJoined()) {
+        // clonedLayer.setIsJoined(true);
+        // }
+        clonedLayer.setVisible(isVisible());
+        // clonedLayer.setISpatialIndex(getISpatialIndex());
+        clonedLayer.setName(getName());
+        clonedLayer.setCoordTrans(getCoordTrans());
+
+        clonedLayer.setLegend((IVectorLegend) getLegend().cloneLegend());
+
+        clonedLayer.setIsLabeled(isLabeled());
+        ILabelingStrategy labelingStrategy = getLabelingStrategy();
+        if (labelingStrategy != null) {
+            clonedLayer.setLabelingStrategy(labelingStrategy);
+        }
+
+        return clonedLayer;
+    }
+
+    protected boolean isOnePoint(AffineTransform graphicsTransform,
+        ViewPort viewPort,
+        double dpi,
+        CartographicSupport csSym,
+        Geometry geom,
+        int[] xyCoords) {
+        return isOnePoint(graphicsTransform, viewPort, geom, xyCoords)
+            && csSym.getCartographicSize(viewPort, dpi, geom) <= 1;
+    }
+
+    private boolean isOnePoint(AffineTransform graphicsTransform,
+        ViewPort viewPort,
+        Geometry geom,
+        int[] xyCoords) {
+        boolean onePoint = false;
+        int type = geom.getType();
+        if (type == Geometry.TYPES.NULL) {
+            return false;
+        }
+        if (type != Geometry.TYPES.POINT && type != Geometry.TYPES.MULTIPOINT) {
+
+            Envelope geomBounds = geom.getEnvelope();
+
+            // ICoordTrans ct = getCoordTrans();
+
+            // Se supone que la geometria ya esta reproyectada
+            // if (ct!=null) {
+            // // geomBounds = ct.getInverted().convert(geomBounds);
+            // geomBounds = geomBounds.convert(ct);
+            // }
+
+            double dist1Pixel = viewPort.getDist1pixel();
+
+            onePoint =
+                (geomBounds.getLength(0) <= dist1Pixel && geomBounds.getLength(1) <= dist1Pixel);
+
+            if (onePoint) {
+                // avoid out of range exceptions
+                org.gvsig.fmap.geom.primitive.Point p;
+                try {
+                    p =
+                        geomManager.createPoint(geomBounds.getMinimum(0),
+                            geomBounds.getMinimum(1),
+                            SUBTYPES.GEOM2D);
+                    p.transform(viewPort.getAffineTransform());
+                    p.transform(graphicsTransform);
+                    xyCoords[0] = (int) p.getX();
+                    xyCoords[1] = (int) p.getY();
+                } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+                    logger.error("Error creating a point", e);
+                }
+
+            }
+
+        }
+        return onePoint;
+    }
+
+    public boolean isLabeled() {
+        return isLabeled;
+    }
+
+    public void setIsLabeled(boolean isLabeled) {
+        this.isLabeled = isLabeled;
+    }
+
+    public ILabelingStrategy getLabelingStrategy() {
+        return strategy;
+    }
+
+    public void setLabelingStrategy(ILabelingStrategy strategy) {
+        this.strategy = strategy;
+        if (strategy == null) {
+            return;
+        }
+        strategy.setLayer(this);
+        updateDrawVersion();
+    }
+
+    public void drawLabels(BufferedImage image,
+        Graphics2D g,
+        ViewPort viewPort,
+        Cancellable cancel,
+        double scale,
+        double dpi) throws ReadException {
+        if (strategy != null && isWithinScale(scale)) {
+            strategy.draw(image, g, scale, viewPort, cancel, dpi);
+        }
+    }
+
+    public void printLabels(Graphics2D g,
+        ViewPort viewPort,
+        Cancellable cancel,
+        double scale,
+        PrintAttributes properties) throws ReadException {
+        if (strategy != null) {
+            strategy.print(g, scale, viewPort, cancel, properties);
+        }
+    }
+
+    /**
+     * Return true, because a Vectorial Layer supports HyperLink
+     * 
+     * @deprecated the hiperlink functionaliti is out the layer now
+     */
+    public boolean allowLinks() {
+        return false;
+    }
+
+    public void load() throws LoadLayerException {
+        super.load();
+    }
+
+    public FeatureStore getFeatureStore() {
+        return (FeatureStore) getDataStore();
+    }
+
+    /**
+     * @deprecated use instead {@link #queryByPoint(org.gvsig.fmap.geom.primitive.Point, double, FeatureType)}
+     */
+    public FeatureSet queryByPoint(Point2D mapPoint,
+        double tol,
+        FeatureType featureType) throws DataException {
+        logger.warn("Deprecated use of queryByPoint.");
+        GeometryManager manager = GeometryLocator.getGeometryManager();
+        org.gvsig.fmap.geom.primitive.Point center;
+        try {
+            center =
+                (org.gvsig.fmap.geom.primitive.Point) manager.create(TYPES.POINT,
+                    SUBTYPES.GEOM2D);
+            center.setX(mapPoint.getX());
+            center.setY(mapPoint.getY());
+            Circle circle =
+                (Circle) manager.create(TYPES.CIRCLE, SUBTYPES.GEOM2D);
+            circle.setPoints(center, tol);
+            return queryByGeometry(circle, featureType);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            throw new CreateGeometryException(TYPES.CIRCLE, SUBTYPES.GEOM2D, e);
+        }
+    }
+
+    public FeatureSet queryByPoint(org.gvsig.fmap.geom.primitive.Point point,
+        double tol,
+        FeatureType featureType) throws DataException {
+        GeometryManager manager = GeometryLocator.getGeometryManager();
+        try {
+            Circle circle =
+                (Circle) manager.create(TYPES.CIRCLE, SUBTYPES.GEOM2D);
+            circle.setPoints(point, tol);
+            return queryByGeometry(circle, featureType);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            throw new CreateGeometryException(TYPES.CIRCLE, SUBTYPES.GEOM2D, e);
+        }
+    }
+
+    /**
+     * Input geom must be in the CRS of the view.
+     * 
+     * @param geom
+     * @param featureType
+     * @return
+     * @throws DataException
+     */
+    public FeatureSet queryByGeometry(Geometry geom, FeatureType featureType) throws DataException {
+        FeatureQuery featureQuery = featureStore.createFeatureQuery();
+        String geomName =
+            featureStore.getDefaultFeatureType()
+                .getDefaultGeometryAttributeName();
+        featureQuery.setFeatureType(featureType);
+        
+        Geometry query_geo = this.transformToSourceCRS(geom, true);
+        IProjection query_proj = getMapContext().getProjection();
+        if (this.getCoordTrans() != null) {
+            query_proj = this.getCoordTrans().getPOrig(); 
+        }
+
+        IntersectsGeometryEvaluator iee =
+            new IntersectsGeometryEvaluator(
+                query_geo,
+                query_proj,
+                featureStore.getDefaultFeatureType(),
+                geomName);
+        featureQuery.setFilter(iee);
+        featureQuery.setAttributeNames(null);
+        return getFeatureStore().getFeatureSet(featureQuery);
+
+    }
+
+    /**
+     * It return the {@link FeatureSet} that intersects with the envelope.
+     * @param envelope
+     *          envelope that defines the area for the query.
+     * @param featureType
+     *          only the features with this feature type are used in
+     *          the query.    
+     * @return
+     *          the set of features that intersect with the envelope.
+     * @throws DataException
+     */
+    public FeatureSet queryByEnvelope(Envelope envelope, FeatureType featureType) throws DataException {
+        return queryByEnvelope(envelope, featureType, null);
+    }
+
+    /**
+     * It return the {@link FeatureSet} that intersects with the envelope.
+     * @param envelope
+     *          envelope that defines the area for the query in viewport CRS
+     * @param featureType
+     *          only the features with this feature type are used in
+     *          the query.
+     * @param names
+     *          the feature attributes that have to be checked.
+     * @return
+     *          the set of features that intersect with the envelope.
+     * @throws DataException
+     */
+    public FeatureSet queryByEnvelope(Envelope envelope,
+        FeatureType featureType,
+        String[] names) throws DataException {
+        FeatureQuery featureQuery = featureStore.createFeatureQuery();
+        if (names == null) {
+            featureQuery.setFeatureType(featureType);
+        } else {
+            featureQuery.setAttributeNames(names);
+            featureQuery.setFeatureTypeId(featureType.getId());
+        }
+        String geomName = featureStore.getDefaultFeatureType()
+                .getDefaultGeometryAttributeName();
+        
+        Envelope query_env = fromViewPortCRSToSourceCRS(this, envelope);
+        IProjection query_proj = getMapContext().getProjection();
+        if (this.getCoordTrans() != null) {
+            query_proj = this.getCoordTrans().getPOrig(); 
+        }
+        
+        IntersectsGeometryEvaluator iee =
+            new IntersectsGeometryEvaluator(
+                query_env.getGeometry(), query_proj, 
+                featureStore.getDefaultFeatureType(),
+                geomName);
+        featureQuery.setFilter(iee);
+        return getFeatureStore().getFeatureSet(featureQuery);
+
+    }
+
+    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel) throws LoadLayerException,
+        DataException {
+
+        return getInfo(p, tolerance, cancel, true);
+    }
+
+    public DynObjectSet getInfo(Point p,
+        double tolerance,
+        Cancellable cancel,
+        boolean fast) throws LoadLayerException, DataException {
+        Point2D infop = new Point2D.Double(p.x, p.y);
+        Point2D pReal = this.getMapContext().getViewPort().toMapPoint(infop);
+        return queryByPoint(pReal,
+            tolerance,
+            getFeatureStore().getDefaultFeatureType()).getDynObjectSet(fast);
+    }
+
+    public DynObjectSet getInfo(org.gvsig.fmap.geom.primitive.Point p,
+        double tolerance) throws LoadLayerException, DataException {
+        return queryByPoint(p,tolerance, getFeatureStore().getDefaultFeatureType()).getDynObjectSet(false);
+    }
+    
+    public void legendCleared(LegendClearEvent event) {
+        this.updateDrawVersion();
+        LegendChangedEvent e =
+            LegendChangedEvent.createLegendChangedEvent(legend, legend);
+        this.callLegendChanged(e);
+    }
+
+    public boolean symbolChanged(SymbolLegendEvent e) {
+        this.updateDrawVersion();
+        LegendChangedEvent ev =
+            LegendChangedEvent.createLegendChangedEvent(legend, legend);
+        this.callLegendChanged(ev);
+        return true;
+    }
+
+    public void update(Observable observable, Object notification) {
+        if (observable.equals(this.featureStore)) {
+            if (notification instanceof FeatureStoreNotification) {
+                FeatureStoreNotification event =
+                    (FeatureStoreNotification) notification;
+                if (event.getType() == FeatureStoreNotification.AFTER_DELETE
+                    || event.getType() == FeatureStoreNotification.AFTER_UNDO
+                    || event.getType() == FeatureStoreNotification.AFTER_REDO
+                    || event.getType() == FeatureStoreNotification.AFTER_REFRESH
+                    || event.getType() == FeatureStoreNotification.AFTER_UPDATE
+                    || event.getType() == FeatureStoreNotification.AFTER_UPDATE_TYPE
+                    || event.getType() == FeatureStoreNotification.SELECTION_CHANGE
+                    || event.getType() == FeatureStoreNotification.AFTER_INSERT) {
+                    this.updateDrawVersion();
+                    
+                } else if (event.getType() == FeatureStoreNotification.AFTER_CANCELEDITING) {
+                    
+                    setSpatialCacheEnabled(false);
+                    callEditionChanged(LayerEvent.createEditionChangedEvent(this, "edition"));
+                    this.updateDrawVersion();
+                    
+                } else if (event.getType() == FeatureStoreNotification.AFTER_STARTEDITING) {
+                    
+                    setSpatialCacheEnabled(true);
+                    callEditionChanged(LayerEvent.createEditionChangedEvent(this, "edition"));
+
+                } else if (event.getType() == FeatureStoreNotification.TRANSFORM_CHANGE){
+                    //If a transform has to be applied, try to reload the layer.
+                    try {
+                        reload();
+                    } catch (ReloadLayerException e) {
+                        logger.info("While reloading layer.", e);
+                        this.setAvailable(false);
+                    }
+                } else if (event.getType() == FeatureStoreNotification.RESOURCE_CHANGED) {
+                    this.setAvailable(false);
+                } else 	if (event.getType() == FeatureStoreNotification.AFTER_FINISHEDITING) {
+                    this.setAvailable(true);
+                    setSpatialCacheEnabled(false);
+                    callEditionChanged(LayerEvent.createEditionChangedEvent(this, "edition"));
+                    this.updateDrawVersion();
+                }
+            }
+        }
+        else if (notification instanceof FeatureDrawnNotification
+            && (isEditing() || isLayerToSnap())) {
+            // This code is needed in editing mode
+        	// for all layers involved in snapping
+        	// (including the layer being edited)
+            Geometry geometry =
+                ((FeatureDrawnNotification) notification).getDrawnGeometry();
+            spatialCache.insert(geometry.getEnvelope(), geometry);
+        }
+    }
+
+    private boolean isLayerToSnap() {
+
+        if (this.getMapContext() == null) {
+            /*
+             * This happens with the graphics layer because it has no parent
+             */
+            return false;
+        } else {
+            return this.getMapContext().getLayersToSnap().contains(this);
+        }
+    	
+    	/*
+    	Iterator itersnap = this.getMapContext().getLayersToSnap().iterator();
+    	Object item = null;
+    	while (itersnap.hasNext()) {
+    		item = itersnap.next();
+    		if (item == this) {
+    			return true;
+    		}
+    	}
+		return false;
+		*/
+	}
+
+	/*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.metadata.Metadata#getMetadataChildren()
+     */
+    public Set getMetadataChildren() {
+        Set ret = new TreeSet();
+        ret.add(this.featureStore);
+        return ret;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.metadata.Metadata#getMetadataID()
+     */
+    public Object getMetadataID() throws MetadataException {
+        return "Layer(" + this.getName() + "):"
+            + this.featureStore.getMetadataID();
+    }
+
+    
+
+    public GeometryType getTypeVectorLayer() throws DataException,
+        LocatorException,
+        GeometryTypeNotSupportedException,
+        GeometryTypeNotValidException {
+        // FIXME Esto deberia de pedirse a FType!!!!
+        FeatureStore fs = this.getFeatureStore();
+        FeatureType fType = fs.getDefaultFeatureType();
+        FeatureAttributeDescriptor attr =
+            fType.getAttributeDescriptor(fType.getDefaultGeometryAttributeIndex());
+        GeometryType geomType =
+            GeometryLocator.getGeometryManager()
+                .getGeometryType(attr.getGeometryType(),
+                    attr.getGeometrySubType());
+        return geomType;
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+
+            DynStruct definition
+                    = manager.addDefinition(FLyrVect.class,
+                            "FLyrVect",
+                            "FLyrVect Persistence definition",
+                            null,
+                            null);
+            definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE,
+                    "FLyrDefault");
+
+            definition.addDynFieldObject("legend")
+                    .setClassOfValue(IVectorLegend.class)
+                    .setMandatory(true);
+            definition.addDynFieldObject("featureStore")
+                    .setClassOfValue(FeatureStore.class)
+                    .setMandatory(true);
+            definition.addDynFieldBoolean("isLabeled").setMandatory(true);
+            definition.addDynFieldInt("typeShape").setMandatory(true);
+            definition.addDynFieldObject("labelingStrategy")
+                    .setClassOfValue(ILabelingStrategy.class)
+                    .setMandatory(false);
+
+            return Boolean.TRUE;
+        }
+    }
+
+    protected void doDispose() throws BaseException {
+        dispose(featureStore);
+        spatialCache.clearAll();
+    }
+    
+    /**
+     * Returns envelope in layer's data source CRS
+     * from envelope provided in viewport CRS
+     * 
+     * @param lyr
+     * @param env
+     * @return
+     */
+    public static Envelope fromViewPortCRSToSourceCRS(FLayer lyr, Envelope env) {
+
+        if (lyr == null || env == null) {
+            return null;
+        }
+
+        ICoordTrans ct = lyr.getCoordTrans();
+        if (ct == null) {
+            return env;
+        } else {
+            return env.convert(ct.getInverted());
+        }
+    }
+
+    public Geometry transformToSourceCRS(Geometry geom, boolean clone) {
+        return fromViewPortCRSToSourceCRS(this,geom,clone);
+    }
+    
+    
+    /**
+     * Returns geometry in layer's data source CRS
+     * from geometry provided in viewport CRS
+     * 
+     * @param lyr
+     * @param geo
+     * @param clone
+     * @return
+     * @deprecated use the transformToSourceCRS method of layer.
+     */
+    public static Geometry fromViewPortCRSToSourceCRS(
+        FLayer lyr,
+        Geometry geo,
+        boolean clone) {
+        
+        if (lyr == null || geo == null) {
+            return null;
+        }
+        ICoordTrans ct = lyr.getCoordTrans();
+        Geometry resp = geo;
+        if (clone) {
+            resp = resp.cloneGeometry();
+        }
+        if (ct != null) {
+            resp.reProject(ct.getInverted());
+        }
+        return resp;
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/FLyrVect.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/VectorLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/VectorLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/VectorLayer.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.operations.ClassifiableVectorial;
+import org.gvsig.fmap.mapcontext.layers.operations.InfoByPoint;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
+
+public interface VectorLayer  extends SingleLayer, ILabelable, InfoByPoint,
+ClassifiableVectorial  {
+
+	FeatureStore getFeatureStore();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/VectorLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsEnvelopeEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsEnvelopeEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsEnvelopeEvaluator.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+public class ContainsEnvelopeEvaluator extends AbstractEvaluator {
+
+	private Envelope envelope;
+	private String geomName;
+	private Envelope envelopeTrans;
+	private boolean isDefault;
+	private String srs;
+	private String envelopeWKT;
+
+	public ContainsEnvelopeEvaluator(Envelope envelope,
+			IProjection envelopeProjection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.envelope = envelope;
+		// this.srs = envelopeProjection.getAbrev();
+		// this.projection=CRSFactory.getCRS(fad.getSRS());
+		// this.envelopeProjection=envelopeProjection;
+//		ICoordTrans ct = null;
+//		if (!this.srs.equals(fad.getSRS())) { // FIXME comparaci�n
+//			ct = envelopeProjection.getCT(fad.getSRS());
+//		}
+//		if (ct != null) {
+//			this.envelopeTrans = envelope.convert(ct);
+//		} else {
+			this.envelopeTrans = envelope;
+//		}
+		this.geomName = geomName;
+		this.srs = envelopeProjection.getAbrev();
+		this.getFieldsInfo().addMatchFieldValue(geomName, envelopeTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		Envelope featureEnvelope;
+		if (isDefault) {
+			featureEnvelope = ((Feature) data.getContextValue("feature"))
+					.getDefaultEnvelope();
+
+		} else {
+                    Geometry geom = (Geometry) data.getDataValue(geomName);
+                    if( geom == null ) {
+                        return Boolean.FALSE;
+                    }
+                    featureEnvelope = geom.getEnvelope();
+		}
+		return new Boolean(envelopeTrans.contains(featureEnvelope));
+	}
+
+	public String getName() {
+		return "contains in envelope";
+	}
+
+	public String getSQL() {
+		if (envelopeWKT == null) {
+			try {
+				envelopeWKT = envelope.getGeometry().convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+		return " ST_contains(ST_GeomFromText('" + envelopeWKT + "', '" + srs
+				+ "'), ST_envelope(" + geomName + ")) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsEnvelopeEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/WithinGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/WithinGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/WithinGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class WithinGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+
+	public WithinGeometryEvaluator(Geometry geometry,
+			IProjection envelopeProjection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = envelopeProjection.getAbrev();
+		
+		IProjection fad_proj = fad.getSRS();
+		ICoordTrans ct = null;
+		
+		if (fad_proj != null && !fad_proj.equals(envelopeProjection)) {
+		    ct = envelopeProjection.getCT(fad_proj);
+		}
+		
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		try {
+			Geometry geom = null;
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom =feature.getDefaultGeometry();
+
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if ( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(geometryTrans.within(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "within with geometry";
+	}
+
+	public String getSQL() {
+		return " ST_within(ST_GeomFromText('" + geometry.toString() + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/WithinGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsEnvelopeEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsEnvelopeEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsEnvelopeEvaluator.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+public class IntersectsEnvelopeEvaluator extends AbstractEvaluator {
+
+	private Envelope envelope;
+	private String geomName;
+	private String envelopeWKT = null;
+	private Envelope envelopeTrans;
+	private boolean isDefault;
+	private String srs;
+
+	public IntersectsEnvelopeEvaluator(Envelope envelope,
+			IProjection envelopeProjection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.envelope = envelope;
+		// this.srs = envelopeProjection.getAbrev();
+		// this.projection=CRSFactory.getCRS(fad.getSRS());
+		// this.envelopeProjection=envelopeProjection;
+//		ICoordTrans ct = null;
+//		if (!this.srs.equals(fad.getSRS())) { // FIXME comparaci�n
+//			ct = envelopeProjection.getCT(fad.getSRS());
+//		}
+//		if (ct != null) {
+//			this.envelopeTrans = envelope.convert(ct);
+//		} else {
+			this.envelopeTrans = envelope;
+//		}
+		this.geomName = geomName;
+
+		this.srs = envelopeProjection.getAbrev();
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, envelopeTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		Envelope featureEnvelope;
+		if (isDefault) {
+			featureEnvelope = ((Feature) data.getContextValue("feature"))
+					.getDefaultEnvelope();
+		} else {
+                    Geometry geom = (Geometry) data.getDataValue(geomName);
+                    if( geom == null ) {
+                        return Boolean.FALSE;
+                    }
+                    featureEnvelope = geom.getEnvelope();
+		}
+		return new Boolean(envelopeTrans.intersects(featureEnvelope));
+
+	}
+
+	public String getName() {
+		return "intersects envelope";
+	}
+
+	public String getSQL() {
+
+		if (envelopeWKT == null) {
+			try {
+				envelopeWKT = (String) envelope.getGeometry().convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+
+		return " ST_intersects(ST_GeomFromText('" + envelopeWKT + "', '" + srs
+				+ "'), ST_envelope(" + geomName + ")) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/IntersectsEnvelopeEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OutGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OutGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OutGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class OutGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+
+	public OutGeometryEvaluator(Geometry geometry,
+			IProjection envelopeProjection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = envelopeProjection.getAbrev();
+		
+		IProjection fad_proj = fad.getSRS();
+		ICoordTrans ct = null;
+		
+		if (fad_proj != null && !fad_proj.equals(envelopeProjection)) {
+		    ct = envelopeProjection.getCT(fad_proj);
+		}
+
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addFieldValue(geomName);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		try {
+			Geometry geom = null;
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom = feature.getDefaultGeometry();
+
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if ( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(!geometryTrans.contains(geom) && !geometryTrans.intersects(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "out of geometry";
+	}
+
+	public String getSQL() {
+		return " not ST_contains(ST_GeomFromText('" + geometry.toString() + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/OutGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/TouchesGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/TouchesGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/TouchesGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class TouchesGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+
+	public TouchesGeometryEvaluator(Geometry geometry,
+			IProjection envelopeProjection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = envelopeProjection.getAbrev();
+		
+		IProjection fad_proj = fad.getSRS();
+		ICoordTrans ct = null;
+		
+		if (fad_proj != null && !fad_proj.equals(envelopeProjection)) {
+		    ct = envelopeProjection.getCT(fad_proj);
+		}
+		
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		try {
+			Geometry geom = null; 
+			if (isDefault) {
+				Feature feature = (Feature) data.getContextValue("feature");
+				geom = feature.getDefaultGeometry();
+
+			} else {
+				geom = (Geometry) data.getDataValue(geomName);
+			}
+                        if ( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(geometryTrans.touches(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "touches with geometry";
+	}
+
+	public String getSQL() {
+		return " ST_touches(ST_GeomFromText('" + geometry.toString() + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/TouchesGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossEnvelopeEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossEnvelopeEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossEnvelopeEvaluator.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+
+public class CrossEnvelopeEvaluator extends AbstractEvaluator {
+
+	private Envelope envelope;
+	private String geomName;
+	private Envelope envelopeTrans;
+	private boolean isDefault;
+	private String srs;
+	private String envelopeWKT;
+
+	public CrossEnvelopeEvaluator(Envelope envelope,
+			IProjection envelopeProjection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.envelope = envelope;
+		// this.srs = envelopeProjection.getAbrev();
+		// this.projection=CRSFactory.getCRS(fad.getSRS());
+		// this.envelopeProjection=envelopeProjection;
+//		ICoordTrans ct = null;
+//		if (!this.srs.equals(fad.getSRS())) { // FIXME comparaci�n
+//			ct = envelopeProjection.getCT(fad.getSRS());
+//		}
+//		if (ct != null) {
+//			this.envelopeTrans = envelope.convert(ct);
+//		} else {
+			this.envelopeTrans = envelope;
+//		}
+		this.geomName = geomName;
+		this.srs = envelopeProjection.getAbrev();
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, envelopeTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		if (isDefault) {
+			Feature feature = (Feature) data.getContextValue("feature");
+			Envelope featureEnvelope = feature.getDefaultEnvelope();
+                        if( featureEnvelope == null ) {
+                            return Boolean.FALSE;
+                        }
+			Boolean r = new Boolean(envelopeTrans.intersects(featureEnvelope));
+			return r;
+
+		} else {
+			Geometry geom = (Geometry) data.getDataValue(geomName);
+                        if( geom == null ) {
+                            return Boolean.FALSE;
+                        }
+			return new Boolean(envelopeTrans.intersects(geom.getEnvelope()));
+
+		}
+	}
+
+	public String getName() {
+		return "contains in envelope";
+	}
+
+	public String getSQL() {
+		if (envelopeWKT == null) {
+			try {
+				envelopeWKT = envelope.getGeometry().convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+
+		return " ST_intersects(ST_GeomFromText('" + envelopeWKT + "', '" + srs
+				+ "'), ST_envelope(" + geomName + ")) ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/CrossEnvelopeEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/GraphicLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/GraphicLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/GraphicLayer.java	(revision 42196)
@@ -0,0 +1,229 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+
+/**
+ * Utility layer to be able to draw graphics in a {@link MapContext}. Those
+ * graphics won't be stored and will be rendered on top of all the other
+ * MapContext's layers.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public interface GraphicLayer extends VectorLayer {
+
+	public static final int DEFAULT_PRIORITY = 100;
+
+	public static final String FEATURE_ATTR_FEATUREID = "featureId";
+	public static final String FEATURE_ATTR_GROUPID = "groupId";
+	public static final String FEATURE_ATTR_GEOMETRY = "geom";
+	public static final String FEATURE_ATTR_IDSYMBOL = "idsym";
+	public static final String FEATURE_ATTR_LABEL = "label";
+	public static final String FEATURE_ATTR_TAG = "tag";
+	public static final String FEATURE_ATTR_PRIORITY = "priority";
+
+	/**
+	 * Adds a new {@link ISymbol} to the layer to be used to render the
+	 * {@link Geometry} objects. The symbol will be added to the legend of the
+	 * layer.
+	 * 
+	 * @param newSymbol
+	 *            the {@link ISymbol} to add
+	 * @return an identifier of the symbol to be used when adding geometries
+	 */
+	public int addSymbol(ISymbol newSymbol);
+
+	/**
+	 * Returns the {@link ISymbol} of the layer with the given identifier.
+	 * 
+	 * @param symbolId
+	 *            the symbol identifier
+	 * @return the symbol with the given id or null if there is not any symbol
+	 *         registered with that id
+	 */
+	public ISymbol getSymbol(int symbolId);
+
+	/**
+	 * Returns the identifier of the symbol into the layer.
+	 * 
+	 * @param symbol
+	 *            the symbol to look for
+	 * @return the symbol identifier or -1 if it is not registered into the
+	 *         layer
+	 */
+	public int getSymbolId(ISymbol symbol);
+
+	/**
+	 * @deprecated @see
+	 *             {@link #addGraphic(String, Geometry, int, String, Object, int)
+
+	 */
+	public void addGraphic(Geometry geom, int idsym);
+
+	/**
+	 * @deprecated @see
+	 *             {@link #addGraphic(String, Geometry, int, String, Object, int)
+
+	 */
+	public void addGraphic(Geometry geom, int idsym, String label);
+
+    /**
+     * Adds a new {@link Geometry} to be rendered into the layer.
+     * 
+     * @param groupId
+     *            group identifier. Allows to identify a group of
+     *            {@link Geometry} added to the layer
+     * @param geom
+     *            the {@link Geometry} to add
+     * @param idsym
+     *            the {@link ISymbol} identifier to apply to render the
+     *            {@link Geometry}
+     */
+    public void addGraphic(String groupId, Geometry geom, int idsym);
+
+	/**
+	 * Adds a new {@link Geometry} to be rendered into the layer.
+	 * 
+	 * @param groupId
+	 *            group identifier. Allows to identify a group of
+	 *            {@link Geometry} added to the layer
+	 * @param geom
+	 *            the {@link Geometry} to add
+	 * @param idsym
+	 *            the {@link ISymbol} identifier to apply to render the
+	 *            {@link Geometry}
+	 * @param label
+	 *            the text to show if the {@link ISymbol} is a
+	 *            {@link ITextSymbol}. Set null otherwise.
+	 */
+	public void addGraphic(String groupId, Geometry geom, int idsym,
+			String label);
+
+	/**
+	 * Adds a new {@link Geometry} to be rendered into the layer.
+	 * 
+	 * @param groupId
+	 *            group identifier. Allows to identify a group of
+	 *            {@link Geometry} added to the layer
+	 * @param geom
+	 *            the {@link Geometry} to add
+	 * @param idsym
+	 *            the {@link ISymbol} identifier to apply to render the
+	 *            {@link Geometry}
+	 * @param label
+	 *            the text to show if the {@link ISymbol} is a
+	 *            {@link ITextSymbol}. Set null otherwise.
+	 * @param tag
+	 *            an object to classify, identify or add related information to
+	 *            the {@link Geometry}
+	 * @param priority
+	 *            to apply while rendering the {@link Geometry}. Values with
+	 *            lower priority will be rendered first.
+	 */
+	public void addGraphic(String groupId, Geometry geom, int idsym,
+			String label, Object tag, int priority);
+
+    /**
+     * Adds a new {@link Geometry} to be rendered into the layer.
+     * 
+     * @param groupId
+     *            group identifier. Allows to identify a group of
+     *            {@link Geometry} added to the layer
+     * @param geoms
+     *            the {@link Geometry}s to add
+     * @param idsym
+     *            the {@link ISymbol} identifier to apply to render the
+     *            {@link Geometry}
+     */
+    public void addGraphics(String groupId, Iterator geoms, int idsym);
+
+    /**
+     * Adds a new {@link Geometry} to be rendered into the layer.
+     * 
+     * @param groupId
+     *            group identifier. Allows to identify a group of
+     *            {@link Geometry} added to the layer
+     * @param geoms
+     *            the {@link Geometry}s to add
+     * @param idsym
+     *            the {@link ISymbol} identifier to apply to render the
+     *            {@link Geometry}
+     * @param label
+     *            the text to show if the {@link ISymbol} is a
+     *            {@link ITextSymbol}. Set null otherwise.
+     */
+    public void addGraphics(String groupId, Iterator geoms, int idsym,
+        String label);
+
+    /**
+     * Adds a new {@link Geometry} to be rendered into the layer.
+     * 
+     * @param groupId
+     *            group identifier. Allows to identify a group of
+     *            {@link Geometry} added to the layer
+     * @param geoms
+     *            the {@link Geometry}s to add
+     * @param idsym
+     *            the {@link ISymbol} identifier to apply to render the
+     *            {@link Geometry}
+     * @param label
+     *            the text to show if the {@link ISymbol} is a
+     *            {@link ITextSymbol}. Set null otherwise.
+     * @param tag
+     *            an object to classify, identify or add related information to
+     *            the {@link Geometry}
+     * @param priority
+     *            to apply while rendering the {@link Geometry}. Values with
+     *            lower priority will be rendered first.
+     */
+    public void addGraphics(String groupId, Iterator geoms, int idsym,
+        String label, Object tag, int priority);
+
+	/**
+	 * Removes all previously registered {@link Geometry} objects from the layer
+	 * with the given groupId.
+	 * 
+	 * @param groupId
+	 *            of the geometries to remove
+	 */
+	public void removeGraphics(String groupId);
+
+	/**
+	 * Removes all registered {@link Geometry} objects.
+	 */
+	public void clearAllGraphics();
+
+	/**
+	 * Removes all registered {@link ISymbol} objects.
+	 */
+	public int clearAllSymbols();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/GraphicLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsGeometryEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsGeometryEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsGeometryEvaluator.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+/**
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class ContainsGeometryEvaluator extends AbstractEvaluator {
+
+	private String geomName;
+	private Geometry geometry;
+	private Geometry geometryTrans;
+	private String srs;
+	private boolean isDefault;
+	private String geometryWKT;
+
+	public ContainsGeometryEvaluator(Geometry geometry,
+			IProjection projection, FeatureType featureType,
+			String geomName) {
+		FeatureAttributeDescriptor fad = (FeatureAttributeDescriptor) featureType
+				.get(geomName);
+		this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+				geomName);
+		this.geometry = geometry;
+		this.geometryTrans = geometry.cloneGeometry();
+		this.srs = projection.getAbrev();
+		
+		IProjection fad_proj = fad.getSRS();
+		ICoordTrans ct = null;
+		if (fad_proj != null && !fad_proj.equals(projection)) {
+		    ct = projection.getCT(fad_proj);
+		}
+
+		if (ct != null) {
+			geometryTrans.reProject(ct);
+		}
+		this.geomName = geomName;
+
+		this.getFieldsInfo().addMatchFieldValue(geomName, geometryTrans);
+
+	}
+
+	public Object evaluate(EvaluatorData data) throws EvaluatorException {
+		try {
+                    Geometry geom = null;
+                    if ( isDefault ) {
+                        Feature feature = (Feature) data.getContextValue("feature");
+                        geom = feature.getDefaultGeometry();
+
+                    } else {
+                        geom = (Geometry) data.getDataValue(geomName);
+                    }
+                    if ( geom == null ) {
+                        return Boolean.FALSE;
+                    }
+                    return new Boolean(geometryTrans.contains(geom));
+
+		} catch (Exception e) {
+			throw new EvaluatorException(e);
+		}
+	}
+
+	public String getName() {
+		return "contains with geometry";
+	}
+
+	public String getSQL() {
+		if (geometryWKT == null) {
+			try {
+				geometryWKT = geometry.convertToWKT();
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			} catch (GeometryOperationException e) {
+				throw new DataEvaluatorRuntimeException(e);
+			}
+		}
+
+		return " ST_contains(ST_GeomFromText('" + geometryWKT + "', " + "'"
+				+ srs + "'" + "), " + geomName + ") ";
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ContainsGeometryEvaluator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ReprojectDefaultGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ReprojectDefaultGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ReprojectDefaultGeometry.java	(revision 42196)
@@ -0,0 +1,242 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class ReprojectDefaultGeometry extends AbstractFeatureStoreTransform {
+
+	private IProjection targetSRS;
+	private ICoordTrans ct;
+	private IProjection sourceSRS;
+	private FeatureType orgDefFeatureType;
+	private List orgFeatureTypes;
+
+	public ReprojectDefaultGeometry(){
+		
+	}
+	
+//	public ReprojectDefaultGeometry(IProjection targetSRS){
+//		super("ReprojectDefaultGeometry", "ReprojectDefaultGeometry");
+//		this.targetSRS = targetSRS;
+//		this.ct = null;
+//	}
+//	
+//	public ReprojectDefaultGeometry(ICoordTrans ct){
+//		super("ReprojectDefaultGeometry", "ReprojectDefaultGeometry");
+//		this.ct = ct;
+//	}
+		
+	public IProjection getTargetSRS() {
+		return targetSRS;
+	}
+
+	public void setTargetSRS(IProjection targetSRS) {
+		this.targetSRS = targetSRS;
+	}
+	
+//	public void setCoordTrans(ICoordTrans ct){
+//		this.ct = ct;
+//		if ( getFeatureStore() != null ){
+//			setFeatureStore(getFeatureStore());
+//		}
+//	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#applyTransform(org.gvsig.fmap.dal.feature.Feature, org.gvsig.fmap.dal.feature.EditableFeature)
+	 */
+	public void applyTransform(Feature source, EditableFeature target)
+			throws DataException {
+		FeatureAttributeDescriptor attr;
+		Iterator iter = target.getType().iterator();
+		int defGeomIndex = target.getType().getDefaultGeometryAttributeIndex();
+		while (iter.hasNext()) {
+			attr = (FeatureAttributeDescriptor)iter.next();
+			if (attr.getIndex() == defGeomIndex) {
+				Geometry geom =source.getDefaultGeometry();
+				geom.reProject(ct);
+				target.setDefaultGeometry(geom);
+			} else {
+				target.set(attr.getIndex(), source.get(attr.getName()));
+			}
+
+		}
+
+	}
+
+	public void setFeatureStore(FeatureStore store) {
+		try {
+			orgDefFeatureType = store.getDefaultFeatureType();
+			orgFeatureTypes = store.getFeatureTypes();
+			EditableFeatureType defFType = orgDefFeatureType
+					.getEditable();
+			EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) defFType
+					.getAttributeDescriptor(defFType
+							.getDefaultGeometryAttributeName());
+//			if (ct!=null){
+//				targetSRS = ct.getPDest();
+//				sourceSRS = ct.getPOrig();
+//			} else {
+				sourceSRS = attr.getSRS();
+				ct = sourceSRS.getCT(targetSRS);
+//			}
+			attr.setSRS(this.targetSRS);
+			FeatureType defaultType = defFType.getNotEditableCopy();
+			List types = new ArrayList();
+			Iterator iter = orgFeatureTypes.iterator();
+			FeatureType tmp;
+			while (iter.hasNext()) {
+				tmp = (FeatureType) iter.next();
+				if (tmp.getId().equals(defaultType.getId())) {
+					types.add(defaultType);
+				} else {
+					types.add(tmp);
+				}
+			}
+
+			this.setFeatureTypes(types, defaultType);
+		} catch (DataException e) {
+			// FIXME
+			throw new RuntimeException(e);
+		}
+
+		super.setFeatureStore(store);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#getSourceFeatureTypeFrom(org.gvsig.fmap.dal.feature.FeatureType)
+	 */
+	public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
+		EditableFeatureType result = null;
+		FeatureType tmp;
+		EditableFeatureAttributeDescriptor attr;
+		Iterator iter = orgFeatureTypes.iterator();
+		Iterator iterAttr;
+		while (iter.hasNext()) {
+			tmp = (FeatureType) iter.next();
+			if (tmp.getId().equals(targetFeatureType.getId())) {
+				result = tmp.getEditable();
+				iterAttr = result.iterator();
+				while (iterAttr.hasNext()) {
+					attr = (EditableFeatureAttributeDescriptor) iterAttr.next();
+					if (targetFeatureType.getIndex(attr.getName()) < 0) {
+						iterAttr.remove();
+					}
+				}
+				break;
+			}
+		}
+		return result.getNotEditableCopy();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#isTransformsOriginalValues()
+	 */
+	public boolean isTransformsOriginalValues() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#loadState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void saveToState(PersistentState state) throws PersistenceException {
+		super.saveToState(state);
+		
+		state.set("source_crs", this.sourceSRS);
+		state.set("source_defaultFeatureType", this.orgDefFeatureType);
+		state.set("source_featureTypes", this.orgFeatureTypes);
+		state.set("target_crs", this.targetSRS);
+		state.set("coordtrans", this.ct);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		super.loadFromState(state);
+		this.sourceSRS = (IProjection) state.get("source_crs");
+		this.orgDefFeatureType = (FeatureType) state.get("source_defaultFeatureType");
+		this.orgFeatureTypes = new ArrayList( (List) state.get("source_featureTypes"));
+		this.targetSRS = (IProjection) state.get("target_crs");
+		this.ct = (ICoordTrans) state.get("coordtrans");
+	}
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				ReprojectDefaultGeometry.class,
+				"ReprojectDefaultGeometry",
+				"ReprojectDefaultGeometry Persistence definition",
+				null, 
+				null
+		);
+		definition.extend( manager.getDefinition(AbstractFeatureStoreTransform.class));
+		
+		definition.addDynFieldObject("source_crs")
+			.setClassOfValue(IProjection.class)
+			.setMandatory(true);
+		definition.addDynFieldObject("source_defaultFeatureType")
+			.setClassOfValue(FeatureType.class)
+			.setMandatory(true);
+		definition.addDynFieldList("source_featureTypes")
+			.setClassOfItems(FeatureType.class)
+			.setMandatory(true);
+		definition.addDynFieldObject("target_crs")
+			.setClassOfValue(IProjection.class)
+			.setMandatory(true);
+		definition.addDynFieldObject("coordtrans")
+			.setClassOfValue(ICoordTrans.class)
+			.setMandatory(true);
+            
+            return Boolean.TRUE;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ReprojectDefaultGeometry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LinkSelectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LinkSelectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LinkSelectionListener.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+
+
+/**
+ * Listener que est� pendiente de la selecci�n que se haga sobre la tabla para
+ * poder seleccionar de la tabla linkada los registros oportunos.
+ *
+ * @author Vicente Caballero Navarro
+ * @deprecated TODO Esto tendr�a que estar en appgvSIG en las tablas
+ */
+public class LinkSelectionListener implements SelectionListener {
+//	private SelectableDataSource modelo1;
+//	private SelectableDataSource modelo2;
+	private int index1;
+	private int index2;
+
+	/**
+	 * Crea un nuevo LinkSelectionListener. Donde se pasan como par�metros dos
+	 * SelectableDataSource, el primero de ellos(model1), representa la tabla
+	 * sobre la que al seleccionar alg�n registro buscaremos en el modelo2
+	 * para ver el valor del campo s1 y compararlo con el valor del campo s2 y
+	 * de esta forma seleccionar instantanemente los registros oportunos en la
+	 * tabla al que se representa con el modelo2.
+	 *
+	 * @param model1 SelectableDataSource de la tabla sobre la que se efectua
+	 * 		  el link.
+	 * @param model2 SelectableDataSource de la tabla linkada.
+	 * @param s1 nombre del campo de la tabla donde se efectua el link.
+	 * @param s2 nombre del campo de la tabla linkada.
+	 */
+//	public LinkSelectionListener(SelectableDataSource model1,
+//		SelectableDataSource model2, String s1, String s2) {
+//		modelo1 = model1;
+//		modelo2 = model2;
+//
+//		try {
+//			index1 = modelo1.getFieldIndexByName(s1);
+//			index2 = modelo2.getFieldIndexByName(s2);
+//		} catch (ReadDriverException e) {
+//			e.printStackTrace();
+//		}
+//
+//		//field1 = s1;
+//		//field2 = s2;
+//	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.layers.LegendListener#selectionChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
+	 */
+	public void selectionChanged(SelectionEvent e) {
+//		FBitSet bs1 = modelo1.getSelection();
+//		FBitSet bs2 = new FBitSet(); //(FBitSet)modelo2.getSelection().clone();
+//		HashMap idx = new HashMap(bs1.cardinality());
+//		//int index1 = -1;
+//		//int index2 = -1;
+//
+//		try {
+//			//		Construimos el �ndice
+//			for (int i = bs1.nextSetBit(0); i >= 0;
+//					i = bs1.nextSetBit(i + 1)) {
+//				Value v = modelo1.getFieldValue((long) i, index1);
+//
+//				if (idx.get(v) == null) {
+//					idx.put(v, new Integer(i));
+//				}
+//			}
+//		} catch (ReadDriverException e2) {
+//			e2.printStackTrace();
+//		}
+//
+//		try {
+//			for (int i = 0; i < modelo2.getRowCount(); i++) {
+//				Value v = modelo2.getFieldValue(i, index2);
+//				Integer pi = (Integer) idx.get(v);
+//
+//				if (pi != null) {
+//					bs2.set(i);
+//				}
+//			}
+//		} catch (ReadDriverException e1) {
+//			e1.printStackTrace();
+//		}
+//
+//		// this applies the selection to the linked table
+//		if (modelo1!=modelo2)
+//			modelo2.setSelection(bs2);
+//		//modelo2.fireSelectionEvents();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LinkSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/ExtendedPropertiesSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/ExtendedPropertiesSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/ExtendedPropertiesSupport.java	(revision 42196)
@@ -0,0 +1,70 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.Map;
+
+public interface ExtendedPropertiesSupport {
+
+    /**
+     * <p>
+     * Returns a reference to an object (property) associated to this layer.</p>
+     *
+     * <p>
+     * For example, you can attach a network definition to key "network" and
+     * check
+     * if a layer has a network loaded using
+     * <i>getAssociatedObject("network")</i> and
+     * that it's not null.</p>
+     *
+     * @param key the key associated to the property
+     *
+     * @return <code>null</code> if key is not found
+     *
+     * @see #getExtendedProperties()
+     * @see #setProperty(Object, Object)
+     */
+    public Object getProperty(Object key);
+
+    /**
+     * Inserts an object as a property to this layer.
+     *
+     * @param key the key associated to the property
+     * @param obj the property
+     *
+     * @see #getProperty(Object)
+     * @see #getExtendedProperties()
+     */
+    public void setProperty(Object key, Object obj);
+
+    /**
+     * Returns a hash map with all new properties associated to this layer.
+     *
+     * @return hash table with the added properties
+     *
+     * @see #getProperty(Object)
+     * @see #setProperty(Object, Object)
+     */
+    public Map getExtendedProperties();
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/ExtendedPropertiesHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/ExtendedPropertiesHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/ExtendedPropertiesHelper.java	(revision 42196)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+public class ExtendedPropertiesHelper implements ExtendedPropertiesSupport, Persistent {
+
+    /*
+    Add this to class that implements ExtendedPropertiesSupport
+
+        private ExtendedPropertiesHelper propertiesHelper = new ExtendedPropertiesHelper();
+
+    This methods
+
+        public Object getProperty(Object key) {
+            return this.propertiesHelper.getProperty(key);
+        }
+
+        public void setProperty(Object key, Object obj) {
+            this.propertiesHelper.setProperty(key, obj);
+        }
+
+        public Map getExtendedProperties() {
+            return this.propertiesHelper.getExtendedProperties();
+        }
+
+    To the persistence defnition
+
+        definition.addDynFieldObject("propertiesHelper").setClassOfValue(ExtendedPropertiesHelper.class)
+                        .setMandatory(false);
+
+    To the loadFromState
+
+        this.propertiesHelper = (ExtendedPropertiesHelper) state.get("propertiesHelper");
+
+    And to the saveToState
+
+        state.set("propertiesHelper",propertiesHelper);
+
+    */
+    private Map properties = new HashMap();
+
+    public Object getProperty(Object key) {
+        return properties.get(key);
+    }
+
+    public void setProperty(Object key, Object val) {
+        properties.put(key, val);
+    }
+
+    public Map getExtendedProperties() {
+        return properties;
+    }
+
+    public void setExtendedProperties(Map properties) {
+        this.properties = new HashMap();
+        this.properties.putAll(properties);
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("properties", properties);
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.properties = new HashMap((Map) state.get("properties"));
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            DynStruct definition = manager.addDefinition(
+                    ExtendedPropertiesHelper.class,
+                    "ExtendedPropertiesHelper",
+                    "ExtendedPropertiesHelper Persistence definition",
+                    null,
+                    null
+            );
+            definition.addDynFieldMap("properties").setClassOfItems(Object.class)
+                    .setMandatory(true);
+
+            return Boolean.TRUE;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerEvent.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+
+
+/**
+ * <p>Event produced when changes the visibility, activation, edition status, or the name of a layer.</p>
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class LayerEvent extends FMapEvent {
+	/**
+	 * <p>String that identifies the property that has changed.</p>
+	 */
+	private String property;
+
+	/**
+	 * <p>Layer affected by the action.</p>
+	 */
+	private FLayer source;
+
+	/**
+	 * <p>Identifies this event as a action of change of the visibility status of a layer.</p>
+	 */
+	public static final int VISIBILITY_CHANGED = 0;
+
+	/**
+	 * <p>Identifies this event as a action of change of the activation status of a layer.</p>
+	 */
+	public static final int ACTIVATION_CHANGED = 1;
+	
+	/**
+	 * <p>Identifies this event as a action of a change of the name of a layer.</p>
+	 */
+	public static final int NAME_CHANGED = 2;
+	
+	/**
+	 * <p>Identifies this event as a action of change of the edition status of a layer.</p>
+	 */
+	public static final int EDITION_CHANGED = 3;
+
+	/**
+	 * <p>Identifies this event as a action of change of any property that affects to draw of the layer.</p>
+	 */
+	public static final int DRAW_VALUES_CHANGED = 4;
+
+	/**
+	 * <p>Creates a new layer event notifying a "visibility changed" action.</p>
+	 * 
+	 * @param default1 layer affected by the action
+	 * @param property property that has changed
+	 * 
+	 * @return a new layer event
+	 */
+	public static LayerEvent createVisibilityChangedEvent(FLyrDefault default1, String property){
+		return new LayerEvent(default1, property, VISIBILITY_CHANGED);
+	}
+
+	/**
+	 * <p>Creates a new layer event notifying an "activation changed" action.</p>
+	 * 
+	 * @param default1 layer affected by the action
+	 * @param property property that has changed
+	 * 
+	 * @return a new layer event
+	 */
+	public static LayerEvent createActivationChangedEvent(FLyrDefault default1, String property){
+		return new LayerEvent(default1, property, ACTIVATION_CHANGED);
+	}
+	
+	public static LayerEvent createDrawValuesChangedEvent(FLyrDefault default1, String property){
+		return new LayerEvent(default1, property, DRAW_VALUES_CHANGED);
+	}
+
+	/**
+	 * <p>Creates a new layer event notifying an action of "change of the name of a layer".</p>
+	 * 
+	 * @param default1 layer affected by the action
+	 * @param property property that has changed
+	 * 
+	 * @return a new layer event
+	 */	
+	public static LayerEvent createNameChangedEvent(FLyrDefault default1, String property){
+		return new LayerEvent(default1, property, NAME_CHANGED);
+	}
+	
+	/**
+	 * <p>Creates a new layer event notifying an "edition changed" action.</p>
+	 * 
+	 * @param default1 layer affected by the action
+	 * @param property property that has changed
+	 * 
+	 * @return a new layer event
+	 */
+	public static LayerEvent createEditionChangedEvent(FLyrDefault default1, String property){
+		return new LayerEvent(default1, property, EDITION_CHANGED);
+	}
+	
+	/**
+	 * <p>Creates a new layer event of the specified type.</p>
+	 * 
+	 * @param default1 layer affected by the action
+	 * @param property property that has changed
+	 * @param eventType type of layer collection event
+	 * 
+	 * @return a new layer collection event
+	 */
+	private LayerEvent(FLayer default1, String property, int eventType) {
+		source = default1;
+		this.property = property;
+		setEventType(eventType);
+	}
+
+	/**
+	 * <p>Gets the layer affected.</p>
+	 *
+	 * @return the layer affected
+	 */
+	public FLayer getSource() {
+		return source;
+	}
+
+	/**
+	 * <p>Sets the layer affected.</p>
+	 *
+	 * @param the layer affected
+	 */
+	public void setSource(FLayer source) {
+		this.source = source;
+	}
+
+	/**
+	 * <p>Gets the property that has changed.</p>
+	 *
+	 * @return the property that has changed
+	 */
+	public String getProperty() {
+		return property;
+	}
+
+	/**
+	 * <p>Sets the property that has changed.</p>
+	 *
+	 * @param the property that has changed
+	 */
+	public void setProperty(String property) {
+		this.property = property;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLyrDefault.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLyrDefault.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLyrDefault.java	(revision 42196)
@@ -0,0 +1,1054 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.ReloadLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.StartEditionLayerException;
+import org.gvsig.fmap.mapcontext.impl.DefaultMapContextManager;
+import org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+import org.gvsig.metadata.MetadataContainer;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Implementation of the common characteristics of all layers: visibility, activation, name, ...</p>
+ *
+ * <p>Represents the definition of a basic layer, implementing {@link FLayer FLayer}, and new functionality:
+ * <ul>
+ *  <li>Supports transparency.
+ *  <li>Notification of evens produced using this layer.
+ *  <li>Can have internal virtual layers.
+ *  <li>Can have a text layer.
+ *  <li>Supports an strategy for visit its geometries.
+ *  <li>Can have an image in the <i>TOC (table of contents)</i> associated to the state of this layer.
+ * </ul>
+ * </p>
+ *
+ * <p>Each graphical layer will inherit from this class and adapt to its particular logic and model according
+ *  its nature.</p>
+ *
+ * @see FLayer
+ * @see FLayerStatus
+ */
+public abstract class FLyrDefault extends AbstractDisposable implements FLayer, FLayerHidesArea,
+		LayerListener {
+	/**
+	 * Useful for debug the problems during the implementation.
+	 */
+	final static private org.slf4j.Logger logger = LoggerFactory.getLogger(FLyrDefault.class);
+
+	private LayerChangeSupport layerChangeSupport = new LayerChangeSupport();
+
+        /**
+         * Flag to set the layer as a temporary layer.
+         */
+        private boolean temporary;
+        
+	/**
+	 * Path to the upper layer which this layer belongs.
+	 *
+	 * @see #getParentLayer()
+	 * @see #setParentLayer(FLayers)
+	 */
+	private FLayers parentLayer = null;
+
+	/**
+	 * Transparency level of this layer in the range 0-255. By default 255.
+	 * 0   --> Transparent
+	 * 255 --> Opaque
+	 *
+	 * @see #getTransparency()
+	 * @see #setTransparency(int)
+	 */
+	private int transparency = 255;
+
+	/**
+	 * Coordinate transformation.
+	 *
+	 * @see #getCoordTrans()
+	 * @see #setCoordTrans(ICoordTrans)
+	 */
+	private ICoordTrans ct;
+
+	/**
+	 * Minimum scale, >= 0 or -1 if not defined. By default -1.
+	 *
+	 * @see #getMinScale()
+	 * @see #setMinScale(double)
+	 */
+	private double minScale = -1; // -1 indica que no se usa
+
+	/**
+	 * Maximum scale, >= 0 or -1 if not defined. By default -1.
+	 *
+	 * @see #getMaxScale()
+	 * @see #setMaxScale(double)
+	 */
+	private double maxScale = -1;
+	//	private boolean isInTOC = true;
+
+	/**
+	 * Array list with all listeners registered to this layer.
+	 *
+	 * @see #getLayerListeners()
+	 * @see #removeLayerListener(LayerListener)
+	 * @see #callEditionChanged(LayerEvent)
+	 */
+	protected ArrayList layerListeners = new ArrayList();
+
+	//by default, all is active, visible and avalaible
+	/**
+	 * Status of this layer.
+	 *
+	 * @see #getFLayerStatus()
+	 * @see #setFLayerStatus(FLayerStatus)
+	 * @see #isActive()
+	 * @see #setActive(boolean)
+	 * @see #isVisible()
+	 * @see #setVisible(boolean)
+	 * @see #visibleRequired()
+	 * @see #isEditing()
+	 * @see #setEditing(boolean)
+	 * @see #isInTOC()
+	 * @see #isCachingDrawnLayers()
+	 * @see #setCachingDrawnLayers(boolean)
+	 * @see #isDirty()
+	 * @see #setDirty(boolean)
+	 * @see #isAvailable()
+	 * @see #setAvailable(boolean)
+	 * @see #isOk()
+	 * @see #isWritable()
+	 * @see #getNumErrors()
+	 * @see #getError(int)
+	 * @see #getErrors()
+	 * @see #addError(BaseException)
+	 */
+	private FLayerStatus status = new FLayerStatus();
+	/**
+	 * Image drawn shown in the TOC according the status of this layer.
+	 *
+	 * @see #getTocStatusImage()
+	 * @see #setTocStatusImage(Image)
+	 */
+	private Image tocStatusImage;
+
+	protected MetadataContainer metadataContainer;
+
+	/**
+	 * Draw version of the context. It's used for know when de componend has
+	 * changed any visualization property
+	 *
+	 *  @see getDrawVersion
+	 *  @see updateDrawVersion
+	 */
+	private long drawVersion= 0L;
+
+        
+        private ExtendedPropertiesHelper properties = new ExtendedPropertiesHelper();
+        
+	public FLyrDefault(MetadataContainer metadataContainer) {
+		this.metadataContainer = metadataContainer;
+	}
+
+	public FLyrDefault() {
+		this(MetadataLocator
+			.getMetadataManager()
+				.createMetadataContainer(FLayer.METADATA_DEFINITION_NAME)
+		);
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getProperty(java.lang.Object)
+	 */
+	public Object getProperty(Object key) {
+		return properties.getProperty(key);
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setProperty(java.lang.Object, java.lang.Object)
+	 */
+	public void setProperty(Object key, Object val) {
+		properties.setProperty(key, val);
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getExtendedProperties()
+	 */
+	public Map getExtendedProperties() {
+		return properties.getExtendedProperties();
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setActive(boolean)
+	 */
+	public void setActive(boolean selected) {
+		status.active = selected;
+		callActivationChanged(LayerEvent.createActivationChangedEvent(this,
+		"active"));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isActive()
+	 */
+	public boolean isActive() {
+		return status.active;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setName(java.lang.String)
+	 */
+	public void setName(String name) {
+		this.metadataContainer.setDynValue(METADATA_NAME, name);
+		callNameChanged(LayerEvent.createNameChangedEvent(this, "name"));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getName()
+	 */
+	public String getName() {
+            String name = "(unknow)";
+            try {
+                name = (String) this.metadataContainer.getDynValue(METADATA_NAME);
+            } catch( Throwable th) {
+                logger.warn("Can't retrive the layer name.");
+            }
+            return name;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#load()
+	 */
+    public void load() throws LoadLayerException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        try {
+            manager.loadMetadata(this);
+        } catch (MetadataException e) {
+            throw new LoadLayerException("Can't load metadata.", e);
+        }
+        DefaultMapContextManager mcmanager = (DefaultMapContextManager) MapContextLocator.getMapContextManager();
+        mcmanager.notifyLoadLayer(this);
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setVisible(boolean)
+	 */
+	public void setVisible(boolean visibility) {
+		if (status.visible != visibility){
+			status.visible = visibility;
+			this.updateDrawVersion();
+
+			//			if (this.getMapContext() != null){
+			//				this.getMapContext().clearAllCachingImageDrawnLayers();
+			//			}
+			callVisibilityChanged(LayerEvent.createVisibilityChangedEvent(this,
+			"visible"));
+		}
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isVisible()
+	 */
+	public boolean isVisible() {
+		return status.visible && status.available;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getParentLayer()
+	 */
+	public FLayers getParentLayer() {
+		return parentLayer;
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setParentLayer(com.iver.cit.gvsig.fmap.layers.FLayers)
+	 */
+	public void setParentLayer(FLayers root) {
+		if (this.parentLayer != root){
+			this.parentLayer = root;
+			this.updateDrawVersion();
+		}
+	}
+
+	/**
+	 * <p>Inserts the projection to this layer.</p>
+	 *
+	 * @param proj information about the new projection
+	 *
+	 * @see #isReprojectable()
+	 * @see #reProject(MapControl)
+	 */
+	public void setProjection(IProjection proj) {
+		IProjection curProj = this.getProjection();
+		if (curProj == proj) {
+			return;
+		}
+		if (curProj != null && curProj.equals(proj)){
+			return;
+		}
+		this.updateDrawVersion();
+		this.metadataContainer.setDynValue(METADATA_CRS, proj);
+		// Comprobar que la proyecci�n es la misma que la de FMap
+		// Si no lo es, es una capa que est� reproyectada al vuelo
+		if ((proj != null) && (getMapContext() != null)) {
+			if (proj != getMapContext().getProjection()) {
+				ICoordTrans ct = proj.getCT(getMapContext().getProjection());
+				setCoordTrans(ct);
+				logger.debug("Cambio proyecci�n: FMap con "
+						+ getMapContext().getProjection().getAbrev() + " y capa "
+						+ getName() + " con " + proj.getAbrev());
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.cresques.geo.Projected#getProjection()
+	 */
+	public IProjection getProjection() {
+		return (IProjection) this.metadataContainer.getDynValue(METADATA_CRS);
+	}
+
+	/**
+	 * <p>Changes the projection of this layer.</p>
+	 * <p>This method will be overloaded in each kind of layer, according its specific nature.</p>
+	 *
+	 * @param mapC <code>MapControl</code> instance that will reproject this layer
+	 *
+	 * @return <code>true<code> if the layer has been created calling {@link FLayers#addLayer(FLayer) FLayers#addLayer}. But returns <code>false</code>
+	 *  if the load control logic of this layer is in the reprojection method
+	 *
+	 * @see #isReprojectable()
+	 * @see #setProjection(IProjection)
+	 */
+	public void reProject(ICoordTrans arg0) {
+	}
+
+	/**
+	 * Returns the transparency level of this layer, in the range 0-255 .
+	 *
+	 * @return the transparency level
+	 *
+	 * @see #setTransparency(int)
+	 */
+	public int getTransparency() {
+		return transparency;
+	}
+
+	/**
+	 * Inserts the transparency level for this layer, the range allowed is 0-255 .
+	 *
+	 * @param trans the transparency level
+	 *
+	 * @see #getTransparency()
+	 */
+	public void setTransparency(int trans) {
+		if (this.transparency != trans){
+			transparency = trans;
+			this.updateDrawVersion();
+		}
+	}
+	
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMapContext()
+	 */
+	public MapContext getMapContext() {
+		if (getParentLayer() != null) {
+			return getParentLayer().getMapContext();
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#addLayerListener(com.iver.cit.gvsig.fmap.layers.LayerListener)
+	 */
+	public boolean addLayerListener(LayerListener o) {
+		if (layerListeners.contains(o)) {
+			return false;
+		}
+		return layerListeners.add(o);
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getLayerListeners()
+	 */
+	public LayerListener[] getLayerListeners() {
+		return (LayerListener[])layerListeners.toArray(new LayerListener[0]);
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#removeLayerListener(com.iver.cit.gvsig.fmap.layers.LayerListener)
+	 */
+	public boolean removeLayerListener(LayerListener o) {
+		return layerListeners.remove(o);
+	}
+	/**
+	 *
+	 */
+	private void callDrawValueChanged(LayerEvent e) {
+		for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
+			LayerListener listener = (LayerListener) iter.next();
+
+			listener.drawValueChanged(e);
+		}
+	}
+	/**
+	 * Called by the method {@linkplain #setName(String)}. Notifies all listeners associated to this layer,
+	 *  that its name has changed.
+	 *
+	 * @param e a layer event with the name of the property that has changed
+	 *
+	 * @see #setName(String)
+	 */
+	private void callNameChanged(LayerEvent e) {
+		for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
+			LayerListener listener = (LayerListener) iter.next();
+
+			listener.nameChanged(e);
+		}
+	}
+
+	/**
+	 * Called by the method {@linkplain #setVisible(boolean)}. Notifies all listeners associated to this layer,
+	 *  that its visibility has changed.
+	 *
+	 * @param e a layer event with the name of the property that has changed
+	 *
+	 * @see #setVisible(boolean)
+	 */
+	private void callVisibilityChanged(LayerEvent e) {
+		for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
+			LayerListener listener = (LayerListener) iter.next();
+
+			listener.visibilityChanged(e);
+		}
+	}
+
+	/**
+	 * Called by the method {@linkplain #setActive(boolean)}. Notifies all listeners associated to this layer,
+	 *  that its active state has changed.
+	 *
+	 * @param e a layer event with the name of the property that has changed
+	 *
+	 * @see #setActive(boolean)
+	 */
+	private void callActivationChanged(LayerEvent e) {
+		for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
+			LayerListener listener = (LayerListener) iter.next();
+
+			listener.activationChanged(e);
+		}
+	}
+
+	/**
+	 * Returns the virtual layers associated to this layer.
+	 *
+	 * @return a node with the layers
+	 *
+	 * @see #setVirtualLayers(FLayers)
+	 */
+	//	public FLayers getVirtualLayers() {
+	//		return virtualLayers;
+	//	}
+
+	/**
+	 * Inserts virtual layers to this layer.
+	 *
+	 * @param virtualLayers a node with the layers
+	 *
+	 * @see #getVirtualLayers()
+	 */
+	//	public void setVirtualLayers(FLayers virtualLayers) {
+	//		this.virtualLayers = virtualLayers;
+	//	}
+
+	/**
+	 * Sets transformation coordinates for this layer.
+	 *
+	 * @param ct an object that implements the <code>ICoordTrans</code> interface, and with the transformation coordinates
+	 *
+	 * @see #getCoordTrans()
+	 */
+	public void setCoordTrans(ICoordTrans ct) {
+		if (this.ct == ct){
+			return;
+		}
+		if (this.ct != null && this.ct.equals(ct)){
+			return;
+		}
+		this.ct = ct;
+		this.updateDrawVersion();
+	}
+
+	/**
+	 * Returns the transformation coordinates of this layer.
+	 *
+	 * @return an object that implements the <code>ICoordTrans</code> interface, and with the transformation coordinates
+	 *
+	 * @see #setCoordTrans(ICoordTrans)
+	 */
+	public ICoordTrans getCoordTrans() {
+		return ct;
+	}
+
+	/**
+	 * <p>Method called by {@link FLayers FLayers} to notify this layer that is going to be added.
+	 *  This previous notification is useful for the layers that need do something before being added. For
+	 *  example, the raster needs reopen a file that could have been closed recently.</p>
+	 */
+	public void wakeUp() throws LoadLayerException {
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMinScale()
+	 */
+	public double getMinScale() {
+		return minScale;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMaxScale()
+	 */
+	public double getMaxScale() {
+		return maxScale;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setMinScale(double)
+	 */
+	public void setMinScale(double minScale) {
+		if (this.minScale != minScale){
+			this.minScale = minScale;
+			this.updateDrawVersion();
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setMaxScale(double)
+	 */
+	public void setMaxScale(double maxScale) {
+		if (this.maxScale != maxScale){
+			this.maxScale = maxScale;
+			this.updateDrawVersion();
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isWithinScale(double)
+	 */
+	public boolean isWithinScale(double scale) {
+
+		boolean bVisible = true;
+		if (getMinScale() != -1) {
+			if (scale < getMinScale()){
+				bVisible = false;
+			}
+		}
+		if (getMaxScale() != -1) {
+			if (scale > getMaxScale()) {
+				bVisible = false;
+			}
+		}
+
+		return bVisible;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setEditing(boolean)
+	 */
+	public void setEditing(boolean b) throws StartEditionLayerException {
+		status.editing = b;
+	}
+	/**
+	 * Called by some version of the method {@linkplain #setEditing(boolean)} overwritten. Notifies
+	 *  all listeners associated to this layer, that its edition state has changed.
+	 *
+	 * @param e a layer event with the name of the property that has changed
+	 *
+	 * @see #setEditing(boolean)
+	 */
+	protected void callEditionChanged(LayerEvent e) {
+		for (Iterator iter = layerListeners.iterator(); iter.hasNext();) {
+			LayerListener listener = (LayerListener) iter.next();
+
+			listener.editionChanged(e);
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isEditing()
+	 */
+	public boolean isEditing() {
+		return status.editing;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getTocImageIcon()
+	 */
+	public String getTocImageIcon() {
+		return "layer-icon";
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isInTOC()
+	 */
+	public boolean isInTOC() {
+		return status.inTOC;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setInTOC(boolean)
+	 */
+	public void setInTOC(boolean b) {
+		status.inTOC=b;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isAvailable()
+	 */
+	public boolean isAvailable() {
+		return status.available;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setAvailable(boolean)
+	 */
+	public void setAvailable(boolean available) {
+		if (status.available != available){
+			status.available = available;
+			this.updateDrawVersion();
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#reload()
+	 */
+	public void reload() throws ReloadLayerException {
+		this.setAvailable(true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getFLayerStatus()
+	 */
+	public FLayerStatus getFLayerStatus(){
+		return status.cloneStatus();
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setFLayerStatus(com.iver.cit.gvsig.fmap.layers.FLayerStatus)
+	 */
+	public void setFLayerStatus(FLayerStatus status){
+		if (!this.status.equals(status)){
+			this.status = status;
+			this.updateDrawVersion();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isOk()
+	 */
+
+	public boolean isOk(){
+		return status.isOk();
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getNumErrors()
+	 */
+	public int getNumErrors(){
+		return status.getNumErrors();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getError(int)
+	 */
+	public BaseException getError(int i){
+		return status.getError(i);
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getErrors()
+	 */
+	public List getErrors(){
+		return status.getErrors();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#addError(BaseException)
+	 */
+	public void addError(BaseException exception){
+		status.addLayerError(exception);
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#visibleRequired()
+	 */
+	public boolean visibleRequired() {
+		return status.visible;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getInfoString()
+	 */
+	public String getInfoString() {
+		return null;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isWritable()
+	 */
+	public boolean isWritable() {
+		return status.writable;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#cloneLayer()
+	 */
+	public FLayer cloneLayer() throws Exception {
+		return this;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getTocStatusImage()
+	 */
+	public Image getTocStatusImage() {
+            return tocStatusImage;
+	}
+
+	/**
+	 * Inserts the image icon that will be shown in the TOC next to this layer, according its status.
+	 *
+	 * @param tocStatusImage the image
+	 *
+	 * @see #getTocStatusImage()
+	 */
+	public void setTocStatusImage(Image tocStatusImage) {
+		this.tocStatusImage = tocStatusImage;
+		logger.debug("setTocStatusImage " + tocStatusImage + " sobre capa " + this.getName());
+	}
+
+	public ComposedLayer newComposedLayer() {
+		return null;
+	}
+
+	public boolean allowLinks()
+	{
+		return false;
+	}
+
+	public AbstractLinkProperties getLinkProperties()
+	{
+		return null;
+	}
+
+	public URI[] getLink(Point2D point, double tolerance) throws ReadException{
+		return null;
+	}
+
+	public void addLegendListener(LegendListener listener) {
+		layerChangeSupport.addLayerListener(listener);
+	}
+
+	/**
+	 * @see LayerChangeSupport#callLegendChanged(LegendChangedEvent)
+	 */
+	protected void callLegendChanged(LegendChangedEvent e) {
+		layerChangeSupport.callLegendChanged(e);
+		if(parentLayer != null) {
+			parentLayer.callLegendChanged(e);
+		}
+	}
+
+	/**
+	 * @see LayerChangeSupport#removeLayerListener(LegendListener)
+	 */
+	public void removeLegendListener(LegendListener listener) {
+		layerChangeSupport.removeLayerListener(listener);
+	}
+	public String getClassName() {
+		return this.getClass().getName();
+	}
+
+	public void delegate(DynObject dynObject) {
+		this.metadataContainer.delegate(dynObject);
+	}
+
+	public DynClass getDynClass() {
+		return this.metadataContainer.getDynClass();
+	}
+
+	public Object getDynValue(String name) throws DynFieldNotFoundException {
+		return this.metadataContainer.getDynValue(name);
+	}
+
+	public boolean hasDynValue(String name) {
+		return this.metadataContainer.hasDynValue(name);
+	}
+
+	public void implement(DynClass dynClass) {
+		this.metadataContainer.implement(dynClass);
+	}
+
+	public Object invokeDynMethod(int code, DynObject context)
+	throws DynMethodException {
+		return this.metadataContainer.invokeDynMethod(this, code, context);
+	}
+
+	public Object invokeDynMethod(String name, DynObject context)
+	throws DynMethodException {
+		return this.metadataContainer.invokeDynMethod(this, name, context);
+	}
+
+	public void setDynValue(String name, Object value)
+	throws DynFieldNotFoundException {
+		this.metadataContainer.setDynValue(name, value);
+	}
+
+	public long getDrawVersion() {
+		return this.drawVersion;
+	}
+
+	protected void updateDrawVersion(){
+		this.drawVersion++;
+		this.callDrawValueChanged(LayerEvent.createDrawValuesChangedEvent(this, ""));
+		if (this.parentLayer != null){
+			this.parentLayer.updateDrawVersion();
+		}
+	}
+
+	public boolean hasChangedForDrawing(long value){
+		return this.drawVersion > value;
+	}
+
+	public void activationChanged(LayerEvent e) {
+	}
+
+	public void drawValueChanged(LayerEvent e) {
+		this.updateDrawVersion();
+	}
+
+	public void editionChanged(LayerEvent e) {
+
+	}
+
+	public void nameChanged(LayerEvent e) {
+
+	}
+
+	public void visibilityChanged(LayerEvent e) {
+
+	}
+	
+	// ========================================================
+	
+	public void saveToState(PersistentState state) throws PersistenceException {
+            try {
+		state.set("parentLayer", parentLayer);
+		state.set("status",status);
+		state.set("minScale", minScale);
+		state.set("maxScale", maxScale);
+		state.set("transparency",transparency);
+		state.set("coordTrans",ct);
+		state.set("name", getName());
+		state.set("crs", getProjection());
+		state.set("properties",properties.getExtendedProperties());
+            } catch(PersistenceException ex) {
+                logger.warn("Can't save to persistent state the layer '"+this.getName()+"'.");
+                throw ex;
+            } catch(RuntimeException ex) {
+                logger.warn("Can't save to persistent state the layer '"+this.getName()+"'.");
+                throw ex;
+            }
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+            try {
+		this.setDynValue(METADATA_NAME, state.getString("name"));
+		this.setDynValue(METADATA_CRS, state.get("crs"));
+		
+		this.parentLayer = (FLayers) state.get("parentLayer");
+		this.status = (FLayerStatus) state.get("status");
+		this.minScale = state.getDouble("minScale");
+		this.maxScale = state.getDouble("maxScale");
+		this.transparency = state.getInt("transparency");
+		this.ct = (ICoordTrans) state.get("coordTrans");
+
+                this.properties.setExtendedProperties((Map)state.get("properties"));
+            } catch(PersistenceException ex) {
+                logger.warn("Can't load from persietent state the layer '"+this.getName()+"'.");
+                throw ex;
+            } catch(RuntimeException ex) {
+                logger.warn("Can't load from persietent state the layer '"+this.getName()+"'.");
+                throw ex;
+            }
+
+	}
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				FLyrDefault.class,
+				"FLyrDefault",
+				"FLyrDefault Persistence definition",
+				null, 
+				null
+		);
+		definition.addDynFieldString("name").setMandatory(false);
+		definition.addDynFieldInt("transparency").setMandatory(true);
+		definition.addDynFieldDouble("minScale").setMandatory(true);
+		definition.addDynFieldDouble("maxScale").setMandatory(true);
+		definition.addDynFieldObject("crs").setClassOfValue(IProjection.class).setMandatory(false);
+		definition.addDynFieldObject("parentLayer").setClassOfValue(FLayers.class).setMandatory(false);
+		definition.addDynFieldObject("coordTrans").setClassOfValue(ICoordTrans.class).setMandatory(false);
+		definition.addDynFieldObject("status").setClassOfValue(FLayerStatus.class).setMandatory(true);
+                definition.addDynFieldMap("properties").setClassOfItems(Object.class)
+				.setMandatory(true);
+            
+            return Boolean.TRUE;
+        }
+    }
+
+	
+//	/**
+//	 * Splits string into an array of strings
+//	 * @param input input string
+//	 * @param sep separator string
+//	 * @return an array of strings
+//	 */
+//	public static String[] splitString(String input, String sep) {
+//		return Pattern.compile(sep).split(input, 0);
+//	}
+	
+	public void clear() {
+		if (metadataContainer != null) {
+			metadataContainer.clear();
+		}
+	}
+	
+    public String getMetadataName() throws MetadataException {
+        return FLayer.METADATA_DEFINITION_NAME;
+    }
+    
+        public static class RegisterMetadata implements Callable {
+
+            public Object call() {
+                MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+
+                DynStruct metadataDefinition = metadataManager.getDefinition(FLayer.METADATA_DEFINITION_NAME);
+                if ( metadataDefinition == null ) {
+                    try {
+                        metadataDefinition = metadataManager.addDefinition(
+                                FLayer.METADATA_DEFINITION_NAME,
+                                FLayer.METADATA_DEFINITION_DESCRIPTION);
+                        metadataDefinition.addDynField(FLayer.METADATA_NAME)
+                                .setMandatory(true);
+
+                        IProjection ipr
+                                = MapContextLocator.getMapContextManager().getDefaultCRS();
+
+                        metadataDefinition.addDynFieldObject(FLayer.METADATA_CRS)
+                                .setType(DataTypes.CRS).setMandatory(true)
+                                .setDefaultFieldValue(ipr);
+                    } catch (MetadataException e) {
+                        logger.warn("Can't create metadata definition for 'Layer'", e);
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        }
+
+	public String toString() {
+		return super.toString() + ": " + getName();
+	}
+	
+	public boolean hidesThisArea(Envelope area) {
+		return false;
+	}
+        
+        public boolean isTemporary() {
+            return this.temporary;
+        }
+        
+        public void setTemporary(boolean temporary) {
+            this.temporary = temporary;
+        }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLyrDefault.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerListener.java	(revision 42196)
@@ -0,0 +1,70 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers;
+
+
+
+/**
+ * <p><code>LayerListener</code> defines the interface for an object that listens
+ *  to changes in a layer.</p>
+ */
+public interface LayerListener {
+	/**
+	 * <p>Called when the visibility of a layer has changed.</p>
+	 * 
+	 * @param e a visibility changed layer event object
+	 */
+	public void visibilityChanged(LayerEvent e);
+
+	/**
+	 * <p>Called when the activation of a layer has changed.</p>
+	 * 
+	 * @param e an activation changed layer event object
+	 */
+	public void activationChanged(LayerEvent e);
+
+	/**
+	 * <p>Called when the name of a layer has changed.</p>
+	 * 
+	 * @param e a name changed layer event object
+	 */
+	public void nameChanged(LayerEvent e);
+
+	/**
+	 * <p>Called when the edition of a layer has changed.</p>
+	 * 
+	 * @param e an edition changed layer event object
+	 */
+	public void editionChanged(LayerEvent e);
+
+	/**
+	 * <p>
+	 * Called when a draw value of a layer has changed.
+	 * </p>
+	 * 
+	 * @param e
+	 *            an edition changed layer event object
+	 */
+	public void drawValueChanged(LayerEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceFontToString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceFontToString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceFontToString.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.tools.coerce;
+
+import java.awt.Font;
+
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+
+/**
+ * Convert a Font to String.
+ * 
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceFontToString implements Coercion {
+	
+	public CoerceFontToString() {
+		// Do nothing
+	}
+	
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if( value == null || value instanceof String ) {
+				return value;
+			}
+			if( value instanceof Font ) {
+				Font font = (Font) value;
+				SimpleAttributesSerializer properties = new SimpleAttributesSerializer("Font");
+				properties.put("name", font.getName());
+				properties.put("style", new Integer(font.getStyle()));
+				properties.put("size", new Integer(font.getSize()));
+				return properties.toString();
+			}
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+		throw new CoercionException();
+	}
+
+	public static void selfRegister() {
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+		if( dataTypesManager.getType("Font")== DataTypes.INVALID ) {
+	        dataTypesManager.addtype(DataTypes.INVALID, null, "Font",Font.class, null);
+		}
+		int type = dataTypesManager.getType("Font");
+        dataTypesManager.addCoercion(type, new CoerceStringToColor());
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceFontToString.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToFont.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToFont.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToFont.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.tools.coerce;
+
+import java.awt.Font;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+
+/**
+ * Convert a String to Font.
+ * 
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceStringToFont implements Coercion {
+
+	public CoerceStringToFont() {
+		// Do nothing
+	}
+	
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if( value == null ) {
+				return value;
+			}
+			if( value instanceof String ) {
+				SimpleAttributesSerializer properties = new SimpleAttributesSerializer("Font");
+				properties.load((String) value);
+				String name = (String) properties.get("name");
+				int style = Integer.parseInt((String) properties.get("size"));
+				int size = Integer.parseInt((String) properties.get("style"));
+				return new Font(name, style, size);
+			}
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+		throw new CoercionException();
+	}
+	public static void selfRegister() {
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+		int id = dataTypesManager.getType("String");
+        dataTypesManager.addCoercion(id, new CoerceStringToFont());
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToFont.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceColorToString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceColorToString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceColorToString.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.tools.coerce;
+
+import java.awt.Color;
+
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+
+/**
+ * Convert a Color to String.
+ * 
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceColorToString implements Coercion {
+
+	public CoerceColorToString() {
+		// Do nothing
+	}
+	
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if( value == null || value instanceof String ) {
+				return value;
+			}
+			if( value instanceof Color ) {
+				Color color = (Color) value;
+				SimpleAttributesSerializer properties = new SimpleAttributesSerializer("Color");
+				properties.put("red", new Integer(color.getRed()));
+				properties.put("green", new Integer(color.getGreen()));
+				properties.put("blue", new Integer(color.getBlue()));
+				properties.put("alpha", new Integer(color.getAlpha()));
+				return properties.toString();
+			}
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+		throw new CoercionException();
+	}
+
+	public static void selfRegister() {
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+		if( dataTypesManager.getType("Color")== DataTypes.INVALID ) {
+	        dataTypesManager.addtype(DataTypes.INVALID, null, "Color",Color.class, null);
+		}
+		int type = dataTypesManager.getType("Color");
+        dataTypesManager.addCoercion(type, new CoerceStringToColor());
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceColorToString.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToColor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToColor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToColor.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.tools.coerce;
+
+import java.awt.Color;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
+
+/**
+ * Convert a Color to String.
+ * 
+ *  
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class CoerceStringToColor implements Coercion {
+
+	public CoerceStringToColor() {
+		// Do nothing
+	}
+	
+	public Object coerce(Object value) throws CoercionException {
+		try {
+			if( value == null ) {
+				return value;
+			}
+			if( value instanceof String ) {
+				SimpleAttributesSerializer properties = new SimpleAttributesSerializer("Color");
+				properties.load((String) value);
+				int r = Integer.parseInt((String)(properties.get("red")));
+				int g = Integer.parseInt((String)(properties.get("green")));
+				int b = Integer.parseInt((String)(properties.get("blue")));
+				int a = Integer.parseInt((String)(properties.get("alpha")));
+				return new Color(r,g,b,a);
+			}
+		} catch (Exception e) {
+			throw new CoercionException(e);
+		}
+		throw new CoercionException();
+	}
+	public static void selfRegister() {
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+		int id = dataTypesManager.getType("String");
+        dataTypesManager.addCoercion(id, new CoerceStringToColor());
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/CoerceStringToColor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/SimpleAttributesSerializer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/SimpleAttributesSerializer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/SimpleAttributesSerializer.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.tools.coerce;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class SimpleAttributesSerializer {
+	Map values = null;
+	String name = null;
+	
+	public SimpleAttributesSerializer(String name) {
+		this.name = name;
+		this.values = new HashMap();
+	}
+	
+	public void put(String name, Object value) {
+		this.values.put(name, value);
+	}
+	
+	public Object get(String name) {
+		return this.get(name);
+	}
+	
+	public String toString() {
+		StringBuffer buffer = null;
+		Iterator it = this.values.entrySet().iterator();
+		while( it.hasNext() ) {
+			Entry entry = (Entry)(it.next());
+			if( buffer==null ) {
+				buffer = new StringBuffer();
+				buffer.append(this.name).append(":");
+			} else {
+				buffer.append(";");
+			}
+			buffer.append(entry.getKey())
+				.append("=")
+				.append(entry.getValue())
+				.append(";");
+		}
+		return buffer.toString();
+	}
+	
+	public void load(String buffer) {
+		if( ! buffer.startsWith(this.name+":") ) {
+			return;
+		}
+		
+		String[] pairs = buffer.substring(this.name.length()) .split(";");
+		for( int i=0; i<pairs.length; i++ ) {
+			String[] pair = pairs[i].split("=");
+			if( pair.length==2 ) {
+				this.values.put(pair[0].trim(), pair[1].trim());
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/coerce/SimpleAttributesSerializer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactory.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.Font;
+import org.gvsig.tools.ToolsLocator;
+
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.AbstractSinglePersistenceFactory;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Factory to manage the persistence of {@link Font} objects.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ * @author 2010- <a href="jjdelcerro@gvsig.org">Joaquin Jose del Cerro</a> -
+ *         gvSIG team
+ */
+public class FontPersistenceFactory extends AbstractSinglePersistenceFactory {
+
+	static final String FIELD_NAME = "name";
+	static final String FIELD_STYLE = "style";
+	static final String FIELD_SIZE = "size";
+
+	private static final String DYNCLASS_NAME = "AwtFont";
+	private static final String DYNCLASS_DESCRIPTION = "Awt Font";
+
+	/**
+	 * Creates a new {@link FontPersistenceFactory} with the {@link DynStruct}
+	 * definition for the {@link Font} objects.
+	 */
+	public FontPersistenceFactory() {
+		super(Font.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null, null);
+
+		DynStruct definition = this.getDefinition();
+
+		definition.addDynFieldString(FIELD_NAME).setMandatory(true);
+		definition.addDynFieldInt(FIELD_STYLE).setMandatory(true);
+		definition.addDynFieldInt(FIELD_SIZE).setMandatory(true);
+	}
+
+	public Object createFromState(PersistentState state)
+			throws PersistenceException {
+		String name = state.getString(FIELD_NAME);
+		int style = state.getInt(FIELD_STYLE);
+		int size = state.getInt(FIELD_SIZE);
+
+		return new Font(name, style, size);
+	}
+
+	public void saveToState(PersistentState state, Object obj)
+			throws PersistenceException {
+		Font font = (Font) obj;
+		state.set(FIELD_NAME, font.getName());
+		state.set(FIELD_STYLE, font.getStyle());
+		state.set(FIELD_SIZE, font.getSize());
+	}
+        
+        public static class RegisterPersistence implements Callable {
+
+            public Object call() throws Exception {
+                PersistenceManager persistenceManager
+                        = ToolsLocator.getPersistenceManager();
+                persistenceManager.registerFactory(new FontPersistenceFactory());
+                return Boolean.TRUE;
+            }
+        }        
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/FontPersistenceFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactory.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.geom.Rectangle2D;
+import org.gvsig.tools.ToolsLocator;
+
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.AbstractSinglePersistenceFactory;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Factory to manage the persistence of {@link Rectangle2D} objects.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ * @author 2010- <a href="jjdelcerro@gvsig.org">Joaquin Jose del Cerro</a> -
+ *         gvSIG team
+ */
+public class Rectangle2DPersistenceFactory extends
+		AbstractSinglePersistenceFactory {
+
+	private static final String DYNCLASS_NAME = "AwtRectangle2D";
+	private static final String DYNCLASS_DESCRIPTION = "Awt Rectangle2D";
+
+	public static final String FIELD_X = "x";
+	public static final String FIELD_Y = "y";
+	public static final String FIELD_WIDTH = "width";
+	public static final String FIELD_HEIGHT = "height";
+
+	/**
+	 * Creates a new {@link Rectangle2DPersistenceFactory} with the
+	 * {@link DynStruct} definition for the {@link Rectangle2D} objects.
+	 */
+	public Rectangle2DPersistenceFactory() {
+		super(Rectangle2D.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null,
+				null);
+
+		DynStruct definition = this.getDefinition();
+
+		definition.addDynFieldDouble(FIELD_X).setMandatory(true);
+		definition.addDynFieldDouble(FIELD_Y).setMandatory(true);
+		definition.addDynFieldDouble(FIELD_WIDTH).setMandatory(true);
+		definition.addDynFieldDouble(FIELD_HEIGHT).setMandatory(true);
+	}
+
+	public Object createFromState(PersistentState state)
+			throws PersistenceException {
+
+		double x = state.getDouble(FIELD_X);
+		double y = state.getDouble(FIELD_Y);
+		double width = state.getDouble(FIELD_WIDTH);
+		double height = state.getDouble(FIELD_HEIGHT);
+
+		return new Rectangle2D.Double(x, y, width, height);
+	}
+
+	public void saveToState(PersistentState state, Object obj)
+			throws PersistenceException {
+		Rectangle2D rec = (Rectangle2D) obj;
+
+		state.set(FIELD_X, rec.getX());
+		state.set(FIELD_Y, rec.getY());
+		state.set(FIELD_WIDTH, rec.getWidth());
+		state.set(FIELD_HEIGHT, rec.getHeight());
+	}
+        
+        public static class RegisterPersistence implements Callable {
+
+            public Object call() throws Exception {
+                PersistenceManager persistenceManager
+                        = ToolsLocator.getPersistenceManager();
+                persistenceManager.registerFactory(new Rectangle2DPersistenceFactory());
+                return Boolean.TRUE;
+            }
+        }          
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Rectangle2DPersistenceFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactory.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.Color;
+import org.gvsig.tools.ToolsLocator;
+
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.AbstractSinglePersistenceFactory;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Factory to manage the persistence of {@link Color} objects.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ * @author 2010- <a href="jjdelcerro@gvsig.org">Joaquin Jose del Cerro</a> -
+ *         gvSIG team
+ */
+public class ColorPersistenceFactory extends AbstractSinglePersistenceFactory {
+
+	static final String FIELD_RED = "red";
+	static final String FIELD_GREEN = "green";
+	static final String FIELD_BLUE = "blue";
+	static final String FIELD_ALPHA = "alpha";
+
+	private static final String DYNCLASS_NAME = "AwtColor";
+	private static final String DYNCLASS_DESCRIPTION = "Awt Color";
+
+	/**
+	 * Creates a new {@link ColorPersistenceFactory} with the {@link DynStruct}
+	 * definition for the {@link Color} objects.
+	 */
+	public ColorPersistenceFactory() {
+		super(Color.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null, null);
+
+		DynStruct definition = this.getDefinition();
+
+		definition.addDynFieldInt(FIELD_RED).setMandatory(true);
+		definition.addDynFieldInt(FIELD_GREEN).setMandatory(true);
+		definition.addDynFieldInt(FIELD_BLUE).setMandatory(true);
+		definition.addDynFieldInt(FIELD_ALPHA).setMandatory(true);
+	}
+
+	public Object createFromState(PersistentState state)
+			throws PersistenceException {
+		int red = state.getInt(FIELD_RED);
+		int green = state.getInt(FIELD_GREEN);
+		int blue = state.getInt(FIELD_BLUE);
+		int alpha = state.getInt(FIELD_ALPHA);
+
+		return new Color(red, green, blue, alpha);
+	}
+
+	public void saveToState(PersistentState state, Object obj)
+			throws PersistenceException {
+		Color color = (Color) obj;
+		state.set(FIELD_RED, color.getRed());
+		state.set(FIELD_GREEN, color.getGreen());
+		state.set(FIELD_BLUE, color.getBlue());
+		state.set(FIELD_ALPHA, color.getAlpha());
+	}
+
+        public static class RegisterPersistence implements Callable {
+
+            public Object call() throws Exception {
+                PersistenceManager persistenceManager
+                        = ToolsLocator.getPersistenceManager();
+                persistenceManager.registerFactory(new ColorPersistenceFactory());
+                return Boolean.TRUE;
+            }
+        }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/ColorPersistenceFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactory.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.geom.Point2D;
+import org.gvsig.tools.ToolsLocator;
+
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.AbstractSinglePersistenceFactory;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Factory to manage the persistence of {@link Point2D} objects.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ * @author 2010- <a href="jjdelcerro@gvsig.org">Joaquin Jose del Cerro</a> -
+ *         gvSIG team
+ */
+public class Point2DPersistenceFactory extends AbstractSinglePersistenceFactory {
+
+	static final String FIELD_X = "x";
+	static final String FIELD_Y = "y";
+
+	private static final String DYNCLASS_NAME = "AwtPoint2D";
+	private static final String DYNCLASS_DESCRIPTION = "Awt Point2D";
+
+	/**
+	 * Creates a new {@link Point2DPersistenceFactory} with the
+	 * {@link DynStruct} definition for the {@link Point2D} objects.
+	 */
+	public Point2DPersistenceFactory() {
+		super(Point2D.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null, null);
+
+		DynStruct definition = this.getDefinition();
+
+		definition.addDynFieldDouble(FIELD_X).setMandatory(true);
+		definition.addDynFieldDouble(FIELD_Y).setMandatory(true);
+	}
+
+	public Object createFromState(PersistentState state)
+			throws PersistenceException {
+		double x = state.getDouble(FIELD_X);
+		double y = state.getDouble(FIELD_Y);
+
+		return new Point2D.Double(x, y);
+	}
+
+	public void saveToState(PersistentState state, Object obj)
+			throws PersistenceException {
+		Point2D point = (Point2D) obj;
+		state.set(FIELD_X, point.getX());
+		state.set(FIELD_Y, point.getY());
+	}
+        
+        public static class RegisterPersistence implements Callable {
+
+            public Object call() throws Exception {
+                PersistenceManager persistenceManager
+                        = ToolsLocator.getPersistenceManager();
+                persistenceManager.registerFactory(new Point2DPersistenceFactory());
+                return Boolean.TRUE;
+            }
+        }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/Point2DPersistenceFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactory.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.tools.persistence;
+
+import java.awt.Dimension;
+import java.awt.geom.Rectangle2D;
+import org.gvsig.tools.ToolsLocator;
+
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.AbstractSinglePersistenceFactory;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Factory to manage the persistence of {@link Rectangle2D} objects.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ * @author 2010- <a href="jjdelcerro@gvsig.org">Joaquin Jose del Cerro</a> -
+ *         gvSIG team
+ */
+public class DimensionPersistenceFactory extends
+		AbstractSinglePersistenceFactory {
+
+	private static final String DYNCLASS_NAME = "AwtDimension";
+	private static final String DYNCLASS_DESCRIPTION = "Dimension in AWT";
+
+	public static final String FIELD_HEIGHT = "height";
+	public static final String FIELD_WIDTH = "width";
+
+	/**
+	 * Creates a new {@link DimensionPersistenceFactory} with the
+	 * {@link DynStruct} definition for the {@link Dimension} objects.
+	 */
+	public DimensionPersistenceFactory() {
+		super(Dimension.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null,
+				null);
+
+		DynStruct definition = this.getDefinition();
+
+		definition.addDynFieldInt(FIELD_WIDTH).setMandatory(true);
+		definition.addDynFieldInt(FIELD_HEIGHT).setMandatory(true);
+	}
+
+	public Object createFromState(PersistentState state)
+			throws PersistenceException {
+		Dimension dimension = new Dimension();
+		dimension.width = state.getInt(FIELD_WIDTH);
+		dimension.height = state.getInt(FIELD_HEIGHT); 
+		return dimension;
+	}
+
+	public void saveToState(PersistentState state, Object obj)
+			throws PersistenceException {
+		Dimension dim = (Dimension) obj;
+
+		state.set(FIELD_HEIGHT, dim.height);
+		state.set(FIELD_WIDTH, dim.width);
+	}
+        
+        public static class RegisterPersistence implements Callable {
+
+            public Object call() throws Exception {
+                PersistenceManager persistenceManager
+                        = ToolsLocator.getPersistenceManager();
+                persistenceManager.registerFactory(new DimensionPersistenceFactory());
+                return Boolean.TRUE;
+            }
+        }         
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/tools/persistence/DimensionPersistenceFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextDrawer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextDrawer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextDrawer.java	(revision 42196)
@@ -0,0 +1,798 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.impl;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ExtentHistory;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextDrawer;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayerHidesArea;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayerDrawEvent;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultMapContextDrawer implements MapContextDrawer {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(DefaultMapContextDrawer.class);
+
+	private MapContext mapContext = null;
+	private ViewPort viewPort = null;
+	private CachedImage cachedImage = null;
+	private DrawList previousDrawList = null;
+
+	protected void checkInitialized() {
+		if (mapContext == null || viewPort == null) {
+			throw new IllegalStateException(
+					"MapContext and ViewPort must be set");
+		}
+	}
+
+	public void draw(FLayers root, BufferedImage image, Graphics2D g,
+			Cancellable cancel, double scale) throws ReadException {
+
+		this.checkInitialized();
+
+		// With viewport changes all layers must be redrawn, discard cache
+		if (cachedImage != null && cachedImage.hasChangedViewPortDrawVersion()) {
+			cachedImage = null;
+		}
+
+		AffineTransform aux_at = null;
+		
+		if (isValidFullCachedImage()) {
+		    
+		    aux_at = g.getTransform();
+			g.drawImage(
+			    cachedImage.getFullDrawnImage(),
+			    (int) -aux_at.getTranslateX(),
+			    (int) -aux_at.getTranslateY(),
+			    null);
+			LOG.debug("Drawn full image from the cache, all layers cached");
+			return;
+		}
+
+		DrawList drawList = this.createDrawList(root, cancel, scale);
+		if (drawList == null || drawList.size() == 0) {
+			return;
+		}
+
+		if (cancel.isCanceled()) {
+			cachedImage = null;
+			return;
+		}
+
+		int firstLayerToDraw;
+		int lastLayerToDraw;
+		if (isValidPartialCachedImage(drawList)) {
+			firstLayerToDraw = 0;
+			lastLayerToDraw = cachedImage.getLastDrawnLayerPosition();
+			
+			aux_at = g.getTransform();
+			g.drawImage(
+	                cachedImage.getPartialDrawnImage(),
+	                (int) -aux_at.getTranslateX(),
+	                (int) -aux_at.getTranslateY(),
+	                null);
+			
+			cachedImage.updateVersions(mapContext, viewPort);
+			LOG.debug("Reused image of cached layers from 0 to {}",
+					new Integer(lastLayerToDraw));
+		} else {
+			if (cachedImage == null) {
+				cachedImage = new CachedImage();
+				// Draw all layers
+				firstLayerToDraw = 0;
+				//lastLayerToDraw = drawList.getLayerCount() - 1;
+				lastLayerToDraw = drawList.getLastLayerVisible(viewPort);
+			} else {
+				// Draw the first group of layers without changes to be cached
+				// next time
+				firstLayerToDraw = 0;
+				int firstChangedLayer = drawList.getFirstChangedLayer();
+				// If negative nothing has changed, so draw all the layers
+				lastLayerToDraw = firstChangedLayer < 0 ? drawList
+						.getLayerCount() - 1 : firstChangedLayer - 1;
+			}
+			drawList.drawLayers(image, g, firstLayerToDraw, lastLayerToDraw,
+					cancel, scale);
+			cachedImage.setPartialDrawnImage(image, mapContext, viewPort,
+					lastLayerToDraw);
+		}
+
+		if (cancel.isCanceled()) {
+			cachedImage = null;
+			return;
+		}
+
+		// Draw the second group of layers not cached
+		firstLayerToDraw = lastLayerToDraw + 1;
+		lastLayerToDraw = drawList.getLayerCount() - 1;
+		drawList.drawLayers(image, g, firstLayerToDraw, lastLayerToDraw,
+				cancel, scale);
+		cachedImage.setFullDrawnImage(image);
+
+		this.previousDrawList = drawList;
+	}
+
+	private boolean isValidPartialCachedImage(DrawList drawList) {
+		return cachedImage != null
+				&& cachedImage.isValidPartialDrawnImage(mapContext, drawList);
+	}
+
+	private boolean isValidFullCachedImage() {
+		return cachedImage != null
+				&& cachedImage.isValidFullDrawnImage(mapContext);
+	}
+
+	private void print(Object layerOrComposed, Graphics2D g,
+			Cancellable cancel, double scale, PrintAttributes properties)
+			throws ReadException {
+		ILabelable labelable = null;
+		ILabelable tmp = null;
+		if (layerOrComposed instanceof ILabelable) {
+
+			tmp = (ILabelable) layerOrComposed;
+
+			if (tmp.isLabeled() && tmp.getLabelingStrategy() != null
+					&& tmp.getLabelingStrategy().shouldDrawLabels(scale)) {
+				labelable = tmp;
+			}
+		}
+
+		if (layerOrComposed instanceof FLayer) {
+			FLayer layer = (FLayer) layerOrComposed;
+			layer.print(g, viewPort, cancel, scale, properties);
+		} else {
+			ComposedLayer composed = (ComposedLayer) layerOrComposed;
+			composed.print(g, viewPort, cancel, scale, properties);
+		}
+		if (labelable != null) {
+			labelable.printLabels(g, viewPort, cancel, scale, properties);
+		}
+
+	}
+
+	public void setMapContext(MapContext mapContext) {
+		if (this.mapContext == mapContext) {
+			return;
+		}
+		this.clean();
+		this.mapContext = mapContext;
+
+	}
+
+	public void setViewPort(ViewPort viewPort) {
+		if (this.viewPort == viewPort) {
+			return;
+		}
+		this.clean();
+		this.viewPort = viewPort;
+
+	}
+
+	protected void clean() {
+		this.cachedImage = null;
+	}
+
+	public class CachedImage {
+		private BufferedImage partialDrawnImage;
+		private BufferedImage fullDrawnImage;
+		private long lastMapContextVersion;
+		private long lastViewPortVersion;
+		private int lastDrawnLayerPosition;
+
+		public void setPartialDrawnImage(BufferedImage partialDrawnImage,
+				MapContext mapContext, ViewPort viewPort,
+				int lastDrawnLayerPosition) {
+			this.partialDrawnImage = CompatLocator.getGraphicsUtils()
+					.copyBufferedImage(partialDrawnImage);
+			this.lastDrawnLayerPosition = lastDrawnLayerPosition;
+			updateVersions(mapContext, viewPort);
+		}
+		
+		public void updateVersions(MapContext mapContext, ViewPort viewPort) {
+			this.lastMapContextVersion = mapContext.getDrawVersion();
+			this.lastViewPortVersion = viewPort.getDrawVersion();			
+		}
+
+		public void setFullDrawnImage(BufferedImage fullDrawnImage) {
+			this.fullDrawnImage = CompatLocator.getGraphicsUtils()
+					.copyBufferedImage(fullDrawnImage);
+		}
+
+		public BufferedImage getPartialDrawnImage() {
+			return partialDrawnImage;
+		}
+
+		public BufferedImage getFullDrawnImage() {
+			return fullDrawnImage;
+		}
+
+		public long getMapContextVersion() {
+			return lastMapContextVersion;
+		}
+
+		public int getLastDrawnLayerPosition() {
+			return this.lastDrawnLayerPosition;
+		}
+
+		public boolean isValidFullDrawnImage(MapContext context) {
+			// If the MapContext version has not changed, there are not any
+			// changes that require redrawing any of the layers.
+			return fullDrawnImage != null && !hasChangedMapContextDrawVersion();
+		}
+
+		public boolean hasChangedMapContextDrawVersion() {
+			// This change detects changes in layers and the viewport also
+			return mapContext.getDrawVersion() != this.lastMapContextVersion;
+		}
+
+		public boolean hasChangedViewPortDrawVersion() {
+			// This change detects changes in the viewport
+			return viewPort.getDrawVersion() != this.lastViewPortVersion;
+		}
+
+		public boolean isValidPartialDrawnImage(MapContext context,
+				DrawList drawList) {
+			if (!hasChangedMapContextDrawVersion()) {
+				// Nothing has changed
+				return true;
+			}
+
+			if (partialDrawnImage == null || hasChangedViewPortDrawVersion()) {
+				// No image available or changes in view port
+				return false;
+			}
+
+			if (drawList.size() < lastDrawnLayerPosition + 1) {
+				// New list has fewer layers than before
+				return false;
+			}
+
+			// There is any change in the layers drawn in the partial drawn
+			// image?
+			return drawList.getFirstChangedLayer() > lastDrawnLayerPosition;
+		}
+	}
+
+	public class DrawList {
+		private List layers = new ArrayList();
+		private List all = new ArrayList();
+		private List versions = new ArrayList();
+		private DrawList previosList = null;
+		private int firstLayerChanged = -1;
+
+		public DrawList() {
+		}
+
+		public DrawList(DrawList previousList) {
+			if (previousList != null) {
+				this.firstLayerChanged = previousList.getLayerCount();
+				this.previosList = previousList;
+			}
+		}
+
+		public int getLayerCount() {
+			return this.layers.size();
+		}
+
+		public int getLastLayerVisible(ViewPort viewPort) {
+			Envelope area = viewPort.getAdjustedEnvelope();
+			for( int n=0; n<this.layers.size()-1; n++ ) {
+				FLayer layer = (FLayer) this.layers.get(n);
+				if( layer instanceof FLayerHidesArea ) {
+					if( ((FLayerHidesArea)(layer)).hidesThisArea(area) ) {
+						return n;
+					}
+				}
+			}
+			return this.layers.size()-1;
+		}
+
+		private boolean hasChanged(FLayer layer, int pos) {
+			FLayer previous = (FLayer) this.previosList.layers.get(pos);
+			// String previousName = previous.getName();
+			// String layerName = layer.getName();
+			if (previous != layer) {
+				return true;
+			}
+			long previousVersion = ((Long) this.previosList.versions.get(pos))
+					.longValue();
+			long layerVersion = layer.getDrawVersion();
+
+			return previousVersion != layerVersion;
+		}
+
+		public void add(Object obj) {
+			if (obj instanceof FLayer) {
+				FLayer layer = (FLayer) obj;
+				int curIndex = this.layers.size();
+				if (this.firstLayerChanged >= curIndex) {
+					if (this.previosList.getLayerCount() > curIndex) {
+						if (this.hasChanged(layer, curIndex)) {
+							this.firstLayerChanged = curIndex;
+						}
+					} else if (this.previosList.getLayerCount() == curIndex) {
+						this.firstLayerChanged = curIndex;
+					}
+				}
+				this.layers.add(layer);
+				this.versions.add(new Long(layer.getDrawVersion()));
+			} else if (!(obj instanceof LayersGroupEvent)) {
+				throw new UnsupportedOperationException();
+			}
+
+			this.all.add(obj);
+		}
+
+		public int size() {
+			return this.all.size();
+		}
+
+		public int getFirstChangedLayer() {
+			if (this.firstLayerChanged > this.layers.size()) {
+				this.firstLayerChanged = this.layers.size();
+			}
+			return this.firstLayerChanged;
+		}
+
+		public FLayer getLayer(int pos) {
+			return (FLayer) this.layers.get(pos);
+		}
+
+		public Object get(int pos) {
+			return this.all.get(pos);
+		}
+
+		public void drawLayers(BufferedImage image, Graphics2D g,
+				int firstLayerToDraw, int lastLayerToDraw, Cancellable cancel,
+				double scale) throws ReadException {
+
+			if (firstLayerToDraw > lastLayerToDraw) {
+				LOG.debug("Nothing to draw");
+				return;
+			}
+
+			// Find the real layer positions excluding LayersGroupEvents
+			FLayer firstLayer = (FLayer) layers.get(firstLayerToDraw);
+			int firstLayerPos = all.indexOf(firstLayer);
+			// Look if it belongs to a group and start it
+			if (firstLayerPos > 0) {
+				for (int i = firstLayerPos - 1; i > 0; i++) {
+					Object group = all.get(i);
+					if (group instanceof LayersGroupEvent) {
+						LayersGroupEvent event = (LayersGroupEvent) group;
+						if (event.type == LayersGroupEvent.IN_Event) {
+							event.group.beginDraw(g, viewPort);
+						}
+						break;
+					}
+				}
+			}
+			FLayer lastLayer = (FLayer) layers.get(lastLayerToDraw);
+			int lastLayerPos = all.indexOf(lastLayer);
+
+			LOG.debug("Drawing from layer {} in position (layers: {}, all: {})"
+					+ " to layer {} in position (layers: {}, all: {})",
+					new Object[] { firstLayer, new Integer(firstLayerToDraw),
+							new Integer(firstLayerPos), lastLayer,
+							new Integer(lastLayerToDraw),
+							new Integer(lastLayerPos) });
+
+			ComposedLayer composed = null;
+			for (int pos = firstLayerPos; pos <= lastLayerPos; pos++) {
+				if (cancel.isCanceled()) {
+					return;
+				}
+
+				Object layerOrGroup = get(pos);
+
+				// Group drawing events management
+				if (layerOrGroup instanceof LayersGroupEvent) {
+					LayersGroupEvent event = (LayersGroupEvent) layerOrGroup;
+					if (event.type == LayersGroupEvent.IN_Event) {
+						event.group.beginDraw(g, viewPort);
+					} else {
+						event.group.endDraw(g, viewPort);
+					}
+				} else {
+					FLayer layer = (FLayer) layerOrGroup;
+					if (composed != null && composed.canAdd(layer)) {
+						// Previous or current layer could be composed
+						// Add current layer
+						addToComposedLayer(composed, layer);
+					} else {
+						if (composed != null) {
+							// Current layer can't be composed on the previous
+							// composedlayer. Draw previous composed
+							LOG.debug("Drawing composed layer {} ", composed);
+							draw(composed, image, g, cancel, scale);
+							composed = null;
+						}
+
+						// Try if the current layer can be composed
+						// Create new composed or draw current layer
+						composed = layer.newComposedLayer();
+						if (composed == null) {
+							LOG.debug("Drawing layer {} ", layer);
+							draw(layer, image, g, cancel, scale);
+						} else {
+							addToComposedLayer(composed, layer);
+						}
+					}
+				}
+			}
+			if (composed != null) {
+				// Draw the pending composed
+				draw(composed, image, g, cancel, scale);
+			}
+
+			// Check if the last layer is the last of a group and close it
+			for (int i = lastLayerPos + 1; i < all.size(); i++) {
+				Object group = all.get(i);
+				if (group instanceof LayersGroupEvent) {
+					LayersGroupEvent event = (LayersGroupEvent) group;
+					if (event.type == LayersGroupEvent.OUT_Event) {
+						event.group.endDraw(g, viewPort);
+					}
+					break;
+				}
+			}
+		}
+
+		private void addToComposedLayer(ComposedLayer composed, FLayer layer)
+				throws ReadException {
+			try {
+				LOG.debug("Adding layer {} to composed layer ", layer, composed);
+				composed.add(layer);
+			} catch (Exception e) {
+				throw new ReadException("DefalutMapContexDrawer exception", e);
+			}
+		}
+
+		private void draw(Object layerOrComposed, BufferedImage image,
+				Graphics2D g, Cancellable cancel, double scale)
+				throws ReadException {
+			ILabelable labelable = null;
+			ILabelable tmp = null;
+			if (layerOrComposed instanceof ILabelable) {
+
+				tmp = (ILabelable) layerOrComposed;
+
+				if (tmp.isLabeled() && tmp.getLabelingStrategy() != null
+						&& tmp.getLabelingStrategy().shouldDrawLabels(scale)) {
+					labelable = tmp;
+				}
+			}
+				
+			if (layerOrComposed instanceof FLayer) {
+				int beforeDrawEventType;
+				int afterDrawEventType;
+				if (layerOrComposed instanceof GraphicLayer) {
+					beforeDrawEventType = LayerDrawEvent.GRAPHICLAYER_BEFORE_DRAW;
+					afterDrawEventType = LayerDrawEvent.GRAPHICLAYER_AFTER_DRAW;
+				} else {
+					beforeDrawEventType = LayerDrawEvent.LAYER_BEFORE_DRAW;
+					afterDrawEventType = LayerDrawEvent.LAYER_AFTER_DRAW;
+				}
+				FLayer layer = (FLayer) layerOrComposed;
+				drawLayer(layer, image, g, cancel, scale, beforeDrawEventType,
+						afterDrawEventType);
+			} else {
+				ComposedLayer composed = (ComposedLayer) layerOrComposed;
+				composed.draw(image, g, viewPort, cancel, scale);
+			}
+			if (labelable != null) {
+				labelable.drawLabels(image, g, viewPort, cancel, scale,
+						mapContext.getViewPort().getDPI());
+			}
+
+		}
+
+		protected void drawLayer(FLayer layer, BufferedImage image,
+				Graphics2D g, Cancellable cancel, double scale,
+				int beforeDrawEventType, int afterDrawEventType)
+				throws ReadException {
+			LayerDrawEvent event = new LayerDrawEvent(layer, g, viewPort, beforeDrawEventType);
+			mapContext.fireLayerDrawingEvent(event);
+			layer.draw(image, g, viewPort, cancel, scale);
+			event = new LayerDrawEvent(layer, g, viewPort, afterDrawEventType);
+			mapContext.fireLayerDrawingEvent(event);
+		}
+
+	}
+
+	private class SimpleLayerIterator extends LayersIterator {
+
+		public SimpleLayerIterator(FLayer layer) {
+			this.appendLayer(layer);
+		}
+
+		public boolean evaluate(FLayer layer) {
+			if (layer instanceof FLayers) {
+				return false;
+			}
+			return layer.isAvailable() && layer.isVisible();
+		}
+
+	}
+
+	public void dispose() {
+		this.mapContext = null;
+		this.viewPort = null;
+		this.cachedImage = null;
+		this.previousDrawList = null;
+	}
+
+	public void print(FLayers root, Graphics2D g, Cancellable cancel,
+			double scale, PrintAttributes properties) throws ReadException {
+		this.checkInitialized();
+
+		List printList = this.createPrintList(root, cancel);
+		if (cancel.isCanceled()) {
+			return;
+		}
+
+		ComposedLayer composed = null;
+		int pos;
+		FLayer layer;
+		int layerPos = -1;
+		Object obj;
+		LayersGroupEvent event;
+		for (pos = 0; pos < printList.size(); pos++) {
+			if (cancel.isCanceled()) {
+				return;
+			}
+
+			obj = printList.get(pos);
+			if (obj instanceof LayersGroupEvent) {
+				event = (LayersGroupEvent) obj;
+				if (event.type == LayersGroupEvent.IN_Event) {
+					// System.out.println("=======Empiza a pintar grupo de capas "+
+					// ((FLayers)event.group).getName() +"============");
+					event.group.beginDraw(g, viewPort);
+				} else {
+					event.group.endDraw(g, viewPort);
+					// System.out.println("=======Fin a pintar grupo de capas "+
+					// ((FLayers)event.group).getName() +"============");
+
+				}
+				continue;
+			}
+			layerPos++;
+
+			layer = (FLayer) obj;
+
+			// *** Pintado de capa/composicion de capa ***
+			if (composed == null) {
+				composed = layer.newComposedLayer();
+				if (composed != null) {
+					try {
+						composed.add(layer);
+						// System.out.println("=======Imprimiendo composicion de pintado "+
+						// (layerPos-1)+" ============");
+						continue;
+					} catch (Exception e) {
+						throw new ReadException(
+								"DefaultMapContexDrawer exception", e);
+					}
+				}
+			} else {
+				if (composed.canAdd(layer)) {
+					try {
+						composed.add(layer);
+						// System.out.println("=== a�adiendo a composicion de pintado "+
+						// layerPos+ " "+layer.getName());
+						continue;
+					} catch (Exception e) {
+						throw new ReadException(
+								"DefaultMapContexDrawer exception", e);
+					}
+				} else {
+					// System.out.println("=======Imprimiendo composicion de pintado "+
+					// (layerPos-1)+" ============");
+					this.print(composed, g, cancel, scale, properties);
+					// composed.print( g, viewPort, cancel, scale,properties);
+					composed = layer.newComposedLayer();
+					if (composed != null) {
+						try {
+							composed.add(layer);
+							// System.out.println("=== a�adiendo a composicion de pintado "+
+							// layerPos+ " "+layer.getName());
+							continue;
+						} catch (Exception e) {
+							throw new ReadException(
+									"DefaultMapContexDrawer exception", e);
+						}
+					}
+				}
+			}
+			// System.out.println("=== imprimiendo "+ layerPos+
+			// " "+layer.getName());
+			this.print(layer, g, cancel, scale, properties);
+			// layer.print(g, viewPort, cancel, scale,properties);
+			// *** Pintado de capa/composicion de capa ***
+			if (composed != null) {
+				// si la composicion no se ha pintado la pintamos
+				// System.out.println("=======Imprimiendo composicion de pintado "+
+				// (layerPos-1)+" (ultimo) ============");
+				this.print(composed, g, cancel, scale, properties);
+				// composed.print(g, viewPort, cancel, scale, properties);
+				composed = null;
+			}
+		}
+
+	}
+
+	private DrawList createDrawList(FLayers root, Cancellable cancel,
+			double scale) {
+		DrawList result = new DrawList(this.previousDrawList);
+		Iterator iter = new MyLayerIterator((FLayer) root, scale);
+		while (iter.hasNext()) {
+			if (cancel.isCanceled()) {
+				return null;
+			}
+			result.add(iter.next());
+		}
+		if (cancel.isCanceled()) {
+			return null;
+		}
+		// Take into account also the Graphic layer
+		result.add(mapContext.getGraphicsLayer());
+		return result;
+	}
+
+	private List createPrintList(FLayers root, Cancellable cancel) {
+		List result = new ArrayList();
+		Iterator iter = new SimpleLayerIterator((FLayer) root);
+		while (iter.hasNext()) {
+			if (cancel.isCanceled()) {
+				return null;
+			}
+			result.add(iter.next());
+		}
+		return result;
+	}
+
+	private class MyLayerIterator implements Iterator {
+		List layersList = new ArrayList();
+		int index = 0;
+		double scale = 0;
+
+		public MyLayerIterator(FLayer layer, double scale) {
+			this.scale = scale;
+			this.appendLayer(layer);
+		}
+
+		protected void appendLayer(FLayer layer) {
+			if (layer instanceof LayerCollection) {
+				appendLayers((LayerCollection) layer);
+			} else if (this.evaluate(layer)) {
+				layersList.add(layer);
+			}
+		}
+
+		private void appendLayers(LayerCollection layers) {
+			int i;
+			layersList.add(new LayersGroupEvent(layers,
+					LayersGroupEvent.IN_Event));
+			for (i = 0; i < layers.getLayersCount(); i++) {
+				appendLayer(layers.getLayer(i));
+			}
+			layersList.add(new LayersGroupEvent(layers,
+					LayersGroupEvent.OUT_Event));
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+
+		public boolean hasNext() {
+			return index < layersList.size();
+		}
+
+		public Object next() {
+			if (!this.hasNext()) {
+				throw new NoSuchElementException();
+			}
+			Object aux = layersList.get(index);
+			index++;
+			return aux;
+		}
+
+		public boolean evaluate(FLayer layer) {
+			if (layer instanceof LayerCollection) {
+				return false;
+			}
+			return layer.isAvailable() && layer.isVisible()
+					&& layer.isWithinScale(this.scale);
+		}
+
+	}
+
+	private class LayersGroupEvent {
+		public static final String IN_Event = "in";
+		public static final String OUT_Event = "Out";
+
+		private LayerCollection group = null;
+		private String type = IN_Event;
+
+		public LayersGroupEvent(LayerCollection group, String type) {
+			this.group = group;
+			this.type = type;
+		}
+
+		public String getType() {
+			return type;
+		}
+
+		public LayerCollection getGroup() {
+			return group;
+		}
+	}
+
+
+    public static class RegisterMapContextDrawer implements Callable {
+
+        public Object call() {
+            MapContextManager manager = MapContextLocator.getMapContextManager();
+            try {
+                    manager.setDefaultMapContextDrawer(DefaultMapContextDrawer.class);
+            } catch (MapContextException ex) {
+                    throw new RuntimeException("Can't register the default MapContextDrawer", ex);
+            }
+            return Boolean.TRUE;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextDrawer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManager.java	(revision 42196)
@@ -0,0 +1,794 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.impl;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextDrawer;
+import org.gvsig.fmap.mapcontext.MapContextException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.MapContextRuntimeException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerFactory;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.impl.DefaultGraphicLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialUniqueValueLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendReader;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendWriter;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.IWarningSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
+import org.gvsig.tools.observer.Notification;
+import org.gvsig.tools.observer.ObservableHelper;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default implementation of the {@link MapContextManager}.
+ *
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class DefaultMapContextManager implements MapContextManager {
+
+    private static final Logger logger = LoggerFactory
+        .getLogger(DefaultMapContextManager.class);
+
+	private Class drawerClazz = DefaultMapContextDrawer.class;
+
+	private Map legends = Collections.synchronizedMap(new HashMap());
+
+	private Map legendReaders = Collections.synchronizedMap(new HashMap());
+
+	private Map legendWriters = Collections.synchronizedMap(new HashMap());
+
+	private String defaultVectorLegend;
+
+        private ObservableHelper observableHelper = new ObservableHelper();
+
+        private File colorTableLibraryFolder = null;
+        
+	public MapContext createMapContext() {
+                MapContext mapcontext = new MapContext(new ViewPort());
+		return (MapContext) notifyObservers(CREATE_MAPCONTEXT, mapcontext).getValue();
+	}
+	
+	public SymbolManager getSymbolManager() {
+		return MapContextLocator.getSymbolManager();
+	}
+
+	private SymbolPreferences getSymbolPreferences() {
+		return getSymbolManager().getSymbolPreferences();
+	}
+
+	public String getSymbolLibraryPath() {
+		return getSymbolPreferences().getSymbolLibraryPath();
+	}
+
+	public void setSymbolLibraryPath(String symbolLibraryPath) {
+		getSymbolPreferences().setSymbolLibraryPath(symbolLibraryPath);
+	}
+
+	public void resetSymbolLibraryPath() {
+		getSymbolPreferences().resetSymbolLibraryPath();
+	}
+
+	public Color getDefaultSymbolColor() {
+		return getSymbolPreferences().getDefaultSymbolColor();
+	}
+
+	public Color getDefaultSymbolFillColor() {
+		return getSymbolPreferences().getDefaultSymbolFillColor();
+	}
+
+	public Font getDefaultSymbolFont() {
+		return getSymbolPreferences().getDefaultSymbolFont();
+	}
+
+	public String getSymbolFileExtension() {
+		return getSymbolPreferences().getSymbolFileExtension();
+	}
+
+	public boolean isDefaultSymbolFillColorAleatory() {
+		return getSymbolPreferences().isDefaultSymbolFillColorAleatory();
+	}
+
+	public void resetDefaultSymbolColor() {
+		getSymbolPreferences().resetDefaultSymbolColor();
+	}
+
+	public void resetDefaultSymbolFillColor() {
+		getSymbolPreferences().resetDefaultSymbolFillColor();
+	}
+
+	public void resetDefaultSymbolFillColorAleatory() {
+		getSymbolPreferences().resetDefaultSymbolFillColorAleatory();
+	}
+
+	public void resetDefaultSymbolFont() {
+		getSymbolPreferences().resetDefaultSymbolFont();
+	}
+
+	public void setDefaultSymbolColor(Color defaultSymbolColor) {
+		getSymbolPreferences().setDefaultSymbolColor(defaultSymbolColor);
+	}
+
+	public void setDefaultSymbolFillColor(Color defaultSymbolFillColor) {
+		getSymbolPreferences().setDefaultSymbolFillColor(defaultSymbolFillColor);
+	}
+
+	public void setDefaultSymbolFillColorAleatory(
+			boolean defaultSymbolFillColorAleatory) {
+		getSymbolPreferences().setDefaultSymbolFillColorAleatory(
+				defaultSymbolFillColorAleatory);
+	}
+
+	public void setDefaultSymbolFont(Font defaultSymbolFont) {
+		getSymbolPreferences().setDefaultSymbolFont(defaultSymbolFont);
+	}
+
+	public void setSymbolFileExtension(String extension) {
+		getSymbolPreferences().setSymbolFileExtension(extension);
+	}
+
+	public int getDefaultCartographicSupportMeasureUnit() {
+		return getSymbolPreferences().getDefaultCartographicSupportMeasureUnit();
+	}
+
+	public void setDefaultCartographicSupportMeasureUnit(
+			int defaultCartographicSupportMeasureUnit) {
+		getSymbolPreferences().setDefaultCartographicSupportMeasureUnit(
+				defaultCartographicSupportMeasureUnit);
+	}
+
+	public int getDefaultCartographicSupportReferenceSystem() {
+		return getSymbolPreferences().getDefaultCartographicSupportReferenceSystem();
+	}
+
+	public void setDefaultCartographicSupportReferenceSystem(
+			int defaultCartographicSupportReferenceSystem) {
+		getSymbolPreferences().setDefaultCartographicSupportReferenceSystem(
+				defaultCartographicSupportReferenceSystem);
+	}
+
+	public MapContextDrawer createMapContextDrawerInstance(Class drawerClazz)
+	throws MapContextException {
+		return createMapContextDrawerInstance(drawerClazz, "NONE");
+	}
+
+	public MapContextDrawer createDefaultMapContextDrawerInstance()
+	throws MapContextException {
+
+		return createMapContextDrawerInstance(drawerClazz, "default");
+	}
+
+	private MapContextDrawer createMapContextDrawerInstance(Class drawerClazz,
+			String name) throws RegisteredClassInstantiationException {
+		try {
+                         MapContextDrawer drawer = (MapContextDrawer) drawerClazz.newInstance();
+                         notifyObservers( CREATE_MAPCONTEXT_DRAWER, drawer);
+			return drawer;
+		} catch (Exception ex) {
+			throw new RegisteredClassInstantiationException(
+					MapContextDrawer.class, drawerClazz, name, ex);
+		}
+	}
+
+	public void setDefaultMapContextDrawer(Class drawerClazz)
+	throws MapContextException {
+
+		validateMapContextDrawer(drawerClazz);
+		this.drawerClazz = drawerClazz;
+                notifyObservers( SET_MAPCONTEXT_DRAWER, drawerClazz);
+	}
+
+	public void validateMapContextDrawer(Class drawerClazz)
+	throws MapContextException {
+		if (!MapContextDrawer.class.isAssignableFrom(drawerClazz)) {
+			throw new InvalidRegisteredClassException(MapContextDrawer.class,
+					drawerClazz, "UNKNOWN");
+		}
+	}
+
+	public GraphicLayer createGraphicsLayer(IProjection projection) {
+		DefaultGraphicLayer layer = new DefaultGraphicLayer();
+		try {
+			layer.initialize(projection);	
+			layer.setLegend((IVectorLegend)createLegend(IVectorialUniqueValueLegend.LEGEND_NAME));
+		} catch (Exception e) {
+			logger.error("Error initializing the graphics layer", e);
+		}
+                return (GraphicLayer) notifyObservers( CREATE_GRAPHICS_LAYER, layer).getValue();
+	}
+
+	public String getDefaultVectorLegend() {
+		return defaultVectorLegend;
+	}
+
+	public void setDefaultVectorLegend(String defaultVectorLegend) {
+		this.defaultVectorLegend = defaultVectorLegend;
+	}
+
+	public void registerLegend(String legendName, Class legendClass)
+	throws MapContextRuntimeException {
+
+		if (legendClass == null || !ILegend.class.isAssignableFrom(legendClass)) {
+			throw new InvalidRegisteredClassException(ILegend.class,
+					legendClass, legendName);
+		}
+
+		legends.put(legendName, legendClass);
+                notifyObservers( REGISTER_LEGEND, legendName, legendClass);
+	}
+
+	public ILegend createLegend(String legendName)
+	throws MapContextRuntimeException {
+		Class legendClass = (Class) legends.get(legendName);
+
+		if (legendClass != null) {
+			try {
+                                ILegend legend = (ILegend) legendClass.newInstance();
+                                return (ILegend) notifyObservers( CREATE_LEGEND, legend).getValue();
+			} catch (InstantiationException e) {
+				throw new RegisteredClassInstantiationException(ILegend.class,
+						legendClass, legendName, e);
+			} catch (IllegalAccessException e) {
+				throw new RegisteredClassInstantiationException(ILegend.class,
+						legendClass, legendName, e);
+			}
+		}
+		return null;
+	}
+
+    public IVectorLegend createDefaultVectorLegend(int shapeType)
+    throws MapContextRuntimeException {
+        try {
+            // Create legend
+            IVectorLegend legend =
+                (IVectorLegend) createLegend(getDefaultVectorLegend());
+            if (legend == null) {
+                return null;
+            }
+            // Set legend values
+            legend.setShapeType(shapeType);
+            ISymbol symbol = getSymbolManager().createSymbol(shapeType);
+            if( symbol == null ) {
+                String msg = "Can't create a legend for the shape type "+shapeType+". The type can be incorrect or there is not registered a symbol by default for that value. If this a was obtained from the store settings, review your FeatureType have correctly configured this value.";
+                throw new RuntimeException(msg);
+            }
+            legend.setDefaultSymbol(symbol);
+            return legend;
+        } catch(Exception e) {
+            throw new MapContextRuntimeException(e);
+        }
+    }
+
+    // =============================================================
+    // Legend reading/writing
+    
+	public void registerLegendReader(String format, Class readerClass)
+	throws MapContextRuntimeException {
+		if (readerClass == null
+				|| !ILegendReader.class.isAssignableFrom(readerClass)) {
+			throw new InvalidRegisteredClassException(ILegendReader.class,
+					readerClass, format);
+		}
+
+		legendReaders.put(format, readerClass);
+                notifyObservers( REGISTER_LEGEND_READER, format, readerClass);
+	}
+	
+
+	public ILegendReader createLegendReader(String format)
+	throws MapContextRuntimeException {
+		Class legendReaderClazz = (Class) legendReaders.get(format);
+
+		if (legendReaderClazz != null) {
+			try {
+                                ILegendReader reader = (ILegendReader) legendReaderClazz.newInstance();
+                                return (ILegendReader) notifyObservers( CREATE_LEGEND_READER, reader).getValue();
+			} catch (InstantiationException e) {
+				throw new RegisteredClassInstantiationException(
+						ILegendReader.class, legendReaderClazz, format, e);
+			} catch (IllegalAccessException e) {
+				throw new RegisteredClassInstantiationException(
+						ILegendReader.class, legendReaderClazz, format, e);
+			}
+		}
+		return null;
+	}
+
+	public void registerLegendWriter(Class legendClass, String format,
+			Class writerClass) throws MapContextRuntimeException {
+		if (writerClass == null
+				|| !ILegendWriter.class.isAssignableFrom(writerClass)
+				|| legendClass == null
+				|| !ILegend.class.isAssignableFrom(legendClass)) {
+		    
+			throw new InvalidRegisteredClassException(ILegendWriter.class,
+					writerClass, format.concat("-").concat(
+					    legendClass == null ? "Null" : legendClass.getName()));
+		}
+
+		Map legendFormatWriters = (Map) legendWriters.get(format);
+
+		synchronized (legendWriters) {
+			if (legendFormatWriters == null) {
+				legendFormatWriters = Collections
+				.synchronizedMap(new HashMap());
+				legendWriters.put(format, legendFormatWriters);
+			}
+		}
+		legendFormatWriters.put(legendClass, writerClass);
+                notifyObservers( REGISTER_LEGEND_WRITER, format, writerClass);
+	}
+
+	public ILegendWriter createLegendWriter(Class legendClass, String format)
+	throws MapContextRuntimeException {
+	    
+	    if (legendClass == null || format == null) {
+	        return null;
+	    }
+	    
+		Map legendFormatWriters = getLegendWritersForFormat(format);
+
+		if (legendFormatWriters != null) {
+			Class legendWriterClazz = (Class) legendFormatWriters
+			.get(legendClass);
+
+			if (legendWriterClazz != null) {
+			    /*
+			     * Found exact match
+			     */
+				try {
+    					ILegendWriter writer = (ILegendWriter) legendWriterClazz.newInstance();
+                                        return (ILegendWriter) notifyObservers( CREATE_LEGEND_READER, writer).getValue();
+				} catch (InstantiationException e) {
+					throw new RegisteredClassInstantiationException(
+							ILegendWriter.class, legendWriterClazz, format
+							.concat("-").concat(
+							    legendClass == null ? "Null" : legendClass.getName()), e);
+				} catch (IllegalAccessException e) {
+					throw new RegisteredClassInstantiationException(
+							ILegendWriter.class, legendWriterClazz, format
+							.concat("-").concat(
+							    legendClass == null ? "Null" : legendClass.getName()), e);
+				}
+			} else {
+			    /*
+			     * Trying to find superclass/superinterface of parameter
+			     */
+			    try {
+			        return getSuperClassLegendWriter(legendFormatWriters, legendClass);
+			    } catch (Exception exc) {
+			        throw new MapContextRuntimeException(exc);
+			    }
+			}
+		}
+		return null;
+	}
+
+	private ILegendWriter getSuperClassLegendWriter(Map clsToWtr, Class legclass)
+	throws Exception {
+	    
+	    if (!ILegend.class.isAssignableFrom(legclass)) {
+	        // Class is not a legend
+	        return null;
+	    }
+	    
+	    Iterator kiter = clsToWtr.keySet().iterator();
+	    Object oitem = null;
+        Class citem = null;
+	    while (kiter.hasNext()) {
+	        oitem = kiter.next();
+	        if (oitem instanceof Class) {
+	            citem = (Class) oitem; 
+	            if (citem.isAssignableFrom(legclass)) {
+	                /*
+	                 * Found superclass/superinterface
+	                 */
+	                citem = (Class) clsToWtr.get(oitem);
+	                return (ILegendWriter) citem.newInstance();
+	            }
+	        }
+	    }
+	    /*
+	     * No superclass/superinterface found
+	     */
+        return null;
+    }
+
+    private Map getLegendWritersForFormat(String format) {
+		return (Map) legendWriters.get(format);
+	}
+	
+    public List getLegendReadingFormats() {
+        List resp = new ArrayList();
+        Iterator iter = legendReaders.keySet().iterator();
+        while (iter.hasNext()) {
+            resp.add(iter.next());
+        }
+        return resp;
+    }
+
+    public List getLegendWritingFormats() {
+        List resp = new ArrayList();
+        Iterator iter = legendWriters.keySet().iterator();
+        while (iter.hasNext()) {
+            resp.add(iter.next());
+        }
+        return resp;
+    }
+	// =============================================================
+
+	public IMultiLayerSymbol createMultiLayerSymbol(int shapeType)
+	throws MapContextRuntimeException {
+                IMultiLayerSymbol symbol = getSymbolManager().createMultiLayerSymbol(shapeType);
+                return (IMultiLayerSymbol) notifyObservers( CREATE_SYMBOL, symbol).getValue();
+	}
+
+	public IMultiLayerSymbol createMultiLayerSymbol(String symbolName)
+	throws MapContextRuntimeException {
+                IMultiLayerSymbol symbol = getSymbolManager().createMultiLayerSymbol(symbolName);
+                return (IMultiLayerSymbol) notifyObservers( CREATE_SYMBOL, symbol).getValue();
+	}
+
+	public ISymbol createSymbol(int shapeType, Color color)
+	throws MapContextRuntimeException {
+                ISymbol symbol = getSymbolManager().createSymbol(shapeType, color);
+                return (ISymbol) notifyObservers( CREATE_SYMBOL, symbol).getValue();
+	}
+
+	public ISymbol createSymbol(int shapeType)
+	throws MapContextRuntimeException {
+                ISymbol symbol = getSymbolManager().createSymbol(shapeType);
+                return (ISymbol) notifyObservers( CREATE_SYMBOL, symbol).getValue();
+	}
+
+	public ISymbol createSymbol(String symbolName, Color color)
+	throws MapContextRuntimeException {
+                ISymbol symbol = getSymbolManager().createSymbol(symbolName, color);
+                return (ISymbol) notifyObservers( CREATE_SYMBOL, symbol).getValue();
+	}
+
+	public ISymbol createSymbol(String symbolName)
+	throws MapContextRuntimeException {
+                ISymbol symbol = getSymbolManager().createSymbol(symbolName);
+                return (ISymbol) notifyObservers( CREATE_SYMBOL, symbol).getValue();
+	}
+
+	public IWarningSymbol getWarningSymbol(String message, String symbolDesc,
+			int symbolDrawExceptionType) throws MapContextRuntimeException {
+		return getSymbolManager().getWarningSymbol(message, symbolDesc,
+				symbolDrawExceptionType);
+	}
+
+	public ISymbol[] loadSymbols(File folder, FileFilter filter)
+	throws SymbolException {
+                ISymbol[] symbols = getSymbolManager().loadSymbols(folder, filter);
+                return (ISymbol[]) notifyObservers( LOAD_SYMBOLS, symbols).getValue();
+	}
+
+	public ISymbol[] loadSymbols(File folder) throws SymbolException {
+                ISymbol[] symbols = getSymbolManager().loadSymbols(folder);
+                return (ISymbol[]) notifyObservers( LOAD_SYMBOLS, symbols).getValue();
+	}
+
+	public void registerMultiLayerSymbol(String symbolName, Class symbolClass)
+	throws MapContextRuntimeException {
+		getSymbolManager().registerMultiLayerSymbol(symbolName, symbolClass);
+                notifyObservers( REGISTER_MULTILAYER_SYMBOL, symbolName, symbolClass);
+	}
+
+	public void registerMultiLayerSymbol(String symbolName, int[] shapeTypes,
+			Class symbolClass) throws MapContextRuntimeException {
+		getSymbolManager().registerMultiLayerSymbol(symbolName, shapeTypes,
+				symbolClass);
+                notifyObservers( REGISTER_MULTILAYER_SYMBOL, symbolName, symbolClass, shapeTypes);
+	}
+
+	public void registerSymbol(String symbolName, Class symbolClass)
+	throws MapContextRuntimeException {
+		getSymbolManager().registerSymbol(symbolName, symbolClass);
+                notifyObservers( REGISTER_SYMBOL, symbolName, symbolClass);
+	}
+
+	public void registerSymbol(String symbolName, int[] shapeTypes,
+			Class symbolClass) throws MapContextException {
+		getSymbolManager().registerSymbol(symbolName, shapeTypes, symbolClass);
+                notifyObservers( REGISTER_SYMBOL, symbolName, symbolClass, shapeTypes);
+	}
+
+	public void saveSymbol(ISymbol symbol, String fileName, File folder,
+			boolean overwrite) throws SymbolException {
+		getSymbolManager().saveSymbol(symbol, fileName, folder, overwrite);
+	}
+
+	public void saveSymbol(ISymbol symbol, String fileName, File folder)
+	throws SymbolException {
+		getSymbolManager().saveSymbol(symbol, fileName, folder);
+	}
+
+	public FLayer createLayer(String layerName, DataStoreParameters parameters)
+	throws LoadLayerException {
+                FLayer layer = LayerFactory.getInstance().createLayer(layerName, parameters);
+                return (FLayer) notifyObservers( CREATE_LAYER, layer).getValue();
+	}
+
+	public FLayer createLayer(String layerName, DataStore store)
+	throws LoadLayerException {
+                FLayer layer = LayerFactory.getInstance().createLayer(layerName, store);
+                return (FLayer) notifyObservers( CREATE_LAYER, layer).getValue();
+	}
+
+    public ILegend getLegend(DataStore dataStore) {
+        ILegend legend = null;
+
+        File file = getResourcePath(dataStore, SymbolManager.LEGEND_FILE_EXTENSION.substring(1));
+        try {
+            if ( (file != null) && (file.exists()) ) {
+                PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+                FileInputStream is = new FileInputStream(file);
+                legend = (ILegend) persistenceManager.getObject(is);
+                is.close();
+            }
+        } catch (FileNotFoundException e) {
+            logger.error("Legend not found", e);
+        } catch (IOException e) {
+            logger.error("Error reading the legend", e);
+        }
+
+        //If the legend is null, next option is to check if the store has the getLegend method
+        if ( legend == null ) {
+            try {
+                legend = (IVectorLegend) dataStore.invokeDynMethod("getLegend", null);
+            } catch (DynMethodNotSupportedException e) {
+                logger.debug("This store {} does not provide a legend.",
+                        dataStore.getName());
+            } catch (DynMethodException e) {
+                logger.error(
+                        "Can't load the specific legend provided for the store {}.",
+                        dataStore.getName(), e);
+            }
+        }
+
+        //If legend is null, last step is just try to create the legend by default
+        if ( legend == null ) {
+            FeatureType featureType;
+            try {
+                featureType = (((FeatureStore) dataStore).getDefaultFeatureType());
+                int indexGeom = featureType.getDefaultGeometryAttributeIndex();
+                if( indexGeom <0 ) {
+                    throw new IllegalArgumentException("The layer don't has a geometry column.");
+                }
+                int typeShape = featureType.getAttributeDescriptor(indexGeom).getGeometryType();
+                legend = createDefaultVectorLegend(typeShape);
+            } catch (DataException e) {
+                logger.error("Error getting the default feature type", e);
+            }
+        }
+
+        return legend;
+    }
+
+    public ILabelingStrategy getLabelingStrategy(DataStore dataStore) {
+        ILabelingStrategy labelingStrategy = null;
+
+        File file = getResourcePath(dataStore, SymbolManager.LABELINGSTRATEGY_FILE_EXTENSION.substring(1));
+        try{
+            if ((file != null) && (file.exists())){
+                PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+                FileInputStream is = new FileInputStream(file);
+                labelingStrategy = (ILabelingStrategy) persistenceManager.getObject(is);
+                is.close();
+            }
+        } catch (FileNotFoundException e){
+            logger.error("Label strategy not found", e);
+        } catch (IOException e) {
+            logger.error("Error reading the labeling strategy", e);
+        }
+        
+        //If the legend is null, next option is to check if the store has the getLegend method
+        if (labelingStrategy == null){
+            try {
+                labelingStrategy =
+                    (ILabelingStrategy) dataStore.invokeDynMethod("getLabeling",
+                        null);
+            } catch (DynMethodNotSupportedException e1) {
+                labelingStrategy = null;
+            } catch (DynMethodException e1) {
+                logger.error("Can't load the specific lebeling strategy provided for the datastore {}.",
+                    dataStore.getName(),
+                    e1);
+            }
+        }        
+        
+        return labelingStrategy;
+    }
+    
+    private Object call(Object instance, String methodName, Class[] signature, Object[] params) {
+        try {
+            Method method = instance.getClass().getMethod(methodName, signature);
+            if( method == null ) {
+                return null;
+            }
+            Object value = method.invoke(instance, params);
+            return value;
+        } catch (NoSuchMethodException ex) {
+            return null;
+        } catch (SecurityException ex) {
+            return null;
+        } catch (IllegalAccessException ex) {
+            return null;
+        } catch (IllegalArgumentException ex) {
+            return null;
+        } catch (InvocationTargetException ex) {
+            return null;
+        }
+    }
+
+    private File getResourcePath(DataStore dataStore, String resource){
+        //Loading the file from a store based on file
+        DataServerExplorer explorer = null;
+        try {
+            explorer = dataStore.getExplorer();
+            if( explorer==null ) {
+                return null;
+            }
+            return (File)call(explorer,"getResourcePath",
+                    new Class[] {DataStore.class,String.class},
+                    new Object[] {dataStore,resource});
+        } catch (Exception e) {
+            logger.warn(
+                "Can't locate a specific legend provided by the explorer "
+                + explorer, e);
+            return null;
+        } finally {
+            if( explorer!=null ) {
+                explorer.dispose();
+                explorer = null;
+            }
+        }
+    }
+
+    private Map iconLayers = new HashMap(); //  (Map<String storeProviderName, String iconName>)
+    
+    public void registerIconLayer(String storeProviderName, String iconName) {
+    	if( storeProviderName == null || iconName == null ) {
+    		logger.info("registerIconLayer, storeProviderName or iconName are null");
+    		return;
+    	}
+        String storeName = storeProviderName.trim().toLowerCase();
+    	if( storeName.length()==0 || iconName.trim().length()==0 ) {
+    		logger.info("registerIconLayer, invalid storeProviderName or iconName");
+    		return;
+    	}
+    	iconLayers.put(storeName, iconName);
+        notifyObservers( REGISTER_ICON_LAYER, storeName, iconName);
+    }
+    
+    public String getIconLayer(DataStore store) {
+    	String name = (String) iconLayers.get(store.getProviderName().trim().toLowerCase());
+    	if( name == null ) {
+    		return "layer-icon";
+    	}
+    	return name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontext.MapContextManager#getDefaultCRS()
+     */
+    public IProjection getDefaultCRS() {
+        IProjection crs = CRSFactory.getCRS("EPSG:4326");
+        return (IProjection) notifyObservers( GET_DEFAULT_CRS, crs).getValue();
+    }
+
+    public Notification notifyLoadMapContext(MapContext mapContext) {    
+        return this.observableHelper.notifyObservers(this, LOAD_MAPCONTEXT, mapContext);
+    }
+    
+    public Notification notifyLoadLayer(FLayer layer) {    
+        return this.observableHelper.notifyObservers(this, LOAD_LAYER, layer);
+    }
+    
+    public void addObserver(Observer o) {
+        this.observableHelper.addObserver(o);
+    }
+
+    public void deleteObserver(Observer o) {
+        this.observableHelper.deleteObserver(o);
+    }
+
+    public void deleteObservers() {
+        this.observableHelper.deleteObservers();
+    }
+
+    protected Notification notifyObservers(String type, Object value) {
+        return this.observableHelper.notifyObservers(this, type, value);  
+    }
+
+    protected Notification notifyObservers(String type, Object value1, Object value2) {
+        return this.observableHelper.notifyObservers(this, type, value1, value2);
+    }
+
+    protected Notification notifyObservers(String type, Object value1, Object value2, Object value3) {
+        return this.observableHelper.notifyObservers(this, type, value1, value2, value3);
+    }
+
+    public File getColorTableLibraryFolder() {
+        if (this.colorTableLibraryFolder == null) {
+            // Provide a default value to the location for the color
+            // table library.
+            String colorTableLibraryPath = System.getProperty("user.home")
+                    + File.separator
+                    + "gvSIG"
+                    + File.separator
+                    + "colortable";
+            this.colorTableLibraryFolder = new File(colorTableLibraryPath);
+        }
+        return this.colorTableLibraryFolder;
+    }
+
+    public void setColorTableLibraryFolder(File colorTableLibraryFolder) {
+        this.colorTableLibraryFolder = colorTableLibraryFolder;
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/RegisteredClassInstantiationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/RegisteredClassInstantiationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/RegisteredClassInstantiationException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {gvSIG}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.impl;
+
+import org.gvsig.fmap.mapcontext.MapContextRuntimeException;
+
+/**
+ * Exception thrown when a class instance could not be created.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class RegisteredClassInstantiationException extends
+		MapContextRuntimeException {
+
+	private static final long serialVersionUID = -2797661681885864660L;
+
+	private static final String KEY = "registered_class_instantiation_exception";
+
+	private static final String MESSAGE = "Unable to create an object instance"
+			+ "of the type %(typeToImplement) from the class %(registeredClass)"
+			+ ", registered with the name %(registeredName)";
+
+	public RegisteredClassInstantiationException(Class typeToImplement,
+			Class registeredClass, String registeredName, Throwable cause) {
+		super(MESSAGE, cause, KEY, serialVersionUID);
+		setValue("typeToImplement", typeToImplement);
+		setValue("registeredClass", registeredClass);
+		setValue("registeredName", registeredName);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/RegisteredClassInstantiationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/InvalidRegisteredClassException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/InvalidRegisteredClassException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/InvalidRegisteredClassException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {gvSIG}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.impl;
+
+import org.gvsig.fmap.mapcontext.MapContextRuntimeException;
+
+/**
+ * Exception thrown when a null class or an implementation class which does
+ * not implements the required type, is registered.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class InvalidRegisteredClassException extends MapContextRuntimeException {
+
+	private static final long serialVersionUID = -2797661681885864660L;
+
+	private static final String KEY = "invalid_registered_class_exception";
+
+	private static final String MESSAGE = "The provided class %(registeredClass), "
+			+ "registered with the name %(registeredName), is null or does not "
+			+ "implements the %(typeToImplement) type";
+
+	public InvalidRegisteredClassException(Class typeToImplement,
+			Class registeredClass, String registeredName) {
+		super(MESSAGE, KEY, serialVersionUID);
+		setValue("typeToImplement", typeToImplement);
+		setValue("registeredName", registeredName);
+		setValue("registeredClass", registeredClass);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/InvalidRegisteredClassException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/MapContextImplLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/MapContextImplLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/MapContextImplLibrary.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.mapcontext.impl;
+
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.impl.DefaultSymbolManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Library for the default implementation of the MapContext library.
+ * 
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class MapContextImplLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsImplementationOf(MapContextLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+		MapContextLocator
+				.registerMapContextManager(DefaultMapContextManager.class);
+		MapContextLocator.registerSymbolManager(DefaultSymbolManager.class);
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/MapContextImplLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContext.java	(revision 42196)
@@ -0,0 +1,1739 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.Projected;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.events.ErrorEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.AtomicEventListener;
+import org.gvsig.fmap.mapcontext.events.listeners.ErrorListener;
+import org.gvsig.fmap.mapcontext.events.listeners.EventBuffer;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.impl.DefaultMapContextManager;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.LayerDrawEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerDrawingListener;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+import org.gvsig.fmap.mapcontext.layers.operations.Classifiable;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+import org.gvsig.fmap.mapcontext.rendering.strategies.SelectedEnvelopeVisitor;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+import org.gvsig.tools.visitor.Visitor;
+
+
+/**
+ * <p>The <code>MapContext</code> class represents the model and a part of the control and view around graphical layers
+ * used by {@link MapControl MapControl}.</p>
+ *
+ * <p>An instance of <code>MapContext</code> is made up with:
+ * <ul>
+ * <li>a hierarchy of {@link FLayers FLayers} nodes
+ * <li>a {@link GraphicLayer GraphicLayer} layer
+ * <li>a {@link ViewPort ViewPort}
+ * <li>an {@link EventBuffer EventButter}
+ * <li>some {@link com.iver.cit.gvsig.fmap.layers.LegendListener LegendListener}s
+ * <li>some {@link LayerDrawingListener LayerDrawingListener}s
+ * <li>some {@link ErrorListener ErrorListener}s
+ * </ul>
+ * </p>
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class MapContext extends AbstractDisposable implements Projected,
+		Persistent, Observer {
+	/**
+	 * <p>Defines the value which a unit of a distance measurement must be divided to obtain its equivalent <b>in meters</b>.</p>
+	 *
+	 * <p><b><i>Conversion values of distance measurements:</i></b>
+	 * <ul>
+	 *  <li><code>MapContext.CHANGEM[0]</code>: kilometer
+	 *  <li><code>MapContext.CHANGEM[1]</code>: meter
+	 *  <li><code>MapContext.CHANGEM[2]</code>: centimeter
+	 *  <li><code>MapContext.CHANGEM[3]</code>: millimeter
+	 *  <li><code>MapContext.CHANGEM[4]</code>: international statute mile
+	 *  <li><code>MapContext.CHANGEM[5]</code>: yard
+	 *  <li><code>MapContext.CHANGEM[6]</code>: foot
+	 *  <li><code>MapContext.CHANGEM[7]</code>: inch
+	 *  <li><code>MapContext.CHANGEM[8]</code>: grade
+	 * </ul>
+	 *
+	 * <p><h3>Examples:</h3>
+	 * <pre>1 international statute mile / MapContext.CHANGEM[4] = X meters</pre>
+	 * <pre>1 kilometer / MapContext.CHANGEM[0] = X meters</pre>
+	 * <pre>1 grade / MapContext.CHANGEM[8] = X meters</pre>
+	 * </p>
+	 *
+	 * <p><h3>Grade conversion value: <code>MapContext.CHANGEM[8]</code></h3>
+	 * The value of <code>MapContext.CHANGEM[8]</code> represents the meters of a straight line between two
+	 *  points on the Earth surface that are 1 grade far each other of the center of the Earth. This value has been calculated using
+	 *  a radius approximated of R<sub>Earth</sub>=6.37846082678100774672e6 meters, according these equations:
+	 * <pre>D = 2 * (sin (1)) * R<sub>Earth</sub></pre>
+	 * <pre>MapContext.CHANGEM[8] = 1 / D</pre>
+	 * <h4>Explanation:</h4>
+	 * We get an isosceles triangle with the center of the Earth and the 2 points on the surface. This triangle can be divided into
+	 * two rectangle triangles. We know two values, the angle of 1 grade, that will be 0.50 grades in each triangle, and the Earth radius that
+	 * is the hypotenuse. Then we apply trigonometry and get the distance <i>D</i> between both points on the Earth surface.</p>
+	 * <p>Now we only must invert that value to obtain <code>MapContext.CHANGEM[8]</code>.</p>
+	 *@deprecated use getDistanceTrans2Meter()
+	 */
+	public static final double[] CHANGEM = { 1000, 1, 0.01, 0.001, 1609.344,
+			0.9144, 0.3048, 0.0254, 1/8.983152841195214E-6 };
+
+
+	public static ArrayList AREANAMES=new ArrayList();
+	public static ArrayList AREAABBR=new ArrayList();
+	public static ArrayList AREATRANS2METER=new ArrayList();
+
+	public static ArrayList DISTANCENAMES=new ArrayList();
+	public static ArrayList DISTANCEABBR=new ArrayList();
+	public static ArrayList DISTANCETRANS2METER=new ArrayList();
+
+	static{
+		MapContext.addDistanceUnit("Kilometros","Km",1000);
+    	MapContext.addDistanceUnit("Metros","m",1);
+    	MapContext.addDistanceUnit("Centimetros","cm",0.01);
+    	MapContext.addDistanceUnit("Milimetros","mm",0.001);
+    	MapContext.addDistanceUnit("Millas","mi",1609.344);
+    	MapContext.addDistanceUnit("Yardas","Ya",0.9144);
+    	MapContext.addDistanceUnit("Pies","ft",0.3048);
+    	MapContext.addDistanceUnit("Pulgadas","inche",0.0254);
+    	MapContext.addDistanceUnit("Grados","�",1/8.983152841195214E-6);
+
+    	MapContext.addAreaUnit("Kilometros","Km",true,1000);
+    	MapContext.addAreaUnit("Metros","m",true,1);
+    	MapContext.addAreaUnit("Centimetros","cm",true,0.01);
+    	MapContext.addAreaUnit("Milimetros","mm",true,0.001);
+    	MapContext.addAreaUnit("Millas","mi",true,1609.344);
+    	MapContext.addAreaUnit("Yardas","Ya",true,0.9144);
+    	MapContext.addAreaUnit("Pies","ft",true,0.3048);
+    	MapContext.addAreaUnit("Pulgadas","inche",true,0.0254);
+    	MapContext.addAreaUnit("Grados","�",true,1/8.983152841195214E-6);
+
+
+    }
+	
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	
+	private static final MapContextManager mapContextManager = MapContextLocator
+            .getMapContextManager(); 
+	
+	private static final Logger logger = LoggerFactory.getLogger(MapContext.class);
+
+	/**
+	 * <p>Determines the number of frames.</p>
+	 *
+	 * <p>Number of updates per second that the timer will invoke repaint this component.</p>
+	 */
+    private static int drawFrameRate = 3;
+    /**
+	 * <p>Returns the draw frame rate.</p>
+	 *
+	 * <p>Draw frame rate is the number of repaints of this <code>MapControl</code> instance that timer invokes per second.</p>
+	 *
+	 * @return number of repaints of this <code>MapControl</code> instance that timer invokes per second
+	 *
+	 * @see #applyFrameRate()
+	 * @see #setDrawFrameRate(int)
+	 */
+	public static int getDrawFrameRate() {
+		return drawFrameRate;
+	}
+
+	/**
+	 * <p>Sets the draw frame rate.</p>
+	 *
+	 * <p>Draw frame rate is the number of repaints of this <code>MapControl</code> instance that timer invokes per second.</p>
+	 *
+	 * @param drawFrameRate number of repaints of this <code>MapControl</code> instance that timer invokes per second
+	 *
+	 * @see #applyFrameRate()
+	 * @see #getDrawFrameRate()
+	 */
+	public static void setDrawFrameRate(int dFR) {
+		drawFrameRate = dFR;
+	}
+	public static void addAreaUnit(String name, String abbr,boolean isLinear,double trans2meter){
+		if (!AREANAMES.contains(name)){
+			AREANAMES.add(name);
+			String pow="";
+			if (isLinear) {
+				pow=String.valueOf((char)178);
+			}
+			AREAABBR.add(abbr+pow);
+			AREATRANS2METER.add(new Double(trans2meter));
+		}
+	}
+	public static String[] getAreaNames(){
+		return (String[])AREANAMES.toArray(new String[0]);
+	}
+	public static String[] getAreaAbbr(){
+		return (String[])AREAABBR.toArray(new String[0]);
+	}
+	public static double[] getAreaTrans2Meter(){
+		int size=AREATRANS2METER.size();
+		double[] trans2meters=new double[size];
+		for (int i = 0; i < size; i++) {
+			trans2meters[i]=((Double)AREATRANS2METER.get(i)).doubleValue();
+		}
+		return trans2meters;
+	}
+	public static String getOfLinear(int i) {
+		if (((String)AREAABBR.get(i)).toLowerCase().endsWith(String.valueOf((char)178))){
+			return String.valueOf((char)178);
+		}
+		return "";
+	}
+	public static void addDistanceUnit(String name, String abbr,double trans2meter){
+		if (!DISTANCENAMES.contains(name)){
+			DISTANCENAMES.add(name);
+			DISTANCEABBR.add(abbr);
+			DISTANCETRANS2METER.add(new Double(trans2meter));
+		}
+	}
+	public static String[] getDistanceNames(){
+		return (String[])DISTANCENAMES.toArray(new String[0]);
+	}
+	
+	public String getDistanceName() {
+		return (String) DISTANCENAMES.get( this.getViewPort().getDistanceUnits() );
+	}
+	
+	public static String[] getDistanceAbbr(){
+		return (String[])DISTANCEABBR.toArray(new String[0]);
+	}
+	public static double[] getDistanceTrans2Meter(){
+		int size=DISTANCETRANS2METER.size();
+		double[] trans2meters=new double[size];
+		for (int i = 0; i < size; i++) {
+			trans2meters[i]=((Double)DISTANCETRANS2METER.get(i)).doubleValue();
+		}
+		return trans2meters;
+	}
+	public static int getDistancePosition(String s){
+		for (int i = 0; i < DISTANCENAMES.size(); i++) {
+			if (DISTANCENAMES.get(i).equals(s)){
+				return i;
+			}
+		}
+		return 0;
+	}
+
+	/**
+	 * <p>Defines the value which a unit of a distance measurement must be divided to obtain its equivalent <b>in centimeters</b>.</p>
+	 *
+	 * <p><b><i>Conversion values of distance measurements:</i></b>
+	 * <ul>
+	 *  <li><code>MapContext.CHANGE[0]</code>: kilometer
+	 *  <li><code>MapContext.CHANGE[1]</code>: meter
+	 *  <li><code>MapContext.CHANGE[2]</code>: centimeter
+	 *  <li><code>MapContext.CHANGE[3]</code>: millimeter
+	 *  <li><code>MapContext.CHANGE[4]</code>: international statute mile
+	 *  <li><code>MapContext.CHANGE[5]</code>: yard
+	 *  <li><code>MapContext.CHANGE[6]</code>: foot
+	 *  <li><code>MapContext.CHANGE[7]</code>: inch
+	 *  <li><code>MapContext.CHANGE[8]</code>: grade
+	 * </ul>
+	 *
+	 * <p><h3>Examples:</h3>
+	 * <pre>1 international statute mile / MapContext.CHANGE[4] = X centimeters</pre>
+	 * <pre>1 kilometer / MapContext.CHANGE[0] = X centimeters</pre>
+	 * <pre>1 grade / MapContext.CHANGE[8] = X centimeters</pre>
+	 * </p>
+	 *
+	 * <p><h3>Grade conversion value: <code>MapContext.CHANGE[8]</code></h3>
+	 * The value of <code>MapContext.CHANGE[8]</code> represents the centimeters of a straight line between two
+	 *  points on the Earth surface that are 1 grade far each other of the center of the Earth. This value has been calculated using
+	 *  a radius approximated of R<sub>Earth</sub>=6.37846082678100774672e6 meters, according these equations:
+	 * <pre>D = 2 * (sin (1)) * R<sub>Earth</sub></pre>
+	 * <pre>MapContext.CHANGE[8] = 1 / D</pre>
+	 * <h4>Explanation:</h4>
+	 * We get an isosceles triangle with the center of the Earth and the 2 points on the surface. This triangle can be divided into
+	 * two rectangle triangles. We know two values, the angle of 1 grade, that will be 0.50 grades in each triangle, and the Earth radius that
+	 * is the hypotenuse. Then we apply trigonometry and get the distance <i>D</i> between both points on the Earth surface.</p>
+	 * <p>Now we only must invert that value to obtain <code>MapContext.CHANGE[8]</code>.</p>
+	 * @deprecated use getDistanceTrans2Meter() * 100
+	 */
+	public static final double[] CHANGE = { 100000, 100, 1, 0.1, 160934.4,
+			91.44, 30.48, 2.54, 1/8.983152841195214E-4 };
+
+	/* Do not alter the order and the values of this array, if you need append values.*/
+	/**
+	 * <p>Gets the name of all distance measurements supported by <code>MapContext</code>.</p>
+	 */
+//	public static final String[] NAMES= {
+//		Messages.getString("Kilometros"),
+//		Messages.getString("Metros"),
+//		Messages.getString("Centimetros"),
+//		Messages.getString("Milimetros"),
+//		Messages.getString("Millas"),
+//		Messages.getString("Yardas"),
+//		Messages.getString("Pies"),
+//		Messages.getString("Pulgadas"),
+//		Messages.getString("Grados"),
+//	};
+
+	public static final int EQUALS = 0;
+
+	public static final int DISJOINT = 1;
+
+	public static final int INTERSECTS = 2;
+
+	public static final int TOUCHES = 3;
+
+	public static final int CROSSES = 4;
+
+	public static final int WITHIN = 5;
+
+	public static final int CONTAINS = 6;
+
+	public static final int OVERLAPS = 7;
+
+	/**
+	 * A hierarchy of {@link FLayers FLayers} nodes.
+	 *
+	 * @see #getLayers()
+	 * @see #print(Graphics2D, double, PrintAttributes)
+	 */
+	protected FLayers layers;
+
+	/**
+	 * A layer with graphical items: geometries and symbols.
+	 *
+	 * @see #getGraphicsLayer()
+	 * @see #setGraphicsLayer(GraphicLayer)
+	 * @see #print(Graphics2D, double, PrintAttributes)
+	 */
+	private GraphicLayer tracLayer = null;
+		//MapContextLocator.getMapContextManager().createGraphicsLayer(getProjection());
+
+	/**
+	 * Information for draw layers in a view.
+	 *
+	 * @see #getViewPort()
+	 * @see #setViewPort(ViewPort)
+	 */
+	private ViewPort viewPort;
+
+	// private ArrayList invalidationListeners = new ArrayList();
+
+	/**
+	 * Array list with all {@link LegendListener LegendListener} registered to this map.
+	 *
+	 * @see #addLayerListener(LegendListener)
+	 * @see #removeLayerListener(LegendListener)
+	 * @see #callLegendChanged()
+	 */
+	private ArrayList legendListeners = new ArrayList();
+
+	/**
+	 * Array list with all {@link LayerDrawingListener LayerDrawingListener} registered to this map.
+	 *
+	 * @see #addLayerDrawingListener(LayerDrawingListener)
+	 * @see #removeLayerDrawListener(LayerDrawingListener)
+	 * @see #fireLayerDrawingEvent(LayerDrawEvent)
+	 */
+	private ArrayList layerDrawingListeners = new ArrayList();
+
+	/**
+	 * <p>Buffer that is used to store and eject events produced on this map:
+	 * <ul>
+	 *  <li>Layer collection events.
+	 *  <li>View port events.
+	 *  <li>Atomic events.
+	 *  <li>Layer events.
+	 *  <li>Legend events on a {@link Classificable Classificable} layer.
+	 *  <li>Selection events on an {@link AlphanumericData AlphanumericData} data layer.
+	 * </ul>
+	 * </p>
+	 *
+	 * @see #addAtomicEventListener(AtomicEventListener)
+	 * @see #removeAtomicEventListener(AtomicEventListener)
+	 * @see #beginAtomicEvent()
+	 * @see #endAtomicEvent()
+	 */
+	private EventBuffer eventBuffer = new EventBuffer();
+
+	/**
+	 * Event listener for the collection of layers of this map.
+	 */
+	private LayerEventListener layerEventListener = null;
+
+	/**
+	 * List with information of all errors produced on all layers.
+	 *
+	 * @see #addLayerError(String)
+	 * @see #getLayersError()
+	 * @see #clearErrors()
+	 */
+	private ArrayList layersError = new ArrayList();
+
+	/**
+	 * Array list with all {@link ErrorListener ErrorListener} registered to this map.
+	 *
+	 * @see #addErrorListener(ErrorListener)
+	 * @see #removeErrorListener(LegendListener)
+	 * @see #reportDriverExceptions(String, List)
+	 */
+	private ArrayList errorListeners = new ArrayList();
+	
+	
+	
+
+	/**
+	 * Layer order manager decides position of layers added to this
+	 * map context.
+	 */
+    private LayerOrderManager orderManager = null;
+
+
+
+
+	// public static ResourceBundle myResourceBundle =
+	// ResourceBundle.getBundle("FMap");
+
+	/**
+	 * <p>Default <i>zoom in</i> factor.</p>
+	 * <p>Doing a <i>zoom in</i> operation, decreases the focal distance and increases the eyesight angle to the surface. This allows view an smaller
+	 * area but with the items bigger.</p>
+	 */
+	public static double ZOOMINFACTOR=2;
+
+	/**
+	 * <p>Default <i>zoom out</i> factor.</p>
+	 * <p>Doing a <i>zoom out</i> operation, increases the focal distance and decreases the eyesight angle to the surface. This allows view a bigger
+	 * area but with the items smaller.</p>
+	 */
+	public static double ZOOMOUTFACTOR=0.5;
+
+	/**
+	 * 	 * Draw version of the context. It's used for know when de componend has
+	 * changed any visualization property
+	 *
+	 *  @see getDrawVersion
+	 *  @see updateDrawVersion
+	 */
+	private long drawVersion= 0L;
+	
+	private long layersVersion = 0L;
+	private long viewPortVersion = 0L;
+	private long graphicsLayerVersion = 0L;
+
+	/**
+	 * Object to Manage Draw of MapContext
+	 */
+	private MapContextDrawer mapContextDrawer= null;
+
+	/**
+	 * Object to Manage Draw of MapContext
+	 */
+	private Class mapContextDrawerClass = null;
+
+	/**
+	 * <p>Color used to represent the selections.</p>
+	 */
+	private static Color selectionColor = Color.YELLOW;
+	private ArrayList layersToSnap = new ArrayList();
+
+
+	/**
+	 * <p>Gets the color used to represent the selections.</p>
+	 *
+	 * @return color used to represent the selections
+	 */
+	public static Color getSelectionColor() {
+		return selectionColor;
+	}
+
+	/**
+	 * <p>Sets the color used to represent the selections.</p>
+	 *
+	 * @param selectionColor color used to represent the selections
+	 */
+	public static void setSelectionColor(Color selectionColor) {
+		MapContext.selectionColor = selectionColor;
+	}
+
+	/**
+	 * <p>Creates a new map context with the drawing information defined in the view port argument, and
+	 *  without layers.</p>
+	 *
+	 * @param vp information for drawing the layers of this map in the available rectangular area according a projection
+	 */
+	public MapContext(ViewPort vp) {
+        this(new FLayers(), vp);
+	}
+
+	public MapContext() { }
+
+	/**
+	 * <p>Creates a new map context with the layers and the drawing information defined in the view port arguments.</p>
+	 *
+	 * @param fLayers the initial hierarchy of nodes of layers that this map will have
+	 * @param vp information for drawing the layers of this map in the available rectangular area according a projection
+	 */
+	public MapContext(FLayers fLayers, ViewPort vp) {
+		this.layers = fLayers;
+		
+		layerEventListener = new LayerEventListener();
+
+		if (layers != null) {
+			layers.setMapContext(this);
+			layers.addLayerCollectionListener(layerEventListener);
+			layers.addLayerCollectionListener(eventBuffer);
+		}
+
+		setViewPort(vp);
+	}
+
+	/**
+	 * <p>Reports to all driver error listeners registered of a bundle of driver exceptions caused in the same map atomic transaction.</p>
+	 *
+	 * @param introductoryText introductory text specified by developer. If <code>null</code>, use ""
+	 * @param driverExceptions list with a bundle of driver exceptions caught during an atomic event
+	 *
+	 * @see #addErrorListener(ErrorListener)
+	 * @see #removeErrorListener(LegendListener)
+	 */
+	public synchronized void reportDriverExceptions(String introductoryText,
+													List driverExceptions){
+		for (int i = 0; i < errorListeners.size(); i++) {
+			((ErrorListener) errorListeners.get(i)).
+				reportDriverExceptions(introductoryText, driverExceptions);
+		}
+	}
+
+	/**
+	 * <p>Adds the specified legend listener (if didn't exist) to receive legend events from this map.</p>
+	 *
+	 * @param listener the legend listener
+	 *
+	 * @see #removeLayerListener(LegendListener)
+	 * @see #callLegendChanged()
+	 */
+	public void addLayerListener(LegendListener listener) {
+		if (!legendListeners.contains(listener)){
+			legendListeners.add(listener);
+		}
+	}
+	// SUGERENCIA DE PABLO
+	//	public void addLegendListener(LegendListener listener) {
+	//		if (!legendListeners.contains(listener))
+	//			legendListeners.add(listener);
+	//	}
+
+	/**
+	 * <p>Adds the specified layer drawing listener to catch and handle drawing events from layers of this map.</p>
+	 *
+	 * @param listener the listener to add
+	 *
+	 * @see #removeLayerDrawListener(LayerDrawingListener)
+	 * @see #fireLayerDrawingEvent(LayerDrawEvent)
+	 */
+	public void addLayerDrawingListener(LayerDrawingListener listener) {
+		layerDrawingListeners.add(listener);
+	}
+
+	/**
+	 * <p>Removes the specified layer drawing listener from this map.</p>
+	 *
+	 * @param listener the listener to remove
+	 *
+	 * @see #addLayerDrawingListener(LayerDrawingListener)
+	 * @see #fireLayerDrawingEvent(LayerDrawEvent)
+	 */
+	public void removeLayerDrawListener(LayerDrawingListener listener) {
+		layerDrawingListeners.remove(listener);
+	}
+
+	/**
+	 * <p>Adds the specified error listener to receive error events from this map.</p>
+	 *
+	 * @param listener the listener to add
+	 *
+	 * @see #removeErrorListener(LegendListener)
+	 * @see #reportDriverExceptions(String, List)
+	 */
+	public void addErrorListener(ErrorListener listener) {
+		errorListeners.add(listener);
+	}
+
+	/**
+	 * <p>Removes the specified error listener from this map.</p>
+	 *
+	 * @param listener the listener to remove
+	 *
+	 * @see #addErrorListener(ErrorListener)
+	 * @see #reportDriverExceptions(String, List)
+	 */
+	public void removeErrorListener(LegendListener listener) {
+		legendListeners.remove(listener);
+	}
+
+	// SUGERENCIA DE PABLO:
+	//public void removeErrorListener(ErrorListener listener) {
+	//	errorListeners.remove(listener);
+	//}
+
+	/**
+	 * <p>Notifies to all legend listeners registered, that one legend has changed.</p>
+	 * <p>This method must be called only if it's wanted to reflect a legend change.</p>
+	 *
+	 * @see #addLayerListener(LegendListener)
+	 * @see #removeLayerListener(LegendListener)
+	 */
+	public synchronized void callLegendChanged() {
+		for (int i = 0; i < legendListeners.size(); i++) {
+			((LegendListener) legendListeners.get(i)).legendChanged(null);
+		}
+		// getLayers().moveTo(0,0);
+	}
+
+	/**
+	 * <p>Fires a layer drawing event to all {@link LayerDrawingListener LayerDrawingListener} listeners registered,
+	 *  distinguishing the kind of event.</p>
+	 *
+	 * @param e the event
+	 *
+	 * @see #addLayerDrawingListener(LayerDrawingListener)
+	 * @see #removeLayerDrawListener(LayerDrawingListener)
+	 */
+	public synchronized void fireLayerDrawingEvent(LayerDrawEvent e) {
+		for (int i = 0; i < layerDrawingListeners.size(); i++)
+		{
+			LayerDrawingListener listener = (LayerDrawingListener) layerDrawingListeners.get(i);
+			switch (e.getEventType())
+			{
+				case LayerDrawEvent.LAYER_BEFORE_DRAW:
+					listener.beforeLayerDraw(e);
+					break;
+				case LayerDrawEvent.LAYER_AFTER_DRAW:
+					listener.afterLayerDraw(e);
+					break;
+				case LayerDrawEvent.GRAPHICLAYER_BEFORE_DRAW:
+					listener.beforeGraphicLayerDraw(e);
+					break;
+				case LayerDrawEvent.GRAPHICLAYER_AFTER_DRAW:
+					listener.afterLayerGraphicDraw(e);
+					break;
+			}
+		}
+		// getLayers().moveTo(0,0);
+	}
+
+	/**
+	 * <p>Notifies to all error listeners registered, that one error has been produced.</p>
+	 *
+	 * @param e the event with information of the error
+	 *
+	 * @see #addErrorListener(ErrorListener)
+	 * @see #removeErrorListener(LegendListener)
+	 * @see #reportDriverExceptions(String, List)
+	 */
+	public synchronized void callNewErrorEvent(ErrorEvent e) {
+		for (int i = 0; i < errorListeners.size(); i++) {
+			((ErrorListener) errorListeners.get(i)).errorThrown(e);
+		}
+		errorListeners.clear();
+		// getLayers().moveTo(0,0);
+	}
+
+	/**
+	 * <p>Removes the specified layer listener from this map.</p>
+	 *
+	 * @param listener the listener to remove
+	 *
+	 * @see #addLayerListener(LegendListener)
+	 * @see #callLegendChanged()
+	 */
+	public void removeLayerListener(LegendListener listener) {
+		legendListeners.remove(listener);
+	}
+
+	// SUGERENCIA DE PABLO:
+	// public void removeLegendListener(LegendListener listener) {
+	// 	legendListeners.remove(listener);
+	// }
+
+	/**
+	 * <p>Returns the hierarchy of {@link FLayers FLayers} nodes stored in this map.</p>
+	 *
+	 * @return the hierarchy of nodes of layers stored in this map
+	 */
+	public FLayers getLayers() {
+		return layers;
+	}
+
+	/**
+	 * <p>Draws the visible layers of this map according its view port, on the image parameter.</p>
+	 *
+	 * @param b image with an accessible buffer of image data
+	 */
+	public void drawLabels(BufferedImage b) {
+	}
+
+	/**
+	 * @see #redraw()
+	 */
+	public void invalidate() {
+		updateDrawVersion();
+		// Small hack to let the MapControl receive an event and repaint
+		FLayer layer;
+		if (layers.getLayersCount() > 0) {
+			layer = layers.getLayer(layers.getLayersCount() - 1);
+		}
+		else {
+			layer = getGraphicsLayer();
+		}
+		LayerPositionEvent layerMovedEvent = LayerPositionEvent
+				.createLayerMovedEvent(
+						layer, 0, 0);
+		eventBuffer.layerMoved(layerMovedEvent);
+	}
+
+    /**
+     * <p>
+     * Prints the layers of this map using the {@link Graphics2D Graphics2D}
+     * argument, that usually is the {@link Graphics Graphics} of the printer.
+     * </p>
+     * 
+     * @param g
+     *            for rendering 2-dimensional shapes, text and images on the
+     *            Java(tm) platform
+     * @param scale
+     *            the scale of the view. Must be between
+     *            {@linkplain FLayer#getMinScale()} and
+     *            {@linkplain FLayer#getMaxScale()}.
+     * @param properties
+     *            a set with the settings to be applied to a whole print job and
+     *            to all the documents in the print job
+     * @throws MapContextException
+     *             if there is an error getting the instance of MapContextDrawer
+     * 
+     * @throws ReadDriverException
+     *             if fails reading with driver.
+     * 
+     * @see GraphicLayer#draw(BufferedImage, Graphics2D, ViewPort, Cancellable,
+     *      double)
+     */
+	public void print(Graphics2D g, double scale,
+			PrintAttributes properties) throws ReadException,
+            MapContextException {
+		
+		CompatLocator.getGraphicsUtils().setRenderingHintsForPrinting(g);
+
+		Cancellable cancel = new Cancellable() {
+			public boolean isCanceled() {
+				return false;
+			}
+
+			public void setCanceled(boolean canceled) {
+				// No queremos que se pueda cancelar la impresi�n.
+
+			}
+		};
+		this.getMapContextDrawer().print(this.layers, g, cancel, scale,properties);
+		if (tracLayer != null) {
+			tracLayer.draw(null, g, viewPort, cancel, scale);
+		}
+	}
+
+	/**
+	 * <p>Returns a new <code>MapContext</code> instance with the information of the <code>vp</code> argument, and the layers of this map.</p>
+	 *
+	 * @param vp information for drawing the layers of this map in the available rectangular area according a projection
+	 *
+	 * @return a new <code>MapContext</code> instance projected by <code>vp</code>
+	 */
+	public MapContext createNewFMap(ViewPort vp) {
+		MapContext ret = new MapContext(vp);
+		ret.layers = this.layers;
+
+		return ret;
+	}
+
+	/**
+	 * <p>Creates a new independent <code>MapContext</code> instance, that has a clone of the layers and the view port of this one.</p>
+	 * <p>The new map will have the same data source drivers to avoid waste memory, and work faster.</p>
+	 *
+	 * @return the new <code>MapContext</code> instance
+	 *
+	 * @throws XMLException if fails cloning the view port or a layer
+	 *
+	 * @see FLayer#cloneLayer()
+	 * @see ViewPort#cloneViewPort()
+	 */
+	public MapContext cloneFMap() {
+		ViewPort vp;
+        try {
+            vp = (ViewPort) getViewPort().clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeException(e);
+        }
+		FLayers antLayers = getLayers();
+		MapContext ret = new MapContext(vp);
+
+		/*
+		 * Cloning order manager
+		 */
+		LayerOrderManager lom = this.getOrderManager();
+		try {
+			lom = (LayerOrderManager) lom.clone();
+			ret.setOrderManager(lom);
+		} catch (CloneNotSupportedException e1) {
+			logger.error("While cloning order manager", e1);
+		}
+		
+		FLayers aux = new FLayers();//(ret,null);
+		aux.setMapContext(ret);
+		for (int i=0; i < antLayers.getLayersCount(); i++)
+		{
+			FLayer lyr = antLayers.getLayer(i);
+			try {
+				FLayer auxLayer = lyr.cloneLayer();
+				aux.addLayer(auxLayer);
+				auxLayer.dispose();
+			} catch (Exception e) {
+				throw new RuntimeException(e);
+			}
+		}
+		ret.layers = aux;
+		return ret;
+
+
+	}
+
+	/**
+	 * Like {@linkplain #cloneFMap()}, but now doesn't clone the layers, rather copies them.
+	 *
+	 * @return the new map
+	 */
+	public MapContext cloneToDraw() {
+		ViewPort vp;
+        try {
+            vp = (ViewPort) getViewPort().clone();
+            MapContext mapContext=new MapContext(getLayers(),vp);
+            return mapContext;
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeException(e);
+        }
+	}
+
+
+	/**
+	 * <p>Adds a layer to the group of layers that are at a upper level in the tree.</p>
+	 *
+	 * @param vectorial the layer to add
+	 */
+	public void addToTrackLayer(FLayer vectorial) {
+	}
+
+	/**
+	 * <p>Returns the scale of the view in the screen.</p>
+	 *
+	 * @return one of this values:
+	 * <ul>
+	 * <li>the scale of the adjusted extent scale of the view in the screen
+	 * <li><code>-1</code> if there is no image
+	 * <li><code>0</code> if there is no extent defined for the image
+	 * </ul>
+	 *
+	 * @see #setScaleView(long)
+	 * @see ViewPort#getAdjustedExtent()
+	 * @see IProjection#getScale(double, double, double, double)
+	 */
+	public long getScaleView() {
+		double dpi = this.getViewPort().getDPI();
+		IProjection proj = viewPort.getProjection();
+
+		if (viewPort.getImageSize() == null) {
+			return -1;
+		}
+
+		if (viewPort.getAdjustedEnvelope() == null) {
+			return 0;
+		}
+		double[] trans2Meter=getDistanceTrans2Meter();
+		int mUnits = getViewPort().getMapUnits();
+		
+		if (proj == null) {
+			double w = ((viewPort.getImageSize().width / dpi) * 0.0254);
+			return (long) (viewPort.getAdjustedEnvelope().getLength(0)
+			    / w * trans2Meter[mUnits]);
+		}
+
+		return Math.round(proj.getScale(
+		    viewPort.getAdjustedEnvelope().getMinimum(0) * trans2Meter[mUnits],
+		    viewPort.getAdjustedEnvelope().getMaximum(0) * trans2Meter[mUnits],
+		    viewPort.getImageSize().width,
+		    dpi));
+
+	}
+
+	/**
+	 * <p>Sets the new extent of the view, calculated using the scale argument.</p>
+	 * <p>Doesn't updates the scale if there isn't information about the dimension of the image or the
+	 *  adjusted extent.</p>
+	 *
+	 * @param scale the new scale for the view
+	 *
+	 * @see ViewPort#setProjection(IProjection)
+	 * @see #getScaleView()
+	 */
+	public void setScaleView(long scale) {
+		double dpi = this.getViewPort().getDPI();
+		if (viewPort.getImageSize() == null) {
+			return;
+		}
+		IProjection proj = viewPort.getProjection();
+		if (viewPort.getAdjustedExtent() == null) {
+			return;
+		}
+		double[] trans2Meter=getDistanceTrans2Meter();
+		Envelope env=viewPort.getAdjustedExtent();
+		Rectangle2D r=new Rectangle2D.Double(env.getMinimum(0),env.getMinimum(1),env.getLength(0),env.getLength(1));
+		Rectangle2D rec=proj.getExtent(r,scale,viewPort.getImageWidth(),viewPort.getImageHeight(),100*getDistanceTrans2Meter()[getViewPort().getMapUnits()],trans2Meter[getViewPort().getDistanceUnits()],dpi);
+		try {
+			getViewPort().setEnvelope(geomManager.createEnvelope(rec.getX(),rec.getY(),rec.getMaxX(),rec.getMaxY(), SUBTYPES.GEOM2D));
+		} catch (CreateEnvelopeException e) {
+			logger.error("Error seting the bounding box");
+		}
+	}
+
+	/**
+	 * <p>Returns the screen resolution (Dots Per Inch) as it was defined by the user's preference, or
+	 * by default as it is defined in the default Toolkit.</p>
+	 *
+         * Be care, use ViewPort#getDPI to ensure are using the corrects DPI.
+         * 
+	 * @return double with the screen's dpi
+	 */
+	public static double getScreenDPI() {
+		return CompatLocator.getGraphicsUtils().getScreenDPI();
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.Strategy#process(com.iver.cit.gvsig.fmap.FeatureSelectorVisitor)
+	 */
+	public void process(Visitor visitor) {
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.Strategy#processSelected(com.iver.cit.gvsig.fmap.FeatureVisitor)
+	 */
+	public void processSelected(Visitor visitor) {
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.Strategy#select(com.iver.cit.gvsig.fmap.FeatureSelectorVisitor,
+	 *      VectorialSubSet)
+	 */
+	public void select(Visitor visitor) {
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.Strategy#selectFromSelection()
+	 */
+	public void selectFromSelection() {
+	}
+
+	/**
+	 * @see org.gvsig.fmap.mapcontext.rendering.strategies.Strategy#createIndex()
+	 */
+	public void createIndex() {
+	}
+
+	/**
+	 * @see org.cresques.geo.Projected#getProjection()
+	 *
+	 * @see ViewPort#getProjection()
+	 * @see #setProjection(IProjection)
+	 * @see #reProject(ICoordTrans)
+	 */
+	public IProjection getProjection() {
+		return getViewPort().getProjection();
+	}
+
+	/**
+	 * <p>Sets the new projection.</p>
+	 *
+	 * @param proj the new projection
+	 *
+	 * @see #getProjection()
+	 * @see ViewPort#setProjection(IProjection)
+	 * @see #reProject(ICoordTrans)
+	 */
+	public void setProjection(IProjection proj) {
+		if (getViewPort() != null) {
+			getViewPort().setProjection(proj);
+		}
+	}
+
+	/**
+	 * @see org.cresques.geo.Projected#reProject(org.cresques.cts.ICoordTrans)
+	 */
+	public void reProject(ICoordTrans arg0) {
+		// TODO implementar reprojecci�n (lo que sea eso)
+	}
+
+
+	public Envelope getSelectionBounds() throws BaseException {
+	    
+		SelectedEnvelopeVisitor visitor = new SelectedEnvelopeVisitor();
+		
+		layers.accept(visitor);
+		Envelope env_in_data_crs = visitor.getSelectioEnvelope();
+		return env_in_data_crs;
+	}
+
+    /**
+     * <p>
+     * Draws this map if its {@link ViewPort ViewPort} has an extent defined:<br>
+     * <ol>
+     * <li>Selects only the layers that have to be drawn:
+     * {@linkplain #prepareDrawing(BufferedImage, Graphics2D, double)}.
+     * <li>Sets quality: antialiasing by text and images, and quality rendering.
+     * <li>Draws the layers.
+     * <li>Fires a <code>LayerDrawEvent.GRAPHICLAYER_BEFORE_DRAW</code>.
+     * <li>Draws the graphic layer.
+     * <li>Fires a <code>LayerDrawEvent.GRAPHICLAYER_AFTER_DRAW</code>.
+     * <li>Invokes the garbage collector and memory clean.
+     * </ol>
+     * </p>
+     * 
+     * @param image
+     *            buffer used sometimes instead <code>g</code> to accelerate the
+     *            draw. For example, if two points are as closed that can't be
+     *            distinguished, draws only one.
+     * @param g
+     *            for rendering 2-dimensional shapes, text and images on the
+     *            Java(tm) platform
+     * @param cancel
+     *            shared object that determines if this layer can continue being
+     *            drawn
+     * @param scale
+     *            the scale of the view. Must be between
+     *            {@linkplain FLayer#getMinScale()} and
+     *            {@linkplain FLayer#getMaxScale()}.
+     * @throws MapContextException
+     *             if there is an error getting the instance of MapContextDrawer
+     * @throws ReadDriverException
+     *             if fails reading with the driver.
+     */
+	public void draw(BufferedImage image, Graphics2D g, Cancellable cancel,
+			double scale) throws ReadException, MapContextException {
+		if (viewPort.getEnvelope() == null) {
+			return;
+		}
+
+		CompatLocator.getGraphicsUtils().setRenderingHintsForDrawing(g);
+
+		this.getMapContextDrawer().draw(this.layers, image, g, cancel, scale);
+	}
+
+	/**
+	 * <p>Draws only the internal graphic layer using the information of the {@link ViewPort ViewPort} of this map.</p>
+	 *
+	 * @param image image used to accelerate the screen draw
+	 * @param g for rendering 2-dimensional shapes, text and images on the Java(tm) platform
+	 * @param cancel shared object that determines if this layer can continue being drawn
+	 * @param scale value that represents the scale
+	 * @throws ReadDriverException if fails reading with the driver.
+	 * @deprecated use {@link #draw(BufferedImage, Graphics2D, Cancellable, double)} instead
+	 * @see GraphicLayer#draw(BufferedImage, Graphics2D, ViewPort, Cancellable, double)
+	 */
+	public void drawGraphics(BufferedImage image, Graphics2D g,
+			Cancellable cancel, double scale) throws ReadException {
+
+		// From now on the graphics layer is handled by the MapContextDrawer,
+		// so call the draw method instead.
+		try {
+			draw(image, g, cancel, scale);
+		} catch (MapContextException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+    /**
+     * <p>
+     * Like
+     * {@linkplain MapContext#draw(BufferedImage, Graphics2D, Cancellable, double)}
+     * , but creating the task as cancellable.
+     * </p>
+     * 
+     * @param image
+     *            buffer used sometimes instead <code>g</code> to accelerate the
+     *            draw. For example, if two points are as closed that can't be
+     *            distinguished, draws only one.
+     * @param g
+     *            for rendering 2-dimensional shapes, text and images on the
+     *            Java(tm) platform
+     * @param scale
+     *            the scale of the view. Must be between
+     *            {@linkplain FLayer#getMinScale()} and
+     *            {@linkplain FLayer#getMaxScale()}.
+     * @throws MapContextException
+     *             if there is an error getting the instance of MapContextDrawer
+     * 
+     * @throws ReadDriverException
+     *             if the driver fails reading.
+     * 
+     * @see #draw(BufferedImage, Graphics2D, Cancellable, double)
+     */
+	public void draw(BufferedImage image, Graphics2D g, double scale)
+			throws ReadException, MapContextException {
+		draw(image, g, new Cancellable() {
+			/**
+			 * @see org.gvsig.utils.swing.threads.Cancellable#isCanceled()
+			 */
+			public boolean isCanceled() {
+				return false;
+			}
+
+			public void setCanceled(boolean canceled) {
+				// Do nothing
+			}
+		}, scale);
+	}
+
+	/**
+	 * <p>Gets the {@link ViewPort ViewPort} associated to this map.</p>
+	 *
+	 * @return the view port
+	 *
+	 * @see #setViewPort(ViewPort)
+	 */
+	public ViewPort getViewPort() {
+		return viewPort;
+	}
+
+	/**
+	 * <p>Sets a {@link ViewPort ViewPort} with the drawing information
+	 *  of this map.</p>
+	 * <p>If there was a previous view port, removes its {@link EventBuffer EventBuffer} and
+	 *  adds the new one.</p>
+	 *
+	 * @param viewPort the viewPort
+	 *
+	 * @see #getViewPort()
+	 */
+	public void setViewPort(ViewPort viewPort) {
+		if (this.viewPort != null) {
+			this.viewPort.removeViewPortListener(eventBuffer);
+		}
+
+		if (this.mapContextDrawer != null){
+			this.mapContextDrawer.setViewPort(viewPort);
+		}
+
+		this.viewPort = viewPort;
+		if (viewPort != null) {
+			viewPort.addViewPortListener(eventBuffer);
+		}
+	}
+
+	/**
+	 * <p>Sets the given extent to the {@link ViewPort ViewPort} and updates the view with the new zoom.</p>
+	 *
+	 * @param extent the extent of the new zoom
+	 */
+	public void zoomToEnvelope(Envelope extent) {
+		if (extent!=null && !extent.isEmpty()) {
+			getViewPort().setEnvelope(extent);
+		}
+	}
+
+	/**
+	 * <p>Returns the union of all extents of all layers of this map.</p>
+	 *
+	 * @return full extent of layers of this map
+	 * @throws ReadDriverException if the driver fails reading.
+	 *
+	 * @see FLayers#getFullEnvelope()
+	 */
+	public Envelope getFullEnvelope() throws ReadException {
+		Envelope envelope = layers.getFullEnvelope();
+		
+		if (tracLayer != null) {
+			Envelope graphicsEnvelope = tracLayer.getFullEnvelope(); 
+			if (envelope == null) {
+				return graphicsEnvelope;
+			}
+			else if (graphicsEnvelope != null) {
+				envelope.add(graphicsEnvelope);
+			}
+		}
+		
+		return envelope;
+	}
+
+
+
+	/**
+	 * <p>Adds a listener of atomic events to the internal {@link EventBuffer EventBuffer}.</p>
+	 *
+	 * @param listener the new listener
+	 *
+	 * @return <code>true</code> if has added the listener successfully
+	 *
+	 * @see #removeAtomicEventListener(AtomicEventListener)
+	 * @see EventBuffer#addAtomicEventListener(AtomicEventListener)
+	 */
+	public boolean addAtomicEventListener(AtomicEventListener listener) {
+		return eventBuffer.addAtomicEventListener(listener);
+	}
+
+	/**
+	 * <p>Removes a listener of atomic events from the internal {@link EventBuffer EventBuffer}.</p>
+	 *
+	 * @param listener the listener to remove
+	 *
+     * @return <tt>true</tt> if the list contained the specified element
+	 *
+	 * @see #addAtomicEventListener(AtomicEventListener)
+	 * @see EventBuffer#removeAtomicEventListener(AtomicEventListener)
+	 */
+	public boolean removeAtomicEventListener(AtomicEventListener listener) {
+		return eventBuffer.removeAtomicEventListener(listener);
+	}
+
+	/**
+	 * @see EventBuffer#beginAtomicEvent()
+	 *
+	 * @see #endAtomicEvent()
+	 */
+	public void beginAtomicEvent() {
+		eventBuffer.beginAtomicEvent();
+	}
+
+	/**
+	 * @see EventBuffer#endAtomicEvent()
+	 *
+	 * @see #beginAtomicEvent()
+	 */
+	public void endAtomicEvent() {
+		eventBuffer.endAtomicEvent();
+	}
+
+	/**
+	 * <p>The class <code>LayerEventListener</code> implements the methods of {@link LayerCollectionListener LayerCollectionListener}
+	 *  that handles the "layer added" or "layer removed" events in a map.</p>
+	 * <p>Is designed as a listener for all layers in a {@link MapContext MapContext}.</p>
+	 *
+	 * @author Fernando Gonz�lez Cort�s
+	 */
+	public class LayerEventListener implements LayerCollectionListener {
+		/*
+		 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdded(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+		 */
+		public void layerAdded(LayerCollectionEvent e) {
+			// Si es la primera capa, fijamos su extent al ViewPort
+			// if (getLayers().getLayersCount() == 1) {
+			if (getViewPort().getEnvelope() == null) {
+				FLayer lyr = e.getAffectedLayer();
+				if (lyr.isAvailable()) {
+					try {
+						getViewPort().setEnvelope(lyr.getFullEnvelope());
+					} catch (ReadException ex) {
+					    logger.error(
+					        MessageFormat.format(
+					                "Can't set envelope to view port from layer {0}",
+					                new Object[] {lyr.getName() }
+					            ),
+					        ex
+					    );
+					}
+				}
+			}
+
+			// Registramos al FMap como listener del legend de las capas
+			FLayer lyr = e.getAffectedLayer();
+			addSelectionListener(lyr);
+		}
+
+		/*
+		 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoved(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+		 */
+		public void layerMoved(LayerPositionEvent e) {
+		}
+
+		/*
+		 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+		 */
+		public void layerRemoved(LayerCollectionEvent e) {
+			FLayer lyr = e.getAffectedLayer();
+
+			lyr.removeLayerListener(eventBuffer);
+
+			if (lyr instanceof Classifiable) {
+				Classifiable c = (Classifiable) lyr;
+				c.removeLegendListener(eventBuffer);
+			}
+
+			if (lyr instanceof SingleLayer && ((SingleLayer) lyr).getDataStore()!=null) {
+				((SingleLayer) lyr).getDataStore().deleteObserver(
+						MapContext.this);
+			}
+
+		}
+
+		/*
+		 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdding(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+		 */
+		public void layerAdding(LayerCollectionEvent e)
+				throws CancelationException {
+		}
+
+		/*
+		 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoving(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+		 */
+		public void layerMoving(LayerPositionEvent e)
+				throws CancelationException {
+		}
+
+		/*
+		 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoving(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+		 */
+		public void layerRemoving(LayerCollectionEvent e)
+				throws CancelationException {
+		}
+
+
+		/*
+		 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#visibilityChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+		 */
+		public void visibilityChanged(LayerCollectionEvent e)
+				throws CancelationException {
+		}
+	}
+
+	/**
+	 * <p>Adds the {@link LayerEventListener LayerEventListener} of this map to the
+	 *  collection of layers argument.</p>
+	 *
+	 * @param a collection of layers
+	 */
+	public void addAsCollectionListener(FLayers layers2) {
+		layers2.addLayerCollectionListener(layerEventListener);
+	}
+
+	/**
+	 * <p>Returns the internal {@link GraphicLayer GraphicLayer}.</p>
+	 *
+	 * @return the graphic layer of this map
+	 *
+	 * @see #setGraphicsLayer(GraphicLayer)
+	 */
+	public GraphicLayer getGraphicsLayer() {
+		if (tracLayer == null) {
+			if (getViewPort() != null) {
+				this.tracLayer =
+						MapContextLocator.getMapContextManager()
+								.createGraphicsLayer(
+										getViewPort().getProjection());
+			} else {
+				this.tracLayer =
+						MapContextLocator.getMapContextManager()
+								.createGraphicsLayer(null);
+			}
+		}
+		return tracLayer;
+	}
+
+	/**
+	 * <p>Sets a new {@link GraphicLayer GraphicLayer} to this map.</p>
+	 *
+	 * @param graphicLayer the new graphic layer
+	 *
+	 * @see #getGraphicsLayer()
+	 */
+	public void setGraphicsLayer(GraphicLayer graphicLayer) {
+		tracLayer = graphicLayer;
+	}
+
+	/**
+	 * <p>Indicates whether some other object is "equal to" this map.</p>
+	 * <p>Returns <code>true</code> if success one of this options:
+	 * <ul>
+	 * <li>Both objects are equal according to {@linkplain Object#equals(Object)}.
+	 * <li>Both maps have the same layers.
+	 * <li>Both maps have the same number of layers and with the same name.
+	 * </ul>
+	 * </p>
+	 *
+	 * @param obj the reference object with which to compare.
+     * @return <code>true</code> if this object is the same as the <code>arg0</code> argument;  otherwise <code>false</code>.
+	 *
+	 * @see Object#equals(Object)
+	 */
+	public boolean equals(Object arg0) {
+		if (!(arg0 instanceof MapContext)) {
+			return false;
+		}
+		MapContext map = (MapContext) arg0;
+		if (super.equals(arg0)) {
+			return true;
+		}
+		if (getLayers() == map.getLayers()) {
+			return true;
+		}
+		boolean isEqual = true;
+		if (map.getLayers().getLayersCount() == getLayers().getLayersCount()) {
+			for (int i = 0; i < getLayers().getLayersCount(); i++) {
+
+				if (!getLayers().getLayer(i).getName().equals(
+						map.getLayers().getLayer(i).getName())) {
+					isEqual = false;
+				}
+
+			}
+		} else {
+			isEqual = false;
+		}
+		return isEqual;
+	}
+
+	/**
+	 * <p>Registers the message of an error associated to this map.</p>
+	 *
+	 * @param stringProperty the error message
+	 *
+	 * @see #getLayersError()
+	 * @see #clearErrors()
+	 */
+	public void addLayerError(String stringProperty) {
+		layersError.add(stringProperty);
+	}
+
+	/**
+	 * <p>Gets the list with all error messages registered to this map.</p>
+	 *
+	 * @return the list of errors registered to this map
+	 *
+	 * @see #addLayerError(String)
+	 * @see #clearErrors()
+	 */
+	public ArrayList getLayersError() {
+		return layersError;
+	}
+
+	/**
+	 * <p>Removes all error messages associated to this map.</p>
+	 *
+	 * @see #addLayerError(String)
+	 * @see #getLayersError()
+	 */
+	public void clearErrors() {
+		layersError.clear();
+	}
+
+	/**
+	 * <p>Creates and returns a new group of layers that belongs to this <code>MapContext</code>.</p>
+	 *
+	 * @param parent layer node in this <code>MapContexte</code> that will be the parent of the new node
+	 * @return the new layer node
+	 */
+	public FLayers getNewGroupLayer(FLayers parent) {
+		FLayers group1 = new FLayers();//(this,parent);
+		group1.setMapContext(this);
+		group1.setParentLayer(parent);
+	    return group1;
+	}
+
+	public String getClassName() {
+		return null;
+	}
+
+	public ArrayList getLayersToSnap() {
+		return layersToSnap;
+	}
+
+	public void setLayersToSnap(ArrayList layersToSnap) {
+		this.layersToSnap = layersToSnap;
+
+	}
+
+	public void update(Observable observable, Object notification) {
+		// TODO REVISAR ESTO!!!
+		String ntype=null;
+		if (notification instanceof FeatureStoreNotification) {
+			FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
+			ntype =fsNotification.getType();
+			if (
+					ntype.equals(FeatureStoreNotification.LOAD_FINISHED)||
+					ntype.equals(FeatureStoreNotification.SELECTION_CHANGE)
+			) {
+				getLayers().moveTo(0, 0);
+			}
+		}
+	}
+
+	public long getDrawVersion() {
+		if (getViewPort().getDrawVersion() > this.viewPortVersion
+				|| getLayers().getDrawVersion() > this.layersVersion
+				|| getGraphicsLayer().getDrawVersion() > graphicsLayerVersion) {
+			updateDrawVersion();
+		}
+		return this.drawVersion;
+	}
+
+	protected void updateDrawVersion(){
+		this.layersVersion = getLayers().getDrawVersion();
+		this.viewPortVersion = getViewPort().getDrawVersion();
+		this.graphicsLayerVersion = getGraphicsLayer().getDrawVersion();
+		this.drawVersion++;
+	}
+
+	public MapContextDrawer getMapContextDrawer() throws ReadException,
+            MapContextException {
+		if (this.mapContextDrawer == null){
+		    if (mapContextDrawerClass == null) {
+                this.mapContextDrawer = mapContextManager
+                        .createDefaultMapContextDrawerInstance();
+            } else {
+                this.mapContextDrawer = mapContextManager
+                        .createMapContextDrawerInstance(mapContextDrawerClass);
+            }
+		    this.mapContextDrawer.setMapContext(this);
+            this.mapContextDrawer.setViewPort(viewPort);
+		}
+
+		return this.mapContextDrawer;
+	}
+	
+	public void setMapContextDrawerClass(Class mapContextDrawerClass)
+            throws MapContextException {
+		mapContextManager.validateMapContextDrawer(mapContextDrawerClass);
+		this.mapContextDrawerClass = mapContextDrawerClass;
+		if (this.mapContextDrawer != null){
+			this.mapContextDrawer.dispose();
+			this.mapContextDrawer = null;
+		}
+	}
+
+	public void setMapContextDrawer(MapContextDrawer drawer){
+		if (this.mapContextDrawer != null){
+			this.mapContextDrawer.dispose();
+			this.mapContextDrawer = null;
+		}
+		this.mapContextDrawer = drawer;
+		if (this.mapContextDrawer != null){
+			this.mapContextDrawer.setMapContext(this);
+			this.mapContextDrawer.setViewPort(viewPort);
+		}
+	}
+	
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		
+		ViewPort vp = (ViewPort) state.get("ViewPort");
+		setViewPort(vp);
+		
+		layers = (FLayers) state.get("layers");
+		layers.setName("root layer");
+		loadLayers(layers);
+		layers.setMapContext(this);
+		
+		layerEventListener = new LayerEventListener();
+		layers.addLayerCollectionListener(layerEventListener);
+		
+		layers.addLayerCollectionListener(eventBuffer);
+		layers.setProjection(vp.getProjection());
+		
+		//Add the listener for the selection
+		addSelectionListener(layers);
+		
+		// ======================
+		if (state.hasValue("orderManager")) {
+			LayerOrderManager lom = (LayerOrderManager) state.get("orderManager");
+			this.setOrderManager(lom);
+		}
+                DefaultMapContextManager manager = (DefaultMapContextManager) MapContextLocator.getMapContextManager();
+                manager.notifyLoadMapContext(this);
+	}
+
+	private void loadLayers(FLayers lyrs) {
+		
+		int sz = lyrs.getLayersCount();
+		for (int i=0; i<sz; i++) {
+			try {
+				lyrs.getLayer(i).load();
+			} catch (LoadLayerException e) {
+				logger.error("While loading layer: " + lyrs.getLayer(i).getName());
+			}
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("ViewPort", viewPort);
+		state.set("layers", layers);
+		state.set("orderManager", this.getOrderManager());
+	}
+        
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.addDefinition(
+				MapContext.class,
+				"MapContext",
+				"MapContext Persistence definition",
+				null, 
+				null
+		);
+		definition.addDynFieldObject("ViewPort")
+			.setClassOfValue(ViewPort.class)
+			.setMandatory(true);
+	
+		definition.addDynFieldObject("layers")
+			.setClassOfValue(FLayers.class)
+			.setMandatory(true);
+
+		definition.addDynFieldObject("orderManager")
+		.setClassOfValue(LayerOrderManager.class)
+		.setMandatory(false);
+
+            return Boolean.TRUE;
+        }
+    }
+
+	protected void doDispose() throws BaseException {
+		dispose(layers);
+		dispose(tracLayer);
+	}
+	
+    /**
+     * <p>Registers an event buffer as a listener for all layers as argument.</p>
+     *
+     * <p>Each {@link FLayer FLayer} of this map must have an event buffer for all kind
+     * of specific listeners of that layer. This method distinguish between {@link Classifiable Classifiable},
+     * {@link AlphanumericData AlphanumericData}, and {@link FLayers FLayers} layers, and for each one,
+     * registers, for their specific listeners, the <code>eventBuffer</code> as a listener.</p>
+     *
+     * @param the layer or layers
+     */
+    private void addSelectionListener(FLayer lyr){
+        lyr.addLayerListener(eventBuffer);
+
+        if (lyr instanceof Classifiable) {
+            Classifiable c = (Classifiable) lyr;
+            c.addLegendListener(eventBuffer);
+        }
+
+        if (lyr instanceof FLayers){
+            FLayers lyrs=(FLayers)lyr;
+            for(int i=0;i<lyrs.getLayersCount();i++){
+                addSelectionListener(lyrs.getLayer(i));
+            }
+        }
+        if (lyr instanceof SingleLayer){
+            if (((SingleLayer) lyr).getDataStore() != null) {
+                ((SingleLayer) lyr).getDataStore().addObserver(
+                        MapContext.this);
+            }
+        }
+    }
+    
+
+    public void setOrderManager(LayerOrderManager lom) {
+    	orderManager = lom;
+    }
+    
+    public LayerOrderManager getOrderManager() {
+    	
+    	if (orderManager == null) {
+    		orderManager = MapContextLocator.getDefaultOrderManager();
+    	}
+    	return orderManager;
+    }
+    
+    public boolean hasVectorLayers() {
+        return this.hasVectorLayers(this.getLayers());
+    }
+    
+    public boolean hasActiveVectorLayers() {
+        FLayer[] layers = this.getLayers().getActives();
+        for( int i=0; i<layers.length; i++ ) {
+            FLayer layer = layers[i];
+            if (layer.isAvailable() && layer instanceof FLyrVect) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    private boolean hasVectorLayers(FLayers layers) {
+            for (int i = 0; i < layers.getLayersCount(); i++) {
+                    FLayer lyr =layers.getLayer(i);
+                    if (lyr instanceof FLayers){
+                            if (hasVectorLayers((FLayers) lyr)){
+                                    return true;
+                            }
+                    } else if (lyr instanceof FLyrVect) {
+                            return true;
+                    }
+            }
+            return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/FMapEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/FMapEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/FMapEvent.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events;
+
+/**
+ * <p>All events produced on a layer must be of a particular type.</p>
+ *
+ * <p><code>FMapEvent</code> defines the least information that can have an event
+ *  produced on a layer, its <i>type</i>.</p>
+ */
+public class FMapEvent {
+	/**
+	 * Kind of event type.
+	 */
+	private int eventType;
+	/**
+	 * <p>Gets the type of this event.</p>
+	 * 
+	 * @return the type of this event
+	 */
+	public int getEventType() {
+		return eventType;
+	}
+	/**
+	 * <p>Sets the type of the event.</p>
+	 * 
+	 * @param eventType the number that identifies this event's type
+	 */
+	public void setEventType(int eventType) {
+		this.eventType = eventType;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/FMapEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ErrorListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ErrorListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ErrorListener.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ErrorListener.java 20989 2008-05-28 11:05:57Z jmvivo $
+* $Log$
+* Revision 1.2  2006-09-21 17:20:50  azabala
+* added method to report many driver exceptions
+*
+* Revision 1.1  2005/12/20 10:56:34  jaume
+* Added an error event to fmap
+*
+*
+*/
+/**
+ * 
+ */
+package org.gvsig.fmap.mapcontext.events.listeners;
+
+import java.util.List;
+
+import org.gvsig.fmap.mapcontext.events.ErrorEvent;
+
+
+/**
+ * @author jaume
+ *
+ */
+public interface ErrorListener {
+    /**
+     * Listen for error events
+     * (usually caused by driverExceptions)
+     * @param e
+     */
+	void errorThrown(ErrorEvent e);
+
+	/**
+	 * Report a bundle of driver exceptions caused in the same
+	 * fmap atomic transaction
+	 * @param introductoryText introductory text specified by developer. It null, used ""
+	 * @param driverExceptions list with a bundle of driver exceptions catched during
+	 * an atomic event
+	 */
+	void reportDriverExceptions(String introductoryText, List driverExceptions);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ErrorListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/AtomicEventListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/AtomicEventListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/AtomicEventListener.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events.listeners;
+
+import org.gvsig.fmap.mapcontext.events.AtomicEvent;
+
+/**
+ * <p>Listener of {@link AtomicEvent AtomicEvent}.</p>
+ * 
+ * <p>An <code>AtomicEvent</p> represents a group of events that will be attended without any interruption.</p>
+ */
+public interface AtomicEventListener {
+	/**
+	 * <p>Called when is produced an <code>AtomicEvent</code> in the buffer of <code>MapControl</code>.</p>
+	 * 
+	 * @param e an atomic event
+	 * 
+	 * @see EventBuffer
+	 */
+	public void atomicEvent(AtomicEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/AtomicEventListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ViewPortListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ViewPortListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ViewPortListener.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events.listeners;
+
+import org.gvsig.fmap.mapcontext.events.ColorEvent;
+import org.gvsig.fmap.mapcontext.events.ExtentEvent;
+import org.gvsig.fmap.mapcontext.events.ProjectionEvent;
+
+
+/**
+ * <p>Defines the interface for an object that listens to changes in a view port.</p>
+ */
+public interface ViewPortListener {
+	/**
+ 	 * <p>Called when the <i>extent</i> of the view port has changed.</p>
+	 *
+	 * @param e an extend event object
+	 */
+	void extentChanged(ExtentEvent e);
+
+	/**
+	 * <p>Called when the background color of the view port has changed.</p>
+	 * 
+	 * @param e a color event object
+	 */
+	void backColorChanged(ColorEvent e);
+
+	/**
+	 * <p>Called when the projection of the view port has changed.</p>
+	 *
+	 * @param e a projection event object
+	 */
+	void projectionChanged(ProjectionEvent e);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ViewPortListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/InvalidationListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/InvalidationListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/InvalidationListener.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events.listeners;
+
+/**
+ * Interfaz que recibe el evento invalid. Deber�n implementar los elementos de
+ * la interfaz que se quieran actualizar cuando se produzca un cambio en el
+ * FMap
+ */
+public interface InvalidationListener {
+	/**
+	 * M�todo invocado cuando se produce un cambio en FMap que  afecta a la
+	 * representaci�n del mapa
+	 */
+	public void invalid();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/InvalidationListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ProgressListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ProgressListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ProgressListener.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events.listeners;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface ProgressListener {
+    public void progress(int n);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/ProgressListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/EventBuffer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/EventBuffer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/EventBuffer.java	(revision 42196)
@@ -0,0 +1,377 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events.listeners;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.fmap.mapcontext.events.AtomicEvent;
+import org.gvsig.fmap.mapcontext.events.ColorEvent;
+import org.gvsig.fmap.mapcontext.events.ExtentEvent;
+import org.gvsig.fmap.mapcontext.events.ProjectionEvent;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerListener;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+import org.gvsig.fmap.mapcontext.layers.SelectionEvent;
+import org.gvsig.fmap.mapcontext.layers.SelectionListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+
+
+
+
+/**
+ * <p><code>EventBuffer</code> represents a buffer of events that allows store listeners of events produced in layers
+ *  of a <code>MapContext</code> instance, and configure its dispatching mode.</p>
+ * 
+ * <p>The <i>dispatching mode</i>:
+ * <ul>
+ *  <li><code>true</code> : dispatches each new event received.</li>
+ *  <li><code>false</code> : accumulates all new events received in a internal buffer, and only will dispatch them
+ *   (according to the order they were received) when changes the mode.</li>
+ * </ul>
+ * </p>
+ *
+ * @see LegendListener
+ * @see LayerCollectionListener
+ * @see SelectionListener
+ * @see ViewPortListener
+ * @see LegendListener
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class EventBuffer implements LegendListener, LayerCollectionListener,
+SelectionListener, ViewPortListener, LayerListener {
+
+	/**
+	 * List with all events received and don't dispatched.
+	 * 
+	 * @see #endAtomicEvent()
+	 * @see #legendChanged(LegendChangedEvent)
+	 * @see #layerAdded(LayerCollectionEvent)
+	 * @see #layerMoved(LayerPositionEvent)
+	 * @see #layerRemoved(LayerCollectionEvent)
+	 * @see #layerAdding(LayerCollectionEvent)
+	 * @see #layerMoving(LayerPositionEvent)
+	 * @see #layerRemoving(LayerCollectionEvent)
+	 * @see #visibilityChanged(LayerCollectionEvent)
+	 * @see #visibilityChanged(LayerEvent)
+	 * @see #selectionChanged(SelectionEvent)
+	 * @see #extentChanged(ExtentEvent)
+	 * @see #activationChanged(LayerEvent)
+	 * @see #nameChanged(LayerEvent)
+	 * @see #backColorChanged(ColorEvent)
+	 * @see #editionChanged(LayerEvent)
+	 * @see #projectionChanged(ProjectionEvent)
+	 * @see #fireAtomicEventListener
+	 */
+	private ArrayList events = new ArrayList();
+
+	/**
+	 * List with all listeners registered.
+	 * 
+	 * @see #addAtomicEventListener(AtomicEventListener)
+	 * @see #removeAtomicEventListener(AtomicEventListener)
+	 */ 
+	private ArrayList listeners = new ArrayList();
+
+	/**
+	 * Allows enable or disable the <i>dispatching mode</i>.
+	 * 
+	 * @see #beginAtomicEvent()
+	 * @see #endAtomicEvent()
+	 */
+	private boolean dispatching = true;
+
+	/**
+	 * <p>Enables buffer in <i>accumulation event</i> mode.<p>
+	 * 
+	 * <p>All new events received, will be accumulated and won't notified to their respective listeners,
+	 *  until this buffer would received a call to {@link #endAtomicEvent() endAtomicEvent}.</p>
+	 * 
+	 * @see #endAtomicEvent()
+	 */
+	public void beginAtomicEvent() {
+		dispatching = false;
+	}
+
+	/**
+	 * <p>Disables buffer in <i>accumulation event</i> mode.</p>
+	 * 
+	 * <p>All events accumulated will be notify to their respective
+	 *  listeners, in the same order as they arrived.</p>
+	 *  
+	 * @see #beginAtomicEvent()
+	 */
+	public void endAtomicEvent() {
+		fireAtomicEventListener();
+		events.clear();
+		dispatching = true;
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LegendListener#legendChanged(com.iver.cit.gvsig.fmap.rendering.LegendChangedEvent)
+	 */
+	public void legendChanged(LegendChangedEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdded(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+	 */
+	public void layerAdded(LayerCollectionEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoved(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+	 */
+	public void layerMoved(LayerPositionEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+	 */
+	public void layerRemoved(LayerCollectionEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdding(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+	 */
+	public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoving(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+	 */
+	public void layerMoving(LayerPositionEvent e) throws CancelationException {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoving(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+	 */
+	public void layerRemoving(LayerCollectionEvent e)
+	throws CancelationException {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#visibilityChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+	 */
+	public void visibilityChanged(LayerCollectionEvent e)
+	throws CancelationException {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.SelectionListener#selectionChanged(com.iver.cit.gvsig.fmap.layers.SelectionEvent)
+	 */
+	public void selectionChanged(SelectionEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.ViewPortListener#extentChanged(com.iver.cit.gvsig.fmap.ExtentEvent)
+	 */
+	public void extentChanged(ExtentEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/**
+	 * Appends, if wasn't, the specified listener to the end of the internal list of atomic event listeners.
+	 *
+	 * @param listener an object that implements the atomic event listener
+	 *
+	 * @return <code>true</code> if has added the listener successfully; otherwise <code>false</code>
+	 * 
+	 * @see #removeAtomicEventListener(AtomicEventListener)
+	 * @see #fireAtomicEventListener()
+	 */
+	public boolean addAtomicEventListener(AtomicEventListener listener) {
+		boolean bFound = false;
+		for (int i=0; i < listeners.size(); i++)
+			if (listeners.get(i) == listener)
+				bFound = true;
+		if (!bFound)
+			listeners.add(listener);
+		return true; 
+	}
+
+	/**
+	 * <p>Removes a single instance of the {@link AtomicEventListener AtomicEventListener} from the
+     * internal list, if it is present (optional operation). Returns <tt>true</tt>
+     * if the list contained the specified element (or equivalently, if the list changed as a
+     * result of the call).<p>
+     *
+     * @param o element to be removed from this list, if present
+     * @return <tt>true</tt> if the list contained the specified element
+     * 
+     * @see #addAtomicEventListener(AtomicEventListener)
+     * @see #fireAtomicEventListener()
+	 */
+	public boolean removeAtomicEventListener(AtomicEventListener listener) {
+		return listeners.remove(listener);
+	}
+
+	/**
+	 * Executes the {@linkplain AtomicEventListener#atomicEvent(AtomicEvent)} method of all listeners registered.
+	 * 
+	 * @see #addAtomicEventListener(AtomicEventListener)
+	 * @see #removeAtomicEventListener(AtomicEventListener)
+	 */
+	private void fireAtomicEventListener() {
+		if (events.size() == 0)
+			return; // No hay eventos que lanzar.
+		for (Iterator i = listeners.iterator(); i.hasNext();) {
+			AtomicEventListener listener = (AtomicEventListener) i.next();
+			AtomicEvent e = new AtomicEvent(events);
+			listener.atomicEvent(e);
+		}
+
+		events.clear();
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerListener#visibilityChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
+	 */
+	public void visibilityChanged(LayerEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerListener#activationChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
+	 */
+	public void activationChanged(LayerEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerListener#nameChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
+	 */
+	public void nameChanged(LayerEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.ViewPortListener#backColorChanged(com.iver.cit.gvsig.fmap.ColorEvent)
+	 */
+	public void backColorChanged(ColorEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.layers.LayerListener#editionChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
+	 */
+	public void editionChanged(LayerEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.ViewPortListener#projectionChanged(com.iver.cit.gvsig.fmap.ProjectionEvent)
+	 */
+	public void projectionChanged(ProjectionEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+
+	
+	public void drawValueChanged(LayerEvent e) {
+		events.add(e);
+
+		if (dispatching) {
+			fireAtomicEventListener();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/listeners/EventBuffer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ExtentEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ExtentEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ExtentEvent.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events;
+
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Time;
+
+
+
+/**
+ * <p>Event produced when the adjusted extent or the time
+ * of the view port have changed.</p>
+ * <p>
+ * TODO: This class has to be renamed to ViewPortEvent.
+ * </p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ExtentEvent extends FMapEvent {
+	/**
+	 * <p>Reference to the new adjusted extent.</p>
+	 */
+	private Envelope newExtent;
+	
+	/**
+	 * <p>Reference to the new time.</p>
+	 */
+	private Time newTime;
+
+	/**
+	 * <p>Identifier of this kind of event.</p>
+	 */
+	private static final int EXTENT_EVENT = 0;
+	private static final int TIME_EVENT = 1;
+
+	/**
+	 * <p>Returns a new extent event.</p>
+	 *
+	 * @param c the new adjusted extent
+	 *
+	 * @return a new extent event
+	 * @deprecated
+	 *         use the constructor 
+	 */
+	public static ExtentEvent createExtentEvent(Envelope r){
+		return new ExtentEvent(r, EXTENT_EVENT);
+	}
+
+	/**
+	 * <p>Creates a new extent event.</p>
+	 *
+	 * @param c the new adjusted extent
+	 * @param eventType identifier of this kind of event
+	 */
+	private ExtentEvent(Envelope r, int eventType) {
+		setEventType(eventType);
+		newExtent = r;
+	}
+	
+	/**
+     * <p>Creates a new extent event.</p>
+     *
+     * @param c the new adjusted extent
+     */
+    public ExtentEvent(Envelope envelope) {
+        this(envelope, EXTENT_EVENT);       
+    }
+    
+    /**
+     * <p>Creates a new time event.</p>
+     * @param time
+     *          the new time
+     */
+    public ExtentEvent(Time time) {
+        setEventType(TIME_EVENT);
+        newTime = time;
+    }
+
+	/**
+	 * <p>Gets the new adjusted event.</p>
+	 *
+	 * @return the new adjusted extent
+	 */
+	public Envelope getNewExtent() {
+		return newExtent;
+	}
+	
+	/**
+     * <p>Gets the new time event.</p>
+     *
+     * @return the new time extent
+     */
+    public Time getNewTime() {
+        return newTime;
+    }
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ExtentEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ErrorEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ErrorEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ErrorEvent.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events;
+
+
+/**
+ * <p><code>ErrorEvent</code> stores all necessary information of an error produced on a layer.</p>
+ * 
+ * @see FMapEvent
+ * 
+ * 
+ * @author jaume
+ */
+/* 
+ * jjdc
+ *  
+ * FIXME: No esta claro que no se use.
+ *               Si se deja deprecated habria que documentar por que hay que sustituirla. 
+ * @deprecated As of release 1.0.2, don't used
+ */
+public class ErrorEvent extends FMapEvent {
+	/**
+	 * <p>Extra information about the error, like which layer was produced.</p>
+	 * 
+	 * @see #getMessage()
+	 */
+	private String message;
+    
+    /**
+     * <p>Exception associated to the error produced.</p>
+     * 
+     * @see #getException()
+     */
+	private Exception exception;
+
+    /**
+     * <p>Constructs an <code>ErrorEvent</code> with the specified, detailed message as extra information, and the exception thrown.</p>
+     * 
+     * @param message detailed error information
+     * @param e the exception thrown when the error was produced
+     */
+	public ErrorEvent(String message, Exception e){
+		this.message = message;
+		this.exception = e;
+	}
+
+    /**
+     * <p>Gets the <code>Exception</code> associated to the error produced.</p>
+     * 
+     * @return the exception thrown when the error was produced
+     */
+	public Exception getException() {
+		return exception;
+	}
+
+    /**
+     * <p>Gets detailed message with extra information.</p>
+     * 
+     * @return the detail message with extra information
+     */
+	public String getMessage() {
+		return message;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ErrorEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/AtomicEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/AtomicEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/AtomicEvent.java	(revision 42196)
@@ -0,0 +1,210 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.SelectionEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendEvent;
+
+
+
+
+/**
+ * <p>An atomic event represents a group of events that will be attended without any interruption.</p>
+ * 
+ * <p>This kind of events are created by the buffer of events of the {@link MapContext MapContext}.</p>
+ */
+public class AtomicEvent extends FMapEvent {
+	/**
+	 * <p>Events that constitute this one.</p>
+	 */
+	private ArrayList events;
+
+	/**
+	 * <p>Creates a new instance of this kind of event.</p>
+	 *
+	 * @param fmapEvents events that will constitute this one
+	 */
+	public AtomicEvent(ArrayList fmapEvents) {
+		this.events = (ArrayList) fmapEvents.clone();
+	}
+
+	/**
+	 * <p>Returns the event at the specified position in the internal list.</p>
+	 *
+	 * @param index index of event to return
+	 *
+	 * @return event at the specified position in this list
+	 */
+	public FMapEvent getEvent(int index) {
+		return (FMapEvent) events.get(index);
+	}
+
+	/**
+	 * <p>Returns the number of events that constitute this one.</p>
+	 *
+	 * @return number of events that constitute this one
+	 */
+	public int getEventCount() {
+		return events.size();
+	}
+
+	/**
+	 * <p>Returns all legend events that constitute this one.</p>
+	 *
+	 * @return an array with all legend events that constitute this one
+	 */
+	public LegendEvent[] getLegendEvents() {
+		ArrayList ret = new ArrayList();
+
+		for (Iterator iter = events.iterator(); iter.hasNext();) {
+			FMapEvent event = (FMapEvent) iter.next();
+
+			if (event instanceof LegendEvent) {
+				ret.add(event);
+			}
+		}
+
+		return (LegendEvent[]) ret.toArray(new LegendEvent[0]);
+	}
+
+	/**
+	 * <p>Returns all layer collection events that constitute this one.</p>
+	 *
+	 * @return an array with all layer collection events that constitute this one
+	 */
+	public LayerCollectionEvent[] getLayerCollectionEvents() {
+		ArrayList ret = new ArrayList();
+
+		for (Iterator iter = events.iterator(); iter.hasNext();) {
+			FMapEvent event = (FMapEvent) iter.next();
+
+			if (event instanceof LayerCollectionEvent) {
+				ret.add(event);
+			}
+		}
+
+		return (LayerCollectionEvent[]) ret.toArray(new LayerCollectionEvent[0]);
+	}
+
+	/**
+	 * <p>Returns all vector layer selection events that constitute this one.</p>
+	 *
+	 * @return an array with all vector layer selection events that constitute this one
+	 */
+	public SelectionEvent[] getSelectionEvents() {
+		ArrayList ret = new ArrayList();
+
+		for (Iterator iter = events.iterator(); iter.hasNext();) {
+			FMapEvent event = (FMapEvent) iter.next();
+
+			if (event instanceof SelectionEvent) {
+				ret.add(event);
+			}
+		}
+
+		return (SelectionEvent[]) ret.toArray(new SelectionEvent[0]);
+	}
+
+	/**
+	 * <p>Returns all extent events that constitute this one.</p>
+	 *
+	 * @return an array with all extent events that constitute this one
+	 */
+	public ExtentEvent[] getExtentEvents() {
+		ArrayList ret = new ArrayList();
+
+		for (Iterator iter = events.iterator(); iter.hasNext();) {
+			FMapEvent event = (FMapEvent) iter.next();
+
+			if (event instanceof ExtentEvent) {
+				ret.add(event);
+			}
+		}
+
+		return (ExtentEvent[]) ret.toArray(new ExtentEvent[0]);
+	}
+
+	/**
+	 * <p>Returns all layer events that constitute this one.</p>
+	 *
+	 * @return an array with all layer events that constitute this one
+	 */
+	public LayerEvent[] getLayerEvents() {
+		ArrayList ret = new ArrayList();
+
+		for (Iterator iter = events.iterator(); iter.hasNext();) {
+			FMapEvent event = (FMapEvent) iter.next();
+
+			if (event instanceof LayerEvent) {
+				ret.add(event);
+			}
+		}
+
+		return (LayerEvent[]) ret.toArray(new LayerEvent[0]);
+	}
+
+	/**
+	 * <p>Returns all color events that constitute this one.</p>
+	 *
+	 * @return an array with all color events that constitute this one
+	 */
+	public ColorEvent[] getColorEvents() {
+		ArrayList ret = new ArrayList();
+
+		for (Iterator iter = events.iterator(); iter.hasNext();) {
+			FMapEvent event = (FMapEvent) iter.next();
+
+			if (event instanceof ColorEvent) {
+				ret.add(event);
+			}
+		}
+
+		return (ColorEvent[]) ret.toArray(new ColorEvent[0]);
+	}
+
+	/**
+	 * <p>Returns all projection events that constitute this one.</p>
+	 *
+	 * @return an array with all projection events that constitute this one
+	 */
+	public ProjectionEvent[] getProjectionEvents() {
+		ArrayList ret = new ArrayList();
+
+		for (Iterator iter = events.iterator(); iter.hasNext();) {
+			FMapEvent event = (FMapEvent) iter.next();
+
+			if (event instanceof ProjectionEvent) {
+				ret.add(event);
+			}
+		}
+
+		return (ProjectionEvent[]) ret.toArray(new ProjectionEvent[0]);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/AtomicEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ProjectionEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ProjectionEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ProjectionEvent.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events;
+
+import org.cresques.cts.IProjection;
+
+/**
+ * <p>Event produced when the projection of the view port has changed.</p>
+ */
+public class ProjectionEvent extends FMapEvent {
+	/**
+	 * <p>The new projection.</p>
+	 */
+	private IProjection newProyection;
+
+	/**
+	 * <p>Identifies this object as an event related with the projection.</p>
+	 */
+	private static final int PROJECTION_EVENT = 0;
+
+	/**
+	 * <p>Creates a new projection event.</p>
+	 * 
+	 * @param proj the new projection
+	 * 
+	 * @return a new projection event
+	 */
+	public static ProjectionEvent createProjectionEvent(IProjection proj){
+		return new ProjectionEvent(proj, PROJECTION_EVENT);
+	}
+
+	/**
+	 * <p>Creates a new projection event of the specified type.</p>
+	 *
+	 * @param proj the new projection
+	 * @param eventType identifier of this kind of event
+	 */
+	private ProjectionEvent(IProjection proj, int eventType) {
+		setEventType(eventType);
+		newProyection = proj;
+	}
+
+	/**
+	 * <p>Gets the new projection.</p>
+	 *
+	 * @return the new projection
+	 */
+	public IProjection getNewProjection() {
+		return newProyection;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ProjectionEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ColorEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ColorEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ColorEvent.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.events;
+
+import java.awt.Color;
+
+
+/**
+ * <p>Event produced when changes the background color of the <i>view port</i>.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ColorEvent extends FMapEvent {
+	/**
+	 * <p>Identifier of this kind of event.</p>
+	 */
+	private static final int COLOR_EVENT = 0;
+	
+	/**
+	 * <p>Reference to the new color</p> 
+	 */
+	private Color color;
+
+	/**
+	 * <p>Returns a new color event.</p>
+	 * 
+	 * @param c the new color
+	 *
+	 * @return a new color event
+	 */
+	public static ColorEvent createColorEvent(Color c){
+		return new ColorEvent(c, COLOR_EVENT);
+	}
+	
+	/**
+	 * <p>Creates a new color event.</p>
+	 *
+	 * @param c the new color
+	 * @param eventType identifier of this kind of event
+	 */
+	private ColorEvent(Color c, int eventType) {
+		color = c;
+		setEventType(eventType);
+	}
+
+	/**
+	 * <p>Gets the new color.</p>
+	 *
+	 * @return the new color
+	 */
+	public Color getNewColor() {
+		return color;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/ColorEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextDrawer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextDrawer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextDrawer.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.tools.task.Cancellable;
+
+public interface MapContextDrawer {
+
+	public void setMapContext(MapContext mapContext);
+	public void setViewPort(ViewPort viewPort);
+	public void draw(FLayers root, BufferedImage image, Graphics2D g, Cancellable cancel,
+			double scale) throws ReadException;
+	public void print(FLayers root, Graphics2D g, Cancellable cancel,
+			double scale, PrintAttributes properties) throws ReadException;
+	public void dispose();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextDrawer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1,2 @@
+org.gvsig.fmap.mapcontext.MapContextLibrary
+org.gvsig.fmap.mapcontext.impl.MapContextImplLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/pom.xml	(revision 42196)
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.compat.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <!-- Tests -->
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+      
+    </plugins>  
+
+  </build>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml	(revision 42196)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.mapcontext.operation</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.compat.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+
+
+  </dependencies>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.fmap.mapcontext">
+		<priority value="DEBUG" /> 
+	</category>
+
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDraw.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDraw.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDraw.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class AggregateDraw extends GeometryOperation {
+	
+	public static final String NAME = "draw";
+	public static int CODE = Integer.MIN_VALUE;
+
+	final static private Logger logger = LoggerFactory
+	.getLogger(AggregateDraw.class);
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+	 */
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+	throws GeometryOperationException {
+
+		Aggregate aggregate = (Aggregate) geom;
+		for (int i=0;i<aggregate.getPrimitivesNumber();i++){
+			Geometry prim = aggregate.getPrimitiveAt(i);
+			try {
+				prim.invokeOperation(CODE, ctx);
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new GeometryOperationException(e);
+			}
+		}
+		return null;
+	}
+
+	public static void register() {
+		GeometryManager geoMan = GeometryLocator.getGeometryManager();
+		
+		CODE = geoMan.getGeometryOperationCode(NAME);
+
+		geoMan.registerGeometryOperation(NAME, new AggregateDraw(),
+				TYPES.AGGREGATE);
+		geoMan.registerGeometryOperation(NAME, new AggregateDraw(),
+				TYPES.MULTIPOINT);
+		geoMan.registerGeometryOperation(NAME, new AggregateDraw(),
+				TYPES.MULTICURVE);
+		geoMan.registerGeometryOperation(NAME, new AggregateDraw(),
+				TYPES.MULTISURFACE);
+		geoMan.registerGeometryOperation(NAME, new AggregateDraw(),
+				TYPES.MULTISOLID);
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDraw.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawInts.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawInts.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawInts.java	(revision 42196)
@@ -0,0 +1,187 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DrawInts extends GeometryOperation {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	public static final String NAME = "drawInts";
+	public static int CODE = Integer.MIN_VALUE;
+
+	final static private Logger logger = LoggerFactory.getLogger(DrawInts.class);
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException{
+		DrawOperationContext doc=(DrawOperationContext)ctx;
+		ViewPort viewPort = doc.getViewPort();
+		ISymbol symbol = doc.getSymbol();
+		Graphics2D g=doc.getGraphics();
+		Cancellable cancel=doc.getCancellable();
+		//		 make the symbol to resize itself with the current rendering context
+		try {
+			if (doc.hasDPI()){
+				double previousSize = ((CartographicSupport)symbol).
+				toCartographicSize(viewPort, doc.getDPI(), geom);
+				// draw it as normally
+				Geometry decimatedShape = transformToInts(geom, viewPort.getAffineTransform());
+				
+				//the AffineTransform has to be null because the transformToInts method
+				//reprojects the geometry
+				symbol.draw(g, null, decimatedShape, doc.getFeature(), cancel);
+				
+				// restore previous size
+				((CartographicSupport)symbol).setCartographicSize(previousSize, geom);
+			}else{
+				Geometry decimatedShape = transformToInts(geom, viewPort.getAffineTransform());
+				symbol.draw(g, viewPort.getAffineTransform(), decimatedShape,
+						doc.getFeature(), cancel);
+			}
+		} catch (CreateGeometryException e) {
+			e.printStackTrace();
+			throw new GeometryOperationException(e);
+		}
+
+		return null;
+	}
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	private Geometry transformToInts(Geometry gp, AffineTransform at) throws CreateGeometryException {
+		GeneralPathX newGp = new GeneralPathX();
+		double[] theData = new double[6];
+		double[] aux = new double[6];
+
+		// newGp.reset();
+		PathIterator theIterator;
+		int theType;
+		int numParts = 0;
+
+		java.awt.geom.Point2D ptDst = new java.awt.geom.Point2D.Double();
+		java.awt.geom.Point2D ptSrc = new java.awt.geom.Point2D.Double();
+		boolean bFirst = true;
+		int xInt, yInt, antX = -1, antY = -1;
+
+
+		theIterator = gp.getPathIterator(null); //, flatness);
+		int numSegmentsAdded = 0;
+		while (!theIterator.isDone()) {
+			theType = theIterator.currentSegment(theData);
+
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+				numParts++;
+				ptSrc.setLocation(theData[0], theData[1]);
+				at.transform(ptSrc, ptDst);
+				antX = (int) ptDst.getX();
+				antY = (int) ptDst.getY();
+				newGp.moveTo(antX, antY);
+				numSegmentsAdded++;
+				bFirst = true;
+				break;
+
+			case PathIterator.SEG_LINETO:
+				ptSrc.setLocation(theData[0], theData[1]);
+				at.transform(ptSrc, ptDst);
+				xInt = (int) ptDst.getX();
+				yInt = (int) ptDst.getY();
+				if ((bFirst) || ((xInt != antX) || (yInt != antY)))
+				{
+					newGp.lineTo(xInt, yInt);
+					antX = xInt;
+					antY = yInt;
+					bFirst = false;
+					numSegmentsAdded++;
+				}
+				break;
+
+			case PathIterator.SEG_QUADTO:
+				at.transform(theData,0,aux,0,2);
+				newGp.quadTo(aux[0], aux[1], aux[2], aux[3]);
+				numSegmentsAdded++;
+				break;
+
+			case PathIterator.SEG_CUBICTO:
+				at.transform(theData,0,aux,0,3);
+				newGp.curveTo(aux[0], aux[1], aux[2], aux[3], aux[4], aux[5]);
+				numSegmentsAdded++;
+				break;
+
+			case PathIterator.SEG_CLOSE:
+				if (numSegmentsAdded < 3) {
+					newGp.lineTo(antX, antY);
+				}
+				newGp.closePath();
+
+				break;
+			} //end switch
+
+			theIterator.next();
+		} //end while loop
+
+		Geometry geom = null;
+		switch (gp.getType()) {
+		case Geometry.TYPES.POINT:
+			geom = geomManager.createPoint(ptDst.getX(), ptDst.getY(), SUBTYPES.GEOM2D);
+			break;
+		case Geometry.TYPES.CURVE:
+		case Geometry.TYPES.ARC:
+			geom = geomManager.createCurve(newGp, SUBTYPES.GEOM2D);
+			break;
+
+		case Geometry.TYPES.SURFACE:
+		case Geometry.TYPES.CIRCLE:
+		case Geometry.TYPES.ELLIPSE:
+
+			geom = geomManager.createSurface(newGp, SUBTYPES.GEOM2D);
+			break;
+		}
+		return geom;
+	}
+
+	public static void register() {
+		
+		GeometryManager gm = GeometryLocator.getGeometryManager();
+		CODE = gm.getGeometryOperationCode(NAME);
+		geomManager.registerGeometryOperation(NAME, new DrawInts());
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawInts.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/Draw.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/Draw.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/Draw.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import java.awt.geom.AffineTransform;
+
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.GeometryLocator;
+
+public class Draw extends GeometryOperation{
+	public static final String NAME = "draw";
+	public static int CODE = Integer.MIN_VALUE;
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		DrawOperationContext doc = (DrawOperationContext)ctx;
+		AffineTransform at = doc.getViewPort().getAffineTransform();		
+		doc.getSymbol().draw(doc.getGraphics(), at, geom, doc.getFeature(),
+				doc.getCancellable());
+		return null;
+	}
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	public static void register() {
+		
+		GeometryManager geoMan = GeometryLocator.getGeometryManager();
+		CODE = geoMan.getGeometryOperationCode(NAME);
+		geoMan.registerGeometryOperation(NAME, new Draw());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/Draw.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDrawInts.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDrawInts.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDrawInts.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class AggregateDrawInts extends GeometryOperation {
+	public static final String NAME = "drawInts";
+	public static int CODE = Integer.MIN_VALUE;
+
+	
+	final static private Logger logger = LoggerFactory
+			.getLogger(DrawInts.class);
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+	 */
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.geom.operation.GeometryOperation#invoke(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.geom.operation.GeometryOperationContext)
+	 */
+	public Object invoke(Geometry geom, GeometryOperationContext ctx)
+			throws GeometryOperationException {
+
+		Aggregate aggregate = (Aggregate) geom;
+		for (int i=0;i<aggregate.getPrimitivesNumber();i++){
+			Geometry prim = aggregate.getPrimitiveAt(i);
+			try {
+				prim.invokeOperation(CODE, ctx);
+			} catch (GeometryOperationNotSupportedException e) {
+				throw new GeometryOperationException(e);
+			}
+		}
+		return null;
+	}
+
+	public static void register() {
+		GeometryManager geoMan = GeometryLocator.getGeometryManager();
+
+		CODE = geoMan.getGeometryOperationCode(NAME);
+		
+		geoMan.registerGeometryOperation(NAME, new AggregateDrawInts(),
+				TYPES.AGGREGATE);
+		geoMan.registerGeometryOperation(NAME, new AggregateDrawInts(),
+				TYPES.MULTIPOINT);
+		geoMan.registerGeometryOperation(NAME, new AggregateDrawInts(),
+				TYPES.MULTICURVE);
+		geoMan.registerGeometryOperation(NAME, new AggregateDrawInts(),
+				TYPES.MULTISURFACE);
+		geoMan.registerGeometryOperation(NAME, new AggregateDrawInts(),
+				TYPES.MULTISOLID);
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/AggregateDrawInts.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawOperationContext.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import java.awt.Graphics2D;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.task.Cancellable;
+
+
+public class DrawOperationContext extends GeometryOperationContext{
+	private ISymbol symbol=null;
+	private Graphics2D graphics=null;
+	private Cancellable cancellable;
+	private double dpi;
+	private double scale;
+	private boolean hasDPI=false;
+	private ViewPort viewPort;
+	private Feature feature;
+	
+	public ViewPort getViewPort() {
+		return viewPort;
+	}
+	public void setViewPort(ViewPort viewPort) {
+		this.viewPort = viewPort;
+	}
+	public Graphics2D getGraphics() {
+		return graphics;
+	}
+	public void setGraphics(Graphics2D graphics) {
+		this.graphics = graphics;
+	}
+	public ISymbol getSymbol() {
+		return symbol;
+	}
+	public void setSymbol(ISymbol symbol) {
+		this.symbol = symbol;
+	}
+	public void setCancellable(Cancellable cancel) {
+		this.cancellable=cancel;
+
+	}
+	public Cancellable getCancellable() {
+		return cancellable;
+	}
+	public void setDPI(double dpi) {
+		this.hasDPI=true;
+		this.dpi=dpi;
+	}
+	public double getDPI(){
+		return dpi;
+	}
+	public boolean hasDPI() {
+		return hasDPI;
+	}
+	/**
+	 * @param scale the scale to set
+	 */
+	public void setScale(double scale) {
+		this.scale = scale;
+	}
+	/**
+	 * @return the scale
+	 */
+	public double getScale() {
+		return scale;
+	}
+	public Feature getFeature() {
+		return feature;
+	}
+	public void setFeature(Feature feature) {
+		this.feature = feature;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawOperationContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/MapContextGeomOperationsLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/MapContextGeomOperationsLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/MapContextGeomOperationsLibrary.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.operation;
+
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class MapContextGeomOperationsLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsServiceOf(MapContextLibrary.class);
+    }
+
+	protected void doInitialize() throws LibraryException {
+	}
+
+	protected void doPostInitialize() throws LibraryException {
+		// Register Draw Operations
+		Draw.register();
+		DrawInts.register();
+		AggregateDrawInts.register();
+		AggregateDraw.register();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/MapContextGeomOperationsLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.operation.MapContextGeomOperationsLibrary
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/RasterPolLinePointOrderManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/RasterPolLinePointOrderManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/RasterPolLinePointOrderManager.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.order.impl;
+
+import java.util.Map;
+
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class RasterPolLinePointOrderManager implements LayerOrderManager {
+
+	public static final String RASTER_POLYGON_LINE_POINT_LAYER_ORDER_MANAGER_PERSISTENCE_NAME =
+			"RASTER_POLYGON_LINE_POINT_LAYER_ORDER_MANAGER_PERSISTENCE_NAME";
+	
+	private static Logger logger =
+		LoggerFactory.getLogger(RasterPolLinePointOrderManager.class);
+	
+	public RasterPolLinePointOrderManager() {
+		
+	}
+	
+	public int getPosition(FLayers target, FLayer newLayer) {
+		
+		int new_weight = 3;
+		new_weight = getLayerWeight(newLayer);
+		
+		int len = target.getLayersCount();
+		int item_w = 0;
+		// from top to bottom,
+		// look for a layer at
+		// least as "heavy" as this one
+		for (int i=(len-1); i>=0; i--) {
+			item_w = getLayerWeight(target.getLayer(i));
+			if (item_w >= new_weight) {
+				return (i+1);
+			}
+		}
+		// layer "falls" to bottom
+		return 0;
+	}
+
+	public String getDescription() {
+		return Messages.getText("_Raster_at_bottom_then_polygons_lines_points");
+	}
+
+	public String getName() {
+		return Messages.getText("_Raster_Polygon_Line_Point_order_manager");
+	}
+
+	
+	public String getCode() {
+		return this.getClass().getName();
+	}
+
+	/**
+	 * 
+	 * @param lyr
+	 * @return weight: point=0, line=1, polygon=2, other=3, raster=4
+	 */
+	private int getLayerWeight(FLayer lyr) {
+		
+		if (lyr.getClass().getName().toLowerCase().indexOf("raster") != -1) {
+			return 4;
+		} else {
+			if (lyr instanceof FLyrVect) {
+				FLyrVect lyrv = (FLyrVect) lyr;
+				int type2d = Geometry.TYPES.SURFACE;
+				try {
+					type2d = simplifyType(lyrv.getGeometryType());
+				} catch (ReadException e) {
+					logger.error("While getting geo type.", e);
+				}
+				switch (type2d) {
+				case TYPES.SURFACE:
+					return 2;
+				case TYPES.CURVE:
+					return 1;
+				case TYPES.POINT:
+					return 0;
+				default:
+					// should not reach this
+					return 3;
+				}
+			} else {
+				// other:
+				return 3;
+			}
+		}
+		
+	}
+
+	/**
+	 * 
+	 */
+	private int simplifyType(GeometryType gt) {
+
+		if (gt.getType() == TYPES.POINT || gt.getType() == TYPES.MULTIPOINT) {
+			return TYPES.POINT;
+		} else {
+			if (gt.isTypeOf(TYPES.CURVE) || gt.getType() == TYPES.MULTICURVE) {
+				return TYPES.CURVE;
+			} else {
+				if (gt.isTypeOf(TYPES.SURFACE) || gt.getType() == TYPES.MULTISURFACE) {
+					return TYPES.SURFACE;
+				} else {
+					// default
+					return TYPES.SURFACE;
+				}
+			}
+		}
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("name", this.getName());
+	}
+	
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if (manager.getDefinition(RASTER_POLYGON_LINE_POINT_LAYER_ORDER_MANAGER_PERSISTENCE_NAME) == null) {
+			DynStruct def = manager.addDefinition(
+					RasterPolLinePointOrderManager.class,
+					RASTER_POLYGON_LINE_POINT_LAYER_ORDER_MANAGER_PERSISTENCE_NAME,
+					RASTER_POLYGON_LINE_POINT_LAYER_ORDER_MANAGER_PERSISTENCE_NAME +" Persistence definition",
+					null, 
+					null);
+			def.addDynFieldString("name").setMandatory(true);
+		}			
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		return new RasterPolLinePointOrderManager();
+	}
+	
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/TrivialLayerOrderManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/TrivialLayerOrderManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/TrivialLayerOrderManager.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.mapcontext.layers.order.impl;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class TrivialLayerOrderManager implements LayerOrderManager {
+
+	public static final String TRIVIAL_LAYER_ORDER_MANAGER_PERSISTENCE_NAME =
+			"TRIVIAL_LAYER_ORDER_MANAGER_PERSISTENCE_NAME";
+
+	public TrivialLayerOrderManager() {
+		
+	}
+	
+	public int getPosition(FLayers target, FLayer newLayer) {
+		/*
+		 * Always on top
+		 */
+		return target.getLayersCount();
+	}
+
+	public String getName() {
+		return Messages.getText("_Default_order");
+	}
+
+	public String getDescription() {
+		return Messages.getText("_Layers_are_placed_always_on_top");
+	}
+
+	public String getCode() {
+		return this.getClass().getName();
+	}
+	
+	public void loadFromState(PersistentState state) throws PersistenceException {
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("name", this.getName());
+	}
+	
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if (manager.getDefinition(TRIVIAL_LAYER_ORDER_MANAGER_PERSISTENCE_NAME) == null) {
+			DynStruct def = manager.addDefinition(
+					TrivialLayerOrderManager.class,
+					TRIVIAL_LAYER_ORDER_MANAGER_PERSISTENCE_NAME,
+					TRIVIAL_LAYER_ORDER_MANAGER_PERSISTENCE_NAME +" Persistence definition",
+					null, 
+					null);
+			def.addDynFieldString("name").setMandatory(true);
+		}			
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		return new TrivialLayerOrderManager();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/BasicLayerOrderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/BasicLayerOrderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/layers/order/impl/BasicLayerOrderLibrary.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.mapcontext.layers.order.impl;
+
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+
+/**
+ * Registers the default implementation for {@link LayerOrderManager}
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class BasicLayerOrderLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        require(MapContextLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        Messages.addResourceFamily(
+        		"org.gvsig.fmap.mapcontext.impl.i18n.text",
+        		BasicLayerOrderLibrary.class.getClassLoader(),
+        		BasicLayerOrderLibrary.class.getClass().getName());
+        
+    	TrivialLayerOrderManager.registerPersistent();
+    	RasterPolLinePointOrderManager.registerPersistent();
+
+        MapContextLocator.registerDefaultOrderManager(
+    			TrivialLayerOrderManager.class);
+    	MapContextLocator.registerOrderManager(
+    			RasterPolLinePointOrderManager.class);
+    }
+
+    protected void doPostInitialize() throws LibraryException {  	
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/fmap/mapcontext/impl/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/fmap/mapcontext/impl/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/fmap/mapcontext/impl/i18n/text.properties	(revision 42196)
@@ -0,0 +1,4 @@
+_Raster_at_bottom_then_polygons_lines_points=Capas de im�genes en el fondo, despu�s pol�gonos, l�neas y puntos
+_Raster_Polygon_Line_Point_order_manager=Orden Im�genes-Pol�gonos-L�neas-Puntos
+_Default_order=Orden por defecto
+_Layers_are_placed_always_on_top=Las capas se colocan siempre sobre las existentes
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/fmap/mapcontext/impl/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/fmap/mapcontext/impl/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/fmap/mapcontext/impl/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,5 @@
+_Raster_at_bottom_then_polygons_lines_points=Raster layers at bottom, then polygon, linear and point layers
+_Raster_Polygon_Line_Point_order_manager=Raster-Polygon-Line-Point order
+_Default_order=Default order
+_Layers_are_placed_always_on_top=Layers are placed always on top
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.fmap.mapcontext.layers.order.impl.BasicLayerOrderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/pom.xml	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.fmap.mapcontext.impl</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+  
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.compat.cdc
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/src/main/assembly/gvsig-root-folder-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/src/main/assembly/gvsig-root-folder-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/src/main/assembly/gvsig-root-folder-package.xml	(revision 42196)
@@ -0,0 +1,42 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>false</includeBaseDirectory>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/src/main/assembly/gvsig-root-folder-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/src/main/svn/svn.ignore.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.97/src/main/svn/svn.ignore.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/src/main/svn/svn.ignore.sh	(revision 42196)
@@ -0,0 +1,39 @@
+#!/bin/bash
+#
+# gvSIG. Desktop Geographic Information System.
+#
+# Copyright (C) 2007-2013 gvSIG Association.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+#
+# For any additional information, do not hesitate to contact us
+# at info AT gvsig.com, or visit our website www.gvsig.com.
+#
+
+#
+# Add to svn ignore the files generated by eclipse and maven
+#
+cd ../../..
+EXCLUDE_FILES=$PWD/src/main/svn/svn.ignore.files
+PROJECTS=$(find $PWD -name pom.xml)
+for f in $PROJECTS
+do
+  folder=$(dirname $f)
+  cd $folder
+  pwd
+  svn propset svn:ignore -F $EXCLUDE_FILES .
+done
+
Index: tags/org.gvsig.desktop-2.0.97/src/main/svn/svn.ignore.files
===================================================================
--- tags/org.gvsig.desktop-2.0.97/src/main/svn/svn.ignore.files	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/src/main/svn/svn.ignore.files	(revision 42196)
@@ -0,0 +1,8 @@
+.project
+.classpath
+.settings
+.settings/**
+target
+target/**
+
+
Index: tags/org.gvsig.desktop-2.0.97/src/main/sh/make-gvsig
===================================================================
--- tags/org.gvsig.desktop-2.0.97/src/main/sh/make-gvsig	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/src/main/sh/make-gvsig	(revision 42196)
@@ -0,0 +1,173 @@
+#!/bin/bash
+
+#set -x 
+
+export PATH=/home/gvsig/applications/maven/bin:$PATH
+export HOME=/home/gvsig
+export WORKSPACE=$HOME/workspace
+export M2=$HOME/.m2
+export LOGSDIR=$HOME/temp
+
+#
+# Requiere tener instalado y en el path:
+# - mvn (maven 3)
+# - svn
+# - launch4j / launch4jc
+# - installjammer
+#
+# Ademas se precisara configurar :
+# - un usuario con con permiso de escritura  en el repositorio de gvsig 
+#   de maven (settings.xml).
+# - en la jvm que use maven el certificado de https://devel.gvsig.org
+# - el svn para que acepte el cerfificado de https://devel.gvsig.org
+# - en el svn un usuario/clave con permiso para escritura en el svn de 
+#   org.gvsig.desktop.
+#
+
+
+
+
+function message() {
+  echo "
+### =============================
+### $(date) $(pwd)
+### $1
+### =============================
+"
+}
+
+function maven() {
+  message "mvn $*"
+  mvn  -s $M2/settings.xml -Dsettings.security=$M2/settings-security.xml -Dmaven.repo.local=$M2/repository $*
+}
+
+function svn-update() {
+
+  cd $WORKSPACE
+  if [ -d org.gvsig.desktop/.svn ] ; then
+    cd org.gvsig.desktop
+    message "svn update"
+    svn update
+  else
+    message "rm -rf org.gvsig.desktop"
+    rm -rf org.gvsig.desktop
+    message "svn co https://devel.gvsig.org/svn/gvsig-desktop/trunk/org.gvsig.desktop"
+    svn co https://devel.gvsig.org/svn/gvsig-desktop/trunk/org.gvsig.desktop
+  fi
+}
+
+function svn-checkout() {
+
+  cd $WORKSPACE
+  message "rm -rf org.gvsig.desktop"
+  rm -rf org.gvsig.desktop
+  message "svn co https://devel.gvsig.org/svn/gvsig-desktop/trunk/org.gvsig.desktop"
+  svn co https://devel.gvsig.org/svn/gvsig-desktop/trunk/org.gvsig.desktop
+}
+
+function make-installers() {
+  #
+  # Checkout the latest version of sources
+  svn-update
+
+  #
+  # Compile and install the resources need in the project.
+  cd $WORKSPACE/org.gvsig.desktop/org.gvsig.desktop.buildtools
+  maven clean install
+
+  #
+  # Do a clean install to compile all
+  cd $WORKSPACE/org.gvsig.desktop
+  maven clean install
+
+  #
+  # Generarte installables
+  cd $WORKSPACE/org.gvsig.desktop/org.gvsig.desktop.installer
+  maven install
+  #
+  message "Finish"
+}
+
+function make-release() {
+
+  #
+  # Checkout the latest version of sources
+  svn-update
+
+  #
+  # Compile and install the resources need in the project.
+  cd $WORKSPACE/org.gvsig.desktop/org.gvsig.desktop.buildtools
+  maven clean install
+
+  #
+  # Do a clean install to compile all
+  cd $WORKSPACE/org.gvsig.desktop
+  maven clean install
+
+  maven release:prepare
+
+  maven release:perform
+
+  #
+  # Generarte installables
+  cd $WORKSPACE/org.gvsig.desktop/org.gvsig.desktop.installer
+  maven install
+  #
+  message "Finish"
+}
+
+
+case "$1" in
+"" | "installers" )
+	make-installers >$LOGSDIR/make-gvsig.log 2>&1 &
+	;;
+"release")
+	make-release >$LOGSDIR/make-gvsig.log 2>&1 &
+	;;
+"up"|"update")
+	svn-update >$LOGSDIR/make-gvsig.log 2>&1 &
+	;;
+"co"|"checkout")
+	svn-checkout >$LOGSDIR/make-gvsig.log 2>&1 &
+	;;
+"mvn")
+  shift
+	maven $@ >$LOGSDIR/make-gvsig.log 2>&1 &
+	;;
+"svn")
+  shift
+	svn $@ >$LOGSDIR/make-gvsig.log 2>&1 &
+	;;
+"log")
+	shift 
+	tail $* $LOGSDIR/make-gvsig.log
+	;;
+"help")
+  echo "Usage:
+make-gvsig 
+make-gvsig installers
+  Download, compile and create installers for gvSIG.
+
+make-gvsig release
+  Download, compile, make a new release and create installers for gvSIG.
+
+make-gvsig log
+  Show the log of the last execution.
+  
+make-gvsig mvn MAVEN-ARGS
+  Execute maven command
+
+make-gvsig svn SVN-ARGS
+  Execute svn command
+
+make-gvsig update
+make-gvsig up
+  Execute an update from the svn
+
+make-gvsig checkout
+make-gvsig co
+  Execute a checkout from the svn
+
+"
+esac
+

Property changes on: tags/org.gvsig.desktop-2.0.97/src/main/sh/make-gvsig
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java	(revision 42196)
@@ -0,0 +1,272 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andamiupdater;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.lang.reflect.Method;
+
+import com.sardak.antform.AntForm;
+import com.sardak.antform.AntMenu;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class Updater {
+
+    private String[] args;
+
+    /**
+     * @param args
+     */
+    public Updater(String[] args) {
+        this.args = args;
+    }
+
+    /**
+     * @param args
+     * @throws Exception
+     */
+    public static void main(String[] args) throws Exception {
+        Updater updater = new Updater(args);
+        updater.copyFiles();
+        updater.executeScripts();
+        updater.removeAll();
+        updater.launchApp(args);
+    }
+
+    private File getApplicationDirectory() {
+        String appDir = new File("").getAbsolutePath();
+        return new File(appDir);
+    }
+
+    private File getPluginsDirectory() {
+        return new File(getApplicationDirectory(), this.args[1]);
+    }
+
+    /**
+     * @param args
+     * @throws Exception
+     */
+    @SuppressWarnings("unchecked")
+    private void launchApp(String[] args) throws Exception {
+
+        try {
+
+            Class launcher_class = Class.forName("com.iver.andami.Launcher");
+
+            Object launcher = launcher_class.newInstance();
+            Method main =
+                launcher_class
+                    .getMethod("main", new Class[] { String[].class });
+
+            main.invoke(launcher, new Object[] { args });
+
+        } catch (ClassNotFoundException e) {
+
+            Class launcher_class = Class.forName("org.gvsig.andami.Launcher");
+            Object launcher = launcher_class.newInstance();
+            Method main =
+                launcher_class
+                    .getMethod("main", new Class[] { String[].class });
+
+            main.invoke(launcher, new Object[] { args });
+        }
+    }
+
+    /**
+     * 
+     */
+    private void removeAll() {
+        File updateDirectory =
+            new File(getApplicationDirectory().toString() + File.separator
+                + "update");
+        if (updateDirectory.exists()) {
+            deleteDir(updateDirectory);
+        }
+
+    }
+
+    private boolean deleteDir(File dir) {
+        if (dir.isDirectory()) {
+            String[] children = dir.list();
+            for (int i = 0; i < children.length; i++) {
+                boolean success = deleteDir(new File(dir, children[i]));
+                if (!success) {
+                    return false;
+                }
+            }
+        }
+
+        // The directory is now empty so delete it
+        return dir.delete();
+    }
+
+    /**
+     * Reads every line of appDirectory/update/scripts.lst and executes the ant
+     * file that this line points to
+     */
+    private void executeScripts() {
+
+        String antFilesScriptPath =
+            getApplicationDirectory() + File.separator + "update"
+                + File.separator + "scripts.lst";
+        File antFilesScript = new File(antFilesScriptPath);
+
+        if (antFilesScript.exists()) {
+            try {
+
+                FileInputStream fstream = new FileInputStream(antFilesScript);
+
+                // Get the object of DataInputStream
+                DataInputStream in = new DataInputStream(fstream);
+                BufferedReader br =
+                    new BufferedReader(new InputStreamReader(in));
+                String strLine;
+
+                // Read File Line By Line
+                while ((strLine = br.readLine()) != null) {
+                    // Print the content on the console
+                    File antFile = new File(strLine);
+                    executeAntFile(antFile);
+                }
+
+                // Close the input stream
+                in.close();
+
+            } catch (Exception e) {// Catch exception if any
+                System.err.println("Error: " + e.getMessage());
+            }
+
+        }
+
+    }
+
+    /**
+     * Copies all files and folders from gvSIG/update to gvSIG/extensions
+     * 
+     * @throws IOException
+     * 
+     */
+    private void copyFiles() throws IOException {
+        File updateFolder =
+            new File(getApplicationDirectory().toString() + File.separator
+                + "update");
+        File filesFolder =
+            new File(updateFolder.toString() + File.separator + "files");
+        File pluginsDirectory = getPluginsDirectory();
+
+        if (updateFolder.exists()) {
+            String[] childrenDirs = filesFolder.list();
+
+            if (childrenDirs != null) {
+                for (int i = 0; i < childrenDirs.length; i++) {
+                    File sourceLocation =
+                        new File(filesFolder, childrenDirs[i]);
+                    File targetLocation =
+                        new File(pluginsDirectory, childrenDirs[i]);
+                    // lo copio todo
+                    copyFilesAndFolders(sourceLocation, targetLocation);
+                }
+            }
+        }
+    }
+
+    private boolean copyFilesAndFolders(File sourceLocation, File targetLocation)
+        throws IOException {
+
+        if (sourceLocation.isDirectory()) {
+            if (!targetLocation.exists()) {
+                targetLocation.mkdir();
+            }
+
+            String[] children = sourceLocation.list();
+            if (children != null) {
+                for (int i = 0; i < children.length; i++) {
+                    copyFilesAndFolders(new File(sourceLocation, children[i]),
+                        new File(targetLocation, children[i]));
+                }
+            }
+        } else {
+            InputStream in = new FileInputStream(sourceLocation);
+            OutputStream out = new FileOutputStream(targetLocation);
+
+            // Copy the bits from instream to outstream
+            byte[] buf = new byte[1024];
+            int len;
+            while ((len = in.read(buf)) > 0) {
+                out.write(buf, 0, len);
+            }
+            in.close();
+            out.close();
+        }
+
+        return true;
+    }
+
+    // PRIVATE VOID EXECUTEANTFILE(FILE FILE) {
+    // PROJECT P = NEW PROJECT();
+    // P.SETUSERPROPERTY("ANT.FILE", FILE.GETABSOLUTEPATH());
+    // P.SETPROPERTY("GVSIG_DIR", GETAPPLICATIONDIRECTORY().GETABSOLUTEPATH());
+    // P
+    // .SETPROPERTY("EXTENSIONS_DIR", GETPLUGINSDIRECTORY()
+    // .GETABSOLUTEPATH());
+    // P.INIT();
+    // PROJECTHELPER HELPER = PROJECTHELPER.GETPROJECTHELPER();
+    // P.ADDREFERENCE("ANT.PROJECTHELPER", HELPER);
+    // HELPER.PARSE(P, FILE);
+    // P.EXECUTETARGET(P.GETDEFAULTTARGET());
+    // }
+
+    private void executeAntFile(File file) {
+        Project p = new Project();
+        p.setUserProperty("ant.file", file.getAbsolutePath());
+        p.setUserProperty("gvsig_dir", getApplicationDirectory()
+            .getAbsolutePath());
+        p.setUserProperty("extensions_dir", getPluginsDirectory()
+            .getAbsolutePath());
+        p.init();
+        p.setBaseDir(file.getParentFile());
+        p.addTaskDefinition("antform", AntForm.class);
+        p.addTaskDefinition("antmenu", AntMenu.class);
+        p.init();
+        ProjectHelper helper = ProjectHelper.getProjectHelper();
+        p.addReference("ant.projectHelper", helper);
+        helper.parse(p, file);
+        p.executeTarget(p.getDefaultTarget());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml	(revision 42196)
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.andami.updater</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.framework</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    
+    <dependencies>
+      <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.tools.lib</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.installer.lib.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.ant</groupId>
+        <artifactId>ant</artifactId>
+        <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>com.sardak</groupId>
+          <artifactId>antform</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      
+      <!--  Need to include dependencies with andami in the MANIFEST classpath entry -->
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.andami</artifactId>
+          <scope>runtime</scope>
+      </dependency>
+    </dependencies>
+
+  <build>
+    <plugins>
+
+     <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <configuration>
+              <archive>
+                  <manifest>
+                      <addClasspath>true</addClasspath>
+                      <mainClass>org.gvsig.andamiupdater.Updater</mainClass>
+                  </manifest>
+              </archive>
+          </configuration>
+      </plugin>
+
+        <plugin>
+          <groupId>org.codehaus.gmaven</groupId>
+          <artifactId>gmaven-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>install-plugin</id>
+              <phase>install</phase>
+              <goals>
+                <goal>execute</goal>
+              </goals>
+              <configuration>
+                <source><![CDATA[
+                  ant = new AntBuilder()
+                  source = project.basedir.getAbsolutePath() + 
+                    "/target/" + 
+                    project.artifactId + "-" +
+                    project.version +
+                    ".jar"
+                  target = project.properties["gvsig.product.folder.path"] + 
+                    "/lib/" +
+                    project.artifactId + "-" +
+                    project.version +
+                    ".jar"
+                  ant.copy(file: source, tofile: target)
+                ]]></source>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+
+    </plugins>
+  </build>
+
+            
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami.updater
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/pom.xml	(revision 42196)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.desktop.framework</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <modules>
+        <module>org.gvsig.andami</module>
+        <module>org.gvsig.andami.updater</module>
+    </modules>
+
+    <description>Contains the launcher and plugin framework used in gvSIG.</description>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/pom.xml
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/test/java/org/gvsig/andami/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/test/java/org/gvsig/andami/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/test/java/org/gvsig/andami/AllTests.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for com.iver.andami");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/test/java/org/gvsig/andami/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.andami.PluginsLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/iso_639.tab
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/iso_639.tab	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/iso_639.tab	(revision 42196)
@@ -0,0 +1,506 @@
+
+## iso-639.tab
+##
+## Copyright (C) 2005 Alastair McKinstry   <mckinstry@computer.org> 
+## Released under the GNU License; see file COPYING for details
+##
+## PLEASE NOTE: THIS FILE IS DEPRECATED AND SCHEDULED TO BE REMOVED.
+## IT IS FOR BACKWARD-COMPATIBILITY ONLY: PLEASE USE THE ISO-639.XML
+## FILE INSTEAD.
+##
+## This file gives a list of all languages in the ISO-639
+## standard, and is used to provide translations (via gettext)
+##
+## Status: ISO 639-2:1998 + additions and changes until 2003-03-05
+## Source: http://lcweb.loc.gov/standards/iso639-2/englangn.html
+##
+## Columns:
+##   iso-639-2 terminology code
+##   iso-639-2 bibliography code
+##   iso-639-1 code (XX if none exists)
+##   Name (English)
+##
+##
+aar	aar	aa	Afar
+abk	abk	ab	Abkhazian
+ace	ace	XX	Achinese
+ach	ach	XX	Acoli
+ada	ada	XX	Adangme
+ady	ady	XX	Adyghe; Adygei
+afa	afa	XX	Afro-Asiatic (Other)
+afh	afh	XX	Afrihili
+afr	afr	af	Afrikaans
+ain	ain	XX	Ainu
+aka	aka	ak	Akan
+akk	akk	XX	Akkadian
+ale	ale	XX	Aleut
+alg	alg	XX	Algonquian languages
+alt	alt	XX	Southern Altai
+amh	amh	am	Amharic
+ang	ang	XX	English, Old (ca. 450-1100)
+anp	anp	XX	Angika
+apa	apa	XX	Apache languages
+ara	ara	ar	Arabic
+arc	arc	XX	Aramaic
+arg	arg	an	Aragonese
+arn	arn	XX	Araucanian
+arp	arp	XX	Arapaho
+art	art	XX	Artificial (Other)
+arw	arw	XX	Arawak
+asm	asm	as	Assamese
+ast	ast	XX	Asturian; Bable
+ath	ath	XX	Athapascan languages
+aus	aus	XX	Australian languages
+ava	ava	av	Avaric
+ave	ave	ae	Avestan
+awa	awa	XX	Awadhi
+aym	aym	ay	Aymara
+aze	aze	az	Azerbaijani
+bad	bad	XX	Banda
+bai	bai	XX	Bamileke languages
+bak	bak	ba	Bashkir
+bal	bal	XX	Baluchi
+bam	bam	bm	Bambara
+ban	ban	XX	Balinese
+bas	bas	XX	Basa
+bat	bat	XX	Baltic (Other)
+bej	bej	XX	Beja
+bel	bel	be	Belarusian
+bem	bem	XX	Bemba
+ben	ben	bn	Bengali
+ber	ber	XX	Berber (Other)
+bho	bho	XX	Bhojpuri
+bih	bih	bh	Bihari
+bik	bik	XX	Bikol
+bin	bin	XX	Bini
+bis	bis	bi	Bislama
+bla	bla	XX	Siksika
+bnt	bnt	XX	Bantu (Other)
+bod	tib	bo	Tibetan
+bos	bos	bs	Bosnian
+bra	bra	XX	Braj
+bre	bre	br	Breton
+btk	btk	XX	Batak (Indonesia)
+bua	bua	XX	Buriat
+bug	bug	XX	Buginese
+bul	bul	bg	Bulgarian
+byn	byn	XX	Blin; Bilin
+cad	cad	XX	Caddo
+cai	cai	XX	Central American Indian (Other)
+car	car	XX	Carib
+cat	cat	ca	Catalan; Valencian
+cau	cau	XX	Caucasian (Other)
+ceb	ceb	XX	Cebuano
+cel	cel	XX	Celtic (Other)
+ces	cze	cs	Czech
+cha	cha	ch	Chamorro
+chb	chb	XX	Chibcha
+che	che	ce	Chechen
+chg	chg	XX	Chagatai
+chk	chk	XX	Chuukese
+chm	chm	XX	Mari
+chn	chn	XX	Chinook jargon
+cho	cho	XX	Choctaw
+chp	chp	XX	Chipewyan
+chr	chr	XX	Cherokee
+chu	chu	cu	Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
+chv	chv	cv	Chuvash
+chy	chy	XX	Cheyenne
+cmc	cmc	XX	Chamic languages
+cop	cop	XX	Coptic
+cor	cor	kw	Cornish
+cos	cos	co	Corsican
+cpe	cpe	XX	Creoles and pidgins, English based (Other)
+cpf	cpf	XX	Creoles and pidgins, French-based (Other)
+cpp	cpp	XX	Creoles and pidgins, Portuguese-based (Other)
+cre	cre	cr	Cree
+crh	crh	XX	Crimean Tatar; Crimean Turkish
+crp	crp	XX	Creoles and pidgins (Other)
+csb	csb	XX	Kashubian
+cus	cus	XX	Cushitic (Other)
+cym	wel	cy	Welsh
+dak	dak	XX	Dakota
+dan	dan	da	Danish
+dar	dar	XX	Dargwa
+day	day	XX	Dayak
+del	del	XX	Delaware
+den	den	XX	Slave (Athapascan)
+deu	ger	de	German
+dgr	dgr	XX	Dogrib
+din	din	XX	Dinka
+div	div	dv	Divehi; Dhivehi; Maldivian
+doi	doi	XX	Dogri
+dra	dra	XX	Dravidian (Other)
+dsb	dsb	XX	Lower Sorbian
+dua	dua	XX	Duala
+dum	dum	XX	Dutch, Middle (ca. 1050-1350)
+dyu	dyu	XX	Dyula
+dzo	dzo	dz	Dzongkha
+efi	efi	XX	Efik
+egy	egy	XX	Egyptian (Ancient)
+eka	eka	XX	Ekajuk
+ell	gre	el	Greek, Modern (1453-)
+elx	elx	XX	Elamite
+eng	eng	en	English
+enm	enm	XX	English, Middle (1100-1500)
+epo	epo	eo	Esperanto
+est	est	et	Estonian
+eus	baq	eu	Basque
+ewe	ewe	ee	Ewe
+ewo	ewo	XX	Ewondo
+fan	fan	XX	Fang
+fao	fao	fo	Faroese
+fas	per	fa	Persian
+fat	fat	XX	Fanti
+fij	fij	fj	Fijian
+fil	fil	XX	Filipino; Pilipino
+fin	fin	fi	Finnish
+fiu	fiu	XX	Finno-Ugrian (Other)
+fon	fon	XX	Fon
+fra	fre	fr	French
+frm	frm	XX	French, Middle (ca. 1400-1600)
+fro	fro	XX	French, Old (842-ca. 1400)
+frr	frr	XX	Northern Frisian
+frs	frs	XX	Eastern Frisian
+fry	fry	fy	Western Frisian
+ful	ful	ff	Fulah
+fur	fur	XX	Friulian
+gaa	gaa	XX	Ga
+gay	gay	XX	Gayo
+gba	gba	XX	Gbaya
+gem	gem	XX	Germanic (Other)
+gez	gez	XX	Geez
+gil	gil	XX	Gilbertese
+gla	gla	gd	Gaelic; Scottish Gaelic
+gle	gle	ga	Irish
+glg	glg	gl	Galician
+glv	glv	gv	Manx
+gmh	gmh	XX	German, Middle High (ca. 1050-1500)
+goh	goh	XX	German, Old High (ca. 750-1050)
+gon	gon	XX	Gondi
+gor	gor	XX	Gorontalo
+got	got	XX	Gothic
+grb	grb	XX	Grebo
+grc	grc	XX	Greek, Ancient (to 1453)
+grn	grn	gn	Guarani
+gsw	gsw	XX	Alemanic; Swiss German
+guj	guj	gu	Gujarati
+gwi	gwi	XX	Gwich´in
+hai	hai	XX	Haida
+hat	hat	ht	Haitian; Haitian Creole
+hau	hau	ha	Hausa
+haw	haw	XX	Hawaiian
+heb	heb	he	Hebrew
+her	her	hz	Herero
+hil	hil	XX	Hiligaynon
+him	him	XX	Himachali
+hin	hin	hi	Hindi
+hit	hit	XX	Hittite
+hmn	hmn	XX	Hmong
+hmo	hmo	ho	Hiri Motu
+hrv	scr	hr	Croatian
+hsb	hsb	XX	Upper Sorbian
+hun	hun	hu	Hungarian
+hup	hup	XX	Hupa
+hye	arm	hy	Armenian
+iba	iba	XX	Iban
+ibo	ibo	ig	Igbo
+ido	ido	io	Ido
+iii	iii	ii	Sichuan Yi
+ijo	ijo	XX	Ijo
+iku	iku	iu	Inuktitut
+ile	ile	ie	Interlingue
+ilo	ilo	XX	Iloko
+ina	ina	ia	Interlingua (International Auxiliary Language Association)
+inc	inc	XX	Indic (Other)
+ind	ind	id	Indonesian
+ine	ine	XX	Indo-European (Other)
+inh	inh	XX	Ingush
+ipk	ipk	ik	Inupiaq
+ira	ira	XX	Iranian (Other)
+iro	iro	XX	Iroquoian languages
+isl	ice	is	Icelandic
+ita	ita	it	Italian
+jav	jav	jv	Javanese
+jbo	jbo	XX	Lojban
+jpn	jpn	ja	Japanese
+jpr	jpr	XX	Judeo-Persian
+jrb	jrb	XX	Judeo-Arabic
+kaa	kaa	XX	Kara-Kalpak
+kab	kab	XX	Kabyle
+kac	kac	XX	Kachin
+kal	kal	kl	Kalaallisut; Greenlandic
+kam	kam	XX	Kamba
+kan	kan	kn	Kannada
+kar	kar	XX	Karen
+kas	kas	ks	Kashmiri
+kat	geo	ka	Georgian
+kau	kau	kr	Kanuri
+kaw	kaw	XX	Kawi
+kaz	kaz	kk	Kazakh
+kbd	kbd	XX	Kabardian
+kha	kha	XX	Khasi
+khi	khi	XX	Khoisan (Other)
+khm	khm	km	Khmer
+kho	kho	XX	Khotanese
+kik	kik	ki	Kikuyu; Gikuyu
+kin	kin	rw	Kinyarwanda
+kir	kir	ky	Kirghiz
+kmb	kmb	XX	Kimbundu
+kok	kok	XX	Konkani
+kom	kom	kv	Komi
+kon	kon	kg	Kongo
+kor	kor	ko	Korean
+kos	kos	XX	Kosraean
+kpe	kpe	XX	Kpelle
+krc	krc	XX	Karachay-Balkar
+krl	krl	XX	Karelian
+kro	kro	XX	Kru
+kru	kru	XX	Kurukh
+kua	kua	kj	Kuanyama; Kwanyama
+kum	kum	XX	Kumyk
+kur	kur	ku	Kurdish
+kut	kut	XX	Kutenai
+lad	lad	XX	Ladino
+lah	lah	XX	Lahnda
+lam	lam	XX	Lamba
+lao	lao	lo	Lao
+lat	lat	la	Latin
+lav	lav	lv	Latvian
+lez	lez	XX	Lezghian
+lim	lim	li	Limburgan; Limburger; Limburgish
+lin	lin	ln	Lingala
+lit	lit	lt	Lithuanian
+lol	lol	XX	Mongo
+loz	loz	XX	Lozi
+ltz	ltz	lb	Luxembourgish; Letzeburgesch
+lua	lua	XX	Luba-Lulua
+lub	lub	lu	Luba-Katanga
+lug	lug	lg	Ganda
+lui	lui	XX	Luiseno
+lun	lun	XX	Lunda
+luo	luo	XX	Luo (Kenya and Tanzania)
+lus	lus	XX	Lushai
+mad	mad	XX	Madurese
+mag	mag	XX	Magahi
+mah	mah	mh	Marshallese
+mai	mai	XX	Maithili
+mak	mak	XX	Makasar
+mal	mal	ml	Malayalam
+man	man	XX	Mandingo
+map	map	XX	Austronesian (Other)
+mar	mar	mr	Marathi
+mas	mas	XX	Masai
+mdf	mdf	XX	Moksha
+mdr	mdr	XX	Mandar
+men	men	XX	Mende
+mga	mga	XX	Irish, Middle (900-1200)
+mic	mic	XX	Mi'kmaq; Micmac
+min	min	XX	Minangkabau
+mis	mis	XX	Miscellaneous languages
+mkd	mac	mk	Macedonian
+mkh	mkh	XX	Mon-Khmer (Other)
+mlg	mlg	mg	Malagasy
+mlt	mlt	mt	Maltese
+mnc	mnc	XX	Manchu
+mni	mni	XX	Manipuri
+mno	mno	XX	Manobo languages
+moh	moh	XX	Mohawk
+mol	mol	mo	Moldavian
+mon	mon	mn	Mongolian
+mos	mos	XX	Mossi
+mri	mao	mi	Maori
+msa	may	ms	Malay
+mul	mul	XX	Multiple languages
+mun	mun	XX	Munda languages
+mus	mus	XX	Creek
+mwl	mwl	XX	Mirandese
+mwr	mwr	XX	Marwari
+mya	bur	my	Burmese
+myn	myn	XX	Mayan languages
+myv	myv	XX	Erzya
+nah	nah	XX	Nahuatl
+nai	nai	XX	North American Indian
+nap	nap	XX	Neapolitan
+nau	nau	na	Nauru
+nav	nav	nv	Navajo; Navaho
+nbl	nbl	nr	Ndebele, South; South Ndebele
+nde	nde	nd	Ndebele, North; North Ndebele
+ndo	ndo	ng	Ndonga
+nds	nds	XX	Low German; Low Saxon; German, Low; Saxon, Low
+nep	nep	ne	Nepali
+new	new	XX	Newari; Nepal Bhasa
+nia	nia	XX	Nias
+nic	nic	XX	Niger-Kordofanian (Other)
+niu	niu	XX	Niuean
+nld	dut	nl	Dutch; Flemish
+nno	nno	nn	Norwegian Nynorsk; Nynorsk, Norwegian
+nob	nob	nb	Norwegian Bokmål; Bokmål, Norwegian
+nog	nog	XX	Nogai
+non	non	XX	Norse, Old
+nor	nor	no	Norwegian
+nqo	nqo	XX	N'ko
+nso	nso	XX	Northern Sotho, Pedi; Sepedi
+nub	nub	XX	Nubian languages
+nwc	nwc	XX	Classical Newari; Old Newari; Classical Nepal Bhasa
+nya	nya	ny	Chichewa; Chewa; Nyanja
+nym	nym	XX	Nyamwezi
+nyn	nyn	XX	Nyankole
+nyo	nyo	XX	Nyoro
+nzi	nzi	XX	Nzima
+oci	oci	oc	Occitan (post 1500); Provençal
+oji	oji	oj	Ojibwa
+ori	ori	or	Oriya
+orm	orm	om	Oromo
+osa	osa	XX	Osage
+oss	oss	os	Ossetian; Ossetic
+ota	ota	XX	Turkish, Ottoman (1500-1928)
+oto	oto	XX	Otomian languages
+paa	paa	XX	Papuan (Other)
+pag	pag	XX	Pangasinan
+pal	pal	XX	Pahlavi
+pam	pam	XX	Pampanga
+pan	pan	pa	Panjabi; Punjabi
+pap	pap	XX	Papiamento
+pau	pau	XX	Palauan
+peo	peo	XX	Persian, Old (ca. 600-400 B.C.)
+phi	phi	XX	Philippine (Other)
+phn	phn	XX	Phoenician
+pli	pli	pi	Pali
+pol	pol	pl	Polish
+pon	pon	XX	Pohnpeian
+por	por	pt	Portuguese
+pra	pra	XX	Prakrit languages
+pro	pro	XX	Provençal, Old (to 1500)
+pus	pus	ps	Pushto
+qaa-qtz	qaa-qtz	XX	Reserved for local use
+que	que	qu	Quechua
+raj	raj	XX	Rajasthani
+rap	rap	XX	Rapanui
+rar	rar	XX	Rarotongan
+roa	roa	XX	Romance (Other)
+roh	roh	rm	Raeto-Romance
+rom	rom	XX	Romany
+ron	rum	ro	Romanian
+run	run	rn	Rundi
+rup	rup	XX	Aromanian; Arumanian; Macedo-Romanian
+rus	rus	ru	Russian
+sad	sad	XX	Sandawe
+sag	sag	sg	Sango
+sah	sah	XX	Yakut
+sai	sai	XX	South American Indian (Other)
+sal	sal	XX	Salishan languages
+sam	sam	XX	Samaritan Aramaic
+san	san	sa	Sanskrit
+sas	sas	XX	Sasak
+sat	sat	XX	Santali
+scn	scn	XX	Sicilian
+sco	sco	XX	Scots
+sel	sel	XX	Selkup
+sem	sem	XX	Semitic (Other)
+sga	sga	XX	Irish, Old (to 900)
+sgn	sgn	XX	Sign Languages
+shn	shn	XX	Shan
+sid	sid	XX	Sidamo
+sin	sin	si	Sinhala; Sinhalese
+sio	sio	XX	Siouan languages
+sit	sit	XX	Sino-Tibetan (Other)
+sla	sla	XX	Slavic (Other)
+slk	slo	sk	Slovak
+slv	slv	sl	Slovenian
+sma	sma	XX	Southern Sami
+sme	sme	se	Northern Sami
+smi	smi	XX	Sami languages (Other)
+smj	smj	XX	Lule Sami
+smn	smn	XX	Inari Sami
+smo	smo	sm	Samoan
+sms	sms	XX	Skolt Sami
+sna	sna	sn	Shona
+snd	snd	sd	Sindhi
+snk	snk	XX	Soninke
+sog	sog	XX	Sogdian
+som	som	so	Somali
+son	son	XX	Songhai
+sot	sot	st	Sotho, Southern
+spa	spa	es	Spanish; Castilian
+sqi	alb	sq	Albanian
+srd	srd	sc	Sardinian
+srn	srn	XX	Sranan Tongo
+srp	scc	sr	Serbian
+srr	srr	XX	Serer
+ssa	ssa	XX	Nilo-Saharan (Other)
+ssw	ssw	ss	Swati
+suk	suk	XX	Sukuma
+sun	sun	su	Sundanese
+sus	sus	XX	Susu
+sux	sux	XX	Sumerian
+swa	swa	sw	Swahili
+swe	swe	sv	Swedish
+syr	syr	XX	Syriac
+tah	tah	ty	Tahitian
+tai	tai	XX	Tai (Other)
+tam	tam	ta	Tamil
+tat	tat	tt	Tatar
+tel	tel	te	Telugu
+tem	tem	XX	Timne
+ter	ter	XX	Tereno
+tet	tet	XX	Tetum
+tgk	tgk	tg	Tajik
+tgl	tgl	tl	Tagalog
+tha	tha	th	Thai
+tig	tig	XX	Tigre
+tir	tir	ti	Tigrinya
+tiv	tiv	XX	Tiv
+tkl	tkl	XX	Tokelau
+tlh	tlh	XX	Klingon; tlhIngan-Hol
+tli	tli	XX	Tlingit
+tmh	tmh	XX	Tamashek
+tog	tog	XX	Tonga (Nyasa)
+ton	ton	to	Tonga (Tonga Islands)
+tpi	tpi	XX	Tok Pisin
+tsi	tsi	XX	Tsimshian
+tsn	tsn	tn	Tswana
+tso	tso	ts	Tsonga
+tuk	tuk	tk	Turkmen
+tum	tum	XX	Tumbuka
+tup	tup	XX	Tupi languages
+tur	tur	tr	Turkish
+tut	tut	XX	Altaic (Other)
+tvl	tvl	XX	Tuvalu
+twi	twi	tw	Twi
+tyv	tyv	XX	Tuvinian
+udm	udm	XX	Udmurt
+uga	uga	XX	Ugaritic
+uig	uig	ug	Uighur; Uyghur
+ukr	ukr	uk	Ukrainian
+umb	umb	XX	Umbundu
+und	und	XX	Undetermined
+urd	urd	ur	Urdu
+uzb	uzb	uz	Uzbek
+vai	vai	XX	Vai
+ven	ven	ve	Venda
+vie	vie	vi	Vietnamese
+vol	vol	vo	Volapük
+vot	vot	XX	Votic
+wak	wak	XX	Wakashan languages
+wal	wal	XX	Walamo
+war	war	XX	Waray
+was	was	XX	Washo
+wen	wen	XX	Sorbian languages
+wln	wln	wa	Walloon
+wol	wol	wo	Wolof
+xal	xal	XX	Kalmyk; Oirat
+xho	xho	xh	Xhosa
+yao	yao	XX	Yao
+yap	yap	XX	Yapese
+yid	yid	yi	Yiddish
+yor	yor	yo	Yoruba
+ypk	ypk	XX	Yupik languages
+zap	zap	XX	Zapotec
+zen	zen	XX	Zenaga
+zha	zha	za	Zhuang; Chuang
+zho	chi	zh	Chinese
+znd	znd	XX	Zande
+zul	zul	zu	Zulu
+zun	zun	XX	Zuni
+zxx	zxx	XX	No linguistic content
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/default-log4j/log4j.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/default-log4j/log4j.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/default-log4j/log4j.properties	(revision 42196)
@@ -0,0 +1,28 @@
+log4j.rootLogger=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
+
+log4j.logger.org.gvsig.andami.plugins=INFO  
+log4j.logger.org.gvsig.tools=INFO
+log4j.logger.org.gvsig.tools.dataTypes=INFO
+log4j.logger.org.gvsig.i18n.Messages=INFO
+log4j.logger.org.gvsig.installer.lib.impl.DefaultDependenciesCalculator=INFO
+#
+# JCRS
+log4j.logger.org.gvsig.crs=INFO
+log4j.logger.es.idr.teledeteccion.connection=INFO
+log4j.logger.org.geotools.referencing.operation.projection=INFO
+#
+# JDBC/PostgreSQL 
+log4j.logger.org.gvsig.fmap.dal.store.jdbc=INFO
+log4j.logger.org.gvsig.fmap.dal.store.postgresql=INFO
+log4j.logger.org.gvsig.exportto.swing.prov.jdbc=INFO
+#
+# shp/dbf driver
+log4j.logger.org.gvsig.fmap.dal.store.shp=INFO
+log4j.logger.org.gvsig.fmap.dal.store.dbf=INFO
+#
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/default-log4j/log4j.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/statusbar-error.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/statusbar-error.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/statusbar-info.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/statusbar-info.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/default-icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/default-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/statusbar-warning.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/statusbar-warning.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/splash-default.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/splash-default.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_zh.properties	(revision 42196)
@@ -0,0 +1,58 @@
+#Translations for language [zh]
+#Tue Dec 12 10:59:28 GMT+01:00 2006
+aceptar=\u786e\u5b9a
+cancelar=\u53d6\u6d88
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=
+Launcher.config_mal_formado=
+Launcher.config_no_encontrado=
+Launcher.Dependencia_no_resuelta_en_plugin=
+Launcher.Dos_skin_extension=
+Launcher.Error_con_las_librerias_del_plugin=
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=
+Launcher.Error_localizando_la_clase_de_la_extension=
+Launcher.Hay_dependencias_circulares=
+Launcher.Ignorando_el_directorio=
+Launcher.labelset_class=
+Launcher.look_and_feel=
+Launcher.No_se_encontro_la_clase_de_la_extension=
+Launcher.No_se_encontro_la_clase_mdi_manager=
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=
+Launcher.No_se_puede_acceder_a=
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=
+Launcher.Two_extensions_with_the_same_priority=
+Launcher.Two_menus_with_the_same_position=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=
+MDIFrame.quiere_salir=\u60a8\u786e\u5b9e\u8981\u9000\u51fa gvSIG \u5417?
+MDIFrame.salir=\u9000\u51fa
+MDIManagerFactory.No_skin_extension_in_the_plugins=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=
+PluginClassLoader.Error_reading_file=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=
+StatusBar.Aplicacion_iniciada=
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_en.properties	(revision 42196)
@@ -0,0 +1,78 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Accept
+cancelar=Cancel
+com.iver.andami.messages.Messages=Messages
+Ejecutando\ comando\:\ =Execute command\:
+en=In
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Icon_not_found_=Icon not found
+KeyMapping.Caracter_no_valido=Invalid character
+Launcher.config_mal_formado=. Malformed 'config.xml'
+Launcher.config_no_encontrado='config.xml' not found
+Launcher.Dependencia_no_resuelta_en_plugin=Unsatisfied plugin dependency
+Launcher.Dos_skin_extension=Two skin-extension.
+Launcher.Error_con_las_librerias_del_plugin=Plugin library error
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+Launcher.Error_instanciando_la_extension=Cannot instantiate extension
+Launcher.Error_localizando_la_clase_de_la_extension=Cannot locate extension class
+Launcher.Hay_dependencias_circulares=Plugin dependencies involved in circle
+Launcher.Ignorando_el_directorio=Ignoring the directory
+Launcher.labelset_class=Cannot find label set class (labelset)
+Launcher.look_and_feel=Cannot set system 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Cannot find extension class
+Launcher.No_se_encontro_la_clase_mdi_manager=Cannot find mdi manager class
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Cannot access mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Cannot save Andami configuration
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Cannot instantiate mdi manager
+Launcher.No_se_puede_acceder_a=Cannot access to
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Cannot save plugins configuration
+Launcher.Two_extensions_with_the_same_priority=Two extensions with the same priority. Only will load one.
+Launcher.Two_menus_with_the_same_position=Two menus with the same position. Only will load one.
+login_exit=Exit
+login_invalid_user=Invalid user
+login_name=Name
+login_ok=ok
+login_password=Password
+MDIFrame.Error_no_capturado_por_el_usuario=User error
+MDIFrame.quiere_salir=Exit gvSIG?
+MDIFrame.salir=Exit
+MDIManagerFactory.No_skin_extension_in_the_plugins=No skin extension in the plugins
+memory_usage=Memory usage
+Messages._no_se_encontro_la_traduccion_para=Cannot find translation for
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+No_extension_associated_with_this_event_=No extension associated with this event
+No_se_encontro_la_traduccion_para=Cannot find translation for
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Two classes with the same name
+PluginClassLoader.Error_reading_file=IO error\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Bug_en_el_codigo=Bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Fatal error
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Cannot set hour glass
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Cannot restore cursor
+Preferences=Preferences
+restore_defaults=Restore defaults
+SplashWindow.Iniciando=Starting...
+StatusBar.Aplicacion_iniciada=Application started
+Unable_to_find_icon=Unable to find icon
+y_en=and in
+save_resources=Save resources
+select_resources_to_save_before_exit=Before exiting, the selected resources will be saved
+deselect_all=Clear selection
+discard_changes=Discard changes
+gvsig_package_installer=gvSIG packages installer
+usage=Usage
+error_getting_unsaved_data=Error getting the unsaved data. If you continue, you may not be able\nto save all data. �Do you want to continue closing the application?
+_Unable_to_read_persistence_for_plugin=Unable to read saved data for plugin
+_Perhaps_saved_data_refers_to_missing_plugin=Perhaps saved data refers to missing plugin
+_Persistence=Persistence
+_Conflicting_plugins=Conflicting plugins
+_Close=Close
+_Continue=Continue
+_Some_of_plugins_installed_conflict_with_each_other=Some of the plugins installed are in conflict between them
+_Select_the_plugins_that_you_want_to_disable_and_click_the_continue_button=Select the plugins you wish to disable and click on the 'Continue' button
+_You_can_click_on_continue_button_directly_if_you_dont_want_to_disable_any_plugins=You can click on 'Continue' directly if you dont wish to disable any plugins
+_Or_click_the_close_button_to_close_the_application=Or click on 'Close' button to close the application

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_gl.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceptar
+cancelar=Cancelar
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Car\u00e1cter non v\u00e1lido
+Launcher.config_mal_formado=. Arquivo 'config.xml' mal formado
+Launcher.config_no_encontrado=. Arquivo 'config.xml' non atopado
+Launcher.Dependencia_no_resuelta_en_plugin=Dependencia non resolta no plugin
+Launcher.Dos_skin_extension=D\u00faas skin-extension. Usamos a \u00faltima
+Launcher.Error_con_las_librerias_del_plugin=Erro coas librar\u00edas do plugin
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Erro instanciando a extensi\u00f3n
+Launcher.Error_localizando_la_clase_de_la_extension=Erro localizando a clase da extensi\u00f3n
+Launcher.Hay_dependencias_circulares=Hai dependencias circulares entre os plugins
+Launcher.Ignorando_el_directorio=Ignorando o directorio
+Launcher.labelset_class=Non se puido atopar a clase de etiquetas (labelset)
+Launcher.look_and_feel=Non se puido activar o 'look ans feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Non se atopou a clase da extensi\u00f3n
+Launcher.No_se_encontro_la_clase_mdi_manager=Non se atopou a clase mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Non se puido acceder \u00e1 clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Non se puido gardar a configuraci\u00f3n de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Non se puido instanciar a clase mdi manager
+Launcher.No_se_puede_acceder_a=Non se pode acceder a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Prod\u00faxose un erro ao gardar a configuraci\u00f3n dosplugins
+Launcher.Two_extensions_with_the_same_priority=D\u00faas extensi\u00f3ns coa mesma prioridade, cargarase soamente unha
+Launcher.Two_menus_with_the_same_position=Dous men\u00fas coa mesma posici\u00f3n, cargarase soamente un
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erro non capturado polo usuario
+MDIFrame.quiere_salir=Est\u00e1 seguro de que quere sa\u00edr?
+MDIFrame.salir=Sa\u00edr
+MDIManagerFactory.No_skin_extension_in_the_plugins=Non se atopou ningunha extensi\u00f3n 'skin' entre o splugins
+Messages._no_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+Messages.no_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=D\u00faas clases c\u00f3 mesmo nome no plugin
+PluginClassLoader.Error_reading_file=Erro l\u00e9ndo arquivo\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug no c\u00f3digo
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Non se puido activar o reloxio de area
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Non se puido restaurar o cursor do rato
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Iniciando ...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3n iniciada
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_ca.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Acceptar
+cancelar=Cancel\u00b7lar
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Car\u00e0cter no v\u00e0lid\:
+Launcher.config_mal_formado=. Fitxer 'config.xml' mal format
+Launcher.config_no_encontrado=. Fitxer 'config.xml' no trobat
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00e8ncia no resolta en el connector
+Launcher.Dos_skin_extension=Dos skin-extension. Usem l'\u00faltim
+Launcher.Error_con_las_librerias_del_plugin=Error amb les llibreries del connector
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Error instanciant l'extensi\u00f3
+Launcher.Error_localizando_la_clase_de_la_extension=Error en localitzar la classe de l'extensi\u00f3
+Launcher.Hay_dependencias_circulares=Hi ha depend\u00e8ncies circulars entre els connectors
+Launcher.Ignorando_el_directorio=Ignorant el directori
+Launcher.labelset_class=No s'ha pogut trobar la classe d'etiquetes (labelset)
+Launcher.look_and_feel=
+Launcher.No_se_encontro_la_clase_de_la_extension=No s'ha trobat la classe de l'extensi\u00f3
+Launcher.No_se_encontro_la_clase_mdi_manager=No s'ha trobat la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No s'ha pogut accedir a la classe mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No s'ha pogut guardar la configuraci\u00f3 d'Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No s'ha pogut instanciar la classe mdi manager
+Launcher.No_se_puede_acceder_a=No es pot accedir a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=S'ha produ\u00eft un error en guardar la configuraci\u00f3 dels connectors
+Launcher.Two_extensions_with_the_same_priority=Dos extensions amb la mateixa prioritat, nom\u00e9s se'n carregar\u00e0 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00fas amb la mateixa posici\u00f3, nom\u00e9s se'n carregar\u00e0 un
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Error no detectat per l'usuari
+MDIFrame.quiere_salir=Est\u00e0 segur que vol eixir?
+MDIFrame.salir=Eixir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No s'ha trobat cap extensi\u00f3 'skin' entre els connectors
+Messages._no_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+Messages.no_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos classes amb el mateix nom en el connector
+PluginClassLoader.Error_reading_file=Error llegint el fitxer\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Error en el codi
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No s'ha pogut posar el rellotge d'arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No s'ha pogut restaurar el cursor del ratol\u00ed
+Preferences=Prefer\u00e8ncies
+restore_defaults=
+SplashWindow.Iniciando=Iniciant...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3 iniciada
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_pt.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceitar
+cancelar=Cancelar
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Car\u00e1cter inv\u00e1lido
+Launcher.config_mal_formado=. Ficheiro "config.xml" mal formado
+Launcher.config_no_encontrado=. Ficheiro "config.xml" n\u00e3o encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00eancia n\u00e3o resolvida com "plugin"
+Launcher.Dos_skin_extension=Duas estens\u00f5es "skin". Usaremos a \u00faltima
+Launcher.Error_con_las_librerias_del_plugin=Erro com a biblioteca do "plugin"
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Erro ao instanciar a extens\u00e3o
+Launcher.Error_localizando_la_clase_de_la_extension=Erro ao localizar a classe da extens\u00e3o
+Launcher.Hay_dependencias_circulares=Existen depend\u00eancias c\u00edclicas entre os "plugins"
+Launcher.Ignorando_el_directorio=Ignorando o direct\u00f3rio
+Launcher.labelset_class=N\u00e3o foi poss\u00edvel encontrar a classe das etiquetas (labelset)
+Launcher.look_and_feel=N\u00e3o foi poss\u00edvel activar o "look and feel"
+Launcher.No_se_encontro_la_clase_de_la_extension=N\u00e3o se encontrou a classe da extens\u00e3o
+Launcher.No_se_encontro_la_clase_mdi_manager=N\u00e3o se encontrou a classe "mdi manager"
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=N\u00e3o foi poss\u00edvel ter acesso \u00e0 classe "mdi manager"
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=N\u00e3o foi poss\u00edvel guardar a configura\u00e7\u00e3o de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=N\u00e3o foi poss\u00edvel instanciar a classe "mdi manager"
+Launcher.No_se_puede_acceder_a=N\u00e3o se consegue ter acesso a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Produziu-se um erro ao guardar a configura\u00e7\u00e3o dos "plugins"
+Launcher.Two_extensions_with_the_same_priority=Duas extens\u00f5es com a mesma prioridade, s\u00f3 uma ser\u00e1 carregada.
+Launcher.Two_menus_with_the_same_position=Dois menus com a mesma posi\u00e7\u00e3o
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erro n\u00e3o capturado pelo usu\u00e1rio
+MDIFrame.quiere_salir=Fechar gvSIG?
+MDIFrame.salir=Fechar
+MDIManagerFactory.No_skin_extension_in_the_plugins=N\u00e3o se encontrou nenhuma extens\u00e3o "skin" entre os "plugins"
+Messages._no_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
+Messages.no_se_encontro_la_traduccion_para=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Duas classes com o mesmo nome no "plugin"
+PluginClassLoader.Error_reading_file=Erro ao ler o ficheiro\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo="Bug" no c\u00f3digo
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=N\u00e3o foi poss\u00edvel activar a ampulheta
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=N\u00e3o foi poss\u00edvel restaurar o cursor
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=A iniciar...
+StatusBar.Aplicacion_iniciada=Aplica\u00e7\u00e3o iniciada
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_cs.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+aceptar=Budi\u017e
+cancelar=Zru\u0161it
+com.iver.andami.messages.Messages=com.iver.andami.messages.Messages
+Ejecutando\ comando\:\ =Vykonej p\u0159\u00edkaz\:
+en=
+error_parsing_comboscale_elements=Chyba p\u0159i rozd\u011blov\u00e1n\u00ed elementu m\u011b\u0159\u00edtka
+error_parsing_comboscale_value=Chyba p\u0159i rozd\u011blov\u00e1n\u00ed hodnoty m\u011b\u0159\u00edtka
+Error_reading_isocodes_file=Chyba p\u0159i \u010dten\u00ed iso k\u00f3d\u016f pro jazyky
+Icon_not_found_=Ikona nenalezena
+KeyMapping.Caracter_no_valido=Neplatn\u00fd znak
+Launcher.config_mal_formado=. Chybn\u00fd 'config.xml'
+Launcher.config_no_encontrado='config.xml' nenalezen
+Launcher.Dependencia_no_resuelta_en_plugin=Poru\u0161en\u00e1 z\u00e1vislost z\u00e1suvn\u00e9ho modulu
+Launcher.Dos_skin_extension=Dv\u011b extenze pro vzhled.
+Launcher.Error_con_las_librerias_del_plugin=Chyba v knihovn\u011b z\u00e1suvn\u00e9ho modulu
+Launcher.error_getting_class_loader_for_status_bar_control=Chyba p\u0159i zji\u0161\u0165ov\u00e1n\u00ed stavu stavov\u00e9ho \u0159\u00e1dku.
+Launcher.Error_instanciando_la_extension=Nelze vytvo\u0159it instanci extenze
+Launcher.Error_localizando_la_clase_de_la_extension=Nelze nal\u00e9zt t\u0159\u00eddu extenze
+Launcher.Hay_dependencias_circulares=Kruhov\u00e1 z\u00e1vislost z\u00e1suvn\u00e9ho modulu
+Launcher.Ignorando_el_directorio=Ignoruji adres\u00e1\u0159
+Launcher.labelset_class=Nelze nal\u00e9zt popisek t\u0159\u00eddy (labelset)
+Launcher.look_and_feel=Nelze nastavit syst\u00e9mov\u00fd vzhled
+Launcher.No_se_encontro_la_clase_de_la_extension=Nelze nal\u00e9zt t\u0159\u00eddu extenze
+Launcher.No_se_encontro_la_clase_mdi_manager=Nelze nal\u00e9zt t\u0159\u00eddu mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=P\u0159\u00edstup k mdi manager odm\u00edtnut
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Nelze ulo\u017eit konfiguraci Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Nelze vytvo\u0159it instanci mdi manager
+Launcher.No_se_puede_acceder_a=Zam\u00edtnut p\u0159\u00edstup k
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Nelze ulo\u017eit konfigurace z\u00e1suvn\u00fdch modul\u016f
+Launcher.Two_extensions_with_the_same_priority=Dv\u011b extenze se stejnou prioritou. Bude na\u010dtena jen jedna.
+Launcher.Two_menus_with_the_same_position=Dv\u011b nab\u00eddky se stejnou pozic\u00ed. Bude na\u010dtena jen jedna.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Chyba u\u017eivatele
+MDIFrame.quiere_salir=Ukon\u010dit gvSIG?
+MDIFrame.salir=Konec
+MDIManagerFactory.No_skin_extension_in_the_plugins=Neexistuje extenze pro vzhled v z\u00e1suvn\u00e9m modulu
+Messages._no_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
+Messages.no_se_encontro_la_traduccion_para=Nebyl nalezen p\u0159eklad pro
+No_extension_associated_with_this_event_=S touto ud\u00e1losti nen\u00ed asociov\u00e1na \u017e\u00e1dn\u00e1 p\u0159\u00edpona souboru
+No_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dv\u011b t\u0159\u00eddy se stejn\u00fdm jm\u00e9nem
+PluginClassLoader.Error_reading_file=IO chyba\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Chyba aplikace
+PluginServices.Bug_en_el_codigo=Chyba
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Chyba aplikace. Doporu\u010dujeme uzav\u0159\u00edt aplikaci.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Nelze nastavit p\u0159es\u00fdpac\u00ed hodiny
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Nelze obnovit kurzor
+Preferences=Preference
+restore_defaults=Obnov standardn\u00ed
+SplashWindow.Iniciando=Spou\u0161t\u00edm...
+StatusBar.Aplicacion_iniciada=Aplikace spu\u0161t\u011bna
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_va.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_va.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_va.properties	(revision 42196)
@@ -0,0 +1,36 @@
+#text_ca.properties
+KeyMapping.Caracter_no_valido=Car\u00E0cter no v\u00E0lid\:
+Launcher.config_mal_formado=. Fitxer 'config.xml' mal format
+Launcher.config_no_encontrado=. Fitxer 'config.xml' no trobat
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00E8ncia no resolta en el connector
+Launcher.Dos_skin_extension=Dos skin-extension. Usem l'\u00FAltim
+Launcher.Error_con_las_librerias_del_plugin=Error amb les llibreries del connector
+Launcher.Error_instanciando_la_extension=Error instanciant l'extensi\u00F3
+Launcher.Error_localizando_la_clase_de_la_extension=Error en localitzar la classe de l'extensi\u00F3
+Launcher.Hay_dependencias_circulares=Hi ha depend\u00E8ncies circulars entre els connectors
+Launcher.Ignorando_el_directorio=Ignorant el directori
+Launcher.labelset_class=No s'ha pogut trobar la classe d'etiquetes (labelset)
+Launcher.look_and_feel=No s'ha pogut posar el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No s'ha trobat la classe de l'extensi\u00F3
+Launcher.No_se_encontro_la_clase_mdi_manager=No s'ha trobat la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No s'ha pogut accedir a la classe mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No s'ha pogut guardar la configuraci\u00F3 d'andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No s'ha pogut instanciar la classe mdi manager
+Launcher.No_se_puede_acceder_a=No es pot accedir a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=S'ha produ\u00EFt un error en guardar la configuraci\u00F3 dels connectors
+Launcher.Two_extensions_with_the_same_priority=Dos extensions amb la mateixa prioritat, nom\u00E9s se'n carregar\u00E0 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00FAs amb la mateixa posici\u00F3, nom\u00E9s se'n carregar\u00E0 un
+MDIFrame.Error_no_capturado_por_el_usuario=Error no detectat per l'usuari
+MDIFrame.quiere_salir=Est\u00E0 segur que vol eixir?
+MDIFrame.salir=Eixir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No s'ha trobat cap extensi\u00F3 'skin' entre els connectors
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos classes amb el mateix nom en el connector
+PluginClassLoader.Error_reading_file=Error llegint el fitxer\: 
+PluginServices.Bug_en_el_codigo=Error en el codi
+PluginServices.Error_grave_de_la_aplicacion=Error greu de l'aplicaci\u00F3. \u00C9s convenient que guarde les dades i isca de l'aplicaci\u00F3
+PluginServices.No_se_encontro_el_recurso_de_traducciones=No s'ha trobat el recurs de traduccions
+PluginServices.No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00F3 per a
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No s'ha pogut posar el rellotge d'arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No s'ha pogut restaurar el cursor del ratol\u00ED
+SplashWindow.Iniciando=Iniciant...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00F3 iniciada

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_va.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_fr.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Accepter
+cancelar=Annuler
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Caract\u00e8re non valide\:
+Launcher.config_mal_formado=. Fichier 'config.xml' mal format\u00e9
+Launcher.config_no_encontrado=. Fichier 'config.xml' non trouv\u00e9
+Launcher.Dependencia_no_resuelta_en_plugin=D\u00e9pendance non r\u00e9solue dans le plugin
+Launcher.Dos_skin_extension=Deux "skin-extension". Le dernier sera utilis\u00e9\:
+Launcher.Error_con_las_librerias_del_plugin=Erreur avec les librairies du plugin
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Erreur d'instanciation de l'extension
+Launcher.Error_localizando_la_clase_de_la_extension=Erreur de localisation de la classe d'extension
+Launcher.Hay_dependencias_circulares=Il y a des d\u00e9pendances circulaires entre les plugins
+Launcher.Ignorando_el_directorio=Ignor\u00e9 dans le r\u00e9pertoire
+Launcher.labelset_class=Impossible de trouver la classe des \u00e9tiquettes (labelset)
+Launcher.look_and_feel=Impossible d'afficher le "look and feel"\:
+Launcher.No_se_encontro_la_clase_de_la_extension=Impossible de trouver la classe de l'extension
+Launcher.No_se_encontro_la_clase_mdi_manager=Impossible de trouver la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Impossible d'acc\u00e9der la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Impossible de conserver la configuration d'Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Impossible d'instancier la classe mdi manager
+Launcher.No_se_puede_acceder_a=Impossible d'acc\u00e9der \u00e0
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Une erreur s'est produite lors de la sauvegarde de la configuration des plugins
+Launcher.Two_extensions_with_the_same_priority=Deux extensions ont la m\u00eame priorit\u00e9, une seule sera charg\u00e9e.
+Launcher.Two_menus_with_the_same_position=Deux menus ont la m\u00eame position, un seul sera charg\u00e9
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erreur non captur\u00e9e par l'utilisateur
+MDIFrame.quiere_salir=Voulez-vous vraiment quitter gvSIG?
+MDIFrame.salir=Quitter
+MDIManagerFactory.No_skin_extension_in_the_plugins=Aucune extension "skin" n'a \u00e9t\u00e9 trouv\u00e9e parmi les plugins\:
+Messages._no_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+Messages.no_se_encontro_la_traduccion_para=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Deux classes ont le m\u00eame nom dans le plugin
+PluginClassLoader.Error_reading_file=Erreur dans la lecture du fichier\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug dans le code
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Absence de sablier\:
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Impossible de restaurer le curseur de la souris
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Initialisation...
+StatusBar.Aplicacion_iniciada=Application initialis\u00e9e
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_de.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=OK
+cancelar=Abbrechen
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Ung\u00fcltigiges zeichen\:
+Launcher.config_mal_formado=. Datei 'config.xml' fehlerhaft
+Launcher.config_no_encontrado=Konnte die Datei 'config.xml' nicht finden.
+Launcher.Dependencia_no_resuelta_en_plugin=Ungekl\u00e4rte Plugin-Abh\u00e4ngigkeit
+Launcher.Dos_skin_extension=Zwei skin-extensions. Es wird die letzte verwendet.
+Launcher.Error_con_las_librerias_del_plugin=Fehler bei den Plugin-Bibliotheken
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Kann die erweiterung nicht instanziieren.
+Launcher.Error_localizando_la_clase_de_la_extension=Fehler bei der lokalisierung der erweiterungsklasse
+Launcher.Hay_dependencias_circulares=Kreisf\u00f6rmige abh\u00e4ngigkeiten zwischen den plugins
+Launcher.Ignorando_el_directorio=Das verzeichnis wird ignoriert.
+Launcher.labelset_class=Kann die etikettenklasse (labelset) nicht finden.
+Launcher.look_and_feel=Konnte nicht auf 'look and feel'  stellen.
+Launcher.No_se_encontro_la_clase_de_la_extension=Konnte die erweiterungsklasse nicht finden.
+Launcher.No_se_encontro_la_clase_mdi_manager=Konnte die mdi-manager-klasse nicht finden.
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Konnte nicht auf den mdi-manager zugreifen.
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Konnte die Andami-Erweiterung nicht speichern.
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Konnte den mdi-manager nicht erstellen.
+Launcher.No_se_puede_acceder_a=Kein Zugriff m\u00f6glich auf\:
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Fehler bei der speicherung der plugin-konfiguration
+Launcher.Two_extensions_with_the_same_priority=Zwei Erweiterungen mit der gleichen Priorit\u00e4t. Es wird nur eine geladen.
+Launcher.Two_menus_with_the_same_position=Zwei Men\u00fcs mit der gleichen priorit\u00e4t. Es wird nur eins geladen.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Anwendungsfehler
+MDIFrame.quiere_salir=Sind Sie sicher, dass Sie das Programm beenden wollen?
+MDIFrame.salir=Beenden
+MDIManagerFactory.No_skin_extension_in_the_plugins=Keine skin-extension in den plugins gefunden
+Messages._no_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
+Messages.no_se_encontro_la_traduccion_para=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Zwei Klassen mit dem gleichen Namen im Plugin
+PluginClassLoader.Error_reading_file=Dateilesefehler \:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug im Code
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Konnte die Sanduhr nicht stellen.
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Konnte den cursor nicht wiederherstellen.
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Startet...
+StatusBar.Aplicacion_iniciada=Anwendung gestartet
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_eu.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Ados
+cancelar=Utzi
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Karakterea ez da baliozkoa\:
+Launcher.config_mal_formado='config.xml' fitxategia txarto eratuta dago
+Launcher.config_no_encontrado='config.xml' fitxategia ez da aurkitu
+Launcher.Dependencia_no_resuelta_en_plugin=Mendekotasuna ez da plugin-ean ebatzi
+Launcher.Dos_skin_extension=Dos skin luzapena. Azkena erabiliko dugu
+Launcher.Error_con_las_librerias_del_plugin=Errorea plugin-aren liburutegietan
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Errorea luzapena instantziatzean
+Launcher.Error_localizando_la_clase_de_la_extension=Errorea luzapen-mota aurkitzean
+Launcher.Hay_dependencias_circulares=Plugin-en artean mendekotasun zirkularrak daude
+Launcher.Ignorando_el_directorio=Ez hartu direktorioa kontuan
+Launcher.labelset_class=Etiketa-mota (labelset) ezin izan da aurkitu
+Launcher.look_and_feel=Ezin izan da jarri 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Luzapen-mota ezin izan da aurkitu
+Launcher.No_se_encontro_la_clase_mdi_manager=Mdi manager klasea ezin izan da aurkitu
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=mdi manager klasea ezin izan da atzitu
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Andamiren konfigurazioa ezin izan da gorde
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Ezin izan da mdi manager klasea instantziatu
+Launcher.No_se_puede_acceder_a=Ezin izan da honakoa atzitu\:
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Errorea plugin-en konfigurazioa gordetzean
+Launcher.Two_extensions_with_the_same_priority=Lehentasun bereko bi luzapen, bakarra kargatuko da.
+Launcher.Two_menus_with_the_same_position=Posizio bereko bi menu, bakarra kargatuko da.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erabiltzaileak kapturatu ez duen errorea
+MDIFrame.quiere_salir=Ziur zaude irten nahi duzula?
+MDIFrame.salir=Irten
+MDIManagerFactory.No_skin_extension_in_the_plugins=Ez da aurkitu 'skin' luzapenik plugin-en artean
+Messages._no_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+Messages.no_se_encontro_la_traduccion_para=Ez da horretarako itzulpenik aurkitu
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Izen bereko bi klase plugin-ean
+PluginClassLoader.Error_reading_file=Errorea fitxategia irakurtzean\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug-a kodean
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Ezin izan da arezko erlojua jarri
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Saguaren kurtsorea ezin izan da berrezarri
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Hasten...
+StatusBar.Aplicacion_iniciada=Aplikazioa hasita dago
+Unable_to_find_icon=
+y_en=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_it.properties	(revision 42196)
@@ -0,0 +1,60 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+aceptar=Accetta
+cancelar=Cancella
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =Esegui comando\:
+en=
+error_parsing_comboscale_elements=Errore nell'esame degli elementi ComboScale
+error_parsing_comboscale_value=Errore nell'esame del valore ComboScale
+Error_reading_isocodes_file=Errore di lettura dei codici ISO della lingua
+Icon_not_found_=Icona non trovata
+KeyMapping.Caracter_no_valido=Carattere non valido\:
+Launcher.config_mal_formado=. Documento 'config.xml' mal formato
+Launcher.config_no_encontrado=. Documento 'config.xml' non trovato
+Launcher.Dependencia_no_resuelta_en_plugin=La dipendenza non risulta in plugin
+Launcher.Dos_skin_extension=Due skin-extension. Usare l'ultima
+Launcher.Error_con_las_librerias_del_plugin=Errore con la libreria del plugin
+Launcher.error_getting_class_loader_for_status_bar_control=Errore nell'ottenere il loader delle classi per la barra di stato
+Launcher.Error_instanciando_la_extension=Errore ricorrendo all'estensione
+Launcher.Error_localizando_la_clase_de_la_extension=Errore localizzando la classe dell'estensione
+Launcher.Hay_dependencias_circulares=Ci sono dipendenze circolari tra i plugins
+Launcher.Ignorando_el_directorio=Ignorando il registro
+Launcher.labelset_class=Non si \u00e9 trovata la classe delle etichette (labelset)
+Launcher.look_and_feel=Non si \u00e9 potuto porre il 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Non si \u00e9 trovata la classe dell'estensione
+Launcher.No_se_encontro_la_clase_mdi_manager=No si \u00e9 trovata la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Non si \u00e9 potuto accedere alla clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Non si \u00e9 potuta salvare la configurazione di Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Non si \u00e9 potuto ricorrere alla classe mdi manager
+Launcher.No_se_puede_acceder_a=Non si puo' accedere a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Si \u00e9 prodotto un errore salvando la configurazione dei plugins
+Launcher.Two_extensions_with_the_same_priority=Due estensioni con la stessa priorita', se ne carichera' solo una.
+Launcher.Two_menus_with_the_same_position=Due men\u00fa con la stessa posizione, se ne carichera' solo uno
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Errore non catturato per l'usario
+MDIFrame.quiere_salir=Sei sicuro di voler uscire?
+MDIFrame.salir=Uscire
+MDIManagerFactory.No_skin_extension_in_the_plugins=Non si \u00e9 trovato nessuna estensione 'skin' tra i plugins
+Messages._no_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
+Messages.no_se_encontro_la_traduccion_para=Non \u00e8 stata individuata la traduzione per
+No_extension_associated_with_this_event_=Nessuna estensione associata a questo evento
+No_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Due classi con lo stesso nome nel plugin
+PluginClassLoader.Error_reading_file=Errore leggendo il file\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Errore dell'applicazione
+PluginServices.Bug_en_el_codigo=Bug nel codice
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Errore dell'applicazione. Si raccomanda di riavviare l'applicazione.
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Non si \u00e9 potuta porre la clessidra
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Non si \u00e9 potuto riparare il cursore del mouse
+Preferences=Preferenze
+restore_defaults=Ripristina opzioni predefinite
+SplashWindow.Iniciando=Iniziando...
+StatusBar.Aplicacion_iniciada=Applicazione iniziata
+Unable_to_find_icon=Impossibile trovare icona
+y_en=e in

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text.properties	(revision 42196)
@@ -0,0 +1,83 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceptar
+cancelar=Cancelar
+com.iver.andami.messages.Messages=Mensaje
+Ejecutando\ comando\:\ =Execute command\:
+en=en
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Icon_not_found_=No se encontr\u00f3 el icono
+KeyMapping.Caracter_no_valido=Car\u00e1cter no v\u00e1lido\:
+Launcher.config_mal_formado=. Fichero 'config.xml' mal formado
+Launcher.config_no_encontrado=. Fichero 'config.xml' no encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Dependencia no resuelta en plugin
+Launcher.Dos_skin_extension=Dos skin-extension. Usamos el \u00faltimo
+Launcher.Error_con_las_librerias_del_plugin=Error con las librer\u00edas del plugin
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+Launcher.Error_instanciando_la_extension=Error instanciando la extensi\u00f3n
+Launcher.Error_localizando_la_clase_de_la_extension=Error localizando la clase de la extensi\u00f3n
+Launcher.Hay_dependencias_circulares=Hay dependencias circulares entre los plugins
+Launcher.Ignorando_el_directorio=Ignorando el directorio
+Launcher.labelset_class=No se pudo encontrar la clase de las etiquetas (labelset)
+Launcher.look_and_feel=No se pudo poner el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No se encontr\u00f3 la clase de la extensi\u00f3n
+Launcher.No_se_encontro_la_clase_mdi_manager=No se encontr\u00f3 la clase mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No se pudo acceder a la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No se pudo guardar la configuraci\u00f3n de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No se pudo instanciar la clase mdi manager
+Launcher.No_se_puede_acceder_a=No se puede acceder a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Se produjo un error guardando la configuraci\u00f3n de los plugins
+Launcher.Two_extensions_with_the_same_priority=Dos extensiones con la misma prioridad, s\u00f3lo se cargar\u00e1 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00faes con la misma posici\u00f3n, s\u00f3lo se cargar\u00e1 uno
+login_exit=Salida
+login_invalid_user=Usuario no v\u00c3\u00a1lido
+login_name=Nombre
+login_ok=Ok
+login_password=Contrase\u00c3\u00b1a
+MDIFrame.Error_no_capturado_por_el_usuario=Error no capturado por el usuario
+MDIFrame.quiere_salir=\u00bfEst\u00e1 seguro de que quiere salir?
+MDIFrame.salir=Salir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No se encontr\u00f3 ninguna extensi\u00f3n 'skin' entre los plugins
+memory_usage=Memoria usada
+Messages._no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos clases con el mismo nombre en el plugin
+PluginClassLoader.Error_reading_file=Error leyendo fichero\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Bug_en_el_codigo=Bug en el c\u00f3digo
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Error grave en la aplicaci\u00c3\u00b3n.
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No se pudo poner el reloj de arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No se pudo restaurar el cursor del rat\u00f3n
+Preferences=Preferencias
+restore_defaults=Restaurar opciones por defecto
+SplashWindow.Iniciando=Iniciando...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3n iniciada
+Unable_to_find_icon=No se pudo encontrar el icono
+y_en=y en
+No_se_encontro_la_extension_especificada_en_el_parametro_exclusiveUI=No se encontr\u00f3 la extensi\u00f3n especifiacada en el par\u00e1metro 'exclusiveUI':
+Error_reading_plugin_persinstence_New_file_created_A_backup_was_made_on_=Error leyendo plugin-persistence.xml. Se crear� un fichero nuevo. Se ha hecho una copia de seguridad en
+Error_reading_andami_config_New_file_created_A_backup_was_made_on_=Error leyendo andami-config.xml. Se crear� un fichero nuevo. Se ha hecho una copia de seguridad en
+save_resources=Guardar recursos
+select_resources_to_save_before_exit=Antes de salir se guardar\u00e1n los elementos que est\u00e9n seleccionados
+deselect_all=Limpiar selecci\u00f3n
+discard_changes=Descartar cambios
+gvsig_package_installer=Instalador de paquetes de gvSIG
+usage=Uso
+error_getting_unsaved_data=Error obteniendo los datos sin guardar. Si contin�a, es posible\nque no pueda guardar todos los datos. �Desea continuar con el proceso de cerrar?
+_Unable_to_read_persistence_for_plugin=No se han podido leer datos almacenados del plugin
+_Persistence=Persistencia
+_Perhaps_saved_data_refers_to_missing_plugin=Quiz� los datos almacenados se refieren a un plugin no presente
+_Conflicting_plugins=Plugins en conflicto
+_Close=Cerrar
+_Continue=Continuar
+_Some_of_plugins_installed_conflict_with_each_other=Hay conflictos entre los plugins instalados
+_Select_the_plugins_that_you_want_to_disable_and_click_the_continue_button=Seleccione los plugins que desea DESACTIVAR y pulse el bot�n 'Continuar'
+_You_can_click_on_continue_button_directly_if_you_dont_want_to_disable_any_plugins=Puede pulsar directamente 'Continuar' si no desea desactivar ninguno
+_Or_click_the_close_button_to_close_the_application=O bien, pulse el bot�n 'Cerrar' para salir de la aplicaci�n
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-config.xml	(revision 42196)
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<icon src="images/logoGVA.gif" text="gvSIG"/>
+	<resourceBundle name="text"/>
+	<import plugin-name="com.iver.cit.gvsig" />
+	<labelSet class="com.iver.cit.gvsig.gui.View">
+		<label id="1" size="100"/>
+		<label id="2" size="230"/>
+	</labelSet>
+	<libraries>
+		<library file="com.iver.cit.gvsig.jar"/>
+		<library file="wmsclient.jar"/>	
+	</libraries>
+	<extensions>
+		<extension>
+			<class name="com.iver.cit.gvsig.ProjectExtension"/>
+			<menu text="Archivo/nuevo_proyecto" 
+				key="n" mnemonic="n" 
+				tooltip="nuevo_tooltip"
+				action-command="NUEVO" icon="images/new.png"/>
+			<menu text="Archivo/abrir_proyecto" 
+				key="a" mnemonic="a" 
+				tooltip="abrir_tooltip"
+				action-command="ABRIR" icon="images/open.png"/>
+			<menu text="Archivo/guardar_proyecto" 
+				key="g" mnemonic="g" 
+				tooltip="guardar_tooltip"
+				action-command="GUARDAR" icon="images/save.png"/>
+
+			<toolBar>
+				<tool icon="images/new.png" tooltip="nuevo_tooltip"
+					action-command="NUEVO"/>
+				<tool icon="images/open.png" tooltip="abrir_tooltip"
+					action-command="ABRIR"/>
+				<tool icon="images/save.png" tooltip="guardar_tooltip"
+					action-command="GUARDAR"/>
+
+				<!-- these will be added to the containing toolbar -->
+				<combo-scale
+					name="JPEG Quality"
+					elements="15;30;60;70;80;90;100"
+					value="80"
+					action-command="JPEG_QUALITY" />
+
+				<combo-button
+					name="Copy/paste tools">
+				  <combo-button-element icon="images/scissor.png" action-command="CUT" />
+				  <combo-button-element icon="images/paste.png" action-command="PASTE" />
+				  <combo-button-element icon="images/copy.png" action-command="COPY" />
+				</combo-button>
+			</toolBar>
+
+		</extension>
+
+		<extension>
+			<class name="com.iver.cit.gvsig.ZoomPrev"/>
+			<menu text="Vista/Zoom_Previo" icon="images/ZoomPrevio.png"/>
+			<tool-bar name="Herramientas">
+				<action-tool icon="images/ZoomPrevio.png" action-command="ZOOM_PREV" tooltip="Zoom_Previo" position="11"/>
+			</tool-bar>
+			
+			<!-- these will be added to the status-bar (because they are not contained in any toolbar) -->					
+			<combo-scale 
+		  		name="Scale"
+		  		label="Scale:"
+		  		elements="1000;2000;5000;10000;25000;50000;100000;200000;500000;1000000;2000000;5000000"
+	  			value="10000"
+	  			action-command="CHANGE_SCALE" />
+
+			<combo-button
+				name="Tool Mode">
+			  <combo-button-element icon="images/once.png" action-command="USE_ONCE" />
+			  <combo-button-element icon="images/sticky-tool.png" action-command="UNTIL_CHANGED" />
+			</combo-button>
+		</extension>
+		<extension processing-position="2">
+			<class name="com.iver.cit.gvsig.ViewControls"/>
+			<menus>
+				<menu text="Vista/Zoom_Completo" action-command="FULL" icon="images/MapContents.png" tooltip="Zoom completo a la v�sta"/>
+				<menu text="Vista/Zoom_Select" action-command="ZOOM_SELECT" icon="image/Select.png"/>
+				<menu text="Vista/Encuadre" action-command="ENCUADRE" icon="images/encuadre.png"/>
+				<menu text="Vista/Seleccion_por_tema" action-command="SELECTIONBYSHAPE"/>
+				<menu text="Vista/configurar_localizador" action-command="CONFIG_LOCATOR"/>		
+				<menu text="Vista/propiedades" action-command="PROPERTIES"/>
+			</menus>
+			<tool-bar name="Herramientas" y-position="1">
+				<action-tool icon="images/MapContents.png" action-command="FULL" tooltip="Zoom_Completo" position="1"/>
+				<action-tool icon="images/encuadre.png" action-command="ENCUADRE" tooltip="gestion_encuadre" last="true" position="2"/>			
+				<selectable-tool group="grupo1" default="true" icon="images/ZoomIn.png" action-command="ZOOM_IN" tooltip="Zoom_M�s" position="3"/>
+				<selectable-tool group="grupo1" icon="images/ZoomOut.png" action-command="ZOOM_OUT" position="4"/>
+				<selectable-tool group="grupo1" icon="images/Pan.png" action-command="PAN"  tooltip="Encuadre" position="5"/>
+				<selectable-tool group="grupo1" icon="images/Identify.png" action-command="INFO"  tooltip="informacion" position="6" />
+				<selectable-tool group="grupo2" icon="images/Distancia.png" action-command="MEDICION"  tooltip="medir_distancias" position="7"/>
+				<selectable-tool group="grupo2" icon="images/Poligono16.png" action-command="AREA"  tooltip="medir_area" position="8"/>
+				<selectable-tool group="grupo2" default="true" icon="images/Select.png" action-command="SELPOINT"  tooltip="seleccionar_por_punto" position="9"/>
+				<selectable-tool group="grupo2" icon="images/SelEspacial2b.png" action-command="SELRECT"  tooltip="seleccionar_por_rectangulo" position="10"/>
+			</tool-bar>
+		</extension>
+		<extension>
+			<class name="com.iver.cit.gvsig.ThemeControls"/>
+			<menu text="Tema/propiedades"/>
+		</extension>
+	</extensions>
+
+	<file-extensions>
+		<file-extension description="DGNfiles" ends-with="dgn" dialog="openLayer">
+			<class name="com.iver.cit.gvsig.DGNFileExtension"/>
+		</file-extension>
+		<file-extension description="Rasterfiles" ends-with="ecw,tif,tiff,jpg,png" dialog="openLayer">
+			<class name="com.iver.cit.gvsig.RasterFileExtension"/>
+		</file-extension>
+	</file-extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/castor.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/castor.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/castor.properties	(revision 42196)
@@ -0,0 +1 @@
+org.exolab.castor.indent=true
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/castor.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xsd	(revision 42196)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="andami">
+    <xs:complexType>
+      <xs:attribute name="update" type="xs:boolean" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="andami-config">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="andami" />
+        <xs:element ref="plugin" maxOccurs="unbounded" />
+        <xs:element ref="andami-options" minOccurs="0" maxOccurs="1" />
+      </xs:sequence>
+      <xs:attribute name="locale-language" type="xs:string" use="optional" />
+      <xs:attribute name="locale-country" type="xs:string" use="optional" />
+      <xs:attribute name="locale-variant" type="xs:string" use="optional" />
+      <xs:attribute name="lookAndFeel" type="xs:string" use="optional" />
+      <xs:attribute name="pluginsDirectory" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="plugin">
+    <xs:complexType>
+      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
+      <xs:attribute name="update" type="xs:boolean" use="required" />
+    </xs:complexType>
+  </xs:element>
+  
+  <xs:element name="andami-options">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="option" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="icon-theme" minOccurs="0" maxOccurs="1" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  
+  <xs:element name="icon-theme">
+    <xs:complexType>
+      <xs:attribute name="name" type="xs:string" use="required" />
+      <xs:attribute name="description" type="xs:string" use="optional" />
+      <xs:attribute name="version" type="xs:string" use="optional" />
+      <xs:attribute name="resource" type="xs:string" use="optional" />
+      <xs:attribute name="basedir" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="option">
+    <xs:complexType>
+      <xs:attribute name="name" type="xs:string" use="required" />
+      <xs:attribute name="value" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xml	(revision 42196)
@@ -0,0 +1,34 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<andami-config locale-language="es" locale-country="ES" locale-variant="es" pluginsDirectory="c:\tirar">
+	<andami update="yes"/>
+	<plugin name="com.iver.cit.gvsig" update="yes"/>
+	<plugin name="com.iver.core" update="no"/>
+	<andami-options>
+	  <option name="CustomOption1" value="customValue1"/>
+	  <icon-theme name="DefaultTheme" resource="iconThemes/default" basedir="iconThemes" />
+	</andami-options>
+</andami-config>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-persistence.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-persistence.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-persistence.xsd	(revision 42196)
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="bookmark">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="xml-entity" />
+      </xs:sequence>
+      <xs:attribute name="text" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="bookmarks">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="bookmark" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="plugin">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="xml-entity" />
+        <xs:element ref="bookmarks" />
+        <xs:element ref="windows" />
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
+      <xs:attribute name="lastUpdate" type="xs:NMTOKEN" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="plugins-status">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="plugin" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="property">
+    <xs:complexType>
+      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
+      <xs:attribute name="value" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="window">
+    <xs:complexType>
+      <xs:attribute name="rectangle" type="xs:string" use="required" />
+      <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="windows">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="window" maxOccurs="unbounded" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="xml-entity">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="property" maxOccurs="unbounded" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+</xs:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-persistence.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-config.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-config.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-config.xsd	(revision 42196)
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+<!--
+	action-tool => Button which fires the execution of this extension
+
+	action-command	Text to identify different action-tools inside a plugin
+	text		Button's text.
+	name			Button name (to retrive it)
+	icon		Tool icon
+	last		If true, a separator is added.
+	tooltip		Tooltip
+	enable-text Text that describes the necessary conditions to enable a tool
+	position    The position inside the toolbar
+-->
+  <xs:element name="action-tool">
+    <xs:complexType>
+      <xs:attribute name="text" type="xs:string" use="optional" />
+      <xs:attribute name="name" type="xs:string" use="optional" />
+      <xs:attribute name="action-command" type="xs:string" use="optional" />
+      <xs:attribute name="icon" type="xs:string" use="required" />
+      <xs:attribute name="last" type="xs:boolean" use="optional" />
+      <xs:attribute name="tooltip" type="xs:string" use="optional" />
+      <xs:attribute name="enable-text" type="xs:string" use="optional" />
+      <xs:attribute name="position" type="xs:int" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Plugin dependencies from other plugins
+	plugin-name		Name of the other plugin (name of the directory.)
+					Example; com.iver.cig.gvsig
+-->
+  <xs:element name="depends">
+    <xs:complexType>
+      <xs:attribute name="plugin-name" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Extension to Andami
+
+	class-name		Class that handles the extension
+	menu			Menus installed by the extension
+	tool-bar		Toolbar installed by this plugin
+	priority	Orden en el que se procesaran las extensiones durante la
+				carga de Andami. Se inicializan primero y se instalan sus controles
+				en las barras de tareas primero. La prioridad es
+				mayor cuanto más grande es el valor del atributo
+-->
+
+
+	<xs:element name="extension" type="extension-type"/>
+	<xs:complexType name="extension-type">
+		<xs:complexContent>
+		<xs:extension base="skin-extension-type">
+	    <xs:attribute name="priority" type="xs:int" use="optional" />
+		<xs:attribute name="active" type="xs:boolean" use="optional" />
+		<xs:attribute name="description" type="xs:string" use="optional" />
+		<xs:attribute name="alwaysvisible" type="xs:boolean" use="optional" />
+	  </xs:extension>
+	</xs:complexContent>
+  </xs:complexType>
+
+<!--
+	Extension's section of the plugin
+-->
+  <xs:element name="extensions">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="extension" maxOccurs="unbounded" />
+        <xs:element ref="skin-extension" minOccurs="0" maxOccurs="unbounded" />
+      </xs:sequence>
+
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Main application's Icon
+
+	text 	Title of main window.
+	src	    path to an icon file
+-->
+  <xs:element name="icon">
+    <xs:complexType>
+      <xs:attribute name="text" type="xs:string" use="required" />
+      <xs:attribute name="src" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	label => In this element you can put the mesages that must appear in the
+			status bar
+
+	size	Size in pixels of the status label
+	id		Id assigned to this label
+-->
+  <xs:element name="label">
+    <xs:complexType>
+      <xs:attribute name="size" type="xs:int" use="required" />
+      <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Group of labels on the status bar. The order from up to down in xml file
+	stands for the order right to left in Andami's principal frame.
+
+	class-name	When the active view is an instance of class-name, this
+			labelSet will be shown.
+-->
+  <xs:element name="label-set">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="label" maxOccurs="unbounded" />
+      </xs:sequence>
+      <xs:attribute name="class-name" type="xs:NMTOKEN" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	jars that are used by this plugin
+	library-dir     Relative path where the jar files are. Usually ./ or ./lib
+-->
+  <xs:element name="libraries">
+    <xs:complexType>
+      <xs:attribute name="library-dir" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	action-command	Text to identify different menus inside the same plugin
+
+	key		    Abreviatura de teclado del menu
+	icon		Menu Icon
+	enable-text Texto con la descripción de las condiciones que se tienen que dar
+				para que se visualice la opción
+	tooltip		Tooltip
+	mnemonic	Accelerator key
+	text 		Menu Text
+	is_separator true means to add a JSeparator to the parent menu defined by text
+-->
+  <xs:element name="menu">
+    <xs:complexType>
+      <xs:attribute name="action-command" type="xs:string" use="optional" />
+      <xs:attribute name="key" type="xs:string" use="optional" />
+      <xs:attribute name="icon" type="xs:string" use="optional" />
+      <xs:attribute name="tooltip" type="xs:string" use="optional" />
+      <xs:attribute name="enable-text" type="xs:string" use="optional" />
+      <xs:attribute name="mnemonic" type="xs:string" use="optional" />
+      <xs:attribute name="text" type="xs:string" use="required" />
+      <xs:attribute name="position" type="xs:int" use="optional" />
+	  <xs:attribute name="is_separator" type="xs:boolean" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	XML File Root
+
+	name		Plugin's Name
+	updateURL	URL of zip-file with a new plugin's version.
+-->
+  <xs:element name="plugin-config">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="icon" minOccurs="0"/>
+        <xs:element ref="depends" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:element ref="resourceBundle" minOccurs="0"/>
+        <xs:element ref="label-set" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:element ref="libraries"/>
+        <xs:element ref="popup-menus" minOccurs="0"/>
+        <xs:element ref="extensions" />
+      </xs:sequence>
+      <xs:attribute name="update-url" type="xs:string" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Popup menu by the plugin. The plugin must register itself as a
+	popup-menu listener.
+-->
+  <xs:element name="popup-menu">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="menu" maxOccurs="unbounded" />
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:string" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Section to define popup-menus
+-->
+  <xs:element name="popup-menus">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="popup-menu" maxOccurs="unbounded" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Properties file with translations used by the tool.
+
+	name	Name of resource bundle file
+-->
+  <xs:element name="resourceBundle">
+    <xs:complexType>
+      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	tool button that remains pressed when it is selected.
+
+	text		Button's text.
+	name			Button name (to retrive it)
+	action-command	Text to identify the different action-tools inside a plugin.
+
+	group		Group where the selectable-tool belongs. It will be only one selectable-tool
+				selected inside the group.
+	is-default  If true, the selectable-tool will be selected by default.
+	icon		Icon to use.
+	last		If true, after the tool it will appears a separator.
+	tooltip		Tooltip
+	position	The position inside the toolbar
+-->
+  <xs:element name="selectable-tool">
+    <xs:complexType>
+      <xs:attribute name="text" type="xs:string" use="optional" />
+      <xs:attribute name="name" type="xs:string" use="optional" />
+      <xs:attribute name="action-command" type="xs:string" use="optional" />
+      <xs:attribute name="is-default" type="xs:boolean" use="optional" />
+      <xs:attribute name="last" type="xs:boolean" use="optional" />
+      <xs:attribute name="icon" type="xs:string" use="required" />
+      <xs:attribute name="tooltip" type="xs:string" use="optional" />
+      <xs:attribute name="enable-text" type="xs:string" use="optional" />
+      <xs:attribute name="group" type="xs:string" use="optional" default="unico" />
+      <xs:attribute name="position" type="xs:int" use="optional" />
+    </xs:complexType>
+  </xs:element>
+
+<!--
+	Extension plugin to andami
+
+	class-name		Class which handles the plugin
+	menu			Menus installed by the plugin
+	tool-bar		Toolbar of the plugin. If it doesn't exist, it will be created.
+	combo-button	combo-button to be added to the status bar
+	combo-scale		combo-scale to be added to the status bar
+-->
+  <xs:element name="skin-extension" type="skin-extension-type"/>
+
+  <xs:complexType name="skin-extension-type">
+    <xs:sequence>
+      <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
+      <xs:element ref="tool-bar" minOccurs="0" maxOccurs="unbounded" />
+      <xs:element ref="combo-button" minOccurs="0" maxOccurs="unbounded" />
+      <xs:element ref="combo-scale" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+    <xs:attribute name="class-name" type="xs:NMTOKEN" use="required" />
+  </xs:complexType>
+
+<!--
+	tool-bar => Application's main toolbar
+
+	name	Toolbar name. This way, other plugins can refer to this toolbar
+			and add tools to this toolbar.
+	position	Used to order the toolbars. Toolbars with higher position are
+				placed on the right side, toolbars with lower position are
+				placed on the left. If it's omitted, the default value is 50.
+
+	combo-button	combo-button to be added to the toolbar
+	commbo-scale	combo-scale to be added to the toolbar
+	visible			(Not supported yet). Determines whether the toolbar is
+					visible by default.	In the future it will be possible to
+					hide/show toolbars, and this attribute will set its	initial
+					status.	Note: if the toolBar is defined in several
+					extensions, the	extension with highest priority will decide
+					the toolbar's visibility.
+-->
+  <xs:element name="tool-bar">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="action-tool" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="selectable-tool" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="combo-button" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="combo-scale" minOccurs="0" maxOccurs="unbounded" />
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:string" use="required" />
+      <xs:attribute name="position" type="xs:int" use="optional" default="50" />
+      <xs:attribute name="is-visible" type="xs:boolean" use="optional" default="true" />
+    </xs:complexType>
+  </xs:element>
+
+ <!--
+ 	combo-scale => A combo box with numeric values, and editable.
+
+ 	name		A name to identify the combo-scale.
+
+ 	label		The label to be displayed on the left of the combo
+
+ 	elements    A semicolon separated list of the combo box' elements
+
+ 	value		The initial selected value. If ommited, the first element is selected
+
+	action-command	Text to identify the different action-tools inside a plugin.
+ -->
+  <xs:element name="combo-scale">
+  	<xs:complexType>
+  		<xs:attribute name="name" type="xs:string" use="required" />
+  		<xs:attribute name="label" type="xs:string" use="optional" />
+  		<xs:attribute name="elements" use="required" />
+  		<xs:attribute name="value" use="optional" />
+  		<xs:attribute name="action-command" type="xs:string" use="required" />
+  		<xs:attribute name="position" use="optional" />
+  	</xs:complexType>
+  </xs:element>
+<!--
+	combo-button => A combo button (drop-down list of selectable buttons).
+
+	name		A name to identify the combo-button
+
+-->
+  <xs:element name="combo-button">
+  	<xs:complexType>
+  		<xs:sequence>
+        	<xs:element ref="combo-button-element" minOccurs="0" maxOccurs="unbounded" />
+      	</xs:sequence>
+  		<xs:attribute name="name" type="xs:string" use="required" />
+  		<xs:attribute name="position" use="optional" />
+  	</xs:complexType>
+  </xs:element>
+
+<!--
+	combo-button-element => An entry (icon) on the combo-button list
+
+	action-command	Text to identify the different action-tools inside a plugin.
+
+	icon		Icon to use.
+-->
+	<xs:element name="combo-button-element">
+		<xs:complexType>
+			<xs:attribute name="icon" type="xs:string" use="required"/>
+			<xs:attribute name="action-command"  type="xs:string"  use="required"/>
+		</xs:complexType>
+	</xs:element>
+
+</xs:schema>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-config.xsd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-plugins-persistence.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-plugins-persistence.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-plugins-persistence.xml	(revision 42196)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugins-status>
+	<plugin name="gvsig" lastUpdate="237628686">
+		<xml-entity name="config">
+			<property name="dataDirectory" value="c:\"/>
+			<xml-entity>
+				<property name="dataDirectory" value="c:\"/>
+				<property name="dataDirectory" value="c:\"/>
+				<property name="dataDirectory" value="c:\"/>
+			</xml-entity>
+		</xml-entity>
+		<bookmarks>
+			<bookmark text="Recientes/raster">
+				<xml-entity>
+					<property name="projection" value="EPSG:3403"/>
+					<property name="boundinBox" value="12,12,115,115"/>
+				</xml-entity>
+			</bookmark>
+		</bookmarks>
+		<windows>
+			<window id="0" rectangle="0,0,150,150"/>
+			<window id="2" rectangle="50,50,150,150"/>
+			<window id="8" rectangle="100,100,150,150"/>
+			<window id="12" rectangle="150,150,150,150"/>
+		</windows>
+	</plugin>
+	<tool-bars>
+		<tool-bar name="gvsig.herramientas" x-position="0" y-position="1"/>
+		<tool-bar name="gvsig.herramientas" x-position="0" y-position="0"/>
+	</tool-bars>
+</plugins-status>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-plugins-persistence.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-icon48x48.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-icon48x48.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-package-installer.l4j.ini
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-package-installer.l4j.ini	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-package-installer.l4j.ini	(revision 42196)
@@ -0,0 +1,25 @@
+###############################
+# gvSIG runtime configuration #
+###############################
+
+# Starting memory
+# -Xms128m
+
+# Maximum memory
+# -Xmx512m
+
+# Maximum perm space size
+# -XX:MaxPermSize=96m
+
+# Disable hardware accelerated java2D drawing through Direct3D 
+-Dsun.java2d.d3d=false
+-Dsun.java2d.noddraw=true
+-Dsun.java2d.opengl=false
+-Dsun.java2d.ddoffscreen=false
+
+# For Java parameters documentation and more parameters look at:
+# http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
+# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
+
+# Environment variable expansion is supported, for example:
+#-Dsomevar="%SOMEVAR%"
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-package-installer.l4j.ini
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/README.txt	(revision 42196)
@@ -0,0 +1,21 @@
+gvSIG Desktop v2.2.0.
+
+ - (c) gvSIG Association
+ - Software under GNU/GPL license (http://www.fsf.org/licensing/licenses/gpl.html)
+ - Contact: info@gvsig.com
+
+
+Application Requirements:
+
+ System
+  - At least: Intel/AMD - 512 MB RAM.
+  - Operative Systems: platforms Windows and Linux. Tested in Windows XP, Linux Ubuntu/Debian.
+
+ Installed software (available at http://www.oracle.com)
+  - Java VM 1.6.0 or higher (Java 1.7.0 in Windows 8).
+
+Further information and support:
+
+ - Official web site and Professional support: http://www.gvsig.com
+
+ - Mailing lists: http://www.gvsig.com/en/community/mailing-lists

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/locale.config
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/locale.config	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/locale.config	(revision 42196)
@@ -0,0 +1,26 @@
+#
+# Default locales
+#
+locale=es
+locale=en        
+locale=en_US
+locale=ca
+locale=gl
+locale=eu
+locale=de
+locale=cs
+locale=fr
+locale=it
+locale=pl
+locale=pt
+locale=pt_BR
+locale=ro
+locale=zh
+locale=ru
+locale=el
+locale=ro
+locale=ro
+locale=pl
+locale=tr
+locale=sr
+locale=sw
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/check.cmd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/check.cmd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/check.cmd	(revision 42196)
@@ -0,0 +1,5 @@
+@echo off
+echo Generating report...
+cd ..
+tools/busybox sh tools/check.sh >report.txt 2>&1
+echo Report generated in report.txt
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/update/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/update/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/native/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/native/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/check.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/check.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/check.sh	(revision 42196)
@@ -0,0 +1,58 @@
+{
+PATH="$PWD/tools;$PATH"
+ROOT="$PWD"
+
+####################
+# Identify OS and Architecture  #
+####################
+
+UNAME=$(uname -a)
+if echo "$UNAME" | grep -i "win" >/dev/null; then
+	OS="win"
+	ARG_D32=""
+        CPSEP=";"
+else
+	if echo "$UNAME" | grep -i "lin" >/dev/null ; then
+		OS="lin"
+		# Only linux support -d32 arg
+		ARG_D32="-d32"
+                CPSEP=":"
+	else
+		OS="unknown"
+		ARG_D32=""
+                CPSEP=":"
+	fi
+fi
+if echo "$UNAME" | egrep -i "(x86_64)|(amd64)" >/dev/null ; then
+	ARCH="x86_64"
+else
+	ARCH="x86"
+fi
+
+echo -e "\nCurrent directory: $ROOT"
+uname -a
+echo -e "\nDump file list and sizes\n"
+du -k "$ROOT"
+echo -e "\nCalculating md5sum of dlls and exes...\n"
+cd "$ROOT"
+for f in $(find . -name "*.exe")
+do
+	md5sum $f
+done
+for f in $(find . -name "*.dll")
+do
+	md5sum $f
+done
+echo -e "\nCheck DLL dependencies...\n"
+for f in $(find . -name "*.dll")
+do
+	cygcheck.exe "$f"
+	echo ""
+done
+for f in $(find . -name "*.so*")
+do
+	ldd "$f"
+	echo ""
+done
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh	(revision 42196)
@@ -0,0 +1,388 @@
+#!/bin/sh
+#
+# gvSIG. Desktop Geographic Information System.
+#
+# Copyright (C) 2007-2013 gvSIG Association.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+#
+# For any additional information, do not hesitate to contact us
+# at info AT gvsig.com, or visit our website www.gvsig.com.
+#
+
+# gvSIG.sh
+
+set -e
+#set -x
+
+####################
+# Identify OS and Architecture  #
+####################
+
+UNAME=$(uname -a)
+if echo "$UNAME" | grep -i "win" >/dev/null; then
+	OS="win"
+	ARG_D32=""
+        CPSEP=";"
+else
+	if echo "$UNAME" | grep -i "lin" >/dev/null ; then
+		OS="lin"
+		# Only linux support -d32 arg
+		ARG_D32="-d32"
+                CPSEP=":"
+	else
+		OS="unknown"
+		ARG_D32=""
+                CPSEP=":"
+	fi
+fi
+if echo "$UNAME" | egrep -i "(x86_64)|(amd64)" >/dev/null ; then
+	ARCH="x86_64"
+else
+	ARCH="x86"
+fi
+
+########################
+
+getJavaArchitecture() {
+	if [ "$ARCH" = "x86" ] ; then
+                # Si la arquitectura del SO es x86 decimos
+                # que la de java es x86
+		echo "x86"
+	else
+                # si la arquitectura es x86_64, comprobamos
+                # la arquitectura de la java que nos pasan
+		if "$1" -version 2>&1 | egrep -i "64-Bit" >/dev/null ; then
+			echo "x86_64"
+		else
+			echo "x86"
+		fi
+	fi
+}
+
+#################################
+# Set install and home folders  #
+#################################
+
+# Go into the gvSIG installation folder, just in case
+cd "$(dirname $0)"
+
+if [ "$GVSIG_APPLICATION_NAME" = "" ] ; then
+  GVSIG_APPLICATION_NAME=gvSIG
+fi
+export GVSIG_APPLICATION_NAME
+
+# gvSIG installation folder
+export GVSIG_INSTALL_FOLDER="$PWD"
+
+# gvSIG home folder
+export GVSIG_HOME_FOLDER="$HOME/$GVSIG_APPLICATION_NAME"
+
+mkdir -p "$GVSIG_HOME_FOLDER"
+
+####################
+# Load config file #
+####################
+
+if [ -f "$GVSIG_INSTALL_FOLDER/gvSIG.config" ] ; then
+  . "$GVSIG_INSTALL_FOLDER/gvSIG.config"
+fi
+
+#################
+# Logger config #
+#################
+
+LOGGER_FILE="$GVSIG_HOME_FOLDER/${GVSIG_APPLICATION_NAME}-launcher.log"
+echo > "$LOGGER_FILE"
+
+
+logger () {
+  # level (INFO/WARNIG) message
+  local LOGGER_LEVEL="$1"
+  shift
+  echo "$LOGGER_LEVEL launch $@"
+  echo "$LOGGER_LEVEL launch $@" >> "$LOGGER_FILE"
+}
+
+logger_info () {
+  logger "INFO" "$@"
+}
+
+logger_warn () {
+  logger "WARNING" "$@"
+}
+
+logger_cmd() {
+  logger_info "$@"
+  eval $@ | tee -a  "$LOGGER_FILE"
+}
+
+#########################
+# Locate whitch command #
+#########################
+
+if type which >/dev/null; then
+        WHICH=which
+else
+        WHICH=type
+fi
+
+logger_info "gvSIG Installation folder: $GVSIG_INSTALL_FOLDER"
+logger_info "gvSIG home folder: $GVSIG_HOME_FOLDER"
+
+##########################################################
+# Search in gvSIG/extensiones the architecture of plugins
+# installeds and set as PREFERED_ARCHITECTURE
+##########################################################
+
+cd "$GVSIG_INSTALL_FOLDER"
+x=$(find "./gvSIG/extensiones" -name package.info)
+x=$(grep -h "architecture=[^a]" $x | sort|head -n 1)
+if [ "X${x}X" != "XX" ] ; then
+	eval $x
+	PREFERED_ARCHITECTURE="$architecture"
+else
+	PREFERED_ARCHITECTURE="$ARCH"
+fi
+cd -
+
+##########################################################
+
+FORCE_JAVA_32BITS=""
+JAVA_HOME_OTHER_ARCHITECTURE=""
+
+# PRIVATE JAVA HOMEs
+PJH1=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.6* 2>/dev/null | head -1)
+PJH2=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.5* 2>/dev/null | head -1)
+PJH3=
+PJH4=
+PJH5=
+PJH6=
+if [ -d "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre_7_windows_i586/jre" ] ; then
+    PJH5="$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre_7_windows_i586/jre"
+fi
+if [ -d /usr/lib/jvm ] ; then
+    PJH6=$(find /usr/lib/jvm -maxdepth 1 ! -name "jvm" -name "[a-zA-Z]*" ! -type l -print)
+fi
+
+#
+# in next line, JAVA_HOME is set during instalation process
+DEFAULT_JAVA_HOME="${JAVA_HOME}"
+#
+#
+# Try to use java from:
+# 1. Java specified in JAVA_HOME variable
+# 2. Java specified in the instalation process
+# 3. Java in the HOME/gvsig/jre folder (optionally created during installation process)
+# 4. Java in the system path.
+#
+export JAVA_HOME
+export JAVA
+export FORCE_JAVA_32BITS
+
+
+for JAVA_HOME_TO_USE in "$JAVA_HOME" "$DEFAULT_JAVA_HOME" "$PJH1" "$PJH2" "$PJH3" "$PJH4" "$PJH5" $PJH6 ""
+do
+        if [ "$JAVA_HOME_TO_USE" = "" ] ; then
+                continue
+        fi
+	logger_info "Checking JAVA_HOME ${JAVA_HOME_TO_USE}..."
+        if [ ! -d "$JAVA_HOME_TO_USE" ] ; then
+                logger_warn "Folder not found ($JAVA_HOME_TO_USE), skip"
+                continue
+        fi
+        if [ ! -x "$JAVA_HOME_TO_USE/bin/java" ] ; then
+                logger_warn "Not a valid JAVA_HOME ($JAVA_HOME_TO_USE), bin/java not found, skip"
+                continue
+        fi
+	JAVA_ARCH="$(getJavaArchitecture $JAVA_HOME_TO_USE/bin/java)"
+	if [ "$JAVA_ARCH" != "$PREFERED_ARCHITECTURE" ] ; then
+                JAVA_HOME_OTHER_ARCHITECTURE="$JAVA_HOME_TO_USE"
+                logger_warn "Prefered architecture is $PREFERED_ARCHITECTURE, java $JAVA_ARCH found in $JAVA_HOME_TO_USE, skip"
+                continue
+        fi
+        break
+done
+
+if [ "$JAVA_HOME_TO_USE" = "" ] ; then
+        # Try to use the java in the system path
+        if ! type java >/dev/null ; then
+                # java not found in the system path
+                if [ "$JAVA_HOME_OTHER_ARCHITECTURE" != "" ] ; then
+                        JAVA_HOME="$JAVA_HOME_OTHER_ARCHITECTURE"
+                        JAVA="$JAVA_HOME/bin/java"
+                        logger_warn "java $PREFERED_ARCHITECTURE not found in the system path, using $JAVA_HOME_OTHER_ARCHITECTURE"
+                else
+                        logger_warn "java not found in the system"
+                        exit 1
+                fi
+        else
+		if [ "$(getJavaArchitecture $($WHICH java))" != "$PREFERED_ARCHITECTURE" ] ; then
+                      logger_warn "java $PREFERED_ARCHITECTURE not found, using $($WHICH java)"
+                fi
+                unset JAVA_HOME
+                JAVA="java"
+        fi
+else
+        JAVA_HOME="$JAVA_HOME_TO_USE"
+        JAVA="$JAVA_HOME/bin/java"
+fi
+
+if [ "$PREFERED_ARCHITECTURE" = "x86" ] ; then
+	FORCE_JAVA_32BITS="$ARG_D32"
+else
+	FORCE_JAVA_32BITS=""
+
+fi
+logger_info "Using java " $($WHICH "$JAVA")
+
+###################################################################
+# gvSIG native libraries location
+###################################################################
+
+export GVSIG_NATIVE_LIBS=""
+export LD_LIBRARY_PATH=""
+
+add_library_path() {
+  LD_LIBRARY_PATH="$LD_LIBRARY_PATH${CPSEP}$1"
+  GVSIG_NATIVE_LIBS="$GVSIG_NATIVE_LIBS${CPSEP}$1"
+}
+
+list_shared_library_dependencies() {
+  logger_info "Cheking shared library dependencies for $1"
+  set +e
+  if [ "$OS" = "win" ] ; then
+        logger_cmd cygcheck.exe "$1"
+  else
+        logger_cmd ldd "$1"
+  fi || logger_warn "Problens checking shared library $1"
+  set -e
+}
+
+###################################################################
+# gvSIG java libraries location
+###################################################################
+
+export LIBRARIES=""
+# Load gvSIG Andami jars and dependencies for the classpath
+for i in "$GVSIG_INSTALL_FOLDER/lib/"*.jar ; do
+  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.jar" -a "$i" != "" ]; then
+    LIBRARIES="${LIBRARIES}${CPSEP}${i}"
+  fi
+done
+for i in "$GVSIG_INSTALL_FOLDER/lib/"*.zip ; do
+  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.zip" -a "$i" != "" ]; then
+    LIBRARIES="${LIBRARIES}${CPSEP}${i}"
+  fi
+done
+
+# echo Initial libraries found: ${LIBRARIES}
+
+# gvSIG Andami launcher
+
+if [ "$GVSIG_LAUNCHER" = "" ] ; then
+  GVSIG_LAUNCHER=org.gvsig.andamiupdater.Updater
+fi
+if [ "$GVSIG_PARAMS" = "" ] ; then
+  GVSIG_PARAMS="$GVSIG_APPLICATION_NAME gvSIG/extensiones $@"
+fi
+
+export GVSIG_LAUNCHER
+export GVSIG_PARAMS
+
+# gvSIG initial classpath
+export GVSIG_CLASSPATH="$LIBRARIES:$GVSIG_CLASSPATH"
+
+########################
+# Memory configuration #
+########################
+
+# Initial gvSIG memory (M=Megabytes, G=Gigabytes)
+export GVSIG_INITIAL_MEM=256M
+# Maximum gvSIG memory (M=Megabytes, G=Gigabytes)
+export GVSIG_MAX_MEM=1024M
+# Maximum permanent memory size: needed to load classes and statics
+export GVSIG_MAX_PERM_SIZE=96M
+
+
+#############################
+# Execute plugin's autorun  #
+#############################
+
+for PLUGIN_FOLDER in "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/"*
+do
+  if [ -f "$PLUGIN_FOLDER/autorun.sh" ] ; then
+    logger_info "Running autorun from plugin " $(basename "$PLUGIN_FOLDER")
+    . "$PLUGIN_FOLDER/autorun.sh"
+    cd "$GVSIG_INSTALL_FOLDER"
+  fi
+done
+
+if [ "$OS" = "win" ] ; then
+	add_library_path "$GVSIG_INSTALL_FOLDER"
+else
+	add_library_path "/usr/lib"
+fi
+
+logger_info "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
+
+#####################
+# Java debug mode ? #
+#####################
+
+DEBUG_ARGS="X${@}X"
+if expr match "$DEBUG_ARGS" "X.*--pause.*X" >/dev/null; then
+    DEBUG_PAUSE="y"
+else
+    DEBUG_PAUSE="n"
+fi
+
+if expr match "$DEBUG_ARGS" "X.*--debug.*X" >/dev/null; then
+  DEBUG_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8765,server=y,suspend=$DEBUG_PAUSE"
+else
+  DEBUG_OPTIONS=""
+fi
+
+################
+# Launch gvSIG #
+################
+
+# For Java parameters documentation and more parameters look at:
+# http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
+# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
+
+logger_info Launching gvSIG: ${JAVA} \
+	$FORCE_JAVA_32BITS \
+	-Xms${GVSIG_INITIAL_MEM} \
+	-Xmx${GVSIG_MAX_MEM} \
+	-XX:MaxPermSize=${GVSIG_MAX_PERM_SIZE} \
+        $DEBUG_OPTIONS \
+	-Djava.library.path=\"${GVSIG_NATIVE_LIBS}\" \
+	-cp $GVSIG_CLASSPATH \
+        $GVSIG_JAVA_PARAMS \
+	$GVSIG_LAUNCHER $GVSIG_PARAMS
+
+"${JAVA}" \
+	$FORCE_JAVA_32BITS \
+	-Xms${GVSIG_INITIAL_MEM} \
+	-Xmx${GVSIG_MAX_MEM} \
+	-XX:MaxPermSize=${GVSIG_MAX_PERM_SIZE} \
+        $DEBUG_OPTIONS \
+	-Djava.library.path="${GVSIG_NATIVE_LIBS}" \
+	-cp "$GVSIG_CLASSPATH" \
+        $GVSIG_JAVA_PARAMS \
+	$GVSIG_LAUNCHER $GVSIG_PARAMS
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.cmd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.cmd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.cmd	(revision 42196)
@@ -0,0 +1 @@
+@busybox sh gvSIG.sh
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-icon22x22.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-icon22x22.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/icon-theme/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/icon-theme/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.l4j.ini
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.l4j.ini	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.l4j.ini	(revision 42196)
@@ -0,0 +1,22 @@
+###############################
+# gvSIG runtime configuration #
+###############################
+
+# Starting memory
+# -Xms128m
+
+# Maximum memory
+# -Xmx512m
+
+# Maximum perm space size
+# -XX:MaxPermSize=96m
+
+# Disable hardware accelerated java2D drawing through Direct3D 
+# -Dsun.java2d.d3d=false
+
+# For Java parameters documentation and more parameters look at:
+# http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
+# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
+
+# Environment variable expansion is supported, for example:
+#-Dsomevar="%SOMEVAR%"
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.l4j.ini
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-icon16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-icon16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvSIG.config
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvSIG.config	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvSIG.config	(revision 42196)
@@ -0,0 +1,6 @@
+
+###
+GVSIG_HOME_FOLDER="$GVSIG_INSTALL_FOLDER/home/gvSIG"
+GVSIG_JAVA_PARAMS="-DgvSIG.home=$GVSIG_INSTALL_FOLDER/home"
+###
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable	(revision 42196)
@@ -0,0 +1,322 @@
+#!/bin/bash
+#############################################################################
+# Require la siguiente estructura de carpetas:
+#
+# - packages
+#   - custom (carpeta con los paquetes adicionales a incluir en la portable)
+#   - exclude (fichero con los codigos de paquetes a excluir)
+# - standard
+#   - gvSIG-desktop*.online.zip
+#   - gvSIG-desktop*-lin-x86.gvspkg
+#   - gvSIG-desktop*-lin-x86_64.gvspkg
+#   - gvSIG-desktop*-win-x86.gvspkg
+# - patchs 
+#   - patchs.sh (se ejecuta antes que los scripts de ant y zipear la instalacion)
+# - make-portable
+#
+# Y se ejecutara el archivo "make-portable" desde ese directorio.
+#
+# Al final se crean las carpetas y archivos:
+#
+# - target/gvsig-desktop-VERSION-lin-x86
+# - target/gvsig-desktop-VERSION-lin-x86_64
+# - target/gvsig-desktop-VERSION-win-x86
+#
+# - target/gvsig-desktop-VERSION-lin-x86.zip
+# - target/gvsig-desktop-VERSION-lin-x86_64.zip
+# - target/gvsig-desktop-VERSION-win-x86.zip
+#
+##############################################################################
+
+#set -x
+
+#function handle_error() {
+#    echo "FAILED: line $1, exit code $2"
+#    exit 1
+#}
+#
+#trap 'handle_error $LINENO $?' ERR 
+
+set -e
+
+cd "$(dirname $0)"
+SCRIPT_NAME=$(basename $0)
+
+export BASEFOLDER="$PWD"
+export TARGET="$BASEFOLDER/target"
+export PATCHSFOLDER=$BASEFOLDER/patchs
+
+function logger_info() {
+    echo $*
+}
+
+function logger_warn() {
+    echo $*
+}
+
+function get_package_info() {
+    PACKAGE_PATH="$1"
+    PACKAGE_NAME="$(basename $PACKAGE_PATH)"
+    PACKAGE_CODE=$(expr "$PACKAGE_NAME" : "gvSIG-desktop-[0-9.]*-\\([a-zA-Z0-9._]*\\)-")
+    set +e
+    PACKAGE_VERSION=$(expr "$PACKAGE_NAME" : "gvSIG-desktop-[0-9.]*-[a-zA-Z0-9._]*-\\([0-9.]*-[0-9]*\\)-")
+    set -e
+    if [ "X${PACKAGE_VERSION}X" == "XX" ] ; then
+        PACKAGE_VERSION=$(expr "$PACKAGE_NAME" : "gvSIG-desktop-[0-9._]*-[a-zA-Z0-9._]*-\\([0-9.]*-[A-Z][.A-Za-z0-9_]*-[0-9]*\\)-")
+    fi
+}
+
+function install_symbols() {
+    INSTALL_FOLDER="$1"
+    get_package_info $2
+
+    cd "$INSTALL_FOLDER"
+    mkdir -p "home/gvSIG/plugins/org.gvsig.app.mainplugin/Symbols"
+    cd "home/gvSIG/plugins/org.gvsig.app.mainplugin/Symbols"
+    rm -rf "$PACKAGE_CODE"
+    if include_package $PACKAGE_CODE ; then
+        logger_info "Install symbols $PACKAGE_CODE $PACKAGE_VERSION"
+        unzip -qq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+    else
+        logger_info "Exclude symbols $PACKAGE_CODE"
+        cp "$PACKAGE_PATH" "$INSTALL_FOLDER/install"
+    fi
+}
+
+function install_jCRS_EPSG() {
+    INSTALL_FOLDER="$1"
+    get_package_info $2
+
+    cd "$INSTALL_FOLDER"
+    mkdir -p "gvSIG/extensiones/org.gvsig.projection.app.jcrs/db/EPSG"
+    cd "gvSIG/extensiones/org.gvsig.projection.app.jcrs/db/EPSG"
+    rm -rf "$PACKAGE_CODE"
+    if include_package $PACKAGE_CODE ; then
+        logger_info "Install jCRS EPSG data base $PACKAGE_CODE $PACKAGE_VERSION"
+        unzip -qq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+    else
+        logger_info "Exclude jCRS EPSG data base $PACKAGE_CODE"
+        cp "$PACKAGE_PATH" "$INSTALL_FOLDER/install"
+    fi
+}
+
+function install_plugin() {
+    INSTALL_FOLDER="$1"
+    get_package_info $2
+
+    cd "$INSTALL_FOLDER/gvSIG/extensiones"
+    rm -rf "$PACKAGE_CODE"
+    if include_package $PACKAGE_CODE ; then
+        logger_info "Install plugin $PACKAGE_CODE $PACKAGE_VERSION"
+        unzip -qq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+    else
+        logger_info "Exclude plugin $PACKAGE_CODE"
+        cp "$PACKAGE_PATH" "$INSTALL_FOLDER/install"
+    fi
+}
+
+function install_translations() {
+    INSTALL_FOLDER="$1"
+    get_package_info $2
+
+    cd "$INSTALL_FOLDER/i18n"
+    rm -rf "$PACKAGE_CODE"
+    if include_package $PACKAGE_CODE ; then
+        logger_info "Install translations $PACKAGE_CODE $PACKAGE_VERSION"
+        unzip -qq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+    else
+        logger_info "Exclude translations $PACKAGE_CODE"
+        cp "$PACKAGE_PATH" "$INSTALL_FOLDER/install"
+    fi
+}
+
+function run_plugins_install_scripts() {
+    INSTALL_FOLDER="$1"
+    
+    logger_info ""
+    logger_info "Running plugins install scripts"
+    cd "$INSTALL_FOLDER/gvSIG/extensiones"
+    for PLUGIN_CODE in *
+    do
+        if [ -f "$INSTALL_FOLDER/gvSIG/extensiones/$PLUGIN_CODE/install/install.xml" ] ; then
+            logger_info "Running custom install script of $PLUGIN_CODE"
+            cd $INSTALL_FOLDER
+            ant -Dgvsig_dir="$INSTALL_FOLDER" -Dextensions_dir="$INSTALL_FOLDER/gvSIG/extensiones" -f "$INSTALL_FOLDER/gvSIG/extensiones/$PLUGIN_CODE/install/install.xml"
+        fi
+    done
+}
+
+function install_packages() {
+    INSTALL_FOLDER="$1"
+    PACKAGES_FOLDER="$2"
+    
+    logger_info ""
+    logger_info "Processing $(basename $PACKAGES_FOLDER) packages"
+    for PACKAGE_PATH in $PACKAGES_FOLDER/*.gvspkg
+    do
+      if [ -f "$PACKAGE_PATH" ] ; then
+        PACKAGE_NAME="$(basename $PACKAGE_PATH)"
+        if expr "$PACKAGE_NAME" : "gvSIG-desktop-[0-9.]*-translations[.]" >/dev/null ; then
+          install_translations "$INSTALL_FOLDER" "$PACKAGE_PATH"
+        elif expr "$PACKAGE_NAME" : "gvSIG-desktop-[0-9.]*-symbols[.]"  >/dev/null ; then
+          install_symbols "$INSTALL_FOLDER" "$PACKAGE_PATH"
+        elif expr "$PACKAGE_NAME" : "gvSIG-desktop-[0-9.]*-EPSG_"  >/dev/null ; then
+          install_jCRS_EPSG "$INSTALL_FOLDER" "$PACKAGE_PATH"
+        else
+          install_plugin "$INSTALL_FOLDER" "$PACKAGE_PATH"
+        fi
+      fi
+    done
+}
+
+function include_package() {
+    set +e
+    egrep  "^$1\$" "$BASEFOLDER/packages/excludes" >/dev/null
+    FOUND=$?
+    set -e
+    if [ "$FOUND" == 1 ] ; then
+        return 0
+    fi
+    return 1
+}
+
+
+function remove_excluded_packages() {
+    logger_info "Checking plugins to remove"
+    cd "$INSTALL_FOLDER/gvSIG/extensiones"
+    while read line; do
+        if [ -d "$line" ] ; then 
+            logger_info "Removing plugin $line"
+            rm -rf "$line"
+        fi
+    done < "$BASEFOLDER/packages/excludes"
+}
+
+function install_portable_configuration_linux_files() {
+    logger_info "Install portable configuration file (gvSIG.config)"
+    cp "$INSTALL_FOLDER/tools/gvSIG.config" "$INSTALL_FOLDER"
+    chmod a+x "$INSTALL_FOLDER/gvSIG.sh"
+}
+
+
+function remove_unneed_files_for_linux() {
+    logger_info "Removing nom-${PORTABLE_OSNAME} files"
+    rm -rf "$INSTALL_FOLDER/busybox.exe"
+    rm -f $INSTALL_FOLDER/gvsig-desktop-devel.*
+    rm -f $INSTALL_FOLDER/gvsig-desktop.*
+    rm -f $INSTALL_FOLDER/gvsig-package-installer.*
+    rm -f $INSTALL_FOLDER/*.cmd
+    rm -f $INSTALL_FOLDER/check.sh
+    rm -rf "$INSTALL_FOLDER/gvSIG/extensiones/jre_7_windows_i586"
+    rm -rf $INSTALL_FOLDER/tools/*.cmd
+    rm -rf $INSTALL_FOLDER/tools/*.exe
+    rm -rf $INSTALL_FOLDER/tools/gvsig-desktop-portable.xml
+    rm -rf $INSTALL_FOLDER/tools/make-portable.sh
+}
+
+function install_portable_configuration_windows_files() {
+    logger_info "Install portable configuration file"
+    cp "$INSTALL_FOLDER/tools/gvsig-desktop-portable.exe" "$INSTALL_FOLDER/gvsig-desktop.exe"
+    cp "$INSTALL_FOLDER/tools/gvsig-desktop-portable.xml" "$INSTALL_FOLDER/gvsig-desktop.xml"
+    rm -rf "$INSTALL_FOLDER/busybox.exe"
+    cp "$INSTALL_FOLDER/tools/busybox.exe" "$INSTALL_FOLDER"
+}
+
+function remove_unneed_files_for_windows() {
+    logger_info "Removing nom-${PORTABLE_OSNAME} files"
+    rm -f $INSTALL_FOLDER/gvsig-desktop-devel.*
+    rm -f $INSTALL_FOLDER/gvsig-desktop.cmd
+    rm -f $INSTALL_FOLDER/gvSIG.sh
+    rm -rf $INSTALL_FOLDER/tools
+    rm -f $INSTALL_FOLDER/gvsig-package-installer.*
+}
+
+function zipfolder() {
+    echo zip -qyr9 "$1" "$2"
+    if type zip >/dev/null 2>/dev/null
+    then
+	zip -qyr9 "$1" "$2"
+    else
+      echo "
+	
+	WARNING: zip command not found. 
+	         $1 not compressed.
+	
+"
+    fi
+}
+
+function mkdist() {
+    cd $BASEFOLDER/standard
+
+    export PORTABLE_OS="$1"
+    export PORTABLE_OSNAME="$2"
+    export PORTABLE_PLATFORM="$3"
+    export PORTABLE_VERSION=$(expr *.zip : "gvSIG-desktop-\\([0-9.]*-[0-9]*\\)")
+    export PORTABLE_STATUS=$(expr *.zip : "gvSIG-desktop-[0-9.]*-[0-9]*-\\([a-zA-Z]*[0-9]*\)")
+    export PORTABLE_NAME="gvsig-desktop-$PORTABLE_VERSION-${PORTABLE_STATUS}-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+    
+    export INSTALL_FOLDER="$TARGET/$PORTABLE_NAME"
+
+    logger_info "Removing previous files"
+    rm -rf "$TARGET/gvsig-desktop"
+    rm -rf "$INSTALL_FOLDER"
+    rm -f  "$TARGET/${PORTABLE_NAME}.zip"
+    rm -rf "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+    
+    logger_info "Uncompressing ${PORTABLE_OSNAME} base files"
+    cd $TARGET
+    unzip -qq "$BASEFOLDER/standard/gvSIG-desktop-$PORTABLE_VERSION-$PORTABLE_STATUS-all-x86-online.zip"
+    mv gvsig-desktop $PORTABLE_NAME
+
+    logger_info "Uncompressing ${PORTABLE_OSNAME}-${PORTABLE_PLATFORM} package set"
+    mkdir -p "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+    cd "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+    unzip -qq "$BASEFOLDER/standard/gvSIG-desktop-${PORTABLE_VERSION}-${PORTABLE_STATUS}-${PORTABLE_OS}-${PORTABLE_PLATFORM}.gvspks"
+    
+    install_packages "$INSTALL_FOLDER" "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+
+    install_packages "$INSTALL_FOLDER" "$BASEFOLDER/packages/custom"
+
+    case $PORTABLE_OS in 
+    lin)
+        install_portable_configuration_linux_files
+        remove_unneed_files_for_linux
+        ;;
+    win)
+        install_portable_configuration_windows_files
+        remove_unneed_files_for_windows
+        ;;
+    esac
+
+    remove_excluded_packages
+    
+    if [ -f $PATCHSFOLDER/patchs.sh ] ; then
+        chmod a+x $PATCHSFOLDER/patchs.sh
+        logger_info "Appling patch to the instalation."
+        source $PATCHSFOLDER/patchs.sh
+    fi
+    
+    run_plugins_install_scripts $INSTALL_FOLDER
+    
+    logger_info "Compresing ${PORTABLE_OSNAME}-${PORTABLE_PLATFORM} portable (this take a moment)"
+    cd "$TARGET"
+    zipfolder "${PORTABLE_NAME}.zip" "${PORTABLE_NAME}"
+    
+    logger_info "Removing temporary package folder"
+    rm -rf $TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}
+    
+    logger_info "${PORTABLE_OSNAME}-${PORTABLE_PLATFORM} portable created."
+}
+
+
+function main() {
+    mkdist lin linux x86
+    mkdist lin linux x86_64    
+    mkdist win windows x86
+    echo "Creation ended"
+}
+
+mkdir -p "$TARGET"
+main | tee "$TARGET/${SCRIPT_NAME}.log"
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/check.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/check.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/check.sh	(revision 42196)
@@ -0,0 +1,21 @@
+PATH="$PWD/tools;$PATH"
+ROOT="$PWD"
+echo -e "\nCurrent directory: $ROOT"
+echo -e "\nDump file list and sizes\n"
+du -k "$ROOT"
+echo -e "\nCalculating md5sum of dlls and exes...\n"
+cd "$ROOT"
+for f in $(find . -name "*.exe")
+do
+	md5sum $f
+done
+for f in $(find . -name "*.dll")
+do
+	md5sum $f
+done
+echo -e "\nCheck DLL dependencies...\n"
+for f in $(find . -name "*.dll")
+do
+	cygcheck.exe "$f"
+	echo ""
+done
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/check.cmd
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/check.cmd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/check.cmd	(revision 42196)
@@ -0,0 +1,5 @@
+@echo off
+echo Generating report...
+cd ..
+tools/busybox sh tools/check.sh >report.txt 2>&1
+echo Report generated in report.txt
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LICENSE.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LICENSE.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LICENSE.txt	(revision 42196)
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LICENSE.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/andami-theme.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/andami-theme.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/andami-theme.xml	(revision 42196)
@@ -0,0 +1,45 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<AndamiProperties>
+    <ApplicationImages>
+        <SplashImages>
+            <Splash
+                path="splash.png"
+                timer="10000"
+                x="225" y="50"
+                fontsize="16" color="80,170,240"
+                version="${version}.${buildNumber} ${state}"/>
+        </SplashImages>	
+        <!--	
+        <BackgroundImage path="gvsig-proj-black-wallpaper.png"/>
+        <BackgroundColor color="0,0,0"/>
+        -->
+        <WallpaperType value="CENTERED"/>
+        <Icon path="gvsig-icon16x16.png"/>
+    </ApplicationImages>
+    <ApplicationName value="gvSIG ${version}.${buildNumber} ${state}"/>
+    <priority value="0"/>
+</AndamiProperties>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/andami-theme.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/gvsig-proj-black-wallpaper.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/gvsig-proj-black-wallpaper.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/splash.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/splash.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/gvsig-icon16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/gvsig-icon16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LEEME.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LEEME.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LEEME.txt	(revision 42196)
@@ -0,0 +1,22 @@
+gvSIG Desktop v2.2.0.
+
+ - (c) Asociaci�n gvSIG
+ - Software con licencia GNU/GPL (http://www.fsf.org/licensing/licenses/gpl.html)
+ - Contacto: info@gvsig.com
+
+
+Requisitos de la aplicaci�n:
+
+ Sistema
+  - M�nimos: Intel/AMD - 512 MB RAM.
+  - Sistemas operativos: plataformas Windows y Linux. Probado en Windows XP, Linux Ubuntu/Debian.
+
+ Software instalado (disponible en http://www.oracle.com)
+  - M�quina Virtual Java 1.6.0 � superior (En Windows 8 m�nimo Java 1.7.0).
+
+
+M�s informaci�n y soporte en:
+
+ - Web oficial del proyecto y Soporte Profesional: http://www.gvsig.com
+
+ - Listas de distribuci�n: http://www.gvsig.com/es/comunidad/listas-de-correo

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LEEME.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/lib/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/lib/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/install/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/install/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/assembly/gvsig-andami-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/assembly/gvsig-andami-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/assembly/gvsig-andami-package.xml	(revision 42196)
@@ -0,0 +1,65 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-andami-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>.</baseDirectory>
+  <!-- 
+  <includeBaseDirectory>true</includeBaseDirectory>
+   -->
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>src/main/resources/default-log4j/log4j.properties</source>
+      <outputDirectory>.</outputDirectory>
+    </file>  
+  </files>
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-application</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources/org/gvsig/andami</directory>
+      <outputDirectory>i18n/andami</outputDirectory>
+    </fileSet>
+  </fileSets>
+  
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>true</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/assembly/gvsig-andami-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/AndamiHelpPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/AndamiHelpPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/AndamiHelpPanel.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.help;
+
+import javax.help.HelpSet;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+
+public class AndamiHelpPanel extends HelpPanel implements IWindow {
+
+	private static final long serialVersionUID = 2683827167020046672L;
+
+	private WindowInfo info = null ;
+
+	public AndamiHelpPanel(HelpSet hs){
+		super(hs);
+	}
+
+	public AndamiHelpPanel(HelpSet hs, String id){
+		super(hs,id);
+	}
+
+	public void showWindow() {
+		MDIManager mdim = PluginServices.getMDIManager();
+		mdim.addWindow((IWindow) this);
+	}
+
+	public WindowInfo getWindowInfo() {
+		if( info == null ) {
+			info = new WindowInfo( WindowInfo.RESIZABLE |
+	                WindowInfo.MAXIMIZABLE | WindowInfo.MODELESSDIALOG);
+			info.setHeight(HEIGHT);
+			info.setWidth(WIDTH);
+			info.setTitle(getTitle());
+		}
+		return info;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.TOOL_PROFILE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/AndamiHelpPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/Help.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/Help.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/Help.java	(revision 42196)
@@ -0,0 +1,214 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.help;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+
+import javax.help.HelpSet;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class Help  {
+
+	private static Help help = null;
+
+	private HelpSet mainHS = null;
+	private ArrayList resources = new ArrayList();
+	private ArrayList helps = new ArrayList();
+
+	private HelpPanel window=null;
+
+	public static Help getHelp() {
+		if( help == null ) {
+			help = new Help();
+		}
+		return help;
+	}
+
+	private Logger log() {
+		return LoggerFactory.getLogger("org.gvsig");
+	}
+
+	public void show() {
+		log().info("show()");
+		show(null);
+	}
+
+	public void show(String id) {
+		try {
+			log().info("show(id) id="+id);
+			initHelp();
+			try {
+				window.showWindow(id);
+			}catch(NullPointerException e) {
+				window = new AndamiHelpPanel(mainHS, id);
+				window.showWindow();
+			}
+		} catch (Exception ex) {
+			log().error("Se ha producido un error mostrando la ventana de ayuda.",ex);
+		}
+	}
+
+	public void enableHelp(JComponent comp, String id)
+	{
+		try{
+			initHelp();
+			comp.registerKeyboardAction(new DisplayHelpFromFocus(id), KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+		}
+		catch(Exception except){
+			log().error("ID: "+id+" erronea");
+		}
+	}
+
+	public boolean addResource(String path) {
+		URL url = null;
+		try {
+			url =  (new File(path)).toURL();
+		} catch (MalformedURLException e) {
+			return false;
+		}
+		resources.add(url);
+		return true;
+	}
+
+
+	public boolean addHelp(String helpName) {
+		helps.add(helpName);
+		return true;
+	}
+
+	private void initHelp()
+	{
+		if ( mainHS != null ) {
+			return;
+		}
+
+		//
+		// Obtenemos un array de URLs de array list de URLs
+		//
+		URL urls[] = new URL[resources.size()];
+		int i=0;
+	    for( Iterator it=resources.iterator(); it.hasNext() ;) {
+	    	urls[i++] = (URL) it.next();
+	    }
+
+	    //
+	    // Creamos la lista de helpsets que han de componer
+	    // la ayuda
+	    //
+	    ArrayList helpSets = new ArrayList();
+
+	    for( Iterator it=helps.iterator(); it.hasNext() ;) {
+	    	String name = (String) it.next();
+	    	String lang = Locale.getDefault().getLanguage();
+	    	HelpSet hs = createHelpSet(urls, name + "/" + lang + "/help.hs");
+	    	if( hs == null ) {
+	    		lang = "en";
+	    		hs = createHelpSet(urls, name + "/" + lang + "/help.hs");
+	    	}
+	    	if( hs != null ) {
+	    		helpSets.add(hs);
+	    	}
+	    }
+
+	    //
+	    // Fijamos el primer helpset de la lista como master y
+	    // le a�adimos (merge) a este los demas helpsets
+	    //
+	    Iterator it=helpSets.iterator();
+	    if( ! it.hasNext() ) {
+	    	return;
+	    }
+	    mainHS = (HelpSet) it.next();
+	    while( it.hasNext() ) {
+			try {
+		    	mainHS.add( (HelpSet) it.next() );
+			} catch (Exception ex) {
+				log().error(ex.toString());
+			}
+	    }
+	}
+
+	private HelpSet createHelpSet(URL resources[], String hsName) {
+		HelpSet hs = null;
+
+		ClassLoader loader = ClassLoader.getSystemClassLoader();
+	    loader = new URLClassLoader(resources, loader);
+	    URL url = HelpSet.findHelpSet(loader, hsName);
+		if (url == null) {
+			log().error(
+					MessageFormat.format(
+							"No se ha encontrado el helpset ''{0}''.",
+							new Object[] { hsName }
+					)
+			);
+			return null;
+		}
+		log().info("createHelpSet:  url="+url);
+
+		try {
+			hs = new HelpSet(null, url);
+		} catch (Exception ex) {
+			log().error(
+				MessageFormat.format(
+					"No se ha podido cargar el helpset desde ''{0}''.",
+					new Object[] { url }
+				),
+			    ex
+			);
+			return null;
+		}
+		return hs;
+	}
+
+
+    public class DisplayHelpFromFocus implements ActionListener {
+
+	private String id = null;
+
+        public DisplayHelpFromFocus(String id) {
+        	log().info("DisplayHelpFromFocus(id) id="+id);
+            this.id=id;
+        }
+
+		public void actionPerformed(ActionEvent e) {
+			Help.getHelp().show(this.id);
+	    }
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/Help.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/HelpPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/HelpPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/HelpPanel.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.help;
+
+import java.awt.BorderLayout;
+import java.awt.Frame;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.help.BadIDException;
+import javax.help.HelpSet;
+import javax.help.JHelp;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HelpPanel extends JPanel  {
+
+	private static final long serialVersionUID = 4164482247505362337L;
+
+	public static int WIDTH = 645;
+	public static int HEIGHT = 495;
+	private String title = null;
+	private JHelp jh;
+
+	private Logger log() {
+		return LoggerFactory.getLogger("org.gvsig");
+	}
+
+	public HelpPanel(HelpSet hs){
+		log().info("HelpPanel(hs)");
+		init(hs,null);
+	}
+
+	public HelpPanel(HelpSet hs, String id){
+		log().info("HelpPanel(hs,id) id="+id);
+		init(hs,id);
+	}
+
+	private void init(HelpSet hs, String id){
+		jh = new JHelp(hs);
+		log().info("init() ID "+ id);
+		if (id != null) {
+			try {
+				log().info("init() setCurrentID "+ id);
+				jh.setCurrentID(id);
+			} catch (BadIDException ex) {
+				log().error(ex.toString());
+
+			} catch (NullPointerException ex) {
+				log().error(ex.toString());
+			}
+		}
+		String hsTitle = hs.getTitle();
+		if (hsTitle == null || hsTitle.equals("")) {
+			hsTitle = "gvSIG Help";
+		}
+		title = hsTitle;
+		setLayout(new BorderLayout());
+		add(jh,BorderLayout.CENTER);
+	}
+
+	public void showWindow() {
+
+		log().info("showWindow()");
+		Frame frame = new Frame();
+        frame.add(this);
+        frame.setSize(WIDTH, HEIGHT + 30);
+        frame.setTitle(getTitle());
+        frame.setResizable(true);
+		this.setVisible(true);
+		frame.show();
+	}
+
+	public void showWindow(String id) {
+		if (id != null) {
+			try {
+				log().info("showWindow(id) -> setCurrentID "+ id);
+				jh.setCurrentID(id);
+			} catch (BadIDException ex) {
+				log().error(ex.toString());
+			}
+		}
+		String hsTitle = jh.getHelpSetPresentation().getTitle();
+		if (hsTitle == null || hsTitle.equals("")) {
+			hsTitle = "gvSIG Help";
+		}
+		title = hsTitle;
+		showWindow();
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/HelpPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfo.java	(revision 42196)
@@ -0,0 +1,292 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.actioninfo;
+
+import java.awt.event.ActionListener;
+import java.util.Collection;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import javax.swing.KeyStroke;
+
+import org.gvsig.tools.lang.Cloneable;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.IExtension;
+
+/**
+ * Esta entidad representa a una accion dentro de gvSIG, que podra ser usada
+ * por menus, botones de la toolbar, menus contextuales, o desde cualquier
+ * otro elemento de gvSIG que precise invocar a una accion.
+ * 
+ * La accion esta compuesta por una definicion de cual es su etiqueta, su
+ * icono, teclas aceleradoras, su tip, o su posicion respecto a otras acciones, 
+ * junto con una extension (IExtension) que aporta el codigo de la accion.
+ * 
+ *  Una accion responde principalmente a cuatro operaciones:
+ *  
+ *  - isActive, que nos indica si la accion esta activa, es decir, si 
+ *    debera presentarse al usuario o no. Si una extension no esta activa,
+ *    los metodos isVisible y isEnabled retornaran siempre false, sin invocar
+ *    al codigo de la extension asociada a la accion.
+ *    
+ *  - isVisible, que nos indica si la accion debera presentarse o no en el
+ *    interface de usuario. De forma general podemos asumir que cuando se
+ *    invoque a este metodo se delegara en el metodo isVisible de la extension
+ *    asociada a la accion.
+ *    
+ *  - isEnabled, que nos indica si la accion debera estar habilitada o no en 
+ *    el interface de usuario. De forma general podemos asumir que cuando se
+ *    invoque a este metodo se delegara en el metodo isEnabled de la extension
+ *    asociada a la accion.
+ *    
+ *  - execute, que provocara que se ejecute el codigo asociado a la accion.  
+ *    De forma general podemos asumir que cuando se invoque a estos metodo se 
+ *    delegara en el metodo execute de la extension asociada a esta accion, pasandole
+ *    el "command" de la accion como parametro.
+ *    
+ * Ademas de la definicion de la accion, esta tambien puede disponer de una coleccion
+ * de acciones hacia las que puede ser redirigida. Esto es, en un momento dado
+ * nos puede interesar que cuando sea invocada la accion "A", en lugar de ejecutarse
+ * las operaciones de esta, se ejecuten las operaciones de otra accion "B". Esto nos
+ * permite atrapar la ejecucion de una accion independientemente de desde donde se este 
+ * invocando. Cuando una accion tenga asignadas otras acciones a las que redirigir
+ * su ejecucion, solo se redigira a una de ellas, la primera en la coleccion de acciones a
+ * redirigir que responda "true" a su metodo isEnabled, y en caso de que no responda true
+ * ninguna se ejecutara el codigo de la accion original. El orden de la coleccion de
+ * acciones a las que redirigir de una accion sera el orden inverso en el que se han
+ * ido registrandose las redirecciones. Asi primero se intentara con la ultima redireccion
+ * asignada, luego con la anterior, y asi sucesivamente se recorreran todas las redireccion
+ * hasta que una responda "true" a su isEnabled, ejecutandose entonces el codigo de esta.
+ * 
+ * 
+ * @author jjdelcerro
+ *
+ */
+public interface ActionInfo extends Action, ActionListener, Cloneable {
+	
+	public static final String ACCELERATOR = "ACCELERATOR";
+	public static final String ACTIVE = "ACTIVE"; 
+	public static final String VISIBLE = "VISIBLE";
+	public static final String PLUGIN_NAME = "PLUGIN_NAME";
+	public static final String PLUGIN = "PLUGIN";
+	public static final String EXTENSION_NAME = "EXTENSION_NAME";
+	public static final String EXTENSION = "EXTENSION";
+	public static final String REDIRECTIONS = "REDIRECTIONS";
+	public static final String REDIRECTION = "REDIRECTION";
+	public static final String POSITION = "POSITION";
+	public static final String TOOLTIP = "TOOLTIP";
+	public static final String ICON_NAME = "ICON_NAME";
+
+	/**
+	 * returns the plugin of the extension asociated to the action.
+	 * 
+	 * @return pluginServices asiciated to the action.
+	 */
+	public PluginServices getPlugin();
+	
+	/**
+	 * returns the extension asociated to the action. The action 
+	 * delegates the methods isEnabled, isVisible and execute in this
+	 * extension when these are invoked.
+	 * 
+	 * @return IExtension asociated to the action
+	 */
+	public IExtension getExtension();
+	
+	/**
+	 * Return the plugin name of the plugin asociated to the action.
+	 * This is a utility method checkins null values. is equivalent to:
+	 * 
+	 *   action.getPlugin().getPluginName()
+	 * 
+	 * 
+	 * @return plugin name
+	 * @see #getPlugin()
+	 */
+	public String getPluginName();
+	
+	/**
+	 * Returns the extension name of the extension asociated to this action.
+	 * This a utility method that check null values. Is equivalent to:
+	 * 
+	 *   action.getExtension().getClass().getName()
+	 *   
+	 * @return extension name.
+	 * @see #getExtension()
+	 */
+	public String getExtensionName();
+	
+	/**
+	 * Returns the name of the action. This name is usaed to retrieve the 
+	 * action thwros the manager.
+	 * 
+	 * @return action name
+	 */
+	public String getName();
+	
+	/**
+	 * Return a label asociated to the action. This label can be used
+	 * in buttons, o menus.
+	 * 
+	 * @return label of action
+	 */
+	public String getLabel();
+	
+	/**
+	 * Returns the command used for invoking the execute method of
+	 * the extension asociated to this action.
+	 * 
+	 * @return command of action
+	 */
+	public String getCommand();
+	
+	/**
+	 * Return an icon asociated to the action. This icon can be used
+	 * in buttons, o menus.
+	 * 
+	 * @return ImageIcon asociated tho the action
+	 */
+	public ImageIcon getIcon();
+	
+	/**
+	 * Returns the name of icon asociated to the action. This name is
+	 * used to retrive the icon from the current icon theme of the application.
+	 *   
+	 * @return icon name.
+	 */
+	public String getIconName();
+	
+	/**
+	 * returns a representation human readable of the accelerator to be used 
+	 * associated to the action.
+	 * 
+	 * @return String representing the accelerator
+	 */
+	public String getAccelerator();
+	
+	/**
+	 * returns the KeyStroke which represents the accelerator of this
+	 * action.
+	 * 
+	 * @return keystroke asociated to this action
+	 * @see #getAccelerator()
+	 */
+	public KeyStroke getKeyStroke();
+	
+	/**
+	 * Return a string that represents a tip asociated whit the action,
+	 * usually used as tooltip in buttons or menus.
+	 * 
+	 * @return the tip of the action
+	 */
+	public String getTooltip();
+	
+	/**
+	 * Return the position absolute of the action referred to all actions.
+	 * 
+	 * @return the position of the action
+	 */
+	public long getPosition();
+	
+	/**
+	 * retrurn if the action can be visible in the user interface or not.
+	 * This method call the isVisible of the extension asociated to the action,
+	 * unless the action is inactive.
+	 * If has a ExclusiveUIExtension set, then this is invoqued instead of the
+	 * the isVisible of the extension.
+	 *  
+	 * @return if the action if visible for the user.
+	 */
+	public boolean isVisible();
+	
+	/**
+	 * retrurn if the action is enables.
+	 * This method call the isEnabled of the extension asociated to the action,
+	 * unless the action is inactive.
+	 * This method is used to determine whether it is possible to redirect 
+	 * to this action or not.
+	 * If has a ExclusiveUIExtension set, then this is invoqued instead of the
+	 * the isEnabled of the extension.
+	 *  
+	 * @return if the action if visible for the user.
+	 */
+	public boolean isEnabled();
+	
+	/**
+	 * Execute the code asociated to the action.
+	 * This method call the execute method of the asociated exetnsion using the
+	 * command of action as argument.
+	 * If the action is redirected try to call to the redirected actions.
+	 *  
+	 */
+	public void execute();
+
+	/**
+	 * Execute the code asociated to the action.
+	 * Pass the args to the execute of the asociated extension.
+	 *
+	 *  @see #execute()
+	 */
+	public void execute(Object[] args);
+	public void execute(Map args);
+
+	/**
+	 * Execute the code asociated to the action.
+	 * Pass the args to the execute of the asociated extension.
+	 *
+	 *  @see #execute()
+	 */
+	public void execute(Object arg);
+	
+	/**
+	 * Return true is the action is active. When an action is active the methods
+	 * isEnable and isVisible call the methods of the extension asociated to this.
+	 * When is inactive always return false.
+	 * 
+	 * @return if the action is active
+	 */
+	public boolean isActive();
+	/**
+	 * Set the active state of an ActionInfo.
+	 * When the active state is set to false, isEnabled, and isVisible
+	 * returns false.
+	 * 
+	 * @param active
+	 */
+	public void setActive(boolean active);
+	
+	/**
+	 * 
+	 * An action can redirect the execution of the execute, isVisible and isEnabled methods
+	 * to other action. Using this method is can be query and set this redirections.
+	 * The redirect will be established only if the method isEnabled of target action
+	 * returns true. Otherwise execute methods of initial action.
+	 * 
+	 * @return the redirections established for this action
+	 */
+	public Collection<ActionInfo> getRedirections();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoStatusCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoStatusCache.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoStatusCache.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.actioninfo;
+
+public interface ActionInfoStatusCache {
+	public void clear();
+	
+	public boolean isEnabled(ActionInfo action);
+
+	public boolean isVisible(ActionInfo action);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoStatusCache.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfo.java	(revision 42196)
@@ -0,0 +1,480 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.actioninfo.impl;
+
+import java.awt.event.ActionEvent;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import javax.swing.KeyStroke;
+
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.ExtensionHelper;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.ui.mdiFrame.KeyMapping;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.identitymanagement.SimpleIdentity;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultActionInfo extends AbstractAction implements ActionInfo {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1620939552263334110L;
+
+    private static Logger logger = LoggerFactory
+            .getLogger(DefaultActionInfo.class);
+
+    private Class<? extends IExtension> extensionClass;
+    private IExtension extension;
+    private String name;
+    private String text;
+    private String command;
+    private String iconName;
+    private String accelerator;
+    private long position;
+    private String tip;
+    private List<ActionInfo> redirections;
+    private boolean active;
+
+    private Boolean previousEnabled = null;
+    private SimpleIdentityManager identityManager;
+
+    DefaultActionInfo(Class<? extends IExtension> extension, String name,
+            String text, String command, String icon, String accelerator,
+            long position, String tip) {
+        this.extensionClass = extension;
+        this.name = name;
+        this.text = emptyToNull(text);
+        this.command = emptyToNull(command);
+        this.iconName = emptyToNull(icon);
+        this.accelerator = emptyToNull(accelerator);
+        this.position = position;
+        this.tip = emptyToNull(tip);
+        this.redirections = null;
+        this.active = true;
+
+        fixIcon();
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        DefaultActionInfo other = (DefaultActionInfo) super.clone();
+        if (other.redirections != null) {
+            other.redirections = new ArrayList<ActionInfo>();
+            other.redirections.addAll(this.redirections);
+        }
+        return other;
+    }
+
+    private void fixIcon() {
+        if (iconName != null && (iconName.contains("/") || iconName.contains("."))) {
+            // it's a file path
+            String name = FilenameUtils.getBaseName(iconName);
+            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
+            URL resource = null;
+            try {
+                resource = this.extensionClass.getClassLoader().getResource(iconName);
+            } catch (Exception e) {
+                return;
+            }
+            if (resource == null) {
+                return;
+            }
+            iconTheme.registerDefault(this.getPluginName(), "broken", name, null, resource);
+            logger.info("Plugin " + this.getPluginName() + " contains icons out of icon theme (" + iconName + ")");
+            iconName = name;
+        }
+    }
+
+    private String emptyToNull(String s) {
+        if (s == null) {
+            return null;
+        }
+        return s.trim().length() < 0 ? null : s;
+    }
+
+    public Collection<ActionInfo> getRedirections() {
+        if (this.redirections == null) {
+            this.redirections = new ArrayList<ActionInfo>();
+        }
+        return this.redirections;
+    }
+
+    public void merge(ActionInfo other) {
+        if (this.extensionClass == null) {
+            this.extensionClass = other.getExtension().getClass();
+            this.extension = other.getExtension();
+        }
+        if (this.text == null) {
+            this.text = other.getLabel();
+        }
+        if (this.command == null) {
+            this.command = other.getCommand();
+        }
+        if (this.iconName == null) {
+            this.iconName = other.getIconName();
+        }
+        if (this.accelerator == null) {
+            this.accelerator = other.getAccelerator();
+        }
+        if (this.position < 1) {
+            this.position = other.getPosition();
+        }
+        if (this.tip == null) {
+            this.tip = other.getTooltip();
+        }
+
+    }
+
+    public PluginServices getPlugin() {
+        PluginServices plugin = PluginsLocator.getManager().getPlugin(
+                this.extensionClass);
+        return plugin;
+    }
+
+    public String getPluginName() {
+        if (this.getPlugin() == null) {
+            return null;
+        }
+        return this.getPlugin().getPluginName();
+    }
+
+    public IExtension getExtension() {
+        if (this.extension == null) {
+            this.extension = PluginsLocator.getManager().getExtension(
+                    this.extensionClass);
+        }
+        return this.extension;
+    }
+
+    public String getExtensionName() {
+        if (this.extensionClass == null) {
+            return null;
+        }
+        return this.extensionClass.getName();
+    }
+
+    private SimpleIdentityManager getIdentityManager() {
+        if( this.identityManager == null ) {
+            this.identityManager = ToolsLocator.getIdentityManager();
+        }
+        return this.identityManager;
+    }
+
+    private SimpleIdentity getCurrentUser() {
+        return this.getIdentityManager().getCurrentIdentity();
+    }
+
+    public boolean isVisible() {
+        if( !this.getCurrentUser().isAuthorized(this.getName()) ) {
+            return false;
+        }
+        if (!this.isActive()) {
+            logger.info("isVisible(), action {} not active", this.getName());
+            return false;
+        }
+        ActionInfo redirection = this.getRedirection();
+        if (redirection != null) {
+            return redirection.isVisible();
+        }
+
+        ExclusiveUIExtension eui = PluginsLocator.getManager()
+                .getExclusiveUIExtension();
+        if (eui == null) {
+            return ExtensionHelper.isVisible(this.getExtension(), this.command);
+        }
+        return eui.isVisible(this.getExtension());
+    }
+
+    public boolean isEnabled() {
+        boolean value;
+        if( !this.getCurrentUser().isAuthorized(this.getName()) ) {
+            return false;
+        }
+        if (!this.isActive()) {
+            logger.info("isEnabled(), action {} not active", this.getName());
+            value = false;
+        } else {
+            ActionInfo redirection = this.getRedirection();
+            if (redirection != null) {
+                value = true;
+            } else {
+                ExclusiveUIExtension eui = PluginsLocator.getManager()
+                        .getExclusiveUIExtension();
+                if (eui == null) {
+                    value = ExtensionHelper.isEnabled(this.getExtension(), this.command);
+                } else {
+                    value = eui.isEnabled(this.getExtension());
+                }
+            }
+        }
+        if (this.previousEnabled == null || this.previousEnabled.booleanValue() != value) {
+            this.setEnabled(value); // force call listeners
+        }
+        return value;
+    }
+
+    private ActionInfo getRedirection() {
+        if (this.redirections == null) {
+            return null;
+        }
+        for (int n = this.redirections.size() - 1; n >= 0; n--) {
+            ActionInfo redirection = this.redirections.get(n);
+            if (redirection.isEnabled()) {
+                return redirection;
+            }
+        }
+        return null;
+    }
+
+    public void execute() {
+//		if (!this.isActive()) {
+//			logger.info("execute(), action {} not active",  this.getName());
+//			return;
+//		}
+        if( !this.getCurrentUser().isAuthorized(this.getName()) ) {
+            logger.warn("Current user '"+this.getCurrentUser().getID()+"' not authorized to execute this action '"+this.getName()+"'.");
+            return ;
+        }
+        ActionInfo redirection = this.getRedirection();
+        if (redirection != null) {
+            logger.info("{}.execute('{}') redirected", this.getPluginName()
+                    + ":" + this.getExtensionName(), this.getCommand());
+            redirection.execute();
+            return;
+        }
+        logger.info("{}.execute('{}')",
+                this.getPluginName() + ":" + this.getExtensionName(),
+                this.getCommand());
+        this.getExtension().execute(this.command);
+    }
+
+    public void execute(Object[] args) {
+//		if (!this.isActive()) {
+//			logger.info("execute(args), action {} not active", this.getName());
+//			return;
+//		}
+        if( !this.getCurrentUser().isAuthorized(this.getName()) ) {
+            logger.warn("Current user '"+this.getCurrentUser().getID()+"' not authorized to execute this action '"+this.getName()+"'.");
+            return ;
+        }
+        ActionInfo redirection = this.getRedirection();
+        if (redirection != null) {
+            logger.info("{}.execute('{}', args) redirected", this.getPluginName()
+                    + ":" + this.getExtensionName(), this.getCommand());
+            redirection.execute(args);
+            return;
+        }
+        logger.info("{}.execute('{}', Object[] args)",
+                this.getPluginName() + ":" + this.getExtensionName(),
+                this.getCommand());
+        ExtensionHelper.execute(this.getExtension(), this.command, args);
+    }
+
+    public void execute(Object arg) {
+        if (arg instanceof Object[]) {
+            execute((Object[]) arg);
+            return;
+        }
+        execute(new Object[]{arg});
+    }
+
+    public void execute(Map args) {
+        if( !this.getCurrentUser().isAuthorized(this.getName()) ) {
+            logger.warn("Current user '"+this.getCurrentUser().getID()+"' not authorized to execute this action '"+this.getName()+"'.");
+            return ;
+        }
+        logger.info("{}.execute('{}', Map args)",
+                this.getPluginName() + ":" + this.getExtensionName(),
+                this.getCommand());
+        ExtensionHelper.execute(this.getExtension(), this.command, new Object[]{args});
+    }
+
+    public void actionPerformed(ActionEvent arg0) {
+        this.execute();
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public String getLabel() {
+        return this.text;
+    }
+
+    public String getCommand() {
+        return this.command;
+    }
+
+    public String getIconName() {
+        return this.iconName;
+    }
+
+    public ImageIcon getIcon() {
+        IconTheme iconTheme = PluginServices.getIconTheme();
+        return iconTheme.get(this.iconName);
+    }
+
+    public String getAccelerator() {
+        return this.accelerator;
+    }
+
+    public KeyStroke getKeyStroke() {
+        if (emptyToNull(this.accelerator) == null) {
+            return null;
+        }
+        return KeyMapping.getKeyStroke(this.accelerator);
+    }
+
+    public long getPosition() {
+        return this.position;
+    }
+
+    public String getTooltip() {
+        return this.tip;
+    }
+
+    public Object getValue(String key) {
+        if (Action.ACTION_COMMAND_KEY.equalsIgnoreCase(key)) {
+            return this.command;
+        }
+        if (Action.LONG_DESCRIPTION.equalsIgnoreCase(key)) {
+            return this.tip;
+        }
+        if (Action.NAME.equalsIgnoreCase(key)) {
+            return this.name;
+        }
+        if (Action.SMALL_ICON.equalsIgnoreCase(key)) {
+            return this.getIcon();
+        }
+        if (Action.ACTION_COMMAND_KEY.equalsIgnoreCase(key)) {
+            return this.command;
+        }
+        if (Action.ACCELERATOR_KEY.equalsIgnoreCase(key)) {
+            return this.getKeyStroke();
+        }
+        if (Action.LARGE_ICON_KEY.equalsIgnoreCase(key)) {
+            return this.getIcon();
+        }
+        if (ActionInfo.ICON_NAME.equalsIgnoreCase(key)) {
+            return this.iconName;
+        }
+        if (Action.SHORT_DESCRIPTION.equalsIgnoreCase(key)) {
+            return this.getLabel();
+        }
+        if (ActionInfo.TOOLTIP.equalsIgnoreCase(key)) {
+            return this.getTooltip();
+        }
+        if (ActionInfo.POSITION.equalsIgnoreCase(key)) {
+            return this.position;
+        }
+        if (ActionInfo.REDIRECTIONS.equalsIgnoreCase(key)) {
+            return this.redirections;
+        }
+        if (ActionInfo.REDIRECTION.equalsIgnoreCase(key)) {
+            return this.getRedirection();
+        }
+        if (ActionInfo.EXTENSION.equalsIgnoreCase(key)) {
+            return this.getExtension();
+        }
+        if (ActionInfo.EXTENSION_NAME.equalsIgnoreCase(key)) {
+            return this.getExtensionName();
+        }
+        if (ActionInfo.PLUGIN.equalsIgnoreCase(key)) {
+            return this.getPlugin();
+        }
+        if (ActionInfo.PLUGIN_NAME.equalsIgnoreCase(key)) {
+            return this.getPluginName();
+        }
+        if (ActionInfo.VISIBLE.equalsIgnoreCase(key)) {
+            return this.isVisible();
+        }
+        if (ActionInfo.ACTIVE.equalsIgnoreCase(key)) {
+            return this.active;
+        }
+        if (ActionInfo.ACCELERATOR.equalsIgnoreCase(key)) {
+            return this.accelerator;
+        }
+        return super.getValue(key);
+    }
+
+    public void putValue(String key, Object newValue) {
+        super.putValue(key, newValue);
+        // This class is immutable, only "active" can be changed
+        if (ActionInfo.ACTIVE.equalsIgnoreCase(key)) {
+            this.setActive(this.active);
+        }
+    }
+
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append("ActionInfo {");
+        buffer.append("name='").append(this.name).append("', ");
+        buffer.append("active='").append(this.active).append("', ");
+        buffer.append("label='").append(this.text).append("', ");
+        buffer.append("tooltip='").append(this.tip).append("', ");
+        buffer.append("actionCommand='").append(this.command).append("', ");
+        buffer.append("position='").append(this.position).append("', ");
+        buffer.append("icon='").append(this.iconName).append("', ");
+        buffer.append("extension='").append(this.getExtensionName())
+                .append("', ");
+        if (this.redirections != null) {
+            buffer.append("redirection=(");
+            for (ActionInfo redirection : this.redirections) {
+                buffer.append(redirection.getName());
+                buffer.append(" ");
+            }
+            buffer.append("), ");
+        } else {
+            buffer.append("redirections=( ), ");
+        }
+        buffer.append("accelerator='").append(this.accelerator);
+        buffer.append("' }");
+        return buffer.toString();
+    }
+
+    public boolean isActive() {
+        return this.active;
+    }
+
+    public void setActive(boolean active) {
+        logger.info("setActive({})", active);
+        this.active = active;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoStatusCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoStatusCache.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoStatusCache.java	(revision 42196)
@@ -0,0 +1,131 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.actioninfo.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoStatusCache;
+import org.gvsig.andami.plugins.ExtensionHelper;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.identitymanagement.SimpleIdentity;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+
+public class DefaultActionInfoStatusCache implements ActionInfoStatusCache {
+
+        private SimpleIdentityManager identityManager;
+
+        private class Status {
+		Boolean isEnabled = null;
+		Boolean isVisible = null;
+	}
+	
+	private Map<IExtension,Status> extensions = null;
+	private Map<ActionInfo,Status> actions = null;
+	
+	public DefaultActionInfoStatusCache() {
+		this.clear();
+	}
+
+	public void clear() {
+		extensions = new HashMap<IExtension, Status>();
+		actions = new HashMap<ActionInfo, Status>();
+	}
+	
+        private SimpleIdentityManager getIdentityManager() {
+            if( this.identityManager == null ) {
+                this.identityManager = ToolsLocator.getIdentityManager();
+            }
+            return this.identityManager;
+        }
+
+        private SimpleIdentity getCurrentUser() {
+            return this.getIdentityManager().getCurrentIdentity();
+        }
+
+	public boolean isEnabled(ActionInfo action) {
+                if( !this.getCurrentUser().isAuthorized(action.getName()) ) {
+                    return false;
+                }
+                Status status; 
+		IExtension extension = action.getExtension();
+		if( extension == null ) {
+			return false;
+		}
+		if( ExtensionHelper.canQueryByAction(extension) ) {
+			status = actions.get(action);
+			if( status == null ) {
+				status = new Status();
+				actions.put(action, status);
+			}
+			if( status.isEnabled == null ) {
+				status.isEnabled = new Boolean( action.isEnabled() );
+			}
+		} else {
+			status = extensions.get(extension);
+			if( status == null ) {
+				status = new Status();
+				extensions.put(extension, status);
+			}
+			if( status.isEnabled == null ) {
+				status.isEnabled = new Boolean( extension.isEnabled() );
+			}
+		}
+		return status.isEnabled.booleanValue();
+	}
+
+	public boolean isVisible(ActionInfo action) {
+                if( !this.getCurrentUser().isAuthorized(action.getName()) ) {
+                    return false;
+                }
+                Status status; 
+		IExtension extension = action.getExtension();
+		if( extension == null ) {
+			return false;
+		}
+		if( ExtensionHelper.canQueryByAction(extension) ) {
+			status = actions.get(action);
+			if( status == null ) {
+				status = new Status();
+				actions.put(action, status);
+			}
+			if( status.isVisible == null ) {
+				status.isVisible = new Boolean( action.isVisible() );
+			}
+		} else {
+			status = extensions.get(extension);
+			if( status == null ) {
+				status = new Status();
+				extensions.put(extension, status);
+			}
+			if( status.isVisible == null ) {
+				status.isVisible = new Boolean( extension.isVisible() );
+			}
+		}
+		return status.isVisible.booleanValue();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoStatusCache.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoManager.java	(revision 42196)
@@ -0,0 +1,154 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.actioninfo.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.actioninfo.ActionInfoStatusCache;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultActionInfoManager implements  ActionInfoManager {
+	private static Logger logger = LoggerFactory.getLogger(DefaultActionInfoManager.class);
+
+	private Map<String, ActionInfo>actions = new HashMap<String, ActionInfo>();
+	private int anonymousCounter = 1;
+
+    public ActionInfo createAction(Class<? extends IExtension> extension, String name, String text, String command, String icon, String accelerator, long position, String tip) {
+    	name = emptyToNull(name);
+    	String actionName = name;
+    	if( actionName==null ){
+    		actionName = String.format("anonymous__%04d",this.anonymousCounter++);
+    	}
+    	ActionInfo action = new DefaultActionInfo(extension, actionName, text, command, icon, accelerator, position, tip);
+    	ActionInfo previous = this.getAction(action.getName());
+    	if( previous != null ) {
+    		((DefaultActionInfo)action).merge(previous);
+    	}
+    	if( name == null  ){
+    		logger.info("createAction: name of action is null/empty, rename to '"+actionName+"' ("+action.toString()+").");
+    	}
+    	if( action.getLabel()==null && action.getIconName()==null ) {
+    		logger.info("createAction(name='"+name+"'): text and icon of action is null");
+    	}
+    	return action;
+    }
+
+	private String emptyToNull(String s) {
+		if( s==null ) {
+			return null;
+		}
+		return "".equals(s.trim())? null:s;
+	}
+
+    public ActionInfo registerAction(ActionInfo action) {
+    	if( action == null ) {
+    		// Avisamos en el log de que se intenta registrar una accion null, intentado
+    		// sacar el stack para que se pueda ver quien lo esta haciendo, pero no
+    		// provocamos un error, solo retornamos null.
+			try {
+				throw new IllegalArgumentException();
+			} catch (IllegalArgumentException e) {
+				logger.info("registerAction(null).", e);
+			}
+			return null;
+    	}
+    	ActionInfo previous = this.getAction(action.getName());
+    	if( previous != null ) {
+    		((DefaultActionInfo)previous).merge(action);
+        	return previous;
+    	} else {
+    		this.actions.put(action.getName(), action);
+                SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+                identityManager.registerAction(action.getName());
+        	return action;
+    	}
+    }
+
+    public ActionInfo getAction(String name) {
+    	if( name == null || "".equals(name) ) {
+			try {
+				throw new IllegalArgumentException();
+			} catch (IllegalArgumentException e) {
+				logger.info("getAction(null/empty) return null.", e);
+				return null;
+			}
+    	}
+    	return this.actions.get(name);
+    }
+
+    public Iterator<ActionInfo> getActions() {
+    	List<ActionInfo> actions = new ArrayList<ActionInfo>();
+    	actions.addAll(this.actions.values());
+    	Collections.sort(actions, new Comparator<ActionInfo>() {
+    		public int compare(ActionInfo arg0, ActionInfo arg1) {
+    			String s0 = String.format("%s/%012d", arg0.getPluginName(), arg0.getPosition());
+    			String s1 = String.format("%s/%012d", arg1.getPluginName(), arg1.getPosition());
+    			return s0.compareTo(s1);
+    		};
+		});
+    	return actions.iterator();
+    }
+
+    public ActionInfoStatusCache createActionStatusCache() {
+    	return new DefaultActionInfoStatusCache();
+    }
+
+	public void redirect(String sourceName, String targetName) {
+		ActionInfo source = this.getAction(sourceName);
+		if( source == null ) {
+			throw new IllegalArgumentException("Can't locate source action '"+sourceName+"'.");
+		}
+		ActionInfo target = this.getAction(targetName);
+		if( target == null ) {
+			throw new IllegalArgumentException("Can't locate target action '"+targetName+"'.");
+		}
+		source.getRedirections().add(target);
+	}
+
+    public void execute(String actionName, Object[] parameters) {
+            ActionInfo action = this.actions.get(actionName);
+            if( action == null ) {
+                return;
+            }
+            action.execute(parameters);
+    }
+
+    public ActionInfo getTranslated(ActionInfo actionInfo) {
+        return new TranslatedActionInfo(actionInfo);
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/TranslatedActionInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/TranslatedActionInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/TranslatedActionInfo.java	(revision 42196)
@@ -0,0 +1,156 @@
+package org.gvsig.andami.actioninfo.impl;
+
+import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Collection;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import javax.swing.KeyStroke;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.tools.ToolsLocator;
+
+
+public class TranslatedActionInfo implements ActionInfo {
+
+    private ActionInfo actionInfo;
+
+    TranslatedActionInfo(ActionInfo actionInfo) {
+        this.actionInfo = actionInfo;
+    }
+
+    public Object getValue(String key) {
+        if (Action.SHORT_DESCRIPTION.equalsIgnoreCase(key)) {
+            return this.getLabel();
+        }
+        if (ActionInfo.TOOLTIP.equalsIgnoreCase(key)) {
+            return this.getTooltip();
+        }
+
+        return this.actionInfo.getValue(key);
+    }
+
+    public void putValue(String key, Object value) {
+        this.actionInfo.putValue(key, value);
+
+    }
+
+    public void setEnabled(boolean b) {
+        this.actionInfo.setEnabled(b);
+
+    }
+
+    public void addPropertyChangeListener(PropertyChangeListener listener) {
+        this.actionInfo.addPropertyChangeListener(listener);
+    }
+
+    public void removePropertyChangeListener(PropertyChangeListener listener) {
+        this.actionInfo.removePropertyChangeListener(listener);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        this.actionInfo.actionPerformed(e);
+    }
+
+    public PluginServices getPlugin() {
+        return this.actionInfo.getPlugin();
+    }
+
+    public IExtension getExtension() {
+        return this.actionInfo.getExtension();
+    }
+
+    public String getPluginName() {
+        return this.actionInfo.getPluginName();
+    }
+
+    public String getExtensionName() {
+        return this.actionInfo.getExtensionName();
+    }
+
+    public String getName() {
+        return this.actionInfo.getName();
+    }
+
+    public String getLabel() {
+        return ToolsLocator.getI18nManager().getTranslation(this.actionInfo.getLabel());
+    }
+
+    public String getCommand() {
+        return this.actionInfo.getCommand();
+    }
+
+    public ImageIcon getIcon() {
+        return this.actionInfo.getIcon();
+    }
+
+    public String getIconName() {
+        return this.actionInfo.getIconName();
+    }
+
+    public String getAccelerator() {
+        return this.actionInfo.getAccelerator();
+    }
+
+    public KeyStroke getKeyStroke() {
+        return this.actionInfo.getKeyStroke();
+    }
+
+    public String getTooltip() {
+        return ToolsLocator.getI18nManager().getTranslation(this.actionInfo.getTooltip());
+    }
+
+    public long getPosition() {
+        return this.actionInfo.getPosition();
+    }
+
+    public boolean isVisible() {
+        return this.actionInfo.isVisible();
+    }
+
+    public boolean isEnabled() {
+        return this.actionInfo.isEnabled();
+    }
+
+    public void execute() {
+        this.actionInfo.execute();
+
+    }
+
+    public void execute(Object[] args) {
+        this.actionInfo.execute(args);
+
+    }
+
+    public void execute(Map args) {
+        this.actionInfo.execute(args);
+    }
+
+    public void execute(Object arg) {
+        this.actionInfo.execute(arg);
+
+    }
+
+    public boolean isActive() {
+        return this.actionInfo.isActive();
+    }
+
+    public void setActive(boolean active) {
+        this.actionInfo.setActive(active);
+
+    }
+
+    public Collection<ActionInfo> getRedirections() {
+        return this.actionInfo.getRedirections();
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        TranslatedActionInfo other = (TranslatedActionInfo) super.clone();
+        other.actionInfo = (ActionInfo) this.actionInfo.clone();
+        return other;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoManager.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.actioninfo;
+
+import java.util.Iterator;
+
+import org.gvsig.andami.plugins.IExtension;
+
+public interface ActionInfoManager {
+
+	/**
+	 * Create a new action and return.
+	 *
+	 * @param extension, class that execute the action, extends IExtension
+	 * @param name, name of the action
+	 * @param text, text to use to represent the action.
+	 * @param command, command used to execute the action
+	 * @param icon, icon used to represent the action
+	 * @param accelerator, the key which invokes the action
+	 * @param position, position of the action when it is represented in the user interface
+	 * @param tip, tooltip to associate to the action
+	 * @return
+	 */
+    public ActionInfo createAction(Class<? extends IExtension> extension, String name, String text, String command, String icon, String accelerator, long position, String tip);
+
+    /**
+     * Register the action in the actions of the system, and return the action
+     * that is registered.
+     *
+     * If an action with the same name is in the system then actions are merged
+     * and the merged action is returned and remain in the system.
+     *
+     * @param action
+     */
+    public ActionInfo registerAction(ActionInfo action);
+
+    /**
+     * Retrieve an action by name
+     *
+     * @param name
+     * @return the action associated to this name
+     */
+    public ActionInfo getAction(String name);
+
+    /**
+     * Return an iterator over all registered actions.
+     *
+     * @return iterator over al acctions
+     */
+    public Iterator<ActionInfo> getActions();
+
+    public ActionInfoStatusCache createActionStatusCache();
+
+    /**
+     * Redirect the action source to the target.
+     *
+     * @param sourceName of action
+     * @param targetName of action
+     */
+    public void redirect(String sourceName, String targetName);
+
+    public void execute(String actionName, Object[] parameters);
+
+    public ActionInfo getTranslated(ActionInfo actionInfo);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ProjectionContainerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ProjectionContainerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ProjectionContainerManager.java	(revision 42196)
@@ -0,0 +1,47 @@
+package org.gvsig.andami;
+
+
+/**
+ * Don't use this class, it will be removed in nexts versions.
+ * 
+ * This is a patch to resolve access to projection of view in jcrs
+ * plugin and will be removed in nexts versions.
+ *  
+ * @deprecated 
+ */
+public class ProjectionContainerManager {
+	/**
+	 * @deprecated 
+	 */
+	public interface ProjectionContainer {
+		Object getCurrentProjection();
+	}
+	private static ProjectionContainer currentProjectionContainer = null;
+	
+	/**
+	 * @deprecated 
+	 */
+	public static void set(ProjectionContainer container) {
+		currentProjectionContainer = container;
+	}
+
+	/**
+	 * @deprecated 
+	 */
+	public static void unset(ProjectionContainer container) {
+		if( container == currentProjectionContainer ) {
+			currentProjectionContainer = null;
+		}
+	}
+		
+	/**
+	 * @deprecated 
+	 */
+	public static Object getCurrentProjection() {
+                if( currentProjectionContainer==null ) {
+                    return null;
+                } 
+		return currentProjectionContainer.getCurrentProjection();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ProjectionContainerManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Utilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Utilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Utilities.java	(revision 42196)
@@ -0,0 +1,378 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ConnectException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import javax.swing.ImageIcon;
+import javax.swing.RootPaneContainer;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.splash.MultiSplashWindow;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+
+/**
+ * This class offers several general purpose method, to perform common
+ * tasks in an easy way.
+ *
+ * @version $Revision: 29593 $
+ */
+public class Utilities {
+	/**
+     * <b>key</b>: URL, <b>value</b>: path to the downloaded file.
+     */
+    private static Hashtable downloadedFiles;
+    /** DOCUMENT ME! */
+    private static Logger logger = LoggerFactory.getLogger(Utilities.class.getName());
+	public static final String TEMPDIRECTORYPATH = System.getProperty("java.io.tmpdir")+"/tmp-andami";
+
+
+    /**
+     * Creates an icon from an image path.
+     *
+     * @param path Path to the image to be loaded
+     *
+     * @return ImageIcon if the image is found, null otherwise
+     */
+    public static ImageIcon createImageIcon(String path) {
+        URL imgURL = null;
+
+        try {
+            imgURL = new URL("file:" + path);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+
+        if (imgURL != null) {
+            return new ImageIcon(imgURL);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Method which frees the memory from JInternalFrames
+     *
+     * @param baseComponent JInternalFrame whose memory is to be
+     * freed
+     */
+    public static void cleanComponent(Component baseComponent) {
+        try {
+            cleanComponent(baseComponent, 0);
+        } catch (Exception ignore) { // give some exception handling...
+        }
+    }
+
+    /*    * The "depth" parameter was being used for text output debugging.    * But isn't essential now.  I'll keep it anyways, as it avoids    * calling the garbage collector every recursion.    */
+    protected static void cleanComponent(Component baseComponent, int depth) {
+        if (baseComponent == null) // recursion terminating clause
+         {
+            return;
+        }
+
+        if (baseComponent instanceof IWindow){
+        	return;
+        }
+
+        Container cont;
+        Component[] childComponents;
+        int numChildren; // clean up component containers
+
+        if (baseComponent instanceof Container) { // now clean up container instance variables
+
+            if (baseComponent instanceof RootPaneContainer) { // Swing specialised container
+                cont = (Container) baseComponent;
+                numChildren = cont.getComponentCount();
+                childComponents = cont.getComponents();
+
+                for (int i = 0; i < numChildren; i++) { // remove each component from the current container
+
+                    // each child component may be a container itself
+                    cleanComponent(childComponents[i], depth + 1);
+                    ((RootPaneContainer) cont).getContentPane().remove(childComponents[i]);
+                }
+
+                ((RootPaneContainer) cont).getContentPane().setLayout(null);
+            } else { // General Swing, and AWT, Containers
+                cont = (Container) baseComponent;
+                numChildren = cont.getComponentCount();
+                childComponents = cont.getComponents();
+
+                for (int i = 0; i < numChildren; i++) //for(int i = 0;i < numChildren;i++)
+                 {
+                    // remove each component from the current container                    // each child component may be a container itself
+                    cleanComponent(childComponents[i], depth + 1);
+                    cont.remove(childComponents[i]);
+                }
+
+                cont.setLayout(null);
+            }
+        }
+
+        // if component is also a container
+    }
+
+
+
+    /**
+     * Extracts a ZIP file in the provided directory
+     *
+     * @param file Compressed file
+     * @param dir Directory to extract the files
+     * @param splash The splash window to show the extraction progress
+     *
+     * @throws ZipException If there is some problem in the file format
+     * @throws IOException If there is a problem reading the file
+     */
+    public static void extractTo(File file, File dir, MultiSplashWindow splash)
+        throws ZipException, IOException {
+        ZipFile zip = new ZipFile(file);
+        Enumeration e = zip.entries();
+
+		// Pasada para crear las carpetas
+		while (e.hasMoreElements()) {
+			ZipEntry entry = (ZipEntry) e.nextElement();
+
+			if (entry.isDirectory()) {
+				File directorio = new File(dir.getAbsolutePath()
+						+ File.separator + entry.getName());
+
+				directorio.mkdirs();
+			}
+
+    		}
+
+		// Pasada para crear los ficheros
+		e = zip.entries();
+		while (e.hasMoreElements()) {
+			ZipEntry entry = (ZipEntry) e.nextElement();
+			splash.process(30, "Procesando " + entry.getName() + "...");
+			if (!entry.isDirectory()) {
+				InputStream in = zip.getInputStream(entry);
+				OutputStream out = new FileOutputStream(dir + File.separator
+						+ entry.getName());
+				BufferedInputStream bin = new BufferedInputStream(in);
+				BufferedOutputStream bout = new BufferedOutputStream(out);
+
+				int i;
+
+				while ((i = bin.read()) != -1) {
+					bout.write(i);
+				}
+
+				bout.flush();
+				bout.close();
+				bin.close();
+
+			}
+
+		}
+
+		zip.close();
+		zip = null;
+		System.gc();
+
+	}
+    /**
+     * Returns the content of this URL as a file from the file system.<br>
+     * <p>
+     * If the URL has been already downloaded in this session and notified
+     * to the system using the static <b>Utilities.addDownloadedURL(URL)</b>
+     * method, it can be restored faster from the file system avoiding to
+     * download it again.
+     * </p>
+     * @param url
+     * @return File containing this URL's content or null if no file was found.
+     */
+    private static File getPreviousDownloadedURL(URL url){
+        File f = null;
+        if (downloadedFiles!=null && downloadedFiles.containsKey(url)){
+            String filePath = (String) downloadedFiles.get(url);
+            f = new File(filePath);
+        }
+        return f;
+    }
+
+    /**
+     * Adds an URL to the table of downloaded files for further uses. If the URL
+     * already exists in the table its filePath value is updated to the new one and
+     * the old file itself is removed from the file system.
+     *
+     * @param url
+     * @param filePath
+     */
+    private static void addDownloadedURL(URL url, String filePath){
+        if (downloadedFiles==null)
+            downloadedFiles = new Hashtable();
+        String fileName = (String) downloadedFiles.put(url, filePath);
+        //JMV: No se puede eliminar el anterior porque puede que alguien lo
+        // este usando
+        /*
+        if (fileName!=null){
+            File f = new File(fileName);
+            if (f.exists())
+                f.delete();
+        }
+        */
+    }
+
+    /**
+     * Downloads an URL into a temporary file that is removed the next time the
+     * tempFileManager class is called, which means the next time gvSIG is launched.
+     *
+     * @param url
+     * @param name
+     * @return
+     * @throws IOException
+     * @throws ServerErrorResponseException
+     * @throws ConnectException
+     * @throws UnknownHostException
+     */
+    public static File downloadFile(URL url, String name) throws IOException,ConnectException, UnknownHostException{
+    	File f = null;
+
+	    try{
+	        if ((f=getPreviousDownloadedURL(url))==null){
+	        	File tempDirectory = new File(TEMPDIRECTORYPATH);
+	        	if (!tempDirectory.exists())
+	        		tempDirectory.mkdir();
+
+	        	f = new File(TEMPDIRECTORYPATH+"/"+name+System.currentTimeMillis());
+
+	            System.out.println("downloading '"+url.toString()+"' to: "+f.getAbsolutePath());
+
+	            f.deleteOnExit();
+                DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)));
+                byte[] buffer = new byte[1024*256];
+                InputStream is = url.openStream();
+                long readed = 0;
+                for (int i = is.read(buffer); i>0; i = is.read(buffer)){
+                    dos.write(buffer, 0, i);
+                    readed += i;
+                }
+                dos.close();
+                addDownloadedURL(url, f.getAbsolutePath());
+	        }
+	    } catch (IOException io) {
+	    	io.printStackTrace();
+	    }
+
+	    return f;
+	}
+
+    /**
+     * Cleans every temporal file previously downloaded.
+     */
+    public static void cleanUpTempFiles() {
+    	try{
+    		File tempDirectory = new File(TEMPDIRECTORYPATH);
+
+    		File[] files = tempDirectory.listFiles();
+    		if (files!=null) {
+    			for (int i = 0; i < files.length; i++) {
+    				 // s�lo por si en un futuro se necesitan crear directorios temporales
+    				if (files[i].isDirectory())	deleteDirectory(files[i]);
+    				files[i].delete();
+    			}
+    		}
+    		tempDirectory.delete();
+    	} catch (Exception e) {	}
+
+    }
+    /**
+     * Recursive directory delete.
+     * @param f
+     */
+	private static void deleteDirectory(File f) {
+		File[] files = f.listFiles();
+		for (int i = 0; i < files.length; i++) {
+			if (files[i].isDirectory()) deleteDirectory(files[i]);
+			files[i].delete();
+		}
+
+	}
+
+    /**
+     * Creates a temporary file with a the provided name and data. The file
+     * will be automatically deleted when the application exits. 
+     * 
+     * @param fileName Name of the temporary file to create
+     * @param data The data to store in the file
+     */
+    public static File createTemp(String fileName, String data)throws IOException{
+    	File f = new File(fileName);
+    	DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)) );
+		dos.writeBytes(data);
+		dos.close();
+    	f.deleteOnExit();
+    	return f;
+    }
+
+    /**
+     * Remove an URL from the system cache. The file will remain in the file
+     * system for further eventual uses.
+     * @param request
+     */
+	public static void removeURL(URL url) {
+		if (downloadedFiles != null && downloadedFiles.containsKey(url))
+			downloadedFiles.remove(url);
+	}
+	
+	/**
+	 * Creates the directory for temporary files, and returns the path of
+	 * this directory. If the directory already exists, it just returns
+	 * its path. Any file or directory created in this special directory
+	 * will be delete when the application finishes.
+	 * 
+	 * @return An String containing the full path to the temporary directory
+	 */
+	public static String createTempDirectory(){
+		File tempDirectory = new File(TEMPDIRECTORYPATH);
+    	if (!tempDirectory.exists())
+    		tempDirectory.mkdir();
+    	return TEMPDIRECTORYPATH;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Utilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/IconThemeHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/IconThemeHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/IconThemeHelper.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import java.awt.Image;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IconThemeHelper {
+
+	private static Logger logger = LoggerFactory.getLogger(IconThemeHelper.class);
+	
+	@SuppressWarnings("rawtypes")
+	public static void registerIcon(String group, String name, Object obj) {
+		String resourceName;
+		String provider;
+		ClassLoader loader;
+		IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+		if( group == null || group.trim().length()==0 ) {
+			resourceName = "images/"+name+".png";
+		} else {
+			resourceName = "images/"+group+"/"+name+".png";
+		}
+		if( obj instanceof Class ) {
+			loader = ((Class) obj).getClassLoader();
+			provider = ((Class) obj).getName();
+		} else {
+			loader = obj.getClass().getClassLoader();
+			provider = obj.getClass().getName();
+		}
+		PluginServices plugin = PluginServices.getPluginServices(obj);
+		if( plugin != null ) {
+			provider = plugin.getPluginName(); 
+		}
+
+		URL resource = null;
+		try {
+			resource = loader.getResource(resourceName);
+			if(resource == null) {
+				if( group == null || group.trim().length() == 0) {
+					resourceName = "images/" + name + ".gif";
+				} else {
+					resourceName = "images/" + group + "/" + name + ".gif";
+				}
+				resource = loader.getResource(resourceName);
+			}
+			iconTheme.registerDefault(provider, group, name, null, resource);
+		} catch( Throwable e) {
+			logger.info("Can't register icon '" + name + "'.",e);
+		}
+
+	}
+
+	public static ImageIcon getImageIcon(String iconName) {
+		return PluginServices.getIconTheme().get(iconName);
+	}
+	
+	public static Image getImage(String iconName) {
+		return PluginServices.getIconTheme().get(iconName).getImage();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/IconThemeHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+import org.gvsig.andami.firewall.FirewallConfiguration;
+
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+
+public interface PluginsManager {
+
+    /**
+     * Return the associated pluginServices to the extension class passed as
+     * parameter.
+     *
+     * @param extension
+     * @return plugin services
+     */
+    public PluginServices getPlugin(Class<? extends IExtension> extension);
+
+    /**
+     * Return the associated pluginServices to the object passed as parameter.
+     *
+     * @param object
+     * @return plugin services
+     */
+    public PluginServices getPlugin(Object obj);
+
+    /**
+     * Return the associated pluginServices to the extension plugin.
+     *
+     * @param pluginName, name of the plugin
+     * @return plugin services
+     */
+    public PluginServices getPlugin(String pluginName);
+
+    /**
+     * Get the package info associated to the plugin of the extension.
+     *
+     * @param extension extension of the plugin
+     * @return plugin package info
+     */
+    public PackageInfo getPackageInfo(Class<? extends IExtension> extension);
+
+    /**
+     * Get the package info associated to the plugin with the specified name.
+     *
+     * @param pluginName, name of the plugin
+     * @return plugin package info
+     */
+    public PackageInfo getPackageInfo(String pluginName);
+
+    /**
+     * Get the package info associated to the application.
+     *
+     * @return application package info
+     */
+    public PackageInfo getPackageInfo();
+
+    /**
+     * Return the list of plugins loaded in the application
+     *
+     * @return list of plugins
+     */
+    public List<PluginServices> getPlugins();
+
+    /**
+     * Gets the instance of the extension whose class is provided.
+     *
+     * @param extension, class of the extension to retrieve
+     *
+     * @return The instance of the extension, or null if the instance does
+     * not exist.
+     */
+    public IExtension getExtension(Class<? extends IExtension> extension);
+
+    /**
+     * Return an iterator over al extensions loaded in the application.
+     *
+     * @return iterator over extensions
+     */
+    public Iterator<IExtension> getExtensions();
+
+    /**
+     * Set an extension to control the visivility of all the extensions
+     * of the application.
+     *
+     * @param extension
+     */
+    public void setExclusiveUIExtension(ExclusiveUIExtension extension);
+
+    /**
+     * Return the ExclusiveUIExtension installed in the application or
+     * null.
+     *
+     * @return
+     */
+    public ExclusiveUIExtension getExclusiveUIExtension();
+
+    /**
+     * @deprecated use {@link #translate(String)}
+     * @see {@link #translate(String)}
+     */
+    public String getText(Object obj, String msg);
+
+    /**
+     * Translate the message key to the current language used
+     * in the application.
+     *
+     * @param msg key to translate
+     * @return message traslated or the key
+     */
+    public String translate(String msg);
+
+    /**
+     * Returns the main application folder, where the application is installed.
+     *
+     * @return the main application folder
+     */
+    public File getApplicationFolder();
+
+    /**
+     * Returns the default folder with the installable package bundles.
+     *
+     * @return the default folder with the installable package bundles
+     */
+    public File getInstallFolder();
+
+    /**
+     * Returns the application folder in the home of user.
+     *
+     * @return the main application folder
+     */
+    public File getApplicationHomeFolder();
+
+
+    /**
+     * Returns the default folder where the internationalization files are installed.
+     *
+     * @return the default folder where the internationalization files are installed.
+     */
+    public File getApplicationI18nFolder();
+    
+    /**
+     * Returns the plugins folder.
+     *
+     * @return the plugins folder
+     * @deprecated use {@link #getPluginsFolders()}
+     */
+    public File getPluginsFolder();
+
+    /**
+     * Returns a list of folder on the plugins are instaleds.
+     *
+     * @return list of folders File of the plugins.
+     */
+    public List<File> getPluginsFolders();
+
+    /**
+     * @deprecated @see {@link #getPluginsFolders()}
+     */
+    public File getPluginsDirectory();
+
+    /**
+     * This method allows plugins register task to do before initializacion of
+     * all gvSIG plugins.
+     *
+     * Task with higher priority value are executed after.
+     * 
+     * @param name of the task
+     * @param task runnable with the code of the task
+     * @param in_event_thread, true if the task shoul run in the AWT event thread.
+     * @param priority of the task.
+     */
+    public void addStartupTask(String name, Runnable task, boolean in_event_thread, int priority);
+
+    /**
+     * This method allows plugins register task to do after close the application.
+     *
+     * Task with higher priority value are executed after.
+     * 
+     * @param name of the task
+     * @param task runnable with the code of the task
+     * @param in_event_thread, true if the task shoul run in the AWT event thread.
+     * @param priority of the task.
+     */
+    public void addShutdownTask(String name, Runnable task, boolean in_event_thread, int priority);
+
+    /**
+     * This method executes registered task to run before the initialization of
+     * all plugins.
+     * The tasks are sorted according to the priority and executed in a separated
+     * thread.
+     *
+     */
+    public void executeStartupTasks();
+
+    /**
+     * This method executes registered task to run after the close of the application.
+     * The tasks are sorted according to the priority and executed in a separated
+     * thread.
+     *
+     */
+    public void executeShutdownTasks();
+
+    
+    public FirewallConfiguration getFirewallConfiguration();
+
+    public Version getApplicationVersion();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstaller.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstaller.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstaller.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.andami.installer.translations;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipInputStream;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.andami.LocaleManager;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.spi.InstallerInfoFileException;
+import org.gvsig.installer.lib.spi.execution.InstallPackageProvider;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.service.spi.AbstractProvider;
+import org.gvsig.tools.service.spi.ProviderServices;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class TranslationsInstaller extends AbstractProvider implements InstallPackageProvider {
+
+    private static Logger logger = LoggerFactory.getLogger(TranslationsInstaller.class);
+    
+    private int BUFFER = 2048;
+    
+    public TranslationsInstaller(ProviderServices providerServices) {
+            super(providerServices);
+    }
+
+    public void install(File applicationFolder, InputStream inputStream, PackageInfo packageInfo) throws InstallPackageServiceException {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        File i18nFolder = pluginsManager.getApplicationI18nFolder();
+        
+	logger.info("Installing package '"+packageInfo.getCode()+"' in '"+i18nFolder.getAbsolutePath()+"'.");
+        try {
+            if (!i18nFolder.exists()) {
+		logger.warn("Can install package '"+packageInfo.getCode()+"', install folder '"+i18nFolder+"' does not exists.");
+		throw new TranslationsIntallerFolderNotFoundException();
+            }
+            decompress(inputStream, i18nFolder);
+            installLocales(i18nFolder, packageInfo);
+        } catch (Exception e) {
+            try {
+                logger.warn("Can install package '"+packageInfo.getCode()+"'.", e);
+                // if there is an exception, installLater is called
+                installLater(applicationFolder, inputStream, packageInfo);
+            } catch (IOException e1) {
+                logger.warn("Can install package '"+packageInfo.getCode()+"'.", e1);
+                throw new InstallPackageServiceException(e1);
+            }
+        }
+
+    }
+
+    private void decompress(InputStream inputStream, File folder) 
+        throws ZipException, IOException, InstallerInfoFileException {
+
+        ZipInputStream zis = null;
+        ZipEntry entry = null;
+        byte data[] = new byte[BUFFER];
+        int count = 0;
+
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        SimpleTaskStatus taskStatus = manager.createDefaultSimpleTaskStatus("Uncompressing...");
+
+        manager.add(taskStatus);
+        String entryName = "(header)";
+        try {
+            long readed = 0;
+            zis = new ZipInputStream(inputStream);
+            while ((entry = zis.getNextEntry()) != null) {
+                entryName = FilenameUtils.separatorsToSystem(entry.getName());
+                taskStatus.message(entryName);
+
+                File file = new File(folder, entryName);
+                if (entry.isDirectory()) {
+        		file.mkdirs();                    
+                } else {
+                    if (file.exists()) {
+                         FileUtils.forceDelete(file);
+                    }
+                    if( !file.getParentFile().exists() ) {
+                        FileUtils.forceMkdir(file.getParentFile());
+                    }
+                    logger.debug("extracting " + file.getAbsolutePath());
+                    FileOutputStream fos = new FileOutputStream(file);
+                    while ((count = zis.read(data, 0, BUFFER)) != -1) {
+                        fos.write(data, 0, count);
+                        readed += count;
+                        taskStatus.setCurValue(readed);
+                    }
+                    fos.flush();
+                    fos.close();
+                }
+            }
+            zis.close();
+        } catch(IOException ex) {
+                logger.warn("Problems uncompresing 'translations' (last entry '"+entryName+"'.",ex);
+                throw ex;
+
+        } catch(RuntimeException ex) {
+                logger.warn("Problems uncompresing 'translations' (last entry '"+entryName+"'.",ex);
+                throw ex;
+
+        } finally {
+            taskStatus.remove();
+
+        }
+    }
+
+    
+    public void installLater(File applicationDirectory, InputStream inputStream, PackageInfo packageInfo) throws InstallPackageServiceException, IOException {
+        logger.warn("installLater is not implementes.");
+    }
+
+    private void installLocales(File i18nFolder, PackageInfo packageInfo) throws MalformedURLException {
+        LocaleManager localeManager = PluginsLocator.getLocaleManager();
+        
+        File folder = new File(i18nFolder, packageInfo.getCode());
+        File localeConfig = new File(folder,"locale.config");
+        localeManager.installLocales(localeConfig.toURI().toURL());
+    }
+    
+    
+    public class TranslationsIntallerFolderNotFoundException extends
+        InstallPackageServiceException {
+
+        private static final long serialVersionUID = 4416143986837955881L;
+
+        private static final String message = "Translations folder not found";
+
+        private static final String KEY = "translations_folder_not_found";
+
+        public TranslationsIntallerFolderNotFoundException() {
+                super(message, KEY, serialVersionUID);
+        }
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstallerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstallerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstallerFactory.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.installer.translations;
+
+import java.io.File;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.service.spi.AbstractProviderFactory;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderManager;
+import org.gvsig.tools.service.spi.ProviderServices;
+import org.gvsig.tools.util.Callable;
+
+public class TranslationsInstallerFactory extends
+        AbstractProviderFactory {
+
+    public static final String PROVIDER_NAME = "translations";
+    public static final String PROVIDER_DESCRIPTION = "";
+
+    private DynClass dynclass;
+
+    @Override
+    protected DynClass createParametersDynClass() {
+        if ( dynclass == null ) {
+            initialize();
+        }
+        return dynclass;
+    }
+
+    @Override
+    protected Provider doCreate(DynObject parameters, ProviderServices services) {
+        return new TranslationsInstaller(services);
+    }
+
+    public void initialize() {
+        if ( dynclass == null ) {
+            DynObjectManager dynObjectManager = ToolsLocator
+                    .getDynObjectManager();
+            dynclass = dynObjectManager.createDynClass(PROVIDER_NAME,
+                    PROVIDER_DESCRIPTION);
+            dynObjectManager.add(dynclass);
+        }
+    }
+
+    public static class RegisterTranslationsInstaller implements Callable {
+
+        public Object call() throws Exception {
+            InstallerManager installerManager = InstallerLocator.getInstallerManager();
+            ProviderManager providerManager = InstallerProviderLocator.getProviderManager();
+            PluginsManager pluginsManager = PluginsLocator.getManager();
+            
+            providerManager.addProviderFactory(new TranslationsInstallerFactory());
+            
+            File f = new File(pluginsManager.getApplicationFolder(),"i18n");
+            installerManager.setDefaultLocalAddonRepository(f,PROVIDER_NAME);
+            
+            return Boolean.TRUE;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstallerFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/BasePackageWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/BasePackageWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/BasePackageWizard.java	(revision 42196)
@@ -0,0 +1,206 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.installer.packagebuilder;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.io.File;
+import java.net.URL;
+
+import javax.swing.JPanel;
+import org.gvsig.andami.installer.packagebuilder.options.OutputOption;
+import org.gvsig.andami.installer.packagebuilder.options.PackageInfoOption;
+import org.gvsig.andami.installer.packagebuilder.options.ProgressOption;
+import org.gvsig.andami.installer.packagebuilder.options.SelectFolderToPackagingOption;
+import org.gvsig.andami.installer.translations.TranslationsInstallerFactory;
+
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.locator.LocatorException;
+
+public class BasePackageWizard extends JPanel implements PackageWizard {
+
+    private static final long serialVersionUID = 9205891710214122265L;
+
+    private WizardPanelWithLogo wizardPanelWithLogo = null;
+
+    private PackageInfo packageInfo = null;
+    private File folderToPackaging = null;
+    private WizardPanelActionListener wizardListenerAdapter = null;
+
+    private OutputOption outputOption = null;
+    private OptionPanel packageInfoOption = null;
+    private OptionPanel progressOption = null;
+    private SelectFolderToPackagingOption selectFolderToPackagingOption = null;
+
+    public BasePackageWizard(String packageType) throws LocatorException {
+        this.wizardPanelWithLogo = new WizardPanelWithLogo();
+
+        setCancelButtonEnabled(true);
+        setFinishButtonEnabled(false);
+
+        packageInfo = ToolsLocator.getPackageManager().createPackageInfo();
+        packageInfo.setType(packageType);
+        
+        this.initOptionPanels();
+
+        // Adding the listeners
+        wizardPanelWithLogo.setWizardListener(this);
+
+        this.setLayout(new BorderLayout());
+        this.add(wizardPanelWithLogo, BorderLayout.CENTER);
+        this.setPreferredSize(new Dimension(700, 550));
+    }
+    
+    protected void addPackageInfoOptionPanel() {
+        if ( this.packageInfoOption == null ) {
+            this.packageInfoOption = new PackageInfoOption(this);
+        }
+        this.wizardPanelWithLogo.addOptionPanel(this.packageInfoOption);
+    }
+
+    protected void addOutputOptionPanel() {
+        if ( this.outputOption == null ) {
+            this.outputOption = new OutputOption(this);
+        }
+        this.wizardPanelWithLogo.addOptionPanel(this.outputOption);
+    }
+
+    protected void addProgressOptionPanel() {
+        if ( this.progressOption == null ) {
+
+            this.progressOption = new ProgressOption(this);
+        }
+        this.wizardPanelWithLogo.addOptionPanel(this.progressOption);
+    }
+    
+    protected void addSelectFolderToPackagingOption(String message) {
+        if( this.selectFolderToPackagingOption == null ) {
+            this.selectFolderToPackagingOption = new SelectFolderToPackagingOption(this, message);
+        }
+        this.wizardPanelWithLogo.addOptionPanel(this.selectFolderToPackagingOption);
+    }
+
+    protected void addDefaultOptionPanels() {
+        this.addPackageInfoOptionPanel();
+        this.addOutputOptionPanel();
+        this.addProgressOptionPanel();
+    }
+
+    protected void initOptionPanels() {
+        this.addDefaultOptionPanels();
+    }
+    
+    public void setNextButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setNextButtonEnabled(isEnabled);
+    }
+
+    public void setCancelButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setCancelButtonEnabled(isEnabled);
+    }
+
+    public void setFinishButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setFinishButtonEnabled(isEnabled);
+    }
+
+    public void setBackButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setBackButtonEnabled(isEnabled);
+    }
+
+    public WizardPanelActionListener getWizardPanelActionListener() {
+        if ( this.wizardListenerAdapter == null ) {
+            this.wizardListenerAdapter = new WizardPanelActionListener() {
+                public void finish(WizardPanel wizardPanel) {
+                    BasePackageWizard.this.setVisible(false);
+                }
+
+                public void cancel(WizardPanel wizardPanel) {
+                    BasePackageWizard.this.setVisible(false);
+                }
+            };
+        }
+        return this.wizardListenerAdapter;
+    }
+
+    public void setWizardPanelActionListener(
+            WizardPanelActionListener wizardActionListener) {
+        // TODO Auto-generated method stub
+        // this.wizardListenerAdapter = wizardActionListener;
+        throw new RuntimeException("Esto falta por ver que hace");
+    }
+
+    public void setFolderToPackaging(File file) {
+        this.folderToPackaging = file;
+        if( this.selectFolderToPackagingOption!=null ) {
+            this.selectFolderToPackagingOption.setCurrentFolder(file);
+        }
+        File pinfo = new File(file, "package.info");
+        if ( pinfo.exists() ) {
+            try {
+                ToolsLocator.getPackageManager().readPacakgeInfo(
+                        (org.gvsig.tools.packageutils.PackageInfo) packageInfo, pinfo);
+                packageInfo.setType(TranslationsInstallerFactory.PROVIDER_NAME);
+            } catch (Exception e) {
+                /*
+                 * Do nothing, packageInfo remains empty
+                 * form will be empty
+                 * 
+                 */
+            }
+        }
+
+    }
+
+    public File getFolderToPackaging() {
+        return this.folderToPackaging;
+    }
+
+    public PackageInfo getPackageInfo() {
+        return this.packageInfo;
+    }
+
+    public URL getDownloadURL() {
+        return this.outputOption.getDownloadURL();
+    }
+
+    public File getPackageIndexFile() {
+        return this.outputOption.getPackageIndexFile();
+    }
+
+    public boolean shouldCreateIndex() {
+        return this.outputOption.shouldCreateIndex();
+    }
+
+    public File getPackageFile() {
+        return this.outputOption.getPackageFile();
+    }
+
+    public void addOptionPanel(OptionPanel optionPanel) {
+        this.wizardPanelWithLogo.addOptionPanel(optionPanel);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/BasePackageWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/OutputOption.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/OutputOption.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/OutputOption.java	(revision 42196)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.andami.installer.packagebuilder.options;
+
+import java.io.File;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.installer.packagebuilder.PackageWizard;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.api.creation.JOutputPanel;
+
+
+public class OutputOption implements OptionPanel {
+
+    private JOutputPanel outputPanel;
+    private PackageWizard wizard;
+
+    public OutputOption(PackageWizard wizard) {
+        super();
+        this.wizard = wizard;
+        SwingInstallerManager installerManager = SwingInstallerLocator.getSwingInstallerManager();
+
+        outputPanel = installerManager.createOutputPanel();
+        this.outputPanel.setPackageInfo(wizard.getPackageInfo());
+    }
+
+    public JPanel getJPanel() {
+        return this.outputPanel;
+    }
+
+    private String getText(String msg) {
+        return Messages.getText(msg);
+    }
+
+    public String getPanelTitle() {
+        return getText("_output_options");
+    }
+
+    public void lastPanel() {
+
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+
+        File file = outputPanel.getPackageFile();
+        File filePath = new File(file.getParent());
+        if (!filePath.exists()) {
+            JOptionPane.showMessageDialog(outputPanel,
+                getText("_the_package_file_folder_does_not_exist") + ": "
+                    + filePath);
+            throw new NotContinueWizardException("", null, false);
+        }
+        if (outputPanel.isCreatePackageIndex()) {
+            URL url = outputPanel.getDownloadURL();
+            if (url == null) {
+                throw new NotContinueWizardException("", null, false);
+            }
+            File indexFile = outputPanel.getPackageIndexFile();
+            File indexFilePath = new File(indexFile.getParent());
+            if (!indexFilePath.exists()) {
+                JOptionPane.showMessageDialog(outputPanel,
+                    getText("_the_package_index_file_folder_does_not_exist")
+                        + ": " + indexFilePath);
+                throw new NotContinueWizardException("", null, false);
+            }
+        }
+
+    }
+
+    public void updatePanel() {
+        outputPanel.setPackageFile(getDefaultPackageBundleFile());
+        outputPanel.setPackageIndexFile(getDefaultPackageIndexBundleFile());
+    }
+
+    private File getDefaultPackageBundleFile() {
+        PluginsManager manager = PluginsLocator.getManager();
+        File installsFolder = manager.getInstallFolder();
+        String fileName =
+            InstallerLocator.getInstallerManager().getPackageFileName(
+                wizard.getPackageInfo());
+        return new File(installsFolder, fileName);
+    }
+
+    private File getDefaultPackageIndexBundleFile() {
+        PluginsManager manager = PluginsLocator.getManager();
+        File installsFolder = manager.getInstallFolder();
+        String fileName =
+            InstallerLocator.getInstallerManager().getPackageIndexFileName(
+                wizard.getPackageInfo());
+        return new File(installsFolder, fileName);
+    }
+
+    public URL getDownloadURL() {
+        return this.outputPanel.getDownloadURL();
+    }
+    
+    public File getPackageIndexFile() {
+        return this.outputPanel.getPackageIndexFile();
+    }
+    
+    public boolean shouldCreateIndex() {
+        return this.outputPanel.isCreatePackageIndex();
+    }
+    
+    public File getPackageFile() {
+        return this.outputPanel.getPackageFile();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/OutputOption.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/SelectFolderToPackagingOption.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/SelectFolderToPackagingOption.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/SelectFolderToPackagingOption.java	(revision 42196)
@@ -0,0 +1,114 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.installer.packagebuilder.options;
+
+import java.awt.BorderLayout;
+import java.io.File;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import org.gvsig.andami.installer.packagebuilder.PackageWizard;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.jdesktop.layout.GroupLayout;
+import org.jdesktop.layout.LayoutStyle;
+
+/**
+ *
+ * @author usuario
+ */
+public class SelectFolderToPackagingOption extends JPanel  implements OptionPanel {
+
+    private PackageWizard wizard = null;
+    
+    /**
+     * Creates new form SelectFolderToPackagingOption
+     */
+    public SelectFolderToPackagingOption(PackageWizard wizard, String message) {
+        this.wizard = wizard;
+        initComponents();
+        if( message == null ) {
+            this.jLabel1.setText(Messages.getText(this.jLabel1.getText()));
+        } else {
+            this.jLabel1.setText(message);
+        }
+    }
+
+        public JPanel getJPanel() {
+        return this;
+    }
+
+    public void lastPanel() {
+
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        File file = jFileChooser1.getSelectedFile();
+        if( file!=null ) {
+            wizard.setFolderToPackaging(file);
+        }
+    }
+
+    public void updatePanel() {
+
+    }
+
+    public String getPanelTitle() {
+        return Messages.getText("_select_translations_folder");
+    }
+
+    public void setCurrentFolder(File folder) {
+        this.jFileChooser1.setCurrentDirectory(folder);
+    }
+    
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jLabel1 = new JLabel();
+        jFileChooser1 = new JFileChooser();
+
+        setLayout(new BorderLayout());
+
+        jLabel1.setText("_Seleccione_la_carpeta_donde_estan_los _contenidos_a_empaquetar");
+        add(jLabel1, BorderLayout.PAGE_START);
+
+        jFileChooser1.setControlButtonsAreShown(false);
+        jFileChooser1.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+        add(jFileChooser1, BorderLayout.CENTER);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected JFileChooser jFileChooser1;
+    protected JLabel jLabel1;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/ProgressOption.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/ProgressOption.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/ProgressOption.java	(revision 42196)
@@ -0,0 +1,156 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.andami.installer.packagebuilder.options;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import org.gvsig.andami.installer.packagebuilder.PackageWizard;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.creation.MakePackageService;
+import org.gvsig.installer.lib.api.creation.MakePackageServiceException;
+import org.gvsig.installer.swing.api.JProgressPanel;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+public class ProgressOption implements OptionPanel {
+
+    private static final Logger logger = LoggerFactory.getLogger(ProgressOption.class);
+    private PackageWizard wizard;
+    private JProgressPanel progressPanel;
+
+    public ProgressOption(PackageWizard wizard) {
+        super();
+        this.wizard = wizard;
+        progressPanel =
+            SwingInstallerLocator.getSwingInstallerManager()
+                .createProgressPanel();
+    }
+
+    private String getText(String msg) {
+        return Messages.getText(msg);
+    }
+
+    public JPanel getJPanel() {
+        return this.progressPanel;
+    }
+
+    public String getPanelTitle() {
+        return Messages.getText("_Installer_progress");
+    }
+
+    public void lastPanel() {
+        wizard.setFinishButtonEnabled(false);
+        wizard.setCancelButtonEnabled(true);
+    }
+
+    public void nextPanel() {
+        // Do nothing
+    }
+
+    public void updatePanel() {
+
+        OutputStream outputStream =
+            openFileOutputStream(wizard.getPackageFile());
+        if (outputStream == null) {
+            return;
+        }
+        OutputStream indexOutputStream = null;
+        if (wizard.shouldCreateIndex()) {
+            indexOutputStream =
+                openFileOutputStream(wizard.getPackageIndexFile());
+            if (indexOutputStream == null) {
+                return;
+            }
+        }
+
+        wizard.setFinishButtonEnabled(false);
+        wizard.setCancelButtonEnabled(false);
+
+        SimpleTaskStatus taskStatus =
+            ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(
+                wizard.getPackageInfo().getName());
+
+        this.progressPanel.bind(taskStatus);
+
+        try {
+            String downloadURL = wizard.getPackageInfo().getDownloadURLAsString();
+            wizard.getPackageInfo().setDownloadURL("");
+            
+            MakePackageService makePackageService =
+                InstallerLocator.getInstallerManager().createMakePackage(
+                    wizard.getFolderToPackaging(), wizard.getPackageInfo());
+
+            taskStatus.message(getText("_Compressing"));
+
+            makePackageService.preparePackage();
+            makePackageService.createPackage(outputStream);
+            if (indexOutputStream != null) {
+                taskStatus.message(getText("_Creating_index"));
+                makePackageService.createPackageIndex(
+                        wizard.getDownloadURL(), indexOutputStream);
+            }
+            
+            wizard.getPackageInfo().setDownloadURL(downloadURL);
+            taskStatus.terminate();
+
+            // Set the finished text
+            taskStatus.message(getText("_Finished"));
+        } catch (MakePackageServiceException e) {
+            logger.info("Error while creating package.", e);
+            JOptionPane.showMessageDialog(null, getText("_cant_create_the_package")
+                + "\n\n" + e.getLocalizedMessageStack(),
+                getText("_create_package"), JOptionPane.ERROR_MESSAGE);
+        }
+        wizard.setFinishButtonEnabled(true);
+        wizard.setCancelButtonEnabled(false);
+    }
+
+    private OutputStream openFileOutputStream(File file) {
+        OutputStream os;
+
+        try {
+            os = new FileOutputStream(file);
+        } catch (FileNotFoundException e1) {
+            JOptionPane.showMessageDialog(null,
+                getText("_cant_create_the_package") + " (" + file + ").",
+                getText("_create_package"), JOptionPane.WARNING_MESSAGE);
+            return null;
+        }
+        return os;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/ProgressOption.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/SelectFolderToPackagingOption.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/SelectFolderToPackagingOption.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/SelectFolderToPackagingOption.form	(revision 42196)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-69,0,0,2,49"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="_Seleccione_la_carpeta_donde_estan_los _contenidos_a_empaquetar"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="First"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JFileChooser" name="jFileChooser1">
+      <Properties>
+        <Property name="controlButtonsAreShown" type="boolean" value="false"/>
+        <Property name="fileSelectionMode" type="int" value="1"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="Center"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/PackageInfoOption.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/PackageInfoOption.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/PackageInfoOption.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.installer.packagebuilder.options;
+
+
+import java.io.File;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import org.gvsig.andami.installer.packagebuilder.PackageWizard;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.installer.swing.api.creation.JPackageInfoPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.packageutils.PackageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class PackageInfoOption implements OptionPanel {
+
+    private static final Logger logger = LoggerFactory.getLogger(PackageInfoOption.class);
+    
+    private JPackageInfoPanel packageInfoPanel;
+
+    private PackageWizard wizard;
+
+    public PackageInfoOption(PackageWizard wizard) {
+        super();
+        this.wizard = wizard;
+        SwingInstallerManager installerManager = SwingInstallerLocator.getSwingInstallerManager();
+
+        this.packageInfoPanel = installerManager.createPackageInfoPanel();
+    }
+
+    private String getText(String msg) {
+        return Messages.getText(msg);
+    }
+
+    public JPanel getJPanel() {
+        return this.packageInfoPanel;
+    }
+
+    public String getPanelTitle() {
+        return getText("_package_description");
+    }
+
+    public void lastPanel() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        if (!this.packageInfoPanel.validatePanel()) {
+            throw new NotContinueWizardException("", null, false);
+        }
+        this.packageInfoPanel.panelToPackageInfo(this.wizard.getPackageInfo());
+        PackageManager pkgmgr = ToolsLocator.getPackageManager();
+        File fileout = new File(wizard.getFolderToPackaging(),"package.info");
+        try {
+            pkgmgr.writePacakgeInfo(
+                    (org.gvsig.tools.packageutils.PackageInfo)(wizard.getPackageInfo()),
+                    fileout
+            );
+        } catch (Exception ex) {
+            logger.warn("Can't save package information (file="+fileout.getAbsolutePath()+").",ex);
+            JOptionPane.showMessageDialog(
+                    null, 
+                    Messages.getText("_cant_save_package_information_in_the_selected_folder"),
+                    Messages.getText("_Warning"),
+                    JOptionPane.INFORMATION_MESSAGE
+            );
+        }
+    }
+
+    public void updatePanel() {
+        this.packageInfoPanel.packageInfoToPanel(this.wizard.getPackageInfo());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/options/PackageInfoOption.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/PackageWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/PackageWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/packagebuilder/PackageWizard.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.andami.installer.packagebuilder;
+
+import java.io.File;
+import java.net.URL;
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.installer.lib.api.PackageInfo;
+
+
+public interface PackageWizard extends WizardPanel {
+    
+    public File getFolderToPackaging();
+    
+    public void setFolderToPackaging(File folder);
+    
+    public URL getDownloadURL();
+    
+    public File getPackageIndexFile();
+    
+    public boolean shouldCreateIndex();
+    
+    public File getPackageFile();
+    
+    public PackageInfo getPackageInfo();
+
+    public void setVisible(boolean bln);
+    
+    public void setNextButtonEnabled(boolean isEnabled);
+
+    public void setCancelButtonEnabled(boolean isEnabled);
+
+    public void setFinishButtonEnabled(boolean isEnabled);
+
+    public void setBackButtonEnabled(boolean isEnabled);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/AbstractPreferencePage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/AbstractPreferencePage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/AbstractPreferencePage.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.preferences;
+
+import java.util.Map;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+/**
+ * The abstract class that any preference page should extend.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public abstract class AbstractPreferencePage extends GridBagLayoutPanel implements IPreference, ExtensionBuilder{
+	/**
+	 * The number of components already added to the layout manager.
+	 */
+	protected int y;
+
+	private String title;
+
+	protected String parentID = null; // Por defecto, nodo raiz
+
+
+	public final void setParentID(String parentID) {
+		this.parentID = parentID;
+	}
+
+	public String getParentID() {
+		return parentID;
+	}
+
+	public final void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String toString()
+	{
+		return getTitle();
+	}
+
+	public Object create() {
+		return this;
+	}
+
+	public Object create(Object[] args) {
+		return this;
+	}
+
+	public Object create(Map args) {
+		return this;
+	}
+
+	/**
+	 * Devuelve true si el Panel debe estar en un BorderLayout centrado o false si
+	 * tiene un tama�o fijo.
+	 * @return
+	 */
+	public boolean isResizeable() {
+		return false;
+	}
+
+
+	public final void saveValues() throws StoreException {
+		// Store the values.
+		storeValues();
+
+		// Tell the page that its changes are already applied
+		setChangesApplied();
+	}
+
+	/**
+	 * <p>
+	 * Gathers the configurations and stores them in the system.<br>
+	 * </p>
+	 * <p>
+	 * <b>storeValues()</b> and  <b>setChangesApplied()</b> are methods from <b>AbstractPreferencePage</b>
+	 * not from <b>IPreference</b>. They both perform in combination what saveValue() should do
+	 * by itself, but they exist for performance issues. In fact, you <b>should not</b>
+	 * invoke them outside your PreferencePage class, you only need to code them.
+	 * </p>
+	 * @throws StoreException
+	 */
+	public abstract void storeValues() throws StoreException;
+
+	/**
+	 * <p>
+	 * After this method is invoked, the Preference page <b>must</b> return <b>true</b> as the
+	 * result of invoking isValueChanged() method. It tells that the values have been
+	 * saved in the system.<br>
+	 * </p>
+	 * <p>
+	 * <b>storeValues()</b> and  <b>setChangesApplied()</b> are methods from  <b>AbstractPreferencePage</b>
+	 * not from  <b>IPreference</b>. They both perform in combination what storeValue() should
+	 * by itself, but they exist for performance issues. In fact, you <b>should not</b>
+	 * invoke them outside your PreferencePage class, you only need to code them.
+	 * </p>
+	 */
+	public abstract void setChangesApplied();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/AbstractPreferencePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreferenceExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreferenceExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreferenceExtension.java	(revision 42196)
@@ -0,0 +1,28 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.preferences;
+
+public interface IPreferenceExtension {
+	public IPreference[] getPreferencesPages();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreferenceExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/GenericDlgPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/GenericDlgPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/GenericDlgPreferences.java	(revision 42196)
@@ -0,0 +1,643 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.preferences;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author fjp
+ *
+ * The reason behind this class is to have the opportunity of use a DlgPreferences
+ * in a local way. Then, you don't need to be a SingletonView.
+ */
+public class GenericDlgPreferences extends JPanel implements IWindow {
+	private static Logger logger = LoggerFactory.getLogger(GenericDlgPreferences.class);
+	
+    private static final long serialVersionUID = -6561660591523322611L;
+
+    private WindowInfo viewInfo = null;
+	private IPreference activePreference;
+
+    private Map<String, IPreference> preferences =
+        new Hashtable<String, IPreference>();
+	DefaultTreeModel treeModel = null;
+
+	private JTree jTreePlugins = null;
+
+	private JPanel jPanelButtons = null;
+
+	private JButton jButtonOK = null;
+
+	private JButton jButtonCancel = null;
+	private DefaultMutableTreeNode root = new DefaultMutableTreeNode();
+
+	private JPanel jPanelCenter = null;
+
+	private JLabel jLabelBigTitle = null;
+
+	private JScrollPane jScrollPane = null;
+
+	private JSplitPane jSplitPaneCenter = null;
+
+	private JPanel jPanelContainer = null;
+	private JButton jButtonRestore;
+	private ActionListener action;
+	private boolean dirtyTree = false;
+	private ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
+
+
+	private class MyTreeCellRenderer extends DefaultTreeCellRenderer
+	{
+
+        private static final long serialVersionUID = 1833782141342096776L;
+
+        public MyTreeCellRenderer() {
+			}
+
+			public Component getTreeCellRendererComponent(
+													JTree tree,
+													Object value,
+													boolean sel,
+													boolean expanded,
+													boolean leaf,
+													int row,
+													boolean hasFocus) {
+
+					super.getTreeCellRendererComponent(
+													tree, value, sel,
+													expanded, leaf, row,
+													hasFocus);
+					if (value instanceof DefaultMutableTreeNode)
+					{
+						DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+						if (node.getUserObject() instanceof IPreference)
+						{
+							IPreference pref = (IPreference) node.getUserObject();
+							this.setText(pref.getTitle());
+						}
+					}
+					return this;
+			}
+
+	}
+
+
+	public GenericDlgPreferences() {
+		super();
+		this.action = new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				PluginServices.getMDIManager().setWaitCursor();
+				String actionCommand = e.getActionCommand();
+				if ("RESTORE".equals(actionCommand)) {
+					// Restore default values in current page
+					if (activePreference!=null) {
+						activePreference.initializeDefaults();
+//	bug 240
+//						try {
+//							activePreference.saveValues();
+//						} catch (StoreException sEx) {
+//							/*
+//							 * If you reach this code you coded your page
+//							 * with wrong factory default values.
+//							 * Check them out.
+//							 */
+//							PluginServices.getMDIManager().restoreCursor();
+//
+//							// Show error message
+//							JOptionPane.showMessageDialog((Component) PluginServices.
+//									getMainFrame(),sEx.getMessage());
+//
+//						}
+					}
+				} else {
+                    Iterator<String> it = preferences.keySet().iterator();
+
+					if ("CANCEL".equals(actionCommand)) {
+						// Restore previous values in all pages
+						while (it.hasNext()) {
+                            IPreference pref = preferences.get(it.next());
+							if (pref.isValueChanged()) {
+								pref.initializeValues(); //
+							}
+						}
+						closeView();
+					} else if ("OK".equals(actionCommand)) {
+						// Apply values in all pages
+						boolean shouldClose = true;
+						while (it.hasNext()) {
+                                IPreference preference =
+                                    preferences.get(it.next());
+							try{
+								if (preference.isValueChanged()) {
+									preference.saveValues();
+									preference.initializeValues();
+								}
+							}catch (StoreException ex) {
+								// Reach this code should mean that the page has wrong values
+								shouldClose = false;
+								PluginServices.getMDIManager().restoreCursor();
+
+								// Show error message
+								JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),ex.getMessage());
+
+								// Focus on error page
+								setActivePage(preference);
+							}
+						}
+						if (shouldClose) {
+							closeView();
+						}
+					}
+				}
+				PluginServices.getMDIManager().restoreCursor();
+			}
+		};
+		initialize();
+	}
+
+	private void initialize() {
+		setLayout(new BorderLayout());
+		setSize(new java.awt.Dimension(750,479));
+		super.add(getJPanelButtons(), BorderLayout.SOUTH);
+		setPreferredSize(new java.awt.Dimension(390,369));
+		super.add(getJSplitPaneCenter(), java.awt.BorderLayout.CENTER);
+		getJSplitPaneCenter().setLeftComponent(getJScrollPane());
+		getJSplitPaneCenter().setRightComponent(getJPanelNorth());
+		treeModel = new DefaultTreeModel(root);
+	}
+
+	public void refreshExtensionPoints() {
+		ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
+
+
+        @SuppressWarnings("unchecked")
+        Iterator<ExtensionPoint.Extension> iterator = ep.iterator();
+		while (iterator.hasNext()) {
+			String preferencesPageName = "Unkown";
+			try {
+				Object obj = iterator.next();
+				if( obj != null ) {
+					preferencesPageName = obj.getClass().getName();
+				}
+				ExtensionPoint.Extension epe = (Extension) obj;
+				if( epe!=null ) {
+					preferencesPageName = epe.getName();
+				}
+                IPreference page = (IPreference) (epe.create());
+                if( page != null ) {
+                	preferencesPageName = page.getID();
+                }
+				this.addPreferencePage(page);
+			} catch (Exception e) {
+				logger.warn("Can't initialice preferences page '"+preferencesPageName+"'.", e);
+			}
+		}
+		List<IPreference> prefList = new ArrayList<IPreference>(preferences.values());
+		addPreferencePages(prefList);
+	}
+
+	//	TODO este m�todo es un parche provisional mientras se hace un refactoring de
+	//las PreferencePages para disponer de un m�todo que inicialize las variables
+	//a partir de las preferencias.
+    public void storeValues() {
+        Iterator<IPreference> iter = preferences.values().iterator();
+
+        while (iter.hasNext()) {
+            IPreference preference = iter.next();
+
+            try {
+                preference.saveValues();
+            } catch (StoreException e) {
+                /*
+                 * If you reach this code you coded your page
+                 * with wrong factory default values.
+                 * Check them out.
+                 */
+                PluginServices.getMDIManager().restoreCursor();
+                // Show error message
+                JOptionPane.showMessageDialog(
+                    (Component) PluginServices.getMainFrame(), e.getMessage());
+            }
+        }
+    }
+
+	/**
+	 * It is very common to be confused with this method. But
+	 * the one you are looking for is addPreferencePage(IPreference)
+	 */
+	public Component add(Component c) {
+		//throw new Error("Do not use com.iver.cit.gvsig.gui.preferences.DlgPreferences.add(Component) use com.iver.cit.gvsig.gui.preferences.DlgPreferences.addPreferencePage(IPreference) instead");
+		throw new Error("Do not use org.gvsig.app.gui.preferences.DlgPreferences.add(Component) register an extension point instead");
+	}
+
+	public Component add(Component c, int i) {
+		return add(c);
+	}
+
+	public void add(Component c, Object o) {
+		add(c);
+	}
+
+	public void add(Component c, Object o, int i) {
+		add(c);
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (viewInfo == null) {
+			viewInfo = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE | WindowInfo.PALETTE);
+			viewInfo.setTitle(PluginServices.getText(this,
+					"Preferences"));
+			viewInfo.setWidth(this.getWidth()+8);
+			viewInfo.setHeight(this.getHeight());
+		}
+		return viewInfo;
+	}
+
+	/**
+	 * This method initializes jTreePlugins
+	 *
+	 * @return javax.swing.JTree
+	 */
+	private JTree getJTreePlugins() {
+		if (jTreePlugins == null) {
+			jTreePlugins = new JTree();
+			jTreePlugins.setRootVisible(false);
+			MyTreeCellRenderer treeCellRenderer = new MyTreeCellRenderer();
+			treeCellRenderer.setOpenIcon(null);
+			treeCellRenderer.setClosedIcon(null);
+			treeCellRenderer.setLeafIcon(null);
+
+			jTreePlugins.setCellRenderer(treeCellRenderer);
+			jTreePlugins.setShowsRootHandles(true);
+			jTreePlugins
+					.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
+						public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
+							 DefaultMutableTreeNode node = (DefaultMutableTreeNode)
+													 jTreePlugins.getLastSelectedPathComponent();
+
+							 	if (node == null) {
+									return;
+								}
+							 	setActivePage((IPreference) node.getUserObject());
+						}
+					});
+			jTreePlugins.putClientProperty("JTree.linestyle", "Angled");
+			jTreePlugins.getSelectionModel().
+				setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+		}
+
+		return jTreePlugins;
+	}
+
+	/**
+	 * It takes an IPreference page and adds it to the application's preferences
+	 * dialog. The preference page is added in alphabetical order within the
+	 * branch where the page is hanging on, and defined by its title.
+	 * @param page
+	 */
+	public void addPreferencePage(IPreference page)
+	{
+		if (preferences.containsKey(page.getID())) {
+			return;
+		}
+		preferences.put(page.getID(), page);
+		page.initializeValues(); // init values from the last settings
+		if (dirtyTree) {
+			// rebuild page tree
+			dirtyTree = false;
+
+			DefaultTreeModel model = new DefaultTreeModel(root);
+			treeModel = model;
+			jTreePlugins.setModel(model);
+		}
+
+		doInsertNode(treeModel, page);
+		getJTreePlugins().setModel(treeModel);
+		getJTreePlugins().repaint();
+	}
+	private void addPreferencePages(List<IPreference> prefs){
+		while (prefs.size()>0){
+			IPreference pref=prefs.get(0);
+//				System.err.println("IPreference a persistir=  "+pref.getID());
+			if (pref.getParentID()!=null && preferences.get(pref.getParentID())==null){
+				prefs.remove(pref);
+				addPreferencePages(prefs);
+//				System.err.println("IPreference =  "+pref.getID());
+				addPreference(pref);
+			}else{
+//				System.err.println("IPreference =  "+pref.getID());
+				addPreference(pref);
+				prefs.remove(pref);
+			}
+		}
+	}
+	private void addPreference(IPreference pref) {
+		DefaultTreeModel model = new DefaultTreeModel(root);
+		doInsertNode(model, pref);
+	}
+
+	private DefaultMutableTreeNode findNode(String searchID)
+	{
+        @SuppressWarnings("unchecked")
+        Enumeration<DefaultMutableTreeNode> e = root.breadthFirstEnumeration();
+		while (e.hasMoreElements())
+		{
+            DefaultMutableTreeNode nodeAux = e.nextElement();
+			if (nodeAux != null)
+			{
+				IPreference pref = (IPreference) nodeAux.getUserObject();
+				if (pref == null) {
+					continue; // Root node
+				}
+				if (pref.getID().equals(searchID))
+				{
+					return nodeAux;
+				}
+			}
+		}
+		return null;
+
+	}
+
+	private void doInsertNode(DefaultTreeModel treeModel, IPreference page)
+	{
+
+		dirtyTree = ((page.getParentID() != null) && (findNode(page.getParentID())==null));
+		if (findNode(page.getID()) != null) {
+			return;
+		}
+		if (page.getParentID() != null)
+		{
+			if (preferences.containsKey(page.getParentID()))
+			{
+				IPreference parent = (IPreference) preferences.get(page.getParentID());
+				DefaultMutableTreeNode nodeParent = findNode(parent.getID());
+				if (nodeParent == null) // the parent is empty
+				{
+					// Recursively add it
+					doInsertNode(treeModel, parent);
+				}
+				else
+				{
+					DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(page);
+					int children = nodeParent.getChildCount();
+					int pos=0;
+					for (int i = 0; i < children; i++) {
+						DefaultMutableTreeNode node = (DefaultMutableTreeNode) treeModel.getChild(nodeParent, i);
+						if (node.getUserObject() instanceof IPreference) {
+							String pageTitle = ((IPreference) node.getUserObject()).getTitle();
+							if (pageTitle.compareTo(page.getTitle()) < 0) {
+								++pos;
+							}
+						}
+					}
+					treeModel.insertNodeInto(nodeValue, nodeParent, pos);
+				}
+			}
+		}
+		else // First level node ("General", "Edition")
+		{
+			DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(page);
+			int children = root.getChildCount();
+			int pos=0;
+			for (int i = 0; i < children; i++) {
+				DefaultMutableTreeNode node = (DefaultMutableTreeNode) treeModel.getChild(root, i);
+				if (node.getUserObject() instanceof IPreference) {
+					String pageTitle = ((IPreference) node.getUserObject()).getTitle();
+					if (pageTitle.compareTo(page.getTitle()) < 0) {
+						++pos;
+					}
+				}
+			}
+			treeModel.insertNodeInto(nodeValue, root, pos);
+		}
+	}
+
+	/**
+	 * This method initializes jPanelButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelButtons() {
+		if (jPanelButtons == null) {
+			jPanelButtons = new JPanel(new BorderLayout());
+			JPanel jPanelAux = new JPanel();
+			JLabel l = new JLabel();
+			l.setPreferredSize(new Dimension(40, 20));
+			jPanelButtons.add(new JSeparator(JSeparator.HORIZONTAL), BorderLayout.NORTH);
+			jPanelAux.add(getJButtonRestore(), BorderLayout.WEST);
+			jPanelAux.add(l, BorderLayout.CENTER);
+			jPanelAux.add(getJButtonOK(), BorderLayout.EAST);
+			jPanelAux.add(getJButtonCancel(), BorderLayout.EAST);
+
+			jPanelButtons.add(jPanelAux);
+		}
+		return jPanelButtons;
+	}
+
+	/**
+	 * This method initializes jPanelButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+
+
+	/**
+	 * This method initializes jButtonOK
+	 *
+	 * @return JButton
+	 */
+	private JButton getJButtonOK() {
+		if (jButtonOK == null) {
+			jButtonOK = new JButton();
+			jButtonOK.setText(PluginServices.getText(this, "aceptar"));
+			jButtonOK.setActionCommand("OK");
+			jButtonOK.addActionListener(action);
+		}
+		return jButtonOK;
+	}
+
+	/**
+	 * This method initializes jButtonOK
+	 *
+	 * @return JButton
+	 */
+	private JButton getJButtonRestore() {
+		if (jButtonRestore == null) {
+			jButtonRestore = new JButton();
+			jButtonRestore.setText(PluginServices.getText(this, "restore_defaults"));
+			jButtonRestore.setActionCommand("RESTORE");
+			jButtonRestore.addActionListener(action);
+		}
+		return jButtonRestore;
+	}
+
+	private void closeView() {
+		PluginServices.getMDIManager().closeWindow(this);
+	}
+
+	/**
+	 * This method initializes jButtonCancel
+	 *
+	 * @return JButton
+	 */
+	private JButton getJButtonCancel() {
+		if (jButtonCancel == null) {
+			jButtonCancel = new JButton();
+			jButtonCancel.setText(PluginServices.getText(this, "cancelar"));
+			jButtonCancel.setActionCommand("CANCEL");
+			jButtonCancel.addActionListener(action);
+		}
+		return jButtonCancel;
+	}
+
+	/**
+	 * This method initializes jPanelNorth
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelNorth() {
+		if (jPanelCenter == null) {
+			jLabelBigTitle = new JLabel();
+			jLabelBigTitle.setText("General");
+		    Font font = jLabelBigTitle.getFont();
+		    font = font.deriveFont(Font.BOLD, font.getSize() + 1.0f);
+		    jLabelBigTitle.setFont(font);
+			jLabelBigTitle.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);
+			jLabelBigTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+			jPanelCenter = new JPanel();
+			JPanel jPanelPageTitle = new JPanel(new BorderLayout());
+			JPanel jPanelAux = new JPanel(new BorderLayout());
+			jPanelAux.add(jLabelBigTitle, java.awt.BorderLayout.NORTH);
+			jPanelPageTitle.add(jPanelAux, java.awt.BorderLayout.WEST);
+			jPanelPageTitle.add(new JSeparator(JSeparator.HORIZONTAL), BorderLayout.SOUTH);
+			jPanelCenter.setLayout(new BorderLayout());
+			jPanelCenter.add(jPanelPageTitle, BorderLayout.NORTH);
+			jPanelCenter.add(getJPanelContainer(), java.awt.BorderLayout.CENTER);
+
+		}
+		return jPanelCenter;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setPreferredSize(new java.awt.Dimension(140,322));
+			jScrollPane.setViewportView(getJTreePlugins());
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jSplitPaneCenter
+	 *
+	 * @return javax.swing.JSplitPane
+	 */
+	private JSplitPane getJSplitPaneCenter() {
+		if (jSplitPaneCenter == null) {
+			jSplitPaneCenter = new JSplitPane();
+			jSplitPaneCenter.setResizeWeight(0.2);
+			jSplitPaneCenter.setDividerLocation(200);
+		}
+		return jSplitPaneCenter;
+	}
+
+	/**
+	 * This method initializes jPanelContainer
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelContainer() {
+		if (jPanelContainer == null) {
+			jPanelContainer = new JPanel();
+		}
+		return jPanelContainer;
+	}
+
+	/**
+	 *
+	 */
+	public void setActivePage(IPreference page) {
+		activePreference = page;
+		jLabelBigTitle.setText(activePreference.getTitle());
+		JPanel prefPanel = activePreference.getPanel();
+		jLabelBigTitle.setIcon(activePreference.getIcon());
+		jPanelContainer.removeAll();
+		if ((prefPanel instanceof AbstractPreferencePage) &&
+				((AbstractPreferencePage) prefPanel).isResizeable()) {
+			jPanelContainer.setLayout(new BorderLayout());
+			jPanelContainer.add(prefPanel, BorderLayout.CENTER);
+		} else {
+			jPanelContainer.setLayout(new FlowLayout());
+			jPanelContainer.add(prefPanel);
+		}
+		prefPanel.setVisible(true);
+		repaint();
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/GenericDlgPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreference.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreference.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreference.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+/**
+ * Interface that any entry in the application's preferences dialog must implement.
+ * In addition to this interface, an abstract class is supplied to ease the addition
+ * of new pages
+ * @see org.gvsig.andami.preferences.AbstractPreferencePage
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public interface IPreference extends ExtensionBuilder {
+
+	/**
+	 * Returns an identifier for this preferences page that is used to reference
+	 * it inside the Map.
+	 * @return String, you'd typically use any kind of <code>this.getClass().getName();</code>
+	 */
+	String getID();
+
+	/**
+	 * Returns an string containing the title of the preferences page. This string
+	 * will be shown whether in the tree entry or in the page header.
+	 * @return String, the title of the page
+	 */
+	String getTitle();
+
+	/**
+	 * The page must be contained in a JPanel and whatever to be shown will be returned
+	 * by this function.<br>
+	 * <p>
+	 * The content is added, removed and repainted automatically upon the events received from
+	 * the mouse. So, you only have to care about the content and the functionality to make it
+	 * <br>
+	 * </p>
+	 * having sense.
+	 * @return JPanel holding the contents to be shown in the page.
+	 */
+	JPanel getPanel();
+
+	/**
+	 * Returns the ID of the parent of this layer. If this method returns null, which means
+	 * that this preferences page has no parent, this is new entry in the preferences
+	 * tree, otherwise this preferences page will be hanging on the page with the ID
+	 * returned by this.
+	 * @return
+	 */
+	String getParentID();
+
+	/**
+	 * Initializes the components of this preferences page to the last settings.
+	 */
+	void initializeValues();
+
+	/**
+	 * Saves the new settings
+	 * @return <b>true</b> if the values were correctly stored, <b>false</b> otherwise.
+	 * @throws StoreException
+	 */
+	void saveValues() throws StoreException;
+
+	/**
+	 * Restores the default values of this preferences page's settings. Values are not
+	 * saved until saveValues() is executed
+	 */
+	void initializeDefaults();
+
+	/**
+	 * Returns the image that will be shown in the header of this preferences page
+	 * @return
+	 */
+	ImageIcon getIcon();
+
+	/**
+	 * Tells if this preference page has changed any value
+	 * (used for storing values when necessary)
+	 * @return <b>True</b> if any value has changed, <b>false</b> otherwise.
+	 */
+	boolean isValueChanged();
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreference.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/DlgPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/DlgPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/DlgPreferences.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.preferences;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+
+public class DlgPreferences extends GenericDlgPreferences implements IWindow {
+	private static DlgPreferences singletonInstance = null;
+
+	public static DlgPreferences getInstance() {
+		/*
+		 * if (singletonInstance == null) singletonInstance = new
+		 * DlgPreferences(); return singletonInstance;
+		 */
+		return new DlgPreferences();
+	}
+
+	DlgPreferences() {
+		super();
+	}
+
+	public Object getViewModel() {
+		return this.getClass();
+	}
+
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/DlgPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/StoreException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/StoreException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/StoreException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.preferences;
+
+public class StoreException extends Exception {
+
+	public StoreException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	public StoreException(String arg0, Throwable arg1) {
+		super(arg0, arg1);
+		// TODO Auto-generated constructor stub
+	}
+
+	public StoreException(String arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public StoreException(Throwable arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/StoreException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultLocaleManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultLocaleManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultLocaleManager.java	(revision 42196)
@@ -0,0 +1,477 @@
+package org.gvsig.andami.impl;
+
+import java.io.File;
+import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.TreeSet;
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.lang3.LocaleUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.LocaleManager;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.config.generate.AndamiConfig;
+import org.gvsig.andami.installer.translations.TranslationsInstallerFactory;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.utils.XMLEntity;
+
+public class DefaultLocaleManager implements LocaleManager {
+
+    private static final Logger logger
+            = LoggerFactory.getLogger(DefaultLocaleManager.class);
+
+    private static final String LOCALE_CODE_VALENCIANO = "vl";
+
+    private static final String I18N_EXTENSION = "org.gvsig.i18n.extension";
+    private static final String INSTALLED_TRANSLATIONS_HOME_FOLDER = "i18n";
+    private static final String VARIANT = "variant";
+    private static final String COUNTRY = "country";
+    private static final String LANGUAGE = "language";
+    private static final String REGISTERED_LOCALES_PERSISTENCE = "RegisteredLocales";
+
+    private static final String LOCALE_CONFIG_FILENAME = "locale.config";
+
+    private final Locale[] hardcoredLocales = new Locale[]{
+        // Default supported locales
+        SPANISH, // Spanish
+        ENGLISH, // English
+        new Locale("en", "US"), // English US
+        new Locale("ca"), // Catalan
+        new Locale("gl"), // Galician
+        new Locale("eu"), // Basque
+        new Locale("de"), // German
+        new Locale("cs"), // Czech
+        new Locale("fr"), // French
+        new Locale("it"), // Italian
+        new Locale("pl"), // Polish
+        new Locale("pt"), // Portuguese
+        new Locale("pt", "BR"), // Portuguese Brazil
+        new Locale("ro"), // Romanian
+        new Locale("zh"), // Chinese
+        new Locale("ru"), // Russian
+        new Locale("el"), // Greek
+        new Locale("ro"), // Romanian
+        new Locale("pl"), // Polish
+        new Locale("tr"), // Turkish
+        new Locale("sr"), // Serbio
+        new Locale("sw") // Swahili
+    };
+
+    private Set installedLocales = null;
+    private Set defaultLocales = null;
+
+    private boolean storedInstalledLocales = false;
+
+    public DefaultLocaleManager() {
+        Locale currentLocale = org.gvsig.i18n.Messages.getCurrentLocale();
+        this.setCurrentLocale(currentLocale);
+    }
+
+    public Locale getCurrentLocale() {
+        return org.gvsig.i18n.Messages.getCurrentLocale();
+    }
+
+    public void setCurrentLocale(final Locale locale) {
+        Locale nearestLocale = getNearestLocale(locale);
+        if(nearestLocale == null){
+            nearestLocale = this.getLocaleAlternatives(locale)[0];
+        }
+        org.gvsig.i18n.Messages.setCurrentLocale(nearestLocale, this.getLocaleAlternatives(nearestLocale));
+
+        String localeStr = nearestLocale.getLanguage();
+        if (localeStr.equalsIgnoreCase(LOCALE_CODE_VALENCIANO)) {
+            Locale.setDefault(new Locale("ca"));
+        } else {
+            Locale.setDefault(nearestLocale);
+        }
+
+        AndamiConfig config = Launcher.getAndamiConfig();
+        config.setLocaleLanguage(nearestLocale.getLanguage());
+        config.setLocaleCountry(nearestLocale.getCountry());
+        config.setLocaleVariant(nearestLocale.getVariant());
+
+        setCurrentLocaleUI(nearestLocale);
+    }
+
+    public Locale getDefaultSystemLocale() {
+        String language, region, country, variant;
+        language = getSystemProperty("user.language", "en");
+        // for compatibility, check for old user.region property
+        region = getSystemProperty("user.region", null);
+
+        if (region != null) {
+            // region can be of form country, country_variant, or _variant
+            int i = region.indexOf('_');
+            if (i >= 0) {
+                country = region.substring(0, i);
+                variant = region.substring(i + 1);
+            } else {
+                country = region;
+                variant = "";
+            }
+        } else {
+            country = getSystemProperty("user.country", "");
+            variant = getSystemProperty("user.variant", "");
+        }
+        return new Locale(language, country, variant);
+    }
+
+    private Set<Locale> loadLocalesFromConfing(File localesFile)  {
+        PropertiesConfiguration config = null;
+        if (!localesFile.canRead()) {
+            return null;
+        }
+        try {
+            config = new PropertiesConfiguration(localesFile);
+        } catch (Exception ex) {
+            logger.warn("Can't open locale configuration '" + localesFile + "'.", ex);
+            return null;
+        }
+
+        Set<Locale> locales = new HashSet<Locale>();
+        List localeCodes = config.getList("locale");
+        for (Object localeCode : localeCodes) {
+            try {
+                Locale locale = LocaleUtils.toLocale((String) localeCode);
+                locales.add(locale);
+            } catch(IllegalArgumentException ex) {
+                logger.warn("Can't load locale '"+localeCode+"' from config '"+localesFile.getAbsolutePath()+"'.",ex);
+            }
+        }
+        return locales;
+    }
+
+    public Set<Locale> getDefaultLocales() {
+        if (this.defaultLocales == null) {
+            PluginsManager pluginsManager = PluginsLocator.getManager();
+            File localesFile = new File(pluginsManager.getApplicationI18nFolder(), LOCALE_CONFIG_FILENAME);
+
+            Set<Locale> locales = loadLocalesFromConfing(localesFile);
+            defaultLocales = new HashSet<Locale>();
+            if( locales == null ) {
+                for (int i = 0; i < hardcoredLocales.length; i++) {
+                    defaultLocales.add(hardcoredLocales[i]);
+                }
+            } else {
+                defaultLocales.addAll(locales);
+            }
+        }
+        return this.defaultLocales;
+    }
+
+    public boolean installLocales(URL localesFile) {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PropertiesConfiguration config = null;
+        try {
+            config = new PropertiesConfiguration(localesFile);
+        } catch (Exception ex) {
+            logger.warn("Can't open configuration '" + localesFile + "'.", ex);
+        }
+        if (config == null) {
+            return false;
+        }
+        List localeCodes = config.getList("locale");
+        for (Object localeCode : localeCodes) {
+            Locale locale = LocaleUtils.toLocale((String) localeCode);
+            if (!getInstalledLocales().contains(locale)) {
+                this.installedLocales.add(locale);
+            }
+        }
+        storeInstalledLocales();
+        return true;
+    }
+
+    public Set<Locale> getInstalledLocales() {
+        if (installedLocales == null) {
+            installedLocales = new TreeSet<Locale>(new Comparator<Locale>() {
+                public int compare(Locale t0, Locale t1) {
+                    if (t1 == null || t0 == null) {
+                        return 0;
+                    }
+                    // return getLanguageDisplayName(t0).compareToIgnoreCase(getLanguageDisplayName(t1));
+                    return t0.toString().compareToIgnoreCase(t1.toString());
+                }
+            });
+
+            XMLEntity child = getRegisteredLocalesPersistence();
+
+            // If the list of registered locales is not already persisted,
+            // this should be the first time gvSIG is run with the I18nPlugin
+            // so we will take the list of default locales
+            if (child == null) {
+                installedLocales.addAll(getDefaultLocales());
+            } else {
+                XMLEntity localesEntity = child;
+                for (int i = 0; i < localesEntity.getChildrenCount(); i++) {
+                    Locale locale = null;
+                    XMLEntity localeEntity = localesEntity.getChild(i);
+                    String language = localeEntity.getStringProperty(LANGUAGE);
+                    String country = localeEntity.getStringProperty(COUNTRY);
+                    String variant = localeEntity.getStringProperty(VARIANT);
+                    locale = new Locale(language, country, variant);
+                    installedLocales.add(locale);
+                }
+            }
+            Set<Locale> lfp = getAllLocalesFromPackages();
+            installedLocales.addAll(lfp);
+        }
+        storeInstalledLocales();
+        return Collections.unmodifiableSet(installedLocales);
+    }
+
+    public boolean installLocale(Locale locale) {
+        // Add the locale to the list of installed ones, if it
+        // is new, otherwise, update the texts.
+        if (!getInstalledLocales().contains(locale)) {
+            getInstalledLocales().add(locale);
+            storeInstalledLocales();
+        }
+        return true;
+    }
+
+    public boolean uninstallLocale(Locale locale) {
+        if (!getInstalledLocales().remove(locale)) {
+            return false;
+        }
+        storeInstalledLocales();
+        return true;
+    }
+
+    public String getLanguageDisplayName(Locale locale) {
+
+        String displayName;
+
+        if ("eu".equals(locale.getLanguage())
+                && "vascuence".equals(locale.getDisplayLanguage())) {
+            // Correction for the Basque language display name,
+            // show it in Basque, not in Spanish
+            displayName = "Euskera";
+        } else if (LOCALE_CODE_VALENCIANO.equals(locale.getLanguage())) {
+            // Patch for Valencian/Catalan
+            displayName = "Valenci�";
+        } else {
+            displayName = locale.getDisplayLanguage(locale);
+        }
+
+        return StringUtils.capitalize(displayName);
+    }
+
+    public String getLocaleDisplayName(Locale locale) {
+        String displayName = this.getLanguageDisplayName(locale);
+
+        if( !StringUtils.isBlank(locale.getCountry()) ) {
+            if( !StringUtils.isBlank(locale.getVariant()) ) {
+                displayName = displayName + " (" +
+                        StringUtils.capitalize(locale.getDisplayCountry(locale)) + "/" +
+                        locale.getDisplayVariant(locale) + ")";
+            } else {
+                displayName = displayName + " ("+locale.getDisplayCountry(locale)+")";
+            }
+        }
+
+        return displayName;
+    }
+
+    public Locale[] getLocaleAlternatives(Locale locale) {
+        Locale alternatives[] = null;
+
+        String localeStr = locale.getLanguage();
+        if (localeStr.equals("es")
+                || localeStr.equals("ca")
+                || localeStr.equals("gl")
+                || localeStr.equals("eu")
+                || localeStr.equals(LOCALE_CODE_VALENCIANO)) {
+            alternatives = new Locale[2];
+            alternatives[0] = new Locale("es");
+            alternatives[1] = new Locale("en");
+        } else {
+            // prefer English for the rest
+            alternatives = new Locale[2];
+            alternatives[0] = new Locale("en");
+            alternatives[1] = new Locale("es");
+        }
+        return alternatives;
+    }
+
+    private void setCurrentLocaleUI(final Locale locale) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    public void run() {
+                        setCurrentLocaleUI(locale);
+                    }
+                });
+            } catch (Exception ex) {
+                // Ignore
+            }
+        }
+        try {
+            JComponent.setDefaultLocale(locale);
+        } catch (Exception ex) {
+            logger.warn("Problems setting locale to JComponent.", ex);
+        }
+        if (MDIFrame.isInitialized()) {
+            try {
+                MDIFrame.getInstance().setLocale(locale);
+            } catch (Exception ex) {
+                logger.warn("Problems settings locale to MDIFrame.", ex);
+            }
+        }
+    }
+
+    public File getResourcesFolder() {
+        File i18nFolder = new File(
+                PluginsLocator.getManager().getApplicationHomeFolder(),
+                INSTALLED_TRANSLATIONS_HOME_FOLDER
+        );
+        if (!i18nFolder.exists()) {
+            i18nFolder.mkdirs();
+        }
+        return i18nFolder;
+    }
+
+    /**
+     * Returns the child XMLEntity with the RegisteredLocales.
+     */
+    private XMLEntity getRegisteredLocalesPersistence() {
+        XMLEntity entity = getI18nPersistence();
+        if (entity == null) {
+            return null;
+        }
+        XMLEntity child = null;
+        for (int i = entity.getChildrenCount() - 1; i >= 0; i--) {
+            XMLEntity tmpchild = entity.getChild(i);
+            if (tmpchild.getName().equals(REGISTERED_LOCALES_PERSISTENCE)) {
+                child = tmpchild;
+                break;
+            }
+        }
+        return child;
+    }
+
+    /**
+     * Stores the list of installed locales into the plugin persistence.
+     */
+    private void storeInstalledLocales() {
+        if(this.storedInstalledLocales ){
+            return;
+        }
+        XMLEntity i18nPersistence = getI18nPersistence();
+        if(i18nPersistence == null){
+            return;
+        }
+        XMLEntity localesEntity = getRegisteredLocalesPersistence();
+
+        // Remove the previous list of registered languages
+        if (localesEntity != null) {
+            for (int i = i18nPersistence.getChildrenCount() - 1; i >= 0; i--) {
+                XMLEntity child = i18nPersistence.getChild(i);
+                if (child.getName().equals(REGISTERED_LOCALES_PERSISTENCE)) {
+                    i18nPersistence.removeChild(i);
+                    break;
+                }
+            }
+        }
+
+        // Create the new persistence for the registered languages
+        localesEntity = new XMLEntity();
+
+        localesEntity.setName(REGISTERED_LOCALES_PERSISTENCE);
+
+        Set<Locale> locales = this.installedLocales; //getInstalledLocales();
+        for (Iterator iterator = locales.iterator(); iterator.hasNext();) {
+            Locale locale = (Locale) iterator.next();
+            XMLEntity localeEntity = new XMLEntity();
+            localeEntity.setName(locale.getDisplayName());
+            localeEntity.putProperty(LANGUAGE, locale.getLanguage());
+            localeEntity.putProperty(COUNTRY, locale.getCountry());
+            localeEntity.putProperty(VARIANT, locale.getVariant());
+
+            localesEntity.addChild(localeEntity);
+        }
+
+        getI18nPersistence().addChild(localesEntity);
+        this.storedInstalledLocales = true;
+    }
+
+    /**
+     * Returns the I18n Plugin persistence.
+     */
+    private XMLEntity getI18nPersistence() {
+        try {
+            XMLEntity entity = PluginServices.getPluginServices(I18N_EXTENSION).getPersistentXML();
+            return entity;
+        } catch (Throwable t) {
+            // logger.warn("Can't get I18nPersistence",t);
+            return null;
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private String getSystemProperty(final String property, String defaultValue) {
+        String value
+                = (String) AccessController.doPrivileged(new PrivilegedAction() {
+                    public Object run() {
+                        return System.getProperty(property);
+                    }
+                });
+        return value == null ? defaultValue : value;
+    }
+
+    private Set<Locale> getAllLocalesFromPackages() {
+        Set<Locale> locales = new HashSet<Locale>();
+        InstallerManager installerManager = InstallerLocator.getInstallerManager();
+        List<File> folders = installerManager.getAddonFolders(TranslationsInstallerFactory.PROVIDER_NAME);
+        for( File folder : folders ) {
+            File file = new File(folder,LOCALE_CONFIG_FILENAME);
+            Set<Locale> l = this.loadLocalesFromConfing(file);
+            locales.addAll(l);
+        }
+        return locales;
+    }
+
+    public Locale getNearestLocale(Locale locale) {
+        String language = locale.getLanguage();
+        String country = locale.getCountry();
+        String variant = locale.getVariant();
+        Locale nearestLocale;
+        if (language != null && !language.isEmpty()) {
+            if (country != null && !country.isEmpty()) {
+                if(variant != null && !variant.isEmpty()){
+                    nearestLocale = new Locale(language, country, variant);
+                    if (getInstalledLocales().contains(nearestLocale)) {
+                        return nearestLocale;
+                    }
+                }
+                nearestLocale = new Locale(language, country);
+                if (getInstalledLocales().contains(nearestLocale)) {
+                    return nearestLocale;
+                }
+            }
+            nearestLocale = new Locale(language);
+            if (getInstalledLocales().contains(nearestLocale)) {
+                return nearestLocale;
+            }
+        }
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java	(revision 42196)
@@ -0,0 +1,343 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.SwingUtilities;
+import org.apache.commons.io.FileUtils;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.config.generate.AndamiConfig;
+import org.gvsig.andami.config.generate.Plugin;
+import org.gvsig.andami.firewall.DefaultFirewallConfiguration;
+import org.gvsig.andami.firewall.FirewallConfiguration;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.packageutils.PackageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultPluginsManager implements PluginsManager {
+
+    private class Task implements Comparable, Runnable {
+
+        private String type = "";
+        private Runnable task = null;
+        private boolean in_event_thread = false;
+        private int priority = 0;
+        private String name = null;
+
+        public Task(String type, String name, Runnable task, boolean in_event_thread, int priority) {
+            this.type = type;
+            this.in_event_thread = in_event_thread;
+            this.task = task;
+            this.priority = priority;
+            this.name = name;
+        }
+
+        public int compareTo(Object t) {
+            return this.priority - ((Task) t).priority;
+        }
+
+        public boolean equals(Object t) {
+            return this.compareTo(t) == 0;
+        }
+
+        public void run() {
+            if ( this.in_event_thread ) {
+                if ( !SwingUtilities.isEventDispatchThread() ) {
+                    try {
+                        SwingUtilities.invokeAndWait(new Runnable() {
+                            public void run() {
+                                Task.this.run();
+                            }
+                        });
+                    } catch (InterruptedException ex) {
+                        // Do nothing
+                    } catch (InvocationTargetException ex) {
+                        logger.warn("Errors in execution of " + type + " task '" + name + "'.", ex);
+
+                    }
+                    return;
+                }
+            }
+            logger.info("Running " + type + " task '" + name + "' (priority " + priority + ").");
+            try {
+                task.run();
+                logger.info("Terminated " + type + " task '" + name + "'.");
+            } catch (Throwable ex) {
+                // Catch Exceptions and Errors (class not found)
+                logger.warn("Errors in execution of " + type + " task '" + name + "'.", ex);
+            }
+        }
+
+    }
+
+    private static Logger logger
+            = LoggerFactory.getLogger(DefaultPluginsManager.class);
+
+    private List<File> pluginsFolders = null;
+    private List<Task> startupTasks = new ArrayList<Task>();
+    private List<Task> shutdownTasks = new ArrayList<Task>();
+
+    public ExclusiveUIExtension getExclusiveUIExtension() {
+        return PluginServices.getExclusiveUIExtension();
+    }
+
+    public IExtension getExtension(Class<? extends IExtension> extension) {
+        return PluginServices.getExtension(extension);
+    }
+
+    @SuppressWarnings("unchecked")
+    public Iterator<IExtension> getExtensions() {
+        return PluginServices.getExtensions();
+    }
+
+    /**
+     * Return the associated pluginServices to the extension class passed as
+     * parameter.
+     *
+     */
+    public PluginServices getPlugin(Class<? extends IExtension> extension) {
+        String pluginName = ((PluginClassLoader) extension.getClassLoader()).getPluginName();
+        return this.getPlugin(pluginName);
+    }
+
+    public PluginServices getPlugin(Object obj) {
+        if ( obj instanceof Extension ) {
+            return ((Extension)obj).getPlugin();
+        }
+        if ( obj instanceof IExtension ) {
+            Class<? extends IExtension> klass = (Class<? extends IExtension>) obj.getClass();
+            return this.getPlugin(klass);
+        }
+        PluginClassLoader loader = (PluginClassLoader) obj.getClass().getClassLoader();
+        String pluginName = loader.getPluginName();
+        return this.getPlugin(pluginName);
+    }
+
+    public PluginServices getPlugin(String pluginName) {
+        return Launcher.getPluginServices(pluginName);
+    }
+
+    public PackageInfo getPackageInfo(Class<? extends IExtension> extension) {
+        PackageManager pkgmgr = ToolsLocator.getPackageManager();
+        File pinfo_file = new File(this.getPlugin(extension).getPluginDirectory(), "package.info");
+
+        PackageInfo packageInfo = null;
+        try {
+            packageInfo = pkgmgr.createPackageInfo(pinfo_file);
+        } catch (Exception e) {
+            logger.info("Error while reading package info file from "
+                    + pinfo_file.toString(), e);
+        }
+        return packageInfo;
+    }
+
+    public PackageInfo getPackageInfo(String pluginName) {
+        PackageManager pkgmgr = ToolsLocator.getPackageManager();
+        File pinfo_file = new File(this.getPlugin(pluginName)
+                .getPluginDirectory(), "package.info");
+
+        PackageInfo packageInfo = null;
+        try {
+            packageInfo = pkgmgr.createPackageInfo(pinfo_file);
+        } catch (Exception e) {
+            logger.info("Error while reading package info file from "
+                    + pinfo_file.toString(), e);
+        }
+        return packageInfo;
+    }
+
+    public PackageInfo getPackageInfo() {
+        PackageManager pkgmgr = ToolsLocator.getPackageManager();
+        File pinfo_file = new File(
+                this.getApplicationFolder(), "package.info");
+        PackageInfo packageInfo = null;
+        try {
+            packageInfo = pkgmgr.createPackageInfo(pinfo_file);
+        } catch (Exception e) {
+            logger.info("Error while reading package info file from "
+                    + pinfo_file.toString(), e);
+        }
+        return packageInfo;
+    }
+
+    @SuppressWarnings("unchecked")
+    public List<PluginServices> getPlugins() {
+        List<PluginServices> pluginServices = new ArrayList<PluginServices>();
+
+        AndamiConfig config = Launcher.getAndamiConfig();
+        Enumeration<Plugin> plugins = config.enumeratePlugin();
+        while ( plugins.hasMoreElements() ) {
+            Plugin plugin = plugins.nextElement();
+            pluginServices.add(PluginServices.getPluginServices(plugin.getName()));
+        }
+        return pluginServices;
+    }
+
+    public void setExclusiveUIExtension(ExclusiveUIExtension extension) {
+        PluginServices.setExclusiveUIExtension(extension);
+    }
+
+    public String getText(Object obj, String msg) {
+        return PluginServices.getText(obj, msg);
+    }
+
+    public String translate(String msg) {
+        return org.gvsig.i18n.Messages.translate(msg);
+    }
+
+    public File getApplicationFolder() {
+        return Launcher.getApplicationFolder();
+    }
+
+    /**
+     * @deprecated use {@link #getPluginsFolders()}
+     */
+    public File getPluginsDirectory() {
+        return getPluginsFolder();
+    }
+
+    /**
+     * @deprecated use {@link #getPluginsFolders()}
+     */
+    public File getPluginsFolder() {
+        List<File> l = this.getPluginsFolders();
+        if ( l == null || l.size() < 1 ) {
+            return null;
+        }
+        return l.get(0);
+    }
+
+    public List<File> getPluginsFolders() {
+        if ( this.pluginsFolders != null ) {
+            return this.pluginsFolders;
+        }
+        File folder;
+        String folderPath = "gvSIG/extensiones";
+        if ( !(Launcher.getAndamiConfig() == null || Launcher.getAndamiConfig().getPluginsDirectory() == null) ) {
+            folderPath = Launcher.getAndamiConfig().getPluginsDirectory();
+        }
+
+        this.pluginsFolders = new ArrayList<File>();
+
+        folder = new File(this.getApplicationFolder(), folderPath);
+        if( !folder.exists() ) {
+            try {
+                FileUtils.forceMkdir(folder);
+            } catch (IOException ex) {
+                logger.warn("The plugins folder '"+folder.getAbsolutePath()+"' don't exist and can't create.",ex);
+            }
+        }
+        this.pluginsFolders.add(folder);
+
+        folder = new File(this.getApplicationHomeFolder(), "installation");
+        folder = new File(folder, folderPath);
+        if( !folder.exists() ) {
+            try {
+                FileUtils.forceMkdir(folder);
+            } catch (IOException ex) {
+                logger.warn("The plugins folder '"+folder.getAbsolutePath()+"' don't exist and can't create.",ex);
+            }
+        }
+        this.pluginsFolders.add(folder);
+
+        return this.pluginsFolders;
+    }
+
+    public File getInstallFolder() {
+        return new File(getApplicationFolder(), "install");
+    }
+
+    public File getApplicationHomeFolder() {
+        return Launcher.getApplicationHomeFolder();
+    }
+
+    public void addStartupTask(String name, Runnable task, boolean in_event_thread, int priority) {
+        this.startupTasks.add(new Task("startup", name, task, in_event_thread, priority));
+    }
+
+    public void addShutdownTask(String name, Runnable task, boolean in_event_thread, int priority) {
+        this.shutdownTasks.add(new Task("shutdown", name, task, in_event_thread, priority));
+    }
+
+    public void executeStartupTasks() {
+        logger.info("Executing startup tasks.");
+        Thread th = new Thread(new Runnable() {
+            public void run() {
+                try {
+                    Thread.sleep(10);
+                } catch (Exception exc) {
+                    // Ignore error
+                }
+                Collections.sort(startupTasks);
+                for ( int i = startupTasks.size() - 1; i >= 0; i-- ) {
+                    Task task = startupTasks.get(i);
+                    task.run();
+                }
+            }
+        });
+        th.start();
+    }
+
+    public void executeShutdownTasks() {
+        logger.info("Executing shutdown tasks.");
+        Collections.sort(shutdownTasks);
+        for ( int i = shutdownTasks.size() - 1; i >= 0; i-- ) {
+            Task task = shutdownTasks.get(i);
+            task.run();
+        }
+    }
+
+    public File getApplicationI18nFolder() {
+        return new File(this.getApplicationFolder(), "i18n");
+    }
+
+    public FirewallConfiguration getFirewallConfiguration() {
+    	return (FirewallConfiguration) ToolsLocator.getFirewallManager();
+    }
+
+    public Version getApplicationVersion() {
+        PackageInfo pinfo = this.getPackageInfo();
+        Version version = pinfo.getVersion();
+        return version;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/GlobalKeyEventDispatcher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/GlobalKeyEventDispatcher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/GlobalKeyEventDispatcher.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import java.awt.KeyEventDispatcher;
+import java.awt.event.KeyEvent;
+import java.util.Hashtable;
+
+import javax.swing.KeyStroke;
+
+public class GlobalKeyEventDispatcher implements KeyEventDispatcher {
+	private static GlobalKeyEventDispatcher globalKeyDispatcher = null;
+	private static Hashtable registeredKeys = new Hashtable();
+	static GlobalKeyEventDispatcher getInstance()
+	{
+		if (globalKeyDispatcher == null)
+			globalKeyDispatcher = new GlobalKeyEventDispatcher();
+		return globalKeyDispatcher;
+	}
+
+	public void registerKeyStroke(KeyStroke key, KeyEventDispatcher disp)
+		throws RuntimeException
+	{
+		if (registeredKeys.containsKey(key))
+		{
+			KeyEventDispatcher a = (KeyEventDispatcher) registeredKeys.get(key);
+			throw new RuntimeException("Error: La tecla " + key +
+					" ya est� asignada al action" + a);
+		}
+		registeredKeys.put(key, disp);
+	}
+
+    public void removeKeyStrokeBinding(KeyStroke key) {
+    	registeredKeys.remove(key);
+    }
+
+    public void removeAll() {
+    	registeredKeys.clear();
+    }
+
+    public KeyEventDispatcher getListenerAssignedTo(KeyStroke key)
+    {
+    	return (KeyEventDispatcher) registeredKeys.get(key);
+    }
+
+
+	private GlobalKeyEventDispatcher()
+	{
+
+	}
+	public boolean dispatchKeyEvent(KeyEvent e) {
+		KeyStroke key = KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiers());
+		KeyEventDispatcher a = getListenerAssignedTo(key);
+
+		if (a!=null)
+		{
+			//System.err.println("DEBUG: KeyEvent " + e +
+			//		".Antes de ejecutar action=" + a);
+			return a.dispatchKeyEvent(e);
+		}
+		return false;
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/GlobalKeyEventDispatcher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java	(revision 42196)
@@ -0,0 +1,226 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class AndamiOptionsDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class AndamiOptionsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiOptionsDescriptor() {
+        super();
+        xmlName = "andami-options";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _optionList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.Option.class, "_optionList", "option", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiOptions target = (AndamiOptions) object;
+                return target.getOption();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiOptions target = (AndamiOptions) object;
+                    target.addOption( (org.gvsig.andami.config.generate.Option) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.Option();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _optionList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _iconTheme
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.IconTheme.class, "_iconTheme", "icon-theme", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiOptions target = (AndamiOptions) object;
+                return target.getIconTheme();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiOptions target = (AndamiOptions) object;
+                    target.setIconTheme( (org.gvsig.andami.config.generate.IconTheme) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.IconTheme();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _iconTheme
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.config.generate.AndamiOptionsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.AndamiOptions.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptions.java	(revision 42196)
@@ -0,0 +1,276 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class AndamiOptions.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class AndamiOptions implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _optionList
+     */
+    private java.util.Vector _optionList;
+
+    /**
+     * Field _iconTheme
+     */
+    private org.gvsig.andami.config.generate.IconTheme _iconTheme;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiOptions() {
+        super();
+        _optionList = new Vector();
+    } //-- com.iver.andami.config.generate.AndamiOptions()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addOption
+     * 
+     * @param vOption
+     */
+    public void addOption(org.gvsig.andami.config.generate.Option vOption)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _optionList.addElement(vOption);
+    } //-- void addOption(com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method addOption
+     * 
+     * @param index
+     * @param vOption
+     */
+    public void addOption(int index, org.gvsig.andami.config.generate.Option vOption)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _optionList.insertElementAt(vOption, index);
+    } //-- void addOption(int, com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method enumerateOption
+     */
+    public java.util.Enumeration enumerateOption()
+    {
+        return _optionList.elements();
+    } //-- java.util.Enumeration enumerateOption() 
+
+    /**
+     * Returns the value of field 'iconTheme'.
+     * 
+     * @return the value of field 'iconTheme'.
+     */
+    public org.gvsig.andami.config.generate.IconTheme getIconTheme()
+    {
+        return this._iconTheme;
+    } //-- com.iver.andami.config.generate.IconTheme getIconTheme() 
+
+    /**
+     * Method getOption
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Option getOption(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _optionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.config.generate.Option) _optionList.elementAt(index);
+    } //-- com.iver.andami.config.generate.Option getOption(int) 
+
+    /**
+     * Method getOption
+     */
+    public org.gvsig.andami.config.generate.Option[] getOption()
+    {
+        int size = _optionList.size();
+        org.gvsig.andami.config.generate.Option[] mArray = new org.gvsig.andami.config.generate.Option[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.config.generate.Option) _optionList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.config.generate.Option[] getOption() 
+
+    /**
+     * Method getOptionCount
+     */
+    public int getOptionCount()
+    {
+        return _optionList.size();
+    } //-- int getOptionCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllOption
+     */
+    public void removeAllOption()
+    {
+        _optionList.removeAllElements();
+    } //-- void removeAllOption() 
+
+    /**
+     * Method removeOption
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Option removeOption(int index)
+    {
+        java.lang.Object obj = _optionList.elementAt(index);
+        _optionList.removeElementAt(index);
+        return (org.gvsig.andami.config.generate.Option) obj;
+    } //-- com.iver.andami.config.generate.Option removeOption(int) 
+
+    /**
+     * Sets the value of field 'iconTheme'.
+     * 
+     * @param iconTheme the value of field 'iconTheme'.
+     */
+    public void setIconTheme(org.gvsig.andami.config.generate.IconTheme iconTheme)
+    {
+        this._iconTheme = iconTheme;
+    } //-- void setIconTheme(com.iver.andami.config.generate.IconTheme) 
+
+    /**
+     * Method setOption
+     * 
+     * @param index
+     * @param vOption
+     */
+    public void setOption(int index, org.gvsig.andami.config.generate.Option vOption)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _optionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _optionList.setElementAt(vOption, index);
+    } //-- void setOption(int, com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method setOption
+     * 
+     * @param optionArray
+     */
+    public void setOption(org.gvsig.andami.config.generate.Option[] optionArray)
+    {
+        //-- copy array
+        _optionList.removeAllElements();
+        for (int i = 0; i < optionArray.length; i++) {
+            _optionList.addElement(optionArray[i]);
+        }
+    } //-- void setOption(com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.AndamiOptions) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.AndamiOptions.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptions.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/OptionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/OptionDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/OptionDescriptor.java	(revision 42196)
@@ -0,0 +1,233 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class OptionDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class OptionDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public OptionDescriptor() {
+        super();
+        xmlName = "option";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Option target = (Option) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Option target = (Option) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _value
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_value", "value", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Option target = (Option) object;
+                return target.getValue();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Option target = (Option) object;
+                    target.setValue( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _value
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.OptionDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.Option.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/OptionDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiDescriptor.java	(revision 42196)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: AndamiDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.BooleanValidator;
+
+/**
+ * Class AndamiDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class AndamiDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiDescriptor() {
+        super();
+        xmlName = "andami";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _update
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_update", "update", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Andami target = (Andami) object;
+                if(!target.hasUpdate())
+                    return null;
+                return (target.getUpdate() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Andami target = (Andami) object;
+                    // ignore null values for non optional primitives
+                    if (value == null) return;
+                    
+                    target.setUpdate( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _update
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.AndamiDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.Andami.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Option.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Option.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Option.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Option.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Option implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _value
+     */
+    private java.lang.String _value;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Option() {
+        super();
+    } //-- com.iver.andami.config.generate.Option()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'value'.
+     * 
+     * @return the value of field 'value'.
+     */
+    public java.lang.String getValue()
+    {
+        return this._value;
+    } //-- java.lang.String getValue() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'value'.
+     * 
+     * @param value the value of field 'value'.
+     */
+    public void setValue(java.lang.String value)
+    {
+        this._value = value;
+    } //-- void setValue(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.Option) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.Option.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Option.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Andami.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Andami.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Andami.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Andami.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Andami.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Andami implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _update
+     */
+    private boolean _update;
+
+    /**
+     * keeps track of state for field: _update
+     */
+    private boolean _has_update;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Andami() {
+        super();
+    } //-- com.iver.andami.config.generate.Andami()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteUpdate
+     */
+    public void deleteUpdate()
+    {
+        this._has_update= false;
+    } //-- void deleteUpdate() 
+
+    /**
+     * Returns the value of field 'update'.
+     * 
+     * @return the value of field 'update'.
+     */
+    public boolean getUpdate()
+    {
+        return this._update;
+    } //-- boolean getUpdate() 
+
+    /**
+     * Method hasUpdate
+     */
+    public boolean hasUpdate()
+    {
+        return this._has_update;
+    } //-- boolean hasUpdate() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'update'.
+     * 
+     * @param update the value of field 'update'.
+     */
+    public void setUpdate(boolean update)
+    {
+        this._update = update;
+        this._has_update = true;
+    } //-- void setUpdate(boolean) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.Andami) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.Andami.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Andami.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconThemeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconThemeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconThemeDescriptor.java	(revision 42196)
@@ -0,0 +1,341 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class IconThemeDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class IconThemeDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public IconThemeDescriptor() {
+        super();
+        xmlName = "icon-theme";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _description
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_description", "description", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getDescription();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setDescription( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _description
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _version
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_version", "version", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getVersion();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setVersion( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _version
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _resource
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_resource", "resource", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getResource();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setResource( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _resource
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _basedir
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_basedir", "basedir", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getBasedir();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setBasedir( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _basedir
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.IconThemeDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.IconTheme.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconThemeDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconTheme.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconTheme.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconTheme.java	(revision 42196)
@@ -0,0 +1,250 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class IconTheme.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class IconTheme implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _description
+     */
+    private java.lang.String _description;
+
+    /**
+     * Field _version
+     */
+    private java.lang.String _version;
+
+    /**
+     * Field _resource
+     */
+    private java.lang.String _resource;
+
+    /**
+     * Field _basedir
+     */
+    private java.lang.String _basedir;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public IconTheme() {
+        super();
+    } //-- com.iver.andami.config.generate.IconTheme()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'basedir'.
+     * 
+     * @return the value of field 'basedir'.
+     */
+    public java.lang.String getBasedir()
+    {
+        return this._basedir;
+    } //-- java.lang.String getBasedir() 
+
+    /**
+     * Returns the value of field 'description'.
+     * 
+     * @return the value of field 'description'.
+     */
+    public java.lang.String getDescription()
+    {
+        return this._description;
+    } //-- java.lang.String getDescription() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'resource'.
+     * 
+     * @return the value of field 'resource'.
+     */
+    public java.lang.String getResource()
+    {
+        return this._resource;
+    } //-- java.lang.String getResource() 
+
+    /**
+     * Returns the value of field 'version'.
+     * 
+     * @return the value of field 'version'.
+     */
+    public java.lang.String getVersion()
+    {
+        return this._version;
+    } //-- java.lang.String getVersion() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'basedir'.
+     * 
+     * @param basedir the value of field 'basedir'.
+     */
+    public void setBasedir(java.lang.String basedir)
+    {
+        this._basedir = basedir;
+    } //-- void setBasedir(java.lang.String) 
+
+    /**
+     * Sets the value of field 'description'.
+     * 
+     * @param description the value of field 'description'.
+     */
+    public void setDescription(java.lang.String description)
+    {
+        this._description = description;
+    } //-- void setDescription(java.lang.String) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'resource'.
+     * 
+     * @param resource the value of field 'resource'.
+     */
+    public void setResource(java.lang.String resource)
+    {
+        this._resource = resource;
+    } //-- void setResource(java.lang.String) 
+
+    /**
+     * Sets the value of field 'version'.
+     * 
+     * @param version the value of field 'version'.
+     */
+    public void setVersion(java.lang.String version)
+    {
+        this._version = version;
+    } //-- void setVersion(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.IconTheme) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.IconTheme.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconTheme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/PluginDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/PluginDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/PluginDescriptor.java	(revision 42196)
@@ -0,0 +1,235 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PluginDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.BooleanValidator;
+import org.exolab.castor.xml.validators.NameValidator;
+
+/**
+ * Class PluginDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PluginDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginDescriptor() {
+        super();
+        xmlName = "plugin";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _update
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_update", "update", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                if(!target.hasUpdate())
+                    return null;
+                return (target.getUpdate() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    // ignore null values for non optional primitives
+                    if (value == null) return;
+                    
+                    target.setUpdate( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _update
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.PluginDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.Plugin.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/PluginDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java	(revision 42196)
@@ -0,0 +1,445 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: AndamiConfigDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class AndamiConfigDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class AndamiConfigDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiConfigDescriptor() {
+        super();
+        xmlName = "andami-config";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _localeLanguage
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_localeLanguage", "locale-language", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLocaleLanguage();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLocaleLanguage( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _localeLanguage
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _localeCountry
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_localeCountry", "locale-country", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLocaleCountry();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLocaleCountry( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _localeCountry
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _localeVariant
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_localeVariant", "locale-variant", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLocaleVariant();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLocaleVariant( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _localeVariant
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _lookAndFeel
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_lookAndFeel", "lookAndFeel", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLookAndFeel();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLookAndFeel( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _lookAndFeel
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _pluginsDirectory
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_pluginsDirectory", "pluginsDirectory", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getPluginsDirectory();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setPluginsDirectory( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _pluginsDirectory
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _andami
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.Andami.class, "_andami", "andami", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getAndami();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setAndami( (org.gvsig.andami.config.generate.Andami) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.Andami();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _andami
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _pluginList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.Plugin.class, "_pluginList", "plugin", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getPlugin();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.addPlugin( (org.gvsig.andami.config.generate.Plugin) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.Plugin();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _pluginList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _andamiOptions
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.AndamiOptions.class, "_andamiOptions", "andami-options", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getAndamiOptions();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setAndamiOptions( (org.gvsig.andami.config.generate.AndamiOptions) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.AndamiOptions();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _andamiOptions
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.config.generate.AndamiConfigDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.AndamiConfig.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Plugin.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Plugin.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Plugin.java	(revision 42196)
@@ -0,0 +1,197 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Plugin.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Plugin.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Plugin implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _update
+     */
+    private boolean _update;
+
+    /**
+     * keeps track of state for field: _update
+     */
+    private boolean _has_update;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Plugin() {
+        super();
+    } //-- com.iver.andami.config.generate.Plugin()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteUpdate
+     */
+    public void deleteUpdate()
+    {
+        this._has_update= false;
+    } //-- void deleteUpdate() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'update'.
+     * 
+     * @return the value of field 'update'.
+     */
+    public boolean getUpdate()
+    {
+        return this._update;
+    } //-- boolean getUpdate() 
+
+    /**
+     * Method hasUpdate
+     */
+    public boolean hasUpdate()
+    {
+        return this._has_update;
+    } //-- boolean hasUpdate() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'update'.
+     * 
+     * @param update the value of field 'update'.
+     */
+    public void setUpdate(boolean update)
+    {
+        this._update = update;
+        this._has_update = true;
+    } //-- void setUpdate(boolean) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.Plugin) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.Plugin.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Plugin.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfig.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfig.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfig.java	(revision 42196)
@@ -0,0 +1,426 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: AndamiConfig.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class AndamiConfig.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class AndamiConfig implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _localeLanguage
+     */
+    private java.lang.String _localeLanguage;
+
+    /**
+     * Field _localeCountry
+     */
+    private java.lang.String _localeCountry;
+
+    /**
+     * Field _localeVariant
+     */
+    private java.lang.String _localeVariant;
+
+    /**
+     * Field _lookAndFeel
+     */
+    private java.lang.String _lookAndFeel;
+
+    /**
+     * Field _pluginsDirectory
+     */
+    private java.lang.String _pluginsDirectory;
+
+    /**
+     * Field _andami
+     */
+    private org.gvsig.andami.config.generate.Andami _andami;
+
+    /**
+     * Field _pluginList
+     */
+    private java.util.Vector _pluginList;
+
+    /**
+     * Field _andamiOptions
+     */
+    private org.gvsig.andami.config.generate.AndamiOptions _andamiOptions;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiConfig() {
+        super();
+        _pluginList = new Vector();
+    } //-- com.iver.andami.config.generate.AndamiConfig()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addPlugin
+     * 
+     * @param vPlugin
+     */
+    public void addPlugin(org.gvsig.andami.config.generate.Plugin vPlugin)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _pluginList.addElement(vPlugin);
+    } //-- void addPlugin(com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Method addPlugin
+     * 
+     * @param index
+     * @param vPlugin
+     */
+    public void addPlugin(int index, org.gvsig.andami.config.generate.Plugin vPlugin)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _pluginList.insertElementAt(vPlugin, index);
+    } //-- void addPlugin(int, com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Method enumeratePlugin
+     */
+    public java.util.Enumeration enumeratePlugin()
+    {
+        return _pluginList.elements();
+    } //-- java.util.Enumeration enumeratePlugin() 
+
+    /**
+     * Returns the value of field 'andami'.
+     * 
+     * @return the value of field 'andami'.
+     */
+    public org.gvsig.andami.config.generate.Andami getAndami()
+    {
+        return this._andami;
+    } //-- com.iver.andami.config.generate.Andami getAndami() 
+
+    /**
+     * Returns the value of field 'andamiOptions'.
+     * 
+     * @return the value of field 'andamiOptions'.
+     */
+    public org.gvsig.andami.config.generate.AndamiOptions getAndamiOptions()
+    {
+        return this._andamiOptions;
+    } //-- com.iver.andami.config.generate.AndamiOptions getAndamiOptions() 
+
+    /**
+     * Returns the value of field 'localeCountry'.
+     * 
+     * @return the value of field 'localeCountry'.
+     */
+    public java.lang.String getLocaleCountry()
+    {
+        return this._localeCountry;
+    } //-- java.lang.String getLocaleCountry() 
+
+    /**
+     * Returns the value of field 'localeLanguage'.
+     * 
+     * @return the value of field 'localeLanguage'.
+     */
+    public java.lang.String getLocaleLanguage()
+    {
+        return this._localeLanguage;
+    } //-- java.lang.String getLocaleLanguage() 
+
+    /**
+     * Returns the value of field 'localeVariant'.
+     * 
+     * @return the value of field 'localeVariant'.
+     */
+    public java.lang.String getLocaleVariant()
+    {
+        return this._localeVariant;
+    } //-- java.lang.String getLocaleVariant() 
+
+    /**
+     * Returns the value of field 'lookAndFeel'.
+     * 
+     * @return the value of field 'lookAndFeel'.
+     */
+    public java.lang.String getLookAndFeel()
+    {
+        return this._lookAndFeel;
+    } //-- java.lang.String getLookAndFeel() 
+
+    /**
+     * Method getPlugin
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Plugin getPlugin(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _pluginList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.config.generate.Plugin) _pluginList.elementAt(index);
+    } //-- com.iver.andami.config.generate.Plugin getPlugin(int) 
+
+    /**
+     * Method getPlugin
+     */
+    public org.gvsig.andami.config.generate.Plugin[] getPlugin()
+    {
+        int size = _pluginList.size();
+        org.gvsig.andami.config.generate.Plugin[] mArray = new org.gvsig.andami.config.generate.Plugin[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.config.generate.Plugin) _pluginList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.config.generate.Plugin[] getPlugin() 
+
+    /**
+     * Method getPluginCount
+     */
+    public int getPluginCount()
+    {
+        return _pluginList.size();
+    } //-- int getPluginCount() 
+
+    /**
+     * Returns the value of field 'pluginsDirectory'.
+     * 
+     * @return the value of field 'pluginsDirectory'.
+     */
+    public java.lang.String getPluginsDirectory()
+    {
+        return this._pluginsDirectory;
+    } //-- java.lang.String getPluginsDirectory() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllPlugin
+     */
+    public void removeAllPlugin()
+    {
+        _pluginList.removeAllElements();
+    } //-- void removeAllPlugin() 
+
+    /**
+     * Method removePlugin
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Plugin removePlugin(int index)
+    {
+        java.lang.Object obj = _pluginList.elementAt(index);
+        _pluginList.removeElementAt(index);
+        return (org.gvsig.andami.config.generate.Plugin) obj;
+    } //-- com.iver.andami.config.generate.Plugin removePlugin(int) 
+
+    /**
+     * Sets the value of field 'andami'.
+     * 
+     * @param andami the value of field 'andami'.
+     */
+    public void setAndami(org.gvsig.andami.config.generate.Andami andami)
+    {
+        this._andami = andami;
+    } //-- void setAndami(com.iver.andami.config.generate.Andami) 
+
+    /**
+     * Sets the value of field 'andamiOptions'.
+     * 
+     * @param andamiOptions the value of field 'andamiOptions'.
+     */
+    public void setAndamiOptions(org.gvsig.andami.config.generate.AndamiOptions andamiOptions)
+    {
+        this._andamiOptions = andamiOptions;
+    } //-- void setAndamiOptions(com.iver.andami.config.generate.AndamiOptions) 
+
+    /**
+     * Sets the value of field 'localeCountry'.
+     * 
+     * @param localeCountry the value of field 'localeCountry'.
+     */
+    public void setLocaleCountry(java.lang.String localeCountry)
+    {
+        this._localeCountry = localeCountry;
+    } //-- void setLocaleCountry(java.lang.String) 
+
+    /**
+     * Sets the value of field 'localeLanguage'.
+     * 
+     * @param localeLanguage the value of field 'localeLanguage'.
+     */
+    public void setLocaleLanguage(java.lang.String localeLanguage)
+    {
+        this._localeLanguage = localeLanguage;
+    } //-- void setLocaleLanguage(java.lang.String) 
+
+    /**
+     * Sets the value of field 'localeVariant'.
+     * 
+     * @param localeVariant the value of field 'localeVariant'.
+     */
+    public void setLocaleVariant(java.lang.String localeVariant)
+    {
+        this._localeVariant = localeVariant;
+    } //-- void setLocaleVariant(java.lang.String) 
+
+    /**
+     * Sets the value of field 'lookAndFeel'.
+     * 
+     * @param lookAndFeel the value of field 'lookAndFeel'.
+     */
+    public void setLookAndFeel(java.lang.String lookAndFeel)
+    {
+        this._lookAndFeel = lookAndFeel;
+    } //-- void setLookAndFeel(java.lang.String) 
+
+    /**
+     * Method setPlugin
+     * 
+     * @param index
+     * @param vPlugin
+     */
+    public void setPlugin(int index, org.gvsig.andami.config.generate.Plugin vPlugin)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _pluginList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _pluginList.setElementAt(vPlugin, index);
+    } //-- void setPlugin(int, com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Method setPlugin
+     * 
+     * @param pluginArray
+     */
+    public void setPlugin(org.gvsig.andami.config.generate.Plugin[] pluginArray)
+    {
+        //-- copy array
+        _pluginList.removeAllElements();
+        for (int i = 0; i < pluginArray.length; i++) {
+            _pluginList.addElement(pluginArray[i]);
+        }
+    } //-- void setPlugin(com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Sets the value of field 'pluginsDirectory'.
+     * 
+     * @param pluginsDirectory the value of field 'pluginsDirectory'
+     */
+    public void setPluginsDirectory(java.lang.String pluginsDirectory)
+    {
+        this._pluginsDirectory = pluginsDirectory;
+    } //-- void setPluginsDirectory(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.AndamiConfig) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.AndamiConfig.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfig.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/FirewallConfiguration.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/FirewallConfiguration.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/FirewallConfiguration.java	(revision 42196)
@@ -0,0 +1,29 @@
+
+
+package org.gvsig.andami.firewall;
+
+
+public interface FirewallConfiguration extends org.gvsig.tools.firewall.FirewallConfiguration {
+//
+//    public void apply();
+//
+//    public boolean isAuthenticate();
+//
+//    public boolean isEnabled();
+//    public void setEnabled(boolean enabled);
+//
+//    public URL getHost();
+//    public String getUserName();
+//    public String getPassword();
+//
+//    public void setHost(URL host);
+//    public boolean setHost(String host, String port);
+//    public void setUserName(String userName);
+//    public void setPassword(String password);
+//
+//    public List<String> getNonProxyHosts();
+//    public String getNonProxyHostsAsString();
+//    public void setNonProxyHosts(String nonProxyHosts);
+//    public void addNonProxyHost(String host);
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/DefaultFirewallConfiguration.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/DefaultFirewallConfiguration.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/DefaultFirewallConfiguration.java	(revision 42196)
@@ -0,0 +1,182 @@
+package org.gvsig.andami.firewall;
+
+import java.net.Authenticator;
+import java.net.MalformedURLException;
+import java.net.PasswordAuthentication;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.prefs.Preferences;
+import org.apache.commons.lang3.StringUtils;
+
+public class DefaultFirewallConfiguration implements FirewallConfiguration {
+
+    private static Preferences prefs = Preferences.userRoot().node("gvsig.connection");
+
+    private List<String> nomProxyHosts = null;
+    private URL host = null;
+
+    private static final class ProxyAuth extends Authenticator {
+
+        private PasswordAuthentication auth;
+
+        private ProxyAuth(String user, String pass) {
+            auth = new PasswordAuthentication(user, pass.toCharArray());
+        }
+
+        protected PasswordAuthentication getPasswordAuthentication() {
+            return auth;
+        }
+    }
+
+    public void apply() {
+
+        Properties systemSettings = System.getProperties();
+        if (this.isEnabled()) {
+            if( this.getHost()!=null ) {
+                if ("https://".equalsIgnoreCase(this.getHost().getProtocol())) {
+                    systemSettings.put("https.proxyHost", this.getHost().getHost());
+                    systemSettings.put("https.proxyPort", String.valueOf(this.getHost().getPort()));
+                } else {
+                    systemSettings.put("http.proxyHost", this.getHost().getHost());
+                    systemSettings.put("http.proxyPort", String.valueOf(this.getHost().getPort()));
+                }
+            }
+            systemSettings.put("http.proxyUserName", this.getUserName());
+            systemSettings.put("http.proxyPassword", this.getPassword());
+            systemSettings.put("http.nonProxyHosts", this.getNonProxyHostsAsString());
+            if( this.isAuthenticate() ) {
+                Authenticator.setDefault(
+                        new ProxyAuth(
+                                this.getUserName(), 
+                                this.getPassword()
+                        )
+                );
+            }
+        } else {
+            systemSettings.put("http.proxySet", "false");
+            systemSettings.remove("http.proxyHost");
+            systemSettings.remove("http.proxyPort");
+            systemSettings.remove("http.proxyUserName");
+            systemSettings.remove("http.proxyPassword");
+            systemSettings.remove("http.nonProxyHosts");
+        }
+    }
+
+    public boolean isAuthenticate() {
+        if (StringUtils.isBlank(this.getUserName())
+                || StringUtils.isBlank(this.getPassword())) {
+            return false;
+        }
+        return true;
+    }
+
+    public boolean isEnabled() {
+        return prefs.getBoolean("firewall.http.enabled", false);
+    }
+
+    public void setEnabled(boolean enabled) {
+        prefs.putBoolean("firewall.http.enabled", enabled);
+    }
+    
+    public URL getHost() {
+        if (this.host == null) {
+            String host = prefs.get("firewall.socks.host", "");
+            String port = prefs.get("firewall.socks.port", "");
+            this.setHost(host, port);
+        }
+        return this.host;
+    }
+    
+    public void setHost(URL host) {
+        if (host == null) {
+            prefs.put("firewall.socks.host", "");
+            prefs.put("firewall.socks.port", "");
+        } else {
+            prefs.put("firewall.socks.host", host.getHost());
+            prefs.put("firewall.socks.port", String.valueOf(host.getPort()));
+        }
+        this.host = host;
+    }
+
+    public boolean setHost(String host, String port) {
+        StringBuilder b = new StringBuilder();
+        URL hosturl = null;
+        
+        if (StringUtils.isBlank(host)) {
+            hosturl = null;
+        } else {
+            if (!(host.toLowerCase().startsWith("http://")
+                    || host.toLowerCase().startsWith("https://"))) {
+                b.append("http://");
+            }
+            b.append(host);
+            if (!StringUtils.isBlank(port)) {
+                b.append(":");
+                b.append(port);
+            }
+            try {
+                hosturl = new URL(b.toString());
+            } catch (MalformedURLException ex) {
+                return false;
+            }
+        }
+        this.setHost(hosturl);
+        return true;
+    }
+
+    public String getUserName() {
+        return prefs.get("firewall.http.user", "");
+    }
+
+    public String getPassword() {
+        return prefs.get("firewall.http.password", "");
+    }
+
+    public void setUserName(String userName) {
+        prefs.put("firewall.http.user", userName);
+    }
+
+    public void setPassword(String password) {
+        prefs.put("firewall.http.password", password);
+    }
+
+    public List<String> getNonProxyHosts() {
+        if (this.nomProxyHosts == null) {
+            String s = prefs.get("firewall.http.nonProxyHosts", "");
+            this.setNonProxyHosts(s);
+        }
+        return Collections.unmodifiableList(this.nomProxyHosts);
+    }
+
+    public String getNonProxyHostsAsString() {
+        StringBuilder builder = new StringBuilder();
+
+        this.getNonProxyHosts();
+        for (int i = 0; i < this.nomProxyHosts.size(); i++) {
+            if (builder.length() == 0) {
+                builder.append("|");
+            }
+            builder.append(this.nomProxyHosts.get(i));
+        }
+        return builder.toString();
+    }
+
+    public void setNonProxyHosts(String nonProxyHosts) {
+        this.nomProxyHosts = new ArrayList<String>();
+        String ss[] = nonProxyHosts.split("|");
+        for (int i = 0; i < ss.length; i++) {
+            if (StringUtils.isNotBlank(ss[i])) {
+                this.nomProxyHosts.add(ss[i]);
+            }
+        }
+    }
+
+    public void addNonProxyHost(String host) {
+        this.getNonProxyHosts();
+        this.nomProxyHosts.add(host);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ConfigurationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ConfigurationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ConfigurationException.java	(revision 42196)
@@ -0,0 +1,73 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+/**
+ * Indica que se ha producido un error accediendo a los ficheros de configuraci�n
+ * de la plicaci�n, de Andami o de los plugins
+ */
+public class ConfigurationException extends Exception {
+    /**
+     *
+     */
+    public ConfigurationException() {
+        super();
+
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param message
+     */
+    public ConfigurationException(String message) {
+        super(message);
+
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param message
+     * @param cause
+     */
+    public ConfigurationException(String message, Throwable cause) {
+        super(message, cause);
+
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param cause
+     */
+    public ConfigurationException(Throwable cause) {
+        super(cause);
+
+        // TODO Auto-generated constructor stub
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ConfigurationException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationManager.java	(revision 42196)
@@ -0,0 +1,299 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.messages;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+import javax.swing.Timer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.tools.exception.IBaseException;
+
+
+
+/**
+ * Clase que recibe los mensajes de error, warning e informaci�n y dispara los
+ * eventos en los listeners que escuchan dichos eventos
+ *
+ * @version $Revision: 35350 $
+ */
+public class NotificationManager {
+	private static int SIZE_MESSAGE=4;
+    /** DOCUMENT ME! */
+    private static Logger logger = LoggerFactory.getLogger(NotificationManager.class.getName());
+
+    /** Timer de espera de nuevos mensajes */
+    private static Timer timer;
+
+    /** Indica si se han a�adido mensajes desde la �ltima vez que se comprob� */
+    private static boolean addedMessage = false;
+
+    /** DOCUMENT ME! */
+    private static ArrayList info = new ArrayList();
+    private static ArrayList infoExceptions = new ArrayList();
+
+    /** DOCUMENT ME! */
+    private static ArrayList warnings = new ArrayList();
+    private static ArrayList warningsExceptions = new ArrayList();
+
+    /** DOCUMENT ME! */
+    private static ArrayList errors = new ArrayList();
+    private static ArrayList errorsExceptions = new ArrayList();
+
+    /** DOCUMENT ME! */
+    private static Vector listeners = new Vector();
+    private static boolean isFirst = true;
+
+    /**
+     * A�ade un objeto que escucha los mensajes de error, warning e informaci�n
+     *
+     * @param nl objeto que recibir� los eventos
+     */
+    public static synchronized void addNotificationListener(NotificationListener nl) {
+        logger.info("Se a�ade un listener al manager de notificaciones (" + nl.getClass().getName() +"/"+ nl.toString() + ")");
+        listeners.add(nl);
+    }
+
+    /**
+     * @see com.iver.mdiApp.Notification#addError(java.lang.String)
+     */
+    public static synchronized void addError(final String err, Throwable e) {
+    	logger.error(err, e);
+        dispatchError(err, e);
+    }
+    
+    public static synchronized void dispatchError(final String err, Throwable e) {
+        errors.add(err);
+        errorsExceptions.add(e);
+
+        if (isFirst) {
+            AddError((String[]) errors.toArray(new String[0]),
+                (Throwable[]) errorsExceptions.toArray(new Throwable[0]));
+            errors.clear();
+            errorsExceptions.clear();
+            isFirst = false;
+        }
+
+        dispatchMessages();
+    }
+
+    /**
+     * @see com.iver.mdiApp.Notification#addWarning(java.lang.String)
+     */
+    public static synchronized void addWarning(final String warn,
+        final Throwable e) {
+        logger.warn(warn, e);
+        dispatchWarning(warn, e);
+    }
+
+    public static synchronized void dispatchWarning(final String warn,
+        final Throwable e) {
+        warnings.add(warn);
+        warningsExceptions.add(e);
+
+        if (isFirst) {
+            AddWarning((String[]) warnings.toArray(new String[0]),
+                (Throwable[]) warningsExceptions.toArray(new Throwable[0]));
+            warnings.clear();
+            warningsExceptions.clear();
+            isFirst = false;
+        }
+
+        dispatchMessages();
+    }
+    
+    /*
+     * @see com.iver.mdiApp.Notification#addWarning(java.lang.String)
+     */
+    public static synchronized void addWarning(final String warn) {
+		addWarning(warn,null);
+    }
+
+    /*
+     * @see com.iver.mdiApp.Consola#addInfo(java.lang.String)
+     */
+    public static synchronized void addInfo(final String inf, final Throwable e) {
+		logger.info(inf, e);
+        info.add(inf);
+        infoExceptions.add(e);
+
+        if (isFirst) {
+            AddInfo((String[]) info.toArray(new String[0]),
+                (Throwable[]) infoExceptions.toArray(new Throwable[0]));
+            info.clear();
+            infoExceptions.clear();
+            isFirst = false;
+        }
+
+        dispatchMessages();
+    }
+    /*
+     * @see com.iver.mdiApp.Consola#addInfo(java.lang.String)
+     */
+    public static synchronized void addInfo(final String inf) {
+		addInfo(inf,null);
+    }
+    /**
+     * M�todo que es ejecutado en el thread de la interfaz y que se encarga de
+     * avisar del mensaje de error a todos los listeners registrados
+     *
+     * @param error Mensaje de error
+     * @param e s que van a recibir las notificaciones
+     */
+    private static void AddError(String[] error, Throwable[] e) {
+        for (int i = 0; i < listeners.size(); i++) {
+            ((NotificationListener) listeners.get(i)).errorEvent(new MessageEvent(
+                    error, e));
+        }
+    }
+
+    /**
+     * M�todo que es ejecutado en el thread de la interfaz y que se encarga de
+     * avisar del mensaje de error a todos los listeners registrados
+     *
+     * @param warn Mensaje de warning
+     * @param e objetos que van a recibir las notificaciones
+     */
+    private static void AddWarning(String[] warn, Throwable[] e) {
+        for (int i = 0; i < listeners.size(); i++) {
+            ((NotificationListener) listeners.get(i)).warningEvent(new MessageEvent(
+                    warn, e));
+        }
+    }
+
+    /**
+     * M�todo que es ejecutado en el thread de la interfaz y que se encarga de
+     * avisar del mensaje de informaci�n a todos los listeners registrados
+     *
+     * @param info Mensaje de informaci�n
+     * @param e objetos que van a recibir las notificaciones
+     */
+    private static void AddInfo(String[] info, Throwable[] e) {
+        for (int i = 0; i < listeners.size(); i++) {
+            ((NotificationListener) listeners.get(i)).infoEvent(new MessageEvent(
+                    info, e));
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    private static void dispatchMessages() {
+        addedMessage = true;
+
+        if (timer == null) {
+
+            timer = new Timer(1000, new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+
+			        if (errors.size() > 0) {
+			            AddError((String[]) errors.toArray(new String[0]),
+			                (Throwable[]) errorsExceptions.toArray(new Throwable[0]));
+			            errors.clear();
+			            errorsExceptions.clear();
+			        }
+
+			        if (warnings.size() > 0) {
+			            AddWarning((String[]) warnings.toArray(new String[0]),
+			                (Throwable[]) warningsExceptions.toArray(new Throwable[0]));
+			            warnings.clear();
+			            warningsExceptions.clear();
+			        }
+
+			        if (info.size() > 0) {
+			            AddInfo((String[]) info.toArray(new String[0]),
+			                (Throwable[]) infoExceptions.toArray(new Throwable[0]));
+			            info.clear();
+			            infoExceptions.clear();
+			        }
+
+			        if (!addedMessage) {
+			            if (timer != null) {
+			                timer.stop();
+			            }
+
+			            timer = null;
+			        }
+
+			        addedMessage = false;
+			        isFirst = true;
+				}
+			});
+            timer.start();
+        }
+    }
+
+	public static void addError(Throwable e1) {
+	    if( e1 instanceof IBaseException ) {
+            IBaseException ex = (IBaseException) e1;
+	        String msg;
+	        try {
+	            msg = ex.getLocalizedMessageStack();
+	        } catch(Exception ex1) {
+	            try {
+	                msg = ex.getMessageStack();
+	            } catch(Exception ex2) {
+	                msg = ex.getMessage();
+	            }
+	        }
+            addError(msg, e1);
+	    } else {
+	        addError(e1.toString(), e1);
+	    }
+
+	}
+
+	public static void showMessageError(String message,Exception e) {
+		message=splitMessage(message);
+		JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),message,PluginServices.getText(NotificationManager.class,"error"),JOptionPane.ERROR_MESSAGE);
+		NotificationManager.addWarning(message,e);
+	}
+	public static void showMessageWarning(String message,Exception e) {
+		message=splitMessage(message);
+		JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),message,PluginServices.getText(NotificationManager.class,"warning"),JOptionPane.WARNING_MESSAGE);
+		NotificationManager.addWarning(message,e);
+	}
+	public static void showMessageInfo(String message,Exception e) {
+		message=splitMessage(message);
+		JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),message,PluginServices.getText(NotificationManager.class,"info"),JOptionPane.INFORMATION_MESSAGE);
+		NotificationManager.addInfo(message,e);
+	}
+	private static String splitMessage(String message) {
+		String[] messages=message.split("\n");
+		String resultMessage="";
+		for (int i=0;i<messages.length && i<=SIZE_MESSAGE;i++){
+			resultMessage+=(messages[i]);
+			resultMessage+=("\n");
+		}
+		return resultMessage;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/MessageEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/MessageEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/MessageEvent.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.messages;
+
+public class MessageEvent {
+	private String[] messages;
+	private Throwable[] exceptions;
+
+	public MessageEvent(String[] msgs, Throwable[] excps){
+		messages = msgs;
+		exceptions = excps;
+	}
+
+	/**
+	 * @return
+	 */
+	public Throwable[] getExceptions() {
+		return exceptions;
+	}
+
+	/**
+	 * @return
+	 */
+	public String[] getMessages() {
+		return messages;
+	}
+
+	/**
+	 * @param throwables
+	 */
+	public void setExceptions(Throwable[] throwables) {
+		exceptions = throwables;
+	}
+
+	/**
+	 * @param strings
+	 */
+	public void setMessages(String[] strings) {
+		messages = strings;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/MessageEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/Messages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/Messages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/Messages.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.messages;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+
+/**
+ * Clase que accede a los recursos para la i18n
+ */
+public class Messages {
+    /** DOCUMENT ME! */
+    private static final String BUNDLE_NAME = "org.gvsig.andami.text";
+
+    /** DOCUMENT ME! */
+    private static ResourceBundle RESOURCE_BUNDLE = null;
+
+    /**
+     * Inicializa la clase con el locale adecuado
+     *
+     * @param loc Locale de la aplicaci�n
+     */
+    public static void init(Locale loc) {
+    	return;
+    }
+
+    /**
+     * @param strLocale. Ejemplo: va para valenciano
+     * Se trata de permitir coexistir el valenciano con el catal�n.
+     * El m�todo buscar� un fichero properties llamado "text_va.properties"
+     * para usarlo con RESOURCE_BUNDLE de donde sacar los mensajes
+     * traducidos.
+     */
+    public static void init(String strLocale) {
+    	return;
+    }
+    
+    
+    /**
+     * Obtiene el valor del recurso con clave 'key'
+     *
+     * @param key clave del recurso que se quiere obtener
+     *
+     * @return recurso que se quiere obtener o !key! en caso de no encontrarlo.
+     *         En dicho caso no se notifica al framework ya que  estos son los
+     *         mensajes propios de la aplicaci�n y deben de estar todos
+     */
+    public static String getString(String key) {
+        return org.gvsig.i18n.Messages.getText(key, "org.gvsig.andami.messages.Messages");
+    }
+    
+    public static String get(String key) {
+        return org.gvsig.i18n.Messages.getText(key, "org.gvsig.andami.messages.Messages");
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/Messages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/ProgressListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/ProgressListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/ProgressListener.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.messages;
+
+import java.util.EventListener;
+
+
+/**
+ * Interfaz implementada por las extensiones que quieran informar del estado de
+ * su ejecuci�n. Por ejemplo un extension que tarda mucho en ejecutarse puede
+ * implementar esta interfaz y a�adirse como ProgressListener de la
+ * aplicacion. De esta manera la aplicaci�n le pedir� su estado a intervalos
+ * regulares de tiempo y mostrar� esta informaci�n en la barra de estado
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface ProgressListener extends EventListener {
+    /**
+     * M�todo invocado a intervalos regulares por la aplicaci�n y en el que se
+     * debe devolver el estado de una supuesta ejecuci�n
+     *
+     * @return Cadena que se env�a a la aplicaci�n
+     */
+    public String getProgress();
+
+    /**
+     * Devuelve un porcentaje que indica el progreso de la tarea
+     *
+     * @return n�mero del 0 al 100
+     */
+    public int getProgressValue();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/ProgressListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationListener.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.messages;
+
+/**
+ * Interfaz que deber�n de implementar todas las clases que quieran recibir
+ * informaci�n sobre los mensajes de informaci�n, de warning y de error que
+ * recibe la aplicaci�n
+ */
+public interface NotificationListener {
+    /**
+     * M�todo invocado cuando la aplicaci�n recibe mensajes de error
+     *
+     * @param app contexto de la aplicaci�n
+     * @param text Texto del mensaje
+     */
+    public void errorEvent(MessageEvent e);
+
+    /**
+     * M�todo invocado cuando la aplicaci�n recibe mensajes de warning
+     *
+     * @param app contexto de la aplicaci�n
+     * @param text Texto del mensaje
+     */
+    public void warningEvent(MessageEvent e);
+
+    /**
+     * M�todo invocado cuando la aplicaci�n recibe mensajes de informaci�n
+     *
+     * @param app contexto de la aplicaci�n
+     * @param text Texto del mensaje
+     */
+    public void infoEvent(MessageEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LocaleManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LocaleManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LocaleManager.java	(revision 42196)
@@ -0,0 +1,39 @@
+package org.gvsig.andami;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Locale;
+import java.util.Set;
+
+public interface LocaleManager {
+
+    public static final Locale SPANISH = new Locale("es");
+
+    public static final Locale ENGLISH = new Locale("en");
+
+    public Set<Locale> getDefaultLocales();
+
+    public Set<Locale> getInstalledLocales();
+
+    public Locale getDefaultSystemLocale();
+
+    public Locale getCurrentLocale();
+
+    public void setCurrentLocale(Locale locale);
+
+    public boolean installLocale(Locale locale);
+
+    public boolean uninstallLocale(Locale locale);
+
+    public boolean installLocales(URL localesFile);
+
+    public File getResourcesFolder();
+
+    public Locale[] getLocaleAlternatives(Locale locale);
+
+    public String getLanguageDisplayName(Locale locale);
+
+    public String getLocaleDisplayName(Locale locale);
+
+    public Locale getNearestLocale(Locale locale);
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/fonts/FontUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/fonts/FontUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/fonts/FontUtils.java	(revision 42196)
@@ -0,0 +1,182 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.fonts;
+
+import java.awt.Font;
+import java.awt.GraphicsEnvironment;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+
+import javax.swing.UIManager;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Several methods to manage the user interface fonts.
+ * 
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public class FontUtils {
+	private static Logger logger = LoggerFactory.getLogger(FontUtils.class);
+
+	/**
+	 * Changes the default UIManager font to the provided font.
+	 * 
+	 * @param fontName
+	 */
+	public static void setFont(String fontName) {
+		String[] fieldList = {
+				"Button.font",
+				"CheckBox.font",
+				"CheckBoxMenuItem.font",
+				"ColorChooser.font",
+				"ComboBox.font",
+				"DesktopIcon.font",
+				"EditorPane.font",
+				"FormattedTextField.font",
+				"Label.font",
+				"List.font",
+				"Menu.font",
+				"MenuBar.font",
+				"MenuItem.font",
+				"OptionPane.font",
+				"Panel.font",
+				"PasswordField.font",
+				"PopupMenu.font",
+				"ProgressBar.font",
+				"RadioButton.font",
+				"RadioButtonMenuItem.font",
+				"ScrollPane.font",
+				"Slider.font",
+				"Spinner.font",
+				"TabbedPane.font",
+				"Table.font",
+				"TableHeader.font",
+				"TextArea.font",
+				"TextField.font",
+				"TextPane.font",
+				"TitledBorder.font",
+				"ToggleButton.font",
+				"ToolBar.font",
+				"ToolTip.font",
+				"Tree.font",
+				"Viewport.font",
+				"InternalFrame.titleFont"
+		} ;
+		
+		Font font;
+		
+		for (int i = fieldList.length-1; i>=0; i--) {
+			font = UIManager.getFont(fieldList[i]);
+			if (font!=null)
+				UIManager.put(fieldList[i], new Font(fontName, Font.PLAIN, font.getSize()));
+		}
+	}
+	
+	/**
+	 * Inits the UIManager fonts, so that it can display current's language
+	 * symbols. The font is only changed when necessary.
+	 */
+	public static void initFonts() {
+		// conservative behaviour: we just change the font, if the default one
+		// can't correctly display the current language
+		Font defaultFont = UIManager.getFont("Label.font");
+		if (defaultFont==null) {
+			return;
+		}
+		if (defaultFont.canDisplayUpTo(Messages.getString("MDIFrame.quiere_salir"))==-1) {
+			logger.debug("Fonts configuration was not necessary");
+			return;			
+		}
+
+		
+		Font[] allfonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
+		HashSet workingFonts = new HashSet();
+		
+		for (int i=allfonts.length-1; i>=0; i--) {			
+			if (allfonts[i].canDisplayUpTo(Messages.getString("MDIFrame.quiere_salir"))==-1) {
+				workingFonts.add(allfonts[i].getName());
+			}
+		}
+		
+		// try to set the preferred font
+		String[] preferredFonts = getPreferedFonts(Locale.getDefault().getLanguage());
+		for (int i=0;i<preferredFonts.length; i++) {
+			if (workingFonts.contains(preferredFonts[i])){
+				setFont(preferredFonts[i]);
+				PluginServices.getLogger().info("FontSet: "+preferredFonts[i]);
+				return;
+			}
+		}
+		
+		// try to set any working font
+		Iterator iterator = workingFonts.iterator();
+		
+		if (iterator.hasNext()) {
+			String fontName = (String) iterator.next();
+			setFont(fontName);
+			PluginServices.getLogger().info("FontSet: "+fontName);	
+		}
+	}
+	
+	/**
+	 * Returns an ordered list of preferred fonts for the provided language.
+	 * As there is several fonts which can be used to display each language,
+	 * this list provides a hint about which is the more suitable font for
+	 * this language.
+	 * 
+	 * This method does not check whether the fonts are available in the
+	 * running system.
+	 * 
+	 * @param lang
+	 * @return
+	 */
+	private static String [] getPreferedFonts(String lang) {
+		//TODO this should be read from a file, for each language
+		if (lang.equals("zh")) {
+			String []preferredChineseFonts = {
+					"AR PL KaitiM GB",
+					"AR PL SungtiL GB",
+					"Kochi Gothic",
+					"SimSun"
+			} ;
+			return preferredChineseFonts;
+		}
+		return new String[0];
+	}
+	
+	private static void listSystemFonts() {
+		Font[] allfonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
+
+		for (int i=allfonts.length-1; i>=0; i--) {
+			System.out.println(allfonts[i].getName()+" --- "+allfonts[i].getFontName());
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/fonts/FontUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/MultiSplashWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/MultiSplashWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/MultiSplashWindow.java	(revision 42196)
@@ -0,0 +1,265 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.andami.ui.splash;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.RenderingHints;
+import java.awt.Toolkit;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JProgressBar;
+import javax.swing.JWindow;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.ui.theme.Theme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+public class MultiSplashWindow extends JWindow implements TimerCallBack,
+    MouseListener {
+	private static final Logger logger = LoggerFactory.getLogger(MultiSplashWindow.class);
+	
+    private static final long serialVersionUID = 572592158521767258L;
+    private JProgressBar pb;
+    private int progress = 0;
+    private JLabel lblStatus;
+    private Timer timer;
+    private int numLogos = 0;
+    private ImageIcon[] img = null;
+    private Dimension splashDimension;
+    private int index = 0;
+    private int current;
+    private int lastIndex = -1;
+    private Theme theme;
+    private long[] timers;
+
+    private String version="";
+    private String[] versions=null;
+    private Point point=new Point(270,240);
+    private Point[] points=null;
+    private int fontsize=18;
+    private int[] fontSizes=null;
+    private Color fontcolor=new Color(80,170,240);
+    private Color[] fontColors=null;
+
+    public MultiSplashWindow(Frame f, Theme theme, int progressBarStepCount) {
+        super(f);
+        this.theme = theme;
+        this.timers = theme.getTimers();
+        lblStatus = new JLabel(Messages.getString("SplashWindow.Iniciando"));
+        lblStatus.setBorder(BorderFactory.createEtchedBorder());
+        lblStatus.setBackground(Color.WHITE);
+
+        pack();
+        pb = new JProgressBar(0, progressBarStepCount);
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(lblStatus, BorderLayout.NORTH);
+        getContentPane().add(pb, BorderLayout.SOUTH);
+
+        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+
+        init();
+        setLocation((screenSize.width / 2) - (splashDimension.width / 2),
+            (screenSize.height / 2) - (splashDimension.height / 2));
+        index = 0;
+        setVisible(true);
+        this.addMouseListener(this);
+    }
+
+    public void init() {
+        img = theme.getSplashImages();
+        numLogos = img.length;
+
+        if (numLogos == 0) {
+            numLogos = 1;
+            img = new ImageIcon[1];
+            img[0] = PluginServices.getIconTheme().get("splash-default"); 
+            timers = new long[1];
+            timers[0] = 1000L;
+        }
+        versions=theme.getVersions();
+        points=theme.getPositions();
+        fontSizes=theme.getFontSizes();
+        fontColors=theme.getFontColors();
+        int splashWidth = img[0].getIconWidth();
+        int splashHeight = img[0].getIconHeight();
+
+        for (int i = 1; i < numLogos; i++) {
+            splashWidth = Math.max(splashWidth, img[i].getIconWidth());
+            splashHeight = Math.max(splashHeight, img[i].getIconHeight());
+        }
+
+        splashDimension = new Dimension(splashWidth, splashHeight);
+        setSize(splashDimension.width, splashDimension.height + 45);
+
+        start();
+    }
+
+    public void paint(Graphics g) {
+        if (lastIndex == current) {
+            return;
+        }
+
+        super.paint(g);
+
+        if ((img == null) || (img[current] == null)) {
+            return;
+        }
+
+        ImageIcon image = img[current];
+        g.drawImage(image.getImage(),
+            (getWidth() / 2) - (image.getIconWidth() / 2),
+            ((getHeight() / 2) - (image.getIconHeight() / 2)), this);
+
+        // Activate antialias for text
+        if (g instanceof Graphics2D) {
+            ((Graphics2D) g).setRenderingHint(
+                RenderingHints.KEY_TEXT_ANTIALIASING,
+                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+        }
+
+        Font font = new Font("SansSerif", Font.BOLD, fontsize);
+        if (fontSizes.length>0 && fontSizes[current]!=0) {
+            font = new Font("SansSerif", Font.BOLD, fontSizes[current]);
+        }
+    	g.setFont(font);
+
+    	Color color=fontcolor;
+        if (fontColors.length>0 && fontColors[current]!=null) {
+        	color=fontColors[current];
+        }
+        g.setColor(color);
+
+        String ver=version;
+        if (versions.length>0 && versions[current]!=null) {
+        	ver=versions[current];
+        }
+
+        Point p=point;
+        if (points.length>0 && points[current]!=null){
+        	p=points[current];
+        }
+
+        g.drawString(PluginServices.getText(this,ver),(int)p.getX(),(int)p.getY());
+
+        lastIndex = current;
+    }
+
+    public void tick() {
+        current = index;
+        timer.setInterval(timers[current]);
+        repaint();
+        index++;
+
+        if (index >= numLogos) {
+            index = 0;
+        }
+    }
+
+    public void start() {
+        timer = new Timer(this, 1000);
+        timer.start();
+    }
+
+    /**
+     * Cierra la ventana
+     */
+    public void close() {
+    	if( this.progress != this.pb.getMaximum() ) {
+    		logger.warn("Max value of launch progress can be set to "+this.progress);
+    	}
+        setVisible(false);
+        stop();
+        dispose();
+    }
+
+    public void stop() {
+        timer.stop();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param args DOCUMENT ME!
+     */
+    public static void main(String[] args) {
+        Frame frame = new Frame();
+        Theme theme = new Theme();
+        MultiSplashWindow ba = new MultiSplashWindow(frame, theme, 5);
+        ba.setVisible(true);
+        ba.setSize(500, 500);
+        ba.init();
+        ba.start();
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.AppLoadingListener#process(int)
+     */
+    public void process(int p, String str) {
+        lblStatus.setText(str);
+        if( this.progress < p ) {
+            this.progress = p;
+        }
+        if (pb.getValue() != this.progress && this.progress <= pb.getMaximum() ) {
+            pb.setValue(this.progress);
+        }
+        doLayout();
+        repaint();
+    }
+
+    public void process(String str) {
+        lblStatus.setText(str);
+        this.progress++;
+        if( this.progress <= pb.getMaximum() ) {
+        	pb.setValue(this.progress);
+        }
+        doLayout();
+        repaint();
+    }
+
+    public void mouseClicked(MouseEvent e) {
+        this.setVisible(false);
+    }
+
+	public void mouseEntered(MouseEvent e) { }
+	public void mouseExited(MouseEvent e) { }
+	public void mousePressed(MouseEvent e) { }
+	public void mouseReleased(MouseEvent e) { }
+    }
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/MultiSplashWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/TimerCallBack.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/TimerCallBack.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/TimerCallBack.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.splash;
+// This interface defines a callback for the Timer class
+
+public interface TimerCallBack
+{
+     public void tick();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/TimerCallBack.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/Timer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/Timer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/Timer.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.splash;
+/**
+ * This class implements an interval timer. It calls
+ * the tick method in the callback interface after
+ * a fixed number of milliseconds (indicated by the
+ * interval variable). It measures the amount of time spent
+ * in the tick method and adjusts for it.
+ * To start up a timer with this class, create it with
+ * a callback and the number of milliseconds in the interval
+ * and then call the start method:
+ * <PRE>
+ *
+ *    Timer timer = new Timer(this, 2000);
+	// 2 second interval
+ *    timer.start();
+ *
+ * </PRE>
+ *
+ * @author Mark Wutka
+ */
+
+public class Timer extends Object implements Runnable
+{
+
+     protected Thread timerThread;
+
+/** The number of milliseconds in the interval*/
+     protected long interval;
+
+/** The callback interface containing the tick method */
+     protected TimerCallBack callback;
+
+     public Timer()
+     {
+     }
+
+     public Timer(TimerCallBack callback)
+     {
+          this.callback = callback;
+     }
+
+     public Timer(long interval)
+     {
+          this.interval = interval;
+     }
+
+     public Timer(TimerCallBack callback, long interval)
+     {
+          this.callback = callback;
+          this.interval = interval;
+     }
+
+/** returns the number of milliseconds in the interval */
+     public long getInterval()
+     {
+          return interval;
+     }
+
+/** sets the number of milliseconds in the interval
+ * @param newInterval the new number of milliseconds
+ */
+     public void setInterval(long newInterval)
+     {
+          interval = newInterval;
+     }
+
+/** returns the callback interface */
+     public TimerCallBack getCallback()
+     {
+          return callback;
+     }
+
+/** changes the callback interface
+ * @param callback the new callback
+ */
+     public void setCallback(TimerCallBack callback)
+     {
+          this.callback = callback;
+     }
+
+/** starts the timer */
+     public void start()
+     {
+          timerThread = new Thread(this);
+          timerThread.start();
+     }
+
+/** stops the timer */
+     public void stop()
+     {
+    	  timerThread.interrupt();
+    	  timerThread = null;
+     }
+
+     public void run()
+     {
+          while (true)
+          {
+// Check the current time
+               long startTime = System.currentTimeMillis();
+
+// If there is a callback, call it
+               if (callback != null)
+               {
+                    callback.tick();
+               }
+
+// Check the time again
+               long endTime = System.currentTimeMillis();
+
+// The amount of time to sleep is the interval minus the time spent
+// in the tick routine
+               long sleepTime = interval - (endTime - startTime);
+
+// If you've passed the next interval, hurry up and call the next tick
+               if (sleepTime <= 0) continue;
+
+               try {
+            	  Thread.sleep(sleepTime);
+               } catch (Exception insomnia) {
+               } catch (Throwable insomnia) {
+               }
+          }
+     }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/Timer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/AndamiEventQueue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/AndamiEventQueue.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/AndamiEventQueue.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui;
+
+import java.awt.AWTEvent;
+import java.awt.EventQueue;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class AndamiEventQueue extends EventQueue {
+	private static Logger logger = LoggerFactory.getLogger(AndamiEventQueue.class);
+	
+	protected void dispatchEvent(AWTEvent event){
+		try{
+			super.dispatchEvent(event);
+		} catch(RuntimeException e){
+		    
+		    if (canShowWindow(e, event)) {
+		        NotificationManager.addError(e);//Messages.getString("PluginServices.Bug en el c�digo"), e);
+		    } else {
+                try {
+                    PluginServices.getMainFrame().getStatusBar().message(e.getMessage(), JOptionPane.ERROR_MESSAGE);
+                } catch(Throwable ex) {
+                    // Ignora cualquier error que se produzca intentando mostrar el mensaje de error y nos
+                    // conformaremos con que este en el log.
+                }
+                logger.info("Error dispaching event",e);
+			}
+			
+		} catch (Error e){
+			NotificationManager.addError(
+			    Messages.getString("Error de la applicacion.  \nEs conveniente que salga de la aplicaci�n\n\n"+e.getLocalizedMessage()), e);
+		}
+	}
+	
+	private boolean canShowWindow(Throwable th, AWTEvent event) {
+	    
+	    try {
+	        if( event instanceof MouseEvent ) {
+	            MouseEvent me = (MouseEvent)event;
+	            if( me.getButton() == 0 && me.getClickCount()==0 ) {
+	                // Intentamos que los errores que se produzcan con los eventos de movimiento del raton
+                    // no provoquen la aparicion de la ventana de errores ya que llega a bloquear al usuario.
+                    // Intentaremos sacarlos en la barra de estado si podemos.
+	                return false;
+	            }
+	        }
+	        StackTraceElement[] stack_ee = th.getStackTrace();
+	        for (int i=0; i<stack_ee.length; i++) {
+	            StackTraceElement se = stack_ee[i];
+	            if (se.getClassName().startsWith("org.gvsig.fmap.mapcontrol.MapControl")) {
+	                return false;
+	            }
+	        }
+	    } catch (Throwable t) {
+	        
+	    }
+        return true;
+	    
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/AndamiEventQueue.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.jfrm
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.jfrm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardAndami.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardAndami.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardAndami.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.wizard;
+
+import java.awt.BorderLayout;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+
+
+public class WizardAndami extends JPanel implements IWindow {
+	WindowInfo viewInfo = null;
+	WizardPanelWithLogo wizardPanel;
+
+	// No deber�an necesitarse un FinishAction y un CancelAction, pero bueno,
+	// lo mantengo por ahora.
+	private class CloseAction extends FinishAction
+	{
+		IWindow v;
+		public CloseAction(IWindow view)
+		{
+			super(wizardPanel.getWizardComponents());
+			v = view;
+		}
+		public void performAction() {
+			PluginServices.getMDIManager().closeWindow(v);
+		}
+
+	}
+	private class CloseAction2 extends CancelAction
+	{
+
+		IWindow v;
+		public CloseAction2(IWindow view)
+		{
+			super(wizardPanel.getWizardComponents());
+			v = view;
+		}
+		public void performAction() {
+			PluginServices.getMDIManager().closeWindow(v);
+		}
+
+	}
+
+
+	public WizardAndami(ImageIcon logo)
+	{
+		wizardPanel = new WizardPanelWithLogo(logo);
+		CloseAction closeAction = new CloseAction(this);
+		CloseAction2 closeAction2 = new CloseAction2(this);
+		wizardPanel.getWizardComponents().setFinishAction(closeAction);
+		wizardPanel.getWizardComponents().setCancelAction(closeAction2);
+
+		this.setLayout(new BorderLayout());
+		this.add(wizardPanel, BorderLayout.CENTER);
+	}
+
+	public DefaultJWizardComponents getWizardComponents()
+	{
+		return wizardPanel.getWizardComponents();
+	}
+
+
+	public WindowInfo getWindowInfo() {
+		if (viewInfo == null)
+		{
+			viewInfo = new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
+		}
+		return viewInfo;
+	}
+
+	public Object getWindowProfile() {
+		// TODO Auto-generated method stub
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardAndami.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.wizard;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+import jwizardcomponent.common.SimpleButtonPanel;
+
+public class WizardPanelWithLogo extends JPanel {
+	  DefaultJWizardComponents wizardComponents;
+
+	  JPanel buttonPanel;
+	  JLabel statusLabel = new JLabel();
+
+	  ImageIcon logo;
+
+	  public WizardPanelWithLogo(ImageIcon logo) {
+	    this.logo = logo;
+	    wizardComponents = new DefaultJWizardComponents();
+	    init();
+	  }
+
+	  private void init() {
+	    
+
+	    JPanel logoPanel = new JPanel();
+
+	    String fileString;
+	    if (logo.toString().indexOf("file:") < 0 &&
+	        logo.toString().indexOf("http:") < 0) {
+	      fileString = "file:///" +System.getProperty("user.dir") +"/"
+	                        +logo.toString();
+	      fileString = fileString.replaceAll("\\\\", "/");
+	    } else {
+	      fileString = logo.toString();
+	    }
+	    logoPanel.add(new JLabel(logo));
+	    logoPanel.setBackground(Color.WHITE);
+	    this.setLayout(new BorderLayout());
+	    this.add(logoPanel, BorderLayout.WEST);
+	    this.add(wizardComponents.getWizardPanelsContainer(),
+	    							BorderLayout.CENTER);
+
+	    JPanel auxPanel = new JPanel(new BorderLayout());
+	    auxPanel.add(new JSeparator(), BorderLayout.NORTH);
+
+	    buttonPanel = new SimpleButtonPanel(wizardComponents);
+	    auxPanel.add(buttonPanel);
+	    this.add(auxPanel, BorderLayout.SOUTH);
+	    
+
+	    wizardComponents.setFinishAction(new FinishAction(wizardComponents) {
+	      public void performAction() {
+	        // dispose();
+	      }
+	    });
+	    wizardComponents.setCancelAction(new CancelAction(wizardComponents) {
+	      public void performAction() {
+	        // dispose();
+	      }
+	    });
+	  }
+
+	  public DefaultJWizardComponents getWizardComponents(){
+	    return wizardComponents;
+	  }
+
+	  public void setWizardComponents(DefaultJWizardComponents aWizardComponents){
+	    wizardComponents = aWizardComponents;
+	  }
+
+	  public void show() {
+	    wizardComponents.updateComponents();
+	    super.setVisible(true);
+	  }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java	(revision 42196)
@@ -0,0 +1,693 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.wizard;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.gui.beans.swing.JButton;
+
+
+/**
+ * Ask for elements to save before application exit
+ *
+ *
+ */
+public class UnsavedDataPanel extends JPanel implements IWindow, ActionListener {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -4745219917358767905L;
+
+
+	private static ImageIcon blanckIcon = null;
+	private JPanel pResources = null;
+	private JPanel pButtons = null;
+	private JScrollPane pScrollList = null;
+	private myList list = null;
+	private JLabel lblDescription = null;
+	private JButton botSave = null;
+	private JButton botDiscard = null;
+	private JButton botDontExit = null;
+	private JPanel pActionButtons = null;
+	private JPanel pSelectionButtons = null;
+	private JButton botSelectAll = null;
+	private JButton botDeselectAll = null;
+
+	private ArrayList listeners = new ArrayList();
+	private JLabel lblResourceDescription = null;
+	private IUnsavedData[] unsavedDataList;
+	private String windowTitle = PluginServices.getText(this, "save_resources");
+
+
+
+	/**
+	 * This is the default constructor
+	 */
+	public UnsavedDataPanel(IUnsavedData[] unsavedDatalist) {
+		super();
+		initialize();
+		this.setUnsavedDataArray(unsavedDatalist);
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		BorderLayout borderLayout = new BorderLayout();
+		borderLayout.setHgap(5);
+		borderLayout.setVgap(5);
+		lblDescription = new JLabel();
+		lblDescription.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
+		lblDescription.setText(PluginServices.getText(this, "select_resources_to_save_before_exit"));
+		lblDescription.setPreferredSize(new Dimension(497, 30));
+		lblDescription.setName("lblDescription");
+		this.setLayout(borderLayout);
+		this.setSize(396, 272);
+		this.add(getPResources(), java.awt.BorderLayout.CENTER);
+		this.add(getPButtons(), java.awt.BorderLayout.SOUTH);
+		this.add(lblDescription, BorderLayout.NORTH);
+	}
+
+	/**
+	 * This method initializes pResources
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPResources() {
+		if (pResources == null) {
+			pResources = new JPanel();
+			pResources.setLayout(new BorderLayout());
+			pResources.add(getPScrollList(), BorderLayout.CENTER);
+			// pResources.add(getLblResourceDescription(), BorderLayout.SOUTH);
+		}
+		return pResources;
+	}
+
+
+	/**
+	 * This method initializes lblResourceDescription
+	 *
+	 * @return javax.swing.JLabel
+	 */
+	private JLabel getLblResourceDescription() {
+		if (lblResourceDescription == null) {
+			lblResourceDescription = new JLabel();
+			lblResourceDescription.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
+			lblResourceDescription.setText("");
+			lblResourceDescription.setPreferredSize(new Dimension(38, 50));
+			lblResourceDescription.setName("lblResourceDescription");
+		}
+		return lblResourceDescription;
+	}
+
+
+	/**
+	 * This method initializes pButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			BorderLayout borderLayout2 = new BorderLayout();
+			borderLayout2.setHgap(5);
+			borderLayout2.setVgap(5);
+			pButtons = new JPanel();
+			pButtons.setLayout(borderLayout2);
+			pButtons.add(getPSelectionButtons(), BorderLayout.NORTH);
+			pButtons.add(getPActionButtons(), BorderLayout.SOUTH);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes pScrollList
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getPScrollList() {
+		if (pScrollList == null) {
+			pScrollList = new JScrollPane();
+			pScrollList.setPreferredSize(new java.awt.Dimension(350,350));
+			pScrollList.setViewportView(getList());
+		}
+		return pScrollList;
+	}
+
+	/**
+	 * This method initializes list
+	 *
+	 * @return javax.swing.JList
+	 */
+	private myList getList() {
+		if (list == null) {
+			list = new myList();
+			list.setBackground(Color.white);
+		}
+		return list;
+	}
+
+	/**
+	 * This method initializes botSave
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotSave() {
+		if (botSave == null) {
+			botSave = new JButton();
+			botSave.setName("botSave");
+			botSave.setToolTipText(PluginServices.getText(this, "save_selected_resources_and_exit"));
+			botSave.setText(PluginServices.getText(this, "ok"));
+			botSave.setActionCommand("Accept");
+			botSave.addActionListener(this);
+		}
+		return botSave;
+	}
+
+	/**
+	 * This method initializes botDiscard
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotDiscard() {
+		if (botDiscard == null) {
+			botDiscard = new JButton();
+			botDiscard.setName("botDiscard");
+			botDiscard.setToolTipText(PluginServices.getText(this, "discard_changes_and_exit"));
+			botDiscard.setText(PluginServices.getText(this, "discard_changes"));
+			botDiscard.setActionCommand("Discard");
+			botDiscard.addActionListener(this);
+		}
+		return botDiscard;
+	}
+
+	/**
+	 * This method initializes botDontExit
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotDontExit() {
+		if (botDontExit == null) {
+			botDontExit = new JButton();
+			botDontExit.setName("botDontExit");
+			botDontExit.setToolTipText(PluginServices.getText(this, "cancel_the_application_termination"));
+			botDontExit.setText(PluginServices.getText(this, "cancelar"));
+			botDontExit.setActionCommand("Cancel");
+			botDontExit.addActionListener(this);
+		}
+		return botDontExit;
+	}
+
+	/**
+	 * This method initializes pActionButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPActionButtons() {
+		if (pActionButtons == null) {
+		    
+		    GridLayout gl = new GridLayout(1, 3, 8, 0);
+		    /*
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(FlowLayout.RIGHT);
+			*/
+			pActionButtons = new JPanel();
+			pActionButtons.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));
+			pActionButtons.setLayout(gl);
+			pActionButtons.setName("pActionButtons");
+			pActionButtons.add(getBotSave());
+			pActionButtons.add(getBotDiscard());
+			pActionButtons.add(getBotDontExit());
+		}
+		return pActionButtons;
+	}
+
+	/**
+	 * This method initializes pSelectionButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPSelectionButtons() {
+		if (pSelectionButtons == null) {
+		    GridLayout gl = new GridLayout(2, 3, 8, 8);
+		    /*
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(FlowLayout.LEFT);
+			*/
+			pSelectionButtons = new JPanel();
+			pSelectionButtons.setBorder(BorderFactory.createEmptyBorder(5,8,8,8));
+			pSelectionButtons.setLayout(gl);
+			pSelectionButtons.setName("pSelectionButtons");
+			pSelectionButtons.add(getBotSelectAll());
+			pSelectionButtons.add(new JLabel());
+			pSelectionButtons.add(new JLabel());
+			// new row
+			pSelectionButtons.add(getBotDeselectAll());
+			pSelectionButtons.add(new JLabel());
+            pSelectionButtons.add(new JLabel());
+			
+		}
+		return pSelectionButtons;
+	}
+
+	/**
+	 * This method initializes botSelectAll
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotSelectAll() {
+		if (botSelectAll == null) {
+			botSelectAll = new JButton();
+			botSelectAll.setText(PluginServices.getText(this, "select_all"));
+			botSelectAll.setName("botSelectAll");
+			botSelectAll.setToolTipText(PluginServices.getText(this, "select_all_resources"));
+			botSelectAll.setActionCommand("SelectAll");
+			botSelectAll.addActionListener(this);
+		}
+		return botSelectAll;
+	}
+
+	/**
+	 * This method initializes botDeselectAll
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotDeselectAll() {
+		if (botDeselectAll == null) {
+			botDeselectAll = new JButton();
+			botDeselectAll.setName("botDeselectAll");
+			botDeselectAll.setToolTipText(PluginServices.getText(this, "deselect_all_resources"));
+			botDeselectAll.setText(PluginServices.getText(this, "deselect_all"));
+			botDeselectAll.setActionCommand("DeselectAll");
+			botDeselectAll.addActionListener(this);
+		}
+		return botDeselectAll;
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi = new WindowInfo(WindowInfo.MODALDIALOG
+				| WindowInfo.RESIZABLE
+				| WindowInfo.MAXIMIZABLE);
+		wi.setTitle(windowTitle);
+		wi.setHeight(270);
+		wi.setWidth(450);
+		return wi;
+	}
+
+	public void setWindowTitle(String windowTitle) {
+		this.windowTitle = windowTitle;
+	}
+
+	public void setCancelText(String text, String tooltipText) {
+		getBotDontExit().setToolTipText(tooltipText);
+		getBotDontExit().setText(text);
+	}
+
+	public void setDiscardText(String text, String tooltipText) {
+		getBotDiscard().setToolTipText(tooltipText);
+		getBotDiscard().setText(text);
+	}
+
+	public void setAcceptText(String text, String tooltipText) {
+		getBotSave().setToolTipText(tooltipText);
+		getBotSave().setText(text);
+	}
+
+	public void setHeaderText(String text) {
+		lblDescription.setText(text);
+	}
+
+	/**
+	 * Register a listener to call
+	 *
+	 * @param a UnsavedDataPanelListener instance
+	 */
+	public void addActionListener(UnsavedDataPanelListener listener){
+		this.listeners.add(listener);
+	}
+
+	public void removeActionListener(UnsavedDataPanelListener listener){
+		this.listeners.remove(listener);
+	}
+
+	public class UnsavedDataPanelListener {
+		public void cancel(UnsavedDataPanel panel){
+
+		}
+
+		public void accept(UnsavedDataPanel panel){
+
+		}
+
+		public void discard(UnsavedDataPanel panel) {
+
+		}
+	}
+
+	private class myList extends JPanel{
+
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = 3179254463477354501L;
+
+		private GridBagConstraints constraints;
+		private GridBagConstraints constraintsLast;
+
+		public myList(){
+			super();
+			initialize();
+		}
+
+		private void initialize(){
+			this.setLayout(new GridBagLayout());
+			this.constraints = new GridBagConstraints();
+			this.constraints.fill = GridBagConstraints.HORIZONTAL;
+			this.constraints.gridwidth = GridBagConstraints.REMAINDER;
+			this.constraints.weightx =0;
+			this.constraints.gridx =0;
+			this.constraints.gridy=0;
+			this.constraints.anchor = GridBagConstraints.WEST;
+			this.constraints.insets =new Insets(3,3,0,0);
+
+			this.constraintsLast = new GridBagConstraints();
+			this.constraintsLast.fill = GridBagConstraints.BOTH;
+			this.constraintsLast.gridheight = GridBagConstraints.REMAINDER;
+			this.constraintsLast.gridwidth = GridBagConstraints.REMAINDER;
+			this.constraintsLast.gridx =0;
+			this.constraintsLast.weightx =1;
+			this.constraintsLast.weighty =1;
+			this.constraintsLast.anchor = GridBagConstraints.FIRST_LINE_START;
+
+
+		}
+
+		public void addItems(IUnsavedData[] itemList){
+			int i;
+			this.removeAll();
+			if (itemList.length == 0){
+				return;
+			}
+
+			for (i=0;i< itemList.length;i++){
+				this.constraints.gridy = i;
+				this.add(newItem(itemList[i]), this.constraints);
+			}
+			this.constraintsLast.gridy=itemList.length;
+			this.add(new JLabel(),this.constraintsLast);
+
+		}
+		public int getItemsCount(){
+			return this.getComponentCount() -1;
+		}
+
+		public myUnsavedItem getItem(int i){
+			if (i>= this.getComponentCount()){
+				return null;
+			}
+			return (myUnsavedItem)this.getComponent(i);
+		}
+
+		private myUnsavedItem newItem(IUnsavedData itemData){
+			myUnsavedItem item;
+			item = new myUnsavedItem(itemData);
+			item.addMouseListener(new MouseListener(){
+				public void mouseClicked(MouseEvent e) {
+					myUnsavedItem item = (myUnsavedItem)e.getComponent();
+					getLblResourceDescription().setText(item.getDescription());
+				}
+				public void mouseEntered(MouseEvent e) {
+				}
+
+				public void mouseExited(MouseEvent e) {
+				}
+
+				public void mousePressed(MouseEvent e) {
+				}
+
+				public void mouseReleased(MouseEvent e) {
+				}
+
+			});
+			return item;
+		}
+
+	}
+
+	private class myUnsavedItem extends JPanel{
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = -6280057775368437349L;
+		private JCheckBox chkChecked;
+		private JLabel lblText;
+		private IUnsavedData dataItem;
+
+		public myUnsavedItem(IUnsavedData dataItem ){
+			super();
+			this.initialize();
+			this.setData(dataItem);
+		}
+
+		private void initialize(){
+			this.setOpaque(false);
+			BorderLayout layout = new BorderLayout();
+			layout.setHgap(5);
+			this.setLayout(layout);
+			this.add(this.getChkChecked(),BorderLayout.WEST);
+			this.add(this.getLblText(),BorderLayout.CENTER);
+		}
+
+		private JLabel getLblText() {
+			if (lblText == null){
+				lblText = new JLabel();
+				lblText.setName("lblText");
+			}
+			return lblText;
+		}
+
+		private JCheckBox getChkChecked() {
+			if (chkChecked == null){
+				chkChecked = new JCheckBox();
+				chkChecked.setName("chkChecked");
+				chkChecked.setSelected(true);
+				chkChecked.setOpaque(false);
+			}
+			return chkChecked;
+		}
+
+		public boolean isSelected(){
+			return getChkChecked().isSelected();
+		}
+
+		public void setSelected(boolean selected){
+			getChkChecked().setSelected(selected);
+		}
+
+		public void setData(IUnsavedData dataItem){
+			this.dataItem = dataItem;
+			JLabel lbl = getLblText();
+			if (dataItem.getIcon() != null){
+			    ImageIcon ii = IconThemeHelper.getImageIcon(dataItem.getIcon());
+				lbl.setIcon(ii);
+			} else{
+				lbl.setIcon(getBlanckIcon());
+			}
+			lbl.setText(dataItem.getResourceName());
+			getChkChecked().setSelected(true);
+		}
+
+		public IUnsavedData getData(){
+			return this.dataItem;
+		}
+
+		public String getDescription(){
+			return this.dataItem.getDescription();
+		}
+
+		private ImageIcon getBlanckIcon(){
+			if (blanckIcon== null){
+				BufferedImage buff =new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
+				blanckIcon = new ImageIcon(buff);
+			}
+			return blanckIcon;
+		}
+
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getActionCommand() == "Cancel"){
+			fireDontExitEvent();
+			return;
+		}
+		if (e.getActionCommand() == "Accept"){
+			fireAcceptEvent();
+			return;
+		}
+		if (e.getActionCommand() == "Discard") {
+			fireDiscardEvent();
+			return;
+		}
+		if (e.getActionCommand() == "SelectAll"){
+			selectAll();
+			return;
+		}
+		if (e.getActionCommand() == "DeselectAll"){
+			deselectAll();
+			return;
+		}
+	}
+
+	public void close(){
+		PluginServices.getMDIManager().closeWindow(this);
+
+	}
+
+	private void fireAcceptEvent() {
+		Iterator iter = this.listeners.iterator();
+		while (iter.hasNext()){
+			((UnsavedDataPanelListener)iter.next()).accept(this);
+		}
+	}
+
+	private void fireDiscardEvent() {
+		Iterator iter = this.listeners.iterator();
+		while (iter.hasNext()){
+			((UnsavedDataPanelListener)iter.next()).discard(this);
+		}
+	}
+
+	private void fireDontExitEvent() {
+		Iterator iter = this.listeners.iterator();
+		while (iter.hasNext()){
+			((UnsavedDataPanelListener)iter.next()).cancel(this);
+		}
+	}
+
+	private void setSelectedsAll( boolean selected){
+		int i;
+		myList theList = getList();
+		myUnsavedItem item;
+		for (i=0;i < theList.getItemsCount();i++){
+			item = (myUnsavedItem)theList.getItem(i);
+			item.setSelected(selected);
+		}
+		theList.doLayout();
+	}
+
+	public void deselectAll() {
+		this.setSelectedsAll(false);
+	}
+
+	public void selectAll() {
+		this.setSelectedsAll(true);
+	}
+
+
+	/**
+	 * Set the resorces to ask for
+	 *
+	 * @param IUnsavedData[] resources pending to save
+	 */
+	public void setUnsavedDataArray(IUnsavedData[] unsavedDatalist){
+		this.unsavedDataList = unsavedDatalist;
+		myList theList = getList();
+
+		theList.addItems(unsavedDatalist);
+		theList.validate();
+
+	}
+
+
+	private IUnsavedData[] getUnsavedData(boolean selected){
+		int i;
+		myList theList = getList();
+		ArrayList aList = new ArrayList();
+		myUnsavedItem item;
+		IUnsavedData[] result;
+
+		for (i=0;i < theList.getItemsCount();i++){
+			item = (myUnsavedItem)theList.getItem(i);
+			if (item.isSelected() == selected){
+				aList.add(item.getData());
+			}
+		}
+		result = new IUnsavedData[aList.size()];
+		System.arraycopy(aList.toArray(), 0, result, 0, aList.size());
+		return result;
+	}
+
+
+	/**
+	 * Returns the IUnsavedData selecteds for the user to save
+	 *
+	 * @return IUnsaveData[] to save
+	 */
+	public IUnsavedData[] getSelectedsUnsavedData(){
+		return this.getUnsavedData(true);
+
+	}
+
+	/**
+	 * Returns the IUnsavedData not selecteds for the user
+	 *
+	 * @return IUnsavedData[] to ignore
+	 */
+	public IUnsavedData[] getUnselectedsUnsavedData(){
+		return this.getUnsavedData(false);
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/theme/Theme.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/theme/Theme.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/theme/Theme.java	(revision 42196)
@@ -0,0 +1,412 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.theme;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Map;
+
+import javax.swing.ImageIcon;
+import javax.swing.UIManager;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.text.StrSubstitutor;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.tools.util.XMLUtils;
+import org.kxml2.io.KXmlParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * Personalization of the program according to the file xml with the necessary
+ * information.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Theme {
+
+    private static final Logger logger = LoggerFactory.getLogger(Theme.class);
+
+    public static final String CENTERED = "CENTERED";
+    public static final String EXPAND = "EXPAND";
+    public static final String MOSAIC = "MOSAIC";
+
+    private static final String ANDAMI_PROPERTIES = "AndamiProperties";
+    private static final String APPLICATION_IMAGES = "ApplicationImages";
+    private static final String SPLASH_IMAGES = "SplashImages";
+    private static final String SPLASH = "Splash";
+    private static final String PATH = "path";
+    private static final String TIMER = "timer";
+    private static final String ICON = "Icon";
+    private static final String APPLICATION_NAME = "ApplicationName";
+    private static final String PRIORITY = "priority";
+    private static final String VALUE = "value";
+    private static final String BACKGROUND_IMAGE = "BackgroundImage";
+    private static final String BACKGROUND_COLOR = "BackgroundColor";
+    private static final String WALLPAPER_TYPE = "WallpaperType";
+
+    private static final String VERSION = "version";
+    private static final String FONTPOSITIONX = "x";
+    private static final String FONTPOSITIONY = "y";
+
+    private static final String FONTSIZE = "fontsize";
+    private static final String FONTCOLOR = "color";
+
+    private ArrayList<String> images = new ArrayList<String>();
+    private String icon;
+    private ArrayList<String> timers = new ArrayList<String>();
+    private ArrayList<String> versions = new ArrayList<String>();
+    private ArrayList<String> fontColors = new ArrayList<String>();
+    private ArrayList<String> fontSizes = new ArrayList<String>();
+    private ArrayList<String> fontpositionsX = new ArrayList<String>();
+    private ArrayList<String> fontpositionsY = new ArrayList<String>();
+
+    private String name = null;
+    private String backgroundimage = null;
+    private Color backgroundColor = null;
+    private String wallpaperType = CENTERED;
+    private int priority = 0;
+
+    /**
+     * Spurce file of the theme *
+     */
+    private File source = null;
+    private StrSubstitutor strSubstitutor = null;
+
+    public Theme() {
+    }
+
+    public Theme(Map vars) {
+        this();
+        this.strSubstitutor = new StrSubstitutor(vars);
+    }
+
+    public File getSource() {
+        return source;
+    }
+
+    /**
+     * Read the file xml with the personalization.
+     *
+     * @param file xml
+     */
+    public void readTheme(File file) {
+        FileInputStream fis = null;
+        try {
+            String encoding = XMLUtils.getEncoding(file, "UTF-8");
+
+            fis = new FileInputStream(file);
+            KXmlParser parser = new KXmlParser();
+            parser.setInput(fis, encoding);
+
+            int tag = parser.nextTag();
+
+            if ( parser.getEventType() != XmlPullParser.END_DOCUMENT ) {
+                parser.require(XmlPullParser.START_TAG, null, ANDAMI_PROPERTIES);
+
+                while ( tag != XmlPullParser.END_DOCUMENT ) {
+                    //parser.next();
+                    switch (tag) {
+                    case XmlPullParser.START_TAG:
+                        if ( parser.getName().compareTo(ANDAMI_PROPERTIES) == 0 ) {
+                            parser.nextTag();
+                            if ( parser.getName().compareTo(APPLICATION_IMAGES) == 0 ) {
+                                int splashtag = parser.nextTag();
+                                if ( parser.getName().compareTo(SPLASH_IMAGES) == 0 ) {
+                                    splashtag = parser.nextTag();
+                                    boolean endSplash = false;
+
+                                    // parser.require(KXmlParser.START_TAG,null, SPLASH);
+                                    while ( (splashtag != XmlPullParser.END_DOCUMENT)
+                                            && !endSplash ) {
+                                        if ( splashtag == XmlPullParser.END_TAG ) {
+                                            splashtag = parser.nextTag();
+                                            continue;
+                                        }
+
+                                        if ( parser.getName().compareTo(SPLASH) == 0 ) {
+                                            images.add(fixPath(file, parser.getAttributeValue("", PATH)));
+                                            timers.add(parser.getAttributeValue("", TIMER));
+                                            versions.add(expand(parser.getAttributeValue("", VERSION)));
+                                            fontpositionsX.add(parser.getAttributeValue("", FONTPOSITIONX));
+                                            fontpositionsY.add(parser.getAttributeValue("", FONTPOSITIONY));
+                                            fontSizes.add(parser.getAttributeValue("", FONTSIZE));
+                                            fontColors.add(parser.getAttributeValue("", FONTCOLOR));
+
+                                            splashtag = parser.nextTag();
+                                        } else {
+                                            endSplash = true;
+                                        }
+                                    }
+                                }
+                                int tagOptions = XmlPullParser.START_TAG;
+                                while ( (tagOptions != XmlPullParser.END_TAG) ) {
+                                    if ( parser.getName().compareTo(BACKGROUND_IMAGE) == 0 ) {
+                                        backgroundimage = fixPath(file, parser.getAttributeValue("", PATH));
+                                        tag = parser.next();
+                                    } else if ( parser.getName().compareTo(BACKGROUND_COLOR) == 0 ) {
+                                        backgroundColor = parseColor(parser.getAttributeValue("", "color"));
+                                        tag = parser.next();
+                                    } else if ( parser.getName().compareTo(ICON) == 0 ) {
+                                        icon = fixPath(file, parser.getAttributeValue("", PATH));
+                                        tag = parser.next();
+                                    } else if ( parser.getName().compareTo(WALLPAPER_TYPE) == 0 ) {
+                                        wallpaperType = parser.getAttributeValue("", VALUE);
+                                        tag = parser.next();
+                                    }
+                                    tagOptions = parser.nextTag();
+
+                                }
+                            }
+                        }
+                        if ( parser.getName().compareTo(APPLICATION_NAME) == 0 ) {
+                            name = expand(parser.getAttributeValue("", VALUE));
+                            tag = parser.next();
+                        }
+                        if ( parser.getName().compareTo(PRIORITY) == 0 ) {
+                            String s = parser.getAttributeValue("", VALUE);
+                            try {
+                                this.priority = Integer.parseInt(s);
+                            } catch (Exception ex) {
+                                this.priority = 0;
+                            }
+                            tag = parser.next();
+                        }
+                        break;
+
+                    case XmlPullParser.END_TAG:
+                        break;
+
+                    case XmlPullParser.TEXT:
+                        // System.out.println("[TEXT]["+kxmlParser.getText()+"]");
+                        break;
+                    }
+                    tag = parser.next();
+                }
+            }
+
+            parser.require(XmlPullParser.END_DOCUMENT, null, null);
+            this.source = file;
+
+        } catch (FileNotFoundException ex) {
+            logger.warn("Can't open theme file '" + file.getAbsolutePath() + "'.", ex);
+
+        } catch (XmlPullParserException ex) {
+            logger.warn("Can't parse theme file '" + file.getAbsolutePath() + "'.", ex);
+
+        } catch (IOException ex) {
+            logger.warn("Can't read theme file '" + file.getAbsolutePath() + "'.", ex);
+
+        } finally {
+            IOUtils.closeQuietly(fis);
+        }
+    }
+
+    private String fixPath(File theme, String path) {
+        path = path.replace("$GVSIG_INSTALL", Launcher.getApplicationDirectory());
+        path = path.replace("$GVSIG_HOME", Launcher.getAppHomeDir());
+        path = path.replace("$GVSIG_PLUGINS", Launcher.getAndamiConfig().getPluginsDirectory());
+        File parent = theme.getParentFile().getAbsoluteFile();
+        File fpath = new File(path);
+        if ( !fpath.isAbsolute() ) {
+            fpath = new File(parent, path);
+        }
+        return fpath.getAbsolutePath();
+    }
+
+    /**
+     * Returns image to the splashwindow.
+     *
+     * @return ImageIcon[]
+     */
+    public ImageIcon[] getSplashImages() {
+        ImageIcon[] imgs = new ImageIcon[images.size()];
+
+        for ( int i = 0; i < images.size(); i++ ) {
+            imgs[i] = new ImageIcon(images.get(i));
+        }
+
+        return imgs;
+    }
+
+    public String getTypeDesktop() {
+        return wallpaperType;
+    }
+
+    /**
+     * Return the icon.
+     *
+     * @return ImageIcon
+     */
+    public ImageIcon getIcon() {
+        if ( icon == null ) {
+            return null;
+        }
+
+        try {
+            return new ImageIcon(icon);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * Return the backgroundimage.
+     *
+     * @return ImageIcon
+     */
+    public ImageIcon getBackgroundImage() {
+        if ( backgroundimage == null ) {
+            return null;
+        }
+
+        try {
+            return new ImageIcon(backgroundimage);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    public Color getBackgroundColor() {
+        if ( this.backgroundColor == null ) {
+            this.backgroundColor = (Color) UIManager.get("Desktop.background");
+        }
+        return this.backgroundColor;
+    }
+
+    /**
+     * Return the time of the splash images.
+     *
+     * @return long[]
+     */
+    public long[] getTimers() {
+        long[] tms = new long[timers.size()];
+
+        for ( int i = 0; i < tms.length; i++ ) {
+            tms[i] = Long.parseLong(timers.get(i));
+        }
+
+        return tms;
+    }
+
+    /**
+     * Return the name of program.
+     *
+     * @return String
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Return the text to overwrite the images.
+     *
+     * @return String[]
+     */
+    public String[] getVersions() {
+        return versions.toArray(new String[0]);
+    }
+
+    /**
+     * Return the position of text to overwrite the images.
+     *
+     * @return Point[]
+     */
+    public Point[] getPositions() {
+        Point[] points = new Point[fontpositionsX.size()];
+        for ( int i = 0; i < points.length; i++ ) {
+            try {
+                points[i] = new Point(Integer.valueOf(fontpositionsX.get(i)), Integer.valueOf(fontpositionsY.get(i)));
+            } catch (NumberFormatException e) {
+                NotificationManager.addInfo(PluginServices.getText(this, "incorrect_position"), e);
+            }
+        }
+        return points;
+    }
+
+    /**
+     * Return the font size text to overwrite the images.
+     *
+     * @return int[]
+     */
+    public int[] getFontSizes() {
+        int[] sizes = new int[fontSizes.size()];
+        for ( int i = 0; i < sizes.length; i++ ) {
+            try {
+                sizes[i] = Integer.valueOf(fontSizes.get(i));
+            } catch (NumberFormatException e) {
+                NotificationManager.addInfo(PluginServices.getText(this, "incorrect_size"), e);
+            }
+        }
+        return sizes;
+    }
+
+    /**
+     * Return the font color of text to overwrite the images.
+     *
+     * @return Color[]
+     */
+    public Color[] getFontColors() {
+        Color[] colors = new Color[fontColors.size()];
+        for ( int i = 0; i < colors.length; i++ ) {
+            try {
+                String s = fontColors.get(i);
+                colors[i] = parseColor(s);
+            } catch (Exception e) {
+                NotificationManager.addInfo(PluginServices.getText(this, "incorrect_color"), e);
+            }
+        }
+        return colors;
+    }
+
+    private Color parseColor(String s) {
+        if ( StringUtils.isEmpty(s) ) {
+            return null;
+        }
+        String[] rgb = s.split(",");
+        Color color = new Color(Integer.valueOf(rgb[0]), Integer.valueOf(rgb[1]), Integer.valueOf(rgb[2]));
+        return color;
+    }
+
+    private String expand(String value) {
+        if ( this.strSubstitutor == null ) {
+            return value;
+        }
+        return strSubstitutor.replace(value);
+    }
+
+    public int getPriority() {
+        return this.priority;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/theme/Theme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.java	(revision 42196)
@@ -0,0 +1,175 @@
+package org.gvsig.andami.ui;
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+
+public class DisablePluginsConflictingLayoutPanel extends JPanel
+{
+   /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+   @SuppressWarnings("rawtypes")
+   public JList pluginList = new JList();
+   public JButton buttonContinue = new JButton();
+   public JButton buttonClose = new JButton();
+   public JLabel lblConflict = new JLabel();
+   public JLabel lblSelectPluginToDisable = new JLabel();
+   public JLabel lblClickContinue = new JLabel();
+   public JLabel lblClickClose = new JLabel();
+
+   /**
+    * Default constructor
+    */
+   public DisablePluginsConflictingLayoutPanel()
+   {
+      initializePanel();
+   }
+
+   /**
+    * Adds fill components to empty cells in the first row and first column of the grid.
+    * This ensures that the grid spacing will be the same as shown in the designer.
+    * @param cols an array of column indices in the first row where fill components should be added.
+    * @param rows an array of row indices in the first column where fill components should be added.
+    */
+   void addFillComponents( Container panel, int[] cols, int[] rows )
+   {
+      Dimension filler = new Dimension(10,10);
+
+      boolean filled_cell_11 = false;
+      CellConstraints cc = new CellConstraints();
+      if ( cols.length > 0 && rows.length > 0 )
+      {
+         if ( cols[0] == 1 && rows[0] == 1 )
+         {
+            /** add a rigid area  */
+            panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
+            filled_cell_11 = true;
+         }
+      }
+
+      for( int index = 0; index < cols.length; index++ )
+      {
+         if ( cols[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
+      }
+
+      for( int index = 0; index < rows.length; index++ )
+      {
+         if ( rows[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
+      }
+
+   }
+
+   /**
+    * Helper method to load an image file from the CLASSPATH
+    * @param imageName the package and name of the file to load relative to the CLASSPATH
+    * @return an ImageIcon instance with the specified image file
+    * @throws IllegalArgumentException if the image resource cannot be loaded.
+    */
+   public ImageIcon loadImage( String imageName )
+   {
+      try
+      {
+         ClassLoader classloader = getClass().getClassLoader();
+         java.net.URL url = classloader.getResource( imageName );
+         if ( url != null )
+         {
+            ImageIcon icon = new ImageIcon( url );
+            return icon;
+         }
+      }
+      catch( Exception e )
+      {
+         e.printStackTrace();
+      }
+      throw new IllegalArgumentException( "Unable to load image: " + imageName );
+   }
+
+   /**
+    * Method for recalculating the component orientation for 
+    * right-to-left Locales.
+    * @param orientation the component orientation to be applied
+    */
+   public void applyComponentOrientation( ComponentOrientation orientation )
+   {
+      // Not yet implemented...
+      // I18NUtils.applyComponentOrientation(this, orientation);
+      super.applyComponentOrientation(orientation);
+   }
+
+   public JPanel createPanel()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblConflict.setName("lblConflict");
+      lblConflict.setText("Some of plugins installed conflict with each other.");
+      jpanel1.add(lblConflict,new CellConstraints(2,2,4,1,CellConstraints.FILL,CellConstraints.DEFAULT));
+
+      pluginList.setName("PluginList");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(pluginList);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,new CellConstraints(2,7,4,1,CellConstraints.FILL,CellConstraints.FILL));
+
+      buttonContinue.setActionCommand("Continue");
+      buttonContinue.setText("Continue");
+      jpanel1.add(buttonContinue,cc.xy(5,9));
+
+      buttonClose.setActionCommand("Close");
+      buttonClose.setName("buttonClose");
+      buttonClose.setText("Close");
+      jpanel1.add(buttonClose,cc.xy(3,9));
+
+      lblSelectPluginToDisable.setName("lblSelectPluginToDisable");
+      lblSelectPluginToDisable.setText("Select the plugins that you want to disable and click the continue button.");
+      jpanel1.add(lblSelectPluginToDisable,cc.xywh(2,3,4,1));
+
+      lblClickContinue.setName("lblClickContinue");
+      lblClickContinue.setText("You can click on continue button directly if you want to disable any plugins.");
+      jpanel1.add(lblClickContinue,cc.xywh(2,4,4,1));
+
+      lblClickClose.setName("lblClickClose");
+      lblClickClose.setText("Or click the close button to close the application.");
+      jpanel1.add(lblClickClose,cc.xywh(2,5,4,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6 },new int[]{ 1,2,3,4,5,6,7,8,9,10 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/MDIManagerLoadException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/MDIManagerLoadException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/MDIManagerLoadException.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui;
+
+/**
+ * 
+ */
+public class MDIManagerLoadException extends Exception{
+
+	/**
+	 * 
+	 */
+	public MDIManagerLoadException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 */
+	public MDIManagerLoadException(String message) {
+		super(message);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 * @param cause
+	 */
+	public MDIManagerLoadException(String message, Throwable cause) {
+		super(message, cause);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param cause
+	 */
+	public MDIManagerLoadException(Throwable cause) {
+		super(cause);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/MDIManagerLoadException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/ToolsWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/ToolsWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/ToolsWindowManager.java	(revision 42196)
@@ -0,0 +1,155 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class ToolsWindowManager implements WindowManager {
+
+    public void showWindow(JComponent contents, String title, MODE mode) {
+        int align;
+        switch(mode) {
+        case DIALOG:
+            align = GridBagConstraints.CENTER;
+            break;
+        case TOOL:
+            align = GridBagConstraints.FIRST_LINE_END;
+            break;
+        case WINDOW:
+        default:
+            align = GridBagConstraints.FIRST_LINE_START;
+            break;
+        }
+        showWindow(contents, title, mode, align);
+    }
+
+    public void showWindow(JComponent contents, String title, MODE mode, int align ) {
+        MDIManager manager = PluginServices.getMDIManager();
+        IWindow window = new Window(contents, title, mode);
+        manager.addWindow(window,align);
+    }
+
+    public class Window extends JPanel implements IWindow, ComponentListener {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = -6688594664366192449L;
+        protected WindowInfo windowInfo;
+        protected Object profile;
+        protected JComponent contents;
+
+        public Window(JComponent contents, String title, MODE mode) {
+            int code = WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE | WindowInfo.ICONIFIABLE;
+            switch(mode) {
+            case DIALOG:
+                code |= WindowInfo.MODALDIALOG;
+                profile = WindowInfo.DIALOG_PROFILE;
+                break;
+            case TOOL:
+                code |= WindowInfo.MODELESSDIALOG | WindowInfo.PALETTE;
+                profile = WindowInfo.TOOL_PROFILE;
+                break;
+            case WINDOW:
+            default:
+                profile = WindowInfo.EDITOR_PROFILE;
+                break;
+            }
+
+            this.contents = contents;
+
+            this.windowInfo = new WindowInfo(code);
+            this.windowInfo.setTitle(title);
+
+            Dimension size = this.contents.getPreferredSize();
+            this.windowInfo.setHeight(size.height);
+            this.windowInfo.setWidth(size.width);
+
+            this.setLayout(new BorderLayout());
+            this.add(this.contents,BorderLayout.CENTER);
+
+            this.contents.addComponentListener(this);
+        }
+
+        public void fireClosingWindow() {
+            this.contents.removeComponentListener(this);
+            ComponentListener[] l = this.contents.getComponentListeners();
+            for( int i=0; i<l.length; i++) {
+                l[i].componentHidden(new ComponentEvent(this, i));
+            }
+        }
+
+        public WindowInfo getWindowInfo() {
+            return this.windowInfo;
+        }
+
+        public Object getWindowProfile() {
+            return this.profile;
+        }
+
+        public void componentHidden(ComponentEvent arg0) {
+            // Close window when hide contents panel.
+            MDIManager manager = PluginServices.getMDIManager();
+            manager.closeWindow(this);
+        }
+
+        public void componentMoved(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        public void componentResized(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        public void componentShown(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        public JComponent getContents() {
+            return this.contents;
+        }
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/ToolsWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/TranslatableButtonHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/TranslatableButtonHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/TranslatableButtonHelper.java	(revision 42196)
@@ -0,0 +1,92 @@
+/*
+ /**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.util.Locale;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+
+public class TranslatableButtonHelper {
+
+    public interface TranslatableButton {
+
+        public void setTextKey(String key);
+
+        public void setToolTipKey(String key);
+
+        public void translate();
+    }
+
+    private String keyText = null;
+    private String keyToolTip = null;
+    private String text = null;
+    private String tooltip = null;
+
+    private Locale locale = null;
+    private static PluginsManager pluginsManager = null;
+
+    public void setText(String keyText) {
+        this.keyText = keyText;
+    }
+
+    public void setTooltip(String keyTooltip) {
+        this.keyToolTip = keyTooltip;
+    }
+
+    public String getText() {
+        return this.text;
+    }
+
+    public String getTooltip() {
+        return this.tooltip;
+    }
+
+    private PluginsManager getPluginsManager() {
+        if ( pluginsManager == null ) {
+            pluginsManager = PluginsLocator.getManager();
+        }
+        return pluginsManager;
+    }
+
+    public void translate() {
+        if ( this.keyText != null ) {
+            this.text = getPluginsManager().translate(this.keyText);
+        }
+        if ( this.keyToolTip != null ) {
+            this.tooltip = getPluginsManager().translate(this.keyToolTip);
+        }
+        locale = Locale.getDefault();
+    }
+
+    public boolean needTranslation() {
+        if ( this.locale == null ) {
+            return true;
+        }
+        if ( this.locale.equals(Locale.getDefault()) ) {
+            return false;
+        }
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import org.gvsig.andami.ui.mdiFrame.TranslatableButtonHelper.TranslatableButton;
+
+public class JToolBarButton extends javax.swing.JButton implements EnableTextSupport, TranslatableButton {
+
+    private TranslatableButtonHelper i18nHelper = new TranslatableButtonHelper();
+    private String enableText;
+    private String toolTip;
+
+    public JToolBarButton() {
+        super();
+    }
+
+    public JToolBarButton(String text) {
+        super(text);
+    }
+
+    public JToolBarButton(String text, Icon icon) {
+        super(text, icon);
+    }
+
+    public JToolBarButton(Action a) {
+        super(a);
+    }
+
+    public JToolBarButton(Icon icon) {
+        super(icon);
+    }
+
+    /**
+     * @return Returns the enableText.
+     */
+    public String getEnableText() {
+        return enableText;
+    }
+
+    /**
+     * @param enableText The enableText to set.
+     */
+    public void setEnableText(String enableText) {
+        this.enableText = enableText;
+    }
+
+    public void setEnabled(boolean aFlag) {
+        super.setEnabled(aFlag);
+        if ( aFlag ) {
+            setToolTipText(toolTip);
+        } else {
+            setToolTipText(enableText);
+        }
+    }
+
+    public void setToolTip(String text) {
+        toolTip = text;
+    }
+
+    public void setToolTipKey(String key) {
+        this.i18nHelper.setTooltip(key);
+    }
+
+    public void setTextKey(String key) {
+        this.i18nHelper.setText(key);
+    }
+
+    public void translate() {
+        if ( this.i18nHelper.needTranslation() ) {
+            this.i18nHelper.translate();
+            this.setText(this.i18nHelper.getText());
+            this.setToolTip(this.i18nHelper.getTooltip());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ThreadSafeDialogs.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ThreadSafeDialogs.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ThreadSafeDialogs.java	(revision 42196)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.Component;
+import java.io.File;
+import javax.swing.filechooser.FileFilter;
+
+public interface ThreadSafeDialogs {
+	
+	/**
+	 * Create a message dialog with an ok button.
+	 * 
+	 * If message or title start whit a "_" then try to translate.
+	 *
+	 * This method is thread safe to use.
+	 * 
+	 * @param message to present in the dialog
+	 * @param title title of the dialog
+	 * @param messageType type of icon to use.
+	 * 
+	 * @see javax.swing.JOptionPane#showMessageDialog(Component, Object, String, int)
+	 */
+	public void messageDialog(String message, String title, int messageType);
+	
+	/**
+	 * Create a message dialog with ok button.
+	 * 
+	 * If message or title start whit a "_" then try to translate.
+	 * if messageArgs not is null the message can be formated whit MessageFormat.
+	 * 
+	 * This method is thread safe to use.
+	 * 
+	 * @param message to present in the dialog
+	 * @param messageArgs string array of arguments used to format the message 
+	 * @param title title of the dialog
+	 * @param messageType type of icon to use.
+	 * 
+	 * @see javax.swing.JOptionPane#showMessageDialog(Component, Object, String, int)
+	 */
+	public void messageDialog(String message, String messageArgs[], String title, int messageType);
+	
+	/**
+	 * Show a JOptionPane confirm dialog.
+	 * 
+	 * if this method is invoked out of the event dispatch thread of swing, 
+	 * the dialog is presented in the thread of swing and the calling thread
+	 * wait to close to continue.
+	 * 
+	 * @param message
+	 * @param title
+	 * @param optionType
+	 * @param messageType
+	 * @return
+	 * 
+	 * @see javax.swing.JOptionPane#showConfirmDialog(Component, Object, String, int, int)
+	 * 
+	 */
+	public int confirmDialog(String message, String title, int optionType, int messageType) ;
+
+	/**
+	 * Show a JOptionPane input dialog.
+	 * 
+	 * if this method is invoked out of the event dispatch thread of swing, 
+	 * the dialog is presented in the thread of swing and the calling thread
+	 * wait to close to continue.
+	 * 
+	 * @param message
+	 * @param title
+	 * @param optionType 
+         *           an integer designating the options available on the dialog: 
+         *           YES_NO_OPTION, YES_NO_CANCEL_OPTION, or OK_CANCEL_OPTION
+	 * @param messageType
+         *           an integer designating the kind of message this is; 
+         *           primarily used to determine the icon from the pluggable 
+         *           Look and Feel: ERROR_MESSAGE, INFORMATION_MESSAGE, 
+         *           WARNING_MESSAGE, QUESTION_MESSAGE, or PLAIN_MESSAGE
+	 * @return
+	 * 
+	 * @see javax.swing.JOptionPane#showInputDialog(Component, Object, String, int)
+	 * 
+	 */
+	public String inputDialog(String message, String title, int messageType, String initialValue) ;
+	
+	/**
+	 * Show a JOptionPane input dialog.
+	 * 
+	 * if this method is invoked out of the event dispatch thread of swing, 
+	 * the dialog is presented in the thread of swing and the calling thread
+	 * wait to close to continue.
+	 * 
+	 * @param message
+	 * @param title
+	 * @param optionType
+	 * @param messageType
+	 * @return
+	 * 
+	 * @see javax.swing.JOptionPane#showInputDialog(Component, Object, String, int)
+	 * 
+	 */
+	public String inputDialog(String message, String title);
+	
+	/**
+	 * Create a window with the contents and title specified as parameters
+	 * and show as a dialog windows of gvSIG.
+	 * 
+	 * if this method is invoked out of the event dispatch thread of swing, 
+	 * the dialog is presented in the thread of swing and the calling thread
+	 * wait to close to continue. in this case the dialog is not presented as modal to
+	 * other components of the gui.
+	 * 
+	 * @param contents 
+	 * @param title
+	 */
+	public void showDialog(final Component contents, final String title);
+	
+	/**
+	 * Creates an return a new instance of the component specified 
+	 * 
+	 * This method ensure that the component is created in the event dispatch thread of swing. 
+	 * 
+	 * @param theClass of component to be created
+	 * @param parameters passed to the constructor of the component
+	 * 
+	 * @return the instance of the component created
+	 */
+	public Component createComponent(final Class<? extends Component> theClass,  final Object ... parameters);
+
+	/**
+	 * Creates an return a new instance of the component specified 
+	 * 
+	 * This method ensure that the component is created in the event dispatch thread of swing. 
+	 * 
+	 * @param theClass of component to be created
+	 * @param parameters passed to the constructor of the component
+	 * 
+	 * @return the instance of the component created
+	 */
+	public Component createComponentWithParams(final Class<? extends Component> theClass,  final Object[] parameters);
+	
+	/**
+	 * Creates and show a JFileChooser dialog.
+	 * 
+	 * This method return an array whit the selected files. If multiselection is
+	 * not allowed, an array with one element is returned. 
+	 * 
+	 * If the user select the cancel button, null is returned.
+	 * 
+	 * if this method is invoked out of the event dispatch thread of swing, 
+	 * the dialog is presented in the thread of swing and the calling thread
+	 * wait to close to continue.
+	 * 
+	 * @param title, title of dialog
+	 * @param type of the dialog, JFileChooser.SAVE_DIALOG or JFileChooser.OPEN_DIALOG
+	 * @param selectionMode of the dialog, values are: JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
+	 * @param multiselection, true if multiselection is allowed
+	 * @param initialPath, to show in the dialog
+	 * @param filter used to filter the files show in the dialog.
+	 * @param fileHidingEnabled, if true hidden files are show
+	 * @return an array whit the files selecteds or null.
+	 */
+	public File[] showChooserDialog(
+			final String title,
+			final int type,
+			final int selectionMode,
+			final boolean multiselection, 
+			final File initialPath,
+			final FileFilter filter,
+			final boolean fileHidingEnabled
+			) ;
+
+	/**
+	 * Creates and show a JFileChooser dialog for folder selection.
+	 *
+	 * This is an utility method that wrap a showChooserDialog call.
+	 *  
+ 	 * @param title, title of dialog
+	 * @param initialPath, to show in the dialog
+	 * @return an array whit the files selecteds or null.
+	 * 
+	 * @see #showChooserDialog(String, int, int, boolean, File, FileFilter, boolean)
+	 */
+	public File[] showOpenDirectoryDialog(String title, File initialPath) ;
+	
+	/**
+	 * Creates and show a JFileChooser dialog for selection a file for open.
+	 *
+	 * This is an utility method that wrap a {@link #showChooserDialog(String, int, int, boolean, File, FileFilter, boolean)}  call.
+	 *  
+ 	 * @param title, title of dialog
+	 * @param initialPath, to show in the dialog
+	 * @return an array whit the files selecteds or null.
+	 * 
+	 * @see #showChooserDialog(String, int, int, boolean, File, FileFilter, boolean)
+	 */
+	public File[] showOpenFileDialog(String title, File initialPath) ;
+	
+	/**
+	 * Creates and show a JFileChooser dialog for selection a file for save.
+	 *
+	 * This is an utility method that wrap a {@link #showChooserDialog(String, int, int, boolean, File, FileFilter, boolean)}  call.
+	 *  
+ 	 * @param title, title of dialog
+	 * @param initialPath, to show in the dialog
+	 * @return an array whit the files selecteds or null.
+	 * 
+	 * @see #showChooserDialog(String, int, int, boolean, File, FileFilter, boolean)
+	 */
+	public File[] showSaveFileDialog(String title, File initialPath) ;
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ThreadSafeDialogs.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import org.gvsig.andami.ui.mdiFrame.TranslatableButtonHelper.TranslatableButton;
+
+public class JToolBarToggleButton extends javax.swing.JToggleButton implements EnableTextSupport, TranslatableButton {
+
+    private TranslatableButtonHelper i18nHelper = new TranslatableButtonHelper();
+    private String enableText;
+    private String toolTip;
+
+    public JToolBarToggleButton() {
+        super();
+    }
+
+    public JToolBarToggleButton(String text) {
+        super(text);
+    }
+
+    public JToolBarToggleButton(String text, boolean selected) {
+        super(text, selected);
+    }
+
+    public JToolBarToggleButton(String text, Icon icon) {
+        super(text, icon);
+    }
+
+    public JToolBarToggleButton(String text, Icon icon, boolean selected) {
+        super(text, icon, selected);
+    }
+
+    public JToolBarToggleButton(Action a) {
+        super(a);
+    }
+
+    public JToolBarToggleButton(Icon icon) {
+        super(icon);
+    }
+
+    public JToolBarToggleButton(Icon icon, boolean selected) {
+        super(icon, selected);
+    }
+
+    /**
+     * @return Returns the enableText.
+     */
+    public String getEnableText() {
+        return enableText;
+    }
+
+    /**
+     * @param enableText The enableText to set.
+     */
+    public void setEnableText(String enableText) {
+        this.enableText = enableText;
+    }
+
+    public void setEnabled(boolean aFlag) {
+        super.setEnabled(aFlag);
+        if ( aFlag ) {
+            setToolTipText(toolTip);
+        } else {
+            setToolTipText(enableText);
+        }
+    }
+
+    public void setToolTip(String text) {
+        toolTip = text;
+    }
+
+    public void setToolTipKey(String key) {
+        this.i18nHelper.setTooltip(key);
+    }
+
+    public void setTextKey(String key) {
+        this.i18nHelper.setText(key);
+    }
+
+    public void translate() {
+        if ( this.i18nHelper.needTranslation() ) {
+            this.i18nHelper.translate();
+            this.setText(this.i18nHelper.getText());
+            this.setToolTip(this.i18nHelper.getTooltip());
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/GlassPane.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/GlassPane.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/GlassPane.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+import java.awt.Cursor;
+
+import javax.swing.JPanel;
+import javax.swing.event.MouseInputAdapter;
+
+public class GlassPane extends JPanel {
+
+	public GlassPane(){
+		this.setOpaque(false);
+		this.addMouseListener(new MouseInputAdapter(){});
+		this.addMouseMotionListener(new MouseInputAdapter(){});
+		this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+	}
+
+	/**
+	 * @see java.awt.Component#setCursor(java.awt.Cursor)
+	 */
+	public void setCursor(Cursor cursor) {
+		super.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/GlassPane.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DefaultThreadSafeDialogs.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DefaultThreadSafeDialogs.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DefaultThreadSafeDialogs.java	(revision 42196)
@@ -0,0 +1,435 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.lang.reflect.Constructor;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.task.CancellableTask;
+import org.gvsig.tools.task.RunnableWithParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Thread safe functions for showing dialogs
+ * 
+ * @author jjdelcerro
+ * 
+ */
+public class DefaultThreadSafeDialogs implements ThreadSafeDialogs {
+
+	private static Logger logger = LoggerFactory
+			.getLogger(DefaultThreadSafeDialogs.class);
+	private Component rootComponent;
+	private NewStatusBar statusbar;
+
+	public DefaultThreadSafeDialogs() {
+		this.rootComponent = null;
+		this.statusbar = null;
+	}
+
+	public DefaultThreadSafeDialogs(Component rootComponent,
+			NewStatusBar statusbar) {
+		this.statusbar = statusbar;
+		this.rootComponent = rootComponent;
+	}
+
+	private Component getRootComponent() {
+		if (this.rootComponent == null) {
+			try {
+				this.rootComponent = (MDIFrame) PluginServices.getMainFrame();
+			} catch (Throwable t) {
+				// Ignore and return null
+			}
+		}
+		return this.rootComponent;
+	}
+
+	private NewStatusBar getStatusbar() {
+		if (this.statusbar == null) {
+			this.statusbar = PluginServices.getMainFrame().getStatusBar();
+		}
+		return this.statusbar;
+	}
+
+	private void message(String message, int messageType) {
+		this.getStatusbar().message(message, messageType);
+	}
+
+	private String translate(String message) {
+		return translate(message, null);
+	}
+
+	private String translate(String message, String[] args) {
+		String msg = message;
+		if (msg == null) {
+			msg = "";
+		}
+		if (msg.startsWith("_")) {
+			msg = org.gvsig.i18n.Messages.getText(msg, args);
+			if (msg == null) {
+				msg = "_" + message.replace("_", " ");
+			}
+		}
+		return msg;
+	}
+
+	public int confirmDialog(final String message, final String title, final int optionType,
+			final int messageType) {
+		RunnableWithParameters runnable = new RunnableWithParameters() {
+			public void run() {
+				this.returnValue = JOptionPane.showConfirmDialog(
+						getRootComponent(), message,title, optionType, messageType);
+			}
+		};
+		if (SwingUtilities.isEventDispatchThread()) {
+			runnable.run();
+		} else {
+			try {
+				SwingUtilities.invokeAndWait(runnable);
+			} catch (Exception e) {
+				logger.info("Can't show input dialog '" + message + "'.", e);
+			}
+		}
+		return (Integer) runnable.getReturnValue();
+	}
+
+	public String inputDialog(final String message, final String title, final int messageType,
+			final String initialValue) {
+		// inputDialog dlg = new inputDialog();
+		// return dlg.show(translate(message), translate(title), messageType,
+		// initialValue);
+		//
+		RunnableWithParameters runnable = new RunnableWithParameters() {
+			public void run() {
+				this.returnValue = JOptionPane.showInputDialog(
+						getRootComponent(), translate(message),
+						translate(title),
+						messageType, null, null,
+						initialValue);
+			}
+		};
+		if (SwingUtilities.isEventDispatchThread()) {
+			runnable.run();
+		} else {
+			try {
+				SwingUtilities.invokeAndWait(runnable);
+			} catch (Exception e) {
+				logger.info("Can't show input dialog '" + message + "'.", e);
+			}
+		}
+		return (String) runnable.getReturnValue();
+	}
+
+	public String inputDialog(final String message, final String title) {
+		RunnableWithParameters runnable = new RunnableWithParameters() {
+			public void run() {
+				this.returnValue = JOptionPane.showInputDialog(
+						getRootComponent(), (String) translate(message),
+						translate(title),
+						JOptionPane.QUESTION_MESSAGE, null, null, null);
+			}
+		};
+		if (SwingUtilities.isEventDispatchThread()) {
+			runnable.run();
+		} else {
+			try {
+				SwingUtilities.invokeAndWait(runnable);
+			} catch (Exception e) {
+				logger.info("Can't show input dialog '" + message + "'.", e);
+			}
+		}
+		return (String) runnable.getReturnValue();
+	}
+
+	public void messageDialog(String message, String title, int messageType) {
+		messageDialog(message, null, title, messageType);
+	}
+
+	public void messageDialog(final String message, final String messageArgs[],
+			final String title, final int messageType) {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			try {
+				SwingUtilities.invokeAndWait(new Runnable() {
+					public void run() {
+						messageDialog(message, messageArgs, title, messageType);
+					}
+				});
+			} catch (Exception e) {
+				logger.info("Can't show message dialog '" + message
+						+ "'. redirect to status bar", e);
+				this.message(message, messageType);
+			}
+			return;
+		}
+
+		if (message == null) {
+			logger.info("message if null, message dialog not show.");
+			return;
+		}
+		JOptionPane.showMessageDialog(getRootComponent(),
+				translate(message, messageArgs), translate(title), messageType);
+	}
+
+	public void showDialog(final Component contents, final String title) {
+		if (SwingUtilities.isEventDispatchThread()) {
+			final DialogWindow window = new DialogWindow();
+			window.setDialogFlag();
+			window.setContents(contents, title);
+			MDIManager manager = PluginServices.getMDIManager();
+			manager.addWindow(window, GridBagConstraints.CENTER);
+		} else {
+			final DialogWindow window = new DialogWindow();
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					window.setContents(contents, title);
+					MDIManager manager = PluginServices.getMDIManager();
+					manager.addWindow(window, GridBagConstraints.CENTER);
+				}
+			});
+			try {
+				synchronized (window) {
+					if (contents instanceof CancellableTask) {
+						while( contents.isVisible()  ) {
+							if( ((CancellableTask)contents).isCancellationRequested() ) {
+								SwingUtilities.invokeLater(new Runnable() {
+									public void run() {
+										contents.setVisible(false);
+									}
+								});
+							}
+							window.wait(10000);
+						}
+					} else {
+						while( contents.isVisible() ) {
+							window.wait();
+						}
+					}
+				}
+			} catch (InterruptedException e) {
+				logger.info("showDialog can wait to close dialog.", e);
+			}
+		}
+	}
+
+	class DialogWindow extends JPanel implements IWindow, ComponentListener {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 6283975319620714565L;
+		protected WindowInfo windowInfo;
+		protected Object profile;
+		protected Component contents;
+		private int code = 0;
+
+		public DialogWindow() {
+			code = WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE
+					| WindowInfo.ICONIFIABLE;
+			profile = WindowInfo.DIALOG_PROFILE;
+		}
+
+		public void setDialogFlag() {
+			code |= WindowInfo.MODALDIALOG;
+		}
+
+		public void setContents(Component contents, String title) {
+			this.windowInfo = new WindowInfo(code);
+			this.windowInfo.setTitle(title);
+
+			this.contents = contents;
+
+			Dimension size = this.contents.getPreferredSize();
+			this.windowInfo.setHeight(size.height);
+			this.windowInfo.setWidth(size.width);
+
+			this.setLayout(new BorderLayout());
+			this.add(this.contents, BorderLayout.CENTER);
+
+			this.contents.addComponentListener(this);
+		}
+
+		public WindowInfo getWindowInfo() {
+			return this.windowInfo;
+		}
+
+		public Object getWindowProfile() {
+			return this.profile;
+		}
+
+		public void componentHidden(ComponentEvent arg0) {
+			// Close window when hide contents panel.
+			MDIManager manager = PluginServices.getMDIManager();
+			manager.closeWindow(this);
+			if ((code & WindowInfo.MODALDIALOG) == 0) {
+				synchronized (this) {
+					this.notifyAll();
+				}
+			}
+		}
+
+		public void componentMoved(ComponentEvent arg0) {
+			// Do nothing
+		}
+
+		public void componentResized(ComponentEvent arg0) {
+			// Do nothing
+		}
+
+		public void componentShown(ComponentEvent arg0) {
+			// Do nothing
+		}
+
+	}
+
+	public Component createComponent(final Class<? extends Component> theClass,
+			final Object... parameters) {
+		return createComponentWithParams(theClass, parameters);
+	}
+
+	public Component createComponentWithParams(
+			final Class<? extends Component> theClass, final Object[] parameters) {
+		final Class<?>[] parameterTypes = new Class<?>[parameters.length];
+		for (int i = 0; i < parameters.length; i++) {
+			parameterTypes[i] = parameters[i].getClass();
+		}
+		final Component component;
+		final Constructor<?> constructor;
+		try {
+			constructor = theClass.getConstructor(parameterTypes);
+		} catch (Exception e) {
+			throw new IllegalArgumentException(e);
+		}
+		if (SwingUtilities.isEventDispatchThread()) {
+			try {
+				component = (Component) constructor.newInstance(parameters);
+			} catch (Exception e) {
+				throw new IllegalArgumentException(e);
+			}
+		} else {
+			try {
+				RunnableWithParameters runnable = new RunnableWithParameters(parameters) {
+					public void run() {
+						Constructor<?> cons = constructor;
+						try {
+							this.returnValue = cons.newInstance(parameters.toArray());
+						} catch (Exception e) {
+							String msg ="Can't create instance of components, constructor="+cons.toString()+", parameters="+this.parameters.toString()+"."; 
+							logger.info(msg,e);
+							throw new IllegalArgumentException(e);
+						}
+					}
+				};
+				SwingUtilities.invokeAndWait(runnable);
+				component = (Component) runnable.getReturnValue();
+			} catch (Exception e) {
+				throw new IllegalArgumentException(e);
+			}
+		}
+		return component;
+	}
+
+	public File[] showChooserDialog(
+			final String title,
+			final int type, // SAVE_DIALOG / OPEN_DIALOG
+			final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
+			final boolean multiselection, 
+			final File initialPath,
+			final FileFilter filter,
+			final boolean fileHidingEnabled
+			) {
+		RunnableWithParameters runnable = new RunnableWithParameters() {
+			public void run() {
+				JFileChooser fc = new JFileChooser();
+				fc.setDialogTitle(title);
+				fc.setDialogType(type);
+				fc.setFileSelectionMode(selectionMode);
+				fc.setMultiSelectionEnabled(multiselection);
+				fc.setCurrentDirectory(initialPath);
+				fc.setFileFilter(filter);
+				fc.setFileHidingEnabled(fileHidingEnabled);
+				int r = JFileChooser.CANCEL_OPTION;
+				switch(type) {
+				case JFileChooser.SAVE_DIALOG:
+					r = fc.showSaveDialog(getRootComponent());
+					break;
+				case JFileChooser.OPEN_DIALOG:
+				default:
+					r = fc.showOpenDialog(getRootComponent());
+					break;
+				}
+				if( r != JFileChooser.APPROVE_OPTION ) {
+					this.returnValue = null;
+					return;
+				}
+				if( fc.isMultiSelectionEnabled() ) {
+					this.returnValue = fc.getSelectedFiles();
+				} else {
+					this.returnValue = new File[] { fc.getSelectedFile() };
+				}
+			}
+		};
+		if (SwingUtilities.isEventDispatchThread()) {
+			runnable.run();
+		} else {
+			try {
+				SwingUtilities.invokeAndWait(runnable);
+			} catch (Exception e) {
+				logger.info("Can't show chooser dialog '" + title + "'.", e);
+			}
+		}
+		return (File[]) runnable.getReturnValue();
+	}
+	
+	public File[] showOpenDirectoryDialog(String title, File initialPath) {
+		return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
+	}
+
+	
+	public File[] showOpenFileDialog(String title, File initialPath) {
+		return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+	}
+
+	
+	public File[] showSaveFileDialog(String title, File initialPath) {
+		return showChooserDialog(title, JFileChooser.SAVE_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DefaultThreadSafeDialogs.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java	(revision 42196)
@@ -0,0 +1,766 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.LayoutManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JProgressBar;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.border.BevelBorder;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.plugins.config.generate.Label;
+import org.gvsig.gui.beans.controls.IControl;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.task.JTasksStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * This class contains the status bar. It contains the graphical component, and
+ * the methods to manage it.
+ * </p>
+ * 
+ * <p>
+ * The status bar is divided in several areas. At the very left, there is an
+ * icon and the main status text. There are three icons to show: Info, Warning
+ * and Error icons. They can be set together with the main status text using the
+ * methods <code>setInfoText()</code>, <code>setWarningText()</code> and
+ * <code>setErrorText()</code> (and also with <code>setInfoTextTemporal()</code>
+ * , etc). Then, there is a right area which contains labels and other controls.
+ * Labels are set in the config.xml files and are visible or not depending on
+ * the currently selected Andami window. Controls are associated to extensions,
+ * and are enabled/disabled and visible/hidden depending on the associated
+ * extension.
+ * </p>
+ * 
+ */
+public class NewStatusBar extends JPanel {
+
+    private static final long serialVersionUID = 5575549032728844632L;
+    
+    private static Logger logger = LoggerFactory.getLogger(NewStatusBar.class);
+    
+    private static final int INFO = 0;
+    private static final int WARNING = 1;
+    private static final int ERROR = 2;
+    private JLabel lblIcon = null;
+    private JLabel lblTexto = null;
+    private boolean contenidoTemporal;
+    private String textoAnterior;
+    private int estadoAnterior;
+    private int estado;
+    private JProgressBar progressBar = null;
+    private Map<String, JLabel> idLabel = new HashMap<String, JLabel>();
+    private int[] widthlabels = null;
+    private Map<String, Component> controls = new HashMap<String, Component>();
+    private JPanel controlContainer;
+    private JTasksStatus tasksStatus = null;
+	private Timer messageTimer;
+
+	private String textoCompleto;
+
+	
+    /**
+     * This is the default constructor
+     */
+    public NewStatusBar() {
+        super();
+        initialize();
+    }
+
+	private ImageIcon getImageIcon(String iconName) {
+//		return PluginServices.getIconTheme().get(iconName);
+		return IconThemeHelper.getImageIcon(iconName);
+	}
+	
+
+    /**
+     * This method initializes the status bar. It creates the required
+     * containers and sets the layout.
+     */
+    private void initialize() {
+        LayoutManager mainLayout = new BorderLayout();
+        this.setLayout(mainLayout);
+
+        JPanel panelRight = new JPanel(new FlowLayout(FlowLayout.RIGHT, 1, 0));
+
+        controlContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, 1, 0));
+        panelRight.add(controlContainer);
+        panelRight.add(getTasksStatus());
+
+        lblIcon = new JLabel();
+        lblTexto = new JLabel();
+        lblTexto.setAlignmentX(JLabel.LEFT_ALIGNMENT);
+        lblTexto.setHorizontalAlignment(SwingConstants.LEFT);
+        lblTexto.setHorizontalTextPosition(SwingConstants.LEFT);
+        lblTexto.setVerticalAlignment(SwingConstants.CENTER);
+        lblTexto.setVerticalTextPosition(SwingConstants.CENTER);
+        lblIcon.setText("");
+        lblTexto.setText(Messages.getString("StatusBar.Aplicacion_iniciada"));
+
+        JPanel panelLeft = new JPanel();
+        panelLeft.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 0));
+        panelLeft.add(lblIcon);
+        panelLeft.add(lblTexto);
+        panelLeft.add(getProgressBar());
+
+        this.add(panelLeft, BorderLayout.CENTER);
+        this.add(panelRight, BorderLayout.EAST);
+
+        buildMesagePopupMenu();
+        
+        messageTimer = new Timer(30000, new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				try {
+					clearMessage();
+				} catch( Throwable ex) {
+					logger.info("Can't clear message", ex);
+				}
+			}
+		});
+    }
+    
+    public void clearMessage() {
+    	this.textoCompleto = "";
+    	lblTexto.setText("");
+    	lblIcon.setIcon(null);
+    	estado = INFO;
+    }
+
+    
+    public void message(final String msg, final int messageTyoe) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	message(msg,messageTyoe);
+                }
+            });
+            return;
+        }
+        messageTimer.stop();
+        if( StringUtils.isBlank(msg) ) {
+            this.clearMessage();
+            return;
+        }
+    	switch (messageTyoe) {
+		case JOptionPane.ERROR_MESSAGE:
+			setErrorText(msg);
+			break;
+		case JOptionPane.WARNING_MESSAGE:
+			setWarningText(msg);
+			break;
+		default:
+		case JOptionPane.INFORMATION_MESSAGE:
+			setInfoText(msg);
+			break;
+		}
+    	this.doLayout();
+    	this.repaint();
+    	messageTimer.start();
+	}
+
+    private void buildMesagePopupMenu() {
+    	final JPopupMenu menu = new JPopupMenu();
+    	
+    	JMenuItem item = new JMenuItem("View details");
+    	item.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				switch (estado) {
+				default:
+				case INFO:
+					JOptionPane.showMessageDialog(lblTexto, getStatusText(), "", JOptionPane.INFORMATION_MESSAGE);
+					break;
+				case WARNING:
+					JOptionPane.showMessageDialog(lblTexto, getStatusText(), "", JOptionPane.WARNING_MESSAGE);
+					break;
+				case ERROR:
+					JOptionPane.showMessageDialog(lblTexto, getStatusText(), "", JOptionPane.ERROR_MESSAGE);
+					break;
+				}
+			}
+		});
+    	menu.add(item);
+    	item = new JMenuItem("Clear");
+    	item.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				clearMessage();
+			}
+		});
+    	menu.add(item);
+    	menu.addSeparator();
+    	item = new JMenuItem("Cancel");
+    	menu.add(item);
+    	
+    	this.lblTexto.addMouseListener( new MouseListener() {
+			public void mouseReleased(MouseEvent e) {
+				if( e.isPopupTrigger() ) {
+					if( getStatusText().length() > 0 || estado!=INFO ) {
+						menu.show(lblTexto, e.getX(), e.getY());
+					}
+				}
+			}
+			public void mousePressed(MouseEvent e) {
+				if( e.isPopupTrigger() ) {
+					if( getStatusText().length() > 0 || estado!=INFO ) {
+						menu.show(lblTexto, e.getX(), e.getY());
+					}
+				}
+			}
+			public void mouseExited(MouseEvent e) {
+			}
+			public void mouseEntered(MouseEvent e) {
+			}
+			public void mouseClicked(MouseEvent e) {
+			}
+		});
+    }
+    
+    /**
+     * Gets the status bar main text.
+     * 
+     * @return The status bar main text.
+     * @see #setInfoText(String)
+     * @see #setWarningText(String)
+     * @see #setErrorText(String)
+     * @see #setInfoTextTemporal(String)
+     * @see #setWarningTextTemporal(String)
+     * @see #setErrorTextTemporal(String)
+     */
+    public String getStatusText() {
+        return textoCompleto; //lblTexto.getText();
+    }
+
+    /**
+     * Restores the previous contents in the status bar main text,
+     * after the {@link #setInfoTextTemporal(String)},
+     * {@link #setWarningTextTemporal(String)} or
+     * {@link #setErrorTextTemporal(String)} have been called.
+     * 
+     * @see #setInfoTextTemporal(String)
+     * @see #setWarningTextTemporal(String)
+     * @see #setErrorTextTemporal(String)
+     */
+    public void restaurarTexto() {
+        contenidoTemporal = false;
+
+        if (estadoAnterior == -1) {
+            return;
+        }
+
+        switch (estadoAnterior) {
+        case INFO:
+            setInfoText(textoAnterior);
+
+            break;
+
+        case WARNING:
+            setWarningText(textoAnterior);
+
+            break;
+
+        case ERROR:
+            setErrorText(textoAnterior);
+
+            break;
+        }
+
+        estadoAnterior = -1;
+        textoAnterior = null;
+    }
+
+    /**
+     * Sets a temporary information message in the status bar, and changes the
+     * icon to an Info icon. The previous text and icon can be restored using
+     * the {@link #restaurarTexto()} method.
+     * 
+     * @param texto
+     *            The text to set
+     * @see #restaurarTexto()
+     */
+    public void setInfoTextTemporal(final String texto) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	setInfoTextTemporal(texto);
+                }
+            });
+            return;
+        }
+        if (!contenidoTemporal) {
+            textoAnterior = getStatusText();
+            estadoAnterior = this.estado;
+            contenidoTemporal = true;
+        }
+
+        this.estado = INFO;
+        lblIcon.setIcon(getImageIcon("statusbar-info"));
+        lblTexto.setText(texto);
+    }
+
+    /**
+     * Sets a temporary warning message in the status bar, and changes the
+     * icon to a Warning icon. The previous text and icon can be restored using
+     * the {@link #restaurarTexto()} method.
+     * 
+     * @param texto
+     *            The text to set
+     * @see #restaurarTexto()
+     */
+    public void setWarningTextTemporal(final String texto) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	setWarningTextTemporal(texto);
+                }
+            });
+            return;
+        }
+      	
+        if (!contenidoTemporal) {
+            estadoAnterior = this.estado;
+            textoAnterior = getStatusText();
+            contenidoTemporal = true;
+        }
+        this.estado = WARNING;
+        lblIcon.setIcon(getImageIcon("statusbar-warning"));
+        lblTexto.setText(texto);
+    }
+
+    /**
+     * Sets a temporary error message in the status bar, and changes the
+     * icon to an Error icon. The previous text and icon can be restored using
+     * the {@link #restaurarTexto()} method.
+     * 
+     * @param texto
+     *            The text to set
+     * @see #restaurarTexto()
+     */
+    public void setErrorTextTemporal(final String texto) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	setErrorTextTemporal(texto);
+                }
+            });
+            return;
+        }
+       if (!contenidoTemporal) {
+            estadoAnterior = this.estado;
+            textoAnterior = getStatusText();
+            contenidoTemporal = true;
+        }
+
+        this.estado = ERROR;
+        lblIcon.setIcon(getImageIcon("statusbar-error"));
+        lblTexto.setText(texto);
+    }
+
+    /**
+     * Sets a permanent info message in the status bar, and changes the
+     * permanent icon to an Info icon. If there is a temporary message showing
+     * at the moment, the message set now is not shown until
+     * the {@link #restaurarTexto()} method is called.
+     * 
+     * @param texto
+     *            The permanent info message to set
+     * @see #restaurarTexto()
+     */
+    public void setInfoText(final String texto) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	setInfoText(texto);
+                }
+            });
+            return;
+        }
+        if (contenidoTemporal) {
+            textoAnterior = texto;
+            estadoAnterior = INFO;
+        } else {
+        	this.textoCompleto = texto; 
+            lblTexto.setText(getFirstTextLine(texto));
+            lblIcon.setIcon(getImageIcon("statusbar-info"));
+            estado = INFO;
+        }
+    }
+    
+    private String getFirstTextLine(String text) {
+        
+        if (text == null) {
+            return null;
+        }
+        
+    	int n = text.indexOf("\n");
+    	if( n == -1 ) {
+    		return text;
+    	}
+    	return text.substring(0,n) + "...";
+    }
+
+    /**
+     * Sets a permanent warning message in the status bar, and changes the
+     * permanent icon to a Warning icon. If there is a temporary message showing
+     * at the moment, the message set now is not shown until
+     * the {@link #restaurarTexto()} method is called.
+     * 
+     * @param texto
+     *            The permanent warning message to set
+     * @see #restaurarTexto()
+     */
+    public void setWarningText(final String texto) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	setWarningText(texto);
+                }
+            });
+            return;
+        }
+        
+        if (contenidoTemporal) {
+            textoAnterior = texto;
+            estadoAnterior = WARNING;
+        } else {
+        	this.textoCompleto = texto; 
+            lblTexto.setText(getFirstTextLine(texto));
+            lblIcon.setIcon(getImageIcon("statusbar-warning"));
+            estado = WARNING;
+        }
+    }
+
+    /**
+     * Sets a permanent error message in the status bar, and changes the
+     * permanent icon to an Error icon. If there is a temporary message showing
+     * at the moment, the message set now is not shown until
+     * the {@link #restaurarTexto()} method is called.
+     * 
+     * @param texto
+     *            The permanent info message to set
+     * @see #restaurarTexto()
+     */
+    public void setErrorText(final String texto) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	setErrorText(texto);
+                }
+            });
+            return;
+        }
+
+        if (contenidoTemporal) {
+            textoAnterior = texto;
+            estadoAnterior = ERROR;
+        } else {
+        	this.textoCompleto = texto; 
+            lblTexto.setText(getFirstTextLine(texto));
+            lblIcon.setIcon(getImageIcon("statusbar-error"));
+            estado = ERROR;
+        }
+    }
+
+    /**
+     * If <code>p</code> is a value between 0 and 99, it shows a progress bar
+     * in the left area of the status bar, and sets the specified progress.
+     * If <code>p</code> is bigger than 99, it hides the progress bar.
+     * 
+     * @param p
+     *            The progress to set in the progress bar. If it is bigger
+     *            than 99, the task will be considered to be finished, and the
+     *            progress bar will be hidden.
+     * 
+     * @deprecated use instead TaskStatus and TaskStatusManager
+     */
+    public void setProgress(int p) {
+        if (p < 100) {
+            getProgressBar().setValue(p);
+            getProgressBar().setVisible(true);
+        } else {
+            getProgressBar().setVisible(false);
+        }
+
+        getProgressBar().repaint();
+    }
+
+    /**
+     * Sets a label-set to be shown in the status bar. This method it is not
+     * intended to be used directly, because the set will be overwritten when
+     * the selected
+     * window changes. Use {@link MainFrame#setStatusBarLabels(Class, Label[])}
+     * to permanently associate a label set with a window.
+     * 
+     * @param labels
+     *            The labels to set.
+     * @see MainFrame#setStatusBarLabels(Class, Label[])
+     */
+    public void setLabelSet(Label[] labels) {
+        removeAllLabels();
+        idLabel.clear();
+
+        for (int i = 0; i < labels.length; i++) {
+            // Set an initial text so the getPreferredSize works as expected
+            JLabel lbl = new JLabel();
+            lbl.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
+            lbl.setName(labels[i].getId());
+            controlContainer.add(lbl);
+
+            /*
+             * if (i != labels.length - 1){
+             * this.add(new JSeparator(JSeparator.VERTICAL));
+             * }
+             */
+            idLabel.put(labels[i].getId(), lbl);
+        }
+
+        JLabel[] configlabels =
+            (JLabel[]) idLabel.values().toArray(new JLabel[0]);
+        widthlabels = new int[configlabels.length];
+
+        for (int i = 0; i < labels.length; i++) {
+            widthlabels[i] = configlabels[i].getWidth();
+        }
+
+        this.validate();
+    }
+
+    /**
+     * Hides the empty labels and adjust the space in the bar.
+     */
+    public void ajustar() {
+        if (widthlabels == null) {
+            return;
+        }
+
+        JLabel[] labels = (JLabel[]) idLabel.values().toArray(new JLabel[0]);
+
+        /*
+         * double total = 1;
+         * for (int i = 0; i < widthlabels.length; i++) {
+         * if (labels[i].getText().compareTo("") != 0) {
+         * total += widthlabels[i];
+         * }
+         * }
+         * double p = (ws - lblTexto.getWidth() - 20) / total;
+         */
+        for (int i = 0; i < labels.length; i++) {
+            JLabel label = (JLabel) labels[i];
+
+            if (label.getText().compareTo("") != 0) {
+                label.setVisible(true);
+            } else {
+                label.setVisible(false);
+            }
+        }
+        validate();
+    }
+
+    /**
+     * Removes all the labels from the status bar. It does not remove the
+     * controls.
+     */
+    private void removeAllLabels() {
+        Component[] controlArray = controlContainer.getComponents();
+
+        for (int i = 0; i < controlArray.length; i++) {
+            if ((controlArray[i] != lblIcon) && (controlArray[i] != lblTexto)
+                && !(controlArray[i] instanceof IControl)
+                && (controlArray[i] instanceof JLabel)) {
+                controlContainer.remove(controlArray[i]);
+            }
+        }
+    }
+
+    /**
+     * Sets the text of the provided label.
+     * 
+     * @param id
+     *            The ID of the label to modify. It is defined in the
+     *            config.xml file
+     * @param msg
+     *            The message to show in the label
+     */
+    public void setMessage(final String id, final String msg) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	setMessage(id, msg);
+                }
+            });
+            return;
+        }
+
+        JLabel lbl = (JLabel) idLabel.get(id);
+
+        if (lbl != null) {
+        	Dimension originalPreferredSize = lbl.getPreferredSize();
+            lbl.setText(msg);
+            // Set preferred size to null just in case it has been set
+            // previously, as we want it to be calculated from the text size.
+            lbl.setPreferredSize(null);
+            // Allow only to increase label width, to avoid too much ugly 
+            // width changes in the status bar components.
+            if (lbl.getPreferredSize().width < originalPreferredSize.width) {
+            	lbl.setPreferredSize(originalPreferredSize);
+            }
+        } else {
+            // try with controls
+            try {
+                IControl control = (IControl) controls.get(id);
+                if (control != null)
+                    control.setValue(msg);
+            } catch (ClassCastException ex) {
+                logger.debug("no label called " + id);
+            }
+        }
+
+        ajustar();
+    }
+
+    /**
+     * Sets the control identified by 'id' with the provided value.
+     * 
+     * @param id
+     *            The ID of the control to modify
+     * @param value
+     *            The value to set in the control
+     */
+    public void setControlValue(String id, String value) {
+        IControl control = (IControl) controls.get(id);
+        if (control != null) {
+            control.setValue(value);
+        } else {
+            logger.debug("NewStatusBar -- no control called " + id);
+        }
+    }
+
+    /**
+     * This method initializes the progressBar and gets it.
+     * 
+     * @return javax.swing.JProgressBar
+     */
+    private JProgressBar getProgressBar() {
+        if (progressBar == null) {
+            progressBar = new JProgressBar();
+            // progressBar.setPreferredSize(new java.awt.Dimension(100, 14));
+            progressBar.setVisible(false);
+            progressBar.setMinimum(0);
+            progressBar.setMaximum(100);
+            progressBar.setValue(50);
+        }
+
+        return progressBar;
+    }
+
+    private JTasksStatus getTasksStatus() {
+        if (tasksStatus == null) {
+            tasksStatus =
+                ToolsSwingLocator.getTaskStatusSwingManager()
+                    .createJTasksStatus();
+            tasksStatus.setVisible(true);
+        }
+        return tasksStatus;
+    }
+
+    /**
+     * Sets the width of the main message label.
+     * 
+     * @param d
+     *            The width ob the main label
+     * @deprecated
+     */
+    public void setFixedLabelWidth(double d) {
+        lblTexto.setPreferredSize(new Dimension((int) d, lblTexto.getHeight()));
+    }
+
+    /**
+     * Adds a control to the status bar
+     * 
+     * @param id
+     *            The ID of the control, useful to later retrive it or set its
+     *            value
+     * @param control
+     *            The control to add
+     */
+    public void addControl(String id, Component control) {
+        if (!controls.containsKey(control.getName())) {
+            controls.put(control.getName(), control);
+            controlContainer.add(control);
+        } else {
+            logger.debug("NewStatusBar.addControl -- control 'id' already exists" + id);
+        }
+    }
+
+    /**
+     * Remove a control from the status bar
+     * 
+     * @param id
+     *            The ID of the control to get
+     */
+    public Component removeControl(String id) {
+        try {
+            Component component = (Component) controls.get(id);
+            controlContainer.remove(component);
+            controls.remove(id);
+            return component;
+        } catch (ClassCastException ex) {
+            logger.debug("NewStatusBar.removeControl -- control " + id
+                + "doesn't exist");
+        }
+        return null;
+    }
+
+    /**
+     * Gets a control from the status bar
+     * 
+     * @param id
+     *            The ID of the control to get
+     */
+    public Component getControl(String id) {
+        return (Component) controls.get(id);
+    }
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MDIFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MDIFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MDIFrame.java	(revision 42196)
@@ -0,0 +1,1965 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.ContainerEvent;
+import java.awt.event.ContainerListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.sql.rowset.spi.SyncResolver;
+import javax.swing.AbstractButton;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JSeparator;
+import javax.swing.JToolBar;
+import javax.swing.KeyStroke;
+import javax.swing.MenuElement;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.WindowConstants;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.actioninfo.ActionInfoStatusCache;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.plugins.ExtensionDecorator;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.ActionTool;
+import org.gvsig.andami.plugins.config.generate.Label;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.andami.plugins.config.generate.PopupMenu;
+import org.gvsig.andami.plugins.config.generate.SelectableTool;
+import org.gvsig.andami.plugins.config.generate.SkinExtensionType;
+import org.gvsig.andami.plugins.config.generate.ToolBar;
+import org.gvsig.andami.ui.mdiFrame.TranslatableButtonHelper.TranslatableButton;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.MDIManagerFactory;
+import org.gvsig.gui.beans.controls.IControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Main application window.
+ *
+ * Use Launcher.getMDIFrame to get the instance of this class.
+ *
+ * @version $Revision: 39484 $
+ */
+@SuppressWarnings("unchecked")
+public class MDIFrame extends JFrame implements ComponentListener,
+        ContainerListener, ActionListener, MainFrame {
+
+    private static final long serialVersionUID = -2472484309160847654L;
+
+    private static Logger logger = LoggerFactory.getLogger(MDIFrame.class);
+
+    private static MDIFrame instance = null;
+
+    private MDIManager mdiManager = MDIManagerFactory.createManager();
+
+    private boolean refreshingControls = false;
+
+    /**
+     * Elementos de la aplicaci�n
+     */
+    private JMenuBar menuBar = new JMenuBar();
+
+    /**
+     * Panel which contains the toolbars
+     */
+    private JPanel toolBars = new JPanel();
+
+    /**
+     * Status bar
+     */
+    private NewStatusBar bEstado = null;
+
+    /**
+     * Asocia los nombres con las barras de herramientas
+     */
+    private HashMap toolBarMap = new HashMap();
+
+    /**
+     * Almacena los grupos de selectableTools
+     */
+    private HashMap buttonGroupMap = new HashMap();
+    /**
+     * Stores the initially selected tools.
+     * It contains pairs (String groupName, JToolBarToggleButton button)
+     */
+    private HashMap initialSelectedTools = new HashMap();
+
+    /**
+     * Stores the actionCommand of the selected tool, for each group.
+     * It contains pairs (String groupName, JToolBarToggleButton button)
+     */
+    private Map selectedTool = null;
+    // this should be the same value defined at plugin-config.xsd
+    private String defaultGroup = "unico";
+
+    /**
+     * Asocia los nombres con los popupMenus
+     */
+    private HashMap popupMap = new HashMap();
+
+    /**
+     * Asocia controles con la clase de la extension asociada
+     */
+    private List<JComponent> controls = new ArrayList<JComponent>();
+
+    /**
+     * Asocia la informaci�n sobre las etiquetas que van en la status bar con
+     * cada extension
+     */
+    private HashMap classLabels = new HashMap();
+
+    // private HashMap classControls = new HashMap();
+    /**
+     * ProgressListeners (ver interfaz com.iver.mdiApp.ui.ProgressListener)
+     */
+    private ArrayList progressListeners = new ArrayList();
+
+    /**
+     * Timer para invocar los enventos de la interfaz anterior
+     */
+    private Timer progressTimer = null;
+
+    /**
+     * Tabla hash que asocia las clases con las extensiones
+     */
+    // private Map classesExtensions = new HashMap<Class<? extends IExtension>, ExtensionDecorator>();
+    /**
+     * �ltima clase que activ� etiquetas
+     */
+    private Class lastLabelClass;
+
+    /**
+     * Instancia que pone los tooltip en la barra de estado
+     */
+    private TooltipListener tooltipListener = new TooltipListener();
+
+    private HashMap infoCodedMenus = new HashMap();
+
+    private String titlePrefix;
+
+    private static final String noIcon = "no-icon";
+
+    private Map<JComponent,IExtension> control2extensions = new HashMap<JComponent, IExtension>();
+
+    private MDIFrame() {
+
+    }
+
+    public static boolean isInitialized() {
+        return instance!=null ;
+    }
+
+    public static MDIFrame getInstance() {
+        if ( instance == null ) {
+            instance = new MDIFrame();
+        }
+        return instance;
+    }
+
+    /**
+     * Makes some initialization tasks.
+     *
+     * @throws RuntimeException
+     */
+    public void init() {
+        JPopupMenu.setDefaultLightWeightPopupEnabled(false);
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            throw new RuntimeException("Not Event Dispatch Thread");
+        }
+
+        // Se a�aden los listeners del JFrame
+        this.addWindowListener(new WindowAdapter() {
+
+            @Override
+            public void windowClosing(WindowEvent e) {
+                Launcher.closeApplication();
+            }
+        });
+        this.addComponentListener(this);
+        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+
+        // Se configura la barra de menu
+        setJMenuBar(menuBar);
+
+        // Se configura el layout del JFrame principal
+        this.getContentPane().setLayout(new BorderLayout());
+
+        /*
+         * Se configura y se a�ade el JPanel de las barras de
+         * herramientas
+         */
+        FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
+        layout.setHgap(0);
+        layout.setVgap(0);
+        toolBars.setLayout(layout);
+        getContentPane().add(toolBars, BorderLayout.PAGE_START);
+
+        // Add the status bar of the application
+        bEstado = new NewStatusBar();
+        bEstado.message(Messages.getString("StatusBar.Aplicacion_iniciada"), JOptionPane.INFORMATION_MESSAGE);
+        getContentPane().add(bEstado, BorderLayout.SOUTH);
+
+        this.toolBars.addContainerListener(this);
+
+
+        /*
+         * Setting default values. Persistence is read
+         * afterwards
+         */
+        setSize(
+                MainFrame.MAIN_FRAME_SIZE_DEFAULT[0],
+                MainFrame.MAIN_FRAME_SIZE_DEFAULT[1]);
+        setLocation(
+                MainFrame.MAIN_FRAME_POS_DEFAULT[0],
+                MainFrame.MAIN_FRAME_POS_DEFAULT[1]);
+        setExtendedState(
+                MainFrame.MAIN_FRAME_EXT_STATE_DEFAULT);
+
+        mdiManager.init(this);
+    }
+
+    @Override
+    public void setTitle(final String title) {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    setTitle(title);
+                }
+            });
+            return;
+        }
+        super.setTitle(titlePrefix + " : " + title);
+    }
+
+    public void addTool(final PluginClassLoader loader, final SkinExtensionType ext,
+            final ToolBar toolBar, final SelectableTool selectableTool)
+            throws ClassNotFoundException {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    public void run() {
+                        try {
+                            addTool(loader, ext, toolBar, selectableTool);
+                        } catch (ClassNotFoundException ex) {
+                            logger.warn("��� Eehh????", ex);
+                        }
+                    }
+                });
+            } catch (Exception ex) {
+                // Do nothing
+            }
+            return;
+        }
+        String name = toolBar.getName();
+        SelectableToolBar jtb = getToolBar(name);
+        if( selectableTool.getDropDownGroup()!=null ) {
+            ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+            ActionInfo action = actionManager.getAction(selectableTool.getName());
+            if( action!=null ) {
+                DropDownButton dropDownButton = (DropDownButton) jtb.findComponent(selectableTool.getDropDownGroup());
+                if( dropDownButton==null ) {
+                    dropDownButton = new DropDownButton();
+                    dropDownButton.setName(selectableTool.getDropDownGroup());
+                    jtb.add(dropDownButton);
+                    addControl(dropDownButton);
+                }
+                dropDownButton.add(actionManager.getTranslated(action));
+            }
+            return;
+        }
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        JToolBarToggleButton btn;
+        ImageIcon image
+                = PluginServices.getIconTheme().get(selectableTool.getIcon());
+
+        if ( image != null ) {
+            btn = new JToolBarToggleButton(selectableTool.getText(), image);
+        } else {
+            logger.warn("Unable to find icon '" + selectableTool.getIcon() + "'.");
+            btn
+                    = new JToolBarToggleButton(selectableTool.getText(),
+                            PluginServices.getIconTheme().get(noIcon));
+        }
+
+        org.gvsig.andami.ui.mdiFrame.ToggleButtonModel buttonModel
+                = new org.gvsig.andami.ui.mdiFrame.ToggleButtonModel();
+        btn.setModel(buttonModel);
+        btn.setMargin(new Insets(0, 0, 0, 0));
+        btn.addMouseListener(tooltipListener);
+        btn.addActionListener(this);
+        btn.setFocusable(false);
+        btn.setActionCommand(selectableTool.getActionCommand());
+        btn.setToolTipText(selectableTool.getTooltip());
+        btn.setEnabled(false);
+        btn.setVisible(false);
+
+        ButtonGroup group;
+        if ( buttonGroupMap.containsKey(selectableTool.getGroup()) ) {
+            group = (ButtonGroup) buttonGroupMap.get(selectableTool.getGroup());
+        } else {
+            group = new ButtonGroup();
+            buttonGroupMap.put(selectableTool.getGroup(), group);
+
+        }
+        jtb.addButton(group, btn);
+        buttonModel.setGroupName(selectableTool.getGroup());
+
+        if ( selectableTool.getIsDefault() ) {
+            btn.setSelected(true);
+            initialSelectedTools.put(selectableTool.getGroup(),
+                    btn.getActionCommand());
+        }
+
+        addControl(btn);
+
+        if ( selectableTool.getName() != null ) {
+            btn.setName(selectableTool.getName());
+        }
+
+        if ( selectableTool.getTooltip() != null ) {
+            btn.setToolTip(i18nManager.getTranslation(selectableTool.getTooltip()));
+            btn.setToolTipKey(selectableTool.getTooltip());
+        }
+
+        if ( selectableTool.getEnableText() != null ) {
+            btn.setEnableText(i18nManager.getTranslation(selectableTool.getEnableText()));
+        }
+
+        if ( selectableTool.getLast() == true ) {
+            jtb.addSeparator();
+        }
+    }
+
+    /**
+     * Add a button to the toolbar.
+     *
+     * @param ext
+     * Texto del boton, si es null no aparece texto
+     * @param ext
+     * Extension asociada al control
+     * @param toolBar
+     * Icono del boton, si es null no aparece texto
+     * @param actionTool
+     * Tooltip de la barra de herramientas
+     *
+     * @throws ClassNotFoundException
+     * @throws RuntimeException
+     */
+    public void addTool(final PluginClassLoader loader, final SkinExtensionType ext,
+            final ToolBar toolBar, final ActionTool actionTool) throws ClassNotFoundException {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    public void run() {
+                        try {
+                            addTool(loader, ext, toolBar, actionTool);
+                        } catch (ClassNotFoundException ex) {
+                            logger.warn("��� Eehh????", ex);
+                        }
+                    }
+                });
+            } catch (Exception ex) {
+                // Do nothing
+            }
+            return;
+        }
+
+        String name = toolBar.getName();
+        SelectableToolBar jtb = getToolBar(name);
+        if( actionTool.getDropDownGroup()!=null ) {
+            ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+            ActionInfo action = actionManager.getAction(actionTool.getName());
+            if( action!=null ) {
+                DropDownButton dropDownButton = (DropDownButton) jtb.findComponent(actionTool.getDropDownGroup());
+                if( dropDownButton==null ) {
+                    dropDownButton = new DropDownButton();
+                    dropDownButton.setName(actionTool.getDropDownGroup());
+                    jtb.add(dropDownButton);
+                    addControl(dropDownButton);
+                }
+                dropDownButton.add(actionManager.getTranslated(action));
+            }
+            return;
+        }
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        JToolBarButton btn;
+        ImageIcon image = IconThemeHelper.getImageIcon(actionTool.getIcon());
+
+        if ( image != null ) {
+            btn = new JToolBarButton(actionTool.getText(), image);
+        } else {
+            logger.warn("Unable to find icon '" + actionTool.getIcon() + "'.");
+            btn
+                    = new JToolBarButton(actionTool.getText(), PluginServices
+                            .getIconTheme().get(noIcon));
+        }
+
+        btn.setMargin(new Insets(0, 0, 0, 0));
+        btn.addMouseListener(tooltipListener);
+        btn.addActionListener(this);
+        btn.setFocusable(false);
+        btn.setActionCommand(actionTool.getActionCommand());
+        btn.setEnabled(false);
+        btn.setVisible(false);
+
+
+        jtb.add(btn);
+
+        addControl(btn);
+
+        if ( actionTool.getName() != null ) {
+            btn.setName(actionTool.getName());
+        }
+
+        if ( actionTool.getTooltip() != null ) {
+            btn.setToolTip(i18nManager.getTranslation(actionTool.getTooltip()));
+            btn.setToolTipKey(actionTool.getTooltip());
+        }
+
+        if ( actionTool.getEnableText() != null ) {
+            btn.setEnableText(i18nManager.getTranslation(actionTool.getEnableText()));
+        }
+
+        if ( actionTool.getLast() == true ) {
+            jtb.addSeparator();
+        }
+    }
+
+    private SelectableToolBar getToolBar(final String toolBarName) {
+        SelectableToolBar jtb = (SelectableToolBar) toolBarMap.get(toolBarName);
+        if ( jtb == null ) {
+            jtb = new SelectableToolBar(toolBarName);
+            jtb.setRollover(true);
+            jtb.setAndamiVisibility(true);
+            toolBarMap.put(toolBarName, jtb);
+            toolBars.add(jtb);
+        }
+        return jtb;
+    }
+
+    public void addTool(final ActionInfo action, final String toolBarName, final String dropDownName) {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    addTool(action, toolBarName,dropDownName);
+                }
+            });
+            return;
+        }
+        SelectableToolBar jtb = getToolBar(toolBarName);
+        DropDownButton dropDownButton = (DropDownButton) jtb.findComponent(dropDownName);
+        if( dropDownButton == null ) {
+            dropDownButton = new DropDownButton();
+            jtb.add(dropDownButton);
+        }
+        ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+        dropDownButton.add(actionManager.getTranslated(action));
+    }
+
+    public void addTool(final ActionInfo action, final String toolBarName) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    addTool(action, toolBarName);
+                }
+            });
+            return;
+        }
+        JToolBarButton btn = new JToolBarButton(action.getIcon());
+        btn.setMargin(new Insets(0, 0, 0, 0));
+        btn.addMouseListener(tooltipListener);
+        btn.addActionListener(this);
+        btn.setFocusable(false);
+        btn.setActionCommand(action.getCommand());
+        btn.setEnabled(false);
+        btn.setVisible(false);
+        btn.setName(action.getName());
+        if ( action.getTooltip() != null ) {
+            btn.setToolTip(i18nManager.getTranslation(action.getTooltip()));
+            btn.setToolTipKey(action.getTooltip());
+        }
+
+        SelectableToolBar jtb = getToolBar(toolBarName);
+        jtb.add(btn);
+
+        addControl(btn);
+
+    }
+
+    /**
+     * Creates the needed menu structure to add the menu to the bar.
+     * Returns the father which must hold the menu which was
+     * provided as parameter.
+     *
+     * Crea la estructura de menus necesaria para a�adir el menu a la barra.
+     * Devuelve el padre del cual debe colgar el menu que se pasa como
+     * parametro.
+     *
+     * @param menu
+     * The Menu whose support is going to be added
+     * @param loader
+     * The plugin's class loader
+     *
+     * @return The proper father for the menu which was provided as parameter
+     */
+    private JMenu createMenuAncestors(Menu menu, PluginClassLoader loader) {
+        return createMenuAncestors(menu.getText());
+    }
+
+    private JMenu createMenuAncestors(String text) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        MenuElement menuPadre = null;
+
+        String[] menues = text.split("/");
+        List menuList = new ArrayList();
+        menuList.add(menues[0]);
+        menuPadre = getMenu(menuList, menuBar);
+
+        JMenu padre = null;
+
+        if ( menuPadre == null ) {
+            padre = new JMenuTraslatable(i18nManager.getTranslation(menues[0]));
+            ((JMenuTraslatable) padre).setTextKey(menues[0]);
+            padre.setName(menues[0]);
+            addControl(padre);
+            menuBar.add(padre);
+        } else if ( menuPadre instanceof JMenu ) {
+            padre = (JMenu) menuPadre;
+        } else {
+            logger.warn("Error creating menu. Ancestor does not exist (" + text + ").");
+            return null;
+        }
+
+        // Se crea el resto de menus
+        ArrayList temp = new ArrayList();
+
+        for ( int i = 1; i < (menues.length - 1); i++ ) {
+            temp.add(menues[i]);
+        }
+
+        menuPadre = createMenus(temp, padre);
+
+        return (JMenu) menuPadre;
+    }
+
+    /**
+     * A�ade la informacion del menu al framework.
+     * Debido a que los men�es se
+     * pueden introducir en un orden determinado por el usuario, pero los
+     * plugins se instalan en un orden arbitrario, primero se almacena la
+     * informacion de todos los menus para luego ordenarlos y posteriormente
+     * a�adirlos al interfaz
+     *
+     * @param loader
+     * Posicion del menu. Se ordena por este campo
+     * @param ext
+     * Array con los nombres de los padres del menu
+     * @param menu
+     * Texto del menu
+     *
+     * @throws ClassNotFoundException
+     * @throws RuntimeException
+     */
+    public void addMenu(final PluginClassLoader loader, final SkinExtensionType ext,
+            final Menu menu) throws ClassNotFoundException {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    public void run() {
+                        try {
+                            addMenu(loader, ext, menu);
+                        } catch (ClassNotFoundException ex) {
+                            logger.warn("��� Eehh????", ex);
+                        }
+                    }
+                });
+            } catch (Exception ex) {
+                // Do nothing
+            }
+            return;
+        }
+        JMenu menuPadre = createMenuAncestors(menu, loader);
+
+        if ( menu.getIs_separator() ) {
+            menuPadre.addSeparator();
+            return;
+        }
+
+        JMenuItem nuevoMenu = createJMenuItem(loader, menu);
+        nuevoMenu.addMouseListener(tooltipListener);
+        menuPadre.add(nuevoMenu);
+        addControl(nuevoMenu);
+
+    }
+
+    public void addMenu(final ActionInfo action, final String text) {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    addMenu(action, text);
+                }
+            });
+            return;
+        }
+        JMenu menuPadre = createMenuAncestors(text);
+        JMenuItem nuevoMenu = createJMenuItem(action, text);
+        nuevoMenu.addMouseListener(tooltipListener);
+        menuPadre.add(nuevoMenu);
+        Class<? extends IExtension> classExtension = action.getExtension().getClass();
+        addControl(nuevoMenu);
+    }
+
+    /**
+     * Dado lista de nombres de menu, encuentra el menu
+     *
+     * @param nombres
+     * @param padre
+     * @return
+     */
+    private javax.swing.JMenuItem getMenu(List nombres, MenuElement parent) {
+        if ( parent instanceof javax.swing.JMenu ) {
+            javax.swing.JMenu parentItem = (javax.swing.JMenu) parent;
+
+            for ( int i = 0; i < parentItem.getMenuComponentCount(); i++ ) {
+
+                String item_name = parentItem.getMenuComponent(i).getName();
+                if ( ((item_name != null) && (item_name.compareTo((String) nombres.get(0)) == 0))
+                        || /*
+                         * We also accept "leaf menus" with no name
+                         * (Project manager, View-1, View-2, etc)
+                         */ lastMenuItemWithoutName(parentItem.getMenuComponent(i), nombres) ) {
+
+                    nombres.remove(0);
+                    if ( nombres.isEmpty() ) {
+                        if ( parentItem.getMenuComponent(i) instanceof javax.swing.JMenuItem ) {
+                            return (javax.swing.JMenuItem) parentItem
+                                    .getMenuComponent(i);
+                        } else {
+                            logger.error(PluginServices.getText(this,
+                                    "Menu_type_not_supported_")
+                                    + " "
+                                    + parentItem.getMenuComponent(i).getClass()
+                                    .getName());
+                            return null;
+                        }
+                    } else {
+                        return getMenu(nombres,
+                                (MenuElement) parentItem.getMenuComponent(i));
+                    }
+                }
+            }
+        } else if ( parent instanceof JMenuBar ) {
+            javax.swing.JMenuBar parentItem = (javax.swing.JMenuBar) parent;
+
+            for ( int i = 0; i < parentItem.getMenuCount(); i++ ) {
+                if ( (parentItem.getMenu(i).getName() != null // not a
+                        // JToolBar.Separator
+                        )
+                        && (parentItem.getMenu(i).getName()
+                        .compareTo((String) nombres.get(0)) == 0) ) {
+                    nombres.remove(0);
+                    if ( nombres.isEmpty() ) {
+                        if ( parentItem.getMenu(i) instanceof javax.swing.JMenuItem ) {
+                            return parentItem.getMenu(i);
+                        } else {
+                            logger.error(PluginServices.getText(this,
+                                    "Menu_type_not_supported_")
+                                    + " "
+                                    + parentItem.getMenu(i).getClass()
+                                    .getName());
+                            return null;
+                        }
+                    } else {
+                        return getMenu(nombres, parentItem.getMenu(i));
+                    }
+                }
+            }
+        } else {
+            logger.error(PluginServices.getText(this,
+                    "Menu_type_not_supported_")
+                    + " "
+                    + parent.getClass().getName() + " " + parent.toString());
+        }
+        return null;
+    }
+
+    /**
+     * @param menuComponent
+     * @param nombres
+     * @return
+     */
+    private boolean lastMenuItemWithoutName(Component mc, List names) {
+
+        /*
+         * names must have 1 string
+         */
+        if ( names == null || names.size() != 1 ) {
+            return false;
+        }
+        if ( !(mc instanceof JMenuItem) ) {
+            return false;
+        }
+        JMenuItem jmi = (JMenuItem) mc;
+        if ( jmi.getName() != null ) {
+            /*
+             * Name must be null, so this is a menu leaf
+             */
+            return false;
+        }
+        if ( jmi.getText() == null ) {
+            return false;
+        }
+        return jmi.getText().compareTo((String) names.get(0)) == 0;
+    }
+
+    private class JMenuTraslatable extends JMenu implements TranslatableButton {
+
+        private TranslatableButtonHelper i18nHelper = new TranslatableButtonHelper();
+
+        public JMenuTraslatable(String text) {
+            super(text);
+        }
+
+        public void setTextKey(String key) {
+            this.i18nHelper.setText(key);
+        }
+
+        public void setToolTipKey(String key) {
+            this.i18nHelper.setTooltip(key);
+        }
+
+        public void translate() {
+            if ( this.i18nHelper.needTranslation() ) {
+                this.i18nHelper.translate();
+                this.setText(this.i18nHelper.getText());
+            }
+        }
+
+    }
+
+    /**
+     * Crea la estructura de menus recursivamente. Por ejemplo, si se le pasa
+     * en el par�metro nombres el array {"Search", "References", "Workspace"}
+     * crear� un men� Search, un submen� del anterior que se llamar�
+     * References y debajo de �ste �ltimo otro menu llamado Workspace
+     *
+     * @param nombres
+     * Array con los nombres de los men�s que se quieren crear
+     * @param padre
+     * Menu padre de los men�s creados. Es �til porque es un
+     * algoritmo recursivo
+     *
+     * @return Devuelve el men� creado. Al final de toda la recursividad,
+     * devolver� el men� de m�s abajo en la jerarqu�a
+     *
+     * @throws RuntimeException
+     */
+    private JMenu createMenus(ArrayList nombres, JMenu padre) {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            logger.warn("Este metodo requiere que se este ejecutando en el hilo de eventos de AWT.");
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        // si no quedan nombres de menu por crear se vuelve: caso base
+        if ( nombres.isEmpty() ) {
+            return padre;
+        }
+
+        // Se busca el menu por si ya existiera para no crearlo otra vez
+        JMenu buscado = null;
+
+        for ( int i = 0; i < padre.getMenuComponentCount(); i++ ) {
+            try {
+                JMenu hijo = (JMenu) padre.getMenuComponent(i);
+
+                if ( hijo.getName().compareTo((String) nombres.get(0)) == 0 ) {
+                    buscado = hijo;
+                }
+            } catch (ClassCastException e) {
+                /*
+                 * Se ha encontrado un elemento hoja del arbol de men�es
+                 */
+            }
+        }
+
+        if ( buscado != null ) {
+            // Si lo hemos encontrado creamos el resto
+            nombres.remove(0);
+
+            return createMenus(nombres, buscado);
+        } else {
+            // Si no lo hemos encontrado se crea el menu, se a�ade al padre
+            // y se crea el resto
+            String nombre = (String) nombres.get(0);
+            JMenuTraslatable menuPadre = new JMenuTraslatable(i18nManager.getTranslation(nombre));
+            menuPadre.setTextKey(nombre);
+            menuPadre.setName(nombre);
+            addControl(menuPadre);
+            padre.add(menuPadre);
+
+            nombres.remove(0);
+
+            return createMenus(nombres, menuPadre);
+        }
+    }
+
+    /**
+     * M�todo invocado en respuesta a ciertos eventos de la interfaz que
+     * pueden
+     * ocultar botones de las barras de herramientas y que redimensiona �sta
+     * de manera conveniente para que no se oculte ninguno
+     */
+    private void ajustarToolBar() {
+        int margen = 8;
+        int numFilas = 1;
+        double acum = margen;
+
+        int toolHeight = 0;
+
+        for ( int i = 0; i < toolBars.getComponentCount(); i++ ) {
+            Component c = toolBars.getComponent(i);
+
+            if ( !c.isVisible() ) {
+                continue;
+            }
+
+            double width = c.getPreferredSize().getWidth();
+            acum = acum + width;
+
+            if ( acum > this.getWidth() ) {
+                numFilas++;
+                acum = width + margen;
+            }
+
+            if ( c.getPreferredSize().getHeight() > toolHeight ) {
+                toolHeight = c.getPreferredSize().height;
+            }
+        }
+
+        toolBars.setPreferredSize(new Dimension(this.getWidth(),
+                (numFilas * toolHeight)));
+
+        toolBars.updateUI();
+    }
+
+    public void setClassesExtensions(Map<Class<? extends IExtension>, ExtensionDecorator> classesExtensions) {
+        // Ya no es necesario que se mantenga el Map con las extensiones.
+
+//    	Map<Class<? extends IExtension>, ExtensionDecorator> extensions = new HashMap<Class<? extends IExtension>, ExtensionDecorator>();
+//    	for ( Entry<Class<? extends IExtension>, ExtensionDecorator>  entry: classesExtensions.entrySet()) {
+//			if( ! (entry.getValue().getExtension() instanceof LibraryExtension) ) {
+//				extensions.put(entry.getKey(), entry.getValue());
+//			}
+//		}
+//        this.classesExtensions = extensions;
+    }
+
+    /**
+     * Metodo de callback invocado cuando se selecciona un menu o un boton
+     * de
+     * la barra de herramientas. Se busca la extensi�n asociada y se ejecuta
+     *
+     * @param e
+     * Evento producido
+     */
+    public void actionPerformed(ActionEvent e) {
+
+        String actionName = "(unknow)";
+        try {
+            JComponent control = (JComponent) e.getSource();
+            actionName = control.getName();
+
+            ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+            ActionInfo action = actionManager.getAction(control.getName());
+            Object args = null;
+            if ( control instanceof IControl ) {
+                args = ((IControl) control).getValue();
+            }
+            if ( args == null ) {
+                action.execute();
+            } else {
+                action.execute(args);
+            }
+            String actionCommand = e.getActionCommand();
+            try {
+                JToolBarToggleButton toggle = (JToolBarToggleButton) control;
+                ToggleButtonModel model = (ToggleButtonModel) toggle.getModel();
+                selectedTool.put(model.getGroupName(), actionCommand);
+            } catch (ClassCastException ex) {
+            } catch (NullPointerException ex) {
+            }
+
+        } catch (Throwable ex) {
+            logger.error("Can't perform action '" + actionName + "'.", ex);
+        }
+
+        enableControls();
+        showMemory();
+    }
+
+    private String getName(String name, PluginClassLoader loader) {
+        if ( name.indexOf('.') == -1 ) {
+            return loader.getPluginName() + "." + name;
+        } else {
+            return name;
+        }
+    }
+
+    public void addPopupMenu(PluginClassLoader loader, PopupMenu menu) {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+
+        String name = getName(menu.getName(), loader);
+
+        // Se crea el control popupmenu
+        JPopUpMenu popupMenu = (JPopUpMenu) popupMap.get(name);
+
+        if ( popupMenu == null ) {
+            popupMenu = new JPopUpMenu(menu.getName());
+            popupMap.put(name, popupMenu);
+        }
+
+        Menu[] menues = menu.getMenu();
+        for ( int i = 0; i < menues.length; i++ ) {
+            JMenuItem nuevoMenu = createJMenuItem(loader, menues[i]);
+            popupMenu.add(nuevoMenu);
+        }
+    }
+
+    private JMenuItem createJMenuItem(PluginClassLoader loader, Menu menu) {
+        JMenuItem nuevoMenu = null;
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        String text = menu.getText();
+        int n = text.lastIndexOf('/');
+        if ( n >= 0 ) {
+            text = text.substring(n + 1);
+        }
+        String translatedText = i18nManager.getTranslation(text);
+
+        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        if ( menu.getIcon() != null ) {
+            if ( iconTheme.exists(menu.getIcon()) ) {
+                ImageIcon image = iconTheme.get(menu.getIcon());
+                nuevoMenu = new JMenuItem(translatedText, image);
+            } else {
+                nuevoMenu = new JMenuItem(translatedText);
+                logger.info("menu icon '" + menu.getIcon() + "' not exists.");
+            }
+        } else {
+            nuevoMenu = new JMenuItem(translatedText);
+        }
+        nuevoMenu.setTextKey(text);
+        nuevoMenu.setName(menu.getName());
+
+        if ( menu.getKey() != null ) {
+            nuevoMenu.setAccelerator(KeyMapping.getKeyStroke(menu.getKey()));
+        }
+
+        nuevoMenu.setActionCommand(menu.getActionCommand());
+
+        if ( menu.getTooltip() != null ) {
+            nuevoMenu.setToolTip(i18nManager.getTranslation(menu.getTooltip()));
+            nuevoMenu.setToolTipKey(menu.getTooltip());
+        }
+
+        if ( menu.getEnableText() != null ) {
+            nuevoMenu.setEnableText(i18nManager.getTranslation(menu.getEnableText()));
+        }
+
+        nuevoMenu.setEnabled(true);
+        nuevoMenu.setVisible(true);
+
+        if ( menu.getName() != null ) {
+            ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+            final ActionInfo actionInfo = actionManager.getAction(menu.getName());
+            if ( actionInfo != null ) {
+                nuevoMenu.addActionListener(actionInfo);
+            }
+        }
+        return nuevoMenu;
+    }
+
+    private JMenuItem createJMenuItem(ActionInfo action, String text) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        JMenuItem nuevoMenu = null;
+        String label = null;
+
+        if ( text == null ) {
+            label = action.getLabel();
+        } else if ( text.contains("/") ) {
+            String[] ss = text.split("/");
+            label = ss[ss.length - 1];
+        } else {
+            label = text;
+        }
+        String translatedText = i18nManager.getTranslation(label);
+        if ( action.getIconName() != null ) {
+            ImageIcon image = action.getIcon();
+            if ( image != null ) {
+                nuevoMenu = new JMenuItem(translatedText, image);
+            } else {
+                nuevoMenu = new JMenuItem(translatedText);
+            }
+        } else {
+            nuevoMenu = new JMenuItem(translatedText);
+        }
+        nuevoMenu.setName(action.getName());
+        KeyStroke key = action.getKeyStroke();
+        if ( key != null ) {
+            nuevoMenu.setAccelerator(key);
+        }
+        nuevoMenu.setActionCommand(action.getCommand());
+        if ( action.getTooltip() != null ) {
+            nuevoMenu.setToolTip(i18nManager.getTranslation(action.getTooltip()));
+        }
+        nuevoMenu.setEnabled(true);
+        nuevoMenu.setVisible(true);
+        nuevoMenu.addActionListener(action);
+        return nuevoMenu;
+    }
+
+    /**
+     * Muestra u oculta el menu de nombre 'name'
+     *
+     * @param name
+     * Nombre del menu que se quiere mostrar
+     * @param x
+     * Evento de raton
+     * @param y
+     * @param c
+     */
+    private void showPopupMenu(String name, int x, int y, Component c) {
+        JPopupMenu menu = (JPopupMenu) popupMap.get(name);
+
+        if ( menu != null ) {
+            menu.show(c, x, y);
+        }
+    }
+
+    public void removePopupMenuListener(String name, ActionListener listener) {
+        JPopupMenu menu = (JPopupMenu) popupMap.get(name);
+
+        if ( menu != null ) {
+            Component[] jmenuitems = menu.getComponents();
+
+            for ( int i = 0; i < jmenuitems.length; i++ ) {
+                if ( jmenuitems[i] instanceof JMenuItem ) {
+                    ((JMenuItem) jmenuitems[i]).removeActionListener(listener);
+                }
+            }
+        }
+    }
+
+    public void addPopupMenuListener(String popupName, Component c,
+            ActionListener listener, PluginClassLoader loader) {
+        final String name = getName(popupName, loader);
+
+        JPopupMenu menu = (JPopupMenu) popupMap.get(name);
+
+        if ( menu != null ) {
+            Component[] jmenuitems = menu.getComponents();
+
+            for ( int i = 0; i < jmenuitems.length; i++ ) {
+                if ( jmenuitems[i] instanceof JMenuItem ) {
+                    ((JMenuItem) jmenuitems[i]).addActionListener(listener);
+                }
+            }
+        }
+
+        c.addMouseListener(new MouseAdapter() {
+
+            @Override
+            public void mousePressed(MouseEvent e) {
+                if ( e.isPopupTrigger() ) {
+                    showPopupMenu(name, e.getX(), e.getY(), e.getComponent());
+                }
+            }
+
+            @Override
+            public void mouseReleased(MouseEvent e) {
+                if ( e.isPopupTrigger() ) {
+                    showPopupMenu(name, e.getX(), e.getY(), e.getComponent());
+                }
+            }
+        });
+    }
+
+    /**
+     * Loop on the controls to enable/disable and show/hide them, according to
+     * its associated action (ActionInfo)
+     *
+     * @throws RuntimeException
+     */
+    public void enableControls() {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    enableControls();
+                }
+            });
+            return;
+        }
+
+        ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+        ActionInfoStatusCache cache = actionManager.createActionStatusCache();
+
+        // Enable or disable controls, according to its associated extensions
+        Iterator<JComponent> e = controlsIterator();
+
+        while ( e.hasNext() ) {
+            JComponent control = (JComponent) e.next();
+            String actionName = control.getName();
+            ActionInfo action = actionManager.getAction(actionName);
+            try {
+                boolean enabled = false;
+                boolean visible = false;
+
+                if ( action == null ) {
+                    if( control instanceof DropDownButton ) {
+                        DropDownButton dropDownButton = (DropDownButton)control;
+                        visible = !dropDownButton.isAllHiden();
+                        enabled = !dropDownButton.isAllDisabled();
+                    } else if( control instanceof JMenuTraslatable ) {
+                        enabled = true;
+                        visible = true;
+                    } else {
+                        IExtension extension = this.control2extensions.get(control);
+                        if( extension!=null ) {
+                            enabled = extension.isEnabled();
+                            visible = extension.isVisible();
+                        } else {
+                            logger.warn("Can't enable/show control '"+control.getClass().getName()+"/"+control.getName()+".");
+                            enabled = true;
+                            visible = true;
+                        }
+                    }
+                } else {
+                    enabled = false;
+                    visible = cache.isVisible(action);
+                    if ( visible ) {
+                        enabled = cache.isEnabled(action);
+                    }
+                }
+                control.setEnabled(enabled);
+                control.setVisible(visible);
+            } catch (Throwable ex) {
+                // Catch exceptins and errors (class not found)
+                logger.info("Can't enable/show control '" + actionName + "'.", ex);
+                this.message("Can't enable/show control '" + actionName + "'.", JOptionPane.ERROR_MESSAGE);
+                try {
+                    control.setEnabled(false);
+                    control.setVisible(false);
+                } catch (Exception ex2) {
+                    // Ignore errors
+                }
+            }
+        }
+
+        // Loop in the menus to hide the menus that don't have visible children
+        for ( int i = 0; i < menuBar.getMenuCount(); i++ ) {
+            MenuElement menu = menuBar.getMenu(i);
+            hideMenus(menu);
+            if ( menu instanceof JMenu ) {
+                // hide (ugly) redundant separators and assign keyboard
+                // mnemonics
+                Component[] comps = ((JMenu) menu).getMenuComponents();
+                // mnemonics have to be unique for each top-level menu
+                char mnemonics[] = new char[comps.length];
+                if ( comps.length > 0 ) {
+                    // Set keyboard mnemonic for this top-level entry
+                    String text = ((JMenu) menu).getText();
+                    char mnemonic = getMnemonic(text, mnemonics);
+                    if ( ' ' != mnemonic ) {
+                        ((JMenu) menu).setMnemonic(mnemonic);
+                        mnemonics[0] = mnemonic;
+                    }
+                }
+                // now go through all entries in this menu, hid
+                // separators if necessary and assing remaining mnemonics
+                hideSeparatorsAndMakeMnemonics(menu, mnemonics);
+            }
+        }
+
+        // hide the toolbars that don't contain any visible tool
+        Iterator it = toolBarMap.values().iterator();
+
+        while ( it.hasNext() ) {
+            JComponent t = (JComponent) it.next();
+            boolean todosOcultos = true;
+
+            for ( int i = 0; i < t.getComponentCount(); i++ ) {
+                if ( !(t.getComponent(i) instanceof JSeparator) // separators
+                        // don't matter
+                        && t.getComponent(i).isVisible() ) {
+                    todosOcultos = false;
+                }
+            }
+
+            if ( todosOcultos ) {
+                t.setVisible(false);
+            } else {
+                if ( t instanceof SelectableToolBar ) {
+                    t.setVisible(((SelectableToolBar) t).getAndamiVisibility());
+                } else {
+                    t.setVisible(true);
+                }
+            }
+        }
+
+        if ( mdiManager != null ) {
+            JPanel f = (JPanel) mdiManager.getActiveWindow();
+
+            if ( f != null ) {
+                if ( lastLabelClass != f.getClass() ) {
+                    lastLabelClass = f.getClass();
+
+                    Label[] lbls = (Label[]) classLabels.get(lastLabelClass);
+
+                    if ( lbls != null ) {
+                        bEstado.setLabelSet(lbls);
+                    }
+                }
+            }
+        }
+
+        ajustarToolBar();
+
+        showMemory();
+    }
+
+    public synchronized void refreshControls() {
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    refreshControls();
+                }
+            });
+            return;
+        }
+
+        if(refreshingControls){
+            return;
+        }
+        try {
+        refreshingControls = true;
+        ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+        ActionInfoStatusCache cache = actionManager.createActionStatusCache();
+        IconTheme icontheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+
+        Iterator e = controlsIterator();
+
+        while ( e.hasNext() ) {
+            JComponent control = (JComponent) e.next();
+            if ( control instanceof TranslatableButton ) {
+                ((TranslatableButton) control).translate();
+            }
+            String actionlName = control.getName();
+            ActionInfo action = actionManager.getAction(actionlName);
+            if ( action != null ) {
+                if ( control instanceof AbstractButton ) {
+                    AbstractButton button = (AbstractButton) control;
+                    if ( control instanceof javax.swing.JMenuItem ) {
+                        if ( action.getIconName() != null && action.getIconName().length() > 0 ) {
+                            if ( icontheme.exists(action.getIconName()) ) {
+                                button.setIcon(action.getIcon());
+                            }
+                        }
+                    } else {
+                        button.setIcon(action.getIcon());
+                    }
+                }
+            }
+        }
+        enableControls();
+        } finally {
+            refreshingControls = false;
+        }
+    }
+
+    public void message(String msg, int messageTyoe) {
+        this.getStatusBar().message(msg, messageTyoe);
+    }
+
+    /**
+     * Establece la visibilidad de un menu y todos sus descendientes en la
+     * jerarquia teniendo en cuenta la visibilidad de todos los submenus.
+     *
+     * @param menu
+     * Menu que se quiere visualizar
+     *
+     * @return Devuelve true si el menu es visible y false en caso contrario
+     */
+    private boolean hideMenus(MenuElement menu) {
+        MenuElement[] submenus = menu.getSubElements();
+
+        // Si no tiene hijos se devuelve su visibilidad
+        if ( submenus.length == 0 ) {
+            return menu.getComponent().isVisible();
+        }
+
+        /*
+         * Si tiene hijos se devuelve true si alg�no de ellos es visible,
+         * pero se itera por todos ellos
+         */
+        boolean visible = false;
+
+        for ( int i = 0; i < submenus.length; i++ ) {
+            if ( hideMenus(submenus[i]) ) {
+                if ( !(menu instanceof JPopupMenu) ) {
+                    menu.getComponent().setVisible(true);
+                }
+
+                visible = true;
+            }
+        }
+
+        if ( visible ) {
+            return true;
+        }
+
+        menu.getComponent().setVisible(false);
+
+        return false;
+    }
+
+    /**
+     *
+     * Recurse through all menu elements and make sure there are no
+     * redundant separators.
+     * This method will make sure that a separator only becomes visible
+     * if at least one visible non-separator menu entry preceeded it.
+     *
+     *
+     */
+    private void hideSeparatorsAndMakeMnemonics(MenuElement menu,
+            char[] mnemonics) {
+        // flag that indicates whether a separator is to be displayed or not
+        boolean allowSeparator;
+
+        allowSeparator = false; // separator not allowed as very first menu item
+        Component[] comps = ((JMenu) menu).getMenuComponents();
+        if ( comps.length < 1 ) {
+            // zero-length menu: skip
+            return;
+        }
+
+        for ( int i = 0; i < comps.length; i++ ) {
+            if ( comps[i] instanceof JSeparator ) {
+                // got a separator: display only if allowed at this position
+                if ( allowSeparator == true ) {
+                    // look at all successive menu entries to make sure that at
+                    // least one
+                    // is visible and not a separator (otherwise, this separator
+                    // would
+                    // be the last visible item in this menu) -- we don't want
+                    // that
+                    comps[i].setVisible(false);
+                    for ( int j = i; j < comps.length; j++ ) {
+                        if ( !(comps[j] instanceof JSeparator) ) {
+                            if ( comps[j].isVisible() ) {
+                                comps[i].setVisible(true); // display separator!
+                                break;
+                            }
+                        }
+                    }
+                } else {
+                    comps[i].setVisible(false);
+                }
+                allowSeparator = false; // separator is not allowed right after
+                // another separator
+            } else {
+                if ( comps[i] instanceof JMenu ) { // got a submenu: recurse
+                    // through it
+                    // get number of submenu components
+                    Component[] scomps = ((JMenu) comps[i]).getMenuComponents();
+                    // make a new, fresh array to hold unique mnemonics for this
+                    // submenu
+                    char[] smnemonics = new char[scomps.length];
+                    hideSeparatorsAndMakeMnemonics(((MenuElement) comps[i]),
+                            smnemonics);
+                    if ( comps[i].isVisible() ) {
+                        allowSeparator = true; // separators are OK after
+                        // visible submenus
+                        // Set keyboard mnemonic for this submenu
+                        String text = ((JMenu) comps[i]).getText();
+                        char mnemonic = getMnemonic(text, mnemonics);
+                        if ( ' ' != mnemonic ) {
+                            ((JMenu) comps[i]).setMnemonic(mnemonic);
+                            mnemonics[i] = mnemonic;
+                        }
+                    }
+                } else {
+                    if ( comps[i].isVisible() ) {
+                        if ( comps[i] instanceof JMenuItem ) {
+                            // Set keyboard mnemonic for this menu item
+                            String text = ((JMenuItem) comps[i]).getText();
+                            char mnemonic = getMnemonic(text, mnemonics);
+                            if ( ' ' != mnemonic ) {
+                                ((JMenuItem) comps[i]).setMnemonic(mnemonic);
+                                mnemonics[i] = mnemonic;
+                            }
+                        }
+                        allowSeparator = true; // separators are OK after
+                        // regular, visible entries
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Helper functios for assigning a unique mnemomic char from
+     * a pool of unassigned onces, stored in the array "mnemomnics"
+     */
+    private char getMnemonic(String text, char[] mnemonics) {
+        if( text==null ) {
+            return ' ';
+        }
+        Vector words = new Vector();
+        StringTokenizer t = new StringTokenizer(text);
+        int maxsize = 0;
+
+        while ( t.hasMoreTokens() ) {
+            String word = t.nextToken();
+            if ( word.length() > maxsize ) {
+                maxsize = word.length();
+            }
+            words.addElement(word);
+        }
+        words.trimToSize();
+
+        for ( int i = 0; i < maxsize; ++i ) {
+            char mnemonic = getMnemonic(words, mnemonics, i);
+            if ( ' ' != mnemonic ) {
+                return mnemonic;
+            }
+        }
+
+        return ' ';
+    }
+
+    private char getMnemonic(Vector words, char[] mnemonics, int index) {
+        int numwords = words.size();
+
+        for ( int i = 0; i < numwords; ++i ) {
+            String word = (String) words.elementAt(i);
+            if ( index >= word.length() ) {
+                continue;
+            }
+
+            char c = word.charAt(index);
+            if ( !isMnemonicExists(c, mnemonics) ) {
+                /* pick only valid chars */
+                if ( (c != ':') && (c != '.') && (c != ',') && (c != ';')
+                        && (c != '-') && (c != '+') && (c != '/') && (c != '\\')
+                        && (c != '\'') && (c != '\"') && (c != ' ') && (c != '=')
+                        && (c != '(') && (c != ')') && (c != '[') && (c != ']')
+                        && (c != '{') && (c != '}') && (c != '$') && (c != '*')
+                        && (c != '&') && (c != '%') && (c != '!') && (c != '?')
+                        && (c != '#') && (c != '~') && (c != '_') ) {
+                    return c;
+                }
+            }
+        }
+        return ' ';
+    }
+
+    private boolean isMnemonicExists(char c, char[] mnemonics) {
+        int num = mnemonics.length;
+        for ( int i = 0; i < num; ++i ) {
+            if ( mnemonics[i] == c ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Muestra la memoria consumida por el programa
+     */
+    private void showMemory() {
+        Runtime r = Runtime.getRuntime();
+        long mem = r.totalMemory() - r.freeMemory();
+        logger.debug(PluginServices.getText(this, "memory_usage") + " " + mem
+                / 1024 + " KB");
+    }
+
+    public MDIManager getMDIManager() {
+        return mdiManager;
+    }
+
+    public NewStatusBar getStatusBar() {
+        return bEstado;
+    }
+
+    /**
+     * You can use this function to select the appropiate
+     * tool inside the toolbars
+     */
+    public void setSelectedTool(String actionCommand) {
+        setSelectedTool(defaultGroup, actionCommand);
+    }
+
+    /**
+     * You can use this function to select the appropiate
+     * tool inside the toolbars
+     */
+    public void setSelectedTool(String groupName, String actionCommand) {
+        ButtonGroup group = (ButtonGroup) buttonGroupMap.get(groupName);
+        if ( group == null ) {
+            return;
+        }
+
+        Enumeration enumeration = group.getElements();
+        while ( enumeration.hasMoreElements() ) {
+            AbstractButton button = (AbstractButton) enumeration.nextElement();
+            if ( button.getActionCommand().equals(actionCommand) ) {
+                button.setSelected(true);
+            }
+        }
+
+        selectedTool.put(groupName, actionCommand);
+    }
+
+    /**
+     * You can use this function to select the appropiate
+     * tool inside the toolbars
+     */
+    public void setSelectedTools(Map selectedTools) {
+        selectedTool = selectedTools;
+        if ( selectedTools == null ) {
+            return;
+        }
+        Iterator groupNames = selectedTools.keySet().iterator();
+        while ( groupNames.hasNext() ) {
+            try {
+                String groupName = (String) groupNames.next();
+                ButtonGroup group = (ButtonGroup) buttonGroupMap.get(groupName);
+                Enumeration enumeration = group.getElements();
+                String actionCommand = (String) selectedTools.get(groupName);
+                if ( actionCommand == null ) {
+                    continue;
+                }
+                while ( enumeration.hasMoreElements() ) {
+                    AbstractButton button
+                            = (AbstractButton) enumeration.nextElement();
+                    if ( button.getActionCommand().equals(actionCommand) ) {
+                        button.setSelected(true);
+                    }
+                }
+            } catch (ClassCastException ex) {
+                logger
+                        .error("selectedTool should only contain pairs (String groupName, JToolBarToggleButton button)");
+            }
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param clase
+     * @param label
+     */
+    public void setStatusBarLabels(Class<?> clase, Label[] label) {
+        classLabels.put(clase, label);
+    }
+
+    public void removeStatusBarLabels(Class<?> clase) {
+        classLabels.remove(clase);
+    }
+
+    public void addStatusBarControl(Class<?> extensionClass, IControl control) {
+        control.addActionListener(this);
+        bEstado.addControl(control.getName(), (Component) control);
+        if ( control instanceof JComponent ) {
+            addControl((JComponent) control);
+            PluginsManager pluginsManager = PluginsLocator.getManager();
+            IExtension extension = pluginsManager.getExtension((Class<? extends IExtension>) extensionClass);
+            this.control2extensions.put((JComponent)control, extension);
+        }
+    }
+
+    public void addToolBarControl(Class<?> extensionClass, JToolBar control, String name) {
+        toolBars.add(control);
+        addControl(control);
+
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        IExtension extension = pluginsManager.getExtension((Class<? extends IExtension>) extensionClass);
+        this.control2extensions.put(control, extension);
+    }
+
+    public void removeStatusBarControl(String name) {
+        Component c = bEstado.removeControl(name);
+        if ( c instanceof JComponent ) {
+            removeControl((JComponent) c);
+        }
+    }
+
+    public void removeMenu(Menu menu) {
+        JMenuItem delete = (JMenuItem) infoCodedMenus.get(menu);
+
+        if ( delete == null ) {
+            throw new NoSuchElementException(menu.getText());
+        }
+
+        delete.getParent().remove(delete);
+        infoCodedMenus.remove(menu);
+    }
+
+    public void addMenu(Menu menu, ActionListener listener,
+            PluginClassLoader loader) {
+        JMenu menuPadre = createMenuAncestors(menu, loader);
+
+        // Se registra y a�aade el menu
+        JMenuItem nuevoMenu = createJMenuItem(loader, menu);
+        nuevoMenu.addMouseListener(tooltipListener);
+        if ( listener != null && menu.getName() != null && menu.getName().trim().length() > 0 ) {
+            ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+            final ActionInfo actionInfo = actionManager.getAction(menu.getName());
+            if ( actionInfo != null ) {
+                nuevoMenu.removeActionListener(actionInfo);
+            }
+            nuevoMenu.addActionListener(listener);
+        } else {
+            /*
+             * We also add action listener for menu with
+             * no name but with text:
+             *
+             * Window/Project manager
+             * Window/View - 1
+             * Window/View - 2
+             * etc
+             */
+            if ( listener != null && menu.getText() != null && menu.getText().trim().length() > 0 ) {
+                nuevoMenu.addActionListener(listener);
+            }
+
+        }
+        menuPadre.add(nuevoMenu);
+
+        infoCodedMenus.put(menu, nuevoMenu);
+    }
+
+    public void changeMenuName(String[] menu, String newName,
+            PluginClassLoader loader) {
+
+        ArrayList menuList = new ArrayList();
+        for ( int i = 0; i < menu.length; i++ ) {
+            menuList.add(menu[i]);
+        }
+
+        javax.swing.JMenuItem newMenu = getMenu(menuList, menuBar);
+        if ( newMenu == null ) {
+            throw new NoSuchMenuException(menu[0]);
+        } else {
+            newMenu.setText(PluginServices.getText(this, newName));
+        }
+    }
+
+    public void componentHidden(ComponentEvent arg0) {
+    }
+
+    public void componentMoved(ComponentEvent arg0) {
+    }
+
+    public void componentResized(ComponentEvent arg0) {
+        ajustarToolBar();
+    }
+
+    public void componentShown(ComponentEvent arg0) {
+    }
+
+    public void componentAdded(ContainerEvent arg0) {
+        ajustarToolBar();
+    }
+
+    public void componentRemoved(ContainerEvent arg0) {
+        ajustarToolBar();
+    }
+
+    public class TooltipListener extends MouseAdapter {
+
+        @Override
+        public void mouseEntered(MouseEvent e) {
+            JComponent control = (JComponent) e.getSource();
+            EnableTextSupport ets = (EnableTextSupport) e.getSource();
+
+            String texto = null;
+            texto = control.getToolTipText();
+
+            if ( texto != null ) {
+                bEstado.setInfoTextTemporal(texto);
+            }
+        }
+
+        @Override
+        public void mouseExited(MouseEvent arg0) {
+            bEstado.restaurarTexto();
+        }
+
+        @Override
+        public void mousePressed(MouseEvent e) {
+            bEstado.restaurarTexto();
+        }
+    }
+
+    public String getTitlePrefix() {
+        return titlePrefix;
+    }
+
+    public void setTitlePrefix(String titlePrefix) {
+        this.titlePrefix = titlePrefix;
+    }
+
+    public Map getSelectedTools() {
+        return selectedTool;
+    }
+
+    public HashMap getInitialSelectedTools() {
+        return initialSelectedTools;
+    }
+
+    /**
+     * Get a previously added JComponent by name.
+     * For example you can use it if you need to obtain a JToolBar to
+     * add some customized component.
+     *
+     * @param name
+     * @return the JComponent or null if none has been found
+     */
+    public JComponent getComponentByName(String name) {
+        Iterator e = controlsIterator();
+
+        while ( e.hasNext() ) {
+            JComponent control = (JComponent) e.next();
+            String nameCtrl = control.getName();
+            if ( nameCtrl != null ) {
+                if ( nameCtrl.compareTo(name) == 0 ) {
+                    return control;
+                }
+            }
+        }
+        Iterator it = toolBarMap.values().iterator();
+        while ( it.hasNext() ) {
+            JComponent t = (JComponent) it.next();
+            String nameCtrl = t.getName();
+            if ( nameCtrl != null ) {
+                if ( nameCtrl.compareTo(name) == 0 ) {
+                    return t;
+                }
+            }
+
+        }
+
+        return null;
+    }
+
+    public SelectableToolBar[] getToolbars() {
+        return (SelectableToolBar[]) toolBarMap.values().toArray(
+                new SelectableToolBar[0]);
+    }
+
+    public boolean getToolbarVisibility(String name) {
+        JComponent component
+                = PluginServices.getMainFrame().getComponentByName(name);
+        if ( (component != null) && (component instanceof SelectableToolBar) ) {
+            SelectableToolBar toolBar = (SelectableToolBar) component;
+            return toolBar.getAndamiVisibility();
+        }
+        return false;
+    }
+
+    public boolean setToolbarVisibility(String name, boolean visibility) {
+        JComponent component
+                = PluginServices.getMainFrame().getComponentByName(name);
+        if ( (component != null) && (component instanceof SelectableToolBar) ) {
+            SelectableToolBar toolBar = (SelectableToolBar) component;
+            boolean oldVisibility = toolBar.getAndamiVisibility();
+            toolBar.setAndamiVisibility(visibility);
+            enableControls();
+            return oldVisibility;
+        }
+        return false;
+    }
+
+    public javax.swing.JMenuItem getMenuEntry(String[] menuPath) {
+        ArrayList menu = new ArrayList();
+        for ( int i = 0; i < menuPath.length; i++ ) {
+            menu.add(menuPath[i]);
+        }
+        return getMenu(menu, menuBar);
+    }
+
+    public void messageDialog(String message, String title, int messageType) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        helper.messageDialog(message, title, messageType);
+    }
+
+    public void messageDialog(String message, String[] messageArgs,
+            String title, int messageType) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        helper.messageDialog(message, messageArgs, title, messageType);
+    }
+
+    public int confirmDialog(String message, String title, int optionType,
+            int messageType) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.confirmDialog(message, title, optionType, messageType);
+    }
+
+    public String inputDialog(String message, String title, int messageType,
+            String initialValue) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.inputDialog(message, title, messageType, initialValue);
+    }
+
+    public String inputDialog(String message, String title) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.inputDialog(message, title);
+    }
+
+    public void showDialog(Component contents, String title) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        helper.showDialog(contents, title);
+    }
+
+    public Component createComponent(Class<? extends Component> theClass,
+            Object... parameters) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.createComponentWithParams(theClass, parameters);
+    }
+
+    public Component createComponentWithParams(
+            Class<? extends Component> theClass, Object[] parameters) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.createComponentWithParams(theClass, parameters);
+    }
+
+    public File[] showChooserDialog(
+            final String title,
+            final int type, // SAVE_DIALOG / OPEN_DIALOG
+            final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
+            final boolean multiselection,
+            final File initialPath,
+            final FileFilter filter,
+            final boolean fileHidingEnabled
+    ) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.showChooserDialog(title, type, selectionMode, multiselection, initialPath, filter, fileHidingEnabled);
+    }
+
+    public File[] showOpenDirectoryDialog(String title, File initialPath) {
+        return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
+    }
+
+    public File[] showOpenFileDialog(String title, File initialPath) {
+        return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+    }
+
+    public File[] showSaveFileDialog(String title, File initialPath) {
+        return showChooserDialog(title, JFileChooser.SAVE_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+    }
+
+    private void addControl(JComponent control) {
+        controls.add(control);
+    }
+
+    private void removeControl(JComponent control) {
+        controls.remove(control);
+    }
+
+    private Iterator<JComponent> controlsIterator() {
+        return this.controls.iterator();
+    }
+
+    @Override
+    public void setLocale(Locale locale) {
+        super.setLocale(locale); //To change body of generated methods, choose Tools | Templates.
+        MDIManager mdiManager = MDIManagerFactory.createManager();
+        mdiManager.setLocale(locale);
+        if ( this.controls != null && !this.controls.isEmpty() ) {
+            this.refreshControls();
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MDIFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java	(revision 42196)
@@ -0,0 +1,124 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.Component;
+import javax.swing.ButtonGroup;
+import javax.swing.JToggleButton;
+import javax.swing.JToolBar;
+import org.apache.commons.lang3.StringUtils;
+
+
+/**
+ * Caja de herramientas seleccionables
+ */
+public class SelectableToolBar extends JToolBar {
+	private static final long serialVersionUID = 1L;
+	/**
+     * Andami visibility: determines whether this toolbar should
+     * be shown by Andami. If it's false, the toolbar will be
+     * hidden even if its associated extension is visible.
+     */
+    private boolean _visible;
+
+    /**
+     * Creates a new SelectableToolBar object.
+     *
+     * @param titulo T�tulo de la barra
+     */
+    public SelectableToolBar(String titulo) {
+        super(titulo);
+    }
+
+    /**
+     * A�ade un boton a la caja
+     *
+     * @param btn bot�n a a�adir.
+     */
+    public void addButton(ButtonGroup group, JToggleButton btn) {
+    	group.add(btn);
+        add(btn);
+    }
+
+    /**
+     * Selects a toggleButton in this toolBar by ActionCommand
+     * @param actionCommand
+     */
+    public void setSelectedTool(String actionCommand){
+        for (int i = 0; i < getComponentCount(); i++) {
+            if (getComponent(i) instanceof JToggleButton)
+            {
+                JToggleButton toggleButton = (JToggleButton) getComponent(i);
+                String aux = toggleButton.getActionCommand();
+                if (aux != null)
+                  if (aux.equals(actionCommand)){
+                        toggleButton.setSelected(true);
+                      }
+            }
+        }
+
+    }
+    
+    /**
+     * Sets whether or not this toolbar should
+     * be shown by Andami. If it's false, the toolbar will be
+     * hidden even if its associated extension is visible.
+     * 
+     * @param visible
+     */
+    public void setAndamiVisibility(boolean visible) {
+    	_visible = visible;
+    }
+    
+    /**
+     * Gets whether this toolbar should
+     * be shown by Andami. If it's false, the toolbar will be
+     * hidden even if its associated extension is visible.
+     * 
+     * @return <code>true</code> if the toolbar should be shown
+     * when it has some visible button, <code>false</code> if
+     * the toolbar should be hidden even it it contains some
+     * buttons that should be visible according to its associated
+     * extension.
+     */
+    public boolean getAndamiVisibility() {
+    	return _visible;
+    }
+    
+    public Component findComponent(String name) {
+        if( StringUtils.isBlank(name) ) {
+            return null;
+        }
+        Object lock = this.getTreeLock();
+        synchronized(lock) {
+            for( int i=0; i<this.getComponentCount(); i++ ) {
+                Component c1= this.getComponent(i);
+                if( name.equalsIgnoreCase(c1.getName()) ) {
+                    return c1;
+                }
+            }
+        }
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DropDownButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DropDownButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DropDownButton.java	(revision 42196)
@@ -0,0 +1,170 @@
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.BorderLayout;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingConstants;
+import javax.swing.plaf.basic.BasicArrowButton;
+import org.apache.commons.lang3.BooleanUtils;
+
+public class DropDownButton extends JButton {
+
+    private final List<Action> actions = new ArrayList<Action>();
+    private Action currentAction = null;
+    private final JButton mainButton;
+    private final JButton dropDownButton;
+    private JPopupMenu dropDownMenu;
+    private boolean showText = false;
+
+    public DropDownButton() {
+        super();
+        this.mainButton = new JButton();
+        this.dropDownMenu = null;
+
+        this.dropDownButton = new BasicArrowButton(SwingConstants.SOUTH);
+        dropDownButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                doToggleDropDownMenu();
+            }
+        });
+
+        this.setBorder(BorderFactory.createEmptyBorder());
+        this.dropDownButton.setBorder(BorderFactory.createEmptyBorder());
+        this.mainButton.setBorder(BorderFactory.createEmptyBorder());
+        this.setLayout(new BorderLayout());
+        this.add(mainButton, BorderLayout.CENTER);
+        this.add(dropDownButton, BorderLayout.EAST);
+
+        this.mainButton.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent ae) {
+                if (currentAction != null) {
+                    currentAction.actionPerformed(ae);
+                }
+            }
+        });
+
+    }
+
+    @Override
+    public void setVisible(boolean aFlag) {
+        super.setVisible(aFlag);
+    }
+
+    public void add(final Action action) {
+        this.actions.add(action);
+        if (this.actions.size() == 1) {
+            mainButton.setIcon((Icon) action.getValue(Action.SMALL_ICON));
+            if (showText) {
+                mainButton.setText((String) action.getValue(Action.SHORT_DESCRIPTION));
+            } else {
+                mainButton.setText("");
+            }
+            currentAction = action;
+        }
+    }
+
+    public boolean isAllHiden() {
+        for (Action action : actions) {
+            Boolean isVisible = (Boolean) action.getValue("VISIBLE");
+            if( isVisible==null ) {
+                return false;
+            }
+            if( isVisible.booleanValue() ) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+
+    public boolean isAllDisabled() {
+        this.mainButton.setEnabled(this.currentAction.isEnabled());
+        for (Action action : actions) {
+            if( action.isEnabled() ) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private void createDropDownMenu() {
+        this.dropDownMenu = null;
+        for (Action action : actions) {
+            Boolean isVisible = (Boolean) action.getValue("VISIBLE");
+            if( !BooleanUtils.isTrue(isVisible) ) {
+                continue;
+            }
+
+            JMenuItem mi = new JMenuItem(
+                    (String) action.getValue(Action.SHORT_DESCRIPTION),
+                    (Icon) action.getValue(Action.SMALL_ICON)
+            );
+            mi.setToolTipText((String) action.getValue(Action.SHORT_DESCRIPTION));
+            mi.addActionListener(new MyItemActionListener(action));
+            mi.setEnabled(action.isEnabled());
+            if( this.dropDownMenu==null ) {
+                this.dropDownMenu = new JPopupMenu();
+                this.dropDownMenu.addFocusListener(new FocusListener() {
+                    public void focusGained(FocusEvent fe) {
+                    }
+                    public void focusLost(FocusEvent fe) {
+                        if( dropDownMenu!=null ) {
+                            dropDownMenu.setVisible(false);
+                        }
+                    }
+                });
+            }
+            this.dropDownMenu.add(mi);
+        }
+    }
+
+    private class MyItemActionListener implements ActionListener {
+        private Action action = null;
+        MyItemActionListener(Action action) {
+            this.action = action;
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            mainButton.setIcon((Icon) action.getValue(Action.SMALL_ICON));
+            if (showText) {
+                mainButton.setText((String) action.getValue(Action.SHORT_DESCRIPTION));
+            } else {
+                mainButton.setText("");
+            }
+            currentAction = action;
+            dropDownMenu.setVisible(false);
+            mainButton.setEnabled(true);
+            action.actionPerformed(ae);
+        }
+    }
+
+    private void doToggleDropDownMenu() {
+        if (dropDownMenu==null || !dropDownMenu.isVisible()) {
+            createDropDownMenu();
+            dropDownMenu.show(this, 0,this.getHeight());
+        } else {
+            dropDownMenu.setVisible(false);
+        }
+    }
+
+    public void setShowText(boolean showText) {
+        this.showText = showText;
+    }
+
+    public boolean isShowText() {
+        return showText;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+/**
+ * @author root
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public interface EnableTextSupport {
+	/**
+	 * @return Returns the enableText.
+	 */
+	public abstract String getEnableText();
+
+	/**
+	 * @param enableText The enableText to set.
+	 */
+	public abstract void setEnableText(String enableText);
+
+	/**
+	 * @see java.awt.Component#setVisible(boolean)
+	 */
+	public abstract void setEnabled(boolean aFlag);
+
+	/**
+	 * @see javax.swing.JComponent#setToolTipText(java.lang.String)
+	 */
+	public abstract void setToolTip(String text);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JMenuItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JMenuItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JMenuItem.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import org.gvsig.andami.ui.mdiFrame.TranslatableButtonHelper.TranslatableButton;
+
+public class JMenuItem extends javax.swing.JMenuItem implements EnableTextSupport, TranslatableButton {
+
+    private TranslatableButtonHelper i18nHelper = new TranslatableButtonHelper();
+    private String enableText;
+    private String toolTip = super.getToolTipText();
+
+    public JMenuItem() {
+        super();
+    }
+
+    public JMenuItem(String text) {
+        super(text);
+    }
+
+    public JMenuItem(String text, int mnemonic) {
+        super(text, mnemonic);
+    }
+
+    public JMenuItem(String text, Icon icon) {
+        super(text, icon);
+    }
+
+    public JMenuItem(Action a) {
+        super(a);
+    }
+
+    public JMenuItem(Icon icon) {
+        super(icon);
+    }
+
+    /**
+     * @return Returns the enableText.
+     */
+    public String getEnableText() {
+        return enableText;
+    }
+
+    /**
+     * @param enableText The enableText to set.
+     */
+    public void setEnableText(String enableText) {
+        this.enableText = enableText;
+    }
+
+    public void setEnabled(boolean aFlag) {
+        super.setEnabled(aFlag);
+        if ( aFlag ) {
+            setToolTipText(toolTip);
+        } else {
+            setToolTipText(enableText);
+        }
+    }
+
+    public void setToolTip(String text) {
+        toolTip = text;
+    }
+
+    public void setToolTipKey(String key) {
+        this.i18nHelper.setTooltip(key);
+    }
+
+    public void setTextKey(String key) {
+        this.i18nHelper.setText(key);
+    }
+
+    public void translate() {
+        if ( this.i18nHelper.needTranslation() ) {
+            this.i18nHelper.translate();
+            this.setText(this.i18nHelper.getText());
+            this.setToolTip(this.i18nHelper.getTooltip());
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JMenuItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.ButtonGroup;
+
+/**
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public class ToggleButtonModel extends javax.swing.JToggleButton.ToggleButtonModel {
+	
+	private String _groupName = null;
+
+	public ButtonGroup getGroup() {
+		return group;
+	}
+	
+	public String getGroupName() {
+		return _groupName;
+	}
+	
+	public void setGroupName(String groupName) {
+		_groupName = groupName; 
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MainFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MainFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MainFrame.java	(revision 42196)
@@ -0,0 +1,258 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.Frame;
+import java.awt.event.ActionListener;
+import java.util.Locale;
+
+import javax.swing.JComponent;
+import javax.swing.JToolBar;
+
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.Label;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.gui.beans.controls.IControl;
+
+
+
+/**
+ * This interface represents the main application's window. It allow to access
+ * the menus, the tool bars and the status bar. 
+ */
+public interface MainFrame extends ThreadSafeDialogs {
+    
+    public static final String MAIN_FRAME_POS = "MDIFramePos";
+    public static final String MAIN_FRAME_SIZE = "MDIFrameSize";
+    public static final String MAIN_FRAME_EXT_STATE = "MDIFrameState";
+    
+    public static final int[] MAIN_FRAME_POS_DEFAULT = { 0, 0 };
+    public static final int[] MAIN_FRAME_SIZE_DEFAULT = { 1024, 768 };
+    public static final int MAIN_FRAME_EXT_STATE_DEFAULT = Frame.MAXIMIZED_BOTH;
+
+	/**
+	 * Adds the provided menu to the menu bar.
+	 *
+	 * @param menu A Menu object containing the menu definition
+	 * @param listener Object which receives the menu events
+	 * @param loader ClassLoader of the plug-in that installs this menu
+	 */
+	public void addMenu(Menu menu, ActionListener listener,
+		PluginClassLoader loader);
+
+	public void addMenu(ActionInfo action, String text);
+
+        public void addTool(final ActionInfo action, final String toolBarName, final String dropDownName);
+        
+	public void addTool(final ActionInfo action, final String toolBarName);
+
+	/**
+	 * Changes the menu name, and thus also its location, as the name determines
+	 * the location of the menu. 
+	 *
+	 * @param menu An array of Strings which represents the full menu path,
+	 * for example, {"Vista", "export", "imagen"} is a reference to the menu
+	 * "Vista/export/imagen" (that is, the menu Image within the submenu
+	 * View-Export). Menu names are translation keys, "Vista", "export", etc will
+	 * be translated to the suitable language when they are displayed.
+	 * @param newName New menu's name, in the syntax "Vista/export/symbols". Each
+	 * part of the name is a translation key.
+	 * @param loader ClassLoader of the plug-in that added the menu
+	 *
+	 * @throws NoSuchMenuException If there is no menu matching the provided
+	 * menu path
+	 */
+	public void changeMenuName(String[] menu, String newName,
+		PluginClassLoader loader) throws NoSuchMenuException;
+
+	/**
+	 * Deletes the provided menu, if found.
+	 *
+	 * @param menu The menu to delete from the menu bar
+	 */
+	public void removeMenu(Menu menu);
+
+	/**
+	 * It checks whether each extension is enabled and visible, in order to
+	 * enable/disable and show/hide their associated controls.
+	 * 
+	 * This method is thread safe.
+	 * 
+	 */
+	public void enableControls();
+	
+	/**
+	 * This method is thread safe.
+	 * 
+	 */
+	public void refreshControls();
+
+	/**
+	 * Gets the status bar, the bar located in the bottom part of the main window.
+	 * It can be used to show messages, show progress bars, or change the status.
+	 *
+	 * @return The main application's status bar.
+	 */
+	public NewStatusBar getStatusBar();
+
+	/**
+	 * Sets the main window title.
+	 *
+	 * This method is thread safe.
+	 * 
+	 * @param titulo The title to be set in the main window
+	 */
+	public void setTitle(String titulo);
+
+    /**
+     * Gets a previously added JComponent by name (including
+     * tool bars, buttons from tool bars, status bar controls
+     * and menus. For example
+     * you can use it if you need to obtain an status bar
+     * control or a JToolBar to
+     * add some customized component
+     * @param name
+     * @return the JComponent or null if none has been found
+     */
+    public JComponent getComponentByName(String name);
+
+    /**
+     * Sets the tool associated to the provided actionComand
+     * as the selected tool for the currently selected Andami window.
+     */
+    public void setSelectedTool(String actionCommand);
+    
+    /**
+     * Gets an array containing all the toolbars.
+     * 
+     * @return An array containing all the toolbars.
+     */
+    public SelectableToolBar[] getToolbars();
+    
+    /**
+     * Gets wheter or not this toolbar should be shown by Andami.
+     * Note that this does not reflect the actual visibility
+     * of the toolbar, because it also depends on other conditions
+     * (the toolbar should contain at lest a currently visible button).
+     * 
+     * @param name The toolbar's name
+     * @return
+     */
+    public boolean getToolbarVisibility(String name);
+    
+    /**
+     * Sets wheter or not this toolbar should be shown by Andami.
+     * This is useful if to hide some toolbars when they are not
+     * going to be used.
+     * If it's false, the toolbar will be
+     * hidden even if its associated extensions are visible.
+     * Note that setting visibility to true does not automatically
+     * show the toolbar, because it also depends on other conditions
+     * (the toolbar should contain at lest a currently visible button).
+     * However, it allows the toolbar to be visible when necessary
+     * conditions are fulfilled.
+     * 
+     * @param name The toolbar's name.
+     * @param visibility
+     * @return
+     */
+    public boolean setToolbarVisibility(String name, boolean visibility);
+
+    /**
+     * Gets the menu entry corresponding the provided menu path.
+     * 
+     * @param menuPath The menu path to the menu entry that we want to
+     * retrieve. For example, if we want to retrieve the menu entry
+     * corresponding to the XML menu "Layer/Export/Export_to_PDF" we
+     * will provide an array containing ["Layer", "Export", "Export_to_PDF"].
+     * 
+     * @return The menu entry corresponding the provided menu path. Note that
+     * the menu entry may be an instance of <code>javax.swing.JMenuItem</code>,
+     * <code>javax.swing.JMenu</code> or
+     * <code>com.iver.andami.ui.mdiFrame.JMenuItem</code>.
+     */
+    public javax.swing.JMenuItem getMenuEntry(String[] menuPath);
+    
+	/**
+	 * Adds a control to the status bar and associate it with the
+	 * provided extension. The control will be enabled and visible
+	 * when the extension is enabled and visible.
+	 * 
+	 * @param extensionClass Extension which will determine whether the
+	 * control is enabled and visible.
+	 * @param control The control to add.
+	 */
+	public void addStatusBarControl(Class<?> extensionClass, IControl control);
+	
+	/**
+	 * Removes the providedcontrol from the status bar.
+	 * 
+	 * @param name The name of the control to remove
+	 */
+	public void removeStatusBarControl(String name);
+	
+	/**
+	 * Sets the provided label-set as the labels associated with the provided
+	 * class. The labels will be visible in the status bar if the
+	 * currently selected Andami window is an instance of the provided
+	 * class.
+	 * 
+	 * @param clase The class which will be associated to the label-set. The
+	 * labels will be visible if the currently selected Andami window is an
+	 * instance of this class.
+	 * 
+	 * @param label An array of Labels. Each label has an ID which will be
+	 * used to write text on them.
+	 */
+	public void setStatusBarLabels(Class<?> clase, Label[] label);
+
+	/**
+	 * Removes the labels associated with the provided class.
+	 * 
+	 * @param clase The class whose associated labels are to be removed.
+	 */
+	public void removeStatusBarLabels(Class<?> clase);
+	
+	public void addToolBarControl(Class<?> extensionClass, JToolBar control, String name);
+
+	/**
+	 * Show the message in the status bar of the application.
+	 * 
+	 * The types of messages are:
+	 * 
+	 * JOptionPane.INFORMATION_MESSAGE
+	 * JOptionPane.WARNING_MESSAGE
+	 * JOptionPane.ERROR_MESSAGE
+	 * 
+	 * This method is thread safe to use.
+	 * 
+	 * @param msg to show
+	 * @param messageTyoe type of message.
+	 */
+	public void message(String msg, int messageTyoe);
+	
+        public void setLocale(Locale locale);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MainFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.JPopupMenu;
+
+public class JPopUpMenu extends JPopupMenu implements EnableTextSupport{
+	private String enableText;
+	private String toolTip = super.getToolTipText();
+	
+	
+	/**
+	 * @return Returns the enableText.
+	 */
+	public String getEnableText() {
+		return enableText;
+	}
+	/**
+	 * @param enableText The enableText to set.
+	 */
+	public void setEnableText(String enableText) {
+		this.enableText = enableText;
+	}
+	
+	
+	/**
+	 * @see java.awt.Component#setVisible(boolean)
+	 */
+	public void setEnabled(boolean aFlag) {
+		super.setEnabled(aFlag);
+		if (aFlag){
+			setToolTipText(toolTip);
+		}else{
+			setToolTipText(enableText);
+		}
+	}
+	/**
+	 * @see javax.swing.JComponent#setToolTipText(java.lang.String)
+	 */
+	public void setToolTip(String text) {
+		toolTip = text;
+	}
+	/**
+	 * 
+	 */
+	public JPopUpMenu() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param label
+	 */
+	public JPopUpMenu(String label) {
+		super(label);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+
+public class NoSuchMenuException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	public NoSuchMenuException() {
+		super();
+
+	}
+	/**
+	 * @param message
+	 */
+	public NoSuchMenuException(String message) {
+		super(message);
+
+	}
+	/**
+	 * @param message
+	 * @param cause
+	 */
+	public NoSuchMenuException(String message, Throwable cause) {
+		super(message, cause);
+
+	}
+	/**
+	 * @param cause
+	 */
+	public NoSuchMenuException(Throwable cause) {
+		super(cause);
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/KeyMapping.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/KeyMapping.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/KeyMapping.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.Toolkit;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.KeyStroke;
+
+import org.gvsig.andami.messages.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * Clase que sirve para obtener los codigos de las teclas de la manera que las
+ * requieren los JMenu a partir de un caracter que representa dicha tecla
+ *
+ */
+public class KeyMapping {
+	private static Logger logger = LoggerFactory.getLogger(KeyMapping.class);
+	
+    /** Asocia caracteres con KeyEvents */
+    private static Map<String,Integer> keys = new HashMap<String, Integer>();
+
+    static {
+        keys.put("a", new Integer(KeyEvent.VK_A));
+        keys.put("b", new Integer(KeyEvent.VK_B));
+        keys.put("c", new Integer(KeyEvent.VK_C));
+        keys.put("d", new Integer(KeyEvent.VK_D));
+        keys.put("e", new Integer(KeyEvent.VK_E));
+        keys.put("f", new Integer(KeyEvent.VK_F));
+        keys.put("g", new Integer(KeyEvent.VK_G));
+        keys.put("h", new Integer(KeyEvent.VK_H));
+        keys.put("i", new Integer(KeyEvent.VK_I));
+        keys.put("j", new Integer(KeyEvent.VK_J));
+        keys.put("k", new Integer(KeyEvent.VK_K));
+        keys.put("l", new Integer(KeyEvent.VK_L));
+        keys.put("m", new Integer(KeyEvent.VK_M));
+        keys.put("n", new Integer(KeyEvent.VK_N));
+        keys.put("o", new Integer(KeyEvent.VK_O));
+        keys.put("p", new Integer(KeyEvent.VK_P));
+        keys.put("q", new Integer(KeyEvent.VK_Q));
+        keys.put("r", new Integer(KeyEvent.VK_R));
+        keys.put("s", new Integer(KeyEvent.VK_S));
+        keys.put("t", new Integer(KeyEvent.VK_T));
+        keys.put("u", new Integer(KeyEvent.VK_U));
+        keys.put("v", new Integer(KeyEvent.VK_V));
+        keys.put("w", new Integer(KeyEvent.VK_W));
+        keys.put("x", new Integer(KeyEvent.VK_X));
+        keys.put("y", new Integer(KeyEvent.VK_Y));
+        keys.put("z", new Integer(KeyEvent.VK_Z));
+        keys.put("0", new Integer(KeyEvent.VK_0));
+        keys.put("1", new Integer(KeyEvent.VK_1));
+        keys.put("2", new Integer(KeyEvent.VK_2));
+        keys.put("3", new Integer(KeyEvent.VK_3));
+        keys.put("4", new Integer(KeyEvent.VK_4));
+        keys.put("5", new Integer(KeyEvent.VK_5));
+        keys.put("6", new Integer(KeyEvent.VK_6));
+        keys.put("7", new Integer(KeyEvent.VK_7));
+        keys.put("8", new Integer(KeyEvent.VK_8));
+        keys.put("9", new Integer(KeyEvent.VK_9));
+        keys.put("+", new Integer(KeyEvent.VK_PLUS));
+        keys.put("-", new Integer(KeyEvent.VK_MINUS));       
+        keys.put("f1", new Integer(KeyEvent.VK_F1));       
+        keys.put("f2", new Integer(KeyEvent.VK_F2));       
+        keys.put("f3", new Integer(KeyEvent.VK_F3));       
+        keys.put("f4", new Integer(KeyEvent.VK_F4));       
+        keys.put("f5", new Integer(KeyEvent.VK_F5));       
+        keys.put("f6", new Integer(KeyEvent.VK_F6));       
+        keys.put("f7", new Integer(KeyEvent.VK_F7));       
+        keys.put("f8", new Integer(KeyEvent.VK_F8));       
+        keys.put("f9", new Integer(KeyEvent.VK_F9));       
+        keys.put("f10", new Integer(KeyEvent.VK_F10));       
+        keys.put("f11", new Integer(KeyEvent.VK_F11));       
+        keys.put("f12", new Integer(KeyEvent.VK_F12));       
+        keys.put("delete", new Integer(KeyEvent.VK_DELETE));       
+    }
+
+    /**
+     * Obtiene dado un caracter el entero correspondiente al codigo que tiene
+     * la tecla que produce dicho caracter
+     *
+     * @param a caracter
+     *
+     * @return Codigo de la tecla asociada
+     *
+     * @throws RuntimeException Si el caracter no tiene una tecla asociada
+     */
+    public static int getKey(char a) {
+        Integer ret = (Integer) keys.get(String.valueOf(a));
+        if (ret == null) {
+            throw new RuntimeException(Messages.getString(
+                    "KeyMapping.Caracter_no_valido") + a); //$NON-NLS-1$
+        }
+        return ret.intValue();
+    }
+    
+    public static KeyStroke getKeyStroke(String accelerator) {
+    	if( accelerator == null ) {
+    		return null;
+    	}
+    	accelerator = accelerator.trim();
+    	if( accelerator.length() < 1 ) {
+    		return null;
+    	}
+    	String[] parts = accelerator.toLowerCase().split("[+]");
+    	int modifiers = 0;
+    	int key = 0;
+    	for( int i=0; i<parts.length ; i++) {
+    		String part = parts[i];
+    		if( "ctrl".equals(part) ) {
+    			modifiers = modifiers | InputEvent.CTRL_MASK;
+    		} else if( "shift".equals(part) ) {
+    			modifiers = modifiers | InputEvent.SHIFT_MASK;
+    		} else if( "meta".equals(part) ) {
+    			modifiers = modifiers | InputEvent.META_MASK;
+    		} else if( "alt".equals(part) ) {
+    			modifiers = modifiers | InputEvent.ALT_MASK;
+    		} else if( "".equals(part) ) { // +
+    			key = KeyEvent.VK_PLUS;
+    		} else {
+    			Integer x = (Integer) keys.get(part);
+    			if( x != null ) {
+    				key = x.intValue();
+    			} else {
+    				try {
+    					throw new IllegalArgumentException();
+    				} catch (IllegalArgumentException ex) {
+    					logger.info("getKeyStroke('"+accelerator+"') malformed accelerator.",ex);
+    				}
+    				return null;
+    			}
+    		}
+    	}
+    	if( key == 0 ) {
+    		return null;
+    	}
+    	/*
+    	 * We are not adding default modifier, this means
+    	 * short cuts must come with modifiers explicitly
+    	 * except special keys like F3, F7, etc
+    	 */
+    	/*
+    	if( modifiers == 0 ) {
+    		modifiers = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+    	}
+    	*/
+    	return KeyStroke.getKeyStroke(key,modifiers);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/KeyMapping.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * Excepci�n lanzada cuando un Dialogo modal intenta
+ * mostrar una vista singleton que ya ha sido mostrada. Esto
+ * obligar�a a traerla al frente y debido a que el que
+ * intenta la acci�n es un di�logo modal, se aborta mediante
+ * esta excepci�n.
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class SingletonDialogAlreadyShownException extends RuntimeException {
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/WindowInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/WindowInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/WindowInfo.java	(revision 42196)
@@ -0,0 +1,1243 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.exolab.castor.xml.XMLException;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.gvsig.utils.XMLEntity;
+
+
+
+/**
+ * This class represents the state of the associated window.
+ * The <code>set</code> methods (<code>setX</code>, <code>setY</code>,
+ * <code>setHeight</code>, etc) are immediately reflected on the
+ * window.
+ *
+ * The <code>update</code> methods doesn't update the window, because
+ * they are used to update the WindowInfo object when the associated
+ * window was modified by user interaction.
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class WindowInfo implements Persistent{
+	
+	public static final String PERSISTENCE_DEFINITION_NAME = "WindowInfo";
+
+	/** Specifies that the window is resizable  */
+    public static final int RESIZABLE = 1;
+
+    /** Specifies that the window is maximizable */
+    public static final int MAXIMIZABLE = 2;
+
+    /** Specifies that the window is iconifiable */
+    public static final int ICONIFIABLE = 4;
+
+    /** Specifies that the window is modal */
+    public static final int MODALDIALOG = 8;
+    /** Specifies that the window is modeless (it's on the top but doesn't block any other window) */
+    public static final int MODELESSDIALOG = 16;
+    /** Specifies that the window may be docked inside another window */
+    public static final int PALETTE = 32;
+    /** Specifies that the window may be closed */
+    public static final int NOTCLOSABLE = 64;
+
+
+    /** Specifies that this window has an editor profile */
+    public static final Integer EDITOR_PROFILE = new Integer(1);
+    /** Specifies that this window has an editor profile */
+    public static final Integer TOOL_PROFILE = new Integer(2);
+    /** Specifies that this window has an editor profile */
+    public static final Integer PROJECT_PROFILE = new Integer(3);
+    /** Specifies that this window has an editor profile */
+    public static final Integer PROPERTIES_PROFILE = new Integer(4);
+    /** Specifies that this window has an editor profile */
+    public static final Integer DIALOG_PROFILE = new Integer(5);
+
+    private PropertyChangeSupport support = new PropertyChangeSupport(this);
+
+    /** DOCUMENT ME! */
+    private boolean resizable = false;
+
+    /** DOCUMENT ME! */
+    private boolean maximizable = false;
+
+    /** DOCUMENT ME! */
+    private boolean iconifiable = false;
+
+    /** DOCUMENT ME! */
+    private boolean modal = false;
+    private boolean modeless = false;
+    private boolean notclosable = false;
+    
+    /**
+     * Do we want to persist the geometry of this window in the project file?
+     */
+    private boolean persistWindow = true;
+
+    /**
+     * Se usa para poner una ventana de tipo paleta, por
+     * encima de las dem�s. Equivale a poner usar
+     * JDesktopPane.PALETTE_LAYER
+     */
+    private boolean palette = false;
+
+    private String additionalInfo = null;
+
+    /** These properties store the dimension and position of the frame */
+    private int width = -1;
+    private int height = -1;
+    private int x = -1;
+    private int y = -1;
+    /**
+     * These properties store the position and dimension of the frame when it is not maximized
+     * (so that it can be restored to its original size). They are equal to the not-normal properties
+     * when the frame is not maximized, and different when the frame is maximized.
+     */
+    private int normalX = 0;
+    private int normalY = 0;
+    private int normalHeight = -1;
+    private int normalWidth = -1;
+
+    /** The minimum allowed size for this window. */
+    private Dimension minSize = null;
+
+    /* Whether the window is maximized */
+    private boolean isMaximized = false;
+    private boolean visible = true;
+    /* Whether the window is closed */
+    private boolean isClosed = false;
+
+
+    /** DOCUMENT ME! */
+    private String title;
+
+    private int id;
+
+    /**
+     * ActionCommand del tool seleccionado. Lo usamos
+     * para activar el tool que estaba seleccionado en
+     * la vista, cuando volvemos a ella.
+     */
+    @SuppressWarnings("rawtypes")
+	private Map selectedTools = null;
+    // this should be the same value defined at plugin-config.xsd
+    private String defaultGroup = "unico";
+
+    /**
+     * Adds a PropertyChangeListener to the listener list. The listener will be
+     * notified about changes in this object.
+     *
+     * @param listener
+     */
+    public void addPropertyChangeListener(PropertyChangeListener listener) {
+        support.addPropertyChangeListener(listener);
+    }
+
+    /**
+     * Remove a PropertyChangeListener from the listener list. The listener will
+     * not be notified anymore about changes in this object.
+     *
+     * @param listener
+     */
+    public void removePropertyChangeListener(PropertyChangeListener listener) {
+        support.removePropertyChangeListener(listener);
+    }
+
+    /**
+     * Creates a new WindowInfo object with the provided properties.
+     * Valid properties include:
+     * <ul>
+     * <li>WindowInfo.MODALDIALOG</li>
+     * <li>WindowInfo.MODELESSDIALOG</li>
+     * <li>WindowInfo.PALETTE</li>
+     * <li>WindowInfo.ICONIFIABLE</li>
+     * <li>WindowInfo.RESIZABLE</li>
+     * <li>WindowInfo.MAXIMIZABLE</li>
+     *
+     * <p>Properties can be set together by using the binary OR operator
+     * "<b>|</b>". For example:</p>
+     *
+     * <p><code>WindowInfo wi = new WindowInfo(WindowInfo.MODELESSDIALOG
+     *   |WindowInfo.ICONIFIABLE|WindowInfo.RESIZABLE).</code></p>
+     *
+     * <p>The WindowInfo.MODELESSDIALOG and WindowInfo.MODALDIALOG properties
+     * cannot be set at the same time</p>
+     *
+     * @param code Bit-or of the window properties.
+     *
+     * @throws IllegalStateException If incompatible properties are set together,
+     * for example, if MODALDIALOG and MODELESSDIALGO are set together.
+     */
+    public WindowInfo(int code) {
+        resizable = (code % 2) > 0;
+        code = code / 2;
+        maximizable = (code % 2) > 0;
+        code = code / 2;
+        iconifiable = (code % 2) > 0;
+        code = code / 2;
+        modal = (code % 2) > 0;
+        code = code / 2;
+        modeless = (code % 2) > 0;
+        code = code / 2;
+        palette = (code % 2) > 0;
+        code = code / 2;
+        notclosable = (code % 2) > 0;
+
+        if (modal && modeless) {
+            throw new IllegalStateException("modal && modeless");
+        }
+    }
+
+    /**
+     * Creates a new WindowInfo object with the default properties:
+     * <ul>
+     * <li>not resizable</li>
+     * <li>not maximizable</li>
+     * <li>not iconifiable</li>
+     * <li>not modal</li>
+     * <li>not modeless</li>
+     * <li>not palette</li>
+     * </uil>
+     *
+     */
+    public WindowInfo(){
+
+    }
+
+    /**
+     * Returns the current x coordinate of the window's origin
+     * (left-upper corner of the window).
+     *
+     * @return Returns the value (in pixels) of the x coordinate
+     * of the window's origin.
+     */
+    public int getX() {
+        return x;
+    }
+
+    /**
+     * Sets the x coordinate of the window's origin
+     * (left-upper corner of the window).
+     *
+     * @param x	The value (in pixels) of the x coordinate to set.
+     */
+    public void setX(int x) {
+    	support.firePropertyChange("x", this.x, x);
+    	this.x = x;
+    	if (!isMaximized)
+    		this.normalX = x;
+    }
+
+    /**
+     * Updates the value of the x coordinate for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * setX for that).
+     *
+     * @param x The value (in pixels) of the x coordinate
+     */
+    public void updateX(int x) {
+    	this.x = x;
+    	if (!isMaximized)
+    		this.normalX = x;
+    }
+
+    /**
+     * Gets the value of the y coordinate for the origin
+     * (left-upper corner of the window) of the associated
+     * window.
+     *
+     * @return Returns the y coordinate (in pixels).
+     */
+    public int getY() {
+        return y;
+    }
+
+    /**
+     * Sets the value of the y coordinate for the origin
+     * (left-upper corner of the window) of the associated
+     * window.
+     *
+     * @param y The value (in pixels) of the y coordinate
+     */
+    public void setY(int y) {
+    	support.firePropertyChange("y", this.y, y);
+        this.y = y;
+        if (!isMaximized)
+        	this.normalY = y;
+    }
+
+    /**
+     * Updates the value of the y coordinate for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * setY for that).
+     *
+     * @param y The value (in pixels) of the y coordinate
+     */
+    public void updateY(int y) {
+    	this.y = y;
+    	if (!isMaximized)
+    		this.normalY = y;
+    }
+
+    /**
+     * Determines whether the associated window is iconifiable or not
+     *
+     * @return
+     */
+    public boolean isIconifiable() {
+        return iconifiable;
+    }
+
+    /**
+     * Determines whether the associated window is maximizable or not
+     *
+     * @return
+     */
+    public boolean isMaximizable() {
+        return maximizable;
+    }
+
+    /**
+     * Determines whether the associated window is resizable or not
+     *
+     * @return
+     */
+    public boolean isResizable() {
+        return resizable;
+    }
+
+    /**
+     * Determines whether the associated window is modal or not
+     *
+     * @return
+     */
+    public boolean isModal() {
+        return modal;
+    }
+
+    /**
+     * Gets the window height.
+     *
+     * @return The window height (in pixels).
+     */
+    public int getHeight() {
+        return height;
+    }
+
+    /**
+     * Gets the window width.
+     *
+     * @return The window width (in pixels).
+     */
+    public int getWidth() {
+        return width;
+    }
+
+    /**
+     * Sets the window height.
+     *
+     * @param The window height (in pixels)
+     */
+    public void setHeight(int height) {
+    	if (height!=-1)
+    		support.firePropertyChange("height", this.height, height);
+    	this.height = height;
+        if (!isMaximized)
+        	this.normalHeight = height;
+    }
+
+    /**
+     * Updates the height property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setHeight</code> for that).
+     *
+     * @param height The height value for this WindowInfo object
+     */
+    public void updateHeight(int height) {
+    	this.height = height;
+        if (!isMaximized)
+        	this.normalHeight = height;
+    }
+
+    /**
+     * Sets the width property for the associated Window.
+     *
+     * @param w The new width.
+     */
+    public void setWidth(int w) {
+    	if (w!=-1)
+    		support.firePropertyChange("width", this.width, w);
+        width = w;
+        if (!isMaximized)
+        	this.normalWidth = w;
+    }
+
+    /**
+     * Updates the width property for for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setWidth</code> for that).
+     *
+     * @param height The height value for this WindowInfo object
+     */
+    public void updateWidth(int width) {
+    	this.width = width;
+        if (!isMaximized)
+        	this.normalWidth = width;
+    }
+
+    /**
+     * Gets the title property
+     *
+     * @return
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * Sets the title property.
+     *
+     * @param title The new title.
+     */
+    public void setTitle(String title) {
+    	support.firePropertyChange("title", this.title, title);
+        this.title = title;
+    }
+
+    /**
+     * Updates the title property for for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setTitle</code> for that).
+     *
+     * @param title The title value for this WindowInfo object
+     */
+    public void updateTitle(String title) {
+    	this.title = title;
+    }
+
+    /**
+     * Determines whether the associated window is modeless
+     * (it is on the top but does not block any other window)
+     *
+     * @return
+     */
+    public boolean isModeless() {
+        return modeless;
+    }
+    
+    /**
+     * Determines whether the associated window is closable or not
+     *
+     * @return
+     */
+    public boolean isNotClosable() {
+        return notclosable;
+    }
+    
+    /**
+     * Sets notclosable property 
+     *
+     * @return
+     */
+    public void setNotClosable(boolean b) {
+        notclosable = b;
+    }
+
+     /**
+      * Determines whether the associated window is visible
+      *
+      * @return true if the associated window is visible, false
+      * if it is hidden
+      */
+    public boolean isVisible() {
+        return visible;
+    }
+
+    /**
+     * Determines whether the associated dockable window is
+     * currently in palette status or docked.
+     *
+     * @return true if the window is currently in palette status,
+     * false if it is docked in another window
+     */
+    public boolean isPalette()
+    {
+        return palette;
+    }
+
+    /**
+     * Sets the window's ID.
+     *
+     * @param id An integer to identify the window. Different
+     * windows must have different IDs.
+     */
+    public void setId(int id){
+    	this.id = id;
+    }
+
+    /**
+     * Gets the window ID.
+     *
+     * @return id An integer to identify the window. Different
+     * windows must have different IDs.
+     */
+    public int getId(){
+    	return id;
+    }
+
+    /**
+     * Updates all the properties in this object so that
+     * they match the properties of the provided
+     * <code>wi</code> object. The changes are not reflected on the
+     * window, just the WindowInfo object is updated.
+     *
+     * @param vi A WindowInfo object containing the new
+     * properties of the window.
+     */
+    public void setWindowInfo(WindowInfo vi){
+    	this.resizable = vi.resizable;
+    	this.maximizable = vi.maximizable;
+    	this.isMaximized = vi.isMaximized;
+    	this.iconifiable = vi.iconifiable;
+    	this.additionalInfo = vi.additionalInfo;
+    	this.modal = vi.modal;
+    	this.modeless = vi.modeless;
+    	this.notclosable = vi.notclosable;
+    	if (vi.width!=-1)
+    		this.width = vi.width;
+    	if (vi.height!=-1)
+    		this.height = vi.height;
+    	this.x = vi.x;
+    	this.y = vi.y;
+    	this.visible = vi.visible;
+    	this.title = vi.title;
+    	this.id = vi.id;
+    	if (vi.normalHeight!=-1)
+    		this.normalHeight = vi.normalHeight;
+    	if (vi.normalWidth!=-1)
+    		this.normalWidth = vi.normalWidth;
+    	this.normalX = vi.normalX;
+    	this.normalY = vi.normalY;
+    	this.isClosed = vi.isClosed;
+    	this.persistWindow = vi.persistWindow;
+    }
+
+    /**
+     * Sets whether the window is in palette mode or is in docked mode.
+     * This method <b>does not</b> update the window status, it just
+     * updates the WindowInfo object. Use the IWindowTransform interface
+     * to actually change the window status.
+     *
+     * @param b
+     */
+    public void toPalette(boolean b){
+    	this.palette=b;
+    }
+
+    /**
+     * Gets the list of selected tools for this window.
+     *
+     * @return A HashMap containing pairs (group, actionCommand), which
+     * are the selected tools for this window.
+     */
+    @SuppressWarnings("rawtypes")
+	public Map getSelectedTools() {
+        return selectedTools;
+    }
+
+    /**
+     * Use {@link setSelectedTools(HashMap selectedTool)}
+     *
+     * @param selectedTool
+     * @deprecated
+     */
+    @SuppressWarnings("unchecked")
+	public void setSelectedTool(String selectedTool) {
+        if (selectedTool != null)
+            selectedTools.put(defaultGroup ,selectedTool);
+    }
+
+    /**
+     * Sets the list of selected tools for this window.
+
+     * @param selectedTools  A HashMap containing pairs
+     * (group, actionCommand), which will be set as the selected tools
+     * for this window.
+     */
+    @SuppressWarnings("rawtypes")
+	public void setSelectedTools(Map selectedTools) {
+        if (selectedTools != null)
+            this.selectedTools = selectedTools;
+    }
+
+    /** Finds out whether a view is open (showing) or closed */
+    public boolean isClosed() {
+    	return isClosed;
+    }
+    
+    /** Specifies whether a view is open (showing) or closed */
+    public void setClosed(boolean closed) {
+    	support.firePropertyChange("closed", this.isClosed, closed);
+    	this.isClosed = closed;
+    }
+
+    /**
+     * Updates the closed property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setClosed</code> for that).
+     *
+     * @param closed The new closed property for this WindowInfo object
+     */
+    public void updateClosed(boolean closed) {
+    	this.isClosed = closed;
+    }
+
+    /**
+     * Sets the normalX property for this WindowInfo object. This sets the X
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalX The new normalX property for this WindowInfo object
+     */
+    public void setNormalX(int normalX) {
+    	if (!isMaximized()) {
+    		setX(normalX);
+    	}
+    	else {
+    		support.firePropertyChange("normalX", this.normalX, normalX);
+    		this.normalX = normalX;
+    	}
+    }
+
+    /**
+     * Updates the normalX property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalX</code> for that).
+     *
+     * @param normalX The new normalX property for this WindowInfo object
+     */
+    public void updateNormalX(int normalX) {
+    	this.normalX = normalX;
+    	if (!isMaximized())
+    		x = normalX;
+    }
+
+    /**
+     * Sets the normalY property for this WindowInfo object. This sets the Y
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalY The new normalY property for this WindowInfo object
+     */
+    public void setNormalY(int normalY) {
+    	if (!isMaximized()) {
+    		setY(normalY);
+    	}
+    	else {
+    		support.firePropertyChange("normalY", this.normalY, normalY);
+    		this.normalY = normalY;
+    	}
+    }
+
+    /**
+     * Updates the normalY property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalY</code> for that).
+     *
+     * @param normalY The new normalY property for this WindowInfo object
+     */
+    public void updateNormalY(int normalY) {
+    	this.normalY = normalY;
+    	if (!isMaximized())
+    		y = normalY;
+    }
+
+    /**
+     * Sets the normalHeight property for this WindowInfo object. This sets the height
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalY The new normalHeight property for this WindowInfo object
+     */
+    public void setNormalHeight(int normalHeight) {
+    	if (!isMaximized) {
+    		setHeight(normalHeight);
+    	}
+    	else {
+    		support.firePropertyChange("normalHeight", this.normalHeight, normalHeight);
+    		this.normalHeight = normalHeight;
+    	}
+    }
+
+    /**
+     * Updates the normalHeight property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalHeight</code> for that).
+     *
+     * @param normalHeight The new normalHeight property for this WindowInfo object
+     */
+    public void updateNormalHeight(int normalHeight) {
+    	this.normalHeight = normalHeight;
+    	if (!isMaximized) {
+    		this.height = normalHeight;
+    	}
+    }
+
+    /**
+     * Sets the normalWidth property for this WindowInfo object. This sets the width
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalY The new normalWidth property for this WindowInfo object
+     */
+    public void setNormalWidth(int normalWidth) {
+    	if (!isMaximized()) {
+    		setWidth(normalWidth);
+    	}
+    	else {
+    		support.firePropertyChange("normalWidth", this.normalWidth, normalWidth);
+    		this.normalWidth = normalWidth;
+    	}
+    }
+
+    /**
+     * Sets the minimum allowed size for the associated window. If null is provided,
+     * the minimum size is disabled (and thus
+     * the window can be resized to any size).
+     *
+     * @param minSize The minimum allowed size for the associated window.
+     */
+    public void setMinimumSize(Dimension minSize) {
+    	support.firePropertyChange("minimumSize", this.minSize, minSize);
+    	this.minSize = minSize;
+    }
+
+    /**
+     * Updates the minimum allowed size for the associated window. It doesn't
+     * get reflected on the window (use <code>setMinimumSize</code> for that).
+     *
+     * @param minSize The minimum allowed size for the associated window.
+     */
+    public void updateMinimumSize(Dimension minSize) {
+    	this.minSize = minSize;
+    }
+
+    /**
+     * Gets the minimum allowed size for the associated window.
+     *
+     * @return minSize The minimum allowed size for the associated window.
+     */
+    public Dimension getMinimumSize() {
+    	return minSize;
+    }
+
+    /**
+     * Updates the normalWidth property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalWidth</code> for that).
+     *
+     * @param normalWidth The new normalHeight property for this WindowInfo object
+     */
+    public void updateNormalWidth(int normalWidth) {
+    	this.normalWidth = normalWidth;
+    	if (!isMaximized())
+    		this.width = normalWidth;
+    }
+
+    /**
+     * Maximize the associated window
+     *
+     * @param maximized
+     */
+    public void setMaximized(boolean maximized) {
+    	support.firePropertyChange("maximized", this.isMaximized, maximized);
+    	this.isMaximized = maximized;
+    }
+
+    /**
+     * Updates the maximized property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setMaximized</code> for that).
+     *
+     * @param maximized The new maximized property for this WindowInfo object
+     */
+    public void updateMaximized(boolean maximized) {
+    	this.isMaximized = maximized;
+    }
+
+    public void setMaximizable(boolean maximizable) {
+    	this.maximizable = maximizable;
+    }
+
+    /**
+     * Sets the bounds of the associated window.
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    private void setBounds(int x, int y, int width, int height) {
+    	setX(x);
+    	setY(y);
+    	setWidth(width);
+    	setHeight(height);
+    }
+
+    /**
+     * Updates the bounds for this WindowInfo object. It doesn't get reflected
+     * on the window (use <code>setBounds</code> for that).
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    public void updateBounds(int x, int y, int width, int height) {
+    	this.x = x;
+    	this.y = y;
+    	this.width = width;
+    	this.height = height;
+    	if (!isMaximized()) {
+    		this.normalX = x;
+    		this.normalY = y;
+    		this.normalWidth = width;
+    		this.normalHeight = height;
+    	}
+    }
+
+    /**
+     * Sets the normal bounds of the associated window. This sets the bounds
+     * that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    public void setNormalBounds(int x, int y, int width, int height) {
+    	setNormalX(x);
+    	setNormalY(y);
+    	setNormalWidth(width);
+    	setNormalHeight(height);
+    }
+
+    /**
+     * Updates the normal bounds for this WindowInfo object. It doesn't get
+     * reflected on the window (use <code>setNormalBounds</code> for that).
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    public void updateNormalBounds(int x, int y, int width, int height) {
+		this.normalX = x;
+		this.normalY = y;
+		this.normalWidth = width;
+		this.normalHeight = height;
+    	if (!isMaximized()) {
+        	this.x = x;
+        	this.y = y;
+        	this.width = width;
+        	this.height = height;
+    	}
+    }
+
+    /**
+     * Gets the normal bounds of the associated window. This gets the bounds
+     * that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @return The normal bounds of the associated window.
+     */
+    public Rectangle getNormalBounds() {
+    	return new Rectangle(getNormalX(), getNormalY(), getNormalWidth(), getNormalHeight());
+    }
+
+    /**
+     * Sets the normal bounds of the associated window. This sets the bounds
+     * that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalBounds
+     */
+    public void setNormalBounds(Rectangle normalBounds) {
+    	setNormalBounds(normalBounds.x, normalBounds.y, normalBounds.width, normalBounds.height);
+    }
+
+    /**
+     * Updates the normal bounds for this WindowInfo object. It doesn't get
+     * reflected on the window (use <code>setNormalBounds</code> for that).
+     *
+     * @param normalBounds
+     */
+    public void updateNormalBounds(Rectangle normalBounds) {
+    	updateNormalBounds(normalBounds.x, normalBounds.y, normalBounds.width, normalBounds.height);
+    }
+
+    /**
+     * Sets the bounds of the associated window.
+     *
+     * @param bounds
+     */
+    public void setBounds(Rectangle bounds) {
+    	setBounds(bounds.x, bounds.y, bounds.width, bounds.height);
+    }
+
+    /**
+     * Updates the bounds for this WindowInfo object. It doesn't get reflected
+     * on the window (use <code>setBounds</code> for that).
+     *
+     * @param bounds
+     */
+    public void updateBounds(Rectangle bounds) {
+    	updateBounds(bounds.x, bounds.y, bounds.width, bounds.height);
+    }
+
+    /**
+     * Gets the bounds of the associated window.
+     *
+     * @return The bounds of the associated window.
+     */
+    public Rectangle getBounds() {
+    	return new Rectangle(x, y, width, height);
+    }
+
+    public int getNormalX() {
+    	if (normalX!=0)
+    		return this.normalX;
+    	else
+    		return x;
+    }
+
+    /**
+     * Gets the x coordinate of the window's origin when the window is not
+     * maximized. When the window is maximized, gets the y coordinate that
+     * it will have when it gets restored
+     *
+     * @return the normal y coordinate of the window's origin
+     */
+    public int getNormalY() {
+    	if (normalY!=0)
+    		return this.normalY;
+    	else
+    		return y;
+    }
+
+    /**
+     * Gets the height of the window's origin when the window is not
+     * maximized. When the window is maximized, gets the height that
+     * it will have when it gets restored
+     *
+     * @return the normal height of the window
+     */
+    public int getNormalHeight() {
+    	if (normalHeight!=0)
+    		return this.normalHeight;
+    	else
+    		return height;
+    }
+
+    /**
+     * Gets the width of the window's origin when the window is not
+     * maximized. When the window is maximized, gets the width that
+     * it will have when it gets restored
+     *
+     * @return the normal width of the window
+     */
+    public int getNormalWidth() {
+    	if (normalWidth!=0)
+    		return this.normalWidth;
+    	else
+    		return width;
+    }
+
+    /**
+     * Determines whether the window is maximized or not
+     *
+     * @return true if the window is maximized, false otherwise
+     */
+    public boolean isMaximized() {
+    	return this.isMaximized;
+    }
+
+    /**
+     * Checks if the geometry of this window should be persisted in the
+     * project file. This is set by the persistWindow(boolean) method,
+     * and the default value is true.
+     *
+     * @return True if the geometry of this window should be persisted
+     * in the project files, false otherwise.
+     */
+    public boolean checkPersistence() {
+    	return this.persistWindow;
+    }
+
+    /**
+     * Set whether the geometry of this window should be persisted in the
+     * project files.
+     *
+     * @param persist
+     */
+    public void setPersistence(boolean persist) {
+    	this.persistWindow = persist;
+    }
+
+    /**
+	 * Gets the window properties in an XMLEntity object, suitable
+	 * for persistence.
+	 *
+	 * @return An XMLEntity object containing the window properties,
+	 * or null if the window was set as not persistent
+     * @throws SaveException
+	 * @throws XMLException
+	 */
+	public XMLEntity getXMLEntity() {
+		if (checkPersistence()==false) {
+			return null;
+		}
+		XMLEntity xml = new XMLEntity();
+		xml.setName("ViewInfoProperties");
+		xml.putProperty("X", this.getX(), false);
+		xml.putProperty("Y", this.getY(), false);
+		xml.putProperty("Width", this.getWidth(), false);
+		xml.putProperty("Height", this.getHeight(), false);
+		xml.putProperty("isVisible", this.isVisible(), false);
+		xml.putProperty("isResizable", this.isResizable(), false);
+		xml.putProperty("isMaximizable", this.isMaximizable(), false);
+		xml.putProperty("isModal", this.isModal(), false);
+		xml.putProperty("isModeless", this.isModeless(), false);
+		xml.putProperty("isClosed", this.isClosed(), false);
+		xml.putProperty("AdditionalInfo", this.getAdditionalInfo(), false);
+		xml.putProperty("isNotClosable", this.isNotClosable(), false);
+		if (this.isMaximized()==true) {
+			xml.putProperty("isMaximized", this.isMaximized(), false);
+			xml.putProperty("normalX", this.getNormalX(), false);
+			xml.putProperty("normalY", this.getNormalY(), false);
+			xml.putProperty("normalWidth", this.getNormalWidth(), false);
+			xml.putProperty("normalHeight", this.getNormalHeight(), false);
+		}
+		return xml;
+	}
+
+	/**
+	 * Creates a WindowInfo object from an XMLEntity containing the
+	 * window properties.
+	 *
+	 * @param xml An XMLEntity object containing the window properties
+	 *
+	 * @return A new WindowInfo object, containing the properties
+	 * specified in the XMLEntity parameters
+	 */
+	public static WindowInfo createFromXMLEntity(XMLEntity xml)
+	{
+		WindowInfo result = new WindowInfo();
+		try {
+			result.setX(xml.getIntProperty("X"));
+			result.setY(xml.getIntProperty("Y"));
+			result.setHeight(xml.getIntProperty("Height"));
+			result.setWidth(xml.getIntProperty("Width"));
+			result.setClosed(xml.getBooleanProperty("isClosed"));
+			result.setAdditionalInfo(xml.getStringProperty("AdditionalInfo"));
+			result.setNotClosable(xml.getBooleanProperty("isNotClosable"));
+			if (xml.contains("isMaximized")) {
+				boolean maximized = xml.getBooleanProperty("isMaximized");
+				result.setMaximized(maximized);
+				if (maximized==true) {
+					result.setNormalBounds(xml.getIntProperty("normalX"), xml.getIntProperty("normalY"), xml.getIntProperty("normalWidth"), xml.getIntProperty("normalHeight"));
+				}
+				else {
+					result.setNormalBounds(result.getBounds());
+				}
+			}
+		}
+		catch (org.gvsig.utils.NotExistInXMLEntity ex) {
+			PluginServices.getLogger().warn(PluginServices.getText(null, "Window_properties_not_stored_correctly_Window_state_will_not_be_restored"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * Updates this WindowInfo object according to the properties
+	 * provided by the XMLEntity parameter.
+	 *
+	 * @param xml An XMLEntity object containing the window properties
+	 */
+	public void getPropertiesFromXMLEntity(XMLEntity xml)
+	{
+		this.x = xml.getIntProperty("X");
+		this.y = xml.getIntProperty("Y");
+		this.height = xml.getIntProperty("Height");
+		this.width = xml.getIntProperty("Width");
+		this.isClosed = xml.getBooleanProperty("isClosed");
+		this.additionalInfo = xml.getStringProperty("AdditionalInfo");
+		this.notclosable = xml.getBooleanProperty("isNotClosable");
+		if (xml.contains("isMaximized")) {
+			boolean maximized = xml.getBooleanProperty("isMaximized");
+			this.isMaximized = maximized;
+			if (maximized==true) {
+				this.setNormalBounds(xml.getIntProperty("normalX"), xml.getIntProperty("normalY"), xml.getIntProperty("normalWidth"), xml.getIntProperty("normalHeight"));
+			}
+		}
+	}
+
+	/**
+	 * Obtiene informaci�n adicional de la ventana. Esta etiqueta podr� llevar cualquier
+	 * tipo de informaci�n que queramos almacenar.
+	 * @return Informaci�n adicional
+	 */
+	public String getAdditionalInfo() {
+		return additionalInfo;
+	}
+
+	/**
+	 * Asigna informaci�n adicional de la ventana. Esta etiqueta podr� llevar cualquier
+	 * tipo de informaci�n que queramos almacenar.
+	 * @return Informaci�n adicional
+	 */
+	public void setAdditionalInfo(String additionalInfo) {
+		this.additionalInfo = additionalInfo;
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+	    state.set("resizable", this.resizable);
+	    state.set("maximizable", this.maximizable);
+	    state.set("iconifiable", this.iconifiable);
+	    state.set("modal", this.modal);
+	    state.set("modeless", this.modeless);
+	    state.set("notclosable", this.notclosable);
+	    state.set("persistWindow", this.persistWindow); //OJO �Obsoleto?
+	    state.set("palette", this.palette);
+	    state.set("additionalInfo", this.additionalInfo);
+	    state.set("width", this.width);
+	    state.set("height", this.height);
+	    state.set("x", this.x);
+	    state.set("y", this.y);
+	    state.set("normalX", this.normalX);
+	    state.set("normalY", this.normalY);
+	    state.set("normalHeight", this.normalHeight);
+	    state.set("normalWidth", this.normalWidth);
+	    state.set("minSize", this.minSize);
+	    state.set("isMaximized", this.isMaximized);
+	    state.set("visible", this.visible);
+	    state.set("isClosed", this.isClosed);
+	    state.set("title", this.title);
+	    state.set("id", this.id); //OJO
+	    state.set("selectedTools", this.selectedTools); //OJO
+	    state.set("defaultGroup", this.defaultGroup); //OJO
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+	    this.resizable = state.getBoolean("resizable");
+	    this.maximizable = state.getBoolean("maximizable");
+	    this.iconifiable = state.getBoolean("iconifiable");
+	    this.modal = state.getBoolean("modal");
+	    this.modeless = state.getBoolean("modeless");
+	    this.notclosable = state.getBoolean("notclosable");
+	    this.persistWindow = state.getBoolean("persistWindow"); //OJO �Obsoleto?
+	    this.palette = state.getBoolean("palette");
+	    this.additionalInfo = state.getString("additionalInfo");
+	    this.width = state.getInt("width");
+	    this.height = state.getInt("height");
+	    this.x = state.getInt("x");
+	    this.y = state.getInt("y");
+	    this.normalX = state.getInt("normalX");
+	    this.normalY = state.getInt("normalY");
+	    this.normalHeight = state.getInt("normalHeight");
+	    this.normalWidth = state.getInt("normalWidth");
+	    this.minSize = (Dimension)state.get("minSize");
+	    this.isMaximized = state.getBoolean("isMaximized");
+	    this.visible = state.getBoolean("visible");
+	    this.isClosed = state.getBoolean("isClosed");
+	    this.title = state.getString("title");
+	    this.id = state.getInt("id");
+	    this.setSelectedTools(state.getMap("selectedTools"));
+	    this.defaultGroup = state.getString("defaultGroup"); //OJO
+	}
+
+	
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+    		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+    		DynStruct definition = manager.getDefinition(PERSISTENCE_DEFINITION_NAME);
+    		if ( definition == null ){
+    		    definition = manager.addDefinition(
+    		        WindowInfo.class,
+    		        PERSISTENCE_DEFINITION_NAME,
+    		        "WindowInfo persistence definition",
+    		        null, 
+    		        null
+    		    );
+    		    definition.addDynFieldBoolean("resizable").setMandatory(true);
+    		    definition.addDynFieldBoolean("maximizable").setMandatory(true);
+    		    definition.addDynFieldBoolean("iconifiable").setMandatory(true);
+    		    definition.addDynFieldBoolean("modal").setMandatory(true);
+    		    definition.addDynFieldBoolean("modeless").setMandatory(true);
+    		    definition.addDynFieldBoolean("notclosable").setMandatory(true);
+    		    definition.addDynFieldBoolean("persistWindow").setMandatory(true);
+    		    definition.addDynFieldBoolean("palette").setMandatory(true);
+    		    definition.addDynFieldString("additionalInfo").setMandatory(false);
+    		    definition.addDynFieldInt("width").setMandatory(true);
+    		    definition.addDynFieldInt("height").setMandatory(true);
+    		    definition.addDynFieldInt("x").setMandatory(true);
+    		    definition.addDynFieldInt("y").setMandatory(true);
+    		    definition.addDynFieldInt("normalX").setMandatory(true);
+    		    definition.addDynFieldInt("normalY").setMandatory(true);
+    		    definition.addDynFieldInt("normalHeight").setMandatory(true);
+    		    definition.addDynFieldInt("normalWidth").setMandatory(true);
+    		    definition.addDynFieldObject("minSize").setMandatory(false).setClassOfValue(Dimension.class);
+    		    definition.addDynFieldBoolean("isMaximized").setMandatory(true);
+    		    definition.addDynFieldBoolean("visible").setMandatory(true);
+    		    definition.addDynFieldBoolean("isClosed").setMandatory(true);
+    		    definition.addDynFieldString("title").setMandatory(true);
+    		    definition.addDynFieldInt("id").setMandatory(true);
+    		    definition.addDynFieldMap("selectedTools").setMandatory(false)
+                            .setClassOfItems(String.class);
+    		    definition.addDynFieldString("defaultGroup").setMandatory(true);
+    		}
+    	    return Boolean.TRUE;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/WindowInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManager.java	(revision 42196)
@@ -0,0 +1,319 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+import java.awt.GridBagConstraints;
+import java.beans.PropertyVetoException;
+import java.util.Locale;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+
+
+
+/**
+ * <p>
+ * This interface acts as window manager. It is the place to create
+ * new windows, close existing ones or modify their properties
+ * (size, position, etc).
+ * </p>
+ * <p>
+ * Any class extending from JPanel and implementing the {@link IWindow}
+ * interface may become an Andami window. Andami will create a real
+ * window (normally a JInternalFrame) and put the JPanel inside the
+ * real window. In order to differentiate the contents (panels
+ * extending JPanel and implementing IWindow) from the real window
+ * (normally JInternalFrames or JDialogs), we will use
+ * <i>window</i> to refer to the contents and <i>frame</i>
+ * to refer to the real window.
+ * </p>
+ * <p>
+ * This class is implemented by the Andami Skin (currently libCorePlugin),
+ * which will decide the final implementation of frames. A different frame
+ * implementation could be used by switching the Skin.
+ * </p>
+ * 
+ * @see IWindow
+ * @see WindowInfo
+ * @see SingletonWindow
+ *
+ */
+public interface MDIManager {
+	
+    /**
+     * Initializes the MDIFrame. It must be called before starting
+     * to use it. It receives the application's main frame
+     * (MDIFrame) as parameter.  
+     *
+     * @param f Application's main frame.
+     */
+    public void init(MDIFrame f);
+
+    /**
+     * <p>
+     * Creates a new frame with the provided contents, and shows this
+     * new window. The new frame's properties are set according to
+     * the WindowInfo object from IWindow's <code>getWindowInfo()</code>
+     * method.
+     * The new frame is disposed when closed. 
+     * </p>
+     * <p>
+     * If the provided IWindow also implements SingletonWindow, and
+     * another SingletonWindow already exists and uses the same
+     * model, this later window will be sent to the foreground
+     * and no new window will be created.
+     * </p>
+     *
+     * @param p Panel with the contents of the new window.
+     *
+     * @return Returns the added IWindow, or in case it is a
+     * SingletonWindow and there is another SingletonWindow with
+     * the same model that it is already shown, returns this 
+     * later SingletonWindow.
+     */
+    public IWindow addWindow(IWindow p) throws SingletonDialogAlreadyShownException;
+
+    
+    /*
+     * Constants used by the method showWindow 
+     */
+    public final MODE WINDOW = WindowManager.MODE.WINDOW;
+    public final MODE TOOL = WindowManager.MODE.TOOL;
+    public final MODE DIALOG = WindowManager.MODE.DIALOG;
+    
+    /**
+     * Useful method to simplify the presentation of a window. 
+     * For more precise control over the behavior of the window 
+     * use addWindow
+     * 
+     * This methos 
+     * @param panel to show as a window
+     * @param title title of the window
+     * @param mode type of the window to create
+     */
+    public void showWindow(JPanel panel, String title, MODE mode);
+
+    /**
+     * Return the window associated to the SingletonWindow class and the model
+     * specified. If not exists any singleton window associated to this
+     * null is returned.
+     * 
+     * @param windowClass, the class that implement SingletonWindow
+     * @param model, the model associated to the SingletonWindow
+     * @return the requested window or null.
+     */
+    public SingletonWindow getSingletonWindow(Class windowClass, Object model) ;
+    
+    /**
+     * <p>
+     * Creates a new frame with the provided contents, and shows this
+     * new window. The new frame will be centered, regardless the
+     * position specified in the WindowInfo object from IWindow's
+     * <code>getWindowInfo()</code> method.
+     * The new frame is disposed when closed. 
+     * </p>
+     * <p>
+     * If the provided IWindow also implements SingletonWindow, and
+     * another SingletonWindow already exists and uses the same
+     * model, this later window will be sent to the foreground
+     * and no new window will be created.
+     * </p>
+     *
+     * @param p Panel with the contents of the new window.
+     *
+     * @return Returns the added IWindow, or in case it is a
+     * SingletonWindow and there is another SingletonWindow with
+     * the same model that it is already shown, returns this 
+     * later SingletonWindow.
+     * 
+     * @author Pablo Piqueras Bartolom�
+     */
+    public IWindow addCentredWindow(IWindow p) throws SingletonDialogAlreadyShownException;
+
+    public static final int ALIGN_FIRST_LINE_START = GridBagConstraints.FIRST_LINE_START;
+    public static final int ALIGN_PAGE_START = GridBagConstraints.PAGE_START;
+    public static final int ALIGN_FIRST_LINE_END = GridBagConstraints.FIRST_LINE_END;
+    public static final int ALIGN_FIRST_LINE_END_CASCADE = GridBagConstraints.FIRST_LINE_END + GridBagConstraints.BELOW_BASELINE;
+    public static final int ALIGN_LINE_START = GridBagConstraints.LINE_START;
+    public static final int ALIGN_LINE_END = GridBagConstraints.LINE_END;
+    public static final int ALIGN_LAST_LINE_START = GridBagConstraints.LAST_LINE_START;
+    public static final int ALIGN_PAGE_END = GridBagConstraints.PAGE_END;
+    public static final int ALIGN_LAST_LINE_END = GridBagConstraints.LAST_LINE_END;
+    public static final int ALIGN_CENTER = GridBagConstraints.CENTER;
+    
+    public IWindow addWindow(IWindow p, int align) throws SingletonDialogAlreadyShownException;
+
+    /**
+     * <p>
+     * Returns the currently active window, excluding the modal windows and the
+     * PALETTE windows. If the currently active window is modal or PALETTE type,
+     * the previous non-modal and non-PALETTE active window is returned.
+     * </p>
+     * <p>
+     * Modal windows and PALETTE windows are considered to be auxiliary windows,
+     * that is the reason why they are not returned.
+     * </p> 
+     *
+     * @return A reference to the active window, or null if there is no
+     * active window
+     */
+    public IWindow getActiveWindow();
+
+    /**
+     * <p>
+     * Returns the currently focused window, excluding the modal windows.
+     * If the currently focused window is modal,
+     * the previous non-modal focused window is returned.
+     * </p>
+     *
+     * @return A reference to the focused window, or null if there is no
+     * focused window
+     */
+    public IWindow getFocusWindow();
+    
+    /**
+     * Gets all the open windows. Minimized and maximized windows are
+     * included. The application's main frame is excluded; it can be
+     * accessed using <code>PluginServices.getMainFrame()</code>.
+     *
+     * @return An IWindow array containing all the open windows.
+     */
+    public IWindow[] getAllWindows();
+    
+    /**
+     * Gets all the open windows (as {@link #getAllWindows()}),
+     * but in this method the windows are returned in the same
+     * deepness order that they have in the application.
+     *
+     * @return   An ordered array containing all the panels in the application.
+     * The first element of the array is the topmost (foreground) window in the
+     * application. The last element is the bottom (background) window.
+     */
+    public IWindow[] getOrderedWindows();
+
+    /**
+     * Close the SingletonWindow whose class and model are provided as
+     * parameters.
+     * 
+     * @param viewClass Class of the window which is to be closed
+     * @param model Model of the window which is to be closed
+     *
+     * @return true if there is an open window whose class and model
+     *         match the provided parameteres, false otherwise.
+     */
+    public boolean closeSingletonWindow(Class viewClass, Object model);
+
+    /**
+     * Close the SingletonWindow whose model is provided as parameter.
+     *
+     * @param model Model of the window which is to be closed
+     *
+     * @return true if there is an open window whose model matchs
+     *         the provided one, false otherwise.
+     */
+    public boolean closeSingletonWindow(Object model);
+
+    /**
+     * Close the provided window.
+     *
+     * @param p window to be closed
+     */
+    public void closeWindow(IWindow p);
+
+    /**
+     * Close all the currently open windows
+     */
+    public void closeAllWindows();
+
+    /**
+     * Gets the WindowInfo object associated with the provided window.
+     *
+     * @param v window whose information is to be retrieved
+     *
+     * @return WindowInfo The WindowInfo object containing the information
+     * about the provided window 
+     * 
+     * @see WindowInfo
+     */
+    public WindowInfo getWindowInfo(IWindow v);
+
+    /**
+     * Shows the wait cursor and blocks all the events from main window until
+     * {@link #restoreCursor()} is called.
+     */
+    public void setWaitCursor();
+
+    /**
+     * Sets the normal cursor and unblocks events from main window.
+     * 
+     * @see #setWaitCursor()
+     */
+    public void restoreCursor();
+
+    /**
+     * Maximizes or restores the provided window
+     * 
+     * @param v The window to be maximized or restored 
+     * @param bMaximum If true, the window will be maximized,
+     *  if false, it will be restored
+     * @throws PropertyVetoException
+     */
+    public void setMaximum(IWindow v, boolean bMaximum) throws PropertyVetoException;
+    
+    /**
+     * Updates the window properties (size, location, etc) according to the
+     * provided WindowInfo object.
+     * 
+     * @param v The window whose properties are to be changed
+     * @param vi The WindowInfo object containing the new properties to be set
+     */
+    public void changeWindowInfo(IWindow v, WindowInfo vi);
+    
+    /**
+     * Forces a window to be repainted. Normally, this is not necessary,
+     * as windows are refreshed when necessary.
+     * 
+     * @param win The window to be refreshed.
+     */
+    public void refresh(IWindow win);
+
+    /**
+     * Sets the provided image as background image in the main window. The image
+     * will be centered, set in mosaic or expanded to fill the full window,
+     * depending on the <code>typeDesktop</code> argument.
+     * 
+     * @param image The image to be set as background image
+     * @param typeDesktop Decides whether the image should be centered, set
+     * in mosaic or expanded. Accepted values are: Theme.CENTERED,
+     * Theme.MOSAIC and Theme.EXPAND.
+     */
+    public void setBackgroundImage(ImageIcon image, String typeDesktop);
+    
+    public void setLocale(Locale locale);
+      
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIUtilities.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * 
+ */
+public class MDIUtilities {
+public static void checkWindowInfo(WindowInfo vi){
+    if ((vi.isModal()) && (!vi.isVisible())) {
+        throw new RuntimeException("A modal dialog cannot be visible=false");
+    }
+
+
+}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowListener.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+
+/**
+ * Interface which should be implemented by those windows which want to
+ * be listeners of events produced on themselves.
+ */
+public interface IWindowListener {
+	/**
+     * This method it is invoked when the window is activated.
+     */
+    public void windowActivated();
+
+    /**
+     * This method it is invoked when the window is closed
+     */
+    public void windowClosed();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonWindow.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * <p>Interface which should be implemented by those windows
+ * which have an identity in the application. Each
+ * SingletonWindow has an associated model, which identifies
+ * the window, and thus it is not possible to create two
+ * SingletonWindow with the same model.</p>
+ * 
+ * <p>For example,
+ * if a window contains a text file, maybe it is not suitable to open
+ * two windows to edit the same file. To accomplish this, the edit
+ * window should implement this interface, and the model associated
+ * with the window will be the path to the text file. Then, if the user
+ * tries to open an already open file, the existing window containing
+ * the file will be shown to the user, instead of opening a new one.</p>
+ *
+ * <p>When opening a new SingletonWindow, the framework works in the
+ * following way: all the already open SingletonWindow are searched to try
+ * to find a window which has the same model as the new one. If such window
+ * is found, it is sent to the foreground and no new window is opened;
+ * otherwise, the new window is shown.
+ * </p>  
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface SingletonWindow extends IWindow {
+    /**
+     * Gets the window model, the identity, the object which will be used
+     * to identify te window.
+     *
+     * @return Object
+     */
+    public Object getWindowModel();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowTransform.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * Interface to transform a standard view to a view palette.
+ *
+ * @author Vicente Caballero Navarro
+*/
+public interface IWindowTransform {
+    /**
+     * Transform to view palette.
+     */
+    public void toPalette();
+
+    /**
+     * Restore to standard view
+     */
+    public void restore();
+
+    /**
+     * Returns if the view is palette type or standard
+     *
+     * @return boolean
+     */
+    public boolean isPalette();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+import org.apache.log4j.Logger;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.SkinExtension;
+
+
+
+/**
+ * Se encarga de la creaci�n de la clase Skin.
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class MDIManagerFactory {
+    private static SkinExtension skinExtension = null;
+    private static PluginClassLoader loader = null;
+    private static MDIManager mdiManager = null;
+    private static Logger logger = Logger.getLogger(MDIManagerFactory.class.getName());
+
+    public static void setSkinExtension(SkinExtension extension,
+        PluginClassLoader loader) {
+        MDIManagerFactory.loader = loader;
+        MDIManagerFactory.skinExtension = extension;
+    }
+
+    /**
+     * Obtiene una referencia al Skin cargado. El skin cargado es un singleton, se
+     * devuelve la misma instancia a todas las invocaciones de �ste m�todo
+     *
+     * @return referencia al skin cargado
+     */
+    public static MDIManager createManager() {
+    	if (mdiManager != null) return mdiManager;
+    	
+        if (skinExtension == null) {
+        	throw new NoSkinExtensionException(Messages.getString("MDIManagerFactory.No_skin_extension_in_the_plugins"));
+        } else {
+            try {
+                mdiManager = (MDIManager) loader.loadClass(skinExtension.getClassName())
+                                          .newInstance();
+                return mdiManager;
+            } catch (InstantiationException e) {
+                logger.error(Messages.getString("Launcher.Error_instanciando_la_extension"), e);
+
+                //                return new NewSkin();
+            } catch (IllegalAccessException e) {
+                logger.error(Messages.getString("Launcher.Error_instanciando_la_extension"), e);
+
+                //                return new NewSkin();
+            } catch (ClassNotFoundException e) {
+                logger.error(Messages.getString("Launcher.No_se_encontro_la_clase_de_la_extension"), e);
+
+                //                return new NewSkin();
+            }
+        }
+        
+        return null;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return Returns the skinExtension.
+     */
+    public static SkinExtension getSkinExtension() {
+        return skinExtension;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * 
+ */
+public class NoSkinExtensionException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	public NoSkinExtensionException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 */
+	public NoSkinExtensionException(String message) {
+		super(message);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 * @param cause
+	 */
+	public NoSkinExtensionException(String message, Throwable cause) {
+		super(message, cause);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param cause
+	 */
+	public NoSkinExtensionException(Throwable cause) {
+		super(cause);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindow.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * The IWindow interface should be implemented by any panel which is
+ * intended to be an Andami window. The JPanel implementing IWindow
+ * will be the contents of the window, and the frame containing it
+ * will be created by Andami.
+ *
+ * @see MDIManager
+ * @see WindowInfo
+ * @see SingletonWindow
+ * @see IWindowListener
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public interface IWindow {
+    /**
+     * <p>Gets the initial window properties. It must be called just once
+     * from the framework. To get the current WindowInfo from this
+     * window, use
+     * <code>PluginServices.getMDIManager.getWindowInfo(window);</code></p>
+     *
+     * @return A WindowInfo object, containing the properties that
+     * this window should have when created
+     */
+    public WindowInfo getWindowInfo();
+    
+    
+    /**
+     * <p>Gets the profile for this window
+     *
+     * @return An object with the profile.
+     */
+    public Object getWindowProfile();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionExecuteWithArgs.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionExecuteWithArgs.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionExecuteWithArgs.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+
+public interface IExtensionExecuteWithArgs {
+
+	public void execute(String action, Object[] args);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionExecuteWithArgs.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExclusiveUIExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExclusiveUIExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExclusiveUIExtension.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+/**
+ * Extensions implementing this interface are able to take control
+ * over the user interface, by deciding which of the other extensions
+ * will be enabled/disabled or visible/hidden.
+ * 
+ * Besides implementing this interface, the extension needs to
+ * be set as ExclusiveUIExtension during Andami startup process.
+ * This is performed by providing a command line argument to
+ * Andami:
+ * <br>
+ * <code>ExclusiveUIExtension=ExtensionName</code>
+ *
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public interface ExclusiveUIExtension extends IExtension {
+	
+    /**
+     * This method is used when this extension is installed as
+     * ExclusiveUIExtension. This extension will be asked for
+     * each installed extension to determine which of them
+     * should be enabled.
+     * 
+     * @return true if the provided extension should be enabled,
+     * false if it should be disabled.
+     */
+    public boolean isEnabled(IExtension extension);
+
+    /**
+     * This method is used when this extension is installed as
+     * ExclusiveUIExtension. This extension will be asked for
+     * each installed extension to determine which of them
+     * should be visible.
+     * 
+     * @return true if the provided extension should be visible,
+     * false if it should be hidden.
+     */
+    public boolean isVisible(IExtension extension);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExclusiveUIExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IUnsavedData.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IUnsavedData.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IUnsavedData.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins.status;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.plugins.IExtension;
+
+
+
+/**
+ * <p>This interface represents some unsaved data, associated to one extension.
+ * There are methods to get the associated extension, to get info about these
+ * data, to get the type of the data and a suitable icon for this type,
+ * and a method to save the data.</p>
+ * 
+ * <p>It is used during the Andami termination process, to construct the
+ * dialog of unsaved data, although it can be used at any time.</p>
+ * 
+ * <p>Normally, it should not be directly implemented, use the convenience
+ * UnsavedData class.</p>
+ * 
+ * @see IExtensionStatus
+ * @see UnsavedData
+ * @see IExtension
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public interface IUnsavedData {
+
+	/**
+	 * Gets the resource name of this unsaved data. Normally, this will be
+	 * a file path, but it may be different for certain type of unsaved data
+	 * (for example, database connections).
+	 * 
+	 * @return The resource name of this unsaved data
+	 */
+	public String getResourceName();
+	
+	/**
+	 * <p>Gets a description of this unsaved data. This would be combined with the
+	 * resource name to show a coherent information to the user.</p>
+	 * 
+	 * <p>Examples of descriptions:
+	 * <ul><li>Modified SHP Layer</li>
+	 * <li>Modified gvSIG project</li>
+	 * </ul>
+	 * 
+	 * @return A description for this unsaved data, probably containing the type
+	 * of data and the kind of modification.
+	 */
+	public String getDescription();
+	
+	/**
+	 * <p>Save the existing changes for this resource (for example, save the layer
+	 * to disk or to the database, etc). The resource should not be closed at this
+	 * point (files, database connections, etc should no be closed), as they may
+	 * be still needed by other extensions. Resources should be closed at
+	 * {@link IExtension#terminate()}.</p>
+	 * 
+	 * @return true if the data was correctly saved, false if it was not saved
+	 * (there are many reasons for this: there was an error, the user cancelled
+	 * the process, etc).
+	 */
+	public boolean saveData();
+
+	/**
+	 * Each IUnsavedData object is associated with one extension, which is
+	 * in charge of this data. This method gets the extension associated with
+	 * this object.
+	 * 
+	 * @return The extension associated with this IUnsavedData object.
+	 */
+	public IExtension getExtension();
+	
+	/**
+	 * Gets an icon suitable to represent this type of data.
+	 * 
+	 * @return An icon representing this type of data, or null if no icon is
+	 * available
+	 */
+	public String getIcon();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IUnsavedData.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IExtensionStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IExtensionStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IExtensionStatus.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins.status;
+
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+
+
+/**
+ * <p>This interface provides a framework to query the status of
+ * extensions. By default, the interface provides methods to check
+ * if the extension has some unsaved data (and save them), and methods
+ * to check if the extension has some associated background tasks.
+ * However, additional aspects can be included in the status by extending
+ * this interface.</p>
+ * 
+ * <p>Each extension will have an associated IExtensionStatus object, which
+ * can be used at any time to check the status. This is specially useful
+ * during the Andami termination process, to check if there are unfinished
+ * tasks which should be attended before exiting.</p>
+ * 
+ * @see IUnsavedData
+ * @see UnsavedData
+ * @see IExtension
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public interface IExtensionStatus {	
+    /**
+     * This method is used to check if the extension has some unsaved data.
+     * For example, if the project has been modified, or there is a layer in
+     * edition mode.
+     * 
+     * @return true if the extension has some unsaved data, false otherwise.
+     */
+    public boolean hasUnsavedData();
+    
+    /**
+     * <p>Gets an array of the UnsavedData objects, which contain information about
+     * the unsaved data and allows to save it.</p>
+     * 
+     * @return An array of the associated unsaved data, or null in case the extension
+     * has not unsaved data.
+     */
+    public IUnsavedData[] getUnsavedData();
+    
+    /**
+     * This method is used to check if the extension has some associated
+     * background process which is currently running.
+     * 
+     * @return true if the extension has some associated background process,
+     * false otherwise.
+     */
+    public boolean hasRunningProcesses();
+    
+    
+    /**
+     * <p>Gets an array of the traceable background tasks associated with this
+     * extension. These tasks may be tracked, canceled, etc.</p>
+     * 
+     * @return An array of the associated background tasks, or null in case there is
+     * no associated background tasks.
+     */
+    public IMonitorableTask[] getRunningProcesses();
+    
+	//public IStatusGUI getGUI();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IExtensionStatus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/UnsavedData.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/UnsavedData.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/UnsavedData.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins.status;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.plugins.IExtension;
+
+
+/**
+ * Abstract class implementing IUnsavedData. is a convenience
+ * class used to allow easier modifications of IUnsaveData 
+ * interface.
+ * 
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public abstract class UnsavedData implements IUnsavedData {
+
+	/**
+	 * This UnsavedData object is associated to this extension.
+	 */
+	private IExtension ext;
+	
+	/**
+	 * Creates a new UnsavedData object which will be associated to
+	 * the provided extension.
+	 * 
+	 * @param extension
+	 */
+	public UnsavedData(IExtension extension) {
+		ext = extension;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getDescription()
+	 */
+	public abstract String getDescription() ;
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getExtension()
+	 */
+	public IExtension getExtension() {
+		return ext;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getIcon()
+	 */
+	public String getIcon() {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getResourceName()
+	 */
+	public abstract String getResourceName();
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#saveData()
+	 */
+	public abstract boolean saveData();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/UnsavedData.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionQueryByAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionQueryByAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionQueryByAction.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+public interface IExtensionQueryByAction {
+
+	public boolean canQueryByAction(); 
+	
+	public boolean isEnabled(String action);
+	public boolean isVisible(String action);
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionQueryByAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtension.java	(revision 42196)
@@ -0,0 +1,132 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+
+/**
+ * <p>
+ * Extensions are the way in which plugins extend Andami. Every class
+ * implementing this interface is an extension (although this class
+ * should not be directly implemented, extending the {@link Extension}
+ * abstract class is the preferred way). During startup,
+ * Andami creates an instance from each extension. Extensions are able
+ * to add controls (tools, toolbars and menus)
+ * to the user interface (GUI); when these controls
+ * are clicked or modified, Andami will call the <code>execute()</code>
+ * method from the associated extension. Extensions will also control
+ * whether their associated controls are enabled or not, and whether
+ * they are visible or hidden.
+ * </p>
+ * <p>
+ * Besides implementing this interface, extensions are required to have
+ * an empty constructor, because it will be invoked to create the
+ * extension's instance.
+ * </p>
+ * <p>
+ * On correctly installed plugins, an instance of every plugin's
+ * extension will be created. Then, the <code>initialize()</code>
+ * method will be executed for each extension.
+ * </p>
+ * <p>
+ * Each time the active window is switched and every time the execute
+ * method is called, Andami checks the <code>isEnabled()</code> and
+ * <code>isVisible()</code> for each extension, to decide whether
+ * they will be enabled and visible.
+ * </p>
+ * <p>
+ * The <code>execute()</code> method will be called from the GUI
+ * thread, so it will block the GUI until it finishes. Therefore,
+ * execution must be fast. If long process must be started from
+ * the <code>execute</code> method, a new thread must be created.
+ * </p>
+ * <p>
+ * Normally, extensions should not directly implement this interface,
+ * but they should extend the <code>Extension</code> abstract class.
+ * </p>
+ *
+ * @see Extension
+ */public interface IExtension {
+	 /**
+	  * Extension's initialization code should be here.
+	  * This method is called for all the extensions during
+	  * Andami's initialization.
+	  */
+	 public void initialize();
+
+	 /**
+	  * Extension's post-initialization code should be here.
+	  * This method is called for all the extensions during
+	  * Andami's initialization, after <code>initialize()</code>
+	  * has been called for ALL the extensions.
+	  */
+    public void postInitialize();
+
+    /**
+     * Extension's termination code should be here.
+     * This method is called for all the extensions during
+     * Andami's termination.
+     */
+    public void terminate();
+
+    /**
+     * This method is executed when the user clicks on any of the
+     * controls associated with this extension (menus, tools, etc).
+     *
+     * @param actionCommand An String specifying the action to
+     * execute. This is useful when there are different
+     * controls associated with the same extension.
+     */
+    public void execute(String actionCommand);
+
+    /**
+     * This method is invoked by Andami to check whether the extension
+     * (and its associated controls) is enabled or disabled.
+     * Disabled controls (menus and buttons) are shown in light grey
+     * colour, and it is not possible to click on them.
+     *
+     * @return true if the extension should be enabled, false otherwise
+     */
+    public boolean isEnabled();
+
+    /**
+     * This method is invoked by Andami to check whether the extension
+     * (and its associated controls) is visible or hidden.
+     *
+     * @return true if the extension should be visible, false otherwise
+     */
+    public boolean isVisible();
+
+    /**
+     * Gets the status of the extension, which may be queried to check
+     * if the extension has some unsaved data or some associated background
+     * tasks.
+     *
+     * @see IExtensionStatus
+     * @return An IExtensionStatus object, containing the status of this
+     * extension.
+     */
+    public IExtensionStatus getStatus();
+    public IExtensionStatus getStatus(IExtension extension);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java	(revision 42196)
@@ -0,0 +1,156 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: SkinExtensionDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class SkinExtensionDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class SkinExtensionDescriptor extends SkinExtensionTypeDescriptor {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtensionDescriptor() {
+        super();
+        setExtendsWithoutFlatten(new SkinExtensionTypeDescriptor());
+        xmlName = "skin-extension";
+    } //-- com.iver.andami.plugins.config.generate.SkinExtensionDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return super.getExtends();
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        if (identity == null)
+            return super.getIdentity();
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.SkinExtension.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtension.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: SkinExtension.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class SkinExtension.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class SkinExtension extends SkinExtensionType 
+implements java.io.Serializable
+{
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtension() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.SkinExtension) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.SkinExtension.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java	(revision 42196)
@@ -0,0 +1,419 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ToolBarDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ToolBarDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ToolBarDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBarDescriptor() {
+        super();
+        xmlName = "tool-bar";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Integer(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _isVisible
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_isVisible", "is-visible", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                if(!target.hasIsVisible())
+                    return null;
+                return (target.getIsVisible() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteIsVisible();
+                        return;
+                    }
+                    target.setIsVisible( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _isVisible
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _actionToolList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ActionTool.class, "_actionToolList", "action-tool", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getActionTool();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addActionTool( (org.gvsig.andami.plugins.config.generate.ActionTool) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ActionTool();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionToolList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _selectableToolList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.SelectableTool.class, "_selectableToolList", "selectable-tool", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getSelectableTool();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addSelectableTool( (org.gvsig.andami.plugins.config.generate.SelectableTool) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.SelectableTool();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _selectableToolList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboButtonList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboButton.class, "_comboButtonList", "combo-button", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getComboButton();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addComboButton( (org.gvsig.andami.plugins.config.generate.ComboButton) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboButton();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboButtonList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboScaleList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboScale.class, "_comboScaleList", "combo-scale", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getComboScale();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addComboScale( (org.gvsig.andami.plugins.config.generate.ComboScale) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboScale();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboScaleList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.ToolBarDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ToolBar.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBar.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBar.java	(revision 42196)
@@ -0,0 +1,749 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ToolBar.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ToolBar.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ToolBar implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _position
+     */
+    private int _position = 50;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+    /**
+     * Field _isVisible
+     */
+    private boolean _isVisible = true;
+
+    /**
+     * keeps track of state for field: _isVisible
+     */
+    private boolean _has_isVisible;
+
+    /**
+     * Field _actionToolList
+     */
+    private java.util.Vector _actionToolList;
+
+    /**
+     * Field _selectableToolList
+     */
+    private java.util.Vector _selectableToolList;
+
+    /**
+     * Field _comboButtonList
+     */
+    private java.util.Vector _comboButtonList;
+
+    /**
+     * Field _comboScaleList
+     */
+    private java.util.Vector _comboScaleList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBar() {
+        super();
+        _actionToolList = new Vector();
+        _selectableToolList = new Vector();
+        _comboButtonList = new Vector();
+        _comboScaleList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.ToolBar()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addActionTool
+     * 
+     * @param vActionTool
+     */
+    public void addActionTool(org.gvsig.andami.plugins.config.generate.ActionTool vActionTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _actionToolList.addElement(vActionTool);
+    } //-- void addActionTool(com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method addActionTool
+     * 
+     * @param index
+     * @param vActionTool
+     */
+    public void addActionTool(int index, org.gvsig.andami.plugins.config.generate.ActionTool vActionTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _actionToolList.insertElementAt(vActionTool, index);
+    } //-- void addActionTool(int, com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method addComboButton
+     * 
+     * @param vComboButton
+     */
+    public void addComboButton(org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.addElement(vComboButton);
+    } //-- void addComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void addComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.insertElementAt(vComboButton, index);
+    } //-- void addComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param vComboScale
+     */
+    public void addComboScale(org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.addElement(vComboScale);
+    } //-- void addComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void addComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.insertElementAt(vComboScale, index);
+    } //-- void addComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addSelectableTool
+     * 
+     * @param vSelectableTool
+     */
+    public void addSelectableTool(org.gvsig.andami.plugins.config.generate.SelectableTool vSelectableTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _selectableToolList.addElement(vSelectableTool);
+    } //-- void addSelectableTool(com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method addSelectableTool
+     * 
+     * @param index
+     * @param vSelectableTool
+     */
+    public void addSelectableTool(int index, org.gvsig.andami.plugins.config.generate.SelectableTool vSelectableTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _selectableToolList.insertElementAt(vSelectableTool, index);
+    } //-- void addSelectableTool(int, com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method deleteIsVisible
+     */
+    public void deleteIsVisible()
+    {
+        this._has_isVisible= false;
+    } //-- void deleteIsVisible() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Method enumerateActionTool
+     */
+    public java.util.Enumeration enumerateActionTool()
+    {
+        return _actionToolList.elements();
+    } //-- java.util.Enumeration enumerateActionTool() 
+
+    /**
+     * Method enumerateComboButton
+     */
+    public java.util.Enumeration enumerateComboButton()
+    {
+        return _comboButtonList.elements();
+    } //-- java.util.Enumeration enumerateComboButton() 
+
+    /**
+     * Method enumerateComboScale
+     */
+    public java.util.Enumeration enumerateComboScale()
+    {
+        return _comboScaleList.elements();
+    } //-- java.util.Enumeration enumerateComboScale() 
+
+    /**
+     * Method enumerateSelectableTool
+     */
+    public java.util.Enumeration enumerateSelectableTool()
+    {
+        return _selectableToolList.elements();
+    } //-- java.util.Enumeration enumerateSelectableTool() 
+
+    /**
+     * Method getActionTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ActionTool getActionTool(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _actionToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ActionTool) _actionToolList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ActionTool getActionTool(int) 
+
+    /**
+     * Method getActionTool
+     */
+    public org.gvsig.andami.plugins.config.generate.ActionTool[] getActionTool()
+    {
+        int size = _actionToolList.size();
+        org.gvsig.andami.plugins.config.generate.ActionTool[] mArray = new org.gvsig.andami.plugins.config.generate.ActionTool[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ActionTool) _actionToolList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ActionTool[] getActionTool() 
+
+    /**
+     * Method getActionToolCount
+     */
+    public int getActionToolCount()
+    {
+        return _actionToolList.size();
+    } //-- int getActionToolCount() 
+
+    /**
+     * Method getComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton getComboButton(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboButton getComboButton(int) 
+
+    /**
+     * Method getComboButton
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton[] getComboButton()
+    {
+        int size = _comboButtonList.size();
+        org.gvsig.andami.plugins.config.generate.ComboButton[] mArray = new org.gvsig.andami.plugins.config.generate.ComboButton[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton[] getComboButton() 
+
+    /**
+     * Method getComboButtonCount
+     */
+    public int getComboButtonCount()
+    {
+        return _comboButtonList.size();
+    } //-- int getComboButtonCount() 
+
+    /**
+     * Method getComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale getComboScale(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboScale getComboScale(int) 
+
+    /**
+     * Method getComboScale
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale[] getComboScale()
+    {
+        int size = _comboScaleList.size();
+        org.gvsig.andami.plugins.config.generate.ComboScale[] mArray = new org.gvsig.andami.plugins.config.generate.ComboScale[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale[] getComboScale() 
+
+    /**
+     * Method getComboScaleCount
+     */
+    public int getComboScaleCount()
+    {
+        return _comboScaleList.size();
+    } //-- int getComboScaleCount() 
+
+    /**
+     * Returns the value of field 'isVisible'.
+     * 
+     * @return the value of field 'isVisible'.
+     */
+    public boolean getIsVisible()
+    {
+        return this._isVisible;
+    } //-- boolean getIsVisible() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public int getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Method getSelectableTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SelectableTool getSelectableTool(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _selectableToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.SelectableTool) _selectableToolList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool getSelectableTool(int) 
+
+    /**
+     * Method getSelectableTool
+     */
+    public org.gvsig.andami.plugins.config.generate.SelectableTool[] getSelectableTool()
+    {
+        int size = _selectableToolList.size();
+        org.gvsig.andami.plugins.config.generate.SelectableTool[] mArray = new org.gvsig.andami.plugins.config.generate.SelectableTool[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.SelectableTool) _selectableToolList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool[] getSelectableTool() 
+
+    /**
+     * Method getSelectableToolCount
+     */
+    public int getSelectableToolCount()
+    {
+        return _selectableToolList.size();
+    } //-- int getSelectableToolCount() 
+
+    /**
+     * Method hasIsVisible
+     */
+    public boolean hasIsVisible()
+    {
+        return this._has_isVisible;
+    } //-- boolean hasIsVisible() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeActionTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ActionTool removeActionTool(int index)
+    {
+        java.lang.Object obj = _actionToolList.elementAt(index);
+        _actionToolList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ActionTool) obj;
+    } //-- com.iver.andami.plugins.config.generate.ActionTool removeActionTool(int) 
+
+    /**
+     * Method removeAllActionTool
+     */
+    public void removeAllActionTool()
+    {
+        _actionToolList.removeAllElements();
+    } //-- void removeAllActionTool() 
+
+    /**
+     * Method removeAllComboButton
+     */
+    public void removeAllComboButton()
+    {
+        _comboButtonList.removeAllElements();
+    } //-- void removeAllComboButton() 
+
+    /**
+     * Method removeAllComboScale
+     */
+    public void removeAllComboScale()
+    {
+        _comboScaleList.removeAllElements();
+    } //-- void removeAllComboScale() 
+
+    /**
+     * Method removeAllSelectableTool
+     */
+    public void removeAllSelectableTool()
+    {
+        _selectableToolList.removeAllElements();
+    } //-- void removeAllSelectableTool() 
+
+    /**
+     * Method removeComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton removeComboButton(int index)
+    {
+        java.lang.Object obj = _comboButtonList.elementAt(index);
+        _comboButtonList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton removeComboButton(int) 
+
+    /**
+     * Method removeComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale removeComboScale(int index)
+    {
+        java.lang.Object obj = _comboScaleList.elementAt(index);
+        _comboScaleList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale removeComboScale(int) 
+
+    /**
+     * Method removeSelectableTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SelectableTool removeSelectableTool(int index)
+    {
+        java.lang.Object obj = _selectableToolList.elementAt(index);
+        _selectableToolList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.SelectableTool) obj;
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool removeSelectableTool(int) 
+
+    /**
+     * Method setActionTool
+     * 
+     * @param index
+     * @param vActionTool
+     */
+    public void setActionTool(int index, org.gvsig.andami.plugins.config.generate.ActionTool vActionTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _actionToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _actionToolList.setElementAt(vActionTool, index);
+    } //-- void setActionTool(int, com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method setActionTool
+     * 
+     * @param actionToolArray
+     */
+    public void setActionTool(org.gvsig.andami.plugins.config.generate.ActionTool[] actionToolArray)
+    {
+        //-- copy array
+        _actionToolList.removeAllElements();
+        for (int i = 0; i < actionToolArray.length; i++) {
+            _actionToolList.addElement(actionToolArray[i]);
+        }
+    } //-- void setActionTool(com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void setComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboButtonList.setElementAt(vComboButton, index);
+    } //-- void setComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param comboButtonArray
+     */
+    public void setComboButton(org.gvsig.andami.plugins.config.generate.ComboButton[] comboButtonArray)
+    {
+        //-- copy array
+        _comboButtonList.removeAllElements();
+        for (int i = 0; i < comboButtonArray.length; i++) {
+            _comboButtonList.addElement(comboButtonArray[i]);
+        }
+    } //-- void setComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void setComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboScaleList.setElementAt(vComboScale, index);
+    } //-- void setComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param comboScaleArray
+     */
+    public void setComboScale(org.gvsig.andami.plugins.config.generate.ComboScale[] comboScaleArray)
+    {
+        //-- copy array
+        _comboScaleList.removeAllElements();
+        for (int i = 0; i < comboScaleArray.length; i++) {
+            _comboScaleList.addElement(comboScaleArray[i]);
+        }
+    } //-- void setComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Sets the value of field 'isVisible'.
+     * 
+     * @param isVisible the value of field 'isVisible'.
+     */
+    public void setIsVisible(boolean isVisible)
+    {
+        this._isVisible = isVisible;
+        this._has_isVisible = true;
+    } //-- void setIsVisible(boolean) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(int position)
+    {
+        this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Method setSelectableTool
+     * 
+     * @param index
+     * @param vSelectableTool
+     */
+    public void setSelectableTool(int index, org.gvsig.andami.plugins.config.generate.SelectableTool vSelectableTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _selectableToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _selectableToolList.setElementAt(vSelectableTool, index);
+    } //-- void setSelectableTool(int, com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method setSelectableTool
+     * 
+     * @param selectableToolArray
+     */
+    public void setSelectableTool(org.gvsig.andami.plugins.config.generate.SelectableTool[] selectableToolArray)
+    {
+        //-- copy array
+        _selectableToolList.removeAllElements();
+        for (int i = 0; i < selectableToolArray.length; i++) {
+            _selectableToolList.addElement(selectableToolArray[i]);
+        }
+    } //-- void setSelectableTool(com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ToolBar) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ToolBar.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBar.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java	(revision 42196)
@@ -0,0 +1,322 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ExtensionTypeDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ExtensionTypeDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ExtensionTypeDescriptor extends org.gvsig.andami.plugins.config.generate.SkinExtensionTypeDescriptor {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionTypeDescriptor() {
+        super();
+        setExtendsWithoutFlatten(new org.gvsig.andami.plugins.config.generate.SkinExtensionTypeDescriptor());
+        xmlName = "extension-type";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _priority
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_priority", "priority", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                if(!target.hasPriority())
+                    return null;
+                return new java.lang.Integer(target.getPriority());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePriority();
+                        return;
+                    }
+                    target.setPriority( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _priority
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _active
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_active", "active", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                if(!target.hasActive())
+                    return null;
+                return (target.getActive() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteActive();
+                        return;
+                    }
+                    target.setActive( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _active
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _description
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_description", "description", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                return target.getDescription();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    target.setDescription( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _description
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _alwaysvisible
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_alwaysvisible", "alwaysvisible", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                if(!target.hasAlwaysvisible())
+                    return null;
+                return (target.getAlwaysvisible() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteAlwaysvisible();
+                        return;
+                    }
+                    target.setAlwaysvisible( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _alwaysvisible
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ExtensionTypeDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return super.getExtends();
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        if (identity == null)
+            return super.getIdentity();
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ExtensionType.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: LabelDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class LabelDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class LabelDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LabelDescriptor() {
+        super();
+        xmlName = "label";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _size
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_size", "size", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Label target = (Label) object;
+                if(!target.hasSize())
+                    return null;
+                return new java.lang.Integer(target.getSize());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Label target = (Label) object;
+                    // ignore null values for non optional primitives
+                    if (value == null) return;
+                    
+                    target.setSize( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _size
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _id
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_id", "id", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Label target = (Label) object;
+                return target.getId();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Label target = (Label) object;
+                    target.setId( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _id
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.LabelDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Label.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionType.java	(revision 42196)
@@ -0,0 +1,300 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ExtensionType.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ExtensionType.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ExtensionType extends org.gvsig.andami.plugins.config.generate.SkinExtensionType 
+implements java.io.Serializable
+{
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _priority
+     */
+    private int _priority;
+
+    /**
+     * keeps track of state for field: _priority
+     */
+    private boolean _has_priority;
+
+    /**
+     * Field _active
+     */
+    private boolean _active;
+
+    /**
+     * keeps track of state for field: _active
+     */
+    private boolean _has_active;
+
+    /**
+     * Field _description
+     */
+    private java.lang.String _description;
+
+    /**
+     * Field _alwaysvisible
+     */
+    private boolean _alwaysvisible;
+
+    /**
+     * keeps track of state for field: _alwaysvisible
+     */
+    private boolean _has_alwaysvisible;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionType() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ExtensionType()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteActive
+     */
+    public void deleteActive()
+    {
+        this._has_active= false;
+    } //-- void deleteActive() 
+
+    /**
+     * Method deleteAlwaysvisible
+     */
+    public void deleteAlwaysvisible()
+    {
+        this._has_alwaysvisible= false;
+    } //-- void deleteAlwaysvisible() 
+
+    /**
+     * Method deletePriority
+     */
+    public void deletePriority()
+    {
+        this._has_priority= false;
+    } //-- void deletePriority() 
+
+    /**
+     * Returns the value of field 'active'.
+     * 
+     * @return the value of field 'active'.
+     */
+    public boolean getActive()
+    {
+        return this._active;
+    } //-- boolean getActive() 
+
+    /**
+     * Returns the value of field 'alwaysvisible'.
+     * 
+     * @return the value of field 'alwaysvisible'.
+     */
+    public boolean getAlwaysvisible()
+    {
+        return this._alwaysvisible;
+    } //-- boolean getAlwaysvisible() 
+
+    /**
+     * Returns the value of field 'description'.
+     * 
+     * @return the value of field 'description'.
+     */
+    public java.lang.String getDescription()
+    {
+        return this._description;
+    } //-- java.lang.String getDescription() 
+
+    /**
+     * Returns the value of field 'priority'.
+     * 
+     * @return the value of field 'priority'.
+     */
+    public int getPriority()
+    {
+        return this._priority;
+    } //-- int getPriority() 
+
+    /**
+     * Method hasActive
+     */
+    public boolean hasActive()
+    {
+        return this._has_active;
+    } //-- boolean hasActive() 
+
+    /**
+     * Method hasAlwaysvisible
+     */
+    public boolean hasAlwaysvisible()
+    {
+        return this._has_alwaysvisible;
+    } //-- boolean hasAlwaysvisible() 
+
+    /**
+     * Method hasPriority
+     */
+    public boolean hasPriority()
+    {
+        return this._has_priority;
+    } //-- boolean hasPriority() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'active'.
+     * 
+     * @param active the value of field 'active'.
+     */
+    public void setActive(boolean active)
+    {
+        this._active = active;
+        this._has_active = true;
+    } //-- void setActive(boolean) 
+
+    /**
+     * Sets the value of field 'alwaysvisible'.
+     * 
+     * @param alwaysvisible the value of field 'alwaysvisible'.
+     */
+    public void setAlwaysvisible(boolean alwaysvisible)
+    {
+        this._alwaysvisible = alwaysvisible;
+        this._has_alwaysvisible = true;
+    } //-- void setAlwaysvisible(boolean) 
+
+    /**
+     * Sets the value of field 'description'.
+     * 
+     * @param description the value of field 'description'.
+     */
+    public void setDescription(java.lang.String description)
+    {
+        this._description = description;
+    } //-- void setDescription(java.lang.String) 
+
+    /**
+     * Sets the value of field 'priority'.
+     * 
+     * @param priority the value of field 'priority'.
+     */
+    public void setPriority(int priority)
+    {
+        this._priority = priority;
+        this._has_priority = true;
+    } //-- void setPriority(int) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ExtensionType) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ExtensionType.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Label.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Label.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Label.java	(revision 42196)
@@ -0,0 +1,204 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Label.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Label.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Label implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _size
+     */
+    private int _size;
+
+    /**
+     * keeps track of state for field: _size
+     */
+    private boolean _has_size;
+
+    /**
+     * Field _id
+     */
+    private java.lang.String _id;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Label() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Label()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteSize
+     */
+    public void deleteSize()
+    {
+        this._has_size= false;
+    } //-- void deleteSize() 
+
+    /**
+     * Returns the value of field 'id'.
+     * 
+     * @return the value of field 'id'.
+     */
+    public java.lang.String getId()
+    {
+        return this._id;
+    } //-- java.lang.String getId() 
+
+    /**
+     * Returns the value of field 'size'.
+     * 
+     * @return the value of field 'size'.
+     */
+    public int getSize()
+    {
+        return this._size;
+    } //-- int getSize() 
+
+    /**
+     * Method hasSize
+     */
+    public boolean hasSize()
+    {
+        return this._has_size;
+    } //-- boolean hasSize() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'id'.
+     * 
+     * @param id the value of field 'id'.
+     */
+    public void setId(java.lang.String id)
+    {
+        this._id = id;
+    } //-- void setId(java.lang.String) 
+
+    /**
+     * Sets the value of field 'size'.
+     * 
+     * @param size the value of field 'size'.
+     */
+    public void setSize(int size)
+    {
+        this._size = size;
+        this._has_size = true;
+    } //-- void setSize(int) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Label) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Label.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Label.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java	(revision 42196)
@@ -0,0 +1,196 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ResourceBundleDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ResourceBundleDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ResourceBundleDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ResourceBundleDescriptor() {
+        super();
+        xmlName = "resourceBundle";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ResourceBundle target = (ResourceBundle) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ResourceBundle target = (ResourceBundle) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ResourceBundleDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ResourceBundle.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: DependsDescriptor.java 40305 2013-04-02 10:17:01Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class DependsDescriptor.
+ * 
+ * @version $Revision: 40305 $ $Date: 2013-04-02 12:17:01 +0200 (mar, 02 abr 2013) $
+ */
+public class DependsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public DependsDescriptor() {
+        super();
+        xmlName = "depends";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _pluginName
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_pluginName", "plugin-name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Depends target = (Depends) object;
+                return target.getPluginName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Depends target = (Depends) object;
+                    target.setPluginName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _pluginName
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+
+        //-- _optional
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.class, "_optional", "optional", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Depends target = (Depends) object;
+                return Boolean.valueOf(target.getOptional());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Depends target = (Depends) object;
+                    target.setOptional( ((java.lang.Boolean) value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _optional
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        	BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+   
+        
+    } //-- com.iver.andami.plugins.config.generate.DependsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Depends.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundle.java	(revision 42196)
@@ -0,0 +1,157 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ResourceBundle.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ResourceBundle.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ResourceBundle implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ResourceBundle() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ResourceBundle()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ResourceBundle) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ResourceBundle.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundle.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Depends.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Depends.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Depends.java	(revision 42196)
@@ -0,0 +1,180 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Depends.java 40305 2013-04-02 10:17:01Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Depends.
+ * 
+ * @version $Revision: 40305 $ $Date: 2013-04-02 12:17:01 +0200 (mar, 02 abr 2013) $
+ */
+public class Depends implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _pluginName
+     */
+    private java.lang.String _pluginName;
+    private boolean _optional = false;
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Depends() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Depends()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'pluginName'.
+     * 
+     * @return the value of field 'pluginName'.
+     */
+    public java.lang.String getPluginName()
+    {
+        return this._pluginName;
+    } //-- java.lang.String getPluginName() 
+
+
+    /**
+     * Returns the value of field 'optional'.
+     * 
+     * @return the value of field 'optional'.
+     */
+    public boolean getOptional()
+    {
+        return this._optional;
+    } //-- boolean getOptional() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'pluginName'.
+     * 
+     * @param pluginName the value of field 'pluginName'.
+     */
+    public void setPluginName(java.lang.String pluginName)
+    {
+        this._pluginName = pluginName;
+    } //-- void setPluginName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'optional'.
+     * 
+     * @param optional the value of field 'optional'.
+     */
+    public void setOptional(boolean optional)
+    {
+        this._optional = optional;
+    } //-- void setOptional(boolean) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Depends) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Depends.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Depends.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PopupMenuDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class PopupMenuDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PopupMenuDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenuDescriptor() {
+        super();
+        xmlName = "popup-menu";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PopupMenu target = (PopupMenu) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PopupMenu target = (PopupMenu) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _menuList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Menu.class, "_menuList", "menu", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PopupMenu target = (PopupMenu) object;
+                return target.getMenu();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PopupMenu target = (PopupMenu) object;
+                    target.addMenu( (org.gvsig.andami.plugins.config.generate.Menu) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Menu();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _menuList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.PopupMenuDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.PopupMenu.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenu.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenu.java	(revision 42196)
@@ -0,0 +1,283 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PopupMenu.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class PopupMenu.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PopupMenu implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _menuList
+     */
+    private java.util.Vector _menuList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenu() {
+        super();
+        _menuList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addMenu
+     * 
+     * @param vMenu
+     */
+    public void addMenu(org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.addElement(vMenu);
+    } //-- void addMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method addMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void addMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.insertElementAt(vMenu, index);
+    } //-- void addMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method enumerateMenu
+     */
+    public java.util.Enumeration enumerateMenu()
+    {
+        return _menuList.elements();
+    } //-- java.util.Enumeration enumerateMenu() 
+
+    /**
+     * Method getMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu getMenu(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Menu getMenu(int) 
+
+    /**
+     * Method getMenu
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu[] getMenu()
+    {
+        int size = _menuList.size();
+        org.gvsig.andami.plugins.config.generate.Menu[] mArray = new org.gvsig.andami.plugins.config.generate.Menu[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Menu[] getMenu() 
+
+    /**
+     * Method getMenuCount
+     */
+    public int getMenuCount()
+    {
+        return _menuList.size();
+    } //-- int getMenuCount() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllMenu
+     */
+    public void removeAllMenu()
+    {
+        _menuList.removeAllElements();
+    } //-- void removeAllMenu() 
+
+    /**
+     * Method removeMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu removeMenu(int index)
+    {
+        java.lang.Object obj = _menuList.elementAt(index);
+        _menuList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Menu) obj;
+    } //-- com.iver.andami.plugins.config.generate.Menu removeMenu(int) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void setMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _menuList.setElementAt(vMenu, index);
+    } //-- void setMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param menuArray
+     */
+    public void setMenu(org.gvsig.andami.plugins.config.generate.Menu[] menuArray)
+    {
+        //-- copy array
+        _menuList.removeAllElements();
+        for (int i = 0; i < menuArray.length; i++) {
+            _menuList.addElement(menuArray[i]);
+        }
+    } //-- void setMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.PopupMenu) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.PopupMenu.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenu.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java	(revision 42196)
@@ -0,0 +1,267 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ComboButtonDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ComboButtonDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ComboButtonDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButtonDescriptor() {
+        super();
+        xmlName = "combo-button";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButton target = (ComboButton) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButton target = (ComboButton) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButton target = (ComboButton) object;
+                return target.getPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButton target = (ComboButton) object;
+                    target.setPosition( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _comboButtonElementList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboButtonElement.class, "_comboButtonElementList", "combo-button-element", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButton target = (ComboButton) object;
+                return target.getComboButtonElement();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButton target = (ComboButton) object;
+                    target.addComboButtonElement( (org.gvsig.andami.plugins.config.generate.ComboButtonElement) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboButtonElement();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboButtonElementList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ComboButton.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButton.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButton.java	(revision 42196)
@@ -0,0 +1,308 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ComboButton.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ComboButton.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ComboButton implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _position
+     */
+    private java.lang.Object _position;
+
+    /**
+     * Field _comboButtonElementList
+     */
+    private java.util.Vector _comboButtonElementList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButton() {
+        super();
+        _comboButtonElementList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.ComboButton()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addComboButtonElement
+     * 
+     * @param vComboButtonElement
+     */
+    public void addComboButtonElement(org.gvsig.andami.plugins.config.generate.ComboButtonElement vComboButtonElement)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonElementList.addElement(vComboButtonElement);
+    } //-- void addComboButtonElement(com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Method addComboButtonElement
+     * 
+     * @param index
+     * @param vComboButtonElement
+     */
+    public void addComboButtonElement(int index, org.gvsig.andami.plugins.config.generate.ComboButtonElement vComboButtonElement)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonElementList.insertElementAt(vComboButtonElement, index);
+    } //-- void addComboButtonElement(int, com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Method enumerateComboButtonElement
+     */
+    public java.util.Enumeration enumerateComboButtonElement()
+    {
+        return _comboButtonElementList.elements();
+    } //-- java.util.Enumeration enumerateComboButtonElement() 
+
+    /**
+     * Method getComboButtonElement
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButtonElement getComboButtonElement(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonElementList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboButtonElement) _comboButtonElementList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement getComboButtonElement(int) 
+
+    /**
+     * Method getComboButtonElement
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButtonElement[] getComboButtonElement()
+    {
+        int size = _comboButtonElementList.size();
+        org.gvsig.andami.plugins.config.generate.ComboButtonElement[] mArray = new org.gvsig.andami.plugins.config.generate.ComboButtonElement[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboButtonElement) _comboButtonElementList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement[] getComboButtonElement() 
+
+    /**
+     * Method getComboButtonElementCount
+     */
+    public int getComboButtonElementCount()
+    {
+        return _comboButtonElementList.size();
+    } //-- int getComboButtonElementCount() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public java.lang.Object getPosition()
+    {
+        return this._position;
+    } //-- java.lang.Object getPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllComboButtonElement
+     */
+    public void removeAllComboButtonElement()
+    {
+        _comboButtonElementList.removeAllElements();
+    } //-- void removeAllComboButtonElement() 
+
+    /**
+     * Method removeComboButtonElement
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButtonElement removeComboButtonElement(int index)
+    {
+        java.lang.Object obj = _comboButtonElementList.elementAt(index);
+        _comboButtonElementList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboButtonElement) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement removeComboButtonElement(int) 
+
+    /**
+     * Method setComboButtonElement
+     * 
+     * @param index
+     * @param vComboButtonElement
+     */
+    public void setComboButtonElement(int index, org.gvsig.andami.plugins.config.generate.ComboButtonElement vComboButtonElement)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonElementList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboButtonElementList.setElementAt(vComboButtonElement, index);
+    } //-- void setComboButtonElement(int, com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Method setComboButtonElement
+     * 
+     * @param comboButtonElementArray
+     */
+    public void setComboButtonElement(org.gvsig.andami.plugins.config.generate.ComboButtonElement[] comboButtonElementArray)
+    {
+        //-- copy array
+        _comboButtonElementList.removeAllElements();
+        for (int i = 0; i < comboButtonElementArray.length; i++) {
+            _comboButtonElementList.addElement(comboButtonElementArray[i]);
+        }
+    } //-- void setComboButtonElement(com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(java.lang.Object position)
+    {
+        this._position = position;
+    } //-- void setPosition(java.lang.Object) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ComboButton.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MyFieldValidator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MyFieldValidator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MyFieldValidator.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins.config.generate;
+
+import org.exolab.castor.xml.ValidationContext;
+import org.exolab.castor.xml.ValidationException;
+
+class MyFieldValidator extends org.exolab.castor.xml.FieldValidator {
+	public void validate(Object arg0, ValidationContext arg1)
+			throws ValidationException {
+		try {
+			super.validate(arg0, arg1);
+		} catch (ValidationException e) {
+			throw getException(e,arg0);
+		}
+	}
+	
+	public void validate(Object object) throws ValidationException {
+		try {
+			super.validate(object);
+   		} catch (ValidationException e) {
+			throw getException(e,object);
+		}
+	}
+	
+	private ValidationException getException(ValidationException ex, Object obj) {
+		if( obj == null ) {
+			return ex;
+		}
+		return new ValidationException( ex.getMessage() + ". " + obj.toString(), ex);
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MyFieldValidator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java	(revision 42196)
@@ -0,0 +1,578 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: SelectableToolDescriptor.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class SelectableToolDescriptor.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class SelectableToolDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SelectableToolDescriptor() {
+        super();
+        xmlName = "selectable-tool";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _isDefault
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_isDefault", "is-default", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                if(!target.hasIsDefault())
+                    return null;
+                return (target.getIsDefault() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteIsDefault();
+                        return;
+                    }
+                    target.setIsDefault( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _isDefault
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _last
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_last", "last", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                if(!target.hasLast())
+                    return null;
+                return (target.getLast() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteLast();
+                        return;
+                    }
+                    target.setLast( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _last
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+//        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+
+        //-- _dropdowngroup
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_dropdowngroup", "dropdowngroup", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getDropDownGroup();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setDropDownGroup((java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+//        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _dropdowngroup
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+
+//-- _tooltip
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_tooltip", "tooltip", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getTooltip();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setTooltip( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _tooltip
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _enableText
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_enableText", "enable-text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getEnableText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setEnableText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _enableText
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _group
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_group", "group", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getGroup();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setGroup( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _group
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Long.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Long(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Long)value).longValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            LongValidator typeValidator= new LongValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.SelectableToolDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.SelectableTool.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNamesDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNamesDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNamesDescriptor.java	(revision 42196)
@@ -0,0 +1,199 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: DependsDescriptor.java 40305 2013-04-02 10:17:01Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class DependsDescriptor.
+ * 
+ * @version $Revision: 40305 $ $Date: 2013-04-02 12:17:01 +0200 (mar, 02 abr 2013) $
+ */
+public class AlternativeNamesDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AlternativeNamesDescriptor() {
+        super();
+        xmlName = "alternativeNames";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _pluginName
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+            	AlternativeNames target = (AlternativeNames) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                	AlternativeNames target = (AlternativeNames) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _pluginName
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+
+   
+    } //-- com.iver.andami.plugins.config.generate.AlternativeNamesDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.AlternativeNames.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNamesDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableTool.java	(revision 42196)
@@ -0,0 +1,474 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: SelectableTool.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class SelectableTool.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class SelectableTool implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _isDefault
+     */
+    private boolean _isDefault;
+
+    /**
+     * keeps track of state for field: _isDefault
+     */
+    private boolean _has_isDefault;
+
+    /**
+     * Field _last
+     */
+    private boolean _last;
+
+    /**
+     * keeps track of state for field: _last
+     */
+    private boolean _has_last;
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+   /**
+     * Field _dropdowngroup
+     */
+    private java.lang.String _dropdowngroup;
+
+    /**
+     * Field _tooltip
+     */
+    private java.lang.String _tooltip;
+
+    /**
+     * Field _enableText
+     */
+    private java.lang.String _enableText;
+
+    /**
+     * Field _group
+     */
+    private java.lang.String _group = "unico";
+
+    /**
+     * Field _position
+     */
+    private long _position;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SelectableTool() {
+        super();
+        setGroup("unico");
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteIsDefault
+     */
+    public void deleteIsDefault()
+    {
+        this._has_isDefault= false;
+    } //-- void deleteIsDefault() 
+
+    /**
+     * Method deleteLast
+     */
+    public void deleteLast()
+    {
+        this._has_last= false;
+    } //-- void deleteLast() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'enableText'.
+     * 
+     * @return the value of field 'enableText'.
+     */
+    public java.lang.String getEnableText()
+    {
+        return this._enableText;
+    } //-- java.lang.String getEnableText() 
+
+    /**
+     * Returns the value of field 'group'.
+     * 
+     * @return the value of field 'group'.
+     */
+    public java.lang.String getGroup()
+    {
+        return this._group;
+    } //-- java.lang.String getGroup() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+        /**
+     * Returns the value of field 'dropdowngroup'.
+     * 
+     * @return the value of field 'dropdowngroup'.
+     */
+    public java.lang.String getDropDownGroup()
+    {
+        return this._dropdowngroup;
+    } //-- java.lang.String getDropDownGroup() 
+
+    /**
+     * Returns the value of field 'isDefault'.
+     * 
+     * @return the value of field 'isDefault'.
+     */
+    public boolean getIsDefault()
+    {
+        return this._isDefault;
+    } //-- boolean getIsDefault() 
+
+    /**
+     * Returns the value of field 'last'.
+     * 
+     * @return the value of field 'last'.
+     */
+    public boolean getLast()
+    {
+        return this._last;
+    } //-- boolean getLast() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public long getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'tooltip'.
+     * 
+     * @return the value of field 'tooltip'.
+     */
+    public java.lang.String getTooltip()
+    {
+        return this._tooltip;
+    } //-- java.lang.String getTooltip() 
+
+    /**
+     * Method hasIsDefault
+     */
+    public boolean hasIsDefault()
+    {
+        return this._has_isDefault;
+    } //-- boolean hasIsDefault() 
+
+    /**
+     * Method hasLast
+     */
+    public boolean hasLast()
+    {
+        return this._has_last;
+    } //-- boolean hasLast() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'enableText'.
+     * 
+     * @param enableText the value of field 'enableText'.
+     */
+    public void setEnableText(java.lang.String enableText)
+    {
+        this._enableText = enableText;
+    } //-- void setEnableText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'group'.
+     * 
+     * @param group the value of field 'group'.
+     */
+    public void setGroup(java.lang.String group)
+    {
+        this._group = group;
+    } //-- void setGroup(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+        /**
+     * Sets the value of field 'dropdowngroup'.
+     * 
+     * @param dropdowngroup the value of field 'dropdowngroup'.
+     */
+    public void setDropDownGroup(java.lang.String dropdowngroup)
+    {
+        this._dropdowngroup = dropdowngroup;
+    } //-- void setDropDownGroup(java.lang.String) 
+
+    /**
+     * Sets the value of field 'isDefault'.
+     * 
+     * @param isDefault the value of field 'isDefault'.
+     */
+    public void setIsDefault(boolean isDefault)
+    {
+        this._isDefault = isDefault;
+        this._has_isDefault = true;
+    } //-- void setIsDefault(boolean) 
+
+    /**
+     * Sets the value of field 'last'.
+     * 
+     * @param last the value of field 'last'.
+     */
+    public void setLast(boolean last)
+    {
+        this._last = last;
+        this._has_last = true;
+    } //-- void setLast(boolean) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(long position)
+    {
+        this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'tooltip'.
+     * 
+     * @param tooltip the value of field 'tooltip'.
+     */
+    public void setTooltip(java.lang.String tooltip)
+    {
+        this._tooltip = tooltip;
+    } //-- void setTooltip(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.SelectableTool) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.SelectableTool.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNames.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNames.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNames.java	(revision 42196)
@@ -0,0 +1,158 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Depends.java 40305 2013-04-02 10:17:01Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Depends.
+ * 
+ * @version $Revision: 40305 $ $Date: 2013-04-02 12:17:01 +0200 (mar, 02 abr 2013) $
+ */
+public class AlternativeNames implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _pluginName
+     */
+    private java.lang.String _name;
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AlternativeNames() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Depends()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'pluginName'.
+     * 
+     * @param pluginName the value of field 'pluginName'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.AlternativeNames) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.AlternativeNames.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNames.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java	(revision 42196)
@@ -0,0 +1,373 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: SkinExtensionTypeDescriptor.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class SkinExtensionTypeDescriptor.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class SkinExtensionTypeDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtensionTypeDescriptor() {
+        super();
+        xmlName = "skin-extension-type";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _className
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_className", "class-name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getClassName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.setClassName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _className
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _menuList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Menu.class, "_menuList", "menu", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getAction();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addMenu( (org.gvsig.andami.plugins.config.generate.Menu) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Menu();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _menuList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        
+        //-- _actionList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Action.class, "_actionList", "action", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getMenu();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addAction( (org.gvsig.andami.plugins.config.generate.Action) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Action();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        
+        
+        
+        //-- _toolBarList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ToolBar.class, "_toolBarList", "tool-bar", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getToolBar();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addToolBar( (org.gvsig.andami.plugins.config.generate.ToolBar) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ToolBar();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _toolBarList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboButtonList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboButton.class, "_comboButtonList", "combo-button", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getComboButton();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addComboButton( (org.gvsig.andami.plugins.config.generate.ComboButton) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboButton();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboButtonList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboScaleList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboScale.class, "_comboScaleList", "combo-scale", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getComboScale();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addComboScale( (org.gvsig.andami.plugins.config.generate.ComboScale) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboScale();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboScaleList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.SkinExtensionTypeDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.SkinExtensionType.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java	(revision 42196)
@@ -0,0 +1,534 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: MenuDescriptor.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.BooleanValidator;
+import org.exolab.castor.xml.validators.IntegerValidator;
+import org.exolab.castor.xml.validators.LongValidator;
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class MenuDescriptor.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class MenuDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public MenuDescriptor() {
+        super();
+        xmlName = "menu";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        
+        
+        //-- _key
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_key", "key", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getKey();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setKey( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _key
+        
+        
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        //desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        
+        
+        
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _tooltip
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_tooltip", "tooltip", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getTooltip();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setTooltip( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _tooltip
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _enableText
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_enableText", "enable-text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getEnableText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setEnableText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _enableText
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _mnemonic
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_mnemonic", "mnemonic", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getMnemonic();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setMnemonic( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _mnemonic
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+//        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new MyFieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Long.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Long(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Long)value).longValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            LongValidator typeValidator= new LongValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _is_separator
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_is_separator", "is_separator", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                if(!target.hasIs_separator())
+                    return null;
+                return (target.getIs_separator() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteIs_separator();
+                        return;
+                    }
+                    target.setIs_separator( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _is_separator
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.MenuDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Menu.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java	(revision 42196)
@@ -0,0 +1,740 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: SkinExtensionType.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class SkinExtensionType.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class SkinExtensionType implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _className
+     */
+    private java.lang.String _className;
+
+    /**
+     * Field _menuList
+     */
+    private java.util.Vector _menuList;
+
+    /**
+     * Field _actionList
+     */
+    private java.util.Vector _actionList;
+
+    /**
+     * Field _toolBarList
+     */
+    private java.util.Vector _toolBarList;
+
+    /**
+     * Field _comboButtonList
+     */
+    private java.util.Vector _comboButtonList;
+
+    /**
+     * Field _comboScaleList
+     */
+    private java.util.Vector _comboScaleList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtensionType() {
+        super();
+        _menuList = new Vector();
+        _actionList = new Vector();
+        _toolBarList = new Vector();
+        _comboButtonList = new Vector();
+        _comboScaleList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.SkinExtensionType()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addComboButton
+     * 
+     * @param vComboButton
+     */
+    public void addComboButton(org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.addElement(vComboButton);
+    } //-- void addComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void addComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.insertElementAt(vComboButton, index);
+    } //-- void addComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param vComboScale
+     */
+    public void addComboScale(org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.addElement(vComboScale);
+    } //-- void addComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void addComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.insertElementAt(vComboScale, index);
+    } //-- void addComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addMenu
+     * 
+     * @param vMenu
+     */
+    public void addMenu(org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.addElement(vMenu);
+    } //-- void addMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method addMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void addMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.insertElementAt(vMenu, index);
+    } //-- void addMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+
+    /**
+     * Method addAction
+     * 
+     * @param vAction
+     */
+    public void addAction(org.gvsig.andami.plugins.config.generate.Action vAction)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _actionList.addElement(vAction);
+    } //-- void addAction(com.iver.andami.plugins.config.generate.Action) 
+
+    /**
+     * Method addAction
+     * 
+     * @param index
+     * @param vAction
+     */
+    public void addAction(int index, org.gvsig.andami.plugins.config.generate.Action vAction)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _actionList.insertElementAt(vAction, index);
+    } //-- void addAction(int, com.iver.andami.plugins.config.generate.Action) 
+
+    /**
+     * Method addToolBar
+     * 
+     * @param vToolBar
+     */
+    public void addToolBar(org.gvsig.andami.plugins.config.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.addElement(vToolBar);
+    } //-- void addToolBar(com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method addToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void addToolBar(int index, org.gvsig.andami.plugins.config.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.insertElementAt(vToolBar, index);
+    } //-- void addToolBar(int, com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method enumerateComboButton
+     */
+    public java.util.Enumeration enumerateComboButton()
+    {
+        return _comboButtonList.elements();
+    } //-- java.util.Enumeration enumerateComboButton() 
+
+    /**
+     * Method enumerateComboScale
+     */
+    public java.util.Enumeration enumerateComboScale()
+    {
+        return _comboScaleList.elements();
+    } //-- java.util.Enumeration enumerateComboScale() 
+
+    /**
+     * Method enumerateMenu
+     */
+    public java.util.Enumeration enumerateMenu()
+    {
+        return _menuList.elements();
+    } //-- java.util.Enumeration enumerateMenu() 
+
+    /**
+     * Method enumerateAction
+     */
+    public java.util.Enumeration enumerateAction()
+    {
+        return _actionList.elements();
+    } //-- java.util.Enumeration enumerateAction() 
+
+    /**
+     * Method enumerateToolBar
+     */
+    public java.util.Enumeration enumerateToolBar()
+    {
+        return _toolBarList.elements();
+    } //-- java.util.Enumeration enumerateToolBar() 
+
+    /**
+     * Returns the value of field 'className'.
+     * 
+     * @return the value of field 'className'.
+     */
+    public java.lang.String getClassName()
+    {
+        return this._className;
+    } //-- java.lang.String getClassName() 
+
+    /**
+     * Method getComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton getComboButton(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboButton getComboButton(int) 
+
+    /**
+     * Method getComboButton
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton[] getComboButton()
+    {
+        int size = _comboButtonList.size();
+        org.gvsig.andami.plugins.config.generate.ComboButton[] mArray = new org.gvsig.andami.plugins.config.generate.ComboButton[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton[] getComboButton() 
+
+    /**
+     * Method getComboButtonCount
+     */
+    public int getComboButtonCount()
+    {
+        return _comboButtonList.size();
+    } //-- int getComboButtonCount() 
+
+    /**
+     * Method getComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale getComboScale(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboScale getComboScale(int) 
+
+    /**
+     * Method getComboScale
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale[] getComboScale()
+    {
+        int size = _comboScaleList.size();
+        org.gvsig.andami.plugins.config.generate.ComboScale[] mArray = new org.gvsig.andami.plugins.config.generate.ComboScale[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale[] getComboScale() 
+
+    /**
+     * Method getComboScaleCount
+     */
+    public int getComboScaleCount()
+    {
+        return _comboScaleList.size();
+    } //-- int getComboScaleCount() 
+
+    /**
+     * Method getMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu getMenu(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Menu getMenu(int) 
+
+    /**
+     * Method getMenu
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu[] getMenu()
+    {
+        int size = _menuList.size();
+        org.gvsig.andami.plugins.config.generate.Menu[] mArray = new org.gvsig.andami.plugins.config.generate.Menu[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Menu[] getMenu() 
+    
+
+    /**
+     * Method getMenuCount
+     */
+    public int getMenuCount()
+    {
+        return _menuList.size();
+    } //-- int getMenuCount() 
+
+    /**
+     * Method getAction
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Action getAction(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _actionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Action) _actionList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Action getAction(int) 
+
+    /**
+     * Method getAction
+     */
+    public org.gvsig.andami.plugins.config.generate.Action[] getAction()
+    {
+        int size = _actionList.size();
+        org.gvsig.andami.plugins.config.generate.Action[] mArray = new org.gvsig.andami.plugins.config.generate.Action[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Action) _actionList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Action[] getAction() 
+
+    /**
+     * Method getActionCount
+     */
+    public int getActionCount()
+    {
+        return _actionList.size();
+    } //-- int getActionCount() 
+
+    /**
+     * Method getToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ToolBar getToolBar(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ToolBar) _toolBarList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ToolBar getToolBar(int) 
+
+    /**
+     * Method getToolBar
+     */
+    public org.gvsig.andami.plugins.config.generate.ToolBar[] getToolBar()
+    {
+        int size = _toolBarList.size();
+        org.gvsig.andami.plugins.config.generate.ToolBar[] mArray = new org.gvsig.andami.plugins.config.generate.ToolBar[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ToolBar) _toolBarList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ToolBar[] getToolBar() 
+
+    /**
+     * Method getToolBarCount
+     */
+    public int getToolBarCount()
+    {
+        return _toolBarList.size();
+    } //-- int getToolBarCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllComboButton
+     */
+    public void removeAllComboButton()
+    {
+        _comboButtonList.removeAllElements();
+    } //-- void removeAllComboButton() 
+
+    /**
+     * Method removeAllComboScale
+     */
+    public void removeAllComboScale()
+    {
+        _comboScaleList.removeAllElements();
+    } //-- void removeAllComboScale() 
+
+    /**
+     * Method removeAllMenu
+     */
+    public void removeAllMenu()
+    {
+        _menuList.removeAllElements();
+    } //-- void removeAllMenu() 
+
+
+    /**
+     * Method removeAllAction
+     */
+    public void removeAllAction()
+    {
+        _actionList.removeAllElements();
+    } //-- void removeAllAction() 
+
+    /**
+     * Method removeAllToolBar
+     */
+    public void removeAllToolBar()
+    {
+        _toolBarList.removeAllElements();
+    } //-- void removeAllToolBar() 
+
+    /**
+     * Method removeComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton removeComboButton(int index)
+    {
+        java.lang.Object obj = _comboButtonList.elementAt(index);
+        _comboButtonList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton removeComboButton(int) 
+
+    /**
+     * Method removeComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale removeComboScale(int index)
+    {
+        java.lang.Object obj = _comboScaleList.elementAt(index);
+        _comboScaleList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale removeComboScale(int) 
+
+    /**
+     * Method removeMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu removeMenu(int index)
+    {
+        java.lang.Object obj = _menuList.elementAt(index);
+        _menuList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Menu) obj;
+    } //-- com.iver.andami.plugins.config.generate.Menu removeMenu(int) 
+
+    /**
+     * Method removeToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ToolBar removeToolBar(int index)
+    {
+        java.lang.Object obj = _toolBarList.elementAt(index);
+        _toolBarList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ToolBar) obj;
+    } //-- com.iver.andami.plugins.config.generate.ToolBar removeToolBar(int) 
+
+    /**
+     * Sets the value of field 'className'.
+     * 
+     * @param className the value of field 'className'.
+     */
+    public void setClassName(java.lang.String className)
+    {
+        this._className = className;
+    } //-- void setClassName(java.lang.String) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void setComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboButtonList.setElementAt(vComboButton, index);
+    } //-- void setComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param comboButtonArray
+     */
+    public void setComboButton(org.gvsig.andami.plugins.config.generate.ComboButton[] comboButtonArray)
+    {
+        //-- copy array
+        _comboButtonList.removeAllElements();
+        for (int i = 0; i < comboButtonArray.length; i++) {
+            _comboButtonList.addElement(comboButtonArray[i]);
+        }
+    } //-- void setComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void setComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboScaleList.setElementAt(vComboScale, index);
+    } //-- void setComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param comboScaleArray
+     */
+    public void setComboScale(org.gvsig.andami.plugins.config.generate.ComboScale[] comboScaleArray)
+    {
+        //-- copy array
+        _comboScaleList.removeAllElements();
+        for (int i = 0; i < comboScaleArray.length; i++) {
+            _comboScaleList.addElement(comboScaleArray[i]);
+        }
+    } //-- void setComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void setMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _menuList.setElementAt(vMenu, index);
+    } //-- void setMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param menuArray
+     */
+    public void setMenu(org.gvsig.andami.plugins.config.generate.Menu[] menuArray)
+    {
+        //-- copy array
+        _menuList.removeAllElements();
+        for (int i = 0; i < menuArray.length; i++) {
+            _menuList.addElement(menuArray[i]);
+        }
+    } //-- void setMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void setToolBar(int index, org.gvsig.andami.plugins.config.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _toolBarList.setElementAt(vToolBar, index);
+    } //-- void setToolBar(int, com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param toolBarArray
+     */
+    public void setToolBar(org.gvsig.andami.plugins.config.generate.ToolBar[] toolBarArray)
+    {
+        //-- copy array
+        _toolBarList.removeAllElements();
+        for (int i = 0; i < toolBarArray.length; i++) {
+            _toolBarList.addElement(toolBarArray[i]);
+        }
+    } //-- void setToolBar(com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.SkinExtensionType) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.SkinExtensionType.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Menu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Menu.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Menu.java	(revision 42196)
@@ -0,0 +1,437 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Menu.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Menu.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class Menu implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+    
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _key
+     */
+    private java.lang.String _key;
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _tooltip
+     */
+    private java.lang.String _tooltip;
+
+    /**
+     * Field _enableText
+     */
+    private java.lang.String _enableText;
+
+    /**
+     * Field _mnemonic
+     */
+    private java.lang.String _mnemonic;
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _position
+     */
+    private long _position;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+    /**
+     * Field _is_separator
+     */
+    private boolean _is_separator;
+
+    /**
+     * keeps track of state for field: _is_separator
+     */
+    private boolean _has_is_separator;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Menu() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Menu()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteIs_separator
+     */
+    public void deleteIs_separator()
+    {
+        this._has_is_separator= false;
+    } //-- void deleteIs_separator() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'enableText'.
+     * 
+     * @return the value of field 'enableText'.
+     */
+    public java.lang.String getEnableText()
+    {
+        return this._enableText;
+    } //-- java.lang.String getEnableText() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Returns the value of field 'is_separator'.
+     * 
+     * @return the value of field 'is_separator'.
+     */
+    public boolean getIs_separator()
+    {
+        return this._is_separator;
+    } //-- boolean getIs_separator() 
+
+    /**
+     * Returns the value of field 'key'.
+     * 
+     * @return the value of field 'key'.
+     */
+    public java.lang.String getKey()
+    {
+        return this._key;
+    } //-- java.lang.String getKey() 
+
+    /**
+     * Returns the value of field 'mnemonic'.
+     * 
+     * @return the value of field 'mnemonic'.
+     */
+    public java.lang.String getMnemonic()
+    {
+        return this._mnemonic;
+    } //-- java.lang.String getMnemonic() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public long getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'tooltip'.
+     * 
+     * @return the value of field 'tooltip'.
+     */
+    public java.lang.String getTooltip()
+    {
+        return this._tooltip;
+    } //-- java.lang.String getTooltip() 
+
+    /**
+     * Method hasIs_separator
+     */
+    public boolean hasIs_separator()
+    {
+        return this._has_is_separator;
+    } //-- boolean hasIs_separator() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'enableText'.
+     * 
+     * @param enableText the value of field 'enableText'.
+     */
+    public void setEnableText(java.lang.String enableText)
+    {
+        this._enableText = enableText;
+    } //-- void setEnableText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+    /**
+     * Sets the value of field 'is_separator'.
+     * 
+     * @param is_separator the value of field 'is_separator'.
+     */
+    public void setIs_separator(boolean is_separator)
+    {
+        this._is_separator = is_separator;
+        this._has_is_separator = true;
+    } //-- void setIs_separator(boolean) 
+
+    /**
+     * Sets the value of field 'key'.
+     * 
+     * @param key the value of field 'key'.
+     */
+    public void setKey(java.lang.String key)
+    {
+        this._key = key;
+    } //-- void setKey(java.lang.String) 
+
+    /**
+     * Sets the value of field 'mnemonic'.
+     * 
+     * @param mnemonic the value of field 'mnemonic'.
+     */
+    public void setMnemonic(java.lang.String mnemonic)
+    {
+        this._mnemonic = mnemonic;
+    } //-- void setMnemonic(java.lang.String) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(long position)
+    {
+   		this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'tooltip'.
+     * 
+     * @param tooltip the value of field 'tooltip'.
+     */
+    public void setTooltip(java.lang.String tooltip)
+    {
+        this._tooltip = tooltip;
+    } //-- void setTooltip(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Menu) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Menu.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer();
+    	buffer.append("Menu {");
+    	buffer.append("name='").append(this._name).append("', ");
+    	buffer.append("text='").append(this._text).append("', ");
+    	buffer.append("tooltip='").append(this._tooltip).append("', ");
+    	buffer.append("actionCommand='").append(this._actionCommand).append("', ");
+    	buffer.append("position='").append(this._position).append("', ");
+    	buffer.append("icon='").append(this._icon).append("', ");
+    	buffer.append("enableText='").append(this._enableText).append("' }");
+    	return buffer.toString();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Menu.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ComboButtonElementDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ComboButtonElementDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ComboButtonElementDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButtonElementDescriptor() {
+        super();
+        xmlName = "combo-button-element";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButtonElement target = (ComboButtonElement) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButtonElement target = (ComboButtonElement) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButtonElement target = (ComboButtonElement) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButtonElement target = (ComboButtonElement) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElementDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ComboButtonElement.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java	(revision 42196)
@@ -0,0 +1,182 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ComboButtonElement.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ComboButtonElement.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ComboButtonElement implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButtonElement() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ComboButtonElement) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ComboButtonElement.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java	(revision 42196)
@@ -0,0 +1,370 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ComboScaleDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ComboScaleDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ComboScaleDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboScaleDescriptor() {
+        super();
+        xmlName = "combo-scale";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _label
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_label", "label", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getLabel();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setLabel( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _label
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _elements
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_elements", "elements", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getElements();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setElements( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _elements
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _value
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_value", "value", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getValue();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setValue( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _value
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setPosition( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ComboScaleDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ComboScale.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScale.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScale.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScale.java	(revision 42196)
@@ -0,0 +1,282 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ComboScale.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ComboScale.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ComboScale implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _label
+     */
+    private java.lang.String _label;
+
+    /**
+     * Field _elements
+     */
+    private java.lang.Object _elements;
+
+    /**
+     * Field _value
+     */
+    private java.lang.Object _value;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _position
+     */
+    private java.lang.Object _position;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboScale() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ComboScale()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'elements'.
+     * 
+     * @return the value of field 'elements'.
+     */
+    public java.lang.Object getElements()
+    {
+        return this._elements;
+    } //-- java.lang.Object getElements() 
+
+    /**
+     * Returns the value of field 'label'.
+     * 
+     * @return the value of field 'label'.
+     */
+    public java.lang.String getLabel()
+    {
+        return this._label;
+    } //-- java.lang.String getLabel() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public java.lang.Object getPosition()
+    {
+        return this._position;
+    } //-- java.lang.Object getPosition() 
+
+    /**
+     * Returns the value of field 'value'.
+     * 
+     * @return the value of field 'value'.
+     */
+    public java.lang.Object getValue()
+    {
+        return this._value;
+    } //-- java.lang.Object getValue() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'elements'.
+     * 
+     * @param elements the value of field 'elements'.
+     */
+    public void setElements(java.lang.Object elements)
+    {
+        this._elements = elements;
+    } //-- void setElements(java.lang.Object) 
+
+    /**
+     * Sets the value of field 'label'.
+     * 
+     * @param label the value of field 'label'.
+     */
+    public void setLabel(java.lang.String label)
+    {
+        this._label = label;
+    } //-- void setLabel(java.lang.String) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(java.lang.Object position)
+    {
+        this._position = position;
+    } //-- void setPosition(java.lang.Object) 
+
+    /**
+     * Sets the value of field 'value'.
+     * 
+     * @param value the value of field 'value'.
+     */
+    public void setValue(java.lang.Object value)
+    {
+        this._value = value;
+    } //-- void setValue(java.lang.Object) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ComboScale.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScale.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java	(revision 42196)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PopupMenusDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class PopupMenusDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PopupMenusDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenusDescriptor() {
+        super();
+        xmlName = "popup-menus";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _popupMenuList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.PopupMenu.class, "_popupMenuList", "popup-menu", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PopupMenus target = (PopupMenus) object;
+                return target.getPopupMenu();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PopupMenus target = (PopupMenus) object;
+                    target.addPopupMenu( (org.gvsig.andami.plugins.config.generate.PopupMenu) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.PopupMenu();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _popupMenuList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.PopupMenusDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.PopupMenus.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java	(revision 42196)
@@ -0,0 +1,502 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ActionToolDescriptor.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ActionToolDescriptor.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class ActionToolDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ActionToolDescriptor() {
+        super();
+        xmlName = "action-tool";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+//        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        
+        
+        //-- _dropdowngroup
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_dropdowngroup", "dropdowngroup", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getDropDownGroup();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setDropDownGroup((java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+//        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _dropdowngroup
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        
+        
+        //-- _last
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_last", "last", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                if(!target.hasLast())
+                    return null;
+                return (target.getLast() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteLast();
+                        return;
+                    }
+                    target.setLast( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _last
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _tooltip
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_tooltip", "tooltip", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getTooltip();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setTooltip( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _tooltip
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _enableText
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_enableText", "enable-text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getEnableText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setEnableText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _enableText
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Long.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Long(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Long)value).longValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        	LongValidator typeValidator= new LongValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ActionToolDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ActionTool.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenus.java	(revision 42196)
@@ -0,0 +1,258 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PopupMenus.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class PopupMenus.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PopupMenus implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _popupMenuList
+     */
+    private java.util.Vector _popupMenuList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenus() {
+        super();
+        _popupMenuList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.PopupMenus()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addPopupMenu
+     * 
+     * @param vPopupMenu
+     */
+    public void addPopupMenu(org.gvsig.andami.plugins.config.generate.PopupMenu vPopupMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _popupMenuList.addElement(vPopupMenu);
+    } //-- void addPopupMenu(com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method addPopupMenu
+     * 
+     * @param index
+     * @param vPopupMenu
+     */
+    public void addPopupMenu(int index, org.gvsig.andami.plugins.config.generate.PopupMenu vPopupMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _popupMenuList.insertElementAt(vPopupMenu, index);
+    } //-- void addPopupMenu(int, com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method enumeratePopupMenu
+     */
+    public java.util.Enumeration enumeratePopupMenu()
+    {
+        return _popupMenuList.elements();
+    } //-- java.util.Enumeration enumeratePopupMenu() 
+
+    /**
+     * Method getPopupMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenu getPopupMenu(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _popupMenuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.PopupMenu) _popupMenuList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu getPopupMenu(int) 
+
+    /**
+     * Method getPopupMenu
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenu[] getPopupMenu()
+    {
+        int size = _popupMenuList.size();
+        org.gvsig.andami.plugins.config.generate.PopupMenu[] mArray = new org.gvsig.andami.plugins.config.generate.PopupMenu[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.PopupMenu) _popupMenuList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu[] getPopupMenu() 
+
+    /**
+     * Method getPopupMenuCount
+     */
+    public int getPopupMenuCount()
+    {
+        return _popupMenuList.size();
+    } //-- int getPopupMenuCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllPopupMenu
+     */
+    public void removeAllPopupMenu()
+    {
+        _popupMenuList.removeAllElements();
+    } //-- void removeAllPopupMenu() 
+
+    /**
+     * Method removePopupMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenu removePopupMenu(int index)
+    {
+        java.lang.Object obj = _popupMenuList.elementAt(index);
+        _popupMenuList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.PopupMenu) obj;
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu removePopupMenu(int) 
+
+    /**
+     * Method setPopupMenu
+     * 
+     * @param index
+     * @param vPopupMenu
+     */
+    public void setPopupMenu(int index, org.gvsig.andami.plugins.config.generate.PopupMenu vPopupMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _popupMenuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _popupMenuList.setElementAt(vPopupMenu, index);
+    } //-- void setPopupMenu(int, com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method setPopupMenu
+     * 
+     * @param popupMenuArray
+     */
+    public void setPopupMenu(org.gvsig.andami.plugins.config.generate.PopupMenu[] popupMenuArray)
+    {
+        //-- copy array
+        _popupMenuList.removeAllElements();
+        for (int i = 0; i < popupMenuArray.length; i++) {
+            _popupMenuList.addElement(popupMenuArray[i]);
+        }
+    } //-- void setPopupMenu(com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.PopupMenus) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.PopupMenus.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java	(revision 42196)
@@ -0,0 +1,156 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ExtensionDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ExtensionDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ExtensionDescriptor extends ExtensionTypeDescriptor {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionDescriptor() {
+        super();
+        setExtendsWithoutFlatten(new ExtensionTypeDescriptor());
+        xmlName = "extension";
+    } //-- com.iver.andami.plugins.config.generate.ExtensionDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return super.getExtends();
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        if (identity == null)
+            return super.getIdentity();
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Extension.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionTool.java	(revision 42196)
@@ -0,0 +1,417 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ActionTool.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ActionTool.
+ * 
+ * @version $Revision: 38564 $ $Date: 2012-07-16 13:19:13 +0200 (lun, 16 jul 2012) $
+ */
+public class ActionTool implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _last
+     */
+    private boolean _last;
+
+    /**
+     * keeps track of state for field: _last
+     */
+    private boolean _has_last;
+
+    /**
+     * Field _tooltip
+     */
+    private java.lang.String _tooltip;
+
+    /**
+     * Field _enableText
+     */
+    private java.lang.String _enableText;
+
+    /**
+     * Field _position
+     */
+    private long _position;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+
+    /**
+     * Field _dropdowngroup
+     */
+    private java.lang.String _dropdowngroup;
+
+    //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ActionTool() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ActionTool()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteLast
+     */
+    public void deleteLast()
+    {
+        this._has_last= false;
+    } //-- void deleteLast() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'enableText'.
+     * 
+     * @return the value of field 'enableText'.
+     */
+    public java.lang.String getEnableText()
+    {
+        return this._enableText;
+    } //-- java.lang.String getEnableText() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Returns the value of field 'dropdowngroup'.
+     * 
+     * @return the value of field 'dropdowngroup'.
+     */
+    public java.lang.String getDropDownGroup()
+    {
+        return this._dropdowngroup;
+    } //-- java.lang.String getDropDownGroup() 
+
+
+    /**
+     * Returns the value of field 'last'.
+     * 
+     * @return the value of field 'last'.
+     */
+    public boolean getLast()
+    {
+        return this._last;
+    } //-- boolean getLast() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public long getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'tooltip'.
+     * 
+     * @return the value of field 'tooltip'.
+     */
+    public java.lang.String getTooltip()
+    {
+        return this._tooltip;
+    } //-- java.lang.String getTooltip() 
+
+    /**
+     * Method hasLast
+     */
+    public boolean hasLast()
+    {
+        return this._has_last;
+    } //-- boolean hasLast() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'enableText'.
+     * 
+     * @param enableText the value of field 'enableText'.
+     */
+    public void setEnableText(java.lang.String enableText)
+    {
+        this._enableText = enableText;
+    } //-- void setEnableText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+    
+    /**
+     * Sets the value of field 'dropdowngroup'.
+     * 
+     * @param dropdowngroup the value of field 'dropdowngroup'.
+     */
+    public void setDropDownGroup(java.lang.String dropdowngroup)
+    {
+        this._dropdowngroup = dropdowngroup;
+    } //-- void setDropDownGroup(java.lang.String) 
+
+    /**
+     * Sets the value of field 'last'.
+     * 
+     * @param last the value of field 'last'.
+     */
+    public void setLast(boolean last)
+    {
+        this._last = last;
+        this._has_last = true;
+    } //-- void setLast(boolean) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(long position)
+    {
+        this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'tooltip'.
+     * 
+     * @param tooltip the value of field 'tooltip'.
+     */
+    public void setTooltip(java.lang.String tooltip)
+    {
+        this._tooltip = tooltip;
+    } //-- void setTooltip(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ActionTool) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ActionTool.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer();
+    	buffer.append("ActionTool {");
+    	buffer.append("name='").append(this._name).append("', ");
+    	buffer.append("text='").append("', text='").append("', ");
+    	buffer.append("tooltip='").append(this._tooltip).append("', ");
+    	buffer.append("actionCommand='").append(this._actionCommand).append("', ");
+    	buffer.append("position='").append(this._position).append("', ");
+    	buffer.append("icon='").append(this._icon).append("', ");
+    	buffer.append("enableText='").append(this._enableText).append("', ");
+    	buffer.append("dropdowngroup='").append(this._dropdowngroup).append("', ");
+    	buffer.append("last='").append(this._last).append("' }");
+		return buffer.toString();
+	}
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java	(revision 42196)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: LibrariesDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class LibrariesDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class LibrariesDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LibrariesDescriptor() {
+        super();
+        xmlName = "libraries";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _libraryDir
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_libraryDir", "library-dir", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Libraries target = (Libraries) object;
+                return target.getLibraryDir();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Libraries target = (Libraries) object;
+                    target.setLibraryDir( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _libraryDir
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.LibrariesDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Libraries.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extension.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Extension.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Extension.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Extension extends ExtensionType 
+implements java.io.Serializable
+{
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Extension() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Extension()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Extension) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Extension.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionDescriptor.java	(revision 42196)
@@ -0,0 +1,431 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ActionDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.LongValidator;
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class ActionDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ActionDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ActionDescriptor() {
+        super();
+        xmlName = "action";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Action target = (Action) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                	Action target = (Action) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        
+        
+        //-- _accelerator
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_accelerator", "accelerator", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Action target = (Action) object;
+                return target.getAccelerator();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                	Action target = (Action) object;
+                    target.setAccelerator((java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _accelerator
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        
+        
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+            	Action target = (Action) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                	Action target = (Action) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        
+        
+        
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Action target = (Action) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Action target = (Action) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _tooltip
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_tooltip", "tooltip", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Action target = (Action) object;
+                return target.getTooltip();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Action target = (Action) object;
+                    target.setTooltip( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _tooltip
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+
+        //-- _label
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_label", "label", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Action target = (Action) object;
+                return target.getLabel();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Action target = (Action) object;
+                    target.setLabel( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _label
+        fieldValidator = new MyFieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Long.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Action target = (Action) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Long(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Action target = (Action) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Long)value).longValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new MyFieldValidator();
+        { //-- local scope
+            LongValidator typeValidator= new LongValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ActionDescriptor()
+
+    
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Action.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Libraries.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Libraries.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Libraries.java	(revision 42196)
@@ -0,0 +1,157 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Libraries.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Libraries.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Libraries implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _libraryDir
+     */
+    private java.lang.String _libraryDir;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Libraries() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Libraries()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'libraryDir'.
+     * 
+     * @return the value of field 'libraryDir'.
+     */
+    public java.lang.String getLibraryDir()
+    {
+        return this._libraryDir;
+    } //-- java.lang.String getLibraryDir() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'libraryDir'.
+     * 
+     * @param libraryDir the value of field 'libraryDir'.
+     */
+    public void setLibraryDir(java.lang.String libraryDir)
+    {
+        this._libraryDir = libraryDir;
+    } //-- void setLibraryDir(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Libraries) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Libraries.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Libraries.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Action.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Action.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Action.java	(revision 42196)
@@ -0,0 +1,337 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Menu.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Action.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Action implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+    
+    /**
+     * Field _accelerator
+     */
+    private java.lang.String _accelerator;
+    
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _tooltip
+     */
+    private java.lang.String _tooltip;
+
+    /**
+     * Field _label
+     */
+    private java.lang.String _label;
+
+    /**
+     * Field _position
+     */
+    private long _position;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Action() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Menu()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'accelerator'.
+     * 
+     * @return the value of field 'accelerator'.
+     */
+    public java.lang.String getAccelerator()
+    {
+        return this._accelerator;
+    } //-- java.lang.String getAccelerator() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public long getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Returns the value of field 'label'.
+     * 
+     * @return the value of field 'label'.
+     */
+    public java.lang.String getLabel()
+    {
+        return this._label;
+    } //-- java.lang.String getLabel() 
+
+    /**
+     * Returns the value of field 'tooltip'.
+     * 
+     * @return the value of field 'tooltip'.
+     */
+    public java.lang.String getTooltip()
+    {
+        return this._tooltip;
+    } //-- java.lang.String getTooltip() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'accelerator'.
+     * 
+     * @param accelerator the value of field 'accelerator'.
+     */
+    public void setAccelerator(java.lang.String accelerator)
+    {
+        this._accelerator = accelerator;
+    } //-- void setAccelerator(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(long position)
+    {
+    	if( position < 100000000 ) {
+    		this._position = position + 1000000000; 
+    	} else {
+    		this._position = position;
+    	}
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Sets the value of field 'label'.
+     * 
+     * @param text the value of field 'label'.
+     */
+    public void setLabel(java.lang.String label)
+    {
+        this._label = label;
+    } //-- void setLabel(java.lang.String) 
+
+    /**
+     * Sets the value of field 'tooltip'.
+     * 
+     * @param tooltip the value of field 'tooltip'.
+     */
+    public void setTooltip(java.lang.String tooltip)
+    {
+        this._tooltip = tooltip;
+    } //-- void setTooltip(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Action) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Action.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+    
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer();
+    	buffer.append("Action {");
+    	buffer.append("name='").append(this._name).append("', ");
+    	buffer.append("label='").append(this._label).append("', ");
+    	buffer.append("tooltip='").append(this._tooltip).append("', ");
+    	buffer.append("actionCommand='").append(this._actionCommand).append("', ");
+    	buffer.append("position='").append(this._position).append("', ");
+    	buffer.append("icon='").append(this._icon).append("', ");
+    	buffer.append("accelerator='").append(this._accelerator).append("' }");
+    	return buffer.toString();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Action.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java	(revision 42196)
@@ -0,0 +1,474 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PluginConfigDescriptor.java 40403 2013-06-13 06:24:04Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class PluginConfigDescriptor.
+ * 
+ * @version $Revision: 40403 $ $Date: 2013-06-13 08:24:04 +0200 (jue, 13 jun 2013) $
+ */
+public class PluginConfigDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginConfigDescriptor() {
+        super();
+        xmlName = "plugin-config";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _updateUrl
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_updateUrl", "update-url", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getUpdateUrl();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setUpdateUrl( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _updateUrl
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Icon.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setIcon( (org.gvsig.andami.plugins.config.generate.Icon) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Icon();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        
+        
+        
+        //-- _dependsList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Depends.class, "_dependsList", "depends", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getDepends();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.addDepends( (org.gvsig.andami.plugins.config.generate.Depends) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Depends();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _dependsList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+
+        //-- _alternativeNamesList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.AlternativeNames.class, "alternativeNames", "alternativeName", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getAlternativeNames();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.addAlternativeNames( (org.gvsig.andami.plugins.config.generate.AlternativeNames) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.AlternativeNames();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _alternativeNamesList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+
+        desc.setValidator(fieldValidator);
+        //-- _resourceBundle
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ResourceBundle.class, "_resourceBundle", "resourceBundle", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getResourceBundle();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setResourceBundle( (org.gvsig.andami.plugins.config.generate.ResourceBundle) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ResourceBundle();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _resourceBundle
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _labelSetList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.LabelSet.class, "_labelSetList", "label-set", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getLabelSet();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.addLabelSet( (org.gvsig.andami.plugins.config.generate.LabelSet) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.LabelSet();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _labelSetList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _libraries
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Libraries.class, "_libraries", "libraries", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getLibraries();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setLibraries( (org.gvsig.andami.plugins.config.generate.Libraries) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Libraries();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _libraries
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _popupMenus
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.PopupMenus.class, "_popupMenus", "popup-menus", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getPopupMenus();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setPopupMenus( (org.gvsig.andami.plugins.config.generate.PopupMenus) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.PopupMenus();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _popupMenus
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _extensions
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Extensions.class, "_extensions", "extensions", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getExtensions();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setExtensions( (org.gvsig.andami.plugins.config.generate.Extensions) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Extensions();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _extensions
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.PluginConfigDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.PluginConfig.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfig.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfig.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfig.java	(revision 42196)
@@ -0,0 +1,680 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PluginConfig.java 40403 2013-06-13 06:24:04Z jjdelcerro $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.File;
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class PluginConfig.
+ * 
+ * @version $Revision: 40403 $ $Date: 2013-06-13 08:24:04 +0200 (jue, 13 jun 2013) $
+ */
+public class PluginConfig implements java.io.Serializable {
+
+	private static final Logger logger = LoggerFactory.getLogger(PluginConfig.class);
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _updateUrl
+     */
+    private java.lang.String _updateUrl;
+
+    /**
+     * Field _icon
+     */
+    private org.gvsig.andami.plugins.config.generate.Icon _icon;
+
+    /**
+     * Field _dependsList
+     */
+    private java.util.Vector _dependsList;
+
+    /**
+     * Field _alternativeNameList
+     */
+    private java.util.Vector _alternativeNamesList;
+
+    /**
+     * Field _resourceBundle
+     */
+    private org.gvsig.andami.plugins.config.generate.ResourceBundle _resourceBundle;
+
+    /**
+     * Field _labelSetList
+     */
+    private java.util.Vector _labelSetList;
+
+    /**
+     * Field _libraries
+     */
+    private org.gvsig.andami.plugins.config.generate.Libraries _libraries;
+
+    /**
+     * Field _popupMenus
+     */
+    private org.gvsig.andami.plugins.config.generate.PopupMenus _popupMenus;
+
+    /**
+     * Field _extensions
+     */
+    private org.gvsig.andami.plugins.config.generate.Extensions _extensions;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginConfig() {
+        super();
+        _dependsList = new Vector();
+        _alternativeNamesList = new Vector();
+        _labelSetList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.PluginConfig()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addDepends
+     * 
+     * @param vDepends
+     */
+    public void addDepends(org.gvsig.andami.plugins.config.generate.Depends vDepends)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _dependsList.addElement(vDepends);
+    	if( "org.gvsig.app".equals(vDepends.getPluginName())  ) {
+    		logger.info("Deprecated dependency 'org.gvsig.app' add optional depdency with 'org.gvsig.shp.app.mainplugin' to ensure compatibility with gvSIG 2.0.");
+    		org.gvsig.andami.plugins.config.generate.Depends dep2 = new org.gvsig.andami.plugins.config.generate.Depends();
+    		dep2.setOptional(true);
+    		dep2.setPluginName("org.gvsig.shp.app.mainplugin");
+            _dependsList.addElement(dep2);
+    	}
+    } //-- void addDepends(com.iver.andami.plugins.config.generate.Depends) 
+
+    /**
+     * Method addDepends
+     * 
+     * @param index
+     * @param vDepends
+     */
+    public void addDepends(int index, org.gvsig.andami.plugins.config.generate.Depends vDepends)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _dependsList.insertElementAt(vDepends, index);
+    } //-- void addDepends(int, com.iver.andami.plugins.config.generate.Depends) 
+
+    /**
+     * Method addAlternativeName
+     * 
+     * @param vAlternativeName
+     */
+    public void addAlternativeNames(org.gvsig.andami.plugins.config.generate.AlternativeNames vAlternativeName)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _alternativeNamesList.addElement(vAlternativeName);
+    } //-- void addAlternativeName(com.iver.andami.plugins.config.generate.AlternativeName) 
+
+    /**
+     * Method addAlternativeName
+     * 
+     * @param index
+     * @param vAlternativeName
+     */
+    public void addAlternativeNames(int index, org.gvsig.andami.plugins.config.generate.AlternativeNames vAlternativeName)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _alternativeNamesList.insertElementAt(vAlternativeName, index);
+    } //-- void addDepends(int, com.iver.andami.plugins.config.generate.Depends) 
+    
+    /**
+     * Method addLabelSet
+     * 
+     * @param vLabelSet
+     */
+    public void addLabelSet(org.gvsig.andami.plugins.config.generate.LabelSet vLabelSet)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelSetList.addElement(vLabelSet);
+    } //-- void addLabelSet(com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Method addLabelSet
+     * 
+     * @param index
+     * @param vLabelSet
+     */
+    public void addLabelSet(int index, org.gvsig.andami.plugins.config.generate.LabelSet vLabelSet)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelSetList.insertElementAt(vLabelSet, index);
+    } //-- void addLabelSet(int, com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Method enumerateDepends
+     */
+    public java.util.Enumeration enumerateDepends()
+    {
+        return _dependsList.elements();
+    } //-- java.util.Enumeration enumerateDepends() 
+
+    /**
+     * Method enumerateAlternativeNames
+     */
+    public java.util.Enumeration enumerateAlternativeNames()
+    {
+        return _alternativeNamesList.elements();
+    } //-- java.util.Enumeration enumerateAlternativeNames() 
+
+    /**
+     * Method enumerateLabelSet
+     */
+    public java.util.Enumeration enumerateLabelSet()
+    {
+        return _labelSetList.elements();
+    } //-- java.util.Enumeration enumerateLabelSet() 
+
+    /**
+     * Method getDepends
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Depends getDepends(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _dependsList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Depends) _dependsList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Depends getDepends(int) 
+
+    /**
+     * Method getDepends
+     */
+    public org.gvsig.andami.plugins.config.generate.Depends[] getDepends()
+    {
+        int size = _dependsList.size();
+        org.gvsig.andami.plugins.config.generate.Depends[] mArray = new org.gvsig.andami.plugins.config.generate.Depends[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Depends) _dependsList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Depends[] getDepends() 
+
+    /**
+     * Method getDependsCount
+     */
+    public int getDependsCount()
+    {
+        return _dependsList.size();
+    } //-- int getDependsCount() 
+
+    /**
+     * Method getAlternativeNames
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.AlternativeNames getAlternativeNames(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _alternativeNamesList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.AlternativeNames) _alternativeNamesList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Depends getAlternativeNames(int) 
+
+    /**
+     * Method getDepends
+     */
+    public org.gvsig.andami.plugins.config.generate.AlternativeNames[] getAlternativeNames()
+    {
+        int size = _alternativeNamesList.size();
+        org.gvsig.andami.plugins.config.generate.AlternativeNames[] mArray = new org.gvsig.andami.plugins.config.generate.AlternativeNames[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.AlternativeNames) _alternativeNamesList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.AlternativeNames[] getAlternativeNames() 
+
+    /**
+     * Method getAlternativeNamesCount
+     */
+    public int getAlternativeNamesCount()
+    {
+        return _alternativeNamesList.size();
+    } //-- int getAlternativeNamesCount() 
+
+    
+    /**s
+     * Returns the value of field 'extensions'.
+     * 
+     * @return the value of field 'extensions'.
+     */
+    public org.gvsig.andami.plugins.config.generate.Extensions getExtensions()
+    {
+        return this._extensions;
+    } //-- com.iver.andami.plugins.config.generate.Extensions getExtensions() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public org.gvsig.andami.plugins.config.generate.Icon getIcon()
+    {
+        return this._icon;
+    } //-- com.iver.andami.plugins.config.generate.Icon getIcon() 
+
+    /**
+     * Method getLabelSet
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.LabelSet getLabelSet(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelSetList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.LabelSet) _labelSetList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.LabelSet getLabelSet(int) 
+
+    /**
+     * Method getLabelSet
+     */
+    public org.gvsig.andami.plugins.config.generate.LabelSet[] getLabelSet()
+    {
+        int size = _labelSetList.size();
+        org.gvsig.andami.plugins.config.generate.LabelSet[] mArray = new org.gvsig.andami.plugins.config.generate.LabelSet[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.LabelSet) _labelSetList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.LabelSet[] getLabelSet() 
+
+    /**
+     * Method getLabelSetCount
+     */
+    public int getLabelSetCount()
+    {
+        return _labelSetList.size();
+    } //-- int getLabelSetCount() 
+
+    /**
+     * Returns the value of field 'libraries'.
+     * 
+     * @return the value of field 'libraries'.
+     */
+    public org.gvsig.andami.plugins.config.generate.Libraries getLibraries()
+    {
+        return this._libraries;
+    } //-- com.iver.andami.plugins.config.generate.Libraries getLibraries() 
+
+    /**
+     * Returns the value of field 'popupMenus'.
+     * 
+     * @return the value of field 'popupMenus'.
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenus getPopupMenus()
+    {
+        return this._popupMenus;
+    } //-- com.iver.andami.plugins.config.generate.PopupMenus getPopupMenus() 
+
+    /**
+     * Returns the value of field 'resourceBundle'.
+     * 
+     * @return the value of field 'resourceBundle'.
+     */
+    public org.gvsig.andami.plugins.config.generate.ResourceBundle getResourceBundle()
+    {
+        return this._resourceBundle;
+    } //-- com.iver.andami.plugins.config.generate.ResourceBundle getResourceBundle() 
+
+    /**
+     * Returns the value of field 'updateUrl'.
+     * 
+     * @return the value of field 'updateUrl'.
+     */
+    public java.lang.String getUpdateUrl()
+    {
+        return this._updateUrl;
+    } //-- java.lang.String getUpdateUrl() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllDepends
+     */
+    public void removeAllDepends()
+    {
+        _dependsList.removeAllElements();
+    } //-- void removeAllDepends() 
+
+    /**
+     * Method removeAllAlternativeNames
+     */
+    public void removeAllAlternativeNames()
+    {
+        _alternativeNamesList.removeAllElements();
+    } //-- void removeAllAlternativeNames() 
+
+    /**
+     * Method removeAllLabelSet
+     */
+    public void removeAllLabelSet()
+    {
+        _labelSetList.removeAllElements();
+    } //-- void removeAllLabelSet() 
+
+    /**
+     * Method removeDepends
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Depends removeDepends(int index)
+    {
+        java.lang.Object obj = _dependsList.elementAt(index);
+        _dependsList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Depends) obj;
+    } //-- com.iver.andami.plugins.config.generate.Depends removeDepends(int) 
+
+    /**
+     * Method removeAlternativeNames
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.AlternativeNames removeAlternativeNames(int index)
+    {
+        java.lang.Object obj = _alternativeNamesList.elementAt(index);
+        _alternativeNamesList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.AlternativeNames) obj;
+    } //-- com.iver.andami.plugins.config.generate.Depends removeAlternativeNames(int) 
+
+    /**
+     * Method removeLabelSet
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.LabelSet removeLabelSet(int index)
+    {
+        java.lang.Object obj = _labelSetList.elementAt(index);
+        _labelSetList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.LabelSet) obj;
+    } //-- com.iver.andami.plugins.config.generate.LabelSet removeLabelSet(int) 
+
+    /**
+     * Method setDepends
+     * 
+     * @param index
+     * @param vDepends
+     */
+    public void setDepends(int index, org.gvsig.andami.plugins.config.generate.Depends vDepends)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _dependsList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _dependsList.setElementAt(vDepends, index);
+    } //-- void setDepends(int, com.iver.andami.plugins.config.generate.Depends) 
+
+    /**
+     * Method setDepends
+     * 
+     * @param dependsArray
+     */
+    public void setDepends(org.gvsig.andami.plugins.config.generate.Depends[] dependsArray)
+    {
+        //-- copy array
+        _dependsList.removeAllElements();
+        for (int i = 0; i < dependsArray.length; i++) {
+            _dependsList.addElement(dependsArray[i]);
+        }
+    } //-- void setDepends(com.iver.andami.plugins.config.generate.Depends) 
+    
+    /**
+     * Method setAlternativeNames
+     * 
+     * @param index
+     * @param vAlternativeNames
+     */
+    public void setAlternativeNames(int index, org.gvsig.andami.plugins.config.generate.AlternativeNames vAlternativeNames)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _alternativeNamesList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _alternativeNamesList.setElementAt(vAlternativeNames, index);
+    } //-- void setAlternativeNames(int, com.iver.andami.plugins.config.generate.AlternativeNames) 
+
+    /**
+     * Method setAlternativeNames
+     * 
+     * @param AlternativeNamesArray
+     */
+    public void setAlternativeNames(org.gvsig.andami.plugins.config.generate.AlternativeNames[] alternativeNamesArray)
+    {
+        //-- copy array
+        _alternativeNamesList.removeAllElements();
+        for (int i = 0; i < alternativeNamesArray.length; i++) {
+            _alternativeNamesList.addElement(alternativeNamesArray[i]);
+        }
+    } //-- void setAlternativeNames(com.iver.andami.plugins.config.generate.AlternativeNames) 
+    
+    /**
+     * Sets the value of field 'extensions'.
+     * 
+     * @param extensions the value of field 'extensions'.
+     */
+    public void setExtensions(org.gvsig.andami.plugins.config.generate.Extensions extensions)
+    {
+        this._extensions = extensions;
+    } //-- void setExtensions(com.iver.andami.plugins.config.generate.Extensions) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(org.gvsig.andami.plugins.config.generate.Icon icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(com.iver.andami.plugins.config.generate.Icon) 
+
+    /**
+     * Method setLabelSet
+     * 
+     * @param index
+     * @param vLabelSet
+     */
+    public void setLabelSet(int index, org.gvsig.andami.plugins.config.generate.LabelSet vLabelSet)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelSetList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _labelSetList.setElementAt(vLabelSet, index);
+    } //-- void setLabelSet(int, com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Method setLabelSet
+     * 
+     * @param labelSetArray
+     */
+    public void setLabelSet(org.gvsig.andami.plugins.config.generate.LabelSet[] labelSetArray)
+    {
+        //-- copy array
+        _labelSetList.removeAllElements();
+        for (int i = 0; i < labelSetArray.length; i++) {
+            _labelSetList.addElement(labelSetArray[i]);
+        }
+    } //-- void setLabelSet(com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Sets the value of field 'libraries'.
+     * 
+     * @param libraries the value of field 'libraries'.
+     */
+    public void setLibraries(org.gvsig.andami.plugins.config.generate.Libraries libraries)
+    {
+        this._libraries = libraries;
+    } //-- void setLibraries(com.iver.andami.plugins.config.generate.Libraries) 
+
+    /**
+     * Sets the value of field 'popupMenus'.
+     * 
+     * @param popupMenus the value of field 'popupMenus'.
+     */
+    public void setPopupMenus(org.gvsig.andami.plugins.config.generate.PopupMenus popupMenus)
+    {
+        this._popupMenus = popupMenus;
+    } //-- void setPopupMenus(com.iver.andami.plugins.config.generate.PopupMenus) 
+
+    /**
+     * Sets the value of field 'resourceBundle'.
+     * 
+     * @param resourceBundle the value of field 'resourceBundle'.
+     */
+    public void setResourceBundle(org.gvsig.andami.plugins.config.generate.ResourceBundle resourceBundle)
+    {
+        this._resourceBundle = resourceBundle;
+    } //-- void setResourceBundle(com.iver.andami.plugins.config.generate.ResourceBundle) 
+
+    /**
+     * Sets the value of field 'updateUrl'.
+     * 
+     * @param updateUrl the value of field 'updateUrl'.
+     */
+    public void setUpdateUrl(java.lang.String updateUrl)
+    {
+        this._updateUrl = updateUrl;
+    } //-- void setUpdateUrl(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.PluginConfig) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.PluginConfig.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+    
+    private String pluginName = null;
+    private File pluginFolder = null;
+    
+    public String getPluginName() {
+        return this.pluginName;
+    }
+    
+    public void setPluginName(String name) {
+        this.pluginName = name;
+    }
+    
+    public File getPluginFolder() {
+        return this.pluginFolder;
+    }
+    
+    public void setPluginFolder(File folder) {
+        this.pluginFolder = folder;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfig.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/IconDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/IconDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/IconDescriptor.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: IconDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class IconDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class IconDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public IconDescriptor() {
+        super();
+        xmlName = "icon";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Icon target = (Icon) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Icon target = (Icon) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _src
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_src", "src", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Icon target = (Icon) object;
+                return target.getSrc();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Icon target = (Icon) object;
+                    target.setSrc( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _src
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.IconDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Icon.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/IconDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Icon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Icon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Icon.java	(revision 42196)
@@ -0,0 +1,182 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Icon.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Icon.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Icon implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _src
+     */
+    private java.lang.String _src;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Icon() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Icon()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'src'.
+     * 
+     * @return the value of field 'src'.
+     */
+    public java.lang.String getSrc()
+    {
+        return this._src;
+    } //-- java.lang.String getSrc() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'src'.
+     * 
+     * @param src the value of field 'src'.
+     */
+    public void setSrc(java.lang.String src)
+    {
+        this._src = src;
+    } //-- void setSrc(java.lang.String) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Icon) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Icon.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Icon.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java	(revision 42196)
@@ -0,0 +1,234 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: LabelSetDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class LabelSetDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class LabelSetDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LabelSetDescriptor() {
+        super();
+        xmlName = "label-set";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _className
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_className", "class-name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                LabelSet target = (LabelSet) object;
+                return target.getClassName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    LabelSet target = (LabelSet) object;
+                    target.setClassName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _className
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _labelList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Label.class, "_labelList", "label", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                LabelSet target = (LabelSet) object;
+                return target.getLabel();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    LabelSet target = (LabelSet) object;
+                    target.addLabel( (org.gvsig.andami.plugins.config.generate.Label) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Label();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _labelList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.LabelSetDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.LabelSet.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSet.java	(revision 42196)
@@ -0,0 +1,283 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: LabelSet.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class LabelSet.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class LabelSet implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _className
+     */
+    private java.lang.String _className;
+
+    /**
+     * Field _labelList
+     */
+    private java.util.Vector _labelList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LabelSet() {
+        super();
+        _labelList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.LabelSet()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addLabel
+     * 
+     * @param vLabel
+     */
+    public void addLabel(org.gvsig.andami.plugins.config.generate.Label vLabel)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelList.addElement(vLabel);
+    } //-- void addLabel(com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method addLabel
+     * 
+     * @param index
+     * @param vLabel
+     */
+    public void addLabel(int index, org.gvsig.andami.plugins.config.generate.Label vLabel)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelList.insertElementAt(vLabel, index);
+    } //-- void addLabel(int, com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method enumerateLabel
+     */
+    public java.util.Enumeration enumerateLabel()
+    {
+        return _labelList.elements();
+    } //-- java.util.Enumeration enumerateLabel() 
+
+    /**
+     * Returns the value of field 'className'.
+     * 
+     * @return the value of field 'className'.
+     */
+    public java.lang.String getClassName()
+    {
+        return this._className;
+    } //-- java.lang.String getClassName() 
+
+    /**
+     * Method getLabel
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Label getLabel(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Label) _labelList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Label getLabel(int) 
+
+    /**
+     * Method getLabel
+     */
+    public org.gvsig.andami.plugins.config.generate.Label[] getLabel()
+    {
+        int size = _labelList.size();
+        org.gvsig.andami.plugins.config.generate.Label[] mArray = new org.gvsig.andami.plugins.config.generate.Label[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Label) _labelList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Label[] getLabel() 
+
+    /**
+     * Method getLabelCount
+     */
+    public int getLabelCount()
+    {
+        return _labelList.size();
+    } //-- int getLabelCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllLabel
+     */
+    public void removeAllLabel()
+    {
+        _labelList.removeAllElements();
+    } //-- void removeAllLabel() 
+
+    /**
+     * Method removeLabel
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Label removeLabel(int index)
+    {
+        java.lang.Object obj = _labelList.elementAt(index);
+        _labelList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Label) obj;
+    } //-- com.iver.andami.plugins.config.generate.Label removeLabel(int) 
+
+    /**
+     * Sets the value of field 'className'.
+     * 
+     * @param className the value of field 'className'.
+     */
+    public void setClassName(java.lang.String className)
+    {
+        this._className = className;
+    } //-- void setClassName(java.lang.String) 
+
+    /**
+     * Method setLabel
+     * 
+     * @param index
+     * @param vLabel
+     */
+    public void setLabel(int index, org.gvsig.andami.plugins.config.generate.Label vLabel)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _labelList.setElementAt(vLabel, index);
+    } //-- void setLabel(int, com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method setLabel
+     * 
+     * @param labelArray
+     */
+    public void setLabel(org.gvsig.andami.plugins.config.generate.Label[] labelArray)
+    {
+        //-- copy array
+        _labelList.removeAllElements();
+        for (int i = 0; i < labelArray.length; i++) {
+            _labelList.addElement(labelArray[i]);
+        }
+    } //-- void setLabel(com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.LabelSet) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.LabelSet.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java	(revision 42196)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ExtensionsDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ExtensionsDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ExtensionsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionsDescriptor() {
+        super();
+        xmlName = "extensions";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _extensionList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Extension.class, "_extensionList", "extension", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Extensions target = (Extensions) object;
+                return target.getExtension();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Extensions target = (Extensions) object;
+                    target.addExtension( (org.gvsig.andami.plugins.config.generate.Extension) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Extension();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _extensionList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _skinExtensionList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.SkinExtension.class, "_skinExtensionList", "skin-extension", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Extensions target = (Extensions) object;
+                return target.getSkinExtension();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Extensions target = (Extensions) object;
+                    target.addSkinExtension( (org.gvsig.andami.plugins.config.generate.SkinExtension) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.SkinExtension();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _skinExtensionList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.ExtensionsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Extensions.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extensions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extensions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extensions.java	(revision 42196)
@@ -0,0 +1,382 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Extensions.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Extensions.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Extensions implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _extensionList
+     */
+    private java.util.Vector _extensionList;
+
+    /**
+     * Field _skinExtensionList
+     */
+    private java.util.Vector _skinExtensionList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Extensions() {
+        super();
+        _extensionList = new Vector();
+        _skinExtensionList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.Extensions()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addExtension
+     * 
+     * @param vExtension
+     */
+    public void addExtension(org.gvsig.andami.plugins.config.generate.Extension vExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _extensionList.addElement(vExtension);
+    } //-- void addExtension(com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method addExtension
+     * 
+     * @param index
+     * @param vExtension
+     */
+    public void addExtension(int index, org.gvsig.andami.plugins.config.generate.Extension vExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _extensionList.insertElementAt(vExtension, index);
+    } //-- void addExtension(int, com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method addSkinExtension
+     * 
+     * @param vSkinExtension
+     */
+    public void addSkinExtension(org.gvsig.andami.plugins.config.generate.SkinExtension vSkinExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _skinExtensionList.addElement(vSkinExtension);
+    } //-- void addSkinExtension(com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method addSkinExtension
+     * 
+     * @param index
+     * @param vSkinExtension
+     */
+    public void addSkinExtension(int index, org.gvsig.andami.plugins.config.generate.SkinExtension vSkinExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _skinExtensionList.insertElementAt(vSkinExtension, index);
+    } //-- void addSkinExtension(int, com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method enumerateExtension
+     */
+    public java.util.Enumeration enumerateExtension()
+    {
+        return _extensionList.elements();
+    } //-- java.util.Enumeration enumerateExtension() 
+
+    /**
+     * Method enumerateSkinExtension
+     */
+    public java.util.Enumeration enumerateSkinExtension()
+    {
+        return _skinExtensionList.elements();
+    } //-- java.util.Enumeration enumerateSkinExtension() 
+
+    /**
+     * Method getExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Extension getExtension(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _extensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Extension) _extensionList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Extension getExtension(int) 
+
+    /**
+     * Method getExtension
+     */
+    public org.gvsig.andami.plugins.config.generate.Extension[] getExtension()
+    {
+        int size = _extensionList.size();
+        org.gvsig.andami.plugins.config.generate.Extension[] mArray = new org.gvsig.andami.plugins.config.generate.Extension[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Extension) _extensionList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Extension[] getExtension() 
+
+    /**
+     * Method getExtensionCount
+     */
+    public int getExtensionCount()
+    {
+        return _extensionList.size();
+    } //-- int getExtensionCount() 
+
+    /**
+     * Method getSkinExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SkinExtension getSkinExtension(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _skinExtensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.SkinExtension) _skinExtensionList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension getSkinExtension(int) 
+
+    /**
+     * Method getSkinExtension
+     */
+    public org.gvsig.andami.plugins.config.generate.SkinExtension[] getSkinExtension()
+    {
+        int size = _skinExtensionList.size();
+        org.gvsig.andami.plugins.config.generate.SkinExtension[] mArray = new org.gvsig.andami.plugins.config.generate.SkinExtension[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.SkinExtension) _skinExtensionList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension[] getSkinExtension() 
+
+    /**
+     * Method getSkinExtensionCount
+     */
+    public int getSkinExtensionCount()
+    {
+        return _skinExtensionList.size();
+    } //-- int getSkinExtensionCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllExtension
+     */
+    public void removeAllExtension()
+    {
+        _extensionList.removeAllElements();
+    } //-- void removeAllExtension() 
+
+    /**
+     * Method removeAllSkinExtension
+     */
+    public void removeAllSkinExtension()
+    {
+        _skinExtensionList.removeAllElements();
+    } //-- void removeAllSkinExtension() 
+
+    /**
+     * Method removeExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Extension removeExtension(int index)
+    {
+        java.lang.Object obj = _extensionList.elementAt(index);
+        _extensionList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Extension) obj;
+    } //-- com.iver.andami.plugins.config.generate.Extension removeExtension(int) 
+
+    /**
+     * Method removeSkinExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SkinExtension removeSkinExtension(int index)
+    {
+        java.lang.Object obj = _skinExtensionList.elementAt(index);
+        _skinExtensionList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.SkinExtension) obj;
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension removeSkinExtension(int) 
+
+    /**
+     * Method setExtension
+     * 
+     * @param index
+     * @param vExtension
+     */
+    public void setExtension(int index, org.gvsig.andami.plugins.config.generate.Extension vExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _extensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _extensionList.setElementAt(vExtension, index);
+    } //-- void setExtension(int, com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method setExtension
+     * 
+     * @param extensionArray
+     */
+    public void setExtension(org.gvsig.andami.plugins.config.generate.Extension[] extensionArray)
+    {
+        //-- copy array
+        _extensionList.removeAllElements();
+        for (int i = 0; i < extensionArray.length; i++) {
+            _extensionList.addElement(extensionArray[i]);
+        }
+    } //-- void setExtension(com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method setSkinExtension
+     * 
+     * @param index
+     * @param vSkinExtension
+     */
+    public void setSkinExtension(int index, org.gvsig.andami.plugins.config.generate.SkinExtension vSkinExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _skinExtensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _skinExtensionList.setElementAt(vSkinExtension, index);
+    } //-- void setSkinExtension(int, com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method setSkinExtension
+     * 
+     * @param skinExtensionArray
+     */
+    public void setSkinExtension(org.gvsig.andami.plugins.config.generate.SkinExtension[] skinExtensionArray)
+    {
+        //-- copy array
+        _skinExtensionList.removeAllElements();
+        for (int i = 0; i < skinExtensionArray.length; i++) {
+            _skinExtensionList.addElement(skinExtensionArray[i]);
+        }
+    } //-- void setSkinExtension(com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Extensions) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Extensions.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extensions.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/HiddableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/HiddableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/HiddableExtension.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+
+/**
+ * Extending andami's classical extension this interface will support hidding or
+ * showing an extension on the fly.
+ * 
+ * @autor Jaume Dominguez Faus - jaume.dominguez@iver.es
+ */
+public interface HiddableExtension extends IExtension{
+	
+	/**
+	 * Determines whether the extension will be visible or not, overriding
+	 * the value defined by the extension itself.
+	 * 
+	 * @return
+	 */
+	public int getVisibility();
+	
+	
+	
+	/**
+	 * Sets the absolute visibility of this extension (overriding the value
+	 * set at the MDIManager)
+	 * @param b
+	 */
+	public void setVisibility(int state);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/HiddableExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/PluginClassLoader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/PluginClassLoader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/PluginClassLoader.java	(revision 42196)
@@ -0,0 +1,574 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AllPermission;
+import java.security.CodeSource;
+import java.security.PermissionCollection;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import org.gvsig.andami.messages.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Class loader which loads the classes requested by the
+ * plugins. It first tries to search in the classpath, then it requests
+ * the class to the parent classloader, then it searches in the owns
+ * plugins' library dir, and if all these methods fail, it tries to load
+ * the class from any of the depended plugins. Finally, if this also
+ * fails, the other classloaders provided in the <code>addLoaders</code> method
+ * are requested to load the class.</p>
+ * 
+ * <p>The class loader can also be used to load resources from the
+ * plugin's directory by using the <code>getResource()</code> method.</p>
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class PluginClassLoader extends URLClassLoader {
+    /** DOCUMENT ME! */
+    private static Logger logger = LoggerFactory.getLogger(PluginClassLoader.class.getName());
+
+    /** DOCUMENT ME! */
+    private Hashtable<String, ZipFile> clasesJar = new Hashtable<String, ZipFile>();
+
+    /** DOCUMENT ME! */
+    private File baseDir;
+    private List<PluginClassLoader> pluginLoaders;
+    private static List<ClassLoader> otherLoaders=new ArrayList<ClassLoader>();
+    private boolean isOtherLoader=false;
+ 
+    /**
+     * Creates a new PluginClassLoader object.
+     *
+     * @param jars Array with the search paths where classes will be searched
+     * @param baseDir Base directory for this plugin. This is the directory
+     * which will be used as basedir in the <code>getResources</code> method.
+     * @param cl The parent classloader of this classloader. It will be used to
+     * search classes before trying to search in the plugin's directory
+     * @param pluginLoaders The classloaders of the depended plugins.
+     *
+     * @throws IOException
+     */
+    public PluginClassLoader(URL[] jars, String baseDir, ClassLoader cl,
+        PluginClassLoader[] pluginLoaders) throws IOException {
+        this(jars, baseDir, cl, Arrays.asList(pluginLoaders));
+    }
+    
+    public PluginClassLoader(URL[] jars, String baseDir, ClassLoader cl,
+            List<PluginClassLoader> pluginLoaders) throws IOException {
+        super(jars, cl);
+        logger.debug("Creating PluginClassLoader for {}.", baseDir);
+        this.baseDir = new File(new File(baseDir).getAbsolutePath());
+        this.pluginLoaders = new ArrayList();
+        this.pluginLoaders.addAll(pluginLoaders);
+
+        if( jars==null || jars.length<1 ) { 
+            debugDump(); 
+        	return;
+        }
+        ZipFile[] jarFiles = new ZipFile[jars.length];
+
+        for (int i = 0; i < jars.length; i++) {
+            try {
+                jarFiles[i] = new ZipFile(jars[i].getPath());
+
+                Enumeration<? extends ZipEntry> entradas = jarFiles[i].entries();
+
+                while (entradas.hasMoreElements()) {
+                    ZipEntry file = (ZipEntry) entradas.nextElement();
+                    String fileName = file.getName();
+
+                    if (!fileName.toLowerCase().endsWith(".class")) { //$NON-NLS-1$
+
+                        continue;
+                    }
+
+                    fileName = fileName.substring(0, fileName.length() - 6)
+                                       .replace('/', '.');
+
+                    if (clasesJar.get(fileName) != null) {
+						logger.warn("Duplicated class {} in {} and {}",
+							new Object[] {
+								fileName, 
+								jarFiles[i].getName(),
+								clasesJar.get(fileName).getName()
+							}
+						);
+                    }
+                    else {
+                    	clasesJar.put(fileName, jarFiles[i]);
+                    }
+                }
+            } catch (ZipException e) {
+                throw new IOException(e.getMessage() + " Jar: " +
+                    jars[i].getPath() + ": " + jarFiles[i]);
+            } catch (IOException e) {
+                throw e;
+            } finally {
+                debugDump(); 
+            }
+        }
+    }
+
+    private void debugDump() {
+    	if( !logger.isDebugEnabled() ) {
+    		return;
+    	}
+    	logger.debug(this.toString());
+    	logger.debug("  baseDir: " + this.baseDir);
+    	logger.debug("  parent: " + this.getParent());
+    	logger.debug("  depends:");
+    	for( int n=0; n<this.pluginLoaders.size(); n++ ) {
+    		logger.debug("    {}", this.pluginLoaders.get(n).toString() );
+    	}
+    	logger.debug("  urls:");
+    	URL[] urls = this.getURLs();
+    	for( int n=0 ; n<urls.length; n++ ) {
+    		logger.debug("    " + urls[n].toString());
+    	}
+    	logger.debug("  classes:");
+    	Iterator<Map.Entry<String, ZipFile>>it = this.clasesJar.entrySet().iterator();
+    	while( it.hasNext() ) {
+    		Entry<String, ZipFile> entry = it.next();
+    		logger.debug("    "+ entry.getKey() + "("+entry.getValue().getName()+")");
+    	}
+    }
+    
+    protected Class singleLoadClass(String name) throws ClassNotFoundException {
+        Class<?> c;
+        Set<String>pluginsVisiteds = new HashSet<String>();
+        c = this.singleLoadClass(pluginsVisiteds, name);
+        return c;
+    }
+
+    /**
+     * Carga la clase
+     *
+     * @param name Nombre de la clase
+     * @param resolve Si se ha de resolver la clase o no
+     *
+     * @return Clase cargada
+     *
+     * @throws ClassNotFoundException Si no se pudo encontrar la clase
+     */
+    protected Class loadClass(String name, boolean resolve)
+        throws ClassNotFoundException {
+        Class<?> c = null;
+
+        // Intentamos cargar con el system classloader
+        try {
+            if (!isOtherLoader)
+            	c = super.loadClass(name, resolve);
+            logger.debug("Found class {} in system-classloader", name);
+        } catch (ClassNotFoundException e1) {
+        	try {
+        		c = singleLoadClass(name);
+        	} catch (ClassNotFoundException e2) {
+        		try {
+        			isOtherLoader=true;
+        			c = loadOtherClass(name);
+        		}catch (ClassNotFoundException e3) {
+                    // throw new ClassNotFoundException(Messages.getString(
+                    // "PluginClassLoader.Error_reading_file")
+                    // + name, e3);
+                    throw new ClassNotFoundException("Class " + name
+                            + " not found through the plugin " + baseDir, e3);        			 
+        		}finally {
+        			isOtherLoader=false;
+        		}
+        	}
+        }
+        if (c==null)
+        	 throw new ClassNotFoundException(Messages.getString(
+             "PluginClassLoader.Error_reading_file") + name);
+        if (resolve) {
+            resolveClass(c);
+        }
+        return c;
+    }
+    
+    private Class<?> loadOtherClass(String name)
+            throws ClassNotFoundException {
+        ClassLoader[] ocl = (ClassLoader[]) otherLoaders.toArray(new ClassLoader[0]);
+        Class<?> c = null;
+        for (int i = 0; i < ocl.length; i++) {
+            c = ocl[i].loadClass(name);
+            if (c != null) {
+                logger.debug("Found class {} by the alternative classloaders of plugin {}",
+                        name, baseDir);
+
+                return c;
+            }
+        }
+        throw new ClassNotFoundException(name);
+    }
+
+    /**
+     * obtiene el array de bytes de la clase
+     *
+     * @param classFile Entrada dentro del jar contiene los bytecodes de la
+     *        clase (el .class)
+     * @param is InputStream para leer la entrada del jar
+     *
+     * @return Bytes de la clase
+     *
+     * @throws IOException Si no se puede obtener el .class del jar
+     */
+    private byte[] loadClassData(ZipEntry classFile, InputStream is)
+        throws IOException {
+        // Get size of class file
+        int size = (int) classFile.getSize();
+
+        // Reserve space to read
+        byte[] buff = new byte[size];
+
+        // Get stream to read from
+        DataInputStream dis = new DataInputStream(is);
+
+        // Read in data
+        dis.readFully(buff);
+
+        // close stream
+        dis.close();
+
+        // return data
+        return buff;
+    }
+
+    /**
+     * Gets the bytes of a File
+     *
+     * @param file File
+     *
+     * @return bytes of file
+     *
+     * @throws IOException If the operation fails
+     */
+    private byte[] loadClassData(File file) throws IOException {
+        InputStream is = new FileInputStream(file);
+
+        // Get the size of the file
+        long length = file.length();
+
+        // You cannot create an array using a long type.
+        // It needs to be an int type.
+        // Before converting to an int type, check
+        // to ensure that file is not larger than Integer.MAX_VALUE.
+        if (length > Integer.MAX_VALUE) {
+            // File is too large
+        }
+
+        // Create the byte array to hold the data
+        byte[] bytes = new byte[(int) length];
+
+        // Read in the bytes
+        int offset = 0;
+        int numRead = 0;
+
+        while ((offset < bytes.length) &&
+                ((numRead = is.read(bytes, offset, bytes.length - offset)) >= 0)) {
+            offset += numRead;
+        }
+
+        // Close the input stream and return bytes
+        is.close();
+
+        // Ensure all the bytes have been read in
+        if (offset < bytes.length) {
+            throw new IOException("Could not completely read file " +
+                file.getName());
+        }
+
+        return bytes;
+    }
+
+    /**
+     * Gets the requested resource. If the path is relative, its base directory
+     * will be the one provided in the PluginClassLoader's constructor.
+     * If the resource is not found, search in dependents plugins, otherwise 
+     * the parent classloader will be invoked to try to get it. 
+     * If it is not found, it will return null.
+     *
+     * @param res An absolute or relative path to the requested resource.
+     *
+     * @return Resource's URL if it was found, nul otherwise.
+     */
+    public URL getResource(String res) {
+        URL ret = null;
+
+        Set<String>pluginsVisiteds = new HashSet<String>();
+        ret = this.getResource(pluginsVisiteds, res);
+        return ret;
+    }
+
+    /**
+     * Gets the requested resource. If the path is relative, its base directory
+     * will be the one provided in the PluginClassLoader's constructor.
+     * If the resource is not found, the parent classloader will be invoked
+     * to try to get it. If it is not found, it will return null.
+     *
+     * @param res An absolute or relative path to the requested resource.
+     *
+     * @return Resource's URL if it was found, nul otherwise.
+     */
+    private URL getResource(File base, List<String> res) {
+        File[] files = base.listFiles();
+
+        String parte = res.get(0);
+
+        for (int i = 0; i < files.length; i++) {
+            if (files[i].getName().compareTo(parte) == 0) {
+                if (res.size() == 1) {
+                    try {
+                        return new URL("file:" + files[i].toString());
+                    } catch (MalformedURLException e) {
+                        return null;
+                    }
+                } else {
+                    return getResource(files[i], res.subList(1, res.size()));
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the name of the plugin (the name of the directory containing
+     * the plugin).
+     *
+     * @return An String containing the plugin's name.
+     */
+    public String getPluginName() {
+    	return baseDir.getName();
+    }
+
+    /*
+     * @see java.security.SecureClassLoader#getPermissions(java.security.CodeSource)
+     */
+    protected PermissionCollection getPermissions(CodeSource codesource) {
+        PermissionCollection perms = super.getPermissions(codesource);
+        perms.add(new AllPermission());
+
+        return perms;
+    }
+
+    /**
+     * Gets the plugin's base Iterator<Map.Entry<Integer, Integer>>dir, the directory which will be used to
+     * search resources.
+     *
+     * @return Returns the baseDir.
+     */
+    public String getBaseDir() {
+        return baseDir.getAbsolutePath();
+    }
+
+    /**
+     * Adds other classloader to use when all the normal methods fail.
+     * 
+     * @param classLoaders An ArrayList of ClassLoaders which will
+     * be used to load classes when all the normal methods fail.
+     */
+	public static void addLoaders(ArrayList classLoaders) {
+		otherLoaders.addAll(classLoaders);
+	}
+
+    @Override
+    public String toString() {
+        return super.toString() + " (" + getPluginName() + ")";
+    }
+    
+    public void addPluginClassLoader(PluginClassLoader pluginClassLoader) {
+        if( !this.pluginLoaders.contains(pluginClassLoader) ) {
+            this.pluginLoaders.add(pluginClassLoader);
+        }
+    }
+    
+    private Class singleLoadClass(Set<String> pluginsVisiteds, String name) throws ClassNotFoundException {
+        
+        if ( pluginsVisiteds.contains(this.getPluginName()) ) {
+            return null;
+        }
+        pluginsVisiteds.add(this.getPluginName());
+
+        // Buscamos en las clases de las librer�as del plugin
+        Class<?> c = findLoadedClass(name);
+
+        if (c != null) {
+            return c;
+        }
+
+        logger.debug("Searching class '{}' in {}", new Object[] {name, this.toString()});
+        try {
+            ZipFile jar = (ZipFile) clasesJar.get(name);
+
+            //No esta en ningun jar
+            if (jar == null) {
+                //Buscamos en el directorio de clases
+                String classFileName = baseDir + "/classes/" +
+                    name.replace('.', '/') + ".class";
+                File f = new File(classFileName);
+                if (f.exists()){
+                    byte[] data = loadClassData(f);
+                    c = defineClass(name, data, 0, data.length);
+                    logger.debug("Found class {} in classes-folder of plugin {}",
+                    		new Object[] {name, baseDir});
+
+                } else {
+                    //Buscamos en los otros plugins
+                    for ( int i = 0; i < pluginLoaders.size(); i++ ) {
+                        c = null;
+                        if ( pluginLoaders.get(i) != null ) {
+                            try {
+                                c = pluginLoaders.get(i).singleLoadClass(pluginsVisiteds, name);
+                            } catch (ClassNotFoundException e) {
+                                // Si no la encontramos en el primer plugin, capturamos la exceptcion
+                                // porque es probable que la encontremos en el resto de plugins.
+                            }
+                        }
+                        if ( c != null ) {
+                            return c;
+                        }
+                    }
+                }
+            } else {
+                String fileName = name.replace('.', '/') + ".class";
+                ZipEntry classFile = jar.getEntry(fileName);
+                byte[] data = loadClassData(classFile,
+                        jar.getInputStream(classFile));
+
+                c = defineClass(name, data, 0, data.length);
+                
+                logger.debug("Found class {} in jar {} of plugin {}",
+                            new Object[] { name, jar.getName(), baseDir} );
+            }
+
+            if (c == null) {
+                throw new ClassNotFoundException(name);
+            }
+
+            return c;
+        } catch (IOException e) {
+            throw new ClassNotFoundException(Messages.getString(
+                    "PluginClassLoader.Error_reading_file") + name);
+        }        
+    }
+
+    /**
+     * Este metodo busca en este class loader y en el de los plugins
+     * de los que depende. Se cerciora de que no se queda
+     * bucleado cuando hay una relacion recursiva entre los plugins.
+     * 
+     * @param pluginsVisiteds, set con los plugins que va visitando para evitar 
+     *      que se quede bucleado cuando hay referencia ciclicas entre plugins.
+     * @param res
+     * 
+     * @return 
+     */
+     private URL getResource(Set<String> pluginsVisiteds, String res) {
+        URL ret = null;
+
+        if ( pluginsVisiteds.contains(this.getPluginName()) ) {
+            return null;
+        }
+        pluginsVisiteds.add(this.getPluginName());
+
+        //
+        // Primero buscamos en el directorio del plugin.
+        try {
+            logger.debug("Plugin {}. Searching resource '{}'", res, this.getPluginName());
+            List<String> resource = new ArrayList<String>();
+            StringTokenizer st = new StringTokenizer(res, "\\/");
+            while ( st.hasMoreTokens() ) {
+                String token = st.nextToken();
+                resource.add(token);
+            }
+            ret = getResource(baseDir, resource);
+            if ( ret != null ) {
+                return ret;
+            }
+        } catch (Exception e) {
+            logger.warn("Plugin {}. Error getting resource '{}'.", new Object[]{this.getPluginName(), res}, e);
+        }
+
+        logger.debug("Plugin {}. Searching in depends pluginLoaders", this.getPluginName());
+        for ( int i = 0; i < this.pluginLoaders.size(); i++ ) {
+            PluginClassLoader pluginClassLoader = pluginLoaders.get(i);
+            if ( pluginClassLoader != null ) {
+                try {
+                    pluginsVisiteds.add(pluginClassLoader.getPluginName());
+                    ret = pluginClassLoader.getResource(pluginsVisiteds, res);
+                    if ( ret != null ) {
+                        logger.trace("Plugin {}. Found resource '{}' in plugin '{}'.",
+                                new Object[]{
+                                    this.getPluginName(), pluginClassLoader.getPluginName(), res
+                                });
+                        return ret;
+                    }
+                } catch (Exception e) {
+                    // Ignore, try in next classloader
+                }
+            }
+        }
+
+        if ( ret == null ) {
+            //
+            // Por ultimo en el class loader padre, se supone que es el del sistema.
+            try {
+                ret = super.getResource(res);
+            } catch (Exception e) {
+                logger.warn("Plugin {}. Error getting resource '{}' in parent classloader'", new Object[]{this.getPluginName(), res}, e);
+            }
+            if ( ret == null ) {
+                logger.debug("Plugin {}. Resource '{}' not found.", new Object[]{this.getPluginName(), res});
+            }
+        }
+        return ret;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/PluginClassLoader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+import java.util.Map;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extensions are the way in which plugins extend Andami. Extensions
+ * can add controls to user interface (GUI) and execute some code
+ * when controls are activated. Every class implementing
+ * {@link IExtension} is an extension, but directly implementing
+ * that interface is discouraged. The preferred way to create
+ * an extension is extending this absctract class.
+ *
+ * @see IExtension
+ *
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public abstract class Extension implements IExtension, IExtensionQueryByAction, IExtensionExecuteWithArgs  {
+
+	private static Logger logger = LoggerFactory.getLogger(Extension.class);
+
+	private PluginServices plugin = null;
+
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#terminate()
+	 */
+	public void terminate(){
+
+	}
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#postInitialize()
+	 */
+	public void postInitialize(){
+
+	}
+
+    /*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#getStatus()
+	 */
+    public IExtensionStatus getStatus() {
+    	return null;
+    }
+
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#getStatus(IExtension extension)
+	 */
+	public IExtensionStatus getStatus(IExtension extension) {
+		return extension.getStatus();
+	}
+
+	public String getText(String msg) {
+	    return PluginsLocator.getManager().getText(this, msg);
+	}
+
+	public final void setPlugin(PluginServices plugin) {
+		if (this.plugin != null){
+			throw new IllegalStateException();
+		}
+		this.plugin = plugin;
+	}
+
+	public final PluginServices getPlugin() {
+		if (this.plugin == null){
+			return PluginsLocator.getManager().getPlugin(this.getClass());
+		}
+		return this.plugin;
+	}
+
+	public boolean isEnabled(String action) {
+		return isEnabled();
+	}
+
+	public boolean isVisible(String action) {
+		return isVisible();
+	}
+
+	public boolean canQueryByAction() {
+		return false;
+	}
+
+	public void execute(String command, Object[] args) {
+		if( args!= null && args.length>0 ) {
+			logger.info("calling execute with args in a extension that not support ("+this.getClass().getSimpleName()+").");
+		}
+		execute(command);
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionHelper.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ExtensionHelper {
+
+	private static Logger logger = LoggerFactory.getLogger(ExtensionHelper.class);
+	
+	public static boolean canQueryByAction(IExtension extension) {
+		if( extension instanceof IExtensionQueryByAction ) {
+			return ((IExtensionQueryByAction)extension).canQueryByAction();
+		}
+		return false;
+	}
+	
+	public static boolean isVisible(IExtension extension, String action) {
+		if( extension instanceof IExtensionQueryByAction ) {
+			return ((IExtensionQueryByAction) extension).isVisible(action);
+		}
+		return extension.isVisible();
+	}
+
+	public static boolean isEnabled(IExtension extension, String action) {
+		if( extension instanceof IExtensionQueryByAction ) {
+			return ((IExtensionQueryByAction) extension).isEnabled(action);
+		}
+		return extension.isEnabled();
+	}
+	
+	public static void execute(IExtension extension, String command, Object[] args) {
+		if( extension instanceof IExtensionExecuteWithArgs ) {
+			((IExtensionExecuteWithArgs) extension).execute(command, args);
+			return;
+		}
+		if( args!= null && args.length>0 ) {
+			logger.info("calling execute with args in a extension that not support ("+extension.getClass().getSimpleName()+").");
+		}
+		extension.execute(command);
+	}	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionHelper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionDecorator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionDecorator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionDecorator.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.plugins;
+
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This class extends the functionality of Extension class to let the programmer
+ * set an extension visible or not on-the-fly.
+ *
+ * @autor Jaume Dominguez Faus - jaume.dominguez@iver.es
+ */
+public class ExtensionDecorator implements HiddableExtension{
+    private static Logger logger = LoggerFactory.getLogger(ExtensionDecorator.class);
+	public static final int INACTIVE = 0;
+	public static final int ALWAYS_VISIBLE = 1;
+	public static final int ALWAYS_INVISIBLE = 2;
+	int  alwaysVisible;
+	IExtension extension;
+
+	public ExtensionDecorator(IExtension e, int visibilityControl){
+		setExtension(e);
+		setVisibility(visibilityControl);
+	}
+
+	public void setExtension(IExtension e) {
+		this.extension = e;
+	}
+
+	public void setVisibility(int state){
+		this.alwaysVisible = state;
+	}
+
+	public int getVisibility(){
+		return alwaysVisible;
+	}
+
+	public IExtension getExtension(){
+		return extension;
+	}
+
+	public void initialize() {
+		extension.initialize();
+	}
+
+	public void terminate(){
+		//TODO
+	}
+
+	public void execute(String actionCommand) {
+        logger.info("{}.execute('{}')", extension.getClass().getSimpleName(), actionCommand);
+		extension.execute(actionCommand);
+	}
+
+	public boolean isEnabled() {
+		return extension.isEnabled();
+	}
+
+	public boolean isVisible() {
+		if (alwaysVisible == INACTIVE)
+			return extension.isVisible();
+		else if (alwaysVisible == ALWAYS_VISIBLE) return true;
+		else return false;
+	}
+
+	public void postInitialize() {
+		// TODO
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#getStatus()
+	 */
+	public IExtensionStatus getStatus() {
+		return extension.getStatus();
+	}
+	public IExtensionStatus getStatus(IExtension extension) {
+		return this.extension.getStatus(extension);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionDecorator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java	(revision 42196)
@@ -0,0 +1,4092 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import java.awt.BorderLayout;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.KeyboardFocusManager;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.net.Authenticator;
+import java.net.MalformedURLException;
+import java.net.PasswordAuthentication;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.channels.FileChannel;
+import java.security.AllPermission;
+import java.security.CodeSource;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.Policy;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.prefs.Preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.JavaVersion;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.SystemUtils;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.PropertyConfigurator;
+import org.apache.log4j.RollingFileAppender;
+import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.spi.ThrowableInformation;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.ValidationException;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.config.generate.Andami;
+import org.gvsig.andami.config.generate.AndamiConfig;
+import org.gvsig.andami.config.generate.Plugin;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.ExtensionDecorator;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.Action;
+import org.gvsig.andami.plugins.config.generate.ActionTool;
+import org.gvsig.andami.plugins.config.generate.AlternativeNames;
+import org.gvsig.andami.plugins.config.generate.ComboButton;
+import org.gvsig.andami.plugins.config.generate.ComboButtonElement;
+import org.gvsig.andami.plugins.config.generate.ComboScale;
+import org.gvsig.andami.plugins.config.generate.Depends;
+import org.gvsig.andami.plugins.config.generate.Extension;
+import org.gvsig.andami.plugins.config.generate.Extensions;
+import org.gvsig.andami.plugins.config.generate.LabelSet;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.andami.plugins.config.generate.PluginConfig;
+import org.gvsig.andami.plugins.config.generate.PopupMenu;
+import org.gvsig.andami.plugins.config.generate.PopupMenus;
+import org.gvsig.andami.plugins.config.generate.SelectableTool;
+import org.gvsig.andami.plugins.config.generate.SkinExtension;
+import org.gvsig.andami.plugins.config.generate.SkinExtensionType;
+import org.gvsig.andami.plugins.config.generate.ToolBar;
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.andami.ui.AndamiEventQueue;
+import org.gvsig.andami.ui.DisablePluginsConflictingLayoutPanel;
+import org.gvsig.andami.ui.MDIManagerLoadException;
+import org.gvsig.andami.ui.ToolsWindowManager;
+import org.gvsig.andami.ui.fonts.FontUtils;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiManager.MDIManagerFactory;
+import org.gvsig.andami.ui.splash.MultiSplashWindow;
+import org.gvsig.andami.ui.theme.Theme;
+import org.gvsig.andami.ui.wizard.UnsavedDataPanel;
+import org.gvsig.installer.lib.api.Dependencies;
+import org.gvsig.installer.lib.api.Dependency;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardActionListener;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.exception.ListBaseException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.gvsig.tools.util.FolderSet;
+import org.gvsig.tools.util.FolderSet.FolderEntry;
+import org.gvsig.utils.DateTime;
+import org.gvsig.utils.DefaultListModel;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.xml.XMLEncodingUtils;
+import org.gvsig.utils.xmlEntity.generate.XmlTag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * Andami's launching class. This is the class used to create the Andami's
+ * plugin environment.<br>
+ * </p>
+ *
+ * <p>
+ * <b>Syntax:</b> <br>
+ * java [-Xmx512M (for 512MB of RAM)] [-classpath={a colon-separated(unix) or
+ * semicolon-separated(windows) list of files containg base library of classes}]
+ * [-Djava.library.path=PATH_TO_NATIVE_LIBRARIES]
+ * PATH_TO_APPLICATION_HOME_DIRECTORY PATH_TO_APPLICATION_PLUGINS_DIRECTORY
+ * [{list of additional custom application arguments separated by spaces}]
+ * </p>
+ *
+ *
+ * @author $author$
+ * @version $Revision: 40305 $
+ */
+public class Launcher {
+
+	public static abstract class MapWithAlias<Item> extends HashMap<String, Item> {
+		private HashMap<String, String> aliases = new HashMap<String, String>();
+
+		public abstract String[] getAliases(Item item);
+
+		public boolean isAlias(String key) {
+			return aliases.get(key)!=null ;
+		}
+
+		public String getMainKey(String key) {
+			Item item = super.get(key);
+			if( item != null ) {
+				return key;
+			}
+			String alias = aliases.get(key);
+			if( alias != null ) {
+				return alias;
+			}
+			return null;
+		}
+
+		public Item get(Object key) {
+			Item item = super.get(key);
+			if( item != null ) {
+				return item;
+			}
+			String alias = aliases.get(key);
+			if( alias != null ) {
+				return super.get(alias);
+			}
+			return null;
+		}
+
+		public boolean containsKey(Object key) {
+			boolean contains = super.containsKey(key);
+			if( contains ) {
+				return true;
+			}
+			String alias = aliases.get(key);
+			return super.containsKey(alias);
+		}
+
+		public Item put(String key, Item value) {
+			super.put(key, value);
+			String[] aliases = getAliases(value);
+			if( aliases==null ) {
+				return value;
+			}
+			for( int n=0; n<aliases.length; n++ ) {
+				this.aliases.put(aliases[n].trim(), key);
+			}
+			return value;
+		}
+
+		public void putAll(Map<? extends String, ? extends Item> m) {
+			Iterator<?> it = m.entrySet().iterator();
+			while( it.hasNext() ) {
+				Map.Entry<String, Item> x = (Map.Entry<String, Item>) it.next();
+				this.put(x.getKey(), x.getValue());
+			}
+		}
+
+		public Item remove(Object key) {
+			Item item = super.get(key);
+			if( item == null ) {
+				String alias = aliases.get(key);
+				if( alias == null ) {
+					return null;
+				}
+				item = super.get(alias);
+				super.remove(alias);
+			} else {
+				super.remove(key);
+			}
+			String[] aliases = getAliases(item);
+			if( aliases==null ) {
+				return item;
+			}
+			// Rebuild the alias list
+			this.aliases = new HashMap<String, String>();
+			Iterator<java.util.Map.Entry<String, Item>> it = this.entrySet().iterator();
+			while(it.hasNext()) {
+				java.util.Map.Entry<String, Item> entry = it.next();
+				aliases = getAliases(entry.getValue());
+				if( aliases==null ) {
+					continue;
+				}
+				for( int n=0; n<aliases.length; n++ ) {
+					this.aliases.put(aliases[n].trim(), entry.getKey());
+				}
+			}
+
+			return item;
+		}
+
+	}
+
+	public static class PluginsConfig extends MapWithAlias<org.gvsig.andami.plugins.config.generate.PluginConfig>  {
+
+		public String[] getAliases(
+				org.gvsig.andami.plugins.config.generate.PluginConfig item) {
+			return getAlternativeNames(item);
+		}
+
+		static String[] getAlternativeNames(org.gvsig.andami.plugins.config.generate.PluginConfig item) {
+			AlternativeNames[] x = item.getAlternativeNames();
+			if( x == null ) {
+				return null;
+			}
+			String[] r = new String[x.length];
+			for( int i=0; i<x.length; i++) {
+				r[i] = x[i].getName();
+			}
+			return r;
+		}
+
+	}
+
+	public static class PluginsServices extends MapWithAlias<org.gvsig.andami.PluginServices>  {
+
+		public String[] getAliases(org.gvsig.andami.PluginServices item) {
+			return item.getAlternativeNames();
+		}
+	}
+
+	protected static Logger logger = LoggerFactory.getLogger(Launcher.class
+			.getName());
+	protected static Preferences prefs = Preferences.userRoot().node(
+			"gvsig.connection");
+	protected static AndamiConfig andamiConfig;
+	protected static MultiSplashWindow splashWindow;
+	protected static String appName;
+	protected static Locale locale;
+	protected static PluginsConfig pluginsConfig = new PluginsConfig();
+	protected static PluginsServices pluginsServices = new PluginsServices();
+	protected static MDIFrame frame;
+	protected static HashMap<Class<? extends IExtension>, ExtensionDecorator> classesExtensions = new HashMap<Class<? extends IExtension>, ExtensionDecorator>();
+	protected static String andamiConfigPath;
+	protected static final String nonWinDefaultLookAndFeel = "com.jgoodies.looks.plastic.PlasticXPLookAndFeel";
+
+	protected static ArrayList<String> pluginsOrdered = new ArrayList<String>();
+	protected static ArrayList<IExtension> extensions = new ArrayList<IExtension>();
+	protected static String appHomeDir = null;
+	// it seems castor uses this encoding
+	protected static final String CASTORENCODING = "UTF8";
+
+	protected static ListBaseException launcherrors = null;
+
+	protected static Theme theme = null;
+
+	private List<String> deprecatedPluginNames = null;
+
+	private static final class ProxyAuth extends Authenticator {
+
+		private PasswordAuthentication auth;
+
+		private ProxyAuth(String user, String pass) {
+			auth = new PasswordAuthentication(user, pass.toCharArray());
+		}
+
+		protected PasswordAuthentication getPasswordAuthentication() {
+			return auth;
+		}
+	}
+
+	private static Launcher launcherInstance;
+
+	public static Launcher getInstance() {
+		if( launcherInstance == null ) {
+			launcherInstance = new Launcher();
+		}
+		return launcherInstance;
+	}
+
+	public static void main(String[] args) throws Exception {
+		Launcher launcher = getInstance();
+		boolean install = false;
+		for (int i = 0; i < args.length; i++) {
+			if (args[i].equalsIgnoreCase("--install")) {
+				install = true;
+			}
+		}
+
+		try {
+			if (install) {
+				launcher.doInstall(args);
+			} else {
+				launcher.doMain(args);
+			}
+		} catch (Exception e) {
+			logger.error("excepci�n al arrancar", e);
+			System.exit(-1);
+		}
+	}
+
+	protected void downloadExtensions(String extDir) {
+		// do nothing
+	}
+
+	public static class LaunchException extends ListBaseException {
+
+		private static final long serialVersionUID = 4541192746962684705L;
+
+		public LaunchException() {
+			super("Errors in initialization of application.",
+					"_errors_in_initialization_of_application",
+					serialVersionUID);
+		}
+
+	}
+
+	protected void addError(Throwable ex) {
+		if (launcherrors == null) {
+			launcherrors = new LaunchException();
+		}
+		launcherrors.add(ex);
+	}
+
+	protected void addError(String msg, Throwable cause) {
+		logger.error(msg, cause);
+		this.addError(new RuntimeException(msg, cause));
+	}
+
+	protected void addError(String msg) {
+		this.addError(msg, null);
+	}
+
+	private String translate(String msg) {
+		return PluginServices.getText(Launcher.class,msg);
+	}
+
+	private List<String> getDeprecatedPluginNames() {
+		if( deprecatedPluginNames == null ) {
+			String[] ss = new String[] {
+					"org.gvsig.app",
+					"org.gvsig.coreplugin",
+					"org.gvsig.editing",
+					"org.gvsig.installer.app.extension",
+					"org.gvsig.exportto.app.extension"
+			};
+			deprecatedPluginNames = Arrays.asList(ss);
+		}
+		return deprecatedPluginNames;
+	}
+
+	public void doMain(String[] args) throws Exception {
+
+		if (args.length < 1) {
+			System.err.println("Usage: Launcher appName plugins-directory [language=locale]");
+			System.err.println("No arguments specified.");
+			System.err.println("Use default arguments 'gvSIG gvSIG/extensiones'");
+			args = new String[] { "gvSIG", "gvSIG/extensiones" };
+		}
+
+		initializeApp(args, null);
+
+		// Solucionamos el problema de permisos que se produc�do con Java
+		// Web Start con este codigo.
+		// System.setSecurityManager(null);
+		Policy.setPolicy(new Policy() {
+
+			public PermissionCollection getPermissions(CodeSource codesource) {
+				Permissions perms = new Permissions();
+				perms.add(new AllPermission());
+				return (perms);
+			}
+
+			public void refresh() {
+			}
+		});
+
+        new DefaultLibrariesInitializer().fullInitialize(true);
+        InstallerLocator.getInstallerManager().setDownloadBaseURL(
+            new URL("http://downloads.gvsig.org/download/gvsig-desktop/"));
+
+		try {
+			initIconThemes();
+		} catch (Exception ex) {
+			this.addError("Can't initialize icon theme", ex);
+		}
+		// Registramos los iconos base
+		try {
+			registerIcons();
+		} catch (Exception ex) {
+			this.addError("Can't register icons", ex);
+		}
+
+		// Obtener la personalizaci�n de la aplicacion.
+		try {
+			logger.info("Initialize andami theme");
+			theme = getTheme(andamiConfig.getPluginsDirectory());
+		} catch (Exception ex) {
+			this.addError("Can't get personalized theme for the application",
+					ex);
+		}
+                UIManager.put("Desktop.background", theme.getBackgroundColor());
+
+
+		// Mostrar la ventana de inicio
+		Frame f = new Frame();
+		splashWindow = new MultiSplashWindow(f, theme, 27);
+
+		// Ponemos los datos del proxy
+		splashWindow.process(translate("SplashWindow.configuring_proxy"));
+		logger.info("Configute http proxy");
+		configureProxy();
+
+		// Buscar actualizaciones de los plugins
+		splashWindow.process(translate("SplashWindow.looking_for_updates"));
+		try {
+//			this.downloadExtensions(andamiConfig.getPluginsDirectory());
+		} catch (Exception ex) {
+			this.addError("Can't downloads plugins", ex);
+		}
+
+		splashWindow.process(translate("SplashWindow.initialize_install_manager"));
+                initializeInstallerManager();
+
+
+                InstallerManager installerManager = InstallerLocator.getInstallerManager();
+                PackageInfo[] installedPackages = null;
+                try {
+                    installedPackages = installerManager.getInstalledPackages();
+                } catch (MakePluginPackageServiceException e) {
+                    // Do nothing, ignore errors
+                }
+                logger.info("Dump system information");
+                logger_info(getInformation(installedPackages));
+                saveEnvironInformation(installedPackages);
+
+
+                // Se leen los config.xml de los plugins
+		splashWindow.process(translate("SplashWindow.load_plugins_configuration"));
+		try {
+			logger.info("Load plugins information");
+			this.loadPluginConfigs();
+                        if ( pluginsConfig.isEmpty() ) {
+                            logger.warn("No valid plugin was found.");
+                            System.exit(-1);
+                        }
+		} catch (Throwable ex) {
+			this.addError("Can't load plugins", ex);
+		}
+
+		splashWindow.process(translate("SplashWindow.check_incompatible_plugins"));
+		fixIncompatiblePlugins(installedPackages);
+
+
+		// Se configura el classloader del plugin
+		splashWindow.process(translate("SplashWindow.setup_plugins_configuration"));
+		try {
+                    logger.info("Configure plugins class loader");
+                    this.loadPluginServices();
+		} catch (Throwable ex) {
+                    logger.warn("Can't initialize plugin's classloaders  ", ex);
+		}
+                try {
+                     registerActions();
+                } catch (Throwable ex) {
+                    logger.warn("Can't register actions of plugins", ex);
+                }
+
+                initializeIdentityManagement(new File(andamiConfig.getPluginsDirectory()).getAbsoluteFile());
+
+		// Initialize libraries
+		splashWindow.process(translate("SplashWindow.initialize_plugins_libraries"));
+		initializeLibraries();
+
+		// Se carga un Skin si alguno ide los plugins trae informacion para ello
+		splashWindow.process(translate("SplashWindow.looking_for_a_skin"));
+		logger.info("Initialize skin");
+		skinPlugin(null);
+
+		// Se configura la cola de eventos
+		splashWindow.process(translate("setting_up_event_queue"));
+		EventQueue waitQueue = new AndamiEventQueue();
+		Toolkit.getDefaultToolkit().getSystemEventQueue().push(waitQueue);
+
+		// Se configura la internacionalizacion del plugin
+		splashWindow.process(translate("SplashWindow.starting_plugin_internationalization_system"));
+		pluginsMessages();
+
+		// Se modifica el andami-config con los plugins nuevos
+		splashWindow.process(translate("SplashWindow.update_framework_configuration"));
+		updateAndamiConfig();
+
+		frame = MDIFrame.getInstance();
+		// Se configura el nombre e icono de la aplicacion
+		splashWindow.process(translate("SplashWindow.setting_up_applications_name_and_icons"));
+		frameIcon(theme);
+
+		// Se prepara el MainFrame para albergar las extensiones
+		splashWindow.process(translate("SplashWindow.preparing_workbench"));
+		JPopupMenu.setDefaultLightWeightPopupEnabled(false);
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+				frame.init();
+			}
+		});
+		ToolsSwingLocator.registerWindowManager(ToolsWindowManager.class);
+
+		// Leer el fichero de persistencia de los plugins
+		splashWindow.process(translate("SplashWindow.loading_plugin_settings"));
+		loadPluginsPersistence();
+
+		// Se instalan los controles del skin
+		// Se inicializan todas las extensiones de todos los plugins
+		splashWindow.process(translate("SplashWindow.initializing_extensions"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+				initializeExtensions();
+			}
+		});
+
+		// Se inicializan la extension exclusiva
+		splashWindow.process(translate("SplashWindow.setting_up_master_extension"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+				initializeExclusiveUIExtension();
+			}
+		});
+		frame.setClassesExtensions(classesExtensions);
+
+		// Se instalan los controles de las extensiones de los plugins
+		message(translate("SplashWindow.installing_extensions_controls"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+				installPluginsControls();
+			}
+		});
+
+		// Se instalan los menus de las extensiones de los plugins
+		message(translate("SplashWindow.installing_extensions_menus"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+				installPluginsMenus();
+			}
+		});
+
+		message(translate("SplashWindow.initializing_server_data_persistence"));
+		ServerDataPersistence.registerPersistence();
+
+		// Se instalan las etiquetas de las extensiones de los plugins
+		message(translate("SplashWindow.installing_extensions_labels"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+				installPluginsLabels();
+			}
+		});
+
+		// Se muestra el frame principal
+		message(translate("creating_main_window"));
+		frame.setVisible(true);
+		frame.setCursor(Cursor.WAIT_CURSOR);
+
+		// Definimos un KeyEventDispatcher global para que las extensiones
+		// puedan registrar sus "teclas rapidas".
+		message(translate("SplashWindow.initializing_accelerator_keys"));
+		GlobalKeyEventDispatcher keyDispatcher = GlobalKeyEventDispatcher.getInstance();
+		KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keyDispatcher);
+
+		message(translate("SplashWindow.enable_controls"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+                            try {
+				frame.enableControls();
+                            } catch(Throwable th) {
+                                logger.warn("Problems enabling controls",th);
+                            }
+			}
+		});
+
+		// Se ejecuta el postInitialize
+		message(translate("SplashWindow.post_initializing_extensions"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+				postInitializeExtensions();
+			}
+		});
+
+		message(translate("SplashWindow.enable_controls"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+			public void run() {
+                            try {
+				frame.enableControls();
+				message(translate("StatusBar.Aplicacion_iniciada"));
+                            } catch(Throwable th) {
+                                logger.warn("Problems enabling controls",th);
+                            }
+			}
+		});
+
+		splashWindow.close();
+
+		frame.setCursor(Cursor.DEFAULT_CURSOR);
+
+		if (launcherrors != null) {
+			NotificationManager.addError(launcherrors);
+		}
+		org.apache.log4j.Logger.getRootLogger().addAppender(
+				new NotificationAppender());
+
+		/*
+		 * Executes additional tasks required by plugins
+		 */
+		PluginsLocator.getManager().executeStartupTasks();
+
+	}
+
+        private void initializeInstallerManager() {
+            PluginsManager pluginmgr = PluginsLocator.getManager();
+            InstallerManager installerManager = InstallerLocator.getInstallerManager();
+
+            //
+            // Configure repository of plugins
+            //
+            List<File> folders = pluginmgr.getPluginsFolders();
+            for ( File folder : folders ) {
+                installerManager.addLocalAddonRepository(folder, "plugin");
+            }
+            installerManager.setDefaultLocalAddonRepository(folders.get(0), "plugin");
+
+            //
+            // Configure repository of iconsets
+            //
+            IconThemeManager iconManager = ToolsSwingLocator.getIconThemeManager();
+            FolderSet fset = iconManager.getRepository();
+            Iterator<FolderSet.FolderEntry> it = fset.iterator();
+            boolean first = true;
+            while( it.hasNext() ) {
+                    FolderEntry entry = it.next();
+                    installerManager.addLocalAddonRepository(entry.getFolder(),"iconset");
+                    if( first ) {
+                        first = false;
+                        installerManager.setDefaultLocalAddonRepository(entry.getFolder(),"iconset");
+                    }
+            }
+
+        }
+
+	private void message(final String msg) {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			try {
+				SwingUtilities.invokeAndWait(new Runnable() {
+					public void run() {
+						message(msg);
+					}
+				});
+			} catch (Exception e) {
+				logger.info(msg);
+				logger.warn("Error showing message.", e);
+			}
+			return;
+		}
+		if (splashWindow.isVisible()) {
+			splashWindow.process(msg);
+		}
+		if (frame.isVisible()) {
+			frame.message(msg, JOptionPane.INFORMATION_MESSAGE);
+		}
+	}
+
+	private void initializeLibraries() {
+		List<ClassLoader> classLoaders = new ArrayList<ClassLoader>(
+				pluginsOrdered.size() + 1);
+		classLoaders.add(getClass().getClassLoader());
+		Iterator<String> iter = pluginsOrdered.iterator();
+
+		logger.info("Initializing plugins libraries: ");
+		while (iter.hasNext()) {
+			String pName = (String) iter.next();
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			logger.info("Initializing plugin libraries (" + pName + ")");
+			classLoaders.add(ps.getClassLoader());
+		}
+
+		// Create the libraries initializer and
+		// initialize the plugin libraries
+		new DefaultLibrariesInitializer(classLoaders
+				.toArray(new ClassLoader[classLoaders.size()]))
+				.fullInitialize(true);
+
+		// Remove them all, we don't need them anymore
+		classLoaders.clear();
+		classLoaders = null;
+	}
+
+	/**
+	 * @param args
+	 * @throws IOException
+	 * @throws ConfigurationException
+	 */
+	private void initializeApp(String[] args, String applicationClasifier) throws IOException, ConfigurationException {
+		if( args.length<1 ) {
+			appName = "gvSIG"; // Nombre de aplicacion por defecto es "gvSIG"
+		} else {
+			appName = args[0];
+		}
+		getOrCreateConfigFolder();
+		configureLogging(appName, applicationClasifier);
+		if (!validJVM()) {
+                    logger.error("Not a valid JRE. Exit application.");
+                    System.exit(-1);
+		}
+		// Clean temporal files
+		Utilities.cleanUpTempFiles();
+
+		if( args.length<2 ) {
+			loadAndamiConfig("gvSIG/extensiones"); // Valor por defecto
+		} else {
+			loadAndamiConfig(args[1]);
+		}
+
+		// Hacemos visibles los argumentos como una propiedad est�tica
+		// de plugin services para quien lo quiera usar (por ejemplo, para
+		// cargar un proyecto por l�nea de comandos)
+		PluginServices.setArguments(args);
+
+		configureLocales(args);
+
+		logger.info("Configure LookAndFeel");
+		configureLookAndFeel();
+	}
+
+	/**
+     *
+     */
+	private void configureLookAndFeel() {
+		// Se pone el lookAndFeel
+		try {
+			String lookAndFeel = getAndamiConfig().getLookAndFeel();
+			if (lookAndFeel == null) {
+				lookAndFeel = getDefaultLookAndFeel();
+			}
+			UIManager.setLookAndFeel(lookAndFeel);
+		} catch (Exception e) {
+			logger.warn(Messages.getString("Launcher.look_and_feel"), e);
+		}
+		FontUtils.initFonts();
+	}
+
+	/**
+	 * @param args
+	 * @throws ConfigurationException
+	 */
+	private void loadAndamiConfig(String pluginFolder)
+			throws ConfigurationException {
+		andamiConfigPath = appHomeDir + File.separator + "andami-config.xml";
+		andamiConfigFromXML(andamiConfigPath);
+		andamiConfig.setPluginsDirectory(pluginFolder);
+	}
+
+	/**
+     *
+     */
+	private void getOrCreateConfigFolder() {
+		// Create application configuration folder
+		appHomeDir = System.getProperty(appName + ".home");
+		if (appHomeDir == null) {
+			appHomeDir = System.getProperty("user.home");
+		}
+
+		appHomeDir += File.separator + appName;
+		File parent = new File(appHomeDir);
+		parent.mkdirs();
+	}
+
+	/**
+	 * @param args
+	 * @throws IOException
+	 */
+	private void configureLogging(String appName, String applicationClasifier) throws IOException {
+		// Configurar el log4j
+
+                String pathname;
+                if( StringUtils.isBlank(applicationClasifier) ) {
+                    pathname = appHomeDir + File.separator + appName + ".log";
+                } else {
+                    pathname = appHomeDir + File.separator + appName + "-" + applicationClasifier + ".log";
+                }
+		URL config = Launcher.class.getClassLoader().getResource("log4j.properties");
+		if( config == null ) {
+			config = Launcher.class.getClassLoader().getResource("default-log4j/log4j.properties");
+		}
+		PropertyConfigurator.configure(config);
+		PatternLayout l = new PatternLayout("%p %t %C - %m%n");
+		RollingFileAppender fa = new RollingFileAppender(l, pathname, false);
+		fa.setMaxFileSize("512KB");
+		fa.setMaxBackupIndex(3);
+		org.apache.log4j.Logger.getRootLogger().addAppender(fa);
+		logger.info("Loadded log4j.properties from " + config.toString());
+                if( StringUtils.isBlank(applicationClasifier) ) {
+                    logger.info("Application "+ appName );
+                } else {
+                    logger.info("Application "+ appName + "-" + applicationClasifier );
+                }
+	}
+
+	private class NotificationAppender extends AppenderSkeleton {
+
+		@Override
+		protected void append(LoggingEvent event) {
+			if (event.getLevel() == org.apache.log4j.Level.ERROR
+					|| event.getLevel() == org.apache.log4j.Level.FATAL) {
+
+			    Throwable th = null;
+			    ThrowableInformation thi = event.getThrowableInformation();
+			    if (thi != null) {
+			        th = thi.getThrowable();
+			    }
+				NotificationManager.dispatchError(event.getRenderedMessage(), th);
+				return;
+			}
+			// if (event.getLevel() == org.apache.log4j.Level.WARN) {
+			// NotificationManager.dispatchWarning(event.getRenderedMessage(),
+			// null);
+			// return;
+			// }
+		}
+
+
+		@Override
+		public void close() {
+			// TODO Auto-generated method stub
+
+		}
+
+		@Override
+		public boolean requiresLayout() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+	}
+
+	/**
+	 * Return the directory applicaction is installed.
+	 */
+	public static String getApplicationDirectory() {
+		return getApplicationFolder().getAbsolutePath();
+	}
+
+    public static File getApplicationFolder() {
+        // TODO: check if there is a better way to handle this
+        return new File(System.getProperty("user.dir"));
+    }
+
+	private void registerIcons() {
+		IconTheme theme = PluginServices.getIconTheme();
+		ClassLoader loader = Launcher.class.getClassLoader();
+
+		String[][] icons = {
+				// MultiSplashWindow
+				{ "main", "splash-default" },
+				// NewStatusBar
+				{ "main", "statusbar-info" },
+				{ "main", "statusbar-warning" },
+				{ "main", "statusbar-error" }
+		};
+		for( int i=0; i<icons.length; i++) {
+			try {
+				IconThemeHelper.registerIcon(icons[i][0], icons[i][1], Launcher.class);
+			} catch(Exception e) {
+				logger.info("Can't register icon '"+icons[i][0]+"' ("+icons[i][1]+").");
+			}
+		}
+		theme.setDefaultIcon(loader.getResource("images/main/default-icon.png" ));
+	}
+
+        private Properties loadProperties(File f) {
+            FileInputStream fin = null;
+            Properties p = null;
+            try {
+                fin = new FileInputStream(f);
+                p = new Properties();
+                p.load(fin);
+            } catch (IOException ex) {
+                // Do nothing
+            }
+            return p;
+        }
+
+	/**
+	 * Obtiene la personalizaci�n de los iconos, splash, fondo y el nombre de la
+	 * aplicaci�n.
+	 *
+	 * @return Theme
+	 */
+    private Theme getTheme(String pluginsDirectory) {
+        File infoFile = new File(Launcher.getApplicationFolder(), "package.info");
+        File themeFile = null;
+        List<Theme> themes = new ArrayList<Theme>();
+
+        // Try to get theme from args
+        String name = PluginServices.getArgumentByName("andamiTheme");
+        if ( name != null ) {
+            themeFile = new File(name);
+            logger.info("search andami-theme in {}", themeFile.getAbsolutePath());
+            if ( themeFile.exists() ) {
+                Theme theme = new Theme(loadProperties(infoFile));
+                theme.readTheme(themeFile);
+                logger.info("andami-theme found in {}", themeFile.getAbsolutePath());
+                return theme;
+            }
+        }
+
+        // Try to get theme from a plugin
+        File pluginsDir = new File(pluginsDirectory);
+        if ( !pluginsDir.isAbsolute() ) {
+            pluginsDir = new File(getApplicationFolder(), pluginsDirectory);
+        }
+        if ( pluginsDir.exists() ) {
+            logger.info("search andami-theme in plugins folder '"+pluginsDir.getAbsolutePath()+"'.");
+            File[] pluginDirs = pluginsDir.listFiles();
+            if ( pluginDirs.length > 0 ) {
+                for ( int i = 0; i < pluginDirs.length; i++ ) {
+                    File pluginThemeFile = new File(pluginDirs[i],
+                            "theme" + File.separator + "andami-theme.xml");
+                    if ( pluginThemeFile.exists() ) {
+                        Theme theme = new Theme(loadProperties(infoFile));
+                        theme.readTheme(pluginThemeFile);
+                        themes.add(theme);
+                    }
+                }
+            }
+        }
+
+        // Try to get theme from dir gvSIG in user home
+        themeFile = new File(getAppHomeDir(), "theme" + File.separator
+                + "andami-theme.xml");
+        logger.info("search andami-theme in user's home {}", themeFile
+                .getAbsolutePath());
+        if ( themeFile.exists() ) {
+            Theme theme = new Theme(loadProperties(infoFile));
+            theme.readTheme(themeFile);
+            themes.add(theme);
+        }
+
+        // Try to get theme from the instalation dir of gvSIG.
+        themeFile = new File(getApplicationDirectory(), "theme"
+                + File.separator + "andami-theme.xml");
+        logger.info("search andami-theme in installation folder {}", themeFile
+                .getAbsolutePath());
+        if ( themeFile.exists() ) {
+            Theme theme = new Theme(loadProperties(infoFile));
+            theme.readTheme(themeFile);
+            themes.add(theme);
+        }
+
+        Collections.sort(themes, new Comparator<Theme>() {
+           public int compare(Theme t1, Theme t2) {
+                return t2.getPriority()-t1.getPriority();
+            }
+        });
+        if( logger.isInfoEnabled() ) {
+            logger.info("Found andami-themes in:");
+            for( Theme theme : themes) {
+                logger.info(" - "+theme.getPriority()+", "+ theme.getSource().getAbsolutePath());
+            }
+        }
+        Theme theme = themes.get(0);
+        logger.info("Using theme '"+theme.getSource()+"'.");
+        return theme;
+    }
+
+	/**
+	 * Establece los datos que tengamos guardados respecto de la configuracion
+	 * del proxy.
+	 */
+	private void configureProxy() {
+		String host = prefs.get("firewall.http.host", "");
+		String port = prefs.get("firewall.http.port", "");
+
+		System.getProperties().put("http.proxyHost", host);
+		System.getProperties().put("http.proxyPort", port);
+
+		// Ponemos el usuario y clave del proxy, si existe
+		String proxyUser = prefs.get("firewall.http.user", null);
+		String proxyPassword = prefs.get("firewall.http.password", null);
+		if (proxyUser != null) {
+			System.getProperties().put("http.proxyUserName", proxyUser);
+			System.getProperties().put("http.proxyPassword", proxyPassword);
+
+			Authenticator.setDefault(new ProxyAuth(proxyUser, proxyPassword));
+		} else {
+			Authenticator.setDefault(new ProxyAuth("", ""));
+		}
+	}
+
+	/**
+	 * Recupera la geometr�a (tama�o, posic�n y estado) de la ventana principal
+	 * de Andami. TODO Pendiente de ver como se asigna un pluginServices para el
+	 * launcher.
+	 *
+	 * @author LWS
+	 */
+	private void restoreMDIStatus(XMLEntity xml) {
+		if (xml == null) {
+			xml = new XMLEntity();
+		}
+        // ====================================
+        // restore frame size
+        Dimension sz = new Dimension(
+            MainFrame.MAIN_FRAME_SIZE_DEFAULT[0],
+            MainFrame.MAIN_FRAME_SIZE_DEFAULT[1]);
+        if (xml.contains(MainFrame.MAIN_FRAME_SIZE)) {
+            int[] wh = xml.getIntArrayProperty(MainFrame.MAIN_FRAME_SIZE);
+            sz = new Dimension(wh[0], wh[1]);
+        }
+        frame.setSize(sz);
+        // ==========================================
+        // restore frame location
+        Point pos = new Point(
+            MainFrame.MAIN_FRAME_POS_DEFAULT[0],
+            MainFrame.MAIN_FRAME_POS_DEFAULT[1]);
+        if (xml.contains(MainFrame.MAIN_FRAME_POS)) {
+            int[] xy = xml.getIntArrayProperty(MainFrame.MAIN_FRAME_POS);
+            pos = new Point(xy[0], xy[1]);
+        }
+        frame.setLocation(pos);
+        // =============================================
+        // restore frame state (Maximized, minimized, etc);
+        int state = MainFrame.MAIN_FRAME_EXT_STATE_DEFAULT;
+        if (xml.contains(MainFrame.MAIN_FRAME_EXT_STATE)) {
+            state = xml.getIntProperty(MainFrame.MAIN_FRAME_EXT_STATE);
+        }
+        frame.setExtendedState(state);
+	}
+
+	private XMLEntity saveMDIStatus() {
+		XMLEntity xml = new XMLEntity();
+		// save frame size
+		int[] wh = new int[2];
+		wh[0] = frame.getWidth();
+		wh[1] = frame.getHeight();
+		xml.putProperty(MainFrame.MAIN_FRAME_SIZE, wh);
+		// save frame location
+		int[] xy = new int[2];
+		xy[0] = frame.getX();
+		xy[1] = frame.getY();
+		xml.putProperty(MainFrame.MAIN_FRAME_POS, xy);
+		// save frame status
+		xml.putProperty(MainFrame.MAIN_FRAME_EXT_STATE,
+		    frame.getExtendedState());
+		return xml;
+	}
+
+	private boolean validJVM() {
+                if( !SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_4)) {
+                    logger.warn("gvSIG requires Java version 1.4 or higher.");
+                    logger.warn("The Java HOME is '"+SystemUtils.getJavaHome().getAbsolutePath()+"'.");
+                    return false;
+                }
+                if( SystemUtils.isJavaAwtHeadless() ) {
+                    logger.warn("The java used by gvSIG does not contain the libraries for access to the graphical interface (AWT-headless)");
+                    logger.warn("The Java HOME is '"+SystemUtils.getJavaHome().getAbsolutePath()+"'.");
+                    return false;
+                }
+                return true;
+	}
+
+	private void loadPluginsPersistence() throws ConfigurationException {
+		XMLEntity entity = persistenceFromXML();
+
+		for (int i = 0; i < entity.getChildrenCount(); i++) {
+			XMLEntity plugin = entity.getChild(i);
+			String pName = plugin
+					.getStringProperty("com.iver.andami.pluginName");
+
+			if (pName.compareToIgnoreCase("com.iver.cit.gvsig") == 0) {
+				pName = "org.gvsig.app";
+			}
+			if (pluginsServices.get(pName) != null) {
+				((PluginServices) pluginsServices.get(pName))
+						.setPersistentXML(plugin);
+			} else {
+				if (pName.startsWith("Andami.Launcher")) {
+					restoreMDIStatus(plugin);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Salva la persistencia de los plugins.
+	 *
+	 * @author LWS
+	 */
+	private void savePluginPersistence() {
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		XMLEntity entity = new XMLEntity();
+
+		while (i.hasNext()) {
+			String pName = i.next();
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			XMLEntity ent = ps.getPersistentXML();
+
+			if (ent != null) {
+				ent.putProperty("com.iver.andami.pluginName", pName);
+				entity.addChild(ent);
+			}
+		}
+		XMLEntity ent = saveMDIStatus();
+		if (ent != null) {
+			ent.putProperty("com.iver.andami.pluginName", "Andami.Launcher");
+			entity.addChild(ent);
+		}
+		try {
+			persistenceToXML(entity);
+		} catch (ConfigurationException e1) {
+			this
+					.addError(
+							Messages
+									.getString("Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins"),
+							e1);
+		}
+	}
+
+	private void installPluginsLabels() {
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String name = i.next();
+			PluginConfig pc = pluginsConfig.get(name);
+			PluginServices ps = (PluginServices) pluginsServices.get(name);
+
+			LabelSet[] ls = pc.getLabelSet();
+
+			for (int j = 0; j < ls.length; j++) {
+				PluginClassLoader loader = ps.getClassLoader();
+
+				try {
+					Class clase = loader.loadClass(ls[j].getClassName());
+					frame.setStatusBarLabels(clase, ls[j].getLabel());
+				} catch (Throwable e) {
+					this.addError(
+							Messages.getString("Launcher.labelset_class"), e);
+				}
+			}
+		}
+	}
+
+	private String configureSkin(XMLEntity xml, String defaultSkin) {
+		if (defaultSkin == null) {
+			for (int i = 0; i < xml.getChildrenCount(); i++) {
+				if (xml.getChild(i).contains("Skin-Selected")) {
+					String className = xml.getChild(i).getStringProperty(
+							"Skin-Selected");
+					return className;
+				}
+			}
+		}
+		// return "com.iver.core.mdiManager.NewSkin";
+		return defaultSkin;
+	}
+
+	private void fixSkin(SkinExtension skinExtension,
+			PluginClassLoader pluginClassLoader) throws MDIManagerLoadException {
+		// now insert the skin selected.
+		MDIManagerFactory.setSkinExtension(skinExtension, pluginClassLoader);
+		// MDIManagerFactory.setSkinExtension(se,
+		// ps.getClassLoader());
+
+		Class<? extends IExtension> skinClass;
+
+		try {
+			skinClass = (Class<? extends IExtension>) pluginClassLoader
+					.loadClass(skinExtension.getClassName());
+
+			IExtension skinInstance = skinClass.newInstance();
+			ExtensionDecorator newExtensionDecorator = new ExtensionDecorator(
+					skinInstance, ExtensionDecorator.INACTIVE);
+			classesExtensions.put(skinClass, newExtensionDecorator);
+		} catch (ClassNotFoundException e) {
+			logger.error(Messages
+					.getString("Launcher.No_se_encontro_la_clase_mdi_manager"),
+					e);
+			throw new MDIManagerLoadException(e);
+		} catch (InstantiationException e) {
+			logger
+					.error(
+							Messages
+									.getString("Launcher.No_se_pudo_instanciar_la_clase_mdi_manager"),
+							e);
+			throw new MDIManagerLoadException(e);
+		} catch (IllegalAccessException e) {
+			logger
+					.error(
+							Messages
+									.getString("Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager"),
+							e);
+			throw new MDIManagerLoadException(e);
+		}
+
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @throws MDIManagerLoadException
+	 */
+	private void skinPlugin(String defaultSkin) throws MDIManagerLoadException {
+		XMLEntity entity = null;
+		try {
+			entity = persistenceFromXML();
+		} catch (ConfigurationException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		SkinExtension skinExtension = null;
+		PluginClassLoader pluginClassLoader = null;
+		List<SkinExtension> skinExtensions = new ArrayList<SkinExtension>();
+		while (i.hasNext()) {
+			String name = i.next();
+			PluginConfig pc = pluginsConfig.get(name);
+			PluginServices ps = pluginsServices.get(name);
+
+			if (pc.getExtensions().getSkinExtension() != null) {
+				// if (MDIManagerFactory.getSkinExtension() != null) {
+				// logger.warn(Messages.getString(
+				// "Launcher.Dos_skin_extension"));
+				// }
+
+				SkinExtension[] se = pc.getExtensions().getSkinExtension();
+				for (int numExten = 0; numExten < se.length; numExten++) {
+					skinExtensions.add(se[numExten]);
+				}
+				for (int j = 0; j < se.length; j++) {
+					String configuredSkin = this.configureSkin(entity,
+							defaultSkin);
+					if ((configuredSkin != null)
+							&& configuredSkin.equals(se[j].getClassName())) {
+						skinExtension = se[j];
+						pluginClassLoader = ps.getClassLoader();
+					}
+				}
+			}
+		}
+
+		if ((skinExtension != null) && (pluginClassLoader != null)) {
+			// configured skin was found
+			fixSkin(skinExtension, pluginClassLoader);
+		} else {
+			if (skinExtensions.contains("com.iver.core.mdiManager.NewSkin")) {
+				// try first NewSkin (from CorePlugin)
+				skinPlugin("com.iver.core.mdiManager.NewSkin");
+			} else if (skinExtensions.size() > 0) {
+				// try to load the first skin found
+				SkinExtension se = (SkinExtension) skinExtensions.get(0);
+				skinPlugin((String) se.getClassName());
+			} else {
+				throw new MDIManagerLoadException("No Skin-Extension installed");
+			}
+		}
+
+	}
+
+	private static void frameIcon(Theme theme) {
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pName = i.next();
+			PluginConfig pc = pluginsConfig.get(pName);
+			if (pc.getIcon() != null) {
+				if (theme.getIcon() != null) {
+					frame.setIconImage(theme.getIcon().getImage());
+				} else {
+
+					ImageIcon icon = PluginServices.getIconTheme().get(
+							pc.getIcon().getSrc());
+					frame.setIconImage(icon.getImage());
+
+				}
+				if (theme.getName() != null) {
+					frame.setTitlePrefix(theme.getName());
+				} else {
+					frame.setTitlePrefix(pc.getIcon().getText());
+				}
+				if (theme.getBackgroundImage() != null) {
+
+					PluginServices.getMDIManager().setBackgroundImage(
+							theme.getBackgroundImage(), theme.getTypeDesktop());
+				}
+			}
+		}
+	}
+
+	private void initializeExtensions() {
+
+		List<ClassLoader> classLoaders = new ArrayList<ClassLoader>(
+				pluginsOrdered.size());
+		classLoaders.add(getClass().getClassLoader());
+		Iterator<String> iter = pluginsOrdered.iterator();
+
+		// logger.debug("Initializing plugins libraries: ");
+		// while (iter.hasNext()) {
+		// String pName = (String) iter.next();
+		// PluginServices ps = (PluginServices) pluginsServices.get(pName);
+		// classLoaders.add(ps.getClassLoader());
+		// }
+		//
+		// // Create the libraries initializer and
+		// // initialize the plugin libraries
+		// new DefaultLibrariesInitializer(
+		// classLoaders.toArray(new ClassLoader[classLoaders.size()]))
+		// .fullInitialize();
+		//
+		// // Remove them all, we don't need them anymore
+		// classLoaders.clear();
+		// classLoaders = null;
+
+		logger.info("Initializing plugins: ");
+		// iter = pluginsOrdered.iterator();
+		while (iter.hasNext()) {
+			String pName = (String) iter.next();
+			logger.info("Initializing plugin " + pName);
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+
+			Extension[] exts = pc.getExtensions().getExtension();
+
+			TreeSet<Extension> orderedExtensions = new TreeSet<Extension>(
+					new ExtensionComparator());
+
+			for (int j = 0; j < exts.length; j++) {
+				if (!exts[j].getActive()) {
+					continue;
+				}
+
+				if (orderedExtensions.contains(exts[j])) {
+					logger.warn("Two extensions with the same priority ("
+							+ exts[j].getClassName() + ")");
+				}
+
+				orderedExtensions.add(exts[j]);
+			}
+
+			Iterator<Extension> e = orderedExtensions.iterator();
+
+			logger.info("Initializing extensions of plugin " + pName + ": ");
+			while (e.hasNext()) {
+				Extension extension = e.next();
+				org.gvsig.andami.plugins.IExtension extensionInstance;
+
+				try {
+					logger.info("Initializing " + extension.getClassName()
+							+ "...");
+					message(extension.getClassName() + "...");
+					Class<? extends IExtension> extensionClass = (Class<? extends IExtension>) ps
+							.getClassLoader().loadClass(
+									extension.getClassName());
+					extensionInstance = extensionClass.newInstance();
+					if(extensionInstance instanceof org.gvsig.andami.plugins.Extension){
+						((org.gvsig.andami.plugins.Extension)extensionInstance).setPlugin(ps);
+					} else {
+						logger.warn("The extension "+extensionClass.getName()+" don't extends of Extension.");
+					}
+
+					// CON DECORATOR
+					// ANTES: classesExtensions.put(extensionClass,
+					// extensionInstance);
+					// AHORA: CREAMOS UNA ExtensionDecorator y asignamos esta
+					// instancia para
+					// poder ampliar con nuevas propiedades (AlwaysVisible, por
+					// ejemplo)
+					// Para crear la nueva clase ExtensionDecorator, le pasamos
+					// como par�metro
+					// la extensi�n original que acabamos de crear
+					// 0-> Inactivo, controla la extension
+					// 1-> Siempre visible
+					// 2-> Invisible
+					ExtensionDecorator newExtensionDecorator = new ExtensionDecorator(
+							extensionInstance, ExtensionDecorator.INACTIVE);
+					classesExtensions
+							.put(extensionClass, newExtensionDecorator);
+
+					extensionInstance.initialize();
+					extensions.add(extensionInstance);
+
+				} catch (NoClassDefFoundError e1) {
+					this.addError("Can't find class extension ("
+							+ extension.getClassName() + ")", e1);
+				} catch (Throwable e1) {
+					this.addError("Can't initialize extension '"
+							+ extension.getClassName() + "'.", e1);
+				}
+			}
+		}
+	}
+
+	private void postInitializeExtensions() {
+		logger.info("PostInitializing extensions: ");
+
+		for (int i = 0; i < extensions.size(); i++) {
+			org.gvsig.andami.plugins.IExtension extensionInstance = (org.gvsig.andami.plugins.IExtension) extensions
+					.get(i);
+			String name = extensionInstance.getClass().getName();
+			logger.info("PostInitializing "	+ name + "...");
+			message(name + "...");
+			try {
+				extensionInstance.postInitialize();
+			} catch (Throwable ex) {
+				this.addError("postInitialize of extension '"
+						+ extensionInstance.getClass().getName() + "' failed",
+						ex);
+			}
+		}
+	}
+
+	private void registerActionOfExtensions(ActionInfoManager actionManager,
+			Enumeration<SkinExtensionType> extensiones, ClassLoader loader) {
+		ActionInfo actionInfo;
+		while (extensiones.hasMoreElements()) {
+			SkinExtensionType extension = extensiones.nextElement();
+			Class<? extends IExtension> classExtension;
+			try {
+				classExtension = (Class<? extends IExtension>) loader
+						.loadClass(extension.getClassName());
+
+				Enumeration<Action> actions = extension.enumerateAction();
+				while (actions.hasMoreElements()) {
+					Action action = actions.nextElement();
+					if (action.getName() == null) {
+						logger.info("invalid action name (null) in "+ extension.getClassName()+" of "+ loader.toString());
+					} else {
+						actionInfo = actionManager.createAction(
+								classExtension, action.getName(),
+								action.getLabel(), action.getActionCommand(),
+								action.getIcon(), action.getAccelerator(), action.getPosition(),
+								action.getTooltip());
+						actionManager.registerAction(actionInfo);
+						if( action.getPosition() < 100000000 ) {
+							logger.info("Invalid position in action ("+ actionInfo.toString()+ ").");
+							action.setPosition( action.getPosition() + 1000000000);
+						}
+					}
+				}
+
+				Enumeration<Menu> menus = extension.enumerateMenu();
+				while (menus.hasMoreElements()) {
+					Menu menu = menus.nextElement();
+					if (!menu.getIs_separator() ) {
+						actionInfo = actionManager.createAction(
+							classExtension, menu.getName(), menu.getText(),
+							menu.getActionCommand(), menu.getIcon(),
+							menu.getKey(), menu.getPosition(),
+							menu.getTooltip());
+						actionInfo = actionManager.registerAction(actionInfo);
+						if (actionInfo != null) {
+							menu.setActionCommand(actionInfo.getCommand());
+							menu.setTooltip(actionInfo.getTooltip());
+							menu.setIcon(actionInfo.getIconName());
+							menu.setPosition(actionInfo.getPosition());
+							menu.setKey(actionInfo.getAccelerator());
+							menu.setName(actionInfo.getName());
+						}
+					}
+					if( menu.getPosition() < 100000000 ) {
+						logger.info("Invalid position in menu ("+ menu.getText() + ").");
+						menu.setPosition( menu.getPosition() + 1000000000);
+					}
+
+				}
+				Enumeration<ToolBar> toolBars = extension.enumerateToolBar();
+				while (toolBars.hasMoreElements()) {
+					ToolBar toolBar = toolBars.nextElement();
+
+					Enumeration<ActionTool> actionTools = toolBar
+							.enumerateActionTool();
+					while (actionTools.hasMoreElements()) {
+						ActionTool actionTool = actionTools.nextElement();
+						actionInfo = actionManager.createAction(
+								classExtension, actionTool.getName(),
+								actionTool.getText(),
+								actionTool.getActionCommand(),
+								actionTool.getIcon(),
+								null,
+								actionTool.getPosition(),
+								actionTool.getTooltip());
+						actionInfo = actionManager.registerAction(actionInfo);
+						if (actionInfo != null) {
+							actionTool.setActionCommand(actionInfo.getCommand());
+							actionTool.setTooltip(actionInfo.getTooltip());
+							actionTool.setIcon(actionInfo.getIconName());
+							actionTool.setPosition(actionInfo.getPosition());
+							actionTool.setName(actionInfo.getName());
+						}
+					}
+
+					Enumeration<SelectableTool> selectableTool = toolBar
+							.enumerateSelectableTool();
+					while (selectableTool.hasMoreElements()) {
+						SelectableTool actionTool = selectableTool
+								.nextElement();
+						actionInfo = actionManager.createAction(
+								classExtension, actionTool.getName(),
+								actionTool.getText(),
+								actionTool.getActionCommand(),
+								actionTool.getIcon(),
+								null,
+								actionTool.getPosition(),
+								actionTool.getTooltip());
+						actionInfo = actionManager.registerAction(actionInfo);
+						if (actionInfo != null) {
+							actionTool.setActionCommand(actionInfo.getCommand());
+							actionTool.setTooltip(actionInfo.getTooltip());
+							actionTool.setIcon(actionInfo.getIconName());
+							actionTool.setPosition(actionInfo.getPosition());
+							actionTool.setName(actionInfo.getName());
+						}
+					}
+				}
+			} catch (ClassNotFoundException e) {
+				logger.warn(
+						"Can't register actions of extension '"
+								+ extension.getClassName() + "'", e);
+			}
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private void registerActions() {
+		logger.info("registerActions");
+
+		ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+		Iterator<String> it = pluginsConfig.keySet().iterator();
+
+		while (it.hasNext()) {
+			String pluginName = it.next();
+			PluginConfig pluginConfig = pluginsConfig.get(pluginName);
+			PluginServices pluginService = pluginsServices.get(pluginName);
+			PluginClassLoader loader =  pluginService.getClassLoader();
+
+			logger.info("registerActions of plugin '"+pluginName+"'.");
+
+			Extensions extensionConfig = pluginConfig.getExtensions();
+
+
+			Enumeration<SkinExtensionType> extensiones = extensionConfig.enumerateExtension();
+			registerActionOfExtensions(actionManager, extensiones, loader);
+
+			Enumeration<SkinExtensionType> skinSxtensiones = extensionConfig.enumerateSkinExtension();
+			registerActionOfExtensions(actionManager, skinSxtensiones, loader);
+
+			PopupMenus pluginPopupMenus = pluginConfig.getPopupMenus();
+			if (pluginPopupMenus != null) {
+				PopupMenu[] menus1 = pluginPopupMenus.getPopupMenu();
+				for (int j = 0; j < menus1.length; j++) {
+					PopupMenu popupMenu = menus1[j];
+					Enumeration<Menu> menus2 = popupMenu.enumerateMenu();
+					while (menus2.hasMoreElements()) {
+						Menu menu = menus2.nextElement();
+						if (!menu.getIs_separator() ) {
+							if( menu.getName() == null) {
+								logger.info("Null name for popmenu '"+menu.getText()+"' in plugin "+ pluginService.getPluginName() );
+							} else {
+								ActionInfo actionInfo = actionManager.getAction(menu.getName());
+								if( actionInfo!=null ) {
+									menu.setActionCommand(actionInfo.getCommand());
+									menu.setTooltip(actionInfo.getTooltip());
+									menu.setIcon(actionInfo.getIconName());
+									menu.setPosition(actionInfo.getPosition());
+									menu.setText( actionInfo.getLabel());
+									menu.setKey(actionInfo.getAccelerator());
+								}
+							}
+						}
+					}
+				}
+			}
+
+
+		}
+	}
+
+
+	private TreeSet<SortableMenu> getOrderedMenus() {
+
+		TreeSet<SortableMenu> orderedMenus = new TreeSet<SortableMenu>(
+				new MenuComparator());
+
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pName = i.next();
+			try {
+				PluginServices ps = pluginsServices.get(pName);
+				PluginConfig pc = pluginsConfig.get(pName);
+
+				Extension[] exts = pc.getExtensions().getExtension();
+
+				for (int j = 0; j < exts.length; j++) {
+					if (!exts[j].getActive()) {
+						continue;
+					}
+
+					Menu[] menus = exts[j].getMenu();
+
+					for (int k = 0; k < menus.length; k++) {
+						SortableMenu sm = new SortableMenu(ps.getClassLoader(),
+								exts[j], menus[k]);
+
+						if (orderedMenus.contains(sm)) {
+							this
+									.addError(Messages
+											.getString("Launcher.Two_menus_with_the_same_position")
+											+ " - "
+											+ menus[k].getText()
+											+ " - " + exts[j].getClassName());
+						}
+
+						orderedMenus.add(sm);
+					}
+				}
+
+				// Se instalan las extensiones de MDI
+				SkinExtension[] skinExts = pc.getExtensions()
+						.getSkinExtension();
+				for (int j = 0; j < skinExts.length; j++) {
+
+					if (skinExts[j] != null) {
+						Menu[] menu = skinExts[j].getMenu();
+
+						for (int k = 0; k < menu.length; k++) {
+							SortableMenu sm = new SortableMenu(ps
+									.getClassLoader(), skinExts[j], menu[k]);
+
+							if (orderedMenus.contains(sm)) {
+								this
+										.addError(Messages
+												.getString("Launcher.Two_menus_with_the_same_position")
+												+ skinExts[j].getClassName());
+							}
+
+							orderedMenus.add(sm);
+						}
+					}
+				}
+
+			} catch (Throwable e) {
+				addError("Error initializing menus of plugin '" + pName + "'",
+						e);
+			}
+
+		}
+
+		return orderedMenus;
+	}
+
+	private void installPluginsMenus() {
+		logger.info("installPluginsMenus");
+
+		TreeSet<SortableMenu> orderedMenus = getOrderedMenus();
+
+		// Se itera por los menus ordenados
+		Iterator<SortableMenu> e = orderedMenus.iterator();
+
+		// Se ordenan los menues
+		while (e.hasNext()) {
+                    try {
+                            SortableMenu sm = e.next();
+                            logger.debug(sm.menu.getPosition()+":"+sm.menu.getText()+":"+sm.loader.getPluginName()+":"+sm.extension.getClassName());
+                            frame.addMenu(sm.loader, sm.extension, sm.menu);
+                    } catch (Throwable ex) {
+                        this.addError(
+                            Messages.getString("Launcher.No_se_encontro_la_clase_de_la_extension"),
+                            ex
+                        );
+                    }
+		}
+	}
+
+	public class PluginMenuItem {
+		private Menu menu;
+		private PluginClassLoader loader;
+		private SkinExtensionType extension;
+
+		PluginMenuItem(PluginClassLoader loader,
+				SkinExtensionType extension, Menu menu) {
+			this.menu = menu;
+			this.loader = loader;
+			this.extension = extension;
+		}
+
+		public PluginServices getPlugin() {
+			String pluginName = loader.getPluginName();
+			return PluginServices.getPluginServices(pluginName);
+		}
+
+		public String getExtensionName() {
+			return this.extension.getClassName();
+		}
+
+		public IExtension getExtension() {
+			Class<?> extensionClass;
+			try {
+				extensionClass = loader.loadClass(this.extension.getClassName());
+			} catch (ClassNotFoundException e) {
+				return null;
+			}
+			return PluginServices.getExtension(extensionClass);
+		}
+
+		public String getText() {
+			return this.menu.getText();
+		}
+
+		public long getPosition() {
+			return this.menu.getPosition();
+		}
+
+		public String getName() {
+			return this.menu.getName();
+		}
+
+		public boolean isParent() {
+			return menu.getIs_separator();
+		}
+
+		public String getPluginName() {
+			return this.loader.getPluginName();
+		}
+
+		public ActionInfo getAction() {
+			ActionInfoManager manager = PluginsLocator.getActionInfoManager();
+			return manager.getAction(this.menu.getName());
+		}
+	}
+
+	public List<PluginMenuItem> getPluginMenuItems() {
+		List<PluginMenuItem> menuItems = new ArrayList<Launcher.PluginMenuItem>();
+
+		TreeSet<SortableMenu> orderedMenus = getOrderedMenus();
+		Iterator<SortableMenu> e = orderedMenus.iterator();
+		while (e.hasNext()) {
+				SortableMenu sm = e.next();
+				PluginMenuItem item = new PluginMenuItem(sm.loader, sm.extension, sm.menu);
+				menuItems.add(item);
+		}
+		return menuItems;
+	}
+
+
+	/**
+	 * Installs the menus, toolbars, actiontools, selectable toolbars and
+	 * combos. The order in which they are shown is determined here.
+	 */
+	private void installPluginsControls() {
+		logger.info("installPluginsControls (toolbars)");
+
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		Map<Extension, PluginServices> extensionPluginServices = new HashMap<Extension, PluginServices>();
+		Map<Extension, PluginConfig> extensionPluginConfig = new HashMap<Extension, PluginConfig>();
+		Set<Extension> orderedExtensions = new TreeSet<Extension>(
+				new ExtensionComparator());
+
+		// First of all, sort the extensions.
+		// We need to iterate on the plugins, and iterate on each plugin's
+		// extensions
+		// (each plugin may contain one or more extensions)
+		while (i.hasNext()) { // iterate on the plugins
+			String pName = i.next();
+			try {
+				PluginConfig pc = pluginsConfig.get(pName);
+				PluginServices ps = pluginsServices.get(pName);
+
+				Extension[] exts = pc.getExtensions().getExtension();
+
+				for (int j = 0; j < exts.length; j++) { // iterate on the
+					// extensions
+					String cname = "unknow";
+					try {
+						cname = exts[j].getClassName();
+						if (exts[j].getActive()
+								&& !cname.equals(LibraryExtension.class
+										.getName())) {
+							if (orderedExtensions.contains(exts[j])) {
+								this
+										.addError(Messages
+												.getString("Launcher.Two_extensions_with_the_same_priority")
+												+ cname);
+							}
+
+							orderedExtensions.add(exts[j]);
+							extensionPluginServices.put(exts[j], ps);
+							extensionPluginConfig.put(exts[j], pc);
+						}
+					} catch (Throwable e) {
+						addError("Error initializing controls of plugin '"
+								+ pName + "' extension '" + cname + "'", e);
+					}
+				}
+			} catch (Throwable e) {
+				addError("Error initializing controls of plugin '" + pName
+						+ "'", e);
+			}
+		}
+
+		TreeSet<SortableTool> orderedTools = new TreeSet<SortableTool>(
+				new ToolComparator());
+		Iterator<Extension> e = orderedExtensions.iterator();
+
+		// sort the toolbars and tools from 'normal' extensions (actiontools,
+		// selectabletools)
+		// and load the combo-scales and combo-buttons for the status bar
+		while (e.hasNext()) {
+			Extension ext = e.next();
+			String extName = "unknow";
+			try {
+				extName = ext.getClassName();
+				ToolBar[] toolbars = ext.getToolBar();
+
+				// get tools from toolbars
+				for (int k = 0; k < toolbars.length; k++) {
+					ActionTool[] tools = toolbars[k].getActionTool();
+
+					for (int t = 0; t < tools.length; t++) {
+						SortableTool sm = new SortableTool(
+								(extensionPluginServices.get(ext))
+										.getClassLoader(), ext, toolbars[k],
+								tools[t]);
+						orderedTools.add(sm);
+					}
+
+					SelectableTool[] sTools = toolbars[k].getSelectableTool();
+
+					for (int t = 0; t < sTools.length; t++) {
+						SortableTool sm = new SortableTool(
+								(extensionPluginServices.get(ext))
+										.getClassLoader(), ext, toolbars[k],
+								sTools[t]);
+						orderedTools.add(sm);
+					}
+				}
+
+				// get controls for statusBar
+				PluginServices ps = extensionPluginServices.get(ext);
+				PluginClassLoader loader = ps.getClassLoader();
+
+				// ArrayList componentList = new ArrayList();
+				ComboScale[] comboScaleArray = ext.getComboScale();
+				for (int k = 0; k < comboScaleArray.length; k++) {
+					org.gvsig.gui.beans.controls.comboscale.ComboScale combo = new org.gvsig.gui.beans.controls.comboscale.ComboScale();
+					String label = comboScaleArray[k].getLabel();
+					if (label != null) {
+						combo.setLabel(label);
+					}
+					String name = comboScaleArray[k].getName();
+					if (name != null) {
+						combo.setName(name);
+					}
+					String[] elementsString = ((String) comboScaleArray[k]
+							.getElements()).split(";");
+					long[] elements = new long[elementsString.length];
+					for (int currentElem = 0; currentElem < elementsString.length; currentElem++) {
+						try {
+							elements[currentElem] = Long
+									.parseLong(elementsString[currentElem]);
+						} catch (NumberFormatException nfex1) {
+							this
+									.addError(ext.getClassName()
+											+ " -- "
+											+ Messages
+													.getString("error_parsing_comboscale_elements"));
+							elements[currentElem] = 0;
+						}
+					}
+					combo.setItems(elements);
+					try {
+						long value = Long.parseLong((String) comboScaleArray[k]
+								.getValue());
+						combo.setScale(value);
+					} catch (NumberFormatException nfex2) {
+						this
+								.addError(ext.getClassName()
+										+ " -- "
+										+ Messages
+												.getString("error_parsing_comboscale_value"));
+					}
+					try {
+						frame.addStatusBarControl(loader.loadClass(ext
+								.getClassName()), combo);
+					} catch (ClassNotFoundException e1) {
+						this
+								.addError(
+										Messages
+												.getString("Launcher.error_getting_class_loader_for_status_bar_control"),
+										e1);
+					}
+				}
+
+				ComboButton[] comboButtonArray = ext.getComboButton();
+				for (int k = 0; k < comboButtonArray.length; k++) {
+					ComboButtonElement[] elementList = comboButtonArray[k]
+							.getComboButtonElement();
+					org.gvsig.gui.beans.controls.combobutton.ComboButton combo = new org.gvsig.gui.beans.controls.combobutton.ComboButton();
+					String name = comboButtonArray[k].getName();
+					if (name != null) {
+						combo.setName(name);
+					}
+					for (int currentElement = 0; currentElement < elementList.length; currentElement++) {
+						ComboButtonElement element = elementList[currentElement];
+						ImageIcon icon;
+						URL iconLocation = loader
+								.getResource(element.getIcon());
+						if (iconLocation == null) {
+							this.addError(Messages.getString("Icon_not_found_")
+									+ element.getIcon());
+						} else {
+							icon = new ImageIcon(iconLocation);
+							JButton button = new JButton(icon);
+							combo.addButton(button);
+							button.setActionCommand(element.getActionCommand());
+						}
+					}
+					try {
+						frame.addStatusBarControl(loader.loadClass(ext
+								.getClassName()), combo);
+					} catch (ClassNotFoundException e1) {
+						this
+								.addError(
+										Messages
+												.getString("Launcher.error_getting_class_loader_for_status_bar_control"),
+										e1);
+					}
+				}
+			} catch (Throwable e2) {
+				addError(
+						"Error initializing tools and status bars of extension '"
+								+ extName + "'", e2);
+			}
+		}
+
+		// Add the tools from MDI extensions to the ordered tool-list, so that
+		// we get a sorted list containing all the tools
+		i = pluginsConfig.keySet().iterator();
+		while (i.hasNext()) {
+			String pName = (String) i.next();
+			try {
+				PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+				PluginServices ps = (PluginServices) pluginsServices.get(pName);
+
+				SkinExtension[] skinExts = pc.getExtensions()
+						.getSkinExtension();
+				for (int j = 0; j < skinExts.length; j++) {
+
+					if (skinExts[j] != null) {
+						ToolBar[] toolbars = skinExts[j].getToolBar();
+
+						for (int k = 0; k < toolbars.length; k++) {
+							ActionTool[] tools = toolbars[k].getActionTool();
+
+							for (int t = 0; t < tools.length; t++) {
+								SortableTool stb = new SortableTool(ps
+										.getClassLoader(), skinExts[j],
+										toolbars[k], tools[t]);
+								orderedTools.add(stb);
+							}
+
+							SelectableTool[] sTools = toolbars[k]
+									.getSelectableTool();
+
+							for (int t = 0; t < sTools.length; t++) {
+								SortableTool stb = new SortableTool(ps
+										.getClassLoader(), skinExts[j],
+										toolbars[k], sTools[t]);
+								orderedTools.add(stb);
+							}
+						}
+					}
+				}
+				// Install popup menus
+				PopupMenus pus = pc.getPopupMenus();
+				if (pus != null) {
+					PopupMenu[] menus = pus.getPopupMenu();
+					for (int j = 0; j < menus.length; j++) {
+						String menuName = "(unknow)";
+						try  {
+							menuName = menus[j].getName();
+							frame.addPopupMenu(ps.getClassLoader(), menus[j]);
+						} catch(Throwable ex) {
+							addError("Error adding popup menu' "+ menuName +"' in plugin '"+pName+"'.");
+						}
+					}
+				}
+			} catch (Throwable e3) {
+				addError("Error initializing skins of the plugin '" + pName
+						+ "'", e3);
+			}
+		}
+
+		// loop on the ordered extension list, to add them to the interface in
+		// an ordered way
+		Iterator<SortableTool> t = orderedTools.iterator();
+		while (t.hasNext()) {
+			SortableTool stb = t.next();
+			try {
+				if (stb.actiontool != null) {
+					frame.addTool(stb.loader, stb.extension, stb.toolbar,
+							stb.actiontool);
+				} else {
+					frame.addTool(stb.loader, stb.extension, stb.toolbar,
+							stb.selectabletool);
+				}
+			} catch (ClassNotFoundException ex) {
+				this
+						.addError(
+								Messages
+										.getString("Launcher.No_se_encontro_la_clase_de_la_extension"),
+								ex);
+			} catch (Throwable e2) {
+				addError("Error adding tools to the interface of extension '"
+						+ stb.extension.getClassName() + "'", e2);
+			}
+		}
+	}
+
+	/**
+	 * Adds new plugins to the the andami-config file.
+	 */
+	private void updateAndamiConfig() {
+		Set<String> olds = new HashSet<String>();
+
+		Plugin[] plugins = andamiConfig.getPlugin();
+
+		for (int i = 0; i < plugins.length; i++) {
+			olds.add(plugins[i].getName());
+		}
+
+		Iterator<PluginServices> i = pluginsServices.values().iterator();
+
+		while (i.hasNext()) {
+			PluginServices ps = i.next();
+
+			if (!olds.contains(ps.getPluginName())) {
+				Plugin p = new Plugin();
+				p.setName(ps.getPluginName());
+				p.setUpdate(false);
+
+				andamiConfig.addPlugin(p);
+			}
+		}
+	}
+
+        private URL[] getPluginClasspathURLs(PluginConfig pluginConfig) {
+            URL[] urls = null;
+
+            String libfolderPath = pluginConfig.getLibraries().getLibraryDir();
+            File libFolderFile = new File(pluginConfig.getPluginFolder(), libfolderPath);
+
+            File[] files = libFolderFile.listFiles(new FileFilter() {
+
+                public boolean accept(File pathname) {
+                    return (pathname.getName().toUpperCase().endsWith(".JAR")
+                            || pathname.getName().toUpperCase().endsWith(".ZIP"));
+                }
+            });
+            if ( files == null ) {
+                urls = new URL[0];
+            } else {
+                urls = new URL[files.length];
+                for ( int j = 0; j < files.length; j++ ) {
+                    try {
+                        urls[j] = new URL("file:" + files[j]);
+                    } catch (MalformedURLException e) {
+                        logger.warn("Can't add file '" + files[j] + "' to the classpath of plugin '" + pluginConfig.getPluginName() + "'.");
+                    }
+                }
+            }
+            return urls;
+        }
+
+        private void loadPluginServices() {
+             Set<String> installed = new HashSet<String>();
+
+             // Se itera hasta que est�n todos instalados
+             while ( installed.size() != pluginsConfig.size() ) {
+                 boolean circle = true;
+
+                 // Hacemos una pasada por todos los plugins
+                 Iterator<String> i = pluginsConfig.keySet().iterator();
+
+                 while ( i.hasNext() ) {
+                     String pluginName = i.next();
+                     PluginConfig config = (PluginConfig) pluginsConfig
+                             .get(pluginName);
+
+                     if ( installed.contains(pluginName) ) {
+                         continue;
+                     }
+
+                     // Se obtienen las dependencias y sus class loaders
+                     boolean ready = true;
+                     Depends[] dependencies = config.getDepends();
+                     List<PluginClassLoader> loaders = new ArrayList<PluginClassLoader>();
+
+                     for ( int j = 0; j < dependencies.length; j++ ) {
+                         Depends dependency = dependencies[j];
+                         String dependencyName = dependency.getPluginName();
+                         PluginConfig dependencyPluginConfig = pluginsConfig.get(dependencyName);
+                         PluginServices dependencyPluginService = pluginsServices.get(dependencyName);
+
+                         if ( getDeprecatedPluginNames().contains(dependencyName) ) {
+                             logger.warn("Plugin '" + pluginName + "' use a deprecated plugin name '" + dependencyName + "' as dependency. Must use '" + pluginsConfig.getMainKey(dependencyName) + "'.");
+                         }
+                         if ( dependencyPluginConfig == null ) {
+                             if ( dependency.getOptional() ) {
+                                 this.logger.info("Plugin '" + pluginName + "', optional dependency '" + dependencyName + "' not found");
+                             } else {
+                                 logger.warn("Dependencia no resuelta en plugin "
+                                         + pluginName
+                                         + ": "
+                                         + dependencies[j].getPluginName());
+                             }
+                         } else {
+                             if ( dependencyPluginService != null
+                                     && installed.contains(dependencyPluginService.getPluginName()) ) {
+                                 loaders.add(dependencyPluginService.getClassLoader());
+                             } else {
+     //							if( !dependency.getOptional() ) {
+                                 ready = false;
+     //							}
+                             }
+                         }
+                     }
+
+                                     // Si no est�n sus dependencias satisfechas se aborta la
+                     // instalaci�n
+                     if ( !ready ) {
+                         continue;
+                     }
+
+                     // Se genera el class loader
+                     URL[] urls = getPluginClasspathURLs(config);
+                     PluginClassLoader loader;
+
+                     try {
+                         loader = new PluginClassLoader(
+                                 urls,
+                                 config.getPluginFolder().getAbsolutePath(),
+                                 Launcher.class.getClassLoader(),
+                                 loaders
+                         );
+                         PluginServices ps = new PluginServices(
+                                 loader,
+                                 PluginsConfig.getAlternativeNames(config)
+                         );
+                         logger.info("Plugin '"+pluginName+"' created");
+                         pluginsServices.put(ps.getPluginName(), ps);
+                         installed.add(pluginName);
+                         pluginsOrdered.add(pluginName);
+
+                         circle = false;
+                     } catch (IOException e) {
+                         logger.warn("Can't create PluginServices for '"+config.getPluginName()+"'.",e);
+                         pluginsConfig.remove(pluginName);
+                         i = pluginsConfig.keySet().iterator();
+                     }
+                 }
+
+                 if ( circle ) {
+                     dumpPluginsDependencyInformation();
+                     this.addError("Has circular dependencies betewn plugins");
+                     break;
+                 }
+             }
+
+             // Se eliminan los plugins que no fueron instalados
+             Iterator<String> i = pluginsConfig.keySet().iterator();
+
+             while ( i.hasNext() ) {
+                 String pluginName = i.next();
+                 PluginServices ps = (PluginServices) pluginsServices
+                         .get(pluginName);
+
+                 if ( ps == null ) {
+                     pluginsConfig.remove(pluginName);
+                     i = pluginsConfig.keySet().iterator();
+                 }
+             }
+         }
+
+	private void dumpPluginsDependencyInformation() {
+		logger.info("Plugin dependency information");
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+		while (i.hasNext()) {
+			String pluginName = i.next();
+			PluginConfig config = (PluginConfig) pluginsConfig.get(pluginName);
+			logger.info("  Plugin "+ pluginName);
+			Depends[] dependencies = config.getDepends();
+			for (int j = 0; j < dependencies.length; j++) {
+				Depends dependency = dependencies[j];
+				String dependencyName = dependency.getPluginName();
+				logger.info("    Dependency "+ dependencyName);
+			}
+		}
+	}
+
+	private void pluginsMessages() {
+		Iterator<String> iterator = pluginsOrdered.iterator();
+		PluginConfig config;
+		PluginServices ps;
+
+		while (iterator.hasNext()) {
+			String pluginName = iterator.next();
+			config = pluginsConfig.get(pluginName);
+			ps = pluginsServices.get(pluginName);
+
+			if ((config.getResourceBundle() != null)
+					&& !config.getResourceBundle().getName().equals("")) {
+				// add the locale files associated with the plugin
+				org.gvsig.i18n.Messages.addResourceFamily(config
+						.getResourceBundle().getName(), ps.getClassLoader(),
+						pluginName);
+				org.gvsig.i18n.Messages.addResourceFamily("i18n."+config
+						.getResourceBundle().getName(), ps.getClassLoader(),
+						pluginName);
+			}
+		}
+	}
+
+	static public PluginServices getPluginServices(String name) {
+		return (PluginServices) pluginsServices.get(name);
+	}
+
+	static String getPluginsDir() {
+		return andamiConfig.getPluginsDirectory();
+	}
+
+        static File getPluginFolder(String pluginName) {
+            return pluginsConfig.get(pluginName).getPluginFolder();
+        }
+
+	static void setPluginsDir(String s) {
+		andamiConfig.setPluginsDirectory(s);
+	}
+
+	static MDIFrame getMDIFrame() {
+		return frame;
+	}
+
+
+        private PluginsConfig loadPluginConfigs() {
+            InstallerManager installerManager = InstallerLocator.getInstallerManager();
+            List<File> repositoriesFolders = installerManager.getLocalAddonRepositories("plugin");
+            for ( File repositoryFolder : repositoriesFolders ) {
+                logger.info("Loading plugins configuration from repository folder " + repositoryFolder.getAbsolutePath() + ".");
+
+                if ( !repositoryFolder.exists() ) {
+                    logger.warn("Plugins repository folder not found '" + repositoryFolder.getAbsolutePath() + "'.");
+                    continue;
+                }
+
+                File[] pluginsFolders = repositoryFolder.listFiles();
+                if ( pluginsFolders.length == 0 ) {
+                    logger.info("Plugins repository folder is empty '" + repositoryFolder.getAbsolutePath() + "'.");
+                    continue;
+                }
+
+                for ( int i = 0; i < pluginsFolders.length; i++ ) {
+                    File pluginFolder = pluginsFolders[i];
+                    if ( !pluginFolder.isDirectory() ) {
+                        continue;
+                    }
+                    String pluginName = pluginFolder.getName();
+                    File pluginConfigFile = new File(pluginFolder, "config.xml");
+                    if ( !pluginConfigFile.exists() ) {
+                        logger.info("Plugin '" + pluginName + "' not has a config.xml file (" + pluginConfigFile.getAbsolutePath() + ".");
+                        continue;
+                    }
+                    try {
+                        FileInputStream is = new FileInputStream(pluginConfigFile);
+                        Reader xml = org.gvsig.utils.xml.XMLEncodingUtils.getReader(is);
+                        if ( xml == null ) {
+                            // the encoding was not correctly detected, use system default
+                            xml = new FileReader(pluginConfigFile);
+                        } else {
+                            // use a buffered reader to improve performance
+                            xml = new BufferedReader(xml);
+                        }
+                        PluginConfig pluginConfig = (PluginConfig) PluginConfig.unmarshal(xml);
+                        pluginConfig.setPluginName(pluginName);
+                        pluginConfig.setPluginFolder(pluginFolder);
+                        pluginsConfig.put(pluginName, pluginConfig);
+
+                    } catch (FileNotFoundException e) {
+                        logger.info("Can't read plugin config file from plugin '" + pluginName + "' ('" + pluginConfigFile.getAbsolutePath() + ").");
+
+                    } catch (MarshalException e) {
+                        logger.warn("Can't load plugin the config file from plugin '" + pluginName + "' is incorect. " + e.getMessage() + " ('" + pluginConfigFile.getAbsolutePath() + ").", e);
+
+                    } catch (ValidationException e) {
+                        logger.warn("Can't load plugin the config file from plugin '" + pluginName + "' is invalid. " + e.getMessage() + " ('" + pluginConfigFile.getAbsolutePath() + ").", e);
+
+                    }
+                }
+            }
+            return pluginsConfig;
+        }
+
+	private static Locale getLocale(String language, String country,
+			String variant) {
+		if (variant != null) {
+			return new Locale(language, country, variant);
+		} else if (country != null) {
+			return new Locale(language, country);
+		} else if (language != null) {
+			return new Locale(language);
+		} else {
+			return new Locale("es");
+		}
+	}
+
+	private static void andamiConfigToXML(String file) throws IOException,
+			MarshalException, ValidationException {
+		// write on a temporary file in order to not destroy current file if
+		// there is some problem while marshaling
+		File tmpFile = new File(file + "-"
+				+ DateTime.getCurrentDate().getTime());
+		File xml = new File(file);
+		File parent = xml.getParentFile();
+		parent.mkdirs();
+
+		BufferedOutputStream os = new BufferedOutputStream(
+				new FileOutputStream(tmpFile));
+		OutputStreamWriter writer = new OutputStreamWriter(os, CASTORENCODING);
+		andamiConfig.marshal(writer);
+		writer.close();
+
+		// if marshaling process finished correctly, move the file to the
+		// correct one
+		xml.delete();
+		if (!tmpFile.renameTo(xml)) {
+			// if rename was not succesful, try copying it
+			FileChannel sourceChannel = new FileInputStream(tmpFile)
+					.getChannel();
+			FileChannel destinationChannel = new FileOutputStream(xml)
+					.getChannel();
+			sourceChannel.transferTo(0, sourceChannel.size(),
+					destinationChannel);
+			sourceChannel.close();
+			destinationChannel.close();
+		}
+	}
+
+	private static void andamiConfigFromXML(String file)
+			throws ConfigurationException {
+		File xml = new File(file);
+
+		InputStreamReader reader = null;
+		try {
+			// Se lee la configuraci�n
+			reader = XMLEncodingUtils.getReader(xml);
+			andamiConfig = (AndamiConfig) AndamiConfig.unmarshal(reader);
+		} catch (FileNotFoundException e) {
+			// Si no existe se ponen los valores por defecto
+			andamiConfig = getDefaultAndamiConfig();
+		} catch (MarshalException e) {
+			// try to close the stream, maybe it remains open
+			if (reader != null) {
+				try {
+					reader.close();
+				} catch (IOException e1) {
+				}
+			}
+			// if there was a problem reading the file, backup it and create a
+			// new one with default values
+			String backupFile = file + "-"
+					+ DateTime.getCurrentDate().getTime();
+			NotificationManager
+					.addError(
+							Messages
+									.getString("Error_reading_andami_config_New_file_created_A_backup_was_made_on_")
+									+ backupFile, new ConfigurationException(e));
+			xml.renameTo(new File(backupFile));
+			andamiConfig = getDefaultAndamiConfig();
+		} catch (ValidationException e) {
+			throw new ConfigurationException(e);
+		}
+	}
+
+	private static AndamiConfig getDefaultAndamiConfig() {
+		AndamiConfig andamiConfig = new AndamiConfig();
+
+		Andami andami = new Andami();
+		andami.setUpdate(true);
+		andamiConfig.setAndami(andami);
+		andamiConfig.setLocaleCountry(Locale.getDefault().getCountry());
+		andamiConfig.setLocaleLanguage(Locale.getDefault().getLanguage());
+		andamiConfig.setLocaleVariant(Locale.getDefault().getVariant());
+
+		if (System.getProperty("javawebstart.version") != null) // Es java web
+		// start)
+		{
+			andamiConfig
+					.setPluginsDirectory(new File(appHomeDir, "extensiones")
+							.getAbsolutePath());
+		} else {
+			andamiConfig.setPluginsDirectory(new File(appName, "extensiones")
+					.getAbsolutePath());
+		}
+
+		andamiConfig.setPlugin(new Plugin[0]);
+		return andamiConfig;
+	}
+
+	private static XMLEntity persistenceFromXML() throws ConfigurationException {
+		File xml = getPluginsPersistenceFile(true);
+
+		if (xml.exists()) {
+			InputStreamReader reader = null;
+
+			try {
+				reader = XMLEncodingUtils.getReader(xml);
+				XmlTag tag = (XmlTag) XmlTag.unmarshal(reader);
+				return new XMLEntity(tag);
+			} catch (FileNotFoundException e) {
+				throw new ConfigurationException(e);
+			} catch (MarshalException e) {
+
+				// try to reopen with default encoding (for backward
+				// compatibility)
+				try {
+					reader = new FileReader(xml);
+					XmlTag tag = (XmlTag) XmlTag.unmarshal(reader);
+					return new XMLEntity(tag);
+
+				} catch (MarshalException ex) {
+					// try to close the stream, maybe it remains open
+					if (reader != null) {
+						try {
+							reader.close();
+						} catch (IOException e1) {
+						}
+					}
+					// backup the old file
+					String backupFile = getPluginsPersistenceFile(true)
+							.getPath()
+							+ "-" + DateTime.getCurrentDate().getTime();
+					NotificationManager
+							.addError(
+									Messages
+											.getString("Error_reading_plugin_persinstence_New_file_created_A_backup_was_made_on_")
+											+ backupFile,
+									new ConfigurationException(e));
+					xml.renameTo(new File(backupFile));
+					// create a new, empty configuration
+					return new XMLEntity();
+				} catch (FileNotFoundException ex) {
+					return new XMLEntity();
+				} catch (ValidationException ex) {
+					throw new ConfigurationException(e);
+				}
+			} catch (ValidationException e) {
+				throw new ConfigurationException(e);
+			}
+		} else {
+			return new XMLEntity();
+		}
+	}
+
+	private static File getPluginsPersistenceFile(boolean read) {
+		if (read) {
+			File pluginsPersistenceFile = new File(getAppHomeDir(),
+					"plugins-persistence-2_0.xml");
+			if (pluginsPersistenceFile.exists()) {
+				return pluginsPersistenceFile;
+			}
+			pluginsPersistenceFile = new File(getAppHomeDir(),
+					"plugins-persistence.xml");
+			if (pluginsPersistenceFile.exists()) {
+				return pluginsPersistenceFile;
+			}
+		}
+		return new File(getAppHomeDir(), "plugins-persistence-2_0.xml");
+
+	}
+
+	private static void persistenceToXML(XMLEntity entity)
+			throws ConfigurationException {
+		// write on a temporary file in order to not destroy current file if
+		// there is some problem while marshaling
+		File tmpFile = new File(getPluginsPersistenceFile(false).getPath()
+				+ "-" + DateTime.getCurrentDate().getTime());
+
+		File xml = getPluginsPersistenceFile(false);
+		OutputStreamWriter writer = null;
+
+		try {
+			writer = new OutputStreamWriter(new FileOutputStream(tmpFile),
+					CASTORENCODING);
+			entity.getXmlTag().marshal(writer);
+			writer.close();
+
+			// if marshaling process finished correctly, move the file to the
+			// correct one
+			xml.delete();
+			if (!tmpFile.renameTo(xml)) {
+				// if rename was not succesful, try copying it
+				FileChannel sourceChannel = new FileInputStream(tmpFile)
+						.getChannel();
+				FileChannel destinationChannel = new FileOutputStream(xml)
+						.getChannel();
+				sourceChannel.transferTo(0, sourceChannel.size(),
+						destinationChannel);
+				sourceChannel.close();
+				destinationChannel.close();
+
+			}
+		} catch (FileNotFoundException e) {
+			throw new ConfigurationException(e);
+		} catch (MarshalException e) {
+			// try to close the stream, maybe it remains open
+			if (writer != null) {
+				try {
+					writer.close();
+				} catch (IOException e1) {
+				}
+			}
+		} catch (ValidationException e) {
+			throw new ConfigurationException(e);
+		} catch (IOException e) {
+			throw new ConfigurationException(e);
+		}
+	}
+
+	static MDIFrame getFrame() {
+		return frame;
+	}
+
+	/**
+	 * Gracefully closes the application. It shows dialogs to save data, finish
+	 * processes, etc, then it terminates the extensions, removes temporal files
+	 * and finally exits.
+	 */
+	public synchronized static void closeApplication() {
+		TerminationProcess terminationProcess = (new Launcher()).new TerminationProcess();
+		terminationProcess.run();
+	}
+
+	static HashMap getClassesExtensions() {
+		return classesExtensions;
+	}
+
+	private static Extensions[] getExtensions() {
+		List<Extensions> array = new ArrayList<Extensions>();
+		Iterator<PluginConfig> iter = pluginsConfig.values().iterator();
+
+		while (iter.hasNext()) {
+			array.add(iter.next().getExtensions());
+		}
+
+		return array.toArray(new Extensions[array.size()]);
+	}
+
+	public static Iterator getExtensionIterator() {
+		return extensions.iterator();
+	}
+
+	public static HashMap getPluginConfig() {
+		return pluginsConfig;
+	}
+
+	public static Extension getExtension(String s) {
+		Extensions[] exts = getExtensions();
+
+		for (int i = 0; i < exts.length; i++) {
+			for (int j = 0; j < exts[i].getExtensionCount(); j++) {
+				if (exts[i].getExtension(j).getClassName().equals(s)) {
+					return exts[i].getExtension(j);
+				}
+			}
+		}
+
+		return null;
+	}
+
+	public static AndamiConfig getAndamiConfig() {
+		return andamiConfig;
+	}
+
+	private static class ExtensionComparator implements Comparator {
+
+		public int compare(Object o1, Object o2) {
+			Extension e1 = (Extension) o1;
+			Extension e2 = (Extension) o2;
+
+			if (!e1.hasPriority() && !e2.hasPriority()) {
+				return -1;
+			}
+
+			if (e1.hasPriority() && !e2.hasPriority()) {
+				return Integer.MIN_VALUE;
+			}
+
+			if (e2.hasPriority() && !e1.hasPriority()) {
+				return Integer.MAX_VALUE;
+			}
+
+			if (e1.getPriority() != e2.getPriority()) {
+				return e2.getPriority() - e1.getPriority();
+			} else {
+				return (e2.toString().compareTo(e1.toString()));
+			}
+		}
+	}
+
+	private static class MenuComparator implements Comparator<SortableMenu> {
+
+		private static ExtensionComparator extComp = new ExtensionComparator();
+
+		public int compare(SortableMenu e1, SortableMenu e2) {
+
+			if (!e1.menu.hasPosition() && !e2.menu.hasPosition()) {
+				if (e1.extension instanceof SkinExtensionType) {
+					return 1;
+				} else if (e2.extension instanceof SkinExtensionType) {
+					return -1;
+				} else {
+					return extComp.compare(e1.extension, e2.extension);
+				}
+			}
+
+			if (e1.menu.hasPosition() && !e2.menu.hasPosition()) {
+				return Integer.MIN_VALUE;
+			}
+
+			if (e2.menu.hasPosition() && !e1.menu.hasPosition()) {
+				return Integer.MAX_VALUE;
+			}
+
+			if( e1.menu.getPosition() == e2.menu.getPosition() ) {
+				// we don't return 0 unless both objects are the same, otherwise
+				// the objects get overwritten in the treemap
+				return (e1.toString().compareTo(e2.toString()));
+			}
+    		if( e1.menu.getPosition() > e2.menu.getPosition() ) {
+				return Integer.MAX_VALUE;
+			}
+    		return Integer.MIN_VALUE;
+
+		}
+	}
+
+	private static class SortableMenu {
+
+		public PluginClassLoader loader;
+		public Menu menu;
+		public SkinExtensionType extension;
+
+		public SortableMenu(PluginClassLoader loader,
+				SkinExtensionType skinExt, Menu menu2) {
+			extension = skinExt;
+			menu = menu2;
+			this.loader = loader;
+		}
+
+	}
+
+	private static class SortableTool {
+
+		public PluginClassLoader loader;
+		public ToolBar toolbar;
+		public ActionTool actiontool;
+		public SelectableTool selectabletool;
+		public SkinExtensionType extension;
+
+		public SortableTool(PluginClassLoader loader,
+				SkinExtensionType skinExt, ToolBar toolbar2,
+				ActionTool actiontool2) {
+			extension = skinExt;
+			toolbar = toolbar2;
+			actiontool = actiontool2;
+			this.loader = loader;
+		}
+
+		public SortableTool(PluginClassLoader loader,
+				SkinExtensionType skinExt, ToolBar toolbar2,
+				SelectableTool selectabletool2) {
+			extension = skinExt;
+			toolbar = toolbar2;
+			selectabletool = selectabletool2;
+			this.loader = loader;
+		}
+	}
+
+	private static class ToolBarComparator implements Comparator<SortableTool> {
+
+		private static ExtensionComparator extComp = new ExtensionComparator();
+
+		public int compare(SortableTool e1, SortableTool e2) {
+
+			// if the toolbars have the same name, they are considered to be
+			// the same toolbar, so we don't need to do further comparing
+			if (e1.toolbar.getName().equals(e2.toolbar.getName())) {
+				return 0;
+			}
+
+			if (!e1.toolbar.hasPosition() && !e2.toolbar.hasPosition()) {
+				if (e1.extension instanceof SkinExtensionType) {
+					return 1;
+				} else if (e2.extension instanceof SkinExtensionType) {
+					return -1;
+				} else {
+					return extComp.compare(e1.extension, e2.extension);
+				}
+			}
+
+			if (e1.toolbar.hasPosition() && !e2.toolbar.hasPosition()) {
+				return Integer.MIN_VALUE;
+			}
+
+			if (e2.toolbar.hasPosition() && !e1.toolbar.hasPosition()) {
+				return Integer.MAX_VALUE;
+			}
+			if (e1.toolbar.getPosition() != e2.toolbar.getPosition()) {
+				return e1.toolbar.getPosition() - e2.toolbar.getPosition();
+			}
+
+			if (e1.toolbar.getActionTool().equals(e2.toolbar.getActionTool())
+					&& e1.toolbar.getSelectableTool().equals(
+							e2.toolbar.getSelectableTool())) {
+				return 0;
+			}
+			return (e1.toolbar.toString().compareTo(e2.toolbar.toString()));
+		}
+	}
+
+	/**
+	 * <p>
+	 * This class is used to compare tools (selectabletool and actiontool),
+	 * using the "position" attribute.
+	 * </p>
+	 * <p>
+	 * The ordering criteria are:
+	 * </p>
+	 * <ul>
+	 * <li>If the tools are placed in different toolbars, they use the toolbars'
+	 * order. (using the ToolBarComparator).</li>
+	 * <li></li>
+	 * <li>If any of the tools has not 'position' attribute, the tool which
+	 * <strong>has</strong> the attribute will be placed first.</li>
+	 * <li>If both tools have the same position (or they don't have a 'position'
+	 * attribute), the priority of the extensions where the tool is defined.</li>
+	 * </ul>
+	 *
+	 * @author cesar
+	 * @version $Revision: 40305 $
+	 */
+	private static class ToolComparator implements Comparator<SortableTool> {
+
+		private static ToolBarComparator toolBarComp = new ToolBarComparator();
+
+		public int compare(SortableTool e1, SortableTool e2) {
+			// compare the toolbars which contain the tools
+			long result = toolBarComp.compare(e1, e2);
+			if (result != 0) { // if the toolbars are different, use their order
+				return result>0? 1:-1;
+			}
+			// otherwise, compare the tools
+			long e1Position = -1, e2Position = -1;
+
+			if (e1.actiontool != null) {
+				if (e1.actiontool.hasPosition()) {
+					e1Position = e1.actiontool.getPosition();
+				}
+			} else if (e1.selectabletool != null) {
+				if (e1.selectabletool.hasPosition()) {
+					e1Position = e1.selectabletool.getPosition();
+				}
+			}
+
+			if (e2.actiontool != null) {
+				if (e2.actiontool.hasPosition()) {
+					e2Position = e2.actiontool.getPosition();
+				}
+			} else if (e2.selectabletool != null) {
+				if (e2.selectabletool.hasPosition()) {
+					e2Position = e2.selectabletool.getPosition();
+				}
+			}
+
+			if ((e1Position == -1) && (e2Position != -1)) {
+				return 1;
+			}
+			if ((e1Position != -1) && (e2Position == -1)) {
+				return -1;
+			}
+			if ((e1Position != -1) && (e2Position != -1)) {
+				result = e1Position - e2Position;
+				// we don't return 0 unless both objects are the same, otherwise
+				// the objects get overwritten in the treemap
+				if (result != 0) {
+					return  result>0? 1:-1;
+				}
+			}
+			return e1.toString().compareTo(e2.toString());
+		}
+	}
+
+	public static String getDefaultLookAndFeel() {
+		String osName = (String) System.getProperty("os.name");
+
+		if ((osName.length() > 4)
+				&& osName.substring(0, 5).toLowerCase().equals("linux")) {
+			return nonWinDefaultLookAndFeel;
+		}
+		if (osName.toLowerCase().startsWith("mac os x")) {
+			return "ch.randelshofer.quaqua.QuaquaLookAndFeel";
+		}
+
+		return UIManager.getSystemLookAndFeelClassName();
+	}
+
+	/**
+	 * Gets the ISO 839 two-characters-long language code matching the provided
+	 * language code (which may be an ISO 839-2/T three-characters-long code or
+	 * an ISO 839-1 two-characters-long code).
+	 *
+	 * If the provided parameter is already two characters long, it returns the
+	 * parameter without any modification.
+	 *
+	 * @param langCode
+	 *            A language code representing either an ISO 839-2/T language
+	 *            code or an ISO 839-1 code.
+	 * @return A two-characters-long code specifying an ISO 839 language code.
+	 */
+	private static String normalizeLanguageCode(String langCode) {
+		final String fileName = "iso_639.tab";
+		if (langCode.length() == 2) {
+			return langCode;
+		} else if (langCode.length() == 3) {
+			if (langCode.equals("va") || langCode.equals("val")) { // special
+				// case
+				// for
+				// Valencian
+				return "ca";
+			}
+			URL isoCodes = Launcher.class.getClassLoader()
+					.getResource(fileName);
+			if (isoCodes != null) {
+				try {
+					BufferedReader reader = new BufferedReader(
+							new InputStreamReader(isoCodes.openStream(),
+									"ISO-8859-1"));
+					String line;
+
+					while ((line = reader.readLine()) != null) {
+						String[] language = line.split("\t");
+						if (language[0].equals(langCode)) {
+							// the three
+							// characters code
+							return language[2]; // third column i the two
+							// characters code
+						}
+					}
+				} catch (IOException ex) {
+					logger.error(Messages
+							.getString("Error_reading_isocodes_file"), ex);
+					return "es";
+				}
+			} else {
+				logger.error(Messages.getString("Error_reading_isocodes_file"));
+				return "es";
+			}
+		}
+		return "es";
+	}
+
+	/**
+	 * Configures the locales (languages and local resources) to be used by the
+	 * application.
+	 *
+	 * First it tries to get the locale from the command line parameters, then
+	 * the andami-config file is checked.
+	 *
+	 * The locale name is normalized to get a two characters language code as
+	 * defined by ISO-639-1 (although ISO-639-2/T three characters codes are
+	 * also accepted from the command line or the configuration file).
+	 *
+	 * Finally, the gvsig-i18n library and the default locales for Java and
+	 * Swing are configured.
+	 *
+	 */
+    private static void configureLocales(String[] args) {
+        // Configurar el locale
+        String localeStr = null;
+
+        localeStr = PluginServices.getArgumentByName("language");
+        if ( localeStr == null ) {
+            localeStr = andamiConfig.getLocaleLanguage();
+        }
+        localeStr = normalizeLanguageCode(localeStr);
+        locale = getLocale(
+                localeStr, 
+                andamiConfig.getLocaleCountry(),
+                andamiConfig.getLocaleVariant()
+        );
+        org.gvsig.i18n.Messages.setCurrentLocale(locale);
+        JComponent.setDefaultLocale(locale);
+        /*
+        org.gvsig.i18n.Messages.addLocale(locale);
+        // add english and spanish as fallback languages
+        if ( localeStr.equals("es") || localeStr.equals("ca")
+                || localeStr.equals("gl") || localeStr.equals("eu")
+                || localeStr.equals("va") ) {
+            // prefer Spanish for languages spoken in Spain
+            org.gvsig.i18n.Messages.addLocale(new Locale("es"));
+            org.gvsig.i18n.Messages.addLocale(new Locale("en"));
+        } else {
+            // prefer English for the rest
+            org.gvsig.i18n.Messages.addLocale(new Locale("en"));
+            org.gvsig.i18n.Messages.addLocale(new Locale("es"));
+        }
+        */
+        // Create classloader for the i18n resources in the
+        // andami and user i18n folder. Those values will have
+        // precedence over any other values added afterwards
+        File appI18nFolder  = new File(getApplicationFolder(), "i18n");
+        File userI18nFolder = new File(getAppHomeDir(), "i18n");
+        if ( !userI18nFolder.exists() ) {
+            try {
+                FileUtils.forceMkdir(userI18nFolder);
+            } catch (IOException e) {
+                logger.info("Can't create i18n folder in gvSIG home (" + userI18nFolder + ").", e);
+            }
+        }
+//        logger.info("Loading i18n resources from the application and user "
+//                + "folders: {}, {}", appI18nFolder, userI18nFolder);
+
+        URL[] i18nURLs = getURLsFromI18nFolders(userI18nFolder, appI18nFolder);
+        ClassLoader i18nClassLoader = URLClassLoader.newInstance(i18nURLs, null);
+        logger.info("loading resources from classloader "+i18nClassLoader.toString()+".");
+        org.gvsig.i18n.Messages.addResourceFamily("text", i18nClassLoader,
+                "Andami Launcher");
+
+         // Finally load the andami own i18n resources
+         org.gvsig.i18n.Messages.addResourceFamily("org.gvsig.andami.text",
+         "Andami Launcher");
+    }
+
+        private static URL[] getURLsFromI18nFolders(File userFolder, File appFolder) {
+            List<URL> urls = new ArrayList<URL>();
+            File[] files = new File[] { userFolder, appFolder };
+            for( int n1=0; n1<files.length; n1++ ) {
+                File folder = files[n1];
+//                try {
+//                    urls.add(folder.toURI().toURL());
+//                } catch (MalformedURLException ex) {
+//                    logger.warn("Can't convert file to url (file="+userFolder.getAbsolutePath()+").", ex);
+//                    return null;
+//                }
+                File[] subFiles = folder.listFiles();
+                for( int n2=0; n2<subFiles.length; n2++ ) {
+                    File subFolder = subFiles[n2];
+                    if( "andami".equalsIgnoreCase(subFolder.getName()) ) {
+                        // Skip andami and add the last.
+                        continue;
+                    }
+                    if( subFolder.isDirectory() ) {
+                        try {
+                            urls.add(subFolder.toURI().toURL());
+                        } catch (MalformedURLException ex) {
+                            logger.warn("Can't convert file to url (file="+subFolder.getAbsolutePath()+").", ex);
+                            return null;
+                        }
+                    }
+                }
+            }
+            File folder = new File(appFolder,"andami");
+            try {
+                urls.add(folder.toURI().toURL());
+            } catch (MalformedURLException ex) {
+                logger.warn("Can't convert file to url (file="+folder.getAbsolutePath()+").", ex);
+                return null;
+            }
+            return urls.toArray(new URL[urls.size()]);
+        }
+
+	/**
+	 * Gets Home Directory location of the application into users home folder.
+	 *
+	 * May be set from outside the aplication by means of
+	 * -DgvSIG.home=C:/data/gvSIG, where gvSIG its the name of the application
+	 *
+	 * @return
+	 */
+	public static String getAppHomeDir() {
+		return appHomeDir;
+	}
+
+    public static File getApplicationHomeFolder() {
+        return new File(getAppHomeDir());
+    }
+
+	/**
+	 * Sets Home Directory location of the application. May be set from outside
+	 * the aplication by means of -DgvSIG.home=C:/data/gvSIG, where gvSIG its
+	 * the name of the application
+	 *
+	 * @param appHomeDir
+	 */
+	public static void setAppHomeDir(String appHomeDir) {
+		Launcher.appHomeDir = appHomeDir;
+	}
+
+	/**
+	 * Initialize the extesion that have to take the control of the state of
+	 * action controls of the UI of all extensions. <br>
+	 * <br>
+	 * For use this option you have to add an argument to the command line like
+	 * this: <br>
+	 * <br>
+	 * -exclusiveUI={pathToExtensionClass} <br>
+	 *
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled(IExtension extension)
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible(IExtension extension)
+	 */
+	private static void initializeExclusiveUIExtension() {
+		String name = PluginServices.getArgumentByName("exclusiveUI");
+		if (name == null) {
+			return;
+		}
+
+		Iterator<Class<? extends IExtension>> iter = classesExtensions.keySet()
+				.iterator();
+		int charIndex;
+		Class<? extends IExtension> key;
+		while (iter.hasNext()) {
+			key = iter.next();
+			charIndex = key.getName().indexOf(name);
+			// System.out.println("key='"+key.getName()+"' name='"+name+"' charIndex="+charIndex);
+			if (charIndex == 0) {
+				IExtension ext = classesExtensions.get(key);
+				if (ext instanceof ExtensionDecorator) {
+					ext = ((ExtensionDecorator) ext).getExtension();
+				}
+				if (ext instanceof ExclusiveUIExtension) {
+					PluginServices
+							.setExclusiveUIExtension((ExclusiveUIExtension) ext);
+				}
+				break;
+			}
+		}
+
+		logger
+				.error(Messages
+						.getString("No_se_encontro_la_extension_especificada_en_el_parametro_exclusiveUI")
+						+ " '" + name + "'");
+	}
+
+	public static void initIconThemes() {
+		PluginsManager pluginsManager = PluginsLocator.getManager();
+		IconThemeManager iconManager = ToolsSwingLocator.getIconThemeManager();
+
+		File f = new File(pluginsManager.getApplicationFolder(),"icon-theme");
+		if( !f.exists() ) {
+			try {
+				f.mkdir();
+			} catch(Exception ex) {
+				// Do nothing
+			}
+		}
+		iconManager.getRepository().add(f,"_Global");
+
+		f = new File(pluginsManager.getApplicationHomeFolder(),"icon-theme");
+		if( !f.exists() ) {
+			try {
+				f.mkdir();
+			} catch(Exception ex) {
+				// Do nothing
+			}
+		}
+		iconManager.getRepository().add(f,"_User");
+
+		Preferences prefs = Preferences.userRoot().node("gvsig.icontheme");
+		String defaultThemeID = prefs.get("default-theme", null);
+		if( defaultThemeID != null ) {
+			IconTheme iconTheme = iconManager.get(defaultThemeID);
+			if( iconTheme != null ) {
+				iconManager.setCurrent(iconTheme);
+			}
+		}
+	}
+
+	/**
+	 * Manages Andami termination process
+	 *
+	 * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+	 */
+	public class TerminationProcess {
+
+		private boolean proceed = false;
+		private UnsavedDataPanel panel = null;
+
+		public void run() {
+			try {
+				int exit = manageUnsavedData();
+				if ((exit == JOptionPane.NO_OPTION)
+						|| (exit == JOptionPane.CLOSED_OPTION)) {
+					// the user doesn't want to exit
+					return;
+				}
+				closeAndami();
+			} catch (Exception e) {
+				// It is not possible to close the application.
+				// this exception has been registered before
+			}
+		}
+
+		/**
+		 * Finishes the application without asking user if want or not to save
+		 * unsaved data.
+		 */
+            public void closeAndami() {
+                PluginsManager pluginsManager = PluginsLocator.getManager();
+                pluginsManager.executeShutdownTasks();
+
+                try {
+                    saveAndamiConfig();
+                } catch (Exception ex) {
+                    logger.error(
+                            "There was an error exiting application, can't save andami-config.xml",
+                            ex
+                    );
+                }
+
+                try {
+                    // Persistencia de los plugins
+                    savePluginPersistence();
+                    savePluginsProperties();
+                } catch (Exception ex) {
+                    logger.error(
+                            "There was an error exiting application, can't save plugins properties",
+                            ex
+                    );
+                }
+
+                // Finalize all the extensions
+                finalizeExtensions();
+
+                try {
+                    // Clean any temp data created
+                    Utilities.cleanUpTempFiles();
+                } catch (Exception ex) {
+                    logger.error(
+                            "There was an error exiting application, can't remove temporary files",
+                            ex
+                    );
+                }
+
+                logger.info("Quiting application.");
+
+                // Para la depuraci�n de memory leaks
+                System.gc();
+
+                System.exit(0);
+            }
+
+		public void saveAndamiConfig() {
+			// Configuraci�n de Andami
+			try {
+				andamiConfigToXML(andamiConfigPath);
+			} catch (MarshalException e) {
+				logger
+						.error(
+								Messages
+										.getString("Launcher.No_se_pudo_guardar_la_configuracion_de_andami"),
+								e);
+			} catch (ValidationException e) {
+				logger
+						.error(
+								Messages
+										.getString("Launcher.No_se_pudo_guardar_la_configuracion_de_andami"),
+								e);
+			} catch (IOException e) {
+				logger
+						.error(
+								Messages
+										.getString("Launcher.No_se_pudo_guardar_la_configuracion_de_andami"),
+								e);
+			}
+		}
+
+		private void savePluginsProperties() {
+			PluginsManager manager = PluginsLocator.getManager();
+			List<PluginServices> plugins = manager.getPlugins();
+			for (PluginServices plugin : plugins) {
+				if (plugin != null) {
+					plugin.savePluginProperties();
+				}
+			}
+		}
+
+		/**
+		 * Exectutes the terminate method for all the extensions, in the reverse
+		 * order they were initialized
+		 *
+		 */
+		private void finalizeExtensions() {
+			for (int i = extensions.size() - 1; i >= 0; i--) {
+				org.gvsig.andami.plugins.IExtension extensionInstance = (org.gvsig.andami.plugins.IExtension) extensions
+						.get(i);
+				String extensionName = "(unknow)";
+				try {
+					extensionName = extensionInstance.getClass().getName();
+					extensionInstance.terminate();
+				} catch (Exception ex) {
+					logger.error(MessageFormat.format(
+							"There was an error extension ending {0}",
+							extensionName), ex);
+				}
+			}
+		}
+
+		private IUnsavedData[] getUnsavedData() throws Exception {
+			List<IUnsavedData> unsavedDataList = new ArrayList<IUnsavedData>();
+			IExtension exclusiveExtension = PluginServices
+					.getExclusiveUIExtension();
+
+			for (int i = extensions.size() - 1; i >= 0; i--) {
+				org.gvsig.andami.plugins.IExtension extensionInstance = (org.gvsig.andami.plugins.IExtension) extensions
+						.get(i);
+				IExtensionStatus status = null;
+				if (exclusiveExtension != null) {
+					status = exclusiveExtension.getStatus(extensionInstance);
+				} else {
+					status = extensionInstance.getStatus();
+				}
+				if (status != null) {
+					try {
+						if (status.hasUnsavedData()) {
+							IUnsavedData[] array = status.getUnsavedData();
+							for (int element = 0; element < array.length; element++) {
+								unsavedDataList.add(array[element]);
+							}
+						}
+					} catch (Exception e) {
+						logger.info("Error calling the hasUnsavedData method",
+								new Exception());
+						int option = JOptionPane
+								.showConfirmDialog(
+										frame,
+										Messages
+												.getString("error_getting_unsaved_data"),
+										Messages.getString("MDIFrame.salir"),
+										JOptionPane.YES_NO_OPTION);
+						if (option == JOptionPane.NO_OPTION) {
+							throw e;
+						}
+					}
+				}
+			}
+			return unsavedDataList.toArray(new IUnsavedData[unsavedDataList
+					.size()]);
+		}
+
+		public UnsavedDataPanel getUnsavedDataPanel() {
+			if (panel == null) {
+				panel = new UnsavedDataPanel(new IUnsavedData[0]);
+			}
+			return panel;
+		}
+
+		/**
+		 * Checks if the extensions have some unsaved data, and shows a dialog
+		 * to allow saving it. This dialog also allows to don't exit Andami.
+		 *
+		 * @return true if the user confirmed he wishes to exit, false otherwise
+		 * @throws Exception
+		 */
+		public int manageUnsavedData() throws Exception {
+			IUnsavedData[] unsavedData = getUnsavedData();
+
+			// there was no unsaved data
+			if (unsavedData.length == 0) {
+				int option = JOptionPane
+						.showConfirmDialog(frame, Messages
+								.getString("MDIFrame.quiere_salir"), Messages
+								.getString("MDIFrame.salir"),
+								JOptionPane.YES_NO_OPTION);
+				return option;
+			}
+
+			UnsavedDataPanel panel = getUnsavedDataPanel();
+			panel.setUnsavedDataArray(unsavedData);
+
+			panel.addActionListener(panel.new UnsavedDataPanelListener() {
+
+				public void cancel(UnsavedDataPanel panel) {
+					proceed(false);
+					PluginServices.getMDIManager().closeWindow(panel);
+
+				}
+
+				public void discard(UnsavedDataPanel panel) {
+					proceed(true);
+					PluginServices.getMDIManager().closeWindow(panel);
+
+				}
+
+				public void accept(UnsavedDataPanel panel) {
+					IUnsavedData[] unsavedDataArray = panel
+							.getSelectedsUnsavedData();
+					boolean saved;
+					for (int i = 0; i < unsavedDataArray.length; i++) {
+						try {
+							saved = unsavedDataArray[i].saveData();
+						} catch (Exception ex) {
+							PluginServices.getLogger().error(
+									"Error saving"
+											+ unsavedDataArray[i]
+													.getResourceName(), ex);
+							saved = false;
+						}
+						if (!saved) {
+							JOptionPane
+									.showMessageDialog(
+											panel,
+											PluginServices
+													.getText(this,
+															"The_following_resource_could_not_be_saved_")
+													+ "\n"
+													+ unsavedDataArray[i]
+															.getResourceName()
+													+ " -- "
+													+ unsavedDataArray[i]
+															.getDescription(),
+											PluginServices.getText(this,
+													"Resource_was_not_saved"),
+											JOptionPane.ERROR_MESSAGE);
+
+							try {
+								unsavedDataArray = getUnsavedData();
+							} catch (Exception e) {
+								// This exception has been registered before
+							}
+							panel.setUnsavedDataArray(unsavedDataArray);
+							return;
+						}
+					}
+					proceed(true);
+					PluginServices.getMDIManager().closeWindow(panel);
+				}
+			});
+
+			PluginServices.getMDIManager().addWindow(panel);
+			if (proceed) {
+				return JOptionPane.YES_OPTION;
+			} else {
+				return JOptionPane.NO_OPTION;
+			}
+		}
+
+		private void proceed(boolean proceed) {
+			this.proceed = proceed;
+		}
+
+	}
+
+	public static TerminationProcess getTerminationProcess() {
+		return (new Launcher()).new TerminationProcess();
+	}
+
+	private PackageInfo getPackageInfo(String pluginsFolder) {
+		try {
+		    PluginsManager pm = PluginsLocator.getManager();
+		    return pm.getPackageInfo();
+		} catch (Exception e) {
+			logger.info("Can't locate PackageInfo from plugin org.gvsig.app",e);
+			return null;
+		}
+	}
+
+	/**
+	 * Launch the gvSIG package installer.
+	 *
+	 * @throws Exception
+	 *             if there is any error
+	 */
+    private void doInstall(String[] args) throws Exception {
+        String installURL = null;
+        String installURLFile = null;
+        String gvSIGVersion = null;
+        String[] myArgs = new String[3];
+        PackageInfo packageInfo = null;
+
+        Options options = new Options();
+        options.addOption("i", "install", false, "install");
+        options.addOption("u", "installURL", true, "installURL");
+        options.addOption("f", "installURLFile", true, "installURLFile");
+        options.addOption("v", "installVersion", true, "installVersion");
+        options.addOption("A", "applicationName", true, "application name, default is gvSIG");
+        options.addOption("P", "pluginsFolder", true, "pluginsFolder");
+        options.addOption("l", "language", true, "language");
+
+                // This options are managed by the gvSIG.sh but need to be declared here to avoid
+        // errors.
+        options.addOption(null, "debug", false, "Activate the JVM remote debug");
+        options.addOption(null, "pause", false, "Pause when activate JVM debug");
+
+        /*
+         * Los parametros que deberian pasarse en el instalador oficial de gvSIG serian:
+         *
+         * --install
+         * --applicationName=gvSIG
+         * --language=es
+         * --pluginsFolder=gvSIG/extensiones
+         *
+         * Opcionales (casi mejor que dejar los de por defecto y no pasarselos):
+         * --installVersion=2.0.0
+         * --installURL=http://downloads.gvsig.org/download/gvsig-desktop/dists
+         * --installURLFile=gvSIG/extensiones/org.gvsig.installer.app.extension/defaultDownloadsURLs
+         *
+         */
+        CommandLineParser parser = new PosixParser();
+        CommandLine line = null;
+        try {
+            line = parser.parse(options, args);
+            boolean hasAllMandatoryOptions = true;
+            if ( !line.hasOption("install") ) {
+                hasAllMandatoryOptions = false;
+            }
+
+            if ( line.hasOption("installVersion") ) {
+                gvSIGVersion = line.getOptionValue("installVersion");
+            }
+            if ( line.hasOption("applicationName") ) {
+                myArgs[0] = line.getOptionValue("applicationName");
+            } else {
+                myArgs[0] = "gvSIG";
+            }
+            if ( line.hasOption("pluginsFolder") ) {
+                myArgs[1] = line.getOptionValue("pluginsFolder");
+            } else {
+                myArgs[1] = "gvSIG/extensiones";
+            }
+            if ( line.hasOption("language") ) {
+                myArgs[2] = "language=" + line.getOptionValue("language");
+            } else {
+                // prevent null
+                myArgs[2] = Locale.getDefault().toString();
+            }
+
+            if ( line.hasOption("installURL") ) {
+                installURL = line.getOptionValue("installURL");
+            } else {
+                installURL = "http://downloads.gvsig.org/download/gvsig-desktop/";
+            }
+
+            if ( line.hasOption("installURLFile") ) {
+                installURLFile = line.getOptionValue("installURLFile");
+            } else {
+                installURLFile = myArgs[1] + "/org.gvsig.installer.app.mainplugin/defaultDownloadsURLs";
+            }
+
+            if ( !hasAllMandatoryOptions ) {
+                System.err.println(Messages.get("usage") + ": Launcher " +
+                        "--install "+
+                        "[--applicationName=appName] " +
+                        "[--pluginsFolder=plugins-directory] " +
+                        "[--installURLFile=File] " +
+                        "[--installURL=URL] " +
+                        "[--language=locale]"
+                );
+                return;
+            }
+        } catch (ParseException exp) {
+            System.err.println("Unexpected exception:" + exp.getMessage());
+            System.exit(-1);
+        }
+
+        initializeApp(myArgs, "installer");
+
+        new DefaultLibrariesInitializer().fullInitialize(true);
+        
+        initializeInstallerManager();
+
+        InstallerManager installerManager = InstallerLocator.getInstallerManager();
+
+        try {
+            logger.info("Loading plugins configurations");
+            this.loadPluginConfigs();
+        } catch (Throwable ex) {
+            logger.warn("Can't load plugins configurations", ex);
+        }
+
+        try {
+            logger.info("Loading plugins");
+            this.loadPluginServices();            
+        } catch (Throwable ex) {
+            logger.warn("Can't load plugins", ex);
+        }
+
+        AndamiConfig config = getAndamiConfig();
+
+        initializeIdentityManagement(new File(config.getPluginsDirectory()).getAbsoluteFile());
+        
+        initializeLibraries();
+
+//        config.setLocaleLanguage(locale.getLanguage());
+//        config.setLocaleCountry(locale.getCountry());
+//        config.setLocaleVariant(locale.getVariant());
+
+        packageInfo = getPackageInfo(myArgs[1]);
+
+        // set the gvSIG version to the install manager, to compose the download URL
+        if ( packageInfo != null ) {
+            installerManager.setVersion(packageInfo.getVersion());
+        } else {
+            installerManager.setVersion(gvSIGVersion);
+        }
+        if ( !installURL.contains(";")
+                && !installURL.endsWith(InstallerManager.PACKAGE_EXTENSION)
+                && !installURL.endsWith(InstallerManager.PACKAGE_INDEX_EXTENSION) ) {
+            if ( packageInfo != null && (packageInfo.getState().startsWith(InstallerManager.STATE.BETA)
+                    || packageInfo.getState().startsWith(InstallerManager.STATE.RC)
+                    || packageInfo.getState().equalsIgnoreCase(InstallerManager.STATE.FINAL)) ) {
+                installURL = installURL + "dists/<%Version%>/builds/<%Build%>/packages.gvspki";
+            }
+        }
+        // Configure default index download URL
+        SwingInstallerLocator.getSwingInstallerManager().setDefaultDownloadURL(installURL);
+
+        SwingInstallerLocator.getSwingInstallerManager().setDefaultDownloadURL(new File(installURLFile));
+
+        // Launch installer
+        PluginsManager manager = PluginsLocator.getManager();
+
+        AbstractInstallPackageWizard installPackageWizard = SwingInstallerLocator
+                .getSwingInstallerManager().createInstallPackageWizard(
+                        manager.getApplicationFolder(),
+                        manager.getInstallFolder());
+        installPackageWizard.setWizardActionListener(new InstallerWizardActionListener() {
+            public void finish(InstallerWizardPanel installerWizard) {
+                logger.info("Finish installation.");
+                System.exit(0);
+            }
+
+            public void cancel(InstallerWizardPanel installerWizard) {
+                logger.info("Cancel installation.");
+                System.exit(0);
+            }
+        });
+
+        // the wizard will show the Typical or Advanced mode option.
+        installPackageWizard.setAskTypicalOrCustom(true);
+        // default packages will be selected.
+        installPackageWizard.setSelectDefaultPackages(true);
+
+        // 1. Create the frame.
+        JFrame frame = new JFrame(Messages.get("gvsig_package_installer"));
+
+        // 2. What happens when the frame closes?
+        frame.addWindowListener(new WindowListener() {
+            public void windowOpened(WindowEvent we) {
+                logger.info("Open window installation.");
+            }
+            public void windowClosing(WindowEvent we) {
+                logger.info("Closing installation.");
+                System.exit(0);
+            }
+            public void windowClosed(WindowEvent we) {
+                logger.info("Close installation.");
+                System.exit(0);
+            }
+            public void windowIconified(WindowEvent we) {
+            }
+            public void windowDeiconified(WindowEvent we) {
+            }
+            public void windowActivated(WindowEvent we) {
+                logger.info("Activate window installation.");
+            }
+            public void windowDeactivated(WindowEvent we) {
+                logger.info("Deactivate window installation.");
+            }
+        });
+        //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        // 3. Add the installer panel to the frame
+        frame.getContentPane().add(installPackageWizard, BorderLayout.CENTER);
+
+        // 4. Size the frame and center on the screen
+        frame.pack();
+        frame.setLocationRelativeTo(null);
+
+        // 5. Show it.
+        frame.setVisible(true);
+    }
+
+	public static String getInformation() {
+		return getInformation(null);
+	}
+
+        private static final int INFO_OS_NAME = 0;
+        private static final int INFO_OS_ARCH = 1;
+        private static final int INFO_OS_VERSION = 2;
+        private static final int INFO_OS_ADITIONAL = 3;
+        private static final int INFO_JRE_VENDOR = 4;
+        private static final int INFO_JRE_VERSION = 5;
+        private static final int INFO_JRE_HOME = 6;
+        private static final int INFO_PROXY_HOST = 7;
+        private static final int INFO_PROXY_PORT = 8;
+        private static final int INFO_PROXY_USER = 9;
+        private static final int INFO_PROXY_PASSWORD = 10;
+        private static final int INFO_APP_LOCALE = 11;
+        private static final int INFO_APP_FOLDER = 12;
+        private static final int INFO_APP_HOME = 13;
+        private static final int INFO_APP_INSTALL_FOLDER = 14;
+        private static final int INFO_APP_PLUGINS_FOLDER = 15;
+        private static final int INFO_APP_THEME = 16;
+        private static final int INFO_APP_SKIN = 17;
+        private static final int INFO_PACKAGES = 18;
+
+
+        public static String getInformation(PackageInfo[] pkgs) {
+
+            String template = "OS\n"
+                    +"    name    : {"+INFO_OS_NAME+"}\n"
+                    +"    arch    : {"+INFO_OS_ARCH+"}\n"
+                    +"    version : {"+INFO_OS_VERSION+"} \n"
+                    +"{"+INFO_OS_ADITIONAL+"}"
+                    +"JRE\n"
+                    +"    vendor  : {"+INFO_JRE_VENDOR+"}\n"
+                    +"    version : {"+INFO_JRE_VERSION+"}\n"
+                    +"    home    : {"+INFO_JRE_HOME+"}\n"
+                    +"HTTP Proxy\n"
+                    +"    http.proxyHost     : {"+INFO_PROXY_HOST+"}\n"
+                    +"    http.proxyPort     : {"+INFO_PROXY_PORT+"}\n"
+                    +"    http.proxyUserName : {"+INFO_PROXY_USER+"}\n"
+                    +"    http.proxyPassword : {"+INFO_PROXY_PASSWORD+"}\n"
+                    +"Application\n"
+                    +"    locale language         : {"+INFO_APP_LOCALE+"}\n"
+                    +"    application forlder     : {"+INFO_APP_FOLDER+"}\n"
+                    +"    application home forlder: {"+INFO_APP_HOME+"}\n"
+                    +"    install forlder         : {"+INFO_APP_INSTALL_FOLDER+"}\n"
+                    +"    plugins forlder         : {"+INFO_APP_PLUGINS_FOLDER+"}\n"
+                    +"    theme                   : {"+INFO_APP_THEME+"}\n"
+                    +"    Skin                    : {"+INFO_APP_SKIN+"}\n"
+                    +"Installed packages\n"
+                    +"{"+INFO_PACKAGES+"}";
+
+
+            String values[] = new String[INFO_PACKAGES+1];
+
+            PluginsManager pluginmgr = PluginsLocator.getManager();
+            LocaleManager localemgr = PluginsLocator.getLocaleManager();
+
+            Properties props = System.getProperties();
+
+
+            // OS information
+            values[INFO_OS_NAME] = props.getProperty("os.name");
+            values[INFO_OS_ARCH] = props.getProperty("os.arch");
+            values[INFO_OS_VERSION] = props.getProperty("os.version");
+
+            if ( values[INFO_OS_NAME].startsWith("Linux") ) {
+                try {
+                    StringWriter writer = new StringWriter();
+
+                    String[] command = {"lsb_release", "-a"};
+                    Process p = Runtime.getRuntime().exec(command);
+                    InputStream is = p.getInputStream();
+                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+                    String line;
+                    while ( (line = reader.readLine()) != null ) {
+                        writer.write("    " + line + "\n");
+                    }
+                    values[INFO_OS_ADITIONAL] = writer.toString();
+                } catch (Exception ex) {
+                    logger.warn("Can't get detailled os information (lsb_release -a).", ex);
+                }
+            }
+
+            values[INFO_JRE_VENDOR] = props.getProperty("java.vendor");
+            values[INFO_JRE_VERSION] = props.getProperty("java.version");
+            values[INFO_JRE_HOME] = props.getProperty("java.home");
+            values[INFO_PROXY_HOST] = props.getProperty("http.proxyHost");
+            values[INFO_PROXY_PORT] = props.getProperty("http.proxyPort");
+            values[INFO_PROXY_USER] = props.getProperty("http.proxyUserName");
+
+            if ( props.get("http.proxyPassword") == null ) {
+                values[INFO_PROXY_PASSWORD] = "(null)";
+            } else {
+                values[INFO_PROXY_PASSWORD] = "***********";
+            }
+
+            try {
+                values[INFO_APP_SKIN] = MDIManagerFactory.getSkinExtension().getClassName();
+            } catch (Throwable e) {
+                values[INFO_APP_SKIN] = "(unknow)";
+            }
+            values[INFO_APP_LOCALE] = localemgr.getCurrentLocale().toString();
+            values[INFO_APP_FOLDER] = pluginmgr.getApplicationFolder().getAbsolutePath();
+            values[INFO_APP_HOME] = pluginmgr.getApplicationHomeFolder().getAbsolutePath();
+            values[INFO_APP_INSTALL_FOLDER] = pluginmgr.getInstallFolder().getAbsolutePath();
+            values[INFO_APP_PLUGINS_FOLDER] = StringUtils.join(pluginmgr.getPluginsFolders());
+            values[INFO_APP_THEME] = Launcher.theme.getSource().getAbsolutePath();
+
+            try {
+                if ( pkgs == null ) {
+                    InstallerManager installmgr = InstallerLocator.getInstallerManager();
+                    pkgs = installmgr.getInstalledPackages();
+                }
+                StringWriter writer = new StringWriter();
+                for ( int i = 0; i < pkgs.length; i++ ) {
+                    writer.write("    ");
+                    writer.write(pkgs[i].toStringCompact());
+                    writer.write("\n");
+                }
+                values[INFO_PACKAGES] = writer.toString();
+
+            } catch (Throwable e) {
+                logger.warn("Can't get installed package information.",e);
+            }
+
+            String s = MessageFormat.format(template, values);
+            return s;
+        }
+
+	private void logger_info(String msg) {
+		String info[] = msg.split("\n");
+		for (int i = 0; i < info.length; i++) {
+			logger.info(info[i]);
+		}
+	}
+
+	private void saveEnvironInformation(PackageInfo[] pkgs) {
+		PluginsManager manager = PluginsLocator.getManager();
+		File fout = new File( manager.getApplicationHomeFolder(), "gvSIG-environ.info");
+		try {
+			FileUtils.write(fout, getInformation(pkgs));
+		} catch (IOException e) {
+			logger.info("Can't create '"+fout.getAbsolutePath()+"'");
+		}
+	}
+
+	private void fixIncompatiblePlugins(PackageInfo[] installedPackages) {
+		final Set<String> incompatiblePlugins = new HashSet<String>();
+
+		// Add installed packages to a Map to optimize searchs
+		final Map<String, PackageInfo> packages = new HashMap<String, PackageInfo>();
+		for( int i=0 ; i<installedPackages.length; i++) {
+			packages.put(installedPackages[i].getCode(), installedPackages[i]);
+		}
+		Iterator<Entry<String, PluginConfig>> it = pluginsConfig.entrySet().iterator();
+		while( it.hasNext() ) {
+			List<String> pluginNames = new ArrayList<String>();
+			Entry<String, PluginConfig> entry = it.next();
+			PluginConfig pluginConfig = entry.getValue();
+			pluginNames.add(entry.getKey());
+
+			// Locate the package for this plugin.
+			// Be care whith alias
+			String[] aliases = pluginsConfig.getAliases(pluginConfig);
+			if( aliases!=null ) {
+				for( int i=0; i<aliases.length; i++ ) {
+					pluginNames.add(aliases[i]);
+				}
+			}
+			PackageInfo pkg = null;
+			for( int n=0; n<pluginNames.size(); n++ ) {
+				pkg = packages.get(pluginNames.get(n));
+				if( pkg != null ) {
+					break;
+				}
+			}
+
+			// If package is found verify dependencies
+			if( pkg!= null ) {
+				Dependencies dependencies = pkg.getDependencies();
+				for( int i=0 ; i<dependencies.size(); i++ ) {
+					Dependency dependency = (Dependency) dependencies.get(i);
+					if( Dependency.CONFLICT.equalsIgnoreCase(dependency.getType())  ) {
+						String code = dependency.getCode();
+						if( pluginsConfig.get(code)!=null ) {
+							incompatiblePlugins.add(pkg.getCode());
+							incompatiblePlugins.add(code);
+						}
+					}
+				}
+			}
+		}
+		if( incompatiblePlugins.isEmpty() ) {
+			return;
+		}
+		splashWindow.toBack();
+		DisablePluginsConflictingDialog dlg = new DisablePluginsConflictingDialog(packages, incompatiblePlugins);
+		dlg.setVisible(true);
+		splashWindow.toFront();
+		switch(dlg.getAction()) {
+		case DisablePluginsConflictingDialog.CLOSE:
+			System.exit(0);
+			break;
+		case DisablePluginsConflictingDialog.CONTINUE:
+			break;
+		}
+		List<String> pluginsToDissable = dlg.getPluginNamesToDisable();
+		if( pluginsToDissable  == null ) {
+			return;
+		}
+
+		Iterator<String> it2 = pluginsToDissable.iterator();
+		while( it2.hasNext() ) {
+			String pluginName = it2.next();
+			logger.info("Dissabling plugin '"+pluginName+"' by user action.");
+			pluginsConfig.remove(pluginName);
+		}
+	}
+
+	private class DisablePluginsConflictingDialog extends JDialog {
+
+		public static final int CONTINUE = 0;
+		public static final int CLOSE = 1;
+
+		private DisablePluginsConflictingLayoutPanel contents;
+		private int action = 0;
+		private List<Item> incompatiblePlugins = null;
+		private Map<String, PackageInfo> packages;
+
+		private class Item {
+			private String code;
+			private PackageInfo pkg;
+
+			public Item(String code, PackageInfo pkg) {
+				this.code = code;
+				this.pkg = pkg;
+			}
+			public String toString() {
+				if( this.pkg == null ) {
+					return code;
+				}
+				return this.pkg.getName() + " (" + this.pkg.getCode() + ")";
+			}
+			public String getCode() {
+				if( pkg == null ) {
+					return code;
+				}
+				return pkg.getCode();
+			}
+		}
+
+		DisablePluginsConflictingDialog(Map<String, PackageInfo> packages, Set<String> incompatiblePlugins) {
+			super((Frame)null, "",true);
+			this.setTitle(translate("_Conflicting_plugins"));
+
+			this.packages = packages;
+
+			this.incompatiblePlugins  = new ArrayList<Item>();
+			Item item = null;
+			Iterator<String> it = incompatiblePlugins.iterator();
+			while( it.hasNext() ) {
+				String code = it.next();
+				item = new Item(code, packages.get(code));
+				this.incompatiblePlugins.add(item);
+				logger.info("Found plugin '"+item.getCode()+"' incopatibles with each other.");
+			}
+			initComponents();
+		}
+
+		private void initComponents() {
+			this.contents = new DisablePluginsConflictingLayoutPanel();
+
+			doTranslations();
+
+			this.contents.buttonClose.addActionListener( new ActionListener() {
+				public void actionPerformed(ActionEvent arg0) {
+					doClose();
+				}
+			});
+			this.contents.buttonContinue.addActionListener( new ActionListener() {
+				public void actionPerformed(ActionEvent arg0) {
+					doContinue();
+				}
+			});
+			this.contents.pluginList.setModel(new DefaultListModel(this.incompatiblePlugins));
+			ListSelectionModel sm = this.contents.pluginList.getSelectionModel();
+			sm.setSelectionMode(sm.MULTIPLE_INTERVAL_SELECTION);
+			this.setContentPane(this.contents);
+			this.pack();
+
+	        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+	        setLocation((screenSize.width / 2) - (this.getWidth() / 2),
+	            (screenSize.height / 2) - (this.getHeight()/ 2));
+		}
+
+		private void doTranslations() {
+			DisablePluginsConflictingLayoutPanel c = this.contents;
+			c.lblConflict.setText(translate("_Some_of_plugins_installed_conflict_with_each_other"));
+			c.lblSelectPluginToDisable.setText(translate("_Select_the_plugins_that_you_want_to_disable_and_click_the_continue_button"));
+			c.lblClickContinue.setText(translate("_You_can_click_on_continue_button_directly_if_you_dont_want_to_disable_any_plugins"));
+			c.lblClickClose.setText(translate("_Or_click_the_close_button_to_close_the_application"));
+			c.buttonClose.setText(translate("_Close"));
+			c.buttonContinue.setText(translate("_Continue"));
+		}
+
+		private String translate(String msg) {
+			return PluginServices.getText(this,msg);
+		}
+
+		private void doClose() {
+			this.action = CLOSE;
+			this.setVisible(false);
+		}
+
+		private void doContinue() {
+			this.action = CONTINUE;
+			this.setVisible(false);
+		}
+
+		public int getAction() {
+			return this.action;
+		}
+
+		public List<String> getPluginNamesToDisable() {
+			if( this.action == CLOSE ) {
+				return null;
+			}
+			Object[] selecteds = null;
+			selecteds = (Object[]) this.contents.pluginList.getSelectedValues();
+			if( selecteds == null || selecteds.length < 1 ) {
+				return null;
+			}
+			List<String> values = new ArrayList<String>();
+			for( int i=0 ; i<selecteds.length; i++ ) {
+				values.add(((Item)selecteds[i]).getCode());
+			}
+			return values;
+		}
+	}
+
+
+    private void initializeIdentityManagement(File pluginsFolder) {
+        File identityManagementConfigFile = null;
+        PluginServices plugin = null;
+        Iterator<Entry<String, PluginConfig>> it = pluginsConfig.entrySet().iterator();
+        while ( it.hasNext() ) {
+            Entry<String, PluginConfig> entry = it.next();
+            File pluginFolder = new File(pluginsFolder,entry.getKey());
+            File f = new File(pluginFolder,"identity-management.ini");
+            if( f.exists() ) {
+                if( identityManagementConfigFile!=null ) {
+                    logger.warn("Too many identity-managemnt plugins. Disable all.");
+                } else {
+                    identityManagementConfigFile = f;
+                    plugin = PluginServices.getPluginServices(entry.getKey());
+                }
+            }
+        }
+        if( identityManagementConfigFile==null || plugin==null ) {
+            return;
+        }
+        if (!identityManagementConfigFile.canRead()) {
+            return ;
+        }
+        PropertiesConfiguration identityManagementConfig = null;
+        try {
+            identityManagementConfig = new PropertiesConfiguration(identityManagementConfigFile);
+        } catch (Exception ex) {
+            logger.warn("Can't open identity management config file '" + identityManagementConfigFile.getAbsolutePath() + "'.", ex);
+            return;
+        }
+        String identityManagerClassName = identityManagementConfig.getString("IdentityManager", null);
+        String identityManagementInitializerClassName = identityManagementConfig.getString("IdentityManagementInitializer", null);
+        try {
+            if( identityManagerClassName != null ) {
+                Class identityManagerClass = plugin.getClassLoader().loadClass(identityManagerClassName);
+                ToolsLocator.registerIdentityManager(identityManagerClass);
+            } else {
+                logger.info("Entry IdentityManager not found in identity management config file '" + identityManagementConfigFile.getAbsolutePath() + "'.");
+            }
+
+            if( identityManagementInitializerClassName != null ) {
+                Class identityManagerInitializerClass = plugin.getClassLoader().loadClass(identityManagementInitializerClassName);
+                Runnable identityManagerInitializer = (Runnable) identityManagerInitializerClass.newInstance();
+                identityManagerInitializer.run();
+            } else {
+                logger.info("Entry IdentityManagementInitializer not found in identity management config file '" + identityManagementConfigFile.getAbsolutePath() + "'.");
+            }
+
+        } catch (Exception ex) {
+            logger.warn("Can't initialize the identity manager from '"+identityManagementConfigFile.getAbsolutePath()+".",ex);
+            return;
+        }
+        logger.info("Loaded an identity manager from plugin '"+plugin.getPluginName()+".");
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LibraryExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LibraryExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LibraryExtension.java	(revision 42196)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import org.gvsig.andami.plugins.Extension;
+
+public class LibraryExtension extends Extension {
+
+	public void initialize() {
+		// Do nothing
+	}
+
+	public void execute(String actionCommand) {
+		// Do nothing
+	}
+
+	public boolean isEnabled() {
+		return false;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LibraryExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java	(revision 42196)
@@ -0,0 +1,923 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.KeyEventDispatcher;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Properties;
+
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.ExtensionDecorator;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.preferences.DlgPreferences;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.AddDefinitionException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+import org.gvsig.utils.swing.threads.IProgressMonitorIF;
+import org.gvsig.utils.swing.threads.TaskMonitorTimerListener;
+import org.gvsig.utils.swing.threads.UndefinedProgressMonitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provides services to Plugins. Each plugin has an associated PluginServices
+ * object, which provides specific services. Main of them: translations,
+ * logging, access to plugin's resources, background tasks, clipboard access
+ * and data persistence.
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class PluginServices {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(PluginServices.class);
+
+    private static String[] arguments;
+
+    private static ExclusiveUIExtension exclusiveUIExtension = null;
+
+    private PluginClassLoader loader;
+
+    private XMLEntity persistentXML;
+
+    private DynObject pluginPersistence = null;
+
+    private String[] alternativeNames = null;
+    /**
+     * Creates a new PluginServices objetct.
+     * 
+     * @param loader
+     *            The Plugin's ClassLoader.
+     */
+    public PluginServices(PluginClassLoader loader) {
+        this.loader = loader;
+    }
+
+    public PluginServices(PluginClassLoader loader, String[] alternativeNames) {
+    	this(loader);
+        this.alternativeNames = alternativeNames;
+    }
+
+    public String[] getAlternativeNames() {
+    	return this.alternativeNames;
+    }
+    
+    /**
+     * Returns the message in the current's locale language
+     * corresponding to the provided translation key.
+     * The key-message pairs are obtained from the plugin's
+     * translation files (text_xx.properties files).
+     * 
+     * @param key
+     *            Translation key whose associated message is to be obtained
+     * 
+     * @return The message associated with the provided key, in one of the
+     *         current locale languages, or the key if the translation is not
+     *         found.
+     */
+    public String getText(String key) {
+        if (key == null)
+            return null;
+        String translation = org.gvsig.i18n.Messages.getText(key, false);
+        if (translation != null)
+            return translation;
+        else {
+            logger.debug("Can't find translation for ''{}'' in plugin ''{}''.",
+                key,
+                getPluginName());
+            return key;
+        }
+    }
+
+    /**
+     * Gets the plugin's classloader.
+     * 
+     * @return Returns the loader.
+     */
+    public PluginClassLoader getClassLoader() {
+        return loader;
+    }
+
+    /**
+     * Gets the plugin's name
+     * 
+     * @return The plugin's name
+     */
+    public String getPluginName() {
+        return loader.getPluginName();
+    }
+
+    /**
+     * Gets a reference to the PluginServices object associated with the
+     * plugin containing the provided class.
+     * 
+     * Obtienen una referencia al PluginServices del plugin cuyo nombre se pasa
+     * como par�metro
+     * 
+     * @param pluginClassInstance
+     *            An instance of a class. This class is contained in a plugin,
+     *            whose
+     *            services are to be obtained
+     * 
+     * @return The PluginServices object associated to the containing plugin
+     * 
+     * @throws RuntimeException
+     *             If the parameter was not loaded from a plugin
+     */
+    public static PluginServices getPluginServices(Object pluginClassInstance) {
+        try {
+        	PluginClassLoader loader;
+    		if( pluginClassInstance instanceof Class ) {
+    			loader = (PluginClassLoader) ((Class) pluginClassInstance).getClassLoader();
+    		} else {
+    			loader = (PluginClassLoader) pluginClassInstance.getClass().getClassLoader();
+    		}
+            return Launcher.getPluginServices(loader.getPluginName());
+        } catch (ClassCastException e) {
+            /*
+             * throw new RuntimeException( "Parameter is not a plugin class
+             * instance");
+             */
+            return null;
+        }
+    }
+
+    /**
+     * Gets a reference to the PluginServices object associated with the
+     * provided plugin.
+     * 
+     * @param pluginName
+     *            Plugin's name whose services are going to be used
+     * 
+     * @return The PluginServices object associated with the provided plugin.
+     */
+    public static PluginServices getPluginServices(String pluginName) {
+        return Launcher.getPluginServices(pluginName);
+    }
+
+    /**
+     * Gets the window manager (MDIManager).
+     * 
+     * @return A reference to the window manager (MDIManager).
+     */
+    public static MDIManager getMDIManager() {
+        return Launcher.getFrame().getMDIManager();
+    }
+
+    /**
+     * Gets the application's main frame.
+     * 
+     * @return A reference to the application's main window
+     */
+    public static MainFrame getMainFrame() {
+        return Launcher.getFrame();
+    }
+
+    public static void registerKeyStroke(KeyStroke key, KeyEventDispatcher a) {
+        GlobalKeyEventDispatcher.getInstance().registerKeyStroke(key, a);
+    }
+
+    public static void unRegisterKeyStroke(KeyStroke key) {
+        GlobalKeyEventDispatcher.getInstance().removeKeyStrokeBinding(key);
+    }
+
+    /**
+     * Gets the instance of the extension whose class is provided.
+     * 
+     * @param extensionClass
+     *            Class of the extension whose instance is to be returned
+     * 
+     * @return The instance of the extension, or null if the instance does
+     *         not exist.Instancia de la extensi�n o null en caso de que no haya
+     *         una
+     */
+    public static IExtension getExtension(Class extensionClass) {
+        ExtensionDecorator extAux =
+            (ExtensionDecorator) Launcher.getClassesExtensions()
+            .get(extensionClass);
+        try {
+            return extAux.getExtension();
+        } catch (NullPointerException ex) {
+            return null;
+        }
+    }
+
+    /**
+     * Gets a reference to the Extension Decorator which adds some extra options
+     * to the basic extension interface.
+     * 
+     * @param extensionClass
+     *            The class of the extension whose decorator is to be returned
+     * @return The ExtensionDecorator associated with the provided extension,
+     *         or null if the extension does not exist.
+     */
+    public static ExtensionDecorator getDecoratedExtension(Class extensionClass) {
+        return (ExtensionDecorator) Launcher.getClassesExtensions()
+        .get(extensionClass);
+    }
+
+    /**
+     * Returns an array containing references to all the loaded extensions.
+     * 
+     * @return ExtensionDecorator[] An array of ExtensionDecorators (each
+     *         Decorator contains one extension).
+     */
+    public static ExtensionDecorator[] getDecoratedExtensions() {
+        HashMap map = Launcher.getClassesExtensions();
+        ExtensionDecorator[] extensions =
+            (ExtensionDecorator[]) map.values()
+            .toArray(new ExtensionDecorator[0]);
+        return extensions;
+    }
+
+    /**
+     * Gets an iterator with all the loaded Extensions.
+     * 
+     * @return Iterator over the decorated extensions (each member of
+     *         the iterator is an ExtensionDecorator, which in turn contains
+     *         one IExtension object).
+     */
+    public static Iterator getExtensions() {
+        return Launcher.getClassesExtensions().values().iterator();
+    }
+
+    /**
+     * Returns the message in the current's locale language
+     * corresponding to the provided translation key.
+     * The key-message pairs are obtained from the plugin's
+     * translation files (text_xx.properties files).
+     * 
+     * @param pluginObject
+     *            Any object which was loaded from a plugin
+     * 
+     * @param key
+     *            Translation key whose associated message is to be obtained
+     * 
+     * @return The message associated with the provided key, in one of the
+     *         current locale languages, or the key if the translation is not
+     *         found.
+     */
+    public static String getText(Object pluginObject, String key) {
+        if (key == null)
+            return null;
+        String translation = org.gvsig.i18n.Messages.getText(key, false);
+        if (translation != null)
+            return translation;
+        else {
+            logger.debug("Can't find translation for ''{}''.", key);
+            return key;
+        }
+    }
+
+    /**
+     * Sets the XML data which should be saved on disk for this plugin. This
+     * data can be retrieved on following sessions.
+     * 
+     * @param The
+     *            XMLEntity object containing the data to be persisted.
+     * 
+     * @see PluginServices.getPersistentXML()
+     * @see XMLEntity
+     */
+    public void setPersistentXML(XMLEntity entity) {
+        persistentXML = entity;
+    }
+
+    /**
+     * Gets the XML data which was saved on previous sessions for this
+     * plugins.
+     * 
+     * @return An XMLEntity object containing the persisted data
+     */
+    public XMLEntity getPersistentXML() {
+        if (persistentXML == null) {
+            persistentXML = new XMLEntity();
+        }
+        return persistentXML;
+    }
+
+    /**
+     * A�ade un listener a un popup menu registrado en el config.xml de alg�n
+     * plugin
+     * 
+     * @param name
+     *            Nombre del men� contextual
+     * @param c
+     *            Componente que desplegar� el men� cuando se haga click con el
+     *            bot�n derecho
+     * @param listener
+     *            Listener que se ejecutar� cuando se seleccione cualquier
+     *            entrada del men�
+     * 
+     * @throws RuntimeException
+     *             Si la interfaz no est� preparada todav�a. S�lo puede darse
+     *             durante el arranque
+     */
+    public void addPopupMenuListener(String name,
+        Component c,
+        ActionListener listener) {
+        MDIFrame frame = Launcher.getFrame();
+
+        if (frame == null) {
+            throw new RuntimeException("MDIFrame not loaded yet");
+        }
+
+        frame.addPopupMenuListener(name, c, listener, loader);
+    }
+
+    /**
+     * Gets the plugin's root directory.
+     * 
+     * @return A File pointing to the plugin's root directory.
+     */
+    public File getPluginDirectory() {
+        return Launcher.getPluginFolder(this.getPluginName());
+    }
+
+    /**
+     * Runs a background task. The events produced on the main frame will
+     * be inhibited.
+     * 
+     * @param r
+     *            The task to run.
+     * 
+     * @return The Thread on which the task is executed.
+     */
+    public static Thread backgroundExecution(Runnable r) {
+        Thread t = new Thread(new RunnableDecorator(r));
+        t.start();
+
+        return t;
+    }
+
+    /**
+     * Runs a backbround task. This task may be monitored and canceled, and
+     * does not inhibit any event.
+     * 
+     * @param task
+     *            The task to run.
+     */
+    public static void cancelableBackgroundExecution(final IMonitorableTask task) {
+        final org.gvsig.utils.swing.threads.SwingWorker worker =
+            new org.gvsig.utils.swing.threads.SwingWorker() {
+
+            public Object construct() {
+                try {
+                    task.run();
+                    return task;
+                } catch (Exception e) {
+                    NotificationManager.addError(null, e);
+                }
+                return null;
+            }
+
+            /**
+             * Called on the event dispatching thread (not on the worker
+             * thread)
+             * after the <code>construct</code> method has returned.
+             */
+            public void finished() {
+                task.finished();
+            }
+        };
+
+        Component mainFrame = (Component) PluginServices.getMainFrame();
+
+        IProgressMonitorIF progressMonitor = null;
+        String title = getText(null, "PluginServices.Procesando");
+        progressMonitor =
+            new UndefinedProgressMonitor((Frame) mainFrame, title);
+        progressMonitor.setIndeterminated(!task.isDefined());
+        progressMonitor.setInitialStep(task.getInitialStep());
+        progressMonitor.setLastStep(task.getFinishStep());
+        progressMonitor.setCurrentStep(task.getCurrentStep());
+        progressMonitor.setMainTitleLabel(task.getStatusMessage());
+        progressMonitor.setNote(task.getNote());
+        progressMonitor.open();
+        int delay = 500;
+        TaskMonitorTimerListener timerListener =
+            new TaskMonitorTimerListener(progressMonitor, task);
+        Timer timer = new Timer(delay, timerListener);
+        timerListener.setTimer(timer);
+        timer.start();
+
+        worker.start();
+
+    }
+
+    /**
+     * Closes the application. Cleanly exits from the application:
+     * terminates all the extensions, then exits.
+     * 
+     */
+    public static void closeApplication() {
+        Launcher.closeApplication();
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @author Fernando Gonz�lez Cort�s
+     */
+    private static class RunnableDecorator implements Runnable {
+
+        private Runnable r;
+
+        /**
+         * Crea un nuevo RunnableDecorator.
+         * 
+         * @param r
+         *            DOCUMENT ME!
+         */
+        public RunnableDecorator(Runnable r) {
+            this.r = r;
+        }
+
+        /**
+         * @see java.lang.Runnable#run()
+         */
+        public void run() {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+
+                    public void run() {
+                        try {
+                            r.run();
+                        } catch (RuntimeException e) {
+                            NotificationManager.addError(Messages.getText("PluginServices.Bug_en_el_codigo"),
+                                e);
+                        } catch (Error e) {
+                            NotificationManager.addError(Messages.getText("PluginServices.Error_grave_de_la_aplicaci�n"),
+                                e);
+                        }
+                    }
+                });
+            } catch (InterruptedException e) {
+                NotificationManager.addWarning(Messages.getText("PluginServices.No_se_pudo_poner_el_reloj_de_arena"),
+                    e);
+            } catch (InvocationTargetException e) {
+                NotificationManager.addWarning(Messages.getText("PluginServices.No_se_pudo_poner_el_reloj_de_arena"),
+                    e);
+            }
+        }
+    }
+
+    /**
+     * Gets an array containing the application's startup arguments. <br>
+     * <br>
+     * Usually: <code>appName plugins-directory [locale] [other args]</code>
+     * 
+     * @return the original arguments that Andami received. (app-name
+     *         plugins-directory, locale, etc)
+     */
+    public static String[] getArguments() {
+        return arguments;
+    }
+
+    /**
+     * Replaces the original Andami arguments with the provided arguments.
+     * 
+     * @param arguments
+     *            An array of String, each element of the array
+     *            represents one
+     *            argument.
+     */
+    public static void setArguments(String[] arguments) {
+        PluginServices.arguments = arguments;
+    }
+
+    /**
+     * Returns the value of a command line named argument. <br>
+     * <br>
+     * The argument format is: <br>
+     * -{argumentName}={argumentValue} <br>
+     * <br>
+     * example: <br>
+     * ' -language=en '
+     * 
+     * @return String The value of the argument
+     */
+    public static String getArgumentByName(String name) {
+        for (int i = 2; i < PluginServices.arguments.length; i++) {
+        	String arg = PluginServices.arguments[i];
+        	if( arg != null ) {
+	            int index = arg.indexOf(name + "=");
+	            if (index != -1)
+	                return arg.substring(index
+	                    + name.length() + 1);
+        	}
+        }
+        return null;
+    }
+
+    /**
+     * Gets the logger. The logger is used to register important
+     * events (errors, etc), which are stored on a file which
+     * can be checked later.
+     * 
+     * @return A Logger object.
+     * @see Logger object from the Log4j library.
+     * 
+     */
+    public static Logger getLogger() {
+        return logger;
+    }
+
+    public static DlgPreferences getDlgPreferences() {
+        return DlgPreferences.getInstance();
+    }
+
+    /**
+     * Stores the provided text data on the clipboard.
+     * 
+     * @param data
+     *            An String containing the data to be stored
+     *            on the clipboard.
+     */
+    public static void putInClipboard(String data) {
+        StringSelection ss = new StringSelection(data);
+
+        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
+    }
+
+    /**
+     * Gets text data from the Clipboard, if available.
+     * 
+     * @return An String containing the clipboard's data, or <code>null</code>
+     *         if the data was not available.
+     */
+    public static String getFromClipboard() {
+
+        try {
+            return (String) Toolkit.getDefaultToolkit()
+            .getSystemClipboard()
+            .getContents(null)
+            .getTransferData(DataFlavor.stringFlavor);
+        } catch (UnsupportedFlavorException e) {
+            return null;
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            return null;
+        }
+    }
+
+    /**
+     * Gets the ExclusiveUIExtension, an special extension which
+     * will take
+     * control over the UI and will decide which extensions may be
+     * enable/disabled or visible/hidden.
+     * 
+     * @return If an ExclusiveUIExtension was set, return this extension.
+     *         Otherwise, return <code>null</code>.
+     * 
+     * @see org.gvsig.andami.Launcher#initializeExclusiveUIExtension()
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled(IExtension extension)
+     * @see org.gvsig.andami.plugins.IExtension#isVisible(IExtension extension)
+     */
+    public static ExclusiveUIExtension getExclusiveUIExtension() {
+        return PluginServices.exclusiveUIExtension;
+    }
+
+    /**
+     * Sets the ExclusiveUIExtension, an special extension which
+     * will take
+     * control over the UI and will decide which extensions may be
+     * enable/disabled or visible/hidden. <br>
+     * <br>
+     * The ExclusiveUIExtension is normally set by the following
+     * Andami startup argument: <br>
+     * <br>
+     * <code>ExclusiveUIExtension=ExtensionName</code>
+     * 
+     * @see org.gvsig.andami.Launcher#initializeExclusiveUIExtension()
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled(IExtension extension)
+     * @see org.gvsig.andami.plugins.IExtension#isVisible(IExtension extension)
+     */
+    public static void setExclusiveUIExtension(ExclusiveUIExtension extension) {
+        PluginServices.exclusiveUIExtension = extension;
+    }
+
+    public static void addLoaders(ArrayList classLoaders) {
+        PluginClassLoader.addLoaders(classLoaders);
+    }
+
+    /**
+     * @deprecated use ToolsSwingLocator.getIconThemeManager()
+     */
+    public static IconThemeManager getIconThemeManager() {
+    	return ToolsSwingLocator.getIconThemeManager();
+    }
+
+    /**
+     * @deprecated use  ToolsSwingLocator.getIconThemeManager().getCurrent()
+     */
+    public static IconTheme getIconTheme() {
+    	return getIconThemeManager().getCurrent(); 
+    }
+
+    /**
+     * Try to detect if the application is running in a development
+     * environment. <br>
+     * This look for <b>.project</b> and <b>.classpath</b> files in the starts
+     * path of the application.
+     * 
+     * @return true if <b>.project</b> and <b>.classpath</b> are in the
+     *         development path
+     */
+    public static boolean runningInDevelopment() {
+        String andamiPath;
+        Properties props = System.getProperties();
+
+        try {
+            try {
+                andamiPath =
+                    (new File(Launcher.class.getResource(".").getFile()
+                        + File.separator + ".." + File.separator + ".."
+                        + File.separator + ".." + File.separator + "..")).getCanonicalPath();
+            } catch (IOException e) {
+                andamiPath =
+                    (new File(Launcher.class.getResource(".").getFile()
+                        + File.separator + ".." + File.separator + ".."
+                        + File.separator + ".." + File.separator + "..")).getAbsolutePath();
+            }
+        } catch (Exception e1) {
+            andamiPath = (String) props.get("user.dir");
+        }
+
+        File andamiJar = new File(andamiPath + File.separator + "andami.jar");
+        if (!andamiJar.exists())
+            return false;
+        File projectFile = new File(andamiPath + File.separator + ".project");
+        File classpathFile =
+            new File(andamiPath + File.separator + ".classpath");
+        return projectFile.exists() && classpathFile.exists();
+
+    }
+
+    public PluginsManager getManager() {
+        return PluginsLocator.getManager();
+    }
+
+    private String[] getAllPluginNames() {
+    	String[] names = new String[this.alternativeNames.length+1];
+    	names[0] = this.getPluginName();
+    	for( int n=0; n<this.alternativeNames.length; n++ ) {
+        	names[n+1] = this.alternativeNames[n];
+    	}
+    	return names;
+    }
+    
+    public DynObject getPluginProperties() {
+        if (this.pluginPersistence == null) {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            DynStruct dynStruct = manager.getDynObjectDefinition(getPluginName());
+            if ( dynStruct == null) {
+                File persistenceDefinitionFile =
+                    new File(this.getPluginDirectory(), "plugin-persistence.def");
+                String[] names = getAllPluginNames(); 
+                for( int i=0; i<names.length ; i++ ) {
+	                try {
+	                    dynStruct = manager.addDefinition(DynObject.class,
+	                        names[i],
+	                        new FileInputStream(persistenceDefinitionFile),
+	                        this.getClassLoader(),
+	                        null,
+	                        null);
+	                    break;
+	                } catch (FileNotFoundException e) {
+	                    throw new PluginPersistenceNeedDefinitionException(this.getPluginName(), e);
+	                } catch (AddDefinitionException e) {
+	                	if( i+1 >= names.length ) { // Si ya no hay mas nombres peta
+	                		throw new PluginPersistenceAddDefinitionException(this.getPluginName(), e);
+	                	}
+	                }
+                }
+            }
+
+            File persistenceFile = getPluginPersistenceFile();
+            if (persistenceFile.exists()) {
+                PersistentState state;
+
+                try {
+                    state = manager.loadState(new FileInputStream(persistenceFile));
+                    pluginPersistence = (DynObject) manager.create(state);
+                } catch (Exception e) {
+                	
+                    logger.info("Can't retrieve persistent values from plugin "+
+                    getPluginName(), e);
+                    showMessageDialogDelayed(Messages.getText("_Unable_to_read_persistence_for_plugin")
+                                    + ": " + getPluginName() + "\n" +
+                                    Messages.getText("_Perhaps_saved_data_refers_to_missing_plugin"),
+                                    Messages.getText("_Persistence"),
+                                    JOptionPane.WARNING_MESSAGE);
+                }
+            }
+            if (this.pluginPersistence == null) {
+                logger.info("Creating default values for plugin persistence ("+this.getPluginName()+").");
+                this.pluginPersistence =
+                    ToolsLocator.getDynObjectManager()
+                    .createDynObject(dynStruct); 
+            }
+        }
+        return pluginPersistence;
+    }
+
+    private void showMessageDialogDelayed(final String msg, final String title, final int type) {
+        PluginsManager pluginManger = PluginsLocator.getManager();
+        pluginManger.addStartupTask("Persistence_"+getPluginName(), new Runnable() {
+           public void run() {
+                JOptionPane.showMessageDialog(
+                                (Component) PluginServices.getMainFrame(),
+                                msg,
+                                title,
+                                type);
+                    }
+        }, true, 100);
+    }
+    
+    public void savePluginProperties() {
+        if (this.pluginPersistence == null) {
+            return;
+        }
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		File persistenceFile = getPluginPersistenceFile();
+        PersistentState state;
+        FileOutputStream fos;
+        try {
+            state = manager.getState(pluginPersistence);
+            manager.saveState(state, new FileOutputStream(persistenceFile));
+        } catch (Exception e) {
+            throw new PluginSaveDataException(this.getPluginName(), e);
+        }
+
+
+    }
+
+	/**
+	 * Returns the plugin persistence file.
+	 * 
+	 * @return the plugin persistence file
+	 */
+	private File getPluginPersistenceFile() {
+		return new File(getPluginHomeFolder(), "plugin-persistence.dat");
+	}
+
+	/**
+	 * Returns the folder where the plugin stores its resources. That folder
+	 * will be usually a subfolder into the application folder in the user home
+	 * folder.
+	 * 
+	 * @return the folder where the plugin stores its resources
+	 */
+	public File getPluginHomeFolder() {
+		File persistenceFolder = new File(Launcher.getAppHomeDir()
+				+ File.separator + "plugins" + File.separator
+				+ this.getPluginName());
+
+		if (!persistenceFolder.exists()) {
+			persistenceFolder.mkdirs();
+		}
+
+		return persistenceFolder;
+	}
+
+    public class PluginPersistenceNeedDefinitionException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = -2036279527440882712L;
+
+        PluginPersistenceNeedDefinitionException(String name, Throwable cause) {
+            super("Can't load persistence definition of plugin %(name).",
+                "_cant_load_persistence_definition_of_plugin_XnameX",
+                serialVersionUID);
+            initCause(cause);
+            setValue("name", name);
+        }
+    }
+
+    public class PluginPersistenceAddDefinitionException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 2227722796640780361L;
+
+        PluginPersistenceAddDefinitionException(String name, Throwable cause) {
+            super("Can't add persistence definition of plugin %(name).",
+                "_cant_add_persistence_definition_of_plugin_XnameX",
+                serialVersionUID);
+            this.initCause(cause);
+            setValue("name", name);
+        }
+    }
+
+    public class PluginLoadDataException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1168749231143949111L;
+
+        PluginLoadDataException(String name) {
+            super("Can't load data of plugin %(name).",
+                "_cant_load_data_of_plugin_XnameX",
+                serialVersionUID);
+            setValue("name", name);
+        }
+    }
+
+    public class PluginSaveDataException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 4893241183911774542L;
+        private final static String MESSAGE_FORMAT = "Can't save data of plugin %(name).";
+        private final static String MESSAGE_KEY = "_cant_save_data_of_plugin_XnameX";
+
+        PluginSaveDataException(String name) {
+            super(MESSAGE_FORMAT,
+                MESSAGE_KEY,
+                serialVersionUID);
+            setValue("name", name);
+        }
+
+        public PluginSaveDataException(String name, Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+            setValue("name", name);
+
+        }
+    }
+    
+    @Override
+    public String toString() {
+        return super.toString()+" "+this.getPluginName();
+    }
+    
+    public void addDependencyWithPlugin(PluginServices otherPlugin) {
+        this.getClassLoader().addPluginClassLoader(otherPlugin.getClassLoader());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PropertyDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PropertyDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PropertyDescriptor.java	(revision 42196)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PropertyDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class PropertyDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PropertyDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PropertyDescriptor() {
+        super();
+        xmlName = "property";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Property target = (Property) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Property target = (Property) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _value
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_value", "value", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Property target = (Property) object;
+                return target.getValue();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Property target = (Property) object;
+                    target.setValue( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _value
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.persistence.generate.PropertyDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Property.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PropertyDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java	(revision 42196)
@@ -0,0 +1,229 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PluginsStatusDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class PluginsStatusDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PluginsStatusDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginsStatusDescriptor() {
+        super();
+        xmlName = "plugins-status";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _plugin
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Plugin.class, "_plugin", "plugin", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginsStatus target = (PluginsStatus) object;
+                return target.getPlugin();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginsStatus target = (PluginsStatus) object;
+                    target.setPlugin( (org.gvsig.andami.persistence.generate.Plugin) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Plugin();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _plugin
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _toolBars
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.ToolBars.class, "_toolBars", "tool-bars", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginsStatus target = (PluginsStatus) object;
+                return target.getToolBars();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginsStatus target = (PluginsStatus) object;
+                    target.setToolBars( (org.gvsig.andami.persistence.generate.ToolBars) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.ToolBars();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _toolBars
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.PluginsStatusDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.PluginsStatus.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Property.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Property.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Property.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Property.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Property.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Property implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _value
+     */
+    private java.lang.String _value;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Property() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Property()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'value'.
+     * 
+     * @return the value of field 'value'.
+     */
+    public java.lang.String getValue()
+    {
+        return this._value;
+    } //-- java.lang.String getValue() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'value'.
+     * 
+     * @param value the value of field 'value'.
+     */
+    public void setValue(java.lang.String value)
+    {
+        this._value = value;
+    } //-- void setValue(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Property) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Property.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Property.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java	(revision 42196)
@@ -0,0 +1,194 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ToolBarsDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class ToolBarsDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ToolBarsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBarsDescriptor() {
+        super();
+        xmlName = "tool-bars";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _toolBarList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.ToolBar.class, "_toolBarList", "tool-bar", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBars target = (ToolBars) object;
+                return target.getToolBar();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBars target = (ToolBars) object;
+                    target.addToolBar( (org.gvsig.andami.persistence.generate.ToolBar) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.ToolBar();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _toolBarList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.ToolBarsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.ToolBars.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBars.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBars.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBars.java	(revision 42196)
@@ -0,0 +1,251 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ToolBars.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class ToolBars.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ToolBars implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _toolBarList
+     */
+    private java.util.Vector _toolBarList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBars() {
+        super();
+        _toolBarList = new Vector();
+    } //-- com.iver.andami.persistence.generate.ToolBars()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addToolBar
+     * 
+     * @param vToolBar
+     */
+    public void addToolBar(org.gvsig.andami.persistence.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.addElement(vToolBar);
+    } //-- void addToolBar(com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method addToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void addToolBar(int index, org.gvsig.andami.persistence.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.insertElementAt(vToolBar, index);
+    } //-- void addToolBar(int, com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method enumerateToolBar
+     */
+    public java.util.Enumeration enumerateToolBar()
+    {
+        return _toolBarList.elements();
+    } //-- java.util.Enumeration enumerateToolBar() 
+
+    /**
+     * Method getToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.ToolBar getToolBar(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.persistence.generate.ToolBar) _toolBarList.elementAt(index);
+    } //-- com.iver.andami.persistence.generate.ToolBar getToolBar(int) 
+
+    /**
+     * Method getToolBar
+     */
+    public org.gvsig.andami.persistence.generate.ToolBar[] getToolBar()
+    {
+        int size = _toolBarList.size();
+        org.gvsig.andami.persistence.generate.ToolBar[] mArray = new org.gvsig.andami.persistence.generate.ToolBar[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.persistence.generate.ToolBar) _toolBarList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.persistence.generate.ToolBar[] getToolBar() 
+
+    /**
+     * Method getToolBarCount
+     */
+    public int getToolBarCount()
+    {
+        return _toolBarList.size();
+    } //-- int getToolBarCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllToolBar
+     */
+    public void removeAllToolBar()
+    {
+        _toolBarList.removeAllElements();
+    } //-- void removeAllToolBar() 
+
+    /**
+     * Method removeToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.ToolBar removeToolBar(int index)
+    {
+        java.lang.Object obj = _toolBarList.elementAt(index);
+        _toolBarList.removeElementAt(index);
+        return (org.gvsig.andami.persistence.generate.ToolBar) obj;
+    } //-- com.iver.andami.persistence.generate.ToolBar removeToolBar(int) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void setToolBar(int index, org.gvsig.andami.persistence.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _toolBarList.setElementAt(vToolBar, index);
+    } //-- void setToolBar(int, com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param toolBarArray
+     */
+    public void setToolBar(org.gvsig.andami.persistence.generate.ToolBar[] toolBarArray)
+    {
+        //-- copy array
+        _toolBarList.removeAllElements();
+        for (int i = 0; i < toolBarArray.length; i++) {
+            _toolBarList.addElement(toolBarArray[i]);
+        }
+    } //-- void setToolBar(com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.ToolBars) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.ToolBars.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBars.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatus.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PluginsStatus.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class PluginsStatus.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PluginsStatus implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _plugin
+     */
+    private org.gvsig.andami.persistence.generate.Plugin _plugin;
+
+    /**
+     * Field _toolBars
+     */
+    private org.gvsig.andami.persistence.generate.ToolBars _toolBars;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginsStatus() {
+        super();
+    } //-- com.iver.andami.persistence.generate.PluginsStatus()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'plugin'.
+     * 
+     * @return the value of field 'plugin'.
+     */
+    public org.gvsig.andami.persistence.generate.Plugin getPlugin()
+    {
+        return this._plugin;
+    } //-- com.iver.andami.persistence.generate.Plugin getPlugin() 
+
+    /**
+     * Returns the value of field 'toolBars'.
+     * 
+     * @return the value of field 'toolBars'.
+     */
+    public org.gvsig.andami.persistence.generate.ToolBars getToolBars()
+    {
+        return this._toolBars;
+    } //-- com.iver.andami.persistence.generate.ToolBars getToolBars() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'plugin'.
+     * 
+     * @param plugin the value of field 'plugin'.
+     */
+    public void setPlugin(org.gvsig.andami.persistence.generate.Plugin plugin)
+    {
+        this._plugin = plugin;
+    } //-- void setPlugin(com.iver.andami.persistence.generate.Plugin) 
+
+    /**
+     * Sets the value of field 'toolBars'.
+     * 
+     * @param toolBars the value of field 'toolBars'.
+     */
+    public void setToolBars(org.gvsig.andami.persistence.generate.ToolBars toolBars)
+    {
+        this._toolBars = toolBars;
+    } //-- void setToolBars(com.iver.andami.persistence.generate.ToolBars) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.PluginsStatus) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.PluginsStatus.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java	(revision 42196)
@@ -0,0 +1,194 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: BookmarksDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class BookmarksDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class BookmarksDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public BookmarksDescriptor() {
+        super();
+        xmlName = "bookmarks";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _bookmark
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Bookmark.class, "_bookmark", "bookmark", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Bookmarks target = (Bookmarks) object;
+                return target.getBookmark();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Bookmarks target = (Bookmarks) object;
+                    target.setBookmark( (org.gvsig.andami.persistence.generate.Bookmark) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Bookmark();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _bookmark
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.BookmarksDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Bookmarks.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmarks.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmarks.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmarks.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Bookmarks.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Bookmarks.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Bookmarks implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _bookmark
+     */
+    private org.gvsig.andami.persistence.generate.Bookmark _bookmark;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Bookmarks() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Bookmarks()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'bookmark'.
+     * 
+     * @return the value of field 'bookmark'.
+     */
+    public org.gvsig.andami.persistence.generate.Bookmark getBookmark()
+    {
+        return this._bookmark;
+    } //-- com.iver.andami.persistence.generate.Bookmark getBookmark() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'bookmark'.
+     * 
+     * @param bookmark the value of field 'bookmark'.
+     */
+    public void setBookmark(org.gvsig.andami.persistence.generate.Bookmark bookmark)
+    {
+        this._bookmark = bookmark;
+    } //-- void setBookmark(com.iver.andami.persistence.generate.Bookmark) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Bookmarks) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Bookmarks.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmarks.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowsDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowsDescriptor.java	(revision 42196)
@@ -0,0 +1,194 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: WindowsDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class WindowsDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class WindowsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public WindowsDescriptor() {
+        super();
+        xmlName = "windows";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _windowList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Window.class, "_windowList", "window", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Windows target = (Windows) object;
+                return target.getWindow();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Windows target = (Windows) object;
+                    target.addWindow( (org.gvsig.andami.persistence.generate.Window) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Window();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _windowList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.WindowsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Windows.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowsDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Windows.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Windows.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Windows.java	(revision 42196)
@@ -0,0 +1,251 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Windows.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Windows.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Windows implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _windowList
+     */
+    private java.util.Vector _windowList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Windows() {
+        super();
+        _windowList = new Vector();
+    } //-- com.iver.andami.persistence.generate.Windows()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addWindow
+     * 
+     * @param vWindow
+     */
+    public void addWindow(org.gvsig.andami.persistence.generate.Window vWindow)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _windowList.addElement(vWindow);
+    } //-- void addWindow(com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method addWindow
+     * 
+     * @param index
+     * @param vWindow
+     */
+    public void addWindow(int index, org.gvsig.andami.persistence.generate.Window vWindow)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _windowList.insertElementAt(vWindow, index);
+    } //-- void addWindow(int, com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method enumerateWindow
+     */
+    public java.util.Enumeration enumerateWindow()
+    {
+        return _windowList.elements();
+    } //-- java.util.Enumeration enumerateWindow() 
+
+    /**
+     * Method getWindow
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Window getWindow(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _windowList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.persistence.generate.Window) _windowList.elementAt(index);
+    } //-- com.iver.andami.persistence.generate.Window getWindow(int) 
+
+    /**
+     * Method getWindow
+     */
+    public org.gvsig.andami.persistence.generate.Window[] getWindow()
+    {
+        int size = _windowList.size();
+        org.gvsig.andami.persistence.generate.Window[] mArray = new org.gvsig.andami.persistence.generate.Window[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.persistence.generate.Window) _windowList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.persistence.generate.Window[] getWindow() 
+
+    /**
+     * Method getWindowCount
+     */
+    public int getWindowCount()
+    {
+        return _windowList.size();
+    } //-- int getWindowCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllWindow
+     */
+    public void removeAllWindow()
+    {
+        _windowList.removeAllElements();
+    } //-- void removeAllWindow() 
+
+    /**
+     * Method removeWindow
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Window removeWindow(int index)
+    {
+        java.lang.Object obj = _windowList.elementAt(index);
+        _windowList.removeElementAt(index);
+        return (org.gvsig.andami.persistence.generate.Window) obj;
+    } //-- com.iver.andami.persistence.generate.Window removeWindow(int) 
+
+    /**
+     * Method setWindow
+     * 
+     * @param index
+     * @param vWindow
+     */
+    public void setWindow(int index, org.gvsig.andami.persistence.generate.Window vWindow)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _windowList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _windowList.setElementAt(vWindow, index);
+    } //-- void setWindow(int, com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method setWindow
+     * 
+     * @param windowArray
+     */
+    public void setWindow(org.gvsig.andami.persistence.generate.Window[] windowArray)
+    {
+        //-- copy array
+        _windowList.removeAllElements();
+        for (int i = 0; i < windowArray.length; i++) {
+            _windowList.addElement(windowArray[i]);
+        }
+    } //-- void setWindow(com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Windows) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Windows.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Windows.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java	(revision 42196)
@@ -0,0 +1,195 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: XmlEntityDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class XmlEntityDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class XmlEntityDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlEntityDescriptor() {
+        super();
+        xmlName = "xml-entity";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _propertyList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Property.class, "_propertyList", "property", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                XmlEntity target = (XmlEntity) object;
+                return target.getProperty();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    XmlEntity target = (XmlEntity) object;
+                    target.addProperty( (org.gvsig.andami.persistence.generate.Property) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Property();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _propertyList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.XmlEntityDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.XmlEntity.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntity.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntity.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntity.java	(revision 42196)
@@ -0,0 +1,251 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: XmlEntity.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class XmlEntity.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class XmlEntity implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _propertyList
+     */
+    private java.util.Vector _propertyList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlEntity() {
+        super();
+        _propertyList = new Vector();
+    } //-- com.iver.andami.persistence.generate.XmlEntity()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addProperty
+     * 
+     * @param vProperty
+     */
+    public void addProperty(org.gvsig.andami.persistence.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _propertyList.addElement(vProperty);
+    } //-- void addProperty(com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method addProperty
+     * 
+     * @param index
+     * @param vProperty
+     */
+    public void addProperty(int index, org.gvsig.andami.persistence.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _propertyList.insertElementAt(vProperty, index);
+    } //-- void addProperty(int, com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method enumerateProperty
+     */
+    public java.util.Enumeration enumerateProperty()
+    {
+        return _propertyList.elements();
+    } //-- java.util.Enumeration enumerateProperty() 
+
+    /**
+     * Method getProperty
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Property getProperty(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _propertyList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.persistence.generate.Property) _propertyList.elementAt(index);
+    } //-- com.iver.andami.persistence.generate.Property getProperty(int) 
+
+    /**
+     * Method getProperty
+     */
+    public org.gvsig.andami.persistence.generate.Property[] getProperty()
+    {
+        int size = _propertyList.size();
+        org.gvsig.andami.persistence.generate.Property[] mArray = new org.gvsig.andami.persistence.generate.Property[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.persistence.generate.Property) _propertyList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.persistence.generate.Property[] getProperty() 
+
+    /**
+     * Method getPropertyCount
+     */
+    public int getPropertyCount()
+    {
+        return _propertyList.size();
+    } //-- int getPropertyCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllProperty
+     */
+    public void removeAllProperty()
+    {
+        _propertyList.removeAllElements();
+    } //-- void removeAllProperty() 
+
+    /**
+     * Method removeProperty
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Property removeProperty(int index)
+    {
+        java.lang.Object obj = _propertyList.elementAt(index);
+        _propertyList.removeElementAt(index);
+        return (org.gvsig.andami.persistence.generate.Property) obj;
+    } //-- com.iver.andami.persistence.generate.Property removeProperty(int) 
+
+    /**
+     * Method setProperty
+     * 
+     * @param index
+     * @param vProperty
+     */
+    public void setProperty(int index, org.gvsig.andami.persistence.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _propertyList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _propertyList.setElementAt(vProperty, index);
+    } //-- void setProperty(int, com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method setProperty
+     * 
+     * @param propertyArray
+     */
+    public void setProperty(org.gvsig.andami.persistence.generate.Property[] propertyArray)
+    {
+        //-- copy array
+        _propertyList.removeAllElements();
+        for (int i = 0; i < propertyArray.length; i++) {
+            _propertyList.addElement(propertyArray[i]);
+        }
+    } //-- void setProperty(com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.XmlEntity) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.XmlEntity.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntity.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginDescriptor.java	(revision 42196)
@@ -0,0 +1,337 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: PluginDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+
+/**
+ * Class PluginDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class PluginDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginDescriptor() {
+        super();
+        xmlName = "plugin";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _lastUpdate
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_lastUpdate", "lastUpdate", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getLastUpdate();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setLastUpdate( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _lastUpdate
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _xmlEntity
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.XmlEntity.class, "_xmlEntity", "xml-entity", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getXmlEntity();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setXmlEntity( (org.gvsig.andami.persistence.generate.XmlEntity) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.XmlEntity();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xmlEntity
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _bookmarks
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Bookmarks.class, "_bookmarks", "bookmarks", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getBookmarks();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setBookmarks( (org.gvsig.andami.persistence.generate.Bookmarks) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Bookmarks();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _bookmarks
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _windows
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Windows.class, "_windows", "windows", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getWindows();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setWindows( (org.gvsig.andami.persistence.generate.Windows) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Windows();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _windows
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.PluginDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Plugin.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Plugin.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Plugin.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Plugin.java	(revision 42196)
@@ -0,0 +1,250 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Plugin.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Plugin.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Plugin implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _lastUpdate
+     */
+    private java.lang.String _lastUpdate;
+
+    /**
+     * Field _xmlEntity
+     */
+    private org.gvsig.andami.persistence.generate.XmlEntity _xmlEntity;
+
+    /**
+     * Field _bookmarks
+     */
+    private org.gvsig.andami.persistence.generate.Bookmarks _bookmarks;
+
+    /**
+     * Field _windows
+     */
+    private org.gvsig.andami.persistence.generate.Windows _windows;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Plugin() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Plugin()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'bookmarks'.
+     * 
+     * @return the value of field 'bookmarks'.
+     */
+    public org.gvsig.andami.persistence.generate.Bookmarks getBookmarks()
+    {
+        return this._bookmarks;
+    } //-- com.iver.andami.persistence.generate.Bookmarks getBookmarks() 
+
+    /**
+     * Returns the value of field 'lastUpdate'.
+     * 
+     * @return the value of field 'lastUpdate'.
+     */
+    public java.lang.String getLastUpdate()
+    {
+        return this._lastUpdate;
+    } //-- java.lang.String getLastUpdate() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'windows'.
+     * 
+     * @return the value of field 'windows'.
+     */
+    public org.gvsig.andami.persistence.generate.Windows getWindows()
+    {
+        return this._windows;
+    } //-- com.iver.andami.persistence.generate.Windows getWindows() 
+
+    /**
+     * Returns the value of field 'xmlEntity'.
+     * 
+     * @return the value of field 'xmlEntity'.
+     */
+    public org.gvsig.andami.persistence.generate.XmlEntity getXmlEntity()
+    {
+        return this._xmlEntity;
+    } //-- com.iver.andami.persistence.generate.XmlEntity getXmlEntity() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'bookmarks'.
+     * 
+     * @param bookmarks the value of field 'bookmarks'.
+     */
+    public void setBookmarks(org.gvsig.andami.persistence.generate.Bookmarks bookmarks)
+    {
+        this._bookmarks = bookmarks;
+    } //-- void setBookmarks(com.iver.andami.persistence.generate.Bookmarks) 
+
+    /**
+     * Sets the value of field 'lastUpdate'.
+     * 
+     * @param lastUpdate the value of field 'lastUpdate'.
+     */
+    public void setLastUpdate(java.lang.String lastUpdate)
+    {
+        this._lastUpdate = lastUpdate;
+    } //-- void setLastUpdate(java.lang.String) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'windows'.
+     * 
+     * @param windows the value of field 'windows'.
+     */
+    public void setWindows(org.gvsig.andami.persistence.generate.Windows windows)
+    {
+        this._windows = windows;
+    } //-- void setWindows(com.iver.andami.persistence.generate.Windows) 
+
+    /**
+     * Sets the value of field 'xmlEntity'.
+     * 
+     * @param xmlEntity the value of field 'xmlEntity'.
+     */
+    public void setXmlEntity(org.gvsig.andami.persistence.generate.XmlEntity xmlEntity)
+    {
+        this._xmlEntity = xmlEntity;
+    } //-- void setXmlEntity(com.iver.andami.persistence.generate.XmlEntity) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Plugin) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Plugin.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Plugin.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java	(revision 42196)
@@ -0,0 +1,265 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ToolBarDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+
+/**
+ * Class ToolBarDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ToolBarDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBarDescriptor() {
+        super();
+        xmlName = "tool-bar";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _xPosition
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_xPosition", "x-position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getXPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setXPosition( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xPosition
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _yPosition
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_yPosition", "y-position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getYPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setYPosition( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _yPosition
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.persistence.generate.ToolBarDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.ToolBar.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBar.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBar.java	(revision 42196)
@@ -0,0 +1,200 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: ToolBar.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class ToolBar.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class ToolBar implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _xPosition
+     */
+    private java.lang.String _xPosition;
+
+    /**
+     * Field _yPosition
+     */
+    private java.lang.String _yPosition;
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBar() {
+        super();
+    } //-- com.iver.andami.persistence.generate.ToolBar()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'xPosition'.
+     * 
+     * @return the value of field 'xPosition'.
+     */
+    public java.lang.String getXPosition()
+    {
+        return this._xPosition;
+    } //-- java.lang.String getXPosition() 
+
+    /**
+     * Returns the value of field 'yPosition'.
+     * 
+     * @return the value of field 'yPosition'.
+     */
+    public java.lang.String getYPosition()
+    {
+        return this._yPosition;
+    } //-- java.lang.String getYPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'xPosition'.
+     * 
+     * @param xPosition the value of field 'xPosition'.
+     */
+    public void setXPosition(java.lang.String xPosition)
+    {
+        this._xPosition = xPosition;
+    } //-- void setXPosition(java.lang.String) 
+
+    /**
+     * Sets the value of field 'yPosition'.
+     * 
+     * @param yPosition the value of field 'yPosition'.
+     */
+    public void setYPosition(java.lang.String yPosition)
+    {
+        this._yPosition = yPosition;
+    } //-- void setYPosition(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.ToolBar) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.ToolBar.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBar.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java	(revision 42196)
@@ -0,0 +1,233 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: BookmarkDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class BookmarkDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class BookmarkDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public BookmarkDescriptor() {
+        super();
+        xmlName = "bookmark";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Bookmark target = (Bookmark) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Bookmark target = (Bookmark) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _xmlEntity
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.XmlEntity.class, "_xmlEntity", "xml-entity", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Bookmark target = (Bookmark) object;
+                return target.getXmlEntity();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Bookmark target = (Bookmark) object;
+                    target.setXmlEntity( (org.gvsig.andami.persistence.generate.XmlEntity) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.XmlEntity();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xmlEntity
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.BookmarkDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Bookmark.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmark.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmark.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmark.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Bookmark.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Bookmark.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Bookmark implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _xmlEntity
+     */
+    private org.gvsig.andami.persistence.generate.XmlEntity _xmlEntity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Bookmark() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Bookmark()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'xmlEntity'.
+     * 
+     * @return the value of field 'xmlEntity'.
+     */
+    public org.gvsig.andami.persistence.generate.XmlEntity getXmlEntity()
+    {
+        return this._xmlEntity;
+    } //-- com.iver.andami.persistence.generate.XmlEntity getXmlEntity() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'xmlEntity'.
+     * 
+     * @param xmlEntity the value of field 'xmlEntity'.
+     */
+    public void setXmlEntity(org.gvsig.andami.persistence.generate.XmlEntity xmlEntity)
+    {
+        this._xmlEntity = xmlEntity;
+    } //-- void setXmlEntity(com.iver.andami.persistence.generate.XmlEntity) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Bookmark) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Bookmark.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmark.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowDescriptor.java	(revision 42196)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: WindowDescriptor.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class WindowDescriptor.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class WindowDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public WindowDescriptor() {
+        super();
+        xmlName = "window";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _rectangle
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_rectangle", "rectangle", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Window target = (Window) object;
+                return target.getRectangle();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Window target = (Window) object;
+                    target.setRectangle( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _rectangle
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _id
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_id", "id", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Window target = (Window) object;
+                return target.getId();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Window target = (Window) object;
+                    target.setId( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _id
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.persistence.generate.WindowDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Window.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowDescriptor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Window.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Window.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Window.java	(revision 42196)
@@ -0,0 +1,175 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id: Window.java 29593 2009-06-29 15:54:31Z jpiera $
+ */
+
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Window.
+ * 
+ * @version $Revision: 29593 $ $Date: 2009-06-29 17:54:31 +0200 (lun, 29 jun 2009) $
+ */
+public class Window implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _rectangle
+     */
+    private java.lang.String _rectangle;
+
+    /**
+     * Field _id
+     */
+    private java.lang.String _id;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Window() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Window()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'id'.
+     * 
+     * @return the value of field 'id'.
+     */
+    public java.lang.String getId()
+    {
+        return this._id;
+    } //-- java.lang.String getId() 
+
+    /**
+     * Returns the value of field 'rectangle'.
+     * 
+     * @return the value of field 'rectangle'.
+     */
+    public java.lang.String getRectangle()
+    {
+        return this._rectangle;
+    } //-- java.lang.String getRectangle() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'id'.
+     * 
+     * @param id the value of field 'id'.
+     */
+    public void setId(java.lang.String id)
+    {
+        this._id = id;
+    } //-- void setId(java.lang.String) 
+
+    /**
+     * Sets the value of field 'rectangle'.
+     * 
+     * @param rectangle the value of field 'rectangle'.
+     */
+    public void setRectangle(java.lang.String rectangle)
+    {
+        this._rectangle = rectangle;
+    } //-- void setRectangle(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Window) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Window.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Window.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java	(revision 42196)
@@ -0,0 +1,229 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami.persistence.serverData;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.utils.swing.jcomboServer.ServerData;
+
+/**
+ * This class is used to save a list of servers (using the Andami persistence
+ * model) to the plugins-persistence.xml file. It has methods to create a set of
+ * ServerData objects from an xml file. It can also save a set of ServerData
+ * objects in an xml file.
+ *
+ * @see es.gva.cit.catalogClient.utils.comboserver.ServerData
+ * @author Jorge Piera Llodra (piera_jor@gva.es)
+ */
+public class ServerDataPersistence implements Persistent, Comparable<ServerDataPersistence> {
+
+    public static final String PERSISTENT_NAME = "ServerDataList_Persistent";
+    public static final String PERSISTENT_DESCRIPTION = "ServerDataList Persistent";
+
+    private String serviceType = null;
+    private List<ServerData> serverList = null;
+
+    /**
+     * Constructor
+     *
+     * @param sevice Type Service type to load
+     */
+    public ServerDataPersistence(String serviceType) {
+        this.serviceType = serviceType;
+        this.serverList = new ArrayList<ServerData>();
+    }
+
+    public ServerDataPersistence() {
+        this.serverList = new ArrayList<ServerData>();
+        this.serviceType = "UNKNOW";
+    }
+
+    /**
+     * This method adds a ServerData using the Andami persistence model. If the
+     * server exists just actualizes the type and subtype fileds and changes the
+     * last access value to the current time.
+     *
+     * @param server ServerData
+     */
+    public void addServerData(ServerData server) {
+        String address = server.getServerAddress();
+        for (int i = 0; i < serverList.size(); i++) {
+            ServerData sd = serverList.get(i);
+            if (sd.getServerAddress().equals(address)) {
+                // Already exist, update  it
+                serverList.set(i, server);
+                return;
+            }
+        }
+        // Add the new server
+        serverList.add(server);
+    }
+
+    /**
+     * Returns true if exists a server in this list
+     *
+     * @param address
+     * @return
+     */
+    public boolean existsServer(String address) {
+        return contains(address);
+    }
+
+    /**
+     * This method returns an array of ServerData objects that have been saved
+     * using the gvsig tools persistence model.
+     *
+     * @return ServerData[]
+     */
+    public ServerData[] getArrayOfServerData() {
+        return (ServerData[]) serverList.toArray(new ServerData[serverList.size()]);
+    }
+
+    public List<ServerData> getServerData() {
+        return serverList;
+    }
+
+    public void setArrayOfServerData(ServerData[] servers) {
+        if (servers != null) {
+            serverList = Arrays.asList(servers);
+        }
+    }
+
+    public String getServiceType() {
+        return serviceType;
+    }
+
+    public void setServiceType(String serviceType) {
+        this.serviceType = serviceType;
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("serverData", getArrayOfServerData());
+        state.set("serviceType", serviceType);
+    }
+
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        if (state.get("serverData") instanceof List) {
+            serverList = (List<ServerData>) state.get("serverData");
+        }
+        serviceType = state.getString("serviceType");
+    }
+
+    public static void registerPersistence() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
+        if (definition == null) {
+            definition = manager.addDefinition(
+                    ServerDataPersistence.class,
+                    PERSISTENT_NAME,
+                    PERSISTENT_DESCRIPTION,
+                    null,
+                    null
+            );
+        }
+
+        definition.addDynFieldList("serverData").setClassOfItems(ServerData.class).setMandatory(false);
+        definition.addDynFieldString("serviceType").setMandatory(true);
+    }
+
+    public int compareTo(ServerDataPersistence a) {
+        if (a.getServiceType().equals(getServiceType())) {
+            if (getServerData().size() != a.getServerData().size()) {
+                return -1;
+            }
+            for (int i = 0; i < getServerData().size(); i++) {
+                ServerData serverData = getServerData().get(i);
+                if (!a.existsServer(serverData.getServerAddress())) {
+                    return -1;
+                }
+            }
+        }
+        return 0;
+    }
+
+    public boolean isEmpty() {
+        if (serverList == null) {
+            return true;
+        }
+        return serverList.isEmpty();
+    }
+
+    public void remove(String serverAddress) {
+        if (StringUtils.isBlank(serverAddress)) {
+            return;
+        }
+        Iterator<ServerData> it = getServerData().iterator();
+        while (it.hasNext()) {
+            ServerData x = it.next();
+            if (serverAddress.equalsIgnoreCase(x.getServerAddress())) {
+                it.remove();
+                return;
+            }
+        }
+    }
+
+    public void add(String server, String protocol) {
+        if (StringUtils.isBlank(server)) {
+            return;
+        }
+        this.add(new ServerData(server, protocol));
+    }
+
+    public void add(ServerData server) {
+        String address = server.getServerAddress().trim();
+        for (int i = 0; i < getServerData().size(); i++) {
+            ServerData sd = getServerData().get(i);
+            if (sd.getServerAddress().trim().equals(address)) {
+                getServerData().set(i, server);
+                return;
+            }
+        }
+        getServerData().add(server);
+    }
+
+    public boolean contains(String serverAddress) {
+        if (StringUtils.isBlank(serverAddress)) {
+            return false;
+        }
+        serverAddress = serverAddress.trim();
+        for (int i = 0; i < getServerData().size(); i++) {
+            String address = getServerData().get(i).getServerAddress().trim();
+            if (serverAddress.equalsIgnoreCase(address)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLocator.java	(revision 42196)
@@ -0,0 +1,129 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+
+public class PluginsLocator extends AbstractLocator {
+
+    private static final String LOCATOR_NAME = "PluginsLocator";
+
+    /**
+     * PluginsManager name used by the locator to access the instance
+     */
+    public static final String PLUGINS_MANAGER_NAME = "PluginsManager";
+    public static final String PLUGINS_ACTIONINFO_MANAGER_NAME = "PluginsActionInfoManager";
+    public static final String PLUGINS_LOCALE_MANAGER_NAME = "LocaleManager";
+
+    private static final String PLUGINS_MANAGER_DESCRIPTION = "PluginsManager of Andami framework";
+    private static final String PLUGINS_ACTIONINFO_MANAGER_DESCRIPTION = "PluginsActionInfoManager";
+    private static final String PLUGINS_LOCALE_MANAGER_DESCRIPTION = "LocaleManager";
+
+    /**
+     * Unique instance.
+     */
+    private static final PluginsLocator instance = new PluginsLocator();
+
+    /**
+     * Return the singleton instance.
+     *
+     * @return the singleton instance
+     */
+    public static PluginsLocator getInstance() {
+        return instance;
+    }
+
+    /**
+     * Returns the Locator name.
+     *
+     * @return String containing the locator name.
+     */
+    public String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to DataManager.
+     *
+     * @return a reference to DataManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static PluginsManager getManager() throws LocatorException {
+        return (PluginsManager) getInstance().get(PLUGINS_MANAGER_NAME);
+    }
+    
+    /**
+     * Registers the Class implementing the DataManager interface.
+     *
+     * @param clazz
+     *            implementing the DataManager interface
+     */
+    public static void registerManager(Class clazz) {
+        getInstance().register(PLUGINS_MANAGER_NAME, PLUGINS_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    /**
+     * Registers a class as the default DataManager.
+     *
+     * @param clazz
+     *            implementing the DataManager interface
+     */
+    public static void registerDefaultManager(Class clazz) {
+        getInstance().registerDefault(PLUGINS_MANAGER_NAME, PLUGINS_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+
+    public static ActionInfoManager getActionInfoManager() throws LocatorException {
+        return (ActionInfoManager) getInstance().get(PLUGINS_ACTIONINFO_MANAGER_NAME);
+    }
+
+    public static void registerActionInfoManager(Class clazz) {
+        getInstance().register(PLUGINS_ACTIONINFO_MANAGER_NAME, PLUGINS_ACTIONINFO_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    public static MainFrame getMainFrame() {
+        return Launcher.getFrame();
+    }
+    
+    public static LocaleManager getLocaleManager() throws LocatorException {
+        return (LocaleManager) getInstance().get(PLUGINS_LOCALE_MANAGER_NAME);
+    }
+
+    public static void registerLocaleManager(Class clazz) {
+        getInstance().register(PLUGINS_LOCALE_MANAGER_NAME, PLUGINS_LOCALE_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLibrary.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.andami;
+
+import org.gvsig.andami.actioninfo.impl.DefaultActionInfoManager;
+import org.gvsig.andami.firewall.DefaultFirewallConfiguration;
+import org.gvsig.andami.impl.DefaultLocaleManager;
+import org.gvsig.andami.impl.DefaultPluginsManager;
+import org.gvsig.andami.installer.translations.TranslationsInstallerFactory.RegisterTranslationsInstaller;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.util.Caller;
+import org.gvsig.tools.util.impl.DefaultCaller;
+
+
+public class PluginsLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(PluginsLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        PluginsLocator.registerDefaultManager(DefaultPluginsManager.class);
+        PluginsLocator.registerActionInfoManager(DefaultActionInfoManager.class);
+        PluginsLocator.registerLocaleManager(DefaultLocaleManager.class);
+        ToolsLocator.registerDefaultFirewallManager(DefaultFirewallConfiguration.class);
+
+        // Force initialize of the LocaleManager
+        PluginsLocator.getLocaleManager();
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        Caller caller = new DefaultCaller();
+
+        caller.add(new WindowInfo.RegisterPersistence() );
+        caller.add(new RegisterTranslationsInstaller() );
+        if( !caller.call() ) {
+            throw new LibraryException(PluginsLibrary.class, caller.getExceptions());
+        }
+
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml	(revision 42196)
@@ -0,0 +1,330 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.andami</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>Plugins management framework</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.framework</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+  <dependencies>
+
+	<!-- This dependency is a patch to resolve a problem with jcrs -->
+	<!-- This can be removed in the near future -->
+<!--     <dependency> -->
+<!--       <groupId>org.gvsig</groupId> -->
+<!--       <artifactId>org.gvsig.projection.api</artifactId> -->
+<!--       <scope>compile</scope> -->
+<!--     </dependency> -->
+
+
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>commons-configuration</groupId>
+        <artifactId>commons-configuration</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.dynform.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.dynform.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.dynform.services</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.dynform.impl</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.utils</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.ui</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.installer.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.installer.swing.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>javax.help</groupId>
+        <artifactId>javahelp</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>com.jgoodies</groupId>
+        <artifactId>looks</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>castor</groupId>
+        <artifactId>castor</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>log4j</groupId>
+        <artifactId>log4j</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>jwizardcomponent</groupId>
+        <artifactId>jwizardcomponent</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>jwizardcomponent</groupId>
+        <artifactId>jwizardcomponent-0i18n</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>net.sf.kxml</groupId>
+        <artifactId>kxml2</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.about.api</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.about.impl</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.jdk.v1_6</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.api</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.se</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>xerces</groupId>
+        <artifactId>xercesImpl</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-log4j12</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.swing.impl</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+   <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.installer.lib.impl</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.installer.lib.spi</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.installer.prov.plugin</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.installer.swing.impl</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>com.sardak</groupId>
+        <artifactId>antform</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>ant-contrib</groupId>
+        <artifactId>ant-contrib</artifactId>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.swinglabs</groupId>
+      <artifactId>swing-layout</artifactId>
+      <version>1.0.3</version>
+    </dependency>
+    <dependency>
+      <groupId>xml-apis</groupId>
+      <artifactId>xml-apis</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+  </dependencies>
+
+
+  <build>
+      <plugins>
+
+          <plugin>
+              <groupId>org.codehaus.mojo</groupId>
+              <artifactId>exec-maven-plugin</artifactId>
+              <executions>
+                  <execution>
+                      <goals>
+                          <goal>exec</goal>
+                      </goals>
+                  </execution>
+              </executions>
+              <configuration>
+                  <executable>java</executable>
+                  <arguments>
+                      <argument>-classpath</argument>
+                      <!-- automatically creates the classpath using all project
+                          dependencies, also adding the project build directory -->
+                      <classpath />
+                      <argument>org.gvsig.andami.Launcher</argument>
+                      <argument>gvSIG</argument>
+                      <argument>${gvsig.install.dir}/gvSIG/extensiones</argument>
+                  </arguments>
+                  <environmentVariables>
+                      <GDAL_DATA>${user.home}/.depman/data/gdal</GDAL_DATA>
+                      <PROJ_LIB>gvSIG/extensiones/org.gvsig.crs.extension/data</PROJ_LIB>
+                      <LD_LIBRARY_PATH>${user.home}/.depman/lib</LD_LIBRARY_PATH>
+                      <PATH>${user.home}/.depman/bin</PATH>
+                  </environmentVariables>
+              </configuration>
+          </plugin>
+
+        <plugin>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <configuration>
+                <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions>
+                <appendAssemblyId>false</appendAssemblyId>
+            </configuration>
+            <executions>
+              <execution>
+                <id>gvsig-plugin-package</id>
+                <phase>package</phase>
+                <goals>
+                    <goal>single</goal>
+                </goals>
+                <configuration>
+                  <finalName>${project.artifactId}-${project.version}-root-folder</finalName>
+                  <descriptors>
+                    <descriptor>src/main/assembly/gvsig-andami-package.xml</descriptor>
+                  </descriptors>
+                </configuration>
+              </execution>
+            </executions>
+        </plugin>
+
+        <plugin>
+          <groupId>org.codehaus.gmaven</groupId>
+          <artifactId>gmaven-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>install-plugin</id>
+              <phase>install</phase>
+              <goals>
+                <goal>execute</goal>
+              </goals>
+              <configuration>
+                <source><![CDATA[
+                  ant = new AntBuilder()
+                  source = project.basedir.getAbsolutePath() +
+                    "/target/" +
+                    project.artifactId + "-" +
+                    project.version + "-" +
+                    "root-folder.zip"
+                  target = project.properties["gvsig.product.folder.path"]
+                  ant.unzip(src: source, dest: target)
+                  ant.chmod(file:target+"/gvSIG.sh", perm:"a+rx")
+                ]]></source>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+
+          <plugin>
+            <artifactId>maven-clean-plugin</artifactId>
+            <configuration>
+              <skip>false</skip>
+              <failOnError>true</failOnError>
+              <filesets>
+                <fileset>
+                  <directory>${gvsig.product.folder.path}/lib</directory>
+                </fileset>
+              </filesets>
+            </configuration>
+            <executions>
+              <execution>
+                <id>default-clean</id>
+                <phase>clean</phase>
+              </execution>
+            </executions>
+          </plugin>
+      </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework/org.gvsig.andami
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.framework
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ca.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ca.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ca.msg	(revision 42196)
@@ -0,0 +1,581 @@
+ApplicationReadmeText
+"<%AppName%> Llegiu-me"
+
+Back
+"Retrocedeix"
+
+Browse
+"Examinar..."
+
+BuildFileText
+"Generant <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Generant el desinstal·lador..."
+
+Cancel
+"Cancel·lar"
+
+CleanupInstallText
+"Netejant la instal·lació..."
+
+Close
+"Tanca"
+
+CreateDesktopShortcutText
+"Crear icona a l'Escriptori"
+
+CreateQuickLaunchShortcutText
+"Crear icona a la Barra de Tasques"
+
+CustomInstallDescription
+"Seleccioni els components de la instal·lació."
+
+DirectoryPermissionText
+"No teniu permisos per a escriure a <%Dir%>."
+
+ExitText
+"De debò voleu sortir de la instal·lació?"
+
+FileBeingInstalledText
+"Copiant <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Eliminant <%FileBeingUninstalled%>"
+
+Finish
+"Finalitzar"
+
+GroupBeingInstalledText
+"Instal·lant <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Eliminant <%GroupBeingUninstalled%>"
+
+Help
+"Ajuda"
+
+InstallApplicationText
+"Instal·lar <%AppName%>"
+
+InstallCompleteText
+"Instal·lació completa..."
+
+InstallPrepareText
+"Preparant la instal·lació..."
+
+InstallStartupText
+"Es va a instal·lar <%AppName%> en el seu equip. Voleu continuar?"
+
+LaunchApplicationText
+"Executar <%AppName%>"
+
+Next
+"Següent"
+
+No
+"No"
+
+OK
+"Si"
+
+ProgramFilesDescription
+"Arxius de Programa Comuns"
+
+RequireRootText
+"Necessiteu tenir permisos d'administrador per executar l'instal·lador."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Una instal·lació típica."
+
+UninstallApplicationText
+"Desinstal·lar <%AppName%>"
+
+UninstallPrepareText
+"Preparant la desinstal·lació..."
+
+UpdateRegistryText
+"Actualizant el Registre de Windows..."
+
+UninstallStartupText
+"S'eliminarà completament <%AppName%> del seu sistema. De debò ho desitgeu?"
+
+UninstallLeftoverText
+"No ha estat possible eliminar alguns components. Tot i així, desitgeu\
+ eliminar-los? (no recomenat)"
+
+ViewReadmeText
+"Veure Llegiu-me"
+
+Yes
+"Si"
+
+
+LocateJavaRuntime {
+    PromptMessage
+    "Si us plau, localitzeu el vostre Entorn d'Execució Java (JRE)"
+
+    StatusMessage
+    "Cercant l'Entorn d'Execució Java (JRE)..."
+}
+
+TextWindow {
+    Title
+    "Ròtul de la Finestra"
+
+    Caption
+    "Llegenda"
+
+    Message
+    "Missatge aquí."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Selecció de Components"
+
+    Subtitle
+    "Selecció dels components de la instal·lació."
+
+    Caption
+    "Seleccioni els components que desitja instal·lar i elimini els que\
+     que no desitja que siguin instal·lats."
+
+    Message
+    "<%SpaceRequiredText%> d'espai necessari"
+
+    DescriptionLabel
+    "Descripció"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Instal·lant"
+
+    Subtitle
+    "Instal·lant <%AppName%>"
+
+    Caption
+    "Si us plau, espereu mentre s'instal·la <%AppName%> en el seu equip."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Llegenda aquí."
+
+    Message
+    "Missatge aquí."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Ròtul"
+
+    Subtitle
+    "Subtítol"
+
+    Caption
+    "Llegenda"
+
+    Message
+    "Missatge"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Ròtul"
+
+    Subtitle
+    "Subtítol"
+
+    Caption
+    "Llegenda"
+
+    Message
+    "Missatge"
+
+    Text
+    "Escriviu aquí el vostre missatge personalitzat."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Acord de Llicència"
+
+    Subtitle
+    "Si us plau, llegiu atentament l'acord de llicència."
+
+    AcceptRadiobutton
+    "Accepto els termes de l'acord de llicència."
+
+    DeclineRadiobutton
+    "NO accepto els termes de l'acord de llicència."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Llegiu-me"
+
+    Subtitle
+    "Informació sobre <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Elegiu el directori de destí"
+
+    Subtitle
+    "On desitgeu instal·lar <%AppName%>?"
+
+    Caption
+    "S'instal·larà <%AppName%> en el següent directori.\n\n Per instal·lar\
+     en aquest directori, cliqueu Següent. Per instal·lar en un altre\
+     directori, cliqueu Examinar i seleccioneu un altre directori."
+
+    Message
+    ""
+
+    BrowseText
+    "Cliqueu Següent per continuar. Si desitgeu seleccionar un\
+    directori diferent, cliqueu Examinar."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Directori Destí"
+}
+
+SelectProgramFolder {
+    Title
+    "Seleccioni el Grup de Programes"
+
+    Subtitle
+    "Si us plau, seleccioni un grup de programes."
+
+    Caption
+    "S'instal·laran icones en el Grup de Programes següent. \
+    Podeu escriure un nou nom de grup o seleccionar-ho\
+    de la llista de grups existents. \
+    Cliqueu Següent per continuar."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Grup de Programes:"
+
+    FolderListLabel
+    "Grups Existents:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Crear un grup de programes per a tots els usuaris"
+}
+
+SetupComplete {
+    Caption
+    "InstallJammer Wizard Completat"
+
+    Message
+    "El Wizard InstallJammer ha instal·lat <%AppName%> correctament. \
+     Cliqueu Finalitzar per a sortir d'aquest assistent."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Tipus d'Instal·lació"
+
+    Subtitle
+    "Seleccioni el tipus d'instal·lació més adient a les seves necessitats."
+
+    Caption
+    "Cliqueu el tipus d'instal·lació desitjada."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Descripció"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Iniciar la Còpia d'Arxius"
+
+    Subtitle
+    "Reviseu la configuració abans de copiar els arxius"
+
+    Caption
+    "S'ha reunit la informació necessària per a iniciar la còpia dels\
+    arxius del programa. Si desitgeu revisar o canviar la configuració,\
+    cliqueu Enrera. Si esteu conforme amb la configuració, cliqueu Següent\
+    per a iniciar la còpia dels arxius."
+
+    Message
+    ""
+
+    Text
+    "Directori d'Instal·lació:
+            <%InstallDir%>
+
+    Tipus d'Instalació:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Desinstal·lar"
+
+    Subtitle
+    "Desinstal·lar <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Desinstal·lació Completa"
+
+    Message
+    "<%AppName%> s'ha eliminat del seu sistema."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Detalls de la Desinstal·lació"
+
+    Subtitle
+    "Errors en l'eliminació"
+
+    Caption
+    "S'han produït els següents errors en el procés de desinstal·lació:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Informació d'Usuari"
+
+    Subtitle
+    "Si us plau, introduïu les vostres dades d'usuari."
+
+    Caption
+    "Si us plau, introduïu el nom de la vostra empresa."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Nom d'Usuari:"
+
+    CompanyLabel
+    "Empresa:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Benvingut a l'Assistent InstallJammer per a <%AppName%>"
+
+    Message
+    "Aquest programa instal·larà <%AppName%> versió <%Version%> en el seu equip.\
+    \n\nEs recomana tancar les aplicacions abans de continuar. \
+    \n\nCliqueu Següent per continuar o Cancel·lar per sortir de la instal·lació."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/README.txt	(revision 42196)
@@ -0,0 +1,23 @@
+The files with the .msg extension are text catalogs per language, used by
+InstallJammer. 
+
+Those ones override the definitions found in the standard InstallJammer 
+installation. This is the standard way to change the InstallJammer texts 
+without changing the original files into the InstallJammer installation: copy
+them next to the project file (.mpi). 
+
+The original definitions are located into:
+
+INSTALLJAMMER/lib/msgs/installer/*.msg
+INSTALLJAMMER/Themes/Modern_Wizard/*.msg
+
+The files have been copied from the InstallJammer 1.2.15 version.
+
+Take into account that if you change any text attribute of a panel into the
+InstallJammer app, that value will override the one located into the files of
+the current folder. The problem is that this way in the project the value
+will override only the value for the English language.
+
+So if you have already done that, edit the mpi file manually, look for the
+entry with the text you had changed, and remove the entry. This way the 
+value will be loaded again from the files in the current folder.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ru.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ru.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ru.msg	(revision 42196)
@@ -0,0 +1,665 @@
+ApplicationReadmeText
+"���������� � <%AppName%>"
+
+Back
+"�����"
+
+Browse
+"��������..."
+
+BuildFileText
+"�������� <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"�������� ��������� �������������..."
+
+Cancel
+"������"
+
+CleanupInstallText
+"������ ��������� �����������..."
+
+Close
+"�������"
+
+ConsolePauseQuitText
+"-- ������� ������ ��� ����������� ��� 'q' ��� ������ --"
+
+ConsolePauseText
+"-- ������� ������ ��� ����������� --"
+
+ConsoleSelectDestinationText
+"��� �� ������ ���������� <%AppName%>?"
+
+CreateDesktopShortcutText
+"������� ����� �� ������� �����"
+
+CreateQuickLaunchShortcutText
+"������� ����� � ������ �������� �������"
+
+CustomInstallDescription
+"�������� ���������� ��� ���������."
+
+DirectoryPermissionText
+"��� ������� �� ������ � <%Dir%>."
+
+DisplayName
+"<%AppName%>"
+
+DownloadingFilesText
+"��� �������� ������..."
+
+ExitText
+"�� �������, ��� ������ ��������� ������ ��������� ��������� ?"
+
+FileBeingInstalledText
+"���������� <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"��������� <%FileBeingUninstalled%>"
+
+FileOverwriteText
+"���� <%FileBeingInstalled%> ��� ����������.  ������� ������������ ��� ?"
+
+Finish
+"������"
+
+GroupBeingInstalledText
+"��������������� <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"��������� <%GroupBeingUninstalled%>"
+
+Help
+"������"
+
+InstallApplicationText
+"��������� <%AppName%>"
+
+InstallationCompleteText
+"��������� ���������."
+
+InstallCompleteText
+"��������� ����� ���������."
+
+InstallingApplicationText
+"��������������� <%AppName%>..."
+
+InstallPrepareText
+"���������� � ���������..."
+
+InstallStartupText
+"<%AppName%> ����� ����������� �� ����� ����������. ���������� ?"
+
+InstallTitleText
+"��������� <%AppName%>"
+
+LaunchApplicationText
+"������ <%AppName%>"
+
+Next
+"�����"
+
+No
+"���"
+
+OK
+"OK"
+
+PasswordIncorrectText
+"�������� ������."
+
+ProgramFilesDescription
+"����� ����������� �����"
+
+PromptForDirectoryMessage
+"����������, �������� ������� � �������� �� OK."
+
+PromptForDirectoryTitle
+"����� ��������"
+
+PromptForRootText
+"����������, ������� ������ ������������ root."
+
+RequireRootText
+"�� ������ ����� ����� ������������ root ��� ������� ���� ��������� ���������."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"����������� ���������."
+
+UninstallApplicationText
+"������������� <%AppName%>"
+
+UninstallPrepareText
+"��� ���������� � �������������..."
+
+UpdateRegistryText
+"�������� ��������� � ������ Windows..."
+
+UninstallingApplicationText
+"��� ������������� <%AppName%>..."
+
+UninstallCompleteText
+"������������� ���������."
+
+UninstallStartupText
+"<%AppName%> ����� ��������� ������� �� ����� �������. �� �������, ���\
+ ����������� ��� ������� ?"
+
+UninstallLeftoverText
+"��������� ���������� �� ����� ���� �������. �� ��-���� ������� �� �������\
+ (�� �������������) ?"
+
+UninstallTitleText
+"���������������� <%AppName%>"
+
+UnpackingFilesText
+"��� ���������� ������..."
+
+VersionHelpText
+"��� ��������� ��������� <%AppName%> <%Version%>."
+
+ViewReadmeText
+"�������� ����������"
+
+Yes
+"��"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "����������, ������� ��� ��������� Java Runtime"
+
+    StatusMessage
+    "��� ����� Java Runtime..."
+}
+
+TextWindow {
+    Title
+    "��������� ����"
+
+    Caption
+    "�������"
+
+    Message
+    "����� ������ ���� ���������."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+# options: -encoding utf-8
+
+ChooseComponents {
+    Title
+    "����� ��������� ��� ���������"
+
+    Subtitle
+    "�������� ����������, ������� �� ������ ����������."
+
+    Caption
+    "�������� ����������, ������� �� ������ ����������, � ������� �������\
+     � ��� ���������, ������� �� �� ������� �������������."
+
+    Message
+    "��� ��������� ��������� <%SpaceRequiredText%> �� ������� �����"
+
+    DescriptionLabel
+    "��������"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "���������"
+
+    Subtitle
+    "��������� <%AppName%>"
+
+    Caption
+    "��� ��������� <%AppName%> �� ��� ���������. ����������, ���������."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "����� ������ ���� �������."
+
+    Message
+    "����� ������ ���� ���������."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "���������"
+
+    Subtitle
+    "������������"
+
+    Caption
+    "�������"
+
+    Message
+    "���������"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "���������"
+
+    Subtitle
+    "������������"
+
+    Caption
+    "�������"
+
+    Message
+    "���������"
+
+    Text
+    "����� ������� �����."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "������������ ����������"
+
+    Subtitle
+    "����������, ����������� �������� ���������� ���� ������������ ����������."
+
+    Text
+    "����� ������ ���� ������������ ����������."
+
+    AcceptRadiobutton
+    "� �������� ��������� ������������� ����������."
+
+    DeclineRadiobutton
+    "� �� �������� ��������� ������������� ����������."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "����������"
+
+    Subtitle
+    "���������� � <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "������� ������� ����������"
+
+    Subtitle
+    "��� ����� ���������� <%AppName%> ?"
+
+    Caption
+    "<%AppName%> ����� ����������� � ��������� ���� �������.\n\n����� ���������� ���������\
+     � ���� �������, �������� �� <%Next%>.  ����� ���������� ��������� � ������ �������, ��������\
+     �� <%Browse%>."
+
+    Message
+    ""
+
+    BrowseText
+    "��� ����������� �������� �� <%Next%>. ��� �������� ������� �������� �������� �� <%Browse%>."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "������� ����������"
+}
+
+SelectProgramFolder {
+    Title
+    "������� ����������� ������"
+
+    Subtitle
+    "����������, �������� ����������� ������."
+
+    Caption
+    "������ ��������� ����� ��������� � ��������� ���� ����������� ������. \
+     �� ������ ������� ������ ������, ���� ������� ������ �� ������ ������������. \
+     ��� ����������� �������� �� <%Next%>."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "����������� ������:"
+
+    FolderListLabel
+    "������������ ����������� ������:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "������� ����������� ������ ��� ���� �������������"
+}
+
+SetupComplete {
+    Caption
+    "��������� ���������"
+
+    Message
+    "������ InstallJammer ������� ��������� <%AppName%>. \
+     �������� <%Finish%>, ����� ������� ������."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "��� ���������"
+
+    Subtitle
+    "�������� ��� ���������, ������� ��� ������ ����� ��������."
+
+    Caption
+    "ٸ������ �� ������� ��� ���� ���������."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "��������"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "������ ����������� ������"
+
+    Subtitle
+    "�������� ���������� ����� ������� ����������� ������"
+
+    Caption
+    "��������� ��������� ������� ����������� ���������� ��� ������ ����������� ������. \
+     ٸ������ �� <%Back%>, ����� ��������� ��� ������ ������ ���������� ��� ���������. \
+     ����� ������ ���������, �������� �� <%Next%>."
+
+    Message
+    ""
+
+    Text
+    "������� ����������:
+            <%InstallDir%>
+
+    ��� ���������:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "�������������"
+
+    Subtitle
+    "������������� <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "������������� ���������"
+
+    Message
+    "<%AppName%> ������� �� ����� �������."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "���������� � �������������"
+
+    Subtitle
+    "� �������� �������� ��������� ������"
+
+    Caption
+    "� �������� ������������� ��������� ��������� ������:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "���������� � ������������"
+
+    Subtitle
+    "����������, ������� ���� ������."
+
+    Caption
+    "����������, ������� ���� ��� � �������� ��������, � ������� �� ���������."
+
+    Message
+    ""
+
+    UserNameLabel
+    "��� ������������:"
+
+    CompanyLabel
+    "��������:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "��� ������������ ������ ��������� InstallJammer ��� <%AppName%>"
+
+    Message
+    "������ InstallJammer ��������� <%AppName%> <%Version%> �� ����� ����������. \
+    \n\n����� ������� ��������� ������������� ������� ��� ������ ����������\
+    ���������.\n\n����� ����������, �������� <%Next%>, ��� �������� <%Cancel%> ��� ������."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+InstallPassword {
+    Title
+    "������ ���������"
+
+    Subtitle
+    "��� ����������� ��������� ���������� ������� ������."
+
+    Caption
+    "����������, ������� ������."
+
+    Message
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/de.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/de.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/de.msg	(revision 42196)
@@ -0,0 +1,589 @@
+ApplicationReadmeText
+"<%AppName%> LiesMich"
+
+Back
+"Zur�ck"
+
+Browse
+"Durchsuchen..."
+
+BuildFileText
+"Erstelle <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Erstelle Deinstallation..."
+
+Cancel
+"Abbrechen"
+
+CleanupInstallText
+"Installation wird aufger�umt..."
+
+Close
+"Schlie�en"
+
+CreateDesktopShortcutText
+"Desktop Verkn�pfung anlegen"
+
+CreateQuickLaunchShortcutText
+"Verkn�pfung Schnellstartleiste anlegen"
+
+CustomInstallDescription
+"Auswahl der benutzerdefinierten Komponenten zur Installation."
+
+DirectoryPermissionText
+"Sie haben keine Schreibberechtigung f�r das Verzeichnis <%Dir%>."
+
+ExitText
+"Wollen Sie dieses Setup wirklich beenden?"
+
+FileBeingInstalledText
+"Kopiere <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Entferne <%FileBeingUninstalled%>"
+
+Finish
+"Beenden"
+
+GroupBeingInstalledText
+"Installiere <%GroupBeingInstalled%>"
+
+GroupBeingUninstalledText
+"Entferne <%GroupBeingUninstalled%>"
+
+Help
+"Hilfe"
+
+InstallApplicationText
+"Installiere <%AppName%>"
+
+InstallCompleteText
+"Installation der Dateien fertig..."
+
+InstallPrepareText
+"Vorbereitung der Installation..."
+
+InstallStartupText
+"Dies wird <%AppName%> auf Ihrem Computer installieren. Weitermachen?"
+
+LaunchApplicationText
+"Starte <%AppName%>"
+
+Next
+"Weiter"
+
+No
+"Nein"
+
+OK
+"OK"
+
+ProgramFilesDescription
+"Allgemeine Programmdateien"
+
+RequireRootText
+"Sie m�ssen root sein, um diese Installationsroutine auszuf�hren."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Eine typische Installation."
+
+UninstallApplicationText
+"Deinstalliere <%AppName%>"
+
+UninstallPrepareText
+"Vorbereitung der Deinstallation..."
+
+UpdateRegistryText
+"Die Windows Registry wird aktualisiert..."
+
+UninstallStartupText
+"Dies wird <%AppName%> vollkommen von Ihrem System entfernen. Wollen Sie dies\
+wirklich durchf�hren?"
+
+UninstallLeftoverText
+"Einige Komponenten konnten nicht entfernt werden. M�chten Sie diese trotzdem\
+l�schen (nicht empfohlen)?"
+
+VersionHelpText
+"Dieses Program wird <%AppName%> Version <%Version%> installieren."
+
+ViewReadmeText
+"Liesmich ansehen"
+
+Yes
+"Ja"
+
+
+LocateJavaRuntime {
+    PromptMessage
+    "Bitte sagen Sie uns, wo Ihre Java Runtime zu finden ist."
+
+    StatusMessage
+    "Suche Java Runtime..."
+}
+
+TextWindow {
+    Title
+    "Window Titel"
+
+    Caption
+    "�berschrift"
+
+    Message
+    "Meldung kommt hier."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Auswahl Komponenten"
+
+    Subtitle
+    "W�hlen Sie die zu installierenden Komponenten aus."
+
+    Caption
+    "W�hlen Sie die zu installierenden Komponenten aus und deselektieren Sie\
+     die Komponenten, die Sie nicht installieren m�chten."
+
+    Message
+    "<%SpaceRequiredText%> an Plattenplatz ben�tigt"
+
+    DescriptionLabel
+    "Beschreibung"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Installation"
+
+    Subtitle
+    "Installiere <%AppName%>"
+
+    Caption
+    "Bitte warten Sie, w�hrend Setup <%AppName%> auf Ihrem Computer installiert."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "�berschrift kommt hier hin."
+
+    Message
+    "Meldung kommt hier hin."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Titel"
+
+    Subtitle
+    "Untertitel"
+
+    Caption
+    "�berschrift"
+
+    Message
+    "Meldung"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Titel"
+
+    Subtitle
+    "Untertitel"
+
+    Caption
+    "Untertitel"
+
+    Message
+    "Meldung"
+
+    Text
+    "Ihr benutzerdefinierter Text kommt hier hin."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Lizenzbestimmungen"
+
+    Subtitle
+    "Bitte lesen Sie die folgenden Lizenzbestimmungen aufmerksam."
+
+    AcceptRadiobutton
+    "Ich akzeptiere die Lizenzbestimmungen."
+
+    DeclineRadiobutton
+    "Ich akzeptiere nicht die Lizenzbestimmungen."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Liesmich Informationen"
+
+    Subtitle
+    "Liesmich Informationen f�r <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Auswahl Installationsziel"
+
+    Subtitle
+    "Wohin soll <%AppName%> installiert werden?"
+
+    Caption
+    "Setup wird <%AppName%> in das folgende Verzeichnis installieren. \
+    \n\nKlicken Sie auf Weiter, wenn dieses Verzeichnis verwendet werden soll. \
+    Um ein anderes Verzeichnis auszuw�hlen, klicken Sie auf Durchsuchen und\
+    w�hlen ein anderes aus."
+
+    Message
+    ""
+
+    BrowseText
+    "Um Fortzufahren, klicken Sie auf Weiter.  Wenn Sie ein anderes Verzeichnis\
+    verwenden m�chten, klicken Sie auf Durchsuchen."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Zielordner"
+}
+
+SelectProgramFolder {
+    Title
+    "Auswahl Programmordner"
+
+    Subtitle
+    "Bitte w�hlen Sie einen Programmordner."
+
+    Caption
+    "Setup wird die Programmsymbole zum unten aufgef�hrten Programmordner\
+    hinzuf�gen. Sie k�nnen einen neuen Ordnernamen eingeben oder einen von der\
+    von der existierenden Ordnerliste ausw�hlen. Klicken Sie auf Weiter um\
+    Fortzufahren."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Programmordner:"
+
+    FolderListLabel
+    "Vorhandene Ordner:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Erstelle Programmordner f�r alle Benutzer"
+}
+
+SetupComplete {
+    Caption
+    "Installation Abgeschlossen"
+
+    Message
+    "InstallJammer hat <%AppName%> erfolgreich installiert. \
+     Klicken Sie auf Beenden, um den Assistenten zu verlassen."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Setup Art"
+
+    Subtitle
+    "W�hlen Sie die Art des Setup, welche am Besten Ihren Anforderungen\
+    entspricht."
+
+    Caption
+    "Klicken Sie auf die bevorzugte Art des Setup."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Beschreibung"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Kopieren der Dateien"
+
+    Subtitle
+    "�berpr�fen Sie die Einstellungen, bevor die Dateien kopiert werden."
+
+    Caption
+    "Setup hat genug Informationen, um die Programmdateien\
+    zu kopieren. Wenn Sie die Einstellungen �berpr�fen oder �ndern m�chten,\
+    klicken Sie auf Zur�ck. Wenn Sie mit den Einstellungen zufrieden sind,\
+    klicken Sie auf Weiter, um mit dem Kopieren der Dateien zu beginnen."
+
+    Message
+    ""
+
+    Text
+    "Installationsverzeichnis:
+                <%InstallDir%>
+
+    Setup Art:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Deinstallation"
+
+    Subtitle
+    "Deinstalliere <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Deinstallation Abgeschlossen"
+
+    Message
+    "<%AppName%> wurde von Ihrem System entfernt."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Deinstallation Details"
+
+    Subtitle
+    "Es sind Fehler beim L�schen aufgetreten"
+
+    Caption
+    "Die folgenden Fehler sind beim L�schen aufgetreten:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Benutzer Information"
+
+    Subtitle
+    "Bitte geben Sie Ihre Informationen ein."
+
+    Caption
+    "Bitte geben Sie Ihren Namen und den Namen der Firma ein, f�r die Sie\
+    arbeiten."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Benutzername:"
+
+    CompanyLabel
+    "Firma:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Willkommen beim InstallJammer Assistenten f�r <%AppName%>"
+
+    Message
+    "Dies wird <%AppName%> Version <%Version%> auf Ihrem Computer installieren. \
+    \n\nEs wird empfohlen, das Sie alle anderen Anwendungen schlie�en, bevor\
+    Sie fortfahren.\n\nKlicken Sie auf Weiter um Fortzufahren oder auf\
+    Abbrechen, um das Setup zu beenden."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ar.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ar.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/ar.msg	(revision 42196)
@@ -0,0 +1,612 @@
+RemoveDongleCaption
+"\u202B\u0623\u062E\u0631\u062C \u0645\u0641\u062A\u0627\u062D \u0631\u062E\u0635\u0629 USB"
+
+RemoveDongleMessage
+"\u202B\u0625\u0630\u0627 \u0643\u0627\u0646 \u0645\u0641\u062A\u0627\u062D \u0631\u062E\u0635\u0629 USB \u0645\u0648\u0635\u0648\u0644\u0627 \u0628\u062C\u0647\u0627\u0632\u0643\u060C \u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u0625\u062E\u0631\u0627\u062C\u0647 \u0627\u0644\u0622\u0646 \u0642\u0628\u0644 \u0627\u0644\u0634\u0631\u0648\u0639 \u0628\u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u062A\u0631\u0643\u064A\u0628.\n\u202B\n\u202B\u0644\u0627 \u062A\u062F\u062E\u0644 \u0645\u0641\u062A\u0627\u062D \u0631\u062E\u0635\u0629  USB\u062D\u062A\u0649 \u0625\u0639\u0644\u0627\u0645\u0643 \u0628\u0630\u0644\u0643."
+
+InsertDongleCaption
+"\u202B\u0623\u062F\u062E\u0644 \u0645\u0641\u062A\u0627\u062D \u0631\u062E\u0635\u0629 USB"
+
+InsertDongleMessage
+"\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062F\u062E\u0627\u0644 \u0645\u0641\u062A\u0627\u062D \u0631\u062E\u0635\u0629 USB \u0627\u0644\u0622\u0646.\n\u202B\n\u202B\u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0630\u0627 \u0627\u0644\u062A\u0631\u0643\u064A\u0628 \u0644\u0623\u0648\u0644 \u0645\u0631\u0629\u060C \u0625\u0646\u062A\u0638\u0631 \u0648\u064A\u0646\u062F\u0648\u0632 \u062D\u062A\u0649 \u062A\u062C\u062F \u0627\u0644\u0645\u0641\u062A\u0627\u062D (\u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0633\u062A\u063A\u0631\u0642 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0628\u0636\u0639 \u062B\u0648\u0627\u0646). \u0639\u0646\u062F \u0638\u0647\u0648\u0631 \u0645\u0639\u0627\u0644\u062C \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0635\u0644\u0628\u0629\u060C \u0639\u0644\u064A\u0643 \u0625\u062A\u0628\u0627\u0639 \u0627\u0644\u062E\u0637\u0648\u0627\u062A \u0623\u062F\u0646\u0627\u0647.\n\u202B\n\u202B1.	\u0625\u0630\u0627 \u0637\u0644\u0628 \u0645\u0646\u0643 \u0627\u0644\u0625\u062A\u0635\u0627\u0644 \u0644\u062A\u062D\u062F\u064A\u062B \u0627\u0644\u0648\u064A\u0646\u062F\u0648\u0632\u060C \u0625\u062E\u062A\u0627\u0631 '\u0644\u0627\u060C \u0644\u064A\u0633 \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A' \u062B\u0645 \u0623\u0646\u0642\u0631 \u0627\u0644\u062A\u0627\u0644\u064A.\n\u202B2.	\u0625\u062E\u062A\u0627\u0631 \u062A\u0631\u0643\u064A\u0628 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C \u062A\u0644\u0642\u0627\u0626\u064A\u0627\u064B \u062B\u0645 \u0623\u0646\u0642\u0631 \u0627\u0644\u062A\u0627\u0644\u064A.\n\u202B3.	\u0623\u0646\u0642\u0631 \u0625\u0646\u062A\u0647\u0627\u0621.\n\u202B4.	\u0623\u0643\u0645\u0644 \u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u062A\u0631\u0643\u064A\u0628 \u0628\u0646\u0642\u0631\u0643 \u0627\u0644\u0646\u0627\u0644\u064A."
+
+ApplicationReadmeText
+"\u202B\u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0644\u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>"
+
+Back
+"\u202B\u0631\u062C\u0648\u0639"
+
+Browse
+"\u202B\u0625\u0633\u062A\u0637\u0644\u0627\u0639..."
+
+BuildFileText
+"\u202B\u0628\u0646\u0627\u0621 <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"\u202B\u0628\u0646\u0627\u0621 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C..."
+
+Cancel
+"\u202B\u0625\u0644\u063A\u0627\u0621"
+
+CleanupInstallText
+"\u202B\u062A\u0646\u0638\u064A\u0641 \u0627\u0644\u062A\u0631\u0643\u064A\u0628..."
+
+Close
+"\u202B\u0623\u063A\u0644\u0642"
+
+ConsolePauseQuitText
+"-- Press space to continue or 'q' to quit --"
+
+ConsolePauseText
+"-- Press space to continue --"
+
+ConsoleSelectDestinationText
+"\u202B\u0623\u064A\u0646 \u062A\u0631\u064A\u062F \u062A\u0631\u0643\u064A\u0628 <%AppName%>\u061F"
+
+CreateDesktopShortcutText
+"\u202B\u0625\u0646\u0634\u0627\u0621 \u0637\u0631\u064A\u0642 \u0645\u062E\u062A\u0635\u0631 \u0644\u0633\u0637\u062D \u0627\u0644\u0645\u0643\u062A\u0628"
+
+CreateQuickLaunchShortcutText
+"\u202B\u0625\u0646\u0634\u0627\u0621 \u0625\u062E\u062A\u0635\u0627\u0631 \u0644\u0644\u062A\u0641\u0639\u064A\u0644 \u0627\u0644\u0633\u0631\u064A\u0639"
+
+CustomInstallDescription
+"\u202B\u0625\u062E\u062A\u0627\u0631 \u0645\u0643\u0648\u0646\u0627\u062A \u0645\u0641\u0635\u0644\u0629 \u0644\u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u062A\u0631\u0643\u064A\u0628."
+
+DirectoryPermissionText
+"\u202B\u0644\u0627 \u064A\u0633\u0645\u062D \u0644\u0643 \u0628\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0641\u064A \u0627\u0644\u0645\u062C\u0644\u062F <%Dir%>."
+
+DownloadingFilesText
+"\u202B\u062A\u0646\u0632\u064A\u0644 \u0645\u0644\u0641\u0627\u062A..."
+
+ExitText
+"\u202B\u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0645\u0646 \u0627\u0644\u062E\u0631\u0648\u062C \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u061F"
+
+FileBeingInstalledText
+"\u202B\u0646\u0633\u062E <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"\u202B\u062D\u0630\u0641 <%FileBeingUnistalled%>"
+
+FileOverwriteText
+"\u202B\u0627\u0644\u0645\u0644\u0641 <%FileBeingInstalled%> \u0645\u0648\u062C\u0648\u062F \u062D\u0627\u0644\u064A\u0627\u064B \u0647\u0644 \u062A\u0631\u064A\u062F \u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0641\u0648\u0642\u0647\u061F"
+
+Finish
+"\u202B\u0625\u0646\u062A\u0647\u0627\u0621"
+
+GroupBeingInstalledText
+"\u202B\u062A\u0631\u0643\u064A\u0628 <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"\u202B\u062D\u0630\u0641 <%GroupBeingUnistalled%>"
+
+Help
+"\u202B\u0645\u0633\u0627\u0639\u062F\u0629"
+
+InstallApplicationText
+"\u202B\u062A\u0631\u0643\u064A\u0628 <%AppName%>"
+
+InstallationCompleteText
+"\u202B\u0625\u0646\u062A\u0647\u0627\u0621 \u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u062A\u0631\u0643\u064A\u0628."
+
+InstallCompleteText
+"\u202B\u0625\u0646\u062A\u0647\u0627\u0621 \u0639\u0645\u0644\u064A\u0629 \u062A\u0631\u0643\u064A\u0628 \u0627\u0644\u0645\u0644\u0641..."
+
+InstallingApplicationText
+"\u202B\u062A\u0631\u0643\u064A\u0628 <%AppName%>..."
+
+InstallPrepareText
+"\u202B\u0627\u0644\u062A\u062D\u0636\u064A\u0631 \u0644\u0644\u062A\u0631\u0643\u064A\u0628..."
+
+InstallStartupText
+"\u202B\u0633\u0648\u0641 \u064A\u062A\u0645\u0651 \u062A\u0631\u0643\u064A\u0628 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%> \u0639\u0644\u0649 \u062C\u0647\u0627\u0632\u0643.  \u0623\u0643\u0645\u0644\u061F"
+
+LaunchApplicationText
+"\u202B\u0625\u0646\u0637\u0644\u0627\u0642 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>"
+
+Next
+"\u202B\u0627\u0644\u062A\u0627\u0644\u064A"
+
+No
+"\u202B\u0644\u0627"
+
+OK
+"\u202B\u0645\u0648\u0627\u0641\u0642"
+
+ProgramFilesDescription
+"\u202B\u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u0634\u062A\u0631\u0643\u0629"
+
+PromptForRootText
+"\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062F\u062E\u0627\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631."
+
+RequireRootText
+"\u202B\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u062C\u0630\u0631 \u0644\u0643\u064A \u062A\u0642\u0648\u0645 \u0628\u062A\u0634\u063A\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u062A\u0631\u0643\u064A\u0628."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"\u202B\u0627\u0644\u062A\u0631\u0643\u064A\u0628 \u0627\u0644\u0625\u0639\u062A\u064A\u0627\u062F\u064A."
+
+UninstallApplicationText
+"\u202B\u0625\u0632\u0627\u0644\u0629 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>"
+
+UninstallPrepareText
+"\u202B\u0627\u0644\u062A\u062D\u0636\u064A\u0631 \u0644\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0631\u0646\u0627\u0645\u062C..."
+
+UpdateRegistryText
+"\u202B\u062A\u062D\u062F\u064A\u062B \u0633\u062C\u0644\u0651 Windows..."
+
+UninstallingApplicationText
+"\u202B\u0625\u0632\u0627\u0644\u0629 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>..."
+
+UninstallCompleteText
+"\u202B\u0625\u0646\u062A\u0647\u0627\u0621 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C."
+
+UninstallStartupText
+"\u202B\u0633\u0648\u0641 \u064A\u062A\u0645\u0651 \u062D\u0630\u0641 \u0646\u0647\u0627\u0626\u064A \u0644\u0644\u0628\u0631\u0646\u0627\u0645\u062C <%AppName%> \u0645\u0646 \u062C\u0647\u0627\u0632\u0643.  \u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0630\u0641\u061F"
+
+UninstallLeftoverText
+"\u202B\u0628\u0639\u0636 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0644\u0645 \u064A\u062A\u0645\u0643\u0646 \u0645\u0646 \u062D\u0630\u0641\u0647\u0627.  \u0647\u0644 \u062A\u0631\u064A\u062F \u062D\u0630\u0641\u0647\u0627 (\u0644\u0627 \u064A\u0641\u0636\u0644 \u0630\u0644\u0643)\u061F"
+
+VersionHelpText
+"\u202B\u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0633\u062A\u0642\u0648\u0645 \u0628\u062A\u0631\u0643\u064A\u0628 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%> \u0625\u0635\u062F\u0627\u0631 \u0631\u0642\u0645 <%Version%>."
+
+ViewReadmeText
+"\u202B\u062A\u0635\u0641\u062D \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u0627\u0639\u062F"
+
+Yes
+"\u202B\u0646\u0639\u0645"
+
+ConsolePause {
+    Message
+    "\u202B<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u0639\u0644\u0627\u0645\u0646\u0627 \u0623\u064A\u0646 \u0645\u0648\u0642\u0639 \u0628\u0631\u0646\u0627\u0645\u062C \u0648\u0642\u062A \u062A\u0634\u063A\u064A\u0644 Java"
+
+    StatusMessage
+    "\u202B\u0645\u062D\u0627\u0648\u0644\u0629 \u0625\u064A\u062C\u0627\u062F \u0648\u0642\u062A \u062A\u0634\u063A\u064A\u0644 Java..."
+}
+
+TextWindow {
+    Title
+    "\u202B\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0646\u0627\u0641\u0630\u0629"
+
+    Caption
+    "\u202B\u0639\u0646\u0648\u0627\u0646"
+
+    Message
+    "\u202B\u0636\u0639 \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0647\u0646\u0627."
+
+    CloseButton
+    "\u202B<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "\u202B\u0625\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A"
+
+    Subtitle
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u062A\u064A \u0633\u064A\u0642\u0648\u0645 \u0628\u062A\u0631\u0643\u064A\u0628\u0647\u0627 \u0627\u0644\u0625\u0639\u062F\u0627\u062F."
+
+    Caption
+    "\u202B\u0625\u062E\u062A\u0627\u0631 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0631\u064A\u062F \u062A\u0631\u0643\u064A\u0628\u0647\u0627 \u062B\u0645 \u0642\u0645 \u0628\u0639\u062F\u0645 \u0625\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u062A\u064A \u0644\u0627 \u062A\u0631\u064A\u062F \u062A\u0631\u0643\u064A\u0628\u0647\u0627."
+
+    Message
+    "\u202B<%SpaceRequiredText%> \u0645\u0637\u0644\u0648\u0628\u0629 \u0645\u0646 \u0645\u0633\u0627\u062D\u0629 \u0627\u0644\u062C\u0647\u0627\u0632"
+
+    DescriptionLabel
+    "\u202B\u0648\u0635\u0641"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "\u202B\u062A\u0631\u0643\u064A\u0628"
+
+    Subtitle
+    "\u202B\u062A\u0631\u0643\u064A\u0628 <%AppName%>"
+
+    Caption
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0627\u0644\u0625\u0646\u062A\u0638\u0627\u0631 \u0628\u064A\u0646\u0645\u0627 \u064A\u0642\u0648\u0645 \u0627\u0644\u0625\u0639\u062F\u0627\u062F \u0628\u062A\u0631\u0643\u064A\u0628 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%> \u0639\u0644\u0649 \u062C\u0647\u0627\u0632\u0643."
+
+    Message
+    ""
+
+    FileLabel
+    "\u202B<%Status%>"
+
+    ProgressValue
+    "\u202B<%InstallPercentComplete%>"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "\u202B\u064A\u062A\u0645\u0651 \u0648\u0636\u0639 \u0627\u0644\u0639\u0646\u0627\u0648\u064A\u0646 \u0647\u0646\u0627."
+
+    Message
+    "\u202B\u0636\u0639 \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0647\u0646\u0627."
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "\u202B\u0639\u0646\u0648\u0627\u0646"
+
+    Subtitle
+    "\u202B\u0639\u0646\u0648\u0627\u0646 \u0641\u0631\u0639\u064A"
+
+    Caption
+    "\u202B\u0639\u0646\u0648\u0627\u0646"
+
+    Message
+    "\u202B\u0631\u0633\u0627\u0644\u0629"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "\u202B\u0639\u0646\u0648\u0627\u0646"
+
+    Subtitle
+    "\u202B\u0639\u0646\u0648\u0627\u0646 \u0641\u0631\u0639\u064A"
+
+    Caption
+    "\u202B\u0639\u0646\u0648\u0627\u0646"
+
+    Message
+    "\u202B\u0631\u0633\u0627\u0644\u0629"
+
+    Text
+    "\u202B\u0636\u0639 \u0646\u0635\u0651\u0643 \u0647\u0646\u0627."
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+License {
+    Title
+    "\u202B\u0639\u0642\u062F \u0627\u0644\u0631\u062E\u0635\u0629"
+
+    Subtitle
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0642\u0631\u0627\u0621\u0629 \u0639\u0642\u062F \u0627\u0644\u0631\u062E\u0635\u0629 \u0627\u0644\u062A\u0627\u0644\u064A \u0628\u062F\u0642\u0629."
+
+    AcceptRadiobutton
+    "\u202B\u0623\u0648\u0627\u0641\u0642 \u0639\u0644\u0649 \u0634\u0631\u0648\u0637 \u0639\u0642\u062F \u0627\u0644\u0631\u062E\u0635\u0629."
+
+    DeclineRadiobutton
+    "\u202B\u0644\u0627 \u0623\u0648\u0627\u0641\u0642 \u0639\u0644\u0649 \u0634\u0631\u0648\u0637 \u0639\u0642\u062F \u0627\u0644\u0631\u062E\u0635\u0629."
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+Readme {
+    Title
+    "\u202B\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u0627\u0639\u062F"
+
+    Subtitle
+    "\u202B\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0644\u0644\u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "\u202B\u0625\u062E\u062A\u0627\u0631 \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0646\u0647\u0627\u0626\u064A"
+
+    Subtitle
+    "\u202B\u0623\u064A\u0646 \u062A\u0631\u064A\u062F \u062A\u0631\u0643\u064A\u0628 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>\u061F"
+
+    Caption
+    "\u202B\u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0633\u062A\u0642\u0648\u0645 \u0628\u062A\u0631\u0643\u064A\u0628 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%> \u0641\u064A \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u062A\u0627\u0644\u064A.\n\u202B\n\u202B\u0644\u0644\u062A\u0631\u0643\u064A\u0628 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u062C\u0644\u062F\u060C \u0623\u0646\u0642\u0631 \u0627\u0644\u062A\u0627\u0644\u064A.  \u0644\u0644\u062A\u0631\u0643\u064A\u0628 \u0641\u064A \u0645\u0644\u0641 \u0645\u062E\u062A\u0644\u0641\u060C \u0623\u0646\u0642\u0631 \u0625\u0633\u062A\u0637\u0644\u0627\u0639 \u062B\u0645 \u0627\u062E\u062A\u0627\u0631 \u0645\u062C\u0644\u062F \u0622\u062E\u0631."
+
+    Message
+    ""
+
+    BrowseText
+    "\u202B\u0644\u0644\u0625\u0643\u0645\u0627\u0644\u060C \u0623\u0646\u0642\u0631 \u0627\u0644\u062A\u0627\u0644\u064A.  \u0625\u0630\u0627 \u0623\u0631\u062F\u062A \u0623\u0646 \u062A\u062E\u062A\u0627\u0631 \u0645\u062C\u0644\u0651\u062F \u0645\u062E\u062A\u0644\u0641\u060C \u0623\u0646\u0642\u0631 \u0625\u0633\u062A\u0637\u0644\u0627\u0639."
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+
+    BrowseButton
+    "\u202B<%Browse%>"
+
+    DestinationLabel
+    "\u202B\u0645\u062C\u0644\u0651\u062F \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0646\u0647\u0627\u0626\u064A"
+}
+
+SelectProgramFolder {
+    Title
+    "\u202B\u0625\u062E\u062A\u064A\u0627\u0631 \u0645\u062C\u0644\u062F \u0627\u0644\u0628\u0631\u0627\u0645\u062C"
+
+    Subtitle
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062E\u062A\u064A\u0627\u0631 \u0645\u062C\u0644\u062F \u0644\u0644\u0628\u0631\u0646\u0627\u0645\u062C."
+
+    Caption
+    "\u202B\u0633\u0648\u0641 \u064A\u0636\u064A\u0641 \u0627\u0644\u0625\u0639\u062F\u0627\u062F \u0623\u064A\u0642\u0648\u0646\u0627\u062A \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C \u0625\u0644\u0649 \u0645\u062C\u0644\u062F \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u0627\u0644\u064A.  \u0628\u0625\u0645\u0643\u0627\u0646\u0643 \u0643\u062A\u0627\u0628\u0629 \u0625\u0633\u0645 \u0645\u062C\u0644\u062F \u062C\u062F\u064A\u062F \u0623\u0648 \u0623\u0646 \u062A\u062E\u062A\u0627\u0631 \u0645\u062C\u0644\u062F \u0645\u0646 \u0644\u0627\u0626\u062D\u0629 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0648\u062C\u0648\u062F\u0629.  \u0623\u0646\u0642\u0631 \u0627\u0644\u062A\u0627\u0644\u064A \u0644\u0644\u0625\u0643\u0645\u0627\u0644."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "\u202B\u0645\u062C\u0644\u062F \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C:"
+
+    FolderListLabel
+    "\u202B\u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0648\u062C\u0648\u062F\u0629:"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+
+    AllUsersCheckbutton
+    "\u202B\u0625\u0646\u0634\u0627\u0621 \u0645\u062C\u0644\u062F \u0628\u0631\u0627\u0645\u062C \u0644\u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u064A\u0646"
+}
+
+SetupComplete {
+    Caption
+    "\u202B\u0625\u0646\u062A\u0647\u0627\u0621 \u0645\u0639\u0627\u0644\u062C InstallJammer"
+
+    Message
+    "\u202B\u0646\u062C\u062D \u0645\u0639\u0627\u0644\u062C InstallJammer \u0628\u062A\u0631\u0643\u064A\u0628 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>.  \u0623\u0646\u0642\u0631 \u0625\u0646\u062A\u0647\u0627\u0621 \u0644\u0644\u062E\u0631\u0648\u062C \u0645\u0646 \u0627\u0644\u0645\u0639\u0627\u0644\u062C."
+
+    NextButton
+    "\u202B<%Finish%>"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "\u202B\u0646\u0648\u0639 \u0627\u0644\u0625\u0639\u062F\u0627\u062F"
+
+    Subtitle
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062E\u062A\u064A\u0627\u0631 \u0646\u0648\u0639 \u0627\u0644\u0625\u0639\u062F\u0627\u062F \u0627\u0644\u0630\u064A \u064A\u0646\u0627\u0633\u0628 \u0625\u062D\u062A\u064A\u0627\u062C\u0627\u062A\u0643."
+
+    Caption
+    "\u202B\u0623\u0646\u0642\u0631 \u0646\u0648\u0639 \u0627\u0644\u062A\u0631\u0643\u064A\u0628 \u0627\u0644\u0630\u064A \u062A\u0641\u0636\u0644\u0647."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "\u202B\u0648\u0635\u0641"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "\u202B\u0628\u062F\u0621 \u0646\u0633\u062E \u0627\u0644\u0645\u0644\u0641\u0627\u062A"
+
+    Subtitle
+    "\u202B\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0642\u0628\u0644 \u0646\u0633\u062E \u0627\u0644\u0645\u0644\u0641\u0627\u062A"
+
+    Caption
+    "\u202B\u0627\u0644\u0625\u0639\u062F\u0627\u062F \u0644\u062F\u064A\u0647 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0643\u0627\u0641\u064A\u0629 \u0644\u0628\u062F\u0621 \u0646\u0633\u062E \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C.  \u0625\u0630\u0627  \u0623\u0631\u062F\u062A \u0645\u0631\u0627\u062C\u0639\u0629 \u0623\u0648 \u062A\u063A\u064A\u064A\u0631 \u0623\u064A\u0629 \u0625\u0639\u062F\u0627\u062F\u0627\u062A\u060C \u0623\u0646\u0642\u0631 \u0631\u062C\u0648\u0639.  \u0625\u0630\u0627 \u0643\u0646\u062A \u0631\u0627\u0636\u064A\u0627\u064B \u0639\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A\u060C \u0623\u0646\u0642\u0631 \u0627\u0644\u062A\u0627\u0644\u064A \u0644\u0628\u062F\u0621 \u0639\u0645\u0644\u064A\u0629 \u0646\u0633\u062E \u0627\u0644\u0645\u0644\u0641\u0627\u062A."
+
+    Message
+    ""
+
+    Text
+    "\u202B\u0645\u062C\u0644\u0651\u062F \u0627\u0644\u062A\u0631\u0643\u064A\u0628:\n\u202B          <%InstallDir%>\n\u202B\n\u202B\u0646\u0648\u0639 \u0627\u0644\u0625\u0639\u062F\u0627\u062F:\n\u202B          <%InstallType%>"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "\u202B\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C"
+
+    Subtitle
+    "\u202B\u0625\u0632\u0627\u0644\u0629 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>"
+
+    Caption
+    "\u202B<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "\u202B<%Status%>"
+
+    ProgressValue
+    "\u202B<%UninstallPercentComplete%>"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "\u202B\u0625\u0646\u062A\u0647\u0627\u0621 \u0639\u0645\u0644\u064A\u0629 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C"
+
+    Message
+    " \u0645\u0646 \u062C\u0647\u0627\u0632\u0643. <%AppName%> \u062A\u0645\u0651 \u062D\u0630\u0641 \u0628\u0631\u0646\u0627\u0645\u062C "
+
+    NextButton
+    "\u202B<%Finish%>"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "\u202B\u062A\u0641\u0627\u0635\u064A\u0644 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C"
+
+    Subtitle
+    "\u202B\u062D\u062F\u062B\u062A \u0623\u062E\u0637\u0627\u0621 \u0623\u062B\u0646\u0627\u0621 \u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u062D\u0630\u0641"
+
+    Caption
+    "\u202B\u0627\u0644\u0623\u062E\u0637\u0627\u0621 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062D\u062F\u062B\u062A \u0623\u062B\u0646\u0627\u0621 \u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u062D\u0630\u0641:"
+
+    Message
+    ""
+
+    Text
+    "\u202B<%Errors%>"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "\u202B\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0632\u0628\u0648\u0646"
+
+    Subtitle
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062F\u062E\u0627\u0644 \u0645\u0639\u0644\u0648\u0645\u0627\u062A\u0643."
+
+    Caption
+    "\u202B\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062F\u062E\u0627\u0644 \u0625\u0633\u0645\u0643 \u0648 \u0625\u0633\u0645 \u0627\u0644\u0634\u0631\u0643\u0629 \u0627\u0644\u062A\u064A \u062A\u0639\u0645\u0644 \u0644\u062F\u064A\u0647\u0627."
+
+    Message
+    ""
+
+    UserNameLabel
+    "\u202B\u0625\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645:"
+
+    CompanyLabel
+    "\u202B\u0625\u0633\u0645 \u0627\u0644\u0634\u0631\u0643\u0629:"
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "\u202B\u0645\u0631\u062D\u0628\u0627\u064B \u0628\u0642\u062F\u0648\u0645\u0643 \u0625\u0644\u0649 \u0645\u0639\u0627\u0644\u062C InstallJammer \u0644\u0628\u0631\u0646\u0627\u0645\u062C <%AppName%>"
+
+    Message
+    "\u202B\u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0633\u062A\u0642\u0648\u0645 \u0628\u062A\u0631\u0643\u064A\u0628 \u0628\u0631\u0646\u0627\u0645\u062C <%AppName%> \u0625\u0635\u062F\u0627\u0631 \u0631\u0642\u0645 <%Version%> \u0639\u0644\u0649 \u062C\u0647\u0627\u0632\u0643 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643. \n\u202B\n\u202B\u0645\u0646 \u0627\u0644\u0645\u0641\u0636\u0644 \u0623\u0646 \u062A\u063A\u0644\u0642 \u062C\u0645\u064A\u0639 \u0627\u0644\u0628\u0631\u0627\u0645\u062C \u0627\u0644\u0623\u062E\u0631\u0649 \u0642\u0628\u0644 \u0627\u0644\u0625\u0643\u0645\u0627\u0644.\n\u202B\n\u202B\u0623\u0646\u0642\u0631 \u0627\u0644\u062A\u0627\u0644\u064A \u0644\u0644\u0625\u0643\u0645\u0627\u0644 \u0623\u0648 \u0623\u0646\u0642\u0631 \u0625\u0644\u063A\u0627\u0621 \u0644\u0644\u062E\u0631\u0648\u062C \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F."
+
+    NextButton
+    "\u202B<%Next%> >"
+
+    BackButton
+    "\u202B< <%Back%>"
+
+    CancelButton
+    "\u202B<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/en.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/en.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/en.msg	(revision 42196)
@@ -0,0 +1,804 @@
+ApplicationReadmeText
+"<%AppName%> Readme"
+
+Back
+"Back"
+
+Browse
+"Browse..."
+
+BuildFileText
+"Building <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Building uninstall..."
+
+Cancel
+"Cancel"
+
+CleanupInstallText
+"Cleaning up install..."
+
+Close
+"Close"
+
+ConsolePauseQuitText
+"-- Press space to continue or 'q' to quit --"
+
+ConsolePauseText
+"-- Press space to continue --"
+
+ConsoleSelectDestinationText
+"Where do you want to install <%AppName%>?"
+
+CreateDesktopShortcutText
+"Create Desktop Shortcut"
+
+CreateQuickLaunchShortcutText
+"Create Quick Launch Shortcut"
+
+CustomInstallDescription
+"Select custom components for installation."
+
+DirectoryNameErrorText
+"A directory name cannot contain any of the following characters:
+        \\ / : * ? \" < > |"
+
+DirectoryNotEmptyText
+"<%Dir%> is not empty."
+
+DirectoryPermissionText
+"You do not have permission to write to <%Dir%>."
+
+DisplayName
+"<%AppName%>"
+
+DownloadingFilesText
+"Downloading files..."
+
+ErrorTitle
+"Install Error"
+
+ExitText
+"Are you sure you want to exit this setup?"
+
+ExitTitle
+"Exit Setup"
+
+FileBeingInstalledText
+"Copying <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Removing <%FileBeingUninstalled%>"
+
+FileOverwriteText
+"The file <%FileBeingInstalled%> already exists.  Do you want to overwrite it?"
+
+Finish
+"Finish"
+
+GroupBeingInstalledText
+"Installing <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Removing <%GroupBeingUninstalled%>"
+
+Help
+"Help"
+
+InsertDiscText
+"Insert the disc labeled <%RequiredDiscName%> and then click OK."
+
+InstallApplicationText
+"Install <%AppName%>"
+
+InstallationCompleteText
+"Installation complete."
+
+InstallCompleteText
+"File installation complete..."
+
+InstallingApplicationText
+"Installing <%AppName%>..."
+
+InstallErrorText
+"An error has occurred during installation."
+
+InstallPrepareText
+"Preparing to install..."
+
+InstallStartupText
+"This will install <%AppName%> on your computer.  Continue?"
+
+InstallTitleText
+"<%AppName%> Setup"
+
+LaunchApplicationText
+"Launch <%AppName%>"
+
+Next
+"Next"
+
+No
+"No"
+
+OK
+"OK"
+
+PasswordIncorrectText
+"Password is incorrect."
+
+ProgramFilesDescription
+"Common Program Files"
+
+PromptForAdministratorText
+"This program requires administrator privileges.  Please enter your password."
+
+PromptForDirectoryMessage
+"Please choose a directory, then select OK."
+
+PromptForDirectoryNewFolderText
+"Make New Folder"
+
+PromptForDirectoryTitle
+"Browse for Folder"
+
+PromptForRootText
+"Please enter your root password."
+
+RequireAdministratorText
+"This program requires administrator privileges to install."
+
+RequireRootText
+"You must be root to run this installer."
+
+RequireRootTitleText
+"Root Required"
+
+RequireRootUninstallText
+"You must be root to uninstall this application."
+
+SelectLanguageText
+"Please select the installation language"
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+String.database.entries
+"database entries"
+
+String.directories
+"directories"
+
+String.environment.variables
+"environment variables"
+
+String.files
+"files"
+
+String.package.entries
+"package entries"
+
+String.registry.entries
+"registry entries"
+
+String.shortcuts
+"shortcuts"
+
+TypicalInstallDescription
+"A typical installation."
+
+UninstallApplicationText
+"Uninstall <%AppName%>"
+
+UninstallPrepareText
+"Preparing to uninstall..."
+
+UpdateRegistryText
+"Updating Windows Registry..."
+
+UninstallingApplicationText
+"Uninstalling <%AppName%>..."
+
+UninstallCompleteText
+"Uninstall complete."
+
+UninstallStartupText
+"This will completely remove <%AppName%> from your system.  Are you sure\
+ you want to do this?"
+
+UninstallLeftoverText
+"Some components could not be removed.  Do you wish to delete them anyway\
+ (not recommended)?"
+
+UninstallPrepareText
+"Preparing to uninstall..."
+
+UninstallTitleText
+"Uninstall <%AppName%>"
+
+UnpackingFilesText
+"Unpacking files..."
+
+VersionHelpText
+"This program will install <%AppName%> version <%Version%>."
+
+ViewReadmeText
+"View Readme"
+
+Yes
+"Yes"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "Please tell us where your Java Runtime is located"
+
+    StatusMessage
+    "Locating Java Runtime..."
+}
+
+TextWindow {
+    Title
+    "Window Title"
+
+    Caption
+    "Caption"
+
+    Message
+    "Message goes here."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Select Components"
+
+    Subtitle
+    "Select the components setup will install."
+
+    Caption
+    "Select the components you want to install and deselect the components\
+     you do not want to install."
+
+    Message
+    "<%SpaceRequiredText%> of space required"
+
+    DescriptionLabel
+    "Description"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Installing"
+
+    Subtitle
+    "Installing <%AppName%>"
+
+    Caption
+    "Please wait while Setup installs <%AppName%> on your computer."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Caption goes here."
+
+    Message
+    "Message goes here."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Title"
+
+    Subtitle
+    "Subtitle"
+
+    Caption
+    "Caption"
+
+    Message
+    "Message"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Title"
+
+    Subtitle
+    "Subtitle"
+
+    Caption
+    "Caption"
+
+    Message
+    "Message"
+
+    Text
+    "Put your custom text here."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "License Agreement"
+
+    Subtitle
+    "Please read the following license agreement carefully."
+
+    Text
+    "Put your license agreement here."
+
+    AcceptRadiobutton
+    "I accept the terms of the license agreement."
+
+    DeclineRadiobutton
+    "I do not accept the terms of the license agreement."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Readme Information"
+
+    Subtitle
+    "Readme Information for <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    "Put your readme information here."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Choose Destination Location"
+
+    Subtitle
+    "Where should <%AppName%> be installed?"
+
+    Caption
+    "Setup will install <%AppName%> in the following folder.\n\nTo install\
+     to this folder, click Next.  To install to a different folder, click\
+     Browse and select another folder."
+
+    Message
+    ""
+
+    BrowseText
+    "To continue, click Next.  If you would like to select a different\
+     folder, click Browse."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Destination Folder"
+}
+
+SelectProgramFolder {
+    Title
+    "Select Program Folder"
+
+    Subtitle
+    "Please select a program folder."
+
+    Caption
+    "Setup will add the program icons to the Program Folder listed below. \
+     You may type a new folder name or select from the existing folders list. \
+     Click Next to continue."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Program Folder:"
+
+    FolderListLabel
+    "Exising Folders:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Create program folder for all users"
+}
+
+SetupComplete {
+    Caption
+    "InstallJammer Wizard Complete"
+
+    Message
+    "The InstallJammer Wizard has successfully installed <%AppName%>. \
+     Click Finish to exit the wizard."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Setup Type"
+
+    Subtitle
+    "Select the setup type that best suits your needs."
+
+    Caption
+    "Click the type of Setup you prefer."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Description"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Start Copying Files"
+
+    Subtitle
+    "Review settings before copying files"
+
+    Caption
+    "Setup has enough information to start copying the program files.  If\
+     you want to review or change any settings, click Back.  If you are\
+     satisfied with the settings, click Next to begin copying files."
+
+    Message
+    ""
+
+    Text
+    "Install Directory:
+            <%InstallDir%>
+
+    Setup Type:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Uninstalling"
+
+    Subtitle
+    "Uninstalling <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Uninstall Complete"
+
+    Message
+    "<%AppName%> has been removed from your system."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Uninstall Details"
+
+    Subtitle
+    "Errors occurred during removal"
+
+    Caption
+    "The following errors occurred during removal:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Customer Information"
+
+    Subtitle
+    "Please enter your information."
+
+    Caption
+    "Please enter your name and the name of the company for which you work."
+
+    Message
+    ""
+
+    UserNameLabel
+    "User Name:"
+
+    CompanyLabel
+    "Company:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Welcome to the InstallJammer Wizard for <%AppName%>"
+
+    Message
+    "This will install <%AppName%> version <%Version%> on your computer. \
+    \n\nIt is recommended that you close all other applications before\
+    continuing.\n\nClick Next to continue or Cancel to exit Setup."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+InstallPassword {
+    Title
+    "Install Password"
+
+    Subtitle
+    "This installation requires a password to continue."
+
+    Caption
+    "Please enter a password."
+
+    Message
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Message
+"Click Next to open the gvSIG add-ons installer"
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Text
+"Now you have installed a basic gvSIG version.\n\nNext you will be able to install some additional add-ons to add or improve the available gvSIG functionalities.\n\nThose add-ons installation will be able to be made from three different sources:\n\n- Standard installation: select this option if the downloaded gvSIG installable file contains add-ons to install.\n\n- Installation from file: if you have also downloaded installation add-ons or add-on sets (files with extension .gvspkg or .gvspks).\n\n- Installation from URL: select this option if you are connected to Internet. The list of all currently available gvSIG add-ons will be downloaded from the link which appears in this option."
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Caption
+"Information"
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Title
+"Add-ons installer"
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Subtitle
+""
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Caption
+{Please, select a Java installation to use:}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Message
+{}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Subtitle
+{gvSIG needs a valid Java installation version 1.5 or newer to run}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Title
+{Java installation}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Please wait while Setup downloads a Java Runtime suitable for your computer}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Downloading JRE}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Installing}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Caption
+{Please wait while Setup downloads a Java Runtime suitable for your computer}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Message
+{}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Subtitle
+{Downloading JRE}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Title
+{Installing}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{ }
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Wait until the JRE installation process finishes}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{ }
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{ }
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Installation of a new Java Runtime Environment}
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Message
+{Please wait until the JRE installation process finishes}
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Subtitle
+{ }
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Text
+{Running Java Runtime Environment installer...}
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Title
+{Installation of a new Java Runtime Environment}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/cs.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/cs.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/cs.msg	(revision 42196)
@@ -0,0 +1,687 @@
+# options: -encoding utf-8
+
+ApplicationReadmeText
+"ČtiMě pro <%AppName%>"
+
+Back
+"Zpět"
+
+Browse
+"Procházet..."
+
+BuildFileText
+"Vytváří se <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Vytváří se odinstalace..."
+
+Cancel
+"Zrušit"
+
+CleanupInstallText
+"Pročisťuje se instalace..."
+
+Close
+"Zavřít"
+
+ConsolePauseQuitText
+"-- Stiskněte mezeru k pokračování nebo 'q' ke skončení --"
+
+ConsolePauseText
+"-- K pokračování stiskněte mezeru --"
+
+ConsoleSelectDestinationText
+"Kam chcete nainstalovat <%AppName%>?"
+
+CreateDesktopShortcutText
+"Vytvořit zástupce na ploše"
+
+CreateQuickLaunchShortcutText
+"Vytvořit zástupce snadného spuštění"
+
+CustomInstallDescription
+"Zvolte vlastní součásti k instalaci."
+
+DirectoryNameErrorText
+"Název složky nemůže obsahovat žádný z následujících znaků:
+        \\ / : * ? \" < > |"
+
+DirectoryPermissionText
+"Nemáte oprávnění zapisovat do <%Dir%>."
+
+DisplayName
+"<%AppName%>"
+
+DownloadingFilesText
+"Stahování souborů..."
+
+ExitText
+"Opravdu chcete ukončit tento instalátor?"
+
+FileBeingInstalledText
+"Kopírování <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Odstraňování <%FileBeingUninstalled%>"
+
+FileOverwriteText
+"Soubor <%FileBeingInstalled%> již existuje. Chcete jej přepsat?"
+
+Finish
+"Dokončit"
+
+GroupBeingInstalledText
+"Instalace <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Odstraňování <%GroupBeingUninstalled%>"
+
+Help
+"Nápověda"
+
+InsertDiscText
+"Vložte disk nazvaný <%RequiredDiscName%> a stiskněte OK."
+
+InstallApplicationText
+"Instalace programu <%AppName%>"
+
+InstallationCompleteText
+"Instalace dokončena."
+
+InstallCompleteText
+"Instalace souborů dokončena..."
+
+InstallingApplicationText
+"Instalace <%AppName%>..."
+
+InstallErrorText
+"Během instalace došlo k chybě."
+
+InstallPrepareText
+"Příprava na instalaci..."
+
+InstallStartupText
+"Program <%AppName%> bude nainstalován na váš počítač. Pokračovat?"
+
+InstallTitleText
+"Instalace programu <%AppName%>"
+
+LaunchApplicationText
+"Spustit <%AppName%>"
+
+Next
+"Vpřed"
+
+No
+"Ne"
+
+OK
+"OK"
+
+PasswordIncorrectText
+"Heslo není správné."
+
+ProgramFilesDescription
+"Běžné soubory programu"
+
+PromptForDirectoryMessage
+"Vyberte prosím složku a zvolte OK."
+
+PromptForDirectoryNewFolderText
+"Vytvořit novou složku"
+
+PromptForDirectoryTitle
+"Procházet složky"
+
+PromptForRootText
+"Zadejte prosím vaše heslo roota."
+
+RequireAdministratorText
+"Tento program vyžaduje pro provedení instalace práva správce systému."
+
+RequireRootText
+"Pro spuštění instalátoru musíte být root."
+
+SelectLanguageText
+"Prosím zvolte jazyk instalace"
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Typická instalace."
+
+UninstallApplicationText
+"Odinstalovat <%AppName%>"
+
+UninstallPrepareText
+"Příprava odinstalace..."
+
+UpdateRegistryText
+"Aktualizace registrů Windows..."
+
+UninstallingApplicationText
+"Odinstalace <%AppName%>..."
+
+UninstallCompleteText
+"Odinstalace dokončena."
+
+UninstallStartupText
+"Program <%AppName%> bude kompletně odstraněn z vašeho systému. Opravdu to\
+ chcete udělat?"
+
+UninstallLeftoverText
+"Některé součásti nemohly být odstraněny. Chcete je i přesto smazat\
+ (není doporučeno)?"
+
+UninstallTitleText
+"Odinstalovat <%AppName%>"
+
+UnpackingFilesText
+"Rozbalování souborů..."
+
+VersionHelpText
+"Tento program nainstaluje aplikaci <%AppName%> verze <%Version%>."
+
+ViewReadmeText
+"Zobrazit ČtiMě"
+
+Yes
+"Ano"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "Prosím sdělte nám, kde je umístěno vaše Java Runtime"
+
+    StatusMessage
+    "Hledání Java Runtime..."
+}
+
+TextWindow {
+    Title
+    "Název okna"
+
+    Caption
+    "Titulek"
+
+    Message
+    "Zde bude zpráva."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+# options: -encoding utf-8
+
+ChooseComponents {
+    Title
+    "Zvolte součásti"
+
+    Subtitle
+    "Zvolte součásti, které budou nainstalovány."
+
+    Caption
+    "Zvolte součásti, které chcete nainstalovat, a zrušte vybrání součástí,\
+     které nechcete nainstalovat."
+
+    Message
+    "Vyžadováno <%SpaceRequiredText%> místa"
+
+    DescriptionLabel
+    "Popis"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Instalace"
+
+    Subtitle
+    "Instalace programu <%AppName%>"
+
+    Caption
+    "Prosím čekejte, dokud nebude program <%AppName%> nainstalován na váš počítač."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Titulek bude zde."
+
+    Message
+    "Zpráva bude zde."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Nadpis"
+
+    Subtitle
+    "Podnadpis"
+
+    Caption
+    "Titulek"
+
+    Message
+    "Zpráva"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Nadpis"
+
+    Subtitle
+    "Podnadpis"
+
+    Caption
+    "Titulek"
+
+    Message
+    "Zpráva"
+
+    Text
+    "Zde vložte svůj vlastní text."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Licenční ujednání"
+
+    Subtitle
+    "Následující licenční ujednání prosím čtěte pečlivě."
+
+    Text
+    "Zde vložte své licenční ujednání."
+
+    AcceptRadiobutton
+    "Přijímám podmínky licenčního ujednání."
+
+    DeclineRadiobutton
+    "Nepřijímám podmínky licenčního ujednání."
+
+    NextButton
+    "<%Yes%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%No%>"
+}
+
+Readme {
+    Title
+    "Informace ČtiMě"
+
+    Subtitle
+    "Informace ČtiMě pro <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    "Sem vložte vaše informace čtimě."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Zvolte cílové umístění"
+
+    Subtitle
+    "Kam má být program <%AppName%> nainstalován?"
+
+    Caption
+    "Program <%AppName%> bude nainstalován do následující složky.\n\nK instalaci\
+     do této složky stiskněte Vpřed. K instalaci do jiné složky stiskněte\
+     Procházet a zvolte jinou složku."
+
+    Message
+    ""
+
+    BrowseText
+    "K pokračování stiskněte Vpřed. Pokud chcete vybrat odlišnou složku,\
+     stiskněte Procházet."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Cílová složka"
+}
+
+SelectProgramFolder {
+    Title
+    "Zvolte složku programu"
+
+    Subtitle
+    "Prosím zvolte složku programu."
+
+    Caption
+    "Instalátor přidá ikony programu do složky programu uvedené níže.\
+     Můžete vepsat odlišný název složky nebo ji vybrat ze seznamu existujících složek.\
+     K pokračování stiskněte Vpřed."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Složka programu:"
+
+    FolderListLabel
+    "Existující složky:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Vytvořit složku programu pro všechny uživatele"
+}
+
+SetupComplete {
+    Caption
+    "Průvodce InstallJammer dokončen"
+
+    Message
+    "Průvodce InstallJammer úspěšně nainstaloval program <%AppName%>.\
+     Stiskněte Dokončit pro ukončení průvodce."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Typ instalace"
+
+    Subtitle
+    "Zvolte typ instalace, který vám nejlépe vyhovuje."
+
+    Caption
+    "Klikněte na upřednostňovaný typ instalace."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Popis"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Spustit kopírování souborů"
+
+    Subtitle
+    "Zkontrolujte nastavení před kopírováním souborů"
+
+    Caption
+    "Instalátor má dostatek informací pro spustění kopírování souborů programu. Pokud\
+     chcete zkontrolovat nebo změnit jakékoliv nastavení, stiskněte Zpět. Pokud jste\
+     spokojeni s nastavením, stiskněte Vpřed pro spuštění kopírování souborů."
+
+    Message
+    ""
+
+    Text
+    "Instalační složka:
+            <%InstallDir%>
+
+    Typ instalace:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Odinstalace"
+
+    Subtitle
+    "Odinstalace programu <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Odinstalace dokončena"
+
+    Message
+    "Program <%AppName%> byl odstraněn z vašeho systému."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Podrobnosti odinstalace"
+
+    Subtitle
+    "Během odstraňování došlo k chybám"
+
+    Caption
+    "Následující chyby nastaly během odstraňování:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Zákaznické informace"
+
+    Subtitle
+    "Prosím zadejte své informace."
+
+    Caption
+    "Prosím zadejte své jméno a název společnosti, pro kterou pracujete."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Jméno zákazníka:"
+
+    CompanyLabel
+    "Společnost:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Vítejte v průvodci InstallJammer pro program <%AppName%>"
+
+    Message
+    "Na váš počítač bude nainstalován program <%AppName%> verze <%Version%>.\
+    \n\nPřed pokračováním je doporučeno uzavřít všechny ostatní aplikace.\
+    \n\nStiskněte Vpřed k pokračování nebo Zrušit k ukončení instalátoru."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+InstallPassword {
+    Title
+    "Heslo instalace"
+
+    Subtitle
+    "Tato instalace vyžaduje k pokračování heslo."
+
+    Caption
+    "Prosím zadejte heslo."
+
+    Message
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/pt_br.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/pt_br.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/pt_br.msg	(revision 42196)
@@ -0,0 +1,579 @@
+ApplicationReadmeText
+"<%AppName%> Readme"
+
+Back
+"Voltar"
+
+Browse
+"Navegar..."
+
+BuildFileText
+"Construindo <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Construindo desinstalado..."
+
+Cancel
+"Cancelar"
+
+CleanupInstallText
+"Limpando instala��o..."
+
+Close
+"Fechar"
+
+CreateDesktopShortcutText
+"Criando atalho no Desktop"
+
+CreateQuickLaunchShortcutText
+"Cria��o de atalho na barra de inicializa��o r�pida"
+
+CustomInstallDescription
+"Selecionar componentes personalizados para instala��o."
+
+DirectoryPermissionText
+"Voc� n�o tem permiss�o para escrever em <%Dir%>."
+
+ExitText
+"Voc� est� certo que deseja sair do instalador?"
+
+FileBeingInstalledText
+"Copiando <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Removendo <%FileBeingUninstalled%>"
+
+Finish
+"Concluir"
+
+GroupBeingInstalledText
+"Instalando <%GroupBeingInstalled%>"
+
+GroupBeingUninstalledText
+"Removendo <%GroupBeingUninstalled%>"
+
+Help
+"Ajuda"
+
+InstallApplicationText
+"Instalar <%AppName%>"
+
+InstallCompleteText
+"Instala��o de arquivos completa..."
+
+InstallPrepareText
+"Preparando para instalar..."
+
+InstallStartupText
+"Ser� instalado <%AppName%> em seu computador.  Continuar?"
+
+LaunchApplicationText
+"Iniciar <%AppName%>"
+
+Next
+"Pr�ximo"
+
+No
+"N�o"
+
+OK
+"OK"
+
+ProgramFilesDescription
+"Arquivos comuns de programa"
+
+RequireRootText
+"Voc� precisa ser root para executar o instalador."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Uma instala��o t�pica."
+
+UninstallApplicationText
+"Desinstalar <%AppName%>"
+
+UninstallPrepareText
+"Preparando para desinstalar..."
+
+UpdateRegistryText
+"Atualizando Registro do Windows..."
+
+UninstallStartupText
+"<%AppName%> ser� removido completamento do seu computador.  Voc� tem\
+certeza que deseja continuar?"
+
+UninstallLeftoverText
+"Alguns componentes n�o puderam ser removidos. Voc� deseja delet�-los assim mesmo\
+ (n�o recomendado)?"
+
+VersionHelpText
+"Este programa ir� instalar <%AppName%> vers�o <%Version%>."
+
+ViewReadmeText
+"Veja o Readme"
+
+Yes
+"Sim"
+
+
+LocateJavaRuntime {
+    PromptMessage
+    "Por favor informe onde o Java Runtime est� instalado"
+
+    StatusMessage
+    "Localizando Java Runtime..."
+}
+
+TextWindow {
+    Title
+    "T�tulo da Janela"
+
+    Caption
+    "Caption"
+
+    Message
+    "Mensagens aparecer�o aqui."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Selecionar Componentes"
+
+    Subtitle
+    "Selecione os componentes que se�o instalados."
+
+    Caption
+    "Selecione os componentes que voc� quer instalar e deselecione os componentes\
+     que voc� n�o quer instalar."
+
+    Message
+    "<%SpaceRequiredText%> de espa�o � necess�rio"
+
+    DescriptionLabel
+    "Descri��o"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Instalando"
+
+    Subtitle
+    "Instalando <%AppName%>"
+
+    Caption
+    "Por favor, aguarde enquanto o programa <%AppName%> � instalado em seu computador."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Caption ir� aqui."
+
+    Message
+    "Mensagem ir� aqui."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "T�tulo"
+
+    Subtitle
+    "Subt�tulo"
+
+    Caption
+    "Caption"
+
+    Message
+    "Mensagem"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "T�tulo"
+
+    Subtitle
+    "Subt�tulo"
+
+    Caption
+    "Caption"
+
+    Message
+    "Mensagem"
+
+    Text
+    "Coloque seu texto personalizado aqui."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Concord�ncia com a Licen�a"
+
+    Subtitle
+    "Por favor, leia os termos da licen�a cuidadosamente."
+
+    AcceptRadiobutton
+    "Eu concordo os termos da licen�a."
+
+    DeclineRadiobutton
+    "Eu n�o concordo com os termos da licen�a."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Informa��es do Readme"
+
+    Subtitle
+    "Informa��es do Readme para <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Escolha a localiza��o de destino"
+
+    Subtitle
+    "Onde o <%AppName%> dever� ser instalado?"
+
+    Caption
+    "A Instala��o ir� instalar <%AppName%> na seguinte pasta.\n\nPara instalar\
+     nesta pasta, clique em Pr�ximo.  Para instalar em uma pasta diferente, clique\
+     em Procurar e selecione outra pasta."
+
+    Message
+    ""
+
+    BrowseText
+    "Para continuar, clique em Pr�ximo.  Se voc� deseja selecionar uma pasta diferente,\
+     clique em Procurar."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Pasta de Destino"
+}
+
+SelectProgramFolder {
+    Title
+    "Selecione a Pasta de Programas"
+
+    Subtitle
+    "Por favor, selecione uma pasta de programa."
+
+    Caption
+    "A Instala��o adicionar� os �cones do programa Pasta de Programas listada abaixo. \
+     Voc� poder� digitar um novo nome de pasta or selecionar uma das pastas da lista. \
+     Clique em Pr�ximo para continuar."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Pasta de Programas:"
+
+    FolderListLabel
+    "Pastas Existentes:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Criar uma pasta de programa para todos os usu�rios"
+}
+
+SetupComplete {
+    Caption
+    "Assistente InstallJammer Conclu�do"
+
+    Message
+    "O Assistente InstallJammer instalou com sucesso o <%AppName%>. \
+     Clique em Concluir para sair do assistente."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Tipo de Instala��o"
+
+    Subtitle
+    "Seleciona o tipo de instala��o que melhor de adapta �s suas necessidades."
+
+    Caption
+    "Clique no tipo de Instala��o de sua prefer�ncia."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Descri��o"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Iniciar C�pia de Arquivos"
+
+    Subtitle
+    "Reveja as configura��es antes de copiar os arquivos"
+
+    Caption
+    "A Instala��o tem bastante informa��o para iniciar a c�pia dos arquivos do programa.  Se\
+     voc� deseja revisar or mudar qualquer configura��o, clique em Voltar.  Se voc� est�\
+     satisfeito com as configura��es, clique em Pr�ximo para iniciar a c�pia dos arquivos."
+
+    Message
+    ""
+
+    Text
+    "Diret�rio de Instala��o:\n\t<%InstallDir%>\n\nTipo de Instala��o:\n\t<%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Desinstalando"
+
+    Subtitle
+    "Desinstalando <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Desinstala��o Conclu�da"
+
+    Message
+    "<%AppName%> foi removido do seu sistema."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Detalhes de Desinstala��o"
+
+    Subtitle
+    "Erros ocurreram durante a desinstala��o"
+
+    Caption
+    "Os seguintes error ocorreram durante a desinstala��o:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Informa��es do Propriet�rio"
+
+    Subtitle
+    "Por favor, digite as tuas informa��es."
+
+    Caption
+    "Por favor, digite seu nome e o nome da empresa onde voc� trabalha."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Nome do Usu�rio:"
+
+    CompanyLabel
+    "Empresa:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Bem vindo ao Assistente InstallJammer para o <%AppName%>"
+
+    Message
+    "Ser� instalado <%AppName%> version <%Version%> em seu computador. \
+    \n\n� recomendado que voc� feche todos os outros programas antes de continuar. \n\n
+    Clique em Pr�ximo para continuar ou em Cancelar para sair da Instala��o."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/es.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/es.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/es.msg	(revision 42196)
@@ -0,0 +1,660 @@
+ApplicationReadmeText
+"<%AppName%> L�eme"
+
+Back
+"Atr�s"
+
+Browse
+"Examinar..."
+
+BuildFileText
+"Generando <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Generando desinstalador..."
+
+Cancel
+"Cancelar"
+
+CleanupInstallText
+"Limpiando instalaci�n..."
+
+Close
+"Cerrar"
+
+CreateDesktopShortcutText
+"Crear icono en Escritorio"
+
+CreateQuickLaunchShortcutText
+"Crear icono en Barra de Tareas"
+
+CustomInstallDescription
+"Seleccione los componentes de la instalaci�n."
+
+DirectoryPermissionText
+"No tiene permisos para escribir en <%Dir%>."
+
+ExitText
+"�Seguro que desea salir de la instalaci�n?"
+
+FileBeingInstalledText
+"Copiando <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Borrando <%FileBeingUninstalled%>"
+
+Finish
+"Finalizar"
+
+GroupBeingInstalledText
+"Instalando <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Borrando <%GroupBeingUninstalled%>"
+
+Help
+"Ayuda"
+
+InstallApplicationText
+"Instalar <%AppName%>"
+
+InstallCompleteText
+"Instalaci�n completa..."
+
+InstallPrepareText
+"Preparando instalaci�n..."
+
+InstallStartupText
+"Se va a instalar <%AppName%> en su equipo.  �Continuar?"
+
+LaunchApplicationText
+"Ejecutar <%AppName%>"
+
+Next
+"Siguiente"
+
+No
+"No"
+
+OK
+"OK"
+
+ProgramFilesDescription
+"Archivos de Programa Comunes"
+
+RequireRootText
+"Necesita tener permisos de administrador para ejecutar el instalador."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Una instalaci�n t�pica."
+
+UninstallApplicationText
+"Desinstalar <%AppName%>"
+
+UninstallPrepareText
+"Preparando desinstalaci�n..."
+
+UpdateRegistryText
+"Actualizando Registro de Windows..."
+
+UninstallStartupText
+"Se eliminar� completamente <%AppName%> de su sistema. �Seguro que desea esto?"
+
+UninstallLeftoverText
+"Algunos componentes no pudieron ser eliminados. �Desea borrarlos de todos\
+ modos? (no recomendado)"
+
+ViewReadmeText
+"Ver L�eme"
+
+Yes
+"S�"
+
+
+LocateJavaRuntime {
+    PromptMessage
+    "Por favor, localice su Entorno de Ejecuci�n Java (JRE)"
+
+    StatusMessage
+    "Buscando Entorno de Ejecuci�n Java (JRE)..."
+}
+
+TextWindow {
+    Title
+    "T�tulo de la Ventana"
+
+    Caption
+    "Leyenda"
+
+    Message
+    "Mensaje aqu�."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Seleccionar Componentes"
+
+    Subtitle
+    "Seleccionar los componentes de la instalaci�n."
+
+    Caption
+    "Seleccione los componentes que desea instalar y elimine aqu�llos\
+     que no desea que sean instalados."
+
+    Message
+    "<%SpaceRequiredText%> de espacio requerido"
+
+    DescriptionLabel
+    "Descripci�n"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Instalando"
+
+    Subtitle
+    "Instalando <%AppName%>"
+
+    Caption
+    "Por favor espere mientras se instala <%AppName%> en su equipo."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Leyenda aqu�."
+
+    Message
+    "Mensaje aqu�."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "T�tulo"
+
+    Subtitle
+    "Subt�tulo"
+
+    Caption
+    "Leyenda"
+
+    Message
+    "Mensaje"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "T�tulo"
+
+    Subtitle
+    "Subt�tulo"
+
+    Caption
+    "Leyenda"
+
+    Message
+    "Mensaje"
+
+    Text
+    "Escriba su texto personalizado aqu�."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Acuerdo de Licencia"
+
+    Subtitle
+    "Por favor lea atentamente el siguiente acuerdo de licencia."
+
+    AcceptRadiobutton
+    "Acepto los t�rminos de este acuerdo de licencia."
+
+    DeclineRadiobutton
+    "NO acepto los t�rminos de este acuerdo de licencia."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "L�eme"
+
+    Subtitle
+    "Informaci�n sobre <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Escoja Carpeta Destino"
+
+    Subtitle
+    "�D�nde desea instalar <%AppName%>?"
+
+    Caption
+    "Se instalar� <%AppName%> en la siguiente carpeta. Para instalar\
+     en esta carpeta, pulse Siguiente. Para instalar en una carpeta diferente,\
+     pulse Examinar y seleccione otra."
+
+    Message
+    ""
+
+    BrowseText
+    "Pulse Siguiente para continuar. Si desea seleccionar una\
+    carpeta diferente, pulse Examinar."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Carpeta Destino"
+}
+
+SelectProgramFolder {
+    Title
+    "Seleccione Grupo de Programas"
+
+    Subtitle
+    "Por favor, seleccione un grupo de programas."
+
+    Caption
+    "Se instalar�n iconos en el Grupo de Programas siguiente.\
+    Puede escribir un nuevo nombre de grupo o seleccionarlo\
+    de la lista de grupos existentes.\
+    Pulse Siguiente para continuar."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Grupo de Programas:"
+
+    FolderListLabel
+    "Grupos Existentes:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Crear grupo de programas para todos los usuarios"
+}
+
+SetupComplete {
+    Caption
+    "Instalaci�n Completa"
+
+    Message
+    "Se ha instalado <%AppName%> con �xito. \
+     Pulse Finalizar para salir de este wizard."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Tipo de Instalaci�n"
+
+    Subtitle
+    "Seleccione el tipo de instalaci�n que m�s se ajuste a sus necesidades."
+
+    Caption
+    "Pulse el tipo de instalaci�n que prefiere."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Descripci�n"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Comenzar a Copiar Archivos"
+
+    Subtitle
+    "Revise la configuraci�n antes de copiar los archivos"
+
+    Caption
+    "Se ha recopilado la informaci�n necesaria para comenzar a copiar los\
+    archivos del programa. Si desea revisar o cambiar la configuraci�n,\
+    pulse Atr�s. Si est� conforme con la configuraci�n, pulse Siguiente para\
+    comenzar a copiar los archivos."
+
+    Message
+    ""
+
+    Text
+    "Directorio de Instalaci�n:
+            <%InstallDir%>
+
+    Tipo de Instalaci�n:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Desinstalar"
+
+    Subtitle
+    "Desinstalar <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Desinstalaci�n Completa"
+
+    Message
+    "<%AppName%> ha sido eliminado de su sistema."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Detalles de Desinstalaci�n"
+
+    Subtitle
+    "Errores durante la eliminaci�n"
+
+    Caption
+    "Ocurrieron los siguientes errores durante el proceso de desinstalaci�n:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Informaci�n de Usuario"
+
+    Subtitle
+    "Por favor introduzca sus datos de usuario."
+
+    Caption
+    "Por favor introduzca el nombre de la empresa para la que trabaja."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Nombre de Usuario:"
+
+    CompanyLabel
+    "Empresa:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Bienvenido al InstallJammer Wizard para <%AppName%>"
+
+    Message
+    "Este programa instalar� <%AppName%> versi�n <%Version%> en su equipo.\
+    \n\nSe recomienda cerrar las dem�s aplicaciones antes de continuar. \
+    \n\nPulse Siguiente para continuar o Cancelar para salir de la instalaci�n."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Message
+"Pulse Siguiente para abrir el gestor de complementos de gvSIG"
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Text
+"En estos momentos se ha instalado una versi�n b�sica de gvSIG.\n\nA continuaci�n podr� instalar una serie de complementos adicionales que a�aden o mejoran las funcionalidades disponibles en gvSIG.\n\nLa instalaci�n de dichos complementos podr� realizarla desde tres or�genes distintos:\n\n- Instalaci�n est�ndar: elija esta opci�n si el tipo de instalable de gvSIG que ha descargado incorpora paquetes para instalar.\n\n- Instalaci�n desde archivo: si ha descargado aparte los complementos o conjuntos de complementos de instalaci�n (archivos con extensi�n .gvspkg � .gvspks).\n\n- Instalaci�n a partir de URL: elija esta opci�n si dispone de conexi�n a Internet. Desde el enlace que aparece en esta opci�n se descargar� la lista de todos los complementos disponibles en estos momentos para instalar sobre gvSIG."
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Caption
+"Informaci�n"
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Title
+"Instalaci�n de complementos adicionales"
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Subtitle
+""
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Caption
+{Por favor, seleccione una instalaci�n de Java a usar:}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Message
+{}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Subtitle
+{gvSIG necesita para funcionar una instalaci�n v�lida de Java 1.5 o superior}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Title
+{Instalaci�n de Java}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Por favor espere mientras se descarga un entorno de ejecuci�n Java adecuado para su ordenador}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Descargando JRE}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Instalando}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Caption
+{Por favor espere mientras se descarga un entorno de ejecuci�n Java adecuado para su ordenador}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Message
+{}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Subtitle
+{Descargando JRE}
+
+4BC275F9-FDA8-3886-3418-DF6EADACC78E,Title
+{Instalando}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{ }
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Por favor espere hasta que el proceso de instalaci�n del JRE termine}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{ }
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{ }
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Instalaci�n de un nuevo entorno de ejecuci�n Java (JRE)}
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Message
+{Por favor espere hasta que el proceso de instalaci�n del JRE termine}
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Subtitle
+{ }
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Text
+{Iniciando el instalador del entorno de ejecuci�n Java...}
+
+A8D2C5F5-091A-A2C4-3D33-C1DB3B4B7221,Title
+{Instalaci�n de un nuevo entorno de ejecuci�n Java (JRE)}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/fr.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/fr.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/fr.msg	(revision 42196)
@@ -0,0 +1,582 @@
+ApplicationReadmeText
+"<%AppName%> Readme"
+
+Back
+"Pr�c�dent"
+
+Browse
+"Parcourir..."
+
+BuildFileText
+"G�n�ration <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"G�n�ration de la d�sinstallation..."
+
+Cancel
+"Annuler"
+
+CleanupInstallText
+"Nettoyage de l'installation..."
+
+Close
+"Fermer"
+
+CreateDesktopShortcutText
+"Cr�er le raccourci sur le bureau"
+
+CreateQuickLaunchShortcutText
+"Cr�er un raccourci de lancement rapide"
+
+CustomInstallDescription
+"S�lectionner les composants pour l'installation."
+
+DirectoryPermissionText
+"Vous n'avez pas la permission d'�crire dans le dossier <%Dir%>."
+
+ExitText
+"Etes-vous certain de vouloir quitter ce programme d'installation?"
+
+FileBeingInstalledText
+"Copie de <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Suppression de <%FileBeingUninstalled%>"
+
+Finish
+"Terminer"
+
+GroupBeingInstalledText
+"Installation de <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Suppression de <%GroupBeingUninstalled%>"
+
+Help
+"Aide"
+
+InstallApplicationText
+"Installer <%AppName%>"
+
+InstallCompleteText
+"Installation des fichiers termin�e..."
+
+InstallPrepareText
+"Pr�paration de l'installation..."
+
+InstallStartupText
+"Ceci installera <%AppName%>  sur votre ordinateur.  Continuer?"
+
+LaunchApplicationText
+"Lancer <%AppName%>"
+
+Next
+"Suivant"
+
+No
+"Non"
+
+OK
+"OK"
+
+ProgramFilesDescription
+"Fichiers programme communs"
+
+RequireRootText
+"Vous devez �tre ROOT pour ex�cuter cette installeur."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Une installation typique."
+
+UninstallApplicationText
+"D�sinstaller <%AppName%>"
+
+UninstallPrepareText
+"Pr�paration de la d�sinstallation..."
+
+UpdateRegistryText
+"Mise � jour de la base de registre Windows..."
+
+UninstallStartupText
+"Ceci supprimera compl�tement <%AppName%> de votre ordinateur.  Etes-vous\
+ certain de vouloir faire cela?"
+
+UninstallLeftoverText
+"Certain composants n'ont pu �tre supprim�s. Souhairez vous quand m�me les\
+ effacer (non recommand�)?"
+
+ViewReadmeText
+"Lire le fichier Readme"
+
+VersionHelpText
+"Ce programme va installer <%AppName%> version <%Version%>."
+
+Yes
+"Oui"
+
+
+LocateJavaRuntime {
+    PromptMessage
+    "Merci de pr�ciser la localisation de votre Runtime Java"
+
+    StatusMessage
+    "Localisation du Runtime Java..."
+}
+
+TextWindow {
+    Title
+    "Titre de la fen�tre"
+
+    Caption
+    "L�gende"
+
+    Message
+    "Saisir le message ici."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "S�lectionnez les composants"
+
+    Subtitle
+    "S�lectionnez les composants devant �tre install�s."
+
+    Caption
+    "S�lectionner les composants � installer et d�selectionner les composants � ne pas installer."
+
+    Message
+    "<%SpaceRequiredText%> d'espace requis"
+
+    DescriptionLabel
+    "Description"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Installation"
+
+    Subtitle
+    "Installation de <%AppName%>"
+
+    Caption
+    "Patientez pendant l'installation de <%AppName%> sur votre ordinateur."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Saisir la l�gende ici."
+
+    Message
+    "Saisir le message ici."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Titre"
+
+    Subtitle
+    "Sous-titre"
+
+    Caption
+    "L�gende"
+
+    Message
+    "Message"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Titre"
+
+    Subtitle
+    "Sous-titre"
+
+    Caption
+    "L�gende"
+
+    Message
+    "Message"
+
+    Text
+    "Saisissez votre texte personnalis� ici."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Accord de licence"
+
+    Subtitle
+    "Veuillez lire attentivement l'accord de licence suivant SVP."
+
+    AcceptRadiobutton
+    "J'accepte les termes de cet accord de licence."
+
+    DeclineRadiobutton
+    "Je n'accepte pas les termes de cet accord de licence."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Readme"
+
+    Subtitle
+    "Readme pour <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "S�lectionnez le r�pertoire d'installation"
+
+    Subtitle
+    "O� installer <%AppName%> ?"
+
+    Caption
+    "L'installation de <%AppName%> s'effectuera dans le r�pertoire suivant.\n\nPour installer\
+     dans ce r�pertoire, cliquez sur le bouton SUIVANT.\n\nPour installer dans un autre r�pertoire, cliquez\
+     sur le bouton PARCOURIR et s�lectionnez un autre r�pertoire."
+
+    Message
+    ""
+
+    BrowseText
+    "Pour continuer, cliquez sur SUIVANT.  Pour s�lectionner un r�pertoire\
+     diff�rent, cliquez sur PARCOURIR."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "R�pertoire d'installation"
+}
+
+SelectProgramFolder {
+    Title
+    "S�lectionnez le dossier Programme"
+
+    Subtitle
+    "S�lectionnez un dossier Programme SVP."
+
+    Caption
+    "L'installation ajoutera les ic�nes de programme au dossier Programme affich� ci-dessous. \
+     Vous pouvez saisir un nouveau nom de dossier ou en s�lectionner un dans la liste des dossiers existants. \
+     Cliquez sur SUIVANT pour continuer."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Dossier Programme:"
+
+    FolderListLabel
+    "Dossiers existants :"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Cr�er le dossier programme pour tous les utilisateurs"
+}
+
+SetupComplete {
+    Caption
+    "L'assistant InstallJammer est termin�"
+
+    Message
+    "L'assistant InstallJammer a install� <%AppName%> avec succ�s. \
+     Cliquez sur TERMINER pour quitter l'assistant."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Type d'installation"
+
+    Subtitle
+    "S�lectionnez le type d'installation convenant le mieux � vos besoins."
+
+    Caption
+    "Cliquez sur le type d'installation que vous souhaitez."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Description"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Copie des fichiers"
+
+    Subtitle
+    "Contr�le du param�trage avant la copie de fichiers"
+
+    Caption
+    "L'installeur a maintenant assez d'informations pour commencer � copier les fichiers.  Si\
+     vous voulez revoir ou modifier le param�trage, cliquez sur PRECEDENT.  Si vous �tes\
+     satisfait du param�trage, cliquez sur suivant pour commencer � copier les fichiers."
+
+    Message
+    ""
+
+    Text
+    "R�pertoire d'installation:
+            <%InstallDir%>
+
+    Type d'installation:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "D�sinstallation"
+
+    Subtitle
+    "D�sinstallation de <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "D�sinstallation termin�e"
+
+    Message
+    "<%AppName%> a �t� d�sinstall� de votre syst�me."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Details de la d�sinstallation"
+
+    Subtitle
+    "Des erreurs sont apparues pendant la d�sinstallation"
+
+    Caption
+    "Les erreurs suivantes sont apparues pendant la d�sinstallation:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Information client"
+
+    Subtitle
+    "Saisissez vos informations SVP."
+
+    Caption
+    "Saisissez votre nom et votre soci�t�."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Nom:"
+
+    CompanyLabel
+    "Soci�t�:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Bienvenue dans l'assistant d'installation InstallJammer pour <%AppName%>"
+
+    Message
+    "Ceci installera <%AppName%> version <%Version%> sur votre ordinateur. \
+    \n\nIl est recommand� de fermer toutes les autres applications avant\
+    de continuer.\n\nCliquez sur SUIVANT pour continuer ou ANNULER pour quitter l'installation."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/gvsig-standard-installer.mpi
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/gvsig-standard-installer.mpi	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/gvsig-standard-installer.mpi	(revision 42196)
@@ -0,0 +1,6326 @@
+array set info {
+AllowLanguageSelection
+{Yes}
+
+AppName
+{gvSIG desktop}
+
+ApplicationID
+{5C7663A6-181A-61C1-6C25-D2B427D68E1B}
+
+ApplicationURL
+{http://www.gvsig.com}
+
+AutoRefreshFiles
+{Yes}
+
+BaseDir
+{../../../target/product/gvsig-desktop}
+
+BuildFailureAction
+{Fail (recommended)}
+
+CancelledInstallAction
+{Rollback and Stop}
+
+CleanupCancelledInstall
+{Yes}
+
+CommandLineFailureAction
+{Fail (recommended)}
+
+Company
+{gvSIG Association}
+
+CompressionLevel
+{6}
+
+CompressionMethod
+{zlib}
+
+Copyright
+{(C) 2009-<%Date %Y%> gvSIG Association}
+
+CreateDesktopShortcut
+{Yes}
+
+CreateQuickLaunchShortcut
+{Yes}
+
+DefaultDirectoryLocation
+{}
+
+DefaultLanguage
+{English}
+
+DefaultToSystemLanguage
+{Yes}
+
+DevelState
+{testing}
+
+EnableResponseFiles
+{Yes}
+
+Ext
+{}
+
+ExtractSolidArchivesOnStartup
+{No}
+
+GVSIGHome
+{<%Env HOME%>/gvSIG}
+
+Icon
+{<%BaseDir%>/gvsig-icon48x48.png}
+
+IgnoreDirectories
+{\\\.svn \\\.settings}
+
+IgnoreFiles
+{\\\.classpath}
+
+Image
+{<%BaseDir%>/gvSIG/extensiones/org.gvsig.app/theme/splash.png}
+
+IncludeDebugging
+{Yes}
+
+InstallPassword
+{}
+
+InstallVersion
+{2.1.0.2200}
+
+JRELinuxProvidedHome
+{<%JRELinuxProvidedParentPath%>/<%JRELinuxProvidedInstallDirName%>}
+
+JRELinuxProvidedInstallDirName
+{jre1.6.0_26}
+
+JRELinuxProvidedInstaller
+{<%JRELinuxProvidedParentPath%>/<%JRELinuxProvidedInstallerName%>}
+
+JRELinuxProvidedInstallerName
+{jre-installer-lin.bin}
+
+JRELinuxProvidedParentPath
+{<%GVSIGHome%>/jre}
+
+JREWinProvidedInstaller
+{<%JREWinProvidedParentPath%>\<%JREWinProvidedInstallerName%>}
+
+JREWinProvidedInstallerName
+{jre-installer-win.exe}
+
+JREWinProvidedParentPath
+{<%Temp%>}
+
+Language,ca
+{No}
+
+Language,cs
+{No}
+
+Language,de
+{No}
+
+Language,en
+{Yes}
+
+Language,es
+{Yes}
+
+Language,fr
+{No}
+
+Language,hu
+{No}
+
+Language,it
+{No}
+
+Language,lt
+{No}
+
+Language,nl
+{No}
+
+Language,pl
+{No}
+
+Language,pt_br
+{No}
+
+Language,ru
+{No}
+
+LastIgnoreDirectories
+{\\\.svn \\\.settings}
+
+LastIgnoreFiles
+{\\\.classpath}
+
+LaunchApplication
+{Yes}
+
+PackageDescription
+{gvSIG is a geographic information system (GIS), that is, a desktop application designed for capturing, storing, handling, analyzing and deploying any kind of referenced geographic information in order to solve complex management and planning problems. gvSIG is known for having a user-friendly interface, being able to access the most common formats, both vector and raster ones. It features a wide range of tools for working with geographic-like information (query tools, layout creation, geoprocessing, networks, etc.), which turns gvSIG into the ideal tool for users working in the land realm.
+
+gvSIG is known for:
+
+- Integrating in the same view both local (files, databases) and remote data through OGC standards.
+- Being designed to be easily extendable, allowing continuous application enhancement, as well as enabling the development of tailor-made solutions.
+- Being open source software, under the GNU General Public License (GPL), which allows its free use, distribution, study and improvement.
+- Being available in several languages.
+- Being developed using Java.}
+
+PackageLicense
+{GPL2}
+
+PackageMaintainer
+{gvSIG Association}
+
+PackageName
+{<%ShortAppName%>}
+
+PackagePackager
+{gvSIG Association}
+
+PackageRelease
+{<%PatchVersion%>}
+
+PackageSummary
+{gvSIG is a geographic information system (GIS), that is, a desktop application designed for capturing, storing, handling, analyzing and deploying any kind of referenced geographic information in order to solve complex management and planning problems.}
+
+PackageVersion
+{<%MajorVersion%>.<%MinorVersion%>}
+
+PreserveFileAttributes
+{Yes}
+
+PreserveFilePermissions
+{Yes}
+
+ProjectID
+{D891C80B-54CC-2948-92A4-C0A46AFB02F5}
+
+ProjectVersion
+{1.2.15.2}
+
+SaveOnlyToplevelDirs
+{No}
+
+ScriptExt
+{.sh}
+
+ShortAppName
+{gvSIG-desktop}
+
+SkipUnusedFileGroups
+{Yes}
+
+Theme
+{Modern_Wizard}
+
+ThemeDir
+{Modern_Wizard}
+
+ThemeVersion
+{1}
+
+UpgradeApplicationID
+{}
+
+Version
+{2.1.0}
+
+ViewReadme
+{Yes}
+
+WizardHeight
+{450}
+
+WizardWidth
+{700}
+
+}
+
+array set ::InstallJammer::InstallCommandLineOptions {
+debug
+{Debugging Switch Yes No {} {run installer in debug mode}}
+
+debugconsole
+{ShowConsole Switch Yes No {} {run installer with a debug console open}}
+
+mode
+{InstallMode Choice No No {Console Default Silent Standard} {set the mode to run the installer in}}
+
+prefix
+{InstallDir String No No {} {set the installation directory}}
+
+test
+{Testing Switch Yes No {} {run installer without installing any files}}
+
+}
+array set ::InstallJammer::UninstallCommandLineOptions {
+debug
+{Debugging Switch Yes No {} {run uninstaller in debug mode}}
+
+debugconsole
+{ShowConsole Switch Yes No {} {run uninstaller with a debug console open}}
+
+mode
+{UninstallMode Choice No No {Console Silent Standard} {set the mode to run the uninstaller in}}
+
+test
+{Testing Switch Yes No {} {run uninstaller without uninstalling any files}}
+
+}
+FileGroup ::0B1D2CFD-CF3F-0A84-2C33-6B9A957B3181 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-5-x86 FreeBSD-6-x86 FreeBSD-7-x86 HPUX-hppa Linux-x86 Linux-x86_64 Solaris-sparc Solaris-x86 Windows TarArchive ZipArchive} -name {gvSIG base} -parent FileGroups
+File ::1B718456-0AF4-8BDF-A1ED-E17D27781AD8 -type dir -directory <%InstallDir%> -name /home/cordin/projects/gvsig/svn/gvSIG-2.0-build/build/product -location <%BaseDir%> -parent 0B1D2CFD-CF3F-0A84-2C33-6B9A957B3181
+File ::237C749A-600F-FEDD-F268-EEFEBF8B8044 -name gvsig-desktop.l4j.ini -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::51F93AE5-2DF0-4276-143B-45EB8ABCE033 -name gvSIG.ico -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::7B82CBAB-2682-5010-F13B-C1A53C6C7CF2 -name gvSIG.sh -permissions 00775 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::6AD8155F-6600-2DA9-F69E-2182EDCFA672 -name LEEME.txt -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::B07FC8E7-C380-B4FC-361E-81FDFE7B627E -name LICENSE.txt -alias ProgramLicense -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::AC1ADBEF-85EE-5744-EE30-6AF7F2BD0667 -name log4j.properties -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::918600A7-9186-F824-EFA0-2E73A45B011D -name README.txt -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::329EE615-3EB9-C25D-0DC9-73C46F49CD32 -type dir -name gvSIG -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::72746268-7243-EFA6-273F-FEE49F326114 -type dir -name extensiones -parent 329EE615-3EB9-C25D-0DC9-73C46F49CD32
+File ::13771437-C2CD-9E44-B800-C429DC94453C -type dir -name org.gvsig.coreplugin.app.mainplugin -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::DE66AAA5-FC3C-D5DE-9EDB-3EA0D668B155 -type dir -name org.gvsig.installer.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::CFBFC626-4D3F-D460-0A35-CF1D00DB5AE4 -type dir -name jre_7_windows_i586 -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::7AA2F4F2-B0DA-DBD5-F224-E9C003C3976B -name package.info -active 0 -parent CFBFC626-4D3F-D460-0A35-CF1D00DB5AE4
+File ::7184801B-49F8-2F32-50A4-DDEEAE075040 -type dir -name jre -active 0 -parent CFBFC626-4D3F-D460-0A35-CF1D00DB5AE4
+File ::6022EE89-ECCB-6528-60DD-FD0A2AE2BA03 -name Welcome.html -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::B570ECD2-42EE-C626-1C6F-CC932E63B868 -name THIRDPARTYLICENSEREADME.txt -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6 -type dir -name lib -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::ED47C1D2-BA4B-5043-DD41-0318FDA5AC1F -type dir -name images -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::1543C23F-FDB8-638F-A527-DCCDDB880E2B -type dir -name cursors -active 0 -parent ED47C1D2-BA4B-5043-DD41-0318FDA5AC1F
+File ::D09140B8-A735-D829-A19E-76F5D211FFF0 -name win32_LinkDrop32x32.gif -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::B2527381-DAEA-2888-2857-5CF629F6DFC0 -name cursors.properties -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::B84D4F6F-DFF4-592C-E542-7AC5D2B9125F -name win32_CopyNoDrop32x32.gif -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::A4BED910-BAC0-572E-2569-A58FEE4A1045 -name win32_MoveDrop32x32.gif -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::7B2C72F3-C5BF-4151-39B3-D54E32B4A524 -name invalid32x32.gif -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::0EE2AA56-A533-8040-4168-7F298B713FE8 -name win32_MoveNoDrop32x32.gif -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::264D2DFD-A8D7-FA99-FAFD-55CC48482A72 -name win32_LinkNoDrop32x32.gif -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::3EFD4756-2894-B272-24B5-CA824E6278C3 -name win32_CopyDrop32x32.gif -active 0 -parent 1543C23F-FDB8-638F-A527-DCCDDB880E2B
+File ::CC501E26-ADA0-3E14-8CBB-CB6741348FF1 -name sound.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::BECE2B57-557D-B859-FA63-83626D8F161D -name psfontj2d.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::C157DC85-78FE-5795-0ED0-625BF4DAD9BD -name jvm.hprof.txt -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::4C6776C1-1E7F-7C8F-DE4E-9C2E815CCD60 -name deploy.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::288A6950-DC77-89CA-ACBC-427C65BFAB37 -name flavormap.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::45F17D80-974F-9A1B-E921-20AEAD741546 -type dir -name applet -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::0E489928-EA45-63A9-CA6C-3FE750614C78 -type dir -name deploy -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::C4823D29-F7CE-13CD-ED30-DBEE518BD80C -name messages_zh_HK.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::FB8C95BD-D022-3E7C-FA3A-F6B7DEEE08EC -name messages_de.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::A7732A70-2660-18F4-E10D-B4F1A79E0E55 -name messages_pt_BR.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::9909502D-6352-7853-A5D5-388BC359797C -type dir -name jqs -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::7B59A61E-7DFB-6865-2F2C-B1903E761EB2 -name jqs.conf -active 0 -parent 9909502D-6352-7853-A5D5-388BC359797C
+File ::3A829CAE-1F19-7FA3-51E7-25F9F82BCAE7 -name jqsmessages.properties -active 0 -parent 9909502D-6352-7853-A5D5-388BC359797C
+File ::CBE15782-FD6A-9E0C-0771-00EEC50DE62A -name messages_fr.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::FB1FEBCD-C2B4-6907-0CF6-19540FEDB835 -name messages_it.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::502AC06A-AAA1-3BED-07A6-DC6C1E40FBA7 -name splash.gif -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::90E5299C-367B-138D-F1C2-07B71861559E -name messages_zh_CN.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::15F1FDFB-9F32-1E43-59A1-0D34A2016CEB -name messages.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::3A7C3723-C563-2C21-687E-16117A03733C -name messages_es.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::835D45BE-A4C6-0D44-BE64-2BCB74B52DA9 -name messages_sv.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::5EAF8AB8-583B-5938-A830-6EE68E0AF7B9 -name messages_zh_TW.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::01261AA4-056E-3089-A673-915DBB61A8F0 -name messages_ja.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::1AFD551F-E002-F62F-A28B-3061B384048B -name ffjcext.zip -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::29CC1D4C-052D-BA6F-864C-3EA3288B45FD -name messages_ko.properties -active 0 -parent 0E489928-EA45-63A9-CA6C-3FE750614C78
+File ::7AA41AF9-D656-8A8E-BF1F-05314AC268C9 -type dir -name management -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::EF73845B-BCF6-02AA-3B0C-B2BF4EB333D7 -name snmp.acl.template -active 0 -parent 7AA41AF9-D656-8A8E-BF1F-05314AC268C9
+File ::E08ADDCF-AB2C-0C22-C39C-478260243628 -name jmxremote.password.template -active 0 -parent 7AA41AF9-D656-8A8E-BF1F-05314AC268C9
+File ::5773F38B-6F67-D31B-4559-32BBEBF98E99 -name jmxremote.access -active 0 -parent 7AA41AF9-D656-8A8E-BF1F-05314AC268C9
+File ::0B2EFB31-37F8-D465-EBFD-3F50D9A5D309 -name management.properties -active 0 -parent 7AA41AF9-D656-8A8E-BF1F-05314AC268C9
+File ::871FBBE6-6973-57D2-8833-CCD94FE7D40D -name jce.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::5A13F1A1-C406-A2E1-33EE-DA26158DF7EF -name resources.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::293EEB78-C147-B976-7045-AB8BF7D4ECFE -type dir -name fonts -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::9BEEA217-7786-BE14-31D6-036152D94457 -name LucidaTypewriterBold.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::B5B8022A-0F32-F3D3-2334-36152BB91734 -name LucidaSansRegular.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::0BC19322-0566-975B-EA8F-7F61793510EA -name LucidaBrightItalic.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::A7782BB9-1F51-A8FE-F9A2-28F8DCB93DA9 -name LucidaBrightRegular.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::DA76D84E-078B-9562-87C6-291090729D6E -name LucidaBrightDemiBold.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::FB622B3F-68A0-B69D-AC61-9B41C7BDD245 -name LucidaSansDemiBold.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::F585C0D1-C3CB-DADB-8BB0-C04F47533839 -name LucidaTypewriterRegular.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::C81F192A-5482-F881-801D-8F414EB4F018 -name LucidaBrightDemiItalic.ttf -active 0 -parent 293EEB78-C147-B976-7045-AB8BF7D4ECFE
+File ::CE9DA27D-A84E-CDC6-BA2C-17B678980813 -name charsets.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::2C8DCA5B-0870-8FCE-8072-2F0B399D9F7D -name content-types.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::1C427D68-10D4-636D-EA66-79E117E94869 -name net.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::C2E4AB50-E9AD-0766-54D8-7774B2E84EE2 -name fontconfig.bfc -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::F7AEDE8A-ABC6-7093-6956-10787F350A92 -type dir -name i386 -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::63C866BC-4A4C-3A93-AEC8-CE62369216CF -name jvm.cfg -active 0 -parent F7AEDE8A-ABC6-7093-6956-10787F350A92
+File ::592516BF-2E1E-3F03-B7E4-1E34E4B902C1 -name fontconfig.properties.src -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::CD1FF267-549E-BE95-B766-DC01701F3047 -name rt.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::45124525-12EB-96E2-39CF-85937D5985B2 -name meta-index -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::1A5996D4-6EFC-5893-6608-81F629013B9F -name calendars.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::A2089B31-DC7D-9F36-75CF-F4EFED35039C -name psfont.properties.ja -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::45D1AFDD-3B97-1947-D580-FE1D438B3ED5 -name management-agent.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::C9B2D86D-7FFD-530E-8437-2DBB6FC12539 -name classlist -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::E5C753A2-A335-2868-2CAB-57AF3C0DA842 -name logging.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::D5757BB7-E4D0-EB88-5E28-BBD053A2DC75 -type dir -name security -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::8CDF274E-3D1E-AD56-A248-9C3D87A76003 -name java.policy -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::77A35B60-AF28-00A9-CF24-55431EEC051C -name trusted.libraries -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::5FB51852-F59B-F7D6-971D-D309CE575DD6 -name US_export_policy.jar -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::68185DEA-8B37-65A8-14FC-1F278573CCED -name javaws.policy -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::8DCBCBB1-8099-9F82-B1B0-F2098B24F68E -name blacklist -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::BF38B12F-B27F-0C6C-CF91-72709426E845 -name local_policy.jar -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::FC68FD33-BF6C-115F-027B-CDFF6C6B579D -name java.security -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::2160962B-90E6-8D15-2D45-E181435CED40 -name cacerts -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::960614B1-225B-CC70-7FA9-98AB0E14A9C9 -name javafx.policy -active 0 -parent D5757BB7-E4D0-EB88-5E28-BBD053A2DC75
+File ::2C46F324-3048-CE05-6841-9DE0CC0F55A3 -name jsse.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815 -type dir -name ext -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::4680E397-43D2-523D-808B-54C68AEE7CF7 -name dnsns.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::37E6A4EC-D940-04FB-8605-1379644D0B2D -name sunjce_provider.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::0229CF1F-6FD4-8B11-93FD-E9B058989965 -name localedata.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::AC64E6CC-6A25-9443-982E-833A0656D7E0 -name meta-index -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::3D944DAF-6F3F-18B2-9A5D-32794C88AA26 -name sunpkcs11.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::08D34B71-E22F-006F-5F35-D0AC297B8AC3 -name sunmscapi.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::5213E24A-40F6-D650-4A68-F92809D7926B -name jaccess.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::B8DD248F-E55D-677F-26CA-01A70ED6960B -name sunec.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::40D33E51-463A-57DC-0EA8-92DCEE8F0C70 -name access-bridge.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::1EABB78D-B34D-6270-C447-D11FE9586984 -name zipfs.jar -active 0 -parent 9DFDC6C7-F6FF-E8C0-530D-BEF060AEF815
+File ::A6D0AE13-3F65-0984-4863-91F620154BDC -type dir -name zi -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::D992E5E7-C80A-3D5E-9A61-C4E6CA329C02 -type dir -name SystemV -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::703DF3BA-F500-3E5C-CD4A-AC64622A7C35 -name MST7 -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::81C81582-73BF-CBA3-C086-B4008B96FC3F -name CST6CDT -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::53DE2545-D2B9-4667-F2E3-037F0F875E79 -name AST4ADT -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::7BF35321-AC93-773D-0DB3-6ADEF19B3187 -name YST9 -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::5402B42E-52F8-9DFB-8EC1-9F9F3C7466E3 -name HST10 -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::7AA58041-C4B3-9FB0-1179-50A292312DC4 -name PST8 -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::821F6B43-578B-2010-66C1-7943A0998B31 -name MST7MDT -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::41CD7751-5BA3-4B1F-4D00-26507D2C570A -name AST4 -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::833C7C3D-BEE4-C990-E37B-91798F8DB2D1 -name PST8PDT -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::AA9F1C13-24CC-744F-922B-040827E3C166 -name YST9YDT -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::73DB6FF5-D3A7-D513-245F-B38802772821 -name EST5EDT -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::73421068-F8FD-C20E-A53C-BA9E58DBECB1 -name EST5 -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::3310D797-5715-C56C-95BD-FA101349D359 -name CST6 -active 0 -parent D992E5E7-C80A-3D5E-9A61-C4E6CA329C02
+File ::F1931B31-9E36-1D1F-B152-972D16081A44 -name CET -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0 -type dir -name Atlantic -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::24EFFF0C-F08F-FC47-0C00-88041CEA6A53 -name Reykjavik -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::D80C03BE-1576-A3FE-CCD4-9E8F14E653A7 -name Faroe -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::D2EB25E7-BD37-412E-66E9-658C669A14A5 -name Azores -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::03EB1291-4106-9C41-E299-39E50BEB5675 -name Stanley -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::97C1F0CF-1844-BAA5-5A2A-D6A8D3F075E3 -name Madeira -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::FCB29EDD-0FB6-A5B8-6977-2ADAFE2A8892 -name Bermuda -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::DFCA06E4-5608-010A-16F0-DDF79E67FE87 -name Canary -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::845D87C8-A48A-1B29-CF43-C4CD27E91654 -name Cape_Verde -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::8DCABC9B-7C8A-3F0A-104E-A7AF6A6A7A35 -name St_Helena -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::FB963A23-E448-5EC8-E700-A9EC999B93CB -name South_Georgia -active 0 -parent D3AEBD78-3695-CE6F-5E1A-C8E19661EEF0
+File ::C872A6DE-7087-C573-7644-E6C9DA2F1C2A -type dir -name Pacific -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::ADD3ACBF-2C3A-88A6-EA8E-A676DB1340E9 -name Norfolk -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::426032BD-CFC2-7C19-D168-4B2BBB374376 -name Johnston -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::F783C29A-A73E-2B18-2BD9-283ED7EB4D51 -name Noumea -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::DD87EF23-3395-8F25-F429-E5C0D4FB7AB3 -name Fiji -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::55175EF6-BDD2-4022-122F-16301B9B814C -name Pohnpei -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::B6A83487-D999-FC5A-109B-CBA49C66DA4B -name Guadalcanal -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::617E75D0-BDC3-E883-BC88-BCEE69B65AA8 -name Galapagos -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::0D55945F-A7DD-5082-31F5-77D4EDCF6F16 -name Kosrae -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::44477B0D-81A6-BE16-4574-11303E49218C -name Funafuti -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::DBACFE76-D427-C127-76AA-3ECC0A9DCFCA -name Apia -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::6BC467C4-DB10-F064-EE4B-B8FC37CFBE99 -name Efate -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::B9C96421-8F08-9865-82F5-5B819FB1708D -name Wallis -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::8427D360-5530-FE82-F1DD-45C20B492943 -name Gambier -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::E2C325F9-8D44-5E80-2BF0-6ED8BDF0D140 -name Enderbury -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::6A31976A-1AA3-AD4B-068E-DEDBF440C11D -name Tongatapu -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::BE4B830F-67CC-B09E-D22C-D2B9EE8E37E3 -name Chuuk -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::AB338C4F-7E77-F6DE-A162-3ECC8CA81619 -name Marquesas -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::B0ACCD90-AD5C-3F74-FDF1-48E51E94CA6B -name Chatham -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::5CB8561B-2CEA-C616-F15F-5E2595481BBD -name Tahiti -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::BFC8F181-A964-4064-65EE-E95509A8EC57 -name Pitcairn -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::A269328F-C518-8A40-A9F7-02BD959FD567 -name Port_Moresby -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::4E4FF3C8-DAC7-AAF2-7A9D-A3E85C0BB397 -name Tarawa -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::FB3583F2-90DA-5822-901E-AACD23BE52FA -name Honolulu -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::92A83E64-1E82-CC19-C190-C9831C186B22 -name Rarotonga -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::161B1D96-3DBC-E0DA-0094-2980F3F4C5C0 -name Palau -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::9662B7B1-69DE-F4AB-3B2A-89AE86B3DCFF -name Niue -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::AE5D89C5-45B7-CEA1-2752-0A3943D3A55D -name Guam -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::F791A039-B8C7-2E5D-E9EC-6EC97417772A -name Auckland -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::1F3FD38D-BBB1-E9E9-0AB4-5D034AF48F3D -name Kiritimati -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::95828A8B-2D7D-49AA-D15A-1735B60D7A2E -name Kwajalein -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::0CE7E916-D955-85A6-2C7E-E297FF0EC558 -name Pago_Pago -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::7C9A7D60-2951-1351-371B-9803E2B9DD41 -name Fakaofo -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::22153CB4-0CC8-3A3D-61E1-FC16F61E0360 -name Easter -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::4AB25000-C7D7-45C1-A198-24B1730F83D1 -name Nauru -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::35847F6E-438D-ACE9-361D-8A07AF050ABB -name Saipan -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::73089E0E-58ED-BDA6-C6E4-408C01EB1C94 -name Midway -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::94AF49EF-0BFA-0AF7-906B-590FB44CECE2 -name Wake -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::F05879DC-16FD-1882-F9F9-4AF28F827641 -name Majuro -active 0 -parent C872A6DE-7087-C573-7644-E6C9DA2F1C2A
+File ::CE4D9A04-BDD0-0C5F-1B48-EB9A4FB62542 -name EST -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::50C87A25-B872-D564-2874-35653B8B9BDA -name CST6CDT -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::00BD011F-37D8-5BFC-A7B6-07499A3BFE84 -type dir -name Antarctica -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::6715A292-DB3A-A2A6-988E-35DE42E0AB0A -name DumontDUrville -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::3AD60619-7900-E7CF-F28B-26739822A4C1 -name Casey -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::D5E3AC55-FF35-503E-89EE-F0373FEB12A7 -name Vostok -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::4B56C11D-9694-AE09-AD66-2B4BF9F1EB98 -name Palmer -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::FC8E6584-F54A-0619-183F-88E133A75B91 -name Rothera -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::BC6C4E1A-808B-6C69-884B-5D48729B0F69 -name Mawson -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::F3CFEF89-A1E9-A732-AE7C-A85BC2FBFF16 -name Davis -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::A6DBD604-E499-339B-1CCB-C4F29458B422 -name Macquarie -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::F7AACE03-3568-2148-B5F9-F92DC99B0315 -name Syowa -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::A39D6092-5726-4C17-5C30-D86E5DEBEA0B -name McMurdo -active 0 -parent 00BD011F-37D8-5BFC-A7B6-07499A3BFE84
+File ::8E21929F-B57D-BC6C-5F84-AB3FEFD49E7A -name HST -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::014499FC-B4D7-76E9-6CC1-350FB4F5C09B -type dir -name Europe -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::1280AC58-0E8F-B22A-9924-E223D4E0F08F -name Riga -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::747A251C-F999-5CA5-D022-3746E8328E5E -name Brussels -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::6C276D79-EF5E-9D47-CDD0-C881C03E7E65 -name Volgograd -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::B61CE578-2E55-1FA2-508E-4FCBF0B59B22 -name Vilnius -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::6E022188-DACB-71A8-479B-450BFB4B82D5 -name Copenhagen -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::B83375C0-BCFE-7075-0927-C4761969E8F8 -name Samara -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::06C2A008-10A0-A183-D6B2-2F0F1AC0C8EE -name Gibraltar -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::38F37C34-BB89-57BA-0F86-1833E6B6E9EA -name Warsaw -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::65A22142-EF47-96DD-8CB0-F5C16DDC6805 -name Amsterdam -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::4BB88197-81EC-5606-BB91-D8A5CDF617E9 -name Athens -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::EB390C4A-A33A-45C9-7E16-544AD486AF2E -name Budapest -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::3DD9907D-B512-7D5A-71E8-750C8C435758 -name Luxembourg -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::B7433342-7C34-2EF3-5D89-C6DC8789D1A3 -name Belgrade -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::763373F9-71A3-4DCB-6E8C-1CF6F16131D7 -name Zurich -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::D8FB433F-5669-8E1A-C76E-40C042CEB880 -name London -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::F11FA676-A725-61B0-4544-25BCCC4A003D -name Vienna -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::011976A8-6C41-1C04-0992-8E96D0899DBD -name Oslo -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::D86EA7C8-8A6C-00B1-3F05-AA06E6BE2C7B -name Stockholm -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::83EDB551-32A9-DC1D-6486-2B106B9E663A -name Istanbul -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::7CB28A39-D116-C33F-BB6D-91D7DFB6BEA4 -name Moscow -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::095DE1A3-1C2D-3CA1-95C0-B125F9CECD87 -name Madrid -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::9599678A-DC33-52EA-9227-7A14400F7318 -name Tallinn -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::E94DD3BB-7A40-34C7-BD5F-EA2A12051693 -name Kaliningrad -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::5BC35865-FDB8-1270-50DC-378E3F3E3F49 -name Chisinau -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::D9BA8966-75D6-E763-153E-33BBBAFFBC72 -name Simferopol -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::DE00DFCD-3123-E2C9-4EF3-100E8D13FD8C -name Vaduz -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::AF10C771-FFEE-07E9-6B41-8899566645D5 -name Tirane -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::98598DBB-86DD-5582-E72F-B96DBB9AC4BE -name Berlin -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::C9C420CC-9D5A-2833-CA80-21ECD5A6E99A -name Uzhgorod -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::DDC28C9F-A609-6F22-37DC-87AB6B1851A0 -name Kiev -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::80C7003B-8F1D-E51F-E11F-67E818CA8528 -name Malta -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::2C56DC75-501C-E9EE-4207-1A2574332084 -name Zaporozhye -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::3A7C813B-2E0C-008A-6EE9-43C97562D314 -name Sofia -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::CC50158E-9358-904B-12FF-18B54148D96F -name Paris -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::579D6399-3D7D-C4D3-4DFA-40B10ADCFCD6 -name Prague -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::AEBA0E9D-8046-22BA-264F-D100457E418E -name Dublin -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::26B665C0-AF79-29D8-D105-623D5C369FE5 -name Bucharest -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::0DB0DEA9-2F99-F535-F506-471C307DE53A -name Helsinki -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::D944ABEB-C3F7-C5D0-211D-E5F1810A3EF4 -name Minsk -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::38DF2A50-1FC7-A3A3-4B7E-4A1551812F71 -name Lisbon -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::0E60E5C5-8099-4974-B994-9661EEFA2ADB -name Rome -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::3AF6D40F-D0A4-A39E-1E37-C885156B6D52 -name Andorra -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::CCB16175-64CA-997B-CA7A-CB9F95B3240D -name Monaco -active 0 -parent 014499FC-B4D7-76E9-6CC1-350FB4F5C09B
+File ::1FE66AD0-F416-B5EE-32EA-DB0FEB575812 -name GMT -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::8958DEC6-448D-64C8-5202-DFB61D3188A6 -name EET -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::901B1230-3812-C5E0-BEA1-AD5800FB159E -type dir -name America -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::F2D3FEAC-623E-4AEA-D39C-0682BCA2BCF1 -name Cancun -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::9DA6BC52-05F0-D90F-2414-FB54F9896689 -name St_Thomas -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::5EF8F0E4-82B3-730F-D619-E69DBEEF6559 -name Lima -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::35C43B55-F4DF-2901-56FD-464EB2CD4C6C -name Menominee -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::4DF02E37-AA9D-8BA0-2857-5A944FF8B00F -name Chihuahua -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F13832B9-D2EA-9663-3C53-08683EAAC0E5 -name Anguilla -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::28B2B011-B85B-363E-FF84-4BEC2F58C577 -name Nipigon -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::91399435-59E6-263F-3240-3FE0E8E56FAE -name Merida -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::83E0FB75-AF07-4F89-4D46-C4181226C0FF -name Resolute -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::06C1D3BD-20EA-D57B-7EF4-380270DBA0B4 -name Cambridge_Bay -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::3F729024-D406-289F-985C-205427006F5C -name Bogota -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::6C865282-2597-129B-6E26-B47C49ED0D61 -name Boise -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2200BB01-0E20-A307-9841-0B1AA176385C -name Cayenne -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::876B1354-ED59-1B4A-D8E9-7BA9F766D5EA -name Los_Angeles -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::9E7FD21A-6033-0C73-3FA3-A4F585BF0781 -name Paramaribo -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::6C7C60FE-2135-BFED-3D60-BC55E813D9BC -name Dominica -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::42930946-A3CC-16D2-52D4-126F42CE0FD6 -name Aruba -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::3DDEBF8D-3605-B2AB-E69C-5B59134581BE -name St_Kitts -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::03DE8AFD-CA6E-535F-AC53-59E7B2ADF81B -name Havana -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::BEFFA732-CA57-6946-2114-0769E8406B3D -name Managua -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::9D128EA3-6006-BB89-631F-07B27038AB6C -name Mexico_City -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::DBB07865-A5FF-050B-9013-28310728E6C2 -name Noronha -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::96FDC316-08C9-5418-478F-932B038C89F7 -name Pangnirtung -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::783ADB2E-6235-E630-2A97-855787D3428B -name Guadeloupe -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::C344D17C-CD96-6A4D-AEAA-A095FC72FAD2 -name Santa_Isabel -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::9BDD6D7A-A9E7-3C37-CC12-15FED6C5D7B3 -name Tegucigalpa -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::1378E018-6937-76F8-0950-43CE7382B4DA -type dir -name Argentina -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F2C55F2D-495F-A4C2-E459-F30B9D0B682A -name Mendoza -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::7C19C07B-DC45-CFDA-CE7F-CC937604CA51 -name San_Luis -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::E44C6DB8-76E2-1E84-81C1-8EA31A426070 -name Ushuaia -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::82567790-A958-0D8A-4233-98A533818E7A -name Rio_Gallegos -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::F640506A-D39F-6E76-6EC4-4FC0D11E1717 -name La_Rioja -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::9A7354CB-81B6-004F-EFB1-61126AFF146C -name Salta -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::A2AE2951-5C1C-52CC-0DCC-F6A0D19EC3BD -name Tucuman -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::145A714F-1DE7-C098-51D2-EB3F322BE40D -name San_Juan -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::943BC199-17A8-4389-3C78-D2A9E097BB09 -name Buenos_Aires -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::846ED128-41F5-2025-980F-794433CC261D -name Cordoba -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::57E2839D-3D15-CE30-4F98-FF8D68605102 -name Jujuy -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::038E5150-3A75-AAF7-ADCD-09AF6D62E6A7 -name Catamarca -active 0 -parent 1378E018-6937-76F8-0950-43CE7382B4DA
+File ::50CCB8B8-B26E-43FA-923B-9746270F1FC8 -name Blanc-Sablon -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::94066361-FD1F-7150-AFB6-EF62D373574F -name Bahia -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::6F00CB7D-B3E5-B354-1B30-B2DEE2C11D9D -name Glace_Bay -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::669B4B1A-9449-D055-D742-99625188F663 -type dir -name Kentucky -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::8402D136-3981-4D4D-EE01-D1DFA5116874 -name Louisville -active 0 -parent 669B4B1A-9449-D055-D742-99625188F663
+File ::D059EAE4-E6E4-5920-EED2-015782172E25 -name Monticello -active 0 -parent 669B4B1A-9449-D055-D742-99625188F663
+File ::AF2B599E-467A-45A4-A2B6-6F70D5D0F370 -name Cayman -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::3BA8F614-8965-20F0-FF33-1899BB34D65A -name New_York -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F64F44A5-7589-72AC-D51C-1596DF9650F2 -name Halifax -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::CF957F80-038D-077C-452D-EA83251C8AAF -name Sitka -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::8616BAE9-E98D-4EC7-5CE8-B03673AE5815 -name Denver -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::36C293EF-743D-063F-F8BE-A3EC8B76DDDE -name Nassau -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::E179278E-E71B-58E4-367F-13AD308B569F -name Puerto_Rico -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::7BFD79C6-0EA7-9B62-ED99-E89A527F8008 -name Metlakatla -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::BAB05323-A7FF-796A-796D-F29306D83822 -name Guyana -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::AF74C5F4-DEDD-8DA0-DBD2-0AD6E766128A -name Godthab -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::1D8893C8-0159-D4D2-8117-ACF1FC43B9C5 -name Guayaquil -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::20AC81AE-C51B-A187-4ACC-E8B73E38E5A4 -name Swift_Current -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F962A31F-9669-E8C2-2412-838DDB411445 -name Curacao -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::7A1F4068-5293-FA37-A51F-7344EF0CFC3B -name Rio_Branco -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::1487F249-467B-E606-687C-BD77A23773A7 -name Rainy_River -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::33FB1904-4CFE-9300-CCA2-9A2CB5D5D470 -name Danmarkshavn -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::BDC65D4A-A31F-209C-5B70-5F32251F5841 -name Inuvik -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::01B2EFCA-6573-154E-11B5-A5093D913276 -name Manaus -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::CFE243BC-750F-DF55-F2D9-4F8B9ADE5D70 -name La_Paz -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::8F52FAC8-A85C-4C47-C532-29FF5B4E2E7F -name Caracas -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::8B3896B7-1AD2-6917-AE98-1394974A11C6 -name Scoresbysund -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::9BDDD7E7-1945-C782-0227-CD0C01B1E60C -type dir -name North_Dakota -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::EA1E5581-E77E-E5AF-5E20-98D2E30247A6 -name Beulah -active 0 -parent 9BDDD7E7-1945-C782-0227-CD0C01B1E60C
+File ::14F44532-A1A8-375A-5640-E6722682761A -name New_Salem -active 0 -parent 9BDDD7E7-1945-C782-0227-CD0C01B1E60C
+File ::708298C2-A761-0CCE-FE3A-B31C5DF49227 -name Center -active 0 -parent 9BDDD7E7-1945-C782-0227-CD0C01B1E60C
+File ::FB89EC4A-5D11-C864-F6EC-EC410C6DF31C -name Thule -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::192A60FA-0629-1A38-77CF-C4895625E38A -name St_Lucia -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::7210E844-BC4F-8709-202E-C4568E4141AE -name Tijuana -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::696A7A82-D2DE-303C-6697-13E06F48758D -name Yellowknife -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::CD154819-1B5E-2391-833C-4123992F2912 -name Hermosillo -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::502FABAF-B668-1E50-CB50-51249D6C70EE -name Port-au-Prince -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::B6B6979A-D636-4A9E-CA23-F4E09E0A1716 -name Anchorage -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2737962E-C471-16FE-D955-6A6405DEB718 -name Costa_Rica -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2F2AE6D0-C655-1695-0694-55265389AA6F -name Atikokan -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::DC12D96E-DA1E-A456-AEF2-71074D2073AC -name Jamaica -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::CA913FCC-EFAF-A85F-EDD9-17CFFE5EF824 -name Santarem -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::7CC1CAAE-6907-73A6-FB6F-7AE43B64A19C -name Antigua -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2B548C0B-984A-B7FE-9D1D-8B856CC22F92 -name Juneau -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F34169B2-6379-D934-D59E-08857E16BDE7 -name Recife -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::93F6EDC1-6EFC-251A-53A2-8A42A2FF0484 -name Panama -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::A4296CC1-EE93-03F9-FC7C-2ED766E84AD7 -name St_Johns -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::BB7AC22B-A5F5-4209-2E45-F7D827531EC0 -name El_Salvador -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F0916F19-17A5-BF42-003D-248F0FBC23B4 -name Rankin_Inlet -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::089DFECC-4144-3283-1ED9-D87F01A37284 -name Iqaluit -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::9ECA17A6-4724-9EA8-21FD-39D647FB6485 -name Eirunepe -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::EF28F5B7-CE33-2078-E40E-732FD009F3B1 -name Barbados -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::1CB7B217-864F-9284-0C32-7C1E30B41E7F -name Asuncion -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::C7A4DED4-9625-EBE8-1859-44187DAEDF8E -name Cuiaba -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::63C39452-A963-C59F-FCE2-E26413D87BCC -name Moncton -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::8B381A40-9CAA-9EC0-FBEE-7EF04D5543FE -name Ojinaga -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::E0A695A5-0CF4-ACD8-D560-70BD1B56D640 -name Santo_Domingo -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::FB4BF734-C572-B7C1-D7DC-BFD5B64F1BB2 -name Montevideo -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::ACFB048F-E7F5-55DF-A971-64BD64E55FA1 -name Toronto -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::48A1CDC2-3586-0A56-9BE2-A344FA3DA685 -name Dawson -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2B72F7C2-AFC5-0690-D52A-897467BC7180 -name Port_of_Spain -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2154DBBA-2FDB-6738-60D2-5C45A9FC19D1 -name Fortaleza -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::D2C05C7F-05EE-DAA6-75D7-229B0678E033 -name Belem -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F571842A-E048-793E-A932-6426B8706507 -name Campo_Grande -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::1BE8A376-8958-D1FD-AB58-61895A9DDA81 -name Martinique -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::32FBAC29-CEBE-E691-5B5A-F4D60CC2ABAE -name Boa_Vista -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::D58B5DAD-D230-4F8B-AAE9-78774EC0C583 -name Tortola -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::66ECEC36-83AF-683F-1820-17847E3DE6FA -name Maceio -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::E24C592C-F9EB-CF06-BB6D-FC983EDA5AC1 -name Montserrat -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::E413E32A-61D0-DF60-14D1-897D1B9BB920 -name Adak -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::F8F8E10A-88BA-E200-D0B9-5FA7C451FF1A -name Porto_Velho -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::ADBD7513-83C2-07E6-F45A-5BB5B24A378F -name Dawson_Creek -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::A40708E9-367C-89B8-9081-DFD9759FB0C0 -name Grenada -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::0F4F4EBD-BF52-680C-E91E-12B44B01683F -name Miquelon -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::696DA82D-B5C8-D1DF-D7CA-0EA41B679BA3 -name Sao_Paulo -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::5BC39E40-7D40-14CF-3ECA-C51C08C63BDA -name Montreal -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::C7157EA0-2F0D-7DB8-0DCB-E14BEA058800 -name Santiago -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::03BE013F-2498-9BC2-45F6-A141EB100ED7 -name Thunder_Bay -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::46F73E61-9D93-C133-50C3-126347E30A81 -name Araguaina -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::0AFD15A6-6DE1-4186-059C-B8635B4B56A8 -name Regina -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::1F2672B6-F600-226B-CF4B-3A16A263A50D -name Mazatlan -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::60599818-DE1E-7025-EFEE-6B32CBAFB1BD -name Belize -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::21D639A9-86FA-E2B9-45D8-AFDCCFA9AAE0 -name Edmonton -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::E9ED0A64-43B5-5A2D-BAD4-F0CAA408D9FF -name Yakutat -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2F3201A0-C4B7-083B-E948-7467F00264E2 -name Chicago -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::D30AEC12-9F08-6390-D253-F398FEADA924 -name Vancouver -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::66FBF2C3-430E-E6A4-BA83-A181C4E17167 -name Whitehorse -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::673DF2AF-D4A7-2AB0-E1AF-43AFA4487571 -name Phoenix -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::5D7C11AF-0463-5779-6704-12FC8783E10A -name Goose_Bay -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::37CE568A-6E7E-36EC-B24E-D07AA5C9565A -name Guatemala -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::36ECDA54-51F3-E51C-C274-752FFF2DE4AB -name St_Vincent -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::A1C84709-8696-55A2-9D7C-4FE2A4D010CE -name Detroit -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::6848FCF1-AF6B-1454-F58B-633CA9A7D341 -name Matamoros -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2CB599CD-E417-AD83-CCA9-CC1D923B68E4 -name Nome -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF -type dir -name Indiana -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::2D7F509F-AA87-CA14-2886-F7F6DA55A7CE -name Marengo -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::58DB2CAB-3F09-795B-07C2-C0C3A42045B8 -name Tell_City -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::EDD8510D-22EB-8A2F-7CD9-32A9119F5C4B -name Knox -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::087D88BF-09E0-EAB7-4708-ECDED45F93AE -name Petersburg -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::557EAE9A-9366-458D-DBFE-D8EB740E1097 -name Winamac -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::89B8A0F6-BF5B-E2E2-BC7F-5840C7C62CD9 -name Indianapolis -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::6FAD5043-51B1-2ABB-2863-ACDE639F2E30 -name Vincennes -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::21083956-5893-A264-4FBF-A152C07F6081 -name Vevay -active 0 -parent AE5CDFE1-39A5-5580-9B8D-8A132CEDCDBF
+File ::EB927449-1C6C-1BC2-CCAF-E30EBFA8E989 -name Monterrey -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::7B3D9A97-0D14-89CD-D5D1-14751AA10AA9 -name Grand_Turk -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::925A1071-1C69-3033-4BAA-25B6A6EB7220 -name Winnipeg -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::8F34E66E-08EA-67FE-878B-02A5DCCC5A65 -name Bahia_Banderas -active 0 -parent 901B1230-3812-C5E0-BEA1-AD5800FB159E
+File ::E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A -type dir -name Africa -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::4E96C1EE-C900-EB9B-E35D-1F81881330E3 -name Brazzaville -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::29F1D09A-D709-D14A-3463-36B492025D5E -name Khartoum -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::7961E1A4-AF57-7BAF-94AF-330FEEED9B98 -name Lusaka -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::9AA04696-2659-F38D-99F8-A8D4032E4460 -name Asmara -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::B830F1EF-E32F-1097-8538-FF7D4346EED2 -name Kigali -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::BD118691-2375-0384-4C2A-E9E0BE70296E -name Casablanca -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::4A78C5D8-1110-2ACB-2727-E6BC0DDE5BFD -name Lagos -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::0C828EC3-850A-AEBF-205E-1FF25B2BD237 -name Kinshasa -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::FABE5176-7132-0A41-3C5C-F498F20E63BA -name Johannesburg -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::F8F2B27A-14D5-9571-001A-AA18162C1E97 -name Porto-Novo -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::E9A70AC6-A9B6-59DE-04CE-FBF7F148CA92 -name Ndjamena -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::09BDCF50-3771-CE16-7385-ABC0779D7B84 -name Douala -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::F2818B43-D2EF-64B0-C3A7-2ADF2C87211B -name Malabo -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::56CC1206-3E96-B8BC-47C8-C27F1A62B67E -name Lome -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::98BCD919-680A-576A-44B6-EB4ADAD3FDA4 -name Libreville -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::93A098B9-BF83-2290-8A06-5CD76A0EC66F -name Dar_es_Salaam -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::1D4790EE-BE5D-CCD7-C2C2-A1BE6820D6EE -name Niamey -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::7CEF324C-D809-F835-839B-3BC51B96284F -name Maseru -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::DBBED673-8016-CD00-04D6-7CA5F3A56587 -name Bangui -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::7C1C68D0-F623-07EE-BAA2-79D7E56DD749 -name Tunis -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::163B097C-7CD4-E8D8-0F41-B707D78EEA00 -name Gaborone -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::E545AD4A-AFB7-9E5E-C849-9FFAC33376FD -name Nairobi -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::8B49620D-F6FE-944C-6133-9756B35AEBD9 -name Tripoli -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::D2207E6C-1E7C-34C6-318E-103B983F3539 -name Bujumbura -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::930050AD-C323-FBF2-49C7-365EA88375BB -name Dakar -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::3C8FD79F-2E69-1D8A-FCDE-61BD5086A3D0 -name Nouakchott -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::8D1F37E2-83A9-6695-9F20-BCCD1B69918D -name Djibouti -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::25D38A11-ED72-5DBD-C929-D9D15678CCE5 -name Bissau -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::F1C012A6-7019-14B0-A403-166395A6E6A8 -name Mogadishu -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::5171DF51-8595-A2C2-9316-B2A0F6AC5279 -name El_Aaiun -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::F08514B8-5D53-C765-6E79-9CB52854727F -name Conakry -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::2AC4BE85-F1A0-DB6B-58BB-C0224B066E9A -name Banjul -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::E45906DC-E5FE-3106-D466-C7A3361821B7 -name Lubumbashi -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::DD390439-B3CD-1D5D-AF51-FCE3CF44D82C -name Kampala -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::7215226C-369F-92A7-D87A-1718247220CF -name Windhoek -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::F5071E64-3C30-BA56-E641-96CD42F20E60 -name Cairo -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::B3A261EC-9ADD-1AC2-0044-8C75E8094F34 -name Algiers -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::26772658-CFED-7056-293E-3C435DE202DC -name Mbabane -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::EC55D206-57AF-0612-BFE9-03E5C8FB231C -name Ouagadougou -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::399E2C70-DD0A-462D-1B75-DF042E4AAEAD -name Freetown -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::C4A8FB8B-A122-42C7-F412-386D31AB7885 -name Luanda -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::6438FED2-3EDA-6E62-0A3F-EDBBDB23B005 -name Maputo -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::A2A95E2A-2C52-8976-3564-F5729D318E72 -name Accra -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::3E498C80-F13E-23DA-BACC-48B995FB1623 -name Sao_Tome -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::C5968CAF-BBA8-2E43-0DF0-CE0C26105362 -name Blantyre -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::72A8B85B-C6F9-8824-8CEE-0235F0019667 -name Bamako -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::FF1A4407-F3C1-9562-8323-6BD24C29D642 -name Monrovia -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::AA32DEF3-6C91-CFD6-0CE5-46F52A3A386F -name Addis_Ababa -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::C0B2A57C-2EE6-8938-108C-D5D24E0110F4 -name Harare -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::079293B1-5E7D-DC6F-7D47-69A3F09D373E -name Ceuta -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::162B8E06-D3E3-647B-992F-20777678FBB2 -name Abidjan -active 0 -parent E74A2FC5-CC37-B1B0-BBC4-70AB6BCD8B9A
+File ::32106072-567B-E5F2-2DE5-47DC266BF7C9 -name MST7MDT -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::EA5ACEC5-8C52-490F-12CE-78949C0E0C83 -name MET -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::B70BB3A5-3D7D-4A61-9CF0-D086709579FF -name PST8PDT -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E -type dir -name Etc -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::87D6BA8B-D8AF-8470-AD2F-6382EC7B18D0 -name GMT+9 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::8A91E609-DBC8-7C79-10D0-D49D5DAB5DFC -name GMT-6 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::86E424D6-7A18-0DDA-8807-97E9E29ED385 -name UTC -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::4D11653C-9E77-6BBE-5450-70B779A752FB -name GMT-14 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::ECC8D156-7534-A953-E8D9-AB77B51B4E7C -name GMT+8 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::4EB16FD9-85BE-66D3-4841-921C42F40A11 -name GMT+10 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::28264AD7-3459-E681-0F53-BBA1FE7F8E5E -name GMT+2 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::E1C3EB52-3531-3BB2-3D58-95D7E8DA0761 -name GMT -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::94DAA6C8-E096-4F42-C14C-AEE3B046225D -name GMT+12 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::1AE3E17A-A6CE-E1BE-768C-930B5E3CC8ED -name GMT-8 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::CAC8B43C-FBD1-2025-1F87-3FB84515A36E -name GMT+1 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::29BCDECC-F5BA-43BC-09AD-97CAA824ACCC -name GMT+4 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::3F606CD1-25CC-8D52-E0B6-EFEEC35CFBB3 -name GMT+3 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::7F40F239-4E2C-3E26-C2AD-E855802417D9 -name GMT-4 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::CB41CC5F-1320-C1F5-4385-D4A4F5307EEA -name GMT-7 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::00CF2E9A-0143-73BE-4328-26616A26BBE8 -name GMT-5 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::E55579FA-873E-67A7-40D5-F8DAAC8AEDB3 -name GMT-10 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::6AF9BBCA-5A85-580E-39B4-B11991BD4DCB -name GMT-12 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::C7A12F3A-53E0-2499-C2D2-7C2171510F14 -name GMT+6 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::CD701A58-E978-EFBE-774C-F79964F88815 -name GMT-11 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::3D0133AC-488B-F6C9-86F0-C016C402D2B7 -name GMT-2 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::3EEF8552-FB03-CE7E-16A5-811EDD4F211A -name GMT-9 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::61A50B40-3283-D16C-68B6-13D9284DFDE7 -name GMT+7 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::A135DC3C-B78A-A5A5-5784-E9994AC319FA -name UCT -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::46B704C0-7E22-BCE4-EAE7-992B9C21361B -name GMT+11 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::32086727-DE85-E36D-7AEF-6BA3F7F22B17 -name GMT+5 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::4BDC52F2-A545-7E03-DF95-207F0A20BB56 -name GMT-13 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::48AF5B87-AB3B-7727-27FC-E2C94929A2AB -name GMT-3 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::3F3A990D-924D-4202-84BD-A00CACF772FB -name GMT-1 -active 0 -parent C3EB0049-CEE2-B7F1-E87E-9CFE8EF8E60E
+File ::C9C8C96D-92B3-EB35-C9CE-07440993CCAD -type dir -name Indian -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::86E5D572-5A8C-88B1-B242-0D2BA0F21E7E -name Chagos -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::74F84316-27BA-4757-71EA-068D4A08E60B -name Mahe -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::9FA07AE4-86A4-EBFF-40C7-7409C854DFC4 -name Comoro -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::8465EE59-B560-DA7E-5589-BBD8E42A18B0 -name Mauritius -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::898FD4FD-4AE3-996A-3ABF-D43D400C738B -name Reunion -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::546DC758-E0BF-ACAA-FCFA-BDF1EB9AFC6B -name Maldives -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::0942F44E-54F2-834E-4518-29793922F61E -name Antananarivo -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::D966D3D4-C68F-1C0F-FA82-398B800315A6 -name Cocos -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::91859226-B8E6-A3BC-40D0-506F18B5E2EF -name Christmas -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::B3DECF8D-815B-2CAF-DBF7-D83522C3273A -name Mayotte -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::FBE2011F-D0E9-6804-0324-37DE2C91306D -name Kerguelen -active 0 -parent C9C8C96D-92B3-EB35-C9CE-07440993CCAD
+File ::50E95779-9170-BB68-F883-5127113F757A -name ZoneInfoMappings -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::7F99C751-C443-7558-2347-74907BD24CC0 -name EST5EDT -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::B06F5397-B1D5-51E9-BA00-AB79E95E381C -name WET -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::2B8AB895-8D07-ADE0-A8FD-B1CD7254ED14 -name MST -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::9FCC7E36-92F3-D595-77CA-4C78BD7F9449 -type dir -name Asia -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::52C04308-93F4-201C-2950-95A2DE160D96 -name Baku -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::3F955816-4B05-E7F1-272D-95F86BEDE97E -name Qatar -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::978EF0F1-595C-FD0D-133D-F2A0D3724334 -name Yerevan -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::C217D0FC-D03D-BBE8-972F-D78C3F4AB9E6 -name Nicosia -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::4E167E0B-BC51-72E3-EFDF-48A6E123DE58 -name Krasnoyarsk -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::933FE74E-16E7-AAAE-E7D8-AD86219733BA -name Ashgabat -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::8EADF349-21D6-E9B6-F285-86AE1E9D7693 -name Makassar -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::36A7E7F5-5381-695A-D798-DF181561F3E5 -name Singapore -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::81404C5F-3209-A7E1-3344-26B9686B95A7 -name Urumqi -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::FB489612-8477-CC6C-B306-05816819BA61 -name Choibalsan -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::B59DE1E3-CCAD-8078-6419-13FA77552C00 -name Almaty -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::BEEBC677-8A6A-DC92-B1B7-1EE66DC0C3AB -name Bangkok -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::F381014A-2928-C6AC-704C-F78E0F77073C -name Tashkent -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::9A294292-79E6-554A-BEFE-CC3DE8525BBD -name Riyadh -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::C13D8C70-8A37-62EB-CFF6-519AB93A5F9F -name Novosibirsk -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::332B67D1-AF50-B1BB-C77F-35FDC0E17D16 -name Riyadh89 -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::94EC975D-6F01-4988-3BCF-C1A75EAB8345 -name Macau -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::BF0022F1-33A0-ED49-DADF-F6B6B88A6AAC -name Gaza -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::F70DD6E4-4EED-6E28-92DC-E8F455F14F12 -name Harbin -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::ABE73D02-32BB-4F59-AD28-29763E05716F -name Aqtau -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::90EDBA43-2522-D026-4DE1-2AC05344E345 -name Damascus -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::FB51E78A-A0CA-D9D3-1F5A-278C54AE0D25 -name Novokuznetsk -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::01EC889A-E2CC-B578-EC80-A17A32B6DFC6 -name Dubai -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::A313EA26-D171-09CB-8014-DB665080DC64 -name Ulaanbaatar -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::046022C9-4788-64DF-647A-191E4F9A219F -name Kuala_Lumpur -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::067C89C5-D55B-B8AD-4C3C-5B2383921FED -name Qyzylorda -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::906F468B-8AD4-7D55-D827-CF507540317A -name Karachi -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::5CAF9D45-A5CE-7E35-43B0-B21313E9A46B -name Dushanbe -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::53709765-7EA9-FB12-5593-7F7DCDF67944 -name Sakhalin -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::E0212CC9-12A5-9D7B-13B9-C1B874D72F88 -name Vladivostok -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::13BF2E04-2380-8B38-6DD2-553C91578DB2 -name Yakutsk -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::BF17F8DE-7210-7346-304D-7CC5823F0367 -name Jakarta -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::1D1B51CD-7577-BE86-4924-F9D808AF1AC8 -name Aden -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::6F2F669C-1C41-B5E8-8758-C8ED1CED2828 -name Omsk -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::10062F51-6547-2697-C809-3F1020DF6B1E -name Yekaterinburg -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::C3C8A498-5DC7-206C-3025-E1FD4F3941A5 -name Kuching -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::8E434F95-24EE-FE51-03E1-F9539FF0F354 -name Irkutsk -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::51AF5279-5C77-D5E9-F38E-FF9F7BD4502F -name Jayapura -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::2222F8A0-65AD-6BE1-6866-F53FCED991AC -name Hovd -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::1212E1A4-ACAA-AC5D-BDEB-88A5982F5BD0 -name Taipei -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::F4CD1070-5959-889C-C85E-92D61FFE3943 -name Bishkek -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::4F49E218-6144-4D66-C30B-33062E00FE6F -name Chongqing -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::E9C1D292-7BB8-EDD0-955F-23B0A866881F -name Bahrain -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::41E75C2D-C77D-099B-C58A-03FA7E698EB8 -name Jerusalem -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::4377BDDB-E3F3-BC8A-7DC6-204E6E47790C -name Phnom_Penh -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::0ED82195-6F09-FA90-BCF3-715477FB4619 -name Samarkand -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::D6C5E6E3-D5EE-6F25-5F0B-B630A55A0819 -name Kathmandu -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::2FE5B958-6390-04AE-1352-C485723477F9 -name Kamchatka -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::E622E270-43FE-557C-6CFD-04C5B9DB03E4 -name Shanghai -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::CBF901B0-9EDA-AAD7-1E1D-FF0B6BA049EF -name Dhaka -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::F02A6473-D263-CE3E-8688-4CC37B2B591A -name Seoul -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::49287362-3FBC-E5EA-ED23-C788FA3AB9C8 -name Pyongyang -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::A9B9CFDC-72B4-143A-01D2-429947A9D88D -name Tehran -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::2B9E7771-47A8-F845-4964-532145E953DD -name Colombo -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::3AF2ECDF-A910-8B69-E445-BCF7080F039D -name Oral -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::2E73C437-9358-14F4-7292-38D57B713864 -name Vientiane -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::357793AF-563B-FC92-65FF-001FAFFE90BE -name Thimphu -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::51FD035C-57DB-96A3-5801-B8E079873BA4 -name Riyadh87 -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::379BA8A7-05B8-A320-7765-585A7E43FA2B -name Tokyo -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::DB33A406-2787-07CB-CC87-95B13E8151FD -name Aqtobe -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::B7FC2651-C8C3-1EB6-4E50-41E243115A4B -name Amman -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::C8C2DAFC-30B1-CC4E-C6C8-E5618F76F52C -name Beirut -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::68C6F803-B23C-0FD8-FA85-47C5A4299C6E -name Manila -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::46D5FF86-1566-00B1-2A59-3A76B3C5329C -name Riyadh88 -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::E5ABAF3E-0C5D-FBA4-288A-38054DC57F1A -name Anadyr -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::923B2DD1-AA35-B968-34D3-B198AFFB47B4 -name Dili -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::62A42CD6-CCB1-6A75-297D-8F88713376BD -name Kabul -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::341FB864-714D-616E-87F8-46E16BAED864 -name Muscat -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::ED432E8A-8E5E-2FEC-83C4-0C60A9732D44 -name Brunei -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::6197D777-5EBC-F74D-E3AA-5888DBD4CF21 -name Ho_Chi_Minh -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::1B3FE9B6-245F-D303-97E2-DEEE86A306A5 -name Pontianak -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::4C3476BE-868B-3785-F3C2-30B80B96791E -name Kashgar -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::47035FC6-A1FB-576A-1631-29D63129210D -name Kolkata -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::AB0BE63E-041E-E30B-C738-5AAF09DD694D -name Rangoon -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::6EDF33A8-D8F6-3ADF-1FB1-8E37C39632D6 -name Tbilisi -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::62F92208-F5DD-97FA-EADB-F09AFCB6F1D3 -name Kuwait -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::1F66D794-52D7-68A3-99D9-F5BCAA1FAA06 -name Hong_Kong -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::0E6C5C47-3792-458A-0770-698BE4D5869C -name Baghdad -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::6A34FE77-8D99-D6E4-5C39-8F8EE5396E44 -name Magadan -active 0 -parent 9FCC7E36-92F3-D595-77CA-4C78BD7F9449
+File ::6FE85CFA-7541-A603-5574-142D26DB9D20 -type dir -name Australia -active 0 -parent A6D0AE13-3F65-0984-4863-91F620154BDC
+File ::2E4596F8-6669-271E-4C94-F9A456FF499D -name Sydney -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::69E5BA21-DF04-4272-1D66-73AA613D4EE6 -name Lindeman -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::CB328959-C029-E0B5-2DB4-17DC03E80CB1 -name Perth -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::50E42D30-F856-A288-537D-88503FD4F8BF -name Adelaide -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::147F30F2-D3BE-A980-39E5-E2AD7700EF61 -name Melbourne -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::0C19FA12-143C-502D-3509-CDDC6C451F48 -name Currie -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::4930AFED-62EF-102A-D95F-3C36F68E12A6 -name Darwin -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::4F48AAA0-5989-D957-B5D3-CA1D85C56056 -name Eucla -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::D0C7626E-2C83-5677-795F-34DBA5B2655A -name Broken_Hill -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::548D97CE-3940-8950-EA00-AEAAEF4F1071 -name Lord_Howe -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::2449D6CB-485D-9C3C-69C2-8126598734E4 -name Brisbane -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::2F5E662C-91B1-4205-F84A-79FA5D3381BB -name Hobart -active 0 -parent 6FE85CFA-7541-A603-5574-142D26DB9D20
+File ::744C322F-D258-019C-170F-27595CF01AE6 -name plugin.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::338AC16D-C11E-F4E7-479B-1B68057C921B -type dir -name cmm -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::AA4984D9-46CA-7975-3C7E-73C0AFD76579 -name GRAY.pf -active 0 -parent 338AC16D-C11E-F4E7-479B-1B68057C921B
+File ::7D6E58BE-1D08-D7BD-B035-6E2112CB8670 -name sRGB.pf -active 0 -parent 338AC16D-C11E-F4E7-479B-1B68057C921B
+File ::BC1515EE-00B9-F36C-2959-60FBBF46B401 -name PYCC.pf -active 0 -parent 338AC16D-C11E-F4E7-479B-1B68057C921B
+File ::A6D8F2E6-6A87-9106-3B4A-80EA2A308B2E -name LINEAR_RGB.pf -active 0 -parent 338AC16D-C11E-F4E7-479B-1B68057C921B
+File ::397F7021-24D5-3C7B-A0E3-3DD49EB3CDFB -name CIEXYZ.pf -active 0 -parent 338AC16D-C11E-F4E7-479B-1B68057C921B
+File ::110AA916-FA45-7009-4C54-BCA65E1815C4 -name tzmappings -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::1972D31A-760A-3AFA-B07B-D8D51BB84698 -name javaws.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::2A4FCE1A-97DE-9C52-69BC-AC824513D349 -name currency.data -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::0914F36F-B6B0-BE14-8206-A04A34180BB0 -name javafx.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::91981EC8-3143-4281-00AC-4CF6B49F50F7 -name alt-rt.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::84370278-EB20-54FF-EC2F-D5B7C9663BC5 -name jfxrt.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::78DC41FF-C284-4CB7-B051-DE3E1977FDA2 -name jfr.jar -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::B5D6DCE0-991B-F167-BEC3-2DE345226F4F -type dir -name jfr -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::E8D35672-E514-DDB3-156F-7188C77AF94F -name profile.jfc -active 0 -parent B5D6DCE0-991B-F167-BEC3-2DE345226F4F
+File ::74FD6B2C-E148-84B5-7E7C-081844EB0194 -name default.jfc -active 0 -parent B5D6DCE0-991B-F167-BEC3-2DE345226F4F
+File ::82E45D52-2FA5-E6AA-E300-2337F9295612 -name accessibility.properties -active 0 -parent C9FDF1FA-29F1-B26D-574C-1BE75D11EAF6
+File ::171152C9-1BFD-20D4-FE6D-64698456B0FE -type dir -name bin -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::613210D9-016A-FFE2-F666-523F55B9F654 -name rmid.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::983F42D1-DFB0-F114-AA02-1C9954666A38 -name jdwp.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::EF8F6EE8-F6D5-A788-0D59-0E4DF5DBD212 -name java-rmi.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::C54DBC36-92FE-62FE-29C4-61A825C0F808 -name jli.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::5BE10090-20EE-C39C-6021-9A402EB215BF -name jpioji.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::243C1B05-EFCC-E720-D8DC-6C9FBB1D23EF -name servertool.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::DEFE6080-6E7F-5A10-DE1D-8D5DAAA93C07 -name java_crw_demo.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::787384EE-BC6F-A45C-A62B-BCF3989EE05D -name javacpl.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::D9F0C450-AD14-582C-ED7A-DE2500E672B7 -name fontmanager.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::A3B0B962-95DC-5D32-4617-6AF4F607F835 -name jqs.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::CA766AAE-FAA5-EACC-62BD-01349FD22433 -name zip.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::529BBBD1-80CB-3581-E239-52D480F578FC -name unpack200.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::164119D2-D123-390E-8763-A43FE56DD9A3 -type dir -name client -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::16490BFE-5830-A05A-84B3-8C190A4BDA04 -name classes.jsa -active 0 -parent 164119D2-D123-390E-8763-A43FE56DD9A3
+File ::1057DA56-682F-7B6E-565D-3918E369E2AD -name jvm.dll -active 0 -parent 164119D2-D123-390E-8763-A43FE56DD9A3
+File ::641E5CF7-0D7A-36CB-F94A-B9B452DAB902 -name Xusage.txt -active 0 -parent 164119D2-D123-390E-8763-A43FE56DD9A3
+File ::A2E9BF1B-D820-D878-350D-FD9F9C3BA044 -name pack200.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::E8DD0AA9-2062-2A08-81BB-65A450C5F675 -name instrument.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::B5CAF84D-7A09-0A86-9315-AA6021955AE9 -name axbridge.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::BEFEACFD-5495-C39E-9A9A-A28D3EF36A54 -name jsoundds.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::3F6A081F-0ADD-07D8-1BA9-05BB5AEB56D4 -name ssv.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::8B5F2D75-E957-B5C9-1C3C-710D9727C6BA -name mlib_image.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::40002299-2ED4-6DAC-B03A-2F024E0C37B4 -name ktab.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::DC764DE7-F0F3-4D52-8F61-9BCACACBE171 -name jp2native.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::83B05D72-120E-F66E-4C6C-1D2293FAE922 -name rmiregistry.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::73CFDD4F-9E13-A329-3284-265E7A938D34 -name unpack.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::8A4E5553-647A-8E8C-A701-2CA3860E3A07 -name jp2launcher.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::C6C48867-B0E5-C02C-174D-B9EB36D03BC0 -name j2pkcs11.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::2699E19E-0A40-0AA6-5444-C6B2423AB376 -name net.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::A827CDE9-F67C-96DD-B146-08780948A7B2 -name verify.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::B6C038F2-05BE-5BB3-02E8-00B67317E7B5 -name jp2iexp.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::AFE6DE23-BB6C-30C9-372E-B804837C0760 -name awt.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::52BF67BF-0C45-B92A-B443-610675489B55 -name javaw.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::90EE0B41-29EF-693D-7688-50B792980173 -name java.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::D1DD0798-0311-116C-7F44-0CCD0538DD97 -name jpeg.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::C44BB05C-F5F0-CB87-6866-A7F98313B8F7 -name jawt.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::38B2C398-A7B2-2337-F5B6-A10C3049D424 -name klist.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::0198B508-9B5C-A806-5E52-73DD54579CB4 -name ssvagent.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::439C04ED-3B7F-49A8-AC65-EEE70EE59C14 -name jpinscp.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::928BB6E6-C3C0-7E5F-3A80-C1237EE2C5A9 -name JdbcOdbc.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::1D64816A-BA18-56BA-85F6-5102DD2F0B4E -name javaws.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::0038C8E0-044D-F996-85F6-49D4BFF0B10A -name j2pcsc.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::72D64C2B-ADE9-6DB7-B2A3-AFB18B9EC345 -name jpiexp.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::444CBE71-3A6E-3EF1-0E35-333B2D2E0054 -name jp2ssv.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::1745D8A3-E5D8-3B99-48A6-7316A91CFE31 -name management.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::250E375F-863F-6D86-42F2-3E9F54CCCF7F -name dcpr.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::F41DE867-A9F6-7AAE-4139-4FC8AA158A9B -name javacpl.cpl -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::68231095-0FE6-B125-7EF8-BC7859A49AC9 -name jpicom.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::B1BDC074-400E-F9B5-BDD2-5F8BFF6CEA6A -name dt_shmem.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::6080FE59-3DC0-D791-1FF1-559450D7467B -name dt_socket.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::DFEC18CA-F853-D927-48CB-6FBAA5DDCCA1 -name nio.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::9CCE2F18-EEF4-C7E5-5B47-14AF2BE9C847 -name jsound.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::20449494-3570-A94D-9F7C-921C8B6D27B5 -name policytool.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::1AF6450D-85F7-DC37-7E82-E01DD5FF4E3D -name tnameserv.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::03FC1095-02BB-C462-1E35-8149273CB689 -name sunmscapi.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::B8A3E466-D0B4-349C-43E6-93F624CA394B -name orbd.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::45B729D5-C7F3-A23F-F870-1F6D6A4D74A5 -name npt.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::4AF9032A-D52B-8E29-16D2-594F9641E279 -name java.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::CB4237FF-DF86-221C-BEEE-B0CF408B3615 -name keytool.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::519C7D21-F399-B253-691F-6AB7DC80CB5F -name hprof.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::1406649A-DD7D-7F09-7A98-4A622CF6DCEC -name eula.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::48AE2E05-FA00-5321-D6B4-972042B6D7C0 -name wsdetect.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::E9EAE888-1EAF-52E4-D105-39E1B6876A27 -name npoji610.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::5F5F8E50-C8FC-F1B8-CB9B-161DD3E2F382 -name kinit.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::4D6A22A9-D165-6686-A319-29B0EAE86D24 -name deploy.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::03A5829B-3A26-A8A0-E5DD-53AC0BD52158 -name w2k_lsa_auth.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::B9C49B58-3375-63F2-5086-879498C8CABA -name splashscreen.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::580B42BD-2282-DE1E-195F-7CCC0CF01797 -name jaas_nt.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::0189AA82-927C-0F44-B833-240064661600 -name jpishare.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::A87BF3CB-9A94-BAC5-8E29-1F23450FE3E2 -type dir -name dtplugin -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::754E577E-48B5-DB20-0719-EC78F16A8360 -name npdeployJava1.dll -active 0 -parent A87BF3CB-9A94-BAC5-8E29-1F23450FE3E2
+File ::FD231718-237C-490C-2D5D-81B1168E3D8F -name deployJava1.dll -active 0 -parent A87BF3CB-9A94-BAC5-8E29-1F23450FE3E2
+File ::8026CF91-7303-8E63-32F7-04A6859AB721 -name jfxwebkit.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::8D9B8476-BCBC-737D-94E6-87C7F68FB7F9 -name JavaAccessBridge.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::D5E42E73-B5E4-F87D-7FDB-F5A43F4154D0 -name installer.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::87403F2A-F86B-DF79-8464-8A698EC4CFF7 -name glass.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::95B207FF-98CA-3CC1-C57A-304C88F8234A -name libxslt.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::59D5889C-8541-9E8B-3B93-6C5E3F383084 -name fxplugins.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::B495B6FB-D712-AF9E-D054-9883C2CD2549 -name JAWTAccessBridge.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::CBC91365-3D2D-47DC-BC2C-572CA1F748B9 -name npjpi170_67.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::4763FC18-087D-2A84-CB75-7283EE1B92A4 -name sunec.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::6FFE3E1C-7E41-BDC2-D630-3A9B06811D41 -name jfxmedia.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::F947BC89-30F2-E750-C866-52DBC762A6AD -name msvcr100.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::26672665-90AB-641E-94E1-A4CDF59A6078 -name gstreamer-lite.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::2C6E7202-8711-B61B-392D-64BB2AF18539 -name jfr.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::E827ABF2-C825-10C3-992D-A06452100AA7 -name kcms.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::527210B7-01D4-DDDB-04FF-755F67BEFE37 -name javafx-iio.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::AFB30DB0-B734-746B-DE3C-4E214E78A41C -name libxml2.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::EFDCE990-1F3F-CF0B-A48B-F7F2704C3428 -name glib-lite.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::1392DBAA-7C6B-93D9-64DB-63F08FB15250 -name javafx-font.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::D46EE8F2-4A27-521A-931E-F565C170851F -name WindowsAccessBridge.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::DDBF88C1-CA82-E75E-E186-257489FB6299 -name jsdt.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::09EC6F0C-FD9F-0A7E-D802-815D0460E1FD -name t2k.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::7DFBE45C-5BB9-BAC1-29FD-6E1416F531EF -name jabswitch.exe -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::9F3EAE25-6614-8B71-84D7-4AF63346E1E3 -name decora-sse.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::48D3C377-877E-E5B3-95DB-20DC0DE4AA4D -type dir -name plugin2 -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::B8FA96CA-BD4E-0BA2-7E6A-4888A0428BF6 -name npjp2.dll -active 0 -parent 48D3C377-877E-E5B3-95DB-20DC0DE4AA4D
+File ::8E74B93F-54BE-F12F-CBA7-EE8F64AEF30C -name msvcr100.dll -active 0 -parent 48D3C377-877E-E5B3-95DB-20DC0DE4AA4D
+File ::8B869D35-3E11-76D5-79B8-7B5522E2947F -name prism-d3d.dll -active 0 -parent 171152C9-1BFD-20D4-FE6D-64698456B0FE
+File ::F23DD4D5-CA75-08A7-2572-FE246E61A75F -name COPYRIGHT -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::CDDE634B-2BEB-2539-DF99-17CD6B4D1087 -name README.txt -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::3CB137C3-73D9-124A-77B1-6B5908683CB0 -name LICENSE -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::48ED4203-5193-4496-79B8-70ED2EA729D2 -name release -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::374BE140-9B5C-515A-5DFF-62280719982F -name THIRDPARTYLICENSEREADME-JAVAFX.txt -active 0 -parent 7184801B-49F8-2F32-50A4-DDEEAE075040
+File ::75EB55D0-52B6-E16C-8832-32585B0E6AAE -type dir -name org.gvsig.datalocator.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::CC111550-C89F-655D-059C-F5A382DD8BCA -type dir -name org.gvsig.csv.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::B47682D2-A8C6-0ADD-6802-23714D5B0AA6 -type dir -name org.gvsig.geometrymeasurement.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::B6A58784-6BBC-C0BA-B282-6191FC780DAE -type dir -name org.gvsig.shp.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::384C4B65-E6F6-80DC-0479-C9841E0D0A8A -type dir -name org.gvsig.symbology.app.importsymbols -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::F97B4045-D98F-C6C2-8A1A-8C6DD93B28B6 -type dir -name org.gvsig.labeling.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::9F64F218-2F62-76CC-5525-20234FFF00D0 -type dir -name org.gvsig.daltransform.app.join -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::5F24E525-5CCA-01BF-C288-9800835A032B -type dir -name org.gvsig.annotation.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::A20F272D-DC0C-3A22-9EF8-47C99B0331AF -type dir -name org.gvsig.newlayer.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::178E450E-5604-3DE8-5888-775F4D7BD7A1 -type dir -name org.gvsig.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::1D41990B-8478-E7F9-B9A7-6844B9EC7427 -type dir -name org.gvsig.selectiontools.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::CA3740C0-2B40-BA49-8820-CFC12AD95600 -type dir -name org.gvsig.projection.app.proj4j -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::39538985-F20C-199C-9E66-2AEF47B943B1 -type dir -name org.gvsig.app.document.table.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::0F7DF260-F5D3-5643-E185-8D4CA0B3DBFF -type dir -name org.gvsig.centerviewpoint.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::DDB2A0C2-919C-A333-7299-9460612C2A84 -type dir -name org.gvsig.editing.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::1D864A57-3F2C-171F-190F-7FB92D6C9FED -type dir -name org.gvsig.geodb.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::4F332FA2-4B5E-3AB3-5CF0-859AA27D6686 -type dir -name org.gvsig.daltransform.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::965043C4-8925-047A-4B7A-B0E336CA5F5A -type dir -name org.gvsig.exportto.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::AB6BF2FB-2135-8C33-B82F-1B9753F29E31 -type dir -name org.gvsig.i18n.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::261F80B2-4E2B-B88E-11D6-A1F88202DB14 -type dir -name org.gvsig.daltransform.app.eventtheme -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::6E17C734-8672-89C2-FB1E-AC99999FAB9F -type dir -name org.gvsig.geometry.app.generalpath -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::6995B741-C36D-BDA6-0D14-A0A7CA066ECE -type dir -name org.gvsig.symbology.app.symbolinstaller -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::CF9F7012-597F-7DF2-A74E-0A77AFAF64DA -name README.txt -parent 329EE615-3EB9-C25D-0DC9-73C46F49CD32
+File ::B9360381-0809-6F6E-1853-A77EEED4D00C -type dir -name install -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::4EAF94C7-6494-4DEA-3A6A-B3F605D352C5 -type dir -name lib -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::C3151DAB-86D7-433C-517C-8D7BD98A18BB -name README.txt -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::64014BF7-5469-B7CA-BD8D-52EEC3C40F7F -type dir -name theme -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::C2ED1D58-D9B3-8975-ECCB-CE7B066E5AE4 -name splash.png -parent 64014BF7-5469-B7CA-BD8D-52EEC3C40F7F
+File ::7C145DA5-9593-2F79-FB63-EAF8180D4855 -name gvsig-icon16x16.png -parent 64014BF7-5469-B7CA-BD8D-52EEC3C40F7F
+File ::0A0BD649-B131-EB8A-A74C-6C29BA1F2277 -name gvsig-proj-black-wallpaper.png -parent 64014BF7-5469-B7CA-BD8D-52EEC3C40F7F
+File ::44548BE2-DAFD-57F4-5E80-FB21257C445F -name andami-theme.xml -parent 64014BF7-5469-B7CA-BD8D-52EEC3C40F7F
+File ::92150CE7-DD00-0844-5FD1-B8B337253DD4 -type dir -name native -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::799599F5-D421-D12A-7D01-667329852BC6 -name README.txt -parent 92150CE7-DD00-0844-5FD1-B8B337253DD4
+File ::8F7AD1A2-ECEE-7A48-2804-A0E220CE8FDB -type dir -name i18n -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::B9961917-8C3A-74BB-60D4-7FF2BFF5ECEC -name README.txt -parent 8F7AD1A2-ECEE-7A48-2804-A0E220CE8FDB
+File ::78A9AD8C-761A-029C-1D21-FC7836DDE726 -name locale.config -active 0 -parent 8F7AD1A2-ECEE-7A48-2804-A0E220CE8FDB
+File ::2AEE4B2D-6B55-61AF-694F-F4C0CC6F9A10 -type dir -name andami -active 0 -parent 8F7AD1A2-ECEE-7A48-2804-A0E220CE8FDB
+File ::E548085E-94D5-4C1E-8298-F9652E45903D -name gvsig-package-installer.l4j.ini -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::9C88712A-6C96-A9C4-D005-AD953C550041 -name gvsig-icon16x16.png -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::299FB176-BE0C-22A4-0F74-F5B0177B3894 -name gvsig-icon22x22.png -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::419118D9-3B0D-66A6-3033-754B8332E2A9 -name gvsig-icon48x48.png -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::C5EEE177-C7E1-468E-AA96-B7CDD37E43DE -type dir -name icon-theme -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::5BB4C88F-68D0-5980-CC83-120EE727E581 -name README.txt -parent C5EEE177-C7E1-468E-AA96-B7CDD37E43DE
+File ::DE328C09-E074-4B1C-ACA1-F7369E7E933C -type dir -name update -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::D84F9EFC-9C35-158E-C4F5-11742ABCFBF3 -name README.txt -parent DE328C09-E074-4B1C-ACA1-F7369E7E933C
+File ::1C91D890-BF64-43B5-A389-6A0EA26E66E6 -name package.info -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::920A2DC3-9BB0-8720-754E-1857ED435086 -name gvsig-desktop-devel.exe -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::3EEB1B48-B37F-FC3C-5937-0EFC1CBA92DA -name gvsig-package-installer.exe -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::9609A804-9C2D-6AEC-717F-AAC3E1AA7E07 -name gvsig-desktop.exe -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::CBA4E996-D8AB-1104-461B-8FA1282725BE -name gvsig-desktop.cmd -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::FA87774F-05D3-D642-CAEA-A35C6D17C4B4 -name gvsig-desktop-devel.xml -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::C62AC68B-F661-54BD-D0B3-DA080589B4E5 -name gvsig-desktop.xml -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::EDE24806-62F7-718E-272A-037A740D1CC9 -name gvsig-package-installer.xml -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::A885AB3F-7B17-86E1-9129-64919AEEE0A9 -type dir -name tools -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::BADF829B-2E7E-FD6D-0F09-EBEA3DED2494 -name busybox.exe -active 0 -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::7E6D6B68-D402-04AF-B428-1C1AC23BA973 -name gvsig-desktop-portable.exe -active 0 -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::CCDA2D0F-3924-9842-1CCD-2E29A270F2C3 -name check.sh -active 0 -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::AB501B79-DC2F-0BB2-12E1-C2AD8F02178B -name check.cmd -active 0 -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::1634718B-D75F-24C1-AB51-C326CF759051 -name gvsig-desktop-portable.xml -active 0 -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::2705CC5E-8ADD-AD2B-C49A-FDC5E1B2AF26 -name gvSIG.config -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::F06E6777-BB9A-F5C4-ED44-0E6A0561E4AD -name make-portable -permissions 00775 -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::73F74753-4F74-7F6E-462D-CF43BEC2DBC4 -name check.sh -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::0608E12A-A482-8D0A-030F-E5920619674A -name check.cmd -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+FileGroup ::3FCCA384-2783-D981-2506-3A9F5DBE3E9B -setup Install -active Yes -platforms {Linux-x86 Linux-x86_64 TarArchive} -name {Linux i386} -parent FileGroups
+File ::F354386B-F812-1B20-D9C2-B49AD74BCD22 -type dir -directory <%InstallDir%> -name /home/cordin/projects/gvsig/svn/gvSIG-2.0-build/build/product -location <%BaseDir%> -parent 3FCCA384-2783-D981-2506-3A9F5DBE3E9B
+File ::06A12396-76B5-A686-A109-DE0A80C0AE9F -name gvsig-desktop.l4j.ini -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::08919C96-402C-92A9-9AEB-46E704478BDE -name gvSIG.ico -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::D79DAF68-0F8F-18E5-FF10-5EB6C385F294 -name gvSIG.sh -permissions 00775 -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::3EB35170-C715-4B01-3600-A1AE202B5006 -name LEEME.txt -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::EE2EAEEE-F849-D14D-B1A9-1266AB078D22 -name LICENSE.txt -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::44BD53EC-1734-96FB-2CE8-657CDE04C590 -name log4j.properties -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::4820F52C-CB0B-1516-27A3-CE7EB1477D55 -name README.txt -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::13FEF9EE-75A0-7383-FA90-7DC20AB3DDB2 -type dir -name gvSIG -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F -type dir -name extensiones -active 0 -parent 13FEF9EE-75A0-7383-FA90-7DC20AB3DDB2
+File ::8D48FD4B-021C-EA05-D393-D5C45CF9278C -type dir -name org.gvsig.installer.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::03657ED9-F797-D87B-F059-B4D70B6EBCFF -type dir -name org.gvsig.coreplugin.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::161D527C-3D26-B7EB-15AB-7FE965D07C17 -type dir -name jre_7_windows_i586 -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::29716E5A-9B70-63A8-1CEA-B34D126E83B2 -name package.info -active 0 -parent 161D527C-3D26-B7EB-15AB-7FE965D07C17
+File ::3C74DEC2-4CC9-C525-745B-724E8FF3A8F3 -type dir -name jre -active 0 -parent 161D527C-3D26-B7EB-15AB-7FE965D07C17
+File ::C79BFA77-CCD0-6505-F996-2C5200A34478 -name Welcome.html -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::E477B7D4-BF00-85FF-E82C-0DE9598BC7B0 -name THIRDPARTYLICENSEREADME.txt -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::8BE4524B-0FCE-6E16-5B9A-1B57E37AC45B -type dir -name lib -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::AD57FF0B-51BD-9183-8334-DF72288D92B7 -type dir -name bin -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::58C3C301-9ED9-FF28-71D0-9A90831B7454 -name COPYRIGHT -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::362CF682-C163-6BAD-E322-D5FA44694313 -name README.txt -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::407F7C81-090A-0C1D-253B-F26E9E01CD06 -name release -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::80582230-9659-F227-5B57-23F17A13E9C3 -name THIRDPARTYLICENSEREADME-JAVAFX.txt -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::C7E8BE4B-D51F-5C67-47D9-465F0A7FCCD2 -name LICENSE -parent 3C74DEC2-4CC9-C525-745B-724E8FF3A8F3
+File ::8C9BBE8B-7AC9-192B-F510-88D8C64A58C9 -type dir -name org.gvsig.datalocator.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::4E224B4C-B863-1D77-225A-E290566058CD -type dir -name org.gvsig.csv.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::077EFF17-28B9-DFFE-61C3-1FA3011D6898 -type dir -name org.gvsig.geometrymeasurement.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::CD0635A7-339C-C980-2D6B-6CBEE5C67E39 -type dir -name org.gvsig.shp.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::3E17031A-2A96-FD5D-19DA-6A8D47FD95B1 -type dir -name org.gvsig.symbology.app.importsymbols -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::6AF11FA8-249D-2090-DA6A-316E497CB88E -type dir -name org.gvsig.labeling.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::B80988A2-097A-2FDC-8CD3-10EFCCEBA669 -type dir -name org.gvsig.daltransform.app.join -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::FA281315-AEC9-D1CD-321F-313433D36BF7 -type dir -name org.gvsig.annotation.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::72475018-109D-212E-8285-695682AAAA89 -type dir -name org.gvsig.newlayer.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::9FC0035E-BF69-243C-8F9F-82C7704AF19D -type dir -name org.gvsig.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::B77EA123-950D-F709-CD71-BCC3CD27B2C0 -type dir -name org.gvsig.selectiontools.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::F11B934F-8AF0-F8AA-A02B-403921A7C6B1 -type dir -name org.gvsig.projection.app.proj4j -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::D0D7E49B-0C70-0631-DC76-C9FB53B0A0BF -type dir -name org.gvsig.app.document.table.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::FF98B2E3-5341-D6CD-3761-F825A02F3FD5 -type dir -name org.gvsig.centerviewpoint.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::D0759ED0-A57D-E277-5228-9503828F36E0 -type dir -name org.gvsig.editing.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::A37FC5C8-93BF-EEC7-3B92-EC1E600DC563 -type dir -name org.gvsig.geodb.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::C4612B3C-6454-2BD2-3DAA-F7A329CD095B -type dir -name org.gvsig.daltransform.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::C5116C37-6872-C504-2793-F7B55049B514 -type dir -name org.gvsig.exportto.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::FC287F61-32AA-9717-7C87-FDCB39C43F62 -type dir -name org.gvsig.i18n.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::5864C740-6673-8A1D-890C-DF47875306BC -type dir -name org.gvsig.daltransform.app.eventtheme -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::56DB328A-87FC-2374-888E-97780643BE61 -type dir -name org.gvsig.geometry.app.generalpath -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::AB264029-0DFC-2C1B-70E6-548BADC87440 -type dir -name org.gvsig.symbology.app.symbolinstaller -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::EC5EF68D-736C-F1D2-AEBE-09BE14B909CC -name README.txt -parent 13FEF9EE-75A0-7383-FA90-7DC20AB3DDB2
+File ::F3BD5F2A-36FA-C51F-A562-D23D588A4125 -type dir -name install -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::71FE022C-AFD3-41ED-B197-A54E20D0F5C6 -type dir -name lib -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::2251ECA6-E3FC-CB1E-2469-616EC05B3C7A -name README.txt -parent 71FE022C-AFD3-41ED-B197-A54E20D0F5C6
+File ::1CEAB512-CBD0-46F6-78B5-7CB16F3AFEC1 -type dir -name theme -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::EF62AE7C-670E-088C-117D-24C47BEB7E08 -name andami-theme.xml -active 0 -parent 1CEAB512-CBD0-46F6-78B5-7CB16F3AFEC1
+File ::BD0770F7-74CB-0B5C-362B-3282E5609D59 -name icon.png -active 0 -parent 1CEAB512-CBD0-46F6-78B5-7CB16F3AFEC1
+File ::4FAC2C36-45B0-DD01-51D5-E5DF5632D758 -name README.txt -active 0 -parent 1CEAB512-CBD0-46F6-78B5-7CB16F3AFEC1
+File ::E87DE68A-7840-4E95-61C5-54CBDBAA49E8 -name splash.png -active 0 -parent 1CEAB512-CBD0-46F6-78B5-7CB16F3AFEC1
+File ::79A462FD-2F8E-476E-96DB-81A63921302F -name gvsig-icon16x16.png -active 0 -parent 1CEAB512-CBD0-46F6-78B5-7CB16F3AFEC1
+File ::9C43A36A-5B07-96CB-32E0-D577281707FF -name gvsig-proj-black-wallpaper.png -active 0 -parent 1CEAB512-CBD0-46F6-78B5-7CB16F3AFEC1
+File ::375EF5E0-D7F9-A578-335D-8D4452161FF8 -type dir -name native -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::DDBA8AEA-6F60-088A-1801-104222E4437E -name README.txt -parent 375EF5E0-D7F9-A578-335D-8D4452161FF8
+File ::E2171CFF-ECF6-2285-6135-888B7AA9D0C7 -type dir -name i18n -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::7D80084E-0A3E-9CF8-0954-155FE40411E6 -name README.txt -active 0 -parent E2171CFF-ECF6-2285-6135-888B7AA9D0C7
+File ::9770E67A-AC2E-45D7-95AD-D14705CF0053 -name gvsig-package-installer.l4j.ini -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::4C09C3EA-57CE-7501-8366-82C39E5F1F81 -name gvsig-icon16x16.png -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::721BBE08-6004-07FA-EE3B-B4C6675E4B71 -name gvsig-icon22x22.png -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::E2BD255D-372D-F322-5CD2-EEF52D00A7B1 -name gvsig-icon48x48.png -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::8471F4F1-6F22-494F-8327-7C2E5E0BEBDD -type dir -name icon-theme -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::008BC2BD-6CD6-BF52-7092-E26033FA0B89 -name splash.png -active 0 -parent 8471F4F1-6F22-494F-8327-7C2E5E0BEBDD
+File ::789693C7-7E1B-12EC-31C4-44CE380DEBEB -name gvsig-icon16x16.png -active 0 -parent 8471F4F1-6F22-494F-8327-7C2E5E0BEBDD
+File ::5482130A-7299-2734-A906-7EEACCFE2AFF -name gvsig-proj-black-wallpaper.png -active 0 -parent 8471F4F1-6F22-494F-8327-7C2E5E0BEBDD
+File ::97C0F080-1B71-C849-8E97-A3D64F66CF0B -name andami-theme.xml -active 0 -parent 8471F4F1-6F22-494F-8327-7C2E5E0BEBDD
+File ::D67BE6C7-008B-6E3E-A363-943FD4A97585 -name README.txt -active 0 -parent 8471F4F1-6F22-494F-8327-7C2E5E0BEBDD
+File ::FD8F3E0F-55F1-4B68-8AF2-B5FA493C8F12 -type dir -name update -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::F3B73DA0-45AF-3A1B-D2C6-2296A06987FB -name README.txt -parent FD8F3E0F-55F1-4B68-8AF2-B5FA493C8F12
+File ::44CF1F29-0C60-6089-4212-114E8CABCD2A -name package.info -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::7233770A-6189-7D52-3EF5-FCD51A9425FA -name gvsig-desktop-devel.exe -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::44504384-02AD-6C9E-AB3C-B6C3EB1F4A54 -name gvsig-package-installer.exe -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::BB9A8F8E-250A-73F9-D50C-98330C7B8BC6 -name gvsig-desktop.exe -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::738AB05F-9D4E-212E-850E-49E9B887BA62 -name gvsig-desktop.cmd -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::EE9703DC-3D4A-8349-8AAC-D4AB11D34806 -name gvsig-desktop-devel.xml -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::8384DF68-F81B-2B4C-0D75-4E829FFD4643 -name gvsig-desktop.xml -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::E2FE9ABC-7A77-47FC-ADE7-134EB73221B4 -name gvsig-package-installer.xml -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::716ECE7B-80E1-1A81-17AD-C1399ED43DC6 -type dir -name tools -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::EDE95166-0AAA-91FD-5B41-EC9CD03F0822 -name busybox.exe -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::C0582093-8BC3-A8F7-6E9E-FFC0692D0CD2 -name gvsig-desktop-portable.exe -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::3C5C68B3-1488-0D12-542F-EC1DEB53B901 -name check.sh -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::F7751223-99C3-3C60-A6FF-AE32D44938F8 -name check.cmd -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::0684D2C6-D31B-B8B7-06DA-8EB4DB825E07 -name gvsig-desktop-portable.xml -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::34FA4356-1331-D3A3-5288-B1C217C8B428 -name gvSIG.config -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::F6B7D050-76B3-12EB-CE0D-FB9B0FED9DC5 -name make-portable -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::D4C5C31D-05F2-2CBF-651F-70DA3B4705B9 -name check.sh -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::BDAF1BB1-5BD4-393D-9182-03D4A3FA7446 -name check.cmd -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+FileGroup ::F3B4EEE1-118B-7F0B-FC8A-1BD5B7F8AD6D -setup Install -active Yes -platforms {Windows ZipArchive} -name {Windows i386} -parent FileGroups
+File ::D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249 -type dir -directory <%InstallDir%> -name /home/cordin/projects/gvsig/svn/gvSIG-2.0-build/build/product -location <%BaseDir%> -parent F3B4EEE1-118B-7F0B-FC8A-1BD5B7F8AD6D
+File ::7D31F82A-C84F-AFD1-DF94-935A793FF99C -name gvsig-desktop.exe -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::4DB1A373-B221-4228-6B16-40C4AF8B026A -name gvsig-desktop.l4j.ini -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::2BBD2461-4548-A42E-DFC4-B401A7E7BD54 -name gvsig-package-installer.exe -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::301DFD21-F110-D4B9-96DD-6D58809F8540 -name gvSIG.ico -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::A874A104-0EE3-ABA8-23E8-7515C42F0DF1 -name gvSIG.sh -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::9D39DD15-4484-75D6-B80F-523C6A1C7E6C -name LEEME.txt -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::299066F4-0E6F-B97F-163E-8089019FA60F -name LICENSE.txt -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::D959BB56-8DC5-839C-C60D-DAF034903C53 -name log4j.properties -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::20517CDB-AE20-9E16-F37B-7D89759BC0E1 -name README.txt -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::4B9EA578-1C2D-ACD2-BC1C-8537E51FB3DF -type dir -name gvSIG -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::3A891057-34B6-C1A7-E1DD-EB236C4810A8 -type dir -name extensiones -parent 4B9EA578-1C2D-ACD2-BC1C-8537E51FB3DF
+File ::31BCAEC4-EE5F-462A-AB02-66F081AE9BE1 -type dir -name jre_7_windows_i586 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::68D571B3-9534-7606-AC48-48A581904FED -type dir -name org.gvsig.coreplugin.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::656D1CB8-F0F6-5BFC-3BAE-08F97B2015FB -name config.xml -parent 68D571B3-9534-7606-AC48-48A581904FED
+File ::CBEEAEE7-06A0-EEFA-38AE-D5233CBE857D -name package.info -parent 68D571B3-9534-7606-AC48-48A581904FED
+File ::4EEF47AD-39AB-FD8C-C3DF-7675C61ACDDC -type dir -name about -parent 68D571B3-9534-7606-AC48-48A581904FED
+File ::175FF7E8-B1AD-58DD-DE5B-88877A83DEDE -type dir -name i18n -parent 68D571B3-9534-7606-AC48-48A581904FED
+File ::BEDCA455-763C-36EA-1E54-0FD80FB4475F -name text.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::3D38BDD9-9555-1D79-AE06-71DBAC625341 -name text_ca.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::0E41B97E-5D73-0E64-1525-85E949400A1C -name text_cs.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::171E8476-7CE7-4987-9C78-DDC82F4DD91D -name text_de.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::F464E46E-166D-6EF8-C59D-2A97B60BA51F -name text_en.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::093C337D-9FC8-32CE-2970-4145263875BE -name text_eu.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::C0B95484-F840-8C17-901D-7BBBEA3757DB -name text_fr.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::5FD1C584-E565-9060-F2BF-B7B5A96C9D6B -name text_gl.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::88CEC938-4C88-FC52-9184-B4FCC830ABB5 -name text_it.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::E8B9004E-F3FD-F24A-AEF6-3CD622D10928 -name text_pt.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::466C12DA-C477-EDE6-1B20-0881F04DEC3D -name text_pt_br.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::3ADB2A79-FB53-5598-845E-B8D994C1FFF9 -name text_zh.properties -parent 175FF7E8-B1AD-58DD-DE5B-88877A83DEDE
+File ::AF31B92E-37D0-B898-D1A7-729F24142ABD -type dir -name images -parent 68D571B3-9534-7606-AC48-48A581904FED
+File ::FC50CA01-A91F-BC45-2936-9296CF79B165 -name babel.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::D79CF204-D174-6311-2ED1-AFAB017E50F6 -name bonobo-component-browser.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::9E10CEF5-8961-1C76-83B3-86904CCE7632 -name browser.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::6D203A2F-FAAF-EE12-40FE-F037411D78E6 -name cascada.gif -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::E9A1198A-483E-38B6-6272-705081B9ADCF -name config.jpg -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::CE640877-4F28-0F8E-A078-94C22B9CF7BC -name config.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::6FED6341-6742-7E62-51B2-DECFBFC71C1D -name console.jpg -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::10C11A19-30A2-59F3-BEF7-92529B0D530F -name console.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::FE6D3F0B-689B-F56C-CF8E-FCB2B249536D -name emblem-work.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::3AB77CCF-E562-F63A-0977-8F1F99C3B773 -name enabled.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::B59CC856-A294-F19B-D2CB-1285B5017A1F -name file-manager.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::CBB0BEE3-8898-BD63-9318-AE0D822BC4AE -name folder.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::C494F853-DCAF-3FE8-240C-34156AD775C0 -name gnome-settings-theme.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::B5570BB7-28EA-5C5C-7884-0E209FBA847B -name kde-network-offline.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::EA552EA4-76BE-EEFF-D412-EAE036591C37 -name kde-network-online.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::C9E90FFE-82D2-397E-E0EA-7CFAA06748EC -name network.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::EA02F94E-E494-E27E-316C-F2F6007C634E -name resolution.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::0FBA5581-8FEF-EFF9-879A-100E956E4031 -name shield.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::8229CA28-0A00-0B03-ED65-91A900840BD2 -name stop.png -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::590D1A97-A8D8-E236-63B4-44C2249AE15C -name tile.gif -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::5766002A-F528-8BB4-4A48-B0460DEB85A4 -type dir -name action -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::42E09D13-5E33-6EF5-A36F-62AC52446033 -name edit-setup.png -parent 5766002A-F528-8BB4-4A48-B0460DEB85A4
+File ::86118118-8D32-E269-FEAF-A4E9FD15F742 -name show-console.png -parent 5766002A-F528-8BB4-4A48-B0460DEB85A4
+File ::9FC84260-C761-9F89-D27E-3A16EAC4CCFB -type dir -name preferences -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::FA9B46FD-D578-72C5-1DC0-9A3E7CB66F32 -name edit-setup-appearance.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::CA5FF341-B3D4-1806-2048-FD13611C697E -name edit-setup-browsercontrol.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::32D8D561-C2D6-03C4-9A6F-D510A1028466 -name edit-setup-dirextension.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::27A77CA5-767D-5A60-FB14-167CABA1AE3E -name edit-setup-extension.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::4252562F-9297-44A9-DF23-2DF942473A31 -name edit-setup-extensions.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::5447DB37-A11D-3379-4FAD-34B7E1860AAB -name edit-setup-firewall.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::B9EA6BCB-6484-1302-535A-6969ABC1DE4D -name edit-setup-foldering.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::8FC0E0EF-9A54-ED4F-E652-5A412C074A94 -name edit-setup-general.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::4556002F-9EE0-3255-0F83-C186AA2560EA -name edit-setup-language.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::58B88CAA-02F8-C815-4023-C8FC43D1CD3C -name edit-setup-network.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::0D7A6707-B5AD-B38E-8733-9E060B696E48 -name edit-setup-screensetting.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::A841598B-4915-D033-BC78-4215A3B57C61 -name edit-setup-skin.png -parent 9FC84260-C761-9F89-D27E-3A16EAC4CCFB
+File ::ABE7113D-8329-C2F5-4C98-F93DA7609590 -type dir -name save -parent AF31B92E-37D0-B898-D1A7-729F24142ABD
+File ::C98CE402-97E5-33BE-A635-4068C48F09F4 -name babel.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::AAD62FD2-EE79-08E2-FEB0-17FAA48CE5DB -name bonobo-component-browser.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::61894057-493B-073C-AC5F-1C695B2DD859 -name browser.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::81DD0297-2F28-D3BD-A36C-D326893391A5 -name cascada.gif -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::A9DF5AA1-63B9-21CE-617F-AC1B359C40EB -name config.jpg -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::5CC7597A-D7A8-8925-533A-98CA088AEDD9 -name config.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::A3D0B495-5F07-211E-C853-28732E720F07 -name console.jpg -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::E4D22A93-2182-8A8A-A831-3AEAD1545D4C -name console.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::E5B6F496-E0C7-50ED-20F6-424A9CEADD72 -name emblem-work.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::9A560980-6187-C0E6-B853-659B7543600A -name enabled.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::F1ECB080-26EC-ED73-C091-4E923B8BF8C9 -name file-manager.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::930A4C55-4480-A11F-DC6C-3FDB7CCDCE56 -name folder.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::DDC1BA7A-DBC3-5FC8-3438-E48C414ED996 -name gnome-settings-theme.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::23407151-83BA-31AF-EB5A-13477CF17597 -name kde-network-offline.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::53668B4F-F7F5-3F28-8035-A22AFA0B0E80 -name kde-network-online.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::F8DCC168-56CE-93E0-E796-321A9A76BD8B -name network.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::9E38247C-01A2-7387-F6E8-FD4394D5A41E -name resolution.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::58D1D8E8-EDCE-FB08-5D9D-B5DB84E6BA22 -name shield.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::308FF3F3-F25E-6C9E-F724-ABD6709CFE11 -name stop.png -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::58C52E00-0BD2-A569-06FD-A3CB20700F75 -name tile.gif -parent ABE7113D-8329-C2F5-4C98-F93DA7609590
+File ::222E6212-6F4E-3444-DBBE-D503565C7556 -type dir -name lib -parent 68D571B3-9534-7606-AC48-48A581904FED
+File ::37A6788A-191B-B113-1DF4-4AE577128BA3 -name org.gvsig.coreplugin.app.mainplugin-2.0.10-SNAPSHOT.jar -parent 222E6212-6F4E-3444-DBBE-D503565C7556
+File ::5A616874-83E6-ED95-A4E7-FF110B1ED587 -type dir -name org.gvsig.installer.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::58C0BDAA-A579-6C5F-2993-4CB3E8C5C093 -name config.xml -parent 5A616874-83E6-ED95-A4E7-FF110B1ED587
+File ::8D99D2E7-BC0A-7943-07E2-05C350BF419C -name defaultDownloadsURLs -parent 5A616874-83E6-ED95-A4E7-FF110B1ED587
+File ::A55F7FF6-477A-4AAD-509C-6A75D404013A -name package.info -parent 5A616874-83E6-ED95-A4E7-FF110B1ED587
+File ::AC603443-9EDF-E0CF-3745-44474C14A2F9 -type dir -name about -parent 5A616874-83E6-ED95-A4E7-FF110B1ED587
+File ::E9F1D54F-429E-49E1-CEB3-D28752112326 -type dir -name i18n -parent 5A616874-83E6-ED95-A4E7-FF110B1ED587
+File ::B034292C-12EF-B1B1-220D-5C0041DB6160 -name text.properties -parent E9F1D54F-429E-49E1-CEB3-D28752112326
+File ::03A039F2-53AE-2015-39BA-A5873F16850B -name text_en.properties -parent E9F1D54F-429E-49E1-CEB3-D28752112326
+File ::ED50D75B-5694-D711-3B44-52491E3BA997 -type dir -name images -parent 5A616874-83E6-ED95-A4E7-FF110B1ED587
+File ::95777DA6-9019-9314-91B0-4F226A127F19 -name system-software-update.png -parent ED50D75B-5694-D711-3B44-52491E3BA997
+File ::54DE6C4E-5ADE-E144-D2E3-CE72848D1B2A -type dir -name action -parent ED50D75B-5694-D711-3B44-52491E3BA997
+File ::AA65C5D7-C112-323E-64A0-6DF86A53978B -name tools-addonsmanager.png -parent 54DE6C4E-5ADE-E144-D2E3-CE72848D1B2A
+File ::435D9735-7E1E-B182-F541-634A1E5DBCDB -type dir -name lib -parent 5A616874-83E6-ED95-A4E7-FF110B1ED587
+File ::67C101B6-F99B-CB13-AE34-E6341907083D -name org.gvsig.installer.app.mainplugin-2.0.10-SNAPSHOT.jar -parent 435D9735-7E1E-B182-F541-634A1E5DBCDB
+File ::51A80E6C-42C2-9FC1-35EF-07AE06796226 -type dir -name org.gvsig.datalocator.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::EC4CF4AE-7871-59E3-625E-95FD13DD045E -type dir -name org.gvsig.csv.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::D6D748FC-5CCC-41D2-D9C3-0735749B7CA8 -type dir -name org.gvsig.geometrymeasurement.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::6ACBF7A1-EA12-733E-0FE0-7A4FAC508DCB -type dir -name org.gvsig.shp.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::E3FD3E62-4D8C-D475-48FA-BC70E59106E0 -type dir -name org.gvsig.symbology.app.importsymbols -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::EB0CBF12-F66C-3C51-DF96-C014D10E44F4 -type dir -name org.gvsig.labeling.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::5C983597-5536-DD2D-D96F-E9C625C75A59 -type dir -name org.gvsig.daltransform.app.join -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::C41F2DEA-69DE-9DE4-DA9A-06EBBB011857 -type dir -name org.gvsig.annotation.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::53622B88-F26B-DF0B-CBAA-63A429F8B814 -type dir -name org.gvsig.newlayer.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::994ECCE0-EF55-D528-0A6E-D47D05F57D85 -type dir -name org.gvsig.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::C777C39C-FF74-2C40-714D-D27733683F27 -type dir -name org.gvsig.selectiontools.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::E7821BF7-84C2-4A6E-3AF6-CEF8789FFF8F -type dir -name org.gvsig.projection.app.proj4j -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::F6903894-F4A9-4661-B06C-DD0BB27A9CDB -type dir -name org.gvsig.app.document.table.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::CCFFEFEA-6480-24FE-E007-958B827254AB -type dir -name org.gvsig.centerviewpoint.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::DDD704CE-54D6-9916-55C4-6148DEAA71F8 -type dir -name org.gvsig.editing.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::90D801EB-3D05-A582-E635-F10295574420 -type dir -name org.gvsig.geodb.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::22F031C6-BC79-AAF8-0DF3-6164E2FF1C89 -type dir -name org.gvsig.daltransform.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::FA5B0BE5-2F4C-6A19-09A9-5CD003480DF7 -type dir -name org.gvsig.exportto.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::83FE58C3-C9D7-C046-5A0D-4989451195F3 -type dir -name org.gvsig.i18n.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::19117644-0621-1920-4925-B631BE262829 -type dir -name org.gvsig.daltransform.app.eventtheme -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::0528F0E2-188B-525B-6DCE-22B2479786E3 -type dir -name org.gvsig.geometry.app.generalpath -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::A33C6A72-B7C6-1C12-0E1D-443CCBAE0EC8 -type dir -name org.gvsig.symbology.app.symbolinstaller -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::9B88F3B9-0C59-A3BE-51BB-887CDC3A85CF -name README.txt -active 0 -parent 4B9EA578-1C2D-ACD2-BC1C-8537E51FB3DF
+File ::03F0B181-E6CC-34CE-594B-4ECFAC85B4DB -type dir -name install -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::8FA9B343-3473-8E15-F4CE-33F7289E72DA -type dir -name org.gvsig.datalocator.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::32B406DC-B346-93DE-E148-5746DAE1808E -type dir -name org.gvsig.geometrymeasurement.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::22A5F31B-3178-154A-3D59-97A2E3B92A4D -type dir -name org.gvsig.installer.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::58E77E66-5DFB-4A63-7BCD-1B608D790359 -type dir -name org.gvsig.symbology.app.importsymbols -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::00B01529-14BE-FF84-A0AD-AADE32C588FA -type dir -name org.gvsig.mkmvnproject.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::037E99B9-08A6-56ED-AC58-5F5E49CA87D8 -type dir -name org.gvsig.daltransform.app.join -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::AA9BD0B6-5B94-36A0-045B-97892DA24D74 -type dir -name org.gvsig.coreplugin.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::9965B3DE-2C50-5DC0-75FB-0590CEBC9C77 -type dir -name org.gvsig.annotation.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::1B188F84-2486-8C82-6659-5FD041286799 -type dir -name org.gvsig.newlayer.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::FC117EDD-8F88-A328-6116-8DD85125C80E -type dir -name org.gvsig.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::0EF831D8-026D-B1AF-21C4-75FC243F086C -type dir -name org.gvsig.selectiontools.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::302036F1-B26C-6756-4851-9829D03C62F8 -type dir -name org.gvsig.app.document.table.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::69D105B2-D831-B122-55EB-327BB45BC3AC -type dir -name org.gvsig.centerviewpoint.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::F515F69D-044D-390F-94B3-7A3892EFF42B -type dir -name org.gvsig.editing.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::D7B8C6D3-FC8D-466C-2FC3-94FBFDDF982E -type dir -name org.gvsig.geodb.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::003CE6E8-DC5A-19AD-A88F-CDA47174B37C -type dir -name org.gvsig.daltransform.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::78CCB2AD-39D2-74F5-E72F-F2B83DC851EA -type dir -name org.gvsig.exportto.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::D5A1F45E-48B9-D117-7E38-5FD2B6D6831D -type dir -name org.gvsig.i18n.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::81EA2C6A-C825-EB65-71F4-8E2374F5EB3E -type dir -name org.gvsig.help.app.mainplugin -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::33C0226D-E3F2-2B13-BF69-31C81E3214C6 -type dir -name org.gvsig.daltransform.app.eventtheme -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::BC92058D-D9C4-45C0-4593-DFD76BDFBE99 -type dir -name org.gvsig.symbology.app.symbolinstaller -active 0 -parent 03F0B181-E6CC-34CE-594B-4ECFAC85B4DB
+File ::F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA -type dir -name lib -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::1F4AFE94-020D-02BB-5905-054B441306FC -name jwizardcomponent-1.2.2.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::EF721BB0-75F6-0B33-3251-F242426914BE -name kxml2-2.2.2.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::75EFB10B-0606-E8DB-7044-18511A57D6D8 -name batik-xml-1.7.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::B1C3E4FF-3CD4-4A5D-B247-D9467B5ADAFC -name ant-contrib-1.0b3.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::9B56B7DB-6EF4-1352-AC41-DBB3F6E0E270 -name xercesImpl-2.5.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::CC6CB107-EF2B-41B6-D08C-31F3A360AFEF -name commons-codec-1.6.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::7F7690D7-76BC-F87F-4EC4-0A246F2683DA -name org.gvsig.tools.dynform.services-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::696F838A-F54B-5586-4992-06A0E568BCD5 -name org.gvsig.about.api-1.0.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::D6EB1A8D-4FC4-C145-8766-133736947A0D -name forms-1.0.7.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::7C401DAF-C4E6-C33F-A2B9-79FCB67B7539 -name slf4j-api-1.5.5.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::026D637E-1C3D-73DB-116F-A42D2BC5451E -name batik-util-1.7.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::370CEEFE-4CDD-1A12-90F4-F1DE7BBF6899 -name org.gvsig.ui-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::27F786C3-8E50-DA09-9AF3-5C3998C0BCF0 -name org.gvsig.about.impl-1.0.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::5A5D2877-8586-9C3A-EF7B-1ECFDA98501D -name jts-1.13.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::ACA6F004-5CCB-C937-F33C-15B7D6890880 -name org.gvsig.installer.prov.plugin-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::9FB11172-C720-AF43-16EA-90A458336794 -name org.gvsig.external.jump-1.0.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::692851B2-1046-A78F-0992-B11ABC737080 -name org.gvsig.tools.swing.serv.jlist-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::F389C172-3AD7-6FDA-71C1-BDE1B425DDB8 -name org.gvsig.andami-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::1196A033-89F2-BEAD-0E69-ACB21AAF76DB -name jwizardcomponent-0i18n-1.2.2.1.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::CB76E5B6-85A7-85DB-EF43-0A3D79A3D04A -name xmlpull-1.1.3.1.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::A41D8D18-E25F-53EE-6179-944F9F1856F8 -name org.gvsig.installer.swing.impl-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::4C871E2F-602A-B802-955F-2189C86A1AAE -name batik-gui-util-1.7.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::849A47D0-5F77-273C-0001-28D81936CB3D -name jgoodies-forms-1.6.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::60065AED-37EE-E16D-4D86-8CF7A813F514 -name org.gvsig.i18n-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::355B8343-AE18-1679-D681-9B5CEF567CD0 -name org.gvsig.tools.dynform.impl-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::351021C8-244E-394D-5C39-771646634695 -name log4j-1.2.14.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::A1E0B8DE-13BE-566A-3743-009A7FAD162F -name commons-cli-1.2.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::86E9A595-2C6A-ECEA-D05D-C6424CD05768 -name org.gvsig.tools.swing.impl-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::5672AEAA-2B86-B973-836B-7A4B06680156 -name flib-jcalendar-unknown.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::F220FFDB-39C7-3956-E638-3DAEEA7E960F -name xml-apis-1.3.04.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::834A6651-2266-46DA-9B66-A17FE4FF0460 -name org.gvsig.utils-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::6F834351-4741-D792-5702-ACB77B2D385A -name org.gvsig.tools.swing.serv.jform-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::507557DD-DE6B-A06D-A679-AA83A75A1AF5 -name org.gvsig.tools.dynform.api-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::FF3C1623-613B-CFC2-E296-E7E44B31E194 -name ant-1.8.1.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::BBA6C77A-153D-3004-15FE-9D8A2DD67865 -name org.gvsig.tools.lib-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::77AEA155-D8E0-A8DE-CF87-F33C253A314C -name antform-2.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::F343F31F-0EA9-87CD-6AE5-979F279402B8 -name bcprov-jdk14-138.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::7A695E63-A01F-D351-5CA3-F76A05C29BCE -name jgoodies-common-1.4.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::14379901-3FAE-EE5E-5135-492AAE99E146 -name commons-io-2.4.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::8EF993BB-77F9-9267-CAD8-99E18D7CE718 -name org.gvsig.tools.swing.serv.field-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::1B1BB6FF-BBE9-0937-0314-C83BB477B7AC -name org.gvsig.tools.lib-3.0.11-tests.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::9BDE6097-13FE-6F44-EE97-9AC8C699C67E -name org.gvsig.tools.dynform.spi-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::16B6536C-BB68-75B2-9CBD-3C29DC834AE0 -name org.gvsig.tools.swing.api-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::40094F69-0A04-F932-E405-A76594EF5072 -name org.gvsig.compat.se-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::632FECD3-1A3C-9923-B1D8-BEF1458136B1 -name org.gvsig.installer.lib.impl-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::E6EC128A-93B4-8A32-696D-F6313700764F -name jcommon-1.0.17.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::C5010BC1-AD0C-1F03-FD06-25FA0F51479A -name itext-2.1.4.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::E35C1D55-3432-48CF-8F87-7243ADA568DA -name bcmail-jdk14-138.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::4C81C667-E874-7E27-2242-30BA96C2CA67 -name org.gvsig.compat.api-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::A6C4688E-0A07-C174-9A8A-5B048A7A1E9A -name ant-launcher-1.8.1.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::251FAD80-340D-E6B9-064D-77FC2344C7AE -name looks-2.1.4.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::850C477E-0583-1B6F-4C40-A5CD2632FAED -name org.gvsig.maven.base.tools-1.0.9.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::8AFE2243-13C3-57CB-9C05-E08FF13E5BE4 -name org.gvsig.installer.lib.spi-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::9D9363BE-24DE-79E3-236B-1AF5244A168D -name org.gvsig.andami.updater-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::BAF93563-3889-2CA5-E2CB-FDA75D38D9F1 -name slf4j-log4j12-1.5.5.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::D6E8B2AF-66E6-F698-6339-F82DD5B403B6 -name org.gvsig.installer.swing.api-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::4A8CEFC5-E2C5-D529-AE4A-8D6913D57D60 -name org.gvsig.tools.swing.spi-3.0.11.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::F552ED64-A439-F640-8840-F336F1BDEB63 -name org.gvsig.jdk.v1_6-1.0.0.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::1E1E17B2-BF85-5DB3-F404-2D9CFEB240A8 -name javahelp-2.0.05.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::1C5289BD-F98C-7B6B-808F-0A5C70471BFA -name org.gvsig.installer.lib.api-2.0.19.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::692128CE-28C6-D674-0A54-4F81E64A1246 -name castor-0.9.5.3.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::9BEB5E84-1BB0-0CE1-78DB-AC03877BAE68 -name jfreechart-1.0.14.jar -active 0 -parent F7B39AC2-0E81-29AA-FC97-B9DE1E2718FA
+File ::8AA5456E-6A43-917D-2A90-A3252C89AA2F -type dir -name theme -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::076B616F-087B-0045-487A-AAF96927E622 -name andami-theme.xml -active 0 -parent 8AA5456E-6A43-917D-2A90-A3252C89AA2F
+File ::4AC45C3C-F575-5D8D-0243-3219E7F7B63B -name icon.png -active 0 -parent 8AA5456E-6A43-917D-2A90-A3252C89AA2F
+File ::DD3DDDE7-5764-00ED-CCFE-60D5EF637611 -name README.txt -active 0 -parent 8AA5456E-6A43-917D-2A90-A3252C89AA2F
+File ::5923B780-926D-B56D-016D-50D9C6972467 -name splash.png -active 0 -parent 8AA5456E-6A43-917D-2A90-A3252C89AA2F
+File ::76E08397-01BB-CFF4-16D7-7F87FD3C3B64 -name gvsig-icon16x16.png -active 0 -parent 8AA5456E-6A43-917D-2A90-A3252C89AA2F
+File ::535B1183-C3C3-0BA2-6B7B-C0CFE101C031 -name gvsig-proj-black-wallpaper.png -active 0 -parent 8AA5456E-6A43-917D-2A90-A3252C89AA2F
+File ::17FD9825-22CE-B061-361B-D97EC01B1F8D -type dir -name native -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::79F631FE-0CC9-2F48-8D46-6829C8BF7F47 -name libjecw2.0.0.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::FAEB166E-0159-8CD6-6212-32DB2D6A86BB -name libNCSCnet.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::8C49FD4C-9B14-DC67-5054-60122BC724F7 -name libNCSCnet.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::B1888A5E-485B-1E73-8F95-3B43D9B7A7A7 -name libNCSEcw.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::4B8152A8-759B-9467-91C7-B151B3A6B7D5 -name libNCSEcw.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::0539D1BF-910D-706D-9062-A37CE6B38A65 -name libNCSEcwC.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::D22E83E2-F71A-553F-8FE1-2508AFC49F62 -name libNCSEcwC.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::6541F0DF-B9FC-0A7E-E8EA-BC7B055542BA -name libNCSUtil.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::BDAC95BE-F16F-B79D-73C6-2528CBB224F4 -name libNCSUtil.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::5DB33EE7-89D8-4B30-904F-ED9DA857ED4D -name libcom_err.so.2 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::50B1E06F-551D-4C15-8552-63700E8FA0E9 -name libcrsjniproj2.0.1.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::23FE387C-7E67-4E9D-850E-3951172EA681 -name libcrypto.so.0.9.8 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::E7CB7E81-6F43-4D12-AACF-741FCF5CB7C6 -name libcurl-gnutls.so.4 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::9FCDA219-0B2B-4AC0-8148-FC2785B5BDDA -name libdfalt.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::D336D7BD-8DD7-4D01-8465-12DC32A7EE74 -name libexpat.so.1 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::C72FE30C-3203-415F-99CA-275B11860030 -name libgcrypt.so.11 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::90BA9559-D3CF-4991-9229-78A5B035E811 -name libgdal.so.1.15.1 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::0C551A92-5226-4AA1-BF49-2382CC5D2DDF -name libgeos-3.1.0.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::560CD36F-133F-4505-908D-98DEF4F6CABF -name libgeos_c.so.1 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::9CCE5574-1617-4096-ACA5-38F45701FB88 -name libgif.so.4 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::D20F9649-AD72-47BA-8C2E-DA22CCE00432 -name libgnutls.so.26 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::E5CD9C7C-6289-4BF1-AD58-AF80949F9EB8 -name libgpg-error.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::1C25348F-BB39-41A9-8E5C-ABAC34403125 -name libgssapi_krb5.so.2 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::5B876679-6324-485E-9DFF-658D01EF277D -name libhdf5.so.6 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::CE22B064-8B38-4ED5-BC46-A1F52FC75192 -name libicudata.so.42 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::0E34B682-BF35-4CA9-89B6-1F8E95CDAEE2 -name libicuuc.so.42 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::9396E0E0-2C3F-43D8-81B5-BB3558A4E3FC -name libidn.so.11 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::115DE72C-09E0-47E1-94FB-56C8F1BBE384 -name libjasper.so.1 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::F54600AC-FEEF-472E-904F-8C294B2B9DC2 -name libjgdal2.0.4.so -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::D7516395-A893-4DB1-AC5A-2E0F05435168 -name libjpeg.so.62 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::1D141B9E-8857-4AB1-8F85-AEE63EE26953 -name liblber-2.4.so.2 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::05840427-BC94-4722-B3DF-E5E43D0ADD10 -name libltdl.so.7 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::F956C072-AE7D-46F7-9DF2-A1097BA56128 -name libmfhdfalt.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::20231BCE-D324-4B41-A19B-C5F9A7EACF13 -name libmysqlclient.so.16 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::7A8248E0-3C2A-4311-8AB7-09C8F14BF2D4 -name libnetcdf.so.4 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::EF8AA727-6101-493A-ACAB-0720AB222274 -name libodbc.so.1 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::AC857BD2-80A4-46EF-A8C2-1D891B33C09E -name libodbcinst.so.1 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::68C29DF1-EA01-4F6D-A9BD-43197CA93038 -name libogdi.so.3.2 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::533E2260-BE8B-4700-A899-A1D72A179380 -name libpng12.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::F2953462-42E2-43A1-A134-D8ACF127E196 -name libpq.so.5 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::DEA9F059-72B5-4E1E-AC69-6693FE2A3F77 -name libproj.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::7EDE726B-A40D-4A77-B899-9FE3382AB28C -name libsasl2.so.2 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::58B7AA43-BDCC-435F-AF4B-2AD3E83ADD39 -name libsqlite3.so.0 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::5DA0BA39-A88A-47B4-8682-C365B8C4B62C -name libssl.so.0.9.8 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::752CA03C-9F3A-4FE9-ACD0-1AD25444E513 -name libtasn1.so.3 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::9F2F28DF-4304-4C11-9A5D-A6B8234958F6 -name libxerces-c.so.28 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::735FCBC1-3055-4CDF-9CBF-209F18D93897 -name libz.so.1 -active 0 -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::F942A410-2F3D-265F-42A1-9B14A8FF5228 -name README.txt -parent 17FD9825-22CE-B061-361B-D97EC01B1F8D
+File ::1B33D2F3-A54C-9002-184F-72822D9C3E71 -type dir -name i18n -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::97399C95-4978-B94B-772C-D75BA5ED1C05 -name README.txt -parent 1B33D2F3-A54C-9002-184F-72822D9C3E71
+File ::EE38D55C-FF56-4100-A989-98A720C91393 -name gvsig-package-installer.l4j.ini -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::81B7C17B-08BE-4AB6-98C9-9A5A2DE1484C -name gvsig-desktop-devel.exe -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::0B206EE2-641D-F32C-7348-18D2FEC2D2B4 -name gvsig-icon16x16.png -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::B2B0DC6F-6F85-EC37-A95C-1328BCE7F3A8 -name gvsig-icon22x22.png -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::8518186B-21AD-6425-0D1F-86DBB509F182 -name gvsig-icon48x48.png -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::13BE4AAC-BADE-E291-FF28-84DE3814DF1C -type dir -name data -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::E75B9260-F869-1AFA-BEEA-F22742B25745 -type dir -name gdal -parent 13BE4AAC-BADE-E291-FF28-84DE3814DF1C
+File ::86D5C199-EF03-1DBE-F231-8F50BA21FC69 -name compdcs.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::21197BE7-BC91-DC0B-7DCC-D9DB8DFF818F -name coordinate_axis.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::6471006A-7EF8-7C77-FC92-8BDA3A8F06AC -name cubewerx_extra.wkt -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::0025B3DF-B1C8-14B0-D6B7-611A9404E31D -name datum_shift.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::F5C0254D-E5A1-7B91-8649-B9765CA9E246 -name ecw_cs.wkt -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::578E09CE-2D2A-165F-0FB8-CC0D7485C858 -name ellipsoid.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::A36F20B7-0C4C-8C47-9C0C-BA3C3582D27C -name epsg.wkt -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::A8B7AA9C-910C-50E6-CE85-7D8F6604ABEE -name esri_extra.wkt -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::1432A950-A725-2B53-5D3F-A82D7B520A39 -name gcs.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::4E3FB472-CEC1-5921-400E-EE190ABB1CDF -name gcs.override.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::0F33BF13-3C01-FA44-AD25-1F7511876D8A -name gdal_datum.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::C873693B-BF70-0DD3-7107-78783BCCE879 -name gdalicon.png -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::53BC99DE-0C17-9AF2-9B9F-9FB1F18DAE64 -name GDALLogoBW.svg -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::3447F91D-4B41-B9FE-EB88-8554AEB60F6B -name GDALLogoColor.svg -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::0B697FC3-5706-309C-DD23-37494BE9B4D8 -name GDALLogoGS.svg -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::0CAFF675-127D-C337-0AD7-B40DE2786984 -name gt_datum.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::F4A09982-5A1C-4B66-8B38-D36FF0BFCCA6 -name gt_ellips.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::891F4DF8-0B58-8DAC-7F22-2A45BEE6CC50 -name header.dxf -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::A0E9BF72-ABFA-751B-6AEF-22BA2D50A5AD -name pci_datum.txt -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::DC3261B4-1717-EA7E-EC20-C085D903615A -name pci_ellips.txt -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::3764798A-26AE-47EF-4EF4-A8B9961C14F6 -name pcs.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::47F737D7-616E-ABE9-4D0C-EC2871105794 -name pcs.override.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::E74CF1EE-9888-98E8-C66A-577FDDB99E34 -name prime_meridian.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::58015FF8-E7BA-281D-5377-36E4522C5B4C -name projop_wparm.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::256AF04D-EDD6-5C04-FC70-35513AC3D74F -name s57agencies.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::59ABEAF0-5B29-1989-8817-E5900D950172 -name s57attributes.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::A26923F0-7804-883F-08E8-8C14A2C44A33 -name s57attributes_aml.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::A0531687-F781-A6D3-AAC1-20DEAB6B92EA -name s57attributes_iw.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::CFECD7C9-1D7D-6E9E-C7D5-E6F497EB2EA1 -name s57expectedinput.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::6149E668-53D1-9410-538C-F7BA9BDB2792 -name s57objectclasses.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::C08F3D37-C2CA-1183-D5D8-3A1E597620B0 -name s57objectclasses_aml.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::BB101A86-E5F3-6C53-F601-1274FAD6E82B -name s57objectclasses_iw.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::0DE701EA-AC23-7D85-97F0-A8DF607095D7 -name seed_2d.dgn -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::498B8045-D496-1222-0D05-E2C3BD2D13C3 -name seed_3d.dgn -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::1B05C774-4284-3968-3A86-CED51FAC78CD -name stateplane.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::588E688E-25E9-3158-1242-6B2BF0C4173E -name trailer.dxf -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::35139BCF-F306-6808-105A-726D237E4EE0 -name unit_of_measure.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::C99C6C61-4686-2F14-75D4-26BB48213A19 -name vertcs.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::920608ED-6690-89F6-A6D4-DBEF816C7788 -name vertcs.override.csv -parent E75B9260-F869-1AFA-BEEA-F22742B25745
+File ::78CA798A-AA43-4A12-8D19-5AF6C9D06693 -type dir -name icon-theme -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::DFF595B3-D40E-8B5C-002D-BADBB5B1171F -name splash.png -active 0 -parent 78CA798A-AA43-4A12-8D19-5AF6C9D06693
+File ::B1C1230C-017A-E511-5F95-D1BEFF5ACDB3 -name gvsig-icon16x16.png -active 0 -parent 78CA798A-AA43-4A12-8D19-5AF6C9D06693
+File ::CF6E0E43-92E6-01F0-D2DE-F0BCD53C69F0 -name gvsig-proj-black-wallpaper.png -active 0 -parent 78CA798A-AA43-4A12-8D19-5AF6C9D06693
+File ::724DC077-8A6C-708D-3F76-B6279BCEDD44 -name andami-theme.xml -active 0 -parent 78CA798A-AA43-4A12-8D19-5AF6C9D06693
+File ::E40DEC85-3410-DA5D-E42F-210DCDA1C6F8 -name README.txt -parent 78CA798A-AA43-4A12-8D19-5AF6C9D06693
+File ::E9346655-9764-4441-8A0A-3EBC149351F4 -type dir -name update -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::C36F91C9-7CBE-40B0-EB60-A2DBB8870D79 -name package.info -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::5EC3BDEC-F9EB-2633-83FD-F2DC4C041441 -name gvsig-desktop.cmd -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::A57CB5A2-BB60-7762-8C68-0275413BA44A -name gvsig-desktop-devel.xml -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::11349629-FBB7-EA32-6CB9-8E572B6F6DF4 -name gvsig-desktop.xml -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::516E0709-940F-AD4A-F6B3-1B6067301F0F -name gvsig-package-installer.xml -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::015FCC0A-6D64-07CB-34AA-FC1E674F3226 -type dir -name tools -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::FDA8C027-D2FE-3594-849E-B7E855243886 -name busybox.exe -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::73374121-CDEA-D741-0D2C-4C3B78069636 -name gvsig-desktop-portable.exe -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::F9DB1AB2-43DB-05A2-492A-7B9968432FE1 -name check.sh -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::30F00F82-3EE0-4723-E70B-7D94F00948DE -name check.cmd -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::E93AAAD4-D78F-C860-6D10-A25CAA74145C -name gvsig-desktop-portable.xml -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::7FDF6A13-4DE3-4A3F-4B7B-CD66422EB28D -name gvSIG.config -active 0 -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::1853045E-D050-EAC8-6630-2848563EFD16 -name make-portable -active 0 -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::1D92E982-3DCC-55EE-481B-0528A77EACB9 -name check.sh -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::A94BAFB3-1DF4-1316-2128-B3692F99FCB0 -name check.cmd -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+Component ::EE918467-993A-9E94-31D7-B8C02C46EE4A -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-5-x86 FreeBSD-6-x86 FreeBSD-7-x86 HPUX-hppa Linux-x86 Linux-x86_64 Solaris-sparc Solaris-x86 Windows} -name {gvSIG core} -parent Components
+SetupType ::986E6738-F9BC-9444-D665-C6F52970C695 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-5-x86 FreeBSD-6-x86 FreeBSD-7-x86 HPUX-hppa Linux-x86 Linux-x86_64 Solaris-sparc Solaris-x86 Windows} -name Typical -parent SetupTypes
+SetupType ::A9030D89-64CC-E238-4A51-A3EA100D595B -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-5-x86 FreeBSD-6-x86 FreeBSD-7-x86 HPUX-hppa Linux-x86 Linux-x86_64 Solaris-sparc Solaris-x86 Windows} -name Custom -parent SetupTypes
+
+InstallComponent CBD27046-3A35-A47B-E2DF-360A5B5AA36D -setup Install -type pane -title {Welcome Screen} -component Welcome -active Yes -parent StandardInstall
+InstallComponent FA9107E8-99B9-B71C-058B-5FBEEEBA6932 -setup Install -type pane -title {License Agreement} -component License -active Yes -parent StandardInstall
+InstallComponent 89027793-53C5-A75C-C2A2-E2D47022AFFB -setup Install -type action -title {Read license text} -component ExecuteScript -alias {Read license text} -active Yes -parent FA9107E8-99B9-B71C-058B-5FBEEEBA6932
+InstallComponent 80F0493D-8208-6418-F6BA-45BAE3762736 -setup Install -type action -conditions {346F7FAE-DA18-CF34-B468-EF7F0BC98B86 DECC9B88-0B87-294C-73EC-AB7F0ED2993E} -title {Modify Widget} -component ModifyWidget -active Yes -parent FA9107E8-99B9-B71C-058B-5FBEEEBA6932
+Condition 346F7FAE-DA18-CF34-B468-EF7F0BC98B86 -active Yes -parent 80F0493D-8208-6418-F6BA-45BAE3762736 -title {String Is Condition} -component StringIsCondition -TreeObject::id 346F7FAE-DA18-CF34-B468-EF7F0BC98B86
+Condition DECC9B88-0B87-294C-73EC-AB7F0ED2993E -active Yes -parent 80F0493D-8208-6418-F6BA-45BAE3762736 -title {String Is Condition} -component StringIsCondition -TreeObject::id DECC9B88-0B87-294C-73EC-AB7F0ED2993E
+InstallComponent 08D0E10E-906F-1933-B783-5C899E50C968 -setup Install -type action -title {Locate System JRE} -component LocateJavaRuntime -alias {Locate System JRE} -active Yes -parent FA9107E8-99B9-B71C-058B-5FBEEEBA6932
+InstallComponent 2E281DC9-6998-46D8-AEDB-D45C51D6CD59 -setup Install -type action -conditions {EFF4485B-8EF4-5163-5129-4200A2495D8B 7F665996-366F-5FBB-95D1-6768787158E6} -title {Extract provided JRE windows} -component ExecuteAction -alias {Extract provided JRE} -active Yes -parent FA9107E8-99B9-B71C-058B-5FBEEEBA6932
+Condition EFF4485B-8EF4-5163-5129-4200A2495D8B -active Yes -parent 2E281DC9-6998-46D8-AEDB-D45C51D6CD59 -title {Is Windows} -component PlatformCondition -TreeObject::id EFF4485B-8EF4-5163-5129-4200A2495D8B
+Condition 7F665996-366F-5FBB-95D1-6768787158E6 -active Yes -parent 2E281DC9-6998-46D8-AEDB-D45C51D6CD59 -title {Java not found} -component StringIsCondition -TreeObject::id 7F665996-366F-5FBB-95D1-6768787158E6
+InstallComponent 6CF34479-3460-FEC4-2ABA-2DA49D92D2C5 -setup Install -type pane -conditions D17A73BD-E3B9-C589-08E6-E963974AFA1C -title {JRE linux location} -component CustomBlankPane2 -alias {JRE location} -active Yes -parent StandardInstall
+Condition D17A73BD-E3B9-C589-08E6-E963974AFA1C -active Yes -parent 6CF34479-3460-FEC4-2ABA-2DA49D92D2C5 -title {Is Linux} -component PlatformCondition -TreeObject::id D17A73BD-E3B9-C589-08E6-E963974AFA1C
+InstallComponent 5DB71BAB-7CA9-30E5-890F-F7DA7B130A78 -setup Install -type action -conditions 5AFD027A-CB33-E59C-DDD0-460B0370DBCB -title {System found JRE location option} -component AddWidget -alias {System found JRE location option} -active Yes -parent 6CF34479-3460-FEC4-2ABA-2DA49D92D2C5
+Condition 5AFD027A-CB33-E59C-DDD0-460B0370DBCB -active Yes -parent 5DB71BAB-7CA9-30E5-890F-F7DA7B130A78 -title {String Is Condition} -component StringIsCondition -TreeObject::id 5AFD027A-CB33-E59C-DDD0-460B0370DBCB
+InstallComponent CB7DC160-9665-692E-FC7F-DED112F475EC -setup Install -type action -title {User selected JRE location option} -component AddWidget -alias {User selected JRE location option} -active Yes -parent 6CF34479-3460-FEC4-2ABA-2DA49D92D2C5
+InstallComponent 0B50C30F-AF99-1AF1-0F7D-8CB0073B0080 -setup Install -type action -conditions 561E850D-3BD6-39E2-8348-2B48BF35F5FC -title {Locate user selected JRE} -component ExecuteAction -alias {Locate user selected JRE} -active Yes -parent 6CF34479-3460-FEC4-2ABA-2DA49D92D2C5
+Condition 561E850D-3BD6-39E2-8348-2B48BF35F5FC -active Yes -parent 0B50C30F-AF99-1AF1-0F7D-8CB0073B0080 -title {String Equal Condition} -component StringEqualCondition -TreeObject::id 561E850D-3BD6-39E2-8348-2B48BF35F5FC
+InstallComponent B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739 -setup Install -type action -title {Installer provided JRE option} -component AddWidget -alias {Installer provided JRE option} -active Yes -parent 6CF34479-3460-FEC4-2ABA-2DA49D92D2C5
+InstallComponent 0FDD61B2-61D5-B5BE-3EA8-A8F71B44B51A -setup Install -type action -conditions ECA8F261-D507-0D1D-6D05-AB4679CE89E7 -title {Extract provided JRE linux} -component ExecuteAction -alias {Extract provided JRE} -active Yes -parent 6CF34479-3460-FEC4-2ABA-2DA49D92D2C5
+Condition ECA8F261-D507-0D1D-6D05-AB4679CE89E7 -active Yes -parent 0FDD61B2-61D5-B5BE-3EA8-A8F71B44B51A -title {String Equal Condition} -component StringEqualCondition -TreeObject::id ECA8F261-D507-0D1D-6D05-AB4679CE89E7
+InstallComponent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60 -setup Install -type pane -conditions {56A1E7E1-8AA9-784B-BF77-D9E3ACF8CA69 4640715F-7579-AE5D-0EB1-A600B49CFD25 A0EBE09F-A56D-46A9-5126-44EE901EF944} -title {Download JRE Linux} -component CopyFiles -alias {JRE provided installation} -active Yes -parent StandardInstall
+Condition 56A1E7E1-8AA9-784B-BF77-D9E3ACF8CA69 -active Yes -parent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60 -title {JRE Linux installer not available} -component FileExistsCondition -TreeObject::id 708C7218-6E13-D342-8142-ADF980B7C5C1
+Condition 4640715F-7579-AE5D-0EB1-A600B49CFD25 -active Yes -parent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60 -title {JRE provided option selected} -component StringEqualCondition -TreeObject::id 98E1AA04-CE3A-ADF7-4221-1C8E80CC75BB
+Condition A0EBE09F-A56D-46A9-5126-44EE901EF944 -active Yes -parent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60 -title {Is Linux} -component PlatformCondition -TreeObject::id A0EBE09F-A56D-46A9-5126-44EE901EF944
+InstallComponent 83FF997E-AE4B-A894-6DED-B9EFFB2A0F35 -setup Install -type action -title {Disable Buttons} -component ModifyWidget -active Yes -parent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60
+InstallComponent A0990C09-D43B-8331-568A-360C6E3E0508 -setup Install -type action -conditions B85E0ABC-3E6D-9E2D-B2E9-E440A97D7A84 -title {Create gvSIG JRE linux parent Folder} -component CreateFolder -alias {Create Install Folder} -active Yes -parent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60
+Condition B85E0ABC-3E6D-9E2D-B2E9-E440A97D7A84 -active Yes -parent A0990C09-D43B-8331-568A-360C6E3E0508 -title {Directory Test Condition} -component DirectoryTestCondition -TreeObject::id 7D670287-273F-0090-6C50-45F648DBC348
+InstallComponent 1105917C-3734-726C-7349-F05208D9DB71 -setup Install -type action -conditions B87738EC-83B0-E926-ECE2-AAF5F6D85453 -title {Download JRE Linux installer} -component FetchURL -operator OR -alias {Download JRE Linux installer} -active Yes -parent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60
+Condition B87738EC-83B0-E926-ECE2-AAF5F6D85453 -active Yes -parent 1105917C-3734-726C-7349-F05208D9DB71 -title {Is Linux} -component PlatformCondition -TreeObject::id 819EC5DF-22F7-54D5-6AD3-7AD7465A73BB
+InstallComponent 399FF28D-CD27-BE79-EC33-43C6CD82F5F5 -setup Install -type action -title {Move Forward} -component MoveForward -active Yes -parent 7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60
+InstallComponent BCA2EBA3-8663-9B43-6783-EB398AADE2F5 -setup Install -type pane -conditions {38AABCFE-B4E0-1970-3EDE-1F2C61F5EC00 B71F4D9E-9A33-DD5D-5C1B-23AF237B01A9} -title {JRE Linux provided installation} -component CustomTextPane1 -alias {JRE installation} -active Yes -parent StandardInstall
+Condition 38AABCFE-B4E0-1970-3EDE-1F2C61F5EC00 -active Yes -parent BCA2EBA3-8663-9B43-6783-EB398AADE2F5 -title {JRE provided selected} -component StringEqualCondition -TreeObject::id 8B52C357-9174-1101-A2DD-98C40875AF30
+Condition B71F4D9E-9A33-DD5D-5C1B-23AF237B01A9 -active Yes -parent BCA2EBA3-8663-9B43-6783-EB398AADE2F5 -title {Is Linux} -component PlatformCondition -TreeObject::id 7690B95C-3CDE-FE43-14B6-BAE10872C147
+InstallComponent 77015942-52D7-9F56-971E-6DD392CE667F -setup Install -type action -conditions 600E46D5-748B-847D-1F73-0ACD6D16817E -title {JRE provided already installed alert} -component MessageBox -alias {JRE provided already installed alert} -active Yes -parent BCA2EBA3-8663-9B43-6783-EB398AADE2F5
+Condition 600E46D5-748B-847D-1F73-0ACD6D16817E -active Yes -parent 77015942-52D7-9F56-971E-6DD392CE667F -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 600E46D5-748B-847D-1F73-0ACD6D16817E
+InstallComponent B96F7591-8762-2170-4283-D744D6536D22 -setup Install -type action -conditions C02457C6-0363-CF49-D0AF-430415B8DBCB -title {Move Forward} -component MoveForward -active Yes -parent BCA2EBA3-8663-9B43-6783-EB398AADE2F5
+Condition C02457C6-0363-CF49-D0AF-430415B8DBCB -active Yes -parent B96F7591-8762-2170-4283-D744D6536D22 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id C02457C6-0363-CF49-D0AF-430415B8DBCB
+InstallComponent 2728B481-EFDF-F184-A658-EF46281BDF8A -setup Install -type action -title {Modify Widget} -component ModifyWidget -active Yes -parent BCA2EBA3-8663-9B43-6783-EB398AADE2F5
+InstallComponent 8E46FF9F-C77C-E92D-0878-1DA1650532A7 -setup Install -type action -conditions 1A30E844-3331-B663-9BB6-FC67BC77A6FB -title {Install JRE linux} -component ExecuteAction -alias {Install JRE linux} -active Yes -parent BCA2EBA3-8663-9B43-6783-EB398AADE2F5
+Condition 1A30E844-3331-B663-9BB6-FC67BC77A6FB -active Yes -parent 8E46FF9F-C77C-E92D-0878-1DA1650532A7 -title {JRE provided installation does not exist} -component FileExistsCondition -TreeObject::id 1A30E844-3331-B663-9BB6-FC67BC77A6FB
+InstallComponent 18E2C736-734E-6CD3-18FB-40130C401C08 -setup Install -type action -title {Enable next button} -component ModifyWidget -alias {Enable next button} -active Yes -parent BCA2EBA3-8663-9B43-6783-EB398AADE2F5
+InstallComponent 83BBEB23-E995-A514-D1BE-290581D376FF -setup Install -type pane -conditions {FA04143E-D058-21C2-79C2-6C2FEDA23733 B8895379-01AF-1B8F-3862-C566516D9E7F} -title {Select Destination} -component SelectDestination -active Yes -parent StandardInstall
+Condition FA04143E-D058-21C2-79C2-6C2FEDA23733 -active Yes -parent 83BBEB23-E995-A514-D1BE-290581D376FF -title {Script Condition} -component ScriptCondition -TreeObject::id FA04143E-D058-21C2-79C2-6C2FEDA23733
+Condition B8895379-01AF-1B8F-3862-C566516D9E7F -active Yes -parent 83BBEB23-E995-A514-D1BE-290581D376FF -title {File Permission Condition} -component FilePermissionCondition -TreeObject::id B8895379-01AF-1B8F-3862-C566516D9E7F
+InstallComponent C5BEF668-50B1-4104-94BD-010A340BEC33 -setup Install -type action -conditions E4904401-29F0-4653-B796-3232350E102C -title {Message Box} -component MessageBox -active Yes -parent 83BBEB23-E995-A514-D1BE-290581D376FF
+Condition E4904401-29F0-4653-B796-3232350E102C -active Yes -parent C5BEF668-50B1-4104-94BD-010A340BEC33 -title {Directory Test Condition} -component DirectoryTestCondition -TreeObject::id E4904401-29F0-4653-B796-3232350E102C
+InstallComponent CBD3A085-2D72-4024-B257-861FD939BAFE -setup Install -type action -conditions 8024E0D0-D8A7-4A59-A542-94E50A41BE46 -title {Delete File} -component DeleteFile -active Yes -parent 83BBEB23-E995-A514-D1BE-290581D376FF
+Condition 8024E0D0-D8A7-4A59-A542-94E50A41BE46 -active Yes -parent CBD3A085-2D72-4024-B257-861FD939BAFE -title {String Equal Condition} -component StringEqualCondition -TreeObject::id 8024E0D0-D8A7-4A59-A542-94E50A41BE46
+InstallComponent 7E4760EC-726C-9813-822E-C7DB4ADC498F -setup Install -type pane -title {Start Copying Files} -component StartCopyingFiles -active Yes -parent StandardInstall
+InstallComponent A5804629-16FA-958E-EE7D-647CC24E45B5 -setup Install -type pane -title {Copying Files} -component CopyFiles -active Yes -parent StandardInstall
+InstallComponent 0E5C1C4C-A0D7-25C4-45AF-8D75EA70DAFE -setup Install -type action -title {Disable Buttons} -component ModifyWidget -active Yes -parent A5804629-16FA-958E-EE7D-647CC24E45B5
+InstallComponent 3D49F78F-C9AB-9343-7FF7-43937F3B506E -setup Install -type action -title {Install Everything} -component ExecuteAction -active Yes -parent A5804629-16FA-958E-EE7D-647CC24E45B5
+InstallComponent 080AA25D-28FD-A285-06E5-FEE568DE91F0 -setup Install -type action -title {Replace Text In File} -component ReplaceTextInFile -active Yes -parent A5804629-16FA-958E-EE7D-647CC24E45B5
+InstallComponent 18EDA188-FCE6-9532-FB35-577C11859967 -setup Install -type action -title {Move Forward} -component MoveForward -active Yes -parent A5804629-16FA-958E-EE7D-647CC24E45B5
+InstallComponent 54A9E67A-F932-CDD4-6F9A-8842AAE31ACC -setup Install -type pane -title {Install Packages} -component CustomTextPane1 -alias {Install Complements} -active Yes -parent StandardInstall
+InstallComponent BCB85F45-B1CD-C065-EBAF-282DE843D49C -setup Install -type action -title {Install addons} -component ExecuteAction -alias {Install addons} -active Yes -parent 54A9E67A-F932-CDD4-6F9A-8842AAE31ACC
+InstallComponent C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2 -setup Install -type pane -title {Setup Complete} -component SetupComplete -active Yes -parent StandardInstall
+InstallComponent 72B87294-F7B2-1240-D39D-4FACC79525BB -setup Install -type action -conditions {11570579-1FC9-694C-0CBD-BF5286FEEE8C 2D041762-8562-6901-F856-642CBF5D4B02} -title {View Readme Checkbutton} -component AddWidget -active Yes -parent C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2
+Condition 11570579-1FC9-694C-0CBD-BF5286FEEE8C -active Yes -parent 72B87294-F7B2-1240-D39D-4FACC79525BB -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 11570579-1FC9-694C-0CBD-BF5286FEEE8C
+Condition 2D041762-8562-6901-F856-642CBF5D4B02 -active Yes -parent 72B87294-F7B2-1240-D39D-4FACC79525BB -title {String Is Condition} -component StringIsCondition -TreeObject::id 2D041762-8562-6901-F856-642CBF5D4B02
+InstallComponent 3D58566B-5250-59FA-22B1-54D351A4B7F8 -setup Install -type action -conditions {ADCE9936-9F1C-72B8-AE2C-3BC987A9B15A 20A784D6-A22E-5D7E-FC1D-C0809F7F2125} -title {Launch Application Checkbutton} -component AddWidget -active Yes -parent C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2
+Condition ADCE9936-9F1C-72B8-AE2C-3BC987A9B15A -active Yes -parent 3D58566B-5250-59FA-22B1-54D351A4B7F8 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id ADCE9936-9F1C-72B8-AE2C-3BC987A9B15A
+Condition 20A784D6-A22E-5D7E-FC1D-C0809F7F2125 -active Yes -parent 3D58566B-5250-59FA-22B1-54D351A4B7F8 -title {String Is Condition} -component StringIsCondition -TreeObject::id 20A784D6-A22E-5D7E-FC1D-C0809F7F2125
+InstallComponent 27940F23-2EE5-46FC-5575-C9CE1A69A795 -setup Install -type action -conditions {BF971C08-CE1B-5BFD-0B7A-11F9474609E1 D11857FC-B108-A643-8EF2-B44A6898C544} -title {Desktop Shortcut Checkbutton} -component AddWidget -active Yes -parent C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2
+Condition BF971C08-CE1B-5BFD-0B7A-11F9474609E1 -active Yes -parent 27940F23-2EE5-46FC-5575-C9CE1A69A795 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id BF971C08-CE1B-5BFD-0B7A-11F9474609E1
+Condition D11857FC-B108-A643-8EF2-B44A6898C544 -active Yes -parent 27940F23-2EE5-46FC-5575-C9CE1A69A795 -title {String Is Condition} -component StringIsCondition -TreeObject::id D11857FC-B108-A643-8EF2-B44A6898C544
+InstallComponent 498A679C-D1AC-9930-D5A0-80135E9AA8E6 -setup Install -type action -conditions {4EDC6EC0-5206-414D-74B5-0B2830D16398 E2AA1BDB-1CCE-DF57-0997-3904DBDAF3A5 9FA6DFA4-1160-8D13-2441-0EAEF1BC0469} -title {Quick Launch Shortcut Checkbutton} -component AddWidget -active Yes -parent C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2
+Condition 4EDC6EC0-5206-414D-74B5-0B2830D16398 -active Yes -parent 498A679C-D1AC-9930-D5A0-80135E9AA8E6 -title {Platform Condition} -component PlatformCondition -TreeObject::id 4EDC6EC0-5206-414D-74B5-0B2830D16398
+Condition E2AA1BDB-1CCE-DF57-0997-3904DBDAF3A5 -active Yes -parent 498A679C-D1AC-9930-D5A0-80135E9AA8E6 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id E2AA1BDB-1CCE-DF57-0997-3904DBDAF3A5
+Condition 9FA6DFA4-1160-8D13-2441-0EAEF1BC0469 -active Yes -parent 498A679C-D1AC-9930-D5A0-80135E9AA8E6 -title {String Is Condition} -component StringIsCondition -TreeObject::id 9FA6DFA4-1160-8D13-2441-0EAEF1BC0469
+InstallComponent E1B916EC-7954-3176-9CCD-A2B34F6AB47E -setup Install -type pane -title {Copying Files} -component CopyFiles -active Yes -parent DefaultInstall
+InstallComponent A86210CC-64FE-1DB9-7884-745DBCEB7E9B -setup Install -type action -title {Disable Buttons} -component ModifyWidget -active Yes -parent E1B916EC-7954-3176-9CCD-A2B34F6AB47E
+InstallComponent 55CCBD8D-63B6-CB93-927F-9AAE2AAF06AF -setup Install -type action -title {Install Everything} -component ExecuteAction -active Yes -parent E1B916EC-7954-3176-9CCD-A2B34F6AB47E
+InstallComponent AD6DFD4E-C7E0-E06F-37C5-E61B58A81CDA -setup Install -type action -title {Move Forward} -component MoveForward -active Yes -parent E1B916EC-7954-3176-9CCD-A2B34F6AB47E
+InstallComponent 28903B9F-6157-4809-1C73-9622915B5B49 -setup Install -type pane -title {Setup Complete} -component SetupComplete -active Yes -parent DefaultInstall
+InstallComponent F05B699D-2840-F8CF-FD4C-AE2A4DA8724B -setup Install -type action -conditions {069A02AD-67DD-DFE9-AAAA-1093234F9753 0C58B6DE-F0D8-71AE-100E-2FD9509CEA25} -title {View Readme Checkbutton} -component AddWidget -active Yes -parent 28903B9F-6157-4809-1C73-9622915B5B49
+Condition 069A02AD-67DD-DFE9-AAAA-1093234F9753 -active Yes -parent F05B699D-2840-F8CF-FD4C-AE2A4DA8724B -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 069A02AD-67DD-DFE9-AAAA-1093234F9753
+Condition 0C58B6DE-F0D8-71AE-100E-2FD9509CEA25 -active Yes -parent F05B699D-2840-F8CF-FD4C-AE2A4DA8724B -title {String Is Condition} -component StringIsCondition -TreeObject::id 0C58B6DE-F0D8-71AE-100E-2FD9509CEA25
+InstallComponent 3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3 -setup Install -type action -conditions {7366B0DF-439F-A1C7-C873-F46D5FA9DBEA 08FF9358-76DA-94AC-C21D-57B0C953CFC0} -title {Launch Application Checkbutton} -component AddWidget -active Yes -parent 28903B9F-6157-4809-1C73-9622915B5B49
+Condition 7366B0DF-439F-A1C7-C873-F46D5FA9DBEA -active Yes -parent 3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 7366B0DF-439F-A1C7-C873-F46D5FA9DBEA
+Condition 08FF9358-76DA-94AC-C21D-57B0C953CFC0 -active Yes -parent 3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3 -title {String Is Condition} -component StringIsCondition -TreeObject::id 08FF9358-76DA-94AC-C21D-57B0C953CFC0
+InstallComponent 522D03E3-8080-D61E-E6A9-863B6C61F3A2 -setup Install -type action -conditions {FE1C0274-1BEE-E950-059E-C09E84930F5D E63580B4-3540-BC41-0D59-FC2D679471B1} -title {Desktop Shortcut Checkbutton} -component AddWidget -active Yes -parent 28903B9F-6157-4809-1C73-9622915B5B49
+Condition FE1C0274-1BEE-E950-059E-C09E84930F5D -active Yes -parent 522D03E3-8080-D61E-E6A9-863B6C61F3A2 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id FE1C0274-1BEE-E950-059E-C09E84930F5D
+Condition E63580B4-3540-BC41-0D59-FC2D679471B1 -active Yes -parent 522D03E3-8080-D61E-E6A9-863B6C61F3A2 -title {String Is Condition} -component StringIsCondition -TreeObject::id E63580B4-3540-BC41-0D59-FC2D679471B1
+InstallComponent B5596A3D-1144-577B-F624-E9648DACD74A -setup Install -type action -conditions {A412E199-AE9B-F350-6AF2-0786CEED49EE B5FC0222-8BBA-D4A2-4BD3-C2B49F058238 D2BCC2F7-3ECD-2386-6B31-C2D96D445C39} -title {Quick Launch Shortcut Checkbutton} -component AddWidget -active Yes -parent 28903B9F-6157-4809-1C73-9622915B5B49
+Condition A412E199-AE9B-F350-6AF2-0786CEED49EE -active Yes -parent B5596A3D-1144-577B-F624-E9648DACD74A -title {Platform Condition} -component PlatformCondition -TreeObject::id A412E199-AE9B-F350-6AF2-0786CEED49EE
+Condition B5FC0222-8BBA-D4A2-4BD3-C2B49F058238 -active Yes -parent B5596A3D-1144-577B-F624-E9648DACD74A -title {File Exists Condition} -component FileExistsCondition -TreeObject::id B5FC0222-8BBA-D4A2-4BD3-C2B49F058238
+Condition D2BCC2F7-3ECD-2386-6B31-C2D96D445C39 -active Yes -parent B5596A3D-1144-577B-F624-E9648DACD74A -title {String Is Condition} -component StringIsCondition -TreeObject::id D2BCC2F7-3ECD-2386-6B31-C2D96D445C39
+InstallComponent 34162B1C-E99E-1F3D-84C1-2EA9D125276B -setup Install -type action -title {Prompt to continue installation} -component ConsoleAskYesOrNo -active Yes -parent ConsoleInstall
+InstallComponent 6FDD66EA-4F2D-5D88-9970-001E7D37FDE7 -setup Install -type action -conditions 88BFFC55-0A46-8E06-F212-022BFFE60E1A -title {Exit if they said no} -component Exit -active Yes -parent ConsoleInstall
+Condition 88BFFC55-0A46-8E06-F212-022BFFE60E1A -active Yes -parent 6FDD66EA-4F2D-5D88-9970-001E7D37FDE7 -title {String Is Condition} -component StringIsCondition -TreeObject::id 88BFFC55-0A46-8E06-F212-022BFFE60E1A
+InstallComponent ECBBCF97-F791-4569-6561-9957862F5F0D -setup Install -type action -conditions 1A3D57A8-0715-F069-F661-B3AD0597D0A7 -title {Prompt for install destination} -component ConsoleGetUserInput -active Yes -parent ConsoleInstall
+Condition 1A3D57A8-0715-F069-F661-B3AD0597D0A7 -active Yes -parent ECBBCF97-F791-4569-6561-9957862F5F0D -title {File Permission Condition} -component FilePermissionCondition -TreeObject::id 1A3D57A8-0715-F069-F661-B3AD0597D0A7
+InstallComponent F1B8769A-B5DF-A93B-E827-BF03B90235FD -setup Install -type action -title {Output Installing Message} -component ConsoleMessage -active Yes -parent ConsoleInstall
+InstallComponent 08D96391-CCCE-0DB0-B53B-EF7AE19802DC -setup Install -type action -title {Install Everything} -component ExecuteAction -active Yes -parent ConsoleInstall
+InstallComponent 85C39244-5152-EB74-0F21-461DFC494176 -setup Install -type action -title {Output Install Complete Message} -component ConsoleMessage -active Yes -parent ConsoleInstall
+InstallComponent B78940E7-5647-D8EE-A4D9-74B3A18137BB -setup Install -type action -title Exit -component Exit -active Yes -parent ConsoleInstall
+InstallComponent 0AE39C45-4951-F5A6-16B3-6D15A64573A5 -setup Install -type action -title {Install Everything} -component ExecuteAction -active Yes -parent SilentInstall
+InstallComponent 4BD8E4B3-922C-6DA5-95C2-07640244166A -setup Install -type action -title Exit -component Exit -active Yes -parent SilentInstall
+InstallComponent 45D41D2D-55F3-7CEA-5B0B-200BEA9372D2 -setup Install -type actiongroup -title {Setup Actions} -alias {Setup Actions} -active Yes -parent ActionGroupsInstall
+InstallComponent F9B1D78E-01A8-7D0C-E847-5B3D24812D6D -setup Install -type actiongroup -title {Startup Actions} -alias {Startup Actions} -active Yes -parent ActionGroupsInstall
+InstallComponent 32A3C507-A13A-4ED3-763C-63A98FCB1C13 -setup Install -type action -conditions {078730EC-1365-E325-6F10-B06185E0309D DBB2EE41-078C-8912-13BF-8DC9DA750DA7} -title Exit -component Exit -active Yes -parent F9B1D78E-01A8-7D0C-E847-5B3D24812D6D
+Condition 078730EC-1365-E325-6F10-B06185E0309D -active Yes -parent 32A3C507-A13A-4ED3-763C-63A98FCB1C13 -title {String Is Condition} -component StringIsCondition -TreeObject::id 078730EC-1365-E325-6F10-B06185E0309D
+Condition DBB2EE41-078C-8912-13BF-8DC9DA750DA7 -active Yes -parent 32A3C507-A13A-4ED3-763C-63A98FCB1C13 -title {Ask Yes or No} -component AskYesOrNo -TreeObject::id DBB2EE41-078C-8912-13BF-8DC9DA750DA7
+InstallComponent 09BF1D5B-6C10-56E8-7D71-4AEC89EBF7E7 -setup Install -type action -title {Create Install Panes} -component CreateInstallPanes -active Yes -parent F9B1D78E-01A8-7D0C-E847-5B3D24812D6D
+InstallComponent 3BC0E6F6-AD13-4663-B635-933EB9E1310D -setup Install -type actiongroup -title {Install Actions} -alias {Install Actions} -active Yes -parent ActionGroupsInstall
+InstallComponent 085395C4-0CD8-935C-A4F4-691F06918F86 -setup Install -type action -title {Install Selected Files} -component InstallSelectedFiles -active Yes -parent 3BC0E6F6-AD13-4663-B635-933EB9E1310D
+InstallComponent 13192D9A-C9FF-878B-C906-F9026AD5525A -setup Install -type action -conditions FF47761C-3CB5-DA6B-199D-3B0FCB90F30A -title {Install Uninstaller} -component InstallUninstaller -active Yes -parent 3BC0E6F6-AD13-4663-B635-933EB9E1310D
+Condition FF47761C-3CB5-DA6B-199D-3B0FCB90F30A -active Yes -parent 13192D9A-C9FF-878B-C906-F9026AD5525A -title {String Is Condition} -component StringIsCondition -TreeObject::id FF47761C-3CB5-DA6B-199D-3B0FCB90F30A
+InstallComponent 0D0AAF12-A9F2-E1AA-EB28-267DCC52F75A -setup Install -type action -conditions 73FF524D-EC19-F13A-4A59-B694F4D1B4B7 -title {Windows Uninstall Registry} -component AddWindowsUninstallEntry -active Yes -parent 3BC0E6F6-AD13-4663-B635-933EB9E1310D
+Condition 73FF524D-EC19-F13A-4A59-B694F4D1B4B7 -active Yes -parent 0D0AAF12-A9F2-E1AA-EB28-267DCC52F75A -title {String Is Condition} -component StringIsCondition -TreeObject::id 73FF524D-EC19-F13A-4A59-B694F4D1B4B7
+InstallComponent D3A78590-1299-FDD6-4D18-4C7D7F569532 -setup Install -type action -conditions {5381A1F4-ED91-DB2E-2E57-772FE97930A8 75AA4E77-E097-291C-370C-92009D009FF6} -title {Program Shortcut linux} -component InstallProgramFolderShortcut -alias {Program Shortcut linux} -active Yes -parent 3BC0E6F6-AD13-4663-B635-933EB9E1310D
+Condition 5381A1F4-ED91-DB2E-2E57-772FE97930A8 -active Yes -parent D3A78590-1299-FDD6-4D18-4C7D7F569532 -title {String Is Condition} -component StringIsCondition -TreeObject::id 449CA4EC-0607-8107-D0C5-35C21D9898E5
+Condition 75AA4E77-E097-291C-370C-92009D009FF6 -active Yes -parent D3A78590-1299-FDD6-4D18-4C7D7F569532 -title {Is Linux} -component PlatformCondition -alias {Is Linux} -TreeObject::id 75AA4E77-E097-291C-370C-92009D009FF6
+InstallComponent A1734B84-4CE8-CB7C-76BA-D607FF9B26DA -setup Install -type action -conditions {449CA4EC-0607-8107-D0C5-35C21D9898E5 D43567C3-01A1-BE88-D2E2-9CEE820E4BDC} -title {Program Shortcut win} -component InstallProgramFolderShortcut -alias {Program Shortcut linux} -active Yes -parent 3BC0E6F6-AD13-4663-B635-933EB9E1310D
+Condition 449CA4EC-0607-8107-D0C5-35C21D9898E5 -active Yes -parent A1734B84-4CE8-CB7C-76BA-D607FF9B26DA -title {String Is Condition} -component StringIsCondition -TreeObject::id 449CA4EC-0607-8107-D0C5-35C21D9898E5
+Condition D43567C3-01A1-BE88-D2E2-9CEE820E4BDC -active Yes -parent A1734B84-4CE8-CB7C-76BA-D607FF9B26DA -title {Is Windows} -component PlatformCondition -alias {Is Windows} -TreeObject::id D43567C3-01A1-BE88-D2E2-9CEE820E4BDC
+InstallComponent 5072BAD0-F247-D4C3-86BB-AB88567527F8 -setup Install -type action -conditions E982D8BA-A439-895E-0C4E-D96045DFAF29 -title {Uninstall Shortcut} -component InstallProgramFolderShortcut -active Yes -parent 3BC0E6F6-AD13-4663-B635-933EB9E1310D
+Condition E982D8BA-A439-895E-0C4E-D96045DFAF29 -active Yes -parent 5072BAD0-F247-D4C3-86BB-AB88567527F8 -title {String Is Condition} -component StringIsCondition -TreeObject::id E982D8BA-A439-895E-0C4E-D96045DFAF29
+InstallComponent ACEB199B-FAD3-98B8-2D94-A6B940B464A9 -setup Install -type actiongroup -title {Finish Actions} -alias {Finish Actions} -active Yes -parent ActionGroupsInstall
+InstallComponent F77B3EAF-2480-1A28-9A26-1AE8243DC5AD -setup Install -type action -conditions {781B53DD-0A23-88F5-AC85-C4DE5B1BDA0D DED47A9D-C1AF-A79C-268C-DF1650B48F14 6FC73719-2702-77FF-F70E-7DF1C1B894F6} -title {Install Desktop Shortcut linux} -component InstallDesktopShortcut -alias {Install Desktop Shortcut linux} -active Yes -parent ACEB199B-FAD3-98B8-2D94-A6B940B464A9
+Condition 781B53DD-0A23-88F5-AC85-C4DE5B1BDA0D -active Yes -parent F77B3EAF-2480-1A28-9A26-1AE8243DC5AD -title {String Is Condition} -component StringIsCondition -TreeObject::id A92BC0CB-2076-0B2E-4D92-4C5D90CAFA30
+Condition DED47A9D-C1AF-A79C-268C-DF1650B48F14 -active Yes -parent F77B3EAF-2480-1A28-9A26-1AE8243DC5AD -title {File Exists Condition} -component FileExistsCondition -TreeObject::id FD78DB97-3309-BCDC-0A58-8FAC16D1C87B
+Condition 6FC73719-2702-77FF-F70E-7DF1C1B894F6 -active Yes -parent F77B3EAF-2480-1A28-9A26-1AE8243DC5AD -title {Is Linux} -component PlatformCondition -TreeObject::id 6FC73719-2702-77FF-F70E-7DF1C1B894F6
+InstallComponent 54EB2CDA-B1C5-9191-9840-92A6EA65EB2D -setup Install -type action -conditions {A92BC0CB-2076-0B2E-4D92-4C5D90CAFA30 FD78DB97-3309-BCDC-0A58-8FAC16D1C87B 6119CCE4-A8C8-9988-861B-0D2499172BE2} -title {Install Desktop Shortcut win} -component InstallDesktopShortcut -alias {Install Desktop Shortcut win} -active Yes -parent ACEB199B-FAD3-98B8-2D94-A6B940B464A9
+Condition A92BC0CB-2076-0B2E-4D92-4C5D90CAFA30 -active Yes -parent 54EB2CDA-B1C5-9191-9840-92A6EA65EB2D -title {String Is Condition} -component StringIsCondition -TreeObject::id A92BC0CB-2076-0B2E-4D92-4C5D90CAFA30
+Condition FD78DB97-3309-BCDC-0A58-8FAC16D1C87B -active Yes -parent 54EB2CDA-B1C5-9191-9840-92A6EA65EB2D -title {File Exists Condition} -component FileExistsCondition -TreeObject::id FD78DB97-3309-BCDC-0A58-8FAC16D1C87B
+Condition 6119CCE4-A8C8-9988-861B-0D2499172BE2 -active Yes -parent 54EB2CDA-B1C5-9191-9840-92A6EA65EB2D -title {Is Windows} -component PlatformCondition -TreeObject::id 6119CCE4-A8C8-9988-861B-0D2499172BE2
+InstallComponent 3CE78F64-F6D9-224A-D2E6-1A4C06B4B837 -setup Install -type action -conditions {4453EE62-5459-8B88-2454-FCE7F1846B8D F8ACFCFE-D262-905B-07D2-1878C7318974} -title {Install Quick Launch Shortcut} -component InstallWindowsShortcut -active Yes -parent ACEB199B-FAD3-98B8-2D94-A6B940B464A9
+Condition 4453EE62-5459-8B88-2454-FCE7F1846B8D -active Yes -parent 3CE78F64-F6D9-224A-D2E6-1A4C06B4B837 -title {String Is Condition} -component StringIsCondition -TreeObject::id 4453EE62-5459-8B88-2454-FCE7F1846B8D
+Condition F8ACFCFE-D262-905B-07D2-1878C7318974 -active Yes -parent 3CE78F64-F6D9-224A-D2E6-1A4C06B4B837 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id F8ACFCFE-D262-905B-07D2-1878C7318974
+InstallComponent 7274AE39-5471-DFD1-B914-B271EC6A3CCC -setup Install -type action -conditions {29910E11-3FF9-2512-327C-CC7CA943F979 F9BF2790-0C07-93F4-24A8-8F020F0E1D98 31CA25D2-5631-7196-4B3F-134F92658340 6376D578-5F50-AA62-B0F9-FCF408927883} -title {View Readme Window} -component TextWindow -active Yes -parent ACEB199B-FAD3-98B8-2D94-A6B940B464A9
+Condition 29910E11-3FF9-2512-327C-CC7CA943F979 -active Yes -parent 7274AE39-5471-DFD1-B914-B271EC6A3CCC -title {String Is Condition} -component StringIsCondition -TreeObject::id E8BD2009-4F63-1801-6277-CD12ADF69363
+Condition F9BF2790-0C07-93F4-24A8-8F020F0E1D98 -active Yes -parent 7274AE39-5471-DFD1-B914-B271EC6A3CCC -title {String Is Condition} -component StringIsCondition -TreeObject::id 631D071F-E566-DC0E-59DF-3204FBE5A71C
+Condition 31CA25D2-5631-7196-4B3F-134F92658340 -active Yes -parent 7274AE39-5471-DFD1-B914-B271EC6A3CCC -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 6241F4A8-B83C-DB30-D278-1656F7E20EB5
+Condition 6376D578-5F50-AA62-B0F9-FCF408927883 -active Yes -parent 7274AE39-5471-DFD1-B914-B271EC6A3CCC -title {String Match Condition} -component StringMatchCondition -TreeObject::id 6376D578-5F50-AA62-B0F9-FCF408927883
+InstallComponent 463CB205-D3DB-747D-3003-A0EC3E0A7971 -setup Install -type action -conditions {E8BD2009-4F63-1801-6277-CD12ADF69363 631D071F-E566-DC0E-59DF-3204FBE5A71C 6241F4A8-B83C-DB30-D278-1656F7E20EB5 859A3983-63B3-6384-1FEA-A8D1E4DECE63} -title {View Leeme Window} -component TextWindow -alias {View Leeme Window} -active Yes -parent ACEB199B-FAD3-98B8-2D94-A6B940B464A9
+Condition E8BD2009-4F63-1801-6277-CD12ADF69363 -active Yes -parent 463CB205-D3DB-747D-3003-A0EC3E0A7971 -title {String Is Condition} -component StringIsCondition -TreeObject::id E8BD2009-4F63-1801-6277-CD12ADF69363
+Condition 631D071F-E566-DC0E-59DF-3204FBE5A71C -active Yes -parent 463CB205-D3DB-747D-3003-A0EC3E0A7971 -title {String Is Condition} -component StringIsCondition -TreeObject::id 631D071F-E566-DC0E-59DF-3204FBE5A71C
+Condition 6241F4A8-B83C-DB30-D278-1656F7E20EB5 -active Yes -parent 463CB205-D3DB-747D-3003-A0EC3E0A7971 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 6241F4A8-B83C-DB30-D278-1656F7E20EB5
+Condition 859A3983-63B3-6384-1FEA-A8D1E4DECE63 -active Yes -parent 463CB205-D3DB-747D-3003-A0EC3E0A7971 -title {String Match Condition} -component StringMatchCondition -TreeObject::id 859A3983-63B3-6384-1FEA-A8D1E4DECE63
+InstallComponent C615CE3D-026B-2F47-A326-53759D46486E -setup Install -type action -conditions {8529CE0D-A12B-AE06-8174-64D392AF3A5F FADA85B6-5B3C-4924-8862-CE7AA23E989C F01FA8CD-E8AF-2A92-16E9-2AA759676C91} -title {Launch Application} -component ExecuteExternalProgram -active Yes -parent ACEB199B-FAD3-98B8-2D94-A6B940B464A9
+Condition 8529CE0D-A12B-AE06-8174-64D392AF3A5F -active Yes -parent C615CE3D-026B-2F47-A326-53759D46486E -title {String Is Condition} -component StringIsCondition -TreeObject::id 8529CE0D-A12B-AE06-8174-64D392AF3A5F
+Condition FADA85B6-5B3C-4924-8862-CE7AA23E989C -active Yes -parent C615CE3D-026B-2F47-A326-53759D46486E -title {String Is Condition} -component StringIsCondition -TreeObject::id FADA85B6-5B3C-4924-8862-CE7AA23E989C
+Condition F01FA8CD-E8AF-2A92-16E9-2AA759676C91 -active Yes -parent C615CE3D-026B-2F47-A326-53759D46486E -title {File Exists Condition} -component FileExistsCondition -TreeObject::id F01FA8CD-E8AF-2A92-16E9-2AA759676C91
+InstallComponent 13CD08AF-ABF7-957A-643D-5EFB11CC0285 -setup Install -type actiongroup -title {Cancel Actions} -alias {Cancel Actions} -active Yes -parent ActionGroupsInstall
+InstallComponent 024B8841-A37F-119B-9E17-4128EFB1B58B -setup Install -type actiongroup -title {Install addons actions} -alias {Install addons actions} -active Yes -parent ActionGroupsInstall
+InstallComponent 02754DC9-71D4-AADA-7DDD-6D0194848120 -setup Install -type action -conditions 7D670287-273F-0090-6C50-45F648DBC348 -title {Create Install Folder} -component CreateFolder -alias {Create Install Folder} -active Yes -parent 024B8841-A37F-119B-9E17-4128EFB1B58B
+Condition 7D670287-273F-0090-6C50-45F648DBC348 -active Yes -parent 02754DC9-71D4-AADA-7DDD-6D0194848120 -title {Directory Test Condition} -component DirectoryTestCondition -TreeObject::id 7D670287-273F-0090-6C50-45F648DBC348
+InstallComponent A31B7E49-112A-8FDD-85F5-BF7BB734800D -setup Install -type action -conditions 70FC288C-A32A-C59D-8575-1321AA0F48F2 -title {Delete File} -component DeleteFile -active Yes -parent 024B8841-A37F-119B-9E17-4128EFB1B58B
+Condition 70FC288C-A32A-C59D-8575-1321AA0F48F2 -active Yes -parent A31B7E49-112A-8FDD-85F5-BF7BB734800D -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 70FC288C-A32A-C59D-8575-1321AA0F48F2
+InstallComponent 13B0CFA5-2D5C-AB51-C61F-482B3ADF17BF -setup Install -type action -title {Extract Package Set} -component ExecuteScript -alias {Extract Package Set} -active Yes -parent 024B8841-A37F-119B-9E17-4128EFB1B58B
+InstallComponent 385BE7D0-EFF9-B688-FFC5-C2EAC8979C85 -setup Install -type action -conditions 954D9C20-6666-F732-3851-B5CDEFEA3759 -title {Launch addons manager not windows} -component ExecuteExternalProgram -alias {Launch addons manager not windows} -active Yes -parent 024B8841-A37F-119B-9E17-4128EFB1B58B
+Condition 954D9C20-6666-F732-3851-B5CDEFEA3759 -active Yes -parent 385BE7D0-EFF9-B688-FFC5-C2EAC8979C85 -title {Platform Condition} -component PlatformCondition -TreeObject::id 954D9C20-6666-F732-3851-B5CDEFEA3759
+InstallComponent 506E4FD1-B16E-4C30-D897-430B9853AAF3 -setup Install -type action -conditions CA6B7F07-9EA4-6E57-8D8B-D0B022BAC177 -title {Launch addons manager windows} -component ExecuteExternalProgram -alias {Launch addons manager windows} -active Yes -parent 024B8841-A37F-119B-9E17-4128EFB1B58B
+Condition CA6B7F07-9EA4-6E57-8D8B-D0B022BAC177 -active Yes -parent 506E4FD1-B16E-4C30-D897-430B9853AAF3 -title {Platform Condition} -component PlatformCondition -TreeObject::id CA6B7F07-9EA4-6E57-8D8B-D0B022BAC177
+InstallComponent 33EE3113-5C4F-F73E-DB60-5A93F3ED3841 -setup Install -type actiongroup -conditions D93FF951-4F22-E257-4566-2E3DA02B4BBC -title {Install JRE win actions} -alias {Install JRE win actions} -active Yes -parent ActionGroupsInstall
+Condition D93FF951-4F22-E257-4566-2E3DA02B4BBC -active Yes -parent 33EE3113-5C4F-F73E-DB60-5A93F3ED3841 -title {Is windows} -component PlatformCondition -TreeObject::id D93FF951-4F22-E257-4566-2E3DA02B4BBC
+InstallComponent 5440E8F0-4B75-D6D8-950D-47E922DD1339 -setup Install -type action -title {Append Running JRE Installer Text To Widget} -component AppendTextToWidget -alias {Append Running JRE Installer Text To Widget} -active Yes -parent 33EE3113-5C4F-F73E-DB60-5A93F3ED3841
+InstallComponent DF3E5505-8994-6B0D-C088-B2891DA47DC8 -setup Install -type action -conditions 6E41513E-D669-B21C-1527-8EED048FD65A -title {Execute JRE Installer Windows} -component ExecuteExternalProgram -operator OR -alias {Execute JRE Installer Windows} -active Yes -parent 33EE3113-5C4F-F73E-DB60-5A93F3ED3841
+Condition 6E41513E-D669-B21C-1527-8EED048FD65A -active Yes -parent DF3E5505-8994-6B0D-C088-B2891DA47DC8 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 1F5F719D-A759-EE27-6B19-BCBA4C491043
+InstallComponent F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0 -setup Install -type action -title {Append Done Text To Widget} -component AppendTextToWidget -alias {Append Done Text To Widget} -active Yes -parent 33EE3113-5C4F-F73E-DB60-5A93F3ED3841
+InstallComponent B394DB55-BF47-6235-CE6E-7B0CB53E9270 -setup Install -type action -conditions 65402FF4-A10C-27F0-E55F-3A113D86B4B9 -title {Delete JRE Windows Installer} -component DeleteFile -alias {Delete JRE Windows Installer} -active Yes -parent 33EE3113-5C4F-F73E-DB60-5A93F3ED3841
+Condition 65402FF4-A10C-27F0-E55F-3A113D86B4B9 -active Yes -parent B394DB55-BF47-6235-CE6E-7B0CB53E9270 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id E93E667B-F9F2-902F-E5AD-A7CFE45BCD7A
+InstallComponent 0A09E8FF-E3FC-93A2-4010-193F58CC0642 -setup Install -type action -title {Locate System JRE} -component LocateJavaRuntime -alias {Locate System JRE} -active Yes -parent 33EE3113-5C4F-F73E-DB60-5A93F3ED3841
+InstallComponent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D -setup Install -type actiongroup -conditions 6F6AFA6C-6297-9545-7A41-B0D926BECCAA -title {Install JRE linux actions} -operator OR -alias {Install JRE linux actions} -active Yes -parent ActionGroupsInstall
+Condition 6F6AFA6C-6297-9545-7A41-B0D926BECCAA -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D -title {Is Linux} -component PlatformCondition -TreeObject::id 6F6AFA6C-6297-9545-7A41-B0D926BECCAA
+InstallComponent 5B5E7497-53B4-D13B-6EA5-F9FF11387817 -setup Install -type action -conditions 1B719E7E-E7E7-D543-F45B-B9A6421CB96B -title {Set JRE Linux installer as executable} -component ChangeFilePermissions -alias {Set JRE Linux installer as executable} -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+Condition 1B719E7E-E7E7-D543-F45B-B9A6421CB96B -active Yes -parent 5B5E7497-53B4-D13B-6EA5-F9FF11387817 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 1B719E7E-E7E7-D543-F45B-B9A6421CB96B
+InstallComponent 90DB86EE-13EB-6DED-4F6A-3F1D42FBA767 -setup Install -type action -title {Append Running JRE Installer Text To Widget} -component AppendTextToWidget -alias {Append Running JRE Installer Text To Widget} -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+InstallComponent 99A14DCD-9B4A-1D55-DB92-AE41C41B21E7 -setup Install -type action -conditions 1F5F719D-A759-EE27-6B19-BCBA4C491043 -title {Execute JRE Installer Linux} -component ExecuteExternalProgram -operator OR -alias {Execute JRE Installer Linux} -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+Condition 1F5F719D-A759-EE27-6B19-BCBA4C491043 -active Yes -parent 99A14DCD-9B4A-1D55-DB92-AE41C41B21E7 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 1F5F719D-A759-EE27-6B19-BCBA4C491043
+InstallComponent 37D8727F-784B-971D-0B25-EF453D774135 -setup Install -type action -title {Append Done Text To Widget} -component AppendTextToWidget -alias {Append Done Text To Widget} -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+InstallComponent 3FEEB8E5-85B0-9F38-814E-1E4A18C2ED06 -setup Install -type action -conditions 6E97E3E7-3454-133E-F3F0-742D76138EF3 -title {Delete JRE Linux Installer} -component DeleteFile -alias {Delete JRE Linux Installer} -active No -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+Condition 6E97E3E7-3454-133E-F3F0-742D76138EF3 -active Yes -parent 3FEEB8E5-85B0-9F38-814E-1E4A18C2ED06 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id E93E667B-F9F2-902F-E5AD-A7CFE45BCD7A
+InstallComponent E0C961A8-3EB7-F9C4-D3B3-6269173D714D -setup Install -type action -title {Set JavaExecutable} -component SetVirtualText -alias {Set JavaExecutable} -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+InstallComponent 68A0699B-D788-D637-8E67-D0753F71EE5B -setup Install -type action -title {Set JavaFound} -component SetVirtualText -alias {Set JavaFound} -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+InstallComponent 7EF426AC-B8BA-9C7E-AF65-5B55FDF139D6 -setup Install -type action -title {Set JavaHome} -component SetVirtualText -alias {Set JavaHome} -active Yes -parent 504A658B-16DC-CF0C-A098-CD36F2F9CF0D
+InstallComponent 006FDE68-650C-14ED-87B1-D88460CE45AF -setup Install -type actiongroup -conditions {D7E66AB5-8156-10C5-385F-2AA1D1BC5534 7608FF76-ABB3-FBD7-F4ED-06DBCC5B2895} -title {Extract JRE linux actions} -alias {Extract JRE linux actions} -active Yes -parent ActionGroupsInstall
+Condition D7E66AB5-8156-10C5-385F-2AA1D1BC5534 -active Yes -parent 006FDE68-650C-14ED-87B1-D88460CE45AF -title {JRE Linux does not exist} -component FileExistsCondition -TreeObject::id D7E66AB5-8156-10C5-385F-2AA1D1BC5534
+Condition 7608FF76-ABB3-FBD7-F4ED-06DBCC5B2895 -active Yes -parent 006FDE68-650C-14ED-87B1-D88460CE45AF -title {Is Linux} -component PlatformCondition -TreeObject::id 7608FF76-ABB3-FBD7-F4ED-06DBCC5B2895
+InstallComponent 841D53AB-80AE-04E1-E02D-0E462596D85E -setup Install -type action -conditions A388D351-A619-711B-5BD8-76B2616A1089 -title {Create gvSIG JRE linux parent Folder} -component CreateFolder -alias {Create Install Folder} -active Yes -parent 006FDE68-650C-14ED-87B1-D88460CE45AF
+Condition A388D351-A619-711B-5BD8-76B2616A1089 -active Yes -parent 841D53AB-80AE-04E1-E02D-0E462596D85E -title {Directory Test Condition} -component DirectoryTestCondition -TreeObject::id 7D670287-273F-0090-6C50-45F648DBC348
+InstallComponent 7C9A3C90-7B43-07E6-348E-8A4C74DA066D -setup Install -type action -conditions 545C6FC9-C88D-ECB5-C5BA-0664D84461EC -title {Delete old JRE Linux installer} -component DeleteFile -alias {Delete old JRE Linux installer} -active Yes -parent 006FDE68-650C-14ED-87B1-D88460CE45AF
+Condition 545C6FC9-C88D-ECB5-C5BA-0664D84461EC -active Yes -parent 7C9A3C90-7B43-07E6-348E-8A4C74DA066D -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 545C6FC9-C88D-ECB5-C5BA-0664D84461EC
+InstallComponent 9E5890BE-4C5B-5EB3-A0FC-0BB186483CFC -setup Install -type action -title {Extract JRE Linux Installer} -component ExecuteScript -alias {Extract JRE Linux Installer} -active Yes -parent 006FDE68-650C-14ED-87B1-D88460CE45AF
+InstallComponent 4F9ADD29-52F0-9FD7-8990-C3B6DC7AA03B -setup Install -type action -title {Make JRE Linux installer executable} -component ChangeFilePermissions -alias {Make JRE Linux installer executable} -active Yes -parent 006FDE68-650C-14ED-87B1-D88460CE45AF
+InstallComponent 2164936F-69B0-98AF-8BD5-CDA4E8918CAA -setup Install -type actiongroup -conditions {E9DC0E80-7199-F2CA-92D8-4F66EB09357B 25B8A850-E1C9-D8B3-DEB3-2F93655B4539} -title {Extract JRE win actions} -alias {Extract JRE win actions} -active Yes -parent ActionGroupsInstall
+Condition E9DC0E80-7199-F2CA-92D8-4F66EB09357B -active Yes -parent 2164936F-69B0-98AF-8BD5-CDA4E8918CAA -title {JRE Windows installer does not exist} -component FileExistsCondition -TreeObject::id E9DC0E80-7199-F2CA-92D8-4F66EB09357B
+Condition 25B8A850-E1C9-D8B3-DEB3-2F93655B4539 -active Yes -parent 2164936F-69B0-98AF-8BD5-CDA4E8918CAA -title {Is Windows} -component PlatformCondition -TreeObject::id 25B8A850-E1C9-D8B3-DEB3-2F93655B4539
+InstallComponent F62A221A-BCE8-C00C-2FDC-3BF838236677 -setup Install -type action -conditions 0D46B00C-D175-ACF0-1769-951B9E7B883F -title {Create gvSIG JRE win parent Folder} -component CreateFolder -alias {Create Install Folder} -active Yes -parent 2164936F-69B0-98AF-8BD5-CDA4E8918CAA
+Condition 0D46B00C-D175-ACF0-1769-951B9E7B883F -active Yes -parent F62A221A-BCE8-C00C-2FDC-3BF838236677 -title {Directory Test Condition} -component DirectoryTestCondition -TreeObject::id 7D670287-273F-0090-6C50-45F648DBC348
+InstallComponent 67386941-595C-9CA1-F5FF-F82F2F818A9B -setup Install -type action -conditions 73B90B6A-AB60-585B-2F18-A5A2613FB63F -title {Delete old JRE Win installer} -component DeleteFile -alias {Delete old JRE Linux installer} -active Yes -parent 2164936F-69B0-98AF-8BD5-CDA4E8918CAA
+Condition 73B90B6A-AB60-585B-2F18-A5A2613FB63F -active Yes -parent 67386941-595C-9CA1-F5FF-F82F2F818A9B -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 545C6FC9-C88D-ECB5-C5BA-0664D84461EC
+InstallComponent A28451B2-C088-700D-C29F-C1F7DD156966 -setup Install -type action -title {Extract JRE Win Installer} -component ExecuteScript -alias {Extract JRE Linux Installer} -active Yes -parent 2164936F-69B0-98AF-8BD5-CDA4E8918CAA
+InstallComponent C5ACE394-BDED-24ED-7543-E3AE89E1E84F -setup Install -type actiongroup -title {Locate User selected JRE actions} -alias {Locate User selected JRE actions} -active Yes -parent ActionGroupsInstall
+InstallComponent 0E17A1C2-2ACC-F545-9C5A-670473A1323D -setup Install -type action -title {Locate Java Runtime} -component LocateJavaRuntime -active Yes -parent C5ACE394-BDED-24ED-7543-E3AE89E1E84F
+InstallComponent F2A90D63-4115-52B2-1A71-0B8287C4960E -setup Install -type action -conditions 3AEEFB5E-F15B-BBCD-2F87-4A5838958925 -title {Message Box} -component MessageBox -active Yes -parent C5ACE394-BDED-24ED-7543-E3AE89E1E84F
+Condition 3AEEFB5E-F15B-BBCD-2F87-4A5838958925 -active Yes -parent F2A90D63-4115-52B2-1A71-0B8287C4960E -title {String Is Condition} -component StringIsCondition -TreeObject::id 2BAF9929-1428-9159-82E5-C0B165F444AB
+InstallComponent 804ABF00-38E4-3FF5-4DAD-A066F21DF3BA -setup Uninstall -type pane -title Uninstall -component Uninstall -active Yes -parent StandardUninstall
+InstallComponent 6EDA6BA7-805C-D7DD-1259-45D6EA1EF8EC -setup Uninstall -type action -title {Modify Widget} -component ModifyWidget -active Yes -parent 804ABF00-38E4-3FF5-4DAD-A066F21DF3BA
+InstallComponent 06D17A02-E519-F977-B53B-B02434A49BCD -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent 804ABF00-38E4-3FF5-4DAD-A066F21DF3BA
+InstallComponent 21BF2567-C011-6252-7A5D-CC9D5251131A -setup Uninstall -type action -title {Move Forward} -component MoveForward -active Yes -parent 804ABF00-38E4-3FF5-4DAD-A066F21DF3BA
+InstallComponent 9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5 -setup Uninstall -type pane -conditions 781B2C5D-2AC5-0B09-41FA-CF0592E15B9C -title {Uninstall Details} -component UninstallDetails -active Yes -parent StandardUninstall
+Condition 781B2C5D-2AC5-0B09-41FA-CF0592E15B9C -active Yes -parent 9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5 -title {String Is Condition} -component StringIsCondition -TreeObject::id 781B2C5D-2AC5-0B09-41FA-CF0592E15B9C
+InstallComponent 11D275E1-5BA2-43CF-902A-7AE6AC0BD394 -setup Uninstall -type action -title {Delete File} -component DeleteFile -active Yes -parent 9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5
+InstallComponent 2D99C08B-3F46-C308-8782-87AEC38E8A03 -setup Uninstall -type pane -title {Uninstall Complete} -component UninstallComplete -active Yes -parent StandardUninstall
+InstallComponent 5A3654A2-CDBB-7E2C-CD60-3D6C150C07C3 -setup Uninstall -type action -title {Console Ask Yes Or No} -component ConsoleAskYesOrNo -active Yes -parent ConsoleUninstall
+InstallComponent 13432B0E-C723-3674-28AB-015BCC3C9299 -setup Uninstall -type action -conditions 404D5A5B-B1EA-5674-A375-241E5261DF7C -title Exit -component Exit -active Yes -parent ConsoleUninstall
+Condition 404D5A5B-B1EA-5674-A375-241E5261DF7C -active Yes -parent 13432B0E-C723-3674-28AB-015BCC3C9299 -title {String Is Condition} -component StringIsCondition -TreeObject::id 404D5A5B-B1EA-5674-A375-241E5261DF7C
+InstallComponent DDFB3B25-32C6-8039-5760-8F6BF9C270E5 -setup Uninstall -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleUninstall
+InstallComponent 51B70479-768E-D076-AAEC-80F5B46B718D -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent ConsoleUninstall
+InstallComponent 9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02 -setup Uninstall -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleUninstall
+InstallComponent C81F2143-187C-59E5-A068-4313973E90BF -setup Uninstall -type action -title Exit -component Exit -active Yes -parent ConsoleUninstall
+InstallComponent DDEB1B51-B73A-16D1-F636-5381C7AD3ED4 -setup Uninstall -type action -title {Uninstall Everything} -component ExecuteAction -active Yes -parent SilentUninstall
+InstallComponent 80982668-99DF-08B5-CB0E-58172E55F28F -setup Uninstall -type action -title Exit -component Exit -active Yes -parent SilentUninstall
+InstallComponent 3599D3A7-E5BD-6D17-3885-06C6194053EC -setup Uninstall -type actiongroup -title {Setup Actions} -alias {Setup Actions} -active Yes -parent ActionGroupsUninstall
+InstallComponent 9C9B54FA-68E6-2402-97C3-C65F1E80E190 -setup Uninstall -type actiongroup -title {Startup Actions} -alias {Startup Actions} -active Yes -parent ActionGroupsUninstall
+InstallComponent C3F4194E-4509-43E6-698F-FB9350FFF533 -setup Uninstall -type action -conditions {D302703B-CFAA-1E4C-1114-220BC704199F 5456E2BC-1CF2-FCC0-3328-61F0E191FAC2} -title Exit -component Exit -active Yes -parent 9C9B54FA-68E6-2402-97C3-C65F1E80E190
+Condition D302703B-CFAA-1E4C-1114-220BC704199F -active Yes -parent C3F4194E-4509-43E6-698F-FB9350FFF533 -title {String Is Condition} -component StringIsCondition -TreeObject::id D302703B-CFAA-1E4C-1114-220BC704199F
+Condition 5456E2BC-1CF2-FCC0-3328-61F0E191FAC2 -active Yes -parent C3F4194E-4509-43E6-698F-FB9350FFF533 -title {Ask Yes or No} -component AskYesOrNo -TreeObject::id 5456E2BC-1CF2-FCC0-3328-61F0E191FAC2
+InstallComponent 3664EF37-EC01-1464-7FB0-DDDFDD18CD58 -setup Uninstall -type actiongroup -title {Uninstall Actions} -alias {Uninstall Actions} -active Yes -parent ActionGroupsUninstall
+InstallComponent FCAD51A8-791C-2E4B-3132-E2C061BD037F -setup Uninstall -type action -title {Uninstall Selected Files} -component UninstallSelectedFiles -active Yes -parent 3664EF37-EC01-1464-7FB0-DDDFDD18CD58
+InstallComponent F8CDD940-8CB4-6F83-3934-22F1D4A1A2B8 -setup Uninstall -type actiongroup -title {Finish Actions} -alias {Finish Actions} -active Yes -parent ActionGroupsUninstall
+InstallComponent 294C9E81-C21A-4227-018C-E3B8864F5643 -setup Uninstall -type actiongroup -title {Cancel Actions} -alias {Cancel Actions} -active Yes -parent ActionGroupsUninstall
+
+array set Properties {
+006FDE68-650C-14ED-87B1-D88460CE45AF,Alias
+{Extract JRE linux actions}
+
+006FDE68-650C-14ED-87B1-D88460CE45AF,Conditions
+{2 conditions}
+
+024B8841-A37F-119B-9E17-4128EFB1B58B,Alias
+{Install addons actions}
+
+024B8841-A37F-119B-9E17-4128EFB1B58B,Conditions
+{0 conditions}
+
+02754DC9-71D4-AADA-7DDD-6D0194848120,Alias
+{Create Install Folder}
+
+02754DC9-71D4-AADA-7DDD-6D0194848120,Conditions
+{1 condition}
+
+02754DC9-71D4-AADA-7DDD-6D0194848120,FolderName
+{<%InstallDir%>/install}
+
+069A02AD-67DD-DFE9-AAAA-1093234F9753,CheckCondition
+{Before Action is Executed}
+
+069A02AD-67DD-DFE9-AAAA-1093234F9753,Filename
+{<%ProgramReadme%>}
+
+06D17A02-E519-F977-B53B-B02434A49BCD,Action
+{Uninstall Actions}
+
+06D17A02-E519-F977-B53B-B02434A49BCD,Conditions
+{0 conditions}
+
+078730EC-1365-E325-6F10-B06185E0309D,CheckCondition
+{Before Action is Executed}
+
+078730EC-1365-E325-6F10-B06185E0309D,String
+{<%GuiMode%>}
+
+080AA25D-28FD-A285-06E5-FEE568DE91F0,Conditions
+{0 conditions}
+
+080AA25D-28FD-A285-06E5-FEE568DE91F0,Files
+{gvSIG.sh}
+
+080AA25D-28FD-A285-06E5-FEE568DE91F0,StringMap
+{"JAVA_HOME=${JAVA_HOME}" "JAVA_HOME='<%JavaHome%>'"
+"GVSIG_HOME=`pwd`"  "GVSIG_HOME='<%InstallDir%>'"}
+
+085395C4-0CD8-935C-A4F4-691F06918F86,Conditions
+{0 conditions}
+
+08D0E10E-906F-1933-B783-5C899E50C968,Alias
+{Locate System JRE}
+
+08D0E10E-906F-1933-B783-5C899E50C968,Conditions
+{0 conditions}
+
+08D0E10E-906F-1933-B783-5C899E50C968,MinimumVersion
+{1.5}
+
+08D0E10E-906F-1933-B783-5C899E50C968,PromptMessage,subst
+{1}
+
+08D0E10E-906F-1933-B783-5C899E50C968,SearchPath
+{<%JRELinProvidedHome%>;<%GVSIGHome%>/jre/1.6.0_20;Default Search Path}
+
+08D0E10E-906F-1933-B783-5C899E50C968,StatusMessage,subst
+{1}
+
+08D96391-CCCE-0DB0-B53B-EF7AE19802DC,Action
+{Install Actions}
+
+08FF9358-76DA-94AC-C21D-57B0C953CFC0,CheckCondition
+{Before Action is Executed}
+
+08FF9358-76DA-94AC-C21D-57B0C953CFC0,Operator
+{false}
+
+08FF9358-76DA-94AC-C21D-57B0C953CFC0,String
+{<%InstallStopped%>}
+
+09BF1D5B-6C10-56E8-7D71-4AEC89EBF7E7,Conditions
+{0 conditions}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,Alias
+{Locate System JRE}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,Conditions
+{0 conditions}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,MinimumVersion
+{1.5}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage,subst
+{1}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,SearchPath
+{Default Search Path}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage,subst
+{1}
+
+0AE39C45-4951-F5A6-16B3-6D15A64573A5,Action
+{Install Actions}
+
+0B1D2CFD-CF3F-0A84-2C33-6B9A957B3181,Destination
+{<%InstallDir%>}
+
+0B1D2CFD-CF3F-0A84-2C33-6B9A957B3181,FileSize
+{36707818}
+
+0B1D2CFD-CF3F-0A84-2C33-6B9A957B3181,Name
+{gvSIG base}
+
+0B50C30F-AF99-1AF1-0F7D-8CB0073B0080,Action
+{Locate User selected JRE actions}
+
+0B50C30F-AF99-1AF1-0F7D-8CB0073B0080,Alias
+{Locate user selected JRE}
+
+0B50C30F-AF99-1AF1-0F7D-8CB0073B0080,Conditions
+{1 condition}
+
+0B50C30F-AF99-1AF1-0F7D-8CB0073B0080,ExecuteAction
+{Before Next Pane is Displayed}
+
+0C58B6DE-F0D8-71AE-100E-2FD9509CEA25,CheckCondition
+{Before Action is Executed}
+
+0C58B6DE-F0D8-71AE-100E-2FD9509CEA25,Operator
+{false}
+
+0C58B6DE-F0D8-71AE-100E-2FD9509CEA25,String
+{<%InstallStopped%>}
+
+0D46B00C-D175-ACF0-1769-951B9E7B883F,CheckCondition
+{Before Action is Executed}
+
+0D46B00C-D175-ACF0-1769-951B9E7B883F,Directory
+{<%JREWinProvidedParentPath%>}
+
+0D46B00C-D175-ACF0-1769-951B9E7B883F,Test
+{does not exist}
+
+0E17A1C2-2ACC-F545-9C5A-670473A1323D,Conditions
+{0 conditions}
+
+0E17A1C2-2ACC-F545-9C5A-670473A1323D,PromptMessage,subst
+{1}
+
+0E17A1C2-2ACC-F545-9C5A-670473A1323D,SearchPath
+{Prompt User}
+
+0E17A1C2-2ACC-F545-9C5A-670473A1323D,StatusMessage,subst
+{1}
+
+0E5C1C4C-A0D7-25C4-45AF-8D75EA70DAFE,Conditions
+{0 conditions}
+
+0E5C1C4C-A0D7-25C4-45AF-8D75EA70DAFE,ExecuteAction
+{Before Pane is Displayed}
+
+0E5C1C4C-A0D7-25C4-45AF-8D75EA70DAFE,State
+{disabled}
+
+0E5C1C4C-A0D7-25C4-45AF-8D75EA70DAFE,Widget
+{Back Button;Next Button}
+
+0FDD61B2-61D5-B5BE-3EA8-A8F71B44B51A,Action
+{Extract JRE linux actions}
+
+0FDD61B2-61D5-B5BE-3EA8-A8F71B44B51A,Alias
+{Extract provided JRE}
+
+0FDD61B2-61D5-B5BE-3EA8-A8F71B44B51A,Conditions
+{1 condition}
+
+0FDD61B2-61D5-B5BE-3EA8-A8F71B44B51A,ExecuteAction
+{Before Next Pane is Displayed}
+
+1105917C-3734-726C-7349-F05208D9DB71,Alias
+{Download JRE Linux installer}
+
+1105917C-3734-726C-7349-F05208D9DB71,Conditions
+{1 condition}
+
+1105917C-3734-726C-7349-F05208D9DB71,ProgressVirtualText
+{JREDownloadPercentComplete}
+
+1105917C-3734-726C-7349-F05208D9DB71,Target
+{<%JRELinuxProvidedInstaller%>}
+
+1105917C-3734-726C-7349-F05208D9DB71,URL
+{http://downloads.gvsig.org/download/gvsig-desktop/runtimes/java1.6/jre-6u26-linux-i586.bin}
+
+11570579-1FC9-694C-0CBD-BF5286FEEE8C,CheckCondition
+{Before Action is Executed}
+
+11570579-1FC9-694C-0CBD-BF5286FEEE8C,Filename
+{<%ProgramReadme%>}
+
+11D275E1-5BA2-43CF-902A-7AE6AC0BD394,Conditions
+{0 conditions}
+
+11D275E1-5BA2-43CF-902A-7AE6AC0BD394,Files
+{*}
+
+13B0CFA5-2D5C-AB51-C61F-482B3ADF17BF,Alias
+{Extract Package Set}
+
+13B0CFA5-2D5C-AB51-C61F-482B3ADF17BF,Conditions
+{0 conditions}
+
+13B0CFA5-2D5C-AB51-C61F-482B3ADF17BF,TclScript
+{proc extractpks { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/package.gvspks"] == 1 } {
+                file copy "$root/package.gvspks" "$folder/package.gvspks"
+        }
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+        puts "Package set extracted to folder $folder"
+}
+
+extractpks <%Installer%> <%InstallDir%>/install}
+
+13CD08AF-ABF7-957A-643D-5EFB11CC0285,Alias
+{Cancel Actions}
+
+18E2C736-734E-6CD3-18FB-40130C401C08,Alias
+{Enable next button}
+
+18E2C736-734E-6CD3-18FB-40130C401C08,Conditions
+{0 conditions}
+
+18E2C736-734E-6CD3-18FB-40130C401C08,State
+{normal}
+
+18E2C736-734E-6CD3-18FB-40130C401C08,Widget
+{Next Button}
+
+18EDA188-FCE6-9532-FB35-577C11859967,Conditions
+{0 conditions}
+
+1A30E844-3331-B663-9BB6-FC67BC77A6FB,CheckCondition
+{Before Action is Executed}
+
+1A30E844-3331-B663-9BB6-FC67BC77A6FB,Filename
+{<%JRELinuxProvidedHome%>}
+
+1A30E844-3331-B663-9BB6-FC67BC77A6FB,Operator
+{does not exist}
+
+1A3D57A8-0715-F069-F661-B3AD0597D0A7,CheckCondition
+{Before Next Action is Executed}
+
+1A3D57A8-0715-F069-F661-B3AD0597D0A7,FailureMessage
+{<%DirectoryPermissionText%>}
+
+1A3D57A8-0715-F069-F661-B3AD0597D0A7,Filename
+{<%InstallDir%>}
+
+1A3D57A8-0715-F069-F661-B3AD0597D0A7,Permission
+{can create}
+
+1B719E7E-E7E7-D543-F45B-B9A6421CB96B,CheckCondition
+{Before Action is Executed}
+
+1B719E7E-E7E7-D543-F45B-B9A6421CB96B,Filename
+{<%JRELinuxProvidedInstaller%>}
+
+1F5F719D-A759-EE27-6B19-BCBA4C491043,CheckCondition
+{Before Action is Executed}
+
+1F5F719D-A759-EE27-6B19-BCBA4C491043,Filename
+{<%JRELinuxProvidedInstaller%>}
+
+20A784D6-A22E-5D7E-FC1D-C0809F7F2125,CheckCondition
+{Before Action is Executed}
+
+20A784D6-A22E-5D7E-FC1D-C0809F7F2125,Operator
+{false}
+
+20A784D6-A22E-5D7E-FC1D-C0809F7F2125,String
+{<%InstallStopped%>}
+
+2164936F-69B0-98AF-8BD5-CDA4E8918CAA,Alias
+{Extract JRE win actions}
+
+2164936F-69B0-98AF-8BD5-CDA4E8918CAA,Conditions
+{2 conditions}
+
+25B8A850-E1C9-D8B3-DEB3-2F93655B4539,CheckCondition
+{Before Action is Executed}
+
+25B8A850-E1C9-D8B3-DEB3-2F93655B4539,Platform
+{Windows}
+
+2728B481-EFDF-F184-A658-EF46281BDF8A,Conditions
+{0 conditions}
+
+2728B481-EFDF-F184-A658-EF46281BDF8A,ExecuteAction
+{Before Pane is Displayed}
+
+2728B481-EFDF-F184-A658-EF46281BDF8A,State
+{disabled}
+
+2728B481-EFDF-F184-A658-EF46281BDF8A,Widget
+{Next Button}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,Background
+{#FFFFFF}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,Conditions
+{2 conditions}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,Text,subst
+{1}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,Type
+{checkbutton}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,VirtualText
+{CreateDesktopShortcut}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,X
+{460}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,Y
+{220}
+
+28903B9F-6157-4809-1C73-9622915B5B49,BackButton,subst
+{1}
+
+28903B9F-6157-4809-1C73-9622915B5B49,CancelButton,subst
+{1}
+
+28903B9F-6157-4809-1C73-9622915B5B49,Caption,subst
+{1}
+
+28903B9F-6157-4809-1C73-9622915B5B49,Message,subst
+{1}
+
+28903B9F-6157-4809-1C73-9622915B5B49,NextButton,subst
+{1}
+
+294C9E81-C21A-4227-018C-E3B8864F5643,Alias
+{Cancel Actions}
+
+29910E11-3FF9-2512-327C-CC7CA943F979,CheckCondition
+{Before Action is Executed}
+
+29910E11-3FF9-2512-327C-CC7CA943F979,String
+{<%GuiMode%>}
+
+2D041762-8562-6901-F856-642CBF5D4B02,CheckCondition
+{Before Action is Executed}
+
+2D041762-8562-6901-F856-642CBF5D4B02,Operator
+{false}
+
+2D041762-8562-6901-F856-642CBF5D4B02,String
+{<%InstallStopped%>}
+
+2D99C08B-3F46-C308-8782-87AEC38E8A03,BackButton,subst
+{1}
+
+2D99C08B-3F46-C308-8782-87AEC38E8A03,CancelButton,subst
+{1}
+
+2D99C08B-3F46-C308-8782-87AEC38E8A03,Caption,subst
+{1}
+
+2D99C08B-3F46-C308-8782-87AEC38E8A03,Message,subst
+{1}
+
+2D99C08B-3F46-C308-8782-87AEC38E8A03,NextButton,subst
+{1}
+
+2E281DC9-6998-46D8-AEDB-D45C51D6CD59,Action
+{Extract JRE win actions}
+
+2E281DC9-6998-46D8-AEDB-D45C51D6CD59,Alias
+{Extract provided JRE}
+
+2E281DC9-6998-46D8-AEDB-D45C51D6CD59,Conditions
+{2 conditions}
+
+31CA25D2-5631-7196-4B3F-134F92658340,CheckCondition
+{Before Action is Executed}
+
+31CA25D2-5631-7196-4B3F-134F92658340,Filename
+{<%ProgramReadme%>}
+
+32A3C507-A13A-4ED3-763C-63A98FCB1C13,Comment
+{Ask the user if they want to proceed with the install.}
+
+32A3C507-A13A-4ED3-763C-63A98FCB1C13,Conditions
+{2 conditions}
+
+33EE3113-5C4F-F73E-DB60-5A93F3ED3841,Alias
+{Install JRE win actions}
+
+33EE3113-5C4F-F73E-DB60-5A93F3ED3841,Conditions
+{1 condition}
+
+34162B1C-E99E-1F3D-84C1-2EA9D125276B,Default
+{Yes}
+
+34162B1C-E99E-1F3D-84C1-2EA9D125276B,Prompt
+{<%InstallStartupText%>}
+
+346F7FAE-DA18-CF34-B468-EF7F0BC98B86,CheckCondition
+{Before Action is Executed}
+
+346F7FAE-DA18-CF34-B468-EF7F0BC98B86,String
+{<%Property <%CurrentPane%> UserMustAcceptLicense%>}
+
+3599D3A7-E5BD-6D17-3885-06C6194053EC,Alias
+{Setup Actions}
+
+3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3,Background
+{#FFFFFF}
+
+3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3,Text,subst
+{1}
+
+3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3,Type
+{checkbutton}
+
+3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3,VirtualText
+{LaunchApplication}
+
+3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3,X
+{185}
+
+3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3,Y
+{160}
+
+3664EF37-EC01-1464-7FB0-DDDFDD18CD58,Alias
+{Uninstall Actions}
+
+37D8727F-784B-971D-0B25-EF453D774135,Alias
+{Append Done Text To Widget}
+
+37D8727F-784B-971D-0B25-EF453D774135,Conditions
+{0 conditions}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text,subst
+{1}
+
+37D8727F-784B-971D-0B25-EF453D774135,Widget
+{Text}
+
+385BE7D0-EFF9-B688-FFC5-C2EAC8979C85,Alias
+{Launch addons manager not windows}
+
+385BE7D0-EFF9-B688-FFC5-C2EAC8979C85,Conditions
+{1 condition}
+
+385BE7D0-EFF9-B688-FFC5-C2EAC8979C85,ConsoleTitle
+{<%AppName%> add-ons manager}
+
+385BE7D0-EFF9-B688-FFC5-C2EAC8979C85,ProgramCommandLine
+{<%ProgramExecutable%> --applicationName=gvSIG --pluginsFolder=gvSIG/extensiones --install --installVersion=<%Version%>-<%BuildVersion%> --language=<%Language%>}
+
+385BE7D0-EFF9-B688-FFC5-C2EAC8979C85,WorkingDirectory
+{<%InstallDir%>}
+
+38AABCFE-B4E0-1970-3EDE-1F2C61F5EC00,String1
+{<%JRELocation%>}
+
+38AABCFE-B4E0-1970-3EDE-1F2C61F5EC00,String2
+{provided}
+
+399FF28D-CD27-BE79-EC33-43C6CD82F5F5,Conditions
+{0 conditions}
+
+3AEEFB5E-F15B-BBCD-2F87-4A5838958925,CheckCondition
+{Before Action is Executed}
+
+3AEEFB5E-F15B-BBCD-2F87-4A5838958925,Operator
+{false}
+
+3AEEFB5E-F15B-BBCD-2F87-4A5838958925,String
+{<%JavaFound%>}
+
+3BC0E6F6-AD13-4663-B635-933EB9E1310D,Alias
+{Install Actions}
+
+3BC0E6F6-AD13-4663-B635-933EB9E1310D,Conditions
+{0 conditions}
+
+3CE78F64-F6D9-224A-D2E6-1A4C06B4B837,Conditions
+{2 conditions}
+
+3CE78F64-F6D9-224A-D2E6-1A4C06B4B837,IconPath
+{<%InstallDir%>/gvSIG.ico}
+
+3CE78F64-F6D9-224A-D2E6-1A4C06B4B837,ShortcutDirectory
+{<%QUICK_LAUNCH%>}
+
+3CE78F64-F6D9-224A-D2E6-1A4C06B4B837,ShortcutName
+{<%AppName%>}
+
+3CE78F64-F6D9-224A-D2E6-1A4C06B4B837,TargetFileName
+{<%ProgramExecutable%>}
+
+3CE78F64-F6D9-224A-D2E6-1A4C06B4B837,WorkingDirectory
+{<%InstallDir%>}
+
+3D49F78F-C9AB-9343-7FF7-43937F3B506E,Action
+{Install Actions}
+
+3D49F78F-C9AB-9343-7FF7-43937F3B506E,Conditions
+{0 conditions}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,Background
+{#FFFFFF}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,Conditions
+{2 conditions}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,Text,subst
+{1}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,Type
+{checkbutton}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,VirtualText
+{LaunchApplication}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,X
+{460}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,Y
+{200}
+
+3FCCA384-2783-D981-2506-3A9F5DBE3E9B,Destination
+{<%InstallDir%>}
+
+3FCCA384-2783-D981-2506-3A9F5DBE3E9B,FileSize
+{60327}
+
+3FCCA384-2783-D981-2506-3A9F5DBE3E9B,FileUpdateMethod
+{Always overwrite files}
+
+3FCCA384-2783-D981-2506-3A9F5DBE3E9B,Name
+{Linux i386}
+
+3FEEB8E5-85B0-9F38-814E-1E4A18C2ED06,Active
+{No}
+
+3FEEB8E5-85B0-9F38-814E-1E4A18C2ED06,Alias
+{Delete JRE Linux Installer}
+
+3FEEB8E5-85B0-9F38-814E-1E4A18C2ED06,Conditions
+{1 condition}
+
+3FEEB8E5-85B0-9F38-814E-1E4A18C2ED06,Files
+{<%JRELinuxProvidedInstaller%>}
+
+404D5A5B-B1EA-5674-A375-241E5261DF7C,CheckCondition
+{Before Action is Executed}
+
+404D5A5B-B1EA-5674-A375-241E5261DF7C,Operator
+{false}
+
+404D5A5B-B1EA-5674-A375-241E5261DF7C,String
+{<%Answer%>}
+
+4453EE62-5459-8B88-2454-FCE7F1846B8D,CheckCondition
+{Before Action is Executed}
+
+4453EE62-5459-8B88-2454-FCE7F1846B8D,String
+{<%CreateQuickLaunchShortcut%>}
+
+449CA4EC-0607-8107-D0C5-35C21D9898E5,CheckCondition
+{Before Action is Executed}
+
+449CA4EC-0607-8107-D0C5-35C21D9898E5,Operator
+{false}
+
+449CA4EC-0607-8107-D0C5-35C21D9898E5,String
+{<%UpgradeInstall%>}
+
+45D41D2D-55F3-7CEA-5B0B-200BEA9372D2,Alias
+{Setup Actions}
+
+45D41D2D-55F3-7CEA-5B0B-200BEA9372D2,Conditions
+{0 conditions}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Alias
+{View Leeme Window}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Caption,subst
+{1}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,CloseButton,subst
+{1}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Conditions
+{4 conditions}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Message,subst
+{1}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,TextFile
+{<%InstallDir%>/LEEME.txt}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Title,subst
+{1}
+
+4640715F-7579-AE5D-0EB1-A600B49CFD25,String1
+{<%JRELocation%>}
+
+4640715F-7579-AE5D-0EB1-A600B49CFD25,String2
+{provided}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,Background
+{#FFFFFF}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,Conditions
+{3 conditions}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,Text,subst
+{1}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,Type
+{checkbutton}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,VirtualText
+{CreateQuickLaunchShortcut}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,X
+{460}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,Y
+{240}
+
+4BD8E4B3-922C-6DA5-95C2-07640244166A,ExitType
+{Finish}
+
+4EDC6EC0-5206-414D-74B5-0B2830D16398,CheckCondition
+{Before Action is Executed}
+
+4EDC6EC0-5206-414D-74B5-0B2830D16398,Platform
+{Windows}
+
+4F9ADD29-52F0-9FD7-8990-C3B6DC7AA03B,Alias
+{Make JRE Linux installer executable}
+
+4F9ADD29-52F0-9FD7-8990-C3B6DC7AA03B,Conditions
+{0 conditions}
+
+4F9ADD29-52F0-9FD7-8990-C3B6DC7AA03B,Files
+{<%JRELinuxProvidedInstaller%>}
+
+504A658B-16DC-CF0C-A098-CD36F2F9CF0D,Alias
+{Install JRE linux actions}
+
+504A658B-16DC-CF0C-A098-CD36F2F9CF0D,Conditions
+{1 condition}
+
+506E4FD1-B16E-4C30-D897-430B9853AAF3,Alias
+{Launch addons manager windows}
+
+506E4FD1-B16E-4C30-D897-430B9853AAF3,Conditions
+{1 condition}
+
+506E4FD1-B16E-4C30-D897-430B9853AAF3,ConsoleTitle
+{<%AppName%> add-ons manager}
+
+506E4FD1-B16E-4C30-D897-430B9853AAF3,ProgramCommandLine
+{<%InstallDir%>/gvsig-package-installer.exe --language=<%Language%>}
+
+506E4FD1-B16E-4C30-D897-430B9853AAF3,WorkingDirectory
+{<%InstallDir%>}
+
+5072BAD0-F247-D4C3-86BB-AB88567527F8,FileName
+{<%ShortAppName%>-uninstall}
+
+5072BAD0-F247-D4C3-86BB-AB88567527F8,ShortcutName
+{Uninstall <%AppName%>}
+
+5072BAD0-F247-D4C3-86BB-AB88567527F8,TargetFileName
+{<%Uninstaller%>}
+
+5072BAD0-F247-D4C3-86BB-AB88567527F8,WorkingDirectory
+{<%InstallDir%>}
+
+51B70479-768E-D076-AAEC-80F5B46B718D,Action
+{Uninstall Actions}
+
+522D03E3-8080-D61E-E6A9-863B6C61F3A2,Background
+{#FFFFFF}
+
+522D03E3-8080-D61E-E6A9-863B6C61F3A2,Text,subst
+{1}
+
+522D03E3-8080-D61E-E6A9-863B6C61F3A2,Type
+{checkbutton}
+
+522D03E3-8080-D61E-E6A9-863B6C61F3A2,VirtualText
+{CreateDesktopShortcut}
+
+522D03E3-8080-D61E-E6A9-863B6C61F3A2,X
+{185}
+
+522D03E3-8080-D61E-E6A9-863B6C61F3A2,Y
+{180}
+
+5381A1F4-ED91-DB2E-2E57-772FE97930A8,CheckCondition
+{Before Action is Executed}
+
+5381A1F4-ED91-DB2E-2E57-772FE97930A8,Operator
+{false}
+
+5381A1F4-ED91-DB2E-2E57-772FE97930A8,String
+{<%UpgradeInstall%>}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Alias
+{Append Running JRE Installer Text To Widget}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Conditions
+{0 conditions}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text,subst
+{1}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Widget
+{Text}
+
+5456E2BC-1CF2-FCC0-3328-61F0E191FAC2,CheckCondition
+{Before Action is Executed}
+
+5456E2BC-1CF2-FCC0-3328-61F0E191FAC2,Message,subst
+{1}
+
+5456E2BC-1CF2-FCC0-3328-61F0E191FAC2,Title,subst
+{1}
+
+5456E2BC-1CF2-FCC0-3328-61F0E191FAC2,TrueValue
+{No}
+
+545C6FC9-C88D-ECB5-C5BA-0664D84461EC,CheckCondition
+{Before Action is Executed}
+
+545C6FC9-C88D-ECB5-C5BA-0664D84461EC,Filename
+{<%JRELinuxProvidedInstaller%>}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Active
+{Yes}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Alias
+{Install Complements}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,BackButton,subst
+{1}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,CancelButton,subst
+{1}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Caption,subst
+{1}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Conditions
+{0 conditions}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Message,subst
+{1}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,NextButton,subst
+{1}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Subtitle,subst
+{1}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Text,subst
+{1}
+
+54A9E67A-F932-CDD4-6F9A-8842AAE31ACC,Title,subst
+{1}
+
+54EB2CDA-B1C5-9191-9840-92A6EA65EB2D,Alias
+{Install Desktop Shortcut win}
+
+54EB2CDA-B1C5-9191-9840-92A6EA65EB2D,Conditions
+{3 conditions}
+
+54EB2CDA-B1C5-9191-9840-92A6EA65EB2D,IconPath
+{<%InstallDir%>/gvSIG.ico}
+
+54EB2CDA-B1C5-9191-9840-92A6EA65EB2D,ShortcutName
+{<%AppName%>}
+
+54EB2CDA-B1C5-9191-9840-92A6EA65EB2D,TargetFileName
+{<%ProgramExecutable%>}
+
+54EB2CDA-B1C5-9191-9840-92A6EA65EB2D,WorkingDirectory
+{<%InstallDir%>}
+
+55CCBD8D-63B6-CB93-927F-9AAE2AAF06AF,Action
+{Install Actions}
+
+561E850D-3BD6-39E2-8348-2B48BF35F5FC,CheckCondition
+{Before Action is Executed}
+
+561E850D-3BD6-39E2-8348-2B48BF35F5FC,MatchCase
+{No}
+
+561E850D-3BD6-39E2-8348-2B48BF35F5FC,String1
+{<%JRELocation%>}
+
+561E850D-3BD6-39E2-8348-2B48BF35F5FC,String2
+{user}
+
+56A1E7E1-8AA9-784B-BF77-D9E3ACF8CA69,Filename
+{<%JRELinuxProvidedInstaller%>}
+
+56A1E7E1-8AA9-784B-BF77-D9E3ACF8CA69,Operator
+{does not exist}
+
+5A3654A2-CDBB-7E2C-CD60-3D6C150C07C3,Default
+{Yes}
+
+5A3654A2-CDBB-7E2C-CD60-3D6C150C07C3,Prompt
+{<%UninstallStartupText%>}
+
+5AFD027A-CB33-E59C-DDD0-460B0370DBCB,CheckCondition
+{Before Action is Executed}
+
+5AFD027A-CB33-E59C-DDD0-460B0370DBCB,String
+{<%JavaFound%>}
+
+5B5E7497-53B4-D13B-6EA5-F9FF11387817,Alias
+{Set JRE Linux installer as executable}
+
+5B5E7497-53B4-D13B-6EA5-F9FF11387817,Conditions
+{1 condition}
+
+5B5E7497-53B4-D13B-6EA5-F9FF11387817,Files
+{<%JRELinuxIProvidednstaller%>}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Alias
+{System found JRE location option}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Checked
+{Yes}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Conditions
+{1 condition}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text,subst
+{1}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Type
+{radiobutton}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Value
+{system}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,VirtualText
+{JRELocation}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,X
+{100}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Y
+{100}
+
+600E46D5-748B-847D-1F73-0ACD6D16817E,CheckCondition
+{Before Action is Executed}
+
+600E46D5-748B-847D-1F73-0ACD6D16817E,Filename
+{<%JRELinuxProvidedHome%>}
+
+6119CCE4-A8C8-9988-861B-0D2499172BE2,CheckCondition
+{Before Action is Executed}
+
+6119CCE4-A8C8-9988-861B-0D2499172BE2,Platform
+{Windows}
+
+6241F4A8-B83C-DB30-D278-1656F7E20EB5,CheckCondition
+{Before Action is Executed}
+
+6241F4A8-B83C-DB30-D278-1656F7E20EB5,Filename
+{<%InstallDir%>/LEEME.txt}
+
+631D071F-E566-DC0E-59DF-3204FBE5A71C,CheckCondition
+{Before Action is Executed}
+
+631D071F-E566-DC0E-59DF-3204FBE5A71C,String
+{<%ViewReadme%>}
+
+6376D578-5F50-AA62-B0F9-FCF408927883,CheckCondition
+{Before Action is Executed}
+
+6376D578-5F50-AA62-B0F9-FCF408927883,MatchCase
+{No}
+
+6376D578-5F50-AA62-B0F9-FCF408927883,Operator
+{does not match}
+
+6376D578-5F50-AA62-B0F9-FCF408927883,Pattern
+{es*}
+
+6376D578-5F50-AA62-B0F9-FCF408927883,String
+{<%Language%>}
+
+65402FF4-A10C-27F0-E55F-3A113D86B4B9,CheckCondition
+{Before Action is Executed}
+
+65402FF4-A10C-27F0-E55F-3A113D86B4B9,Filename
+{<%JREWinProvidedInstaller%>}
+
+67386941-595C-9CA1-F5FF-F82F2F818A9B,Alias
+{Delete old JRE Linux installer}
+
+67386941-595C-9CA1-F5FF-F82F2F818A9B,Conditions
+{1 condition}
+
+67386941-595C-9CA1-F5FF-F82F2F818A9B,Files
+{<%JREWinProvidedInstaller%>}
+
+68A0699B-D788-D637-8E67-D0753F71EE5B,Alias
+{Set JavaFound}
+
+68A0699B-D788-D637-8E67-D0753F71EE5B,Conditions
+{0 conditions}
+
+68A0699B-D788-D637-8E67-D0753F71EE5B,Value
+{True}
+
+68A0699B-D788-D637-8E67-D0753F71EE5B,VirtualText
+{JavaFound}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Active
+{Yes}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Alias
+{JRE location}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,BackButton,subst
+{1}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,CancelButton,subst
+{1}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Caption,subst
+{1}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Conditions
+{1 condition}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Message,subst
+{1}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,NextButton,subst
+{1}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Subtitle,subst
+{1}
+
+6CF34479-3460-FEC4-2ABA-2DA49D92D2C5,Title,subst
+{1}
+
+6E41513E-D669-B21C-1527-8EED048FD65A,CheckCondition
+{Before Action is Executed}
+
+6E41513E-D669-B21C-1527-8EED048FD65A,Filename
+{<%JREWinProvidedInstaller%>}
+
+6E97E3E7-3454-133E-F3F0-742D76138EF3,CheckCondition
+{Before Action is Executed}
+
+6E97E3E7-3454-133E-F3F0-742D76138EF3,Filename
+{<%JRELinuxProvidedInstaller%>}
+
+6EDA6BA7-805C-D7DD-1259-45D6EA1EF8EC,Conditions
+{0 conditions}
+
+6EDA6BA7-805C-D7DD-1259-45D6EA1EF8EC,ExecuteAction
+{Before Pane is Displayed}
+
+6EDA6BA7-805C-D7DD-1259-45D6EA1EF8EC,State
+{disabled}
+
+6EDA6BA7-805C-D7DD-1259-45D6EA1EF8EC,Widget
+{NextButton; CancelButton}
+
+6F6AFA6C-6297-9545-7A41-B0D926BECCAA,CheckCondition
+{Before Action is Executed}
+
+6F6AFA6C-6297-9545-7A41-B0D926BECCAA,Operator
+{matches}
+
+6F6AFA6C-6297-9545-7A41-B0D926BECCAA,Platform
+{Linux*}
+
+6FC73719-2702-77FF-F70E-7DF1C1B894F6,CheckCondition
+{Before Action is Executed}
+
+6FC73719-2702-77FF-F70E-7DF1C1B894F6,Operator
+{matches}
+
+6FC73719-2702-77FF-F70E-7DF1C1B894F6,Platform
+{Linux*}
+
+70FC288C-A32A-C59D-8575-1321AA0F48F2,CheckCondition
+{Before Action is Executed}
+
+70FC288C-A32A-C59D-8575-1321AA0F48F2,Filename
+{<%InstallDir%>/install/package.gvspks}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption,subst
+{1}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton,subst
+{1}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Conditions
+{4 conditions}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message,subst
+{1}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,TextFile
+{<%ProgramReadme%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title,subst
+{1}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,Background
+{#FFFFFF}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,Conditions
+{2 conditions}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,Text,subst
+{1}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,Type
+{checkbutton}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,VirtualText
+{ViewReadme}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,X
+{460}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,Y
+{180}
+
+7366B0DF-439F-A1C7-C873-F46D5FA9DBEA,CheckCondition
+{Before Action is Executed}
+
+7366B0DF-439F-A1C7-C873-F46D5FA9DBEA,Filename
+{<%ProgramExecutable%>}
+
+73B90B6A-AB60-585B-2F18-A5A2613FB63F,CheckCondition
+{Before Action is Executed}
+
+73B90B6A-AB60-585B-2F18-A5A2613FB63F,Filename
+{<%JREWinProvidedInstaller%>}
+
+73FF524D-EC19-F13A-4A59-B694F4D1B4B7,CheckCondition
+{Before Action is Executed}
+
+73FF524D-EC19-F13A-4A59-B694F4D1B4B7,Operator
+{false}
+
+73FF524D-EC19-F13A-4A59-B694F4D1B4B7,String
+{<%UpgradeInstall%>}
+
+75AA4E77-E097-291C-370C-92009D009FF6,Alias
+{Is Linux}
+
+75AA4E77-E097-291C-370C-92009D009FF6,CheckCondition
+{Before Action is Executed}
+
+75AA4E77-E097-291C-370C-92009D009FF6,Operator
+{matches}
+
+75AA4E77-E097-291C-370C-92009D009FF6,Platform
+{Linux*}
+
+7608FF76-ABB3-FBD7-F4ED-06DBCC5B2895,CheckCondition
+{Before Action is Executed}
+
+7608FF76-ABB3-FBD7-F4ED-06DBCC5B2895,Operator
+{matches}
+
+7608FF76-ABB3-FBD7-F4ED-06DBCC5B2895,Platform
+{Linux*}
+
+77015942-52D7-9F56-971E-6DD392CE667F,Alias
+{JRE provided already installed alert}
+
+77015942-52D7-9F56-971E-6DD392CE667F,Conditions
+{1 condition}
+
+77015942-52D7-9F56-971E-6DD392CE667F,Icon
+{warning}
+
+77015942-52D7-9F56-971E-6DD392CE667F,Message,subst
+{1}
+
+77015942-52D7-9F56-971E-6DD392CE667F,Title,subst
+{1}
+
+781B2C5D-2AC5-0B09-41FA-CF0592E15B9C,String
+{<%ErrorsOccurred%>}
+
+781B53DD-0A23-88F5-AC85-C4DE5B1BDA0D,CheckCondition
+{Before Action is Executed}
+
+781B53DD-0A23-88F5-AC85-C4DE5B1BDA0D,String
+{<%CreateDesktopShortcut%>}
+
+7C9A3C90-7B43-07E6-348E-8A4C74DA066D,Alias
+{Delete old JRE Linux installer}
+
+7C9A3C90-7B43-07E6-348E-8A4C74DA066D,Conditions
+{1 condition}
+
+7C9A3C90-7B43-07E6-348E-8A4C74DA066D,Files
+{<%JRELinuxProvidedInstaller%>}
+
+7D670287-273F-0090-6C50-45F648DBC348,CheckCondition
+{Before Action is Executed}
+
+7D670287-273F-0090-6C50-45F648DBC348,Directory
+{<%InstallDir%>/install}
+
+7D670287-273F-0090-6C50-45F648DBC348,Test
+{does not exist}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,BackButton,subst
+{1}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,CancelButton,subst
+{1}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,Caption,subst
+{1}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,Conditions
+{0 conditions}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,Message,subst
+{1}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,NextButton,subst
+{1}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,Subtitle,subst
+{1}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,Text,subst
+{1}
+
+7E4760EC-726C-9813-822E-C7DB4ADC498F,Title,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Alias
+{JRE provided installation}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Conditions
+{3 conditions}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle,subst
+{1}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title,subst
+{1}
+
+7EF426AC-B8BA-9C7E-AF65-5B55FDF139D6,Alias
+{Set JavaHome}
+
+7EF426AC-B8BA-9C7E-AF65-5B55FDF139D6,Conditions
+{0 conditions}
+
+7EF426AC-B8BA-9C7E-AF65-5B55FDF139D6,Value
+{<%JRELinuxProvidedHome%>}
+
+7EF426AC-B8BA-9C7E-AF65-5B55FDF139D6,VirtualText
+{JavaHome}
+
+7F665996-366F-5FBB-95D1-6768787158E6,CheckCondition
+{Before Action is Executed}
+
+7F665996-366F-5FBB-95D1-6768787158E6,Operator
+{false}
+
+7F665996-366F-5FBB-95D1-6768787158E6,String
+{<%JavaFound%>}
+
+8024E0D0-D8A7-4A59-A542-94E50A41BE46,CheckCondition
+{Before Action is Executed}
+
+8024E0D0-D8A7-4A59-A542-94E50A41BE46,MatchCase
+{No}
+
+8024E0D0-D8A7-4A59-A542-94E50A41BE46,String1
+{yes}
+
+8024E0D0-D8A7-4A59-A542-94E50A41BE46,String2
+{<%DeleteInstallDir%>}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,BackButton,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,CancelButton,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,Caption,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,Conditions
+{0 conditions}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,FileValue,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,Message,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,NextButton,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,ProgressValue,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,Subtitle,subst
+{1}
+
+804ABF00-38E4-3FF5-4DAD-A066F21DF3BA,Title,subst
+{1}
+
+80982668-99DF-08B5-CB0E-58172E55F28F,ExitType
+{Finish}
+
+80F0493D-8208-6418-F6BA-45BAE3762736,Conditions
+{2 conditions}
+
+80F0493D-8208-6418-F6BA-45BAE3762736,ExecuteAction
+{Before Pane is Displayed}
+
+80F0493D-8208-6418-F6BA-45BAE3762736,State
+{disabled}
+
+80F0493D-8208-6418-F6BA-45BAE3762736,Widget
+{NextButton}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,BackButton,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,BrowseButton,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,BrowseText,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,CancelButton,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,Caption,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,Conditions
+{2 conditions}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,Destination,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,DestinationLabel,subst
+{0}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,Message,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,NextButton,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,Subtitle,subst
+{1}
+
+83BBEB23-E995-A514-D1BE-290581D376FF,Title,subst
+{1}
+
+83FF997E-AE4B-A894-6DED-B9EFFB2A0F35,Conditions
+{0 conditions}
+
+83FF997E-AE4B-A894-6DED-B9EFFB2A0F35,ExecuteAction
+{Before Pane is Displayed}
+
+83FF997E-AE4B-A894-6DED-B9EFFB2A0F35,State
+{disabled}
+
+83FF997E-AE4B-A894-6DED-B9EFFB2A0F35,Widget
+{Back Button;Next Button}
+
+841D53AB-80AE-04E1-E02D-0E462596D85E,Alias
+{Create Install Folder}
+
+841D53AB-80AE-04E1-E02D-0E462596D85E,Conditions
+{1 condition}
+
+841D53AB-80AE-04E1-E02D-0E462596D85E,FolderName
+{<%JRELinuxProvidedParentPath%>}
+
+8529CE0D-A12B-AE06-8174-64D392AF3A5F,CheckCondition
+{Before Action is Executed}
+
+8529CE0D-A12B-AE06-8174-64D392AF3A5F,String
+{<%GuiMode%>}
+
+859A3983-63B3-6384-1FEA-A8D1E4DECE63,CheckCondition
+{Before Action is Executed}
+
+859A3983-63B3-6384-1FEA-A8D1E4DECE63,MatchCase
+{No}
+
+859A3983-63B3-6384-1FEA-A8D1E4DECE63,Pattern
+{es*}
+
+859A3983-63B3-6384-1FEA-A8D1E4DECE63,String
+{<%Language%>}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message,subst
+{1}
+
+88BFFC55-0A46-8E06-F212-022BFFE60E1A,CheckCondition
+{Before Action is Executed}
+
+88BFFC55-0A46-8E06-F212-022BFFE60E1A,Operator
+{false}
+
+88BFFC55-0A46-8E06-F212-022BFFE60E1A,String
+{<%Answer%>}
+
+89027793-53C5-A75C-C2A2-E2D47022AFFB,Alias
+{Read license text}
+
+89027793-53C5-A75C-C2A2-E2D47022AFFB,Conditions
+{0 conditions}
+
+89027793-53C5-A75C-C2A2-E2D47022AFFB,ExecuteAction
+{Before Pane is Displayed}
+
+89027793-53C5-A75C-C2A2-E2D47022AFFB,TclScript
+{set file [::InstallAPI::FindObjects -alias "ProgramLicense"]
+set file [$file srcfile]
+
+::InstallAPI::SetVirtualText -virtualtext LicenseText -value [read_file $file]}
+
+8E46FF9F-C77C-E92D-0878-1DA1650532A7,Action
+{Install JRE linux actions}
+
+8E46FF9F-C77C-E92D-0878-1DA1650532A7,Alias
+{Install JRE linux}
+
+8E46FF9F-C77C-E92D-0878-1DA1650532A7,Conditions
+{1 condition}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Alias
+{Append Running JRE Installer Text To Widget}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Conditions
+{0 conditions}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text,subst
+{1}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Widget
+{Text}
+
+954D9C20-6666-F732-3851-B5CDEFEA3759,CheckCondition
+{Before Action is Executed}
+
+954D9C20-6666-F732-3851-B5CDEFEA3759,Operator
+{is not}
+
+954D9C20-6666-F732-3851-B5CDEFEA3759,Platform
+{Windows}
+
+986E6738-F9BC-9444-D665-C6F52970C695,Components
+{EE918467-993A-9E94-31D7-B8C02C46EE4A}
+
+986E6738-F9BC-9444-D665-C6F52970C695,Description,subst
+{1}
+
+986E6738-F9BC-9444-D665-C6F52970C695,DisplayName,subst
+{1}
+
+986E6738-F9BC-9444-D665-C6F52970C695,Name
+{Typical}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,Alias
+{Execute JRE Installer Linux}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,ClearProgressiveWidget
+{No}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,Conditions
+{1 condition}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,ConsoleTitle
+{Java Runtime Environment for Linux Setup}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,IncludeStderr
+{Yes}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,ProgramCommandLine
+{<%JRELinuxProvidedInstaller%>}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,ProgressiveOutputWidget
+{Text}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,ShowProgressiveOutput
+{Yes}
+
+99A14DCD-9B4A-1D55-DB92-AE41C41B21E7,WorkingDirectory
+{<%JRELinuxProvidedParentPath%>}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,BackButton,subst
+{1}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,CancelButton,subst
+{1}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,Caption,subst
+{1}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,Conditions
+{1 condition}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,Message,subst
+{1}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,NextButton,subst
+{1}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,Subtitle,subst
+{1}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,Text,subst
+{1}
+
+9BF526CE-8B21-EEBA-A10D-4FF55A1B6ED5,Title,subst
+{1}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message,subst
+{1}
+
+9C9B54FA-68E6-2402-97C3-C65F1E80E190,Alias
+{Startup Actions}
+
+9E5890BE-4C5B-5EB3-A0FC-0BB186483CFC,Alias
+{Extract JRE Linux Installer}
+
+9E5890BE-4C5B-5EB3-A0FC-0BB186483CFC,Conditions
+{0 conditions}
+
+9E5890BE-4C5B-5EB3-A0FC-0BB186483CFC,TclScript
+{proc extractjrelin { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/jre-installer-lin.bin"] == 1 } {
+                file copy "$root/jre-installer-lin.bin" "$folder/jre-installer-lin.bin"
+	        puts "JRE installer extracted to folder $folder"
+        } else {
+		puts "JRE installer (jre-installer-lin.bin) not available to be extracted"
+	}
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+}
+
+extractjrelin <%Installer%> <%JRELinuxProvidedParentPath%>}
+
+9FA6DFA4-1160-8D13-2441-0EAEF1BC0469,CheckCondition
+{Before Action is Executed}
+
+9FA6DFA4-1160-8D13-2441-0EAEF1BC0469,Operator
+{false}
+
+9FA6DFA4-1160-8D13-2441-0EAEF1BC0469,String
+{<%InstallStopped%>}
+
+A0990C09-D43B-8331-568A-360C6E3E0508,Alias
+{Create Install Folder}
+
+A0990C09-D43B-8331-568A-360C6E3E0508,Conditions
+{1 condition}
+
+A0990C09-D43B-8331-568A-360C6E3E0508,FolderName
+{<%JRELinuxProvidedParentPath%>}
+
+A0EBE09F-A56D-46A9-5126-44EE901EF944,Operator
+{matches}
+
+A0EBE09F-A56D-46A9-5126-44EE901EF944,Platform
+{Linux*}
+
+A1734B84-4CE8-CB7C-76BA-D607FF9B26DA,Alias
+{Program Shortcut linux}
+
+A1734B84-4CE8-CB7C-76BA-D607FF9B26DA,Conditions
+{2 conditions}
+
+A1734B84-4CE8-CB7C-76BA-D607FF9B26DA,IconPath
+{<%InstallDir%>/gvSIG.ico}
+
+A1734B84-4CE8-CB7C-76BA-D607FF9B26DA,ShortcutName
+{<%AppName%>}
+
+A1734B84-4CE8-CB7C-76BA-D607FF9B26DA,TargetFileName
+{<%ProgramExecutable%>}
+
+A1734B84-4CE8-CB7C-76BA-D607FF9B26DA,WorkingDirectory
+{<%InstallDir%>}
+
+A28451B2-C088-700D-C29F-C1F7DD156966,Alias
+{Extract JRE Linux Installer}
+
+A28451B2-C088-700D-C29F-C1F7DD156966,Conditions
+{0 conditions}
+
+A28451B2-C088-700D-C29F-C1F7DD156966,TclScript
+{proc extractjrewin { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/jre-installer-win.exe"] == 1 } {
+                file copy "$root/jre-installer-win.exe" "$folder/jre-installer-win.exe"
+	        puts "JRE installer extracted to folder $folder"
+        } else {
+		puts "JRE installer (jre-installer-win.exe) not available to be extracted"
+	}
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+}
+
+extractjrewin <%Installer%> <%JREWinProvidedParentPath%>}
+
+A31B7E49-112A-8FDD-85F5-BF7BB734800D,Conditions
+{1 condition}
+
+A31B7E49-112A-8FDD-85F5-BF7BB734800D,Files
+{<%InstallDir%>/install/package.gvspks}
+
+A388D351-A619-711B-5BD8-76B2616A1089,CheckCondition
+{Before Action is Executed}
+
+A388D351-A619-711B-5BD8-76B2616A1089,Directory
+{<%JRELinuxProvidedParentPath%>}
+
+A388D351-A619-711B-5BD8-76B2616A1089,Test
+{does not exist}
+
+A412E199-AE9B-F350-6AF2-0786CEED49EE,CheckCondition
+{Before Action is Executed}
+
+A412E199-AE9B-F350-6AF2-0786CEED49EE,Platform
+{Windows}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,BackButton,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,CancelButton,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,Caption,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,Conditions
+{0 conditions}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,FileLabel,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,Message,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,NextButton,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,ProgressValue,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,Subtitle,subst
+{1}
+
+A5804629-16FA-958E-EE7D-647CC24E45B5,Title,subst
+{1}
+
+A86210CC-64FE-1DB9-7884-745DBCEB7E9B,ExecuteAction
+{Before Pane is Displayed}
+
+A86210CC-64FE-1DB9-7884-745DBCEB7E9B,State
+{disabled}
+
+A86210CC-64FE-1DB9-7884-745DBCEB7E9B,Widget
+{Back Button;Next Button}
+
+A9030D89-64CC-E238-4A51-A3EA100D595B,Components
+{EE918467-993A-9E94-31D7-B8C02C46EE4A}
+
+A9030D89-64CC-E238-4A51-A3EA100D595B,Description,subst
+{1}
+
+A9030D89-64CC-E238-4A51-A3EA100D595B,DisplayName,subst
+{1}
+
+A9030D89-64CC-E238-4A51-A3EA100D595B,Name
+{Custom}
+
+A92BC0CB-2076-0B2E-4D92-4C5D90CAFA30,CheckCondition
+{Before Action is Executed}
+
+A92BC0CB-2076-0B2E-4D92-4C5D90CAFA30,String
+{<%CreateDesktopShortcut%>}
+
+ACEB199B-FAD3-98B8-2D94-A6B940B464A9,Alias
+{Finish Actions}
+
+ADCE9936-9F1C-72B8-AE2C-3BC987A9B15A,CheckCondition
+{Before Action is Executed}
+
+ADCE9936-9F1C-72B8-AE2C-3BC987A9B15A,Filename
+{<%ProgramExecutable%>}
+
+AIX-ppc,Active
+{No}
+
+AIX-ppc,BuildSeparateArchives
+{No}
+
+AIX-ppc,DefaultDirectoryPermission
+{0755}
+
+AIX-ppc,DefaultFilePermission
+{0755}
+
+AIX-ppc,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+AIX-ppc,FallBackToConsole
+{Yes}
+
+AIX-ppc,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+AIX-ppc,InstallMode
+{Standard}
+
+AIX-ppc,InstallType
+{Typical}
+
+AIX-ppc,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+AIX-ppc,ProgramFolderAllUsers
+{No}
+
+AIX-ppc,ProgramFolderName
+{<%AppName%>}
+
+AIX-ppc,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+AIX-ppc,ProgramName
+{}
+
+AIX-ppc,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+AIX-ppc,PromptForRoot
+{Yes}
+
+AIX-ppc,RequireRoot
+{No}
+
+AIX-ppc,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Alias
+{Installer provided JRE option}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Checked
+{No}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Conditions
+{0 conditions}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Text,subst
+{1}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Type
+{radiobutton}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Value
+{provided}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,VirtualText
+{JRELocation}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,X
+{100}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Y
+{180}
+
+B394DB55-BF47-6235-CE6E-7B0CB53E9270,Alias
+{Delete JRE Windows Installer}
+
+B394DB55-BF47-6235-CE6E-7B0CB53E9270,Conditions
+{1 condition}
+
+B394DB55-BF47-6235-CE6E-7B0CB53E9270,ExecuteAction
+{Before Next Pane is Displayed}
+
+B394DB55-BF47-6235-CE6E-7B0CB53E9270,Files
+{<%JREWinProvidedInstaller%>}
+
+B5596A3D-1144-577B-F624-E9648DACD74A,Background
+{#FFFFFF}
+
+B5596A3D-1144-577B-F624-E9648DACD74A,Text,subst
+{1}
+
+B5596A3D-1144-577B-F624-E9648DACD74A,Type
+{checkbutton}
+
+B5596A3D-1144-577B-F624-E9648DACD74A,VirtualText
+{CreateQuickLaunchShortcut}
+
+B5596A3D-1144-577B-F624-E9648DACD74A,X
+{185}
+
+B5596A3D-1144-577B-F624-E9648DACD74A,Y
+{200}
+
+B5FC0222-8BBA-D4A2-4BD3-C2B49F058238,CheckCondition
+{Before Action is Executed}
+
+B5FC0222-8BBA-D4A2-4BD3-C2B49F058238,Filename
+{<%ProgramExecutable%>}
+
+B71F4D9E-9A33-DD5D-5C1B-23AF237B01A9,Operator
+{matches}
+
+B71F4D9E-9A33-DD5D-5C1B-23AF237B01A9,Platform
+{Linux*}
+
+B78940E7-5647-D8EE-A4D9-74B3A18137BB,ExitType
+{Finish}
+
+B85E0ABC-3E6D-9E2D-B2E9-E440A97D7A84,CheckCondition
+{Before Action is Executed}
+
+B85E0ABC-3E6D-9E2D-B2E9-E440A97D7A84,Directory
+{<%JRELinuxProvidedParentPath%>}
+
+B85E0ABC-3E6D-9E2D-B2E9-E440A97D7A84,Test
+{does not exist}
+
+B87738EC-83B0-E926-ECE2-AAF5F6D85453,CheckCondition
+{Before Action is Executed}
+
+B87738EC-83B0-E926-ECE2-AAF5F6D85453,Operator
+{matches}
+
+B87738EC-83B0-E926-ECE2-AAF5F6D85453,Platform
+{Linux*}
+
+B8895379-01AF-1B8F-3862-C566516D9E7F,CheckCondition
+{Before Next Pane is Displayed}
+
+B8895379-01AF-1B8F-3862-C566516D9E7F,FailureMessage
+{<%DirectoryPermissionText%>}
+
+B8895379-01AF-1B8F-3862-C566516D9E7F,Filename
+{<%InstallDir%>}
+
+B8895379-01AF-1B8F-3862-C566516D9E7F,Permission
+{can create}
+
+B96F7591-8762-2170-4283-D744D6536D22,Conditions
+{1 condition}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Active
+{Yes}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Alias
+{JRE installation}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton,subst
+{1}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton,subst
+{1}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption,subst
+{1}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Conditions
+{2 conditions}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message,subst
+{1}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton,subst
+{1}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle,subst
+{1}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text,subst
+{1}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title,subst
+{1}
+
+BCB85F45-B1CD-C065-EBAF-282DE843D49C,Action
+{Install addons actions}
+
+BCB85F45-B1CD-C065-EBAF-282DE843D49C,Alias
+{Install addons}
+
+BCB85F45-B1CD-C065-EBAF-282DE843D49C,Conditions
+{0 conditions}
+
+BCB85F45-B1CD-C065-EBAF-282DE843D49C,ExecuteAction
+{Before Next Pane is Displayed}
+
+BF971C08-CE1B-5BFD-0B7A-11F9474609E1,CheckCondition
+{Before Action is Executed}
+
+BF971C08-CE1B-5BFD-0B7A-11F9474609E1,Filename
+{<%ProgramExecutable%>}
+
+C02457C6-0363-CF49-D0AF-430415B8DBCB,CheckCondition
+{Before Action is Executed}
+
+C02457C6-0363-CF49-D0AF-430415B8DBCB,Filename
+{<%JRELinuxProvidedHome%>}
+
+C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2,BackButton,subst
+{1}
+
+C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2,CancelButton,subst
+{1}
+
+C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2,Caption,subst
+{1}
+
+C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2,Conditions
+{0 conditions}
+
+C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2,Message,subst
+{1}
+
+C31C7E84-6FAC-1AA6-243F-93BB5D6F2AE2,NextButton,subst
+{1}
+
+C3F4194E-4509-43E6-698F-FB9350FFF533,Comment
+{Ask the user if they want to proceed with the uninstall.}
+
+C5ACE394-BDED-24ED-7543-E3AE89E1E84F,Alias
+{Locate User selected JRE actions}
+
+C5ACE394-BDED-24ED-7543-E3AE89E1E84F,Conditions
+{0 conditions}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,Conditions
+{1 condition}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,ExecuteAction
+{Before Next Pane is Displayed}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,Message,subst
+{1}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,Title,subst
+{1}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,Type
+{Yes/No}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,VirtualText
+{DeleteInstallDir}
+
+C615CE3D-026B-2F47-A326-53759D46486E,Conditions
+{3 conditions}
+
+C615CE3D-026B-2F47-A326-53759D46486E,ProgramCommandLine
+{<%ProgramExecutable%>}
+
+C615CE3D-026B-2F47-A326-53759D46486E,WaitForProgram
+{No}
+
+C615CE3D-026B-2F47-A326-53759D46486E,WorkingDirectory
+{<%InstallDir%>}
+
+C81F2143-187C-59E5-A068-4313973E90BF,ExitType
+{Finish}
+
+CA6B7F07-9EA4-6E57-8D8B-D0B022BAC177,CheckCondition
+{Before Action is Executed}
+
+CA6B7F07-9EA4-6E57-8D8B-D0B022BAC177,Platform
+{Windows}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Alias
+{User selected JRE location option}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Checked
+{No}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Conditions
+{0 conditions}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text,subst
+{1}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Type
+{radiobutton}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Value
+{user}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,VirtualText
+{JRELocation}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,X
+{100}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Y
+{140}
+
+CBD27046-3A35-A47B-E2DF-360A5B5AA36D,BackButton,subst
+{1}
+
+CBD27046-3A35-A47B-E2DF-360A5B5AA36D,CancelButton,subst
+{1}
+
+CBD27046-3A35-A47B-E2DF-360A5B5AA36D,Caption,subst
+{1}
+
+CBD27046-3A35-A47B-E2DF-360A5B5AA36D,Conditions
+{0 conditions}
+
+CBD27046-3A35-A47B-E2DF-360A5B5AA36D,Message,subst
+{1}
+
+CBD27046-3A35-A47B-E2DF-360A5B5AA36D,NextButton,subst
+{1}
+
+CBD3A085-2D72-4024-B257-861FD939BAFE,Conditions
+{1 condition}
+
+CBD3A085-2D72-4024-B257-861FD939BAFE,ExecuteAction
+{Before Next Pane is Displayed}
+
+CBD3A085-2D72-4024-B257-861FD939BAFE,Files
+{*}
+
+D11857FC-B108-A643-8EF2-B44A6898C544,CheckCondition
+{Before Action is Executed}
+
+D11857FC-B108-A643-8EF2-B44A6898C544,Operator
+{false}
+
+D11857FC-B108-A643-8EF2-B44A6898C544,String
+{<%InstallStopped%>}
+
+D17A73BD-E3B9-C589-08E6-E963974AFA1C,Operator
+{matches}
+
+D17A73BD-E3B9-C589-08E6-E963974AFA1C,Platform
+{Linux*}
+
+D2BCC2F7-3ECD-2386-6B31-C2D96D445C39,CheckCondition
+{Before Action is Executed}
+
+D2BCC2F7-3ECD-2386-6B31-C2D96D445C39,Operator
+{false}
+
+D2BCC2F7-3ECD-2386-6B31-C2D96D445C39,String
+{<%InstallStopped%>}
+
+D302703B-CFAA-1E4C-1114-220BC704199F,CheckCondition
+{Before Action is Executed}
+
+D302703B-CFAA-1E4C-1114-220BC704199F,String
+{<%GuiMode%>}
+
+D3A78590-1299-FDD6-4D18-4C7D7F569532,Alias
+{Program Shortcut linux}
+
+D3A78590-1299-FDD6-4D18-4C7D7F569532,Conditions
+{2 conditions}
+
+D3A78590-1299-FDD6-4D18-4C7D7F569532,IconPath
+{<%InstallDir%>/gvsig-icon22x22.png}
+
+D3A78590-1299-FDD6-4D18-4C7D7F569532,ShortcutName
+{<%AppName%>}
+
+D3A78590-1299-FDD6-4D18-4C7D7F569532,TargetFileName
+{<%ProgramExecutable%>}
+
+D3A78590-1299-FDD6-4D18-4C7D7F569532,WorkingDirectory
+{<%InstallDir%>}
+
+D43567C3-01A1-BE88-D2E2-9CEE820E4BDC,Alias
+{Is Windows}
+
+D43567C3-01A1-BE88-D2E2-9CEE820E4BDC,CheckCondition
+{Before Action is Executed}
+
+D43567C3-01A1-BE88-D2E2-9CEE820E4BDC,Platform
+{Windows}
+
+D7E66AB5-8156-10C5-385F-2AA1D1BC5534,CheckCondition
+{Before Action is Executed}
+
+D7E66AB5-8156-10C5-385F-2AA1D1BC5534,Filename
+{<%JRELinuxInstaller%>}
+
+D7E66AB5-8156-10C5-385F-2AA1D1BC5534,Operator
+{does not exist}
+
+D93FF951-4F22-E257-4566-2E3DA02B4BBC,CheckCondition
+{Before Action is Executed}
+
+D93FF951-4F22-E257-4566-2E3DA02B4BBC,Platform
+{Windows}
+
+DBB2EE41-078C-8912-13BF-8DC9DA750DA7,CheckCondition
+{Before Action is Executed}
+
+DBB2EE41-078C-8912-13BF-8DC9DA750DA7,Message,subst
+{1}
+
+DBB2EE41-078C-8912-13BF-8DC9DA750DA7,Title,subst
+{1}
+
+DBB2EE41-078C-8912-13BF-8DC9DA750DA7,TrueValue
+{No}
+
+DDEB1B51-B73A-16D1-F636-5381C7AD3ED4,Action
+{Uninstall Actions}
+
+DDEB1B51-B73A-16D1-F636-5381C7AD3ED4,Conditions
+{0 conditions}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message,subst
+{1}
+
+DECC9B88-0B87-294C-73EC-AB7F0ED2993E,CheckCondition
+{Before Action is Executed}
+
+DECC9B88-0B87-294C-73EC-AB7F0ED2993E,Operator
+{false}
+
+DECC9B88-0B87-294C-73EC-AB7F0ED2993E,String
+{<%LicenseAccepted%>}
+
+DED47A9D-C1AF-A79C-268C-DF1650B48F14,CheckCondition
+{Before Action is Executed}
+
+DED47A9D-C1AF-A79C-268C-DF1650B48F14,Filename
+{<%ProgramExecutable%>}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,Alias
+{Execute JRE Installer Windows}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,ClearProgressiveWidget
+{No}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,Conditions
+{1 condition}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,ConsoleTitle
+{Java Runtime Environment for Windows Setup}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,IncludeStderr
+{Yes}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,ProgramCommandLine
+{<%JREWinProvidedInstaller%>}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,ProgressiveOutputWidget
+{Text}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,ShowProgressiveOutput
+{Yes}
+
+DF3E5505-8994-6B0D-C088-B2891DA47DC8,WorkingDirectory
+{<%JREWinProvidedParentPath%>}
+
+E0C961A8-3EB7-F9C4-D3B3-6269173D714D,Alias
+{Set JavaExecutable}
+
+E0C961A8-3EB7-F9C4-D3B3-6269173D714D,Conditions
+{0 conditions}
+
+E0C961A8-3EB7-F9C4-D3B3-6269173D714D,Value
+{<%JRELinuxInstallDirName%>/bin/java}
+
+E0C961A8-3EB7-F9C4-D3B3-6269173D714D,VirtualText
+{JavaExecutable}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,BackButton,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,CancelButton,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,Caption,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,FileLabel,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,Message,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,NextButton,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,ProgressValue,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,Subtitle,subst
+{1}
+
+E1B916EC-7954-3176-9CCD-A2B34F6AB47E,Title,subst
+{1}
+
+E2AA1BDB-1CCE-DF57-0997-3904DBDAF3A5,CheckCondition
+{Before Action is Executed}
+
+E2AA1BDB-1CCE-DF57-0997-3904DBDAF3A5,Filename
+{<%ProgramExecutable%>}
+
+E4904401-29F0-4653-B796-3232350E102C,CheckCondition
+{Before Action is Executed}
+
+E4904401-29F0-4653-B796-3232350E102C,Directory
+{<%InstallDir%>}
+
+E63580B4-3540-BC41-0D59-FC2D679471B1,CheckCondition
+{Before Action is Executed}
+
+E63580B4-3540-BC41-0D59-FC2D679471B1,Operator
+{false}
+
+E63580B4-3540-BC41-0D59-FC2D679471B1,String
+{<%InstallStopped%>}
+
+E8BD2009-4F63-1801-6277-CD12ADF69363,CheckCondition
+{Before Action is Executed}
+
+E8BD2009-4F63-1801-6277-CD12ADF69363,String
+{<%GuiMode%>}
+
+E982D8BA-A439-895E-0C4E-D96045DFAF29,CheckCondition
+{Before Action is Executed}
+
+E982D8BA-A439-895E-0C4E-D96045DFAF29,Operator
+{false}
+
+E982D8BA-A439-895E-0C4E-D96045DFAF29,String
+{<%UpgradeInstall%>}
+
+E9DC0E80-7199-F2CA-92D8-4F66EB09357B,CheckCondition
+{Before Action is Executed}
+
+E9DC0E80-7199-F2CA-92D8-4F66EB09357B,Filename
+{<%JREWinProvidedInstaller%>}
+
+E9DC0E80-7199-F2CA-92D8-4F66EB09357B,Operator
+{does not exist}
+
+ECA8F261-D507-0D1D-6D05-AB4679CE89E7,CheckCondition
+{Before Action is Executed}
+
+ECA8F261-D507-0D1D-6D05-AB4679CE89E7,String1
+{<%JRELocation%>}
+
+ECA8F261-D507-0D1D-6D05-AB4679CE89E7,String2
+{provided}
+
+ECBBCF97-F791-4569-6561-9957862F5F0D,Prompt
+{<%ConsoleSelectDestinationText%>}
+
+ECBBCF97-F791-4569-6561-9957862F5F0D,VirtualText
+{InstallDir}
+
+EE918467-993A-9E94-31D7-B8C02C46EE4A,Description,subst
+{1}
+
+EE918467-993A-9E94-31D7-B8C02C46EE4A,DisplayName,subst
+{1}
+
+EE918467-993A-9E94-31D7-B8C02C46EE4A,FileGroups
+{0B1D2CFD-CF3F-0A84-2C33-6B9A957B3181 3FCCA384-2783-D981-2506-3A9F5DBE3E9B F3B4EEE1-118B-7F0B-FC8A-1BD5B7F8AD6D}
+
+EE918467-993A-9E94-31D7-B8C02C46EE4A,Name
+{gvSIG core}
+
+EE918467-993A-9E94-31D7-B8C02C46EE4A,RequiredComponent
+{Yes}
+
+EFF4485B-8EF4-5163-5129-4200A2495D8B,CheckCondition
+{Before Action is Executed}
+
+EFF4485B-8EF4-5163-5129-4200A2495D8B,Platform
+{Windows}
+
+F01FA8CD-E8AF-2A92-16E9-2AA759676C91,CheckCondition
+{Before Action is Executed}
+
+F01FA8CD-E8AF-2A92-16E9-2AA759676C91,Filename
+{<%ProgramExecutable%>}
+
+F05B699D-2840-F8CF-FD4C-AE2A4DA8724B,Background
+{#FFFFFF}
+
+F05B699D-2840-F8CF-FD4C-AE2A4DA8724B,Text,subst
+{1}
+
+F05B699D-2840-F8CF-FD4C-AE2A4DA8724B,Type
+{checkbutton}
+
+F05B699D-2840-F8CF-FD4C-AE2A4DA8724B,VirtualText
+{ViewReadme}
+
+F05B699D-2840-F8CF-FD4C-AE2A4DA8724B,X
+{185}
+
+F05B699D-2840-F8CF-FD4C-AE2A4DA8724B,Y
+{140}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message,subst
+{1}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Conditions
+{1 condition}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Icon
+{error}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message,subst
+{1}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title,subst
+{1}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,VirtualText
+{JavaNotFound}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Alias
+{Append Done Text To Widget}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Conditions
+{0 conditions}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text,subst
+{1}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Widget
+{Text}
+
+F3B4EEE1-118B-7F0B-FC8A-1BD5B7F8AD6D,Destination
+{<%InstallDir%>}
+
+F3B4EEE1-118B-7F0B-FC8A-1BD5B7F8AD6D,FileSize
+{91399030}
+
+F3B4EEE1-118B-7F0B-FC8A-1BD5B7F8AD6D,Name
+{Windows i386}
+
+F62A221A-BCE8-C00C-2FDC-3BF838236677,Alias
+{Create Install Folder}
+
+F62A221A-BCE8-C00C-2FDC-3BF838236677,Conditions
+{1 condition}
+
+F62A221A-BCE8-C00C-2FDC-3BF838236677,FolderName
+{<%JREWinProvidedParentPath%>}
+
+F77B3EAF-2480-1A28-9A26-1AE8243DC5AD,Alias
+{Install Desktop Shortcut linux}
+
+F77B3EAF-2480-1A28-9A26-1AE8243DC5AD,Conditions
+{3 conditions}
+
+F77B3EAF-2480-1A28-9A26-1AE8243DC5AD,IconPath
+{<%InstallDir%>/gvsig-icon48x48.png}
+
+F77B3EAF-2480-1A28-9A26-1AE8243DC5AD,ShortcutName
+{<%AppName%>}
+
+F77B3EAF-2480-1A28-9A26-1AE8243DC5AD,TargetFileName
+{<%ProgramExecutable%>}
+
+F77B3EAF-2480-1A28-9A26-1AE8243DC5AD,WorkingDirectory
+{<%InstallDir%>}
+
+F8ACFCFE-D262-905B-07D2-1878C7318974,CheckCondition
+{Before Action is Executed}
+
+F8ACFCFE-D262-905B-07D2-1878C7318974,Filename
+{<%ProgramExecutable%>}
+
+F8CDD940-8CB4-6F83-3934-22F1D4A1A2B8,Alias
+{Finish Actions}
+
+F9B1D78E-01A8-7D0C-E847-5B3D24812D6D,Alias
+{Startup Actions}
+
+F9B1D78E-01A8-7D0C-E847-5B3D24812D6D,Conditions
+{0 conditions}
+
+F9BF2790-0C07-93F4-24A8-8F020F0E1D98,CheckCondition
+{Before Action is Executed}
+
+F9BF2790-0C07-93F4-24A8-8F020F0E1D98,String
+{<%ViewReadme%>}
+
+FA04143E-D058-21C2-79C2-6C2FEDA23733,Comment
+{Do not display this pane if this is an upgrade install unless there is more than one installation present}
+
+FA04143E-D058-21C2-79C2-6C2FEDA23733,Script
+{!<%UpgradeInstall%> || <%PreviousInstallCount%> != 1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,AcceptRadiobutton,subst
+{0}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Active
+{Yes}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,BackButton,subst
+{1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,CancelButton,subst
+{1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Caption,subst
+{1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Conditions
+{0 conditions}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,DeclineRadiobutton,subst
+{0}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Message,subst
+{1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,NextButton,subst
+{1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Subtitle,subst
+{1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Text,subst
+{1}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Title,subst
+{1}
+
+FADA85B6-5B3C-4924-8862-CE7AA23E989C,CheckCondition
+{Before Action is Executed}
+
+FADA85B6-5B3C-4924-8862-CE7AA23E989C,String
+{<%LaunchApplication%>}
+
+FD78DB97-3309-BCDC-0A58-8FAC16D1C87B,CheckCondition
+{Before Action is Executed}
+
+FD78DB97-3309-BCDC-0A58-8FAC16D1C87B,Filename
+{<%ProgramExecutable%>}
+
+FE1C0274-1BEE-E950-059E-C09E84930F5D,CheckCondition
+{Before Action is Executed}
+
+FE1C0274-1BEE-E950-059E-C09E84930F5D,Filename
+{<%ProgramExecutable%>}
+
+FF47761C-3CB5-DA6B-199D-3B0FCB90F30A,CheckCondition
+{Before Action is Executed}
+
+FF47761C-3CB5-DA6B-199D-3B0FCB90F30A,Operator
+{false}
+
+FF47761C-3CB5-DA6B-199D-3B0FCB90F30A,String
+{<%UpgradeInstall%>}
+
+FreeBSD-4-x86,Active
+{No}
+
+FreeBSD-4-x86,BuildSeparateArchives
+{No}
+
+FreeBSD-4-x86,DefaultDirectoryPermission
+{0755}
+
+FreeBSD-4-x86,DefaultFilePermission
+{0755}
+
+FreeBSD-4-x86,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+FreeBSD-4-x86,FallBackToConsole
+{Yes}
+
+FreeBSD-4-x86,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+FreeBSD-4-x86,InstallMode
+{Standard}
+
+FreeBSD-4-x86,InstallType
+{Typical}
+
+FreeBSD-4-x86,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+FreeBSD-4-x86,ProgramFolderAllUsers
+{No}
+
+FreeBSD-4-x86,ProgramFolderName
+{<%AppName%>}
+
+FreeBSD-4-x86,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+FreeBSD-4-x86,ProgramName
+{}
+
+FreeBSD-4-x86,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+FreeBSD-4-x86,PromptForRoot
+{Yes}
+
+FreeBSD-4-x86,RequireRoot
+{No}
+
+FreeBSD-4-x86,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+FreeBSD-5-x86,Active
+{No}
+
+FreeBSD-5-x86,BuildSeparateArchives
+{No}
+
+FreeBSD-5-x86,DefaultDirectoryPermission
+{0755}
+
+FreeBSD-5-x86,DefaultFilePermission
+{0755}
+
+FreeBSD-5-x86,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+FreeBSD-5-x86,FallBackToConsole
+{Yes}
+
+FreeBSD-5-x86,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+FreeBSD-5-x86,InstallMode
+{Standard}
+
+FreeBSD-5-x86,InstallType
+{Typical}
+
+FreeBSD-5-x86,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+FreeBSD-5-x86,ProgramFolderAllUsers
+{No}
+
+FreeBSD-5-x86,ProgramFolderName
+{<%AppName%>}
+
+FreeBSD-5-x86,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+FreeBSD-5-x86,ProgramName
+{}
+
+FreeBSD-5-x86,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+FreeBSD-5-x86,PromptForRoot
+{Yes}
+
+FreeBSD-5-x86,RequireRoot
+{No}
+
+FreeBSD-5-x86,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+FreeBSD-6-x86,Active
+{No}
+
+FreeBSD-6-x86,BuildSeparateArchives
+{No}
+
+FreeBSD-6-x86,DefaultDirectoryPermission
+{0755}
+
+FreeBSD-6-x86,DefaultFilePermission
+{0755}
+
+FreeBSD-6-x86,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+FreeBSD-6-x86,FallBackToConsole
+{Yes}
+
+FreeBSD-6-x86,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+FreeBSD-6-x86,InstallMode
+{Standard}
+
+FreeBSD-6-x86,InstallType
+{Typical}
+
+FreeBSD-6-x86,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+FreeBSD-6-x86,ProgramFolderAllUsers
+{No}
+
+FreeBSD-6-x86,ProgramFolderName
+{<%AppName%>}
+
+FreeBSD-6-x86,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+FreeBSD-6-x86,ProgramName
+{}
+
+FreeBSD-6-x86,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+FreeBSD-6-x86,PromptForRoot
+{Yes}
+
+FreeBSD-6-x86,RequireRoot
+{No}
+
+FreeBSD-6-x86,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+FreeBSD-7-x86,Active
+{No}
+
+FreeBSD-7-x86,BuildSeparateArchives
+{No}
+
+FreeBSD-7-x86,DefaultDirectoryPermission
+{0755}
+
+FreeBSD-7-x86,DefaultFilePermission
+{0755}
+
+FreeBSD-7-x86,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+FreeBSD-7-x86,FallBackToConsole
+{Yes}
+
+FreeBSD-7-x86,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+FreeBSD-7-x86,InstallMode
+{Standard}
+
+FreeBSD-7-x86,InstallType
+{Typical}
+
+FreeBSD-7-x86,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+FreeBSD-7-x86,ProgramFolderAllUsers
+{No}
+
+FreeBSD-7-x86,ProgramFolderName
+{<%AppName%>}
+
+FreeBSD-7-x86,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+FreeBSD-7-x86,ProgramName
+{}
+
+FreeBSD-7-x86,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+FreeBSD-7-x86,PromptForRoot
+{Yes}
+
+FreeBSD-7-x86,RequireRoot
+{No}
+
+FreeBSD-7-x86,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+HPUX-hppa,Active
+{No}
+
+HPUX-hppa,BuildSeparateArchives
+{No}
+
+HPUX-hppa,DefaultDirectoryPermission
+{0755}
+
+HPUX-hppa,DefaultFilePermission
+{0755}
+
+HPUX-hppa,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+HPUX-hppa,FallBackToConsole
+{Yes}
+
+HPUX-hppa,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+HPUX-hppa,InstallMode
+{Standard}
+
+HPUX-hppa,InstallType
+{Typical}
+
+HPUX-hppa,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+HPUX-hppa,ProgramFolderAllUsers
+{No}
+
+HPUX-hppa,ProgramFolderName
+{<%AppName%>}
+
+HPUX-hppa,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+HPUX-hppa,ProgramName
+{}
+
+HPUX-hppa,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+HPUX-hppa,PromptForRoot
+{Yes}
+
+HPUX-hppa,RequireRoot
+{No}
+
+HPUX-hppa,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+Linux-x86,Active
+{Yes}
+
+Linux-x86,BuildSeparateArchives
+{No}
+
+Linux-x86,DefaultDirectoryPermission
+{0755}
+
+Linux-x86,DefaultFilePermission
+{0755}
+
+Linux-x86,Executable
+{<%ShortAppName%>-<%Version%>-<%BuildVersion%>-<%DevelState%>-lin-x86-online.run}
+
+Linux-x86,FallBackToConsole
+{Yes}
+
+Linux-x86,InstallDir
+{<%Home%>/<%ShortAppName%>/<%ShortAppName%>-<%Version%>}
+
+Linux-x86,InstallMode
+{Standard}
+
+Linux-x86,InstallType
+{Typical}
+
+Linux-x86,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+Linux-x86,ProgramFolderAllUsers
+{No}
+
+Linux-x86,ProgramFolderName
+{<%AppName%>}
+
+Linux-x86,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+Linux-x86,ProgramName
+{}
+
+Linux-x86,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+Linux-x86,PromptForRoot
+{No}
+
+Linux-x86,RequireRoot
+{No}
+
+Linux-x86,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+Linux-x86_64,Active
+{No}
+
+Linux-x86_64,BuildSeparateArchives
+{No}
+
+Linux-x86_64,DefaultDirectoryPermission
+{0755}
+
+Linux-x86_64,DefaultFilePermission
+{0755}
+
+Linux-x86_64,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+Linux-x86_64,FallBackToConsole
+{Yes}
+
+Linux-x86_64,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+Linux-x86_64,InstallMode
+{Standard}
+
+Linux-x86_64,InstallType
+{Typical}
+
+Linux-x86_64,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+Linux-x86_64,ProgramFolderAllUsers
+{No}
+
+Linux-x86_64,ProgramFolderName
+{<%AppName%>}
+
+Linux-x86_64,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+Linux-x86_64,ProgramName
+{}
+
+Linux-x86_64,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+Linux-x86_64,PromptForRoot
+{Yes}
+
+Linux-x86_64,RequireRoot
+{No}
+
+Linux-x86_64,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+Solaris-sparc,Active
+{No}
+
+Solaris-sparc,BuildSeparateArchives
+{No}
+
+Solaris-sparc,DefaultDirectoryPermission
+{0755}
+
+Solaris-sparc,DefaultFilePermission
+{0755}
+
+Solaris-sparc,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+Solaris-sparc,FallBackToConsole
+{Yes}
+
+Solaris-sparc,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+Solaris-sparc,InstallMode
+{Standard}
+
+Solaris-sparc,InstallType
+{Typical}
+
+Solaris-sparc,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+Solaris-sparc,ProgramFolderAllUsers
+{No}
+
+Solaris-sparc,ProgramFolderName
+{<%AppName%>}
+
+Solaris-sparc,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+Solaris-sparc,ProgramName
+{}
+
+Solaris-sparc,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+Solaris-sparc,PromptForRoot
+{Yes}
+
+Solaris-sparc,RequireRoot
+{No}
+
+Solaris-sparc,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+Solaris-x86,Active
+{No}
+
+Solaris-x86,BuildSeparateArchives
+{No}
+
+Solaris-x86,DefaultDirectoryPermission
+{0755}
+
+Solaris-x86,DefaultFilePermission
+{0755}
+
+Solaris-x86,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+Solaris-x86,FallBackToConsole
+{Yes}
+
+Solaris-x86,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+Solaris-x86,InstallMode
+{Standard}
+
+Solaris-x86,InstallType
+{Typical}
+
+Solaris-x86,ProgramExecutable
+{<%InstallDir%>/gvSIG.sh}
+
+Solaris-x86,ProgramFolderAllUsers
+{No}
+
+Solaris-x86,ProgramFolderName
+{<%AppName%>}
+
+Solaris-x86,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+Solaris-x86,ProgramName
+{}
+
+Solaris-x86,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+Solaris-x86,PromptForRoot
+{Yes}
+
+Solaris-x86,RequireRoot
+{No}
+
+Solaris-x86,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+TarArchive,Active
+{No}
+
+TarArchive,BuildSeparateArchives
+{No}
+
+TarArchive,CompressionLevel
+{6}
+
+TarArchive,DefaultDirectoryPermission
+{0755}
+
+TarArchive,DefaultFilePermission
+{0755}
+
+TarArchive,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+TarArchive,FallBackToConsole
+{Yes}
+
+TarArchive,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+TarArchive,InstallMode
+{Standard}
+
+TarArchive,InstallType
+{Typical}
+
+TarArchive,OutputFileName
+{<%ShortAppName%>-<%Version%>-<%BuildVersion%>-devel-all-x86.tar.gz}
+
+TarArchive,ProgramExecutable
+{}
+
+TarArchive,ProgramFolderAllUsers
+{No}
+
+TarArchive,ProgramFolderName
+{<%AppName%>}
+
+TarArchive,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+TarArchive,ProgramName
+{}
+
+TarArchive,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+TarArchive,PromptForRoot
+{Yes}
+
+TarArchive,RequireRoot
+{No}
+
+TarArchive,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+TarArchive,VirtualTextMap
+{<%InstallDir%> <%ShortAppName%>}
+
+Windows,Active
+{Yes}
+
+Windows,BuildSeparateArchives
+{No}
+
+Windows,Executable
+{<%ShortAppName%>-<%Version%>-<%BuildVersion%>-<%DevelState%>-win-x86-online.exe}
+
+Windows,FileDescription
+{<%AppName%> <%Version%> Setup}
+
+Windows,IncludeTWAPI
+{No}
+
+Windows,InstallDir
+{<%PROGRAM_FILES%>/<%AppName%> <%Version%>}
+
+Windows,InstallMode
+{Standard}
+
+Windows,InstallType
+{Typical}
+
+Windows,LastRequireAdministrator
+{Yes}
+
+Windows,ProgramExecutable
+{<%InstallDir%>/gvsig-desktop.exe}
+
+Windows,ProgramFolderAllUsers
+{No}
+
+Windows,ProgramFolderName
+{<%AppName%> <%Version%>}
+
+Windows,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+Windows,ProgramName
+{}
+
+Windows,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+Windows,RequireAdministrator
+{Yes}
+
+Windows,UseUncompressedBinaries
+{No}
+
+Windows,WindowsIcon
+{Setup Blue Screen.ico}
+
+ZipArchive,Active
+{No}
+
+ZipArchive,BuildSeparateArchives
+{No}
+
+ZipArchive,CompressionLevel
+{6}
+
+ZipArchive,DefaultDirectoryPermission
+{0755}
+
+ZipArchive,DefaultFilePermission
+{0755}
+
+ZipArchive,Executable
+{<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>}
+
+ZipArchive,FallBackToConsole
+{Yes}
+
+ZipArchive,InstallDir
+{<%Home%>/<%ShortAppName%>}
+
+ZipArchive,InstallMode
+{Standard}
+
+ZipArchive,InstallType
+{Typical}
+
+ZipArchive,OutputFileName
+{<%ShortAppName%>-<%Version%>-<%BuildVersion%>-devel-all-x86.zip}
+
+ZipArchive,ProgramExecutable
+{}
+
+ZipArchive,ProgramFolderAllUsers
+{No}
+
+ZipArchive,ProgramFolderName
+{<%AppName%>}
+
+ZipArchive,ProgramLicense
+{<%InstallDir%>/LICENSE.txt}
+
+ZipArchive,ProgramName
+{}
+
+ZipArchive,ProgramReadme
+{<%InstallDir%>/README.txt}
+
+ZipArchive,PromptForRoot
+{Yes}
+
+ZipArchive,RequireRoot
+{No}
+
+ZipArchive,RootInstallDir
+{/usr/local/<%ShortAppName%>}
+
+ZipArchive,VirtualTextMap
+{<%InstallDir%> <%ShortAppName%>}
+
+}
+
+::msgcat::mcmset ca {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Si us plau, localitzeu el vostre Entorn d'Execució Java (JRE)}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Cercant l'Entorn d'Execució Java (JRE)...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Llegenda}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Missatge aquí.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Ròtul de la Finestra}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Si us plau, espereu mentre s'instal·la <%AppName%> en el seu equip.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Instal·lant <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Instal·lant}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Llegenda}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Missatge}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Subtítol}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Escriviu aquí el vostre missatge personalitzat.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Ròtul}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset cs {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Prosím sdělte nám, kde je umístěno vaše Java Runtime}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Hledání Java Runtime...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Titulek}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Zde bude zpráva.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Název okna}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Prosím čekejte, dokud nebude program <%AppName%> nainstalován na váš počítač.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Instalace programu <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Instalace}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Titulek}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Zpráva}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Podnadpis}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Zde vložte svůj vlastní text.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Nadpis}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset de {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Bitte sagen Sie uns, wo Ihre Java Runtime zu finden ist.}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Suche Java Runtime...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Überschrift}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Meldung kommt hier.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Window Titel}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Bitte warten Sie, während Setup <%AppName%> auf Ihrem Computer installiert.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Installiere <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Installation}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Untertitel}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Meldung}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Untertitel}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Ihr benutzerdefinierter Text kommt hier hin.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Titel}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset en {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Please tell us where your Java Runtime is located}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Locating Java Runtime...}
+
+13B0CFA5-2D5C-AB51-C61F-482B3ADF17BF,TclScript
+{proc extractpks { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/package.gvspks"] == 1 } {
+                file copy "$root/package.gvspks" "$folder/package.gvspks"
+        }
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+        puts "Package set extracted to folder $folder"
+}
+
+extractpks <%Installer%> <%InstallDir%>/install}
+
+27940F23-2EE5-46FC-5575-C9CE1A69A795,Text
+{<%CreateDesktopShortcutText%>}
+
+3612D54D-E04C-68D8-73D6-FE3FCAE9E8B3,Text
+{<%LaunchApplicationText%>}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{
+
+Done!}
+
+3D58566B-5250-59FA-22B1-54D351A4B7F8,Text
+{<%LaunchApplicationText%>}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Caption
+{<%ApplicationReadmeText%>}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Message
+{}
+
+463CB205-D3DB-747D-3003-A0EC3E0A7971,Title
+{<%ApplicationReadmeText%>}
+
+498A679C-D1AC-9930-D5A0-80135E9AA8E6,Text
+{<%CreateQuickLaunchShortcutText%>}
+
+522D03E3-8080-D61E-E6A9-863B6C61F3A2,Text
+{<%CreateDesktopShortcutText%>}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{
+
+Running the JRE installer for windows in: <%JREWinProvidedInstaller%>...
+
+}
+
+5456E2BC-1CF2-FCC0-3328-61F0E191FAC2,Message
+{<%UninstallStartupText%>}
+
+5456E2BC-1CF2-FCC0-3328-61F0E191FAC2,Title
+{<%UninstallApplicationText%>}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{Java installation found in the system at: <%JavaExecutable%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{<%ApplicationReadmeText%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{<%ApplicationReadmeText%>}
+
+72B87294-F7B2-1240-D39D-4FACC79525BB,Text
+{<%ViewReadmeText%>}
+
+77015942-52D7-9F56-971E-6DD392CE667F,Message
+{A provided JRE installation has been found in <%JRELinuxProvidedHome%>. Will use it as the Java installation to run gvSIG.}
+
+77015942-52D7-9F56-971E-6DD392CE667F,Title
+{Provided JRE installation found}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%JREDownloadPercentComplete%>}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{
+
+Running the JRE installer for linux in: <%JRELinuxProvidedInstaller%>...
+
+}
+
+986E6738-F9BC-9444-D665-C6F52970C695,Description
+{<%TypicalInstallDescription%>}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+A28451B2-C088-700D-C29F-C1F7DD156966,TclScript
+{proc extractjrewin { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/jre-installer-win.exe"] == 1 } {
+                file copy "$root/jre-installer-win.exe" "$folder/jre-installer-win.exe"
+	        puts "JRE installer extracted to folder $folder"
+        } else {
+		puts "JRE installer (jre-installer-win.exe) not available to be extracted"
+	}
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+}
+
+extractjrewin <%Installer%> <%JREWinProvidedParentPath%>}
+
+A9030D89-64CC-E238-4A51-A3EA100D595B,Description
+{<%CustomInstallDescription%>}
+
+B2B4F1C3-E07A-3A4B-FD95-2FDCAA3F9739,Text
+{Install a new Java Runtime Environment}
+
+B5596A3D-1144-577B-F624-E9648DACD74A,Text
+{<%CreateQuickLaunchShortcutText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,Message
+{<%DeleteInstallDirContents%>}
+
+C5BEF668-50B1-4104-94BD-010A340BEC33,Title
+{<%InstallApplicationText%>}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{Select another Java installation to use}
+
+DBB2EE41-078C-8912-13BF-8DC9DA750DA7,Message
+{<%InstallStartupText%>}
+
+DBB2EE41-078C-8912-13BF-8DC9DA750DA7,Title
+{<%InstallApplicationText%>}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+DeleteInstallDirContents
+{Install folder <%InstallDir%> already exists. Would you like to delete all its contents?}
+
+EE918467-993A-9E94-31D7-B8C02C46EE4A,Description
+{<%ProgramFilesDescription%>}
+
+F05B699D-2840-F8CF-FD4C-AE2A4DA8724B,Text
+{<%ViewReadmeText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{A valid Java installation hasn't been found in the selected folder}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{Java installation not found}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{
+
+Done!}
+
+FA9107E8-99B9-B71C-058B-5FBEEEBA6932,Text
+{<%LicenseText%>}
+
+}
+::msgcat::mcmset es {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Por favor, localice su Entorno de Ejecución Java (JRE)}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Buscando Entorno de Ejecución Java (JRE)...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Leyenda}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Mensaje aquí.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Título de la Ventana}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+DeleteInstallDirContents
+{La carpeta de instalación <%InstallDir%> ya existe. ¿Desea borrar su contenido?}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset fr {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Merci de préciser la localisation de votre Runtime Java}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Localisation du Runtime Java...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Légende}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Saisir le message ici.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Titre de la fenêtre}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Patientez pendant l'installation de <%AppName%> sur votre ordinateur.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Installation de <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Installation}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Légende}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Message}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Sous-titre}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Saisissez votre texte personnalisé ici.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Titre}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset hu {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Kérem mondja meg, hogy a Java futtatási környezet hol található}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{A Java futtatási környezet keresése...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Fejléc}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Az üzenet jön ide.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Ablak cím}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Kérem várjon, amíg a Telepítő a <%AppName%> programot feltelepíti a gépére.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{<%AppName%> telepítése}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Telepítés}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Leírás}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Üzenet}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Alcím}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{A saját szövegedet rakd ide.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Cím}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset it {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Si prega di comunicare dove si trova la Java Runtime}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Individuazione della Java Runtime in corso...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Didascalia}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Il messaggio va qui.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Titolo della finestra}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Si prega di attendere mentre il programma installa <%AppName%> sul computer.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Installazione di <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Installazione in corso}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Didascalia}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Messaggio}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Sottotitolo}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Inserire qui il testo personalizzato.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Titolo}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset lt {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Praðom pasakyti kur jûsø Java Runtime randasi}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Ieðkome Java Runtime...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Pavadinimas}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Praneðimas ávedamas èia.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Lango Antraðtë}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Praðom palaukti kol diegimo programa ádiegs <%AppName%> á jûsø kompiuterá.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Diegiama <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Diegiama}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Pavadinimas}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Praneðimas}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Paantraðtë}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Áveskite pasirinktà teskta.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Antraðtë}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset nl {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Wijs uw Java Runtime locatie aan}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Java Runtime lokaliseren...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Bijschrift}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Bericht gaat hier.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Scherm titel}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Een ogenblik geduld terwijl <%AppName%> wordt geïnstalleerd op uw computer.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{<%AppName%> installeren}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Installeren}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Bijschrift}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Bericht}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Ondertitel}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Zet uw eigen tekst hier.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Titel}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset pl {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Proszę powiedzieć, gdzie zainstalowano Java Runtime Environment.}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Szukanie Java Runtime...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Nagłówek}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Wyjście wiadomości.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Okno tytułowe}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Proszę czekać podczas, gdy Instalator instaluje <%AppName%> na twoim komputerze.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Instalowanie <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Instalowanie}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Nagłówek}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Wiadomość}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{podtytuł}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Tutaj wpisuj swój tekst.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Tytuł}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset pt_br {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Por favor informe onde o Java Runtime está instalado}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Localizando Java Runtime...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Caption}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Mensagens aparecerão aqui.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Título da Janela}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Por favor, aguarde enquanto o programa <%AppName%> é instalado em seu computador.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Instalando <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Instalando}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Caption}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Mensagem}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Subtítulo}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Coloque seu texto personalizado aqui.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Título}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+::msgcat::mcmset ru {
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,PromptMessage
+{Ïîæàëóéñòà, óêàæèòå ãäå íàõîäèòñÿ Java Runtime}
+
+0A09E8FF-E3FC-93A2-4010-193F58CC0642,StatusMessage
+{Èä¸ò ïîèñê Java Runtime...}
+
+37D8727F-784B-971D-0B25-EF453D774135,Text
+{}
+
+5440E8F0-4B75-D6D8-950D-47E922DD1339,Text
+{}
+
+5DB71BAB-7CA9-30E5-890F-F7DA7B130A78,Text
+{}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Caption
+{Ïîäïèñü}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,CloseButton
+{<%Close%>}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Message
+{Çäåñü äîëæíî áûòü ñîîáùåíèå.}
+
+7274AE39-5471-DFD1-B914-B271EC6A3CCC,Title
+{Çàãîëîâîê îêíà}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,BackButton
+{< <%Back%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,CancelButton
+{<%Cancel%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Caption
+{Èä¸ò óñòàíîâêà <%AppName%> íà Âàø êîìïüþòåð. Ïîæàëóéñòà, ïîäîæäèòå.}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,FileLabel
+{<%Status%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Message
+{}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,NextButton
+{<%Next%> >}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,ProgressValue
+{<%InstallPercentComplete%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Subtitle
+{Óñòàíîâêà <%AppName%>}
+
+7EAAED24-06DF-C67A-3AAE-8AC0DACAFF60,Title
+{Óñòàíîâêà}
+
+85C39244-5152-EB74-0F21-461DFC494176,Message
+{<%InstallationCompleteText%>}
+
+90DB86EE-13EB-6DED-4F6A-3F1D42FBA767,Text
+{}
+
+9C0AD838-BABB-9E1B-2CE4-1DB51BFFEB02,Message
+{<%UninstallCompleteText%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,BackButton
+{< <%Back%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,CancelButton
+{<%Cancel%>}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Caption
+{Ïîäïèñü}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Message
+{Ñîîáùåíèå}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,NextButton
+{<%Next%> >}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Subtitle
+{Ïîäçàãîëîâîê}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Text
+{Çäåñü âïèøèòå òåêñò.}
+
+BCA2EBA3-8663-9B43-6783-EB398AADE2F5,Title
+{Çàãîëîâîê}
+
+CB7DC160-9665-692E-FC7F-DED112F475EC,Text
+{}
+
+DDFB3B25-32C6-8039-5760-8F6BF9C270E5,Message
+{<%UninstallingApplicationText%>}
+
+F1B8769A-B5DF-A93B-E827-BF03B90235FD,Message
+{<%InstallingApplicationText%>}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Message
+{}
+
+F2A90D63-4115-52B2-1A71-0B8287C4960E,Title
+{}
+
+F2C44D85-089E-E0BC-F2C8-3F2C25E54AB0,Text
+{}
+
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/nl.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/nl.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/nl.msg	(revision 42196)
@@ -0,0 +1,661 @@
+ApplicationReadmeText
+"<%AppName%> Readme"
+
+Back
+"Terug"
+
+Browse
+"Bladeren..."
+
+BuildFileText
+"Bouwen <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Bouwen de�nstallatie..."
+
+Cancel
+"Annuleren"
+
+CleanupInstallText
+"Opschonen installatie..."
+
+Close
+"Sluiten"
+
+ConsolePauseQuitText
+"-- Druk op spatie om door te gaan of op 'q' om te stoppen --"
+
+ConsolePauseText
+"-- Druk op spatie om door te gaan --"
+
+ConsoleSelectDestinationText
+"Waar wilt u <%AppName%> installeren?"
+
+CreateDesktopShortcutText
+"Maak bureaublad snelkoppeling"
+
+CreateQuickLaunchShortcutText
+"Maak Snel Start snelkoppeling"
+
+CustomInstallDescription
+"Selecteer afzonderlijke componenten voor installatie."
+
+DirectoryPermissionText
+"U heeft geen toestemming om te schrijven naar <%Dir%>."
+
+DisplayName
+"<%AppName%>"
+
+DownloadingFilesText
+"Bestanden downloaden..."
+
+ExitText
+"Weet u zeker dat u wilt stoppen met deze installatie?"
+
+FileBeingInstalledText
+"Kopi�ren <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Verwijderen <%FileBeingUninstalled%>"
+
+FileOverwriteText
+"Het bestand <%FileBeingInstalled%> bestaat al.  Wilt u het overschrijven?"
+
+Finish
+"Klaar"
+
+GroupBeingInstalledText
+"Installeren <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Verwijderen <%GroupBeingUninstalled%>"
+
+Help
+"Help"
+
+InstallApplicationText
+"Installeer <%AppName%>"
+
+InstallationCompleteText
+"Installatie afgerond."
+
+InstallCompleteText
+"Bestand installatie afgerond..."
+
+InstallingApplicationText
+"<%AppName%> installeren..."
+
+InstallPrepareText
+"Installatie voorbereiden..."
+
+InstallStartupText
+"Dit zal <%AppName%> op uw computer installeren.  Doorgaan?"
+
+InstallTitleText
+"<%AppName%> Setup"
+
+LaunchApplicationText
+"Start <%AppName%>"
+
+Next
+"Volgende"
+
+No
+"Nee"
+
+OK
+"OK"
+
+PasswordIncorrectText
+"Wachtwoord is onjuist."
+
+ProgramFilesDescription
+"Algemene bestanden"
+
+PromptForDirectoryMessage
+"Selecteer een directory, klik daarna op OK."
+
+PromptForDirectoryTitle
+"Blader naar map"
+
+PromptForRootText
+"Vul uw root wachtwoord in."
+
+RequireRootText
+"U moet root zijn om dit programma te installeren."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Een standaard installatie."
+
+UninstallApplicationText
+"Verwijderen <%AppName%>"
+
+UninstallPrepareText
+"De�nstallatie voorbereiden..."
+
+UpdateRegistryText
+"Windows Register bijwerken..."
+
+UninstallingApplicationText
+"<%AppName%> verwijderen..."
+
+UninstallCompleteText
+"De�nstallatie klaar."
+
+UninstallStartupText
+"Dit verwijderd <%AppName%> geheel van uw systeem.  Weet u zeker\
+ dat u dit wilt doen?"
+
+UninstallLeftoverText
+"Sommige componenten konden niet worden verwijderd.  Wilt u ze toch verwijderen\
+ (niet aangeraden)?"
+
+UninstallTitleText
+"Verwijder <%AppName%>"
+
+UnpackingFilesText
+"Bestanden uitpakken..."
+
+VersionHelpText
+"Dit programma zal <%AppName%> versie <%Version%> installeren."
+
+ViewReadmeText
+"Bekijk Readme"
+
+Yes
+"Ja"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "Wijs uw Java Runtime locatie aan"
+
+    StatusMessage
+    "Java Runtime lokaliseren..."
+}
+
+TextWindow {
+    Title
+    "Scherm titel"
+
+    Caption
+    "Bijschrift"
+
+    Message
+    "Bericht gaat hier."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Selecteer Componenten"
+
+    Subtitle
+    "Selecteer de componenten die het installatie programma zal installeren."
+
+    Caption
+    "Selecteer de componenten die u wilt installeren en deselecteer de componenten\
+     die u niet wilt installeren."
+
+    Message
+    "<%SpaceRequiredText%> aan ruimte benodigd"
+
+    DescriptionLabel
+    "Omschrijving"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Installeren"
+
+    Subtitle
+    "<%AppName%> installeren"
+
+    Caption
+    "Een ogenblik geduld terwijl <%AppName%> wordt ge�nstalleerd op uw computer."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Bijschrift hier."
+
+    Message
+    "Bericht hier."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Titel"
+
+    Subtitle
+    "Ondertitel"
+
+    Caption
+    "Bijschrift"
+
+    Message
+    "Bericht"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Titel"
+
+    Subtitle
+    "Ondertitel"
+
+    Caption
+    "Bijschrift"
+
+    Message
+    "Bericht"
+
+    Text
+    "Zet uw eigen tekst hier."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Licentie Overeenkomst"
+
+    Subtitle
+    "Lees de licentie overeenkomst aandachtig."
+
+    AcceptRadiobutton
+    "Ik ga akkoord met de licentie overeenkomst."
+
+    DeclineRadiobutton
+    "Ik ga NIET akkoord met de licentie overeenkomst."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "Stop Installatie"
+}
+
+Readme {
+    Title
+    "Readme Informatie"
+
+    Subtitle
+    "Readme Informatie voor <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Kies de installatie map"
+
+    Subtitle
+    "Waar moet <%AppName%> worden ge�nstalleerd?"
+
+    Caption
+    "Dit installatie programma zal <%AppName%> in de onderstaande map installeren."
+
+
+    Message
+    ""
+
+    BrowseText
+    "Als u de installatie locatie wilt wijzigen klikt u op 'Selecteer map' en selecteert u een nieuwe locatie.
+     Om verder te gaan met het installatieproces klikt u op Volgende."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Installatie map"
+}
+
+SelectProgramFolder {
+    Title
+    "Selecteer Programma Map"
+
+    Subtitle
+    "U kunt de Programma map selecteren."
+
+    Caption
+    "Het installatie programma zal de programma iconen toevoegen aan de onderstaande Programma map. \
+     U kunt een nieuwe map aanmaken of een bestaande map selecteren uit de lijst. \
+     Klik op Volgende om door te gaan."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Programma map:"
+
+    FolderListLabel
+    "Huidige mappen:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Maak programma map voor alle gebruikers"
+}
+
+SetupComplete {
+    Caption
+    "Installatie Programma Afgerond"
+
+    Message
+    "Het installatie programma heeft <%AppName%> succesvol ge�nstalleerd. \
+     Klik op <%Finish%> om het installatie programma te sluiten."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Setup Type"
+
+    Subtitle
+    "Kies het type setup dat u prefereerd."
+
+    Caption
+    "Kies het type setup dat u prefereerd."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Omschrijving"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Start Kopi�ren Bestanden"
+
+    Subtitle
+    "Bekijk uw instellingen voordat het installeren begint"
+
+    Caption
+    "Het installatie programma heeft genoeg informatie om het kopi�ren te starten. \
+     Als u de instellingen wilt bekijken of wijzigen kunt op <%Back%> klikken.  Als u\
+     tevreden bent met de instellingen klikt u op <%Next%> om het kopi�ren te starten."
+
+    Message
+    ""
+
+    Text
+    "Installatie directory:
+            <%InstallDir%>
+
+    Setup type:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "De�nstalleren"
+
+    Subtitle
+    "<%AppName%> de�nstalleren"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "De�nstallatie afgerond"
+
+    Message
+    "<%AppName%> is van uw systeem verwijderd."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "De�nstallatie Details"
+
+    Subtitle
+    "Er hebben zich fouten voorgedaan tijdens de de�nstallatie"
+
+    Caption
+    "De volgende fouten hebben zicht voorgedaan tijdens de de�nstallatie:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Gebruikers Informatie"
+
+    Subtitle
+    "Vul uw informatie in."
+
+    Caption
+    "Vul uw naam en uw bedrijfsnaam in."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Naam:"
+
+    CompanyLabel
+    "Bedrijfsnaam:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Welkom bij het <%AppName%> installatie programma.  Dit programma zal\
+     <%AppName%> op uw computer installeren."
+
+    Message
+    "Het is aan te raden alle overige applicaties te sluiten alvorens\
+     verder te gaan met deze installatie.\n\nKlik op <%Next%> om verder\
+     te gaan of op <%Cancel%> om deze installatie af te breken"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+InstallPassword {
+    Title
+    "Installatie Wachtwoord"
+
+    Subtitle
+    "Deze installatie vereist een wachtwoord om door te kunnen gaan."
+
+    Caption
+    "Vul uw wachtwoord in."
+
+    Message
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/pl.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/pl.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/pl.msg	(revision 42196)
@@ -0,0 +1,622 @@
+# options: -encoding utf-8
+
+ApplicationReadmeText
+"<%AppName%> Readme"
+
+Back
+"Wstecz"
+
+Browse
+"Przeglądaj..."
+
+BuildFileText
+"Budowanie <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Budowanie deinstalatora..."
+
+Cancel
+"Anuluj"
+
+CleanupInstallText
+"Czyszczenie instalacji..."
+
+Close
+"Zamknij"
+
+ConsolePauseQuitText
+"-- Wciśnij spację, aby kontynuować lub 'q', aby wyjść --"
+
+ConsolePauseText
+"-- Wciśnij spację, aby kontynuować --"
+
+ConsoleSelectDestinationText
+"Gdzie chcesz zainstalować <%AppName%>?"
+
+CreateDesktopShortcutText
+"Utwórz skrót na pulpicie"
+
+CreateQuickLaunchShortcutText
+"Utwórz skrót szybkiego uruchamiania"
+
+CustomInstallDescription
+"Zaznacz wybrane komponenty do instalacji."
+
+DirectoryPermissionText
+"Nie masz uprawniwń, aby zapisywać w <%Dir%>."
+
+DownloadingFilesText
+"Pobieranie plików..."
+
+ExitText
+"Czy na pewno chcesz opuścić instalator?"
+
+FileBeingInstalledText
+"Kopiowanie <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Usuwanie <%FileBeingUninstalled%>"
+
+FileOverwriteText
+"Plik <%FileBeingInstalled%> już istnieje.  Czy chcesz go naspisać?"
+
+Finish
+"Zakończ"
+
+GroupBeingInstalledText
+"Instalowanie <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Usuwanie <%GroupBeingUninstalled%>"
+
+Help
+"Pomoc"
+
+InstallApplicationText
+"Instaluj <%AppName%>"
+
+InstallationCompleteText
+"Instalacja zakończona."
+
+InstallCompleteText
+"Instalacja pliku zakończona..."
+
+InstallingApplicationText
+"Instalowanie <%AppName%>..."
+
+InstallPrepareText
+"Przygotowywanie do instalacji..."
+
+InstallStartupText
+"Instalator zainstaluje <%AppName%> na twoim komputerze. Kontynuować?"
+
+LaunchApplicationText
+"Uruchom <%AppName%>"
+
+Next
+"Dalej"
+
+No
+"Nie"
+
+OK
+"OK"
+
+ProgramFilesDescription
+"Common Program Files"
+
+PromptForRootText
+"Proszę wpisać hasło administratora."
+
+RequireRootText
+"Musisz być administratorem (root), aby uruchomić ten instalator."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Instalacja typowa."
+
+UninstallApplicationText
+"Usuń <%AppName%>"
+
+UninstallPrepareText
+"Przygotowywanie do deinstalacji..."
+
+UpdateRegistryText
+"Uaktualnianie rejestru Windows..."
+
+UninstallingApplicationText
+"Deinstalacja <%AppName%>..."
+
+UninstallCompleteText
+"Deinstalacja zakończona."
+
+UninstallStartupText
+"<%AppName%> zostanie kompletnie usunięty z twojego systemu.  Czy\
+ na pewno chcesz tego?"
+
+UninstallLeftoverText
+"Niektóre komponenty nie mogły zostać usunięte.  Czy pomimo to chcesz\
+ je usunąć (niezalecane)?"
+
+VersionHelpText
+"Ten program zainstaluje <%AppName%> w wersji <%Version%>."
+
+ViewReadmeText
+"Pokaż Readme"
+
+Yes
+"Tak"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "Proszę powiedzieć, gdzie zainstalowano Java Runtime Environment."
+
+    StatusMessage
+    "Szukanie Java Runtime..."
+}
+
+TextWindow {
+    Title
+    "Okno tytułowe"
+
+    Caption
+    "Nagłówek"
+
+    Message
+    "Wyjście wiadomości."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+# options: -encoding utf-8
+
+ChooseComponents {
+    Title
+    "Wybierz komponenty"
+
+    Subtitle
+    "Wybierz komponenty do zainstalowania."
+
+    Caption
+    "Zaznacz komponenty, które chcesz zainstalować, a odznacz te,\
+     których nie chcesz instalować."
+
+    Message
+    "Wymagane miejsce na dysku: <%SpaceRequiredText%>"
+
+    DescriptionLabel
+    "Opis"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Instalowanie"
+
+    Subtitle
+    "Instalowanie <%AppName%>"
+
+    Caption
+    "Proszę czekać podczas, gdy Instalator instaluje <%AppName%> na twoim komputerze."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "Caption goes here."
+
+    Message
+    "Message goes here."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Tytuł"
+
+    Subtitle
+    "Podtytuł"
+
+    Caption
+    "Nagłówek"
+
+    Message
+    "Wiadomość"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Tytuł"
+
+    Subtitle
+    "podtytuł"
+
+    Caption
+    "Nagłówek"
+
+    Message
+    "Wiadomość"
+
+    Text
+    "Tutaj wpisuj swój tekst."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Warunki licencji"
+
+    Subtitle
+    "Proszę uważnie przeczytać poniższą licencję."
+
+    AcceptRadiobutton
+    "Akceptuję warunki licencji."
+
+    DeclineRadiobutton
+    "Nie akceptuję warunków licencji."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Informacje Readme"
+
+    Subtitle
+    "Informacje Readme dla <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Wybierz folder docelowy"
+
+    Subtitle
+    "Gdzie zainstalować <%AppName%>?"
+
+    Caption
+    "Instalator zainstaluje <%AppName%> w wybranym folderze.\n\nAby instalować\
+     w tym folderze, kliknij Dalej.  Aby zainstalować w innym folderze, kliknij\
+     Przeglądaj i wybierz inny folder."
+
+    Message
+    ""
+
+    BrowseText
+    "Aby kontynuować, kliknij Dalej.  Jeśli chcesz wybrać inny folder,\
+     kliknij Przeglądaj."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Folder docelowy"
+}
+
+SelectProgramFolder {
+    Title
+    "Wybierz folder programu"
+
+    Subtitle
+    "Przoszę wybrać folder dla programu."
+
+    Caption
+    "Instalator doda ikonki programu w folderze aplikacji wybranym poniżej. \
+     Możesz wprowadzić nową nazwę folderu lub wybrać z listy już istniejących. \
+     Kliknij Dalej, aby kontynuować."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Folder programu:"
+
+    FolderListLabel
+    "Istniejące foldery:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Utwórz folder programu dla wszystkich użytkowników"
+}
+
+SetupComplete {
+    Caption
+    "InstallJammer - Instalacja zakończona"
+
+    Message
+    "Instalator InstallJammer zainstalował pomyślnie <%AppName%>. \
+     Kliknij Zakończ, aby opuścić instalator."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Typ instalacji"
+
+    Subtitle
+    "Wybierz typ instalacji, który Ci odpowiada."
+
+    Caption
+    "Kliknij preferowany typ instalacji."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Opis"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Rozpocznij kopiowanie plików"
+
+    Subtitle
+    "Pokaż ustawienia przed rozpoczęciem kopiowania plików"
+
+    Caption
+    "Instalator posiada już wszystkie informacje potrzebnedo rozpoczęcia\
+     kopiowania plików. Jeśli chcesz zobaczyć ustawienia lub zmienić je,\
+     kliknij Wstecz. Jeśli jesteś pewien ustawień, kliknij Dalej, aby\
+     rozpocząć kopiowanie plików."
+
+    Message
+    ""
+
+    Text
+    "Folder docelowy:
+            <%InstallDir%>
+
+    Typ instalacji:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Usuwanie"
+
+    Subtitle
+    "Deinstalacja <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Usuwanie zakończone"
+
+    Message
+    "Usunięto pomyślnie <%AppName%> z twojego systemu."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Detale deinstalacji"
+
+    Subtitle
+    "Błędy podczas usuwania"
+
+    Caption
+    "Napotkano następujące błędy podczas usuwania:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Informacje o kliencie"
+
+    Subtitle
+    "Proszę wpisać swoje dane."
+
+    Caption
+    "Proszę podać nazwisko i nazwę firmy, dla której pracujesz."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Nazwa użytkownika:"
+
+    CompanyLabel
+    "Firma:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Witamy w InstallJammer - instalatorze dla <%AppName%>"
+
+    Message
+    "Zainstaluje on <%AppName%> w wersji <%Version%> na twoim komputerze. \
+    \n\nZalecane jest zamknięcie wszystkich programów przed instalacją. \
+    \n\nKliknij Dalej, aby kontynuować lub Anuluj, aby opuścić instalator."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/hu.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/hu.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/hu.msg	(revision 42196)
@@ -0,0 +1,663 @@
+ApplicationReadmeText
+"<%AppName%> OlvassaEl"
+
+Back
+"Vissza"
+
+Browse
+"Tall�z�s..."
+
+BuildFileText
+"<%Tail <%FileBeingInstalled%>%> szerkeszt�se..."
+
+BuildUninstallText
+"Uninstall szerkeszt�se..."
+
+Cancel
+"M�gsem"
+
+CleanupInstallText
+"Telep�t�s takar�t�sa..."
+
+Close
+"Bez�r�s"
+
+ConsolePauseQuitText
+"-- Nyomjon egy sz�k�zt a folytat�shoz, vagy egy 'q'-t a kil�p�shez --"
+
+ConsolePauseText
+"-- Nyomjon egy sz�k�zt a folytat�shoz --"
+
+ConsoleSelectDestinationText
+"Hova akarja telep�teni a <%AppName%> alkalmaz�st?"
+
+CreateDesktopShortcutText
+"Hozzon l�tre parancsikont az Asztalon"
+
+CreateQuickLaunchShortcutText
+"Hozzon l�tre a Gyorsind�t�ban parancsikont"
+
+CustomInstallDescription
+"V�lassza ki az egy�ni komponenseket a telep�t�shez."
+
+DirectoryPermissionText
+"Nincs el�g joga a <%Dir%> k�nyvt�rba �rni."
+
+DisplayName
+"<%AppName%>"
+
+DownloadingFilesText
+"�llom�nyok let�lt�se..."
+
+ExitText
+"Biztos, hogy ki akar l�pni a telep�t\u0151b\u0151l?"
+
+FileBeingInstalledText
+"<%FileBeingInstalled%> m�sol�sa"
+
+FileBeingUninstalledText
+"<%FileBeingUninstalled%> t�rl�se"
+
+FileOverwriteText
+"A <%FileBeingInstalled%> file m�r l�tezik.  Fel�l akarja �rni?"
+
+Finish
+"Befejez�s"
+
+GroupBeingInstalledText
+"<%GroupBeingInstalled%> telep�t�se..."
+
+GroupBeingUninstalledText
+"<%GroupBeingUninstalled%> elt�vol�t�sa"
+
+Help
+"Sug�"
+
+InstallApplicationText
+"<%AppName%> telep�t�se"
+
+InstallationCompleteText
+"A telep�t�s befejez\u0151d\u0151tt."
+
+InstallCompleteText
+"Az �llom�ny telep�t�se befejez\u0151d\u0151tt..."
+
+InstallingApplicationText
+"<%AppName%> telep�t�se..."
+
+InstallPrepareText
+"Felk�sz�l�s a telep�t�sre..."
+
+InstallStartupText
+"Ez a <%AppName%> programot fogja telep�teni a sz�m�t�g�p�re.  Folytatja?"
+
+InstallTitleText
+"<%AppName%> Setup"
+
+LaunchApplicationText
+"<%AppName%> bet�lt�se"
+
+Next
+"K�vetkez\u0151"
+
+No
+"Nem"
+
+OK
+"OK"
+
+PasswordIncorrectText
+"�rv�nytelen jelsz�."
+
+ProgramFilesDescription
+"�ltal�nos program �llom�nyok"
+
+PromptForDirectoryMessage
+"K�rem v�lasszon egy k�nyvt�rat, majd kattintson az OK-ra."
+
+PromptForDirectoryTitle
+"K�nyvt�r tall�z�sa"
+
+PromptForRootText
+"K�rem g�pelje be a root jelsz�t."
+
+RequireRootText
+"root-nak kell lenni a telep�t\u0151 futtat�s�hoz."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Tipikus telep�t�s."
+
+UninstallApplicationText
+"<%AppName%> elt�vol�t�sa"
+
+UninstallPrepareText
+"Felk�sz�l�s az elt�vol�t�sra..."
+
+UpdateRegistryText
+"A Windows Registry friss�t�se..."
+
+UninstallingApplicationText
+"<%AppName%> elt�vol�t�sa..."
+
+UninstallCompleteText
+"Elt�vol�t�s befejez\u0151d\u0151tt."
+
+UninstallStartupText
+"Ez teljesen let�rli a <%AppName%> alkalmaz�st a rendszer�r\u0151l. \
+ Biztos abban, hogy ezt akarja?"
+
+UninstallLeftoverText
+"N�h�ny elemet nem kellene elt�vol�tani. \
+ Minden�ron t�r�lj�k \u0151ket (nem javasolt)?"
+
+UninstallTitleText
+"<%AppName%> elt�vol�t�sa"
+
+UnpackingFilesText
+"�llom�nyok kicsomagol�sa..."
+
+VersionHelpText
+"Ez a program a <%AppName%> program <%Version%> verzi�j�t fogja telep�teni."
+
+ViewReadmeText
+"OlvassaEl �llom�ny elolvas�sa"
+
+Yes
+"Igen"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "K�rem mondja meg, hogy a Java futtat�si k�rnyezet hol tal�lhat�"
+
+    StatusMessage
+    "A Java futtat�si k�rnyezet keres�se..."
+}
+
+TextWindow {
+    Title
+    "Ablak c�m"
+
+    Caption
+    "Fejl�c"
+
+    Message
+    "Az �zenet j�n ide."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Komponensek kiv�laszt�sa"
+
+    Subtitle
+    "V�lassza ki a telep�tend\u0151 komponenseket."
+
+    Caption
+    "V�lassza ki azokat a komponenseket, amelyeket fel akar telep�teni,\
+     �s ne v�lassza ki azokat, amelyeket nem akar telep�teni."
+
+    Message
+    "<%SpaceRequiredText%> szabad hely sz�ks�ges"
+
+    DescriptionLabel
+    "Le�r�s"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Telep�t�s"
+
+    Subtitle
+    "<%AppName%> telep�t�se"
+
+    Caption
+    "K�rem v�rjon, am�g a Telep�t\u0151 a <%AppName%> programot feltelep�ti a g�p�re."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "A fejl�c j�n ide."
+
+    Message
+    "Az �zenet j�n ide."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "C�m"
+
+    Subtitle
+    "Alc�m"
+
+    Caption
+    "Le�r�s"
+
+    Message
+    "�zenet"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "C�m"
+
+    Subtitle
+    "Alc�m"
+
+    Caption
+    "Le�r�s"
+
+    Message
+    "�zenet"
+
+    Text
+    "A saj�t sz�vegedet rakd ide."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Licensz elfogad�sa"
+
+    Subtitle
+    "K�rem olvassa el figyelmesen a k�vetkez\u0151 licensz meg�llapod�st."
+
+    AcceptRadiobutton
+    "Elfogadom a licensz meg�llapod�s felt�teleit."
+
+    DeclineRadiobutton
+    "Nem fogadom el a licensz meg�llapod�s felt�teleit."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Olvassa el inform�ci�k"
+
+    Subtitle
+    "Olvassa el inform�ci�k a <%AppName%> alkalmaz�shoz"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "V�lassza ki a c�l k�nyvt�rat"
+
+    Subtitle
+    "Hova kellene a <%AppName%> alkalmaz�st telep�teni?"
+
+    Caption
+    "A telep�t\u0151 a <%AppName%> programot a k�vetkez\u0151 k�nyvt�rba telep�ti.\n\n
+     Ahhoz, hogy ebbe k�nyvt�rba ker�lj�n kattintson a <%Next%> gombra\
+     Ahhoz, hogy m�s k�nyvt�rba ker�lj�n kattintson a <%Browse%> gombra."
+
+    Message
+    ""
+
+    BrowseText
+    "A folytat�shoz nyomja meg a <%Next%> gombot. \
+     Ha m�sik k�nyvt�rat szeretne kiv�lasztani nyomja meg a <%Browse%> gombot."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "C�l k�nyvt�r"
+}
+
+SelectProgramFolder {
+    Title
+    "Program mappa kiv�laszt�s"
+
+    Subtitle
+    "K�rem v�lassza ki a program mapp�t!"
+
+    Caption
+    "A telep�t\u0151 a program ikonokat a lentebb list�zott Program mapp�hoz fogja hozz�adni. \
+	 Megv�ltoztathatja az �j mappa nev�t, vagy kiv�laszthat egy m�r l�tez\u0151t a list�r�l. \
+     Kattintson a <%Next%> gombra a folytat�shoz."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Program mappa:"
+
+    FolderListLabel
+    "L�tez\u0151 mapp�k:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "L�trehozza a program mapp�t az �sszes felhaszn�l�nak?"
+}
+
+SetupComplete {
+    Caption
+    "InstallJammer Var�zsl� befejez\u0151d�tt"
+
+    Message
+    "Az InstallJammer Var�zsl� sikeresen telep�tette a <%AppName%> alkalmaz�st. \
+	 Kattintson a <%Finish%> gombra ahhoz, hogy kil�pjen a var�zsl�b�l."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Telep�t�s t�pusa"
+
+    Subtitle
+    "V�lassza ki az �nnek legjobban megfelel\u0151 telep�t�si m�dot."
+
+    Caption
+    "V�lassza ki a k�v�nt telep�t�si t�pust!"
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Le�r�s"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "�llom�nyok m�sol�s�nak elkezd�se"
+
+    Subtitle
+    "Tekintse �t a be�ll�t�sokat, miel\u0151tt �tm�soln�nk az �llom�nyokat!"
+
+    Caption
+    "A telep�t\u0151nek el�g inform�ci�ja van ahhoz, hogy a program �llom�nyait\
+	elkezdje m�solni. Ha meg akarja n�zni vagy v�ltoztatni a be�ll�t�sokat,\
+	akkor kattintson a <%Back%> gombra. Ha el�gedett a be�ll�t�sokkal, akkor\
+	kattintson a <%Next%> gombra, hogy elkezd\u0151dj�n a f�jlok m�sol�sa."
+
+    Message
+    ""
+
+    Text
+    "Telep�t�si k�nyvt�r:
+            <%InstallDir%>
+
+    Telep�t�s t�pusa:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Elt�vol�t�s"
+
+    Subtitle
+    "A <%AppName%> alkalmaz�s elt�vol�t�sa"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Elt�vol�t�s befejez\u0151d�tt"
+
+    Message
+    "A <%AppName%> alkalmaz�s el lett t�vol�tva a rendszer�r\u0151l."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Elt�vol�t�s r�szletei"
+
+    Subtitle
+    "Az elt�vol�t�s alatt hiba l�pett fel!"
+
+    Caption
+    "A k�vetkez\u0151 hib�k l�ptek fel az elt�vol�t�s alatt:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "V�s�rl�i inform�ci�k"
+
+    Subtitle
+    "K�rem �rja ide az inform�ci�kat."
+
+    Caption
+    "K�rem �rja be a nev�t �s a munkahely�nek nev�t."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Felhaszn�l� neve:"
+
+    CompanyLabel
+    "C�g:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Isten hozta a <%AppName%> InstallJammer Var�zsl�j�ban"
+
+    Message
+    "Ez a <%AppName%> alkalmaz�s <%Version%> verzi�j�t fogja telep�teni\
+	a sz�m�t�g�p�re.\n\n Javasoljuk, hogy z�rjon be minden alkalmaz�st,\
+	miel\u0151tt folytatn�.\n\n Kattintson a <%Next%> gombra a folytat�shoz\
+	vagy a <%Cancel%> gombra kil�p�shez."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+InstallPassword {
+    Title
+    "Jelszavas telep�t�s"
+
+    Subtitle
+    "Ez a telep�t�s egy jelsz�t ig�nyel a folytat�shoz."
+
+    Caption
+    "K�rem g�pelje be a jelsz�t."
+
+    Message
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/it.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/it.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/it.msg	(revision 42196)
@@ -0,0 +1,668 @@
+ApplicationReadmeText
+"<%AppName%> Leggimi"
+
+Back
+"Indietro"
+
+Browse
+"Sfoglia..."
+
+BuildFileText
+"Generazione di <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Generazione della disinstallazione..."
+
+Cancel
+"Annulla"
+
+CleanupInstallText
+"Pulizia dei file di installazione..."
+
+Close
+"Chiudi"
+
+ConsolePauseQuitText
+"-- Premere spazio per proseguire o 'q' per uscire --"
+
+ConsolePauseText
+"-- Premere spazio per proseguire --"
+
+ConsoleSelectDestinationText
+"Dove si desidera installare <%AppName%>?"
+
+CreateDesktopShortcutText
+"Crea collegamento sul Desktop"
+
+CreateQuickLaunchShortcutText
+"Crea collegamento in Avvio rapido"
+
+CustomInstallDescription
+"Seleziona in modo personalizzato le parti da installare."
+
+DirectoryPermissionText
+"Non si dispone dei permessi di scrittura in <%Dir%>."
+
+DisplayName
+"<%AppName%>"
+
+DownloadingFilesText
+"Scaricamento dei file..."
+
+ExitText
+"Si � sicuri di voler uscire dal programma di installazione?"
+
+FileBeingInstalledText
+"Copia di <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"Rimozione di <%FileBeingUninstalled%>"
+
+FileOverwriteText
+"Il file <%FileBeingInstalled%> esiste gi�. Lo si vuole sovrascrivere?"
+
+Finish
+"Fine"
+
+GroupBeingInstalledText
+"Installazione di <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"Rimozione di <%GroupBeingUninstalled%>"
+
+Help
+"Aiuto"
+
+InstallApplicationText
+"Installa <%AppName%>"
+
+InstallationCompleteText
+"Installazione completata."
+
+InstallCompleteText
+"Completamento dell'installazione dei file..."
+
+InstallingApplicationText
+"Installazione di <%AppName%>..."
+
+InstallPrepareText
+"Preparazione dell'installazione..."
+
+InstallStartupText
+"<%AppName%> sar� installato sul computer. Proseguire?"
+
+InstallTitleText
+"Installazione di <%AppName%>"
+
+LaunchApplicationText
+"Eseguire <%AppName%>"
+
+Next
+"Avanti"
+
+No
+"No"
+
+OK
+"OK"
+
+PasswordIncorrectText
+"La parola chiave � errata."
+
+ProgramFilesDescription
+"Programmi Comuni"
+
+PromptForDirectoryMessage
+"Si prega di scegliere una directory, poi selezionare OK."
+
+PromptForDirectoryTitle
+"Sfoglia le cartelle"
+
+PromptForRootText
+"Si prega di inserire la parola chiave di root."
+
+RequireRootText
+"E' necessario essere root per eseguire il programma di installazione."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Installazione tipica."
+
+UninstallApplicationText
+"Disinstalla <%AppName%>"
+
+UninstallPrepareText
+"Preparazione della disinstallazione..."
+
+UpdateRegistryText
+"Aggiornamento del Registro di Windows..."
+
+UninstallingApplicationText
+"Disinstallazione di <%AppName%>..."
+
+UninstallCompleteText
+"Disinstallazione completata."
+
+UninstallStartupText
+"<%AppName%> sar� rimosso completamente dal sistema. Si � sicuri di voler\
+ procedere?"
+
+UninstallLeftoverText
+"Alcune parti non possono essere rimosse. Si desidera cancellarle comunque\
+ (sconsigliato)?"
+
+UninstallTitleText
+"Disinstalla <%AppName%>"
+
+UnpackingFilesText
+"Decompressione dei file..."
+
+VersionHelpText
+"Il programma sta per installare <%AppName%> nella versione <%Version%>."
+
+ViewReadmeText
+"Visualizza il file Leggimi"
+
+Yes
+"S�"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "Si prega di comunicare dove si trova la Java Runtime"
+
+    StatusMessage
+    "Individuazione della Java Runtime in corso..."
+}
+
+TextWindow {
+    Title
+    "Titolo della finestra"
+
+    Caption
+    "Didascalia"
+
+    Message
+    "Il messaggio va qui."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Selezionare le parti"
+
+    Subtitle
+    "Selezionare le parti che saranno installate dal programma."
+
+    Caption
+    "Selezionare le parti che si desidera installare e deselezionare le\
+     parti che non si desidera installare."
+
+    Message
+    "<%SpaceRequiredText%> di spazio richiesto"
+
+    DescriptionLabel
+    "Descrizione"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Installazione in corso"
+
+    Subtitle
+    "Installazione di <%AppName%>"
+
+    Caption
+    "Si prega di attendere mentre il programma installa <%AppName%> sul\
+     computer."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "La didascalia va qui."
+
+    Message
+    "Il messaggio va qui."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Titolo"
+
+    Subtitle
+    "Sottotitolo"
+
+    Caption
+    "Didascalia"
+
+    Message
+    "Messaggio"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Titolo"
+
+    Subtitle
+    "Sottotitolo"
+
+    Caption
+    "Didascalia"
+
+    Message
+    "Messaggio"
+
+    Text
+    "Inserire qui il testo personalizzato."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Contratto di Licenza"
+
+    Subtitle
+    "Si prega di leggere attentamente il contratto di licenza che segue."
+
+    AcceptRadiobutton
+    "Accetto le condizioni del Contratto di licenza."
+
+    DeclineRadiobutton
+    "Non accetto le condizioni del Contratto di licenza."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Informazioni da leggere"
+
+    Subtitle
+    "Informazioni da leggere riguardo a <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Scegliere la directory  di destinazione"
+
+    Subtitle
+    "Dove si desidera installare <%AppName%>?"
+
+    Caption
+    "Il programma di installazione installer�<%AppName%> nella seguente\
+     cartella.\n\nPer installare in questa cartella, premere su Avanti. \
+     Per installare in una cartella diversa, premere su Sfoglia e\
+     selezionare un'altra cartella."
+
+    Message
+    ""
+
+    BrowseText
+    "Per proseguire, premere su Avanti. Se si desidera selezionare una\
+     cartella diversa, premere su Sfoglia."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Cartella di destinazione"
+}
+
+SelectProgramFolder {
+    Title
+    "Selezionare la cartella del programma"
+
+    Subtitle
+    "Si prega di selezionare la cartella del programma."
+
+    Caption
+    "Il programma di installazione aggiunger� le icone del programma nella\
+     cartella elencata sotto. \
+     Si pu� inserire il nome di una nuova cartella o selezionarla dalla\
+     lista delle cartelle esistenti. \
+     Premere su Avanti per proseguire."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Cartella del programma:"
+
+    FolderListLabel
+    "Cartelle esistenti:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Crea la cartella del programma per tutti gli utenti"
+}
+
+SetupComplete {
+    Caption
+    "Autocomposizione di InstallJammer completata"
+
+    Message
+    "L'autocomposizione di InstallJammer ha installato <%AppName%> con\
+     successo. Premere su Fine per uscire dall'autocomposizione."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Tipologia di installazione"
+
+    Subtitle
+    "Selezionare la tipologia di installazione pi� adatta alle proprie esigenze."
+
+    Caption
+    "Scegliere la tipologia di installazione che si preferisce."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Descrizione"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Inizio della copia dei file"
+
+    Subtitle
+    "Controllo delle impostazioni prima della copia dei file"
+
+    Caption
+    "Il programma di installazione ha sufficienti informazioni per iniziare\
+     la copia dei file del programma. Se si desidera controllare o\
+     modificare le impostazioni, premere Indietro. Se si � soddisfatti\
+     delle impostazioni, premere Avanti per iniziare a copiare i file."
+
+    Message
+    ""
+
+    Text
+    "Directory di installazione:
+            <%InstallDir%>
+
+    Tipologia di installazione:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Disinstallazione in corso"
+
+    Subtitle
+    "Disinstallazione di <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Disinstallazione completata"
+
+    Message
+    "<%AppName%> � stato rimosso dal sistema."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Dettagli della disinstallazione"
+
+    Subtitle
+    "Durante la rimozione sono occorsi degli errori"
+
+    Caption
+    "I seguenti errori sono occorsi durante la rimozione:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Informazioni sul cliente"
+
+    Subtitle
+    "Si prega di inserire le informazioni."
+
+    Caption
+    "Si prega di inserire il proprio nome e il nome della societ� per cui\
+     si lavora."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Nome dell'utente:"
+
+    CompanyLabel
+    "Societ�:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Benvenuti nell'autocomposizione di InstallJammer per <%AppName%>"
+
+    Message
+    "Si sta per installare <%AppName%> nella versione <%Version%>\
+     sul computer. \
+     \n\nE' consigliata la chiusura di tutte le altre applicazioni prima di\
+     proseguire.\n\nPremere su Avanti per continuare o su Annulla per uscire dall'installazione."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+InstallPassword {
+    Title
+    "Parola chiave di installazione"
+
+    Subtitle
+    "L'installazione richiede una parola chiave per proseguire."
+
+    Caption
+    "Si prega di inserire la parola chiave."
+
+    Message
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/lt.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/lt.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/installjammer/lt.msg	(revision 42196)
@@ -0,0 +1,674 @@
+ApplicationReadmeText
+"<%AppName%> Skaityk"
+
+Back
+"Atgal"
+
+Browse
+"Parinkti..."
+
+BuildFileText
+"Kuriamas <%Tail <%FileBeingInstalled%>%>..."
+
+BuildUninstallText
+"Kuriama �alinimo programa..."
+
+Cancel
+"Atsisakyti"
+
+CleanupInstallText
+"I�valomas diegimas..."
+
+Close
+"U�verti"
+
+ConsolePauseQuitText
+"-- Spauskite tarp� tam kad t�sti arba 'q' kad baigti --"
+
+ConsolePauseText
+"-- Spauskite tarp� tam kad t�sti --"
+
+ConsoleSelectDestinationText
+"Kur nor�tum�te �diegti <%AppName%>?"
+
+CreateDesktopShortcutText
+"Sukurti darbalaukio �aukin�"
+
+CreateQuickLaunchShortcutText
+"Sukurti spar�iosios paleisties �aukin�"
+
+CustomInstallDescription
+"Pasirinkiti komponentus �diegimui."
+
+DirectoryNameErrorText
+"Katalogas negali tur�ti �i� �enkl�:
+        \\ / : * ? \" < > |"
+
+DirectoryPermissionText
+"J�s neturite teis�s ra�yti � <%Dir%>."
+
+DisplayName
+"<%AppName%>"
+
+DownloadingFilesText
+"Atsiun�iami failai..."
+
+ExitText
+"Ar j�s �sitikin�s, kad norite i�eiti i� �ios diegimo programos?"
+
+FileBeingInstalledText
+"Kopijuojama <%FileBeingInstalled%>"
+
+FileBeingUninstalledText
+"�alinama <%FileBeingUninstalled%>"
+
+FileOverwriteText
+"Failas <%FileBeingInstalled%> jau yra. Ar nor�tum�te j� perra�yti?"
+
+Finish
+"Pabaiga"
+
+GroupBeingInstalledText
+"Diegiama <%GroupBeingInstalled%>..."
+
+GroupBeingUninstalledText
+"�alinama <%GroupBeingUninstalled%>"
+
+Help
+"Pagalba"
+
+InstallApplicationText
+"�diegti <%AppName%>"
+
+InstallationCompleteText
+"Diegimas baigtas."
+
+InstallCompleteText
+"Failo diegimas baigtas..."
+
+InstallingApplicationText
+"Diegema <%AppName%>..."
+
+InstallErrorText
+"Diegimo metu �vyko klaida."
+
+InstallPrepareText
+"Ruo�iamasi diegimui..."
+
+InstallStartupText
+"Tai �diegs <%AppName%> � j�s� kompiuter�. T�sti?"
+
+InstallTitleText
+"<%AppName%> �diegimo programa"
+
+LaunchApplicationText
+"Paleisti <%AppName%>"
+
+Next
+"Toliau"
+
+No
+"Ne"
+
+OK
+"Gerai"
+
+PasswordIncorrectText
+"Slapta�odis yra neteisingas."
+
+ProgramFilesDescription
+"Bendri Programos Failai"
+
+PromptForDirectoryMessage
+"Pra�om pasirinkti katalog�, tada pasirinkti Gerai."
+
+PromptForDirectoryNewFolderText
+"Sukurti nauj� katalog�"
+
+PromptForDirectoryTitle
+"Parinkti katalog�"
+
+PromptForRootText
+"Pra�om �vesti j�s� root slapta�od�."
+
+RequireRootText
+"J�s turite b�ti root kad paleistum�te �i� diegimo program�."
+
+SeparatorText
+"<%AppName%> <%Version%>"
+
+TypicalInstallDescription
+"Tipinis diegimas."
+
+UninstallApplicationText
+"Pa�alinti program� <%AppName%>"
+
+UninstallPrepareText
+"Ruo�iamasi pa�alinti program�..."
+
+UpdateRegistryText
+"Atnaujinamas Windows registras..."
+
+UninstallingApplicationText
+"Pa�alinama programa <%AppName%>..."
+
+UninstallCompleteText
+"Programos pa�alinimas atliktas."
+
+UninstallStartupText
+"Tai visi�kai pa�alins <%AppName%> i� j�s� sistemos.  Ar j�s �sitikin�s\
+ kad norite tai atlikti?"
+
+UninstallLeftoverText
+"Kai kurie komponentai negali b�ti pa�alinti. Ar nor�tum�te juos pa�alinti\
+ betkuriuo atv�ju (nerekomenduojama)?"
+
+UninstallTitleText
+"Programos pa�alinimas <%AppName%>"
+
+UnpackingFilesText
+"I�pakuojami failai..."
+
+VersionHelpText
+"Programa <%AppName%> versija <%Version%> bus �diegta."
+
+ViewReadmeText
+"Per�i�r�ti apra�ym�"
+
+Yes
+"Taip"
+
+ConsolePause {
+    Message
+    "<%ConsolePauseText%>"
+}
+
+LocateJavaRuntime {
+    PromptMessage
+    "Pra�om pasakyti kur j�s� Java Runtime randasi"
+
+    StatusMessage
+    "Ie�kome Java Runtime..."
+}
+
+TextWindow {
+    Title
+    "Lango Antra�t�"
+
+    Caption
+    "Pavadinimas"
+
+    Message
+    "Prane�imas �vedamas �ia."
+
+    CloseButton
+    "<%Close%>"
+}
+
+UnzipFile {
+    StatusText
+    "<%FileBeingInstalledText%>"
+}
+ChooseComponents {
+    Title
+    "Pasirenkamasis �diegimas"
+
+    Subtitle
+    "Pasirinkite komponentus kuriuos diegimo programa �diegs."
+
+    Caption
+    "Pa�ym�kite komponentus kuriuos norite �diegti ir at�ym�kite\
+     tuos kuriuos nenorite �diegti."
+
+
+    Message
+    "Reik�s <%SpaceRequiredText%> talpos"
+
+    DescriptionLabel
+    "Apra�ymas"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CopyFiles {
+    Title
+    "Diegiama"
+
+    Subtitle
+    "Diegiama <%AppName%>"
+
+    Caption
+    "Pra�om palaukti kol diegimo programa �diegs <%AppName%> � j�s� kompiuter�."
+
+    Message
+    ""
+
+    FileLabel
+    "<%Status%>"
+
+    ProgressValue
+    "<%InstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane1 {
+    Caption
+    "�veskite pavadinim�."
+
+    Message
+    "�veskite prane�im�."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomBlankPane2 {
+    Title
+    "Antra�t�"
+
+    Subtitle
+    "Paantra�t�"
+
+    Caption
+    "Pavadinimas"
+
+    Message
+    "Prane�imas"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+CustomTextPane1 {
+    Title
+    "Antra�t�"
+
+    Subtitle
+    "Paantra�t�"
+
+    Caption
+    "Pavadinimas"
+
+    Message
+    "Prane�imas"
+
+    Text
+    "�veskite pasirinkt� teskta."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+License {
+    Title
+    "Sutikimas su licencija"
+
+    Subtitle
+    "ra�om perskaityti �� sutikim� su licencija."
+
+    Text
+    "Patalpinkite �ia savo licencij�."
+
+    AcceptRadiobutton
+    "A� sutinku su licencija."
+
+    DeclineRadiobutton
+    "A� nesutinku su licencija."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Readme {
+    Title
+    "Skaityti daugiau informacijos"
+
+    Subtitle
+    "Skaityti daugiau informacijos apie <%AppName%>"
+
+    Caption
+    ""
+
+    Message
+    ""
+
+    Text
+    "Patalpinkite informacija."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SelectDestination {
+    Title
+    "Pasirinkite paskirties viet�"
+
+    Subtitle
+    "Kur tur�t� b�ti <%AppName%> �diegta?"
+
+    Caption
+     "Diegimo programa �diegs <%AppName%> � �� katalog�.\n\nTam kad instaliuoti\
+     � �� katalog�, paspauskite <%Next%>.\n\n�diegimui � kita katalog�,\
+     paspauskite <%Browse%> ir pasirinkite kit� katalog�."
+
+    Message
+    ""
+
+    BrowseText
+    "Tam kad instaliuoti � �� katalog�, paspauskite <%Next%>. �diegimui �
+     kita katalog�, paspauskite <%Browse%> ir pasirinkite kit� katalog�."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    BrowseButton
+    "<%Browse%>"
+
+    DestinationLabel
+    "Paskirties katalogas"
+}
+
+SelectProgramFolder {
+    Title
+    "Pasirinkite programos katalog�"
+
+    Subtitle
+    "Pra�om pasirinkite programos katalog�"
+
+    Caption
+    "Diegimo programa �kels programos ikonas � program� katalog� pavaizduot�\
+     apa�ioje.  Galite �vesti nauj� katalogo pavadinim� arba pasirinkti i�\
+     esan�i�.  Nor�dami t�sti <%Next%>."
+
+    Message
+    ""
+
+    ProgramFolderLabel
+    "Programos katalogas:"
+
+    FolderListLabel
+    "Esantys katalogai:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+
+    AllUsersCheckbutton
+    "Sukurti programos katalogus visiems vartotojams"
+}
+
+SetupComplete {
+    Caption
+    "InstallJammer vedlys pabaig� darb�"
+
+    Message
+    "Diegimo programa baig� diegti <%AppName%> � j�s� kompiuter�.  Paspauskite\
+    <%Finish%>, kad u�baigti diegim�."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+SetupType {
+    Title
+    "Diegimo tipas"
+
+    Subtitle
+    "Pasirinkite diegimo tip� kurio pageidaujate."
+
+    Caption
+    "Pasirinkite diegimo tip� kurio pageidaujate."
+
+    Message
+    ""
+
+    DescriptionLabel
+    "Apra�ymas"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+StartCopyingFiles {
+    Title
+    "Pradedamas fail� kopijavimas"
+
+    Subtitle
+    "Per�i�r�kite nustatymus prie� pradedant kopijuoti failus"
+
+    Caption
+    "Diegimo programa turi pakankamai informacijos, kad prad�ti kopijuoti programos failus.\
+     Jei norite per�i�r�ti arba pakeisti nustatymus, spauskite <%Back%>. Jei nustatymai\
+     tenkina, spauskite <%Next%>, kad prad�ti kopijuoti failus."
+
+    Message
+    ""
+
+    Text
+    "Diegimo katalogas:
+            <%InstallDir%>
+
+    Diegimo tipas:
+            <%InstallType%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+Uninstall {
+    Title
+    "Uninstalling"
+
+    Subtitle
+    "Pa�alinama <%AppName%>"
+
+    Caption
+    "<%GroupBeingUninstalledText%>"
+
+    Message
+    ""
+
+    FileValue
+    "<%Status%>"
+
+    ProgressValue
+    "<%UninstallPercentComplete%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallComplete {
+    Caption
+    "Programos pa�alinimas baigtas"
+
+    Message
+    "<%AppName%> buvo pa�alinta i� j�s� sistemos."
+
+    NextButton
+    "<%Finish%>"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+UninstallDetails {
+    Title
+    "Programos pa�alinimas i�samiau"
+
+    Subtitle
+    "Klaidos atsitikusios per programos pa�alinim�"
+
+    Caption
+    "Klaidos atsitikusios per programos pa�alinim�:"
+
+    Message
+    ""
+
+    Text
+    "<%Errors%>"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+UserInformation {
+    Title
+    "Vartotojo informacija"
+
+    Subtitle
+    "Pra�ome �vesti savo informacij�."
+
+    Caption
+    "�veskite savo vard� ir organizacij� kurioje dirbate."
+
+    Message
+    ""
+
+    UserNameLabel
+    "Vartotojo vardas:"
+
+    CompanyLabel
+    "Organizacija:"
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+
+Welcome {
+    Caption
+    "Sveiki atvyke � <%AppName%> diegimo program�."
+
+    Message
+    "Pabr��tinai patartina i�eiti i� vis� Windows program� kurias esate\
+     pasileid�. Spauskite <%Next%> tam, kad t�sti diegim�."
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
+
+InstallPassword {
+    Title
+    "Diegimo slapta�odis"
+
+    Subtitle
+    "�iam diegimui reikia slapta�od�io."
+
+    Caption
+    "Pra�om �vesti slapta�od�."
+
+    Message
+    ""
+
+    NextButton
+    "<%Next%> >"
+
+    BackButton
+    "< <%Back%>"
+
+    CancelButton
+    "<%Cancel%>"
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg	(revision 42196)
@@ -0,0 +1,1654 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*- 
+
+import sys
+import os
+import os.path
+import fnmatch
+import shutil
+import zipfile 
+import stat
+import getopt
+from os.path import dirname
+import shutil
+from os import system
+import ConfigParser
+import StringIO
+import re
+import urllib2
+import time
+
+DEBUG = False
+DEBUG = False
+VERBOSE = False
+SEARCH_VERSIONS = list()
+
+LINUX_EXEC_EXTENSION=".run" # antes ".bin"
+
+def log(msg):
+  f=open("/tmp/gvspkg.log","a")
+  f.write(time.ctime())
+  f.write(": ")
+  f.write(msg)
+  f.write("\n")
+  f.close()
+
+def message(msg):
+    if VERBOSE:
+        print msg
+    log(msg)
+
+def msgerror(msg, err=None):
+    print "ERROR: ", msg
+    log("ERROR: "+msg)
+    if err!=None :
+      print "ERROR: ", str(err)
+      log("ERROR: "+ str(err))
+
+
+def msgwarn(msg):
+    print "WARNING: ", msg
+    log("WARNING: "+ msg)
+
+def debug(msg):
+    if DEBUG:
+        print "DEBUG: ", msg
+        log("DEBUG: "+ msg)
+
+def acquire_file(name):
+  files = list()
+  folder = os.getcwd()
+  while folder not in ( None, "", "/"):
+    pathname = os.path.join(folder,name)
+    if os.path.exists(pathname):
+      files.append(pathname)
+    folder = os.path.dirname(folder)
+  return files
+
+def get_gvspkg_bin_folder(): 
+    files = list()
+    if os.environ.get("HOME") != None :
+        files.append(os.path.join(os.environ['HOME'],".gvspkg.bin"))
+    files.extend( acquire_file(".gvspkg.bin") )
+    files.extend( acquire_file("gvspkg.bin") )
+    if len(files)<1 :
+      return None
+    debug( "gvspkg.bin = %s" % files[-1])
+    return files[-1]
+
+def search_GVSPKG_ROOT():
+  f = get_gvspkg_bin_folder()
+  if f==None:
+    return None
+  return os.path.dirname(f)
+
+RWALL = stat.S_IWOTH | stat.S_IROTH | stat.S_IWUSR | stat.S_IRUSR | stat.S_IWGRP | stat.S_IRGRP 
+RWXALL = RWALL | stat.S_IXUSR | stat.S_IXOTH | stat.S_IXGRP 
+
+VERSION = os.path.basename(os.getcwd())
+GVSPKG_ROOT = search_GVSPKG_ROOT()
+
+def getVersion():
+    return VERSION
+
+def getSearchVersions():
+    vers = list();
+    vers.extend(SEARCH_VERSIONS)
+    vers.append(VERSION)
+    return vers
+
+def getPackagesRoot():
+    return GVSPKG_ROOT
+
+def getPool():
+    return getPackagesRoot() + "/pool"
+
+def getWeb():
+    return getPackagesRoot() + "/web"
+
+def getDist():
+    return getPackagesRoot() + "/dists/" +getVersion()
+
+def findfiles(root,filename):
+    result=list()
+    for wroot, dirs, files in os.walk(root):
+        for f in files :
+            if fnmatch.fnmatch(f,filename):
+                result.append(wroot+"/"+f)
+    result.sort()
+    return result
+
+def mychmod(filename, perms):
+    try:
+        os.chmod(filename,perms)
+    except Exception, ex:
+        msgwarn("Can't change permissions of file '%s', error %s" % (filename, str(ex)))
+
+class Command:
+
+    def __init__(self, args):
+        self.args = args
+        self.defaultoptions = None
+
+    def load_options(self,filename):
+        debug("loading option from %s" % filename)
+        if not os.path.isfile(filename):
+            debug("filename %s not found" % filename)
+            return
+        f=file(filename,"r")
+        for line in f.readlines():
+            line = line.strip()
+            if line=="" or line.startswith("#"):
+                continue
+            if line[-1] == "\n":
+                line = line[:-1]
+            n = line.find("=")
+            if n<0 :
+                continue
+            cmd = line[:n]
+            args = line[n+1:].strip()
+
+            if args != "":
+              self.defaultoptions[cmd] = self.defaultoptions.get(cmd,[]) +  args.split(" ")
+            debug("add options: %s=%r" % (cmd, args.split(" ")))
+
+        f.close()
+
+    def load_default_options(self):
+        if self.defaultoptions != None:
+            return
+        self.defaultoptions = dict()
+        options = list();
+        if GVSPKG_ROOT != None:
+          rootoptions = os.path.join(GVSPKG_ROOT,"gvspkg.bin/options")
+        else:
+          rootoptions = None
+        if rootoptions != None and os.path.isfile(rootoptions):
+            options.append(rootoptions)
+        else:
+            options.append("~/.gvspkg.bin/options")
+        options.extend(acquire_file(".gvspkg.options"))
+        options.extend(acquire_file("gvspkg.options"))
+        for optionfile in options:
+          self.load_options(optionfile)
+
+    def getArgs(self,name):
+        self.load_default_options()
+        l = list()
+        cmd = self.defaultoptions.get(name,None)
+        if cmd != None:
+          l.extend(cmd)
+        l.extend(self.args[1:])
+        return l
+
+def isDigit(s):
+    if len(s)>1:
+        s=s[0]
+    return s in ("0","1","2","3","4","5","6","7","8","9")
+
+
+
+class PackageInfo(str):
+    def __init__(self, filename):
+        self._ini = None
+        self.filename = filename[:-7]
+        self.type = filename[-6:]
+        s = os.path.basename(self.filename)
+        s = s.split("-")
+        #print "## PackageInfo ", repr(s)
+        self.gvsig = s[0] + "-" + s[1]
+        self.gvsig_version = s[2]
+        self.code = s[3]
+        try:
+	# gvSIG-desktop-1.12.0-com.iver.cit.gvsig.cad-1.12.0-opencadtools-1418-final-all-all-j1_6.gvspkg
+	#    0 -  1    -  2   -          3           -  4   - 5          -  6 - 7   - 8 - 9 - 10
+	# gvSIG-desktop-1.12.0-com.iver.cit.gvsig.cad-1.12.0-1418-final-all-all-j1_6.gvspkg
+	#    0 -  1    -  2   -          3           -  4   - 5  -  6  - 7 - 8 - 9 
+	    if isDigit(s[5]) :
+                self.version = s[4]
+                self.build = s[5]
+                self.status = s[6]
+                self.os = s[7]
+                self.arch = s[8]
+            else:
+                self.version = s[4] + "-" + s[5]
+                self.build = s[6]
+                self.status = s[7]
+                self.os = s[8]
+                self.arch = s[9]
+
+        except Exception:
+            self.build = "0"
+            self.status = "unknow"
+            self.os = "all"
+            self.arch = "all"
+	try:
+	    self.build = int(self.build)
+	except:
+	    pass
+
+    def getCode(self):
+        return self.code
+
+    def getOS(self):
+        return self.os
+
+    def getArch(self):
+        return self.arch
+
+    def getKey(self):
+        return self.code+"-"+self.os+"-"+self.arch
+
+    def getFullName(self):
+        return os.path.basename(self.filename)
+
+    def getFullVersion(self):
+        if "-" in self.version :
+          return "%s-%06d" %(self.version,self.build)
+        else:
+          return "%s-ZZZ-%06d" %(self.version,self.build)
+
+    def getFilename(self):
+        return self.filename + "." + self.type
+
+    def hasPki(self):
+        return os.path.isfile( self.getPkiFilename() )
+
+    def getPkiFilename(self):
+        return self.filename + ".gvspki"
+
+    def hasPkg(self):
+        return os.path.isfile( self.getPkgFilename() )
+
+    def getPkgFilename(self):
+        return self.filename + ".gvspkg"
+
+    def getIniOption(self, name, default=None):
+      section = "general"
+      ini = self.getIni()
+      if ini.has_option(section, name):
+        x = ini.get(section, name)
+      	x = x.replace("\\:", ":")
+        return x 
+      return default 
+    
+    def getDescription(self):
+      return self.getIniOption("description")
+
+    def getCategories(self):
+      return self.getIniOption("categories")
+
+    def getName(self):
+      return self.getIniOption("name")
+
+    def getOwner(self):
+      ini = self.getIni()
+      if ini.has_option("general","owner"):
+        return ini.get("general","owner")
+      return None
+
+    def getUrl(self):
+      ini = self.getIni()
+      if ini.has_option("general","download-url"):
+        return ini.get("general","download-url")
+      return None
+
+    def getSourceUrl(self):
+      ini = self.getIni()
+      if ini.has_option("general","source-url"):
+        return ini.get("general","source-url")
+      return None
+
+    def getDependencies(self):
+      ini = self.getIni()
+      if ini.has_option("general","dependencies"):
+        return ini.get("general","dependencies")
+      return None
+
+    def getType(self):
+      ini = self.getIni()
+      if ini.has_option("general","type"):
+        return ini.get("general","type")
+      return None
+
+    def getOfficial(self):
+      ini = self.getIni()
+      if ini.has_option("general","official"):
+        return ini.get("general","official")
+      return None
+
+    def getIni(self):
+        if self._ini != None:
+          return self._ini
+        index_path = self.getPkiFilename()
+        outputfolder="/tmp/gvspkg.%s" % os.getpid()
+        os.mkdir(outputfolder)
+        os.system('unzip -q %s -d %s' % (index_path,outputfolder))
+
+        files = findfiles(outputfolder, "package.info")
+        if len(files) != 1:
+            msgerror("Can't locate package.info in pool '%s'." % (index_path))
+            return None
+
+        package_info = files[0]
+        self._ini = ConfigParser.ConfigParser()
+        f = file(package_info,"r")
+        ss = f.read()
+        self._ini.readfp(StringIO.StringIO("[general]\n"+ss))
+        f.close()
+        shutil.rmtree(outputfolder)
+        return self._ini
+
+    def __str__(self):
+        return self.filename
+
+    def __repr__(self):
+        return "filename=%r:gvsig=%r:gvsig_version=%r:code=%r:version=%r:build=%r:status=%r" % (
+                self.filename, self.gvsig, self.gvsig_version, self.code, self.version, self.build, self.status )
+
+class IndexList(list):
+
+    def load(self, fname):
+        message( "Loading index list from '%s'." % fname)
+        f=file(fname,"r")
+        lines=f.readlines()
+        f.close()
+        for line in lines:
+          if line[-1] == "\n":
+            line = line[:-1]
+          
+          info = PackageInfo(line)
+          self.append(info)
+
+    def save(self,fname):
+        message( "Saving index list from '%s'." % fname)
+        f=file(fname,"w")
+        for index in self:
+          f.write("%s\n" % index.getFilename())
+        f.close()
+        mychmod(fname,RWALL)
+
+    def build(self, pool, versions):
+        message( "Creating index list for version '%s' from '%s'" % (versions, pool) )
+        packages=dict()
+        for root, dirs, files in os.walk(pool):
+            for f in files :
+                if f[-7:].lower()  in (".gvspki", ".gvspkg") :
+                    fullpath = root+"/"+f
+                    info = PackageInfo(fullpath)
+                    if info.gvsig == "gvSIG-desktop" and info.gvsig_version in versions :
+                        if packages.get(info.getKey()) == None:
+                            debug( "build: add    " + repr(info))
+                            packages[info.getKey()]=info
+                        else:
+                            oldinfo = packages[info.getKey()]
+                            debug("build: %s %s %s" % ( info.getKey(), oldinfo.getFullVersion(),info.getFullVersion()))
+                            if oldinfo.getFullVersion()<info.getFullVersion()  :
+                                debug( "build: update "+ repr(oldinfo))
+                                packages[info.getKey()]=info
+                    else:
+                        debug( "build: skip   "+ repr(info))
+        self.extend(packages.values())
+        self.sort()
+
+def lsi(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("lsi"), "l", ["long-format"])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    long_format=False
+    for opt, arg in opts:
+        if opt in ("-l", "--long-format"):
+            long_format = True
+        else:
+            assert False, "unhandled option"
+
+    indexes = IndexList()
+    indexes.build(getPool(), getSearchVersions())
+
+    for info in indexes:
+        if info.hasPki():
+            if long_format:
+                print "["+os.path.basename(info.getPkiFilename())+"]"
+                print "# ", info.getPkiFilename()
+                show(["show", os.path.basename(info.getPkiFilename())])
+            else:
+                print info.getPkiFilename()
+
+def installkit_add(cmd,arg1,arg2):
+
+    folder = "%s/gvspkg.bin" % GVSPKG_ROOT
+
+    cmd = "%s/installkit %s/main.tcl %s %s %s" % (
+        folder,
+        folder,
+        cmd,
+        arg1,
+        arg2
+    )
+    system(cmd)
+
+def mkinstall(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mkinstall"), "N:lL:wW:", ["addjrewin", "addjrelin", "jrelin=", "jrewin=", "distribution-name="])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    #print "opts = ",opts
+    #print "args = ",args
+    addjrelin=False
+    addjrewin=False
+    jrelin=None
+    jrewin=None
+    distribution_name = "custom"
+    for opt, arg in opts:
+        if opt in ("-L", "--jrelin"):
+            jrelin = arg
+        elif opt in ("-W", "--jrewin"):
+            jrewin = arg
+        elif opt in ("-l", "--addjrelin"):
+            addjrelin = True
+        elif opt in ("-w", "--addjrewin"):
+            addjrewin = True
+        elif opt in ("-N", "--distrinution-name"):
+            distribution_name = arg
+        else:
+            assert False, "unhandled option"
+    
+
+    if len(args) != 2 :
+        help(args)
+        sys.exit(4)
+
+    bin_name = args[0]
+    gvspks_name = args[1]
+    custom_name = bin_name.replace("online", distribution_name)
+
+    if not "online" in bin_name :
+        print "gvspkg mkinstall: binary file name must contain 'online'"
+        sys.exit(3)
+
+    if addjrelin and addjrewin :
+        print "gvspkg mkinstall: only one of addjrelin or addjrewin is allowed."
+        sys.exit(4)
+
+    message("Creando %s..." % custom_name)
+    shutil.copyfile(bin_name, custom_name)
+    mychmod(custom_name,RWALL)
+    message("A�adiendo %s..." % gvspks_name)
+    installkit_add("addpks", custom_name, gvspks_name)
+
+    if addjrelin:
+        withjre_name = bin_name.replace("online", distribution_name+"-withjre")
+        message("Creando %s..." % withjre_name)
+        shutil.copyfile(custom_name, withjre_name)
+        mychmod(withjre_name,RWALL)
+        message("A�adiendo %s..." % jrelin)
+        installkit_add("addjrelin", withjre_name, jrelin)
+
+
+    if addjrewin:
+        withjre_name = bin_name.replace("online", distribution_name+"-withjre")
+        message("Creando %s..." % withjre_name)
+        shutil.copyfile(custom_name, withjre_name)
+        mychmod(withjre_name,RWALL)
+        message("A�adiendo %s..." % jrewin)
+        installkit_add("addjrewin", withjre_name, jrewin)
+
+
+def mks(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mks"), "ixscI:p:", ["index-only","include-default-selection", "clear-list", "exclude=", "excludepki=", "excludepkg=", "include=", "platform="])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    platforms = ("x86", "x86_64")
+    oss = ("lin","win")
+    default_selection = None
+    index_only = False
+    clear_list=False
+    includes=list()
+    excludes_pki=list()
+    excludes_pkg=list()
+    for opt, arg in opts:
+        if opt in ("-c", "--clear-list"):
+            clear_list = True
+        elif opt in ("-s", "--include-default-selection"):
+            default_selection = "defaultPackages"
+        elif opt in ("-p", "--platform"):
+            if arg == "amd64":
+              arg = "x86_64"
+            if not platform in ( "x86", "x86_64", "all"):
+                msgerror("Unsuported platform value "+repr(platform)+". available values are x86, x86_64, amd64 or all")
+                sys.exit(3)
+            platforms = (arg,)
+        elif opt in ("-x", "--exclude"):
+            excludes_pki.append(arg)
+            excludes_pkg.append(arg)
+        elif opt in ( "--excludepki"):
+            excludes_pki.append(arg)
+        elif opt in ( "--excludepkg"):
+            excludes_pkg.append(arg)
+        elif opt in ( "--include", "-I"):
+            if not os.path.isabs(arg) :
+              arg = os.path.join(getPool(), arg)
+            if arg.endswith(".*"):
+              includes.append(PackageInfo(arg[:-2]+".gvspkg"))
+              includes.append(PackageInfo(arg[:-2]+".gvspki"))
+            else:
+              includes.append(PackageInfo(arg))
+        elif opt in ("-i", "--index-only"):
+            index_only = True
+        else:
+            assert False, "unhandled option %r" % opt
+
+    if default_selection!=None and  not os.path.isfile(default_selection) :
+        msgwarn("No se ha encontrado el fichero %r. la opcion -s/--include-default-selection sera ignorada." % default_selection)
+        default_selection = None
+
+      
+    indexes = IndexList()
+
+    packages_txt = getDist() +"/packages.txt"
+    packages_gvspki = getDist() +"/packages.gvspki"    
+
+    message( "Creating 'packages.gvspki' for version '%s'" % getVersion() )
+    if not os.path.exists(getDist()):
+        msgerror("Can't locate version folder '%s'." % getDist())
+        sys.exit(3)
+   
+    if os.path.exists(packages_txt) and not clear_list:
+        indexes.load(packages_txt)
+    else:
+        indexes.build(getPool(), getSearchVersions())
+        indexes.save(packages_txt)
+
+    for pkg in includes:
+      indexes.append(pkg)
+
+    # El indice de paquetes lleva los paquetes para todas las plataformas y sistemas
+    # ya que al conectarnos a el desde el administrador de complementos ya
+    # se encarga la aplicacion de seleccionar los correspondientes a la plataforma
+    # sobre la que esta rodando gvSIG.
+    message( "Writing 'packages.gvspki' to '%s'" % packages_gvspki )
+    set = zipfile.ZipFile(packages_gvspki,"w",zipfile.ZIP_STORED)
+    for info in indexes:
+        if not ( info.code in excludes_pki or info.getFullName() in excludes_pki ):
+            debug("Add package '%s'" % info.getPkiFilename())
+            try:
+                if info.hasPki() :
+                    set.write(info.getPkiFilename(), os.path.basename(info.getPkiFilename()))
+            except Exception, ex:
+                msgerror("Can't add index '%s', error %s" % (info, str(ex)))
+        else:
+            message("Exclude package '%s'" % info.getFullName())
+    if default_selection != None :
+        set.write(default_selection,default_selection)
+    set.close()
+    mychmod(packages_gvspki,RWALL)
+
+    md5sum(packages_gvspki,packages_gvspki+".md5")
+    mychmod(packages_gvspki+".md5",RWALL)
+
+    if not index_only :
+      for cur_os in oss:
+        for cur_platform in platforms:
+          packages_gvspks = getDist() +"/packages-"+cur_os+"-"+cur_platform+".gvspks"
+          message( "Writing 'packages-"+cur_os+"-"+cur_platform+".gvspks' to '%s'" % packages_gvspks )
+          set = zipfile.ZipFile(packages_gvspks,"w",zipfile.ZIP_STORED)
+          for info in indexes:
+              if not ( info.code in excludes_pkg or info.getFullName() in excludes_pkg ):
+                  try:
+                      if info.hasPkg():
+                        if cur_os == "all" or info.getOS() in ("all", cur_os) :
+                          if cur_platform == "all" or info.getArch() in ("all", cur_platform) :
+                            set.write(info.getPkgFilename(), os.path.basename(info.getPkgFilename()))
+                  except Exception, ex:
+                      msgerror("Can't add package '%s', error %s" % (index, str(ex)))
+              else:
+                  message("Exclude package '%s'" % info.getFullName())
+          if default_selection != None :
+              set.write(default_selection,default_selection)
+          set.close()
+          mychmod(packages_gvspks,RWALL)
+
+          md5sum(packages_gvspks,packages_gvspks+".md5")
+          mychmod(packages_gvspks+".md5",RWALL)
+
+    message( "Created")
+
+def mkmirror(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mkmirrot"), "b:", [ "build="])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    build = None
+    for opt, arg in opts:
+        if opt in ("-b", "--build"):
+            build = arg
+        else:
+            assert False, "unhandled option %r" % opt
+
+    if build == None:
+        msgerror("Build number required.")
+        sys.exit(3)
+    domkmirror( getPackagesRoot(),getVersion(),build)
+    
+def domkmirror(root_src, version, build):
+  join = os.path.join
+
+  def linkfile(src,dst):
+    if os.path.lexists(dst):
+      os.remove(dst)
+    os.symlink(src,dst)
+    if os.path.lexists(src+".md5") :
+      if os.path.lexists(dst+".md5"):
+        os.remove(dst+".md5")
+      os.symlink(src+".md5",dst+".md5")
+
+
+  build = str(build)
+  root_target = join(root_src,"mirrors",version+"-"+build,"gvsig-desktop")
+  build_src = join(root_src,"dists",version,"builds",build)
+  build_target = join(root_target,"dists",version,"builds",build)
+  pool_src = join(root_src,"pool")
+  pool_target = join(root_target,"pool")
+  
+  if not os.path.isdir(root_target):
+    os.makedirs(root_target)
+  if not os.path.isdir(build_target):
+    os.makedirs(build_target)
+  if not os.path.isdir(pool_target):
+    os.makedirs(pool_target)
+  files = os.listdir(build_src)
+  linkfile(join(build_src,"packages.gvspki"), join(root_target,"dists",version,"packages.gvspki"))
+  for f in files:
+    f_src = join(build_src,f)
+    f_target = join(build_target,f)
+    if os.path.isfile(f_src):
+      linkfile(f_src,f_target)
+
+  z = zipfile.ZipFile(join(build_src,"packages.gvspki"))
+  pkgs = z.namelist()
+  for pkgname in pkgs:
+    if pkgname!='defaultPackages':
+      pkg = PackageInfo(pkgname)
+      if not os.path.exists(join(root_target,"pool",pkg.getCode())) :
+        os.makedirs(join(root_target,"pool",pkg.getCode()))
+      src = join(root_src,"pool",pkg.getCode(),pkg.getPkgFilename())
+      target = join(root_target,"pool",pkg.getCode(),pkg.getPkgFilename())
+      linkfile(src,target)
+  cmd = "cd %s ; find . ! -type d >%s/files.lst" % (root_target, build_target)
+  os.system(cmd)
+
+def mkhtml(args):
+    def getCode(info):
+      return info.code
+
+
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mkhtml"), "xsc", ["clear-list", "exclude=", "excludepki=", "excludepkg=", "include="])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    index_only = False
+    clear_list=False
+    includes=list()
+    excludes_pki=list()
+    excludes_pkg=list()
+    for opt, arg in opts:
+        if opt in ("-c", "--clear-list"):
+            clear_list = True
+        elif opt in ("-x", "--exclude"):
+            excludes_pki.append(arg)
+            excludes_pkg.append(arg)
+        elif opt in ( "--excludepki"):
+            excludes_pki.append(arg)
+        elif opt in ( "--excludepkg"):
+            excludes_pkg.append(arg)
+        elif opt in ( "--include", "-I"):
+            includes.append(PackageInfo(arg))
+        else:
+            assert False, "unhandled option %r" % opt
+
+    indexes = IndexList()
+
+    packages_txt = getDist() +"/packages.txt"
+   
+    if os.path.exists(packages_txt) and not clear_list:
+        indexes.load(packages_txt)
+    else:
+        indexes.build(getPool(), getSearchVersions())
+        indexes.save(packages_txt)
+
+    for pkg in includes:
+      indexes.append(pkg)
+
+    allpackages = list()
+    basepath = getWeb()
+    for info in indexes:
+        if not ( info.code in excludes_pki or info.getFullName() in excludes_pki ):
+            try:
+                if info.hasPki() :
+                    mkpkihtml(basepath, info)
+                    allpackages.append(info)
+            except Exception, ex:
+                msgerror("Can't create html '%s', error %s" % (info, str(ex)))
+
+    html = '''
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="Content-Type" content= "text/html; charset=us-ascii" />
+      <title>"%s" package list</title>'''% getVersion() # Title
+
+    html += '''  
+<!-- estilos para las tablas -->
+  <style type="text/css" title="currentStyle">
+    @import "css/demo_table.css";
+    @import "css/thickbox.css";
+    #pkglist{
+        width:100%;
+        clear:both;
+        font-family:Arial,Helvetica,sans-serif;
+    }
+    #pkgdetails{
+        width:600px !important;
+        clear:both;
+    }
+    #pkgdetails table th{
+        text-algin:right;
+    }
+  </style>
+</head>''' 
+
+    html += '''
+<body>
+  <h1>%s package list</h1>
+  <table id="pkglist" summary="%s package list" width="100%%" >
+    <thead>
+    <tr>
+      <td>Package name</td>
+      <td>Version</td>
+      <td>O.S.</td>
+      <td>Official</td>
+      <td>Type</td>
+      <td>Owner</td>
+    </tr>
+    </thead>
+    <tbody>'''%(getVersion(),getVersion())
+
+    # sort allpackages
+    for item in sorted(allpackages, key=getCode):
+      html += '''\n    <tr>
+      <td><a class="thickbox" href="%s">%s</a></td>
+      <td>%s</td>
+      <td>%s</td>
+      <td>%s</td>
+      <td>%s</td>
+      <td>%s</td>
+    </tr>\n'''%(
+	"../../../web/" + item.getFullName() + ".html?height=400&width=600",
+        item.getName(),
+	item.version,
+	item.os,
+	item.getOfficial(),
+	item.getType(),
+	item.getOwner()
+      )
+    html += """ </tbody>\n </table>
+<!--javascript para la visualizaci�n de la tabla y carga din�mica del contenido del enlace -->
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
+<script src="http://datatables.net/release-datatables/media/js/jquery.dataTables.js" type="text/javascript"></script>
+<script type="text/javascript" src="js/thickbox-compressed.js"></script>
+
+<!-- inicializaci�n de la tabla con cosas chachis -->
+<script type="text/javascript">
+  $(document).ready(function() {
+      $('#pkglist').dataTable( {
+      "bPaginate": false,
+      "bLengthChange": true,
+      "bFilter": true,
+      "bSort": true,
+      "bInfo": true,
+      "bAutoWidth": true
+    });
+ } );
+</script>
+</body>
+</html>"""
+
+    # generate index.html
+    try:
+      f=file(getDist()+"/web/index.html","w")
+      f.write(html)
+      f.close()
+    except Exception, ex:
+      raise ex
+
+
+def mkpkihtml(basepath, info):
+  html='''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+  <title>%s</title>
+  <!-- estilos para las tablas -->
+  <style type="text/css" title="currentStyle">
+    @import "../dists/%s/web/css/demo_table.css";
+    #pkgdetails{
+      width:600px;
+      clear:both;
+    }
+    #pkgdetails table th{
+        text-algin:right;
+    }
+  </style>
+</head>
+<body>\n'''%(info.getIniOption("name"), getVersion())
+  html += '  <table id="pkgdetails" summary=%s >\n'%info.getIniOption("name")
+  html += '    <thead>\n  <tr>\n  <th>%s </th>\n  <td>%s</td>\n  </tr>\n  </thead>\n'%("Name", info.getIniOption("name"))
+  html += '    <tbody><tr><th>%s </th><td>%s</td></tr>\n'%("Code", info.code)
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Version", info.version)
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("State", info.getIniOption("state"))
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Build", info.build)
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Owner", info.getOwner())
+
+  #url = info.getUrl()
+  url = info.getIniOption("download-url")
+  if url != None:
+    html += '    <tr><th valing="top">Downloads</th><td><a href ="%s">Binaries</a></td></tr>\n'%(url)
+  else:
+    html += '    <tr><th valing="top">Downloads</th><td>Binaries</td></tr>\n'
+
+  sourceUrl = info.getSourceUrl()
+
+  if sourceUrl != None:
+    html += '    <tr><td></td><td><a href ="%s">Sources</a></td></tr>\n'%(sourceUrl)
+  else:
+    html += "    <tr><td></td><td>Sources</td></tr>\n"
+
+  if info.getDependencies() == None:
+    html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Dependencies", "")
+  else:
+    html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Dependencies", info.getDependencies().replace("\:",":"))
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Type", info.getType())
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Official", info.getOfficial())
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("O.S.", info.getOS())
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Architecture", info.getArch())
+  html += '    <tr><th valing="top">%s </th><td>%s</td></tr>\n'%("Categories", info.getCategories())
+
+  description = info.getDescription()
+  if description == None:
+    description = ""
+  description = description.replace("\\n", "<br>")
+  description = description.replace("\:",":")
+  html += '    <tr valing="top"><th valing="top">%s </th><td>%s</td></tr>\n'%("Description", description) 
+  html += """  </tbody>\n</table>\n"""
+  html += """ 
+  <!-- javascript para la visualizaci�n de la tabla -->
+  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
+  <script src="http://datatables.net/release-datatables/media/js/jquery.dataTables.js" type="text/javascript"></script>
+  <!-- inicializaci�n de la tabla con cosas chachis -->
+  <script type="text/javascript">
+    $(document).ready(function() {
+      $('#pkgdetails').dataTable( {
+        "bPaginate": false,
+        "bLengthChange": true,
+        "bFilter": false,
+        "bSort": false,
+        "bInfo": false,
+        "bAutoWidth": true
+      });
+    });
+  </script>
+  </body>\n</html>"""
+
+
+  try:
+    f = file(getWeb() + "/" + info.getFullName() + ".html","w")
+    f.write(html)
+    f.close()
+  except Exception, ex:
+    raise ex
+
+def mkdist(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mkdist"), "b:s:p:", [ "build=", "state=", "distribution_name=", "platform" ])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    build=None
+    state=None
+    distribution_name = "standard"
+    platforms = ("x86", "x86_64")
+    oss = ("lin", "win")
+    
+    for opt, arg in opts:
+        if opt in ("-b", "--build"):
+            build=arg
+        elif opt in ("-s", "--state"):
+            state=arg
+        elif opt in ("-N", "--distrinution-name"):
+            distribution_name = arg
+        elif opt in ("-p", "--platform"):
+          if args == "amd64":
+            # Aceptamos la plataforma amd64 como sinonimo de x86_64
+            args = "x86_64"
+          if not arg in ("x86","x86_64"):
+            print "Unsuported platform "+repr(platform)+", must be x86, x86_64 or amd64."
+            help(args)
+            sys.exit(2)
+          platforms = (arg,)
+        else:
+            assert False, "unhandled option %r" % opt
+
+    if build == None:
+      print "Requiered option --build not found."
+      help(args)
+      sys.exit(2)
+
+    if state == None:
+      print "Requiered option --state not found."
+      help(args)
+      sys.exit(2)
+
+    #
+    # Independientemente de la plataforma, los binarios de la version online a utilizar
+    # que usamos son siempre los de x86, con lo que el instalador siempre sera para x86.
+    # Si hemos especificado que queremos una instalacion para x86, este llevara solo paquetes
+    # multiplataforma, "all", y "x86".
+    # Si hemos especificado que queremos una instalacion para x86_64, este llevara solo paquetes
+    # multiplataforma, "all", y "x86_64".
+    #
+
+    if not os.path.isdir("builds/"+build):
+      print "Can't access the build folder builds/"+build+"."
+      sys.exit(2)
+       
+    message( "Generating distribution for build "+ build + "...")
+    executeCommand("mks", "-s", "-c")
+    executeCommand("mkhtml" )
+
+    gvspki_filename = "builds/"+build+"/packages.gvspki"
+    message( "Coping packages.gvspki to "+ gvspki_filename)
+    shutil.copyfile("packages.gvspki", gvspki_filename)
+    shutil.copyfile("packages.gvspki.md5", gvspki_filename +".md5")
+
+    exec_extensions = { 
+      "lin" : LINUX_EXEC_EXTENSION,
+      "win" : ".exe"
+    }
+    
+    for cur_os in oss:
+      exec_extension = exec_extensions[cur_os]
+      for cur_platform in platforms:
+        message( "Process "+cur_os+"/"+cur_platform)
+        gvspks_filename = "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+cur_os+"-"+cur_platform+".gvspks"
+        online_filename = "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+cur_os+"-x86-online" + exec_extension
+
+        if not os.path.isfile(online_filename):
+          msgwarn("Can't access the online installable for "+cur_os+"/"+cur_platform + " ("+online_filename+").")
+          continue
+       
+        message( "Coping packages-"+cur_os+"-"+cur_platform+"..gvspks to "+ gvspks_filename)
+        shutil.copyfile("packages-"+cur_os+"-"+cur_platform+".gvspks", gvspks_filename)
+        shutil.copyfile("packages-"+cur_os+"-"+cur_platform+".gvspks.md5", gvspks_filename +".md5")
+
+        message( "Add execution permissions to online installables....")
+        mychmod(online_filename,RWXALL)
+
+        md5sum(online_filename,online_filename+".md5")
+        mychmod(online_filename+".md5",RWALL)
+
+        executeCommand("mkinstall" , "--addjre"+cur_os, online_filename, gvspks_filename)
+
+        message( "Renaming files from custom to standard...")
+        target_filename = "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+cur_os+"-"+cur_platform+"-"+distribution_name + exec_extension
+        shutil.move(
+            "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+cur_os+"-x86-custom" + exec_extension,
+            target_filename
+        )
+        mychmod(target_filename,RWXALL)
+
+        md5sum(target_filename,target_filename+".md5")
+        mychmod(target_filename+".md5",RWALL)
+
+        target_filename = "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+cur_os+"-"+cur_platform+"-"+distribution_name+"-withjre" + exec_extension
+        shutil.move(
+            "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+cur_os+"-x86-custom-withjre" + exec_extension,
+            target_filename
+        )
+        mychmod(target_filename,RWXALL)
+
+        md5sum(target_filename,target_filename+".md5")
+        mychmod(target_filename+".md5",RWALL)
+        
+        message( "Coping html index to browse paqueges of the distro.")
+        shutil.rmtree("builds/"+build+"/web", ignore_errors=True)
+        shutil.copytree("web", "builds/"+build+"/web")
+        f = file("builds/"+build+"/web/index.html","r")
+        contents = f.read()
+        f.close()
+        contents = contents.replace("href=\"../../../web/gvSIG-desktop-", "href=\"../../../../../web/gvSIG-desktop-")
+        f = file("builds/"+build+"/web/index.html","w")
+        f.write(contents)
+        f.close()
+
+    message( "Process completed.")
+         
+      
+      
+
+def show(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("show"), "S", [ "verify"])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    eerify = False
+    for opt, arg in opts:
+        if opt in ("-V", "--verify"):
+            verify = True
+        else:
+            assert False, "unhandled option %r" % opt
+
+    index_name=args[0]
+    message( "Show package.info from '%s'" % index_name)
+    files = findfiles(getPool(), index_name)
+    if len(files) != 1:
+        msgerror("Can't locate package '%s' in pool '%s'." % (index_name, getPool()))
+        return
+    index_path = files[0]
+    outputfolder="/tmp/gvspkg.%s" % os.getpid()
+    os.mkdir(outputfolder)
+    os.system('unzip -q %s -d %s' % (index_path,outputfolder))
+
+    files = findfiles(outputfolder, "package.info")
+    if len(files) != 1:
+        msgerror("Can't locate package.info in pool '%s'." % (index_name))
+        return
+
+    package_info = files[0]
+    f = file(package_info,"r")
+    s = f.read()
+    f.close()
+    print s
+    if verify:
+      verify_sign(package_info)
+    shutil.rmtree(outputfolder)
+
+def editall(args):
+    cmd = Command(args)
+    try:  
+        opts, args = getopt.getopt(cmd.getArgs("editall"), "Scx:I:r:", ["clear-list", "exclude=", "excludepki=", "excludepkg=", "include=", "replace=", "sign"])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    index_only = False
+    clear_list=False
+    includes=list()
+    excludes_pki=list()
+    replaces = list()
+    excludes_pkg=list()
+    sign = False
+    interactive = True
+    for opt, arg in opts:
+        if opt in ("-c", "--clear-list"):
+            clear_list = True
+        elif opt in ("-x", "--exclude"):
+            excludes_pki.append(arg)
+            excludes_pkg.append(arg)
+        elif opt in ( "--excludepki"):
+            excludes_pki.append(arg)
+        elif opt in ( "--excludepkg"):
+            excludes_pkg.append(arg)
+        elif opt in ( "--include", "-I"):
+            includes.append(PackageInfo(arg))
+        elif opt in ("-r", "--replace"):
+            interactive = False
+            replaces.append(arg)
+        elif opt in ("-S", "--sign"):
+            sign = True
+        else:
+            assert False, "unhandled option %r" % opt
+
+    indexes = IndexList()
+
+    packages_txt = getDist() +"/packages.txt"
+    if os.path.exists(packages_txt) and not clear_list:
+        indexes.load(packages_txt)
+    else:
+        indexes.build(getPool(), getSearchVersions())
+        indexes.save(packages_txt)
+
+    for pkg in includes:
+      indexes.append(pkg)
+
+    allpackages = list()
+    for info in indexes:
+        if not ( info.code in excludes_pki or info.getFullName() in excludes_pki ):
+            try:
+                if info.hasPki() :
+                  print info.getPkiFilename() 
+                  if interactive :
+                    edit_pkginfo_of_package(info.getPkiFilename(), edit_ui)
+                  elif len(replaces) < 1:
+                    edit_pkginfo_of_package(info.getPkiFilename(), edit_replace, replaces)
+
+                  if sign:
+                    edit_pkginfo_of_package(info.getPkiFilename(), edit_sign)
+
+            except Exception, ex:
+                msgerror("Can't add index '%s', error %s" % (info, str(ex)))
+
+def edit(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("edit"), "Sr:", [ "replace=", "onlysign", "sign" ])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    replaces = list()
+    interactive = True
+    sign = False
+    for opt, arg in opts:
+        if opt in ("-r", "--replace"):
+            interactive = False
+            replaces.append(arg)
+        elif opt in ("--onlysign"):
+            interactive = False
+            sign = True
+        elif opt in ("-S", "--sign"):
+            sign = True
+        else:
+            assert False, "unhandled option %r" % opt
+
+    index_name=args[0]
+    message( "Show package.info from '%s'" % index_name)
+    files = findfiles(getPool(), index_name)
+    if len(files) != 1:
+        msgerror("Can't locate package '%s' in pool '%s'." % (index_name, getPool()))
+        return
+    index_path = files[0]
+    if interactive:
+      edit_pkginfo_of_package(index_path, edit_ui)
+    elif len(replaces) < 1:
+      edit_pkginfo_of_package(index_path, edit_replace, replaces)
+
+    if sign:
+      edit_pkginfo_of_package(index_path, edit_sign)
+
+def edit_ui(filename, args):
+      os.system('vi "%s"' % filename)
+
+def edit_replace(filename, args):
+      replaces = args[0]
+      f = open(filename)
+      s = f.read()
+      f.close()
+      for replace in replaces:
+        x = replace.split(replace[0])
+        if len(x)==4:
+          s=re.sub(x[1],x[2],s)
+      f = open(filename,"w")
+      f.write(s)
+      f.close()
+
+def edit_sign(filename, args):
+      os.system('java -cp "%s/commons-codec-1.6.jar:%s/org.gvsig.installer.lib.impl-1.0.1-SNAPSHOT.jar" org.gvsig.installer.lib.impl.utils.SignUtil sign %s' %  (
+        get_gvspkg_bin_folder(),
+        get_gvspkg_bin_folder(),
+        filename)
+      )
+
+def verify_sign(filename):
+      os.system('java -cp "%s/commons-codec-1.6.jar:%s/org.gvsig.installer.lib.impl-1.0.1-SNAPSHOT.jar" org.gvsig.installer.lib.impl.utils.SignUtil verify %s' % (
+        get_gvspkg_bin_folder(),
+        get_gvspkg_bin_folder(),
+        filename)
+      )
+
+def edit_pkginfo_of_package(pkg_path, operation, *args):
+    outputfolder="/tmp/gvspkg.%s" % os.getpid()
+    os.mkdir(outputfolder)
+    os.system('unzip -q %s -d %s' % (pkg_path,outputfolder))
+
+    files = findfiles(outputfolder, "package.info")
+    if len(files) != 1:
+        msgerror("Can't locate package.info in pool '%s'." % (pkg_path))
+        return
+
+    package_info = files[0]
+    code = package_info.split("/")[-2]
+    operation(package_info, args)
+
+    # zip -Dr kk.zip org.gvsig.wfs
+    temp_index_name = "/tmp/packages.gvspki.%s" % os.getpid()
+    temp_index = zipfile.ZipFile(temp_index_name,"w",zipfile.ZIP_STORED)
+    temp_index.write(package_info, "%s/package.info" % (code))
+    temp_index.close()
+    shutil.rmtree(outputfolder)
+    os.remove(pkg_path)
+    shutil.move(temp_index_name,pkg_path)
+
+def install(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("install"), "f", [ "force" ])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(args)
+        sys.exit(2)
+
+    force = False
+    for opt, arg in opts:
+        if opt in ("-f", "--force"):
+            force = True
+        else:
+            assert False, "unhandled option %r" % opt
+
+    url_pki = args[0]
+    message( "Download package index '%s'" % url_pki)
+    temppath_pki= os.path.join("/tmp",os.path.basename(url_pki))
+    if not downloadFile(url_pki,temppath_pki):
+      msgerror("Can't download index.")
+      msgerror("Can't install '%s'." % url_pki)
+      print # force a newline
+      return 1
+    pkg = PackageInfo(temppath_pki)
+    url_pkg = pkg.getUrl().replace("\\","")
+    if url_pkg[-7:] == ".gvspki" :
+      msgwarn("Suspicious download-url value. Ends with gvspki, expected gvspkg.")
+      msgwarn("download-url ='%s'." % url_pkg)
+    message( "Download package '%s'" % url_pkg)
+    temppath_pkg= os.path.join("/tmp",os.path.basename(url_pkg))
+    if not downloadFile(url_pkg,temppath_pkg):
+      msgerror("Can't download package from download-url ('%s')." % url_pkg)
+      msgerror("Can't install '%s'," % url_pki)
+      print # force a newline
+      return 1
+    folder = os.path.join(getPool(),pkg.getCode())
+    if not os.path.isdir(folder) :
+        os.makedirs(folder)
+    pathname_pki = os.path.join(folder,os.path.basename(url_pki))
+    if not force and os.path.isfile(pathname_pki) :
+        msgwarn("The package index alreade exist in the pool. Use -f to forrce install.")
+        print # force a newline
+        return 1
+    pathname_pkg = os.path.join(folder,os.path.basename(url_pkg))
+    if  not force and os.path.isfile(pathname_pki) :
+        msgwarn("The package downloaded from download-url alredy exists in the pool. Use -f to force install.")
+        print # force a newline  
+        return 1
+    message( "installing package '%s'" % os.path.basename(pathname_pki))
+    shutil.copyfile(temppath_pki, pathname_pki)
+    message( "installing package '%s'" % os.path.basename(pathname_pkg))
+    shutil.copyfile(temppath_pkg, pathname_pkg)
+
+    md5sum(pathname_pki, pathname_pki+".md5")
+    md5sum(pathname_pkg, pathname_pkg+".md5")
+
+
+def md5sum(fin, fout):
+    message( "Calculating md5sum of %s..." % fin )
+    system("md5sum -b %s >%s" % (fin, fout) )
+
+def downloadFile(url,path):
+  try:
+    fsrc = urllib2.urlopen(url)
+  except urllib2.HTTPError,e:
+    msgerror("Error abriendo url '%s'." % url, e)
+    return False
+  fdst = file(path,"wb")
+  shutil.copyfileobj(fsrc,fdst)
+  fdst.close()
+  fsrc.close()
+  return True
+
+
+def help(args):
+    print """
+usage: gvspkg [OPTIONS] COMMANDS
+
+OPTIONS:
+
+-h|--help
+    Muestra esta ayuda
+
+-v|--verbose
+    Activa el modo verbose
+
+-d|--debug
+    Activa el modo debug. Se muestran mensajes que pueden ser
+    utilies de cara a depuracion.
+
+--version version
+    Fija la version con la que van a trabajar los comandos indicados.
+
+-r|--package-root package-root
+    Fija la carpeta en la que va a buscar el raiz del sistema de paquetes
+    con el que trabajar
+    
+COMMANDS:
+
+mkinstall [OPTIONS] install-file packages-file
+
+    OPTIONS:
+
+    -L | --jrelin=path
+
+    -W | --jrewin=path
+
+    -l | --addjrelin
+
+    -w | --addjrewin
+    
+    -N | --distribution-name=name
+      Nombre usado como sufijo del nuevo binario a generar. Por defecto si no se
+      indica valdra "custom".
+
+
+lsi [OPTIONS]
+    Lista los indices disponibles de la version
+
+    OPTIONS:
+
+    -l | --long-format
+        Muestra para cada paquete la informacion del package.info
+
+mks [OPTIONS]
+     Crea el fichero packages.gvspki con los indices de la
+     version y packages.gvspkg con los paquetes.
+
+     OPTIONS:
+
+     -c | --clear-list
+        Elimina la lista de paquetes a utilizar recreandola a partir
+        de los paquetes del pool tomando el ultimo build de cada paquete.
+
+     --excludepkg pkgcode
+        No incluye el paquete indicado en el fichero gvspkg a generar
+
+     --excludepki pkgcode
+        No incluye el paquete indicado en el fichero gvspki a generar
+
+     --exclude pkgcode
+        No incluye el paquete indicado en los ficheros gvspkg y gvspki a generar
+
+     -s | --include-default-selection
+        Incluye el fichero "defaultPackages", que se debe encontrar en el
+        directorio corriente, con los nombres de paquetes a seleccionar
+        por defecto.
+
+     -p | --platform=name
+        Indica para que plataforma queremos generar el conjunto de paquetes. 
+        Es un parametro opcional.
+        Sus valores pueden ser:
+        - all (Se incluiren los de todas las plataformas, no solo los multiplataforma)
+        - x86
+        - x86_64
+        - amd64 (sinonimo aceptado para x86_64)
+        Si no se indica plataforma se generara para "all".
+        El indice,"gvspki", siempre llevara los de todas las plataformas, esta opcion
+        solo afecta a la genracion del "gvspks".
+        
+        
+     -i | --index-only
+        No crea el fichero gvspks, solo crea el gvspki
+
+     -I full-path-to-package | --include full-path-to-package 
+        A�ade el paquete indicado a la lista de paquetes aunque no coincida para 
+        la version de gvSIG con la que se esta trabajando.
+
+mkdist [OPTIONS]
+     Crea los ficheros de la distribucion standard para el buil dindicado a partir de 
+     la distribucion online y los paquetes que hayan en el pool para esta version.
+     Ejecuta un "mks" y un "mkhtml" automaticamente para preparar el conjunto de paquetes
+     a incluir en la distribucion, y una vez preparados ejecuta un "mkinsrall" por
+     S.O. (win y lin), renombrando los ficheros generados segun corresponda.
+
+     OPTIONS:
+     -s STATE | --state=STATE
+        Indica el estado de la distribucion a generar, devel, alpha, ..., debe estar
+        deacuerdo con lo que diga el cihero online a usar como base.
+
+     -b BUILD | --build=BUILD
+        Indica el numero de build de la destribucion a generar. Es usado para localizar
+        los ficheros en la carpeta builds de la distribucion y para saber donde debe
+        dejar los ficheros generados.
+
+     -p | --platform=name
+        Indica para que plataforma queremos generar los instalables de gvSIG. 
+        Es un parametro opcional.
+        Sus valores pueden ser:
+        - all (si se indica se generara para x86)
+        - x86
+        - x86_64
+        - amd64 (sinonimo aceptado para x86_64)
+        Si no se indica plataforma se generara para x86.
+        
+     -N | --distribution-name=name
+        Nombre usado como sufijo del nuevo binario a generar. Por defecto si no se
+        indica valdra "standard".
+
+     
+mkmirror [OPTIONS]
+
+  Prepara una carpeta para hacer un mirror de un build en concreto.
+
+     OPTIONS:
+
+     -b | --build buildnumber
+       Indica el numero de build del que se quiere hacer un mirror.
+
+mkhtml [OPTIONS]
+     ????
+
+     OPTIONS:
+
+     -c | --clear-list
+        Elimina la lista de paquetes a utilizar recreandola a partir
+        de los paquetes del pool tomando el ultimo build de cada paquete.
+
+     --excludepkg pkgcode
+        No incluye el paquete indicado en el fichero gvspkg a generar
+
+     --excludepki pkgcode
+        No incluye el paquete indicado en el fichero gvspki a generar
+
+     --exclude pkgcode
+        No incluye el paquete indicado en los ficheros gvspkg y gvspki a generar
+
+show OPTIONS package-index
+    Muestra el package.info del indice indicado como parametro.
+
+    OPTIONS
+
+    --verify | -V
+      Comprueba la forma del packete.
+
+edit [OPTIONS] package-index
+    Edita el package.info del indice indicado como parametro.
+
+     OPTIONS:
+
+     --replace=@search@replace@
+       Reemplaza en el package.info de cada paquete la cadena "search" por "replace"
+       todas las veces que aparezca. "@" puede ser cualquier caracter que no aparezca
+       en "search" y "replace".
+       Esta opcion puede indicarse tatas veces como reemplazos se deseen efectuar.
+
+     --onlysign
+       firma el package.info sin editarlo de forma interactiva (no invoca al editor antes 
+       de firmarlo).
+
+     --sign | -S
+       Firma el package.info tras terminar la edicion (bach o interactiva)
+
+editall [OPTIONS]
+    Edita todos los package.info 
+
+     OPTIONS:
+
+     -c | --clear-list
+        Elimina la lista de paquetes a utilizar recreandola a partir
+        de los paquetes del pool tomando el ultimo build de cada paquete.
+
+     --excludepkg pkgcode
+        No incluye el paquete indicado en el fichero gvspkg a generar
+
+     --excludepki pkgcode
+        No incluye el paquete indicado en el fichero gvspki a generar
+
+     --exclude pkgcode
+        No incluye el paquete indicado en los ficheros gvspkg y gvspki a generar
+
+     --replace=@search@replace@
+       Reemplaza en el package.info de cada paquete la cadena "search" por "replace"
+       todas las veces que aparezca. "@" puede ser cualquier caracter que no aparezca
+       en "search" y "replace".
+       Esta opcion puede indicarse tatas veces como reemplazos se deseen efectuar.
+
+      --sign | -S
+        Firma todos los paquetes que sean oficiales
+
+install [OPTIONS] url-to-pki
+    descarga de la url indicada un fichero gvspki e instala este junto con su correspondiente
+    pkg en el pool local.
+
+     OPTIONS:
+
+     -f | --force
+       fuerza la sobreescritura de los ficheros en caso de que estos ya existan.
+
+Si en la carpeta corriente encuentra un fichero gvspkg.options cargara los
+flags indicados ahi como flags por defecto para cada comando. El formato del 
+fichero es:
+  main=OPCION-POR-DEFECTO
+  mks=OPCOPNES-POR-DEFECTO
+Donde main indica las opciones por defecto generales, independientes del comando
+a ejecutar. "mks" indica las opciones por defecto a usar en el comando "mks", y 
+asi sucesivamente, indicando el nombre del comando seguido de un "=" y las opciones
+por defecto para ese comando.
+
+Por defecto la version la obtiene del nombre de la carpeta 
+corriente (%s). Las opciones indicadas en el fichero gvspkg.options tienen prioridad
+sobre este valor.
+
+El directorio root de la estructura de packetes lo buscara en el
+sitio indicado por la variable de entorno GVPKG_ROOT, y si esta no
+esta establecida usara "%s". Las opciones indicadas en el fichero gvspkg.options 
+tienen prioridad sobre este valor.
+
+    """ % (VERSION, GVSPKG_ROOT)
+
+def executeCommand(*args):
+    command = "help"
+    if len(args)>0:
+        command=args[0]
+
+    if command=="lsi" :
+        lsi(args)
+    elif command == "mks":
+        mks(args)
+    elif command == "edit":
+        edit(args)
+    elif command == "editall":
+        editall(args)
+    elif command == "show":
+        show(args)
+    elif command == "mkhtml":
+        mkhtml(args)
+    elif command == "mkinstall":
+        mkinstall(args)
+    elif command == "install":
+        install(args)
+    elif command == "mkdist":
+        mkdist(args)
+    elif command == "mkmirror":
+        mkmirror(args)
+    else:
+        help(args)
+
+
+def main():
+    global DEBUG
+    global VERSION
+    global VERBOSE
+    global GVSPKG_ROOT
+    global SEARCH_VERSIONS
+
+    cmd = Command(sys.argv)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("main"), "dhvr:", ["debug", "verbose", "version=", "package-root=","help","search_versions="])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        help(None)
+        sys.exit(2)
+
+    for opt, arg in opts:
+        if opt in ("-h", "--help"):
+            help(args)
+            sys.exit()
+        elif opt in ("-d", "--debug"):
+            DEBUG = True
+        elif opt in ("-v", "--verbose"):
+            VERBOSE = True
+        elif opt in ("--version"):
+            VERSION = arg
+        elif opt in ("--search_versions"):
+            SEARCH_VERSIONS.append(arg)
+        elif opt in ("-r", "--package-root"):
+            GVSPKG_ROOT = arg
+        else:
+            assert False, "unhandled option"
+    # 
+    debug("DEBUG=%s" % DEBUG)
+    debug("VERSION=%s" % VERSION)
+    debug("GVSPKG_ROOT=%s" % GVSPKG_ROOT)
+    if GVSPKG_ROOT == None:
+      help(None)
+    else:
+      executeCommand(*args)
+
+main()
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/options
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/options	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/options	(revision 42196)
@@ -0,0 +1,3 @@
+# Default linux and windows JRE installers to use
+main=--package-root /home/groups/gvsig-desktop/www/gvSIG-desktop
+mkinstall=--jrelin /home/groups/gvsig-desktop/www/downloads/runtimes/java1.6/jre-6u26-linux-i586.bin --jrewin /home/groups/gvsig-desktop/www/downloads/runtimes/java1.6/jre-6u26-windows-i586-s.exe
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/installkit
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/installkit
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/main.tcl
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/main.tcl	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/packaging/gvspkg.bin/main.tcl	(revision 42196)
@@ -0,0 +1,286 @@
+proc main { } {
+        global argc
+        global argv
+
+        if {$argc < 1} {
+                help
+                return 1
+        }
+        if {$::installkit::wrapped} {
+                puts "Script embebido en el binario"
+                # Cuando se da esta condicion he palmado el argv de 0,
+                # y no se de donde sacarlo., con lo que se perdio el command
+                puts "argv: $argv"
+                puts "tcl_argv: $::tcl_argv"
+        }
+
+        set cmd [lindex $argv 0]
+        # puts "command: $cmd"
+        #puts "argv: $argv"
+        #puts "tcl_argv: $::tcl_argv"
+        switch $cmd {
+                "help" {
+                        help
+                }
+                "ls" {
+                        set install_file  [ lindex $argv 1 ]
+                        ls $install_file
+                }
+                "addmain" {
+                        set install_file  [ lindex $argv 1 ]
+                        set main_file  [ lindex $argv 2 ]
+                        addmain $install_file $main_file
+                }
+                "addpks" {
+                        set install_file  [ lindex $argv 1 ]
+                        set package_set  [ lindex $argv 2 ]
+                        addpks $install_file $package_set
+                }
+                "addjrelin" {
+                        set install_file  [ lindex $argv 1 ]
+                        set jre_installer  [ lindex $argv 2 ]
+                        addjrelin $install_file $jre_installer
+                }
+                "addjrewin" {
+                        set install_file  [ lindex $argv 1 ]
+                        set jre_installer  [ lindex $argv 2 ]
+                        addjrewin $install_file $jre_installer
+                }
+                "extractpks" {
+                        set install_file  [ lindex $argv 1 ]
+                        set folder  [ lindex $argv 2 ]
+                        extractpks $install_file $folder
+                }
+                "extractjrelin" {
+                        set install_file  [ lindex $argv 1 ]
+                        set folder  [ lindex $argv 2 ]
+                        extractjrelin $install_file $folder
+                }
+               "extractjrewin" {
+                        set install_file  [ lindex $argv 1 ]
+                        set folder  [ lindex $argv 2 ]
+                        extractjrewin $install_file $folder
+                }
+                default {
+                        puts "unknow command $cmd"
+                        help
+                }
+        }
+}
+
+
+proc help {} {
+        global argv0
+        puts "Usage: [ file tail $argv0 ] command args"
+        puts "Command are:"
+        ls_help
+        addpks_help
+        addmain_help
+        addjrelin_help
+        addjrewin_help
+        extractpks_help
+        extractjrelin_help
+        extractjrewin_help
+}
+
+proc addmain_help {} {
+        puts ""
+        puts "addmain installkit main-file"
+        puts "  Add the main file to the installkit"
+        puts "  If main.tcl already in installkit it is replaced"
+}
+
+proc addmain { installkit_file main_file } {
+	addfile $install_file $main_file "main.tcl" "Main"
+}
+
+proc addpks_help {} {
+        puts ""
+        puts "addpks gvsig-install-program package-set"
+        puts "  Add the specified package set to the installation program"
+        puts "  If package.gvspks was already previously added, it will be replaced"
+}
+
+proc addpks { install_file package_set } {
+	addfile $install_file $package_set "package.gvspks" "Package set"
+}
+
+proc addjrelin_help {} {
+        puts ""
+        puts "addjrelin gvsig-install-program jre-installer"
+        puts "  Add the specified jre linux installer to the installation program"
+        puts "  If the jre installer was already previously added, it will be replaced"
+}
+
+proc addjrelin { install_file jre_installer } {
+	addfile $install_file $jre_installer "jre-installer-lin.bin" "JRE installer"
+}
+
+proc addjrewin_help {} {
+        puts ""
+        puts "addjrewin gvsig-install-program jre-installer"
+        puts "  Add the specified jre windows installer to the installation program"
+        puts "  If the jre installer was already previously added, it will be replaced"
+}
+
+proc addjrewin { install_file jre_installer } {
+	addfile $install_file $jre_installer "jre-installer-win.exe" "JRE installer"
+}
+
+proc addfile { install_file file_to_add file_name file_description } {
+        if { [file writable $install_file] != 1 } {
+                puts "Write access unavailable to the file $install_file"
+                return
+        }
+        if { [file isfile $file_to_add] !=1 } {
+                puts "The file to add is not a file: $file_to_add"
+                return
+        }
+        set fp [ ::miniarc::open crap "$install_file" a ]
+        ::miniarc::addfile $fp "$file_to_add"  -name "$file_name"
+        ::miniarc::close $fp
+        puts "$file_description added to installation program."
+}
+
+proc ls_help {} {
+        puts ""
+        puts "ls gvsig-install-program "
+        puts "  list the files attached to the installkit or installation program especified"
+}
+
+proc ls { install_file } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        set root /installkitunpackvfs
+        crapvfs::mount $install_file $root
+
+        set dirs [glob -nocomplain -type d $root/*]
+        if { [llength $dirs] > 0 } {
+            puts "Directories:"
+            foreach d [lsort $dirs] {
+                puts "    $d"
+            }
+        } else {
+            puts "(no subdirectories)"
+        }
+
+        set files [glob -nocomplain -type f $root/*]
+        if { [llength $files] > 0 } {
+            puts "Files:"
+            foreach f [lsort $files] {
+                puts "    [file size $f] - $f"
+            }
+        } else {
+            puts "(no files)"
+        }
+
+        crapvfs::unmount $root
+}
+
+
+proc extractpks_help {} {
+        puts ""
+        puts "extractpks gvsig-install-program folder"
+        puts "  Extract the package set from the installation program to the especified folder"
+        puts "  If the installation program has not a package set do nothing."
+}
+
+proc extractpks { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/package.gvspks"] == 1 } {
+                file copy "$root/package.gvspks" "$folder/package.gvspks"
+        }
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+        puts "Package set extracted to folder $folder"
+}
+
+proc extractjrelin_help {} {
+        puts ""
+        puts "extractjrelin gvsig-install-program folder"
+        puts "  Extract the jre linux installer from the installation program to the especified folder"
+        puts "  If the installation program has not a jre installer do nothing."
+}
+
+proc extractjrelin { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/jre-installer-lin.bin"] == 1 } {
+                file copy "$root/jre-installer-lin.bin" "$folder/jre-installer-lin.bin"
+                puts "JRE installer extracted to folder $folder"
+        } else {
+            puts "JRE installer (jre-installer-lin.bin) not available to be extracted"
+        }
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+}
+
+proc extractjrewin_help {} {
+        puts ""
+        puts "extractjrewin gvsig-install-program folder"
+        puts "  Extract the jre windows installer from the installation program to the especified folder"
+        puts "  If the installation program has not a jre installer do nothing."
+}
+
+proc extractjrewin { install_file folder } {
+        if { [file isfile $install_file] != 1 } {
+                puts "Can't access to file $install_file"
+                return
+        }
+        if { [file isdirectory $folder] !=1 } {
+                puts "Can't access to folder $folder"
+                return
+        }
+        set root /installkitunpackvfs
+        set already_mounted true
+        if { [file isdirectory $root] !=1 } {
+                crapvfs::mount $install_file $root
+                set already_mounted false
+        }
+
+        if { [file isfile "$root/jre-installer-win.exe"] == 1 } {
+                file copy "$root/jre-installer-win.exe" "$folder/jre-installer-win.exe"
+            puts "JRE installer extracted to folder $folder"
+        } else {
+            puts "JRE installer (jre-installer-win.exe) not available to be extracted"
+        }
+
+        if { $already_mounted == false } {
+                crapvfs::unmount $root
+        }
+}
+
+main
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/config/defaultPackages
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/config/defaultPackages	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/config/defaultPackages	(revision 42196)
@@ -0,0 +1,80 @@
+#
+# Core plugins
+org.gvsig.app.mainplugin
+org.gvsig.annotation.app.mainplugin
+org.gvsig.daltransform.app.mainplugin
+org.gvsig.daltransform.app.eventtheme
+org.gvsig.daltransform.app.join
+org.gvsig.centerviewpoint.app.mainplugin
+org.gvsig.datalocator.app.mainplugin
+org.gvsig.editing.app.mainplugin
+org.gvsig.exportto.app.mainplugin
+org.gvsig.geodb.app.mainplugin
+org.gvsig.geometrymeasurement.app.mainplugin
+org.gvsig.help.app.mainplugin
+org.gvsig.i18n.app.mainplugin
+org.gvsig.installer.app.mainplugin
+org.gvsig.newlayer.app.mainplugin
+org.gvsig.selectiontools.app.mainplugin
+org.gvsig.symbology.app.symbolinstaller
+org.gvsig.symbology.app.importsymbols
+org.gvsig.app.document.table.app.mainplugin
+org.gvsig.app.document.layout.app.mainplugin
+org.gvsig.geometry.app.generalpath
+# Data providers
+org.gvsig.shp.app.mainplugin
+org.gvsig.csv.app.mainplugin
+
+#
+# 2.0.0 external plugins
+# Data providers
+org.gvsig.gpe.app.mainplugin
+org.gvsig.dwg.app.mainplugin
+org.gvsig.dxf.app.mainplugin
+org.gvsig.dgn.app.mainplugin
+org.gvsig.postgresql.app.mainplugin
+org.gvsig.mysql.app.mainplugin
+# Tools
+org.gvsig.expressionfield
+org.gvsig.gazetteer.extension
+org.gvsig.catalog.extension
+org.gvsig.hyperlink.app.extension
+org.gvsig.wfs.app.mainplugin
+# legends
+org.gvsig.legend.graduatedsymbols.app.mainplugin
+org.gvsig.legend.proportionalsymbols.app.mainplugin
+org.gvsig.legend.quantitybycategory.app.mainplugin
+org.gvsig.legend.vectorfilterexpression.app.mainplugin
+org.gvsig.legend.dotdensity.app.mainplugin
+# Others
+org.gvsig.projection.app.jcrs
+ 
+#
+# Raster plugins
+org.gvsig.raster.mainplugin
+org.gvsig.raster.tools.app.basic
+org.gvsig.raster.reproject.app.reprojectclient
+org.gvsig.raster.georeferencing.app.georeferencingclient
+org.gvsig.raster.tilecache.app
+# Data providers
+org.gvsig.raster.multifile.app.multifileclient
+org.gvsig.raster.gdal.app
+org.gvsig.raster.ermapper.app
+org.gvsig.raster.lizardtech.app
+org.gvsig.raster.wcs.app.wcsclient
+org.gvsig.raster.wms.app.wmsclient
+org.gvsig.raster.wmts.app.wmtsclient
+org.gvsig.raster.osm.app.osmclient
+org.gvsig.raster.postgis.app.postgisrasterclient
+org.gvsig.raster.netcdf.app.netcdfclient
+#
+# Geoprocess plugins
+org.gvsig.geoprocess.app.algorithm
+org.gvsig.geoprocess.app.mainplugin
+org.gvsig.geoprocess.app.sextante
+org.gvsig.geoprocess.app.tool
+#
+# Chart plugins
+org.gvsig.chart.app.layoutplugin
+org.gvsig.chart.app.legendplugin
+org.gvsig.chart.app.mainplugin
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop-portable.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop-portable.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop-portable.xml	(revision 42196)
@@ -0,0 +1,74 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<launch4jConfig>
+<!--
+- gvsig.product.folder.path
+- org.gvsig.andami.updater.jar, ej: "org.gvsig.andami.updater-2.0.10-SNAPSHOT.jar"
+- version, ej: 2.0.0-2066
+-->
+  <dontWrapJar>false</dontWrapJar>
+  <headerType>gui</headerType>
+  <jar>@@gvsig.product.folder.path@@/lib/@@org.gvsig.andami.updater.jar@@</jar>
+  <outfile>@@gvsig.product.folder.path@@/tools/gvsig-desktop-portable.exe</outfile>
+  <errTitle>gvSIG launch error</errTitle>
+  <cmdLine>gvSIG gvSIG/extensiones</cmdLine>
+  <chdir>.</chdir>
+  <priority>normal</priority>
+  <downloadUrl>http://java.com/download</downloadUrl>
+  <supportUrl>https://devel.gvsig.org/redmine/projects/gvsig-desktop</supportUrl>
+  <customProcName>false</customProcName>
+  <stayAlive>false</stayAlive>
+  <manifest></manifest>
+  <icon>@@gvsig.product.folder.path@@/gvSIG.ico</icon>
+          <var>PROJ_LIB=%EXEDIR%/home/gvSIG/plugins/org.gvsig.projection.app.jcrs/projlib</var>
+  <var>GDAL_DATA=%EXEDIR%/data/gdal</var>
+  <classPath>
+    <mainClass>org.gvsig.andamiupdater.Updater</mainClass>
+    <cp>%EXEDIR%/lib/jwizardcomponent-0i18n-1.2.2.1.jar</cp>
+    <cp>%EXEDIR%/lib/@@org.gvsig.andami.updater.jar@@</cp>
+  </classPath>
+  <jre>
+    <path>%EXEDIR%\gvSIG\extensiones\jre_7_windows_i586\jre</path>
+    <minVersion>1.6.0</minVersion>
+    <maxVersion></maxVersion>
+    <jdkPreference>preferJdk</jdkPreference>
+    <initialHeapSize>512</initialHeapSize>
+    <maxHeapSize>1024</maxHeapSize>
+    <opt>-XX:MaxPermSize=96M -DgvSIG.home=&quot;%EXEDIR%/home&quot;</opt>
+  </jre>
+  <versionInfo>
+    <fileVersion>@@version@@</fileVersion>
+    <txtFileVersion>@@version@@</txtFileVersion>
+    <fileDescription>gvSIG desktop</fileDescription>
+    <copyright>(c) 2009-2014 gvSIG Association</copyright>
+    <productVersion>@@version@@</productVersion>
+    <txtProductVersion>@@version@@</txtProductVersion>
+    <productName>gvSIG desktop</productName>
+    <companyName>gvSIG Association</companyName>
+    <internalName>gvsig-desktop</internalName>
+    <originalFilename>gvsig-desktop.exe</originalFilename>
+  </versionInfo>
+</launch4jConfig>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop-devel.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop-devel.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop-devel.xml	(revision 42196)
@@ -0,0 +1,69 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<launch4jConfig>
+  <dontWrapJar>false</dontWrapJar>
+  <headerType>gui</headerType>
+  <jar>@@gvsig.product.folder.path@@/lib/@@org.gvsig.andami.updater.jar@@</jar>
+  <outfile>@@gvsig.product.folder.path@@/gvsig-desktop-devel.exe</outfile>
+  <errTitle>gvSIG launch error</errTitle>
+  <cmdLine>gvSIG gvSIG/extensiones</cmdLine>
+  <chdir>.</chdir>
+  <priority>normal</priority>
+  <downloadUrl>http://java.com/download</downloadUrl>
+  <supportUrl>https://devel.gvsig.org/redmine/projects/gvsig-desktop</supportUrl>
+  <customProcName>false</customProcName>
+  <stayAlive>false</stayAlive>
+  <manifest></manifest>
+  <icon>@@gvsig.product.folder.path@@/gvSIG.ico</icon>
+  <var>PROJ_LIB=%HOMEDRIVE%%HOMEPATH%/gvSIG/plugins/org.gvsig.projection.app.jcrs/projlib</var>
+  <var>GDAL_DATA=%EXEDIR%/data/gdal</var>
+  <classPath>
+    <mainClass>org.gvsig.andamiupdater.Updater</mainClass>
+    <cp>%EXEDIR%/lib/jwizardcomponent-0i18n-1.2.2.1.jar</cp>
+    <cp>%EXEDIR%/lib/@@org.gvsig.andami.updater.jar@@</cp>
+  </classPath>
+  <jre>
+    <path>%EXEDIR%\gvSIG\extensiones\jdk_6_windows_i586\jdk</path>
+    <minVersion>1.5.0</minVersion>
+    <maxVersion></maxVersion>
+    <jdkPreference>jdkOnly</jdkPreference>
+    <initialHeapSize>512</initialHeapSize>
+    <maxHeapSize>1024</maxHeapSize>
+    <opt>-XX:MaxPermSize=96M</opt>
+  </jre>
+  <versionInfo>
+    <fileVersion>@@version@@</fileVersion>
+    <txtFileVersion>@@version@@</txtFileVersion>
+    <fileDescription>gvSIG desktop 2.0.0</fileDescription>
+    <copyright>(c) 2009-2012 gvSIG Association</copyright>
+    <productVersion>@@version@@</productVersion>
+    <txtProductVersion>@@version@@</txtProductVersion>
+    <productName>gvSIG desktop</productName>
+    <companyName>gvSIG Association</companyName>
+    <internalName>gvsig-desktop-devel</internalName>
+    <originalFilename>gvsig-desktop-devel.exe</originalFilename>
+  </versionInfo>
+</launch4jConfig>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop-devel.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-package-installer.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-package-installer.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-package-installer.xml	(revision 42196)
@@ -0,0 +1,69 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<launch4jConfig>
+  <dontWrapJar>false</dontWrapJar>
+  <headerType>gui</headerType>
+  <jar>@@gvsig.product.folder.path@@/lib/@@org.gvsig.andami.updater.jar@@</jar>
+  <outfile>@@gvsig.product.folder.path@@/gvsig-package-installer.exe</outfile>
+  <errTitle>gvSIG package installer launch error</errTitle>
+  <cmdLine>--applicationName=gvSIG --pluginsFolder=gvSIG/extensiones --install</cmdLine>
+  <chdir>.</chdir>
+  <priority>normal</priority>
+  <downloadUrl>http://java.com/download</downloadUrl>
+  <supportUrl>https://devel.gvsig.org/redmine/projects/gvsig-desktop</supportUrl>
+  <customProcName>false</customProcName>
+  <stayAlive>false</stayAlive>
+  <manifest></manifest>
+  <icon>@@gvsig.product.folder.path@@/gvSIG.ico</icon>
+  <var>PROJ_LIB=./gvSIG/extensiones/org.gvsig.crs.extension/data</var>
+  <var>GDAL_DATA=./data/gdal</var>
+  <classPath>
+    <mainClass>org.gvsig.andamiupdater.Updater</mainClass>
+    <cp>./lib/jwizardcomponent-0i18n-1.2.2.1.jar</cp>
+    <cp>./lib/@@org.gvsig.andami.updater.jar@@</cp>
+  </classPath>
+  <jre>
+    <path>%EXEDIR%\gvSIG\extensiones\jre_7_windows_i586\jre</path>
+    <minVersion>1.6.0</minVersion>
+    <maxVersion></maxVersion>
+    <jdkPreference>preferJdk</jdkPreference>
+    <initialHeapSize>128</initialHeapSize>
+    <maxHeapSize>512</maxHeapSize>
+    <opt>-XX:MaxPermSize=96M</opt>
+  </jre>
+  <versionInfo>
+    <fileVersion>@@version@@</fileVersion>
+    <txtFileVersion>@@version@@</txtFileVersion>
+    <fileDescription>gvSIG package installer 2.0.0</fileDescription>
+    <copyright>gvSIG Association</copyright>
+    <productVersion>@@version@@</productVersion>
+    <txtProductVersion>@@version@@</txtProductVersion>
+    <productName>gvSIG package installer</productName>
+    <companyName>(c) 2009-2012 gvSIG Association</companyName>
+    <internalName>gvsig-package-installer</internalName>
+    <originalFilename>gvsig-package-installer.exe</originalFilename>
+  </versionInfo>
+</launch4jConfig>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-package-installer.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop.xml	(revision 42196)
@@ -0,0 +1,74 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<launch4jConfig>
+<!--
+- gvsig.product.folder.path
+- org.gvsig.andami.updater.jar, ej: "org.gvsig.andami.updater-2.0.10-SNAPSHOT.jar"
+- version, ej: 2.0.0-2066
+-->
+  <dontWrapJar>false</dontWrapJar>
+  <headerType>gui</headerType>
+  <jar>@@gvsig.product.folder.path@@/lib/@@org.gvsig.andami.updater.jar@@</jar>
+  <outfile>@@gvsig.product.folder.path@@/gvsig-desktop.exe</outfile>
+  <errTitle>gvSIG launch error</errTitle>
+  <cmdLine>gvSIG gvSIG/extensiones</cmdLine>
+  <chdir>.</chdir>
+  <priority>normal</priority>
+  <downloadUrl>http://java.com/download</downloadUrl>
+  <supportUrl>https://devel.gvsig.org/redmine/projects/gvsig-desktop</supportUrl>
+  <customProcName>false</customProcName>
+  <stayAlive>false</stayAlive>
+  <manifest></manifest>
+  <icon>@@gvsig.product.folder.path@@/gvSIG.ico</icon>
+  <var>PROJ_LIB=%HOMEDRIVE%%HOMEPATH%/gvSIG/plugins/org.gvsig.projection.app.jcrs/projlib</var>
+  <var>GDAL_DATA=%EXEDIR%/data/gdal</var>
+  <classPath>
+    <mainClass>org.gvsig.andamiupdater.Updater</mainClass>
+    <cp>%EXEDIR%/lib/jwizardcomponent-0i18n-1.2.2.1.jar</cp>
+    <cp>%EXEDIR%/lib/@@org.gvsig.andami.updater.jar@@</cp>
+  </classPath>
+  <jre>
+    <path>%EXEDIR%\gvSIG\extensiones\jre_7_windows_i586\jre</path>
+    <minVersion>1.6.0</minVersion>
+    <maxVersion></maxVersion>
+    <jdkPreference>preferJdk</jdkPreference>
+    <initialHeapSize>512</initialHeapSize>
+    <maxHeapSize>1024</maxHeapSize>
+    <opt>-XX:MaxPermSize=96M</opt>
+  </jre>
+  <versionInfo>
+    <fileVersion>@@version@@</fileVersion>
+    <txtFileVersion>@@version@@</txtFileVersion>
+    <fileDescription>gvSIG desktop</fileDescription>
+    <copyright>(c) 2009-2014 gvSIG Association</copyright>
+    <productVersion>@@version@@</productVersion>
+    <txtProductVersion>@@version@@</txtProductVersion>
+    <productName>gvSIG desktop</productName>
+    <companyName>gvSIG Association</companyName>
+    <internalName>gvsig-desktop</internalName>
+    <originalFilename>gvsig-desktop.exe</originalFilename>
+  </versionInfo>
+</launch4jConfig>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/src/main/launch4j/gvsig-desktop.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/pom.xml	(revision 42196)
@@ -0,0 +1,412 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0          http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.gvsig</groupId>
+	<artifactId>org.gvsig.desktop.installer</artifactId>
+	<version>1.0.0</version>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+  <build>
+  
+     <pluginManagement>
+        <plugins>
+        
+          <plugin>
+            <groupId>org.codehaus.gmaven</groupId>
+            <artifactId>gmaven-plugin</artifactId>
+            <version>1.4</version>
+          </plugin>
+          
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>properties-maven-plugin</artifactId>
+            <version>1.0-alpha-2</version>
+          </plugin>
+                            
+        </plugins>
+     </pluginManagement>
+  
+      <plugins>
+          <plugin>
+              <groupId>org.codehaus.mojo</groupId>
+              <artifactId>properties-maven-plugin</artifactId>
+              <executions>
+                  <execution>
+                      <phase>install</phase>
+                      <goals>
+                          <goal>read-project-properties</goal>
+                      </goals>
+                      <configuration>
+                          <files>
+		                        <!-- Define gvsig.product.folder.path in this property -->
+		                        <file>${env.HOME}/.gvsig-devel.properties</file>
+		                        <file>${project.basedir}/gvsig-devel.properties</file>
+                          </files>
+                          <quiet>true</quiet>
+                      </configuration>
+                  </execution>
+              </executions>
+          </plugin>
+          
+          <plugin>
+              <groupId>org.codehaus.gmaven</groupId>
+              <artifactId>gmaven-plugin</artifactId>
+            <dependencies>
+                <dependency>
+                  <groupId>com.github.lookfirst</groupId>
+                  <artifactId>sardine</artifactId>
+                  <version>5.0.1</version>
+                </dependency>
+            </dependencies>
+            <inherited>false</inherited>
+              <executions>
+                <execution>
+                  <id>release</id>
+                  <phase>install</phase>
+                  <goals>
+                    <goal>execute</goal>
+                  </goals>
+                  <configuration>
+                    <source><![CDATA[
+// To deploy package use:
+//    mvn -Ddeploy-installers -Dusername=USER -Dpassword=PASSWORD install
+//      
+                  
+public class WebDAVClient {
+
+    def log;
+
+    private String user;
+    private String password;
+    private Object sardine;
+	    
+    public WebDAVClient(log) {
+    	this.log = log;
+    }
+    
+    public void login(String user, String password) {
+        log.info("[WEBDAV] login as '"+user+"'.");
+        def SardineFactory
+        try {
+            SardineFactory = "com.github.sardine.SardineFactory" as Class
+        } catch (Exception ex) {
+            log.error("[WEBDAV] can't get SardineFactory.",ex);
+        }
+        this.user = user;
+        this.password = password;
+        this.sardine = SardineFactory.begin(this.user,this.password);
+        this.sardine.enablePreemptiveAuthentication("devel.gvsig.net");
+        this.sardine.enablePreemptiveAuthentication("downloads.gvsig.net");
+        this.sardine.enablePreemptiveAuthentication("devel.gvsig.org");
+        this.sardine.enablePreemptiveAuthentication("downloads.gvsig.org");
+    }
+	
+    public void login() {
+        log.info("[WEBDAV] login as guest");
+        this.sardine = SardineFactory.begin();
+    }
+	
+    public boolean exists(String url) throws Exception {
+        return sardine.exists(url);
+    }
+	
+    public void makedirs(String url) throws Exception {
+        log.info("[WEBDAV] makedirs '"+url+"'.");
+        URL u = new URL(url);
+        String[] x = u.getPath().split("/");
+        String path = "";
+        for( int i=1; i<x.length; i++ ) { 
+          path = path + "/" + x[i]; 
+          URL t = new URL(u,path); 
+          mkdir(t.toString()); 
+        } 
+    } 
+      
+    public void mkdir(String url) throws Exception {
+        if( ! exists(url) ) {
+            log.info("[WEBDAV] mkdir '"+url+"'.");
+            sardine.createDirectory(url);
+        }
+    }
+	
+    public void put(String source, String target) throws Exception {
+        log.info("[WEBDAV] put '" + source + "' to '" + target + "'...");
+        InputStream fis = new FileInputStream(new File(source));
+        sardine.put(target, fis);
+        log.info("[WEBDAV] put ok.");
+    }
+	
+    public List list(String url) throws Exception {
+        List resources = sardine.list(url);
+        return resources;
+    }
+}
+
+def getProjectBasePath() {
+    s = project.basedir.getAbsolutePath()
+    return s                        
+}
+
+def getProjectBaseFile() {
+    f = project.basedir
+    return f
+}
+
+def getProjectTargetPath() {
+    s = project.basedir.getAbsolutePath() +"/target"
+    return s                        
+}
+                        
+def getVersionWithBuildNumber(pakageinfo) {
+    return pakageinfo.getProperty("version")+"-"+pakageinfo.getProperty("buildNumber")
+}
+
+def getVersionWithoutBuildNumber(pakageinfo) {
+    return pakageinfo.getProperty("version") // .replaceFirst("-[0-9]*\$","")
+}
+
+def createLauncher(source,target) {
+    log.info("Creating launcher ("+source+")...")
+    source = getProjectBasePath() + source
+    target = getProjectBasePath() + target
+    s = new File(source).text
+    s = s.replaceAll("@@gvsig.product.folder.path@@", gvsig_product_folder_path)
+    s = s.replaceAll("@@org.gvsig.andami.updater.jar@@", org_gvsig_andami_updater_jar)
+    s = s.replaceAll("@@version@@", getVersionWithBuildNumber(pakageinfo).replace("-","."))
+    new File(target).write(s)
+    log.info("Created "+target)
+    ant.exec( command:"launch4jc "+ target )
+    log.info("Created launcher ("+target+").")
+}
+
+def deployInstallers() {
+        if( project.properties["username"] == null ) {
+            print("Enter user name: ");
+            user = System.console().readLine().toString()
+            if( user != "" ) {
+                project.properties.setProperty("username",user);
+            }
+        }
+        if( project.properties["password"] == null ) {				
+            print("Enter password for user '" + project.properties["username"] + "': ");
+            password = System.console().readPassword().toString()  
+            if( password != "" ) {
+                project.properties.setProperty("password",password);
+            }
+        }
+        WebDAVClient session = new WebDAVClient(log);
+        if( project.properties["username"] == null || project.properties["password"] == null ) {				
+            log.info("[WEBDAV] creating non authenticated session.");
+            log.info("[WEBDAV] Use -Dusername=USER -Dpassword=PASSWORD to create a authenticated session.");
+            session.login();
+        } else {
+            session.login(project.properties["username"], project.properties["password"]);
+        }
+        // addonsRepo = "https://devel.gvsig.org/download/gvsig-desktop-testing"
+        addonsRepo = "https://downloads.gvsig.org/download/gvsig-desktop-testing"
+        // addonsRepo = "https://downloads.gvsig.org/download/gvsig-desktop"
+        targetfolder = addonsRepo + 
+            "/dists/" + 
+            getVersionWithoutBuildNumber(pakageinfo) + 
+            "/builds/" + 
+            pakageinfo.getProperty("buildNumber")
+        sourcefolder  = getProjectTargetPath()
+                        
+        session.makedirs(targetfolder);
+                        
+        base_fname = "gvSIG-desktop-" + 
+          getVersionWithBuildNumber(pakageinfo) + 
+          "-" + 
+          pakageinfo.getProperty("state")
+        
+        fname = base_fname + "-all-x86-online.zip"                        
+        session.put(sourcefolder + "/" + fname, targetfolder + "/" + fname);
+
+        fname = base_fname + "-lin-x86-online.run" 
+        session.put(sourcefolder + "/" + fname, targetfolder + "/" + fname);
+
+        fname = base_fname + "-win-x86-online.exe" 
+        session.put(sourcefolder + "/" + fname, targetfolder + "/" + fname);
+
+        session.makedirs(targetfolder+"/misc");
+        fname = base_fname + "-all-all-pool.zip" 
+        session.put(sourcefolder + "/" + fname, targetfolder+"/misc/" + fname);
+                        
+        session.makedirs(targetfolder+"/misc");
+        fname = base_fname + "-all-all.gvspks" 
+        session.put(sourcefolder + "/" + fname, targetfolder+"/misc/" + fname);
+}
+
+def download_jre() {
+    jre_pkg_name = "gvSIG-desktop-2.1.0-jre_7_windows_i586-1.7.72-0-devel-win-x86-j1_7.gvspkg"
+    url = "http://downloads.gvsig.org/download/gvsig-desktop/pool/jre_7_windows_i586/" + jre_pkg_name
+    target = getProjectTargetPath() + "/" + jre_pkg_name
+    jre_path = System.getenv()["jre_gvspkg_path"]
+    if(! new File(target).exists() ) {
+      if( jre_path!=null ) {
+        if( jre_path.endsWith(".gvspkg") ) {
+          source = jre_path
+        } else {
+          source = jre_path + "/" + jre_pkg_name
+        }
+        if (source.startsWith("~" + File.separator)) {
+            source = System.getenv().get("HOME") + source.substring(1);
+        }
+        if( ! new File(source).exists() ) {
+          log.info("jre specified in jre_path variable not found - "+source)
+          log.info("Downloading windows jre plugin")
+          ant.get(src: url, dest: target)
+        } else {
+          log.info("Copy windows jre plugin")
+          ant.copy(file:source, todir:getProjectTargetPath() + "/")
+        }      
+      } else {
+        log.info("Downloading windows jre plugin")
+        ant.get(src: url, dest: target)
+      }                       
+    } else {
+      log.info("Skip download of jre, it exist in local filesystem.")
+    }  
+}                      
+
+def checkInstallJammerStatus() {
+    logfile = getProjectTargetPath() + "/installjammer.log"
+    s = new File(logfile).text
+    if( s.contains("build completed with errors") ) {
+        throw new RuntimeException("Can't builds installers, see installjammer.log")
+    }
+}
+
+def main() {            
+    ant = new AntBuilder()
+    log.info("For create windows launchers launch4j is requiered in the PATH. In linux link launch4j to launch4jc.")
+    log.info("For create installer InstallJammer is required in the PATH.")
+
+    log.info("Base path=" + getProjectBasePath())                     
+
+    installation_folder = getProjectTargetPath() + "/product/gvsig-desktop"
+    pool_folder = getProjectTargetPath() + "/pool.d"
+    new File(installation_folder).mkdirs()
+    new File(pool_folder,"pool").mkdirs()
+
+    gvsig_product_folder_path = project.properties["gvsig.product.folder.path"]
+
+
+    log.info("Getting a local copy of product folder...")
+    ant.copy( todir: installation_folder ) {
+      fileset( dir: gvsig_product_folder_path )
+    }
+    gvsig_product_folder_path = installation_folder 
+
+
+    log.info("Populate the pool folder...")
+    ant.move( todir: pool_folder + "/pool" ) {
+    fileset( dir: installation_folder + "/install/" )
+    }
+    new File(installation_folder,"install").mkdirs()
+
+    log.info("Preparing basic package set (gvspks)...")
+    gvspks_folder = new File(getProjectBaseFile(),"target/gvspks")
+    gvspks_folder.mkdirs()                    
+    filenames = new FileNameFinder().getFileNames(pool_folder,"**/*.gvspkg")
+    for( filename in filenames ) {
+      file = new File(filename)
+      ant.copy(file:filename, todir:gvspks_folder.getAbsolutePath())
+    }            
+    ant.copy(file: getProjectBasePath()+"/src/main/config/defaultPackages", todir:gvspks_folder.getAbsolutePath())
+
+    log.info("Finding andami updater jar...")
+    org_gvsig_andami_updater_jar = new FileNameFinder().getFileNames(
+      gvsig_product_folder_path+"/lib",
+      'org.gvsig.andami.updater-*.jar'
+    )[0]
+    if( org_gvsig_andami_updater_jar == null ) {
+      log.error("Can't find andami updater jar")
+      assert false
+    }
+    org_gvsig_andami_updater_jar = new File(org_gvsig_andami_updater_jar).getName()
+    log.info("Found andami updater :"+org_gvsig_andami_updater_jar)
+
+    File file = new File(gvsig_product_folder_path + "/gvSIG/extensiones/org.gvsig.app.mainplugin/package.info")
+    log.info("Loading package.info - " + file.getAbsolutePath())
+    pakageinfo = new Properties()
+    pakageinfo.load(file.newDataInputStream())
+
+    createLauncher("/src/main/launch4j/gvsig-desktop.xml", "/target/product/gvsig-desktop/gvsig-desktop.xml")
+    // createLauncher("/src/main/launch4j/gvsig-desktop-devel.xml", "/target/product/gvsig-desktop/gvsig-desktop-devel.xml")
+    createLauncher("/src/main/launch4j/gvsig-package-installer.xml", "/target/product/gvsig-desktop/gvsig-package-installer.xml")
+    createLauncher("/src/main/launch4j/gvsig-desktop-portable.xml", "/target/product/gvsig-desktop/tools/gvsig-desktop-portable.xml")
+
+    download_jre()
+
+    log.info("Download busybox.exe.")
+    ant.get(src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/busybox.exe", dest: gvsig_product_folder_path+"/tools/busybox.exe")
+
+    source = getProjectTargetPath() + "/" + jre_pkg_name
+    target = gvsig_product_folder_path + "/gvSIG/extensiones/"
+    log.info("Installing plugin windows jre plugin to " + target + "...")
+    ant.unzip(src: source, dest: target)
+    log.info("jre installed.")
+
+    log.info("Building zip installer...")
+    source  = getProjectTargetPath() + "/product"
+    target  = getProjectTargetPath() + 
+      "/gvSIG-desktop-" + 
+      getVersionWithBuildNumber(pakageinfo) + "-" + 
+      pakageinfo.getProperty("state") + "-all-x86-online.zip"
+    ant.zip(destfile: target, basedir: source)
+
+    log.info("Building pool zip...")
+    source  = getProjectTargetPath()+"/pool.d"
+    target  = getProjectTargetPath() + 
+      "/gvSIG-desktop-" + 
+      getVersionWithBuildNumber(pakageinfo) + "-" + 
+      pakageinfo.getProperty("state") + "-all-all-pool.zip"
+    ant.zip(destfile: target, basedir: source)
+
+    log.info("Building basic package-set (gvspks)...")
+    source  = getProjectTargetPath()+"/gvspks"
+    target  = getProjectTargetPath() + 
+      "/gvSIG-desktop-" + 
+      getVersionWithBuildNumber(pakageinfo) + "-" + 
+      pakageinfo.getProperty("state") + "-all-all.gvspks"
+    ant.zip(destfile: target, basedir: source)
+
+
+    cmd = [ "installjammer" , 
+      "--output-dir", getProjectTargetPath(),
+      "-DBaseDir", gvsig_product_folder_path,
+      "-DVersion",        getVersionWithoutBuildNumber(pakageinfo),
+      "-DInstallVersion", getVersionWithoutBuildNumber(pakageinfo),
+      "-DDevelState", pakageinfo.getProperty("state"),
+      "-DBuildVersion", pakageinfo.getProperty("buildNumber"), 
+      "--build-for-release",
+      "--build-dir", getProjectTargetPath() + "/installjammer", 
+      "--build-log-file", getProjectTargetPath() + "/installjammer.log",
+      "--verbose",
+      "--build",
+      getProjectBasePath() + "/src/main/installjammer/gvsig-standard-installer.mpi"
+    ]
+    log.info("Launching InstallJammer - " + cmd.join(" ") )
+    ant.exec( command: cmd.join(" ") )
+
+    checkInstallJammerStatus()
+
+    if( project.properties["deploy-installers"] != null ) {	
+        deployInstallers()
+    }
+}
+
+main()                        
+
+                    ]]></source>
+                  </configuration>
+                </execution>
+              </executions>
+          </plugin>
+      </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer/pom.xml
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.installer
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.labeling.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <description>
+  This plugin provides extended labeling options for vector layers, such as labeling selected features only,
+  label position with regard to the geometry, etc.
+  </description>
+
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.labeling.app</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.app.mainplugin</artifactId>
+          <scope>compile</scope>
+      </dependency>
+  
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.symbology.swing.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.symbology.lib.impl</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.andami</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.dal.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.i18n</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.ui</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.control</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      
+      <dependency>
+         <groupId>org.slf4j</groupId>
+         <artifactId>slf4j-api</artifactId>
+         <scope>compile</scope>
+      </dependency>
+    
+	  <dependency>
+          <groupId>org.gvsig</groupId>
+		  <artifactId>org.gvsig.tools.evaluator.sqljep</artifactId>
+          <scope>compile</scope>
+	  </dependency>
+	  
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+      
+		<dependency>
+			<groupId>org.gvsig</groupId>
+			<artifactId>org.gvsig.projection.api</artifactId>
+			<scope>compile</scope>
+		</dependency>
+    <!-- Runtime dependencies -->
+
+
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.name>Labeling: advanced options</gvsig.package.info.name>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Vector,Labeling</gvsig.package.info.categories>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+	  <gvsig.package.info.poolURL>http://devel.gvsig.org/download/projects/gvsig-labeling/pool</gvsig.package.info.poolURL>
+  </properties>  
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:59 CEST 2015
+buildNumber=72
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.exportto">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,64 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!-- 
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+  
+-->
+
+</assembly>
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/ExtendedLabelingExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/ExtendedLabelingExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/ExtendedLabelingExtension.java	(revision 42196)
@@ -0,0 +1,135 @@
+package org.gvsig.labeling;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.gui.styling.StyleEditor;
+import org.gvsig.app.project.documents.view.legend.gui.LabelingManager;
+import org.gvsig.fmap.IconThemeHelper;
+import org.gvsig.labeling.gui.layerproperties.DefaultLabeling;
+import org.gvsig.labeling.gui.layerproperties.FeatureDependent;
+import org.gvsig.labeling.gui.layerproperties.GeneralLabeling;
+import org.gvsig.labeling.gui.layerproperties.LabelClassPropertiesFactory;
+import org.gvsig.labeling.gui.layerproperties.OnSelection;
+import org.gvsig.labeling.gui.styling.editortools.LabelStyleNewTextFieldTool;
+import org.gvsig.labeling.gui.styling.editortools.LabelStyleOpenBackgroundFile;
+import org.gvsig.labeling.gui.styling.editortools.LabelStylePanTool;
+import org.gvsig.labeling.gui.styling.editortools.LabelStyleRemoveLastTextField;
+import org.gvsig.labeling.gui.styling.editortools.PointLabelForbiddenPrecedenceTool;
+import org.gvsig.labeling.gui.styling.editortools.PointLabelHighPrecedenceTool;
+import org.gvsig.labeling.gui.styling.editortools.PointLabelLowPrecedenceTool;
+import org.gvsig.labeling.gui.styling.editortools.PointLabelNormalPrecedenceTool;
+import org.gvsig.labeling.label.FeatureDependentLabeled;
+import org.gvsig.labeling.label.GeneralLabelingStrategy;
+import org.gvsig.labeling.label.OnSelectionLabeled;
+import org.gvsig.labeling.label.SmartTextSymbolLabelClass;
+import org.gvsig.labeling.placements.AbstractPlacementConstraints;
+import org.gvsig.labeling.placements.LinePlacementAtBest;
+import org.gvsig.labeling.placements.LinePlacementAtExtremities;
+import org.gvsig.labeling.placements.LinePlacementConstraints;
+import org.gvsig.labeling.placements.LinePlacementInTheMiddle;
+import org.gvsig.labeling.placements.MarkerPlacementAroundPoint;
+import org.gvsig.labeling.placements.MarkerPlacementOnPoint;
+import org.gvsig.labeling.placements.MultiShapePlacementConstraints;
+import org.gvsig.labeling.placements.PlacementManager;
+import org.gvsig.labeling.placements.PointLabelPositioner;
+import org.gvsig.labeling.placements.PointPlacementConstraints;
+import org.gvsig.labeling.placements.PolygonPlacementConstraints;
+import org.gvsig.labeling.placements.PolygonPlacementInside;
+import org.gvsig.labeling.placements.PolygonPlacementOnCentroid;
+import org.gvsig.labeling.placements.PolygonPlacementParallel;
+import org.gvsig.labeling.symbol.CharacterMarkerSymbol;
+import org.gvsig.labeling.symbol.SmartTextSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelingFactory;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+
+
+public class ExtendedLabelingExtension extends Extension {
+
+	public void execute(String actionCommand) {
+
+	}
+
+	public void initialize() {
+		
+		registerPersistence();
+		registerIcons();
+
+		// Editor tools
+		StyleEditor.addEditorTool(LabelStylePanTool.class);
+		StyleEditor.addEditorTool(LabelStyleNewTextFieldTool.class);
+		StyleEditor.addEditorTool(LabelStyleRemoveLastTextField.class);
+		StyleEditor.addEditorTool(LabelStyleOpenBackgroundFile.class);
+		StyleEditor.addEditorTool(PointLabelHighPrecedenceTool.class);
+		StyleEditor.addEditorTool(PointLabelNormalPrecedenceTool.class);
+		StyleEditor.addEditorTool(PointLabelLowPrecedenceTool.class);
+		StyleEditor.addEditorTool(PointLabelForbiddenPrecedenceTool.class);
+
+		LabelingManager.addLabelingStrategy(GeneralLabeling.class);
+
+		// labeling methods in the labeling page
+		//						(inverse order to the wanted to be shown)
+		GeneralLabeling.addLabelingMethod(OnSelection.class);
+		GeneralLabeling.addLabelingMethod(FeatureDependent.class);
+		GeneralLabeling.addLabelingMethod(DefaultLabeling.class);
+
+		PlacementManager.addLabelPlacement(LinePlacementAtExtremities.class);
+		PlacementManager.addLabelPlacement(LinePlacementAtBest.class);
+		PlacementManager.addLabelPlacement(LinePlacementInTheMiddle.class);
+		PlacementManager.addLabelPlacement(MarkerPlacementOnPoint.class);
+		// PlacementManager.addLabelPlacement(MarkerCenteredAtPoint.class);
+		PlacementManager.addLabelPlacement(MarkerPlacementAroundPoint.class);
+		PlacementManager.addLabelPlacement(PolygonPlacementOnCentroid.class);
+		PlacementManager.addLabelPlacement(PolygonPlacementInside.class);
+		PlacementManager.addLabelPlacement(PolygonPlacementParallel.class);
+
+            // LabelingFactory.setDefaultLabelingStrategy(GeneralLabelingStrategy.class);
+            SymbologySwingManager manager = SymbologySwingLocator.getSwingManager();
+            manager.registerLabelClassEditor(new LabelClassPropertiesFactory());
+	}
+
+	private void registerIcons() {
+		
+		IconThemeHelper.registerIcon("action", "edit-add-text", this);
+		IconThemeHelper.registerIcon("action", "edit-remove-text", this);
+		IconThemeHelper.registerIcon("action", "set-forbidden-precedence", this);
+		IconThemeHelper.registerIcon("action", "set-high-precedence", this);
+		IconThemeHelper.registerIcon("action", "set-low-precedence", this);
+		IconThemeHelper.registerIcon("action", "set-normal-precedence", this);
+		
+		IconThemeHelper.registerIcon("action", "edit-shift-component", this);
+		IconThemeHelper.registerIcon("action", "edit-add-background-image", this);
+	}
+
+	private void registerPersistence() {
+		
+		AbstractPlacementConstraints.registerPersistent();
+		PointPlacementConstraints.registerPersistent();
+		LinePlacementConstraints.registerPersistent();
+		PolygonPlacementConstraints.registerPersistent();
+		MultiShapePlacementConstraints.registerPersistent();
+		
+		CharacterMarkerSymbol.registerPersistent();
+		SmartTextSymbol.registerPersistent();
+		SmartTextSymbolLabelClass.registerPersistent();
+
+		PointLabelPositioner.registerPersistent();
+		
+		GeneralLabelingStrategy.registerPersistent();
+		
+		OnSelectionLabeled.registerPersistent();
+		FeatureDependentLabeled.registerPersistent();
+	}
+
+	public boolean isEnabled() {
+		return false;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+
+
+
+}
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementAtBest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementAtBest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementAtBest.java	(revision 42196)
@@ -0,0 +1,123 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * LinePlacementAtBest.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public class LinePlacementAtBest extends CompoundLabelPlacement {
+	
+	private static Logger logger = LoggerFactory.getLogger(LinePlacementAtBest.class);
+	static private ILabelPlacement[] pl = new ILabelPlacement[] {
+		new LinePlacementInTheMiddle(),
+		new LinePlacementAtExtremities()
+	};
+
+	public LinePlacementAtBest() {
+		super(pl);
+		// a patch just to keep in mind the end of the lines
+	}
+
+
+	public ArrayList<LabelLocationMetrics> guess(ILabelClass lc,
+			Geometry geom, IPlacementConstraints constraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) {
+		
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		ArrayList<LabelLocationMetrics> llc = super.guess(lc, geom, constraints, cartographicSymbolSize, cancel,vp);
+		if (constraints instanceof AbstractPlacementConstraints) {
+			AbstractPlacementConstraints clone;
+			try {
+				clone = (AbstractPlacementConstraints) ((AbstractPlacementConstraints) constraints).clone();
+				clone.setLocationAlongTheLine(IPlacementConstraints.AT_THE_END_OF_THE_LINE);
+				llc.addAll(pl[1].guess(lc, geom, clone, cartographicSymbolSize, cancel,vp));
+			} catch (CloneNotSupportedException e) {
+				// this should never happen but
+				// anyway a warning does not hurt anyone
+				logger.info("Couldn't clone "+constraints.getClass().getName(), e);
+			}
+
+		}
+		return llc;
+	}
+	public boolean isSuitableFor(
+			IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		GeometryType gt = null;
+		
+		try {
+			gt = GeometryLocator.getGeometryManager().getGeometryType(
+					shapeType, Geometry.SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While getting aux geo type.", e);
+		}
+		
+		if (gt.isTypeOf(TYPES.CURVE)
+				|| shapeType == TYPES.MULTICURVE) {
+			return placementConstraints != null && placementConstraints.isAtBestOfLine();
+		} else {
+			return false;
+		}
+	}
+
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/AbstractPlacementConstraints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/AbstractPlacementConstraints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/AbstractPlacementConstraints.java	(revision 42196)
@@ -0,0 +1,247 @@
+package org.gvsig.labeling.placements;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+/**
+ * @author  jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public abstract class AbstractPlacementConstraints implements
+Cloneable, IPlacementConstraints {
+	
+	public static final String PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME =
+			"PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME";
+	
+	// CAUTION, THIS IS A CLONEABLE OBJECT, DON'T FORGET TO 
+	// UPDATE clone() METHOD WHEN ADDING FIELDS
+	private int duplicateLabelsMode = ONE_LABEL_PER_FEATURE_PART; // default duplicate treatment
+	private int placementMode;
+	private boolean belowTheLine;
+	private boolean aboveTheLine;
+	private boolean onTheLine;
+	private boolean pageOriented;
+	private int locationAlongLine;
+	private boolean fitInsidePolygon;
+	// CAUTION, THIS IS A CLONEABLE OBJECT, DON'T FORGET TO 
+	// UPDATE clone() METHOD WHEN ADDING FIELDS
+	
+	
+	
+	public void setDuplicateLabelsMode(int mode) {
+		if (mode != REMOVE_DUPLICATE_LABELS &&
+			mode != ONE_LABEL_PER_FEATURE &&
+			mode != ONE_LABEL_PER_FEATURE_PART)
+			throw new IllegalArgumentException(
+					"Only REMOVE_DUPLICATE_LABELS, " +
+					"ONE_LABEL_PER_FEATURE " +
+					"or ONE_LABEL_PER_FEATURE_PARTS allowed");
+		this.duplicateLabelsMode = mode;
+	}
+
+	public void setPlacementMode(int mode) {
+		if (this instanceof PointPlacementConstraints) {
+			if (mode != OFFSET_HORIZONTALY_AROUND_THE_POINT &&
+				mode != ON_TOP_OF_THE_POINT &&
+				mode != AT_SPECIFIED_ANGLE &&
+				mode != AT_ANGLE_SPECIFIED_BY_A_FIELD)
+				throw new IllegalArgumentException(
+						"Only OFFSET_HORIZONTALY_AROUND_THE_POINT, " +
+						"ON_TOP_OF_THE_POINT, " +
+						"AT_SPECIFIED_ANGLE " +
+						"or AT_ANGLE_SPECIFIED_BY_A_FIELD allowed for points: "+ mode);
+		}
+
+		if (this instanceof PolygonPlacementConstraints) {
+			if (mode != HORIZONTAL &&
+				mode != PARALLEL )
+					throw new IllegalArgumentException(
+							"Only HORIZONTAL, " +
+							"or PARALLEL allowed for polygons: "+ mode);
+		}
+
+		if (this instanceof LinePlacementConstraints) {
+					if (mode != HORIZONTAL &&
+				mode != PARALLEL &&
+				mode != FOLLOWING_LINE &&
+				mode != PERPENDICULAR)
+				throw new IllegalArgumentException(
+						"Only HORIZONTAL, PARALLEL," +
+						"FOLLOWING_LINE, or PERPENDICULAR allowed for lines: "+ mode);
+		}
+		this.placementMode = mode;
+	}
+
+	public boolean isHorizontal() {
+		return placementMode == HORIZONTAL;
+	}
+
+	public boolean isPerpendicular() {
+		return placementMode  == PERPENDICULAR;
+	}
+
+	public boolean isFollowingLine() {
+		return placementMode  == FOLLOWING_LINE;
+	}
+
+	public boolean isParallel() {
+		return placementMode == PARALLEL;
+	}
+
+	public int getDuplicateLabelsMode() {
+		return duplicateLabelsMode;
+	}
+
+	/**
+	 * Tells if the place mode selected is to put the label over the <b>POINT</b>
+	 * @return boolean
+	 */
+	public boolean isOnTopOfThePoint() {
+		return placementMode == ON_TOP_OF_THE_POINT;
+	}
+
+	public boolean isBelowTheLine() {
+		return belowTheLine;
+	}
+
+	public boolean isAboveTheLine() {
+		return aboveTheLine;
+	}
+
+	public boolean isOnTheLine() {
+		return onTheLine;
+	}
+
+	public boolean isPageOriented() {
+		return pageOriented;
+	}
+
+	public void setOnTheLine(boolean b) {
+		this.onTheLine = b;
+	}
+
+	public void setPageOriented(boolean b) {
+		this.pageOriented = b;
+	}
+
+	public void setBelowTheLine(boolean b) {
+		this.belowTheLine = b;
+	}
+
+	public void setAboveTheLine(boolean b) {
+		this.aboveTheLine = b;
+	}
+
+	public boolean isAtTheEndOfLine() {
+		return locationAlongLine == AT_THE_END_OF_THE_LINE;
+	}
+
+	public boolean isAtTheBeginingOfLine() {
+		return locationAlongLine == AT_THE_BEGINING_OF_THE_LINE;
+	}
+
+	public boolean isInTheMiddleOfLine() {
+		return locationAlongLine == AT_THE_MIDDLE_OF_THE_LINE;
+	}
+	
+	public boolean isAtBestOfLine() {
+		return locationAlongLine == AT_BEST_OF_LINE;
+	}
+
+	public boolean isAroundThePoint() {
+		return placementMode == OFFSET_HORIZONTALY_AROUND_THE_POINT;
+	}
+
+	public boolean isFitInsidePolygon() {
+		return fitInsidePolygon;
+	}
+
+	public void setFitInsidePolygon(boolean b) {
+		fitInsidePolygon = b;
+	}
+
+	public void setLocationAlongTheLine(int location) {
+		if (location != IPlacementConstraints.AT_THE_MIDDLE_OF_THE_LINE
+			&& location != IPlacementConstraints.AT_THE_BEGINING_OF_THE_LINE
+			&& location != IPlacementConstraints.AT_THE_END_OF_THE_LINE
+			&& location != IPlacementConstraints.AT_BEST_OF_LINE) {
+			throw new IllegalArgumentException("Only IPlacementConstraints.AT_THE_MIDDLE_OF_THE_LINE, " +
+					"IPlacementConstraints.AT_THE_BEGINING_OF_THE_LINE, or " +
+					"IPlacementConstraints.AT_THE_END_OF_THE_LINE, or " +
+					"IPlacementConstraints.AT_BEST_OF_LINE values are allowed" );
+		}
+		this.locationAlongLine = location;
+	}
+	
+	
+	
+	public void saveToState(PersistentState state) throws PersistenceException {
+
+		state.set("duplicateLabelsMode", getDuplicateLabelsMode());
+		state.set("placementMode", placementMode);
+		state.set("locationAlongLine", locationAlongLine);
+		
+		state.set("belowTheLine", isBelowTheLine());
+		state.set("aboveTheLine", isAboveTheLine());
+		state.set("onTheLine", isOnTheLine());
+		state.set("pageOriented", isPageOriented());
+		state.set("fitInsidePolygon", isFitInsidePolygon());
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		
+		setDuplicateLabelsMode(state.getInt("duplicateLabelsMode"));
+		setPlacementMode(state.getInt("placementMode"));
+		locationAlongLine = state.getInt("locationAlongLine");
+		
+		setBelowTheLine(state.getBoolean("belowTheLine"));
+		setAboveTheLine(state.getBoolean("aboveTheLine"));
+		setOnTheLine(state.getBoolean("onTheLine"));
+		setPageOriented(state.getBoolean("pageOriented"));
+		setFitInsidePolygon(state.getBoolean("fitInsidePolygon"));
+	}
+
+	public static void registerPersistent() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME) == null ) {
+			DynStruct definition = manager.addDefinition(
+					AbstractPlacementConstraints.class,
+					PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME,
+					PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME +" Persistence definition",
+					null, 
+					null);
+			definition.addDynFieldBoolean("belowTheLine").setMandatory(true);
+			definition.addDynFieldBoolean("aboveTheLine").setMandatory(true);
+			definition.addDynFieldBoolean("onTheLine").setMandatory(true);
+			definition.addDynFieldBoolean("pageOriented").setMandatory(true);
+			definition.addDynFieldBoolean("fitInsidePolygon").setMandatory(true);
+			
+			definition.addDynFieldInt("duplicateLabelsMode").setMandatory(true);
+			definition.addDynFieldInt("placementMode").setMandatory(true);
+			definition.addDynFieldInt("locationAlongLine").setMandatory(true);
+		}		
+	}
+	
+
+	public Object clone() throws CloneNotSupportedException {
+		try {
+			AbstractPlacementConstraints clone = getClass().newInstance();
+			clone.aboveTheLine        = this.aboveTheLine;
+			clone.belowTheLine        = this.belowTheLine;
+			clone.duplicateLabelsMode = this.duplicateLabelsMode;
+			clone.fitInsidePolygon    = this.fitInsidePolygon;
+			clone.locationAlongLine   = this.locationAlongLine;
+			clone.onTheLine           = this.onTheLine;
+			clone.pageOriented        = this.pageOriented;
+			clone.placementMode       = this.placementMode;
+			return clone;
+		} catch (Exception e) {
+			throw new CloneNotSupportedException(e.getMessage());
+		}
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/CannotPlaceLabel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/CannotPlaceLabel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/CannotPlaceLabel.java	(revision 42196)
@@ -0,0 +1,78 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ *
+ * CannotPlaceLabel.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public class CannotPlaceLabel implements ILabelPlacement {
+	public static final ArrayList<LabelLocationMetrics> NO_PLACES = new ArrayList<LabelLocationMetrics>();
+
+	public boolean isSuitableFor(IPlacementConstraints placementConstraints,
+			int shapeType) {
+		return true;
+	}
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc,
+			Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize,
+			Cancellable cancel, ViewPort vp) {
+		return NO_PLACES;
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementInTheMiddle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementInTheMiddle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementInTheMiddle.java	(revision 42196)
@@ -0,0 +1,150 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.geom.Point2D;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * LinePlacementInTheMiddle.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public class LinePlacementInTheMiddle extends AbstractLinePlacement {
+
+	private static Logger logger =
+			LoggerFactory.getLogger(LinePlacementInTheMiddle.class);
+					
+	public boolean isSuitableFor(
+			IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		GeometryType gt = null;
+		
+		try {
+			gt = GeometryLocator.getGeometryManager().getGeometryType(
+					shapeType, Geometry.SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While getting aux geo type.", e);
+		}
+		
+		if (gt.isTypeOf(TYPES.CURVE)
+				|| shapeType == TYPES.MULTICURVE) {
+			
+			return placementConstraints != null &&
+			   placementConstraints.isInTheMiddleOfLine()
+			  /* && !placementConstraints.isFollowingLine()*/;
+		} else {
+			return false;
+		}
+		
+	}
+
+	public LabelLocationMetrics initialLocation(ILabelClass lc,
+			IPlacementConstraints pc, PathLength pathLen, Cancellable cancel) {
+		
+		if (cancel.isCanceled()) return null;
+
+		float length = pathLen.lengthOfPath();
+		float distance = (float) (length * 0.5);
+
+
+		double theta = 0;
+		if (pc.isParallel()) {
+			// get the line theta and apply it
+			theta = pathLen.angleAtLength(distance);
+
+		} else if (pc.isPerpendicular()) {
+			// get the line theta with 90 degrees
+			theta = pathLen.angleAtLength(distance) + AbstractLinePlacement.HALF_PI;
+		}
+
+		Point2D p = pathLen.pointAtLength(distance);
+
+		/*
+		 * Offset the point to a distance of the height of the
+		 * label class's height to make the label appear to
+		 * be on the line.
+		 *
+		 */
+		double x = p.getX();
+		double y = p.getY();
+		double halfHeight = lc.getBounds().getHeight()*.5;
+		double halfWidth = lc.getBounds().getWidth()*.5;
+
+		double sinTheta = Math.sin(theta);
+		double cosTheta = Math.cos(theta);
+
+		double xOffset = halfHeight * sinTheta;
+		double yOffset = halfHeight * cosTheta;
+
+		/*
+		 * now, offset the anchor point as much as need to
+		 * make the center of the label be the middle of the
+		 * line
+		 */
+		xOffset -= halfWidth * cosTheta;
+		yOffset += halfWidth * sinTheta;
+
+		p.setLocation(x + xOffset, y - yOffset);
+
+		return new LabelLocationMetrics(
+				p,
+				theta,
+				true);
+	}
+
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementAtExtremities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementAtExtremities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementAtExtremities.java	(revision 42196)
@@ -0,0 +1,148 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.geom.Point2D;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * LinePlacementAtExtremities.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public class LinePlacementAtExtremities extends AbstractLinePlacement {
+
+	private static Logger logger =
+			LoggerFactory.getLogger(LinePlacementAtExtremities.class);
+			
+	public LabelLocationMetrics initialLocation(
+			ILabelClass lc,
+			IPlacementConstraints pc, PathLength pathLen,
+			Cancellable cancel) {
+		
+		if (cancel.isCanceled()) return null;
+
+		float distance = 0;
+		if (pc.isAtTheEndOfLine()) {
+			distance = (float) (pathLen.lengthOfPath()) ;
+		}
+
+		Point2D p = pathLen.pointAtLength(distance);
+
+		double theta = 0;
+		if (pc.isParallel()) {
+			// get the line theta and apply it
+			theta = pathLen.angleAtLength(distance);
+
+		} else if (pc.isPerpendicular()) {
+			// get the line theta with 90 degrees
+			theta = pathLen.angleAtLength(distance) + AbstractLinePlacement.HALF_PI;
+		}
+
+		/*
+		 * Offset the point to a distance of the height of the
+		 * label class's height to make the label appear to
+		 * be on the line.
+		 *
+		 */
+		double x = p.getX();
+		double y = p.getY();
+		double halfHeight = lc.getBounds().getHeight()*.5;
+
+		double sinTheta = Math.sin(theta);
+		double cosTheta = Math.cos(theta);
+		double xOffset = halfHeight * sinTheta;
+		double yOffset = halfHeight * cosTheta;
+
+		if (pc.isAtTheEndOfLine()) {
+			double width = lc.getBounds().getWidth();
+			xOffset -= width * cosTheta;
+			yOffset += width * sinTheta;
+		}
+
+		p.setLocation(x + xOffset, y - yOffset);
+
+		return new LabelLocationMetrics(
+				p,
+				theta,
+				true);
+	}
+
+	public boolean isSuitableFor(IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		GeometryType gt = null;
+		
+		try {
+			gt = GeometryLocator.getGeometryManager().getGeometryType(
+					shapeType, Geometry.SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While getting aux geo type.", e);
+		}
+		
+		if (gt.isTypeOf(TYPES.CURVE)
+				|| shapeType == TYPES.MULTICURVE) {
+			
+			return placementConstraints != null
+					/* && !placementConstraints.isFollowingLine()*/
+					&& (placementConstraints.isAtTheBeginingOfLine()
+							|| placementConstraints.isAtTheEndOfLine());
+		} else {
+			return false;
+		}
+		
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerCenteredAtPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerCenteredAtPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerCenteredAtPoint.java	(revision 42196)
@@ -0,0 +1,97 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MarkerCenteredAtPoint implements ILabelPlacement {
+
+	private static Logger logger =
+			LoggerFactory.getLogger(MarkerCenteredAtPoint.class);
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc, Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) {
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		Geometry shp = geom.cloneGeometry();
+		shp.transform(vp.getAffineTransform());
+
+		ArrayList<LabelLocationMetrics> guessed =
+				new ArrayList<LabelLocationMetrics>();
+		
+		Point cen = null;
+		try {
+			cen = shp.centroid();
+		} catch (Exception e) {
+			logger.error("While gentting centroid.", e);
+		}
+		Point2D p = new Point2D.Double(cen.getX(), cen.getY());
+
+		Rectangle2D bounds = lc.getBounds();
+		p.setLocation(p.getX() - (bounds.getWidth()*0.5), p.getY() - bounds.getHeight()*0.5);
+		guessed.add(new LabelLocationMetrics(
+				p, 0, true));
+		return guessed;
+	}
+
+	public boolean isSuitableFor(IPlacementConstraints placementConstraints,
+			int shapeType) {
+		return false;
+	}
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MultiShapePlacementConstraints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MultiShapePlacementConstraints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MultiShapePlacementConstraints.java	(revision 42196)
@@ -0,0 +1,169 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * MultiShapePlacementConstraints.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Apr 1, 2008
+ *
+ */
+public class MultiShapePlacementConstraints extends AbstractPlacementConstraints {
+
+	public static final String MULTI_SHAPE_PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME =
+			"MULTI_SHAPE_PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME";
+	
+	private PolygonPlacementConstraints polygonConstraints;
+	private LinePlacementConstraints lineConstraints;
+	private PointPlacementConstraints pointConstraints;
+
+
+	public MultiShapePlacementConstraints() { }
+
+	public MultiShapePlacementConstraints(
+			PointPlacementConstraints pointConstraints,
+			LinePlacementConstraints lineConstraints,
+			PolygonPlacementConstraints polygonConstraints) {
+		this.pointConstraints = pointConstraints;
+		this.lineConstraints = lineConstraints;
+		this.polygonConstraints = polygonConstraints;
+
+	}
+
+	public void setPolygonConstraints(PolygonPlacementConstraints p) {
+		this.polygonConstraints = p;
+	}
+
+	public void setLineConstraints(LinePlacementConstraints l) {
+		this.lineConstraints = l;
+	}
+
+	public void setPointConstraints(PointPlacementConstraints p) {
+		this.pointConstraints = p;
+	}
+
+	public PolygonPlacementConstraints getPolygonConstraints() {
+		return polygonConstraints;
+	}
+
+	public LinePlacementConstraints getLineConstraints() {
+		return lineConstraints;
+	}
+
+	public PointPlacementConstraints getPointConstraints() {
+		return pointConstraints;
+	}
+	
+	// ======================================
+	
+	public void saveToState(PersistentState state) throws PersistenceException {
+		
+		super.saveToState(state);
+		state.set("pointConstraints", this.pointConstraints);
+		state.set("lineConstraints", this.lineConstraints);
+		state.set("polygonConstraints", this.polygonConstraints);
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		
+		super.loadFromState(state);
+		this.pointConstraints = (PointPlacementConstraints)
+				state.get("pointConstraints");
+		this.lineConstraints = (LinePlacementConstraints)
+				state.get("lineConstraints");
+		this.polygonConstraints = (PolygonPlacementConstraints)
+				state.get("polygonConstraints");
+		
+	}
+
+	public static void registerPersistent() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(MULTI_SHAPE_PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME) == null ) {
+			DynStruct definition = manager.addDefinition(
+					MultiShapePlacementConstraints.class,
+					MULTI_SHAPE_PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME,
+					MULTI_SHAPE_PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME +" Persistence definition",
+					null, 
+					null);
+			
+			definition.extend(manager.getDefinition(
+					AbstractPlacementConstraints.PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME));
+			
+			definition.addDynFieldObject("pointConstraints").setClassOfValue(
+					PointPlacementConstraints.class).setMandatory(true);
+			definition.addDynFieldObject("lineConstraints").setClassOfValue(
+					LinePlacementConstraints.class).setMandatory(true);
+			definition.addDynFieldObject("polygonConstraints").setClassOfValue(
+					PolygonPlacementConstraints.class).setMandatory(true);
+		}		
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		
+		
+		PointPlacementConstraints point_co = null;
+		LinePlacementConstraints line_co = null;
+		PolygonPlacementConstraints poly_co = null;
+		
+		try {
+			point_co = (PointPlacementConstraints) pointConstraints.clone();
+			line_co = (LinePlacementConstraints) lineConstraints.clone();
+			poly_co = (PolygonPlacementConstraints) polygonConstraints.clone();
+		} catch (CloneNotSupportedException ce) {
+			throw ce;
+		}
+		
+		MultiShapePlacementConstraints resp =
+				new MultiShapePlacementConstraints(point_co, line_co, poly_co);
+		return resp;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementParallel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementParallel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementParallel.java	(revision 42196)
@@ -0,0 +1,194 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.Rectangle;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PolygonPlacementParallel implements ILabelPlacement{
+
+	private static final Logger logger = LoggerFactory.getLogger(
+			PolygonPlacementParallel.class);
+	
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc, Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) {
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+		
+		double theta = 0;
+		Point start_po = null;
+		
+		try {
+			if(placementConstraints.isFitInsidePolygon()){
+				start_po = geom.getInteriorPoint();
+			} else {
+				start_po = geom.centroid();
+			}
+		} catch (Exception exc) {
+			logger.error("While getting centroid/interior point.", exc);
+		}
+
+		Point2D startingPoint = new Point2D.Double(start_po.getX(), start_po.getY());
+
+		// calculated with the Linear Regression technique
+		PathIterator pi = geom.getPathIterator(null);
+		Rectangle geomBounds = geom.getBounds();
+		double sumx = 0, sumy = 0, sumxx = 0, sumyy = 0, sumxy = 0;
+		double Sxx, Sxy, b, a;
+		double[] coords = new double[6];
+		int count = 0;
+
+		// add points to the regression process
+		Vector<Point2D> v = new Vector<Point2D>();
+		while (!pi.isDone()) {
+			pi.currentSegment(coords);
+			Point2D p;
+			if (geomBounds.width > geomBounds.height)
+				p = new Point2D.Double(coords[0], coords[1]);
+			else
+				p = new Point2D.Double(coords[1], coords[0]);
+			v.addElement(p);
+			count++;
+			sumx += p.getX();
+			sumy += p.getY();
+			sumxx += p.getX()*p.getX();
+			sumyy += p.getY()*p.getY();
+			sumxy += p.getX()*p.getY();
+			pi.next();
+		}
+
+		// start regression
+		double n = (double) count;
+		Sxx = sumxx-sumx*sumx/n;
+		Sxy = sumxy-sumx*sumy/n;
+		b = Sxy/Sxx;
+		a = (sumy-b*sumx)/n;
+
+		boolean isVertical = false;
+		if (geomBounds.width < geomBounds.height) {
+			if (b == 0) {
+				// force vertical (to avoid divide by zero)
+				isVertical = true;
+
+			} else {
+				// swap axes
+				double bAux = 1/b;
+				a = - a / b;
+				b = bAux;
+			}
+		}
+
+		if (isVertical){
+			theta = AbstractLinePlacement.HALF_PI;
+		} else {
+			double p1x = 0;
+			double  p1y =geomBounds.height-a;
+			double  p2x = geomBounds.width;
+			double  p2y = geomBounds.height-
+			(a+geomBounds.width*b);
+
+			theta = -Math.atan(((p2y - p1y) / (p2x - p1x)) );
+		}
+
+		ArrayList<LabelLocationMetrics> guessed = new ArrayList<LabelLocationMetrics>();
+		Rectangle labelBounds = lc.getBounds();
+		double cosTheta = Math.cos(theta);
+		double sinTheta = Math.sin(theta);
+		double halfHeight = labelBounds.getHeight()*0.5;
+		double halfWidth= labelBounds.getWidth()*0.5;
+		double offsetX =  halfHeight * sinTheta + halfWidth*cosTheta;
+		double offsetY = -halfHeight * cosTheta + halfWidth*sinTheta;
+		double offsetRX=vp.toMapDistance((int)offsetX);
+		double offsetRY=vp.toMapDistance((int)offsetY);
+		startingPoint.setLocation(startingPoint.getX() - offsetRX,
+				startingPoint.getY() - offsetRY);
+		
+		Point auxp = null;
+		
+		try {
+			auxp = GeometryLocator.getGeometryManager().createPoint(
+					startingPoint.getX(),startingPoint.getY(), SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While creating point.", e);
+		}
+		
+		auxp.transform(vp.getAffineTransform());
+		guessed.add(new LabelLocationMetrics(
+				new Point2D.Double(auxp.getX(),auxp.getY()), -theta, true));
+		return guessed;
+	}
+	public boolean isSuitableFor(IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		GeometryType gt = null;
+		try {
+			gt = GeometryLocator.getGeometryManager().getGeometryType(
+					shapeType, SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While getting geo type.", e);
+		}
+		
+		if (gt.isTypeOf(TYPES.SURFACE) || shapeType == TYPES.MULTISURFACE) {
+			return placementConstraints.isParallel();
+		}
+		return false;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerPlacementAroundPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerPlacementAroundPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerPlacementAroundPoint.java	(revision 42196)
@@ -0,0 +1,236 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.Rectangle;
+import java.awt.geom.NoninvertibleTransformException;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MarkerPlacementAroundPoint implements ILabelPlacement {
+
+	private static Logger logger =
+			LoggerFactory.getLogger(MarkerPlacementAroundPoint.class);
+	private static final MarkerPlacementOnPoint pos = new MarkerPlacementOnPoint();
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc,
+			Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) {
+		
+	if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+	Geometry shp = geom.cloneGeometry();
+	shp.transform(vp.getAffineTransform());
+
+		if (placementConstraints instanceof PointPlacementConstraints) {
+			PointPlacementConstraints ppc = (PointPlacementConstraints) placementConstraints;
+			PointLabelPositioner plp = ppc.getPositioner();
+
+			if (plp != null) {
+				Point po_screen = null;
+				try {
+				    po_screen = shp.centroid();
+				} catch (Exception exc) {
+					logger.error("While getting centroid.", exc);
+				}
+				
+				int[] preferredPositions = plp.getPreferenceVector();
+				ArrayList<LabelLocationMetrics> highPreference = new ArrayList<LabelLocationMetrics>();
+				ArrayList<LabelLocationMetrics> normalPreference = new ArrayList<LabelLocationMetrics>();
+				ArrayList<LabelLocationMetrics> lowPreference = new ArrayList<LabelLocationMetrics>();
+				Rectangle bounds = lc.getBounds();
+				double width = bounds.getWidth()*.5; // + 2; //�por qu� el +2?
+				double heigth = bounds.getHeight()*.5;
+
+				double offsetX = 0, offsetY = 0;
+				for (int i = 0; i < preferredPositions.length; i++) {
+				    
+				    Point po_aux = (Point) po_screen.cloneGeometry();
+					switch (i) {
+					case 0:
+					case 3:
+					case 5:
+						// left
+						offsetX = -width;
+						break;
+					case 2:
+					case 4:
+					case 7:
+						// rigth
+						offsetX = width;
+						break;
+					case 1:
+					case 6:
+					default:
+						// horizontally centered
+						offsetX = 0;
+						break;
+					}
+					switch (i) {
+					case 0:
+					case 1:
+					case 2:
+						// top
+						offsetY = -heigth;
+						break;
+					case 5:
+					case 6:
+					case 7:
+						// below
+						offsetY = heigth;
+						break;
+					case 3:
+					case 4:
+					default:
+						// vertically centered
+						offsetY = 0;
+						break;
+
+					}
+//					// xOffset
+//					switch (i % 3) {
+//					case 0:
+//						// left
+//						offsetX = -width;
+//						break;
+//					case 2:
+//						// rigth
+//						offsetX = width;
+//						break;
+//					case 1:
+//					default:
+//						// horizontally centered
+//						offsetX = 0;
+//						break;
+//
+//					}
+//
+//					switch (i / 3) {
+//					case 0:
+//						// top
+//						offsetY = -heigth;
+//						break;
+//					case 2:
+//						// below
+//						offsetY = heigth;
+//						break;
+//					case 1:
+//					default:
+//						// vertically centered
+//						offsetY = 0;
+//						break;
+//
+//					}
+					
+					po_aux.setX(po_aux.getX() + offsetX);
+					po_aux.setY(po_aux.getY() + offsetY);
+					try {
+					    /*
+					     * Back to map coordinates
+					     */
+					    po_aux.transform(vp.getAffineTransform().createInverse());
+					} catch (NoninvertibleTransformException e) {
+						logger.error("uninvertible matrix.", e);
+					}
+
+					switch (preferredPositions[i]) {
+					case PointLabelPositioner.FORBIDDEN:
+						break;
+					case PointLabelPositioner.PREFERENCE_HIGH:
+						highPreference.addAll(
+								pos.guess(lc, po_aux, placementConstraints, cartographicSymbolSize, cancel,vp));
+						break;
+					case PointLabelPositioner.PREFERENCE_NORMAL:
+
+						normalPreference.addAll(
+								pos.guess(lc, po_aux, placementConstraints, cartographicSymbolSize, cancel,vp));
+						break;
+					case PointLabelPositioner.PREFERENCE_LOW:
+						lowPreference.addAll(
+								pos.guess(lc, po_aux, placementConstraints, cartographicSymbolSize, cancel,vp));
+						break;
+
+					default:
+						throw new Error("unrecognised label position preference value: "+preferredPositions[i]);
+					}
+				}
+
+				ArrayList<LabelLocationMetrics> guessed = new ArrayList<LabelLocationMetrics>();
+				for (int j = 0; j < highPreference.size(); j++)		guessed.add(highPreference.get(j));
+				for (int j = 0; j < normalPreference.size(); j++)	guessed.add(normalPreference.get(j));
+				for (int j = 0; j < lowPreference.size(); j++)		guessed.add(lowPreference.get(j));
+				return guessed;
+			}
+		}
+
+		return CannotPlaceLabel.NO_PLACES;
+	}
+
+
+
+	public boolean isSuitableFor(IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		if (shapeType == TYPES.POINT
+				|| shapeType == TYPES.MULTIPOINT) {
+			// TODO (09/01/08) is this correct? if not fix it also in PlacementManager, PlacementProperties
+			return placementConstraints.isAroundThePoint();
+		} else {
+			return false;
+		}
+		
+	}
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/RemoveDuplicatesComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/RemoveDuplicatesComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/RemoveDuplicatesComparator.java	(revision 42196)
@@ -0,0 +1,56 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.util.Comparator;
+
+public class RemoveDuplicatesComparator implements Comparator<String[]> {
+
+	public int compare(String[] o1, String[] o2) {
+		if (o1 == null || o2 == null || o1.length != o2.length) return 0;
+		for (int i = 0; i < o2.length; i++) {
+			int c = o1[i].compareTo(o2[i]);
+			if (c != 0) return c;
+		}
+		return 0;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PlacementManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PlacementManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PlacementManager.java	(revision 42196)
@@ -0,0 +1,187 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.tools.exception.DriverException;
+import org.gvsig.tools.locator.LocatorException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * PlacementManager.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Jan 3, 2008
+ *
+ */
+public class PlacementManager {
+	
+	private static Logger logger = LoggerFactory.getLogger(PlacementManager.class);
+	
+	private static ArrayList<Class<?>> installedLabelPlacements = new ArrayList<Class<?>>();
+	private static ArrayList<ILabelPlacement> availableLabelPlacements;
+	private static final CannotPlaceLabel cantPlaceLabel = new CannotPlaceLabel();
+	private PlacementManager() {}
+
+	public static ILabelPlacement getPlacement(
+			IPlacementConstraints placementConstraints, int shapeType) {
+
+		ArrayList<ILabelPlacement> suitablePlacements = new ArrayList<ILabelPlacement>();
+		if (placementConstraints.getClass().equals(MultiShapePlacementConstraints.class)) {
+			MultiShapePlacementConstraints msp = (MultiShapePlacementConstraints) placementConstraints;
+
+			return new MultiShapePlacement(
+					getPlacement(msp.getPointConstraints(),   Geometry.TYPES.POINT),
+					getPlacement(msp.getLineConstraints(),    Geometry.TYPES.CURVE),
+					getPlacement(msp.getPolygonConstraints(), Geometry.TYPES.SURFACE)
+					);
+		} else {
+			for (Iterator<ILabelPlacement> iterator = getAvailablePlacements().iterator(); iterator.hasNext();) {
+				ILabelPlacement placement = iterator.next();
+				if (placement.isSuitableFor(placementConstraints, shapeType)) {
+					suitablePlacements.add(placement);
+				}
+			}
+
+			if (suitablePlacements.size() == 0)
+				return cantPlaceLabel;
+			else if (suitablePlacements.size() == 1)
+				return suitablePlacements.get(0);
+			else
+				return new CompoundLabelPlacement(
+						(ILabelPlacement[]) suitablePlacements.
+						toArray(new ILabelPlacement[suitablePlacements.size()]));
+
+		}
+
+	}
+
+	public static void addLabelPlacement(Class<?> labelPlacementClass) {
+//		if (!labelPlacementClass.isInstance(ILabelPlacement.class))
+//		throw new IllegalArgumentException(
+//			labelPlacementClass.getName()+" is not an valid label placement algorithm.");
+		installedLabelPlacements.add(labelPlacementClass);
+
+		// invalidate current list of available placements
+		if (availableLabelPlacements != null)
+			availableLabelPlacements.clear();
+		availableLabelPlacements = null;
+	}
+
+	private static ArrayList<ILabelPlacement> getAvailablePlacements() {
+		if (availableLabelPlacements == null) {
+			availableLabelPlacements = new ArrayList<ILabelPlacement>(installedLabelPlacements.size());
+			for (Iterator<Class<?>> iterator = installedLabelPlacements.iterator(); iterator.hasNext();) {
+				Class<?> clazz = null;
+				try {
+					clazz = iterator.next();
+					availableLabelPlacements.add((ILabelPlacement) clazz.newInstance());
+				} catch (Exception e) {
+					logger.error("Couldn't install label placement: "+clazz.getName(), e);
+				}
+			}
+		}
+
+		return availableLabelPlacements;
+	}
+
+
+	/**
+	 * Creates a new instance of placement constraints from a vector layer. The
+	 * placement constraints are created according the layer shape type.
+	 * @param layerDest
+	 * @return
+	 * @throws LocatorException 
+	 * @throws GeometryTypeNotValidException 
+	 * @throws GeometryTypeNotSupportedException 
+	 * @throws DriverException
+	 */
+	public static IPlacementConstraints createPlacementConstraints(int geotype)
+			throws Exception {
+		
+		GeometryType geom_gt = GeometryLocator.getGeometryManager().getGeometryType(
+				geotype, Geometry.SUBTYPES.GEOM2D);
+
+		if (geom_gt.getType() == TYPES.POINT ||
+				geom_gt.getType() == TYPES.MULTIPOINT) {
+			return new PointPlacementConstraints();
+		} else {
+			if (geom_gt.isTypeOf(TYPES.CURVE) ||
+					geom_gt.getType() == TYPES.MULTICURVE) {
+				return new LinePlacementConstraints();
+			} else {
+				if (geom_gt.isTypeOf(TYPES.SURFACE) ||
+						geom_gt.getType() == TYPES.MULTISURFACE) {
+					return new PolygonPlacementConstraints();
+				} else {
+					if (geom_gt.getType() == TYPES.GEOMETRY ||
+					geom_gt.getType() == TYPES.AGGREGATE) {
+
+						return new MultiShapePlacementConstraints(
+								(PointPlacementConstraints)
+								createPlacementConstraints(TYPES.POINT),
+								(LinePlacementConstraints)
+								createPlacementConstraints(TYPES.CURVE),
+								(PolygonPlacementConstraints)
+								createPlacementConstraints(TYPES.SURFACE));
+					}
+				}
+			}
+		}		
+		logger.error("Unknown geo type in createPlacementConstraints: " + geotype);
+		return null;
+	}
+	
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/AbstractLinePlacement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/AbstractLinePlacement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/AbstractLinePlacement.java	(revision 42196)
@@ -0,0 +1,170 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ *
+ * AbstractLinePlacement.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public abstract class AbstractLinePlacement implements ILabelPlacement {
+	public static final double PI = Math.PI;
+	public static final double HALF_PI = PI * 0.5;
+	private ArrayList<LabelLocationMetrics> guessed =
+			new ArrayList<LabelLocationMetrics>();
+	private static final double TOLERANCE = 1E-2;
+
+
+	public ArrayList<LabelLocationMetrics> guess(ILabelClass lc, Geometry geom,
+			IPlacementConstraints pc, double cartographicSymbolSize,
+			Cancellable cancel, ViewPort vp) {
+		
+		guessed.clear();
+
+		Geometry shp = geom.cloneGeometry();
+		shp.transform(vp.getAffineTransform());
+
+		PathLength pathLen = new PathLength(shp);
+
+		LabelLocationMetrics initial = initialLocation(lc, pc, pathLen, cancel);
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		double theta = initial.getRotation();
+
+
+		double xOffset = 0;
+		double yOffset = 0;
+		Rectangle2D bounds = lc.getBounds();
+
+		if (pc.isPageOriented()) {
+			if(theta >  HALF_PI) { // from origin to left-down
+				theta = (theta - Math.PI);
+
+				Point2D anchor = initial.getAnchor();
+
+				double cosTheta = Math.cos(theta);
+				double sinTheta = Math.sin(theta);
+				double width = bounds.getWidth();
+				double height = bounds.getHeight()*1.1;
+                initial.getAnchor().setLocation(
+                    anchor.getX() - cosTheta*width + sinTheta*height,
+                    anchor.getY() - sinTheta*width - cosTheta*height);
+			} else if (theta < -HALF_PI ) { // from origin to left-up
+			    /*
+				if (Math.abs(Math.abs(theta) - HALF_PI) -TOLERANCE > 0)
+					// the condition avoids errors when segment is almost up-down vertical
+				{
+				*/
+					theta = (theta + Math.PI);
+					Point2D anchor = initial.getAnchor();
+					double cosTheta = Math.cos(theta);
+					double sinTheta = Math.sin(theta);
+					double width = bounds.getWidth();
+					double height = bounds.getHeight()*1.1;
+					initial.getAnchor().setLocation(
+							anchor.getX() - cosTheta*width + sinTheta*height,
+							anchor.getY() - sinTheta*width - cosTheta*height);
+							
+				// }
+			}
+
+
+		}
+
+		if (pc.isBelowTheLine() ||
+				pc.isOnTheLine() ||
+				pc.isAboveTheLine()) {
+
+			double h = bounds.getHeight()*0.5;
+
+			xOffset += h * Math.sin(theta);
+			yOffset += h * Math.cos(theta);
+
+
+			Point2D initialAnchor = initial.getAnchor();
+			// calculate the possibles in the inverse
+			// order to the preferred order and add it
+			// always in the first position
+			if (pc.isBelowTheLine()) {
+				Point2D anchor = new Point2D.Double(
+						initialAnchor.getX() +	-xOffset,
+						initialAnchor.getY() +	+yOffset);
+				guessed.add(0, new LabelLocationMetrics(anchor, theta, false));
+			}
+
+			if (pc.isOnTheLine()) {
+				guessed.add(0, new LabelLocationMetrics(initial.getAnchor(), theta, false));
+			}
+
+			if (pc.isAboveTheLine()) {
+				Point2D anchor = new Point2D.Double(
+						initialAnchor.getX() +	+xOffset,
+						initialAnchor.getY() +  -yOffset);
+				guessed.add(0, new LabelLocationMetrics(anchor, theta, false));
+			}
+		} else {
+			// will say that on the line is legal
+			guessed.add(0, initial);
+		}
+		return guessed;
+	}
+
+	abstract LabelLocationMetrics initialLocation(
+			ILabelClass lc, IPlacementConstraints pc,
+			PathLength pathLen, Cancellable cancel);
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MultiShapePlacement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MultiShapePlacement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MultiShapePlacement.java	(revision 42196)
@@ -0,0 +1,130 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ *
+ * MultiShapePlacementConstraints.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Apr 1, 2008
+ *
+ */
+public class MultiShapePlacement implements ILabelPlacement {
+	private ILabelPlacement pointPlacement;
+	private ILabelPlacement linePlacement;
+	private ILabelPlacement polygonPlacement;
+
+
+	/**
+	 * Creates a new instance of MultiShapePlacement initializing the respective
+	 * placements to those passed as parameters. Null values are allowed for
+	 * the parameters and will cause that no label will be placed when the
+	 * geometry belongs to such null values.
+	 *
+	 * @param pointPlacement, the placement for points
+	 * @param linePlacement, the placement for lines
+	 * @param polygonPlacement, the placement for polygons
+	 */
+	public MultiShapePlacement(
+			ILabelPlacement pointPlacement,
+			ILabelPlacement linePlacement,
+			ILabelPlacement polygonPlacement) {
+		this.pointPlacement = pointPlacement;
+		this.linePlacement = linePlacement;
+		this.polygonPlacement = polygonPlacement;
+	}
+
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc,
+			Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize,
+			Cancellable cancel, ViewPort vp) {
+		
+		MultiShapePlacementConstraints pc =
+				(MultiShapePlacementConstraints) placementConstraints;
+
+		GeometryType gt = geom.getGeometryType();
+		if (gt.getType() == TYPES.POINT || gt.getType() == TYPES.MULTIPOINT) {
+			if (pointPlacement != null) {
+				return pointPlacement.guess(lc, geom, pc.getPointConstraints(), cartographicSymbolSize, cancel,vp);
+			}
+		} else {
+			if (gt.isTypeOf(TYPES.CURVE) || gt.getType() == TYPES.MULTICURVE) {
+				if (linePlacement != null) {
+					return linePlacement.guess(lc, geom, pc.getLineConstraints(), cartographicSymbolSize, cancel,vp);
+				}
+			} else {
+				if (gt.isTypeOf(TYPES.SURFACE) || gt.getType() == TYPES.MULTISURFACE) {
+					if (polygonPlacement != null) {
+						return polygonPlacement.guess(lc, geom, pc.getPolygonConstraints(), cartographicSymbolSize, cancel,vp);
+					}
+				}
+			}
+		}
+		return CannotPlaceLabel.NO_PLACES;
+	}
+
+	public boolean isSuitableFor(
+			IPlacementConstraints placementConstraints,
+			int shapeType) {
+		// TODO shoud I also ask to each placement if it is suitable
+		// for these constraints????
+		return (shapeType == TYPES.GEOMETRY || shapeType == TYPES.AGGREGATE);
+	}
+
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementOnCentroid.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementOnCentroid.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementOnCentroid.java	(revision 42196)
@@ -0,0 +1,141 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * PolygonPlacementOnCentroid.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Apr 1, 2008
+ *
+ */
+//public class PolygonPlacementOnCentroid extends MarkerCenteredAtPoint implements ILabelPlacement {
+public class PolygonPlacementOnCentroid extends MarkerPlacementOnPoint
+implements ILabelPlacement {
+	
+	private static final Logger logger = LoggerFactory.getLogger(
+			PolygonPlacementOnCentroid.class);
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc, Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) {
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		Point cen = null;
+		try {
+			cen = geom.centroid();
+		} catch (Exception e) {
+			logger.error("While getting centroid.", e);
+		}
+		return super.guess(
+				lc,
+				cen,
+				placementConstraints,
+				cartographicSymbolSize, cancel,vp);
+	}
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc, Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel) {
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		ArrayList<LabelLocationMetrics> guessed =
+				new ArrayList<LabelLocationMetrics>();
+		
+		Point cen = null;
+		try {
+			cen = geom.centroid();
+		} catch (Exception e) {
+			logger.error("While getting centroid.", e);
+		}
+		Point2D p = new Point2D.Double(cen.getX(), cen.getY());
+		Rectangle2D bounds = lc.getBounds();
+		p.setLocation(
+				p.getX() - (bounds.getWidth()*0.5),
+				p.getY() - (bounds.getHeight()*0.5));// - 2);
+		guessed.add(new LabelLocationMetrics(p, 0, true));
+		return guessed;
+	}
+
+	public boolean isSuitableFor(
+			IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		GeometryType gt = null;
+		try {
+			gt = GeometryLocator.getGeometryManager().getGeometryType(
+					shapeType, SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While getting geo type.", e);
+		}
+		
+		if (gt.isTypeOf(TYPES.SURFACE) || shapeType == TYPES.MULTISURFACE) {
+			return (placementConstraints.isHorizontal()
+					&&
+					!placementConstraints.isFitInsidePolygon());
+		}
+		return false;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PointLabelPositioner.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PointLabelPositioner.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PointLabelPositioner.java	(revision 42196)
@@ -0,0 +1,169 @@
+package org.gvsig.labeling.placements;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.AbstractStyle;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * 
+ *  Specifies the point position for a label
+ *
+ */
+public class PointLabelPositioner extends AbstractStyle {
+
+	private static Logger logger = LoggerFactory.getLogger(PointLabelPositioner.class);
+	
+	public static final String POINT_LABEL_POSITIONER_PERSISTENCE_NAME =
+			"POINT_LABEL_POSITIONER_PERSISTENCE_NAME";
+	
+	private static Geometry sampleGeometry = null;
+	private int[] preferenceVector = new int[8];
+	private static final Color[] colorVector = new Color[] {
+		new Color(140, 140, 140), // gray
+		new Color(140, 245, 130), // green
+		new Color(130, 170, 245), // light blue
+		new Color(100, 100, 255),   // dark blue
+	};
+
+	public static final byte FORBIDDEN 		   = 0;
+	public static final byte PREFERENCE_HIGH   = 1;
+	public static final byte PREFERENCE_NORMAL = 2;
+	public static final byte PREFERENCE_LOW    = 3;
+	/**
+	 * Constructor method
+	 *
+	 */
+	public PointLabelPositioner() {}
+
+	/**
+	 * Constructor method
+	 *
+	 * @param preferenceVector
+	 * @param description
+	 */
+	public PointLabelPositioner(int[] preferenceVector, String description) {
+		this.preferenceVector = preferenceVector;
+		setDescription(description);
+	}
+
+	public void drawInsideRectangle(Graphics2D g, Rectangle r) {
+		int size = Math.min(r.width, r.height) / 3;
+		int j = -1;
+		final int fontSize = (int) (size * 0.8);
+		final Font font = new Font("Arial", Font.PLAIN, fontSize);
+		RenderingHints old = g.getRenderingHints();
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		for (int i = 0; i < 9; i++) {
+			if (i == 4) continue;
+			j++;
+			int value = Math.abs(preferenceVector[j] % colorVector.length);
+			int col = i % 3;
+			int row = i / 3;
+
+			g.setColor(colorVector[value]);
+			g.fillRect(size * col, size*row, size, size);
+			g.setColor(Color.BLACK);
+			g.drawRect(size * col, size*row, size, size);
+			g.setFont(font);
+			g.drawString(String.valueOf(value),
+					(float) ((size/2) - (fontSize/4)) + size * col,
+					(float) (size * 0.8) + size*row);
+		}
+		g.setRenderingHints(old);
+	}
+
+	public boolean isSuitableFor(ISymbol sym) {
+		return sym.isSuitableFor(getSampleGeometry());
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		
+		super.loadFromState(state);
+		preferenceVector = state.getIntArray("preferenceVector");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		
+		super.saveToState(state);
+		state.set("preferenceVector", preferenceVector);
+	}
+	
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(POINT_LABEL_POSITIONER_PERSISTENCE_NAME)==null ) {
+			DynStruct definition = manager.addDefinition(
+					PointLabelPositioner.class,
+					POINT_LABEL_POSITIONER_PERSISTENCE_NAME,
+					POINT_LABEL_POSITIONER_PERSISTENCE_NAME+" Persistence definition",
+					null, 
+					null
+			);
+			definition.extend(manager.getDefinition(
+					AbstractStyle.STYLE_PERSISTENCE_DEFINITION_NAME));
+			definition.addDynFieldArray("preferenceVector").setClassOfItems(
+					int.class).setMandatory(true);
+		}
+		
+	}
+	
+	/*
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className", getClassName());
+		xml.putProperty("desc", getDescription());
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; i < preferenceVector.length; i++) {
+			sb.append(preferenceVector[i]+" ,");
+		}
+		String s = sb.substring(0, sb.length()-2);
+		xml.putProperty("preferenceVector", s);
+		return xml;
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		setDescription(xml.getStringProperty("desc"));
+		preferenceVector = xml.getByteArrayProperty("preferenceVector");
+	}
+	*/
+
+	public Object clone() throws CloneNotSupportedException {
+		return super.clone();
+	}	
+	
+	public void drawOutline(Graphics2D g, Rectangle r) {
+		drawInsideRectangle(g, r);
+	}
+
+	public int[] getPreferenceVector() {
+		return preferenceVector;
+	}
+	
+	private static Geometry getSampleGeometry() {
+		
+		if (sampleGeometry == null) {
+			try {
+				sampleGeometry = GeometryLocator.getGeometryManager().createPoint(
+						0, 0, Geometry.SUBTYPES.GEOM2D);
+			} catch (Exception e) {
+				logger.error("While getting sample geometry.", e);
+			}
+		}
+		return sampleGeometry;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementConstraints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementConstraints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/LinePlacementConstraints.java	(revision 42196)
@@ -0,0 +1,123 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id: LinePlacementConstraints.java 13606 2007-09-10 15:47:11Z jaume $
+* $Log$
+* Revision 1.11  2007-09-10 15:47:11  jaume
+* *** empty log message ***
+*
+* Revision 1.10  2007/05/22 10:05:31  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2007/05/08 08:47:40  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2007/04/18 15:35:11  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/04/13 11:59:30  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/12 16:01:11  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2007/04/12 14:28:43  jaume
+* basic labeling support for lines
+*
+* Revision 1.4  2007/04/11 16:01:08  jaume
+* maybe a label placer refactor
+*
+* Revision 1.3  2007/04/02 16:34:56  jaume
+* Styled labeling (start commiting)
+*
+* Revision 1.2  2007/03/09 08:33:43  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/02/09 07:47:05  jaume
+* Isymbol moved
+*
+*
+*/
+package org.gvsig.labeling.placements;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class LinePlacementConstraints extends AbstractPlacementConstraints {
+//	private static final double HALF_PI = Math.PI * 0.5;
+//	private Hashtable textPaths = new Hashtable(), texts = new Hashtable();
+
+	public LinePlacementConstraints() {
+		super();
+		setPlacementMode(PARALLEL);
+		setAboveTheLine(true);
+		setLocationAlongTheLine(IPlacementConstraints.AT_THE_MIDDLE_OF_THE_LINE);
+		setPageOriented(true);
+	}
+
+	public static final String LINE_PLACE_CONSTRAINTS =
+			"LINE_PLACE_CONSTRAINTS";
+
+	public static void registerPersistent() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(LINE_PLACE_CONSTRAINTS) == null ) {
+			DynStruct definition = manager.addDefinition(
+					LinePlacementConstraints.class,
+					LINE_PLACE_CONSTRAINTS,
+					LINE_PLACE_CONSTRAINTS +" Persistence definition",
+					null, 
+					null);
+			definition.extend(manager.getDefinition(
+					AbstractPlacementConstraints.PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME));
+		}		
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementConstraints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementConstraints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementConstraints.java	(revision 42196)
@@ -0,0 +1,118 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id: PolygonPlacementConstraints.java 13606 2007-09-10 15:47:11Z jaume $
+* $Log$
+* Revision 1.11  2007-09-10 15:47:11  jaume
+* *** empty log message ***
+*
+* Revision 1.10  2007/07/18 06:54:34  jaume
+* continuing with cartographic support
+*
+* Revision 1.9  2007/04/26 11:41:00  jaume
+* attempting to let defining size in world units
+*
+* Revision 1.8  2007/04/19 14:21:30  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/04/18 15:35:11  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/13 11:59:30  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2007/04/12 14:28:43  jaume
+* basic labeling support for lines
+*
+* Revision 1.4  2007/04/11 16:01:08  jaume
+* maybe a label placer refactor
+*
+* Revision 1.3  2007/04/02 16:34:56  jaume
+* Styled labeling (start commiting)
+*
+* Revision 1.2  2007/03/09 08:33:43  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/02/21 07:34:08  jaume
+* labeling starts working
+*
+*
+*/
+package org.gvsig.labeling.placements;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class PolygonPlacementConstraints extends AbstractPlacementConstraints {
+	
+	public PolygonPlacementConstraints() {
+		setPlacementMode(HORIZONTAL);
+	}
+	
+	public static final String POLYGON_PLACE_CONSTRAINTS =
+			"POLYGON_PLACE_CONSTRAINTS";
+
+	public static void registerPersistent() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(POLYGON_PLACE_CONSTRAINTS) == null ) {
+			DynStruct definition = manager.addDefinition(
+					PolygonPlacementConstraints.class,
+					POLYGON_PLACE_CONSTRAINTS,
+					POLYGON_PLACE_CONSTRAINTS +" Persistence definition",
+					null, 
+					null);
+			definition.extend(manager.getDefinition(
+					AbstractPlacementConstraints.PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME));
+		}		
+	}
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PointPlacementConstraints.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PointPlacementConstraints.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PointPlacementConstraints.java	(revision 42196)
@@ -0,0 +1,155 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id: PointPlacementConstraints.java 13606 2007-09-10 15:47:11Z jaume $
+* $Log$
+* Revision 1.10  2007-09-10 15:47:11  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2007/07/18 06:54:34  jaume
+* continuing with cartographic support
+*
+* Revision 1.8  2007/04/18 15:35:11  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2007/04/13 11:59:30  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/12 14:28:43  jaume
+* basic labeling support for lines
+*
+* Revision 1.5  2007/04/11 16:01:08  jaume
+* maybe a label placer refactor
+*
+* Revision 1.4  2007/04/05 16:07:13  jaume
+* Styled labeling stuff
+*
+* Revision 1.3  2007/04/02 16:34:56  jaume
+* Styled labeling (start commiting)
+*
+* Revision 1.2  2007/03/09 08:33:43  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/02/21 07:34:08  jaume
+* labeling starts working
+*
+*
+*/
+package org.gvsig.labeling.placements;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class PointPlacementConstraints extends AbstractPlacementConstraints {
+	
+	public static final String POINT_PLACEM_CONSTRAINTS_PERSIST_NAME =
+			"POINT_PLACEM_CONSTRAINTS_PERSIST_NAME";
+	private PointLabelPositioner positioner = null;
+
+	public PointPlacementConstraints() {
+		super();
+		setPlacementMode(ON_TOP_OF_THE_POINT);
+	}
+
+
+	public PointLabelPositioner getPositioner() {
+		return positioner;
+	}
+
+	public void setPositioner(PointLabelPositioner pos) {
+		this.positioner = pos;
+	}
+	
+	public void saveToState(PersistentState state) throws PersistenceException {
+
+		super.saveToState(state);
+		if (positioner != null) {
+			state.set("pointPositioner", positioner);
+		}
+	}
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		
+		super.loadFromState(state);
+		if (state.hasValue("pointPositioner")) {
+			positioner = (PointLabelPositioner) state.get("pointPositioner");
+		}
+	}
+
+	public static void registerPersistent() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(POINT_PLACEM_CONSTRAINTS_PERSIST_NAME) == null) {
+			
+			DynStruct definition = manager.addDefinition(
+					PointPlacementConstraints.class,
+					POINT_PLACEM_CONSTRAINTS_PERSIST_NAME,
+					POINT_PLACEM_CONSTRAINTS_PERSIST_NAME +" Persistence definition",
+					null, 
+					null);
+			
+			definition.extend(manager.getDefinition(
+					AbstractPlacementConstraints.PLACEMENT_CONSTRAINTS_PERSISTENCE_NAME));
+			definition.addDynFieldObject("pointPositioner").setClassOfValue(
+					PointLabelPositioner.class).setMandatory(false);
+		}		
+	}
+	
+	public Object clone() throws CloneNotSupportedException {
+		
+		PointPlacementConstraints resp = (PointPlacementConstraints) super.clone();
+		PointLabelPositioner aux = (PointLabelPositioner) positioner.clone();
+		resp.setPositioner(aux);
+		return resp;
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementInside.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementInside.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/PolygonPlacementInside.java	(revision 42196)
@@ -0,0 +1,141 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * PolygonPlacementInside.java
+ *
+ *
+ * @author
+ *
+ */
+public class PolygonPlacementInside extends MarkerPlacementOnPoint implements ILabelPlacement {
+
+	private static final Logger logger =
+			LoggerFactory.getLogger(PolygonPlacementInside.class);
+	
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc, Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) {
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		Point int_po = null;
+		
+		try {
+			
+			Geometry vp_env = vp.getAdjustedEnvelope().getGeometry();
+			if (geom.intersects(vp_env)) {
+				geom = geom.intersection(vp_env);
+			}
+			
+			int_po = geom.getInteriorPoint();
+		} catch (Exception e) {
+			logger.error("While getting interior point.", e);
+		}
+		return super.guess(lc,
+				int_po,
+				placementConstraints, cartographicSymbolSize, cancel,vp);
+	}
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc, Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel) {
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		ArrayList<LabelLocationMetrics> guessed =
+				new ArrayList<LabelLocationMetrics>();
+		
+		Point int_po = null;
+		try {
+			int_po = geom.getInteriorPoint();
+		} catch (Exception e) {
+			logger.error("While getting interior point.", e);
+		}
+		Point2D p = new Point2D.Double(int_po.getX(), int_po.getY());
+		Rectangle2D bounds = lc.getBounds();
+		p.setLocation(p.getX() - (bounds.getWidth()*0.5), p.getY() - (bounds.getHeight()*0.5));// - 2);
+		guessed.add(new LabelLocationMetrics(p, 0, true));
+		return guessed;
+	}
+
+	public boolean isSuitableFor(IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		GeometryType gt = null;
+		try {
+			gt = GeometryLocator.getGeometryManager().getGeometryType(
+					shapeType, SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While getting geo type.", e);
+		}
+		
+		if (gt.isTypeOf(TYPES.SURFACE) || shapeType == TYPES.MULTISURFACE) {
+			return (placementConstraints.isFitInsidePolygon() && !placementConstraints.isParallel());
+		} else {
+			return false;
+		}
+		
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/CompoundLabelPlacement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/CompoundLabelPlacement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/CompoundLabelPlacement.java	(revision 42196)
@@ -0,0 +1,87 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ *
+ * CompoundLabelPlacement.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public class CompoundLabelPlacement implements ILabelPlacement {
+	private ILabelPlacement[] placements;
+
+	public CompoundLabelPlacement(ILabelPlacement[] suitablePlacements) {
+		this.placements = suitablePlacements;
+	}
+
+	public boolean isSuitableFor(IPlacementConstraints placementConstraints,
+			int shapeType) {
+		return true;
+	}
+
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc,
+			Geometry geom,
+			IPlacementConstraints constraints,
+			double cartographicSymbolSize,
+			Cancellable cancel,
+			ViewPort vp) {
+		
+		ArrayList<LabelLocationMetrics> guessed = new ArrayList<LabelLocationMetrics>();
+		for (int i = 0; cancel != null && !cancel.isCanceled() && i < placements.length; i++) {
+			guessed.addAll(placements[i].guess(lc, geom, constraints, cartographicSymbolSize, cancel,vp));
+		}
+		return guessed;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerPlacementOnPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerPlacementOnPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/MarkerPlacementOnPoint.java	(revision 42196)
@@ -0,0 +1,139 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class MarkerPlacementOnPoint implements ILabelPlacement{
+	
+	private Logger logger = LoggerFactory.getLogger(MarkerPlacementOnPoint.class);
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc,
+			Geometry shp,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel) {
+
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		ArrayList<LabelLocationMetrics> guessed = new ArrayList<LabelLocationMetrics>();
+		
+		Point cen = null;
+		try {
+			cen = shp.centroid();
+		} catch (Exception ex) {
+			logger.error("While getting centroid", ex);
+		}
+		Point2D p = new Point2D.Double(cen.getX(), cen.getY());
+		Rectangle2D bounds = lc.getBounds();
+		//FIXME: Con este posicionamiento, es identico al MarkerCenteredAtPoint
+		//pero es as� como lo hacen otros programas
+		//(tal vez, hubo una confusi�n por el nombre de la constante ON_TOP_OF_THE_POINT).
+		//Entonces sobrar�a el posicionamiento MarkerCenteredAtPoint debiendose utilizar siempre �ste.
+		p.setLocation(p.getX() - (bounds.getWidth()*0.5), p.getY() - (bounds.getHeight()*0.5));// - 2);
+		guessed.add(new LabelLocationMetrics(
+				p, 0, true));
+		return guessed;
+	}
+
+
+	public ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc,
+			Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) {
+		
+		if (cancel.isCanceled()) return CannotPlaceLabel.NO_PLACES;
+
+		Geometry shp = geom.cloneGeometry();
+		shp.transform(vp.getAffineTransform());
+
+		ArrayList<LabelLocationMetrics> guessed =
+				new ArrayList<LabelLocationMetrics>();
+		
+		Point cen = null;
+		try {
+			cen = shp.centroid();
+		} catch (Exception ex) {
+			logger.error("While getting centroid", ex);
+		}
+		Point2D p = new Point2D.Double(cen.getX(), cen.getY());
+		Rectangle2D bounds = lc.getBounds();
+		//FIXME: Con este posicionamiento, es identico al MarkerCenteredAtPoint
+		//pero es as� como lo hacen otros programas
+		//(tal vez, hubo una confusi�n por el nombre de la constante ON_TOP_OF_THE_POINT).
+		//Entonces sobrar�a el posicionamiento MarkerCenteredAtPoint debiendose utilizar siempre �ste.
+		p.setLocation(p.getX() - (bounds.getWidth()*0.5), p.getY() - bounds.getHeight()*0.5);// - 2);
+		guessed.add(new LabelLocationMetrics(
+				p, 0, true));
+		return guessed;
+	}
+
+	public boolean isSuitableFor(
+			IPlacementConstraints placementConstraints,
+			int shapeType) {
+		
+		
+		if (shapeType == TYPES.POINT) {
+			return placementConstraints.isOnTopOfThePoint();
+		} else{
+			return false;
+		}
+		
+	}
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/ILabelPlacement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/ILabelPlacement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/placements/ILabelPlacement.java	(revision 42196)
@@ -0,0 +1,71 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.placements;
+
+import java.util.ArrayList;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.task.Cancellable;
+
+
+/**
+ *
+ * ILabelPlacement.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Dec 17, 2007
+ *
+ */
+public interface ILabelPlacement {
+
+	boolean isSuitableFor(IPlacementConstraints placementConstraints, int shapeType);
+
+	ArrayList<LabelLocationMetrics> guess(
+			ILabelClass lc,
+			Geometry geom,
+			IPlacementConstraints placementConstraints,
+			double cartographicSymbolSize, Cancellable cancel, ViewPort vp) ;
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/GeneralLabelingStrategy.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/GeneralLabelingStrategy.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/GeneralLabelingStrategy.java	(revision 42196)
@@ -0,0 +1,1027 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+ *
+ * $Id: GeneralLabelingStrategy.java 13749 2007-09-17 14:16:11Z jaume $
+ * $Log$
+ * Revision 1.2  2007-09-17 14:16:11  jaume
+ * multilayer symbols sizing bug fixed
+ *
+ * Revision 1.1  2007/05/22 12:17:41  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2007/05/22 10:05:31  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.10  2007/05/17 09:32:06  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.9  2007/05/09 11:04:58  jaume
+ * refactored legend hierarchy
+ *
+ * Revision 1.8  2007/04/13 11:59:30  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.7  2007/04/12 14:28:43  jaume
+ * basic labeling support for lines
+ *
+ * Revision 1.6  2007/04/11 16:01:08  jaume
+ * maybe a label placer refactor
+ *
+ * Revision 1.5  2007/04/10 16:34:01  jaume
+ * towards a styled labeling
+ *
+ * Revision 1.4  2007/04/02 16:34:56  jaume
+ * Styled labeling (start commiting)
+ *
+ * Revision 1.3  2007/03/28 16:48:01  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/03/26 14:40:38  jaume
+ * added print method (BUT UNIMPLEMENTED)
+ *
+ * Revision 1.1  2007/03/20 16:16:20  jaume
+ * refactored to use ISymbol instead of FSymbol
+ *
+ * Revision 1.2  2007/03/09 11:20:57  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.1  2007/03/09 08:33:43  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.5  2007/02/21 07:34:08  jaume
+ * labeling starts working
+ *
+ * Revision 1.1.2.4  2007/02/15 16:23:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.3  2007/02/09 07:47:05  jaume
+ * Isymbol moved
+ *
+ * Revision 1.1.2.2  2007/02/02 16:21:24  jaume
+ * start commiting labeling stuff
+ *
+ * Revision 1.1.2.1  2007/02/01 17:46:49  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.labeling.label;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.gvsig.labeling.placements.ILabelPlacement;
+import org.gvsig.labeling.placements.LinePlacementConstraints;
+import org.gvsig.labeling.placements.MultiShapePlacementConstraints;
+import org.gvsig.labeling.placements.PlacementManager;
+import org.gvsig.labeling.placements.PointPlacementConstraints;
+import org.gvsig.labeling.placements.PolygonPlacementConstraints;
+import org.gvsig.labeling.placements.RemoveDuplicatesComparator;
+import org.gvsig.labeling.symbol.SmartTextSymbol;
+import org.gvsig.labeling.symbol.SymbolUtils;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelLocationMetrics;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * GeneralLabelingStrategy.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Jan 4, 2008
+ *
+ */
+public class GeneralLabelingStrategy implements ILabelingStrategy, Cloneable,
+		CartographicSupport {
+
+	private static final Logger logger = LoggerFactory
+			.getLogger(GeneralLabelingStrategy.class);
+
+	public static final String GENERAL_LABEL_STRATEGY_PERSISTENCE_NAME = "GENERAL_LABEL_STRATEGY_PERSISTENCE_NAME";
+
+	public static PointPlacementConstraints DefaultPointPlacementConstraints = new PointPlacementConstraints();
+	public static LinePlacementConstraints DefaultLinePlacementConstraints = new LinePlacementConstraints();
+	public static PolygonPlacementConstraints DefaultPolygonPlacementConstraints = new PolygonPlacementConstraints();
+
+	private static String[] NO_TEXT = { Messages.getText("text_field") };
+
+	private static MultiShapePlacementConstraints DefaultMultiShapePlacementConstratints = new MultiShapePlacementConstraints();
+
+	private ILabelingMethod method;
+	private IPlacementConstraints placementConstraints;
+	private IZoomConstraints zoomConstraints;
+
+	private boolean allowOverlapping;
+
+	protected FLyrVect layer;
+
+	// private long parseTime;
+	private int unit;
+	private int referenceSystem;
+	// private double sizeAfter;
+	private boolean printMode = false; /*
+										 * indicate whether output is for a
+										 * print product (PDF, PS, ...)
+										 */
+
+	public GeneralLabelingStrategy() {
+		method = SymbologyLocator.getSymbologyManager()
+				.createDefaultLabelingMethod();
+	}
+
+	public void setLayer(FLayer layer) {
+		FLyrVect l = (FLyrVect) layer;
+		this.layer = l;
+	}
+
+	public ILabelingMethod getLabelingMethod() {
+		return method;
+	}
+
+	public void setLabelingMethod(ILabelingMethod method) {
+		this.method = method;
+	}
+
+	private class GeometryItem {
+		public Geometry geom = null;
+		public int weigh = 0;
+		public double savedPerimeter;
+
+		public GeometryItem(Geometry geom, int weigh) {
+			this.geom = geom;
+			this.weigh = weigh;
+			this.savedPerimeter = 0;
+		}
+	}
+
+	public void draw(BufferedImage mapImage, Graphics2D mapGraphics,
+			double scale, ViewPort viewPort, Cancellable cancel, double dpi)
+			throws ReadException {
+
+		int x = (int) viewPort.getOffset().getX();
+		int y = (int) viewPort.getOffset().getY();
+
+		// offsets for page generation (PDF, PS, direct printing)
+		int print_offset_x = x;
+		int print_offset_y = y;
+		if (printMode) {
+			// for printing, we never offset the labels themselves
+			x = 0;
+			y = 0;
+			printMode = false;
+		}
+
+		TreeMap<String[], GeometryItem> labelsToPlace = null;
+
+		String[] usedFields = getUsedFields();
+
+		int notPlacedCount = 0;
+		int placedCount = 0;
+
+		/*
+		 * Get the label placement solvers according the user's settings
+		 */
+		ILabelPlacement placement = PlacementManager.getPlacement(
+				getPlacementConstraints(), layer.getShapeType());
+
+		BufferedImage targetBI;
+		Graphics2D targetGr;
+
+		/*
+		 * get an ordered set of the LabelClasses up on the label priority
+		 */
+		ILabelClass[] lcs = method.getLabelClasses();
+		TreeSet<ILabelClass> ts = new TreeSet<ILabelClass>(
+				new LabelClassComparatorByPriority());
+
+		for (int i = 0; i < lcs.length; i++)
+			ts.add(lcs[i]);
+
+		if (ts.size() == 0)
+			return;
+
+		/*
+		 * now we have an ordered set, it is only need to give a pass for each
+		 * label class to render by priorities.
+		 *
+		 * If no priorities were defined, the following loop only executes once
+		 */
+		for (ILabelClass lc : ts) {
+
+			if (!lc.isVisible(scale)) {
+				/*
+				 * Avoid non-visible labels
+				 */
+				continue;
+			}
+
+			FeatureSet fset = null;
+			DisposableIterator diter = null;
+			try {
+
+				try {
+					fset = method.getFeatureIteratorByLabelClass(layer, lc,
+							viewPort, usedFields);
+				} catch (DataException e) {
+					throw new ReadException(layer.getFeatureStore()
+							.getProviderName(), e);
+				}
+
+				// duplicates treatment stuff
+				/* handle the duplicates mode */
+				int duplicateMode = getDuplicateLabelsMode();
+				if (duplicateMode == IPlacementConstraints.REMOVE_DUPLICATE_LABELS) {
+					// we need to register the labels already placed
+
+					labelsToPlace = new TreeMap<String[], GeometryItem>(
+							new RemoveDuplicatesComparator());
+				}
+
+				boolean bLabelsReallocatable = !isAllowingOverlap();
+
+				BufferedImage overlapDetectImage = null;
+				Graphics2D overlapDetectGraphics = null;
+				if (bLabelsReallocatable) {
+					int width = viewPort.getImageWidth() + print_offset_x;
+
+					if (width < 0) {
+						width = 1;
+					}
+					int height = viewPort.getImageHeight() + print_offset_y;
+					if (height < 0) {
+						height = 1;
+					}
+					if (mapImage != null)
+						overlapDetectImage = new BufferedImage(
+								mapImage.getWidth() + print_offset_x,
+								mapImage.getHeight() + print_offset_y,
+								BufferedImage.TYPE_INT_ARGB);
+					else
+						overlapDetectImage = new BufferedImage(
+								viewPort.getImageWidth() + print_offset_x,
+								viewPort.getImageHeight() + print_offset_y,
+								BufferedImage.TYPE_INT_ARGB);
+
+					overlapDetectGraphics = overlapDetectImage.createGraphics();
+					overlapDetectGraphics.setRenderingHints(mapGraphics
+							.getRenderingHints());
+				}
+				if (bLabelsReallocatable) {
+					targetBI = overlapDetectImage;
+					targetGr = overlapDetectGraphics;
+					targetGr.translate(-x, -y);
+				} else {
+					targetBI = mapImage;
+					targetGr = mapGraphics;
+				}
+
+				try {
+					diter = fset.fastIterator();
+				} catch (DataException e) {
+					throw new ReadException(layer.getFeatureStore()
+							.getProviderName(), e);
+				}
+				Feature featu = null;
+				Geometry geome = null;
+
+				while (!cancel.isCanceled() && diter.hasNext()) {
+
+					featu = (Feature) diter.next();
+					geome = featu.getDefaultGeometry();
+					if (geome == null || geome.getType() == Geometry.TYPES.NULL) {
+						continue;
+					}
+
+					if (!setupLabel(featu, lc, cancel, usedFields, viewPort,
+							dpi, duplicateMode)) {
+						continue;
+					}
+
+					String[] texts = lc.getTexts();
+
+					if (duplicateMode == IPlacementConstraints.REMOVE_DUPLICATE_LABELS) {
+						// check if this text (so label) is already present in
+						// the map
+
+						GeometryItem item = labelsToPlace.get(texts);
+						if (item == null) {
+							item = new GeometryItem(geome, 0);
+							labelsToPlace.put(texts, item);
+						}
+						if (item.geom != null) {
+
+							notPlacedCount++;
+							if (geome.getType() != Geometry.TYPES.POINT) {
+
+								Envelope auxBox = geome.getEnvelope();
+								double perimeterAux = 2 * (auxBox.getLength(0) + auxBox
+										.getLength(1));
+								if (perimeterAux > item.savedPerimeter) {
+									item.geom = geome; // FConverter.jts_to_igeometry(jtsGeom);
+									item.savedPerimeter = perimeterAux;
+								}
+							} else {
+								int weigh = item.weigh;
+
+								try {
+									Point pointFromLabel = item.geom.centroid();
+									Point pointGeome = geome.centroid();
+									item.geom = GeometryLocator
+											.getGeometryManager()
+											.createPoint(
+													(pointFromLabel.getX()
+															* weigh + pointGeome.getX())
+															/ (weigh + 1),
+													(pointFromLabel.getY()
+															* weigh + pointGeome
+																.getY())
+															/ (weigh + 1),
+													Geometry.SUBTYPES.GEOM2D);
+								} catch (Exception ex) {
+									throw new ReadException(layer
+											.getFeatureStore()
+											.getProviderName(), ex);
+								}
+
+							}
+						} else {
+							item.geom = geome;
+						}
+						item.weigh++;
+					} else {
+						// Check if size is a pixel
+						if (isOnePoint(viewPort, geome)) {
+							continue;
+						}
+
+						List<Geometry> geome_parts = new ArrayList<Geometry>();
+						if (duplicateMode == IPlacementConstraints.ONE_LABEL_PER_FEATURE_PART) {
+							geome_parts = getGeometryParts(geome);
+						} else {
+							geome_parts.add(geome);
+						}
+
+						try {
+							int n = geome_parts.size();
+							for (int k = 0; k < n; k++) {
+								drawLabelInGeom(targetBI, targetGr, lc,
+										placement, viewPort,
+										geome_parts.get(k), cancel, dpi,
+										bLabelsReallocatable);
+							}
+						} catch (GeometryException e) {
+							throw new ReadException(layer.getFeatureStore()
+									.getProviderName(), e);
+						}
+
+						placedCount++;
+					}
+				}
+
+				// ======= End iteration in feature set ====================
+
+				if (duplicateMode == IPlacementConstraints.REMOVE_DUPLICATE_LABELS) {
+					Iterator<String[]> textsIt = labelsToPlace.keySet()
+							.iterator();
+					while (!cancel.isCanceled() && textsIt.hasNext()) {
+						notPlacedCount++;
+						String[] texts = textsIt.next();
+
+						GeometryItem item = labelsToPlace.get(texts);
+						if (item != null) {
+							lc.setTexts(texts);
+							// Check if size is a pixel
+							if (isOnePoint(viewPort, item.geom)) {
+								continue;
+							}
+
+							try {
+								drawLabelInGeom(targetBI, targetGr, lc,
+										placement, viewPort, item.geom, cancel,
+										dpi, bLabelsReallocatable);
+							} catch (GeometryException e) {
+								throw new ReadException(layer.getFeatureStore()
+										.getProviderName(), e);
+							}
+						}
+					}
+				}
+
+				if (bLabelsReallocatable) {
+					targetGr.translate(x, y);
+					if (mapImage != null) {
+						mapGraphics.drawImage(overlapDetectImage, null, null);
+					} else {
+						mapGraphics.drawImage(overlapDetectImage, null, null);
+					}
+				}
+
+			} finally {
+				if (diter != null) {
+					diter.dispose();
+				}
+				if (fset != null){
+					fset.dispose();
+				}
+			}
+		} // big iteration
+
+	}
+
+	private List<Geometry> getGeometryParts(Geometry ge) {
+
+		List<Geometry> resp = new ArrayList<Geometry>();
+		if (ge != null) {
+			if (ge instanceof MultiPrimitive) {
+				MultiPrimitive mp = (MultiPrimitive) ge;
+				int n = mp.getPrimitivesNumber();
+				for (int i = 0; i < n; i++) {
+					resp.add(mp.getPrimitiveAt(i));
+				}
+			} else {
+				resp.add(ge);
+			}
+		}
+		return resp;
+	}
+
+	private void drawLabelInGeom(BufferedImage targetBI, Graphics2D targetGr,
+			ILabelClass lc, ILabelPlacement placement, ViewPort viewPort,
+			Geometry geom, Cancellable cancel, double dpi,
+			boolean bLabelsReallocatable) throws GeometryException {
+
+		lc.toCartographicSize(viewPort, dpi, null);
+		ArrayList<LabelLocationMetrics> llm = null;
+		llm = placement.guess(lc, geom, getPlacementConstraints(), 0, cancel,
+				viewPort);
+
+		setReferenceSystem(lc.getReferenceSystem());
+		setUnit(lc.getUnit());
+
+		/*
+		 * search if there is room left by the previous and with more priority
+		 * labels, then check the current level
+		 */
+		lookupAndPlaceLabel(targetBI, targetGr, llm, placement, lc, geom,
+				viewPort, cancel, bLabelsReallocatable);
+
+	}
+
+	private int getDuplicateLabelsMode() {
+		if (getPlacementConstraints() == null) {
+			return IPlacementConstraints.DefaultDuplicateLabelsMode;
+		}
+		return getPlacementConstraints().getDuplicateLabelsMode();
+	}
+
+	private boolean lookupAndPlaceLabel(BufferedImage bi, Graphics2D g,
+			ArrayList<LabelLocationMetrics> llm, ILabelPlacement placement,
+			ILabelClass lc, Geometry geom, ViewPort viewPort,
+			Cancellable cancel, boolean bLabelsReallocatable)
+			throws GeometryException {
+
+		int i;
+		for (i = 0; !cancel.isCanceled() && i < llm.size(); i++) {
+			LabelLocationMetrics labelMetrics = llm.get(i);
+
+			IPlacementConstraints pc = getPlacementConstraints();
+			if (pc instanceof MultiShapePlacementConstraints) {
+				MultiShapePlacementConstraints mpc = (MultiShapePlacementConstraints) pc;
+
+				GeometryManager gm = GeometryLocator.getGeometryManager();
+				GeometryType line_gt = null;
+				GeometryType polyg_gt = null;
+				GeometryType geom_gt = null;
+
+				line_gt = gm.getGeometryType(TYPES.CURVE, SUBTYPES.GEOM2D);
+				polyg_gt = gm.getGeometryType(TYPES.SURFACE, SUBTYPES.GEOM2D);
+				geom_gt = gm.getGeometryType(geom.getType(), SUBTYPES.GEOM2D);
+
+				if (geom_gt.getType() == TYPES.POINT
+						|| geom_gt.getType() == TYPES.MULTIPOINT) {
+					pc = mpc.getPointConstraints();
+				} else {
+					if (geom_gt.isTypeOf(TYPES.CURVE)
+							|| geom_gt.getType() == TYPES.MULTICURVE) {
+						pc = mpc.getLineConstraints();
+					} else {
+						if (geom_gt.isTypeOf(TYPES.SURFACE)
+								|| geom_gt.getType() == TYPES.MULTISURFACE) {
+							pc = mpc.getPolygonConstraints();
+						}
+					}
+				}
+			}
+
+			/*
+			 * Ver comentario en el metodo drawLabelInGeom
+			 */
+			if (bLabelsReallocatable) {
+
+				Geometry aux_geom = null;
+				aux_geom = lc.getShape(labelMetrics);
+
+				if (!isOverlapping(bi, aux_geom)) {
+
+					if (!pc.isFollowingLine()) {
+						lc.draw(g, labelMetrics, geom);
+					} else {
+
+						ILabelClass smsLc = new SmartTextSymbolLabelClass();
+						SmartTextSymbol sms = new SmartTextSymbol(
+								lc.getTextSymbol(), pc);
+
+						double sizeBefore = lc.getTextSymbol().getFont()
+								.getSize();
+						double sizeAfter = SymbolUtils.getCartographicLength(
+								this, sizeBefore, viewPort, viewPort.getDPI());
+						sms.setFontSize(sizeAfter);
+
+						smsLc.setTextSymbol(sms);
+						geom.transform(viewPort.getAffineTransform());
+						smsLc.draw(g, null, geom);
+						sms.setFontSize(sizeBefore);
+
+					}
+					return true;
+				}
+			} else {
+				if (!pc.isFollowingLine()) {
+					lc.draw(g, labelMetrics, null);
+				} else {
+					ILabelClass smsLc = new SmartTextSymbolLabelClass();
+					SmartTextSymbol sms = new SmartTextSymbol(
+							lc.getTextSymbol(), pc);
+
+					double sizeBefore = lc.getTextSymbol().getFont().getSize();
+					double sizeAfter = SymbolUtils.getCartographicLength(this,
+							sizeBefore, viewPort, viewPort.getDPI());
+					sms.setFontSize(sizeAfter);
+
+					smsLc.setTextSymbol(sms);
+					geom.transform(viewPort.getAffineTransform());
+					smsLc.draw(g, null, geom);
+
+					sms.setFontSize(sizeBefore);
+				}
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Divide una cadena de caracteres por el caracter dos puntos siempre que no
+	 * est� entre comillas.
+	 *
+	 * @param str
+	 *            Cadena de caracteres
+	 *
+	 * @return String[]
+	 *
+	 */
+	private String[] divideExpression(String str) {
+		ArrayList<String> r = new ArrayList<String>();
+		boolean inQuotationMarks = false;
+		int lastIndex = 0;
+		for (int i = 0; i < str.length(); i++) {
+			String currentChar = str.substring(i, i + 1);
+			if (currentChar.compareTo("\"") == 0 ) {
+				inQuotationMarks = !inQuotationMarks;
+				// Si es el cierre de las comillas
+				if(!inQuotationMarks){
+					r.add(str.substring(lastIndex, i + 1).replace("\"", "'"));
+					lastIndex = i + 1;
+				}
+			}
+			if (currentChar.compareTo(":") == 0
+					&& !inQuotationMarks) {
+				if (lastIndex < i) {
+					r.add(str.substring(lastIndex, i));
+				}
+				lastIndex = i + 1;
+			}
+		}
+		if (lastIndex < str.length() - 1) {
+			r.add(str.substring(lastIndex));
+		}
+		String[] result = new String[r.size()];
+		r.toArray(result);
+		return result;
+	}
+
+	/**
+	 * Compute the texts to show in the label and store them in LabelClass.
+	 */
+	@SuppressWarnings("unchecked")
+	private boolean setupLabel(Feature featu, ILabelClass lc,
+			Cancellable cancel, String[] usedFields, ViewPort viewPort,
+			double dpi, int duplicateMode) {
+
+		String expr = lc.getStringLabelExpression();
+
+		long pt1 = System.currentTimeMillis();
+		String[] texts = NO_TEXT;
+		List<String> preTexts = new ArrayList<String>();
+		try {
+			if (expr != null) {
+
+				if (expr.equals("")) {
+					expr = texts[0];
+				}
+
+				String[] multiexpr = divideExpression(expr);
+				for (int i = 0; i < multiexpr.length; i++) {
+
+					expr = multiexpr[i];
+					Object res = LabelClassUtils.evaluate(expr,
+							featu.getEvaluatorData());
+					if (res != null) {
+						preTexts.add(res.toString());
+					} else {
+						preTexts.add("");
+					}
+				}
+				texts = new String[preTexts.size()];
+				preTexts.toArray(texts);
+				// parseTime += System.currentTimeMillis()-pt1;
+			}
+			lc.setTexts(texts);
+
+		} catch (Exception e) {
+			logger.warn("While setting up label", e);
+			return false;
+		}
+		return true;
+	}
+
+	private boolean isOverlapping(BufferedImage bi, Geometry lblgeom) {
+
+		if (lblgeom == null || lblgeom.getType() == TYPES.NULL) {
+			return false;
+		}
+
+		Envelope rPixels = lblgeom.getEnvelope();
+		int minx = (int) rPixels.getMinimum(0);
+		int miny = (int) rPixels.getMinimum(1);
+		int maxx = (int) rPixels.getMaximum(0);
+		int maxy = (int) rPixels.getMaximum(1);
+
+		for (int i = minx; i <= maxx; i++) {
+			for (int j = miny; j <= maxy; j++) {
+
+				if (!lblgeom.contains(i, j)
+				// contains seems to don't detect points
+				// placed in the rectangle boundaries
+						&& !lblgeom.intersects(i, j, i, j)) {
+					continue;
+				}
+
+				if (i < 0 || j < 0) {
+					continue;
+				}
+
+				if (bi.getWidth() < i + 1 || bi.getHeight() < j + 1) {
+					continue;
+				}
+
+				if (bi.getRGB(i, j) != 0) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	private boolean isOnePoint(ViewPort viewPort, Geometry geom) {
+
+		boolean onePoint = false;
+		int shapeType = geom.getType();
+
+		if (shapeType != TYPES.POINT && shapeType != TYPES.MULTIPOINT) {
+
+			Envelope env = geom.getEnvelope();
+			double dist1Pixel = viewPort.getDist1pixel();
+			onePoint = (env.getLength(0) <= dist1Pixel && env.getLength(1) <= dist1Pixel);
+		}
+		return onePoint;
+	}
+
+	public boolean isAllowingOverlap() {
+		return allowOverlapping;
+	}
+
+	public void setAllowOverlapping(boolean allowOverlapping) {
+		this.allowOverlapping = allowOverlapping;
+	}
+
+	public IPlacementConstraints getPlacementConstraints() {
+		if (placementConstraints != null)
+			return placementConstraints;
+
+		GeometryType gt = null;
+
+		try {
+			gt = layer.getGeometryType();
+			// force 2d for comparison
+			gt = GeometryLocator.getGeometryManager().getGeometryType(
+					gt.getType(), SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			logger.error("While getting placements constraints.", e);
+			return null;
+		}
+
+		if (gt.isTypeOf(TYPES.POINT) || gt.isTypeOf(TYPES.MULTIPOINT)) {
+			return DefaultPointPlacementConstraints;
+		} else {
+			if (gt.isTypeOf(TYPES.CURVE) || gt.isTypeOf(TYPES.MULTICURVE)) {
+				return DefaultLinePlacementConstraints;
+			} else {
+				if (gt.isTypeOf(TYPES.SURFACE)
+						|| gt.isTypeOf(TYPES.MULTISURFACE)) {
+					return DefaultPolygonPlacementConstraints;
+				} else {
+					if (gt.isTypeOf(TYPES.AGGREGATE)
+							|| gt.isTypeOf(TYPES.GEOMETRY)) {
+						DefaultMultiShapePlacementConstratints
+								.setPointConstraints(DefaultPointPlacementConstraints);
+						DefaultMultiShapePlacementConstratints
+								.setLineConstraints(DefaultLinePlacementConstraints);
+						DefaultMultiShapePlacementConstratints
+								.setPolygonConstraints(DefaultPolygonPlacementConstraints);
+						return DefaultMultiShapePlacementConstratints;
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	public void setPlacementConstraints(IPlacementConstraints constraints) {
+		this.placementConstraints = constraints;
+	}
+
+	public IZoomConstraints getZoomConstraints() {
+		return zoomConstraints;
+	}
+
+	public void setZoomConstraints(IZoomConstraints constraints) {
+		this.zoomConstraints = constraints;
+	}
+
+	public void print(Graphics2D g, double scale, ViewPort viewPort,
+			Cancellable cancel, PrintAttributes properties)
+			throws ReadException {
+
+		double dpi = 100;
+		int pq = properties.getPrintQuality();
+		if (pq == PrintAttributes.PRINT_QUALITY_NORMAL) {
+			dpi = 300;
+		} else if (pq == PrintAttributes.PRINT_QUALITY_HIGH) {
+			dpi = 600;
+		} else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT) {
+			dpi = 72;
+		}
+
+		viewPort.setOffset(new Point2D.Double(0, 0));
+
+		/* signal printing output */
+		printMode = true;
+
+		draw(null, g, scale, viewPort, cancel, dpi);
+	}
+
+	public String[] getUsedFields() {
+
+		/*
+		 * TODO Solve the problem with the [ and ]. Currently SQLJEP evaluator
+		 * cannot tell which fields are being used. Options: allow [] and remove
+		 * them or maybe while parsing the SQLJEP evaluator can inform with
+		 * events like "I have found a field"
+		 */
+
+		FeatureAttributeDescriptor[] atts = null;
+		try {
+			atts = layer.getFeatureStore().getDefaultFeatureType()
+					.getAttributeDescriptors();
+		} catch (DataException e) {
+			logger.error("While getting atributes.", e);
+		}
+
+		int n = atts.length;
+		String[] resp = new String[n];
+		for (int i = 0; i < n; i++) {
+			resp[i] = atts[i].getName();
+		}
+		return resp;
+
+	}
+
+	public boolean shouldDrawLabels(double scale) {
+		double minScaleView = -1;
+		double maxScaleView = -1;
+
+		if (zoomConstraints != null) {
+			minScaleView = zoomConstraints.getMinScale();
+			maxScaleView = zoomConstraints.getMaxScale();
+		}
+
+		if (minScaleView == -1 && maxScaleView == -1) {
+			// parameters not set, so the layer decides.
+			return layer.isWithinScale(scale);
+		}
+
+		if (minScaleView >= scale) {
+			return (maxScaleView != -1) ? maxScaleView <= scale : true;
+		}
+
+		return false;
+	}
+
+	public void setUnit(int unitIndex) {
+		unit = unitIndex;
+
+	}
+
+	public int getUnit() {
+		return unit;
+	}
+
+	public int getReferenceSystem() {
+		return referenceSystem;
+	}
+
+	public void setReferenceSystem(int referenceSystem) {
+		this.referenceSystem = referenceSystem;
+	}
+
+	public static void registerPersistent() {
+
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if (manager.getDefinition(GENERAL_LABEL_STRATEGY_PERSISTENCE_NAME) == null) {
+			DynStruct definition = manager.addDefinition(
+					GeneralLabelingStrategy.class,
+					GENERAL_LABEL_STRATEGY_PERSISTENCE_NAME,
+					GENERAL_LABEL_STRATEGY_PERSISTENCE_NAME
+							+ " Persistence definition", null, null);
+			definition.addDynFieldObject("labelingMethod")
+					.setClassOfValue(ILabelingMethod.class).setMandatory(true);
+			definition.addDynFieldObject("placementConstraints")
+					.setClassOfValue(IPlacementConstraints.class)
+					.setMandatory(false);
+			definition.addDynFieldObject("zoomConstraints")
+					.setClassOfValue(IZoomConstraints.class)
+					.setMandatory(false);
+
+			definition.addDynFieldBoolean("allowOverlapping")
+					.setMandatory(true);
+			definition.addDynFieldInt("unit").setMandatory(true);
+			definition.addDynFieldInt("referenceSystem").setMandatory(true);
+		}
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+
+		method = (ILabelingMethod) state.get("labelingMethod");
+
+		if (state.hasValue("placementConstraints")) {
+			placementConstraints = (IPlacementConstraints) state
+					.get("placementConstraints");
+		}
+
+		if (state.hasValue("zoomConstraints")) {
+			zoomConstraints = (IZoomConstraints) state.get("zoomConstraints");
+		}
+
+		this.allowOverlapping = state.getBoolean("allowOverlapping");
+		this.unit = state.getInt("unit");
+		this.referenceSystem = state.getInt("referenceSystem");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+
+		state.set("labelingMethod", method);
+
+		if (placementConstraints != null) {
+			state.set("placementConstraints", placementConstraints);
+		}
+
+		if (zoomConstraints != null) {
+			state.set("zoomConstraints", zoomConstraints);
+		}
+
+		state.set("allowOverlapping", allowOverlapping);
+		state.set("unit", unit);
+		state.set("referenceSystem", referenceSystem);
+
+	}
+
+	public double toCartographicSize(ViewPort vp, double dpi, Geometry geom) {
+		/*
+		 * This method is not used but we must implement CartographicSupport
+		 */
+		return 0;
+	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		/*
+		 * This method is not used but we must implement CartographicSupport
+		 */
+	}
+
+	public double getCartographicSize(ViewPort vp, double dpi, Geometry geom) {
+		/*
+		 * This method is not used but we must implement CartographicSupport
+		 */
+		return 0;
+	}
+
+	public Object clone() throws CloneNotSupportedException {
+		return LabelClassUtils.clone(this);
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/GeneralLabelingFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/GeneralLabelingFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/GeneralLabelingFactory.java	(revision 42196)
@@ -0,0 +1,81 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.label;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelingFactory;
+import org.gvsig.tools.exception.DriverException;
+
+/**
+ * 
+ * ExtendedLabelingFactory.java
+ *
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Mar 6, 2008
+ *
+ */
+public class GeneralLabelingFactory {
+
+	public static GeneralLabelingStrategy createStrategy(
+			FLayer layer,
+			ILabelingMethod method,
+			IPlacementConstraints placement_c,
+			IZoomConstraints zoom_c) {
+		
+		GeneralLabelingStrategy resp = new GeneralLabelingStrategy();
+		resp.setLayer(layer);
+		if (method != null) {
+			resp.setLabelingMethod(method);
+		}
+		if (placement_c != null) {
+			resp.setPlacementConstraints(placement_c);
+		}
+		if (zoom_c != null) {
+			resp.setZoomConstraints(zoom_c);
+		}
+		return resp;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/SmartTextSymbolLabelClass.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/SmartTextSymbolLabelClass.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/SmartTextSymbolLabelClass.java	(revision 42196)
@@ -0,0 +1,327 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.label;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelLocationMetrics;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.labeling.symbol.SmartTextSymbol;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentContext;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.persistence.spi.PersistentContextServices;
+
+
+/**
+ * <p>
+ * SmartTextSymbolLabelClass.java<br>
+ * </p>
+ *
+ * <p>
+ *
+ *   This is a <b>wrapper</b> to be able to use a SmartTextSymbol as a
+ * LabelClass. A SmartTextSymbol uses a line instead of a point.
+ * Being in fact a Line and not a Marker, it does not make any sense
+ * to have label styles since the label styles are well-defined rectangle
+ * areas where texts are placed in fields backgrounded by an image. In this
+ * contexts, the area is defined dinamically for each line, and there is no
+ * sense to have texts fields. They will be rendered as a single string
+ * along a line.<br>
+ * </p>
+ * <p> The label itself is the SmartTextSymbol,
+ * the geometry (the line), the label expression,
+ * and the text applied to the symbol.<br>
+ * </p>
+ * <p>
+ *   Most of the operations performed by this LabelClass are in fact
+ * delegated to the symbol.<br>
+ * </p>
+ *
+ *
+ * @author jldominguez
+ *
+ */
+public class SmartTextSymbolLabelClass implements ILabelClass {
+    
+    private static Logger logger = LoggerFactory.getLogger(
+        SmartTextSymbolLabelClass.class);
+    
+    public static final String SMART_LABEL_CLASS_PERSISTENCE_DEFINITION_NAME =
+        "Smart LabelClass";
+
+    private ILabelClass defLabelClass = null;
+	private SmartTextSymbol smartTextSymbol;
+	
+	public SmartTextSymbolLabelClass() {
+	    defLabelClass = SymbologyLocator.getSymbologyManager().createDefaultLabel();
+	}
+
+	public void draw(Graphics2D graphics, ILabelLocationMetrics llm, Geometry geo) {
+		getTextSymbol().draw(graphics, null, geo, null, null);
+	}
+
+	public void drawInsideRectangle(Graphics2D graphics, Rectangle bounds)
+			throws SymbolDrawingException {
+	    
+		getTextSymbol().drawInsideRectangle(graphics, null, bounds, null);
+	}
+
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public ILabelStyle getLabelStyle() {
+		// label style not allowed in this context
+		return null;
+	}
+
+
+	public ITextSymbol getTextSymbol() {
+		if (smartTextSymbol == null) {
+			smartTextSymbol = new SmartTextSymbol();
+		}
+		return smartTextSymbol;
+	}
+
+
+	public void setLabelStyle(ILabelStyle labelStyle) {
+		// operation not supported in this context
+	}
+
+
+	public void setTextSymbol(ITextSymbol textSymbol) {
+	    if (textSymbol instanceof SmartTextSymbol) {
+	        this.smartTextSymbol = (SmartTextSymbol) textSymbol;
+	    } else {
+	        logger.error("While setting text symbol in label class",
+	            new Exception("Text symbol must be a SmartTextSymbol here"));
+	    }
+		
+	    defLabelClass.setTextSymbol(textSymbol);
+	}
+	
+	public void loadFromState(PersistentState state)
+        throws PersistenceException {
+	    defLabelClass.loadFromState(state);
+	}
+	
+	public void saveToState(PersistentState state)
+	    throws PersistenceException {
+	    defLabelClass.saveToState(state);
+	}
+	
+    public static void registerPersistent() {
+
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if (manager.getDefinition(SMART_LABEL_CLASS_PERSISTENCE_DEFINITION_NAME)==null) {
+            
+            DynStruct definition = manager.addDefinition(
+                SmartTextSymbolLabelClass.class,
+                    SMART_LABEL_CLASS_PERSISTENCE_DEFINITION_NAME,
+                    SMART_LABEL_CLASS_PERSISTENCE_DEFINITION_NAME
+                    + " Persistence definition",
+                    null, 
+                    null
+            );
+
+            definition.extend(manager.getDefinition("LabelClass"));
+        }
+        
+    }
+
+    // ========================================================
+    // Delegating other methods on default behavior
+    // ========================================================
+
+    public boolean isVisible() {
+        return defLabelClass.isVisible();
+    }
+
+    public boolean isVisible(double scale) {
+        return this.isVisible();
+    }
+    
+    public void setVisible(boolean isVisible) {
+        defLabelClass.setVisible(isVisible);
+    }
+
+    public String getName() {
+        return defLabelClass.getName();
+    }
+
+    public void setName(String name) {
+        defLabelClass.setName(name);
+    }
+
+    public void setTexts(String[] texts) {
+        defLabelClass.setTexts(texts);
+    }
+
+    public String[] getTexts() {
+        return defLabelClass.getTexts();
+    }
+
+    public int getPriority() {
+        return defLabelClass.getPriority();
+    }
+
+    public void setPriority(int priority) {
+        defLabelClass.setPriority(priority);
+    }
+
+    public Geometry getShape(ILabelLocationMetrics llm)
+        throws CreateGeometryException {
+
+        return defLabelClass.getShape(llm);
+    }
+
+    public double getCartographicSize(ViewPort viewPort, double dpi,
+        Geometry geom) {
+
+        return defLabelClass.getCartographicSize(viewPort, dpi, geom);
+    }
+
+    public int getReferenceSystem() {
+        return defLabelClass.getReferenceSystem();
+    }
+
+    public int getUnit() {
+        return defLabelClass.getUnit();
+    }
+
+    public void setCartographicSize(double cartographicSize, Geometry geom) {
+        defLabelClass.setCartographicSize(cartographicSize, geom);
+    }
+
+    public void setReferenceSystem(int referenceSystem) {
+        defLabelClass.setReferenceSystem(referenceSystem);
+    }
+
+    public void setUnit(int unitIndex) {
+        defLabelClass.setUnit(unitIndex);
+    }
+
+    public double toCartographicSize(ViewPort viewPort, double dpi,
+        Geometry geom) {
+
+        return defLabelClass.toCartographicSize(viewPort, dpi, geom);
+    }
+
+    public Rectangle getBounds() {
+        return defLabelClass.getBounds();
+    }
+
+    public String getSQLQuery() {
+        return defLabelClass.getSQLQuery();
+    }
+
+    public void setSQLQuery(String sqlQuery) {
+        defLabelClass.setSQLQuery(sqlQuery);
+    }
+
+    public String[] getLabelExpressions() {
+        return defLabelClass.getLabelExpressions();
+    }
+
+    public void setLabelExpressions(String[] lbl_exps) {
+        defLabelClass.setLabelExpressions(lbl_exps);
+    }
+
+    public void setUseSqlQuery(boolean use_sql) {
+        defLabelClass.setUseSqlQuery(use_sql);
+    }
+
+    public boolean isUseSqlQuery() {
+        return defLabelClass.isUseSqlQuery();
+    }
+
+    public String getStringLabelExpression() {
+        return defLabelClass.getStringLabelExpression();
+    }
+    
+   public Object clone() throws CloneNotSupportedException {
+
+	PersistenceManager persman = ToolsLocator.getPersistenceManager();
+
+        PersistentContext context = null;
+        Object resp = null;
+        PersistentState state = null;
+        try {
+            state = persman.getState(this, true);
+        } catch (PersistenceException e) {
+            logger.warn("Can't clone, return me !!!!!!!!!!!!!!", e);
+            return this;
+        }
+        context = state.getContext();
+        if (context instanceof PersistentContextServices) {
+            /*
+             * Ensure that previous instances are not used,
+             * so objects are recreated
+             */
+            ((PersistentContextServices) context).clear();
+        }
+        try {
+            resp = persman.create(state);
+        } catch (Exception e) {
+            logger.warn("Can't clone, return me !!!!!!!!!!!!!!", e);
+            return this;
+        }
+        return resp;
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/LabelClassComparatorByPriority.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/LabelClassComparatorByPriority.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/LabelClassComparatorByPriority.java	(revision 42196)
@@ -0,0 +1,58 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.label;
+
+import java.util.Comparator;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+
+public class LabelClassComparatorByPriority implements Comparator<ILabelClass> {
+	
+	public int compare(ILabelClass o1, ILabelClass o2) {
+		
+		// they will always be LabelClass
+		if (o1 == null && o2 == null) return 0;
+		if (o1 != null && o2 == null) return -1;
+		if (o1 == null && o2 != null) return 1;
+		if (o1.getPriority() < o2.getPriority()) return -1;
+		return 1;
+	}
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/FeatureDependentLabeled.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/FeatureDependentLabeled.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/FeatureDependentLabeled.java	(revision 42196)
@@ -0,0 +1,294 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id: FeatureDependentLabeled.java 10671 2007-03-09 08:33:43Z jaume $
+* $Log$
+* Revision 1.2  2007-03-09 08:33:43  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/01 11:42:47  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/01/30 18:10:45  jaume
+* start commiting labeling stuff
+*
+*
+*/
+package org.gvsig.labeling.label;
+
+
+import java.awt.Color;
+import java.awt.Font;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.IntersectsEnvelopeEvaluator;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.labeling.lang.EvaluatorCreator;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.gvsig.labeling.symbol.CharacterMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.evaluator.AndEvaluator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class FeatureDependentLabeled implements ILabelingMethod {
+	
+	public static final String FEATURE_DEP_LABELED_PERSISTENCE_NAME =
+			"FEATURE_DEP_LABELED_PERSISTENCE_NAME";
+
+	private static Logger logger =
+			LoggerFactory.getLogger(FeatureDependentLabeled.class);
+	
+	private boolean flagDefinesPriorities;
+	private List<ILabelClass> classes = new ArrayList<ILabelClass>();
+
+	public void addLabelClass(ILabelClass lbl) throws IllegalArgumentException{
+		if (getLabelClassByName(lbl.getName()) !=null) {
+			throw new IllegalArgumentException("A class with the same name already exists!");
+		}
+		classes.add(lbl);
+	}
+
+	public void deleteLabelClass(ILabelClass lbl) {
+		classes.remove(lbl);
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	/*
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className", getClassName());
+		xml.putProperty("definesPriorities", definesPriorities());
+
+		LabelClass[] labels = getLabelClasses();
+		if (labels!=null) {
+			XMLEntity xmlLabels = new XMLEntity();
+			xmlLabels.putProperty("id", "LabelClasses");
+			for (int i = 0; i < labels.length; i++) {
+				xmlLabels.addChild(labels[i].getXMLEntity());
+			}
+			xml.addChild(xmlLabels);
+		}
+		return xml;
+	}
+	*/
+
+	public ILabelClass[] getLabelClasses() {
+		return classes.toArray(new ILabelClass[0]);
+	}
+
+	/*
+	public void setXMLEntity(XMLEntity xml) {
+		if (xml.contains("definesPriorities"))
+			setDefinesPriorities(xml.getBooleanProperty("definesPriorities"));
+
+		XMLEntity aux = xml.firstChild("id", "defaultLabelClass");
+
+//		if (aux!=null)
+//			defaultLabel = LabelingFactory.createLabelClassFromXML(aux);
+
+		aux = xml.firstChild("id", "LabelClasses");
+		if (aux!=null) {
+			for (int i = 0; i < aux.getChildrenCount(); i++) {
+				addLabelClass(LabelingFactory.
+						createLabelClassFromXML(aux.getChild(i)));
+			}
+		}
+	}
+	*/
+
+	public boolean allowsMultipleClass() {
+		return true;
+	}
+
+	public void renameLabelClass(ILabelClass lbl, String newName) {
+		ILabelClass label = (ILabelClass) classes.get(classes.indexOf(lbl));
+		label.setName(newName);
+	}
+
+	public FeatureSet getFeatureIteratorByLabelClass(
+			FLyrVect layer,
+			ILabelClass lc,
+			ViewPort viewPort,
+			String[] usedFields) throws DataException {
+		
+		Envelope vp_env = viewPort.getAdjustedEnvelope();
+		IProjection ipro = layer.getProjection();
+		FeatureType fty = layer.getFeatureStore().getDefaultFeatureType();
+		String geo_field_name = fty.getDefaultGeometryAttributeName();
+		
+		IntersectsEnvelopeEvaluator iee = new IntersectsEnvelopeEvaluator(
+				vp_env, ipro, fty, geo_field_name); 
+		
+		FeatureStore fsto = layer.getFeatureStore();
+		FeatureQuery fq = fsto.createFeatureQuery();
+		
+		
+		if (usedFields != null) {
+            fq.setAttributeNames(usedFields);
+        }
+		
+		if (!LabelClassUtils.isUseSqlQuery(lc)) {
+			/*
+			 * No SQL, use only view port filter
+			 */
+			fq.addFilter(iee);
+			return fsto.getFeatureSet(fq);
+		}
+		
+		/*
+		 * There is SQL
+		 */
+		String sql_str = lc.getSQLQuery();
+		if (! LabelClassUtils.validExpression(sql_str, fsto, true)) {
+			logger.error("SQL for labeling exists but is not valid: " + sql_str);
+		}
+		
+		Evaluator eval = EvaluatorCreator.getEvaluator(sql_str);
+		/*
+		 * This will make the view port evaluator be applied first
+		 */
+		AndEvaluator and_ev = new AndEvaluator(iee);
+		and_ev.addEvaluator(eval);
+		fq.addFilter(and_ev);
+		return fsto.getFeatureSet(fq);
+	}
+
+	public boolean definesPriorities() {
+		return flagDefinesPriorities;
+	}
+
+	public void setDefinesPriorities(boolean flag) {
+		if (flag == false) {
+			ILabelClass[] lcs = getLabelClasses();
+			for (int i = 0; i < lcs.length; i++) {
+				lcs[i].setPriority(0);
+			}
+		}
+		flagDefinesPriorities = flag;
+	}
+
+	public void clearAllClasses() {
+		classes.clear();
+	}
+
+	public ILabelClass getLabelClassByName(String labelName) {
+		ILabelClass[] classes = getLabelClasses();
+		for (int i = 0; i < classes.length; i++) {
+			if (classes[i].getName().equals(labelName)) {
+				return classes[i];
+			}
+		}
+		return null;
+	}
+
+	public ILabelingMethod cloneMethod() {
+		
+		ILabelingMethod resp = (ILabelingMethod) LabelClassUtils.clone(this);
+		return resp;
+	}
+	
+	public static void registerPersistent() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(FEATURE_DEP_LABELED_PERSISTENCE_NAME)==null ) {
+			DynStruct definition = manager.addDefinition(
+					FeatureDependentLabeled.class,
+					FEATURE_DEP_LABELED_PERSISTENCE_NAME,
+					FEATURE_DEP_LABELED_PERSISTENCE_NAME+" Persistence definition",
+					null, 
+					null
+			);
+			
+			definition.addDynFieldBoolean("definesPriorities").setMandatory(true);
+			definition.addDynFieldList("classes").setClassOfItems(ILabelClass.class)
+			.setMandatory(true);
+		}		
+	}	
+
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		
+		this.setDefinesPriorities(state.getBoolean("definesPriorities"));
+		List aux = state.getList("classes");
+		ILabelClass item = null;
+		Iterator iter = aux.iterator();
+		
+		try {
+			while (iter.hasNext()) {
+				item = (ILabelClass) iter.next();
+				this.addLabelClass(item);
+			}
+		} catch (IllegalArgumentException exc) {
+			throw new PersistenceException(exc);
+		}
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		
+		state.set("definesPriorities", flagDefinesPriorities);
+		state.set("classes", classes);
+		
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/OnSelectionLabeled.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/OnSelectionLabeled.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/label/OnSelectionLabeled.java	(revision 42196)
@@ -0,0 +1,193 @@
+	/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id: OnSelectionLabeled.java 10815 2007-03-20 16:16:20Z jaume $
+* $Log$
+* Revision 1.3  2007-03-20 16:16:20  jaume
+* refactored to use ISymbol instead of FSymbol
+*
+* Revision 1.2  2007/03/09 08:33:43  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/01 11:42:47  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/01/30 18:10:45  jaume
+* start commiting labeling stuff
+*
+*
+*/
+package org.gvsig.labeling.label;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * OnSelectionLabeled.java
+ *
+ *
+ * 
+ *
+ */
+public class OnSelectionLabeled implements ILabelingMethod {
+
+	private static final String FIELD_DEFAULT_LABEL = "defaultLabel";
+	private static final String ONSELECTION_LABELING_METHOD_PERSISTENCE_NAME =
+			"ONSELECTION_LABELING_METHOD_PERSISTENCE_NAME";
+	private ILabelClass defaultLabel;
+
+	/**
+	 * Empty constructor for persistence.
+	 */
+	public OnSelectionLabeled() {
+		// Nothing to do
+	}
+
+	public OnSelectionLabeled(ILabelClass defaultLabel) {
+		this.defaultLabel = defaultLabel;
+	}
+
+
+	public void addLabelClass(ILabelClass lbl) {
+		defaultLabel = lbl;
+	}
+
+
+	public void deleteLabelClass(ILabelClass lbl) {
+		// does nothing
+	}
+
+	public boolean allowsMultipleClass() {
+		return false;
+	}
+
+	public void renameLabelClass(ILabelClass lbl, String newName) {
+		// does nothing
+	}
+
+
+	public FeatureSet getFeatureIteratorByLabelClass(FLyrVect layer, ILabelClass lc, ViewPort viewPort, String[] usedFields)
+	throws DataException {
+		
+		FeatureStore fsto = layer.getFeatureStore();
+		FeatureSet fset = (FeatureSelection) fsto.getSelection();
+		return fset;
+	}
+
+	public boolean definesPriorities() {
+		return false;
+	}
+
+	public void setDefinesPriorities(boolean flag) {
+		/* nothing, since only one label class is suported */
+	}
+	
+	public ILabelClass getLabelClassByName(String labelName) {
+		return defaultLabel;
+	}
+
+	public void clearAllClasses() {
+		defaultLabel = null;
+	}
+
+	public ILabelClass[] getLabelClasses() {
+		return defaultLabel == null ? new ILabelClass[0] : new ILabelClass[] { defaultLabel };
+	}
+
+	public ILabelingMethod cloneMethod() {
+		ILabelClass lbl = (ILabelClass) LabelClassUtils.clone(this.defaultLabel);
+		OnSelectionLabeled resp = new OnSelectionLabeled(lbl);
+		return resp;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		defaultLabel = (ILabelClass) state.get(FIELD_DEFAULT_LABEL);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.persistence.PersistentState)
+	 */
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_DEFAULT_LABEL, defaultLabel);
+	}
+	
+	public static void registerPersistent() {
+
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(ONSELECTION_LABELING_METHOD_PERSISTENCE_NAME)==null ) {
+			DynStruct definition = manager.addDefinition(
+					OnSelectionLabeled.class,
+					ONSELECTION_LABELING_METHOD_PERSISTENCE_NAME,
+					ONSELECTION_LABELING_METHOD_PERSISTENCE_NAME+
+					" Persistence definition",
+					null, 
+					null
+			);
+			
+			definition.addDynFieldObject(FIELD_DEFAULT_LABEL).setMandatory(true)
+			.setClassOfValue(ILabelClass.class);
+		}
+		
+	}
+	
+	// =================================================
+	// =================================================
+	
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/LabelFieldComparator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/LabelFieldComparator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/LabelFieldComparator.java	(revision 42196)
@@ -0,0 +1,71 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.lang;
+
+import java.util.Comparator;
+
+public class LabelFieldComparator implements Comparator<LabelField> {
+
+	 public int compare(LabelField o1, LabelField o2)
+	   {
+	      if ( o1 != null && o2 == null )
+	         return -1;
+	      if ( o1 == null && o2 != null )
+	         return 1;
+	      if ( o1 == null && o2 == null )
+	         return 0;
+	      if ( o1.pos <= o2.pos )
+	         return -1;
+	      else
+	         return 1;
+	   }
+
+}
+class LabelField
+{
+   String text;
+   int pos;
+   public LabelField(String text,int pos)
+   {
+      this.text = text;
+      this.pos = pos;
+   }
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/EvaluatorCreator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/EvaluatorCreator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/EvaluatorCreator.java	(revision 42196)
@@ -0,0 +1,59 @@
+package org.gvsig.labeling.lang;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.gvsig.tools.evaluator.EvaluatorWithDescriptions;
+import org.gvsig.tools.evaluator.sqljep.SQLJEPEvaluator;
+
+
+/**
+ * 
+ * Utility class to centralize the creation of an
+ * @link {@link EvaluatorWithDescriptions}
+ * 
+ * TODO Perhaps create a manager in Tools to perform this operation
+ * 
+ * @author jldominguez
+ *
+ */
+public class EvaluatorCreator {
+
+	private static Map<String, EvaluatorWithDescriptions> evCache =
+			new HashMap<String, EvaluatorWithDescriptions>();
+	
+    /**
+     * Create an {@link EvaluatorWithDescriptions} that uses
+     * the string expression provided
+     * 
+     * @param expr
+     * @return
+     */
+    public static EvaluatorWithDescriptions getEvaluator(String expr) {
+    	
+    	EvaluatorWithDescriptions resp = evCache.get(expr);
+    	if (resp == null) {
+    		resp = new SQLJEPEvaluator(expr);
+    		if (evCache.size() > 100) {
+    			removeOne(evCache);
+    		}
+    		evCache.put(expr, resp);
+    	}
+        return resp; 
+    }
+    
+	private static void removeOne(
+			Map<String, EvaluatorWithDescriptions> themap) {
+		
+		Iterator<String> iter = themap.keySet().iterator();
+		int count = 50;
+		String k = null;
+		while (iter.hasNext() && count > 0) {
+			k = iter.next();
+			count--;
+		}
+		themap.remove(k);
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/LabelClassUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/LabelClassUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/lang/LabelClassUtils.java	(revision 42196)
@@ -0,0 +1,133 @@
+package org.gvsig.labeling.lang;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorWithDescriptions;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentContext;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.persistence.spi.PersistentContextServices;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LabelClassUtils {
+
+    private static Logger logger =
+            LoggerFactory.getLogger(LabelClassUtils.class);
+
+	private static PersistenceManager persman =
+			ToolsLocator.getPersistenceManager();
+
+	public static boolean isUseSqlQuery(ILabelClass lbl) {
+		String str = lbl.getSQLQuery();
+		return str != null && str.trim().length() > 0;
+	}
+	
+	
+	public static Object clone(Persistent persi) {
+		
+		PersistentContext context = null;
+		Object resp = null;
+		PersistentState state = null;
+        try {
+			state = persman.getState(persi, true);
+		} catch (PersistenceException e) {
+			logger.error("While cloning ILabelClass", e);
+			return persi;
+		}
+        context = state.getContext();
+        if (context instanceof PersistentContextServices) {
+            /*
+             * Ensure that previous instances are not used,
+             * so objects are recreated
+             */
+            ((PersistentContextServices) context).clear();
+        }
+        try {
+			resp = persman.create(state);
+		} catch (Exception e) {
+			logger.error("While cloning ILabelClass", e);
+			return persi;
+		}
+        return resp;
+	}
+	
+	public static Object evaluate(String expr, EvaluatorData data) {
+		
+		Evaluator ev = EvaluatorCreator.getEvaluator(expr);
+        Object resp_obj = null;
+        try {
+            resp_obj = ev.evaluate(data);
+        } catch (EvaluatorException e) {
+            /*
+             * Parse exception or field not found or
+             * divison by zero, etc. Malformed expression, not valid
+             */
+            return null;
+        } catch (Exception e) {
+            /*
+             * All other exceptions. Should not happen often.
+             * We assume a strange exception (NPE, etc) and decide it's not a valid expression
+             */
+            return null;
+        }	
+        return resp_obj;
+	}
+	
+	
+	public static boolean validExpression(
+			String str, FeatureStore sto, boolean must_be_boolean) {
+		
+    	Feature dummyfeat = null;;
+		try {
+			dummyfeat = sto.createNewFeature(true);
+		} catch (DataException e1) {
+			logger.error("While getting dummy feature in labeling expression.", e1);
+			return false;
+		}
+		
+		
+        EvaluatorWithDescriptions evde = EvaluatorCreator.getEvaluator(str);
+        Object resp_obj = null;
+        try {
+            /*
+             * Try evaluate feature with default values
+             */
+            resp_obj = evde.evaluate(dummyfeat.getEvaluatorData());
+        } catch (EvaluatorException e) {
+            /*
+             * Parse exception or field not found or
+             * divison by zero, etc.
+             * Malformed expression, not valid
+             */
+            return false;
+        } catch (Exception e) {
+            /*
+             * All other exceptions.
+             * Should not happen often.
+             * We assume a strange
+             * exception (NPE, etc) and decide it's not a valid
+             * expression
+             *  
+             */
+            return false;
+        }
+
+        if (must_be_boolean) {
+        	return resp_obj.getClass() == Boolean.class;
+        } else {
+        	return true;
+        }
+		
+	}
+	
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/MultiShapePlacementProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/MultiShapePlacementProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/MultiShapePlacementProperties.java	(revision 42196)
@@ -0,0 +1,160 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.placements.AbstractPlacementConstraints;
+import org.gvsig.labeling.placements.LinePlacementConstraints;
+import org.gvsig.labeling.placements.MultiShapePlacementConstraints;
+import org.gvsig.labeling.placements.PlacementManager;
+import org.gvsig.labeling.placements.PointPlacementConstraints;
+import org.gvsig.labeling.placements.PolygonPlacementConstraints;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class MultiShapePlacementProperties extends JPanel
+implements IPlacementProperties {
+	
+	private static Logger logger = LoggerFactory.getLogger(
+			MultiShapePlacementProperties.class);
+	private static final long serialVersionUID = 2935114466845029008L;
+	private PlacementProperties pointProperties;
+	private PlacementProperties lineProperties;
+	private PlacementProperties polygonProperties;
+	private DuplicateLayersMode dupMode;
+	
+	
+	public MultiShapePlacementProperties(
+			MultiShapePlacementConstraints constraints) throws Exception {
+		
+		MultiShapePlacementConstraints c = null;
+		if (constraints != null) {
+			c = (MultiShapePlacementConstraints) constraints.clone();
+		} else {
+			c = (MultiShapePlacementConstraints)
+					PlacementManager.createPlacementConstraints(TYPES.GEOMETRY);
+		}
+		
+		this.pointProperties = new PlacementProperties(
+				c.getPointConstraints(), TYPES.POINT, getDuplicatesMode());
+		this.lineProperties = new PlacementProperties(
+				c.getLineConstraints(), TYPES.CURVE, getDuplicatesMode());
+		this.polygonProperties = new PlacementProperties(
+				c.getPolygonConstraints(), TYPES.SURFACE, getDuplicatesMode());
+		initialize();
+	}
+	
+	private DuplicateLayersMode getDuplicatesMode() {
+		if (dupMode == null) {
+			dupMode = new DuplicateLayersMode(null);
+		}
+		return dupMode;
+	}
+	
+	private void initialize() { 
+		setLayout(new BorderLayout());
+		JPanel aux = new JPanel(new BorderLayout());
+		JTabbedPane p = new JTabbedPane();
+		
+		p.addTab(Messages.getText("points"), pointProperties);
+		p.addTab(Messages.getText("lines"), lineProperties);
+		p.addTab(Messages.getText("polygon"), polygonProperties);
+		setLayout(new BorderLayout());
+		aux.add(p, BorderLayout.CENTER);
+		aux.add(getDuplicatesMode(), BorderLayout.SOUTH);
+		add(aux, BorderLayout.CENTER);
+	}
+
+	public IPlacementConstraints getPlacementConstraints() {
+		return new MultiShapePlacementConstraints(
+				(PointPlacementConstraints) pointProperties.getPlacementConstraints(),
+				(LinePlacementConstraints) lineProperties.getPlacementConstraints(),
+				(PolygonPlacementConstraints) polygonProperties.getPlacementConstraints());
+				
+	}
+	
+	public WindowInfo getWindowInfo() {
+		return pointProperties.getWindowInfo();
+	}
+	
+	public Object getWindowProfile() {
+		return pointProperties.getWindowProfile();
+	}
+	
+	
+	public void actionPerformed(ActionEvent e) {
+		boolean okPressed = "OK".equals(e.getActionCommand()); 
+		boolean cancelPressed = "CANCEL".equals(e.getActionCommand());
+		if (okPressed || cancelPressed) {
+			if (okPressed) {
+				try {
+					pointProperties.applyConstraints();
+					lineProperties.applyConstraints();
+					polygonProperties.applyConstraints();
+				} catch (GeometryException e1) {
+					logger.error("While applying constraints.", e1);
+				}
+			}
+
+			if ("CANCEL".equals(e.getActionCommand())) {
+				pointProperties.constraints   = pointProperties.oldConstraints;
+				lineProperties.constraints    = lineProperties.oldConstraints;
+				polygonProperties.constraints = polygonProperties.oldConstraints;
+			}
+			
+			ApplicationLocator.getManager().getUIManager().closeWindow(this);
+			
+			return;
+		}
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/AbstractLabelingMethodPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/AbstractLabelingMethodPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/AbstractLabelingMethodPanel.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.beans.PropertyChangeListener;
+
+import javax.swing.JPanel;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+
+
+public abstract class AbstractLabelingMethodPanel extends JPanel implements PropertyChangeListener {
+	
+	public static final String PLACEMENT_CONSTRAINTS = "PLACEMENT_CONSTRAINTS";
+	public static final String ALLOW_OVERLAP = "ALLOW_OVERLAP";
+	public static final String ZOOM_CONSTRAINTS= "ZOOM_CONSTRAINTS";
+	
+	protected FLyrVect layer;
+	protected ILabelingMethod method;
+	
+	public abstract String getName();
+	public abstract Class<? extends ILabelingMethod> getLabelingMethodClass();
+	public void setModel(ILabelingMethod method, FLyrVect srcLayer)
+			throws ReadException {
+		
+		if (srcLayer == null) {
+			throw new ReadException("FLyrVect is null",
+					new Exception("FLyrVect is null"));
+		}
+		this.layer = srcLayer;
+
+		try {
+			if (method!= null && method.getClass().equals(getLabelingMethodClass())) {
+				this.method = method;
+			} else {
+				this.method = getLabelingMethodClass().newInstance();
+			}
+			initializePanel();
+			
+		} catch (Exception e) {
+			
+			throw new ReadException(
+					srcLayer.getFeatureStore().getName(), 
+					new Exception("Unable to load labeling method. Is it in your classpath?", e)); 
+		}
+		
+		try {
+			fillPanel(this.method, srcLayer.getFeatureStore().getDefaultFeatureType());
+		} catch (DataException de) {
+			throw new ReadException(srcLayer.getFeatureStore().getName(), de);
+		}
+		
+	}
+	
+	protected abstract void initializePanel() ;
+	public abstract void fillPanel(
+			ILabelingMethod method,
+			FeatureType ftype) throws ReadException;
+	
+	public String toString() {
+		return getName();
+	}
+	
+	public ILabelingMethod getMethod() {
+		return method; 
+	}
+	
+	public boolean equals(Object obj) {
+		if (obj == null) return false;
+		return getClass().equals(obj.getClass());
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/DefaultLabeling.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/DefaultLabeling.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/DefaultLabeling.java	(revision 42196)
@@ -0,0 +1,387 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.IllegalComponentStateException;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.geom.Rectangle2D;
+import java.beans.PropertyChangeEvent;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.gui.styling.LayerPreview;
+import org.gvsig.labeling.label.GeneralLabelingStrategy;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.DefaultLabelingMethod;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultLabeling extends AbstractLabelingMethodPanel implements
+		ActionListener {
+
+	private static final Logger logger = LoggerFactory
+			.getLogger(DefaultLabeling.class);
+
+	private static final long serialVersionUID = 7100208944546698724L;
+	private ILabelClass defaultLabel;
+	private IPlacementConstraints placementConstraints;
+	private LayerPreview layerPrev;
+	private JCheckBox enableLayerPrev;
+	private LabelClassPreview labelPrev;
+	private JButton btnProperties;
+
+	private FeatureAttributeDescriptor[] fieldDescs;
+
+	private boolean allowOverlap;
+	private IZoomConstraints zoomConstraints;
+	private LabelClassProperties lcProp;
+
+	public Class<? extends ILabelingMethod> getLabelingMethodClass() {
+		return DefaultLabelingMethod.class;
+	}
+
+	public String getName() {
+		return Messages.getText("label_features_in_the_same_way") + ".";
+	}
+
+	@Override
+	public void fillPanel(ILabelingMethod method, FeatureType fty) {
+		try {
+			if (enableLayerPrev.isSelected()) {
+				layerPrev.setLayer(layer);
+			} else {
+				layerPrev.setLayer(null);
+			}
+
+			fieldDescs = fty.getAttributeDescriptors();
+
+			ILabelingStrategy labeling = layer.getLabelingStrategy();
+			if (!(labeling instanceof GeneralLabelingStrategy)) {
+				labeling = new GeneralLabelingStrategy();
+				labeling.setLayer(layer);
+				layer.setLabelingStrategy(labeling);
+			}
+
+		} catch (Exception e) {
+			NotificationManager.addWarning(e.getMessage(), e);
+		}
+
+		ILabelClass lc = null;
+		if (method.getLabelClasses() != null
+				&& method.getLabelClasses().length > 0) {
+			lc = method.getLabelClasses()[0];
+		} else {
+			lc = SymbologyLocator.getSymbologyManager().createDefaultLabel();
+		}
+		setLabel(lc);
+		getLcProp();
+	}
+
+	private JButton getBtnProperties() {
+		if (btnProperties == null) {
+			btnProperties = new JButton(Messages.getText("properties"));
+			btnProperties.addActionListener(this);
+		}
+		return btnProperties;
+	}
+
+	private LabelClassPreview getLabelPrev() {
+		if (labelPrev == null) {
+			labelPrev = new LabelClassPreview();
+		}
+		return labelPrev;
+	}
+
+	private JCheckBox getEnableLayerPreview() {
+		if (enableLayerPrev == null) {
+			enableLayerPrev = new JCheckBox(
+					Messages.getText("Enable_layer_preview"));
+			enableLayerPrev.addItemListener(new ItemListener() {
+
+				public void itemStateChanged(ItemEvent e) {
+					try {
+						if (e.getStateChange() == ItemEvent.SELECTED) {
+							layerPrev.setLayer(layer);
+                                                        updatePreview();
+						} else if (e.getStateChange() == ItemEvent.DESELECTED) {
+							layerPrev.setLayer(null);
+						}
+					} catch (ReadException e1) {
+						logger.error("While setting changing layer in preview",
+								e1);
+					}
+				}
+			});
+		}
+		return enableLayerPrev;
+	}
+
+	private LayerPreview getLayerPreview() {
+		if (layerPrev == null) {
+			layerPrev = new LayerPreview();
+		}
+		return layerPrev;
+	}
+
+	@Override
+	protected void initializePanel() {
+		setLayout(new BorderLayout());
+		JSplitPane scrl = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+		scrl.add(getLayerPreview(), JSplitPane.LEFT);
+
+		labelPrev = getLabelPrev(); // new LabelClassPreview();
+		JPanel aux = new JPanel(new BorderLayout());
+		aux.add(new JBlank(10, 10), BorderLayout.NORTH);
+		aux.add(new JBlank(10, 10), BorderLayout.WEST);
+		aux.add(labelPrev, BorderLayout.CENTER);
+		aux.add(new JBlank(10, 10), BorderLayout.EAST);
+		JPanel aux2 = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10));
+		btnProperties = getBtnProperties();
+		aux2.add(btnProperties);
+		aux.add(aux2, BorderLayout.SOUTH);
+		scrl.add(aux, JSplitPane.RIGHT);
+		add(scrl, BorderLayout.CENTER);
+		scrl.setDividerLocation(500);
+
+		getEnableLayerPreview().setSelected(false);
+		add(enableLayerPrev, BorderLayout.SOUTH);
+	}
+
+	private LabelClassProperties getLcProp() {
+		if (lcProp == null) {
+
+			int n = this.fieldDescs.length;
+			String[] fnames = new String[n];
+			int[] ftypes = new int[n];
+			for (int i = 0; i < n; i++) {
+				fnames[i] = fieldDescs[i].getName();
+				ftypes[i] = fieldDescs[i].getType();
+			}
+			lcProp = new LabelClassProperties(this.layer.getFeatureStore());
+			lcProp.setLabelClass(method.getLabelClasses()[0]);
+		}
+		return lcProp;
+
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource().equals(getBtnProperties())) {
+			LabelClassProperties lcProp = getLcProp();
+			ILabelClass lc = defaultLabel;
+			lcProp.setLabelClass(lc);
+			boolean eval = false;
+			while (!eval) {
+
+				ApplicationLocator.getManager().getUIManager()
+						.addWindow(lcProp);
+				if (!lcProp.isAccepted()) {
+					break;
+				}
+				;
+				lc = lcProp.getLabelClass();
+				eval = checkValidSQL(lc);
+				if (eval) {
+					/*
+					 * Show warning if number of expressions != number of
+					 * rectangles
+					 */
+					checkRectangles(lc);
+				}
+			}
+			setLabel(lc);
+		}
+	}
+
+	/**
+	 * Checks whether the number of expressions euqls the number of rectangles
+	 * in the style
+	 *
+	 * @param lc
+	 * @return
+	 */
+	private void checkRectangles(ILabelClass lc) {
+
+		ILabelStyle lbl_sty = lc.getLabelStyle();
+		if (lbl_sty != null) {
+			String[] lbl_exps = lc.getLabelExpressions();
+			Rectangle2D[] lbl_rects = lbl_sty.getTextBounds();
+			int empty = countEmpty(lbl_exps);
+
+			if (lbl_exps != null && lbl_rects != null
+					&& (empty > 0 || (lbl_exps.length != lbl_rects.length))) {
+
+				String[] pars = new String[3];
+				pars[0] = Integer.toString(lbl_exps.length);
+				pars[1] = Integer.toString(empty);
+				pars[2] = Integer.toString(lbl_rects.length);
+
+				JOptionPane
+						.showMessageDialog(
+								ApplicationLocator.getManager()
+										.getRootComponent(),
+								Messages.getText(
+										"_There_are_N_expressions_N_are_empty_and_N_rectangles_"
+												+ "Check_label_expressions_and_background_image_properties",
+										pars), Messages
+										.getText("label_expression_editor"),
+								JOptionPane.WARNING_MESSAGE);
+
+			}
+		}
+
+	}
+
+	private int countEmpty(String[] strs) {
+		if (strs == null || strs.length == 0) {
+			return 0;
+		} else {
+			int resp = 0;
+			for (int i = 0; i < strs.length; i++) {
+				if (strs[i] == null || strs[i].trim().length() == 0) {
+					resp++;
+				}
+			}
+			return resp;
+		}
+	}
+
+	private boolean checkValidSQL(ILabelClass lc) {
+
+		String sqlQuery = lc.getSQLQuery();
+		if (sqlQuery != null && sqlQuery.trim().length() > 0) {
+			return LabelClassUtils.validExpression(sqlQuery,
+					layer.getFeatureStore(), true);
+		} else {
+			return true;
+		}
+
+	}
+
+	private void setLabel(ILabelClass labelClass) {
+
+		defaultLabel = labelClass;
+		labelPrev.setLabelClass(defaultLabel);
+		method = newMethodForThePreview(defaultLabel);
+
+		updatePreview();
+
+	}
+
+	protected ILabelingMethod newMethodForThePreview(ILabelClass defaultLabel) {
+
+		ILabelingMethod resp = SymbologyLocator.getSymbologyManager()
+				.createDefaultLabelingMethod();
+		resp.addLabelClass(defaultLabel);
+		return resp;
+	}
+
+        private void updatePreview() {
+
+            ILabelingStrategy stra = layer.getLabelingStrategy();
+            if (method == null) {
+                stra.setLabelingMethod(newMethodForThePreview(defaultLabel));
+            } else {
+                stra.setLabelingMethod(method);
+            }
+
+            layer.setIsLabeled(true);
+            try {
+                Rectangle r = layerPrev.getBounds();
+                r.setLocation(layerPrev.getLocationOnScreen());
+                layerPrev.paintImmediately(r);
+                layerPrev.doLayout();
+            } catch (IllegalComponentStateException ex) {
+                        // this happens when the component is not showing in the
+                // screen. If that is the case, then we don't need to do
+                // anything.
+            }
+        }
+
+	public void propertyChange(PropertyChangeEvent evt) {
+
+		String prop = evt.getPropertyName();
+		ILabelingStrategy strat = layer.getLabelingStrategy();
+
+		if (AbstractLabelingMethodPanel.PLACEMENT_CONSTRAINTS.equals(prop)) {
+			placementConstraints = (IPlacementConstraints) evt.getNewValue();
+			strat.setPlacementConstraints(placementConstraints);
+		} else if ((strat instanceof GeneralLabelingStrategy)
+				&& AbstractLabelingMethodPanel.ALLOW_OVERLAP.equals(prop)) {
+			allowOverlap = (Boolean) evt.getNewValue();
+			((GeneralLabelingStrategy) strat).setAllowOverlapping(allowOverlap);
+		} else if (AbstractLabelingMethodPanel.ZOOM_CONSTRAINTS.equals(prop)) {
+			zoomConstraints = (IZoomConstraints) evt.getNewValue();
+			strat.setZoomConstraints(zoomConstraints);
+		}
+
+		updatePreview();
+	}
+
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		if (layerPrev != null) {
+			layerPrev.setEnabled(enabled);
+		}
+		;
+		if (labelPrev != null) {
+			labelPrev.setEnabled(enabled);
+		}
+		;
+		if (btnProperties != null) {
+			btnProperties.setEnabled(enabled);
+		}
+		;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/FeatureDependent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/FeatureDependent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/FeatureDependent.java	(revision 42196)
@@ -0,0 +1,588 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.util.Collection;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+
+import org.gvsig.app.gui.labeling.LabelClassEditor;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClassFactory;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.gui.beans.swing.celleditors.BooleanTableCellEditor;
+import org.gvsig.gui.beans.swing.cellrenderers.BooleanTableCellRenderer;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.label.FeatureDependentLabeled;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FeatureDependent extends AbstractLabelingMethodPanel implements ActionListener{
+        private static final Logger logger = LoggerFactory.getLogger(FeatureDependent.class);
+    
+	private static final long serialVersionUID = 5493451803343695650L;
+	private static int NAME_FIELD_INDEX = 0;
+	private static int PREVIEW_FIELD_INDEX = 1;
+	private static int FILTER_FIELD_INDEX = 2;
+	private static int LABEL_EXPRESSION_FIELD_INDEX = 3;
+	private static int VISIBLE_FIELD_INDEX = 4;
+	JTable tblClasses = null;
+	private JButton btnMoveUpClass;
+	private JButton btnAddClass;
+	private JCheckBox chkLabel;
+	private JCheckBox chkDefinePriorities;
+	private JScrollPane scrlPan;
+	private boolean openEditor = false;
+	private JButton btnMoveDownClass;
+	private JButton btnDelClass;
+	
+	/*
+	private String[] fieldNames;
+	private int[] fieldTypes;
+	*/
+	private JPanel buttonPanel;
+    private JComboBox comboLabelClassFactoryToUse;
+
+	@Override
+	public String getName() {
+		
+		return Messages.getText(
+				"define_classes_of_features_and_label_each_differently")+".";
+	}
+
+	@Override
+	public Class<? extends ILabelingMethod> getLabelingMethodClass() {
+		return FeatureDependentLabeled.class;
+	}
+
+
+	private JCheckBox getChkDefinePriorities() {
+		if (chkDefinePriorities == null) {
+			chkDefinePriorities = new JCheckBox(Messages.getText("label_priority"));
+			chkDefinePriorities.addActionListener(this);
+			chkDefinePriorities.setName("CHK_DEFINE_PRIORITIES");
+		}
+		return chkDefinePriorities;
+	}
+
+
+	private JButton getBtnDelClass() {
+		if (btnDelClass == null) {
+			btnDelClass = new JButton(Messages.getText("delete"));
+			btnDelClass.setName("BTNDELCLASS");
+			btnDelClass.addActionListener(this);
+		}
+		return btnDelClass;
+	}
+
+	private JButton getBtnAddClass() {
+		if (btnAddClass == null) {
+			btnAddClass = new JButton(Messages.getText("add"));
+			btnAddClass.setName("BTNADDCLASS");
+			btnAddClass.addActionListener(this);
+		}
+		return btnAddClass;
+	}
+
+	private JButton getBtnMoveUpClass() {
+		if (btnMoveUpClass == null) {
+			btnMoveUpClass = new JButton(Messages.getText("move_up"));
+			btnMoveUpClass.setName("BTNMOVEUPCLASS");
+			btnMoveUpClass.addActionListener(this);
+		}
+		return btnMoveUpClass;
+	}
+
+	private JButton getBtnMoveDownClass() {
+		if (btnMoveDownClass == null) {
+			btnMoveDownClass = new JButton(Messages.getText("move_down"));
+			btnMoveDownClass.setName("BTNMOVEDOWNCLASS");
+			btnMoveDownClass.addActionListener(this);
+		}
+		return btnMoveDownClass;
+	}
+
+	private JScrollPane getCenterScrl() {
+
+			scrlPan = new JScrollPane(getTblClasses());
+			scrlPan.setPreferredSize(new Dimension(180, 300));
+
+		return scrlPan;
+	}
+
+
+	private JTable getTblClasses() {
+
+			tblClasses = new JTable(new LabelClassTableModel());
+		tblClasses.setRowHeight(50);
+		tblClasses.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		tblClasses.addMouseListener(new MouseAdapter() {
+			int prevRow =-1;
+			@Override
+			public void mouseClicked(MouseEvent e) {
+					if (!tblClasses.isEnabled()){
+						return;
+					}
+					int col = tblClasses.getColumnModel().getColumnIndexAtX(e.getX());
+					int row = (int) ((e.getY()-tblClasses.getLocation().getY()) / tblClasses.getRowHeight());
+					if(!(row > tblClasses.getRowCount()-1 || col > tblClasses.getColumnCount()-1))
+					{
+						openEditor = (row == prevRow && e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2
+						) ;
+						prevRow = row;
+						if (openEditor)
+							tblClasses.editCellAt(row, col);
+					}
+				}
+		});
+
+		tblClasses.getModel().addTableModelListener(new TableModelListener() {
+
+			public void tableChanged(TableModelEvent e) {
+				if (!tblClasses.isEnabled()){
+					return;
+				}
+
+				if(e.getColumn() == VISIBLE_FIELD_INDEX){
+					ILabelClass oldLc = (ILabelClass) tblClasses.getValueAt(e.getFirstRow(), PREVIEW_FIELD_INDEX);
+					oldLc.setVisible(Boolean.valueOf(tblClasses.getValueAt(e.getFirstRow(), VISIBLE_FIELD_INDEX).toString()));
+				}
+			}
+
+		});
+
+		TableColumnModel cm = tblClasses.getColumnModel();
+
+		tblClasses.getColumnModel().getColumn(PREVIEW_FIELD_INDEX).setCellRenderer(new TableCellRenderer() {
+
+			public Component getTableCellRendererComponent(JTable table,
+					Object value, boolean isSelected, boolean hasFocus,
+					int row, int column) {
+				LabelClassPreview lcPr = new LabelClassPreview();
+				lcPr.setLabelClass((ILabelClass) value);
+				return lcPr;
+			}
+
+		});
+		tblClasses.getColumnModel().getColumn(VISIBLE_FIELD_INDEX).setCellRenderer(new BooleanTableCellRenderer(false));
+		tblClasses.getColumnModel().getColumn(LABEL_EXPRESSION_FIELD_INDEX).setCellRenderer(new TableCellRenderer() {
+			public Component getTableCellRendererComponent(JTable table,
+					Object value, boolean isSelected, boolean hasFocus,
+					int row, int column) {
+				String expr = null;
+				if (value != null)
+					expr = (String) value;
+				if (expr == null)
+					expr = "";
+				// LabelExpressionParser.tokenFor(LabelExpressionParser.EOEXPR);
+
+//				expr = expr.replaceAll(LabelExpressionParser.tokenFor(LabelExpressionParser.EOFIELD), " | ");
+				// expr = expr.substring(0, expr.length()-1);
+				return new JLabel("<html><p>"+expr+"</p></html>", JLabel.CENTER);
+			}
+		});
+
+		// the editors
+
+		for (int i = 0; i < tblClasses.getColumnModel().getColumnCount(); i++) {
+			if (i!= VISIBLE_FIELD_INDEX) {
+				tblClasses.getColumnModel().getColumn(i).setCellEditor(
+						new LabelClassCellEditor(this.layer.getFeatureStore()));
+			} else {
+				tblClasses.getColumnModel().getColumn(VISIBLE_FIELD_INDEX).
+				setCellEditor(new BooleanTableCellEditor(tblClasses));
+			}
+		}
+		((DefaultTableModel)tblClasses.getModel()).fireTableDataChanged();
+		repaint();
+
+		return tblClasses;
+	}
+
+        private class LabelClassCellEditor extends AbstractCellEditor implements TableCellEditor {
+
+            private static final long serialVersionUID = 6399823783851437400L;
+            private FeatureStore fsto = null;
+
+            public LabelClassCellEditor(FeatureStore store) {
+                fsto = store;
+            }
+
+            public Component getTableCellEditorComponent(
+                    JTable table, Object value, boolean isSelected, int row, int column) {
+
+                if (openEditor) {
+                    SymbologySwingManager manager = SymbologySwingLocator.getSwingManager();
+                    ILabelClass oldLc = (ILabelClass) tblClasses.getValueAt(row, PREVIEW_FIELD_INDEX);
+                    oldLc.setVisible(Boolean.valueOf(tblClasses.getValueAt(row, VISIBLE_FIELD_INDEX).toString()));
+                    LabelClassEditor lcProp = manager.createLabelClassEditor(oldLc,fsto);
+                    oldLc.setTexts(new String[]{oldLc.getName()});
+
+                    lcProp.showDialog();
+                    if( !lcProp.isAccepted() ) {
+                        return null;
+                    }
+                    ILabelClass newLc = lcProp.getLabelClass();
+
+                    LabelClassTableModel m = (LabelClassTableModel) tblClasses.getModel();
+                    Boolean changeDone = false;
+
+                    if (!(oldLc.getName().equals(newLc.getName()))) {
+                        if (!checSameLablClassName(m, newLc.getName())) {
+
+                            m.setValueAt(newLc.getStringLabelExpression(), row, LABEL_EXPRESSION_FIELD_INDEX);
+                            m.setValueAt(newLc.getName(), row, NAME_FIELD_INDEX);
+                            m.setValueAt(newLc, row, PREVIEW_FIELD_INDEX);
+                            m.setValueAt(newLc.getSQLQuery(), row, FILTER_FIELD_INDEX);
+                            m.setValueAt(newLc.isVisible(), row, VISIBLE_FIELD_INDEX);
+                            fireEditingStopped(); //Make the renderer reappear.
+                            changeDone = true;
+                        } else {
+                            JOptionPane.showMessageDialog(tblClasses,
+                                    Messages.getText(
+                                            "cannot_exist_two_label_classes_with_the_same_name")
+                                    + "\n",
+                                    Messages.getText("error"),
+                                    JOptionPane.ERROR_MESSAGE);
+                            changeDone = true;
+                        }
+                    }
+                    if (!changeDone) {
+                        m.setValueAt(newLc.getStringLabelExpression(), row, LABEL_EXPRESSION_FIELD_INDEX);
+                        m.setValueAt(newLc.getName(), row, NAME_FIELD_INDEX);
+                        m.setValueAt(newLc, row, PREVIEW_FIELD_INDEX);
+                        m.setValueAt(newLc.getSQLQuery(), row, FILTER_FIELD_INDEX);
+                        m.setValueAt(newLc.isVisible(), row, VISIBLE_FIELD_INDEX);
+                        fireEditingStopped(); //Make the renderer reappear.
+                        changeDone = true;
+                    }
+                }
+
+                method.clearAllClasses();
+                ILabelClass[] classes = ((LabelClassTableModel) tblClasses.getModel()).toLabelClassArray();
+                for (int i = 0; i < classes.length; i++) {
+                    method.addLabelClass(classes[i]);
+                }
+
+                openEditor = false;
+                return null;
+            }
+
+            public Object getCellEditorValue() {
+                return null;
+            }
+
+        }
+
+
+	private boolean checSameLablClassName(LabelClassTableModel mod, String name) {
+		for (int i = 0; i < mod.getRowCount(); i++) {
+			if(name.equals(mod.getLabelAtRow(i).getName()))
+				return true;
+		}
+		return false;
+	}
+
+
+	private class LabelClassTableModel extends DefaultTableModel {
+		
+		private static final long serialVersionUID = -9152998982339430209L;
+		Object[][] values;
+
+		private String[] classesTableFieldNames = new String[] {
+				Messages.getText("name"),
+				Messages.getText("preview"),
+				Messages.getText("filter"),
+				Messages.getText("label_expression"),
+				Messages.getText("visible"),
+		};
+
+
+		public LabelClassTableModel() {
+			super();
+			ILabelClass[] labelClasses = method.getLabelClasses();
+
+			values = new Object[labelClasses.length][classesTableFieldNames.length];
+			for (int i = 0; i < values.length; i++) {
+				values[i][PREVIEW_FIELD_INDEX] = labelClasses[i];
+				values[i][NAME_FIELD_INDEX] = labelClasses[i].getName();
+				values[i][FILTER_FIELD_INDEX] = labelClasses[i].getSQLQuery();
+				values[i][LABEL_EXPRESSION_FIELD_INDEX] = labelClasses[i].getStringLabelExpression();
+				values[i][VISIBLE_FIELD_INDEX] = labelClasses[i].isVisible();
+			}
+			setDataVector(values, classesTableFieldNames);
+		}
+
+		public String getColumnName(int col) {
+			return classesTableFieldNames[col];
+		}
+
+		public int getColumnCount() {
+			return classesTableFieldNames.length;
+		}
+
+		@Override
+		public boolean isCellEditable(int row, int column) {
+			return true;
+		}
+
+		public ILabelClass getLabelAtRow(int row) {
+			return (ILabelClass) getValueAt(row, PREVIEW_FIELD_INDEX);
+		}
+
+		public ILabelClass[] toLabelClassArray() {
+			ILabelClass[] classes = new ILabelClass[getRowCount()];
+			for (int i = 0; i < classes.length; i++) {
+				classes[i] = getLabelAtRow(i);
+				if (getChkDefinePriorities().isSelected()) {
+					classes[i].setPriority(i);
+				}
+			}
+			return classes;
+		}
+
+		public void setClassArray(ILabelClass[] classes) {
+			for (int i = 0; i < classes.length; i++) {
+					setValueAt(classes[i],i,PREVIEW_FIELD_INDEX);
+					setValueAt(classes[i].getName(),i,NAME_FIELD_INDEX);
+					setValueAt(classes[i].getSQLQuery(),i,FILTER_FIELD_INDEX);
+					setValueAt(classes[i].getStringLabelExpression(),i,LABEL_EXPRESSION_FIELD_INDEX);
+					setValueAt(classes[i].isVisible(),i,VISIBLE_FIELD_INDEX);
+			}
+
+		}
+
+	}
+
+	@Override
+	protected void initializePanel() {
+
+			setLayout(new BorderLayout());
+			JPanel panel = new JPanel(new BorderLayout());
+			
+			GridLayout gl = new GridLayout(4,1);
+			buttonPanel = new JPanel(gl);
+			buttonPanel.add(getBtnAddClass());
+			buttonPanel.add(getBtnDelClass());
+			// buttonPanel.addComponent(new JBlank(10, 10));
+			buttonPanel.add(getBtnMoveUpClass());
+			buttonPanel.add(getBtnMoveDownClass());
+			
+			JPanel auxp = new JPanel();
+			auxp.add(buttonPanel);
+			
+			panel.add(auxp, BorderLayout.EAST);
+			panel.add(getChkDefinePriorities(), BorderLayout.NORTH);
+                        
+                        JPanel centro = new JPanel(new BorderLayout());
+                        centro.add(getLabelClassSelector(), BorderLayout.NORTH);
+                        centro.add(getCenterScrl(), BorderLayout.CENTER);
+			panel.add(centro, BorderLayout.CENTER);
+                        
+			add(panel,BorderLayout.CENTER);
+		}
+
+
+        private JPanel getLabelClassSelector() {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            SymbologyManager symbologyMamanger = SymbologyLocator.getSymbologyManager();
+            
+            JPanel panel = new JPanel(new BorderLayout());
+            panel.add(new JLabel(i18nManager.getTranslation("_Label_type_to_use_XcolonX")), BorderLayout.WEST);
+            
+            DefaultComboBoxModel model = new DefaultComboBoxModel();
+            Collection<ILabelClassFactory> factories = symbologyMamanger.getLabelClassFactories();
+            for( ILabelClassFactory factory : factories ) {
+                model.addElement(factory);
+            }
+            this.comboLabelClassFactoryToUse = new JComboBox(model);
+            panel.add(comboLabelClassFactoryToUse, BorderLayout.CENTER);
+            if( model.getSize()>0 ) {
+                comboLabelClassFactoryToUse.setSelectedIndex(0);
+            }
+            return panel;
+        }
+        
+	public void fillPanel(ILabelingMethod method, FeatureType fty)
+	throws ReadException {
+		
+		if (method == null) {
+			this.method = new FeatureDependentLabeled();
+		}
+		chkDefinePriorities.setSelected(this.method.definesPriorities());
+		repaint();
+	}
+
+	private void swapClass(int classIndex, int targetPos,int numOfElements) {
+
+		ILabelClass[] classes = ((LabelClassTableModel)tblClasses.getModel()).toLabelClassArray();
+		ILabelClass aux = classes[targetPos];
+		classes[targetPos] = classes[classIndex];
+		classes[classIndex] = aux;
+		((LabelClassTableModel)tblClasses.getModel()).setClassArray(classes);
+	}
+
+        public void actionPerformed(ActionEvent e) {
+            if (method == null) {
+                return;
+            }
+
+            JComponent c = (JComponent) e.getSource();
+            LabelClassTableModel mod = ((LabelClassTableModel) tblClasses.getModel());
+
+            if (c.equals(btnAddClass)) {
+                ILabelClassFactory factory = (ILabelClassFactory) this.comboLabelClassFactoryToUse.getSelectedItem();
+                if( factory == null ) {
+                    logger.warn("Can't acces to the defaut selected labelclassfactory.");
+                    return;
+                }
+                ILabelClass newClass = factory.create();
+
+                String name = Messages.getText("labeling")
+                        + String.valueOf(1);
+
+                int count = 0;
+                while (checSameLablClassName(mod, name)) {
+                    count++;
+                    name = Messages.getText("labeling")
+                            + String.valueOf(count);
+                }
+                newClass.setName(name);
+                mod.addRow(new Object[]{
+                    newClass.getName(),
+                    newClass,
+                    newClass.getSQLQuery(),
+                    newClass.getStringLabelExpression(),
+                    newClass.isVisible()});
+
+            } else if (c.equals(btnDelClass)) {
+                if (mod.getRowCount() >= 1) {
+                    int[] sRows = tblClasses.getSelectedRows();
+
+                    for (int i = sRows.length - 1; i >= 0; i--) {
+                        mod.removeRow(sRows[i]);
+                    }
+                }
+            } else if (c.equals(chkDefinePriorities)) {
+
+                method.setDefinesPriorities(chkDefinePriorities.isSelected());
+
+            } else if (c.equals(chkLabel)) {
+                int[] sRows = tblClasses.getSelectedRows();
+                for (int i = sRows.length - 1; i >= 0; i--) {
+                    ILabelClass lc = mod.getLabelAtRow(i);
+                    lc.setVisible(chkLabel.isSelected());
+                }
+
+            } else if (c.equals(btnMoveUpClass)) {
+                int[] indices = tblClasses.getSelectedRows();
+                if (indices.length > 0) {
+                    int classIndex = indices[0];
+                    int targetPos = Math.max(0, classIndex - 1);
+                    swapClass(classIndex, targetPos, indices.length);
+                }
+
+            } else if (c.equals(btnMoveDownClass)) {
+                int[] indices = tblClasses.getSelectedRows();
+                if (indices.length > 0) {
+                    int classIndex = indices[indices.length - 1];
+                    int targetPos = Math.min(tblClasses.getRowCount() - 1, classIndex + 1);
+                    swapClass(classIndex, targetPos, indices.length);
+                }
+
+            } else if (c.equals(btnDelClass)) {
+                int[] indices = tblClasses.getSelectedRows();
+                if (indices.length > 0) {
+                    int classIndex = indices[0];
+                    int targetPos = Math.min(tblClasses.getRowCount(), classIndex);
+                    swapClass(classIndex, targetPos, indices.length);
+                }
+            }
+
+            mod.fireTableDataChanged();
+            method.clearAllClasses();
+            ILabelClass[] classes = ((LabelClassTableModel) tblClasses.getModel()).toLabelClassArray();
+            for (int i = 0; i < classes.length; i++) {
+                method.addLabelClass(classes[i]);
+            }
+            repaint();
+        }
+        
+	public void propertyChange(PropertyChangeEvent evt) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		getBtnAddClass().setEnabled(enabled);
+		getBtnDelClass().setEnabled(enabled);
+		getBtnMoveDownClass().setEnabled(enabled);
+		getBtnMoveUpClass().setEnabled(enabled);
+		getChkDefinePriorities().setEnabled(enabled);
+		scrlPan.setEnabled(enabled);
+		tblClasses.setEnabled(enabled);
+	}
+
+
+
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassProperties.java	(revision 42196)
@@ -0,0 +1,958 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.logging.Level;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableColumnModel;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.labeling.LabelClassEditor;
+import org.gvsig.app.gui.styling.SingleStyleSelectorFilter;
+import org.gvsig.app.gui.styling.StylePreviewer;
+import org.gvsig.app.gui.styling.StyleSelector;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * LabelClassProperties.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es May 27, 2008
+ *
+ */
+public class LabelClassProperties extends JPanel implements LabelClassEditor, IWindow,
+ActionListener {
+	
+	private static final Logger logger =
+			LoggerFactory.getLogger(LabelClassProperties.class);
+	
+	private static final String TEST_SQL = "TEST_SQL";
+	private static final String DELETE_FIELD = "DELETE_FIELD";
+	private static final long serialVersionUID = 6528513396536811057L;
+	private static final String ADD_FIELD = "ADD_FIELD";
+	private static final String SELECT_STYLE = "SELECT_STYLE";
+	private static final String CLEAR_STYLE = "CLEAR_STYLE";
+	private static final String VERIFY = "VERIFY";
+	private JTextField txtName;
+	private ILabelClass lc, clonedClass;
+	private JTable tblExpressions;
+	private JButton btnRemoveField;
+	private JButton btnAddField;
+	private JButton btnVerify;
+	private JComponent styPreviewer;
+	private JButton btnSelStyle;
+	private JRadioButton rdBtnFilteredFeatures;
+	private JRadioButton rdBtnAllFeatures;
+	private JTextField txtSQL;
+	private JCheckBox chkLabelFeatures;
+	private LabelTextStylePanel textStyle;
+	private JPanel sqlPnl;
+	private LabelClassPreview labelPreview;
+	
+	/*
+	private String[] fieldNames;
+	private int[] fieldTypes;
+	*/
+	private FeatureStore featureStore = null;
+	private JButton btnDontUseStyle;
+	private boolean accepted = true;
+        private AcceptCancelPanel acceptCancelPanel;
+
+
+
+	/**
+	 * <p>
+	 * Creates a new instance of the dialog that configures all the properties
+	 * of a LabelClass.
+	 * </p>
+	 * @param strategy
+	 * @param asWindow
+	 */
+	public LabelClassProperties(FeatureStore fsto) {
+
+		featureStore = fsto;
+		initialize();
+	}
+
+	private void initialize() {
+		setPreferredSize(new Dimension(810, 580));
+		setLayout(new BorderLayout(1, 1));
+
+		txtName = new JTextField(40);
+		JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 15, 2));
+		northPanel.add(new JLabel(Messages.getText("name") + ":"));
+		northPanel.add(txtName);
+		add(northPanel, BorderLayout.NORTH);
+
+		JPanel centerPanel = new JPanel(new BorderLayout(10, 10));
+		textStyle = new LabelTextStylePanel();
+		textStyle.addActionListener(this);
+		centerPanel.add(textStyle, BorderLayout.NORTH);
+
+		JPanel labelExpressionsPanel = new JPanel(new BorderLayout(1, 1));
+
+		labelExpressionsPanel.add(new JBlank(10, 30), BorderLayout.WEST);
+		labelExpressionsPanel.add(new JScrollPane(getTableFields()),
+				BorderLayout.CENTER);
+
+		JPanel a = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
+		a.add(new JLabel("<html><b>"+Messages.getText("text_fields")+"</b></html>"));
+		centerPanel.add(labelExpressionsPanel, BorderLayout.CENTER);
+		
+		
+		GridLayout gbl = new GridLayout(3, 1, 0, 6);
+		JPanel auxp = new JPanel(gbl);
+		auxp.add(getBtnVerify());
+		auxp.add(getBtnAddField());
+		auxp.add(getBtnRemoveField());
+		auxp.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
+		JPanel auxpp = new JPanel();
+		auxpp.add(auxp);
+		
+		centerPanel.add(auxpp, BorderLayout.EAST);
+
+
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+//		aux.setBorder(BorderFactory.createTitledBorder(PluginServices.getText(
+//		this, "features")));
+		rdBtnAllFeatures = new JRadioButton(Messages.getText("all_features"));
+		rdBtnFilteredFeatures = new JRadioButton(Messages.getText("filtered_features")
+				+" (SQL GDBMS)");
+
+		rdBtnAllFeatures.addActionListener(this);
+		rdBtnFilteredFeatures.addActionListener(this);
+
+		ButtonGroup g = new ButtonGroup();
+		g.add(rdBtnAllFeatures);
+		g.add(rdBtnFilteredFeatures);
+		aux.addComponent(chkLabelFeatures = new JCheckBox(
+				Messages.getText("label_features_in_this_class")));
+		aux.addComponent("", rdBtnAllFeatures);
+		aux.addComponent("", rdBtnFilteredFeatures);
+		sqlPnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
+		sqlPnl.add(new JLabel("   SQL: SELECT * FROM "));
+		sqlPnl.add(new JLabel("<" + Messages.getText("layer_name")
+				+ ">"));
+		sqlPnl.add(new JLabel(" WHERE  "));
+		sqlPnl.add(txtSQL = new JTextField(40));
+		sqlPnl.add(new JLabel(";"));
+		aux.addComponent("", sqlPnl);
+
+
+		JPanel auxPanel = new JPanel(new BorderLayout(1,1));
+
+		JPanel aux2 = new JPanel();
+		auxPanel.setBorder(BorderFactory.createTitledBorder(
+				Messages.getText("background_style")));
+
+		aux2.add(getStylePreviewer());
+
+		gbl = new GridLayout(2, 1, 0, 6);
+		JPanel aux3 = new JPanel(gbl);
+		aux3.add(getBtnSelectStyle());
+		aux3.add(getBtnDontUseStyle());
+		aux3.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
+		auxpp = new JPanel();
+		auxpp.add(aux3);
+
+		auxPanel.add(aux2,BorderLayout.CENTER);
+		auxPanel.add(auxpp,BorderLayout.EAST);
+
+		JPanel aux4 = new JPanel(new GridLayout(1,2));
+		aux4.add(auxPanel);
+		aux2 = new JPanel(new BorderLayout());
+		aux2.setBorder(BorderFactory.createTitledBorder(Messages.getText("preview")));
+		aux2.add(labelPreview = new LabelClassPreview(), BorderLayout.CENTER);
+		aux4.add(aux2);
+
+		GridBagLayoutPanel aux5 = new GridBagLayoutPanel();
+		aux5.addComponent("", aux);
+		aux5.addComponent(new JBlank(3, 5));
+		aux5.addComponent("", aux4);
+		centerPanel.add(aux5, BorderLayout.SOUTH);
+		add(centerPanel, BorderLayout.CENTER);
+                this.acceptCancelPanel = new AcceptCancelPanel(this, this);
+		add(this.acceptCancelPanel, BorderLayout.SOUTH);
+
+		chkLabelFeatures.addActionListener(this);
+		txtName.addActionListener(this);
+
+	}
+        
+        public void setAcceptCancelVisible(boolean visible) {
+            this.acceptCancelPanel.setVisible(visible);
+        }
+
+	private JComponent getStylePreviewer() {
+
+		if (styPreviewer == null) {
+			styPreviewer = new StylePreviewer();
+			styPreviewer.setPreferredSize(new java.awt.Dimension(90,90));
+			styPreviewer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+			((StylePreviewer) styPreviewer).setShowOutline(true);
+		}
+		return styPreviewer;
+
+	}
+
+	private JButton getBtnSelectStyle() {
+		if (btnSelStyle == null) {
+			btnSelStyle = new JButton(Messages.getText("select"));
+			btnSelStyle.setActionCommand(SELECT_STYLE);
+			btnSelStyle.addActionListener(this);
+		}
+
+		return btnSelStyle;
+	}
+
+
+	private JButton getBtnRemoveField() {
+		if (btnRemoveField == null) {
+			btnRemoveField = new JButton(Messages.getText("remove"));
+			btnRemoveField.setActionCommand(DELETE_FIELD);
+			btnRemoveField.addActionListener(this);
+		}
+
+		return btnRemoveField;
+	}
+
+	private JButton getBtnAddField() {
+		if (btnAddField == null) {
+			btnAddField = new JButton(Messages.getText("add"));
+			btnAddField.setActionCommand(ADD_FIELD);
+			btnAddField.addActionListener(this);
+		}
+
+		return btnAddField;
+	}
+
+	private JButton getBtnVerify() {
+		if(btnVerify == null) {
+			btnVerify = new JButton(Messages.getText("verify"));
+			btnVerify.setActionCommand(VERIFY);
+			btnVerify.addActionListener(this);
+		}
+		return btnVerify;
+	}
+
+	private JButton getBtnDontUseStyle() {
+		if (btnDontUseStyle == null) {
+			btnDontUseStyle = new JButton(Messages.getText("no_style"));
+			btnDontUseStyle.setActionCommand(CLEAR_STYLE);
+			btnDontUseStyle.addActionListener(this);
+		}
+
+		return btnDontUseStyle;
+	}
+
+	private JTable getTableFields() {
+		if (tblExpressions == null) {
+			tblExpressions = new JTable();
+			tblExpressions.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+		}
+
+		return tblExpressions;
+	}
+
+
+	private void setComponentEnabled(Component c, boolean b) {
+		if (c instanceof JComponent) {
+			JComponent c1 = (JComponent) c;
+			for (int i = 0; i < c1.getComponentCount(); i++) {
+				setComponentEnabled(c1.getComponent(i), b);
+			}
+		}
+		c.setEnabled(b);
+	}
+
+
+
+	public void setLabelClass(ILabelClass labelClass) {
+		if (labelClass == null)
+			return;
+
+		lc = labelClass;
+                
+                try {
+                    clonedClass = (ILabelClass) lc.clone();
+                } catch (CloneNotSupportedException ex) {
+                    clonedClass = lc;
+                }
+
+		labelPreview.setLabelClass(clonedClass);
+		boolean clo_use_sql = LabelClassUtils.isUseSqlQuery(clonedClass); 
+		if (!clo_use_sql) {
+			rdBtnAllFeatures.setSelected(true);
+			txtSQL.setText("");
+		} else {
+			rdBtnFilteredFeatures.setSelected(true);
+			txtSQL.setText(clonedClass.getSQLQuery());
+		}
+
+		chkLabelFeatures.setSelected(clonedClass.isVisible());
+		rdBtnFilteredFeatures.setSelected(clo_use_sql);
+		rdBtnAllFeatures.setSelected(!clo_use_sql);
+		((StylePreviewer) styPreviewer).setStyle(clonedClass.getLabelStyle());
+		txtName.setText(clonedClass.getName());
+		
+		// String expr = lc.getStringLabelExpression();
+
+		/*
+		String EOExpr = LabelExpressionParser.tokenFor(LabelExpressionParser.EOEXPR);
+		if (expr == null)
+			expr = EOExpr;
+		expr = expr.trim();
+		if (!expr.endsWith(EOExpr)) {
+			throw new Error("Invalid expression. Missing EOExpr token ("+EOExpr+").\n"+expr);
+		}
+		expr = expr.substring(0, expr.length()-1);
+		*/
+
+		// expr = expr.trim();
+
+		ITextSymbol lcTextSymbol = lc.getTextSymbol();
+		ITextSymbol clonedSymbol = null;
+		
+		try {
+			clonedSymbol = (ITextSymbol) lcTextSymbol.clone();
+		} catch (CloneNotSupportedException e) {
+			logger.error("While clonin.", e);
+		}
+
+		textStyle.setModel(
+				clonedSymbol, //lc.getTextSymbol(),
+				lc.getUnit(),
+				lc.getReferenceSystem());
+
+		getTableFields().setRowHeight(22);
+		getTableFields().setModel(new FieldTableExpressions(lc.getLabelExpressions()));
+		TableColumnModel colMod = getTableFields().getColumnModel();
+		colMod.getColumn(0).setPreferredWidth(100);
+		colMod.getColumn(0).setWidth(100);
+		colMod.getColumn(1).setResizable(true);
+		colMod.getColumn(1).setPreferredWidth(513);
+		
+		FeatureAttributeDescriptor[] atts = null;
+		
+		try {
+			atts = featureStore.getDefaultFeatureType().getAttributeDescriptors();
+		} catch (DataException e) {
+			logger.error("While getting attributes.", e);
+		}
+		
+		getTableFields().setDefaultEditor(
+				Object.class,
+				new DefaultEditor(atts));
+		repaint();
+
+		actionPerformed(new ActionEvent(this, 0, null));
+	}
+
+        public JComponent asJComponent() {
+            return this;
+        }
+
+        public void showDialog() {
+            ApplicationLocator.getManager().getUIManager().addWindow(this);
+        }
+
+	private class DefaultEditor extends AbstractCellEditor implements
+			TableCellEditor, ActionListener {
+
+		JPanel editor;
+		LabelExpressionEditorPanel dialog;
+		private JTextField text;
+		private JButton button;
+		protected static final String EDIT = "edit";
+
+		public DefaultEditor(FeatureAttributeDescriptor[] atts) {
+			editor = new JPanel();
+			editor.setLayout(new GridBagLayout());
+			GridBagConstraints cons = new GridBagConstraints();
+//			cons.anchor = GridBagConstraints.FIRST_LINE_START;
+			cons.fill = cons.BOTH;
+			cons.weightx=1.0;
+			cons.weighty =1.0;
+			text = new JTextField();
+			editor.add(text, cons);
+
+			GridBagConstraints cons1 = new GridBagConstraints();
+//			cons.anchor = GridBagConstraints.FIRST_LINE_END;
+			cons1.fill = cons1.VERTICAL;
+			cons1.weighty =1.0;
+//			cons.gridheight = GridBagConstraints.REMAINDER;
+			button = new JButton("...");
+			button.setActionCommand(DefaultEditor.EDIT);
+			button.addActionListener(this);
+			editor.add(button,cons1);
+
+			editor.updateUI();
+
+			// Set up the dialog that the button brings up.
+			dialog = new LabelExpressionEditorPanel(atts);
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			if (EDIT.equals(e.getActionCommand())) {
+
+				dialog.setValue(text.getText());
+				ApplicationLocator.getManager().getUIManager().addWindow(dialog);
+				//fireEditingStopped(); // Make the renderer reappear.
+				text.setText(dialog.getValue());
+			}
+		}
+
+		// Implement the one CellEditor method that AbstractCellEditor doesn't.
+		public Object getCellEditorValue() {
+			return text.getText();
+		}
+
+		// Implement the one method defined by TableCellEditor.
+		public Component getTableCellEditorComponent(JTable table,
+				Object value, boolean isSelected, int row, int column) {
+			text.setText((String) value);
+			return editor;
+		}
+	}
+
+
+
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi = new WindowInfo(WindowInfo.MODALDIALOG
+				| WindowInfo.RESIZABLE);
+		wi.setTitle(Messages.getText("label_class_properties"));
+		wi.setWidth(getPreferredSize().width + 8);
+		wi.setHeight(getPreferredSize().height);
+		return wi;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+
+	/*
+	 * Return a hashtable with example values.
+	 * Only for verification purposes.
+	private Hashtable<String, Value> getValuesTable(String[] fNames, int[] fTypes) {
+		
+		Hashtable<String, Value> parser_symbol_table = new Hashtable<String, Value>();
+
+		Random rand = new Random();
+		byte b = 0;
+    	short s = (short)rand.nextInt(Short.MAX_VALUE);
+    	int i = rand.nextInt();
+		long l = rand.nextLong();
+		boolean bool = rand.nextBoolean();
+		float f = rand.nextFloat();
+		double d = rand.nextDouble();
+
+		for (int j = 0; j < fNames.length; j++) {
+			Value value=null;
+
+			int type = fTypes[j];
+            switch (type) {
+            case Types.BIGINT:
+                value = ValueFactory.createValue(l);
+                break;
+            case Types.BIT:
+            case Types.BOOLEAN:
+                value = ValueFactory.createValue(bool);
+                break;
+            case Types.CHAR:
+            case Types.VARCHAR:
+            case Types.LONGVARCHAR:
+                value = ValueFactory.createValue("");
+                break;
+            case Types.DATE:
+                Date auxDate = new Date();
+            	if (auxDate != null){
+                    value = ValueFactory.createValue(auxDate);
+            	}
+                break;
+            case Types.DECIMAL:
+            case Types.NUMERIC:
+            case Types.FLOAT:
+            case Types.DOUBLE:
+                value = ValueFactory.createValue(d);
+                break;
+            case Types.INTEGER:
+                value = ValueFactory.createValue(i);
+                break;
+            case Types.REAL:
+                value = ValueFactory.createValue(f);
+                break;
+            case Types.SMALLINT:
+                value = ValueFactory.createValue(s);
+                break;
+            case Types.TINYINT:
+                value = ValueFactory.createValue(b);
+                break;
+            case Types.BINARY:
+            case Types.VARBINARY:
+            case Types.LONGVARBINARY:
+                byte[] auxByteArray = {b}; //new byte[1];
+                value = ValueFactory.createValue(auxByteArray);
+                break;
+            case Types.TIMESTAMP:
+           		value = ValueFactory.createValue(new Timestamp(l));
+                break;
+            case Types.TIME:
+            	value = ValueFactory.createValue(new Time(l));
+                break;
+            default:
+            	value = ValueFactory.createValue("");
+            	break;
+        }
+			parser_symbol_table.put(fNames[j], value);
+		}
+		return parser_symbol_table;
+	}
+		 */
+
+
+	/*
+	private boolean verifyExpresion(String expresion, Hashtable<String, Value> symbols){
+		LabelExpressionParser parser;
+		try {
+			parser = new LabelExpressionParser(new StringReader(expresion),symbols);
+			parser.LabelExpression();
+			Expression expr = ((Expression)parser.getStack().pop());
+			expr.evaluate();
+		} catch (ExpressionException e2) {
+			return false;
+		} catch (Exception e3) {
+			return false;
+		}
+		return true;
+	}
+	*/
+
+	private boolean verifyExpressions(){
+		
+		String[] expressions = ((FieldTableExpressions) getTableFields().getModel()).getExpression();
+		if(expressions.length == 1 && expressions[0].equals("")){
+			return true;
+		}
+		boolean result = true;
+		String message = "";
+		for (int i = 0; i < expressions.length; i++) {
+			String expresion = expressions[i];
+			
+			if( !LabelClassUtils.validExpression(expresion, featureStore, false) ){
+				result = false;
+				if(message.compareTo("")!=0){
+					message = message +	" , " + (i+1);
+				} else {
+					message = " " + Messages.getText("at_fields")+" "+(i+1);
+				}
+			}
+		}
+		message = message +".";
+		if(!result){
+			JOptionPane.showMessageDialog(
+					ApplicationLocator.getManager().getRootComponent(),
+					Messages.getText("malformed_or_empty_expression") + message,
+					Messages.getText("verify"),
+					JOptionPane.ERROR_MESSAGE);
+		} else {
+			JOptionPane.showMessageDialog(
+					ApplicationLocator.getManager().getRootComponent(),
+					Messages.getText("_Expressions_are_correct"),
+					Messages.getText("verify"),
+					JOptionPane.INFORMATION_MESSAGE);
+		}
+		return result;
+	}
+
+	public boolean isAccepted(){
+		return accepted;
+	}
+        
+        public void doCancel() {
+            accepted = false;
+            setLabelClass(lc);        
+        }
+
+        public void doAccept() {
+            if (rdBtnFilteredFeatures.isSelected()) {
+                String sqlstr = txtSQL.getText();
+                if (!validVisibleSQL(sqlstr, featureStore)) {
+                    JOptionPane.showMessageDialog(
+                            ApplicationLocator.getManager().getRootComponent(),
+                            Messages.getText("error_validating_filter_query")
+                            + ":\n\n'" + sqlstr + "'",
+                            Messages.getText("filtered_features"),
+                            JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+            }
+            clonedClass.setUnit(textStyle.getUnit());
+            clonedClass.setReferenceSystem(textStyle.getReferenceSystem());
+            clonedClass.setTextSymbol(textStyle.getTextSymbol());
+            lc = clonedClass;
+            accepted = true;
+        }
+
+	public void actionPerformed(ActionEvent e) {
+		setComponentEnabled(sqlPnl, rdBtnFilteredFeatures.isSelected());
+		
+		applySettings();
+		
+		if ("OK".equals(e.getActionCommand())) {
+                        doAccept();
+			try {
+				ApplicationLocator.getManager().getUIManager().closeWindow(this);
+			} catch (Exception ex) {
+				// this only happens when running this as stand-alone app
+				// from main method;
+				logger.warn("While closing window.", ex);
+			}
+		} else if ("CANCEL".equals(e.getActionCommand())) {
+                        doCancel();
+			try {
+				ApplicationLocator.getManager().getUIManager().closeWindow(this);
+			} catch (Exception ex) {
+				// this only happens when running this as stand-alone app
+				// from main method;
+				logger.warn("While closing window.", ex);
+			}
+		} else if (CLEAR_STYLE.equals(e.getActionCommand())) {
+			clonedClass.setLabelStyle(null);
+//			styPreviewer.setStyle(null);
+			((StylePreviewer) styPreviewer).setStyle(null);
+		} else if (TEST_SQL.equals(e.getActionCommand())) {
+			logger.info("TEST_SQL = " + TEST_SQL);
+		} else if (DELETE_FIELD.equals(e.getActionCommand())) {
+			int[] rowInd = getTableFields().getSelectedRows();
+			for (int i = rowInd.length-1; i >= 0 ; i--) {
+				delField(rowInd[i]);
+			}
+			clonedClass.setLabelExpressions(((FieldTableExpressions) getTableFields().getModel()).getExpression());
+			setLabelClass(clonedClass);
+		} else if (VERIFY.equals(e.getActionCommand())) {
+			verifyExpressions();
+		} else if (ADD_FIELD.equals(e.getActionCommand())) {
+			addField();
+		} else if (SELECT_STYLE.equals(e.getActionCommand())) {
+
+			IStyle myStyle = ((StylePreviewer)styPreviewer).getStyle();
+			
+			FeatureType fty = null;
+			
+			try {
+				fty = featureStore.getDefaultFeatureType();
+			} catch (DataException e1) {
+				logger.error("While getting feat type.", e1);
+			}
+			
+			int geotype = fty.getDefaultGeometryAttribute().getGeomType().getType();
+			
+			SingleStyleSelectorFilter filter =
+					new SingleStyleSelectorFilter(ILabelStyle.class);
+			StyleSelector stySel = null;
+			
+			try {
+				stySel = new StyleSelector(myStyle, geotype, filter);
+			} catch (IllegalArgumentException iae) {
+				JOptionPane.showMessageDialog(this,
+						Messages.getText("_Option_not_available_for_this_geometry_type"),
+						getWindowInfo().getTitle(),
+						JOptionPane.WARNING_MESSAGE);
+				return;
+			}
+			
+			ApplicationLocator.getManager().getUIManager().addWindow(stySel);
+			ILabelStyle sty = (ILabelStyle) stySel.getSelectedObject();
+
+			if (sty != null) {
+				// gather the style and apply to the class
+				clonedClass.setLabelStyle(sty);
+				clonedClass.setUnit(stySel.getUnit());
+				clonedClass.setReferenceSystem(stySel.getReferenceSystem());
+				setLabelClass(clonedClass);
+			}
+
+//			styPreviewer.setStyle(sty);
+			((StylePreviewer) styPreviewer).setStyle(sty);
+
+		}else if (e.getSource().equals(rdBtnAllFeatures) || e.getSource().equals(rdBtnFilteredFeatures)){
+			clonedClass.setUseSqlQuery(rdBtnFilteredFeatures.isSelected());
+		}
+
+		repaint();
+	}
+
+	private boolean validVisibleSQL(String sqlstr, FeatureStore fsto) {
+	    
+	    return LabelClassUtils.validExpression(sqlstr, fsto, true);
+    }
+
+    private void applySettings() {
+	    
+		clonedClass.setVisible(chkLabelFeatures.isSelected());
+		clonedClass.setName(txtName.getText());
+		
+		if (rdBtnFilteredFeatures.isSelected()) {
+		    clonedClass.setSQLQuery(txtSQL.getText());
+		} else {
+		    clonedClass.setSQLQuery("");
+		}
+		
+		JTable tableFields=getTableFields();
+		TableCellEditor cellEditor=tableFields.getCellEditor();
+		if(cellEditor != null){
+			int row = tableFields.getEditingRow();
+			int column = tableFields.getEditingColumn();
+			cellEditor.stopCellEditing();
+			Object value = cellEditor.getCellEditorValue();
+
+			if (value != null) {
+				((FieldTableExpressions) tableFields.
+						getModel()).setValueAt(value, row, column);
+			}
+		}
+		clonedClass.setLabelExpressions(
+				((FieldTableExpressions) tableFields.
+						getModel()).getExpression());
+		clonedClass.setTextSymbol(textStyle.getTextSymbol());
+	}
+
+	private void addField() {
+		addField("");
+	}
+
+	private void addField(String fieldExpr) {
+		FieldTableExpressions m = ((FieldTableExpressions) getTableFields().getModel());
+		m.addRow(new Object[] { m.getRowCount()+1, fieldExpr });
+	}
+
+	private void delField(int fieldIndex) {
+		try {
+			((FieldTableExpressions) getTableFields().getModel()).removeRow(fieldIndex);
+		} catch (ArrayIndexOutOfBoundsException ex) {}
+	}
+
+
+	public ILabelClass getLabelClass() {
+		return lc;
+	}
+
+
+
+	private static final Object[] TABLE_HEADERS = new String[] {
+		
+		Messages.getText("field_number"),
+		Messages.getText("label_expression")
+	};
+	
+	/*
+	private static String fieldSeparator =
+	LabelExpressionParser.tokenImage[LabelExpressionParser.EOFIELD].replaceAll("\"", "");
+	*/
+	
+	private class FieldTableExpressions extends DefaultTableModel {
+		private static final long serialVersionUID = 2002427714889477770L;
+		public FieldTableExpressions(String[] expressions) {
+			super();
+
+			if(expressions != null && expressions.length > 0){
+				Integer[] aux = new Integer[expressions.length];
+				for (int i = 0; i < aux.length; i++) {
+					aux[i] = i+1;
+				}
+
+				Object[][] values = new Object[aux.length][2];
+				for (int i = 0; i < values.length; i++) {
+					values[i][0] = aux[i];
+					values[i][1] = expressions[i];
+				}
+				setDataVector(values, TABLE_HEADERS);
+			}
+			else{
+				Object[][] values = new Object[1][2];
+				values[0][0] = 1;
+				values[0][1] = "";
+				setDataVector(values,TABLE_HEADERS);
+			}
+
+		}
+
+
+		@Override
+		public boolean isCellEditable(int row, int column) {
+			return column == 1;
+		}
+
+		public String[] getExpression() {
+
+			String[] expressions = new String[getRowCount()];
+
+			for (int i = 0; i < getRowCount(); i++) {
+				expressions[i] = ""+(String) getValueAt(i,1);
+			}
+			return expressions;
+		}
+
+	}
+
+//	public static void main(String[] args) {
+//		JFrame f = new JFrame("Test LabelClassProperties panel");
+//
+//		String xmlString =
+//			"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" +
+//			"<xml-tag xmlns=\"http://www.gvsig.gva.es\">\n" +
+//			"    <property key=\"className\" value=\"com.iver.cit.gvsig.fmap.rendering.styling.labeling.LabelClass\"/>\n" +
+//			"    <property key=\"isVisible\" value=\"false\"/>\n" +
+//			"    <property key=\"name\" value=\"Default\"/>\n" +
+//			"    <property key=\"labelExpression\" value=\"[TIPO] : lao39805502232 : Substring([MOTO], 2,2);\"/>\n" +
+//			"    <property key=\"unit\" value=\"-1\"/>\n" +
+//			"    <property key=\"referenceSystem\" value=\"0\"/>\n" +
+//			"    <property key=\"sqlQuery\" value=\"TIPO = 'C'\"/>\n" +
+//			"    <property key=\"priority\" value=\"0\"/>\n" +
+//			"    <xml-tag>\n" +
+//			"        <property key=\"className\" value=\"org.gvsig.symbology.fmap.styles.SimpleLabelStyle\"/>\n" +
+//			"        <property key=\"desc\" value=\"Placa Carrer VLC.style\"/>\n" +
+//			"        <property key=\"markerPointX\" value=\"0.0\"/>\n" +
+//			"        <property key=\"markerPointY\" value=\"0.0\"/>\n" +
+//			"        <property key=\"minXArray\" value=\"0.35 ,0.25\"/>\n" +
+//			"        <property key=\"minYArray\" value=\"0.15 ,0.5\"/>\n" +
+//			"        <property key=\"widthArray\" value=\"0.5 ,0.6\"/>\n" +
+//			"        <property key=\"heightArray\" value=\"0.27 ,0.37\"/>\n" +
+//			"        <property key=\"id\" value=\"labelStyle\"/>\n" +
+//			"        <xml-tag>\n" +
+//			"            <property key=\"className\" value=\"org.gvsig.symbology.fmap.styles.RemoteFileStyle\"/>\n" +
+//			"            <property key=\"source\" value=\"http://www.boomlapop.com/boomlapop.jpg\"/>\n" +
+//			"            <property key=\"desc\"/>\n" +
+//			"            <property key=\"id\" value=\"LabelStyle\"/>\n" +
+//			"        </xml-tag>\n" +
+//			"    </xml-tag>\n" +
+//			"    <xml-tag>\n" +
+//			"        <property key=\"className\" value=\"com.iver.cit.gvsig.fmap.core.symbols.SimpleTextSymbol\"/>\n" +
+//			"        <property key=\"desc\"/>\n" +
+//			"        <property key=\"isShapeVisible\" value=\"true\"/>\n" +
+//			"        <property key=\"font\" value=\"Arial\"/>\n" +
+//			"        <property key=\"fontStyle\" value=\"1\"/>\n" +
+//			"        <property key=\"size\" value=\"12\"/>\n" +
+//			"        <property key=\"text\" value=\"GeneralLabeling.sample_text\"/>\n" +
+//			"        <property key=\"textColor\" value=\"255,255,0,255\"/>\n" +
+//			"        <property key=\"unit\" value=\"-1\"/>\n" +
+//			"        <property key=\"referenceSystem\" value=\"0\"/>\n" +
+//			"        <property key=\"id\" value=\"TextSymbol\"/>\n" +
+//			"    </xml-tag>\n" +
+//			"</xml-tag>\n" +
+//			"";
+//
+//		LabelClass lc = null;
+//		try {
+//			XMLEntity xml = new XMLEntity((XmlTag) XmlTag.unmarshal(
+//					XMLEncodingUtils.getReader(new ByteArrayInputStream(xmlString.getBytes()))));
+//			lc = new LabelClass();
+//			lc.setXMLEntity(xml);
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+//		String[] names = new String[] { "Field1", "Field2", "Field3"	};
+//		int[] types = new int[] { Types.VARCHAR, Types.INTEGER, Types.DOUBLE };
+//		final LabelClassProperties lcp = new LabelClassProperties(
+//				names, types ) {
+//			private static final long serialVersionUID = -1843509415649666459L;
+//
+//			@Override
+//			public void actionPerformed(ActionEvent e) {
+//				super.actionPerformed(e);
+//				if ("OK".equals(e.getActionCommand())) {
+//					Sys tem.out.println(getLabelClass().getXMLEntity());
+//				}
+//			}
+//		};
+//		lcp.setLabelClass(lc);
+//		f.setContentPane(lcp);
+//		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+//		f.pack();
+//		f.setVisible(true);
+//
+//	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/OnSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/OnSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/OnSelection.java	(revision 42196)
@@ -0,0 +1,86 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.label.OnSelectionLabeled;
+import org.gvsig.symbology.SymbologyLocator;
+
+public class OnSelection extends DefaultLabeling{
+
+	private static final long serialVersionUID = -3619706540747109386L;
+
+	@Override
+	public String getName() {
+		return Messages.getText("label_only_when_selected")+".";
+	}
+
+	@Override
+	public Class<? extends ILabelingMethod> getLabelingMethodClass() {
+		return OnSelectionLabeled.class;
+	}
+
+	@Override
+	public ILabelingMethod getMethod() {
+		
+		OnSelectionLabeled resp = null;
+		if (super.getMethod() instanceof OnSelectionLabeled) {
+			resp = (OnSelectionLabeled) super.getMethod(); 
+		} else {
+			resp = new OnSelectionLabeled();
+		}
+
+		if (resp.getLabelClasses() == null || resp.getLabelClasses().length == 0) {
+			ILabelClass lc = null;
+			lc = SymbologyLocator.getSymbologyManager().createDefaultLabel();
+			resp.addLabelClass(lc);
+		}
+		return resp;
+	}
+
+	protected ILabelingMethod newMethodForThePreview(ILabelClass defaultLabel) {
+		OnSelectionLabeled method = new OnSelectionLabeled();
+		method.addLabelClass(defaultLabel);
+		return method;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelScaleRange.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelScaleRange.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelScaleRange.java	(revision 42196)
@@ -0,0 +1,240 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.TreeSet;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.controls.comboscale.ComboScale;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.i18n.Messages;
+
+/**
+ * <p>Configuration panel to set the range of scales in which the labels
+ * will be visible.</p>
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Apr 4, 2008
+ *
+ */
+public class LabelScaleRange extends JPanel implements IWindow, ActionListener {
+
+	private static final long serialVersionUID = -450284029750650479L;
+	private static final long[] defaultScales = new long[] {
+		1000,
+		2000,
+		5000,
+		10000,
+		50000,
+		100000,
+		200000,
+		500000,
+	};
+	private long maxScale, minScale;
+	private ComboScale cmbMaxScale;
+	private ComboScale cmbMinScale;
+	private JRadioButton rdBtnUseSameRangeThanLayer;
+	private JRadioButton rdBtnDontShowLabelWhenZoomed;
+
+	public LabelScaleRange(long minScale, long maxScale) {
+		super();
+		setLayout(new BorderLayout());
+		this.maxScale = maxScale;
+		this.minScale = minScale;
+
+		getCmbMinScale().setScale(minScale);
+		getCmbMaxScale().setScale(maxScale);
+		GridBagLayoutPanel p = new GridBagLayoutPanel();
+		
+		p.addComponent(new JLabel(Messages.getText(
+				"specify_the_range_of_scales_at_which_labels_will_be_shown")+":"));
+		p.addComponent(new JBlank(10, 10));
+		p.addComponent(getRdUseSameRangeThanLayer());
+		p.addComponent(new JBlank(10, 10));
+		p.addComponent(getRdDontShowLabelsWhenZoomed());
+		p.addComponent(new JBlank(10, 10));
+		ButtonGroup group = new ButtonGroup();
+		group.add(getRdUseSameRangeThanLayer());
+		group.add(getRdDontShowLabelsWhenZoomed());
+		getRdUseSameRangeThanLayer().addActionListener(this);
+		getRdDontShowLabelsWhenZoomed().addActionListener(this);
+		getRdUseSameRangeThanLayer().setSelected(maxScale == -1 && minScale == -1);
+		getRdDontShowLabelsWhenZoomed().setSelected(!getRdUseSameRangeThanLayer().isSelected());
+		getCmbMinScale().setEnabled(getRdDontShowLabelsWhenZoomed().isSelected());
+		getCmbMaxScale().setEnabled(getRdDontShowLabelsWhenZoomed().isSelected());
+
+		JPanel aux;
+		JLabel l;
+		l  = new JLabel("    "+Messages.getText("out_beyond")+":", JLabel.RIGHT);
+		aux = new JPanel();
+		aux.add(getCmbMaxScale());
+//		aux.add(new JLabel("("+PluginServices.getText(this, "min_scale")+")"));
+		aux.add(new JLabel("("+Messages.getText("max_scale")+")"));
+		p.addComponent(l, aux);
+
+
+		l = new JLabel("    "+Messages.getText("in_beyond")+":", JLabel.RIGHT);
+		aux = new JPanel();
+		aux.add(getCmbMinScale());
+//		aux.add(new JLabel("("+PluginServices.getText(this, "max_scale")+")"));
+		aux.add(new JLabel("("+Messages.getText("min_scale")+")"));
+			p.addComponent(l, aux);
+
+
+		add(new JBlank(10, 10), BorderLayout.WEST);
+		add(new JBlank(10, 10), BorderLayout.EAST);
+		add(p, BorderLayout.CENTER);
+		add(new AcceptCancelPanel(this, this), BorderLayout.SOUTH);
+	}
+
+
+	private JRadioButton getRdDontShowLabelsWhenZoomed() {
+		if (rdBtnDontShowLabelWhenZoomed == null) {
+			rdBtnDontShowLabelWhenZoomed = new JRadioButton(
+					Messages.getText("dont_show_labels_when_zoomed"));
+		}
+		return rdBtnDontShowLabelWhenZoomed;
+	}
+
+	private JRadioButton getRdUseSameRangeThanLayer() {
+		if (rdBtnUseSameRangeThanLayer == null) {
+			rdBtnUseSameRangeThanLayer = new JRadioButton(
+					Messages.getText("use_the_same_scale_range_as_the_feature_layer"));
+		}
+		return rdBtnUseSameRangeThanLayer;
+	}
+
+	public long getMaxScale() {
+		return maxScale;
+	}
+
+	private ComboScale getCmbMaxScale() {
+		if (cmbMaxScale == null) {
+			cmbMaxScale = new ComboScale();
+			TreeSet<Long> ts = new TreeSet<Long>();
+			if (maxScale!=-1) ts.add(maxScale);
+			for (int i = 0; i < defaultScales.length; i++) {
+				ts.add(defaultScales[i]);
+			}
+			long[] items = new long[ts.size()];
+			for (int i = 0; i < items.length; i++) {
+				items[i] = ts.first();
+				ts.remove(ts.first());
+			}
+			cmbMaxScale.setItems(items);
+
+		}
+
+		return cmbMaxScale;
+	}
+
+	private ComboScale getCmbMinScale() {
+		if (cmbMinScale == null) {
+			cmbMinScale = new ComboScale();
+			TreeSet<Long> ts = new TreeSet<Long>();
+			if (minScale != -1)	ts.add(minScale);
+			for (int i = 0; i < defaultScales.length; i++) {
+				ts.add(defaultScales[i]);
+			}
+			long[] items = new long[ts.size()];
+			for (int i = 0; i < items.length; i++) {
+				items[i] = ts.first();
+				ts.remove(ts.first());
+			}
+			cmbMinScale.setItems(items);
+		}
+
+		return cmbMinScale;
+	}
+
+
+	public long getMinScale() {
+		return minScale;
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+		wi.setTitle(Messages.getText("scale_range_window_title"));
+		wi.setWidth(480);
+		wi.setHeight(200);
+		return wi;
+	}
+	
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		Component c = (Component) e.getSource();
+		if (getRdDontShowLabelsWhenZoomed().equals(c) ||
+			getRdUseSameRangeThanLayer().equals(c)) {
+			getCmbMinScale().setEnabled(getRdDontShowLabelsWhenZoomed().isSelected());
+			getCmbMaxScale().setEnabled(getRdDontShowLabelsWhenZoomed().isSelected());
+
+		}
+
+		if ("OK".equals(e.getActionCommand())) {
+			maxScale = (getRdUseSameRangeThanLayer().isSelected()) ?
+				 -1 : getCmbMaxScale().getScale();
+			minScale = (getRdUseSameRangeThanLayer().isSelected()) ?
+				 -1 : getCmbMinScale().getScale();
+			
+			
+			ApplicationLocator.getManager().getUIManager().closeWindow(this);
+		}
+
+		if ("CANCEL".equals(e.getActionCommand())) {
+			ApplicationLocator.getManager().getUIManager().closeWindow(this);
+		}
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelTextStylePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelTextStylePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelTextStylePanel.java	(revision 42196)
@@ -0,0 +1,259 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.gvsig.app.gui.JComboBoxUnits;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.gui.styling.JComboBoxUnitsReferenceSystem;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JComboBoxFonts;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+
+
+public class LabelTextStylePanel extends JPanel implements ActionListener{
+	private static final long serialVersionUID = 8351591938535233138L;
+	private ITextSymbol symbol;
+	private JComboBoxFonts cmbFont;
+	private ColorChooserPanel colorFont;
+	private JRadioButton rdBtnTextHeight;
+	private JRadioButton rdBtnFitOnTextArea;
+	private JNumberSpinner incrTextSize;
+	private JComboBoxUnits units;
+	private JComboBoxUnitsReferenceSystem referenceSystem;
+
+	private JCheckBox chkWithHalo;
+	private ColorChooserPanel colorHaloChooser;
+	private JNumberSpinner txtHaloWidth;
+
+	private ArrayList<ActionListener> listeners = new ArrayList<ActionListener>();
+	private boolean performAction = true;
+	
+	private JCheckBox getCheckHalo() {
+		if (chkWithHalo == null) {
+			chkWithHalo = new JCheckBox(Messages.getText("_Use_halo") + ": ");
+			chkWithHalo.setSelected(false);
+			chkWithHalo.setName("CHECK_HALO");
+		}
+		return chkWithHalo;
+	}
+	private ColorChooserPanel getHaloColorChooser() {
+		if (colorHaloChooser == null){
+			colorHaloChooser = new ColorChooserPanel(true);
+			colorHaloChooser.setColor(Color.WHITE);
+		}
+		return colorHaloChooser;
+	}
+	
+
+	private JNumberSpinner getTxtHaloWidth() {
+		if (txtHaloWidth == null) {
+			txtHaloWidth = new JNumberSpinner(3);
+		}
+		return txtHaloWidth;
+	}
+
+
+
+	public LabelTextStylePanel() {
+		setLayout(new BorderLayout(10, 2));
+		JPanel aux = new JPanel();
+		aux.setLayout(new BoxLayout(aux,BoxLayout.Y_AXIS));
+		JPanel auxA = new JPanel();
+		aux.setBorder(BorderFactory.createTitledBorder(Messages.getText("font")));
+		auxA.add(new JLabel(Messages.getText("font")));
+		auxA.add(cmbFont = new JComboBoxFonts(),BorderLayout.NORTH);
+		JPanel auxB = new JPanel();
+		auxB.add(new JLabel(Messages.getText("color")));
+		auxB.add(colorFont = new ColorChooserPanel(true),BorderLayout.SOUTH);
+		cmbFont.addActionListener(this);
+		colorFont.addActionListener(this);
+		aux.add(auxA);
+		aux.add(auxB);
+		add(aux, BorderLayout.WEST);
+
+		aux = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 2));
+		aux.setBorder(BorderFactory.createTitledBorder(Messages.getText("format")));
+		rdBtnTextHeight = new JRadioButton(Messages.getText("fixed_text_size"));
+		rdBtnFitOnTextArea = new JRadioButton(Messages.getText("fit_on_text_area"));
+		rdBtnFitOnTextArea.addActionListener(this);
+		rdBtnTextHeight.addActionListener(this);
+		ButtonGroup g = new ButtonGroup();
+		g.add(rdBtnFitOnTextArea);
+		g.add(rdBtnTextHeight);
+		incrTextSize = new JNumberSpinner(
+				1,
+                                7,
+				0,
+				Double.POSITIVE_INFINITY,
+				1);
+		incrTextSize.addActionListener(this);
+		units = new JComboBoxUnits();
+		referenceSystem = new JComboBoxUnitsReferenceSystem();
+		units.addActionListener(this);
+		referenceSystem.addActionListener(this);
+
+		GridBagLayoutPanel aux2 = new GridBagLayoutPanel();
+		JPanel aux3 = new JPanel(new FlowLayout(FlowLayout.LEFT, 3, 0));
+		aux3.add(rdBtnTextHeight);
+		aux3.add(incrTextSize);
+
+		aux3.add(units);
+		aux3.add(referenceSystem);
+
+		aux2.addComponent(aux3);
+		GridBagLayoutPanel aux4 = new GridBagLayoutPanel();
+		aux4.addComponent(rdBtnFitOnTextArea);
+		
+		// Para reflejar los cambios.
+		getCheckHalo().addActionListener(this);
+		getHaloColorChooser().addActionListener(this);
+		getTxtHaloWidth().addActionListener(this);
+
+		
+		aux4.addComponent(getCheckHalo(), getHaloColorChooser());
+		aux4.addComponent(Messages.getText("_Halo_width") + ": ", getTxtHaloWidth());
+
+	
+		aux2.addComponent(aux4);
+		aux.add(aux2);
+
+		add(aux, BorderLayout.CENTER);
+	}
+
+
+
+	public void setModel(ITextSymbol textSymbol, int unit, int referenceSystem) {
+		incrTextSize.setDouble(textSymbol.getFont().getSize());
+		rdBtnTextHeight.setSelected(!textSymbol.isAutoresizeEnabled());
+		rdBtnFitOnTextArea.setSelected(textSymbol.isAutoresizeEnabled());
+		getCheckHalo().setSelected(textSymbol.isDrawWithHalo());
+		if (textSymbol.isDrawWithHalo()) {
+			getHaloColorChooser().setColor(textSymbol.getHaloColor());
+			getTxtHaloWidth().setDouble(textSymbol.getHaloWidth());
+		}
+		performAction = false;
+		cmbFont.setSelectedItem(textSymbol.getFont().getName());
+		colorFont.setColor(textSymbol.getTextColor());
+		this.units.setSelectedUnitIndex(unit);
+		this.referenceSystem.setSelectedIndex(referenceSystem);
+		boolean enableSize = rdBtnTextHeight.isSelected();
+		this.units.setEnabled(enableSize);
+		this.referenceSystem.setEnabled(enableSize);
+		this.incrTextSize.setEnabled(enableSize);
+		performAction = true;
+		this.symbol = textSymbol;
+	}
+
+	public ITextSymbol getTextSymbol() {
+		symbol.setDrawWithHalo(chkWithHalo.isSelected());
+		if (symbol.isDrawWithHalo()) {
+			symbol.setHaloColor(colorHaloChooser.getColor());
+			symbol.setHaloWidth((float) txtHaloWidth.getDouble());
+		}
+
+		return symbol;
+	}
+
+
+	public void addActionListener(ActionListener l) {
+		listeners.add(l);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (performAction) {
+			boolean enableSize = rdBtnTextHeight.isSelected();
+			incrTextSize.setEnabled(enableSize);
+			units.setEnabled(enableSize);
+			referenceSystem.setEnabled(enableSize);
+
+			if (symbol != null) {
+				symbol.setAutoresizeEnabled(rdBtnFitOnTextArea.isSelected());
+				symbol.setFont(
+						new Font(
+								(String) cmbFont.getSelectedItem(),
+								Font.PLAIN,
+								(int) incrTextSize.getDouble()));
+				symbol.setTextColor(colorFont.getColor());
+				symbol.setFontSize(incrTextSize.getDouble());
+
+				/* -------------- Add to API?
+				symbol.setUnit(units.getSelectedUnitIndex());
+				symbol.setReferenceSystem(referenceSystem.getSelectedIndex());
+				*/
+				symbol.setDrawWithHalo(chkWithHalo.isSelected());
+				if (symbol.isDrawWithHalo()) {
+					symbol.setHaloColor(colorHaloChooser.getColor());
+					symbol.setHaloWidth((float) txtHaloWidth.getDouble());
+				}
+
+			}
+			for (ActionListener l : listeners) {
+				l.actionPerformed(new ActionEvent(this, 0, null));
+			}
+		}
+	}
+
+	public int getUnit() {
+		return this.units.getSelectedUnitIndex();
+	}
+
+	public int getReferenceSystem() {
+		return this.referenceSystem.getSelectedIndex();
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/PlacementProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/PlacementProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/PlacementProperties.java	(revision 42196)
@@ -0,0 +1,1143 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id: PlacementProperties.java 15674 2007-10-30 16:39:02Z jdominguez $
+* $Log$
+* Revision 1.7  2007-04-19 14:22:29  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/13 12:43:08  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2007/04/13 12:10:56  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2007/04/12 16:01:32  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2007/03/28 15:38:56  jaume
+* GUI for lines, points and polygons
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.2  2007/02/09 11:00:03  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/02/01 12:12:41  jaume
+* theme manager window and all its components are now dynamic
+*
+*
+*/
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridLayout;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.SwingUtilities;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.styling.SingleStyleSelectorFilter;
+import org.gvsig.app.gui.styling.StylePreviewer;
+import org.gvsig.app.gui.styling.StyleSelector;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.label.GeneralLabelingStrategy;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.gvsig.labeling.placements.MultiShapePlacementConstraints;
+import org.gvsig.labeling.placements.PlacementManager;
+import org.gvsig.labeling.placements.PointLabelPositioner;
+import org.gvsig.labeling.placements.PointPlacementConstraints;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.ISimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ISimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IArrowDecoratorStyle;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.ISimpleLineStyle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class PlacementProperties extends JPanel implements
+IPlacementProperties, ActionListener {
+	
+	private static final Logger logger =
+			LoggerFactory.getLogger(PlacementProperties.class);
+	
+	private static final long serialVersionUID = 1022470370547576765L;
+	
+	private PointLabelPositioner defaultPointStyle = new PointLabelPositioner(
+			new int[] { 2, 2, 1, 3, 2, 3, 3, 2	},
+			Messages.getText("prefer_top_right_all_allowed")
+			);
+
+	public IPlacementConstraints constraints;
+
+	private PointLabelPositioner pointStyle = null;
+	private int shapeType;
+	private JPanel pnlContent = null;
+	private JPanel pnlCenter = null;
+	private JPanel orientationPanel;
+	private DuplicateLayersMode	duplicateLabelsMode;
+	private JRadioButton rdBtnHorizontal;
+	private JRadioButton rdBtnParallel;
+	private JRadioButton rdBtnFollowingLine;
+	private JRadioButton rdBtnPerpendicular;
+	private JPanel positionPanel;
+	private MiniMapContext preview;
+	private ArrayList<String> linePositionItem = new ArrayList<String>();
+
+	private JPanel polygonSettingsPanel;
+	private JRadioButton rdBtnAlwaysHorizontal;
+	private JRadioButton rdBtnAlwaysStraight;
+	private GridBagLayoutPanel pointSettingsPanel;
+	private JRadioButton rdBtnOffsetLabelHorizontally;
+	private JRadioButton rdBtnOffsetLabelOnTopPoint;
+	private StylePreviewer stylePreview;
+	private JButton btnChangeLocation;
+	private JPanel locationPanel;
+	private JComboBox cmbLocationAlongLines;
+	private JRadioButton chkBellow;
+	private JRadioButton chkOnTheLine;
+	private JRadioButton chkAbove;
+	private JComboBox cmbOrientationSystem;
+	private JLabelHTML lblPointPosDesc = new JLabelHTML(""); //pointStyle.getDescription());
+	IPlacementConstraints oldConstraints;
+	private JCheckBox chkFitInsidePolygon;
+
+
+	/**
+	 * Constructs a new panel for PlacementProperties.
+	 *
+	 * @param constraints, if not null this parameters is used to fill the panel. If it is null
+	 * this PlacementProperties constructor creates a new default one that is ready to be used
+	 * for the shapetype passed as second parameter
+	 *
+	 * @param shapeType, defines the target shapetype of the IPlacementConstraints obtained;
+	 * @throws ReadDriverException
+	 */
+	public PlacementProperties(IPlacementConstraints constraints, int shapeType) {
+		initialize(constraints, shapeType, getPnlDuplicateLabels());
+	}
+
+	PlacementProperties(IPlacementConstraints costraints,
+			int shapeType, DuplicateLayersMode duplicatesMode) {
+
+		initialize( costraints, shapeType, duplicatesMode);
+		refreshComponents();
+	}
+
+	private void refreshComponents() {
+		getChkOnTheLine().setSelected(constraints.isOnTheLine());
+		getChkAbove().setSelected(constraints.isAboveTheLine());
+		getChkBelow().setSelected(constraints.isBelowTheLine());
+
+		getRdBtnHorizontal().setSelected(constraints.isHorizontal());
+		getRdBtnParallel().setSelected(constraints.isParallel());
+		getRdBtnFollowingLine().setSelected(constraints.isFollowingLine());
+		getRdBtnPerpendicular().setSelected(constraints.isPerpendicular());
+
+		getCmbOrientationSystem().setSelectedIndex(constraints.isPageOriented() ? 1 : 0);
+
+		// points mode
+		if (constraints.isOnTopOfThePoint()) {
+			getRdOffsetLabelOnTopPoint().setSelected(true);
+		} else if (constraints.isAroundThePoint()) {
+			getRdOffsetLabelHorizontally().setSelected(true);
+		}
+
+		// lines mode
+		if (constraints.isAtTheBeginingOfLine()) {
+			getCmbLocationAlongLines().setSelectedIndex(1);
+		} else if (constraints.isInTheMiddleOfLine()) {
+			getCmbLocationAlongLines().setSelectedIndex(0);
+		} else if (constraints.isAtTheEndOfLine()) {
+			getCmbLocationAlongLines().setSelectedIndex(2);
+		} else if (constraints.isAtBestOfLine()) {
+			getCmbLocationAlongLines().setSelectedIndex(3);
+		}
+
+		// polygon mode
+		getChkFitInsidePolygon().setSelected(constraints.isFitInsidePolygon());
+		if (constraints.isHorizontal()) {
+			getRdBtnAlwaysHorizontal().setSelected(true);
+		} else if (constraints.isParallel()) {
+			getRdBtnAlwaysStraight().setSelected(true);
+		}
+
+//		if(constraints.isFollowingLine()){
+//			setComponentEnabled(getPositionPanel(), false);
+//		}
+
+
+		// duplicates mode
+		int dupMode = constraints.getDuplicateLabelsMode();
+		duplicateLabelsMode.setMode(dupMode);
+		applyToPreview();
+	}
+
+	private void initialize(
+			IPlacementConstraints constraints,
+			int shapeType, DuplicateLayersMode duplicatesMode) {
+	    
+        this.duplicateLabelsMode = duplicatesMode;
+
+		this.shapeType = shapeType;
+		this.oldConstraints = constraints;
+//		this.constraints = constraints != null ?
+//				PlacementManager.createPlacementConstraints(constraints.getXMLEntity())	:
+//				PlacementManager.createPlacementConstraints(shapeType);
+		if( constraints != null ) {
+			
+			this.constraints = (IPlacementConstraints) LabelClassUtils.clone(constraints);
+			
+			if (constraints instanceof PointPlacementConstraints) {
+				PointLabelPositioner positioneer = ((PointPlacementConstraints)constraints).getPositioner();
+				if (positioneer != null) this.setPointStyle(positioneer);
+				this.lblPointPosDesc.setText(this.getPointStyle().getDescription());
+			}
+		} else {
+			try {
+				this.constraints = PlacementManager.createPlacementConstraints(shapeType);
+			} catch (Exception e) {
+				logger.error("While initializing placement constraints.", e);
+				return;
+			}
+		}
+		
+		/*
+		 * We need to update this here because GUI events would
+		 * remove the previous value
+		 */
+		this.getPnlDuplicateLabels().setMode(this.constraints.getDuplicateLabelsMode());
+
+		linePositionItem.add(Messages.getText("in_the_middle"));
+		linePositionItem.add(Messages.getText("at_begin"));
+		linePositionItem.add(Messages.getText("at_end"));
+		linePositionItem.add(Messages.getText("at_best"));
+
+        this.setLayout(new BorderLayout());
+        this.setSize(new Dimension(410,380));
+        this.add(getPnlContent(), BorderLayout.CENTER);
+ 	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo viewInfo = new WindowInfo(
+				WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+		viewInfo.setWidth(440);
+		viewInfo.setHeight(520);
+		viewInfo.setTitle(Messages.getText("placement_properties"));
+		return viewInfo;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+	private JPanel getPnlContent() {
+		if (pnlContent == null) {
+			pnlContent = new JPanel();
+			pnlContent.setLayout(new BorderLayout());
+			pnlContent.add(getPnlCenter(), java.awt.BorderLayout.CENTER);
+			pnlContent.add(getPnlDuplicateLabels(), java.awt.BorderLayout.SOUTH);
+		}
+		return pnlContent;
+	}
+
+	private DuplicateLayersMode getPnlDuplicateLabels() {
+		if (duplicateLabelsMode == null) {
+			duplicateLabelsMode = new DuplicateLayersMode(this);
+		}
+		return duplicateLabelsMode;
+	}
+
+	private JPanel getPnlCenter() {
+		
+		if (pnlCenter == null) {
+			pnlCenter = new JPanel();
+			
+			GeometryType gt = null;
+			try {
+				gt = GeometryLocator.getGeometryManager().getGeometryType(
+						shapeType, SUBTYPES.GEOM2D);
+			} catch (Exception e) {
+				logger.error("While getting panel.", e);
+				return null;
+			}
+			
+			if (gt.isTypeOf(TYPES.POINT) || gt.isTypeOf(TYPES.MULTIPOINT)) {
+				pnlCenter.setBorder(BorderFactory.
+						createTitledBorder(null,
+						Messages.getText("point_settings")));
+				pnlCenter.add(getPointSettingsPanel());
+			} else {
+				if (gt.isTypeOf(TYPES.CURVE) || gt.isTypeOf(TYPES.MULTICURVE)) {
+					pnlCenter.setLayout(new BorderLayout());
+					pnlCenter.setBorder(BorderFactory.
+							createTitledBorder(null,
+									Messages.getText("line_settings")));
+					JPanel aux = new JPanel(
+							new GridLayout(1, 2));
+					aux.add(getOrientationPanel());
+					aux.add(getPositionPanel());
+					pnlCenter.add(aux, BorderLayout.CENTER);
+					pnlCenter.add(getLocationPanel(), BorderLayout.SOUTH);
+				} else {
+					if (gt.isTypeOf(TYPES.SURFACE) || gt.isTypeOf(TYPES.MULTISURFACE)) {
+						pnlCenter.setLayout(new BorderLayout());
+						pnlCenter.setBorder(BorderFactory.
+								createTitledBorder(null,
+										Messages.getText("polygon_settings")));
+						pnlCenter.add(getPolygonSettingsPanel(), BorderLayout.CENTER);
+					}
+				}
+			}
+		}
+		return pnlCenter;
+	}
+
+	private JPanel getLocationPanel() {
+		if (locationPanel == null) {
+			locationPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+			locationPanel.setBorder(BorderFactory.
+					createTitledBorder(null,
+							Messages.getText("location")));
+			locationPanel.add(new JLabel(Messages.getText(
+					"location_along_the_lines")+":"));
+			locationPanel.add(getCmbLocationAlongLines());
+		}
+
+		return locationPanel;
+	}
+
+	private JComboBox getCmbLocationAlongLines() {
+		if (cmbLocationAlongLines == null) {
+			cmbLocationAlongLines = new JComboBox((String[]) linePositionItem.toArray(new String[linePositionItem.size()]));
+			cmbLocationAlongLines.addActionListener(this);
+		}
+
+		return cmbLocationAlongLines;
+	}
+
+	private PointLabelPositioner getPointStyle(){
+		if (pointStyle == null){
+			pointStyle = defaultPointStyle;
+			lblPointPosDesc.setText(pointStyle.getDescription());
+		}
+		return pointStyle;
+	}
+
+	private void setPointStyle(PointLabelPositioner pointStyle){
+		this.pointStyle = pointStyle;
+	}
+
+	private GridBagLayoutPanel getPointSettingsPanel() {
+		if (pointSettingsPanel == null) {
+			pointSettingsPanel = new GridBagLayoutPanel();
+			pointSettingsPanel.addComponent(getRdOffsetLabelHorizontally());
+			JPanel aux = new JPanel();
+			aux.add(getStylePreviewer());
+
+			JPanel aux2 = new JPanel();
+			aux2.setLayout(new BoxLayout(aux2, BoxLayout.Y_AXIS));
+			aux2.add(lblPointPosDesc);
+			aux2.add(new JBlank(20, 5));
+			aux2.add(getBtnChangeLocation());
+
+			aux.add(aux2);
+			pointSettingsPanel.addComponent("", aux);
+			pointSettingsPanel.addComponent("",
+					new JLabel(Messages.getText("label-point-priority-help")));
+			pointSettingsPanel.addComponent(getRdOffsetLabelOnTopPoint());
+			ButtonGroup group = new ButtonGroup();
+			group.add(getRdOffsetLabelHorizontally());
+			group.add(getRdOffsetLabelOnTopPoint());
+		}
+
+		return pointSettingsPanel;
+	}
+
+
+
+	private JButton getBtnChangeLocation() {
+		if (btnChangeLocation == null) {
+			btnChangeLocation = new JButton(Messages.getText("change_location"));
+			btnChangeLocation.addActionListener(this);
+		}
+
+		return btnChangeLocation;
+	}
+
+	private StylePreviewer getStylePreviewer() {
+		if (stylePreview == null) {
+			stylePreview = new StylePreviewer();
+			stylePreview.setStyle(getPointStyle());
+			stylePreview.setPreferredSize(new Dimension(80, 80));
+		}
+		return stylePreview;
+	}
+
+	private JRadioButton getRdOffsetLabelOnTopPoint() {
+		if (rdBtnOffsetLabelOnTopPoint == null) {
+			rdBtnOffsetLabelOnTopPoint = new JRadioButton(
+					Messages.getText("offset_labels_on_top_of_the_points")) ;
+
+		}
+
+		return rdBtnOffsetLabelOnTopPoint;
+	}
+
+	private JRadioButton getRdOffsetLabelHorizontally() {
+		if (rdBtnOffsetLabelHorizontally == null) {
+			rdBtnOffsetLabelHorizontally = new JRadioButton(
+					Messages.getText("offset_labels_horizontally"));
+
+		}
+
+		return rdBtnOffsetLabelHorizontally;
+	}
+
+	private JPanel getPolygonSettingsPanel() {
+		if (polygonSettingsPanel == null) {
+			polygonSettingsPanel = new JPanel(new BorderLayout(10, 10));
+			JPanel aux = new JPanel();
+			aux.setLayout(new BoxLayout(aux, BoxLayout.Y_AXIS));
+			aux.add(new JBlank(10,10));
+			aux.add(getRdBtnAlwaysHorizontal());
+			aux.add(new JBlank(10,10));
+			aux.add(getRdBtnAlwaysStraight());
+			aux.add(new JBlank(10,50));
+
+			polygonSettingsPanel.add(getPreview(), BorderLayout.CENTER);
+			polygonSettingsPanel.add(aux, BorderLayout.EAST);
+			ButtonGroup group = new ButtonGroup();
+			group.add(getRdBtnAlwaysHorizontal());
+			group.add(getRdBtnAlwaysStraight());
+			polygonSettingsPanel.add(getChkFitInsidePolygon(), BorderLayout.SOUTH);
+		}
+
+		return polygonSettingsPanel;
+	}
+
+	private JCheckBox getChkFitInsidePolygon() {
+		if (chkFitInsidePolygon == null) {
+			chkFitInsidePolygon = new JCheckBox(
+					Messages.getText("fit_inside_polygon"));
+			chkFitInsidePolygon.addActionListener(this);
+
+		}
+
+		return chkFitInsidePolygon;
+	}
+
+	private JRadioButton getRdBtnAlwaysStraight() {
+		if (rdBtnAlwaysStraight == null) {
+			rdBtnAlwaysStraight = new JRadioButton(
+					Messages.getText("always_straight"));
+			rdBtnAlwaysStraight.addActionListener(this);
+		}
+
+		return rdBtnAlwaysStraight;
+	}
+
+	private JRadioButton getRdBtnAlwaysHorizontal() {
+		if (rdBtnAlwaysHorizontal == null) {
+			rdBtnAlwaysHorizontal = new JRadioButton(
+					Messages.getText("always_horizontal"));
+			rdBtnAlwaysHorizontal.addActionListener(this);
+		}
+
+		return rdBtnAlwaysHorizontal;
+	}
+
+
+
+	private JPanel getPositionPanel() {
+		if (positionPanel == null) {
+			positionPanel = new JPanel(new BorderLayout());
+			positionPanel.setBorder(BorderFactory.
+					createTitledBorder(null,
+							Messages.getText("position")));
+			GridBagLayoutPanel aux2 = new GridBagLayoutPanel();
+			JPanel aux = new JPanel(new GridLayout(4, 1));
+
+			aux.add(getChkAbove());
+			getChkAbove().setSelected(true);
+			aux.add(getChkOnTheLine());
+			aux.add(getChkBelow());
+
+			ButtonGroup group = new ButtonGroup();
+			group.add(getChkAbove());
+			group.add(getChkOnTheLine());
+			group.add(getChkBelow());
+
+			aux2.addComponent(aux);
+			aux2.addComponent(
+					Messages.getText("orientation_system"), getCmbOrientationSystem());
+			positionPanel.add(getPreview(), BorderLayout.CENTER);
+			positionPanel.add(aux2, BorderLayout.SOUTH);
+		}
+		return positionPanel;
+	}
+
+	private Component getPreview() {
+		 if (preview == null) {
+			 preview = new MiniMapContext(shapeType);
+		 }
+		 return preview;
+	}
+
+	private JComboBox getCmbOrientationSystem() {
+		if (cmbOrientationSystem == null) {
+			cmbOrientationSystem = new JComboBox(new String[] {
+					Messages.getText("line"),
+					Messages.getText("page")
+			});
+			cmbOrientationSystem.setSelectedIndex(1);
+			cmbOrientationSystem.addActionListener(this);
+		}
+
+		return cmbOrientationSystem;
+	}
+
+	private JRadioButton getChkBelow() {
+		if (chkBellow == null) {
+			chkBellow = new JRadioButton(Messages.getText("below"));
+			chkBellow.addActionListener(this);
+		}
+		return chkBellow;
+	}
+
+	private JRadioButton getChkOnTheLine() {
+		if (chkOnTheLine == null) {
+			chkOnTheLine = new JRadioButton(
+					Messages.getText("on_the_line"));
+			chkOnTheLine.addActionListener(this);
+		}
+		return chkOnTheLine;
+	}
+
+	private JRadioButton getChkAbove() {
+		if (chkAbove == null) {
+			chkAbove = new JRadioButton(Messages.getText("above"));
+			chkAbove.addActionListener(this);
+		}
+		return chkAbove;
+	}
+
+	private JPanel getOrientationPanel() {
+		if (orientationPanel == null) {
+		    
+		    orientationPanel = new JPanel(new BorderLayout());
+            orientationPanel.setBorder(BorderFactory.
+                createTitledBorder(null,
+                        Messages.getText("orientation")));
+		    
+            GridBagLayoutPanel auxp = new GridBagLayoutPanel();
+            auxp.addComponent(getRdBtnHorizontal());
+            auxp.addComponent(getRdBtnParallel());
+            auxp.addComponent(getRdBtnFollowingLine());
+            auxp.addComponent(getRdBtnPerpendicular());
+            
+            orientationPanel.add(auxp, BorderLayout.NORTH);
+            
+			ButtonGroup group = new ButtonGroup();
+			group.add(getRdBtnHorizontal());
+			group.add(getRdBtnParallel());
+			group.add(getRdBtnFollowingLine());
+			group.add(getRdBtnPerpendicular());
+		}
+		return orientationPanel;
+	}
+
+	private JRadioButton getRdBtnParallel() {
+		if (rdBtnParallel == null) {
+			rdBtnParallel = new JRadioButton(
+					Messages.getText("parallel"));
+
+			rdBtnParallel.addActionListener(this);
+		}
+		return rdBtnParallel;
+	}
+
+	private JRadioButton getRdBtnFollowingLine() {
+		if (rdBtnFollowingLine == null) {
+			rdBtnFollowingLine = new JRadioButton(
+					Messages.getText("following_line"));
+			rdBtnFollowingLine.addActionListener(this);
+		}
+		return rdBtnFollowingLine;
+	}
+
+	private JRadioButton getRdBtnPerpendicular() {
+		if (rdBtnPerpendicular == null) {
+			rdBtnPerpendicular = new JRadioButton(
+					Messages.getText("perpedicular"));
+			rdBtnPerpendicular.addActionListener(this);
+		}
+		return rdBtnPerpendicular;
+	}
+
+	private JRadioButton getRdBtnHorizontal() {
+		if (rdBtnHorizontal == null) {
+			rdBtnHorizontal = new JRadioButton(
+					Messages.getText("horizontal"));
+			rdBtnHorizontal.addActionListener(this);
+		}
+		return rdBtnHorizontal;
+	}
+
+
+
+
+	public void applyConstraints() throws GeometryException {
+		int mode=0;
+		GeometryType gt = null;
+		gt = GeometryLocator.getGeometryManager().getGeometryType(
+				shapeType, SUBTYPES.GEOM2D);
+		
+		if (gt.isTypeOf(TYPES.POINT) || gt.isTypeOf(TYPES.MULTIPOINT)) {
+			if (getRdOffsetLabelOnTopPoint().isSelected()) {
+				mode = IPlacementConstraints.ON_TOP_OF_THE_POINT;
+			} else if (getRdOffsetLabelHorizontally().isSelected()) {
+				mode = IPlacementConstraints.OFFSET_HORIZONTALY_AROUND_THE_POINT;
+			}
+			((PointPlacementConstraints) constraints).
+				setPositioner((PointLabelPositioner) stylePreview.getStyle());
+		} else {
+			if (gt.isTypeOf(TYPES.CURVE) || gt.isTypeOf(TYPES.MULTICURVE)) {
+				if (getRdBtnFollowingLine().isSelected()) {
+					mode = IPlacementConstraints.FOLLOWING_LINE;
+				} else if (getRdBtnParallel().isSelected()) {
+					mode = IPlacementConstraints.PARALLEL;
+				} else if (getRdBtnPerpendicular().isSelected()) {
+					mode = IPlacementConstraints.PERPENDICULAR;
+				} else {
+					mode = IPlacementConstraints.HORIZONTAL;
+				}
+
+				constraints.setAboveTheLine(getChkAbove().isSelected());
+				constraints.setBelowTheLine(getChkBelow().isSelected());
+				constraints.setOnTheLine(getChkOnTheLine().isSelected());
+
+				constraints.setPageOriented(
+						getCmbOrientationSystem().getSelectedIndex() == 1);
+				int i = getCmbLocationAlongLines().getSelectedIndex();
+				if (i == 0) {
+					i = IPlacementConstraints.AT_THE_MIDDLE_OF_THE_LINE;
+				} else if (i == 1) {
+					i = IPlacementConstraints.AT_THE_BEGINING_OF_THE_LINE;
+				} else if (i == 2) {
+					i = IPlacementConstraints.AT_THE_END_OF_THE_LINE;
+				} else if (i == 3) {
+					i = IPlacementConstraints.AT_BEST_OF_LINE;
+				}
+				constraints.setLocationAlongTheLine(i);
+			} else {
+				if (gt.isTypeOf(TYPES.SURFACE) || gt.isTypeOf(TYPES.MULTISURFACE)) {
+					mode = IPlacementConstraints.HORIZONTAL;
+					if (getRdBtnAlwaysHorizontal().isSelected()) {
+						mode = IPlacementConstraints.HORIZONTAL;
+					} else if (getRdBtnAlwaysStraight().isSelected()) {
+						mode = IPlacementConstraints.PARALLEL;
+					}
+
+					constraints.setFitInsidePolygon(getChkFitInsidePolygon().isSelected());
+				}
+			}
+		}		
+		
+		constraints.setPlacementMode(mode);
+		constraints.setDuplicateLabelsMode(duplicateLabelsMode.getMode());
+	}
+
+	private void setComponentEnabled(Component c, boolean b) {
+		if (c instanceof JComponent) {
+			JComponent c1 = (JComponent) c;
+			for (int i = 0; i < c1.getComponentCount(); i++) {
+				setComponentEnabled(c1.getComponent(i), b);
+			}
+		}
+		c.setEnabled(b);
+	}
+
+
+	public IPlacementConstraints getPlacementConstraints() {
+		return constraints;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		JComponent c = (JComponent) e.getSource();
+		boolean okPressed = "OK".equals(e.getActionCommand());
+		boolean cancelPressed = "CANCEL".equals(e.getActionCommand());
+		if (okPressed || cancelPressed) {
+			if (okPressed) {
+				try {
+					applyConstraints();
+				} catch (GeometryException e1) {
+					logger.error("While applying constraints.", e1);
+				}
+			}
+
+			if ("CANCEL".equals(e.getActionCommand()))
+				constraints = oldConstraints;
+			
+			ApplicationLocator.getManager().getUIManager().closeWindow(this);
+
+			return;
+		} else if (c.equals(rdBtnAlwaysHorizontal)
+				|| c.equals(rdBtnAlwaysStraight) ) {
+			
+			
+		} else if (c.equals(rdBtnHorizontal)) {
+			// lock position panel and location panel
+			setComponentEnabled(getPositionPanel(), false);
+			setComponentEnabled(getLocationPanel(), false);
+		} else if (c.equals(rdBtnParallel) || c.equals(rdBtnPerpendicular)) {
+			// unlock position panel and location panel but keep orientation system locked
+			setComponentEnabled(getLocationPanel(), true);
+			setComponentEnabled(getPositionPanel(), true);
+			getCmbOrientationSystem().setEnabled(true);
+		} else if (c.equals(rdBtnFollowingLine)) {
+			setComponentEnabled(getLocationPanel(), true);
+			setComponentEnabled(getPositionPanel(), true);
+			getCmbOrientationSystem().setSelectedItem(Messages.getText("line"));
+			getCmbOrientationSystem().setEnabled(false);
+		} else if (c.equals(btnChangeLocation)) {
+			StyleSelector stySel = new StyleSelector(
+				getPointStyle(),
+				TYPES.POINT,
+				new SingleStyleSelectorFilter(PointLabelPositioner.class));
+			
+			ApplicationLocator.getManager().getUIManager().addWindow(stySel);
+			
+			IStyle sty = (IStyle) stySel.getSelectedObject();
+			if (sty != null) {
+				stylePreview.setStyle(sty);
+				lblPointPosDesc.setText(sty.getDescription());
+			}
+		} else if (c == this.getChkFitInsidePolygon()) {
+			
+		} else if (c == getPnlDuplicateLabels()) {
+			
+		}
+		
+		applyToPreview();
+		
+		CompRefreshThread st = new CompRefreshThread(getPnlContent(), 500);
+        st.start();
+
+	}
+
+	private void applyToPreview() {
+		if (preview != null) {
+			try {
+				applyConstraints();
+			} catch (GeometryException e) {
+				logger.error("While applying constraints.", e);
+			}
+			preview.setConstraints(constraints);
+		}
+	}
+
+	private class JLabelHTML extends JLabel {
+		private static final long serialVersionUID = -5031405572546951108L;
+
+		public JLabelHTML(String text) {
+			super(text);
+			setPreferredSize(new Dimension(250, 60));
+		}
+
+		@Override
+		public void setText(String text) {
+			// silly fix to avoid too large text lines
+			super.setText("<html>"+text+"</html>");
+		}
+	}
+
+	public static IPlacementProperties createPlacementProperties(
+			IPlacementConstraints placementConstraints, int shapeType) {
+		return createPlacementProperties(placementConstraints, shapeType, null);
+	}
+
+	protected static IPlacementProperties createPlacementProperties(
+			IPlacementConstraints placementConstraints, int geotype,
+			DuplicateLayersMode duplicatesMode) {
+		
+		IPlacementProperties pp = null;
+		if (geotype == TYPES.GEOMETRY || geotype == TYPES.AGGREGATE) {
+			try {
+				pp = new MultiShapePlacementProperties(
+						(MultiShapePlacementConstraints) placementConstraints);
+			} catch (Exception e) {
+				logger.error("While creating MultiShapePlacementProperties", e);
+			}
+		} else {
+			pp = new PlacementProperties(placementConstraints, geotype, null);
+		}
+		((JPanel) pp).add(new AcceptCancelPanel(pp, pp), BorderLayout.SOUTH);
+		return pp;
+	}
+	
+    class CompRefreshThread extends Thread {
+        
+        private int waitt = 0;
+        private Component compo = null;
+        
+        public CompRefreshThread(Component co, int t) {
+            compo = co;
+            waitt = t;
+        }
+        public void run() {
+            
+            try {
+                /*
+                 * We might need to wait a bit because the GUI thread needs
+                 * some time to update (this is because we have used a modal dialog
+                 * and we refresh after that dialog is closed)
+                 */
+                Thread.sleep(waitt);
+            } catch (Exception exc) {
+                
+            }
+            
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    try {
+                        compo.repaint(); // .invalidate();
+                    } catch (Exception exc) {
+                        // logger.info("Error while refreshing components.", exc);
+                    }
+                }
+            });
+        }
+    }
+    
+	
+}  //  @jve:decl-index=0:visual-constraint="10,10"
+
+class MiniMapContext extends JComponent {
+	
+	private static final Logger minilogger =
+			LoggerFactory.getLogger(MiniMapContext.class);
+	
+	private static final long serialVersionUID = 229128782038834443L;
+	private MapContext theMapContext;
+	private FLyrVect line_layer;
+	private FLyrVect bgpoly_layer;
+	private int hMargin = 5, vMargin = 5;
+	private FLyrVect poly_layer;
+	
+	private int geotype;
+	private IPlacementConstraints placement;
+
+
+	public MiniMapContext(int type) {
+		setType(type);
+	}
+
+	public void setType(int type) {
+		
+		GeometryType gtype = null;
+		try {
+			gtype = GeometryLocator.getGeometryManager().getGeometryType(
+					type, SUBTYPES.GEOM2D);
+		} catch (Exception e) {
+			minilogger.error("While getting geo type", e);
+		}
+		
+		if (gtype.isTypeOf(TYPES.CURVE)
+				|| gtype.getType() == TYPES.MULTICURVE) {
+			this.geotype = TYPES.CURVE;
+		} else {
+			if (gtype.isTypeOf(TYPES.SURFACE)
+					|| gtype.getType() == TYPES.MULTISURFACE) {
+				this.geotype = TYPES.SURFACE;
+			} else {
+				// Should not get here
+				this.geotype = TYPES.GEOMETRY;
+			}
+		}
+		
+	}
+
+	public void setConstraints(IPlacementConstraints constraints) {
+		placement = constraints;
+		try {
+			getMapContext(null);
+		} catch (Exception e) {
+			minilogger.error("While getting mini map context", e);
+		}
+		repaint();
+	}
+
+	private MapContext getMapContext(Dimension img_size) throws Exception {
+		
+		Envelope ini_env = null;
+		ini_env = GeometryLocator.getGeometryManager().createEnvelope(
+				289600, 3973500, 289600 + 2000, 3973700 + 2000,
+				SUBTYPES.GEOM2D);
+
+		
+		if (theMapContext == null) {
+			
+			SymbologyManager symman = SymbologyLocator.getSymbologyManager();
+			MapContextManager mcoman = MapContextLocator.getMapContextManager();
+			
+			line_layer = this.createLayerFromShpDocFile("line.shp", "EPSG:23030");
+			ISimpleLineSymbol line_sym = symman.createSimpleLineSymbol();
+			line_sym.setColor(Color.red);
+			
+			ISimpleLineStyle line_sty = symman.createSimpleLineStyle();
+			IArrowDecoratorStyle arrow_style = symman.createArrowDecoratorStyle();
+			
+			arrow_style.getMarker().setSize(15);
+			arrow_style.setArrowMarkerCount(1);
+			arrow_style.getMarker().setColor(Color.red);
+			line_sty.setArrowDecorator(arrow_style);
+
+			line_sym.setLineStyle(line_sty);
+			line_sym.setLineWidth(2);
+			
+			ISingleSymbolLegend line_leg = (ISingleSymbolLegend) 
+			mcoman.createLegend(ISingleSymbolLegend.LEGEND_NAME);
+			
+			line_leg.setDefaultSymbol(line_sym);
+			line_layer.setLegend(line_leg);
+			// =====================================================
+			
+			bgpoly_layer = this.createLayerFromShpDocFile("bg-polygon.shp", "EPSG:23030");
+			poly_layer = this.createLayerFromShpDocFile("polygon.shp", "EPSG:23030");
+
+			ISimpleFillSymbol sym2 = symman.createSimpleFillSymbol();
+			sym2.setFillColor(new Color(50, 245, 125));
+			ISimpleLineSymbol outline = symman.createSimpleLineSymbol();
+			outline.setLineColor(Color.DARK_GRAY);
+			outline.setLineWidth(0.5);
+			sym2.setOutline(outline);
+
+			ISingleSymbolLegend poly_leg = (ISingleSymbolLegend) 
+			mcoman.createLegend(ISingleSymbolLegend.LEGEND_NAME);
+			poly_leg.setDefaultSymbol(sym2);
+			poly_layer.setLegend(poly_leg);
+			bgpoly_layer.setLegend(poly_leg);
+
+			GeneralLabelingStrategy labeling1 = new GeneralLabelingStrategy();
+			GeneralLabelingStrategy labeling2 = new GeneralLabelingStrategy();
+			ILabelingMethod def_method = symman.createDefaultLabelingMethod();
+
+			ILabelClass lc = null;
+			if (def_method.getLabelClasses() != null && def_method.getLabelClasses().length > 0) {
+				lc = def_method.getLabelClasses()[0];
+			} else {
+				lc = symman.createDefaultLabel();
+				def_method.addLabelClass(lc);
+			}
+
+			String[] sampleExpression = { Messages.getText("text") };
+			lc.setLabelExpressions(sampleExpression);
+
+			lc.getTextSymbol().setFontSize(16);
+
+			labeling1.setLabelingMethod(def_method);
+			labeling2.setLabelingMethod(def_method);
+			labeling1.setLayer(line_layer);
+			labeling2.setLayer(poly_layer);
+
+			line_layer.setLabelingStrategy(labeling1);
+			line_layer.setIsLabeled(true);
+			poly_layer.setLabelingStrategy(labeling2);
+			poly_layer.setIsLabeled(true);
+			
+			ViewPort theViewPort = new ViewPort(CRSFactory.getCRS("EPSG:23030"));
+			theMapContext = new MapContext(theViewPort);
+			
+			if (img_size != null) {
+				theViewPort.setImageSize(img_size);
+			} else {
+				theViewPort.setImageSize(new Dimension(200, 200));
+			}
+			theViewPort.setEnvelope(ini_env);
+			
+			theMapContext.getLayers().addLayer(bgpoly_layer);
+			theMapContext.getLayers().addLayer(poly_layer);
+			theMapContext.getLayers().addLayer(line_layer);
+		} else {
+			
+			if (img_size != null) {
+				theMapContext.getViewPort().setImageSize(img_size);
+			} else {
+				theMapContext.getViewPort().setImageSize(new Dimension(200, 200));
+			}
+			theMapContext.getViewPort().setEnvelope(ini_env);
+		}
+
+		line_layer.getLabelingStrategy().setPlacementConstraints(placement);
+		poly_layer.getLabelingStrategy().setPlacementConstraints(placement);
+		Dimension sz = getBounds().getSize();
+		sz.setSize(sz.width-2*hMargin, sz.height-2*vMargin);
+		theMapContext.getViewPort().setImageSize(sz);
+		theMapContext.getViewPort().setBackColor(new Color(255, 0, 0));
+		theMapContext.invalidate();
+		return theMapContext;
+	}
+
+	@Override
+	protected void paintComponent(Graphics g) {
+		try {
+			Rectangle bounds = getBounds();
+			Dimension sz = bounds.getSize();
+			sz.setSize(sz.width-2*vMargin, sz.height-2*hMargin);
+			Dimension imageSize = sz;
+			
+			MapContext mco = getMapContext(imageSize);
+			if (this.geotype == TYPES.CURVE) {
+				line_layer.setVisible(true);
+				poly_layer.setVisible(false);
+			} else {
+				if (this.geotype == TYPES.SURFACE) {
+					line_layer.setVisible(false);
+					poly_layer.setVisible(true);
+				}
+			}
+			bgpoly_layer.setVisible(line_layer.isVisible());
+
+			BufferedImage bi = new BufferedImage(imageSize.width, imageSize.height, BufferedImage.TYPE_4BYTE_ABGR);
+			mco.invalidate();
+			mco.draw(bi, bi.createGraphics(), mco.getScaleView());
+			g.setColor(new Color(150,180,255));
+			g.fillRect(vMargin, hMargin, bounds.width-2*hMargin, bounds.height-2*vMargin);
+			g.drawImage(bi, vMargin, vMargin, null);
+			bi = null;
+		} catch (Exception e) {
+			
+			minilogger.error("While painting.", e);
+			String noneSelected = "["+Messages.getText("preview_not_available")+"]";
+			int vGap = 5, hGap = 5;
+			Rectangle r = getBounds();
+			FontMetrics fm = g.getFontMetrics();
+			int lineWidth = fm.stringWidth(noneSelected);
+			float scale = (float) r.getWidth() / lineWidth;
+			Font f = g.getFont();
+			float fontSize = f.getSize()*scale;
+			g.setFont(	f.deriveFont( fontSize ) );
+			((Graphics2D) g).drawString(noneSelected, (r.x*scale) - (hGap/2), r.height/2+vGap*scale);
+		}
+
+	}
+	
+	private FLyrVect createLayerFromShpDocFile(
+			String shp_file_name, String epsg_code) throws Exception {
+		
+		File shpfile = getDocFolderFile(shp_file_name);
+		IProjection proj = CRSFactory.getCRS(epsg_code);
+		DataStoreParameters ssp = DALLocator.getDataManager().createStoreParameters("Shape");
+		ssp.setDynValue("shpfile", shpfile);
+		ssp.setDynValue("CRS", proj);
+		FLyrVect resp = null;
+		resp = (FLyrVect) MapContextLocator.getMapContextManager().createLayer(
+				shp_file_name, ssp);
+		return resp;
+	}
+	
+	private File getDocFolderFile(String name) {
+		
+		URL resource = this.getClass().getClassLoader().getResource(
+				"docs" + File.separator + name);
+		File resp = new File(resource.getFile());
+		return resp;
+	}
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelExpressionEditorPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelExpressionEditorPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelExpressionEditorPanel.java	(revision 42196)
@@ -0,0 +1,278 @@
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.ScrollPaneConstants;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.i18n.Messages;
+
+public class LabelExpressionEditorPanel extends JPanel implements
+IWindow, ActionListener, MouseListener {
+	private static final String CANCEL_ACTION = "CANCEL";
+	private static final String ACCEPT_ACTION = "ACCEPT";
+	private static final String ADDFIELD_ACTION = "ADD_FIELD";
+	private String originalValue;
+	private String value;
+	private WindowInfo wInfo = null;
+	private String[] fieldNames;
+	private int[] fieldTypes;
+	private JButton botCancel;
+	private JButton botAccept;
+	private JButton botAddField;
+	private JScrollPane spExpression;
+	private JTextArea txtExpression;
+	private JScrollPane spFieldList;
+	private JList lstFields;
+
+	public LabelExpressionEditorPanel(FeatureAttributeDescriptor[] atts) {
+		super();
+		
+		int n = atts.length;
+		this.fieldNames = new String[n];
+		this.fieldTypes = new int[n];
+		for (int i=0; i<n; i++) {
+			this.fieldNames[i] = atts[i].getName();
+			this.fieldTypes[i] = atts[i].getType();
+		}
+		initialize();
+	}
+
+	private void initialize() {
+		this.setLayout(new GridBagLayout());
+
+		GridBagConstraints baseConst = new GridBagConstraints();
+		baseConst.ipadx = 2;
+		baseConst.ipady = 2;
+		baseConst.anchor = baseConst.CENTER;
+		baseConst.insets = new Insets(2,2,2,2);
+
+		GridBagConstraints con;
+
+		con = (GridBagConstraints) baseConst.clone();
+
+		con.gridx = 0;
+		con.gridy = 0;
+		con.gridheight = 3;
+		con.gridwidth = 2;
+		con.fill = con.BOTH;
+		con.weightx = 1;
+		con.weighty = 1;
+		this.add(getFieldListComposition(), con);
+
+		con = (GridBagConstraints) baseConst.clone();
+		con.gridx = 2;
+		con.gridy = 2;
+		con.fill = con.NONE;
+		this.add(getBotAddField(), con);
+
+		con.gridx = 0;
+		con.gridy = 3;
+		con.gridheight = 4;
+		con.gridwidth = 5;
+		con.fill = con.BOTH;
+		con.weightx = 1;
+		con.weighty = 1;
+		this.add(getExpressionComposition(), con);
+
+		con = (GridBagConstraints) baseConst.clone();
+		con.gridx = 3;
+		con.gridy = 8;
+		con.fill = con.NONE;
+		this.add(getBotAccept(), con);
+
+		con = (GridBagConstraints) baseConst.clone();
+		con.gridx = 4;
+		con.gridy = 8;
+		con.fill = con.NONE;
+		this.add(getBotCancel(), con);
+
+	}
+
+	private JButton getBotCancel() {
+		if (botCancel == null) {
+			
+			botCancel = new JButton(Messages.getText("cancel"));
+			botCancel.setActionCommand(CANCEL_ACTION);
+			botCancel.addActionListener(this);
+		}
+		return botCancel;
+	}
+
+	private JButton getBotAccept() {
+		if (botAccept == null) {
+			botAccept = new JButton(Messages.getText("accept"));
+			botAccept.setActionCommand(ACCEPT_ACTION);
+			botAccept.addActionListener(this);
+		}
+		return botAccept;
+
+	}
+
+	private Component getExpressionComposition() {
+		if (spExpression == null) {
+			spExpression = new JScrollPane();
+			spExpression.setViewportView(getTxtExpression());
+			spExpression.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+			spExpression.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+			spExpression
+					.setBorder(BorderFactory.createTitledBorder(
+							Messages.getText("expression")));
+		}
+		return spExpression;
+	}
+
+	private JTextArea getTxtExpression() {
+		if (txtExpression == null){
+			txtExpression = new JTextArea();
+		}
+		return txtExpression;
+	}
+
+	public void setExpression(String expr){
+		this.getTxtExpression().setText(expr);
+	}
+
+	public String getExpression(){
+		return this.getTxtExpression().getText();
+	}
+
+	private JButton getBotAddField() {
+		if (botAddField == null) {
+			botAddField = new JButton(Messages.getText("add_field"));
+			botAddField.setActionCommand(ADDFIELD_ACTION);
+			botAddField.addActionListener(this);
+		}
+		return botAddField;
+
+	}
+
+	private Component getFieldListComposition() {
+		if (spFieldList == null){
+			spFieldList = new JScrollPane();
+			spFieldList.setViewportView(getLstFields());
+			spFieldList.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+			spFieldList.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+			spFieldList
+					.setBorder(BorderFactory.createTitledBorder(
+							Messages.getText("fields")));
+
+		}
+		return spFieldList;
+	}
+
+	private JList getLstFields() {
+		if (lstFields == null){
+			lstFields = new JList(this.fieldNames);
+			lstFields.addMouseListener(this);
+		}
+		return lstFields;
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (wInfo == null) {
+			wInfo = new WindowInfo(WindowInfo.RESIZABLE
+					+ WindowInfo.MODALDIALOG);
+			wInfo.setWidth(500);
+			wInfo.setHeight(400);
+			wInfo.setTitle(Messages.getText("expression"));
+		}
+		return wInfo;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.EDITOR_PROFILE;
+	}
+
+	public void setValue(String value) {
+		this.originalValue = value;
+		this.value = value;
+		this.setExpression(value);
+	}
+
+	public String getValue() {
+		return this.value;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		doAction(e.getActionCommand());
+	}
+
+	private void doAction(String action){
+		if (action.equals(ADDFIELD_ACTION)){
+			JTextArea txt = getTxtExpression();
+			StringBuffer strb = new StringBuffer();
+			String str = txt.getText();
+			int sini = txt.getSelectionStart();
+			int send = txt.getSelectionEnd();
+			if (sini > 0){
+				strb.append(str.substring(0, sini));
+				str = str.substring(sini);
+			}
+			// strb.append('[');
+			strb.append((String)getLstFields().getSelectedValue());
+			// strb.append(']');
+			send = send -sini;
+			if (send > 0){
+				str = str.substring(send);
+			}
+			strb.append(str);
+
+			getTxtExpression().setText(strb.toString());
+
+		} else {
+			// Accept or cancel
+			if (action.equals(ACCEPT_ACTION)){
+				this.value = getExpression();
+			} else {
+				this.value = this.originalValue;
+			}
+			ApplicationLocator.getManager().getUIManager().closeWindow(this);
+		}
+	}
+
+	public void mouseClicked(MouseEvent e) {
+		if (e.getSource() == getLstFields()){
+			if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() > 1){
+				doAction(ADDFIELD_ACTION);
+			}
+		}
+
+
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		// Do nothing
+
+	}
+
+	public void mouseExited(MouseEvent e) {
+		// Do nothing
+	}
+
+	public void mousePressed(MouseEvent e) {
+		// Do nothing
+
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		// Do nothing
+
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassPreview.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassPreview.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassPreview.java	(revision 42196)
@@ -0,0 +1,146 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.geom.AffineTransform;
+
+import javax.swing.JPanel;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.i18n.Messages;
+
+public class LabelClassPreview extends JPanel {
+	private static final long serialVersionUID = 3788548343944220354L;
+	private Dimension sz = new Dimension(100, 200);
+	private ILabelClass labelClass;
+
+	@Override
+	public Dimension getPreferredSize() {
+		Dimension sz = labelClass == null ? this.sz : labelClass.getBounds().getSize();
+		int w = sz.width;
+		int h = sz.height;
+
+		if (w>300) {
+			w = 300;
+		}
+
+		if (h>200) {
+			h = 200;
+		}
+		sz.setSize(w, h);
+		return sz;
+	}
+
+	@Override
+	protected void paintComponent(Graphics g) {
+		if (labelClass == null)
+			return;
+		Rectangle r = getBounds();
+		r.setLocation(0, 0);
+		g.setColor(Color.white);
+		((Graphics2D) g).fill(r);
+		((Graphics2D) g).setStroke(new BasicStroke(2));
+		g.setColor(Color.black);
+		((Graphics2D) g).draw(r);
+		ILabelStyle sty = labelClass.getLabelStyle();
+		String cad;
+		if (sty != null) {
+			int fc = sty.getFieldCount();
+			String[] texts = new String[fc];
+			for (int i = 0; i < texts.length; i++) {
+				texts[i] = Messages.getText("text_field") + " "+(i+1);
+			}
+			labelClass.setTexts(texts);
+		} else {
+			labelClass.setTexts(new String[] {Messages.getText("text_field")});
+		}
+
+//		try {
+//			labelClass.drawInsideRectangle((Graphics2D) g, r);
+			ITextSymbol sym = labelClass.getTextSymbol();
+			Font myFont = new Font(sym.getFont().getName(),sym.getFont().getStyle(),35);
+			AffineTransform saveAT = ((Graphics2D)g).getTransform();
+			
+//			AffineTransform tx = new AffineTransform();
+//			tx.setToTranslation(0, -r.getCenterY());
+			saveAT.translate(0, r.getCenterY());
+			((Graphics2D) g).setTransform(saveAT);
+			FontRenderContext frc = new FontRenderContext(
+					saveAT, false, true);;
+			g.setFont(myFont);
+			String text = Messages.getText("text_field");
+			
+			if (sym.isDrawWithHalo()) {
+				BasicStroke haloStroke = new BasicStroke(sym.getHaloWidth());
+				char[] charText = new char[text.length()];
+				text.getChars(0, charText.length, charText, 0);
+				GlyphVector glyph = myFont.layoutGlyphVector(frc, charText, 0, charText.length, Font.LAYOUT_NO_LIMIT_CONTEXT);
+				g.setColor(sym.getHaloColor());
+				((Graphics2D) g).setStroke(haloStroke);
+				((Graphics2D) g).draw(glyph.getOutline());
+			}
+			g.setColor(sym.getTextColor());
+			g.drawString(Messages.getText("text_field"), 0, 0);
+//		} catch (SymbolDrawingException e) {
+//			SymbologyFactory
+//					.getWarningSymbol(
+//							PluginServices.getText(this,
+//									"cant_draw_preview"),
+//							SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+//							SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+//		}
+	}
+
+	public void setLabelClass(ILabelClass labelClass) {
+		this.labelClass = labelClass;
+	}
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassPropertiesFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassPropertiesFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/LabelClassPropertiesFactory.java	(revision 42196)
@@ -0,0 +1,33 @@
+
+package org.gvsig.labeling.gui.layerproperties;
+
+import org.gvsig.app.gui.labeling.LabelClassEditor;
+import org.gvsig.app.gui.labeling.LabelClassEditorFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.LabelClass;
+
+public class LabelClassPropertiesFactory implements LabelClassEditorFactory {
+
+    public String getName() {
+       return "Simple class editor";
+    }
+
+    public String getID() {
+        return "SimpleClassEditor";
+    }
+
+    public LabelClassEditor createEditor(ILabelClass labelClass, FeatureStore store) {
+        LabelClassProperties editor = new LabelClassProperties(store);
+        editor.setLabelClass(labelClass);
+        return editor;
+    }
+
+    public boolean accept(Class<? extends ILabelClass> labelClass) {
+        if( LabelClass.class.getName().equals(labelClass.getName()) ) {
+            return true;
+        }
+        return false;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/GeneralLabeling.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/GeneralLabeling.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/GeneralLabeling.java	(revision 42196)
@@ -0,0 +1,414 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeEvent;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.legend.gui.ILabelingStrategyPanel;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IZoomConstraints;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.label.GeneralLabelingFactory;
+import org.gvsig.labeling.label.GeneralLabelingStrategy;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.gvsig.symbology.SymbologyLocator;
+
+public class GeneralLabeling extends JPanel implements
+ILabelingStrategyPanel, ActionListener {
+	
+	private static final long serialVersionUID = 8864709758980903351L;
+	private static Comparator comparator =
+			new Comparator<Class<? extends ILabelingMethod>>(){
+		public int compare(Class<? extends ILabelingMethod> o1,
+				Class<? extends ILabelingMethod> o2) {
+			return o1.getName().compareTo(o2.getName());
+		}};
+		
+	private static TreeMap<
+			Class<? extends ILabelingMethod>,
+			Class<? extends AbstractLabelingMethodPanel>
+		> methods
+		= new TreeMap<
+			Class<? extends ILabelingMethod>,
+			Class<? extends AbstractLabelingMethodPanel>
+		>(comparator);
+	
+	private JButton btnVisualization;
+	private JButton btnPlacement;
+	private JComboBox cmbMethod;
+	private JPanel methodPanel;
+	private IPlacementConstraints placementConstraints;
+	private IZoomConstraints zoomConstraints;
+	private boolean noEvent;
+	private FLyrVect targetLayer;
+	private JCheckBox chkAllowLabelOverlapping;
+	private FLyrVect auxLayer;
+	private GeneralLabelingStrategy gStr;
+	private AbstractLabelingMethodPanel previousMethodPanel = null;
+	public GeneralLabeling() {
+		initialize();
+	}
+
+	private void initialize() {
+		
+		setLayout(new BorderLayout());
+		JPanel center = new JPanel(new BorderLayout(10, 10));
+		center.setBorder(BorderFactory.createTitledBorder(
+				null, Messages.getText("classes")));
+		JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,0));
+		aux.add(new JLabel(Messages.getText("method")+":"));
+		aux.add(getCmbMethod());
+		aux.setPreferredSize(new Dimension(605, 40));
+		center.add(aux, BorderLayout.NORTH);
+
+
+		// el panell del m�tode de moltes FeatureDependantLabelingMethod
+		methodPanel = getMethodPanel();
+		center.add(methodPanel, BorderLayout.CENTER);
+		add(center, BorderLayout.CENTER);
+
+		JPanel south = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 0));
+		south.setBorder(BorderFactory.createTitledBorder(
+				null, Messages.getText("options")));
+		south.add(getBtnVisualization());
+		south.add(getBtnPlacement());
+		south.add(getChkAllowLabelOverlapping());
+		south.setPreferredSize(new Dimension(612, 60));
+
+		add(south, BorderLayout.SOUTH);
+	}
+
+
+	private JPanel getMethodPanel() {
+		if (methodPanel == null){
+			methodPanel = new JPanel(new BorderLayout(10, 0));
+		}
+		return methodPanel;
+	}
+
+	private JCheckBox getChkAllowLabelOverlapping() {
+		if (chkAllowLabelOverlapping == null) {
+			chkAllowLabelOverlapping = new JCheckBox(
+					Messages.getText("allow_label_overlapping"));
+			chkAllowLabelOverlapping.addActionListener(this);
+		}
+		return chkAllowLabelOverlapping;
+	}
+
+	private void refreshControls() {
+		// fires an event from the methods combo box
+		actionPerformed(new ActionEvent(getCmbMethod(), 0, null));
+	}
+
+	private JButton getBtnVisualization() {
+		if (btnVisualization == null) {
+			btnVisualization = new JButton(
+					Messages.getText("visualization")+"...");
+			btnVisualization.setName("BTNVISUALIZATION");
+			btnVisualization.addActionListener(this);
+		}
+		return btnVisualization;
+	}
+
+	private JButton getBtnPlacement() {
+		if (btnPlacement == null) {
+			btnPlacement = new JButton(
+					Messages.getText("placement")+"...");
+			btnPlacement.setName("BTNPLACEMENT");
+			btnPlacement.addActionListener(this);
+		}
+		return btnPlacement;
+	}
+
+	private JComboBox getCmbMethod() {
+		if (cmbMethod == null) {
+			Iterator<Class<? extends AbstractLabelingMethodPanel>> it = methods.values().iterator();
+			ArrayList<AbstractLabelingMethodPanel> panels = new ArrayList<AbstractLabelingMethodPanel>();
+			while (it.hasNext()) {
+				try {
+					panels.add(it.next().newInstance());
+				} catch (Exception e) {
+					throw new Error(e);
+				}
+			}
+			cmbMethod = new JComboBox(panels.toArray());
+			cmbMethod.setSize(new Dimension(300, 22));
+			cmbMethod.setName("CMBMETHOD");
+			cmbMethod.addActionListener(this);
+		}
+		return cmbMethod;
+	}
+
+	public ILabelingStrategy getLabelingStrategy() {
+		GeneralLabelingStrategy resp = GeneralLabelingFactory.
+						createStrategy((FLayer) targetLayer,
+								getMethod(),
+								getPlacementConstraints(),
+								getZoomConstraints());
+
+		resp.setAllowOverlapping(getChkAllowLabelOverlapping().isSelected());
+		return resp;
+	}
+
+	
+	public void setModel(FLayer layer, ILabelingStrategy str) {
+		if (layer instanceof FLyrVect) {
+			try {
+				targetLayer = (FLyrVect) layer;//.cloneLayer();
+				
+				auxLayer = (FLyrVect) targetLayer.cloneLayer();
+				auxLayer.setParentLayer(layer.getParentLayer());
+				auxLayer.setLegend((IVectorLegend)targetLayer.getLegend());
+				auxLayer.setProjection(targetLayer.getProjection());
+				
+				if (str instanceof GeneralLabelingStrategy) {
+					GeneralLabelingStrategy gls = (GeneralLabelingStrategy) str; 
+					gStr = (GeneralLabelingStrategy) gls.clone();
+					auxLayer.setLabelingStrategy(gStr);
+					gStr.setLayer(auxLayer);
+					setMethod(gStr.getLabelingMethod(), auxLayer);
+					placementConstraints = gStr.getPlacementConstraints();
+					zoomConstraints = gStr.getZoomConstraints();
+					getChkAllowLabelOverlapping().setSelected(gStr.isAllowingOverlap());
+				} else {
+					ILabelingStrategy ils = ((FLyrVect) layer).getLabelingStrategy();
+					if (ils != null) {
+						ils = (ILabelingStrategy) LabelClassUtils.clone(ils);
+						auxLayer.setLabelingStrategy(ils);
+					}
+				}
+			} catch (Exception e) {
+				NotificationManager.addError(
+						Messages.getText("While setting model."), e);
+			}
+			refreshControls();
+		}
+	}
+
+
+	public static void addLabelingMethod(Class<? extends AbstractLabelingMethodPanel> iLabelingMethodClass) {
+		try {
+			methods.put(
+					iLabelingMethodClass.newInstance().getLabelingMethodClass(),
+					iLabelingMethodClass);
+		} catch (Exception e) {
+			NotificationManager.addError(
+					Messages.getText("cannot_install_labeling_method"), e);
+		}
+	}
+
+	private void setMethod(ILabelingMethod labelingMethod, FLyrVect srcLayer) {
+		getMethodPanel().removeAll();
+		AbstractLabelingMethodPanel p;
+		try {
+			p = methods.get(labelingMethod.getClass()).newInstance();
+			p.setModel(labelingMethod, srcLayer);
+			cmbMethod.setSelectedItem(p);
+		} catch (Exception e) {
+			// should be impossible;
+			NotificationManager.addWarning(e.getLocalizedMessage());
+		}
+
+	}
+
+	private ILabelingMethod getMethod() {
+		AbstractLabelingMethodPanel p =
+				((AbstractLabelingMethodPanel)cmbMethod.getSelectedItem());
+		if (p != null){
+			return p.getMethod();
+		}
+
+		return SymbologyLocator.getSymbologyManager().createDefaultLabelingMethod();
+	}
+
+	private IZoomConstraints getZoomConstraints() {
+		if (zoomConstraints == null) {
+			zoomConstraints =
+					SymbologyLocator.getSymbologyManager().createDefaultZoomConstraints();
+			
+		}
+		return zoomConstraints;
+	}
+
+	private IPlacementConstraints getPlacementConstraints() {
+		return placementConstraints;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+
+		if (noEvent) return;
+		JComponent c = (JComponent)e.getSource();
+
+		if (c.equals(btnPlacement)) {
+
+			try {
+				IPlacementConstraints oldValue = getPlacementConstraints();
+				IPlacementProperties pp = PlacementProperties.createPlacementProperties(
+						getPlacementConstraints(),
+						((FLyrVect) auxLayer).getShapeType());
+				
+				ApplicationLocator.getManager().getUIManager().addWindow(pp);
+				
+				placementConstraints = pp.getPlacementConstraints();
+
+				((AbstractLabelingMethodPanel) cmbMethod.getSelectedItem()).
+					propertyChange(new PropertyChangeEvent(
+							this,
+							AbstractLabelingMethodPanel.PLACEMENT_CONSTRAINTS,
+							oldValue,
+							placementConstraints));
+
+			} catch (ClassCastException ccEx) {
+				NotificationManager.addError(
+						"Placement constraints not prepared for:"
+						+auxLayer.getClass().getName(),
+						ccEx);
+			} catch (ReadException dEx) {
+				NotificationManager.addError(
+						"While getting layer type", dEx);
+			}
+
+		} else if (c.equals(btnVisualization)) {
+			IZoomConstraints oldValue = getZoomConstraints();
+			LabelScaleRange lsr = new LabelScaleRange(oldValue.getMinScale(), oldValue.getMaxScale());
+			ApplicationLocator.getManager().getUIManager().addWindow(lsr);
+			zoomConstraints =
+					SymbologyLocator.getSymbologyManager().createDefaultZoomConstraints();
+			zoomConstraints.setMaxScale(lsr.getMaxScale());
+			zoomConstraints.setMinScale(lsr.getMinScale());
+			zoomConstraints.setMode(
+					lsr.getMaxScale() ==-1 && lsr.getMinScale() == -1 ?
+							IZoomConstraints.DEFINED_BY_THE_LAYER :
+							IZoomConstraints.DEFINED_BY_THE_USER);
+
+			((AbstractLabelingMethodPanel) cmbMethod.getSelectedItem()).
+			propertyChange(new PropertyChangeEvent(
+					this,
+					AbstractLabelingMethodPanel.ZOOM_CONSTRAINTS,
+					oldValue,
+					getZoomConstraints()));
+
+		} else if (c.equals(chkAllowLabelOverlapping)) {
+			boolean newValue = chkAllowLabelOverlapping.isSelected();
+			((AbstractLabelingMethodPanel) cmbMethod.getSelectedItem()).
+			propertyChange(new PropertyChangeEvent(
+					this,
+					AbstractLabelingMethodPanel.ALLOW_OVERLAP,
+					!newValue,
+					newValue));
+
+		} else if (c.equals(cmbMethod)) {
+			AbstractLabelingMethodPanel p = (AbstractLabelingMethodPanel) cmbMethod.getSelectedItem();
+			if(previousMethodPanel == null || previousMethodPanel != p ){
+				Container cont = methodPanel.getParent();
+				cont.remove(methodPanel);
+				emptyContainer(methodPanel);
+
+				try {
+					if(gStr != null){
+						if(gStr.getLabelingMethod() != null){
+							p.setModel(gStr.getLabelingMethod(), auxLayer);
+						}
+					} else {
+						p.setModel(getMethod(),auxLayer);
+					}
+					methodPanel.add(
+							p,
+							BorderLayout.CENTER);
+
+					methodPanel.repaint();
+					setVisible(false);
+					setVisible(true);
+				} catch (Exception e1) {
+					NotificationManager.addError(new Date(System.currentTimeMillis()).toString(), e1);
+				}
+				cont.add(methodPanel, BorderLayout.CENTER);
+			}
+			previousMethodPanel = p;
+		}
+		
+	}
+
+	private void emptyContainer(Container c) {
+		for (int i = 0; i < c.getComponentCount(); i++) {
+			if (c.getComponent(i) instanceof Container) {
+				emptyContainer((Container) c.getComponent(i));
+			}
+			c.remove(i);
+		}
+	}
+
+	public String getLabelingStrategyName() {
+		return Messages.getText("user_defined_labels");
+	}
+
+	public Class<? extends ILabelingStrategy> getLabelingStrategyClass() {
+		return GeneralLabelingStrategy.class;
+	}
+
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		getBtnPlacement().setEnabled(enabled);
+		getBtnVisualization().setEnabled(enabled);
+		getChkAllowLabelOverlapping().setEnabled(enabled);
+		getCmbMethod().setEnabled(enabled);
+		JPanel mp = getMethodPanel();//.setEnabled(enabled);
+		mp.setEnabled(enabled);
+		for (int i=0; i<mp.getComponentCount(); i++){
+			Component c = mp.getComponent(i);
+			c.setEnabled(enabled);
+		}
+
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/IPlacementProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/IPlacementProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/IPlacementProperties.java	(revision 42196)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.event.ActionListener;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+
+public interface IPlacementProperties extends IWindow, ActionListener {
+	public IPlacementConstraints getPlacementConstraints();
+
+	
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/DuplicateLayersMode.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/DuplicateLayersMode.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/layerproperties/DuplicateLayersMode.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.labeling.gui.layerproperties;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JRadioButton;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.i18n.Messages;
+
+public class DuplicateLayersMode extends GridBagLayoutPanel
+implements ActionListener {
+	
+	private static final long serialVersionUID = 1091963463412809652L;
+	private JRadioButton rdBtnRemoveDuplicates;
+	private JRadioButton rdBtnOnePerFeature;
+	private JRadioButton rdBtnOnePerFeaturePart;
+	
+	private ActionListener actListeneter = null;
+	
+	public DuplicateLayersMode(ActionListener act_lis) {
+		super();
+		actListeneter = act_lis;
+		initialize();
+	}
+	private void initialize() {
+		setBorder(BorderFactory.
+				createTitledBorder(null,
+						Messages.getText("duplicate_labels")));
+		addComponent(getRdBtnRemoveDuplicates());
+		addComponent(getRdBtnOnePerFeature());
+		addComponent(getRdBtnOnePerFeaturePart());
+
+		ButtonGroup group = new ButtonGroup();
+		group.add(getRdBtnOnePerFeature());
+		group.add(getRdBtnOnePerFeaturePart());
+		group.add(getRdBtnRemoveDuplicates());
+	}
+	
+
+	private JRadioButton getRdBtnOnePerFeaturePart() {
+		if (rdBtnOnePerFeaturePart == null) {
+			rdBtnOnePerFeaturePart = new JRadioButton(
+					Messages.getText("place_one_label_per_feature_part"));
+			rdBtnOnePerFeaturePart.addActionListener(this);
+			
+		}
+		return rdBtnOnePerFeaturePart;
+	}
+
+	private JRadioButton getRdBtnOnePerFeature() {
+		if (rdBtnOnePerFeature == null) {
+			rdBtnOnePerFeature = new JRadioButton(
+					Messages.getText("place_one_label_per_feature"));
+			rdBtnOnePerFeature.setSelected(true);
+			rdBtnOnePerFeature.addActionListener(this);
+		}
+		return rdBtnOnePerFeature;
+	}
+
+	private JRadioButton getRdBtnRemoveDuplicates() {
+		if (rdBtnRemoveDuplicates == null) {
+			rdBtnRemoveDuplicates = new JRadioButton(
+					Messages.getText("remove_duplicate_labels"));
+			rdBtnRemoveDuplicates.addActionListener(this);
+
+		}
+		return rdBtnRemoveDuplicates;
+	}
+	
+	public void setMode(int dupMode) {
+		
+		rdBtnRemoveDuplicates.setSelected(dupMode == IPlacementConstraints.REMOVE_DUPLICATE_LABELS);
+		rdBtnOnePerFeature.setSelected(dupMode == IPlacementConstraints.ONE_LABEL_PER_FEATURE);
+		rdBtnOnePerFeaturePart.setSelected(dupMode == IPlacementConstraints.ONE_LABEL_PER_FEATURE_PART);
+	}
+	
+	public int getMode() {
+		if (rdBtnRemoveDuplicates.isSelected()) {
+			return IPlacementConstraints.REMOVE_DUPLICATE_LABELS;
+		}
+		if (rdBtnOnePerFeature.isSelected()) {
+			return IPlacementConstraints.ONE_LABEL_PER_FEATURE;
+		}
+		if (rdBtnOnePerFeaturePart.isSelected()) {
+			return IPlacementConstraints.ONE_LABEL_PER_FEATURE_PART;
+		}
+		
+		throw new Error("Unsupported layer duplicates mode");
+	}
+	public void actionPerformed(ActionEvent e) {
+		
+		if (actListeneter != null) {
+			ActionEvent aev = new ActionEvent(this, 0, "");
+			actListeneter.actionPerformed(aev);
+		}
+		
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/CharacterMarker.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/CharacterMarker.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/CharacterMarker.java	(revision 42196)
@@ -0,0 +1,581 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id: CharacterMarker.java 13828 2007-09-19 11:06:36Z jvidal $
+* $Log$
+* Revision 1.20  2007-09-19 11:06:36  jvidal
+* bug solved
+*
+* Revision 1.19  2007/09/17 09:21:45  jaume
+* refactored SymboSelector (added support for multishapedsymbol)
+*
+* Revision 1.18  2007/08/08 11:45:38  jaume
+* some bugs fixed
+*
+* Revision 1.17  2007/08/07 11:21:05  jvidal
+* javadoc
+*
+* Revision 1.16  2007/08/03 11:29:13  jaume
+* refactored AbstractTypeSymbolEditorPanel class name to AbastractTypeSymbolEditor
+*
+* Revision 1.15  2007/07/30 12:56:04  jaume
+* organize imports, java 5 code downgraded to 1.4 and added PictureFillSymbol
+*
+* Revision 1.14  2007/07/12 10:43:55  jaume
+* *** empty log message ***
+*
+* Revision 1.13  2007/06/29 13:07:33  jaume
+* +PictureLineSymbol
+*
+* Revision 1.12  2007/05/31 09:36:22  jaume
+* *** empty log message ***
+*
+* Revision 1.11  2007/05/29 15:47:06  jaume
+* *** empty log message ***
+*
+* Revision 1.10  2007/05/21 10:38:27  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2007/05/09 16:08:14  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2007/04/26 11:40:09  jaume
+* added new components (JIncrementalNumberField)
+*
+* Revision 1.7  2007/04/20 07:54:38  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2007/04/19 14:22:20  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2007/04/05 16:08:34  jaume
+* Styled labeling stuff
+*
+* Revision 1.4  2007/04/04 16:01:13  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2007/03/30 12:54:11  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.7  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.6  2007/02/08 15:43:05  jaume
+* some bug fixes in the editor and removed unnecessary imports
+*
+* Revision 1.1.2.5  2007/02/05 14:58:28  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.3  2007/02/04 16:57:22  jaume
+* working the map of characters
+*
+* Revision 1.1.2.2  2007/02/02 16:21:32  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2007/01/16 11:52:11  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/06 17:08:45  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.labeling.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.gui.styling.AbstractTypeSymbolEditor;
+import org.gvsig.app.gui.styling.EditorTool;
+import org.gvsig.app.gui.styling.SymbolEditor;
+import org.gvsig.app.gui.styling.SymbolPreviewer;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JComboBoxFontSizes;
+import org.gvsig.gui.beans.swing.JComboBoxFonts;
+import org.gvsig.gui.beans.swing.JNumberSpinner;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.symbol.CharacterMarkerSymbol;
+/**
+* CharacterMarker allows the user to store and modify the properties that
+* define a <b>character marker</b>.<p>
+* <p>
+* This functionality is carried out thanks to two tabs (character marker and mask)which
+* are included in the panel to edit the properities of a symbol (SymbolEditor)how
+* is explained in AbstractTypeSymbolEditor.<p>
+* <p>
+* The first tab (Character marker)allows the user to change the font (<b>cmbFonts</b>)of
+* the symbol for the character marker, the size of that (<b>cmbFontSize</b>),the angle
+*(<b>numberAngle</b>)if the user wants to show the character with some rotation,the color
+* (<b>jcc</b>) and the offset (<b>txtYOffset,txtXOffset</b>).<p>
+* <p>
+* The second tab (<b>Mask</b>) modifies attributes of a mask for points such
+*  as style,size and symbol (to represent a point in the map).<p>
+*
+*@see Mask
+*@see AbstractTypeSymbolEditor
+*@author jaume dominguez faus - jaume.dominguez@iver.es
+*/
+public class CharacterMarker extends AbstractTypeSymbolEditor
+implements ActionListener {
+	
+	private ArrayList<JPanel> tabs = new ArrayList<JPanel>();
+	private JList jListSymbols;
+	private JScrollPane jScrollPane;
+	private JComboBoxFonts cmbFonts;
+	//TODO: Comentarizado hasta que mask est� acabado
+//	private Mask mask;
+	private JComboBoxFontSizes cmbFontSize;
+	private JNumberSpinner numberAngle;
+	private ColorChooserPanel jcc;
+	private JNumberSpinner txtYOffset;
+	private JNumberSpinner txtXOffset;
+	private Font font;
+	private int unicode;
+	private JCheckBox chkAdjustGlyph;
+
+	/**
+	 * contructor method
+	 * @param owner
+	 */
+	public CharacterMarker(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+	/**
+	 * Initializes the parameters that define a charactermarker.To do it, two tabs
+	 * are created inside the SymbolEditor panel with default values for the
+	 * different attributes of the character marker.This two tabs will be character
+	 * marker tab (options of font,size,angle,color and the offset of the character
+	 * marker)and a Mask added as a new tab.
+	 *
+	 */
+	private void initialize() {
+		JPanel myTab;
+		{
+			// Character marker tab
+			myTab = new JPanel(new BorderLayout(10, 10));
+			myTab.setName(Messages.getText("character_marker"));
+			myTab.setLayout(new BorderLayout(15,15));
+
+			JPanel aux = new JPanel(new BorderLayout(15, 15));
+			aux.add(new JLabel(Messages.getText("font")+":"), BorderLayout.NORTH);
+			aux.add(getCmbFonts(), BorderLayout.NORTH);
+
+			getJListSymbols().setModel(
+					new CharacterListModel(
+							new Font((String) getCmbFonts().getSelectedItem(), Font.PLAIN, 14)));
+			aux.add(getJScrollPane(), BorderLayout.CENTER);
+			myTab.add(aux, BorderLayout.CENTER);
+
+			GridBagLayoutPanel aux1 = new GridBagLayoutPanel();
+			aux1.addComponent(Messages.getText("size")+":", getCmbFontSize());
+			aux1.addComponent(Messages.getText("angle")+":", getNumberAngle());
+
+			aux1.addComponent(Messages.getText("color")+":", getColorChooser());
+
+			GridBagLayoutPanel aux2 = new GridBagLayoutPanel();
+			aux2.addComponent("X:", getTxtXOffset());
+			aux2.addComponent("Y:", getTxtYOffset());
+			aux2.setBorder(BorderFactory.createTitledBorder(
+					Messages.getText("offset")));
+			aux1.addComponent(aux2);
+
+			myTab.add(aux1, BorderLayout.EAST);
+			myTab.add(getChkAdjustGlyph(), BorderLayout.SOUTH);
+
+			tabs.add(myTab);
+		}
+
+		{
+			// Mask tab
+//			mask = new Mask(this);
+//
+//			tabs.add(mask);
+		}
+
+		jListSymbols.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(ListSelectionEvent e) {
+				fireSymbolChangedEvent();
+			}
+		});
+	}
+
+	/**
+	 * JCheckBox that allows the user to apply visual correction to glyph for
+	 * precise size and position.
+	 * @return JCheckBox
+	 */
+	private JCheckBox getChkAdjustGlyph() {
+		if (chkAdjustGlyph == null) {
+			chkAdjustGlyph = new JCheckBox(
+					Messages.getText("apply_visual_correction_to_glyph_for_precise_size_and_position"));
+			chkAdjustGlyph.addActionListener(this);
+		}
+
+		return chkAdjustGlyph;
+	}
+
+	/**
+	 * JIncrementalNumberField that controls the YOffset for the character that the
+	 * user wants to use as a marker.
+	 * @return JIncrementalNumberField
+	 */
+	private JNumberSpinner getTxtYOffset() {
+		if (txtYOffset == null) {
+			txtYOffset = new JNumberSpinner(0, 7);
+			txtYOffset.addActionListener(this);
+		}
+
+		return txtYOffset;
+	}
+	/**
+	 * JIncrementalNumberField that controls the XOffset for the character that the
+	 * user wants to use as a marker.
+	 * @return JIncrementalNumberField
+	 */
+	private JNumberSpinner getTxtXOffset() {
+		if (txtXOffset == null) {
+			txtXOffset = new JNumberSpinner(0, 7);
+			txtXOffset.addActionListener(this);
+		}
+
+		return txtXOffset;
+	}
+	/**
+	 * ColorChooserPanel used to select the color for the character that the
+	 * user wants to use as a marker.
+	 * @return ColorChooserPanel
+	 */
+	private ColorChooserPanel getColorChooser() {
+		if (jcc == null) {
+			jcc = new ColorChooserPanel();
+			jcc.setAlpha(255);
+			jcc.addActionListener(this);
+		}
+
+		return jcc;
+	}
+	/**
+	 * JComboBoxFontSizes that allows the user to change the size of the character
+	 * selected as a marker
+	 * @return JComboBoxFontSizes
+	 */
+	private JComboBoxFontSizes getCmbFontSize() {
+		if (cmbFontSize == null) {
+			cmbFontSize = new JComboBoxFontSizes();
+			cmbFontSize.addActionListener(this);
+		}
+
+		return cmbFontSize;
+	}
+	/**
+	 * JIncrementalNumberField that controls the angle (if the user wants to show the
+	 * character with some rotation) for the character that the user wants to use as
+	 * a marker.
+	 * @return JIncrementalNumberField
+	 */
+
+	private JNumberSpinner getNumberAngle() {
+		if (numberAngle == null) {
+			numberAngle = new JNumberSpinner(0);
+			numberAngle.addActionListener(this);
+
+		}
+
+		return numberAngle;
+	}
+
+	/**
+	 * JComboBoxFonts its a combobox of fonts where the user can select the font
+	 * for the character marker.Depends on this font, the character will change its
+	 * appearance.
+	 * @returnJComboBoxFonts
+	 */
+	private JComboBoxFonts getCmbFonts() {
+		if (cmbFonts == null) {
+			cmbFonts = new JComboBoxFonts();
+			cmbFonts.addActionListener(this);
+		}
+		return cmbFonts;
+	}
+	/**
+	 * JScrollPane to select the exact character marker.The content of this pane
+	 * will change depending on the font that the user had selected.
+	 * @return JScrollPane
+	 */
+
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getJListSymbols());
+			jScrollPane.setPreferredSize(new Dimension(300, 180));
+		}
+		return jScrollPane;
+	}
+	/**
+	 * Used with the JScrollPane to create the pane that allows the user to select the
+	 * character marker.
+	 * @see getJScrollPane()
+	 * @return JList
+	 */
+	private JList getJListSymbols() {
+		if (jListSymbols == null) {
+			jListSymbols = new JList();
+			jListSymbols.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			jListSymbols.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+			jListSymbols.setVisibleRowCount(-1);
+			jListSymbols.addListSelectionListener(new ListSelectionListener() {
+
+				public void valueChanged(ListSelectionEvent e) {
+					CharacterItem theChar = (CharacterItem) jListSymbols.getSelectedValue();
+					if (theChar == null) return;
+					font = theChar.font;
+					unicode = theChar.glyph;
+					fireSymbolChangedEvent();
+				}
+			});
+			ListCellRenderer renderer = new ListCellRenderer() {
+				private Color mySelectedBGColor = new Color(255,145,100,255);
+				public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+					CharacterItem theChar = (CharacterItem) value;
+					CharacterMarkerSymbol sym = new CharacterMarkerSymbol(
+							theChar.font, theChar.glyph, Color.BLACK);
+					JPanel pnl = new JPanel();
+					BoxLayout layout = new BoxLayout(pnl, BoxLayout.Y_AXIS);
+					pnl.setLayout(layout);
+					Color bgColor = (isSelected) ? mySelectedBGColor
+							: getJListSymbols().getBackground();
+
+					pnl.setBackground(bgColor);
+					SymbolPreviewer sp = new SymbolPreviewer(true);
+					sp.setAlignmentX(Component.CENTER_ALIGNMENT);
+					int prevSize = 30;
+					sp.setPreferredSize(new Dimension(prevSize, prevSize));
+					sp.setSymbol(sym);
+					sp.setBackground(bgColor);
+					sym.setSize(prevSize*.8);
+//					sym.setVisuallyCorrected(getChkAdjustGlyph().isSelected());
+					pnl.add(sp);
+					JLabel lbl = new JLabel(sym.getDescription());
+					lbl.setBackground(bgColor);
+					lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
+					pnl.add(lbl);
+
+					return pnl;
+				}
+			};
+			jListSymbols.setCellRenderer(renderer);
+		}
+		return jListSymbols;
+	}
+
+
+	public String getName() {
+		return Messages.getText("character_marker_symbol");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs .toArray(new JPanel[0]);
+	}
+
+	public void refreshControls(ISymbol layer) {
+		CharacterMarkerSymbol sym;
+		try {
+			sym = (CharacterMarkerSymbol) layer;
+			font = sym.getFont();
+			unicode = sym.getUnicode();
+			getTxtXOffset().setDouble( sym.getOffset().getX() );
+			getTxtYOffset().setDouble( -sym.getOffset().getY() );
+
+			getColorChooser().setColor(sym.getColor());
+
+			getCmbFonts().setSelectedItem(sym.getFont().getName());
+			getCmbFontSize().setSelectedItem(new Integer(sym.getFont().getSize()));
+			getJListSymbols().setSelectedIndex(sym.getUnicode());
+			getNumberAngle().setDouble(
+					// convert to degrees
+					sym.getRotation() * 180.0 / Math.PI);
+
+			getChkAdjustGlyph().setSelected(sym.isVisuallyCorrected());
+			// TODO mask
+		} catch (IndexOutOfBoundsException ioEx) {
+			NotificationManager.addWarning("Symbol layer index out of bounds", ioEx);
+		} catch (ClassCastException ccEx) {
+			NotificationManager.addWarning(ccEx.getMessage(), ccEx);
+		}
+
+	}
+
+	public Class<? extends ISymbol> getSymbolClass() {
+		return CharacterMarkerSymbol.class;
+	}
+
+	public ISymbol getLayer() {
+		CharacterMarkerSymbol layer = new CharacterMarkerSymbol();
+		if (font == null) {
+			font = new Font((String) getCmbFonts().getSelectedItem(),
+					                 Font.PLAIN,
+					           (int) getCmbFontSize().getSelectedValue());
+		}
+		layer.setFont(font);
+		layer.setUnicode(unicode);
+		layer.setColor(getColorChooser().getColor());
+		layer.setSize(getCmbFontSize().getSelectedValue());
+		layer.setOffset(new Point2D.Double(
+				getTxtXOffset().getDouble(),
+				-getTxtYOffset().getDouble()));
+		layer.setRotation(
+				// convert to radians
+				getNumberAngle().getDouble() * Math.PI / 180.0); 
+
+		layer.setUnit(owner.getUnit());
+		layer.setReferenceSystem(owner.getUnitsReferenceSystem());
+//		layer.setMask(mask.getMask());
+		layer.setVisuallyCorrected(getChkAdjustGlyph().isSelected());
+		return layer;
+	}
+
+	/**
+	 * Creates a list with the specified items.
+	 *
+	 */
+	private class CharacterListModel implements ListModel {
+
+		private Font font;
+		private ArrayList<ListDataListener> listeners;
+
+		/**
+		 * constructor method
+		 * @param font
+		 */
+		public CharacterListModel(Font font) {
+			this.font = font;
+		}
+
+		public int getSize() {
+			return font.getNumGlyphs();
+		}
+
+		public Object getElementAt(int index) {
+			return new CharacterItem(font, index);
+		}
+
+		public void addListDataListener(ListDataListener l) {
+			if (listeners == null)
+				listeners = new ArrayList<ListDataListener>();
+			listeners.add(l);
+		}
+
+		public void removeListDataListener(ListDataListener l) {
+			if (listeners!=null)
+				listeners.remove(l);
+		}
+	}
+
+	private class CharacterItem {
+		int glyph;
+		Font font;
+		public CharacterItem(Font font, int glyph) {
+			this.font = font;
+			this.glyph = glyph;
+		}
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		JComponent c = (JComponent) e.getSource();
+		if (c.equals(getCmbFonts())) {
+			String fontName = (String) getCmbFonts().getSelectedItem();
+			getJListSymbols().setModel(
+					new CharacterListModel(
+							new Font(fontName, Font.PLAIN, 10)));
+			return;
+		}
+
+		fireSymbolChangedEvent();
+	}
+
+	public EditorTool[] getEditorTools() {
+		return null;
+	}
+	
+
+	public boolean canManageSymbol(ISymbol symbol) {
+		return symbol instanceof CharacterMarkerSymbol;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/LayerPreview.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/LayerPreview.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/LayerPreview.java	(revision 42196)
@@ -0,0 +1,270 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.labeling.gui.styling;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.util.Stack;
+import java.util.logging.Level;
+import org.gvsig.fmap.dal.exception.DataException;
+
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
+import org.gvsig.gui.beans.imagenavigator.IClientImageNavigator;
+import org.gvsig.gui.beans.imagenavigator.ImageNavigator;
+import org.gvsig.gui.beans.imagenavigator.ImageUnavailableException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LayerPreview extends ImageNavigator implements IClientImageNavigator {
+	private static final Logger logger = LoggerFactory.getLogger(LayerPreview.class);
+                
+	private static final long serialVersionUID = -7554322442540714114L;
+	private FLayer layer = null;
+	private ViewPort vp;
+	private Stack<Cancellable> cancels = new Stack<Cancellable>();
+	private static GeometryManager geoman = GeometryLocator.getGeometryManager();
+
+	public LayerPreview() {
+		super(null);
+		setClientImageNavigator(this);
+	}
+
+	public void setLayer(FLayer layer) throws ReadException {
+		
+		this.layer = layer;
+		if (layer != null) {
+			vp = new ViewPort(layer.getProjection());
+			Envelope env = layer.getFullEnvelope();
+			setViewDimensions(
+					env.getMinimum(0),
+					env.getMaximum(1),
+					env.getMaximum(0),
+					env.getMinimum(1));
+		}
+		updateBuffer();
+		setEnabled(true);
+	}
+
+	/*
+	public static void main(String[] args) {
+		JFrame jFrame = new JFrame("test");
+		String fwAndamiDriverPath = "../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers";
+		IProjection PROJ = CRSFactory.getCRS("EPSG:23030");
+		try {
+			LayerFactory.setDriversPath(new File(fwAndamiDriverPath).getAbsolutePath());
+			LayerPreview prev = new LayerPreview();
+
+			prev.setLayer(LayerFactory.
+					createLayer(
+							"line",
+							"gvSIG shp driver",
+							new File("/home/jaume/Documents/Cartografia/cv_300_polygons.shp"),
+							PROJ));
+
+			jFrame.setSize(new Dimension(598, 167));
+
+			jFrame.setContentPane(prev);
+
+			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+			jFrame.setVisible(true);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	*/
+
+	public void drawImage(
+			Graphics2D g,
+			double left, double top, double right, double bottom,
+			double zoom, int width, int height)
+	throws ImageUnavailableException {
+		
+		Cancellable c = new PreviewCancellable();
+		while (!cancels.isEmpty()) cancels.pop().setCanceled(true);
+
+		cancels.push(c);
+		if (this.layer == null || width <= 0 || height <= 0 || vp == null)
+			return;
+		
+		Envelope env = null;
+		try {
+			env = geoman.createEnvelope(
+					left,
+					bottom,
+					right,
+					top,
+					SUBTYPES.GEOM2D);
+		} catch (CreateEnvelopeException e1) {
+			
+			throw new ImageUnavailableException(
+					"Error while initializing layer preview", e1);
+		}
+		vp.setEnvelope(env);
+		vp.setImageSize(new Dimension(width, height));
+		BufferedImage bi = new BufferedImage(
+				width, height, BufferedImage.TYPE_4BYTE_ABGR);
+
+		double scale = this.layer.getMapContext().getScaleView();
+                LayerWithSelection layer = new LayerWithSelection(this.layer);
+		try {
+			layer.getLayer().draw(bi, g, vp, c, scale);
+			if (layer.getLayer() instanceof ILabelable && ((ILabelable) layer.getLayer()).isLabeled()) {
+				((ILabelable) layer.getLayer()).drawLabels(bi, g, vp, c, scale,
+						vp.getDPI());
+			}
+		} catch (ReadException e) {
+			
+			throw new ImageUnavailableException(
+					"Error while drawing layer '" + this.layer.getName() + "'", e);
+		} finally {
+                    layer.restore();
+                }
+	}
+	
+	private class PreviewCancellable implements Cancellable {
+
+		private boolean canc = false;
+		
+		public PreviewCancellable() {
+			
+		}
+		
+		public boolean isCanceled() {
+			return canc;
+		}
+
+		public void setCanceled(boolean c) {
+			canc = c;
+		}
+		
+	}
+	
+
+        private static class LayerWithSelection {
+            
+            FeatureSelection randomSelection = null;
+            FeatureSelection originalSelection = null;
+            
+            FLayer layer = null;
+            FLyrVect layerVect = null;
+            
+            public LayerWithSelection(FLayer layer) {
+                this.layer = layer;
+                if( this.layer instanceof FLyrVect ) {
+                    this.layerVect = (FLyrVect) this.layer;
+                }
+            }
+        
+            public FLayer getLayer() {
+                this.save();
+                return this.layer;
+            }
+
+            public void save() {
+                if(this.originalSelection!=null ) {
+                    return;
+                }
+                FeatureStore store = this.layerVect.getFeatureStore();
+                try {
+                    this.originalSelection = store.getFeatureSelection();
+                    this.randomSelection = this.getRandomSelection();
+                    store.setSelection(this.randomSelection);
+                } catch (DataException ex) {
+                    logger.warn("Can't set random selection.",ex);
+                }
+            }
+            
+            public void restore() {
+                if( this.layerVect == null ) {
+                    return;
+                }
+                if( this.originalSelection!=null ) {
+                    try {
+                        this.layerVect.getFeatureStore().setSelection(this.originalSelection);
+                    } catch (DataException ex) {
+                        logger.warn("Can't restore the original selection of layer.",ex);
+                    }
+                }
+                if( this.randomSelection!=null ) {
+                    this.randomSelection.dispose();
+                }
+            }
+            
+            private FeatureSelection getRandomSelection() {
+
+                if( this.layer == null ) {
+                    return null;
+                }
+                FLyrVect layer = null;
+                if( !( this.layer instanceof FLyrVect) ) {
+                    return null; 
+                }
+                layer = (FLyrVect) this.layer;
+                DisposableIterator diter = null;
+                FeatureSelection fsel = null;
+                FeatureSet featureSet = null;
+                FeatureStore store = layer.getFeatureStore();
+                try {
+                    try {
+                        featureSet = store.getFeatureSet();
+                        fsel = store.createFeatureSelection();
+                        diter = featureSet.fastIterator();
+                    } catch (DataException de) {
+                        logger.error("While getting store selection", de);
+                        return null;
+                    }
+
+                    long count = 0;
+                    Feature feat = null;
+                    while (diter.hasNext() && count < 10) {
+                        feat = (Feature) diter.next();
+                        if (count % 4 == 0) {
+                            fsel.select(feat);
+                        }
+                        count++;
+                    }
+                } finally {
+                    if (diter != null) {
+                        diter.dispose();
+                    }
+                    if (featureSet != null) {
+                        featureSet.dispose();
+                    }                
+                }
+                return fsel;
+            }
+        }
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/JUrlFileChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/JUrlFileChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/JUrlFileChooser.java	(revision 42196)
@@ -0,0 +1,119 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.i18n.Messages;
+
+public class JUrlFileChooser extends JFileChooser {
+
+	private static final long serialVersionUID = 1844355534608274984L;
+
+	public JUrlFileChooser(String fileChooserID, String defaultDirectory) {
+		super(fileChooserID, defaultDirectory);
+		this.setFileFilter(ff);
+		this.setFileSelectionMode(JFileChooser.FILES_ONLY);
+		this.setMultiSelectionEnabled(false);
+	}
+
+	FileFilter ff = new FileFilter() {
+		public boolean accept(File f) {
+			if (f.isDirectory()) return true;
+			String fName = f.getAbsolutePath();
+			if (fName!=null) {
+				fName = fName.toLowerCase();
+				return fName.endsWith(".png")
+				|| fName.endsWith(".gif")
+				|| fName.endsWith(".jpg")
+				|| fName.endsWith(".jpeg")
+				|| fName.endsWith(".bmp")
+				|| fName.endsWith(".svg");
+			}
+			return false;
+		}
+
+		public String getDescription() {
+			return Messages.getText("bitmap_and_svg_image_files")+ "," +
+					Messages.getText("URL");
+		}
+	};
+
+	public URL getSelectedURL() {
+		String path;
+		File f = getSelectedFile();  
+
+		try {
+			if(f.canRead()) {
+				return f.toURI().toURL();
+			}
+			else {
+				path = f.toString();
+
+				if (!path.startsWith("http"))
+					if(path.contains("http") && 
+							(path.endsWith(".png")
+									|| path.endsWith(".gif")
+									|| path.endsWith(".jpg")
+									|| path.endsWith(".jpeg")
+									|| path.endsWith(".bmp")
+									|| path.endsWith(".svg"))) {
+
+						path = path.substring(path.indexOf("http"), path.length());
+						path = path.replace('\\', '/');
+						path = path.replaceFirst("/", "//");
+
+						return new URL(path);
+					}
+			}
+		} catch (MalformedURLException e) {
+			return null;
+		}
+		return null;
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleRemoveLastTextField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleRemoveLastTextField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleRemoveLastTextField.java	(revision 42196)
@@ -0,0 +1,114 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import java.awt.Cursor;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+
+import javax.swing.AbstractButton;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.gui.styling.EditorTool;
+import org.gvsig.app.gui.styling.StyleEditor;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+
+
+public class LabelStyleRemoveLastTextField extends EditorTool {
+
+	public LabelStyleRemoveLastTextField(JComponent targetEditor) {
+		super(targetEditor);
+	}
+
+	private ILabelStyle style;
+	private JButton btnTextField;
+
+	public AbstractButton getButton() {
+		return getBtnRemoveTextField();
+	}
+
+	private JButton getBtnRemoveTextField() {
+		if (btnTextField == null) {
+			btnTextField = new JButton(
+					IconThemeHelper.getImageIcon("edit-remove-text"));
+			btnTextField.setSize(EditorTool.SMALL_BTN_SIZE);
+			btnTextField.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					int fCount = style.getFieldCount();
+					if (fCount>0)
+						style.deleteTextFieldArea(style.getFieldCount()-1);
+					((StyleEditor) owner).restorePreviousTool();
+					owner.repaint();
+				}
+			});
+		}
+
+		return btnTextField;
+	}
+
+	@Override
+	public Cursor getCursor() {
+		return Cursor.getDefaultCursor();
+	}
+
+	@Override
+	public String getID() {
+		return "1";
+	}
+
+	@Override
+	public boolean isSuitableFor(Object obj) {
+		return obj instanceof ILabelStyle;
+	}
+
+	@Override
+	public void setModel(Object objectToBeEdited) {
+		style = (ILabelStyle) objectToBeEdited;
+	}
+
+	public void mousePressed(MouseEvent e) {}
+	public void mouseReleased(MouseEvent e) {}
+	public void mouseDragged(MouseEvent e) {}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStylePanTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStylePanTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStylePanTool.java	(revision 42196)
@@ -0,0 +1,265 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import javax.swing.AbstractButton;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JToggleButton;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.gui.styling.EditorTool;
+import org.gvsig.app.gui.styling.StyleEditor;
+import org.gvsig.app.gui.styling.StylePreviewer;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.i18n.Messages;
+
+/**
+ *
+ * SimpleLabelStylePanTool.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Jan 7, 2008
+ *
+ */
+public class LabelStylePanTool extends EditorTool {
+	private int NO_SELECTION_ON_STYLE = -1;
+	private int TEXT_FIELD_SELECTED = 0;
+	private int MARKER_POINT_SELECTED = 1;
+
+	private JToggleButton btnPan;
+	private Cursor cursor;
+	private Point pIni, pEnd;
+	private ILabelStyle style;
+	private int toolSelected = NO_SELECTION_ON_STYLE;
+	private int textFieldSelected = NO_SELECTION_ON_STYLE;
+
+	private Dimension bounds;
+	private int ownerHgap,ownerVgap;
+
+	public LabelStylePanTool(JComponent owner) {
+		super(owner);
+	}
+
+	private void getBounds() {
+
+		bounds = ((StyleEditor) owner).getStylePreviewer().getSize();
+		ownerHgap =  ((StyleEditor) owner).getStylePreviewer().getHGap();
+		ownerVgap = ((StyleEditor) owner).getStylePreviewer().getVGap();
+
+	}
+
+	public Cursor getCursor() {
+		if (cursor == null) {
+			
+			ImageIcon cursorImage = IconThemeHelper.getImageIcon("cursor-pan");
+			cursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImage.getImage(),
+					new Point(cursorImage.getIconWidth()/2,
+							cursorImage.getIconHeight()/2), //16, 16), "");
+							"");
+
+		}
+		return cursor;
+	}
+
+	public void mousePressed(MouseEvent e) {
+		getBounds();
+		Point2D marker = style.getMarkerPoint();
+		pIni = new Point((int) (marker.getX()*(bounds.width-ownerHgap)),(int) (marker.getY()*(bounds.height-ownerVgap)));
+		pEnd = e.getPoint();
+
+		Point selectedPoint = new Point((int) (pEnd.getX()-ownerHgap),(int) (pEnd.getY()-ownerVgap));
+		if((Math.abs(pIni.x - selectedPoint.x) < ownerHgap ) && (Math.abs(pIni.y - selectedPoint.y) < ownerVgap )){
+			toolSelected = MARKER_POINT_SELECTED;
+			return;
+		}
+
+		Point2D selPoint = screenPointToLabelPoint(pEnd);
+
+		for (int i = style.getTextBounds().length - 1; i >= 0 ; i--) {
+			Rectangle2D rectangle = style.getTextBounds()[i];
+			if((selPoint.getX() >= rectangle.getMinX()) &&
+					(selPoint.getX() <= rectangle.getMaxX()) &&
+					(selPoint.getY() >= rectangle.getMinY())&&
+					(selPoint.getY() <= rectangle.getMaxY())){
+				toolSelected = TEXT_FIELD_SELECTED;
+				textFieldSelected = i;
+				pIni = pEnd;
+				return;
+			}
+		}
+	}
+
+	public void mouseReleased(MouseEvent e) {
+
+		toolSelected = NO_SELECTION_ON_STYLE;
+		textFieldSelected = NO_SELECTION_ON_STYLE;
+
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		pEnd = e.getPoint();
+		if((pEnd.getX() > bounds.width - ownerHgap) || ( pEnd.getY() > bounds.getHeight() - ownerVgap) ||
+				(pEnd.getX() < ownerHgap) || ( pEnd.getY() < ownerVgap))
+			return;
+
+		Point2D labelEndPoint = screenPointToLabelPoint(pEnd);
+
+		if(toolSelected == TEXT_FIELD_SELECTED){
+			if(textFieldSelected != NO_SELECTION_ON_STYLE){
+
+				Rectangle2D rectangle = style.getTextBounds()[textFieldSelected];
+
+				Point2D labelIniPoint = screenPointToLabelPoint(pIni);
+				Point maxPoint = new Point((int)bounds.getWidth(), (int)bounds.getHeight());
+				Point2D labelMaxPoint = screenPointToLabelPoint(maxPoint);
+
+				Point2D labelZero = screenPointToLabelPoint(new Point(0,0));
+				double x = rectangle.getX() + labelEndPoint.getX()-labelIniPoint.getX();
+				if (x<labelZero.getX()){ x=labelZero.getX(); }
+				if ((x+rectangle.getWidth())>=labelMaxPoint.getX()) { x =  labelMaxPoint.getX()-rectangle.getWidth();}
+
+				double y = rectangle.getY() + labelEndPoint.getY()-labelIniPoint.getY();
+				if (y<labelZero.getY()){ y=labelZero.getY(); }
+				if ((y+rectangle.getHeight())>=labelMaxPoint.getY()) { y =  labelMaxPoint.getY()-rectangle.getHeight();}
+
+				rectangle.setRect(x,
+						y,
+						rectangle.getWidth(),
+						rectangle.getHeight());
+				style.setTextFieldArea(textFieldSelected,rectangle);
+				pIni = pEnd;
+			}
+		}
+		else if (toolSelected == MARKER_POINT_SELECTED){
+			double xOffset = (pEnd.getX())/( bounds.getWidth()- ownerHgap );
+			double yOffset = (pEnd.getY())/( bounds.getHeight()- ownerVgap );
+
+			if(xOffset > 1) xOffset = 1;
+			if(xOffset < 0) xOffset = 0;
+			if(yOffset > 1) yOffset = 1;
+			if(yOffset < 0) yOffset = 0;
+
+			Point2D marker = style.getMarkerPoint();
+			marker.setLocation(xOffset, yOffset);
+		}
+		owner.repaint();
+	}
+
+	private Point2D screenPointToLabelPoint(Point pIni) {
+		//FIXME: Esto es un parche, habr�a que cambiar la API de los estilos y simbolos
+		//pero mientras tanto
+		int minx = pIni.x;
+		int miny = pIni.y;
+
+		StylePreviewer sp = ((StyleEditor) owner).getStylePreviewer();
+		Dimension bounds = sp.getSize();
+
+		IStyle style = sp.getStyle();
+		Dimension backgroundBounds = null;
+		if (style instanceof ILabelStyle){
+			backgroundBounds = ((ILabelStyle)style).getSize();
+		}
+		Point2D p;
+		if (backgroundBounds == null){
+			p = new Point2D.Double(
+					pIni.x/(bounds.getWidth()-sp.getHGap()/2),
+					pIni.y/(bounds.getHeight()-sp.getVGap()/2));
+		} else {
+			double xOffset = 0;
+			double yOffset = 0;
+			double scale = 1;
+			if (backgroundBounds.getWidth()>backgroundBounds.getHeight()) {
+				scale = (bounds.getWidth()-sp.getHGap())/backgroundBounds.getWidth();
+				yOffset = 0.5*(bounds.getHeight()-sp.getVGap() - backgroundBounds.getHeight()*scale);
+			} else {
+				scale = (bounds.getHeight()-sp.getVGap())/backgroundBounds.getHeight();
+				xOffset = 0.5*(bounds.getWidth()-sp.getHGap() - backgroundBounds.getWidth()*scale);
+			}
+			p = new Point2D.Double(
+					((minx-(sp.getHGap()/2)-xOffset)/scale)/backgroundBounds.getWidth(),
+					((miny-(sp.getVGap()/2)-yOffset)/scale)/backgroundBounds.getHeight());
+		}
+		return p;
+	}
+
+	@Override
+	public AbstractButton getButton() {
+		return getBtnPan();
+	}
+
+	private JToggleButton getBtnPan() {
+		if (btnPan == null) {
+			btnPan = new JToggleButton(
+					IconThemeHelper.getImageIcon("edit-shift-component"));
+			btnPan.setToolTipText(
+					Messages.getText("_Set_label_offset"));
+			btnPan.setPreferredSize(EditorTool.SMALL_BTN_SIZE);
+			btnPan.setSize(EditorTool.SMALL_BTN_SIZE);
+		}
+
+		return btnPan;
+	}
+
+	@Override
+	public String getID() {
+		return "1";
+	}
+
+	@Override
+	public boolean isSuitableFor(Object obj) {
+		return obj instanceof ILabelStyle;
+	}
+
+	@Override
+	public void setModel(Object objectToBeEdited) {
+		style = (ILabelStyle) objectToBeEdited;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelNormalPrecedenceTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelNormalPrecedenceTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelNormalPrecedenceTool.java	(revision 42196)
@@ -0,0 +1,74 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import javax.swing.JComponent;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.placements.PointLabelPositioner;
+
+/**
+ * Implements an editor tool which can be used to select the position for the
+ * label when the user is performing a layer of points. There will be 4 different
+ * precedence levels for the 8 different places where the text for the specified point
+ * will be placed (see PointLabelPositioneer.java). This class implements the normal one,
+ * but the user can select a high, a low or a forbidden one.
+ *
+ *
+ * @author Pepe Vidal Salvador - jose.vidal.salvador@iver.es
+ *
+ */
+public class PointLabelNormalPrecedenceTool extends
+		PointLabelHighPrecedenceTool {
+
+	public PointLabelNormalPrecedenceTool(JComponent targetEditor) {
+		super(targetEditor);
+		precedenceValue = PointLabelPositioner.PREFERENCE_NORMAL;
+		buttonIcon = "set-normal-precedence";
+		this.getButton().setToolTipText(
+				Messages.getText("set_normal_precedence"));
+	}
+
+	@Override
+	public String getID() {
+		return "2";
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleNewTextFieldTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleNewTextFieldTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleNewTextFieldTool.java	(revision 42196)
@@ -0,0 +1,193 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Rectangle2D;
+
+import javax.swing.AbstractButton;
+import javax.swing.JComponent;
+import javax.swing.JToggleButton;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.gui.styling.EditorTool;
+import org.gvsig.app.gui.styling.StyleEditor;
+import org.gvsig.app.gui.styling.StylePreviewer;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IStyle;
+import org.gvsig.i18n.Messages;
+
+public class LabelStyleNewTextFieldTool extends EditorTool {
+	
+	private Point pIni, pEnd;
+	private final Cursor cursor = Cursor.getDefaultCursor();
+	private ILabelStyle style;
+	private JToggleButton btnNewTextArea;
+
+	public LabelStyleNewTextFieldTool(JComponent targetEditor) {
+		super(targetEditor);
+		// TODO Auto-generated constructor stub
+	}
+	public Cursor getCursor() {
+		return cursor;
+	}
+
+	public void mousePressed(MouseEvent e) {
+		pIni = e.getPoint();
+		pEnd = e.getPoint();
+		Rectangle2D rect = screenPointsToLabelRect(pIni, pEnd);
+		style.addTextFieldArea(rect);
+	}
+
+	public void mouseReleased(MouseEvent e) {
+
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		Dimension bounds = ((StyleEditor) owner).getStylePreviewer().getSize();
+		pEnd = e.getPoint();
+
+		if (pEnd.getX() < 0)
+			pEnd.x = 0;
+		if (pEnd.getX() > bounds.getWidth())
+			pEnd.x = (int) bounds.getWidth();
+
+		if (pEnd.getY() < 0)
+			pEnd.y = 0;
+		if (pEnd.getY() > bounds.getHeight())
+			pEnd.y = (int) bounds.getHeight();
+
+		Rectangle2D rect = screenPointsToLabelRect(pIni, pEnd);
+		style.setTextFieldArea(style.getFieldCount()-1, rect);
+		owner.repaint();
+	}
+
+	private Rectangle2D screenPointsToLabelRect(Point pIni, Point pEnd) {
+		int minx = pIni.x;
+		int miny = pIni.y;
+
+		int width = pEnd.x-pIni.x;
+		int height = pEnd.y - pIni.y;
+		if (width < 0) {
+			minx += width;
+			width = -width;
+		}
+		if (height <0) {
+			miny += height;
+			height = -height;
+		}
+
+		StylePreviewer sp = ((StyleEditor) owner).getStylePreviewer();
+		Dimension bounds = sp.getSize();
+
+		IStyle style = sp.getStyle();
+		Dimension backgroundBounds = null;
+		if (style instanceof ILabelStyle){
+			backgroundBounds = ((ILabelStyle)style).getSize();
+		}
+		//FIXME: Esto es un parche, habr�a que cambiar la API de los estilos y simbolos
+		//pero mientras tanto
+		Rectangle2D rect;
+		if (backgroundBounds == null){
+			rect = new Rectangle2D.Double(
+					minx/(bounds.getWidth()-sp.getHGap()/2), //OJO, aqu� pon�a cuatro 10's a pi�on fijo
+					miny/(bounds.getHeight()-sp.getVGap()/2),
+					width/(bounds.getWidth()-sp.getHGap()),
+					height/(bounds.getHeight()-sp.getVGap())
+			);
+		} else {
+
+			double xOffset = 0;
+			double yOffset = 0;
+			double scale = 1;
+			if (backgroundBounds.getWidth()>backgroundBounds.getHeight()) {
+				scale = (bounds.getWidth()-sp.getHGap())/backgroundBounds.getWidth();
+				yOffset = 0.5*(bounds.getHeight()-sp.getVGap() - backgroundBounds.getHeight()*scale);
+			} else {
+				scale = (bounds.getHeight()-sp.getVGap())/backgroundBounds.getHeight();
+				xOffset = 0.5*(bounds.getWidth()-sp.getHGap() - backgroundBounds.getWidth()*scale);
+			}
+
+			rect = new Rectangle2D.Double(
+					((minx-(sp.getHGap()/2)-xOffset)/scale)/backgroundBounds.getWidth(),
+					((miny-(sp.getVGap()/2)-yOffset)/scale)/backgroundBounds.getHeight(),
+					(width/scale)/backgroundBounds.getWidth(),
+					(height/scale)/backgroundBounds.getHeight()
+			);
+		}
+
+		return rect;
+	}
+
+	public AbstractButton getButton() {
+		return getBtnNewTextArea();
+	}
+
+	@Override
+	public String getID() {
+		return "2";
+	}
+
+	@Override
+	public boolean isSuitableFor(Object obj) {
+		return obj instanceof ILabelStyle;
+	}
+
+	@Override
+	public void setModel(Object objectToBeEdited) {
+		style = (ILabelStyle) objectToBeEdited;
+	}
+
+	private JToggleButton getBtnNewTextArea() {
+		if (btnNewTextArea == null) {
+			
+			btnNewTextArea = new JToggleButton(
+					IconThemeHelper.getImageIcon("edit-add-text"));
+			btnNewTextArea.setToolTipText(
+					Messages.getText("add_text_area"));
+			btnNewTextArea.setSize(EditorTool.SMALL_BTN_SIZE);
+		}
+		return btnNewTextArea;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleOpenBackgroundFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleOpenBackgroundFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/LabelStyleOpenBackgroundFile.java	(revision 42196)
@@ -0,0 +1,170 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import java.awt.Cursor;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.AbstractButton;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.gui.styling.EditorTool;
+import org.gvsig.app.gui.styling.StyleEditor;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.IBackgroundFileStyle;
+import org.gvsig.fmap.mapcontext.rendering.symbols.styles.ILabelStyle;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+/**
+ *
+ * LabelStyleOpenBackgroundFile.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Jan 15, 2008
+ *
+ */
+public class LabelStyleOpenBackgroundFile extends EditorTool {
+
+	private static Logger logger =
+			LoggerFactory.getLogger(LabelStyleOpenBackgroundFile.class);
+	public static final String LABEL_STYLE_BACKGROUND_FILECHOOSER = "LABEL_STYLE_BACKGROUND_FILECHOOSER";
+	public static String DEFAULT_LABEL_BACKGROUND_FOLDER;
+
+	private JButton btnOpenFile;
+	private ILabelStyle style;
+
+	public LabelStyleOpenBackgroundFile(JComponent targetEditor) {
+		super(targetEditor);
+	}
+
+
+	@Override
+	public AbstractButton getButton() {
+		return getBtnOpenFile();
+	}
+
+	private JButton getBtnOpenFile() {
+		if (btnOpenFile== null) {
+			
+			btnOpenFile = new JButton(
+					IconThemeHelper.getImageIcon("edit-add-background-image"));
+			btnOpenFile.setToolTipText(Messages.getText(
+					"_Set_new_background_image"));
+			btnOpenFile.setSize(EditorTool.SMALL_BTN_SIZE);
+			btnOpenFile.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					JFileChooser jfChooser = new JFileChooser(
+							LABEL_STYLE_BACKGROUND_FILECHOOSER,
+							DEFAULT_LABEL_BACKGROUND_FOLDER);
+					FileFilter ff = new FileFilter() {
+
+						public boolean accept(File pathname) {
+							if (pathname.isDirectory()) return true;
+							String fileName = pathname.getAbsolutePath().toLowerCase();
+							return fileName.endsWith("jpg") ||
+									fileName.endsWith("png") ||
+									fileName.endsWith("gif") ||
+									fileName.endsWith("svg");
+						}
+
+						public String getDescription() {
+							return Messages.getText(
+									"all_supported_background_image_formats")+ " (*.svg, *.jpg, *.png, *.gif)";
+						}
+					};
+
+					jfChooser.setFileFilter(ff);
+					if (jfChooser.showOpenDialog(owner) == JFileChooser.APPROVE_OPTION) {
+						File f = jfChooser.getSelectedFile();
+
+						
+						try {
+							IBackgroundFileStyle bgStyle =
+									SymbologyLocator.getSymbologyManager()
+									.createBackgroundFileStyle(f.toURI().toURL());
+							style.setBackgroundFileStyle(bgStyle);
+						} catch (IOException e1) {
+							logger.error("While getting background style", e1);
+						}
+					}
+
+					((StyleEditor) owner).restorePreviousTool();
+					owner.repaint();
+				}
+			});
+		}
+		return btnOpenFile;
+	}
+
+	@Override
+	public Cursor getCursor() {
+		return Cursor.getDefaultCursor();
+	}
+
+	@Override
+	public String getID() {
+		return "4";
+	}
+
+	@Override
+	public boolean isSuitableFor(Object obj) {
+		return obj instanceof ILabelStyle;
+	}
+
+	@Override
+	public void setModel(Object objectToBeEdited) {
+		style = (ILabelStyle) objectToBeEdited;
+	}
+
+	public void mousePressed(MouseEvent e) { }
+	public void mouseReleased(MouseEvent e) { }
+	public void mouseDragged(MouseEvent e) { }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelForbiddenPrecedenceTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelForbiddenPrecedenceTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelForbiddenPrecedenceTool.java	(revision 42196)
@@ -0,0 +1,74 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import javax.swing.JComponent;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.placements.PointLabelPositioner;
+
+/**
+ * Implements an editor tool which can be used to select the position for the
+ * label when the user is performing a layer of points. There will be 4 different
+ * precedence levels for the 8 different places where the text for the specified point
+ * will be placed (see PointLabelPositioneer.java). This class implements the forbidden one,
+ * but the user can select a normal, a low or a high one.
+ *
+ *
+ * @author Pepe Vidal Salvador - jose.vidal.salvador@iver.es
+ *
+ */
+
+public class PointLabelForbiddenPrecedenceTool extends
+		PointLabelHighPrecedenceTool {
+	public PointLabelForbiddenPrecedenceTool(JComponent targetEditor) {
+		super(targetEditor);
+		buttonIcon = "set-forbidden-precedence";
+		precedenceValue = PointLabelPositioner.FORBIDDEN;
+		this.getButton().setToolTipText(
+				Messages.getText("set_forbidden_precedence"));
+	}
+
+	@Override
+	public String getID() {
+		return "4";
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelHighPrecedenceTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelHighPrecedenceTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelHighPrecedenceTool.java	(revision 42196)
@@ -0,0 +1,169 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+
+import javax.swing.AbstractButton;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JToggleButton;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.gui.styling.EditorTool;
+import org.gvsig.app.gui.styling.StyleEditor;
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.placements.PointLabelPositioner;
+
+/**
+ * Implements an editor tool which can be used to select the position for the
+ * label when the user is performing a layer of points. There will be 4 different
+ * precedence levels for the 8 different places where the text for the specified point
+ * will be placed (see PointLabelPositioneer.java). This class implements the highest one,
+ * but the user can select a normal, a low or a forbidden one.
+ *
+ *
+ * @author Pepe Vidal Salvador - jose.vidal.salvador@iver.es
+ *
+ */
+public class PointLabelHighPrecedenceTool extends EditorTool {
+	
+	protected String buttonIcon = "set-high-precedence";
+	protected byte precedenceValue = PointLabelPositioner.PREFERENCE_HIGH;
+	private final Cursor cursor = Cursor.getDefaultCursor();
+
+	private JToggleButton btnNewPrecedence;
+
+	private PointLabelPositioner positioneer;
+
+	/**
+	 * Constructor
+	 *
+	 * @param targetEditor
+	 */
+	public PointLabelHighPrecedenceTool(JComponent targetEditor) {
+		super(targetEditor);
+	}
+	/**
+	 * Implements the button for the tool
+	 *
+	 * @return
+	 */
+	private JToggleButton getBtnNewPrecedence() {
+		if (btnNewPrecedence == null) {
+			btnNewPrecedence = new JToggleButton();
+			btnNewPrecedence.setSize(EditorTool.SMALL_BTN_SIZE);
+			btnNewPrecedence.setIcon(getIconButton());
+			btnNewPrecedence.setToolTipText(
+					Messages.getText("set_high_precedence"));
+
+		}
+		return btnNewPrecedence;
+	}
+	/**
+	 * Obtains the image for the button of the tool
+	 *
+	 * @return
+	 */
+	protected ImageIcon getIconButton() {
+		return IconThemeHelper.getImageIcon(buttonIcon);
+	}
+	@Override
+	public AbstractButton getButton() {
+		return getBtnNewPrecedence();
+	}
+
+	@Override
+	public Cursor getCursor() {
+		return cursor;
+	}
+
+	@Override
+	public String getID() {
+		return "1";
+	}
+
+	@Override
+	public boolean isSuitableFor(Object obj) {
+		return obj instanceof PointLabelPositioner;
+	}
+
+	@Override
+	public void setModel(Object objectToBeEdited) {
+		positioneer = (PointLabelPositioner) objectToBeEdited;
+	}
+	/**
+	 * Obtains the position
+	 * @param p
+	 * @return
+	 */
+	private int getPositionerCellIndex(Point p) {
+		Dimension dim = ((StyleEditor) owner).getStylePreviewer().getSize();
+		int size = Math.min(dim.width, dim.height);
+		if(p.getX() > size || p.getY()>size)
+			return -1;
+		int cellSize = size/3;
+		int row = (int) p.getY() / cellSize;
+		int col = (int) p.getX() / cellSize;
+		int arrayPosition = (3 * row) + col;
+		if (arrayPosition==4) return -1;
+		if (arrayPosition>4) return arrayPosition-1;
+		return arrayPosition;
+
+	}
+	public void mousePressed(MouseEvent e) {
+		int[] pv = positioneer.getPreferenceVector();
+		int cellIndex = getPositionerCellIndex(e.getPoint());
+		if (cellIndex!=-1) {
+			pv[cellIndex] = precedenceValue;
+		}
+		owner.repaint();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+	}
+
+	public void mouseDragged(MouseEvent e) {
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelLowPrecedenceTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelLowPrecedenceTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/gui/styling/editortools/PointLabelLowPrecedenceTool.java	(revision 42196)
@@ -0,0 +1,73 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.labeling.gui.styling.editortools;
+
+import javax.swing.JComponent;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.labeling.placements.PointLabelPositioner;
+
+/**
+ * Implements an editor tool which can be used to select the position for the
+ * label when the user is performing a layer of points. There will be 4 different
+ * precedence levels for the 8 different places where the text for the specified point
+ * will be placed (see PointLabelPositioneer.java). This class implements the lowest one,
+ * but the user can select a normal, a high or a forbidden one.
+ *
+ *
+ * @author Pepe Vidal Salvador - jose.vidal.salvador@iver.es
+ *
+ */
+public class PointLabelLowPrecedenceTool extends PointLabelHighPrecedenceTool {
+	public PointLabelLowPrecedenceTool(JComponent targetEditor) {
+		super(targetEditor);
+		buttonIcon = "set-low-precedence";
+		precedenceValue = PointLabelPositioner.PREFERENCE_LOW;
+		this.getButton().setToolTipText(
+				Messages.getText("set_low_precedence"));
+	}
+
+	@Override
+	public String getID() {
+		return "3";
+	}
+}
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/SmartTextSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/SmartTextSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/SmartTextSymbol.java	(revision 42196)
@@ -0,0 +1,710 @@
+package org.gvsig.labeling.symbol;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.font.LineMetrics;
+import java.awt.geom.AffineTransform;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.labeling.placements.PointPlacementConstraints;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.TextPath;
+
+        
+/**
+ * Class used to create symbols composed using a text defined by
+ * the user.This text can be edited (changing the color, the font of the characters, and
+ * the rotation of the text)and has the property that can follow a path.If this path
+ * does not exist, the text is treated as a simpletextsymbol (when is drawn).
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SmartTextSymbol implements ISimpleTextSymbol, CartographicSupport {
+	
+	private static final Logger logger = LoggerFactory.getLogger(
+			SmartTextSymbol.class);
+	// ===========================
+	public static final String SMART_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME =
+			"SMART_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME";
+	
+	private static final String FIELD_UNIT = "unit";
+	private static final String FIELD_REFERENCE_SYSTEM = "referenceSystem";
+	private static final String FIELD_IS_SHAPE_VISIBLE = "isShapeVisible";
+	private static final String FIELD_DESCRIPTION = "description";
+	private static final String FIELD_TEXT = "text";
+	private static final String FIELD_FONT = "font";
+	private static final String FIELD_TEXT_COLOR = "textColor";
+	private static final String FIELD_ROTATION = "rotation";
+	private static final String FIELD_AUTO_RESIZE = "autoResize";
+	// ====================================
+	private static final String FIELD_HAS_HALO = "hasHalo";
+	private static final String FIELD_HALO_COLOR = "haloColor";
+	private static final String FIELD_HALO_WIDTH = "haloWidth";
+	// ====================================
+	/*
+	public static final int SYMBOL_STYLE_TEXTALIGNMENT_LEFT = 0;
+	public static final int SYMBOL_STYLE_TEXTALIGNMENT_RIGHT = 1;
+	public static final int SYMBOL_STYLE_TEXTALIGNMENT_CENTERED = 2;
+	*/
+
+	// ===========================
+	private static GeometryManager geoman = GeometryLocator.getGeometryManager();
+	
+	private String text;
+	private FontRenderContext frc = new FontRenderContext(
+			new AffineTransform(), false, true);
+	
+	// Background: ITextBackground
+//	Case
+	private double characterSpacing;
+	private double characterWidth;
+//	Direction
+	private IFillSymbol fillSymbol;
+	private double flipAngle;
+//	boolean kerning;
+	private double leading;
+//	Position: textPosition
+	private Color ShadowColor;
+	private double ShadowXOffset;
+	private double ShadowYOffset;
+//	TypeSetting: Boolean
+	private double wordSpacing;
+//	ISimpleTextSymbol : ITextSymbol
+//	BreakCharacter: Long
+//	Clip: Boolean
+	private TextPath textPath;
+	private double xOffset;
+	private double yOffset;
+	private double angle;
+//	Color: IColor
+
+//	HorizontalAlignment:
+//	esriTextHorizontalAlignment
+	private boolean rightToLeft;
+	//	VerticalAlignment
+	private double maskSize;
+//	MaskStyle
+	private  IFillSymbol maskSymbol;
+	private double margin;
+	private int alignment;
+	private boolean kerning = false;
+	private TextPath tp;
+	private IPlacementConstraints constraints;
+	
+	private boolean shapeVisible = true;
+	private int unit = -1;
+	private int referenceSystem = CartographicSupport.WORLD;
+	private double rotation = 0;
+	private String desc = "";
+	private Color textColor = Color.BLACK;
+	private Font font;
+	private boolean autoresize = false;
+	
+	// =======================
+	
+	private boolean hasHalo = false;
+	private Color haloColor = Color.WHITE;
+	private float haloWidth = 3;
+	private BasicStroke haloStroke = new BasicStroke(
+			6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
+	
+	// =======================
+	
+
+	public SmartTextSymbol(ITextSymbol sym, IPlacementConstraints constraints) {
+
+//		if(sym instanceof SimpleTextSymbol){
+//			SimpleTextSymbol mySym = (SimpleTextSymbol)sym;
+
+			this.setAutoresizeEnabled(sym.isAutoresizeEnabled());
+			this.setDescription(sym.getDescription());
+			this.setFont(sym.getFont());
+			this.setFontSize(sym.getFont().getSize());
+			this.setIsShapeVisible(sym.isShapeVisible());
+			this.setText(sym.getText());
+			this.setTextColor(sym.getTextColor());
+			
+			this.setDrawWithHalo(sym.isDrawWithHalo());
+			this.setHaloColor(sym.getHaloColor());
+			this.setHaloWidth(sym.getHaloWidth());
+			
+			this.constraints = constraints;
+
+			setCharacterSpacing(2); //???
+			setWordSpacing(TextPath.DEFAULT_WORD_SPACING);
+			boolean rtl = false; // right to left text
+			if (constraints.isAtTheBeginingOfLine()) {
+				if (rtl) {
+				    
+					setAlignment(ITextSymbol.SYMBOL_STYLE_ALIGNMENT_RIGHT);
+				}
+				else {
+					setAlignment(ITextSymbol.SYMBOL_STYLE_ALIGNMENT_LEFT);
+				}
+			}
+			else if (constraints.isAtTheEndOfLine()) {
+				if (rtl) {
+					setAlignment(ITextSymbol.SYMBOL_STYLE_ALIGNMENT_LEFT);
+				}
+				else {
+					setAlignment(ITextSymbol.SYMBOL_STYLE_ALIGNMENT_RIGHT);
+				}
+			}
+			else { //constraints.isInTheMiddleOfLine() or constraints.isAtBestOfLine()
+				setAlignment(ITextSymbol.SYMBOL_STYLE_ALIGNMENT_CENTERED);
+			}
+			setKerning(false);
+			setRightToLeft(rtl);
+		// }
+	}
+	
+	
+	public void setIsShapeVisible(boolean v) {
+		this.shapeVisible = v;
+	}
+	
+	public boolean isShapeVisible() {
+		return shapeVisible;
+	}
+	
+
+
+	public SmartTextSymbol() {
+		PointPlacementConstraints pc = new PointPlacementConstraints();
+		this.constraints = pc;
+		
+		SymbolPreferences preferences =
+				MapContextLocator.getSymbolManager().getSymbolPreferences();
+		font = preferences.getDefaultSymbolFont();
+		textColor = preferences.getDefaultSymbolColor();
+	}
+
+	/**
+	 * Draws the text according. If this symbol has the text path set, then
+	 * it is used as the text line, otherwise shp <b>must be an FPoint2D</b>
+	 * indicating the starting point of the text and then the text will
+	 * be rendered from there and following the rotation previously set.
+	 */
+	
+	public void draw(Graphics2D g, AffineTransform affineTransform,
+			Geometry geom, Feature f, Cancellable cancel) {
+	
+		if (!isShapeVisible()) return;
+
+		setMargin(0);
+                if ( StringUtils.isEmpty(text) ) {
+                    return;
+                }
+
+		char[] text_chars = text.toCharArray();
+		tp = new TextPath(g, geom, text_chars, getFont(),
+				(float) characterSpacing, (float) characterWidth, kerning,
+				(float) leading, alignment, (float) wordSpacing, (float) margin, rightToLeft);
+		Font font = getFont();
+		g.setFont(font);
+		FontRenderContext frc = g.getFontRenderContext();
+		LineMetrics lineMetrics = font.getLineMetrics(getText(), frc);
+		
+//		GlyphVector glyph =  font.layoutGlyphVector(frc, charText, 0, charText.length, Font.LAYOUT_NO_START_CONTEXT);
+		double cons = 0;
+
+		/* Repartimos el leading (espacio de separaci�n entre lineas)
+		 * arriba y abajo para que exista la misma separaci�n entre la
+		 * caja de la letra y la linea tanto si se dibuja por abajo como
+		 * si se dibuja por arriba. 
+		 */
+		if(this.constraints.isAboveTheLine()) {
+			cons = lineMetrics.getDescent()+lineMetrics.getLeading()/2;
+		}
+		else if (this.constraints.isBelowTheLine()) {
+			cons = -(lineMetrics.getAscent()+lineMetrics.getLeading()/2);
+		}
+		/* Dibujamos la letra de tal manera que el centro de la caja de letra
+		 * coincida con la linea
+		 */
+		else if(this.constraints.isOnTheLine()) {
+//			cons = lineMetrics.getDescent()+(lineMetrics.getLeading()/2)-(lineMetrics.getHeight()/2);
+			cons = lineMetrics.getDescent()+lineMetrics.getLeading()-(lineMetrics.getHeight()/2);
+		}
+		
+		double[] coords = null; // tp.nextPosForGlyph(0);
+
+		for (int i = 0; i < tp.getGlyphCount(); i++) {
+			coords = tp.nextPosForGlyph(i);
+			if (coords[0] == TextPath.NO_POS || coords[1] == TextPath.NO_POS)
+				continue;
+
+			// move the label 'cons" units above/below the line
+			double xOffset = cons * Math.sin(coords[2]);
+			double yOffset = cons * Math.cos(coords[2]);
+
+			g.translate(coords[0]+xOffset, coords[1]-yOffset);
+			g.rotate(coords[2]);
+
+			char[] aux = new char[1];
+			aux[0] = text_chars[i];
+			if (isDrawWithHalo()) {
+				GlyphVector glyph = font.createGlyphVector(frc, aux);
+				Shape outlineChar = glyph.getOutline();
+				g.setStroke(haloStroke);
+				g.setColor(getHaloColor());
+				
+				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+						RenderingHints.VALUE_ANTIALIAS_ON);
+				g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
+						RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+				// =============================
+				g.draw(outlineChar);
+				// =============================
+				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+						RenderingHints.VALUE_ANTIALIAS_OFF);
+			}
+			
+			g.setColor(this.getTextColor());
+			g.drawString(String.valueOf(text_chars[i]), 0, 0);
+			g.rotate(-coords[2]);
+			g.translate(-coords[0]-xOffset, -coords[1]+yOffset);
+		}
+	}
+
+	public void getPixExtentPlus(
+			Geometry shp, float[] distances, ViewPort viewPort, int dpi) {
+		
+		/*
+		 * TODO Is this used?
+		 */
+		distances[0] = 0;
+		distances[1] = 0;
+		// throw new RuntimeException("Not yet implemented!");
+	}
+
+	public int getOnePointRgb() {
+		return getTextColor().getRGB();
+	}
+
+	/*
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className", getClassName());
+		xml.putProperty("desc", getDescription());
+		xml.putProperty("isShapeVisible", isShapeVisible());
+		return xml;
+	}
+	*/
+
+	public int getSymbolType() {
+		return Geometry.TYPES.GEOMETRY;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return geom.getGeometryType().isTypeOf(TYPES.CURVE);
+	}
+	
+	public void drawInsideRectangle(
+			Graphics2D g,
+			AffineTransform scaleInstance,
+			Rectangle r,
+			PrintAttributes properties) throws SymbolDrawingException {
+		// let's take the bottom segment of the rectangle as the line
+		
+		Surface surf = null;
+		try {
+			surf = geoman.createSurface(SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			logger.info("Error while creating surface.", e);
+			throw new SymbolDrawingException(
+					SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS);
+		}
+		surf.addVertex(r.getX(), r.getY());
+		surf.addVertex(r.getX() + r.getWidth(), r.getY());
+		
+		if (properties == null) {
+			draw(g, scaleInstance, surf, null, null);
+		} else {
+			print(g, scaleInstance, surf, properties);
+		}
+	}
+
+
+	/*
+	public void setXMLEntity(XMLEntity xml) {
+		setFont(new Font("Arial", Font.PLAIN, 18));
+		setText("this is my TEST text that follows a line");
+		setDescription(xml.getStringProperty("desc"));
+		setIsShapeVisible(xml.getBooleanProperty("isShapeVisible"));
+
+	}
+	*/
+
+	public void setText(String txt) {
+		this.text = txt;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setCharacterSpacing(double charSpacing) {
+		this.characterSpacing = charSpacing;
+	}
+
+	public void setWordSpacing(double wordSpacing) {
+		this.wordSpacing = wordSpacing;
+	}
+
+	public void setAlignment(int alignment) {
+		this.alignment = alignment;
+	}
+
+	public void setKerning(boolean kerning) {
+		this.kerning = kerning;
+	}
+
+	public void setMargin(double margin) {
+		this.margin = margin;
+	}
+
+	public void setRightToLeft(boolean rightToLeft) {
+		this.rightToLeft = rightToLeft;
+	}
+	
+	// ==============================================
+	// ==============================================
+	// ==============================================
+
+	
+	public ISymbol getSymbolForSelection() {
+		return this;
+	}
+
+	public boolean isOneDotOrPixel(Geometry geom,
+			double[] positionOfDotOrPixel, ViewPort viewPort, int dpi) {
+		
+		int type = geom.getType();
+		switch (type) {
+		case Geometry.TYPES.NULL:
+		case Geometry.TYPES.POINT:
+		case Geometry.TYPES.MULTIPOINT:
+			return false;
+		default:
+			Envelope geomBounds = geom.getEnvelope();
+			double dist1Pixel = viewPort.getDist1pixel();
+
+			float[] distances = new float[2];
+			this.getPixExtentPlus(geom, distances, viewPort, dpi);
+
+			boolean onePoint =
+					((geomBounds.getLength(0) + distances[0] <= dist1Pixel)
+					&& (geomBounds.getLength(1) + distances[1] <= dist1Pixel));
+
+			if (onePoint) {
+				positionOfDotOrPixel[0] = geomBounds.getMinimum(0);
+				positionOfDotOrPixel[1] = geomBounds.getMinimum(1);
+			}
+			return onePoint;
+		}
+	}
+	
+
+
+	public String getDescription() {
+		return desc;
+	}
+
+
+	public void setDescription(String d) {
+		desc = d;
+	}
+
+
+	public Color getColor() {
+		return this.getTextColor();
+	}
+
+
+	public void setColor(Color color) {
+		this.setTextColor(color);
+	}
+
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom,
+			PrintAttributes properties) {
+		
+		/*
+		 * TODO Use properties
+		 * (perhaps when using things of CartographicSupport)
+		 */
+		this.draw(g,  at, geom, null, null);
+	}
+
+
+	public void setFont(Font fnt) {
+		this.font = fnt;
+	}
+
+
+	public Font getFont() {
+		return font;
+	}
+
+
+	public Color getTextColor() {
+		return this.textColor;
+	}
+
+
+	public void setTextColor(Color color) {
+		this.textColor = color;
+	}
+
+
+	public void setFontSize(double d) {
+		Font newFont = new Font(
+				font.getName(),
+				font.getStyle(),
+				Math.round((float) d));
+		this.font = newFont;		
+	}
+
+
+	public Geometry getTextWrappingShape(Point p) {
+		
+		Font font = getFont();
+		GlyphVector gv = font.createGlyphVector(frc, text);
+
+		Shape shape = gv.getOutline((float) p.getX(), (float) p.getY());
+		Geometry myFShape;
+		try {
+			myFShape = geoman.createSurface(new GeneralPathX(shape
+					.getBounds2D().getPathIterator(null)), SUBTYPES.GEOM2D);
+			myFShape.transform(AffineTransform.getTranslateInstance(p.getX(), p.getY()));
+
+			if (rotation != 0) {
+				myFShape.transform(AffineTransform.getRotateInstance(rotation));
+			}
+			return myFShape;
+		} catch (CreateGeometryException e) {
+			logger.error("Error creating a surface", e);
+		}
+		return null;
+	}
+
+
+	public Rectangle getBounds() {
+		
+		Rectangle bounds = null;
+		try {
+			Geometry aux = getTextWrappingShape(geoman.createPoint(0,0, SUBTYPES.GEOM2D));
+			Envelope env = aux.getEnvelope();
+			bounds = new Rectangle(
+					(int) env.getMinimum(0),
+					(int) env.getMinimum(1),
+					(int) env.getLength(0),
+					(int) env.getLength(1));
+		} catch (CreateGeometryException e) {
+			logger.error("Error creating a point", e);
+		}
+		return bounds;
+	}
+
+	public double getRotation() {
+		return this.rotation;
+	}
+
+
+	public void setRotation(double rot) {
+		this.rotation = rot;
+	}
+
+	public void setAutoresizeEnabled(boolean ar) {
+		autoresize = ar;
+	}
+
+
+	public boolean isAutoresizeEnabled() {
+		return autoresize;
+	}
+
+
+	public Color getHaloColor() {
+		return this.haloColor;
+	}
+
+
+	public void setHaloColor(Color co) {
+		this.haloColor = co;
+	}
+
+
+	public float getHaloWidth() {
+		return this.haloWidth;
+	}
+
+
+	public void setHaloWidth(float w) {
+		this.haloWidth = w;
+		this.haloStroke = new BasicStroke(
+				2*haloWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
+	}
+
+
+	public boolean isDrawWithHalo() {
+		return this.hasHalo;
+	}
+
+
+	public void setDrawWithHalo(boolean h) {
+		this.hasHalo = h;
+	}
+
+	// ==============================
+
+
+	public void setUnit(int unitIndex) {
+		unit = unitIndex;
+	}
+
+
+	public int getUnit() {
+		return unit;
+	}
+
+
+	public int getReferenceSystem() {
+		return this.referenceSystem;
+	}
+
+
+	public void setReferenceSystem(int rs) {
+		this.referenceSystem = rs;
+	}
+
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		setFontSize(cartographicSize);
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		double oldSize = getFont().getSize();
+		setCartographicSize(getCartographicSize(viewPort, dpi, geom), geom);
+		return oldSize;
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
+		return SymbolUtils.	getCartographicLength(
+				this, getFont().getSize(), viewPort, dpi);
+	}
+
+	// ========================
+	
+	public Object clone() throws CloneNotSupportedException {
+		return super.clone();
+	}
+	
+	// ==========================
+	
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(SMART_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
+			DynStruct definition = manager.addDefinition(
+					SmartTextSymbol.class,
+					SMART_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME,
+					SMART_TEXT_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+					null, 
+					null
+			);
+			
+			definition.addDynFieldString(FIELD_DESCRIPTION).setMandatory(true);
+			definition.addDynFieldBoolean(FIELD_IS_SHAPE_VISIBLE).setMandatory(true);
+			definition.addDynFieldInt(FIELD_REFERENCE_SYSTEM).setMandatory(true);
+			definition.addDynFieldInt(FIELD_UNIT).setMandatory(true);
+			definition.addDynFieldBoolean(FIELD_AUTO_RESIZE).setMandatory(true);
+			definition.addDynFieldObject(FIELD_FONT).setClassOfValue(Font.class).setMandatory(true);
+			definition.addDynFieldDouble(FIELD_ROTATION).setMandatory(true);
+			definition.addDynFieldString(FIELD_TEXT).setMandatory(true);
+			definition.addDynFieldObject(FIELD_TEXT_COLOR).setClassOfValue(Color.class).setMandatory(true);
+			// halo
+			definition.addDynFieldBoolean(FIELD_HAS_HALO).setMandatory(true);
+			definition.addDynFieldObject(FIELD_HALO_COLOR).setClassOfValue(
+					Color.class).setMandatory(true);
+			definition.addDynFieldFloat(FIELD_HALO_WIDTH).setMandatory(true);
+		}
+		
+	}
+	
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		setDescription(state.getString(FIELD_DESCRIPTION));
+		setIsShapeVisible(state.getBoolean(FIELD_IS_SHAPE_VISIBLE));
+		setReferenceSystem(state.getInt(FIELD_REFERENCE_SYSTEM));
+		setUnit(state.getInt(FIELD_UNIT));
+		
+		setAutoresizeEnabled(state.getBoolean(FIELD_AUTO_RESIZE));
+		setFont((Font) state.get(FIELD_FONT));
+		setRotation(state.getDouble(FIELD_ROTATION));
+		setText(state.getString(FIELD_TEXT));
+		setTextColor((Color) state.get(FIELD_TEXT_COLOR));
+		// halo
+		this.setDrawWithHalo(state.getBoolean(FIELD_HAS_HALO));
+		this.setHaloColor((Color) state.get(FIELD_HALO_COLOR));
+		this.setHaloWidth(state.getFloat(FIELD_HALO_WIDTH));
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set(FIELD_DESCRIPTION, getDescription());
+		state.set(FIELD_IS_SHAPE_VISIBLE, isShapeVisible());
+		state.set(FIELD_REFERENCE_SYSTEM, getReferenceSystem());
+		state.set(FIELD_UNIT, getUnit());
+		
+		state.set(FIELD_AUTO_RESIZE, isAutoresizeEnabled());
+		state.set(FIELD_FONT, getFont());
+		state.set(FIELD_ROTATION, getRotation());
+		state.set(FIELD_TEXT, getText());
+		state.set(FIELD_TEXT_COLOR, getTextColor());
+		// halo
+		state.set(FIELD_HAS_HALO, this.isDrawWithHalo());
+		state.set(FIELD_HALO_COLOR, this.getHaloColor());
+		state.set(FIELD_HALO_WIDTH, this.getHaloWidth());
+	}
+
+
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/CharacterMarkerSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/CharacterMarkerSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/CharacterMarkerSymbol.java	(revision 42196)
@@ -0,0 +1,833 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+ *
+ * $Id: CharacterMarkerSymbol.java 14501 2007-10-08 15:47:31Z jdominguez $
+ * $Log$
+ * Revision 1.27  2007-09-21 12:25:32  jaume
+ * cancellation support extended down to the IGeometry and ISymbol level
+ *
+ * Revision 1.26  2007/08/09 07:20:03  jvidal
+ * javadoc
+ *
+ * Revision 1.25  2007/07/23 06:52:25  jaume
+ * default selection color refactored, moved to MapContext
+ *
+ * Revision 1.24  2007/07/18 06:54:34  jaume
+ * continuing with cartographic support
+ *
+ * Revision 1.23  2007/07/03 10:58:29  jaume
+ * first refactor on CartographicSupport
+ *
+ * Revision 1.22  2007/06/29 13:07:01  jaume
+ * +PictureLineSymbol
+ *
+ * Revision 1.21  2007/06/07 06:50:40  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.20  2007/05/29 15:46:37  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.19  2007/05/28 15:36:42  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.18  2007/05/17 09:32:06  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.17  2007/05/09 16:07:26  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.16  2007/05/09 11:05:28  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.15  2007/05/08 08:47:40  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.14  2007/04/26 11:41:00  jaume
+ * attempting to let defining size in world units
+ *
+ * Revision 1.13  2007/04/20 07:11:11  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.12  2007/04/19 16:01:27  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.11  2007/04/19 14:21:30  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.10  2007/03/26 14:24:13  jaume
+ * implemented Print
+ *
+ * Revision 1.9  2007/03/21 11:37:00  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.8  2007/03/21 11:02:17  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.7  2007/03/09 11:20:56  jaume
+ * Advanced symbology (start committing)
+ *
+ * Revision 1.5.2.8  2007/02/21 07:34:09  jaume
+ * labeling starts working
+ *
+ * Revision 1.5.2.7  2007/02/16 10:54:12  jaume
+ * multilayer splitted to multilayerline, multilayermarker,and  multilayerfill
+ *
+ * Revision 1.5.2.6  2007/02/15 16:23:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5.2.5  2007/02/14 09:58:37  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5.2.4  2007/02/12 15:15:20  jaume
+ * refactored interval legend and added graduated symbol legend
+ *
+ * Revision 1.5.2.3  2007/02/09 07:47:04  jaume
+ * Isymbol moved
+ *
+ * Revision 1.5.2.2  2007/02/05 14:59:04  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5.2.1  2007/01/30 18:10:45  jaume
+ * start commiting labeling stuff
+ *
+ * Revision 1.5  2007/01/25 16:25:23  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2007/01/24 17:58:22  jaume
+ * new features and architecture error fixes
+ *
+ * Revision 1.3  2007/01/16 11:50:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2007/01/10 16:39:41  jaume
+ * ISymbol now belongs to com.iver.cit.gvsig.fmap.core.symbols package
+ *
+ * Revision 1.1  2007/01/10 16:31:36  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/12/04 17:13:39  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/11/14 11:10:27  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/11/09 18:39:05  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/11/08 10:56:47  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/11/06 17:08:45  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/31 16:16:34  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/10/30 19:30:35  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/10/29 23:53:49  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/10/26 16:27:33  jaume
+ * support for composite marker symbols (not tested)
+ *
+ * Revision 1.1  2006/10/25 10:50:41  jaume
+ * movement of classes and gui stuff
+ *
+ * Revision 1.3  2006/10/24 19:54:16  jaume
+ * added IPersistence
+ *
+ * Revision 1.2  2006/10/24 08:02:51  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/18 07:54:06  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.labeling.symbol;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+import org.gvsig.labeling.lang.LabelClassUtils;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.Cancellable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Allows to use a source of TrueType characters  to define the marker that will
+ * substitute the symbol.If the picture is defined in a source, the performance is
+ * more agile.
+ * @author   jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class CharacterMarkerSymbol implements IMarkerSymbol {
+	
+	private static Logger logger =
+			LoggerFactory.getLogger(CharacterMarkerSymbol.class);
+	
+	public static final String CHARACTER_MARKER_SYMBOL_PERSISTENCE_NAME =
+			"CHARACTER_MARKER_SYMBOL_PERSISTENCE_NAME";
+	
+	private Font font = new Font("Arial", Font.PLAIN, 20);
+	private int unicode;
+	private ISymbol selectionSymbol;
+	private VisualCorrection visualCorrection;
+	private double size;
+	
+	private boolean isShapeVisible = true;
+	private String desc = "";
+	
+	private IMask mask;
+	private int unit = -1;
+	private int referenceSystem = CartographicSupport.WORLD;
+	
+	private int alpha = 255;
+	private Point2D offset = new Point2D.Double();
+	
+	/*
+	 * 
+	 */
+	private double rotation_radians = 0;
+	private Color color = Color.BLACK;
+	
+	private static GeometryManager geoman = GeometryLocator.getGeometryManager();
+
+	/**
+	 * Creates a new instance of CharacterMarker with default values
+	 *
+	 */
+	public CharacterMarkerSymbol() {
+		super();
+	}
+
+	/**
+	 * Creates a new instance of CharacterMarker specifying the marker source
+	 * font, the character code corresponding to the symbol, and the color that
+	 * will be used in rendering time.
+	 *
+	 * @param font -
+	 *            src Font
+	 * @param charCode -
+	 *            character code of the symbol for this font
+	 * @param color -
+	 *            color to be used in when rendering.
+	 */
+	public CharacterMarkerSymbol(Font font, int charCode, Color color) {
+		super();
+		this.font = font;
+		unicode = charCode;
+		setColor(color);
+	}
+	/**
+	 * Returns the font that will be used to define the symbol
+	 * @return font
+	 */
+	public Font getFont() {
+		return font;
+	}
+	/**
+	 * Sets the font that will be used to define the symbol
+	 * @return font
+	 */
+	public void setFont(Font font) {
+		this.font = font;
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSymbol == null) {
+			selectionSymbol = (ISymbol) LabelClassUtils.clone(this);
+			selectionSymbol.setColor(MapContext.getSelectionColor());
+		}
+		return selectionSymbol;
+	}
+	
+	
+	public void draw(Graphics2D g,
+			AffineTransform affineTransform, Geometry geom,
+			Feature feat, Cancellable cancel) {
+		
+		g.setColor(getColor());
+		double theta = getRotation();
+
+		int xOffset = (int) getOffset().getX(); // * multiplicador d'unitats;
+		int yOffset = (int) getOffset().getY(); // * multiplicador d'unitats
+
+		double size = getSize();
+		if (size < 0.0001) {
+			return;
+		}
+		
+		org.gvsig.fmap.geom.primitive.Point cen = null;
+		try {
+			cen = geom.centroid();
+		} catch (Exception e) {
+			logger.error("While getting centroid", e);
+		}
+		
+		Point2D p = new Point2D.Double(cen.getX(), cen.getY());
+
+		if (isVisuallyCorrected()) {
+			size *= visualCorrection.sizeScale;
+			p.setLocation(p.getX() - xOffset*size*visualCorrection.xOffsetScale, p.getY() - yOffset*size*visualCorrection.yOffsetScale);
+
+		}
+		g.setFont(getFont().deriveFont((float)size));
+
+		g.translate((int) (p.getX() + xOffset), (int) (p.getY()  + yOffset));
+		if (theta != 0)	g.rotate(theta);
+
+		char[] text = new char[] { (char) unicode };
+
+		IMask mask = getMask();
+		if (mask != null) {
+			FontRenderContext frc = g.getFontRenderContext();
+
+			GlyphVector gv = font.createGlyphVector(frc, text );
+
+			Shape markerShape = gv.getOutline(0, 0);
+			mask.getFillSymbol().
+			 		draw(g, null, mask.getHaloShape(markerShape), feat, cancel);
+
+		}
+		g.drawChars(text, 0, text.length, - (int) (size*0.4), (int) (size*0.4));
+
+
+		if (theta!=0) g.rotate(-theta);
+		g.translate(-(int) (p.getX() + xOffset), - (int) (p.getY() + yOffset));
+	}
+
+
+
+	
+
+	/**
+	 * Sets the unicode for a symbol represented by a character
+	 * @param symbol, int
+	 */
+	public void setUnicode(int symbol) {
+		this.unicode = symbol;
+	}
+
+	/**
+	 * Obtains the unicode for a symbol
+	 * @return unicode, int
+	 */
+	public int getUnicode() {
+		return unicode;
+	}
+
+
+
+	/*
+	public void setXMLEntity(XMLEntity xml) {
+		setColor(StringUtilities.string2Color(xml.getStringProperty("color")));
+		Point p = new Point();
+		p.setLocation(xml.getDoubleProperty("xOffset"), xml.getDoubleProperty("yOffset"));
+
+		setDescription(xml.getStringProperty("desc"));
+		size = xml.getDoubleProperty("size");
+		font = new Font(xml.getStringProperty("font"),
+				xml.getIntProperty("fontStyle"),
+				(int) size);
+		setIsShapeVisible(xml.getBooleanProperty("isShapeVisible"));
+		unicode = xml.getIntProperty("symbolCode");
+		setOffset(p);
+		setRotation(xml.getDoubleProperty("rotation"));
+		setReferenceSystem(xml.getIntProperty("referenceSystem"));
+		setUnit(xml.getIntProperty("unit"));
+	}
+	*/
+
+
+	public double getSize() {
+		return size;
+	}
+
+	public void setSize(double size) {
+		this.size = size;
+		font = new Font(font.getName(), font.getStyle(), (int) Math.round(size));
+	}
+	/**
+	 * Returns true of false depending if the character marker symbol selected is visually
+	 * corrected.That is, if the character has been properly scaled to use a specific number
+	 * of pixels to be represented.
+	 *
+	 * @return boolean
+	 */
+	public boolean isVisuallyCorrected() {
+		return visualCorrection != null;
+	}
+	/**
+	 * Sets the visual correction for a character in order to scale it if it is necessary.
+	 *
+	 * @return boolean
+	 */
+	public void setVisuallyCorrected(boolean visuallyCorrected) {
+		if (visuallyCorrected && visualCorrection == null) {
+			CharacterMarkerSymbol clone =
+					(CharacterMarkerSymbol) LabelClassUtils.clone(this);
+			int frameSize = 200;
+			double symbolSize = 100;
+			BufferedImage bi = new BufferedImage(frameSize, frameSize, BufferedImage.TYPE_INT_ARGB);
+			Graphics2D aGraphics = bi.createGraphics();
+			clone.setOffset(new Point2D.Double(0,0));
+			clone.setSize(symbolSize);
+			clone.setColor(Color.PINK);
+
+
+			// draw it at center of the image
+			org.gvsig.fmap.geom.primitive.Point pCenter = null;
+			try {
+				pCenter = geoman.createPoint(
+						frameSize/2,frameSize/2, SUBTYPES.GEOM2D);
+			} catch (Exception e) {
+				logger.error("While creating point", e);
+			}
+			clone.draw(aGraphics, new AffineTransform(), pCenter, null, null);
+
+			int realTop    = -1;
+			int realBottom = -1;
+			int realLeft   = -1;
+			int realRight  = -1;
+
+			// let's see where the highest pixel is in Y-axis
+			boolean done = false;
+			for (int j = 0; !done && j < bi.getHeight(); j++) {
+				for (int i = 0; !done && i < bi.getWidth(); i++) {
+					if (bi.getRGB(i, j) != 0) {
+						realTop = j;
+						done = true;
+					}
+				}
+			}
+
+			// let's see where the lowest pixel is in Y-axis
+			done = false;
+			for (int j =  bi.getHeight()-1; !done &&  j >= 0; j--) {
+				for (int i = 0; !done &&  i < bi.getWidth(); i++) {
+					if (bi.getRGB(i, j) != 0) {
+						realBottom = i;
+						done = true;
+					}
+				}
+			}
+
+			// let's see where the first pixel at left is in X-axis
+			done = false;
+			for (int i = 0; !done &&  i < bi.getWidth(); i++) {
+				for (int j = 0; !done &&  j < bi.getHeight(); j++) {
+					if (bi.getRGB(i, j) != 0) {
+						realLeft = i;
+						done = true;
+					}
+				}
+			}
+
+			// let's see where the first pixel at right is in X-axis
+			done = false;
+			for (int i = bi.getWidth()-1; !done &&  i >=0 ; i--) {
+				for (int j = 0; !done &&  j < bi.getHeight(); j++) {
+					if (bi.getRGB(i, j) != 0) {
+						realRight = i;
+						done = true;
+					}
+				}
+			}
+			
+			int realWidth = bi.getWidth() - realRight-realLeft;
+			int realHeight = bi.getHeight() - realBottom - realTop;
+
+			visualCorrection = new VisualCorrection();
+			
+			if (realBottom!=-1 && realTop!=-1 && realLeft!=-1 && realRight != -1) {
+				double correctingSize = Math.max(realHeight, realWidth);
+				visualCorrection.sizeScale = clone.getSize() / correctingSize;
+			}
+
+			if (realLeft!=-1 && realRight!=-1) {
+				double correctingCenterX = (((realWidth)*0.5)+realLeft);
+				double correctingCenterY = (((realHeight)*0.5)+realBottom);
+				visualCorrection.xOffsetScale = (pCenter.getX() - correctingCenterX) / frameSize;
+				visualCorrection.yOffsetScale = (pCenter.getY() - correctingCenterY) / frameSize;
+			}
+		} else {
+			visualCorrection = null;
+		}
+	}
+	
+	
+	public Object clone() throws CloneNotSupportedException {
+		return LabelClassUtils.clone(this);
+	}
+	
+	
+	public void getPixExtentPlus(
+			Geometry geom, float[] distances,
+			ViewPort viewPort, int dpi) {
+		
+		float cs = (float) getCartographicSize(viewPort, dpi, geom);
+		distances[0] = cs;
+		distances[1] = cs;
+	}
+
+	public boolean isOneDotOrPixel(Geometry geom,
+			double[] positionOfDotOrPixel, ViewPort viewPort, int dpi) {
+
+		int type = geom.getType();
+		switch (type) {
+		case Geometry.TYPES.NULL:
+		case Geometry.TYPES.POINT:
+		case Geometry.TYPES.MULTIPOINT:
+			return false;
+		default:
+			org.gvsig.fmap.geom.primitive.Envelope geomBounds = geom
+			.getEnvelope();
+
+			double dist1Pixel = viewPort.getDist1pixel();
+
+			float[] distances = new float[2];
+			this.getPixExtentPlus(geom, distances, viewPort, dpi);
+
+			boolean onePoint =
+					(geomBounds.getLength(0) + distances[0] <= dist1Pixel && geomBounds
+					.getLength(1)
+					+ distances[1] <= dist1Pixel);
+
+			if (onePoint) {
+				Envelope bounds = geom.getEnvelope();
+				positionOfDotOrPixel[0] = bounds.getMinimum(0);
+				positionOfDotOrPixel[1] = bounds.getMinimum(1);
+			}
+			return onePoint;
+		}
+	}
+	
+	public int getOnePointRgb() {
+		return this.getColor().getRGB();
+	}
+
+	public String getDescription() {
+		return desc;
+	}
+
+	public boolean isShapeVisible() {
+		return isShapeVisible;
+	}
+
+	public void setDescription(String d) {
+		desc = d;
+	}
+
+	public int getSymbolType() {
+		return Geometry.TYPES.POINT;
+	}
+
+	public boolean isSuitableFor(Geometry geom) {
+		return geom.getType() == Geometry.TYPES.POINT
+				|| geom.getType() == Geometry.TYPES.MULTIPOINT;
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r,
+			PrintAttributes properties) throws SymbolDrawingException {
+		
+		
+		org.gvsig.fmap.geom.primitive.Point center = null;
+		try {
+			center = geoman.createPoint(
+					r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D);
+		} catch (CreateGeometryException e) {
+			throw new SymbolDrawingException(TYPES.POINT);
+		}
+
+		if (properties==null) {
+			draw(g, scaleInstance, center, null, null);
+		} else {
+			double originalSize = getSize();
+			double size=originalSize;
+			int pq = properties.getPrintQuality();
+			if (pq == PrintAttributes.PRINT_QUALITY_HIGH) {
+				size *= (double) 600/72;
+			} else {
+				if (pq == PrintAttributes.PRINT_QUALITY_NORMAL) {
+					size *= (double) 300/72;
+				} else {
+//					unitFactor *= 72; (which is the same than doing nothing)
+				}
+			}
+			setSize(size);
+			print(g, scaleInstance, center, properties);
+			setSize(originalSize);
+		}
+		
+	}
+
+
+	public void print(Graphics2D g, AffineTransform at, Geometry geom,
+			PrintAttributes properties) {
+
+		/* TODO Use this?
+		double dpi = 100;
+		int pq = properties.getPrintQuality();
+		if (pq == PrintAttributes.PRINT_QUALITY_NORMAL){
+			dpi = 300;
+		} else if (pq == PrintAttributes.PRINT_QUALITY_HIGH){
+			dpi = 600;
+		} else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT){
+			dpi = 72;
+		}
+		*/
+
+		draw(g,at,geom,null,null);	
+	}
+
+	public void setUnit(int unitIndex) {
+		unit = unitIndex;
+	}
+
+	public int getUnit() {
+		return unit;
+	}
+
+	public int getReferenceSystem() {
+		return this.referenceSystem;
+	}
+
+	public void setReferenceSystem(int rs) {
+		this.referenceSystem = rs;
+	}
+
+	public double toCartographicSize(ViewPort viewPort, double dpi,
+			Geometry geom) {
+		
+		double oldSize = getSize();
+		setCartographicSize(getCartographicSize(viewPort, dpi, geom), geom);
+		return oldSize;	}
+
+	public void setCartographicSize(double cartographicSize, Geometry geom) {
+		setSize(cartographicSize);
+	}
+
+	public double getCartographicSize(ViewPort viewPort, double dpi,
+			Geometry geom) {
+		
+		return SymbolUtils.getCartographicLength(this,
+									  getSize(),
+									  viewPort,
+									  dpi);
+	}
+
+	public double getRotation() {
+		return rotation_radians;
+	}
+
+	public void setRotation(double rot) {
+		rotation_radians = rot;
+	}
+
+	public Point2D getOffset() {
+		return offset;
+	}
+
+	public void setOffset(Point2D off) {
+		offset = off;
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public void setColor(Color co) {
+		color = co;
+	}
+
+	public void setAlpha(int a) {
+		alpha = a;
+	}
+
+	public IMask getMask() {
+		return mask;
+	}
+
+	public void setMask(IMask m) {
+		mask = m;
+	}
+	
+	// =========================================
+	
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		
+		if (state.hasValue("vc_xOffsetScale")) {
+			this.visualCorrection = new VisualCorrection();
+			this.visualCorrection.xOffsetScale = state.getDouble("vc_xOffsetScale");
+			this.visualCorrection.yOffsetScale = state.getDouble("vc_yOffsetScale");
+			this.visualCorrection.sizeScale = state.getDouble("vc_sizeScale");
+		} else {
+			this.visualCorrection = null;
+		}
+		if (state.hasValue("mask")) {
+			this.mask = (IMask) state.get("mask");
+		} else {
+			this.mask = null;
+		}
+		// ==============================================
+		this.color = (Color) state.get("color");
+		this.font = (Font) state.get("font");
+		
+		double aux = state.getDouble("size");
+		this.setSize(aux);
+		
+		this.unicode = state.getInt("unicode");
+		this.desc = state.getString("desc");
+		this.isShapeVisible = state.getBoolean("isShapeVisible");
+		
+		double x = state.getDouble("xOffset");
+		double y = state.getDouble("yOffset");
+		this.offset = new Point2D.Double(x, y);
+		
+		this.rotation_radians = state.getDouble("rotation");
+		this.unit = state.getInt("unit");
+		this.referenceSystem = state.getInt("referenceSystem");		
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		
+		if (this.visualCorrection != null) {
+			state.set("vc_xOffsetScale", this.visualCorrection.xOffsetScale);
+			state.set("vc_yOffsetScale", this.visualCorrection.yOffsetScale);
+			state.set("vc_sizeScale", this.visualCorrection.sizeScale);
+		}
+		if (this.mask != null) {
+			state.set("mask", this.mask);
+		}
+		// ==================================================
+		state.set("color", this.color);
+		state.set("font", this.font);
+		state.set("size", this.size);
+		state.set("unicode", this.unicode);
+		state.set("desc", this.desc);
+		state.set("isShapeVisible", this.isShapeVisible);
+		state.set("xOffset", this.offset.getX());
+		state.set("yOffset", this.offset.getY());
+		state.set("rotation", this.rotation_radians);
+		state.set("unit", this.unit);
+		state.set("referenceSystem", this.referenceSystem);		
+	}
+	
+	public static void registerPersistent() {
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if( manager.getDefinition(CHARACTER_MARKER_SYMBOL_PERSISTENCE_NAME)==null ) {
+			DynStruct definition = manager.addDefinition(
+					CharacterMarkerSymbol.class,
+					CHARACTER_MARKER_SYMBOL_PERSISTENCE_NAME,
+					CHARACTER_MARKER_SYMBOL_PERSISTENCE_NAME+" Persistence definition",
+					null, 
+					null
+			);
+			
+			definition.addDynFieldObject("color").setClassOfValue(Color.class).setMandatory(true);
+			definition.addDynFieldObject("font").setClassOfValue(Font.class).setMandatory(true);
+			definition.addDynFieldDouble("size").setMandatory(true);
+			definition.addDynFieldInt("unicode").setMandatory(true);
+			definition.addDynFieldString("desc").setMandatory(true);
+			definition.addDynFieldBoolean("isShapeVisible").setMandatory(true);
+			definition.addDynFieldDouble("xOffset").setMandatory(true);
+			definition.addDynFieldDouble("yOffset").setMandatory(true);
+			definition.addDynFieldDouble("rotation").setMandatory(true);
+			definition.addDynFieldInt("unit").setMandatory(true);
+			definition.addDynFieldInt("referenceSystem").setMandatory(true);
+			definition.addDynFieldObject("mask").setClassOfValue(IMask.class).setMandatory(false);
+			// =====================
+			definition.addDynFieldDouble("vc_xOffsetScale").setMandatory(false);
+			definition.addDynFieldDouble("vc_yOffsetScale").setMandatory(false);
+			definition.addDynFieldDouble("vc_sizeScale").setMandatory(false);
+		}		
+	}
+
+
+	/**
+	 * Class to be used for the methods that control the visual correction of a character.
+	 * This visual correction has the responsibility of modify the dimensions of the
+	 * character to be used as a symbol(in case that the user wants to use more or less
+	 * pixels to represent it )
+	 *
+	 */
+	private class VisualCorrection {
+		double xOffsetScale = 1;
+		double yOffsetScale = 1;
+		double sizeScale = 1;
+	}
+		
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/SymbolUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/SymbolUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/java/org/gvsig/labeling/symbol/SymbolUtils.java	(revision 42196)
@@ -0,0 +1,47 @@
+package org.gvsig.labeling.symbol;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+
+public class SymbolUtils {
+	
+	/**
+	 * Calculates the distance in pixels corresponding to the provided length,
+	 * according to the current rendering context (output dpi, map scale, map units) and the
+	 * symbol cartographic settings (unit, size, and unit reference system).
+	 *
+	 * @param cartographicElement CartographicSupport object which contains the reference system
+	 * and the measuring units for the provided length
+	 * @param length The length to be computed in pixels. The length is supposed to be
+	 * provided in the units defined in the cartographicElement
+	 * @param viewPort The viewport, which defines the relationship between pixels and maps units
+	 * @param dpi The resolution (dots per inch) of the target display device
+	 * (printer, screen, etc)
+	 * @return The distance in pixels corresponding to the provided length
+	 */
+	public static double getCartographicLength(
+			CartographicSupport cartographicElement,
+			double length, ViewPort viewPort, double dpi) {
+		
+		int unit = cartographicElement.getUnit();
+		double lengthInPixel = length;
+
+		if (unit != -1) {
+			double[] trans2Meter=MapContext.getDistanceTrans2Meter();
+			if (cartographicElement.getReferenceSystem() == CartographicSupport.WORLD) {
+				double dist1PixelInMeters = viewPort.getDist1pixel()*trans2Meter[viewPort.getMapUnits()];
+				double realWidthMeter = length*trans2Meter[unit];
+				lengthInPixel = realWidthMeter/dist1PixelInMeters;
+			} else if (cartographicElement.getReferenceSystem() == CartographicSupport.PAPER) {
+				double lengthInInches = 1/trans2Meter[7]*trans2Meter[unit]*length;
+				lengthInPixel = lengthInInches*dpi;
+			}
+		} else{
+			double scale=dpi/72;
+			lengthInPixel=lengthInPixel*scale;
+		}
+		return  (lengthInPixel);
+
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+
+<plugin-config>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.labeling.ExtendedLabelingExtension"
+			description="Extended labeling options"
+			active="true"
+			priority="1">
+		</extension>		
+	</extensions>
+</plugin-config>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-normal-precedence.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-normal-precedence.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-add-text.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-add-text.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-shift-component.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-shift-component.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-forbidden-precedence.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-forbidden-precedence.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-remove-text.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-remove-text.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-high-precedence.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-high-precedence.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-low-precedence.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/set-low-precedence.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/table-export.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/table-export.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-add-background-image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/edit-add-background-image.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/single-labeling-tool.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/single-labeling-tool.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/layer-export.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/layer-export.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/single-labeling-tool-config.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/action/single-labeling-tool-config.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/preferences/export-to-preferences.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/images/preferences/export-to-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/bg-polygon.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/bg-polygon.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/line.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/line.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/polygon.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/polygon.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/line.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/line.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/polygon.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/polygon.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/bg-polygon.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/bg-polygon.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/bg-polygon.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/bg-polygon.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/line.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/line.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/polygon.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/docs/polygon.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.exportto.app.extension.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.exportto.app.extension">
+      <description>Persistence of the Exportto plugin</description>
+      <fields>
+        <field name="enabledProviders" type="Set" classOfItems="java.lang.String" mandatory="false">
+          <description>List of export to provider names enabled by the user</description>
+        </field>
+        <field name="disabledProviders" type="Set" classOfItems="java.lang.String" mandatory="false">
+          <description>List of export to provider names disabled by the user</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1,295 @@
+#Translations for language [de]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=Standard-Symbol wird verwendet
+above=oberhalb
+accept=OK
+accessing_file_structure=Auf das Dateiverzeichnis zugreifen
+add=Hinzuf\u00fcgen
+add_class=Klasse hinzuf\u00fcgen
+add_expression=Ausdruck hinzuf\u00fcgen
+add_field=Feld hinzuf\u00fcgen
+add_operator=Operator hinzuf\u00fcgen
+add_text_area=Textfeld hinzuf\u00fcgen
+all_features=Alle Elemente
+all_supported_background_image_formats=Alle unterst\u00fctzten Formate von Hintergrundbildern
+allow_label_overlapping=\u00dcberlappungen zulassen
+always_circular=immer kreisf\u00f6rmig
+always_horizontal=waagrecht
+always_straight=angepasst
+angle=Winkel
+anticlockwise=gegen den Uhrzeigersinn
+apply_visual_correction_to_glyph_for_precise_size_and_position=Korrektur der grafischen Darstellung eines Schriftzeichens bzgl. Position und Gr\u00f6\u00dfe.
+arguments_added_to_a_costant=Hinzuf\u00fcgen von Werten zu einer Konstante
+at_begin=Anfang
+at_best=optimale Lage
+at_end=Ende
+at_fields=zu den Feldern
+background=Hintergrund
+background_color=Hintergrundfarbe
+background_style=Anzeige Hintergrund
+barchar3d_legend=BarChart3D Legende
+barchar3d_legend_desc=BarChart3D Legende absteigend
+barchart_3D=BarChart3D
+below=unterhalb
+bitmap_and_svg_image_files=bmp- und svg- Dateien
+boolean_value=Boolscher Wert
+browse=Durchsuchen
+buffered=Form des Polygons
+cancel=Abbrechen
+cannot_apply_to_a_non_polygon_layer=Dies kann nur f\u00fcr einen Polygon- Layer durchgef\u00fchrt werden
+cannot_be_null=Darf nicht Null sein
+cannot_exist_two_label_classes_with_the_same_name=Es d\u00fcrfen keine Beschriftungen mit gleichem Namen vorkommen
+cannot_install_labeling_method=Diese Beschriftungsmethode kann nicht verwendet werden
+cant_draw_preview=Vorschau kann nicht erstellt werden
+Capa=Layer
+change_location=\u00c4nderung der Position
+character_marker=Charakter Marker 
+character_marker_symbol=Charakter Marker-Symbol
+choose_marker=Marker w\u00e4hlen
+circular=kreisf\u00f6rmig
+class=Klasse
+classes=Klassen
+classifying_field_name_not_found=Name f\u00fcr die Klassifizierung nicht gefunden
+clear=L\u00f6schen
+color=Farbe\:
+color_field=Farbfeld
+color_ramp=Farbe
+confirmation_dialog=Best\u00e4tigungsdialog
+constant=Konstante
+correct_expression=Richtiger Ausdruck
+could_not_get_shape_type=Geometrie des Shp konnte nicht gefunden werden
+could_not_retreive_layer_field_names=
+could_not_retrieve_field_names=
+could_not_set_labeling_to_labelable_element=
+could_not_setup_legend=Legende konnte nicht geladen werden
+date_value=Datums-Wert
+default=Standard
+define_classes_of_features_and_label_each_differently=Definition von Objektklassen und eigene Beschriftung je Klasse
+Defines_a_dot_density_symbol_based_on_a_field_value=Durch Anzahl und Dichte von Punkten, wird ein Wert der Attributtabelle dargestellt
+delete=L\u00f6schen
+delete_class=Klasse l\u00f6schen
+delete_filter_expression=Ausdruck im Filter l\u00f6schen
+densities=Dichte
+depth_factor=
+description=Beschreibung
+divided_by_0=geteilt durch 0
+dont_show_labels_when_zoomed=Beschriftung im Ma\u00dfstabsbereich nicht darstellen
+dot_density=Punktdichte
+dot_size=Punktgr\u00f6\u00dfe
+dot_value=Punktwert
+draw_quantities_for_each_category=Legenden erzeugen durch Farb- und Symbolfeld. Kann verwendet werden, um die Beziehung zwischen zwei unabh\u00e4ngigen Attributwerten darzustellen. 
+draw_quantities_using_symbol_size_to_show_exact_values=Proportionale Symbolgr\u00f6\u00dfe f\u00fcr normalisierte Feldwerte. Damit werden Unterschiede in den Attributwerten durch eine angepasste Symbolgr\u00f6\u00dfe dargestellt.
+draw_quantities_using_symbol_size_to_show_relative_values=Abgestufte Symbolgr\u00f6\u00dfe, um die Unterschiede in der Quantit\u00e4t von Feldwerten darzustellen.
+duplicate_labels=Mehrfach- Beschriftungen
+edit_expression=Ausdruck editieren
+Enable_layer_preview=Layervorschau an
+enter_new_name=Neuen Namen eingeben
+error=Fehler
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Filter mit ung\u00fcltigem Format
+error_trying_to_access_to_the_layer=Fehler beim Versuch auf den Layer zuzugreifen
+error_validating_filter_query=Fehler beim \u00dcberpr\u00fcfen der SQL-Abfrage.
+expression=Ausdruck
+expression_creator=Filter-Ausdruck erzeugen
+expressions=Ausdr\u00fccke
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Die Beschriftung entlang der Linie konnte nicht gesetzt werden. Die Standardeinstellung wird verwendet.
+failed_computing_intervals=Fehler bei der Berechnung von Intervallen. 
+features=Objekte
+field_number=Feldnummer
+fields=Felder
+fields_exp=Felder
+fill_color=Farbe der F\u00fcllung
+fill_properties=Eigenschaften
+filter=Filter
+filtered_features=Ausgew\u00e4hlte Objekte
+fit_inside_polygon=angepasst innerhalb eines Polygons
+fit_on_text_area=angepasst an das Textfeld
+fixed_text_size=Textgr\u00f6\u00dfe
+following_line=der Linie folgend
+font=Schrift
+foreground_alpha=
+format=Format
+from=von
+fuente=Schrift
+GeneralLabeling.sample_text=
+generating_intervals=Intervalle werden generiert
+getting_layer_shape_type=auf Layer vom Typ Shape zur\u00fccksetzen
+gradient_color=Farbverlauf
+gradient_fill=Farbverlauf
+gradient_fill_symbol=Symbol durch Farbverlauf
+graduated_symbols=abgestufte Symbole
+grid=Gitter
+high=Hoch
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=Max.Ma\u00dfstabsbereich
+in_layer=inerhalb Layer
+in_the_middle=Mitte
+in_the_world=originalgetreu
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Falscher Ausdruck
+intervals=Intervalle
+invalid_filter_expression=
+invalid_url=ung\u00fcltiges Format der WFS Server URL
+it_will_not_be_added=kann nicht hinzugef\u00fcgt werden
+label-point-priority-help=Priorit\u00e4t\: 0 \= normale, 1 \= h\u00f6here, 3 \= geringere
+label_class_properties=Eigenschaften zur Klasse der Beschriftung
+label_expression=Ausdruck der Beschriftung
+label_expression_editor=Editor f\u00fcr Beschriftungsausdruck
+label_expression_help=
+label_features_in_the_same_way=Einheitliche Beschriftung aller Objekte 
+label_features_in_this_class=Objekte dieser Klasse beschriften
+label_only_when_selected=Selektierte Objekte beschriften
+label_priority=Priorit\u00e4t in der Beschriftung
+label_style_could_not_be_painted=
+label_styles=Beschriftungstyp
+labeled_point=
+labeling=Beschriftung
+labeling_field=Feld w\u00e4hlen
+layer_name=Layer-Name
+line=Reihe
+line_fill=Linien-Symbol
+line_fill_symbol=Linien-Symbol
+line_settings=Einstellungen zur Linie
+lineal=Linear
+lines=Linien
+location=Standort
+location_along_the_lines=Platzierung entlang von Linien
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Es scheint, als w\u00e4re der Wert f\u00fcr einen Punkt zu gering. Dies f\u00fchrt dazu, dass das System langsamer wird und nicht mehr antwortet.
+low=Gering
+malformed_or_empty_expression=Fehlerhafter oder kein Ausdruck wurde definiert
+marker_fill=Marker-Symbol
+marker_fill_symbol=Marker-Symbol
+marker_line=Marker line
+marker_line_symbol=Marker Linien-Symbol
+mas_de_100_simbolos=Eine Karte mit mehr als 100 Symbolen ist unlesbar.
+max_scale=Max. Ma\u00dfstab
+medium=Mittel
+method=Methode
+min_scale=Min. Ma\u00dfstab
+minimum_angle_to_draw=
+modify_filter_expression=Filterausdruck ver\u00e4ndern
+move_down=Nach unten
+move_up=nach oben
+name=Name
+names_and_types_count_are_disctint=Anzahl der Felder und der verschiedenen Feldtypen
+new_filter_expression=Neuer Filterausdruck
+no=Nein
+no_expression_defined=Ausdruck nicht definiert
+no_style=kein Hintergrund
+no_symbol_especified=Es wurde kein Symbol definiert
+none=keine/er
+normalization=Normalisierung
+not_save_empty_legend=Leere Legende wurde nicht gespeichert
+numeric_value=Numerischer Wert
+offset=Versatz
+offset_label=Beschriftung verschieben
+offset_labels_horizontally=Verschiebung waagrecht in Bezug auf einen Punkt
+offset_labels_on_top_of_the_points=Verschiebung der Beschriftung auf einen Punkt
+on_the_line=auf der Linie
+operation_not_allowed_for_SingleLabelingStrategy=F\u00fcr einfache Beschriftung\: Ausf\u00fchren nicht erlaubt\!
+operators=Operatoren
+options=Optionen
+orientation=Ausrichtung
+orientation_system=Ausrichtung
+out_beyond=Min.Ma\u00dfstabsbereich
+outline=Au\u00dfenlinie
+outline_opacity=Transparenz der Au\u00dfenlinie
+outline_width=Strichst\u00e4rke der Au\u00dfenlinie
+page=Seite
+parallel=parallel
+pattern=Muster
+percentage=Prozent
+perpedicular=senkrecht
+picture_file=Bild w\u00e4hlen
+picture_fill=Bild-Symbol
+picture_fill_symbol=Bild-Symbol
+picture_line_symbol=Bild Linien-Symbol 
+picture_marker=Marker durch Bild
+picture_marker_symbol=Bild Marker-Symbol
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Beschriftung pro Objekt vergeben
+place_one_label_per_feature_part=Beschriftung f\u00fcr jeden Teil des Objektes vergeben
+placement=Platzierung
+placement_priorities_selector=Eigenschaften Platzierung
+placement_properties=Eigenschaften Platzierung
+point_settings=Einstellungen zum Punkt
+points=Punkte
+polygon=Polygon
+polygon_settings=Einstellungen zum Polygon
+position=Position
+prefer_top_right_all_allowed=bevorzugt oben rechts
+preview=Vorschau
+preview_not_available=Vorschau nicht verf\u00fcgbar
+properties=Eigenschaften
+proportional_symbols=proportionale Symbole
+quantity_by_category=multivariat
+quiere_continuar=Wollen Sie fortfahren?
+Quitar=Entfernen
+Quitar_todos=Alle entfernen
+random=zuf\u00e4llig
+recovering_recordset=Datensatz wiederherstellen.
+rectangular=rechteckig
+remane_class=Klasse umbenennen
+remove=Entfernen
+remove_duplicate_labels=Doppelte Beschriftung entfernen
+resto_valores=Default- Werte
+scale=Skalieren
+scale_range_window_title=Ma\u00dfstabsbereich
+select=Ausw\u00e4hlen
+select_one_row=eine Zeile ausw\u00e4hlen
+selection_picture_file=zweites Bild
+separation=Separation
+set_forbidden_precedence=Priorit\u00e4t trotzdem setzen
+set_high_precedence=H\u00f6chste Priorit\u00e4t setzen
+set_low_precedence=Niedrigste Priorit\u00e4t setzen
+set_normal_precedence=H\u00f6chste Priorit\u00e4t setzen
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Zeigt die Elemente eines Layers abh\u00e4ngig von einem Filter- Ausdruck an
+simple_labeling=
+simple_marker=Simple Marker
+single_labeling=Einfache Beschriftung
+single_labeling_setup=Konfiguration zur einfachen Beschriftung
+size=Gr\u00f6\u00dfe
+SLD_grammar=SLD- Sprache
+some_arguments_are_incorrect=Einige Argumente sind nicht korrekt
+specify_the_range_of_scales_at_which_labels_will_be_shown=Ma\u00dfstabsbereich festlegen, indem die Beschriftung dargestellt werden soll
+SQL_query=SQL Befehl
+statistics=Statistik
+string_value=Wert der Zeichenkette
+style=Stil
+style_selector=Style-Editor
+symbol=Symbol
+symbol_field=Symbol-Feld
+symbol_shapetype_mismatch=
+syntax_error=Fehler in Syntax
+template=Vorlage
+text=Text
+text_field=Textfeld
+text_fields=Textfelder
+text_string=Text
+text_symbol=Text-Symbol
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=Die Nummer von Argumenten ist nicht korrekt
+the_result_is_not_a_boolean_value=Das Ergebnis ist kein Wert vom Typ Boolean
+to=zu
+Tools_Select=Auswahl des Werkzeuges
+URL=
+use_default_symbol=Standard-Symbol
+use_outline=Umriss verwenden
+use_the_same_scale_range_as_the_feature_layer=Ma\u00dfstabsbereich des Layers verwenden
+user_defined_labels=benutzerdefinierte Beschriftungen
+usupported_layer_type=Layertyp wird nicht unterst\u00fctzt
+value=Wert
+value_fields=Wertefelder
+variation_by=Legendentypen
+verify=Pr\u00fcfen
+visible=sichtbar
+visualization=Anzeigemen\u00fc
+warning=Achtung
+width=Breite
+x_offset=Offset von X
+y_offset=Offset von Y
+yes=Ja
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_sw.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_sw.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_sw.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [sw]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=
+above=
+accept=Kubali
+accessing_file_structure=
+add=Ongeza
+add_class=
+add_expression=
+add_field=Ongeza safu
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=Pembe
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=Rangi ya Mahali pa Nyuma ya Picha
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=Thamani ya Booleani
+browse=Pitia pitia kwa juu juu
+buffered=
+cancel=Futa
+cannot_apply_to_a_non_polygon_layer=Haiwezekani Kutumika kwa Safu Isiyokuwa ya data za kipoligoni
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=Kiandika Herufi
+character_marker_symbol=Kiandika Herufi
+choose_marker=Chagua Alama ya Utambulisho
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=Futa
+color=Rangi
+color_field=
+color_ramp=
+confirmation_dialog=Mawasiliano ya Kuweka Uhakika
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Haiwezi  kuweka hekaya. Tafadhali angalia thamni ya vitu
+date_value=Tarehe Halisi
+default=Ya kawaida
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=Inabainisha Msongamano wa Alama za Dot kwa Kutegemea Thamani kwenye Safu iIiyo Chaguliwa
+delete=
+delete_class=
+delete_filter_expression=
+densities=Misongamano
+depth_factor=
+description=Maelezo
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=Msongamano wa doti
+dot_size=Ukubwa wa doti
+dot_value=Thamani y doti
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=Kosa
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Kosa Katika Mfumo wa Kuuliza Swali
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=
+expression_creator=
+expressions=
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=Safu.
+fields_exp=
+fill_color=Jaza Rangi
+fill_properties=JazaTabia zake
+filter=Chanbua(Kwakukuchuja)
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=Muundo
+from=Kutoka
+fuente=Aina ya Herufi
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=Miraba Fito
+high=Juu
+horizontal=Mlalo/ Sambamba na Upeo wa Macho
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=Jina la Tabaka
+line=Mstari
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=Mahali
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=Chini
+malformed_or_empty_expression=
+marker_fill=Wino wa Kujaza
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=Zaidi ya Alama 100 kawaida Hazionyeshi Habari Zozote Katika Ramani
+max_scale=Skeli ya Juu
+medium=Ya kati
+method=Njia
+min_scale=Skeli ndogo kuliko zote
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=nakili
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=Hapana
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=Hakuna
+normalization=
+not_save_empty_legend=
+numeric_value=Kiwango kwa Tarakimu
+offset=Sawazisha
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=Uchaguzi
+orientation=
+orientation_system=
+out_beyond=
+outline=Mstari wa kuonyesha umbo au mpaka
+outline_opacity=
+outline_width=Upana wa Mstari wa kuonyesha umbo au mpaka
+page=Ukurasa
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=Poligoni
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=Onyesho la Awali
+preview_not_available=
+properties=Tabia
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=Je ungependa kuendelea ?
+Quitar=Ondoa
+Quitar_todos=Ondoa Yote
+random=Bila Taratibu
+recovering_recordset=
+rectangular=
+remane_class=
+remove=Ondoa\:
+remove_duplicate_labels=
+resto_valores=Viwango Vingine
+scale=Skeli
+scale_range_window_title=
+select=Chagua
+select_one_row=
+selection_picture_file=
+separation=Kutenganisha
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=Ukumbwa
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=Takwimu
+string_value=Kiwango cha Mtungo wa herufi
+style=Mtindo
+style_selector=
+symbol=
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=Maandishi ya kawaida
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=Kwenda
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=Thamani 
+value_fields=
+variation_by=
+verify=
+visible=Kuonekana Wazi
+visualization=
+warning=Onyo
+width=Upana
+x_offset=
+y_offset=
+yes=ndiyo
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_el.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_el.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_el.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [el]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=
+above=
+accept=\u0391\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae
+accessing_file_structure=
+add=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7
+add_class=
+add_expression=
+add_field=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c0\u03b5\u03b4\u03af\u03bf\u03c5
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=\u0393\u03c9\u03bd\u03af\u03b1
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=\u03a4\u03b9\u03bc\u03ae Boolean
+browse=\u03a0\u03bb\u03bf\u03ae\u03b3\u03b7\u03c3\u03b7
+buffered=
+cancel=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
+cannot_apply_to_a_non_polygon_layer=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u03b7 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03c3\u03b5 \u03bc\u03b7 \u03c0\u03bf\u03bb\u03c5\u03b3\u03c9\u03bd\u03b9\u03ba\u03cc \u03b5\u03c0\u03af\u03c0\u03b5\u03b4\u03bf
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=\u0395\u03c0\u03b9\u03c3\u03ae\u03bc\u03b1\u03bd\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd
+character_marker_symbol=\u03a3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03b5\u03c0\u03b9\u03c3\u03ae\u03bc\u03b1\u03bd\u03c3\u03b7\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd
+choose_marker=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b5\u03c0\u03b9\u03c3\u03ae\u03bc\u03b1\u03bd\u03c3\u03b7\u03c2
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=\u0395\u03ba\u03ba\u03b1\u03b8\u03ac\u03c1\u03b9\u03c3\u03b7
+color=\u03a7\u03c1\u03ce\u03bc\u03b1\:
+color_field=
+color_ramp=
+confirmation_dialog=\u0394\u03b9\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7\u03c2
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u03b7 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c5\u03c0\u03bf\u03bc\u03bd\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03bd\u03b1 \u03b5\u03bb\u03ad\u03b3\u03be\u03b5\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c4\u03b9\u03bc\u03ad\u03c2.
+date_value=\u03a4\u03b9\u03bc\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
+default=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=\u039a\u03b1\u03b8\u03bf\u03c1\u03af\u03b6\u03b5\u03b9 \u03ad\u03bd\u03b1 \u03c3\u03cd\u03bc\u03b2\u03bf\u03bb\u03bf \u03c3\u03b7\u03bc\u03b5\u03b9\u03b1\u03ba\u03ae\u03c2 \u03c0\u03c5\u03ba\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03b2\u03ac\u03c3\u03b7 \u03bc\u03b9\u03b1\u03c2 \u03c4\u03b9\u03bc\u03ae\u03c2 \u03c0\u03b1\u03c1\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf\u03c5 \u03c0\u03b5\u03b4\u03af\u03bf\u03c5 
+delete=
+delete_class=
+delete_filter_expression=
+densities=\u03a0\u03c5\u03ba\u03bd\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2
+depth_factor=
+description=\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u1f20
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=\u03a0\u03c5\u03ba\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1 \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03c9\u03bd
+dot_size=\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03b1\u03c2
+dot_value=\u03a4\u03b9\u03bc\u03ae \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03b1\u03c2
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=\u0397 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c6\u03af\u03bb\u03c4\u03c1\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03b1\u03bd\u03b8\u03b1\u03c3\u03bc\u03ad\u03bd\u03b7\: \u03c3\u03c6\u1f00\u03bb\u03bc\u03b1 \u03c3\u03c4\u03b7\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=
+expression_creator=
+expressions=
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=\u03a0\u03b5\u03b4\u03af\u03b1
+fields_exp=
+fill_color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03b3\u03b5\u03bc\u03af\u03c3\u03bc\u03b1\u03c4\u03bf\u03c2
+fill_properties=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03b5\u03bc\u03af\u03c3\u03bc\u03b1\u03c4\u03bf\u03c2
+filter=\u03a6\u03af\u03bb\u03c4\u03c1\u03bf
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=\u03a6\u03bf\u03c1\u03bc\u03ac\u03c4
+from=\u0391\u03c0\u03cc
+fuente=\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=\u039a\u03ac\u03bd\u03bd\u03b1\u03b2\u03bf\u03c2
+high=\u03a5\u03c8\u03b7\u03bb\u03ae
+horizontal=\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03bf\u03c2
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=\u1f48\u03bd\u03bf\u03bc\u03b1 \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5
+line=\u0393\u03c1\u03b1\u03bc\u03bc\u03ae
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=\u03a4\u1f40\u03c0\u03bf\u03c2
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=\u03a7\u03b1\u03bc\u03b7\u03bb\u03ae
+malformed_or_empty_expression=
+marker_fill=\u0395\u03c0\u03b9\u03c3\u03ae\u03bc\u03b1\u03bd\u03c3\u03b7 \u03b3\u03b5\u03bc\u03af\u03c3\u03bc\u03b1\u03c4\u03bf\u03c2
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=\u03a0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03b1\u03c0\u03cc 100 \u03c3\u03cd\u03bc\u03b2\u03bf\u03bb\u03b1 \u03c3\u03c5\u03bd\u03ae\u03b8\u03c9\u03c2 \u03b4\u03b5\u03bd \u03c0\u03b1\u03c1\u03ad\u03c7\u03bf\u03c5\u03bd \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b1 \u03c3\u03b5 \u03ad\u03bd\u03b1\u03bd \u03c7\u03ac\u03c1\u03c4\u03b7
+max_scale=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03b7 \u03ba\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+medium=\u039c\u03ad\u03c3\u03bf
+method=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1
+min_scale=\u0395\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03b7 \u03ba\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=\u038c\u03bd\u03bf\u03bc\u03b1
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=\u038c\u03c7\u03b9
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=\u039a\u03b1\u03bd\u03ad\u03bd\u03b1
+normalization=
+not_save_empty_legend=
+numeric_value=\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03ae \u03c4\u03b9\u03bc\u03ae
+offset=\u039c\u03b5\u03c4\u03b1\u03c4\u03cc\u03c0\u03b9\u03c3\u03b7
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+orientation=
+orientation_system=
+out_beyond=
+outline=\u03a0\u03b5\u03c1\u03af\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1
+outline_opacity=
+outline_width=\u03a0\u03ac\u03c7\u03bf\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2
+page=\u03a3\u03b5\u03bb\u03af\u03b4\u03b1
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=\u03a0\u03bf\u03bb\u03cd\u03b3\u03c9\u03bd\u03bf
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7
+preview_not_available=
+properties=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5;
+Quitar=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+Quitar_todos=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd
+random=\u03a4\u03c5\u03c7\u03b1\u03af\u03bf
+recovering_recordset=
+rectangular=
+remane_class=
+remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+remove_duplicate_labels=
+resto_valores=\u039b\u03bf\u03b9\u03c0\u03ad\u03c2 \u03c4\u03b9\u03bc\u03ad\u03c2
+scale=\u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+scale_range_window_title=
+select=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+select_one_row=
+selection_picture_file=
+separation=\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=\u03a3\u03c4\u03b1\u03c4\u03b9\u03c3\u03c4\u03b9\u03ba\u03ae
+string_value=\u0391\u03bb\u03c6\u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03ae \u03c4\u03b9\u03bc\u03ae
+style=\u03a3\u03c4\u03c5\u03bb
+style_selector=
+symbol=
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=\u0394\u03bf\u03ba\u03b9\u03bc\u03ae
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=\u039c\u03ad\u03c7\u03c1\u03b9
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=\u03a4\u03b9\u03bc\u03ae
+value_fields=
+variation_by=
+verify=
+visible=\u039f\u03c1\u03b1\u03c4\u03cc\u03c2
+visualization=
+warning=\u0395\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
+width=\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2
+x_offset=
+y_offset=
+yes=\u039d\u03b1\u03b9
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,321 @@
+#Translations for language [en]
+#Mon Sep 21 10:02:12 CEST 2009
+_Label_type_to_use_XcolonX=Label type to use\:
+a_default_symbol_will_be_used=A default symbol will be used
+above=Above
+accept=Accept
+accessing_file_structure=Acessing file structure
+add=Add
+add_class=Add class
+add_expression=Add expression
+add_field=Add field
+add_operator=Add operator
+add_text_area=Add text area
+all_features=All features
+all_supported_background_image_formats=All supported background image formats
+allow_label_overlapping=Allow label overlapping
+always_circular=
+always_horizontal=Always horizontal
+always_straight=Always straight
+angle=Angle
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Apply visual correction to glyph for precise size and positioning
+arguments_added_to_a_costant=Arguments added to a constant
+at_begin=At begin
+at_best=At best
+at_end=At end
+at_field=at field
+at_fields=at fields
+background=Background\:
+background_color=Background color
+background_style=Background Style
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Below
+bitmap_and_svg_image_files=Bitmaps and SVG image files
+boolean_value=Boolean value
+browse=Browse
+buffered=Buffered
+cancel=Cancel
+cannot_apply_to_a_non_polygon_layer=Cannot apply to a non-polygon layer
+cannot_be_null=Cannot be null
+cannot_exist_two_label_classes_with_the_same_name=Cannot exist two label classes with the same name
+cannot_install_labeling_method=Cannot install the labeling method
+cant_draw_preview=Can't draw preview
+Capa=Layer
+change_location=Change location
+character_marker=Character marker
+character_marker_symbol=Character marker symbol
+choose_marker=Choose marker
+circular=Circular
+class=Class
+classes=Classes
+classifying_field_name_not_found=Classifying field name not found
+clear=Clear
+color=Color\:
+color_field=Color field
+color_ramp=Color ramp
+confirmation_dialog=Confirmation dialog
+constant=Constant
+correct_expression=Correct expression
+could_not_get_shape_type=Could not get shape type.
+could_not_restore_color_field=Could not restore color field.
+could_not_restore_rotation_field=Could not restore rotation field.
+could_not_restore_text_field=Could not restore text field.
+could_not_restore_text_height_field=Could not restore text height field.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Could not setup the legend
+date_value=Date value
+default=Default
+define_classes_of_features_and_label_each_differently=Define classes of features and label each differently
+Defines_a_dot_density_symbol_based_on_a_field_value=Defines a dot density symbol based on the value of a field
+delete=Delete
+delete_class=Delete class
+delete_filter_expression=Delete filter expression
+densities=Densities
+depth_factor=
+description=Description
+divided_by_0=Divided by 0
+dont_show_labels_when_zoomed=Dont show labels when zoomed
+dot_density=Dot density
+dot_size=Dot size
+dot_value=Dot value
+draw_quantities_for_each_category=Draw quantities for each category.
+draw_quantities_using_symbol_size_to_show_exact_values=Draws quantities using symbol size to show exact values.
+draw_quantities_using_symbol_size_to_show_relative_values=Draws quantities using symbol size to show relative values.
+duplicate_labels=Duplicate layers
+edit_expression=Edit expression
+enable_labeling=Enable labeling
+Enable_layer_preview=Enable layer preview
+enter_new_name=Enter new name
+error=Error
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Error parsing SQL query.
+error_trying_to_access_to_the_layer=Error trying to access to the layer
+error_validating_filter_query=Error validating SQL query.
+Etiquetados=Labelling
+expression=Expression
+expression_creator=Expression creator
+expressions=Expressions
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Failed applying following line labeling.It will use the default configuration
+failed_computing_intervals=Failed to compute intervals.
+false=False
+features=Features
+field_number=Field number
+field_to_be_labeled=Field to be labeled
+fields=Fields
+fields_exp=Fields
+fill_color=Fill color
+fill_properties=Fill properties
+filter=Filter
+filtered_features=Filtered features
+fit_inside_polygon=Fit inside polygon
+fit_on_text_area=Fit on text area
+fixed_color=Fixed color
+fixed_height=Fixed height
+fixed_text_size=Fixed text size
+following_line=Following the line
+font=Font
+foreground_alpha=
+format=Format
+from=From
+fuente=Font
+general=General
+GeneralLabeling.sample_text=
+generating_intervals=Generating Intervals
+getting_layer_shape_type=Getting layer shape type
+gradient_color=Gradient color
+gradient_fill=Gradient fill
+gradient_fill_symbol=Gradient fill symbol
+graduated_symbols=Graduated symbols
+grid=Grid
+high=High
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=In beyond
+in_layer=in layer
+in_the_middle=In the middle
+in_the_world=In the world
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Incorrect expression
+intervals=Intervals
+invalid_filter_expression=
+invalid_url=Invalid format in WFS server URL.
+it_will_not_be_added=It will not be added
+label-point-priority-help=Priority\: 0 \= Blocked, 1 \= Highest, 3 \= Lowest
+label_attributes_defined_in_table=Label attributes defined in table
+label_class_properties=Label class properties
+label_expression=Label expression
+label_expression_editor=Label expression editor
+label_expression_help=
+label_features_in_the_same_way=Label features in the same way
+label_features_in_this_class=Label features in this class
+label_only_when_selected=Label only when the feature is selected
+label_priority=Label priority
+label_style_could_not_be_painted=
+label_styles=Label styles
+labeled_point=
+labeling=Labeling
+labeling_field=Labeling field
+layer_name=Layer name
+layer_Selector=Layer Selector
+line=Line
+line_fill=Line fill
+line_fill_symbol=Line fill symbol
+line_settings=Line settings
+lineal=Lineal
+lines=Lines
+location=Location
+location_along_the_lines=Location along the lines
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Looks like too low value for this field. May cause the system to run slow.
+low=Low
+malformed_or_empty_expression=Malformed or empty expression
+marker_fill=Marker fill
+marker_fill_symbol=Marker fill symbol
+marker_line=Marker line
+marker_line_symbol=Marker line symbol
+mas_de_100_simbolos=More than 100 symbols usually do not give any information in a map
+max_scale=Max. scale
+medium=Medium
+method=Method
+min_scale=Min. scale
+minimum_angle_to_draw=
+modify_filter_expression=Modify Filter Expression
+move_down=Move down
+move_up=Move up
+name=Name
+names_and_types_count_are_disctint=Names and types count are disctint
+new_filter_expression=New filter expression
+no=No
+no_expression_defined=No expression defined
+no_style=No Style
+no_symbol_especified=No symbol specified
+none=none
+normalization=Normalization
+not_save_empty_legend=Cannot save an empty legend.
+numeric_or_boolean_value=Numeric or boolean value
+numeric_value=Numeric value
+offset=Offset
+offset_label=Offset label
+offset_labels_horizontally=Offest labels horizontally around the point.
+offset_labels_on_top_of_the_points=Offset labels on top of the points
+on_the_line=On the line
+operand=Operand
+operation_not_allowed_for_SingleLabelingStrategy=Operation not allowed for Single Labeling Strategy
+operators=Operators
+options=Options
+orientation=Orientation
+orientation_system=Orientation system
+out_beyond=Out beyond
+outline=Outline
+outline_opacity=Outline opacity
+outline_width=Border width
+page=Page
+parallel=Parallel
+pattern=Pattern
+percentage=Percentage
+perpedicular=Perpendicular
+picture_file=Picture file
+picture_fill=Picture fill
+picture_fill_symbol=Picture fill symbol
+picture_line_symbol=Picture line symbol
+picture_marker=Picture marker
+picture_marker_symbol=Picture marker symbol
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Place one label per feature
+place_one_label_per_feature_part=Place one label per feature part
+placement=Placement
+placement_priorities_selector=Placement priorities selector
+placement_properties=Placement properties
+point_settings=Point settings
+points=Points
+polygon=Polygon
+polygon_settings=Polygon settings
+position=Position
+prefer_top_right_all_allowed=Preferable at the right top corner, but all positions are allowed
+preview=Preview
+preview_not_available=Preview is not available
+properties=Properties
+proportional_symbols=Proportional symbols
+quantity_by_category=Quantity by category
+quiere_continuar=Would you like to continue?
+Quitar=Remove
+Quitar_todos=Remove all
+random=Random
+recovering_recordset=Recovering recordset.
+rectangular=Rectangular
+remane_class=Rename class
+remove=Remove
+remove_duplicate_labels=Remove duplicate labels
+resto_valores=Other values
+rotation_height=Rotation field
+scale=Scale
+scale_range_window_title=Scale Range
+select=Select
+select_one_row=Select one row
+selection_picture_file=Selection picture file
+separation=Separation
+set_forbidden_precedence=Set forbidden precedence
+set_high_precedence=Set high precedence
+set_low_precedence=Set low precedence
+set_normal_precedence=Set normal precedence
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Shows the elements of the layer depending on the value of a filter expression
+simple_marker=Simple marker
+single_labeling=Single labeling
+single_labeling_setup=Single labeling setup
+size=Size
+SLD_grammar=SLD grammar
+some_arguments_are_incorrect=Some arguments are incorrect
+specify_the_range_of_scales_at_which_labels_will_be_shown=Specify the range of scales at which labels will be shown
+SQL_query=SQL query
+statistics=Statistics
+string_value=String value
+style=Style
+style_selector=Style Selector
+symbol=Symbol
+symbol_field=Symbol field
+symbol_shapetype_mismatch=
+syntax_error=Syntax error
+template=Template
+text=Text
+text_field=Text
+text_fields=Text fields
+text_height_field=Text height field
+text_string=Text
+text_symbol=Text symbol
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=The number of arguments is not correct
+the_result_is_not_a_boolean_value=The result is not a boolean value
+to=To
+Tools_Select=Tools select
+true=True
+units=Units
+URL=
+use_default_symbol=Default symbol
+use_outline=Use outline
+use_the_same_scale_range_as_the_feature_layer=Use the same scale range as the feature layer
+user_defined_labels=User defined labels
+usupported_layer_type=Unsupported layer type
+value=Value
+value_fields=Fields with values
+variation_by=Variation by
+verify=Verify
+visible=Visible
+visualization=Visualization
+warning=Warning
+width=Width
+x_offset=X offset
+y_offset=Y offset
+yes=Yes
+_Set_new_background_image=Set background image
+_Set_label_offset=Set label offset
+_Expressions_are_correct=Expressions are valid
+_Use_halo=Use halo
+_Halo_width=Halo width
+_There_are_N_expressions_N_are_empty_and_N_rectangles_Check_label_expressions_and_background_image_properties=There are {0} expressions ({1} are empty) and {2} rectangles. Check label expressions and background image properties.
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [gl]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=Ser\u00e1 utilizado un s\u00edmbolo por defecto
+above=Arriba
+accept=Aceptar
+accessing_file_structure=Accedendo \u00e1 estructura do arquivo
+add=Engadir
+add_class=Engadir clase
+add_expression=Engadir Expresi\u00f3n
+add_field=Engadir campo
+add_operator=Engadir Operador
+add_text_area=Engadir campo de texto
+all_features=Todos os elementos
+all_supported_background_image_formats=Todos os formatos de imaxe de fondo soportados
+allow_label_overlapping=Permitir superposici\u00f3n das etiquetas
+always_circular=
+always_horizontal=Sempre horizontal
+always_straight=Sempre vertical
+angle=\u00c1ngulo
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Aplicar correcci\u00f3n visual ao car\u00e1cter para precisi\u00f3n en tama\u00f1o e posici\u00f3n.
+arguments_added_to_a_costant=Argumento engadido a unha constante
+at_begin=Ao principio
+at_best=Na mellor
+at_end=Ao final
+at_fields=nos campos
+background=
+background_color=C\u00f3r de fondo
+background_style=Estilo do fondo
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Abaixo
+bitmap_and_svg_image_files=Imaxes SVG e de mapa de bits
+boolean_value=Valor booleano
+browse=Examinar
+buffered=Forma do pol\u00edgono
+cancel=Cancelar
+cannot_apply_to_a_non_polygon_layer=Non se pode aplicar a unha capa non poligonal
+cannot_be_null=Non pode ser nulo
+cannot_exist_two_label_classes_with_the_same_name=Non poden existir d\u00faas etiquetas co mesmo nome
+cannot_install_labeling_method=Non se pode instalar o m\u00e9todo de etiquetado
+cant_draw_preview=Non se pode dibuxar a previsualizaci\u00f3n
+change_location=Cambiar ubicaci\u00f3n
+character_marker=Marcador de car\u00e1cter
+character_marker_symbol=S\u00edmbolo de Marcador de car\u00e1cter
+choose_marker=Seleccionar marcador
+circular=Circular
+class=Clase
+classes=Clases
+classifying_field_name_not_found=Campo de clasificaci\u00f3n non atopado
+clear=Limpar
+color=Cor\:
+color_field=Campo de cores
+color_ramp=Rampa de cor
+confirmation_dialog=Di\u00e1logo de confirmaci\u00f3n
+constant=constante
+correct_expression=Expresi\u00f3n correcta
+could_not_get_shape_type=Non se pudo obter o tipo de xeometr\u00eda.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Non se pudo cargar a lenda
+date_value=Valor data
+default=Por defecto
+define_classes_of_features_and_label_each_differently=Definir diferentes clases de entidades e etiquetala de xeito diferente
+Defines_a_dot_density_symbol_based_on_a_field_value=Define unha lenda de densidade de puntos baseada no valor dun determinado campo.
+delete=Eliminar
+delete_class=Eliminar clase
+delete_filter_expression=Eliminar expresi\u00f3n de filtrado
+densities=Densidades
+depth_factor=
+description=Descripci\u00f3n
+divided_by_0=Divisi\u00f3n por 0
+dont_show_labels_when_zoomed=Non amosar as etiquetas cando se faga zoom
+dot_density=Densidade de puntos
+dot_size=Tama\u00f1o de punto
+dot_value=Valor do punto
+draw_quantities_for_each_category=Representa cantidades para cada categor\u00eda.
+draw_quantities_using_symbol_size_to_show_exact_values=Representa cantidades ao trav\u00e9s do tama\u00f1o do s\u00edmbolo amosando valores exactos
+draw_quantities_using_symbol_size_to_show_relative_values=Representa cantidades mediante o tama\u00f1o dun s\u00edmbolo amosando valores relativos.
+duplicate_labels=Etiquetas repetidas
+edit_expression=Editar expresi\u00f3n
+Enable_layer_preview=Activar previsualizaci\u00f3n da capa
+enter_new_name=Introduzca o novo nome
+error=Erro
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Filtro con formato incorrecto\: erro ao codificar
+error_trying_to_access_to_the_layer=Erro ao tentar acceder \u00e1 capa
+error_validating_filter_query=Erro ao validar a consulta SQL
+expression=Expresi\u00f3n
+expression_creator=Crear expresi\u00f3n de filtrado
+expressions=Expresi\u00f3ns
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Erro aplicando o etiquetado seguindo a li\u00f1a. Utilizarase a configuraci\u00f3n por defecto
+failed_computing_intervals=Erro ao calcular intervalos
+features=Obxectos
+field_number=N\u00famero de campo
+fields=Campos
+fields_exp=Campos
+fill_color=Cor de recheo
+fill_properties=Propiedade de recheo
+filter=Filtro
+filtered_features=Elementos filtrados
+fit_inside_polygon=Acoplar dentro do pol\u00edgono
+fit_on_text_area=Axustar o \u00e1rea de texto
+fixed_text_size=Tama\u00f1o fixo do texto
+following_line=Seguindo a li\u00f1a
+font=Fonte
+foreground_alpha=
+format=Formato
+from=Dende
+fuente=Fonte
+GeneralLabeling.sample_text=
+generating_intervals=A Xerar Intervalos
+getting_layer_shape_type=A obter o tipo de shape
+gradient_color=Cor gradente
+gradient_fill=Recheo gradente
+gradient_fill_symbol=S\u00edmbolo de recheo gradente
+graduated_symbols=S\u00edmbolos graduados
+grid=Grella
+high=Alta
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=Por baixo de
+in_layer=na capa
+in_the_middle=Na metade
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Expresi\u00f3n incorrecta
+intervals=Intervalos
+invalid_filter_expression=
+invalid_url=Localizador de servidor WFS con formato non v\u00e1lido.
+it_will_not_be_added=Non ser\u00e1 engadida
+label-point-priority-help=Prioridade\: 0 \= Bloqueado, 1 \= M\u00e1is alta, 3 \= M\u00e1is baixa
+label_class_properties=Propiedades da clase de etiquetado
+label_expression=Expresi\u00f3n de etiquetado
+label_expression_editor=Editor de expresi\u00f3ns de etiqueta
+label_expression_help=
+label_features_in_the_same_way=Etiquetar todas as entidades do mesmo xeito
+label_features_in_this_class=Etiquetar entidades dentro desta clase
+label_only_when_selected=Etiquetar soamente cando as s\u00faas entidades est\u00e9n seleccionadas
+label_priority=Prioridade no etiquetado
+label_style_could_not_be_painted=
+label_styles=Estilos de etiqueta
+labeled_point=
+labeling=Etiquetado
+labeling_field=Campo de etiquetado
+layer_name=Nome da capa
+line=Li\u00f1a
+line_fill=Encher li\u00f1as
+line_fill_symbol=S\u00edmbolo de recheo de li\u00f1as
+line_settings=Configuraci\u00f3n da li\u00f1a
+lineal=Lineal
+lines=Li\u00f1as
+location=Ubicaci\u00f3n
+location_along_the_lines=Ubicaci\u00f3n ao longo das li\u00f1as
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Parece un valor para o punto demasiado baixo, pode causar que o sistema responda de xeito lento.
+low=Baixa
+malformed_or_empty_expression=Expresi\u00f3n valeira ou err\u00f3nea
+marker_fill=Recheo de marcadores
+marker_fill_symbol=S\u00edmbolo de recheo de marcadores
+marker_line=Li\u00f1a de marcadores
+marker_line_symbol=S\u00edmbolo de Li\u00f1a de marcadores
+mas_de_100_simbolos=M\u00e1is de 100 s\u00edmbolos non adoitan aportar informaci\u00f3n nun plano
+max_scale=Escala m\u00e1xima
+medium=Media
+method=Operaci\u00f3n
+min_scale=Escala m\u00ednima
+minimum_angle_to_draw=
+modify_filter_expression=Modificar expresi\u00f3n de filtrado
+move_down=Baixar
+move_up=Subir
+name=Nome
+names_and_types_count_are_disctint=N\u00famero de campos e n\u00famero de tipos de campos distintos
+new_filter_expression=Nova expresi\u00f3n de filtrado
+no=Non
+no_expression_defined=Expresi\u00f3n non definida
+no_style=Sen estilo
+no_symbol_especified=S\u00edmbolo non especificado
+none=Nada
+normalization=Normalizaci\u00f3n
+not_save_empty_legend=Lenda vac\u00eda, non se gardar\u00e1.
+numeric_value=Valor num\u00e9rico
+offset=Desprazamento
+offset_label=Desprazar etiqueta
+offset_labels_horizontally=Desprazar etiquetas horizontalmente ao redor do punto
+offset_labels_on_top_of_the_points=Situar etiquetas sobre os puntos.
+on_the_line=Sobre a li\u00f1a
+operators=Operadores
+options=Opci\u00f3ns
+orientation=Orientaci\u00f3n
+orientation_system=Orientaci\u00f3n
+out_beyond=Por riba de
+outline=Marxe
+outline_opacity=Opacidade da marxe
+outline_width=Ancho da marxe
+page=P\u00e1xina
+parallel=Paralela
+pattern=Patr\u00f3n
+percentage=Porcentaxe
+perpedicular=Perpendicular
+picture_file=Arquivo imaxe
+picture_fill=Recheo de imaxe
+picture_fill_symbol=S\u00edmbolo de recheo de imaxe
+picture_line_symbol=S\u00edmbolo de li\u00f1a de imaxe
+picture_marker=Marcador de imaxe
+picture_marker_symbol=S\u00edmbolo de marcador de imaxe
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Situar unha \u00fanica etiqueta por entidade
+place_one_label_per_feature_part=Situar unha etiqueta por cada parte da entidade
+placement=Ubicaci\u00f3n
+placement_priorities_selector=Selector de prioridades de ubicaci\u00f3n
+placement_properties=Propiedades de ubicaci\u00f3n
+point_settings=Configuraci\u00f3n de punto
+points=Puntos
+polygon=Pol\u00edgono
+polygon_settings=Configuraci\u00f3n de pol\u00edgono
+position=Posici\u00f3n
+prefer_top_right_all_allowed=Preferentemente arriba \u00e1 dereita, pero permitindo calquer ubicaci\u00f3n
+preview=Previsualizaci\u00f3n
+preview_not_available=Vista previa non dispo\u00f1ible
+properties=Propiedades
+proportional_symbols=S\u00edmbolos proporcionais
+quantity_by_category=Cantidades por categor\u00eda
+quiere_continuar=Est\u00e1 seguro de que quere continuar?
+Quitar=Quitar
+Quitar_todos=Quitar todos
+random=Aleatorio
+recovering_recordset=A recuperar recordset
+rectangular=Rectangular
+remane_class=Renomear clase
+remove=Quitar
+remove_duplicate_labels=Eliminar etiquetas repetidas
+resto_valores=Resto de valores
+scale=Escalar
+scale_range_window_title=Rango de escalas
+select=Seleccionar
+select_one_row=Seleccione unha fila
+selection_picture_file=Imaxe de selecci\u00f3n
+separation=Separaci\u00f3n
+set_forbidden_precedence=Establecer precedencia nula
+set_high_precedence=Establecer m\u00e1xima precedencia
+set_low_precedence=Establecer baixa precedencia
+set_normal_precedence=Establecer precedencia normal
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Amosa os elementos da capa en funci\u00f3n dunha determinada expresi\u00f3n de filtrado
+size=Tama\u00f1o
+SLD_grammar=Gram\u00e1tica SLD
+some_arguments_are_incorrect=Alg\u00fans comentarios son incorrectos
+specify_the_range_of_scales_at_which_labels_will_be_shown=Especificar o rango de escalas no que as etiquetas ser\u00e1n amosadas
+SQL_query=Sentencia SQL
+statistics=Estat\u00edsticas
+string_value=Valor String
+style=Estilo
+style_selector=Selector de estilos
+symbol=S\u00edmbolo
+symbol_field=Campo de s\u00edmbolo graduado
+symbol_shapetype_mismatch=
+syntax_error=Erro de sintaxis
+template=Patr\u00f3n
+text=Texto
+text_field=Texto
+text_fields=Campos de texto
+text_string=Texto
+text_symbol=S\u00edmbolo de texto
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=O n\u00famero de argumentos non \u00e9 correcto
+the_result_is_not_a_boolean_value=O resultado non \u00e9 un boolean
+to=Hata
+URL=
+use_outline=Usar borde
+use_the_same_scale_range_as_the_feature_layer=Usar o mesmo rango de escalas que o elemento da capa
+user_defined_labels=Etiquetas definidas polo usuario
+usupported_layer_type=Tipo de capa non soportado
+value=Valor
+value_fields=Campos de valores
+variation_by=Variaci\u00f3n por
+verify=Verificar
+visible=Visible
+visualization=Visualizaci\u00f3n
+warning=Aviso
+width=Ancho
+x_offset=Desprazamento en X
+y_offset=Desprazamento en Y
+yes=Si
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [cs]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=
+above=
+accept=Budi\u017e
+accessing_file_structure=
+add=P\u0159idat
+add_class=
+add_expression=
+add_field=P\u0159idej atribut
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=Barva pozad\u00ed
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=Boolean hodnota
+browse=Vyhledej
+buffered=
+cancel=Zru\u0161it
+cannot_apply_to_a_non_polygon_layer=
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=
+character_marker_symbol=
+choose_marker=
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=Vy\u010distit
+color=Barva\:
+color_field=
+color_ramp=
+confirmation_dialog=
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=
+date_value=Datum
+default=Implicitn\u00ed
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=
+delete=
+delete_class=
+delete_filter_expression=
+densities=
+depth_factor=
+description=Popis
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=
+dot_size=
+dot_value=
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=Error
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=V\u00fdraz
+expression_creator=
+expressions=V\u00fdrazy
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=
+fields_exp=
+fill_color=
+fill_properties=
+filter=Filtr
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=Form\u00e1t
+from=Od
+fuente=P\u00edsmo
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=
+high=
+horizontal=Horizont\u00e1ln\u00ed
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=N\u00e1zev vrstvy
+line=Line
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=
+malformed_or_empty_expression=
+marker_fill=
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=V\u00edce ne\u017e 100 symbol\u016f obvykle nevn\u00e1\u0161\u00ed do mapy \u017e\u00e1dn\u00e9 informace
+max_scale=Maxim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+medium=
+method=
+min_scale=Minim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=Jm\u00e9no
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=No
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=\u017e\u00e1dn\u00e9
+normalization=
+not_save_empty_legend=
+numeric_value=\u010c\u00edseln\u00e1 hodnota
+offset=
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=Mo\u017enosti
+orientation=
+orientation_system=
+out_beyond=
+outline=Osnova
+outline_opacity=
+outline_width=
+page=Strana
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=Polygon
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=
+preview_not_available=
+properties=Vlastnosti
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=Chcete pokra\u010dovat?
+Quitar=Odstranit
+Quitar_todos=Odstranit v\u0161e
+random=
+recovering_recordset=
+rectangular=
+remane_class=
+remove=Odstranit
+remove_duplicate_labels=
+resto_valores=Ostatn\u00ed hodnoty
+scale=M\u011b\u0159\u00edtko
+scale_range_window_title=
+select=Vyber
+select_one_row=
+selection_picture_file=
+separation=
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=Velikost
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=Statistika
+string_value=Hodnota \u0159et\u011bzce
+style=Styl
+style_selector=
+symbol=
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=Text
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=Do
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=Hodnota
+value_fields=
+variation_by=
+verify=
+visible=Viditeln\u00fd
+visualization=
+warning=Varov\u00e1n\u00ed
+width=Ampl\u00e0ria
+x_offset=
+y_offset=
+yes=Ano
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pt_BR.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pt_BR.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pt_BR.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [pt_BR]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=S\u00edmbolo utilizado por padr\u00e3o.
+above=Acima
+accept=Aceitar
+accessing_file_structure=Acessando estrutura do arquivo
+add=Adicionar
+add_class=Adicionar classe
+add_expression=Adicionar express\u00e3o
+add_field=Adicionar campo
+add_operator=Adicionar operador
+add_text_area=Adicionar campo de texto
+all_features=Todas as caracter\u00edsticas
+all_supported_background_image_formats=Todos os formatos de imagem suportados
+allow_label_overlapping=Permitir sobreposi\u00e7\u00e3o de r\u00f3tulos
+always_circular=
+always_horizontal=Sempre horizontal
+always_straight=Sempre reto
+angle=\u00c2ngulo
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Aplique a corre\u00e7\u00e3o visual para ter precis\u00e3o no tamanho e posi\u00e7\u00e3o 
+arguments_added_to_a_costant=Argumento inserido na mesma constante.
+at_begin=Ao principio
+at_best=Ao melhor
+at_end=Ao final
+at_fields=nos campos
+background=
+background_color=Cor de fundo
+background_style=Estilo de fundo
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Abaixo
+bitmap_and_svg_image_files=Arquivos de imagem Bitmaps e SVG
+boolean_value=Valor booleano
+browse=Procurar
+buffered=Forma do pol\u00edgono
+cancel=Cancelar
+cannot_apply_to_a_non_polygon_layer=N\u00e3o \u00e9 possivel aplicar em um plano de informa\u00e7\u00e3o que n\u00e3o seja poligonal
+cannot_be_null=N\u00e3o pode ser nulo
+cannot_exist_two_label_classes_with_the_same_name=N\u00e3o pode existir duas etiquetas com o mesmo nome
+cannot_install_labeling_method=N\u00e3o \u00e9 possivel instalar o m\u00e9todo de etiqueta
+cant_draw_preview=N\u00e3o \u00e9 possivel visualizar
+change_location=Alterar localiza\u00e7\u00e3o
+character_marker=Marcador de car\u00e1cter
+character_marker_symbol=S\u00edmbolo do Marcador de car\u00e1cter
+choose_marker=Selecionar marcador
+circular=Circular
+class=Classe
+classes=Classes
+classifying_field_name_not_found=Campo de classifica\u00e7\u00e3o n\u00e3o encontrado
+clear=Limpar
+color=Cor\:
+color_field=Campo de cores
+color_ramp=Rampa de cor
+confirmation_dialog=Di\u00e1logo de configura\u00e7\u00e3o
+constant=constante
+correct_expression=Express\u00e3o correta
+could_not_get_shape_type=N\u00e3o \u00e9 possivel obter o tipo de geometria.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=N\u00e3o \u00e9 poss\u00edvel carregar a legenda.
+date_value=Valor da data
+default=Padr\u00e3o
+define_classes_of_features_and_label_each_differently=Definir diferentes classes de entidades e etiqueta-las de maneira diferente
+Defines_a_dot_density_symbol_based_on_a_field_value=Define uma lejenda de densidade de pontos baseada no valor de um determinado campo.
+delete=Apagar
+delete_class=Apagar classe
+delete_filter_expression=Apagar expre\u00e7\u00e3o filtrada
+densities=Densidades
+depth_factor=
+description=Descri\u00e7\u00e3o
+divided_by_0=Divis\u00e3o por 0
+dont_show_labels_when_zoomed=N\u00e3o mostrar as etiquetas quando dar o zoom
+dot_density=Densidade de pontos
+dot_size=Tamanho do ponto
+dot_value=Valor do ponto
+draw_quantities_for_each_category=Representar quantidades para cada categoria.
+draw_quantities_using_symbol_size_to_show_exact_values=Representa quantidade atrav\u00e9s do tamanho do s\u00edmbolo mostrando valores exatos.
+draw_quantities_using_symbol_size_to_show_relative_values=Representar quantidades mediante o tamanho de um s\u00edmbolo mostrando valores relativos.
+duplicate_labels=Etiquetas repetidas
+edit_expression=Editar express\u00e3o
+Enable_layer_preview=Ativar pr\u00e9-visualiza\u00e7\u00e3o do plano de informa\u00e7\u00e3o
+enter_new_name=Entre com o novo nome
+error=Erro
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Erro codificando a consulta SQL.
+error_trying_to_access_to_the_layer=Erro tentando acessar o plano de informa\u00e7\u00e3o.
+error_validating_filter_query=Erro validando a consulta SQL
+expression=Express\u00e3o
+expression_creator=Criador de express\u00e3o
+expressions=Express\u00f5es
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Falha aplicando etiqueta seguindo a linha. Foi utilizada a configura\u00e7\u00e3o padr\u00e3o.
+failed_computing_intervals=Falha calculando intervalos.
+features=Objetos
+field_number=N\u00famero do campo
+fields=Campos
+fields_exp=Campos
+fill_color=Cor de preenchimento
+fill_properties=Propriedades do preenchimento
+filter=Filtro
+filtered_features=Elementos filtrados
+fit_inside_polygon=Acoplar dentro do pol\u00edgono
+fit_on_text_area=Ajustar a \u00e1rea do texto
+fixed_text_size=Tamanho fixo do texto
+following_line=Seguindo a linha
+font=Fontes
+foreground_alpha=
+format=Formato
+from=De
+fuente=Fonte
+GeneralLabeling.sample_text=
+generating_intervals=Gerando intervalos
+getting_layer_shape_type=Obtendo o tipo de shape
+gradient_color=Cor gradiente
+gradient_fill=Preenchimento gradiente
+gradient_fill_symbol=S\u00edmbolo de preenchimento gradiente
+graduated_symbols=S\u00edmbolos graduados
+grid=Grade
+high=Alta
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=Por baixo de
+in_layer=no plano de informa\u00e7\u00e3o
+in_the_middle=No meio
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Express\u00e3o incorreta
+intervals=Intervalos
+invalid_filter_expression=
+invalid_url=Localizador de servidor WFS com formato inv\u00e1lido
+it_will_not_be_added=N\u00e3o ser\u00e1 inser\u00edda.
+label-point-priority-help=Prioridade\: 0 \= Bloqueado, 1 \= Mais alta, 3 \= Mais baixa
+label_class_properties=Propriedade da classe de etiquetas
+label_expression=Express\u00e3o de etiquetas
+label_expression_editor=Editor de express\u00e3o de etiqueta
+label_expression_help=
+label_features_in_the_same_way=Etiquetar todas as entidades da mesma maneira
+label_features_in_this_class=Etiquetar entidades dentro desta classe
+label_only_when_selected=Etiquetar somente quando suas entidades estejam selecioandas
+label_priority=Prioridade da etiqueta
+label_style_could_not_be_painted=
+label_styles=Estilo de etiqueta
+labeled_point=
+labeling=Etiquetando
+labeling_field=Campo de etiquetado
+layer_name=Nome do Plano de informa\u00e7\u00e3o
+line=Linha
+line_fill=Preenchimento da linha
+line_fill_symbol=S\u00edmbolo de preenchimento da linha
+line_settings=Configura\u00e7\u00e3o da linha
+lineal=Linear
+lines=Linhas
+location=Localiza\u00e7\u00e3o
+location_along_the_lines=Localizador de acordo com as linhas
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Parece um valor para o ponto muito baixo, pode ocorrer que o sistema responda lentamente.
+low=Baixo
+malformed_or_empty_expression=Express\u00e3o vazia ou errada
+marker_fill=Preenchimento de marcadores
+marker_fill_symbol=S\u00edmbolo de preenchimento de marcadores
+marker_line=Linah de marcadores.
+marker_line_symbol=S\u00edmbolo de linha de marcadores.
+mas_de_100_simbolos=Mais de 100 s\u00edmbolos n\u00e3o contribuem para uma clara informa\u00e7\u00e3o de um mapa.
+max_scale=Escala m\u00e1xima
+medium=M\u00e9dia
+method=Opera\u00e7\u00e3o
+min_scale=Escala m\u00ednima
+minimum_angle_to_draw=
+modify_filter_expression=Modificar filtro de express\u00e3o 
+move_down=Mover para cima.
+move_up=Subir
+name=Nome
+names_and_types_count_are_disctint=N\u00famero de campos e n\u00famero de tipos de campos distintos
+new_filter_expression=Novo filtro de express\u00e3o
+no=N\u00e3o
+no_expression_defined=Express\u00e3o n\u00e3o definida
+no_style=Sem est\u00edlo
+no_symbol_especified=S\u00edmbolo n\u00e3o especificado
+none=Nenhum
+normalization=Normaliza\u00e7\u00e3o
+not_save_empty_legend=Legenda vaz\u00eda n\u00e3o ser\u00e1 salva.
+numeric_value=Valor num\u00e9rico
+offset=Deslocamento
+offset_label=Deslocar etiqueta
+offset_labels_horizontally=Deslocar etiquetas horizontalmente ao redor do ponto
+offset_labels_on_top_of_the_points=Situar etiqueta sobre os pontos.
+on_the_line=Sobre a linha
+operators=Operadores
+options=Op\u00e7\u00f5es
+orientation=Orienta\u00e7\u00e3o
+orientation_system=Sistema de orienta\u00e7\u00e3o
+out_beyond=Por cima de
+outline=Borda
+outline_opacity=Opacidade da borda
+outline_width=Largura da borda
+page=P\u00e1gina
+parallel=Paralela
+pattern=Padr\u00e3o
+percentage=Porcentagem
+perpedicular=Perpendicular
+picture_file=Arquivo de imagem
+picture_fill=Preencher imagem
+picture_fill_symbol=S\u00edmbolo de preenchimento de imagem
+picture_line_symbol=S\u00edmbolo de linha de imagem
+picture_marker=Marcador de imagem
+picture_marker_symbol=S\u00edmbolo de marcador de imagem
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Situar unicamente uma etiqueta por entidade
+place_one_label_per_feature_part=Situar uma etiqueta a cada parte da entidade
+placement=Coloca\u00e7\u00e3o
+placement_priorities_selector=Seletor de propriedades de coloca\u00e7\u00e3o
+placement_properties=Propriedades de coloca\u00e7\u00e3o
+point_settings=Configura\u00e7\u00e3o de ponto
+points=Pontos
+polygon=Pol\u00edgono
+polygon_settings=Configura\u00e7\u00e3o do pol\u00edgono
+position=Posi\u00e7\u00e3o
+prefer_top_right_all_allowed=Preferencialmente encima a direita, por\u00e9m permitindo qualquer posi\u00e7\u00e3o
+preview=Previsualiza\u00e7\u00e3o
+preview_not_available=Pr\u00e9visualiza\u00e7\u00e3o n\u00e3o dispon\u00edvel
+properties=Propriedades
+proportional_symbols=S\u00edmbolos proporcionais
+quantity_by_category=Quantidades por categoria
+quiere_continuar=Tem certeza de que quer continuar?
+Quitar=Remover
+Quitar_todos=Remover tudo
+random=Aleat\u00f3rio
+recovering_recordset=Recuperando recordset
+rectangular=Ret\u00e2ngular
+remane_class=Renomear classe
+remove=Remover
+remove_duplicate_labels=Apagar etiquetas repetidas
+resto_valores=Resto de valores
+scale=Escala
+scale_range_window_title=Gama de escalas
+select=Selecioanr
+select_one_row=Selecione uma linha
+selection_picture_file=Imagem de sele\u00e7\u00e3o
+separation=Separa\u00e7\u00e3o
+set_forbidden_precedence=Estabelecer preced\u00eancia nula
+set_high_precedence=Estabelecer m\u00e1xima preced\u00eancia
+set_low_precedence=Estabelecer baixa prioridade
+set_normal_precedence=Estabelecer proced\u00eancia normal
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Mostra os elementos do plano de informa\u00e7\u00e3o em fun\u00e7\u00e3o de um determinado filtro de expre\u00e7\u00e3o
+size=Tamanho
+SLD_grammar=Gram\u00e1tica SLD
+some_arguments_are_incorrect=Alguns argumentos s\u00e3o incorretos.
+specify_the_range_of_scales_at_which_labels_will_be_shown=Especifique o intervalo de escalas em que os r\u00f3tulos ser\u00e3o mostrados
+SQL_query=Consulta SQL
+statistics=Estat\u00edsticas
+string_value=Valor String
+style=Estilo
+style_selector=Seletor de estilos
+symbol=S\u00edmbolo
+symbol_field=Campo de s\u00edmbolo graduado
+symbol_shapetype_mismatch=
+syntax_error=Erro de sintaxe
+template=Modelo
+text=Texto
+text_field=Texto
+text_fields=Campos de texto
+text_string=Texto
+text_symbol=S\u00edmbolo do texto
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=O n\u00famero de argumentos n\u00e3o \u00e9 correto
+the_result_is_not_a_boolean_value=O resultado n\u00e3o \u00e9 um boolean
+to=At\u00e9
+URL=
+use_outline=Usar borda
+use_the_same_scale_range_as_the_feature_layer=Usar a mesma gama de escalas que o elemento do plano de informa\u00e7\u00e3o
+user_defined_labels=Etiquetas definidas pelo usu\u00e1rio
+usupported_layer_type=Tipo de plano de informa\u00e7\u00e3o n\u00e3o suportado
+value=Valor
+value_fields=Campos de valores
+variation_by=Varia\u00e7\u00e3o por
+verify=Verificar
+visible=Vis\u00edvel
+visualization=Visualiza\u00e7\u00e3o
+warning=Aviso
+width=Largura
+x_offset=Deslocamento em X
+y_offset=Deslocamento em Y
+yes=Sim
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [fr]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=Un symbole par d\u00e9faut sera utilis\u00e9.
+above=Haut
+accept=Accepter
+accessing_file_structure=Acc\u00e8s \u00e0 la structure du fichier en cours...
+add=Ajouter
+add_class=Ajouter classe
+add_expression=Ajouter expression
+add_field=Ajouter une colone
+add_operator=Ajouter op\u00e9rateur
+add_text_area=Ajouter une zone de texte
+all_features=Tous les \u00e9l\u00e9ments
+all_supported_background_image_formats=Tous les formats d'images de fond sont support\u00e9s.
+allow_label_overlapping=Permettre la superposition des \u00e9tiquettes
+always_circular=
+always_horizontal=Toujours horizontal
+always_straight=Toujours rectiligne
+angle=Angle
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Appliquer une correction au caract\u00e8re pour visualiser la taille et la position.
+arguments_added_to_a_costant=Arguments ajout\u00e9s \u00e0 une constante.
+at_begin=Au d\u00e9but
+at_best=Au mieux
+at_end=A la fin
+at_fields=aux champs
+background=Arri\u00e8re plan \:
+background_color=Couleur d'arri\u00e8re plan
+background_style=Style d'arri\u00e8re-plan
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Sous
+bitmap_and_svg_image_files=Fichiers images Bitmap et SVG
+boolean_value=Valeur bool\u00e9enne
+browse=Parcourir
+buffered=Comme tampon
+cancel=Annuler
+cannot_apply_to_a_non_polygon_layer=Ne peut pas s'appliquer \u00e0 une couche non polygone
+cannot_be_null=Ne peut pas \u00eatre nul
+cannot_exist_two_label_classes_with_the_same_name=Il ne peut pas y avoir deux classes d'\u00e9tiquettes portant le m\u00eame nom
+cannot_install_labeling_method=Impossible d'installer la m\u00e9thode d'\u00e9tiquettes
+cant_draw_preview=Impossible de g\u00e9n\u00e9rer l'aper\u00e7u.
+change_location=Changer la localisation
+character_marker=Ponctuel caract\u00e8re
+character_marker_symbol=Ponctuel caract\u00e8re
+choose_marker=S\u00e9lectionner symbole...
+circular=Circulaire
+class=Classe
+classes=Classes
+classifying_field_name_not_found=Champ de classification non trouv\u00e9
+clear=Effacer
+color=Couleur \:
+color_field=Champ couleur
+color_ramp=D\u00e9grad\u00e9 de couleurs
+confirmation_dialog=Demande de confirmation
+constant=constante
+correct_expression=Expression correcte
+could_not_get_shape_type=Impossible de d\u00e9terminer le type d'objet.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Impossible de param\u00e9trer la l\u00e9gende
+date_value=Valeur de date
+default=Par d\u00e9faut
+define_classes_of_features_and_label_each_differently=Etiqueter par classes d'entit\u00e9s
+Defines_a_dot_density_symbol_based_on_a_field_value=D\u00e9finir un symbole de densit\u00e9 de points sur le contenu d'un champ
+delete=Supprimer
+delete_class=Supprimer classe
+delete_filter_expression=Effacer l'expression du filtre
+densities=Densit\u00e9s
+depth_factor=
+description=Description
+divided_by_0=Division par 0
+dont_show_labels_when_zoomed=Ne pas afficher les \u00e9tiquettes apr\u00e8s zoom
+dot_density=Densit\u00e9 de points
+dot_size=Taille du point
+dot_value=Valeur du point
+draw_quantities_for_each_category=Repr\u00e9sente les valeurs quantitatives de deux champs ind\u00e9pendants par des couleurs et/ou styles diff\u00e9rents.
+draw_quantities_using_symbol_size_to_show_exact_values=Repr\u00e9sente les quantit\u00e9s en utilisant une taille de symbole diff\u00e9rente pour afficher les valeurs exactes.
+draw_quantities_using_symbol_size_to_show_relative_values=Repr\u00e9sente les quantit\u00e9s en utilisant une taille de symbole diff\u00e9rente pour afficher les valeurs absolues.
+duplicate_labels=Etiquettes doublons
+edit_expression=Editer expression
+Enable_layer_preview=Activer aper\u00e7u de couche
+enter_new_name=Saisir un nouveau nom
+error=Erreur
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Erreur de codification dans la requ\u00eate du filtre
+error_trying_to_access_to_the_layer=Erreur lors de l'acc\u00e8s \u00e0 la couche
+error_validating_filter_query=Erreur lors de la validation de la requ\u00eate de filtre
+expression=Expression
+expression_creator=Cr\u00e9er une expression de filtre
+expressions=Expressions
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Echec lors de l'application de l'"\u00e9tiquetage suivant la ligne". Le mode d'\u00e9tiquetage par d\u00e9faut sera utilis\u00e9.
+failed_computing_intervals=Echec lors du calcul des intervalles.
+features=Entit\u00e9s
+field_number=Num\u00e9ro du champ
+fields=Champs
+fields_exp=Champs
+fill_color=Remplissage
+fill_properties=Propri\u00e9t\u00e9s de remplissage
+filter=Filtre
+filtered_features=El\u00e9ments filtr\u00e9s
+fit_inside_polygon=Ajuster \u00e0 l'int\u00e9rieur du polygone
+fit_on_text_area=Ajuster \u00e0 la zone de texte
+fixed_text_size=Taille fixe du texte
+following_line=Suivant la ligne
+font=Police
+foreground_alpha=
+format=Format
+from=Depuis
+fuente=Fonte
+GeneralLabeling.sample_text=
+generating_intervals=Cr\u00e9ation d'intervalles
+getting_layer_shape_type=R\u00e9cup\u00e9rer le type de shape
+gradient_color=D\u00e9grad\u00e9 de couleurs
+gradient_fill=Remplissage par d\u00e9grad\u00e9
+gradient_fill_symbol=Remplissage par d\u00e9grad\u00e9
+graduated_symbols=Symboles gradu\u00e9s
+grid=Grille
+high=Haute
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=En de\u00e7\u00e0
+in_layer=dans la couche
+in_the_middle=Au centre
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Expression incorrecte
+intervals=Intervalles
+invalid_filter_expression=
+invalid_url=L'adresse url du serveur WFS n'est pas valide.
+it_will_not_be_added=Ne sera pas ajout\u00e9
+label-point-priority-help=Priorit\u00e9 \: 0 \= bloqu\u00e9, 1 \= la plus haute, 3 \= la plus basse
+label_class_properties=Propri\u00e9t\u00e9s de la classe d'\u00e9tiquettes
+label_expression=Expression de l'\u00e9tiquette
+label_expression_editor=Editeur d'expression d'\u00e9tiquettes
+label_expression_help=
+label_features_in_the_same_way=Etiqueter toutes les entit\u00e9s de la m\u00eame mani\u00e8re
+label_features_in_this_class=Etiqueter des entit\u00e9s dans cette classe \:
+label_only_when_selected=Etiqueter uniquement  les entit\u00e9s s\u00e9lectionn\u00e9es
+label_priority=Priorit\u00e9 des \u00e9tiquettes
+label_style_could_not_be_painted=
+label_styles=Styles d'\u00e9tiquette
+labeled_point=
+labeling=Etiquetage
+labeling_field=Champ d'\u00e9tiquetage
+layer_name=Nom de la couche
+line=Ligne
+line_fill=Remplissage par lignes
+line_fill_symbol=Remplissage par lignes
+line_settings=Configuration de lignes
+lineal=Ligne directe
+lines=Lignes
+location=Localisation
+location_along_the_lines=Localisation le long des lignes
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Il semble que l'une des valeurs du champ est trop basse. Ceci peut provoquer un ralentissement du syst\u00e8me.
+low=Bas
+malformed_or_empty_expression=Expression vide ou erron\u00e9e
+marker_fill=Remplissage
+marker_fill_symbol=Remplissage symboles multiples
+marker_line=Ligne en ponctuel
+marker_line_symbol=Ponctuel de lignes
+mas_de_100_simbolos=Plus de 100 symboles n'apportent plus d'information dans un plan
+max_scale=Echelle maxi
+medium=Moyenne
+method=Op\u00e9ration
+min_scale=Echelle mini
+minimum_angle_to_draw=
+modify_filter_expression=Modifier filtre...
+move_down=Descendre
+move_up=Monter
+name=Nom
+names_and_types_count_are_disctint=Le nom du champ et le  type de champ sont diff\u00e9rents
+new_filter_expression=Nouveau filtre...
+no=Non
+no_expression_defined=Aucune expression d\u00e9finie
+no_style=Aucun style
+no_symbol_especified=Aucun symbole sp\u00e9cifi\u00e9
+none=Aucun
+normalization=Normalisation
+not_save_empty_legend=Il n'est pas possible de sauvegarder une l\u00e9gende vide
+numeric_value=Valeur num\u00e9rique
+offset=D\u00e9placement
+offset_label=D\u00e9placer \u00e9tiquette
+offset_labels_horizontally=D\u00e9placer \u00e9tiquettes horizontalement.
+offset_labels_on_top_of_the_points=D\u00e9placer \u00e9tiquettes au dessus des points.
+on_the_line=Sur la ligne
+operators=Op\u00e9rateurs
+options=Options
+orientation=Orientation
+orientation_system=Orientation
+out_beyond=Au-del\u00e0
+outline=Contour
+outline_opacity=Transparence contour
+outline_width=Largeur contour
+page=Page
+parallel=Parall\u00e8le
+pattern=Mod\u00e8le
+percentage=Pourcentage
+perpedicular=Perpendiculaire
+picture_file=Image
+picture_fill=Remplissage par image
+picture_fill_symbol=Remplissage par image
+picture_line_symbol=Ligne en image
+picture_marker=Image
+picture_marker_symbol=Ponctuel image
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Placer une seule \u00e9tiquette par objet
+place_one_label_per_feature_part=Placer une \u00e9tiquette pour chaque partie de l'objet
+placement=Mise en place
+placement_priorities_selector=S\u00e9lectionner la position prioritaire
+placement_properties=Propri\u00e9t\u00e9s de mise en place
+point_settings=Param\u00e8tres de point
+points=Points
+polygon=Polygone
+polygon_settings=Param\u00e8tres de polygone
+position=Position
+prefer_top_right_all_allowed=De pr\u00e9f\u00e9rence dans le coin en haut, \u00e0 droite, mais tous les autres positionnement sont autoris\u00e9s.
+preview=Aper\u00e7u
+preview_not_available=Aper\u00e7u non disponible
+properties=Propri\u00e9t\u00e9s
+proportional_symbols=Symboles proportionnels
+quantity_by_category=Quantit\u00e9 par cat\u00e9gorie
+quiere_continuar=S\u00fbr de vouloir continuer?
+Quitar=Retirer
+Quitar_todos=Tout retirer
+random=Al\u00e9atoire
+recovering_recordset=R\u00e9cup\u00e9ration du jeu d'enregistrements
+rectangular=Rectangulaire
+remane_class=Renommer la classe
+remove=Retirer
+remove_duplicate_labels=Supprimer les \u00e9tiquettes en doublons
+resto_valores=Autres valeurs
+scale=Echelle
+scale_range_window_title=Plage d'\u00e9chelle
+select=S\u00e9lectionner
+select_one_row=S\u00e9lectionner une colonne
+selection_picture_file=S\u00e9lection
+separation=S\u00e9paration
+set_forbidden_precedence=D\u00e9finir priorit\u00e9 nulle
+set_high_precedence=D\u00e9finir priorit\u00e9 haute
+set_low_precedence=D\u00e9finir priorit\u00e9 basse
+set_normal_precedence=D\u00e9finir priorit\u00e9 normale
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=A partir du r\u00e9sultat d'une requ\u00eate filtre, les entit\u00e9ts sont repr\u00e9sent\u00e9es en utilisant une couleur et/ou un style diff\u00e9rent.
+size=Taille
+SLD_grammar=Grammaire SLD
+some_arguments_are_incorrect=Certains arguments sont incorrects
+specify_the_range_of_scales_at_which_labels_will_be_shown=Sp\u00e9cifie une plage de valeurs d'\u00e9chelles pour l'affichage des \u00e9tiquettes
+SQL_query=Requ\u00eate SQL
+statistics=Statistiques
+string_value=Valeur
+style=Style
+style_selector=S\u00e9lecteur de style
+symbol=Symbole
+symbol_field=Champ de symbole
+symbol_shapetype_mismatch=
+syntax_error=Erreur de syntaxe
+template=Mod\u00e8le
+text=Texte
+text_field=Texte
+text_fields=Champs texte
+text_string=Texte
+text_symbol=Symbole text
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=Le nombre d'arguments est incorrect
+the_result_is_not_a_boolean_value=Le r\u00e9sultat n'est pas une valeur bool\u00e9enne
+to=Jusqu'\u00e0
+URL=
+use_outline=Utiliser cadre
+use_the_same_scale_range_as_the_feature_layer=Utiliser le m\u00eame intervalle d'\u00e9chelles que les \u00e9l\u00e9ments de la couche
+user_defined_labels=Etiquettes personnalis\u00e9es
+usupported_layer_type=Type de couche non support\u00e9e
+value=Valeur
+value_fields=Champs contenant les valeurs
+variation_by=Variation par
+verify=V\u00e9rifier
+visible=Visible
+visualization=Niveau d'\u00e9chelle
+warning=Attention
+width=Largeur
+x_offset=D\u00e9calage en X
+y_offset=D\u00e9calage en Y
+yes=Oui
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_nl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_nl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_nl.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [nl]
+#Tue Aug 11 10:49:15 CEST 2009
+a_default_symbol_will_be_used=
+above=
+accept=
+accessing_file_structure=
+add=
+add_class=
+add_expression=
+add_field=
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=
+browse=
+buffered=
+cancel=Afbreken
+cannot_apply_to_a_non_polygon_layer=
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=
+character_marker_symbol=
+choose_marker=
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=
+color=
+color_field=
+color_ramp=
+confirmation_dialog=
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=
+date_value=
+default=
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=
+delete=
+delete_class=
+delete_filter_expression=
+densities=
+depth_factor=
+description=
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=
+dot_size=
+dot_value=
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=
+expression_creator=
+expressions=
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=
+fields_exp=
+fill_color=
+fill_properties=
+filter=
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=
+from=
+fuente=
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=
+high=
+horizontal=
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=
+line=
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=
+malformed_or_empty_expression=
+marker_fill=
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=
+max_scale=
+medium=
+method=
+min_scale=
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=
+normalization=
+not_save_empty_legend=
+numeric_value=
+offset=
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=
+orientation=
+orientation_system=
+out_beyond=
+outline=
+outline_opacity=
+outline_width=
+page=
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=
+preview_not_available=
+properties=
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=
+Quitar=
+Quitar_todos=
+random=
+recovering_recordset=
+rectangular=
+remane_class=
+remove=
+remove_duplicate_labels=
+resto_valores=
+scale=
+scale_range_window_title=
+select=
+select_one_row=
+selection_picture_file=
+separation=
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=
+string_value=
+style=
+style_selector=
+symbol=
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=
+value_fields=
+variation_by=
+verify=
+visible=
+visualization=
+warning=
+width=
+x_offset=
+y_offset=
+yes=
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [eu]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=Lehenetsitako sinboloa erabiliko da
+above=Gora
+accept=Ados
+accessing_file_structure=Fitxategiaren egitura atzitzen
+add=Gehitu
+add_class=Gehitu klasea
+add_expression=Gehitu adierazpena
+add_field=Gehitu eremua
+add_operator=Gehitu operadorea
+add_text_area=Gehitu testu eremua
+all_features=Elementu guztiak
+all_supported_background_image_formats=Atzeko planoko irudi formatu onargarriak
+allow_label_overlapping=Baimendu etiketen gainjartzea
+always_circular=
+always_horizontal=Beti horizontal
+always_straight=Beti zuzen
+angle=Angelua
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Aplikatu karaktereari zuzenketa bisuala tamaina eta kokapenaren zehaztapenerako
+arguments_added_to_a_costant=Argumentuak gehituta konstanteari
+at_begin=Hasieran
+at_best=Onenean
+at_end=Amaieran
+at_fields=Eremuetan
+background=
+background_color=Atzeko kolorea
+background_style=Atzeko estiloa
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Behean
+bitmap_and_svg_image_files=Bit-mapa eta SVG irudi-fitxategiak
+boolean_value=Balio boolear
+browse=Aztertu
+buffered=Poligonoaren forma
+cancel=Utzi
+cannot_apply_to_a_non_polygon_layer=Ezin da aplikatu poligonoduna ez den geruzan
+cannot_be_null=Ezin da nulua izan
+cannot_exist_two_label_classes_with_the_same_name=Ezin dira izen bereko bi etiketa egon
+cannot_install_labeling_method=Ezin da etiketatuen metodoa instalatu
+cant_draw_preview=Ezin da aurrebistaratzea marraztu
+change_location=Aldatu kokapena
+character_marker=Karaktere-markatzailea
+character_marker_symbol=Karaktere-markatzailearen ikurra
+choose_marker=Hautatu markatzailea
+circular=Zirkular
+class=Klasea
+classes=Klaseak
+classifying_field_name_not_found=Sailkapen eremua ez da aurkitu
+clear=Garbitu
+color=Kolorea\:
+color_field=Kolore eremua
+color_ramp=Kolore-arrapala
+confirmation_dialog=Berrespen-elkarrizketa
+constant=Konstantea
+correct_expression=Espresio zuzena
+could_not_get_shape_type=Ezin izan da geometria mota lortu
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Ezin izan da legenda kargatu
+date_value=Data balioa
+default=Lehenetsia
+define_classes_of_features_and_label_each_differently=Definitu entitate klase ezberdinak eta era ezberdinean etiketatu
+Defines_a_dot_density_symbol_based_on_a_field_value=Eremu baten balioan oinarrituta puntu-dentsitate legenda definitzen du
+delete=Ezabatu
+delete_class=Ezabatu klasea
+delete_filter_expression=Ezabatu iragazkiaren espresioa
+densities=Dentsitateak
+depth_factor=
+description=Deskripzioa
+divided_by_0=0-rekiko zatiketa
+dont_show_labels_when_zoomed=Ez erakitsi etiketak zooma egiten denean
+dot_density=Puntu dentsitatea
+dot_size=Puntu tamaina
+dot_value=Puntuaren balioa
+draw_quantities_for_each_category=Adierazi kategoria bakoitzaren kantitatea 
+draw_quantities_using_symbol_size_to_show_exact_values=Adierazi kantitateak sinbolo-tamainiaren bidez eta erakutsi balio zehatzak
+draw_quantities_using_symbol_size_to_show_relative_values=Adierazi kantitateak sinbolo-tamainiaren bidez eta erakutsi balio erlatiboak
+duplicate_labels=Etiketa errepikatuak
+edit_expression=Editatu espresioa
+Enable_layer_preview=Geruzaren aurrebista aktibatu
+enter_new_name=Idatzi izen berria
+error=Errorea
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Iragazkiaren formatua ez da zuzena\: errorea kodifikatzean
+error_trying_to_access_to_the_layer=Errorea geruza atzitzean
+error_validating_filter_query=Errorea SQL kontsulta balidatzean
+expression=Adierazpena
+expression_creator=Iragazteko espresioa sortu
+expressions=Adierazpenak
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Hutsegitea lerroa jarraitutako etiketatua aplikatzean. Lehenetsitako konfigurazioa erabiliko da. 
+failed_computing_intervals=Hutsegitea bitarteak kalkulatzean
+features=Objektuak
+field_number=Eremu-zenbakia
+fields=Eremuak
+fields_exp=Eremuak
+fill_color=Kolore betegarria
+fill_properties=Betegarriaren ezaugarriak
+filter=Iragazkia
+filtered_features=Elementu 
+fit_inside_polygon=Jarri poligonoaren barruan
+fit_on_text_area=Egokitu testu-gunera
+fixed_text_size=Testu tamaina finkoa
+following_line=Lerroa jarraituz
+font=Letra-tipoa
+foreground_alpha=
+format=Formatua
+from=Hemendik\:
+fuente=Letra-tipoa
+GeneralLabeling.sample_text=
+generating_intervals=Tarteak sortzen
+getting_layer_shape_type=Shape mota lortzen 
+gradient_color=Gradiente kolorea
+gradient_fill=Gradiente betegarria
+gradient_fill_symbol=Gradiente betegarri ikurra
+graduated_symbols=Sinbolo graduatuak
+grid=Sareta
+high=Altua
+horizontal=Horizontala
+ignore_zero_values=
+in_beyond=Honen azpitik\:
+in_layer=Geruzan
+in_the_middle=Erdian
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Espresio okerra
+intervals=Tarteak
+invalid_filter_expression=
+invalid_url=WFS zerbitzari-bilatzailearen formatu okerra
+it_will_not_be_added=Ez da gehituko
+label-point-priority-help=Lehentasuna\: 0 \= Blokeatuta, 1 \= Altuago, 3 \= Baxuago
+label_class_properties=Etiketatu klasearen ezaugarriak 
+label_expression=Etiketatuaren espresioa
+label_expression_editor=Etiketa espresioen editorea
+label_expression_help=
+label_features_in_the_same_way=Etiketatu entitate guztiak berdin
+label_features_in_this_class=Klase honetako entitateak etiketatu
+label_only_when_selected=Etiketatu bakarrik entitateak hautatuta daudenean
+label_priority=Etiketatuaren lehentasunak
+label_style_could_not_be_painted=
+label_styles=Etiketa estiloak
+labeled_point=
+labeling=Etiketatua
+labeling_field=Etiketatuaren eremua
+layer_name=Geruzaren izena
+line=Lerroa
+line_fill=Lerro betegarria
+line_fill_symbol=Lerro betegarriaren sinboloa
+line_settings=Linea-konfigurazioa
+lineal=Lineala
+lines=Lerroak
+location=Kokalekua
+location_along_the_lines=Kokalekua lerroetan zehar
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Balioak baxuegia dirudi. Sistema astirotu daiteke.
+low=Behe
+malformed_or_empty_expression=Espresio hutsa edo okerra
+marker_fill=Markatzile betegarria
+marker_fill_symbol=Markatzile betegarriaren ikurra
+marker_line=Markatzaile lerroa
+marker_line_symbol=Markatzaile lerroaren ikurra
+mas_de_100_simbolos=100 sinbolo baino gehiagok ez diote planoari informaziorik eransten.
+max_scale=Eskala geh.
+medium=Batez beste
+method=Eragiketa
+min_scale=Eskala gutx.
+minimum_angle_to_draw=
+modify_filter_expression=Aldatu iragazketa-espresioa
+move_down=Jeitsi
+move_up=Igo
+name=Izena
+names_and_types_count_are_disctint=Eremu kopurua eta eremu-mota kopurua ezberdinak dira
+new_filter_expression=Iragazkiaren espresio berria
+no=Ez
+no_expression_defined=Definitu gabeko espresioa
+no_style=Estilorik gabe
+no_symbol_especified=Ikurra zehaztu gabe
+none=None
+normalization=Normalizazioa
+not_save_empty_legend=Legenda hutsa ez da gordeko
+numeric_value=Zenbakizko balioa
+offset=Lekualdaketa
+offset_label=Etiketa lekuz aldatu
+offset_labels_horizontally=Etiketa lekuz aldatu horizontalki puntuaren inguruan
+offset_labels_on_top_of_the_points=Etiketak puntuen gainean jarri
+on_the_line=Lerroaren gainean
+operators=Operadoreak
+options=Aukerak
+orientation=Orientazioa
+orientation_system=Orientazioa
+out_beyond=Honen gainetik\:
+outline=Ertza
+outline_opacity=Ertzaren opakotasuna
+outline_width=Ertzaren zabalera
+page=Orrialdea
+parallel=Paraleloa
+pattern=Patroi
+percentage=Ehunekoa
+perpedicular=Perpendikular
+picture_file=Irudi-fitxategia
+picture_fill=Irudi betegarria
+picture_fill_symbol=Irudi betegarriaren ikurra
+picture_line_symbol=Irudi lerroaren ikurra
+picture_marker=Irudi markatzailea
+picture_marker_symbol=Irudi markatzailearen ikurra
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Jarri etiketa bakarra entitateko
+place_one_label_per_feature_part=Jarri etiketa bat entitatearen zati bakoitzeko
+placement=Kokamendu
+placement_priorities_selector=Kokapen lehentasunen hautatzailea
+placement_properties=Kokamendu propietateak
+point_settings=Puntuaren ezarpenak
+points=Puntuak
+polygon=Poligonoa
+polygon_settings=Poligonoaren ezarpenak
+position=Kokalekua
+prefer_top_right_all_allowed=Hobe goi-eskuman, baina edozein kokapenek balio du
+preview=Aurrebista
+preview_not_available=aurrebista ez dago ikusgarri
+properties=Ezaugarriak
+proportional_symbols=Ikur proportzionalak
+quantity_by_category=kopurua kategoria bakoitzeko
+quiere_continuar=Ziur zaude irten nahi duzula?
+Quitar=Kendu
+Quitar_todos=Kendu denak
+random=Ausazkoa
+recovering_recordset=Recordset-a berreskuratzen
+rectangular=Angeluzuzen
+remane_class=Klasea berriro izendatu
+remove=Kendu
+remove_duplicate_labels=Kendu errepikatutako etiketak
+resto_valores=Gainerako balioak
+scale=Eskala
+scale_range_window_title=Eskala bitarteak
+select=Hautatu
+select_one_row=Hautatu lerro bat
+selection_picture_file=Hautaketa irudia
+separation=Banaketa
+set_forbidden_precedence=Ezarri lehentasun nulua
+set_high_precedence=Ezarri lehentasun maximoa
+set_low_precedence=Ezarri lehentasun baxua
+set_normal_precedence=Ezarri lehentasun normala
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Iragazki-espresioaren araberako geruza-elementuak erakusten ditu
+size=Tamaina
+SLD_grammar=SLD gramatika
+some_arguments_are_incorrect=Argumentu batzuk okerrak dira
+specify_the_range_of_scales_at_which_labels_will_be_shown=Zehaztu etiketak bistaratzeko eskala-bitartea
+SQL_query=SQL sententzia
+statistics=Estatistikak
+string_value=Kate-balioa
+style=Estiloa
+style_selector=Estilo-hautagailua
+symbol=Ikurra
+symbol_field=Sinbolo graduatuaren eremua
+symbol_shapetype_mismatch=
+syntax_error=Sintaxi errorea
+template=Txantiloi
+text=Testua
+text_field=Testua
+text_fields=Testu eremuak
+text_string=Testua
+text_symbol=Testu ikurra
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=Argumentu kopurua okerra da
+the_result_is_not_a_boolean_value=Emaitza ez da boolearra
+to=Honaino
+URL=
+use_outline=Erabili ertza
+use_the_same_scale_range_as_the_feature_layer=Erabili geruzaren elementuaren eskala bitarte berberak
+user_defined_labels=Erabiltzaileak definitutako etiketak
+usupported_layer_type=Geruza mota ez da jasangarria
+value=Balioa
+value_fields=Balio eremuak
+variation_by=Honekiko bariazioa
+verify=Egiaztatu
+visible=Ikusgai
+visualization=Bistaratzea
+warning=Oharra
+width=Zabalera
+x_offset=Desplazamendua X-n
+y_offset=Desplazamendua Y-n
+yes=Bai
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_en_US.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_en_US.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_en_US.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [en_US]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=A default symbol will be used.
+above=Above
+accept=Ok
+accessing_file_structure=File system access in progress
+add=Add
+add_class=Add class
+add_expression=Add field
+add_field=Add field
+add_operator=Add operator
+add_text_area=Add text area
+all_features=All features
+all_supported_background_image_formats=All supported background image formats
+allow_label_overlapping=Allow overlapping labels
+always_circular=
+always_horizontal=Always horizontal
+always_straight=Always straight
+angle=Angle
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Apply visual glyph correction
+arguments_added_to_a_costant=Arguments added to a constant.
+at_begin=At start
+at_best=Optimal
+at_end=At end
+at_fields=at fields
+background=Background\:
+background_color=Background color
+background_style=Background style
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Below
+bitmap_and_svg_image_files=Bitmaps and SVG drawings
+boolean_value=Boolean value
+browse=Choose...
+buffered=Buffered
+cancel=Cancel
+cannot_apply_to_a_non_polygon_layer=Not applicable to a non-polygon layer.
+cannot_be_null=Cannot be null
+cannot_exist_two_label_classes_with_the_same_name=There cannot be two label classes with the same name.
+cannot_install_labeling_method=Cannot set up labeling method.
+cant_draw_preview=Cannot generate preview.
+change_location=Change...
+character_marker=Character marker
+character_marker_symbol=Character marker
+choose_marker=Choose marker...
+circular=Circular
+class=Class
+classes=Classes
+classifying_field_name_not_found=Classification field not found.
+clear=Clear
+color=Color
+color_field=Color field
+color_ramp=Color ramp...
+confirmation_dialog=Confirmation dialog
+constant=Constant
+correct_expression=Expression is valid.
+could_not_get_shape_type=Cannot determine geometry type.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Cannot set up legend.
+date_value=Date value
+default=Default
+define_classes_of_features_and_label_each_differently=Define individual labeling classes
+Defines_a_dot_density_symbol_based_on_a_field_value=Show differences in field values using dot densities
+delete=Delete
+delete_class=Delete class
+delete_filter_expression=Delete filter
+densities=Densities
+depth_factor=
+description=Description
+divided_by_0=Division by 0.
+dont_show_labels_when_zoomed=Do not show labels when zoomed ...
+dot_density=Dot densities
+dot_size=Dot size\:
+dot_value=Dot value\:
+draw_quantities_for_each_category=Vary color and symbol styles for two independent fields. This can be used to visualize the relationship of two attributes with each other.
+draw_quantities_using_symbol_size_to_show_exact_values=Vary symbol sizes proportionally to normalized field values. This exactly relates value differences to symbol size differences.
+draw_quantities_using_symbol_size_to_show_relative_values=Vary symbol sizes gradually to show quantitative differences in field values.
+duplicate_labels=Repeated labels
+edit_expression=Edit expression
+Enable_layer_preview=Enable layer preview
+enter_new_name=Enter new name
+error=Error
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Error parsing SQL query.
+error_trying_to_access_to_the_layer=Error on attempting layer access
+error_validating_filter_query=Error validating SQL query.
+expression=Expression
+expression_creator=Create filter expression
+expressions=Expressions
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Failed to apply follow-line labeling. Default mode will be used instead.
+failed_computing_intervals=Failed to compute intervals.
+features=Basic
+field_number=Label no.
+fields=Fields
+fields_exp=Fields
+fill_color=Fill color
+fill_properties=Fill properties
+filter=Filter
+filtered_features=Filtered features
+fit_inside_polygon=Fit inside polygon
+fit_on_text_area=Fit into text area
+fixed_text_size=Fixed text size\:
+following_line=Follow line
+font=Font
+foreground_alpha=
+format=Format
+from=From
+fuente=Format
+GeneralLabeling.sample_text=
+generating_intervals=Generating intervals...
+getting_layer_shape_type=Retrieving layer shape type...
+gradient_color=Gradient color
+gradient_fill=Gradient fill
+gradient_fill_symbol=Gradient fill
+graduated_symbols=Graduated symbols
+grid=Grid
+high=Height
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=... in beyond
+in_layer=in layer
+in_the_middle=In the middle
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Invalid expression.
+intervals=Intervals
+invalid_filter_expression=
+invalid_url=Invalid format in WFS server URL.
+it_will_not_be_added=It will not be added
+label-point-priority-help=Priority\: 0\=blocked, 1\=highest, 3\=lowest
+label_class_properties=Label class properties
+label_expression=Label expression
+label_expression_editor=Label expression editor
+label_expression_help=
+label_features_in_the_same_way=Label all features in the same way
+label_features_in_this_class=Label features in this class\:
+label_only_when_selected=Label selected features only
+label_priority=Labeling priority
+label_style_could_not_be_painted=
+label_styles=Label styles
+labeled_point=
+labeling=Labeling
+labeling_field=Select field
+layer_name=Layer name
+line=Line
+line_fill=Line fill
+line_fill_symbol=Line fill
+line_settings=Line settings
+lineal=Linear
+lines=Lines
+location=Location
+location_along_the_lines=Along lines
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=It seems that one of the values for the field is too low. This may cause the system to slow down and become unresponsive.
+low=Low
+malformed_or_empty_expression=Invalid or empty expression.
+marker_fill=Marker fill
+marker_fill_symbol=Marker fill
+marker_line=Marker line
+marker_line_symbol=Marker line
+mas_de_100_simbolos=There are more than 100 unique values. Add all?
+max_scale=Maximum scale
+medium=Medium
+method=Method
+min_scale=Minimum scale
+minimum_angle_to_draw=
+modify_filter_expression=Modify filter...
+move_down=Move down
+move_up=Move up
+name=Name
+names_and_types_count_are_disctint=Number of fields differs from number of field types
+new_filter_expression=New filter...
+no=No
+no_expression_defined=Expression not defined.
+no_style=No style
+no_symbol_especified=No symbol specified
+none=none
+normalization=Normalize by
+not_save_empty_legend=Cannot save an empty legend.
+numeric_value=Numeric value
+offset=Offset
+offset_label=Offset label
+offset_labels_horizontally=Place labels by priority around points\:
+offset_labels_on_top_of_the_points=Simply place labels on top of points
+on_the_line=On the line
+operators=Operators
+options=Options
+orientation=Orientation
+orientation_system=Orientation\:
+out_beyond=... out beyond
+outline=Outline
+outline_opacity=Outline opacity
+outline_width=Outline width
+page=Page
+parallel=Parallel
+pattern=Syntax
+percentage=Percentage
+perpedicular=Perpendicular
+picture_file=Picture file
+picture_fill=Picture fill
+picture_fill_symbol=Picture fill
+picture_line_symbol=Picture line
+picture_marker=Picture marker
+picture_marker_symbol=Picture marker
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Place one label per feature
+place_one_label_per_feature_part=Place one label per feature part
+placement=Placement
+placement_priorities_selector=Select placement priority
+placement_properties=Placement properties
+point_settings=Point settings
+points=Points
+polygon=Polygon
+polygon_settings=Polygon settings
+position=Position
+prefer_top_right_all_allowed=Preferably in the upper right corner, but all positions are allowed.
+preview=Preview
+preview_not_available=No preview.
+properties=Properties...
+proportional_symbols=Proportional symbols
+quantity_by_category=Quantities by category
+quiere_continuar=Would you like to continue?
+Quitar=Remove
+Quitar_todos=Remove all
+random=Random
+recovering_recordset=Recovering recordset...
+rectangular=Rectangular
+remane_class=Rename class
+remove=Remove
+remove_duplicate_labels=Remove duplicate labels
+resto_valores=Other values
+scale=Scale
+scale_range_window_title=Scale range
+select=Select...
+select_one_row=Please select a row with a filter expression first.
+selection_picture_file=For selected features
+separation=Separation
+set_forbidden_precedence=Set to "blocked"
+set_high_precedence=Set to "high" priority
+set_low_precedence=Set to "low" priority
+set_normal_precedence=Set to "normal" priority
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Build symbology classes using filter expressions and assign individual styles to them
+size=Size
+SLD_grammar=SLD grammar
+some_arguments_are_incorrect=Some options are incorrect
+specify_the_range_of_scales_at_which_labels_will_be_shown=Set the scale range within which labels will be drawn
+SQL_query=SQL query
+statistics=Statistics
+string_value=String value
+style=Style
+style_selector=Style selection
+symbol=Symbol...
+symbol_field=Symbol field
+symbol_shapetype_mismatch=
+syntax_error=Syntax error
+template=Template\:
+text=Text
+text_field=Text\:
+text_fields=Text fields
+text_string=Text\:
+text_symbol=Text symbol\:
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=Wrong number of arguments.
+the_result_is_not_a_boolean_value=Result is not a boolean (i.e. 'false/0' or 'true/1') value.
+to=To
+URL=
+use_outline=Use outline
+use_the_same_scale_range_as_the_feature_layer=Use the same scale range as the layer's features
+user_defined_labels=Advanced settings
+usupported_layer_type=Unsupported layer type
+value=Value
+value_fields=Fields with values
+variation_by=Styles
+verify=Verify
+visible=Visible
+visualization=Visualization
+warning=Warning
+width=Width
+x_offset=X offset
+y_offset=Y offset
+yes=Yes
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pl.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [pl]
+#Thu Oct 29 12:16:22 CET 2009
+a_default_symbol_will_be_used=
+above=
+accept=
+accessing_file_structure=
+add=Dodaj
+add_class=
+add_expression=
+add_field=Dodaj pole
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=Kolor t\u0142a
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=
+browse=Przegl\u0105daj
+buffered=
+cancel=Anuluj
+cannot_apply_to_a_non_polygon_layer=
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=
+character_marker_symbol=
+choose_marker=
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=Wyczy\u015b\u0107
+color=Kolor\:
+color_field=
+color_ramp=
+confirmation_dialog=
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=
+date_value=
+default=
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=
+delete=
+delete_class=
+delete_filter_expression=
+densities=
+depth_factor=
+description=Opis
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=
+dot_size=
+dot_value=
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=B\u0142\u0105d
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=
+expression_creator=
+expressions=
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=
+fields_exp=
+fill_color=
+fill_properties=
+filter=Filtr
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=Format
+from=
+fuente=Czcionka
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=
+high=
+horizontal=Poziomo
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=Nazwa warstwy
+line=Linia
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=
+malformed_or_empty_expression=
+marker_fill=
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=Wi\u0119cej ni\u017c 100 symboli przewa\u017cnie znacz\u0105co zmniejsza warto\u015b\u0107 informacyjn\u0105 mapy
+max_scale=
+medium=
+method=
+min_scale=
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=Nazwa
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=Nie
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=Brak
+normalization=
+not_save_empty_legend=
+numeric_value=
+offset=
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=Opcje
+orientation=
+orientation_system=
+out_beyond=
+outline=Obramowanie
+outline_opacity=
+outline_width=
+page=
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=Wielobok
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=
+preview_not_available=
+properties=W\u0142a\u015bciwo\u015bci
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=Czy chcesz kontynuowa\u0107?
+Quitar=Usu\u0144
+Quitar_todos=Usu\u0144 wszystko
+random=
+recovering_recordset=
+rectangular=
+remane_class=
+remove=Usu\u0144
+remove_duplicate_labels=
+resto_valores=Inne warto\u015bci
+scale=Skala
+scale_range_window_title=
+select=Zaznacz
+select_one_row=
+selection_picture_file=
+separation=
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=Rozmiar
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=Statystyki
+string_value=
+style=Styl
+style_selector=
+symbol=
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=do
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=warto\u015b\u0107
+value_fields=
+variation_by=
+verify=
+visible=Widoczna
+visualization=
+warning=Ostrze\u017cenie
+width=Szeroko\u015b\u0107
+x_offset=
+y_offset=
+yes=Tak
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [it]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=Sar\u00e0 utilizzato un simbolo predefinito
+above=Sopra
+accept=Accetta
+accessing_file_structure=Analizzo struttura dei file
+add=Aggiungi
+add_class=Aggiungi classe
+add_expression=Aggiungi espressione
+add_field=Agguingi campo
+add_operator=Aggiungi operatore
+add_text_area=Aggiungi campo di testo
+all_features=Tutti gli elementi
+all_supported_background_image_formats=Tutte le immagini di sfondo supportate
+allow_label_overlapping=Permetti sovrapposizione delle etichette
+always_circular=
+always_horizontal=Sempre orizzontale
+always_straight=Sempre dritto
+angle=Angolo
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Applica correzione visiva ai caratteri per dimensione e posizionamento precisi
+arguments_added_to_a_costant=Argomento aggiunto a una costante
+at_begin=All'inizio
+at_best=Al meglio
+at_end=Alla fine
+at_fields=nei campi
+background=
+background_color=Colore sfondo
+background_style=Stile sfondo
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Sotto
+bitmap_and_svg_image_files=File immagine Bitmap e SVG
+boolean_value=Valore boleano
+browse=Sfoglia
+buffered=Buffered
+cancel=Cancella
+cannot_apply_to_a_non_polygon_layer=Impossibile applicare a un Livello non poligonale
+cannot_be_null=Non pu\u00f2 essere nullo
+cannot_exist_two_label_classes_with_the_same_name=Non possono esistere due etichette con lo stesso nome
+cannot_install_labeling_method=Impossibile installare il metodo di etichettatura
+cant_draw_preview=Impossibile disegnare anteprima
+change_location=Modifica posizione
+character_marker=Marker carattere
+character_marker_symbol=Simbolo marker carattere
+choose_marker=Seleziona marker
+circular=Circolare
+class=Classe
+classes=Classi
+classifying_field_name_not_found=Campo di classificazione non trovato
+clear=Pulisci
+color=Colore\:
+color_field=Campo colore
+color_ramp=Scala colori
+confirmation_dialog=Dialog di conferma
+constant=Costante
+correct_expression=Espressione corretta
+could_not_get_shape_type=Impossibile individuare il tipo di geometria.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Impossibile configurare legenda
+date_value=Valore della data
+default=Default
+define_classes_of_features_and_label_each_differently=Definire classi di elementi ed etichettatura indipendentemente
+Defines_a_dot_density_symbol_based_on_a_field_value=Definisce un simbolo di densit\u00e0 di punti basato sul valore di un determinato campo
+delete=Elimina
+delete_class=Elimina classe
+delete_filter_expression=Elimina espressione di filtro
+densities=Densit\u00e0
+depth_factor=
+description=Descrizione
+divided_by_0=Divisione per 0
+dont_show_labels_when_zoomed=Non mostrare etichette quando zoomato
+dot_density=Densit\u00e0 puntuale
+dot_size=Dimensione del punto
+dot_value=Valore del punto
+draw_quantities_for_each_category=Rappresenta quantit\u00e0 per ogni categoria.
+draw_quantities_using_symbol_size_to_show_exact_values=Rappresenta le quantit\u00e0 utilizzando le dimensioni del simbolo per mostrare i valori esatti.
+draw_quantities_using_symbol_size_to_show_relative_values=Rappresenta le quantit\u00e0 utilizzando le dimensioni del simbolo per mostrare i valori relativi.
+duplicate_labels=Etichette ripetute
+edit_expression=Modifica espressione
+Enable_layer_preview=Abilita anteprima del Livello
+enter_new_name=Inserire il nuovo nome
+error=Errore
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Filtro con formato errato\: errore di codifica
+error_trying_to_access_to_the_layer=Errore d'accesso al Livello
+error_validating_filter_query=Errore di validazione query SQL
+expression=Espressione
+expression_creator=Creatore di espressioni per filtri
+expressions=Espressioni
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=FALLITA Applicazione dell'etichettatura seguendo la linea. Verr\u00e0 utilizzata la configurazione predefinita
+failed_computing_intervals=FALLITO Calcolo intervalli
+features=Elementi
+field_number=Numero campo
+fields=Campi
+fields_exp=Campi
+fill_color=Colore di riempimento
+fill_properties=Propriet\u00e0 di riempimento
+filter=Filtro
+filtered_features=Elementi filtrati
+fit_inside_polygon=Adatta all'interno del poligono
+fit_on_text_area=Adatta all'area del testo
+fixed_text_size=Dimensione fissa del testo
+following_line=Seguendo la linea
+font=Font
+foreground_alpha=
+format=Formato
+from=Da\:
+fuente=Font
+GeneralLabeling.sample_text=
+generating_intervals=Elaborazione intervalli
+getting_layer_shape_type=Recupero tipologia forme dal Livello in corso
+gradient_color=Colore gradiente
+gradient_fill=Riempimento gradiente
+gradient_fill_symbol=Simbolo del riempimento gradiente
+graduated_symbols=Simboli graduati
+grid=Griglia
+high=Alto
+horizontal=Orizzontale
+ignore_zero_values=
+in_beyond=Al di sotto
+in_layer=nel Livello
+in_the_middle=Nel mezzo
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Espressione errata
+intervals=Intervalli
+invalid_filter_expression=
+invalid_url=URL del server con formato errato
+it_will_not_be_added=Non verr\u00e0 aggiunto
+label-point-priority-help=Priorit\u00e0\: 0 \= Bloccato, 1 \= Massima, 3 \= Minima
+label_class_properties=Propriet\u00e0 della classe etichetta
+label_expression=Espressione di etichetta
+label_expression_editor=Editor di espressioni d'etichetta
+label_expression_help=
+label_features_in_the_same_way=Etichettare tutti gli elementi nello stesso modo
+label_features_in_this_class=Etichettare gli elementi in questa classe
+label_only_when_selected=Etichettare solo quando l'elemento \u00e8 selezionato
+label_priority=Priorit\u00e0 nell'etichettare
+label_style_could_not_be_painted=
+label_styles=Stile dell'etichetta
+labeled_point=
+labeling=Etichettato
+labeling_field=Campo d'etichettatura
+layer_name=Nome del layer
+line=Linea
+line_fill=Riempimento Linee
+line_fill_symbol=Simbolo di riempimento linee
+line_settings=Impostazioni Linea
+lineal=Lineare
+lines=Linee
+location=Ubicazione
+location_along_the_lines=Ubicazione lungo le linee
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Il valore per il punto appare troppo basso. E' possibile che il sistema risponda molto lentamente.
+low=Bassa
+malformed_or_empty_expression=Espressione nulla o incorretta
+marker_fill=Riempimento dei marcatori
+marker_fill_symbol=Simbolo di riempimento dei marcatori
+marker_line=Linea dei marcatori
+marker_line_symbol=Simbolo della linea dei marcatori
+mas_de_100_simbolos=Pi\u00fa di 100 simboli non apportano informazioni al piano
+max_scale=Scala massima
+medium=Mezzo
+method=Operazione
+min_scale=Scala min
+minimum_angle_to_draw=
+modify_filter_expression=Modifica l'espressione di filtro
+move_down=Sposta in gi\u00f9
+move_up=Muovi in alto
+name=Nome
+names_and_types_count_are_disctint=Numero dei campi e numero delle tipologia di campo distinte.
+new_filter_expression=Nuova espressione di filtro
+no=No
+no_expression_defined=Espressione non definita
+no_style=Senza stile
+no_symbol_especified=Simbolo non specificato
+none=Nessuno
+normalization=Normalizzazione
+not_save_empty_legend=Legende vuote non verranno salvate.
+numeric_value=Valore numerico
+offset=Spostamento
+offset_label=Sposta etichetta
+offset_labels_horizontally=Sposta etichette orizzontalmente attorno al punto
+offset_labels_on_top_of_the_points=Posiziona etichette sui punti
+on_the_line=Sulla linea
+operators=Operatori
+options=Opzioni
+orientation=Orientazione
+orientation_system=Sistema di orientamento
+out_beyond=Out beyond
+outline=Bordo
+outline_opacity=Trasparenza bordo
+outline_width=Larghezza bordo
+page=Pagina
+parallel=Parallela
+pattern=Modello
+percentage=Percentuale
+perpedicular=Perpendicolare
+picture_file=File immagine
+picture_fill=Riempimento immagine
+picture_fill_symbol=Motivo di riempimento immagine
+picture_line_symbol=Motivo della linea dell'immagine
+picture_marker=Marcatore dell'immagine
+picture_marker_symbol=Simbolo del marcatore dell'immagine
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Posiziona un'etichetta per elemento
+place_one_label_per_feature_part=Posiziona un'etichetta per ciascuna parte dell'elemento
+placement=Collocazione
+placement_priorities_selector=Selettore di priorit\u00e0 di collocazione
+placement_properties=Propriet\u00e0 di collocazione
+point_settings=Configurazione del punto
+points=Punti
+polygon=Poligono
+polygon_settings=Configurazione poligono
+position=Posizione
+prefer_top_right_all_allowed=Preferibilmente all'angolo alto a destra, ma qualunque posizione ammessa
+preview=Anteprima
+preview_not_available=Anteprima non disponibile
+properties=Propriet\u00e1
+proportional_symbols=Simboli proporzionali
+quantity_by_category=Quantit\u00e0 per categoria
+quiere_continuar=Sei sicuro di voler continuare?
+Quitar=Rimuovi
+Quitar_todos=Elimina tutto
+random=Casuale
+recovering_recordset=Recupero recordset in corso.
+rectangular=Rettangolare
+remane_class=Rinomina classe
+remove=Rimuovi
+remove_duplicate_labels=Elimina etichette doppie
+resto_valores=Resto dei valori
+scale=Scala
+scale_range_window_title=Intervallo scale
+select=Seleziona
+select_one_row=Seleziona una riga
+selection_picture_file=Immagine di selezione
+separation=Separazione
+set_forbidden_precedence=Imposta priorit\u00e0 nulla
+set_high_precedence=Imposta alta priorit\u00e0
+set_low_precedence=Imposta bassa priorit\u00e0
+set_normal_precedence=Imposta priorit\u00e0 normale
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Mostra gli elementi del Livello in funzione di una determinata espressione di selezione
+size=Dimensione
+SLD_grammar=Grammatica SLD
+some_arguments_are_incorrect=Alcuni argomenti errati
+specify_the_range_of_scales_at_which_labels_will_be_shown=Specificare l'intervallo delle scale nel quale le etichette saranno mostrate
+SQL_query=Query SQL
+statistics=Statistica
+string_value=Valore stringa
+style=Stile
+style_selector=Selettore di stili
+symbol=Simbolo
+symbol_field=Campo del simbolo graduato
+symbol_shapetype_mismatch=
+syntax_error=Errore di sintassi
+template=Template
+text=Testo
+text_field=Testo
+text_fields=Campi di testo
+text_string=Testo
+text_symbol=Simbolo di testo
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=Numero di argomenti non corretto
+the_result_is_not_a_boolean_value=Il risultato non \u00e8 booleano
+to=A\:
+URL=
+use_outline=Utilizza bordo
+use_the_same_scale_range_as_the_feature_layer=Utilizza lo stesso intervallo di scale dell'elemento del Livello
+user_defined_labels=Etichette definite dall'utente
+usupported_layer_type=Tipologia di Livello non supportata
+value=Valore
+value_fields=Campi dei valori
+variation_by=Variazione per
+verify=Verifica
+visible=Visibile
+visualization=Visualizzazione
+warning=Attenzione
+width=Larghezza
+x_offset=Spostamento X
+y_offset=Spostamento in Y
+yes=Si
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,319 @@
+#Translations for language [es]
+#Mon Sep 21 10:02:12 CEST 2009
+_Label_type_to_use_XcolonX=Tipo de etiqueta a utilizar\:
+a_default_symbol_will_be_used=Ser\u00E1 utilizado un s\u00EDmbolo por defecto
+above=Arriba
+accept=Aceptar
+accessing_file_structure=Accediendo a la estructura del fichero
+add=A\u00F1adir
+add_class=A\u00F1adir clase
+add_expression=A\u00F1adir Expresi\u00F3n
+add_field=A\u00F1adir campo
+add_operator=A\u00F1adir Operador
+add_text_area=A\u00F1adir campo de texto
+all_features=Todos los elementos
+all_supported_background_image_formats=Todos los formatos de imagen de fondo soportados
+allow_label_overlapping=Permitir superposici\u00F3n de las etiquetas
+always_circular=
+always_horizontal=Siempre horizontal
+always_straight=Siempre recto
+angle=\u00C1ngulo
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Aplicar correcci\u00F3n visual al car\u00E1cter para precisi\u00F3n en tama\u00F1o y posici\u00F3n.
+arguments_added_to_a_costant=Argumento a\u00F1adido a una constante
+at_begin=Al principio
+at_best=En la mejor
+at_end=Al final
+at_field=en el campo
+at_fields=en los campos
+background=
+background_color=Color de fondo
+background_style=Estilo de fondo
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Abajo
+bitmap_and_svg_image_files=Im\u00E1genes SVG y de mapa de bits
+boolean_value=Valor booleano
+browse=Examinar
+buffered=Forma del pol\u00EDgono
+cancel=Cancelar
+cannot_apply_to_a_non_polygon_layer=No puede aplicarse a una capa no poligonal
+cannot_be_null=No puede ser nulo
+cannot_exist_two_label_classes_with_the_same_name=No pueden existir dos etiquetas con el mismo nombre
+cannot_install_labeling_method=No se puede instalar el m\u00E9todo de etiquetado
+cant_draw_preview=No se puede dibujar la previsualizaci\u00F3n
+Capa=Capa
+change_location=Cambiar ubicaci\u00F3n
+character_marker=Marcador de car\u00E1cter
+character_marker_symbol=S\u00EDmbolo de Marcador de car\u00E1cter
+choose_marker=Seleccionar marcador
+circular=Circular
+class=Clase
+classes=Clases
+classifying_field_name_not_found=Campo de clasificaci\u00F3n no encontrado
+clear=Limpiar
+color=Color\:
+color_field=Campo de colores
+color_ramp=Rampa de color
+confirmation_dialog=Di\u00E1logo de confirmaci\u00F3n
+constant=constante
+correct_expression=Expresion correcta
+could_not_get_shape_type=No se pudo obtener el tipo de geometr\u00EDa.
+could_not_restore_color_field=No se pudo recuperar el campo para el color del texto.
+could_not_restore_rotation_field=No se pudo recuperar el campo para la rotaci\u00F3n del texto.
+could_not_restore_text_field=No se pudo recuperar el campo del texto.
+could_not_restore_text_height_field=No se pudo recuperar el campo para la altura del texto.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=No se puede cargar la leyenda
+date_value=Valor fecha
+default=Por defecto
+define_classes_of_features_and_label_each_differently=Definir diferentes clases de entidades y etiquetarlas de manera diferente
+Defines_a_dot_density_symbol_based_on_a_field_value=Define una leyenda de densidad de puntos basada en el valor de un determinado campo.
+delete=Eliminar
+delete_class=Eliminar clase
+delete_filter_expression=Eliminar expresi\u00F3n de filtrado
+densities=Densidades
+depth_factor=
+description=Descripci\u00F3n
+divided_by_0=Divisi\u00F3n por 0
+dont_show_labels_when_zoomed=No mostrar las etiquetas cuando se haga zoom
+dot_density=Densidad de puntos
+dot_size=Tama\u00F1o de punto
+dot_value=Valor del punto
+draw_quantities_for_each_category=Representa cantidades para cada categor\u00EDa.
+draw_quantities_using_symbol_size_to_show_exact_values=Representa cantidades a trav\u00E9s del tama\u00F1o del s\u00EDmbolo mostrando valores exactos
+draw_quantities_using_symbol_size_to_show_relative_values=Representa cantidades mediante el tama\u00F1o de un s\u00EDmbolo mostrando valores relativos.
+duplicate_labels=Etiquetas repetidas
+edit_expression=Editar expresi\u00F3n
+enable_labeling=Habilitar etiquetado
+Enable_layer_preview=Activar previsualizaci\u00F3n de capa
+enter_new_name=Introduzca el nuevo nombre
+error=Error
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Error codificando la consulta SQL
+error_trying_to_access_to_the_layer=Error intentando acceder a la capa
+error_validating_filter_query=Error validando la consulta SQL
+Etiquetados=Etiquetados
+expression=Expresi\u00F3n
+expression_creator=Crear expresi\u00F3n de filtrado
+expressions=Expresiones
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Fallo aplicando el etiquetado siguiendo la l\u00EDnea. Se utilizar\u00E1 la configuraci\u00F3n por defecto
+failed_computing_intervals=Fallo calculando intervalos
+false=Falso
+features=Objetos
+field_number=N\u00FAmero de campo
+field_to_be_labeled=Campo a etiquetar
+fields=Campos
+fields_exp=Campos
+fill_color=Color de relleno
+fill_properties=Propiedades de relleno
+filter=Filtro
+filtered_features=Elementos filtrados
+fit_inside_polygon=Acoplar dentro del pol\u00EDgono
+fit_on_text_area=Ajustar al area de texto
+fixed_color=Color fijo
+fixed_height=Tama\u00F1o fijo
+fixed_text_size=Tama\u00F1o fijo del texto
+following_line=Siguiendo la l\u00EDnea
+font=Fuente
+foreground_alpha=
+format=Formato
+from=Desde
+fuente=Fuente
+general=General
+GeneralLabeling.sample_text=
+generating_intervals=Generando Intervalos
+getting_layer_shape_type=Obteniendo el tipo de shape
+gradient_color=Color gradiente
+gradient_fill=Relleno gradiente
+gradient_fill_symbol=S\u00EDmbolo de relleno gradiente
+graduated_symbols=S\u00EDmbolos graduados
+grid=Malla
+high=Alta
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=Por debajo de
+in_layer=en capa
+in_the_middle=En mitad
+in_the_world=en el mundo
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Expresi\u00F3n incorrecta
+intervals=Intervalos
+invalid_filter_expression=
+invalid_url=Localizador de servidor WFS con formato no v\u00E1lido.
+it_will_not_be_added=No ser\u00E1 a\u00F1adida
+label-point-priority-help=Prioridad\: 0 \= Bloqueado, 1 \= M\u00E1s alta, 3 \= M\u00E1s baja
+label_attributes_defined_in_table=Atributos de la etiqueta definidos en tabla
+label_class_properties=Propiedades de la clase de etiquetado
+label_expression=Expresi\u00F3n de etiquetado
+label_expression_editor=Editor de expresiones de etiqueta
+label_expression_help=
+label_features_in_the_same_way=Etiquetar todas las entidades de la misma manera
+label_features_in_this_class=Etiquetar entidades dentro de esta clase
+label_only_when_selected=Etiquetar solamente cuando sus entidades est\u00E9n seleccionadas
+label_priority=Prioridad en el etiquetado
+label_style_could_not_be_painted=
+label_styles=Estilos de etiqueta
+labeled_point=
+labeling=Etiquetado
+labeling_field=Campo de etiquetado
+layer_name=Nombre de la capa
+layer_Selector=Selector de capa
+line=L\u00EDnea
+line_fill=Relleno l\u00EDneas
+line_fill_symbol=S\u00EDmbolo de relleno de l\u00EDneas
+line_settings=Configuraci\u00F3n de l\u00EDnea
+lineal=Lineal
+lines=L\u00EDneas
+location=Ubicaci\u00F3n
+location_along_the_lines=Ubicaci\u00F3n a lo largo de las l\u00EDneas
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Parece un valor para el punto demasiado bajo, puede causar que el sistema responda muy lentamente.
+low=Baja
+malformed_or_empty_expression=Expresi\u00F3n vac\u00EDa o err\u00F3nea
+marker_fill=Relleno de marcadores
+marker_fill_symbol=S\u00EDmbolo de Relleno de marcadores
+marker_line=L\u00EDnea de marcadores
+marker_line_symbol=S\u00EDmbolo de L\u00EDnea de marcadores
+mas_de_100_simbolos=M\u00E1s 100 de s\u00EDmbolos no suelen aportar informaci\u00F3n en un plano.
+max_scale=Escala m\u00E1x
+medium=Media
+method=Operaci\u00F3n
+min_scale=Escala m\u00EDn
+minimum_angle_to_draw=
+modify_filter_expression=Modificar expresi\u00F3n de filtrado
+move_down=Bajar
+move_up=Subir
+name=Nombre
+names_and_types_count_are_disctint=N\u00FAmero de campos y n\u00FAmero de tipos de campo distintos
+new_filter_expression=Nueva expresi\u00F3n de filtrado
+no=No
+no_expression_defined=Expresion no definida
+no_style=Sin estilo
+no_symbol_especified=S\u00EDmbolo no especificado
+none=None
+normalization=Normalizaci\u00F3n
+not_save_empty_legend=Leyenda vac\u00EDa no se guardar\u00E1.
+numeric_or_boolean_value=valor num\u00E9rico o boolean
+numeric_value=Valor num\u00E9rico
+offset=Desplazamiento
+offset_label=Desplazar etiqueta
+offset_labels_horizontally=Desplazar etiquetas horizontalmente alrededor del punto.
+offset_labels_on_top_of_the_points=Situar etiquetas sobre los puntos.
+on_the_line=Sobre la l\u00EDnea
+operand=operando
+operation_not_allowed_for_SingleLabelingStrategy=Operaci\u00F3n no permitida para la estrategia de etiquetado simple
+operators=Operadores
+options=Opciones
+orientation=Orientaci\u00F3n
+orientation_system=Orientaci\u00F3n
+out_beyond=Por encima de
+outline=Borde
+outline_opacity=Opacidad del borde
+outline_width=Ancho del borde
+page=P\u00E1gina
+parallel=Paralela
+pattern=Patr\u00F3n
+percentage=Porcentaje
+perpedicular=Perpendicular
+picture_file=Fichero imagen
+picture_fill=Relleno de imagen
+picture_fill_symbol=S\u00EDmbolo de Relleno de imagen
+picture_line_symbol=S\u00EDmbolo de L\u00EDnea de imagen
+picture_marker=Marcador de imagen
+picture_marker_symbol=S\u00EDmbolo de marcador de imagen
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Situar \u00FAnicamente una etiqueta por entidad
+place_one_label_per_feature_part=Situar una etiqueta por cada parte de la entidad
+placement=Colocaci\u00F3n
+placement_priorities_selector=Selector de prioridades de colocaci\u00F3n
+placement_properties=Propiedades de colocaci\u00F3n
+point_settings=Configuraci\u00F3n de punto
+points=Puntos
+polygon=Pol\u00EDgono
+polygon_settings=Configuraci\u00F3n de pol\u00EDgono
+position=Posici\u00F3n
+prefer_top_right_all_allowed=Preferiblemente arriba a la derecha, pero permitiendo cualquier posici\u00F3n
+preview=Previsualizaci\u00F3n
+preview_not_available=Vista previa no disponible
+properties=Propiedades
+proportional_symbols=S\u00EDmbolos proporcionales
+quantity_by_category=Cantidades por categor\u00EDa
+quiere_continuar=\u00BFEst\u00E1 seguro de que quiere continuar?
+Quitar=Quitar
+Quitar_todos=Quitar todos
+random=Aleatorio
+recovering_recordset=Recuperando recordset.
+rectangular=Rectangular
+remane_class=Renombrar clase
+remove=Quitar
+remove_duplicate_labels=Eliminar etiquetas repetidas
+resto_valores=Resto de valores
+rotation_height=Rotaci\u00F3n
+scale=Escalar
+scale_range_window_title=Rango de escalas
+select=Seleccionar
+select_one_row=Selecciona una fila
+selection_picture_file=Imagen de selecci\u00F3n
+separation=Separaci\u00F3n
+set_forbidden_precedence=Establecer precedencia nula
+set_high_precedence=Establecer m\u00E1xima precedencia
+set_low_precedence=Establecer baja precedencia
+set_normal_precedence=Establecer precedencia normal
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Muestra los elementos de la capa en funci\u00F3n de una determinada expresi\u00F3n de filtrado
+simple_marker=Marcador simple
+single_labeling=Etiquetado simple
+single_labeling_setup=Configuraci\u00F3n del etiquetado simple
+size=Tama\u00F1o
+SLD_grammar=Gram\u00E1tica SLD
+some_arguments_are_incorrect=Algunos argumentos son incorrectos
+specify_the_range_of_scales_at_which_labels_will_be_shown=Especificar el rango de escalas en el que las etiquetas ser\u00E1n mostradas
+SQL_query=Sentencia SQL
+statistics=Estad\u00EDsticas
+string_value=Valor String
+style=Estilo
+style_selector=Selector de estilos
+symbol=S\u00EDmbolo
+symbol_field=Campo de s\u00EDmbolo graduado
+symbol_shapetype_mismatch=
+syntax_error=Error de sintaxis
+template=Plantilla
+text=Texto
+text_field=Texto
+text_fields=Campos de texto
+text_height_field=Altura del texto
+text_string=Texto
+text_symbol=S\u00EDmbolo de texto
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=El n\u00FAmero de argumentos no es correcto
+the_result_is_not_a_boolean_value=El resultado no es un boolean
+to=Hasta
+Tools_Select=Selecci\u00F3n de herramientas
+true=Verdadero
+units=Unidades
+URL=
+use_default_symbol=S\u00EDmbolo por defecto
+use_outline=Usar borde
+use_the_same_scale_range_as_the_feature_layer=Usar el mismo rango de escalas que el elemento de la capa
+user_defined_labels=Etiquetas definidas por el usuario
+usupported_layer_type=Tipo de capa no soportado
+value=Valor
+value_fields=Campos de valores
+variation_by=Variaci\u00F3n por
+verify=Verificar
+visible=Visible
+visualization=Visualizaci\u00F3n
+warning=Aviso
+width=Ancho
+x_offset=Desplazamiento en X
+y_offset=Desplazamiento en Y
+yes=Si
+_Set_new_background_image=Establecer imagen de fondo
+_Set_label_offset=Ajustar posici\u00F3n de etiqueta
+_Expressions_are_correct=Las expresiones son v\u00E1lidas
+_Use_halo=Usar halo
+_Halo_width=Anchura de halo
+_There_are_N_expressions_N_are_empty_and_N_rectangles_Check_label_expressions_and_background_image_properties=Se han creado {0} expresiones ({1} est\u00E1n vac\u00EDas) y {2} rect\u00E1ngulos. Compruebe las expresiones de etiqueta y las propiedades de la imagen de fondo.
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ro.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ro.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ro.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [ro]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=Va fi utilizat un simbol prestabilit
+above=Deasupra
+accept=Accept
+accessing_file_structure=Se acceseaz\u0103 structura fi\u015fierului
+add=Adaug\u0103
+add_class=Adaug\u0103 clas\u0103
+add_expression=Adaug\u0103 expresie
+add_field=Adaug\u0103 c\u00e2mp
+add_operator=Adaug\u0103 operator
+add_text_area=Adaug\u0103 c\u00e2mp text
+all_features=Toate elementele
+all_supported_background_image_formats=Toate formatele de imagini de fundal suportate
+allow_label_overlapping=Permite etichete suprapuse
+always_circular=
+always_horizontal=\u00centotdeauna orizontal
+always_straight=\u00centotdeauna drept
+angle=Unghi
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Aplic\u0103 corec\u021bie vizual\u0103 simbolurilor pentru m\u0103rime \u0219i pozi\u021bie precise
+arguments_added_to_a_costant=Argumente ad\u0103ugate la o constant\u0103
+at_begin=La \u00eenceput
+at_best=La cea mai bun\u0103
+at_end=La sf\u00e2r\u0219it
+at_fields=\u00cen c\u00e2mpuri
+background=
+background_color=Culoare fundal
+background_style=Stil fundal
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Jos
+bitmap_and_svg_image_files=Imagini bitmap \u0219i svg
+boolean_value=Valoare boolen\u0103
+browse=R\u0103sfoie\u015fte
+buffered=Form\u0103 poligon
+cancel=Anulez
+cannot_apply_to_a_non_polygon_layer=Nu se poate aplica la un strat non-poligon
+cannot_be_null=Nu poate fi nul
+cannot_exist_two_label_classes_with_the_same_name=Nu pot exista dou\u0103 clase etichet\u0103 cu acela\u0219i nume
+cannot_install_labeling_method=Nu se poate instala metoda de etichetare
+cant_draw_preview=Imposibil de previzualizat
+change_location=Schimb\u0103 pozi\u021bia
+character_marker=Marcator de caracter
+character_marker_symbol=Simbolul marcatorului de caracter
+choose_marker=Alege\u021bi marcator
+circular=Circular
+class=Clas\u0103
+classes=Clase
+classifying_field_name_not_found=Imposibil de g\u0103sit numele c\u00e2mpului de clasificare
+clear=Elimin\u0103
+color=Culoare\:
+color_field=C\u00e2mp culoare
+color_ramp=Ramp\u0103 de culori
+confirmation_dialog=Dialog de confirmare
+constant=Constant\u0103
+correct_expression=Expresie corect\u0103
+could_not_get_shape_type=Imposibil de citit tipul geometriei.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Nu e poate \u00eenc\u0103rca legenda
+date_value=Valoare dat\u0103
+default=Predefinit
+define_classes_of_features_and_label_each_differently=Definire clase de elemente \u0219i etichetare diferit\u0103 a fiec\u0103rei
+Defines_a_dot_density_symbol_based_on_a_field_value=Define\u015fte un simbol de densitate prin puncte pe baza valorii unui c\u00e2mp
+delete=\u0218terge
+delete_class=\u0218terge clas\u0103
+delete_filter_expression=\u0218terge expresie de filtrare
+densities=Densit\u0103\u021bi
+depth_factor=
+description=Descriere
+divided_by_0=\u00cemp\u0103r\u0163it la 0
+dont_show_labels_when_zoomed=Nu afi\u015fa etichetele la zoom
+dot_density=Densitate puncte
+dot_size=M\u0103rime puncte
+dot_value=Valoare puncte
+draw_quantities_for_each_category=Reprezint\u0103 cantit\u0103\u021bile pentru fiecare categorie.
+draw_quantities_using_symbol_size_to_show_exact_values=Reprezint\u0103 cantit\u0103\u021bile folosind m\u0103rimea simbolurilor pentru a reprezenta valoarea exact\u0103.
+draw_quantities_using_symbol_size_to_show_relative_values=Reprezint\u0103 cantit\u0103\u021bile folosind m\u0103rimea simbolurilor pentru a reprezenta valorile relative.
+duplicate_labels=Strate dublicate
+edit_expression=Editeaz\u0103 expresie
+Enable_layer_preview=Activa\u021bi previzualizare strat
+enter_new_name=Introduce\u021bi nume nou
+error=Eroare
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Filtru incorect\: eroare de codificare
+error_trying_to_access_to_the_layer=Eroare \u00een \u00eencercarea de accesare a stratului
+error_validating_filter_query=Eroare de validare interogare SQL
+expression=Expresii
+expression_creator=Creator expresii
+expressions=Expresii
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=E\u0219ec aplicare etichetare linie. Se va utiliza configura\u021bia predefinit\u0103
+failed_computing_intervals=E\u0219ec calcul intervale
+features=Elemente
+field_number=Num\u0103r c\u00e2mp
+fields=C\u00e2mpuri
+fields_exp=C\u00e2mpuri
+fill_color=Culoare umplere
+fill_properties=Propriet\u0103\u021bi umplere
+filter=Filtru
+filtered_features=Elemente filtrate
+fit_inside_polygon=Potrive\u0219te \u00een interiorul poligonului
+fit_on_text_area=Potrive\u0219te \u00een interiorul casetei de text
+fixed_text_size=M\u0103rime fix\u0103 text
+following_line=Urm\u0103rind linia
+font=Caracter
+foreground_alpha=
+format=Format
+from=De la
+fuente=Caracter
+GeneralLabeling.sample_text=
+generating_intervals=Generare intervale
+getting_layer_shape_type=Ob\u021binere tip strat
+gradient_color=Culoare gradient
+gradient_fill=Umplere gradient
+gradient_fill_symbol=Simbol umplere gradient
+graduated_symbols=Simboluri graduale
+grid=Grid
+high=\u00cen\u0103l\u021bime
+horizontal=Orizontal
+ignore_zero_values=
+in_beyond=Mai jos
+in_layer=\u00een strat
+in_the_middle=La mijloc
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Expresie incorect\u0103
+intervals=Intervale
+invalid_filter_expression=
+invalid_url=Localizator de servicii WFS cu format nevalid.
+it_will_not_be_added=Nu vor fi ad\u0103ugate
+label-point-priority-help=Prioritate\: 0 \= Blocat, 1 \= Cea mai mare, 3 \= Cea mai mic\u0103
+label_class_properties=Propriet\u0103\u021bi clas\u0103 etichetare
+label_expression=Expresie etichetare
+label_expression_editor=Editor expresii etichetare
+label_expression_help=
+label_features_in_the_same_way=Eticheteaz\u0103 elemente la fel
+label_features_in_this_class=Eticheteaz\u0103 elemente din aceast\u0103 clas\u0103
+label_only_when_selected=Eticheteaz\u0103 doar c\u00e2nd elementul este selectat
+label_priority=Prioritate de etichetare
+label_style_could_not_be_painted=
+label_styles=Stiluri etichetare
+labeled_point=
+labeling=Etichetare
+labeling_field=C\u00e2mp de etichetare
+layer_name=Nume strat
+line=Linie
+line_fill=Umplere linie
+line_fill_symbol=Simbol umplere linie
+line_settings=Set\u0103ri linie
+lineal=Liniar
+lines=Linii
+location=Loca\u021bie
+location_along_the_lines=Loca\u021bie de-a lungul liniilor
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Pare a fi o valoare prea mic\u0103 pentru acest c\u00e2mp. Ar putea cauza \u00eencetinirea sistemului.
+low=Jos
+malformed_or_empty_expression=Expresie eronat\u0103 sau goal\u0103
+marker_fill=Umplere marcator
+marker_fill_symbol=Simbol umplere marcator
+marker_line=Linie marcator
+marker_line_symbol=Simbol linie marcator
+mas_de_100_simbolos=Mai mult de o sut\u0103 de simboluri nu permit o citire eficient\u0103 a h\u0103r\u0163ii
+max_scale=Scar\u0103 maxim\u0103
+medium=Mediu
+method=Metoda
+min_scale=Scar\u0103 minim\u0103
+minimum_angle_to_draw=
+modify_filter_expression=Modific\u0103 expresie filtru
+move_down=Mut\u0103 jos
+move_up=Ridic\u0103
+name=Nume
+names_and_types_count_are_disctint=Num\u0103rul de c\u00e2mpuri cu nume \u0219i tipuri difer\u0103
+new_filter_expression=Expresie nou\u0103 filtru
+no=Nu
+no_expression_defined=Nici o expresie definit\u0103
+no_style=F\u0103r\u0103 stil
+no_symbol_especified=Nu exist\u0103 simbol specificat
+none=Nimic
+normalization=Normalizare
+not_save_empty_legend=Legenda goal\u0103 nu va fi salvat\u0103
+numeric_value=Valoare numeric\u0103
+offset=Deplasare
+offset_label=Deplasare etichet\u0103
+offset_labels_horizontally=Deplasare etichete orizontal \u00een jurul unui punct.
+offset_labels_on_top_of_the_points=Deplasare etichete \u00een partea de sus a punctelor.
+on_the_line=Pe linie
+operators=Operatori
+options=Op\u0163iuni
+orientation=Orientare
+orientation_system=Sistem de orientare
+out_beyond=Peste
+outline=Contur
+outline_opacity=Opacitate contur
+outline_width=Grosime contur
+page=Pagin\u0103
+parallel=Paralel
+pattern=Model
+percentage=Procentaj
+perpedicular=Perpendicular
+picture_file=Fi\u0219ier imagine
+picture_fill=Umplere imagine
+picture_fill_symbol=Simbol umplere imagine
+picture_line_symbol=Simbol linie imagine
+picture_marker=Marcator imagine
+picture_marker_symbol=Simbol marcator imagine
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Plaseaz\u0103 c\u00e2te o etichet\u0103 de element
+place_one_label_per_feature_part=Plaseaz\u0103 c\u00e2te o etichet\u0103 pentru fiecare parte de element
+placement=Amplasare
+placement_priorities_selector=Selector priorit\u0103\u021bi de amplasare
+placement_properties=Propriet\u0103\u021bi de amplasare
+point_settings=Set\u0103ri punct
+points=Puncte
+polygon=Poligon
+polygon_settings=Set\u0103ri poligon
+position=Pozi\u021bie
+prefer_top_right_all_allowed=De preferin\u021b\u0103, \u00een col\u021bul din dreapta-sus, dar toate pozi\u0163ie se accept\u0103
+preview=Previzualizare
+preview_not_available=Previzualizare indisponibil\u0103
+properties=Propriet\u0103\u0163i
+proportional_symbols=Simboluri propor\u021bionale
+quantity_by_category=Cantit\u0103\u021bi pe categorie
+quiere_continuar=Dori\u0163i s\u0103 continua\u0163i?
+Quitar=Elimin\u0103
+Quitar_todos=Elimin\u0103 totul
+random=Aleator
+recovering_recordset=Recuperare recordset.
+rectangular=Rectangular
+remane_class=Redenumire clas\u0103
+remove=\u015eterge
+remove_duplicate_labels=Elimin\u0103 etichete suprapuse
+resto_valores=Alte valori
+scale=Scar\u0103
+scale_range_window_title=Domeniu de scar\u0103
+select=Select
+select_one_row=Selecteaz\u0103 un r\u00e2nd
+selection_picture_file=Imaginea selec\u021biei
+separation=Separare
+set_forbidden_precedence=Stabile\u0219te preceden\u021b\u0103 nul\u0103
+set_high_precedence=Stabile\u0219te preceden\u021b\u0103 maxim\u0103
+set_low_precedence=Stabile\u0219te preceden\u021b\u0103 joas\u0103
+set_normal_precedence=Stabile\u0219te preceden\u021b\u0103 normal\u0103
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Aratp elemente le stratului dependent de valoarea expresiei filtrului
+size=M\u0103rime
+SLD_grammar=Gramatica SLD
+some_arguments_are_incorrect=Unele argumante sunt incorecte
+specify_the_range_of_scales_at_which_labels_will_be_shown=Specific\u0103 domeniile de scar\u0103 la care etichetele vor fi afi\u0219ate
+SQL_query=Inrerogare SQL
+statistics=Statistici
+string_value=Valoare \u0219ir (string)
+style=Stil
+style_selector=Selector de stiluri
+symbol=Simbol
+symbol_field=C\u00e2mp simboluri
+symbol_shapetype_mismatch=
+syntax_error=Eroare de sintax\u0103
+template=\u0218ablon
+text=Text
+text_field=Text
+text_fields=C\u00e2mpuri text
+text_string=Text
+text_symbol=Simbol text
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=Num\u0103rul de argumente nu este corect
+the_result_is_not_a_boolean_value=Rezultatul nu este o valoare boolean\u0103
+to=C\u0103tre
+URL=
+use_outline=Utilizeaz\u0103 contur
+use_the_same_scale_range_as_the_feature_layer=Utilizeaz\u0103 acela\u0219i interval de scar\u0103 ca \u0219i elementul stratului
+user_defined_labels=Etichete definite de utilizator
+usupported_layer_type=Tip nesuportat
+value=Valoare
+value_fields=C\u00e2mpuri cu valori
+variation_by=Varian\u021b\u0103 dup\u0103
+verify=Verific\u0103
+visible=Vizibil
+visualization=Vizualizare
+warning=Aten\u0163ie
+width=L\u0103\u0163ime
+x_offset=Deplasare X
+y_offset=Deplasare Y
+yes=Da
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [zh]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=
+above=
+accept=\u786e\u5b9a
+accessing_file_structure=
+add=\u6dfb\u52a0
+add_class=
+add_expression=
+add_field=\u6dfb\u52a0\u5b57\u6bb5
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=\u80cc\u666f\u989c\u8272
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=
+browse=\u6d4f\u89c8
+buffered=
+cancel=\u53d6\u6d88
+cannot_apply_to_a_non_polygon_layer=
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=
+character_marker_symbol=
+choose_marker=
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=\u6e05\u9664
+color=\u989c\u8272\:
+color_field=
+color_ramp=
+confirmation_dialog=
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=
+date_value=
+default=\u9ed8\u8ba4
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=
+delete=
+delete_class=
+delete_filter_expression=
+densities=
+depth_factor=
+description=\u63cf\u8ff0
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=
+dot_size=
+dot_value=
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=\u9519\u8bef
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=
+expression_creator=
+expressions=
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=
+fields_exp=
+fill_color=
+fill_properties=
+filter=\u7b5b\u9009
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=\u683c\u5f0f
+from=\u6765\u81ea
+fuente=\u5b57\u4f53
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=
+high=
+horizontal=\u6c34\u5e73\u7684
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=\u56fe\u5c42\u540d
+line=\u76f4\u7ebf
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=\u4f4d\u7f6e
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=
+malformed_or_empty_expression=
+marker_fill=
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=\u6709100\u591a\u4e2a\u7b26\u53f7\uff0c\u4e00\u822c\u5728\u5e73\u9762\u4e0a\u4e0d\u4f1a\u63d0\u4f9b\u4fe1\u606f\u3002
+max_scale=\u6700\u5927\u6bd4\u4f8b
+medium=
+method=
+min_scale=\u6700\u5c0f\u6bd4\u4f8b
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=\u540d\u79f0
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=\u5426
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=None
+normalization=
+not_save_empty_legend=
+numeric_value=
+offset=
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=\u9009\u9879
+orientation=
+orientation_system=
+out_beyond=
+outline=
+outline_opacity=
+outline_width=
+page=\u9875
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=\u591a\u8fb9\u5f62
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=
+preview_not_available=
+properties=\u5c5e\u6027
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=\u60a8\u8981\u7ee7\u7eed\u5417?
+Quitar=\u5220\u9664
+Quitar_todos=\u5168\u90e8\u5220\u9664
+random=
+recovering_recordset=
+rectangular=
+remane_class=
+remove=\u5220\u9664
+remove_duplicate_labels=
+resto_valores=\u5176\u5b83\u6570\u636e
+scale=\u6bd4\u4f8b
+scale_range_window_title=
+select=\u9009\u62e9
+select_one_row=
+selection_picture_file=
+separation=
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=\u5927\u5c0f
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=\u7edf\u8ba1
+string_value=
+style=\u98ce\u683c
+style_selector=
+symbol=
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=\u5230
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=\u6570\u636e
+value_fields=
+variation_by=
+verify=
+visible=\u660e\u663e\u7684
+visualization=
+warning=\u8b66\u544a
+width=\u5bbd\u5ea6
+x_offset=
+y_offset=
+yes=\u662f
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [ca]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=S'utilitzar\u00e0 un s\u00edmbol per defecte
+above=Amunt
+accept=Acceptar
+accessing_file_structure=Accedint a l'estructura del fitxer
+add=Afegir
+add_class=Afegir classe
+add_expression=Afegir expressi\u00f3
+add_field=Afegir camp
+add_operator=Afegir operador
+add_text_area=Afegir camp de text
+all_features=Tots els elements
+all_supported_background_image_formats=Tots els formats d'imatge de fons suportats
+allow_label_overlapping=Permetre superposici\u00f3 de les etiquetes
+always_circular=
+always_horizontal=Sempre horitzontal
+always_straight=Sempre recte
+angle=Angle
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Aplicar correcci\u00f3 visual al car\u00e0cter per a precisi\u00f3 en dimensi\u00f3 i posici\u00f3.
+arguments_added_to_a_costant=Argument afegit a una constant
+at_begin=Al principi
+at_best=En la millor
+at_end=Al final
+at_fields=en els camps
+background=
+background_color=Color de fons
+background_style=Estil de fons
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Davall
+bitmap_and_svg_image_files=Imatges SVG i de mapa de bits
+boolean_value=Valor boole\u00e0
+browse=Examinar
+buffered=Forma del pol\u00edgon
+cancel=Cancel\u00b7lar
+cannot_apply_to_a_non_polygon_layer=No pot aplicar-se a una capa no poligonal
+cannot_be_null=No pot ser nul
+cannot_exist_two_label_classes_with_the_same_name=No poden haver dos etiquetes amb el mateix nom
+cannot_install_labeling_method=No es pot instal\u00b7lar el m\u00e8tode d'etiquetatge
+cant_draw_preview=No es pot dibuixar la previsualitzaci\u00f3
+change_location=Canviar ubicaci\u00f3
+character_marker=Marcador de car\u00e0cter
+character_marker_symbol=S\u00edmbol de marcador de car\u00e0cter
+choose_marker=Elegir marcador
+circular=Circular
+class=Classe
+classes=Classes
+classifying_field_name_not_found=Camp de classificaci\u00f3 no trobat
+clear=Netejar
+color=Color\:
+color_field=Camp de colors
+color_ramp=Rampa de color
+confirmation_dialog=Di\u00e0leg de confirmaci\u00f3
+constant=constant
+correct_expression=Expressi\u00f3 correcta
+could_not_get_shape_type=No s'ha pogut obtindre el tipus de geometria
+could_not_retreive_layer_field_names=
+could_not_setup_legend=No es pot carregar la llegenda
+date_value=Valor data
+default=Per defecte
+define_classes_of_features_and_label_each_differently=Definir diferents classes d'entitats i etiquetar-les de manera diferent
+Defines_a_dot_density_symbol_based_on_a_field_value=Definix una llegenda de densitat de punts basada en el valor d'un determinat camp.
+delete=Eliminar
+delete_class=Eliminar classe
+delete_filter_expression=Eliminar expressi\u00f3 de filtratge
+densities=Densitats
+depth_factor=
+description=Descripci\u00f3
+divided_by_0=Divisi\u00f3 per 0
+dont_show_labels_when_zoomed=No mostrar les etiquetes quan es fa\u00e7a zoom
+dot_density=Densitat de punts
+dot_size=Dimensi\u00f3 de punt
+dot_value=Valor del punt
+draw_quantities_for_each_category=Representa quantitats per a cada categoria.
+draw_quantities_using_symbol_size_to_show_exact_values=Representa quantitats a trav\u00e9s de la dimensi\u00f3 del s\u00edmbol mostrant valors exactes
+draw_quantities_using_symbol_size_to_show_relative_values=Representa quantitats a trav\u00e9s de la dimensi\u00f3 d'un s\u00edmbol mostrant valors relatius.
+duplicate_labels=Etiquetes repetides
+edit_expression=Editar expressi\u00f3
+Enable_layer_preview=Activar previsualitzaci\u00f3 de capa
+enter_new_name=Introdu\u00efsca el nom nou
+error=Error
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Filtre amb format incorrecte\: error en codificar
+error_trying_to_access_to_the_layer=Error en intentar accedir a la capa
+error_validating_filter_query=Error en validar la consulta SQL
+expression=Expressi\u00f3
+expression_creator=Crear expressi\u00f3 de filtrat
+expressions=Expressions
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Ha fallat en aplicar l'etiquetatge seguint la l\u00ednia. S'utilitzar\u00e0 la configuraci\u00f3 per defecte
+failed_computing_intervals=Ha fallat en calcular intervals
+features=Objectes
+field_number=N\u00famero de camp
+fields=Camps
+fields_exp=Camps
+fill_color=Color d'ompliment
+fill_properties=Propietats d'ompliment
+filter=Filtre
+filtered_features=Elements filtrats
+fit_inside_polygon=Acoblar dins del pol\u00edgon
+fit_on_text_area=Ajustar a l'\u00e0rea de text
+fixed_text_size=Dimensi\u00f3 fixa del text
+following_line=Seguint la l\u00ednia
+font=Font
+foreground_alpha=
+format=Format
+from=Des de
+fuente=Font
+GeneralLabeling.sample_text=
+generating_intervals=Generant intervals
+getting_layer_shape_type=Obtenint el tipus de shape
+gradient_color=Color gradient
+gradient_fill=Ompliment gradient
+gradient_fill_symbol=S\u00edmbol d'ompliment gradient
+graduated_symbols=S\u00edmbols graduats
+grid=Malla
+high=Alta
+horizontal=Horitzontal
+ignore_zero_values=
+in_beyond=Per davall de
+in_layer=en capa
+in_the_middle=En meitat
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Expressi\u00f3 incorrecta
+intervals=Intervals
+invalid_filter_expression=
+invalid_url=Localitzador de servidor WFS amb format no v\u00e0lid.
+it_will_not_be_added=No s'hi afegir\u00e0
+label-point-priority-help=Prioritat\: 0 \= Blocatge, 1 \= M\u00e9s alta, 3 \= M\u00e9s baixa
+label_class_properties=Propietats de la classe d'etiquetatge
+label_expression=Expressi\u00f3 d'etiquetatge
+label_expression_editor=Editor d'expressions d'etiqueta
+label_expression_help=
+label_features_in_the_same_way=Etiquetar totes les entitats de la mateixa manera
+label_features_in_this_class=Etiquetar entitats dins d'esta classe
+label_only_when_selected=Etiquetar solament quan les entitats estiguen seleccionades
+label_priority=Prioritat en l'etiquetatge
+label_style_could_not_be_painted=
+label_styles=Estils d'etiqueta
+labeled_point=
+labeling=Etiquetatge
+labeling_field=Camp d'etiquetatge
+layer_name=Nom de la capa
+line=L\u00ednia
+line_fill=Ompliment de l\u00ednies
+line_fill_symbol=S\u00edmbol d'ompliment de l\u00ednies 
+line_settings=Configuraci\u00f3 de l\u00ednia
+lineal=Lineal
+lines=L\u00ednies
+location=Ubicaci\u00f3
+location_along_the_lines=Ubicaci\u00f3 al llarg de les l\u00ednies
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=Sembla un valor per al punt massa baix, pot causar que el sistema responga molt lentament.
+low=Baixa
+malformed_or_empty_expression=Expressi\u00f3 buida o err\u00f2nia
+marker_fill=Ompliment de marcadors
+marker_fill_symbol=S\u00edmbol d'ompliment de marcadors
+marker_line=L\u00ednia de marcadors
+marker_line_symbol=S\u00edmbol de l\u00ednia de marcadors
+mas_de_100_simbolos=M\u00e9s de 100 s\u00edmbols no solen aportar informaci\u00f3 en un pla
+max_scale=Escala m\u00e0x.
+medium=Mitjana
+method=Operaci\u00f3
+min_scale=Escala m\u00edn.
+minimum_angle_to_draw=
+modify_filter_expression=Modificar expressi\u00f3 de filtratge
+move_down=Baixar
+move_up=Pujar
+name=Nom
+names_and_types_count_are_disctint=Nombre de camps i nombre de tipus de camp distints
+new_filter_expression=Nova expressi\u00f3 de filtratge
+no=No
+no_expression_defined=Expressi\u00f3 no definida
+no_style=Sense estil
+no_symbol_especified=S\u00edmbol no espec\u00edficat
+none=None
+normalization=Normalitzaci\u00f3
+not_save_empty_legend=Llegenda buida no es guardar\u00e0.
+numeric_value=Valor num\u00e8ric
+offset=Despla\u00e7ament
+offset_label=Despla\u00e7ar etiqueta
+offset_labels_horizontally=Despla\u00e7ar etiquetes horitzontalment al voltant del punt.
+offset_labels_on_top_of_the_points=Situar etiquetes sobre els punts.
+on_the_line=Sobre la l\u00ednia
+operators=Operadors
+options=Opcions
+orientation=Orientaci\u00f3
+orientation_system=Orientaci\u00f3
+out_beyond=Per damunt de
+outline=Vora
+outline_opacity=Opacitat de la vora
+outline_width=Ampl\u00e0ria de la vora
+page=P\u00e0gina
+parallel=Paral\u00b7lela
+pattern=Patr\u00f3
+percentage=Percentatge
+perpedicular=Perpendicular
+picture_file=Fitxer imatge
+picture_fill=Ompliment d'imatge
+picture_fill_symbol=S\u00edmbol d'ompliment d'imatge
+picture_line_symbol=S\u00edmbol de l\u00ednia d'imatge
+picture_marker=Marcador d'imatge
+picture_marker_symbol=S\u00edmbol de marcador d'imatge
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Situar \u00fanicament una etiqueta per entitat
+place_one_label_per_feature_part=Situar una etiqueta per cada part de l'entitat
+placement=Col\u00b7locaci\u00f3
+placement_priorities_selector=Selector de prioritats de col\u00b7locaci\u00f3
+placement_properties=Propietats de col\u00b7locaci\u00f3
+point_settings=Configuraci\u00f3 de punt
+points=Punts
+polygon=Pol\u00edgon
+polygon_settings=Configuraci\u00f3 de pol\u00edgon
+position=Posici\u00f3
+prefer_top_right_all_allowed=Preferiblement dalt a la dreta, per\u00f2 permetent qualsevol posici\u00f3
+preview=Previsualitzaci\u00f3
+preview_not_available=Vista pr\u00e8via no disponible
+properties=Propietats
+proportional_symbols=S\u00edmbols proporcionals
+quantity_by_category=Quantitats per categoria
+quiere_continuar=Est\u00e0 segur que vol continuar?
+Quitar=Llevar
+Quitar_todos=Llevar tots
+random=Aleatori
+recovering_recordset=Recuperant recordset.
+rectangular=Rectangular
+remane_class=Reanomenar classe
+remove=Llevar
+remove_duplicate_labels=Eliminar etiquetes repetides
+resto_valores=Resta de valors
+scale=Escalar
+scale_range_window_title=Rang d'escales
+select=Seleccionar
+select_one_row=Selecciona una fila
+selection_picture_file=Imatge de selecci\u00f3
+separation=Separaci\u00f3
+set_forbidden_precedence=Establir preced\u00e8ncia nul\u00b7la
+set_high_precedence=Establir m\u00e0xima preced\u00e8ncia
+set_low_precedence=Establir baixa preced\u00e8ncia
+set_normal_precedence=Establir preced\u00e8ncia normal
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Mostra els elements de la capa en funci\u00f3 d'una determinada expressi\u00f3 de filtratge
+size=Dimensi\u00f3
+SLD_grammar=Gram\u00e0tica SLD
+some_arguments_are_incorrect=Alguns arguments s\u00f3n incorrectes
+specify_the_range_of_scales_at_which_labels_will_be_shown=Especificar el rang d'escales en el qual les etiquetes seran mostrades
+SQL_query=Sent\u00e8ncia SQL
+statistics=Estad\u00edstiques
+string_value=Valor cadena
+style=Estil
+style_selector=Selector d'estils
+symbol=S\u00edmbol
+symbol_field=Camp de s\u00edmbol graduat
+symbol_shapetype_mismatch=
+syntax_error=Error de sintaxi
+template=Plantilla
+text=Text
+text_field=Text
+text_fields=Camps de text
+text_string=Text
+text_symbol=S\u00edmbol de text
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=El nombre d'arguments no \u00e9s correcte
+the_result_is_not_a_boolean_value=El resultat no \u00e9s un boolean
+to=Fins a
+URL=
+use_outline=Usar vora
+use_the_same_scale_range_as_the_feature_layer=Usar el mateix rang d'escales que l'element de la capa
+user_defined_labels=Etiquetes definides per l'usuari
+usupported_layer_type=Tipus de capa no suportat
+value=Valor
+value_fields=Camps de valors
+variation_by=Variaci\u00f3 per
+verify=Verificar
+visible=Visible
+visualization=Visualitzaci\u00f3
+warning=Av\u00eds
+width=Amplada
+x_offset=Despla\u00e7ament en X
+y_offset=Despla\u00e7ament en Y
+yes=S\u00ed
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [pt]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=
+above=
+accept=Aceitar
+accessing_file_structure=
+add=Adicionar
+add_class=
+add_expression=
+add_field=Adicionar campo
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=Cor de fundo
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=
+browse=Procurar
+buffered=
+cancel=Cancelar
+cannot_apply_to_a_non_polygon_layer=
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=
+character_marker_symbol=
+choose_marker=
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=Limpar
+color=Cor\:
+color_field=
+color_ramp=
+confirmation_dialog=
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=
+date_value=
+default=Por defeito
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=
+delete=
+delete_class=
+delete_filter_expression=
+densities=
+depth_factor=
+description=Descri\u00e7\u00e3o
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=
+dot_size=
+dot_value=
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=Error
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Formato do filtro incorrecto, erro codificando
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=
+expression_creator=
+expressions=
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=Campos
+fields_exp=
+fill_color=
+fill_properties=
+filter=Filtro
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=Formato
+from=Desde
+fuente=Fonte
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=
+high=
+horizontal=Horizontal
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=Nome da capa
+line=Linha
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=
+malformed_or_empty_expression=
+marker_fill=
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=Mais de 100 s\u00edmbolos n\u00e3o contribuem para uma clara informa\u00e7\u00e3o de um mapa.
+max_scale=Valor m\u00e1ximo da escala
+medium=
+method=
+min_scale=Valor m\u00ednimo da escala
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=Nome
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=No
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=Nenhum
+normalization=
+not_save_empty_legend=
+numeric_value=
+offset=
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=Op\u00e7\u00f5es
+orientation=
+orientation_system=
+out_beyond=
+outline=Borde
+outline_opacity=
+outline_width=
+page=P\u00e1gina
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=Pol\u00edgono
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=
+preview_not_available=
+properties=Propriedades
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=Tem a certeza de que quer continuar?
+Quitar=Remover
+Quitar_todos=Remover todos
+random=
+recovering_recordset=
+rectangular=
+remane_class=
+remove=Remover
+remove_duplicate_labels=
+resto_valores=Resto de valores
+scale=Escala
+scale_range_window_title=
+select=Seleccionar
+select_one_row=
+selection_picture_file=
+separation=
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=Tamanho
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=Estat\u00edsticas
+string_value=
+style=Estilo
+style_selector=
+symbol=S\u00edmbolo
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=Texto
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=At\u00e9
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=Valor
+value_fields=
+variation_by=
+verify=
+visible=Vis\u00edvel
+visualization=
+warning=Aviso
+width=Ampl\u00e0ria
+x_offset=
+y_offset=
+yes=Sim
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_sr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_sr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_sr.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [sr]
+#Mon Nov 02 08:36:03 CET 2009
+a_default_symbol_will_be_used=Bi\u0107e upotrebljen default simbol
+above=Iznad
+accept=Prihvati
+accessing_file_structure=Pristup strukturi datoteke u toku
+add=Dodaj
+add_class=Dodaj klasu
+add_expression=Dodaj izraz
+add_field=Dodaj polje
+add_operator=Dodaj operater
+add_text_area=Dodaj tekstualno polje
+all_features=Svi elementi
+all_supported_background_image_formats=Svi podr\u017eani formati pozadina 
+allow_label_overlapping=Odobri preklapanje etiketa
+always_circular=
+always_horizontal=Uvek horizontalno
+always_straight=Uvek pravo 
+angle=Ugao
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=Primeni vizualnu korekciju na karakter u cilju preciziranja veli\u010dine i pozicije.
+arguments_added_to_a_costant=Argument je dodat konstanti
+at_begin=Na po\u010detku
+at_best=Na najboljem
+at_end=Na kraju
+at_fields=u poljima
+background=
+background_color=Boja pozadine
+background_style=Stil podloge
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Ispod
+bitmap_and_svg_image_files=Datoteke sa slikama SVG i bit mapom
+boolean_value=Boolean vrednost
+browse=Pretra\u017ei
+buffered=Oblik poligona
+cancel=Odustani
+cannot_apply_to_a_non_polygon_layer=Ne mo\u017ee se primeniti na "ne-poligonski" lejer
+cannot_be_null=Ne mo\u017ee biti 0
+cannot_exist_two_label_classes_with_the_same_name=Ne mogu postojati dve etikete sa istim imenom
+cannot_install_labeling_method=Ne mo\u017ee se instalirati metod etiketiranja
+cant_draw_preview=Ne mo\u017ee se nacrtati pretprikaz
+change_location=Promeni lokaciju
+character_marker=Marker karaktera
+character_marker_symbol=Simbol markera karaktera
+choose_marker=Izaberi marker
+circular=Kru\u017eni
+class=Klasa
+classes=Klase
+classifying_field_name_not_found=Klasifikaciono polje nije prona\u0111eno
+clear=Izbri\u0161i
+color=Boja\:
+color_field=Polje sa bojama
+color_ramp=Rampa za boje
+confirmation_dialog=Dijalog za potvrdu
+constant=konstanta
+correct_expression=Ispravan izraz
+could_not_get_shape_type=Ne mo\u017ee se dobiti tip geometrije.
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Nije se mogla u\u010ditati legenda
+date_value=Vrednost datuma
+default=Default (podrazumevana vrednost)
+define_classes_of_features_and_label_each_differently=Defini\u0161i razli\u010dite klase entiteta i dodeli ima razli\u010dite etikete
+Defines_a_dot_density_symbol_based_on_a_field_value=Defini\u0161e legendu gustine ta\u010daka koja je zasnovana na vrednosti odre\u0111enog polja
+delete=Izbri\u0161i
+delete_class=Izbri\u0161i klasu
+delete_filter_expression=Izbri\u0161i izraz filtera
+densities=Gustine
+depth_factor=
+description=Opis
+divided_by_0=Podeljeno sa 0
+dont_show_labels_when_zoomed=Ne prikazivati etikete prilikom zumiranja
+dot_density=Gustina ta\u010daka
+dot_size=Veli\u010dina ta\u010daka
+dot_value=Vrednost ta\u010dke
+draw_quantities_for_each_category=Predstavlja koli\u010dine za svaku kategoriju.
+draw_quantities_using_symbol_size_to_show_exact_values=Predstavlja koli\u010dine preko veli\u010dine simbola prikazivanjem ta\u010dnih vrednosti.
+draw_quantities_using_symbol_size_to_show_relative_values=Predstavlja koli\u010dine posredstvom veli\u010dine simbola prikazuju\u0107i relativne vrednosti.
+duplicate_labels=Ponovljene etikete
+edit_expression=Izmeni izraz
+Enable_layer_preview=Aktivirati pregled lejera
+enter_new_name=Unesite novi naziv
+error=Gre\u0161ka
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=Filter sa pogre\u0161nim formatom\: gre\u0161ka pri kodifikovanju
+error_trying_to_access_to_the_layer=Gre\u0161ka pri poku\u0161aju da se pristupi lejeru
+error_validating_filter_query=Gre\u0161ka pri validaciji SQL upita 
+expression=Izraz
+expression_creator=Kreiraj izraz filtera
+expressions=Izrazi
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=Neuspe\u0161na primena etiketa slede\u0107i liniju. Upotrebi\u0107e se default konfiguracija
+failed_computing_intervals=Neuspe\u0161no izra\u010dunavanje intervala
+features=Objekti
+field_number=Broj polja
+fields=Polja
+fields_exp=Polja
+fill_color=Boja za popunjavanje
+fill_properties=Karakteristike za popunjavanje
+filter=Filter
+filtered_features=Filtrirani elementi
+fit_inside_polygon=Smesti u okviru poligona
+fit_on_text_area=Podesi u skladu sa prostorom za tekst
+fixed_text_size=Fiksna veli\u010dina teksta
+following_line=Slede\u0107a linija
+font=Font
+foreground_alpha=
+format=Format
+from=Od
+fuente=Font
+GeneralLabeling.sample_text=
+generating_intervals=Kreiranje intervala
+getting_layer_shape_type=Dobijanje shape tipa u toku
+gradient_color=Boja gradijenta
+gradient_fill=Gradient fill (Stepenasto popunjavanje)
+gradient_fill_symbol=Simbol gradient fill (Simbol stepenastog popunjavanja)
+graduated_symbols=Stepenovani simboli
+grid=Re\u0161etka
+high=Visoka
+horizontal=Horizontalno
+ignore_zero_values=
+in_beyond=Ispod
+in_layer=u lejeru
+in_the_middle=U sredini
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Pogre\u0161an izraz.
+intervals=Intervali
+invalid_filter_expression=
+invalid_url=Lokator WFS servera sa pogre\u0161nim formatom.
+it_will_not_be_added=Ne\u0107e biti dodata
+label-point-priority-help=Prioritet\: 0 \= Blokiran, 1 \= Najvi\u0161i, 3 \= Najni\u017ei
+label_class_properties=Osobine klase etikete
+label_expression=Izraz etikete
+label_expression_editor=Editor izraza etikete
+label_expression_help=
+label_features_in_the_same_way=Etiketiraj sve entitete na isti na\u010din
+label_features_in_this_class=Etiketiraj entitete u okviru ove klase
+label_only_when_selected=Etiketiraj samo kada su entiteti ozna\u010deni
+label_priority=Prioritet u etiketiranju
+label_style_could_not_be_painted=
+label_styles=Stilovi etikete
+labeled_point=
+labeling=Etiketiranje
+labeling_field=Polje za etiketiranje
+layer_name=Naziv lejera
+line=Linija
+line_fill=Popunjavanje linija
+line_fill_symbol=Simbol popunjavanja linija
+line_settings=Konfiguracija linije
+lineal=Linearno
+lines=Linije
+location=Lokacija
+location_along_the_lines=Lociranje du\u017e linija
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=\u010cini se da je zadata preniska vrednost za ovo polje \u0161to mo\u017ee uzrokovati usporen rad sistema.
+low=Niska
+malformed_or_empty_expression=Prazan ili pogre\u0161an izraz
+marker_fill=Punjenje markera
+marker_fill_symbol=Simbol punjenja markera
+marker_line=L linija markera
+marker_line_symbol=Simbol linije markera
+mas_de_100_simbolos=Vi\u0161e od 100 simbola obi\u010dno ne daju nikakvu informaciju na planu.
+max_scale=Maksimalna proporcija
+medium=Srednja
+method=Operacija
+min_scale=Minimalna proporcija
+minimum_angle_to_draw=
+modify_filter_expression=Izmeni izraz filtera
+move_down=Pomeri na dole
+move_up=Pomeri na gore
+name=Naziv
+names_and_types_count_are_disctint=Broj polja i broj tipova razli\u010ditih polja
+new_filter_expression=Novi izraz filtera
+no=Ne
+no_expression_defined=Izraz nije definisan
+no_style=Nema stila
+no_symbol_especified=Simbol nije definisan
+none=Nijedan
+normalization=Normalizacija
+not_save_empty_legend=Prazna legenda ne\u0107e biti sa\u010duvana.
+numeric_value=Numeri\u010dka vrednost
+offset=Pomeranje
+offset_label=Pomeranje etikete
+offset_labels_horizontally=Pomeranje etiketa po horizontali oko ta\u010dke.
+offset_labels_on_top_of_the_points=Sme\u0161tanje etiketa povrh ta\u010daka.
+on_the_line=Na liniji
+operators=Operateri
+options=Opcije
+orientation=Orijentacija
+orientation_system=Sistem orijentacije
+out_beyond=Iznad
+outline=Konture
+outline_opacity=Neprozirnost ivice
+outline_width=\u0160irina ivice
+page=Stranica
+parallel=Paralelna
+pattern=\u0160ema
+percentage=Procenat
+perpedicular=Perpendikularan
+picture_file=Datoteka sa slikama
+picture_fill=Popunjavanj eslike
+picture_fill_symbol=Simbol popunjavanja slike
+picture_line_symbol=Simbol linije slike
+picture_marker=Marker slike
+picture_marker_symbol=Simbol markera slike
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Postaviti samo jednu etiketu po entitetu
+place_one_label_per_feature_part=Postaviti jednu etiketu za svaki deo entiteta
+placement=Postavljanje
+placement_priorities_selector=Selektor osobina postavljanja
+placement_properties=Osobine postavljanja
+point_settings=Pode\u0161avanje ta\u010dke
+points=Ta\u010dke
+polygon=Poligon
+polygon_settings=Pode\u0161avanje poligona
+position=Pozicija
+prefer_top_right_all_allowed=Najradije gore desno, ali mogu\u0107a i bilo koja druga pozicija
+preview=Prikaz
+preview_not_available=Prikaz nije na raspolaganju
+properties=Karakteristike
+proportional_symbols=Proporcionalni sistemi
+quantity_by_category=Koli\u010dine po kategoriji
+quiere_continuar=\u017delite li da nastavite?
+Quitar=Ukloni
+Quitar_todos=Ukloni sve
+random=Slu\u010dajan
+recovering_recordset=Povratiti recordset.
+rectangular=Pravougaono
+remane_class=Promeni naziv klase
+remove=Ukloni
+remove_duplicate_labels=Ukloni etikete koje se ponavljaju
+resto_valores=Ostale vrednosti
+scale=Proporcija
+scale_range_window_title=Rang razmere
+select=Izaberi
+select_one_row=Izaberi jedan red
+selection_picture_file=Slika izbora
+separation=Razdvajanje
+set_forbidden_precedence=Utvrditi prioritet nula
+set_high_precedence=Utvrditi maksimalan prioritet 
+set_low_precedence=Uspostaviti niski prioritet
+set_normal_precedence=Navedi normalan prioritet
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=Prikazuje elemente lejera u zavisnosti od vrednosti izraza filtera
+size=Dimenzije
+SLD_grammar=SLD gramatika
+some_arguments_are_incorrect=Neki argumenti su pogre\u0161ni
+specify_the_range_of_scales_at_which_labels_will_be_shown=Podesi rang razmere u okviru koga \u0107e se prikazati etikete
+SQL_query=SQL upit
+statistics=Statistika
+string_value=Vrednost lanca
+style=Stil
+style_selector=Selektor stilova
+symbol=Simbol
+symbol_field=Polje sa stepenovanim simbolom
+symbol_shapetype_mismatch=
+syntax_error=Gre\u0161ka u sintaksi
+template=\u0160ablon
+text=Tekst
+text_field=Tekst
+text_fields=Tekstualna polja
+text_string=Tekst
+text_symbol=Tekstualni simbol
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=Broj argumenata je neispravan
+the_result_is_not_a_boolean_value=Rezultat nije vrednost boolean
+to=Do
+URL=
+use_outline=Upotrebi ivicu
+use_the_same_scale_range_as_the_feature_layer=Upotrebi isti rang razmera koji ima element lejera.
+user_defined_labels=Korisnik je definisao etikete
+usupported_layer_type=Tip lejera nije podr\u017ean
+value=Vrednost
+value_fields=Polja sa vrednostima
+variation_by=Varijacija po
+verify=Proveriti
+visible=Vidljiv
+visualization=Vizualizacija
+warning=Upozorenje
+width=\u0160irina
+x_offset=Premestiti na X
+y_offset=Pomeranje na Y
+yes=Da
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_tr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_tr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_tr.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [tr]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=
+above=\u00dcst
+accept=Kabul et
+accessing_file_structure=Dosya yap\u0131s\u0131na eri\u015filiyor
+add=Ekle
+add_class=S\u0131n\u0131f ekle
+add_expression=\u0130fade ekle
+add_field=Alan ekle
+add_operator=\u0130\u015fletmen ekle
+add_text_area=Metin alan\u0131 ekle
+all_features=T\u00fcm objeler
+all_supported_background_image_formats=T\u00fcm desteklenen arkaplan g\u00f6r\u00fcnt\u00fc bi\u00e7imleri
+allow_label_overlapping=Etiketleri \u00fcst\u00fcne bindir
+always_circular=
+always_horizontal=Daima yatay
+always_straight=
+angle=A\u00e7\u0131
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=Ba\u015flang\u0131\u00e7ta
+at_best=En iyisi
+at_end=Sonunda
+at_fields=alanlarda
+background=
+background_color=Artalan rengi
+background_style=Artalan bi\u00e7emi
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=Alt\u0131nda
+bitmap_and_svg_image_files=Bite\u015flem ve SVG g\u00f6r\u00fcnt\u00fc dosyalar\u0131
+boolean_value=Boole de\u011feri
+browse=G\u00f6zat
+buffered=Tamponlanm\u0131\u015f
+cancel=\u0130ptal
+cannot_apply_to_a_non_polygon_layer=Poligon olmayan katmana uygulanam\u0131yor
+cannot_be_null=Bo\u015f de\u011fer olamaz
+cannot_exist_two_label_classes_with_the_same_name=\u0130ki etiket s\u0131n\u0131f\u0131 ayn\u0131 isimde olamaz
+cannot_install_labeling_method=Etiketleme y\u00f6ntemi y\u00fcklenemiyor
+cant_draw_preview=\u00d6ng\u00f6r\u00fcn\u00fc\u015f \u00e7izilemiyor
+change_location=Konumu de\u011fi\u015ftir
+character_marker=\u0130\u015faretleyiciyi de\u011fi\u015ftir
+character_marker_symbol=\u0130\u015faretleyici simgesini de\u011fi\u015ftir
+choose_marker=\u0130\u015faretleyiciyi se\u00e7
+circular=Dairesel
+class=S\u0131n\u0131f
+classes=S\u0131n\u0131flar
+classifying_field_name_not_found=S\u0131n\u0131fland\u0131r\u0131lan alan ad\u0131 bulunamad\u0131
+clear=Sil
+color=Renk
+color_field=Renk alan\u0131
+color_ramp=
+confirmation_dialog=Onaylama diyalo\u011fu
+constant=Sabit
+correct_expression=Do\u011fru ifade
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=Lejand ayarlanamad\u0131
+date_value=Tarih de\u011feri
+default=Varsay\u0131lan
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=
+delete=Sil
+delete_class=S\u0131n\u0131f sil
+delete_filter_expression=S\u00fczge\u00e7 ifadesini sil
+densities=Yo\u011funluklar
+depth_factor=
+description=Tan\u0131m
+divided_by_0=
+dont_show_labels_when_zoomed=Yak\u0131nla\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda etiketleri g\u00f6sterme
+dot_density=Nokta yo\u011funlu\u011fu
+dot_size=Nokta boyutu
+dot_value=Nokta de\u011feri
+draw_quantities_for_each_category=Her kategorinin say\u0131s\u0131n\u0131 \u00e7iz.
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=Tekrarl\u0131 etiketler
+edit_expression=\u0130fadeyi d\u00fczenle
+Enable_layer_preview=Katman \u00f6ng\u00f6r\u00fcn\u00fc\u015f\u00fcn\u00fc etkinle\u015ftir
+enter_new_name=Yeni isim gir
+error=Hata
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=
+error_trying_to_access_to_the_layer=Katmana eri\u015fmede hata
+error_validating_filter_query=
+expression=\u0130fade
+expression_creator=\u0130fade olu\u015fturucu
+expressions=\u0130fadeler
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=Objeler
+field_number=Alan numaras\u0131
+fields=Alanlar
+fields_exp=Alanlar
+fill_color=Doldurma rengi
+fill_properties=Doldurma \u00f6zellikleri
+filter=S\u00fczge\u00e7
+filtered_features=S\u00fczge\u00e7lenen objeler
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=Sabit metin boyutu
+following_line=
+font=Yaz\u0131 tipi
+foreground_alpha=
+format=Bi\u00e7im
+from=
+fuente=Yaz\u0131 tipi
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=Derecelenmi\u015f simgeler
+grid=Grid
+high=Y\u00fcksek
+horizontal=Yatay
+ignore_zero_values=
+in_beyond=
+in_layer=katman\u0131n i\u00e7inde
+in_the_middle=ortas\u0131nda
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=Hatal\u0131 ifade
+intervals=Aral\u0131klar
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=Eklenemeyecek
+label-point-priority-help=\u00d6ncelik\: 0 \= Bloklanm\u0131\u015f, 1 \= En y\u00fcksek, 3 \= En d\u00fc\u015f\u00fck
+label_class_properties=Etiket s\u0131n\u0131f \u00f6zellikleri
+label_expression=Etiket ifadesi
+label_expression_editor=Etiket ifadesi d\u00fczenleyici
+label_expression_help=
+label_features_in_the_same_way=Objeleri ayn\u0131 \u015fekilde etiketle
+label_features_in_this_class=bu s\u0131n\u0131ftaki etiket objeleri
+label_only_when_selected=Sadece obje se\u00e7ildi\u011finde etiketle
+label_priority=
+label_style_could_not_be_painted=
+label_styles=Etiket bi\u00e7emleri
+labeled_point=
+labeling=Etiketleme
+labeling_field=Etiketleme alan\u0131
+layer_name=Katman ad\u0131
+line=\u00c7izgi
+line_fill=\u00c7izgi doldur
+line_fill_symbol=\u00c7izgi doldurma simgesi
+line_settings=\u00c7izgi ayarlar\u0131
+lineal=
+lines=\u00c7izgiler
+location=Mevki
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=
+malformed_or_empty_expression=
+marker_fill=\u0130\u015faretleyici doldurma
+marker_fill_symbol=\u0130\u015faretleyici doldurma simgesi
+marker_line=\u0130\u015faretleyici \u00e7izgi
+marker_line_symbol=\u0130\u015faretleyici \u00e7izgi simgesi
+mas_de_100_simbolos=Bir haritada 100 den fazla simge genellikle herhangi bir bilgi vermez
+max_scale=En b\u00fcy\u00fck \u00f6l\u00e7ek
+medium=
+method=Y\u00f6ntem
+min_scale=
+minimum_angle_to_draw=
+modify_filter_expression=S\u00fczge\u00e7 ifadesini de\u011fi\u015ftir
+move_down=A\u015fa\u011f\u0131 ta\u015f\u0131
+move_up=Yukar\u0131 ta\u015f\u0131
+name=Ad
+names_and_types_count_are_disctint=
+new_filter_expression=Yeni s\u00fczge\u00e7 ifadesi
+no=Hay\u0131r
+no_expression_defined=Hi\u00e7 ifade belirlenmedi
+no_style=Bi\u00e7em yok
+no_symbol_especified=Hi\u00e7bir bi\u00e7em belirlenmedi
+none=Hi\u00e7biri
+normalization=Normalle\u015ftirme
+not_save_empty_legend=
+numeric_value=Rakamsal de\u011fer
+offset=
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=\u0130\u015fletmenler
+options=Se\u00e7imler
+orientation=Y\u00f6nlendirme
+orientation_system=Y\u00f6nlendirme sistemi
+out_beyond=
+outline=\u00c7er\u00e7eve
+outline_opacity=
+outline_width=S\u0131n\u0131r geni\u015fli\u011fi
+page=Sayfa
+parallel=Paralel
+pattern=Desen
+percentage=Y\u00fczde
+perpedicular=Dikey
+picture_file=Resim dosyas\u0131
+picture_fill=Resim doldurma
+picture_fill_symbol=Resim doldurma simgesi
+picture_line_symbol=Resim \u00e7izgi simgesi
+picture_marker=Resim i\u015faretleyicisi
+picture_marker_symbol=Resim i\u015faretleyici simgesi
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=Her objeye bir etiket yerle\u015ftir
+place_one_label_per_feature_part=Her obje par\u00e7as\u0131na bir etiket yerle\u015ftir
+placement=Yerle\u015ftirme
+placement_priorities_selector=
+placement_properties=Yerle\u015ftirme \u00f6zellikleri
+point_settings=Nokta ayarlar\u0131
+points=Noktalar
+polygon=Poligon
+polygon_settings=Poligon ayarlar\u0131
+position=Konum
+prefer_top_right_all_allowed=
+preview=\u00d6ng\u00f6r\u00fcn\u00fc\u015f
+preview_not_available=\u00d6nizleme olanakl\u0131 de\u011fil
+properties=\u00d6zellikler
+proportional_symbols=
+quantity_by_category=Nicelik kategorileri
+quiere_continuar=Devam etmek istiyor musunuz?
+Quitar=Kald\u0131r
+Quitar_todos=T\u00fcm\u00fcn\u00fc kald\u0131r
+random=Rasgele
+recovering_recordset=
+rectangular=Dikd\u00f6rtgensel
+remane_class=S\u0131n\u0131f\u0131 yeniden adland\u0131r
+remove=Kald\u0131r
+remove_duplicate_labels=Tekrarl\u0131 etiketleri kald\u0131r
+resto_valores=Di\u011fer de\u011ferler
+scale=\u00d6l\u00e7ek
+scale_range_window_title=
+select=Se\u00e7
+select_one_row=Bir sat\u0131r se\u00e7
+selection_picture_file=Se\u00e7im resim dosyas\u0131
+separation=Ay\u0131rma
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=Boyut
+SLD_grammar=
+some_arguments_are_incorrect=baz\u0131 de\u011fi\u015fkenler ge\u00e7ersiz
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=SQL sorgusu
+statistics=\u0130statistikler
+string_value=Dizgi de\u011feri
+style=Bi\u00e7em
+style_selector=Bi\u00e7em se\u00e7ici
+symbol=Simge
+symbol_field=Simge alan\u0131
+symbol_shapetype_mismatch=
+syntax_error=S\u00f6zdizimi hatas\u0131
+template=\u015eablon
+text=Metin
+text_field=Metin
+text_fields=Metin alanlar\u0131
+text_string=Metin
+text_symbol=Metin simgesi
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=De\u011fi\u015fken say\u0131s\u0131 do\u011fru de\u011fil
+the_result_is_not_a_boolean_value=
+to=
+URL=
+use_outline=Altl\u0131k kullan
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=kullan\u0131c\u0131 tan\u0131ml\u0131 etiketler
+usupported_layer_type=Desteklenmeyen katman tipi
+value=De\u011fer
+value_fields=
+variation_by=
+verify=Do\u011frula
+visible=G\u00f6r\u00fcn\u00fcr
+visualization=G\u00f6r\u00fcnt\u00fcleme
+warning=Uyar\u0131
+width=Geni\u015flik
+x_offset=
+y_offset=
+yes=Evet
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ru.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ru.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin/src/main/resources-plugin/i18n/text_ru.properties	(revision 42196)
@@ -0,0 +1,284 @@
+#Translations for language [ru]
+#Mon Sep 21 10:02:12 CEST 2009
+a_default_symbol_will_be_used=
+above=
+accept=
+accessing_file_structure=
+add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
+add_class=
+add_expression=
+add_field=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435
+add_operator=
+add_text_area=
+all_features=
+all_supported_background_image_formats=
+allow_label_overlapping=
+always_circular=
+always_horizontal=
+always_straight=
+angle=
+anticlockwise=
+apply_visual_correction_to_glyph_for_precise_size_and_position=
+arguments_added_to_a_costant=
+at_begin=
+at_best=
+at_end=
+at_fields=
+background=
+background_color=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430
+background_style=
+barchar3d_legend=
+barchar3d_legend_desc=
+barchart_3D=
+below=
+bitmap_and_svg_image_files=
+boolean_value=\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+browse=\u041e\u0442\u043a\u0440\u044b\u0442\u044c
+buffered=
+cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+cannot_apply_to_a_non_polygon_layer=
+cannot_be_null=
+cannot_exist_two_label_classes_with_the_same_name=
+cannot_install_labeling_method=
+cant_draw_preview=
+change_location=
+character_marker=
+character_marker_symbol=
+choose_marker=
+circular=
+class=
+classes=
+classifying_field_name_not_found=
+clear=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c
+color=\u0426\u0432\u0435\u0442\:
+color_field=
+color_ramp=
+confirmation_dialog=
+constant=
+correct_expression=
+could_not_get_shape_type=
+could_not_retreive_layer_field_names=
+could_not_setup_legend=
+date_value=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+default=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
+define_classes_of_features_and_label_each_differently=
+Defines_a_dot_density_symbol_based_on_a_field_value=
+delete=
+delete_class=
+delete_filter_expression=
+densities=
+depth_factor=
+description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
+divided_by_0=
+dont_show_labels_when_zoomed=
+dot_density=
+dot_size=
+dot_value=
+draw_quantities_for_each_category=
+draw_quantities_using_symbol_size_to_show_exact_values=
+draw_quantities_using_symbol_size_to_show_relative_values=
+duplicate_labels=
+edit_expression=
+Enable_layer_preview=
+enter_new_name=
+error=\u041e\u0448\u0438\u0431\u043a\u0430
+error\ accessing\ to\ the\ layer=
+error_coding_filter_query=\u041e\u0448\u0438\u0431\u043a\u0430
+error_trying_to_access_to_the_layer=
+error_validating_filter_query=
+expression=
+expression_creator=
+expressions=
+failed_acessing_files=
+failed_applying_following_line_will_use_default_confg=
+failed_computing_intervals=
+features=
+field_number=
+fields=\u041f\u043e\u043b\u044f
+fields_exp=
+fill_color=
+fill_properties=
+filter=\u0424\u0438\u043b\u044c\u0442\u0440
+filtered_features=
+fit_inside_polygon=
+fit_on_text_area=
+fixed_text_size=
+following_line=
+font=
+foreground_alpha=
+format=\u0424\u043e\u0440\u043c\u0430\u0442
+from=
+fuente=\u0428\u0440\u0438\u0444\u0442
+GeneralLabeling.sample_text=
+generating_intervals=
+getting_layer_shape_type=
+gradient_color=
+gradient_fill=
+gradient_fill_symbol=
+graduated_symbols=
+grid=
+high=
+horizontal=\u0410\u043b\u044c\u0431\u043e\u043c\u043d\u0430\u044f
+ignore_zero_values=
+in_beyond=
+in_layer=
+in_the_middle=
+incompatible_types_to_calculate_the_normalization=
+incorrect_expression=
+intervals=
+invalid_filter_expression=
+invalid_url=
+it_will_not_be_added=
+label-point-priority-help=
+label_class_properties=
+label_expression=
+label_expression_editor=
+label_expression_help=
+label_features_in_the_same_way=
+label_features_in_this_class=
+label_only_when_selected=
+label_priority=
+label_style_could_not_be_painted=
+label_styles=
+labeled_point=
+labeling=
+labeling_field=
+layer_name=\u0418\u043c\u044f \u0441\u043b\u043e\u044f
+line=\u041b\u0438\u043d\u0438\u044f
+line_fill=
+line_fill_symbol=
+line_settings=
+lineal=
+lines=
+location=
+location_along_the_lines=
+looks_like_too_low_value_for_this_field_may_cause_system_to_run_slow=
+low=
+malformed_or_empty_expression=
+marker_fill=
+marker_fill_symbol=
+marker_line=
+marker_line_symbol=
+mas_de_100_simbolos=\u041d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432 \u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0435 \u043d\u0430\u0434\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u0438\u043d\u043e\u0439 \u0431\u043e\u043b\u0435\u0435 100 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432
+max_scale=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431
+medium=
+method=
+min_scale=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431
+minimum_angle_to_draw=
+modify_filter_expression=
+move_down=
+move_up=
+name=\u0418\u043c\u044f
+names_and_types_count_are_disctint=
+new_filter_expression=
+no=\u041d\u0435\u0442
+no_expression_defined=
+no_style=
+no_symbol_especified=
+none=\u043d\u0438 \u043e\u0434\u0438\u043d
+normalization=
+not_save_empty_legend=
+numeric_value=\u0427\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+offset=
+offset_label=
+offset_labels_horizontally=
+offset_labels_on_top_of_the_points=
+on_the_line=
+operators=
+options=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+orientation=
+orientation_system=
+out_beyond=
+outline=\u041a\u043e\u043d\u0442\u0443\u0440
+outline_opacity=
+outline_width=
+page=
+parallel=
+pattern=
+percentage=
+perpedicular=
+picture_file=
+picture_fill=
+picture_fill_symbol=
+picture_line_symbol=
+picture_marker=
+picture_marker_symbol=
+pie_properties=
+piechart_3D=
+piechart_3D_legend_desc=
+place_one_label_per_feature=
+place_one_label_per_feature_part=
+placement=
+placement_priorities_selector=
+placement_properties=
+point_settings=
+points=
+polygon=\u041f\u043e\u043b\u0438\u0433\u043e\u043d
+polygon_settings=
+position=
+prefer_top_right_all_allowed=
+preview=
+preview_not_available=
+properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430
+proportional_symbols=
+quantity_by_category=
+quiere_continuar=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435?
+Quitar=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+Quitar_todos=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435
+random=
+recovering_recordset=
+rectangular=
+remane_class=
+remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+remove_duplicate_labels=
+resto_valores=\u0414\u0440\u0443\u0433\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
+scale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431
+scale_range_window_title=
+select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c
+select_one_row=
+selection_picture_file=
+separation=
+set_forbidden_precedence=
+set_high_precedence=
+set_low_precedence=
+set_normal_precedence=
+shows_the_elements_of_the_layer_depending_on_the_value_of_a_filter_expression=
+size=\u0420\u0430\u0437\u043c\u0435\u0440
+SLD_grammar=
+some_arguments_are_incorrect=
+specify_the_range_of_scales_at_which_labels_will_be_shown=
+SQL_query=
+statistics=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430
+string_value=\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+style=\u0421\u0442\u0438\u043b\u044c
+style_selector=
+symbol=
+symbol_field=
+symbol_shapetype_mismatch=
+syntax_error=
+template=
+text=\u0422\u0435\u043a\u0441\u0442
+text_field=
+text_fields=
+text_string=
+text_symbol=
+the\ size\ for\ the\ symbol\ is\ equal\ to\ NaN\ =
+the_number_or_arguments_is_incorrect=
+the_result_is_not_a_boolean_value=
+to=\u0412
+URL=
+use_outline=
+use_the_same_scale_range_as_the_feature_layer=
+user_defined_labels=
+usupported_layer_type=
+value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+value_fields=
+variation_by=
+verify=
+visible=\u0412\u0438\u0434\u0438\u043c\u044b\u0439
+visualization=
+warning=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435
+width=\u0428\u0438\u0440\u0438\u043d\u0430
+x_offset=
+y_offset=
+yes=OK

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/org.gvsig.labeling.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target

.project

.classpath

.settings


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.labeling.app/pom.xml	(revision 42196)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.labeling.app</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.labeling.app.mainplugin</module>
+  </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.i18n.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.i18n.app.mainplugin</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.i18n.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>Internationalization support</name>
+  <description>gvSIG translations management plugin</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.about.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+
+  <properties>
+    <gvsig.package.info.categories>Internationalization</gvsig.package.info.categories>
+    <gvsig.package.info.codealias>org.gvsig.i18n.extension</gvsig.package.info.codealias>
+    <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:54 CEST 2015
+buildNumber=2155

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nManager.java	(revision 42196)
@@ -0,0 +1,241 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n;
+
+import java.io.File;
+import java.util.Locale;
+
+/**
+ * Management of I18n and Locale related activities.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public interface I18nManager {
+
+    public static final Locale SPANISH = new Locale("es");
+
+    public static final Locale ENGLISH = new Locale("en");
+
+    /**
+     * Returns the display name of a locale language.
+     * 
+     * @param locale
+     *            to get the language display name
+     * @param displayLocale
+     *            the locale to display the name
+     * @return the locale language display name
+     */
+    String getLanguageDisplayName(Locale locale, Locale displayLocale);
+
+    /**
+     * Returns the display name of a locale language.
+     * 
+     * @param locale
+     *            to get the language display name
+     * @return the locale language display name
+     */
+    String getLanguageDisplayName(Locale locale);
+
+    /**
+     * Returns the display name of a locale in the given locale to be displayed.
+     * 
+     * @param locale
+     *            to get the display name
+     * @param displayLocale
+     *            the locale to display the name
+     * @return the locale display name
+     */
+    String getDisplayName(Locale locale, Locale displayLocale);
+
+    /**
+     * Returns the display name of a locale.
+     * 
+     * @param locale
+     *            to get the display name
+     * @return the locale display name
+     */
+    String getDisplayName(Locale locale);
+
+    /**
+     * Returns the current locale.
+     * 
+     * @return the current locale
+     */
+    Locale getCurrentLocale();
+
+    /**
+     * Sets the current application locale.
+     * 
+     * @param locale
+     *            the current application locale
+     */
+    void setCurrentLocale(Locale locale);
+    
+    /**
+     * Returns the application host system default locale.
+     * 
+     * @return the default system locale
+     */
+    Locale getDefaultSystemLocale();
+
+    /**
+     * Returns the list of locales supported by the current gvSIG installation.
+     * 
+     * @return the list of locales supported
+     */
+    Locale[] getInstalledLocales();
+
+    /**
+     * Installs or a new locale (or a list) and its translation, or updates an
+     * already existing one.
+     * 
+     * @param importFile
+     *            the jar or zip file which contains the locales and the
+     *            translations as resource bundle files
+     * @return the list of installed or updated locales
+     * @throws I18nException
+     *             if the locales could'n be installed
+     */
+    Locale[] installLocales(File importFile) throws I18nException;
+
+    /**
+     * Uninstalls a locale and its translation.
+     * 
+     * @param locale
+     *            to uninstall
+     * @throws I18nException
+     *             if the locale can't be uninstalled
+     */
+    void uninstallLocale(Locale locale) throws I18nException;
+
+    /**
+     * Exports the translations of a locale to update or complete its
+     * translation, into a jar file. Into the file is also included the
+     * translations of another existing locale to be used as reference for
+     * updating the locale.
+     * 
+     * @param locale
+     *            the locale to update or complete
+     * @param referenceLocale
+     *            the locale to be used as reference
+     * @param exportFile
+     *            the jar file to export to
+     * @throws I18nException
+     *             if the locale could not be exported for update
+     */
+    void exportLocaleForUpdate(Locale locale, Locale referenceLocale,
+	    File exportFile) throws I18nException;
+
+    /**
+     * Exports the translations of a list of locales to update or complete its
+     * translation, into a jar file. Into the file is also included the
+     * translations of another existing locale to be used as reference for
+     * updating the locale.
+     * 
+     * @param locales
+     *            the locales to update or complete
+     * @param referenceLocale
+     *            the locale to be used as reference
+     * @param exportFile
+     *            the jar file to export to
+     * @throws I18nException
+     *             if the locale could not be exported for update
+     */
+    void exportLocalesForUpdate(Locale[] locales, Locale referenceLocale,
+	    File exportFile) throws I18nException;
+
+    /**
+     * Exports the keys of text to translate to a new locale to a jar file. Into
+     * the file is also included the translations of another existing locale to
+     * be used as reference for translating to the new locale.
+     * 
+     * @param locale
+     *            the new locale to translate to
+     * @param referenceLocale
+     *            the locale to be used as reference
+     * @param exportFile
+     *            the jar file to export to
+     * @throws I18nException
+     *             if the locale could not be exported for translation
+     */
+    void exportLocaleForTranslation(Locale locale, Locale referenceLocale,
+	    File exportFile) throws I18nException;
+
+    /**
+     * Exports the keys of text to translate to a new locale to a jar file. Into
+     * the file is also included the translations of another existing locales to
+     * be used as reference for translating to the new locale.
+     * 
+     * @param locale
+     *            the new locale to translate to
+     * @param referenceLocales
+     *            the locales to be used as reference
+     * @param exportFile
+     *            the jar file to export to
+     * @throws I18nException
+     *             if the locale could not be exported for translation
+     */
+    void exportLocaleForTranslation(Locale locale, Locale[] referenceLocales,
+	    File exportFile) throws I18nException;
+
+    /**
+     * Returns the list of default locales to use as reference when exporting to
+     * translate a new locale, or update or complete an existing one.
+     * 
+     * @return the list of default locales to export
+     */
+    Locale[] getReferenceLocales();
+
+    /**
+     * Sets the list of default locales to export.
+     * 
+     * @param referenceLocales
+     *            the list of default locales to export
+     */
+    void setReferenceLocales(Locale[] referenceLocales);
+
+    /**
+     * Sets the list of default locales bundled with gvSIG. That list of locales
+     * will be used as the list of installed ones when gvSIG is run for the
+     * first time with the I18n extension. The following times, that list will
+     * be taken form the extension configuration in the plugins persistence.
+     * 
+     * @param defaultLocales
+     */
+    void setDefaultLocales(Locale[] defaultLocales);
+    
+    /**
+     * Install a new locale in the framework of andami.
+     * 
+     * If the locale already exists update it.
+     * 
+     * @param locale to install
+     */
+    public void installLocale(Locale locale);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/I18nExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/I18nExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/I18nExtension.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n.extension;
+
+import org.gvsig.about.AboutManager;
+import org.gvsig.about.AboutParticipant;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.i18n.extension.preferences.I18nPreferencePage;
+import org.gvsig.tools.ToolsLocator;
+
+
+/**
+ * Texts localization management extension.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class I18nExtension extends Extension {
+
+    public void execute(String actionCommand) {
+        // Nothing to do
+    }
+
+    public void initialize() {
+    	IconThemeHelper.registerIcon("preferences", "i18n-preferences", this);
+    	
+        // Replace the default locale Preferences page for the new one
+        ToolsLocator.getExtensionPointManager()
+                .add("AplicationPreferences", "").append("LanguagePage", "",
+                        new I18nPreferencePage());
+    }
+
+    public void postInitialize() {
+        // Register the about panel
+		ApplicationManager application = ApplicationLocator.getManager();
+		
+		AboutManager about = application.getAbout();
+
+		about.addDeveloper(
+				"DISID",
+				this.getClass().getClassLoader().getResource("about/disid.html"),
+				1
+		);
+		
+		AboutParticipant participant = about.getDeveloper("DISID");
+		participant.addContribution(
+			"I18nExtension",
+			"gvSIG translations management extension", 
+			2009,1,1, 
+			2009,12,31
+		);   	
+    }
+
+    public boolean isEnabled() {
+        return false;
+    }
+
+    public boolean isVisible() {
+        return false;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/I18nExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/ConsolideTranslationsExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/ConsolideTranslationsExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/ConsolideTranslationsExtension.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n.extension;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.List;
+import java.util.Properties;
+import javax.swing.JOptionPane;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.i18n.Messages;
+import org.gvsig.i18n.impl.TranslationsConsolider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Texts localization management extension.
+ *
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class ConsolideTranslationsExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(ConsolideTranslationsExtension.class);
+
+    private boolean executing = false;
+
+    public synchronized void execute(String actionCommand) {
+        final MainFrame main = PluginServices.getMainFrame();
+
+        if ( "tools-devel-consolidate-translations".equalsIgnoreCase(actionCommand) ) {
+            if ( this.executing ) {
+                main.messageDialog("Process is running.", "Warning", JOptionPane.INFORMATION_MESSAGE);
+                return;
+            }
+            this.executing = true;
+            main.refreshControls();
+            Thread process = new Thread(new Runnable() {
+                public void run() {
+                    try {
+                        TranslationsConsolider consolider = new TranslationsConsolider();
+                        consolider.consolide();
+                        main.messageDialog("Consolidation of translations terminated.", "Information", JOptionPane.INFORMATION_MESSAGE);
+                    } catch (Exception ex) {
+                        logger.warn("There was errors consolidating translations.", ex);
+                        main.messageDialog("There was errors consolidating translations.", "Warning", JOptionPane.WARNING_MESSAGE);
+                    } finally {
+                        executing = false;
+                        main.refreshControls();
+                    }
+                }
+            });
+            process.start();
+        } else if ( "tools-devel-not-translated-keys".equalsIgnoreCase(actionCommand) ) {
+            PluginsManager pluginsManager = PluginsLocator.getManager();
+            
+            File folder = new File(pluginsManager.getApplicationI18nFolder(), "translations.all");
+            
+            List notTranslatedKeys = Messages.getNotTranslatedKeys();
+            Properties properties = new Properties();
+            for ( int i = 0; i < notTranslatedKeys.size(); i++ ) {
+                String key = (String) notTranslatedKeys.get(i);
+                properties.put(key, "");
+            }
+
+            FileOutputStream fos = null;
+            File f = new File(folder, "nottranslated.properties");
+            try {
+                FileUtils.forceMkdir(folder);
+                fos = new FileOutputStream(f);
+                properties.store(fos, null);
+            } catch (Exception ex) {
+                logger.warn("Can't write properties '" + f.getAbsolutePath() + "'.", ex);
+            } finally {
+                IOUtils.closeQuietly(fos);
+            }
+        }
+    }
+
+    public void initialize() {
+        // Do nothing
+    }
+
+    public boolean isEnabled() {
+        return !this.executing;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/ConsolideTranslationsExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellEditor.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n.extension.preferences.table;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+/**
+ * Allows to edit a cell content with a Radio button.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class RadioButtonCellEditor extends AbstractCellEditor implements
+	TableCellEditor, ItemListener {
+
+    private static final long serialVersionUID = 1000179477526963659L;
+
+    private RadioButtonCell delegate = new RadioButtonCell();
+
+    /**
+     * Constructor.
+     */
+    public RadioButtonCellEditor() {
+	delegate.getRadioButton().addItemListener(this);
+    }
+
+    public Object getCellEditorValue() {
+	return Boolean.valueOf(delegate.getRadioButton().isSelected());
+    }
+
+    public Component getTableCellEditorComponent(JTable table, Object value,
+	    boolean isSelected, int row, int column) {
+	return delegate.getTableCellComponent(table, value, isSelected,
+		isSelected, row, column);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+	// Stop editing when the user clicks into the radio button,
+	// so other cells get its rendering updated
+	fireEditingStopped();
+    }
+
+    public void itemStateChanged(ItemEvent e) {
+	fireEditingStopped();
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellRenderer.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n.extension.preferences.table;
+
+import java.awt.Component;
+
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Renders a Radio button on a JTable cell.
+ * 
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class RadioButtonCellRenderer extends RadioButtonCell implements
+	TableCellRenderer {
+
+    private static final long serialVersionUID = 7085349383073216796L;
+
+    public Component getTableCellRendererComponent(JTable table, Object value,
+	    boolean isSelected, boolean hasFocus, int row, int column) {
+	return getTableCellComponent(table, value, isSelected, hasFocus, row,
+		column);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/LocaleTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/LocaleTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/LocaleTableModel.java	(revision 42196)
@@ -0,0 +1,259 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n.extension.preferences.table;
+
+import java.util.Locale;
+
+import javax.swing.table.AbstractTableModel;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+
+import org.gvsig.i18n.I18nException;
+import org.gvsig.i18n.I18nManager;
+import org.gvsig.i18n.Messages;
+
+/**
+ * TableModel to show the list of available Locales in gvSIG.
+ *
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class LocaleTableModel extends AbstractTableModel {
+
+    // Start from 0 to enable de locale column again
+    public static final int COLUMN_LOCALE = -1;
+
+    public static final int COLUMN_LANGUAGE = 0;
+
+    public static final int COLUMN_COUNTRY = 1;
+
+    public static final int COLUMN_VARIANT = 2;
+
+    public static final int COLUMN_ACTIVE = 3;
+
+    private static final long serialVersionUID = -3855372372788577788L;
+
+    private final I18nManager manager;
+
+    private Locale[] locales;
+
+    private int currentLocaleIndex;
+
+    private int originalLocaleIndex;
+
+    /**
+     * Creates a LocaleTableModel with a I18nManager to handle locales.
+     */
+    public LocaleTableModel(I18nManager manager) {
+	this.manager = manager;
+	loadLocales();
+    }
+
+    public int getColumnCount() {
+	return 4;
+    }
+
+    public int getRowCount() {
+	return locales.length;
+    }
+
+    public Object getValueAt(int rowIndex, int columnIndex) {
+	switch (columnIndex) {
+	case COLUMN_LOCALE:
+	    return locales[rowIndex];
+	case COLUMN_LANGUAGE:
+	    return manager.getLanguageDisplayName(locales[rowIndex]);
+	case COLUMN_COUNTRY:
+	    return locales[rowIndex].getDisplayCountry();
+	case COLUMN_VARIANT:
+	    return locales[rowIndex].getDisplayVariant();
+	case COLUMN_ACTIVE:
+	    return rowIndex == currentLocaleIndex ? Boolean.TRUE
+		    : Boolean.FALSE;
+	}
+	return null;
+    }
+
+    public String getColumnName(int columnIndex) {
+	switch (columnIndex) {
+	case COLUMN_LOCALE:
+	    return Messages.getText("I18nPreferencePage.Locale_code");
+	case COLUMN_LANGUAGE:
+	    return Messages.getText("I18nPreferencePage.Idioma");
+	case COLUMN_COUNTRY:
+	    return Messages.getText("I18nPreferencePage.Pais");
+	case COLUMN_VARIANT:
+	    return Messages.getText("I18nPreferencePage.Variante");
+	case COLUMN_ACTIVE:
+	    return Messages.getText("I18nPreferencePage.Activar");
+	}
+	return "";
+    }
+
+    public Class getColumnClass(int columnIndex) {
+	switch (columnIndex) {
+	case COLUMN_LOCALE:
+	case COLUMN_LANGUAGE:
+	case COLUMN_COUNTRY:
+	case COLUMN_VARIANT:
+	    return String.class;
+	case COLUMN_ACTIVE:
+	    return Boolean.class;
+	}
+	return Object.class;
+    }
+
+    public boolean isCellEditable(int rowIndex, int columnIndex) {
+	return columnIndex == 3;
+    }
+
+    public void setValueAt(Object value, int rowIndex, int columnIndex) {
+	// Only edit current locale value
+	if (columnIndex == COLUMN_ACTIVE && Boolean.TRUE.equals(value)) {
+	    setSelectedLocale(rowIndex, columnIndex);
+	}
+    }
+
+    /**
+     * Returns the {@link Locale} shown in a table row.
+     *
+     * @param rowIndex
+     *            the table row index
+     * @return the {@link Locale}
+     */
+    public Locale getLocale(int rowIndex) {
+    	return rowIndex >= 0 ? locales[rowIndex] : null;
+    }
+
+    /**
+     * Removes and uninstalls a locale.
+     *
+     * @param locale
+     *            to remove
+     * @throws I18nException
+     *             if there is an error removing a Locale
+     */
+    public void removeLocale(Locale locale) throws I18nException {
+	int rowIndex = getLocaleRowIndex(locale);
+	manager.uninstallLocale(locale);
+	loadLocales();
+	fireTableRowsDeleted(rowIndex, rowIndex);
+    }
+
+    /**
+     * Reloads the list of installed locales.
+     */
+    public void reloadLocales() {
+	loadLocales();
+	fireTableDataChanged();
+    }
+
+    public void saveSelectedLocale() {
+	manager.setCurrentLocale(getSelectedLocale());
+	originalLocaleIndex = currentLocaleIndex;
+    }
+
+    public void selectPreviousLocale() {
+	setSelectedLocale(originalLocaleIndex, COLUMN_ACTIVE);
+    }
+
+    /**
+     *
+     */
+    public void selectDefaultLocale() {
+	Locale defLocale = manager.getDefaultSystemLocale();
+	int pos = getLocaleRowIndex(defLocale);
+	// Maybe the locale has country and/or variant and is not registered
+	// (ex: en_US). Look for the locale with only the language (ex: en).
+	if (pos == -1) {
+	    defLocale = new Locale(defLocale.getLanguage());
+	    pos = getLocaleRowIndex(defLocale);
+	}
+	// If the locale could'nt be found, use English as default
+	if (pos == -1) {
+	    pos = getLocaleRowIndex(I18nManager.ENGLISH);
+	}
+	setSelectedLocale(pos, COLUMN_ACTIVE);
+    }
+
+    public boolean isValueChanged() {
+	return currentLocaleIndex != originalLocaleIndex;
+    }
+
+    public void setChangesApplied() {
+	originalLocaleIndex = currentLocaleIndex;
+    }
+
+    /**
+     * Sets the current selected locale.
+     */
+    public void setSelectedLocale(Locale locale) {
+	int localeIndex = getLocaleRowIndex(locale);
+	setSelectedLocale(localeIndex);
+    }
+
+    /**
+     * Returns the current selected locale.
+     */
+    public Locale getSelectedLocale() {
+	Locale selected = getLocale(currentLocaleIndex);
+	return selected == null ? manager.getCurrentLocale() : selected;
+    }
+
+    private void setSelectedLocale(int rowIndex) {
+	setSelectedLocale(rowIndex, 0);
+    }
+
+    private void setSelectedLocale(int rowIndex, int columnIndex) {
+	int oldCurrentLocaleIndex = currentLocaleIndex;
+	currentLocaleIndex = rowIndex;
+	fireTableCellUpdated(oldCurrentLocaleIndex, columnIndex);
+	fireTableCellUpdated(rowIndex, columnIndex);
+    }
+
+    /**
+     * Loads the locales from the I18nManager.
+     */
+    private void loadLocales() {
+	locales = manager.getInstalledLocales();
+	Locale currentLocale = manager.getCurrentLocale();
+	currentLocaleIndex = getLocaleRowIndex(currentLocale);
+	originalLocaleIndex = currentLocaleIndex;
+    }
+
+    /**
+     * Returns the table row position for a Locale.
+     */
+    private int getLocaleRowIndex(Locale locale) {
+	for (int i = 0; i < locales.length; i++) {
+	    if (locale.equals(locales[i])) {
+		return i;
+	    }
+	}
+	return -1;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/LocaleTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCell.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCell.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCell.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n.extension.preferences.table;
+
+import java.awt.Component;
+
+import javax.swing.JRadioButton;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+
+/**
+ * Renders a radio button on a table cell.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class RadioButtonCell {
+
+    private JRadioButton radio = new JRadioButton();
+
+    /**
+     * Constructor.
+     */
+    public RadioButtonCell() {
+	radio.setHorizontalAlignment(SwingConstants.CENTER);
+    }
+
+    protected Component getTableCellComponent(JTable table, Object value,
+	    boolean isSelected, boolean hasFocus, int row, int column) {
+
+	if (isSelected) {
+	    radio.setForeground(table.getSelectionForeground());
+	    radio.setBackground(table.getSelectionBackground());
+	}
+	else {
+	    radio.setForeground(table.getForeground());
+	    radio.setBackground(table.getBackground());
+	}
+
+	radio.setSelected(Boolean.TRUE.equals(value));
+
+	return radio;
+    }
+
+    protected JRadioButton getRadioButton() {
+	return radio;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/table/RadioButtonCell.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/I18nPreferencePage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/I18nPreferencePage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/I18nPreferencePage.java	(revision 42196)
@@ -0,0 +1,280 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.i18n.extension.preferences;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.TableColumn;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.i18n.Messages;
+import org.gvsig.i18n.extension.preferences.table.LocaleTableModel;
+import org.gvsig.i18n.extension.preferences.table.RadioButtonCellEditor;
+import org.gvsig.i18n.extension.preferences.table.RadioButtonCellRenderer;
+import org.gvsig.i18n.impl.I18nManagerImpl;
+import org.gvsig.tools.ToolsLocator;
+
+/**
+ * Prefence page to manage gvSIG locales.
+ *
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class I18nPreferencePage extends AbstractPreferencePage {
+
+    private static final long serialVersionUID = 7164183052397200888L;
+
+    private final ImageIcon icon;
+
+    private JTable localesTable;
+
+    private LocaleTableModel tableModel;
+
+    private JTextArea txtWarning = null;
+    private JTextArea txtCollaboration = null;
+    
+    /**
+     * Creates a new I18n preferences page.
+     */
+    public I18nPreferencePage() {
+        setParentID("org.gvsig.coreplugin.preferences.general.GeneralPage");
+
+        icon = PluginServices.getIconTheme().get("i18n-preferences");
+
+       this.initComponents();
+    }
+    
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        Font hints_fnt = new JLabel().getFont();
+        
+        Component tablePanel = getLocalesPanel();
+        txtWarning = getActiveLocaleLabel(this.getBackground(), hints_fnt.deriveFont(Font.BOLD));
+        txtCollaboration = getCollaborationLabel(this.getBackground(), hints_fnt);
+    
+        Box.Filler fillerBorder1 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        Box.Filler fillerBorder2 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        Box.Filler fillerBottom = new Box.Filler(new Dimension(0, 0), new Dimension(0, 0), new Dimension(32767, 32767));
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(txtWarning, gridBagConstraints);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(txtCollaboration, gridBagConstraints);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.3;
+        add(tablePanel, gridBagConstraints);
+                
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        add(fillerBorder1, gridBagConstraints);
+        
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 0;
+        add(fillerBorder2, gridBagConstraints);
+        
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = GridBagConstraints.VERTICAL;
+        gridBagConstraints.weighty = 0.1;
+        add(fillerBottom, gridBagConstraints);
+        
+        this.translate();
+    }
+
+    private void translate() {
+        org.gvsig.tools.i18n.I18nManager i18nManager = ToolsLocator.getI18nManager();    
+        txtCollaboration.setText(
+                i18nManager.getTranslation(
+                        "I18nPreferencePage.colaboraciones", 
+                        new String[] { "translations@gvsig.org" }
+                )
+        );
+        txtWarning.setText(i18nManager.getTranslation("I18nPreferencePage.ayuda"));
+    }
+    
+    @Override
+    public boolean isResizeable() {
+		return true;
+    }
+    
+    public String getID() {
+        return getClass().getName();
+    }
+
+    public String getTitle() {
+        return Messages.getText("idioma");
+    }
+
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    public JPanel getPanel() {
+        return this;
+    }
+
+    public void setChangesApplied() {
+        if ( tableModel == null ) {
+            return;
+        }
+        tableModel.setChangesApplied();
+    }
+
+    public boolean isValueChanged() {
+        if ( tableModel == null ) {
+            return false;
+        }
+        return tableModel.isValueChanged();
+    }
+
+    public void storeValues() throws StoreException {
+        if ( tableModel == null ) {
+            return;
+        }
+        tableModel.saveSelectedLocale();
+    }
+
+    public void initializeDefaults() {
+        if ( tableModel == null ) {
+            return;
+        }
+        tableModel.selectDefaultLocale();
+    }
+
+    public void initializeValues() {
+        if ( tableModel == null ) {
+            tableModel = new LocaleTableModel(I18nManagerImpl.getInstance());
+            localesTable.setModel(tableModel);
+
+            TableColumn activeColumn = localesTable.getColumnModel().getColumn(
+                    LocaleTableModel.COLUMN_ACTIVE);
+            activeColumn.setCellEditor(new RadioButtonCellEditor());
+            activeColumn.setCellRenderer(new RadioButtonCellRenderer());
+
+            localesTable
+                    .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+            localesTable.getSelectionModel().setSelectionInterval(0, 0);
+        }
+        tableModel.selectPreviousLocale();
+        
+        this.translate();
+    }
+
+    /**
+     * Creates the Panel with the table of Locales.
+     */
+    private Component getLocalesPanel() {
+        localesTable = new JTable();
+        // Asignaremos el modelo a la tabla mas adelante para dar tiempo a que
+        // se haya inicializado todo o casi todo en gvSIG.
+
+        JScrollPane scrollPane = new JScrollPane(localesTable);
+
+        // Container panel
+        JPanel localesPanel = new JPanel();
+        localesPanel.setLayout(new BoxLayout(localesPanel, BoxLayout.Y_AXIS));
+        localesPanel.add(scrollPane);
+        localesPanel.setAlignmentX(CENTER_ALIGNMENT);
+        localesPanel.setPreferredSize(new Dimension(236, 200));
+        localesPanel.setMaximumSize(new Dimension(500, 230));
+
+        return localesPanel;
+    }
+    
+    /**
+     * Creates the JLabel to show information about the preference page.
+     */
+    private JTextArea getActiveLocaleLabel(Color bg, Font fnt) {
+        JTextArea textArea = new JTextArea(Messages
+                .getText("I18nPreferencePage.ayuda"));
+        textArea.setEditable(false);
+        textArea.setAutoscrolls(true);
+        textArea.setLineWrap(true);
+        textArea.setWrapStyleWord(true);
+        textArea.setFont(fnt);
+        textArea.setBackground(bg);
+        return textArea;
+    }
+
+    /**
+     * Creates the JLabel to show information about gvSIG translation
+     * collaboration.
+     */
+    private JTextArea getCollaborationLabel(Color bg, Font fnt) {
+        org.gvsig.tools.i18n.I18nManager i18nManager = ToolsLocator.getI18nManager();
+        JTextArea textArea = new JTextArea(
+                i18nManager.getTranslation(
+                        "I18nPreferencePage.colaboraciones", 
+                        new String[] { "translations@gvsig.org" }
+                )
+        );
+        textArea.setEditable(false);
+        textArea.setAutoscrolls(true);
+        textArea.setLineWrap(true);
+        textArea.setWrapStyleWord(true);
+        textArea.setFont(fnt);
+        textArea.setBackground(bg);
+        return textArea;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/I18nPreferencePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nException.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n;
+
+import org.gvsig.andami.messages.NotificationManager;
+
+/**
+ * Exception for errors of the I18nManager.
+ * 
+ * TODO: hacer que extienda BaseException cuando se pase a gvSIG trunk.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class I18nException extends Exception {
+
+    private static final long serialVersionUID = 2877056472517898602L;
+    
+    private String key;
+
+    /**
+     * Creates a new exception with an error message.
+     * 
+     * @param message
+     *            the error message
+     * @param key
+     *            the i18n key to localize the exception message
+     */
+    public I18nException(String message, String key) {
+	super(message);
+	this.key = key;
+    }
+
+    /**
+     * Creates a new exception with an error message and a cause exception.
+     * 
+     * @param message
+     *            the error message
+     * @param key
+     *            the i18n key to localize the exception message
+     * @param cause
+     *            the error that caused the exception
+     */
+    public I18nException(String message, String key, Throwable cause) {
+	super(message, cause);
+	this.key = key;
+    }
+    
+    public String getLocalizedMessage() {
+	String msg = Messages.getText(key);
+	if (msg.equals(key)) {
+	    msg = getMessage();
+	}
+	return msg;
+    }
+
+    /**
+     * Show the exception error in through the NotificationManager.
+     */
+    public void showError() {
+	NotificationManager.addError(getLocalizedMessage(), this);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ExportLocaleException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ExportLocaleException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ExportLocaleException.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {New extension for installation and update of text translations}
+*/
+package org.gvsig.i18n.impl;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.I18nException;
+
+/**
+ * Exception for errors exporting a Locale for translation or update.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class ExportLocaleException extends I18nException {
+
+    private static final long serialVersionUID = -1386427767068278421L;
+
+    private static final String MSG = "Unable to export the locales";
+
+    private static final String KEY = "_ExportLocaleException";
+    
+    private final Locale[] locales;
+
+    public ExportLocaleException(Locale[] locales) {
+	super(MSG, KEY);
+	this.locales = locales;
+    }
+
+    public ExportLocaleException(Locale[] locales, Throwable cause) {
+	super(MSG, KEY, cause);
+	this.locales = locales;
+    }
+ 
+    public String getLocalizedMessage() {
+	StringBuffer buffer = new StringBuffer();
+	if (locales != null) {
+	    int i = 0;
+	    for (; i < locales.length - 1; i++) {
+		buffer.append(locales[i]).append(',');
+	    }
+	    buffer.append(locales[i]);
+	}
+	return super.getLocalizedMessage() + ": " + buffer.toString();
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ExportLocaleException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleFileNameRequiredException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleFileNameRequiredException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleFileNameRequiredException.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {New extension for installation and update of text translations}
+*/
+package org.gvsig.i18n.impl;
+
+import org.gvsig.i18n.I18nException;
+
+/**
+ * Exception for errors installing a locale or locales from an import file.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class LocaleFileNameRequiredException extends I18nException {
+
+    private static final long serialVersionUID = 8426119666919876086L;
+
+    private static final String MSG = "A line in the CSV file with the locales to install or update does not contain the file name";
+
+    private static final String KEY = "_LocaleFileNameRequiredException";
+    
+    private String line;
+
+    public LocaleFileNameRequiredException(String line) {
+	super(MSG, KEY);
+	this.line = line;
+    }
+
+    public LocaleFileNameRequiredException(String line, Throwable cause) {
+	super(MSG, KEY, cause);
+	this.line = line;
+    }
+ 
+    public String getLocalizedMessage() {
+	return super.getLocalizedMessage() + ": " + line;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleFileNameRequiredException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleLanguageRequiredException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleLanguageRequiredException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleLanguageRequiredException.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {New extension for installation and update of text translations}
+*/
+package org.gvsig.i18n.impl;
+
+import org.gvsig.i18n.I18nException;
+
+/**
+ * Exception for errors installing a locale or locales from an import file.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class LocaleLanguageRequiredException extends I18nException {
+
+    private static final long serialVersionUID = 8426119666919876086L;
+
+    private static final String MSG = "A line in the CSV file with the locales to install or update does not contain the locale language code";
+
+    private static final String KEY = "_LocaleLanguageRequiredException";
+    
+    private String line;
+
+    public LocaleLanguageRequiredException(String line) {
+	super(MSG, KEY);
+	this.line = line;
+    }
+
+    public LocaleLanguageRequiredException(String line, Throwable cause) {
+	super(MSG, KEY, cause);
+	this.line = line;
+    }
+ 
+    public String getLocalizedMessage() {
+	return super.getLocalizedMessage() + ": " + line;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleLanguageRequiredException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/TranslationsConsolider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/TranslationsConsolider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/TranslationsConsolider.java	(revision 42196)
@@ -0,0 +1,400 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.gvsig.i18n.impl;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.i18n.I18nManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author usuario
+ */
+public class TranslationsConsolider {
+
+    private static final Logger logger = LoggerFactory.getLogger(TranslationsConsolider.class);
+
+    private I18nManager i18nManager = null;
+    private PluginsManager pluginsManager = null;
+    private Map<String, Map<String, String>> allTranslations = null;
+    private Locale currentLocale = null;
+    private Map<String, List<String>> keysInPlugins = null;
+
+    public TranslationsConsolider() {
+        this.pluginsManager = PluginsLocator.getManager();
+        this.allTranslations = new HashMap<String, Map<String, String>>();
+        this.currentLocale = this.getI18nManager().getCurrentLocale();
+        this.keysInPlugins = new HashMap<String, List<String>>();
+    }
+
+    public void setCurrentLocale(Locale locale) {
+        this.currentLocale = locale;
+    }
+
+    public Locale getCurrentLocale() {
+        return this.currentLocale;
+    }
+
+    public I18nManager getI18nManager() {
+        if ( this.i18nManager == null ) {
+            this.i18nManager = I18nManagerImpl.getInstance();
+        }
+        return this.i18nManager;
+    }
+
+    public void addKey(String key, String pluginCode) {
+        List<String> pluginCodes = this.keysInPlugins.get(key);
+        if ( pluginCodes == null ) {
+            pluginCodes = new ArrayList<String>();
+            this.keysInPlugins.put(key, pluginCodes);
+        }
+        if ( !StringUtils.isBlank(pluginCode) ) {
+            if ( !pluginCodes.contains(pluginCode) ) {
+                pluginCodes.add(pluginCode);
+            }
+        }
+    }
+
+    public void addLocale(Locale locale) {
+        if ( this.allTranslations.get(locale.toString()) == null ) {
+            this.allTranslations.put(locale.toString().toLowerCase(), new HashMap<String, String>());
+        }
+    }
+
+    public List<String> getPluginCodesOfKey(String key) {
+        List<String> pluginCodes = this.keysInPlugins.get(key);
+        return pluginCodes;
+    }
+
+    public Map<String, String> getTranslations(String locale) {
+        Map<String, String> translations = this.allTranslations.get(locale.toString().toLowerCase());
+        return translations;
+    }
+
+    public Map<String, String> getTranslations(Locale locale) {
+        return this.getTranslations(locale.toString());
+    }
+
+    public void add(Locale locale, String key, String value, String pluginCode) {
+        Map<String, String> translations = this.getTranslations(locale);
+        if ( !translations.containsKey(key) ) {
+            translations.put(key, value);
+            this.addKey(key, pluginCode);
+        }
+    }
+
+    public void add(Locale locale, Properties properties, String pluginCode) {
+        this.addLocale(locale);
+        Enumeration enumKeys = properties.keys();
+        while ( enumKeys.hasMoreElements() ) {
+            String key = (String) enumKeys.nextElement();
+            String value = properties.getProperty(key);
+            this.add(locale, key, value, pluginCode);
+        }
+    }
+
+    public List<Locale> getLocales() {
+        List<Locale> locales = new ArrayList<Locale>(this.allTranslations.size());
+        Iterator<String> itLocales = this.allTranslations.keySet().iterator();
+        while ( itLocales.hasNext() ) {
+            Locale locale = new Locale(itLocales.next().toString());
+            locales.add(locale);
+        }
+        return locales;
+    }
+
+    public List<String> getKeys() {
+        List<String> keys = new ArrayList<String>(this.keysInPlugins.size());
+        keys.addAll(this.keysInPlugins.keySet());
+        Collections.sort(keys);
+        return keys;
+    }
+
+    private String getResourceFileName(Locale locale) {
+        StringBuilder fileName = new StringBuilder();
+        fileName.append("text");
+        if ( !StringUtils.isBlank(locale.getLanguage()) ) {
+            fileName.append("_");
+            fileName.append(locale.getLanguage());
+        }
+        if ( !StringUtils.isBlank(locale.getCountry()) ) {
+            fileName.append("_");
+            fileName.append(locale.getCountry());
+        }
+        if ( !StringUtils.isBlank(locale.getVariant()) ) {
+            fileName.append("_");
+            fileName.append(locale.getVariant());
+        }
+        fileName.append(".properties");
+        return fileName.toString();
+    }
+
+    public String getTranslation(String locale, String key) {
+        Map<String, String> translations = this.getTranslations(locale);
+        if ( translations == null ) {
+            logger.warn("Can't locate the translations for locale '" + locale + "'.");
+            return null;
+        }
+        return translations.get(key);
+    }
+
+    public String getTranslation(Locale locale, String key) {
+        return this.getTranslation(locale.toString(), key);
+    }
+
+    public String get(String key) {
+        return this.getTranslation(currentLocale, key);
+    }
+
+    public void put(String key, String value) {
+        this.add(currentLocale, key, value, null);
+    }
+
+    private int mergeWithTranslationsFromMessages(SimpleTaskStatus task, int n) {
+        List<Locale> locales = this.getLocales();
+        
+        for(int i=0; i<locales.size(); i++) {
+            Locale locale = locales.get(i);
+            task.message("merge "+locale.toString());
+            task.setCurValue(n++);
+            Properties translations = Messages.getTranslations(locale);
+            Enumeration<Object> keys = translations.keys();
+            while( keys.hasMoreElements() ) {
+                String key = (String) keys.nextElement();
+                String value = translations.getProperty(key);
+                this.add(locale, key, value, null);
+            }
+        }
+        return n;
+        
+    }
+    
+    public void consolide() throws IOException {
+        SimpleTaskStatus task = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("Consolide translations");
+        task.setAutoremove(true);
+        task.add();
+        try {
+            task.setTitle("Consolide translations");
+            int n = this.loadAllTranslations(task);
+            n = mergeWithTranslationsFromMessages(task,n);
+            if( !task.isCancellationRequested() ) {
+                this.storeAsProperties(task, n);
+            }
+        } finally {
+            task.terminate();
+        }
+    }
+    
+    private int loadAllTranslations(SimpleTaskStatus task) {
+        task.message("searching locales");
+        Locale[] locales = this.getI18nManager().getInstalledLocales();
+
+        List<PluginServices> plugins = this.pluginsManager.getPlugins();
+        File appI18nFolder = pluginsManager.getApplicationI18nFolder();
+        File[] subfolders = appI18nFolder.listFiles(new FileFilter() {
+            public boolean accept(File file) {
+                return file.isDirectory();
+            }
+        });
+        int n = 1;
+        task.setRangeOfValues(0, plugins.size() + subfolders.length + locales.length*2 + 1);
+
+        task.message("loading from andami.");
+        task.setCurValue(n++);
+        loadTranslation(locales, appI18nFolder, null);
+
+        for ( File subfolder : subfolders ) {
+            if( task.isCancellationRequested() ) {
+                return n;
+            }
+            task.setCurValue(n++);
+            if ( subfolder.isDirectory() ) {
+                task.message("loading " + subfolder.getName());
+                if ( "andami".equals(subfolder.getName()) ) {
+                    loadTranslation(locales, appI18nFolder, "org.gvsig.andami");
+                } else {
+                    loadTranslation(locales, appI18nFolder, null);
+                }
+            }
+        }
+
+        for ( PluginServices plugin : plugins ) {
+            if( task.isCancellationRequested() ) {
+                return n;
+            }
+            if ( plugin != null ) {
+                task.message("loading " + plugin.getPluginName());
+                task.setCurValue(n++);
+                loadTranslation(locales, plugin.getPluginDirectory(), plugin.getPluginName());
+            }
+        }
+        return n;
+    }
+
+    private void loadTranslation(Locale[] locales, File folder, String pluginCode) {
+        for ( Locale locale : locales ) {
+            File f1 = new File(folder, getResourceFileName(locale));
+            File f2 = new File(folder, "i18n/" + getResourceFileName(locale));
+            if ( !f1.exists() && !f2.exists() ) {
+                if ( "es".equals(locale.getLanguage()) ) {
+                    f1 = new File(folder, "text.properties");
+                    f2 = new File(folder, "i18n/text.properties");
+                }
+            }
+            if ( f1.exists() ) {
+                loadTranslation(locale, f1, pluginCode);
+            }
+            if ( f2.exists() ) {
+                loadTranslation(locale, f2, pluginCode);
+            }
+        }
+    }
+
+    private void loadTranslation(Locale locale, File f, String pluginCode) {
+        FileInputStream fins = null;
+        try {
+            Properties properties = new Properties();
+            fins = new FileInputStream(f);
+            properties.load(fins);
+            this.add(locale, properties, pluginCode);
+        } catch (IOException ex) {
+            logger.warn("Error processing property file '" + f.getAbsolutePath() + "'.", ex);
+        } finally {
+            IOUtils.closeQuietly(fins);
+        }
+    }
+
+    private void storeAsProperties(SimpleTaskStatus task, int pos) throws IOException {
+        task.message("Prepraring to store");
+        File folder = new File(this.pluginsManager.getApplicationI18nFolder(), "translations.all");
+        if( !folder.exists() ) {
+            FileUtils.forceMkdir(folder);
+        }
+        List<String> keys = this.getKeys();
+        List<Locale> locales = this.getLocales();
+        for ( Locale locale : locales ) {
+            task.setCurValue(pos++);
+            task.message("Storing "+locale.toString());
+            Map<String, String> translations = this.getTranslations(locale);
+            Properties properties = new Properties();
+            for ( String key : keys ) {
+                String value = this.getTranslation(locale, key);
+                if( value == null ) {
+                    value = "";
+                }
+                properties.setProperty(key, value);
+            }
+            File f = new File(folder, this.getResourceFileName(locale));
+            FileOutputStream fos = null;
+            try {
+                fos = new FileOutputStream(f);
+                properties.store(fos, null);
+            } catch (Exception ex) {
+                logger.warn("Can't write properties '" + f.getAbsolutePath() + "'.", ex);
+            } finally {
+                IOUtils.closeQuietly(fos);
+            }
+
+        }
+        task.message("Storing plugin information");
+        Properties properties = new Properties();
+        for ( String key : keys ) {
+            List<String> pluginCodes = this.keysInPlugins.get(key);
+            StringBuilder ss = null;
+            for ( String pluginCode : pluginCodes ) {
+                if ( ss == null ) {
+                    ss = new StringBuilder();
+                } else {
+                    ss.append(", ");
+                }
+                ss.append(pluginCode);
+            }
+            if ( ss == null ) {
+                properties.setProperty(key, "");
+            } else {
+                properties.setProperty(key, ss.toString());
+            }
+        }
+        FileOutputStream fos = null;
+        File f = new File(folder, "keysbyplugin.properties");
+        try {
+            fos = new FileOutputStream(f);
+            properties.store(fos, null);
+        } catch (Exception ex) {
+            logger.warn("Can't write properties '" + f.getAbsolutePath() + "'.", ex);
+        } finally {
+            IOUtils.closeQuietly(fos);
+        }             
+        task.message("");
+    }
+
+    /*
+     def storeAsDBF(self):
+     maxl = 100
+     for k in self.keys():
+     if len(k) > maxl:
+     maxl = len(k)
+     #print "max key len: ", maxl
+        
+     folder = File(self.__pluginsManager.getApplicationFolder(),"i18n")
+     f = File(folder,"translations.dbf")
+     try:
+     f.delete()
+     except:
+     print "Can't delete file "+f.getAbsolutePath()
+     schema = createSchema() 
+     schema.append( "ID" , "Integer" , 7)
+     schema.append( "key" , "String" , maxl)
+     schema.append( "locale" , "String" , 30)
+     schema.append( "translation" , "String" , 200)
+     schema.append( "plugins" , "String" , 200)
+
+     table = createDBF( schema, File(folder,"translations.dbf"))
+
+     locales = self.getI18nManager().getInstalledLocales()
+     idCounter = 1
+     for key in self.keys():
+     for locale in locales:
+     pluginCodes = ""
+     for pluginCode in self.getPluginCodesOfKey(key):
+     pluginCodes += pluginCode + " "
+     pluginCodes = str(pluginCodes).strip()
+        
+     table.append(ID=idCounter, 
+     key=key, 
+     locale=locale.toString(), 
+     translation=self.getTranslation(locale, key),
+     plugins=pluginCodes
+     )
+     idCounter +=1
+     table.commit()
+  
+     */
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/InstallLocalesException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/InstallLocalesException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/InstallLocalesException.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {New extension for installation and update of text translations}
+*/
+package org.gvsig.i18n.impl;
+
+import java.io.File;
+
+import org.gvsig.i18n.I18nException;
+
+/**
+ * Exception for errors installing a locale or locales from an import file.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class InstallLocalesException extends I18nException {
+
+    private static final long serialVersionUID = 8426119666919876086L;
+
+    private static final String MSG = "Unable to install locales from the imported file ";
+
+    private static final String KEY = "_InstallLocalesException";
+    
+    private final File importFile;
+
+    public InstallLocalesException(File importFile) {
+	super(MSG, KEY);
+	this.importFile = importFile;
+    }
+
+    public InstallLocalesException(File importFile, Throwable cause) {
+	super(MSG, KEY, cause);
+	this.importFile = importFile;
+    }
+ 
+    public String getLocalizedMessage() {
+	return super.getLocalizedMessage() + ": " + importFile;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/InstallLocalesException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/UninstallLocaleException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/UninstallLocaleException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/UninstallLocaleException.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {New extension for installation and update of text translations}
+*/
+package org.gvsig.i18n.impl;
+
+import java.util.Locale;
+
+import org.gvsig.i18n.I18nException;
+
+/**
+ * Exception for errors uninstalling a {@link Locale}�
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class UninstallLocaleException extends I18nException {
+
+    private static final long serialVersionUID = -7147574247950810955L;
+
+    private static final String MSG = "The locale "
+	    + " is the current locale or a reference locale, "
+	    + "can't be unsintalled";
+
+    private static final String KEY = "_UninstallLocaleException";
+    
+    private final Locale locale;
+
+    /**
+     */
+    public UninstallLocaleException(Locale locale) {
+	super(MSG, KEY);
+	this.locale = locale;
+    }
+
+    /**
+     */
+    public UninstallLocaleException(Locale locale, Throwable cause) {
+	super(MSG, KEY, cause);
+	this.locale = locale;
+    }
+ 
+    public String getLocalizedMessage() {
+	return super.getLocalizedMessage() + ": " + locale;
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/UninstallLocaleException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ReadCSVLocalesFileException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ReadCSVLocalesFileException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ReadCSVLocalesFileException.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {DiSiD Technologies}  {New extension for installation and update of text translations}
+*/
+package org.gvsig.i18n.impl;
+
+import org.gvsig.i18n.I18nException;
+
+/**
+ * Exception for errors installing a locale or locales from an import file.
+ * 
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ */
+public class ReadCSVLocalesFileException extends I18nException {
+
+    private static final long serialVersionUID = 8426119666919876086L;
+
+    private static final String MSG = "Error while reading the CSV file with the locales to install or update";
+
+    private static final String KEY = "_ReadCSVLocalesFileException";
+    
+    public ReadCSVLocalesFileException() {
+	super(MSG, KEY);
+    }
+
+    public ReadCSVLocalesFileException(Throwable cause) {
+	super(MSG, KEY, cause);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ReadCSVLocalesFileException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/I18nManagerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/I18nManagerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/I18nManagerImpl.java	(revision 42196)
@@ -0,0 +1,678 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {New extension for installation and update of text translations}
+ */
+package org.gvsig.i18n.impl;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+import org.gvsig.andami.LocaleManager;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.i18n.I18nException;
+import org.gvsig.i18n.I18nManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.utils.StringUtilities;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Implementation of the I18nManager interface.
+ *
+ * @author <a href="mailto:dcervera@disid.com">David Cervera</a>
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class I18nManagerImpl implements I18nManager {
+
+    private static final Logger logger = LoggerFactory.getLogger(I18nManagerImpl.class);
+    
+    private static final String LOCALES_FILE_NAME = "locales.csv";
+
+    private static final String CSV_SEPARATOR = ",";
+
+    private static final I18nManager DEFAULT = new I18nManagerImpl();
+
+    /**
+     * The list of default reference locales. The last one will be used to get
+     * all the keys when translating to a new locale.
+     */
+    private Locale[] referenceLocales = new Locale[]{ENGLISH, SPANISH};
+
+    LocaleManager localeManager = null;
+
+    private LocaleManager getLocaleManager() {
+        if ( localeManager == null ) {
+            localeManager = PluginsLocator.getLocaleManager();
+        }
+        return localeManager;
+    }
+
+    /**
+     * Returns the unique instance of the I18nManager.
+     *
+     * @return the unique instance
+     */
+    public static I18nManager getInstance() {
+        return DEFAULT;
+    }
+
+    public static String capitalize(String text) {
+        // Convert the first letter to uppercase
+        String capitalLetter
+                = new String(new char[]{Character.toUpperCase(text.charAt(0))});
+        return capitalLetter.concat(text.substring(1));
+    }
+
+    private Set<Locale> getRegisteredLocales() {
+        return getLocaleManager().getInstalledLocales();
+    }
+
+    public Locale getCurrentLocale() {
+        return getLocaleManager().getCurrentLocale();
+    }
+
+    public Locale[] getInstalledLocales() {
+        Set<Locale> locales = getRegisteredLocales();
+        return (Locale[]) locales.toArray(new Locale[locales.size()]);
+    }
+
+    private File getResourcesFolder() {
+        return getLocaleManager().getResourcesFolder();
+    }
+
+    public void setCurrentLocale(Locale locale) {
+        getLocaleManager().setCurrentLocale(locale);
+    }
+
+    public Locale getDefaultSystemLocale() {
+        return getLocaleManager().getDefaultSystemLocale();
+    }
+
+    public void installLocale(Locale locale) {
+        getLocaleManager().uninstallLocale(locale);
+    }
+
+    public void uninstallLocale(Locale locale) throws I18nException {
+        if ( getCurrentLocale().equals(locale) || isReferenceLocale(locale) ) {
+            throw new UninstallLocaleException(locale);
+        }
+        if ( getLocaleManager().uninstallLocale(locale) ) {
+            // Remove the resource bundle file
+            File bundleFile
+                    = new File(getResourcesFolder(), getResourceFileName(locale));
+
+            if ( bundleFile.exists() ) {
+                bundleFile.delete();
+            }
+        }
+    }
+
+    public String getDisplayName(Locale locale) {
+        return getDisplayName(locale, locale);
+    }
+
+    public String getDisplayName(Locale locale, Locale displayLocale) {
+        StringBuffer name
+                = new StringBuffer(getLanguageDisplayName(locale, displayLocale));
+
+        if ( !isEmpty(locale.getCountry()) ) {
+            name.append(" - ");
+            name.append(locale.getDisplayCountry(displayLocale));
+        }
+
+        if ( !isEmpty(locale.getVariant()) ) {
+            name.append(" - ");
+            name.append(locale.getDisplayVariant(displayLocale));
+        }
+
+        name.append(" (").append(locale.toString()).append(")");
+
+        return name.toString();
+    }
+
+    private boolean isEmpty(String text) {
+        return text == null || text.trim().length() == 0;
+    }
+
+    public String getLanguageDisplayName(Locale locale) {
+        return this.getLocaleManager().getLanguageDisplayName(locale);
+    }
+
+    public String getLanguageDisplayName(Locale locale, Locale displayLocale) {
+        return this.getLocaleManager().getLanguageDisplayName(locale);
+        /*
+        String displayName;
+
+	// Correction for the Basque language display name,
+        // show it in Basque, not in Spanish
+        if ( "eu".equals(locale.getLanguage())
+                && "vascuence".equals(locale.getDisplayLanguage()) ) {
+            displayName = "Euskera";
+        } // Patch for Valencian/Catalan
+        else if ( "ca".equals(locale.getLanguage()) ) {
+	    // displayName = Messages.getText("__valenciano");
+            // if ("__valenciano".equals(displayName)) {
+            // displayName = Messages.getText("__catalan");
+            // }
+            displayName = "Valenci�";
+        } else {
+            displayName = locale.getDisplayLanguage(displayLocale);
+        }
+
+        return capitalize(displayName);
+        */
+    }
+
+    public Locale[] installLocales(File importFile) throws I18nException {
+        List importLocales = new ArrayList();
+
+        try {
+            ZipFile zipFile = new ZipFile(importFile);
+
+            Map locales = getZipFileNonReferenceLocales(zipFile);
+
+            if ( locales == null || locales.size() == 0 ) {
+                return null;
+            }
+
+            for ( Iterator iterator = locales.entrySet().iterator(); iterator.hasNext(); ) {
+                Entry entry = (Entry) iterator.next();
+
+                String fileName = (String) entry.getKey();
+                Locale locale = (Locale) entry.getValue();
+                importLocales.add(locale);
+
+                getLocaleManager().installLocale(locale);
+
+                // Replace the old bundle with the new one
+                ZipEntry zipEntry = zipFile.getEntry(fileName);
+                InputStream is = zipFile.getInputStream(zipEntry);
+                BufferedReader reader
+                        = new BufferedReader(new InputStreamReader(is));
+
+                File bundleFile = getResourceFile(locale);
+                FileWriter fileWriter = new FileWriter(bundleFile);
+                BufferedWriter writer = new BufferedWriter(fileWriter);
+
+                String line;
+                while ( (line = reader.readLine()) != null ) {
+                    writer.write(line);
+                    writer.write('\n');
+                }
+                writer.flush();
+                writer.close();
+                fileWriter.close();
+                reader.close();
+                is.close();
+            }
+
+        } catch (Exception ex) {
+            throw new InstallLocalesException(importFile, ex);
+        }
+
+        return (Locale[]) importLocales.toArray(new Locale[importLocales.size()]);
+    }
+
+    public void exportLocaleForUpdate(Locale locale, Locale referenceLocale,
+            File exportFile) throws I18nException {
+
+        exportLocalesForUpdate(new Locale[]{locale}, referenceLocale,
+                exportFile);
+    }
+
+    public void exportLocalesForUpdate(Locale[] locales,
+            Locale referenceLocale, File exportFile) throws I18nException {
+
+        exportLocale(locales, new Locale[]{referenceLocale}, exportFile,
+                true);
+    }
+
+    public void exportLocaleForTranslation(Locale locale,
+            Locale referenceLocale, File exportFile) throws I18nException {
+
+        exportLocaleForTranslation(locale, new Locale[]{referenceLocale},
+                exportFile);
+    }
+
+    public void exportLocaleForTranslation(Locale locale,
+            Locale[] referenceLocales, File exportFile) throws I18nException {
+
+        exportLocale(new Locale[]{locale}, referenceLocales, exportFile,
+                false);
+    }
+
+    public Locale[] getReferenceLocales() {
+        return referenceLocales;
+    }
+
+    public void setReferenceLocales(Locale[] referenceLocales) {
+        this.referenceLocales = referenceLocales;
+    }
+
+    public void setDefaultLocales(Locale[] defaultLocales) {
+        logger.warn("This operation (setDefaultLocales) is not supported.");
+    }
+
+    private void exportLocale(Locale[] locales, Locale[] referenceLocales,
+            File exportFile, boolean update) throws I18nException {
+
+        Locale[] refArray
+                = getReferenceLocalesToExport(locales, referenceLocales);
+
+        Set allReferenceKeys = new HashSet();
+        Map referenceTexts = new HashMap(refArray.length);
+        for ( int i = 0; i < refArray.length; i++ ) {
+            Map texts = getAllTexts(refArray[i]);
+            referenceTexts.put(refArray[i], texts);
+            allReferenceKeys.addAll(texts.keySet());
+        }
+
+        try {
+            FileOutputStream fos = new FileOutputStream(exportFile);
+            ZipOutputStream zipos = new ZipOutputStream(fos);
+
+            // Create the index file
+            writeZipFileLocales(zipos, locales, refArray);
+
+            PrintStream ps = new PrintStream(zipos);
+            Map texts = null;
+
+            if ( update ) {
+                // First, export the locales to update
+                if ( locales != null ) {
+                    for ( int i = 0; i < locales.length; i++ ) {
+                        texts = getAllTexts(locales[i]);
+                        addPendingKeys(texts, allReferenceKeys);
+                        putResourceInZip(zipos, ps, texts,
+                                getResourceFileName(locales[i]));
+                    }
+                }
+            } else { // translate
+                // First, export the locales to translate, taking the keys from
+                // the reference locales, but without values
+                if ( locales != null ) {
+                    for ( int i = 0; i < locales.length; i++ ) {
+                        putResourceInZip(zipos, ps, allReferenceKeys,
+                                getResourceFileName(locales[i]));
+                    }
+                }
+            }
+
+            // Next, export the reference locales
+            if ( refArray != null ) {
+                for ( int i = 0; i < refArray.length; i++ ) {
+                    texts = getAllTexts(refArray[i]);
+                    putResourceInZip(zipos, ps, texts,
+                            getResourceFileName(refArray[i]));
+                }
+            }
+
+            ps.flush();
+            ps.close();
+            zipos.close();
+            fos.close();
+        } catch (IOException ex) {
+            throw new ExportLocaleException(locales, ex);
+        }
+    }
+
+    /**
+     * Adds the keys of the set to the map that aren't still contained in it
+     * with a related empty String.
+     *
+     * @param texts
+     * the map to complete with the keys
+     * @param allReferenceKeys
+     * the complete key set
+     */
+    private void addPendingKeys(Map texts, Set allReferenceKeys) {
+        for ( Iterator iterator = allReferenceKeys.iterator(); iterator.hasNext(); ) {
+            Object key = (Object) iterator.next();
+            if ( !texts.containsKey(key) ) {
+                texts.put(key, "");
+            }
+        }
+    }
+
+    /**
+     * Returns the list of reference locales to export, as the union of the
+     * default reference locales list and the one selected as reference. The
+     * locales to translate or update are extracted from the list.
+     */
+    private Locale[] getReferenceLocalesToExport(Locale[] locales,
+            Locale[] referenceLocalesSelected) {
+		// The reference locales to export are the default ones plus the
+        // selected by the user.
+        Set exportRefLocales = new HashSet(referenceLocales.length);
+        for ( int i = 0; i < referenceLocales.length; i++ ) {
+            exportRefLocales.add(referenceLocales[i]);
+        }
+        if ( referenceLocalesSelected != null ) {
+            for ( int i = 0; i < referenceLocalesSelected.length; i++ ) {
+                exportRefLocales.add(referenceLocalesSelected[i]);
+            }
+        }
+        if ( locales != null ) {
+            for ( int i = 0; i < locales.length; i++ ) {
+                exportRefLocales.remove(locales[i]);
+            }
+        }
+        Locale[] refArray
+                = (Locale[]) exportRefLocales.toArray(new Locale[exportRefLocales.size()]);
+        return refArray;
+    }
+
+    /**
+     * Returns all the localized texts and its keys for a locale.
+     */
+    private Map getAllTexts(Locale locale) {
+        return Messages.getAllTexts(locale);
+    }
+
+    private Map getZipFileNonReferenceLocales(ZipFile zipFile)
+            throws I18nException {
+        ZipEntry zipEntry = zipFile.getEntry(LOCALES_FILE_NAME);
+
+        if ( zipEntry == null ) {
+            return null;
+        }
+
+        Map locales;
+        try {
+            InputStream is = zipFile.getInputStream(zipEntry);
+            BufferedReader reader
+                    = new BufferedReader(new InputStreamReader(is));
+
+            locales = new HashMap(2);
+            String line;
+            while ( (line = reader.readLine()) != null ) {
+				// The excepted format is:
+                // FILENAME,LANGUAGE,COUNTRY,VARIANT,IS_REFERENCE
+                StringTokenizer st
+                        = new StringTokenizer(line, CSV_SEPARATOR, true);
+                // First: locale file name (required)
+                String fileName = st.nextToken();
+                if ( CSV_SEPARATOR.equals(fileName) ) {
+                    throw new LocaleFileNameRequiredException(line);
+                } else {
+                    // Read the next separator
+                    st.nextToken();
+                }
+                // Second: the locale language (required)
+                String language = st.nextToken();
+                if ( CSV_SEPARATOR.equals(language) ) {
+                    throw new LocaleLanguageRequiredException(line);
+                } else {
+                    // Read the next separator
+                    st.nextToken();
+                }
+                // Third: the country
+                String country = st.nextToken();
+                if ( CSV_SEPARATOR.equals(country) ) {
+                    country = null;
+                } else {
+                    // Read the next separator
+                    st.nextToken();
+                }
+                // Fourth: the variant
+                String variant = st.nextToken();
+                if ( CSV_SEPARATOR.equals(variant) ) {
+                    variant = null;
+                } else {
+                    // Read the next separator
+                    st.nextToken();
+                }
+                // Fifth: is a reference locale?
+                String refStr = st.nextToken();
+                if ( CSV_SEPARATOR.equals(refStr) ) {
+                    refStr = null;
+                }
+
+                // Only add non reference locales
+                if ( refStr != null && !"true".equals(refStr.toLowerCase()) ) {
+                    // Variant only accepted if country defined
+                    if ( country == null ) {
+                        variant = null;
+                    }
+                    country = country == null ? "" : country;
+                    variant = variant == null ? "" : variant;
+                    Locale locale = new Locale(language, country, variant);
+
+                    locales.put(fileName, locale);
+                }
+            }
+
+            reader.close();
+            is.close();
+        } catch (IOException ex) {
+            throw new ReadCSVLocalesFileException(ex);
+        }
+
+        return locales;
+    }
+
+    private void writeZipFileLocales(ZipOutputStream zos, Locale[] locales,
+            Locale[] referenceLocales) throws IOException {
+        ZipEntry zipEntry = new ZipEntry(LOCALES_FILE_NAME);
+
+        zos.putNextEntry(zipEntry);
+        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(zos));
+
+        if ( locales != null ) {
+            for ( int i = 0; i < locales.length; i++ ) {
+                writeLocaleEntry(locales[i], writer, false);
+            }
+        }
+        if ( referenceLocales != null ) {
+            for ( int i = 0; i < referenceLocales.length; i++ ) {
+                writeLocaleEntry(referenceLocales[i], writer, true);
+            }
+        }
+
+        writer.flush();
+        zos.closeEntry();
+    }
+
+    /**
+     * Writes the locale entry into a writer.
+     *
+     * @param locale
+     * the locale to create the entry for
+     * @param writer
+     * to write to
+     * @param reference
+     * is it is a reference locale or not
+     * @throws IOException
+     * if there is an error creating the locale entry
+     */
+    private void writeLocaleEntry(Locale locale, BufferedWriter writer,
+            boolean reference) throws IOException {
+        String language = locale.getLanguage();
+        String country = locale.getCountry();
+        country = country == null ? "" : country;
+        String variant = locale.getVariant();
+        variant = variant == null ? "" : variant;
+
+        writer.write(getResourceFileName(locale));
+        writer.write(',');
+        writer.write(language);
+        writer.write(',');
+        writer.write(country);
+        writer.write(',');
+        writer.write(variant);
+        writer.write(',');
+        writer.write(Boolean.toString(reference));
+        writer.write('\n');
+    }
+
+    /**
+     * Returns if a locale is one of the default reference ones.
+     */
+    private boolean isReferenceLocale(Locale locale) {
+        for ( int i = 0; i < referenceLocales.length; i++ ) {
+            if ( referenceLocales[i].equals(locale) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Puts a new resource file into a Jar file.
+     */
+    private void putResourceInZip(ZipOutputStream zipos, PrintStream ps,
+            Map texts, String resourceFileName) throws IOException {
+        // Add ZIP entry for the resource bundle file
+        zipos.putNextEntry(new ZipEntry(resourceFileName));
+
+        for ( Iterator iterator = texts.entrySet().iterator(); iterator.hasNext(); ) {
+            Entry entry = (Entry) iterator.next();
+            String keyEncoded = escape((String) entry.getKey(), true);
+            ps.print(keyEncoded);
+            ps.print("=");
+            String valueEncoded = escape((String) entry.getValue(), false);
+            ps.println(valueEncoded);
+        }
+
+        ps.flush();
+
+        // Close the ZIP entry, the file is complete
+        zipos.closeEntry();
+    }
+
+    /**
+     * Puts a new resource file into a Jar file.
+     */
+    private void putResourceInZip(ZipOutputStream zipos, PrintStream ps,
+            Set keys, String resourceFileName) throws IOException {
+        // Add ZIP entry for the resource bundle file
+        zipos.putNextEntry(new ZipEntry(resourceFileName));
+
+        for ( Iterator iterator = keys.iterator(); iterator.hasNext(); ) {
+            String value = (String) iterator.next();
+            String keyEncoded = escape(value, true);
+            ps.print(keyEncoded);
+            ps.print("=");
+            ps.println();
+        }
+
+        ps.flush();
+
+        // Close the ZIP entry, the file is complete
+        zipos.closeEntry();
+    }
+
+    /**
+     * Returns the file which contains the translations for a locale.
+     */
+    private File getResourceFile(Locale locale) {
+        return new File(getResourcesFolder(), getResourceFileName(locale));
+    }
+
+    /**
+     * Returns the name of the file which contains the translations for a
+     * locale.
+     */
+    private String getResourceFileName(Locale locale) {
+        StringBuffer fileName = new StringBuffer("text");
+
+        // Spanish without country is the default locale
+        if ( !(isEmpty(locale.getCountry()) && "es".equals(locale.getLanguage())) ) {
+            fileName.append('_').append(locale.getLanguage());
+        }
+
+        // Add the locale country
+        if ( !isEmpty(locale.getCountry()) ) {
+            fileName.append('_').append(locale.getCountry());
+        }
+
+        // Add the locale variant
+        if ( !isEmpty(locale.getVariant()) ) {
+            fileName.append('_').append(locale.getVariant());
+        }
+
+        fileName.append(".properties");
+        return fileName.toString();
+    }
+
+    private String escape(String value, boolean replaceBlanks) {
+        // First replace non printable characters
+        if ( replaceBlanks ) {
+            value = StringUtilities.replace(value, " ", "\\ ");
+        }
+        value = StringUtilities.replace(value, ":", "\\:");
+        value = StringUtilities.replace(value, "\n", "\\n");
+        value = StringUtilities.replace(value, "\t", "\\t");
+        value = StringUtilities.replace(value, "\b", "\\b");
+        value = StringUtilities.replace(value, "\f", "\\f");
+        value = StringUtilities.replace(value, "\r", "\\r");
+		// value = StringUtilities.replace(value, "\\", "\\\\");
+        // value = StringUtilities.replace(value, "\'", "\\\'");
+        // value = StringUtilities.replace(value, "\"", "\\\"");
+
+        // Next, encode in raw-unicode-escape
+        return toRawUnicodeEncoded(value);
+    }
+
+    private String toRawUnicodeEncoded(String value) {
+        StringBuffer sb = new StringBuffer();
+        for ( int i = 0; i < value.length(); i++ ) {
+            char c = value.charAt(i);
+            if ( c <= 0x80 ) {
+                sb.append(c);
+            } else {
+                sb.append("\\u");
+                String hexValue = Integer.toHexString((int) c);
+                // Append 0 if the hex value has less than 4 digits
+                for ( int j = hexValue.length(); j < 4; j++ ) {
+                    sb.append('0');
+                }
+                sb.append(hexValue);
+            }
+        }
+        return sb.toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/I18nManagerImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/disid-logo.jpeg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/disid-logo.jpeg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/disid.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/disid.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/disid.html	(revision 42196)
@@ -0,0 +1,52 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<html>
+<body>
+
+<img src="disid-logo.jpeg"><br>
+
+<h2>DiSiD Technologies</h2>
+<br>
+<p>
+<a href="http://www.disid.com/">http://www.disid.com/</a>
+</p>
+<p>Empresa de ingenier&iacute;a inform&aacute;tica especializada en tecnolog&iacute;a Java.</p>
+<p>Nuestro objetivo es proveer soluciones software enfocadas a resolver problemas y necesidades con
+el objetivo de ofrecer s&oacute;lo lo que los clientes necesitan, evitando gestiones innecesarias.</p>
+<br>
+<p>Especializados en:
+<ul>
+<li>Sistemas de informaci&oacute;n geogr&aacute;fica (gvSIG)</li>
+<li>Reconocimiento y trazabilidad de personas y Activos con representaci&oacute;n gr&aacute;fica</li>
+<li>e-business y Tiendas virtuales</li>
+<li>Portales corporativos y Marketing on-line</li>
+<li>Consultor&iacute;a tecnol&oacute;gica, desarrollo, soporte y formaci&oacute;n Java</li>
+</ul>
+<br>
+<img src="logo_gvsig-asociacion.jpg">
+<p><em>Miembro de la <a href="http://www.gvsig.com/">Asociaci&oacute;n gvSIG</a></em>
+</body>
+</html>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/disid.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/logo_gvsig-asociacion.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/logo_gvsig-asociacion.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,7 @@
+I18nPreferencePage.ayuda=If you change the active locale, it won't be used until the app is restarted
+I18nPreferencePage.colaboraciones=If you would like to help with the translation of gvSIG, put in contact with us through the email address: {0}
+I18nPreferencePage.Locale_code=Locale code
+I18nPreferencePage.Idioma=Language
+I18nPreferencePage.Pais=Country
+I18nPreferencePage.Variante=Variant
+I18nPreferencePage.Activar=Active

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,10 @@
+I18nPreferencePage.ayuda=Si cambia el idioma activo, \u00e9ste no se visualizar\u00e1 hasta que se reinicie la aplicaci\u00f3n
+I18nPreferencePage.colaboraciones=Si desea colaborar en la traducci\u00f3n del interfaz de gvSIG, p\u00f3ngase en contacto con nosotros a trav\u00e9s de la direcci\u00f3n de email: {0}
+I18nPreferencePage.Locale_code=C\u00f3digo
+I18nPreferencePage.Idioma=Idioma
+I18nPreferencePage.Pais=Pa\u00eds
+I18nPreferencePage.Variante=Variante
+I18nPreferencePage.Activar=Activar
+
+_Consolidate_all_translations=Consolidar todas las traducciones
+_Dump_not_translated_keys=Copia las claves no traducidas
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+    <alternativeNames name="org.gvsig.i18n.extension"/>
+    <depends plugin-name="org.gvsig.app.mainplugin" />
+    <depends plugin-name="org.gvsig.coreplugin.app.mainplugin" />
+    <resourceBundle name="text" />
+    <libraries library-dir="lib" />
+    <extensions>
+        <extension class-name="org.gvsig.i18n.extension.I18nExtension"
+                           description="Extensi�n de gesti�n de traducciones multiidioma" 
+                           active="true" 
+                           priority="1">
+        </extension>
+        <extension class-name="org.gvsig.i18n.extension.ConsolideTranslationsExtension"
+                           description="Extensi�n para consolidar en andami todas las traducciones" 
+                           active="true" 
+                           priority="1">
+            <action 
+                name="tools-devel-consolidate-translations"
+                label="_Consolidate_all_translations" 
+                position="908500201" 
+                action-command="tools-devel-consolidate-translations"
+                icon="tools-devel-consolidate-translations"
+                tooltip="_Consolidate_all_translations" 
+                accelerator=""
+            />
+            <action 
+                name="tools-devel-not-translated-keys"
+                label="__Dump_not_translated_keys" 
+                position="908500202" 
+                action-command="tools-devel-not-translated-keys"
+                icon="tools-devel-not-translated-keys"
+                tooltip="_Dump_not_translated_keys" 
+                accelerator=""
+            />
+            <menu 
+                name="tools-devel-consolidate-translations"
+                text="tools/Development/_Consolidate_all_translations" 
+            />
+            <menu 
+                name="tools-devel-not-translated-keys"
+                text="tools/Development/_Dump_not_translated_keys" 
+            />
+        </extension>
+    </extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/images/preferences/i18n-preferences
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/images/preferences/i18n-preferences
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/images/preferences/i18n-preferences.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/images/preferences/i18n-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.i18n.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Thu Jul 17 20:50:36 EDT 2014
+buildNumber=2107

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,73 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>target/templates-zips</directory>
+      <outputDirectory>templates</outputDirectory>
+    </fileSet>
+  </fileSets>
+  
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>ant-contrib:ant-contrib</include>
+        <include>org.apache.ant:ant</include>
+        <include>org.apache.ant:ant-launcher</include>
+        <include>org.apache.ant:ant-nodeps</include>
+        <include>org.apache.ant:ant-apache-oro</include>
+        <include>com.sardak:antform</include>
+        <include>org.tigris.antelope:antelopetasks</include>	
+        <include>org.apache.maven:maven-ant-tasks</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.fortunecookies package documentation</title>
+</head>
+<body>
+
+	<p>gvSIG Project creation from templates plugins.</p>
+	
+	<p>
+	It allows to create new development projects for gvSIG from templates.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/settings/PlatformPropertiesWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/settings/PlatformPropertiesWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/settings/PlatformPropertiesWindow.java	(revision 42196)
@@ -0,0 +1,326 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.mkmvnproject.gui.settings;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * This dialog lets the user write the file .gvsig.platform.properties
+ * 
+ * @author jldominguez
+ *
+ */
+public class PlatformPropertiesWindow extends JPanel
+implements IWindow, ActionListener, DocumentListener {
+    
+    private static final Logger logger =
+        LoggerFactory.getLogger(PlatformPropertiesWindow.class);
+    
+    private WindowInfo winfo = null;
+    private File targetFile = null;
+    private boolean isWindows = false;
+    
+    private JPanel northPanel = null;
+    
+    private JTextArea contentArea = null;
+    
+    private JPanel southPanel = null;
+    private JButton saveButton = null;
+    private JButton suggButton = null;
+    private JButton okButton = null;
+    private JButton cancelButton = null;
+    
+    private boolean validSettings = false; 
+    
+    public PlatformPropertiesWindow(
+        File non_existing_file, boolean is_win) {
+        
+        targetFile = non_existing_file;
+        isWindows = is_win;
+        init();
+    }
+
+    private void init() {
+        
+        this.setLayout(new BorderLayout());
+        
+        northPanel = new JPanel(new GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();  
+        c.insets = new Insets(1, 10, 1, 10);
+        c.weightx = 0.5; // 
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.gridx = 0;
+        
+        c.gridy = 0;
+        northPanel.add(new JLabel(" "), c);
+        c.gridy = 1;
+        northPanel.add(new JLabel(Messages.getText(
+            "_Mandatory_platform_properties_file_not_found")), c);
+        c.gridy = 2;
+        northPanel.add(new JLabel(Messages.getText(
+            "_Use_this_text_editor_to_write_it")), c);
+        c.gridy = 3;
+        northPanel.add(new JLabel(" "), c);
+        // =============================================
+        // =============================================
+        southPanel = new JPanel();
+        southPanel.setLayout(new GridLayout(1, 5, 8, 4));
+        // ------------
+        southPanel.add(getSaveButton());
+        southPanel.add(getSuggButton());
+        // ------------
+        southPanel.add(new JLabel(" "));
+        // ------------
+        southPanel.add(getOkButton());
+        southPanel.add(getCancelButton());
+        // =============================================
+        
+        this.add(northPanel, BorderLayout.NORTH);
+        
+        JScrollPane scroll = new JScrollPane();
+        scroll.setViewportView(getContentArea());
+        scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+        this.add(scroll, BorderLayout.CENTER);
+        
+        JPanel south2 = new JPanel(new GridBagLayout());
+        GridBagConstraints cs = new GridBagConstraints();
+        cs.insets = new Insets(15,15,15,15);
+        south2.add(southPanel, cs);
+        
+        this.add(south2, BorderLayout.SOUTH);
+    }
+
+    private JTextArea getContentArea() {
+        
+        if (contentArea == null) {
+            contentArea = new JTextArea();
+            loadSuggested(contentArea);
+            contentArea.getDocument().addDocumentListener(this);
+        }
+        return contentArea;
+    }
+
+    private JButton getCancelButton() {
+        if (cancelButton == null) {
+            cancelButton = new JButton(Messages.getText("_Cancel"));
+            cancelButton.addActionListener(this);
+        }
+        return cancelButton;
+    }
+
+    private JButton getSuggButton() {
+        if (suggButton == null) {
+            suggButton = new JButton(Messages.getText("_Suggested"));
+            suggButton.addActionListener(this);
+        }
+        return suggButton;
+    }
+
+    private JButton getOkButton() {
+        if (okButton == null) {
+            okButton = new JButton(Messages.getText("_Accept"));
+            okButton.addActionListener(this);
+            okButton.setEnabled(false);
+        }
+        return okButton;
+    }
+
+    private JButton getSaveButton() {
+        if (saveButton == null) {
+            saveButton = new JButton(Messages.getText("_Save"));
+            Font fnt = saveButton.getFont();
+            fnt = fnt.deriveFont(Font.BOLD);
+            saveButton.setFont(fnt);
+            saveButton.addActionListener(this);
+        }
+        return saveButton;
+    }
+
+    // ===================================================
+    // ===================================================
+
+    public WindowInfo getWindowInfo() {
+        if (winfo == null) {
+            winfo = new WindowInfo(WindowInfo.MODALDIALOG);
+            winfo.setWidth(550);
+            winfo.setHeight(350);
+            winfo.setTitle(
+                Messages.getText("_Checking_platform_properties"));
+        }
+        return winfo;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+    
+    public static final String SUGGESTED_WINDOWN_CONTENT =
+        "native_platform=win\n" +
+        "native_distribution=nt\n" +
+        "native_compiler=vs8\n" +
+        "native_arch=i386\n" +
+        "native_libraryType=dynamic";
+    
+    public static final String SUGGESTED_NON_WINDOWS_CONTENT =
+            "native_platform=linux\n" +
+            "native_distribution=all\n" +
+            "native_compiler=gcc4\n" +
+            "native_arch=i386\n" +
+            "native_libraryType=dynamic";
+
+
+    public void actionPerformed(ActionEvent e) {
+        
+        Object src = e.getSource();
+        if (src == getOkButton()) {
+            if (getSaveButton().isEnabled()) {
+                if (!userAcceptsNotSaving()) {
+                    return;
+                }
+            }
+            validSettings = true;
+            PluginServices.getMDIManager().closeWindow(this);
+        }
+        
+        if (src == getCancelButton()) {
+            validSettings = false;
+            PluginServices.getMDIManager().closeWindow(this);
+        }
+        
+        if (src == getSaveButton()) {
+            if (saveContent()) {
+                this.getSaveButton().setEnabled(false);
+            }
+            this.refreshOkButton();
+        }
+        
+        if (src == getSuggButton()) {
+            loadSuggested(getContentArea());
+            this.getSaveButton().setEnabled(true);
+        }
+        
+    }
+
+
+    /**
+     * @return
+     */
+    private boolean userAcceptsNotSaving() {
+        
+        String _msg =
+            Messages.getText("_There_are_unsaved_changes_Continue_question");
+        String _tit =
+            Messages.getText("_Not_saved");
+        int usr_opt = JOptionPane.showConfirmDialog(
+            this, _msg, _tit, JOptionPane.YES_NO_OPTION,
+            JOptionPane.WARNING_MESSAGE);
+        return (usr_opt == JOptionPane.YES_OPTION);
+    }
+
+    private boolean saveContent() {
+        
+        try {
+            if (targetFile.exists()) {
+                targetFile.delete();
+            }
+            targetFile.createNewFile();
+            
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            String contnt = getContentArea().getText();
+            fos.write(contnt.getBytes());
+            fos.flush();
+            fos.close();
+            return true;
+        } catch (IOException ioe) {
+            logger.info("While writing file: " + ioe.getMessage(), ioe);
+            String _msg = Messages.getText("_Unable_to_store_file")
+                + ": " + targetFile.getAbsolutePath();
+            String _tit = Messages.getText("_Error");
+            JOptionPane.showMessageDialog(
+                this, _msg, _tit, JOptionPane.ERROR_MESSAGE);
+            return false;
+        }
+        
+    }
+
+    private void loadSuggested(JTextArea ta) {
+
+        if (isWindows) {
+            ta.setText(SUGGESTED_WINDOWN_CONTENT);
+        } else {
+            ta.setText(SUGGESTED_NON_WINDOWS_CONTENT);
+        }
+    }
+
+    public void insertUpdate(DocumentEvent e) {
+        this.getSaveButton().setEnabled(true);
+    }
+
+    public void removeUpdate(DocumentEvent e) {
+        this.getSaveButton().setEnabled(true);
+    }
+
+    public void changedUpdate(DocumentEvent e) {
+        // should not be called because this text area is simple
+    }
+    
+    public boolean validSettings() {
+        return validSettings;
+    }
+    
+    private void refreshOkButton() {
+        this.getOkButton().setEnabled(targetFile.exists());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/settings/PlatformPropertiesWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsolePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsolePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsolePanel.java	(revision 42196)
@@ -0,0 +1,231 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.mkmvnproject.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.io.PrintStream;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A panel which shows the execution log messages of the create plugin process.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class CreatePluginConsolePanel extends JPanel {
+
+	private static final long serialVersionUID = -7213048219847956909L;
+
+	private static final Logger logger = LoggerFactory
+			.getLogger(CreatePluginConsolePanel.class);
+
+	private JTextArea console;
+
+	private PrintStream printStream;
+	private PipedOutputStream pipedos;
+	private PipedInputStream pipedis;
+	private Thread consoleThread;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsolePanel() throws IOException {
+		super();
+		initialize();
+	}
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param isDoubleBuffered
+	 *            if the panel must be double buffered.
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsolePanel(boolean isDoubleBuffered)
+			throws IOException {
+		super(isDoubleBuffered);
+		initialize();
+	}
+
+	/**
+	 * Initializes the panel GUI.
+	 * 
+	 * @throws IOException
+	 */
+	private void initialize() throws IOException {
+		Dimension dimension = new Dimension(600, 200);
+		setSize(dimension);
+		setLayout(new BorderLayout());
+
+		console = new JTextArea();
+		console.setEditable(false);
+		// console.setColumns(20);
+		// console.setRows(5);
+		console.setBackground(Color.WHITE);
+		console.setLineWrap(true);
+		console.setWrapStyleWord(true);
+
+		JScrollPane consoleScrollPane = new JScrollPane(console);
+		add(consoleScrollPane, BorderLayout.CENTER);
+
+		pipedis = new PipedInputStream();
+
+		pipedos = new PipedOutputStream(pipedis);
+
+		printStream = new PrintStream(pipedos);
+		
+        logger.info("===================================");
+        logger.info("= Opening plugin creation console =");
+        logger.info("===================================");
+
+		consoleThread = new ConsoleThread(pipedis, console);
+		consoleThread.start();
+	}
+
+	/**
+	 * Returns a {@link PrintStream} which allows to write messages to the
+	 * console.
+	 * 
+	 * @return a {@link PrintStream} which allows to write messages to the
+	 *         console
+	 */
+	public PrintStream getPrintStream() {
+		return printStream;
+	}
+
+	/**
+	 * Returns a {@link PrintStream} which allows to write error messages to the
+	 * console.
+	 * 
+	 * @return a {@link PrintStream} which allows to write error messages to the
+	 *         console
+	 */
+	public PrintStream getErrorPrintStream() {
+		return getPrintStream();
+	}
+
+	/**
+	 * Closes the console. Once this method is called, any more calls to the
+	 * console {@link PrintStream} will throw an exception.
+	 */
+	public void closeConsole() {
+	    
+        logger.info("===================================");
+        logger.info("= Closing plugin creation console =");
+        logger.info("===================================");
+	    
+		printStream.flush();
+		printStream.close();
+		try {
+			pipedos.close();
+			pipedis.close();
+			// Wait for the thread to finish
+			consoleThread.join(500);
+		} catch (IOException e) {
+		    logger.warn("Error closing the internal piped streams", e);
+		} catch (InterruptedException e) {
+			// Nothing special to do
+		    logger.debug("Console thread interrupted while waiting to finish", e);
+		}
+	}
+
+	private static final class ConsoleThread extends Thread {
+
+		private final PipedInputStream pipedis;
+		private final JTextArea console;
+
+		/**
+		 * Constructor.
+		 */
+		public ConsoleThread(PipedInputStream pipedis, JTextArea console) {
+			super("Create plugin console update thread");
+			setDaemon(true);
+			this.pipedis = pipedis;
+			this.console = console;
+		}
+
+		@Override
+		public void run() {
+			try {
+				BufferedReader reader = new BufferedReader(
+						new InputStreamReader(pipedis));
+				String line;
+				while ((line = reader.readLine()) != null) {
+				    // =========== Writing lines to log too 
+		            logger.info(line);
+                    // =====================================
+					SwingUtilities.invokeLater(new ConsoleUpdateRunnable(
+							console, line));
+				}
+				logger.debug("Console input stream end, finish reading");
+				reader.close();
+			} catch (IOException e) {
+			    logger.info("Write end dead.");
+			}
+		}
+
+	}
+
+	/**
+	 * Runnable used to update the console text field.
+	 * 
+	 * @author gvSIG Team
+	 * @version $Id$
+	 */
+	private static final class ConsoleUpdateRunnable implements Runnable {
+		private final String newLine;
+		private final JTextArea console;
+
+		/**
+		 * Constructor.
+		 */
+		public ConsoleUpdateRunnable(JTextArea console, String newLine) {
+			this.console = console;
+			this.newLine = newLine;
+		}
+
+		public void run() {
+			console.append(newLine);
+			console.append("\n");
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsolePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsoleWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsoleWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsoleWindow.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.mkmvnproject.gui;
+
+import java.awt.Dimension;
+import java.io.IOException;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+/**
+ * A gvSIG window which shows the execution log messages of the create plugin
+ * process.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class CreatePluginConsoleWindow extends CreatePluginConsolePanel
+		implements IWindow, IWindowListener {
+
+	private static final long serialVersionUID = -5589080107545290284L;
+
+	private WindowInfo info;
+
+	private Object profile = WindowInfo.EDITOR_PROFILE;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsoleWindow() throws IOException {
+		super();
+		initializeWindow();
+	}
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param isDoubleBuffered
+	 *            if the panel must be double buffered.
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsoleWindow(boolean isDoubleBuffered) throws IOException {
+		super(isDoubleBuffered);
+		initializeWindow();
+	}
+
+	/**
+	 * Initializes the window.
+	 */
+	private void initializeWindow() {
+		Dimension dimension = new Dimension(600, 300);
+		setSize(dimension);
+		int code = WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
+				| WindowInfo.RESIZABLE | WindowInfo.MODELESSDIALOG;
+		profile = WindowInfo.EDITOR_PROFILE;
+		info = new WindowInfo(code);
+		info.setTitle("Console");
+		info.setMinimumSize(dimension);
+	}
+
+	public WindowInfo getWindowInfo() {
+		return info;
+	}
+
+	public Object getWindowProfile() {
+		return profile;
+	}
+
+	public void windowActivated() {
+		// Nothing to do
+	}
+
+	public void windowClosed() {
+		super.closeConsole();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsoleWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/MakeMavenProjectExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/MakeMavenProjectExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/MakeMavenProjectExtension.java	(revision 42196)
@@ -0,0 +1,404 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.mkmvnproject;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.DefaultLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.i18n.Messages;
+import org.gvsig.mkmvnproject.gui.CreatePluginConsoleWindow;
+import org.gvsig.mkmvnproject.gui.settings.PlatformPropertiesWindow;
+
+/**
+ * Extension to launch the project creation from templates.
+ * 
+ * @author gvSIG team
+ * @version $Id$
+ */
+public class MakeMavenProjectExtension extends Extension {
+
+    private static final String ANT_BUILD_FILE = "mkmvnproject.xml";
+    private static final String ANT_CHECK_JDK = "checkjdk.xml";
+
+	private static final String ANT_TARGET = "mkproject";
+	
+	public static final String GVSIG_PLATFORM_PROPERTIES_FILE_NAME =
+	    ".gvsig.platform.properties";
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(MakeMavenProjectExtension.class);
+
+	private boolean enabled = true;
+
+	private final Object lock = new Object();
+
+	public void execute(String actionCommand) {
+	    
+	    /*
+	     * Problem is that for some reason  dummy file cannot be
+	     * compiled, but this plugin works (?)
+	     * 
+	    if (!checkJDK()) {
+	        return;
+	    }
+	    */
+
+//	    if (!checkPlatformProperties()) {
+//	        return;
+//	    }
+	    
+        // ==========================================================
+		// TODO: add support to parallel executions in Andami??
+
+        // Create messages console
+	    CreatePluginConsoleWindow console = null;
+
+        if (console == null) {
+            try {
+                console = new CreatePluginConsoleWindow();
+            } catch (IOException e) {
+                NotificationManager.addWarning("Error creating the console", e);
+            }
+        }
+        if (console != null) {
+            PluginServices.getMDIManager().addWindow(console, GridBagConstraints.LAST_LINE_START);
+        }
+
+		try {
+			// Disable extension so it can't be executed again.
+			synchronized (lock) {
+				enabled = false;
+			}
+			new CreatePluginThread(console).start();
+		} finally {
+			synchronized (lock) {
+				// create plugin process finish. Enable extension.
+				enabled = true;
+			}
+		}
+	}
+
+	/**
+	 * Checks existence of file:
+	 * 
+	 * USER_HOME/.gvsig.platform.properties
+	 * 
+	 * If not present, show text area with suggested content.
+	 * 
+     * @return whether the mentioned file is present or the
+     * user has created it here and accepts to continue.
+     *  
+     */
+    private boolean checkPlatformProperties() {
+        
+        String user_home = System.getProperty("user.home");
+        File the_file = new File(
+            user_home +
+            File.separator +
+            GVSIG_PLATFORM_PROPERTIES_FILE_NAME);
+
+        Component parent_window = getActiveWindowComponent();
+
+        try {
+            if (the_file.exists()) {
+                // ok file exists
+                LOG.info("Found platform properties file: "
+                    + the_file.getAbsolutePath());
+                return true;
+            }
+            
+            boolean is_windows = isThisWindows();
+            PlatformPropertiesWindow ppw = new PlatformPropertiesWindow(
+                the_file, is_windows);
+            PluginServices.getMDIManager().addCentredWindow(ppw);
+            // it's a modal dialog
+            return ppw.validSettings();
+            
+        } catch (Exception ex) {
+            
+            String _msg =
+                Messages.getText("_Error_while_checking_platform_properties")
+                + "\n\n[ " + ex.getMessage() + " ]";
+            String _tit = Messages.getText(
+                "_Checking_platform_properties");
+            JOptionPane.showMessageDialog(
+                parent_window,
+                _msg, _tit,
+                JOptionPane.ERROR_MESSAGE);
+        }
+        return false;
+        
+    }
+
+
+    /**
+     * @return whether we are running on a windows system
+     */
+    private boolean isThisWindows() {
+        String os = System.getProperty("os.name").toLowerCase();
+        return (os.indexOf("win") >= 0);
+    }
+
+    /**
+     * Check and possibly show JDK and JAVA_HOME settings and
+     * prompt user with suggestion.
+     * 
+     * @return whether JDK is detected or user accepts to
+     * continue anyway
+     */
+    private boolean checkJDK() {
+        
+        boolean this_is_jdk = false;
+        try {
+            this_is_jdk = jdkAvailable();
+        } catch (Exception ex) {
+            LOG.info("While searching for JDK : " + ex.getMessage(), ex);
+            this_is_jdk = false;
+        }
+        
+        if (this_is_jdk) {
+            return true;
+        }
+        
+        String env_j_h = System.getenv("JAVA_HOME");
+        
+        String jdk_str = null;
+        if (this_is_jdk) {
+            jdk_str = Messages.getText("_gvSIG_is_running_on_JDK");
+        } else {
+            jdk_str = Messages.getText("_gvSIG_is_not_running_on_JDK");
+        }
+        
+        String jh_str = null;
+        if (env_j_h == null) {
+            jh_str = Messages.getText("_JAVA_HOME_is_not_set");
+        } else {
+            jh_str = Messages.getText("_JAVA_HOME_is_set_to")
+                + " '" + env_j_h + "'";
+        }
+        
+        String recomm = "";
+        if (true) { // !this_is_jdk && env_j_h == null) {
+            recomm = "\n\n"
+                + Messages.getText("_Requirements_for_this_plugin") + ":\n\n"
+                + "- " + Messages.getText("_On_Linux_make_JAVA_HOME_point_to_JDK_1_5_higher");
+            recomm = recomm + ".    \n- "
+            + Messages.getText("_On_Windows_run_JDK_use_devel_exe") + ".";
+        }
+        
+        String tot_msg = Messages.getText("_Detected_settings") + ":"
+            + "\n\n"
+            + "- " + jdk_str + "\n"
+            + "- " + jh_str + "     " + recomm + "\n\n"
+                + Messages.getText("_Continue_question");
+            
+        int opt = JOptionPane.showConfirmDialog(
+            null, // getActiveWindowComponent(),
+            tot_msg,
+            Messages.getText("_Make_maven_project_plugin") + " - " + 
+            Messages.getText("_Searching_JDK"),
+            JOptionPane.YES_NO_OPTION,
+            (recomm.length() == 0) ?
+                JOptionPane.INFORMATION_MESSAGE : JOptionPane.WARNING_MESSAGE
+            );
+        
+        return (opt == JOptionPane.YES_OPTION);
+    }
+
+    /**
+     * @return
+     */
+    private Component getActiveWindowComponent() {
+        
+        IWindow iw = PluginServices.getMDIManager().getActiveWindow();
+        if (iw instanceof Component) {
+            return (Component) iw;
+        } else {
+            return null;
+        }
+    }
+
+
+    private boolean jdkAvailable() throws Exception {
+        
+        ClassLoader loader = this.getClass().getClassLoader();
+        URL class_file_url = loader.getResource("compilationcheck/DummyClass.class");
+        File class_file = null;
+        
+        // deleting compiled test file if existed
+        if (class_file_url != null) {
+            class_file = new File(class_file_url.getFile());
+            if (class_file.exists()) {
+                class_file.delete();
+            }
+        }
+        
+        URL build = loader.getResource("scripts/" + ANT_CHECK_JDK);
+
+        String execut = null;
+        /*
+        // first attempt: javac from JAVA_HOME
+        execut =
+            System.getenv().get("JAVA_HOME")
+            + File.separator + "bin" + File.separator + "javac";
+        
+        if (execut != null) {
+            this.runScript(build, "default", null, "executable", execut);
+            class_file_url = loader.getResource("compilationcheck/DummyClass.class");
+            if (class_file_url != null) {
+                // OK, test file is not compiled
+                return true;
+            }
+        }
+        */
+        
+        // second attempt: java.home (jre)
+        execut = System.getProperty("java.home");
+        int ind = execut.lastIndexOf(File.separator);
+        // one up, then bin/javac
+        execut = execut.substring(0, ind)
+            + File.separator
+            + "bin" + File.separator + "javac";
+        
+        this.runScript(build, "default", null, "executable", execut);
+        class_file_url = loader.getResource("compilationcheck/DummyClass.class");
+        // if test file not compiled, then false
+        return (class_file_url != null);
+    }
+
+    /**
+	 * Thread to launch the ant base plugin creation project.
+	 * 
+	 * @author gvSIG Team
+	 * @version $Id$
+	 */
+	private final class CreatePluginThread extends Thread {
+
+		private final CreatePluginConsoleWindow console;
+
+		/**
+		 * Constructor.
+		 * 
+		 * @param console
+		 */
+		public CreatePluginThread(CreatePluginConsoleWindow console) {
+			this.console = console;
+			setName("Create plugin execution thread");
+			setDaemon(true);
+		}
+
+		@Override
+		public void run() {
+			DefaultLogger log = new DefaultLogger();
+			log.setMessageOutputLevel(Project.MSG_INFO);
+
+			if (console != null) {
+				log.setErrorPrintStream(console.getErrorPrintStream());
+				log.setOutputPrintStream(console.getPrintStream());
+			} else {
+				LOG.warn("Console window not available, will use the default console for Ant");
+				log.setErrorPrintStream(System.err);
+				log.setOutputPrintStream(System.out);
+			}
+
+			
+			
+            ClassLoader loader = this.getClass().getClassLoader();
+            URL build = loader.getResource("scripts/" + ANT_BUILD_FILE);
+            runScript(build, ANT_TARGET, log);
+		}
+	}
+
+
+	private void runScript(
+	        URL build,
+	        String target,
+	        BuildListener blistener) {
+	    
+        runScript(build, target, blistener, null, null);
+	    
+	}
+
+	private void runScript(
+	    URL build,
+	    String target,
+	    BuildListener blistener,
+	    String prop, String val) {
+	    
+	    LOG.info("Starting runScript:\n"
+	        + "    build = " + build.toString() + "\n"
+	        + "    property name = " + prop + "\n"
+            + "    property value = " + val);
+	        
+
+        File file = new File(build.getFile());
+
+        final Project ant = new Project();
+        if (blistener != null) {
+            ant.addBuildListener(blistener);
+        }
+        ant.setUserProperty("ant.file", file.getAbsolutePath());
+        
+        if (prop != null && val != null) {
+            ant.setUserProperty(prop, val);
+        }
+        
+        ant.init();
+        ProjectHelper.getProjectHelper().parse(ant, file);
+
+        LOG.info("Starting ant task with the file {} and the target {}",
+                file, target);
+        ant.executeTarget(target);
+	}
+
+	public void initialize() {
+		// Nothing to do
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public boolean isVisible() {
+		return true;
+	}
+	
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/java/org/gvsig/mkmvnproject/MakeMavenProjectExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/ant/prepare-templates.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/ant/prepare-templates.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/ant/prepare-templates.xml	(revision 42196)
@@ -0,0 +1,132 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="prepare-templates.build" default="prepare-templates">
+
+    <dirname property="prepare-templates.build.basedir"
+             file="${ant.file.prepare-templates.build}" />
+
+    <property name="target" location="${prepare-templates.build.basedir}/../../../target"/>
+
+	<target name="prepare-templates" depends="prepare-fortunecookies,prepare-landregistryviewer"> 
+ 	</target>
+	
+	<!-- *************** Fortune cookies template **************** -->
+
+	<target name="check-fortunecookies">
+        <available file="${target}/templates/downloads/fortunecookies"
+                   type="dir"
+                   property="fortunecookies.downloaded" />
+    </target>
+
+    <target name="download-fortunecookies"
+            depends="check-fortunecookies"
+            unless="fortunecookies.downloaded">
+        <echo>Downloading fortunecookies templates...</echo>
+        <mkdir dir="${target}/templates/downloads/fortunecookies" />
+        <mkdir dir="${target}/templates-zips" />
+
+        <java classname="org.tmatesoft.svn.cli.SVN"
+              classpath="${runtime_classpath}"
+              dir="${target}/templates/downloads/fortunecookies/"
+              fork="true"
+              failonerror="true">
+        	<arg value="--non-interactive"/>
+            <arg value="export" />
+            <arg value="https://devel.gvsig.org/svn/gvsig-plugintemplates/org.gvsig.fortunecookies/trunk/basic-with-user-interface" />
+        </java>
+    	<!--
+        <java classname="org.tmatesoft.svn.cli.SVN"
+              classpath="${runtime_classpath}"
+              dir="${target}/templates/downloads/fortunecookies/"
+              fork="true"
+              failonerror="true">
+        	<arg value="- - non-interactive"/> Ojo, que el "- -" va junto.
+            <arg value="export" />
+            <arg value="https://devel.gvsig.org/svn/gvsig-plugintemplates/org.gvsig.fortunecookies/trunk/provider-based-implementation-with-user-interface" />
+        </java>
+        -->
+    </target>
+
+    <target name="prepare-fortunecookies" depends="download-fortunecookies">
+        <echo>Zipping fortunecookies...</echo>
+    	<delete file="${target}/templates-zips/fortunecookies-basic.zip"/>
+    	<delete file="${target}/templates-zips/fortunecookies-pbi.zip"/>
+        <zip destfile="${target}/templates-zips/fortunecookies-basic.zip"
+             basedir="${target}/templates/downloads/fortunecookies/basic-with-user-interface/"
+             includes="**/*" />
+    	<!--
+        <zip destfile="${target}/templates-zips/fortunecookies-pbi.zip"
+             basedir="${target}/templates/downloads/fortunecookies/provider-based-implementation-with-user-interface/"
+             includes="**/*" />
+        -->
+    </target>
+
+	
+	<!-- *************** Land registry viewer template **************** -->
+
+	<target name="check-landregistryviewer">
+        <available file="${target}/templates/downloads/landregistryviewer"
+                   type="dir"
+                   property="landregistryviewer.downloaded" />
+    </target>
+
+    <target name="download-landregistryviewer"
+            depends="check-landregistryviewer"
+            unless="landregistryviewer.downloaded">
+        <echo>Downloading landregistryviewer template...</echo>
+        <mkdir dir="${target}/templates/downloads/landregistryviewer" />
+        <mkdir dir="${target}/templates-zips" />
+
+        <java classname="org.tmatesoft.svn.cli.SVN"
+              classpath="${runtime_classpath}"
+              dir="${target}/templates/downloads/landregistryviewer/"
+              fork="true"
+              failonerror="true">
+        	<arg value="--non-interactive"/>
+            <arg value="export" />
+            <arg value="https://devel.gvsig.org/svn/gvsig-plugintemplates/org.gvsig.landregistryviewer/trunk/org.gvsig.landregistryviewer" />
+        </java>
+        <java classname="org.tmatesoft.svn.cli.SVN"
+              classpath="${runtime_classpath}"
+              dir="${target}/templates/downloads/landregistryviewer/"
+              fork="true"
+              failonerror="true">
+        	<arg value="--non-interactive"/>
+            <arg value="export" />
+            <arg value="https://devel.gvsig.org/svn/gvsig-plugintemplates/org.gvsig.landregistryviewer.app/trunk/org.gvsig.landregistryviewer.app" />
+        </java>
+    </target>
+
+    <target name="prepare-landregistryviewer" depends="download-landregistryviewer">
+        <echo>Zipping landregistryviewer...</echo>
+    	<delete file="${target}/templates-zips/landregistryviewer.zip"/>
+        <zip destfile="${target}/templates-zips/landregistryviewer.zip"
+             basedir="${target}/templates/downloads/landregistryviewer/"
+             includes="**/*" />
+    </target>
+
+	
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/ant/prepare-templates.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-basic.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-basic.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-basic.xml	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="gvSIG-make-cookies-basic-project" default="mkproject-build" basedir=".">
+
+	<!-- Get current file location folder -->
+	<dirname property="gvSIG-make-cookies-basic-project.basedir" file="${ant.file.gvSIG-make-cookies-basic-project}" />
+
+	<target name="mkproject-build">
+	    <ant dir="${gvSIG-make-cookies-basic-project.basedir}" antfile="fortunecookies.xml" target="mkproject-build-basic" />
+	</target>
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-basic.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies.xml	(revision 42196)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="gvSIG-make-maven-project" default="mkproject-build-basic" basedir=".">
+
+	<!-- Get current file location folder -->
+	<dirname property="gvSIG-make-maven-project.basedir" file="${ant.file.gvSIG-make-maven-project}" />
+
+	<!-- Libraries folder in the gvSIG extension -->
+	<property name="lib.folder" location="${gvSIG-make-maven-project.basedir}/../lib" />
+	<!-- Templates folder in the gvSIG extension -->
+	<property name="templates.folder" location="${gvSIG-make-maven-project.basedir}/../templates" />
+
+	<property name="gvsiglogo" location="${basedir}/../gvSIG.png" />
+
+	<!-- Load some ant external utility tasks -->
+	<property name="antform.lib" location="${lib.folder}/antform-2.0.jar" />
+	<property name="antcontrib.lib" location="${lib.folder}/ant-contrib-1.0b3.jar" />
+	<property name="antelope.lib" location="${lib.folder}/antelopetasks-3.2.10.jar" />
+
+	<taskdef resource="net/sf/antcontrib/antlib.xml">
+		<classpath>
+			<pathelement location="${antcontrib.lib}" />
+		</classpath>
+	</taskdef>
+
+	<taskdef name="antform" classname="com.sardak.antform.AntForm" classpath="${antform.lib}" />
+
+	<taskdef name="antmenu" classname="com.sardak.antform.AntMenu" classpath="${antform.lib}" />
+
+	<taskdef name="stringutil" classname="ise.antelope.tasks.StringUtilTask" classpath="${antelope.lib}" />
+
+	<target name="mkproject-build-cancelled">
+		<antform title="Project creation cancelled" width="${form.width}" image="${gvsiglogo}">
+			<textProperty label="" editable="false" columns="40" property="form.title" />
+			<label>Creation cancelled.</label>
+			<separator />
+			<controlbar>
+				<button type="cancel" label=" Close " />
+			</controlbar>
+		</antform>
+	</target>
+
+    <target name="mkproject-build-basic">
+        <antcall target="mkproject-build">
+            <param name="project.type" value="1" />
+        </antcall>
+    </target>
+    
+    <target name="mkproject-build-provider">
+        <antcall target="mkproject-build">
+            <param name="project.type" value="2" />
+        </antcall>
+    </target>
+    
+	<target name="mkproject-build">
+		<echo>
+  Project name: "${project.name}"
+  Project name capitalized: "${project.name.capitalized}"
+  Project name lowercase: ${project.name.lowercase}"
+  Group id: "${project.group.id}"
+  ArtifactId: "${project.artifact.id}"
+  Project folder: "${project.folder}"
+  Project type: "${project.type}"
+        </echo>
+
+		<if>
+			<equals arg1="${project.type}" arg2="1" />
+			<then>
+				<echo>Unzipping the basic template project</echo>
+				<unzip src="${templates.folder}/fortunecookies-basic.zip" dest="${project.folder}" />
+			</then>
+			<!--
+			<else>
+				<echo>Unzipping the provider based implementation template project</echo>
+				<unzip src="${templates.folder}/fortunecookies-pbi.zip" dest="${project.folder}" />
+			</else>
+			-->
+		</if>
+
+		<!-- Calculate the project artifact id as PATH -->
+		<propertyregex property="project.artifact.id.folder" input="${project.artifact.id}" regexp="([^\.]*).([^\.]*)" replace="\1/\2" />
+
+		<echo>Renaming folder ${project.folder}/org.gvsig.fortunecookies to 
+            ${project.folder}/${project.artifact.id}</echo>
+		<move todir="${project.folder}">
+			<fileset dir="${project.folder}">
+				<include name="org.gvsig.fortunecookies/**" />
+				<include name="org.gvsig.fortunecookies.app/**" />
+			</fileset>
+			<mapper>
+				<filtermapper>
+					<replacestring from="org.gvsig.fortunecookies" to="${project.artifact.id}" />
+					<replacestring from="org${file.separator}gvsig${file.separator}fortunecookies" to="${project.artifact.id.folder}" />
+					<replacestring from="FortuneCookie" to="${project.name.capitalized}" />
+				</filtermapper>
+			</mapper>
+			<filterchain>
+				<tokenfilter>
+					<!-- Replace fortune cookie server url as it contains the FortuneCookie word in it. -->
+					<replacestring from="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie" to="FC_URL_TO_PRESERVE" />
+				</tokenfilter>
+				<tokenfilter>
+					<replacestring from="org.gvsig.fortunecookies" to="${project.artifact.id}" />
+				</tokenfilter>
+				<tokenfilter>
+					<replacestring from="FortuneCookies" to="${project.name.capitalized}" />
+					<replacestring from="Fortune Cookies" to="${project.name.capitalized}" />
+					<replacestring from="Fortune cookies" to="${project.name.capitalized}" />
+					<replacestring from="fortune cookies" to="${project.name.capitalized}" />
+					<replacestring from="gvsig-fortunecookies" to="gvsig-${project.name.lowercase}" />
+					<replacestring from="fortunecookies" to="${project.name.capitalized}" />
+				</tokenfilter>
+				<tokenfilter>
+					<replacestring from="FortuneCookie" to="${project.name.capitalized}" />
+					<replacestring from="Fortune Cookie" to="${project.name.capitalized}" />
+					<replacestring from="Fortune cookie" to="${project.name.capitalized}" />
+					<replacestring from="fortune cookie" to="${project.name.capitalized}" />
+					<replacestring from="gvsig-fortunecookie" to="gvsig-${project.name.lowercase}" />
+					<replacestring from="fortunecookie" to="${project.name.capitalized}" />
+				</tokenfilter>
+				<tokenfilter>
+					<!-- Restore the fortune cookie server URL -->
+					<replacestring from="FC_URL_TO_PRESERVE" to="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie" />
+				</tokenfilter>
+			</filterchain>
+		</move>
+		
+	</target>
+
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/mkmvnproject.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/mkmvnproject.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/mkmvnproject.xml	(revision 42196)
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="gvSIG-make-maven-project" default="mkproject" basedir=".">
+
+	<!-- Get current file location folder -->
+	<dirname property="gvSIG-make-maven-project.basedir" file="${ant.file.gvSIG-make-maven-project}" />
+
+	<!-- Libraries folder in the gvSIG extension -->
+	<property name="lib.folder" location="${gvSIG-make-maven-project.basedir}/../lib" />
+	<!-- Templates folder in the gvSIG extension -->
+	<property name="templates.folder" location="${gvSIG-make-maven-project.basedir}/../templates" />
+
+	<property name="gvsiglogo" location="${basedir}/../gvSIG.png" />
+
+	<!-- Load some ant external utility tasks -->
+	<property name="antform.lib" location="${lib.folder}/antform-2.0.jar" />
+	<property name="antcontrib.lib" location="${lib.folder}/ant-contrib-1.0b3.jar" />
+	<property name="antelope.lib" location="${lib.folder}/antelopetasks-3.2.10.jar" />
+
+	<property name="form.width" value="700" />
+	<property name="form.height" value="550" />
+	<property name="form.columns" value="40" />
+
+
+	<taskdef resource="net/sf/antcontrib/antlib.xml">
+		<classpath>
+			<pathelement location="${antcontrib.lib}" />
+		</classpath>
+	</taskdef>
+
+	<taskdef name="antform" classname="com.sardak.antform.AntForm" classpath="${antform.lib}" />
+
+	<taskdef name="antmenu" classname="com.sardak.antform.AntMenu" classpath="${antform.lib}" />
+
+	<taskdef name="stringutil" classname="ise.antelope.tasks.StringUtilTask" classpath="${antelope.lib}" />
+
+
+	<!-- 
+	================ begin specific code of templates ================= 
+	-->
+	<property name="template.fortunecookies-basic.option" value="2 - General project based on Fortune cookies basic example project" />
+	<property name="template.fortunecookies-basic.description1" value="Create a general pourpose project with the multimodule" />
+	<property name="template.fortunecookies-basic.description2" value="structure. It has no GEO logic and is based on a basic" />
+	<property name="template.fortunecookies-basic.description3" value="API/implementation separation" />
+
+	<!--
+    <property name="template.fortunecookies-provider.option" value="3 - General project based on Fortune cookies example project" />
+    <property name="template.fortunecookies-provider.description1" value="Create a general pourpose project with the multimodule" />
+    <property name="template.fortunecookies-provider.description2" value="structure. It has no GEO logic and is based on" />
+    <property name="template.fortunecookies-provider.description3" value="API/SPI/implementation separation and providers"  />
+	-->
+	<property name="template.landregistryviewer.option" value="1 - Basic plugin with spatial support" />
+	<property name="template.landregistryviewer.description1" value="Create a project based in the LandRegistryViewer example." />
+	<property name="template.landregistryviewer.description2" value="Uses access to View, MapControl and datasources." />
+	<property name="template.landregistryviewer.description3" value="" />
+
+	<!--
+	<property name="templates" value="fortunecookies-basic,fortunecookies-provider,landregistryviewer" />
+	-->
+	<property name="templates" value="fortunecookies-basic,landregistryviewer" />
+	<!-- 
+	================ End specific code of templates ================= 
+	-->
+
+	<target name="mkproject" depends="mkproject-prompt-basic-data">
+		<description>Creates a new gvSIG project</description>
+	</target>
+
+	<target name="mkproject-prompt-basic-data">
+
+		<property name="project.group.id" value="org.gvsig" />
+
+		<antform title="Create project" width="${form.width}" image="${gvsiglogo}">
+			<textProperty label="" editable="false" columns="${form.columns}" property="form.title" />
+			<textProperty label="Name : " property="project.name" required="true" />
+			<label>                               For the project name, use the java class naming rules. 
+                               Ex: FortuneCookie or LandRegistryViewer</label>
+			<textProperty label="Group Id : " property="project.group.id" required="true" />
+
+			<fileSelectionProperty label="Create project in : " property="project.folder" directoryChooser="true" editable="false" required="true" />
+			<separator />
+			<label>Select the template to use:</label>
+
+			<!-- 
+			================ begin specific code of templates ================= 
+			-->
+			<checkSelectionProperty property="template.landregistryviewer.check" values="${template.landregistryviewer.option}" label="" />
+			<label>                                         ${template.landregistryviewer.description1}
+                                         ${template.landregistryviewer.description2}
+                                         ${template.landregistryviewer.description3}</label>
+
+			<checkSelectionProperty editable="true" property="template.fortunecookies-basic.check" values="${template.fortunecookies-basic.option}" label="" />
+			<label>                                         ${template.fortunecookies-basic.description1}
+                                         ${template.fortunecookies-basic.description2}
+                                         ${template.fortunecookies-basic.description3}</label>
+			<!--
+            <checkSelectionProperty editable="false" property="template.fortunecookies-provider.check" values="${template.fortunecookies-provider.option}" label="" />
+            <label>                                         ${template.fortunecookies-provider.description1}
+                                         ${template.fortunecookies-provider.description2}
+                                         ${template.fortunecookies-provider.description3}</label>
+            -->
+			<!-- 
+			================ End specific code of templates ================= 
+			-->
+			<separator />
+			<controlbar>
+				<button type="cancel" label=" Cancel " target="mkproject-build-cancelled" />
+				<button type="ok" label=" Next " target="mkproject-fixnames" />
+			</controlbar>
+		</antform>
+	</target>
+
+	<target name="mkproject-fixnames">
+
+		<!-- Trim project name and group id -->
+		<stringutil string="${project.name}" property="project.name">
+			<trim />
+		</stringutil>
+		<stringutil string="${project.group.id}" property="project.group.id">
+			<trim />
+		</stringutil>
+
+		<!-- Lower case project name -->
+		<stringutil string="${project.name}" property="project.name.lowercase">
+			<lowercase />
+		</stringutil>
+
+		<!-- Capitalize project name, just in case -->
+		<stringutil string="${project.name}" property="project.name.capitalized.end">
+			<substring beginindex="1" />
+		</stringutil>
+		<stringutil string="${project.name}" property="project.name.capitalized.beginning">
+			<substring endindex="1" />
+			<uppercase />
+		</stringutil>
+		<property name="project.name.capitalized" value="${project.name.capitalized.beginning}${project.name.capitalized.end}" />
+
+		<!-- Create artifactID with project.group.id + . + project.name.lowercase -->
+		<property name="project.artifact.id" value="${project.group.id}.${project.name.lowercase}" />
+
+		<for list="${templates}" param="template">
+			<sequential>
+				<var name="template.name" value="@{template}" />
+				<var name="check.name" value="template.${template.name}.check" />
+				<propertycopy override="true" name="arg1" from="${check.name}" />
+				<propertycopy override="true" name="arg2" from="template.${template.name}.option" />
+				<if>
+					<and>
+						<isset property="selected.template" />
+						<equals arg1="${arg1}" arg2="${arg2}" />
+					</and>
+					<then>
+						<antcall target="fail">
+							<param name="message" value="Only one template can be selected" />
+						</antcall>
+					</then>
+				</if>
+				<if>
+					<equals arg1="${arg1}" arg2="${arg2}" />
+					<then>
+						<echo>selected.template = "${template.name}"</echo>
+						<property name="selected.template" value="${template.name}" />
+					</then>
+				</if>
+			</sequential>
+		</for>
+		<antcall target="mkproject-confirm" inheritall="true" />
+	</target>
+
+	<target name="mkproject-confirm">
+		<antform title="Confirm the creation" width="${form.width}" image="${gvsiglogo}">
+			<textProperty label="" editable="false" columns="${form.columns}" property="form.title" />
+			<label>The data used for the creation of project are:</label>
+			<textProperty label="Project" editable="false" property="project.name" />
+			<textProperty label="Project name capitalized" editable="false" property="project.name.capitalized" />
+			<textProperty label="Project name lowercase" editable="false" property="project.name.lowercase" />
+			<textProperty label="Group Id" editable="false" property="project.group.id" />
+			<textProperty label="Artifact Id" editable="false" property="project.artifact.id" />
+			<textProperty label="Folder" editable="false" property="project.folder" />
+			<textProperty label="Template" editable="false" property="selected.template" />
+			<label>Continue ?</label>
+			<separator />
+			<controlbar>
+				<button type="cancel" label=" Cancel " target="mkproject-build-cancelled" />
+				<button type="ok" label=" Previous " target="mkproject-prompt-basic-data" />
+				<button type="ok" label=" Next " target="mkproject-build" />
+			</controlbar>
+		</antform>
+	</target>
+
+	<target name="mkproject-build">
+		<echo>
+  Project name: "${project.name}"
+  Project name capitalized: "${project.name.capitalized}"
+  Project name lowercase: ${project.name.lowercase}"
+  Group id: "${project.group.id}"
+  ArtifactId: "${project.artifact.id}"
+  Project folder: "${project.folder}"
+  Selected template: "${selected.template}"
+        </echo>
+		<!--  call specific code of the selected template -->
+		<ant antfile="${selected.template}.xml" inheritall="false">
+			<property name="project.name" value="${project.name}" />
+			<property name="project.name.capitalized" value="${project.name.capitalized}" />
+			<property name="project.name.lowercase" value="${project.name.lowercase}" />
+			<property name="project.group.id" value="${project.group.id}" />
+			<property name="project.artifact.id" value="${project.artifact.id}" />
+			<property name="project.folder" value="${project.folder}" />
+			<property name="form.width" value="${form.width}" />
+			<property name="form.height" value="${form.height}" />
+			<property name="form.columns" value="${form.columns}" />
+		</ant>
+		<if>
+			<resourceexists>
+				<file file="${project.folder}/${project.artifact.id}" />
+			</resourceexists>
+			<then>
+				<antcall target="mkproject-prepare-workspace" inheritall="true" />
+				<antcall target="mkproject-build-succesfully" inheritall="true" />
+			</then>
+			<else>
+				<antcall target="mkproject-build-cancelled" inheritall="true" />
+			</else>
+		</if>
+	</target>
+
+	<target name="mkproject-prepare-workspace">
+	  <!--
+		<ant dir="${project.folder}/${project.artifact.id}" antfile="prepare-workspace.xml" target="prepare-workspace" />
+		<if>
+			<resourceexists>
+				<file file="${project.folder}/${project.artifact.id}.app" />
+			</resourceexists>
+			<then>
+				<ant dir="${project.folder}/${project.artifact.id}.app" antfile="../org.gvsig.maven.base.build/maven-goals.xml" target="mvn-install-and-eclipse-eclipse" />
+			</then>
+		</if>
+		-->
+	</target>
+
+	<target name="mkproject-build-succesfully">
+		<antform title="Project creation" width="${form.width}" image="${gvsiglogo}">
+			<textProperty label="" editable="false" columns="${form.columns}" property="form.title" />
+			<label>Project ${project.name} was created succesfully</label>
+			<controlbar>
+				<button type="ok" label=" Close " />
+			</controlbar>
+		</antform>
+	</target>
+
+	<target name="mkproject-build-cancelled">
+		<antform title="Project creation cancelled" width="${form.width}" image="${gvsiglogo}">
+			<textProperty label="" editable="false" columns="40" property="form.title" />
+			<label>Creation cancelled.</label>
+			<separator />
+			<controlbar>
+				<button type="cancel" label=" Close " />
+			</controlbar>
+		</antform>
+	</target>
+
+	<target name="fail">
+		<echo>${message}</echo>
+		<fail message="${message}" />
+	</target>
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/mkmvnproject.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/checkjdk.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/checkjdk.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/checkjdk.xml	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="check-jdk-project" default="default" basedir="..">
+	
+	<property name="src_folder" location="compilationcheck" />
+
+	<target name="default">
+		
+		<javac srcdir="${src_folder}"
+			destdir="${src_folder}"
+			executable="${executable}"
+			fork="true"
+			debug="on" />
+	</target>
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/checkjdk.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-provider.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-provider.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-provider.xml	(revision 42196)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="gvSIG-make-cookies-provider-project" default="mkproject-build" basedir=".">
+
+	<!-- Get current file location folder -->
+	<dirname property="gvSIG-make-cookies-provider-project.basedir" file="${ant.file.gvSIG-make-cookies-provider-project}" />
+
+	<target name="mkproject-build">
+	    <ant dir="${gvSIG-make-cookies-provider-project.basedir}" antfile="fortunecookies.xml" target="mkproject-build-provider" />
+	</target>
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/fortunecookies-provider.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/landregistryviewer.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/landregistryviewer.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/landregistryviewer.xml	(revision 42196)
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="gvSIG-make-maven-project" default="mkproject-build" basedir=".">
+
+	<!-- Get current file location folder -->
+	<dirname property="gvSIG-make-maven-project.basedir" file="${ant.file.gvSIG-make-maven-project}" />
+
+	<!-- Libraries folder in the gvSIG extension -->
+	<property name="lib.folder" location="${gvSIG-make-maven-project.basedir}/../lib" />
+	<!-- Templates folder in the gvSIG extension -->
+	<property name="templates.folder" location="${gvSIG-make-maven-project.basedir}/../templates" />
+
+	<property name="gvsiglogo" location="${basedir}/../gvSIG.png" />
+
+	<!-- Load some ant external utility tasks -->
+	<property name="antform.lib" location="${lib.folder}/antform-2.0.jar" />
+	<property name="antcontrib.lib" location="${lib.folder}/ant-contrib-1.0b3.jar" />
+	<property name="antelope.lib" location="${lib.folder}/antelopetasks-3.2.10.jar" />
+
+	<taskdef resource="net/sf/antcontrib/antlib.xml">
+		<classpath>
+			<pathelement location="${antcontrib.lib}" />
+		</classpath>
+	</taskdef>
+
+	<taskdef name="antform" classname="com.sardak.antform.AntForm" classpath="${antform.lib}" />
+
+	<taskdef name="antmenu" classname="com.sardak.antform.AntMenu" classpath="${antform.lib}" />
+
+	<taskdef name="stringutil" classname="ise.antelope.tasks.StringUtilTask" classpath="${antelope.lib}" />
+
+	<target name="mkproject-build-cancelled">
+		<antform title="Project creation cancelled" width="${form.width}" image="${gvsiglogo}">
+			<textProperty label="" editable="false" columns="40" property="form.title" />
+			<label>Creation cancelled.</label>
+			<separator />
+			<controlbar>
+				<button type="cancel" label=" Close " />
+			</controlbar>
+		</antform>
+	</target>
+
+	<target name="mkproject-build">
+		<echo>
+  Project name: "${project.name}"
+  Project name capitalized: "${project.name.capitalized}"
+  Project name lowercase: ${project.name.lowercase}"
+  Group id: "${project.group.id}"
+  ArtifactId: "${project.artifact.id}"
+  Project folder: "${project.folder}"
+        </echo>
+
+		<echo>Unzipping the basic template project</echo>
+		<unzip src="${templates.folder}/landregistryviewer.zip" dest="${project.folder}" />
+
+		<!-- Calculate the project artifact id as PATH -->
+		<propertyregex property="project.artifact.id.folder" input="${project.artifact.id}" regexp="([^\.]*).([^\.]*)" replace="\1/\2" />
+
+		<echo>Renaming folder ${project.folder}/org.gvsig.landregistryviewer to 
+            ${project.folder}/${project.artifact.id}</echo>
+
+		<move todir="${project.folder}">
+			<fileset dir="${project.folder}">
+				<include name="org.gvsig.landregistryviewer/**/*.txt" />
+				<include name="org.gvsig.landregistryviewer/**/*.java" />
+				<include name="org.gvsig.landregistryviewer/**/*.xml" />
+				<include name="org.gvsig.landregistryviewer/**/org.gvsig.tools.library.Library" />
+				<include name="org.gvsig.landregistryviewer.app/**/org.gvsig.tools.library.Library" />
+				<include name="org.gvsig.landregistryviewer.app/**/*.txt" />
+				<include name="org.gvsig.landregistryviewer.app/**/*.xml" />
+				<include name="org.gvsig.landregistryviewer.app/**/*.java" />
+ 			</fileset>
+			<mapper>
+				<filtermapper>
+					<replacestring from="org.gvsig.landregistryviewer" to="${project.artifact.id}" />
+					<replacestring from="org${file.separator}gvsig${file.separator}landregistryviewer" to="${project.artifact.id.folder}" />
+					<replacestring from="LandRegistryViewer" to="${project.name.capitalized}" />
+				</filtermapper>
+			</mapper>
+			<filterchain>
+				<tokenfilter>
+					<replacestring from="org.gvsig.landregistryviewer" to="${project.artifact.id}" />
+				</tokenfilter>
+				<tokenfilter>
+					<replacestring from="LandRegistryViewer" to="${project.name.capitalized}" />
+					<replacestring from="Land Registry Viewer" to="${project.name.capitalized}" />
+					<replacestring from="gvsig-landregistryviewer" to="gvsig-${project.name.lowercase}" />
+				</tokenfilter>
+				<tokenfilter>
+					<replacestring from="LandRegistryViewer" to="${project.name.capitalized}" />
+					<replacestring from="Land Registry Viewer" to="${project.name.capitalized}" />
+					<replacestring from="gvsig-landregistryviewer" to="gvsig-${project.name.lowercase}" />
+				</tokenfilter>
+			</filterchain>
+		</move>
+		<move todir="${project.folder}">
+			<fileset dir="${project.folder}">
+                                <include name="org.gvsig.landregistryviewer/**" />
+                                <include name="org.gvsig.landregistryviewer.app/**" />
+			</fileset>
+			<mapper>
+				<filtermapper>
+					<replacestring from="org.gvsig.landregistryviewer" to="${project.artifact.id}" />
+					<replacestring from="org${file.separator}gvsig${file.separator}landregistryviewer" to="${project.artifact.id.folder}" />
+					<replacestring from="LandRegistryViewer" to="${project.name.capitalized}" />
+				</filtermapper>
+			</mapper>
+		</move>
+<!--
+		<delete dir="${project.folder}/org.gvsig.landregistryviewer"/>
+		<delete dir="${project.folder}/org.gvsig.landregistryviewer.app"/>
+-->
+	</target>
+
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/scripts/landregistryviewer.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,27 @@
+_Java_compiler_not_found_near_current_JRE_nor_in_JAVA_HOME=No se ha encontrado compilador Java junto a JRE actual ni en la ubicaci�n indicada por JAVA_HOME
+_Continue_question=�Desea continuar?
+_Searching_JDK=Buscando JDK
+_gvSIG_is_running_on_JDK=gvSIG se est� ejecutando sobre un JDK
+_gvSIG_is_not_running_on_JDK=gvSIG no se est� ejecutando sobre un JDK
+_JAVA_HOME_is_not_set=La variable de entorno JAVA_HOME no est� declarada
+_JAVA_HOME_is_set_to=La variable de entorno JAVA_HOME tiene el valor
+_You_might_need_to_run_gvSIG_on_JDK_or_set_JAVA_HOME_properly=Es probable que necesite ejecutar gvSIG sobre un JDK o establecer JAVA_HOME correctamente
+_Visit_gvSIG_website_for_details=Visite la p�gina web de gvSIG para m�s informaci�n
+_Detected_settings=Configuraci�n detectada
+_On_Linux_make_JAVA_HOME_point_to_JDK_1_5_higher=En Linux, aseg�rese de que la variable de entorno JAVA_HOME apunta a un JDK 1.5 � superior
+_On_Windows_run_JDK_use_devel_exe=En Windows, aseg�rese de que gvSIG se ejecuta sobre un JDK y use 'gvsig-desktop-devel.exe' para iniciarlo
+_Make_maven_project_plugin=Complemento para crear proyecto maven
+_Requirements_for_this_plugin=Requisitos para este plugin
+_Mandatory_platform_properties_file_not_found=No se ha encontrado el archivo necesario: [USUARIO]/.gvsig.platform.properties
+_Use_this_text_editor_to_write_it=Use este editor de texto para crearlo
+_Cancel=Cancelar
+_Suggested=Ejemplo
+_Accept=Aceptar
+_Save=Guardar
+_Checking_platform_properties=Comprobando propiedades del sistema
+_There_are_unsaved_changes_Continue_question=Hay cambios no guardados. �Desea continuar?
+_Not_saved=No se ha guardado
+_Unable_to_store_file=No se pudo guardar archivo
+_Error=Error
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,25 @@
+_Java_compiler_not_found_near_current_JRE_nor_in_JAVA_HOME=Java compiler not found near current JRE nor in location pointed by JAVA_HOME
+_Continue_question=Would you like to continue?
+_Searching_JDK=Searching JDK
+_gvSIG_is_running_on_JDK=gvSIG is running on JDK
+_gvSIG_is_not_running_on_JDK=gvSIG is not running on JDK
+_JAVA_HOME_is_not_set=Environment variable JAVA_HOME is not set
+_JAVA_HOME_is_set_to=Environment variable JAVA_HOME is set to
+_You_might_need_to_run_gvSIG_on_JDK_or_set_JAVA_HOME_properly=You might need to run gvSIG on JDK or set JAVA_HOME properly
+_Visit_gvSIG_website_for_details=Visit gvSIG website for details
+_Detected_settings=Detected settings
+_On_Linux_make_JAVA_HOME_point_to_JDK_1_5_higher=On Linux, make sure the environment variable JAVA_HOME points at JDK 1.5 or higher
+_On_Windows_run_JDK_use_devel_exe=On Windows, make sure you are running gvSIG on a JDK and start it with 'gvsig-desktop-devel.exe'
+_Make_maven_project_plugin=Make maven project plugin
+_Requirements_for_this_plugin=Requirements for this plugin
+_Mandatory_platform_properties_file_not_found=Mandatory file not found: [USER]/.gvsig.platform.properties
+_Use_this_text_editor_to_write_it=Use this text editor to create it
+_Cancel=Cancel
+_Suggested=Example
+_Accept=Accept
+_Save=Save
+_Checking_platform_properties=Checking platform properties
+_There_are_unsaved_changes_Continue_question=There are unsaved changes. Continue anyway?
+_Not_saved=Not saved
+_Unable_to_store_file=Unable to store file
+_Error=Error
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.mkmvnproject.MakeMavenProjectExtension"
+			description=""
+			active="true"
+			priority="1">
+			<menu text="tools/Development/Create Plugin"
+				position="7009080"
+				action-command="gvSIGProjectWizard"/>
+		</extension>		
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/images/gvSIG.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources-plugin/images/gvSIG.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources/compilationcheck/DummyClass.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources/compilationcheck/DummyClass.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources/compilationcheck/DummyClass.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+public class DummyClass extends Exception {
+    
+    public DummyClass() {
+        super("X");
+        method();
+    }
+    
+    public void method() {
+        System.out.println("Nothing to do here!");
+    }
+
+    
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/src/main/resources/compilationcheck/DummyClass.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.mkmvnproject.app.mainplugin</artifactId>
+    <packaging>jar</packaging>
+    <name>Development project wizard</name>
+    <description>
+        Utilities and gvSIG plugin to create new gvSIG projects from a template
+    </description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.mkmvnproject.app</artifactId>
+        <version>2.0.49-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-ant-tasks</artifactId>
+            <version>2.1.3</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.andami</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant-nodeps</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant-apache-oro</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>ant-contrib</groupId>
+            <artifactId>ant-contrib</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant-launcher</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.tigris.antelope</groupId>
+            <artifactId>antelopetasks</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sardak</groupId>
+            <artifactId>antform</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.tmatesoft.svnkit</groupId>
+            <artifactId>svnkit</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.tmatesoft.svnkit</groupId>
+            <artifactId>svnkit-cli</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        
+<!--
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>properties-maven-plugin</artifactId>
+                <configuration>
+                    <files>
+                        <file>${user.home}/.gvsig-devel.properties</file>
+                    </files>
+                    <quiet>true</quiet>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>default</id>
+                        <phase>initialize</phase>
+                        <goals>
+                            <goal>read-project-properties</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+-->
+
+        <pluginManagement>
+            <plugins>
+                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.apache.maven.plugins</groupId>
+                                        <artifactId>maven-antrun-plugin</artifactId>
+                                        <versionRange>[1.7,)</versionRange>
+                                        <goals>
+                                            <goal>run</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore />
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+
+    <profiles>
+        <profile>
+            <id>download-plugin-templates</id>
+            <activation>
+                <property>
+                    <name>!gvsig.skip.downloadPluginTemplates</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <dependencies>
+                            <dependency>
+                                <groupId>org.apache.ant</groupId>
+                                <artifactId>ant-apache-oro</artifactId>
+                                <version>1.8.1</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <id>prepare-templates</id>
+                                <phase>generate-resources</phase>
+                                <configuration>
+                                    <tasks>
+                                        <!-- Regexp implementation to use -->
+                                        <property name="ant.regexp.regexpimpl" value="org.apache.tools.ant.util.regexp.JakartaOroRegexp" />
+                                        <property name="runtime_classpath" refid="maven.runtime.classpath" />
+                                        <ant antfile="${basedir}/src/main/ant/prepare-templates.xml" />
+                                    </tasks>
+                                </configuration>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+
+                </plugins>
+            </build>
+            <properties>
+                <gvsig.install.plugin.package>true</gvsig.install.plugin.package>
+            </properties>
+        </profile>
+    </profiles>
+
+    <properties>
+        <gvsig.package.info.categories>Development</gvsig.package.info.categories>
+        <gvsig.package.info.codealias>org.gvsig.mkmvnproject</gvsig.package.info.codealias>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+	<gvsig.install.plugin.package>false</gvsig.install.plugin.package>
+    </properties>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/org.gvsig.mkmvnproject.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/pom.xml	(revision 42196)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.mkmvnproject.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.49-SNAPSHOT</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.mkmvnproject.app.mainplugin</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.mkmvnproject.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+  <depends plugin-name="org.gvsig.app.mainplugin" />
+  <libraries library-dir="lib"/>
+  <resourceBundle name="text"/>
+  <extensions>
+<!--     <extension class-name="org.gvsig.andami.LibraryExtension"
+      description=""
+      active="true">
+    </extension>
+    <extension class-name="org.gvsig.geometry.app.generalpath.FlatnessExtension"
+      description="Support flatness preference"
+      active="true">
+    </extension> -->
+
+
+    <extension class-name="org.gvsig.app.extension.SnappingExtension"
+      description="Support snapping preferences"
+      active="true">
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.DisplayGridExtension"
+      description="Extensi�n encargada de mostrar/ocultar la rejilla de edici�n."
+      active="true">
+
+            <action
+                name="show-grid-toggle-display-grid"
+                label="_Toggle_show_grid"
+                tooltip="_Toggle_show_grid"
+                position="000400300100"
+                action-command="show-grid-toggle-display-grid"
+                icon="show-grid-toggle-display-grid"
+                accelerator="F7"
+                />
+            <menu
+                name="show-grid-toggle-display-grid"
+                text="Show/Grid/_Toggle_show_grid"
+                />
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.EnableSnapToGridExtension"
+      description="Extensi�n encargada de activar/desactivar el snapping a la rejilla de edici�n."
+      active="true">
+
+            <action
+                name="show-grid-toggle-snap-to-grid"
+                label="_Toggle_snap_to_grid"
+                tooltip="_Toggle_snap_to_grid"
+                position="000400300200"
+                action-command="show-grid-toggle-snap-to-grid"
+                icon="show-grid-toggle-snap-to-grid"
+                accelerator="F9"
+                />
+            <menu
+                name="show-grid-toggle-snap-to-grid"
+                text="Show/Grid/_Toggle_snap_to_grid"
+                />
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.EnableSnappingExtension"
+      description="Extensi�n encargada de activar el snapping de edici�n."
+      active="true">
+
+            <action
+                name="edit-enable-snapping"
+                label="_Enable_snapping"
+                tooltip="_Enable_snapping"
+                position="000208000000"
+                action-command="edit-enable-snapping"
+                icon="enable-snapping"
+                accelerator="F3"
+                />
+            <menu
+                name="edit-enable-snapping"
+                text="Edit/_Enable_snapping"
+                />
+
+    </extension>
+    <extension class-name="org.gvsig.app.extension.DisableSnappingExtension"
+      description="Extensi�n encargada de desactivar el snapping de edici�n."
+      active="true">
+
+            <action
+                name="edit-disable-snapping"
+                label="_Disable_snapping"
+                tooltip="_Disable_snapping"
+                position="000208000000"
+                action-command="edit-disable-snapping"
+                icon="disable-snapping"
+                accelerator="F3"
+                />
+            <menu
+                name="edit-disable-snapping"
+                text="Edit/_Disable_snapping"
+                />
+
+    </extension>
+
+
+
+  </extensions>
+
+</plugin-config>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/actions/disable-snapping.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/actions/disable-snapping.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/actions/enable-snapping.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/actions/enable-snapping.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/preferences/preferences-snapper.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/preferences/preferences-snapper.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/preferences/grid-preferences.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/images/preferences/grid-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 42196)
@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.geometry.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.snapping.app.mainplugin">
+      <description>Persistence for the snapping plugin</description>
+      <fields>
+
+        <!-- Snapping -->
+        <field name="snapTolerance" type="Integer" defaultValue="4" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="applySnappers" type="Boolean" defaultValue="true" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedFinalPointSnapper" type="Boolean" defaultValue="true" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityFinalPointSnapper" type="Integer" defaultValue="1" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedNearestPointSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityNearestPointSnapper" type="Integer" defaultValue="2" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedPixelSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityPixelSnapper" type="Integer" defaultValue="3" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedCentralPointSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityCentralPointSnapper" type="Integer" defaultValue="3" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedQuadrantPointSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityQuadrantPointSnapper" type="Integer" defaultValue="3" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedIntersectionPointSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityIntersectionPointSnapper" type="Integer" defaultValue="3" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedMediumPointSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityMediumPointSnapper" type="Integer" defaultValue="3" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedPerpendicularPointSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityPerpendicularPointSnapper" type="Integer" defaultValue="3" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperActivatedTangentPointSnapper" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="snapperPriorityTangentPointSnapper" type="Integer" defaultValue="3" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <!--Grid-->
+        <field name="adjustgrid" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="showgrid" type="Boolean" defaultValue="false" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="griddistancex" type="Double" defaultValue="1000" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+        <field name="griddistancey" type="Double" defaultValue="1000" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,18 @@
+#Translations for language [es]
+#Mon Apr 20 08:40:30 CET 2015
+ajustar_rejilla=Ajustar rejilla
+Grid=Rejilla
+mostrar_rejilla=Mostrar rejilla
+_Show_grid=Mostrar la rejilla
+_Hide_grid=Ocultar la rejilla
+_Enable_snapping=Activar snapping
+_Disable_snapping=Desactivar snapping
+_Enable_snap_to_grid=Activar snapping a la rejilla
+_Disable_snap_to_grid=Desactivar snapping a la rejilla
+_Toggle_show_grid=Mostrar-ocultar rejilla
+_Toggle_snapping=Activar-desactivar snapping
+_Toggle_snap_to_grid=Activar-desactivar snapping a la rejilla
+snap_tolerance=Tolerancia
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+LayerName=Nombre de la capa
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,18 @@
+#Translations for language [en]
+#Mon Apr 20 08:40:30 CET 2015
+ajustar_rejilla=Adjust grid
+Grid=Grid
+mostrar_rejilla=Show grid
+_Show_grid=Show grid
+_Hide_grid=Hide grid
+_Enable_snapping=Enable snapping
+_Disable_snapping=Disable snapping
+_Enable_snap_to_grid=Enable snapping to grid
+_Disable_snap_to_grid=Disable snapping to grid
+_Toggle_show_grid=Toggle display grid
+_Toggle_snapping=Toggle snapping
+_Toggle_snap_to_grid=Toggle snapping to grid
+snap_tolerance=Tolerance
+capas_edition_cache=Mark the layers to be used for snapping
+MaxFeaturesEditionCache=Max features edition cache
+LayerName=Layer name
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,66 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+
+  <!--  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>com.vividsolutions:jts</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.api</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.generalpath</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.operation</include>
+      </includes>
+    </dependencySet>
+  </dependencySets> -->
+
+</assembly>
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/GridPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/GridPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/GridPage.java	(revision 42196)
@@ -0,0 +1,234 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: GridPage.java 21668 2008-06-19 09:05:14Z vcaballero $
+* $Log$
+* Revision 1.4  2006-08-22 12:27:53  jaume
+* improved performances when saving
+*
+* Revision 1.3  2006/08/22 07:37:32  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/08/10 11:13:02  caballero
+* mostrar unidades
+*
+* Revision 1.1  2006/08/10 08:18:35  caballero
+* configurar grid
+*
+* Revision 1.1  2006/08/04 11:41:05  caballero
+* poder especificar el zoom a aplicar en las vistas
+*
+* Revision 1.3  2006/07/31 10:02:31  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/06/13 07:43:08  fjp
+* Ajustes sobre los cuadros de dialogos de preferencias
+*
+* Revision 1.1  2006/06/12 16:04:28  caballero
+* Preferencias
+*
+* Revision 1.11  2006/06/06 10:26:31  jaume
+* *** empty log message ***
+*
+* Revision 1.10  2006/06/05 17:07:17  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2006/06/05 17:00:44  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2006/06/05 16:57:59  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/06/05 14:45:06  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/06/05 11:00:09  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/06/05 10:39:02  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/06/05 10:13:40  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/06/05 10:06:08  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/06/05 09:51:56  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/06/02 10:50:18  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.gui.preferencespage;
+
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.grid.Grid;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+public class GridPage extends AbstractPreferencePage {
+    public static final String ID = GridPage.class.getName();
+
+	private org.gvsig.fmap.mapcontrol.MapControl mapControl;
+	private JCheckBox chkShowGrid;
+	private JCheckBox chkAdjustGrid;
+	private JTextField txtDistanceX;
+	private JTextField txtDistanceY;
+	private JLabel lblUnits=new JLabel();
+	private ImageIcon icon;
+
+    private DynObject pluginProperties;
+    private PluginServices plugin;
+
+
+
+	public GridPage() {
+		super();
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        this.plugin = pluginManager.getPlugin(this);
+        this.pluginProperties = this.plugin.getPluginProperties();
+
+		icon = IconThemeHelper.getImageIcon("grid-preferences");
+
+		chkShowGrid=new JCheckBox(PluginServices.getText(this,"mostrar_rejilla"));
+		addComponent(chkShowGrid);
+		chkAdjustGrid=new JCheckBox(PluginServices.getText(this,"ajustar_rejilla"));
+		addComponent(chkAdjustGrid);
+		addComponent(lblUnits);
+
+		// distance x
+		addComponent(PluginServices.getText(this, "distance_x") + ":",
+			txtDistanceX = new JTextField("", 15));
+		// distance y
+		addComponent(PluginServices.getText(this, "distance_y") + ":",
+			txtDistanceY = new JTextField("", 15));
+//		setParentID(ViewPage.id);
+
+	}
+
+	public void initializeValues() {
+        boolean showGrid = ((Boolean)pluginProperties.getDynValue("showgrid")).booleanValue();
+        boolean adjustGrid = ((Boolean)pluginProperties.getDynValue("adjustgrid")).booleanValue();
+
+		double dx = ((Double)pluginProperties.getDynValue("griddistancex")).doubleValue();
+        double dy = ((Double)pluginProperties.getDynValue("griddistancey")).doubleValue();
+
+		Grid.SHOWGRID=showGrid;
+		Grid.ADJUSTGRID=adjustGrid;
+		Grid.GRIDSIZEX=dx;
+		Grid.GRIDSIZEY=dy;
+
+		chkShowGrid.setSelected(showGrid);
+		chkAdjustGrid.setSelected(adjustGrid);
+		txtDistanceX.setText(String.valueOf(dx));
+		txtDistanceY.setText(String.valueOf(dy));
+	}
+
+	public String getID() {
+		return ID;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "Grid");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void storeValues() throws StoreException {
+		boolean showGrid;
+		boolean adjustGrid;
+		double dx;
+		double dy;
+
+			showGrid=chkShowGrid.isSelected();
+			adjustGrid=chkAdjustGrid.isSelected();
+		try{
+			dx=Double.parseDouble(txtDistanceX.getText());
+			dy=Double.parseDouble(txtDistanceY.getText());
+		}catch (Exception e) {
+			throw new StoreException(PluginServices.getText(this,"distancia_malla_incorrecta"));
+		}
+
+        this.pluginProperties.setDynValue("showgrid", showGrid);
+        this.pluginProperties.setDynValue("adjustgrid", adjustGrid);
+        this.pluginProperties.setDynValue("griddistancex", dx);
+        this.pluginProperties.setDynValue("griddistancey", dy);
+
+
+		Grid.SHOWGRID=showGrid;
+		Grid.ADJUSTGRID=adjustGrid;
+		Grid.GRIDSIZEX=dx;
+		Grid.GRIDSIZEY=dy;
+
+		IWindow window=PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof DefaultViewPanel){
+			MapControl mc=((DefaultViewPanel)window).getMapControl();
+			Grid cadGrid=mc.getGrid();
+			cadGrid.setShowGrid(showGrid);
+			cadGrid.setAdjustGrid(adjustGrid);
+			cadGrid.setGridSizeX(dx);
+			cadGrid.setGridSizeY(dy);
+		}
+
+	}
+
+	public void initializeDefaults() {
+		chkShowGrid.setSelected(Grid.DefaultShowGrid);
+		chkAdjustGrid.setSelected(Grid.DefaultAdjustGrid);
+		txtDistanceX.setText(String.valueOf(Grid.DefaultGridSizeX));
+		txtDistanceY.setText(String.valueOf(Grid.DefaultGridSizeY));
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SnapConfigPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SnapConfigPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SnapConfigPage.java	(revision 42196)
@@ -0,0 +1,273 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.preferencespage;
+
+import java.awt.BorderLayout;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.gui.SnapConfig;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+
+
+/**
+ * Preferencias de snapping.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SnapConfigPage extends AbstractPreferencePage {
+    /**
+     *
+     */
+    private static final long serialVersionUID = -3288863201776046550L;
+
+    private static final Logger logger = LoggerFactory.getLogger(SnapConfigPage.class);
+
+    public static final String ID = SnapConfigPage.class.getName();
+
+
+    private SnapConfig snapConfig;
+	private static boolean applySnappers=true;
+    private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+    private DynObject pluginProperties;
+    private PluginServices plugin;
+
+    public SnapConfigPage() {
+//        super();
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        this.plugin = pluginManager.getPlugin(this);
+        this.pluginProperties = this.plugin.getPluginProperties();
+
+        this.snapConfig = new SnapConfig(new MouseListener() {
+            public void mouseReleased(MouseEvent e) {
+            }
+            public void mousePressed(MouseEvent e) {
+                setChanged(true);
+            }
+            public void mouseExited(MouseEvent e) {
+            }
+            public void mouseEntered(MouseEvent e) {
+            }
+            public void mouseClicked(MouseEvent e) {
+            }
+        }, new KeyListener() {
+            public void keyTyped(KeyEvent e) {
+                setChanged(true);
+            }
+            public void keyReleased(KeyEvent e) {
+                setChanged(true);
+            }
+            public void keyPressed(KeyEvent e) {
+                setChanged(true);
+            }
+        });
+
+        this.setLayout(new BorderLayout());
+        this.add(this.snapConfig, BorderLayout.NORTH);
+        this.snapConfig.setSnappers();
+        initializeValues();
+    }
+
+
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @throws StoreException DOCUMENT ME!
+     */
+    public void storeValues() throws StoreException {
+    	for (int n = 0; n < mapControlManager.getSnapperCount(); n++) {
+            Boolean b = (Boolean) snapConfig.getTableModel().getValueAt(n, 0);
+            ISnapper snp = (ISnapper) mapControlManager.getSnapperAt(n);
+            String nameClass=snp.getClass().getName();
+            nameClass=nameClass.substring(nameClass.lastIndexOf('.')+1);
+            this.pluginProperties.setDynValue("snapperActivated" + nameClass, b.booleanValue());
+
+            if (b.booleanValue()){
+            	snp.setEnabled(b);
+            }
+            this.pluginProperties.setDynValue("snapperPriority" + nameClass, snp.getPriority());
+        }
+    	Boolean b = (Boolean)snapConfig.applySnappers();
+        this.pluginProperties.setDynValue("applySnappers", b.booleanValue());
+        applySnappers=b;
+
+        Integer snapTolerance = snapConfig.getSnapTolerance();
+        this.pluginProperties.setDynValue("snapTolerance", snapTolerance.intValue());
+        mapControlManager.setTolerance(snapTolerance);
+
+        this.plugin.savePluginProperties();
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void setChangesApplied() {
+    	setChanged(false);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getID() {
+        return ID;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("Snapping");
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public JPanel getPanel() {
+        return this;
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void initializeValues() {
+        //FIXME: �Es necesario esto? Creo que no, la gestion de preferencias nueva ya incorpora los valores por defecto
+        try {
+            Boolean applySnappers = (Boolean) pluginProperties.getDynValue("applySnappers");
+        } catch (DynFieldNotFoundException e){
+            initializeDefaults();
+        }
+
+        snapConfig.setApplySnappers(applySnappers);
+
+        for (int n = 0; n < mapControlManager.getSnapperCount(); n++) {
+            // Boolean b = (Boolean) snapConfig.getTableModel().getValueAt(n, 0);
+            ISnapper snp = (ISnapper) mapControlManager.getSnapperAt(n);
+            String nameClass = snp.getClass().getName();
+            nameClass = nameClass.substring(nameClass.lastIndexOf('.')+1);
+            Boolean active = (Boolean) pluginProperties.getDynValue("snapperActivated"+nameClass);
+            snapConfig.getTableModel().setValueAt(active.booleanValue(),n,0);
+            Integer prior = (Integer) pluginProperties.getDynValue("snapperPriority"+nameClass);
+            snapConfig.getTableModel().setValueAt(prior, n, 3);
+        }
+      Integer snapTolerance = (Integer) pluginProperties.getDynValue("snapTolerance");
+      snapConfig.setSnapTolerance(snapTolerance);
+
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void initializeDefaults() {
+    	for (int n = 0; n < mapControlManager.getSnapperCount(); n++) {
+            ISnapper snp = mapControlManager.getSnapperAt(n);
+            String nameClass=snp.getClass().getName();
+            nameClass=nameClass.substring(nameClass.lastIndexOf('.')+1);
+            if (nameClass.equals(".FinalPointSnapper")){
+            	int priority = 1;
+            	//FIXME: �Por qu� hay que a�adir esta l�nea?
+//                this.pluginProperties.setDynValue("snapperPriority" + nameClass, priority);
+            	snp.setEnabled(true);
+            	snp.setPriority(priority);
+            }else if (nameClass.equals(".NearestPointSnapper")){
+            	int priority = 2;
+                //FIXME: �Por qu� hay que a�adir esta l�nea?
+//                this.pluginProperties.setDynValue("snapperPriority" + nameClass, priority);
+            	snp.setEnabled(true);
+            	snp.setPriority(priority);
+            }else{
+            	int priority = 3;
+                //FIXME: �Por qu� hay que a�adir esta l�nea?
+//                this.pluginProperties.setDynValue("snapperPriority" + nameClass, priority);
+            	snp.setEnabled(false);
+            	snp.setPriority(priority);
+            }
+        }
+        applySnappers = true;
+        snapConfig.setApplySnappers(applySnappers);
+        snapConfig.selectSnappers();
+
+        this.pluginProperties.setDynValue("snapTolerance", 4);
+        snapConfig.setSnapTolerance(4);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public ImageIcon getIcon() {
+        return IconThemeHelper.getImageIcon("preferences-snapper");
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public boolean isValueChanged() {
+    	return super.hasChanged();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.andami.preferences.AbstractPreferencePage#isResizeable()
+     */
+	public boolean isResizeable() {
+		return true;
+	}
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingPropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingPropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingPropertiesPageFactory.java	(revision 42196)
@@ -0,0 +1,24 @@
+
+package org.gvsig.app.project.documents.view.gui;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+public class ViewSnappingPropertiesPageFactory implements PropertiesPageFactory {
+
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    public PropertiesPage create(Object obj) {
+        return new ViewSnappingPropertiesPage((ViewDocument)obj);
+    }
+
+    public String getGroupID() {
+        return ViewDocument.VIEW_PROPERTIES_PAGE_GROUP;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingPropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingPropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingPropertiesPage.java	(revision 42196)
@@ -0,0 +1,459 @@
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.ArrayList;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.LineBorder;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.SingleLayerIterator;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+public class ViewSnappingPropertiesPage extends JPanel implements PropertiesPage {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3534295787643266933L;
+
+    private static final Logger logger =
+        LoggerFactory.getLogger(ViewSnappingPropertiesPage.class);
+
+
+    private JLabel jLabel = null;
+
+    private JTextField jTxtTolerance = null;
+
+    private JLabel jLabel1 = null;
+
+    private JSeparator jSeparator = null;
+
+    private JScrollPane jScrollPane = null;
+
+    private JTable jTableSnapping = null;
+
+    private JLabel jLabelCache = null;
+
+    private JPanel jPanelNord = null;
+
+    private JPanel jPanelCache = null;
+    private boolean changed = false;
+
+    private FLayers layers;
+
+    private MapContext mapContext;
+
+    private ViewDocument view;
+
+    private boolean isAcceppted;
+
+    private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+    private class MyRecord {
+        public Boolean bSelec = new Boolean(false);
+
+        public String layerName;
+
+        public Integer maxFeat = new Integer(1000);
+    }
+
+    private class MyTableModel extends AbstractTableModel {
+        private ArrayList records = new ArrayList();
+
+        public MyTableModel(FLayers layers) {
+            addLayer(layers);
+        }
+
+        private void addLayer(FLayer lyr) {
+            if (lyr instanceof FLayers) {
+                FLayers lyrGroup = (FLayers) lyr;
+                for (int i = 0; i < lyrGroup.getLayersCount(); i++) {
+                    FLayer lyr2 = lyrGroup.getLayer(i);
+                    addLayer(lyr2);
+                }
+            } else {
+                if (lyr instanceof FLyrVect) {
+                    FLyrVect aux = (FLyrVect) lyr;
+                    MyRecord rec = new MyRecord();
+                    rec.layerName = lyr.getName();
+                    SpatialCache spatialCache = aux.getSpatialCache();
+                    rec.bSelec = new Boolean(spatialCache.isEnabled());
+                    rec.maxFeat = new Integer(spatialCache.getMaxFeatures());
+                    records.add(rec);
+                }
+            }
+        }
+
+        public int getColumnCount() {
+            return 3;
+        }
+
+        public int getRowCount() {
+            return records.size();
+        }
+
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            MyRecord rec = (MyRecord) records.get(rowIndex);
+            if (columnIndex == 0)
+                return rec.bSelec;
+            if (columnIndex == 1)
+                return rec.layerName;
+            if (columnIndex == 2)
+                return rec.maxFeat;
+            return null;
+
+        }
+
+        public Class getColumnClass(int c) {
+            if (c == 0)
+                return Boolean.class;
+            if (c == 2)
+                return Integer.class;
+            return String.class;
+        }
+
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+            MyRecord rec = (MyRecord) records.get(rowIndex);
+            if (columnIndex == 0)
+                rec.bSelec = (Boolean) aValue;
+            if (columnIndex == 2) {
+                if (aValue != null)
+                    rec.maxFeat = (Integer) aValue;
+                else
+                    rec.maxFeat = new Integer(0);
+            }
+            changed  =true;
+            super.setValueAt(aValue, rowIndex, columnIndex);
+        }
+
+        public boolean isCellEditable(int rowIndex, int columnIndex) {
+            if (columnIndex == 0)
+                return true;
+            if (columnIndex == 2)
+                return true;
+
+            return false;
+        }
+
+        public String getColumnName(int column) {
+            if (column == 0)
+                return PluginServices.getText(this, "Selected");
+            if (column == 1)
+                return PluginServices.getText(this, "LayerName");
+            if (column == 2)
+                return PluginServices.getText(this, "MaxFeaturesEditionCache");
+            return "You shouldn't reach this point";
+
+        }
+    }
+
+    public ViewSnappingPropertiesPage(ViewDocument view) {
+        this.view = view;
+        initComponents();
+
+        // addLayer(layers);
+        this.mapContext = view.getMapContext();
+        this.layers = mapContext.getLayers();
+        MyTableModel tm = new MyTableModel(layers);
+        getJTableSnapping().setModel(tm);
+        getJTxtTolerance().setText(String.valueOf(mapControlManager.getTolerance()));
+    }
+
+    public boolean whenAccept() {
+        isAcceppted = true;
+        return whenApply();
+    }
+
+    public boolean whenApply() {
+        TableModel tm = getJTableSnapping().getModel();
+        ArrayList layersToSnap = new ArrayList();
+        for (int i = 0; i < tm.getRowCount(); i++) {
+            String layerName = (String) tm.getValueAt(i, 1);
+            FLyrVect lyr = (FLyrVect) layers.getLayer(layerName);
+            Boolean bUseCache = (Boolean) tm.getValueAt(i, 0);
+            Integer maxFeat = (Integer) tm.getValueAt(i, 2);
+
+            // Decidimos si vamos a habilitar el spatialCache DESPUES, justo
+            // antes de renderizar.
+            // Necesitamos un m�todo que explore las capas en edici�n y mire las
+            // capas sobre las
+            // que se necestia el cache. Aqu� lo que hacemos es a�adir las
+            // seleccionadas a la
+            // lista de capas asociadas al snapping de los temas activos en
+            // edici�n.
+            // Lo del m�ximo de features en cach�, tiene que ser para cada capa
+            // distinto. Pero no
+            // puedes "chafar" el que ya hay, porque puedes fastidiar a otra
+            // capa en edici�n.
+            // Como m�ximo, lo que podemos hacer es que si es mayor al que hay,
+            // lo subimos. Si
+            // se solicita uno menor, lo dejamos como est�.
+            // Otra opci�n ser�a no hacer caso de esto para cada capa, y ponerlo
+            // de forma global.
+            // lyr.setSpatialCacheEnabled(bUseCache.booleanValue());
+            lyr.setMaxFeaturesInEditionCache(maxFeat.intValue());
+            if (bUseCache.booleanValue())
+                layersToSnap.add(lyr);
+        }
+        SingleLayerIterator it = new SingleLayerIterator(layers);
+
+        while (it.hasNext()) {
+            FLayer aux = it.next();
+            if (aux instanceof FLyrVect)
+            {
+                FLyrVect lyrVect = (FLyrVect) aux;
+                // Inicializamos todas
+                lyrVect.getSpatialCache().setEnabled(false);
+                if (aux.isActive()) {
+                    if (aux.isEditing()) {
+                        // Sobre la capa en edici�n siempre se puede hacer snapping
+                        // Esto no es correcto, el usuario puede preferir no hacer snapping sobre la capa en edici�n
+//                        lyrVect.getSpatialCache().setEnabled(true);
+                        lyrVect.getMapContext().setLayersToSnap(layersToSnap);
+
+                    }
+                }
+            }
+        } // while
+        it.rewind();
+        /*
+         * Iteramos por las capas en edici�n y marcamos aquellas capas que
+         * necesitan trabajar con el cache habilitado
+         */
+        while (it.hasNext()) {
+            FLayer aux = it.next();
+            if (aux.isEditing())
+                if (aux instanceof FLyrVect) {
+                    MapContext mx=aux.getMapContext();
+                        for (int i=0; i<mx.getLayersToSnap().size(); i++)
+                        {
+                            FLyrVect lyrVect = (FLyrVect) mx.getLayersToSnap().get(i);
+                            lyrVect.getSpatialCache().setEnabled(true);
+                        }
+
+                }
+
+        } // while
+
+        try{
+            mapControlManager.setTolerance(Integer.parseInt(getJTxtTolerance().getText()));
+
+        }catch (Exception e) {
+            logger.error(PluginServices.getText(this, "tolerancia_incorrecta"),e);
+
+//            throw new StoreException(PluginServices.getText(this, "tolerancia_incorrecta"),e);
+        }
+
+        /*
+         * I think "mapContext.invalidate()" does not work as expected.
+         * Some layers are not actually redrawn.
+         */
+        forceRepaint(mapContext);
+        return true;
+    }
+
+    /**
+     * Not very elegant method to force repaint of view.
+     * @param mco
+     */
+    private void forceRepaint(MapContext mco) {
+
+        ViewPort vp = mco.getViewPort();
+        Envelope env = vp.getAdjustedEnvelope();
+        if (env != null) {
+            try {
+                env = (Envelope) env.clone();
+            } catch (CloneNotSupportedException e) {
+                logger.error("Unable to clone envelope: ", e);
+            }
+            Point uc = env.getUpperCorner();
+            double upperx = uc.getX();
+            double inc_len = 0.000001 * env.getLength(0);
+            uc.setX(upperx + inc_len);
+            vp.setEnvelope(env);
+        }
+    }
+
+   public boolean whenCancel() {
+        isAcceppted = false;
+        return true;
+    }
+
+    public String getTitle() {
+        return PluginServices.getText(this, "Snapping");
+        }
+
+    public int getPriority() {
+        return 900;
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void initComponents() {
+        BorderLayout layout = new BorderLayout();
+        layout.setHgap(20);
+
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+        this.setLayout(layout);
+
+        jLabelCache = new JLabel();
+        jLabelCache.setText(PluginServices.getText(this, "capas_edition_cache"));
+        jLabelCache.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
+        jLabelCache.setPreferredSize(new java.awt.Dimension(500,20));
+        jLabelCache.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+        jLabel1 = new JLabel();
+        jLabel1.setText(i18nManager.getTranslation("pixels"));
+        jLabel1.setBounds(new java.awt.Rectangle(195, 8, 207, 15));
+        jLabel1.setPreferredSize(new java.awt.Dimension(28, 20));
+        jLabel1.setName("jLabel1");
+        jLabel = new JLabel();
+        jLabel.setText(i18nManager.getTranslation("snap_tolerance"));
+        jLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+        jLabel.setName("jLabel");
+        jLabel.setBounds(new java.awt.Rectangle(15, 8, 122, 15));
+        jLabel.setPreferredSize(new java.awt.Dimension(28, 20));
+        jLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
+
+        this.setSize(new java.awt.Dimension(502,288));
+        this.setPreferredSize(this.getSize());
+        this.add(getJPanelNord(), BorderLayout.NORTH);
+
+        this.add(getJPanelCache(), BorderLayout.CENTER);
+
+    }
+
+    /**
+     * This method initializes jPanelNord
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanelNord() {
+        if (jPanelNord == null) {
+            jPanelNord = new JPanel();
+            jPanelNord.setLayout(null);
+            jPanelNord
+                    .setComponentOrientation(java.awt.ComponentOrientation.UNKNOWN);
+            jPanelNord.setPreferredSize(new java.awt.Dimension(30, 30));
+            jPanelNord.add(jLabel, null);
+            jPanelNord.add(getJTxtTolerance(), null);
+            jPanelNord.add(jLabel1, null);
+
+        }
+        return jPanelNord;
+    }
+
+    /**
+     * This method initializes jPanelCache
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanelCache() {
+        if (jPanelCache == null) {
+            jPanelCache = new JPanel();
+            jPanelCache.setLayout(new BorderLayout());
+            jPanelCache.setBorder(new EmptyBorder(10, 10, 10, 10));
+            jPanelCache.add(jLabelCache, java.awt.BorderLayout.NORTH);
+            jPanelCache.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+        }
+        return jPanelCache;
+    }
+
+    /**
+     * This method initializes jTxtTolerance
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getJTxtTolerance() {
+        if (jTxtTolerance == null) {
+            jTxtTolerance = new JTextField();
+            jTxtTolerance.setPreferredSize(new java.awt.Dimension(28, 20));
+            jTxtTolerance.setName("jTxtTolerance");
+            jTxtTolerance.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+            jTxtTolerance.setText("4");
+            jTxtTolerance.setBounds(new java.awt.Rectangle(142, 8, 39, 15));
+            jTxtTolerance.addKeyListener(new KeyListener() {
+                public void keyPressed(KeyEvent e) { changed = true; }
+                public void keyReleased(KeyEvent e) { changed = true; }
+                public void keyTyped(KeyEvent e){ changed = true; }
+            });
+        }
+        return jTxtTolerance;
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new JScrollPane();
+            jScrollPane.setBorder(new LineBorder(Color.GRAY));
+            jScrollPane.setPreferredSize(new java.awt.Dimension(500,419));
+            jScrollPane.setViewportView(getJTableSnapping());
+        }
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes jTableSnapping
+     *
+     * @return javax.swing.JTable
+     */
+    private JTable getJTableSnapping() {
+        if (jTableSnapping == null) {
+            jTableSnapping = new JTable();
+            jTableSnapping.addKeyListener(new KeyListener() {
+                public void keyPressed(KeyEvent e) { changed = true; }
+                public void keyReleased(KeyEvent e) { changed = true; }
+                public void keyTyped(KeyEvent e){ changed = true; }
+            });
+        }
+        return jTableSnapping;
+    }
+
+
+    /**
+     * @see org.gvsig.andami.ui.mdiManager.SingletonWindow#getWindowModel()
+     */
+    public Object getWindowModel() {
+        return view;
+    }
+
+
+    public boolean isAcceppted() {
+        return isAcceppted;
+    }
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/InsertPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/InsertPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/InsertPointSnapper.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+
+
+/**
+ * Insert point snapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class InsertPointSnapper extends AbstractSnapper
+    implements ISnapperVectorial {
+	/* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getSnapPoint(Point2D point,
+     * IGeometry geom,double tolerance, Point2D lastPointEntered)
+     */
+    public Point2D getSnapPoint(Point2D point, Geometry geom,
+        double tolerance, Point2D lastPointEntered) {
+        Point2D resul = null;
+
+        return resul;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getToolTipText()
+     */
+    public String getToolTipText() {
+        return Messages.getText("Insert_point");
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+     */
+    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+    	primitivesDrawer.setColor(getColor());
+
+        int half = getSizePixels() / 2;
+        int x1 = (int) (pPixels.getX() - half);
+        int x2 = (int) (pPixels.getX() + half);
+        int x3 = (int) pPixels.getX();
+        int y1 = (int) (pPixels.getY() - half);
+        int y2 = (int) (pPixels.getY() + half);
+        int y3 = (int) pPixels.getY();
+
+        primitivesDrawer.drawLine(x1, y1, x3, y1);
+        primitivesDrawer.drawLine(x1, y1, x1, y3);
+        primitivesDrawer.drawLine(x1, y3, x3, y3);
+        primitivesDrawer.drawLine(x3, y1, x3, y3);
+
+        primitivesDrawer.drawLine(x3, y3, x2, y3);
+        primitivesDrawer.drawLine(x3, y3, x3, y2);
+        primitivesDrawer.drawLine(x3, y2, x2, y2);
+        primitivesDrawer.drawLine(x2, y3, x2, y2);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/IntersectionPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/IntersectionPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/IntersectionPointSnapper.java	(revision 42196)
@@ -0,0 +1,340 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.MultiPoint;
+import com.vividsolutions.jts.geom.Point;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperGeometriesVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Intersection point snapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class IntersectionPointSnapper extends AbstractSnapper
+    implements ISnapperGeometriesVectorial {
+    private static final Logger LOG = LoggerFactory.getLogger(IntersectionPointSnapper.class);
+    
+    public static final int MAX_GEOMETRIES_IN_RELAXED_LIST = 30;
+    public static final int MAX_GEOMETRIES_WITHIN_TOLERANCE = 5;
+    
+	private List relaxedList = null;
+	private GeometryFactory jtsGeoFact = null;
+	private long errorMsgCount = 0;
+
+    public Point2D getSnapPoint(
+        Point2D point,
+        Geometry geom,
+        double tolerance,
+        Point2D lastPointEntered) {
+        
+        if (geom == null) {
+            return null;
+        }
+        
+        if (relaxedList == null
+            || relaxedList.size() < 2 /* We need 2 to intersect */
+            || relaxedList.size() > MAX_GEOMETRIES_IN_RELAXED_LIST) {
+            /*
+             * If there are a lot of geometries, we assume the user
+             * is not interested in snapping now. The relaxed list
+             * might be long because the spatial index used perhaps
+             * is "lazy" so the value of MAX_GEOMETRIES_IN_RELAXED_LIST
+             * has to be not very small
+             */
+            return null;
+        }
+        
+        List<Geometry> refinedList = null;
+        try {
+            refinedList = refineList(relaxedList, point, tolerance);
+        } catch (Exception e1) {
+            errorMsgCount++;
+            if (errorMsgCount % 100 == 0) {
+                /*
+                 * Prevents too many lines in logger. If this happens,
+                 * it will happen many times, so we'll see it in the log file.
+                 */
+                LOG.info("Error while refining list: " + e1.getMessage());
+                errorMsgCount = 0;
+            }
+            return null;
+        }
+        
+        if (refinedList.size() > MAX_GEOMETRIES_WITHIN_TOLERANCE) {
+            /*
+             * This refined list contains the geometries that are
+             * close to the current mouse. Again we use an upper limit
+             * to prevent the case where the user is in a zoom where
+             * he is not interested in snapping.
+             */
+            return null;
+        }
+        
+        List<Point> interPoints = getInterPoints(refinedList);
+        
+        if (interPoints.size() == 0) {
+            return null;
+        }
+        
+        com.vividsolutions.jts.geom.Geometry jtsg = null;
+        try {
+            jtsg = (com.vividsolutions.jts.geom.Geometry) geom.invokeOperation("toJTS", null);
+        } catch (Exception e) {
+            errorMsgCount++;
+            if (errorMsgCount % 100 == 0) {
+                /*
+                 * Prevents too many lines in logger. If this happens,
+                 * it will happen many times, so we'll see it in the log file.
+                 */
+                LOG.info("Error while refining list: " + e.getMessage());
+                errorMsgCount = 0;
+            }
+            return null;
+        }
+        
+        double zerodist = 0.001 * tolerance;
+        int n = interPoints.size();
+        Point po = null;
+        for (int i=0; i<n; i++) {
+            po = interPoints.get(i);
+            if (point.distance(po.getX(), po.getY()) < tolerance) {
+                // This is a candidate, now we check that it belongs to the
+                // current geometry
+                if (jtsg.distance(po) < zerodist) {
+                    return new Point2D.Double(po.getX(), po.getY());
+                }
+            }
+        }
+        return null;
+    }
+
+
+    private List<Geometry> refineList(
+        List geomlist,
+        Point2D point,
+        double tolerance) throws Exception {
+        
+        List<Geometry> resp = new ArrayList<Geometry>();
+        if (geomlist == null || geomlist.size() == 0) {
+            return resp;
+        }
+        
+        double point_tol_north = point.getY() + tolerance; 
+        double point_tol_south = point.getY() - tolerance;
+        double point_tol_east = point.getX() + tolerance;
+        double point_tol_west = point.getX() - tolerance;
+        
+        Geometry item = null;
+        Envelope env = null;
+        Iterator iter = geomlist.iterator();
+        while (iter.hasNext()) {
+            item = (Geometry) iter.next();
+            
+            if (item.intersects(
+                point_tol_west, point_tol_south,
+                point_tol_east - point_tol_west,
+                point_tol_north - point_tol_south)) {
+                
+                resp.add(item);
+            }
+        }
+        return resp;
+    }
+
+
+    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+    	primitivesDrawer.setColor(getColor());
+
+        int half = getSizePixels() / 2;
+        int x1 = (int) (pPixels.getX() - half);
+        int x2 = (int) (pPixels.getX() + half);
+        int y1 = (int) (pPixels.getY() - half);
+        int y2 = (int) (pPixels.getY() + half);
+
+        primitivesDrawer.drawLine(x1, y1, x2, y2);
+        primitivesDrawer.drawLine(x1, y2, x2, y1);
+    }
+
+    public String getToolTipText() {
+        return Messages.getText("Intersection_point_snapper");
+    }
+
+	public void setGeometries(List geoms) {
+	    relaxedList = leaveUsefulGeometries(geoms);
+	}
+	
+	private List<Point> getInterPoints(List geomes) {
+	    
+	    List<Point> resp = new ArrayList<Point>();
+	    List borders = getJTSBorders(geomes);
+	    com.vividsolutions.jts.geom.Geometry jtsg1 = null;
+	    com.vividsolutions.jts.geom.Geometry jtsg2 = null;
+	    com.vividsolutions.jts.geom.Geometry jtsinter = null;
+	    int n = borders.size();
+	    Point jtsp = null;
+	    MultiPoint jtsmp = null;
+	    
+	    for (int i=0; i<n; i++) {
+	        for (int j=0; j<i; j++) {
+	            if (i != j) {
+	                jtsg1 = (com.vividsolutions.jts.geom.Geometry) borders.get(i);
+	                jtsg2 = (com.vividsolutions.jts.geom.Geometry) borders.get(j);
+	                jtsinter = jtsg1.intersection(jtsg2);
+	                if (jtsinter instanceof Point) {
+	                    jtsp = (Point) jtsinter;
+	                    resp.add(jtsp);
+	                } else {
+	                    if (jtsinter instanceof MultiPoint) {
+	                        
+	                        jtsmp = (MultiPoint) jtsinter;
+	                        int m = jtsmp.getNumGeometries();
+	                        for (int k=0; k<m; k++) {
+	                            jtsp = (Point) jtsmp.getGeometryN(k);
+	                            resp.add(jtsp);
+	                        }
+	                    }
+	                }
+	            }
+	        }
+	    }
+	    return resp;
+	}
+	
+
+    private List getJTSBorders(List gvsigGeoms) {
+        
+        List resp = new ArrayList();
+        com.vividsolutions.jts.geom.Geometry jtsborder = null;
+        
+        if (gvsigGeoms != null && gvsigGeoms.size() > 0) {
+            
+            Iterator iter = gvsigGeoms.iterator();
+            Object itemobj = null;
+            
+            while (iter.hasNext()) {
+                itemobj = iter.next();
+                if (itemobj instanceof Geometry) {
+                    jtsborder = getJTSBorder((Geometry) itemobj);
+                    if (jtsborder != null) {
+                        resp.add(jtsborder);
+                    }
+                }
+            }
+        }
+        return resp;
+    }
+
+    private com.vividsolutions.jts.geom.Geometry getJTSBorder(Geometry geom) {
+        
+        com.vividsolutions.jts.geom.Geometry resp = null;
+        
+        if (geom instanceof Curve || geom instanceof MultiCurve) {
+            
+            try {
+                resp = (com.vividsolutions.jts.geom.Geometry)
+                    geom.invokeOperation("toJTS", null);
+            } catch (Exception e) {
+                errorMsgCount++;
+                if (errorMsgCount % 100 == 0) {
+                    /*
+                     * Prevents too many lines in logger. If this happens,
+                     * it will happen many times, so we'll see it in the log file.
+                     */
+                    LOG.info("Error while refining list: " + e.getMessage());
+                    errorMsgCount = 0;
+                }
+                return null;
+            }
+            return resp;
+            
+        } else {
+            if (geom instanceof Surface || geom instanceof MultiSurface) {
+                
+                try {
+                    resp = (com.vividsolutions.jts.geom.Geometry)
+                        geom.invokeOperation("toJTS", null);
+                    return resp.getBoundary();
+                } catch (Exception e) {
+                    
+                    errorMsgCount++;
+                    if (errorMsgCount % 100 == 0) {
+                        /*
+                         * Prevents too many lines in logger. If this happens,
+                         * it will happen many times, so we'll see it in the log file.
+                         */
+                        LOG.info("Error while refining list: " + e.getMessage());
+                        errorMsgCount = 0;
+                    }
+                    return null;
+                }
+                
+            } else {
+                return null;
+            }
+        }
+        
+    }
+  
+    
+    private List<Geometry> leaveUsefulGeometries(List geoms) {
+        
+        List resp = new ArrayList();
+        if (geoms == null || geoms.size() == 0) {
+            return resp;
+        }
+        
+        Object item = null;
+        Iterator iter = geoms.iterator();
+        while (iter.hasNext()) {
+            item = iter.next();
+            if (item instanceof Curve || item instanceof Surface
+                || item instanceof MultiCurve || item instanceof MultiSurface) {
+                resp.add(item);
+            }
+        }
+        return resp;
+    }        
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/PixelSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/PixelSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/PixelSnapper.java	(revision 42196)
@@ -0,0 +1,130 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.Color;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperRaster;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+public class PixelSnapper extends AbstractSnapper implements ISnapperRaster {
+	private Color refColor = Color.BLACK;
+	private int tolColorR = 100;
+	private int tolColorG = 100;
+	private int tolColorB = 100;
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapperRaster#getSnapPoint(java.awt.image.BufferedImage, java.awt.geom.Point2D, double, java.awt.geom.Point2D)
+	 */
+	public Point2D getSnapPoint(MapControl mapControl, Point2D point,
+			double mapTolerance, Point2D lastPoint) {
+		// Miramos dentro del rect�ngulo que define la tolerancia
+		// y nos quedamos con el pixel que m�s se acerca al que buscamos
+		BufferedImage img = mapControl.getImage();
+		ViewPort vp = mapControl.getViewPort();
+		Point2D pPixel = vp.fromMapPoint(point);
+		int xPixel = (int) pPixel.getX();
+		int yPixel = (int) pPixel.getY();
+//		int centerRGB = img.getRGB(xPixel, yPixel);
+		int centerRGB = refColor.getRGB();
+		double x1 = ColorModel.getRGBdefault().getRed(centerRGB);
+		double y1 = ColorModel.getRGBdefault().getGreen(centerRGB);
+		double z1 = ColorModel.getRGBdefault().getBlue(centerRGB);
+		Coordinate c = new Coordinate(x1, y1, z1);
+
+		int half = vp.fromMapDistance(mapTolerance) / 2;
+		double minDistColor = Double.MAX_VALUE;
+		int xSnapped = -1;
+		int ySnapped = -1;
+		int fromX =xPixel -half;
+		if (fromX <0) fromX = 0;
+		int fromY =yPixel -half;
+		if (fromY <0) fromY = 0;
+
+		int toX =xPixel + half;
+		if (toX > vp.getImageWidth()) toX = vp.getImageWidth();
+		int toY =yPixel + half;
+		if (toY > vp.getImageHeight()) toY = vp.getImageHeight();
+
+		for (int testX= fromX; testX< toX; testX++)
+		{
+			for (int testY= fromY; testY< toY; testY++)
+			{
+				// System.out.println("Testing: " + testX + ", " + testY);
+				int testRGB = img.getRGB(testX, testY);
+				// TODO: Aqu� deber�amos trabajar con un ColorSpace y usar toCIEXYZ. Por ahora lo calculo con RGB.
+				int r = ColorModel.getRGBdefault().getRed(testRGB);
+				int g = ColorModel.getRGBdefault().getGreen(testRGB);
+				int b = ColorModel.getRGBdefault().getBlue(testRGB);
+				Coordinate cAux = new Coordinate(r, g, b);
+
+				if (Math.abs(r-x1) < tolColorR)
+					if (Math.abs(g-y1) < tolColorG)
+						if (Math.abs(b-z1) < tolColorB)
+						{
+							double dist = c.distance(cAux);
+							if (dist < minDistColor)
+							{
+								minDistColor = dist;
+								xSnapped = testX;
+								ySnapped = testY;
+							}
+						}
+			}
+		}
+		Point2D pResul = null;
+		if (xSnapped != -1)
+		{
+			pResul = vp.toMapPoint(xSnapped, ySnapped);
+		}
+		return pResul;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+	 */
+	public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+		primitivesDrawer.setColor(getColor());
+		int half = getSizePixels() / 2;
+		primitivesDrawer.drawOval((int) (pPixels.getX() - half),
+				(int) (pPixels.getY() - half),
+				getSizePixels(), getSizePixels());
+	}
+
+	public String getToolTipText() {
+		return Messages.getText("Pixel_point");
+	}
+
+}
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/CentralPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/CentralPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/CentralPointSnapper.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.CenterHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Central point snapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class CentralPointSnapper extends AbstractSnapper
+    implements ISnapperVectorial {
+	/* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getSnapPoint(Point2D point,
+     * IGeometry geom,double tolerance, Point2D lastPointEntered)
+     */
+	public Point2D getSnapPoint(Point2D point, Geometry geom,
+        double tolerance, Point2D lastPointEntered) {
+        Point2D resul = null;
+
+        Handler[] handlers = geom.getHandlers(Geometry.SELECTHANDLER);
+
+        double minDist = tolerance;
+
+        for (int j = 0; j < handlers.length; j++) {
+            if (handlers[j] instanceof CenterHandler) {
+                Point2D handlerPoint = handlers[j].getPoint();
+                double dist = handlerPoint.distance(point);
+
+                if ((dist < minDist)) {
+                    resul = handlerPoint;
+                    minDist = dist;
+                }
+            }
+        }
+
+        return resul;
+    }
+	/* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getToolTipText()
+     */
+    public String getToolTipText() {
+        return Messages.getText("Central_point");
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+     */
+    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+    	primitivesDrawer.setColor(getColor());
+
+        int half = getSizePixels() / 2;
+        primitivesDrawer.drawOval((int) (pPixels.getX() - half),
+            (int) (pPixels.getY() - half), getSizePixels(), getSizePixels());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/FinalPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/FinalPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/FinalPointSnapper.java	(revision 42196)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+
+public class FinalPointSnapper extends AbstractSnapper implements ISnapperVectorial {
+	public Point2D getSnapPoint(Point2D point, Geometry geom, double tolerance, Point2D lastPointEntered) {
+		Point2D resul = null;
+		Handler[] handlers = geom.getHandlers(Geometry.SELECTHANDLER);
+		//		Point2D initPoint=handlers[0].getPoint();
+		//		Point2D endPoint=handlers[handlers.length-1].getPoint();
+		//		if (initPoint.equals(endPoint))
+		//			return resul;
+
+		double minDist = tolerance;
+		//		double dist = initPoint.distance(point);
+		//		if (dist < minDist) {
+		//			resul = initPoint;
+		//			minDist = dist;
+		//		}
+		//
+		//		dist = endPoint.distance(point);
+		//		if (dist < minDist) {
+		//			resul = endPoint;
+		//		}
+
+		for (int j = 0; j < handlers.length; j++) {
+			Point2D handlerPoint = handlers[j].getPoint();
+			double dist = handlerPoint.distance(point);
+			if ((dist < minDist)) {
+				resul = handlerPoint;
+				minDist = dist;
+			}
+		}
+
+		return resul;
+	}
+
+	public String getToolTipText() {
+	    return Messages.getText("Final_point");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+	 */
+	public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+		primitivesDrawer.setColor(getColor());
+
+		int half = getSizePixels() / 2;
+		primitivesDrawer.drawRect((int) (pPixels.getX() - half),
+				(int) (pPixels.getY() - half),
+				getSizePixels(), getSizePixels());
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/PerpendicularPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/PerpendicularPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/PerpendicularPointSnapper.java	(revision 42196)
@@ -0,0 +1,153 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.LineSegment;
+
+
+/**
+ * Perpendicular point snapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PerpendicularPointSnapper extends AbstractSnapper
+    implements ISnapperVectorial {
+	/* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getSnapPoint(Point2D point,
+     * IGeometry geom,double tolerance, Point2D lastPointEntered)
+     */
+    public Point2D getSnapPoint(Point2D point, Geometry geom,
+        double tolerance, Point2D lastPointEntered) {
+        Point2D resul = null;
+        Coordinate c = new Coordinate(point.getX(), point.getY());
+
+        if (lastPointEntered == null) {
+            return null;
+        }
+
+        Coordinate cLastPoint = new Coordinate(lastPointEntered.getX(),
+                lastPointEntered.getY());
+        PathIterator theIterator = geom.getPathIterator(null,
+                geomManager.getFlatness()); //polyLine.getPathIterator(null, flatness);
+        double[] theData = new double[6];
+        double minDist = tolerance;
+        Coordinate from = null;
+        Coordinate first = null;
+
+        while (!theIterator.isDone()) {
+            //while not done
+            int theType = theIterator.currentSegment(theData);
+
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                from = new Coordinate(theData[0], theData[1]);
+                first = from;
+
+                break;
+
+            case PathIterator.SEG_LINETO:
+
+                // System.out.println("SEG_LINETO");
+                Coordinate to = new Coordinate(theData[0], theData[1]);
+                LineSegment line = new LineSegment(from, to);
+                Coordinate closestPoint = line.closestPoint(cLastPoint);
+                double dist = c.distance(closestPoint);
+
+                if (!(line.getCoordinate(0).equals2D(closestPoint) ||
+                        line.getCoordinate(1).equals2D(closestPoint))) {
+                    if ((dist < minDist)) {
+                        resul = new Point2D.Double(closestPoint.x,
+                                closestPoint.y);
+                        minDist = dist;
+                    }
+                }
+
+                from = to;
+
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                line = new LineSegment(from, first);
+                closestPoint = line.closestPoint(cLastPoint);
+                dist = c.distance(closestPoint);
+
+                if (!(line.getCoordinate(0).equals2D(closestPoint) ||
+                        line.getCoordinate(1).equals2D(closestPoint))) {
+                    if ((dist < minDist)) {
+                        resul = new Point2D.Double(closestPoint.x,
+                                closestPoint.y);
+                        minDist = dist;
+                    }
+                }
+
+                from = first;
+
+                break;
+            } //end switch
+
+            theIterator.next();
+        }
+
+        return resul;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getToolTipText()
+     */
+    public String getToolTipText() {
+        return Messages.getText("Perpendicular_point");
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+     */
+    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+    	primitivesDrawer.setColor(getColor());
+
+        int half = getSizePixels() / 2;
+        int x1 = (int) (pPixels.getX() - half);
+        int x2 = (int) (pPixels.getX() + half);
+        int x3 = (int) pPixels.getX();
+        int y1 = (int) (pPixels.getY() - half);
+        int y2 = (int) (pPixels.getY() + half);
+        int y3 = (int) pPixels.getY();
+
+        primitivesDrawer.drawLine(x1, y2, x2, y2);
+        primitivesDrawer.drawLine(x1, y2, x1, y1);
+        primitivesDrawer.drawLine(x1, y3, x3, y3);
+        primitivesDrawer.drawLine(x3, y3, x3, y2);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/QuadrantPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/QuadrantPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/QuadrantPointSnapper.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.CuadrantHandler;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Quadrant point snapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class QuadrantPointSnapper extends AbstractSnapper
+    implements ISnapperVectorial {
+	/* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getSnapPoint(Point2D point,
+     * IGeometry geom,double tolerance, Point2D lastPointEntered)
+     */
+    public Point2D getSnapPoint(Point2D point, Geometry geom,
+        double tolerance, Point2D lastPointEntered) {
+        Point2D resul = null;
+
+        Handler[] handlers = geom.getHandlers(Geometry.SELECTHANDLER);
+
+        double minDist = tolerance;
+
+        for (int j = 0; j < handlers.length; j++) {
+            if (handlers[j] instanceof CuadrantHandler) {
+                Point2D handlerPoint = handlers[j].getPoint();
+                double dist = handlerPoint.distance(point);
+
+                if ((dist < minDist)) {
+                    resul = handlerPoint;
+                    minDist = dist;
+                }
+            }
+        }
+
+        return resul;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getToolTipText()
+     */
+    public String getToolTipText() {
+        return Messages.getText("Quadrant_point");
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#draw(java.awt.Graphics, java.awt.geom.Point2D)
+     */
+    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+    	primitivesDrawer.setColor(getColor());
+
+        int half = getSizePixels() / 2;
+        int x1 = (int) (pPixels.getX() - half);
+        int x2 = (int) (pPixels.getX() + half);
+        int x3 = (int) pPixels.getX();
+        int y1 = (int) (pPixels.getY() - half);
+        int y2 = (int) (pPixels.getY() + half);
+        int y3 = (int) pPixels.getY();
+
+        primitivesDrawer.drawLine(x1, y3, x3, y1);
+        primitivesDrawer.drawLine(x1, y3, x3, y2);
+        primitivesDrawer.drawLine(x2, y3, x3, y1);
+        primitivesDrawer.drawLine(x2, y3, x3, y2);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/MediumPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/MediumPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/MediumPointSnapper.java	(revision 42196)
@@ -0,0 +1,146 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.primitive.Spline;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+
+/**
+ * Medium point snapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MediumPointSnapper extends AbstractSnapper
+    implements ISnapperVectorial {
+	/* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getSnapPoint(Point2D point,
+     * IGeometry geom,double tolerance, Point2D lastPointEntered)
+     */
+    public Point2D getSnapPoint(Point2D point, Geometry geom,
+        double tolerance, Point2D lastPointEntered) {
+        if (geom instanceof Circle ||
+                geom instanceof Arc ||
+                geom instanceof Ellipse ||
+                geom instanceof Spline) {
+            return null;
+        }
+
+        Point2D resul = null;
+        Coordinate c = new Coordinate(point.getX(), point.getY());
+
+        PathIterator theIterator = geom.getPathIterator(null,
+                geomManager.getFlatness()); //polyLine.getPathIterator(null, flatness);
+        double[] theData = new double[6];
+        double minDist = tolerance;
+        Coordinate from = null;
+        Coordinate first = null;
+
+        while (!theIterator.isDone()) {
+            //while not done
+            int theType = theIterator.currentSegment(theData);
+
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                from = new Coordinate(theData[0], theData[1]);
+                first = from;
+
+                break;
+
+            case PathIterator.SEG_LINETO:
+
+                Coordinate to = new Coordinate(theData[0], theData[1]);
+                Coordinate mediumPoint = new Coordinate((to.x + from.x) / 2,
+                        (to.y + from.y) / 2);
+                double dist = c.distance(mediumPoint);
+
+                if ((dist < minDist)) {
+                    resul = new Point2D.Double(mediumPoint.x, mediumPoint.y);
+                    minDist = dist;
+                }
+
+                from = to;
+
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                mediumPoint = new Coordinate((first.x + from.x) / 2,
+                        (first.y + from.y) / 2);
+                dist = c.distance(mediumPoint);
+
+                if ((dist < minDist)) {
+                    resul = new Point2D.Double(mediumPoint.x, mediumPoint.y);
+                    minDist = dist;
+                }
+
+                from = first;
+
+                break;
+            } //end switch
+
+            theIterator.next();
+        }
+
+        return resul;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getToolTipText()
+     */
+    public String getToolTipText() {
+        return Messages.getText("Medium_point");
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+     */
+    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+    	primitivesDrawer.setColor(getColor());
+
+        int half = getSizePixels() / 2;
+        int x1 = (int) (pPixels.getX() - half);
+        int x2 = (int) (pPixels.getX() + half);
+        int x3 = (int) pPixels.getX();
+        int y1 = (int) (pPixels.getY() - half);
+        int y2 = (int) (pPixels.getY() + half);
+
+        primitivesDrawer.drawLine(x1, y2, x2, y2);
+        primitivesDrawer.drawLine(x1, y2, x3, y1);
+        primitivesDrawer.drawLine(x2, y2, x3, y1);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/TangentPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/TangentPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/TangentPointSnapper.java	(revision 42196)
@@ -0,0 +1,145 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.primitive.Spline;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.LineSegment;
+
+
+/**
+ * Tangent point snapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class TangentPointSnapper extends AbstractSnapper
+    implements ISnapperVectorial {
+	/* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getSnapPoint(Point2D point,
+     * IGeometry geom,double tolerance, Point2D lastPointEntered)
+     */
+    public Point2D getSnapPoint(Point2D point, Geometry geom,
+        double tolerance, Point2D lastPointEntered) {
+        if (!(geom instanceof Circle ||
+                geom instanceof Arc ||
+                geom instanceof Ellipse ||
+                geom instanceof Spline)) {
+            return null;
+        }
+
+        Point2D resul = null;
+        Coordinate c = new Coordinate(point.getX(), point.getY());
+
+        PathIterator theIterator = geom.getPathIterator(null,
+                geomManager.getFlatness());
+        double[] theData = new double[6];
+        double minDist = tolerance;
+        Coordinate from = null;
+        Coordinate first = null;
+
+        while (!theIterator.isDone()) {
+            //while not done
+            int theType = theIterator.currentSegment(theData);
+
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                from = new Coordinate(theData[0], theData[1]);
+                first = from;
+
+                break;
+
+            case PathIterator.SEG_LINETO:
+
+                // System.out.println("SEG_LINETO");
+                Coordinate to = new Coordinate(theData[0], theData[1]);
+                LineSegment line = new LineSegment(from, to);
+                Coordinate closestPoint = line.closestPoint(c);
+                double dist = c.distance(closestPoint);
+
+                if ((dist < minDist)) {
+                    resul = new Point2D.Double(closestPoint.x, closestPoint.y);
+                    minDist = dist;
+                }
+
+                from = to;
+
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                line = new LineSegment(from, first);
+                closestPoint = line.closestPoint(c);
+                dist = c.distance(closestPoint);
+
+                if ((dist < minDist)) {
+                    resul = new Point2D.Double(closestPoint.x, closestPoint.y);
+                    minDist = dist;
+                }
+
+                from = first;
+
+                break;
+            } //end switch
+
+            theIterator.next();
+        }
+
+        return resul;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getToolTipText()
+     */
+    public String getToolTipText() {
+        return Messages.getText("Tangent_point");
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+     */
+    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+    	primitivesDrawer.setColor(getColor());
+
+        int half = getSizePixels() / 2;
+        primitivesDrawer.drawLine((int) (pPixels.getX() - half),
+            (int) (pPixels.getY() - half), (int) (pPixels.getX() + half),
+            (int) (pPixels.getY() - half));
+        primitivesDrawer.drawOval((int) (pPixels.getX() - half),
+            (int) (pPixels.getY() - half), getSizePixels(), getSizePixels());
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/NearestPointSnapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/NearestPointSnapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/snappers/NearestPointSnapper.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
+
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperVectorial;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
+import org.gvsig.i18n.Messages;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.LineSegment;
+
+public class NearestPointSnapper extends AbstractSnapper implements ISnapperVectorial {
+	public Point2D getSnapPoint(Point2D point, Geometry geom, double tolerance, Point2D lastPointEntered) {
+		Point2D resul = null;
+		Coordinate c = new Coordinate(point.getX(), point.getY());
+
+		PathIterator theIterator = geom.getPathIterator(null, geomManager.getFlatness()); //polyLine.getPathIterator(null, flatness);
+		double[] theData = new double[6];
+		double minDist = tolerance;
+		Coordinate from = null, first = null;
+		while (!theIterator.isDone()) {
+			//while not done
+			int theType = theIterator.currentSegment(theData);
+
+			switch (theType) {
+				case PathIterator.SEG_MOVETO:
+					from = new Coordinate(theData[0], theData[1]);
+					first = from;
+					break;
+
+				case PathIterator.SEG_LINETO:
+
+					// System.out.println("SEG_LINETO");
+					Coordinate to = new Coordinate(theData[0], theData[1]);
+					LineSegment line = new LineSegment(from, to);
+					Coordinate closestPoint = line.closestPoint(c);
+					double dist = c.distance(closestPoint);
+					if ((dist < minDist)) {
+						resul = new Point2D.Double(closestPoint.x, closestPoint.y);
+						minDist = dist;
+					}
+
+					from = to;
+					break;
+				case PathIterator.SEG_CLOSE:
+					line = new LineSegment(from, first);
+					closestPoint = line.closestPoint(c);
+					dist = c.distance(closestPoint);
+					if ((dist < minDist)) {
+						resul = new Point2D.Double(closestPoint.x, closestPoint.y);
+						minDist = dist;
+					}
+
+					from = first;
+					break;
+
+
+			} //end switch
+
+			theIterator.next();
+		}
+
+		return resul;
+	}
+
+	public String getToolTipText() {
+		return Messages.getText("Nearest_point");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
+	 */
+	public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
+		primitivesDrawer.setColor(getColor());
+		int half = getSizePixels() / 2;
+		int x1 = (int) (pPixels.getX() - half);
+		int x2 = (int) (pPixels.getX() + half);
+		int y1 = (int) (pPixels.getY() - half);
+		int y2 = (int) (pPixels.getY() + half);
+
+		primitivesDrawer.drawLine(x1, y1, x2, y1); // abajo
+		primitivesDrawer.drawLine(x1, y2, x2, y2); // arriba
+		primitivesDrawer.drawLine(x1, y1, x2, y2); // abajo - arriba
+		primitivesDrawer.drawLine(x1, y2, x2, y1); // arriba - abajo
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/Snapping.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/Snapping.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/Snapping.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping;
+
+
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.CentralPointSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.FinalPointSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.IntersectionPointSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.MediumPointSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.NearestPointSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.PerpendicularPointSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.PixelSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.QuadrantPointSnapper;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.TangentPointSnapper;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.impl.DefaultMapControlLibrary;
+import org.gvsig.fmap.mapcontrol.impl.DefaultMapControlManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Snapping {
+    /**
+     * DOCUMENT ME!
+     */
+    public static void register() {    	//TODO delete when the system to load libraries is finished
+    	if (MapControlLocator.getMapControlManager() == null){
+    		MapControlLocator.registerMapControlManager(DefaultMapControlManager.class);
+    	}
+    	MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+    	    	
+    	mapControlManager.registerSnapper("FinalPointSnapper", FinalPointSnapper.class);
+    	mapControlManager.registerSnapper("NearestPointSnapper", NearestPointSnapper.class);
+    	mapControlManager.registerSnapper("PixelSnapper", PixelSnapper.class);
+    	mapControlManager.registerSnapper("CentralPointSnapper", CentralPointSnapper.class);
+    	mapControlManager.registerSnapper("QuadrantPointSnapper", QuadrantPointSnapper.class);
+
+    	// mapControlManager.registerSnapper("InsertPointSnapper", new InsertPointSnapper.class);
+    	
+        mapControlManager.registerSnapper("IntersectionPointSnapper", IntersectionPointSnapper.class);
+    	mapControlManager.registerSnapper("MediumPointSnapper", MediumPointSnapper.class);
+    	mapControlManager.registerSnapper("PerpendicularPointSnapper", PerpendicularPointSnapper.class);
+    	mapControlManager.registerSnapper("TangentPointSnapper", TangentPointSnapper.class);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/PropertySnapCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/PropertySnapCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/PropertySnapCellEditor.java	(revision 42196)
@@ -0,0 +1,147 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.JButton;
+import javax.swing.JTable;
+import javax.swing.event.CellEditorListener;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+
+
+public class PropertySnapCellEditor extends JButton implements TableCellEditor{
+	private int row;
+	private IWindow panel;
+	private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+	
+	public PropertySnapCellEditor() {		
+		this.addMouseListener(new MouseListener() {
+
+			public void mouseClicked(MouseEvent e) {
+				if (e.getClickCount()==2) {
+					if (panel!=null)
+						openConfigurePanel();
+				}
+			}
+
+			public void mouseEntered(MouseEvent e) {
+				// TODO Auto-generated method stub
+
+			}
+
+			public void mouseExited(MouseEvent e) {
+				// TODO Auto-generated method stub
+
+			}
+
+			public void mousePressed(MouseEvent e) {
+				// TODO Auto-generated method stub
+
+			}
+
+			public void mouseReleased(MouseEvent e) {
+				// TODO Auto-generated method stub
+
+			}
+
+		});
+	}
+//	class WinConfigure extends JPanel implements IWindow {
+//
+//		private WindowInfo wi=null;
+//
+//		public WindowInfo getWindowInfo() {
+//			if (wi==null) {
+//				wi=new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
+//				wi.setWidth(panel.getWidth());
+//				wi.setHeight(panel.getHeight());
+//				wi.setTitle(PluginServices.getText(this,"propiedades"));
+//			}
+//			return wi;
+//		}
+//	}
+	private void openConfigurePanel() {
+		//IWindow window=new WinConfigure();
+		((DefaultConfigurePanel)panel).setSnapper(mapControlManager.getSnapperAt(row));
+		PluginServices.getMDIManager().addWindow(panel);
+	}
+	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+		this.row=row;
+		panel=(IWindow)(mapControlManager.getSnapperAt(row)).getConfigurator();
+		if (panel!=null) {
+			this.setEnabled(true);
+		}else {
+			this.setEnabled(false);
+			this.setBackground(Color.white);
+		}
+		return this;
+	}
+
+	public void cancelCellEditing() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean stopCellEditing() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public Object getCellEditorValue() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean isCellEditable(EventObject anEvent) {
+		return true;
+	}
+
+	public boolean shouldSelectCell(EventObject anEvent) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void addCellEditorListener(CellEditorListener l) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void removeCellEditorListener(CellEditorListener l) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/PropertySnapCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/PropertySnapCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/PropertySnapCellRenderer.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+
+
+public class PropertySnapCellRenderer extends JButton implements TableCellRenderer{
+	private JPanel panel;
+	private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+	
+	public PropertySnapCellRenderer() {
+		this.setText("...");
+	}
+	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+		panel=(JPanel)(mapControlManager.getSnapperAt(row)).getConfigurator();
+		if (panel!=null) {
+			this.setEnabled(true);
+		}else {
+			this.setEnabled(false);
+			this.setBackground(Color.white);
+		}
+		return this;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/testDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/testDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/testDialog.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.gui;
+
+import java.util.ArrayList;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+
+import org.gvsig.app.project.documents.view.toolListeners.snapping.snappers.FinalPointSnapper;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+public class testDialog {
+	public static void main(String[] args) {
+
+		try {
+			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+		} catch (ClassNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (InstantiationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (UnsupportedLookAndFeelException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		JDialog dlg = new JDialog();
+
+		ArrayList list = new ArrayList();
+		for (int i=0; i < 20; i++)
+			list.add(new FinalPointSnapper());
+		SnapConfig panel = new SnapConfig(new MapControl());
+		panel.setSnappers();
+		Action act = new AbstractAction(){
+			public void actionPerformed(java.awt.event.ActionEvent arg0) {
+				System.out.println("HOla");
+//				HashPrintRequestAttributeSet att = new HashPrintRequestAttributeSet();
+//
+//				PrinterJob job = PrinterJob.getPrinterJob();
+//				PageFormat defaulFormat = job.defaultPage();
+//				// PageFormat selectedFormat = job.pageDialog(defaulFormat);
+//				Paper paper = new Paper();
+//				paper.setSize(MediaSize.ISO.A5.getX(MediaSize.INCH),MediaSize.ISO.A5.getY(MediaSize.INCH));
+//				defaulFormat.setPaper(paper);
+//				job.defaultPage(defaulFormat);
+//				if (job.printDialog()) {
+//					// System.out.println(job.)
+//				}
+			};
+		};
+		JButton btnPrint = new JButton(act);
+
+		dlg.getContentPane().add(panel);
+		// dlg.getContentPane().add(btnPrint);
+		// dlg.getContentPane().setSize(panel.getSize());
+		dlg.pack();
+		dlg.show(true);
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/DefaultConfigurePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/DefaultConfigurePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/DefaultConfigurePanel.java	(revision 42196)
@@ -0,0 +1,128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.gui;
+
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+
+
+public class DefaultConfigurePanel extends JPanel implements IWindow {
+	private ISnapper snapper;
+	private JLabel lblColor = null;
+	private JButton bColor = null;
+	private WindowInfo wi=null;
+	private AcceptCancelPanel acceptCancelPanel;
+	/**
+	 * This is the default constructor
+	 */
+	public DefaultConfigurePanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		lblColor = new JLabel();
+		lblColor.setText("color");
+		this.setSize(269, 91);
+		this.add(lblColor, null);
+		this.add(getBColor(), null);
+		this.add(getPAcceptCancel(),null);
+	}
+	public void setSnapper(ISnapper snapper) {
+		this.snapper=snapper;
+		//((AbstractSnapper)this.snapper).setColor(Color.blue);
+	}
+
+	/**
+	 * This method initializes bColor
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBColor() {
+		if (bColor == null) {
+			bColor = new JButton();
+			bColor.setText("...");
+		}
+		return bColor;
+	}
+
+	protected AcceptCancelPanel getPAcceptCancel() {
+		if (acceptCancelPanel==null) {
+			ActionListener okAction = new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+
+					if (PluginServices.getMainFrame() == null) {
+                        ((JDialog) (getParent().getParent().getParent()
+                                .getParent())).dispose();
+                    } else {
+                        PluginServices.getMDIManager().closeWindow(DefaultConfigurePanel.this);
+                    }
+				}
+			};
+			ActionListener cancelAction = new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+                    if (PluginServices.getMainFrame() != null) {
+                        PluginServices.getMDIManager().closeWindow(DefaultConfigurePanel.this);
+                    } else {
+                        ((JDialog) (getParent().getParent().getParent()
+                                        .getParent())).dispose();
+                    }
+				}
+			};
+			acceptCancelPanel=new AcceptCancelPanel(okAction,cancelAction);
+
+		}
+		return acceptCancelPanel;
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (wi==null) {
+			wi=new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
+			wi.setWidth(this.getWidth());
+			wi.setHeight(this.getHeight());
+			wi.setTitle(PluginServices.getText(this,"propiedades"));
+		}
+		return wi;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/DrawSnapCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/DrawSnapCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/DrawSnapCellRenderer.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.geom.Point2D;
+
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
+import org.gvsig.fmap.mapcontrol.impl.DefaultPrimitivesDrawer;
+
+/**
+ * Cell Renderer del s�mbolo de cada uno de los ISnapper.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class DrawSnapCellRenderer extends JPanel implements TableCellRenderer {
+	private static Point2D position = new Point2D.Double(7,7);
+	private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+	private PrimitivesDrawer primitivesDrawer = new DefaultPrimitivesDrawer();
+	
+	private int row;
+	public DrawSnapCellRenderer() {
+		this.setBackground(Color.white);
+	}
+	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+		this.row=row;
+		return this;
+	}
+	protected void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		
+		primitivesDrawer.setGraphics(g);
+		
+		(mapControlManager.getSnapperAt(row)).draw(primitivesDrawer, position);
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/SnapConfig.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/SnapConfig.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/snapping/gui/SnapConfig.java	(revision 42196)
@@ -0,0 +1,456 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners.snapping.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseListener;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListCellRenderer;
+import javax.swing.border.EmptyBorder;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * @author fjp
+ *
+ * Necesitamos un sitio donde est�n registrados todos los snappers que
+ * se pueden usar. ExtensionPoints es el sitio adecuado.
+ * Este di�logo recuperar� esa lista para que el usuario marque los
+ * snappers con los que desea trabajar.
+ */
+public class SnapConfig extends JPanel {
+
+	/**
+     *
+     */
+    private static final long serialVersionUID = 3539711525292306297L;
+    private JCheckBox jChkBoxRefentActive = null;
+	private JTable jListSnappers = null;
+	private JPanel jPanel = null;
+	private JScrollPane jScrollPane = null;
+    private JPanel jPanelTolerance = null;
+    private JTextField jTxtTolerance = null;
+    private JLabel jLabelTolerance = null;
+    private JLabel jLabelTolerance1 = null;
+
+	private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+	/**
+	 * @author fjp
+	 * primera columna editable con un check box para habilitar/deshabilitar el snapper
+	 * segunda columna con el s�mbolo del snapper
+	 * tercera con el tooltip
+	 * cuarta con un bot�n para configurar el snapper si es necesario.
+	 */
+	class MyTableModel extends AbstractTableModel {
+
+		/**
+         *
+         */
+        private static final long serialVersionUID = 6262877908586753756L;
+
+        public MyTableModel()
+		{
+
+		}
+
+		public int getColumnCount() {
+			return 5;
+		}
+
+		public int getRowCount() {
+			return mapControlManager.getSnapperCount();
+		}
+
+		public boolean isCellEditable(int rowIndex, int columnIndex) {
+			if (columnIndex == 0 || columnIndex == 3)
+				return true;
+			return false;
+		}
+
+		public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+			ISnapper snap = mapControlManager.getSnapperAt(rowIndex);
+			switch (columnIndex)
+			{
+			case 0://CheckBox
+				snap.setEnabled(((Boolean)aValue).booleanValue());
+				break;
+			case 3://Prioridad
+				snap.setPriority(((Integer)aValue).intValue());
+				break;
+			}
+		}
+
+		public Object getValueAt(int rowIndex, int columnIndex) {
+			ISnapper snap = mapControlManager.getSnapperAt(rowIndex);
+			switch (columnIndex)
+			{
+			case 0:
+				return new Boolean(snap.isEnabled());
+			case 1:
+				return snap.getClass().getName();
+			case 2:
+				return snap.getToolTipText();
+			case 3:
+				return new Integer(snap.getPriority());
+			case 4:
+				return new JButton();
+			}
+			return null;
+		}
+
+		public Class getColumnClass(int columnIndex) {
+			switch (columnIndex)
+			{
+			case 0:
+				return Boolean.class;
+			case 1:
+				return String.class;
+			case 2:
+				return String.class;
+			case 3:
+				return Integer.class;
+			case 4:
+				return JButton.class;
+			}
+			return null;
+		}
+
+		public String getColumnName(int columnIndex) {
+			switch (columnIndex){
+			case 0:
+				return PluginServices.getText(this,"aplicar");
+			case 1:
+				return PluginServices.getText(this,"simbolo");
+			case 2:
+				return PluginServices.getText(this,"tipo");
+			case 3:
+				return PluginServices.getText(this,"prioridad");
+			case 4:
+				return PluginServices.getText(this,"propiedades");
+			}
+			return null;
+		}
+
+	}
+
+	class MyCellRenderer extends JCheckBox implements ListCellRenderer {
+
+		// This is the only method defined by ListCellRenderer.
+		// We just reconfigure the JLabel each time we're called.
+
+		public Component getListCellRendererComponent(
+				JList list,
+				Object value,            // value to display
+				int index,               // cell index
+				boolean isSelected,      // is the cell selected
+				boolean cellHasFocus)    // the list and the cell have the focus
+		{
+			ISnapper snapper = (ISnapper) value;
+			String s = snapper.getToolTipText();
+			setText(s);
+
+			if (isSelected) {
+				setBackground(list.getSelectionBackground());
+				setForeground(list.getSelectionForeground());
+			}
+			else {
+				setBackground(list.getBackground());
+				setForeground(list.getForeground());
+			}
+			setEnabled(list.isEnabled());
+			setFont(list.getFont());
+			setOpaque(true);
+			return this;
+		}
+
+		public void doClick() {
+			super.doClick();
+			System.out.println("Click");
+		}
+
+
+	}
+
+
+    //FIXME: sobra el par�metro mc
+	/**
+	 * This method initializes
+	 *
+	 */
+	public SnapConfig(MapControl mc) {
+		super();
+//		this.mc=mc;
+		initialize();
+	}
+
+
+	//FIXME: sobra el par�metro mc
+	/**
+	 * This constructor allows an aditional parameter
+	 * which will be notified of the mouse events
+	 * in the relevant components of this panel
+	 *
+	 * @param mc
+	 * @param mouseListener the mouse listener to be notified
+	 */
+	public SnapConfig(MapControl mc, MouseListener mouseListener) {
+	    this(mc);
+	    getJListSnappers().addMouseListener(mouseListener);
+	    getJChkBoxRefentActive().addMouseListener(mouseListener);
+	}
+
+	   /**
+     * This constructor allows two additional parameters
+     * which will be notified of the mouse or key events
+     * in the relevant components of this panel
+     *
+     * @param mouseListener the mouse listener to be notified
+     * @param keyListener the key listener to be notified
+     */
+    public SnapConfig(MouseListener mouseListener, KeyListener keyListener) {
+        this(null, mouseListener);
+        getJTxtTolerance().addKeyListener(keyListener);
+    }
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+		this.setLayout(new BorderLayout());
+		this.setBorder(new EmptyBorder(10, 10, 10, 10));
+		this.setSize(new java.awt.Dimension(463,239));
+		this.setPreferredSize(new java.awt.Dimension(463,239));
+		//FIXME: crear un panel NORTH para meter estos los controles JChkBoxRefentActive y JPanelTolerance
+		this.add(getJChkBoxRefentActive(), BorderLayout.NORTH);
+		jLabelTolerance = new JLabel();
+		jLabelTolerance.setText(i18nManager.getTranslation("snap_tolerance"));
+		jLabelTolerance.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+		jLabelTolerance.setName("jLabel");
+		jLabelTolerance.setBounds(new java.awt.Rectangle(15, 8, 122, 15));
+		jLabelTolerance.setPreferredSize(new java.awt.Dimension(28, 20));
+		jLabelTolerance.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
+        jLabelTolerance1 = new JLabel();
+        jLabelTolerance1.setText(i18nManager.getTranslation("pixels"));
+        jLabelTolerance1.setBounds(new java.awt.Rectangle(195, 8, 207, 15));
+        jLabelTolerance1.setPreferredSize(new java.awt.Dimension(28, 20));
+        jLabelTolerance1.setName("jLabel1");
+        this.add(getJPanelTolerance(), BorderLayout.SOUTH);
+        this.add(getJPanel(), BorderLayout.CENTER);
+
+	}
+
+	/**
+	 * This method initializes jChkBoxRefentActive
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getJChkBoxRefentActive() {
+		if (jChkBoxRefentActive == null) {
+                        I18nManager i18nManager = ToolsLocator.getI18nManager();
+			jChkBoxRefentActive = new JCheckBox();
+			jChkBoxRefentActive.setText(i18nManager.getTranslation("activate_reference_to_objects"));
+			jChkBoxRefentActive.setBounds(new java.awt.Rectangle(26,10,418,23));
+		}
+		return jChkBoxRefentActive;
+	}
+
+	   /**
+     * This method initializes jTxtTolerance
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getJTxtTolerance() {
+        if (jTxtTolerance == null) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            if (jLabelTolerance == null) {
+                jLabelTolerance = new JLabel();
+                jLabelTolerance.setText(i18nManager
+                    .getTranslation("snap_tolerance"));
+                jLabelTolerance
+                    .setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+                jLabelTolerance.setName("jLabel");
+                jLabelTolerance
+                    .setBounds(new java.awt.Rectangle(15, 8, 122, 15));
+                jLabelTolerance
+                    .setPreferredSize(new java.awt.Dimension(28, 20));
+                jLabelTolerance
+                    .setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
+            }
+            if (jLabelTolerance1 == null) {
+                jLabelTolerance1 = new JLabel();
+                jLabelTolerance1.setText(i18nManager.getTranslation("pixels"));
+                jLabelTolerance1.setBounds(new java.awt.Rectangle(195, 8, 207,
+                    15));
+                jLabelTolerance1
+                    .setPreferredSize(new java.awt.Dimension(28, 20));
+                jLabelTolerance1.setName("jLabel1");
+            }
+
+            jTxtTolerance = new JTextField();
+            jTxtTolerance.setPreferredSize(new java.awt.Dimension(28, 20));
+            jTxtTolerance.setName("jTxtTolerance");
+            jTxtTolerance.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+            jTxtTolerance.setBounds(new java.awt.Rectangle(142, 8, 39, 15));
+        }
+        return jTxtTolerance;
+    }
+
+    /**
+     * This method initializes jPanelNord
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanelTolerance() {
+        if (jPanelTolerance == null) {
+            jPanelTolerance = new JPanel();
+            jPanelTolerance.setLayout(null);
+            jPanelTolerance
+                    .setComponentOrientation(java.awt.ComponentOrientation.UNKNOWN);
+            jPanelTolerance.setPreferredSize(new java.awt.Dimension(30, 30));
+            jPanelTolerance.add(jLabelTolerance, null);
+            jPanelTolerance.add(getJTxtTolerance(), null);
+            jPanelTolerance.add(jLabelTolerance1, null);
+
+        }
+        return jPanelTolerance;
+    }
+
+
+	/**
+	 * This method initializes jListSnappers
+	 *
+	 * @return javax.swing.JList
+	 */
+	private JTable getJListSnappers() {
+		if (jListSnappers == null) {
+			jListSnappers = new JTable();
+			// jListSnappers.setCellRenderer(new MyCellRenderer());
+		}
+		return jListSnappers;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.setLayout(new BorderLayout());
+			jPanel.setBorder(new EmptyBorder(5, 0, 0, 0));
+			jPanel.setBounds(new java.awt.Rectangle(19,40,423,181));
+			jPanel.add(getJScrollPane(), BorderLayout.CENTER);
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setBounds(new java.awt.Rectangle(9,9,402,163));
+			jScrollPane.setViewportView(getJListSnappers());
+		}
+		return jScrollPane;
+	}
+
+	public void setSnappers() {
+		MyTableModel listModel = new MyTableModel();
+		getJListSnappers().setModel(listModel);
+		TableColumn tc=getJListSnappers().getColumnModel().getColumn(0);
+		setUpSymbolColumn(getJListSnappers().getColumnModel().getColumn(1));
+		setUpPropertyColumn(getJListSnappers().getColumnModel().getColumn(4));
+		getJListSnappers().setCellSelectionEnabled(false);
+		tc.setMaxWidth(40);
+		tc.setMinWidth(20);
+	}
+	public TableModel getTableModel() {
+		return getJListSnappers().getModel();
+	}
+	public boolean applySnappers() {
+		return getJChkBoxRefentActive().isSelected();
+	}
+
+
+	public void selectSnappers() {
+		for (int i=0;i<mapControlManager.getSnapperCount();i++) {
+			getTableModel().setValueAt(mapControlManager.getSnapperAt(i).isEnabled(),i,0);
+		}
+
+	}
+
+	public Integer getSnapTolerance() {
+        return Integer.valueOf(getJTxtTolerance().getText());
+	}
+
+	public void setSnapTolerance(Integer snapTolerance) {
+	        getJTxtTolerance().setText(snapTolerance.toString());
+	    }
+
+	public void setApplySnappers(boolean applySnappers) {
+		getJChkBoxRefentActive().setSelected(applySnappers);
+	}
+
+	public void setUpSymbolColumn(TableColumn column) {
+		DrawSnapCellRenderer symbolCellRenderer = new DrawSnapCellRenderer();
+		column.setCellRenderer(symbolCellRenderer);
+	}
+	public void setUpPropertyColumn(TableColumn column) {
+
+		PropertySnapCellEditor propertyeditor = new PropertySnapCellEditor();
+		column.setCellEditor(propertyeditor);
+
+		PropertySnapCellRenderer renderer = new PropertySnapCellRenderer();
+		column.setCellRenderer(renderer);
+	}
+}
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/SnappingExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/SnappingExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/SnappingExtension.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.gui.preferencespage.GridPage;
+import org.gvsig.app.gui.preferencespage.SnapConfigPage;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.app.project.documents.view.gui.ViewSnappingPropertiesPageFactory;
+import org.gvsig.app.project.documents.view.toolListeners.snapping.Snapping;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+/**
+ * Extension for config the snapping
+ * @author fdiaz
+ *
+ */
+public class SnappingExtension extends Extension{
+
+    private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+    public void initialize() {
+        Snapping.register();
+
+        registerIcons();
+
+        for (int n = 0; n < mapControlManager.getSnapperCount(); n++) {
+            ISnapper snp = (ISnapper) mapControlManager.getSnapperAt(n);
+            String nameClass=snp.getClass().getName();
+            nameClass=nameClass.substring(nameClass.lastIndexOf('.')+1);
+            snp.setEnabled((Boolean)getPlugin().getPluginProperties().getDynValue("snapperActivated"+nameClass));
+            snp.setPriority((Integer)getPlugin().getPluginProperties().getDynValue("snapperPriority"+nameClass));
+        }
+
+        Integer snapTolerance =
+            (Integer) getPlugin().getPluginProperties().getDynValue("snapTolerance");
+        mapControlManager.setTolerance(snapTolerance.intValue());
+
+        Boolean applySnappers =
+            (Boolean) getPlugin().getPluginProperties().getDynValue("applySnappers");
+        //TODO: si se a�ade al MapControlManager para habilitar/deshabilitar de manera global los snappers activos, invocarlo aqu�
+//        mapControlManager.applySnappers(applySnappers);
+
+        PropertiesPageManager manager = MapControlLocator.getPropertiesPageManager();
+        manager.registerFactory(new ViewSnappingPropertiesPageFactory());
+
+    }
+
+	@Override
+	public void postInitialize() {
+        ExtensionPointManager extensionPoints =
+            ToolsLocator.getExtensionPointManager();
+        ExtensionPoint ep = extensionPoints.add("AplicationPreferences", "");
+        ep.append("Snapping", "", new SnapConfigPage());
+        ep.append("Grid", "", new GridPage());
+    }
+
+	private void registerIcons(){
+	    IconThemeHelper.registerIcon("preferences", "preferences-snapper", this);
+        IconThemeHelper.registerIcon("preferences", "grid-preferences", this);
+        IconThemeHelper.registerIcon("actions", "enable-snapping", this);
+        IconThemeHelper.registerIcon("actions", "disable-snapping", this);
+	}
+
+	public void execute(String actionCommand) {
+	}
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+    public boolean isVisible() {
+
+        org.gvsig.andami.ui.mdiManager.IWindow f =
+            PluginServices.getMDIManager().getActiveWindow();
+
+        if (f != null && f instanceof DefaultViewPanel) {
+            DefaultViewPanel vista = (DefaultViewPanel) f;
+            ViewDocument model = vista.getViewDocument();
+            MapContext mapa = model.getMapContext();
+
+            FLayers capas = mapa.getLayers();
+
+            int numActiveVectorial = 0;
+            int numActiveVectorialEditable = 0;
+
+            LayersIterator iter = new LayersIterator(capas);
+
+            FLayer capa;
+            while (iter.hasNext()) {
+                capa = iter.nextLayer();
+                if (capa instanceof FLyrVect && capa.isActive()
+                    && capa.isAvailable()) {
+                    numActiveVectorial++;
+                    if (capa.isEditing())
+                        numActiveVectorialEditable++;
+                }
+
+            }
+
+            if (numActiveVectorialEditable == 1 && numActiveVectorial == 1) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnapToGridExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnapToGridExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnapToGridExtension.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public class EnableSnapToGridExtension extends AbstractTogglePropertyExtension {
+
+
+    protected void doToggleValue(MapControl mc) {
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginManager.getPlugin(this);
+        DynObject pluginProperties = plugin.getPluginProperties();
+
+        boolean curr = mc.getGrid().isAdjustGrid();
+        mc.setAdjustGrid(!curr);
+        pluginProperties.setDynValue("adjustgrid", mc.getGrid().isAdjustGrid());
+        plugin.savePluginProperties();
+    }
+
+    protected String getActionCommand() {
+        return "show-grid-toggle-snap-to-grid";
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisableSnappingExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisableSnappingExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisableSnappingExtension.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public class DisableSnappingExtension extends Extension {
+
+    public void initialize() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void execute(String actionCommand) {
+        if (actionCommand.equals("edit-disable-snapping")) {
+
+            PluginsManager pluginManager = PluginsLocator.getManager();
+            PluginServices plugin = pluginManager.getPlugin(this);
+            DynObject pluginProperties = plugin.getPluginProperties();
+
+            IView view = getActiveView();
+            MapControl mc = view.getMapControl();
+            mc.setRefentEnabled(false);
+            pluginProperties.setDynValue("applySnappers", mc.isRefentEnabled());
+            plugin.savePluginProperties();
+            ApplicationLocator.getManager().refreshMenusAndToolBars();
+        }
+
+    }
+
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            MapControl mc = view.getMapControl();
+            if (mc != null) {
+                FLyrVect layer = getActiveLayer(view);
+                return (mc.isRefentEnabled() && layer != null && layer.isEditing());
+            }
+        }
+        return false;
+    }
+
+    public boolean isVisible() {
+        return isEnabled();
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+    private FLyrVect getActiveLayer(IView vista) {
+        if (vista != null) {
+            ViewDocument viewDocument = vista.getViewDocument();
+            FLayer[] actives =
+                viewDocument.getMapContext().getLayers().getActives();
+
+            if ((actives.length == 1) && (actives[0] instanceof FLyrVect)) {
+                return (FLyrVect) actives[0];
+            }
+        }
+        return null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnappingExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnappingExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnappingExtension.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public class EnableSnappingExtension extends Extension {
+
+    public void initialize() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void execute(String actionCommand) {
+        if (actionCommand.equals("edit-enable-snapping")) {
+
+            PluginsManager pluginManager = PluginsLocator.getManager();
+            PluginServices plugin = pluginManager.getPlugin(this);
+            DynObject pluginProperties = plugin.getPluginProperties();
+
+            IView view = getActiveView();
+            MapControl mc = view.getMapControl();
+            mc.setRefentEnabled(true);
+            pluginProperties.setDynValue("applySnappers", mc.isRefentEnabled());
+            plugin.savePluginProperties();
+            ApplicationLocator.getManager().refreshMenusAndToolBars();
+        }
+
+    }
+
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            MapControl mc = view.getMapControl();
+            if (mc != null) {
+                FLyrVect layer = getActiveLayer(view);
+                return (!mc.isRefentEnabled() && layer != null && layer.isEditing());
+            }
+        }
+        return false;
+    }
+
+    public boolean isVisible() {
+        return isEnabled();
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+    private FLyrVect getActiveLayer(IView vista) {
+        if (vista != null) {
+            ViewDocument viewDocument = vista.getViewDocument();
+            FLayer[] actives =
+                viewDocument.getMapContext().getLayers().getActives();
+
+            if ((actives.length == 1) && (actives[0] instanceof FLyrVect)) {
+                return (FLyrVect) actives[0];
+            }
+        }
+        return null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTogglePropertyExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTogglePropertyExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTogglePropertyExtension.java	(revision 42196)
@@ -0,0 +1,122 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public abstract class AbstractTogglePropertyExtension extends Extension {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(AbstractTogglePropertyExtension.class);
+
+    public void initialize() {
+    }
+
+    public void execute(String actionCommand) {
+
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        if (!(v instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel)) {
+            logger.info("Executing toggle extension when window is not view (?)");
+            return;
+        }
+
+        if (actionCommand.compareTo(getActionCommand()) != 0) {
+            logger.info("Executing toggle extension. Unexpected command: " + actionCommand
+                + ". Expected: " + getActionCommand());
+            return;
+        }
+
+        MapControl mc=((DefaultViewPanel)v).getMapControl();
+        doToggleValue(mc);
+    }
+
+
+    public boolean isEnabled() {
+        return isVisible();
+    }
+
+    public boolean isVisible() {
+        return optionMustBeAvailable();
+    }
+
+    // ========================
+
+    protected boolean optionMustBeAvailable() {
+
+        org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+        .getActiveWindow();
+
+        if (f != null && f instanceof DefaultViewPanel) {
+            DefaultViewPanel vista = (DefaultViewPanel) f;
+            ViewDocument model = vista.getViewDocument();
+            MapContext mapa = model.getMapContext();
+
+            FLayers capas = mapa.getLayers();
+
+            int numActiveVectorial = 0;
+            int numActiveVectorialEditable = 0;
+
+            LayersIterator iter = new LayersIterator(capas);
+
+            FLayer capa;
+            while (iter.hasNext()) {
+                capa = iter.nextLayer();
+                if (capa instanceof FLyrVect &&
+                        capa.isActive() && capa.isAvailable()) {
+                    numActiveVectorial++;
+                    if (capa.isEditing())
+                        numActiveVectorialEditable++;
+                }
+
+            }
+
+            if (numActiveVectorialEditable == 1 && numActiveVectorial == 1)
+                return true;
+        }
+
+        return false;
+    }
+
+    protected abstract String getActionCommand();
+    protected abstract void doToggleValue(MapControl mc);
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisplayGridExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisplayGridExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisplayGridExtension.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public class DisplayGridExtension extends AbstractTogglePropertyExtension {
+
+    protected void doToggleValue(MapControl mc) {
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginManager.getPlugin(this);
+        DynObject pluginProperties = plugin.getPluginProperties();
+
+        Boolean curr = mc.getGrid().isShowGrid();
+        mc.setGridVisibility(!curr);
+        pluginProperties.setDynValue("showgrid", mc.getGrid().isShowGrid());
+        plugin.savePluginProperties();
+    }
+
+    protected String getActionCommand() {
+        return "show-grid-toggle-display-grid";
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.snapping.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <description>This project has the geometries library for use in the application based  on the use of GeneralPath</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.snapping.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  <dependencies>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.andami</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      </dependency>
+      <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.control</artifactId>
+      </dependency>
+      <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.app.mainplugin</artifactId>
+      </dependency>
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.dependencies />
+      <gvsig.package.info.official>true</gvsig.package.info.official>
+      <gvsig.package.info.name>Snapping Support</gvsig.package.info.name>
+
+  </properties>
+
+</project>
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:47:00 CEST 2015
+buildNumber=10

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.snapping.app/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.snapping.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.snapping.app.mainplugin</module>
+  </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:55 CEST 2015
+buildNumber=2155

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+		<include>commons-collections:commons-collections</include>
+	  </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionPanel.java	(revision 42196)
@@ -0,0 +1,824 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.resource.db.DBParameters;
+import org.gvsig.utils.NotExistInXMLEntity;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.swing.JComboBox;
+import org.gvsig.utils.swing.wizard.Step;
+import org.gvsig.utils.swing.wizard.WizardControl;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ConnectionPanel extends JPanel implements Step {
+    private static String passw = null;
+
+    private JPanel jPanelLabels = null;
+    private JLabel jLabel = null;
+    private JTextField txtHost = null;
+    private JPanel jPanelTexts = null;
+    private JTextField txtPort = null;
+    private JLabel jLabel1 = null;
+    private JLabel jLabel2 = null;
+    private JTextField txtUser = null;
+    private JLabel jLabel3 = null;
+    private JPasswordField txtPassword = null;
+    private JLabel jLabel4 = null;
+    private JTextField txtBD = null;
+    private JLabel jLabel5 = null;
+    private JComboBox cmbDriver = null;
+    private JLabel jLabel6 = null;
+    private org.gvsig.utils.swing.JComboBox cmbName = null;
+    private HashMap cs = new HashMap();
+
+    private JPanel jPanel = null;
+
+	private JLabel jLabelSchema = null;
+
+	private ConnectionPanel XYZ = null;
+
+	private JPanel jPanel1 = null;
+
+	private JPanel jPanelLabels1 = null;
+
+	private JLabel jLabel61 = null;
+
+	private JLabel jLabel7 = null;
+
+	private JLabel jLabel11 = null;
+
+	private JLabel jLabel21 = null;
+
+	private JLabel jLabel31 = null;
+
+	private JLabel jLabel51 = null;
+
+	private JPanel jPanelTexts1 = null;
+
+	private JComboBox cmbName1 = null;
+
+	private JTextField txtHost1 = null;
+
+	private JTextField txtPort1 = null;
+
+	private JTextField txtUser1 = null;
+
+	private JPasswordField txtPassword1 = null;
+
+	private JTextField txtBD1 = null;
+
+	private JComboBox cmbDriver1 = null;
+
+	private JTextField txtSchema = null;
+
+
+
+    /**
+     * This is the default constructor
+     */
+    public ConnectionPanel() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(null);
+        this.setSize(335, 240);
+        this.add(getJPanel(), null);
+
+        if (passw != null) {
+			txtPassword.setText(passw);
+		}
+
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanelLabels() {
+        if (jPanelLabels == null) {
+            String string = PluginServices.getText(this, "_Schema") + ":";
+            jLabelSchema = new JLabel();
+            jLabelSchema.setName("jLabel4");
+            jLabelSchema.setHorizontalAlignment(SwingConstants.RIGHT);
+            jLabelSchema.setHorizontalTextPosition(SwingConstants.RIGHT);
+            jLabelSchema.setText(string);
+            jLabelSchema.setPreferredSize(new Dimension(140, 19));
+            FlowLayout flowLayout3 = new FlowLayout();
+            flowLayout3.setVgap(15);
+            jLabel5 = new JLabel();
+            jLabel4 = new JLabel();
+            jLabel3 = new JLabel();
+            jLabel2 = new JLabel();
+            jLabel1 = new JLabel();
+            jLabel = new JLabel();
+            jPanelLabels = new JPanel();
+            jPanelLabels.setLayout(flowLayout3);
+            jPanelLabels.setName("jPanelLabels");
+            jPanelLabels.setPreferredSize(new java.awt.Dimension(150,400));
+            jLabel.setText(PluginServices.getText(this, "_Host") + ":");
+            jLabel.setPreferredSize(new java.awt.Dimension(140,19));
+            jLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+            jLabel.setName("jLabel");
+            jLabel1.setText(PluginServices.getText(this, "_Port")+":");
+            jLabel1.setPreferredSize(new java.awt.Dimension(140,19));
+            jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
+            jLabel1.setName("jLabel1");
+            jLabel2.setText(PluginServices.getText(this, "_User")+":");
+            jLabel2.setName("jLabel2");
+            jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+            jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+            jLabel2.setPreferredSize(new java.awt.Dimension(140,19));
+            jLabel3.setText(PluginServices.getText(this, "_Password")+":");
+            jLabel3.setName("jLabel3");
+            jLabel3.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+            jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+            jLabel3.setPreferredSize(new java.awt.Dimension(140,19));
+            jLabel4.setText(PluginServices.getText(this, "_Database")+":");
+            jLabel4.setName("jLabel4");
+            jLabel4.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+            jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+            jLabel4.setPreferredSize(new java.awt.Dimension(140,19));
+            jLabel5.setText(PluginServices.getText(this, "_Driver_type")+":");
+            jLabel5.setName("jLabel5");
+            jLabel5.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+            jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+            jLabel5.setPreferredSize(new java.awt.Dimension(140,19));
+            jPanelLabels.add(getJLabel6(), null);
+            jPanelLabels.add(jLabel, null);
+            jPanelLabels.add(jLabel1, null);
+            jPanelLabels.add(jLabel2, null);
+            jPanelLabels.add(jLabel3, null);
+            jPanelLabels.add(jLabel4, null);
+            jPanelLabels.add(jLabelSchema, null);
+            jPanelLabels.add(jLabel5, null);
+
+        }
+
+        return jPanelLabels;
+    }
+
+    /**
+     * This method initializes txtHost
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTxtHost() {
+        if (txtHost == null) {
+            txtHost = new JTextField();
+            txtHost.setPreferredSize(new java.awt.Dimension(170, 19));
+            txtHost.setName("txtHost");
+        }
+
+        return txtHost;
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanelTexts() {
+        if (jPanelTexts == null) {
+            FlowLayout flowLayout2 = new FlowLayout(FlowLayout.LEFT);
+            flowLayout2.setVgap(15);
+            jPanelTexts = new JPanel();
+            jPanelTexts.setLayout(flowLayout2);
+            jPanelTexts.setPreferredSize(new Dimension(200, 300));
+
+            jPanelTexts.setName("jPanelText");
+            jPanelTexts.add(getCmbName(), null);
+            jPanelTexts.add(getTxtHost(), null);
+            jPanelTexts.add(getTxtPort(), null);
+            jPanelTexts.add(getTxtUser(), null);
+            jPanelTexts.add(getTxtPassword(), null);
+            jPanelTexts.add(getTxtBD(), null);
+            jPanelTexts.add(getTxtSchema(), null);
+            jPanelTexts.add(getCmbDriver(), null);
+        }
+
+        return jPanelTexts;
+    }
+
+    /**
+     * This method initializes txtPort
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTxtPort() {
+        if (txtPort == null) {
+            txtPort = new JTextField();
+            txtPort.setPreferredSize(new java.awt.Dimension(40, 19));
+            txtPort.setName("txtPort");
+            txtPort.setText("");
+            txtPort.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+        }
+
+        return txtPort;
+    }
+
+    /**
+     * This method initializes txtUser
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTxtUser() {
+        if (txtUser == null) {
+            txtUser = new JTextField();
+            txtUser.setPreferredSize(new java.awt.Dimension(170, 19));
+            txtUser.setName("txtUser");
+        }
+
+        return txtUser;
+    }
+
+    /**
+     * This method initializes txtPassword
+     *
+     * @return javax.swing.JTextField
+     */
+    private JPasswordField getTxtPassword() {
+        if (txtPassword == null) {
+            txtPassword = new JPasswordField();
+            txtPassword.setPreferredSize(new java.awt.Dimension(170, 19));
+            txtPassword.setName("txtPassword");
+        }
+
+        return txtPassword;
+    }
+
+    /**
+     * This method initializes txtBD
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTxtBD() {
+        if (txtBD == null) {
+            txtBD = new JTextField();
+            txtBD.setPreferredSize(new java.awt.Dimension(170, 19));
+            txtBD.setName("txtBD");
+        }
+
+        return txtBD;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getHost() {
+        return getTxtHost().getText();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getPort() {
+        return getTxtPort().getText();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getUser() {
+        return getTxtUser().getText();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getSettingsName() {
+        if (getCmbName().getSelectedItem() == null){
+            return null;
+        }        
+        return getCmbName().getSelectedItem().toString();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getPassword() {
+        passw = String.copyValueOf(getTxtPassword().getPassword());
+        return passw;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getDBName() {
+        return getTxtBD().getText();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param drivers DOCUMENT ME!
+     */
+    public void setDrivers(String[] drivers) {
+        DefaultComboBoxModel model = new DefaultComboBoxModel();
+
+        for (int i = 0; i < drivers.length; i++) {
+            model.addElement(drivers[i]);
+        }
+
+        getCmbDriver().setModel(model);
+
+        //Para que refresque el textbox del puerto
+        if (drivers.length > 0) {
+			cmbDriver.setSelectedIndex(0);
+		}
+
+    }
+
+
+    /**
+     * @return ConnectionSettings based on values in this panel
+     */
+    public ConnectionSettings getConnectionSettings()
+    {
+        ConnectionSettings cs = new ConnectionSettings();
+        cs.setDb(getDBName());
+        cs.setSchema(getSchema());
+        cs.setDriver(getDriver());
+        cs.setHost(getHost());
+        cs.setPort(getPort());
+        cs.setUser(getUser());
+        cs.setPassw(getPassword());
+        cs.setName(getSettingsName());
+        return cs;
+    }
+
+    public String getSchema() {
+		return txtSchema.getText();
+	}
+
+    /**
+     * Makes persistent the connection settings of this panel.
+     */
+    public void saveConnectionSettings()
+    {
+    	ConnectionSettings cs = new ConnectionSettings();
+        cs.setDb(getDBName());
+        cs.setSchema(getSchema());
+        cs.setDriver(getDriver());
+        cs.setHost(getHost());
+        cs.setPort(getPort());
+        cs.setUser(getUser());
+        cs.setPassw(getPassword());
+        cs.setName(getSettingsName());
+
+        PluginServices ps = PluginServices.getPluginServices(this);
+        XMLEntity xml = ps.getPersistentXML();
+
+        try {
+            String[] connections = xml.getStringArrayProperty("jdbc-connections");
+            String[] newConnections = new String[connections.length + 1];
+            System.arraycopy(connections, 0, newConnections, 0, connections.length);
+            newConnections[connections.length] = cs.toString();
+            xml.putProperty("jdbc-connections", newConnections);
+        } catch (NotExistInXMLEntity e) {
+            xml.putProperty("jdbc-connections", new String[] { cs.toString() });
+        }
+
+
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getDriver() {
+        return cmbDriver.getSelectedItem().toString();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param cs DOCUMENT ME!
+     */
+    public void setSettings(HashMap cs) {
+        this.cs = cs;
+        ((DefaultComboBoxModel) getCmbName().getModel()).removeAllElements();
+
+        Iterator i = cs.keySet().iterator();
+
+        while (i.hasNext()) {
+            String item = (String) i.next();
+            ((DefaultComboBoxModel) getCmbName().getModel()).addElement(item);
+        }
+    }
+
+    /**
+     * @see org.gvsig.utils.swing.wizard.Step#init(org.gvsig.utils.swing.wizard.WizardControl)
+     */
+    public void init(WizardControl w) {
+    }
+
+    /**
+     * This method initializes cmbDriver
+     *
+     * @return com.iver.utiles.swing.JComboBox
+     */
+    private JComboBox getCmbDriver() {
+        if (cmbDriver == null) {
+            cmbDriver = new JComboBox();
+            cmbDriver.setPreferredSize(new java.awt.Dimension(170, 19));
+            cmbDriver.setName("cmbDriver");
+            cmbDriver.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    String driverName = cmbDriver.getSelectedItem().toString();
+                    DataManager dm = DALLocator.getDataManager();
+                    DBParameters dsp=null;
+					try {
+						dsp = (DBParameters) dm
+								.createServerExplorerParameters(driverName);
+					} catch (InitializeException e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					} catch (ProviderNotRegisteredException e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					}
+
+					// String port = dsp.getPort() + "";
+					// getTxtPort().setText(port);
+                }
+            });
+        }
+
+        return cmbDriver;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return
+     */
+    public boolean done() {
+        return (getTxtBD().getText().length() > 0) &&
+        (getTxtHost().getText().length() > 0) &&
+        (getCmbName().getSelectedItem() != null) &&
+        (getCmbName().getSelectedItem().toString().length() > 0);
+    }
+
+    /**
+     * This method initializes jLabel6
+     *
+     * @return javax.swing.JLabel
+     */
+    private JLabel getJLabel6() {
+        if (jLabel6 == null) {
+            jLabel6 = new JLabel();
+            jLabel6.setText(PluginServices.getText(this, "_Connection_name")+":");
+            jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+            jLabel6.setPreferredSize(new java.awt.Dimension(140,19));
+        }
+
+        return jLabel6;
+    }
+
+    /**
+     * This method initializes jComboBox
+     *
+     * @return com.iver.utiles.swing.JComboBox
+     */
+    private org.gvsig.utils.swing.JComboBox getCmbName() {
+        if (cmbName == null) {
+            cmbName = new org.gvsig.utils.swing.JComboBox();
+            cmbName.setEditable(true);
+            cmbName.setPreferredSize(new java.awt.Dimension(170, 19));
+            cmbName.setModel(new DefaultComboBoxModel());
+            cmbName.addActionListener(new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        Object item = cmbName.getSelectedItem();
+
+                        if (item == null) {
+                            return;
+                        }
+
+                        ConnectionSettings c = (ConnectionSettings) cs.get(item.toString());
+
+                        if (c != null) {
+                            getTxtHost().setText(c.getHost());
+                            getTxtPort().setText(c.getPort());
+                            getTxtBD().setText(c.getDb());
+                            getTxtUser().setText(c.getUser());
+                            if (c.getPassw() != null) {
+								getTxtPassword().setText(c.getPassw());
+							}
+                            getCmbDriver().setSelectedItem(c.getDriver());
+                        }
+                    }
+                });
+        }
+
+        return cmbName;
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel() {
+    	if (jPanel == null) {
+    		jPanel = new JPanel();
+    		jPanel.setLayout(new BorderLayout());
+    		jPanel.setBounds(0, 0, 363, 240);
+    		jPanel.add(getJPanelLabels(), java.awt.BorderLayout.WEST);
+    		jPanel.add(getJPanelTexts(), java.awt.BorderLayout.EAST);
+    	}
+    	return jPanel;
+    }
+
+	/**
+	 * This method initializes XYZ
+	 *
+	 * @return com.iver.cit.gvsig.jdbc_spatial.gui.jdbcwizard.ConnectionPanel
+	 */
+	private ConnectionPanel getXYZ() {
+		if (XYZ == null) {
+			XYZ = new ConnectionPanel();
+			XYZ.setLayout(null);
+			XYZ.setSize(new java.awt.Dimension(335,240));
+			XYZ.add(getJPanel1(), null);
+		}
+		return XYZ;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jPanel1 = new JPanel();
+			jPanel1.setLayout(new BorderLayout());
+			jPanel1.setBounds(new Rectangle(0, 0, 363, 240));
+			jPanel1.add(getJPanelLabels1(), java.awt.BorderLayout.WEST);
+			jPanel1.add(getJPanelTexts1(), java.awt.BorderLayout.EAST);
+		}
+		return jPanel1;
+	}
+
+	/**
+	 * This method initializes jPanelLabels1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelLabels1() {
+		if (jPanelLabels1 == null) {
+			jLabel51 = new JLabel();
+			jLabel51.setName("jLabel5");
+			jLabel51.setHorizontalAlignment(SwingConstants.RIGHT);
+			jLabel51.setHorizontalTextPosition(SwingConstants.RIGHT);
+			jLabel51.setText(PluginServices.getText(getXYZ(), "_Driver_type") + ":");
+			jLabel51.setPreferredSize(new Dimension(140, 19));
+			jLabel31 = new JLabel();
+			jLabel31.setName("jLabel3");
+			jLabel31.setHorizontalAlignment(SwingConstants.RIGHT);
+			jLabel31.setHorizontalTextPosition(SwingConstants.RIGHT);
+			jLabel31.setText(PluginServices.getText(getXYZ(), "_Password") + ":");
+			jLabel31.setPreferredSize(new Dimension(140, 19));
+			jLabel21 = new JLabel();
+			jLabel21.setName("jLabel2");
+			jLabel21.setHorizontalAlignment(SwingConstants.RIGHT);
+			jLabel21.setHorizontalTextPosition(SwingConstants.RIGHT);
+			jLabel21.setText(PluginServices.getText(getXYZ(), "_User") + ":");
+			jLabel21.setPreferredSize(new Dimension(140, 19));
+			jLabel11 = new JLabel();
+			jLabel11.setName("jLabel1");
+			jLabel11.setHorizontalAlignment(SwingConstants.TRAILING);
+			jLabel11.setText(PluginServices.getText(getXYZ(), "_Port") + ":");
+			jLabel11.setPreferredSize(new Dimension(140, 19));
+			jLabel7 = new JLabel();
+			jLabel7.setName("jLabel");
+			jLabel7.setHorizontalAlignment(SwingConstants.RIGHT);
+			jLabel7.setText(PluginServices.getText(getXYZ(), "_Host") + ":");
+			jLabel7.setPreferredSize(new Dimension(140, 19));
+			jLabel61 = new JLabel();
+			jLabel61.setPreferredSize(new Dimension(140, 19));
+			jLabel61.setText(PluginServices.getText(getXYZ(), "_Connection_name") + ":");
+			jLabel61.setHorizontalAlignment(SwingConstants.RIGHT);
+			FlowLayout flowLayout31 = new FlowLayout();
+			flowLayout31.setVgap(15);
+			jPanelLabels1 = new JPanel();
+			jPanelLabels1.setPreferredSize(new Dimension(150, 400));
+			jPanelLabels1.setLayout(flowLayout31);
+			jPanelLabels1.setName("jPanelLabels");
+			jPanelLabels1.add(jLabel61, null);
+			jPanelLabels1.add(jLabel7, null);
+			jPanelLabels1.add(jLabel11, null);
+			jPanelLabels1.add(jLabel21, null);
+			jPanelLabels1.add(jLabel31, null);
+			jPanelLabels1.add(jLabelSchema, jLabelSchema.getName());
+			jPanelLabels1.add(jLabel51, null);
+		}
+		return jPanelLabels1;
+	}
+
+	/**
+	 * This method initializes jPanelTexts1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelTexts1() {
+		if (jPanelTexts1 == null) {
+			FlowLayout flowLayout21 = new FlowLayout(FlowLayout.LEFT);
+			flowLayout21.setVgap(15);
+			jPanelTexts1 = new JPanel();
+			jPanelTexts1.setPreferredSize(new Dimension(200, 300));
+			jPanelTexts1.setLayout(flowLayout21);
+			jPanelTexts1.setName("jPanelText");
+			jPanelTexts1.add(getCmbName1(), null);
+			jPanelTexts1.add(getTxtHost1(), null);
+			jPanelTexts1.add(getTxtPort1(), null);
+			jPanelTexts1.add(getTxtUser1(), null);
+			jPanelTexts1.add(getTxtPassword1(), null);
+			jPanelTexts1.add(getTxtBD1(), null);
+			jPanelTexts1.add(getCmbDriver1(), null);
+		}
+		return jPanelTexts1;
+	}
+
+	/**
+	 * This method initializes cmbName1
+	 *
+	 * @return com.iver.utiles.swing.JComboBox
+	 */
+	private JComboBox getCmbName1() {
+		if (cmbName1 == null) {
+			cmbName1 = new JComboBox();
+			cmbName1.setPreferredSize(new Dimension(170, 19));
+			cmbName1.setModel(new DefaultComboBoxModel());
+			cmbName1.setEditable(true);
+		}
+		return cmbName1;
+	}
+
+	/**
+	 * This method initializes txtHost1
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtHost1() {
+		if (txtHost1 == null) {
+			txtHost1 = new JTextField();
+			txtHost1.setName("txtHost");
+			txtHost1.setPreferredSize(new Dimension(170, 19));
+		}
+		return txtHost1;
+	}
+
+	/**
+	 * This method initializes txtPort1
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtPort1() {
+		if (txtPort1 == null) {
+			txtPort1 = new JTextField();
+			txtPort1.setName("txtPort");
+			txtPort1.setText("");
+			txtPort1.setHorizontalAlignment(JTextField.LEFT);
+			txtPort1.setPreferredSize(new Dimension(40, 19));
+		}
+		return txtPort1;
+	}
+
+	/**
+	 * This method initializes txtUser1
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtUser1() {
+		if (txtUser1 == null) {
+			txtUser1 = new JTextField();
+			txtUser1.setName("txtUser");
+			txtUser1.setPreferredSize(new Dimension(170, 19));
+		}
+		return txtUser1;
+	}
+
+	/**
+	 * This method initializes txtPassword1
+	 *
+	 * @return javax.swing.JPasswordField
+	 */
+	private JPasswordField getTxtPassword1() {
+		if (txtPassword1 == null) {
+			txtPassword1 = new JPasswordField();
+			txtPassword1.setName("txtPassword");
+			txtPassword1.setPreferredSize(new Dimension(170, 19));
+		}
+		return txtPassword1;
+	}
+
+	/**
+	 * This method initializes txtBD1
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtBD1() {
+		if (txtBD1 == null) {
+			txtBD1 = new JTextField();
+			txtBD1.setName("txtBD");
+			txtBD1.setPreferredSize(new Dimension(170, 19));
+		}
+		return txtBD1;
+	}
+
+	/**
+	 * This method initializes cmbDriver1
+	 *
+	 * @return com.iver.utiles.swing.JComboBox
+	 */
+	private JComboBox getCmbDriver1() {
+		if (cmbDriver1 == null) {
+			cmbDriver1 = new JComboBox();
+			cmbDriver1.setName("cmbDriver");
+			cmbDriver1.setPreferredSize(new Dimension(170, 19));
+		}
+		return cmbDriver1;
+	}
+
+	/**
+	 * This method initializes txtSchema
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtSchema() {
+		if (txtSchema == null) {
+			txtSchema = new JTextField();
+			txtSchema.setName("txtBD");
+			txtSchema.setPreferredSize(new Dimension(170, 19));
+		}
+		return txtSchema;
+	}
+} //  @jve:decl-index=0:visual-constraint="7,3"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionSettings.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionSettings.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionSettings.java	(revision 42196)
@@ -0,0 +1,131 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.resource.db.DBParameters;
+
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ConnectionSettings {
+    private String host;
+    private String port;
+    private String db;
+    private String schema;
+    private String driver;
+    private String user;
+    private String name;
+    private String passw;
+
+    public String getDb() {
+        return db;
+    }
+    public void setDb(String db) {
+        this.db = db;
+    }
+    public String getDriver() {
+        return driver;
+    }
+    public void setDriver(String driver) {
+        this.driver = driver;
+    }
+    public String getHost() {
+        return host;
+    }
+    public void setHost(String host) {
+        this.host = host;
+    }
+    public String getPort() {
+        return port;
+    }
+    public void setPort(String port) {
+        this.port = port;
+    }
+    public String getUser() {
+        return user;
+    }
+    public void setUser(String user) {
+        this.user = user;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public String toString(){
+        return host+","+port+","+db+","+driver+","+user+","+name;
+    }
+
+    public void setFromString(String str) {
+        String[] values = str.split(",");
+        host = values[0];
+        port = values[1];
+        db = values[2];
+        driver = values[3];
+        user = values[4];
+        name = values[5];
+        if (values.length == 7) {
+			passw = values[6];
+		}
+    }
+    public String getPassw() {
+        return passw;
+    }
+    public void setPassw(String passw) {
+        this.passw = passw;
+    }
+    public String getConnectionString(){
+    	DataManager dm=DALLocator.getDataManager();
+    	try {
+			DBParameters dsp=(DBParameters)dm.createStoreParameters(getDriver());
+		} catch (InitializeException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (ProviderNotRegisteredException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+        String connectionString = "";//vecDriver.getConnectionStringBeginning() + "//" + getHost();
+
+        connectionString += (":" + getPort());
+
+        connectionString += ("/" + getDb());
+
+        return connectionString;
+    }
+	public String getSchema() {
+		return schema;
+	}
+	public void setSchema(String schema) {
+		this.schema = schema;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionSettings.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItemVectorial.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItemVectorial.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItemVectorial.java	(revision 42196)
@@ -0,0 +1,163 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.i18n.Messages;
+
+
+public class TablesListItemVectorial extends TablesListItem {
+	private MapControl mc;
+
+
+	public TablesListItemVectorial(DBStoreParameters param,
+			MapControl _mc, WizardVectorialDB _parent) {
+		super(param, _parent);
+		mc = _mc;
+	}
+
+    public UserTableSettingsPanel getUserTableSettingsPanel(String espView) {
+		if (tableSettingsPanel == null) {
+
+			String[] ids = new String[0];
+			FeatureType ft = null;
+			FeatureAttributeDescriptor dbattr = null;
+
+			try {
+				ft = this.parent.getServerExplorer().getFeatureType(parameters);
+			} catch (DataException e) {
+				NotificationManager.addError(e);
+				return null;
+			}
+
+			ArrayList auxAll = new ArrayList();
+
+			ArrayList geo_atts = new ArrayList();
+			ArrayList auxId = new ArrayList();
+			Iterator iter = ft.iterator();
+			while (iter.hasNext()) {
+				dbattr = (FeatureAttributeDescriptor) iter.next();
+				if (dbattr.getDataType().getType() == DataTypes.GEOMETRY) {
+				    geo_atts.add(dbattr);
+				}
+				if (dbattr.isPrimaryKey()) {
+					auxId.add(dbattr.getName());
+				}
+				auxAll.add(dbattr.getName());
+
+			}
+
+			if (auxId.size() > 0) {
+				StringBuilder strb = new StringBuilder();
+				strb.append('{');
+				for (int i = 0; i < auxId.size() - 1; i++) {
+					strb.append(auxId.get(i));
+					strb.append(',');
+				}
+				strb.append(auxId.get(auxId.size() - 1));
+
+				strb.append('}');
+				/*
+				 * Only the true PK from the DB
+				 */
+				auxAll.clear();
+				auxAll.add(strb.toString());
+			} else {
+			    /*
+			     * If the table does not hace PK declared in the DB,
+			     * we let the user choose any field and show a warning dialog
+			     */
+			    showNoPkWarning(this.tableName);
+			}
+			
+			// ===============================
+			
+			ids = (String[]) auxAll.toArray(new String[auxAll.size()]);
+			int ids_size = ids.length;
+			FieldComboItem[] ids_ci = new FieldComboItem[ids_size];
+
+			for (int i = 0; i < ids_size; i++) {
+				ids_ci[i] = new FieldComboItem(ids[i]);
+			}
+
+
+			int geos_size = geo_atts.size();
+			FieldComboItem[] geos_ci = new FieldComboItem[geos_size];
+
+			for (int i = 0; i < geos_size; i++) {
+			    dbattr = (FeatureAttributeDescriptor) geo_atts.get(i);
+				geos_ci[i] = new FieldComboItem(dbattr.getName(), dbattr.getSRS());
+			}
+
+			tableSettingsPanel = new UserTableSettingsVectorialPanel(ids_ci,
+					geos_ci,
+					tableName, mc, false, (WizardVectorialDB) parent,
+					getParameters(),
+					currentProjection(espView,
+							ids_ci, geos_ci));
+		}
+
+		return tableSettingsPanel;
+	}
+
+    private void showNoPkWarning(String tableName) {
+        
+        String msg = Messages.getText(
+            "_Table_NAME_does_not_have_declared_PK", new String[] { tableName } );
+        msg = msg + "\n\n";
+        msg = msg + Messages.getText(
+            "_If_layer_edited_saving_edits_will_not_be_possible");
+        msg = msg + "\n";
+        msg = msg + Messages.getText(
+            "_Strange_behavior_if_selected_ID_not_unique_values");
+        msg = msg + "      ";
+        
+        JOptionPane.showMessageDialog(
+            ApplicationLocator.getManager().getRootComponent(),
+            msg,
+            Messages.getText("_Id_field"),
+            JOptionPane.WARNING_MESSAGE);
+        
+    }
+
+    public void setEnabledPanels(boolean b) {
+    	super.setEnabledPanels(b);
+		tableSettingsPanel.enableSpatialControls(b);
+		tableSettingsPanel.enableAlphaControls(b);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItemVectorial.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserSelectedFieldsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserSelectedFieldsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserSelectedFieldsPanel.java	(revision 42196)
@@ -0,0 +1,242 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.gui.beans.swing.JButton;
+
+
+
+/**
+ * Utility class that holds a single table field selection controls.
+ *
+ * @author jldominguez
+ *
+ */
+public class UserSelectedFieldsPanel extends JPanel implements ActionListener {
+    private FeatureAttributeDescriptor[] descriptors = null;
+//    private String[] fieldTypes = null;
+    private JScrollPane fieldsScrollPane = null;
+    private AvailableFieldsCheckBoxList fieldsList = null;
+    private JButton selAllFieldsButton = null;
+    private JButton deselAllFieldsButton = null;
+    private WizardDB parent = null;
+
+    public UserSelectedFieldsPanel(FeatureAttributeDescriptor[] descriptors,
+        boolean empty, WizardDB _p) {
+        parent = _p;
+        this.descriptors = descriptors;
+//        fieldTypes = fTypes;
+        initialize();
+
+        if (empty) {
+            enableControls(false);
+        }
+        else {
+            setAllFieldsInTable(descriptors);
+        }
+    }
+
+    public void loadValues() {
+        setAllFieldsInTable(descriptors);
+    }
+
+    public String[] getUserSelectedFields(String[] idf, String geo) {
+        String[] resp = getUserSelectedFields();
+        if (idf != null) {
+            for (int i=0 ; i<idf.length ; i++){
+                resp = addBeginningIfNotContained(resp, idf[i]);
+            }
+		}
+        if (geo != null) {
+			resp = addBeginningIfNotContained(resp, geo);
+		}
+
+        return resp;
+    }
+
+    private String[] addBeginningIfNotContained(String[] arr, String item) {
+        if (contains(arr, item)) {
+            return arr;
+        }
+        else {
+            int size = arr.length;
+            String[] resp = new String[size + 1];
+            resp[0] = item;
+
+            for (int i = 0; i < size; i++) {
+                resp[i + 1] = arr[i];
+            }
+
+            return resp;
+        }
+    }
+
+    private String[] removeIfContained(String[] arr, String item) {
+        if (!contains(arr, item)) {
+            return arr;
+        }
+        else {
+            int size = arr.length;
+            ArrayList aux = new ArrayList();
+
+            for (int i = 0; i < size; i++) {
+				aux.add(arr[i]);
+			}
+
+            aux.remove(item);
+
+            return (String[]) aux.toArray(new String[0]);
+        }
+    }
+
+    private boolean contains(String[] arr, String item) {
+        for (int i = 0; i < arr.length; i++) {
+            if (arr[i].compareTo(item) == 0) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    public void enableControls(boolean enable) {
+        getFieldsList().setEnabled(enable);
+        getSelAllFieldsButton().setEnabled(enable);
+        getDeselAllFieldsButton().setEnabled(enable);
+    }
+
+    private void initialize() {
+        setLayout(null);
+        setBounds(new java.awt.Rectangle(255, 55, 251, 166));
+        setBorder(javax.swing.BorderFactory.createTitledBorder(null,
+                PluginServices.getText(this, "table_fields"),
+                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+        add(getFieldsScrollPane(), null);
+
+        add(getSelAllFieldsButton(), null);
+        add(getDeselAllFieldsButton(), null);
+    }
+
+    private JScrollPane getFieldsScrollPane() {
+        if (fieldsScrollPane == null) {
+            fieldsScrollPane = new JScrollPane();
+            fieldsScrollPane.setBounds(new java.awt.Rectangle(5, 20,
+                    101 + (28 * 5), 76 + (7 * 5)));
+            fieldsScrollPane.setViewportView(getFieldsList());
+        }
+
+        return fieldsScrollPane;
+    }
+
+    private AvailableFieldsCheckBoxList getFieldsList() {
+        if (fieldsList == null) {
+            fieldsList = new AvailableFieldsCheckBoxList();
+        }
+
+        return fieldsList;
+    }
+
+    private void setAllFieldsInTable(FeatureAttributeDescriptor[] descriptors) {
+        DefaultListModel lmodel = new DefaultListModel();
+
+        for (int i = 0; i < descriptors.length; i++) {
+            lmodel.addElement(new FieldsListItem(descriptors[i]));
+        }
+
+        getFieldsList().setModel(lmodel);
+        getFieldsScrollPane().setViewportView(fieldsList);
+        getFieldsScrollPane().updateUI();
+    }
+
+    private JButton getSelAllFieldsButton() {
+        if (selAllFieldsButton == null) {
+            selAllFieldsButton = new JButton();
+            selAllFieldsButton.addActionListener(this);
+            selAllFieldsButton.setBounds(new java.awt.Rectangle(28 + 5, 135,
+                    90, 26));
+            selAllFieldsButton.setText(PluginServices.getText(this, "_All"));
+        }
+
+        return selAllFieldsButton;
+    }
+
+    /**
+     * This method initializes deselAllFieldsButton
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getDeselAllFieldsButton() {
+        if (deselAllFieldsButton == null) {
+            deselAllFieldsButton = new JButton();
+            deselAllFieldsButton.addActionListener(this);
+            deselAllFieldsButton.setBounds(new java.awt.Rectangle(28 + 100,
+                    135, 90, 26));
+            deselAllFieldsButton.setText(PluginServices.getText(this, "_None"));
+        }
+
+        return deselAllFieldsButton;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        Object src = e.getSource();
+
+        if (src == getDeselAllFieldsButton()) {
+            getFieldsList().checkAll(false);
+        }
+
+        if (src == getSelAllFieldsButton()) {
+            getFieldsList().checkAll(true);
+        }
+    }
+
+    private String[] getUserSelectedFields() {
+        Object[] sel = fieldsList.getCheckedItems();
+        int size = sel.length;
+
+        String[] resp = new String[size];
+
+        for (int i = 0; i < size; i++) {
+            resp[i] = ((FieldsListItem) sel[i]).getName();
+        }
+
+        return resp;
+    }
+
+    public void repaint() {
+        super.repaint();
+        getFieldsList().updateUI();
+        getFieldsScrollPane().updateUI();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserSelectedFieldsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsVectorialPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsVectorialPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsVectorialPanel.java	(revision 42196)
@@ -0,0 +1,474 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import org.gvsig.app.gui.panels.CRSSelectPanel;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.i18n.Messages;
+
+
+public class UserTableSettingsVectorialPanel extends UserTableSettingsPanel {
+    private static Logger logger = LoggerFactory
+			.getLogger(UserTableSettingsPanel.class.getName());
+
+    private FieldComboItem[] geos;
+	private JComboBox geomComboBox = null;
+    private JLabel geomLabel = null;
+	private JLabel waLabel = null;
+	private JLabel topLabel = null;
+	private JTextField topTextField = null;
+	private JTextField bottomTextField = null;
+	private JTextField rightTextField = null;
+	private JTextField leftTextField = null;
+	private JLabel bottomLabel = null;
+	private JLabel rightLabel = null;
+	private JLabel leftLabel = null;
+	private JButton getviewButton = null;
+	private JCheckBox activateWACheckBox = null;
+    private MapControl mControl = null;
+	private CRSSelectPanel panelProj;
+	
+    private IProjection proposedProjection = null;
+    // private IProjection currentProj;
+	
+	private JPanel this_panel = null;
+
+    public UserTableSettingsVectorialPanel(FieldComboItem[] idComboItems,
+			FieldComboItem[] geoComboItems, String initialLayerName,
+			MapControl mapc, boolean empty, WizardVectorialDB _p,
+			DBStoreParameters parameters,
+			IProjection proposed_proj) {
+    	super();
+    	
+    	this_panel = this;
+		setInitValues(idComboItems, initialLayerName, empty, _p, parameters);
+
+        mControl = mapc;
+		geos = geoComboItems;
+		proposedProjection = proposed_proj;
+		initialize(empty);
+	}
+
+    protected void initialize(boolean _empty) {
+    	super.initialize(_empty);
+        setBorder(javax.swing.BorderFactory.createTitledBorder(null,
+				PluginServices.getText(this, "_Table_settings"),
+				javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+				javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		leftLabel = new JLabel();
+		// leftLabel.setBounds(new java.awt.Rectangle(375, 175, 111, 16));
+		leftLabel.setBounds(new java.awt.Rectangle(80+70, 200, 70, 16));
+		leftLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
+		leftLabel.setText(PluginServices.getText(this, "xmin"));
+		rightLabel = new JLabel();
+		rightLabel.setBounds(new java.awt.Rectangle(75+150, 200, 70, 16));
+		rightLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
+		rightLabel.setText(PluginServices.getText(this, "xmax"));
+		bottomLabel = new JLabel();
+		bottomLabel.setBounds(new java.awt.Rectangle(70+230, 200, 70, 16));
+		bottomLabel
+				.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
+		bottomLabel.setText(PluginServices.getText(this, "ymin"));
+		topLabel = new JLabel();
+		topLabel.setBounds(new java.awt.Rectangle(65+310, 200, 70, 16));
+		topLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
+		topLabel.setText(PluginServices.getText(this, "ymax"));
+		waLabel = new JLabel();
+		// waLabel.setBounds(new java.awt.Rectangle(40, 145, 131, 21));
+		waLabel.setBounds(new java.awt.Rectangle(30, 215, 125, 21));
+		waLabel.setText(PluginServices.getText(this, "_Working_area"));
+		geomLabel = new JLabel();
+		// geomLabel.setBounds(new java.awt.Rectangle(240, 55, 111, 21));
+		geomLabel.setBounds(new java.awt.Rectangle(8, 140, 160, 21));
+		geomLabel.setText(PluginServices.getText(this, "_Geo_field"));
+
+		add(getGeomComboBox(), null);
+		add(geomLabel, null);
+	    add(waLabel, null);
+		add(topLabel, null);
+		add(getTopTextField(), null);
+		add(getBottomTextField(), null);
+		add(getRightTextField(), null);
+		add(getLeftTextField(), null);
+		add(bottomLabel, null);
+		add(rightLabel, null);
+		add(leftLabel, null);
+		add(getGetviewButton(), null);
+		add(getActivateWACheckBox(), null);
+		loadValues(_empty);
+	}
+
+    private CRSSelectPanel getJPanelProj(IProjection pro) {
+		if (panelProj == null) {
+			panelProj = CRSSelectPanel.getPanel(pro);
+
+			panelProj.setTransPanelActive(true);
+			panelProj.setBounds(8, 165, 477, 21);
+			panelProj.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					if (panelProj.isOkPressed()) {
+						AddLayerDialog
+								.setLastProjection(panelProj.getCurProj());
+					}
+				}
+			});
+		}
+		return panelProj;
+	}
+
+
+    public boolean hasValidValues() {
+		if (!super.hasValidValues()) {
+			return false;
+		}
+
+		if ((activateWACheckBox.isSelected()) && (getWorkingArea() == null)) {
+			return false;
+		}
+
+		return true;
+	}
+
+    private JComboBox getGeomComboBox() {
+		if (geomComboBox == null) {
+			geomComboBox = new JComboBox();
+			// geomComboBox.setBounds(new java.awt.Rectangle(355, 55, 131, 21));
+			geomComboBox.setBounds(new java.awt.Rectangle(150, 140, 335, 21));
+			geomComboBox.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    
+                    if (panelProj == null) {
+                        return;
+                    }
+                    /*
+                     * Set the proj of the field in the 
+                     * SRS chooser
+                     */
+                    FieldComboItem fci = (FieldComboItem) geomComboBox.getSelectedItem();
+                    
+                    if (fci == null) {
+                        return;
+                    }
+                    
+                    IProjection iproj = fci.getProjection();
+                    if (iproj != null) {
+                        /*
+                         * Remove and recreate crs selection panel
+                         */
+                        this_panel.remove(panelProj);
+                        panelProj = null;
+                        add(getJPanelProj(iproj), null);
+                    }
+                }
+			});
+		}
+
+		return geomComboBox;
+	}
+
+	private JTextField getTopTextField() {
+		if (topTextField == null) {
+			topTextField = new JTextField();
+			topTextField.addKeyListener(this);
+			// topTextField.setBounds(new java.awt.Rectangle(15, 190, 111, 21));
+			topTextField.setBounds(new java.awt.Rectangle(65+310, 215, 70, 21));
+		}
+
+		return topTextField;
+	}
+
+	private JTextField getBottomTextField() {
+		if (bottomTextField == null) {
+			bottomTextField = new JTextField();
+			bottomTextField.addKeyListener(this);
+			bottomTextField
+					.setBounds(new java.awt.Rectangle(70+230, 215, 70, 21));
+		}
+
+		return bottomTextField;
+	}
+
+	private JTextField getRightTextField() {
+		if (rightTextField == null) {
+			rightTextField = new JTextField();
+			rightTextField.addKeyListener(this);
+			rightTextField.setBounds(new java.awt.Rectangle(75+150, 215, 70, 21));
+		}
+
+		return rightTextField;
+	}
+
+	private JTextField getLeftTextField() {
+		if (leftTextField == null) {
+			leftTextField = new JTextField();
+			leftTextField.addKeyListener(this);
+			leftTextField.setBounds(new java.awt.Rectangle(80+70, 215, 70, 21));
+		}
+
+		return leftTextField;
+	}
+
+	private JButton getGetviewButton() {
+		if (getviewButton == null) {
+			getviewButton = new org.gvsig.gui.beans.swing.JButton();
+			getviewButton.addActionListener(this);
+			//getviewButton.setBounds(new java.awt.Rectangle(195, 145, 111, 26));
+			getviewButton.setBounds(new java.awt.Rectangle(455, 205, 31, 31));
+            ImageIcon ii = IconThemeHelper.getImageIcon("geodb-get-view-extent"); 
+            // ImageIcon ii = IconThemeHelper.getImageIcon("geodb-connection-add"); 
+			
+            getviewButton.setMargin(new Insets(1,1,1,1));
+	        getviewButton.setIcon(ii);
+	        getviewButton.setToolTipText(
+	                Messages.getText("_Get_view_extent"));
+	        getviewButton.setEnabled(false);
+		}
+
+		return getviewButton;
+	}
+
+	private JCheckBox getActivateWACheckBox() {
+		if (activateWACheckBox == null) {
+			activateWACheckBox = new JCheckBox();
+			activateWACheckBox.addActionListener(this);
+//			activateWACheckBox
+//					.setBounds(new java.awt.Rectangle(15, 145, 21, 21));
+			activateWACheckBox
+					.setBounds(new java.awt.Rectangle(5, 215, 21, 21));
+
+		}
+
+		return activateWACheckBox;
+	}
+
+    protected void loadValues(boolean is_empty) { 
+		super.loadValues(is_empty);
+		if (is_empty) {
+			enableAlphaControls(false);
+			enableSpatialControls(false);
+			getActivateWACheckBox().setSelected(false);
+		} else {
+			enableAlphaControls(true);
+			enableSpatialControls(true);
+
+			getGeomComboBox().removeAllItems();
+
+			for (int i = 0; i < geos.length; i++) {
+				getGeomComboBox().addItem(geos[i]);
+			}
+			add(getJPanelProj(proposedProjection), null);
+		}
+	}
+
+    public void enableSpatialControls(boolean enable) {
+    	super.enableSpatialControls(enable);
+		getGeomComboBox().setEnabled(enable);
+
+		getActivateWACheckBox().setEnabled(enable);
+
+		boolean there_is_view = ((mControl != null) &&
+		    (mControl.getViewPort().getAdjustedEnvelope() != null));
+
+		getGetviewButton().setEnabled(enable && there_is_view);
+		getTopTextField().setEnabled(enable);
+		getBottomTextField().setEnabled(enable);
+		getRightTextField().setEnabled(enable);
+		getLeftTextField().setEnabled(enable);
+	}
+
+    public void actionPerformed(ActionEvent e) {
+		super.actionPerformed(e);
+		Object src = e.getSource();
+
+        if (src == getviewButton) {
+			getViewIntoFourBounds();
+			parent.checkFinishable();
+		}
+
+		if (src == activateWACheckBox) {
+			enableWASettings(activateWACheckBox.isSelected());
+			parent.checkFinishable();
+		}
+	}
+
+    private void enableWASettings(boolean b) {
+		getviewButton.setEnabled(b
+				&& (mControl.getViewPort().getAdjustedEnvelope() != null));
+		rightTextField.setEnabled(b);
+		leftTextField.setEnabled(b);
+		topTextField.setEnabled(b);
+		bottomTextField.setEnabled(b);
+	}
+
+    private void getViewIntoFourBounds() {
+		Envelope rect = mControl.getViewPort().getAdjustedEnvelope();
+		
+		IProjection viewProj = mControl.getViewPort().getProjection();
+		IProjection srcProj = this.getProjection();
+		if (viewProj == null || srcProj == null) {
+		    messageDialog(Messages.getText(
+		        "_Unable_to_reproject_viewport_Default_bounds_used"),
+		        JOptionPane.WARNING_MESSAGE);
+		    setLargeArea(srcProj);
+		} else {
+		    try {
+		        ICoordTrans ct = null;
+		        if (viewProj.getAbrev().compareToIgnoreCase(
+		            srcProj.getAbrev()) != 0) {
+		            /*
+		             * Reprojection needed
+		             */
+		            ct = viewProj.getCT(srcProj);
+	                rect = rect.convert(ct);
+		        }
+		        topTextField.setText(getFormattedDouble(rect.getMaximum(1)));
+		        bottomTextField.setText(getFormattedDouble(rect.getMinimum(1)));
+		        rightTextField.setText(getFormattedDouble(rect.getMaximum(0)));
+		        leftTextField.setText(getFormattedDouble(rect.getMinimum(0)));
+		        if (ct != null) {
+	                messageDialog(Messages.getText(
+	                    "_Viewport_bounds_reprojected_to_datasource_CRS"),
+	                    JOptionPane.WARNING_MESSAGE);
+		        }
+		    } catch (Exception exc) {
+	            messageDialog(Messages.getText(
+	                "_Unable_to_reproject_viewport_Default_bounds_used"),
+	                JOptionPane.WARNING_MESSAGE);
+	            setLargeArea(srcProj);
+		    }
+		}
+		
+	}
+
+    private void setLargeArea(IProjection proj) {
+        
+        if (proj == null || proj.isProjected()) {
+            topTextField.setText(getFormattedDouble(20000000d));
+            bottomTextField.setText(getFormattedDouble(-20000000d));
+            rightTextField.setText(getFormattedDouble(20000000d));
+            leftTextField.setText(getFormattedDouble(-20000000d));
+        } else {
+            topTextField.setText(getFormattedDouble(90d));
+            bottomTextField.setText(getFormattedDouble(-90d));
+            rightTextField.setText(getFormattedDouble(180d));
+            leftTextField.setText(getFormattedDouble(-180d));
+        }
+    }
+
+    private void messageDialog(String msg, int msgType) {
+        
+        JOptionPane.showMessageDialog(
+            ApplicationLocator.getManager().getRootComponent(),
+            msg,
+            Messages.getText("_Working_area"),
+            msgType);
+    }
+
+    public Envelope getWorkingArea() {
+		if (!activateWACheckBox.isSelected()) {
+			return null;
+		}
+
+		double maxx;
+		double maxy;
+		double minx;
+		double miny;
+
+		try {
+			maxx = Double.parseDouble(rightTextField.getText());
+			miny = Double.parseDouble(bottomTextField.getText());
+			minx = Double.parseDouble(leftTextField.getText());
+			maxy = Double.parseDouble(topTextField.getText());
+		} catch (NumberFormatException nfe) {
+			logger.info("Not valid value in working area: " + nfe.getMessage());
+			return null;
+		}
+		GeometryManager geoMan = GeometryLocator.getGeometryManager();
+
+		try {
+			return geoMan.createEnvelope(minx, miny, maxx, maxy,
+					SUBTYPES.GEOM2D);
+		} catch (CreateEnvelopeException e) {
+			// FIXME Exception
+			throw new RuntimeException(e);
+		}
+	}
+
+    public boolean combosHaveItems() {
+		if (!super.combosHaveItems()) {
+			return false;
+		}
+
+		if (getGeomComboBox().getItemCount() == 0) {
+			return false;
+		}
+
+		return true;
+	}
+
+    public void repaint() {
+		super.repaint();
+		getGeomComboBox().updateUI();
+	}
+
+    public String getGeoFieldName() {
+		if (getGeomComboBox().getSelectedItem() == null) {
+			return null;
+		}
+		return getGeomComboBox().getSelectedItem().toString();
+	}
+    public IProjection getProjection() {
+		return panelProj.getCurProj();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsVectorialPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialogLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialogLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialogLayout.java	(revision 42196)
@@ -0,0 +1,127 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel;
+import org.jdesktop.layout.GroupLayout;
+
+/**
+ *
+ * @author usuario
+ */
+public class VectorialDBConnectionParamsDialogLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form VectorialDBConnectionParamsDialogLayout
+     */
+    public VectorialDBConnectionParamsDialogLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        butAdvanced = new JButton();
+        butAcept = new JButton();
+        filler1 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        filler2 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        jdbcServerExplorer = new JDBCConnectionPanel();
+        filler3 = new Box.Filler(new Dimension(0, 0), new Dimension(0, 0), new Dimension(32767, 0));
+        filler4 = new Box.Filler(new Dimension(0, 0), new Dimension(0, 0), new Dimension(0, 32767));
+        butCancel = new JButton();
+        butDelete = new JButton();
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        butAdvanced.setText("Advanced...");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(butAdvanced, gridBagConstraints);
+
+        butAcept.setText("Acept");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 8;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(butAcept, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 12;
+        gridBagConstraints.gridy = 6;
+        add(filler1, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 6;
+        add(filler2, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 9;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(jdbcServerExplorer, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.weightx = 0.8;
+        add(filler3, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.weighty = 0.1;
+        add(filler4, gridBagConstraints);
+
+        butCancel.setText("Cancel");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 10;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(butCancel, gridBagConstraints);
+
+        butDelete.setText("Delete");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(butDelete, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    public JButton butAcept;
+    public JButton butAdvanced;
+    public JButton butCancel;
+    public JButton butDelete;
+    public Box.Filler filler1;
+    public Box.Filler filler2;
+    public Box.Filler filler3;
+    public Box.Filler filler4;
+    public JDBCConnectionPanel jdbcServerExplorer;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialog.java	(revision 42196)
@@ -0,0 +1,142 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+
+public class VectorialDBConnectionParamsDialog extends VectorialDBConnectionParamsDialogLayout {
+
+    private static final long serialVersionUID = -5493563028200403559L;
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(VectorialDBConnectionParamsDialog.class);
+
+    private boolean isCanceled = false;
+
+    public VectorialDBConnectionParamsDialog() {
+        initComponents();
+    }
+    
+    private void initComponents() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        this.butAdvanced.setText(i18nManager.getTranslation("advanced"));
+        this.butAdvanced.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                doAdvanced();
+            }
+        });
+        this.butAcept.setText(i18nManager.getTranslation("ok"));
+        this.butAcept.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                doAcept();
+            }
+        });
+        this.butCancel.setText(i18nManager.getTranslation("cancel"));
+        this.butCancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                doCancel();
+            }
+        });
+        
+        this.butDelete.setText(i18nManager.getTranslation("del"));
+        this.butDelete.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+            	doDelete();
+            }
+        });
+        this.setPreferredSize(new Dimension(550, 250));
+    }
+    
+    protected void doAdvanced() {
+        JDBCServerExplorerParameters myParams = this.getServerExplorerParameters();
+        try {
+            myParams.validate();
+        } catch (Exception e) {
+            // ignore... only for fill default values
+        }
+
+        try {
+            DynObjectEditor editor = new DynObjectEditor(myParams);
+            editor.editObject(true);
+            this.jdbcServerExplorer.setServerExplorerParameters(myParams);
+        } catch (ServiceException ex) {
+            LOG.error("Error creating a Swing component for the DynObject: "
+                    + myParams, ex);
+        }
+    }
+    
+    protected void doAcept() {
+        this.isCanceled = false;
+        this.setVisible(false);
+    }
+    
+    protected void doCancel() {
+        this.isCanceled = true;
+        this.setVisible(false);
+    }
+    
+    protected void doDelete() {
+    	this.jdbcServerExplorer.clear();
+    	this.jdbcServerExplorer.delete();
+    }
+    
+    public void showDialog() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+        winmgr.showWindow(
+                this, 
+                i18nManager.getTranslation("_Connection_parameters"), 
+                WindowManager.MODE.DIALOG
+        );
+    }
+    
+    public boolean isCanceled() {
+        return this.isCanceled;
+    }
+    
+    public JDBCServerExplorerParameters getServerExplorerParameters() {
+        return this.jdbcServerExplorer.getServerExplorerParameters();
+    }
+    
+    public String getConnectionName() {
+        return this.jdbcServerExplorer.getConnectionName();
+    }
+   
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDBLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDBLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDBLayout.java	(revision 42196)
@@ -0,0 +1,287 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.AbstractListModel;
+import javax.swing.Box;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import org.jdesktop.layout.GroupLayout;
+
+/**
+ *
+ * @author usuario
+ */
+public class WizardDBLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form WizardDBLayout
+     */
+    public WizardDBLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        jLabel1 = new JLabel();
+        jComboBox1 = new JComboBox();
+        jButton1 = new JButton();
+        jScrollPane1 = new JScrollPane();
+        jList1 = new JList();
+        jScrollPane2 = new JScrollPane();
+        jList2 = new JList();
+        jButton2 = new JButton();
+        jButton3 = new JButton();
+        jLabel2 = new JLabel();
+        jLabel3 = new JLabel();
+        jLabel4 = new JLabel();
+        filler1 = new Box.Filler(new Dimension(0, 0), new Dimension(0, 0), new Dimension(32767, 0));
+        jLabel5 = new JLabel();
+        jTextField1 = new JTextField();
+        jLabel6 = new JLabel();
+        jTextField2 = new JTextField();
+        jCheckBox1 = new JCheckBox();
+        jScrollPane3 = new JScrollPane();
+        jTextArea1 = new JTextArea();
+        jLabel7 = new JLabel();
+        jComboBox2 = new JComboBox();
+        jCheckBox2 = new JCheckBox();
+        filler2 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+        filler3 = new Box.Filler(new Dimension(16, 16), new Dimension(16, 16), new Dimension(16, 16));
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        jLabel1.setText("jLabel1");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(jLabel1, gridBagConstraints);
+
+        jComboBox1.setModel(new DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(jComboBox1, gridBagConstraints);
+
+        jButton1.setText("jButton1");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 10;
+        gridBagConstraints.gridy = 4;
+        add(jButton1, gridBagConstraints);
+
+        jList1.setModel(new AbstractListModel() {
+            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
+            public int getSize() { return strings.length; }
+            public Object getElementAt(int i) { return strings[i]; }
+        });
+        jScrollPane1.setViewportView(jList1);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.gridheight = 3;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.3;
+        add(jScrollPane1, gridBagConstraints);
+
+        jList2.setModel(new AbstractListModel() {
+            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
+            public int getSize() { return strings.length; }
+            public Object getElementAt(int i) { return strings[i]; }
+        });
+        jScrollPane2.setViewportView(jList2);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.gridwidth = 5;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.3;
+        add(jScrollPane2, gridBagConstraints);
+
+        jButton2.setText("jButton2");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 10;
+        gridBagConstraints.gridy = 10;
+        add(jButton2, gridBagConstraints);
+
+        jButton3.setText("jButton3");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 8;
+        gridBagConstraints.gridy = 10;
+        add(jButton3, gridBagConstraints);
+
+        jLabel2.setText("jLabel2");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 9;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(jLabel2, gridBagConstraints);
+
+        jLabel3.setText("jLabel3");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(jLabel3, gridBagConstraints);
+
+        jLabel4.setText("jLabel4");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.gridwidth = 5;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(jLabel4, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.weightx = 0.1;
+        add(filler1, gridBagConstraints);
+
+        jLabel5.setText("jLabel5");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 14;
+        add(jLabel5, gridBagConstraints);
+
+        jTextField1.setText("jTextField1");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(jTextField1, gridBagConstraints);
+
+        jLabel6.setText("jLabel6");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 16;
+        add(jLabel6, gridBagConstraints);
+
+        jTextField2.setText("jTextField2");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(jTextField2, gridBagConstraints);
+
+        jCheckBox1.setText("jCheckBox1");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 18;
+        gridBagConstraints.gridwidth = 9;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(jCheckBox1, gridBagConstraints);
+
+        jTextArea1.setColumns(20);
+        jTextArea1.setRows(5);
+        jScrollPane3.setViewportView(jTextArea1);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 20;
+        gridBagConstraints.gridwidth = 9;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.1;
+        add(jScrollPane3, gridBagConstraints);
+
+        jLabel7.setText("jLabel7");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 22;
+        add(jLabel7, gridBagConstraints);
+
+        jComboBox2.setModel(new DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 22;
+        gridBagConstraints.gridwidth = 7;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(jComboBox2, gridBagConstraints);
+
+        jCheckBox2.setText("jCheckBox2");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 24;
+        gridBagConstraints.gridwidth = 9;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        add(jCheckBox2, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        add(filler2, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 12;
+        gridBagConstraints.gridy = 0;
+        add(filler3, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    public Box.Filler filler1;
+    public Box.Filler filler2;
+    public Box.Filler filler3;
+    public JButton jButton1;
+    public JButton jButton2;
+    public JButton jButton3;
+    public JCheckBox jCheckBox1;
+    public JCheckBox jCheckBox2;
+    public JComboBox jComboBox1;
+    public JComboBox jComboBox2;
+    public JLabel jLabel1;
+    public JLabel jLabel2;
+    public JLabel jLabel3;
+    public JLabel jLabel4;
+    public JLabel jLabel5;
+    public JLabel jLabel6;
+    public JLabel jLabel7;
+    public JList jList1;
+    public JList jList2;
+    public JScrollPane jScrollPane1;
+    public JScrollPane jScrollPane2;
+    public JScrollPane jScrollPane3;
+    public JTextArea jTextArea1;
+    public JTextField jTextField1;
+    public JTextField jTextField2;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/MyExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/MyExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/MyExplorer.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
+
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class MyExplorer {
+    private DBServerExplorerParameters dbExplorerParameters;
+    private String name;
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public DBServerExplorerParameters getDbSeverExplorerParameters() {
+        return dbExplorerParameters;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param dbExplorerParameters DOCUMENT ME!
+     */
+    public void setDbExplorerParameters(
+        DBServerExplorerParameters dbExplorerParameters) {
+        this.dbExplorerParameters = dbExplorerParameters;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param name DOCUMENT ME!
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+	public String toString() {
+		return getName();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/MyExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDB.java	(revision 42196)
@@ -0,0 +1,714 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.BorderLayout;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.prepareAction.PrepareContext;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.geodb.ExtDB_Spatial;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class WizardDB extends WizardPanel implements ActionListener,
+        ListSelectionListener {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7045762275505941695L;
+    private static final String WIZARD_TAB_NAME = "DB";
+    private static Logger logger = LoggerFactory.getLogger(WizardDB.class
+            .getName());
+
+    private JPanel namePanel = null;
+    private JPanel tablesPanel = null;
+    private JScrollPane tablesScrollPane = null;
+    private AvailableTablesCheckBoxList tablesList = null;
+    private JComboBox datasourceComboBox = null;
+    private UserSelectedFieldsPanel fieldsPanel = null;
+    private UserSelectedFieldsPanel emptyFieldsPanel = null;
+    private JButton dbButton = null;
+    private DBServerExplorerParameters dbExplorerParameters;
+    private DBServerExplorer dbExplorer = null;
+
+    private UserTableSettingsPanel settingsPanel = null;
+    protected UserTableSettingsPanel emptySettingsPanel = null;
+    private PrepareContext prepareDSContext;
+
+    public WizardDB() {
+        super();
+        initialize();
+        this.addAncestorListener(new AncestorListener() {
+            public void ancestorAdded(AncestorEvent ae) {
+            }
+
+            public void ancestorRemoved(AncestorEvent ae) {
+                if ( dbExplorer != null ) {
+                    dbExplorer.dispose();
+                    dbExplorer = null;
+                }
+            }
+
+            public void ancestorMoved(AncestorEvent ae) {
+            }
+        });
+    }
+
+    public DBServerExplorer getServerExplorer() {
+        return this.dbExplorer;
+    }
+
+    protected void initialize() {
+        setTabName(WIZARD_TAB_NAME);
+        setLayout(null);
+        setSize(512, 478);
+
+        emptyFieldsPanel = new UserSelectedFieldsPanel(null, true, this);
+        add(emptyFieldsPanel);
+
+        add(getNamePanel(), null);
+        loadVectorialDBDatasourcesCombo(null);
+
+        add(getTablesPanel(), null);
+
+        emptySettingsPanel = createSettingsPanel(null);
+        add(emptySettingsPanel);
+
+    }
+
+    @SuppressWarnings("rawtypes")
+    private void loadVectorialDBDatasourcesCombo(MyExplorer sel) {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool explorersPool = dataManager.getDataServerExplorerPool();
+        Iterator it = explorersPool.iterator();
+        getDatasourceComboBox().removeAllItems();
+        getDatasourceComboBox().addItem("");
+        while ( it.hasNext() ) {
+            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
+            MyExplorer myExplorer = new MyExplorer();
+            myExplorer.setDbExplorerParameters((DBServerExplorerParameters) entry.getExplorerParameters());
+            myExplorer.setName(entry.getName());
+            getDatasourceComboBox().addItem(myExplorer);
+            if ( sel != null && sel.getName().equalsIgnoreCase(myExplorer.getName()) ) {
+                getDatasourceComboBox().setSelectedItem(myExplorer);
+            }
+        }
+
+    }
+
+    public void initWizard() {
+    }
+
+    @Override
+    public void execute() {
+        executeWizard();
+    }
+
+    @Override
+    public Object executeWizard() {
+        TablesListItem[] tables = getSelectedTables();
+
+        DataManager man = DALLocator.getDataManager();
+        FeatureStore store;
+
+        String docName;
+        TableDocument document;
+        Project project = ProjectManager.getInstance().getCurrentProject();
+
+        ApplicationManager appGvSIGMan = ApplicationLocator.getManager();
+        PrepareContext context = this.getPrepareDataStoreContext();
+        DBStoreParameters storeParams;
+        List<TableDocument> tabledocs
+                = new ArrayList<TableDocument>(tables.length);
+        for ( TablesListItem table : tables ) {
+            storeParams = getParameterForTable(table);
+
+            try {
+                storeParams = (DBStoreParameters) appGvSIGMan
+                        .prepareOpenDataStoreParameters(storeParams, context);
+            } catch (Exception e2) {
+                NotificationManager.addError(e2);
+                continue;
+            }
+
+            UserTableSettingsPanel userTableSettingsPanel = table
+                    .getUserTableSettingsPanel();
+
+            docName = userTableSettingsPanel.getUserLayerName();
+            try {
+                store = (FeatureStore) man.openStore(storeParams.getDataStoreName(), storeParams);
+            } catch (Exception e) {
+                NotificationManager.addError(e);
+                return null;
+            }
+
+            try {
+                appGvSIGMan.pepareOpenDataSource(
+                        store, context);
+            } catch (Exception e) {
+                NotificationManager.addError(e);
+                store.dispose();
+                return null;
+            }
+
+            document = (TableDocument) ProjectManager.getInstance().createDocument(TableManager.TYPENAME, docName);
+            document.setStore(store);
+            // project.add(document);
+            tabledocs.add(document);
+        }
+        return tabledocs;
+    }
+
+    protected DBStoreParameters getParameterForTable(TablesListItem table) {
+        DBStoreParameters parameters = table.getParameters();
+
+        UserTableSettingsPanel userTableSettingsPanel = table
+                .getUserTableSettingsPanel();
+
+        String fidField = userTableSettingsPanel.getIdFieldName();
+        //IF is a multiple PK, remove the {} symbols
+        if ( fidField.startsWith("{") && fidField.endsWith("}") ) {
+            fidField = fidField.substring(1, fidField.length() - 1);
+        }
+        String[] pkFields = fidField.split(",");
+
+        String[] fields = table.getUserSelectedFieldsPanel()
+                .getUserSelectedFields(pkFields, null);
+
+        if ( userTableSettingsPanel.isSqlActive() ) {
+            String whereClause = userTableSettingsPanel
+                    .getWhereClause();
+            parameters.setBaseFilter(whereClause);
+        } else {
+            parameters.setBaseFilter("");
+        }
+
+        parameters.setFields(fields);
+
+        return parameters;
+
+    }
+
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    protected TablesListItem[] getSelectedTables() {
+        int count = tablesList.getModel().getSize();
+        ArrayList resp = new ArrayList();
+
+        for ( int i = 0; i < count; i++ ) {
+            TablesListItem item = (TablesListItem) tablesList.getModel()
+                    .getElementAt(i);
+
+            if ( item.isSelected() ) {
+                resp.add(item);
+            }
+        }
+
+        return (TablesListItem[]) resp.toArray(new TablesListItem[0]);
+    }
+
+    /**
+     * This method initializes namePanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getNamePanel() {
+        if ( namePanel == null ) {
+            namePanel = new JPanel();
+            namePanel.setLayout(null);
+            namePanel.setBounds(new java.awt.Rectangle(5, 5, 501, 51));
+            namePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
+                    null, PluginServices.getText(this, "choose_connection"),
+                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
+                    null));
+            namePanel.add(getDatasourceComboBox(), null);
+            namePanel.add(getJdbcButton(), null);
+        }
+
+        return namePanel;
+    }
+
+    /**
+     * This method initializes tablesPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getTablesPanel() {
+        if ( tablesPanel == null ) {
+            tablesPanel = new JPanel();
+            tablesPanel.setLayout(new BorderLayout());
+            tablesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
+                    null, PluginServices.getText(this, "choose_table"),
+                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
+                    null));
+            tablesPanel.setBounds(new java.awt.Rectangle(5, 55, 246, 166));
+            tablesPanel
+                    .add(getTablesScrollPane(), java.awt.BorderLayout.CENTER);
+        }
+
+        return tablesPanel;
+    }
+
+    /**
+     * This method initializes settingsPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    /**
+     * This method initializes tablesScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getTablesScrollPane() {
+        if ( tablesScrollPane == null ) {
+            tablesScrollPane = new JScrollPane();
+            tablesScrollPane.setViewportView(getTablesList());
+        }
+
+        return tablesScrollPane;
+    }
+
+    /**
+     * This method initializes tablesList
+     *
+     * @return javax.swing.JList
+     */
+    protected AvailableTablesCheckBoxList getTablesList() {
+        if ( tablesList == null ) {
+            tablesList = new AvailableTablesCheckBoxList(this);
+            tablesList.addListSelectionListener(this);
+            tablesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        }
+
+        return tablesList;
+    }
+
+    /**
+     * This method initializes layerNameTextField
+     *
+     * @return javax.swing.JTextField
+     */
+    /**
+     * This method initializes jComboBox
+     *
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getDatasourceComboBox() {
+        if ( datasourceComboBox == null ) {
+            datasourceComboBox = new JComboBox();
+            datasourceComboBox
+                    .setBounds(new java.awt.Rectangle(10, 20, 446, 21));
+            datasourceComboBox.addActionListener(this);
+        }
+
+        return datasourceComboBox;
+    }
+
+    public void actionPerformed(ActionEvent arg0) {
+        if ( datasourceComboBox.getItemCount() == 0 ) {
+            setEmptyPanels();
+        }
+        Object src = arg0.getSource();
+
+        if ( src == datasourceComboBox ) {
+            Object selected = datasourceComboBox.getSelectedItem();
+            if ( selected instanceof MyExplorer ) {
+                MyExplorer sel_obj = (MyExplorer) selected;
+
+                getDatasourceComboBox().repaint();
+                dbExplorerParameters = sel_obj.getDbSeverExplorerParameters();
+                updateTableList(dbExplorerParameters);
+            }
+
+        } else if ( src == dbButton ) {
+            MyExplorer sel = addNewConnection();
+
+            if ( sel != null ) {
+                dbExplorerParameters = sel.getDbSeverExplorerParameters();
+                loadVectorialDBDatasourcesCombo(sel);
+                getDatasourceComboBox().setSelectedItem(sel);
+
+            }
+        }
+
+    }
+
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private MyExplorer addNewConnection() {
+        MyExplorer myExplorer = new MyExplorer();
+        DBServerExplorerParameters resp = null;
+
+        
+        VectorialDBConnectionParamsDialog newco = new VectorialDBConnectionParamsDialog();
+        newco.showDialog();
+
+        if ( !newco.isCanceled()) {
+            myExplorer.setDbExplorerParameters(newco.getServerExplorerParameters());
+            myExplorer.setName(newco.getConnectionName());
+            loadVectorialDBDatasourcesCombo(myExplorer);
+            return myExplorer;
+        } else {
+            return null;
+        }
+    }
+
+    protected TablesListItem createTabeListItem(DBStoreParameters param) {
+        return new TablesListItem(param, this);
+    }
+
+    /**
+     * Subclasses of this wizard will return a filtered list
+     * if necessary
+     *
+     * @param explorer
+     * @return
+     * @throws DataException
+     */
+    protected List getTableList(DBServerExplorer explorer) throws DataException {
+        return explorer.list();
+    }
+
+    @SuppressWarnings("rawtypes")
+    protected void updateTableList(
+            DBServerExplorerParameters dbSeverExplorerParameters2) {
+        if ( dbSeverExplorerParameters2 == null ) {
+            return;
+        }
+        DataManager dm = DALLocator.getDataManager();
+        String err_msg = Messages.getText("connection_error");
+        try {
+            dbExplorer = (DBServerExplorer) dm.openServerExplorer(dbSeverExplorerParameters2.getExplorerName(), dbSeverExplorerParameters2);
+
+            List parameters = getTableList(dbExplorer);
+
+            DefaultListModel lmodel = new DefaultListModel();
+
+            Iterator iter = parameters.iterator();
+            DBStoreParameters param;
+            int count = 0;
+            while ( iter.hasNext() ) {
+                param = (DBStoreParameters) iter.next();
+                lmodel.addElement(createTabeListItem(param));
+                count++;
+            }
+
+            getTablesList().setModel(lmodel);
+            getTablesScrollPane().setViewportView(tablesList);
+            tablesScrollPane.updateUI();
+        } catch (Exception e) {
+            logger.info("Error while getting table names: " + e.getMessage(),e);
+
+            String remove_question = Messages.getText(
+                    "_Remove_connection_parameters_from_list_question");
+
+            int opt = JOptionPane.showConfirmDialog(
+                    ApplicationLocator.getManager().getRootComponent(),
+                    err_msg + ": " + getLastMessage(e) + "\n" + remove_question,
+                    err_msg,
+                    JOptionPane.YES_NO_OPTION);
+
+            if ( opt == JOptionPane.YES_OPTION ) {
+                removeDBPArameters(dbSeverExplorerParameters2);
+                // dbExplorer.
+                loadVectorialDBDatasourcesCombo(null);
+            }
+        }
+
+    }
+
+    /**
+     * Removes DB parameters from list of pre-configured DB parameters
+     *
+     * @param dbSeverExplorerParameters2
+     */
+    private void removeDBPArameters(
+            DBServerExplorerParameters dbparams) {
+
+        PluginsManager manager = PluginsLocator.getManager();
+        DynObject values = manager.getPlugin(ExtDB_Spatial.class).getPluginProperties();
+        Map connections = (Map) values.getDynValue("db_connections");
+        if ( connections == null ) {
+            return;
+        }
+
+        DBServerExplorerParameters item = null;
+        Iterator it = connections.entrySet().iterator();
+        List<String> toremove = new ArrayList();
+
+        while ( it.hasNext() ) {
+            Map.Entry entry = (Entry) it.next();
+            item = (DBServerExplorerParameters) entry.getValue();
+            if ( dbparams.equals(item) ) {
+                toremove.add((String) entry.getKey());
+            }
+        }
+
+        if ( toremove.size() == 0 ) {
+            return;
+        }
+
+        for ( int i = 0; i < toremove.size(); i++ ) {
+            connections.remove(toremove.get(i));
+        }
+        values.setDynValue("db_connections", connections);
+
+    }
+
+    public void valueChanged(ListSelectionEvent arg0) {
+        Object src = arg0.getSource();
+
+        if ( src == tablesList ) {
+            TablesListItem selected = (TablesListItem) tablesList
+                    .getSelectedValue();
+
+            setSettingsPanels(selected);
+            checkFinishable();
+        }
+    }
+
+    public boolean areSettingsValid() {
+        int count = tablesList.getModel().getSize();
+
+        boolean at_least_one = false;
+        boolean resp = true;
+
+        for ( int i = 0; i < count; i++ ) {
+            TablesListItem item = (TablesListItem) tablesList.getModel()
+                    .getElementAt(i);
+
+            if ( item.isSelected() ) {
+                at_least_one = true;
+            }
+
+            if ( item.disturbsWizardValidity() ) {
+                resp = false;
+            }
+        }
+
+        return (at_least_one && resp);
+    }
+
+    public void checkFinishable() {
+        boolean finishable = areSettingsValid();
+        callStateChanged(finishable);
+    }
+
+    /**
+     * This method initializes jdbcButton
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getJdbcButton() {
+        if ( dbButton == null ) {
+            dbButton = new JButton();
+            dbButton.addActionListener(this);
+            dbButton.setToolTipText(PluginServices.getText(this,
+                    "add_connection"));
+            dbButton.setBounds(new java.awt.Rectangle(465, 20, 26, 21));
+
+            dbButton.setIcon(IconThemeHelper.getImageIcon("geodb-connection-add"));
+        }
+
+        return dbButton;
+    }
+
+    private void showConnectionErrorMessage(String _msg) {
+        String msg = (_msg.length() > 300) ? "" : (": " + _msg);
+        String title = PluginServices.getText(this, "connection_error");
+        JOptionPane.showMessageDialog(this, title + msg, title,
+                JOptionPane.ERROR_MESSAGE);
+    }
+
+    private java.net.URL createResourceUrl(String path) {
+        return getClass().getClassLoader().getResource(path);
+    }
+
+    public void setSettingsPanels(TablesListItem actTable) {
+        if ( actTable == null ) {
+            setEmptyPanels();
+
+            return;
+        }
+        fieldsPanel = actTable.getUserSelectedFieldsPanel();
+
+        removeFieldPanels();
+        add(fieldsPanel);
+        fieldsPanel.repaint();
+        removeSettingsPanels();
+        add(emptySettingsPanel);
+
+        settingsPanel = createSettingsPanel(actTable);
+
+        removeSettingsPanels();
+        add(settingsPanel);
+        settingsPanel.repaint();
+
+        repaint();
+    }
+
+    protected UserTableSettingsPanel createSettingsPanel(TablesListItem actTable) {
+        if ( actTable == null ) {
+            return new UserTableSettingsPanel(null, "", true, this, null);
+        }
+
+        return actTable.getUserTableSettingsPanel();
+    }
+
+    protected void setEmptyPanels() {
+        removeFieldPanels();
+        add(emptyFieldsPanel);
+        fieldsPanel = emptyFieldsPanel;
+
+        repaint();
+    }
+
+    private void removeFieldPanels() {
+        for ( int i = 0; i < getComponentCount(); i++ ) {
+            if ( getComponent(i) instanceof UserSelectedFieldsPanel ) {
+                remove(i);
+            }
+        }
+    }
+
+    public DataStoreParameters[] getParameters() {
+        try {
+            TablesListItem[] selected = getSelectedTables();
+            int count = selected.length;
+            DBStoreParameters[] dbParameters = new DBStoreParameters[count];
+
+            for ( int i = 0; i < count; i++ ) {
+                TablesListItem item = selected[i];
+
+                dbParameters[i] = getParameterForTable(item);
+            }
+
+            return dbParameters;// layerArrayToGroup(all_layers, groupName);
+        } catch (Exception e) {
+            logger.info("Error while creating jdbc layer: " + e.getMessage(), e);
+            NotificationManager.addError("Error while loading layer: "
+                    + e.getMessage(), e);
+        }
+
+        return null;
+    }
+
+    /**
+     * This method process the errors found in a layer
+     *
+     * @param lyr
+     * @param mapControl
+     */
+    protected void processErrorsOfLayer(FLayer lyr, MapControl mapControl) {
+        this.getMapContext().callNewErrorEvent(null);
+    }
+
+    private void removeSettingsPanels() {
+        for ( int i = 0; i < getComponentCount(); i++ ) {
+            if ( getComponent(i) instanceof UserTableSettingsPanel ) {
+                remove(i);
+            }
+        }
+    }
+
+    protected PrepareContext getPrepareDataStoreContext() {
+        if ( this.prepareDSContext == null ) {
+            this.prepareDSContext = new PrepareContext() {
+                public Window getOwnerWindow() {
+                    return null;
+                }
+
+                public IProjection getViewProjection() {
+                    return WizardDB.this.getMapContext().getProjection();
+                }
+
+            };
+        }
+        return this.prepareDSContext;
+    }
+
+    @Override
+    public void close() {
+
+    }
+
+    protected String getLastMessage(Throwable ex) {
+
+        Throwable p = ex;
+        while ( p.getCause() != null && p.getCause() != p ) {
+            p = p.getCause();
+        }
+        return p.getMessage();
+    }
+
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDB.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableFieldsCheckBoxList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableFieldsCheckBoxList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableFieldsCheckBoxList.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.Component;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListSelectionModel;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+
+
+/**
+ * Utility class to keep the list of available fields.
+ *
+ * @author jldominguez
+ *
+ */
+public class AvailableFieldsCheckBoxList extends JList {
+    protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
+
+    public AvailableFieldsCheckBoxList() {
+        setCellRenderer(new CellRenderer());
+
+        addMouseListener(new MouseAdapter() {
+                public void mousePressed(MouseEvent e) {
+                    int index = locationToIndex(e.getPoint());
+
+                    if (index == -1) {
+                        return;
+                    }
+
+                    FieldsListItem sel = (FieldsListItem) getModel()
+                                                              .getElementAt(index);
+
+                    if ((e.getClickCount() == 2) || (e.getX() < 15)) {
+                        sel.setSelected(!sel.isSelected());
+                    }
+                }
+            });
+
+        setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+    }
+
+    public Object[] getCheckedItems() {
+        int size = getModel().getSize();
+        ArrayList resp = new ArrayList();
+
+        for (int i = 0; i < size; i++) {
+            FieldsListItem item = (FieldsListItem) getModel().getElementAt(i);
+
+            if (item.isSelected()) {
+                resp.add(item);
+            }
+        }
+
+        return resp.toArray();
+    }
+
+    public void checkAll(boolean b) {
+        int size = getModel().getSize();
+
+        for (int i = 0; i < size; i++) {
+            FieldsListItem item = (FieldsListItem) getModel().getElementAt(i);
+            item.setSelected(b);
+        }
+
+        updateUI();
+    }
+
+    protected class CellRenderer implements ListCellRenderer {
+        public Component getListCellRendererComponent(JList list, Object value,
+            int index, boolean isSelected, boolean cellHasFocus) {
+            FieldsListItem checkbox = (FieldsListItem) value;
+            checkbox.setBackground(isSelected ? getSelectionBackground()
+                                              : getBackground());
+            checkbox.setForeground(isSelected ? getSelectionForeground()
+                                              : getForeground());
+            checkbox.setEnabled(isEnabled());
+            checkbox.setFont(getFont());
+            checkbox.setFocusPainted(false);
+            checkbox.setBorderPainted(true);
+            checkbox.setBorder(isSelected
+                ? UIManager.getBorder("List.focusCellHighlightBorder")
+                : noFocusBorder);
+
+            return checkbox;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableFieldsCheckBoxList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableTablesCheckBoxList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableTablesCheckBoxList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableTablesCheckBoxList.java	(revision 42196)
@@ -0,0 +1,138 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.Component;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListSelectionModel;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+
+
+
+/**
+ * Utility class to keep the list of available tables.
+ *
+ * @author jldominguez
+ *
+ */
+public class AvailableTablesCheckBoxList extends JList {
+    protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(AvailableTablesCheckBoxList.class);
+    private WizardDB parent = null;
+    private TablesListItem actingTable = null;
+
+    public AvailableTablesCheckBoxList(WizardDB p) {
+        parent = p;
+
+        setCellRenderer(new CellRenderer());
+
+        addMouseListener(new MouseAdapter() {
+                public void mousePressed(MouseEvent e) {
+                    int index = locationToIndex(e.getPoint());
+
+                    if (index == -1) {
+                        return;
+                    }
+
+                    actingTable = (TablesListItem) getModel().getElementAt(index);
+
+                    if ((e.getClickCount() == 2) || (e.getX() < 15)) {
+                        if (!actingTable.isActivated()) {
+                            actingTable.activate();
+                        }
+
+                        actingTable.setSelected(!actingTable.isSelected());
+
+                        if (actingTable.isSelected()) {
+                            actingTable.setEnabledPanels(true);
+                        }
+                        else {
+                            actingTable.setEnabledPanels(false);
+                        }
+
+                        repaint();
+                    }
+
+                    try {
+                        parent.setSettingsPanels(actingTable);
+                        parent.checkFinishable();
+                    }
+                    catch (Exception e1) {
+                        actingTable.setEnabledPanels(false);
+                        actingTable.setSelected(false);
+                    LOG.info(
+                        "Error while setting selected table: " +
+                            e1.getMessage(), e1);
+                        showConnectionErrorMessage(e1.getMessage());
+                    }
+                }
+            });
+
+        setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+    }
+
+    private void showConnectionErrorMessage(String _msg) {
+    	if (_msg==null) {
+			_msg="";
+		}
+        String msg = (_msg.length() > 300) ? "" : (": " + _msg);
+        String title = PluginServices.getText(this, "connection_error");
+        JOptionPane.showMessageDialog(this, title + msg, title,
+            JOptionPane.ERROR_MESSAGE);
+    }
+
+    protected class CellRenderer implements ListCellRenderer {
+        public Component getListCellRendererComponent(JList list, Object value,
+            int index, boolean isSelected, boolean cellHasFocus) {
+            TablesListItem checkbox = (TablesListItem) value;
+            checkbox.setBackground(isSelected ? getSelectionBackground()
+                                              : getBackground());
+            checkbox.setForeground(isSelected ? getSelectionForeground()
+                                              : getForeground());
+            checkbox.setEnabled(isEnabled());
+            checkbox.setFont(getFont());
+            checkbox.setFocusPainted(false);
+            checkbox.setBorderPainted(true);
+            checkbox.setBorder(isSelected
+                ? UIManager.getBorder("List.focusCellHighlightBorder")
+                : noFocusBorder);
+
+            return checkbox;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/AvailableTablesCheckBoxList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardVectorialDB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardVectorialDB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardVectorialDB.java	(revision 42196)
@@ -0,0 +1,397 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.Window;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.prepareAction.PrepareContext;
+import org.gvsig.app.prepareAction.PrepareContextView;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayerFactory;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+
+/**
+ * Driver-independent GeoDB wizard. Queries the drivers to fill GUI controls.
+ * Multi-table selection available.
+ *
+ * @author jldominguez
+ *
+ */
+public class WizardVectorialDB extends WizardDB {
+    private static final long serialVersionUID = -5002685263220038989L;
+
+    private static Logger logger = LoggerFactory
+			.getLogger(WizardVectorialDB.class.getName());
+
+    private static final String GEODB_WIZARD_TAB_NAME = "GeoDB";
+	private DefaultViewPanel view = null;
+
+	private PrepareContextView prepareContext;
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    protected void initialize() {
+		super.initialize();
+        setTabName(GEODB_WIZARD_TAB_NAME);
+        setLayout(null);
+        setSize(512, 478);
+
+        IWindow iw = PluginServices.getMDIManager().getActiveWindow();
+
+        if (iw == null) {
+            return;
+        }
+
+        if ((iw instanceof DefaultViewPanel)) {
+        	 view = (DefaultViewPanel) iw;
+             setMapCtrl(view.getMapControl());
+        }
+    }
+    
+    
+    
+    protected List getTableList(DBServerExplorer explorer) throws DataException {
+        return explorer.list(DBServerExplorer.MODE_GEOMETRY);
+    }
+
+
+	protected TablesListItem createTabeListItem(DBStoreParameters param) {
+		return new TablesListItemVectorial(param, getMapCtrl(),this);
+	}
+
+	public void setSettingsPanels(TablesListItem actTable) {
+		super.setSettingsPanels(actTable);
+	}
+
+	protected UserTableSettingsPanel createSettingsPanel(
+			TablesListItem actTable) {
+		if (actTable == null) {
+			return new UserTableSettingsVectorialPanel(null, null, "",
+					getMapCtrl(), true, this, null, null);
+		}
+		String abrev = null;
+		if (getMapCtrl() != null) {
+			abrev = getMapCtrl().getViewPort().getProjection().getAbrev();
+		}
+
+		return ((TablesListItemVectorial) actTable)
+				.getUserTableSettingsPanel(abrev);
+	}
+
+
+	public DataStoreParameters[] getParameters() {
+		try {
+			TablesListItem[] selected = getSelectedTables();
+			int count = selected.length;
+			DBStoreParameters[] dbParameters = new DBStoreParameters[count];
+			String strEPSG = null;
+			if (getMapCtrl() != null) {
+				strEPSG = getMapCtrl().getViewPort().getProjection().getAbrev();
+			}
+
+			for (int i = 0; i < count; i++) {
+				TablesListItemVectorial item = (TablesListItemVectorial) selected[i];
+
+				dbParameters[i] = getParameterForTable(item);
+			}
+
+			return dbParameters;// layerArrayToGroup(all_layers, groupName);
+		} catch (Exception e) {
+			logger.info("Error while creating jdbc layer: " + e.getMessage(), e);
+			NotificationManager.addError(
+			    "Error while loading layer: "
+					+ e.getMessage(), e);
+		}
+
+		return null;
+	}
+
+	public void execute() {
+		MapControl mapControl = this.getMapCtrl();
+		IProjection proj = null;
+		TablesListItem[] tables = getSelectedTables();
+
+
+		List all_layers = new ArrayList();
+		String strEPSG = mapControl.getViewPort().getProjection().getAbrev();
+		LayerFactory layerFactory = LayerFactory.getInstance();
+		String groupName = null;
+		Envelope env = null;
+		DBStoreParameters parameter;
+		TablesListItem table;
+		FeatureStore store, storeToAdd;
+
+		DataManager man = DALLocator.getDataManager();
+
+		ApplicationManager appGvSIGMan = ApplicationLocator.getManager();
+		PrepareContext context = this.getPrepareDataStoreContext();
+
+
+        try {
+
+            FLayer layer;
+            for (int i = 0; i < tables.length; i++) {
+                table = tables[i];
+                UserTableSettingsVectorialPanel userTableSettingsPanel =
+                    (UserTableSettingsVectorialPanel) table
+                        .getUserTableSettingsPanel();
+                parameter = getParameterForTable(table);
+                if (i == 0) {
+                    groupName =
+                        parameter.getDBName() + " (" + parameter.getHost()
+                            + ")";
+                }
+                try {
+                    parameter =
+                        (DBStoreParameters) appGvSIGMan
+                            .prepareOpenDataStoreParameters(parameter, context);
+
+                } catch (Exception e2) {
+                    NotificationManager.addError(e2);
+                    continue;
+                }
+
+                try {
+                    store = (FeatureStore) man.openStore(
+                    		parameter.getDataStoreName(),
+                    		parameter);
+                } catch (Exception e) {
+                    logger.error("While opening DB store.", e);
+                    return;
+                }
+
+                try {
+                    storeToAdd =
+                        (FeatureStore) appGvSIGMan.pepareOpenDataSource(store,
+                            context);
+                } catch (Exception e) {
+                    NotificationManager.addError(e);
+                    store.dispose();
+                    continue;
+                }
+
+                try {
+
+                    layer =
+                        layerFactory.createLayer(
+                            userTableSettingsPanel.getUserLayerName(),
+                            storeToAdd);
+                    all_layers.add(layer);
+                    if (env == null) {
+                        env = layer.getFullEnvelope();
+                    } else {
+                        env.add(layer.getFullEnvelope());
+                    }
+                    storeToAdd.dispose();
+                } catch (Exception e) {
+                    storeToAdd.dispose();
+                    NotificationManager.addError(e);
+                }
+            }
+
+            MapContext mc = mapControl.getMapContext();
+            FLayers root = mapControl.getMapContext().getLayers();
+            if (all_layers.size() > 1) {
+                FLayers group = new FLayers();// (mc,root);
+                group.setMapContext(mc);
+                group.setParentLayer(root);
+                group.setName(groupName);
+
+                Iterator iter = all_layers.iterator();
+                while (iter.hasNext()) {
+                    group.addLayer((FLayer) iter.next());
+                }
+
+                if ((group != null) && !(group.isOk())) {
+                    // if the layer is not okay (it has errors) process them
+                    processErrorsOfLayer(group, mapControl);
+                }
+
+                if (group != null) {
+                    group.setVisible(true);
+                    mapControl.getMapContext().beginAtomicEvent();
+                    try {
+                        // checkProjection(group, mapControl.getViewPort());
+                        try {
+                            mapControl.getMapContext().getLayers()
+                                .addLayer(group);
+                            group.dispose();
+                        } catch (CancelationException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        }
+                        if (mapControl.getViewPort().getExtent() == null) {
+                            mapControl.getViewPort().setEnvelope(env);
+                        }
+                    } finally {
+                        mapControl.getMapContext().endAtomicEvent();
+                    }
+                    return;
+                }
+            } else
+                if (all_layers.size() == 1) {
+                    layer = (FLayer) all_layers.get(0);
+                    if (!(layer.isOk())) {
+                        // if the layer is not okay (it has errors) process them
+                        processErrorsOfLayer(layer, mapControl);
+                    }
+
+                    layer.setVisible(true);
+                    mapControl.getMapContext().beginAtomicEvent();
+                    // checkProjection(all_layers[0], mapControl.getViewPort());
+                    try {
+                        try {
+                            mapControl.getMapContext().getLayers()
+                                .addLayer(layer);
+                        } catch (CancelationException e) {
+                            return;
+                        }
+
+                        if (mapControl.getViewPort().getExtent() == null) {
+                            try {
+                                mapControl.getViewPort().setEnvelope(
+                                    layer.getFullEnvelope());
+                            } catch (ReadException e) {
+                                NotificationManager.addError(e);
+                                return;
+                            }
+                        }
+                    } finally {
+
+                        mapControl.getMapContext().endAtomicEvent();
+                    }
+                    return;
+                }
+        } finally {
+            // Dispose all created layers. If they have been included into
+            // a FLayers object, they will have been binded there.
+            for (int i = 0; i < all_layers.size(); i++) {
+                FLayer layer = (FLayer) all_layers.get(i);
+                layer.dispose();
+            }
+		}
+	}
+
+	protected PrepareContext getPrepareDataStoreContext() {
+		if (this.prepareContext == null) {
+			this.prepareContext = new PrepareContextView() {
+				public Window getOwnerWindow() {
+					return null;
+				}
+
+				public MapControl getMapControl() {
+					return WizardVectorialDB.this
+							.getMapCtrl();
+				}
+				
+				public IProjection getViewProjection() {
+					MapControl mapControl = getMapControl();
+					if (mapControl!=null){
+						return mapControl.getProjection();
+					}
+					return null;
+				}
+
+			};
+		}
+		return this.prepareContext;
+	}
+
+	protected DBStoreParameters getParameterForTable(TablesListItem table) {
+		DBStoreParameters parameters = table.getParameters();
+
+		UserTableSettingsVectorialPanel userTableSettingsPanel = (UserTableSettingsVectorialPanel) table
+				.getUserTableSettingsPanel();
+
+		Envelope _wa = userTableSettingsPanel.getWorkingArea();
+
+		String geomField = userTableSettingsPanel.getGeoFieldName();
+		String fidField = userTableSettingsPanel.getIdFieldName();
+        //IF is a multiple PK, remove the {} symbols
+        if (fidField.startsWith("{") && fidField.endsWith("}")) {
+            fidField = fidField.substring(1, fidField.length()-1);
+        }
+        String[] pkFields = fidField.split(",");        
+            
+        String[] fields = table.getUserSelectedFieldsPanel()
+                .getUserSelectedFields(pkFields, geomField);
+
+		if (userTableSettingsPanel.isSqlActive()) {
+			String whereClause = userTableSettingsPanel.getWhereClause();
+			parameters.setBaseFilter(whereClause);
+		} else {
+			parameters.setBaseFilter("");
+		}
+
+		parameters.setFields(fields);
+		parameters.setDefaultGeometryField(geomField);
+		if (_wa != null) {
+			parameters.setWorkingArea(_wa);
+		}
+		
+        // ======= Setting PK from combo box
+        if (pkFields != null) {
+            parameters.setPkFields(pkFields);
+        }
+        // =========================
+
+		IProjection proj_selected_by_user = userTableSettingsPanel.getProjection();
+		parameters.setCRS(proj_selected_by_user);
+
+		return parameters;
+
+	}
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardVectorialDB.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldsListItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldsListItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldsListItem.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import javax.swing.JCheckBox;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+
+
+/**
+ * Used to instantiate field list items. Shows the database dependent type name.
+ *
+ * @author jldominguez
+ *
+ */
+public class FieldsListItem extends JCheckBox {
+    private String name = "[No name]";
+    private String type = "[No type]";
+
+    public FieldsListItem(FeatureAttributeDescriptor descriptor) {
+
+    	name = descriptor.getName();
+        type = descriptor.getDataTypeName();
+        setText(toString());
+        setSelected(true);
+    }
+
+    public String toString() {
+        return name + " [" + type + "]";
+    }
+
+    public String getName() {
+        return name;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldsListItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldComboItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldComboItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldComboItem.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import org.cresques.cts.IProjection;
+
+
+/**
+ * Utility class to deal with combo boxes.
+ * Optionally stores the IProjection of the data in the
+ * field (if it's a geometry field)
+ *
+ * @author jldominguez
+ *
+ */
+public class FieldComboItem {
+    
+    private String name = "";
+    private IProjection proj = null;
+
+    public FieldComboItem(String _name) {
+        name = _name;
+    }
+
+    public FieldComboItem(String _name, IProjection _proj) {
+        name = _name;
+        proj = _proj;
+    }
+
+    public String toString() {
+        return name;
+    }
+    
+    public IProjection getProjection() {
+        return proj;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/FieldComboItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialogLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialogLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/VectorialDBConnectionParamsDialogLayout.form	(revision 42196)
@@ -0,0 +1,870 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="1"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,104,0,0,2,11"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="butAdvanced">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Advanced..."/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butAcept">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Acept"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="8" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="12" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel" name="jdbcServerExplorer">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="9" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler3">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[32767, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.8" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler4">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[0, 32767]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butCancel">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Cancel"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="10" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="butDelete">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Delete"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_butAdvanced">
+          <CodeVariable name="butAdvanced" type="8193" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butAdvanced"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16_butAcept">
+          <CodeVariable name="butAcept" type="8193" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butAcept"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="17_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="17_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20_filler1">
+          <CodeVariable name="filler1" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="17_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="21_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24_filler2">
+          <CodeVariable name="filler2" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="21_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="25_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="int" value="9"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31_jdbcServerExplorer">
+          <CodeVariable name="jdbcServerExplorer" type="8193" declaredType="org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jdbcServerExplorer"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="25_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="32_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="32_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="32_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="32_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="32_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="double" value="0.8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36_filler3">
+          <CodeVariable name="filler3" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="32_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="37_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="37_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41_filler4">
+          <CodeVariable name="filler4" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler4"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="37_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="42_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="42_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="42_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="42_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="42_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="42_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47_butCancel">
+          <CodeVariable name="butCancel" type="8193" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butCancel"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="42_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="48_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="48_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53_butDelete">
+          <CodeVariable name="butDelete" type="8193" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="butDelete"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="48_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItem.java	(revision 42196)
@@ -0,0 +1,249 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JCheckBox;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+
+
+
+/**
+ * Utility class that represents a table list item as a selectable check box.
+ *
+ * @author jldominguez
+ *
+ */
+public class TablesListItem extends JCheckBox {
+    
+    private static Logger logger = LoggerFactory.getLogger(TablesListItem.class);
+    
+    protected String tableName = "";
+    protected String schemaName = "";
+    
+    private UserSelectedFieldsPanel selectedFieldsPanel = null;
+    protected WizardDB parent = null;
+    private boolean activated = false;
+    // private CRSSelectPanel jPanelProj;
+	protected DBStoreParameters parameters;
+	protected UserTableSettingsPanel tableSettingsPanel = null;
+
+    public TablesListItem(DBStoreParameters param,
+			WizardDB _parent) {
+        
+        tableName = param.getTable();
+        schemaName = getSchema(param);
+        
+        setText(toString());
+        this.parameters = param;
+        parent = _parent;
+    }
+    
+
+
+    /**
+     * @param param
+     * @return
+     */
+    private String getSchema(DBStoreParameters dynobj) {
+        
+        String resp = null;
+        try {
+            resp = (String) dynobj.getDynValue(
+                JDBCConnectionParameters.SCHEMA_PARAMTER_NAME);
+        } catch (Exception ex) {
+            // logger.info("did not find schema in DB parameters.");
+        }
+        return resp;
+    }
+
+    public void activate() {
+        activated = true;
+        selectedFieldsPanel.loadValues();
+        tableSettingsPanel.loadValues();
+    }
+
+    public boolean isActivated() {
+        return activated;
+    }
+
+    /**
+     * Tells whether this item prevents the wizard from being in a valid final state.
+     * @return whether this item prevents the wizard from being in a valid final state.
+     */
+    public boolean disturbsWizardValidity() {
+        if (isSelected()) {
+            return (!hasValidValues());
+        }
+        else {
+            return false;
+        }
+    }
+
+    private boolean hasValidValues() {
+        return tableSettingsPanel.hasValidValues();
+    }
+
+    public String toString() {
+        if (schemaName == null || schemaName.length() == 0) {
+            return tableName;
+        } else {
+            return schemaName + "." + tableName;
+        }
+        
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setEnabledPanels(boolean b) {
+        selectedFieldsPanel.enableControls(b);
+        tableSettingsPanel.enableAlphaControls(b);
+        tableSettingsPanel.enableSpatialControls(b);
+
+    }
+
+    public UserSelectedFieldsPanel getUserSelectedFieldsPanel() {
+        if (selectedFieldsPanel == null) {
+        	FeatureType ft=null;
+			try {
+				ft = this.parent.getServerExplorer().getFeatureType(parameters);
+			} catch (DataException e) {
+				NotificationManager.addError(e);
+				return null;
+			}
+			ArrayList<FeatureAttributeDescriptor> attList = new ArrayList<FeatureAttributeDescriptor>();
+
+			Iterator<FeatureAttributeDescriptor> iter = ft.iterator();
+			while (iter.hasNext()) {
+				attList.add(iter.next());
+			}
+
+        	FeatureAttributeDescriptor[] allf = attList
+					.toArray(new FeatureAttributeDescriptor[0]);
+
+
+            selectedFieldsPanel = new UserSelectedFieldsPanel(allf, false,
+                    parent);
+        }
+
+        return selectedFieldsPanel;
+    }
+
+    public UserTableSettingsPanel getUserTableSettingsPanel() {
+		if (tableSettingsPanel == null) {
+
+			String[] ids = new String[0];
+			FeatureType ft = null;
+
+			try {
+				ft = this.parent.getServerExplorer().getFeatureType(parameters);
+			} catch (DataException e) {
+				NotificationManager.addError(e);
+				return null;
+			}
+
+			ArrayList auxAll = new ArrayList();
+			ArrayList auxId = new ArrayList();
+			Iterator iter = ft.iterator();
+			while (iter.hasNext()) {
+				FeatureAttributeDescriptor dbattr = (FeatureAttributeDescriptor) iter
+						.next();
+				if (dbattr.isPrimaryKey()) {
+					auxId.add(dbattr.getName());
+				}
+				auxAll.add(dbattr.getName());
+
+			}
+
+			if (auxId.size() > 0) {
+				StringBuilder strb = new StringBuilder();
+				strb.append('{');
+				for (int i = 0; i < auxId.size()-1; i++) {
+					strb.append(auxId.get(i));
+					strb.append(',');
+				}
+				strb.append(auxId.get(auxId.size() - 1));
+
+				strb.append('}');
+				if (auxId.size() == 1) {
+					auxAll.remove(auxId.get(0));
+				}
+				auxAll.add(0, strb.toString());
+			}
+			ids = (String[]) auxAll.toArray(new String[auxAll.size()]);
+			int ids_size = ids.length;
+			FieldComboItem[] ids_ci = new FieldComboItem[ids_size];
+
+			for (int i = 0; i < ids_size; i++) {
+				ids_ci[i] = new FieldComboItem(ids[i]);
+			}
+
+
+
+			tableSettingsPanel = new UserTableSettingsPanel(ids_ci, tableName,
+					true, parent, getParameters());
+		}
+
+		return tableSettingsPanel;
+	}
+
+
+    public IProjection currentProjection(String espView,
+			FieldComboItem[] ids_ci, FieldComboItem[] geos_ci) {
+		IProjection proj = AddLayerDialog.getLastProjection();
+		try {
+			ArrayList list = new ArrayList(1);
+			list.add(espView);
+			FeatureType ft = null;
+			try {
+				ft = this.parent.getServerExplorer().getFeatureType(parameters);
+			} catch (DataException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		} catch (Exception e) {
+			NotificationManager.addInfo("Incorrect projection", e);
+		}
+		return proj;
+	}
+
+    public DBStoreParameters getParameters() {
+    	return parameters;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDBLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDBLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDBLayout.form	(revision 42196)
@@ -0,0 +1,2096 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="1"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,98,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel1"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox1">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="4">
+            <StringItem index="0" value="Item 1"/>
+            <StringItem index="1" value="Item 2"/>
+            <StringItem index="2" value="Item 3"/>
+            <StringItem index="3" value="Item 4"/>
+          </StringArray>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="jButton1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jButton1"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="10" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="3" gridHeight="3" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.3"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="jList1">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="5">
+                <StringItem index="0" value="Item 1"/>
+                <StringItem index="1" value="Item 2"/>
+                <StringItem index="2" value="Item 3"/>
+                <StringItem index="3" value="Item 4"/>
+                <StringItem index="4" value="Item 5"/>
+              </StringArray>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="8" gridWidth="5" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.3"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="jList2">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="5">
+                <StringItem index="0" value="Item 1"/>
+                <StringItem index="1" value="Item 2"/>
+                <StringItem index="2" value="Item 3"/>
+                <StringItem index="3" value="Item 4"/>
+                <StringItem index="4" value="Item 5"/>
+              </StringArray>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JButton" name="jButton2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jButton2"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="10" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="jButton3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jButton3"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="8" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel2"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="12" gridWidth="9" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel3"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel4">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel4"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="6" gridWidth="5" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[32767, 0]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalGlue"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel5">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel5"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="14" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jTextField1"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="14" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel6">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel6"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="16" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jTextField2"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="16" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jCheckBox1"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="18" gridWidth="9" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane3">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="20" gridWidth="9" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="jTextArea1">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="jLabel7">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel7"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="22" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox2">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="4">
+            <StringItem index="0" value="Item 1"/>
+            <StringItem index="1" value="Item 2"/>
+            <StringItem index="2" value="Item 3"/>
+            <StringItem index="3" value="Item 4"/>
+          </StringArray>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="22" gridWidth="7" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jCheckBox2"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="24" gridWidth="9" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler3">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[16, 16]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="12" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_jLabel1">
+          <CodeVariable name="jLabel1" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17_jComboBox1">
+          <CodeVariable name="jComboBox1" type="8193" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jComboBox1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="18_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="18_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21_jButton1">
+          <CodeVariable name="jButton1" type="8193" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jButton1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="18_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="22_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="25">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridheight" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="22_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="double" value="0.3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30_jScrollPane1">
+          <CodeVariable name="jScrollPane1" type="8193" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="22_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="31_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34">
+          <ExpressionOrigin>
+            <Value type="int" value="5"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37">
+          <ExpressionOrigin>
+            <Value type="double" value="0.3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38_jScrollPane2">
+          <CodeVariable name="jScrollPane2" type="8193" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="31_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="39_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="39_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="39_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="39_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42_jButton2">
+          <CodeVariable name="jButton2" type="8193" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jButton2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="39_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="43_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46_jButton3">
+          <CodeVariable name="jButton3" type="8193" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jButton3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="43_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="47_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="9"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="47_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52_jLabel2">
+          <CodeVariable name="jLabel2" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="47_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="53_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57_jLabel3">
+          <CodeVariable name="jLabel3" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="53_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="58_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="61">
+          <ExpressionOrigin>
+            <Value type="int" value="5"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="58_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="63_jLabel4">
+          <CodeVariable name="jLabel4" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel4"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="58_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="64_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="64_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="64_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="64_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="66">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="64_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="68_filler1">
+          <CodeVariable name="filler1" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="64_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="69_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="69_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="72_jLabel5">
+          <CodeVariable name="jLabel5" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel5"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="69_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="73_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="77">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="73_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="79_jTextField1">
+          <CodeVariable name="jTextField1" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jTextField1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="73_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="80_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="80_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="82">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="83_jLabel6">
+          <CodeVariable name="jLabel6" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel6"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="80_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="84_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="84_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="84_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="85">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="84_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="86">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="84_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="87">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="84_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="88">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="84_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="89">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="90_jTextField2">
+          <CodeVariable name="jTextField2" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jTextField2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="84_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="91_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="91_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="91_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="92">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="91_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="93">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="91_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="94">
+          <ExpressionOrigin>
+            <Value type="int" value="9"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="91_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="95">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="91_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="96">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="97_jCheckBox1">
+          <CodeVariable name="jCheckBox1" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jCheckBox1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="91_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="98_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="98_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="98_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="99">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="98_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="100">
+          <ExpressionOrigin>
+            <Value type="int" value="20"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="98_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="101">
+          <ExpressionOrigin>
+            <Value type="int" value="9"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="98_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="102">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="98_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="103">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="98_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="104">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="105_jScrollPane3">
+          <CodeVariable name="jScrollPane3" type="8193" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="98_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="106_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="106_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="106_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="107">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="106_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="108">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="109_jLabel7">
+          <CodeVariable name="jLabel7" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel7"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="106_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="110_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="111">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="112">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="113">
+          <ExpressionOrigin>
+            <Value type="int" value="7"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="110_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="114">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="115_jComboBox2">
+          <CodeVariable name="jComboBox2" type="8193" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jComboBox2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="110_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="116_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="116_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="116_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="117">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="116_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="118">
+          <ExpressionOrigin>
+            <Value type="int" value="24"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="116_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="119">
+          <ExpressionOrigin>
+            <Value type="int" value="9"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="116_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="120">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="121_jCheckBox2">
+          <CodeVariable name="jCheckBox2" type="8193" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jCheckBox2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="116_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="122_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="122_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="122_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="123">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="122_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="124">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="125_filler2">
+          <CodeVariable name="filler2" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="122_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="126_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="126_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="126_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="127">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="126_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="128">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="129_filler3">
+          <CodeVariable name="filler3" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler3"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="126_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsPanel.java	(revision 42196)
@@ -0,0 +1,368 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb.wizard;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.service.ServiceException;
+
+
+
+/**
+ * Utility class that holds a single table settings controls.
+ *
+ * @author jldominguez
+ *
+ */
+public class UserTableSettingsPanel extends JPanel implements ActionListener,
+    KeyListener {
+
+    private static final long serialVersionUID = -9205704982299200912L;
+
+    private static Logger LOG = LoggerFactory
+			.getLogger(UserTableSettingsPanel.class);
+    
+    private FieldComboItem[] ids;
+    private String initLayerName = "";
+    private JComboBox idComboBox = null;
+    private JTextArea sqlTextArea = null;
+    private JLabel idLabel = null;
+    private JLabel sqlLabel = null;
+    private JCheckBox activateSQLCheckBox = null;
+    protected JLabel tableNamejLabel = null;
+    private JTextField layerNameTextField = null;
+    private JScrollPane sqlTextAreaScroll = null;
+    protected WizardDB parent = null;
+	private JButton advancedSettingsButton;
+	protected DBStoreParameters parameters;
+
+    protected UserTableSettingsPanel() {
+		super();
+	}
+
+	protected void setInitValues(FieldComboItem[] idComboItems,
+			String initialLayerName, boolean empty, WizardDB _p,DBStoreParameters parameters) {
+        parent = _p;
+
+        initLayerName = initialLayerName;
+		ids = idComboItems;
+		this.parameters = parameters;
+
+	}
+
+    public UserTableSettingsPanel(FieldComboItem[] idComboItems,
+        String initialLayerName, boolean empty, WizardDB _p,
+			DBStoreParameters parameters) {
+		setInitValues(idComboItems, initialLayerName, empty, _p, parameters);
+        initialize(empty);
+    }
+
+    public boolean hasValidValues() {
+        if (!combosHaveItems()) {
+            return false;
+        }
+
+        if ((activateSQLCheckBox.isSelected()) &&
+                (getSqlTextArea().getText().trim().length() == 0)) {
+            return false;
+        }
+
+        if (getLayerNameTextField().getText().trim().length() == 0) {
+            return false;
+        }
+
+        return true;
+    }
+
+    protected void initialize(boolean _empty) {
+        tableNamejLabel = new JLabel();
+        tableNamejLabel.setText(PluginServices.getText(this, "_Name"));
+        tableNamejLabel.setSize(new java.awt.Dimension(100, 21));
+        tableNamejLabel.setLocation(new java.awt.Point(8, 25));
+        sqlLabel = new JLabel();
+        // sqlLabel.setBounds(new java.awt.Rectangle(30, 90, 116, 21));
+		sqlLabel.setBounds(new java.awt.Rectangle(30, 55, 150, 21));
+        sqlLabel.setText(PluginServices.getText(this, "_SQL_restriction"));
+        idLabel = new JLabel();
+        // idLabel.setBounds(new java.awt.Rectangle(5, 55, 86, 21));
+		idLabel.setBounds(new java.awt.Rectangle(260, 25, 86, 21));
+        idLabel.setText(PluginServices.getText(this, "_Id_field"));
+
+        setLayout(null);
+        setBounds(new java.awt.Rectangle(3, 225, 501, 246));
+        setBorder(javax.swing.BorderFactory.createTitledBorder(null,
+                PluginServices.getText(this, "_Table_settings"),
+                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+        add(getIdComboBox(), null);
+        add(getSqlTextAreaScroll(), null);
+        add(idLabel, null);
+        add(sqlLabel, null);
+        add(getActivateSQLCheckBox(), null);
+        add(getLayerNameTextField(), null);
+        add(tableNamejLabel, null);
+        add(getAdvancedButton(), null);
+
+        loadValues(_empty);
+    }
+
+    public void enableAlphaControls(boolean enable) {
+        getIdComboBox().setEnabled(enable);
+        getLayerNameTextField().setEnabled(enable);
+        getSqlTextArea().setEnabled(enable);
+        getActivateSQLCheckBox().setEnabled(enable);
+        getAdvancedButton().setEnabled(enable);
+    }
+
+    public void enableSpatialControls(boolean enable) {
+
+    }
+
+    public void loadValues() {
+        loadValues(false);
+    }
+
+    protected void loadValues(boolean is_empty) {
+        if (is_empty) {
+            enableAlphaControls(false);
+            enableSpatialControls(false);
+            getLayerNameTextField().setText("");
+            getActivateSQLCheckBox().setSelected(false);
+        }
+        else {
+            enableAlphaControls(true);
+			enableSpatialControls(true);
+			getActivateSQLCheckBox().setEnabled(true);
+            getIdComboBox().removeAllItems();
+
+            for (int i = 0; i < ids.length; i++) {
+                getIdComboBox().addItem(ids[i]);
+            }
+
+
+            getLayerNameTextField().setText(initLayerName);
+
+        }
+    }
+
+    private JComboBox getIdComboBox() {
+        if (idComboBox == null) {
+            idComboBox = new JComboBox();
+
+            // idComboBox.setBounds(new java.awt.Rectangle(105, 55, 126, 21));
+			idComboBox.setBounds(new java.awt.Rectangle(351, 25, 134, 21));
+        }
+
+        return idComboBox;
+    }
+
+    private JButton getAdvancedButton() {
+    	if (advancedSettingsButton == null) {
+    	    advancedSettingsButton = new org.gvsig.gui.beans.swing.JButton();
+    	    int w = 31;
+    	    advancedSettingsButton.setBounds(8, 126-w, w, w);
+    	    
+    	    ImageIcon ii = IconThemeHelper.getImageIcon("geodb-advanced-properties");
+    	    // ImageIcon ii = IconThemeHelper.getImageIcon("geodb-connection-add");
+    	    
+    	    advancedSettingsButton.setIcon(ii);
+       		// geodb-get-view-extent
+    	    advancedSettingsButton.setToolTipText(
+    	        Messages.getText("_Advanced_properties"));
+    	    advancedSettingsButton.addActionListener(this);
+		}
+		return advancedSettingsButton;
+	}
+
+    private JCheckBox getActivateSQLCheckBox() {
+        if (activateSQLCheckBox == null) {
+            activateSQLCheckBox = new JCheckBox();
+            activateSQLCheckBox.addActionListener(this);
+            //activateSQLCheckBox
+					//.setBounds(new java.awt.Rectangle(5, 90, 21, 21));
+			activateSQLCheckBox
+					.setBounds(new java.awt.Rectangle(5, 55, 21, 21));
+        }
+
+        return activateSQLCheckBox;
+    }
+
+    private JTextField getLayerNameTextField() {
+        if (layerNameTextField == null) {
+            layerNameTextField = new JTextField();
+            layerNameTextField.setSize(new java.awt.Dimension(118, 21));
+			// layerNameTextField.setLocation(new java.awt.Point(105, 25));
+			layerNameTextField.setLocation(new java.awt.Point(120, 25));
+            layerNameTextField.addKeyListener(this);
+        }
+
+        return layerNameTextField;
+    }
+
+    private JTextArea getSqlTextArea() {
+        if (sqlTextArea == null) {
+            sqlTextArea = new JTextArea();
+            sqlTextArea.setLineWrap(true);
+            sqlTextArea.setWrapStyleWord(true);
+            sqlTextArea.addKeyListener(this);
+
+            // sqlTextArea.setBounds(new java.awt.Rectangle(160,90,326,41));
+        }
+
+        return sqlTextArea;
+    }
+
+    private JScrollPane getSqlTextAreaScroll() {
+        if (sqlTextAreaScroll == null) {
+            sqlTextAreaScroll = new JScrollPane();
+            // sqlTextAreaScroll.setBounds(new java.awt.Rectangle(160, 90, 326,
+			// 41));
+			sqlTextAreaScroll
+					.setBounds(new java.awt.Rectangle(150, 55, 335, 53));
+            sqlTextAreaScroll.setViewportView(getSqlTextArea());
+            sqlTextAreaScroll.updateUI();
+        }
+
+        return sqlTextAreaScroll;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        Object src = e.getSource();
+
+        if (src == activateSQLCheckBox) {
+            enableSQLSettings(activateSQLCheckBox.isSelected());
+            parent.checkFinishable();
+        } else if (src == getAdvancedButton()) {
+        	List<String> toHide = new ArrayList<String>();
+			toHide.add(DBStoreParameters.PASSWORD_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.HOST_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.PORT_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.USER_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.DBNAME_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.DEFAULTGEOMETRY_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.PKFIELDS_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.FIELDS_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.BASEFILTER_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.WORKINGAREA_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.TABLE_PARAMTER_NAME);
+			toHide.add(DBStoreParameters.CRS_PARAMTER_NAME);
+			try {
+				parameters.validate();
+			} catch (Exception ex) {
+				// ignore... only for fill default values
+			}
+			try {
+                DynObjectEditor editor = new DynObjectEditor(parameters);
+                editor.editObject(true);
+                } catch (ServiceException ex) {
+                    LOG.error(
+                        "Error creating a Swing component for the DynObject: "
+                            + parameters, ex);
+            }
+
+
+			return;
+
+        }
+
+    }
+
+
+    private void enableSQLSettings(boolean b) {
+        sqlTextArea.setEnabled(b);
+    }
+
+    protected String getFormattedDouble(double d) {
+        DecimalFormat df = new DecimalFormat("#.###");
+        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
+        dfs.setDecimalSeparator('.');
+        df.setDecimalFormatSymbols(dfs);
+        return df.format(d);
+    }
+
+    public void keyPressed(KeyEvent e) {
+    }
+
+    public void keyReleased(KeyEvent e) {
+        parent.checkFinishable();
+    }
+
+    public void keyTyped(KeyEvent e) {
+    }
+
+
+    public String getUserLayerName() {
+        return getLayerNameTextField().getText();
+    }
+
+    public boolean combosHaveItems() {
+        if (getIdComboBox().getItemCount() == 0) {
+            return false;
+        }
+
+        return true;
+    }
+
+    public void repaint() {
+        super.repaint();
+        getIdComboBox().updateUI();
+    }
+
+    public String getIdFieldName() {
+        return getIdComboBox().getSelectedItem().toString();
+    }
+
+    public String getWhereClause() {
+        return getSqlTextArea().getText();
+    }
+
+    public boolean isSqlActive() {
+        return getActivateSQLCheckBox().isSelected();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/UserTableSettingsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/JPasswordDlg.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/JPasswordDlg.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/JPasswordDlg.java	(revision 42196)
@@ -0,0 +1,224 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb;
+
+import java.awt.event.KeyEvent;
+
+import javax.swing.JButton;
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextArea;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+public class JPasswordDlg extends JPanel implements IWindow {
+
+    private JPanel jContentPane = null;
+
+    private JButton jButtonOK = null;
+
+    private JButton jButton1 = null;
+
+    private JPasswordField jPasswordField = null;
+
+    private String password = null;
+
+    private JEditorPane jEditorPane = null;
+
+    private JTextArea jLblMensaje = null;
+
+//    private WindowEventsHandler windowHandler = new WindowEventsHandler();
+
+    /**
+     * This is the default constructor
+     */
+    public JPasswordDlg() {
+        super();
+        initialize();
+    }
+
+//    class WindowEventsHandler extends WindowAdapter
+//    {
+//
+//        /* (non-Javadoc)
+//         * @see java.awt.event.WindowAdapter#windowActivated(java.awt.event.WindowEvent)
+//         */
+//        public void windowActivated(WindowEvent e) {
+//            // TODO Auto-generated method stub
+//            super.windowActivated(e);
+//            jPasswordField.requestFocus();
+//        }
+//
+//    }
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+private void initialize() {
+        this.setSize(287, 172);
+        this.setLayout(null);
+        this.add(getJContentPane());
+//        this.setModal(true);
+//        this.setResizable(false);
+//        this.setTitle("Enter Password");
+//        this.setContentPane(getJContentPane());
+//
+//        addWindowListener(windowHandler);
+    }
+    /**
+     * This method initializes jContentPane
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJContentPane() {
+        if (jContentPane == null) {
+            jContentPane = new JPanel();
+            jContentPane.setLayout(null);
+            jContentPane.add(getJButton1(), null);
+            jContentPane.add(getJButtonOK(), null);
+            jContentPane.add(getJPasswordField(), null);
+            jContentPane.add(getJLblMensaje(), null);
+            jContentPane.setBounds(0,0,300,200);
+        }
+        return jContentPane;
+    }
+
+    /**
+     * This method initializes jButton
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getJButtonOK() {
+        if (jButtonOK == null) {
+            jButtonOK = new JButton();
+            jButtonOK.setText("OK");
+            jButtonOK.setPreferredSize(new java.awt.Dimension(65, 23));
+            jButtonOK.setBounds(35, 110, 101, 22);
+            jButtonOK.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    System.out.println("actionPerformed()"); // TODO
+                    // Auto-generated
+                    // Event stub
+                    // actionPerformed()
+                    password = String.copyValueOf(getJPasswordField()
+                            .getPassword());
+                    PluginServices.getMDIManager().closeWindow(JPasswordDlg.this);
+//                    dispose();
+                }
+            });
+        }
+        return jButtonOK;
+    }
+
+    /**
+     * This method initializes jButton1
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getJButton1() {
+        if (jButton1 == null) {
+            jButton1 = new JButton();
+            jButton1.setText("Cancel");
+            jButton1.setBounds(136, 110, 99, 22);
+            jButton1.addActionListener(new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    password = null;
+                    PluginServices.getMDIManager().closeWindow(JPasswordDlg.this);
+//                    dispose();
+                }
+            });
+        }
+        return jButton1;
+    }
+
+    /**
+     * This method initializes jPasswordField
+     *
+     * @return javax.swing.JPasswordField
+     */
+    private JPasswordField getJPasswordField() {
+        if (jPasswordField == null) {
+            jPasswordField = new JPasswordField();
+            jPasswordField.setPreferredSize(new java.awt.Dimension(60, 22));
+            jPasswordField.setBounds(65, 78, 145, 21);
+            jPasswordField.addKeyListener(new java.awt.event.KeyAdapter() {
+                public void keyTyped(java.awt.event.KeyEvent e) {
+                    if (e.getKeyChar() == KeyEvent.VK_ENTER) {
+                        // System.out.println("INTRO");
+                        getJButtonOK().doClick();
+                    }
+                }
+            });
+        }
+        return jPasswordField;
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    public String getPassword() {
+        return password;
+    }
+
+    public void setMessage(String str) {
+        getJLblMensaje().setText(str);
+    }
+
+    /**
+     * This method initializes jTextArea
+     *
+     * @return javax.swing.JTextArea
+     */
+    private JTextArea getJLblMensaje() {
+        if (jLblMensaje == null) {
+            jLblMensaje = new JTextArea();
+            jLblMensaje.setEditable(false);
+            jLblMensaje.setForeground(java.awt.Color.black);
+            jLblMensaje.setBackground(java.awt.SystemColor.control);
+            jLblMensaje.setText("Mensaje");
+            jLblMensaje.setLineWrap(true);
+            jLblMensaje.setFont(new java.awt.Font("SansSerif",
+                    java.awt.Font.PLAIN, 12));
+            jLblMensaje.setPreferredSize(new java.awt.Dimension(270, 50));
+            jLblMensaje.setBounds(9, 6, 266, 68);
+            jLblMensaje.setWrapStyleWord(true);
+        }
+        return jLblMensaje;
+    }
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi=new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
+		wi.setTitle(PluginServices.getText(this,"enter_password"));
+		return wi;
+	}
+	public Object getWindowProfile() {
+		// TODO Auto-generated method stub
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/JPasswordDlg.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DlgConnection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DlgConnection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DlgConnection.java	(revision 42196)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.utils.NotExistInXMLEntity;
+import org.gvsig.utils.XMLEntity;
+
+
+public class DlgConnection extends JDialog {
+
+    private JPanel jContentPane = null;
+    private ConnectionPanel jConnPanel = null;
+    private JButton jBtnOK = null;
+    private JPanel jPanel1 = null;
+    private JButton jBtnCancel = null;
+    private ConnectionSettings connSettings = null;
+
+    /**
+     * This is the default constructor
+     */
+    public DlgConnection() {
+        super();
+        initialize();
+    }
+
+    private void setPreferences()
+    {
+        XMLEntity xml = PluginServices.getPluginServices(this).getPersistentXML();
+
+        if (xml == null) {
+            xml = new XMLEntity();
+        }
+
+        if (!xml.contains("db-connections")) {
+            String[] servers = new String[0];
+            xml.putProperty("db-connections", servers);
+        }
+
+        try {
+            String[] servers = xml.getStringArrayProperty("db-connections");
+            HashMap settings = new HashMap();
+            for (int i = 0; i < servers.length; i++) {
+                ConnectionSettings cs = new ConnectionSettings();
+                cs.setFromString(servers[i]);
+                settings.put(cs.getName(), cs);
+            }
+            getJConnPanel().setSettings(settings);
+        } catch (NotExistInXMLEntity e) {
+        }
+
+    }
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    private void initialize() {
+        this.setSize(320, 332);
+        this.setTitle(PluginServices.getText(this, "database_connection"));
+        this.setContentPane(getJContentPane());
+        setPreferences();
+        DataManager dm= DALLocator.getDataManager();
+        List explorers = dm.getExplorerProviders();
+        Iterator iter = explorers.iterator();
+		DataServerExplorerParameters exParam = null;
+		String name;
+		List<String> dbExplores = new ArrayList<String>(explorers.size());
+		while (iter.hasNext()) {
+			name = (String) iter.next();
+			try {
+				exParam = dm.createServerExplorerParameters(name);
+			} catch (DataException e) {
+				NotificationManager.addError(e);
+			}
+			if (exParam instanceof DBServerExplorerParameters) {
+				dbExplores.add(name);
+			}
+		}
+
+
+
+        jConnPanel
+				.setDrivers(dbExplores
+				.toArray(new String[dbExplores.size()]));
+    }
+
+//    private String[] getDriverNames(){
+//        Class[] classes = new Class[] { IVectorialDatabaseDriver.class };
+//
+//        ArrayList ret = new ArrayList();
+//        String[] driverNames = LayerFactory.getDM().getDriverNames();
+//
+//        for (int i = 0; i < driverNames.length; i++) {
+//            boolean is = false;
+//
+//            for (int j = 0; j < classes.length; j++) {
+//                if (LayerFactory.getDM().isA(driverNames[i], classes[j])) {
+//                    ret.add(driverNames[i]);
+//                }
+//            }
+//        }
+//
+//        return (String[]) ret.toArray(new String[0]);
+//
+//    }
+
+    /**
+     * This method initializes jContentPane
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJContentPane() {
+        if (jContentPane == null) {
+            jContentPane = new JPanel();
+            jContentPane.setLayout(new BorderLayout());
+            jContentPane.add(getJConnPanel(), java.awt.BorderLayout.CENTER);
+            jContentPane.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
+
+        }
+        return jContentPane;
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private ConnectionPanel getJConnPanel() {
+    	if (jConnPanel == null) {
+    		jConnPanel = new ConnectionPanel();
+    	}
+    	return jConnPanel;
+    }
+
+
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel1() {
+    	if (jPanel1 == null) {
+    		ActionListener okAction = new java.awt.event.ActionListener() {
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                	if (!jConnPanel.done()) {
+                		JOptionPane.showMessageDialog(DlgConnection.this, "No estan todos los datos rellenos", "Error", JOptionPane.ERROR_MESSAGE);
+                		return;
+                	}
+                	jConnPanel.saveConnectionSettings();
+                    connSettings = jConnPanel.getConnectionSettings();
+                    dispose();
+                }
+    		};
+
+            ActionListener cancelAction = new java.awt.event.ActionListener() {
+    			public void actionPerformed(java.awt.event.ActionEvent e) {
+                    connSettings = null;
+    				dispose();
+    			}
+    		};
+    		jPanel1 = new AcceptCancelPanel(okAction, cancelAction);
+
+
+    	}
+    	return jPanel1;
+    }
+
+
+    public ConnectionSettings getConnSettings() {
+        return connSettings;
+    }
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DlgConnection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DBResourceManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DBResourceManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DBResourceManager.java	(revision 42196)
@@ -0,0 +1,115 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb.vectorialdb;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.dal.resource.ResourceNotification;
+import org.gvsig.fmap.dal.resource.db.DBParameters;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResource;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResourceParameters;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+
+//TODO comentado para que compile
+public class DBResourceManager implements Observer {
+	private boolean checking = false;
+
+	public DBResourceManager(){
+
+	}
+	public void update(Observable observable, Object notification) {
+		if (!(notification instanceof ResourceNotification)) {
+			return;
+		}
+		ResourceNotification resNot = (ResourceNotification) notification;
+		if (!resNot.getType().equals(ResourceNotification.PREPARE)){
+			return;
+		}
+		if (!(resNot.getResource() instanceof JDBCResource)){
+			return;
+		}
+		JDBCResource res = (JDBCResource)resNot.getResource();
+		JDBCResourceParameters resPrams = (JDBCResourceParameters) resNot
+				.getParameters();
+		if (!checking && resPrams.getPassword() == null) {
+			checking = true;
+			JPasswordDlg passwordPanel=new JPasswordDlg();
+			passwordPanel.setMessage(PluginServices.getText(this,"falta_por_introducir_la_clave_en_la_conexion"));
+			PluginServices.getMDIManager().addCentredWindow(passwordPanel);
+			resPrams.setPassword(passwordPanel.getPassword());
+			// TODO check if password is ok ??
+//			if(!res.testConnection()){
+//				checking=false;
+//				try {
+//					res.setPassword(null);
+//				} catch (InitializeException e) {
+//					e.printStackTrace();
+//				}
+//			}
+//			checking=false;
+		}
+	}
+
+	private JDBCResource getResource(
+			DBServerExplorerParameters explorerParameters) {
+		ResourceManager rManager = DALLocator.getResourceManager();
+		Resource res;
+
+
+
+		return null;
+	}
+
+	private JDBCResource getResource(DBParameters storeParameters) {
+		ResourceManager rManager = DALLocator.getResourceManager();
+
+		return null;
+	}
+
+//	public boolean isConnected(DBParameters dbParameters);
+//
+//
+//	public boolean isConnected(DBExplorerParameters explorerParameters) {
+//		DBResourceManager res = this.getResource(explorerParameters);
+//		if (res == null) {
+//			return false;
+//		}
+//		return res.isOpen();
+//	}
+//
+//	public boolean isConnected(DBExplorer explorer) {
+//		JDBCResource res = this.getResource(explorer.getParameters());
+//		if (res == null) {
+//			return false;
+//		}
+//		return res.isOpen();
+//	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DBResourceManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/ExtDB_Spatial.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/ExtDB_Spatial.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/ExtDB_Spatial.java	(revision 42196)
@@ -0,0 +1,105 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geodb;
+
+import org.gvsig.about.AboutManager;
+import org.gvsig.about.AboutParticipant;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.extension.AddLayer;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.geodb.vectorialdb.wizard.WizardDB;
+import org.gvsig.geodb.vectorialdb.wizard.WizardVectorialDB;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+
+/**
+ * This extension adds the export-to-oracle button.
+ *
+ * @author jldominguez
+ *
+ */
+public class ExtDB_Spatial extends Extension {
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("geodb", "geodb-connection-add", this);
+        IconThemeHelper.registerIcon("geodb", "geodb-advanced-properties", this);
+        IconThemeHelper.registerIcon("geodb", "geodb-get-view-extent", this);
+        
+        DataManager dataManager = DALLocator.getDataManager();
+        PluginsManager manager = PluginsLocator.getManager();
+        DynObject pluginProperties = manager.getPlugin(ExtDB_Spatial.class).getPluginProperties();
+        if( pluginProperties.getDynValue("explorersPool")==null ) {
+            pluginProperties.setDynValue("explorersPool", dataManager.getDataServerExplorerPool());
+        } else {
+            dataManager.setDataServerExplorerPool((DataServerExplorerPool)pluginProperties.getDynValue("explorersPool"));
+        }
+        
+    }
+
+    public void execute(String actionCommand) {
+        //do nothing
+    }
+
+    public boolean isEnabled() {
+        return isVisible();
+
+        // return true;
+    }
+
+    public boolean isVisible() {
+        return false;
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+        addAboutInfo();
+
+        ApplicationLocator.getManager().registerAddTableWizard("DB",
+                "DB Tables", WizardDB.class);
+        AddLayer.addWizard(WizardVectorialDB.class);
+    }
+
+    private void addAboutInfo() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        AboutManager about = application.getAbout();
+        about.addDeveloper("PRODEVELOP", getClass().getClassLoader()
+                .getResource("about/prodevelop.html"), 2);
+
+        AboutParticipant participant = about.getDeveloper("PRODEVELOP");
+        participant.addContribution(
+                "GeoDB",
+                "Soporte para pool de conexiones con BBDD",
+                2006, 1, 1,
+                2007, 12, 31
+        );
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/ExtDB_Spatial.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.geodb.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.geodb.app.mainplugin">
+      <description>plugin persistence org.gvsig.geodb</description>
+      <fields>
+        <field name="explorersPool" type="object" classOfValue="org.gvsig.fmap.dal.DataServerExplorerPool" mandatory="false">
+          <description>Connections</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,57 @@
+#Translations for language [es]
+more_provider_parameters_needed_message=El driver seleccionado necesita par\u00e1metros adicionales.\nA continuaci\u00f3n se abrir\u00e1 el editor de propiedades avanzado.
+more_provider_parameters_needed_title=Par\u00e1metros adicionales requeridos
+_Advanced_properties=Propiedades avanzadas
+_Get_view_extent=Capturar extensi\u00f3n de la vista
+choose_connection=Elija conexi\u00f3n
+choose_table=Elija tabla
+connection_error=Error de conexi\u00f3n
+table_fields=Columnas de la tabla
+_All=Todos
+_None=Ninguno
+_Name=Nombre
+_SQL_restriction=Restricci\u00f3n SQL
+_Id_field=Campo ID
+_Table_settings=Configuraci\u00f3n de tabla
+_Advanced_properties=Propiedades avanzadas
+_Working_area=\u00c1rea de trabajo
+_Geo_field=Campo geom\u00e9trico
+_Get_view_extent=Obtener \u00e1rea de la vista
+_Schema=Esquema
+_Host=Servidor
+_Port=Puerto
+_User=Usuario
+_Password=Contrase\u00f1a
+_Database=Base de datos
+_Driver_type=Conector
+_Connection_name=Nombre de conexi\u00f3n
+_Connection_parameters=Par\u00e1metros de conexi\u00f3n
+_Connected=Conectado
+more_provider_parameters_needed_message=Hubo un problema con los par\u00e1metros. Se abrir\u00e1 el di\u00e1logo de propiedades avanzadas.
+more_provider_parameters_needed_title=Faltan par\u00e1metros
+_Unable_to_reproject_viewport_Default_bounds_used=No se han podido reproyectar los l\u00edmites de la vista. Se usan valores por defecto
+_Viewport_bounds_reprojected_to_datasource_CRS=Se han reproyectado los l\u00edmites de la vista al CRS del origen de datos.
+_Table_NAME_does_not_have_declared_PK=La tabla {0} no tiene clave primaria declarada en la BD
+_If_layer_edited_saving_edits_will_not_be_possible=Si edita la capa, no ser\u00e1 posible salvar los cambios en la misma tabla
+_Strange_behavior_if_selected_ID_not_unique_values=La capa tendr\u00e1 comportamiento extra\u00f1o si el campo elegido como ID no tiene valores \u00fanicos
+_Remove_connection_parameters_from_list_question=\u00bfDesea eliminar de la lista los par\u00e1metros que han causado el problema?
+_JDBCConecctionPanel_foother=Tenga en cuenta que el nombre de usuario y la  contrase\u00f1a deben coincidir en mayusculas y minusculas con el registrado en la base de dato.
+delete=Borrar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,59 @@
+#Translations for language [en]
+more_provider_parameters_needed_message=The selected driver requires more additional parameters.\nNext the advanced properties editor will be opened.
+more_provider_parameters_needed_title=More parameters required
+_Advanced_properties=Advanced properties
+_Get_view_extent=Get view extent
+choose_connection=Choose connection
+choose_table=Choose table
+connection_error=Connection error
+table_fields=Table fields
+_All=All
+_None=None
+_Name=Name
+_SQL_restriction=SQL restriction
+_Id_field=ID field
+_Table_settings=Table settings
+_Advanced_properties=Advanced properties
+_Working_area=Working area
+_Geo_field=Geometry field
+_Get_view_extent=Get view extent
+_Schema=Schema
+_Host=Host
+_Port=Port
+_User=User
+_Password=Password
+_Database=Database
+_Driver_type=Driver
+_Connection_name=Connection name
+_Connection_parameters=Connection parameters
+_Connected=Connected
+more_provider_parameters_needed_message=There was a problem with parameters. Advanced properties dialog will now open.
+more_provider_parameters_needed_title=Missing parameters
+_Unable_to_reproject_viewport_Default_bounds_used=Unable to reproject viewport bounds. Default values used
+_Viewport_bounds_reprojected_to_datasource_CRS=Viewport bounds were reprojected to CRS of datasource
+_Table_NAME_does_not_have_declared_PK=The table {0} does not have a declared primary key in the DB
+_If_layer_edited_saving_edits_will_not_be_possible=If layer is edited, saving edits will not be possible
+_Strange_behavior_if_selected_ID_not_unique_values=The layer will have strange behavior if field selected as ID does not have unique values
+_Remove_connection_parameters_from_list_question=Do you wish to remove the offending parameters from the list?
+_JDBCConecctionPanel_foother=Note that the user name and password must match case sensitive with that recorded in the data base.
+delete=Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<alternativeNames name="org.gvsig.geodb"/>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app.mainplugin"/>
+    <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.geodb.ExtDB_Spatial"
+			description="Support to access Spatial databases"
+			active="true">
+		</extension>		
+	</extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-connection-add.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-connection-add.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-get-view-extent.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-get-view-extent.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-advanced-properties.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-advanced-properties.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/about/prodevelop-logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/about/prodevelop-logo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/about/prodevelop.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/about/prodevelop.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/about/prodevelop.html	(revision 42196)
@@ -0,0 +1,37 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<html>
+<body>
+
+<img src="prodevelop-logo.png"><br>
+
+<h2>PRODEVELOP</h2>
+<br>
+
+<p>EN CONSTRUCCION</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/about/prodevelop.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.geodb.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>Geodb</name>
+  <description>
+Connection manager to spatial databases.
+  </description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.geodb.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.db.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.document.table.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.about.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.control</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.personaldb.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+      <scope>compile</scope>
+    </dependency>	
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>   
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.document.table.app.mainplugin -ge 2</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Formats,Database</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.geodb</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/pom.xml	(revision 42196)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.geodb.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.geodb.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geodb.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.editing.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.editing.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:57 CEST 2015
+buildNumber=2154

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/test/java/org/gvsig/editing/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/test/java/org/gvsig/editing/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/test/java/org/gvsig/editing/AllTests.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for com.iver.cit.gvsig.cad");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/test/java/org/gvsig/editing/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/JoinExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/JoinExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/JoinExtension.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.JoinCADTool;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la uni�n de geometr�as en edici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class JoinExtension extends Extension {
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+	private JoinCADTool joinCADTool;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		joinCADTool=new JoinCADTool();
+		CADExtension.addCADTool("_join",joinCADTool);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-join", this);
+	}
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if ("layer-modify-join".equalsIgnoreCase(s)) {
+			 CADExtension.setCADTool("_join",true);
+	    }
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+					return false;
+				FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+				if (joinCADTool.isApplicable(lv.getShapeType()) && ((FeatureSelection)lv.getFeatureStore().getSelection()).getSize()>1){
+					return true;
+				}
+			}
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/JoinExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionChangeManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionChangeManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionChangeManager.java	(revision 42196)
@@ -0,0 +1,130 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+
+/**
+ * Cuando un tema se pone en edici�n se le debe asociar
+ * un listener de este tipo, que se dispar� cuando se produzca
+ * un evento de edici�n (borrado, modificaci�n,... sobre la capa.
+ *
+ * @author Jorge Piera Llodr� (piera_jor@gva.es)
+ */
+public class EditionChangeManager implements Observer{
+	private FLayer fLayer = null;
+
+	/**
+	 * Constructor
+	 * @param fLayer
+	 * Tema que se est� editando
+	 */
+	public EditionChangeManager(FLayer fLayer){
+		this.fLayer = fLayer;
+	}
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.edition.IEditionListener#afterRowEditEvent(com.iver.cit.gvsig.fmap.edition.AfterRowEditEvent)
+	 */
+//	public void afterRowEditEvent(IRow feat, AfterRowEditEvent e) {
+//		IWindow[] views = PluginServices.getMDIManager().getAllWindows();
+//
+//		for (int i=0 ; i<views.length ; i++){
+//			if (views[i] instanceof Table){
+////				Table table=(Table)views[i];
+//				///VCN Creo que no hace falta refrescar la tabla aqu�
+////				if (table.getModel().getAssociatedTable()!=null && table.getModel().getAssociatedTable().equals(fLayer))
+////					table.refresh();
+//			}else if (views[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View){
+//				com.iver.cit.gvsig.project.documents.view.gui.View view=(com.iver.cit.gvsig.project.documents.view.gui.View)views[i];
+//
+//				if (e.getChangeType() == EditionEvent.CHANGE_TYPE_ADD) {
+//					// No redraw, just image paint
+//					view.getMapControl().repaint();
+//				}else if (e.getChangeType() == EditionEvent.CHANGE_TYPE_DELETE){
+//					EditionManager em=CADExtension.getEditionManager();
+//					if (em.getActiveLayerEdited()!=null){
+//						VectorialLayerEdited vle=(VectorialLayerEdited)em.getActiveLayerEdited();
+//						try {
+//							vle.clearSelection(false);
+//						} catch (ReadException e1) {
+//							NotificationManager.addError(e1);
+//						}
+//					}
+//				}else{
+//					fLayer.setDirty(true);
+//					view.getMapControl().rePaintDirtyLayers();
+//				}
+//
+//				/* FLayers layers=view.getMapControl().getMapContext().getLayers();
+//				for (int j=0;j<layers.getLayersCount();j++){
+//					if (layers.getLayer(j).equals(fLayer)){
+//						view.repaintMap();
+//					}
+//				} */
+//			}
+//		}
+//
+//	}
+	public void update(Observable observable, Object notification) {
+		FeatureStoreNotification dfsn=(FeatureStoreNotification)notification;
+		String type=dfsn.getType();
+		IWindow[] views = PluginServices.getMDIManager().getAllWindows();
+
+		for (int i=0 ; i<views.length ; i++){
+			if (views[i] instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel){
+				org.gvsig.app.project.documents.view.gui.DefaultViewPanel view=(org.gvsig.app.project.documents.view.gui.DefaultViewPanel)views[i];
+				if (type.equals(FeatureStoreNotification.AFTER_DELETE)){
+					IEditionManager em = EditionLocator.getEditionManager();
+					if (em.getActiveLayerEdited()!=null){
+						VectorialLayerEdited vle=(VectorialLayerEdited)em.getActiveLayerEdited();
+						try {
+							vle.clearSelection();
+						} catch (DataException e1) {
+							NotificationManager.addError(e1);
+						}
+					}
+				}
+				if (type.equals(FeatureStoreNotification.AFTER_INSERT)){
+					view.getMapControl().repaint();
+				}
+				if (type.equals(FeatureStoreNotification.AFTER_UPDATE)
+				    || type.equals(FeatureStoreNotification.AFTER_REDO)
+                    || type.equals(FeatureStoreNotification.AFTER_UNDO)) {
+					view.getMapControl().rePaintDirtyLayers();
+				}
+			}
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionChangeManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SelectionGeometryExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SelectionGeometryExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SelectionGeometryExtension.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.editing.gui.cad.tools.SelectionCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la herramienta de seleccionar.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SelectionGeometryExtension extends Extension {
+
+	private MapControl mapControl;
+	private  SelectionCADTool selection;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		selection=new SelectionCADTool();
+		CADExtension.addCADTool("_selection", selection);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "selection-simple", this);
+	}
+	
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if (s.equals("selection-simple")) {
+        	CADExtension.setCADTool("_selection",true);
+        }
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+			return false;
+		FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+		try {
+			return selection.isApplicable(lv.getShapeType());
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE){
+			return true;
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SelectionGeometryExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/IEditionManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/IEditionManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/IEditionManager.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.layers.ILayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.exceptions.CancelEditingLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.observer.Observable;
+
+public interface IEditionManager  {
+
+    
+    public static int CANCEL_EDITING = 0;
+    public static int ACCEPT_EDITING = 1;
+    public static int CONTINUE_EDITING = 2;
+
+	/**
+	 * @param lyr
+	 * @return
+	 */
+	public ILayerEdited getLayerEdited(FLayer lyr);
+
+	public void editLayer(FLyrVect lv, DefaultViewPanel vista)
+			throws DataException;
+
+	/**
+	 * @return Returns the activeLayerEdited. Null if there isn't any active AND
+	 *         edited
+	 */
+	public ILayerEdited getActiveLayerEdited();
+
+	/**
+	 * @return Returns the mapCtrl.
+	 */
+	public MapControl getMapControl();
+
+	/**
+	 * @param mapCtrl
+	 *            The mapCtrl to set.
+	 */
+	public void setMapControl(MapControl mapCtrl);
+
+	public Feature insertGeometry(Geometry geometry);
+	
+	public Feature insertFeature(Feature feature);
+	
+	public Feature insertGeometry(Geometry geometry, Feature feature) ;
+	
+	public Feature insertAndSelectGeometry(String toolName, Geometry geometry);
+	
+	public EditableFeature updateGeometry(FeatureStore store, Feature feature, Geometry geometry);
+	
+    public EditableFeature updateFeature(FeatureStore store, Feature feature);
+    
+    public void removeFeature(FeatureStore store, Feature feature);
+    
+    public void stopEditLayer(DefaultViewPanel view, FLyrVect lv, int mode)
+        throws CancelEditingLayerException, ReadException;
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/IEditionManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/toggle/AbstractTogglePropertyExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/toggle/AbstractTogglePropertyExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/toggle/AbstractTogglePropertyExtension.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.toggle;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.EditionUtilities;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * @author jldominguez
+ *
+ */
+public abstract class AbstractTogglePropertyExtension extends Extension {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(AbstractTogglePropertyExtension.class);
+    
+    public void initialize() {
+    }
+
+    public void execute(String actionCommand) {
+        
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        if (!(v instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel)) {
+            logger.info("Executing toggle extension when window is not view (?)");
+            return;
+        }
+        
+        if (actionCommand.compareTo(getActionCommand()) != 0) {
+            logger.info("Executing toggle extension. Unexpected command: " + actionCommand
+                + ". Expected: " + getActionCommand());
+            return;
+        }
+            
+        MapControl mc=((DefaultViewPanel)v).getMapControl();
+        doToggleValue(mc);
+    }
+
+
+    public boolean isEnabled() {
+        return isVisible();
+    }
+
+    public boolean isVisible() {
+        return optionMustBeAvailable();
+    }
+    
+    // ========================
+    
+    protected boolean optionMustBeAvailable() {
+        return (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE);
+    }
+    
+    protected abstract String getActionCommand();
+    protected abstract void doToggleValue(MapControl mc);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/toggle/AbstractTogglePropertyExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StartEditing.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StartEditing.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StartEditing.java	(revision 42196)
@@ -0,0 +1,202 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import java.awt.Component;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.plugins.IExtensionExecuteWithArgs;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.CADTool;
+import org.gvsig.editing.gui.tokenmarker.ConsoleToken;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.utils.console.jedit.KeywordMap;
+import org.gvsig.utils.console.jedit.Token;
+
+
+public class StartEditing extends Extension implements IExtensionExecuteWithArgs {
+
+    private static Logger logger = LoggerFactory.getLogger(StartEditing.class);
+
+	public void initialize() {
+	}
+
+    public void execute(String actionCommand) {
+		this.execute(actionCommand, null);
+	}
+
+	public void execute(String actionCommand, Object[] args) {
+
+        if (actionCommand.compareTo("layer-start-editing") == 0) {
+
+        	FLayer[] selectedItems = null;
+    		// Desde el menu contextual del TOC se le pasan las capas seleccionadas como primer argumento.
+        	if( args!=null && args.length>0 && args[0] instanceof FLayer[] ) {
+        		selectedItems = (FLayer[]) args[0];
+        	}
+
+            org.gvsig.andami.ui.mdiManager.IWindow f =
+                PluginServices.getMDIManager().getActiveWindow();
+
+            if (f instanceof DefaultViewPanel) {
+                DefaultViewPanel vista = (DefaultViewPanel) f;
+
+                MapControl mapControl = vista.getMapControl();
+                ViewDocument model = vista.getModel();
+                FLayer[] actives =
+                    model.getMapContext().getLayers().getActives();
+
+                if (actives.length == 1 && actives[0] instanceof FLyrVect) {
+
+                    FLyrVect lv = (FLyrVect) actives[0];
+
+                    if (!lv.getFeatureStore().getTransforms().isEmpty()) {
+
+                        // cannot edit transformed
+                        JOptionPane
+                            .showMessageDialog(
+                                (Component) f,
+                                Messages
+                                    .get("_Cannot_start_edition_in_transformed_layer")
+                                    + ": '" + lv.getName() + "'",
+                                PluginServices.getText(this, "warning_title"),
+                                JOptionPane.INFORMATION_MESSAGE);
+                        return;
+                    }
+
+                    if (!lv.isWritable()) {
+                        JOptionPane.showMessageDialog((Component) f,
+                            PluginServices.getText(this,
+                                "this_layer_is_not_self_editable"),
+                            PluginServices.getText(this, "warning_title"),
+                            JOptionPane.WARNING_MESSAGE);
+                    }
+
+                    IEditionManager editionManager =
+                        EditionLocator.getEditionManager();
+
+                    // ==============================================
+                    // Set visibility and snapping of grid according to
+                    // grid preferences.
+                    //FIXME: Coger los valores de las preferencias del plugin de snapping y pas�rselos al mapControl
+//                    Preferences prefs = GridPage.prefs;
+//                    boolean b = prefs.getBoolean("grid.showgrid", false);
+//                    mapControl.setGridVisibility(b);
+//                    b = prefs.getBoolean("grid.adjustgrid", false);
+//                    mapControl.setAdjustGrid(b);
+                    // Enable snapping to geometries
+                    // (this enables snappers which are active
+                    mapControl.setRefentEnabled(true);
+                    /*
+                     * Add if not present in list of layers to snap to:
+                     */
+                    List snaplist = mapControl.getMapContext().getLayersToSnap();
+                    if (!snaplist.contains(lv)) {
+                    	snaplist.add(lv);
+                    }
+                    // ==============================================
+
+                    try {
+                        editionManager.editLayer(lv, vista);
+                    } catch ( CancelException e) {
+                    	// Do nothing
+                    } catch (DataException e) {
+
+                        logger.info(
+                            "Error while starting edition: " + e.getMessage(), e);
+
+                        ApplicationLocator.getManager().message(
+                            Messages.get("_Unable_to_start_edition_in_layer")
+                                + ": " + lv.getName(),
+                            JOptionPane.ERROR_MESSAGE);
+                    }
+                }
+            }
+        }
+    }
+
+
+
+	public static void startCommandsApplicable(DefaultViewPanel vista,FLyrVect lv) {
+	    if (vista==null)
+	        vista=(DefaultViewPanel)PluginServices.getMDIManager().getActiveWindow();
+
+	    CADTool[] cadtools = CADExtension.getCADTools();
+		KeywordMap keywordMap = new KeywordMap(true);
+		for (int i = 0; i < cadtools.length; i++) {
+			try {
+				if (cadtools[i].isApplicable(lv.getShapeType())){
+					keywordMap.add(cadtools[i].getName(), Token.KEYWORD2);
+					keywordMap.add(cadtools[i].toString(), Token.KEYWORD3);
+				}
+			} catch (ReadException e) {
+				NotificationManager.addError(e.getMessage(),e);
+			}
+
+		}
+		ConsoleToken consoletoken = new ConsoleToken(keywordMap);
+		vista.getConsolePanel().setTokenMarker(consoletoken);
+
+	}
+
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+				.getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+		if (f instanceof DefaultViewPanel){
+			DefaultViewPanel view=(DefaultViewPanel)f;
+			FLayer[] selected = view.getModel().getMapContext().getLayers()
+			.getActives();
+			if (selected.length == 1 && selected[0].isAvailable() && selected[0] instanceof FLyrVect) {
+				if (selected[0].isEditing())
+					return false;
+				return true;
+			}
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StartEditing.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MatrixExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MatrixExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MatrixExtension.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.MatrixCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la creaci�n de una matriz a partir de
+ * la geometr�a seleccionada.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MatrixExtension extends Extension {
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+	private MatrixCADTool matrixCADTool;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		registerIcons();
+		matrixCADTool=new MatrixCADTool();
+		CADExtension.addCADTool("_matrix",matrixCADTool);
+
+
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-matrix", this);
+		IconThemeHelper.registerIcon("editing-tools", "layer-modify-matrix-addpoint", this);
+		IconThemeHelper.registerIcon("editing-tools", "layer-modify-matrix-lagxy", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if ("layer-modify-matrix".equalsIgnoreCase(s)) {
+			 CADExtension.setCADTool("_matrix",true);
+	    }
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+					return false;
+				FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+				if (matrixCADTool.isApplicable(lv.getShapeType())){
+					return true;
+				}
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MatrixExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/LegendControl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/LegendControl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/LegendControl.java	(revision 42196)
@@ -0,0 +1,71 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.fmap.rendering;
+
+import java.util.BitSet;
+
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.VectorialUniqueValueLegend;
+
+public class LegendControl extends VectorialUniqueValueLegend{
+
+	private BitSet isBlocked=new BitSet();
+	private BitSet isActivated=new BitSet();
+	private BitSet isDisabled=new BitSet();
+	private BitSet isFilled=new BitSet();
+	private int present=0;
+
+	public LegendControl(int shapeType) {
+		super(shapeType);
+	}
+	public boolean isBlocked(int i) {
+		return isBlocked.get(i);
+	}
+	public boolean isActivated(int i) {
+		return isActivated.get(i);
+	}
+	public boolean isDisabled(int i) {
+		return isDisabled.get(i);
+	}
+	public boolean isFilled(int i) {
+		return isFilled.get(i);
+	}
+	public void setBlocked(int i,boolean b) {
+		isBlocked.set(i,b);
+	}
+	public void setActivated(int i,boolean b) {
+		isActivated.set(i,b);
+	}
+	public void setDisabled(int i,boolean b) {
+		isDisabled.set(i,b);
+	}
+	public void setFilled(int i,boolean b) {
+		isFilled.set(i,b);
+	}
+	public void setPresent(int i) {
+		present=i;
+	}
+	public int getPresent() {
+		return present;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/LegendControl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionManagerLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionManagerLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionManagerLegend.java	(revision 42196)
@@ -0,0 +1,132 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.fmap.rendering;
+
+import java.util.ArrayList;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialUniqueValueLegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+public class EditionManagerLegend implements EditionLegend{
+	private ArrayList rules=new ArrayList();
+	private IVectorLegend vectorialLegend;
+	private IVectorLegend originalVectorialLegend;
+	private LegendControl lc = new LegendControl(Geometry.TYPES.GEOMETRY);
+
+	public EditionManagerLegend(IVectorLegend vl) {
+		originalVectorialLegend=vl;
+		vectorialLegend=vl;//(VectorialLegend)vl.cloneLegend();
+	}
+	public Object getValue(int i) {
+		Object value=null;
+		if (vectorialLegend instanceof IClassifiedLegend) {
+			value = ((IClassifiedLegend) vectorialLegend).getValues()[i];
+		}else {
+			value=new String(PluginServices.getText(this,"todos_los_valores"));
+		}
+		return value;
+	}
+	public ISymbol getSymbol(int i) {
+		ISymbol symbol=null;
+			symbol=((IVectorialUniqueValueLegend)vectorialLegend).getSymbolByValue(getValue(i));
+		return symbol;
+	}
+	public boolean isActived(int i) {
+		return lc.isActivated(i);
+	}
+	public boolean isBlocked(int i) {
+		return lc.isBlocked(i);
+	}
+	public boolean isDisable(int i) {
+		return lc.isDisabled(i);
+	}
+	public boolean isFilled(int i) {
+		return lc.isFilled(i);
+	}
+	public boolean isPresent(int i) {
+		return (i==getPresent());
+	}
+	private int getPresent() {
+		return lc.getPresent();
+	}
+	public void setActived(int i,boolean b) {
+		lc.setActivated(i,b);
+	}
+	public void setBlocked(int i,boolean b) {
+		lc.setBlocked(i,b);
+	}
+	public void setDisable(int i, boolean b) {
+		lc.setDisabled(i,b);
+	}
+	public void setFilled(int i,boolean b) {
+		lc.setFilled(i,b);
+	}
+	public void setPresent(int i) {
+		lc.setPresent(i);
+	}
+	public int getRowCount() {
+		if (vectorialLegend instanceof IClassifiedLegend) {
+			IClassifiedLegend classifiedLegend =
+					(IClassifiedLegend) vectorialLegend;
+			return classifiedLegend.getValues().length;
+    	}
+        return 1;
+	}
+	public void setValue(int i, Object value) {
+		Object previousValue=getValue(i);
+		ISymbol previousSymbol=getSymbol(i);
+		Object clave;
+	    ISymbol theSymbol=null;
+	    int numRow=getRowCount();
+	    // Borramos las anteriores listas:
+	    //((UniqueValueLegend)vectorialLegend).clear();
+
+	    boolean bRestoValores = false; // PONERLO EN UN CHECKBOX
+	    int hasta;
+	    hasta = getRowCount();
+//	    for (int row = 0; row < numRow; row++) {
+//	        clave = getValue(row);
+//	    	if (row==i)
+	    if (!value.equals(previousValue)) {
+	    	((IVectorialUniqueValueLegend)vectorialLegend).delSymbol(previousValue);
+	    	clave=value;
+	        ((IVectorialUniqueValueLegend)vectorialLegend).addSymbol(value, previousSymbol);
+	        System.out.println(value);
+//	    }
+	    }
+	    if (bRestoValores) {
+	      	theSymbol = getSymbol(hasta);
+	       	vectorialLegend.setDefaultSymbol(theSymbol);
+	    }
+	}
+	public void setSymbol(int row, Object value) {
+	}
+	public String getPresentSubLayer() {
+		return getValue(getPresent()).toString();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionManagerLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionLegend.java	(revision 42196)
@@ -0,0 +1,28 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.fmap.rendering;
+
+public interface EditionLegend {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/fmap/rendering/EditionLegend.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CancelException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CancelException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CancelException.java	(revision 42196)
@@ -0,0 +1,8 @@
+package org.gvsig.editing;
+
+public class CancelException extends RuntimeException {
+
+	public CancelException(String msg) {
+		super(msg);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CancelException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/ToolSelectGraphic.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/ToolSelectGraphic.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/ToolSelectGraphic.java	(revision 42196)
@@ -0,0 +1,127 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.graphictools;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.andami.PluginServices;
+//import org.gvsig.fmap.mapcontext.layers.FBitSet;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+
+
+
+/**
+ * <p>Listener that selects the items of a {@link GraphicLayer GraphicLayer} that their area
+ *  intersects with the point selected on the associated <code>MapControl</code>.</p>
+ *
+ * <p>Listens a single click of any mouse's button.</p>
+ */
+public class ToolSelectGraphic implements PointListener{
+
+//	private final Image img = new ImageIcon(MapControl.class.getResource(
+//	"images/PointSelectCursor.gif")).getImage();
+	/**
+	 * The image to display when the cursor is active.
+	 */
+	private final Image img = PluginServices.getIconTheme().get("cursor-select-by-polygon").getImage();
+
+	/**
+	 * The cursor used to work with this tool listener.
+	 *
+	 * @see #getCursor()
+	 */
+//	private Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(img,
+//	new Point(16, 16), "");
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapControl mapCtrl;
+
+	/**
+	 * <p>Creates a new <code>ToolSelectGraphic</code> object.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where will be applied the changes
+	 */
+	public ToolSelectGraphic(MapControl mc) {
+	this.mapCtrl = mc;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) throws BehaviorException {
+//        Point2D p = event.getPoint();
+//        Point2D mapPoint = mapCtrl.getViewPort().toMapPoint((int) p.getX(), (int) p.getY());
+//
+//        // Tolerancia de 3 pixels
+//        double tol = mapCtrl.getViewPort().toMapDistance(3);
+//        GraphicLayer gLyr = mapCtrl.getMapContext().getGraphicsLayer();
+//        Rectangle2D recPoint = new Rectangle2D.Double(mapPoint.getX() - (tol / 2),
+//        		mapPoint.getY() - (tol / 2), tol, tol);
+//
+//        FBitSet oldBitSet = gLyr.getSelection();
+//
+//        FBitSet newBitSet = gLyr.queryByRect(recPoint);
+//        if (event.getEvent().isControlDown())
+//            newBitSet.xor(oldBitSet);
+//        gLyr.setSelection(newBitSet);
+//
+//		mapCtrl.drawGraphics();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
+	 */
+	public Image getImageCursor() {
+		return img;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return false;
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/ToolSelectGraphic.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/VisitorSelectGraphicByPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/VisitorSelectGraphicByPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/VisitorSelectGraphicByPoint.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.graphictools;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.geom.Geometry;
+//import org.gvsig.fmap.mapcontext.layers.FBitSet;
+
+import com.vividsolutions.jts.index.ItemVisitor;
+
+/**
+ * @author fjp
+ *
+ * @deprecated Use queryByRect
+ */
+public class VisitorSelectGraphicByPoint implements ItemVisitor{
+
+	private Point2D mapPoint;
+	private double tol;
+//	private FBitSet selection = new FBitSet();
+	private int numReg;
+	Rectangle2D recPoint;
+
+	public VisitorSelectGraphicByPoint(Point2D mapPoint, double tolerance)
+	{
+		this.mapPoint = mapPoint;
+		this.tol = tolerance;
+		this.numReg = 0;
+
+        recPoint = new Rectangle2D.Double(mapPoint.getX() - (tolerance / 2),
+        		mapPoint.getY() - (tolerance / 2), tolerance, tolerance);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vividsolutions.jts.index.ItemVisitor#visitItem(java.lang.Object)
+	 * TODO: VENDRIA BIEN SABER EL NUMERO DE REGISTRO PARA PODER MARCARLO COMO SELECCIONADO
+	 */
+	public void visitItem(Object item) {
+//		FGraphic graf = (FGraphic) item;
+//		Geometry geom = graf.getGeom();
+//		if (geom.intersects(recPoint))
+//		{
+//			selection.set(numReg);
+//		}
+//		numReg++;
+
+	}
+
+//	public FBitSet getSelection() {
+//		return selection;
+//	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/graphictools/VisitorSelectGraphicByPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditionPreferencePage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditionPreferencePage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditionPreferencePage.java	(revision 42196)
@@ -0,0 +1,540 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.preferences;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.LineBorder;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.SingleLayerIterator;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+public class EditionPreferencePage extends AbstractPreferencePage {
+
+	private static final Logger logger =
+			LoggerFactory.getLogger(EditionPreferencePage.class);
+
+	private JLabel jLabel = null;
+
+	private JTextField jTxtTolerance = null;
+
+	private JLabel jLabel1 = null;
+
+	private JSeparator jSeparator = null;
+
+	private JScrollPane jScrollPane = null;
+
+	private JTable jTableSnapping = null;
+
+	private JLabel jLabelCache = null;
+
+	private JPanel jPanelNord = null;
+
+	private JPanel jPanelCache = null;
+	private boolean changed = false;
+
+	private FLayers layers;
+
+	private MapContext mapContext;
+
+	private static MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+	private class MyRecord {
+		public Boolean bSelec = new Boolean(false);
+
+		public String layerName;
+
+		public Integer maxFeat = new Integer(1000);
+	}
+
+	private class MyTableModel extends AbstractTableModel {
+		private ArrayList records = new ArrayList();
+
+		public MyTableModel(FLayers layers) {
+			addLayer(layers);
+		}
+
+		private void addLayer(FLayer lyr) {
+			if (lyr instanceof FLayers) {
+				FLayers lyrGroup = (FLayers) lyr;
+				for (int i = 0; i < lyrGroup.getLayersCount(); i++) {
+					FLayer lyr2 = lyrGroup.getLayer(i);
+					addLayer(lyr2);
+				}
+			} else {
+				if (lyr instanceof FLyrVect) {
+					FLyrVect aux = (FLyrVect) lyr;
+					MyRecord rec = new MyRecord();
+					rec.layerName = lyr.getName();
+					SpatialCache spatialCache = aux.getSpatialCache();
+					rec.bSelec = new Boolean(spatialCache.isEnabled());
+					rec.maxFeat = new Integer(spatialCache.getMaxFeatures());
+					records.add(rec);
+				}
+			}
+		}
+
+		public int getColumnCount() {
+			return 3;
+		}
+
+		public int getRowCount() {
+			return records.size();
+		}
+
+		public Object getValueAt(int rowIndex, int columnIndex) {
+			MyRecord rec = (MyRecord) records.get(rowIndex);
+			if (columnIndex == 0)
+				return rec.bSelec;
+			if (columnIndex == 1)
+				return rec.layerName;
+			if (columnIndex == 2)
+				return rec.maxFeat;
+			return null;
+
+		}
+
+		public Class getColumnClass(int c) {
+			if (c == 0)
+				return Boolean.class;
+			if (c == 2)
+				return Integer.class;
+			return String.class;
+		}
+
+		public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+			MyRecord rec = (MyRecord) records.get(rowIndex);
+			if (columnIndex == 0)
+				rec.bSelec = (Boolean) aValue;
+			if (columnIndex == 2) {
+				if (aValue != null)
+					rec.maxFeat = (Integer) aValue;
+				else
+					rec.maxFeat = new Integer(0);
+			}
+			changed  =true;
+			super.setValueAt(aValue, rowIndex, columnIndex);
+		}
+
+		public boolean isCellEditable(int rowIndex, int columnIndex) {
+			if (columnIndex == 0)
+				return true;
+			if (columnIndex == 2)
+				return true;
+
+			return false;
+		}
+
+		public String getColumnName(int column) {
+			if (column == 0)
+				return PluginServices.getText(this, "Selected");
+			if (column == 1)
+				return PluginServices.getText(this, "LayerName");
+			if (column == 2)
+				return PluginServices.getText(this, "MaxFeaturesEditionCache");
+			return "You shouldn't reach this point";
+
+		}
+
+	}
+
+	/**
+	 * This method initializes
+	 *
+	 */
+	public EditionPreferencePage() {
+		super();
+		initialize();
+	}
+
+	/*
+	 * private void addLayer(FLayer lyr) { if (lyr instanceof FLayers) { FLayers
+	 * lyrGroup = (FLayers) lyr; for (int i=0; i < lyrGroup.getLayersCount();
+	 * i++) { FLayer lyr2 = lyrGroup.getLayer(i); addLayer(lyr2); } } else { if
+	 * (lyr instanceof FLyrVect) { layers.add(lyr); } } }
+	 */
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+		BorderLayout layout = new BorderLayout();
+		layout.setHgap(20);
+
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+		this.setLayout(layout);
+
+		jLabelCache = new JLabel();
+		jLabelCache.setText(PluginServices.getText(this, "capas_edition_cache"));
+		jLabelCache.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
+		jLabelCache.setPreferredSize(new java.awt.Dimension(500,20));
+		jLabelCache.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+		jLabel1 = new JLabel();
+		jLabel1.setText(i18nManager.getTranslation("pixels"));
+		jLabel1.setBounds(new java.awt.Rectangle(195, 8, 207, 15));
+		jLabel1.setPreferredSize(new java.awt.Dimension(28, 20));
+		jLabel1.setName("jLabel1");
+		jLabel = new JLabel();
+		jLabel.setText(i18nManager.getTranslation("snap_tolerance"));
+		jLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+		jLabel.setName("jLabel");
+		jLabel.setBounds(new java.awt.Rectangle(15, 8, 122, 15));
+		jLabel.setPreferredSize(new java.awt.Dimension(28, 20));
+		jLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
+
+		this.setSize(new java.awt.Dimension(502,288));
+		this.setPreferredSize(this.getSize());
+		this.add(getJPanelNord(), BorderLayout.NORTH);
+
+		this.add(getJPanelCache(), BorderLayout.CENTER);
+
+	}
+
+	public String getID() {
+		return this.getClass().getName();
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "Edition");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see com.iver.cit.gvsig.gui.preferences.IPreference#initializeValues()
+	 */
+	public void initializeValues() {
+		TableModel tm = getJTableSnapping().getModel();
+//		IEditionManager edManager = EditionLocator.getEditionManager();
+		FLayer layerActive=layers.getActives()[0];
+//		VectorialLayerEdited lyrEd = (VectorialLayerEdited) edManager
+//			.getLayerEdited(layerActive);
+		ArrayList layersToSnap = layerActive.getMapContext().getLayersToSnap();
+		ArrayList layersVect=new ArrayList();
+		for (int i = 0; i < layers.getLayersCount(); i++) {
+			FLayer layer=layers.getLayer(i);
+			if (layer instanceof FLyrVect) {
+				layersVect.add(layer);
+			}
+		}
+		for (int i = 0; i < layersVect.size(); i++) {
+			FLyrVect lv=(FLyrVect)layersVect.get(i);
+			tm.setValueAt(lv.getName(), i, 1);
+			tm.setValueAt(layersToSnap.contains(lv), i, 0);
+			tm.setValueAt(lv.getSpatialCache().getMaxFeatures(), i, 2);
+		}
+	}
+
+	public void storeValues() throws StoreException {
+		TableModel tm = getJTableSnapping().getModel();
+		ArrayList layersToSnap = new ArrayList();
+		for (int i = 0; i < tm.getRowCount(); i++) {
+			String layerName = (String) tm.getValueAt(i, 1);
+			FLyrVect lyr = (FLyrVect) layers.getLayer(layerName);
+			Boolean bUseCache = (Boolean) tm.getValueAt(i, 0);
+			Integer maxFeat = (Integer) tm.getValueAt(i, 2);
+
+			// Decidimos si vamos a habilitar el spatialCache DESPUES, justo
+			// antes de renderizar.
+			// Necesitamos un m�todo que explore las capas en edici�n y mire las
+			// capas sobre las
+			// que se necestia el cache. Aqu� lo que hacemos es a�adir las
+			// seleccionadas a la
+			// lista de capas asociadas al snapping de los temas activos en
+			// edici�n.
+			// Lo del m�ximo de features en cach�, tiene que ser para cada capa
+			// distinto. Pero no
+			// puedes "chafar" el que ya hay, porque puedes fastidiar a otra
+			// capa en edici�n.
+			// Como m�ximo, lo que podemos hacer es que si es mayor al que hay,
+			// lo subimos. Si
+			// se solicita uno menor, lo dejamos como est�.
+			// Otra opci�n ser�a no hacer caso de esto para cada capa, y ponerlo
+			// de forma global.
+			// lyr.setSpatialCacheEnabled(bUseCache.booleanValue());
+			lyr.setMaxFeaturesInEditionCache(maxFeat.intValue());
+			if (bUseCache.booleanValue())
+				layersToSnap.add(lyr);
+		}
+		SingleLayerIterator it = new SingleLayerIterator(layers);
+
+		while (it.hasNext()) {
+			FLayer aux = it.next();
+			if (aux instanceof FLyrVect)
+			{
+				FLyrVect lyrVect = (FLyrVect) aux;
+				// Inicializamos todas
+				lyrVect.getSpatialCache().setEnabled(false);
+				if (aux.isActive())
+					if (aux.isEditing()) {
+						// Sobre la capa en edici�n siempre se puede hacer snapping
+						lyrVect.getSpatialCache().setEnabled(true);
+						lyrVect.getMapContext().setLayersToSnap(layersToSnap);
+//						VectorialLayerEdited lyrEd = (VectorialLayerEdited) edManager
+//								.getLayerEdited(aux);
+//						lyrEd.setLayersToSnap(layersToSnap);
+
+					}
+			}
+		} // while
+		it.rewind();
+		/*
+		 * Iteramos por las capas en edici�n y marcamos aquellas capas que
+		 * necesitan trabajar con el cache habilitado
+		 */
+		while (it.hasNext()) {
+			FLayer aux = it.next();
+			if (aux.isEditing())
+				if (aux instanceof FLyrVect) {
+					MapContext mx=aux.getMapContext();
+//					VectorialLayerEdited lyrEd = (VectorialLayerEdited) edManager
+//								.getLayerEdited(aux);
+						for (int i=0; i<mx.getLayersToSnap().size(); i++)
+						{
+							FLyrVect lyrVect = (FLyrVect) mx.getLayersToSnap().get(i);
+							lyrVect.getSpatialCache().setEnabled(true);
+						}
+
+				}
+
+		} // while
+
+		try{
+			mapControlManager.setTolerance(Integer.parseInt(getJTxtTolerance().getText()));
+
+		}catch (Exception e) {
+			throw new StoreException(PluginServices.getText(this, "tolerancia_incorrecta"),e);
+		}
+
+		/*
+		 * I think "mapContext.invalidate()" does not work as expected.
+		 * Some layers are not actually redrawn.
+		 */
+		forceRepaint(mapContext);
+	}
+
+
+	/**
+	 * Not very elegant method to force repaint of view.
+	 * @param mco
+	 */
+	private void forceRepaint(MapContext mco) {
+
+		ViewPort vp = mco.getViewPort();
+		Envelope env = vp.getAdjustedEnvelope();
+		try {
+			env = (Envelope) env.clone();
+		} catch (CloneNotSupportedException e) {
+			logger.error("Unable to clone envelope: ", e);
+		}
+		Point uc = env.getUpperCorner();
+		double upperx = uc.getX();
+		double inc_len = 0.000001 * env.getLength(0);
+		uc.setX(upperx + inc_len);
+		vp.setEnvelope(env);
+	}
+
+	public void initializeDefaults() {
+		getJTxtTolerance().setText("4");
+		TableModel tm = getJTableSnapping().getModel();
+		for (int i = 0; i < tm.getRowCount(); i++) {
+			String layerName = (String) tm.getValueAt(i, 1);
+			FLyrVect lyr = (FLyrVect) layers.getLayer(layerName);
+			Boolean bUseCache = (Boolean) tm.getValueAt(i, 0);
+			Integer maxFeat = (Integer) tm.getValueAt(i, 2);
+			lyr.getSpatialCache().setEnabled(bUseCache.booleanValue());
+			lyr.setMaxFeaturesInEditionCache(maxFeat.intValue());
+		}
+
+	}
+
+	public ImageIcon getIcon() {
+		return null;
+	}
+
+	public void setMapContext(MapContext mc) {
+		// addLayer(layers);
+		this.mapContext = mc;
+		this.layers = mc.getLayers();
+		MyTableModel tm = new MyTableModel(layers);
+		getJTableSnapping().setModel(tm);
+		getJTxtTolerance().setText(String.valueOf(mapControlManager.getTolerance()));
+	}
+
+	/**
+	 * This method initializes jTxtTolerance
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTxtTolerance() {
+		if (jTxtTolerance == null) {
+			jTxtTolerance = new JTextField();
+			jTxtTolerance.setPreferredSize(new java.awt.Dimension(28, 20));
+			jTxtTolerance.setName("jTxtTolerance");
+			jTxtTolerance.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+			jTxtTolerance.setText("4");
+			jTxtTolerance.setBounds(new java.awt.Rectangle(142, 8, 39, 15));
+			jTxtTolerance.addKeyListener(new KeyListener() {
+               	public void keyPressed(KeyEvent e) { changed = true; }
+				public void keyReleased(KeyEvent e) { changed = true; }
+				public void keyTyped(KeyEvent e){ changed = true; }
+			});
+		}
+		return jTxtTolerance;
+	}
+
+	/**
+	 * This method initializes jSeparator
+	 *
+	 * @return javax.swing.JSeparator
+	 */
+	private JSeparator getJSeparator() {
+		if (jSeparator == null) {
+			jSeparator = new JSeparator();
+			jSeparator.setPreferredSize(new java.awt.Dimension(200,2));
+		}
+		return jSeparator;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setBorder(new LineBorder(Color.GRAY));
+			jScrollPane.setPreferredSize(new java.awt.Dimension(500,419));
+			jScrollPane.setViewportView(getJTableSnapping());
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jTableSnapping
+	 *
+	 * @return javax.swing.JTable
+	 */
+	private JTable getJTableSnapping() {
+		if (jTableSnapping == null) {
+			jTableSnapping = new JTable();
+			jTableSnapping.addKeyListener(new KeyListener() {
+               	public void keyPressed(KeyEvent e) { changed = true; }
+				public void keyReleased(KeyEvent e) { changed = true; }
+				public void keyTyped(KeyEvent e){ changed = true; }
+			});
+		}
+		return jTableSnapping;
+	}
+
+	/**
+	 * This method initializes jPanelNord
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelNord() {
+		if (jPanelNord == null) {
+			jPanelNord = new JPanel();
+			jPanelNord.setLayout(null);
+			jPanelNord
+					.setComponentOrientation(java.awt.ComponentOrientation.UNKNOWN);
+			jPanelNord.setPreferredSize(new java.awt.Dimension(30, 30));
+			jPanelNord.add(jLabel, null);
+			jPanelNord.add(getJTxtTolerance(), null);
+			jPanelNord.add(jLabel1, null);
+
+		}
+		return jPanelNord;
+	}
+
+	/**
+	 * This method initializes jPanelCache
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelCache() {
+		if (jPanelCache == null) {
+			jPanelCache = new JPanel();
+			jPanelCache.setLayout(new BorderLayout());
+			jPanelCache.setBorder(new EmptyBorder(10, 10, 10, 10));
+			jPanelCache.add(jLabelCache, java.awt.BorderLayout.NORTH);
+			jPanelCache.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+		}
+		return jPanelCache;
+	}
+
+	public boolean isValueChanged() {
+		return changed;
+	}
+
+	public void setChangesApplied() {
+		changed = false;
+	}
+
+	/*
+	 * non-Javadoc)
+	 * @see org.gvsig.andami.preferences.AbstractPreferencePage#isResizeable()
+	 */
+	public boolean isResizeable() {
+		return true;
+	}
+}  //  @jve:decl-index=0:visual-constraint="14,10"
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditionPreferencePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/DialogEditionPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/DialogEditionPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/DialogEditionPreferences.java	(revision 42196)
@@ -0,0 +1,161 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.preferences;
+
+import java.util.Random;
+
+import javax.swing.ImageIcon;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.DlgPreferences;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+
+public class DialogEditionPreferences  {
+	public class TestPref extends AbstractPreferencePage
+	{
+		String id;
+		public TestPref(String title)
+		{
+			super();
+			id = title;
+			setTitle(title);
+		}
+		public JPanel getPanel() {
+			return this;
+		}
+		public void initializeValues() {
+			// TODO Auto-generated method stub
+
+		}
+		public void storeValues() {
+		}
+		public void initializeDefaults() {
+			// TODO Auto-generated method stub
+
+		}
+		public ImageIcon getIcon() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+		public String getID() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+		public String getTitle() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public boolean isValueChanged() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+		public void setChangesApplied() {
+			// TODO Auto-generated method stub
+
+		}
+
+	}
+	public static void main(String[] args) {
+		try {
+			// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+			// UIManager.setLookAndFeel(Options.JGOODIES_WINDOWS_NAME);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		DialogEditionPreferences test = new DialogEditionPreferences();
+		// test.configureUI();
+		test.test();
+
+	}
+
+	   /**
+     * Configures the UI; tries to set the system look on Mac,
+     * <code>WindowsLookAndFeel</code> on general Windows, and
+     * <code>Plastic3DLookAndFeel</code> on Windows XP and all other OS.<p>
+     *
+     * The JGoodies Swing Suite's <code>ApplicationStarter</code>,
+     * <code>ExtUIManager</code>, and <code>LookChoiceStrategies</code>
+     * classes provide a much more fine grained algorithm to choose and
+     * restore a look and theme.
+     */
+//    private void configureUI() {
+//        UIManager.put(Options.USE_SYSTEM_FONTS_APP_KEY, Boolean.TRUE);
+//        Options.setDefaultIconSize(new Dimension(18, 18));
+//
+//        String lafName =
+//            LookUtils.IS_OS_WINDOWS_XP
+//                ? Options.getCrossPlatformLookAndFeelClassName()
+//                : Options.getSystemLookAndFeelClassName();
+//
+//        try {
+//            UIManager.setLookAndFeel(lafName);
+//        } catch (Exception e) {
+//            System.err.println("Can't set look & feel:" + e);
+//        }
+//    }
+	private void test() {
+		JDialog dlg = new JDialog();
+		dlg.setModal(true);
+		dlg.setTitle("Preferences");
+
+		DlgPreferences panel = DlgPreferences.getInstance();
+
+		for (int i=0; i< 20; i++)
+		{
+			TestPref newPref = new TestPref("Titulo " + i);
+			Random rnd = new Random();
+			if (i> 5)
+				newPref.setParentID("Titulo " + rnd.nextInt(i));
+			//panel.addPreferencePage(newPref);
+
+		}
+
+		FLayers layers = new FLayers();//(null,null);
+		FLyrVect lyrVect = new FLyrVect();
+		lyrVect.setName("Hola");
+		layers.addLayer(lyrVect);
+
+		EditionPreferencePage edPref = new EditionPreferencePage();
+		//panel.addPreferencePage(edPref);
+		// edPref.setLayers(layers);
+
+		dlg.getContentPane().add(panel);
+		dlg.pack();
+		dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+
+		dlg.setVisible(true);
+		lyrVect.dispose();
+
+
+		System.exit(0);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/DialogEditionPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditingPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditingPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditingPage.java	(revision 42196)
@@ -0,0 +1,399 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id: EditingPage.java 36005 2011-08-08 11:15:31Z jpiera $
+ * $Log$
+ * Revision 1.4  2007-09-19 16:01:06  jaume
+ * removed unnecessary imports
+ *
+ * Revision 1.3  2007/05/02 16:55:13  caballero
+ * Editing colors
+ *
+ * Revision 1.1.2.2  2007/05/02 15:49:56  caballero
+ * Editing colors
+ *
+ * Revision 1.1.2.1  2007/05/02 07:50:56  caballero
+ * Editing colors
+ *
+ * Revision 1.4.4.9  2007/02/16 10:30:36  caballero
+ * factor 0 incorrecto
+ *
+ * Revision 1.4.4.8  2006/11/22 01:45:47  luisw2
+ * Recuperados cambios de la RC2 que normalizan la gesti�n de CRSs
+ *
+ * Revision 1.4.4.7  2006/11/15 00:08:09  jjdelcerro
+ * *** empty log message ***
+ *
+ * Revision 1.21  2006/11/08 10:57:55  jaume
+ * remove unecessary imports
+ *
+ * Revision 1.20  2006/10/25 08:34:06  jmvivo
+ * LLamado al PluginServices.getText para las unidades de medida del los combo
+ *
+ * Revision 1.19  2006/10/04 07:23:31  jaume
+ * refactored ambiguous methods and field names and added some more features for preference pages
+ *
+ * Revision 1.18  2006/10/03 09:52:38  jaume
+ * restores to meters
+ *
+ * Revision 1.17  2006/10/03 09:19:12  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.16  2006/10/03 07:26:08  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.15  2006/10/02 15:30:29  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.14  2006/10/02 13:52:34  jaume
+ * organize impots
+ *
+ * Revision 1.13  2006/10/02 13:38:23  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.12  2006/10/02 11:49:23  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.11  2006/09/28 12:04:21  jaume
+ * default selection color now configurable
+ *
+ * Revision 1.10  2006/09/25 10:17:15  caballero
+ * Projection
+ *
+ * Revision 1.9  2006/09/15 10:41:30  caballero
+ * extensibilidad de documentos
+ *
+ * Revision 1.8  2006/09/14 15:43:48  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.7  2006/09/14 15:42:38  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/09/14 06:57:18  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/09/12 15:56:50  jaume
+ * Default Projection now customizable
+ *
+ * Revision 1.4  2006/08/29 07:21:08  cesar
+ * Rename com.iver.cit.gvsig.fmap.Fmap class to com.iver.cit.gvsig.fmap.MapContext
+ *
+ * Revision 1.3  2006/08/22 12:30:59  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/08/22 07:36:04  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/08/04 11:41:05  caballero
+ * poder especificar el zoom a aplicar en las vistas
+ *
+ * Revision 1.3  2006/07/31 10:02:31  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/06/13 07:43:08  fjp
+ * Ajustes sobre los cuadros de dialogos de preferencias
+ *
+ * Revision 1.1  2006/06/12 16:04:28  caballero
+ * Preferencias
+ *
+ * Revision 1.11  2006/06/06 10:26:31  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.10  2006/06/05 17:07:17  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.9  2006/06/05 17:00:44  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.8  2006/06/05 16:57:59  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.7  2006/06/05 14:45:06  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/06/05 11:00:09  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/06/05 10:39:02  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/06/05 10:13:40  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/06/05 10:06:08  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/06/05 09:51:56  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/06/02 10:50:18  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package org.gvsig.editing.gui.preferences;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+
+/**
+ *  Editing configuration page.
+ *  <b><b>
+ *  Here the user can establish what settings wants to use by default regarding to
+ *  editing.
+ *
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class EditingPage extends AbstractPreferencePage {
+    private static final long serialVersionUID = -6126280933781398092L;
+
+    public static String DEFAULT_HANDLER_SYMBOL = "default_editing_handler_symbol"; 
+    public static String DEFAULT_AXIS_REFERENCES_SYMBOL = "default_editing_axis_references_symbol";
+    public static String DEFAULT_RECTANGLE_SELECTION_SYMBOL = "default_editing_rectangle_selection_symbol";
+
+    protected String id;
+    private ImageIcon icon;   
+    private ColorChooserPanel jccDefaultAxisReferencesColor;
+    private ColorChooserPanel jccDefaultGeometrySelectionColor;
+    private ColorChooserPanel jccDefaultHandlerColor;
+
+    private boolean panelStarted = false; 
+    private JSlider jsDefaultAxisReferencesAlpha;
+    private JSlider jsDefaultGeometrySelectionAlpha;
+    private JSlider jsDefaultHandlerAlpha;
+
+    private SymbolManager symbolManager = MapContextLocator.getSymbolManager();
+    private MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+    /**
+     * Creates a new panel containing View preferences settings.
+     *
+     */
+    public EditingPage() {
+        super();
+        id = this.getClass().getName();
+        icon = IconThemeHelper.getImageIcon("editing-properties");
+    }
+
+    public void initializeValues() {
+        if (!panelStarted) getPanel();
+
+        //The values has beed retrieved in the CADExtension.
+
+        // Default axis references color
+        ISymbol axisReferenceSymbol = mapControlManager.getAxisReferenceSymbol();
+        jccDefaultAxisReferencesColor.setColor(axisReferenceSymbol.getColor());
+        jccDefaultAxisReferencesColor.setAlpha(axisReferenceSymbol.getColor().getAlpha());
+        jsDefaultAxisReferencesAlpha.setValue(axisReferenceSymbol.getColor().getAlpha());
+
+        // Default geometry selection color
+        ISymbol geometrySelectionSymbol = mapControlManager.getGeometrySelectionSymbol();
+        jccDefaultGeometrySelectionColor.setColor(geometrySelectionSymbol.getColor());
+        jccDefaultGeometrySelectionColor.setAlpha(geometrySelectionSymbol.getColor().getAlpha());
+        jsDefaultGeometrySelectionAlpha.setValue(geometrySelectionSymbol.getColor().getAlpha());
+
+        // Default handler color
+        ISymbol handlerSymbol = mapControlManager.getHandlerSymbol();
+        jccDefaultHandlerColor.setColor(((IFillSymbol)handlerSymbol).getColor());
+        jccDefaultHandlerColor.setAlpha(((IFillSymbol)handlerSymbol).getColor().getAlpha());
+        jsDefaultHandlerAlpha.setValue(geometrySelectionSymbol.getColor().getAlpha());
+
+    }
+
+    public String getID() {
+        return id;
+    }
+
+    public String getTitle() {
+        return PluginServices.getText(this, "editing");
+    }
+
+    public JPanel getPanel() {
+        if (panelStarted) return this;
+        panelStarted = true;
+
+        // just a separator
+        addComponent(new JLabel(" "));
+
+        addComponent(new JLabel(PluginServices.getText(this,"change_the_editing_colors")));
+
+
+        // default selection color chooser
+        JPanel modifyPanel = new JPanel();
+        modifyPanel.setBorder(new TitledBorder(PluginServices.getText(this, "options.editing.default_axis_references_color")));
+        modifyPanel.setLayout(new GridBagLayout());
+        modifyPanel.add(new JLabel(PluginServices.getText(this,"fill")));
+        modifyPanel.add(jccDefaultAxisReferencesColor = new ColorChooserPanel());
+
+        //		JPanel alphaModifyPanel= new JPanel();
+        modifyPanel.add(new JLabel(PluginServices.getText(this,"alpha")));
+        modifyPanel.add(jsDefaultAxisReferencesAlpha = new JSlider(0,255));
+        jsDefaultAxisReferencesAlpha.setPreferredSize(new Dimension(100,30));
+
+        jsDefaultAxisReferencesAlpha.addChangeListener(new ChangeListener(){
+            public void stateChanged(ChangeEvent e) {
+                jccDefaultAxisReferencesColor.setAlpha(((JSlider)e.getSource()).getValue());
+
+            }});
+
+        addComponent(modifyPanel);
+        addComponent(new JLabel(" "));
+
+        // default drawing color chooser
+        JPanel drawingPanel = new JPanel();
+        drawingPanel.setBorder(new TitledBorder(PluginServices.getText(this, "options.editing.default_rectangle_selection_color")));
+        drawingPanel.setLayout(new GridBagLayout());
+        drawingPanel.add(new JLabel(PluginServices.getText(this,"fill")));
+        drawingPanel.add(jccDefaultGeometrySelectionColor = new ColorChooserPanel());
+
+        //		JPanel alphaDrawingPanel= new JPanel();
+        drawingPanel.add(new JLabel(PluginServices.getText(this,"alpha")));
+        drawingPanel.add(jsDefaultGeometrySelectionAlpha = new JSlider(0,255));
+        jsDefaultGeometrySelectionAlpha.setPreferredSize(new Dimension(100,30));
+
+        jsDefaultGeometrySelectionAlpha.addChangeListener(new ChangeListener(){
+            public void stateChanged(ChangeEvent e) {
+                jccDefaultGeometrySelectionColor.setAlpha(((JSlider)e.getSource()).getValue());
+            }});
+
+        addComponent(drawingPanel);
+        addComponent(new JLabel(" "));
+
+        // default selection color chooser
+        JPanel handlerPanel = new JPanel();
+        handlerPanel.setBorder(new TitledBorder(PluginServices.getText(this, "options.editing.default_handler_color")));
+        handlerPanel.setLayout(new GridBagLayout());
+        handlerPanel.add(new JLabel(PluginServices.getText(this,"fill")));
+        handlerPanel.add(jccDefaultHandlerColor = new ColorChooserPanel());      
+
+        handlerPanel.add(new JLabel(PluginServices.getText(this,"alpha")));
+        handlerPanel.add(jsDefaultHandlerAlpha = new JSlider(0,255));
+        jsDefaultHandlerAlpha.setPreferredSize(new Dimension(100,30));
+
+        jsDefaultHandlerAlpha.addChangeListener(new ChangeListener(){
+            public void stateChanged(ChangeEvent e) {
+                jccDefaultHandlerColor.setAlpha(((JSlider)e.getSource()).getValue());   
+            }});
+
+        addComponent(handlerPanel);
+        addComponent(new JLabel(" "));
+
+        initializeValues();
+        return this;
+    }
+
+    public void storeValues() throws StoreException {
+        Color axisReferencesColor, geometrySelectionColor, handlerColor, handlerOutLineColor;
+        axisReferencesColor = jccDefaultAxisReferencesColor.getColor();
+        geometrySelectionColor = jccDefaultGeometrySelectionColor.getColor();
+        handlerColor = jccDefaultHandlerColor.getColor();       
+
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        DynObject dynObject = pluginsManager.getPlugin(CADExtension.class).getPluginProperties();
+
+        //Symbol for the AxisReferences
+        ISymbol axisReferencesSymbol =
+            symbolManager.createSymbol(Geometry.TYPES.GEOMETRY, axisReferencesColor);
+        if (axisReferencesSymbol instanceof IFillSymbol){
+            ((IFillSymbol)axisReferencesSymbol).setFillColor(axisReferencesColor);
+        }
+        mapControlManager.setAxisReferenceSymbol(axisReferencesSymbol);
+        dynObject.setDynValue(DEFAULT_AXIS_REFERENCES_SYMBOL, axisReferencesSymbol);
+
+        //Symbol for the geometry used in the edition selection
+        ISymbol geometrySelectionSymbol =
+            symbolManager.createSymbol(Geometry.TYPES.GEOMETRY, geometrySelectionColor);
+        if (geometrySelectionSymbol instanceof IFillSymbol){
+            ((IFillSymbol)geometrySelectionSymbol).setFillColor(geometrySelectionColor);           
+        }
+        if (geometrySelectionSymbol instanceof ILineSymbol){
+            ((ILineSymbol)geometrySelectionSymbol).setLineColor(geometrySelectionColor);           
+        }
+        mapControlManager.setGeometrySelectionSymbol(geometrySelectionSymbol);
+        dynObject.setDynValue(DEFAULT_RECTANGLE_SELECTION_SYMBOL, geometrySelectionSymbol);
+
+        //Symbol for the handlers
+        ISymbol handlerSymbol =
+            symbolManager.createSymbol(Geometry.TYPES.GEOMETRY, handlerColor);       
+        if (axisReferencesSymbol instanceof IFillSymbol){
+            ((IFillSymbol)handlerSymbol).setFillColor(handlerColor);
+        }       
+        mapControlManager.setHandlerSymbol(handlerSymbol);
+        dynObject.setDynValue(DEFAULT_HANDLER_SYMBOL, handlerSymbol);
+    }
+
+    public void initializeDefaults() {    
+        jccDefaultAxisReferencesColor.setColor(new Color(100, 100, 100, 100));
+        jsDefaultAxisReferencesAlpha.setValue(100);
+
+        jccDefaultGeometrySelectionColor.setColor(new Color(255, 0,0, 100));
+        jsDefaultGeometrySelectionAlpha.setValue(100);
+
+        jccDefaultHandlerColor.setColor(new Color(255, 0,0, 100));       
+        jsDefaultHandlerAlpha.setValue(100);
+    }
+
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    public boolean isValueChanged() {
+        return super.hasChanged();
+    }
+
+    public void setChangesApplied() {
+        setChanged(false);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/preferences/EditingPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/tokenmarker/ConsoleToken.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/tokenmarker/ConsoleToken.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/tokenmarker/ConsoleToken.java	(revision 42196)
@@ -0,0 +1,189 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.tokenmarker;
+
+import javax.swing.JFrame;
+import javax.swing.text.Segment;
+
+import org.gvsig.utils.console.JConsole;
+import org.gvsig.utils.console.jedit.KeywordMap;
+import org.gvsig.utils.console.jedit.Token;
+import org.gvsig.utils.console.jedit.TokenMarker;
+
+
+
+/**
+ * Console token marker.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ConsoleToken extends TokenMarker{
+
+
+	public ConsoleToken(KeywordMap keywordMap) {
+		keywords=keywordMap;
+	}
+
+	public static void main(String[] args) {
+		JConsole console = new JConsole();
+		//console.addText("-", 0);
+		KeywordMap keywordMap=new KeywordMap(true);
+		keywordMap.add("hola",Token.LABEL);
+		ConsoleToken consoleToken=new ConsoleToken(keywordMap);
+		console.setTokenMarker(consoleToken);
+		JFrame frame = new JFrame();
+		frame.getContentPane().add(console);
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+
+	  // private members
+	  private KeywordMap keywords;
+
+	  private int lastOffset;
+	  private int lastKeyword;
+
+
+
+	  public byte markTokensImpl(byte token, Segment line, int lineIndex)
+	  {
+	    char[] array = line.array;
+	    int offset = line.offset;
+	    lastOffset = offset;
+	    lastKeyword = offset;
+	    int length = line.count + offset;
+
+	loop: for(int i = offset; i < length; i++)
+	    {
+	      int i1 = (i+1);
+
+	      char c = array[i];
+
+	      switch(token)
+	      {
+	        case Token.NULL:
+	          switch(c)
+	          {
+	            case '@':
+	              addToken(i - lastOffset, token);
+	              addToken(length - i, Token.KEYWORD2);
+	              token = Token.NULL;
+	              lastOffset = lastKeyword = length;
+	              break loop;
+
+	            case '#':
+	              doKeyword(line, i, c);
+	              addToken(i - lastOffset,token);
+	              token = Token.LABEL;
+	              lastOffset = lastKeyword = i;
+	              break;
+	            case '*':
+	              doKeyword(line, i, c);
+	              addToken(i - lastOffset,token);
+	              token = Token.KEYWORD3;
+	              lastOffset = lastKeyword = i;
+	              break;
+
+	            case ' ':
+	              doKeyword(line, i, c);
+	          }
+	          break;
+	        case Token.LABEL:
+	          if(c == '>')
+	          {
+	            addToken(i1 - lastOffset, token);
+	            token = Token.NULL;
+	            lastOffset = lastKeyword = i1;
+	          }
+	          break;
+	        case Token.LITERAL2:
+	      /*    if(c == '\'')
+	          {
+	            addToken(i1 - lastOffset, Token.LITERAL2);
+	            token = Token.NULL;
+	            lastOffset = lastKeyword = i1;
+	          }
+	        */
+	          break;
+	        case Token.KEYWORD2:
+		      /*    if(c == '\'')
+		          {
+		            addToken(i1 - lastOffset, Token.KEYWORD2);
+		            token = Token.NULL;
+		            lastOffset = lastKeyword = i1;
+		          }
+		          */
+		          break;
+	        case Token.KEYWORD3:
+		        /*  if(c == '\'')
+		          {
+		            addToken(i1 - lastOffset, Token.KEYWORD3);
+		            token = Token.NULL;
+		            lastOffset = lastKeyword = i1;
+		          }
+		          */
+		          break;
+	        default:
+	          throw new InternalError("Invalid state: " + token);
+	      }
+	    }
+
+	    if (token == Token.NULL)
+	      doKeyword(line, length, '\0');
+
+	    switch(token)
+	    {
+	      case Token.LABEL:
+	      case Token.LITERAL2:
+	        addToken(length - lastOffset, token);
+	        token = Token.NULL;
+	        break;
+	      default:
+	        addToken(length - lastOffset, token);
+	        break;
+	    }
+
+	    return token;
+	  }
+
+	  private boolean doKeyword(Segment line, int i, char c)
+	  {
+	    int i1 = i + 1;
+
+	    int len = i - lastKeyword;
+	    byte id = keywords.lookup(line, lastKeyword, len);
+	    if (id != Token.NULL)
+	    {
+	      if (lastKeyword != lastOffset)
+	        addToken(lastKeyword - lastOffset, Token.NULL);
+	      addToken(len, id);
+	      lastOffset = i;
+	    }
+	    lastKeyword = i1;
+	    return false;
+	  }
+	}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/tokenmarker/ConsoleToken.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/GridAccelerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/GridAccelerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/GridAccelerator.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.accelerators;
+
+import java.awt.KeyEventDispatcher;
+import java.awt.event.KeyEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * @author fjp
+ *
+ */
+public class GridAccelerator implements KeyEventDispatcher {
+
+	public boolean dispatchKeyEvent(KeyEvent e) {
+		if (e.getID() == KeyEvent.KEY_PRESSED)
+			return false;
+
+		IWindow v = PluginServices.getMDIManager().getActiveWindow();
+		if (!(v instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel))
+			return false;
+
+		MapControl mc=((DefaultViewPanel)v).getMapControl();
+		mc.setGridVisibility(!mc.getGrid().isShowGrid());
+
+		System.err.println("Ponemos GRID a " + mc.getGrid().isShowGrid());
+
+		return false;
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/GridAccelerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/ForceCursorAccelerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/ForceCursorAccelerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/ForceCursorAccelerator.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.accelerators;
+
+import java.awt.KeyEventDispatcher;
+import java.awt.event.KeyEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * @author fjp
+ *
+ */
+public class ForceCursorAccelerator implements KeyEventDispatcher {
+
+	public boolean dispatchKeyEvent(KeyEvent e) {
+		if (e.getID() == KeyEvent.KEY_PRESSED)
+			return false;
+
+		IWindow v = PluginServices.getMDIManager().getActiveWindow();
+		if (!(v instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel))
+			return false;
+		MapControl mc=((DefaultViewPanel)v).getMapControl();
+		mc.setAdjustGrid(!mc.getGrid().isAdjustGrid());
+//		System.err.println("Ponemos ForceCursor a " + mc.getGrid().isAdjustGrid());
+		//FIXME: ???? Lo comentarizo para poder compilar
+//		Preferences prefs=GridPage.prefs;
+//		prefs.putBoolean("grid.adjustgrid",mc.getGrid().isAdjustGrid());
+		return false;
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/ForceCursorAccelerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/OrtoAccelerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/OrtoAccelerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/OrtoAccelerator.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.accelerators;
+
+import java.awt.KeyEventDispatcher;
+import java.awt.event.KeyEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.CADToolAdapter;
+
+
+/**
+ * @author fjp
+ *
+ */
+public class OrtoAccelerator implements KeyEventDispatcher {
+
+	public boolean dispatchKeyEvent(KeyEvent e) {
+		if (e.getID() == KeyEvent.KEY_PRESSED)
+			return false;
+		
+		IWindow v = PluginServices.getMDIManager().getActiveWindow();
+		if (!(v instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel))
+			return false;
+		
+		CADToolAdapter adapTool = CADExtension.getCADToolAdapter();
+		adapTool.setOrtoMode(!adapTool.isOrtoMode());
+		
+		System.err.println("Ponemos ORTO a " + adapTool.isOrtoMode());
+		
+		return false;
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/OrtoAccelerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/RefentAccelerator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/RefentAccelerator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/RefentAccelerator.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.accelerators;
+
+import java.awt.KeyEventDispatcher;
+import java.awt.event.KeyEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * @author fjp
+ *
+ */
+public class RefentAccelerator implements KeyEventDispatcher {
+
+	public boolean dispatchKeyEvent(KeyEvent e) {
+		if (e.getID() == KeyEvent.KEY_PRESSED)
+			return false;
+
+		IWindow v = PluginServices.getMDIManager().getActiveWindow();
+		if (!(v instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel))
+			return false;
+
+		MapControl mc=((DefaultViewPanel)v).getMapControl();
+		mc.setRefentEnabled(!mc.isRefentEnabled());
+
+		System.err.println("Ponemos REFENT a " + mc.isRefentEnabled());
+
+		return false;
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/accelerators/RefentAccelerator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/DefaultCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/DefaultCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/DefaultCADTool.java	(revision 42196)
@@ -0,0 +1,1181 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.EditionLocator;
+import org.gvsig.editing.IEditionManager;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Spline;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.utils.console.JConsole;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public abstract class DefaultCADTool implements CADTool, Geometry.TYPES,
+    Geometry.SUBTYPES {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultCADTool.class);
+
+    /**
+     * Reference to the MapControl library manager, used to manage
+     * tools.
+     */
+    protected MapControlManager mapControlManager = MapControlLocator
+        .getMapControlManager();
+    protected GeometryManager geomManager = GeometryLocator
+        .getGeometryManager();
+
+    private CADToolAdapter cadToolAdapter;
+
+    private String question;
+
+    private String[] currentdescriptions;
+
+    private String tool = "selection";
+
+    private DefaultCADTool previousTool;
+
+    private List<Geometry> temporalCache = new ArrayList<Geometry>();
+
+    private GeometryType[] supportedTypes;
+
+    /**
+     * Crea un nuevo DefaultCADTool.
+     */
+    public DefaultCADTool() {
+        loadGeometryTypes();
+    }
+
+    protected void loadGeometryTypes() {
+        int[] types = getSupportedGeometryTypes();
+        if (types == null) {
+            supportedTypes = new GeometryType[0];
+        }
+        else {
+            supportedTypes = new GeometryType[types.length];
+            for (int i = 0; i < types.length; i++) {
+                supportedTypes[i] = loadGeometryType(types[i], GEOM2D);
+            }
+        }
+    }
+
+    public void addTemporalCache(Geometry geom) {
+        
+        if (geom == null) {
+            try {
+                throw new IllegalArgumentException("Null geometry");
+            } catch (Exception ex) {
+                LOG.info("Tried to add null geometry to temporal cache", ex);
+            }
+            return;
+        }
+        
+        temporalCache.add(geom);
+        try {
+            insertSpatialCache(geom);
+        } catch (CreateEnvelopeException e) {
+            LOG.error("Error adding the spatial cache", e);
+        }
+    }
+
+    public void clearTemporalCache() {
+        Geometry[] geoms =
+            temporalCache.toArray(new Geometry[temporalCache.size()]);
+        for (int i = 0; i < geoms.length; i++) {
+            try {
+                removeSpatialCache(geoms[i]);
+            } catch (CreateEnvelopeException e) {
+                LOG.error("Error removing the temporal cache", e);
+            }
+        }
+        temporalCache.clear();
+    }
+
+    private void insertSpatialCache(Geometry geom)
+        throws CreateEnvelopeException {
+        VectorialLayerEdited vle = getVLE();
+        SpatialCache spatialCache =
+            ((FLyrVect) vle.getLayer()).getSpatialCache();
+        Envelope r = geom.getEnvelope();
+        if (geom.getType() == Geometry.TYPES.POINT) {
+            r =
+                geomManager.createEnvelope(r.getMinimum(0), r.getMinimum(1),
+                    r.getMinimum(0) + 1, r.getMinimum(1) + 1, SUBTYPES.GEOM2D);
+        }
+        spatialCache.insert(r, geom);
+
+    }
+
+    private void removeSpatialCache(Geometry geom)
+        throws CreateEnvelopeException {
+        VectorialLayerEdited vle = getVLE();
+        SpatialCache spatialCache =
+            ((FLyrVect) vle.getLayer()).getSpatialCache();
+        Envelope r = geom.getEnvelope();
+        if (geom.getType() == Geometry.TYPES.POINT) {
+            r =
+                geomManager.createEnvelope(r.getMinimum(0), r.getMinimum(1),
+                    r.getMinimum(0) + 1, r.getMinimum(1) + 1, SUBTYPES.GEOM2D);// Rectangle2D.Double(r.getX(),r.getY(),1,1);
+        }
+        spatialCache.remove(r, geom);
+
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param feature
+     */
+    public void draw(Geometry geometry, Feature feature) {
+        if (geometry != null) {
+            getCadToolAdapter().getMapControl().getMapControlDrawer()
+                .draw(geometry, mapControlManager.getGeometrySelectionSymbol());
+        }
+    }
+
+    /**
+     * It draw the selected geometries from the initial point until a new
+     * point.
+     * 
+     * @param mapControlDrawer
+     *            The drawer.
+     * @param firstPoint
+     *            The initial point.
+     * @param x
+     *            The X coordinate of the mouse.
+     * @param y
+     *            The Y coordinate of the mouse.
+     */
+    protected void drawSelectedGeometries(MapControlDrawer mapControlDrawer,
+        Point2D firstPoint, double x, double y) {
+        FeatureStore featureStore = null;
+        DisposableIterator iterator = null;
+        ICoordTrans ct = getVLE().getLayer().getCoordTrans();
+
+        try {
+            featureStore = getVLE().getFeatureStore();
+            FeatureSet selection = (FeatureSet) featureStore.getSelection();
+
+            iterator = selection.fastIterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Geometry geometry =
+                    (feature.getDefaultGeometry()).cloneGeometry();
+
+                if (geometry == null) {
+                    continue;
+                }
+
+                Point2D currentPoint = new Point2D.Double(x, y);
+                if (ct != null) {
+                    currentPoint = ct.getInverted().convert(currentPoint, null);
+                }
+
+                geometry.move(currentPoint.getX() - firstPoint.getX(),
+                    currentPoint.getY() - firstPoint.getY());
+
+                mapControlDrawer.draw(geometry,
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+        } catch (Exception e) {
+            LOG.error("Retrieving the selection", e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    /**
+     * It draw the selected geometries from the initial point until a new
+     * point.
+     * 
+     * @param mapControlDrawer
+     *            The drawer.
+     * @param firstPoint
+     *            The initial point.
+     * @param x
+     *            The X coordinate of the mouse.
+     * @param y
+     *            The Y coordinate of the mouse.
+     * @param affineTransform
+     *            The transformation to apply
+     */
+    protected void drawAndRotateSelectedGeometries(
+        MapControlDrawer mapControlDrawer, Point2D firstPoint, double x,
+        double y) {
+        FeatureStore featureStore = null;
+        DisposableIterator iterator = null;
+
+        try {
+            Point2D lastPoint = new Point2D.Double(x, y);
+
+            double w = lastPoint.getX() - firstPoint.getX();
+            double h = lastPoint.getY() - firstPoint.getY();
+
+            featureStore = getVLE().getFeatureStore();
+            FeatureSet selection = (FeatureSet) featureStore.getSelection();
+
+            iterator = selection.fastIterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Geometry geometry =
+                    (feature.getDefaultGeometry()).cloneGeometry();
+
+                if (geometry == null) {
+                    continue;
+                }
+
+                geometry.rotate(-Math.atan2(w, h) + (Math.PI / 2),
+                    firstPoint.getX(), firstPoint.getY());
+
+                mapControlDrawer.draw(geometry,
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+        } catch (Exception e) {
+            LOG.error("Retrieving the selection", e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    public void setCadToolAdapter(CADToolAdapter cta) {
+        cadToolAdapter = cta;
+    }
+
+    public CADToolAdapter getCadToolAdapter() {
+        return cadToolAdapter;
+    }
+
+    public VectorialLayerEdited getVLE() {
+        
+        return (VectorialLayerEdited) EditionLocator.getEditionManager()
+            .getActiveLayerEdited();
+    }
+
+    public Feature insertGeometry(Geometry geometry, Feature feature) {
+    	return this.getEditionManager().insertGeometry(geometry,feature);
+//
+//    	VectorialLayerEdited vle = getVLE();
+//
+//        try {
+//            FeatureStore featureStore =
+//                ((FLyrVect) vle.getLayer()).getFeatureStore();
+//            EditableFeature eFeature =
+//                featureStore.createNewFeature(
+//                    featureStore.getDefaultFeatureType(), feature);
+//            eFeature.setGeometry(featureStore.getDefaultFeatureType()
+//                .getDefaultGeometryAttributeName(), geometry);
+//            featureStore.insert(eFeature);
+//            // drawToImage(featureStore, vle, eFeature);
+//            insertSpatialCache(geometry);
+//
+//            getCadToolAdapter().getMapControl().getMapControlDrawer()
+//                .draw(geometry, mapControlManager.getGeometrySelectionSymbol());
+//
+//            return eFeature;
+//        } catch (ReadException e) {
+//            NotificationManager.addError(e.getMessage(), e);
+//            return null;
+//        } catch (DataException e) {
+//            NotificationManager.addError(e.getMessage(), e);
+//            return null;
+//        } catch (CreateEnvelopeException e) {
+//            NotificationManager.addError(e.getMessage(), e);
+//            return null;
+//        }
+    }
+
+    public Feature insertFeature(Feature feature) {
+    	return this.getEditionManager().insertFeature(feature);
+    }
+    
+    public Feature insertAndSelectGeometry(Geometry geometry) {
+    	return this.getEditionManager().insertAndSelectGeometry(getName(),geometry);
+//
+//    	Feature feature = null;
+//        try {
+//            FeatureStore featureStore = getVLE().getFeatureStore();
+//            featureStore.beginComplexNotification();
+//            featureStore.beginEditingGroup(getName());
+//            FeatureSelection newSelection =
+//                featureStore.createFeatureSelection();
+//            feature = insertGeometry(geometry);
+//            newSelection.select(feature);
+//            featureStore.setSelection(newSelection);
+//            featureStore.endEditingGroup();
+//            featureStore.endComplexNotification();
+//        } catch (DataException e) {
+//            NotificationManager.showMessageError("insertAndSelectGeoemtry", e);
+//        }
+//        return feature;
+    }
+
+    public void updateGeometry(FeatureStore store, Feature feature, Geometry geometry) {
+    	this.getEditionManager().updateGeometry(store, feature, geometry);
+    }
+    
+    protected IEditionManager getEditionManager() {
+    	return this.getCadToolAdapter().getEditionManager();
+    }
+    
+    public Feature insertGeometry(Geometry geometry) {
+    	return this.getEditionManager().insertGeometry(geometry);
+//    	
+//        VectorialLayerEdited vle = getVLE();
+//
+//        try {
+//            FeatureStore featureStore =
+//                ((FLyrVect) vle.getLayer()).getFeatureStore();
+//            EditableFeature eFeature = featureStore.createNewFeature(true);
+//           
+//            //Reproject the geometry
+//            Geometry insertedGeometry = geometry;
+//            if (getVLE().getLayer().getCoordTrans() != null){
+//                insertedGeometry = insertedGeometry.cloneGeometry();
+//                insertedGeometry.reProject(getVLE().getLayer().getCoordTrans().getInverted());
+//            }
+//            
+//            eFeature.setGeometry(featureStore.getDefaultFeatureType()
+//                .getDefaultGeometryAttributeName(), insertedGeometry);
+//            featureStore.insert(eFeature);
+//
+//            insertSpatialCache(insertedGeometry);
+//
+//            draw(insertedGeometry, eFeature);
+//            return eFeature;
+//        } catch (ReadException e) {
+//            NotificationManager.addError(e.getMessage(), e);
+//            return null;
+//        } catch (DataException e) {
+//            NotificationManager.addError(e.getMessage(), e);
+//            return null;
+//        } catch (CreateEnvelopeException e) {
+//            NotificationManager.addError(e.getMessage(), e);
+//            return null;
+//        }
+
+    }
+
+    /**
+     * Devuelve la cadena que corresponde al estado en el que nos encontramos.
+     * 
+     * @return Cadena para mostrar por consola.
+     */
+    public String getQuestion() {
+        return question;
+    }
+
+    /**
+     * Actualiza la cadena que corresponde al estado actual.
+     * 
+     * @param s
+     *            Cadena que aparecer� en consola.
+     */
+    public void setQuestion(String s) {
+        question = s;
+    }
+
+    /**
+     * Provoca un repintado "soft" de la capa activa en edici�n. Las capas por
+     * debajo de ella no se dibujan de verdad, solo se dibuja la que est� en
+     * edici�n y las que est�n por encima de ella en el TOC.
+     */
+    public void refresh() {
+        getCadToolAdapter().getMapControl().rePaintDirtyLayers();
+    }
+
+    public void drawHandlers(MapControlDrawer renderer, ArrayList selectedRows,
+        AffineTransform at) {
+        FeatureSet selection = null;
+        DisposableIterator iterator = null;
+        try {
+            selection =
+                (FeatureSet) ((FLyrVect) getVLE().getLayer()).getFeatureStore()
+                    .getSelection();
+
+            iterator = selection.fastIterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+
+                Geometry ig = (feature.getDefaultGeometry()).cloneGeometry();
+                if (ig == null) {
+                    continue;
+                }
+                Handler[] handlers = ig.getHandlers(Geometry.SELECTHANDLER);
+                renderer.drawHandlers(handlers, at,
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+
+        } catch (ReadException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+
+    }
+
+    public void setDescription(String[] currentdescriptions) {
+        this.currentdescriptions = currentdescriptions;
+    }
+
+    public String[] getDescriptions() {
+        return currentdescriptions;
+    }
+
+    public void end() {
+        CADExtension.setCADTool("_selection", true);
+        PluginServices.getMainFrame().setSelectedTool("_selection");
+        CADTool cadtool = CADExtension.getCADTool();
+        cadtool.setPreviosTool(this);
+        cadtool.getVLE().getLayer().getMapContext().invalidate();
+    }
+
+    public void init() {
+        // Nothing to do
+    }
+
+    protected ArrayList getSelectedHandlers() {
+        VectorialLayerEdited vle = getVLE();
+        ArrayList selectedHandlers = vle.getSelectedHandler();
+        return selectedHandlers;
+    }
+
+    public void clearSelection() throws DataException {
+        VectorialLayerEdited vle = getVLE();
+        FeatureSelection selection = null;
+        selection =
+            (FeatureSelection) ((FLyrVect) vle.getLayer()).getFeatureStore()
+                .getSelection();
+        // ArrayList selectedRow = vle.getSelectedRow();
+        ArrayList selectedHandlers = vle.getSelectedHandler();
+        selection.deselectAll();
+        selectedHandlers.clear();
+        // VectorialEditableAdapter vea = vle.getVEA();
+        // FBitSet selection = vea.getSelection();
+        // selection.clear();
+        vle.setSelectionImage(null);
+        vle.setHandlersImage(null);
+
+    }
+
+    public String getNextTool() {
+        return tool;
+    }
+
+    public void setNextTool(String tool) {
+        this.tool = tool;
+    }
+
+    public boolean changeCommand(String name) throws CommandException {
+        CADTool[] cadtools = CADExtension.getCADTools();
+        for (int i = 0; i < cadtools.length; i++) {
+            CADTool ct = cadtools[i];
+            if (name.equalsIgnoreCase(ct.getName())
+                || name.equalsIgnoreCase(ct.toString())) {
+                int type = Geometry.TYPES.POINT;
+                try {
+                    type = ((FLyrVect) getVLE().getLayer()).getShapeType();
+                } catch (ReadException e) {
+                    throw new CommandException(e);
+                }
+                if (ct.isApplicable(type)) {
+                    getCadToolAdapter().setCadTool(ct);
+                    ct.init();
+                    DefaultViewPanel vista =
+                        (DefaultViewPanel) PluginServices.getMDIManager()
+                            .getActiveWindow();
+                    vista.getConsolePanel().addText("\n" + ct.getName(),
+                        JConsole.COMMAND);
+                    String question = ct.getQuestion();
+                    vista.getConsolePanel().addText(
+                        "\n" + "#" + question + " > ", JConsole.MESSAGE);
+                    return true;
+                }
+                throw new CommandException(name);
+            }
+        }
+        return false;
+    }
+
+    public boolean isApplicable(int shapeType) {
+        GeometryType type = loadGeometryType(shapeType, GEOM2D);
+        return isApplicable(type);
+    }
+
+    public boolean isApplicable(GeometryType geometryType) {
+        if (supportedTypes != null) {
+            for (int i = 0; i < supportedTypes.length; i++) {
+                if (supportedTypes[i].isTypeOf(geometryType)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns the geometry types supported by the tool.
+     * 
+     * @return the supported geometry types
+     */
+    protected GeometryType[] getSupportedTypes() {
+        return supportedTypes;
+    }
+
+    /**
+     * Returns the list of Geometry types supported by this tool. If any
+     * Geometry type is supported, just return null.
+     * 
+     * @return the list of Geometry types supported by this tool
+     */
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+
+    protected GeometryType loadGeometryType(int type, int subtype) {
+        try {
+            return GeometryLocator.getGeometryManager().getGeometryType(type,
+                subtype);
+        } catch (GeometryTypeNotSupportedException e) {
+            throw new RuntimeException(
+                "Error getting the Geometry type with type = " + type
+                    + ", subtype = " + subtype, e);
+        } catch (GeometryTypeNotValidException e) {
+            throw new RuntimeException(
+                "Error getting the Geometry type with type = " + type
+                    + ", subtype = " + subtype, e);
+        }
+    }
+
+    public abstract String toString();
+
+    public void throwValueException(String s, double d) {
+        IWindow window = PluginServices.getMDIManager().getActiveWindow();
+        if (window instanceof DefaultViewPanel) {
+            ((DefaultViewPanel) window).getConsolePanel().addText(
+                s + " : " + d, JConsole.ERROR);
+        }
+    }
+
+    public void throwOptionException(String s, String o) {
+        IWindow window = PluginServices.getMDIManager().getActiveWindow();
+        if (window instanceof DefaultViewPanel) {
+            ((DefaultViewPanel) window).getConsolePanel().addText(
+                s + " : " + o, JConsole.ERROR);
+        }
+    }
+
+    public void throwPointException(String s, double x, double y) {
+        IWindow window = PluginServices.getMDIManager().getActiveWindow();
+        if (window instanceof DefaultViewPanel) {
+            ((DefaultViewPanel) window).getConsolePanel().addText(
+                s + " : " + " X = " + x + ", Y = " + y, JConsole.ERROR);
+        }
+    }
+
+    public void setPreviosTool(DefaultCADTool tool) {
+        previousTool = tool;
+    }
+
+    public void restorePreviousTool() {
+        CADExtension.setCADTool(previousTool.toString(), true);
+        PluginServices.getMainFrame().setSelectedTool(previousTool.toString());
+    }
+
+    public void endTransition(double x, double y, MouseEvent e) {
+        // Nothing to do
+    }
+
+    /**
+     * Create a curve. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @return
+     *         The Curve
+     */
+    protected Curve createCurve() {
+        try {
+            return (Curve) geomManager.create(TYPES.CURVE, getSubType());
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating curve", new CreateGeometryException(
+                TYPES.CURVE, getSubType(), e));
+        }
+        return null;
+    }
+
+    /**
+     * Create a multicurve. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @return
+     *         The MultiCurve
+     */
+    protected MultiCurve createMultiCurve() {
+        try {
+            return (MultiCurve) geomManager.create(TYPES.MULTICURVE,
+                getSubType());
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating multicurve", new CreateGeometryException(
+                TYPES.MULTICURVE, getSubType(), e));
+        }
+        return null;
+    }
+
+    /**
+     * Create an {@link OrientablePrimitive}. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param geometryType
+     *            a type of a OrientablePrimitive.
+     * @return
+     *         The {@link OrientablePrimitive}
+     */
+    protected OrientablePrimitive createOrientablePrimitive(int geometryType) {
+        try {
+            return (OrientablePrimitive) geomManager.create(geometryType,
+                getSubType());
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating curve", new CreateGeometryException(
+                TYPES.CURVE, getSubType(), e));
+        }
+        return null;
+    }
+
+    /**
+     * Create an envelope like a curve from two points.
+     * If there is an error return <code>null</code> and add the error to the
+     * log.
+     * 
+     * @param firstPoint
+     *            first point
+     * @param secondPoint
+     *            second point
+     * @return
+     *         the curve
+     */
+    protected Curve createEnvelopeLikeCurve(Point2D firstPoint,
+        Point2D secondPoint) {
+        try {
+            Curve curve = (Curve) geomManager.create(TYPES.CURVE, getSubType());
+            curve.addMoveToVertex(createPoint(firstPoint.getX(),
+                firstPoint.getY()));
+            curve.addVertex(createPoint(secondPoint.getX(), firstPoint.getY()));
+            curve
+                .addVertex(createPoint(secondPoint.getX(), secondPoint.getY()));
+            curve.addVertex(createPoint(firstPoint.getX(), secondPoint.getY()));
+            curve.addVertex(createPoint(firstPoint.getX(), firstPoint.getY()));
+            return curve;
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating curve", new CreateGeometryException(
+                TYPES.CURVE, getSubType(), e));
+        }
+        return null;
+    }
+
+    /**
+     * Create a curve from a GeneralPath. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param gpx
+     *            The GeneralPath
+     * @return
+     *         The Curve
+     */
+    protected Curve createCurve(GeneralPathX gpx) {
+        Curve curve = null;
+        try {
+            curve = (Curve) geomManager.create(TYPES.CURVE, getSubType());
+            curve.setGeneralPath(gpx);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating curve", new CreateGeometryException(
+                TYPES.CURVE, getSubType(), e));
+        }
+        return curve;
+    }
+
+    /**
+     * Create a surface. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @return
+     *         The Surface
+     */
+    protected Surface createSurface() {
+        try {
+            return (Surface) geomManager.create(TYPES.SURFACE, getSubType());
+
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating surface", new CreateGeometryException(
+                TYPES.SURFACE, getSubType(), e));
+        }
+        return null;
+    }
+
+    /**
+     * Create a multisurface. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @return
+     *         The MultiSurface
+     */
+    protected MultiSurface createMultiSurface() {
+        try {
+            return (MultiSurface) geomManager.create(TYPES.MULTISURFACE,
+                getSubType());
+
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error(
+                "Error creating multisurface",
+                new CreateGeometryException(TYPES.MULTISURFACE, getSubType(), e));
+        }
+        return null;
+    }
+
+    /**
+     * Create a surface from a GeneralPath. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param gpx
+     *            The general path
+     * @return
+     *         The Surface
+     */
+    protected Surface createSurface(GeneralPathX gpx) {
+        Surface surface = null;
+        try {
+            surface = (Surface) geomManager.create(TYPES.SURFACE, getSubType());
+            surface.setGeneralPath(gpx);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating surface", new CreateGeometryException(
+                TYPES.SURFACE, getSubType(), e));
+        }
+        return surface;
+    }
+
+    /**
+     * Create a curve point. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     *            The AWT point
+     * @return
+     *         The gvSIG point
+     */
+    protected Point createPoint(Point2D p1) {
+        return createPoint(p1.getX(), p1.getY());
+    }
+
+    /**
+     * Create point. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param x
+     *            The X coordinate
+     * @param y
+     *            The y coordinate
+     * @return
+     *         The Point
+     */
+    protected Point createPoint(double x, double y) {
+        Point point = null;
+        try {
+            point = (Point) geomManager.create(TYPES.POINT, getSubType());
+            point.setX(x);
+            point.setY(y);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating point with x=" + x + ", y=" + y,
+                new CreateGeometryException(TYPES.POINT, getSubType(), e));
+        }
+        return point;
+    }
+
+    /**
+     * Create a multipoint. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param x
+     *            The X coordinate
+     * @param y
+     *            The y coordinate
+     * @return
+     *         The MultiPoint
+     */
+    protected MultiPoint createMultiPoint() {
+        try {
+            return (MultiPoint) geomManager.create(TYPES.MULTIPOINT,
+                getSubType());
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating multipoint", new CreateGeometryException(
+                TYPES.MULTIPOINT, getSubType(), e));
+            return null;
+        }
+    }
+
+    /**
+     * Create an Arc. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param p2
+     * @param p3
+     * @return
+     *         The arc
+     */
+    protected Arc createArc(Point2D p1, Point2D p2, Point2D p3) {
+        return createArc(createPoint(p1), createPoint(p2), createPoint(p3));
+    }
+
+    /**
+     * Create an arc. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param p2
+     * @param p3
+     * @return
+     *         The arc
+     */
+    protected Arc createArc(Point p1, Point p2, Point p3) {
+        Arc arc = null;
+        if (p1.equals(p2) || p2.equals(p3) || p1.equals(p3)) {
+            return null;
+        }
+        try {
+            arc = (Arc) geomManager.create(TYPES.ARC, getSubType());
+            arc.setPoints(p1, p2, p3);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating arc with p1=" + p1, ", p2=" + p2
+                + ", p3=" + p3, new CreateGeometryException(TYPES.ARC,
+                getSubType(), e));
+        } catch (IllegalArgumentException ex) {
+            LOG.info("Warning: unable to create arc from points: "
+                + p1.getX() + " " + p1.getY() + " :: "
+                + p2.getX() + " " + p2.getY() + " :: "
+                + p3.getX() + " " + p3.getY());
+            arc = null;
+        }
+        return arc;
+    }
+
+    /**
+     * Create a circle. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param p2
+     * @param p3
+     * @return
+     *         The Circle
+     */
+    protected Circle createCircle(Point p1, Point p2, Point p3) {
+        Circle circle = null;
+        try {
+            circle = (Circle) geomManager.create(TYPES.CIRCLE, getSubType());
+            circle.setPoints(p1, p2, p3);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating circle with p1=" + p1 + " p2=" + p2
+                + ", p3=" + p3, new CreateGeometryException(TYPES.CIRCLE,
+                getSubType(), e));
+        }
+        return circle;
+    }
+
+    /**
+     * Create a circle from a GeneralPath. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param p2
+     * @return
+     *         The circle
+     */
+    protected Circle createCircle(Point2D p1, Point2D p2) {
+        return createCircle(createPoint(p1), createPoint(p2));
+    }
+
+    /**
+     * Create a circle. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param p2
+     * @return
+     *         The circle
+     */
+    protected Circle createCircle(Point p1, Point p2) {
+        Circle circle = null;
+        try {
+            circle = (Circle) geomManager.create(TYPES.CIRCLE, getSubType());
+            circle.setPoints(p1, p2);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating circle with p1=" + p1 + " p2=" + p2,
+                new CreateGeometryException(TYPES.CIRCLE, getSubType(), e));
+        }
+        return circle;
+    }
+
+    /**
+     * Create a circle. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param radious
+     * @return
+     *         The Circle
+     */
+    protected Circle createCircle(Point2D p1, double radious) {
+        return createCircle(createPoint(p1), radious);
+    }
+
+    /**
+     * Create a circle. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param radious
+     * @return
+     *         The Circle
+     */
+    protected Circle createCircle(Point p1, double radious) {
+        Circle circle = null;
+        try {
+            circle = (Circle) geomManager.create(TYPES.CIRCLE, getSubType());
+            circle.setPoints(p1, radious);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating circle with p1=" + p1 + " radious="
+                + radious, new CreateGeometryException(TYPES.CIRCLE,
+                getSubType(), e));
+        }
+        return circle;
+    }
+
+    /**
+     * Create an Ellipse. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param p2
+     * @param d
+     * @return
+     *         The Ellipse
+     */
+    protected Ellipse createEllipse(Point2D p1, Point2D p2, double d) {
+        return createEllipse(createPoint(p1), createPoint(p2), d);
+    }
+
+    /**
+     * Create an Ellipse. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param p1
+     * @param p2
+     * @param d
+     * @return
+     *         The Ellipse
+     */
+    protected Ellipse createEllipse(Point p1, Point p2, double d) {
+        Ellipse ellipse = null;
+        try {
+            ellipse = (Ellipse) geomManager.create(TYPES.ELLIPSE, getSubType());
+            ellipse.setPoints(p1, p2, d);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating ellipse with p1=" + p1 + " p2=" + p2
+                + ", d=" + d, new CreateGeometryException(TYPES.ELLIPSE,
+                getSubType(), e));
+        }
+        return ellipse;
+    }
+
+    /**
+     * Create a Spline from a GeneralPath. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param points
+     * @return
+     *         The Spline
+     */
+    protected Spline createSpline(Point2D[] points) {
+        Spline spline = null;
+        try {
+            spline = (Spline) geomManager.create(TYPES.SPLINE, getSubType());
+            for (int i = 0; i < points.length; i++) {
+                spline.addVertex(createPoint(points[i]));
+            }
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating spline", new CreateGeometryException(
+                TYPES.SPLINE, getSubType(), e));
+        }
+        return spline;
+    }
+
+    /**
+     * Create a MultiPrimitive. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @return
+     */
+    protected MultiPrimitive createMultiPrimitive() {
+        try {
+            return (MultiPrimitive) geomManager.create(TYPES.AGGREGATE,
+                getSubType());
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating MultiPrimitive",
+                new CreateGeometryException(TYPES.SPLINE, getSubType(), e));
+        }
+        return null;
+    }
+
+    /**
+     * Create a MultiPrimitive. If there is an
+     * error return <code>null</code> and add the error
+     * to the log
+     * 
+     * @param geometries
+     * @return
+     */
+    protected MultiPrimitive createMultiPrimitive(Geometry[] geometries) {
+        MultiPrimitive multiPrimitive = null;
+        try {
+            multiPrimitive =
+                (MultiPrimitive) geomManager.create(TYPES.AGGREGATE,
+                    getSubType());
+            for (int i = 0; i < geometries.length; i++) {
+                multiPrimitive.addPrimitive((Primitive) geometries[i]);
+            }
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating MultiPrimitive",
+                new CreateGeometryException(TYPES.SPLINE, getSubType(), e));
+        }
+        return multiPrimitive;
+    }
+
+    /**
+     * @return the subtype of the default geometry.
+     */
+    protected int getSubType() {
+        FeatureStore featureStore =
+            ((FLyrVect) getVLE().getLayer()).getFeatureStore();
+        try {
+            return featureStore.getDefaultFeatureType()
+                .getDefaultGeometryAttribute().getGeometrySubType();
+        } catch (DataException e) {
+            LOG.error(
+                "Error getting subtype of the default feature type of the store: "
+                    + featureStore, e);
+            return SUBTYPES.GEOM3D;
+        }
+    }
+
+    /**
+     * Returns the type of the geometries to create.
+     * 
+     * @return the type of the geometries to create
+     */
+    protected GeometryType getGeometryType() {
+        return getCadToolAdapter().getActiveLayerGeometryType();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/DefaultCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/OptionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/OptionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/OptionException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.exception;
+
+public class OptionException extends Exception {
+
+	public OptionException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	public OptionException(String arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public OptionException(Throwable arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public OptionException(String arg0, Throwable arg1) {
+		super(arg0, arg1);
+		// TODO Auto-generated constructor stub
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/OptionException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/PointException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/PointException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/PointException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.exception;
+
+public class PointException extends Exception {
+
+	public PointException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	public PointException(String arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public PointException(Throwable arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public PointException(String arg0, Throwable arg1) {
+		super(arg0, arg1);
+		// TODO Auto-generated constructor stub
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/PointException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/ValueException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/ValueException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/ValueException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.exception;
+
+public class ValueException extends Exception {
+
+	public ValueException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	public ValueException(String arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public ValueException(Throwable arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public ValueException(String arg0, Throwable arg1) {
+		super(arg0, arg1);
+		// TODO Auto-generated constructor stub
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/ValueException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/CommandException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/CommandException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/CommandException.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.exception;
+
+public class CommandException extends Exception {
+
+	public CommandException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	public CommandException(String arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public CommandException(Throwable arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public CommandException(String arg0, Throwable arg1) {
+		super(arg0, arg1);
+		// TODO Auto-generated constructor stub
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/exception/CommandException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/JoinCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/JoinCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/JoinCADTool.java	(revision 42196)
@@ -0,0 +1,255 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.JoinCADToolContext;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class JoinCADTool extends DefaultCADTool {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(JoinCADTool.class);
+
+    private JoinCADToolContext _fsm;
+
+    /**
+     * M�todo de inicio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new JoinCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_join");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+
+    }
+
+    public void join() {
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        try {
+            featureStore = vle.getFeatureStore();
+        } catch (ReadException e1) {
+            NotificationManager.addError(e1.getMessage(), e1);
+        }
+        DisposableIterator iterator = null;
+        try {
+            featureStore.beginEditingGroup(getName());
+
+            FeatureSelection selection = featureStore.createFeatureSelection();
+            selection.select((FeatureSet) featureStore.getSelection());
+
+            Geometry geomTotal = null;
+            iterator = selection.fastIterator();
+            boolean first = true;
+            Feature firstFeature = null;
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                if (first) {
+                    firstFeature = feature;
+                    first = false;
+                }
+
+                Geometry currentGeometry =
+                    feature.getDefaultGeometry().cloneGeometry();
+                featureStore.delete(feature);
+                if (geomTotal == null) {
+                    geomTotal = currentGeometry;
+                } else {
+                    geomTotal = geomTotal.union(currentGeometry);
+                }
+            }
+
+            super.insertGeometry(geomTotal,firstFeature);
+//            EditableFeature editableFeature =
+//                featureStore.createNewFeature(firstFeature.getType(),
+//                    firstFeature);
+//            editableFeature.setGeometry(featureStore.getDefaultFeatureType()
+//                .getDefaultGeometryAttributeName(), geomTotal);
+//            featureStore.insert(editableFeature);
+            refresh();
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } catch (GeometryOperationNotSupportedException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } catch (GeometryOperationException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+            try {
+                featureStore.endEditingGroup();
+            } catch (NeedEditingModeException e) {
+                LOG.error("Exception endEditingGroup", e);
+            }
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "join_");
+    }
+
+    public String toString() {
+        return "_join";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] {
+            CURVE,
+            MULTICURVE,
+            SURFACE,
+            MULTISURFACE,
+            };
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/JoinCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CircleCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CircleCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CircleCADTool.java	(revision 42196)
@@ -0,0 +1,238 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.CircleCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.CircleCADToolContext.CircleCADToolState;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class CircleCADTool extends AbstractSurfaceCADTool {
+
+    protected CircleCADToolContext _fsm;
+    protected Point2D center;
+    protected Point2D firstPoint;
+    protected Point2D secondPoint;
+    protected Point2D thirdPoint;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new CircleCADToolContext(this);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        CircleCADToolState actualState =
+            (CircleCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Circle.CenterPointOr3p")) {
+            center = new Point2D.Double(x, y);
+        } else
+            if (status == "Circle.PointOrRadius") {
+                insertAndSelectGeometry(createCircle(createPoint(center),
+                    createPoint(x, y)));
+            } else
+                if (status == "Circle.FirstPoint") {
+                    firstPoint = new Point2D.Double(x, y);
+                } else
+                    if (status == "Circle.SecondPoint") {
+                        secondPoint = new Point2D.Double(x, y);
+                    } else
+                        if (status == "Circle.ThirdPoint") {
+                            thirdPoint = new Point2D.Double(x, y);
+                            insertAndSelectGeometry(createCircle(
+                                createPoint(firstPoint),
+                                createPoint(secondPoint),
+                                createPoint(thirdPoint)));
+                        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        CircleCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        Geometry help_geom_perim = null; 
+        
+        if ((status == "Circle.CenterPointOr3p")) { // || (status == "5")) {
+
+            if (firstPoint != null) {
+                renderer.drawLine(firstPoint, new Point2D.Double(x, y),
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+        }
+
+        if (status == "Circle.PointOrRadius") {
+            Point2D currentPoint = new Point2D.Double(x, y);
+            Circle circle =
+                createCircle(createPoint(center), createPoint(currentPoint));
+            
+            try {
+                help_geom_perim = GeometryLocator.
+                    getGeometryManager().createCurve(
+                        circle.getGeneralPath(),
+                        Geometry.SUBTYPES.GEOM2D);
+                renderer.draw(help_geom_perim,
+                    mapControlManager.getAxisReferenceSymbol());
+            } catch (Exception e) {
+                ApplicationLocator.getManager().message(
+                    Messages.getText("_Unable_to_draw_help_geometry"),
+                    JOptionPane.ERROR_MESSAGE);
+            }            
+            
+            
+        } else
+            if (status == "Circle.SecondPoint") {
+                renderer.drawLine(firstPoint, new Point2D.Double(x, y),
+                    mapControlManager.getGeometrySelectionSymbol());
+            } else
+                if (status == "Circle.ThirdPoint") {
+                    Point2D currentPoint = new Point2D.Double(x, y);
+                    Geometry geom =
+                        createCircle(createPoint(firstPoint),
+                            createPoint(secondPoint), createPoint(currentPoint));
+
+                    if (geom != null) {
+                        
+                        try {
+                            help_geom_perim = GeometryLocator.
+                                getGeometryManager().createCurve(
+                                    geom.getGeneralPath(),
+                                    Geometry.SUBTYPES.GEOM2D);
+                            renderer.draw(help_geom_perim,
+                                mapControlManager.getAxisReferenceSymbol());
+                        } catch (Exception e) {
+                            ApplicationLocator.getManager().message(
+                                Messages.getText("_Unable_to_draw_help_geometry"),
+                                JOptionPane.ERROR_MESSAGE);
+                        }            
+                    }
+                }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        CircleCADToolState actualState =
+            (CircleCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status == "Circle.CenterPointOr3p") {
+            if (s.equalsIgnoreCase(PluginServices.getText(this,
+                "CircleCADTool.3p"))) {
+                // Opci�n correcta.
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+        CircleCADToolState actualState =
+            (CircleCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status == "Circle.PointOrRadius") {
+            insertAndSelectGeometry(createCircle(createPoint(center), d));
+        }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "circle_");
+    }
+
+    public String toString() {
+        return "_circle";
+    }
+
+    @Override
+    protected int getSupportedPrimitiveGeometryType() {
+        return CIRCLE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CircleCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MatrixCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MatrixCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MatrixCADTool.java	(revision 42196)
@@ -0,0 +1,483 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.panels.matrix.MatrixOperations;
+import org.gvsig.editing.gui.cad.panels.matrix.MatrixProperty;
+import org.gvsig.editing.gui.cad.tools.smc.MatrixCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.MatrixCADToolContext.MatrixCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Herramienta para crear una matriz de geometr�as.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class MatrixCADTool extends DefaultCADTool {
+
+    protected MatrixCADToolContext _fsm;
+    protected Point2D firstPoint;
+    protected Point2D secondPoint;
+    protected MatrixProperty matrixProperty = null;
+    protected MatrixOperations operations = null;
+    protected String option;
+
+    /**
+     * Crea un nuevo MatrixCADTool.
+     */
+    public MatrixCADTool() {
+        matrixProperty = new MatrixProperty();
+        operations = new MatrixOperations();
+    }
+
+    /**
+     * M�todo de inicio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new MatrixCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_matrix");
+            } else {
+                // init();
+                matrixPropeties();
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    private void matrixPropeties() {
+        matrixProperty.setMatrixCADTool(this);
+        PluginServices.getMDIManager().addWindow(matrixProperty);
+        endMatrix();
+
+    }
+
+    public void endMatrix() {
+        if (operations.isAccepted()) {
+            PluginServices.getMDIManager().setWaitCursor();
+
+            // ArrayList selectedRow = getSelectedRows();
+            ArrayList selectedRowAux = new ArrayList();
+            VectorialLayerEdited vle = getVLE();
+            FeatureStore featureStore = null;
+            DisposableIterator iterator = null;
+            try {
+                featureStore = vle.getFeatureStore();
+
+                featureStore.beginEditingGroup(getName());
+                iterator =
+                    ((FeatureSelection) featureStore.getSelection()).iterator();
+                while (iterator.hasNext()) {
+                    Feature feature = (Feature) iterator.next();
+                    // Object[] attributes=new Object[feature.size()];
+                    // for (int j = 0; j < feature.size(); j++) {
+                    // attributes[j]=feature.get(j);
+                    // }
+                    if (operations.isRectangular()) {// Si es rectangular la
+                                                     // matriz
+
+                        for (int columns = 0; columns < operations
+                            .getNumColumns(); columns++) {
+
+                            for (int rows = 0; rows < operations.getNumRows(); rows++) {
+                                if (columns == 0 && rows == 0) {
+                                    continue;
+                                }
+
+                                // DefaultFeature feaCloned = (DefaultFeature)
+                                // fea
+                                // .cloneRow();
+                                Geometry geom =
+                                    (feature.getDefaultGeometry())
+                                        .cloneGeometry();
+                                Envelope original_env = geom.getEnvelope();
+                                Geometry g =
+                                    createPoint(
+                                        original_env.getMinimum(0)
+                                            + operations.getDistColumns()
+                                            * columns, original_env.getMinimum(1)
+                                            + operations.getDistRows() * rows);
+                                AffineTransform at = new AffineTransform();
+                                at.rotate(
+                                    Math.toRadians(operations.getRotation()),
+                                    original_env.getMinimum(0),
+                                    original_env.getMinimum(1));
+                                g.transform(at);
+                                Envelope new_env = g.getEnvelope();
+                                Point2D pDest =
+                                    new Point2D.Double(
+                                        new_env.getMinimum(0),
+                                        new_env.getMinimum(1));
+
+                                double difX = pDest.getX() - original_env.getMinimum(0);
+                                double difY = pDest.getY() - original_env.getMinimum(1);
+                                Handler[] handlers =
+                                    geom.getHandlers(Geometry.SELECTHANDLER);
+                                for (int j = 0; j < handlers.length; j++) {
+                                    Handler h = handlers[j];
+                                    Point2D p = h.getPoint();
+                                    h.set(p.getX() + (difX), p.getY() + (difY));
+                                }
+                                EditableFeature eFeature =
+                                    featureStore.createNewFeature(
+                                        feature.getType(), feature);
+                                eFeature.setGeometry(featureStore
+                                    .getDefaultFeatureType()
+                                    .getDefaultGeometryAttributeName(), geom);
+                                selectedRowAux.add(eFeature);
+                            }
+
+                        }
+
+                    } else { // Polar
+
+                        double rotation = 360 / operations.getNum();
+
+                        for (int numElem = 0; numElem < operations.getNum(); numElem++) {
+                            System.out.println("numElem = " + numElem);
+                            if (numElem == 0) {
+                                continue;
+                            }
+
+                            // DefaultFeature feaCloned = (DefaultFeature) fea
+                            // .cloneRow();
+                            Geometry geom =
+                                (feature.getDefaultGeometry()).cloneGeometry();
+
+                            if (!operations.isRotateElements()) {
+                                Envelope orig_env = geom.getEnvelope();
+                                Geometry g =
+                                    createPoint(
+                                        orig_env.getMinimum(0),
+                                        orig_env.getMinimum(1));
+                                AffineTransform at = new AffineTransform();
+                                at.rotate(Math.toRadians(rotation * numElem),
+                                    operations.getPositionX(),
+                                    operations.getPositionY());
+                                g.transform(at);
+                                
+                                Envelope new_env = g.getEnvelope();
+                                
+                                Point2D pDest =
+                                    new Point2D.Double(
+                                        new_env.getMinimum(0),
+                                        new_env.getMinimum(1));
+
+                                double difX = pDest.getX() - orig_env.getMinimum(0);
+                                double difY = pDest.getY() - orig_env.getMinimum(1);
+                                Handler[] handlers =
+                                    geom.getHandlers(Geometry.SELECTHANDLER);
+                                for (int j = 0; j < handlers.length; j++) {
+                                    Handler h = handlers[j];
+                                    Point2D p = h.getPoint();
+                                    h.set(p.getX() + (difX), p.getY() + (difY));
+                                }
+                            } else {// Cuando los elemtos rotan al mismo tiempo
+                                    // que se van a�adiendo.
+
+                                Envelope orig_env = geom.getEnvelope();
+                                AffineTransform at = new AffineTransform();
+                                at.rotate(Math.toRadians(rotation * numElem),
+                                    operations.getPositionX(),
+                                    operations.getPositionY());
+                                geom.transform(at);
+                                
+                                Envelope new_env = geom.getEnvelope();
+                                
+                                Point2D pDest =
+                                    new Point2D.Double(
+                                        new_env.getMinimum(0),
+                                        new_env.getMinimum(1)
+                                        );
+
+                                double difX = pDest.getX() - orig_env.getMinimum(0);
+                                double difY = pDest.getY() - orig_env.getMinimum(1);
+                                Handler[] handlers =
+                                    geom.getHandlers(Geometry.SELECTHANDLER);
+                                for (int j = 0; j < handlers.length; j++) {
+                                    Handler h = handlers[j];
+                                    Point2D p = h.getPoint();
+                                    h.set(p.getX() + (difX), p.getY() + (difY));
+                                }
+                            }
+                            EditableFeature eFeature =
+                                featureStore.createNewFeature(
+                                    feature.getType(), feature);
+                            eFeature.setGeometry(featureStore
+                                .getDefaultFeatureType()
+                                .getDefaultGeometryAttributeName(), geom);
+
+                            selectedRowAux.add(eFeature);
+                        }
+                    }
+                }
+                
+                // =================================================
+                /*
+                 * Inserting geometries of matrix
+                 */
+//                SpatialCache spatialCache =
+//                    ((FLyrVect) vle.getLayer()).getSpatialCache();
+                
+                for (int i=0; i<selectedRowAux.size(); i++) {
+                	super.insertFeature((Feature) selectedRowAux.get(i));
+//                	
+//                    EditableFeature efeat = (EditableFeature) selectedRowAux.get(i);
+//                    featureStore.insert(efeat);
+//                    Geometry ngeom = efeat.getDefaultGeometry();
+//                    Envelope envelope = ngeom.getEnvelope();
+//                    /*
+//                     * Updating spatial cache
+//                     */
+//                    spatialCache.insert(envelope, ngeom);
+                }
+                
+                // =================================================
+                
+                featureStore.endEditingGroup();
+                // vle.setSelectionCache(VectorialLayerEdited.SAVEPREVIOUS,
+                // selectedRowAux);
+                PluginServices.getMDIManager().restoreCursor();
+                end();
+            } catch (DataException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } finally {
+                if (iterator != null) {
+                    iterator.dispose();
+                }
+            }
+        } else {// Cancelado
+
+        }
+
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        // MatrixCADToolState actualState = _fsm.getState();
+        MatrixCADToolState previousState =
+            (MatrixCADToolState) _fsm.getPreviousState();
+        String status = previousState.getName();
+        if (status.equals("Matrix.Start") || status.equals("Matrix.FirstPoint")) {
+            firstPoint = new Point2D.Double(x, y);
+        } else
+            if (status.equals("Matrix.SecondPoint")) {
+                secondPoint = new Point2D.Double(x, y);
+                if (option.equals("lagX") || option.equals("lagXY")) {
+                    operations.setDistColumns(secondPoint.getX()
+                        - firstPoint.getX());
+                    matrixProperty.refreshLagX();
+                }
+                if (option.equals("lagY") || option.equals("lagXY")) {
+                    operations.setDistRows(secondPoint.getY()
+                        - firstPoint.getY());
+                    matrixProperty.refreshLagY();
+                }
+                if (option.equals("rotation")) {
+
+                    double w;
+                    double h;
+                    w = secondPoint.getX() - firstPoint.getX();
+                    h = secondPoint.getY() - firstPoint.getY();
+                    operations.setRotation((-Math.atan2(w, h) + (Math.PI / 2))
+                        * 180 / Math.PI);
+                    matrixProperty.refreshRotation();
+                }
+                firstPoint = null;
+                PluginServices.getMDIManager().addWindow(matrixProperty);
+            }
+    }
+
+    /**
+     * M�todo para dibujar lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        if (_fsm == null || firstPoint == null) {
+            return;
+        }
+        GeneralPathX gpx = new GeneralPathX();
+        gpx.moveTo(firstPoint.getX(), firstPoint.getY());
+        gpx.lineTo(x, y);
+        VectorialLayerEdited vle = getVLE();
+        ViewPort vp = vle.getLayer().getMapContext().getViewPort();
+
+        Curve curve = createCurve(gpx);
+        renderer.draw(curve, mapControlManager.getAxisReferenceSymbol());
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        option = s;
+        PluginServices.getMDIManager().closeWindow(matrixProperty);
+        /*
+         * MatrixCADToolState actualState = _fsm .getState(); String status =
+         * actualState.getName();
+         * 
+         * if (status.equals("Matrix.LagXY")) {
+         * 
+         * }else if (status.equals("Matrix.LagX")) {
+         * 
+         * }else if (status.equals("Matrix.LagY")) {
+         * }
+         */
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "matrix_");
+    }
+
+    public String toString() {
+        return "_matrix";
+    }
+
+    public MatrixOperations getOperations() {
+        return operations;
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MatrixCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MultiPointCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MultiPointCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MultiPointCADTool.java	(revision 42196)
@@ -0,0 +1,212 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.MultiPointCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.MultiPointCADToolContext.MultiPointCADToolState;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class MultiPointCADTool extends DefaultCADTool {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(MultiPointCADTool.class);
+
+    protected MultiPointCADToolContext _fsm;
+    protected ArrayList points = new ArrayList();
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new MultiPointCADToolContext(this);
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param x
+     *            DOCUMENT ME!
+     * @param y
+     *            DOCUMENT ME!
+     * @param sel
+     *            DOCUMENT ME!
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        MultiPointCADToolState actualState =
+            (MultiPointCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("MultiPoint.InsertPoint")) {
+            points.add(new double[] { x, y });
+            // addGeometry(ShapeFactory.createPoint2D(x, y));
+        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        try {
+            int num = points.size();
+            Point[] pointsAux = new Point[num];
+            for (int i = 0; i < num; i++) {
+                double[] p = (double[]) points.get(i);
+                pointsAux[i] =
+                    (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+                pointsAux[i].setX(p[0]);
+                pointsAux[i].setY(p[1]);
+            }
+
+            MultiPoint multiPoint =
+                (MultiPoint) geomManager.create(TYPES.MULTIPOINT,
+                    SUBTYPES.GEOM2D);
+            for (int i = 0; i < pointsAux.length; i++) {
+                multiPoint.addPoint(pointsAux[i]);
+            }
+            renderer.draw(multiPoint,
+                mapControlManager.getGeometrySelectionSymbol());
+
+            renderer.draw(createPoint(x, y),
+                mapControlManager.getGeometrySelectionSymbol());
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error drawing with renderer: " + renderer + ", x=" + x
+                + ",y=" + y, new CreateGeometryException(TYPES.MULTIPOINT,
+                SUBTYPES.GEOM2D, e));
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        // Nothing to do
+    }
+
+    public void addValue(double d) {
+        // Nothing to do
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "multipoint_");
+    }
+
+    public String toString() {
+        return "_multipoint";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { MULTIPOINT };
+    }
+
+    public void endGeometry() {
+        try {
+            int num = points.size();
+            Point[] pointsAux = new Point[num];
+            for (int i = 0; i < num; i++) {
+                double[] p = (double[]) points.get(i);
+                pointsAux[i] =
+                    (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+                pointsAux[i].setX(p[0]);
+                pointsAux[i].setY(p[1]);
+            }
+
+            MultiPoint multiPoint = createMultiPoint();
+
+            for (int i = 0; i < pointsAux.length; i++) {
+                multiPoint.addPoint(pointsAux[i]);
+            }
+            insertAndSelectGeometry(multiPoint);
+        } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error ending geometry", new CreateGeometryException(
+                TYPES.MULTIPOINT, SUBTYPES.GEOM2D, e));
+        }
+        end();
+    }
+
+    public void end() {
+        points.clear();
+        super.end();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MultiPointCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RectangleCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RectangleCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RectangleCADTool.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.RectangleCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.RectangleCADToolContext.RectangleCADToolState;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class RectangleCADTool extends AbstractCurveSurfaceCADTool {
+
+    protected RectangleCADToolContext _fsm;
+    protected Point2D firstPoint;
+    protected Point2D lastPoint;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new RectangleCADToolContext(this);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        RectangleCADToolState actualState =
+            (RectangleCADToolState) _fsm.getPreviousState();
+
+        String status = actualState.getName();
+
+        if (status.equals("Rectangle.FirstPoint")) {
+            firstPoint = new Point2D.Double(x, y);
+        } else
+            if (status == "Rectangle.SecondPointOrSquare") {
+                lastPoint = new Point2D.Double(x, y);
+
+                OrientablePrimitive orientablePrimitive =
+                    createOrientablePrimitive();
+
+                orientablePrimitive.addMoveToVertex(createPoint(
+                    firstPoint.getX(), firstPoint.getY()));
+                orientablePrimitive.addVertex(createPoint(lastPoint.getX(),
+                    firstPoint.getY()));
+                orientablePrimitive.addVertex(createPoint(lastPoint.getX(),
+                    lastPoint.getY()));
+                orientablePrimitive.addVertex(createPoint(firstPoint.getX(),
+                    lastPoint.getY()));
+                orientablePrimitive.closePrimitive();
+
+                insertAndSelectGeometry(orientablePrimitive);
+
+                firstPoint = (Point2D) lastPoint.clone();
+            } else
+                if (status == "Rectangle.SecondPointSquare") {
+                    lastPoint = new Point2D.Double(x, y);
+
+                    OrientablePrimitive orientablePrimitive =
+                        createOrientablePrimitive();
+
+                    orientablePrimitive.addMoveToVertex(createPoint(
+                        firstPoint.getX(), firstPoint.getY()));
+                    orientablePrimitive.addVertex(createPoint(lastPoint.getX(),
+                        firstPoint.getY()));
+
+                    if (((lastPoint.getY() <= firstPoint.getY()) && (lastPoint
+                        .getX() <= firstPoint.getX()))
+                        || ((lastPoint.getY() > firstPoint.getY()) && (lastPoint
+                            .getX() > firstPoint.getX()))) {
+                        orientablePrimitive.addVertex(createPoint(
+                            lastPoint.getX(),
+                            firstPoint.getY()
+                                + (lastPoint.getX() - firstPoint.getX())));
+                        orientablePrimitive.addVertex(createPoint(
+                            firstPoint.getX(),
+                            firstPoint.getY()
+                                + (lastPoint.getX() - firstPoint.getX())));
+                    } else {
+                        orientablePrimitive.addVertex(createPoint(
+                            lastPoint.getX(),
+                            firstPoint.getY()
+                                - (lastPoint.getX() - firstPoint.getX())));
+                        orientablePrimitive.addVertex(createPoint(
+                            firstPoint.getX(),
+                            firstPoint.getY()
+                                - (lastPoint.getX() - firstPoint.getX())));
+                    }
+                    orientablePrimitive.closePrimitive();
+
+                    insertAndSelectGeometry(orientablePrimitive);
+
+                    firstPoint = (Point2D) lastPoint.clone();
+                }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        RectangleCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status == "Rectangle.SecondPointOrSquare") {
+            GeneralPathX elShape =
+                new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 4);
+            elShape.moveTo(firstPoint.getX(), firstPoint.getY());
+            elShape.lineTo(x, firstPoint.getY());
+            elShape.lineTo(x, y);
+            elShape.lineTo(firstPoint.getX(), y);
+            elShape.lineTo(firstPoint.getX(), firstPoint.getY());
+
+            renderer.draw(createCurve(elShape),
+                mapControlManager.getGeometrySelectionSymbol());
+        } else
+            if (status == "Rectangle.SecondPointSquare") {
+                GeneralPathX elShape =
+                    new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 4);
+                elShape.moveTo(firstPoint.getX(), firstPoint.getY());
+                elShape.lineTo(x, firstPoint.getY());
+
+                if (((y <= firstPoint.getY()) && (x <= firstPoint.getX()))
+                    || ((y > firstPoint.getY()) && (x > firstPoint.getX()))) {
+                    elShape.lineTo(x,
+                        firstPoint.getY() + (x - firstPoint.getX()));
+                    elShape.lineTo(firstPoint.getX(), firstPoint.getY()
+                        + (x - firstPoint.getX()));
+                    elShape.lineTo(firstPoint.getX(), firstPoint.getY());
+                } else {
+                    elShape.lineTo(x,
+                        firstPoint.getY() - (x - firstPoint.getX()));
+                    elShape.lineTo(firstPoint.getX(), firstPoint.getY()
+                        - (x - firstPoint.getX()));
+                    elShape.lineTo(firstPoint.getX(), firstPoint.getY());
+                }
+                renderer.draw(createCurve(elShape),
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        RectangleCADToolState actualState =
+            (RectangleCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status == "Rectangle.SecondPointOrSquare") {
+            if (s.equalsIgnoreCase(PluginServices.getText(this,
+                "RectangleCADTool.square"))) {
+                // Opci�n correcta
+            }
+        }
+    }
+
+    public void addValue(double d) {
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "rectangle_");
+    }
+
+    public String toString() {
+        return "_rectangle";
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RectangleCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MoveCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MoveCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MoveCADTool.java	(revision 42196)
@@ -0,0 +1,284 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.MoveCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.MoveCADToolContext.MoveCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class MoveCADTool extends DefaultCADTool {
+
+    protected MoveCADToolContext _fsm;
+    protected Point2D firstPoint;
+    protected Point2D lastPoint;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new MoveCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_move");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        MoveCADToolState actualState =
+            (MoveCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        try {
+            featureStore = vle.getFeatureStore();
+        } catch (ReadException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
+        DisposableIterator iterator = null;
+        try {
+            FeatureSet selection = (FeatureSet) featureStore.getSelection();// getSelectedRows();
+            // ArrayList selectedRowAux=new ArrayList();
+            ICoordTrans ct = getVLE().getLayer().getCoordTrans();
+            if (status.equals("Move.FirstPointToMove")) {
+                firstPoint = new Point2D.Double(x, y);
+            } else
+                if (status.equals("Move.SecondPointToMove")) {
+                    PluginServices.getMDIManager().setWaitCursor();
+                    lastPoint = new Point2D.Double(x, y);
+
+                    featureStore.beginEditingGroup(getName());
+                    try {
+
+                        iterator = selection.iterator();
+                        while (iterator.hasNext()) {
+                            Feature feature = (Feature) iterator.next();
+
+                            // }
+                            // for (int i = 0; i < selection.size(); i++) {
+                            // IRowEdited edRow = (IRowEdited)
+                            // selectedRow.get(i);
+                            // IFeature feat = (IFeature)
+                            // edRow.getLinkedRow().cloneRow();
+                            Geometry ig =
+                                (feature.getDefaultGeometry()).cloneGeometry();
+                            if (ig == null) {
+                                continue;
+                            }
+                            if (ct != null) {
+                                lastPoint =
+                                    ct.getInverted().convert(lastPoint, null);
+                                firstPoint =
+                                    ct.getInverted().convert(firstPoint, null);
+
+                            }
+                            // if (ct!=null)
+                            // ig.reProject(ct);
+                            // Movemos la geometr�a
+                            ig.move(lastPoint.getX() - firstPoint.getX(),
+                                lastPoint.getY() - firstPoint.getY());
+
+                            // if (ct!=null)
+                            // ig.reProject(ct.getInverted());
+                            
+                            super.updateGeometry(featureStore, feature, ig);
+//                            
+//                            EditableFeature eFeature = feature.getEditable();
+//                            eFeature.setGeometry(featureStore
+//                                .getDefaultFeatureType()
+//                                .getDefaultGeometryAttributeName(), ig);
+//                            featureStore.update(eFeature);
+//                            
+                            
+                            // vea.modifyRow(edRow.getIndex(),feat,getName(),EditionEvent.GRAPHIC);
+                            // selectedRowAux.add(new
+                            // DefaultRowEdited(feat,IRowEdited.STATUS_MODIFIED,edRow.getIndex()));
+                        }
+                    } finally {
+                        featureStore.endEditingGroup();
+                    }
+                    // vle.setSelectionCache(VectorialLayerEdited.NOTSAVEPREVIOUS,
+                    // selectedRowAux);
+                    // clearSelection();
+                    // selectedRow.addAll(selectedRowAux);
+                }
+        } catch (ReadException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+        PluginServices.getMDIManager().restoreCursor();
+    }
+
+    /**
+     * M�todo para dibujar lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        MoveCADToolState actualState = (_fsm).getState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+
+        if (status.equals("Move.SecondPointToMove")) {
+            drawSelectedGeometries(renderer, firstPoint, x, y);
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "move_");
+    }
+
+    public String toString() {
+        return "_move";
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/MoveCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveCADTool.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.primitive.Curve;
+
+/**
+ * Parent class for tools which create Curve geometries.
+ * 
+ * @author gvSIG team
+ */
+public abstract class AbstractCurveCADTool extends DefaultCADTool {
+
+    private static final int TYPE_MULTICURVE = 1;
+
+    @Override
+    public Feature insertAndSelectGeometry(Geometry geometry) {
+        if (getSupportedTypes()[TYPE_MULTICURVE].isTypeOf(getGeometryType())) {
+            MultiCurve multiCurve = createMultiCurve();
+            multiCurve.addCurve((Curve) geometry);
+            return super.insertAndSelectGeometry(multiCurve);
+        } else {
+            return super.insertAndSelectGeometry(geometry);
+        }
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { getSupportedPrimitiveGeometryType(), MULTICURVE };
+    }
+
+    protected abstract int getSupportedPrimitiveGeometryType();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CopyCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CopyCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CopyCADTool.java	(revision 42196)
@@ -0,0 +1,257 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.CopyCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.CopyCADToolContext.CopyCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class CopyCADTool extends DefaultCADTool {
+
+    private CopyCADToolContext _fsm;
+    private Point2D firstPoint;
+    private Point2D lastPoint;
+    private GeometryType[] gTypes;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new CopyCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_copy");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        CopyCADToolState actualState =
+            (CopyCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        try {
+            featureStore = vle.getFeatureStore();
+            // FeatureSelection selection =
+            // featureStore.createFeatureSelection();
+            // selection.select((FeatureSet) featureStore.getSelection());
+            FeatureSelection selection =
+                (FeatureSelection) featureStore.getSelection();
+            if (status.equals("Copy.FirstPointToMove")) {
+                firstPoint = new Point2D.Double(x, y);
+            } else
+                if (status.equals("Copy.SecondPointToMove")) {
+                    PluginServices.getMDIManager().setWaitCursor();
+                    lastPoint = new Point2D.Double(x, y);
+                    featureStore.beginEditingGroup(getName());
+
+                    FeatureSelection newSelection =
+                        featureStore.createFeatureSelection();
+
+                    DisposableIterator iterator = null;
+
+                    try {
+                        iterator = selection.iterator();
+
+                        featureStore.beginComplexNotification();
+
+                        while (iterator.hasNext()) {
+                            Feature feature = (Feature) iterator.next();
+                            // Movemos la geometr�a
+                            Geometry geometry =
+                                (feature.getDefaultGeometry()).cloneGeometry();
+                            // EditableFeature
+                            // eFeature=featureStore.createNewFeature(true);
+                            geometry.move(lastPoint.getX() - firstPoint.getX(),
+                                lastPoint.getY() - firstPoint.getY());
+                            
+                            // eFeature.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName(),geometry);
+                            // featureStore.insert(eFeature);
+                            newSelection.select(insertGeometry(geometry,
+                                feature));
+                        }
+                        // clearSelection();
+                        featureStore.endComplexNotification();
+                        featureStore.setSelection(newSelection);
+                        featureStore.endEditingGroup();
+                        PluginServices.getMDIManager().restoreCursor();
+                    } catch (DataException e) {
+                        featureStore.endComplexNotification();
+                        throw e;
+                    } finally {
+                        if (iterator != null) {
+                            iterator.dispose();
+                        }
+                    }
+
+                } else {
+                }
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        CopyCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        if (status.equals("Copy.SecondPointToMove")) {
+            drawSelectedGeometries(renderer, firstPoint, x, y);
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "copy_");
+    }
+
+    public String toString() {
+        return "_copy";
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/CopyCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EquidistanceCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EquidistanceCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EquidistanceCADTool.java	(revision 42196)
@@ -0,0 +1,448 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.EquidistanceCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.EquidistanceCADToolContext.EquidistanceCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Herramienta para crear una geometr�a equidistante a otra.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class EquidistanceCADTool extends DefaultCADTool {
+
+    private EquidistanceCADToolContext _fsm;
+    private Point2D firstPoint = new Point2D.Double(800000, 4500000);
+    private Point2D secondPoint = new Point2D.Double(810000, 4500000);
+    private double distance = 10;
+    private double distancePos = java.lang.Double.MAX_VALUE;
+    private LineString distanceLine;
+
+    /**
+     * M�todo de inicio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new EquidistanceCADToolContext(this);
+
+    }
+
+    private Coordinate[] getParallel(Point2D[] points, double distance) {
+        Point2D[] pper = new Point2D[2];
+        double angle =
+            Math.toRadians(90) + UtilFunctions.getAngle(points[0], points[1]);
+        pper[0] = UtilFunctions.getPoint(points[0], angle, distance);
+        pper[1] = UtilFunctions.getPoint(points[1], angle, distance);
+        Coordinate[] result = new Coordinate[2];
+        result[0] = new Coordinate(pper[0].getX(), pper[0].getY());
+        result[1] = new Coordinate(pper[1].getX(), pper[1].getY());
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_Equidistance");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        EquidistanceCADToolState actualState =
+            (EquidistanceCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("Equidistance.Distance")) {
+            firstPoint = new Point2D.Double(x, y);
+        } else
+            if (status.equals("Equidistance.SecondPointDistance")) {
+                secondPoint = new Point2D.Double(x, y);
+                distance = secondPoint.distance(firstPoint);
+            } else
+                if (status.equals("Equidistance.Position")) {
+                    VectorialLayerEdited vle = getVLE();
+                    FeatureStore featureStore = null;
+                    try {
+                        featureStore = vle.getFeatureStore();
+                    } catch (ReadException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    ArrayList selectedRowAux = new ArrayList();
+                    DisposableIterator iterator = null;
+                    try {
+                        iterator =
+                            ((FeatureSelection) featureStore.getSelection())
+                                .iterator();
+
+                        PluginServices.getMDIManager().setWaitCursor();
+                        featureStore.beginEditingGroup(getName());
+                        while (iterator.hasNext()) {
+                            Feature feature = (Feature) iterator.next();
+                            Geometry geometry =
+                                compute(feature, new Point2D.Double(x, y));
+                            insertAndSelectGeometry(geometry);
+                        }
+
+                        featureStore.endEditingGroup();
+                    } catch (DataException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    } catch (CreateGeometryException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    } finally {
+                        if (iterator != null) {
+                            iterator.dispose();
+                        }
+                    }
+                    PluginServices.getMDIManager().restoreCursor();
+                }
+    }
+
+    private Geometry compute(Feature fea, Point2D position)
+        throws CreateGeometryException {
+        Geometry geometry = (fea.getDefaultGeometry()).cloneGeometry();
+        int typeGeometry = geometry.getType();
+        com.vividsolutions.jts.geom.Geometry g = UtilFunctions.geometryToJTS(geometry);
+
+        // com.vividsolutions.jts.geom.Geometry g = geometry.toJTSGeometry();
+        GeometryFactory factory = g.getFactory();
+        Coordinate[] c2 = new Coordinate[2];
+        com.vividsolutions.jts.geom.Geometry g2 = null;
+        Coordinate coordinatePosition =
+            new Coordinate(position.getX(), position.getY());
+        Point pPos = factory.createPoint(coordinatePosition);
+        switch (typeGeometry) {
+        case CURVE:
+
+            LineString lR = factory.createLineString(g.getCoordinates());
+            g = TopologyPreservingSimplifier.simplify(lR, 10d);
+            com.vividsolutions.jts.geom.Geometry gLine = g.getGeometryN(0);
+            Coordinate[] coordinatesLine = gLine.getCoordinates();
+            int numPointsLine = gLine.getNumPoints();
+            if (numPointsLine < 1) {
+                return null;
+            }
+            LineString[] lineStrings = new LineString[numPointsLine - 1];
+
+            for (int j = 1; j < numPointsLine; j = j + 1) {
+                c2[0] = coordinatesLine[j - 1];
+                c2[1] = coordinatesLine[j];
+                LineString lS = factory.createLineString(c2);
+                if (lS.distance(pPos) < distancePos) {
+                    distancePos = lS.distance(pPos);
+                    distanceLine = (LineString) factory.createGeometry(lS);
+                }
+            }
+            setDistanceLine(coordinatePosition);
+
+            for (int j = 1; j < numPointsLine; j = j + 1) {
+                c2[0] = coordinatesLine[j - 1];
+                c2[1] = coordinatesLine[j];
+                Point2D[] points = new Point2D[2];
+                points[0] = new Point2D.Double(c2[0].x, c2[0].y);
+                points[1] = new Point2D.Double(c2[1].x, c2[1].y);
+                lineStrings[j - 1] =
+                    factory.createLineString(getParallel(points, distance));
+            }
+
+            for (int i = 0; i < lineStrings.length - 1; i++) {
+                Coordinate coord = lineStrings[i].getCoordinateN(0);
+                Point2D p1 = new Point2D.Double(coord.x, coord.y);
+                coord = lineStrings[i].getCoordinateN(1);
+                Point2D p2 = new Point2D.Double(coord.x, coord.y);
+                coord = lineStrings[i + 1].getCoordinateN(0);
+                Point2D p3 = new Point2D.Double(coord.x, coord.y);
+                coord = lineStrings[i + 1].getCoordinateN(1);
+                Point2D p4 = new Point2D.Double(coord.x, coord.y);
+                Point2D intersection =
+                    UtilFunctions.getIntersection(p1, p2, p3, p4);
+                Coordinate[] coords1 = new Coordinate[2];
+                coords1[0] = lineStrings[i].getCoordinateN(0);
+                coords1[1] =
+                    new Coordinate(intersection.getX(), intersection.getY());
+                lineStrings[i] = factory.createLineString(coords1);
+                Coordinate[] coords2 = new Coordinate[2];
+                coords2[0] = coords1[1];
+                coords2[1] = lineStrings[i + 1].getCoordinateN(1);
+                lineStrings[i + 1] = factory.createLineString(coords2);
+            }
+            g2 = factory.createMultiLineString(lineStrings);
+            return UtilFunctions.jtsToGeometry(g2);
+        case SURFACE:
+        case CIRCLE:
+        case ELLIPSE:
+            g = TopologyPreservingSimplifier.simplify(g, 10d);
+            com.vividsolutions.jts.geom.Geometry gPolygon = g.getGeometryN(0);
+            setDistancePolygon(gPolygon, pPos);
+            Coordinate[] coordinates = gPolygon.getCoordinates();
+            int numPointsPolygon = gPolygon.getNumPoints();
+            if (numPointsPolygon < 2) {
+                return null;
+            }
+            LineString[] polygonStrings = new LineString[numPointsPolygon];
+            for (int j = 1; j < numPointsPolygon; j = j + 1) {
+                c2[0] = coordinates[j - 1];
+                c2[1] = coordinates[j];
+                Point2D[] points = new Point2D[2];
+                points[0] = new Point2D.Double(c2[0].x, c2[0].y);
+                points[1] = new Point2D.Double(c2[1].x, c2[1].y);
+                polygonStrings[j - 1] =
+                    factory.createLineString(getParallel(points, distance));
+            }
+            for (int i = 0; i < polygonStrings.length - 2; i++) {
+                Coordinate coord = polygonStrings[i].getCoordinateN(0);
+                Point2D p1 = new Point2D.Double(coord.x, coord.y);
+                coord = polygonStrings[i].getCoordinateN(1);
+                Point2D p2 = new Point2D.Double(coord.x, coord.y);
+                coord = polygonStrings[i + 1].getCoordinateN(0);
+                Point2D p3 = new Point2D.Double(coord.x, coord.y);
+                coord = polygonStrings[i + 1].getCoordinateN(1);
+                Point2D p4 = new Point2D.Double(coord.x, coord.y);
+                Point2D intersection =
+                    UtilFunctions.getIntersection(p1, p2, p3, p4);
+                Coordinate[] coords1 = new Coordinate[2];
+                coords1[0] = polygonStrings[i].getCoordinateN(0);
+                coords1[1] =
+                    new Coordinate(intersection.getX(), intersection.getY());
+                polygonStrings[i] = factory.createLineString(coords1);
+                Coordinate[] coords2 = new Coordinate[2];
+                coords2[0] = coords1[1];
+                coords2[1] = polygonStrings[i + 1].getCoordinateN(1);
+                polygonStrings[i + 1] = factory.createLineString(coords2);
+            }
+
+            Coordinate coord = polygonStrings[0].getCoordinateN(0);
+            Point2D p1 = new Point2D.Double(coord.x, coord.y);
+            coord = polygonStrings[0].getCoordinateN(1);
+            Point2D p2 = new Point2D.Double(coord.x, coord.y);
+            coord = polygonStrings[polygonStrings.length - 2].getCoordinateN(0);
+            Point2D p3 = new Point2D.Double(coord.x, coord.y);
+            coord = polygonStrings[polygonStrings.length - 2].getCoordinateN(1);
+            Point2D p4 = new Point2D.Double(coord.x, coord.y);
+
+            Point2D intersection =
+                UtilFunctions.getIntersection(p1, p2, p3, p4);
+            Coordinate[] coords1 = new Coordinate[2];
+            coords1[0] =
+                polygonStrings[polygonStrings.length - 2].getCoordinateN(1);
+            coords1[1] =
+                new Coordinate(intersection.getX(), intersection.getY());
+            polygonStrings[polygonStrings.length - 1] =
+                factory.createLineString(coords1);
+            Coordinate[] coords2 = new Coordinate[2];
+            coords2[0] = coords1[1];
+            coords2[1] = polygonStrings[0].getCoordinateN(1);
+            polygonStrings[0] = factory.createLineString(coords2);
+            com.vividsolutions.jts.geom.Geometry geometryCollection =
+                factory.createGeometryCollection(polygonStrings);
+            LinearRing linearRing =
+                factory.createLinearRing(geometryCollection.getCoordinates());
+            LinearRing[] holes = new LinearRing[1];
+            holes[0] = factory.createLinearRing(new Coordinate[0]);
+            g2 = factory.createPolygon(linearRing, holes);
+            return UtilFunctions.jtsToGeometry(g2);
+
+        default:
+            break;
+        }
+        return null;
+    }
+
+    private void setDistanceLine(Coordinate position) {
+        Coordinate pStart = distanceLine.getCoordinateN(0);
+        Coordinate pEnd =
+            distanceLine.getCoordinateN(distanceLine.getNumPoints() - 1);
+        int pos = CGAlgorithms.computeOrientation(pStart, pEnd, position);
+        if (pos > 0) {
+            distance = Math.abs(distance);
+        } else {
+            distance = -Math.abs(distance);
+        }
+        distancePos = java.lang.Double.MAX_VALUE;
+        distanceLine = null;
+    }
+
+    private void setDistancePolygon(
+        com.vividsolutions.jts.geom.Geometry polygon,
+        com.vividsolutions.jts.geom.Geometry position) {
+        boolean intersects = polygon.intersects(position);
+        if (intersects) {
+            distance = -Math.abs(distance);
+        } else {
+            distance = Math.abs(distance);
+        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        // EquidistanceCADToolState actualState = (EquidistanceCADToolState)
+        // _fsm
+        // .getPreviousState();
+        // String status = actualState.getName();
+        // if (status.equals("Equidistance.Distance")) {
+        // distance=java.lang.Double.parseDouble(s);
+        // }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+        EquidistanceCADToolState actualState =
+            (EquidistanceCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("Equidistance.Distance")) {
+            distance = d;
+        }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "Equidistance_");
+    }
+
+    public String toString() {
+        return "_Equidistance";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { CURVE, CIRCLE, ELLIPSE, SURFACE };
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EquidistanceCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/BreakCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/BreakCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/BreakCADTool.java	(revision 42196)
@@ -0,0 +1,714 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.BreakCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.BreakCADToolContext.BreakCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Recorta una polil�nea en dos partes.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class BreakCADTool extends AbstractCurveCADTool {
+
+    protected BreakCADToolContext _fsm;
+    protected Point2D firstPoint;
+    protected Point2D secondPoint;
+    protected Feature rowEdited;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new BreakCADToolContext(this);
+        firstPoint = null;
+        secondPoint = null;
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_break");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        BreakCADToolState actualState =
+            (BreakCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Break.FirstPoint")) {
+            // if (rowEdited!=null &&
+            // intersects(((DefaultFeature)rowEdited.getLinkedRow()).getGeometry(),new
+            // Point2D.Double(x,y)))
+            firstPoint = new Point2D.Double(x, y);
+
+        } else
+            if (status.equals("Break.SecondPoint")) {
+                // if (rowEdited !=null &&
+                // intersects(((DefaultFeature)rowEdited.getLinkedRow()).getGeometry(),new
+                // Point2D.Double(x,y))){
+                secondPoint = new Point2D.Double(x, y);
+                try {
+                    // IGeometry
+                    // geom=((DefaultFeature)rowEdited.getLinkedRow()).getGeometry();
+                    // if (geom instanceof FGeometryCollection) {
+                    // breakGeometryGC(rowEdited);
+                    // }else {
+                    breakGeometry(rowEdited);
+                    // }
+                } catch (ReadException e) {
+                    NotificationManager.addError(e.getMessage(), e);
+                }
+            }
+        // }
+    }
+
+    /*
+     * private void breakGeometryGC(DefaultRowEdited dre) throws IOException,
+     * DriverIOException { GeneralPathX newGp1 = new GeneralPathX();
+     * GeneralPathX newGp2 = new GeneralPathX(); FGeometryCollection
+     * gc=(FGeometryCollection)((DefaultFeature)rowEdited.getLinkedRow()).
+     * getGeometry();
+     * IGeometry[] geoms=gc.getGeometries(); for (int i = 0;i<geoms.length;i++)
+     * {
+     * PathIterator theIterator=geoms[i].getPathIterator(null); double[] theData
+     * =
+     * new double[6]; boolean isFirstPart=true; boolean isCut=false; int
+     * theType; int numParts = 0;
+     * 
+     * Point2D previous=null;
+     * 
+     * while (!theIterator.isDone()) { theType =
+     * theIterator.currentSegment(theData); switch (theType) {
+     * 
+     * case PathIterator.SEG_MOVETO: numParts++; previous=new
+     * Point2D.Double(theData[0], theData[1]); if (isFirstPart)
+     * newGp1.moveTo(theData[0], theData[1]); else newGp2.moveTo(theData[0],
+     * theData[1]); break;
+     * 
+     * case PathIterator.SEG_LINETO: if (previous!=null){ GeneralPathX gpx=new
+     * GeneralPathX(); gpx.moveTo(previous.getX(),previous.getY());
+     * gpx.lineTo(theData[0], theData[1]); IGeometry
+     * geom=ShapeFactory.createPolyline2D(gpx); Point2D
+     * p1=getNearPoint(previous); Point2D p2=getDistantPoint(previous); if
+     * (intersects(geom,p1)){ isFirstPart=false;
+     * newGp1.lineTo(p1.getX(),p1.getY()); newGp2.moveTo(p2.getX(),p2.getY());
+     * isCut=true; } } previous=new Point2D.Double(theData[0], theData[1]); if
+     * (isFirstPart) newGp1.lineTo(theData[0], theData[1]); else
+     * newGp2.lineTo(theData[0], theData[1]); break;
+     * 
+     * case PathIterator.SEG_QUADTO: if (previous!=null){ GeneralPathX gpx=new
+     * GeneralPathX(); gpx.moveTo(previous.getX(),previous.getY());
+     * gpx.quadTo(theData[0], theData[1],theData[2], theData[3]); IGeometry
+     * geom=ShapeFactory.createPolyline2D(gpx); Point2D
+     * p1=getNearPoint(previous); Point2D p2=getDistantPoint(previous); if
+     * (intersects(geom,p1)){ isFirstPart=false;
+     * newGp1.lineTo(p1.getX(),p1.getY()); newGp2.moveTo(p2.getX(),p2.getY());
+     * isCut=true; } } previous=new Point2D.Double(theData[0], theData[1]); if
+     * (isFirstPart) newGp1.quadTo(theData[0], theData[1],theData[2],
+     * theData[3]); else newGp2.quadTo(theData[0], theData[1],theData[2],
+     * theData[3]);
+     * 
+     * break;
+     * 
+     * case PathIterator.SEG_CUBICTO: if (previous!=null){ GeneralPathX gpx=new
+     * GeneralPathX(); gpx.moveTo(previous.getX(),previous.getY());
+     * gpx.curveTo(theData[0], theData[1],theData[2], theData[3],theData[4],
+     * theData[5]); IGeometry geom=ShapeFactory.createPolyline2D(gpx); Point2D
+     * p1=getNearPoint(previous); Point2D p2=getDistantPoint(previous); if
+     * (intersects(geom,p1)){ isFirstPart=false;
+     * newGp1.lineTo(p1.getX(),p1.getY()); newGp2.moveTo(p2.getX(),p2.getY());
+     * isCut=true; } } previous=new Point2D.Double(theData[0], theData[1]); if
+     * (isFirstPart) newGp1.curveTo(theData[0], theData[1],theData[2],
+     * theData[3],theData[4], theData[5]); else newGp2.curveTo(theData[0],
+     * theData[1],theData[2], theData[3],theData[4], theData[5]);
+     * 
+     * break;
+     * 
+     * case PathIterator.SEG_CLOSE: //if (isFirstPart) // newGp1.closePath();
+     * //else // newGp2.closePath(); break; } //end switch
+     * 
+     * theIterator.next(); } //end while loop
+     * 
+     * if (isCut) { IGeometry geom1 = ShapeFactory.createPolyline2D(newGp1);
+     * IGeometry geom2 = ShapeFactory.createPolyline2D(newGp2);
+     * VectorialLayerEdited vle = getVLE(); VectorialEditableAdapter vea =
+     * vle.getVEA(); ArrayList selectedRow = vle.getSelectedRow();
+     * vea.startComplexRow(); vea.removeRow(dre.getIndex(), getName(),
+     * EditionEvent.GRAPHIC); int num = vea.getRowCount(); if (gc.isClosed()) {
+     * ArrayList geomsAux1 = new ArrayList(); geomsAux1.add(geom2); for (int k =
+     * i + 1; k < geoms.length; k++) { geomsAux1.add(geoms[k]); } for (int k =
+     * 0; k < i; k++) { geomsAux1.add(geoms[k]); } geomsAux1.add(geom1);
+     * 
+     * DefaultFeature df1 = new DefaultFeature( new
+     * FGeometryCollection((IGeometry[]) geomsAux1 .toArray(new IGeometry[0])),
+     * dre .getAttributes(), String.valueOf(num)); int index1 = vea.addRow(df1,
+     * PluginServices.getText(this, "parte1"), EditionEvent.GRAPHIC);
+     * 
+     * clearSelection(); selectedRow.add(new DefaultRowEdited(df1,
+     * IRowEdited.STATUS_ADDED, index1)); vea.endComplexRow(); return; }else {
+     * 
+     * ArrayList geomsAux1 = new ArrayList(); for (int k = 0; k < i; k++) {
+     * geomsAux1.add(geoms[k]); } geomsAux1.add(geom1);
+     * 
+     * ArrayList geomsAux2 = new ArrayList(); geomsAux2.add(geom2); for (int k =
+     * i + 1; k < geoms.length; k++) { geomsAux2.add(geoms[k]); }
+     * 
+     * DefaultFeature df1 = new DefaultFeature( new
+     * FGeometryCollection((IGeometry[]) geomsAux1 .toArray(new IGeometry[0])),
+     * dre .getAttributes(), String.valueOf(num)); int index1 = vea.addRow(df1,
+     * PluginServices.getText(this, "parte1"), EditionEvent.GRAPHIC);
+     * DefaultFeature df2 = new DefaultFeature( new
+     * FGeometryCollection((IGeometry[]) geomsAux2 .toArray(new IGeometry[0])),
+     * dre .getAttributes(), String.valueOf(num + 1)); int index2 =
+     * vea.addRow(df2, PluginServices.getText(this, "parte2"),
+     * EditionEvent.GRAPHIC); clearSelection(); selectedRow.add(new
+     * DefaultRowEdited(df2, IRowEdited.STATUS_ADDED, index2));
+     * selectedRow.add(new DefaultRowEdited(df1, IRowEdited.STATUS_ADDED,
+     * index1));
+     * 
+     * vea.endComplexRow(); return; }
+     * } } }
+     */
+
+    private void breakGeometry(Feature dre) throws ReadException {
+        breakGeom(dre);
+    }
+
+    private void breakGeom(Feature dre) throws ReadException {
+        GeneralPathX newGp1 = new GeneralPathX();
+        GeneralPathX newGp2 = new GeneralPathX();
+        Geometry geomAux = (Geometry) rowEdited.getDefaultGeometry();
+        PathIterator theIterator =
+            geomAux.getPathIterator(null, geomManager.getFlatness());
+        Point2D[] pointsOrdered = getOrderPoints(geomAux);
+        double[] theData = new double[6];
+        boolean isFirstPart = true;
+        boolean intersectsP2 = false;
+        int theType;
+        int numParts = 0;
+        boolean isBreaked = false;
+        Point2D previous = null;
+
+        while (!theIterator.isDone()) {
+            theType = theIterator.currentSegment(theData);
+            switch (theType) {
+
+            case PathIterator.SEG_MOVETO:
+                numParts++;
+
+                previous = new Point2D.Double(theData[0], theData[1]);
+
+                if (isFirstPart)
+                    newGp1.moveTo(theData[0], theData[1]);
+                else
+                    newGp2.moveTo(theData[0], theData[1]);
+                break;
+
+            case PathIterator.SEG_LINETO:
+
+                if (previous != null) {
+                    GeneralPathX gpx = new GeneralPathX();
+                    gpx.moveTo(previous.getX(), previous.getY());
+                    gpx.lineTo(theData[0], theData[1]);
+                    Geometry geom = createCurve(gpx);
+                    Point2D p1 = pointsOrdered[0];
+                    Point2D p2 = pointsOrdered[1];
+
+                    if (intersects(geom, p1) && !isBreaked) {
+                        isFirstPart = false;
+                        newGp1.lineTo(p1.getX(), p1.getY());
+                    }
+                    if (intersects(geom, p2) && !isBreaked) {
+                        isBreaked = true;
+                        intersectsP2 = true;
+                        newGp2.moveTo(p2.getX(), p2.getY());
+                    }
+                }
+                previous = new Point2D.Double(theData[0], theData[1]);
+                if (isFirstPart)
+                    newGp1.lineTo(theData[0], theData[1]);
+                else
+                    if (intersectsP2) {
+                        newGp2.lineTo(theData[0], theData[1]);
+                    }
+
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                if (previous != null) {
+                    GeneralPathX gpx = new GeneralPathX();
+                    gpx.moveTo(previous.getX(), previous.getY());
+                    gpx.quadTo(theData[0], theData[1], theData[2], theData[3]);
+                    Geometry geom = createCurve(gpx);
+                    Point2D p1 = pointsOrdered[0];
+                    Point2D p2 = pointsOrdered[1];
+                    if (intersects(geom, p1) && !isBreaked) {
+                        isFirstPart = false;
+                        newGp1.lineTo(p1.getX(), p1.getY());
+                    }
+                    if (intersects(geom, p2) && !isBreaked) {
+                        isBreaked = true;
+                        intersectsP2 = true;
+                        newGp2.moveTo(p2.getX(), p2.getY());
+
+                    }
+                }
+                previous = new Point2D.Double(theData[0], theData[1]);
+                if (isFirstPart)
+                    newGp1.quadTo(theData[0], theData[1], theData[2],
+                        theData[3]);
+                else
+                    newGp2.quadTo(theData[0], theData[1], theData[2],
+                        theData[3]);
+
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                if (previous != null) {
+                    GeneralPathX gpx = new GeneralPathX();
+                    gpx.moveTo(previous.getX(), previous.getY());
+                    gpx.curveTo(theData[0], theData[1], theData[2], theData[3],
+                        theData[4], theData[5]);
+                    Geometry geom = createCurve(gpx);
+                    Point2D p1 = pointsOrdered[0];
+                    Point2D p2 = pointsOrdered[1];
+                    if (intersects(geom, p1) && !isBreaked) {
+                        isFirstPart = false;
+                        newGp1.lineTo(p1.getX(), p1.getY());
+                    }
+                    if (intersects(geom, p2) && !isBreaked) {
+                        isBreaked = true;
+                        intersectsP2 = true;
+                        newGp2.moveTo(p2.getX(), p2.getY());
+
+                    }
+                }
+                previous = new Point2D.Double(theData[0], theData[1]);
+                if (isFirstPart)
+                    newGp1.curveTo(theData[0], theData[1], theData[2],
+                        theData[3], theData[4], theData[5]);
+                else
+                    newGp2.curveTo(theData[0], theData[1], theData[2],
+                        theData[3], theData[4], theData[5]);
+
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                // if (isFirstPart)
+                // newGp1.closePath();
+                // else
+                // newGp2.closePath();
+                break;
+            } // end switch
+
+            theIterator.next();
+        } // end while loop
+        GeneralPathX gpx = new GeneralPathX();
+        gpx.append(geomAux.getInternalShape().getPathIterator(null), true);
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore =
+            ((FLyrVect) vle.getLayer()).getFeatureStore();
+        // VectorialEditableAdapter vea = vle.getVEA();
+        ArrayList selectedRowAux = new ArrayList();
+        try {
+            featureStore.beginEditingGroup(getName());
+
+            featureStore.delete(dre);
+            // vea.startComplexRow();
+            if (gpx.isClosed()) {
+
+                newGp2.append(
+                    newGp1.getPathIterator(null, geomManager.getFlatness()),
+                    true);
+                Geometry geom1 = createCurve(newGp2);
+
+                // Feature dfLine1 = dre.cloneRow();
+                EditableFeature eFeature =
+                    featureStore.createNewFeature(dre.getType(), dre);
+                eFeature.setGeometry(featureStore.getDefaultFeatureType()
+                    .getDefaultGeometryAttributeName(), geom1);
+                selectedRowAux.add(eFeature);
+
+            } else {
+                Geometry geom1 = createCurve(newGp1);
+                Geometry geom2 = createCurve(newGp2);
+
+                // DefaultFeature dfLine1 = (DefaultFeature)
+                // dre.getLinkedRow().cloneRow();
+                EditableFeature eFeature =
+                    featureStore.createNewFeature(dre.getType(), dre);
+                eFeature.setGeometry(featureStore.getDefaultFeatureType()
+                    .getDefaultGeometryAttributeName(), geom2);
+
+                selectedRowAux.add(eFeature);
+
+                // dre.editing();
+                // dre.setGeometry(geom2);
+                // DefaultFeature dfLine2 = (DefaultFeature)
+                // dre.getLinkedRow().cloneRow();
+                // dfLine2.setGeometry(geom2);
+                // int indexLine2 = addGeometry(dre);
+
+                // selectedRowAux.add(new DefaultRowEdited(dfLine2,
+                // IRowEdited.STATUS_ADDED, indexLine2));
+
+            }
+
+            // vea.removeRow(dre.getIndex(), getName(), EditionEvent.GRAPHIC);
+            // vea.endComplexRow(getName());
+            featureStore.endEditingGroup();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        // vle.setSelectionCache(VectorialLayerEdited.NOTSAVEPREVIOUS,
+        // selectedRowAux);
+
+    }
+
+    private Point2D[] getOrderPoints(Geometry geomAux) {
+        PathIterator theIterator =
+            geomAux.getPathIterator(null, geomManager.getFlatness());
+        double[] theData = new double[6];
+        Point2D previous = null;
+        ArrayList points = new ArrayList();
+        boolean isFirstPointBreak = false;
+        boolean isSecondPointBreak = false;
+        while (!theIterator.isDone()) {
+            int theType = theIterator.currentSegment(theData);
+            switch (theType) {
+
+            case PathIterator.SEG_MOVETO:
+                previous = new Point2D.Double(theData[0], theData[1]);
+                break;
+
+            case PathIterator.SEG_LINETO:
+
+                if (previous != null) {
+                    GeneralPathX gpx = new GeneralPathX();
+                    gpx.moveTo(previous.getX(), previous.getY());
+                    gpx.lineTo(theData[0], theData[1]);
+                    Geometry geom = createCurve(gpx);
+                    boolean intersectFirst = intersects(geom, firstPoint);
+                    boolean intersectSecond = intersects(geom, secondPoint);
+                    if (intersectFirst && intersectSecond && !isFirstPointBreak) {
+                        isFirstPointBreak = true;
+                        isSecondPointBreak = true;
+                        points.add(getNearPoint(previous));
+                        points.add(getDistantPoint(previous));
+                        return (Point2D[]) points.toArray(new Point2D[0]);
+                    } else
+                        if (intersectFirst && !isFirstPointBreak) {
+                            isFirstPointBreak = true;
+                            points.add(firstPoint);
+                        } else
+                            if (intersectSecond && !isSecondPointBreak) {
+                                isSecondPointBreak = true;
+                                points.add(secondPoint);
+                            }
+                }
+                previous = new Point2D.Double(theData[0], theData[1]);
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                if (previous != null) {
+                    GeneralPathX gpx = new GeneralPathX();
+                    gpx.moveTo(previous.getX(), previous.getY());
+                    gpx.quadTo(theData[0], theData[1], theData[2], theData[3]);
+                    Geometry geom = createCurve(gpx);
+                    boolean intersectFirst = intersects(geom, firstPoint);
+                    boolean intersectSecond = intersects(geom, secondPoint);
+                    if (intersectFirst && intersectSecond && !isFirstPointBreak) {
+                        isFirstPointBreak = true;
+                        isSecondPointBreak = true;
+                        points.add(getNearPoint(previous));
+                        points.add(getDistantPoint(previous));
+                        return (Point2D[]) points.toArray(new Point2D[0]);
+                    } else
+                        if (intersectFirst && !isFirstPointBreak) {
+                            isFirstPointBreak = true;
+                            points.add(firstPoint);
+                        } else
+                            if (intersectSecond && !isSecondPointBreak) {
+                                isSecondPointBreak = true;
+                                points.add(secondPoint);
+                            }
+                }
+                previous = new Point2D.Double(theData[0], theData[1]);
+
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                if (previous != null) {
+                    GeneralPathX gpx = new GeneralPathX();
+                    gpx.moveTo(previous.getX(), previous.getY());
+                    gpx.curveTo(theData[0], theData[1], theData[2], theData[3],
+                        theData[4], theData[5]);
+                    Geometry geom = createCurve(gpx);
+                    boolean intersectFirst = intersects(geom, firstPoint);
+                    boolean intersectSecond = intersects(geom, secondPoint);
+                    if (intersectFirst && intersectSecond && !isFirstPointBreak) {
+                        isFirstPointBreak = true;
+                        isSecondPointBreak = true;
+                        points.add(getNearPoint(previous));
+                        points.add(getDistantPoint(previous));
+                        return (Point2D[]) points.toArray(new Point2D[0]);
+                    } else
+                        if (intersectFirst && !isFirstPointBreak) {
+                            isFirstPointBreak = true;
+                            points.add(firstPoint);
+                        } else
+                            if (intersectSecond && !isSecondPointBreak) {
+                                isSecondPointBreak = true;
+                                points.add(secondPoint);
+                            }
+                }
+                previous = new Point2D.Double(theData[0], theData[1]);
+
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                // if (isFirstPart)
+                // newGp1.closePath();
+                // else
+                // newGp2.closePath();
+                break;
+            } // end switch
+
+            theIterator.next();
+        } // end while loop
+
+        return (Point2D[]) points.toArray(new Point2D[0]);
+    }
+
+    private Point2D getDistantPoint(Point2D previous) {
+        if (firstPoint.distance(previous) > secondPoint.distance(previous)) {
+            return firstPoint;
+        }
+        return secondPoint;
+    }
+
+    private Point2D getNearPoint(Point2D previous) {
+        if (firstPoint.distance(previous) <= secondPoint.distance(previous)) {
+            return firstPoint;
+        }
+        return secondPoint;
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        VectorialLayerEdited vle = getVLE();
+        FeatureSet selection = null;
+        DisposableIterator iterator = null;
+        try {
+            selection = (FeatureSet) vle.getFeatureStore().getSelection();
+
+            ViewPort vp =
+                CADExtension.getEditionManager().getMapControl().getViewPort();
+            if (selection.getSize() == 1) {
+                if (firstPoint != null) {
+                    Geometry g1 =
+                        createCircle(createPoint(firstPoint),
+                            vp.toMapDistance(3));
+                    Geometry g2 =
+                        createCircle(createPoint(firstPoint),
+                            vp.toMapDistance(5));
+
+                    renderer.draw(g1,
+                        mapControlManager.getAxisReferenceSymbol());
+                    renderer.draw(g2,
+                        mapControlManager.getAxisReferenceSymbol());
+                }
+                iterator = selection.iterator();
+                rowEdited = (Feature) iterator.next();
+                Geometry geom =
+                    ((Geometry) rowEdited.getDefaultGeometry()).cloneGeometry();
+                if (intersects(geom, new Point2D.Double(x, y))) {
+                    renderer.draw(geom,
+                        mapControlManager.getGeometrySelectionSymbol());
+                }
+            }
+        } catch (ReadException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+
+    }
+
+    public boolean intersects(double x, double y) {
+        Point2D p = new Point2D.Double(x, y);
+        VectorialLayerEdited vle = getVLE();
+        FeatureSet selection = null;
+        DisposableIterator iterator = null;
+        try {
+            selection = (FeatureSet) vle.getFeatureStore().getSelection();
+
+            if (selection.getSize() == 1) {
+                iterator = selection.iterator();
+                rowEdited = (Feature) iterator.next();
+                Geometry g =
+                    ((Geometry) rowEdited.getDefaultGeometry()).cloneGeometry();
+                return intersects(g, p);
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+        return false;
+    }
+
+    private boolean intersects(Geometry geom, Point2D p) {
+        double tol = 1;
+        tol =
+            CADExtension.getEditionManager().getMapControl().getViewPort()
+                .toMapDistance((int) tol);
+        Rectangle2D r =
+            new Rectangle2D.Double(p.getX() - tol / 2, p.getY() - tol / 2, tol,
+                tol);
+        return (geom.intersects(r) && !geom.getShape().contains(r));
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        if (s.equals(PluginServices.getText(this, "cancel")) || s.equals("c")
+            || s.equals("C")) {
+            init();
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "break_");
+    }
+
+    public String toString() {
+        return "_break";
+    }
+
+    @Override
+    protected int getSupportedPrimitiveGeometryType() {
+        return CURVE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/BreakCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ExploitCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ExploitCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ExploitCADTool.java	(revision 42196)
@@ -0,0 +1,614 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.InputEvent;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.ExploitCADToolContext;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+//import com.vividsolutions.jts.geom.GeometryCollection;
+
+/**
+ * Elimina la geometr�a compuesta y a�ade todas la geometr�as simples que la
+ * componen, implementado para polil�neas y pol�gonos.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class ExploitCADTool extends DefaultCADTool {
+    
+    private static Logger logger = LoggerFactory.getLogger(ExploitCADTool.class);
+
+    protected ExploitCADToolContext _fsm;
+    
+
+    /**
+     * M�todo de inicio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new ExploitCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_exploit");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+    }
+
+    public void exploit() {
+        
+        VectorialLayerEdited vle = getVLE();
+        DisposableIterator iterator = null;
+        FeatureStore featureStore = null;
+        FeatureType fety = null;
+
+        try {
+            featureStore = vle.getFeatureStore();
+            fety = featureStore.getDefaultFeatureType();
+        } catch (Exception ex) {
+            NotificationManager.addError(ex.getMessage(), ex);
+            return;
+        }
+
+        
+        GeometryType gety = fety.getDefaultGeometryAttribute().getGeomType();
+        
+        /*
+         * If we find a geometry which will violate
+         * geometry type retriction after being exploded,
+         * then we will ask user what to do (we'll ask once
+         * for all cases)
+         */
+        boolean decisionHasBeenTaken = false;
+        boolean differentTypesAllowed = false;
+
+        if (gety.getType() == Geometry.TYPES.GEOMETRY) {
+            /*
+             * Multi allowed, so we don't need to ask
+             */
+            decisionHasBeenTaken = true;
+            differentTypesAllowed = true;
+        }
+        // ==============================
+
+        try {
+            iterator =
+                ((FeatureSelection) featureStore.getSelection()).iterator();
+            FeatureSelection newSelection =
+                featureStore.createFeatureSelection();
+            // ArrayList selectedRowAux = new ArrayList();
+            featureStore.beginEditingGroup(getName());
+
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Geometry geom = (feature.getDefaultGeometry()).cloneGeometry();
+                featureStore.delete(feature);
+                if (geom instanceof MultiPrimitive) {
+                    exploitGeometryCollection(feature, newSelection);
+                } else {
+                    
+                    if (geom instanceof Curve) {
+                        /*
+                         * Splitting line gives lines, no problem
+                         */
+                        exploitLine(feature, newSelection);
+                    } else {
+                        if (geom instanceof Surface) {
+                            
+                            if (decisionHasBeenTaken) {
+                                
+                                /*
+                                 * We have already decided what to do
+                                 * in these cases
+                                 */
+                                exploitPolygon(
+                                    feature,
+                                    newSelection,
+                                    differentTypesAllowed);
+                                
+                            } else {
+                                
+                                differentTypesAllowed = askUserAllowOther();
+                                decisionHasBeenTaken = true;
+                                /*
+                                 * User has taken a decision. The same
+                                 * decision applies for other geometries
+                                 * in the current explode process
+                                 */
+                                exploitPolygon(
+                                    feature,
+                                    newSelection,
+                                    differentTypesAllowed);
+                            }
+                        }
+                    }
+                }
+            }
+            // clearSelection();
+            featureStore.setSelection(newSelection);
+            featureStore.endEditingGroup();
+        } catch (Exception e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+
+    }
+
+    private void exploitGeometryCollection(Feature feature,
+        FeatureSelection selectedRowAux) throws ReadException, DataException {
+        Geometry geom = (feature.getDefaultGeometry()).cloneGeometry();
+        MultiPrimitive gc = (MultiPrimitive) geom;
+        int numGeoms = gc.getPrimitivesNumber();
+        Feature f = null;
+
+        for (int i = 0; i < numGeoms; i++) {
+            Geometry primitiveGeom = gc.getPrimitiveAt(i);
+            f = insertGeometry(primitiveGeom, feature);
+            selectedRowAux.select(f);
+        }
+        refresh();
+    }
+
+    private void exploitLine(Feature feature,
+        FeatureSelection selectedRowAux) {
+        
+        GeneralPathX newGp1 = new GeneralPathX();
+        // DefaultFeature df = (DefaultFeature) dre.getLinkedRow()
+        // .cloneRow();
+        // Point2D firstPoint=null;
+        // Point2D lastPoint=null;
+        // Object[] attributes=new Object[feature.size()];
+        // for (int j = 0; j < feature.size(); j++) {
+        // attributes[j]=feature.get(j);
+        // }
+        FeatureStore featureStore;
+        // try {
+        try {
+            featureStore = getVLE().getFeatureStore();
+
+            // EditableFeature
+            // eFeature=featureStore.createNewFeature(feature.getType(),
+            // feature);
+            PathIterator theIterator =
+                (feature.getDefaultGeometry()).getPathIterator(null,
+                    geomManager.getFlatness());
+            double[] theData = new double[6];
+            int theType;
+            int numParts = 0;
+            Point2D initialPoint = null;
+            Feature f = null;
+            
+            while (!theIterator.isDone()) {
+                theType = theIterator.currentSegment(theData);
+                switch (theType) {
+
+                case PathIterator.SEG_MOVETO:
+                    numParts++;
+                    newGp1 = new GeneralPathX();
+                    // firstPoint=new Point2D.Double(theData[0], theData[1]);
+                    initialPoint = new Point2D.Double(theData[0], theData[1]);
+                    newGp1.moveTo(theData[0], theData[1]);
+                    // lastPoint=new Point2D.Double(theData[0], theData[1]);
+                    break;
+
+                case PathIterator.SEG_LINETO:
+                    newGp1.lineTo(theData[0], theData[1]);
+                    Geometry geomLine = createCurve(newGp1);
+                    // DefaultFeature dfLine = (DefaultFeature) df.cloneRow();
+                    // dfLine.setGeometry(geomLine);
+                    // EditableFeature
+                    // eFeature=featureStore.createNewFeature(feature.getType(),
+                    // feature);
+                    // eFeature.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName(),geomLine);
+                    f = insertGeometry(geomLine, feature);
+                    // featureStore.insert(eFeature);
+                    selectedRowAux.select(f);
+                    newGp1 = new GeneralPathX();
+                    newGp1.moveTo(theData[0], theData[1]);
+                    // lastPoint=new Point2D.Double(theData[0], theData[1]);
+                    break;
+                case PathIterator.SEG_CLOSE:
+                    if (initialPoint != null) {
+                        newGp1.lineTo(initialPoint.getX(), initialPoint.getY());
+                        geomLine = createCurve(newGp1);
+
+                        f = insertGeometry(geomLine, feature);
+                        selectedRowAux.select(f);
+
+                        newGp1 = new GeneralPathX();
+                        newGp1.moveTo(initialPoint.getX(), initialPoint.getY());
+                    }
+                    break;
+                } // end switch
+
+                theIterator.next();
+            } // end while loop
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        refresh();
+    }
+
+    private void exploitPolygon(
+        Feature deleted_feature,
+        FeatureSelection selectedRowAux,
+        boolean allows_other) {
+        
+        GeneralPathX newGp1 = null;
+        // Object[] attributes=new Object[feature.size()];
+        // for (int j = 0; j < feature.size(); j++) {
+        // attributes[j]=feature.get(j);
+        // }
+
+        FeatureStore featureStore;
+        Feature added_feat = null;
+        try {
+            featureStore = getVLE().getFeatureStore();
+
+            PathIterator theIterator =
+                (deleted_feature.getDefaultGeometry()).getPathIterator(null,
+                    geomManager.getFlatness());
+            double[] theData = new double[6];
+            int theType;
+            int numParts = 0;
+            Point2D initialPoint = null;
+            while (!theIterator.isDone()) {
+                theType = theIterator.currentSegment(theData);
+                switch (theType) {
+
+                case PathIterator.SEG_MOVETO:
+                    numParts++;
+                    if (newGp1 != null) {
+                        Geometry new_part = null;
+
+                        if (allows_other) {
+                            new_part = createCurve(newGp1);
+                            added_feat = cloneFeatureWithGeometry(new_part, deleted_feature);
+                            /*
+                             * added_feat not added
+                             * Now explode resulting line
+                             */
+                            exploitLine(added_feat, selectedRowAux);
+                        } else {
+                            new_part = createSurface(newGp1);
+                            added_feat = insertGeometry(new_part, deleted_feature);
+                            selectedRowAux.select(added_feat);
+                        }
+
+                    }
+                    newGp1 = new GeneralPathX();
+                    initialPoint = new Point2D.Double(theData[0], theData[1]);
+                    newGp1.moveTo(theData[0], theData[1]);
+                    break;
+
+                case PathIterator.SEG_LINETO:
+                    newGp1.lineTo(theData[0], theData[1]);
+                    // newGp1 = new GeneralPathX();
+                    // newGp1.moveTo(theData[0], theData[1]);
+                    break;
+
+                case PathIterator.SEG_QUADTO:
+                    newGp1.quadTo(theData[0], theData[1], theData[2],
+                        theData[3]);
+                    // newGp1 = new GeneralPathX();
+                    // newGp1.moveTo(theData[0], theData[1]);
+                    break;
+                case PathIterator.SEG_CUBICTO:
+                    newGp1.curveTo(theData[0], theData[1], theData[2],
+                        theData[3], theData[4], theData[5]);
+                    // newGp1 = new GeneralPathX();
+                    // newGp1.moveTo(theData[0], theData[1]);
+                    break;
+                case PathIterator.SEG_CLOSE:
+                    if (initialPoint != null) {
+                        newGp1.lineTo(initialPoint.getX(), initialPoint.getY());
+                    }
+                    // System.out.println("aqu�");
+                    // if (isFirstPart)
+                    // newGp1.closePath();
+                    // else
+                    // newGp2.closePath();
+                    break;
+                } // end switch
+
+                theIterator.next();
+            } // end while loop
+            if (newGp1 != null) {
+                
+                Geometry new_part = null;
+                
+                if (allows_other) {
+                    new_part = createCurve(newGp1);
+                    added_feat = cloneFeatureWithGeometry(new_part, deleted_feature);
+                    /*
+                     * added_feat not added
+                     * Now explode resulting line
+                     */
+                    exploitLine(added_feat, selectedRowAux);
+                } else {
+                    new_part = createSurface(newGp1);
+                    added_feat = insertGeometry(new_part, deleted_feature);
+                    selectedRowAux.select(added_feat);
+                }
+                
+            }
+        } catch (Throwable e) {
+            logger.info("While doing exploit of polygon.", e);
+            ApplicationLocator.getManager().message(
+                "_Unable_to_exploit_polygon", JOptionPane.ERROR_MESSAGE);
+            // TODO Auto-generated catch block
+            // e.printStackTrace();
+        }
+        refresh();
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "exploit_");
+    }
+
+    public String toString() {
+        return "_exploit";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] {
+            CURVE,
+            MULTICURVE,
+            SURFACE,
+            MULTISURFACE };
+    }
+    
+    /**
+     * @return
+     */
+    private boolean askUserAllowOther() {
+        
+        int resp = 0;
+        
+        Object[] options = {
+            Messages.getText("_Allow_lines"),
+            Messages.getText("_Keep_as_polygons") };
+        
+        JPanel explanation_panel = getExplanationPanel();
+        Component parent = ApplicationLocator.getManager().getRootComponent();
+        
+        resp = JOptionPane.showOptionDialog(
+                    parent,
+                    explanation_panel,
+                    Messages.getText("exploit"),
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE, null, options,
+                    options[1]);
+        
+        return (resp == JOptionPane.YES_OPTION);
+    }
+    
+    
+    private JPanel getExplanationPanel() {
+        
+        JPanel resp = new JPanel(new BorderLayout(10, 10));
+        
+        String msg = Messages.getText("_Polygons_will_exploded_in_polygon_only_layer_Decision_question");
+        JLabel topLabel = new JLabel(msg);
+        
+        JPanel mainPanel = new JPanel(new GridBagLayout());
+        GridBagConstraints cc = new GridBagConstraints();
+        
+        cc.gridx = 0;
+        cc.gridy = 0;
+        cc.anchor = GridBagConstraints.WEST;
+        
+        cc.insets = new Insets(3, 6, 3, 6);
+        
+        Font boldf = mainPanel.getFont().deriveFont(Font.BOLD);
+
+        JLabel lbl = new JLabel(Messages.getText("_Allow_lines"));
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(Messages.getText("_Lines_will_exist_in_editing_mode_Must_remove_or_cancel")), cc);
+        
+        cc.gridx = 0;
+        cc.gridy = 1;
+        lbl = new JLabel(Messages.getText("_Keep_as_polygons"));
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(Messages.getText("_Multi_polygons_separated_Simple_polygons_kept")), cc);
+
+        resp.add(mainPanel, BorderLayout.CENTER);
+        resp.add(topLabel, BorderLayout.NORTH);
+        return resp;
+    }
+    
+    
+    private Feature cloneFeatureWithGeometry(
+        Geometry geometry, Feature feature) {
+        
+        VectorialLayerEdited vle = getVLE();
+
+        try {
+            FeatureStore featureStore =
+                ((FLyrVect) vle.getLayer()).getFeatureStore();
+            EditableFeature eFeature =
+                featureStore.createNewFeature(
+                    featureStore.getDefaultFeatureType(), feature);
+            eFeature.setGeometry(featureStore.getDefaultFeatureType()
+                .getDefaultGeometryAttributeName(), geometry);
+            return eFeature;
+        } catch (ReadException e) {
+            NotificationManager.addError(e.getMessage(), e);
+            return null;
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+            return null;
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ExploitCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SelectionCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SelectionCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SelectionCADTool.java	(revision 42196)
@@ -0,0 +1,574 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.Color;
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.ICoordTrans;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.IEditionManager;
+import org.gvsig.editing.gui.cad.CADTool;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.SelectionCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.SelectionCADToolContext.SelectionCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class SelectionCADTool extends DefaultCADTool {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(SelectionCADTool.class);
+
+    protected SelectionCADToolContext _fsm;
+
+    protected Point2D firstPoint;
+
+    protected String nextState;
+    
+    // These two arrays are used to save the current selected features and
+    // geometries. The selected geometries contains an instance of the
+    // geometry that can be reprojected.
+    protected ArrayList selectedGeometries = new ArrayList();
+    protected ArrayList selectedFeatures = new ArrayList(); 
+    
+    protected String type = PluginServices.getText(this, "simple");
+
+    protected boolean multipleSelection = false;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new SelectionCADToolContext(this);
+        setNextTool("selection");
+        setType(PluginServices.getText(this, "simple"));
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        LOG.debug("TRANSICION DESDE ESTADO {}", _fsm.getState() + " x= " + x
+            + " y=" + y);
+        try {
+            _fsm.addPoint(x, y, event);
+        } catch (Exception e) {
+            init();
+            PluginServices.getMDIManager().restoreCursor();
+        }
+        LOG.debug("ESTADO ACTUAL: ", getStatus());
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    public String getNextState() {
+        return nextState;
+    }
+
+    protected void pointDoubleClick(MapContext map) throws ReadException {
+        FLayer[] actives = map.getLayers().getActives();
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param selection
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        SelectionCADToolState actualState =
+            (SelectionCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        LOG.debug("PREVIOUSSTATE = {}", status);
+        VectorialLayerEdited vle = getVLE();
+        try {
+            LOG.debug("STATUS ACTUAL = {}", _fsm.getTransition());
+            if (status.equals("Selection.FirstPoint")) {
+                firstPoint = new Point2D.Double(x, y);
+            } else
+                if (status.equals("Selection.SecondPoint")) {
+                } else
+                    if (status.equals("Selection.WithFeatures")) {
+                    } else
+                        if (status.equals("Selection.WithHandlers")) {
+                            addPointWithHandlers(x, y, vle.getFeatureStore(),
+                                vle.getSelectedHandler());
+                        }
+        } catch (DataException e) {
+            LOG.error("Error reding the store", e);
+        }
+    }
+
+    /**
+     * AddPoint method for the WithHandlers option
+     * 
+     * @param x
+     *            selected x coordinate.
+     * @param y
+     *            selected y coordinate.
+     * @param featureStore
+     *            the selected feature store.
+     * @param selectedHandlers
+     *            the selected handlers
+     */
+    protected void addPointWithHandlers(double x, double y,
+        FeatureStore featureStore, ArrayList selectedHandlers) {
+        String description = PluginServices.getText(this, "move_handlers");
+        DisposableIterator iterator = null;
+        
+        IEditionManager ed_man = this.getEditionManager();
+        try {
+            featureStore.beginEditingGroup(description);
+            ICoordTrans coordTrans = getVLE().getLayer().getCoordTrans();
+            for (int i=0 ; i<selectedFeatures.size() ; i++){
+                Feature feature = (Feature) selectedFeatures.get(i);
+                
+                Geometry changing_geometry = (Geometry)selectedGeometries.get(i);
+                Geometry old_geometry = changing_geometry.cloneGeometry();
+                
+                // Draw the moved geometry. It has been reprojected in the
+                // select handler method
+                for (int k = 0; k < selectedHandlers.size(); k++) {
+                    Handler h = (Handler) selectedHandlers.get(k);
+                    h.set(x, y);
+                }                            
+                             
+                //If the layer is reprojected, It is necessary
+                //to reproject the geometry
+                if (coordTrans != null) {
+                    changing_geometry = changing_geometry.cloneGeometry();
+                    changing_geometry.reProject(coordTrans.getInverted());
+                    // ==========================
+                    // this is already an independent clone
+                    old_geometry.reProject(coordTrans.getInverted());
+                }              
+                
+                // restore old geometry in feature
+                // this is because selectedGeometries and
+                // selectedFeature point
+                // at the same geometries at least sometimes
+                EditableFeature eFeature = feature.getEditable();
+                eFeature.setDefaultGeometry(old_geometry);
+                
+                Feature old_geom_feature = eFeature.getNotEditableCopy();
+                
+                // set new (old remains as source for undoing)
+                eFeature = old_geom_feature.getEditable();
+                eFeature.setDefaultGeometry(changing_geometry);
+                
+                ed_man.updateFeature(featureStore, eFeature);
+            }
+
+            firstPoint = new Point2D.Double(x, y);
+
+            featureStore.endEditingGroup();
+        } catch (DataException e1) {
+            LOG.error("Error reading the store", e1);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    /**
+     * Receives second point
+     * 
+     * @param x
+     * @param y
+     * @return numFeatures selected
+     */
+    public long selectWithSecondPoint(double x, double y, InputEvent event) {
+        VectorialLayerEdited vle = getVLE();
+        PluginServices.getMDIManager().setWaitCursor();
+        vle.selectWithSecondPoint(x, y);
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) vle.getFeatureStore().getSelection();
+            PluginServices.getMDIManager().restoreCursor();
+            long countSel = selection.getSize();
+            if (countSel > 0) {
+                nextState = "Selection.WithSelectedFeatures";
+            } else {
+                nextState = "Selection.FirstPoint";
+            }
+            return countSel;
+        } catch (ReadException e) {
+            e.printStackTrace();
+            return 0;
+        } catch (DataException e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        SelectionCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        if (vle == null) {
+            return;
+        }
+        ArrayList selectedHandler = vle.getSelectedHandler();
+        ViewPort vp = vle.getLayer().getMapContext().getViewPort();
+        if (status.equals("Selection.SecondPoint")) {
+            // Dibuja el rect�ngulo de selecci�n
+            Curve curve = createCurve();
+            curve.addMoveToVertex(createPoint(firstPoint.getX(),
+                firstPoint.getY()));
+            curve.addVertex(createPoint(x, firstPoint.getY()));
+            curve.addVertex(createPoint(x, y));
+            curve.addVertex(createPoint(firstPoint.getX(), y));
+            curve.addVertex(createPoint(firstPoint.getX(), firstPoint.getY()));
+
+            renderer
+                .draw(curve, mapControlManager.getGeometrySelectionSymbol());
+
+            return;
+        } else
+            //If there is a handler to move...
+            if (status.equals("Selection.WithHandlers")) {
+                drawWithHandlers(renderer, x, y, selectedHandler);
+            }
+    }
+    
+    /**
+     * Draw method to draw a geometry with handlers
+     * 
+     * @param mapControlDrawer
+     *            object used to draw.
+     * @param x
+     *            selected x coordinate.
+     * @param y
+     *            selected y coordinate.
+     * @param selectedHandlers
+     *            the selected handlers
+     */
+    protected void drawWithHandlers(MapControlDrawer mapControlDrawer, double x,
+        double y, ArrayList selectedHandlers) {
+        // Moving the handlers that have been selected
+        // in the selectHandlers method
+        double xPrev = 0;
+        double yPrev = 0;
+        for (int k = 0; k < selectedHandlers.size(); k++) {
+            Handler h = (Handler) selectedHandlers.get(k);
+            xPrev = h.getPoint().getX();
+            yPrev = h.getPoint().getY();
+            h.set(x, y);
+        }
+       
+        // Draw the moved geometry. It has been reprojected in the
+        // select handler method
+        for (int i = 0; i < selectedGeometries.size(); i++) {
+            Geometry geom = (Geometry) selectedGeometries.get(i);
+
+            mapControlDrawer.setColor(Color.gray);
+            mapControlDrawer.draw(geom,
+                mapControlManager.getAxisReferenceSymbol());
+        }
+        for (int k = 0; k < selectedHandlers.size(); k++) {
+            Handler h = (Handler) selectedHandlers.get(k);
+            h.set(xPrev, yPrev);
+        } 
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        SelectionCADToolState actualState =
+            (SelectionCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        LOG.debug("PREVIOUSSTATE = {}", status);
+        LOG.debug("STATUS ACTUAL = {}", _fsm.getTransition());
+        if (s.equals(PluginServices.getText(this, "cancel"))) {
+            init();
+            return;
+        }
+        if (status.equals("Selection.FirstPoint")) {
+            setType(s);
+            return;
+        }
+        init();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    public String getStatus() {
+        try {
+            SelectionCADToolState actualState =
+                (SelectionCADToolState) _fsm.getPreviousState();
+            String status = actualState.getName();
+
+            return status;
+        } catch (NullPointerException e) {
+            return "Selection.FirstPoint";
+        }
+    }
+
+    public void end() {
+        if (!getNextTool().equals("selection")) {
+            CADExtension.setCADTool(getNextTool(), false);
+        }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "selection_");
+    }
+
+    public boolean selectFeatures(double x, double y, InputEvent event) {
+        SelectionCADToolState actualState = _fsm.getState();
+
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        multipleSelection = event.isControlDown();
+
+        if ((status.equals("Selection.FirstPoint"))
+            || (status.equals("Selection.WithSelectedFeatures"))) {
+            PluginServices.getMDIManager().setWaitCursor();
+            firstPoint = new Point2D.Double(x, y);
+            try {
+                vle.getFeatureStore().beginEditingGroup(getName());
+                vle.selectWithPoint(x, y, multipleSelection);
+                vle.getFeatureStore().endEditingGroup();
+            } catch (NeedEditingModeException e) {
+                NotificationManager.showMessageError(getName(), e);
+            } catch (ReadException e) {
+                NotificationManager.showMessageError(getName(), e);
+            }
+            PluginServices.getMDIManager().restoreCursor();
+        }
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) vle.getFeatureStore().getSelection();
+            long countSel = selection.getSize();
+            if (countSel > 0) {
+                nextState = "Selection.WithSelectedFeatures";
+                return true;
+            } else {
+                {
+                    nextState = "Selection.SecondPoint";
+                    return true;
+                }
+            }
+        } catch (ReadException e) {
+            LOG.error("Error selecting the features", e);
+            return false;
+        } catch (DataException e) {
+            LOG.error("Error selecting the features", e);
+            return false;
+        }
+    }
+
+    public int selectHandlers(double x, double y, InputEvent event) {
+        Point2D auxPoint = new Point2D.Double(x, y);
+
+        VectorialLayerEdited vle = getVLE();
+        
+        //Gets the current selected handlers 
+        ArrayList selectedHandler = vle.getSelectedHandler();
+        FeatureSet selection = null;
+        DisposableIterator iterator = null;
+        try {
+            selection = (FeatureSet) vle.getFeatureStore().getSelection();
+
+            long countSel = selection.getSize();
+            LOG.debug("DENTRO DE selectHandlers. selectedRow.size = {}",
+                countSel);
+            selectedHandler.clear();
+
+            //Clear the previous selection
+            clearCurrentSelection();
+            
+            // Se comprueba si se pincha en una gemometr�a
+            PluginServices.getMDIManager().setWaitCursor();
+
+            double tam =
+                getCadToolAdapter().getMapControl().getViewPort()
+                    .toMapDistance(mapControlManager.getTolerance());
+
+            Handler[] handlers = null;
+            
+            
+            selectedGeometries.clear();
+            iterator = selection.fastIterator();
+            ICoordTrans coordTrans = getVLE().getLayer().getCoordTrans();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                
+                //If the layer is reprojected, the tolerance is not applicable. It is necessary
+                //to reproject the geometry
+                Geometry geometry = feature.getDefaultGeometry();
+                if (coordTrans != null){
+                    geometry = geometry.cloneGeometry();
+                    geometry.reProject(coordTrans);
+                }
+                
+                handlers = geometry.getHandlers(Geometry.SELECTHANDLER);
+
+                // y miramos los handlers de cada entidad seleccionada
+                double min = tam;
+
+                for (int j = 0; j < handlers.length; j++) {
+                    Point2D handlerPoint = handlers[j].getPoint();
+                    double distance = auxPoint.distance(handlerPoint);
+                    if (distance <= min) {
+                        min = distance;
+                        selectedHandler.add(handlers[j]);
+                        selectedGeometries.add(geometry);
+                        selectedFeatures.add(feature);
+                    }
+                }
+            }
+            PluginServices.getMDIManager().restoreCursor();
+        } catch (DataException e) {
+            LOG.error("Error reading the store", e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+
+        return selectedHandler.size();
+    }
+    
+    protected void clearCurrentSelection(){
+        selectedFeatures.clear();
+        selectedGeometries.clear();
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        if (type.equals("S") || type.equals("s")) {
+            this.type = PluginServices.getText(this, "simple");
+        } else {
+            this.type = type;
+        }
+    }
+
+    public String toString() {
+        return "_selection";
+    }
+
+    public void multipleSelection(boolean b) {
+        multipleSelection = b;
+
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+    
+    /**
+     * Tells whether the tool provided is an instance of this class
+     * 
+     * @param tool
+     * @param exactly_this requires that the object is an instance of
+     * this class and not an instance of a subclass
+     *  
+     * @return 
+     */
+    public static boolean isInstance(CADTool tool, boolean exactly_this) {
+        
+        if (exactly_this) {
+            return tool.getClass() == SelectionCADTool.class;
+        } else {
+            return (tool instanceof SelectionCADTool);
+        }
+        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SelectionCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ScaleCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ScaleCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ScaleCADTool.java	(revision 42196)
@@ -0,0 +1,467 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.Image;
+import java.awt.event.InputEvent;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Point2D.Double;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.CADTool;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.ScaleCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.ScaleCADToolContext.ScaleCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class ScaleCADTool extends DefaultCADTool {
+
+    private static Logger logger = LoggerFactory.getLogger(ScaleCADTool.class);
+    
+    private ScaleCADToolContext _fsm;
+    private Point2D firstPoint;
+    private Point2D lastPoint;
+    private Point2D scalePoint;
+    private Double orr;
+    private Double frr;
+    private Double ore;
+    private Double fre;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new ScaleCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_scale");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        ScaleCADToolState actualState =
+            (ScaleCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Scale.PointMain")) {
+            firstPoint = new Point2D.Double(x, y);
+            scalePoint = firstPoint;
+        } else
+            if (status.equals("Scale.ScaleFactorOrReference")) {
+                PluginServices.getMDIManager().setWaitCursor();
+                lastPoint = new Point2D.Double(x, y);
+
+                // double w;
+                // double h;
+                // w = lastPoint.getX() - firstPoint.getX();
+                // h = lastPoint.getY() - firstPoint.getY();
+
+                try {
+                    double size =
+                        getCadToolAdapter()
+                            .getMapControl()
+                            .getViewPort()
+                            .toMapDistance(
+                                getCadToolAdapter().getMapControl().getWidth());
+                    scale(firstPoint.distance(lastPoint) / (size / 40));
+                } catch (ReadException e) {
+                    NotificationManager.addError(e.getMessage(), e);
+                }
+
+                PluginServices.getMDIManager().restoreCursor();
+            } else
+                if (status.equals("Scale.PointOriginOrScaleFactor")) {
+                    orr = new Point2D.Double(x, y);
+                } else
+                    if (status.equals("Scale.EndPointReference")) {
+                        frr = new Point2D.Double(x, y);
+                    } else
+                        if (status.equals("Scale.OriginPointScale")) {
+                            ore = new Point2D.Double(x, y);
+                            firstPoint = ore;
+                        } else
+                            if (status.equals("Scale.EndPointScale")) {
+                                fre = new Point2D.Double(x, y);
+
+                                double distrr = orr.distance(frr);
+                                double distre = ore.distance(fre);
+                                double escalado = distre / distrr;
+
+                                try {
+                                    scale(escalado);
+                                } catch (ReadException e) {
+                                    NotificationManager.addError(
+                                        e.getMessage(), e);
+                                }
+                            }
+
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        ScaleCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+        FeatureSet selection = null;
+        DisposableIterator iterator = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            // ArrayList selectedRow = getSelectedRows();
+            Point2D currentPoint = new Point2D.Double(x, y);
+            long selectionCount = selection.getSize();
+            if (status.equals("Scale.ScaleFactorOrReference")) {
+                VectorialLayerEdited vle = getVLE();
+                ViewPort vp = vle.getLayer().getMapContext().getViewPort();
+                Point2D point =
+                    vp.fromMapPoint(firstPoint.getX(), firstPoint.getY());
+                double size =
+                    getCadToolAdapter()
+                        .getMapControl()
+                        .getViewPort()
+                        .toMapDistance(
+                            getCadToolAdapter().getMapControl().getWidth());
+                double scale = firstPoint.distance(currentPoint) / (size / 40);
+                renderer.drawLine(firstPoint, currentPoint,
+                    mapControlManager.getAxisReferenceSymbol());
+
+                if (selectionCount < CADTool.TOPGEOMETRY) {
+                    iterator = selection.iterator();
+                    while (iterator.hasNext()) {
+                        Feature feature = (Feature) iterator.next();
+
+                        // }
+                        // for (int i = 0; i < selectionCount; i++) {
+                        // DefaultFeature fea = (DefaultFeature)
+                        // ((DefaultRowEdited) selectedRow
+                        // .get(i)).getLinkedRow();
+                        Geometry geometry =
+                            (feature.getDefaultGeometry()).cloneGeometry();
+
+                        try {
+                            Point po = geomManager.createPoint(
+                                firstPoint.getX(),
+                                firstPoint.getY(),
+                                SUBTYPES.GEOM2D);
+                            
+                            geometry.scale(po, scale, scale);
+                        } catch (CreateGeometryException cge) {
+                            logger.info("Error while scaling geometry", cge);
+                            ApplicationLocator.getManager().message("Unable to scale geometry",
+                                JOptionPane.ERROR_MESSAGE);
+                        }
+
+                        renderer.draw(geometry,
+                            mapControlManager.getAxisReferenceSymbol());
+                    }
+
+                } else {
+                    AffineTransform at = new AffineTransform();
+                    at.setToTranslation(point.getX(), point.getY());
+                    at.scale(scale, scale);
+                    at.translate(-point.getX(), -point.getY());
+                    Image imgSel = vle.getSelectionImage();
+                    renderer.drawImage(imgSel, at);
+                }
+                PluginServices.getMainFrame().getStatusBar()
+                    .setMessage("5", "Factor = " + scale);
+            } else
+                if (status.equals("Scale.EndPointScale")) {
+                    VectorialLayerEdited vle = getVLE();
+                    ViewPort vp = vle.getLayer().getMapContext().getViewPort();
+                    Point2D point =
+                        vp.fromMapPoint(scalePoint.getX(), scalePoint.getY());
+
+                    double distrr = orr.distance(frr);
+                    double distre = ore.distance(currentPoint);
+                    double escalado = distre / distrr;
+                    if (selectionCount < CADTool.TOPGEOMETRY) {
+                        iterator = selection.iterator();
+                        while (iterator.hasNext()) {
+                            Feature feature = (Feature) iterator.next();
+                            // for (int i = 0; i < selectedRow.size(); i++) {
+                            // DefaultFeature fea = (DefaultFeature)
+                            // ((DefaultRowEdited) selectedRow
+                            // .get(i)).getLinkedRow();
+                            Geometry geometry =
+                                (feature.getDefaultGeometry()).cloneGeometry();
+
+                            try {
+                                Point po = geomManager.createPoint(
+                                    scalePoint.getX(),
+                                    scalePoint.getY(),
+                                    SUBTYPES.GEOM2D);
+                                
+                                geometry.scale(po, escalado, escalado);
+                            } catch (CreateGeometryException cge) {
+                                logger.info("Error while scaling geometry", cge);
+                                ApplicationLocator.getManager().message("Unable to scale geometry",
+                                    JOptionPane.ERROR_MESSAGE);
+                            }
+
+                            renderer.draw(geometry,
+                                mapControlManager.getAxisReferenceSymbol());
+                        }
+                    } else {
+                        AffineTransform at = new AffineTransform();
+                        at.setToTranslation(point.getX(), point.getY());
+                        at.scale(escalado, escalado);
+                        at.translate(-point.getX(), -point.getY());
+                        Image imgSel = vle.getSelectionImage();
+                        renderer.drawImage(imgSel, at);
+                    }
+                    renderer.drawLine(firstPoint, new Point2D.Double(x, y),
+                        mapControlManager.getAxisReferenceSymbol());
+                }
+        } catch (DataException e) {
+            e.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        ScaleCADToolState actualState =
+            (ScaleCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("Scale.ScaleFactorOrReference")) {
+            /*
+             * try { scale(2); } catch (DriverIOException e) { // TODO
+             * Auto-generated catch block e.printStackTrace(); } catch
+             * (IOException e) { // TODO Auto-generated catch block
+             * e.printStackTrace(); }
+             */
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+        ScaleCADToolState actualState =
+            (ScaleCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("Scale.ScaleFactorOrReference")) {
+            try {
+                scale(d);
+            } catch (ReadException e) {
+                NotificationManager.addError(e.getMessage(), e);
+            }
+        }
+    }
+
+    private void scale(double scaleFactor) throws ReadException {
+        VectorialLayerEdited vle = getVLE();
+        DisposableIterator iterator = null;
+        try {
+            FeatureStore featureStore = vle.getFeatureStore();
+
+            featureStore.beginEditingGroup(getName());
+            iterator =
+                ((FeatureSelection) featureStore.getSelection()).iterator();
+            ArrayList selectedRowAux = new ArrayList();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+
+                // }
+                // for (int i = 0; i < selectedRow.size(); i++) {
+                // IRowEdited edRow = (IRowEdited) selectedRow.get(i);
+                // DefaultFeature fea = (DefaultFeature)
+                // edRow.getLinkedRow().cloneRow();
+                Geometry geometry =
+                    (feature.getDefaultGeometry()).cloneGeometry();
+                
+                
+                try {
+                    Point po = geomManager.createPoint(
+                        scalePoint.getX(),
+                        scalePoint.getY(),
+                        SUBTYPES.GEOM2D);
+                    
+                    geometry.scale(po, scaleFactor, scaleFactor);
+                } catch (CreateGeometryException cge) {
+                    logger.info("Error while scaling geometry", cge);
+                    ApplicationLocator.getManager().message("Unable to scale geometry",
+                        JOptionPane.ERROR_MESSAGE);
+                }
+
+                super.updateGeometry(featureStore, feature, geometry);
+//                EditableFeature eFeature = feature.getEditable();
+//                eFeature.setGeometry(featureStore.getDefaultFeatureType()
+//                    .getDefaultGeometryAttributeName(), geometry);
+//                featureStore.update(eFeature);
+
+                // vea.modifyRow(edRow.getIndex(),
+                // fea,getName(),EditionEvent.GRAPHIC);
+                selectedRowAux.add(feature);
+            }
+            featureStore.endEditingGroup();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+        // vle.setSelectionCache(VectorialLayerEdited.NOTSAVEPREVIOUS,
+        // selectedRowAux);
+        // clearSelection();
+        // selectedRow.addAll(selectedRowAux);
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "scale_");
+    }
+
+    public String toString() {
+        return "_scale";
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ScaleCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolygonCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolygonCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolygonCADTool.java	(revision 42196)
@@ -0,0 +1,360 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.exception.ValueException;
+import org.gvsig.editing.gui.cad.tools.smc.PolygonCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.PolygonCADToolContext.PolygonCADToolState;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class PolygonCADTool extends AbstractCurveSurfaceCADTool {
+
+    protected PolygonCADToolContext _fsm;
+    protected Point2D center;
+    protected int numLines = 5;
+    protected boolean isI = true;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new PolygonCADToolContext(this);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        PolygonCADToolState actualState =
+            (PolygonCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Polygon.NumberOrCenterPoint")) {
+            center = new Point2D.Double(x, y);
+        } else
+            if (status.equals("Polygon.CenterPoint")) {
+                center = new Point2D.Double(x, y);
+            } else
+                if (status.equals("Polygon.OptionOrRadiusOrPoint")
+                    || status.equals("Polygon.RadiusOrPoint")) {
+                    Point2D point = new Point2D.Double(x, y);
+                    // Pol�gono a partir de la circunferencia.
+                    if (isI) {
+                        insertAndSelectGeometry(getIPolygon(point,
+                            point.distance(center)));
+                    } else {
+                        insertAndSelectGeometry(getCPolygon(point,
+                            point.distance(center)));
+                    }
+                }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        PolygonCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Polygon.OptionOrRadiusOrPoint")
+            || status.equals("Polygon.RadiusOrPoint")) {
+            Point2D point = new Point2D.Double(x, y);
+            renderer.drawLine(center, point,
+                mapControlManager.getGeometrySelectionSymbol());
+
+            Geometry help_geom = null;
+            Geometry help_geom_perim = null;
+            
+            /*
+             * Get helping polygon
+             */
+            if (isI) {
+                help_geom = getIPolygon(point, point.distance(center));
+            } else {
+                help_geom = getCPolygon(point, point.distance(center));
+            }
+
+            /*
+             * Get and draw perimeter of polygon
+             */
+            try {
+                help_geom_perim = GeometryLocator.
+                    getGeometryManager().createCurve(
+                        help_geom.getGeneralPath(),
+                        Geometry.SUBTYPES.GEOM2D);
+                renderer.draw(help_geom_perim,
+                    mapControlManager.getGeometrySelectionSymbol());
+            } catch (Exception e) {
+                ApplicationLocator.getManager().message(
+                    Messages.getText("_Unable_to_draw_help_geometry"),
+                    JOptionPane.ERROR_MESSAGE);
+            }
+
+
+            /*
+             * Create circle
+             */
+            help_geom = createCircle(center, point.distance(center));
+            
+            /*
+             * Get and draw perimeter of circle
+             */
+            try {
+                help_geom_perim = GeometryLocator.
+                    getGeometryManager().createCurve(
+                        help_geom.getGeneralPath(),
+                        Geometry.SUBTYPES.GEOM2D);
+                renderer.draw(help_geom_perim,
+                    mapControlManager.getAxisReferenceSymbol());
+            } catch (Exception e) {
+                ApplicationLocator.getManager().message(
+                    Messages.getText("_Unable_to_draw_help_geometry"),
+                    JOptionPane.ERROR_MESSAGE);
+            }
+
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        PolygonCADToolState actualState =
+            (PolygonCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Polygon.OptionOrRadiusOrPoint")) {
+            if (s.equalsIgnoreCase(PluginServices.getText(this,
+                "PolygonCADTool.circumscribed"))
+                || s.equals(PluginServices.getText(this, "circumscribed"))) {
+                isI = false;
+            } else
+                if (s.equalsIgnoreCase(PluginServices.getText(this,
+                    "PolygonCADTool.into_circle"))
+                    || s.equals(PluginServices.getText(this, "into_circle"))) {
+                    isI = true;
+                }
+        }
+    }
+
+    public void addValue(double d) {
+        PolygonCADToolState actualState =
+            (PolygonCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Polygon.NumberOrCenterPoint")) {
+            numLines = (int) d;
+        } else
+            if (status.equals("Polygon.OptionOrRadiusOrPoint")
+                || status.equals("Polygon.RadiusOrPoint")) {
+                double radio = d;
+
+                // Pol�gono a partir de radio.
+                Point2D point =
+                    UtilFunctions.getPoint(center,
+                        new Point2D.Double(center.getX(), center.getY() + 10),
+                        radio);
+
+                if (isI) {
+                    insertAndSelectGeometry(getIPolygon(point, radio));
+                } else {
+                    insertAndSelectGeometry(getCPolygon(point, radio));
+                }
+            }
+    }
+
+    /**
+     * Devuelve la geometr�a con el poligono regular circunscrito a la
+     * circunferencia formada por el punto central y el radio que se froma
+     * entre este y el puntero del rat�n..
+     * 
+     * @param point
+     *            Puntero del rat�n.
+     * @param radio
+     *            Radio
+     * 
+     * @return GeometryCollection con las geometr�as del pol�gono.
+     */
+    private Geometry getCPolygon(Point2D point, double radio) {
+        Point2D p1 = UtilFunctions.getPoint(center, point, radio);
+
+        double initangle = UtilFunctions.getAngle(center, point);
+        Point2D antPoint = p1;
+        Point2D antInter = null;
+        double an = (Math.PI * 2) / numLines;
+        boolean firstTime = true;
+
+        OrientablePrimitive orientablePrimitive = createOrientablePrimitive();
+
+        for (int i = numLines - 1; i >= 0; i--) {
+            Point2D p2 =
+                UtilFunctions.getPoint(center, (an * i) + initangle, radio);
+            Point2D[] ps1 =
+                UtilFunctions.getPerpendicular(antPoint, center, antPoint);
+            Point2D[] ps2 = UtilFunctions.getPerpendicular(p2, center, p2);
+            Point2D inter =
+                UtilFunctions.getIntersection(ps1[0], ps1[1], ps2[0], ps2[1]);
+
+            if (antInter != null) {
+
+                if (firstTime) {
+                    orientablePrimitive.addMoveToVertex(createPoint(
+                        antInter.getX(), antInter.getY()));
+                    firstTime = false;
+                }
+                orientablePrimitive.addVertex(createPoint(inter.getX(),
+                    inter.getY()));
+            }
+
+            antInter = inter;
+            antPoint = p2;
+        }
+        orientablePrimitive.closePrimitive();
+
+        return orientablePrimitive;
+    }
+
+    /**
+     * Devuelve la geometr�a con el poligono regular inscrito en la
+     * circunferencia.
+     * 
+     * @param point
+     *            Puntero del rat�n.
+     * @param radio
+     *            Radio
+     * 
+     * @return GeometryCollection con las geometr�as del pol�gono.
+     * @throws ValueException
+     */
+    private Geometry getIPolygon(Point2D point, double radio) {
+        Point2D p1 = UtilFunctions.getPoint(center, point, radio);
+        double initangle = UtilFunctions.getAngle(center, point);
+        Point2D antPoint = p1;
+        double an = (Math.PI * 2) / numLines;
+        boolean firstTime = true;
+
+        OrientablePrimitive orientablePrimitive = createOrientablePrimitive();
+
+        for (int i = numLines - 1; i > 0; i--) {
+            Point2D p2 =
+                UtilFunctions.getPoint(center, (an * i) + initangle, radio);
+
+            if (firstTime) {
+                orientablePrimitive.addMoveToVertex(createPoint(
+                    antPoint.getX(), antPoint.getY()));
+                firstTime = false;
+            }
+
+            orientablePrimitive.addVertex(createPoint(p2.getX(), p2.getY()));
+
+            antPoint = p2;
+        }
+        orientablePrimitive.closePrimitive();
+
+        return orientablePrimitive;
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "polygon_");
+    }
+
+    /**
+     * Devuelve la cadena que corresponde al estado en el que nos encontramos.
+     * 
+     * @return Cadena para mostrar por consola.
+     */
+    public String getQuestion() {
+        PolygonCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Polygon.NumberOrCenterPoint")) {
+            return super.getQuestion() + "<" + numLines + ">";
+        }
+        return super.getQuestion();
+
+    }
+
+    public String toString() {
+        return "_polygon";
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolygonCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/LineCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/LineCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/LineCADTool.java	(revision 42196)
@@ -0,0 +1,195 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.LineCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.LineCADToolContext.LineCADToolState;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class LineCADTool extends AbstractCurveCADTool {
+
+    protected LineCADToolContext _fsm;
+    protected Point2D firstPoint;
+    protected Point2D lastPoint;
+    protected double angle;
+    protected double length;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new LineCADToolContext(this);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        LineCADToolState actualState =
+            (LineCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Line.FirstPoint")) {
+            firstPoint = new Point2D.Double(x, y);
+        } else
+            if (status == "Line.SecondPointOrAngle") {
+                lastPoint = new Point2D.Double(x, y);
+
+                GeneralPathX elShape =
+                    new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 2);
+                elShape.moveTo(firstPoint.getX(), firstPoint.getY());
+                elShape.lineTo(lastPoint.getX(), lastPoint.getY());
+                insertAndSelectGeometry(createCurve(elShape));
+                firstPoint = (Point2D) lastPoint.clone();
+            } else
+                if (status == "Line.LenghtOrPoint") {
+                    length = firstPoint.distance(x, y);
+
+                    double w = (Math.cos(Math.toRadians(angle))) * length;
+                    double h = (Math.sin(Math.toRadians(angle))) * length;
+                    lastPoint =
+                        new Point2D.Double(firstPoint.getX() + w,
+                            firstPoint.getY() + h);
+
+                    GeneralPathX elShape =
+                        new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 2);
+                    elShape.moveTo(firstPoint.getX(), firstPoint.getY());
+                    elShape.lineTo(lastPoint.getX(), lastPoint.getY());
+                    insertAndSelectGeometry(createCurve(elShape));
+
+                    firstPoint = (Point2D) lastPoint.clone();
+                }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        LineCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if ((status != "Line.FirstPoint")) { // || (status == "5")) {
+
+            if (firstPoint != null) {
+                renderer.drawLine(firstPoint, new Point2D.Double(x, y),
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        // Nothing to do
+    }
+
+    public void addValue(double d) {
+        LineCADToolState actualState =
+            (LineCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status == "Line.SecondPointOrAngle") {
+            angle = d;
+        } else
+            if (status == "Line.LenghtOrPoint") {
+                length = d;
+
+                double w = Math.cos(Math.toRadians(angle)) * length;
+                double h = Math.sin(Math.toRadians(angle)) * length;
+                lastPoint =
+                    new Point2D.Double(firstPoint.getX() + w, firstPoint.getY()
+                        + h);
+
+                GeneralPathX elShape =
+                    new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 2);
+                elShape.moveTo(firstPoint.getX(), firstPoint.getY());
+                elShape.lineTo(lastPoint.getX(), lastPoint.getY());
+                insertAndSelectGeometry(createCurve(elShape));
+                firstPoint = (Point2D) lastPoint.clone();
+            }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "line_");
+    }
+
+    public String toString() {
+        return "_line";
+    }
+
+    @Override
+    protected int getSupportedPrimitiveGeometryType() {
+        return CURVE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/LineCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/select/SelectRowPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/select/SelectRowPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/select/SelectRowPanel.java	(revision 42196)
@@ -0,0 +1,269 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools.select;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.AbstractTableModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.utils.swing.jtable.JTable;
+/**
+*
+* @author Vicente Caballero Navarro
+*
+*/
+public class SelectRowPanel extends JPanel implements IWindow {
+
+	private static final long serialVersionUID = 1L;
+
+	private JPanel jTablePanel;
+	private JPanel buttonsPanel;
+	private JScrollPane scrollPane;
+	private JButton accept, cancel;
+	private JTable jTable;
+	private MyTableModel tableModel;
+	private MyActionListener action;
+
+	private ArrayList<Feature> features=new ArrayList<Feature>();
+
+	private VectorialLayerEdited vle;
+	private FeatureType featureType;
+
+	public SelectRowPanel(FeatureSet featureSet, VectorialLayerEdited vle) throws ReadException, DataException {
+		super();
+		this.vle = vle;
+		featureType = featureSet.getDefaultFeatureType();
+		DisposableIterator iterator = null;
+		try {
+			iterator = featureSet.iterator();
+			while (iterator.hasNext()) {
+				Feature feature = (Feature) iterator.next();
+				features.add(feature);
+			}
+		} finally {
+			DisposeUtils.dispose(iterator);
+		}
+		action = new MyActionListener();
+		initialize();
+	}
+
+	private void initialize() {
+		Dimension preferred = new Dimension(400, 150);
+		this.setSize(preferred);
+		this.setPreferredSize(preferred);
+		this.setLayout(new BorderLayout());
+		this.add(getScrollPane(), BorderLayout.CENTER);
+		this.add(getButtonsPanel(), BorderLayout.SOUTH);
+	}
+
+	private JPanel getTablePanel() {
+		if (jTablePanel == null) {
+			jTablePanel = new JPanel(new BorderLayout());
+			jTablePanel.setSize(new Dimension(400, 150));
+			jTablePanel.add(getTable().getTableHeader(), BorderLayout.NORTH);
+			jTablePanel.add(getTable(), BorderLayout.CENTER);
+		}
+		return jTablePanel;
+	}
+
+	private JScrollPane getScrollPane() {
+		if (scrollPane == null) {
+			scrollPane = new JScrollPane();
+			scrollPane.setViewportView(getTablePanel());
+		}
+		return scrollPane;
+	}
+
+	private JPanel getButtonsPanel() {
+		if (buttonsPanel == null) {
+			buttonsPanel = new JPanel(new FlowLayout());
+			buttonsPanel.add(getButtonAceptar());
+			buttonsPanel.add(getButtonCancelar());
+		}
+		return buttonsPanel;
+	}
+
+	private JButton getButtonAceptar() {
+		if (accept == null) {
+			accept = new JButton();
+			accept.setText(PluginServices.getText(this, "accept"));
+			accept.addActionListener(action);
+		}
+		return accept;
+	}
+
+	private JButton getButtonCancelar() {
+		if (cancel == null) {
+			cancel = new JButton();
+			cancel.setText(PluginServices.getText(this, "cancel"));
+			cancel.addActionListener(action);
+		}
+		return cancel;
+	}
+
+	@SuppressWarnings("unchecked")
+	private JTable getTable() {
+		if (jTable == null) {
+
+			jTable = new JTable();
+			tableModel = new MyTableModel(features);
+			jTable.setModel(tableModel);
+			jTable.setSelectionBackground(Color.yellow);
+			jTable.setSelectionForeground(Color.blue);
+			jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+			jTable.setCellSelectionEnabled(false);
+			jTable.setRowSelectionAllowed(true);
+			jTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+		}
+		return jTable;
+	}
+
+	/** ******************************************************* */
+	/** ******************** IWindow ************************** */
+	/** ******************************************************* */
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi = new WindowInfo(WindowInfo.MODALDIALOG);
+		wi.setTitle(PluginServices.getText(this, "select_rows"));
+		wi.setWidth(this.getWidth());
+		wi.setHeight(this.getHeight());
+		return wi;
+	}
+
+	/** ******************************************************* */
+	/** ***************** ActionListener ********************** */
+	/** ******************************************************* */
+	private class MyActionListener implements ActionListener {
+
+		public void actionPerformed(ActionEvent e) {
+			FeatureSelection rowSelecteds;
+			try {
+
+			if (e.getSource().equals(accept)) {
+			    rowSelecteds = vle.getFeatureStore().getFeatureSelection();
+			    rowSelecteds.deselectAll();
+				int[] index = jTable.getSelectedRows();
+				if (index.length > 0) {
+					for (int i = 0; i < index.length; i++) {
+						Feature sl = features.get(index[i]);
+						rowSelecteds.select(sl);
+					}
+//					vle.getFeatureStore().setSelection(rowSelecteds);
+					PluginServices.getMDIManager().closeWindow(
+							SelectRowPanel.this);
+				} else {
+					JOptionPane.showMessageDialog(null, PluginServices.getText(
+							this, "select_one_row"), PluginServices.getText(
+							this, "attention"), JOptionPane.WARNING_MESSAGE);
+				}
+			}
+			} catch (ReadException e1) {
+				e1.printStackTrace();
+			} catch (DataException e1) {
+				e1.printStackTrace();
+			}
+			if (e.getSource().equals(cancel)) {
+				PluginServices.getMDIManager().closeWindow(SelectRowPanel.this);
+			}
+		}
+	}
+
+	/** ******************************************************* */
+	/** ******************* TableModel ************************ */
+	/** ******************************************************* */
+	private class MyTableModel extends AbstractTableModel {
+
+		private static final long serialVersionUID = 1L;
+
+		private ArrayList<Feature> features;
+
+		public void setSelectedSymbols(ArrayList<Feature> rs) {
+			features = rs;
+			fireTableDataChanged();
+		}
+
+		public MyTableModel(ArrayList<Feature> rs) {
+			features = rs;
+		}
+
+		public ArrayList<Feature> getSymbolsList() {
+			return features;
+		}
+
+		public int getRowCount() {
+			return features.size();
+		}
+
+		public int getColumnCount() {
+			return featureType.size();
+		}
+
+		public boolean isCellEditable(int rowIndex, int columnIndex) {
+			return false;
+		}
+
+		public Object getValueAt(int rowIndex, int columnIndex) {
+			Feature r = (Feature) features.get(rowIndex);
+			String s = r.get(columnIndex).toString();
+			return s;
+		}
+
+		@SuppressWarnings("unchecked")
+		public Class getColumnClass(int columnIndex) {
+			return String.class;
+		}
+
+		public String getColumnName(int columnIndex) {
+			return featureType.getAttributeDescriptor(columnIndex).getName();
+		}
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/select/SelectRowPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SymmetryCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SymmetryCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SymmetryCADTool.java	(revision 42196)
@@ -0,0 +1,399 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.SymmetryCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.SymmetryCADToolContext.SymmetryCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.Handler;
+//import org.gvsig.fmap.geom.operation.perpendicular.Perpendicular;
+//import org.gvsig.fmap.geom.operation.perpendicular.PerpendicularOperationContext;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Herramienta para crear una geometr�a sim�trica a otra, con la posibilidad de
+ * borrar la original.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class SymmetryCADTool extends DefaultCADTool {
+
+    protected SymmetryCADToolContext _fsm;
+    protected Point2D firstPoint;
+    protected Point2D secondPoint;
+
+    /**
+     * M�todo de inicio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new SymmetryCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        // if (!super.changeCommand(s)) {
+        _fsm.addOption(s);
+        // }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_symmetry");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        SymmetryCADToolState actualState =
+            (SymmetryCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("Symmetry.FirstPoint")) {
+            firstPoint = new Point2D.Double(x, y);
+        } else
+            if (status.equals("Symmetry.SecondPoint")) {
+                secondPoint = new Point2D.Double(x, y);
+            }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        SymmetryCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Symmetry.SecondPoint")) {
+            Point2D pAux = new Point2D.Double(x, y);
+            drawSymmetry(renderer, pAux);
+        } else
+            if (status.equals("Symmetry.CutOrCopy")) {
+                drawSymmetry(renderer, secondPoint);
+            }
+    }
+
+    private void drawSymmetry(MapControlDrawer renderer, Point2D pAux) {
+
+        VectorialLayerEdited vle = getVLE();
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) vle.getFeatureStore().getSelection();
+        } catch (ReadException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        ViewPort vp = vle.getLayer().getMapContext().getViewPort();
+
+        GeneralPathX gpx = new GeneralPathX();
+        gpx.moveTo(firstPoint.getX(), firstPoint.getY());
+        gpx.lineTo(pAux.getX(), pAux.getY());
+
+        renderer.draw(createCurve(gpx),
+            mapControlManager.getAxisReferenceSymbol());
+
+        DisposableIterator iterator = null;
+        try {
+            iterator = selection.iterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+
+                // }
+                // for (int i = 0; i < selectedRow.size(); i++) {
+                // DefaultRowEdited row=(DefaultRowEdited) selectedRow.get(i);
+                // DefaultFeature fea = (DefaultFeature) row.getLinkedRow();
+
+                Geometry geom = (feature.getDefaultGeometry()).cloneGeometry();
+                Handler[] handlers = geom.getHandlers(Geometry.SELECTHANDLER);
+
+                for (int j = 0; j < handlers.length; j++) {
+                    Handler h = handlers[j];
+                    Point2D p = h.getPoint();
+                    Point2D[] ps =
+                        UtilFunctions.getPerpendicular(firstPoint, pAux, p);
+                    Point2D inter =
+                        UtilFunctions.getIntersection(ps[0], ps[1], firstPoint,
+                            pAux);
+                    if (inter != null) {
+                        Point2D dif =
+                            new Point2D.Double(inter.getX() - p.getX(),
+                                inter.getY() - p.getY());
+                        h.set(inter.getX() + dif.getX(),
+                            inter.getY() + dif.getY());
+                    }
+                }
+                renderer.draw(geom, mapControlManager.getAxisReferenceSymbol());
+            }
+        } catch (DataException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        
+        if (s.equals(Messages.getText("cancel"))) {
+            refresh();
+            /*
+             * Nothing to do
+             */
+            return;
+        }
+        
+        SymmetryCADToolState actualState =
+            (SymmetryCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        FeatureSelection selection = null;
+        try {
+            featureStore = vle.getFeatureStore();
+            selection = featureStore.getFeatureSelection();
+        } catch (DataException e1) {
+            NotificationManager.addError(e1.getMessage(), e1);
+            return;
+        }
+        // ArrayList selectedRowAux=new ArrayList();
+        // VectorialEditableAdapter vea = vle.getVEA();
+        if (status.equals("Symmetry.CutOrCopy")) {
+            PluginServices.getMDIManager().setWaitCursor();
+            DisposableIterator iterator = null;
+            try {
+                featureStore.beginEditingGroup(getName());
+                // If not moved, deselect the previous features to select the new ones
+                try {
+                	FeatureSelection newSelection =
+                            featureStore.createFeatureSelection();
+                    iterator = selection.iterator();
+                    while (iterator.hasNext()) {
+                        Feature feature = (Feature) iterator.next();
+
+                        Geometry geom =
+                            feature.getDefaultGeometry().cloneGeometry();
+                        Handler[] handlers =
+                            geom.getHandlers(Geometry.SELECTHANDLER);
+
+                        for (int j = 0; j < handlers.length; j++) {
+                            Handler h = handlers[j];
+                            Point2D p = h.getPoint();
+                            Point2D[] ps = getPerpendicularLine(
+                                firstPoint, secondPoint, p);
+                            Point2D inter =
+                                UtilFunctions.getIntersection(ps[0], ps[1],
+                                    firstPoint, secondPoint);
+                            Point2D dif =
+                                new Point2D.Double(inter.getX() - p.getX(),
+                                    inter.getY() - p.getY());
+                            h.set(inter.getX() + dif.getX(),
+                                inter.getY() + dif.getY());
+                        }
+                        
+                        // geom.invokeOperation(index, ctx)
+
+                        String yes_low_case =
+                            Messages.getText("SymmetryCADTool.yes").toLowerCase();
+                        String yes_up_case = yes_low_case.toUpperCase(); 
+
+                        if (s.equals(PluginServices.getText(this, "cut"))
+                            || s.equals(yes_low_case) || s.equals(yes_up_case)) {
+                        	super.updateGeometry(featureStore, feature, geom);
+//                            EditableFeature eFeature = feature.getEditable();
+//                            eFeature.setGeometry(featureStore
+//                                .getDefaultFeatureType()
+//                                .getDefaultGeometryAttributeName(), geom);
+//                            featureStore.update(eFeature);
+                            newSelection.select(feature);
+                        } else {
+                            Feature newFeature = insertGeometry(geom);
+                            newSelection.select(newFeature);
+                        }
+                        refresh();
+
+                    }
+                    featureStore.setSelection(newSelection);
+                } finally {
+                    featureStore.endEditingGroup();
+                }
+            } catch (DataException e) {
+                NotificationManager.addError(e.getMessage(), e);
+            } finally {
+                if (iterator != null) {
+                    iterator.dispose();
+                }
+                PluginServices.getMDIManager().restoreCursor();
+            }
+
+        }
+    }
+
+    public void addValue(double d) {
+
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "symmetry_");
+    }
+
+    public String toString() {
+        return "_symmetry";
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+    
+    private Point2D[] getPerpendicularLine(
+        Point2D p1, Point2D p2, Point2D pp) throws CreateGeometryException {
+        
+        try {
+            Point g_p1 = geomManager.createPoint(
+                p1.getX(), p1.getY(), Geometry.SUBTYPES.GEOM2D); 
+            Point g_p2 = geomManager.createPoint(
+                p2.getX(), p2.getY(), Geometry.SUBTYPES.GEOM2D); 
+            Point g_pp = geomManager.createPoint(
+                pp.getX(), pp.getY(), Geometry.SUBTYPES.GEOM2D); 
+            
+            Point[] res = UtilFunctions.perpendicular(g_p1, g_p2, g_pp);
+
+            Point2D[] resp = new Point2D[2];
+            resp[0] = new Point2D.Double(res[0].getX(), res[0].getY());
+            resp[1] = new Point2D.Double(res[1].getX(), res[1].getY());
+            return resp;
+            
+        } catch (Exception ex) {
+            throw new CreateGeometryException(
+                Geometry.TYPES.POINT,
+                Geometry.SUBTYPES.GEOM2D,
+                ex);
+        }
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SymmetryCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplineCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplineCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplineCADTool.java	(revision 42196)
@@ -0,0 +1,208 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.SplineCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.SplineCADToolContext.SplineCADToolState;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * CADTool Spline
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class SplineCADTool extends AbstractCurveCADTool {
+
+    protected SplineCADToolContext _fsm;
+    protected ArrayList list = new ArrayList();
+    protected boolean close = false;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new SplineCADToolContext(this);
+    }
+
+    public void endGeometry() {
+        try {
+            int geometryType = ((FLyrVect) getVLE().getLayer()).getShapeType();
+            if (((geometryType == Geometry.TYPES.SURFACE) || (geometryType == Geometry.TYPES.MULTISURFACE))
+                && !close) {
+                closeGeometry();
+            }
+        } catch (ReadException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        }
+
+        // No queremos guardar FGeometryCollections:
+        Geometry newGeom =
+            createSpline((Point2D[]) list.toArray(new Point2D[0]));
+        insertAndSelectGeometry(newGeom);
+        _fsm = new SplineCADToolContext(this);
+        list.clear();
+        clearTemporalCache();
+        close = false;
+    }
+
+    public void closeGeometry() {
+        close = true;
+        Point2D endPoint =
+            new Point2D.Double(((Point2D) list.get(0)).getX(),
+                ((Point2D) list.get(0)).getY());
+        list.add(endPoint);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        SplineCADToolState actualState =
+            (SplineCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("Spline.NextPoint")
+            || status.equals("Spline.FirstPoint")) {
+            list.add(new Point2D.Double(x, y));
+            Geometry spline =
+                createSpline((Point2D[]) list.toArray(new Point2D[0]));
+            
+            if (spline != null) {
+                addTemporalCache(spline);
+            }
+        }
+    }
+
+    /**
+     * M�todo para dibujar lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        SplineCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+        if (status.equals("Spline.NextPoint")
+            || status.equals("Spline.FirstPoint")) {
+            // ArrayList points=new ArrayList();
+            Point2D[] points = new Point2D[list.size() + 1];
+            Point2D[] auxPoints = (Point2D[]) list.toArray(new Point2D[0]);
+            for (int i = 0; i < auxPoints.length; i++) {
+                points[i] = (Point2D) auxPoints[i].clone();
+            }
+            points[points.length - 1] = new Point2D.Double(x, y);
+            Geometry spline = createSpline(points);
+            ViewPort vp = getCadToolAdapter().getMapControl().getViewPort();
+
+            renderer.draw(spline, mapControlManager.getSelectionSymbol());
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    public void cancel() {
+        list.clear();
+        clearTemporalCache();
+        close = false;
+    }
+
+    public void end() {
+        // Nothing to do
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "Spline_");
+    }
+
+    public String toString() {
+        return "_Spline";
+    }
+
+    public void endTransition(double x, double y, MouseEvent event) {
+        _fsm.endPoint(x, y, event);
+    }
+
+    @Override
+    protected int getSupportedPrimitiveGeometryType() {
+        return SPLINE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplineCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolylineCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolylineCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolylineCADTool.java	(revision 42196)
@@ -0,0 +1,676 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.PolylineCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.PolylineCADToolContext.PolylineCADToolState;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class PolylineCADTool extends AbstractCurveSurfaceCADTool {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PolylineCADTool.class);
+
+    protected PolylineCADToolContext _fsm;
+    protected Point2D firstPoint;
+    protected Point2D antPoint;
+    protected Point2D antantPoint;
+    protected Point2D antCenter;
+    protected Point2D antInter;
+    protected List<Curve> list = new ArrayList<Curve>();
+    protected boolean close = false;
+    protected GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new PolylineCADToolContext(this);
+    }
+
+    public Geometry getGeometry() {
+        Geometry newGeom = null;
+        newGeom = concatenateCurves(list, false);
+        return newGeom;
+    }
+
+
+
+    public int getLinesCount() {
+        return list.size();
+    }
+
+    public boolean isPolygonLayer() {
+        try {
+            return (((FLyrVect) getVLE().getLayer()).getShapeType() == Geometry.TYPES.SURFACE);
+        } catch (ReadException e) {
+            return false;
+        }
+    }
+
+    public void endGeometry() {
+        
+        /*
+        if (gpx == null) {
+            gpx = new GeneralPathX();
+            Geometry[] geoms = (Geometry[]) list.toArray(new Geometry[0]);
+            MultiPrimitive fgc = createMultiPrimitive(geoms);
+            // No queremos guardar FGeometryCollections:
+            gpx.append(fgc.getPathIterator(null, geomManager.getFlatness()),
+                true);
+        }
+        
+        try {
+            if (((FLyrVect) getVLE().getLayer()).getShapeType() == Geometry.TYPES.SURFACE
+                && !close) {
+                closeGeometry();
+            }
+        } catch (ReadException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        }
+        */
+        
+
+        Geometry newGeom = null;
+        int type = getCadToolAdapter().getActiveLayerType();
+        
+        if ((type == Geometry.TYPES.SURFACE)
+            || (type == Geometry.TYPES.MULTISURFACE)) {
+            
+            newGeom = concatenateCurves(list, true);
+            closeSurfaceIfNecessary((Surface) newGeom);
+            // newGeom = createSurface(gpx);
+        } else {
+            newGeom = concatenateCurves(list, false);
+            // newGeom = createCurve(gpx);
+        }
+        insertAndSelectGeometry(newGeom);
+        _fsm = new PolylineCADToolContext(this);
+        list.clear();
+        clearTemporalCache();
+        close = false;
+        antantPoint = antCenter = antInter = antPoint = firstPoint = null;
+    }
+
+    /**
+     * @param newGeom
+     */
+    private void closeSurfaceIfNecessary(Surface geo) {
+        
+        if (!close && geo != null && geo.getNumVertices() > 1) {
+            Point firstp = geo.getVertex(0);
+            firstp = (Point) firstp.cloneGeometry();
+            geo.addVertex(firstp);
+        }
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void closeGeometry() {
+        
+        int ng = list.size();
+        if (ng > 0) {
+            Curve firstcurve = list.get(0);
+            Curve lastcurve = list.get(ng - 1);
+            Point firstp = firstcurve.getVertex(0);
+            firstp = (Point) firstp.cloneGeometry();
+            lastcurve.addVertex(firstp);
+        }
+        close = true;
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        PolylineCADToolState actualState =
+            (PolylineCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("Polyline.NextPointOrArcOrClose")
+            || status.equals("Polyline.FirstPoint")) {
+
+            if (firstPoint == null) {
+                firstPoint = new Point2D.Double(x, y);
+            }
+            Point2D point = new Point2D.Double(x, y);
+
+            if (antPoint != null
+                && (antPoint.getX() != point.getX() || antPoint.getY() != point
+                    .getY())) {
+                GeneralPathX elShape =
+                    new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 2);
+                elShape.moveTo(antPoint.getX(), antPoint.getY());
+                elShape.lineTo(point.getX(), point.getY());
+                Curve geom = createCurve(elShape);
+                if (geom != null) {
+                    list.add(geom);
+                    addTemporalCache(geom);
+                }
+            }
+            if (antPoint == null)
+                antPoint = (Point2D) firstPoint.clone();
+
+            if (antPoint != null) {
+                antantPoint = antPoint;
+            }
+
+            antPoint = point;
+        } else
+            if (status.equals("Polyline.NextPointOrLineOrClose")) {
+                Point2D point = new Point2D.Double(x, y);
+                Point2D lastp = antPoint; // (Point2D)points.get(i-1);
+
+                if (antantPoint == null) {
+                    antantPoint =
+                        new Point2D.Double(lastp.getX() + (point.getX() / 2),
+                            lastp.getY() + (point.getY() / 2));
+                }
+
+                if (((point.getY() == lastp.getY()) && (point.getX() < lastp
+                    .getX()))
+                    || ((point.getX() == lastp.getX()) && (point.getY() < lastp
+                        .getY()))) {
+                } else {
+                    if (point.getX() == lastp.getX()) {
+                        point =
+                            new Point2D.Double(point.getX() + 0.00000001,
+                                point.getY());
+                    } else
+                        if (point.getY() == lastp.getY()) {
+                            point =
+                                new Point2D.Double(point.getX(),
+                                    point.getY() + 0.00000001);
+                        }
+
+                    if (point.getX() == antantPoint.getX()) {
+                        point =
+                            new Point2D.Double(point.getX() + 0.00000001,
+                                point.getY());
+                    } else
+                        if (point.getY() == antantPoint.getY()) {
+                            point =
+                                new Point2D.Double(point.getX(),
+                                    point.getY() + 0.00000001);
+                        }
+
+                    if (!(list.size() > 0)
+                        || (((Geometry) list.get(list.size() - 1)).getType() == Geometry.TYPES.CURVE)) {
+                        Point2D[] ps1 =
+                            UtilFunctions.getPerpendicular(antantPoint, lastp,
+                                lastp);
+                        Point2D mediop =
+                            new Point2D.Double(
+                                (point.getX() + lastp.getX()) / 2,
+                                (point.getY() + lastp.getY()) / 2);
+                        Point2D[] ps2 =
+                            UtilFunctions
+                                .getPerpendicular(lastp, point, mediop);
+                        Point2D interp =
+                            UtilFunctions.getIntersection(ps1[0], ps1[1],
+                                ps2[0], ps2[1]);
+                        antInter = interp;
+
+                        double radio = interp.distance(lastp);
+
+                        if (UtilFunctions.isLowAngle(antantPoint, lastp,
+                            interp, point)) {
+                            radio = -radio;
+                        }
+
+                        Point2D centerp =
+                            UtilFunctions.getPoint(interp, mediop, radio);
+                        antCenter = centerp;
+
+                        Curve ig = createArc(lastp, centerp, point);
+
+                        if (ig != null) {
+                            list.add(ig);
+                            addTemporalCache(ig);
+                        } else {
+                            
+                            ApplicationLocator.getManager().message(
+                                Messages.getText("_Unable_to_create_arc"),
+                                JOptionPane.ERROR_MESSAGE);
+
+                        }
+                    } else {
+                        Point2D[] ps1 =
+                            UtilFunctions.getPerpendicular(lastp, antInter,
+                                lastp);
+                        double a1 = UtilFunctions.getAngle(ps1[0], ps1[1]);
+                        double a2 = UtilFunctions.getAngle(ps1[1], ps1[0]);
+                        double angle = UtilFunctions.getAngle(antCenter, lastp);
+                        Point2D ini1 = null;
+                        Point2D ini2 = null;
+
+                        if (UtilFunctions.absoluteAngleDistance(angle, a1) > UtilFunctions
+                            .absoluteAngleDistance(angle, a2)) {
+                            ini1 = ps1[0];
+                            ini2 = ps1[1];
+                        } else {
+                            ini1 = ps1[1];
+                            ini2 = ps1[0];
+                        }
+
+                        Point2D unit = UtilFunctions.getUnitVector(ini1, ini2);
+                        Point2D correct =
+                            new Point2D.Double(lastp.getX() + unit.getX(),
+                                lastp.getY() + unit.getY());
+                        Point2D[] ps =
+                            UtilFunctions.getPerpendicular(lastp, correct,
+                                lastp);
+                        Point2D mediop =
+                            new Point2D.Double(
+                                (point.getX() + lastp.getX()) / 2,
+                                (point.getY() + lastp.getY()) / 2);
+                        Point2D[] ps2 =
+                            UtilFunctions
+                                .getPerpendicular(lastp, point, mediop);
+                        Point2D interp =
+                            UtilFunctions.getIntersection(ps[0], ps[1], ps2[0],
+                                ps2[1]);
+                        antInter = interp;
+
+                        double radio = interp.distance(lastp);
+
+                        if (UtilFunctions.isLowAngle(correct, lastp, interp,
+                            point)) {
+                            radio = -radio;
+                        }
+
+                        Point2D centerp =
+                            UtilFunctions.getPoint(interp, mediop, radio);
+                        antCenter = centerp;
+                        Curve geom = createArc(lastp, centerp, point);
+                        
+                        if (geom != null) {
+                            list.add(geom);
+                            addTemporalCache(geom);
+                        }
+                    }
+
+                    antantPoint = antPoint;
+                    antPoint = point;
+                }
+            }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        PolylineCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Polyline.NextPointOrArcOrClose")
+            || status.equals("Polyline.FirstPoint")) {
+            for (int i = 0; i < list.size(); i++) {
+                renderer.draw((Geometry) list.get(i),
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+            if (antPoint != null)
+                renderer.drawLine(antPoint, new Point2D.Double(x, y),
+                    mapControlManager.getGeometrySelectionSymbol());
+
+        } else
+            if ((status.equals("Polyline.NextPointOrLineOrClose"))) {
+                for (int i = 0; i < list.size(); i++) {
+                    renderer.draw((Geometry) list.get(i),
+                        mapControlManager.getGeometrySelectionSymbol());
+                }
+
+                Point2D point = new Point2D.Double(x, y);
+                Point2D lastp = antPoint;
+
+                if (!(list.size() > 0)
+                    || (((Geometry) list.get(list.size() - 1)).getType() == Geometry.TYPES.CURVE)) {
+                    if (antantPoint == null) {
+                        drawArc(point, lastp, new Point2D.Double(lastp.getX()
+                            + (point.getX() / 2), lastp.getY()
+                            + (point.getY() / 2)), renderer);
+                    } else {
+                        drawArc(point, lastp, antantPoint, renderer);
+                    }
+                } else {
+                    if (antInter != null) {
+                        Point2D[] ps1 =
+                            UtilFunctions.getPerpendicular(lastp, antInter,
+                                lastp);
+                        double a1 = UtilFunctions.getAngle(ps1[0], ps1[1]);
+                        double a2 = UtilFunctions.getAngle(ps1[1], ps1[0]);
+                        double angle = UtilFunctions.getAngle(antCenter, lastp);
+                        Point2D ini1 = null;
+                        Point2D ini2 = null;
+
+                        if (UtilFunctions.absoluteAngleDistance(angle, a1) > UtilFunctions
+                            .absoluteAngleDistance(angle, a2)) {
+                            ini1 = ps1[0];
+                            ini2 = ps1[1];
+                        } else {
+                            ini1 = ps1[1];
+                            ini2 = ps1[0];
+                        }
+
+                        Point2D unit = UtilFunctions.getUnitVector(ini1, ini2);
+                        Point2D correct =
+                            new Point2D.Double(lastp.getX() + unit.getX(),
+                                lastp.getY() + unit.getY());
+                        drawArc(point, lastp, correct, renderer);
+                    }
+                }
+            }
+        try {
+            if (((FLyrVect) getVLE().getLayer()).getShapeType() == Geometry.TYPES.SURFACE
+                && !list.isEmpty()) {
+                Handler handler1 =
+                    ((Geometry) list.get(0))
+                        .getHandlers(Geometry.SELECTHANDLER)[0];
+                GeneralPathX gpx = new GeneralPathX();
+                gpx.moveTo(x, y);
+                Point2D p1 = handler1.getPoint();
+                gpx.lineTo(p1.getX(), p1.getY());
+                Curve curve = createCurve(gpx);
+                renderer.draw(curve,
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+        } catch (ReadException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Dibuja el arco sobre el graphics.
+     * 
+     * @param point
+     *            Puntero del rat�n.
+     * @param lastp
+     *            �ltimo punto de la polilinea.
+     * @param antp
+     *            Punto antepenultimo.
+     * @param g
+     *            Graphics sobre el que se dibuja.
+     */
+    private void drawArc(Point2D point, Point2D lastp, Point2D antp,
+        MapControlDrawer renderer) {
+        if (((point.getY() == lastp.getY()) && (point.getX() < lastp.getX()))
+            || ((point.getX() == lastp.getX()) && (point.getY() < lastp.getY()))) {
+        } else {
+            if (point.getX() == lastp.getX()) {
+                point =
+                    new Point2D.Double(point.getX() + 0.00000001, point.getY());
+            } else
+                if (point.getY() == lastp.getY()) {
+                    point =
+                        new Point2D.Double(point.getX(),
+                            point.getY() + 0.00000001);
+                }
+
+            if (point.getX() == antp.getX()) {
+                point =
+                    new Point2D.Double(point.getX() + 0.00000001, point.getY());
+            } else
+                if (point.getY() == antp.getY()) {
+                    point =
+                        new Point2D.Double(point.getX(),
+                            point.getY() + 0.00000001);
+                }
+
+            Point2D[] ps1 = UtilFunctions.getPerpendicular(lastp, antp, lastp);
+            Point2D mediop =
+                new Point2D.Double((point.getX() + lastp.getX()) / 2,
+                    (point.getY() + lastp.getY()) / 2);
+            Point2D[] ps2 =
+                UtilFunctions.getPerpendicular(lastp, point, mediop);
+            Point2D interp =
+                UtilFunctions.getIntersection(ps1[0], ps1[1], ps2[0], ps2[1]);
+
+            double radio = interp.distance(lastp);
+
+            if (UtilFunctions.isLowAngle(antp, lastp, interp, point)) {
+                radio = -radio;
+            }
+
+            Point2D centerp = UtilFunctions.getPoint(interp, mediop, radio);
+            renderer.drawLine(lastp, point,
+                mapControlManager.getGeometrySelectionSymbol());
+
+            Geometry ig = createArc(lastp, centerp, point);
+
+            if (ig != null) {
+                renderer.draw(ig,
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        // Nothing to do
+    }
+
+    public void addValue(double d) {
+        // Nothing to do
+    }
+
+    public void cancel() {
+        list.clear();
+        clearTemporalCache();
+        antantPoint = antCenter = antInter = antPoint = firstPoint = null;
+    }
+
+    public void end() {
+        // Nothing to do
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "polyline_");
+    }
+
+    public String toString() {
+        return "_polyline";
+    }
+
+    public void endTransition(double x, double y, MouseEvent event) {
+        _fsm.endPoint(x, y, event);
+    }
+    
+    private Point create3DPoint(Point p) {
+    	try {
+			return geomManager.createPoint(p.getX(), p.getY(), Geometry.SUBTYPES.GEOM3D);
+		} catch (CreateGeometryException e) {
+			return p;
+		}
+    }
+    
+    /**
+     * @param geoms
+     * @return
+     * @throws CreateGeometryException 
+     */
+    private Geometry concatenateCurves(List<Curve> cus, boolean surf) {
+        
+        Curve _curv = null;
+        Surface _surf = null;
+        int subtype = cus.size() > 0 && cus.get(0) != null ? cus.get(0).getGeometryType().getSubType() : Geometry.SUBTYPES.GEOM2D;
+		boolean is3D = subtype == 1 || subtype == 3;
+        
+        try {
+            if (surf) {
+                _surf = (Surface) geomManager.create(Geometry.TYPES.SURFACE, subtype);
+            } else {
+                _curv = (Curve) geomManager.create(Geometry.TYPES.CURVE, subtype);
+            }
+        } catch (CreateGeometryException e) {
+            LOG.info("Unable to create geometry: " + e.getMessage());
+            ApplicationLocator.getManager().message(
+                Messages.getText("_Unable_to_create_geometry"),
+                JOptionPane.ERROR_MESSAGE);
+            return null;
+        }
+        
+        
+        if (cus == null || cus.size() == 0) {
+            if (surf) {
+                return _surf;
+            } else {
+                return _curv;
+            }
+        }
+        
+        Curve item_cu = cus.get(0);
+        int len = item_cu.getNumVertices();
+        Point po = null;
+        /*
+         * All from first curve
+         */
+        for (int i = 0; i < len; i++) {
+        	po = item_cu.getVertex(i);
+        	if(is3D) {
+        		po = create3DPoint(po);
+        	} 
+        	if (surf) {
+        		_surf.addVertex(po);
+        	} else {
+        		_curv.addVertex(po);
+        	}
+
+        }
+        
+        for (int n = 1; n < cus.size(); n++) {
+            
+            item_cu = cus.get(n);
+            len = item_cu.getNumVertices();
+            for (int i = 0; i < len; i++) {
+                po = item_cu.getVertex(i);
+                if(is3D) {
+            		po = create3DPoint(po);
+            	} 
+                
+                /*
+                 * Add only if not same coords
+                 */
+                if (surf) {
+                    if (differentCoordinates(po,
+                        _surf.getVertex(
+                        _surf.getNumVertices()-1))) {
+                        _surf.addVertex(po);
+                    }
+                } else {
+                    if (differentCoordinates(po,
+                        _curv.getVertex(
+                        _curv.getNumVertices()-1))) {
+                        _curv.addVertex(po);
+                    }
+                }
+            }
+        }
+        
+        if (surf) {
+            return _surf;
+        } else {
+            return _curv;
+        }
+        
+    }
+
+    /**
+     * @param po
+     * @param vertex
+     * @return
+     */
+    private boolean differentCoordinates(Point p1, Point p2) {
+        return !p1.equals(p2);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PolylineCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EllipseCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EllipseCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EllipseCADTool.java	(revision 42196)
@@ -0,0 +1,197 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.EllipseCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.EllipseCADToolContext.EllipseCADToolState;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class EllipseCADTool extends AbstractSurfaceCADTool {
+
+    protected EllipseCADToolContext _fsm;
+    protected Point2D startAxis;
+    protected Point2D endAxis;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new EllipseCADToolContext(this);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        EllipseCADToolState actualState =
+            (EllipseCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Ellipse.FirstPointAxis")) {
+            startAxis = new Point2D.Double(x, y);
+        } else
+            if (status.equals("Ellipse.SecondPointAxis")) {
+                endAxis = new Point2D.Double(x, y);
+            } else
+                if (status.equals("Ellipse.DistanceOtherAxis")) {
+                    Point2D middle =
+                        new Point2D.Double(
+                            (startAxis.getX() + endAxis.getX()) / 2,
+                            (startAxis.getY() + endAxis.getY()) / 2);
+                    Point2D third = new Point2D.Double(x, y);
+                    double distance = middle.distance(third);
+                    insertAndSelectGeometry(createEllipse(startAxis, endAxis,
+                        distance));
+                }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        EllipseCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Ellipse.SecondPointAxis")) {
+            renderer.drawLine(startAxis, new Point2D.Double(x, y),
+                mapControlManager.getGeometrySelectionSymbol());
+        } else
+            if (status.equals("Ellipse.DistanceOtherAxis")) {
+                Point2D middle =
+                    new Point2D.Double((startAxis.getX() + endAxis.getX()) / 2,
+                        (startAxis.getY() + endAxis.getY()) / 2);
+
+                Point2D third = new Point2D.Double(x, y);
+
+                double distance = middle.distance(third);
+                Ellipse ellipse = createEllipse(startAxis, endAxis, distance);
+                
+                Geometry help_geom_perim = null;
+                try {
+                    help_geom_perim = GeometryLocator.
+                        getGeometryManager().createCurve(
+                            ellipse.getGeneralPath(),
+                            Geometry.SUBTYPES.GEOM2D);
+                    renderer.draw(help_geom_perim,
+                        mapControlManager.getAxisReferenceSymbol());
+                } catch (Exception e) {
+                    ApplicationLocator.getManager().message(
+                        Messages.getText("_Unable_to_draw_help_geometry"),
+                        JOptionPane.ERROR_MESSAGE);
+                }  
+
+                Point2D mediop =
+                    new Point2D.Double((startAxis.getX() + endAxis.getX()) / 2,
+                        (startAxis.getY() + endAxis.getY()) / 2);
+                renderer.drawLine(mediop, third,
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        // TODO Auto-generated method stub
+    }
+
+    public void addValue(double d) {
+        EllipseCADToolState actualState =
+            (EllipseCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Ellipse.DistanceOtherAxis")) {
+            double distance = d;
+            insertAndSelectGeometry(createEllipse(startAxis, endAxis, distance));
+        }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "ellipse_");
+    }
+
+    public String toString() {
+        return "_ellipse";
+    }
+
+    @Override
+    protected int getSupportedPrimitiveGeometryType() {
+        return ELLIPSE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EllipseCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AutoCompletePolygon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AutoCompletePolygon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AutoCompletePolygon.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AutoCompletePolygon extends PolylineCADTool {
+
+	private static Logger logger =
+			LoggerFactory.getLogger(AutoCompletePolygon.class);
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     *
+     * @param g Graphics sobre el que dibujar.
+     * @param selectedGeometries BitSet con las geometr�as seleccionadas.
+     * @param x par�metro x del punto que se pase para dibujar.
+     * @param y par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        Geometry geom = getGeometry();
+        if (geom.getHandlers(Geometry.SELECTHANDLER).length == 0
+            && firstPoint != null) {
+            GeneralPathX gpx = new GeneralPathX();
+            gpx.moveTo(firstPoint.getX(), firstPoint.getY());
+            gpx.lineTo(x, y);
+            renderer.draw(createCurve(gpx),
+                mapControlManager.getGeometrySelectionSymbol());
+        } else
+            if (geom.getHandlers(Geometry.SELECTHANDLER).length > 1) {
+                GeneralPathX gpxGeom = new GeneralPathX();
+                gpxGeom
+                    .append(
+                        geom.getPathIterator(null, geomManager.getFlatness()),
+                        true);
+                gpxGeom.lineTo(x, y);
+                gpxGeom.closePath();
+                renderer.draw(createCurve(gpxGeom),
+                    mapControlManager.getGeometrySelectionSymbol());
+            }
+    }
+
+    private Geometry autoComplete(Geometry digitizedGeom)
+        throws CreateGeometryException {
+        FeatureSet selected = null;
+        DisposableIterator iterator = null;
+        try {
+            FLyrVect lyrVect = (FLyrVect) getVLE().getLayer();
+            // Se supone que debe ser r�pido, ya que est� indexado
+
+            selected =
+                lyrVect.queryByGeometry(digitizedGeom, lyrVect
+                    .getFeatureStore().getDefaultFeatureType());
+            iterator = selected.fastIterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Geometry aux = feature.getDefaultGeometry();
+                digitizedGeom = digitizedGeom.difference(aux);
+            }
+        } catch (Exception e) {
+        	
+        	throw new CreateGeometryException(
+        			digitizedGeom.getGeometryType().getType(),
+        			digitizedGeom.getGeometryType().getSubType(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+            if (selected != null) {
+                selected.dispose();
+            }
+        }
+
+        return digitizedGeom;
+    }
+    
+    public Feature insertGeometry(Geometry geometry) {
+        Geometry newGeom;
+        try {
+            newGeom = autoComplete(geometry);
+            return super.insertGeometry(newGeom);
+        } catch (CreateGeometryException e) {
+            logger.info("Error in autocomplete polygon.", e);
+        	JOptionPane.showMessageDialog(
+        			ApplicationLocator.getManager().getRootComponent(),
+        			Messages.getText(
+        					"_Unable_to_complete_operation_Probably_invalid_polygon"),
+        			Messages.getText("autocomplete-polygon"),
+        			JOptionPane.ERROR_MESSAGE);
+        }
+        return null;
+    }
+
+    public Feature insertAndSelectGeometry(Geometry geometry) {
+        Geometry newGeom;
+        try {
+            newGeom = autoComplete(geometry);
+            return super.insertAndSelectGeometry(newGeom);
+        } catch (CreateGeometryException e) {
+        	
+            logger.info("Error in autocomplete polygon.", e);
+        	JOptionPane.showMessageDialog(
+        			ApplicationLocator.getManager().getRootComponent(),
+        			Messages.getText(
+        					"_Unable_to_complete_operation_Probably_invalid_polygon"),
+        			Messages.getText("autocomplete-polygon"),
+        			JOptionPane.ERROR_MESSAGE);
+        	
+        }
+        return null;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AutoCompletePolygon.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ArcCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ArcCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ArcCADTool.java	(revision 42196)
@@ -0,0 +1,184 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.ArcCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.ArcCADToolContext.ArcCADToolState;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+
+/**
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class ArcCADTool extends AbstractCurveCADTool {
+
+    private ArcCADToolContext _fsm;
+    private Point p1;
+    private Point p2;
+    private Point p3;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new ArcCADToolContext(this);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        ArcCADToolState actualState = (ArcCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Arc.FirstPoint")) {
+            p1 = createPoint(x, y);
+        } else
+            if (status.equals("Arc.SecondPoint")) {
+                p2 = createPoint(x, y);
+            } else
+                if (status.equals("Arc.ThirdPoint")) {
+                    p3 = createPoint(x, y);
+                    Geometry ig = createArc(p1, p2, p3);
+                    if (ig != null) {
+                        insertAndSelectGeometry(ig);
+                    } else {
+                        ApplicationLocator.getManager().message(
+                            Messages.getText("_Unable_to_create_arc"),
+                            JOptionPane.ERROR_MESSAGE);
+                    }
+                }
+    }
+
+    /**
+     * M�todo para dibujar lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        ArcCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Arc.SecondPoint")) {
+            renderer.drawLine(new Point2D.Double(p1.getX(), p1.getY()),
+                new Point2D.Double(x, y),
+                mapControlManager.getGeometrySelectionSymbol());
+        } else
+            if (status.equals("Arc.ThirdPoint")) {
+                Point current = createPoint(x, y);
+
+                Geometry ig = createArc(p1, p2, current);
+                
+                if (ig != null) {
+                    /*
+                     * sometims it's not possible to create arc
+                     * (example: aligned points)
+                     */
+                    renderer.draw(ig,
+                        mapControlManager.getGeometrySelectionSymbol());
+
+                    Point2D p =
+                        getCadToolAdapter().getMapControl().getViewPort()
+                            .fromMapPoint(p1.getX(), p1.getY());
+                    renderer.drawRect((int) p.getX(), (int) p.getY(), 1, 1);
+                    p =
+                        getCadToolAdapter().getMapControl().getViewPort()
+                            .fromMapPoint(p2.getX(), p2.getY());
+                    renderer.drawRect((int) p.getX(), (int) p.getY(), 1, 1);
+                }
+            }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        // Nothing to do
+    }
+
+    public void addValue(double d) {
+        // Nothing to do
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "arc_");
+    }
+
+    public String toString() {
+        return "_arc";
+    }
+
+    @Override
+    protected int getSupportedPrimitiveGeometryType() {
+        return ARC;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ArcCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdgeStar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdgeStar.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdgeStar.java	(revision 42196)
@@ -0,0 +1,234 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* Spatial Operations & Editing Tools for uDig
+ * 
+ * Axios Engineering under a funding contract with: 
+ *      Diputación Foral de Gipuzkoa, Ordenación Territorial 
+ *
+ *      http://b5m.gipuzkoa.net
+ *      http://www.axios.es 
+ *
+ * (C) 2006, Diputación Foral de Gipuzkoa, Ordenación Territorial (DFG-OT). 
+ * DFG-OT agrees to licence under Lesser General Public License (LGPL).
+ * 
+ * You can redistribute it and/or modify it under the terms of the 
+ * GNU Lesser General Public License as published by the Free Software 
+ * Foundation; version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ */
+package org.gvsig.editing.gui.cad.tools.split;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.algorithm.Angle;
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.DirectedEdgeStar;
+import com.vividsolutions.jts.geomgraph.EdgeEnd;
+import com.vividsolutions.jts.util.Assert;
+
+/**
+ * A {@link DirectedEdgeStar} for the {@link SplitGraphNode nodes} in a {@link SplitGraph}
+ * 
+ * @author Gabriel Roldán, Axios Engineering
+ * @author Mauricio Pazos, Axios Engineering
+ * @since 1.1.0
+ */
+class SplitEdgeStar extends DirectedEdgeStar {
+
+    /**
+     * Adds a DirectedEdge to the list of incident edges on this star
+     * 
+     * @param de non null directed edge to insert on this node star
+     */
+    public void insert( DirectedEdge de ) {
+        if (de == null) {
+            throw new NullPointerException();
+        }
+        insertEdgeEnd(de, de);
+    }
+
+    /**
+     * Overrides {@link DirectedEdgeStar#insert(EdgeEnd)} just to delegate to
+     * {@link #insert(DirectedEdge)} forcing the argument type
+     */
+    @Override
+    public void insert( EdgeEnd ee ) {
+        insert((DirectedEdge) ee);
+    }
+
+    /**
+     * Removes the given edge from this edge star
+     * 
+     * @param edge
+     * @throws IllegalArgumentException if <code>edge</code> is not one of this star's edges
+     */
+    public void remove( DirectedEdge edge ) {
+        if (edge == null) {
+            throw new NullPointerException("edge");
+        }
+        int degree = getDegree();
+        Object removed = edgeMap.remove(edge);
+        int afterDegree = getDegree();
+        Assert.isTrue(afterDegree == degree - 1);
+        if (edge != removed) {
+            throw new IllegalArgumentException(
+                                               "Tried to remove an edge not registered in this edge star: "
+                                                       + edge);
+        }
+        edgeList = null; // edge list has changed - clear the cache
+    }
+
+    /**
+     * Returns the list of Directed edges whose direction is outgoing from this star's node. That
+     * is, for all the DirectedEdges in the star, if the edge's start point is coincident whith the
+     * edge star node, returns the same DirectedNode, otherwise returns the edge's
+     * {@link DirectedEdge#getSym() symmetric edge}.
+     * 
+     * @return
+     */
+    private List getOutgoingEdges() {
+        final Coordinate nodeCoord = getCoordinate();
+        final List edges = getEdges();
+        final List outgoingEdges = new ArrayList(edges.size());
+        for( Iterator it = edges.iterator(); it.hasNext(); ) {
+            DirectedEdge edge = (DirectedEdge) it.next();
+            if (!nodeCoord.equals2D(edge.getCoordinate())) {
+                edge = edge.getSym();
+            }
+            assert nodeCoord.equals2D(edge.getCoordinate());
+            outgoingEdges.add(edge);
+        }
+        return outgoingEdges;
+    }
+
+    /**
+     * Finds the first edge to the passed in in the <code>searchDrirection</code> direction.
+     * 
+     * @param searchDirection one of {@link CGAlgorithms#CLOCKWISE},
+     *        {@link CGAlgorithms#COUNTERCLOCKWISE}
+     * @return the edge forming the acutest angle with <code>edge</code> in the
+     *         <code>prefferredDirection</code> or <code>null</code> if there are no edges in
+     *         the prefferred direction.
+     */
+    public DirectedEdge findClosestEdgeInDirection( DirectedEdge edge, final int searchDirection ) {
+        if (edge == null) {
+            throw new NullPointerException("edge");
+        }
+        if (CGAlgorithms.CLOCKWISE != searchDirection
+                && CGAlgorithms.COUNTERCLOCKWISE != searchDirection) {
+            throw new IllegalArgumentException("Allowed values for for searchDirection "
+                    + "are CGAlgorithms.CLOCKWISE and CGAlgorithms.COUNTERCLOCKWISE: "
+                    + searchDirection);
+        }
+
+        // ensure we're using the node's outgoing edge
+        if (super.findIndex(edge) == -1) {
+            edge = edge.getSym();
+            if (super.findIndex(edge) == -1) {
+                throw new IllegalArgumentException("Edge does not belongs to this edgestar");
+            }
+        }
+        final int degree = getDegree();
+        if (degree < 2) {
+            throw new IllegalStateException("there must be at least two edges in the edge star");
+        }
+        final Coordinate nodeCoord = getCoordinate();
+
+        assert nodeCoord.equals2D(edge.getCoordinate());
+
+        double acutestAngle = Double.MAX_VALUE;
+        DirectedEdge acutest = null;
+        DirectedEdge adjacentEdge = null;
+
+        final Coordinate tip1 = edge.getDirectedCoordinate();
+        final Coordinate tail = nodeCoord;
+
+        // ensure we're using outgoing edges
+        final List outgoingEdges = getOutgoingEdges();
+        for( Iterator it = outgoingEdges.iterator(); it.hasNext(); ) {
+            adjacentEdge = (DirectedEdge) it.next();
+
+            if (adjacentEdge == edge) {
+                continue;
+            }
+
+            Coordinate tip2 = adjacentEdge.getDirectedCoordinate();
+
+            double angle = computeAngleInDirection(tip1, tail, tip2, searchDirection);
+
+            if (angle < acutestAngle) {
+                acutestAngle = angle;
+                acutest = adjacentEdge;
+            }
+        }
+
+        return acutest;
+    }
+
+    /**
+     * Computes the angle comprised between the vector <code>tail:tip1</code> looking in the
+     * specified <code>direction</code> to the vector <code>tail:tip2</code>
+     * 
+     * @param tip1
+     * @param tail
+     * @param tip2
+     * @param direction one of {@link CGAlgorithms#CLOCKWISE},
+     *        {@link CGAlgorithms#COUNTERCLOCKWISE}
+     * @return the angle in radians defined by the vectors tail-tip1:tail-tip2 calculated in the
+     *         specified <code>direction</code> from tail-tip1
+     */
+    public double computeAngleInDirection( Coordinate tip1, Coordinate tail, Coordinate tip2,
+                                           int direction ) {
+        final int orientation = CGAlgorithms.computeOrientation(tail, tip1, tip2);
+
+        // minimal angle (non oriented)
+        double angle = Angle.angleBetween(tip1, tail, tip2);
+        if (orientation != direction) {
+            angle = Angle.PI_TIMES_2 - angle;
+        }
+        return angle;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer("SplitEdgeStar[degree: ");
+        sb.append(getDegree()).append(", edges: ");
+        for( Iterator it = getEdges().iterator(); it.hasNext(); ) {
+            DirectedEdge de = (DirectedEdge) it.next();
+            sb.append("DirectedEdge[");
+            sb.append(de.getEdge()).append(" ");
+            sb.append("]");
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdgeStar.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNodeFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNodeFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNodeFactory.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* Spatial Operations & Editing Tools for uDig
+ * 
+ * Axios Engineering under a funding contract with: 
+ *      Diputación Foral de Gipuzkoa, Ordenación Territorial 
+ *
+ *      http://b5m.gipuzkoa.net
+ *      http://www.axios.es 
+ *
+ * (C) 2006, Diputación Foral de Gipuzkoa, Ordenación Territorial (DFG-OT). 
+ * DFG-OT agrees to licence under Lesser General Public License (LGPL).
+ * 
+ * You can redistribute it and/or modify it under the terms of the 
+ * GNU Lesser General Public License as published by the Free Software 
+ * Foundation; version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ */
+package org.gvsig.editing.gui.cad.tools.split;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.Node;
+import com.vividsolutions.jts.geomgraph.NodeFactory;
+
+/**
+ * Custom node factory to create {@link SplitGraphNode}s initialized with an empty
+ * {@link SplitEdgeStar}
+ * 
+ * @author Gabriel Roldán, Axios Engineering
+ * @author Mauricio Pazos, Axios Engineering
+ * @since 1.1.0
+ * @see SplitGraphNode
+ */
+class SplitGraphNodeFactory extends NodeFactory {
+
+    public Node createNode( Coordinate coord ) {
+        return new SplitGraphNode(coord, new SplitEdgeStar());
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNodeFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraph.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraph.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraph.java	(revision 42196)
@@ -0,0 +1,282 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* Spatial Operations & Editing Tools for uDig
+ *
+ * Axios Engineering under a funding contract with:
+ *      Diputación Foral de Gipuzkoa, Ordenación Territorial
+ *
+ *      http://b5m.gipuzkoa.net
+ *      http://www.axios.es
+ *
+ * (C) 2006, Diputación Foral de Gipuzkoa, Ordenación Territorial (DFG-OT).
+ * DFG-OT agrees to licence under Lesser General Public License (LGPL).
+ *
+ * You can redistribute it and/or modify it under the terms of the
+ * GNU Lesser General Public License as published by the Free Software
+ * Foundation; version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ */
+package org.gvsig.editing.gui.cad.tools.split;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.Label;
+import com.vividsolutions.jts.geomgraph.NodeFactory;
+import com.vividsolutions.jts.geomgraph.PlanarGraph;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.geomgraph.Quadrant;
+
+/**
+ * A {@link PlanarGraph} that builds itself from a {@link Polygon} and a
+ * {@link LineString splitting line}.
+ * <p>
+ * The resulting graph will have the following characteristics:
+ * <ul>
+ * <li>It will contain as many edges as linestrings in the boundary of the intersection geometry
+ * between the polygon and the splitting line string.
+ * <li>All edges will be labelled {@link Location#BOUNDARY} at {@link Position#ON}</li>
+ * <li>The edges from the polygon's exterior ring will be labelled {@link Location#EXTERIOR} at the
+ * {@link Position#LEFT}, {@link Location#INTERIOR} at {@link Position#RIGHT}</li>
+ * <li>The edges from the polygon's holes will be labelled {@link Location#INTERIOR} at the
+ * {@link Position#LEFT}, {@link Location#EXTERIOR} at {@link Position#RIGHT}</li>
+ * </ul>
+ * <p>
+ * Note the provided polygon may result modified as the result of {@link Polygon#normalize()},
+ * which is called in order to ensure propper orientation of the shell and holes.
+ * </p>
+ * </p>
+ *
+ * @author Gabriel Roldán, Axios Engineering
+ * @author Mauricio Pazos, Axios Engineering
+ * @since 1.1.0
+ */
+class SplitGraph extends PlanarGraph {
+
+    private static final NodeFactory NODE_FACTORY = new SplitGraphNodeFactory();
+
+    private final Polygon            polygon;
+
+    private final LineString         splitter;
+
+    public SplitGraph( Polygon polygon, LineString splitter ) {
+        super(NODE_FACTORY);
+        this.polygon = polygon;
+        // after normalize() we know the shell is oriented CW and the holes CCW
+        this.polygon.normalize();
+
+        this.splitter = normalizeSplitter(splitter);
+        buildGraph();
+    }
+
+    private LineString normalizeSplitter( final LineString original ) {
+        // ensure the splitter has no endpoints lying inside the polygon
+        LineString splitter = removeInteriorEndPoints(polygon, original);
+        // endure the splitter is directed clockwise, as its going
+        // to become part of the shell boundary when the tesselation
+        // process eliminates other shell edges from the graph
+        Coordinate[] splitterCoords = splitter.getCoordinates();
+        Coordinate coord0 = splitterCoords[0];
+        Coordinate coord1 = splitterCoords[1];
+
+        // determine the orientation of the coordinate sequence given the
+        // quadrant of its first vector
+        // 1 | 0
+        // --+--
+        // 2 | 3
+        final int quadrant = Quadrant.quadrant(coord0, coord1);
+        boolean isCounterClockWise = 1 == quadrant || 2 == quadrant;
+        if (isCounterClockWise) {
+            CoordinateArrays.reverse(splitterCoords);
+            GeometryFactory gf = original.getFactory();
+            splitter = gf.createLineString(splitterCoords);
+        }
+        return splitter;
+    }
+
+    /**
+     * Removes the given edge and its related {@link DirectedEdge}'s from this graph
+     *
+     * @param edge the edge to remove
+     * @throws IllegalArgumentException if no enclosing DirectedEdge is found for <code>edge</code>
+     * @see #remove(DirectedEdge)
+     */
+    public void remove( final SplitEdge edge ) {
+        DirectedEdge edgeEnd = (DirectedEdge) findEdgeEnd(edge);
+        if (edgeEnd == null) {
+            throw new IllegalArgumentException("No enclosing edge end found for " + edge);
+        }
+        remove(edgeEnd);
+    }
+
+    /**
+     * Removes a DirectedEdge, its sym and its {@link SplitEdge} from this graph. May lead to the
+     * graph containing dangling nodes.
+     *
+     * @param edgeEnd
+     */
+    public void remove( final DirectedEdge edgeEnd ) {
+        if (edgeEnd == null) {
+            throw new NullPointerException();
+        }
+        if (edgeEndList.remove(edgeEnd)) {
+            DirectedEdge sym = edgeEnd.getSym();
+            edgeEndList.remove(sym);
+
+            // shared edge between both ends
+            Edge edge = edgeEnd.getEdge();
+            edges.remove(edge);
+
+            // node of directed edge end
+            SplitGraphNode node = (SplitGraphNode) edgeEnd.getNode();
+            // node of symetric directed edge end
+            SplitGraphNode endNode = (SplitGraphNode) sym.getNode();
+            node.remove(edgeEnd);
+            endNode.remove(sym);
+        }
+    }
+
+    /**
+     * Builds a linestrnig from splitter such that it contains no endpoints lying inside the polygon
+     *
+     * @param polygon
+     * @param splitter
+     * @return
+     */
+    private LineString removeInteriorEndPoints( Polygon polygon, LineString splitter ) {
+        final Coordinate[] coords = splitter.getCoordinates();
+        final GeometryFactory gf = splitter.getFactory();
+        int useFrom;
+        int useTo;
+
+        for( useFrom = 0; useFrom < coords.length; useFrom++ ) {
+            Point p = gf.createPoint(coords[useFrom]);
+            if (!polygon.contains(p)) {
+                break;
+            }
+        }
+        for( useTo = coords.length - 1; useTo >= useFrom; useTo-- ) {
+            Point p = gf.createPoint(coords[useTo]);
+            if (!polygon.contains(p)) {
+                break;
+            }
+        }
+
+        if (useFrom == useTo) {
+            throw new IllegalArgumentException("Line lies completely inside polygon");
+        }
+
+        int length = 1 + (useTo - useFrom);
+        Coordinate[] crossingLineCoords = new Coordinate[length];
+        System.arraycopy(coords, useFrom, crossingLineCoords, 0, length);
+        LineString surelyCrossingLine = gf.createLineString(crossingLineCoords);
+        return surelyCrossingLine;
+    }
+
+    /**
+     * <pre>
+     * <code>
+     *
+     *                  +----------o-----------+
+     *                  |          |           |
+     *                  |          |           |
+     *                  |    +-----------+     |
+     *                  |    |     |     |     |
+     *                  |    |     |     |     |
+     *                  |    |     |     |     |
+     *                  |    o__\__o_____|     |
+     *                  |       /  |           |
+     *                 /|\        /|\          |
+     *                  o__________o___________|
+     *
+     *
+     * </code>
+     * </pre>
+     *
+     * @throws Exception
+     */
+    private void buildGraph() {
+        Geometry intersectingLineStrings = polygon.intersection(splitter);
+        Geometry nodedShell = polygon.getExteriorRing().difference(splitter);
+
+        LineString[] interiorRings = new LineString[polygon.getNumInteriorRing()];
+        for( int i = 0; i < polygon.getNumInteriorRing(); i++ ) {
+            LineString interiorRingN = polygon.getInteriorRingN(i);
+            interiorRings[i] = interiorRingN;
+        }
+        GeometryFactory factory = polygon.getFactory();
+        Geometry interiorRingCollection = factory.createMultiLineString(interiorRings);
+        Geometry nodedHoles = interiorRingCollection.difference(splitter);
+
+        // shell segments oriented CW means exterior at the left, interior at
+        // the right
+        addEdges(nodedShell, Location.BOUNDARY, Location.EXTERIOR, Location.INTERIOR);
+        // hole segments oriented CCW means interior at the left, exterior at
+        // the right
+        addEdges(nodedHoles, Location.BOUNDARY, Location.INTERIOR, Location.EXTERIOR);
+        // splitter intersection segments have interior location at both left
+        // and right
+        addEdges(intersectingLineStrings, Location.BOUNDARY, Location.INTERIOR, Location.INTERIOR);
+    }
+
+    private void addEdges( Geometry linearGeom, int onLoc, int leftLoc, int rightLoc ) {
+        final int nParts = linearGeom.getNumGeometries();
+        Geometry currGeom;
+        Coordinate[] coords;
+        List edges = new ArrayList();
+        for( int i = 0; i < nParts; i++ ) {
+            currGeom = linearGeom.getGeometryN(i);
+            coords = currGeom.getCoordinates();
+            if (coords.length<2)
+            	continue;
+            Label label = new Label(onLoc, leftLoc, rightLoc);
+            Edge edge = new SplitEdge(coords, label);
+            edges.add(edge);
+        }
+        // for each edge in the list, adds two DirectedEdge, one reflecting
+        // the given edge and other the opposite
+        try{
+        	super.addEdges(edges);
+        }catch (Exception e) {
+			LoggerFactory.getLogger(this.getClass()).error(e.getLocalizedMessage(),e);
+		}
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraph.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitStrategy.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitStrategy.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitStrategy.java	(revision 42196)
@@ -0,0 +1,500 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.editing.gui.cad.tools.split;
+
+/*
+ * Based on portions of code from UDIG project.
+ *
+ * This class is based in the AXIOS team work for UDIG project.
+ * 
+ * Adapted it slightly for the gvsig project
+ * (exchange the I18 system, etc)
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geom.MultiLineString;
+import com.vividsolutions.jts.geom.MultiPolygon;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.Node;
+
+
+
+/*
+ * Performs a split of a LineString, MultiLineString, Polygon or MultiPolygon using a provided
+ * LineString as cutting edge.
+ */
+public class SplitStrategy {
+
+    private final LineString splittingLine;
+
+    private static final Map /* <Class, Class<? extends SpecificSplitOp> */strategies;
+    static {
+        Map knownStrategies = new HashMap();
+        knownStrategies.put(LineString.class, LineStringSplitter.class);
+        knownStrategies.put(MultiLineString.class, MultiLineStringSplitter.class);
+        knownStrategies.put(Polygon.class, PolygonSplitter.class);
+        knownStrategies.put(MultiPolygon.class, MultiPolygonSplitter.class);
+
+        strategies = Collections.unmodifiableMap(knownStrategies);
+    }
+
+    public SplitStrategy( final LineString splittingLine ) {
+        if (splittingLine == null) {
+            throw new NullPointerException();
+        }
+        this.splittingLine = splittingLine;
+    }
+
+    
+    public static Geometry splitOp( Geometry geom, LineString splitLine ) {
+        SplitStrategy op = new SplitStrategy(splitLine);
+        Geometry splittedGeometries = op.split(geom);
+        return splittedGeometries;
+    }
+
+    
+    /**
+     * @param splitee
+     * @return a <code>Geometry</code> containing all the splitted parts as aggregates. Use
+     *         {@link Geometry#getGeometryN(int) getGeometryN(int)} to get each part.
+     * @throws NullPointerException if geom is null
+     * @throws IllegalArgumentException if geom is not of an acceptable geometry type to be splitted
+     *         (i.e. not a linestring, multilinestring, polygon or multipolygon)
+     */
+    public Geometry split( final Geometry splitee ) {
+        if (splitee == null) {
+            throw new NullPointerException();
+        }
+
+        Class spliteeClass = splitee.getClass();
+        SpecificSplitOp splitOp = findSplitOp(spliteeClass);
+
+        Geometry splitResult;
+
+        splitOp.setSplitter(splittingLine);
+        splitResult = splitOp.split(splitee);
+
+        return splitResult;
+    }
+
+    
+    private SpecificSplitOp findSplitOp( Class spliteeClass ) {
+        if (!strategies.containsKey(spliteeClass)) {
+            throw new IllegalArgumentException("La geometria especificada no soporta la operacion 'split'");
+        }
+
+        final Class splitOpClass = (Class) strategies.get(spliteeClass);
+        SpecificSplitOp splitOp;
+        try {
+
+            splitOp = (SpecificSplitOp) splitOpClass.newInstance();
+
+        } catch (InstantiationException e) {
+            throw new RuntimeException("Cannot instantiate " + splitOpClass.getName(), e);
+        } catch (IllegalAccessException e) {
+            throw (RuntimeException) new RuntimeException("Illegal access exception for "
+                    + splitOpClass.getName()).initCause(e);
+        }
+        return splitOp;
+    }
+
+    private static interface SpecificSplitOp {
+        public void setSplitter( LineString splitter );
+        public Geometry split( Geometry splitee );
+    }
+
+    private static abstract class AbstractSplitter implements SpecificSplitOp {
+
+        protected LineString splitter;
+
+        public void setSplitter( LineString splitter ) {
+            this.splitter = splitter;
+        }
+    }
+
+    private static class LineStringSplitter extends AbstractSplitter {
+        /**
+         * No-op default constructor required to reflectively instantiate the class
+         */
+        public LineStringSplitter() {
+            // no-op
+        }
+        /**
+         * @param splitee the {@link LineString} to be splitted
+         */
+        public Geometry split( Geometry splitee ) {
+            Geometry splitted = ((LineString) splitee).difference(splitter);
+            return splitted;
+        }
+
+    }
+
+    private static abstract class AbstractGeometryCollectionSplitter implements SpecificSplitOp {
+
+        private SpecificSplitOp singlePartSplitter;
+
+        private AbstractGeometryCollectionSplitter( SpecificSplitOp singlePartSplitter ) {
+            this.singlePartSplitter = singlePartSplitter;
+        }
+
+        public final void setSplitter( LineString splitter ) {
+            singlePartSplitter.setSplitter(splitter);
+        }
+
+        public final Geometry split( final Geometry splitee ) {
+            final GeometryCollection coll = (GeometryCollection) splitee;
+            final int numParts = coll.getNumGeometries();
+
+            List splittedParts = new ArrayList();
+
+            for( int partN = 0; partN < numParts; partN++ ) {
+                Geometry simplePartN = coll.getGeometryN(partN);
+                Geometry splittedPart = singlePartSplitter.split(simplePartN);
+                final int splittedPartsCount = splittedPart.getNumGeometries();
+                for( int splittedPartN = 0; splittedPartN < splittedPartsCount; splittedPartN++ ) {
+                    Geometry simpleSplittedPart = splittedPart.getGeometryN(splittedPartN);
+                    splittedParts.add(simpleSplittedPart);
+                }
+            }
+
+            GeometryFactory gf = splitee.getFactory();
+            GeometryCollection splittedCollection = buildFromParts(gf, splittedParts);
+            return splittedCollection;
+        }
+
+        protected abstract GeometryCollection buildFromParts( GeometryFactory gf, List parts );
+
+    }
+
+    private static class MultiLineStringSplitter extends AbstractGeometryCollectionSplitter {
+
+        public MultiLineStringSplitter() {
+            super(new LineStringSplitter());
+        }
+
+        @Override
+        protected GeometryCollection buildFromParts( GeometryFactory gf, List parts ) {
+            LineString[] lines = (LineString[]) parts.toArray(new LineString[parts.size()]);
+            MultiLineString result = gf.createMultiLineString(lines);
+            return result;
+        }
+    }
+
+    private static class MultiPolygonSplitter extends AbstractGeometryCollectionSplitter {
+
+        public MultiPolygonSplitter() {
+            super(new PolygonSplitter());
+        }
+
+        @Override
+        protected GeometryCollection buildFromParts( GeometryFactory gf, List parts ) {
+            Polygon[] polygons = (Polygon[]) parts.toArray(new Polygon[parts.size()]);
+            MultiPolygon result = gf.createMultiPolygon(polygons);
+            return result;
+        }
+    }
+
+    /**
+     * Estrategia:
+     * <ul>
+     * <li> Construir un grafo con todos los edges y nodes de la intersección del polígono con la
+     * línea
+     * <li> Ponderar los nodos según la cantidad de edges incidentes. Nodos son solo las
+     * intersecciones del boundary del poligono con el linestring y el punto inicial de cada parte
+     * del boundary.
+     * <li> Ponderar los edges según son shared (todos los del linestring) o non shared (todos los
+     * del boundary del poligono). Almacenar la lista de coordenadas del edge en el edge.
+     * <li> Comenzar a recorrer el grafo por un nodo cualquiera, empezando por su primer edge
+     * <li> Recorrer siempre hacia el nodo siguiente, seleccionando el edge cuyo primer segmento de
+     * su linestring presenta un menor angulo a la izquiera (CCW) con el ultimo segmento del
+     * linestring del edge en curso.
+     * <li> Eliminar del grafo los edges non-shared que se utilizaron
+     * <li> Disminuir en 1 la ponderación de los nodos que se utilizaron
+     * <li> Marcar los edges restantes que tengan algun nodo con ponderación < 3 como non-shared
+     * <li> Eliminar del grafo los nodos con ponderación 1
+     * </ul>
+     */
+    private static class PolygonSplitter extends AbstractSplitter {
+
+        /**
+         * No-op default constructor required to reflectively instantiate the class
+         */
+        public PolygonSplitter() {
+            // no-op
+        }
+
+        /**
+         * 
+         */
+        public Geometry split( Geometry splitee ) {
+            assert splitee instanceof Polygon;;
+
+            final Polygon polygon = (Polygon) splitee;
+            final Geometry splitted = splitPolygon(polygon);
+
+            return splitted;
+        }
+
+        /**
+         * 
+         */
+        private Geometry splitPolygon( final Polygon geom ) {
+            SplitGraph graph = new SplitGraph(geom, splitter);
+
+            final GeometryFactory gf = geom.getFactory();
+
+            // sotore unsplitted holes for later addition
+            List<LinearRing> unsplittedHoles = findUnsplittedHoles(graph, gf);
+
+            List<List<SplitEdge>> allRings = findRings(graph);
+
+            List<Polygon> resultingPolygons = buildSimplePolygons(allRings, unsplittedHoles, gf);
+
+            Geometry result;
+            if (resultingPolygons.size() == 1) {
+                result = resultingPolygons.get(0);
+            } else {
+                Polygon[] array = resultingPolygons.toArray(new Polygon[resultingPolygons.size()]);
+                result = gf.createMultiPolygon(array);
+            }
+            return result;
+        }
+
+        /**
+         * Finds out and removes from the graph the edges that were originally holes in the polygon
+         * and were not splitted by the splitting line.
+         * 
+         * @param graph
+         * @param gf
+         * @return
+         */
+        @SuppressWarnings("unchecked")
+        private List<LinearRing> findUnsplittedHoles( SplitGraph graph, GeometryFactory gf ) {
+            final List<LinearRing> unsplittedHoles = new ArrayList<LinearRing>(2);
+
+            final List<SplitEdge> edges = new ArrayList<SplitEdge>();
+            for( Iterator it = graph.getEdgeIterator(); it.hasNext(); ) {
+                SplitEdge edge = (SplitEdge) it.next();
+                edges.add(edge);
+            }
+
+            for( Iterator it = edges.iterator(); it.hasNext(); ) {
+                SplitEdge edge = (SplitEdge) it.next();
+                if (edge.isHoleEdge()) {
+                    Coordinate[] coordinates = edge.getCoordinates();
+                    Coordinate start = coordinates[0];
+                    Coordinate end = coordinates[coordinates.length - 1];
+                    boolean isLinearRing = start.equals2D(end);
+                    if (isLinearRing) {
+                        graph.remove(edge);
+                        LinearRing ring = gf.createLinearRing(coordinates);
+                        unsplittedHoles.add(ring);
+                    }
+                }
+            }
+            return unsplittedHoles;
+        }
+
+        private List<Polygon> buildSimplePolygons( List<List<SplitEdge>> allRings,
+                                                   List<LinearRing> unsplittedHoles,
+                                                   GeometryFactory gf ) {
+
+            List<Polygon> polygons = new ArrayList<Polygon>(allRings.size());
+
+            for( List<SplitEdge> edgeList : allRings ) {
+                Polygon poly = buildPolygon(edgeList, gf);
+                List<LinearRing> thisPolyHoles = new ArrayList<LinearRing>(unsplittedHoles.size());
+                for( LinearRing holeRing : unsplittedHoles ) {
+                    if (poly.covers(holeRing)) {
+                        thisPolyHoles.add(holeRing);
+                    }
+                }
+                unsplittedHoles.removeAll(thisPolyHoles);
+
+                int numHoles = thisPolyHoles.size();
+                if (numHoles > 0) {
+                    LinearRing[] holes = thisPolyHoles.toArray(new LinearRing[numHoles]);
+                    LinearRing shell = gf.createLinearRing(poly.getExteriorRing().getCoordinates());
+                    poly = gf.createPolygon(shell, holes);
+                }
+
+                polygons.add(poly);
+            }
+
+            return polygons;
+        }
+
+        private Polygon buildPolygon( List<SplitEdge> edgeList, GeometryFactory gf ) {
+            List<Coordinate> coords = new ArrayList<Coordinate>();
+            Coordinate[] lastCoordinates = null;
+            for( SplitEdge edge : edgeList ) {
+                Coordinate[] coordinates = edge.getCoordinates();
+                if (lastCoordinates != null) {
+                    Coordinate endPoint = lastCoordinates[lastCoordinates.length - 1];
+                    Coordinate startPoint = coordinates[0];
+                    if (!endPoint.equals2D(startPoint)) {
+                        coordinates = CoordinateArrays.copyDeep(coordinates);
+                        CoordinateArrays.reverse(coordinates);
+                    }
+                }
+                lastCoordinates = coordinates;
+                for( int i = 0; i < coordinates.length; i++ ) {
+                    Coordinate coord = coordinates[i];
+                    coords.add(coord);
+                }
+            }
+            Coordinate[] shellCoords = new Coordinate[coords.size()];
+            coords.toArray(shellCoords);
+            shellCoords = CoordinateArrays.removeRepeatedPoints(shellCoords);
+            LinearRing shell = gf.createLinearRing(shellCoords);
+            Polygon poly = gf.createPolygon(shell, (LinearRing[]) null);
+            return poly;
+        }
+
+        /**
+         * Builds a list of rings from the graph's edges
+         * 
+         * @param graph
+         * @return
+         */
+        @SuppressWarnings("unchecked")
+        private List<List<SplitEdge>> findRings( SplitGraph graph ) {
+            final List<List<SplitEdge>> rings = new ArrayList<List<SplitEdge>>();
+
+            DirectedEdge startEdge;
+            // build each ring starting with the first edge belonging to the
+            // shell found
+            while( (startEdge = findShellEdge(graph)) != null ) {
+                List<SplitEdge> ring = buildRing(graph, startEdge);
+                rings.add(ring);
+            }
+            return rings;
+        }
+
+        private List<SplitEdge> buildRing( final SplitGraph graph, final DirectedEdge startEdge ) {
+            // System.out.println("building ring edge list...");
+            final List<SplitEdge> ring = new ArrayList<SplitEdge>();
+
+            // follow this tessellation direction while possible,
+            // switch to the opposite when not, and continue with
+            // the same direction while possible.
+            // Start travelling clockwise, as we start with a shell edge,
+            // which is in clockwise order
+            final int direction = CGAlgorithms.COUNTERCLOCKWISE;
+
+            DirectedEdge currentDirectedEdge = startEdge;
+            DirectedEdge nextDirectedEdge = null;
+
+            while( nextDirectedEdge != startEdge ) {
+                SplitEdge edge = (SplitEdge) currentDirectedEdge.getEdge();
+                // System.out.println("adding " + edge);
+                if (ring.contains(edge)) {
+                    throw new IllegalStateException("trying to add edge twice: " + edge);
+                }
+                ring.add(edge);
+
+                DirectedEdge sym = currentDirectedEdge.getSym();
+                SplitGraphNode endNode = (SplitGraphNode) sym.getNode();
+                SplitEdgeStar nodeEdges = (SplitEdgeStar) endNode.getEdges();
+                nextDirectedEdge = nodeEdges.findClosestEdgeInDirection(sym, direction);
+
+                assert nextDirectedEdge != null;
+
+                currentDirectedEdge = nextDirectedEdge;
+            }
+
+            removeUnneededEdges(graph, ring);
+            return ring;
+        }
+
+        /**
+         * Removes from <code>graph</code> the edges in <code>ring</code> that are no more
+         * needed
+         * 
+         * @param graph
+         * @param ring
+         */
+        private void removeUnneededEdges( final SplitGraph graph, final List<SplitEdge> ring ) {
+            for( SplitEdge edge : ring ) {
+                if (!edge.isInteriorEdge()) {
+                    graph.remove(edge);
+                }
+            }
+
+            for( SplitEdge edge : ring ) {
+                if (edge.isInteriorEdge()) {
+                    Node node = graph.find(edge.getCoordinate());
+                    int degree = node.getEdges().getDegree();
+                    if (degree < 2) {
+                        graph.remove(edge);
+                    }
+                }
+            }
+        }
+
+        /**
+         * Returns the first edge found that belongs to the shell (not an interior edge, not one of
+         * a hole boundary)
+         * <p>
+         * This method relies on shell edges being labeled {@link Location#EXTERIOR exterior} to the
+         * left and {@link Location#INTERIOR interior} to the right.
+         * </p>
+         * 
+         * @param graph
+         * @return the first shell edge found, or <code>null</code> if there are no more shell
+         *         edges in <code>graph</code>
+         */
+        private DirectedEdge findShellEdge( SplitGraph graph ) {
+            Iterator it = graph.getEdgeEnds().iterator();
+            DirectedEdge firstShellEdge = null;
+            while( it.hasNext() ) {
+                DirectedEdge de = (DirectedEdge) it.next();
+                SplitEdge edge = (SplitEdge) de.getEdge();
+                if (edge.isShellEdge()) {
+                    firstShellEdge = de;
+                    break;
+                }
+            }
+            return firstShellEdge;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitStrategy.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdge.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdge.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdge.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* Spatial Operations & Editing Tools for uDig
+ * 
+ * Axios Engineering under a funding contract with: 
+ *      Diputación Foral de Gipuzkoa, Ordenación Territorial 
+ *
+ *      http://b5m.gipuzkoa.net
+ *      http://www.axios.es 
+ *
+ * (C) 2006, Diputación Foral de Gipuzkoa, Ordenación Territorial (DFG-OT). 
+ * DFG-OT agrees to licence under Lesser General Public License (LGPL).
+ * 
+ * You can redistribute it and/or modify it under the terms of the 
+ * GNU Lesser General Public License as published by the Free Software 
+ * Foundation; version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ */
+package org.gvsig.editing.gui.cad.tools.split;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.Label;
+import com.vividsolutions.jts.geomgraph.Position;
+
+/**
+ * A custom edge class that knows if its an edge from the shell of the polygin being splitted, one
+ * of its holes or the splitting line, by inspecing its label.
+ * 
+ * @author Gabriel Roldán, Axios Engineering
+ * @author Mauricio Pazos, Axios Engineering
+ * @since 1.1.0
+ */
+final class SplitEdge extends Edge {
+    SplitEdge( Coordinate[] pts, Label label ) {
+        super(pts, label);
+    }
+
+    private int[] getLabelLocations() {
+        int[] locations = new int[3];
+        Label label = getLabel();
+        locations[Position.ON] = label.getLocation(0, Position.ON);
+        locations[Position.LEFT] = label.getLocation(0, Position.LEFT);
+        locations[Position.RIGHT] = label.getLocation(0, Position.RIGHT);
+        return locations;
+    }
+
+    public boolean isShellEdge() {
+        int[] loc = getLabelLocations();
+        return (loc[Position.LEFT] == Location.EXTERIOR && loc[Position.RIGHT] == Location.INTERIOR);
+    }
+
+    public boolean isHoleEdge() {
+        int[] loc = getLabelLocations();
+        return (loc[Position.LEFT] == Location.INTERIOR && loc[Position.RIGHT] == Location.EXTERIOR);
+    }
+
+    public boolean isInteriorEdge() {
+        int[] loc = getLabelLocations();
+        return (loc[Position.LEFT] == Location.INTERIOR && loc[Position.RIGHT] == Location.INTERIOR);
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer("Edge[label=");
+        sb.append(getLabel()).append(", ");
+        Coordinate[] coords = getCoordinates();
+        for( int i = 0; i < coords.length; i++ ) {
+            sb.append(coords[i].x).append(",").append(coords[i].y).append(" ");
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitEdge.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNode.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNode.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNode.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* Spatial Operations & Editing Tools for uDig
+ * 
+ * Axios Engineering under a funding contract with: 
+ *      Diputación Foral de Gipuzkoa, Ordenación Territorial 
+ *
+ *      http://b5m.gipuzkoa.net
+ *      http://www.axios.es 
+ *
+ * (C) 2006, Diputación Foral de Gipuzkoa, Ordenación Territorial (DFG-OT). 
+ * DFG-OT agrees to licence under Lesser General Public License (LGPL).
+ * 
+ * You can redistribute it and/or modify it under the terms of the 
+ * GNU Lesser General Public License as published by the Free Software 
+ * Foundation; version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ */
+package org.gvsig.editing.gui.cad.tools.split;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.EdgeEnd;
+import com.vividsolutions.jts.geomgraph.Node;
+
+/**
+ * Custom node type. Does nothing special by now but to force the use of {@link SplitEdgeStar}
+ * instances as the node's list of incident edges and allow to remove edges from its list of
+ * incident edges.
+ * 
+ * @author Gabriel Roldán, Axios Engineering
+ * @author Mauricio Pazos, Axios Engineering
+ * @since 1.1.0
+ */
+class SplitGraphNode extends Node {
+    public SplitGraphNode( Coordinate coord, SplitEdgeStar incidentEdges ) {
+        super(coord, incidentEdges);
+    }
+
+    public void add( DirectedEdge edge ) {
+        super.add(edge);
+    }
+
+    @Override
+    public void add( EdgeEnd edge ) {
+        add((DirectedEdge) edge);
+    }
+
+    /**
+     * Removes the given <code>edge</code> from this node's {@link #getEdges() edge list}.
+     * 
+     * @param edge
+     */
+    public void remove( DirectedEdge edge ) {
+        SplitEdgeStar edges = (SplitEdgeStar) getEdges();
+        edges.remove(edge);
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer("Node[");
+        sb.append(coord.x).append(":").append(coord.y);
+        sb.append(", ").append(label);
+        sb.append(", ").append(getEdges());
+        sb.append("]");
+        return sb.toString();
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/split/SplitGraphNode.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplitGeometryCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplitGeometryCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplitGeometryCADTool.java	(revision 42196)
@@ -0,0 +1,637 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Image;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+import com.vividsolutions.jts.geom.MultiPoint;
+import com.vividsolutions.jts.geom.MultiPolygon;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geom.PrecisionModel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.IEditionManager;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.SplitGeometryCADToolContext;
+import org.gvsig.editing.gui.cad.tools.split.SplitStrategy;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.ISimpleFillSymbol;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.locator.LocatorException;
+
+import statemap.State;
+import statemap.StateUndefinedException;
+
+/**
+ * CAD Tool which splits the selected geometries of a vectorial editing
+ * layer with a digitized polyline.
+ * 
+ * 
+ * @author Alvaro Zabala
+ * 
+ */
+public class SplitGeometryCADTool extends DefaultCADTool {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(SplitGeometryCADTool.class);
+    /**
+     * String representation of this tool (used for example to active the tool
+     * in mapcontrol)
+     */
+    public static final String SPLIT_GEOMETRY_ACTION_NAME = "layer-modify-split";
+    public static final String SPLIT_GEOMETRY_TOOL_NAME = "_split_geometry";
+
+    /**
+     * finite state machine for this CAD tool
+     */
+    protected SplitGeometryCADToolContext _fsm;
+
+    /**
+     * Flag to mark if the digitized line has been finished.
+     */
+    protected boolean digitizingFinished = false;
+
+    /**
+     * Collection of digitized geometries
+     */
+    protected List<Point2D> clickedPoints;
+
+    /**
+     * used to draw helping rectangle (bbox)
+     */
+    protected ISymbol rectSymbol = null;
+    /**
+     * Initialization method.
+     */
+    public void init() {
+        digitizingFinished = false;
+        _fsm = new SplitGeometryCADToolContext(this);
+        setNextTool(SplitGeometryCADTool.SPLIT_GEOMETRY_TOOL_NAME);
+    }
+
+    public boolean isDigitizingFinished() {
+        return digitizingFinished;
+    }
+
+    public String toString() {
+        return SplitGeometryCADTool.SPLIT_GEOMETRY_TOOL_NAME;
+    }
+
+    public void finishDigitizedLine() {
+    }
+
+    public Coordinate[] getPoint2DAsCoordinates(Point2D[] point2d) {
+        Coordinate[] solution = new Coordinate[point2d.length];
+        for (int i = 0; i < point2d.length; i++) {
+            solution[i] = new Coordinate(point2d[i].getX(), point2d[i].getY());
+        }
+        return solution;
+    }
+
+    public void splitSelectedGeometryWithDigitizedLine() {
+        
+        IEditionManager ed_man = this.getEditionManager();
+        
+        // comprobar bucle, probar interseccion?
+        Point2D[] clickedPts = new Point2D[this.clickedPoints.size()];
+        clickedPoints.toArray(clickedPts);
+        Coordinate[] digitizedCoords = getPoint2DAsCoordinates(clickedPts);
+        LineString splittingLs =
+            new GeometryFactory(new PrecisionModel(10000))
+                .createLineString(digitizedCoords);
+        DisposableIterator selected = null;
+        try {
+            VectorialLayerEdited vle = getVLE();
+            FeatureStore store = vle.getFeatureStore();
+            selected = store.getFeatureSelection().iterator();
+
+            getCadToolAdapter().getMapControl().getMapContext()
+                .beginAtomicEvent();
+            store.beginEditingGroup(getName());
+            while (selected.hasNext()) {
+                Feature feature = (Feature) selected.next();
+                org.gvsig.fmap.geom.Geometry ig = feature.getDefaultGeometry();
+                Geometry jtsGeo = (Geometry)ig.invokeOperation("toJTS", null);
+                if (jtsGeo == null)
+                    return;
+                Geometry splitGeo = SplitStrategy.splitOp(jtsGeo, splittingLs);
+                if (splitGeo instanceof GeometryCollection
+                    && ((GeometryCollection) splitGeo).getNumGeometries() > 1) {
+
+                    GeometryCollection gc = (GeometryCollection) splitGeo;
+                    ArrayList<Geometry> geoms0 = new ArrayList<Geometry>();
+                    ArrayList<Geometry> geoms1 = new ArrayList<Geometry>();
+                    if (gc.getNumGeometries() > 2) {
+                        Geometry[] splitGroups =
+                            createSplitGroups(jtsGeo, splittingLs);
+                        
+                        if (splitGroups == null) {
+                            
+                            String _tit = Messages.getText("split_geometry");
+                            String _msg = Messages.getText("_Split_line_must_start_and_end_outside_bbox");
+                            Component parent = getCurrentWindow();
+                            JOptionPane.showMessageDialog(
+                                parent,
+                                _msg,
+                                _tit,
+                                JOptionPane.WARNING_MESSAGE);
+                            // cancel splitting
+                            break;
+                        }
+                        
+                        if (splitGroups.length == 0) {
+                            continue;
+                        }
+
+                        for (int j = 0; j < gc.getNumGeometries(); j++) {
+                            Geometry g = gc.getGeometryN(j);
+                            
+                            if (isRatherInside(g, splitGroups[0])) {
+                                geoms0.add(g);
+                            } else {
+                                geoms1.add(g);
+                            }
+                        }
+                    } else {
+                        if (gc.getNumGeometries() == 2) {
+                            geoms0.add(gc.getGeometryN(0));
+                            geoms1.add(gc.getGeometryN(1));
+                        } else {
+                            continue;
+                        }
+                    }
+                    GeometryCollection gc0 =
+                        createMulti(geoms0, gc.getFactory());
+
+                    // for(int j = 0; j < gc.getNumGeometries(); j++){
+                    // Geometry g = gc.getGeometryN(j);
+                    org.gvsig.fmap.geom.Geometry fmapGeo =
+                        UtilFunctions.jtsToGeometry(gc0);
+
+                    // if (j==0){
+                    EditableFeature eFeature = feature.getEditable();
+                    eFeature.setGeometry(store.getDefaultFeatureType()
+                        .getDefaultGeometryAttributeName(), fmapGeo);
+                    
+                    ed_man.updateFeature(store, eFeature);
+
+                    // }else{
+                    GeometryCollection gc1 =
+                        createMulti(geoms1, gc.getFactory());
+                    fmapGeo = UtilFunctions.jtsToGeometry(gc1);
+
+                    super.insertGeometry(fmapGeo,feature);
+//                    EditableFeature newFeature =
+//                        store.createNewFeature(store.getDefaultFeatureType(),
+//                            feature);
+//                    newFeature.setGeometry(store.getDefaultFeatureType()
+//                        .getDefaultGeometryAttributeName(), fmapGeo);
+//                    store.insert(newFeature);
+//                    
+//                    SpatialCache spatialCache =
+//                        ((FLyrVect) vle.getLayer()).getSpatialCache();
+//                    Envelope envelope = fmapGeo.getEnvelope();
+//                    spatialCache.insert(envelope, fmapGeo);
+
+                    // }
+                    // }//for j
+                }// if splitGeo
+
+            }
+
+            store.endEditingGroup();
+
+            getCadToolAdapter().getMapControl().getMapContext()
+                .endAtomicEvent();
+        } catch (Exception ex) {
+            PluginServices.getLogger().error("Error splitting geom", ex);
+        } finally {
+            DisposeUtils.dispose(selected);
+        }
+    }
+
+    /**
+     * @return
+     */
+    private Component getCurrentWindow() {
+        
+        IWindow iw = PluginServices.getMDIManager().getActiveWindow();
+        if (iw instanceof Component) {
+            return (Component) iw;
+        } else {
+            return null;
+        }
+    }
+
+    private GeometryCollection createMulti(ArrayList<Geometry> geoms,
+        GeometryFactory factory) {
+        if (geoms.size() == 0)
+            return null;
+        if (geoms.get(0) instanceof Polygon) {
+            return new MultiPolygon((Polygon[]) geoms.toArray(new Polygon[0]),
+                factory);
+        } else
+            if (geoms.get(0) instanceof LineString) {
+                return new MultiLineString(
+                    (LineString[]) geoms.toArray(new LineString[0]), factory);
+            } else
+                if (geoms.get(0) instanceof Point) {
+                    return new MultiPoint(
+                        (Point[]) geoms.toArray(new Point[0]), factory);
+                }
+        return null;
+    }
+
+    private Geometry[] createSplitGroups(Geometry splitGeo,
+        LineString splittingLs) {
+        try {
+            Geometry[] geomsJTS = new Geometry[2];
+            Geometry r = splitGeo.getEnvelope();
+            Geometry splitG = SplitStrategy.splitOp(r, splittingLs);
+            if (splitG instanceof GeometryCollection
+                && ((GeometryCollection) splitG).getNumGeometries() > 1) {
+                GeometryCollection gc = (GeometryCollection) splitG;
+                for (int j = 0; j < gc.getNumGeometries(); j++) {
+                    geomsJTS[j] = gc.getGeometryN(j);
+                }
+            }
+            return geomsJTS;
+        } catch (Exception e) {
+            logger.info("Warning: Found split line which does not leave bbox. User will be prompted.");
+        }
+        return null;
+    }
+
+    public void end() {
+        getCadToolAdapter().refreshEditedLayer();
+        init();
+    }
+
+    public void addOption(String s) {
+        State actualState = _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (s.equals(PluginServices.getText(this, "cancel"))) {
+            init();
+            return;
+        }
+        if (status.equals("TopologicalEdition.FirstPoint")) {
+            return;
+        }
+        init();
+
+    }
+
+    public void addPoint(double x, double y, InputEvent event) {
+
+        State actualState = _fsm.getPreviousState();
+        String status = actualState.getName();
+        if (status.equals("SplitGeometry.FirstPoint")) {
+            clickedPoints = new ArrayList<Point2D>();
+            clickedPoints.add(new Point2D.Double(x, y));
+        } else
+            if (status.equals("SplitGeometry.DigitizingLine")) {
+                clickedPoints.add(new Point2D.Double(x, y));
+                if (event != null && ((MouseEvent) event).getClickCount() == 2) {
+                    digitizingFinished = true;
+                    finishDigitizedLine();
+                    splitSelectedGeometryWithDigitizedLine();
+                    end();
+                }
+            }
+    }
+
+    public void addValue(double d) {
+    }
+
+    /**
+     * Draws a polyline with the clicked digitized points in the specified
+     * graphics.
+     * 
+     * @param g2
+     *            graphics on to draw the polyline
+     * @param x
+     *            last x mouse pointer position
+     * @param y
+     *            last y mouse pointer position
+     */
+    protected void drawPolyLine(MapControlDrawer renderer, double x, double y) {
+        GeneralPathX gpx =
+            new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, clickedPoints.size());
+        Point2D firstPoint = clickedPoints.get(0);
+        gpx.moveTo(firstPoint.getX(), firstPoint.getY());
+        for (int i = 1; i < clickedPoints.size(); i++) {
+            Point2D clickedPoint = clickedPoints.get(i);
+            gpx.lineTo(clickedPoint.getX(), clickedPoint.getY());
+
+        }
+        gpx.lineTo(x, y);
+        org.gvsig.fmap.geom.Geometry geom;
+        try {
+            geom =
+                GeometryLocator.getGeometryManager().createCurve(gpx,
+                    SUBTYPES.GEOM2D);
+            renderer.draw(geom, mapControlManager.getGeometrySelectionSymbol());
+        } catch (LocatorException e) {
+            e.printStackTrace();
+        } catch (CreateGeometryException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void drawRectangleOfSplit(MapControlDrawer renderer)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException, DataException,
+        CreateGeometryException {
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore store = vle.getFeatureStore();
+        DisposableIterator selected = null;
+
+        try {
+            selected = store.getFeatureSelection().iterator();
+            while (selected.hasNext()) {
+                Feature feature = (Feature) selected.next();
+                org.gvsig.fmap.geom.Geometry ig = feature.getDefaultGeometry();
+                Geometry jtsG = (Geometry)ig.invokeOperation("toJTS", null);
+                if (jtsG != null && jtsG instanceof GeometryCollection
+                    && jtsG.getNumGeometries() > 1) {
+                    
+                    /*
+                    org.gvsig.fmap.geom.Geometry r =
+                        ig.getEnvelope().getGeometry();
+                        */
+                    // get perimeter of envelope to prevent
+                    // opaque rectangle
+                    org.gvsig.fmap.geom.Geometry geom =
+                        GeometryLocator.getGeometryManager().createCurve(
+                            ig.getEnvelope().getGeometry().getGeneralPath(),
+                            SUBTYPES.GEOM2D);
+                    
+                    renderer.draw(geom, getRectangleOfSplitSymbol());
+                }
+            }
+        } finally {
+            DisposeUtils.dispose(selected);
+        }
+    }
+
+    /**
+     * @return
+     */
+    private ISymbol getRectangleOfSplitSymbol() {
+        
+        if (rectSymbol == null) {
+            SymbologyManager sm = SymbologyLocator.getSymbologyManager();
+            ISimpleFillSymbol resp = sm.createSimpleFillSymbol();
+            resp.setColor(Color.RED);
+            resp.setFillColor(new Color(0,0,0, 100));
+            rectSymbol = resp;
+        }
+        return rectSymbol;
+    }
+
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        
+        // decide whether user line must be drawn
+        boolean draw_user_poly_line = false;
+        try {
+            State currentState = _fsm.getState();
+            if (currentState != null) {
+                String status = currentState.getName();
+                if (status != null && status.equals("SplitGeometry.DigitizingLine")) {
+                    draw_user_poly_line = true;
+                }
+            }        
+        } catch (StateUndefinedException sue) {
+            // this happens when state is null
+            // because the line has been finished and we must not draw it
+            draw_user_poly_line = false;
+        }
+        
+        // =======================================================
+        
+        try {
+            drawRectangleOfSplit(renderer);
+            
+            // possibly draw splitting line
+            if (draw_user_poly_line) {
+                drawPolyLine(renderer, x, y);
+            }
+
+            // draw selection
+            Image imgSel = getVLE().getSelectionImage();
+            renderer.drawImage(imgSel, 0, 0);
+        } catch (Exception e) {
+            
+            logger.info("Error while drawing split tool.", e);
+            ApplicationLocator.getManager().message(
+                Messages.getText("_Drawing_error") + e.getMessage(),
+                JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "split_geometry_shell");
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        try {
+            _fsm.addPoint(x, y, event);
+        } catch (Exception e) {
+            init();
+        }
+
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+
+    /**
+     * This method decides if geometrya  is inside geometry b 
+     * by more than 50%. This is useful because it will be
+     * used to assign each geometry to one of two possible containers
+     * 
+     * @param a
+     * @param b must be a multi(polygon)
+     * @return
+     */
+    private static boolean isRatherInside(Geometry a, Geometry b) {
+        
+        if (a instanceof Polygon || a instanceof MultiPolygon) {
+            return polygonIsRatherInside(a, b);
+        } else {
+            if (a instanceof LineString || a instanceof MultiLineString) {
+                return lineIsRatherInside(a, b);
+            } else {
+                if (a instanceof MultiPoint) {
+                    
+                    MultiPoint mp = (MultiPoint) a;
+                    int n = mp.getNumPoints();
+                    int inn = 0;
+                    Geometry itemg = null;
+                    for (int i=0; i<n; i++) {
+                        itemg = mp.getGeometryN(i);
+                        if (isRatherInside(itemg, b)) {
+                            inn++;
+                        }
+                    }
+                    return inn > (n/2);
+                } else {
+                    // last case: should be a point
+                    return b.contains(a);
+                }
+            }
+        }
+        
+    }
+
+    
+    
+    /**
+     * This method decides if a polygon is inside another
+     * by more than 50%. This is useful because it will be
+     * used to assign each polygon to one of two possible containers
+     * 
+     * @param a
+     * @param b
+     * @return whether a is 'rather' contained by b
+     */
+    private static boolean polygonIsRatherInside(Geometry a, Geometry b) {
+        
+        if (a == null || b == null || a.isEmpty() || b.isEmpty()) {
+            return false;
+        }
+        
+        double area_a = a.getArea();
+        
+        if (area_a == 0) {
+            return false;
+        }
+        
+        Geometry a_inters_b = null;
+        
+        a_inters_b = a.intersection(b);
+        if (a_inters_b == null || a_inters_b.isEmpty()) {
+            return false;
+        }
+
+        double area_aib = a_inters_b.getArea();
+        
+        if (area_aib == 0) {
+            return false;
+        }
+        
+        return area_aib > (0.5d * area_a);
+    }
+    
+    /**
+     * 
+     * @param a assumed to be a (multi)linestring
+     * @param b the (possibly) containing polygon
+     * @return
+     */
+    private static boolean lineIsRatherInside(Geometry a, Geometry b) {
+        
+        if (a == null || b == null || a.isEmpty() || b.isEmpty()) {
+            return false;
+        }
+        
+        double len_a = a.getLength();
+        
+        if (len_a == 0) {
+            return false;
+        }
+        
+        Geometry a_inters_b = null;
+        
+        a_inters_b = a.intersection(b);
+        if (a_inters_b == null || a_inters_b.isEmpty()) {
+            return false;
+        }
+
+        double len_aib = a_inters_b.getLength();
+        
+        if (len_aib == 0) {
+            return false;
+        }
+        
+        return len_aib > (0.5d * len_a);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/SplitGeometryCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractSurfaceCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractSurfaceCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractSurfaceCADTool.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.primitive.Surface;
+
+/**
+ * Parent class for tools which create Surface geometries.
+ * 
+ * @author gvSIG team
+ */
+public abstract class AbstractSurfaceCADTool extends DefaultCADTool {
+
+    private static final int TYPE_MULTISURFACE = 1;
+
+    @Override
+    public Feature insertAndSelectGeometry(Geometry geometry) {
+        if (getSupportedTypes()[TYPE_MULTISURFACE].isTypeOf(getGeometryType())) {
+            MultiSurface multiSurface = createMultiSurface();
+            multiSurface.addSurface((Surface) geometry);
+            return super.insertAndSelectGeometry(multiSurface);
+        } else {
+            return super.insertAndSelectGeometry(geometry);
+        }
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { getSupportedPrimitiveGeometryType(), MULTISURFACE };
+    }
+
+    protected abstract int getSupportedPrimitiveGeometryType();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractSurfaceCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/StretchCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/StretchCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/StretchCADTool.java	(revision 42196)
@@ -0,0 +1,378 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.StretchCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.StretchCADToolContext.StretchCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Herramienta para estirar los handlers que seleccionemos previamente.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class StretchCADTool extends DefaultCADTool {
+
+    protected StretchCADToolContext _fsm;
+    protected Point2D selfirstPoint;
+    protected Point2D sellastPoint;
+    protected Point2D movefirstPoint;
+    protected Point2D movelastPoint;
+    protected Rectangle2D rect = null;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new StretchCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_stretch");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        StretchCADToolState actualState =
+            (StretchCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Stretch.SelFirstPoint")) {
+            selfirstPoint = new Point2D.Double(x, y);
+        } else
+            if (status.equals("Stretch.SelLastPoint")) {
+                sellastPoint = new Point2D.Double(x, y);
+
+                double x1;
+                double y1;
+                double w1;
+                double h1;
+
+                if (selfirstPoint.getX() < sellastPoint.getX()) {
+                    x1 = selfirstPoint.getX();
+                    w1 = sellastPoint.getX() - selfirstPoint.getX();
+                } else {
+                    x1 = sellastPoint.getX();
+                    w1 = selfirstPoint.getX() - sellastPoint.getX();
+                }
+
+                if (selfirstPoint.getY() < sellastPoint.getY()) {
+                    y1 = selfirstPoint.getY();
+                    h1 = sellastPoint.getY() - selfirstPoint.getY();
+                } else {
+                    y1 = sellastPoint.getY();
+                    h1 = selfirstPoint.getY() - sellastPoint.getY();
+                }
+
+                rect = new Rectangle2D.Double(x1, y1, w1, h1);
+            } else
+                if (status.equals("Stretch.MoveFirstPoint")) {
+                    movefirstPoint = new Point2D.Double(x, y);
+                } else
+                    if (status.equals("Stretch.MoveLastPoint")) {
+                        VectorialLayerEdited vle = getVLE();
+                        FeatureStore featureStore = null;
+                        DisposableIterator iterator = null;
+                        try {
+                            featureStore = vle.getFeatureStore();
+
+                            // VectorialEditableAdapter vea=vle.getVEA();
+                            featureStore.beginEditingGroup(getName());
+                            // ArrayList selectedRow=getSelectedRows();
+                            // ArrayList selectedRowAux = new ArrayList();
+                            // PluginServices.getMDIManager().setWaitCursor();
+                            movelastPoint = new Point2D.Double(x, y);
+
+                            Handler[] handlers = null;
+
+                            // for (int i = selectedGeometries.nextSetBit(0); i
+                            // >= 0;
+                            // i = selectedGeometries.nextSetBit(i + 1)) {
+                            iterator =
+                                ((FeatureSelection) featureStore.getSelection())
+                                    .iterator();
+                            while (iterator.hasNext()) {
+                                Feature feature = (Feature) iterator.next();
+
+                                // }
+                                // for (int i =0;i<selectedRow.size(); i++) {
+                                // IRowEdited edRow = (IRowEdited)
+                                // selectedRow.get(i);
+                                // DefaultFeature fea = (DefaultFeature)
+                                // edRow.getLinkedRow().cloneRow();
+                                Geometry geometry = null;
+                                geometry =
+                                    (feature.getDefaultGeometry())
+                                        .cloneGeometry();
+
+                                handlers =
+                                    geometry
+                                        .getHandlers(Geometry.STRETCHINGHANDLER);
+
+                                for (int j = 0; j < handlers.length; j++) {
+                                    if (rect.contains(handlers[j].getPoint())) {
+                                        handlers[j].move(movelastPoint.getX()
+                                            - movefirstPoint.getX(),
+                                            movelastPoint.getY()
+                                                - movefirstPoint.getY());
+                                    }
+                                }
+                                super.updateGeometry(featureStore, feature, geometry);
+//                                EditableFeature eFeature =
+//                                    feature.getEditable();
+//                                eFeature.setGeometry(featureStore
+//                                    .getDefaultFeatureType()
+//                                    .getDefaultGeometryAttributeName(),
+//                                    geometry);
+//                                // vea.modifyRow(edRow.getIndex(),fea,getName(),EditionEvent.GRAPHIC);
+//                                featureStore.update(eFeature);
+//                                // selectedRowAux.add(feature);
+                            }
+                            featureStore.endEditingGroup();
+                            // vle.setSelectionCache(VectorialLayerEdited.NOTSAVEPREVIOUS,
+                            // selectedRowAux);
+
+                            // PluginServices.getMDIManager().restoreCursor();
+                        } catch (DataException e) {
+                            NotificationManager.addError(e.getMessage(), e);
+                        } finally {
+                            if (iterator != null) {
+                                iterator.dispose();
+                            }
+                        }
+                    }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        StretchCADToolState actualState = (_fsm).getState();
+        String status = actualState.getName();
+
+        // ArrayList selectedRow = getSelectedRows();
+        DisposableIterator iterator = null;
+        try {
+            iterator =
+                ((FeatureSelection) getVLE().getFeatureStore().getSelection())
+                    .iterator();
+            if (status.equals("Stretch.SelLastPoint")) {
+                GeneralPathX elShape =
+                    new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 4);
+                elShape.moveTo(selfirstPoint.getX(), selfirstPoint.getY());
+                elShape.lineTo(x, selfirstPoint.getY());
+                elShape.lineTo(x, y);
+                elShape.lineTo(selfirstPoint.getX(), y);
+                elShape.lineTo(selfirstPoint.getX(), selfirstPoint.getY());
+
+                renderer.draw(createCurve(elShape),
+                    mapControlManager.getAxisReferenceSymbol());
+            } else
+                if (status.equals("Stretch.MoveFirstPoint")) {
+
+                    Handler[] handlers = null;
+                    while (iterator.hasNext()) {
+                        Feature feature = (Feature) iterator.next();
+
+                        Geometry geometry = null;
+                        geometry =
+                            (feature.getDefaultGeometry()).cloneGeometry();
+
+                        handlers =
+                            geometry.getHandlers(Geometry.STRETCHINGHANDLER);
+
+                        for (int j = 0; j < handlers.length; j++) {
+                            if (rect.contains(handlers[j].getPoint())) {
+                                renderer.drawHandlers(handlers,
+                                    getCadToolAdapter().getMapControl()
+                                        .getViewPort().getAffineTransform(),
+                                    mapControlManager.getHandlerSymbol());
+                            }
+                        }
+                    }
+                } else
+                    if (status.equals("Stretch.MoveLastPoint")) {
+                        Handler[] handlers = null;
+                        while (iterator.hasNext()) {
+                            Feature feature = (Feature) iterator.next();
+                            // for (int i = 0;i<selectedRow.size();i++) {
+                            // IRowEdited edRow = (IRowEdited)
+                            // selectedRow.get(i);
+                            // DefaultFeature fea = (DefaultFeature)
+                            // edRow.getLinkedRow().cloneRow();
+                            Geometry geometry = null;
+                            geometry =
+                                (feature.getDefaultGeometry()).cloneGeometry();
+
+                            handlers =
+                                geometry
+                                    .getHandlers(Geometry.STRETCHINGHANDLER);
+
+                            for (int j = 0; j < handlers.length; j++) {
+                                if (rect.contains(handlers[j].getPoint())) {
+                                    handlers[j].move(x - movefirstPoint.getX(),
+                                        y - movefirstPoint.getY());
+                                }
+                            }
+                            renderer.draw(geometry,
+                                mapControlManager.getAxisReferenceSymbol());
+                        }
+                    }
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "stretch_");
+    }
+
+    public String toString() {
+        return "_stretch";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { CURVE, SURFACE, AGGREGATE, MULTICURVE,
+            MULTISURFACE, CIRCLE, ARC, ELLIPSE, SPLINE, ELLIPTICARC };
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/StretchCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ComplexSelectionCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ComplexSelectionCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ComplexSelectionCADTool.java	(revision 42196)
@@ -0,0 +1,542 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.ComplexSelectionCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.ComplexSelectionCADToolContext.ComplexSelectionCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+@SuppressWarnings({ "rawtypes", "unchecked" })
+public class ComplexSelectionCADTool extends SelectionCADTool {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(ComplexSelectionCADTool.class);
+
+    protected ComplexSelectionCADToolContext _fsm;
+    protected List pointsPolygon = new ArrayList();
+
+    /**
+     * Crea un nuevo ComplexSelectionCADTool.
+     */
+    public ComplexSelectionCADTool() {
+        type = "";
+    }
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new ComplexSelectionCADToolContext(this);
+        setNextTool("complex_selection");
+
+        setType("");
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param selection
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        if (event != null && ((MouseEvent) event).getClickCount() == 2) {
+            try {
+                pointDoubleClick(((MapControl) event.getComponent())
+                    .getMapContext());
+            } catch (ReadException e) {
+                NotificationManager.addError(e.getMessage(), e);
+            }
+            return;
+        }
+        ComplexSelectionCADToolState actualState =
+            (ComplexSelectionCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        LOG.info("PREVIOUSSTATE =" + status);
+        LOG.info("STATUS ACTUAL = " + _fsm.getTransition());
+        if (status.equals("Selection.FirstPoint")) {
+            firstPoint = new Point2D.Double(x, y);
+            pointsPolygon.add(firstPoint);
+        } else if (status.equals("Selection.SecondPoint")) {
+
+        } else if (status.equals("Selection.WithSelectedFeatures")) {
+
+        } else if (status.equals("Selection.WithHandlers")) {
+            FeatureStore featureStore = null;
+            try {
+                VectorialLayerEdited vle = getVLE();
+                featureStore = vle.getFeatureStore();
+                addPointWithHandlers(x, y, featureStore,
+                    vle.getSelectedHandler());
+            } catch (ReadException e) {
+                LOG.error("Error getting the feature store");
+            }
+        } else if (status.equals("Selection.NextPointPolygon")) {
+            pointsPolygon.add(new Point2D.Double(x, y));
+        } else if (status.equals("Selection.SecondPointCircle")) {
+            selectWithCircle(x, y, event);
+        }
+    }
+
+    /**
+     * Receives second point
+     * 
+     * @param x
+     * @param y
+     * @return numFeatures selected
+     */
+    public long selectWithSecondPointOutRectangle(double x, double y,
+        InputEvent event) {
+        Point2D lastPoint = new Point2D.Double(x, y);
+        Surface surface = createSurface();
+        surface.addMoveToVertex(createPoint(firstPoint.getX(),
+            firstPoint.getY()));
+        surface.addVertex(createPoint(lastPoint.getX(), firstPoint.getY()));
+        surface.addVertex(createPoint(lastPoint.getX(), lastPoint.getY()));
+        surface.addVertex(createPoint(firstPoint.getX(), lastPoint.getY()));
+        surface.closePrimitive();
+        return selectWithPolygon(surface);
+    }
+
+    /**
+     * Receives second point
+     * 
+     * @param x
+     * @param y
+     * @return numFeatures selected
+     */
+    public long selectWithCircle(double x, double y, InputEvent event) {
+        Geometry circle = createCircle(firstPoint, new Point2D.Double(x, y));
+        return selectWithPolygon(circle);
+    }
+
+    public long selectWithPolygon(Geometry polygon) {
+        VectorialLayerEdited vle = getVLE();
+        PluginServices.getMDIManager().setWaitCursor();
+
+        if (getType().equals(PluginServices.getText(this, "inside_circle"))
+            || getType().equals(PluginServices.getText(this, "inside_polygon"))) {
+            vle.selectContainsSurface(polygon);
+        } else
+            if (getType().equals(PluginServices.getText(this, "cross_circle"))
+                || getType().equals(
+                    PluginServices.getText(this, "cross_polygon"))) {
+                vle.selectIntersectsSurface(polygon);
+            } else
+                if (getType()
+                    .equals(PluginServices.getText(this, "out_circle"))
+                    || getType().equals(
+                        PluginServices.getText(this, "out_polygon"))
+                    || getType().equals(
+                        PluginServices.getText(this, "out_rectangle"))) {
+                    vle.selectOutPolygon(polygon);
+                }
+        long countSelection = 0;
+        try {
+            countSelection =
+                ((FeatureSelection) vle.getFeatureStore().getSelection())
+                    .getSize();
+        } catch (ReadException e) {
+            LOG.error("Error reading the store", e);
+        } catch (DataException e) {
+            LOG.error("Error reading the store", e);
+        }
+        PluginServices.getMDIManager().restoreCursor();
+        if (countSelection > 0) {
+            nextState = "Selection.WithSelectedFeatures";
+            end();
+        } else {
+            nextState = "Selection.FirstPoint";
+        }
+        return countSelection;
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        ComplexSelectionCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Selection.SecondPoint")
+            || status.equals("Selection.SecondPointOutRectangle")) {
+            drawRectangle(renderer, x, y);
+        } else
+            if (status.equals("Selection.SecondPointCircle")) {
+                drawSecondPointCircle(renderer, x, y);
+            } else
+                if (status.equals("Selection.NextPointPolygon")) {
+                    drawNextPointPolygon(renderer, x, y);
+                } else
+                    if (status.equals("Selection.WithHandlers")) {
+                        VectorialLayerEdited vle = getVLE();
+                        drawWithHandlers(renderer, x, y,
+                            vle.getSelectedHandler());
+                    }
+    }
+
+    /**
+     * Draw method for the nexp point of a polygon.
+     * 
+     * @param mapControlDrawer
+     *            object used to draw.
+     * @param x
+     *            selected x coordinate.
+     * @param y
+     *            selected y coordinate.
+     */
+    private void drawNextPointPolygon(MapControlDrawer mapControlDrawer,
+        double x, double y) {
+        // Dibuja el pol�gono de selecci�n
+        Geometry curve =
+            createOrientablePrimitive(new Point2D.Double(x, y),
+                Geometry.TYPES.CURVE);
+        mapControlDrawer.draw(curve,
+            mapControlManager.getGeometrySelectionSymbol());
+    }
+
+    /**
+     * Draw method for the second point of a "rectangle".
+     * 
+     * @param mapControlDrawer
+     *            object used to draw.
+     * @param x
+     *            selected x coordinate.
+     * @param y
+     *            selected y coordinate.
+     */
+    private void drawRectangle(MapControlDrawer mapControlDrawer, double x,
+        double y) {
+        Curve curve =
+            createEnvelopeLikeCurve(firstPoint, new Point2D.Double(x, y));
+        mapControlDrawer.draw(curve);
+    }
+
+    /**
+     * Draw method for the second point of the "circle" option
+     * 
+     * @param mapControlDrawer
+     *            object used to draw.
+     * @param x
+     *            selected x coordinate.
+     * @param y
+     *            selected y coordinate.
+     */
+    private void drawSecondPointCircle(MapControlDrawer mapControlDrawer,
+        double x, double y) {
+        Geometry circle = createCircle(firstPoint, new Point2D.Double(x, y));
+        GeneralPathX gpx = new GeneralPathX();
+        gpx.append(circle.getInternalShape().getPathIterator(null), true);
+        Geometry circleSel = createCurve(gpx);
+        // Draw the circle
+        mapControlDrawer.draw(circleSel,
+            mapControlManager.getGeometrySelectionSymbol());
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        ComplexSelectionCADToolState actualState =
+            (ComplexSelectionCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        LOG.info("PREVIOUSSTATE =" + status);
+        LOG.info("STATUS ACTUAL = " + _fsm.getTransition());
+        if (s.equals(PluginServices.getText(this, "cancel"))) {
+            init();
+            try {
+                clearSelection();
+            } catch (DataException e) {
+                LOG.error("Error canceling the selection", e);
+            }
+            return;
+        } else
+            if (s.equals(PluginServices.getText(this, "select_all"))) {
+                // The selct all is made in the context
+                init();
+                return;
+            }
+        if (status.equals("Selection.FirstPoint")) {
+            setType(s);
+            return;
+        } else
+            if (status.equals("Selection.NextPointPolygon")) {
+                if (s.equals(PluginServices.getText(this, "end_polygon"))
+                    || s.equalsIgnoreCase(PluginServices.getText(this,
+                        "ComplexSelectionCADTool.end"))) {
+                    selectCurrentSurface();
+                    return;
+                }
+            }
+        init();
+    }
+
+    public long selectCurrentSurface() {
+        Geometry surface =
+            createOrientablePrimitive(null, Geometry.TYPES.SURFACE);
+        GeneralPathX gpx = new GeneralPathX();
+        gpx.append(surface.getPathIterator(null), true);
+        if (gpx.isCCW()) {
+            gpx.flip();
+            surface = createSurface(gpx);
+        }
+        pointsPolygon.clear();
+        return selectWithPolygon(surface);
+    }
+
+    public long selectAll() {
+        VectorialLayerEdited vle = getVLE();
+        PluginServices.getMDIManager().setWaitCursor();
+        vle.selectAll();
+        long countSelection = 0;
+        try {
+            countSelection =
+                ((FeatureSelection) vle.getFeatureStore().getSelection())
+                    .getSize();
+        } catch (ReadException e) {
+            LOG.error("Error reading the store", e);
+        } catch (DataException e) {
+            LOG.error("Error reading the store", e);
+        }
+        PluginServices.getMDIManager().restoreCursor();
+        if (countSelection > 0) {
+            nextState = "Selection.WithSelectedFeatures";
+        } else {
+            nextState = "Selection.FirstPoint";
+        }
+        end();
+        return countSelection;
+    }
+
+    private OrientablePrimitive createOrientablePrimitive(Point2D p,
+        int geometryType) {
+        Point2D[] points = (Point2D[]) pointsPolygon.toArray(new Point2D[0]);
+        OrientablePrimitive orientablePrimitive =
+            createOrientablePrimitive(geometryType);
+
+        for (int i = 0; i < points.length; i++) {
+            if (i == 0) {
+                orientablePrimitive.addMoveToVertex(createPoint(
+                    points[i].getX(), points[i].getY()));
+            } else {
+                orientablePrimitive.addVertex(createPoint(points[i].getX(),
+                    points[i].getY()));
+            }
+        }
+        if (p != null) {
+            orientablePrimitive.addVertex(createPoint(p.getX(), p.getY()));
+        }
+        orientablePrimitive.closePrimitive();
+        return orientablePrimitive;
+    }
+
+    public void addValue(double d) {
+
+    }
+
+    public void end() {
+        if (!getNextTool().equals("complex_selection")) {
+            CADExtension.setCADTool(getNextTool(), false);
+        }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "complex_selection_");
+    }
+
+    public boolean selectFeatures(double x, double y, InputEvent event) {
+        ComplexSelectionCADToolState actualState = _fsm.getState();
+
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+
+        if ((status.equals("Selection.FirstPoint"))
+            || (status.equals("Selection.WithSelectedFeatures"))) {
+            PluginServices.getMDIManager().setWaitCursor();
+            firstPoint = new Point2D.Double(x, y);
+            vle.selectWithPoint(x, y, multipleSelection);
+            PluginServices.getMDIManager().restoreCursor();
+        }
+        long countSelection = 0;
+        try {
+            countSelection =
+                ((FeatureSelection) vle.getFeatureStore().getSelection())
+                    .getSize();
+        } catch (ReadException e) {
+            LOG.error("Error reading the store", e);
+        } catch (DataException e) {
+            LOG.error("Error reading the store", e);
+        }
+        if (countSelection > 0) {
+            nextState = "Selection.WithSelectedFeatures";
+            return true;
+        } else {
+            {
+                nextState = "Selection.SecondPoint";
+                return true;
+            }
+        }
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        if (type.equalsIgnoreCase(PluginServices.getText(this,
+            "ComplexSelectionCADTool.outrectangle"))) {
+            this.type = PluginServices.getText(this, "out_rectangle");
+        } else
+            if (type.equalsIgnoreCase(PluginServices.getText(this,
+                "ComplexSelectionCADTool.intropolygon"))) {
+                this.type = PluginServices.getText(this, "inside_polygon");
+            } else
+                if (type.equalsIgnoreCase(PluginServices.getText(this,
+                    "ComplexSelectionCADTool.crosspolygon"))) {
+                    this.type = PluginServices.getText(this, "cross_polygon");
+                } else
+                    if (type.equalsIgnoreCase(PluginServices.getText(this,
+                        "ComplexSelectionCADTool.outpolygon"))) {
+                        this.type = PluginServices.getText(this, "out_polygon");
+                    } else
+                        if (type.equalsIgnoreCase(PluginServices.getText(this,
+                            "ComplexSelectionCADTool.introcircle"))) {
+                            this.type =
+                                PluginServices.getText(this, "inside_circle");
+                        } else
+                            if (type.equalsIgnoreCase(PluginServices.getText(
+                                this, "ComplexSelectionCADTool.crosscircle"))) {
+                                this.type =
+                                    PluginServices
+                                        .getText(this, "cross_circle");
+                            } else
+                                if (type.equalsIgnoreCase(PluginServices
+                                    .getText(this,
+                                        "ComplexSelectionCADTool.outcircle"))) {
+                                    this.type =
+                                        PluginServices.getText(this,
+                                            "out_circle");
+                                } else
+                                    if (type.equals(PluginServices.getText(
+                                        this, "select_all"))) {
+                                        selectAll();
+                                        init();
+                                    } else {
+                                        this.type = type;
+                                    }
+        pointsPolygon.clear();
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        LOG.info("TRANSITION FROM STATE " + _fsm.getState() + " x= " + x
+            + " y=" + y);
+        try {
+            _fsm.addPoint(x, y, event);
+        } catch (Exception e) {
+            init();
+        }
+        LOG.info("CURRENT STATE: " + getStatus());
+    }
+
+    public String getStatus() {
+        try {
+            ComplexSelectionCADToolState actualState =
+                (ComplexSelectionCADToolState) _fsm.getPreviousState();
+            String status = actualState.getName();
+
+            return status;
+        } catch (NullPointerException e) {
+            return "Selection.FirstPoint";
+        }
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+
+            _fsm.addOption(s);
+
+        }
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public String toString() {
+        return "_complex_selection";
+    }
+
+    public String getNextState() {
+        return nextState;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/ComplexSelectionCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveSurfaceCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveSurfaceCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveSurfaceCADTool.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * Parent class for tools which create Curve or Surface geometries, depending
+ * on the layer geometry type.
+ * 
+ * @author gvSIG team
+ */
+public abstract class AbstractCurveSurfaceCADTool extends DefaultCADTool {
+
+    private static final int TYPE_CURVE = 0;
+    private static final int TYPE_MULTICURVE = 1;
+    private static final int TYPE_MULTISURFACE = 3;
+
+    @Override
+    public Feature insertAndSelectGeometry(Geometry geometry) {
+        Geometry finalGeometry = geometry;
+        GeometryType type = getGeometryType();
+
+        GeometryType[] types = getSupportedTypes();
+
+        if (types[TYPE_MULTICURVE].isTypeOf(type)) {
+            MultiCurve mcurve = createMultiCurve();
+            mcurve.addCurve((Curve) geometry);
+            finalGeometry = mcurve;
+        } else
+            if (types[TYPE_MULTISURFACE].isTypeOf(type)) {
+                MultiSurface msurface = createMultiSurface();
+                msurface.addSurface((Surface) geometry);
+                finalGeometry = msurface;
+            }
+
+        return super.insertAndSelectGeometry(finalGeometry);
+    }
+
+    protected OrientablePrimitive createOrientablePrimitive() {
+        GeometryType type = getGeometryType();
+
+        GeometryType[] types = getSupportedTypes();
+
+        if (types[TYPE_CURVE].isTypeOf(type)
+            || types[TYPE_MULTICURVE].isTypeOf(type)) {
+            return createCurve();
+        } else { // SURFACE or MULTISURFACE
+            return createSurface();
+        }
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { CURVE, MULTICURVE, SURFACE, MULTISURFACE };
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/AbstractCurveSurfaceCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EditVertexCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EditVertexCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EditVertexCADTool.java	(revision 42196)
@@ -0,0 +1,807 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.Component;
+import java.awt.event.InputEvent;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.IEditionManager;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.EditVertexCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.EditVertexCADToolContext.EditVertexCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class EditVertexCADTool extends DefaultCADTool {
+
+    protected EditVertexCADToolContext _fsm;
+    protected int numSelect = 0;
+    protected int numHandlers;
+    protected boolean addVertex = false;
+    
+    private static Logger logger =
+        LoggerFactory.getLogger(EditVertexCADTool.class);
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new EditVertexCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_editvertex");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        selectHandler(x, y);
+        addVertex = false;
+    }
+
+    private Geometry getSelectedGeometry() {
+        FeatureSet selection = null;
+        DisposableIterator iterator = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            Feature feature = null;
+            Geometry ig = null;
+            if (selection.getSize() == 1) {
+                iterator = selection.iterator();
+                feature = (Feature) iterator.next();
+                ig = (feature.getDefaultGeometry()).cloneGeometry();
+                return ig;
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            DisposeUtils.dispose(iterator);
+        }
+
+        return null;
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        drawVertex(renderer, getCadToolAdapter().getMapControl().getViewPort());
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        EditVertexCADToolState actualState =
+            (EditVertexCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        DisposableIterator iterator = null;
+        try {
+            featureStore = vle.getFeatureStore();
+
+            FeatureSet selection = (FeatureSet) featureStore.getSelection();
+            Feature feature = null;
+            Geometry ig = null;
+            Handler[] handlers = null;
+            if (selection.getSize() == 1) {
+                iterator = selection.iterator();
+                feature = (Feature) iterator.next();
+                ig = (feature.getDefaultGeometry()).cloneGeometry();
+                handlers = ig.getHandlers(Geometry.SELECTHANDLER);
+                numHandlers = handlers.length;
+                if (numHandlers == 0) {
+                    try {
+                        featureStore.delete(feature);
+                    } catch (ReadException e) {
+                        NotificationManager.addError(e.getMessage(), e);
+                    } catch (DataException e) {
+                        NotificationManager.addError(e.getMessage(), e);
+                    }
+                }
+            } else {
+                JOptionPane.showMessageDialog((Component) PluginServices
+                    .getMainFrame(), PluginServices.getText(this,
+                    "hay_mas_de_una_geometria_seleccionada"));
+            }
+
+            int diff = 1;// En el caso de ser pol�gono.
+            /*
+            if (ig instanceof MultiPrimitive) {
+                diff = 2;
+            }
+            */
+
+            if (status.equals("EditVertex.SelectVertexOrDelete")) {
+                if (s.equalsIgnoreCase(PluginServices.getText(this,
+                    "EditVertexCADTool.nextvertex"))
+                    || s.equals(PluginServices.getText(this, "next"))) {
+                    
+                    numSelect = numSelect + diff;
+                    if (numSelect > (numHandlers - 1)) {
+                        numSelect = numSelect - (numHandlers);
+                    }
+                    
+                } else
+                    if (s.equalsIgnoreCase(PluginServices.getText(this,
+                        "EditVertexCADTool.previousvertex"))
+                        || s.equals(PluginServices.getText(this, "previous"))) {
+
+                        numSelect = numSelect - diff;
+                        if (numSelect < 0) {
+                            numSelect = numHandlers - 1 + (numSelect + 1);
+                        }
+
+                    } else
+                        if (s.equalsIgnoreCase(PluginServices.getText(this,
+                            "EditVertexCADTool.delvertex"))
+                            || s.equals(PluginServices.getText(this, "del"))) {
+                            if (handlers != null) {
+                                Geometry newGeometry = null;
+                                if (ig instanceof MultiPrimitive) {
+                                    newGeometry =
+                                        removeVertexGC((MultiPrimitive) ig,
+                                            handlers[numSelect]);
+                                } else {
+                                    newGeometry =
+                                        removeVertex(ig, handlers[numSelect]);
+                                }
+                                super.updateGeometry(featureStore, feature, newGeometry);
+//                                try {
+//                                    EditableFeature eFeature =
+//                                        feature.getEditable();
+//                                    eFeature.setGeometry(featureStore
+//                                        .getDefaultFeatureType()
+//                                        .getDefaultGeometryAttributeName(),
+//                                        newGeometry);
+//                                    featureStore.update(eFeature);
+//
+//                                } catch (ReadException e) {
+//                                    NotificationManager.addError(
+//                                        e.getMessage(), e);
+//                                } catch (DataException e) {
+//                                    // TODO Auto-generated catch block
+//                                    e.printStackTrace();
+//                                }
+                            }
+                        } else
+                            if (s.equalsIgnoreCase(PluginServices.getText(this,
+                                "EditVertexCADTool.addvertex"))
+                                || s.equals(PluginServices.getText(this, "add"))) {
+                                addVertex = true;
+                            }
+            }
+        } catch (Exception e1) {
+            
+            ApplicationLocator.getManager().message(
+                e1.getMessage(), JOptionPane.ERROR_MESSAGE);
+            logger.info("Error in add option.", e1);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    private void drawVertex(MapControlDrawer renderer, ViewPort vp) {
+        VectorialLayerEdited vle = getVLE();
+        DisposableIterator iterator = null;
+        try {
+            iterator =
+                ((FeatureSelection) vle.getFeatureStore().getSelection())
+                    .iterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+
+                Geometry ig = (feature.getDefaultGeometry()).cloneGeometry();
+                // renderer.draw(ig,
+                // mapControlManager.getGeometrySelectionSymbol());
+
+                Handler[] handlers = ig.getHandlers(Geometry.SELECTHANDLER);
+                if (numSelect >= handlers.length) {
+                    numSelect = 0;
+                }
+                if (handlers.length == 0)
+                    continue;
+                renderer.drawHandler(handlers[numSelect],
+                    vp.getAffineTransform());
+            }
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    private Geometry removeVertex(Geometry gp, Handler hand) {
+        GeneralPathX newGp = new GeneralPathX();
+        double[] theData = new double[6];
+
+        PathIterator theIterator;
+        int theType;
+        int numParts = 0;
+
+        Point2D ptSrc = new Point2D.Double();
+        boolean bFirst = false;
+
+        theIterator = gp.getPathIterator(null, geomManager.getFlatness());
+        int numSegmentsAdded = 0;
+        while (!theIterator.isDone()) {
+            theType = theIterator.currentSegment(theData);
+            if (bFirst) {
+                newGp.moveTo(theData[0], theData[1]);
+                numSegmentsAdded++;
+                bFirst = false;
+                theIterator.next();
+                continue;
+            }
+            switch (theType) {
+
+            case PathIterator.SEG_MOVETO:
+                numParts++;
+                ptSrc.setLocation(theData[0], theData[1]);
+                if (ptSrc.equals(hand.getPoint())) {
+                    numParts--;
+                    bFirst = true;
+                    break;
+                }
+                newGp.moveTo(ptSrc.getX(), ptSrc.getY());
+                numSegmentsAdded++;
+                bFirst = false;
+                break;
+
+            case PathIterator.SEG_LINETO:
+                ptSrc.setLocation(theData[0], theData[1]);
+                if (ptSrc.equals(hand.getPoint())) {
+                    break;
+                }
+                newGp.lineTo(ptSrc.getX(), ptSrc.getY());
+                bFirst = false;
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                newGp.quadTo(theData[0], theData[1], theData[2], theData[3]);
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                newGp.curveTo(theData[0], theData[1], theData[2], theData[3],
+                    theData[4], theData[5]);
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                if (numSegmentsAdded < 3) {
+                    newGp.lineTo(theData[0], theData[1]);
+                }
+                newGp.closePath();
+
+                break;
+            } // end switch
+
+            theIterator.next();
+        } // end while loop
+        Geometry shp = null;
+        switch (gp.getType()) {
+        case Geometry.TYPES.POINT: // Tipo punto
+            shp = createPoint(ptSrc.getX(), ptSrc.getY());
+            break;
+
+        case Geometry.TYPES.CURVE:
+            shp = createCurve(newGp);
+            break;
+        case Geometry.TYPES.SURFACE:
+            shp = createSurface(newGp);
+            break;
+        }
+        Geometry ig = shp;
+        int dif = 1;// En el caso de ser pol�gono.
+        numSelect = numSelect - dif;
+        if (numSelect < 0) {
+            numSelect = numHandlers - 1 + (numSelect + 1);
+        }
+        return ig;
+    }
+    
+    private Geometry removeVertexGC(MultiPrimitive gc, Handler handler)
+            throws GeometryOperationNotSupportedException,
+            GeometryOperationException, CreateGeometryException {
+
+            Primitive prim = null;
+            int np = gc.getPrimitivesNumber();
+            
+            for (int i = 0; i < np; i++) {
+                prim = gc.getPrimitiveAt(i);
+                Handler[] hh = prim.getHandlers(Geometry.SELECTHANDLER);
+                int nh = hh.length;
+                for (int j=0; j<nh; j++) {
+                    if (hh[j].equalsPoint(handler)) {
+                        /*
+                         * Find the first primitive which has a handler
+                         * matching received handler
+                         */
+                        Geometry resp = this.removeVertex(prim, handler);
+                        for (int k=0; k<np; k++) {
+                            if (k != i) {
+                                resp = resp.union(gc.getPrimitiveAt(k));
+                            }
+                        }
+                        if (resp.getType() == Geometry.TYPES.SURFACE){
+                        	MultiSurface geom = createMultiSurface();
+                        	geom.addSurface((Surface)resp);
+                        	return geom;
+                        }else if (resp.getType() == Geometry.TYPES.POINT){
+                        	MultiPoint geom = createMultiPoint();
+                        	geom.addPoint((Point)resp);
+                        	return geom;
+                        }else if (resp.getType() == Geometry.TYPES.CURVE){
+                        	MultiCurve geom = createMultiCurve();
+                        	geom.addCurve((Curve)resp);
+                        	return geom;
+                    	}
+                        return resp;
+                    }
+                }
+            }
+            throw new CreateGeometryException(
+                new Exception("Unable to remove vertex"));
+        
+    }
+    
+
+
+    private Geometry addVertex(Geometry geome, Point2D p, Rectangle2D rect) {
+        Geometry geometryCloned = geome.cloneGeometry();
+        Geometry geom1 = null;
+        GeneralPathX gpxAux;
+        boolean finish = false;
+        // FGeometry geom2=null;
+
+        // if (geometryCloned.getGeometryType() == FShape.POLYGON){
+        // ///////////////
+
+        GeneralPathX newGp = new GeneralPathX();
+        double[] theData = new double[6];
+
+        PathIterator theIterator;
+        int theType;
+        int numParts = 0;
+        Point2D pLast = new Point2D.Double();
+        Point2D pAnt = new Point2D.Double();
+        Point2D firstPoint = null;
+        theIterator = geome.getPathIterator(null, geomManager.getFlatness()); // ,
+                                                                              // flatness);
+        int numSegmentsAdded = 0;
+        while (!theIterator.isDone()) {
+            theType = theIterator.currentSegment(theData);
+            switch (theType) {
+            case PathIterator.SEG_MOVETO:
+                pLast.setLocation(theData[0], theData[1]);
+                if (numParts == 0) {
+                    firstPoint = (Point2D) pLast.clone();
+                }
+                numParts++;
+
+                gpxAux = new GeneralPathX();
+                gpxAux.moveTo(pAnt.getX(), pAnt.getY());
+                gpxAux.lineTo(pLast.getX(), pLast.getY());
+                geom1 = createCurve(gpxAux);
+                if (geom1.intersects(rect)) {
+                    finish = true;
+                    newGp.moveTo(pLast.getX(), pLast.getY());
+                    // newGp.lineTo(pLast.getX(),pLast.getY());
+                } else {
+                    newGp.moveTo(pLast.getX(), pLast.getY());
+                }
+                pAnt.setLocation(pLast.getX(), pLast.getY());
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_LINETO:
+                pLast.setLocation(theData[0], theData[1]);
+                gpxAux = new GeneralPathX();
+                gpxAux.moveTo(pAnt.getX(), pAnt.getY());
+                gpxAux.lineTo(pLast.getX(), pLast.getY());
+                geom1 = createCurve(gpxAux);
+                if (geom1.intersects(rect)) {
+                    newGp.lineTo(p.getX(), p.getY());
+                    newGp.lineTo(pLast.getX(), pLast.getY());
+                } else {
+                    newGp.lineTo(pLast.getX(), pLast.getY());
+                }
+                pAnt.setLocation(pLast.getX(), pLast.getY());
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_QUADTO:
+                newGp.quadTo(theData[0], theData[1], theData[2], theData[3]);
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_CUBICTO:
+                newGp.curveTo(theData[0], theData[1], theData[2], theData[3],
+                    theData[4], theData[5]);
+                numSegmentsAdded++;
+                break;
+
+            case PathIterator.SEG_CLOSE:
+                // if (numSegmentsAdded < 3){
+                gpxAux = new GeneralPathX();
+                gpxAux.moveTo(pAnt.getX(), pAnt.getY());
+                gpxAux.lineTo(firstPoint.getX(), firstPoint.getY());
+                geom1 = createCurve(gpxAux);
+                if (geom1.intersects(rect) || finish) {
+                    newGp.lineTo(p.getX(), p.getY());
+                    // newGp.lineTo(pLast.getX(), pLast.getY());
+                } else {
+                    newGp.lineTo(pLast.getX(), pLast.getY());
+                }
+                // }
+                newGp.closePath();
+                break;
+            } // end switch
+
+            theIterator.next();
+        } // end while loop
+        Geometry shp = null;
+        switch (geometryCloned.getType()) {
+        case POINT: // Tipo punto
+            shp = createPoint(pLast.getX(), pLast.getY());
+            break;
+
+        case CURVE:
+            shp = createCurve(newGp);
+            break;
+        case SURFACE:
+        case CIRCLE:
+        case ELLIPSE:
+            shp = createSurface(newGp);
+            break;
+        }
+        return shp;
+    }
+
+    private Geometry addVertexGC(
+        MultiPrimitive mpri,
+        Point2D p,
+        Rectangle2D rect)
+            throws GeometryOperationNotSupportedException,
+            GeometryOperationException, CreateGeometryException
+            {
+        
+        int n = mpri.getPrimitivesNumber();
+        Primitive item = null;
+        for (int i=0; i<n; i++) {
+            item = mpri.getPrimitiveAt(i);
+            if (item.intersects(rect)) {
+                /*
+                 * Only the first primitive that intersects
+                 * with rect will be treated
+                 */
+                Geometry newg = this.addVertex(item, p, rect);
+                for (int k=0; k<n; k++) {
+                    if (k != i) {
+                        newg = newg.union(mpri.getPrimitiveAt(k));
+                    }
+                    return newg;
+                }
+            }
+        }
+        throw new CreateGeometryException(
+            new Exception("Unable to add vertex"));
+
+        /*
+    	Geometry[] geoms = new Geometry[gc.getPrimitivesNumber()];
+    	for( int i=0; i<gc.getPrimitivesNumber(); i++) {
+    		geoms[i] = gc.getPrimitiveAt(i);
+    	}
+  	
+        int pos = -1;
+        for (int i = 0; i < geoms.length; i++) {
+            if (geoms[i].intersects(rect)) {
+                pos = i;
+            }
+        }
+        ArrayList newGeoms = new ArrayList();
+        for (int i = 0; i < pos; i++) {
+            newGeoms.add(geoms[i]);
+        }
+        if (pos != -1) {
+            GeneralPathX gpx1 = new GeneralPathX();
+            GeneralPathX gpx2 = new GeneralPathX();
+            Handler[] handlers = geoms[pos].getHandlers(Geometry.SELECTHANDLER);
+            Point2D p1 = handlers[0].getPoint();
+            Point2D p2 = p;
+            Point2D p3 = handlers[handlers.length - 1].getPoint();
+            gpx1.moveTo(p1.getX(), p1.getY());
+            gpx1.lineTo(p2.getX(), p2.getY());
+            gpx2.moveTo(p2.getX(), p2.getY());
+            gpx2.lineTo(p3.getX(), p3.getY());
+            newGeoms.add(createCurve(gpx1));
+            newGeoms.add(createCurve(gpx2));
+            for (int i = pos + 1; i < geoms.length; i++) {
+                newGeoms.add(geoms[i]);
+            }
+            return createMultiPrimitive((Geometry[]) newGeoms
+                .toArray(new Geometry[0]));
+        } else {
+            return null;
+        }
+        */
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "edit_vertex_");
+    }
+
+    private void selectHandler(double x, double y) {
+        Point2D firstPoint = new Point2D.Double(x, y);
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        DisposableIterator iterator = null;
+        DisposableIterator selectedIterator = null;
+        
+        IEditionManager ed_man = this.getEditionManager();
+
+        try {
+            featureStore = vle.getFeatureStore();
+
+            iterator =
+                ((FeatureSelection) featureStore.getSelection()).iterator();
+            double tam =
+                getCadToolAdapter().getMapControl().getViewPort()
+                    .toMapDistance(mapControlManager.getTolerance());
+            Rectangle2D rect =
+                new Rectangle2D.Double(firstPoint.getX() - tam,
+                    firstPoint.getY() - tam, tam * 2, tam * 2);
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+
+                boolean isSelectedHandler = false;
+                Geometry geometry = getSelectedGeometry();
+                if (geometry != null) {
+                    Handler[] handlers =
+                        geometry.getHandlers(Geometry.SELECTHANDLER);
+                    for (int h = 0; h < handlers.length; h++) {
+                        if (handlers[h].getPoint().distance(firstPoint) < tam) {
+                            numSelect = h;
+                            isSelectedHandler = true;
+                            break;
+                        }
+                    }
+
+                    if (!isSelectedHandler) {
+                        boolean isSelectedGeometry = false;
+                        if (geometry.intersects(rect)) { // , 0.1)){
+                            isSelectedGeometry = true;
+                        }
+                        if (isSelectedGeometry && addVertex) {
+                            try {
+                                selectedIterator =
+                                    featureStore.getFeatureSelection()
+                                        .iterator();
+                                Feature feat =
+                                    (Feature) selectedIterator.next();
+                                Point2D posVertex = new Point2D.Double(x, y);
+                                Geometry geom1 =
+                                    (feat.getDefaultGeometry()).cloneGeometry();
+                                Geometry geom = null;
+                                if (geom1 instanceof MultiPrimitive) {
+                                    geom =
+                                        addVertexGC((MultiPrimitive) geom1,
+                                            posVertex, rect);
+                                } else {
+                                    geom = addVertex(geom1, posVertex, rect);
+                                }
+                                if (geom != null) {
+                                    EditableFeature eFeature =
+                                        feature.getEditable();
+                                    eFeature.setGeometry(featureStore
+                                        .getDefaultFeatureType()
+                                        .getDefaultGeometryAttributeName(),
+                                        geom);
+                                    
+                                    ed_man.updateFeature(featureStore, eFeature);
+                                    
+                                    Handler[] newHandlers =
+                                        geom.getHandlers(Geometry.SELECTHANDLER);
+                                    for (int h = 0; h < newHandlers.length; h++) {
+                                        if (newHandlers[h].getPoint().distance(
+                                            posVertex) < tam) {
+                                            numSelect = h;
+                                            isSelectedHandler = true;
+                                        }
+                                    }
+
+                                    // clearSelection();
+                                }
+                            } finally {
+                                if (selectedIterator != null) {
+                                    selectedIterator.dispose();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            
+            ApplicationLocator.getManager().message(
+                e.getMessage(), JOptionPane.ERROR_MESSAGE);
+            logger.info("Error in select handler.", e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+
+    }
+
+    public String toString() {
+        return "_editvertex";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { POINT, MULTIPOINT, CURVE, MULTICURVE, CIRCLE,
+            ELLIPSE, SURFACE, MULTISURFACE };
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/EditVertexCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/InternalPolygonCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/InternalPolygonCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/InternalPolygonCADTool.java	(revision 42196)
@@ -0,0 +1,376 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.Component;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import com.vividsolutions.jts.geom.GeometryCollection;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.IEditionManager;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.InternalPolygonCADToolContext;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class InternalPolygonCADTool extends DefaultCADTool {
+    private static final Logger LOG = LoggerFactory
+        .getLogger(InternalPolygonCADTool.class);
+
+    protected InternalPolygonCADToolContext _fsm;
+    protected List<Point> points = new ArrayList<Point>();
+    protected Geometry geometry = null;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new InternalPolygonCADToolContext(this);
+        points.clear();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet, java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_internalpolygon");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        if (((MouseEvent) event).getClickCount() == 2) {
+            addOption(PluginServices
+                .getText(this, "InternalPolygonCADTool.end"));
+            return;
+        }
+        VectorialLayerEdited vle = getVLE();
+        FeatureSet featureCollection = null;
+        DisposableIterator iterator = null;
+        try {
+            featureCollection =
+                (FeatureSet) vle.getFeatureStore().getSelection();
+            if (featureCollection.getSize() == 1) {
+                iterator = featureCollection.iterator();
+                Feature feature = (Feature) iterator.next();
+                geometry = (feature.getDefaultGeometry()).cloneGeometry();
+                if (geometry.contains(x, y)) {
+                    points.add(createPoint(x, y));
+                } else {
+                    JOptionPane
+                        .showMessageDialog(
+                            ((Component) PluginServices.getMainFrame()),
+                            PluginServices
+                                .getText(this,
+                                    "_Debe_insertar_el_punto_dentro_de_los_limites_del_poligono"));
+                }
+            }
+        } catch (ReadException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            DisposeUtils.dispose(iterator);
+        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        GeneralPathX gpx = new GeneralPathX();
+        GeneralPathX gpx1 = new GeneralPathX();
+
+        if (points.size() > 0) {
+            for (int i = 0; i < points.size(); i++) {
+                if (i == 0) {
+                    gpx.moveTo(points.get(i));
+                    gpx1.moveTo(points.get(i));
+                } else {
+                    gpx.lineTo(points.get(i));
+                    gpx1.lineTo(points.get(i));
+                }
+
+            }
+            gpx.lineTo(createPoint(x, y));
+            gpx.closePath();
+            gpx1.closePath();
+
+            Geometry geom = createSurface(gpx);
+            Geometry geom1 = createSurface(gpx1);
+
+            renderer.draw(geom1, mapControlManager.getSelectionSymbol());
+            renderer.draw(geom, mapControlManager.getGeometrySelectionSymbol());
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        VectorialLayerEdited vle = getVLE();
+        
+        IEditionManager ed_man = this.getEditionManager();
+        
+        FeatureStore featureStore = null;
+        try {
+            featureStore = vle.getFeatureStore();
+        } catch (ReadException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
+        DisposableIterator iterator = null;
+        try {
+            iterator =
+                ((FeatureSelection) featureStore.getSelection()).fastIterator();
+            if (s.equals(PluginServices.getText(this, "end"))
+                || s.equalsIgnoreCase(PluginServices.getText(this,
+                    "InternalPolygonCADTool.end"))) {
+                if (points.size() > 0) {
+                    Feature feature = (Feature) iterator.next();
+                    geometry = (feature.getDefaultGeometry()).cloneGeometry();
+                    if (geometry instanceof GeometryCollection) {
+                        MultiPrimitive gc = (MultiPrimitive) geometry;
+                        geometry = createNewPolygonGC(gc, points);
+                    } else {
+                        geometry = createNewPolygon(geometry, points);
+                    }
+                    try {
+                        EditableFeature eFeature = feature.getEditable();
+                        eFeature.setGeometry(featureStore
+                            .getDefaultFeatureType()
+                            .getDefaultGeometryAttributeName(), geometry);
+                        
+                        ed_man.updateFeature(featureStore, eFeature);
+
+                    } catch (ReadException e) {
+                        NotificationManager.addError(e.getMessage(), e);
+                    } catch (DataException e) {
+                        NotificationManager.addError(e.getMessage(), e);
+                    }
+                    ArrayList rows = new ArrayList();
+                    rows.add(feature);
+                    // vle.setSelectionCache(VectorialLayerEdited.NOTSAVEPREVIOUS,
+                    // rows);
+                }
+                points.clear();
+                refresh();
+
+            } else
+                if (s.equals(PluginServices.getText(this, "cancel"))) {
+                    points.clear();
+                }
+        } catch (DataException e1) {
+            e1.printStackTrace();
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+    }
+
+    private Geometry createNewPolygon(Geometry geometry, List<Point> points) {        
+        Geometry newGeometry = geometry.cloneGeometry();
+                  
+        GeneralPathX gpxInternal = new GeneralPathX();
+        gpxInternal.moveTo(points.get(points.size() - 1));
+        for (int i = points.size() - 2; i >= 0; i--) {
+            gpxInternal.lineTo(points.get(i));
+        }
+        gpxInternal.closePath();
+
+        if (!gpxInternal.isCCW()) {
+            gpxInternal.flip();
+        }
+        
+        if (newGeometry.getGeometryType().isTypeOf(Geometry.TYPES.SURFACE)){
+            GeneralPathX newGp = newGeometry.getGeneralPath();
+            newGp.append(gpxInternal.getPathIterator(null), false);
+        }else if (newGeometry.getGeometryType().isTypeOf(Geometry.TYPES.MULTISURFACE)){
+            MultiSurface multiSurface = (MultiSurface)newGeometry;
+            for (int i=0 ; i<multiSurface.getPrimitivesNumber() ; i++){
+                Surface surcafe = multiSurface.getSurfaceAt(i);
+                try {
+                    if (createSurface(gpxInternal).intersects(surcafe)){
+                        GeneralPathX newGp = surcafe.getGeneralPath();
+                        newGp.append(gpxInternal.getPathIterator(null), false);
+                    }
+                } catch (GeometryOperationNotSupportedException e) {
+                    LOG.error("Erro calculating the intersection", e);
+                } catch (GeometryOperationException e) {
+                    LOG.error("Erro calculating the intersection", e);
+                }
+            }
+        }
+
+        return newGeometry;
+    }
+
+    private Geometry createNewPolygonGC(MultiPrimitive multiPrimitive,
+        List<Point> points) {
+        MultiPrimitive multiPrimitiveAux = createMultiPrimitive();
+
+        for (int i = 0; i < multiPrimitive.getPrimitivesNumber(); i++) {
+            multiPrimitiveAux.addPrimitive(multiPrimitive.getPrimitiveAt(i));
+        }
+
+        GeneralPathX gpx = new GeneralPathX();
+        gpx.moveTo(points.get(points.size() - 1));
+        for (int i = points.size() - 2; i >= 0; i--) {
+            gpx.lineTo(points.get(i));
+            multiPrimitiveAux.addPrimitive(createCurve(gpx));
+            gpx = new GeneralPathX();
+            gpx.moveTo(points.get(i));
+        }
+        gpx.closePath();
+        multiPrimitiveAux.addPrimitive(createCurve(gpx));
+
+        return multiPrimitiveAux;
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "internal_polygon_");
+    }
+
+    public String toString() {
+        return "_internalpolygon";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { SURFACE, MULTISURFACE };
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/InternalPolygonCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PointCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PointCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PointCADTool.java	(revision 42196)
@@ -0,0 +1,148 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.PointCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.PointCADToolContext.PointCADToolState;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class PointCADTool extends DefaultCADTool {
+
+    protected PointCADToolContext _fsm;
+
+    private static final int TYPE_MULTIPOINT = 1;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new PointCADToolContext(this);
+    }
+
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par� metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param sel
+     *            Bitset con las geometr�as que est�n seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        PointCADToolState actualState =
+            (PointCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+
+        if (status.equals("Point.FirstPoint")) {
+            insertAndSelectGeometry(createPoint(x, y));
+        }
+    }
+
+    @Override
+    public Feature insertAndSelectGeometry(Geometry geometry) {
+        if (getSupportedTypes()[TYPE_MULTIPOINT].isTypeOf(getGeometryType())) {
+            MultiPoint multiPoint = createMultiPoint();
+            multiPoint.addPoint((Point) geometry);
+            return super.insertAndSelectGeometry(multiPoint);
+        } else {
+            return super.insertAndSelectGeometry(geometry);
+        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param selectedGeometries
+     *            BitSet con las geometr�as seleccionadas.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param sel
+     *            DOCUMENT ME!
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+        // Nothing to do
+    }
+
+    public void addValue(double d) {
+        // Nothing to do
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "point_");
+    }
+
+    public String toString() {
+        return "_point";
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return new int[] { POINT, MULTIPOINT };
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/PointCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EditVertexCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EditVertexCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EditVertexCADToolContext.java	(revision 42196)
@@ -0,0 +1,467 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.EditVertexCADTool;
+
+
+public final class EditVertexCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public EditVertexCADToolContext(EditVertexCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(EditVertex.SelectVertexOrDelete);
+        EditVertex.SelectVertexOrDelete.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public EditVertexCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((EditVertexCADToolState) _state);
+    }
+
+    protected EditVertexCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private EditVertexCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class EditVertexCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected EditVertexCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(EditVertexCADToolContext context) {}
+        protected void Exit(EditVertexCADToolContext context) {}
+
+        protected void addOption(EditVertexCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(EditVertexCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(EditVertexCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class EditVertex
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static EditVertex_Default.EditVertex_SelectVertexOrDelete SelectVertexOrDelete;
+        /* package */ static EditVertex_Default.EditVertex_AddVertex AddVertex;
+        private static EditVertex_Default Default;
+
+        static
+        {
+            SelectVertexOrDelete = new EditVertex_Default.EditVertex_SelectVertexOrDelete("EditVertex.SelectVertexOrDelete", 0);
+            AddVertex = new EditVertex_Default.EditVertex_AddVertex("EditVertex.AddVertex", 1);
+            Default = new EditVertex_Default("EditVertex.Default", -1);
+        }
+
+    }
+
+    protected static class EditVertex_Default
+        extends EditVertexCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected EditVertex_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(EditVertexCADToolContext context, String s)
+        {
+            EditVertexCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        EditVertex.SelectVertexOrDelete.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(EditVertex.SelectVertexOrDelete);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        EditVertex.SelectVertexOrDelete.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(EditVertex.SelectVertexOrDelete);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(EditVertexCADToolContext context, double d)
+        {
+            EditVertexCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    EditVertex.SelectVertexOrDelete.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(EditVertex.SelectVertexOrDelete);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            EditVertexCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    EditVertex.SelectVertexOrDelete.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(EditVertex.SelectVertexOrDelete);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class EditVertex_SelectVertexOrDelete
+            extends EditVertex_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private EditVertex_SelectVertexOrDelete(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(EditVertexCADToolContext context)
+            {
+                EditVertexCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"point")+", "+
+		    PluginServices.getText(this,"next")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
+		     PluginServices.getText(this,"previous")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
+		     PluginServices.getText(this,"add")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		     PluginServices.getText(this,"del")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
+                ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
+                return;
+            }
+
+            protected void addOption(EditVertexCADToolContext context, String s)
+            {
+                EditVertexCADTool ctxt = context.getOwner();
+
+                if (s.equals("i") || s.equals("I") || s.equals(PluginServices.getText(this,"add")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"add_vertex"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(EditVertex.AddVertex);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (!s.equals("i") && !s.equals("I") && !s.equals(PluginServices.getText(this,"add")))
+                {
+                    EditVertexCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"point")+", "+
+				    PluginServices.getText(this,"next")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
+				     PluginServices.getText(this,"previous")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
+				     PluginServices.getText(this,"add")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
+				    PluginServices.getText(this,"cad.or")+" "+
+				     PluginServices.getText(this,"del")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
+                        ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EditVertexCADTool ctxt = context.getOwner();
+
+                EditVertexCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"select_from_point"));
+                    ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class EditVertex_AddVertex
+            extends EditVertex_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private EditVertex_AddVertex(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(EditVertexCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EditVertexCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"select_from_point"));
+                    ctxt.setDescription(new String[]{"next", "previous", "add", "del", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(EditVertex.SelectVertexOrDelete);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EditVertexCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/InternalPolygonCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/InternalPolygonCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/InternalPolygonCADToolContext.java	(revision 42196)
@@ -0,0 +1,393 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.InternalPolygonCADTool;
+
+
+public final class InternalPolygonCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public InternalPolygonCADToolContext(InternalPolygonCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(InternalPolygon.AddNextPoint);
+        InternalPolygon.AddNextPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public InternalPolygonCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((InternalPolygonCADToolState) _state);
+    }
+
+    protected InternalPolygonCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private InternalPolygonCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class InternalPolygonCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected InternalPolygonCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(InternalPolygonCADToolContext context) {}
+        protected void Exit(InternalPolygonCADToolContext context) {}
+
+        protected void addOption(InternalPolygonCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(InternalPolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(InternalPolygonCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(InternalPolygonCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class InternalPolygon
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static InternalPolygon_Default.InternalPolygon_AddNextPoint AddNextPoint;
+        private static InternalPolygon_Default Default;
+
+        static
+        {
+            AddNextPoint = new InternalPolygon_Default.InternalPolygon_AddNextPoint("InternalPolygon.AddNextPoint", 0);
+            Default = new InternalPolygon_Default("InternalPolygon.Default", -1);
+        }
+
+    }
+
+    protected static class InternalPolygon_Default
+        extends InternalPolygonCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected InternalPolygon_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(InternalPolygonCADToolContext context, String s)
+        {
+            InternalPolygonCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        InternalPolygon.AddNextPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(InternalPolygon.AddNextPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        InternalPolygon.AddNextPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(InternalPolygon.AddNextPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(InternalPolygonCADToolContext context, double d)
+        {
+            InternalPolygonCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    InternalPolygon.AddNextPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(InternalPolygon.AddNextPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(InternalPolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            InternalPolygonCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    InternalPolygon.AddNextPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(InternalPolygon.AddNextPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class InternalPolygon_AddNextPoint
+            extends InternalPolygon_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private InternalPolygon_AddNextPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(InternalPolygonCADToolContext context)
+            {
+                InternalPolygonCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"next_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"end")+
+		    "["+PluginServices.getText(this,"InternalPolygonCADTool.end")+"]");
+                ctxt.setDescription(new String[]{"end", "cancel"});
+                return;
+            }
+
+            protected void addOption(InternalPolygonCADToolContext context, String s)
+            {
+                InternalPolygonCADTool ctxt = context.getOwner();
+
+                InternalPolygonCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"next_point")+" "+
+		    		PluginServices.getText(this,"cad.or")+" "+
+		    		"["+PluginServices.getText(this,"InternalPolygonCADTool.end")+"]");
+                    ctxt.setDescription(new String[]{"end", "cancel"});
+                    ctxt.addOption(s);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+            protected void addPoint(InternalPolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                InternalPolygonCADTool ctxt = context.getOwner();
+
+                InternalPolygonCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"next_point")+" "+
+		    		PluginServices.getText(this,"cad.or")+" "+
+		    		PluginServices.getText(this,"end")+
+		    		"["+PluginServices.getText(this,"InternalPolygonCADTool.end")+"]");
+                    ctxt.setDescription(new String[]{"end", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/InternalPolygonCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ExploitCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ExploitCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ExploitCADToolContext.java	(revision 42196)
@@ -0,0 +1,344 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.ExploitCADTool;
+
+
+public final class ExploitCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public ExploitCADToolContext(ExploitCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Exploit.Execute);
+        Exploit.Execute.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public ExploitCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((ExploitCADToolState) _state);
+    }
+
+    protected ExploitCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private ExploitCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class ExploitCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected ExploitCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(ExploitCADToolContext context) {}
+        protected void Exit(ExploitCADToolContext context) {}
+
+        protected void addOption(ExploitCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(ExploitCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(ExploitCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(ExploitCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Exploit
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Exploit_Default.Exploit_Execute Execute;
+        private static Exploit_Default Default;
+
+        static
+        {
+            Execute = new Exploit_Default.Exploit_Execute("Exploit.Execute", 0);
+            Default = new Exploit_Default("Exploit.Default", -1);
+        }
+
+    }
+
+    protected static class Exploit_Default
+        extends ExploitCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Exploit_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(ExploitCADToolContext context, String s)
+        {
+            ExploitCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Exploit.Execute.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Exploit.Execute);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Exploit.Execute.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Exploit.Execute);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(ExploitCADToolContext context, double d)
+        {
+            ExploitCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Exploit.Execute.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Exploit.Execute);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(ExploitCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            ExploitCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Exploit.Execute.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Exploit.Execute);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Exploit_Execute
+            extends Exploit_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Exploit_Execute(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(ExploitCADToolContext context)
+            {
+                ExploitCADTool ctxt = context.getOwner();
+
+                ctxt.exploit();
+                ctxt.end();
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ExploitCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/BreakCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/BreakCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/BreakCADToolContext.java	(revision 42196)
@@ -0,0 +1,492 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.BreakCADTool;
+
+
+public final class BreakCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public BreakCADToolContext(BreakCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Break.FirstPoint);
+        Break.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public BreakCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((BreakCADToolState) _state);
+    }
+
+    protected BreakCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private BreakCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class BreakCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected BreakCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(BreakCADToolContext context) {}
+        protected void Exit(BreakCADToolContext context) {}
+
+        protected void addOption(BreakCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(BreakCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(BreakCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(BreakCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Break
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Break_Default.Break_FirstPoint FirstPoint;
+        /* package */ static Break_Default.Break_SecondPoint SecondPoint;
+        private static Break_Default Default;
+
+        static
+        {
+            FirstPoint = new Break_Default.Break_FirstPoint("Break.FirstPoint", 0);
+            SecondPoint = new Break_Default.Break_SecondPoint("Break.SecondPoint", 1);
+            Default = new Break_Default("Break.Default", -1);
+        }
+
+    }
+
+    protected static class Break_Default
+        extends BreakCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Break_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(BreakCADToolContext context, String s)
+        {
+            BreakCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Break.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Break.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Break.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Break.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(BreakCADToolContext context, double d)
+        {
+            BreakCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Break.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Break.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(BreakCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            BreakCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Break.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Break.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Break_FirstPoint
+            extends Break_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Break_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(BreakCADToolContext context)
+            {
+                BreakCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addOption(BreakCADToolContext context, String s)
+            {
+                BreakCADTool ctxt = context.getOwner();
+
+                BreakCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addOption(s);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+            protected void addPoint(BreakCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                BreakCADTool ctxt = context.getOwner();
+
+                if (ctxt.intersects(pointX,pointY))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Break.SecondPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (!ctxt.intersects(pointX,pointY))
+                {
+                    BreakCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }                else
+                {
+                    super.addPoint(context, pointX, pointY, event);
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Break_SecondPoint
+            extends Break_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Break_SecondPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(BreakCADToolContext context, String s)
+            {
+                BreakCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addOption(s);
+                }
+                finally
+                {
+                    context.setState(Break.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addPoint(BreakCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                BreakCADTool ctxt = context.getOwner();
+
+                if (ctxt.intersects(pointX,pointY))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Break.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (!ctxt.intersects(pointX,pointY))
+                {
+                    BreakCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }                else
+                {
+                    super.addPoint(context, pointX, pointY, event);
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/BreakCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SelectionCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SelectionCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SelectionCADToolContext.java	(revision 42196)
@@ -0,0 +1,642 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.SelectionCADTool;
+
+
+public final class SelectionCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public SelectionCADToolContext(SelectionCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Selection.FirstPoint);
+        Selection.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public SelectionCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((SelectionCADToolState) _state);
+    }
+
+    protected SelectionCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private SelectionCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class SelectionCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected SelectionCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(SelectionCADToolContext context) {}
+        protected void Exit(SelectionCADToolContext context) {}
+
+        protected void addOption(SelectionCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(SelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(SelectionCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(SelectionCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Selection
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Selection_Default.Selection_FirstPoint FirstPoint;
+        /* package */ static Selection_Default.Selection_SecondPoint SecondPoint;
+        /* package */ static Selection_Default.Selection_WithSelectedFeatures WithSelectedFeatures;
+        /* package */ static Selection_Default.Selection_WithHandlers WithHandlers;
+        private static Selection_Default Default;
+
+        static
+        {
+            FirstPoint = new Selection_Default.Selection_FirstPoint("Selection.FirstPoint", 0);
+            SecondPoint = new Selection_Default.Selection_SecondPoint("Selection.SecondPoint", 1);
+            WithSelectedFeatures = new Selection_Default.Selection_WithSelectedFeatures("Selection.WithSelectedFeatures", 2);
+            WithHandlers = new Selection_Default.Selection_WithHandlers("Selection.WithHandlers", 3);
+            Default = new Selection_Default("Selection.Default", -1);
+        }
+
+    }
+
+    protected static class Selection_Default
+        extends SelectionCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Selection_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(SelectionCADToolContext context, String s)
+        {
+            SelectionCADTool ctxt = context.getOwner();
+
+            if (s.equals(""))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Selection.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.restorePreviousTool();
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_point_selection"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Selection.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Selection.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(SelectionCADToolContext context, double d)
+        {
+            SelectionCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Selection.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Selection.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(SelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            SelectionCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Selection.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Selection.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Selection_FirstPoint
+            extends Selection_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Selection_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(SelectionCADToolContext context)
+            {
+                SelectionCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_point_selection"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(SelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.getType().equals(PluginServices.getText(this,"simple")) && ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.SecondPoint"))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.SecondPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (ctxt.getType().equals(PluginServices.getText(this,"simple")) && ctxt.getNextState().equals("Selection.WithSelectedFeatures"))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"select_handlers"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithSelectedFeatures);
+                        (context.getState()).Entry(context);
+                    }
+                }                else
+                {
+                    super.addPoint(context, pointX, pointY, event);
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Selection_SecondPoint
+            extends Selection_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Selection_SecondPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(SelectionCADToolContext context, String s)
+            {
+                SelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_point_selection"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.setType(s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addPoint(SelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.selectWithSecondPoint(pointX,pointY, event) > 0)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"select_handlers"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithSelectedFeatures);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_point_selection"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Selection_WithSelectedFeatures
+            extends Selection_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Selection_WithSelectedFeatures(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(SelectionCADToolContext context, String s)
+            {
+                SelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_point_selection"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.setType(s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addPoint(SelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.selectHandlers(pointX, pointY, event)>0)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_destination_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithHandlers);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.WithSelectedFeatures"))
+                {
+                    SelectionCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"select_handlers"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+                else
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_point_selection"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Selection_WithHandlers
+            extends Selection_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Selection_WithHandlers(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(SelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"select_handlers"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Selection.WithSelectedFeatures);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SelectionCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/LineCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/LineCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/LineCADToolContext.java	(revision 42196)
@@ -0,0 +1,513 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.LineCADTool;
+
+
+public final class LineCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public LineCADToolContext(LineCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Line.FirstPoint);
+        Line.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public LineCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((LineCADToolState) _state);
+    }
+
+    protected LineCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private LineCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class LineCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected LineCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(LineCADToolContext context) {}
+        protected void Exit(LineCADToolContext context) {}
+
+        protected void addOption(LineCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(LineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(LineCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(LineCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Line
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Line_Default.Line_FirstPoint FirstPoint;
+        /* package */ static Line_Default.Line_SecondPointOrAngle SecondPointOrAngle;
+        /* package */ static Line_Default.Line_LenghtOrPoint LenghtOrPoint;
+        private static Line_Default Default;
+
+        static
+        {
+            FirstPoint = new Line_Default.Line_FirstPoint("Line.FirstPoint", 0);
+            SecondPointOrAngle = new Line_Default.Line_SecondPointOrAngle("Line.SecondPointOrAngle", 1);
+            LenghtOrPoint = new Line_Default.Line_LenghtOrPoint("Line.LenghtOrPoint", 2);
+            Default = new Line_Default("Line.Default", -1);
+        }
+
+    }
+
+    protected static class Line_Default
+        extends LineCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Line_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(LineCADToolContext context, String s)
+        {
+            LineCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Line.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Line.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else if (s.equals(""))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Line.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Line.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Line.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Line.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(LineCADToolContext context, double d)
+        {
+            LineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Line.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Line.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(LineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            LineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Line.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Line.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Line_FirstPoint
+            extends Line_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Line_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(LineCADToolContext context)
+            {
+                LineCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(LineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                LineCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Line.SecondPointOrAngle);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Line_SecondPointOrAngle
+            extends Line_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Line_SecondPointOrAngle(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(LineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                LineCADTool ctxt = context.getOwner();
+
+                LineCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+            protected void addValue(LineCADToolContext context, double d)
+            {
+                LineCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_length_or_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addValue(d);
+                }
+                finally
+                {
+                    context.setState(Line.LenghtOrPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Line_LenghtOrPoint
+            extends Line_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Line_LenghtOrPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(LineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                LineCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Line.SecondPointOrAngle);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(LineCADToolContext context, double d)
+            {
+                LineCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addValue(d);
+                }
+                finally
+                {
+                    context.setState(Line.SecondPointOrAngle);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/LineCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolygonCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolygonCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolygonCADToolContext.java	(revision 42196)
@@ -0,0 +1,598 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.PolygonCADTool;
+
+
+public final class PolygonCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public PolygonCADToolContext(PolygonCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Polygon.NumberOrCenterPoint);
+        Polygon.NumberOrCenterPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public PolygonCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((PolygonCADToolState) _state);
+    }
+
+    protected PolygonCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private PolygonCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class PolygonCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected PolygonCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(PolygonCADToolContext context) {}
+        protected void Exit(PolygonCADToolContext context) {}
+
+        protected void addOption(PolygonCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(PolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(PolygonCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(PolygonCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Polygon
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Polygon_Default.Polygon_NumberOrCenterPoint NumberOrCenterPoint;
+        /* package */ static Polygon_Default.Polygon_CenterPoint CenterPoint;
+        /* package */ static Polygon_Default.Polygon_OptionOrRadiusOrPoint OptionOrRadiusOrPoint;
+        /* package */ static Polygon_Default.Polygon_RadiusOrPoint RadiusOrPoint;
+        private static Polygon_Default Default;
+
+        static
+        {
+            NumberOrCenterPoint = new Polygon_Default.Polygon_NumberOrCenterPoint("Polygon.NumberOrCenterPoint", 0);
+            CenterPoint = new Polygon_Default.Polygon_CenterPoint("Polygon.CenterPoint", 1);
+            OptionOrRadiusOrPoint = new Polygon_Default.Polygon_OptionOrRadiusOrPoint("Polygon.OptionOrRadiusOrPoint", 2);
+            RadiusOrPoint = new Polygon_Default.Polygon_RadiusOrPoint("Polygon.RadiusOrPoint", 3);
+            Default = new Polygon_Default("Polygon.Default", -1);
+        }
+
+    }
+
+    protected static class Polygon_Default
+        extends PolygonCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Polygon_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(PolygonCADToolContext context, String s)
+        {
+            PolygonCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Polygon.NumberOrCenterPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Polygon.NumberOrCenterPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Polygon.NumberOrCenterPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Polygon.NumberOrCenterPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(PolygonCADToolContext context, double d)
+        {
+            PolygonCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Polygon.NumberOrCenterPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Polygon.NumberOrCenterPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(PolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            PolygonCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Polygon.NumberOrCenterPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Polygon.NumberOrCenterPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Polygon_NumberOrCenterPoint
+            extends Polygon_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Polygon_NumberOrCenterPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(PolygonCADToolContext context)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_number_sides"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(PolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"into_circle")+" "+
+					"["+PluginServices.getText(this,"PolygonCADTool.into_circle")+"] "+
+	    			PluginServices.getText(this,"cad.or")+" "+
+	    			PluginServices.getText(this,"circumscribed")+
+	   				"["+PluginServices.getText(this,"PolygonCADTool.circumscribed")+"]");
+                    ctxt.setDescription(new String[]{"into_circle", "circumscribed", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Polygon.OptionOrRadiusOrPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(PolygonCADToolContext context, double d)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+                if (d<3)
+                {
+                    PolygonCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.throwValueException(PluginServices.getText(this,"num_lados_insuficiente"), d);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+                else if (d>2)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_central_point_polygon"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addValue(d);
+                    }
+                    finally
+                    {
+                        context.setState(Polygon.CenterPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }                else
+                {
+                    super.addValue(context, d);
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Polygon_CenterPoint
+            extends Polygon_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Polygon_CenterPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(PolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"into_circle")+" "+
+				"["+PluginServices.getText(this,"PolygonCADTool.into_circle")+"]"+
+	    		PluginServices.getText(this,"cad.or")+" "+
+	    		PluginServices.getText(this,"circumscribed")+
+	   			"["+PluginServices.getText(this,"PolygonCADTool.circumscribed")+"]");
+                    ctxt.setDescription(new String[]{"into_circle", "circumscribed", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Polygon.OptionOrRadiusOrPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Polygon_OptionOrRadiusOrPoint
+            extends Polygon_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Polygon_OptionOrRadiusOrPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(PolygonCADToolContext context, String s)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+                if (!s.equals(PluginServices.getText(this,"cancel")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_radius"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Polygon.RadiusOrPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(PolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Polygon.NumberOrCenterPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(PolygonCADToolContext context, double d)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addValue(d);
+                }
+                finally
+                {
+                    context.setState(Polygon.NumberOrCenterPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Polygon_RadiusOrPoint
+            extends Polygon_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Polygon_RadiusOrPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(PolygonCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Polygon.NumberOrCenterPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(PolygonCADToolContext context, double d)
+            {
+                PolygonCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addValue(d);
+                }
+                finally
+                {
+                    context.setState(Polygon.NumberOrCenterPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolygonCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ScaleCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ScaleCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ScaleCADToolContext.java	(revision 42196)
@@ -0,0 +1,669 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.ScaleCADTool;
+
+
+public final class ScaleCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public ScaleCADToolContext(ScaleCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Scale.PointMain);
+        Scale.PointMain.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public ScaleCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((ScaleCADToolState) _state);
+    }
+
+    protected ScaleCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private ScaleCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class ScaleCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected ScaleCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(ScaleCADToolContext context) {}
+        protected void Exit(ScaleCADToolContext context) {}
+
+        protected void addOption(ScaleCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(ScaleCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(ScaleCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Scale
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Scale_Default.Scale_PointMain PointMain;
+        /* package */ static Scale_Default.Scale_ScaleFactorOrReference ScaleFactorOrReference;
+        /* package */ static Scale_Default.Scale_PointOriginOrScaleFactor PointOriginOrScaleFactor;
+        /* package */ static Scale_Default.Scale_EndPointReference EndPointReference;
+        /* package */ static Scale_Default.Scale_OriginPointScale OriginPointScale;
+        /* package */ static Scale_Default.Scale_EndPointScale EndPointScale;
+        private static Scale_Default Default;
+
+        static
+        {
+            PointMain = new Scale_Default.Scale_PointMain("Scale.PointMain", 0);
+            ScaleFactorOrReference = new Scale_Default.Scale_ScaleFactorOrReference("Scale.ScaleFactorOrReference", 1);
+            PointOriginOrScaleFactor = new Scale_Default.Scale_PointOriginOrScaleFactor("Scale.PointOriginOrScaleFactor", 2);
+            EndPointReference = new Scale_Default.Scale_EndPointReference("Scale.EndPointReference", 3);
+            OriginPointScale = new Scale_Default.Scale_OriginPointScale("Scale.OriginPointScale", 4);
+            EndPointScale = new Scale_Default.Scale_EndPointScale("Scale.EndPointScale", 5);
+            Default = new Scale_Default("Scale.Default", -1);
+        }
+
+    }
+
+    protected static class Scale_Default
+        extends ScaleCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Scale_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(ScaleCADToolContext context, String s)
+        {
+            ScaleCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Scale.PointMain.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Scale.PointMain);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Scale.PointMain.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Scale.PointMain);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(ScaleCADToolContext context, double d)
+        {
+            ScaleCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Scale.PointMain.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Scale.PointMain);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            ScaleCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Scale.PointMain.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Scale.PointMain);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Scale_PointMain
+            extends Scale_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Scale_PointMain(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(ScaleCADToolContext context)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_basis_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_factor")+ " "+
+					PluginServices.getText(this,"cad.or")+" "+
+					PluginServices.getText(this,"reference")+
+					"["+PluginServices.getText(this,"ScaleCADTool.reference")+"]");
+                    ctxt.setDescription(new String[]{"reference", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Scale.ScaleFactorOrReference);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Scale_ScaleFactorOrReference
+            extends Scale_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Scale_ScaleFactorOrReference(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(ScaleCADToolContext context, String s)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+                if (s.equals(null) || s.equals(""))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.addOption(s);
+                        ctxt.end();
+                        ctxt.refresh();
+                    }
+                    finally
+                    {
+                        context.setState(Scale.PointMain);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (s.equalsIgnoreCase(PluginServices.getText(this,"ScaleCADTool.reference")) || s.equals(PluginServices.getText(this,"reference")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_reference_point")+ " "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"factor")+
+				"["+PluginServices.getText(this,"ScaleCADTool.factor")+"]");
+                        ctxt.setDescription(new String[]{"factor", "cancel"});
+                    }
+                    finally
+                    {
+                        context.setState(Scale.PointOriginOrScaleFactor);
+                        (context.getState()).Entry(context);
+                    }
+                }                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Scale.PointMain);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(ScaleCADToolContext context, double d)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addValue(d);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Scale.PointMain);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Scale_PointOriginOrScaleFactor
+            extends Scale_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Scale_PointOriginOrScaleFactor(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(ScaleCADToolContext context, String s)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+                if (s.equalsIgnoreCase(PluginServices.getText(this,"ScaleCADTool.factor")) || s.equals(PluginServices.getText(this,"factor")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_factor")+ " "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"reference")+
+				"["+PluginServices.getText(this,"ScaleCADTool.reference")+"]");
+                        ctxt.setDescription(new String[]{"reference", "cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Scale.PointMain);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_last_point_reference"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Scale.EndPointReference);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Scale_EndPointReference
+            extends Scale_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Scale_EndPointReference(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_first_point_scale"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Scale.OriginPointScale);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Scale_OriginPointScale
+            extends Scale_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Scale_OriginPointScale(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_last_point_scale"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Scale.EndPointScale);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Scale_EndPointScale
+            extends Scale_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Scale_EndPointScale(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(ScaleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ScaleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Scale.PointMain);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ScaleCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PointCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PointCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PointCADToolContext.java	(revision 42196)
@@ -0,0 +1,364 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.PointCADTool;
+
+
+public final class PointCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public PointCADToolContext(PointCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Point.FirstPoint);
+        Point.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public PointCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((PointCADToolState) _state);
+    }
+
+    protected PointCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private PointCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class PointCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected PointCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(PointCADToolContext context) {}
+        protected void Exit(PointCADToolContext context) {}
+
+        protected void addOption(PointCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(PointCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(PointCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(PointCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Point
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Point_Default.Point_FirstPoint FirstPoint;
+        private static Point_Default Default;
+
+        static
+        {
+            FirstPoint = new Point_Default.Point_FirstPoint("Point.FirstPoint", 0);
+            Default = new Point_Default("Point.Default", -1);
+        }
+
+    }
+
+    protected static class Point_Default
+        extends PointCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Point_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(PointCADToolContext context, String s)
+        {
+            PointCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Point.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Point.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Point.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Point.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(PointCADToolContext context, double d)
+        {
+            PointCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Point.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Point.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(PointCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            PointCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Point.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Point.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Point_FirstPoint
+            extends Point_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Point_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(PointCADToolContext context)
+            {
+                PointCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(PointCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PointCADTool ctxt = context.getOwner();
+
+                PointCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PointCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SymmetryCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SymmetryCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SymmetryCADToolContext.java	(revision 42196)
@@ -0,0 +1,451 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.SymmetryCADTool;
+
+
+public final class SymmetryCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public SymmetryCADToolContext(SymmetryCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Symmetry.FirstPoint);
+        Symmetry.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public SymmetryCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((SymmetryCADToolState) _state);
+    }
+
+    protected SymmetryCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private SymmetryCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class SymmetryCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected SymmetryCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(SymmetryCADToolContext context) {}
+        protected void Exit(SymmetryCADToolContext context) {}
+
+        protected void addOption(SymmetryCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(SymmetryCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(SymmetryCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(SymmetryCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Symmetry
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Symmetry_Default.Symmetry_FirstPoint FirstPoint;
+        /* package */ static Symmetry_Default.Symmetry_SecondPoint SecondPoint;
+        /* package */ static Symmetry_Default.Symmetry_CutOrCopy CutOrCopy;
+        private static Symmetry_Default Default;
+
+        static
+        {
+            FirstPoint = new Symmetry_Default.Symmetry_FirstPoint("Symmetry.FirstPoint", 0);
+            SecondPoint = new Symmetry_Default.Symmetry_SecondPoint("Symmetry.SecondPoint", 1);
+            CutOrCopy = new Symmetry_Default.Symmetry_CutOrCopy("Symmetry.CutOrCopy", 2);
+            Default = new Symmetry_Default("Symmetry.Default", -1);
+        }
+
+    }
+
+    protected static class Symmetry_Default
+        extends SymmetryCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Symmetry_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(SymmetryCADToolContext context, String s)
+        {
+            SymmetryCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Symmetry.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Symmetry.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Symmetry.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Symmetry.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(SymmetryCADToolContext context, double d)
+        {
+            SymmetryCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Symmetry.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Symmetry.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(SymmetryCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            SymmetryCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Symmetry.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Symmetry.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Symmetry_FirstPoint
+            extends Symmetry_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Symmetry_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(SymmetryCADToolContext context)
+            {
+                SymmetryCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(SymmetryCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SymmetryCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Symmetry.SecondPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Symmetry_SecondPoint
+            extends Symmetry_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Symmetry_SecondPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(SymmetryCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SymmetryCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"del_original_geometries")+" "+
+				PluginServices.getText(this,"yes")+
+				"["+PluginServices.getText(this,"SymmetryCADTool.yes")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"no")+
+				"["+PluginServices.getText(this,"SymmetryCADTool.no")+"]");
+                    ctxt.setDescription(new String[]{"cancel", "cut", "copy"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Symmetry.CutOrCopy);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Symmetry_CutOrCopy
+            extends Symmetry_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Symmetry_CutOrCopy(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(SymmetryCADToolContext context, String s)
+            {
+                SymmetryCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addOption(s);
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Symmetry.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SymmetryCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplineCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplineCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplineCADToolContext.java	(revision 42196)
@@ -0,0 +1,532 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.SplineCADTool;
+
+
+public final class SplineCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public SplineCADToolContext(SplineCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Spline.FirstPoint);
+        Spline.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public void endPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "endPoint";
+        getState().endPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public SplineCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((SplineCADToolState) _state);
+    }
+
+    protected SplineCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private SplineCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class SplineCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected SplineCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(SplineCADToolContext context) {}
+        protected void Exit(SplineCADToolContext context) {}
+
+        protected void addOption(SplineCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(SplineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(SplineCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void endPoint(SplineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void Default(SplineCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Spline
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Spline_Default.Spline_FirstPoint FirstPoint;
+        /* package */ static Spline_Default.Spline_NextPoint NextPoint;
+        private static Spline_Default Default;
+
+        static
+        {
+            FirstPoint = new Spline_Default.Spline_FirstPoint("Spline.FirstPoint", 0);
+            NextPoint = new Spline_Default.Spline_NextPoint("Spline.NextPoint", 1);
+            Default = new Spline_Default("Spline.Default", -1);
+        }
+
+    }
+
+    protected static class Spline_Default
+        extends SplineCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Spline_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(SplineCADToolContext context, String s)
+        {
+            SplineCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Spline.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.cancel();
+                }
+                finally
+                {
+                    context.setState(Spline.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else if (s.equals(""))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Spline.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.endGeometry();
+                }
+                finally
+                {
+                    context.setState(Spline.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Spline.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Spline.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(SplineCADToolContext context, double d)
+        {
+            SplineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Spline.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Spline.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(SplineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            SplineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Spline.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Spline.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void endPoint(SplineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            SplineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Spline.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.addPoint(pointX, pointY, event);
+                ctxt.endGeometry();
+            }
+            finally
+            {
+                context.setState(Spline.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Spline_FirstPoint
+            extends Spline_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Spline_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(SplineCADToolContext context)
+            {
+                SplineCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(SplineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SplineCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+					PluginServices.getText(this,"close")+" "+
+					"["+PluginServices.getText(this,"SplineCADTool.close")+"] "+
+					PluginServices.getText(this,"cad.or")+" "+
+					PluginServices.getText(this,"end")+" "+
+					"["+PluginServices.getText(this,"SplineCADTool.end")+"]");
+                    ctxt.setDescription(new String[]{"close", "terminate", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Spline.NextPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Spline_NextPoint
+            extends Spline_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Spline_NextPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(SplineCADToolContext context, String s)
+            {
+                SplineCADTool ctxt = context.getOwner();
+
+                if (s.equalsIgnoreCase(PluginServices.getText(this,"SplineCADTool.close")) || s.equals(PluginServices.getText(this,"close")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.addOption(s);
+                        ctxt.closeGeometry();
+                        ctxt.endGeometry();
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Spline.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (s.equalsIgnoreCase(PluginServices.getText(this,"SplineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.addOption(s);
+                        ctxt.endGeometry();
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Spline.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(SplineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SplineCADTool ctxt = context.getOwner();
+
+                SplineCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"close")+" "+
+				"["+PluginServices.getText(this,"SplineCADTool.close")+"] "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+" "+
+				"["+PluginServices.getText(this,"SplineCADTool.end")+"]");
+                    ctxt.setDescription(new String[]{"close", "terminate", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplineCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolylineCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolylineCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolylineCADToolContext.java	(revision 42196)
@@ -0,0 +1,809 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.PolylineCADTool;
+
+
+public final class PolylineCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public PolylineCADToolContext(PolylineCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Polyline.FirstPoint);
+        Polyline.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public void endPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "endPoint";
+        getState().endPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public PolylineCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((PolylineCADToolState) _state);
+    }
+
+    protected PolylineCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private PolylineCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class PolylineCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected PolylineCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(PolylineCADToolContext context) {}
+        protected void Exit(PolylineCADToolContext context) {}
+
+        protected void addOption(PolylineCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(PolylineCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void endPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void Default(PolylineCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Polyline
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Polyline_Default.Polyline_FirstPoint FirstPoint;
+        /* package */ static Polyline_Default.Polyline_NextPointOrArcOrClose NextPointOrArcOrClose;
+        /* package */ static Polyline_Default.Polyline_NextPointOrLineOrClose NextPointOrLineOrClose;
+        private static Polyline_Default Default;
+
+        static
+        {
+            FirstPoint = new Polyline_Default.Polyline_FirstPoint("Polyline.FirstPoint", 0);
+            NextPointOrArcOrClose = new Polyline_Default.Polyline_NextPointOrArcOrClose("Polyline.NextPointOrArcOrClose", 1);
+            NextPointOrLineOrClose = new Polyline_Default.Polyline_NextPointOrLineOrClose("Polyline.NextPointOrLineOrClose", 2);
+            Default = new Polyline_Default("Polyline.Default", -1);
+        }
+
+    }
+
+    protected static class Polyline_Default
+        extends PolylineCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Polyline_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(PolylineCADToolContext context, String s)
+        {
+            PolylineCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Polyline.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.cancel();
+                }
+                finally
+                {
+                    context.setState(Polyline.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else if (s.equals(""))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Polyline.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.endGeometry();
+                }
+                finally
+                {
+                    context.setState(Polyline.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Polyline.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Polyline.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(PolylineCADToolContext context, double d)
+        {
+            PolylineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Polyline.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Polyline.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            PolylineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Polyline.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Polyline.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void endPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            PolylineCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Polyline.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.addPoint(pointX, pointY, event);
+                ctxt.endGeometry();
+            }
+            finally
+            {
+                context.setState(Polyline.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Polyline_FirstPoint
+            extends Polyline_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Polyline_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(PolylineCADToolContext context)
+            {
+                PolylineCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PolylineCADTool ctxt = context.getOwner();
+                
+                if (ctxt.isPolygonLayer())
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        /*
+                         * Less options if first point
+                         */
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+                            PluginServices.getText(this,"arc")+
+                            "["+PluginServices.getText(this,"PolylineCADTool.arc")+"]");
+                        ctxt.setDescription(new String[]{"inter_arc", "cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.NextPointOrArcOrClose);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        /*
+                         * First point, less options
+                         */
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+                            PluginServices.getText(this,"arc")+
+                            "["+PluginServices.getText(this,"PolylineCADTool.arc")+"]");
+                        ctxt.setDescription(new String[]{"inter_arc", "cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.NextPointOrArcOrClose);
+                        (context.getState()).Entry(context);
+                    }
+                }
+
+                return;
+            }
+
+            
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Polyline_NextPointOrArcOrClose
+            extends Polyline_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Polyline_NextPointOrArcOrClose(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(PolylineCADToolContext context, String s)
+            {
+                PolylineCADTool ctxt = context.getOwner();
+                
+
+                if (ctxt.isPolygonLayer() && (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.arc")) || s.equals(PluginServices.getText(this,"inter_arc"))))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_line", "terminate", "cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.NextPointOrLineOrClose);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.arc")) || s.equals(PluginServices.getText(this,"inter_arc")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_line", "close_polyline", "terminate", "cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.NextPointOrLineOrClose);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.close_polyline")) || s.equals(PluginServices.getText(this,"close_polyline")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.addOption(s);
+                        ctxt.closeGeometry();
+                        ctxt.endGeometry();
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if ((s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate"))) && ctxt.getLinesCount()!=0 )
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.addOption(s);
+                        ctxt.endGeometry();
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (!s.equals(PluginServices.getText(this,"cancel")))
+                {
+
+                    // No actions.
+                }                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PolylineCADTool ctxt = context.getOwner();
+
+                if (ctxt.isPolygonLayer())
+                {
+                    PolylineCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_arc", "terminate", "cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+                else
+                {
+                    PolylineCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_arc", "close_polyline", "terminate", "cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Polyline_NextPointOrLineOrClose
+            extends Polyline_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Polyline_NextPointOrLineOrClose(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(PolylineCADToolContext context, String s)
+            {
+                PolylineCADTool ctxt = context.getOwner();
+
+                if (ctxt.isPolygonLayer() && (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.line")) || s.equals(PluginServices.getText(this,"inter_line"))))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_arc", "terminate", "cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.NextPointOrArcOrClose);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.line")) || s.equals(PluginServices.getText(this,"inter_line")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_arc", "close_polyline", "terminate", "cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.NextPointOrArcOrClose);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.close_polyline")) || s.equals(PluginServices.getText(this,"close_polyline")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.addOption(s);
+                        ctxt.closeGeometry();
+                        ctxt.endGeometry();
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if ((s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate"))) && ctxt.getLinesCount()!=0)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.addOption(s);
+                        ctxt.endGeometry();
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Polyline.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (!s.equals(PluginServices.getText(this,"cancel")))
+                {
+
+                    // No actions.
+                }                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(PolylineCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                PolylineCADTool ctxt = context.getOwner();
+
+                if (ctxt.isPolygonLayer())
+                {
+                    PolylineCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_line", "terminate", "cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+                else
+                {
+                    PolylineCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                        ctxt.setDescription(new String[]{"inter_line", "close_polyline", "terminate", "cancel"});
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+    
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/PolylineCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EllipseCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EllipseCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EllipseCADToolContext.java	(revision 42196)
@@ -0,0 +1,462 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.EllipseCADTool;
+
+
+public final class EllipseCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public EllipseCADToolContext(EllipseCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Ellipse.FirstPointAxis);
+        Ellipse.FirstPointAxis.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public EllipseCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((EllipseCADToolState) _state);
+    }
+
+    protected EllipseCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private EllipseCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class EllipseCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected EllipseCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(EllipseCADToolContext context) {}
+        protected void Exit(EllipseCADToolContext context) {}
+
+        protected void addOption(EllipseCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(EllipseCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(EllipseCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(EllipseCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Ellipse
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Ellipse_Default.Ellipse_FirstPointAxis FirstPointAxis;
+        /* package */ static Ellipse_Default.Ellipse_SecondPointAxis SecondPointAxis;
+        /* package */ static Ellipse_Default.Ellipse_DistanceOtherAxis DistanceOtherAxis;
+        private static Ellipse_Default Default;
+
+        static
+        {
+            FirstPointAxis = new Ellipse_Default.Ellipse_FirstPointAxis("Ellipse.FirstPointAxis", 0);
+            SecondPointAxis = new Ellipse_Default.Ellipse_SecondPointAxis("Ellipse.SecondPointAxis", 1);
+            DistanceOtherAxis = new Ellipse_Default.Ellipse_DistanceOtherAxis("Ellipse.DistanceOtherAxis", 2);
+            Default = new Ellipse_Default("Ellipse.Default", -1);
+        }
+
+    }
+
+    protected static class Ellipse_Default
+        extends EllipseCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Ellipse_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(EllipseCADToolContext context, String s)
+        {
+            EllipseCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Ellipse.FirstPointAxis.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Ellipse.FirstPointAxis);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Ellipse.FirstPointAxis.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Ellipse.FirstPointAxis);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(EllipseCADToolContext context, double d)
+        {
+            EllipseCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Ellipse.FirstPointAxis.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Ellipse.FirstPointAxis);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(EllipseCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            EllipseCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Ellipse.FirstPointAxis.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Ellipse.FirstPointAxis);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Ellipse_FirstPointAxis
+            extends Ellipse_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Ellipse_FirstPointAxis(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(EllipseCADToolContext context)
+            {
+                EllipseCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_initial_point_axis"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(EllipseCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EllipseCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_last_point_axis"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Ellipse.SecondPointAxis);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Ellipse_SecondPointAxis
+            extends Ellipse_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Ellipse_SecondPointAxis(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(EllipseCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EllipseCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_distance_another_axis"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Ellipse.DistanceOtherAxis);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Ellipse_DistanceOtherAxis
+            extends Ellipse_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Ellipse_DistanceOtherAxis(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(EllipseCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EllipseCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Ellipse.FirstPointAxis);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(EllipseCADToolContext context, double d)
+            {
+                EllipseCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addValue(d);
+                }
+                finally
+                {
+                    context.setState(Ellipse.FirstPointAxis);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EllipseCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RotateCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RotateCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RotateCADToolContext.java	(revision 42196)
@@ -0,0 +1,429 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.RotateCADTool;
+
+
+public final class RotateCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public RotateCADToolContext(RotateCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Rotate.PointMain);
+        Rotate.PointMain.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public RotateCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((RotateCADToolState) _state);
+    }
+
+    protected RotateCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private RotateCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class RotateCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected RotateCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(RotateCADToolContext context) {}
+        protected void Exit(RotateCADToolContext context) {}
+
+        protected void addOption(RotateCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(RotateCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(RotateCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(RotateCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Rotate
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Rotate_Default.Rotate_PointMain PointMain;
+        /* package */ static Rotate_Default.Rotate_AngleOrPoint AngleOrPoint;
+        private static Rotate_Default Default;
+
+        static
+        {
+            PointMain = new Rotate_Default.Rotate_PointMain("Rotate.PointMain", 0);
+            AngleOrPoint = new Rotate_Default.Rotate_AngleOrPoint("Rotate.AngleOrPoint", 1);
+            Default = new Rotate_Default("Rotate.Default", -1);
+        }
+
+    }
+
+    protected static class Rotate_Default
+        extends RotateCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Rotate_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(RotateCADToolContext context, String s)
+        {
+            RotateCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Rotate.PointMain.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Rotate.PointMain);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Rotate.PointMain.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Rotate.PointMain);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(RotateCADToolContext context, double d)
+        {
+            RotateCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Rotate.PointMain.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Rotate.PointMain);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(RotateCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            RotateCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Rotate.PointMain.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Rotate.PointMain);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Rotate_PointMain
+            extends Rotate_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Rotate_PointMain(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(RotateCADToolContext context)
+            {
+                RotateCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_basis_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(RotateCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                RotateCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_rotation_angle"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Rotate.AngleOrPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Rotate_AngleOrPoint
+            extends Rotate_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Rotate_AngleOrPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(RotateCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                RotateCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Rotate.PointMain);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(RotateCADToolContext context, double d)
+            {
+                RotateCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addValue(d);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Rotate.PointMain);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RotateCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/JoinCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/JoinCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/JoinCADToolContext.java	(revision 42196)
@@ -0,0 +1,344 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.JoinCADTool;
+
+
+public final class JoinCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public JoinCADToolContext(JoinCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Join.Execute);
+        Join.Execute.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public JoinCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((JoinCADToolState) _state);
+    }
+
+    protected JoinCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private JoinCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class JoinCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected JoinCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(JoinCADToolContext context) {}
+        protected void Exit(JoinCADToolContext context) {}
+
+        protected void addOption(JoinCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(JoinCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(JoinCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(JoinCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Join
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Join_Default.Join_Execute Execute;
+        private static Join_Default Default;
+
+        static
+        {
+            Execute = new Join_Default.Join_Execute("Join.Execute", 0);
+            Default = new Join_Default("Join.Default", -1);
+        }
+
+    }
+
+    protected static class Join_Default
+        extends JoinCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Join_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(JoinCADToolContext context, String s)
+        {
+            JoinCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Join.Execute.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Join.Execute);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Join.Execute.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Join.Execute);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(JoinCADToolContext context, double d)
+        {
+            JoinCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Join.Execute.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Join.Execute);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(JoinCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            JoinCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Join.Execute.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Join.Execute);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Join_Execute
+            extends Join_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Join_Execute(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(JoinCADToolContext context)
+            {
+                JoinCADTool ctxt = context.getOwner();
+
+                ctxt.join();
+                ctxt.end();
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/JoinCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CircleCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CircleCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CircleCADToolContext.java	(revision 42196)
@@ -0,0 +1,570 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.CircleCADTool;
+
+
+public final class CircleCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public CircleCADToolContext(CircleCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Circle.CenterPointOr3p);
+        Circle.CenterPointOr3p.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public CircleCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((CircleCADToolState) _state);
+    }
+
+    protected CircleCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private CircleCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class CircleCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected CircleCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(CircleCADToolContext context) {}
+        protected void Exit(CircleCADToolContext context) {}
+
+        protected void addOption(CircleCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(CircleCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(CircleCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Circle
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Circle_Default.Circle_CenterPointOr3p CenterPointOr3p;
+        /* package */ static Circle_Default.Circle_PointOrRadius PointOrRadius;
+        /* package */ static Circle_Default.Circle_SecondPoint SecondPoint;
+        /* package */ static Circle_Default.Circle_ThirdPoint ThirdPoint;
+        /* package */ static Circle_Default.Circle_FirstPoint FirstPoint;
+        private static Circle_Default Default;
+
+        static
+        {
+            CenterPointOr3p = new Circle_Default.Circle_CenterPointOr3p("Circle.CenterPointOr3p", 0);
+            PointOrRadius = new Circle_Default.Circle_PointOrRadius("Circle.PointOrRadius", 1);
+            SecondPoint = new Circle_Default.Circle_SecondPoint("Circle.SecondPoint", 2);
+            ThirdPoint = new Circle_Default.Circle_ThirdPoint("Circle.ThirdPoint", 3);
+            FirstPoint = new Circle_Default.Circle_FirstPoint("Circle.FirstPoint", 4);
+            Default = new Circle_Default("Circle.Default", -1);
+        }
+
+    }
+
+    protected static class Circle_Default
+        extends CircleCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Circle_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(CircleCADToolContext context, String s)
+        {
+            CircleCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Circle.CenterPointOr3p.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Circle.CenterPointOr3p);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Circle.CenterPointOr3p.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Circle.CenterPointOr3p);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(CircleCADToolContext context, double d)
+        {
+            CircleCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Circle.CenterPointOr3p.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Circle.CenterPointOr3p);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            CircleCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Circle.CenterPointOr3p.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Circle.CenterPointOr3p);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Circle_CenterPointOr3p
+            extends Circle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Circle_CenterPointOr3p(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(CircleCADToolContext context)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_central_point_or_3p")+
+		"["+PluginServices.getText(this,"CircleCADTool.3p")+"]");
+                ctxt.setDescription(new String[]{"cancel", "3P"});
+                return;
+            }
+
+            protected void addOption(CircleCADToolContext context, String s)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+                if (s.equalsIgnoreCase(PluginServices.getText(this,"CircleCADTool.3p")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Circle.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_radius_or_second_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Circle.PointOrRadius);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Circle_PointOrRadius
+            extends Circle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Circle_PointOrRadius(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Circle.CenterPointOr3p);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(CircleCADToolContext context, double d)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addValue(d);
+                }
+                finally
+                {
+                    context.setState(Circle.CenterPointOr3p);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Circle_SecondPoint
+            extends Circle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Circle_SecondPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_third_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Circle.ThirdPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Circle_ThirdPoint
+            extends Circle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Circle_ThirdPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Circle.CenterPointOr3p);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Circle_FirstPoint
+            extends Circle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Circle_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(CircleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                CircleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Circle.SecondPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CircleCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RectangleCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RectangleCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RectangleCADToolContext.java	(revision 42196)
@@ -0,0 +1,473 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.RectangleCADTool;
+
+
+public final class RectangleCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public RectangleCADToolContext(RectangleCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Rectangle.FirstPoint);
+        Rectangle.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public RectangleCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((RectangleCADToolState) _state);
+    }
+
+    protected RectangleCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private RectangleCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class RectangleCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected RectangleCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(RectangleCADToolContext context) {}
+        protected void Exit(RectangleCADToolContext context) {}
+
+        protected void addOption(RectangleCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(RectangleCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(RectangleCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(RectangleCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Rectangle
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Rectangle_Default.Rectangle_FirstPoint FirstPoint;
+        /* package */ static Rectangle_Default.Rectangle_SecondPointOrSquare SecondPointOrSquare;
+        /* package */ static Rectangle_Default.Rectangle_SecondPointSquare SecondPointSquare;
+        private static Rectangle_Default Default;
+
+        static
+        {
+            FirstPoint = new Rectangle_Default.Rectangle_FirstPoint("Rectangle.FirstPoint", 0);
+            SecondPointOrSquare = new Rectangle_Default.Rectangle_SecondPointOrSquare("Rectangle.SecondPointOrSquare", 1);
+            SecondPointSquare = new Rectangle_Default.Rectangle_SecondPointSquare("Rectangle.SecondPointSquare", 2);
+            Default = new Rectangle_Default("Rectangle.Default", -1);
+        }
+
+    }
+
+    protected static class Rectangle_Default
+        extends RectangleCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Rectangle_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(RectangleCADToolContext context, String s)
+        {
+            RectangleCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Rectangle.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Rectangle.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Rectangle.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Rectangle.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(RectangleCADToolContext context, double d)
+        {
+            RectangleCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Rectangle.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Rectangle.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(RectangleCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            RectangleCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Rectangle.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Rectangle.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Rectangle_FirstPoint
+            extends Rectangle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Rectangle_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(RectangleCADToolContext context)
+            {
+                RectangleCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point_corner"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(RectangleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                RectangleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_point_corner")+" "+
+					PluginServices.getText(this,"cad.or")+" "+
+					PluginServices.getText(this,"square")+" "+
+					"["+PluginServices.getText(this,"RectangleCADTool.square")+"]");
+                    ctxt.setDescription(new String[]{"square", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Rectangle.SecondPointOrSquare);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Rectangle_SecondPointOrSquare
+            extends Rectangle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Rectangle_SecondPointOrSquare(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(RectangleCADToolContext context, String s)
+            {
+                RectangleCADTool ctxt = context.getOwner();
+
+                if (s.equalsIgnoreCase(PluginServices.getText(this,"RectangleCADTool.square")) || s.equals(PluginServices.getText(this,"square")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_opposited_corner"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addOption(s);
+                    }
+                    finally
+                    {
+                        context.setState(Rectangle.SecondPointSquare);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(RectangleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                RectangleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Rectangle.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Rectangle_SecondPointSquare
+            extends Rectangle_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Rectangle_SecondPointSquare(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(RectangleCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                RectangleCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Rectangle.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/RectangleCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MatrixCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MatrixCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MatrixCADToolContext.java	(revision 42196)
@@ -0,0 +1,445 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.MatrixCADTool;
+
+
+public final class MatrixCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public MatrixCADToolContext(MatrixCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Matrix.Start);
+        Matrix.Start.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public MatrixCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((MatrixCADToolState) _state);
+    }
+
+    protected MatrixCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private MatrixCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class MatrixCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected MatrixCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(MatrixCADToolContext context) {}
+        protected void Exit(MatrixCADToolContext context) {}
+
+        protected void addOption(MatrixCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(MatrixCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(MatrixCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(MatrixCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Matrix
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Matrix_Default.Matrix_Start Start;
+        /* package */ static Matrix_Default.Matrix_FirstPoint FirstPoint;
+        /* package */ static Matrix_Default.Matrix_SecondPoint SecondPoint;
+        private static Matrix_Default Default;
+
+        static
+        {
+            Start = new Matrix_Default.Matrix_Start("Matrix.Start", 0);
+            FirstPoint = new Matrix_Default.Matrix_FirstPoint("Matrix.FirstPoint", 1);
+            SecondPoint = new Matrix_Default.Matrix_SecondPoint("Matrix.SecondPoint", 2);
+            Default = new Matrix_Default("Matrix.Default", -1);
+        }
+
+    }
+
+    protected static class Matrix_Default
+        extends MatrixCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Matrix_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(MatrixCADToolContext context, String s)
+        {
+            MatrixCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Matrix.Start.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Matrix.Start);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Matrix.Start.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Matrix.Start);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(MatrixCADToolContext context, double d)
+        {
+            MatrixCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Matrix.Start.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Matrix.Start);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(MatrixCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            MatrixCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Matrix.Start.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Matrix.Start);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Matrix_Start
+            extends Matrix_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Matrix_Start(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(MatrixCADToolContext context)
+            {
+                MatrixCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(MatrixCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                MatrixCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Matrix.SecondPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Matrix_FirstPoint
+            extends Matrix_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Matrix_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(MatrixCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                MatrixCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Matrix.SecondPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Matrix_SecondPoint
+            extends Matrix_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Matrix_SecondPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(MatrixCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                MatrixCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.endMatrix();
+                }
+                finally
+                {
+                    context.setState(Matrix.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MatrixCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MultiPointCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MultiPointCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MultiPointCADToolContext.java	(revision 42196)
@@ -0,0 +1,396 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.MultiPointCADTool;
+
+
+public final class MultiPointCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public MultiPointCADToolContext(MultiPointCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(MultiPoint.InsertPoint);
+        MultiPoint.InsertPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public MultiPointCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((MultiPointCADToolState) _state);
+    }
+
+    protected MultiPointCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private MultiPointCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class MultiPointCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected MultiPointCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(MultiPointCADToolContext context) {}
+        protected void Exit(MultiPointCADToolContext context) {}
+
+        protected void addOption(MultiPointCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(MultiPointCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(MultiPointCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(MultiPointCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class MultiPoint
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static MultiPoint_Default.MultiPoint_InsertPoint InsertPoint;
+        private static MultiPoint_Default Default;
+
+        static
+        {
+            InsertPoint = new MultiPoint_Default.MultiPoint_InsertPoint("MultiPoint.InsertPoint", 0);
+            Default = new MultiPoint_Default("MultiPoint.Default", -1);
+        }
+
+    }
+
+    protected static class MultiPoint_Default
+        extends MultiPointCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected MultiPoint_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(MultiPointCADToolContext context, String s)
+        {
+            MultiPointCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        MultiPoint.InsertPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(MultiPoint.InsertPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        MultiPoint.InsertPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(MultiPoint.InsertPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(MultiPointCADToolContext context, double d)
+        {
+            MultiPointCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    MultiPoint.InsertPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(MultiPoint.InsertPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(MultiPointCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            MultiPointCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    MultiPoint.InsertPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(MultiPoint.InsertPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class MultiPoint_InsertPoint
+            extends MultiPoint_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private MultiPoint_InsertPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(MultiPointCADToolContext context)
+            {
+                MultiPointCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_point"));
+                ctxt.setDescription(new String[]{"cancel", });
+                return;
+            }
+
+            protected void addOption(MultiPointCADToolContext context, String s)
+            {
+                MultiPointCADTool ctxt = context.getOwner();
+
+                if (s.equalsIgnoreCase(PluginServices.getText(this,"MultipointCADTool.end")) || s.equals(PluginServices.getText(this,"end")))
+                {
+                    MultiPointCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(PluginServices.getText(this,"insert_point"));
+                        ctxt.setDescription(new String[]{"cancel"});
+                        ctxt.addOption(s);
+                        ctxt.endGeometry();
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(MultiPointCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                MultiPointCADTool ctxt = context.getOwner();
+
+                MultiPointCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_point")+" "+
+	    			PluginServices.getText(this,"cad.or")+" "+
+	    			PluginServices.getText(this,"end")+
+	   				"["+PluginServices.getText(this,"MultipointCADTool.end")+"]");
+                    ctxt.setDescription(new String[]{"cancel", "end"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MultiPointCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ArcCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ArcCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ArcCADToolContext.java	(revision 42196)
@@ -0,0 +1,443 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.ArcCADTool;
+
+
+public final class ArcCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public ArcCADToolContext(ArcCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Arc.FirstPoint);
+        Arc.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public ArcCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((ArcCADToolState) _state);
+    }
+
+    protected ArcCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private ArcCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class ArcCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected ArcCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(ArcCADToolContext context) {}
+        protected void Exit(ArcCADToolContext context) {}
+
+        protected void addOption(ArcCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(ArcCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(ArcCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Arc
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Arc_Default.Arc_FirstPoint FirstPoint;
+        /* package */ static Arc_Default.Arc_SecondPoint SecondPoint;
+        /* package */ static Arc_Default.Arc_ThirdPoint ThirdPoint;
+        private static Arc_Default Default;
+
+        static
+        {
+            FirstPoint = new Arc_Default.Arc_FirstPoint("Arc.FirstPoint", 0);
+            SecondPoint = new Arc_Default.Arc_SecondPoint("Arc.SecondPoint", 1);
+            ThirdPoint = new Arc_Default.Arc_ThirdPoint("Arc.ThirdPoint", 2);
+            Default = new Arc_Default("Arc.Default", -1);
+        }
+
+    }
+
+    protected static class Arc_Default
+        extends ArcCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Arc_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(ArcCADToolContext context, String s)
+        {
+            ArcCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Arc.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Arc.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Arc.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Arc.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(ArcCADToolContext context, double d)
+        {
+            ArcCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Arc.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Arc.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            ArcCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Arc.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Arc.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Arc_FirstPoint
+            extends Arc_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Arc_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(ArcCADToolContext context)
+            {
+                ArcCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ArcCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Arc.SecondPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Arc_SecondPoint
+            extends Arc_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Arc_SecondPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ArcCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_last_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Arc.ThirdPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Arc_ThirdPoint
+            extends Arc_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Arc_ThirdPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(ArcCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ArcCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Arc.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ArcCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MoveCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MoveCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MoveCADToolContext.java	(revision 42196)
@@ -0,0 +1,407 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.MoveCADTool;
+
+
+public final class MoveCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public MoveCADToolContext(MoveCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Move.FirstPointToMove);
+        Move.FirstPointToMove.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public MoveCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((MoveCADToolState) _state);
+    }
+
+    protected MoveCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private MoveCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class MoveCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected MoveCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(MoveCADToolContext context) {}
+        protected void Exit(MoveCADToolContext context) {}
+
+        protected void addOption(MoveCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(MoveCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(MoveCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Move
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Move_Default.Move_FirstPointToMove FirstPointToMove;
+        /* package */ static Move_Default.Move_SecondPointToMove SecondPointToMove;
+        private static Move_Default Default;
+
+        static
+        {
+            FirstPointToMove = new Move_Default.Move_FirstPointToMove("Move.FirstPointToMove", 0);
+            SecondPointToMove = new Move_Default.Move_SecondPointToMove("Move.SecondPointToMove", 1);
+            Default = new Move_Default("Move.Default", -1);
+        }
+
+    }
+
+    protected static class Move_Default
+        extends MoveCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Move_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(MoveCADToolContext context, String s)
+        {
+            MoveCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Move.FirstPointToMove.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Move.FirstPointToMove);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Move.FirstPointToMove.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Move.FirstPointToMove);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(MoveCADToolContext context, double d)
+        {
+            MoveCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Move.FirstPointToMove.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Move.FirstPointToMove);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            MoveCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Move.FirstPointToMove.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Move.FirstPointToMove);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Move_FirstPointToMove
+            extends Move_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Move_FirstPointToMove(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(MoveCADToolContext context)
+            {
+                MoveCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_point_move"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                MoveCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point_move"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Move.SecondPointToMove);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Move_SecondPointToMove
+            extends Move_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Move_SecondPointToMove(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(MoveCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                MoveCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Move.FirstPointToMove);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/MoveCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplitGeometryCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplitGeometryCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplitGeometryCADToolContext.java	(revision 42196)
@@ -0,0 +1,469 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+/**
+ Finite state machine, generated with fsm tool
+ (http://smc.sourceforge.net)
+ @author Alvaro Zabala
+*/
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.SplitGeometryCADTool;
+
+
+public final class SplitGeometryCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public SplitGeometryCADToolContext(SplitGeometryCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(SplitGeometry.FirstPoint);
+        SplitGeometry.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public SplitGeometryCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((SplitGeometryCADToolState) _state);
+    }
+
+    protected SplitGeometryCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private SplitGeometryCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class SplitGeometryCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected SplitGeometryCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(SplitGeometryCADToolContext context) {}
+        protected void Exit(SplitGeometryCADToolContext context) {}
+
+        protected void addOption(SplitGeometryCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(SplitGeometryCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(SplitGeometryCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(SplitGeometryCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class SplitGeometry
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static SplitGeometry_Default.SplitGeometry_FirstPoint FirstPoint;
+        /* package */ static SplitGeometry_Default.SplitGeometry_DigitizingLine DigitizingLine;
+        private static SplitGeometry_Default Default;
+
+        static
+        {
+            FirstPoint = new SplitGeometry_Default.SplitGeometry_FirstPoint("SplitGeometry.FirstPoint", 0);
+            DigitizingLine = new SplitGeometry_Default.SplitGeometry_DigitizingLine("SplitGeometry.DigitizingLine", 1);
+            Default = new SplitGeometry_Default("SplitGeometry.Default", -1);
+        }
+
+    }
+
+    protected static class SplitGeometry_Default
+        extends SplitGeometryCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected SplitGeometry_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(SplitGeometryCADToolContext context, String s)
+        {
+            SplitGeometryCADTool ctxt = context.getOwner();
+
+            if (s.equals(""))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        SplitGeometry.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.restorePreviousTool();
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(SplitGeometry.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        SplitGeometry.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(SplitGeometry.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        SplitGeometry.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(SplitGeometry.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(SplitGeometryCADToolContext context, double d)
+        {
+            SplitGeometryCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    SplitGeometry.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(SplitGeometry.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(SplitGeometryCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            SplitGeometryCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    SplitGeometry.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(SplitGeometry.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class SplitGeometry_FirstPoint
+            extends SplitGeometry_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private SplitGeometry_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(SplitGeometryCADToolContext context)
+            {
+                SplitGeometryCADTool ctxt = context.getOwner();
+
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(SplitGeometryCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SplitGeometryCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_more_points_or_finish"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(SplitGeometry.DigitizingLine);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class SplitGeometry_DigitizingLine
+            extends SplitGeometry_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private SplitGeometry_DigitizingLine(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(SplitGeometryCADToolContext context, String s)
+            {
+                SplitGeometryCADTool ctxt = context.getOwner();
+
+                if (s.equalsIgnoreCase(PluginServices.getText(this,"SplitGeometryCADTool.end")) || s.equalsIgnoreCase(PluginServices.getText(this,"terminate")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.finishDigitizedLine();
+                        ctxt.splitSelectedGeometryWithDigitizedLine();
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(SplitGeometry.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+                    super.addOption(context, s);
+                }
+
+                return;
+            }
+
+            protected void addPoint(SplitGeometryCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                SplitGeometryCADTool ctxt = context.getOwner();
+
+                SplitGeometryCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_next_point")+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+                    ctxt.setDescription(new String[]{"inter_arc", "terminate", "cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/SplitGeometryCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CopyCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CopyCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CopyCADToolContext.java	(revision 42196)
@@ -0,0 +1,407 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.CopyCADTool;
+
+
+public final class CopyCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public CopyCADToolContext(CopyCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Copy.FirstPointToMove);
+        Copy.FirstPointToMove.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public CopyCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((CopyCADToolState) _state);
+    }
+
+    protected CopyCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private CopyCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class CopyCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected CopyCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(CopyCADToolContext context) {}
+        protected void Exit(CopyCADToolContext context) {}
+
+        protected void addOption(CopyCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(CopyCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(CopyCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(CopyCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Copy
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Copy_Default.Copy_FirstPointToMove FirstPointToMove;
+        /* package */ static Copy_Default.Copy_SecondPointToMove SecondPointToMove;
+        private static Copy_Default Default;
+
+        static
+        {
+            FirstPointToMove = new Copy_Default.Copy_FirstPointToMove("Copy.FirstPointToMove", 0);
+            SecondPointToMove = new Copy_Default.Copy_SecondPointToMove("Copy.SecondPointToMove", 1);
+            Default = new Copy_Default("Copy.Default", -1);
+        }
+
+    }
+
+    protected static class Copy_Default
+        extends CopyCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Copy_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(CopyCADToolContext context, String s)
+        {
+            CopyCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Copy.FirstPointToMove.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Copy.FirstPointToMove);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Copy.FirstPointToMove.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Copy.FirstPointToMove);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(CopyCADToolContext context, double d)
+        {
+            CopyCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Copy.FirstPointToMove.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Copy.FirstPointToMove);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(CopyCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            CopyCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Copy.FirstPointToMove.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Copy.FirstPointToMove);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Copy_FirstPointToMove
+            extends Copy_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Copy_FirstPointToMove(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(CopyCADToolContext context)
+            {
+                CopyCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_basis_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(CopyCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                CopyCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Copy.SecondPointToMove);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Copy_SecondPointToMove
+            extends Copy_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Copy_SecondPointToMove(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(CopyCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                CopyCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Copy.FirstPointToMove);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/CopyCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/StretchCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/StretchCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/StretchCADToolContext.java	(revision 42196)
@@ -0,0 +1,488 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.StretchCADTool;
+
+
+public final class StretchCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public StretchCADToolContext(StretchCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Stretch.SelFirstPoint);
+        Stretch.SelFirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public StretchCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((StretchCADToolState) _state);
+    }
+
+    protected StretchCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private StretchCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class StretchCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected StretchCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(StretchCADToolContext context) {}
+        protected void Exit(StretchCADToolContext context) {}
+
+        protected void addOption(StretchCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(StretchCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(StretchCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(StretchCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Stretch
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Stretch_Default.Stretch_SelFirstPoint SelFirstPoint;
+        /* package */ static Stretch_Default.Stretch_SelLastPoint SelLastPoint;
+        /* package */ static Stretch_Default.Stretch_MoveFirstPoint MoveFirstPoint;
+        /* package */ static Stretch_Default.Stretch_MoveLastPoint MoveLastPoint;
+        private static Stretch_Default Default;
+
+        static
+        {
+            SelFirstPoint = new Stretch_Default.Stretch_SelFirstPoint("Stretch.SelFirstPoint", 0);
+            SelLastPoint = new Stretch_Default.Stretch_SelLastPoint("Stretch.SelLastPoint", 1);
+            MoveFirstPoint = new Stretch_Default.Stretch_MoveFirstPoint("Stretch.MoveFirstPoint", 2);
+            MoveLastPoint = new Stretch_Default.Stretch_MoveLastPoint("Stretch.MoveLastPoint", 3);
+            Default = new Stretch_Default("Stretch.Default", -1);
+        }
+
+    }
+
+    protected static class Stretch_Default
+        extends StretchCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Stretch_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(StretchCADToolContext context, String s)
+        {
+            StretchCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Stretch.SelFirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Stretch.SelFirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Stretch.SelFirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Stretch.SelFirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(StretchCADToolContext context, double d)
+        {
+            StretchCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Stretch.SelFirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Stretch.SelFirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(StretchCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            StretchCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Stretch.SelFirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Stretch.SelFirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Stretch_SelFirstPoint
+            extends Stretch_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Stretch_SelFirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(StretchCADToolContext context)
+            {
+                StretchCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_selection_point"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(StretchCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                StretchCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_selection_last_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Stretch.SelLastPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Stretch_SelLastPoint
+            extends Stretch_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Stretch_SelLastPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(StretchCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                StretchCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_move_first_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Stretch.MoveFirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Stretch_MoveFirstPoint
+            extends Stretch_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Stretch_MoveFirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(StretchCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                StretchCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_move_last_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Stretch.MoveLastPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Stretch_MoveLastPoint
+            extends Stretch_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Stretch_MoveLastPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(StretchCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                StretchCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_selection_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.end();
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Stretch.SelFirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/StretchCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ComplexSelectionCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ComplexSelectionCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ComplexSelectionCADToolContext.java	(revision 42196)
@@ -0,0 +1,966 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.editing.gui.cad.tools.ComplexSelectionCADTool;
+import org.gvsig.i18n.Messages;
+
+
+public final class ComplexSelectionCADToolContext
+extends statemap.FSMContext
+{
+    private static String[] DEFAULT_OPTIONS = new String[]{"out_rectangle", "inside_polygon", "cross_polygon", 
+        "out_polygon", "inside_circle", "cross_circle", "out_circle", "select_all", "cancel"};
+    private static String[] CLOSE_POLYGON_OPTIONS = new String[]{"end_polygon", "out_rectangle", "inside_polygon", "cross_polygon", 
+        "out_polygon", "inside_circle", "cross_circle", "out_circle", "select_all", "cancel"};
+    private static String SELECTION_QUESTION =
+        
+        Messages.getText("inside_circle")
+        +"["+Messages.getText("ComplexSelectionCADTool.introcircle")+"], "
+        +Messages.getText("out_rectangle")
+        +"["+Messages.getText("ComplexSelectionCADTool.outrectangle")+"], "
+        +Messages.getText("inside_polygon")
+        +"["+Messages.getText("ComplexSelectionCADTool.intropolygon")+"]"
+        +"\n#"
+        +Messages.getText("cross_polygon")
+        +"["+Messages.getText("ComplexSelectionCADTool.crosspolygon")+"], "
+        +Messages.getText("out_polygon")
+        +"["+Messages.getText("ComplexSelectionCADTool.outpolygon")+"], "
+        +Messages.getText("cross_circle")
+        +"["+Messages.getText("ComplexSelectionCADTool.crosscircle")+"]"
+        +"\n#"
+        +Messages.getText("out_circle")
+        +"["+Messages.getText("ComplexSelectionCADTool.outcircle")+"]";
+
+    //---------------------------------------------------------------
+    // Member methods.
+    //
+
+    public ComplexSelectionCADToolContext(ComplexSelectionCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Selection.FirstPoint);
+        Selection.FirstPoint.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public ComplexSelectionCADToolState getState()
+    throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((ComplexSelectionCADToolState) _state);
+    }
+
+    protected ComplexSelectionCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+    //---------------------------------------------------------------
+    // Member data.
+    //
+
+    transient private ComplexSelectionCADTool _owner;
+
+    //---------------------------------------------------------------
+    // Inner classes.
+    //
+
+    public static abstract class ComplexSelectionCADToolState
+    extends statemap.State
+    {
+        //-----------------------------------------------------------
+        // Member methods.
+        //
+
+        protected ComplexSelectionCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(ComplexSelectionCADToolContext context) {}
+        protected void Exit(ComplexSelectionCADToolContext context) {}
+
+        protected void addOption(ComplexSelectionCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(ComplexSelectionCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(ComplexSelectionCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+        //-----------------------------------------------------------
+        // Member data.
+        //
+    }
+
+    /* package */ static abstract class Selection
+    {
+        //-----------------------------------------------------------
+        // Member methods.
+        //
+
+        //-----------------------------------------------------------
+        // Member data.
+        //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Selection_Default.Selection_FirstPoint FirstPoint;
+        /* package */ static Selection_Default.Selection_SecondPoint SecondPoint;
+        /* package */ static Selection_Default.Selection_WithSelectedFeatures WithSelectedFeatures;
+        /* package */ static Selection_Default.Selection_WithHandlers WithHandlers;
+        /* package */ static Selection_Default.Selection_SecondPointOutRectangle SecondPointOutRectangle;
+        /* package */ static Selection_Default.Selection_SecondPointCircle SecondPointCircle;
+        /* package */ static Selection_Default.Selection_NextPointPolygon NextPointPolygon;
+        private static Selection_Default Default;
+
+        static
+        {
+            FirstPoint = new Selection_Default.Selection_FirstPoint("Selection.FirstPoint", 0);
+            SecondPoint = new Selection_Default.Selection_SecondPoint("Selection.SecondPoint", 1);
+            WithSelectedFeatures = new Selection_Default.Selection_WithSelectedFeatures("Selection.WithSelectedFeatures", 2);
+            WithHandlers = new Selection_Default.Selection_WithHandlers("Selection.WithHandlers", 3);
+            SecondPointOutRectangle = new Selection_Default.Selection_SecondPointOutRectangle("Selection.SecondPointOutRectangle", 4);
+            SecondPointCircle = new Selection_Default.Selection_SecondPointCircle("Selection.SecondPointCircle", 5);
+            NextPointPolygon = new Selection_Default.Selection_NextPointPolygon("Selection.NextPointPolygon", 6);
+            Default = new Selection_Default("Selection.Default", -1);
+        }
+
+    }
+
+    protected static class Selection_Default
+    extends ComplexSelectionCADToolState
+    {
+        //-----------------------------------------------------------
+        // Member methods.
+        //
+
+        protected Selection_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(ComplexSelectionCADToolContext context, String s)
+        {
+            ComplexSelectionCADTool ctxt = context.getOwner();
+
+            if (s.equals(Messages.getText("cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Selection.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Selection.FirstPoint.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(Messages.getText("incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(ComplexSelectionCADToolContext context, double d)
+        {
+            ComplexSelectionCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Selection.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(Messages.getText("incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Selection.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            ComplexSelectionCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Selection.FirstPoint.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(Messages.getText("incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Selection.FirstPoint);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        //-----------------------------------------------------------
+        // Inner classse.
+        //
+
+
+        private static final class Selection_FirstPoint
+        extends Selection_Default
+        {
+            //-------------------------------------------------------
+            // Member methods.
+            //
+
+            private Selection_FirstPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(ComplexSelectionCADToolContext context)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.getType().equals(Messages.getText("inside_polygon")) || ctxt.getType().equals(Messages.getText("cross_polygon")) || ctxt.getType().equals(Messages.getText("out_polygon"))){
+                    ctxt.setQuestion(Messages.getText("insert_first_point"));
+                }else if(ctxt.getType().equals(Messages.getText("inside_circle")) || ctxt.getType().equals(Messages.getText("cross_circle")) || ctxt.getType().equals(Messages.getText("out_circle"))){
+                    ctxt.setQuestion(Messages.getText("insert_first_point"));
+                }else if (ctxt.getType().equals(Messages.getText("out_rectangle"))){
+                    ctxt.setQuestion(Messages.getText("insert_first_point"));
+                }else{
+                    ctxt.setQuestion(SELECTION_QUESTION);     
+                }
+                ctxt.setDescription(DEFAULT_OPTIONS);
+            }
+
+            protected void addOption(ComplexSelectionCADToolContext context, String s)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                ComplexSelectionCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    if (s.equals(Messages.getText("inside_polygon")) || s.equals(Messages.getText("cross_polygon")) || s.equals(Messages.getText("out_polygon"))){
+                        ctxt.setQuestion(Messages.getText("insert_first_point"));
+                    }else if(s.equals(Messages.getText("inside_circle")) || s.equals(Messages.getText("cross_circle")) || s.equals(Messages.getText("out_circle"))){
+                        ctxt.setQuestion(Messages.getText("insert_first_point"));
+                    }else if (s.equals(Messages.getText("out_rectangle"))){
+                        ctxt.setQuestion(Messages.getText("insert_first_point"));
+                    }else if (s.equals(Messages.getText("select_all"))){
+                        if (ctxt.selectAll() > 0){ 
+                            try
+                            {                                           
+                                ctxt.setQuestion(Messages.getText("select_handlers"));
+                                ctxt.setDescription(DEFAULT_OPTIONS);
+                                ctxt.end();
+                            }
+                            finally
+                            {
+                                endState = Selection.WithSelectedFeatures;                                 
+                                return;
+                            }                          
+
+                        }
+                    }
+                    else{
+                        ctxt.setQuestion(SELECTION_QUESTION);    
+                    }
+                    ctxt.setDescription(DEFAULT_OPTIONS);
+                    ctxt.addOption(s);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+            protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.getType().equals(Messages.getText("out_rectangle")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("insert_second_point_selection"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.SecondPointOutRectangle);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (ctxt.getType().equals(Messages.getText("inside_circle")) || ctxt.getType().equals(Messages.getText("cross_circle")) || ctxt.getType().equals(Messages.getText("out_circle")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("insert_radius_or_second_point"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.SecondPointCircle);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (ctxt.getType().equals(Messages.getText("inside_polygon")) || ctxt.getType().equals(Messages.getText("cross_polygon")) || ctxt.getType().equals(Messages.getText("out_polygon")))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("insert_next_point_selection_or_end_polygon")+
+                            "["+Messages.getText("ComplexSelectionCADTool.end")+"]");
+                        ctxt.setDescription(CLOSE_POLYGON_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.NextPointPolygon);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (ctxt.getType().equals(Messages.getText("simple")) && ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.SecondPoint"))
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("insert_second_point_selection"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.SecondPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }                else
+                {
+                    super.addPoint(context, pointX, pointY, event);
+                }
+
+                return;
+            }
+
+            //-------------------------------------------------------
+            // Member data.
+            //
+        }
+
+        private static final class Selection_SecondPoint
+        extends Selection_Default
+        {
+            //-------------------------------------------------------
+            // Member methods.
+            //
+
+            private Selection_SecondPoint(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(ComplexSelectionCADToolContext context, String s)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(SELECTION_QUESTION);    
+                    ctxt.setDescription(CLOSE_POLYGON_OPTIONS);
+                    ctxt.setType(s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.selectWithSecondPoint(pointX,pointY, event) > 0)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("select_handlers"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithSelectedFeatures);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(SELECTION_QUESTION);    
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+
+                return;
+            }
+
+            //-------------------------------------------------------
+            // Member data.
+            //
+        }
+
+        private static final class Selection_WithSelectedFeatures
+        extends Selection_Default
+        {
+            //-------------------------------------------------------
+            // Member methods.
+            //
+
+            private Selection_WithSelectedFeatures(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(ComplexSelectionCADToolContext context, String s)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(SELECTION_QUESTION);    
+                    ctxt.setDescription(CLOSE_POLYGON_OPTIONS);
+                    ctxt.setType(s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.selectHandlers(pointX, pointY, event)>0)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("insert_destination_point"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithHandlers);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else if (ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.WithSelectedFeatures"))
+                {
+                    ComplexSelectionCADToolState endState = context.getState();
+
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("select_handlers"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(endState);
+                    }
+                }
+                else
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(SELECTION_QUESTION);    
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+
+                return;
+            }
+
+            //-------------------------------------------------------
+            // Member data.
+            //
+        }
+
+        private static final class Selection_WithHandlers
+        extends Selection_Default
+        {
+            //-------------------------------------------------------
+            // Member methods.
+            //
+
+            private Selection_WithHandlers(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(Messages.getText("select_handlers"));
+                    ctxt.setDescription(DEFAULT_OPTIONS);
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.refresh();
+                }
+                finally
+                {
+                    context.setState(Selection.WithSelectedFeatures);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            //-------------------------------------------------------
+            // Member data.
+            //
+        }
+
+        private static final class Selection_SecondPointOutRectangle
+        extends Selection_Default
+        {
+            //-------------------------------------------------------
+            // Member methods.
+            //
+
+            private Selection_SecondPointOutRectangle(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(ComplexSelectionCADToolContext context, String s)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(SELECTION_QUESTION);    
+                    ctxt.setDescription(CLOSE_POLYGON_OPTIONS);
+                    ctxt.setType(s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.selectWithSecondPointOutRectangle(pointX,pointY, event) > 0)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("select_handlers"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithSelectedFeatures);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(SELECTION_QUESTION);    
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+
+                return;
+            }
+
+            //-------------------------------------------------------
+            // Member data.
+            //
+        }
+
+        private static final class Selection_SecondPointCircle
+        extends Selection_Default
+        {
+            //-------------------------------------------------------
+            // Member methods.
+            //
+
+            private Selection_SecondPointCircle(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(ComplexSelectionCADToolContext context, String s)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(SELECTION_QUESTION);    
+                    ctxt.setDescription(DEFAULT_OPTIONS);
+                    ctxt.setType(s);
+                }
+                finally
+                {
+                    context.setState(Selection.FirstPoint);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                if (ctxt.selectWithCircle(pointX,pointY, event) > 0)
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(Messages.getText("select_handlers"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithSelectedFeatures);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                else
+                {
+
+                    (context.getState()).Exit(context);
+                    context.clearState();
+                    try
+                    {
+                        ctxt.setQuestion(SELECTION_QUESTION);    
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.addPoint(pointX, pointY, event);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+
+                return;
+            }
+
+            //-------------------------------------------------------
+            // Member data.
+            //
+        }
+
+        private static final class Selection_NextPointPolygon
+        extends Selection_Default
+        {
+            //-------------------------------------------------------
+            // Member methods.
+            //
+
+            private Selection_NextPointPolygon(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addOption(ComplexSelectionCADToolContext context, String s)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                ComplexSelectionCADToolState state = context.getState();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+
+
+
+                if (ctxt.selectCurrentSurface() > 0){
+                    try
+                    {                      
+                        ctxt.setQuestion(Messages.getText("select_handlers"));
+                        ctxt.setDescription(DEFAULT_OPTIONS);
+                        ctxt.end();
+                    }
+                    finally
+                    {
+                        context.setState(Selection.WithSelectedFeatures);
+                        (context.getState()).Entry(context);
+                    }
+                }else{
+                    try
+                    {
+                        ctxt.setQuestion(SELECTION_QUESTION);    
+                        ctxt.setDescription(CLOSE_POLYGON_OPTIONS);
+                        ctxt.setType(s);
+                    }
+                    finally
+                    {
+                        context.setState(Selection.FirstPoint);
+                        (context.getState()).Entry(context);
+                    }
+                }
+                return;
+            }
+
+            protected void addPoint(ComplexSelectionCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                ComplexSelectionCADTool ctxt = context.getOwner();
+
+                ComplexSelectionCADToolState endState = context.getState();
+
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(Messages.getText("insert_next_point_selection_or_end_polygon")+
+                        "["+Messages.getText("ComplexSelectionCADTool.end")+"]");
+                    ctxt.setDescription(CLOSE_POLYGON_OPTIONS);
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(endState);
+                }
+                return;
+            }
+
+            //-------------------------------------------------------
+            // Member data.
+            //
+        }
+
+        //-----------------------------------------------------------
+        // Member data.
+        //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/ComplexSelectionCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EquidistanceCADToolContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EquidistanceCADToolContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EquidistanceCADToolContext.java	(revision 42196)
@@ -0,0 +1,467 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+//
+// Vicente Caballero Navarro
+
+
+package org.gvsig.editing.gui.cad.tools.smc;
+
+import java.awt.event.InputEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.editing.gui.cad.tools.EquidistanceCADTool;
+
+
+public final class EquidistanceCADToolContext
+    extends statemap.FSMContext
+{
+//---------------------------------------------------------------
+// Member methods.
+//
+
+    public EquidistanceCADToolContext(EquidistanceCADTool owner)
+    {
+        super();
+
+        _owner = owner;
+        setState(Equidistance.Distance);
+        Equidistance.Distance.Entry(this);
+    }
+
+    public void addOption(String s)
+    {
+        _transition = "addOption";
+        getState().addOption(this, s);
+        _transition = "";
+        return;
+    }
+
+    public void addPoint(double pointX, double pointY, InputEvent event)
+    {
+        _transition = "addPoint";
+        getState().addPoint(this, pointX, pointY, event);
+        _transition = "";
+        return;
+    }
+
+    public void addValue(double d)
+    {
+        _transition = "addValue";
+        getState().addValue(this, d);
+        _transition = "";
+        return;
+    }
+
+    public EquidistanceCADToolState getState()
+        throws statemap.StateUndefinedException
+    {
+        if (_state == null)
+        {
+            throw(
+                new statemap.StateUndefinedException());
+        }
+
+        return ((EquidistanceCADToolState) _state);
+    }
+
+    protected EquidistanceCADTool getOwner()
+    {
+        return (_owner);
+    }
+
+//---------------------------------------------------------------
+// Member data.
+//
+
+    transient private EquidistanceCADTool _owner;
+
+//---------------------------------------------------------------
+// Inner classes.
+//
+
+    public static abstract class EquidistanceCADToolState
+        extends statemap.State
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected EquidistanceCADToolState(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void Entry(EquidistanceCADToolContext context) {}
+        protected void Exit(EquidistanceCADToolContext context) {}
+
+        protected void addOption(EquidistanceCADToolContext context, String s)
+        {
+            Default(context);
+        }
+
+        protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            Default(context);
+        }
+
+        protected void addValue(EquidistanceCADToolContext context, double d)
+        {
+            Default(context);
+        }
+
+        protected void Default(EquidistanceCADToolContext context)
+        {
+            throw (
+                new statemap.TransitionUndefinedException(
+                    "State: " +
+                    context.getState().getName() +
+                    ", Transition: " +
+                    context.getTransition()));
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+
+    /* package */ static abstract class Equidistance
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+
+        //-------------------------------------------------------
+        // Statics.
+        //
+        /* package */ static Equidistance_Default.Equidistance_Distance Distance;
+        /* package */ static Equidistance_Default.Equidistance_SecondPointDistance SecondPointDistance;
+        /* package */ static Equidistance_Default.Equidistance_Position Position;
+        private static Equidistance_Default Default;
+
+        static
+        {
+            Distance = new Equidistance_Default.Equidistance_Distance("Equidistance.Distance", 0);
+            SecondPointDistance = new Equidistance_Default.Equidistance_SecondPointDistance("Equidistance.SecondPointDistance", 1);
+            Position = new Equidistance_Default.Equidistance_Position("Equidistance.Position", 2);
+            Default = new Equidistance_Default("Equidistance.Default", -1);
+        }
+
+    }
+
+    protected static class Equidistance_Default
+        extends EquidistanceCADToolState
+    {
+    //-----------------------------------------------------------
+    // Member methods.
+    //
+
+        protected Equidistance_Default(String name, int id)
+        {
+            super (name, id);
+        }
+
+        protected void addOption(EquidistanceCADToolContext context, String s)
+        {
+            EquidistanceCADTool ctxt = context.getOwner();
+
+            if (s.equals(PluginServices.getText(this,"cancel")))
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Equidistance.Distance.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Equidistance.Distance);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+            else
+            {
+                boolean loopbackFlag =
+                    context.getState().getName().equals(
+                        Equidistance.Distance.getName());
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Exit(context);
+                }
+
+                context.clearState();
+                try
+                {
+                    ctxt.throwOptionException(PluginServices.getText(this,"incorrect_option"), s);
+                }
+                finally
+                {
+                    context.setState(Equidistance.Distance);
+
+                    if (loopbackFlag == false)
+                    {
+                        (context.getState()).Entry(context);
+                    }
+
+                }
+            }
+
+            return;
+        }
+
+        protected void addValue(EquidistanceCADToolContext context, double d)
+        {
+            EquidistanceCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Equidistance.Distance.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwValueException(PluginServices.getText(this,"incorrect_value"), d);
+            }
+            finally
+            {
+                context.setState(Equidistance.Distance);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+        protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
+        {
+            EquidistanceCADTool ctxt = context.getOwner();
+
+            boolean loopbackFlag =
+                context.getState().getName().equals(
+                    Equidistance.Distance.getName());
+
+            if (loopbackFlag == false)
+            {
+                (context.getState()).Exit(context);
+            }
+
+            context.clearState();
+            try
+            {
+                ctxt.throwPointException(PluginServices.getText(this,"incorrect_point"), pointX, pointY);
+            }
+            finally
+            {
+                context.setState(Equidistance.Distance);
+
+                if (loopbackFlag == false)
+                {
+                    (context.getState()).Entry(context);
+                }
+
+            }
+            return;
+        }
+
+    //-----------------------------------------------------------
+    // Inner classse.
+    //
+
+
+        private static final class Equidistance_Distance
+            extends Equidistance_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Equidistance_Distance(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void Entry(EquidistanceCADToolContext context)
+            {
+                EquidistanceCADTool ctxt = context.getOwner();
+
+                ctxt.selection();
+                ctxt.setQuestion(PluginServices.getText(this,"insert_first_point_or_distance"));
+                ctxt.setDescription(new String[]{"cancel"});
+                return;
+            }
+
+            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EquidistanceCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"insert_second_point"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Equidistance.SecondPointDistance);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+            protected void addValue(EquidistanceCADToolContext context, double d)
+            {
+                EquidistanceCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"position"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addValue(d);
+                }
+                finally
+                {
+                    context.setState(Equidistance.Position);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Equidistance_SecondPointDistance
+            extends Equidistance_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Equidistance_SecondPointDistance(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EquidistanceCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setQuestion(PluginServices.getText(this,"position"));
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                }
+                finally
+                {
+                    context.setState(Equidistance.Position);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+        private static final class Equidistance_Position
+            extends Equidistance_Default
+        {
+        //-------------------------------------------------------
+        // Member methods.
+        //
+
+            private Equidistance_Position(String name, int id)
+            {
+                super (name, id);
+            }
+
+            protected void addPoint(EquidistanceCADToolContext context, double pointX, double pointY, InputEvent event)
+            {
+                EquidistanceCADTool ctxt = context.getOwner();
+
+
+                (context.getState()).Exit(context);
+                context.clearState();
+                try
+                {
+                    ctxt.setDescription(new String[]{"cancel"});
+                    ctxt.addPoint(pointX, pointY, event);
+                    ctxt.end();
+                }
+                finally
+                {
+                    context.setState(Equidistance.Distance);
+                    (context.getState()).Entry(context);
+                }
+                return;
+            }
+
+        //-------------------------------------------------------
+        // Member data.
+        //
+        }
+
+    //-----------------------------------------------------------
+    // Member data.
+    //
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/smc/EquidistanceCADToolContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RotateCADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RotateCADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RotateCADTool.java	(revision 42196)
@@ -0,0 +1,340 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.tools;
+
+import java.awt.event.InputEvent;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.IEditionManager;
+import org.gvsig.editing.gui.cad.DefaultCADTool;
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.gui.cad.tools.smc.RotateCADToolContext;
+import org.gvsig.editing.gui.cad.tools.smc.RotateCADToolContext.RotateCADToolState;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class RotateCADTool extends DefaultCADTool {
+
+    private RotateCADToolContext _fsm;
+    private Point2D firstPoint;
+    private Point2D lastPoint;
+
+    /**
+     * M�todo de incio, para poner el c�digo de todo lo que se requiera de una
+     * carga previa a la utilizaci�n de la herramienta.
+     */
+    public void init() {
+        _fsm = new RotateCADToolContext(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double, double)
+     */
+    public void transition(double x, double y, InputEvent event) {
+        _fsm.addPoint(x, y, event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * double)
+     */
+    public void transition(double d) {
+        _fsm.addValue(d);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap
+     * .layers.FBitSet,
+     * java.lang.String)
+     */
+    public void transition(String s) throws CommandException {
+        if (!super.changeCommand(s)) {
+            _fsm.addOption(s);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void selection() {
+        FeatureSet selection = null;
+        try {
+            selection = (FeatureSet) getVLE().getFeatureStore().getSelection();
+
+            if (selection.getSize() == 0
+                && !SelectionCADTool.isInstance(CADExtension.getCADTool(), true)) {
+                CADExtension.setCADTool("_selection", false);
+                ((SelectionCADTool) CADExtension.getCADTool())
+                    .setNextTool("_rotate");
+            }
+        } catch (ReadException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DataException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Equivale al transition del prototipo pero sin pasarle como par�metro el
+     * editableFeatureSource que ya estar� creado.
+     * 
+     * @param x
+     *            par�metro x del punto que se pase en esta transici�n.
+     * @param y
+     *            par�metro y del punto que se pase en esta transici�n.
+     */
+    public void addPoint(double x, double y, InputEvent event) {
+        RotateCADToolState actualState =
+            (RotateCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        try {
+            featureStore = vle.getFeatureStore();
+        } catch (ReadException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
+        DisposableIterator iterator = null;
+        try {
+            FeatureSet selection = (FeatureSet) featureStore.getSelection();// getSelectedRows();
+            ArrayList selectedRowAux = new ArrayList();
+
+            if (status.equals("Rotate.PointMain")) {
+                firstPoint = new Point2D.Double(x, y);
+            } else
+                if (status.equals("Rotate.AngleOrPoint")) {
+                    PluginServices.getMDIManager().setWaitCursor();
+                    lastPoint = new Point2D.Double(x, y);
+
+                    double w;
+                    double h;
+                    w = lastPoint.getX() - firstPoint.getX();
+                    h = lastPoint.getY() - firstPoint.getY();
+
+                    featureStore.beginEditingGroup(getName());
+                    try {
+                        iterator = selection.iterator();
+                        while (iterator.hasNext()) {
+                            Feature feature = (Feature) iterator.next();
+
+                            // }
+                            // for (int i = 0; i < selectedRow.size(); i++) {
+                            // DefaultRowEdited row=(DefaultRowEdited)
+                            // selectedRow.get(i);
+                            // DefaultFeature fea = (DefaultFeature)
+                            // row.getLinkedRow().cloneRow();
+                            // Rotamos la geometry
+                            Geometry geometry =
+                                (feature.getDefaultGeometry()).cloneGeometry();
+                            EditableFeature eFeature = feature.getEditable();
+                            
+                            geometry.rotate(-Math.atan2(w, h) + (Math.PI / 2),
+                                firstPoint.getX(), firstPoint.getY());
+                            
+                            super.updateGeometry(featureStore, feature, geometry);
+//                            eFeature.setGeometry(featureStore
+//                                .getDefaultFeatureType()
+//                                .getDefaultGeometryAttributeName(), geometry);
+//                            featureStore.update(eFeature);
+                            // vea.modifyRow(row.getIndex(), fea,
+                            // getName(),EditionEvent.GRAPHIC);
+                            // selectedRowAux.add(new
+                            // DefaultRowEdited(fea,IRowEdited.STATUS_MODIFIED,row.getIndex()));
+                        }
+                    } finally {
+
+                        featureStore.endEditingGroup();
+                    }
+                    // vle.setSelectionCache(VectorialLayerEdited.NOTSAVEPREVIOUS,
+                    // selectedRowAux);
+                    // clearSelection();
+                    // selectedRow.addAll(selectedRowAux);
+
+                    PluginServices.getMDIManager().restoreCursor();
+                }
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    /**
+     * M�todo para dibujar la lo necesario para el estado en el que nos
+     * encontremos.
+     * 
+     * @param g
+     *            Graphics sobre el que dibujar.
+     * @param x
+     *            par�metro x del punto que se pase para dibujar.
+     * @param y
+     *            par�metro x del punto que se pase para dibujar.
+     */
+    public void drawOperation(MapControlDrawer renderer, double x, double y) {
+        RotateCADToolState actualState = _fsm.getState();
+        String status = actualState.getName();
+
+        if (status.equals("Rotate.AngleOrPoint")) {
+            drawAndRotateSelectedGeometries(renderer, firstPoint, x, y);
+            renderer.drawLine(firstPoint, new Point2D.Double(x, y),
+                mapControlManager.getAxisReferenceSymbol());
+        }
+    }
+
+    /**
+     * Add a diferent option.
+     * 
+     * @param s
+     *            Diferent option.
+     */
+    public void addOption(String s) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
+     */
+    public void addValue(double d) {
+        RotateCADToolState actualState =
+            (RotateCADToolState) _fsm.getPreviousState();
+        String status = actualState.getName();
+        VectorialLayerEdited vle = getVLE();
+        FeatureStore featureStore = null;
+        IEditionManager ed_man = this.getEditionManager();
+        
+        try {
+            featureStore = vle.getFeatureStore();
+        } catch (ReadException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
+        DisposableIterator iterator = null;
+        try {
+            FeatureSet selection = (FeatureSet) featureStore.getSelection();// getSelectedRows();
+
+            if (status.equals("Rotate.AngleOrPoint")) {
+
+                featureStore.beginEditingGroup(getName());
+                try {
+                    // /ArrayList selectedRowAux=new ArrayList();
+                    iterator = selection.iterator();
+                    while (iterator.hasNext()) {
+                        Feature feature = (Feature) iterator.next();
+
+                        // }
+                        // for (int i = 0; i < selectedRow.size(); i++) {
+                        // DefaultRowEdited row=(DefaultRowEdited)
+                        // selectedRow.get(i);
+                        // DefaultFeature fea = (DefaultFeature)
+                        // row.getLinkedRow().cloneRow();
+                        // Rotamos la geometry
+                        AffineTransform at = new AffineTransform();
+                        at.rotate(Math.toRadians(d), firstPoint.getX(),
+                            firstPoint.getY());
+                        Geometry geometry =
+                            (feature.getDefaultGeometry()).cloneGeometry();
+                        EditableFeature eFeature = feature.getEditable();
+                        geometry.transform(at);
+                        eFeature.setGeometry(featureStore
+                            .getDefaultFeatureType()
+                            .getDefaultGeometryAttributeName(), geometry);
+                        
+                        ed_man.updateFeature(featureStore, eFeature);
+                        // vea.modifyRow(row.getIndex(),
+                        // fea,getName(),EditionEvent.GRAPHIC);
+                        // /selectedRowAux.add(new
+                        // DefaultRowEdited(fea,IRowEdited.STATUS_MODIFIED,index));
+                    }
+                } finally {
+                    featureStore.endEditingGroup();
+                }
+                clearSelection();
+                // /selectedRow=selectedRowAux;
+
+            }
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "rotate_");
+    }
+
+    public String toString() {
+        return "_rotate";
+    }
+
+    @Override
+    public boolean isApplicable(GeometryType geometryType) {
+        return true;
+    }
+
+    @Override
+    protected int[] getSupportedGeometryTypes() {
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/tools/RotateCADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseGeometryType.java	(revision 42196)
@@ -0,0 +1,271 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.panels;
+
+
+import javax.swing.ButtonGroup;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+
+
+/**
+ * @author fjp
+ *
+ * Panel para que el usuario seleccione el driver que va a utilizar para
+ * crear un tema desde cero.
+ *
+ */
+public class ChooseGeometryType extends JWizardPanel {
+
+	private JLabel lblSelecGeometryType = null;
+	private JPanel jPanelGeometryTypeOptions = null;
+	private JRadioButton jRadioButtonPoint = null;
+	private JRadioButton jRadioButtonLine = null;
+	private JRadioButton jRadioButtonPolygon = null;
+	private JRadioButton jRadioButtonMulti = null;
+	private JRadioButton jRadioButtonMultiPoint = null;
+	private JTextField jTextFieldLayerName = null;
+	private JLabel jLabelLayerName = null;
+	private String driverName;
+
+	private class MyInputEventListener implements CaretListener
+	{
+		public void caretUpdate(CaretEvent arg0) {
+			if (jTextFieldLayerName.getText().length() > 0)
+				setNextButtonEnabled(true);
+			else
+				setNextButtonEnabled(false);
+
+		}
+
+	}
+
+	public ChooseGeometryType(JWizardComponents wizardComponents) {
+		super(wizardComponents);
+		initialize();
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        jLabelLayerName = new JLabel();
+        jLabelLayerName.setBounds(new java.awt.Rectangle(14,9,321,22));
+        jLabelLayerName.setText(PluginServices.getText(this,"enter_layer_name"));
+        lblSelecGeometryType = new JLabel();
+        lblSelecGeometryType.setText(PluginServices.getText(this,"select_geometry_type"));
+        lblSelecGeometryType.setBounds(new java.awt.Rectangle(13,63,329,15));
+        this.setLayout(null);
+        this.setSize(new java.awt.Dimension(358,263));
+        this.add(lblSelecGeometryType, null);
+        this.add(getJPanelGeometryTypeOptions(), null);
+        this.add(getJTextFieldLayerName(), null);
+        this.add(jLabelLayerName, null);
+
+	}
+
+	/**
+	 * This method initializes jPanelGeometryTypeOptions
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelGeometryTypeOptions() {
+		if (jPanelGeometryTypeOptions == null) {
+			jPanelGeometryTypeOptions = new JPanel();
+			jPanelGeometryTypeOptions.setLayout(null);
+			jPanelGeometryTypeOptions.setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this,"Geometry_types"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			jPanelGeometryTypeOptions.setPreferredSize(new java.awt.Dimension(300,400));
+			jPanelGeometryTypeOptions.setBounds(new java.awt.Rectangle(14,82,326,172));
+			jPanelGeometryTypeOptions.add(getJRadioButtonPoint(), null);
+			jPanelGeometryTypeOptions.add(getJRadioButtonLine(), null);
+			jPanelGeometryTypeOptions.add(getJRadioButtonPolygon(), null);
+			jPanelGeometryTypeOptions.add(getJRadioButtonMulti(), null);
+			jPanelGeometryTypeOptions.add(getJRadioButtonMultiPoint(), null);
+
+		    //Group the radio buttons.
+		    ButtonGroup group = new ButtonGroup();
+		    group.add(getJRadioButtonPoint());
+		    group.add(getJRadioButtonLine());
+		    group.add(getJRadioButtonPolygon());
+		    group.add(getJRadioButtonMulti());
+		    group.add(getJRadioButtonMultiPoint());
+
+		}
+		return jPanelGeometryTypeOptions;
+	}
+
+	/**
+	 * This method initializes jRadioButtonPoint
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getJRadioButtonPoint() {
+		if (jRadioButtonPoint == null) {
+			jRadioButtonPoint = new JRadioButton();
+			jRadioButtonPoint.setText(PluginServices.getText(this,"point_type"));
+			jRadioButtonPoint.setBounds(new java.awt.Rectangle(19,31,297,23));
+		}
+		return jRadioButtonPoint;
+	}
+
+	/**
+	 * This method initializes jRadioButtonLine
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getJRadioButtonLine() {
+		if (jRadioButtonLine == null) {
+			jRadioButtonLine = new JRadioButton();
+			jRadioButtonLine.setText(PluginServices.getText(this,"line_type"));
+			jRadioButtonLine.setSelected(true);
+			jRadioButtonLine.setBounds(new java.awt.Rectangle(19,81,297,23));
+		}
+		return jRadioButtonLine;
+	}
+
+	/**
+	 * This method initializes jRadioButtonPolygon
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getJRadioButtonPolygon() {
+		if (jRadioButtonPolygon == null) {
+			jRadioButtonPolygon = new JRadioButton();
+			jRadioButtonPolygon.setText(PluginServices.getText(this,"polygon_type"));
+			jRadioButtonPolygon.setBounds(new java.awt.Rectangle(19,106,297,23));
+		}
+		return jRadioButtonPolygon;
+	}
+
+	/**
+	 * This method initializes jRadioButtonMulti
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getJRadioButtonMulti() {
+		if (jRadioButtonMulti == null) {
+			jRadioButtonMulti = new JRadioButton();
+			jRadioButtonMulti.setText(PluginServices.getText(this,"multi_type"));
+			jRadioButtonMulti.setBounds(new java.awt.Rectangle(19,131,297,23));
+		}
+		return jRadioButtonMulti;
+	}
+
+	/**
+	 * This method initializes jRadioButton
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getJRadioButtonMultiPoint() {
+		if (jRadioButtonMultiPoint == null) {
+			jRadioButtonMultiPoint = new JRadioButton();
+			jRadioButtonMultiPoint.setText(PluginServices.getText(this,"multipoint_type"));
+			jRadioButtonMultiPoint.setBounds(new java.awt.Rectangle(19,56,297,23));
+		}
+		return jRadioButtonMultiPoint;
+	}
+
+	/**
+	 * En funci�n de qu� tipo de driver sea, habilitamos o deshabilitamos
+	 * las opciones. Por ejemplo, si es de tipo shp, deshabilitamos
+	 * multi_type
+	 * @param writer
+	 */
+	public void setFeatureStore(FeatureStore store) {
+		// En funci�n de qu� tipo de driver sea, habilitamos o deshabilitamos
+		// las opciones. Por ejemplo, si es de tipo shp, deshabilitamos
+		// multi_type
+//		IWriteable aux = (IWriteable) store.;
+//		ISpatialWriter writer = (ISpatialWriter) aux.getWriter();
+//		System.out.println("Writer seleccionado:" + writer.getName());
+//		driverName = store.getName();
+		try {
+			getJRadioButtonPoint().setEnabled(store.canWriteGeometry(Geometry.TYPES.POINT));
+			getJRadioButtonMultiPoint().setEnabled(store.canWriteGeometry(Geometry.TYPES.MULTIPOINT));
+			getJRadioButtonLine().setEnabled(store.canWriteGeometry(Geometry.TYPES.CURVE));
+			getJRadioButtonPolygon().setEnabled(store.canWriteGeometry(Geometry.TYPES.SURFACE));
+			getJRadioButtonMulti().setEnabled(store.canWriteGeometry(Geometry.TYPES.GEOMETRY));
+		} catch (DataException e) {
+			e.printStackTrace();
+		}
+
+	}
+
+	public int getSelectedGeometryType()
+	{
+		if (getJRadioButtonPoint().isSelected())
+			return Geometry.TYPES.POINT;
+		if (getJRadioButtonMultiPoint().isSelected())
+			return Geometry.TYPES.MULTIPOINT;
+		if (getJRadioButtonLine().isSelected())
+			return Geometry.TYPES.CURVE;
+		if (getJRadioButtonPolygon().isSelected())
+			return Geometry.TYPES.SURFACE;
+		if (getJRadioButtonMulti().isSelected())
+			return Geometry.TYPES.GEOMETRY;
+
+		return -1;
+	}
+
+	/**
+	 * This method initializes jTextLayerName
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTextFieldLayerName() {
+		if (jTextFieldLayerName == null) {
+			jTextFieldLayerName = new JTextField();
+			jTextFieldLayerName.setBounds(new java.awt.Rectangle(13,36,323,20));
+			jTextFieldLayerName.setText("layer1"); //PluginServices.getText(this,"new_layer"));
+			jTextFieldLayerName.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+			jTextFieldLayerName.addCaretListener(new MyInputEventListener());
+		}
+		return jTextFieldLayerName;
+	}
+
+	public String getLayerName() {
+		return getJTextFieldLayerName().getText();
+	}
+
+	public String getSelectedDriver() {
+		return driverName;
+	}
+
+
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseGeometryType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/FileBasedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/FileBasedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/FileBasedPanel.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.panels;
+
+import java.awt.Component;
+import java.awt.event.KeyEvent;
+import java.io.File;
+
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import org.gvsig.app.gui.panels.CRSSelectPanel;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.utils.SimpleFileFilter;
+
+
+public class FileBasedPanel extends JWizardPanel {
+
+	private static final long serialVersionUID = -1431370928697152515L;
+	private JLabel jLabel = null;
+	private JTextField jTextFieldPath = null;
+	private JButton jButtonSelectPath = null;
+	private CRSSelectPanel crsSelectPanel = null;
+	private String fileExt;
+
+//	private class MyInputEventListener implements CaretListener
+//	{
+//		public void caretUpdate(CaretEvent arg0) {
+//			if (jTextFieldPath.getText().length() > 0)
+//				setFinishButtonEnabled(true);
+//			else
+//				setFinishButtonEnabled(false);
+//
+//		}
+//
+//	}
+
+
+	public FileBasedPanel(JWizardComponents wizardComponents) {
+		super(wizardComponents);
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        jLabel = new JLabel();
+        jLabel.setText(PluginServices.getText(this,"enter_path_to_file"));
+        jLabel.setBounds(new java.awt.Rectangle(12,17,319,15));
+        this.setLayout(null);
+        this.setSize(new java.awt.Dimension(380,214));
+        this.add(jLabel, null);
+        this.add(getJTextFieldPath(), null);
+        this.add(getJButtonSelectPath(), null);
+
+        this.add(getChooserPanel(), null);
+        setFinishButtonEnabled(false);
+	}
+
+	/**
+	 * This method initializes jTextFieldPath
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTextFieldPath() {
+		if (jTextFieldPath == null) {
+			jTextFieldPath = new JTextField();
+			jTextFieldPath.setPreferredSize(new java.awt.Dimension(210,20));
+			jTextFieldPath.setBounds(new java.awt.Rectangle(12,38,319,23));
+			jTextFieldPath.addKeyListener(new java.awt.event.KeyAdapter() {
+				public void keyReleased(KeyEvent arg0) {
+					if (!jTextFieldPath.getText().equals(""))
+						setFinishButtonEnabled(true);
+					else
+						setFinishButtonEnabled(false);
+				}
+
+			});
+		}
+		return jTextFieldPath;
+	}
+
+	/**
+	 * This method initializes jButtonSelectPath
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButtonSelectPath() {
+		if (jButtonSelectPath == null) {
+			jButtonSelectPath = new JButton();
+			jButtonSelectPath.setText("...");
+			jButtonSelectPath.setBounds(new java.awt.Rectangle(332,38,32,22));
+			jButtonSelectPath.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+		            JFileChooser jfc = new JFileChooser();
+		            SimpleFileFilter filterShp = new SimpleFileFilter(fileExt, PluginServices.getText(this,"file")+" "+fileExt);
+		            jfc.setFileFilter(filterShp);
+		            if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
+		        		    File newFile = jfc.getSelectedFile();
+		        		    String path = newFile.getAbsolutePath();
+		        		    if (!(path.toLowerCase().endsWith("." + fileExt)))
+		        		    {
+		        		    	path = path + "." + fileExt;
+		        		    }
+		        		    jTextFieldPath.setText(path);
+		        		    setFinishButtonEnabled(true);
+		            }else{
+		            	setFinishButtonEnabled(false);
+		            }
+
+				}
+			});
+		}
+		return jButtonSelectPath;
+	}
+
+	public String getPath() {
+		return jTextFieldPath.getText();
+	}
+
+	/**
+	 * Use it to set the extension of the file you want to receive.
+	 * (Without . : Example: for shps: shp for dxfs: dxf)
+	 * @param extension
+	 */
+	public void setFileExtension(String extension)
+	{
+		this.fileExt = extension;
+	}
+
+	/**
+	 * This method initializes chooserPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private CRSSelectPanel getChooserPanel() {
+		if (crsSelectPanel == null) {
+			crsSelectPanel = CRSSelectPanel.getPanel(AddLayerDialog.getLastProjection());
+			crsSelectPanel.setBounds(new java.awt.Rectangle(16,98,348,44));
+			IWindow view= PluginServices.getMDIManager().getActiveWindow();
+			if (view instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel){
+				if (((DefaultViewPanel)view).getMapControl().getMapContext().getLayers().getLayersCount()!=0){
+					crsSelectPanel.getJBtnChangeProj().setEnabled(false);
+				}
+			}
+			crsSelectPanel.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+			        if (crsSelectPanel.isOkPressed()) {
+			        	AddLayerDialog.setLastProjection(crsSelectPanel.getCurProj());
+			        }
+				}
+			});
+		}
+		return crsSelectPanel;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/FileBasedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixOperations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixOperations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixOperations.java	(revision 42196)
@@ -0,0 +1,241 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.panels.matrix;
+
+/**
+ * Characteristics to create the matrix of geometries.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MatrixOperations {
+    private boolean isRectangular = true;
+    private double distRows = 1000;
+    private double distColumns = 1000;
+    private double rotation = 0;
+    private int numRows = 5;
+    private int numColumns = 5;
+    private double positionX = 0;
+    private double positionY = 0;
+    private int num = 5;
+    private boolean accepted = false;
+    private boolean rotateElements = false;
+
+    /**
+     * Returns the distance among the columns of the matrix in units of the map
+     *
+     * @return Distance X.
+     */
+    public double getDistColumns() {
+        return distColumns;
+    }
+
+    /**
+     * Add the distance among the columns of the matrix in units of the map
+     *
+     * @param distColumns Distance X
+     */
+    public void setDistColumns(double distColumns) {
+        this.distColumns = distColumns;
+    }
+
+    /**
+     * Returns the distance among the rows of the matrix in units of the map
+     *
+     * @return Distance Y.
+     */
+    public double getDistRows() {
+        return distRows;
+    }
+
+    /**
+     * Add the distance among the rows of the matrix in units of the map
+     *
+     * @param distColumns Distance Y
+     */
+    public void setDistRows(double distRows) {
+        this.distRows = distRows;
+    }
+
+    /**
+     * Returns true if the form to calculate the matrix is rectangular and false it if is polar.
+     *
+     * @return True if the form is Rectangular.
+     */
+    public boolean isRectangular() {
+        return isRectangular;
+    }
+
+    /**
+     * Add if the form to calulate the matrix is rectangular or polar.
+     *
+     * @param isRectangular
+     */
+    public void setRectangular(boolean isRectangular) {
+        this.isRectangular = isRectangular;
+    }
+
+    /**
+     * Returns the number of geometries to show in polar form.
+     *
+     * @return Number of geometries.
+     */
+    public int getNum() {
+        return num;
+    }
+
+    /**
+     * Add the number of geometries to show in polar form.
+     *
+     * @param num Number of geometries.
+     */
+    public void setNum(int num) {
+        this.num = num;
+    }
+
+    /**
+     * Returns the number of columns in the matrix.
+     *
+     * @return Number of columns.
+     */
+    public int getNumColumns() {
+        return numColumns;
+    }
+
+    /**
+     * Add the number of columns in the matrix.
+     *
+     * @param numColumns Number of columns.
+     */
+    public void setNumColumns(int numColumns) {
+        this.numColumns = numColumns;
+    }
+
+    /**
+     * Returns the number of rows in the matrix.
+     *
+     * @return Number of rows.
+     */
+    public int getNumRows() {
+        return numRows;
+    }
+
+    /**
+     * Add the number of rows in the matrix.
+     *
+     * @param numRows Number of rows.
+     */
+    public void setNumRows(int numRows) {
+        this.numRows = numRows;
+    }
+
+    /**
+     * Returns the position x of polar form center.
+     *
+     * @return Position x.
+     */
+    public double getPositionX() {
+        return positionX;
+    }
+
+    /**
+     * Add the position x of polar form center.
+     *
+     * @param positionX Position x.
+     */
+    public void setPositionX(double positionX) {
+        this.positionX = positionX;
+    }
+
+    /**
+     * Returns the position y of polar form center.
+     *
+     * @return Position y.
+     */
+    public double getPositionY() {
+        return positionY;
+    }
+
+    /**
+     * Add the position y of polar form center.
+     *
+     * @param positionY Position y.
+     */
+    public void setPositionY(double positionY) {
+        this.positionY = positionY;
+    }
+
+    /**
+     * Returns de rotation of geometries.
+     *
+     * @return Rotation.
+     */
+    public double getRotation() {
+        return rotation;
+    }
+
+    /**
+     * Add the rotation of geometries.
+     *
+     * @param rotation Rotation.
+     */
+    public void setRotation(double rotation) {
+        this.rotation = rotation;
+    }
+
+    /**
+     * Returns true if all of properties are ready to be applied.
+     *
+     * @return True if is ready.
+     */
+    public boolean isAccepted() {
+        return this.accepted;
+    }
+
+    /**
+     * Add true if all of properties are ready to be applied.
+     *
+     * @param accepted True if is ready.
+     */
+    public void setAccepted(boolean accepted) {
+        this.accepted = accepted;
+    }
+
+    /**
+     * Introduces true if the geometries has to rotate also in the polar form.
+     *
+     * @param b True if has to ratate.
+     */
+    public void setRotateElements(boolean b) {
+        this.rotateElements = b;
+    }
+
+    /**
+     * Returns true if the geometries has to rate also in the polar form.
+     *
+     * @return True if has to rotate.
+     */
+    public boolean isRotateElements() {
+        return rotateElements;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixOperations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixProperty.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixProperty.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixProperty.java	(revision 42196)
@@ -0,0 +1,557 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.panels.matrix;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.editing.gui.cad.tools.MatrixCADTool;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.utils.DoubleUtilities;
+
+
+
+public class MatrixProperty extends JPanel implements IWindow{
+
+	private JPanel jPanel = null;
+	private JTabbedPane jTabbedPane = null;  //  @jve:decl-index=0:visual-constraint="10,10"
+	private JPanel pRectangular = null;
+	private JPanel pPolar = null;
+	private JPanel pNorth = null;
+	private JLabel lblRows = null;
+	private JTextField txtRows = null;
+	private JLabel lblColumns = null;
+	private JTextField txtColumns = null;
+	private JPanel pCenter = null;
+	private JLabel lblDistRows = null;
+	private JTextField txtDistRows = null;
+	private JLabel lblDistColumns = null;
+	private JTextField txtDistColumns = null;
+	private JLabel lblRotation = null;
+	private JTextField txtRotation = null;
+	private AcceptCancelPanel jPanel1;
+	private MatrixOperations operations;
+	private JPanel pNorthPolar = null;
+	private JPanel pCenterPolar = null;
+	private JLabel lblCenter = null;
+	private JLabel lblx = null;
+	private JTextField txtX = null;
+	private JLabel lblY = null;
+	private JTextField txtY = null;
+	private JLabel lblNum = null;
+	private JTextField txtNum = null;
+	private JCheckBox chbRotateElements = null;
+	private JButton bLagXY = null;
+	private JButton bLagY = null;
+	private JButton bLagX = null;
+	private JButton bRotation = null;
+	private MatrixCADTool matrixCADTool;
+	private static ImageIcon ilagXY = null;
+	private static ImageIcon iaddpoint = null;
+
+	/**
+	 * This is the default constructor
+	 */
+	public MatrixProperty() {
+		super();
+		initialize();
+
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+	    
+	    iaddpoint = IconThemeHelper.getImageIcon("layer-modify-matrix-addpoint");
+        ilagXY = IconThemeHelper.getImageIcon("layer-modify-matrix-lagxy");
+
+		this.setLayout(new BorderLayout());
+		this.setSize(369, 275);
+		this.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);
+		this.add(getJPanel(), java.awt.BorderLayout.EAST);
+		this.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
+
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jTabbedPane
+	 *
+	 * @return javax.swing.JTabbedPane
+	 */
+	private JTabbedPane getJTabbedPane() {
+		if (jTabbedPane == null) {
+			jTabbedPane = new JTabbedPane();
+			jTabbedPane.setSize(new java.awt.Dimension(323,235));
+			jTabbedPane.addTab(PluginServices.getText(this,"matriz_rectangular"), null, getPRectangular(), null);
+			jTabbedPane.addTab(PluginServices.getText(this,"matriz_polar"), null, getPPolar(), null);
+		}
+		return jTabbedPane;
+	}
+
+	/**
+	 * This method initializes pRectangular
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPRectangular() {
+		if (pRectangular == null) {
+			pRectangular = new JPanel();
+			pRectangular.setLayout(new BorderLayout());
+			pRectangular.setPreferredSize(new Dimension(300,200));
+			pRectangular.add(getPNorth(), java.awt.BorderLayout.NORTH);
+			pRectangular.add(getPCenter(), java.awt.BorderLayout.CENTER);
+		}
+		return pRectangular;
+	}
+
+	/**
+	 * This method initializes pPolar
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPPolar() {
+		if (pPolar == null) {
+			pPolar = new JPanel();
+			pPolar.setLayout(new BorderLayout());
+			pPolar.add(getPNorthPolar(), java.awt.BorderLayout.NORTH);
+			pPolar.add(getPCenterPolar(), java.awt.BorderLayout.CENTER);
+		}
+		return pPolar;
+	}
+
+	/**
+	 * This method initializes pNorth
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPNorth() {
+		if (pNorth == null) {
+			lblColumns = new JLabel();
+			lblColumns.setText(PluginServices.getText(this,"columns"));
+			lblRows = new JLabel();
+			lblRows.setText(PluginServices.getText(this,"rows"));
+			pNorth = new JPanel();
+			pNorth.add(lblRows, null);
+			pNorth.add(getTxtRows(), null);
+			pNorth.add(lblColumns, null);
+			pNorth.add(getTxtColumns(), null);
+		}
+		return pNorth;
+	}
+
+	/**
+	 * This method initializes txtRows
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtRows() {
+		if (txtRows == null) {
+			txtRows = new JTextField();
+			txtRows.setPreferredSize(new Dimension(40,20));
+		}
+		return txtRows;
+	}
+
+	/**
+	 * This method initializes txtColumns
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtColumns() {
+		if (txtColumns == null) {
+			txtColumns = new JTextField();
+			txtColumns.setPreferredSize(new Dimension(40,20));
+		}
+		return txtColumns;
+	}
+
+	/**
+	 * This method initializes pCenter
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPCenter() {
+		if (pCenter == null) {
+			lblRotation = new JLabel();
+			lblRotation.setBounds(new java.awt.Rectangle(6,73,141,22));
+			lblRotation.setText(PluginServices.getText(this,"rotation"));
+			lblDistColumns = new JLabel();
+			lblDistColumns.setBounds(new java.awt.Rectangle(6,42,141,22));
+			lblDistColumns.setText(PluginServices.getText(this,"disp_columns"));
+			lblDistRows = new JLabel();
+			lblDistRows.setBounds(new java.awt.Rectangle(6,10,141,22));
+			lblDistRows.setText(PluginServices.getText(this,"disp_rows"));
+			pCenter = new JPanel();
+			pCenter.setPreferredSize(new Dimension(200,150));
+			pCenter.setLayout(null);
+			pCenter.add(lblDistRows, null);
+			pCenter.add(getTxtDistRows(), null);
+			pCenter.add(lblDistColumns, null);
+			pCenter.add(getTxtDistColumns(), null);
+			pCenter.add(lblRotation, null);
+			pCenter.add(getTxtRotation(), null);
+			pCenter.add(getBLagXY(), null);
+			pCenter.add(getBLagY(), null);
+			pCenter.add(getBLagX(), null);
+			pCenter.add(getBRotation(), null);
+		}
+		return pCenter;
+	}
+
+	/**
+	 * This method initializes txtDistRows
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtDistRows() {
+		if (txtDistRows == null) {
+			txtDistRows = new JTextField();
+			txtDistRows.setBounds(new java.awt.Rectangle(153,11,75,22));
+		}
+		return txtDistRows;
+	}
+
+	/**
+	 * This method initializes txtDistColumns
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtDistColumns() {
+		if (txtDistColumns == null) {
+			txtDistColumns = new JTextField();
+			txtDistColumns.setBounds(new java.awt.Rectangle(153,43,75,22));
+		}
+		return txtDistColumns;
+	}
+
+	/**
+	 * This method initializes txtRotation
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtRotation() {
+		if (txtRotation == null) {
+			txtRotation = new JTextField();
+			txtRotation.setBounds(new java.awt.Rectangle(153,72,75,22));
+		}
+		return txtRotation;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private AcceptCancelPanel getJPanel1() {
+		if (jPanel1 == null) {
+			ActionListener okAction = new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					if (getJTabbedPane().getSelectedIndex()==0) {
+						operations.setRectangular(true);
+						operations.setNumRows(Integer.parseInt(getTxtRows().getText()));
+						operations.setNumColumns(Integer.parseInt(getTxtColumns().getText()));
+						operations.setDistRows(Double.parseDouble(getTxtDistRows().getText()));
+						operations.setDistColumns(Double.parseDouble(getTxtDistColumns().getText()));
+						operations.setRotation(Double.parseDouble(getTxtRotation().getText()));
+					}else {
+						operations.setRectangular(false);
+						operations.setPositionX(Double.parseDouble(getTxtX().getText()));
+						operations.setPositionY(Double.parseDouble(getTxtY().getText()));
+						operations.setNum(Integer.parseInt(getTxtNum().getText()));
+						operations.setRotateElements(getChbRotateElements().isSelected());
+					}
+					operations.setAccepted(true);
+
+					if (PluginServices.getMainFrame() == null) {
+                        ((JDialog) (getParent().getParent().getParent()
+                                .getParent())).dispose();
+                    } else {
+                        PluginServices.getMDIManager().closeWindow(MatrixProperty.this);
+                    }
+				}
+			};
+			ActionListener cancelAction = new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+                    operations.setAccepted(false);
+					if (PluginServices.getMainFrame() != null) {
+                        PluginServices.getMDIManager().closeWindow(MatrixProperty.this);
+                    } else {
+                        ((JDialog) (getParent().getParent().getParent()
+                                        .getParent())).dispose();
+                    }
+				}
+			};
+			jPanel1 = new AcceptCancelPanel(okAction, cancelAction);
+		}
+		return jPanel1;
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
+   		m_viewinfo.setTitle(PluginServices.getText(this,"matrix"));
+   		 m_viewinfo.setHeight(this.getHeight());
+   		 m_viewinfo.setWidth(this.getWidth());
+        return m_viewinfo;
+	}
+
+	public void setMatrixCADTool(MatrixCADTool tool) {
+		operations=tool.getOperations();
+		matrixCADTool=tool;
+		refresh();
+	}
+
+	/**
+	 * This method initializes pNorthPolar
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPNorthPolar() {
+		if (pNorthPolar == null) {
+			lblY = new JLabel();
+			lblY.setText("Y: ");
+			lblx = new JLabel();
+			lblx.setText("X: ");
+			lblCenter = new JLabel();
+			lblCenter.setText(Messages.getText("centro"));
+			pNorthPolar = new JPanel();
+			pNorthPolar.add(lblCenter, null);
+			pNorthPolar.add(lblx, null);
+			pNorthPolar.add(getTxtX(), null);
+			pNorthPolar.add(lblY, null);
+			pNorthPolar.add(getTxtY(), null);
+		}
+		return pNorthPolar;
+	}
+
+	/**
+	 * This method initializes pCenterPolar
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPCenterPolar() {
+		if (pCenterPolar == null) {
+			lblNum = new JLabel();
+			lblNum.setText(Messages.getText("num_elementos"));
+			pCenterPolar = new JPanel();
+			pCenterPolar.add(lblNum, null);
+			pCenterPolar.add(getTxtNum(), null);
+			pCenterPolar.add(getChbRotateElements(), null);
+		}
+		return pCenterPolar;
+	}
+
+	/**
+	 * This method initializes txtX
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtX() {
+		if (txtX == null) {
+			txtX = new JTextField();
+			txtX.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return txtX;
+	}
+
+	/**
+	 * This method initializes txtY
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtY() {
+		if (txtY == null) {
+			txtY = new JTextField();
+			txtY.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return txtY;
+	}
+
+	/**
+	 * This method initializes txtNum
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtNum() {
+		if (txtNum == null) {
+			txtNum = new JTextField();
+			txtNum.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return txtNum;
+	}
+
+	/**
+	 * This method initializes chbRotateElements
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getChbRotateElements() {
+		if (chbRotateElements == null) {
+			chbRotateElements = new JCheckBox();
+			chbRotateElements.setText(Messages.getText(
+			    "girar_elementos_a_medida_que_se_copian"));
+		}
+		return chbRotateElements;
+	}
+
+	/**
+	 * This method initializes bLagXY
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBLagXY() {
+		if (bLagXY == null) {
+			bLagXY = new JButton();
+			bLagXY.setBounds(new java.awt.Rectangle(232,8,30,56));
+			bLagXY.setIcon(ilagXY);
+			bLagXY.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					operations.setAccepted(false);
+					matrixCADTool.addOption("lagXY");
+				}
+			});
+		}
+		return bLagXY;
+	}
+
+	/**
+	 * This method initializes bLagY
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBLagY() {
+		if (bLagY == null) {
+			bLagY = new JButton();
+			bLagY.setBounds(new java.awt.Rectangle(270,7,28,26));
+			bLagY.setIcon(iaddpoint);
+			bLagY.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					operations.setAccepted(false);
+					matrixCADTool.addOption("lagY");
+				}
+			});
+		}
+		return bLagY;
+	}
+
+	/**
+	 * This method initializes bLagX
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBLagX() {
+		if (bLagX == null) {
+			bLagX = new JButton();
+			bLagX.setBounds(new java.awt.Rectangle(270,38,28,26));
+			bLagX.setIcon(iaddpoint);
+			bLagX.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					operations.setAccepted(false);
+					matrixCADTool.addOption("lagX");
+				}
+			});
+		}
+		return bLagX;
+	}
+
+	/**
+	 * This method initializes bRotation
+	 *
+	 * @return javax.swing.JButton
+	 */
+	public JButton getBRotation() {
+		if (bRotation == null) {
+			bRotation = new JButton();
+			bRotation.setBounds(new java.awt.Rectangle(232,70,28,26));
+			bRotation.setIcon(iaddpoint);
+			bRotation.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					operations.setAccepted(false);
+					matrixCADTool.addOption("rotation");
+				}
+			});
+		}
+		return bRotation;
+	}
+
+	public void refresh() {
+		refreshLagX();
+		refreshLagY();
+		refreshRotation();
+		getTxtColumns().setText(String.valueOf(operations.getNumColumns()));
+		getTxtRows().setText(String.valueOf(operations.getNumRows()));
+		getTxtNum().setText(String.valueOf(operations.getNum()));
+		getTxtX().setText(String.valueOf(operations.getPositionX()));
+		getTxtY().setText(String.valueOf(operations.getPositionY()));
+	}
+
+	public void refreshLagX() {
+		getTxtDistColumns().setText(String.valueOf(DoubleUtilities.format(operations.getDistColumns(),'.',2)));
+
+	}
+
+	public void refreshLagY() {
+		getTxtDistRows().setText(String.valueOf(DoubleUtilities.format(operations.getDistRows(),'.',2)));
+
+	}
+	public void refreshRotation() {
+		getTxtRotation().setText(String.valueOf(DoubleUtilities.format(operations.getRotation(),'.',2)));
+
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/matrix/MatrixProperty.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/JPanelFieldDefinition.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/JPanelFieldDefinition.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/JPanelFieldDefinition.java	(revision 42196)
@@ -0,0 +1,413 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.panels;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.util.ArrayList;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ * @author fjp
+ *
+ * Panel para que el usuario seleccione el driver que va a utilizar para
+ * crear un tema desde cero.
+ *
+ */
+public class JPanelFieldDefinition extends JWizardPanel {
+
+
+	private JLabel jLabel = null;
+	private JScrollPane jScrollPane = null;
+	private JTable jTable = null;
+	private JPanel jPanelEast = null;
+	private JButton jButtonAddField = null;
+	private JButton jButtonDeleteField = null;
+	private int MAX_FIELD_LENGTH = 254;
+
+	private FeatureStore store = null;
+
+
+	public JPanelFieldDefinition(JWizardComponents wizardComponents) {
+		super(wizardComponents, null);
+		initialize();
+		// TODO Auto-generated constructor stub
+	}
+
+
+	/* (non-Javadoc)
+	 * @see jwizardcomponent.JWizardPanel#next()
+	 */
+	public void next() {
+		DefaultTableModel tm=(DefaultTableModel) jTable.getModel();
+		boolean valid=true;
+		for (int i = 0;i<tm.getRowCount();i++) {
+				String s=(String)tm.getValueAt(i,0);
+				valid=validate(s);
+				String size=(String) tm.getValueAt(i,2);
+				valid=valid && validateInteger(size);
+				if (!valid){
+					return;
+				}
+				String type = (String) tm.getValueAt(i,1);
+				int length = Integer.parseInt((String) tm.getValueAt(i,2));
+				if (type.equals("String") && length > MAX_FIELD_LENGTH) {
+					JOptionPane.showMessageDialog(this, PluginServices.getText(this, "max_length_is") + ": " + MAX_FIELD_LENGTH+
+							"\n"+PluginServices.getText(this, "length_of_field")+ " '"+ s + "' " + PluginServices.getText(this, "will_be_truncated"));
+					tm.setValueAt(String.valueOf(MAX_FIELD_LENGTH),i,2);
+				}
+
+		}
+
+		// ensure no field name is used more than once
+		ArrayList fieldNames = new ArrayList();
+		for (int i = 0; i < jTable.getRowCount(); i++) {
+			if (fieldNames.contains(tm.getValueAt(i,0))) {
+				valid = false;
+				JOptionPane.showMessageDialog(this, PluginServices.getText(this, "two_or_more_fields_with_the_same_name"));
+				break;
+			}
+			fieldNames.add(tm.getValueAt(i, 0));
+		}
+
+		if (valid)
+			super.next();
+		if (getWizardComponents().getWizardPanel(2) instanceof  FileBasedPanel) {
+			if (!((FileBasedPanel)getWizardComponents().getWizardPanel(2)).getPath().equals(""))
+				setFinishButtonEnabled(true);
+			else
+				setFinishButtonEnabled(false);
+		}
+	}
+
+	public void setFeatureStore(FeatureStore store) {
+		this.store = store;
+	}
+
+	public FeatureStore getFeatureStore() {
+		return this.store;
+	}
+
+	private boolean validateInteger(String size) {
+		boolean valid=true;
+		try{
+		Integer.parseInt(size);
+		}catch (NumberFormatException e) {
+			valid=false;
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this,"no_puede_continuar")+"\n"+
+					PluginServices.getText(this,"size")+" : "+size+"\n"+
+					PluginServices.getText(this,"incorrect_value"));
+		}
+		return valid;
+	}
+
+
+	private boolean validate(String s) {
+		boolean valid=true;
+		if (s.equals("")) {
+			valid=false;
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this,"no_puede_continuar")+"\n"+
+					PluginServices.getText(this,"the_field_name_is_required"));
+		}
+		if (s.indexOf(" ")!=-1) {
+			valid=false;
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this,"no_puede_continuar")+"\n"+
+					PluginServices.getText(this,"field")+" : "+s+"\n"+
+					PluginServices.getText(this,"contiene_espacios_en_blanco"));
+		}
+//		if (this.store != null && this.store.getCapability("FieldNameMaxLength") != null) {
+//			String value = store.getCapability("FieldNameMaxLength");
+//			int intValue;
+//			try {
+//				intValue = Integer.parseInt(value);
+//			} catch (NumberFormatException e) {
+//				intValue = 0;
+//			}
+//			if (intValue > 0 && s.length() > intValue) {
+//				valid=false;
+//				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+//						PluginServices.getText(this,"no_puede_continuar")+"\n"+
+//						PluginServices.getText(this,"field")+" : "+s+"\n"+
+//						PluginServices.getText(this,"too_long_name")+"\n"+
+//						PluginServices.getText(this,"maximun_name_size")+" : "+intValue+"\n"
+//						);
+//			}
+//		}
+		return valid;
+	}
+
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        jLabel = new JLabel();
+        jLabel.setText(PluginServices.getText(this,"define_fields"));
+        this.setLayout(new BorderLayout(5,5));
+        this.setSize(new java.awt.Dimension(499,232));
+        this.add(jLabel, java.awt.BorderLayout.NORTH);
+        this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+        this.add(getJPanelEast(), java.awt.BorderLayout.EAST);
+	}
+
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getJTable());
+		}
+		return jScrollPane;
+	}
+
+
+	/**
+	 * This method initializes jTable
+	 *
+	 * @return javax.swing.JTable
+	 */
+	private JTable getJTable() {
+		if (jTable == null) {
+			jTable = new JTable();
+
+			DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
+			tm.addColumn(PluginServices.getText(this,"field"));
+
+
+			// TableColumn fieldTypeColumn = new TableColumn(1);
+			// fieldTypeColumn.setHeaderValue("Type");
+			// jTable.addColumn(fieldTypeColumn);
+			tm.addColumn(PluginServices.getText(this,"type"));
+			// MIRAR EL C�DIGO DEL BOT�N DE A�ADIR CAMPO PARA VER EL CellEditor con comboBox
+
+
+
+			/* TableColumn fieldLengthColumn = new TableColumn(2);
+			fieldLengthColumn.setHeaderValue("Length");
+			// fieldLengthColumn.setCellRenderer(new DefaultTableCellRenderer());
+			jTable.addColumn(fieldLengthColumn); */
+			tm.addColumn(PluginServices.getText(this,"length"));
+
+//			Ask to be notified of selection changes.
+			ListSelectionModel rowSM = jTable.getSelectionModel();
+			rowSM.addListSelectionListener(new ListSelectionListener() {
+			    public void valueChanged(ListSelectionEvent e) {
+			        //Ignore extra messages.
+			        if (e.getValueIsAdjusting()) return;
+
+			        ListSelectionModel lsm =
+			            (ListSelectionModel)e.getSource();
+			        if (lsm.isSelectionEmpty()) {
+			            //no rows are selected
+			        	jButtonDeleteField.setEnabled(false);
+			        } else {
+			            // int selectedRow = lsm.getMinSelectionIndex();
+			            //selectedRow is selected
+			        	jButtonDeleteField.setEnabled(true);
+			        }
+			    }
+			});
+			jTable.getColumn(PluginServices.getText(this,"field")).setWidth(180);
+
+
+		}
+		return jTable;
+	}
+
+
+	/**
+	 * This method initializes jPanelWest
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelEast() {
+		if (jPanelEast == null) {
+			jPanelEast = new JPanel();
+			jPanelEast.setLayout(null);
+			jPanelEast.setPreferredSize(new java.awt.Dimension(170,100));
+			jPanelEast.add(getJButtonAddField(), null);
+			jPanelEast.add(getJButtonDeleteField(), null);
+		}
+		return jPanelEast;
+	}
+
+
+	/**
+	 * This method initializes jButtonAddField
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButtonAddField() {
+		if (jButtonAddField == null) {
+			jButtonAddField = new JButton();
+			jButtonAddField.setText(PluginServices.getText(this,"add_field"));
+			jButtonAddField.setLocation(new java.awt.Point(7,5));
+			jButtonAddField.setSize(new java.awt.Dimension(145,23));
+			jButtonAddField.setPreferredSize(new java.awt.Dimension(100,26));
+			jButtonAddField.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
+
+					// Figure out a suitable field name
+					ArrayList fieldNames = new ArrayList();
+					for (int i = 0; i < jTable.getRowCount(); i++) {
+						fieldNames.add(tm.getValueAt(i, 0));
+					}
+					String[] currentFieldNames = (String[]) fieldNames.toArray(new String[0]);
+					String newField = PluginServices.getText(this, "field").replaceAll(" +", "_");
+					int index=0;
+					for (int i = 0; i < currentFieldNames.length; i++) {
+						if (currentFieldNames[i].startsWith(newField)) {
+							try {
+								index = Integer.parseInt(currentFieldNames[i].replaceAll(newField,""));
+							} catch (Exception ex) { /* we don't care */}
+						}
+					}
+					String newFieldName = newField+(++index);
+
+
+					// Add a new row
+					Object[] newRow = new Object[tm.getColumnCount()];
+					newRow[0] = newFieldName;
+					newRow[1] = "String";
+					newRow[2] = "20";
+					tm.addRow(newRow);
+
+					// Esto lo a�ado aqu� porque si no tiene registros, no hace caso. (Por eso no
+					// lo pongo en getJTable()
+					TableColumn typeColumn = jTable.getColumnModel().getColumn(1);
+					JComboBox comboBox = new JComboBox();
+					comboBox.addItem("Boolean");
+					comboBox.addItem("Date");
+					comboBox.addItem("Integer");
+					comboBox.addItem("Double");
+					comboBox.addItem("String");
+					typeColumn.setCellEditor(new DefaultCellEditor(comboBox));
+
+					TableColumn widthColumn = jTable.getColumnModel().getColumn(2);
+
+					// tm.setValueAt("NewField", tm.getRowCount()-1, 0);
+				}
+			});
+
+		}
+		return jButtonAddField;
+	}
+
+
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButtonDeleteField() {
+		if (jButtonDeleteField == null) {
+			jButtonDeleteField = new JButton();
+			jButtonDeleteField.setText(PluginServices.getText(this,"delete_field"));
+			jButtonDeleteField.setLocation(new java.awt.Point(7,33));
+			jButtonDeleteField.setSize(new java.awt.Dimension(145,23));
+			jButtonDeleteField.setEnabled(false);
+			jButtonDeleteField.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					int[] selecteds = jTable.getSelectedRows();
+					DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
+
+					for (int i=selecteds.length-1; i >=0; i--)
+						tm.removeRow(selecteds[i]);
+				}
+			});
+		}
+		return jButtonDeleteField;
+	}
+
+
+//	/**
+//	 * Convierte lo que hay en la tabla en una definici�n de campos
+//	 * adecuada para crear un LayerDefinition
+//	 * @return
+//	 */
+//	public EditableFeatureType getFeatureType() {
+//		DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
+//                
+//		EditableFeatureType type = new DefaultEditableFeatureType();
+//
+//		for (int i=0; i < tm.getRowCount(); i++)
+//		{
+//			int dataType=0;
+//			String strType = (String) tm.getValueAt(i,1);
+//
+//			if (strType.equals("String"))
+//				dataType=DataTypes.STRING;
+//			else if (strType.equals("Double"))
+//				dataType=DataTypes.DOUBLE;
+//			else if (strType.equals("Integer"))
+//				dataType=DataTypes.INT;
+//			else if (strType.equals("Boolean"))
+//				dataType=DataTypes.BOOLEAN;
+//			else if (strType.equals("Date"))
+//				dataType=DataTypes.DATE;
+//
+//			int fieldLength = Integer.parseInt((String) tm.getValueAt(i,2));
+//			// TODO: HACERLO BIEN
+//			if (strType.equals("Double"))
+//				fieldLength=5;
+//			EditableFeatureAttributeDescriptor efad1 = type.add((String) tm.getValueAt(i,0), dataType, fieldLength);
+//		}
+//
+//		return type;
+//	}
+
+
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/JPanelFieldDefinition.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseWriteDriver.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseWriteDriver.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseWriteDriver.java	(revision 42196)
@@ -0,0 +1,161 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.panels;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+
+/**
+ * @author fjp
+ *
+ * Panel para que el usuario seleccione el driver que va a utilizar para
+ * crear un tema desde cero.
+ *
+ */
+public class ChooseWriteDriver extends JWizardPanel {
+
+	private JLabel lblSelecDriver = null;
+	private JComboBox jCmbBoxDrivers = null;
+	private String[] driverNames;
+	private JLabel jLabel = null;
+	private JTextField jTextLayerName = null;
+
+	private class MyInputEventListener implements CaretListener
+	{
+		public void caretUpdate(CaretEvent arg0) {
+			if (jTextLayerName.getText().length() > 0)
+				setNextButtonEnabled(true);
+			else
+				setNextButtonEnabled(false);
+
+		}
+
+	}
+
+	public ChooseWriteDriver(JWizardComponents wizardComponents, String title, String[] driverNames) {
+		super(wizardComponents, title);
+		this.driverNames = driverNames;
+		initialize();
+		// TODO Auto-generated constructor stub
+
+	}
+
+	public String getSelectedDriver()
+	{
+		return (String) jCmbBoxDrivers.getSelectedItem();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        jLabel = new JLabel();
+        jLabel.setText(PluginServices.getText(this,"enter_layer_name"));
+        jLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+        jLabel.setBounds(new java.awt.Rectangle(15,7,241,15));
+        lblSelecDriver = new JLabel();
+        lblSelecDriver.setText(PluginServices.getText(this,"select_driver"));
+        lblSelecDriver.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+        lblSelecDriver.setBounds(new java.awt.Rectangle(15,68,245,15));
+        this.setLayout(null);
+        this.setSize(new java.awt.Dimension(274,167));
+        this.add(jLabel, null);
+        this.add(lblSelecDriver, null);
+        this.add(getJCmbBoxDrivers(), null);
+        this.add(getJTextLayerName(), null);
+
+
+	}
+
+	/**
+	 * This method initializes jCmbBoxDrivers
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getJCmbBoxDrivers() {
+		if (jCmbBoxDrivers == null) {
+			jCmbBoxDrivers = new JComboBox(driverNames);
+			jCmbBoxDrivers.setBounds(new java.awt.Rectangle(15,93,240,19));
+		}
+		return jCmbBoxDrivers;
+	}
+
+	/* (non-Javadoc)
+	 * @see jwizardcomponent.JWizardPanel#next()
+	 */
+	public void next() {
+		super.next();
+		try {
+			JWizardPanel nextPanel =  getWizardComponents().getCurrentPanel();
+			if (nextPanel instanceof ChooseGeometryType)
+			{
+				ChooseGeometryType panel = (ChooseGeometryType) nextPanel;
+				DataManager DM=DALLocator.getDataManager();
+				DataStoreParameters dsp=DM.createStoreParameters(getSelectedDriver());
+
+				FeatureStore store =(FeatureStore) DM.createStore(dsp);
+				panel.setFeatureStore(store);
+			}
+		} catch (Exception e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+	}
+
+	public String getLayerName() {
+		return jTextLayerName.getText();
+	}
+
+	/**
+	 * This method initializes jTextLayerName
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTextLayerName() {
+		if (jTextLayerName == null) {
+			jTextLayerName = new JTextField();
+			jTextLayerName.setBounds(new java.awt.Rectangle(15,30,244,20));
+			jTextLayerName.setText(PluginServices.getText(this,"new_layer"));
+			jTextLayerName.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+			jTextLayerName.addCaretListener(new MyInputEventListener());
+		}
+		return jTextLayerName;
+	}
+
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/ChooseWriteDriver.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/PostGISpanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/PostGISpanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/PostGISpanel.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad.panels;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+public class PostGISpanel extends JWizardPanel {
+
+	public PostGISpanel(JWizardComponents wizardComponents) {
+		super(wizardComponents);
+        // initialize();
+
+	}
+
+    // /**
+    // *
+    // */
+    // private static final long serialVersionUID = 1L;
+    // private ConnectionPanel jPanelConex = null;
+    //
+    // /**
+    // * This method initializes this
+    // *
+    // */
+    // private void initialize() {
+    // this.setSize(new java.awt.Dimension(408,284));
+    // this.add(getJPanelConex(), null);
+    //
+    // }
+    //
+    // /**
+    // * This method initializes jPanelConex
+    // *
+    // * @return javax.swing.JPanel
+    // */
+    // private ConnectionPanel getJPanelConex() {
+    // if (jPanelConex == null) {
+    // jPanelConex = new ConnectionPanel();
+    // String[] drvAux = new String[1];
+    // drvAux[0] = "PostGIS JDBC Driver";
+    // jPanelConex.setDrivers(drvAux);
+    // jPanelConex.setPreferredSize(new java.awt.Dimension(400,300));
+    // }
+    // return jPanelConex;
+    // }
+    //
+    // public ConnectionSettings getConnSettings() {
+    // return getJPanelConex().getConnectionSettings();
+    // }
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/panels/PostGISpanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADTool.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad;
+
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+
+import org.gvsig.editing.gui.cad.exception.CommandException;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author $author$
+ */
+public interface CADTool {
+
+    public static int TOPGEOMETRY = 2000;
+
+    public void init();
+
+    public void end();
+
+    public void transition(double x, double y, InputEvent event);
+
+    public void transition(double d);
+
+    public void transition(String s) throws CommandException;
+
+    public void addPoint(double x, double y, InputEvent event);
+
+    public void addValue(double d);
+
+    public void addOption(String s);
+
+    public void setQuestion(String s);
+
+    /**
+     * Recibe un graphics en el que se encuentra dibujada la
+     * EditableFeatureSource que se pasa como par�metro. En este m�todo, la
+     * herramienta ha de implementar el dibujado de la operaci�n que se est�
+     * realizando dependiendo del estado. Por ejemplo al dibujar un c�rculo
+     * mediante 3 puntos, cuando la herramienta se encuentre en el estado en
+     * el que s�lo falta un punto, se dibujar� el c�rculo teniendo en
+     * cuenta
+     * como tercer punto el puntero del rat�n (pasado en los par�metros x e
+     * y). Este m�todo es invocado tras cada transici�n y cada vez que se
+     * mueve el rat�n.
+     * 
+     * @param g
+     *            DOCUMENT ME!
+     * @param efs
+     *            DOCUMENT ME!
+     * @param selectedGeometries
+     *            DOCUMENT ME!
+     * @param x
+     *            DOCUMENT ME!
+     * @param y
+     *            DOCUMENT ME!
+     */
+    void drawOperation(MapControlDrawer renderer, double x, double y);
+
+    /**
+     * Obtiene la pregunta que saldr� en la consola relativa al estado en el
+     * que se encuentra la herramienta
+     * 
+     * @return DOCUMENT ME!
+     */
+    String getQuestion();
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param cta
+     *            DOCUMENT ME!
+     */
+    public void setCadToolAdapter(CADToolAdapter cta);
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public CADToolAdapter getCadToolAdapter();
+
+    public String[] getDescriptions();
+
+    public void setDescription(String[] descriptions);
+
+    public String getName();
+
+    public VectorialLayerEdited getVLE();
+
+    void clearSelection() throws DataException;
+
+    /**
+     * @deprecated Use {@link #isApplicable(GeometryType)} instead. To be
+     *             removed in gvSIG 2.1 .
+     */
+    public boolean isApplicable(int shapeType);
+
+    public boolean isApplicable(GeometryType geometryType);
+
+    public void setPreviosTool(DefaultCADTool tool);
+
+    public void restorePreviousTool();
+
+    public void endTransition(double x, double y, MouseEvent e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADToolAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADToolAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADToolAdapter.java	(revision 42196)
@@ -0,0 +1,1699 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.gui.cad;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.MemoryImageSource;
+import java.util.HashMap;
+import java.util.Stack;
+import java.util.prefs.Preferences;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.EditionLocator;
+import org.gvsig.editing.EditionManager;
+import org.gvsig.editing.IEditionManager;
+import org.gvsig.editing.gui.cad.tools.SelectionCADTool;
+import org.gvsig.editing.layers.ILayerEdited;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.util.UtilFunctions;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.utils.console.JConsole;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * Allows user interact with different CAD tools, on a layer being edited.
+ * </p>
+ * 
+ * <p>
+ * There are two ways of interacting:
+ * <ul>
+ * <li><b>With the mouse</b> : user selects any {@link CADTool CADTool} that
+ * produces mouse events as consequence of the actions working with the layer
+ * being edited.</li>
+ * <li><b>Writing commands in the edition console</b> : most of the
+ * {@link CADTool CADTool} mouse actions can also be called writing a command or
+ * a command's parameter in the associated edition console, and pressing the key
+ * <code>Enter</code>. If the command isn't valid, will notify it.</li>
+ * </ul>
+ * </p>
+ * 
+ * <p>
+ * The edition has been implemented as a <i>finite machine</i>, with three kind
+ * of transitions between states according the parameters introduced:
+ * <ul>
+ * <li><i>First transition type: <b>Point</i></b>: if <code>text</code> matches
+ * with any pattern of parameters needed for any kind of point coordinates.<br>
+ * There are eight ways of introducing point 2D coordinates:
+ * <ul>
+ * <li><i>X,Y</i> : absolute cardinal 2D coordinate from the center <i>(0,0)</i>
+ * of the CCS <i>Current Coordinate System</i>.</li>
+ * <li><i>@X,Y</i> : relative cardinal 2D distances from the last point added of
+ * the CCS. If it's the first point of the geometry, works like <i>X,Y</i>.</li>
+ * <li><i>length< angle</i> : absolute polar 2D coordinate from the center
+ * <i>(0,0)</i> of the CCS <i>Current Coordinate System</i>, using <i>angle</i>
+ * from the <i>X</i> axis of CCS, and <i>length</i> far away.</li>
+ * <li><i>@length< angle</i> : relative polar 2D coordinate from the last point
+ * added of the CCS <i>Current Coordinate System</i>, using <i>angle</i> from
+ * the <i>X</i> axis of CCS, and <i>length</i> far away. If it's the first point
+ * of the geometry, works like <i>length< angle</i>.</li>
+ * <li><i>*X,Y</i> : like <i>X,Y</i> but using UCS <i>Universal Coordinate
+ * System</i> as reference.</li>
+ * <li><i>@*X,Y</i> : like <i>@X,Y</i> but using UCS <i>Universal Coordinate
+ * System</i> as reference. If it's the first point of the geometry, works like
+ * <i>*X,Y</i>.</li>
+ * <li><i>*length< angle</i> : like <i>length< angle</i> but using UCS
+ * <i>Universal Coordinate System</i> as reference.</li>
+ * <li><i>@*length< angle</i> : like <i>@length< angle</i> but using UCS
+ * <i>Universal Coordinate System</i> as reference. If it's the first point of
+ * the geometry, works like <i>*length< angle</i>.</li>
+ * </ul>
+ * </li>
+ * <li><i>Second transition type: <b>Value</i></b>: if recognizes it as a single
+ * number.</li>
+ * <li><i>Third transition type: <b>Option</i></b>: by default, if can't
+ * classify the information as a single number neither as a point. This
+ * information will be an <code>String</code> and dealt as an option of the
+ * current tool state. Ultimately, if isn't valid, <code>text</code> will be
+ * rewritten in the console notifying the user that isn't correct.</li>
+ * </ul>
+ * </p>
+ * 
+ * @see Behavior
+ * @see MapControl
+ */
+public class CADToolAdapter extends Behavior {
+
+    private static Logger logger = LoggerFactory
+        .getLogger(CADToolAdapter.class);
+
+    /**
+     * Stores the CAD tools to edit the layers of the associated
+     * <code>MapControl</code>.
+     * 
+     * @see #addCADTool(String, CADTool)
+     * @see #getCadTool()
+     * @see #getCADTool(String)
+     */
+    private static HashMap namesCadTools = new HashMap();
+
+    /**
+     * Reference to the object used to manage the edition of the layers of the
+     * associated <code>MapControl</code>.
+     * 
+     * @see IEditionManager
+     * @see #getEditionManager()
+     */
+    private IEditionManager editionManager = new EditionManager();
+
+    /**
+     * Reference to the MapContext library manager, used to create symbols
+     * and legends.
+     */
+    private MapContextManager mapContextManager = MapContextLocator
+        .getMapContextManager();
+
+    /**
+     * Identifies that the data are absolute coordinates of the new point from
+     * the (0, 0) position.
+     */
+    public static final int ABSOLUTE = 0;
+
+    /**
+     * Equivalent to {@link CADToolAdapter#ABSOLUTE CADToolAdapter#ABSOLUTE}.
+     */
+    public static final int RELATIVE_SCP = 1;
+
+    /**
+     * Identifies that the data are relative distances of the new point from the
+     * previous introduced.
+     */
+    public static final int RELATIVE_SCU = 2;
+
+    /**
+     * Identifies that the data are relative polar distances (longitude of the
+     * line and angle given in degrees) of the new point from the previous
+     * introduced.
+     */
+    public static final int POLAR_SCP = 3;
+
+    /**
+     * Identifies that the data are relative polar distances (longitude of the
+     * line and angle given in radians) of the new point from the previous
+     * introduced.
+     */
+    public static final int POLAR_SCU = 4;
+
+    /**
+     * Stores the 2D map coordinates of the last point added.
+     */
+    private double[] previousPoint = null;
+
+    /**
+     * <i>Stack with CAD tools.</i>
+     * 
+     * <i>For each CAD tool we use, the last item added in this stack will
+     * display a different icon according to the current operation and its
+     * status.</i>
+     */
+    private Stack cadToolStack = new Stack();
+
+    /**
+     * X coordinate of the last dragging or moving mouse event.
+     */
+    private int lastX;
+
+    /**
+     * Y coordinate of the last dragging or moving mouse event.
+     */
+    private int lastY;
+
+    /**
+     * Unused attribute.
+     */
+    private ISymbol symbol = mapContextManager.getSymbolManager().createSymbol(
+        Geometry.TYPES.POINT, Color.RED);
+
+    /**
+     * Represents the cursor's point selected in <i>map coordinates</i>.
+     * 
+     * @see MapControl#toMapPoint
+     */
+    private Point2D mapAdjustedPoint;
+
+    /**
+     * Kind of geometry drawn to identify the kind of control point selected by
+     * the cursor's mouse.
+     */
+    // private ISnapper usedSnap = null;
+    /**
+     * Determines if has displayed at the edition console, the question for the
+     * operations that can do the user with the current CAD tool, in its current
+     * state.
+     */
+    private boolean questionAsked = false;
+
+    /**
+     * Represents the cursor's point selected in <i>screen coordinates</i>.
+     * 
+     * @see ViewPort#fromMapPoint(Point2D)
+     */
+    private Point2D adjustedPoint;
+
+    /**
+     * Determines if the snap tools are enabled or disabled.
+     * 
+     * @see #isRefentEnabled()
+     * @see #setRefentEnabled(boolean)
+     */
+    // private boolean bRefent = true;
+    /**
+     * <p>
+     * Determines if the position of the snap of the mouse's cursor on the
+     * <code>MapControl</code> is within the area around a control point of a
+     * geometry.
+     * </p>
+     * 
+     * <p>
+     * The area is calculated as a circle centered at the control point and with
+     * radius the pixels tolerance defined in the preferences.
+     * </p>
+     */
+    // private boolean bForceCoord = false;
+    /**
+     * Optional grid that could be applied on the <code>MapControl</code>'s
+     * view port.
+     * 
+     * @see #getGrid()
+     * @see #setAdjustGrid(boolean)
+     */
+    // private CADGrid cadgrid = new CADGrid();
+    /**
+     * Determines is is enabled or not the <i>Orto</i> mode.
+     */
+    private boolean bOrtoMode;
+
+    /**
+     * A light yellow color for the tool tip text box associated to the point
+     * indicated by the mouse's cursor.
+     */
+    private Color theTipColor = new Color(255, 255, 155);
+
+    /**
+     * Last question asked to the user in the CAD console.
+     */
+    private Object lastQuestion;
+
+    /**
+     * Maximum tolerance in the approximation of a curved line by a polyline.
+     * 
+     * @see #initializeFlatness()
+     */
+    private static boolean flatnessInitialized = false;
+
+    /**
+     * Listener to display the coordinates in the current application's status
+     * bar.
+     */
+    private StatusBarListener sbl = null;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#setMapControl(com.iver
+     * .cit.gvsig.fmap.MapControl)
+     */
+    public void setMapControl(MapControl mc) {
+        super.setMapControl(mc);
+        sbl = new StatusBarListener(getMapControl());
+    }
+
+    private static final Image imageCursor = new BufferedImage(32, 32,
+        BufferedImage.TYPE_INT_ARGB);
+    static {
+        Graphics g = imageCursor.getGraphics();
+        int size1 = 15;
+        int size2 = 3;
+        int x = 16;
+        int y = 16;
+        g.setColor(Color.MAGENTA);
+        g.drawLine((x - size1), (y), (x + size1), (y));
+        g.drawLine((x), (y - size1), (x), (y + size1));
+        // g.setColor(Color.MAGENTA);
+        g.drawRect((x - 6), (y - 6), 12, 12);
+        g.drawRect((x - 3), (y - 3), 6, 6);
+
+        // // getMapControl().setToolTipText(null);
+        // if (adjustedPoint != null) {
+        // if (bForceCoord) {
+        // /* g.setColor(Color.ORANGE);
+        // g.drawRect((int) (adjustedPoint.getX() - 6),
+        // (int) (adjustedPoint.getY() - 6), 12, 12);
+        // g.drawRect((int) (adjustedPoint.getX() - 3),
+        // (int) (adjustedPoint.getY() - 3), 6, 6);
+        // g.setColor(Color.MAGENTA);
+        // g.drawRect((int) (adjustedPoint.getX() - 4),
+        // (int) (adjustedPoint.getY() - 4), 8, 8); */
+        // if (usedSnap != null)
+        // {
+        // usedSnap.draw(g, adjustedPoint);
+        //
+        // Graphics2D g2 = (Graphics2D) g;
+        // FontMetrics metrics = g2.getFontMetrics();
+        // int w = metrics.stringWidth(usedSnap.getToolTipText()) + 5;
+        // int h = metrics.getMaxAscent() + 5;
+        // int x = (int)p.getX()+9;
+        // int y = (int)p.getY()- 7;
+        //
+        // g2.setColor(theTipColor );
+        // g2.fillRect(x, y-h, w, h);
+        // g2.setColor(Color.BLACK);
+        // g2.drawRect(x, y-h, w, h);
+        // g2.drawString(usedSnap.getToolTipText(), x+3, y-3);
+        //
+        //
+        // // getMapControl().setToolTipText(usedSnap.getToolTipText());
+        // }
+        //
+        // bForceCoord = false;
+        // } else {
+        // g.drawRect((int) (p.getX() - size2), (int) (p.getY() - size2),
+        // (int) (size2 * 2), (int) (size2 * 2));
+        // }
+        // }
+
+    }
+
+    /**
+     * <p>
+     * Draws the selected geometries to edit. And, if the <i>snapping</i> is
+     * enabled, draws also its effect over them.
+     * </p>
+     * 
+     * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#paintComponent(java.awt.Graphics)
+     */
+    public void paintComponent(MapControlDrawer mapControlDrawer) {
+        super.paintComponent(mapControlDrawer);
+        if (CADExtension.getCADToolAdapter() != this) {
+            return;
+        }
+
+        if (adjustedPoint != null) {
+            Point2D p = null;
+            
+            p = getMapControl().getViewPort().toMapPoint(adjustedPoint);
+            /*
+             * We are going to draw.
+             * Is mapAdjustedPoint better in any situation?
+             * 
+            if (mapAdjustedPoint != null) {
+                p = mapAdjustedPoint;
+            } else {
+                p = getMapControl().getViewPort().toMapPoint(adjustedPoint);
+            }
+            */
+
+            // If the stack is empty, return
+            if (cadToolStack.isEmpty()) {
+                return;
+            }
+
+            if (((CADTool) cadToolStack.peek()).getVLE() == null) {
+                return;
+            }
+
+            ((CADTool) cadToolStack.peek()).drawOperation(mapControlDrawer,
+                p.getX(), p.getY());
+        }
+    }
+
+    /**
+     * <p>
+     * Responds two kind of mouse click events:
+     * <ul>
+     * <li><b><i>One click of the third mouse's button</i></b>: displays a popup
+     * with edition options.</li>
+     * <li><b><i>Two clicks of the first mouse's button</i></b>: ends the last
+     * cad tool setting as end transition point the event's one.</li>
+     * </ul>
+     * </p>
+     * 
+     * 
+     * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseClicked(java.awt.event.MouseEvent)
+     * @see CADExtension#showPopup(MouseEvent)
+     */
+    public void mouseClicked(MouseEvent e) throws BehaviorException {
+        if (e.getButton() == MouseEvent.BUTTON3) {
+            CADExtension.showPopup(e);
+        } else
+            if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
+                questionAsked = true;
+                if (!cadToolStack.isEmpty()) {
+                    CADTool ct = (CADTool) cadToolStack.peek();
+                    ViewPort vp = getMapControl().getMapContext().getViewPort();
+                    Point2D p;
+
+                    if (mapAdjustedPoint != null) {
+                        p = mapAdjustedPoint;
+                    } else {
+                        p = vp.toMapPoint(adjustedPoint);
+                    }
+                    ct.endTransition(p.getX(), p.getY(), e);
+                    previousPoint = new double[] { p.getX(), p.getY() };
+                }
+            }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseEntered(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseEntered(MouseEvent e) throws BehaviorException {
+        clearMouseImage();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseExited(java.awt.
+     * event.MouseEvent)
+     */
+    public void mouseExited(MouseEvent e) throws BehaviorException {
+    }
+
+    /**
+     * Selects the vertex of a geometry at the point selected on the
+     * <code>MapControl</code> by pressing the first mouse's button.
+     * 
+     * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mousePressed(java.awt.event.MouseEvent)
+     */
+    public void mousePressed(MouseEvent e) throws BehaviorException {
+        if (e.getButton() == MouseEvent.BUTTON1) {
+            ViewPort vp = getMapControl().getMapContext().getViewPort();
+            Point2D p;
+            mapAdjustedPoint = getMapControl().getMapAdjustedPoint();
+            if (mapAdjustedPoint != null) {
+                p = mapAdjustedPoint;
+            } else {
+                p = vp.toMapPoint(adjustedPoint);
+            }
+            transition(new double[] { p.getX(), p.getY() }, e, ABSOLUTE);
+        }
+    }
+
+    // /**
+    // * <p>Adjusts the <code>point</code> to the grid if its enabled, and
+    // * sets <code>mapHandlerAdjustedPoint</code> with that new value.</p>
+    // *
+    // * <p>The value returned is the distance between those points: the
+    // original and
+    // * the adjusted one.</p>
+    // *
+    // * @param point point to adjust
+    // * @param mapHandlerAdjustedPoint <code>point</code> adjusted
+    // *
+    // * @return distance from <code>point</code> to the adjusted one. If there
+    // is no
+    // * adjustment, returns <code>Double.MAX_VALUE</code>.
+    // */
+    // private double adjustToHandler(Point2D point,
+    // Point2D mapHandlerAdjustedPoint) {
+    //
+    // if (!isRefentEnabled())
+    // return Double.MAX_VALUE;
+    //
+    // ILayerEdited aux =
+    // CADExtension.getEditionManager().getActiveLayerEdited();
+    // if (!(aux instanceof VectorialLayerEdited))
+    // return Double.MAX_VALUE;
+    // VectorialLayerEdited vle = (VectorialLayerEdited) aux;
+    //
+    // ArrayList snappers = vle.getSnappers();
+    // ArrayList layersToSnap = vle.getLayersToSnap();
+    //
+    //
+    // ViewPort vp = getMapControl().getViewPort();
+    //
+    // snappers=SnapConfigPage.getActivesSnappers();
+    //
+    // double mapTolerance = vp.toMapDistance(SelectionCADTool.tolerance);
+    // double minDist = mapTolerance;
+    // // double rw = getMapControl().getViewPort().toMapDistance(5);
+    // Point2D mapPoint = point;
+    // double middleTol=mapTolerance * 0.5;
+    // org.gvsig.fmap.geom.primitive.Envelope r = new
+    // DefaultEnvelope(mapPoint.getX() - middleTol,
+    // mapPoint.getY() - middleTol,
+    // mapPoint.getX() + middleTol,
+    // mapPoint.getY() + middleTol);
+    //
+    // Envelope e = Converter.convertEnvelopeToJTS(r);
+    //
+    // usedSnap = null;
+    // Point2D lastPoint = null;
+    // if (previousPoint != null)
+    // {
+    // lastPoint = new Point2D.Double(previousPoint[0], previousPoint[1]);
+    // }
+    // for (int j = 0; j < layersToSnap.size(); j++)
+    // {
+    // FLyrVect lyrVect = (FLyrVect) layersToSnap.get(j);
+    // SpatialCache cache = lyrVect.getSpatialCache();
+    // if (lyrVect.isVisible())
+    // {
+    // // La lista de snappers est� siempre ordenada por prioridad. Los de
+    // mayor
+    // // prioridad est�n primero.
+    // for (int i = 0; i < snappers.size(); i++)
+    // {
+    // ISnapper theSnapper = (ISnapper) snappers.get(i);
+    //
+    // if (usedSnap != null)
+    // {
+    // // Si ya tenemos un snap y es de alta prioridad, cogemos ese. (A no ser
+    // que en otra capa encontremos un snapper mejor)
+    // if (theSnapper.getPriority() < usedSnap.getPriority())
+    // break;
+    // }
+    // SnappingVisitor snapVisitor = null;
+    // Point2D theSnappedPoint = null;
+    //
+    // if (theSnapper instanceof ISnapperVectorial)
+    // {
+    // if (theSnapper instanceof ISnapperGeometriesVectorial) {
+    // snapVisitor=new GeometriesSnappingVisitor((ISnapperGeometriesVectorial)
+    // theSnapper,point,mapTolerance,lastPoint);
+    // }else {
+    // snapVisitor = new SnappingVisitor((ISnapperVectorial) theSnapper, point,
+    // mapTolerance, lastPoint);
+    // }
+    // // System.out.println("Cache size = " + cache.size());
+    // cache.query(e, snapVisitor);
+    // theSnappedPoint = snapVisitor.getSnapPoint();
+    //
+    // }
+    // if (theSnapper instanceof ISnapperRaster)
+    // {
+    // ISnapperRaster snapRaster = (ISnapperRaster) theSnapper;
+    // theSnappedPoint = snapRaster.getSnapPoint(getMapControl(), point,
+    // mapTolerance, lastPoint);
+    // }
+    //
+    //
+    // if (theSnappedPoint != null) {
+    // double distAux = theSnappedPoint.distance(point);
+    // if (minDist > distAux)
+    // {
+    // minDist = distAux;
+    // usedSnap = theSnapper;
+    // mapHandlerAdjustedPoint.setLocation(theSnappedPoint);
+    // }
+    // }
+    // }
+    // } // visible
+    // }
+    // if (usedSnap != null)
+    // return minDist;
+    // return Double.MAX_VALUE;
+    //
+    // }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseReleased(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseReleased(MouseEvent e) throws BehaviorException {
+        getMapControl().repaint();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseDragged(java.awt
+     * .event.MouseEvent)
+     */
+    public void mouseDragged(MouseEvent e) throws BehaviorException {
+        lastX = e.getX();
+        lastY = e.getY();
+        adjustedPoint = e.getPoint();
+        // calculateSnapPoint(e.getPoint());
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseMoved(java.awt.event
+     * .MouseEvent)
+     */
+    public void mouseMoved(MouseEvent e) throws BehaviorException {
+
+        lastX = e.getX();
+        lastY = e.getY();
+        adjustedPoint = e.getPoint();
+        // calculateSnapPoint(e.getPoint());
+
+        showCoords(e.getPoint());
+
+        getMapControl().repaint();
+    }
+
+    /**
+     * Displays the current coordinates of the mouse's cursor on the associated
+     * <code>MapControl</code> object, at the status bar of the application's
+     * main frame.
+     * 
+     * @param pPix
+     *            current 2D mouse's cursor coordinates on the
+     *            <code>MapControl</code>
+     */
+    private void showCoords(Point2D pPix) {
+        String[] axisText = new String[2];
+        axisText[0] = "X = ";
+        axisText[1] = "Y = ";
+        // NumberFormat nf = NumberFormat.getInstance();
+        MapControl mapControl = getMapControl();
+        ViewPort vp = mapControl.getMapContext().getViewPort();
+        IProjection iProj = vp.getProjection();
+
+        // if (iProj.getAbrev().equals("EPSG:4326") ||
+        // iProj.getAbrev().equals("EPSG:4230")) {
+        // axisText[0] = "Lon = ";
+        // axisText[1] = "Lat = ";
+        // nf.setMaximumFractionDigits(8);
+        // } else {
+        // axisText[0] = "X = ";
+        // axisText[1] = "Y = ";
+        // nf.setMaximumFractionDigits(2);
+        // }
+        Point2D p;
+        if (mapAdjustedPoint == null) {
+            p = vp.toMapPoint(pPix);
+        } else {
+            p = mapAdjustedPoint;
+        }
+        sbl.setFractionDigits(p);
+        axisText = sbl.setCoorDisplayText(axisText);
+        MainFrame mF = PluginServices.getMainFrame();
+
+        if (mF != null) {
+            mF.getStatusBar().setMessage(
+                "units",
+                PluginServices.getText(this,
+                    MapContext.getDistanceNames()[vp.getDistanceUnits()]));
+            mF.getStatusBar().setControlValue("scale",
+                String.valueOf(mapControl.getMapContext().getScaleView()));
+            mF.getStatusBar().setMessage("projection", iProj.getAbrev());
+
+            String[] coords = sbl.getCoords(p);
+            mF.getStatusBar().setMessage("x", axisText[0] + coords[0]);
+            mF.getStatusBar().setMessage("y", axisText[1] + coords[1]);
+        }
+    }
+
+    /**
+     * Hides the mouse's cursor.
+     */
+    private void clearMouseImage() {
+        int[] pixels = new int[16 * 16];
+        Image image =
+            Toolkit.getDefaultToolkit().createImage(
+                new MemoryImageSource(16, 16, pixels, 0, 16));
+        Cursor transparentCursor =
+            Toolkit.getDefaultToolkit().createCustomCursor(image,
+                new Point(0, 0), "invisiblecursor");
+
+        getMapControl().setCursor(transparentCursor);
+    }
+
+    /**
+     * <p>
+     * Draws a 31x31 pixels cross round the mouse's cursor with an small
+     * geometry centered:
+     * <ul>
+     * <li><i>an square centered</i>: if isn't over a <i>control point</i>.
+     * <li><i>an small geometry centered according to the kind of control
+     * point</i>: if it's over a control point. In this case, the small geometry
+     * is drawn by a {@link ISnapper ISnapper} type object.<br>
+     * On the other hand, a light-yellowed background tool tip text with the
+     * type of <i>control point</i> will be displayed.</li>
+     * </p>
+     * 
+     * @param g
+     *            <code>MapControl</code>'s graphics where the data will be
+     *            drawn
+     */
+    // private void drawCursor(Graphics g) {
+    // g.setColor(Color.black);
+    // Point2D p = adjustedPoint;
+    //
+    // if (p == null) {
+    // getGrid().setViewPort(getMapControl().getViewPort());
+    //
+    // return;
+    // }
+    //
+    // int size1 = 15;
+    // int size2 = 3;
+    // g.drawLine((int) (p.getX() - size1), (int) (p.getY()),
+    // (int) (p.getX() + size1), (int) (p.getY()));
+    // g.drawLine((int) (p.getX()), (int) (p.getY() - size1),
+    // (int) (p.getX()), (int) (p.getY() + size1));
+    //
+    // // getMapControl().setToolTipText(null);
+    // if (adjustedPoint != null) {
+    // if (bForceCoord) {
+    // /* g.setColor(Color.ORANGE);
+    // g.drawRect((int) (adjustedPoint.getX() - 6),
+    // (int) (adjustedPoint.getY() - 6), 12, 12);
+    // g.drawRect((int) (adjustedPoint.getX() - 3),
+    // (int) (adjustedPoint.getY() - 3), 6, 6);
+    // g.setColor(Color.MAGENTA);
+    // g.drawRect((int) (adjustedPoint.getX() - 4),
+    // (int) (adjustedPoint.getY() - 4), 8, 8); */
+    // if (usedSnap != null)
+    // {
+    // usedSnap.draw(g, adjustedPoint);
+    //
+    // Graphics2D g2 = (Graphics2D) g;
+    // FontMetrics metrics = g2.getFontMetrics();
+    // int w = metrics.stringWidth(usedSnap.getToolTipText()) + 5;
+    // int h = metrics.getMaxAscent() + 5;
+    // int x = (int)p.getX()+9;
+    // int y = (int)p.getY()- 7;
+    //
+    // g2.setColor(theTipColor );
+    // g2.fillRect(x, y-h, w, h);
+    // g2.setColor(Color.BLACK);
+    // g2.drawRect(x, y-h, w, h);
+    // g2.drawString(usedSnap.getToolTipText(), x+3, y-3);
+    //
+    //
+    // // getMapControl().setToolTipText(usedSnap.getToolTipText());
+    // }
+    //
+    // bForceCoord = false;
+    // } else {
+    // g.drawRect((int) (p.getX() - size2), (int) (p.getY() - size2),
+    // (int) (size2 * 2), (int) (size2 * 2));
+    // }
+    // }
+    // }
+    /**
+     * <p>
+     * Tries to find the nearest geometry or grid control point by the position
+     * of the current snap tool.
+     * </p>
+     * 
+     * <p>
+     * Prioritizes the grid control points than the geometries ones.
+     * </p>
+     * 
+     * <p>
+     * If finds any near, stores the <i>map</i> and <i>pixel</i> coordinates for
+     * the snap, and enables the <code>bForceCoord</code> attribute for the next
+     * draw of the mouse's cursor.
+     * </p>
+     * 
+     * @param point
+     *            current mouse 2D position
+     */
+    // private void calculateSnapPoint(Point point) {
+    // // Se comprueba el ajuste a rejilla
+    //
+    // Point2D gridAdjustedPoint = getMapControl().getViewPort().toMapPoint(
+    // point);
+    // double minDistance = Double.MAX_VALUE;
+    // CADTool ct = (CADTool) cadToolStack.peek();
+    // if (ct instanceof SelectionCADTool
+    // && ((SelectionCADTool) ct).getStatus().equals(
+    // "Selection.FirstPoint")) {
+    // mapAdjustedPoint = gridAdjustedPoint;
+    // adjustedPoint = (Point2D) point.clone();
+    // } else {
+    //
+    // minDistance = getGrid().adjustToGrid(gridAdjustedPoint);
+    // if (minDistance < Double.MAX_VALUE) {
+    // adjustedPoint = getMapControl().getViewPort().fromMapPoint(
+    // gridAdjustedPoint);
+    // mapAdjustedPoint = gridAdjustedPoint;
+    // } else {
+    // mapAdjustedPoint = null;
+    // }
+    // }
+    // Point2D handlerAdjustedPoint = null;
+    //
+    // // Se comprueba el ajuste a los handlers
+    // if (mapAdjustedPoint != null) {
+    // handlerAdjustedPoint = (Point2D) mapAdjustedPoint.clone(); //
+    // getMapControl().getViewPort().toMapPoint(point);
+    // } else {
+    // handlerAdjustedPoint = getMapControl().getViewPort().toMapPoint(
+    // point);
+    // }
+    //
+    // Point2D mapPoint = new Point2D.Double();
+    // double distance = adjustToHandler(handlerAdjustedPoint, mapPoint);
+    //
+    // if (distance < minDistance) {
+    // bForceCoord = true;
+    // adjustedPoint = getMapControl().getViewPort().fromMapPoint(mapPoint);
+    // mapAdjustedPoint = mapPoint;
+    // minDistance = distance;
+    // }
+    //
+    // // Si no hay ajuste
+    // if (minDistance == Double.MAX_VALUE) {
+    // adjustedPoint = point;
+    // mapAdjustedPoint = null;
+    // }
+    //
+    // }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#mouseWheelMoved(java.
+     * awt.event.MouseWheelEvent)
+     */
+    public void mouseWheelMoved(MouseWheelEvent e) throws BehaviorException {
+    }
+
+    /**
+     * <p>
+     * Process the information written by the user about the next point
+     * coordinate, determining the kind of <i>transition</i> according the
+     * parameters written.
+     * </p>
+     * 
+     * <p>
+     * After, invokes one of the three possible <i>transition</i> methods of the
+     * <i>finite machine</i> of edition:
+     * <ul>
+     * <li><i>First transition type: <b>Point</i></b>: if <code>text</code>
+     * matches with any pattern of parameters needed for any kind of point
+     * coordinates.<br>
+     * There are eight ways of introducing point 2D coordinates:
+     * <ul>
+     * <li><i>X,Y</i> : absolute cardinal 2D coordinate from the center
+     * <i>(0,0)</i> of the CCS <i>Current Coordinate System</i>.</li>
+     * <li><i>@X,Y</i> : relative cardinal 2D distances from the last point
+     * added of the CCS. If it's the first point of the geometry, works like
+     * <i>X,Y</i>.</li>
+     * <li><i>length< angle</i> : absolute polar 2D coordinate from the center
+     * <i>(0,0)</i> of the CCS <i>Current Coordinate System</i>, using
+     * <i>angle</i> from the <i>X</i> axis of CCS, and <i>length</i> far away.</li>
+     * <li><i>@length< angle</i> : relative polar 2D coordinate from the last
+     * point added of the CCS <i>Current Coordinate System</i>, using
+     * <i>angle</i> from the <i>X</i> axis of CCS, and <i>length</i> far away.
+     * If it's the first point of the geometry, works like <i>length< angle</i>.
+     * </li>
+     * <li><i>*X,Y</i> : like <i>X,Y</i> but using UCS <i>Universal Coordinate
+     * System</i> as reference.</li>
+     * <li><i>@*X,Y</i> : like <i>@X,Y</i> but using UCS <i>Universal Coordinate
+     * System</i> as reference. If it's the first point of the geometry, works
+     * like <i>*X,Y</i>.</li>
+     * <li><i>*length< angle</i> : like <i>length< angle</i> but using UCS
+     * <i>Universal Coordinate System</i> as reference.</li>
+     * <li><i>@*length< angle</i> : like <i>@length< angle</i> but using UCS
+     * <i>Universal Coordinate System</i> as reference. If it's the first point
+     * of the geometry, works like <i>*length< angle</i>.</li>
+     * </ul>
+     * </li>
+     * <li><i>Second transition type: <b>Value</i></b>: if recognizes it as a
+     * single number.</li>
+     * <li><i>Third transition type: <b>Option</i></b>: by default, if can't
+     * classify the information as a single number neither as a point. This
+     * information will be an <code>String</code> and dealt as an option of the
+     * current tool state. Ultimately, if isn't valid, <code>text</code> will be
+     * rewritten in the console notifying the user that isn't correct.</li>
+     * </ul>
+     * </p>
+     * 
+     * @param text
+     *            command written by user in the edition's console
+     */
+    public void textEntered(String text) {
+        if (text == null) {
+            transition(PluginServices.getText(this, "cancel"));
+        } else {
+            /*
+             * if ("".equals(text)) { transition("aceptar"); } else {
+             */
+            text = text.trim();
+            int type = ABSOLUTE;
+            String[] numbers = new String[1];
+            numbers[0] = text;
+            if (text.indexOf(",") != -1) {
+
+                numbers = text.split(",");
+                if (numbers[0].substring(0, 1).equals("@")) {
+                    numbers[0] = numbers[0].substring(1, numbers[0].length());
+                    type = RELATIVE_SCU;
+                    if (numbers[0].substring(0, 1).equals("*")) {
+                        type = RELATIVE_SCP;
+                        numbers[0] =
+                            numbers[0].substring(1, numbers[0].length());
+                    }
+                }
+            } else
+                if (text.indexOf("<") != -1) {
+                    type = POLAR_SCP;
+                    numbers = text.split("<");
+                    if (numbers[0].substring(0, 1).equals("@")) {
+                        numbers[0] =
+                            numbers[0].substring(1, numbers[0].length());
+                        type = POLAR_SCU;
+                        if (numbers[0].substring(0, 1).equals("*")) {
+                            type = POLAR_SCP;
+                            numbers[0] =
+                                numbers[0].substring(1, numbers[0].length());
+                        }
+                    }
+                }
+
+            double[] values = null;
+
+            try {
+                if (numbers.length == 2) {
+                    // punto
+                    values =
+                        new double[] { Double.parseDouble(numbers[0]),
+                            Double.parseDouble(numbers[1]) };
+                    transition(values, null, type);
+                } else
+                    if (numbers.length == 1) {
+                        // valor
+                        values =
+                            new double[] { Double.parseDouble(numbers[0]) };
+                        transition(values[0]);
+                    }
+            } catch (NumberFormatException e) {
+                transition(text);
+            } catch (NullPointerException e) {
+                transition(text);
+            }
+            // }
+        }
+        getMapControl().repaint();
+    }
+
+    /**
+     * If there are options related with the <code>CADTool</code> at the peek
+     * of the CAD tool stack, displays them as a popup.
+     */
+    public void configureMenu() {
+        String[] desc = ((CADTool) cadToolStack.peek()).getDescriptions();
+        // String[] labels = ((CADTool)
+        // cadToolStack.peek()).getCurrentTransitions();
+        CADExtension.clearMenu();
+
+        for (int i = 0; i < desc.length; i++) {
+            if (desc[i] != null) {
+                CADExtension
+                    .addMenuEntry(PluginServices.getText(this, desc[i]));// ,
+                // labels[i]);
+            }
+        }
+
+    }
+
+    /**
+     * <p>
+     * One of the three kind of transaction methods of the <i>finite machine</i>
+     * of edition.
+     * </p>
+     * 
+     * <p>
+     * This one deals <code>values</code> as two numbers that, according
+     * <code>type</code> calculate a new point 2D in the current layer edited in
+     * the associated <code>MapControl</code>.
+     * </p>
+     * 
+     * <p>
+     * There are different ways of calculating the new point 2D coordinates,
+     * according the value of <code>type</code>, see
+     * {@link #textEntered(String) #textEntered(String)}.
+     * </p>
+     * 
+     * <p>
+     * After applying the changes, updates the controls available for managing
+     * the current data.
+     * </p>
+     * 
+     * @param values
+     *            numbers needed to calculate the new point coordinates
+     *            according <code>type</code>
+     * @param event
+     *            event which generated this invocation (a
+     *            <code>MouseEvent</code> or a <code>KeyEvent</code>)
+     * @param type
+     *            kind of information that is <code>values</code>. According
+     *            this parameter, will calculate the new point in a different
+     *            way
+     * 
+     * @see CADTool#transition(double, double, InputEvent)
+     * @see #transition(double)
+     * @see #transition(String)
+     */
+    private void transition(double[] values, InputEvent event, int type) {
+        questionAsked = true;
+        if (!cadToolStack.isEmpty()) {
+            CADTool ct = (CADTool) cadToolStack.peek();
+
+            switch (type) {
+            case ABSOLUTE:
+                ct.transition(values[0], values[1], event);
+                previousPoint = values;
+                break;
+            case RELATIVE_SCU:
+                // Comprobar que tenemos almacenado el punto anterior
+                // y crear nuevo con coordenadas relativas a �l.
+                double[] auxSCU = values;
+                if (previousPoint != null) {
+                    auxSCU[0] = previousPoint[0] + values[0];
+                    auxSCU[1] = previousPoint[1] + values[1];
+                }
+                ct.transition(auxSCU[0], auxSCU[1], event);
+
+                previousPoint = auxSCU;
+                break;
+            case RELATIVE_SCP:
+                // TODO de momento no implementado.
+                ct.transition(values[0], values[1], event);
+                previousPoint = values;
+                break;
+            case POLAR_SCU:// Relativo
+                // Comprobar que tenemos almacenado el punto anterior
+                // y crear nuevo con coordenadas relativas a �l.
+                double[] auxPolarSCU = values;
+                if (previousPoint != null) {
+                    Point2D point =
+                        UtilFunctions.getPoint(new Point2D.Double(
+                            previousPoint[0], previousPoint[1]), Math
+                            .toRadians(values[1]), values[0]);
+                    auxPolarSCU[0] = point.getX();
+                    auxPolarSCU[1] = point.getY();
+                    ct.transition(auxPolarSCU[0], auxPolarSCU[1], event);
+                } else {
+                    Point2D point =
+                        UtilFunctions.getPoint(new Point2D.Double(0, 0),
+                            Math.toRadians(values[1]), values[0]);
+                    auxPolarSCU[0] = point.getX();
+                    auxPolarSCU[1] = point.getY();
+                    ct.transition(auxPolarSCU[0], auxPolarSCU[1], event);
+                }
+                previousPoint = auxPolarSCU;
+                break;
+            case POLAR_SCP:// Absoluto
+                double[] auxPolarSCP = values;
+                if (previousPoint != null) {
+                    Point2D point =
+                        UtilFunctions.getPoint(new Point2D.Double(0, 0),
+                            Math.toRadians(values[1]), values[0]);
+                    auxPolarSCP[0] = point.getX();
+                    auxPolarSCP[1] = point.getY();
+                    ct.transition(auxPolarSCP[0], auxPolarSCP[1], event);
+                } else {
+                    Point2D point =
+                        UtilFunctions.getPoint(new Point2D.Double(0, 0),
+                            values[1], values[0]);
+                    auxPolarSCP[0] = point.getX();
+                    auxPolarSCP[1] = point.getY();
+                    ct.transition(auxPolarSCP[0], auxPolarSCP[1], event);
+                }
+                previousPoint = auxPolarSCP;
+                break;
+            default:
+                break;
+            }
+            askQuestion();
+        }
+        configureMenu();
+        PluginServices.getMainFrame().enableControls();
+    }
+
+    /**
+     * <p>
+     * One of the three kind of transaction methods of the <i>finite machine</i>
+     * of edition.
+     * </p>
+     * 
+     * <p>
+     * This one deals <code>value</code> as a single number used as a parameter
+     * for the current tool state. Ultimately, if isn't valid,
+     * <code>number</code> will be rewritten in the console notifying the user
+     * that isn't correct.
+     * </p>
+     * 
+     * <p>
+     * After applying the changes, updates the controls available for managing
+     * the current data.
+     * </p>
+     * 
+     * @param value
+     *            value for the current tool state
+     * 
+     * @see CADTool#transition(double)
+     * @see #transition(double[], InputEvent, int)
+     * @see #transition(String)
+     */
+    private void transition(double value) {
+        questionAsked = true;
+        if (!cadToolStack.isEmpty()) {
+            CADTool ct = (CADTool) cadToolStack.peek();
+            ct.transition(value);
+            askQuestion();
+        }
+        configureMenu();
+        PluginServices.getMainFrame().enableControls();
+    }
+
+    /**
+     * <p>
+     * One of the three kind of transaction methods of the <i>finite machine</i>
+     * of edition.
+     * </p>
+     * 
+     * <p>
+     * This one deals <code>option</code> as an option of the current tool
+     * state. Ultimately, if isn't valid, <code>option</code> will be rewritten
+     * in the console notifying the user that isn't correct.
+     * </p>
+     * 
+     * @param option
+     *            option for the current tool state
+     * 
+     * @see CADTool#transition(String)
+     * @see #transition(double[], InputEvent, int)
+     * @see #transition(double)
+     */
+    public void transition(String option) {
+        questionAsked = true;
+        if (!cadToolStack.isEmpty()) {
+            CADTool ct = (CADTool) cadToolStack.peek();
+            try {
+                ct.transition(option);
+            } catch (Exception e) {
+                IWindow window =
+                    PluginServices.getMDIManager().getActiveWindow();
+
+                if (window instanceof DefaultViewPanel) {
+                    ((DefaultViewPanel) window).getConsolePanel().addText(
+                        "\n" + PluginServices.getText(this, "incorrect_option")
+                            + " : " + option, JConsole.ERROR);
+                }
+            }
+            askQuestion();
+        }
+        configureMenu();
+        PluginServices.getMainFrame().enableControls();
+    }
+
+    /**
+     * Shows or hides a grid on the <code>ViewPort</code> of the associated
+     * <code>MapControl</code>.
+     * 
+     * @param value
+     *            <code>true</code> to make the grid visible; <code>false</code>
+     *            to make it invisible
+     */
+    // public void setGridVisibility(boolean value) {
+    // getGrid().setShowGrid(value);
+    // getGrid().setViewPort(getMapControl().getViewPort());
+    // getMapControl().repaint();
+    // }
+    // /**
+    // * Sets the snap tools enabled or disabled.
+    // *
+    // * @param activated <code>true</code> to enable the snap tools;
+    // <code>false</code> to disable them
+    // *
+    // * @see #isRefentEnabled()
+    // */
+    // public void setRefentEnabled(boolean activated) {
+    // bRefent = activated;
+    // }
+    //
+    // /**
+    // * Determines if snap tools are enabled or disabled.
+    // *
+    // * @return <code>true</code> to enable the snap tools; <code>false</code>
+    // to disable them
+    // *
+    // * @see #setRefentEnabled(boolean)
+    // */
+    // public boolean isRefentEnabled()
+    // {
+    // return bRefent;
+    // }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.gvsig.fmap.tools.Behavior.Behavior#getListener()
+     */
+    public ToolListener getListener() {
+        return new ToolListener() {
+
+            /**
+             * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
+             */
+            public Image getImageCursor() {
+                return imageCursor;
+            }
+
+            /**
+             * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+             */
+            public boolean cancelDrawing() {
+                return false;
+            }
+        };
+    }
+
+    /**
+     * Returns the {@link CADTool CADTool} at the top of the stack without
+     * removing it from the CAD tool stack.
+     * 
+     * @return the {@link CADTool CADTool} at the top of the stack
+     * 
+     * @see #pushCadTool(CADTool)
+     * @see #popCadTool()
+     * @see #setCadTool(CADTool)
+     */
+    public CADTool getCadTool() {
+        return (CADTool) cadToolStack.peek();
+    }
+
+    /**
+     * <p>
+     * Pushes a {@link CADTool CADTool} onto the top of the CAD tool stack, and
+     * sets it as current.
+     * </p>
+     * 
+     * @param cadTool
+     *            CAD tool to enable as current
+     * 
+     * @see #getCadTool()
+     * @see #popCadTool()
+     * @see #setCadTool(CADTool)
+     */
+    public void pushCadTool(CADTool cadTool) {
+        cadToolStack.push(cadTool);
+        cadTool.setCadToolAdapter(this);
+        // cadTool.initializeStatus();
+        // cadTool.setVectorialAdapter(vea);
+        /*
+         * int ret = cadTool.transition(null, editableFeatureSource, selection,
+         * new double[0]);
+         * 
+         * if ((ret & Automaton.AUTOMATON_FINISHED) ==
+         * Automaton.AUTOMATON_FINISHED) { popCadTool();
+         * 
+         * if (cadToolStack.isEmpty()) { pushCadTool(new
+         * com.iver.cit.gvsig.gui.cad.smc.gen.CADTool());//new
+         * SelectionCadTool());
+         * PluginServices.getMainFrame().setSelectedTool("selection"); }
+         * 
+         * askQuestion();
+         * 
+         * getMapControl().drawMap(false); }
+         */
+    }
+
+    /**
+     * Removes the peek of the CAD tool stack.
+     * 
+     * @see #pushCadTool(CADTool)
+     * @see #getCadTool()
+     * @see #setCadTool(CADTool)
+     */
+    public void popCadTool() {
+        cadToolStack.pop();
+    }
+
+    /**
+     * <p>
+     * Displays at the console associated to the current active view that's
+     * being edited, the question of the following operation that user can do
+     * with the current <code>CADTool</code>, only if it hasn't just answered.
+     * </p>
+     * 
+     * <p>
+     * The format of the question will be according the following pattern:<br>
+     * "\n#"<i>{cadtool at CAD tool stack peek}</i>.getQuestion()">"
+     * </p>
+     */
+    public void askQuestion() {
+        CADTool cadtool = (CADTool) cadToolStack.peek();
+        /*
+         * if (cadtool..getStatus()==0){
+         * PluginServices.getMainFrame().addTextToConsole("\n"
+         * +cadtool.getName()); }
+         */
+        if (PluginServices.getMDIManager().getActiveWindow() instanceof DefaultViewPanel) {
+            DefaultViewPanel vista =
+                (DefaultViewPanel) PluginServices.getMDIManager()
+                    .getActiveWindow();
+            String question = cadtool.getQuestion();
+            if (lastQuestion == null || !(lastQuestion.equals(question))
+                || questionAsked) {
+                vista.getConsolePanel().addText("\n" + "#" + question + " > ",
+                    JConsole.MESSAGE);
+                // ***PluginServices.getMainFrame().addTextToConsole("\n" +
+                // cadtool.getQuestion());
+                questionAsked = false;
+            }
+            lastQuestion = question;
+        }
+
+    }
+
+    /**
+     * Empties the CAD tools stack and pushes <code>cadTool</code> in it.
+     * 
+     * @param cadTool
+     *            CAD tool to set at the peek of the stack
+     * 
+     * @see #pushCadTool(CADTool)
+     * @see #popCadTool()
+     * @see #getCadTool()
+     */
+    public void setCadTool(CADTool cadTool) {
+        cadToolStack.clear();
+        pushCadTool(cadTool);
+    }
+
+    /**
+     * <p>
+     * Removes all geometries selected in the associated <code>MapControl</code>.
+     */
+    public void delete() {
+    	IEditionManager editionManager = EditionLocator.getEditionManager();
+        ILayerEdited aux = editionManager.getActiveLayerEdited();
+        if (!(aux instanceof VectorialLayerEdited)) {
+            return;
+        }
+        VectorialLayerEdited vle = (VectorialLayerEdited) aux;
+        FeatureStore featureStore = null;
+        featureStore = ((FLyrVect) vle.getLayer()).getFeatureStore();
+        String description = PluginServices.getText(this, "remove_geometry");
+        DisposableIterator iterator = null;
+        try {
+            featureStore.beginEditingGroup(description);
+
+            FeatureSelection selection = featureStore.createFeatureSelection();
+            selection.select((FeatureSet) featureStore.getSelection());
+            iterator = selection.fastIterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                editionManager.removeFeature(featureStore, feature);
+            }
+            logger.info("Clearing selection after deleting selected geometries...");
+            vle.clearSelection();
+        } catch (ReadException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(), e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+            try {
+                featureStore.endEditingGroup();
+            } catch (NeedEditingModeException e) {
+                logger.error("Exception endEditingGroup", e);
+            }
+        }
+        refreshEditedLayer();
+    }
+
+    /**
+     * <p>
+     * Responds to actions of writing common key commands for all kind of CAD
+     * operations, enabling/disabling after the controls to manage the available
+     * information according the tool selected:
+     * <ul>
+     * <li><i>eliminar</i>: removes the geometries that are now selected.</li>
+     * <li><i>escape</i>: executes different actions according to the current
+     * CAD tool of the associated <code>MapControl</code>:
+     * <ul>
+     * <li>If the tool enabled is identified by <i>cadtooladapter</i>: empties
+     * the CAD tools stack, changing the current tool by a
+     * {@link SelectionCADTool SelectionCADTool}, which is identified by
+     * <i>_selection</i> and allows select features of the active vector layer
+     * of the associated <code>MapControl</code> instance.</li>
+     * <li>Otherwise, that means current associated <code>MapControl</code>
+     * instance isn't identified by "<i>cadtooladapter</i>", changes the enabled
+     * tool by the previous.</li>
+     * </ul>
+     * </li>
+     * </ul>
+     * </p>
+     * 
+     * @param actionCommand
+     *            identifier of the key action command executed by the user
+     * 
+     * @see SelectionCADTool
+     * @see MapControl#setPrevTool()
+     */
+    public void keyPressed(String actionCommand) {
+    	IEditionManager editionManager = EditionLocator.getEditionManager();
+        if (editionManager.getActiveLayerEdited() == null) {
+            return;
+        }
+        if (actionCommand.equals("eliminar")) {
+            delete();
+        } else
+            if (actionCommand.equals("escape")) {
+                if (getMapControl().getCurrentTool().equals("cadtooladapter")) {
+                    CADTool ct = (CADTool) cadToolStack.peek();
+                    ct.end();
+                    cadToolStack.clear();
+                    SelectionCADTool selCad = new SelectionCADTool();
+                    selCad.init();
+                    VectorialLayerEdited vle =
+                        (VectorialLayerEdited) CADExtension.getEditionManager()
+                            .getActiveLayerEdited();
+                    try {
+                        vle.clearSelection();
+                    } catch (DataException e) {
+                        NotificationManager.addError(e.getMessage(), e);
+                    }
+
+                    pushCadTool(selCad);
+                    // getVectorialAdapter().getSelection().clear();
+
+                    refreshEditedLayer();
+
+                    PluginServices.getMainFrame().setSelectedTool("_selection");
+                    // askQuestion();
+                } else {
+                    getMapControl().setPrevTool();
+                }
+            }
+
+        PluginServices.getMainFrame().enableControls();
+
+    }
+
+    /**
+     * <p>
+     * Applies a lightweight repaint of the active layer being edited.
+     * </p>
+     * 
+     * <p>
+     * All layers under it won't be drawn, only the upper one and whose are over
+     * that layer in the TOC.
+     * </p>
+     * 
+     * @see MapControl#rePaintDirtyLayers()
+     */
+    public void refreshEditedLayer() {
+        ILayerEdited edLayer =
+            CADExtension.getEditionManager().getActiveLayerEdited();
+        if (edLayer != null) {
+            getMapControl().rePaintDirtyLayers();
+        }
+
+    }
+
+    /**
+     * Gets the {@link CADGrid CADGrid} that can be drawn on the
+     * <code>ViewPort</code> of the associated <code>MapControl</code>.
+     * 
+     * @return reference to the <i>grid</i> that can be applied on the
+     *         <code>ViewPort</code>
+     * 
+     * @see #setGridVisibility(boolean)
+     */
+    // public CADGrid getGrid() {
+    // return cadgrid;
+    // }
+    /**
+     * Determines if is enabled or not the <i>orto</i> mode.
+     * 
+     * @return <code>true</code> if is enabled the <i>orto</i> mode;
+     *         otherwise <code>false</code>
+     * 
+     * @see #setOrtoMode(boolean)
+     */
+    public boolean isOrtoMode() {
+        return bOrtoMode;
+    }
+
+    /**
+     * Enables / disables the <i>orto</i> mode.
+     * 
+     * @param b
+     *            the desired value
+     * 
+     * @see #isOrtoMode()
+     */
+    public void setOrtoMode(boolean b) {
+        bOrtoMode = b;
+    }
+
+    /**
+     * Associates and stores the specified name with the specified
+     * {@link CADTool CADTool}.
+     * 
+     * @param name
+     *            name of the tool
+     * @param c
+     *            CAD tool to interactuate editing the layers
+     * 
+     * @see #getCADTools()
+     * @see #getCADTool(String)
+     */
+    public static void addCADTool(String name, CADTool c) {
+        namesCadTools.put(name, c);
+
+    }
+
+    /**
+     * Gets all CAD tools available to edit layers with this tool listener.
+     * 
+     * @return CAD tools available to edit layers with this tool listener
+     * 
+     * @see #addCADTool(String, CADTool)
+     * @see #getCADTool(String)
+     */
+    public static CADTool[] getCADTools() {
+        return (CADTool[]) CADToolAdapter.namesCadTools.values().toArray(
+            new CADTool[0]);
+    }
+
+    /**
+     * Returns the {@link CADTool CADTool} to which the specified name is
+     * mapped.
+     * 
+     * @param text
+     *            name of the tool
+     * @return the CAD tool whose associated name is to be returned
+     * 
+     * @see #addCADTool(String, CADTool)
+     * @see #getCADTools()
+     */
+    public CADTool getCADTool(String text) {
+        CADTool ct = (CADTool) namesCadTools.get(text);
+        return ct;
+    }
+
+    /**
+     * Gets the object used to manage the edition of the layers of the
+     * associated <code>MapControl</code>.
+     * 
+     * @see IEditionManager
+     * 
+     * @return object used to manage the edition of the layers
+     */
+    public IEditionManager getEditionManager() {
+        return editionManager;
+    }
+
+    /**
+     * <p>
+     * Initializes the <i>flatness</i> with the defined in preferences.
+     * </p>
+     * 
+     * <p>
+     * The <i>flatness</i> is the maximum tolerance used to approximate curved
+     * lines in a <i>shape</i> by polylines.
+     * </p>
+     * <p>
+     * The shapes doesn't support primitive like arcs neither other curved lines
+     * to draw their geometries, then for drawing any kind of this geometries
+     * the curved lines are drawn approximately by a polyline. And for doing
+     * more realistic that curves, is used the <i>flatness</i> parameter, that
+     * indicates that the difference between each arc and the straight segment
+     * that approximates it must be in the worse case, like the <i>flatness</i>.
+     * </p>
+     * 
+     * @see FConverter#FLATNESS
+     */
+    public void initializeFlatness() {
+        if (!flatnessInitialized) {
+            flatnessInitialized = true;
+            Preferences prefs = Preferences.userRoot().node("cadtooladapter");
+            double flatness =
+                prefs.getDouble("flatness", geomManager.getFlatness());
+            geomManager.setFlatness(flatness);
+        }
+    }
+
+    /**
+     * <p>
+     * Returns the GeometryType of the current active and vector layer being
+     * edited.
+     * </p>
+     * 
+     * @see FLyrVect#getGeom
+     * 
+     * @return type of the shape that's the current active and vector layer
+     *         being edited
+     */
+    public GeometryType getActiveLayerGeometryType() {
+        try {
+            return ((FLyrVect) CADExtension.getEditionManager()
+                .getActiveLayerEdited().getLayer()).getGeometryType();
+        } catch (ReadException e) {
+            NotificationManager.addError(e);
+            return null;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns the type of the shape that's the current active and vector layer
+     * being edited.
+     * </p>
+     * 
+     * @see FLyrVect#getGeometryType()
+     * 
+     * @return type of geometry that's the current active and vector layer
+     *         being edited
+     * @deprecated use {@link #getActiveLayerGeometryType()} instead. To be
+     *             removed in gvSIG 2.1
+     */
+    public int getActiveLayerType() {
+        int type = Geometry.TYPES.GEOMETRY;
+        try {
+            type =
+                ((FLyrVect) CADExtension.getEditionManager()
+                    .getActiveLayerEdited().getLayer()).getShapeType();
+        } catch (ReadException e) {
+            NotificationManager.addError(e);
+        }
+        return type;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/gui/cad/CADToolAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/AutoCompletePolygonExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/AutoCompletePolygonExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/AutoCompletePolygonExtension.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.AutoCompletePolygon;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+public class AutoCompletePolygonExtension extends Extension {
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+
+	private AutoCompletePolygon theTool;
+
+	public void initialize() {
+		theTool = new AutoCompletePolygon();
+		CADExtension.addCADTool("_autocompletepolygon", theTool);
+		registerIcons();
+	}
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-insert-autopolygon", this);
+	}
+	public void execute(String actionCommand) {
+		CADExtension.initFocus();
+		if (actionCommand.equals("layer-insert-autopolygon")) {
+			CADExtension.setCADTool("_autocompletepolygon", true);
+			CADExtension.getEditionManager().setMapControl(mapControl);
+		}
+		CADExtension.getCADToolAdapter().configureMenu();
+
+	}
+
+	public boolean isEnabled() {
+		try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				if (CADExtension.getEditionManager().getActiveLayerEdited() == null)
+					return false;
+				FLyrVect lv = (FLyrVect) CADExtension.getEditionManager()
+						.getActiveLayerEdited().getLayer();
+				if (theTool.isApplicable(lv.getShapeType())) {
+					return true;
+				}
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		}
+		return false;
+	}
+
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/AutoCompletePolygonExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolygonExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolygonExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolygonExtension.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.CircleCADTool;
+import org.gvsig.editing.gui.cad.tools.EditVertexCADTool;
+import org.gvsig.editing.gui.cad.tools.EllipseCADTool;
+import org.gvsig.editing.gui.cad.tools.PolygonCADTool;
+import org.gvsig.editing.gui.cad.tools.RectangleCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la inserci�n de poligonos en edici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class InsertPolygonExtension extends Extension {
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+	private PolygonCADTool polygon;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		polygon = new PolygonCADTool();
+		CircleCADTool circle=new CircleCADTool();
+        RectangleCADTool rectangle=new RectangleCADTool();
+        EllipseCADTool ellipse=new EllipseCADTool();
+        EditVertexCADTool editvertex=new EditVertexCADTool();
+		CADExtension.addCADTool("_polygon", polygon);
+		CADExtension.addCADTool("_circle",circle);
+	    CADExtension.addCADTool("_rectangle", rectangle);
+	    CADExtension.addCADTool("_ellipse", ellipse);
+	    CADExtension.addCADTool("_editvertex",editvertex);
+
+	    registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-edit-vertex", this);
+		IconThemeHelper.registerIcon("action", "layer-insert-ellipse", this);
+		IconThemeHelper.registerIcon("action", "layer-insert-circle", this);
+		IconThemeHelper.registerIcon("action", "layer-insert-rectangle", this);
+		IconThemeHelper.registerIcon("action", "layer-insert-polygon", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if ("layer-modify-edit-vertex".equalsIgnoreCase(s)) {
+			CADExtension.setCADTool("_editvertex",true);
+			
+		} else if ("layer-insert-ellipse".equalsIgnoreCase(s)) {
+			CADExtension.setCADTool("_ellipse",true);
+		
+		} else if ("layer-insert-circle".equalsIgnoreCase(s)) {
+			CADExtension.setCADTool("_circle",true);
+		
+		} else if ("layer-insert-rectangle".equalsIgnoreCase(s)) {
+			CADExtension.setCADTool("_rectangle",true);
+		
+		} else if ("layer-insert-polygon".equalsIgnoreCase(s)) {
+			CADExtension.setCADTool("_polygon",true);
+	    
+		}
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+					return false;
+				FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+				if (polygon.isApplicable(lv.getShapeType())){
+					return true;
+				}
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolygonExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertLineExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertLineExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertLineExtension.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.ArcCADTool;
+import org.gvsig.editing.gui.cad.tools.LineCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la inserci�n de l�neas en edici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class InsertLineExtension extends Extension {
+	private DefaultViewPanel view;
+	private LineCADTool line;
+	private MapControl mapControl;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		line = new LineCADTool();
+		CADExtension.addCADTool("_line", line);
+		ArcCADTool arc=new ArcCADTool();
+		CADExtension.addCADTool("_arc", arc);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-insert-line", this);
+		IconThemeHelper.registerIcon("action", "layer-insert-arc", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if( "layer-insert-line".equalsIgnoreCase(s)) {
+        	CADExtension.setCADTool("_line",true);
+        	CADExtension.getEditionManager().setMapControl(mapControl);
+		} else if( "layer-insert-arc".equalsIgnoreCase(s)) {
+        	CADExtension.setCADTool("_arc",true);
+        	CADExtension.getEditionManager().setMapControl(mapControl);
+		}
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+					return false;
+				FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+				if (line.isApplicable(lv.getShapeType()))
+					return true;
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertLineExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StretchExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StretchExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StretchExtension.java	(revision 42196)
@@ -0,0 +1,116 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.StretchCADTool;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la simplificaci�n de una geometr�a compuesta en otras m�s sencillas.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class StretchExtension extends Extension {
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+	private StretchCADTool stretch;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		stretch=new StretchCADTool();
+		CADExtension.addCADTool("_stretch",stretch);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-stretch", this);
+	}
+
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if ("layer-modify-stretch".equalsIgnoreCase(s)) {
+			 CADExtension.setCADTool("_stretch",true);
+	    }
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				IEditionManager em = EditionLocator.getEditionManager();
+				if (em.getActiveLayerEdited()==null)
+					return false;
+				VectorialLayerEdited vle=(VectorialLayerEdited)em.getActiveLayerEdited();
+				FLyrVect lv=(FLyrVect)vle.getLayer();
+				FeatureSet selection=(FeatureSet)vle.getFeatureStore().getSelection();
+				if (selection.getSize()<1) {
+					return false;
+				}
+				if (stretch.isApplicable(lv.getShapeType())){
+					return true;
+				}
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StretchExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SplitGeometryCADToolExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SplitGeometryCADToolExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SplitGeometryCADToolExtension.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+ *
+ * $Id:
+ * $Log:
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.SplitGeometryCADTool;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * CAD extension to split geometries from a digitized linear geometry.
+ *
+ * @author Alvaro Zabala
+ *
+ */
+public class SplitGeometryCADToolExtension extends Extension {
+
+    private DefaultViewPanel view;
+    private MapControl mapControl;
+    private SplitGeometryCADTool cadTool;
+
+
+    public void execute(String actionCommand) {
+        CADExtension.initFocus();
+        if (actionCommand.equals(SplitGeometryCADTool.SPLIT_GEOMETRY_ACTION_NAME)) {
+            CADExtension.setCADTool(SplitGeometryCADTool.SPLIT_GEOMETRY_TOOL_NAME, true);
+        }
+        CADExtension.getEditionManager().setMapControl(mapControl);
+        CADExtension.getCADToolAdapter().configureMenu();
+    }
+
+    public void initialize() {
+        cadTool = new SplitGeometryCADTool();
+        CADExtension.addCADTool(SplitGeometryCADTool.SPLIT_GEOMETRY_TOOL_NAME, cadTool);
+        registerIcons();
+    }
+
+    private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-split", this);
+    }
+
+    /**
+     * Returns if this Edit CAD tool is visible.
+     * For this, there must be an active vectorial editing lyr in the TOC, which geometries'
+     * dimension would must be linear or polygonal, and with at least one selected geometry.
+     *
+     */
+    public boolean isEnabled() {
+        try {
+            if (EditionUtilities.getEditionStatus() ==
+                EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+                this.view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+                mapControl = view.getMapControl();
+                if (CADExtension.getEditionManager().getActiveLayerEdited() == null)
+                    return false;
+                FLyrVect lv = (FLyrVect) CADExtension.
+                getEditionManager().
+                getActiveLayerEdited().
+                getLayer();
+                if (isPoint(lv.getShapeType())){             
+                    return false;
+                }
+
+                return !lv.getFeatureStore().getFeatureSelection().isEmpty();
+            }
+        } catch (DataException e) {
+            NotificationManager.addError(e.getMessage(),e);
+            return false;
+        }
+        return true;
+    }
+   
+    private boolean isPoint(int shapeType) {
+        switch (shapeType) {        
+        case Geometry.TYPES.MULTIPOINT:
+        case Geometry.TYPES.POINT:      
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    public boolean isVisible() {
+        if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+            return true;
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/SplitGeometryCADToolExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPointExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPointExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPointExtension.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.PointCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+/**
+ * Extensi�n que gestiona la inserci�n de puntos en edici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class InsertPointExtension extends Extension {
+   private DefaultViewPanel view;
+   private MapControl mapControl;
+   private PointCADTool point;
+
+   /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        point = new PointCADTool();
+        CADExtension.addCADTool("_point", point);
+
+        registerIcons();
+    }
+
+    private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-insert-point", this);
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String s) {
+    	CADExtension.initFocus();
+
+        if ("layer-insert-point".equalsIgnoreCase(s)) {
+        	CADExtension.setCADTool("_point",true);
+        	CADExtension.getEditionManager().setMapControl(mapControl);
+        }
+        CADExtension.getCADToolAdapter().configureMenu();
+    }
+    
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+
+      	try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE){
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		        mapControl = view.getMapControl();
+		        if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+					return false;
+		        FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+				if (point.isApplicable(lv.getShapeType())){
+					return true;
+				}
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+    	if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+    }
+	}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPointExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolyLineExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolyLineExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolyLineExtension.java	(revision 42196)
@@ -0,0 +1,110 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.PolylineCADTool;
+import org.gvsig.editing.gui.cad.tools.SplineCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la inserci�n de polil�neas en edici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class InsertPolyLineExtension extends Extension {
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+	private PolylineCADTool polyline;
+	private SplineCADTool spline;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		polyline = new PolylineCADTool();
+		spline = new SplineCADTool();
+		CADExtension.addCADTool("_polyline", polyline);
+		CADExtension.addCADTool("_spline", spline);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-insert-polyline", this);
+		IconThemeHelper.registerIcon("action", "layer-insert-spline", this);
+	}
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if ("layer-insert-polyline".equalsIgnoreCase(s)) {
+			CADExtension.setCADTool("_polyline",true);
+		}else if ("layer-insert-spline".equalsIgnoreCase(s) ) {
+			CADExtension.setCADTool("_spline",true);
+		}
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+					return false;
+				FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+				if (polyline.isApplicable(lv.getShapeType())){
+					return true;
+				}
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertPolyLineExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionLocator.java	(revision 42196)
@@ -0,0 +1,167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.editing.gui.cad.CADToolAdapter;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+public class EditionLocator {
+
+	private static CADToolAdapter adapter=null;
+	private static Map<ViewDocument,CADToolAdapter> adapters=new HashMap<ViewDocument,CADToolAdapter>();
+	
+    /**
+     * Gets the CADToolAdapter of the view where the layer is
+     * contained or null if the layer is not found
+     * in any view
+     *  
+     * @param layer
+     * @return CADToolAdapter of the layer
+     */
+	public static CADToolAdapter getCADToolAdapter(FLayer layer) {
+		Project project = ProjectManager.getInstance().getCurrentProject();
+		List<Document> docs = project.getDocuments();
+		for( int i=0; i<docs.size(); i++ ) {
+			Document doc = docs.get(i);
+			if( doc instanceof ViewDocument ) {
+				ViewDocument view = (ViewDocument)doc;
+				if (view.getMapContext() == layer.getMapContext() ) {
+					CADToolAdapter cta = adapters.get(doc);
+					if ( cta == null ) {
+						cta = new CADToolAdapter();
+						adapters.put(view,cta);
+					}
+					return cta;
+				}
+			}
+		}
+		return null;
+	}
+	
+	/**
+     * Gets the CADToolAdapter of the view
+     * or null if the view not found in the current project
+     * 
+     * @return CADToolAdapter of the view
+     */
+	public static CADToolAdapter getCADToolAdapter(ViewDocument view) {
+		CADToolAdapter cta = adapters.get(view);
+		if (cta == null) {
+			cta = new CADToolAdapter();
+			adapters.put(view, cta);
+		}
+		return cta;
+	}
+
+	/**
+     * Gets the CADToolAdapter of the currently active view
+     * or the CADToolAdapter of the view that was active more
+     * recently (if there is not an active view)
+     * or null if there never was an active view
+     * 
+     * @return CADToolAdapter of current view
+     */
+	public static CADToolAdapter getCADToolAdapter() {
+		Project prj = ProjectManager.getInstance().getCurrentProject();
+		
+		if(prj == null)
+			return null;
+		
+		ViewDocument view = (ViewDocument) prj.getActiveDocument(ViewDocument.class);
+		if( view != null ) {
+			adapter = adapters.get(view);
+			if( adapter==null ) {
+				adapter = new CADToolAdapter();
+				adapters.put(view, adapter);
+			}
+			return adapter;
+		}
+		return adapter;
+	}
+	
+	/**
+	 * 
+     * Gets the edition manager of the currently active view
+     * or the edition manager of the view that was active more
+     * recently (if there is not an active view)
+     * or null if there never was an active view.
+     * 
+	 * @return
+	 */
+	public static IEditionManager getEditionManager() {
+		CADToolAdapter cta=getCADToolAdapter();
+		if (cta == null) {
+		    return null;
+		} else {
+		    return cta.getEditionManager();
+		}
+		
+	}
+	
+	
+
+	/**
+     * Gets the EditionManager of the view where the layer is
+     * contained or null if the layer is not found
+     * in any view
+	 * 
+	 * @param layer
+	 * @return
+	 */
+    public static IEditionManager getEditionManager(FLayer layer) {
+        CADToolAdapter cta=getCADToolAdapter(layer);
+        if (cta == null) {
+            return null;
+        } else {
+            return cta.getEditionManager();
+        }
+        
+    }
+
+	/**
+     * Gets the EditionManager of the ViewDocument or null if the view is not found
+     * in the project
+	 * 
+	 * @param viewDocument
+	 * @return
+	 */
+    public static IEditionManager getEditionManager(ViewDocument view) {
+        CADToolAdapter cta=getCADToolAdapter(view);
+        if (cta == null) {
+            return null;
+        } else {
+            return cta.getEditionManager();
+        }
+        
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MoveGeometryExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MoveGeometryExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MoveGeometryExtension.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.editing.gui.cad.tools.MoveCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la herramienta de mover.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MoveGeometryExtension extends Extension {
+
+	private MapControl mapControl;
+	private MoveCADTool move;
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		move=new MoveCADTool();
+		CADExtension.addCADTool("_move",move);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-move", this);
+	}
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if ("layer-modify-move".equalsIgnoreCase(s)) {
+			 CADExtension.setCADTool("_move",true);
+	    }
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+			return false;
+		FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+		try {
+			return move.isApplicable(lv.getShapeType());
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE){
+			return true;
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/MoveGeometryExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/FactoryLayerEdited.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/FactoryLayerEdited.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/FactoryLayerEdited.java	(revision 42196)
@@ -0,0 +1,38 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.layers;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+public class FactoryLayerEdited {
+
+	public static ILayerEdited createLayerEdited(FLayer lyr, MapControl mapCtrl) {
+		if (lyr instanceof FLyrVect)
+			return new VectorialLayerEdited(lyr, mapCtrl);
+		return null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/FactoryLayerEdited.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/ILayerEdited.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/ILayerEdited.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/ILayerEdited.java	(revision 42196)
@@ -0,0 +1,36 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.layers;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+public interface ILayerEdited {
+
+	/**
+	 * @return Returns the lyr.
+	 */
+	public FLayer getLayer();
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/ILayerEdited.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/VectorialLayerEdited.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/VectorialLayerEdited.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/VectorialLayerEdited.java	(revision 42196)
@@ -0,0 +1,489 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.layers;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
+import java.util.EmptyStackException;
+
+import javax.swing.JOptionPane;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.extension.ViewCommandStackExtension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.CADExtension;
+import org.gvsig.editing.EditionChangeManager;
+import org.gvsig.editing.StartEditing;
+import org.gvsig.editing.gui.cad.CADTool;
+import org.gvsig.editing.gui.cad.tools.SelectionCADTool;
+import org.gvsig.editing.gui.cad.tools.select.SelectRowPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerDrawEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerDrawingListener;
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.vectorial.ContainsGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.IntersectsGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.OutGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlDrawer;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+public class VectorialLayerEdited extends DefaultLayerEdited implements
+LayerDrawingListener, Observer {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger LOG = LoggerFactory.getLogger(VectorialLayerEdited.class);
+	private static final MapControlManager MAP_CONTROL_MANAGER = MapControlLocator.getMapControlManager();
+	private ArrayList selectedHandler = new ArrayList();
+	private Point2D lastPoint;
+	private Point2D firstPoint;
+	private CADTool cadtool = null;
+
+	private ILegend legend;
+	private Image imageSelection;
+	private Image imageHandlers;
+	private EditionChangeManager echm=null;
+	private MapControl mapControl = null;
+
+	public VectorialLayerEdited(FLayer lyr, MapControl mapControl) {
+		super(lyr);
+		this.mapControl = mapControl;
+		lyr.getMapContext().addLayerDrawingListener(this);
+		// Por defecto, siempre hacemos snapping sobre la capa en edici�n.
+		lyr.getMapContext().getLayersToSnap().add(lyr);
+		((FLyrVect) lyr).getFeatureStore().addObserver(this);
+	}
+
+	public ArrayList getSelectedHandler() {
+		return selectedHandler;
+	}
+
+	public void clearSelection() throws DataException {
+		if (getFeatureStore() == null) {
+			return;
+		}
+		FeatureSelection selection = getFeatureStore().getFeatureSelection();
+		selectedHandler.clear();
+		selection.deselectAll();
+	}
+
+	public void selectWithPoint(double x, double y, boolean multipleSelection) {
+		FeatureSet set = null;
+		try {
+			firstPoint = new Point2D.Double(x, y);
+			FeatureStore featureStore = getFeatureStore();
+			// Se comprueba si se pincha en una gemometr�a
+			ViewPort viewPort = getLayer().getMapContext().getViewPort();
+			double tol = viewPort.toMapDistance(MAP_CONTROL_MANAGER.getTolerance());
+
+			GeometryManager manager = GeometryLocator.getGeometryManager();
+			Point center = (org.gvsig.fmap.geom.primitive.Point)manager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+			center.setX(x);
+			center.setY(y);
+			Circle circle = (Circle)geomManager.create(TYPES.CIRCLE, SUBTYPES.GEOM2D);
+			circle.setPoints(center, tol);
+
+			FeatureQuery featureQuery = featureStore.createFeatureQuery();
+			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
+
+			FLayer the_layer = this.getLayer();
+	        Geometry query_geo = FLyrVect.fromViewPortCRSToSourceCRS(
+	            the_layer, circle, true);
+
+	        IProjection query_proj = this.getLayer().getMapContext().getProjection();
+	        if (the_layer.getCoordTrans() != null) {
+	            query_proj = the_layer.getCoordTrans().getPOrig();
+	        }
+
+			Evaluator evaluator = new IntersectsGeometryEvaluator(
+			    query_geo,
+			    query_proj,
+			    featureStore.getDefaultFeatureType(),
+			    featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
+
+			featureQuery.setFilter(evaluator);
+			set = featureStore.getFeatureSet(featureQuery);
+			if (!multipleSelection && set.getSize()>1){
+				SelectRowPanel selectionPanel = new SelectRowPanel(set, this);
+				PluginServices.getMDIManager().addCentredWindow(selectionPanel);
+			}
+			else {
+			    selectGeometries(featureStore, set, viewPort, multipleSelection);
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationNotSupportedException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (CreateGeometryException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} finally {
+			set.dispose();
+		}
+	}
+
+	public void selectWithSecondPoint(double x, double y) {
+		FeatureSet set = null;
+		try {
+			FeatureStore featureStore = getFeatureStore();
+			lastPoint = new Point2D.Double(x, y);
+			ViewPort viewPort = getLayer().getMapContext().getViewPort();
+			double x1;
+			double y1;
+			double w1;
+			double h1;
+
+			if (firstPoint.getX() < lastPoint.getX()) {
+				x1 = firstPoint.getX();
+				w1 = lastPoint.getX() - firstPoint.getX();
+			} else {
+				x1 = lastPoint.getX();
+				w1 = firstPoint.getX() - lastPoint.getX();
+			}
+
+			if (firstPoint.getY() < lastPoint.getY()) {
+				y1 = firstPoint.getY();
+				h1 = lastPoint.getY() - firstPoint.getY();
+			} else {
+				y1 = lastPoint.getY();
+				h1 = firstPoint.getY() - lastPoint.getY();
+			}
+
+			Envelope envelope = geomManager.createEnvelope(x1, y1, x1 + w1, y1 + h1, SUBTYPES.GEOM2D);
+
+			FeatureQuery featureQuery = featureStore.createFeatureQuery();
+			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
+			Evaluator evaluator=null;
+			if (firstPoint.getX() < lastPoint.getX()) {
+				evaluator = new IntersectsGeometryEvaluator(envelope.getGeometry(), viewPort.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
+			}else{
+				evaluator = new IntersectsGeometryEvaluator(envelope.getGeometry(), viewPort.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
+			}
+			featureQuery.setFilter(evaluator);
+			set = featureStore.getFeatureSet(featureQuery);
+			selectGeometries(featureStore, set, viewPort, false);
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationNotSupportedException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (CreateEnvelopeException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} finally {
+			DisposeUtils.dispose(set);
+		}
+	}
+
+	public void selectContainsSurface(org.gvsig.fmap.geom.Geometry polygon) {
+		FeatureSet set = null;
+		try {
+			FeatureStore featureStore = getFeatureStore();
+			ViewPort viewPort = getLayer().getMapContext().getViewPort();
+			FeatureQuery featureQuery = featureStore.createFeatureQuery();
+			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
+			Evaluator evaluator = new ContainsGeometryEvaluator(polygon, viewPort.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
+			featureQuery.setFilter(evaluator);
+			set = featureStore.getFeatureSet(featureQuery);
+			selectGeometries(featureStore, set, viewPort, false);
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationNotSupportedException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} finally {
+			DisposeUtils.dispose(set);
+		}
+	}
+
+	private void selectGeometries(FeatureStore featureStore, FeatureSet set, ViewPort vp, boolean multipleSelection) throws DataException, GeometryOperationNotSupportedException, GeometryOperationException{
+		FeatureSelection featureSelection = null;
+		if (multipleSelection) {
+			featureSelection = (FeatureSelection) featureStore.getSelection();
+			featureSelection.select(set);
+		} else {
+			featureSelection = featureStore.createFeatureSelection();
+			featureSelection.select(set);
+			featureStore.setSelection(featureSelection);
+		}
+		//Draw the geometries with the edition symbology
+
+	}
+
+	public void selectIntersectsSurface(org.gvsig.fmap.geom.Geometry polygon) {
+		FeatureSet set = null;
+		try {
+			FeatureStore featureStore = getFeatureStore();
+			ViewPort vp = getLayer().getMapContext().getViewPort();
+			FeatureQuery featureQuery = featureStore.createFeatureQuery();
+			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
+			Evaluator evaluator = new IntersectsGeometryEvaluator(polygon, vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
+			featureQuery.setFilter(evaluator);
+			set = featureStore.getFeatureSet(featureQuery);
+			selectGeometries(featureStore,set,vp,false);
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationNotSupportedException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} finally {
+			DisposeUtils.dispose(set);
+		}
+	}
+
+	public void selectOutPolygon(org.gvsig.fmap.geom.Geometry polygon) {
+		FeatureSet set = null;
+		try {
+			FeatureStore featureStore = getFeatureStore();
+			ViewPort vp = getLayer().getMapContext().getViewPort();
+			FeatureQuery featureQuery = featureStore.createFeatureQuery();
+			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
+			Evaluator evaluator=new OutGeometryEvaluator(polygon, vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
+			featureQuery.setFilter(evaluator);
+			set = featureStore.getFeatureSet(featureQuery);
+			selectGeometries(featureStore, set, vp, false);
+
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationNotSupportedException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} finally {
+			DisposeUtils.dispose(set);
+		}
+	}
+
+	public void selectAll() {
+		FeatureSet set = null;
+		try {
+			FeatureStore featureStore = getFeatureStore();
+			ViewPort viewPort = getLayer().getMapContext().getViewPort();
+			set = featureStore.getFeatureSet();
+			selectGeometries(featureStore, set, viewPort, false);
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationNotSupportedException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (GeometryOperationException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} finally {
+			DisposeUtils.dispose(set);
+		}
+	}
+
+	public void drawHandlers(org.gvsig.fmap.geom.Geometry geom,
+			ViewPort vp) {
+	    Geometry drawnGeometry = geom;
+	    //If the layer is reprojected, reproject the geometry to draw its handlers in the fine position
+	    if (getLayer().getCoordTrans() != null){
+	        drawnGeometry = drawnGeometry.cloneGeometry();
+	        drawnGeometry.reProject(getLayer().getCoordTrans());
+        }
+		Handler[] handlers = drawnGeometry.getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
+		mapControl.getMapControlDrawer().drawHandlers(handlers, vp.getAffineTransform(),
+				MAP_CONTROL_MANAGER.getHandlerSymbol());
+	}
+
+	public Image getSelectionImage() {
+		return imageSelection;
+	}
+
+	public void setSelectionImage(Image image) {
+		imageSelection = image;
+	}
+
+	public Image getHandlersImage() {
+		return imageHandlers;
+	}
+
+	public void setHandlersImage(Image image) {
+		imageHandlers = image;
+	}
+
+	public void beforeLayerDraw(LayerDrawEvent e) throws CancelationException {
+
+	}
+
+	public void afterLayerDraw(LayerDrawEvent e) throws CancelationException {
+		//Draw the selected geometries...
+		FeatureStore featureStore = null;
+		DisposableIterator iterator = null;
+		try {
+			featureStore = getFeatureStore();
+			if (featureStore.isEditing()) {
+				ViewPort viewPort = getLayer().getMapContext().getViewPort();
+				iterator = featureStore.getFeatureSelection().fastIterator();
+				MapControlDrawer mapControlDrawer = mapControl.getMapControlDrawer();
+				try {
+					while (iterator.hasNext()) {
+						Feature feature = (Feature) iterator.next();
+						Geometry geometry = feature.getDefaultGeometry();
+						mapControlDrawer.startDrawing(this);
+						mapControlDrawer.setGraphics(e.getGraphics());
+					    drawHandlers(geometry.cloneGeometry(), viewPort);
+						mapControlDrawer.stopDrawing(this);
+					}
+				} catch (ConcurrentModificationException e1) {
+					// throw new CancelationException(e1);
+					// A mitad de pintado se cambia la selecci�n y por tanto no
+					// se puede seguir recorriendo la anterior.
+					return;
+				}
+			}
+		} catch (Exception e2) {
+	          LOG.info("afterLayerDraw error. ", e2);
+	          ApplicationLocator.getManager().message(
+	              "_Unable_to_draw_geometry_handlers",
+	                JOptionPane.ERROR_MESSAGE);
+			// LOG.error("Error drawing the selected geometry", e2);
+		} finally {
+			if (iterator != null) {
+				iterator.dispose();
+			}
+		}
+	}
+
+    public void beforeGraphicLayerDraw(LayerDrawEvent e)
+	throws CancelationException {
+	}
+
+	public void afterLayerGraphicDraw(LayerDrawEvent e)
+	throws CancelationException {
+	}
+
+	public void activationGained(LayerEvent e) {
+		if (ViewCommandStackExtension.csd != null) {
+			ViewCommandStackExtension.csd.setModel(((FLyrVect) getLayer())
+					.getFeatureStore());
+
+		}
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof DefaultViewPanel) {
+			DefaultViewPanel view = (DefaultViewPanel) window;
+			if (e.getSource().isEditing()) {
+				view.showConsole();
+			}
+		}
+		if (cadtool != null) {
+			CADExtension.getCADToolAdapter().setCadTool(cadtool);
+			PluginServices.getMainFrame().setSelectedTool(cadtool.toString());
+			StartEditing.startCommandsApplicable(null, (FLyrVect) getLayer());
+			CADExtension.initFocus();
+		}
+
+	}
+
+	public void activationLost(LayerEvent e) {
+		try {
+			cadtool = CADExtension.getCADTool();
+			IWindow window = PluginServices.getMDIManager().getActiveWindow();
+			if (window instanceof DefaultViewPanel) {
+				DefaultViewPanel view = (DefaultViewPanel) window;
+				view.hideConsole();
+			}
+		} catch (EmptyStackException e1) {
+			cadtool = new SelectionCADTool();
+			cadtool.init();
+		}
+
+	}
+
+	public void setLegend(ILegend legend) {
+		this.legend = legend;
+	}
+
+	public ILegend getLegend() {
+		return legend;
+	}
+
+	public FeatureStore getFeatureStore() throws ReadException {
+		return ((FLyrVect) getLayer()).getFeatureStore();
+	}
+
+	public void update(Observable observable, Object notification) {
+		echm.update(observable, notification);
+	}
+
+	public EditionChangeManager getEditionChangeManager() {
+		return echm;
+	}
+
+	public void setEditionChangeManager(EditionChangeManager echm) {
+		this.echm = echm;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/VectorialLayerEdited.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/DefaultLayerEdited.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/DefaultLayerEdited.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/DefaultLayerEdited.java	(revision 42196)
@@ -0,0 +1,49 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.layers;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+/**
+ * @author fjp
+ *
+ * Clase padre de las capas en edici�n, por si alguna vez
+ * necesitamos editar Raster
+ */
+public class DefaultLayerEdited implements ILayerEdited {
+	private FLayer lyr;
+
+	public DefaultLayerEdited(FLayer lyr)
+	{
+		this.lyr = lyr;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.ILayerEdited#getLayer()
+	 */
+	public FLayer getLayer() {
+		return lyr;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/layers/DefaultLayerEdited.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ExploitExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ExploitExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ExploitExtension.java	(revision 42196)
@@ -0,0 +1,227 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.ExploitCADTool;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Extensi�n que gestiona la simplificaci�n de una geometr�a compuesta en otras m�s sencillas.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ExploitExtension extends Extension {
+    
+    private static Logger logger = LoggerFactory.getLogger(ExploitExtension.class);
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+	private ExploitCADTool exploit;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		exploit=new ExploitCADTool();
+		CADExtension.addCADTool("_exploit",exploit);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-explode", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if ( "layer-modify-explode".equalsIgnoreCase(s) ) {
+        	CADExtension.setCADTool("_exploit",true);
+        }
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		DisposableIterator iterator = null;
+		try {
+			if (EditionUtilities.getEditionStatus() ==
+			    EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+			    
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				mapControl = view.getMapControl();
+				IEditionManager em = EditionLocator.getEditionManager();
+				if (em.getActiveLayerEdited()==null) {
+					return false;
+				}
+				VectorialLayerEdited vle=(VectorialLayerEdited)em.getActiveLayerEdited();
+//				FLyrVect lv=(FLyrVect)vle.getLayer();
+				if (((FeatureSelection)vle.getFeatureStore().getSelection()).getSize()<1) {
+					return false;
+				}
+				
+				FeatureStore store = vle.getFeatureStore();
+				return canExploit(store);
+				
+				/*
+				if (!canExploit(store)) {
+				    return false;
+				}
+				*/
+			
+				
+				/*
+				 * We cannot iterate through selection to get enabled or disbled
+				 * 
+				iterator = ((FeatureSelection) vle.getFeatureStore()
+						.getSelection()).fastIterator();
+				if (iterator.hasNext()){
+					Feature feature = (Feature) iterator.next();
+					if (feature.getDefaultGeometry()!=null &&
+					    exploit.isApplicable((feature.getDefaultGeometry()).getType())){
+						return true;
+					}
+				}
+				*/
+			}
+		} catch (Throwable e) {
+		    logger.info("IsEnabled error. ", e);
+		    ApplicationLocator.getManager().message("_Unable_to_update_tool_status",
+		        JOptionPane.ERROR_MESSAGE);
+			// NotificationManager.addError(e.getMessage(),e);
+		} finally {
+			if (iterator != null) {
+				iterator.dispose();
+			}
+		}
+		return false;
+	}
+
+	private boolean canExploit(FeatureStore store) {
+        DataManager dalmanager = DALLocator.getDataManager();
+        FeatureStoreProviderFactory factory =
+            (FeatureStoreProviderFactory) dalmanager.getStoreProviderFactory(store.getProviderName());
+    
+        GeometryType geotype = null;
+        try {
+            geotype = store.getDefaultFeatureType().getDefaultGeometryAttribute().getGeomType();
+        } catch (DataException e) {
+            logger.info("Cant get geom type.", e);
+            return false;
+        }
+        
+        
+        if (geotype.getType() == Geometry.TYPES.CURVE
+            || geotype.getType() == Geometry.TYPES.MULTICURVE) {
+            // exploting a curve gives curves, so ok
+            return true;
+        }
+
+        if (geotype.getType() == Geometry.TYPES.SURFACE
+            || geotype.getType() == Geometry.TYPES.MULTISURFACE) {
+            
+            // exploting a surface can give curves:
+            return allowsCurvesOfSubtype(factory, geotype.getSubType());
+                // (factory.allowMultipleGeometryTypes()
+                // == FeatureStoreProviderFactory.YES); 
+        }
+
+        if (geotype.isTypeOf(Geometry.TYPES.GEOMETRY)) {
+            // if everything is allowed, ok
+            return true;
+        }
+        
+        // otherwise: (multi)points, etc, not allowed
+        return false;
+	}
+	
+	/**
+     * @param factory
+     * @param subType
+     * @return whether given factory supports
+     * curves of given subtype
+     */
+    private boolean allowsCurvesOfSubtype(
+        FeatureStoreProviderFactory fact,
+        int subt) {
+        
+        List arr2_list = fact.getSupportedGeometryTypesSubtypes();
+        
+        if (arr2_list == null) {
+            /*
+             * null is a valid value, it means all supported
+             */
+            return true;
+        }
+        int[] item = null;
+        int sz = arr2_list.size();
+        for (int i=0; i<sz; i++) {
+            item = (int[]) arr2_list.get(i);
+            if (item != null && item.length == 2
+                && item[0] == Geometry.TYPES.CURVE
+                && item[1] == subt) {
+                // found curves of same subtype (dimensions)
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+			return true;
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ExploitExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InternalPolygonExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InternalPolygonExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InternalPolygonExtension.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.InternalPolygonCADTool;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la inserci�n de pol�gonos internos en edici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class InternalPolygonExtension extends Extension {
+	private DefaultViewPanel view;
+
+	private MapControl mapControl;
+	private InternalPolygonCADTool internalpolygon;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+	    internalpolygon = new InternalPolygonCADTool();
+	    CADExtension.addCADTool("_internalpolygon",internalpolygon);
+
+	    registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "layer-modify-internal-polygon", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+	    CADExtension.initFocus();
+		if ("layer-modify-internal-polygon".equalsIgnoreCase(s)) {
+			 CADExtension.setCADTool("_internalpolygon",true);
+	    }
+	    CADExtension.getEditionManager().setMapControl(mapControl);
+	    CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		try {
+		    if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+		        view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		        mapControl = view.getMapControl();
+		        IEditionManager em = EditionLocator.getEditionManager();
+		        if (em.getActiveLayerEdited()==null)
+		            return false;
+		        VectorialLayerEdited vle=(VectorialLayerEdited)em.getActiveLayerEdited();
+		        if (((FeatureSelection)vle.getFeatureStore().getSelection()).getSize()<1)
+		            return false;
+		        FLyrVect lv=(FLyrVect)vle.getLayer();
+		        if (internalpolygon.isApplicable(lv.getShapeType())){
+		            return true;
+		        }
+		    }
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+	    if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+	        return true;
+	    return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InternalPolygonExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CADExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CADExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CADExtension.java	(revision 42196)
@@ -0,0 +1,508 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import java.awt.KeyEventPostProcessor;
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JTable;
+import javax.swing.text.JTextComponent;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.preferences.IPreference;
+import org.gvsig.andami.preferences.IPreferenceExtension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.CADTool;
+import org.gvsig.editing.gui.cad.CADToolAdapter;
+import org.gvsig.editing.gui.cad.tools.CopyCADTool;
+import org.gvsig.editing.gui.cad.tools.RotateCADTool;
+import org.gvsig.editing.gui.cad.tools.ScaleCADTool;
+import org.gvsig.editing.gui.cad.tools.SymmetryCADTool;
+import org.gvsig.editing.gui.preferences.EditingPage;
+import org.gvsig.editing.project.documents.view.toc.MenuEntry;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.utils.console.JConsole;
+import org.gvsig.utils.console.ResponseListener;
+import org.gvsig.utils.console.jedit.JEditTextArea;
+
+
+/**
+ * Extensi�n dedicada a controlar las diferentes operaciones sobre el editado de
+ * una capa.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class CADExtension extends Extension implements IPreferenceExtension{
+	private static Logger logger = LoggerFactory.getLogger(CADExtension.class);
+
+	private static DefaultViewPanel view;
+	private MapControl mapControl;
+	private EditingPage editingPage = null;
+
+
+	/**
+     * Gets the CADToolAdapter of the view where the layer is
+     * contained or null if the layer is not found
+     * in any view
+	 *
+	 * @param layer
+	 * @return
+	 *
+     * @deprecated Use same method in {@link EditionLocator}
+	 */
+	public static CADToolAdapter getCADToolAdapter(FLayer layer) {
+
+	    return EditionLocator.getCADToolAdapter(layer);
+	}
+
+	/**
+	 * Gets the CADToolAdapter of the current active view
+	 * or the CADToolAdapter of the view that was active more
+	 * recently (if there is not an active view)
+	 * or null if there never was an active view
+	 *
+	 * @return
+	 *
+     * @deprecated Use same method in {@link EditionLocator}
+	 */
+	public static CADToolAdapter getCADToolAdapter() {
+
+	    return EditionLocator.getCADToolAdapter();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+
+		// Registramos los Popup menus:
+        MenuEntry.register();
+
+		CopyCADTool copy = new CopyCADTool();
+		RotateCADTool rotate = new RotateCADTool();
+		ScaleCADTool scale = new ScaleCADTool();
+		SymmetryCADTool symmetry=new SymmetryCADTool();
+		addCADTool("_copy", copy);
+		addCADTool("_rotate", rotate);
+		addCADTool("_scale", scale);
+		addCADTool("_symmetry", symmetry);
+
+		KeyboardFocusManager kfm = KeyboardFocusManager
+				.getCurrentKeyboardFocusManager();
+		kfm.addKeyEventPostProcessor(new myKeyEventPostProcessor());
+
+		registerIcons();
+	}
+
+	@Override
+    public void postInitialize() {
+        //Register the edition symbology
+        registerEditionSymbology();
+    }
+
+    /**
+     * It registers the default symbology used in edition
+     */
+    private void registerEditionSymbology() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        DynObject dynObject = pluginsManager.getPlugin(getClass()).getPluginProperties();
+
+        MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+        if (dynObject.hasDynValue(EditingPage.DEFAULT_AXIS_REFERENCES_SYMBOL)){
+            mapControlManager.setAxisReferenceSymbol(
+                (ISymbol)dynObject.getDynValue(EditingPage.DEFAULT_AXIS_REFERENCES_SYMBOL));
+        }
+
+        if (dynObject.hasDynValue(EditingPage.DEFAULT_RECTANGLE_SELECTION_SYMBOL)) {
+            mapControlManager.setGeometrySelectionSymbol(
+                (ISymbol)dynObject.getDynValue(EditingPage.DEFAULT_RECTANGLE_SELECTION_SYMBOL));
+        }
+
+        if (dynObject.hasDynValue(EditingPage.DEFAULT_HANDLER_SYMBOL)) {
+            mapControlManager.setHandlerSymbol(
+                (ISymbol)dynObject.getDynValue(EditingPage.DEFAULT_HANDLER_SYMBOL));
+        }
+    }
+
+    private void registerIcons(){
+    	IconThemeHelper.registerIcon("action", "layer-modify-copy", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-symmetry", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-rotate", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-scale", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-edit-vertex", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-join", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-matrix", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-move", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-rotate", this);
+    	IconThemeHelper.registerIcon("action", "layer-modify-stretch", this);
+
+
+    	IconThemeHelper.registerIcon("preferences", "preferences-snapper", this);
+    	IconThemeHelper.registerIcon("preferences", "editing-properties", this);
+
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		initFocus();
+    	if( "layer-modify-copy".equalsIgnoreCase(s) ) {
+    		setCADTool("_copy", true);
+    	} else if( "layer-modify-symmetry".equalsIgnoreCase(s) ) {
+    		setCADTool("_symmetry", true);
+    	} else if( "layer-modify-rotate".equalsIgnoreCase(s) ) {
+    		setCADTool("_rotate", true);
+    	} else if( "layer-modify-scale".equalsIgnoreCase(s) ) {
+    		setCADTool("_scale", true);
+
+    		// -------------------------------
+    		// The following action commands are not declared
+    		// in the section of config.xml dedicated to CADExtension.
+    		// They are used in other extensions of this plugin.
+    		// -------------------------------
+    		/*
+    	} else if( "layer-modify-edit-vertex".equalsIgnoreCase(s) ) {
+    		setCADTool("_editvertex", true);
+    	} else if( "layer-modify-join".equalsIgnoreCase(s) ) {
+    		setCADTool("_join", true);
+    	} else if( "layer-modify-matrix".equalsIgnoreCase(s) ) {
+    		setCADTool("_matriz", true);
+    	} else if( "layer-modify-move".equalsIgnoreCase(s) ) {
+    		setCADTool("_move", true);
+    	} else if( "layer-modify-stretch".equalsIgnoreCase(s) ) {
+    		setCADTool("_stretch", true);
+    		*/
+
+    	} else {
+    		logger.info("Action command '"+s+"' not supportted in "+this.getClass().getName());
+    	}
+		CADToolAdapter cta=getCADToolAdapter();
+		cta.configureMenu();
+	}
+
+	public static void addCADTool(String name, CADTool c) {
+		CADToolAdapter.addCADTool(name, c);
+	}
+
+	public static void setCADTool(String text, boolean showCommand) {
+		CADToolAdapter cta=getCADToolAdapter();
+		CADTool ct=cta.getCADTool(text);
+
+		if (ct == null)
+			throw new RuntimeException("No such cad tool");
+		cta.initializeFlatness();
+		cta.setCadTool(ct);
+		ct.init();
+		if (showCommand) {
+			if (PluginServices.getMDIManager().getActiveWindow() instanceof DefaultViewPanel) {
+				DefaultViewPanel vista = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+				vista.getConsolePanel().addText("\n" + ct.getName(),
+					JConsole.COMMAND);
+				cta.askQuestion();
+			}
+		}
+		// PluginServices.getMainFrame().setSelectedTool("SELECT");
+		// PluginServices.getMainFrame().enableControls();
+	}
+
+	public static CADTool getCADTool() {
+		CADToolAdapter cta=getCADToolAdapter();
+		return cta.getCadTool();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		// initFocus();
+		return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
+			view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+			mapControl = view.getMapControl();
+			FLayer[] layers = mapControl.getMapContext().getLayers()
+					.getActives();
+//			if (!(layers[0] instanceof FLyrAnnotation)) {
+//				return true;
+//			}
+			return true;
+		}
+		return false;
+	}
+
+	public MapControl getMapControl() {
+		return getEditionManager().getMapControl();
+	}
+
+	class KeyAction extends AbstractAction {
+
+		private String key;
+
+		public KeyAction(String key) {
+			this.key = key;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+		 */
+		public void actionPerformed(ActionEvent e) {
+			view.focusConsole(key);
+		}
+
+	}
+
+	class MyAction extends AbstractAction {
+		private String actionCommand;
+
+		public MyAction(String command) {
+			actionCommand = command;
+		}
+
+		/**
+		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+		 */
+		public void actionPerformed(ActionEvent e) {
+			CADToolAdapter cta=getCADToolAdapter();
+			cta.keyPressed(actionCommand);
+		}
+
+	}
+
+	/**
+	 * @author fjp
+	 *
+	 * La idea es usar esto para recibir lo que el usuario escribe y enviarlo a
+	 * la consola de la vista para que salga por all�.
+	 */
+	private class myKeyEventPostProcessor implements KeyEventPostProcessor {
+
+		public boolean postProcessKeyEvent(KeyEvent e) {
+			// System.out.println("KeyEvent e = " + e);
+			CADToolAdapter cta=getCADToolAdapter();
+			if ((cta == null) || (view == null))
+				return false;
+
+			if (cta.getMapControl() == null){
+				return false;
+			}
+
+			if (e.getID() != KeyEvent.KEY_RELEASED)
+				return false;
+			if (!(e.getComponent() instanceof JTextComponent)) {
+				if (e.getKeyCode() == KeyEvent.VK_DELETE)
+					cta.keyPressed("eliminar");
+				else if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
+					cta.keyPressed("escape");
+				else if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+					// TODO: REVISAR ESTO CUANDO VIENE UN INTRO DESDE UN
+					// JTEXTAREA
+					// QUE NO ES EL DE CONSOLA
+					if (!(e.getSource() instanceof JTable))
+						view.focusConsole("");
+				}
+				else if ((!e.isActionKey() && e.getKeyCode()!=KeyEvent.VK_TAB)) {
+						//if (Character.isLetterOrDigit(e.getKeyChar())) {
+							Character keyChar = new Character(e.getKeyChar());
+							if (e.getComponent().getName() != null) {
+							    /*
+								System.out
+										.println("Evento de teclado desde el componente "
+												+ e.getComponent().getName());
+								*/
+								if (!e.getComponent().getName().equals(
+										"CADConsole")) {
+									view.focusConsole(keyChar + "");
+								}
+							} else {
+							    /*
+							     * Send content of key event to the editing console
+							     * unless it comes from a JTable (probably the attribute
+							     * table)
+							     */
+								if (!(e.getComponent() instanceof JTable)) {
+									view.focusConsole(keyChar + "");
+								}
+							}
+						//}
+					}
+				}
+			return false;
+		}
+
+	}
+
+	/*
+	 * private void registerKeyStrokes(){ for (char key = '0'; key <= '9';
+	 * key++){ Character keyChar = new Character(key);
+	 * mapControl.getInputMap(MapControl.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key),
+	 * keyChar); mapControl.getActionMap().put(keyChar, new
+	 * KeyAction(keyChar+"")); } for (char key = 'a'; key <= 'z'; key++){
+	 * Character keyChar = new Character(key);
+	 * mapControl.getInputMap(MapControl.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key),
+	 * keyChar); mapControl.getActionMap().put(keyChar, new
+	 * KeyAction(keyChar+"")); } for (char key = 'A'; key <= 'Z'; key++){
+	 * Character keyChar = new Character(key);
+	 * mapControl.getInputMap(MapControl.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key),
+	 * keyChar); mapControl.getActionMap().put(keyChar, new
+	 * KeyAction(keyChar+"")); }
+	 * //this.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,
+	 * 0), "enter"); //this.getActionMap().put("enter", new MyAction("enter"));
+	 * Character keyChar = new
+	 * Character(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0).getKeyChar());
+	 * mapControl.getInputMap(MapControl.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,
+	 * 0),keyChar); mapControl.getActionMap().put(keyChar, new KeyAction(""));
+	 *  // El espacio como si fuera INTRO Character keyCharSpace = new
+	 * Character(' ');
+	 * mapControl.getInputMap(MapControl.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('
+	 * '), keyCharSpace); mapControl.getActionMap().put(keyCharSpace, new
+	 * KeyAction(""));
+	 *
+	 *  }
+	 */
+	private static JPopupMenu popup = new JPopupMenu();
+
+	public static void clearMenu() {
+		popup.removeAll();
+	}
+
+	public static void addMenuEntry(String text) {
+		JMenuItem menu = new JMenuItem(text);
+		menu.setActionCommand(text);
+		menu.setEnabled(true);
+		menu.setVisible(true);
+		menu.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				CADToolAdapter cta=getCADToolAdapter();
+				cta.transition(e.getActionCommand());
+			}
+		});
+
+		popup.add(menu);
+	}
+
+	public static void showPopup(MouseEvent e) {
+		popup.show(e.getComponent(), e.getX(), e.getY());
+	}
+
+	public static DefaultViewPanel getView() {
+		return view;
+	}
+
+	public static void clearView() {
+		view = null;
+	}
+
+	/**
+	 *
+     * Gets the edition manager of the currently active view
+     * or the edition manager of the view that was active more
+     * recently (if there is not an active view)
+     * or null if there never was an active view
+     *
+	 * @return Returns the editionManager.
+	 *
+	 * @deprecated Use same method in {@link EditionLocator}
+	 */
+	public static IEditionManager getEditionManager() {
+	    return EditionLocator.getEditionManager();
+	}
+
+	public static CADTool[] getCADTools() {
+		return CADToolAdapter.getCADTools();
+	}
+
+	public static void initFocus() {
+		view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapControl = view.getMapControl();
+		CADToolAdapter cta=getCADToolAdapter();
+		if (!mapControl.getNamesMapTools().containsKey("cadtooladapter")){
+			// StatusBarListener sbl=new StatusBarListener(view.getMapControl());
+			// mapControl.addMapTool("cadtooladapter",  new Behavior[]{adapter,new MouseMovementBehavior(sbl)});
+			mapControl.addBehavior("cadtooladapter", cta);
+		}
+		// view.getMapControl().setTool("cadtooladapter");
+		JEditTextArea jeta=view.getConsolePanel().getTxt();
+		jeta.requestFocusInWindow();
+		jeta.setCaretPosition(jeta.getText().length());
+
+		view.addConsoleListener("cad", new ResponseListener() {
+			public void acceptResponse(String response) {
+				CADToolAdapter cta=getCADToolAdapter();
+				cta.textEntered(response);
+				// TODO:
+				// FocusManager fm=FocusManager.getCurrentManager();
+				// fm.focusPreviousComponent(mapControl);
+				/*
+				 * if (popup.isShowing()){ popup.setVisible(false); }
+				 */
+
+			}
+		});
+		cta.getEditionManager().setMapControl(mapControl);
+		view.getMapControl().setTool("cadtooladapter");
+	}
+
+	public IPreference[] getPreferencesPages() {
+		IPreference[] preferences=new IPreference[1];
+		preferences[0] = getPreferencesPage();
+		return preferences;
+	}
+
+	private IPreference getPreferencesPage() {
+		if (editingPage == null) {
+			editingPage = new EditingPage();
+		}
+		return editingPage;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/CADExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/BlockedCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/BlockedCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/BlockedCellEditor.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.editing.fmap.rendering.EditionManagerLegend;
+
+
+
+
+/**
+ * Cell Editor de iconos. Controla los eventos de edici�n que se realicen
+ * sobre la columna de iconos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class BlockedCellEditor extends IconOptionCellEditor implements TableCellEditor {
+	public BlockedCellEditor(EditionManagerLegend el,JTable tab,ImageIcon sel, ImageIcon notSel) {
+		super(el,tab,sel,notSel);
+		addMouseListener(new MouseListener(){
+
+			public void mouseClicked(MouseEvent e) {
+//				if (e.getClickCount()==2){
+					int index=table.getSelectedRow();
+					if (eml.isBlocked(index)) {
+						setIcon(getNotSel());
+						eml.setBlocked(index,false);
+
+					}else {
+						eml.setBlocked(index,true);
+						setIcon(getSel());
+					}
+					stopCellEditing();
+//				}
+				table.repaint();
+			}
+
+			public void mouseEntered(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseReleased(MouseEvent e) {
+			}
+
+		});
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+//		if (table.getSelectedRow()==row)
+//		setSelected(true);
+//	else
+		setSelected(isSelected);
+		if (eml.isBlocked(row)) {
+			setIcon(getSel());
+		}else {
+			setIcon(getNotSel());
+		}
+		return this;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/BlockedCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/ActivatedCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/ActivatedCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/ActivatedCellEditor.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.editing.fmap.rendering.EditionManagerLegend;
+
+
+
+
+/**
+ * Cell Editor de iconos. Controla los eventos de edici�n que se realicen
+ * sobre la columna de iconos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ActivatedCellEditor extends IconOptionCellEditor implements TableCellEditor {
+	public ActivatedCellEditor(EditionManagerLegend el,JTable tab,ImageIcon sel, ImageIcon notSel) {
+		super(el,tab,sel,notSel);
+		addMouseListener(new MouseListener(){
+
+			public void mouseClicked(MouseEvent e) {
+//				if (e.getClickCount()==2){
+					int index=table.getSelectedRow();
+					if (eml.isActived(index)) {
+						setIcon(getNotSel());
+						eml.setActived(index,false);
+
+					}else {
+						eml.setActived(index,true);
+						setIcon(getSel());
+					}
+					stopCellEditing();
+//				}
+				table.repaint();
+			}
+
+			public void mouseEntered(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseReleased(MouseEvent e) {
+			}
+
+		});
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+//		if (table.getSelectedRow()==row)
+//			setSelected(true);
+//		else
+			setSelected(isSelected);
+		if (eml.isActived(row)) {
+			setIcon(getSel());
+		}else {
+			setIcon(getNotSel());
+		}
+		return this;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/ActivatedCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/DisabledCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/DisabledCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/DisabledCellEditor.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.editing.fmap.rendering.EditionManagerLegend;
+
+
+
+
+/**
+ * Cell Editor de iconos. Controla los eventos de edici�n que se realicen
+ * sobre la columna de iconos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class DisabledCellEditor extends IconOptionCellEditor implements TableCellEditor {
+	public DisabledCellEditor(EditionManagerLegend el,JTable tab,ImageIcon sel, ImageIcon notSel) {
+		super(el,tab,sel,notSel);
+		addMouseListener(new MouseListener(){
+
+			public void mouseClicked(MouseEvent e) {
+//				if (e.getClickCount()==2){
+					int index=table.getSelectedRow();
+					if (eml.isDisable(index)) {
+						setIcon(getNotSel());
+						eml.setDisable(index,false);
+
+					}else {
+						eml.setDisable(index,true);
+						setIcon(getSel());
+					}
+					stopCellEditing();
+//				}
+				table.repaint();
+			}
+
+			public void mouseEntered(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseReleased(MouseEvent e) {
+			}
+
+		});
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+//		if (table.getSelectedRow()==row)
+//		setSelected(true);
+//	else
+		setSelected(isSelected);
+		if (eml.isDisable(row)) {
+			setIcon(getSel());
+		}else {
+			setIcon(getNotSel());
+		}
+		return this;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/DisabledCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/FilledCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/FilledCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/FilledCellEditor.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.editing.fmap.rendering.EditionManagerLegend;
+
+
+
+
+/**
+ * Cell Editor de iconos. Controla los eventos de edici�n que se realicen
+ * sobre la columna de iconos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FilledCellEditor extends IconOptionCellEditor implements TableCellEditor {
+	public FilledCellEditor(EditionManagerLegend el,JTable tab,ImageIcon sel, ImageIcon notSel) {
+		super(el,tab,sel,notSel);
+		addMouseListener(new MouseListener(){
+
+			public void mouseClicked(MouseEvent e) {
+//				if (e.getClickCount()==2){
+					int index=table.getSelectedRow();
+					if (eml.isFilled(index)) {
+						setIcon(getNotSel());
+						eml.setFilled(index,false);
+
+					}else {
+						eml.setFilled(index,true);
+						setIcon(getSel());
+					}
+					stopCellEditing();
+//				}
+				table.repaint();
+			}
+
+			public void mouseEntered(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseReleased(MouseEvent e) {
+			}
+
+		});
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+//		if (table.getSelectedRow()==row)
+//		setSelected(true);
+//	else
+		setSelected(isSelected);
+		if (eml.isFilled(row)) {
+			setIcon(getSel());
+		}else {
+			setIcon(getNotSel());
+		}
+		return this;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/FilledCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/PresentCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/PresentCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/PresentCellEditor.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.editing.fmap.rendering.EditionManagerLegend;
+
+
+
+
+/**
+ * Cell Editor de iconos. Controla los eventos de edici�n que se realicen
+ * sobre la columna de iconos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PresentCellEditor extends IconOptionCellEditor implements TableCellEditor {
+	public PresentCellEditor(EditionManagerLegend el,JTable tab,ImageIcon sel, ImageIcon notSel) {
+		super(el,tab,sel,notSel);
+		addMouseListener(new MouseListener(){
+
+			public void mouseClicked(MouseEvent e) {
+				if (e.getClickCount()==2){
+					int index=table.getSelectedRow();
+					if (!eml.isPresent(index)) {
+						eml.setPresent(index);
+						setIcon(getSel());
+					}
+					stopCellEditing();
+				}
+				table.repaint();
+			}
+
+			public void mouseEntered(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseReleased(MouseEvent e) {
+			}
+
+		});
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+//		if (table.getSelectedRow()==row)
+//		setSelected(true);
+//	else
+		setSelected(isSelected);
+		if (eml.isPresent(row)) {
+			setIcon(getSel());
+		}else {
+			setIcon(getNotSel());
+		}
+		return this;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/PresentCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/CellIconOptionRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/CellIconOptionRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/CellIconOptionRenderer.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.editing.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.border.Border;
+import javax.swing.table.TableCellRenderer;
+
+import org.gvsig.app.project.documents.view.legend.edition.gui.PreviewIcon;
+
+
+/**
+ * Renderer para iconos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class CellIconOptionRenderer extends JPanel implements TableCellRenderer {
+    Border unselectedBorder = null;
+    Border selectedBorder = null;
+    boolean isBordered = true;
+    private PreviewIcon preview = new PreviewIcon();
+
+    /**
+     * Crea un nuevo FCellRenderer.
+     *
+     * @param isBordered DOCUMENT ME!
+     */
+    public CellIconOptionRenderer(boolean isBordered) {
+        this.isBordered = isBordered;
+        setOpaque(true); //MUST do this for background to show up.
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param value DOCUMENT ME!
+     * @param isSelected DOCUMENT ME!
+     * @param hasFocus DOCUMENT ME!
+     * @param row DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public Component getTableCellRendererComponent(JTable table, Object value,
+        boolean isSelected, boolean hasFocus, int row, int column) {
+        preview.setIcon((ImageIcon) value);
+        if (table.getSelectedRow()==row)
+			preview.setSelected(true);
+		else
+			preview.setSelected(false);
+        return preview;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/CellIconOptionRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/IconOptionCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/IconOptionCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/IconOptionCellEditor.java	(revision 42196)
@@ -0,0 +1,157 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTable;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.app.project.documents.view.legend.edition.gui.PreviewIcon;
+import org.gvsig.editing.fmap.rendering.EditionManagerLegend;
+
+
+
+
+/**
+ * Cell Editor de iconos. Controla los eventos de edici�n que se realicen
+ * sobre la columna de iconos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class IconOptionCellEditor extends PreviewIcon implements TableCellEditor {
+	private ArrayList listeners = new ArrayList();
+	private ImageIcon sel;
+	private ImageIcon notSel;
+	protected EditionManagerLegend eml;
+	protected JTable table;
+
+	public IconOptionCellEditor(EditionManagerLegend el,JTable tab,ImageIcon sel, ImageIcon notSel) {
+		this.eml=el;
+		this.table=tab;
+		this.sel=sel;
+		this.notSel=notSel;
+			addKeyListener(new KeyAdapter() {
+				public void keyReleased(KeyEvent e) {
+					if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+						stopCellEditing();
+					} else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+						cancelCellEditing();
+					}
+				}
+			});
+	}
+
+	//Implement the one CellEditor method that AbstractCellEditor doesn't.
+	public Object getCellEditorValue() {
+		return getIcon();
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+		return this;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	public void cancelCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+			CellEditorListener l = (CellEditorListener) listeners.get(i);
+			ChangeEvent evt = new ChangeEvent(this);
+			l.editingCanceled(evt);
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public boolean stopCellEditing() {
+//		for (int i = 0; i < listeners.size(); i++) {
+//			CellEditorListener l = (CellEditorListener) listeners.get(i);
+//			ChangeEvent evt = new ChangeEvent(this);
+//			l.editingStopped(evt);
+//		}
+
+		return true;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param anEvent DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public boolean isCellEditable(EventObject anEvent) {
+		return true;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param anEvent DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public boolean shouldSelectCell(EventObject anEvent) {
+		return true;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param l DOCUMENT ME!
+	 */
+	public void addCellEditorListener(CellEditorListener l) {
+		listeners.add(l);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param l DOCUMENT ME!
+	 */
+	public void removeCellEditorListener(CellEditorListener l) {
+		listeners.remove(l);
+	}
+
+	public ImageIcon getSel() {
+		return sel;
+	}
+
+	public ImageIcon getNotSel() {
+		return notSel;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/edition/gui/IconOptionCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/TableLayers.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/TableLayers.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/TableLayers.java	(revision 42196)
@@ -0,0 +1,510 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.gui.tablelayers;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.gui.TableSymbolCellRenderer;
+import org.gvsig.app.project.documents.view.legend.edition.gui.ValueCellEditor;
+import org.gvsig.editing.fmap.rendering.EditionManagerLegend;
+import org.gvsig.editing.project.documents.view.legend.edition.gui.ActivatedCellEditor;
+import org.gvsig.editing.project.documents.view.legend.edition.gui.BlockedCellEditor;
+import org.gvsig.editing.project.documents.view.legend.edition.gui.CellIconOptionRenderer;
+import org.gvsig.editing.project.documents.view.legend.edition.gui.DisabledCellEditor;
+import org.gvsig.editing.project.documents.view.legend.edition.gui.FilledCellEditor;
+import org.gvsig.editing.project.documents.view.legend.edition.gui.PresentCellEditor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class TableLayers extends JPanel {
+    private ImageIcon selected = PluginServices.getIconTheme().get("images-selected-icon");
+    private ImageIcon notselected = PluginServices.getIconTheme().get("images-notselected-icon");
+    private ImageIcon blocked = PluginServices.getIconTheme().get("images-blocked-icon");
+    private ImageIcon unblocked = PluginServices.getIconTheme().get("images-unblocked-icon");
+    private ImageIcon active = PluginServices.getIconTheme().get("images-active-icon");
+    private ImageIcon defuse = PluginServices.getIconTheme().get("images-defuse-icon");
+    private ImageIcon disable = PluginServices.getIconTheme().get("images-disabled-icon");
+    private ImageIcon notdisable =PluginServices.getIconTheme().get("images-notdisabled-icon");
+    private ImageIcon fill = PluginServices.getIconTheme().get("images-fill-icon");
+    private ImageIcon notfill = PluginServices.getIconTheme().get("images-notfill-icon");
+    private boolean DEBUG = false;
+    private FeatureStore store;
+    private EditionManagerLegend eml;
+    private JTable table;
+	private ArrayList statusListeners=new ArrayList();
+
+    public TableLayers(FeatureStore store, IVectorLegend legend2) {
+        super(new GridLayout(1, 0));
+        this.store = store;
+        this.eml = new EditionManagerLegend(legend2);
+
+        table = new JTable(new MyTableModel());
+        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
+        table.setShowHorizontalLines(false);
+
+        //Create the scroll pane and add the table to it.
+        JScrollPane scrollPane = new JScrollPane(table);
+
+        //Set up column sizes.
+        initColumnSizes(table);
+
+        setUpStatusColumn(table, table.getColumnModel().getColumn(0));
+        setUpValueColumn(table, table.getColumnModel().getColumn(1));
+        setUpActivateColumn(table, table.getColumnModel().getColumn(2));
+        setUpDisableColumn(table, table.getColumnModel().getColumn(3));
+        setUpBlockColumn(table, table.getColumnModel().getColumn(4));
+        setUpFillColumn(table, table.getColumnModel().getColumn(5));
+        setUpSymbolColumn(table, table.getColumnModel().getColumn(6));
+
+        //Add the scroll pane to this panel.
+        add(scrollPane);
+    }
+
+    /*
+     * This method picks good column sizes.
+     * If all column heads are wider than the column's cells'
+     * contents, then you can just use column.sizeWidthToFit().
+     */
+    private void initColumnSizes(JTable table) {
+        MyTableModel model = (MyTableModel) table.getModel();
+        TableColumn column = null;
+        Component comp = null;
+        int headerWidth = 0;
+        int cellWidth = 0;
+        Object[] longValues = model.longValues;
+        TableCellRenderer headerRenderer = table.getTableHeader()
+                                                .getDefaultRenderer();
+
+        for (int i = 0; i < 7; i++) {
+            column = table.getColumnModel().getColumn(i);
+
+            comp = headerRenderer.getTableCellRendererComponent(null,
+                    column.getHeaderValue(), false, false, 0, 0);
+            headerWidth = comp.getPreferredSize().width;
+
+            comp = table.getDefaultRenderer(model.getColumnClass(i))
+                        .getTableCellRendererComponent(table, longValues[i],
+                    false, false, 0, i);
+            cellWidth = comp.getPreferredSize().width;
+
+            if (DEBUG) {
+                System.out.println("Initializing width of column " + i + ". " +
+                    "headerWidth = " + headerWidth + "; cellWidth = " +
+                    cellWidth);
+            }
+
+            ///column.setPreferredWidth(Math.max(headerWidth, cellWidth));
+            column.setPreferredWidth((headerWidth + cellWidth) / 2);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     */
+    public void setUpSymbolColumn(JTable table, TableColumn column) {
+        ///SymbolCellEditor symboleditor = new SymbolCellEditor();
+        ///column.setCellEditor(symboleditor);
+
+        TableSymbolCellRenderer renderer = new TableSymbolCellRenderer(true);
+        column.setCellRenderer(renderer);
+    }
+    public void setUpValueColumn(JTable table, TableColumn column) {
+        ValueCellEditor valueEditor = new ValueCellEditor();
+        column.setCellEditor(valueEditor);
+    }
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     */
+    public void setUpStatusColumn(JTable table, TableColumn column) {
+
+        PresentCellEditor presenteditor = new PresentCellEditor(eml,table,selected,
+                notselected);
+        presenteditor.addMouseListener(new MouseListener(){
+
+			public void mouseClicked(MouseEvent e) {
+				if (e.getClickCount()==2){
+					for (int i=0;i<statusListeners.size();i++) {
+						((StatusListener)statusListeners.get(i)).click();
+					}
+				}
+			}
+
+			public void mouseEntered(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseReleased(MouseEvent e) {
+			}
+
+		});
+        column.setCellEditor(presenteditor);
+
+        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
+        column.setCellRenderer(renderer);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     */
+    public void setUpActivateColumn(JTable table, TableColumn column) {
+        ActivatedCellEditor activatededitor = new ActivatedCellEditor(eml,table,active,
+                defuse);
+        column.setCellEditor(activatededitor);
+
+        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
+        column.setCellRenderer(renderer);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     */
+    public void setUpDisableColumn(JTable table, TableColumn column) {
+        DisabledCellEditor disablededitor = new DisabledCellEditor(eml,table,notdisable,
+                disable);
+        column.setCellEditor(disablededitor);
+
+        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
+        column.setCellRenderer(renderer);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     */
+    public void setUpBlockColumn(JTable table, TableColumn column) {
+        BlockedCellEditor blockeditor = new BlockedCellEditor(eml,table,blocked,
+                unblocked);
+        column.setCellEditor(blockeditor);
+
+        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
+        column.setCellRenderer(renderer);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     */
+    public void setUpFillColumn(JTable table, TableColumn column) {
+        FilledCellEditor fillededitor = new FilledCellEditor(eml,table,fill,
+                notfill);
+        column.setCellEditor(fillededitor);
+
+        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
+        column.setCellRenderer(renderer);
+    }
+
+    /**
+     * Create the GUI and show it.  For thread safety, this method should be
+     * invoked from the event-dispatching thread.
+     */
+    private static void createAndShowGUI() {
+        //Create and set up the window.
+        JFrame frame = new JFrame("TableRenderDemo");
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        //Create and set up the content pane.
+        TableLayers newContentPane = new TableLayers(null, null);
+        newContentPane.setOpaque(true); //content panes must be opaque
+        newContentPane.DEBUG = true;
+        frame.setContentPane(newContentPane);
+
+        //Display the window.
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param args DOCUMENT ME!
+     */
+    public static void main(String[] args) {
+        //Schedule a job for the event-dispatching thread:
+        //creating and showing this application's GUI.
+        javax.swing.SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    createAndShowGUI();
+                }
+            });
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param source DOCUMENT ME!
+     */
+    public void setStore(FeatureStore store) {
+        this.store = store;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param legend DOCUMENT ME!
+     */
+    public void setLegend(IVectorLegend legend) {
+        this.eml = new EditionManagerLegend(legend);
+    }
+
+    class MyTableModel extends AbstractTableModel {
+        private String[] columnNames = {
+                PluginServices.getText(this, "estado"),
+                PluginServices.getText(this, "nombre"),
+                PluginServices.getText(this, "activar"),
+                PluginServices.getText(this, "inutilizar"),
+                PluginServices.getText(this, "bloquear"),
+                PluginServices.getText(this, "relleno"),
+                PluginServices.getText(this, "simbolo")
+            };
+
+        //        private Object[][] data = {
+        //            {new Boolean(true), "Nombre1",new Boolean(true) ,new Boolean(false),new Boolean(false),
+        //            	"s�mbolo"},
+        //            	{new Boolean(false), "Nombre2",new Boolean(true),new Boolean(false),new Boolean(false),
+        //            	"s�mbolo"},
+        //            	{new Boolean(false), "Nombre3",new Boolean(true),new Boolean(false),new Boolean(false),
+        //            	"s�mbolo"},
+        //            	{new Boolean(false), "Nombre4",new Boolean(true),new Boolean(false),new Boolean(false),
+        //            	"s�mbolo"},
+        //            	{new Boolean(false), "Nombre5",new Boolean(true),new Boolean(false),new Boolean(false),
+        //            	"s�mbolo"}
+        //        };
+        public final Object[] longValues = {
+                new ImageIcon(), "Nombre1", new ImageIcon(), new ImageIcon(),
+                new ImageIcon(), new ImageIcon(),
+						MapContextLocator.getSymbolManager().createSymbol(
+						TYPES.AGGREGATE)
+            };
+
+        public int getColumnCount() {
+            return columnNames.length;
+        }
+
+        public int getRowCount() {
+            return eml.getRowCount();
+        }
+
+        public String getColumnName(int col) {
+            return columnNames[col];
+        }
+
+        public Object getValueAt(int row, int col) {
+            switch (col) {
+            case 0:
+
+                if (eml.isPresent(row)) {
+                    return selected;
+                }
+
+                return notselected;
+
+            case 1:
+                return eml.getValue(row);
+
+            case 2:
+
+                if (eml.isActived(row)) {
+                    return active;
+                }
+
+                return defuse;
+
+            case 3:
+
+                if (eml.isDisable(row)) {
+                    return notdisable;
+                }
+
+                return disable;
+
+            case 4:
+
+                if (eml.isBlocked(row)) {
+                    return blocked;
+                }
+
+                return unblocked;
+
+            case 5:
+
+                if (eml.isFilled(row)) {
+                    return fill;
+                }
+
+                return notfill;
+
+            case 6:
+            	return eml.getSymbol(row);
+
+            default:
+                return null;
+            }
+        }
+
+        /*
+         * JTable uses this method to determine the default renderer/
+         * editor for each cell.  If we didn't implement this method,
+         * then the last column would contain text ("true"/"false"),
+         * rather than a check box.
+         */
+        public Class getColumnClass(int c) {
+            return getValueAt(0, c).getClass();
+        }
+
+        /*
+         * Don't need to implement this method unless your table's
+         * editable.
+         */
+        public boolean isCellEditable(int row, int col) {
+        	return true;
+        }
+
+        /*
+         * Don't need to implement this method unless your table's
+         * data can change.
+         */
+        public void setValueAt(Object value, int row, int col) {
+//            if (DEBUG) {
+//                System.out.println("Setting value at " + row + "," + col +
+//                    " to " + value + " (an instance of " + value.getClass() +
+//                    ")");
+//            }
+//
+//            ///data[row][col] = value;
+//            ////////////////
+//            switch (col) {
+//            case 0:
+//            	if (value.equals(selected)) {
+//                    eml.setPresent(row,true);
+//                }else {
+//                	eml.setPresent(row,false);
+//                }
+//            case 1:
+//                eml.setValue(row,value);
+//            case 2:
+//            	if (value.equals(active)) {
+//                    eml.setActived(row,true);
+//                }else {
+//                	eml.setActived(row,false);
+//                }
+//            case 3:
+//            	if (value.equals(disable)) {
+//                    eml.setDisable(row,true);
+//                }else {
+//                	eml.setDisable(row,false);
+//                }
+//            case 4:
+//            	if (value.equals(blocked)) {
+//                    eml.setBlocked(row,true);
+//                }else {
+//                	eml.setBlocked(row,false);
+//                }
+//            case 5:
+//            	if (value.equals(fill)) {
+//                    eml.setFilled(row,true);
+//                }else {
+//                	eml.setFilled(row,false);
+//                }
+//            case 6:
+//               eml.setSymbol(row,value);
+//            }
+//            /////////////
+//            fireTableCellUpdated(row, col);
+//
+//            if (DEBUG) {
+//                System.out.println("New value of data:");
+//                printDebugData();
+//            }
+        }
+
+        private void printDebugData() {
+            int numRows = getRowCount();
+            int numCols = getColumnCount();
+
+            for (int i = 0; i < numRows; i++) {
+                System.out.print("    row " + i + ":");
+
+                for (int j = 0; j < numCols; j++) {
+                    /// System.out.print("  " + data[i][j]);
+                }
+
+                System.out.println();
+            }
+
+            System.out.println("--------------------------");
+        }
+    }
+
+	public String getPresentSubLayer() {
+		return eml.getPresentSubLayer();
+	}
+	public void addStatusListener(StatusListener listener) {
+		statusListeners.add(listener);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/TableLayers.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/StatusListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/StatusListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/StatusListener.java	(revision 42196)
@@ -0,0 +1,30 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.legend.gui.tablelayers;
+
+public interface StatusListener {
+
+	public void click();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/legend/gui/tablelayers/StatusListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StopEditingTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StopEditingTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StopEditingTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.toc.actions;
+
+import org.gvsig.app.project.documents.view.toc.AbstractActionInfoAdapterToTocContextMenuAction;
+
+public class StopEditingTocMenuEntry extends AbstractActionInfoAdapterToTocContextMenuAction {
+	
+	public StopEditingTocMenuEntry() {
+		super("layer-stop-editing","edition",1,2);
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StopEditingTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StartEditingTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StartEditingTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StartEditingTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.toc.actions;
+
+import org.gvsig.app.project.documents.view.toc.AbstractActionInfoAdapterToTocContextMenuAction;
+
+
+public class StartEditingTocMenuEntry extends AbstractActionInfoAdapterToTocContextMenuAction {
+	
+	public StartEditingTocMenuEntry() {
+		super("layer-start-editing","edition",1,1);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/actions/StartEditingTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/MenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/MenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/MenuEntry.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing.project.documents.view.toc;
+
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.editing.project.documents.view.toc.actions.StartEditingTocMenuEntry;
+import org.gvsig.editing.project.documents.view.toc.actions.StopEditingTocMenuEntry;
+
+public class MenuEntry {
+
+	public static void register() {
+    	ProjectManager projectManager = ApplicationLocator.getProjectManager();
+    	ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+    	viewManager.addTOCContextAction("StartEditing", new StartEditingTocMenuEntry());
+    	viewManager.addTOCContextAction("StopEditing", new StopEditingTocMenuEntry());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/project/documents/view/toc/MenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ComplexSelectionGeometryExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ComplexSelectionGeometryExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ComplexSelectionGeometryExtension.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.editing.gui.cad.tools.ComplexSelectionCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+
+/**
+ * Extensi�n que gestiona la herramienta de seleccionar.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ComplexSelectionGeometryExtension extends Extension {
+
+	private MapControl mapControl;
+	private  ComplexSelectionCADTool selection;
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		selection=new ComplexSelectionCADTool();
+		CADExtension.addCADTool("_complex_selection", selection);
+
+		registerIcons();
+	}
+
+	private void registerIcons(){
+		IconThemeHelper.registerIcon("action", "selection-complex", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		CADExtension.initFocus();
+		if (s.equals("selection-complex")) {
+        	CADExtension.setCADTool("_complex_selection",true);
+        }
+		CADExtension.getEditionManager().setMapControl(mapControl);
+		CADExtension.getCADToolAdapter().configureMenu();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+			return false;
+		FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+		try {
+			return selection.isApplicable(lv.getShapeType());
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE){
+			return true;
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/ComplexSelectionGeometryExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionManager.java	(revision 42196)
@@ -0,0 +1,793 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.layers.FactoryLayerEdited;
+import org.gvsig.editing.layers.ILayerEdited;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.exceptions.CancelEditingLayerException;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerListener;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class EditionManager implements LayerListener, LayerCollectionListener, IEditionManager {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(EditionManager.class);
+
+    final private List<ILayerEdited> editedLayers = new ArrayList<ILayerEdited>();
+    final private GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    final private MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+    private MapControl mapCtrl = null;
+    private ILayerEdited ile = null;
+
+    public ILayerEdited getLayerEdited(FLayer lyr) {
+        ILayerEdited aux = null;
+        for ( int i = 0; i < editedLayers.size(); i++ ) {
+            aux = editedLayers.get(i);
+            if ( aux.getLayer() == lyr ) {
+                return aux;
+            }
+        }
+        return null;
+    }
+
+    public void editLayer(FLyrVect lv, DefaultViewPanel vista)
+            throws DataException {
+
+        EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+        EditingNotification notification = editingNotificationManager.notifyObservers(
+                this,
+                EditingNotification.BEFORE_ENTER_EDITING_STORE,
+                vista == null ? null : vista.getDocument(),
+                lv);
+
+        if ( notification.isCanceled() ) {
+            logger.info("Edit layer '" + lv.getName() + "' canceled by somme observer.");
+            throw new CancelException("Edit layer '" + lv.getName() + "' canceled.");
+        }
+
+        CADExtension.initFocus();
+        vista.showConsole();
+        MapControl mapControl = vista.getMapControl();
+        this.setMapControl(mapControl);
+
+        lv.addLayerListener(this);
+
+        // This line also enables the spatial cache for snapping:
+        lv.getFeatureStore().edit();
+        lv.getFeatureStore().addObserver(vista);
+
+        ApplicationLocator.getManager().refreshMenusAndToolBars();
+
+        lv.getFeatureStore().addObserver(mapControl);
+        StartEditing.startCommandsApplicable(vista, lv);
+
+        // vista.repaintMap();
+        // ----------------------------
+        // this forces a true repaint:
+        lv.drawValueChanged(LayerEvent.createDrawValuesChangedEvent(lv, ""));
+
+        editingNotificationManager.notifyObservers(
+                this,
+                EditingNotification.AFTER_ENTER_EDITING_STORE,
+                vista == null ? null : vista.getDocument(),
+                lv);
+    }
+
+    public void visibilityChanged(LayerEvent e) {
+    }
+
+    public void activationChanged(LayerEvent e) {
+        if ( e.getSource().isActive() ) {
+            ile = getLayerEdited(e.getSource());
+        }
+        if ( ile == null || ile.getLayer().equals(e.getSource()) ) {
+
+            if ( ile != null && !ile.getLayer().isActive() ) {
+                VectorialLayerEdited lastVLE = (VectorialLayerEdited) ile;
+                lastVLE.activationLost(e);
+            }
+            if ( e.getSource() instanceof FLyrVect ) {
+                VectorialLayerEdited vle = null;
+                vle = (VectorialLayerEdited) getLayerEdited(e.getSource());
+                ile = vle;
+                if ( getMapControl() != null && vle != null
+                        && vle.getLayer().isActive() ) {
+                    getMapControl().setTool("cadtooladapter");
+                    vle.activationGained(e);
+                    return;
+                }
+            }
+            if ( getMapControl() != null ) {
+                getMapControl().setTool("zoomIn");
+                PluginServices.getMainFrame().setSelectedTool("ZOOM_IN");
+            }
+        }
+    }
+
+    public void nameChanged(LayerEvent e) {
+    }
+
+    public void editionChanged(LayerEvent e) {
+        ILayerEdited lyrEdit = getLayerEdited(e.getSource());
+
+        // Si no est� en la lista, comprobamos que est� en edici�n
+        // y lo a�adimos
+        if ( (lyrEdit == null) && e.getSource().isEditing() ) {
+            lyrEdit
+                    = FactoryLayerEdited.createLayerEdited(e.getSource(), mapCtrl);
+            editedLayers.add(lyrEdit);
+            if ( getMapControl() != null ) {
+                getMapControl().setTool("cadtooladapter");
+                CADExtension.setCADTool("_selection", true);
+            }
+            PluginServices.getMainFrame().setSelectedTool("_selection");
+            // idActiveLayer = editedLayers.size() - 1;
+            ile = getLayerEdited(e.getSource());
+            logger.debug("NUEVA CAPA EN EDICION: {}", lyrEdit.getLayer().getName());
+
+            // Ponemos el resto de temas desactivados
+            if ( mapCtrl != null ) {
+                mapCtrl.getMapContext().getLayers().setActive(false);
+            }
+            // y activamos el nuevo.
+            e.getSource().setActive(true);
+
+            if ( e.getSource() instanceof FLyrVect ) {
+                FLyrVect fLyrVect = (FLyrVect) e.getSource();
+                ((VectorialLayerEdited) lyrEdit)
+                        .setEditionChangeManager(new EditionChangeManager(fLyrVect));
+            }
+        } else {
+            for ( int i = 0; i < editedLayers.size(); i++ ) {
+                VectorialLayerEdited vle
+                        = (VectorialLayerEdited) editedLayers.get(i);
+                if ( vle.equals(lyrEdit) ) {
+                    editedLayers.remove(i);
+                    ile = null;
+                    return;
+                }
+            }
+        }
+
+    }
+
+    public ILayerEdited getActiveLayerEdited() {
+        return ile;
+    }
+
+
+    public MapControl getMapControl() {
+        return mapCtrl;
+    }
+
+    public void setMapControl(MapControl mapCtrl) {
+        if ( mapCtrl != null ) {
+            this.mapCtrl = mapCtrl;
+            mapCtrl.getMapContext().getLayers().addLayerListener(this);
+            mapCtrl.getMapContext().getLayers()
+                    .addLayerCollectionListener(this);
+        }
+    }
+
+    public void layerAdded(LayerCollectionEvent e) {
+        // Nothing to do
+
+    }
+
+    public void layerMoved(LayerPositionEvent e) {
+        // Nothing to do
+    }
+
+    public void layerRemoved(LayerCollectionEvent e) {
+        VectorialLayerEdited vle
+                = (VectorialLayerEdited) getActiveLayerEdited();
+        if ( vle != null && vle.getLayer().isActive() ) {
+            try {
+                vle.clearSelection();
+            } catch (DataException e1) {
+                NotificationManager.addError(e1);
+            }
+            editedLayers.remove(vle);
+            getMapControl().setTool("zoomIn");
+            FLyrVect lv = (FLyrVect) vle.getLayer();
+            if ( e.getAffectedLayer().equals(lv) ) {
+                IWindow window
+                        = PluginServices.getMDIManager().getActiveWindow();
+                if ( window instanceof DefaultViewPanel ) {
+                    DefaultViewPanel view = (DefaultViewPanel) window;
+                    view.hideConsole();
+                    view.validate();
+                    view.repaint();
+                }
+            }
+        }
+        PluginServices.getMainFrame().enableControls();
+    }
+
+    public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+        // Nothing to do
+    }
+
+    public void layerMoving(LayerPositionEvent e) throws CancelationException {
+        // Nothing to do
+    }
+
+    public void layerRemoving(LayerCollectionEvent e)
+            throws CancelationException {
+        // Nothing to do
+    }
+
+    public void activationChanged(LayerCollectionEvent e)
+            throws CancelationException {
+        // Nothing to do
+    }
+
+    public void visibilityChanged(LayerCollectionEvent e)
+            throws CancelationException {
+        // Nothing to do
+    }
+
+    public void drawValueChanged(LayerEvent e) {
+        // Nothing to do
+    }
+
+//    protected boolean validateFeature(EditableFeature feature, FeatureStore featureStore) {
+//        while( true ) {
+//            if( !needAskUser(feature, featureStore) ) {
+//                // La feature se puede validar y no precisa de intervencion del
+//                // usuario. Retornamos true.
+//                return true;
+//            }
+//            // No se habia podido validar la feature, se piden al
+//            // usuario los datos que faltan.
+//            AskRequiredAttributtes ask = new AskRequiredAttributtes();
+//            ask.showDialog(feature, featureStore);
+//            if( ask.userCancel() ) {
+//                // No se habia podido validar la feature, se le han pedido al
+//                // usuario los datos que faltan y este ha pulsado en cancel,
+//                // asi que la feature no se puede validar, y retornamos
+//                // false.
+//                return false;
+//            }
+//        }
+//    }
+//    
+//    private boolean needAskUser(EditableFeature feature, FeatureStore featureStore) {
+//        FeatureType featureType = feature.getType();
+//        FeatureAttributeDescriptor[] attributeDescriptors = featureType.getAttributeDescriptors();
+//
+//        for ( int i = 0; i < attributeDescriptors.length; i++ ) {
+//            FeatureAttributeDescriptor attrDesc = attributeDescriptors[i];
+//            if ( attrDesc.isAutomatic() ) {
+//                break;
+//            }
+//            if ( (attrDesc.isPrimaryKey() || !attrDesc.allowNull())
+//                    && feature.get(attrDesc.getName()) == null ) {
+//                return true;
+//            }
+//        }
+//        return false;
+//    }
+//
+//    private class AskRequiredAttributtes {
+//
+//        private boolean userCancelValue = true;
+//
+//        public boolean userCancel() {            
+//            return this.userCancelValue;
+//        }
+//        
+//        public void showDialog(final EditableFeature feature,
+//                final FeatureStore store) {
+//
+//            if ( !SwingUtilities.isEventDispatchThread() ) {
+//                try {
+//                    SwingUtilities.invokeAndWait(new Runnable() {
+//                        public void run() {
+//                            showDialog(feature, store);
+//                        }
+//                    }
+//                    );
+//                } catch (Exception e1) {
+//                    message("Can't show form to fill need data.",e1);
+//                    this.userCancelValue = true;
+//                    return;
+//                }
+//            }
+//
+//            try {
+//                DynObject data = feature.getAsDynObject();
+//                DynObjectEditor editor;
+//                editor = new DynObjectEditor(data);
+//                editor.editObject(true);
+//                if ( editor.isCanceled() ) {
+//                    this.userCancelValue = true;
+//                    message("User canceled.", null);
+//                } else {
+//                    editor.getData(data);
+//                    this.userCancelValue = false;
+//                }
+//            } catch (Exception ex) {
+//                message("Can't show form to fill need data.",ex);
+//                this.userCancelValue = true;
+//            }
+//        }
+//        
+//        private void message(String msg, Throwable ex) {
+//            msg = msg + "\nSee to application log for more information.";
+//            if( ex==null ) {
+//                logger.warn(msg);
+//            } else {
+//                logger.warn(msg,ex);
+//            }
+//            ApplicationManager application = ApplicationLocator.getManager();
+//            application.message(msg,JOptionPane.WARNING_MESSAGE);
+//        }
+//    }
+
+    private VectorialLayerEdited getVLE() {
+        return (VectorialLayerEdited) getActiveLayerEdited();
+    }
+
+    private void insertSpatialCache(Geometry geom)
+            throws CreateEnvelopeException {
+        VectorialLayerEdited vle = getVLE();
+        SpatialCache spatialCache = ((FLyrVect) vle.getLayer())
+                .getSpatialCache();
+        Envelope r = geom.getEnvelope();
+        if ( geom.getType() == Geometry.TYPES.POINT ) {
+            r = geomManager.createEnvelope(r.getMinimum(0), r.getMinimum(1),
+                    r.getMinimum(0) + 1, r.getMinimum(1) + 1, SUBTYPES.GEOM2D);
+        }
+        spatialCache.insert(r, geom);
+
+    }
+
+    private void updateSpatialCache(Geometry geom) {
+        // TODO: no se actualizaban la cache espacial cuando se modifican las geometrias,
+        // habria que hacerlo.
+        logger.info("TODO: need update spatial cache");
+    }
+
+    private void removeSpatialCache(Geometry geom) {
+        // TODO: no se actualizaban la cache espacial cuando se modifican las geometrias,
+        // habria que hacerlo.
+        logger.info("TODO: need update spatial cache");
+    }
+
+    private void draw(Geometry geometry, Feature feature) {
+        if ( geometry != null ) {
+            getMapControl().getMapControlDrawer()
+                    .draw(geometry, mapControlManager.getGeometrySelectionSymbol());
+        }
+    }
+
+    public Feature insertGeometry(Geometry geometry) {
+        VectorialLayerEdited vle = getVLE();
+        try {
+            FeatureStore featureStore
+                    = ((FLyrVect) vle.getLayer()).getFeatureStore();
+            EditableFeature eFeature = featureStore.createNewFeature(true);
+
+            //Reproject the geometry
+            Geometry insertedGeometry = geometry;
+            if ( getVLE().getLayer().getCoordTrans() != null ) {
+                insertedGeometry = insertedGeometry.cloneGeometry();
+                insertedGeometry.reProject(getVLE().getLayer().getCoordTrans().getInverted());
+            }
+
+            eFeature.setGeometry(featureStore.getDefaultFeatureType()
+                    .getDefaultGeometryAttributeName(), insertedGeometry);
+
+            EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+            EditingNotification notification = editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.BEFORE_INSERT_FEATURE,
+                    null,
+                    vle.getLayer(),
+                    featureStore,
+                    eFeature
+            );
+            if ( notification.isCanceled() ) {
+                return null;
+            }
+            if( !notification.shouldValidateTheFeature() ) {
+                if ( !editingNotificationManager.validateFeature(eFeature) ) {
+                    return null;
+                }
+            }
+
+            featureStore.insert(eFeature);
+            insertSpatialCache(insertedGeometry);
+            draw(insertedGeometry, eFeature);
+
+            editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.AFTER_INSERT_FEATURE,
+                    null,
+                    vle.getLayer(),
+                    featureStore,
+                    eFeature
+            );
+
+            return eFeature;
+        } catch (Exception e) {
+            NotificationManager.addError(e.getMessage(), e);
+            return null;
+        }
+    }
+
+    public Feature insertGeometry(Geometry geometry, Feature feature) {
+        VectorialLayerEdited vle = getVLE();
+
+        try {
+            FeatureStore featureStore
+                    = ((FLyrVect) vle.getLayer()).getFeatureStore();
+            EditableFeature eFeature
+                    = featureStore.createNewFeature(
+                            featureStore.getDefaultFeatureType(), feature);
+            eFeature.setGeometry(featureStore.getDefaultFeatureType()
+                    .getDefaultGeometryAttributeName(), geometry);
+
+            EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+            EditingNotification notification = editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.BEFORE_INSERT_FEATURE,
+                    null,
+                    vle.getLayer(),
+                    featureStore,
+                    eFeature
+            );
+            if ( notification.isCanceled() ) {
+                return null;
+            }
+            if( notification.shouldValidateTheFeature() ) {
+                if ( !editingNotificationManager.validateFeature(eFeature) ) {
+                    return null;
+                }
+            }
+
+            featureStore.insert(eFeature);
+            insertSpatialCache(geometry);
+            draw(geometry, eFeature);
+
+            editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.AFTER_INSERT_FEATURE,
+                    null,
+                    vle.getLayer(),
+                    featureStore,
+                    eFeature
+            );
+
+            return eFeature;
+        } catch (Exception e) {
+            NotificationManager.addError(e.getMessage(), e);
+            return null;
+        }
+    }
+
+    public Feature insertFeature(Feature feature) {
+        VectorialLayerEdited vle = getVLE();
+
+        try {
+
+            FeatureStore featureStore
+                    = ((FLyrVect) vle.getLayer()).getFeatureStore();
+            EditableFeature eFeature
+                    = featureStore.createNewFeature(
+                            featureStore.getDefaultFeatureType(), feature);
+            Geometry geometry = feature.getDefaultGeometry();
+
+            EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+            EditingNotification notification = editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.BEFORE_INSERT_FEATURE,
+                    null,
+                    vle.getLayer(),
+                    featureStore,
+                    eFeature
+            );
+            if ( notification.isCanceled() ) {
+                return null;
+            }
+            if( notification.shouldValidateTheFeature() ) {
+                if ( !editingNotificationManager.validateFeature(eFeature) ) {
+                    return null;
+                }
+            }
+
+            featureStore.insert(eFeature);
+            insertSpatialCache(geometry);
+            draw(geometry, eFeature);
+
+            editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.AFTER_INSERT_FEATURE,
+                    null,
+                    vle.getLayer(),
+                    featureStore,
+                    eFeature
+            );
+
+            return eFeature;
+        } catch (Exception e) {
+            NotificationManager.addError(e.getMessage(), e);
+            return null;
+        }
+    }
+
+    public Feature insertAndSelectGeometry(String toolName, Geometry geometry) {
+        Feature feature = null;
+        try {
+            FeatureStore featureStore = getVLE().getFeatureStore();
+            featureStore.beginComplexNotification();
+            featureStore.beginEditingGroup(toolName);
+            FeatureSelection newSelection
+                    = featureStore.createFeatureSelection();
+            feature = insertGeometry(geometry);
+            if ( feature != null ) {
+                newSelection.select(feature);
+                featureStore.setSelection(newSelection);
+            }
+            featureStore.endEditingGroup();
+            featureStore.endComplexNotification();
+
+        } catch (DataException e) {
+            NotificationManager.showMessageError("insertAndSelectGeoemtry", e);
+        }
+        return feature;
+    }
+
+    public EditableFeature updateGeometry(FeatureStore store, Feature feature, Geometry geometry) {
+        try {
+            EditableFeature eFeature = feature.getEditable();
+            eFeature.setGeometry(feature.getType()
+                    .getDefaultGeometryAttributeName(), geometry);
+            EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+            EditingNotification notification = editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.BEFORE_UPDATE_FEATURE,
+                    null,
+                    getVLE().getLayer(),
+                    store,
+                    eFeature
+            );
+            if ( notification.isCanceled() ) {
+                return null;
+            }
+            if( notification.shouldValidateTheFeature() ) {
+                if ( !editingNotificationManager.validateFeature(eFeature) ) {
+                    return null;
+                }
+            }
+
+            store.update(eFeature);
+            updateSpatialCache(geometry);
+
+            editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.AFTER_UPDATE_FEATURE,
+                    null,
+                    getVLE().getLayer(),
+                    store,
+                    eFeature
+            );
+
+            return eFeature;
+        } catch (Exception e) {
+            NotificationManager.addError(e.getMessage(), e);
+            return null;
+        }
+
+    }
+
+    public EditableFeature updateFeature(FeatureStore store, Feature feature) {
+        try {
+            EditableFeature eFeature = feature.getEditable();
+            EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+            EditingNotification notification = editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.BEFORE_UPDATE_FEATURE,
+                    null,
+                    getVLE().getLayer(),
+                    store,
+                    eFeature
+            );
+            if ( notification.isCanceled() ) {
+                return null;
+            }
+            if( notification.shouldValidateTheFeature() ) {
+                if ( !editingNotificationManager.validateFeature(eFeature) ) {
+                    return null;
+                }
+            }
+
+            store.update(eFeature);
+            updateSpatialCache(feature.getDefaultGeometry());
+            editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.AFTER_UPDATE_FEATURE,
+                    null,
+                    getVLE().getLayer(),
+                    store,
+                    eFeature
+            );
+
+            return eFeature;
+        } catch (Exception e) {
+            NotificationManager.addError(e.getMessage(), e);
+            return null;
+        }
+
+    }
+
+    public void removeFeature(FeatureStore store, Feature feature) {
+        try {
+            EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+            EditingNotification notification = editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.BEFORE_REMOVE_FEATURE,
+                    null,
+                    getVLE().getLayer(),
+                    store,
+                    feature
+            );
+            if ( notification.isCanceled() ) {
+                return;
+            }
+            store.delete(feature);
+            removeSpatialCache(feature.getDefaultGeometry());
+
+            editingNotificationManager.notifyObservers(
+                    this,
+                    EditingNotification.AFTER_REMOVE_FEATURE,
+                    null,
+                    getVLE().getLayer(),
+                    store,
+                    feature
+            );
+        } catch (Exception e) {
+            NotificationManager.addError(e.getMessage(), e);
+        }
+
+    }
+
+    public void stopEditLayer(DefaultViewPanel view, FLyrVect lv, int mode)
+            throws CancelEditingLayerException, ReadException {
+
+        EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+
+        EditingNotification notification = editingNotificationManager.notifyObservers(
+                this,
+                EditingNotification.BEFORE_EXIT_EDITING_STORE,
+                view == null ? null : view.getDocument(),
+                lv);
+        if ( notification.isCanceled() ) {
+            logger.info("Stop edit layer '" + lv.getName() + "' canceled by somme observer.");
+            throw new CancelException("Stop edit layer '" + lv.getName() + "' canceled.");
+        }
+
+        VectorialLayerEdited lyrEd = null;
+        FeatureStore featureStore = null;
+
+        switch (mode) {
+
+        case CANCEL_EDITING:
+            lyrEd = (VectorialLayerEdited) this.getActiveLayerEdited();
+            lv.getFeatureStore().deleteObserver(lyrEd);
+
+            try {
+                featureStore = lv.getFeatureStore();
+
+                featureStore.cancelEditing();
+            } catch (ReadException e) {
+                throw new CancelEditingLayerException(lv.getName(), e);
+            } catch (DataException e) {
+                throw new CancelEditingLayerException(lv.getName(), e);
+            }
+            lv.getFeatureStore().deleteObserver(view);
+            lv.removeLayerListener(this);
+
+            if ( view != null ) {
+                view.getMapControl().getMapContext().removeLayerDrawListener(lyrEd);
+            }
+            break;
+        case ACCEPT_EDITING:
+            featureStore = lv.getFeatureStore();
+            try {
+
+                /*
+                 * This will throw a WriteException
+                 * also if the provider does not accept
+                 * the changes (added/updated/deleted/updated featuretype)  
+                 */
+                featureStore.finishEditing();
+
+            } catch (DataException e) {
+                throw new ReadException(lv.getName(), e);
+            }
+            lyrEd = (VectorialLayerEdited) this.getActiveLayerEdited();
+            featureStore.deleteObserver(lyrEd);
+            featureStore.deleteObserver(view);
+            lv.removeLayerListener(this);
+            if ( view != null ) {
+                view.getMapControl().getMapContext().removeLayerDrawListener(lyrEd);
+            }
+
+            break;
+        case CONTINUE_EDITING:
+            break;
+        }
+
+        editingNotificationManager.notifyObservers(
+                this,
+                EditingNotification.AFTER_EXIT_EDITING_STORE,
+                view == null ? null : view.getDocument(),
+                lv);
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertMultiPointExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertMultiPointExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertMultiPointExtension.java	(revision 42196)
@@ -0,0 +1,102 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.gui.cad.tools.MultiPointCADTool;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+/**
+ * Extensi�n que gestiona la inserci�n de multipuntos en edici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class InsertMultiPointExtension extends Extension {
+   private DefaultViewPanel view;
+   private MapControl mapControl;
+   private MultiPointCADTool multipoint;
+
+   /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        multipoint = new MultiPointCADTool();
+        CADExtension.addCADTool("_multipoint", multipoint);
+
+        registerIcons();
+    }
+
+    private void registerIcons(){
+    	IconThemeHelper.registerIcon("action", "layer-insert-multipoint", this);
+
+    }
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String s) {
+    	CADExtension.initFocus();
+
+        if (s.equals("layer-insert-multipoint")) {
+        	CADExtension.setCADTool("_multipoint",true);
+        	CADExtension.getEditionManager().setMapControl(mapControl);
+        }
+        CADExtension.getCADToolAdapter().configureMenu();
+    }
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+
+      	try {
+			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE){
+				view = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		        mapControl = view.getMapControl();
+		        if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
+					return false;
+		        FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
+				if (multipoint.isApplicable(lv.getShapeType())){
+					return true;
+				}
+			}
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+		return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+    	if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE)
+			return true;
+		return false;
+    }
+	}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/InsertMultiPointExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionUtilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionUtilities.java	(revision 42196)
@@ -0,0 +1,171 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import java.util.ArrayList;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+/**
+ * @author fjp
+ *
+ * Clase con m�todos muy �tiles a la hora de hacer nuevas extensiones, y otras
+ * cosas que puedan ser gen�ricas para este plugin.
+ *
+ */
+public class EditionUtilities {
+
+	public static final int EDITION_STATUS_NO_EDITION = 0;
+	public static final int EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE = 1;
+	public static final int EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE = 2;
+	public static final int EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE = 3;
+	public static final int EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE = 4;
+	public static int getEditionStatus()
+	{
+		int status = EDITION_STATUS_NO_EDITION;
+        org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+        .getActiveWindow();
+        if (f == null)
+        	return status;
+
+        if (f instanceof DefaultViewPanel) {
+        	DefaultViewPanel vista = (DefaultViewPanel) f;
+        	ViewDocument model = vista.getModel();
+        	MapContext mapa = model.getMapContext();
+
+        	FLayers capas = mapa.getLayers();
+
+        	int numActiveVectorial = 0;
+        	int numActiveVectorialEditable = 0;
+
+        	LayersIterator iter = new LayersIterator(capas);
+
+        	FLayer capa;
+        	while (iter.hasNext()) {
+        		capa = iter.nextLayer();
+        		if (capa instanceof FLyrVect &&
+        				capa.isActive() && capa.isAvailable()) {
+        			numActiveVectorial++;
+        			if (capa.isEditing())
+        				numActiveVectorialEditable++;
+        		}
+
+        	}
+
+        	if (numActiveVectorialEditable == 1 && numActiveVectorial == 1)
+        		return EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE;
+        	if (numActiveVectorialEditable > 1 && numActiveVectorial == numActiveVectorialEditable)
+        		return EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE;
+        	if (numActiveVectorial == 1)
+        		return EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE;
+        	if (numActiveVectorial > 1)
+        		return EDITION_STATUS_MULTIPLE_VECTORIAL_LAYER_ACTIVE;
+
+        }
+
+		return status;
+	}
+
+	public static FLayer[] getActiveAndEditedLayers()
+	{
+		int status = EDITION_STATUS_NO_EDITION;
+        org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+        .getActiveWindow();
+        if (f == null)
+        	return null;
+
+        if (f instanceof DefaultViewPanel) {
+        	DefaultViewPanel vista = (DefaultViewPanel) f;
+        	ViewDocument model = vista.getModel();
+        	MapContext mapa = model.getMapContext();
+
+        	ArrayList resul = new ArrayList();
+
+        	FLayers capas = mapa.getLayers();
+
+        	int numActiveVectorial = 0;
+        	int numActiveVectorialEditable = 0;
+
+        	LayersIterator iter = new LayersIterator(capas);
+        	FLayer capa;
+        	while (iter.hasNext()) {
+        		capa = iter.nextLayer();
+        		if (capa instanceof FLyrVect &&
+        				capa.isActive()) {
+        			numActiveVectorial++;
+        			if (capa.isEditing())
+        			{
+        				numActiveVectorialEditable++;
+        				resul.add(capa);
+        			}
+        		}
+
+        	}
+        	if (resul.isEmpty())
+        		return null;
+
+       		return (FLayer[]) resul.toArray(new FLayer[0]);
+
+        }
+
+		return null;
+	}
+
+//	public static ILayerDefinition createLayerDefinition(FLyrVect layer) throws ReadDriverException {
+//		LayerDefinition lyrDef;
+//		if (layer.getSource().getDriver() instanceof IVectorialDatabaseDriver)
+//		{
+//			VectorialEditableAdapter vea = (VectorialEditableAdapter)layer.getSource();
+//			IVectorialDatabaseDriver dbDriver = (IVectorialDatabaseDriver) vea.getDriver();
+//
+//			DBLayerDefinition dbldef=dbDriver.getLyrDef();
+//			dbldef.setFieldsDesc(vea.getFieldsDescription());
+//			return dbldef;
+//		}
+//		lyrDef = new LayerDefinition();
+//		lyrDef.setShapeType(layer.getShapeType());
+//		lyrDef.setProjection(layer.getProjection());
+//		lyrDef.setName(layer.getName());
+//			lyrDef.setFieldsDesc(layer.getRecordset().getFieldsDescription());
+//		return lyrDef;
+//	}
+
+
+	public static String getLastMessage(Throwable ex) {
+        
+        Throwable p = ex;
+        while (p.getCause() != null && p.getCause() != p) {
+            p = p.getCause();
+        }
+        return p.getMessage();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/EditionUtilities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StopEditing.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StopEditing.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StopEditing.java	(revision 42196)
@@ -0,0 +1,676 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.editing;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.IExtensionExecuteWithArgs;
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.andami.plugins.status.UnsavedData;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.view.DefaultViewDocument;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.editing.layers.VectorialLayerEdited;
+import org.gvsig.exportto.app.extension.ExporttoLayerExtension;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+
+/**
+ * @author Francisco Jos�
+ *
+ * Cuando un tema se pone en edici�n, puede que su driver implemente
+ * ISpatialWriter. En ese caso, es capaz de guardarse sobre s� mismo. Si
+ * no lo implementa, esta opci�n estar� deshabilitada y la �nica
+ * posibilidad de guardar este tema ser� "Guardando como..."
+ *
+ */
+public class StopEditing extends Extension implements IExtensionExecuteWithArgs {
+
+    private final static Logger logger = LoggerFactory.getLogger(StopEditing.class);
+
+    private DefaultViewPanel vista;
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    }
+
+    public void execute(String s) {
+        this.execute(s, null);
+    }
+
+    public void execute(String s, Object[] args) {
+        org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices
+                .getMDIManager().getActiveWindow();
+
+        vista = (DefaultViewPanel) f;
+        boolean isStop = false;
+        ViewDocument model = vista.getModel();
+        MapContext mapa = model.getMapContext();
+        FLayers layers = mapa.getLayers();
+        IEditionManager edMan = EditionLocator.getEditionManager();
+
+        if ( s.equals("layer-stop-editing") ) {
+
+            FLayer[] selectedItems = null;
+            // Desde el menu contextual del TOC se le pasan las capas seleccionadas como primer argumento.
+            if ( args != null && args.length > 0 && args[0] instanceof FLayer[] ) {
+                selectedItems = (FLayer[]) args[0];
+            }
+
+            vista.getMapControl().getCanceldraw().setCanceled(true);
+            FLayer[] actives = layers.getActives();
+			// TODO: Comprobar que solo hay una activa, o al menos
+            // que solo hay una en edici�n que est� activa, etc, etc
+            for ( int i = 0; i < actives.length; i++ ) {
+                if ( actives[i] instanceof FLyrVect && actives[i].isEditing() ) {
+                    FLyrVect lv = (FLyrVect) actives[i];
+                    MapControl mapControl = vista.getMapControl();
+
+                    int user_opt = confirmStop(lv, mapControl);
+                    if ( user_opt != IEditionManager.CONTINUE_EDITING ) {
+                        isStop = true;
+                    }
+
+                    try {
+                        edMan.stopEditLayer(vista, lv, user_opt);
+                    } catch (CancelException ex) {
+                        // Do nothing
+                        isStop = false;
+                    } catch (Exception ex) {
+                        logger.warn("Can't stop layer editing.", ex);
+                        /*
+                         * Unable to end editing, inform user
+                         * of the problem. Editing session will continue.
+                         */
+                        showUnableToEndEditingDialog(ex);
+                        isStop = false;
+                    }
+                }
+            }
+
+            if ( isStop ) {
+                CADExtension.clearView();
+                /*
+                 * Make grid not visible and remove snapping to grid
+                 * and disable snappers
+                 */
+                disableGridAndSnappers(vista.getMapControl());
+            }
+        }
+        PluginServices.getMainFrame().enableControls();
+    }
+
+    private void disableGridAndSnappers(MapControl mco) {
+        mco.setGridVisibility(false);
+        mco.setAdjustGrid(false);
+//        Preferences prefs = GridPage.prefs;
+//        prefs.putBoolean("grid.showgrid", false);
+//        prefs.getBoolean("grid.adjustgrid", false);
+        // Snapping to geometries disabled
+        mco.setRefentEnabled(false);
+        /*
+         * Remove all layers to snap to (unless they are being edited).
+         * If we don't do this, geometries will still be added
+         * to the spatial cache of those layers when editing session ends
+         */
+        List removelist = new ArrayList();
+        FLyrVect item = null;
+        Iterator snapiter = mco.getMapContext().getLayersToSnap().iterator();
+        while ( snapiter.hasNext() ) {
+            item = (FLyrVect) snapiter.next();
+            if ( !item.isEditing() ) {
+                /*
+                 * Get list of layers to be removed from the list
+                 */
+                removelist.add(item);
+            }
+        }
+        /*
+         * Remove layers from list
+         */
+        mco.getMapContext().getLayersToSnap().removeAll(removelist);
+
+    }
+
+    private void showUnableToEndEditingDialog(Exception ex) {
+
+        String msg = Messages.getText(
+                "_Unable_to_save_edits_The_cause_is");
+        msg = msg + ":\n\n" + EditionUtilities.getLastMessage(ex);
+        JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                msg,
+                Messages.getText("_Guardar"),
+                JOptionPane.ERROR_MESSAGE);
+
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        FLayer[] lyrs = EditionUtilities.getActiveAndEditedLayers();
+        if ( lyrs == null ) {
+            return false;
+        }
+        FLyrVect lyrVect = (FLyrVect) lyrs[0];
+        if ( lyrVect.isEditing() ) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    /*
+     public boolean stopEditing(FLyrVect layer, MapControl mapControl) {
+     int resp = JOptionPane.CANCEL_OPTION;
+
+     try {
+     if (layer.isWritable()) {
+     Object[] options = {
+     PluginServices.getText(this, "_Guardar"),
+     "       " + PluginServices.getText(this, "_Descartar") + "       ",
+     PluginServices.getText(this, "_Continuar") };
+
+     JPanel explanation_panel = getExplanationPanel(layer.getName());
+
+     resp = JOptionPane
+     .showOptionDialog(
+     (Component) PluginServices.getMainFrame(),
+     explanation_panel,
+     PluginServices.getText(this, "stop_edition"),
+     JOptionPane.YES_NO_CANCEL_OPTION,
+     JOptionPane.QUESTION_MESSAGE, null, options,
+     options[2]);
+
+     if (resp == JOptionPane.YES_OPTION) {
+     // SAVE
+     saveLayer(layer);
+     // layer.setEditing(false);
+     return true;
+     } else if (resp == JOptionPane.NO_OPTION) {
+     // CANCEL EDITING
+     cancelEdition(layer);
+     // layer.setEditing(false);
+     return true;
+     } else if (resp == JOptionPane.CANCEL_OPTION) {
+     // CONTINUE EDITING
+     return false;
+     } else {
+     // This happens when user clicks on [x]
+     // to abruptly close previous JOptionPane dialog
+     // We make it equivalent to CONTINUE EDITING
+     return false;
+     }
+
+     }
+     // ========================================
+     // Layer cannot save changes:
+
+     Object[] options = {
+     PluginServices.getText(this, "export"),
+     PluginServices.getText(this,
+     "finish_editing_without_saving_changes"),
+     PluginServices.getText(this, "continue_editing") };
+
+     resp = JOptionPane
+     .showOptionDialog(
+     (Component) PluginServices.getMainFrame(),
+     PluginServices
+     .getText(
+     this,
+     "no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_que_desea_hacer")
+     + " : " + layer.getName(), PluginServices
+     .getText(this, "stop_edition"),
+     JOptionPane.YES_NO_CANCEL_OPTION,
+     JOptionPane.QUESTION_MESSAGE, null, options,
+     options[2]);
+     if (resp == JOptionPane.NO_OPTION) { // CANCEL EDITING
+     cancelEdition(layer);
+     // layer.setEditing(false);
+     return true;
+     } else if (resp == JOptionPane.YES_OPTION) {
+     int status = exportLayer(layer);
+     if (status == JOptionPane.OK_OPTION) {
+     cancelEdition(layer);
+     // layer.setEditing(false);
+     }
+     }
+
+     } catch (ReadException e) {
+     NotificationManager.addError(e);
+     } catch (CancelEditingLayerException e) {
+     NotificationManager.addError(e);
+     }
+     return false;
+
+     }
+     */
+    public int confirmStop(FLyrVect layer, MapControl mapControl) {
+        int resp = JOptionPane.CANCEL_OPTION;
+
+        try {
+            if ( layer.isWritable() ) {
+                Object[] options = {
+                    PluginServices.getText(this, "_Guardar"),
+                    "       " + PluginServices.getText(this, "_Descartar") + "       ",
+                    PluginServices.getText(this, "_Continuar")};
+
+                String question = Messages.getText("realmente_desea_guardar_la_capa");
+                question = question + " '" + layer.getName() + "'?";
+                String firstLabel = Messages.getText("_Guardar");
+                String firstDesc = Messages.getText("_Save_changes_performed");
+
+                JPanel explanation_panel = getExplanationPanel(
+                        question, firstLabel, firstDesc);
+
+                resp = JOptionPane
+                        .showOptionDialog(
+                                (Component) PluginServices.getMainFrame(),
+                                explanation_panel,
+                                PluginServices.getText(this, "stop_edition"),
+                                JOptionPane.YES_NO_CANCEL_OPTION,
+                                JOptionPane.QUESTION_MESSAGE, null, options,
+                                options[2]);
+
+                if ( resp == JOptionPane.YES_OPTION ) {
+                    return IEditionManager.ACCEPT_EDITING;
+                } else if ( resp == JOptionPane.NO_OPTION ) {
+                    return IEditionManager.CANCEL_EDITING;
+                } else if ( resp == JOptionPane.CANCEL_OPTION ) {
+                    return IEditionManager.CONTINUE_EDITING;
+                } else {
+	                    // This happens when user clicks on [x]
+                    // to abruptly close previous JOptionPane dialog
+                    // We make it equivalent to CONTINUE EDITING
+                    return IEditionManager.CONTINUE_EDITING;
+                }
+
+            }
+	            // ========================================
+            // Layer cannot save changes:
+
+            Object[] options = {
+                PluginServices.getText(this, "export"),
+                "       " + PluginServices.getText(this, "_Descartar") + "       ",
+                PluginServices.getText(this, "_Continuar")};
+
+            String question = Messages.getText(
+                    "no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_que_desea_hacer");
+            String firstLabel = Messages.getText("export");
+            String firstDesc = Messages.getText("_Export_to_another_format");
+
+            JPanel explanation_panel = getExplanationPanel(
+                    question, firstLabel, firstDesc);
+
+            resp = JOptionPane
+                    .showOptionDialog(
+                            (Component) PluginServices.getMainFrame(),
+                            explanation_panel,
+                            PluginServices.getText(this, "stop_edition"),
+                            JOptionPane.YES_NO_CANCEL_OPTION,
+                            JOptionPane.QUESTION_MESSAGE, null, options,
+                            options[2]);
+            if ( resp == JOptionPane.NO_OPTION ) { // CANCEL EDITING
+                return IEditionManager.CANCEL_EDITING;
+            } else if ( resp == JOptionPane.YES_OPTION ) {
+                int status = exportLayer(layer);
+                if ( status == JOptionPane.OK_OPTION ) {
+                    return IEditionManager.CANCEL_EDITING;
+                }
+            }
+
+        } catch (ReadException e) {
+            NotificationManager.addError(e);
+        }
+        return IEditionManager.CONTINUE_EDITING;
+
+    }
+
+    private JPanel getExplanationPanel(
+            String translatedQuestion,
+            String translatedFirstTag,
+            String translatedFirstDescription) {
+
+        JPanel resp = new JPanel(new BorderLayout(10, 10));
+
+        JLabel topLabel = new JLabel(translatedQuestion);
+
+        JPanel mainPanel = new JPanel(new GridBagLayout());
+        GridBagConstraints cc = new GridBagConstraints();
+
+        cc.gridx = 0;
+        cc.gridy = 0;
+        cc.anchor = GridBagConstraints.WEST;
+
+        cc.insets = new Insets(3, 6, 3, 6);
+
+        Font boldf = mainPanel.getFont().deriveFont(Font.BOLD);
+
+        JLabel lbl = new JLabel(translatedFirstTag);
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(translatedFirstDescription), cc);
+
+        cc.gridx = 0;
+        cc.gridy = 1;
+        lbl = new JLabel(Messages.getText("_Descartar"));
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(Messages.getText("_Discard_and_lose_changes")), cc);
+
+        cc.gridx = 0;
+        cc.gridy = 2;
+        lbl = new JLabel(Messages.getText("_Continuar"));
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(Messages.getText("_Do_not_save_yet_Stay_in_editing_mode")), cc);
+
+        resp.add(mainPanel, BorderLayout.CENTER);
+        resp.add(topLabel, BorderLayout.NORTH);
+        return resp;
+    }
+
+
+    /*
+     private void saveLayer(FLyrVect layer) throws ReadException {
+     FeatureStore featureStore = layer.getFeatureStore();
+     try {
+     featureStore.finishEditing();
+     } catch (WriteException e) {
+     throw new ReadException(featureStore.getName(), e);
+     } catch (DataException e) {
+     throw new ReadException(featureStore.getName(), e);
+     }
+     }
+
+     private void cancelEdition(FLyrVect layer)
+     throws CancelEditingLayerException {
+     FeatureStore featureStore = null;
+     try {
+     featureStore = layer.getFeatureStore();
+
+     featureStore.cancelEditing();
+     } catch (ReadException e) {
+     throw new CancelEditingLayerException(layer.getName(), e);
+     } catch (DataException e) {
+     throw new CancelEditingLayerException(layer.getName(), e);
+     }
+     }
+     */
+    private int exportLayer(FLyrVect layer) throws ReadException {
+        ViewDocument model = vista.getModel();
+        MapContext mapContext = model.getMapContext();
+        IProjection projection = mapContext.getProjection();
+
+        ExporttoLayerExtension extension = (ExporttoLayerExtension) PluginsLocator
+                .getManager().getExtension(ExporttoLayerExtension.class);
+        return extension.showExportto(layer, projection, mapContext, WindowManager.MODE.DIALOG);
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        if ( EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE ) {
+            return true;
+        }
+        return false;
+
+    }
+
+    public IExtensionStatus getStatus() {
+        return new StopEditingStatus();
+    }
+
+    /**
+     * Show the dialogs to save the layer without ask if don't like to save.
+     *
+     * @param layer
+     * Layer to save.
+     */
+    public boolean executeSaveLayer(FLyrVect layer) {
+
+        IEditionManager edMan = EditionLocator.getEditionManager(layer);
+
+        VectorialLayerEdited lyrEd = (VectorialLayerEdited) edMan
+                .getLayerEdited(layer);
+        boolean isStop = false;
+        try {
+            lyrEd.clearSelection();
+
+            if ( layer.isWritable() ) {
+
+                try {
+                    edMan.stopEditLayer(null, layer, IEditionManager.ACCEPT_EDITING);
+                    isStop = true;
+                } catch (CancelException ex) {
+                    isStop = false;
+
+                } catch (Exception ex) {
+                    logger.error("While stopping layer editing.", ex);
+                    isStop = false;
+                }
+
+            } else {
+                // Si no existe writer para la capa que tenemos en edici�n
+                int resp = JOptionPane
+                        .showConfirmDialog(
+                                (Component) PluginServices.getMainFrame(),
+                                PluginServices
+                                .getText(
+                                        this,
+                                        "no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar")
+                                + " : " + layer.getName(),
+                                PluginServices
+                                .getText(this, "cancelar_edicion"),
+                                JOptionPane.YES_NO_OPTION);
+                if ( resp == JOptionPane.YES_OPTION ) { // CANCEL EDITING
+
+                    try {
+                        edMan.stopEditLayer(null, layer, IEditionManager.CANCEL_EDITING);
+                        isStop = true;
+                    } catch (CancelException ex) {
+                        isStop = false;
+
+                    } catch (Exception ex) {
+                        isStop = false;
+                        logger.error("While stopping layer editing.", ex);
+                    }
+
+                }
+
+            }
+        } catch (ReadException e1) {
+            NotificationManager.showMessageError(e1.getMessage(), e1);
+        } catch (DataException e) {
+            NotificationManager.showMessageError(e.getMessage(), e);
+        }
+        return isStop;
+    }
+
+    private class UnsavedLayer extends UnsavedData {
+
+        private FLayer layer;
+
+        public UnsavedLayer(IExtension extension) {
+            super(extension);
+        }
+
+        public String getDescription() {
+            return PluginServices.getText(this, "editing_layer_unsaved");
+        }
+
+        public String getResourceName() {
+            return layer.getName();
+        }
+
+        public boolean saveData() {
+            return executeSaveLayer((FLyrVect) layer);
+        }
+
+        public void setLayer(FLayer layer) {
+            this.layer = layer;
+
+        }
+
+        public String getIcon() {
+            return layer.getTocImageIcon();
+        }
+
+    }
+
+    /**
+     * <p>
+     * This class provides the status of extensions. If this extension has some
+     * unsaved editing layer (and save them), and methods to check if the
+     * extension has some associated background tasks.
+     *
+     * @author Vicente Caballero Navarro
+     *
+     */
+    private class StopEditingStatus implements IExtensionStatus {
+
+        /**
+         * This method is used to check if this extension has some unsaved
+         * editing layer.
+         *
+         * @return true if the extension has some unsaved editing layer, false
+         * otherwise.
+         */
+        public boolean hasUnsavedData() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            DefaultViewDocument[] views = project.getDocuments(
+                    ViewManager.TYPENAME).toArray(new DefaultViewDocument[0]);
+            for ( int i = 0; i < views.length; i++ ) {
+                FLayers layers = views[i].getMapContext().getLayers();
+                LayersIterator iter = getEditingLayer(layers);
+                if ( iter.hasNext() ) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        /**
+         * This method is used to check if the extension has some associated
+         * background process which is currently running.
+         *
+         * @return true if the extension has some associated background process,
+         * false otherwise.
+         */
+        public boolean hasRunningProcesses() {
+            return false;
+        }
+
+        /**
+         * <p>
+         * Gets an array of the traceable background tasks associated with this
+         * extension. These tasks may be tracked, canceled, etc.
+         * </p>
+         *
+         * @return An array of the associated background tasks, or null in case
+         * there is no associated background tasks.
+         */
+        public IMonitorableTask[] getRunningProcesses() {
+            return null;
+        }
+
+        /**
+         * <p>
+         * Gets an array of the UnsavedData objects, which contain information
+         * about the unsaved editing layers and allows to save it.
+         * </p>
+         *
+         * @return An array of the associated unsaved editing layers, or null in
+         * case the extension has not unsaved editing layers.
+         */
+        public IUnsavedData[] getUnsavedData() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            DefaultViewDocument[] views = project.getDocuments(
+                    ViewManager.TYPENAME).toArray(new DefaultViewDocument[0]);
+            ArrayList unsavedLayers = new ArrayList();
+            for ( int i = 0; i < views.length; i++ ) {
+                FLayers layers = views[i].getMapContext().getLayers();
+                LayersIterator iter = getEditingLayer(layers);
+                while ( iter.hasNext() ) {
+                    UnsavedLayer ul = new UnsavedLayer(StopEditing.this);
+                    ul.setLayer(iter.nextLayer());
+                    unsavedLayers.add(ul);
+                }
+            }
+            return (IUnsavedData[]) unsavedLayers.toArray(new IUnsavedData[0]);
+        }
+    }
+
+    private LayersIterator getEditingLayer(FLayers layers) {
+        return new LayersIterator(layers) {
+            public boolean evaluate(FLayer layer) {
+                return layer.isEditing();
+            }
+        };
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/editing/StopEditing.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/fmap/geom/util/UtilFunctions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/fmap/geom/util/UtilFunctions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/fmap/geom/util/UtilFunctions.java	(revision 42196)
@@ -0,0 +1,701 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.geom.util;
+
+import java.awt.geom.Arc2D;
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//import com.vividsolutions.jts.algorithm.RobustCGAlgorithms;
+//import com.vividsolutions.jts.geom.Coordinate;
+
+/**
+ * @author FJP
+ * 
+ *         TODO To change the template for this generated type comment go to
+ *         Window - Preferences - Java - Code Generation - Code and Comments
+ * @deprecated to be removed or moved from API to implementation in gvSIG 2.1.0
+ */
+public class UtilFunctions {
+	private static final Logger logger = LoggerFactory.getLogger(GeometryManager.class);
+
+	static public Arc2D createCircle(Point2D p1, Point2D p2, Point2D p3) //, Graphics g)
+    {
+        double xC, yC, w, h;
+
+        // Calculamos 2 secantes, tiramos perpendiculares por sus puntos
+        // medios y obtenemos el centro. Luego calculamos el radio.
+        // Puntos medios de los segmentos.
+        double xm1, ym1, xm2, ym2;
+        xm1 = (p1.getX() + p2.getX())/ 2.0;
+        ym1 = (p1.getY() + p2.getY())/ 2.0;
+        xm2 = (p2.getX() + p3.getX())/ 2.0;
+        ym2 = (p2.getY() + p3.getY())/ 2.0;
+
+        /* g.setColor(Color.GRAY);
+        g.draw3DRect((int)xm1, (int) ym1, 1, 1, true);
+        g.draw3DRect((int)xm2, (int) ym2, 1, 1, true); */
+        // Pendientes de las perpendiculares y constantes
+        double mP1=0, mP2=0, A1, A2;
+        boolean bPerp1 = false;
+        //boolean bPerp2 = false;
+        if (p2.getY() - p1.getY() == 0)
+        {
+            A1 = ym1;
+            bPerp1 = true;
+        }
+        else
+        {
+            mP1 = (p2.getX() - p1.getX()) /(p1.getY() - p2.getY());
+            A1 = ym1 - xm1 * mP1;
+        }
+        if (p2.getY() - p3.getY() == 0)
+        {
+            A2 = ym2;
+            //bPerp2 = true;
+        }
+        else
+        {
+            mP2 = (p3.getX() - p2.getX()) /(p2.getY() - p3.getY());
+            A2 = ym2 - xm2 * mP2;
+        }
+        if (mP2 == mP1)
+        {
+            return null; // Error, 3 puntos alineados. No puede pasar un arco
+        }
+        else
+        {
+            xC = (A2 - A1)/(mP1-mP2);
+            if (!bPerp1) {
+				yC = xC * mP1 + A1;
+			} else {
+				yC = xC * mP2 + A2;
+			}
+        }
+        double Radio = p1.distance(xC, yC);
+        double xR = xC - Radio ;
+        double yR = yC - Radio ;
+        w = 2.0* Radio;
+        h = w;
+        Rectangle2D.Double rBounds = new Rectangle2D.Double(xR,yR, w,h);
+        Arc2D.Double resul = new Arc2D.Double(rBounds, 0.0, 360.0, Arc2D.OPEN);
+		/* g.setColor(Color.RED);
+		((Graphics2D) g).draw(resul);
+		g.setColor(Color.BLUE);
+		((Graphics2D) g).draw(rBounds);
+		g.draw3DRect((int)p1.getX(), (int) p1.getY(), 1, 1, true);
+		g.draw3DRect((int)p2.getX(), (int) p2.getY(), 2, 2, true);
+		g.draw3DRect((int)p3.getX(), (int) p3.getY(), 1, 1, true);
+		g.drawString("1", (int) p1.getX(), (int) p1.getY());
+		g.drawString("2", (int) p2.getX(), (int) p2.getY());
+		g.drawString("3", (int) p3.getX(), (int) p3.getY());
+		g.drawString("C", (int) xC, (int) yC);
+		g.draw3DRect((int)xC, (int) yC, 2, 2, true); */
+
+        return resul;
+    }
+    /**
+	 * Obtiene un par de puntos que definen la recta perpendicular a p1-p2 que
+	 * pasa por el punto perp
+	 *
+	 * @param p1 punto de la recta p1-p2
+	 * @param p2 punto de la recta p1-p2
+	 * @param perp Punto por el que pasa la recta perpendicular, debe ser
+	 * 		  distinto a p2
+	 *
+	 * @return Array con dos puntos que definen la recta resultante
+	 * @deprecated 
+	 *         use the perpendicular operation
+	 */
+	public static Point2D[] getPerpendicular(Point2D p1, Point2D p2,
+		Point2D perp) {
+		if ((p2.getY() - p1.getY()) == 0) {
+			return new Point2D[] {
+				new Point2D.Double(perp.getX(), 0),
+				new Point2D.Double(perp.getX(), 1)
+			};
+		}
+
+		//Pendiente de la recta perpendicular
+		double m = (p1.getX() - p2.getX()) / (p2.getY() - p1.getY());
+
+		//b de la funcion de la recta perpendicular
+		double b = perp.getY() - (m * perp.getX());
+
+		//Obtenemos un par de puntos
+		Point2D[] res = new Point2D[2];
+
+		res[0] = new Point2D.Double(0, (m * 0) + b);
+		res[1] = new Point2D.Double(1000, (m * 1000) + b);
+
+		return res;
+	}
+	public static Point2D[] getParallel(Point2D p1,Point2D p2,double distance) {
+		Point2D[] pParallel=new Point2D[2];
+		pParallel[0]=getPerpendicularPoint(p1,p2,p1,distance);
+		pParallel[1]=getPerpendicularPoint(p1,p2,p2,distance);
+		return pParallel;
+	}
+
+	/**
+	 * Obtiene el punto que se encuentra a una distancia 'dist' de la recta
+	 * p1-p2 y se encuentra en la recta perpendicular que pasa por perpPoint
+	 *
+	 * @param p1 Punto de la recta p1-p2
+	 * @param p2 Punto de la recta p1-p2
+	 * @param perpPoint Punto de la recta perpendicular
+	 * @param dist Distancia del punto que se quiere obtener a la recta p1-p2
+	 *
+	 * @return DOCUMENT ME!
+	 * @deprecated
+	 *         Use the perpendicularPoint operation
+	 */
+	public static Point2D getPerpendicularPoint(Point2D p1, Point2D p2,
+		Point2D perpPoint, double dist) {
+		Point2D[] p = getPerpendicular(p1, p2, perpPoint);
+		Point2D unit = getUnitVector(p[0], p[1]);
+
+		return new Point2D.Double(perpPoint.getX() + (unit.getX() * dist),
+			perpPoint.getY() + (unit.getY() * dist));
+	}
+
+	/**
+	 * Devuelve un vector unitario en forma de punto a partir de dos puntos.
+	 *
+	 * @param p1 punto origen.
+	 * @param p2 punto destino.
+	 *
+	 * @return vector unitario.
+	 * @deprecated
+	 *         use the UnitVector operation
+	 */
+	public static Point2D getUnitVector(Point2D p1, Point2D p2) {
+		Point2D paux = new Point2D.Double(p2.getX() - p1.getX(),
+				p2.getY() - p1.getY());
+		double v = Math.sqrt(Math.pow(paux.getX(), 2d) +
+				Math.pow(paux.getY(), 2d));
+		paux = new Point2D.Double(paux.getX() / v, paux.getY() / v);
+
+		return paux;
+	}
+	/**
+	 * Obtiene el centro del c�rculo que pasa por los tres puntos que se pasan
+	 * como  par�metro
+	 *
+	 * @param p1 primer punto del c�rculo cuyo centro se quiere obtener
+	 * @param p2 segundo punto del c�rculo cuyo centro se quiere obtener
+	 * @param p3 tercer punto del c�rculo cuyo centro se quiere obtener
+	 *
+	 * @return Devuelve null si los puntos est�n alineados o no son 3 puntos
+	 * 		   distintos
+	 */
+	public static Point2D getCenter(Point2D p1, Point2D p2, Point2D p3) {
+		if (p1.equals(p2) || p2.equals(p3) || p1.equals(p3)) {
+			return null;
+		}
+
+		Point2D[] perp1 = getPerpendicular(p1, p2,
+				new Point2D.Double((p1.getX() + p2.getX()) / 2,
+					(p1.getY() + p2.getY()) / 2));
+		Point2D[] perp2 = getPerpendicular(p2, p3,
+				new Point2D.Double((p2.getX() + p3.getX()) / 2,
+					(p2.getY() + p3.getY()) / 2));
+
+		return getIntersection(perp1[0], perp1[1], perp2[0], perp2[1]);
+	}
+
+
+	/**
+	 * Devuelve el punto de la intersecci�n entre las lineas p1-p2 y p3-p4.
+	 *
+	 * @param p1 punto de la recta p1-p2
+	 * @param p2 punto de la recta p1-p2
+	 * @param p3 punto de la recta p3-p4
+	 * @param p4 punto de la recta p3-p4
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * @throws RuntimeException DOCUMENT ME!
+	 */
+	public static Point2D getIntersection(Point2D p1, Point2D p2, Point2D p3,
+		Point2D p4) {
+		double m1 = Double.POSITIVE_INFINITY;
+
+		if ((p2.getX() - p1.getX()) != 0) {
+			m1 = (p2.getY() - p1.getY()) / (p2.getX() - p1.getX());
+		}
+
+		double m2 = Double.POSITIVE_INFINITY;
+
+		if ((p4.getX() - p3.getX()) != 0) {
+			m2 = (p4.getY() - p3.getY()) / (p4.getX() - p3.getX());
+		}
+
+		if ((m1 == Double.POSITIVE_INFINITY) &&
+				(m2 == Double.POSITIVE_INFINITY)) {
+			return null;
+		}
+
+		double b1 = p2.getY() - (m1 * p2.getX());
+
+		double b2 = p4.getY() - (m2 * p4.getX());
+
+		if ((m1 != Double.POSITIVE_INFINITY) &&
+				(m2 != Double.POSITIVE_INFINITY)) {
+			if (m1 == m2) {
+				return null;
+			}
+
+			double x = (b2 - b1) / (m1 - m2);
+
+			return new Point2D.Double(x, (m1 * x) + b1);
+		} else if (m1 == Double.POSITIVE_INFINITY) {
+			double x = p1.getX();
+
+			return new Point2D.Double(x, (m2 * x) + b2);
+		} else if (m2 == Double.POSITIVE_INFINITY) {
+			double x = p3.getX();
+
+			return new Point2D.Double(x, (m1 * x) + b1);
+		}
+
+		//no llega nunca
+		throw new RuntimeException("BUG!");
+	}
+	/**
+	 * Obtiene el �ngulo del vector que se pasa como par�metro con el vector
+	 * horizontal de izquierda a derecha
+	 *
+	 * @param start punto origen del vector
+	 * @param end punto destino del vector
+	 *
+	 * @return angulo en radianes
+	 */
+	public static double getAngle(Point2D start, Point2D end) {
+		double angle = Math.acos((end.getX() - start.getX()) / start.distance(
+					end));
+
+		if (start.getY() > end.getY()) {
+			angle = -angle;
+		}
+
+		if (angle < 0) {
+			angle += (2 * Math.PI);
+		}
+
+		return angle;
+	}
+	/**
+	 * Devuelve la distancia desde angle1 a angle2. Angulo en radianes de
+	 * diferencia entre angle1 y angle2 en sentido antihorario
+	 *
+	 * @param angle1 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 * @param angle2 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 *
+	 * @return distancia entre los �ngulos
+	 */
+	public static double angleDistance(double angle1, double angle2) {
+		if (angle1 < angle2) {
+			return angle2 - angle1;
+		} else {
+			return ((Math.PI * 2) - angle1) + angle2;
+		}
+	}
+	/**
+	 * Devuelve el punto de la recta que viene dada por los puntos p1 y p2 a
+	 * una distancia radio de p1.
+	 *
+	 * @param p1 DOCUMENT ME!
+	 * @param p2 DOCUMENT ME!
+	 * @param radio DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static Point2D getPoint(Point2D p1, Point2D p2, double radio) {
+		Point2D paux = new Point2D.Double(p2.getX() - p1.getX(),
+				p2.getY() - p1.getY());
+		double v = Math.sqrt(Math.pow(paux.getX(), 2d) +
+				Math.pow(paux.getY(), 2d));
+		paux = new Point2D.Double(paux.getX() / v, paux.getY() / v);
+
+		Point2D aux1 = new Point2D.Double(p1.getX() + (radio * paux.getX()),
+				p1.getY() + (radio * paux.getY()));
+
+		return aux1;
+	}
+	/**
+	 * Devuelve la menor distancia desde angle1 a angle2.
+	 *
+	 * @param angle1 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 * @param angle2 angulo en radianes. Debe ser positivo y no dar ninguna
+	 * 		  vuelta a la circunferencia
+	 *
+	 * @return distancia entre los �ngulos
+	 */
+	public static double absoluteAngleDistance(double angle1, double angle2) {
+		double d = Math.abs(angle1 - angle2);
+
+		if (d < Math.PI) {
+			return d;
+		} else {
+			if (angle1 < angle2) {
+				angle2 -= (Math.PI * 2);
+			} else {
+				angle1 -= (Math.PI * 2);
+			}
+
+			return Math.abs(angle1 - angle2);
+		}
+	}
+	/**
+	 * Obtiene un arco a partir de 3 puntos. Devuelve null si no se puede crear
+	 * el arco porque los puntos est�n alineados o los 3 puntos no son
+	 * distintos
+	 *
+	 * @param p1
+	 * @param p2
+	 * @param p3
+	 *
+	 * @return Arco
+	 */
+	public static Arc2D createArc(Point2D p1, Point2D p2, Point2D p3) {
+		Point2D center = getCenter(p1, p2, p3);
+
+		double angle1;
+		double angle2;
+		double extent;
+
+		if (center == null) {
+			if (p1.equals(p3) && !p2.equals(p1)) {
+				//Si los puntos p1 y p3 son los mismos (pero el p2 no),
+				//consideramos que el arco es una circunferencia completa
+				center = new Point2D.Double((p1.getX() + p2.getX()) / 2,
+							(p1.getY() + p2.getY()) / 2);
+				angle1 = getAngle(center, p1);
+				extent = Math.PI*2;
+			} else {
+				//en cualquier otro caso, no podemos crear el arco.
+				return null;
+			}
+		} else {
+                    angle1 = getAngle(center, p1);
+                    angle2 = getAngle(center, p3);
+                    extent = angleDistance(angle1, angle2);
+
+                    try {
+                        GeometryManager manager = GeometryLocator.getGeometryManager();
+                        Curve line = manager.createCurve(Geometry.SUBTYPES.GEOM2D);
+                        line.addVertex(p1.getX(), p1.getY());
+                        line.addVertex(p2.getX(), p2.getY());
+                        line.addVertex(p3.getX(), p3.getY());
+                        line.addVertex(p1.getX(), p1.getY());
+                        if( line.isCCW() ) {
+                            extent = (Math.PI * 2) - extent;
+                        } else {
+                            extent = -extent;
+                        }
+                    } catch (Exception ex) {
+                        logger.warn("Can't determine CCW of the Arc",ex);
+                        extent = -extent;
+                    }
+		}
+		//System.err.println("angle1:" + angle1);
+		//System.err.println("angle2:" + getAngle(center, p2));
+		//System.err.println("angle3:" + angle2);
+		//System.err.println("extent:" + extent);
+		double Radio = p1.distance(center);
+		double xR = center.getX() - Radio;
+		double yR = center.getY() - Radio;
+		double w = 2.0 * Radio;
+		double h = w;
+
+		Rectangle2D.Double rBounds = new Rectangle2D.Double(xR, yR, w, h);
+		Arc2D.Double resul = new Arc2D.Double(rBounds,
+				Math.toDegrees((Math.PI * 2) - angle1), Math.toDegrees(extent),
+				Arc2D.OPEN);
+
+		return resul;
+	}
+
+	/**
+	 * Obtiene un arco a partir del centro, radio, angulo inicial y extension del angulo.
+	 * Devuelve null si no lo puede crear.
+	 *
+	 * @param center
+	 * @param radius
+	 * @param angSt en radianes
+	 * @param angExt en radianes
+	 *
+	 * @return Arco
+	 */
+	public static Arc2D createArc(Point2D center, double radius, double angSt, double angExt) {
+		double xR = center.getX() - radius;
+		double yR = center.getY() - radius;
+		double w = 2.0 * radius;
+		double h = w;
+
+		Rectangle2D.Double rBounds = new Rectangle2D.Double(xR, yR, w, h);
+		Arc2D.Double resul = new Arc2D.Double(rBounds,
+				Math.toDegrees((Math.PI * 2) - angSt), Math.toDegrees(angExt),
+				Arc2D.OPEN);
+
+		return resul;
+	}
+
+	/**
+	 * Obtiene un arco a partir del
+	 *  centro del arco y punto inicio y punto final
+	 *  Suponemos un Arco definicio CCW (CounterClockWise)
+	 * @param center
+	 * @param init
+	 * @param end
+	 *
+	 * @return Arco
+	 */
+	public static Arc2D createArc2points(Point2D center, Point2D init, Point2D end) {
+
+		double angle1 = getAngle(center, init);
+		double angle2 = getAngle(center, end);
+		double extent = angleDistance(angle1, angle2);
+
+		extent = -extent; // CCW
+
+		//System.err.println("angle1:" + angle1);
+		//System.err.println("angle2:" + getAngle(center, p2));
+		//System.err.println("angle3:" + angle2);
+		//System.err.println("extent:" + extent);
+		double Radio = init.distance(center);
+		double xR = center.getX() - Radio;
+		double yR = center.getY() - Radio;
+		double w = 2.0 * Radio;
+		double h = w;
+
+		Rectangle2D.Double rBounds = new Rectangle2D.Double(xR, yR, w, h);
+		Arc2D.Double resul = new Arc2D.Double(rBounds,
+				Math.toDegrees((Math.PI * 2) - angle1), Math.toDegrees(extent),
+				Arc2D.OPEN);
+
+		return resul;
+	}
+
+	/**
+	 * Devuelve el punto a una distancia radio del punto p1 y aplicandole un �ngulo an.
+	 * una distancia radio de p1.
+	 *
+	 * @param p1 DOCUMENT ME!
+	 * @param p2 DOCUMENT ME!
+	 * @param radio DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static Point2D getPoint(Point2D p1, double an, double radio) {
+		double x=(radio*Math.cos(an))+p1.getX();
+		double y=(radio*Math.sin(an))+p1.getY();
+
+		Point2D p=new Point2D.Double(x,y);
+
+		return p;
+	}
+
+	/**
+	 * Obtiene una linea a partir de dos puntos.
+	 * Devuelve null si no lo puede crear.
+	 *
+	 * @param start
+	 * @param end
+	 *
+	 * @return Linea
+	 */
+	public static Line2D createLine(Point2D start, Point2D end) {
+		return new Line2D.Double(start, end);
+
+	}
+
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param antp DOCUMENT ME!
+	 * @param lastp DOCUMENT ME!
+	 * @param interp DOCUMENT ME!
+	 * @param point DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static boolean isLowAngle(Point2D antp, Point2D lastp,
+		Point2D interp, Point2D point) {
+		///double ob=lastp.distance(point);
+		///Point2D[] aux=getPerpendicular(lastp,interp,point);
+		///Point2D intersect=getIntersection(aux[0],aux[1],lastp,interp);
+		///double pb=intersect.distance(point);
+		///double a=Math.asin(pb/ob);
+            
+                boolean isCCW = true;
+                try {
+                    GeometryManager manager = GeometryLocator.getGeometryManager();
+                    Curve line;
+                    line = manager.createCurve(Geometry.SUBTYPES.GEOM2D);
+                    line.addVertex(lastp.getX(), lastp.getY());
+                    line.addVertex(interp.getX(), interp.getY());
+                    line.addVertex(point.getX(), point.getY());
+                    line.addVertex(lastp.getX(), lastp.getY());
+                    isCCW = line.isCCW();
+                } catch (Exception ex) {
+                    logger.warn("Can't determine CCW of angle.",ex);
+                }
+
+		try {
+			double angle1 = getAngle(antp, lastp);
+			// System.out.println("angle1= " + angle1);
+
+			double angle2 = getAngle(lastp, point);
+			// System.out.println("angle2= " + angle2);
+
+			/*if (lastp.getX()<antp.getX()){
+			   System.out.println("angleDiff 2 1= "+angleDistance(angle2,angle1));
+			   System.out.println("angleDiff 1 2= "+angleDistance(angle1,angle2));
+			   if (angleDistance(angle2,angle1)>Math.PI){
+
+			   if (RobustCGAlgorithms.isCCW(coords)) {
+			           System.out.println("izquierda,arriba,true");
+			           return true;
+			   } else{
+			           System.out.println("izquierda,arriba,false");
+			   }
+			   }else {
+			           if (!RobustCGAlgorithms.isCCW(coords)) {
+			                   System.out.println("izquierda,abajo,true");
+			                   return true;
+			           } else{
+			                   System.out.println("izquierda,abajo,false");
+			           }
+			   }
+			   }else if (lastp.getX()>antp.getX()){
+			 */
+			
+			/*
+			System.out.println("angleDifl 2 1= " +
+				angleDistance(angle2, angle1));
+			System.out.println("angleDifl 1 2= " +
+				angleDistance(angle1, angle2));
+			*/
+
+			if (angleDistance(angle2, angle1) > Math.PI) {
+				if (isCCW) {
+					// System.out.println("derecha,arriba,true");
+
+					return true;
+				} else {
+					// System.out.println("derecha,arriba,false");
+				}
+			} else {
+				if (!isCCW) {
+					// System.out.println("derecha,abajo,true");
+
+					return true;
+				} else {
+				    // System.out.println("derecha,abajo,false");
+				}
+			}
+
+			//}
+		} catch (Exception e) {
+			// System.out.println("false");
+
+			return true;
+		}
+
+		return false;
+	}
+
+
+        public static Geometry jtsToGeometry(com.vividsolutions.jts.geom.Geometry jtsGeom) {
+            try {
+                GeometryManager manager = GeometryLocator.getGeometryManager();
+                GeometryOperationContext params = new GeometryOperationContext();
+                params.setAttribute("JTSGeometry", jtsGeom);
+                Geometry geom = (Geometry) manager.invokeOperation("fromJTS", params);
+                return geom;
+            } catch (GeometryOperationNotSupportedException ex) {
+                logger.warn("Operation 'fromJTS' is not registered in the geometry manager.",ex);
+                return null;
+            } catch (GeometryOperationException ex) {
+                return null;
+            }
+        }
+
+        public static com.vividsolutions.jts.geom.Geometry geometryToJTS(Geometry geom) {
+            return geometryToJTS(geom, -1);
+        }
+        
+        public static com.vividsolutions.jts.geom.Geometry geometryToJTS(Geometry geom, int srs) {
+            try {
+                GeometryManager manager = GeometryLocator.getGeometryManager();
+                GeometryOperationContext params = new GeometryOperationContext();
+                params.setAttribute("srs", srs);
+                com.vividsolutions.jts.geom.Geometry jts_geom = (com.vividsolutions.jts.geom.Geometry) manager.invokeOperation(
+                        "toJTS", geom, params
+                );
+                return jts_geom;
+            } catch (GeometryOperationNotSupportedException ex) {
+                logger.warn("Operation 'toJTS' is not registered in the geometry manager.",ex);
+                return null;
+            } catch (GeometryOperationException ex) {
+                return null;
+            }
+        }
+             
+        public static Point[] perpendicular(Geometry geom, Point secondPoint, Point perpendicularPoint ) {
+            try {
+                GeometryManager manager = GeometryLocator.getGeometryManager();
+                GeometryOperationContext params = new GeometryOperationContext();
+                params.setAttribute("secondPoint", secondPoint);
+                params.setAttribute("perpendicularPoint", perpendicularPoint);
+                Point[] result = (Point[]) manager.invokeOperation(
+                        "perpendicular", geom, params
+                );
+                return result;
+            } catch (GeometryOperationNotSupportedException ex) {
+                logger.warn("Operation 'perpendicular' is not registered in the geometry manager.",ex);
+                return null;
+            } catch (GeometryOperationException ex) {
+                return null;
+            }
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/java/org/gvsig/fmap/geom/util/UtilFunctions.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 42196)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.editing.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.editing">
+      <description>Persistence for the edition plugin</description>
+      <fields>
+        <field name="default_editing_handler_symbol" type="object" classOfValue="org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol" mandatory="false">
+          <description>Symbol used to draw a geometry handler</description>
+        </field>
+         <field name="default_editing_axis_references_symbol" type="object" classOfValue="org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol" mandatory="false">
+          <description>Symbol used to draw the edition axis</description>
+        </field>
+         <field name="default_editing_rectangle_selection_symbol" type="object" classOfValue="org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol" mandatory="false">
+          <description>Symbol used in the complex edition tool</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1,221 @@
+#Translations for language [it]
+#Mon Oct 30 09:38:21 CET 2006
+add=Aggiungi
+add_field=Aggiungi campo
+add_vertex=Aggiungi vertice
+ajustar_rejilla=Imposta griglia
+arc=Arco
+arc_=ARCO
+break=
+break_=Break
+cancel=Cancella
+cancelar_edicion=Termina editing
+Layer=Layer
+capas_edition_cache=Marcare i layer da utilizzare per lo snapping
+circle=Cerchio
+circle_=CERCHIO
+circumscribed=
+Clean=
+close_polyline=Polilinea chiusa
+commands_stack=Lista dei comandi
+complex_selection=Selezione complessa
+complex_selection_=SELEZIONE COMPLESSA
+contiene_espacios_en_blanco=Continene spazi bianchi
+copy=Copia
+copy_=COPIA
+cross_circle=Interseca/Contiene il cerchio
+cross_polygon=Interseca/Contiene il poligono
+cut=Taglia
+define_fields=Definisce campi
+define_point=Definisce punto
+del=Cancella
+delete_field=Cancella campo
+deleted_feature=
+densityfication=Planarita'
+distance_x=Distanza X
+distance_y=Distanza Y
+distancia_malla_incorrecta=Spaziatura griglia incorretta
+dxf=dxf
+dxf_files=DXF files
+edit_vertex=Modifica vertice
+edit_vertex_=MODIFICA VERTICE
+Edition=Editing
+Edition_Properties=Proprieta' di modifica
+ellipse=Ellisse
+ellipse_=ELLISSE
+end=Fine
+end_polygon=Fine poligono
+enter_layer_name=Inserire il nome del layer
+enter_path_to_file=Inserire percorso al file
+exploit=Exploit
+exploit_=EXPLOIT
+export_to=Esporta...
+exportando_features=Esportando entita'
+exporting_=Esportando
+extend=Estensione
+extend_=ESTENSIONE
+factor=Fattore
+features_desea_continuar=Entita', si desidera continuare?
+fichero_ya_existe_seguro_desea_guardarlo=Il file esiste gia', sovrascriverlo?
+field=Campo
+file=File
+final_point=Punto finale
+Flatness=Planarita'
+geometry=Geometria
+gml=gml
+gml_files=File GML
+Grid=Griglia
+guardar=Salva
+incorrect_option=Opzione incorretta
+incorrect_point=Punto incorretto
+incorrect_value=Valore incorretto
+insert=Inserire
+insert_basis_point=Inserire punto base
+insert_central_point_or_3p=Inserire punto centrale o [3P]
+insert_central_point_polygon=Inserire punto centrale del poligono
+insert_destination_point=Inserire punto di destinaizone
+insert_distance_another_axis=Inserire distanza da altro asse
+insert_factor_or_reference=Inserire fattore di scala |2| o Riferimento [R]
+insert_first_point=Inserire primo punto
+insert_first_point_corner=Inserire il primo punto d'angolo
+insert_first_point_scale=Inserire origine della linea di scala
+insert_initial_point_axis=Inserire il punto iniziale dell'asse dell'ellisse
+insert_last_point=Inserire ultimo punto
+insert_last_point_axis=Inserire il punto finale dell'asse dell'ellisse
+insert_last_point_reference=Inserire punto finale della linea di riferimento
+insert_last_point_scale=Inserire punto finale della linea di scala
+insert_length_or_point=Inserire lunghezza o punto
+insert_move_first_point=Inserire primo punto da muovere
+insert_move_last_point=Inserire ultimo punto da muovere
+insert_next_point_arc_or_close=Inserire prossimo punto, Arco [A] o Chiudi [C]
+insert_next_point_line_or_close=Inserire prossimo punto, Linea [N] o Chiudi [C]
+insert_next_point_selection_or_end_polygon=Inserire il prossimo punro o termina la selezione del poligono
+insert_number_sides=Inserire il numero dei lati
+insert_opposited_corner=Inserire angolo opposto
+insert_point=Inserire punto
+insert_point_corner_or_square=Inserire il punto dell'angolo opposto o angolo [C]
+insert_point_move=Inserisci il punto per muovere
+insert_point_or_end=Inserisci punto o termina geometria [E]
+insert_point_selection=Inserisci punto di selezione
+insert_point_selection_or_types=Inserire un punto o Cerchio [IC], Rett. esterno[OR], Poligono [IP], Pol.Interno[ CP], Pol.Esterno [OP], Cerchio interno [CC], Cerchio esterno [OC]
+insert_radius=Inserisci raggio
+insert_radius_or_second_point=Inserisci raggio o secondo punto
+insert_reference_point_or_factor=Inserisci origine o Linea di riferimento o Fattore di scala [F]
+insert_rotation_angle=Inserisci angolo di rotazione
+insert_second_point=Inserisci secondo punto
+insert_second_point_angle=Inserisci secondo punto o angolo
+insert_second_point_move=Inserisci secondo punto per muovere
+insert_second_point_selection=Inserisci secondo punto del rettangolo di selezione
+insert_selection_last_point=Inserisci angolo opposto del rettangolo di selezione
+insert_selection_point=Inserire punto di selezione
+insert_third_point=Inserire terzo punto
+insertar_capa=Inserire layer
+insertar_en_la_vista_la_capa_creada=Aggiungere il nuovo layer alla vista attiva?
+inside_circle=All'interno del cerchio
+inside_polygon=All'interno del poligono
+inter_arc=Arco interno
+inter_line=Linea interna
+internal_polygon=Poligono interno
+internal_polygon_=POLIGONO INTERNO
+into_circle=
+into_circle_or_circumscribed=Inscritto [I] o Circoscritto [C] nel cerchio |C|
+intro_tablename=Inserisci il nome della tabella da creare. AVVISO\: Se la tabella esiste, si canceller\u00e0.
+join=Unisci
+join_=UNISCI
+LayerName=Nome Layer
+length=Lunghezza
+length_of_field=
+line=Linea
+line_=LINEA
+line_type=Tipologia di linea
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=Dimenzione minima della linea incorretta 
+modify=Modifica
+mostrar_rejilla=Mostra griglia
+move=Muovi
+move_=MUOVI
+move_handlers=Muovi Handlers
+multi_type=Tipologie multiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipologia Multipunto
+nearest_point=Punto pi\u00f9 prossimo
+new_dxf=Nuovo DXF
+new_field=Nuovo campo
+new_layer=Nuovo Layer
+new_postgis=Nuovo POSTGIS
+new_shp=Nuovo SHP
+next=Successivo
+next_point_or_end=Prossimo punto o termina
+next_previous_add_del_cancel=Punto, prossimo vertice [S], Precedente [A], Aggiungi [I] o Rimuovi [E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=Impossibile continuare
+num_lados_insuficiente=
+out_circle=Fuori dal cerchio
+out_polygon=Fuori dal poligono
+out_rectangle=Fuori dal rettangolo
+parte1=
+parte2=
+pixel_point=
+point=Punto
+point_=PUNTO
+point_type=Tipologia punto
+polygon=Poligono
+polygon_=POLIGONO
+polygon_type=Tipologia poligono
+polyline=Polilinea
+polyline_=POLILINEA
+postgis=PostGIS
+previous=Precedente
+realmente_desea_guardar_la_capa=Si desidera salvare il Layer 
+rectangle=Rettangolo
+rectangle_=RETTANGOLO
+redo=redo
+redo_error=Errore nell'accedere ai drivers per ripetere il comando
+reference=Riferimento
+remove_geometry=Rimuovi geometria
+rotate=Ruota
+rotate_=RUOTA
+scale=Scala
+scale_=SCALA
+se_van_a_guardar_=Saranno salvati
+seleccion_compleja=Selezione complessa
+seleccionar=Seleziona
+select_all=Seleziona tutto
+select_charset_for_writing=
+select_driver=Seleziona driver
+select_from_point=Seleziona da punto
+select_geometry=Seleziona geometria
+select_geometry_to_extend=Seleziona geometria da estendere
+select_geometry_type=Seleziona tipoloigia di geometria
+select_handlers=Seleziona handlers
+select_other_geometry_or_end=Seleziona altra geometria o termina[E].
+Selected=Selezionato
+selection=Selezione
+selection_=SELEZIONE
+Show\ Errors=
+shp=SHP
+shp_files=SHP files
+simple=Semplice
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Specifica la dimensione minima delle linee che comporranno le curve.
+square=Angolo
+start_edition=Inizia Editing
+stop_edition=Termina Editing
+stretch=Allunga
+stretch_=ALLUNGA
+suprimir_objetos_origen=Rimuovere oggetti dalla sorgente? Si[Y] o No[N]
+symmetry=Simmetria
+symmetry_=SIMMETRIA
+terminate=Termina
+this_layer_is_not_self_editable=Questo layer non ha permessi per la scrittura. E' possibile esportare i dati modificato, ma non sullo stesso layer.
+tolerancia_incorrecta=Tolleranza incorretta
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Tipo
+undo=undo
+Unidades=Unita'
+Vista=Vista
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,403 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+add=A\u00f1adir
+add_field=A\u00f1adir campo
+add_vertex=A\u00f1adir v\u00e9rtice
+advanced=Avanzado
+ajustar_rejilla=Ajustar rejilla
+alpha=Alpha
+arc=Arco
+arc_=ARCO
+break=Romper
+break_=Break
+cad.or=o
+calculate_expresion=Calcular expresi\u00f3n
+cancel=Cancelar
+cancelar_edicion=Cancelar edici\u00f3n
+Layer=Capa
+capas_edition_cache=Por favor, marque las capas que va a usar para hacer snapping.
+circle=C\u00edrculo
+circle_=C\u00cdRCULO
+CircleCADTool.3p=3P
+circumscribed=Circunscrito
+change_the_editing_colors=Cambio colores de edici\u00f3n.
+Clean=Limpiar
+clear_expresion=Borrar expresi\u00f3n
+close=Cerrar
+close_polyline=Cerrar polil\u00ednea
+column=Columna
+commands=Comandos
+commands_stack=Pila de comandos
+complex_selection=Selecci\u00f3n compleja
+complex_selection_=SELECCI\u00d3N_COMPLEJA
+ComplexSelectionCADTool.crosscircle=IC
+ComplexSelectionCADTool.crosspolygon=IP
+ComplexSelectionCADTool.end=T
+ComplexSelectionCADTool.introcircle=DC
+ComplexSelectionCADTool.intropolygon=DP
+ComplexSelectionCADTool.outcircle=FC
+ComplexSelectionCADTool.outpolygon=FP
+ComplexSelectionCADTool.outrectangle=FR
+contiene_espacios_en_blanco=Contiene espacios en blanco
+continue?=\u00bfQuiere continuar?
+continue_editing=Continuar en edici\u00f3n.
+copy=Copiar
+copy_=COPIAR
+cross_circle=Intersecta/contiene la circunferencia
+cross_polygon=Intersecta/contiene el pol\u00edgono
+cut=Cortar
+date=Fecha
+define_fields=Define los campos
+define_point=Defina el punto
+del=Eliminar
+del_original_geometries=\u00bfSuprimir objetos de origen?
+delete_field=Borrar campo
+deleted_feature=Feature borrada
+densityfication=Densificaci\u00f3n
+distance_x=Distancia X
+distance_y=Distancia Y
+distancia_malla_incorrecta=Distancia de malla incorrecta
+dxf=dxf
+dxf_files=Ficheros dxf
+edit_vertex=Editar v\u00e9rtice
+edit_vertex_=EDITAR_V\u00c9RTICE
+editing=Edici\u00f3n
+Edition=Edici\u00f3n
+edition_properties=Propiedades de Edici\u00f3n
+Edition_Properties=Propiedades de Edici\u00f3n
+EditVertexCADTool.addvertex=I
+EditVertexCADTool.delvertex=E
+EditVertexCADTool.nextvertex=S
+EditVertexCADTool.previousvertex=A
+ellipse=Elipse
+ellipse_=ELIPSE
+end=Terminar
+end_polygon=Finalizar pol\u00edgono
+enter_layer_name=Introducir nombre de la capa
+enter_path_to_file=Introducir la ruta del fichero
+error_expresion=Error en la expresi\u00f3n
+eval_expresion_will_be_carried_out_right_now_with_current_values_in_table=El c\u00e1lculo de la expresi\u00f3n se realizar\u00e1 en este momento\nsobre los registros existentes en la tabla.
+evaluate=Evaluar
+evaluate_expresion_with_errors=Expresiones evaluadas con errores
+exploit=Explotar
+exploit_=EXPLOTAR
+explorer=Explorar
+expresion=Expresi\u00f3n
+expresions=Expresiones
+expresions_from_file=Expresiones de fichero
+export_to=Exportar a ...
+exportando_features=Exportando funcionalidades
+exporting_=Exportando
+extend=Alargar
+extend_=ALARGAR
+factor=Factor
+features_desea_continuar=features, \u00bfdesea continuar?
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+field=Campo
+file=Archivo
+final_point=Punto final
+finish_editing_without_saving_changes=Finalizar la edici\u00f3n perdiendo los cambios.
+Flatness=Flatness
+general=General
+geometry=Geometr\u00eda
+gml=GML
+gml_files=Ficheros gml
+Grid=Rejilla
+guardar=Guardar
+hay_mas_de_una_geometria_seleccionada=Hay m\u00e1s de una geometr\u00eda seleccionada.
+incorrect_file=Fichero incorrecto
+incorrect_option=Opci\u00f3n incorrecta
+incorrect_point=Punto incorrecto
+incorrect_value=Valor incorrecto
+insert=Insertar
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Insertar punto central o por 3 puntos
+insert_central_point_polygon=Insertar punto central del pol\u00edgono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Insertar distancia al otro eje
+insert_factor=Insertar factor de escala
+insert_factor_or_reference=Precise factor de escala<2> o Referencia[R]
+insert_first_point=Insertar primer punto
+insert_first_point_corner=Insertar primer punto de esquina
+insert_first_point_or_distance=Inserta primer punto o distancia
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Insertar punto inicial de eje de elipse
+insert_last_point=Insertar \u00faltimo punto
+insert_last_point_axis=Insertar punto final de eje de elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Insertar longitud o punto
+insert_more_points_or_finish=Insertar m\u00e1puntos o terminar
+insert_move_first_point=Insertar el primer punto de movimiento
+insert_move_last_point=Insertar el segundo punto de movimiento
+insert_next_point=Insertar siguiente punto
+insert_next_point_selection_or_end_polygon=Insertar siguiente punto o finalizar pol\u00edgono de selecci\u00f3n
+insert_number_sides=Insertar n\u00famero de lados
+insert_opposited_corner=Insertar esquina opuesta
+insert_point=Insertar punto
+insert_point_corner=Insertar punto de esquina opuesta
+insert_point_move=Insertar punto de desplazamiento
+insert_point_selection=Precise punto de selecci\u00f3n
+insert_radius=Precise radio
+insert_radius_or_second_point=Insertar radio o segundo punto
+insert_reference_point=Precise punto origen recta referencia
+insert_rotation_angle=Precise \u00e1ngulo de rotaci\u00f3n
+insert_second_point=Insertar segundo punto
+insert_second_point_angle=Insertar segundo punto o \u00e1ngulo
+insert_second_point_move=Precisar segundo punto del desplazamiento
+insert_second_point_selection=Precise segundo punto del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_last_point=Insertar esquina opuesta del rect\u00e1ngulo de selecci\u00f3n
+insert_selection_point=Insertar punto de selecci\u00f3n
+insert_third_point=Insertar tercer punto
+insertar_capa=Insertar capa
+insertar_en_la_vista_la_capa_creada=\u00bfDesea insertar en la vista la capa creada?
+inside_circle=Dentro de la circunferencia
+inside_polygon=Dentro del pol\u00edgono
+inter_arc=Arco interno
+inter_line=L\u00ednea interna
+internal_polygon=Pol\u00edgono interno
+internal_polygon_=Pol\u00edgono interno
+InternalPolygonCADTool.end=T
+into_circle=Inscrito
+intro_tablename=Introduzca el nombre de la tabla a crear. AVISO\: Si existe la tabla, se borrar\u00e1.
+it_has_established_a_limit_of_rows_will_lose_the_possibility_to_undo_wants_to_continue=Tiene establecido un l\u00edmite de registros en preferencias, perder\u00e1 la posibilidad de deshacer. \u00bfQuiere continuar?
+join=Unir
+join_=UNIR
+JoinCADTool.end=T
+LayerName=Nombre de la capa
+length=Tama\u00f1o
+length_of_field=Longitud de campo
+limit_rows_in_memory=L\u00edmite de registros en memoria
+line=L\u00ednea
+line_=L\u00cdNEA
+line_type=Tipo l\u00ednea
+matrix=Matriz
+matrix_=MATRIZ
+max_length_is=La longitud m\u00e1xima es
+MaxFeaturesEditionCache=M\u00e1ximo n\u00famero de entidades en memoria.
+maximun_name_size=Tama\u00f1o m\u00e1ximo del nombre
+minimum_size_of_line_incorrect=La longitud m\u00ednima de l\u00ednea es incorrecta.
+modify=Modificar
+mostrar_rejilla=Mostrar rejilla
+move=Desplazamiento
+move_=DESPLAZAMIENTO
+move_handlers=Desplazar handlers
+multi_type=Tipo m\u00faltiple
+multipoint=Multipunto
+multipoint_=MULTIPUNTO
+multipoint_type=Tipo multipunto
+MultipointCADTool.end=T
+nearest_point=Punto m\u00e1s cercano
+new_dxf=Nuevo DXF
+new_field=Nuevo campo
+new_layer=Nueva capa
+new_postgis=Nuevo postgis
+new_shp=Nuevo SHP
+next=Siguiente
+next_point=Siguiente punto
+no=No
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=No existe writer para este formato de capa o no tiene permisos de escritura. Los datos no se guardaran. \u00c2\u00bfDesea continuar?
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_que_desea_hacer=No existe writer para este formato de capa o no tiene permisos de escritura.\n\u00bfQu\u00e9 desea hacer?
+no_puede_continuar=No puede continuar.
+num_lados_insuficiente=N\u00famero de lados insuficiente
+numeric=Num\u00e9rico
+options.editing.default_axis_references_color=Color de eje de referencia.
+options.editing.default_handler_color=Color de handler de selecci\u00f3n.
+options.editing.default_rectangle_selection_color=Color geometr\u00eda de selecci\u00f3n.
+options.editing.default_selection_color=Color de selecci\u00f3n.
+out_circle=Fuera de la cincunferencia
+out_polygon=Fuera del pol\u00edgono
+out_rectangle=Fuera del rect\u00e1ngulo
+outline=Borde
+parte1=Parte 1
+parte2=Parte 2
+pixel_point=Punto de pixel
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+polygon=Pol\u00edgono
+PolygonCADTool.into_circle=I
+PolygonCADTool.circumscribed=C
+polygon_=POL\u00cdGONO
+polygon_type=Tipo Pol\u00edgono
+polyline=Polil\u00ednea
+PolylineCADTool.arc=A
+PolylineCADTool.close_polyline=C
+PolylineCADTool.end=T
+PolylineCADTool.line=L
+polyline_=POLIL\u00cdNEA
+postgis=PostGIS
+previous=Anterior
+previous_selection=Selecci\u00f3n previa
+realmente_desea_guardar_la_capa=\u00bfDesea guardar la capa
+rectangle=Rect\u00e1ngulo
+RectangleCADTool.square=C
+rectangle_=RECT\u00c1NGULO
+redo=Rehacer
+redo_error=Error accediendo a los Drivers para rehacer un comando
+reference=Referencia
+remove_geometry=Borrar geometr\u00eda
+rotate=Rotar
+rotate_=ROTAR
+scale=Escalar
+ScaleCADTool.factor=F
+ScaleCADTool.reference=R
+scale_=ESCALAR
+se_van_a_guardar_=Se van a guardar,
+seleccion_compleja=Selecci\u00f3n compleja
+seleccionar=Seleccionar
+select_all=Seleccionar todo
+select_charset_for_writing=Seleccione juego de caracteres para escribir
+select_driver=Seleccione el driver
+select_from_point=Seleccionar a partir de un punto
+select_geometry=Seleccione una geometr\u00eda
+select_geometry_to_extend=Seleccionar geometr\u00eda a extender
+select_geometry_type=Seleccione el tipo de geometr\u00eda
+select_handlers=Seleccionar handlers
+select_other_geometry=Seleccione otra geometr\u00eda
+Selected=Capa seleccionada
+selection=Seleccionar
+selection_=SELECCIONAR
+Show\ Errors=Error
+shp=SHP
+shp_files=Ficheros .shp
+simple=Simple
+size=Tama\u00f1o
+specifies_the_limit_rows_in_memory_when_the_program_eval_the_expresion=Especifica el n\u00famero de registros\n  en memoria cuando se evalue la expresi\u00f3n,\n  reduciendose dr\u00e1sticamente la velocidad\n cuando se limite.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=M\u00ednima distancia tolerada (en unidades del mapa) entre la curva y el linestring que la representa.
+SplineCADTool.close=C
+SplineCADTool.end=T
+square=Cuadrado
+start_edition=Comenzar edici\u00f3n
+stop_edition=Terminar edici\u00f3n
+stretch=Estirar
+stretch_=ESTIRAR
+string=Cadena
+symmetry=Simetr\u00eda
+SymmetryCADTool.no=N
+SymmetryCADTool.yes=S
+symmetry_=SIMETR\u00cdA
+terminate=Terminar
+this_layer_is_not_self_editable=La capa no tiene permiso de escritura. Podr\u00e1 exportar los datos editados, pero no podr\u00e1 guardarlos sobre la misma capa.
+tolerancia_incorrecta=Tolerancia incorrecta
+Topology=Topolog\u00c3\u00ada
+Triangulation=Triangulaci\u00c3\u00b3n
+two_or_more_fields_with_the_same_name=Dos o m\u00e1s campos con el mismo nombre
+type=Tipo
+undo=Deshacer
+Unidades=Unidades\:
+Vista=Vista
+yes=Si
+warning_title=Warning
+will_be_truncated=ser\u00e1 truncado
+without_limit=Sin l\u00edmite
+too_long_name=Nombre demasiado largo
+maximun_name_size=Tama\u00f1o m\u00e1ximo del nombre
+the_field_name_is_required=Se requiere el nombre del campo
+autocomplete-polygon=Autocompletar pol\u00edgono
+split_geometry=Partir geometr\u00edas
+split_geometry_shell=PARTIR_GEOMETR\u00cdAS
+select_geometry_to_split=Selecci\u00f3n de geometr\u00edas  a partir
+SplitGeometryCADTool.end=T
+undoredo=Deshacer/rehacer
+_Unable_to_update_tool_status=No se ha podido actualizar estado de la herramienta
+_Unable_to_draw_geometry_handlers=No se ha podido dibujar manejadores de las geometr\u00edas
+_Unable_to_exploit_polygon=No se ha podido explotar el pol\u00edgono
+_Unable_to_start_edition_in_layer=No se pudo iniciar edici\u00f3n en la capa
+_Cannot_start_edition_in_transformed_layer=No es posible editar una capa transformada
+_Unable_to_draw_help_geometry=No se ha podido dibujar geometr\u00eda de ayuda
+_Drawing_error=Error en el dibujado
+_Split_line_must_start_and_end_outside_bbox=La l\u00ednea de corte debe empezar y terminar fuera del rect\u00e1ngulo que contiene a la geometr\u00eda
+_Invalid_values_in_some_fields_must_be_edited_before_end_editing=Hay valores no v\u00e1lidos en algunos campos. Deben editarse antes de cerrar la edici\u00f3n
+_Show=Mostrar
+_Show_grid=Mostrar la rejilla
+_Hide_grid=Ocultar la rejilla
+_Enable_snapping=Activar snapping
+_Disable_snapping=Desactivar snapping
+_Enable_snap_to_grid=Activar snapping a la rejilla
+_Disable_snap_to_grid=Desactivar snapping a la rejilla
+Edit=Editar
+_Toggle_show_grid=Mostrar-ocultar rejilla
+_Toggle_snapping=Activar-desactivar snapping
+_Toggle_snap_to_grid=Activar-desactivar snapping a la rejilla
+_Guardar=Guardar
+_Save_changes_performed=Guardar los cambios realizados.
+_Descartar=Descartar
+_Discard_and_lose_changes=Descartar y perder los cambios realizados.
+_Continuar=Continuar
+_Do_not_save_yet_Stay_in_editing_mode=No guardar a\u00fan. Continuar en edici\u00f3n.
+_Unable_to_create_arc=No se pudo crear el arco
+_Polygons_will_exploded_in_polygon_only_layer_Decision_question=Se van a explotar pol\u00edgonos en capa de pol\u00edgonos y se puede infringir la restricci\u00f3n de tipos de geometr\u00eda.
+_Allow_lines=Permitir l\u00edneas
+_Lines_will_exist_in_editing_mode_Must_remove_or_cancel=Permitir l\u00edneas durante la edici\u00f3n. Se deben eliminar antes de terminar edici\u00f3n o aparecer\u00e1 un mensaje de error.
+_Keep_as_polygons=Conservar pol\u00edgonos
+_Multi_polygons_separated_Simple_polygons_kept=Los multi-pol\u00edgonos se separar\u00e1n en pol\u00edgonos simples. Los pol\u00edgonos simples se conservar\u00e1n.
+_Copy_geometry=Copiar geometr\u00eda
+_Symmetry_geometry=Geometr\u00eda sim\u00e9trica
+_Rotate_geometry=Rotar geometr\u00eda
+_Scale_geometry=Escalar geometr\u00eda
+_Explode_geometry=Descomponer geometr\u00eda
+_Copy=Copiar
+_Symmetry=Simetr\u00eda
+_Rotate=Rotar
+_Scale=Escalar
+_Explode=Descomponer
+_Move_geometry=Mover geometr\u00eda
+_Move=Mover
+_Insert_point=Insertar punto
+_Point=Punto
+_Insert_multipoint=Insertar multipunto
+_Multipoint=Multipunto
+_Insert_line=Insertar l\u00ednea
+_Insert_arc=Insertar arco
+_Line=L\u00ednea
+_Arc=Arco
+_Insert_polyline=Insertar polil\u00ednea
+_Insert_spline=Insertar curva spline
+_Polyline=Polil\u00ednea
+_Spline=Curva spline
+_Insert_polygon=Insertar pol\u00edgono
+_Insert_rectangle=Insertar rect\u00e1ngulo
+_Insert_circle=Insertar c\u00edrculo
+_Insert_ellipse=Insertar elipse
+_Modify_vertex=Editar v\u00e9rtice
+_Edit_vertex=Editar v\u00e9rtice
+_Ellipse=Elipse
+_Circle=C\u00edrculo
+_Rectangle=Rect\u00e1ngulo
+_Polygon=Pol\u00edgono
+_Modify_join=Uni\u00f3n
+_Join=Uni\u00f3n
+_Modify_internal_polygon=Pol\u00edgono interno
+_Internal_polygon=Pol\u00edgono interno
+_Stretch_geometry=Estirar geometr\u00eda
+_Stretch=Estirar
+_Complex_selection=Selecci\u00f3n compleja
+_Complex=Compleja
+_Simple_selection=Selecci\u00f3n simple
+_Simple=Simple
+_Simple_move_vertex=Simple (mover vertices)
+_Simple_selection_move_vertex=Selecci\u00f3n simple (mover vertices)
+_Matrix=Matriz de geometr\u00edas
+_Insert_autopolygon=Insertar autopol\u00edgono
+_Autopolygon=Autopol\u00edgono
+_Split_geometry=Partir geometr\u00eda
+_Split=Partir
+Insert=Insertar
+Modify=Modificar
+_Unable_to_create_geometry=No se pudo crear la geometr\u00eda
+_Unable_to_save_edits_The_cause_is=No es posible guardar los cambios. La causa es
+_Unable_to_complete_operation_Probably_invalid_polygon=No se pudo realizar la operaci\u00f3n. Quiz\u00e1 se ha digitalizado un pol\u00edgono no v\u00e1lido.
+_Export_to_another_format=Exportar a otro formato
+_Debe_insertar_el_punto_dentro_de_los_limites_del_poligono=Debe insertar el punto dentro de los l\u00edmites del pol\u00edgono
+matriz_rectangular=Matriz rectangular
+matriz_polar=Matrix polar
+disp_rows=Separaci\u00f3n filas
+disp_columns=Separaci\u00f3n columnas
+centro=Centro
+num_elementos=N\u00fam. de elementos
+girar_elementos_a_medida_que_se_copian=Girar elementos a medida que se copian
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 42196)
@@ -0,0 +1,222 @@
+#Translations for language [en]
+#Thu Sep 28 13:19:48 CEST 2006
+add=\u6dfb\u52a0
+add_field=\u6dfb\u52a0\u5b57\u6bb5
+add_vertex=\u6dfb\u52a0\u9876\u70b9
+ajustar_rejilla=\u7f51\u683c\u8bbe\u7f6e
+arc=\u5f13\u5f62
+arc_=\u5f13\u5f62
+break=Break
+break_=Break
+cancel=\u53d6\u6d88
+cancelar_edicion=\u53d6\u6d88\u7f16\u8f91
+Layer=\u56fe\u5c42
+capas_edition_cache=\u8bf7\u70b9\u9009\u5728\u8fd0\u884c snapping \u65f6\u6240\u7528\u7684\u56fe\u5c42\u3002
+circle=\u5706\u5f62
+circle_=\u5706\u5f62
+circumscribed=\u5916\u63a5\u5706
+Clean=\u6e05\u9664
+close_polyline=\u5b8c\u7ed3\u6298\u7ebf
+commands_stack=\u547d\u4ee4\u8868
+complex_selection=\u590d\u9009
+complex_selection_=\u590d\u9009
+contiene_espacios_en_blanco=\u5b83\u542b\u6709\u767d\u7a7a\u95f4
+copy=\u590d\u5236
+copy_=\u590d\u5236
+cross_circle=\u76f8\u4ea4\u6216\u5bb9\u7eb3\u5706\u5f62
+cross_polygon=\u76f8\u4ea4\u6216\u5bb9\u7eb3\u591a\u8fb9\u5f62
+cut=\u526a\u5207
+define_fields=\u5b57\u6bb5\u786e\u5b9a
+define_point=\u6807\u70b9\u786e\u5b9a
+del=\u5220\u9664
+delete_field=\u5220\u9664\u5b57\u6bb5
+deleted_feature=\u7279\u6027\u5df2\u88ab\u5220\u9664
+densityfication=\u5168\u5e73\u9762\u5316
+distance_x=X\u8f74\u8ddd\u79bb
+distance_y=Y\u8f74\u8ddd\u79bb
+distancia_malla_incorrecta=\u7f51\u683c\u8ddd\u79bb\u4e0d\u6b63\u786e
+dxf=DXF
+dxf_files=DXF \u6587\u4ef6
+edit_vertex=\u9876\u70b9\u7f16\u8f91
+edit_vertex_=\u9876\u70b9\u7f16\u8f91
+Edition=\u7f16\u8f91
+edition_properties=\u5c5e\u6027\u7f16\u8f91
+Edition_Properties=\u5c5e\u6027\u7f16\u8f91
+ellipse=\u692d\u5706\u5f62
+ellipse_=\u692d\u5706\u5f62
+end=\u7ed3\u675f
+end_polygon=\u5b8c\u7ed3\u591a\u8fb9\u5f62
+enter_layer_name=\u8f93\u5165\u56fe\u5c42\u540d\u79f0
+enter_path_to_file=\u8f93\u5165\u6587\u4ef6\u8def\u5f84
+exploit=\u5f00\u53d1
+exploit_=\u5f00\u53d1
+export_to=\u8f93\u51fa\u6210 ...
+exportando_features=\u529f\u80fd\u6b63\u5728\u8f93\u51fa\u4e2d
+exporting_=\u8f93\u51fa\u4e2d
+extend=\u5ef6\u957f
+extend_=\u5ef6\u957f
+factor=\u56e0\u5b50
+features_desea_continuar=\u7279\u6027, \u60a8\u8981\u7ee7\u7eed\u5417?
+fichero_ya_existe_seguro_desea_guardarlo=\u6587\u4ef6\u5df2\u5b58\u5728, \u60a8\u8981\u7ee7\u7eed\u5417?
+field=\u5b57\u6bb5
+file=\u6587\u4ef6
+final_point=\u6700\u540e\u4e00\u70b9
+Flatness=\u5168\u5e73\u9762\u5316
+geometry=\u51e0\u4f55\u5f62
+gml=GML
+gml_files=GML \u6587\u4ef6
+Grid=\u7f51\u683c
+guardar=\u5b58\u76d8
+incorrect_option=\u9009\u9879\u9519\u8bef
+incorrect_point=\u6807\u70b9\u9519\u8bef
+incorrect_value=\u6570\u503c\u9519\u8bef
+insert=\u63d2\u5165
+insert_basis_point=\u63d2\u5165\u57fa\u70b9
+insert_central_point_or_3p=\u63d2\u5165\u4e2d\u5fc3\u70b9\u6216\u8005 [3P]
+insert_central_point_polygon=\u63d2\u5165\u591a\u8fb9\u5f62\u7684\u4e2d\u5fc3\u70b9
+insert_destination_point=\u63d2\u5165\u5f52\u5bbf\u70b9
+insert_distance_another_axis=\u63d2\u5165\u4e0e\u5176\u5b83\u8f74\u7684\u8ddd\u79bb
+insert_factor_or_reference=\u63d2\u5165\u6bd4\u4f8b\u56e0\u5b50 |2| \u6216\u8005\u53c2\u8003 [R]
+insert_first_point=\u63d2\u5165\u7b2c\u4e00\u70b9
+insert_first_point_corner=\u63d2\u5165\u8fb9\u89d2\u7684\u7b2c\u4e00\u70b9
+insert_first_point_scale=\u63d2\u5165\u6bd4\u4f8b\u7ebf\u7684\u51fa\u53d1\u70b9
+insert_initial_point_axis=\u63d2\u5165\u692d\u5706\u8f74\u7684\u51fa\u53d1\u70b9
+insert_last_point=\u63d2\u5165\u6700\u540e\u4e00\u70b9
+insert_last_point_axis=\u63d2\u5165\u692d\u5706\u8f74\u7684\u7ec8\u70b9
+insert_last_point_reference=\u63d2\u5165\u53c2\u8003\u7ebf\u7684\u7ec8\u70b9
+insert_last_point_scale=\u63d2\u5165\u6bd4\u4f8b\u7ebf\u7684\u7ec8\u70b9
+insert_length_or_point=\u63d2\u5165\u957f\u5ea6\u6216\u8005\u6807\u70b9
+insert_move_first_point=\u63d2\u5165\u79fb\u52a8\u7684\u7b2c\u4e00\u70b9
+insert_move_last_point=\u63d2\u5165\u79fb\u52a8\u7684\u7b2c\u4e8c\u70b9
+insert_next_point_arc_or_close=\u63d2\u5165\u4e0b\u4e00\u6807\u70b9, \u5f13\u5f62 [A] \u6216\u8005\u5b8c\u6210 [C]
+insert_next_point_line_or_close=\u63d2\u5165\u4e0b\u4e00\u6807\u70b9, \u76f4\u7ebf [N] \u6216\u8005\u5b8c\u6210 [C]
+insert_next_point_selection_or_end_polygon=\u63d2\u5165\u4e0b\u4e00\u6807\u70b9\u6216\u8005\u5b8c\u7ed3\u591a\u8fb9\u5f62\u9009\u62e9
+insert_number_sides=\u63d2\u5165\u8fb9\u6570
+insert_opposited_corner=\u63d2\u5165\u5bf9\u89d2
+insert_point=\u63d2\u5165\u6807\u70b9
+insert_point_corner_or_square=\u63d2\u5165\u5bf9\u89d2\u6807\u70b9\u6216\u8005\u77e9\u5f62 [C]
+insert_point_move=\u63d2\u5165\u79fb\u52a8\u6807\u70b9
+insert_point_or_end=\u63d2\u5165\u6807\u70b9\u6216\u8005\u5b8c\u7ed3\u51e0\u4f55\u5f62 [E]
+insert_point_selection=\u63d2\u5165\u6807\u70b9\u9009\u62e9
+insert_point_selection_or_types=\u63d2\u5165\u6807\u70b9\u6216\u8005\u5706\u5f62 [IC]\uff0c \u77e9\u5f62\u4e4b\u5916 [OR]\uff0c \u591a\u8fb9\u5f62 [IP]\uff0c \u591a\u8fb9\u5f62\u4e4b\u5185 [CP]\uff0c \u591a\u8fb9\u5f62\u4e4b\u5916 [OP]\uff0c \u5708\u5185 [CC]\uff0c \u5708\u5916 [OC]
+insert_radius=\u63d2\u5165\u534a\u5f84
+insert_radius_or_second_point=\u63d2\u5165\u534a\u5f84\u6216\u8005\u7b2c\u4e8c\u70b9
+insert_reference_point_or_factor=\u63d2\u5165\u51fa\u53d1\u70b9\u6216\u53c2\u8003\u7ebf\u6216\u6bd4\u4f8b\u56e0\u5b50 [F]
+insert_rotation_angle=\u8f93\u5165\u65cb\u8f6c\u89d2\u5ea6
+insert_second_point=\u63d2\u5165\u7b2c\u4e8c\u70b9
+insert_second_point_angle=\u63d2\u5165\u7b2c\u4e8c\u70b9\u6216\u8005\u89d2\u5ea6
+insert_second_point_move=\u63d2\u5165\u79fb\u52a8\u7684\u7b2c\u4e8c\u70b9
+insert_second_point_selection=\u8f93\u5165\u77e9\u5f62\u9009\u62e9\u7684\u7b2c\u4e8c\u70b9
+insert_selection_last_point=\u8f93\u5165\u77e9\u5f62\u9009\u62e9\u7684\u5bf9\u89d2
+insert_selection_point=\u8f93\u5165\u6807\u70b9\u9009\u62e9
+insert_third_point=\u8f93\u5165\u7b2c\u4e09\u70b9
+insertar_capa=\u63d2\u5165\u56fe\u5c42
+insertar_en_la_vista_la_capa_creada=\u60a8\u8981\u628a\u8fd9\u65b0\u5efa\u56fe\u5c42\u6dfb\u52a0\u5230\u6d3b\u52a8\u89c6\u56fe\u91cc\u5417?
+inside_circle=\u5706\u5f62\u4e4b\u5185
+inside_polygon=\u591a\u8fb9\u5f62\u4e4b\u5185
+inter_arc=\u5185\u90e8\u5f13\u5f62
+inter_line=\u5185\u90e8\u76f4\u7ebf
+internal_polygon=\u5185\u90e8\u591a\u8fb9\u5f62
+internal_polygon_=\u5185\u90e8\u591a\u8fb9\u5f62
+into_circle=\u653e\u4e8e\u5706\u5f62\u4e4b\u5185
+into_circle_or_circumscribed=\u653e\u4e8e\u5706\u5f62\u4e4b\u5185 [I] \u6216 \u653e\u4e8e\u5706\u5f62\u4e4b\u5916 [C]<C>
+intro_tablename=\u8f93\u5165\u65b0\u5efa\u8868\u683c\u540d\u79f0\u3002 \u6ce8\u610f\: \u5982\u679c\u8868\u683c\u5df2\u5b58\u5728, \u5b83\u5c06\u4f1a\u88ab\u5220\u9664\u3002
+join=\u8054\u63a5\uff08join\uff09
+join_=\u8054\u63a5 (join)
+LayerName=\u56fe\u5c42\u540d\u79f0
+length=\u957f\u5ea6
+length_of_field=\u5b57\u6bb5\u957f\u5ea6
+line=\u76f4\u7ebf
+line_=\u76f4\u7ebf
+line_type=\u76f4\u7ebf\u7c7b\u578b
+max_length_is=\u6700\u957f\u662f
+MaxFeaturesEditionCache=\u6700\u5927\u5728\u7f13\u5b58\u91cc\u7684\u7279\u6027\u6570\u503c\u3002
+minimum_size_of_line_incorrect=\u76f4\u7ebf\u6700\u5c0f\u957f\u5ea6\u9519\u8bef\u3002
+modify=\u66f4\u6539
+mostrar_rejilla=\u663e\u793a\u7f51\u683c
+move=\u79fb\u52a8
+move_=\u79fb\u52a8
+move_handlers=\u79fb\u52a8\u5904\u7406\u7a0b\u5e8f
+multi_type=\u591a\u7c7b\u578b
+multipoint=\u591a\u6570\u70b9
+multipoint_=\u591a\u6570\u70b9
+multipoint_type=\u591a\u6570\u70b9\u7c7b\u578b
+nearest_point=\u6700\u8fd1\u6807\u70b9
+new_dxf=\u65b0\u5efa DXF
+new_field=\u65b0\u5efa\u5b57\u6bb5
+new_layer=\u65b0\u5efa\u56fe\u5c42
+new_postgis=\u65b0\u5efa PostGIS
+new_shp=\u65b0\u5efa SHP
+next=\u7ee7\u7eed
+next_point_or_end=\u4e0b\u4e00\u70b9\u6216\u5b8c\u7ed3
+next_previous_add_del_cancel=\u6807\u70b9, \u4e0b\u4e00\u4e2a\u9876\u70b9 [S], \u540e\u9000 [A], \u6dfb\u52a0 [I] \u6216\u7740 \u5220\u9664 [E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=\u6ca1\u6709\u56fe\u5c42\u683c\u5f0f\u4f5c\u8005\u6216\u8005\u6ca1\u6709\u7f16\u5199\u6743\u9650\u3002\u6570\u636e\u5c06\u4e0d\u4f1a\u88ab\u4fdd\u5b58\u3002\u60a8\u8981\u7ee7\u7eed\u5417\uff1f
+no_puede_continuar=\u65e0\u6cd5\u7ee7\u7eed
+num_lados_insuficiente=\u8fb9\u6570\u4e0d\u8db3
+out_circle=\u5706\u5f62\u4e4b\u5916
+out_polygon=\u591a\u8fb9\u5f62\u4e4b\u5916
+out_rectangle=\u77e9\u5f62\u4e4b\u5916
+parte1=\u7b2c\u4e00\u90e8\u5206
+parte2=\u7b2c\u4e8c\u90e8\u5206
+pixel_point=\u50cf\u7d20\u70b9
+point=\u6807\u70b9
+point_=\u6807\u70b9
+point_type=\u6807\u70b9\u7c7b\u578b
+polygon=\u591a\u8fb9\u5f62
+polygon_=\u591a\u8fb9\u5f62
+polygon_type=\u591a\u8fb9\u5f62\u7c7b\u578b
+polyline=\u6298\u7ebf
+polyline_=\u6298\u7ebf
+postgis=PostGIS
+previous=\u540e\u9000
+realmente_desea_guardar_la_capa=\u60a8\u786e\u5b9a\u8981\u5c06\u6b64\u56fe\u5c42\u5b58\u76d8\u5417
+rectangle=\u77e9\u5f62
+rectangle_=\u77e9\u5f62
+redo=\u6062\u590d\u547d\u4ee4
+redo_error=\u5728\u4e3a\u6062\u590d\u547d\u4ee4\u800c\u8bfb\u53d6\u9a71\u52a8\u5668\u65f6\u51fa\u9519
+reference=\u53c2\u8003
+remove_geometry=\u5220\u9664\u51e0\u4f55\u5f62
+rotate=\u65cb\u8f6c
+rotate_=\u65cb\u8f6c
+scale=\u6bd4\u4f8b
+scale_=\u6bd4\u4f8b
+se_van_a_guardar_=\u5c06\u4f1a\u88ab\u4fdd\u5b58,
+seleccion_compleja=\u590d\u9009
+seleccionar=\u9009\u62e9
+select_all=\u9009\u62e9\u5168\u90e8
+select_charset_for_writing=\u9009\u62e9\u5b57\u7b26
+select_driver=\u9009\u62e9\u9a71\u52a8\u5668
+select_from_point=\u4ece\u4e00\u70b9\u5f00\u59cb\u9009\u62e9
+select_geometry=\u9009\u62e9\u51e0\u4f55\u5f62
+select_geometry_to_extend=\u9009\u62e9\u5c06\u88ab\u6269\u5c55\u7684\u51e0\u4f55\u5f62
+select_geometry_type=\u9009\u62e9\u51e0\u4f55\u7c7b\u578b
+select_handlers=\u9009\u62e9\u5904\u7406\u7a0b\u5e8f
+select_other_geometry_or_end=\u53e6\u9009\u51e0\u4f55\u5f62\u6216\u5b8c\u7ed3[E]
+Selected=\u5df2\u9009\u5b9a\u56fe\u5c42
+selection=\u9009\u62e9
+selection_=\u9009\u62e9
+Show\ Errors=\u9519\u8bef
+shp=SHP
+shp_files=.shp \u6587\u4ef6
+simple=Simple
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=\u8f93\u5165\u7ec4\u6210\u66f2\u5f62\u7684\u76f4\u7ebf\u6700\u5c0f\u957f\u5ea6\u3002
+square=\u8fb9\u89d2
+start_edition=\u5f00\u59cb\u7f16\u8f91
+stop_edition=\u5b8c\u6210\u7f16\u8f91
+stretch=\u62c9\u4f38
+stretch_=\u62c9\u4f38
+suprimir_objetos_origen=Remove objects from source? \u662f[Y] \u6216 \u5426[N]
+symmetry=\u5bf9\u79f0\u6027
+symmetry_=\u5bf9\u79f0\u6027
+terminate=\u5b8c\u6210
+this_layer_is_not_self_editable=\u6b64\u56fe\u5c42\u6ca1\u6709\u7f16\u5199\u6743\u9650\u3002 \u60a8\u80fd\u8f93\u51fa\u7f16\u8f91\u6570\u636e\uff0c\u4f46\u4e0d\u80fd\u4fdd\u5b58\u5728\u540c\u4e00\u5c42\u4e0a\u3002
+tolerancia_incorrecta=\u5bb9\u8bb8\u91cf\u4e0d\u6b63\u786e
+Topology=\u62d3\u6251
+Triangulation=\u4e09\u89d2\u6d4b\u91cf
+two_or_more_fields_with_the_same_name=\u4e24\u4e2a\u4ee5\u4e0a\u56fe\u5c42\u4f7f\u7528\u540c\u4e00\u547d\u540d
+type=\u7c7b\u578b
+undo=\u64a4\u6d88\u547d\u4ee4
+Unidades=\u5355\u4f4d
+Vista=\u89c6\u56fe
+warning_title=\u8b66\u544a
+will_be_truncated=\u5c06\u88ab\u7f29\u77ed

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,401 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+add=Add
+add_field=Add field
+add_vertex=Add vertex
+advanced=Advanced
+ajustar_rejilla=Adjust grid
+alpha=Alpha
+arc=Arc
+arc_=ARC
+break=Break
+break_=Break
+cad.or=or
+calculate_expresion=Calculate expresion
+cancel=Cancel
+cancelar_edicion=Cancel editing
+Layer=Layer
+capas_edition_cache=Mark the layers to be used for snapping
+change_the_editing_colors=Change the editing colors.
+circle=Circle
+circle_=CIRCLE
+CircleCADTool.3p=3P
+circumscribed=Circumscribed
+Clean=Clean
+clear_expresion=Clear expresion
+close=Close
+close_polyline=Close polyline
+column=Column
+commands=Commands
+commands_stack=Command stack
+complex_selection=Complex selection
+complex_selection_=COMPLEX_SELECTION
+ComplexSelectionCADTool.crosscircle=CC
+ComplexSelectionCADTool.crosspolygon=CP
+ComplexSelectionCADTool.end=E
+ComplexSelectionCADTool.introcircle=IC
+ComplexSelectionCADTool.intropolygon=IP
+ComplexSelectionCADTool.outcircle=OC
+ComplexSelectionCADTool.outpolygon=OP
+ComplexSelectionCADTool.outrectangle=OR
+contiene_espacios_en_blanco=It has white space
+continue?=Continue?
+continue_editing=Continue editing.
+copy=Copy
+copy_=COPY
+cross_circle=Intersects/contains circle
+cross_polygon=Intersects/Contains polygon
+cut=Cut
+date=Date
+define_fields=Define fields
+define_point=Define point
+del=Delete
+del_original_geometries=Remove objects from source?
+delete_field=Delete field
+deleted_feature=Deleted feature
+densityfication=Flatness
+distance_x=X distnance
+distance_y=Y distance
+distancia_malla_incorrecta=Incorrect grid distance
+dxf=dxf
+dxf_files=DXF files
+edit_vertex=Edit vertex
+edit_vertex_=EDIT_VERTEX
+editing=Editing
+Edition=Editing
+edition_properties=Editing Properties
+Edition_Properties=Editing Properties
+EditVertexCADTool.addvertex=A
+EditVertexCADTool.delvertex=D
+EditVertexCADTool.nextvertex=N
+EditVertexCADTool.previousvertex=P
+ellipse=Elipse
+ellipse_=ELLIPSE
+end=End
+end_polygon=End polygon
+enter_layer_name=Enter layer name
+enter_path_to_file=Enter file path
+error_expresion=Error expresion
+eval_expresion_will_be_carried_out_right_now_with_current_values_in_table=Eval expresion will be carried out right now\nwith current values in table.
+evaluate=Evaluate
+evaluate_expresion_with_errors=Evaluated expresions with errors
+exploit=Exploit
+exploit_=EXPLOIT
+explorer=Explorer
+expresion=Expresion
+expresions=Expresions
+expresions_from_file=Expresions from file
+export_to=Export to ...
+exportando_features=Exporting features
+exporting_=Exporting
+extend=Extend
+extend_=EXTEND
+factor=Factor
+features_desea_continuar=features, do you want to continue?
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field=Field
+fill=Fill
+file=File
+final_point=Final point
+finish_editing_without_saving_changes=Finish editing without saving changes.
+Flatness=Flatness
+geometry=Geometry
+general=General
+gml=GML
+gml_files=GML Files
+Grid=Grid
+guardar=Save
+incorrect_file=Incorrect file
+incorrect_option=Incorrect option
+incorrect_point=Incorrect point
+incorrect_value=Incorrect value
+insert=Insert
+insert_basis_point=Insert base point
+insert_central_point_or_3p=Insert central point or for 3 points
+insert_central_point_polygon=Insert central point of the polygon
+insert_destination_point=Insert destination point
+insert_distance_another_axis=Insert distance to other axis
+insert_factor=Insert scale factor
+insert_factor_or_reference=Insert scale factor <2> or Reference [R]
+insert_first_point=Insert first point
+insert_first_point_corner=Insert first corner point
+insert_first_point_or_distance=Insert first point or distance
+insert_first_point_scale=Insert origin of scale line
+insert_initial_point_axis=Insert initial point of ellipse axis
+insert_last_point=Insert last point
+insert_last_point_axis=Insert final point of ellipse axis
+insert_last_point_reference=Insert end of reference line
+insert_last_point_scale=Insert end of scale line
+insert_length_or_point=Insert length or point
+insert_move_first_point=Insert first point to move
+insert_move_last_point=Insert second point to move
+insert_next_point=Insert next point
+insert_next_point_selection_or_end_polygon=Insert next point or finish selection polygon
+insert_number_sides=Insert number of sides
+insert_opposited_corner=Insert opposite corner
+insert_point=Insert point
+insert_point_corner=Insert point of opposite corner
+insert_point_move=Insert point for move
+insert_point_selection=Insert selection point
+insert_radius=Insert radius
+insert_radius_or_second_point=Insert radius or second point
+insert_reference_point=Insert origin or Reference Line
+insert_rotation_angle=Insert rotation angle
+insert_second_point=Insert second point
+insert_second_point_angle=Insert second point or angle
+insert_second_point_move=Insert second point for move
+insert_second_point_selection=Insert second point of selection rectangle
+insert_selection_last_point=Insert opposed corner of the selection rectangle
+insert_selection_point=Insert selection point
+insert_third_point=Insert third point
+insertar_capa=Insert layer
+insertar_en_la_vista_la_capa_creada=Would you like to add this new layer to the active view?
+inside_circle=Inside circle
+inside_polygon=Inside polygon
+inter_arc=Internal arc
+inter_line=Internal line
+internal_polygon=Internal polygon
+internal_polygon_=Internal polygon
+InternalPolygonCADTool.end=E
+into_circle=Inscribed
+intro_tablename=Type in the name of the table to create. WARNING\: If table exists, it will be deleted.
+it_has_established_a_limit_of_rows_will_lose_the_possibility_to_undo_wants_to_continue=It has established a limit of rows in preferences, will lose the possibility to undo.  Wants to continue?
+join=Join
+join_=JOIN
+JoinCADTool.end=E
+LayerName=Layer name
+length=Length
+length_of_field=Length of field
+limit_rows_in_memory=Limit rows in memory
+line=Line
+line_=LINE
+line_type=Line type
+matrix=Matrix
+matrix_=MATRIX
+max_length_is=Max length is
+MaxFeaturesEditionCache=Max features editing cache
+minimum_size_of_line_incorrect=Incorrect minimun line size.
+modify=Modify
+mostrar_rejilla=Show grid
+move=Move
+move_=MOVE
+move_handlers=Move handlers
+multi_type=Multiple type
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Multipoint type
+MultipointCADTool.end=E
+nearest_point=Nearest point
+new_dxf=New DXF
+new_field=New field
+new_layer=New layer
+new_postgis=New PostGIS
+new_shp=New SHP
+next=Next
+next_point=Next point
+no=No
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=There are not writer for this layer format or you don't have write permissions
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_que_desea_hacer=There are not writer for this layer format or you don't have write permissions.\nWhat do you want to do?
+no_puede_continuar=Can't continue
+num_lados_insuficiente=not enough
+numeric=Numeric
+options.editing.default_axis_references_color=Axis references color.
+options.editing.default_handler_color=Handler selection color.
+options.editing.default_rectangle_selection_color=Geometry selection color.
+options.editing.default_selection_color=Selection color.
+out_circle=Out of circle
+out_polygon=Out of polygon
+out_rectangle=Out of rectangle
+outline=Outline
+parte1=Part 1
+parte2=Part 2
+pixel_point=Pixel point
+point=Point
+point_=POINT
+point_type=Point type
+polygon=Polygon
+polygon_=POLYGON
+PolygonCADTool.into_circle=I
+PolygonCADTool.circumscribed=C
+polygon_type=Polygon type
+polyline=Polyline
+PolylineCADTool.arc=A
+PolylineCADTool.close_polyline=C
+PolylineCADTool.end=E
+PolylineCADTool.line=L
+polyline_=POLYLINE
+postgis=PostGIS
+previous=Previous
+previous_selection=Previous selection
+realmente_desea_guardar_la_capa=Would you really like to save the layer
+rectangle=Rectangle
+RectangleCADTool.square=S
+rectangle_=RECTANGLE
+redo=Redo
+redo_error=Error while accesing drivers to redo command
+reference=Reference
+remove_geometry=Remove geometry
+rotate=Rotate
+rotate_=ROTATE
+scale=Scale
+ScaleCADTool.factor=F
+ScaleCADTool.reference=R
+scale_=SCALE
+se_van_a_guardar_=Will be saved,
+seleccion_compleja=Complex selection
+seleccionar=Select
+select_all=Select all
+select_charset_for_writing=Select charset for writing
+select_driver=Select driver
+select_from_point=Select from point
+select_geometry=Select geometry
+select_geometry_to_extend=Select geometry to extend
+select_geometry_type=Select geometry type
+select_handlers=Select handlers
+select_other_geometry=Select other geometry
+Selected=Selected
+selection=Selection
+selection_=SELECTION
+Show\ Errors=Show errors
+shp=SHP
+shp_files=SHP files
+simple=Simple
+size=Size
+specifies_the_limit_rows_in_memory_when_the_program_eval_the_expresion=Speficies the limit rows in memory when the program eval the expresion\n The limit down the velocity.
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Maximun allowed distance (in map units) between the curve and the linestring representing it.
+SplineCADTool.close=C
+SplineCADTool.end=E
+square=Square
+start_edition=Start editing
+stop_edition=Finish editing
+stretch=Stretch
+stretch_=STRETCH
+string=String
+symmetry=Symmetry
+SymmetryCADTool.no=N
+SymmetryCADTool.yes=Y
+symmetry_=SYMMETRY
+terminate=Terminate
+this_layer_is_not_self_editable=This layer has no write permissions. You will be able to export edited data, but no in the same layer.
+tolerancia_incorrecta=Incorrect tolerance
+Topology=Topology
+Triangulation=Triangulation
+two_or_more_fields_with_the_same_name=Two or more filds with the same name
+type=Type
+undo=Undo
+Unidades=Units\:
+Vista=View
+yes=Yes
+warning_title=Warning
+will_be_truncated=Will be truncated
+without_limit=Without limit
+too_long_name=Too long name
+maximun_name_size=Maximun name size
+the_field_name_is_required=The field name is required
+autocomplete-polygon=Autocomplete polygon
+split_geometry=Split geometries
+split_geometry_shell=SPLIT_GEOMETRIES
+select_geometry_to_split=Geometries selection to split
+SplitGeometryCADTool.end=E
+_Unable_to_update_tool_status=Unable to update tool status
+_Unable_to_draw_geometry_handlers=Unable to draw geometry handlers
+_Unable_to_exploit_polygon=Unable to exploit polygon
+_Unable_to_start_edition_in_layer=Unable to start editing in layer
+_Cannot_start_edition_in_transformed_layer=Editing not allowed in transformed layer
+_Unable_to_draw_help_geometry=Unable to draw help geometry
+_Drawing_error=Drawing error
+_Split_line_must_start_and_end_outside_bbox=Split line must start and end outside the geometry's bounding box
+_Invalid_values_in_some_fields_must_be_edited_before_end_editing=Invalid values in some fields must be edited before closing editing session
+_Show=Show
+_Show_grid=Show grid
+_Hide_grid=Hide grid
+_Enable_snapping=Enable snapping
+_Disable_snapping=Disable snapping
+_Enable_snap_to_grid=Enable snapping to grid
+_Disable_snap_to_grid=Disable snapping to grid
+Edit=Edit
+_Toggle_show_grid=Toggle display grid
+_Toggle_snapping=Toggle snapping
+_Toggle_snap_to_grid=Toggle snapping to grid
+_Guardar=Save
+_Save_changes_performed=Save edits performed in layer.
+_Descartar=Discard
+_Discard_and_lose_changes=Discard and lose edits performed.
+_Continuar=Continue
+_Do_not_save_yet_Stay_in_editing_mode=Do not save yet. Continue editing.
+_Unable_to_create_arc=Unable to create arc
+_Polygons_will_exploded_in_polygon_only_layer_Decision_question=Polygons will be exploded in a polygon layer,\nso geometry type restriction could be violated.
+_Allow_lines=Allow lines
+_Lines_will_exist_in_editing_mode_Must_remove_or_cancel=Allow lines in editing mode and must be deleted before editing ends or an error message will show.
+_Keep_as_polygons=Keep as polygons
+_Multi_polygons_separated_Simple_polygons_kept=Multi-polygons will be split into simple polygons. Simple polygons will not be exploded.
+_Copy_geometry=Copy geometry
+_Symmetry_geometry=Symmetrical geometry
+_Rotate_geometry=Rotate geometry
+_Scale_geometry=Scale geometry
+_Explode_geometry=Explode geometry
+_Copy=Copy
+_Symmetry=Symmetry
+_Rotate=Rotate
+_Scale=Scale
+_Explode=Explode
+_Move_geometry=Move geometry
+_Move=Move
+_Insert_point=Insert point
+_Point=Point
+_Insert_multipoint=Insert multipoint
+_Multipoint=Multipoint
+_Insert_line=Insert line
+_Insert_arc=Insert arc
+_Line=Line
+_Arc=Arc
+_Insert_polyline=Insert polyline
+_Insert_spline=Insert spline
+_Polyline=Polyline
+_Spline=Spline
+_Insert_polygon=Insert polygon
+_Insert_rectangle=Insert rectangle
+_Insert_circle=Insert circle
+_Insert_ellipse=Insert ellipse
+_Modify_vertex=Edit vertex
+_Edit_vertex=Edit vertex
+_Ellipse=Ellipse
+_Circle=Circle
+_Rectangle=Rectangle
+_Polygon=Polygon
+_Modify_join=Join
+_Join=Join
+_Modify_internal_polygon=Internal polygon
+_Internal_polygon=Internal polygon
+_Stretch_geometry=Stretch geometry
+_Stretch=Stretch
+_Complex_selection=Complex selection
+_Complex=Complex
+_Simple_selection=Simple selection
+_Simple=Simple
+_Simple_selection_move_vertex=Simple selection (move vertex)
+_Simple_move_vertex=Simple (move vertex)
+_Matrix=Matrix
+_Insert_autopolygon=Insert autopolygon
+_Autopolygon=Autopolygon
+_Split_geometry=Split geometry
+_Split=Split
+Insert=Insert
+Modify=Modify
+_Unable_to_create_geometry=Unable to create geometry
+_Unable_to_save_edits_The_cause_is=Unable to save edits. The cause is
+_Unable_to_complete_operation_Probably_invalid_polygon=Unable to complete operation. Probably due to invalid input polygon.
+_Export_to_another_format=Export to another format
+_Debe_insertar_el_punto_dentro_de_los_limites_del_poligono=You must click inside the polygon
+matriz_rectangular=Rectangular matrix
+matriz_polar=Polar matrix
+disp_rows=Row gap
+disp_columns=Column gap
+centro=Center
+num_elementos=Element count
+girar_elementos_a_medida_que_se_copian=Increasingly rotate elements
+
+
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1,221 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+add=Engadir
+add_field=Engadir campo
+add_vertex=Engadir v\u00e9rtice
+ajustar_rejilla=
+arc=
+arc_=ARCO
+break=
+break_=Break
+cancel=Cancelar
+cancelar_edicion=
+Layer=Capa
+capas_edition_cache=
+circle=
+circle_=C\u00cdRCULO
+circumscribed=Circunscrito
+Clean=
+close_polyline=Pechar polili\u00f1a
+commands_stack=P\u00eda de comandos
+complex_selection=Selecci\u00f3n complexa
+complex_selection_=SELECCI\u00d3N COMPLEXA
+contiene_espacios_en_blanco=
+copy=Copiar
+copy_=COPIAR
+cross_circle=Intersecta/cont\u00e9n a circunferencia
+cross_polygon=Intersecta/Cont\u00e9n o Pol\u00edgono
+cut=
+define_fields=Define os campos
+define_point=Defina o punto
+del=Eliminar
+delete_field=Borrar campo
+deleted_feature=
+densityfication=Densificaci\u00f3n
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+dxf=
+dxf_files=Arquivos dxf
+edit_vertex=
+edit_vertex_=EDITAR V\u00c9RTICE
+Edition=
+Edition_Properties=
+ellipse=Elipse
+ellipse_=ELIPSE
+end=Rematar
+end_polygon=Finalizar pol\u00edgono
+enter_layer_name=Introducir nome da capa
+enter_path_to_file=Introducir a ruta do arquivo
+exploit=Explotar
+exploit_=
+export_to=
+exportando_features=
+exporting_=Exportando
+extend=Alongar
+extend_=
+factor=Factor
+features_desea_continuar=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=Campo
+file=Arquivo
+final_point=
+Flatness=
+geometry=Xeometr\u00eda
+gml=
+gml_files=
+Grid=
+guardar=Gardar
+incorrect_option=Opci\u00f3n incorrecta
+incorrect_point=
+incorrect_value=
+insert=Inserir
+insert_basis_point=Precise punto base
+insert_central_point_or_3p=Inserir punto central ou [3P]
+insert_central_point_polygon=Inserir punto central do pol\u00edgono
+insert_destination_point=Precise punto destino
+insert_distance_another_axis=Inserir distancia ao outro eixe
+insert_factor_or_reference=Precise factor de escala<2> ou Referencia[R]
+insert_first_point=Inserir primeiro punto
+insert_first_point_corner=Inserir primeiro punto de esquina
+insert_first_point_scale=Precise punto orixe recta escala
+insert_initial_point_axis=Inserir punto inicial do eixe da elipse
+insert_last_point=Inserir derradeiro punto
+insert_last_point_axis=Inserir punto final do eixe da elipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Inserir lonxitude ou punto
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Inserir seguinte punto, Arco[A] ou Pechar polili\u00f1a[C] ou Rematar[T]
+insert_next_point_line_or_close=Inserir punto seguinte, Li\u00f1a[N], Pechar polili\u00f1a[C] ou Rematar[T]
+insert_next_point_selection_or_end_polygon=Inserir seguinte punto ou finalizar pol\u00edgono de selecci\u00f3n
+insert_number_sides=Inserir n\u00famero de lados
+insert_opposited_corner=Inserir esqina oposta
+insert_point=Inserir punto
+insert_point_corner_or_square=Inserir punto da esquina oposta ou Cadrado[C]
+insert_point_move=Inserir punto de desprazamento
+insert_point_or_end=
+insert_point_selection=Precise punto de selecci\u00f3n
+insert_point_selection_or_types=Precise punto ou Circunf.[IC], F\u00f3ra Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], F\u00f3ra pol.[OP], Inter. circunf.[CC], F\u00f3ra circunf.[OC]
+insert_radius=Precise radio
+insert_radius_or_second_point=Inserir radio ou segundo punto
+insert_reference_point_or_factor=Precise punto orixe recta referencia ou Factor de escala[F]
+insert_rotation_angle=Precise \u00e1ngulo de rotaci\u00f3n
+insert_second_point=Inserir segundo punto
+insert_second_point_angle=Inserir segundo punto ou \u00e1ngulo
+insert_second_point_move=Precisar segundo punto do desprazamento
+insert_second_point_selection=Precise segundo punto do rect\u00e1ngulo de selecci\u00f3n
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Inserir terceiro punto
+insertar_capa=
+insertar_en_la_vista_la_capa_creada=
+inside_circle=Dentro da circunferencia
+inside_polygon=Dentro do pol\u00edgono
+inter_arc=Arco interno
+inter_line=Li\u00f1a interna
+internal_polygon=
+internal_polygon_=Pol\u00edgono interno
+into_circle=Inscrito
+into_circle_or_circumscribed=Inscrito no c\u00edrculo[I] ou Circunscrito[C]<C>
+intro_tablename=Introduza o nome da t\u00e1boa a crear. AVISO\: Se a t\u00e1boa xa existe, ser\u00e1 borrada
+join=Empalmar
+join_=
+LayerName=
+length=Tama\u00f1o
+length_of_field=
+line=Li\u00f1a
+line_=LI\u00d1A
+line_type=Tipo li\u00f1a
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modify=
+mostrar_rejilla=
+move=Desprazamento
+move_=DESPRAZAMENTO
+move_handlers=
+multi_type=Tipo m\u00faltiple
+multipoint=
+multipoint_=
+multipoint_type=Tipo multipunto
+nearest_point=
+new_dxf=Novo DXF
+new_field=Novo campo
+new_layer=Nova capa
+new_postgis=Novo postgis
+new_shp=Novo shp
+next=Seguinte
+next_point_or_end=Seguinte punto ou rematar[E]
+next_previous_add_del_cancel=Punto, Seguinte v\u00e9rtice[S], Anterior[A], Engadir[I] ou Eliminar[E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=
+num_lados_insuficiente=
+out_circle=F\u00f3ra da circunferencia
+out_polygon=F\u00f3ra do pol\u00edgono
+out_rectangle=F\u00f3ra do rect\u00e1ngulo
+parte1=
+parte2=
+pixel_point=
+point=Punto
+point_=PUNTO
+point_type=Tipo punto
+polygon=Pol\u00edgono
+polygon_=
+polygon_type=Tipo Pol\u00edgono
+polyline=Polili\u00f1a
+polyline_=POLILI\u00d1A
+postgis=
+previous=Anterior
+realmente_desea_guardar_la_capa=
+rectangle=
+rectangle_=
+redo=Refacer
+redo_error=Erro accedendo aos Drivers para refacher un comando
+reference=Referencia
+remove_geometry=
+rotate=
+rotate_=
+scale=Escalar
+scale_=ESCALAR
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar=
+select_all=Seleccionar todo
+select_charset_for_writing=
+select_driver=Seleccione o driver
+select_from_point=Seleccionar a partir dun punto
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=Seleccione o tipo de xeometr\u00eda
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=
+Selected=
+selection=
+selection_=SELECCIONAR
+Show\ Errors=
+shp=
+shp_files=Arquivos .shp
+simple=Simple
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=Esquina
+start_edition=Comenzar edici\u00f3n
+stop_edition=Rematar edici\u00f3n
+stretch=Estirar
+stretch_=Estirar
+suprimir_objetos_origen=
+symmetry=Simetr\u00eda
+symmetry_=
+terminate=Rematar
+this_layer_is_not_self_editable=
+tolerancia_incorrecta=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Tipo
+undo=Desfacer
+Unidades=Unidades\:
+Vista=Vista
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1,222 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+add=Afegir
+add_field=Afegir camp
+add_vertex=Afegir v\u00e8rtex
+ajustar_rejilla=
+arc=
+arc_=ARC
+break=
+break_=Break
+cancel=Cancel\u00b7lar
+cancelar_edicion=
+Layer=Capa
+capas_edition_cache=
+circle=Cercle
+circle_=CERCLE
+circumscribed=Circumscrit
+Clean=
+close_polyline=Tancar la polil\u00ednia
+commands_stack=Pila de comandaments
+complex_selection=Selecci\u00f3 complexa
+complex_selection_=SELECCI\u00d3 COMPLEXA
+contiene_espacios_en_blanco=
+copy=Copiar
+copy_=COPIAR
+cross_circle=Intersecta/cont\u00e9 la circumfer\u00e8ncia
+cross_polygon=Intersecta/Cont\u00e9 el pol\u00edgon
+cut=Retallar
+define_fields=Definix els camps
+define_point=Definisca el punt
+del=Eliminar
+delete_field=Esborrar el camp
+deleted_feature=
+densityfication=Densificaci\u00f3
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+dxf=
+dxf_files=Fitxers dxf
+edit_vertex=Editar v\u00e8rtex
+edit_vertex_=EDITAR V\u00c8RTEX
+Edition=
+edition_properties=
+Edition_Properties=
+ellipse=El\u00b7lipse
+ellipse_=EL\u00b7LIPSE
+end=Acabar
+end_polygon=Finalitzar pol\u00edgon
+enter_layer_name=Introduir el nom de la capa
+enter_path_to_file=Introduir la ruta del fitxer
+exploit=Explotar
+exploit_=
+export_to=
+exportando_features=S'est\u00e0 exportant  funcionalitats
+exporting_=S'est\u00e0 exportant
+extend=Allargar
+extend_=
+factor=Factor
+features_desea_continuar=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=Camp
+file=Fitxer
+final_point=
+Flatness=
+geometry=Geometria
+gml=
+gml_files=
+Grid=
+guardar=Guardar
+incorrect_option=Opci\u00f3 incorrecta
+incorrect_point=
+incorrect_value=
+insert=Inserir
+insert_basis_point=Precise el punt base
+insert_central_point_or_3p=Inserir punt central o [3p]
+insert_central_point_polygon=Inserir punt central del pol\u00edgon
+insert_destination_point=Precise el punt de dest\u00ed
+insert_distance_another_axis=Inserir dist\u00e0ncia a l'altre eix
+insert_factor_or_reference=Precise factor d'escala<2> o Refer\u00e8ncia[R]
+insert_first_point=Inserir primer punt
+insert_first_point_corner=Inserir primer punt de cant\u00f3
+insert_first_point_scale=Precise punt origen recta escala
+insert_initial_point_axis=Inserir punt inicial d'eix d'el\u00b7lipse
+insert_last_point=Inserir l'\u00faltim punt
+insert_last_point_axis=Inserir punt final d'eix d'el\u00b7lipse
+insert_last_point_reference=Precise punt final recta refer\u00e8ncia
+insert_last_point_scale=Precise punt final recta escala
+insert_length_or_point=Inserir longitud o punt
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Inserir seg\u00fcent punt, Arc[A] o Tancar polil\u00ednia[C] o Acabar[T]
+insert_next_point_line_or_close=Inserir punt seg\u00fcent, L\u00ednia[N], Tancar polil\u00ednia[C] o Acabar[T]
+insert_next_point_selection_or_end_polygon=Inserir punt seg\u00fcent o finalitzar pol\u00edgon de selecci\u00f3
+insert_number_sides=Inserir nombre de costats
+insert_opposited_corner=Inserir cant\u00f3 oposat
+insert_point=Inserir punt
+insert_point_corner_or_square=Inserir punt de cant\u00f3 oposat o Quadrat[C]
+insert_point_move=Inserir punt de despla\u00e7ament
+insert_point_or_end=
+insert_point_selection=Precise punt de selecci\u00f3
+insert_point_selection_or_types=Precise punt o Circumf.[IC], Fora Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fora pol.[OP], Inter. circumf.[CC], Fora circumf.[OC]
+insert_radius=Precise radi
+insert_radius_or_second_point=Inserir radi o segon punt
+insert_reference_point_or_factor=Precise punt d'origen recta refer\u00e8ncia o Factor d'escala[F]
+insert_rotation_angle=Precise angle de rotaci\u00f3
+insert_second_point=Inserir segon punt
+insert_second_point_angle=Inserir segon punt o angle
+insert_second_point_move=Precisar segon punt del despla\u00e7ament
+insert_second_point_selection=Precise segon punt del rectangle de selecci\u00f3
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Inserir tercer punt
+insertar_capa=
+insertar_en_la_vista_la_capa_creada=
+inside_circle=Dins de la circumfer\u00e8ncia
+inside_polygon=Dins del pol\u00edgon
+inter_arc=Arc intern
+inter_line=L\u00ednia interna
+internal_polygon=
+internal_polygon_=Pol\u00edgon intern
+into_circle=Inscrit
+into_circle_or_circumscribed=Inscrit en el cercle[I] o Circumscrit[C]<C>
+intro_tablename=Introdu\u00efu el nom de la taula que s'ha de crear. AV\u00cdS\: Si existix la taula, s'esborrar\u00e0.
+join=Unir
+join_=UNIR
+LayerName=
+length=Longitud
+length_of_field=
+line=L\u00ednia
+line_=L\u00cdNIA
+line_type=Tipus l\u00ednia
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modify=
+mostrar_rejilla=
+move=Despla\u00e7ament
+move_=DESPLA\u00c7AMENT
+move_handlers=
+multi_type=Tipus m\u00faltiple
+multipoint=
+multipoint_=
+multipoint_type=Tipus multipunt
+nearest_point=
+new_dxf=Nou DXF
+new_field=Nou camp
+new_layer=Nova capa
+new_postgis=Nou postgis
+new_shp=Nou SHP
+next=Seg\u00fcent
+next_point_or_end=Seg\u00fcent punt o finalitzar[E]
+next_previous_add_del_cancel=Punt, Seg\u00fcent v\u00e8rtex[S], Anterior[A], Afegir[I] o Eliminar[E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=
+num_lados_insuficiente=
+out_circle=Fora de la circumfer\u00e8ncia
+out_polygon=Fora del pol\u00edgon
+out_rectangle=Fora del rectangle
+parte1=
+parte2=
+pixel_point=
+point=Punt
+point_=PUNT
+point_type=Tipus punt
+polygon=Pol\u00edgon
+polygon_=POL\u00cdGON
+polygon_type=Tipus pol\u00edgon
+polyline=Polil\u00ednia
+polyline_=POLIL\u00cdNIA
+postgis=
+previous=Anterior
+realmente_desea_guardar_la_capa=
+rectangle=Rectangle
+rectangle_=RECTANGLE
+redo=Refer
+redo_error=Error en accedir als programes de control per a refer un comandament
+reference=Refer\u00e8ncia
+remove_geometry=
+rotate=Rotar
+rotate_=
+scale=Escalar
+scale_=ESCALAR
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar=seleccionar
+select_all=Seleccionar tot
+select_charset_for_writing=
+select_driver=Seleccione el programa de control
+select_from_point=Seleccionar a partir d'un punt
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=Seleccione el tipus de geometria
+select_handlers=Seleccionar nodes
+select_other_geometry_or_end=
+Selected=
+selection=
+selection_=SELECCIONAR
+Show\ Errors=
+shp=
+shp_files=Fitxers .shp
+simple=Simple
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=Cant\u00f3
+start_edition=Comen\u00e7ar l'edici\u00f3
+stop_edition=Acabar l'edici\u00f3
+stretch=Estirar
+stretch_=
+suprimir_objetos_origen=
+symmetry=Simetria
+symmetry_=
+terminate=Acabar
+this_layer_is_not_self_editable=
+tolerancia_incorrecta=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Tipus
+undo=Desfer
+Unidades=Unitats\:
+Vista=Vista
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1,221 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+add=Adicionar
+add_field=
+add_vertex=
+ajustar_rejilla=
+arc=
+arc_=ARC
+break=
+break_=Break
+cancel=Cancelar
+cancelar_edicion=
+Layer=Capa
+capas_edition_cache=
+circle=
+circle_=
+circumscribed=
+Clean=
+close_polyline=Close polyline
+commands_stack=Pila de comandos
+complex_selection=
+complex_selection_=
+contiene_espacios_en_blanco=
+copy=
+copy_=
+cross_circle=
+cross_polygon=
+cut=
+define_fields=
+define_point=
+del=
+delete_field=
+deleted_feature=
+densityfication=Flatness
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+dxf=
+dxf_files=DXF files
+edit_vertex=
+edit_vertex_=
+Edition=
+Edition_Properties=
+ellipse=Elipse
+ellipse_=ELLIPSE
+end=
+end_polygon=
+enter_layer_name=
+enter_path_to_file=
+exploit=
+exploit_=
+export_to=
+exportando_features=
+exporting_=
+extend=
+extend_=
+factor=Factor
+features_desea_continuar=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=
+file=
+final_point=
+Flatness=
+geometry=Geometry
+gml=
+gml_files=
+Grid=
+guardar=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius=Insert radius
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_capa=
+insertar_en_la_vista_la_capa_creada=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+internal_polygon=
+internal_polygon_=
+into_circle=
+into_circle_or_circumscribed=
+intro_tablename=Introduza o nome da tabela a criar. AVISO\: Se existe a tabela, vai ser apagada.
+join=Uni\u00e3o
+join_=
+LayerName=
+length=
+length_of_field=
+line=
+line_=
+line_type=
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modify=
+mostrar_rejilla=
+move=
+move_=
+move_handlers=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+nearest_point=
+new_dxf=
+new_field=
+new_layer=
+new_postgis=
+new_shp=
+next=Seguinte
+next_point_or_end=
+next_previous_add_del_cancel=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=
+num_lados_insuficiente=
+out_circle=
+out_polygon=
+out_rectangle=
+parte1=
+parte2=
+pixel_point=
+point=
+point_=
+point_type=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+postgis=
+previous=
+realmente_desea_guardar_la_capa=
+rectangle=
+rectangle_=
+redo=
+redo_error=
+reference=
+remove_geometry=
+rotate=
+rotate_=
+scale=Escala
+scale_=
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar=
+select_all=Seleccionar todos
+select_charset_for_writing=
+select_driver=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+Selected=
+selection=
+selection_=
+Show\ Errors=
+shp=
+shp_files=SHP files
+simple=Simples
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+terminate=Terminate
+this_layer_is_not_self_editable=
+tolerancia_incorrecta=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Tipo
+undo=
+Unidades=Unidades\:
+Vista=Vista
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1,221 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+add=P\u0159idat
+add_field=P\u0159idej atribut
+add_vertex=Vlo\u017e vrchol
+ajustar_rejilla=Nastav s\u00ed\u0165
+arc=Use\u010dka
+arc_=ARC
+break=P\u0159eru\u0161it
+break_=P\u0158ERU\u0160IT
+cancel=Zru\u0161it
+cancelar_edicion=Zru\u0161 editaci
+Layer=Vrstva
+capas_edition_cache=Ozna\u010d vrstvy, kter\u00e9 maj\u00ed b\u00fdt pou\u017eity pro p\u0159ichyt\u00e1van\u00ed.
+circle=Kruh
+circle_=KRUH
+circumscribed=
+Clean=
+close_polyline=Zav\u0159it l\u00ednii
+commands_stack=Z\u00e1sobn\u00ed p\u0159\u00edkaz\u016f
+complex_selection=Komplexn\u00ed v\u00fdb\u011br
+complex_selection_=KOMPLEXN\u00cd V\u00ddB\u011aR
+contiene_espacios_en_blanco=Obsahuje b\u00edl\u00e9 mezery
+copy=Kop\u00edrovat
+copy_=KOP\u00cdROVAT
+cross_circle=Prot\u00edn\u00e1n\u00ed/obsahuje kruh
+cross_polygon=Prot\u00edn\u00e1n\u00ed/obsahuje polygon
+cut=Vyst\u0159ihnout
+define_fields=Definovat polo\u017eky
+define_point=Definovat bod
+del=Smazat
+delete_field=Smazat polo\u017eku
+deleted_feature=Smazan\u00fd prvek
+densityfication=Flatness
+distance_x=Vzd\u00e1lenos X
+distance_y=Vzd\u00e1lenost Y
+distancia_malla_incorrecta=Nespr\u00e1vn\u00e1 vzd\u00e1lenost m\u0159\u00ed\u017eky
+dxf=dxf
+dxf_files=DXF files
+edit_vertex=Edituj vrchol
+edit_vertex_=EDITACE VRCHOLU
+Edition=Editace
+Edition_Properties=Vlastnosti Editace
+ellipse=Elipse
+ellipse_=ELLIPSE
+end=Konec
+end_polygon=Ukon\u010di polygon
+enter_layer_name=Vlo\u017ete n\u00e1zev vrstvy 
+enter_path_to_file=Vlo\u017ete cestu k souboru
+exploit=Exploit
+exploit_=EXPLOIT
+export_to=Exportovat jako...
+exportando_features=Exportov\u00e1n\u00ed prvk\u016f
+exporting_=Exportov\u00e1n\u00ed
+extend=Rozsah
+extend_=ROZSAH
+factor=Factor
+features_desea_continuar=prvky, chcete pokra\u010dovat?
+fichero_ya_existe_seguro_desea_guardarlo=Soubor u\u017e existuje, chcete pokra\u010dovat?
+field=Polo\u017eka
+file=Soubor
+final_point=Posledn\u00ed bod
+Flatness=Rovinost
+geometry=Geometry
+gml=GML
+gml_files=GML soubory
+Grid=M\u0159\u00ed\u017eka
+guardar=Ulo\u017eit
+incorrect_option=Chybn\u00e1 volba
+incorrect_point=Chybn\u00fd bod
+incorrect_value=Chybn\u00e1 hodnota
+insert=Vlo\u017eit
+insert_basis_point=Vlo\u017eit z\u00e1kladn\u00ed bod
+insert_central_point_or_3p=Vlo\u017eit centr\u00e1ln\u00ed bod nebo [3P]
+insert_central_point_polygon=Vlo\u017eit centr\u00e1ln\u00ed bod polygonu
+insert_destination_point=Vlo\u017eit c\u00edlov\u00fd bod
+insert_distance_another_axis=Vlo\u017eit vzd\u00e1lenost k jin\u00e9 ose
+insert_factor_or_reference=Vlo\u017eit n\u00e1sobek m\u011b\u0159\u00edtka [2] nebo Odkaz [R]
+insert_first_point=Vlo\u017ete prvn\u00ed bod
+insert_first_point_corner=Vlo\u017ete prvn\u00ed rohov\u00fd bod
+insert_first_point_scale=Vlo\u017ete p\u016fvodn\u00ed m\u011b\u0159\u00edtko
+insert_initial_point_axis=Vlo\u017ete prvn\u00ed bod osy elipsy
+insert_last_point=Vlo\u017ete posledn\u00ed bod
+insert_last_point_axis=Vlo\u017ete posledn\u00ed bod osy elipsy
+insert_last_point_reference=Vlo\u017ete konec referen\u010dn\u00ed linie
+insert_last_point_scale=Vlo\u017ete konec linie m\u011b\u0159\u00edtka
+insert_length_or_point=Vlo\u017ete d\u00e9lku nebo bod
+insert_move_first_point=Vlo\u017ete prvn\u00ed bod k pohybu
+insert_move_last_point=Vlo\u017ete posledn\u00ed bod k pohybu
+insert_next_point_arc_or_close=Vlo\u017ete dal\u0161\u00ed bod, Arc[A] nebo Close[C]
+insert_next_point_line_or_close=Vlo\u017ete dal\u0161\u00ed bod, Line [N] nebo Close [C]
+insert_next_point_selection_or_end_polygon=Vlo\u017ete dal\u0161\u00ed bod nebo ukon\u010dete v\u00fdb\u011br polygonu
+insert_number_sides=Vlo\u017ete po\u010det stran
+insert_opposited_corner=Vlo\u017ete protilehl\u00fd roh
+insert_point=Vlo\u017e bod
+insert_point_corner_or_square=Vlo\u017e bod protej\u0161\u00edho rohu nebo \u010dtverce [C]
+insert_point_move=Vlo\u017e bod pro posunut\u00ed
+insert_point_or_end=Vlo\u017e bod nebo Ukon\u010di geoprvek [E]
+insert_point_selection=Vlo\u017e v\u00fdb\u011brov\u00fd bod
+insert_point_selection_or_types=Vlo\u017e bod nebo Kru\u017enici [IC], Vn\u011bj\u0161\u00ed obd\u00e9ln\u00edk [OR], Vnit\u0159n\u00ed polygon [CP], Vnit\u0159n\u00ed kru\u017enici [CC], Vn\u011bj\u0161\u00ed Kru\u017enici [OC]
+insert_radius=Insert radius
+insert_radius_or_second_point=Vlo\u017e polom\u011br nebo druh\u00fd bod
+insert_reference_point_or_factor=Vlo\u017e po\u010d\u00e1tek nebo Referen\u010dn\u00ed L\u00ednii nebo M\u011b\u0159\u00edtko [F]
+insert_rotation_angle=Vlo\u017e uhel oto\u010den\u00ed
+insert_second_point=Vlo\u017e druh\u00fd bod
+insert_second_point_angle=Vlo\u017e druh\u00fd bod nebo \u00fahel
+insert_second_point_move=Vlo\u017e druh\u00fd bod pro posunut\u00ed
+insert_second_point_selection=Vlo\u017e druh\u00fd bod v\u00fdb\u011brov\u00e9ho obdeln\u00edku
+insert_selection_last_point=Vlo\u017e prot\u011bj\u0161\u00ed roh v\u00fdb\u011brov\u00e9ho obdeln\u00edku
+insert_selection_point=Vlo\u017e bod v\u00fdb\u011bru
+insert_third_point=Vlo\u017e t\u0159et\u00ed bod
+insertar_capa=Vlo\u017e vrstvu
+insertar_en_la_vista_la_capa_creada=P\u0159ejete si p\u0159idat novou vrstvu do aktivn\u00edho pohledu?
+inside_circle=Vlo\u017e kru\u017enici
+inside_polygon=Uvnit\u0159 polygonu
+inter_arc=Vnit\u0159n\u00ed \u016fse\u010dka
+inter_line=Vnit\u0159n\u00ed l\u00ednie
+internal_polygon=Vnit\u0159n\u00ed polygon
+internal_polygon_=Vnit\u0159n\u00ed polygon
+into_circle=
+into_circle_or_circumscribed=Vepsan\u00fd [I] o Opsan\u00fd [C] v kru\u017enici |C|
+intro_tablename=Zadejte n\u00e1zev tabulky k vytvo\u0159en\u00ed. VAROV\u00c1N\u00cd\: Pokud tabulka existuje bude vymaz\u00e1na.
+join=spojit
+join_=SPOJEN\u00cd
+LayerName=N\u00e1zev vrstvy
+length=D\u00e9lka
+length_of_field=
+line=Line
+line_=LINIE
+line_type=Typ linie
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=Neplatn\u00e1 minim\u00e1ln\u00ed velikost linie.
+modify=Upravit
+mostrar_rejilla=Zobrazit m\u0159\u00ed\u017eku
+move=P\u0159esunout
+move_=P\u0158ESUNOUT
+move_handlers=P\u0159esunout jednotky
+multi_type=Mnohon\u00e1sobn\u00fd typ
+multipoint=Multipoint
+multipoint_=MULTIPOINT
+multipoint_type=Typ multipointu
+nearest_point=Nejbli\u017e\u0161\u00ed bod
+new_dxf=Nov\u00fd DXF
+new_field=Nov\u00fd atribut
+new_layer=Nov\u00e1 vrstva
+new_postgis=Nov\u00fd PostGIS
+new_shp=Nov\u00fd SHP
+next=Dal\u0161\u00ed
+next_point_or_end=Dal\u0161\u00ed bod nebo konec
+next_previous_add_del_cancel=Bod, Dal\u0161\u00ed vrchol [S], P\u0159edchoz\u00ed [A], P\u0159idej [I] nebo Odstra\u0148 [E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=Nen\u00ed mo\u017en\u00e9 pokra\u010dovat
+num_lados_insuficiente=
+out_circle=Vn\u011b kru\u017enice
+out_polygon=vn\u011b polygonu
+out_rectangle=Vn\u011b obd\u00e9ln\u00edku
+parte1=\u010c\u00e1st 1
+parte2=\u010c\u00e1st 2
+pixel_point=
+point=Punto
+point_=BOD
+point_type=Typ bodu
+polygon=Polygon
+polygon_=POLYGON
+polygon_type=Typ polygonu
+polyline=L\u00ednie
+polyline_=L\u00cdNIE
+postgis=PostGIS
+previous=P\u0159edchoz\u00ed
+realmente_desea_guardar_la_capa=Opravdu si p\u0159ejete ulo\u017eit vrstvu?
+rectangle=Obd\u00e9ln\u00edk
+rectangle_=OBD\u00c9LN\u00cdK
+redo=Znovu
+redo_error=Chyba p\u0159i p\u0159\u00edstupu k ovlada\u010d\u016fm znovuproveden\u00ed
+reference=Odkaz
+remove_geometry=Odstra\u0148 geoprvek
+rotate=Oto\u010d
+rotate_=OTO\u010c
+scale=M\u011b\u0159\u00edtko
+scale_=M\u011a\u0158\u00cdTKO
+se_van_a_guardar_=Bude ulo\u017eeno
+seleccion_compleja=
+seleccionar=Vyber
+select_all=Vyber v\u0161e
+select_charset_for_writing=
+select_driver=Vyber disk
+select_from_point=Vyber z bodu???
+select_geometry=Vyber geoprvek
+select_geometry_to_extend=Zvolte geometri k roz\u0161\u00ed\u0159en\u00ed.
+select_geometry_type=Vyber typ geoprvku
+select_handlers=Zvolte ovlada\u010de
+select_other_geometry_or_end=Vyber jin\u00e9 typy geoprvk\u016f nebo Konec[E]
+Selected=Vybr\u00e1no
+selection=V\u00fdb\u011br
+selection_=V\u00ddB\u011aR
+Show\ Errors=
+shp=SHp
+shp_files=SHP files
+simple=Prost\u00fd
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=Definuj minim\u00e1ln\u00ed velikost linie, kter\u00e1 bude tvo\u0159it k\u0159ivku.
+square=\u010ctverec
+start_edition=Zahaj editaci
+stop_edition=Ukon\u010di editaci
+stretch=Rozta\u017een\u00ed
+stretch_=ROZTA\u017dEN\u00cd
+suprimir_objetos_origen=M\u00e1 b\u00fdtobjekt odebr\u00e1n ze zdroje? Ano[Y] nebo Ne[N]
+symmetry=Symetrie
+symmetry_=SYMETRIE
+terminate=Terminate
+this_layer_is_not_self_editable=Tato vrstva je chr\u00e1n\u011bna proti z\u00e1pisu. Bude mo\u017en\u00e9 exportovat editovan\u00e1 data, ale ne do stejn\u00e9 vrstvy.
+tolerancia_incorrecta=\u0160patn\u00e1 tolerance
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Typ
+undo=Zp\u011bt
+Unidades=Jednotky\:
+Vista=Pohled
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1,221 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+add=Ajouter
+add_field=Ajouter une colone
+add_vertex=Ajouter un sommet
+ajustar_rejilla=
+arc=
+arc_=Arc
+break=
+break_=Break
+cancel=Annuler
+cancelar_edicion=
+Layer=Couche
+capas_edition_cache=
+circle=Cercle
+circle_=Cercle
+circumscribed=Circonscrit
+Clean=
+close_polyline=Fermer la polyligne
+commands_stack=Historique des commandes
+complex_selection=S\u00e9lection complexe
+complex_selection_=S\u00e9lection complexe
+contiene_espacios_en_blanco=
+copy=Copier
+copy_=Copier
+cross_circle=Intersect/Contient le cercle
+cross_polygon=Intersect/Contient le polygon
+cut=Couper
+define_fields=D\u00e9finir les colonnes
+define_point=D\u00e9finir le point
+del=Supprimer
+delete_field=Supprimer une colonne
+deleted_feature=
+densityfication=Densification
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+dxf=
+dxf_files=Fichiers dxf
+edit_vertex=Editer les sommets
+edit_vertex_=Editer les sommets
+Edition=
+Edition_Properties=
+ellipse=Ellipse
+ellipse_=Ellipse
+end=Terminer
+end_polygon=Terminer le polygone
+enter_layer_name=Donner un nom \u00e0 la couche
+enter_path_to_file=Donner le chemin du fichier
+exploit=S\u00e9parer
+exploit_=
+export_to=
+exportando_features=Export des fonctionalit\u00e9s
+exporting_=Export
+extend=Etendre
+extend_=
+factor=Facteur
+features_desea_continuar=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=Colonne
+file=Fichier
+final_point=
+Flatness=
+geometry=G\u00e9om\u00e9trie
+gml=
+gml_files=
+Grid=
+guardar=Enregistrer
+incorrect_option=Option incorrect
+incorrect_point=
+incorrect_value=
+insert=Ins\u00e9rer
+insert_basis_point=Ins\u00e9rer un point
+insert_central_point_or_3p=Ins\u00e9rer un point central
+insert_central_point_polygon=Ins\u00e9rer le point central du polygone
+insert_destination_point=Donner un point de destination
+insert_distance_another_axis=Donner une distance \u00e0 l'autre axe
+insert_factor_or_reference=Donner un facteur d'\u00e9chelle
+insert_first_point=Ins\u00e9rer le premier point
+insert_first_point_corner=Ins\u00e9rer le premier point de coin
+insert_first_point_scale=Precise punto origen recta escala
+insert_initial_point_axis=Ins\u00e9rer le point initial de l'axe de l'ellipse
+insert_last_point=Ins\u00e9rer le dernier point
+insert_last_point_axis=Ins\u00e9rer le dernier point de l'axe de l'ellipse
+insert_last_point_reference=Precise punto final recta referencia
+insert_last_point_scale=Precise punto final recta escala
+insert_length_or_point=Donner une longitude ou un point
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Ins\u00e9rer le point suivant, Arc[A] ou fermer la polyligne[C] o Terminer[T]
+insert_next_point_line_or_close=Ins\u00e9rer le point suivant, Ligne[A] ou fermer la polyligne[C] o Terminer[T]
+insert_next_point_selection_or_end_polygon=Ins\u00e9rer le point suivant,  terminer le polygone en cours
+insert_number_sides=Donner le nombre de c\u00f4t\u00e9s
+insert_opposited_corner=Ins\u00e9rer un coin oppos\u00e9
+insert_point=Ins\u00e9rer un point
+insert_point_corner_or_square=Ins\u00e9rer coin oppos\u00e9 ou un cadre[C]
+insert_point_move=Ins\u00e9rer un point de d\u00e9placement
+insert_point_or_end=
+insert_point_selection=Pr\u00e9ciser le point de s\u00e9lection
+insert_point_selection_or_types=Precise punto o Circunf.[IC], Fuera Rect.[OR], Pol\u00edg.[IP], Inter. pol.[CP], Fuera pol.[OP], Inter. circunf.[CC],Fuera circunf.[OC]
+insert_radius=Donner le rayon
+insert_radius_or_second_point=Ins\u00e9rer le rayon ou le deuxi\u00e8me point
+insert_reference_point_or_factor=Precise punto origen recta referencia o Factor de escala[F]
+insert_rotation_angle=Preciser l'angle de rotation
+insert_second_point=Ins\u00e9rer un deuxi\u00e8me point
+insert_second_point_angle=Ins\u00e9rer un deuxi\u00e8me point ou un angle
+insert_second_point_move=Pr\u00e9ciser le deuxi\u00e8me point de d\u00e9placement
+insert_second_point_selection=Pr\u00e9ciser le deuxi\u00e8me point du rectangle de s\u00e9lection
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Ins\u00e9rer un troisi\u00e8me point
+insertar_capa=
+insertar_en_la_vista_la_capa_creada=
+inside_circle=A l'int\u00e9rieur de  la circonf\u00e9rence
+inside_polygon=A l'int\u00e9rieur du polygone
+inter_arc=Arc interne
+inter_line=Ligne interne
+internal_polygon=
+internal_polygon_=Polygone interne
+into_circle=Inscrit
+into_circle_or_circumscribed=Inscrito en el c\u00edrculo[I] o Circunscrito[C]<C>
+intro_tablename=D\u00e9finir le nom de la couche \u00e0 importer. ATTENTION\: Si la table existe d\u00e9j\u00e0, elle sera supprim\u00e9e.
+join=Joindre
+join_=
+LayerName=
+length=Longueur
+length_of_field=
+line=
+line_=LIGNE
+line_type=Type de ligne
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modify=
+mostrar_rejilla=
+move=D\u00e9placer
+move_=DEPLACEMENT
+move_handlers=
+multi_type=Type multiple
+multipoint=
+multipoint_=
+multipoint_type=Type multipoint
+nearest_point=
+new_dxf=Nouveau DXF
+new_field=Nouvelle colonne
+new_layer=Nouvelle couche
+new_postgis=Nouveau Postgis
+new_shp=Nouveau SHP
+next=Suivant
+next_point_or_end=Point suivant ou terminer[E]
+next_previous_add_del_cancel=Point, Sommet suivant[S], Pr\u00e9c\u00e9dent[A], Ajouter[I] o Supprimer[E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=
+num_lados_insuficiente=
+out_circle=Exterieur au rayon
+out_polygon=Exterieur au polygone
+out_rectangle=Exterieur au rectangle
+parte1=
+parte2=
+pixel_point=
+point=Point
+point_=POINT
+point_type=Type de point
+polygon=Polygone
+polygon_=POLYGONE
+polygon_type=Type de polygone
+polyline=Polyligne
+polyline_=POLYLIGNE
+postgis=
+previous=Pr\u00e9c\u00e9dent
+realmente_desea_guardar_la_capa=
+rectangle=Rectangle
+rectangle_=RECTANGLE
+redo=Refaire
+redo_error=Erreur d'acc\u00e8s aux Drivers pour renouveler une commande
+reference=R\u00e9f\u00e9rence
+remove_geometry=
+rotate=Rotation
+rotate_=ROTATION
+scale=Echelle
+scale_=ECHELLE
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar=S\u00e9lectionner
+select_all=Tout s\u00e9lectionner
+select_charset_for_writing=
+select_driver=S\u00e9lectionner le driver
+select_from_point=S\u00e9lectionner \u00e0 partir d'un point
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=S\u00e9lectionner le type de g\u00e9om\u00e9trie
+select_handlers=Seleccionar handlers
+select_other_geometry_or_end=
+Selected=
+selection=S\u00e9lectionner
+selection_=SELECTIONNER
+Show\ Errors=
+shp=
+shp_files=Fichiers .shp
+simple=Simple
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=Carr\u00e9
+start_edition=Commencer l'\u00e9dition
+stop_edition=Terminer l'\u00e9dition
+stretch=Etirer
+stretch_=
+suprimir_objetos_origen=
+symmetry=Symetrie
+symmetry_=
+terminate=Terminer
+this_layer_is_not_self_editable=
+tolerancia_incorrecta=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Type
+undo=D\u00e9faire
+Unidades=Unit\u00e9s\:
+Vista=Vue
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1,221 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+add=Hinzuf\u00fcgen
+add_field=
+add_vertex=
+ajustar_rejilla=
+arc=
+arc_=ARC
+break=
+break_=Break
+cancel=Abbrechen
+cancelar_edicion=
+Layer=Layer
+capas_edition_cache=
+circle=
+circle_=
+circumscribed=
+Clean=
+close_polyline=
+commands_stack=
+complex_selection=
+complex_selection_=
+contiene_espacios_en_blanco=
+copy=
+copy_=
+cross_circle=
+cross_polygon=
+cut=
+define_fields=
+define_point=
+del=
+delete_field=
+deleted_feature=
+densityfication=Flatness
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+dxf=
+dxf_files=DXF files
+edit_vertex=
+edit_vertex_=
+Edition=
+Edition_Properties=
+ellipse=Elipse
+ellipse_=ELLIPSE
+end=
+end_polygon=
+enter_layer_name=
+enter_path_to_file=
+exploit=
+exploit_=
+export_to=Exportieren nach...
+exportando_features=
+exporting_=
+extend=
+extend_=
+factor=Factor
+features_desea_continuar=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=
+file=
+final_point=
+Flatness=
+geometry=Geometry
+gml=
+gml_files=
+Grid=
+guardar=
+incorrect_option=
+incorrect_point=
+incorrect_value=
+insert=
+insert_basis_point=
+insert_central_point_or_3p=
+insert_central_point_polygon=
+insert_destination_point=
+insert_distance_another_axis=
+insert_factor_or_reference=
+insert_first_point=
+insert_first_point_corner=
+insert_first_point_scale=
+insert_initial_point_axis=
+insert_last_point=
+insert_last_point_axis=
+insert_last_point_reference=
+insert_last_point_scale=
+insert_length_or_point=
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=
+insert_next_point_line_or_close=
+insert_next_point_selection_or_end_polygon=
+insert_number_sides=
+insert_opposited_corner=
+insert_point=
+insert_point_corner_or_square=
+insert_point_move=
+insert_point_or_end=
+insert_point_selection=
+insert_point_selection_or_types=
+insert_radius=
+insert_radius_or_second_point=
+insert_reference_point_or_factor=
+insert_rotation_angle=
+insert_second_point=
+insert_second_point_angle=
+insert_second_point_move=
+insert_second_point_selection=
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=
+insertar_capa=
+insertar_en_la_vista_la_capa_creada=
+inside_circle=
+inside_polygon=
+inter_arc=
+inter_line=
+internal_polygon=
+internal_polygon_=
+into_circle=
+into_circle_or_circumscribed=
+intro_tablename=Bitte den Namen der neuen Tabelle eingeben. ACHTUNG\: Wenn es bereits eine Tabelle dieses Namens gibt, wird sie gel\u00f6scht\!
+join=Verbindung
+join_=
+LayerName=
+length=
+length_of_field=
+line=
+line_=
+line_type=
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modify=
+mostrar_rejilla=
+move=
+move_=
+move_handlers=
+multi_type=
+multipoint=
+multipoint_=
+multipoint_type=
+nearest_point=
+new_dxf=
+new_field=
+new_layer=
+new_postgis=
+new_shp=
+next=Weiter
+next_point_or_end=
+next_previous_add_del_cancel=
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=
+num_lados_insuficiente=
+out_circle=
+out_polygon=
+out_rectangle=
+parte1=
+parte2=
+pixel_point=
+point=
+point_=
+point_type=
+polygon=
+polygon_=
+polygon_type=
+polyline=
+polyline_=
+postgis=
+previous=
+realmente_desea_guardar_la_capa=
+rectangle=
+rectangle_=
+redo=
+redo_error=
+reference=
+remove_geometry=
+rotate=
+rotate_=
+scale=Ma\u00dfstab
+scale_=
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar=
+select_all=Alle ausw\u00e4hlen
+select_charset_for_writing=
+select_driver=
+select_from_point=
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=
+select_handlers=
+select_other_geometry_or_end=
+Selected=
+selection=
+selection_=
+Show\ Errors=
+shp=
+shp_files=SHP files
+simple=Einfach
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=
+start_edition=
+stop_edition=
+stretch=
+stretch_=
+suprimir_objetos_origen=
+symmetry=
+symmetry_=
+terminate=Terminate
+this_layer_is_not_self_editable=
+tolerancia_incorrecta=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Typ
+undo=
+Unidades=Einheiten\:
+Vista=Ansicht
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1,221 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+add=Gehitu
+add_field=Gehitu eremua
+add_vertex=Gehitu erpina
+ajustar_rejilla=
+arc=
+arc_=ARKUA
+break=
+break_=Break
+cancel=Utzi
+cancelar_edicion=
+Layer=Geruza
+capas_edition_cache=
+circle=Zirkulua
+circle_=ZIRKULUA
+circumscribed=Zirkunskribatua
+Clean=
+close_polyline=Itxi polilinea
+commands_stack=Komando-pila
+complex_selection=Hautaketa konplexua
+complex_selection_=HAUTAKETA KONPLEXUA
+contiene_espacios_en_blanco=
+copy=Kopiatu
+copy_=KOPIATU
+cross_circle=Ebakidura/zirkunferentzian
+cross_polygon=Ebakidura/poligonoan
+cut=Ebaki
+define_fields=Zehaztu eremuak
+define_point=Zehaztu puntua
+del=Ezabatu
+delete_field=Ezabatu eremua
+deleted_feature=
+densityfication=Dentsifikazioa
+distance_x=
+distance_y=
+distancia_malla_incorrecta=
+dxf=
+dxf_files=.dxf fitxategiak
+edit_vertex=Editatu erpina
+edit_vertex_=EDITATU ERPINA
+Edition=
+Edition_Properties=
+ellipse=Elipsea
+ellipse_=ELIPSEA
+end=Bukatu
+end_polygon=Amaitu poligonoa
+enter_layer_name=Sartu geruzaren izena
+enter_path_to_file=Sartu fitxategiaren bidea
+exploit=Ustiatu
+exploit_=
+export_to=
+exportando_features=Funtzionalitateak esportatzen
+exporting_=Esportatzen
+extend=Luzatu
+extend_=
+factor=Faktorea
+features_desea_continuar=
+fichero_ya_existe_seguro_desea_guardarlo=
+field=Eremua
+file=Fitxategia
+final_point=
+Flatness=
+geometry=Geometria
+gml=
+gml_files=
+Grid=
+guardar=Gorde
+incorrect_option=Aukera okerra
+incorrect_point=
+incorrect_value=
+insert=Txertatu
+insert_basis_point=Zehaztu oinarri-puntua
+insert_central_point_or_3p=Txertatu erdiko puntua edo [3P]
+insert_central_point_polygon=Txertatu poligonoaren erdiko puntua
+insert_destination_point=Zehaztu xede-puntua
+insert_distance_another_axis=Txertatu beste ardatzarekiko distantzia
+insert_factor_or_reference=Zehaztu eskala-faktorea<2> edo erreferentzia[R]
+insert_first_point=Txertatu lehenengo puntua
+insert_first_point_corner=Txertatu izkinaren lehen puntua
+insert_first_point_scale=Zehaztu eskala-zuzenaren jatorri puntua
+insert_initial_point_axis=Txertatu elipsearen ardatzaren hasierako puntua
+insert_last_point=Txertatu azken puntua
+insert_last_point_axis=Txertatu elipsearen ardatzaren azken puntua
+insert_last_point_reference=Zehaztu zuzen horren azken puntua
+insert_last_point_scale=Zehaztu eskala-zuzenaren azken puntua
+insert_length_or_point=Txertatu luzera edo puntua
+insert_move_first_point=
+insert_move_last_point=
+insert_next_point_arc_or_close=Txertatu hurrengo puntua, arkua[A] edo Itxi polilinea[C] edo Amaitu[T]
+insert_next_point_line_or_close=Txertatu hurrengo puntua, lerroa[N], Itxi polilinea[C] edo Amaitu[T]
+insert_next_point_selection_or_end_polygon=Txertatu hurrengo puntua edo hautatutako poligonoa amaitu
+insert_number_sides=Txertatu alde kopurua
+insert_opposited_corner=Txertatu kontrako izkina
+insert_point=Txertatu puntua
+insert_point_corner_or_square=Txertatu aurkako izkinaren puntua edo laukia[C]
+insert_point_move=Txertatu desplazamendu-puntua
+insert_point_or_end=
+insert_point_selection=Zehaztu hautaketa-puntua
+insert_point_selection_or_types=Zehaztu puntua edo Zirkunf.[IC], Laukiz. kanpoan[OR], Polil.[IP], Pol. ebak.[CP], Pol. kanpoan[OP], Zirkunf. ebak.[CC],Zirkunf. kanpoan[OC]
+insert_radius=Zehaztu erradioa
+insert_radius_or_second_point=Txertatu erradioa edo bigarren puntua
+insert_reference_point_or_factor=Zehaztu zuzenaren jatorri-puntua edo eskala faktorea[F]
+insert_rotation_angle=Zehaztu biraketa angelua
+insert_second_point=Txertatu bigarren puntua
+insert_second_point_angle=Txertatu bigarren puntua edo angelua
+insert_second_point_move=Zehaztu desplazamenduaren bigarren puntua
+insert_second_point_selection=Zehaztu hautatutako laukizuzenaren bigarren puntua
+insert_selection_last_point=
+insert_selection_point=
+insert_third_point=Txertatu hirugarren puntua
+insertar_capa=
+insertar_en_la_vista_la_capa_creada=
+inside_circle=Zirkunferentziaren barruan
+inside_polygon=Poligonoaren barruan
+inter_arc=Barruko arkua
+inter_line=Barruko lerroa
+internal_polygon=
+internal_polygon_=Barruko poligonoa
+into_circle=Inskribatua
+into_circle_or_circumscribed=Zirkuluan inskribatua[I] edo zirkunskribatua[C]<C>
+intro_tablename=Sortuko duzun taularen izena sartu. OHARRA\: Taula aurretik badago, ezabatu egingo da.
+join=Lotu
+join_=
+LayerName=
+length=Tamaina
+length_of_field=
+line=Lerroa
+line_=LERROA
+line_type=Lerro mota
+max_length_is=
+MaxFeaturesEditionCache=
+minimum_size_of_line_incorrect=
+modify=
+mostrar_rejilla=
+move=Lekualdaketa
+move_=LEKUALDAKETA
+move_handlers=
+multi_type=Era anizkuna
+multipoint=
+multipoint_=
+multipoint_type=Era puntuanitza
+nearest_point=
+new_dxf=DXF berria
+new_field=Eremu berria
+new_layer=Geruza berria
+new_postgis=Postgis berria
+new_shp=SHP berria
+next=Hurrengoa
+next_point_or_end=Hurrengo puntua edo amaitu[E]
+next_previous_add_del_cancel=Puntua, Hurrengo erpina[S], Aurrekoa[A], Gehitu[I] edo Ezabatu[E]
+no_existe_writer_para_este_formato_de_capa_o_no_tiene_permisos_de_escritura_los_datos_no_se_guardaran_desea_continuar=
+no_puede_continuar=
+num_lados_insuficiente=
+out_circle=Zirkunferentziatik kanpo
+out_polygon=Poligonotik kanpo
+out_rectangle=Laukizuzenetik kanpo
+parte1=
+parte2=
+pixel_point=
+point=Puntua
+point_=PUNTUA
+point_type=Puntu mota
+polygon=Poligonoa
+polygon_=POLIGONOA
+polygon_type=Poligono mota
+polyline=Polilinea
+polyline_=
+postgis=
+previous=Aurrekoa
+realmente_desea_guardar_la_capa=
+rectangle=Laukizuzena
+rectangle_=LAUKIZUZENA
+redo=Berregin
+redo_error=Errorea komando bat berregiteko driverrak atzitzean
+reference=Erreferentzia
+remove_geometry=
+rotate=Biratu
+rotate_=BIRATU
+scale=Eskala
+scale_=ESKALA
+se_van_a_guardar_=
+seleccion_compleja=
+seleccionar=Hautatu
+select_all=Hautatu dena
+select_charset_for_writing=
+select_driver=Hautatu driverra
+select_from_point=Hautatu puntu batetik aurrera
+select_geometry=
+select_geometry_to_extend=
+select_geometry_type=Hautatu geometria mota
+select_handlers=Hautatu maneiatzailea
+select_other_geometry_or_end=
+Selected=
+selection=Hautatu
+selection_=HAUTATU
+Show\ Errors=
+shp=
+shp_files=.shp fitxategiak
+simple=Bakuna
+specifies_the_minimum_size_of_the_lines_that_will_form_the_curves=
+square=Izkina
+start_edition=Hasi edizioa
+stop_edition=Amaitu edizioa
+stretch=Tiratu
+stretch_=TIRATU
+suprimir_objetos_origen=
+symmetry=Simetria
+symmetry_=
+terminate=Amaitu
+this_layer_is_not_self_editable=
+tolerancia_incorrecta=
+Topology=
+Triangulation=
+two_or_more_fields_with_the_same_name=
+type=Mota
+undo=Desegin
+Unidades=Unitateak\:
+Vista=Bista
+warning_title=
+will_be_truncated=

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,660 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<alternativeNames name="org.gvsig.editing"/>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+    <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
+    <depends plugin-name="org.gvsig.exportto.app.mainplugin" />
+	<resourceBundle name="text"/>
+	<extensions>
+
+		<extension class-name="org.gvsig.editing.StartEditing"
+			description="Extensi�n encargada de comenzar la edici�n sobre la capa activa."
+			active="true">
+
+            <action
+                name="layer-start-editing"
+                label="start_edition"
+                tooltip="start_edition"
+                position="600700000"
+                action-command="layer-start-editing"
+                icon="layer-start-editing"
+                accelerator=""
+                />
+            <menu
+                name="layer-start-editing"
+                text="Layer/start_edition"
+                />
+		</extension>
+
+		<extension class-name="org.gvsig.editing.StopEditing"
+			description="Extensi�n encargada de terminar la edici�n sobre la capa activa y guardarla sobre s� misma."
+			active="true">
+
+            <action
+                name="layer-stop-editing"
+                label="stop_edition"
+                tooltip="stop_edition"
+                position="600800000"
+                action-command="layer-stop-editing"
+                icon="layer-stop-editing"
+                accelerator=""
+                />
+            <menu
+                name="layer-stop-editing"
+                text="Layer/stop_edition"
+                />
+		</extension>
+
+        <!-- ================== -->
+		<extension class-name="org.gvsig.editing.CADExtension"
+			description="Extensi�n encargada de gestionar los eventos realizados sobre las geometr�as."
+			active="true">
+
+            <action
+                name="layer-modify-copy"
+                label="_Copy_geometry"
+                tooltip="_Copy_geometry"
+                position="601100100"
+                action-command="layer-modify-copy"
+                icon="layer-modify-copy"
+                accelerator=""
+                />
+
+            <action
+                name="layer-modify-symmetry"
+                label="_Symmetry_geometry"
+                tooltip="_Symmetry_geometry"
+                position="601101100"
+                action-command="layer-modify-symmetry"
+                icon="layer-modify-symmetry"
+                accelerator=""
+                />
+
+            <action
+                name="layer-modify-rotate"
+                label="_Rotate_geometry"
+                tooltip="_Rotate_geometry"
+                position="601100800"
+                action-command="layer-modify-rotate"
+                icon="layer-modify-rotate"
+                accelerator=""
+                />
+
+            <action
+                name="layer-modify-scale"
+                label="_Scale_geometry"
+                tooltip="_Scale_geometry"
+                position="601100900"
+                action-command="layer-modify-scale"
+                icon="layer-modify-scale"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-copy"
+                text="Layer/Modify/_Copy"
+                />
+
+            <menu
+                name="layer-modify-symmetry"
+                text="Layer/Modify/_Symmetry"
+                />
+
+            <menu
+                name="layer-modify-rotate"
+                text="Layer/Modify/_Rotate"
+                />
+
+            <menu
+                name="layer-modify-scale"
+                text="Layer/Modify/_Scale"
+                />
+
+            <tool-bar name="layer_modify">
+                <selectable-tool
+                    name="layer-modify-copy"
+                    />
+                <selectable-tool
+                    name="layer-modify-symmetry"
+                    />
+                <selectable-tool
+                    name="layer-modify-rotate"
+                    />
+                <selectable-tool
+                    name="layer-modify-scale"
+                    />
+            </tool-bar>
+		</extension>
+
+
+
+
+
+
+		<extension class-name="org.gvsig.editing.ExploitExtension"
+			description="Extensi�n encargada de simplificar geometr�as complejas."
+			active="true">
+
+            <action
+                name="layer-modify-explode"
+                label="_Explode_geometry"
+                tooltip="_Explode_geometry"
+                position="601100300"
+                action-command="layer-modify-explode"
+                icon="layer-modify-explode"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-explode"
+                text="Layer/Modify/_Explode"
+                />
+
+            <tool-bar name="layer_modify">
+                <action-tool
+                    name="layer-modify-explode"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.MoveGeometryExtension"
+			description="Extensi�n encargada de mover las geometr�as."
+			active="true">
+
+            <action
+                name="layer-modify-move"
+                label="_Move_geometry"
+                tooltip="_Move_geometry"
+                position="601100700"
+                action-command="layer-modify-move"
+                icon="layer-modify-move"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-move"
+                text="Layer/Modify/_Move"
+                />
+
+            <tool-bar name="layer_modify">
+                <selectable-tool
+                    name="layer-modify-move"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.InsertPointExtension"
+			description="Extensi�n encargada de insertar puntos en una capa en edici�n."
+			active="true">
+
+            <action
+                name="layer-insert-point"
+                label="_Insert_point"
+                tooltip="_Insert_point"
+                position="601000700"
+                action-command="layer-insert-point"
+                icon="layer-insert-point"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-insert-point"
+                text="Layer/Insert/_Point"
+                />
+
+            <tool-bar name="layer_insert">
+                <selectable-tool
+                    name="layer-insert-point"
+                    />
+            </tool-bar>
+		</extension>
+
+
+		<extension class-name="org.gvsig.editing.InsertMultiPointExtension"
+			description="Extensi�n encargada de insertar multipuntos en una capa en edici�n."
+			active="true">
+
+            <action
+                name="layer-insert-multipoint"
+                label="_Insert_multipoint"
+                tooltip="_Insert_multipoint"
+                position="601000600"
+                action-command="layer-insert-multipoint"
+                icon="layer-insert-multipoint"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-insert-multipoint"
+                text="Layer/Insert/_Multipoint"
+                />
+
+            <tool-bar name="layer_insert">
+                <selectable-tool
+                    name="layer-insert-multipoint"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.InsertLineExtension"
+			description="Extensi�n encargada de insertar l�neas en una capa en edici�n."
+			active="true">
+
+            <action
+                name="layer-insert-line"
+                label="_Insert_line"
+                tooltip="_Insert_line"
+                position="601000500"
+                action-command="layer-insert-line"
+                icon="layer-insert-line"
+                accelerator=""
+                />
+
+            <action
+                name="layer-insert-arc"
+                label="_Insert_arc"
+                tooltip="_Insert_arc"
+                position="601000200"
+                action-command="layer-insert-arc"
+                icon="layer-insert-arc"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-insert-line"
+                text="Layer/Insert/_Line"
+                />
+
+            <menu
+                name="layer-insert-arc"
+                text="Layer/Insert/_Arc"
+                />
+
+            <tool-bar name="layer_insert">
+                <selectable-tool
+                    name="layer-insert-line"
+                    />
+                <selectable-tool
+                    name="layer-insert-arc"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.InsertPolyLineExtension"
+			description="Extensi�n encargada de insertar polil�neas en una capa en edici�n."
+			active="true">
+
+            <action
+                name="layer-insert-polyline"
+                label="_Insert_polyline"
+                tooltip="_Insert_polyline"
+                position="601000900"
+                action-command="layer-insert-polyline"
+                icon="layer-insert-polyline"
+                accelerator=""
+                />
+
+            <action
+                name="layer-insert-spline"
+                label="_Insert_spline"
+                tooltip="_Insert_spline"
+                position="601001100"
+                action-command="layer-insert-spline"
+                icon="layer-insert-spline"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-insert-polyline"
+                text="Layer/Insert/_Polyline"
+                />
+
+            <menu
+                name="layer-insert-spline"
+                text="Layer/Insert/_Spline"
+                />
+
+            <tool-bar name="layer_insert">
+                <selectable-tool
+                    name="layer-insert-polyline"
+                    />
+                <selectable-tool
+                    name="layer-insert-spline"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.InsertPolygonExtension"
+			description="Extensi�n encargada de insertar poligonos en una capa en edici�n."
+			active="true">
+
+            <action
+                name="layer-insert-polygon"
+                label="_Insert_polygon"
+                tooltip="_Insert_polygon"
+                position="601000800"
+                action-command="layer-insert-polygon"
+                icon="layer-insert-polygon"
+                accelerator=""
+                />
+
+            <action
+                name="layer-insert-rectangle"
+                label="_Insert_rectangle"
+                tooltip="_Insert_rectangle"
+                position="601001000"
+                action-command="layer-insert-rectangle"
+                icon="layer-insert-rectangle"
+                accelerator=""
+                />
+
+            <action
+                name="layer-insert-circle"
+                label="_Insert_circle"
+                tooltip="_Insert_circle"
+                position="601000300"
+                action-command="layer-insert-circle"
+                icon="layer-insert-circle"
+                accelerator=""
+                />
+
+            <action
+                name="layer-insert-ellipse"
+                label="_Insert_ellipse"
+                tooltip="_Insert_ellipse"
+                position="601000400"
+                action-command="layer-insert-ellipse"
+                icon="layer-insert-ellipse"
+                accelerator=""
+                />
+
+            <action
+                name="layer-modify-edit-vertex"
+                label="_Modify_vertex"
+                tooltip="_Modify_vertex"
+                position="601100200"
+                action-command="layer-modify-edit-vertex"
+                icon="layer-modify-edit-vertex"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-insert-polygon"
+                text="Layer/Insert/_Polygon"
+                />
+
+            <menu
+                name="layer-insert-rectangle"
+                text="Layer/Insert/_Rectangle"
+                />
+
+            <menu
+                name="layer-insert-circle"
+                text="Layer/Insert/_Circle"
+                />
+
+            <menu
+                name="layer-insert-ellipse"
+                text="Layer/Insert/_Ellipse"
+                />
+
+            <menu
+                name="layer-modify-edit-vertex"
+                text="Layer/Modify/_Edit_vertex"
+                />
+
+            <tool-bar name="layer_insert">
+                <selectable-tool
+                    name="layer-insert-polygon"
+                    />
+                <selectable-tool
+                    name="layer-insert-rectangle"
+                    />
+                <selectable-tool
+                    name="layer-insert-circle"
+                    />
+                <selectable-tool
+                    name="layer-insert-ellipse"
+                    />
+            </tool-bar>
+            <tool-bar name="layer_modify">
+                <selectable-tool
+                    name="layer-modify-edit-vertex"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.JoinExtension"
+			description="Extensi�n encargada de unir varias geometr�a en edici�n."
+			active="true">
+
+            <action
+                name="layer-modify-join"
+                label="_Modify_join"
+                tooltip="_Modify_join"
+                position="601100500"
+                action-command="layer-modify-join"
+                icon="layer-modify-join"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-join"
+                text="Layer/Modify/_Join"
+                />
+
+            <tool-bar name="layer_modify">
+                <action-tool
+                    name="layer-modify-join"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.InternalPolygonExtension"
+			description="Extensi�n encargada de insertar poligonos internos en una capa en edici�n."
+			active="true">
+
+            <action
+                name="layer-modify-internal-polygon"
+                label="_Modify_internal_polygon"
+                tooltip="_Modify_internal_polygon"
+                position="601100400"
+                action-command="layer-modify-internal-polygon"
+                icon="layer-modify-internal-polygon"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-internal-polygon"
+                text="Layer/Modify/_Internal_polygon"
+                />
+
+            <tool-bar name="layer_modify">
+                <selectable-tool
+                    name="layer-modify-internal-polygon"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.StretchExtension"
+			description="Extensi�n encargada de estirar geometr�as en una capa en edici�n."
+			active="true">
+
+            <action
+                name="layer-modify-stretch"
+                label="_Stretch_geometry"
+                tooltip="_Stretch_geometry"
+                position="601101200"
+                action-command="layer-modify-stretch"
+                icon="layer-modify-stretch"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-stretch"
+                text="Layer/Modify/_Stretch"
+                />
+
+            <tool-bar name="layer_modify">
+                <selectable-tool
+                    name="layer-modify-stretch"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.ComplexSelectionGeometryExtension"
+			description="Extensi�n encargada de la selecci�n compleja de geometr�as."
+			active="true">
+
+            <action
+                name="selection-complex"
+                label="_Complex_selection"
+                tooltip="_Complex_selection"
+                position="300800000"
+                action-command="selection-complex"
+                icon="selection-complex"
+                accelerator=""
+                />
+
+            <menu
+                name="selection-complex"
+                text="Selection/_Complex"
+                />
+
+            <tool-bar name="view_selection">
+                <selectable-tool name="selection-complex" />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.SelectionGeometryExtension"
+			description="Extensi�n encargada de seleccionar las geometr�as."
+			active="true">
+
+
+            <action
+                name="selection-simple"
+                label="_Simple_selection_move_vertex"
+                tooltip="_Simple_selection_move_vertex"
+                position="300700000"
+                action-command="selection-simple"
+                icon="selection-simple"
+                accelerator=""
+                />
+
+            <menu
+                name="selection-simple"
+                text="Selection/_Simple_move_vertex"
+                />
+
+            <tool-bar name="view_selection">
+                <selectable-tool name="selection-simple" />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.MatrixExtension"
+			description="Extensi�n encargada de crear una matriz a partir de la geometr�a seleccionada."
+			active="true">
+
+            <action
+                name="layer-modify-matrix"
+                label="_Matrix"
+                tooltip="_Matrix"
+                position="601100600"
+                action-command="layer-modify-matrix"
+                icon="layer-modify-matrix"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-matrix"
+                text="Layer/Modify/_Matrix"
+                />
+
+            <tool-bar name="layer_modify">
+                <selectable-tool
+                    name="layer-modify-matrix"
+                    />
+            </tool-bar>
+		</extension>
+
+		<extension class-name="org.gvsig.editing.AutoCompletePolygonExtension"
+			description="Extensi�n encargada de restablecer la selecci�n anterior."
+			active="true">
+
+
+            <action
+                name="layer-insert-autopolygon"
+                label="_Insert_autopolygon"
+                tooltip="_Insert_autopolygon"
+                position="601100100"
+                action-command="layer-insert-autopolygon"
+                icon="layer-insert-autopolygon"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-insert-autopolygon"
+                text="Layer/Insert/_Autopolygon"
+                />
+
+            <tool-bar name="layer_insert">
+                <selectable-tool
+                    name="layer-insert-autopolygon"
+                    />
+            </tool-bar>
+		</extension>
+
+        <extension class-name="org.gvsig.editing.SplitGeometryCADToolExtension"
+            description="herramienta para dividir una geometria con una linea"
+            active="true">
+
+            <action
+                name="layer-modify-split"
+                label="_Split_geometry"
+                tooltip="_Split_geometry"
+                position="601101000"
+                action-command="layer-modify-split"
+                icon="layer-modify-split"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-split"
+                text="Layer/Modify/_Split"
+                />
+
+            <tool-bar name="layer_modify">
+                <action-tool
+                    name="layer-modify-split"
+                    />
+            </tool-bar>
+        </extension>
+
+	</extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-line.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-line.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-polygon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-polygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-matrix.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-matrix.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-point.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-move.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-move.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-spline.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-spline.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-polyline.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-polyline.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-copy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-copy.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-ellipse.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-ellipse.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-stretch.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-stretch.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/edit-redo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/edit-redo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/selection-simple.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/selection-simple.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-circle.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-circle.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-multipoint.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-multipoint.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-rectangle.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-rectangle.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-arc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-arc.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-scale.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-scale.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-symmetry.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-symmetry.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/selection-complex.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/selection-complex.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-split.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-split.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-autopolygon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-insert-autopolygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-rotate.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-rotate.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-join.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-join.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-edit-vertex.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-edit-vertex.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-explode.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-explode.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-internal-polygon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-internal-polygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/editing-tools/layer-modify-matrix-addpoint.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/editing-tools/layer-modify-matrix-addpoint.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/editing-tools/layer-modify-matrix-lagxy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/editing-tools/layer-modify-matrix-lagxy.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/preferences/editing-properties.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/resources-plugin/images/preferences/editing-properties.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>net.sf.smc:smc</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EditVertexCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EditVertexCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EditVertexCADTool.sm	(revision 42196)
@@ -0,0 +1,102 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start EditVertex::SelectVertexOrDelete
+%class EditVertexCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.EditVertexCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map EditVertex
+%%
+// A task begins life in suspended animation.
+
+SelectVertexOrDelete
+	Entry {
+		selection();
+		setQuestion(
+			PluginServices.getText(this,"point")+", "+
+		    PluginServices.getText(this,"next")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
+		     PluginServices.getText(this,"previous")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
+		     PluginServices.getText(this,"add")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		     PluginServices.getText(this,"del")+
+		    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
+		setDescription(new String[]{"next","previous","add","del","cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SelectVertexOrDelete {
+				setQuestion(PluginServices.getText(this,"select_from_point"));
+				setDescription(new String[]{"next","previous","add","del","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+		addOption(s:String)
+		[s.equals("i") || s.equals("I") || s.equals(PluginServices.getText(this,"add"))]
+			AddVertex {
+				setQuestion(PluginServices.getText(this,"add_vertex"));
+				setDescription(new String[]{"cancel"});
+				addOption(s);
+				}
+		addOption(s:String)
+		[!s.equals("i") && !s.equals("I") && !s.equals(PluginServices.getText(this,"add"))]
+
+			SelectVertexOrDelete {
+				setQuestion(
+					PluginServices.getText(this,"point")+", "+
+				    PluginServices.getText(this,"next")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.nextvertex")+"], "+
+				     PluginServices.getText(this,"previous")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.previousvertex")+"], "+
+				     PluginServices.getText(this,"add")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.addvertex")+"] "+
+				    PluginServices.getText(this,"cad.or")+" "+
+				     PluginServices.getText(this,"del")+
+				    "["+PluginServices.getText(this,"EditVertexCADTool.delvertex")+"]");
+				setDescription(new String[]{"next","previous","add","del","cancel"});
+				addOption(s);
+				}
+	}
+
+AddVertex{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+			SelectVertexOrDelete {
+				setQuestion(PluginServices.getText(this,"select_from_point"));
+				setDescription(new String[]{"next","previous","add","del","cancel"});
+				addPoint( pointX,pointY,event);
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		SelectVertexOrDelete{
+			end();
+			}
+	addOption(s:String)
+		SelectVertexOrDelete{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		SelectVertexOrDelete{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		SelectVertexOrDelete{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/BreakCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/BreakCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/BreakCADTool.sm	(revision 42196)
@@ -0,0 +1,96 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Break::FirstPoint
+%class BreakCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.BreakCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Break
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			[ctxt.intersects(pointX,pointY)]
+			SecondPoint {
+				setQuestion(PluginServices.getText(this,"insert_second_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			[!ctxt.intersects(pointX,pointY)]
+			FirstPoint {
+				setQuestion(PluginServices.getText(this,"insert_first_point"));
+				setDescription(new String[]{"cancel"});
+				}
+		addOption(s:String)
+			FirstPoint {
+				setQuestion(PluginServices.getText(this,"insert_first_point"));
+				setDescription(new String[]{"cancel"});
+				addOption(s);
+				}
+	}
+
+
+SecondPoint
+{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+			[ctxt.intersects(pointX,pointY)]
+			FirstPoint {
+				setQuestion(PluginServices.getText(this,"insert_first_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				end();
+				}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+			[!ctxt.intersects(pointX,pointY)]
+			SecondPoint {
+				setQuestion(PluginServices.getText(this,"insert_second_point"));
+				setDescription(new String[]{"cancel"});
+			}
+		addOption(s:String)
+			FirstPoint {
+				setQuestion(PluginServices.getText(this,"insert_first_point"));
+				setDescription(new String[]{"cancel"});
+				addOption(s);
+				}
+}
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			end();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ExploitCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ExploitCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ExploitCADTool.sm	(revision 42196)
@@ -0,0 +1,50 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Exploit::Execute
+%class ExploitCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.ExploitCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Exploit
+%%
+// A task begins life in suspended animation.
+
+Execute
+	Entry {
+		exploit();
+		end();
+		}
+	Exit{
+		}
+
+	{
+	}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		Execute{
+			end();
+			}
+	addOption(s:String)
+		Execute{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		Execute{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		Execute{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/InternalPolygonCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/InternalPolygonCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/InternalPolygonCADTool.sm	(revision 42196)
@@ -0,0 +1,76 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start InternalPolygon::AddNextPoint
+%class InternalPolygonCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.InternalPolygonCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map InternalPolygon
+%%
+// A task begins life in suspended animation.
+
+AddNextPoint
+	Entry {
+		selection();
+		setQuestion(
+			PluginServices.getText(this,"next_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"end")+
+		    "["+PluginServices.getText(this,"InternalPolygonCADTool.end")+"]");
+		setDescription(new String[]{"end","cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			AddNextPoint {
+				setQuestion(
+					PluginServices.getText(this,"next_point")+" "+
+		    		PluginServices.getText(this,"cad.or")+" "+
+		    		PluginServices.getText(this,"end")+
+		    		"["+PluginServices.getText(this,"InternalPolygonCADTool.end")+"]");
+				setDescription(new String[]{"end","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+		addOption(s:String)
+			AddNextPoint {
+				setQuestion(
+					PluginServices.getText(this,"next_point")+" "+
+		    		PluginServices.getText(this,"cad.or")+" "+
+		    		"["+PluginServices.getText(this,"InternalPolygonCADTool.end")+"]");
+				setDescription(new String[]{"end","cancel"});
+				addOption(s);
+				}
+	}
+
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		AddNextPoint{
+			end();
+			}
+	addOption(s:String)
+		AddNextPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		AddNextPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		AddNextPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SelectionCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SelectionCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SelectionCADTool.sm	(revision 42196)
@@ -0,0 +1,151 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Selection::FirstPoint
+%class SelectionCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.SelectionCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+
+%map Selection
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+  Entry {
+    setQuestion(
+    PluginServices.getText(this,"insert_point_selection"));
+    setDescription(new String[]{"cancel"});
+    }
+  Exit{
+    }
+
+  {
+
+    addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.getType().equals(PluginServices.getText(this,"simple")) && ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.SecondPoint")]
+      SecondPoint{
+        setQuestion(PluginServices.getText(this,"insert_second_point"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+        }
+    addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.getType().equals(PluginServices.getText(this,"simple")) && ctxt.getNextState().equals("Selection.WithSelectedFeatures")]
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+        end();
+        }
+}
+
+SecondPoint{
+  // Si hemos conseguido seleccionar algo
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.selectWithSecondPoint(pointX,pointY, event) > 0]
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+        end();
+        }
+  // Si no lo hemos conseguido
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      FirstPoint {
+        setQuestion(PluginServices.getText(this,"insert_point_selection"));
+        setDescription(new String[]{"cancel"});
+        addPoint(pointX,pointY,event);
+        }
+  addOption(s:String)
+      FirstPoint{
+        setQuestion(PluginServices.getText(this,"insert_point_selection"));
+        setDescription(new String[]{"cancel"});
+        setType(s);
+        }
+
+}
+WithSelectedFeatures{
+
+  // Si hemos pinchado encima de un handler
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+  [ctxt.selectHandlers(pointX, pointY, event)>0]
+      WithHandlers {
+        setQuestion(PluginServices.getText(this,"insert_destination_point"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+        // refresh();
+        }
+
+  // Si no hemos cogido un handler, probamos a seleccionar
+  // otra entidad
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+    [ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.WithSelectedFeatures")]
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+        }
+
+
+  // Cualquier otro caso (hemos pinchado en algo vacio), volvemos al estado inicial
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      FirstPoint {
+        setQuestion(PluginServices.getText(this,"insert_point_selection"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+        // refresh();
+        }
+	 addOption(s:String)
+      FirstPoint{
+        setQuestion(PluginServices.getText(this,"insert_point_selection"));
+        setDescription(new String[]{"cancel"});
+        setType(s);
+        }
+}
+
+WithHandlers{
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+        refresh();
+        }
+}
+
+Default
+{
+	addOption(s:String)
+      [s.equals("")]
+      FirstPoint{
+        restorePreviousTool();
+        setQuestion(PluginServices.getText(this,"insert_point_selection"));
+        setDescription(new String[]{"cancel"});
+        end();
+        }
+  addOption(s:String)
+    [s.equals(PluginServices.getText(this,"cancel"))]
+    FirstPoint{
+      end();
+      }
+    addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ScaleCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ScaleCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ScaleCADTool.sm	(revision 42196)
@@ -0,0 +1,138 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Scale::PointMain
+%class ScaleCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.ScaleCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Scale
+%%
+// A task begins life in suspended animation.
+
+PointMain
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_basis_point"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			ScaleFactorOrReference {
+				setQuestion(
+					PluginServices.getText(this,"insert_factor")+ " "+
+					PluginServices.getText(this,"cad.or")+" "+
+					PluginServices.getText(this,"reference")+
+					PluginServices.getText(this,"ScaleCADTool.reference"));
+				setDescription(new String[]{"reference","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+ScaleFactorOrReference{
+	addValue(d:double)
+		PointMain{
+			addValue(d);
+			end();
+			refresh();
+			}
+	addOption(s:String)
+		[s.equals(null) || s.equals("")]
+		PointMain{
+			addOption(s);
+			end();
+			refresh();
+			}
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"ScaleCADTool.reference")) || s.equals(PluginServices.getText(this,"reference"))]
+		PointOriginOrScaleFactor{
+			setQuestion(
+				PluginServices.getText(this,"insert_reference_point")+ " "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"factor")+
+				"["+PluginServices.getText(this,"ScaleCADTool.factor")+"]");
+			setDescription(new String[]{"factor","cancel"});
+			//addOption(s);
+			}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		PointMain {
+			addPoint( pointX,pointY,event);
+			end();
+			refresh();
+			}
+}
+PointOriginOrScaleFactor{
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"ScaleCADTool.factor")) || s.equals(PluginServices.getText(this,"factor"))]
+		PointMain{
+			setQuestion(
+				PluginServices.getText(this,"insert_factor")+ " "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"reference")+
+				"["+PluginServices.getText(this,"ScaleCADTool.reference")+"]");
+			setDescription(new String[]{"reference","cancel"});
+			addOption(s);
+			}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		EndPointReference {
+			setQuestion(PluginServices.getText(this,"insert_last_point_reference"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+EndPointReference{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		OriginPointScale {
+			setQuestion(PluginServices.getText(this,"insert_first_point_scale"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+OriginPointScale{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		EndPointScale {
+			setQuestion(PluginServices.getText(this,"insert_last_point_scale"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+EndPointScale{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		PointMain {
+			addPoint( pointX,pointY,event);
+			end();
+			refresh();
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		PointMain{
+			end();
+			}
+	addOption(s:String)
+		PointMain{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		PointMain{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		PointMain{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PolygonCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PolygonCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PolygonCADTool.sm	(revision 42196)
@@ -0,0 +1,116 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Polygon::NumberOrCenterPoint
+%class PolygonCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.PolygonCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Polygon
+%%
+// A task begins life in suspended animation.
+
+NumberOrCenterPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_number_sides"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit{
+		}
+
+	{
+		addValue(d:double)
+			[d<3]
+			NumberOrCenterPoint{
+				throwValueException(PluginServices.getText(this,"num_lados_insuficiente"),d);
+			}
+		addValue(d:double)
+			[d>2]
+			CenterPoint {
+				setQuestion(PluginServices.getText(this,"insert_central_point_polygon"));
+				setDescription(new String[]{"cancel"});
+				addValue(d);
+				}
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			OptionOrRadiusOrPoint {
+				setQuestion(
+					PluginServices.getText(this,"into_circle")+" "+
+					"["+PluginServices.getText(this,"PolygonCADTool.into_circle")+"]"+
+	    			PluginServices.getText(this,"cad.or")+" "+
+	    			PluginServices.getText(this,"circumscribed")+
+	   				"["+PluginServices.getText(this,"PolygonCADTool.circumscribed")+"]");
+				setDescription(new String[]{"into_circle","circumscribed","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+
+	}
+CenterPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		OptionOrRadiusOrPoint {
+			setQuestion(
+				PluginServices.getText(this,"into_circle")+" "+
+				"["+PluginServices.getText(this,"PolygonCADTool.into_circle")+"]"+
+	    		PluginServices.getText(this,"cad.or")+" "+
+	    		PluginServices.getText(this,"circumscribed")+
+	   			"["+PluginServices.getText(this,"PolygonCADTool.circumscribed")+"]");
+			setDescription(new String[]{"into_circle","circumscribed","cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+OptionOrRadiusOrPoint{
+	addOption(s:String)
+		[!s.equals(PluginServices.getText(this,"cancel"))]
+		RadiusOrPoint {
+			setQuestion(PluginServices.getText(this,"insert_radius"));
+			setDescription(new String[]{"cancel"});
+			addOption(s);
+			}
+	addValue(d:double)
+		NumberOrCenterPoint{
+			addValue(d);
+			}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		NumberOrCenterPoint {
+			addPoint( pointX,pointY,event);
+			}
+}
+RadiusOrPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		NumberOrCenterPoint {
+			addPoint( pointX,pointY,event);
+			}
+	addValue(d:double)
+		NumberOrCenterPoint{
+			addValue(d);
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		NumberOrCenterPoint{
+			end();
+			}
+	addOption(s:String)
+		NumberOrCenterPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		NumberOrCenterPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		NumberOrCenterPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/LineCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/LineCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/LineCADTool.sm	(revision 42196)
@@ -0,0 +1,94 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Line::FirstPoint
+%class LineCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.LineCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Line
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit{
+		}
+
+	{
+
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPointOrAngle {
+				setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+
+	}
+SecondPointOrAngle{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		SecondPointOrAngle {
+			setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+	addValue( d:double)
+		LenghtOrPoint {
+			setQuestion(PluginServices.getText(this,"insert_length_or_point"));
+			setDescription(new String[]{"cancel"});
+			addValue( d);
+			}
+
+}
+LenghtOrPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		SecondPointOrAngle {
+			setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+	addValue( d:double)
+		SecondPointOrAngle {
+			setQuestion(PluginServices.getText(this,"insert_second_point_angle"));
+			setDescription(new String[]{"cancel"});
+			addValue( d);
+			}
+	}
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			end();
+			}
+	addOption(s:String)
+		[s.equals("")]
+		FirstPoint{
+			end();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SymmetryCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SymmetryCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SymmetryCADTool.sm	(revision 42196)
@@ -0,0 +1,81 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Symmetry::FirstPoint
+%class SymmetryCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.SymmetryCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Symmetry
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPoint {
+				setQuestion(PluginServices.getText(this,"insert_second_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+SecondPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		CutOrCopy {
+			setQuestion(
+				PluginServices.getText(this,"del_original_geometries")+" "+
+				PluginServices.getText(this,"yes")+
+				"["+PluginServices.getText(this,"SymmetryCADTool.yes")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"no")+
+				"["+PluginServices.getText(this,"SymmetryCADTool.no")+"]");
+			setDescription(new String[]{"cancel","cut","copy"});
+			addPoint( pointX,pointY,event);
+			}
+}
+CutOrCopy{
+	addOption(s:String)
+		FirstPoint{
+			setDescription(new String[]{"cancel"});
+			addOption(s);
+			end();
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			end();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PointCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PointCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PointCADTool.sm	(revision 42196)
@@ -0,0 +1,60 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Point::FirstPoint
+%class PointCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.PointCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+
+%map Point
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"define_point"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit {
+		}
+
+	{
+
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			FirstPoint {
+				setQuestion(PluginServices.getText(this,"insert_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			end();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SplineCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SplineCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SplineCADTool.sm	(revision 42196)
@@ -0,0 +1,105 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Spline::FirstPoint
+%class SplineCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.SplineCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Spline
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			NextPoint{
+				setQuestion(
+					PluginServices.getText(this,"insert_next_point")+", "+
+					PluginServices.getText(this,"close")+" "+
+					"["+PluginServices.getText(this,"SplineCADTool.close")+"] "+
+					PluginServices.getText(this,"cad.or")+" "+
+					PluginServices.getText(this,"end")+" "+
+					"["+PluginServices.getText(this,"SplineCADTool.end")+"]");
+				setDescription(new String[]{"close","terminate","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+NextPoint{
+
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"SplineCADTool.close")) || s.equals(PluginServices.getText(this,"close"))]
+		FirstPoint {
+			addOption(s);
+			closeGeometry();
+			endGeometry();
+			end();
+			}
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"SplineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate"))]
+		FirstPoint {
+			addOption(s);
+			endGeometry();
+			end();
+			}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		NextPoint {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"close")+" "+
+				"["+PluginServices.getText(this,"SplineCADTool.close")+"] "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+" "+
+				"["+PluginServices.getText(this,"SplineCADTool.end")+"]");
+			setDescription(new String[]{"close","terminate","cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			cancel();
+			}
+	addOption(s:String)
+		[s.equals("")]
+		FirstPoint{
+			endGeometry();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+	endPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			addPoint( pointX,pointY,event);
+			endGeometry();
+			}
+
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PolylineCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PolylineCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/PolylineCADTool.sm	(revision 42196)
@@ -0,0 +1,242 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Polyline::FirstPoint
+%class PolylineCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.PolylineCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Polyline
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			[ctxt.isPolygonLayer()]
+			NextPointOrArcOrClose{
+				setQuestion(
+					PluginServices.getText(this,"insert_next_point")+", "+
+				    PluginServices.getText(this,"arc")+
+				    "["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				    PluginServices.getText(this,"cad.or")+" "+
+				    PluginServices.getText(this,"end")+
+				   	"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+				setDescription(new String[]{"inter_arc","terminate","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			NextPointOrArcOrClose{
+				setQuestion(
+					PluginServices.getText(this,"insert_next_point")+", "+
+				    PluginServices.getText(this,"arc")+
+				    "["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				    PluginServices.getText(this,"close_polyline")+
+				    "["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				    PluginServices.getText(this,"cad.or")+" "+
+				    PluginServices.getText(this,"end")+
+				   	"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+				setDescription(new String[]{"inter_arc","close_polyline","terminate","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+NextPointOrArcOrClose{
+	addOption(s:String)
+		[ctxt.isPolygonLayer() && (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.arc")) || s.equals(PluginServices.getText(this,"inter_arc")))]
+		NextPointOrLineOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_line","terminate","cancel"});
+			addOption(s);
+			}
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.arc")) || s.equals(PluginServices.getText(this,"inter_arc"))]
+		NextPointOrLineOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_line","close_polyline","terminate","cancel"});
+			addOption(s);
+			}
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.close_polyline")) || s.equals(PluginServices.getText(this,"close_polyline"))]
+		FirstPoint {
+			addOption(s);
+			closeGeometry();
+			endGeometry();
+			end();
+			}
+	addOption(s:String)
+		[(s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate"))) && ctxt.getLinesCount()!=0 ]
+		FirstPoint {
+			addOption(s);
+			endGeometry();
+			end();
+			}
+	addOption(s:String)
+		[!s.equals(PluginServices.getText(this,"cancel"))]
+		NextPointOrArcOrClose {
+		}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		[ctxt.isPolygonLayer()]
+		NextPointOrArcOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_arc","terminate","cancel"});
+			addPoint( pointX,pointY,event);
+			}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		NextPointOrArcOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_arc","close_polyline","terminate","cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+NextPointOrLineOrClose{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		[ctxt.isPolygonLayer()]
+		NextPointOrLineOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_line","terminate","cancel"});
+			addPoint( pointX,pointY,event);
+			}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		NextPointOrLineOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"line")+
+				"["+PluginServices.getText(this,"PolylineCADTool.line")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_line","close_polyline","terminate","cancel"});
+			addPoint( pointX,pointY,event);
+			}
+	addOption(s:String)
+		[ctxt.isPolygonLayer() && (s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.line")) || s.equals(PluginServices.getText(this,"inter_line")))]
+		NextPointOrArcOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_arc","terminate","cancel"});
+			addOption(s);
+			}
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.line")) || s.equals(PluginServices.getText(this,"inter_line"))]
+		NextPointOrArcOrClose {
+			setQuestion(
+				PluginServices.getText(this,"insert_next_point")+", "+
+				PluginServices.getText(this,"arc")+
+				"["+PluginServices.getText(this,"PolylineCADTool.arc")+"], "+
+				PluginServices.getText(this,"close_polyline")+
+				"["+PluginServices.getText(this,"PolylineCADTool.close_polyline")+"], "+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"PolylineCADTool.end")+"]");
+			setDescription(new String[]{"inter_arc","close_polyline","terminate","cancel"});
+			addOption(s);
+			}
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.close_polyline")) || s.equals(PluginServices.getText(this,"close_polyline"))]
+		FirstPoint {
+			addOption(s);
+			closeGeometry();
+			endGeometry();
+			end();
+			}
+	addOption(s:String)
+		[(s.equalsIgnoreCase(PluginServices.getText(this,"PolylineCADTool.end")) || s.equals(PluginServices.getText(this,"terminate"))) && ctxt.getLinesCount()!=0]
+		FirstPoint {
+			addOption(s);
+			endGeometry();
+			end();
+			}
+	addOption(s:String)
+		[!s.equals(PluginServices.getText(this,"cancel"))]
+		NextPointOrLineOrClose {
+		}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			cancel();
+			}
+	addOption(s:String)
+		[s.equals("")]
+		FirstPoint{
+			endGeometry();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+	endPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			addPoint( pointX,pointY,event);
+			endGeometry();
+			}
+
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EllipseCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EllipseCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EllipseCADTool.sm	(revision 42196)
@@ -0,0 +1,78 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Ellipse::FirstPointAxis
+%class EllipseCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.EllipseCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Ellipse
+%%
+// A task begins life in suspended animation.
+
+FirstPointAxis
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_initial_point_axis"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPointAxis {
+				setQuestion(PluginServices.getText(this,"insert_last_point_axis"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+
+	}
+SecondPointAxis{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		DistanceOtherAxis {
+			setQuestion(PluginServices.getText(this,"insert_distance_another_axis"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+
+}
+DistanceOtherAxis{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		FirstPointAxis {
+			addPoint( pointX,pointY,event);
+			}
+	addValue( d:double)
+		FirstPointAxis {
+			addValue( d);
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPointAxis{
+			end();
+			}
+	addOption(s:String)
+		FirstPointAxis{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPointAxis{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPointAxis{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/RotateCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/RotateCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/RotateCADTool.sm	(revision 42196)
@@ -0,0 +1,75 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Rotate::PointMain
+%class RotateCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.RotateCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Rotate
+%%
+// A task begins life in suspended animation.
+
+PointMain
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_basis_point"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			AngleOrPoint {
+				setQuestion(PluginServices.getText(this,"insert_rotation_angle"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+AngleOrPoint{
+	addValue(d:double)
+		PointMain{
+			setDescription(new String[]{"cancel"});
+			addValue(d);
+			end();
+			refresh();
+			}
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		PointMain {
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			end();
+			refresh();
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		PointMain{
+			end();
+			}
+	addOption(s:String)
+		PointMain{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		PointMain{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		PointMain{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/JoinCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/JoinCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/JoinCADTool.sm	(revision 42196)
@@ -0,0 +1,50 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Join::Execute
+%class JoinCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.JoinCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Join
+%%
+// A task begins life in suspended animation.
+
+Execute
+    Entry {
+        join();
+        end();
+        }
+    Exit{
+        }
+
+    {
+    }
+
+Default
+{
+    addOption(s:String)
+        [s.equals(PluginServices.getText(this,"cancel"))]
+        Execute{
+            end();
+            }
+    addOption(s:String)
+        Execute{
+            throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+            }
+    addValue(d:double)
+        Execute{
+            throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+            }
+    addPoint(pointX:double,pointY:double,event:InputEvent)
+        Execute{
+            throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+            }
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/CircleCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/CircleCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/CircleCADTool.sm	(revision 42196)
@@ -0,0 +1,99 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Circle::CenterPointOr3p
+%class CircleCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.CircleCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Circle
+%%
+// A task begins life in suspended animation.
+
+CenterPointOr3p
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_central_point_or_3p")+
+		"["+PluginServices.getText(this,"CircleCADTool.3p")+"]");
+		setDescription(new String[]{"cancel","3P"});
+		}
+	Exit{
+		}
+
+	{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+			PointOrRadius {
+				setQuestion(PluginServices.getText(this,"insert_radius_or_second_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	addOption( s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"CircleCADTool.3p"))]
+			FirstPoint{
+				setQuestion(PluginServices.getText(this,"insert_first_point"));
+				setDescription(new String[]{"cancel"});
+				addOption( s);
+			}
+}
+PointOrRadius{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		CenterPointOr3p {
+			addPoint( pointX,pointY,event);
+			}
+	addValue( d:double)
+		CenterPointOr3p {
+			addValue( d);
+			}
+}
+SecondPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		ThirdPoint {
+			setQuestion(PluginServices.getText(this,"insert_third_point"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+ThirdPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		CenterPointOr3p {
+			addPoint( pointX,pointY,event);
+			}
+}
+
+FirstPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		SecondPoint {
+			setQuestion(PluginServices.getText(this,"insert_second_point"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		CenterPointOr3p{
+			end();
+			}
+	addOption(s:String)
+		CenterPointOr3p{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		CenterPointOr3p{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		CenterPointOr3p{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/smc.bat
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/smc.bat	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/smc.bat	(revision 42196)
@@ -0,0 +1,25 @@
+@REM
+@REM gvSIG. Desktop Geographic Information System.
+@REM
+@REM Copyright (C) 2007-2013 gvSIG Association.
+@REM
+@REM This program is free software; you can redistribute it and/or
+@REM modify it under the terms of the GNU General Public License
+@REM as published by the Free Software Foundation; either version 3
+@REM of the License, or (at your option) any later version.
+@REM
+@REM This program is distributed in the hope that it will be useful,
+@REM but WITHOUT ANY WARRANTY; without even the implied warranty of
+@REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+@REM GNU General Public License for more details.
+@REM
+@REM You should have received a copy of the GNU General Public License
+@REM along with this program; if not, write to the Free Software
+@REM Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+@REM MA  02110-1301, USA.
+@REM
+@REM For any additional information, do not hesitate to contact us
+@REM at info AT gvsig.com, or visit our website www.gvsig.com.
+@REM
+
+java -jar ../lib/Smc.jar -d ../src/gen -java *.sm
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MultiPointCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MultiPointCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MultiPointCADTool.sm	(revision 42196)
@@ -0,0 +1,73 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start MultiPoint::InsertPoint
+%class MultiPointCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.MultiPointCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+
+%map MultiPoint
+%%
+// A task begins life in suspended animation.
+
+InsertPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_point"));
+		setDescription(new String[]{"cancel",});
+		}
+	Exit {
+		}
+
+	{
+
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			InsertPoint {
+				setQuestion(
+				 	PluginServices.getText(this,"insert_point")+" "+
+	    			PluginServices.getText(this,"cad.or")+" "+
+	    			PluginServices.getText(this,"end")+
+	   				"["+PluginServices.getText(this,"MultipointCADTool.end")+"]");
+
+				setDescription(new String[]{"cancel","end"});
+				addPoint( pointX,pointY,event);
+				}
+		addOption( s:String)
+			[s.equalsIgnoreCase(PluginServices.getText(this,"MultipointCADTool.end")) || s.equals(PluginServices.getText(this,"end"))]
+			InsertPoint {
+				setQuestion(PluginServices.getText(this,"insert_point"));
+				setDescription(new String[]{"cancel"});
+				addOption(s);
+				endGeometry();
+				}
+	}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		InsertPoint{
+			end();
+			}
+	addOption(s:String)
+		InsertPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		InsertPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		InsertPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MatrixCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MatrixCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MatrixCADTool.sm	(revision 42196)
@@ -0,0 +1,76 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Matrix::Start
+%class MatrixCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.MatrixCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Matrix
+%%
+// A task begins life in suspended animation.
+
+Start
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPoint {
+				setQuestion(PluginServices.getText(this,"insert_second_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+
+	}
+
+FirstPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		SecondPoint {
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+SecondPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		FirstPoint {
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			endMatrix();
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		Start{
+			end();
+			}
+	addOption(s:String)
+		Start{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		Start{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		Start{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/RectangleCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/RectangleCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/RectangleCADTool.sm	(revision 42196)
@@ -0,0 +1,84 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Rectangle::FirstPoint
+%class RectangleCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.RectangleCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Rectangle
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point_corner"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit{
+		}
+
+	{
+
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPointOrSquare {
+				setQuestion(
+					PluginServices.getText(this,"insert_point_corner")+" "+
+					PluginServices.getText(this,"cad.or")+" "+
+					PluginServices.getText(this,"square")+" "+
+					"["+PluginServices.getText(this,"RectangleCADTool.square")+"]");
+				setDescription(new String[]{"square","cancel"});
+				addPoint( pointX,pointY,event);
+				}
+
+	}
+SecondPointOrSquare{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		FirstPoint {
+			addPoint(pointX,pointY,event);
+			}
+	addOption(s:String)
+		[s.equalsIgnoreCase(PluginServices.getText(this,"RectangleCADTool.square")) || s.equals(PluginServices.getText(this,"square"))]
+		SecondPointSquare {
+			setQuestion(PluginServices.getText(this,"insert_opposited_corner"));
+			setDescription(new String[]{"cancel"});
+			addOption(s);
+			}
+
+}
+SecondPointSquare{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		FirstPoint {
+			addPoint( pointX,pointY,event);
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			end();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ArcCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ArcCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ArcCADTool.sm	(revision 42196)
@@ -0,0 +1,73 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Arc::FirstPoint
+%class ArcCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.ArcCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Arc
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+	Entry {
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point"));
+		setDescription(new String[]{"cancel"});
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPoint {
+				setQuestion(PluginServices.getText(this,"insert_second_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+
+	}
+SecondPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		ThirdPoint {
+			setQuestion(PluginServices.getText(this,"insert_last_point"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+ThirdPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		FirstPoint {
+			addPoint( pointX,pointY,event);
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPoint{
+			end();
+			}
+	addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MoveCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MoveCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/MoveCADTool.sm	(revision 42196)
@@ -0,0 +1,68 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Move::FirstPointToMove
+%class MoveCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.MoveCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Move
+%%
+// A task begins life in suspended animation.
+
+FirstPointToMove
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_point_move"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPointToMove {
+				setQuestion(PluginServices.getText(this,"insert_second_point_move"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+SecondPointToMove{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		FirstPointToMove {
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			end();
+			refresh();
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPointToMove{
+			end();
+			}
+	addOption(s:String)
+		FirstPointToMove{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPointToMove{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPointToMove{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SplitGeometryCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SplitGeometryCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/SplitGeometryCADTool.sm	(revision 42196)
@@ -0,0 +1,106 @@
+%{
+/**
+ Finite state machine, generated with fsm tool
+ (http://smc.sourceforge.net)
+ @author Alvaro Zabala
+*/
+%}
+
+%start SplitGeometry::FirstPoint
+%class SplitGeometryCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.SplitGeometryCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+
+%map SplitGeometry
+%%
+
+
+
+FirstPoint
+
+  Entry {
+    setQuestion(PluginServices.getText(this,"insert_first_point"));
+    setDescription(new String[]{"cancel"});
+  }
+
+  Exit{}
+
+  {
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      DigitizingLine{
+        setQuestion(PluginServices.getText(this,"insert_more_points_or_finish"));
+        setDescription(new String[]{"cancel"});
+        addPoint( pointX,pointY,event);
+      }
+  }
+
+
+DigitizingLine{
+  /**
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+  [ctxt.isDigitingFinished()]
+  FirstPoint{
+   			finishDigitizedLine();
+   			splitSelectedGeometryWithDigitizedLine();
+   			end();
+   }
+   */
+
+   addOption(s:String)
+   [s.equalsIgnoreCase(PluginServices.getText(this,"SplitGeometryCADTool.end")) || s.equalsIgnoreCase(PluginServices.getText(this,"terminate"))]
+	FirstPoint {
+		finishDigitizedLine();
+   		splitSelectedGeometryWithDigitizedLine();
+   		end();
+	}
+
+
+   addPoint( pointX:double,pointY:double,event:InputEvent)
+   DigitizingLine{
+   		setQuestion(
+				PluginServices.getText(this,"insert_next_point")+
+				PluginServices.getText(this,"cad.or")+" "+
+				PluginServices.getText(this,"end")+
+				"["+PluginServices.getText(this,"SplitGeometryCADTool.end")+"]"
+		);
+		setDescription(new String[]{"inter_arc","terminate","cancel"});
+		addPoint( pointX,pointY,event);
+   }
+}
+
+Default{
+
+  addOption(s:String)
+  [s.equals("")]
+  FirstPoint{
+    restorePreviousTool();
+    setQuestion(PluginServices.getText(this,"insert_first_point"));
+    setDescription(new String[]{"cancel"});
+    end();
+   }
+
+  addOption(s:String)
+  [s.equals(PluginServices.getText(this,"cancel"))]
+  FirstPoint{
+      end();
+  }
+
+addOption(s:String)
+	FirstPoint{
+		throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+		}
+
+addValue(d:double)
+	FirstPoint{
+		throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+		}
+
+addPoint(pointX:double,pointY:double,event:InputEvent)
+	FirstPoint{
+		throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+		}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/CopyCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/CopyCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/CopyCADTool.sm	(revision 42196)
@@ -0,0 +1,68 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Copy::FirstPointToMove
+%class CopyCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.CopyCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Copy
+%%
+// A task begins life in suspended animation.
+
+FirstPointToMove
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_point_move"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPointToMove {
+				setQuestion(PluginServices.getText(this,"insert_second_point_move"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+SecondPointToMove{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		FirstPointToMove {
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			end();
+			refresh();
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		FirstPointToMove{
+			end();
+			}
+	addOption(s:String)
+		FirstPointToMove{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPointToMove{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPointToMove{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/StretchCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/StretchCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/StretchCADTool.sm	(revision 42196)
@@ -0,0 +1,84 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Stretch::SelFirstPoint
+%class StretchCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.StretchCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Stretch
+%%
+// A task begins life in suspended animation.
+
+SelFirstPoint
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_selection_point"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SelLastPoint {
+				setQuestion(PluginServices.getText(this,"insert_selection_last_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+	}
+SelLastPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		MoveFirstPoint {
+			setQuestion(PluginServices.getText(this,"insert_move_first_point"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+MoveFirstPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		MoveLastPoint {
+			setQuestion(PluginServices.getText(this,"insert_move_last_point"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+MoveLastPoint{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		SelFirstPoint {
+			setQuestion(PluginServices.getText(this,"insert_selection_point"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			end();
+			refresh();
+			}
+}
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		SelFirstPoint{
+			end();
+			}
+	addOption(s:String)
+		SelFirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		SelFirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		SelFirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ComplexSelectionCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ComplexSelectionCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/ComplexSelectionCADTool.sm	(revision 42196)
@@ -0,0 +1,413 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Selection::FirstPoint
+%class ComplexSelectionCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.ComplexSelectionCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+
+%map Selection
+%%
+// A task begins life in suspended animation.
+
+FirstPoint
+
+  Entry {
+    setQuestion(
+	    PluginServices.getText(this,"insert_point")+" "+
+	    PluginServices.getText(this,"cad.or")+" "+
+	    PluginServices.getText(this,"circle")+
+	    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+	    PluginServices.getText(this,"out_rectangle")+
+	    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+	    PluginServices.getText(this,"polygon")+
+	    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+	    PluginServices.getText(this,"cross_polygon")+
+	   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+	    "#"+PluginServices.getText(this,"out_polygon")+
+	   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+	    PluginServices.getText(this,"cross_circle")+
+	   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+		PluginServices.getText(this,"out_circle")+
+	   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+    setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+    }
+  Exit{
+    }
+
+  {
+    addOption(s:String)
+      FirstPoint{
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addOption(s);
+        }
+    addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.getType().equals(PluginServices.getText(this,"out_rectangle"))]
+      SecondPointOutRectangle{
+        setQuestion(PluginServices.getText(this,"insert_second_point_selection"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        }
+    addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.getType().equals(PluginServices.getText(this,"inside_circle")) || ctxt.getType().equals(PluginServices.getText(this,"cross_circle")) || ctxt.getType().equals(PluginServices.getText(this,"out_circle"))]
+      SecondPointCircle{
+        setQuestion(PluginServices.getText(this,"insert_second_point_selection"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        }
+    addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.getType().equals(PluginServices.getText(this,"inside_polygon")) || ctxt.getType().equals(PluginServices.getText(this,"cross_polygon")) || ctxt.getType().equals(PluginServices.getText(this,"out_polygon"))]
+      NextPointPolygon{
+        setQuestion(
+        	PluginServices.getText(this,"insert_next_point_selection_or_end_polygon")+
+        	"["+PluginServices.getText(this,"ComplexSelectionCADTool.end")+"]");
+        setDescription(new String[]{"end_polygon","out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        }
+
+    addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.getType().equals(PluginServices.getText(this,"simple")) && ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.SecondPoint")]
+      SecondPoint{
+        setQuestion(PluginServices.getText(this,"insert_second_point_selection"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        }
+//    addPoint( pointX:double,pointY:double,event:InputEvent)
+//      [ctxt.getType().equals(PluginServices.getText(this,"simple")) && ctxt.getNextState().equals("Selection.WithSelectedFeatures")]
+//      WithSelectedFeatures {
+//        setQuestion(PluginServices.getText(this,"select_handlers"));
+//        setDescription(new String[]{"simple","out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+//        addPoint( pointX,pointY,event);
+//        end();
+//        }
+}
+
+SecondPoint{
+  // Si hemos conseguido seleccionar algo
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.selectWithSecondPoint(pointX,pointY, event) > 0]
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        end();
+        }
+  // Si no lo hemos conseguido
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      FirstPoint {
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint(pointX,pointY,event);
+        }
+  addOption(s:String)
+      FirstPoint{
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"end_polygon","out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        setType(s);
+        }
+
+}
+WithSelectedFeatures{
+
+  // Si hemos pinchado encima de un handler
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+  [ctxt.selectHandlers(pointX, pointY, event)>0]
+      WithHandlers {
+        setQuestion(PluginServices.getText(this,"insert_destination_point"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        // refresh();
+        }
+
+  // Si no hemos cogido un handler, probamos a seleccionar
+  // otra entidad
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+    [ctxt.selectFeatures(pointX,pointY, event) && ctxt.getNextState().equals("Selection.WithSelectedFeatures")]
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        }
+
+
+  // Cualquier otro caso (hemos pinchado en algo vacio), volvemos al estado inicial
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      FirstPoint {
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        // refresh();
+        }
+	 addOption(s:String)
+      FirstPoint{
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"end_polygon","out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        setType(s);
+        }
+}
+
+WithHandlers{
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        refresh();
+        }
+}
+
+SecondPointOutRectangle{
+  // Si hemos conseguido seleccionar algo
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.selectWithSecondPointOutRectangle(pointX,pointY, event) > 0]
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        end();
+        }
+  // Si no lo hemos conseguido
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      FirstPoint {
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint(pointX,pointY,event);
+        }
+  addOption(s:String)
+      FirstPoint{
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"end_polygon","out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        setType(s);
+        }
+
+}
+SecondPointCircle{
+  // Si hemos conseguido seleccionar algo
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      [ctxt.selectWithCircle(pointX,pointY, event) > 0]
+      WithSelectedFeatures {
+        setQuestion(PluginServices.getText(this,"select_handlers"));
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint( pointX,pointY,event);
+        end();
+        }
+  // Si no lo hemos conseguido
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      FirstPoint {
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint(pointX,pointY,event);
+        }
+  addOption(s:String)
+      FirstPoint{
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        setType(s);
+        }
+}
+
+NextPointPolygon{
+  addPoint( pointX:double,pointY:double,event:InputEvent)
+      NextPointPolygon {
+        setQuestion(PluginServices.getText(this,"insert_next_point_selection_or_end_polygon")+
+        	"["+PluginServices.getText(this,"ComplexSelectionCADTool.end")+"]");
+        setDescription(new String[]{"end_polygon","out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addPoint(pointX,pointY,event);
+        }
+  addOption(s:String)
+      FirstPoint{
+        setQuestion(
+			PluginServices.getText(this,"insert_point")+" "+
+		    PluginServices.getText(this,"cad.or")+" "+
+		    PluginServices.getText(this,"circle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.introcircle")+"], "+
+		    PluginServices.getText(this,"out_rectangle")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.outrectangle")+"], "+
+		    PluginServices.getText(this,"polygon")+
+		    "["+PluginServices.getText(this,"ComplexSelectionCADTool.intropolygon")+"], "+
+		    PluginServices.getText(this,"cross_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosspolygon")+"], "+"\n"+
+		    "#"+PluginServices.getText(this,"out_polygon")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outpolygon")+"], "+
+		    PluginServices.getText(this,"cross_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.crosscircle")+"], "+
+			PluginServices.getText(this,"out_circle")+
+		   	"["+PluginServices.getText(this,"ComplexSelectionCADTool.outcircle")+"]");
+        setDescription(new String[]{"end_polygon","out_rectangle","inside_polygon","cross_polygon","out_polygon","inside_circle","cross_circle","out_circle","select_all","cancel"});
+        addOption(s);
+        }
+}
+
+Default
+{
+  addOption(s:String)
+    [s.equals(PluginServices.getText(this,"cancel"))]
+    FirstPoint{
+      end();
+      }
+     addOption(s:String)
+		FirstPoint{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		FirstPoint{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		FirstPoint{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/buildSMC.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/buildSMC.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/buildSMC.xml	(revision 42196)
@@ -0,0 +1,56 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project default="generate">
+	<property name="smfiles" location="../lib/Smc.jar" />
+	<property name="javafiles" location="../src/com/iver/cit/gvsig/gui/cad/tools/smc" />
+
+	<target name="generate">
+		<apply executable="java">
+			<arg value="-jar" />
+			<arg value="../lib/Smc.jar"/>
+			<arg value="-java"/>
+			<arg value="-d" />
+			<arg value="../src/com/iver/cit/gvsig/gui/cad/tools/smc" />
+			<fileset dir="." includes="*.sm"/>
+		</apply>
+	</target>
+	<target name="html">
+		<apply executable="java">
+			<arg value="-jar" />
+			<arg value="../lib/Smc.jar"/>
+			<arg value="-table"/>
+			<fileset dir="." includes="*.sm"/>
+		</apply>
+	</target>
+	<target name="dot">
+		<apply executable="java">
+			<arg value="-jar" />
+			<arg value="../lib/Smc.jar"/>
+			<arg value="-graph"/>
+			<fileset dir="." includes="*.sm"/>
+		</apply>
+	</target>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/buildSMC.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EquidistanceCADTool.sm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EquidistanceCADTool.sm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/src/main/sm/EquidistanceCADTool.sm	(revision 42196)
@@ -0,0 +1,82 @@
+// -*- tab-width: 4; -*-
+
+%{
+//
+// Vicente Caballero Navarro
+%}
+
+%start Equidistance::Distance
+%class EquidistanceCADTool
+%package com.iver.cit.gvsig.gui.cad.tools.smc
+%import com.iver.cit.gvsig.gui.cad.tools.EquidistanceCADTool
+%import java.awt.event.InputEvent
+%import com.iver.andami.PluginServices
+
+%map Equidistance
+%%
+// A task begins life in suspended animation.
+
+Distance
+	Entry {
+		selection();
+		setQuestion(
+		PluginServices.getText(this,"insert_first_point_or_distance"));
+		setDescription(new String[]{"cancel"});
+
+		}
+	Exit{
+		}
+
+	{
+
+		addPoint( pointX:double,pointY:double,event:InputEvent)
+			SecondPointDistance {
+				setQuestion(PluginServices.getText(this,"insert_second_point"));
+				setDescription(new String[]{"cancel"});
+				addPoint( pointX,pointY,event);
+				}
+		addValue(d:double)
+			Position{
+				setQuestion(PluginServices.getText(this,"position"));
+				setDescription(new String[]{"cancel"});
+				addValue(d);
+				}
+	}
+SecondPointDistance{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		Position {
+			setQuestion(PluginServices.getText(this,"position"));
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			}
+}
+Position{
+	addPoint( pointX:double,pointY:double,event:InputEvent)
+		Distance{
+			setDescription(new String[]{"cancel"});
+			addPoint( pointX,pointY,event);
+			end();
+			}
+}
+
+Default
+{
+	addOption(s:String)
+		[s.equals(PluginServices.getText(this,"cancel"))]
+		Distance{
+			end();
+			}
+	addOption(s:String)
+		Distance{
+			throwOptionException(PluginServices.getText(this,"incorrect_option"),s);
+			}
+	addValue(d:double)
+		Distance{
+			throwValueException(PluginServices.getText(this,"incorrect_value"),d);
+			}
+	addPoint(pointX:double,pointY:double,event:InputEvent)
+		Distance{
+			throwPointException(PluginServices.getText(this,"incorrect_point"),pointX,pointY);
+			}
+}
+%%
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.editing.app.mainplugin</artifactId>
+  <name>Tools: Geometry editing (DEPRECATED)</name>
+  <description>
+This plugin add graphic editing support for vectorial layers.
+Add tools to:
+- Insert drawing elements (point, line, polyline, polygon, etc.)
+- Insert geometric elements (circle, rectangle, ellipse, etc.)
+- Copy / move / rotate / scale graphic elements..
+- Vertex editing
+- Undo / redo
+- Command history
+- Snapping
+  </description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.editing.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+     <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.document.table.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.control</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jwizardcomponent</groupId>
+      <artifactId>jwizardcomponent</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>net.sf.smc</groupId>
+      <artifactId>smc</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+  </dependencies>
+
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.document.table.app.mainplugin -ge 2, required: org.gvsig.exportto.app.extension -ge 1</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>View,Vector</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.editing</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app/org.gvsig.editing.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.editing.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:53 CEST 2015
+buildNumber=123

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.app.document.table">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,64 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StartEditingTableException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StartEditingTableException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StartEditingTableException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.exceptions;
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class StartEditingTableException extends TableEditingException {
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 8031152738000164873L;
+
+    public StartEditingTableException(String table, Throwable exception) {
+        super(table, exception);
+        init();
+        initCause(exception);
+    }
+
+    private void init() {
+        messageKey = "error_start_editing_table";
+        formatString = "Can�t start editing the table: %(table) ";
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StartEditingTableException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/TableEditingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/TableEditingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/TableEditingException.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.exceptions;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class TableEditingException extends BaseException {
+
+    private static final long serialVersionUID = -3672330283934624242L;
+    private static final String KEY = "error_editing_table";
+    private static final String FORMAT = "Can't edit the table: %(table) ";
+
+    public TableEditingException(String table, Throwable exception) {
+        super(FORMAT, exception, KEY, serialVersionUID);
+        setValue("table", table);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/TableEditingException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.landregistryviewer package documentation</title>
+</head>
+<body>
+
+	<p>Table document exceptions</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/CancelEditingTableException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/CancelEditingTableException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/CancelEditingTableException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.exceptions;
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class CancelEditingTableException extends TableEditingException {
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 5231674331725098637L;
+
+    public CancelEditingTableException(String table, Throwable exception) {
+        super(table, exception);
+        init();
+        initCause(exception);
+    }
+
+    private void init() {
+        messageKey = "error_cancel_editing_table";
+        formatString = "Can�t cancel editing the table: %(table) ";
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/CancelEditingTableException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StopEditingTableException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StopEditingTableException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StopEditingTableException.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.exceptions;
+
+/**
+ * @author Vicente Caballero Navarro
+ */
+public class StopEditingTableException extends TableEditingException {
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 1663393663065092896L;
+
+    public StopEditingTableException(String table, Throwable exception) {
+        super(table, exception);
+        init();
+        initCause(exception);
+    }
+
+    private void init() {
+        messageKey = "error_stop_editing_table";
+        formatString = "Can�t stop editing the table: %(table) ";
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/exceptions/StopEditingTableException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableManager.java	(revision 42196)
@@ -0,0 +1,305 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.table;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.AbstractDocument;
+import org.gvsig.app.project.documents.AbstractDocumentManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.actions.CopyDocumentAction;
+import org.gvsig.app.project.documents.actions.CutDocumentAction;
+import org.gvsig.app.project.documents.actions.PasteDocumentAction;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.gui.WindowLayout;
+import org.gvsig.app.project.documents.table.TableDocument.TableLink;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.app.project.documents.table.gui.TableProperties;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.VectorLayer;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * Factory of Table.
+ * 
+ * @author 2005- Vicente Caballero
+ * @author 2009- Joaquin del Cerro
+ * 
+ */
+public class TableManager extends AbstractDocumentManager {
+
+    public static final String PERSISTENCE_TABLE_DOCUMENT_DEFINITION_NAME =
+        "TableDocument";
+    public static final String PERSISTENCE_TABLELINK_DEFINITION_NAME =
+        "TableLink";
+
+    public static String TYPENAME = "project.document.table";
+
+    private DynStruct persistenceDefinition = null;
+
+    public ImageIcon getIcon() {
+    	return IconThemeHelper.getImageIcon("document-table-icon");
+    }
+
+    public ImageIcon getIconSelected() {
+        return IconThemeHelper.getImageIcon("document-table-icon-sel");
+    }
+
+    public String getTitle() {
+        return PluginServices.getText(this, "Tabla");
+    }
+
+    public String getTypeName() {
+        return TYPENAME;
+    }
+
+    public int getPriority() {
+        return 1;
+    }
+
+    public Iterator<? extends Document> createDocumentsByUser() {
+        AddLayerDialog fopen = null;
+        try {
+            fopen =
+                new AddLayerDialog(PluginServices.getText(this, "Nueva_tabla"));
+            List<WizardPanel> wizards =
+                ApplicationLocator.getManager().getWizardPanels();
+            WizardPanel panel;
+            Iterator<WizardPanel> iter = wizards.iterator();
+            while (iter.hasNext()) {
+                panel = iter.next();
+                fopen.addWizardTab(panel.getTabName(), panel);
+                panel.initWizard();
+            }
+            PluginServices.getMDIManager().addWindow(fopen);
+            if (fopen.isAccepted()) {
+                panel = (WizardPanel) fopen.getSelectedTab();
+                @SuppressWarnings("unchecked")
+                List<TableDocument> docs =
+                    (List<TableDocument>) panel.executeWizard();
+                return docs.iterator();
+            }
+        } catch (Exception e) {
+            NotificationManager.addError(e);
+        } finally {
+            if (fopen != null) {
+                fopen.dispose();
+                fopen = null;
+            }
+        }
+        return null;
+    }
+
+    public AbstractDocument createDocumentByUser() {
+        return (AbstractDocument) createDocumentsByUser().next();
+    }
+
+    /**
+     * Registers in the points of extension the Factory with alias.
+     * 
+     */
+    public static void register() {
+
+        TableManager factory = new TableManager();
+        // A�adimos nuestra extension para el tratamiento de la apertura de
+        // ficheros
+        // dentro de gvSIG
+        ToolsLocator.getExtensionPointManager().add("FileTableOpenDialog", "")
+            .append("FileOpenTable", "", FilesystemExplorerWizardPanel.class);
+
+		IconThemeHelper.registerIcon("document", "document-table-icon", TableManager.class);
+        IconThemeHelper.registerIcon("document", "document-table-icon-sel", TableManager.class);
+        IconThemeHelper.registerIcon("document", "document-table-icon-small", TableManager.class);
+
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        manager.registerFactory(factory);
+
+        if (factory.persistenceDefinition == null) {
+            DynObjectManager dynman = ToolsLocator.getDynObjectManager();
+            factory.persistenceDefinition =
+                dynman.createDynClass(PersistenceManager.PERSISTENCE_NAMESPACE,
+                    PERSISTENCE_TABLE_DOCUMENT_DEFINITION_NAME,
+                    "Table document Persistence definition");
+            factory.persistenceDefinition.extend(manager
+                .getDefinition(AbstractDocument.PERSISTENCE_DEFINITION_NAME));
+
+            factory.persistenceDefinition.addDynFieldObject("store")
+                .setClassOfValue(FeatureStore.class).setMandatory(true);
+            factory.persistenceDefinition.addDynFieldString("featureTypeId")
+                .setMandatory(false);
+            factory.persistenceDefinition.addDynFieldArray("attributeNames")
+                .setClassOfItems(String.class).setMandatory(false);
+            factory.persistenceDefinition.addDynFieldObject("associatedLayer")
+                .setClassOfValue(FLyrVect.class).setMandatory(false);
+            factory.persistenceDefinition.addDynFieldObject("query")
+                .setClassOfValue(FeatureQuery.class).setMandatory(false);
+            factory.persistenceDefinition.addDynFieldObject("baseFilter")
+                .setClassOfValue(Evaluator.class).setMandatory(false);
+            factory.persistenceDefinition.addDynFieldObject("baseOrder")
+                .setClassOfValue(FeatureQueryOrder.class).setMandatory(false);
+            factory.persistenceDefinition.addDynFieldList("linkTable")
+                .setClassOfItems(TableLink.class).setMandatory(false);          
+        }
+        
+        
+        //Register also the TableLink
+        if (manager.getDefinition(PERSISTENCE_TABLELINK_DEFINITION_NAME) == null){
+            DynStruct tableLinkDefinition =
+                manager.addDefinition(TableLink.class,
+                    PERSISTENCE_TABLELINK_DEFINITION_NAME,
+                    "TableLink Persistence definition", null, null);                 
+            
+            tableLinkDefinition.addDynFieldObject("source")
+                .setClassOfValue(TableDocument.class).setMandatory(true);
+            tableLinkDefinition.addDynFieldObject("target")
+                .setClassOfValue(TableDocument.class).setMandatory(true);
+            tableLinkDefinition.addDynFieldString("fieldSource").setMandatory(true);
+            tableLinkDefinition.addDynFieldString("fieldTarget").setMandatory(true);
+            tableLinkDefinition.addDynFieldBoolean("enabled").setMandatory(true);
+        }  
+    
+        ProjectManager.getInstance().registerDocumentFactory(factory);
+        
+        ProjectManager.getInstance().registerDocumentAction(TYPENAME,new CopyDocumentAction());
+        ProjectManager.getInstance().registerDocumentAction(TYPENAME,new CutDocumentAction());
+        ProjectManager.getInstance().registerDocumentAction(TYPENAME,new PasteDocumentAction());
+
+    }
+
+    /**
+     * Create a new table document.
+     * 
+     * @return TableDocument.
+     */
+    public AbstractDocument createDocument() {
+        AbstractDocument doc = new TableDocument(this);
+        if( this.notifyObservers(NOTIFY_AFTER_CREATEDOCUMENT,doc).isCanceled() ) {
+            return null;
+        }
+    	return doc;        
+    }
+
+    public Class<? extends IDocumentWindow> getMainWindowClass() {
+        return FeatureTableDocumentPanel.class;
+    }
+
+    public IWindow getMainWindow(Document doc, WindowLayout layout) {
+        IDocumentWindow win;
+        win =
+            (IDocumentWindow) PluginServices.getMDIManager()
+                .getSingletonWindow(getMainWindowClass(), doc);
+        if (win != null) {
+            // The table window document is already created, return it.
+            return win;
+        }
+
+        win = (IDocumentWindow) this.createDocumentWindow(doc);
+        if (layout != null && win != null) {
+            win.setWindowLayout(layout);
+        }
+        if( this.notifyObservers(NOTIFY_AFTER_GETMAINWINDOW,win).isCanceled() ) {
+            return null;
+        }
+        return win;
+    }
+
+    public IWindow getPropertiesWindow(Document doc) {
+        IWindow win = new TableProperties((TableDocument) doc);
+        if( this.notifyObservers(NOTIFY_AFTER_GETPROPERTIESWINDOW,win).isCanceled() ) {
+            return null;
+        }
+        return win;        
+    }
+
+    protected Class<? extends Document> getDocumentClass() {
+        return TableDocument.class;
+    }
+
+    public DynStruct getDefinition(String className) {
+
+        if (this.persistenceDefinition.getName().equalsIgnoreCase(className)) {
+            return this.persistenceDefinition;
+        }
+        if (this.persistenceDefinition.getFullName()
+            .equalsIgnoreCase(className)) {
+            return this.persistenceDefinition;
+        }
+        if (this.getDocumentClass().getName().equals(className)) {
+            return this.persistenceDefinition;
+        }
+        return null;
+    }
+
+    public boolean manages(Object object) {
+        return object instanceof TableDocument;
+    }
+
+    public TableDocument getTableDocument(VectorLayer layer) {
+        if (layer == null) {
+            return null;
+        }
+        List<Document> tableDocs =
+            getProject().getDocuments(TableManager.TYPENAME);
+        for (Document document : tableDocs) {
+            if (layer == ((TableDocument) document).getAssociatedLayer()) {
+                return (TableDocument) document;
+            }
+        }
+        return null;
+    }
+
+    public void removeTableDocument(VectorLayer layer) {
+        TableDocument doc = getTableDocument(layer);
+        // Only remove it if it exists
+        if (doc != null) {
+            PluginServices.getMDIManager().closeSingletonWindow(doc);
+            getProject().remove(doc);
+        }
+    }
+
+    private Project getProject() {
+        return ProjectManager.getInstance().getCurrentProject();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.landregistryviewer package documentation</title>
+</head>
+<body>
+
+	<p>Table document UI components</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPage.java	(revision 42196)
@@ -0,0 +1,150 @@
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.BorderLayout;
+import java.util.Locale;
+import java.util.Set;
+import javax.swing.ComboBoxModel;
+import javax.swing.JComponent;
+import org.gvsig.andami.LocaleManager;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableConfigurationPanel;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+public class GeneralTablePropertiesPage extends GeneralTablePropertiesPageLayout implements PropertiesPage {
+
+    private static final long serialVersionUID = -8639908797829738997L;
+    private final TableDocument tableDocument;
+    private FeatureTableConfigurationPanel columnsConfigurationPanel = null;
+    private LocaleManager localeManager;
+
+    public GeneralTablePropertiesPage(TableDocument tableDocument) {
+        this.tableDocument = tableDocument;
+        this.localeManager = PluginsLocator.getLocaleManager();
+        this.initComponents();
+    }
+
+    private void initComponents() {
+        txtName.setText(tableDocument.getName());
+        txtDate.setText(tableDocument.getCreationDate());
+        txtOwner.setText(tableDocument.getOwner());
+        txtComments.setText(tableDocument.getComment());
+        
+        pnlColumns.setLayout(new BorderLayout());
+        pnlColumns.add(this.getColumnsConfigurationPanel(),BorderLayout.CENTER);
+        
+        Set<Locale> localeSet = localeManager.getInstalledLocales();
+        for (Locale item : localeSet) {
+            this.cboLocaleOfData.addItem(new LocaleComboBoxItem(item));
+        }
+        Locale localeOfData = tableDocument.getFeatureStoreModel().getCurrentFeatureTableModel().getLocaleOfData();
+        if ( localeOfData != null ) {
+            this.cboLocaleOfData.setSelectedItem(new LocaleComboBoxItem(localeOfData));
+        }
+        
+        translate();
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        lblName.setText(i18nManager.getTranslation("Nombre_XcolonX"));
+        lblDate.setText(i18nManager.getTranslation("creation_date_XcolonX"));
+        lblOwner.setText(i18nManager.getTranslation("owner_XcolonX"));
+        lblLocaleOfData.setText(i18nManager.getTranslation("locale_XcolonX"));
+        lblComments.setText(i18nManager.getTranslation("comentarios_XcolonX"));
+        lblColumns.setText(i18nManager.getTranslation("_Column_information_XcolonX"));
+        
+    }
+
+    public void accept() {
+
+    }
+    
+    private Locale getLocaleOfData(){
+    	LocaleComboBoxItem item = (LocaleComboBoxItem) cboLocaleOfData.getSelectedItem();
+    	if (item==null){
+    		return null;
+    	}
+    	return item.getLocale();
+    }
+    
+    private FeatureTableConfigurationPanel getColumnsConfigurationPanel() {
+        if (this.columnsConfigurationPanel == null) {
+            this.columnsConfigurationPanel =
+                new FeatureTableConfigurationPanel(tableDocument
+                    .getFeatureStoreModel().getCurrentFeatureTableModel());
+        }
+        return this.columnsConfigurationPanel;
+    }
+
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("General");
+    }
+    
+    public int getPriority() {
+        return 1000;
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public boolean whenAccept() {
+        return whenApply();
+    }
+
+    public boolean whenApply() {
+        tableDocument.setName(txtName.getText());
+        tableDocument.setCreationDate(txtDate.getText());
+        tableDocument.setOwner(txtOwner.getText());
+        tableDocument.setComment(txtComments.getText());
+        tableDocument.getFeatureStoreModel().getCurrentFeatureTableModel()
+                .setLocaleOfData(getLocaleOfData());
+        getColumnsConfigurationPanel().accept();
+        return true;
+    }
+
+    public boolean whenCancel() {
+        return true;
+    }
+
+    
+    private class LocaleComboBoxItem {
+
+        private Locale locale;
+
+        public LocaleComboBoxItem(Locale locale) {
+            this.locale = locale;
+        }
+
+        public String toString() {
+            return localeManager.getLocaleDisplayName(this.locale);
+        }
+
+        public Locale getLocale() {
+            return this.locale;
+        }
+
+        public boolean equals(Object o) {
+            if ( o == null ) {
+                return false;
+            }
+            if ( o == this ) {
+                return true;
+            }
+            if ( !(o instanceof LocaleComboBoxItem) ) {
+                return false;
+            }
+            LocaleComboBoxItem item = (LocaleComboBoxItem) o;
+            if ( !locale.equals(item.getLocale()) ) {
+                return false;
+            }
+            return true;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageLayout.form	(revision 42196)
@@ -0,0 +1,1385 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <Properties>
+    <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+      <Border info="null"/>
+    </Property>
+  </Properties>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="1"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.Box$Filler" name="filler1">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[4, 4]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[4, 4]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[4, 4]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="6" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Name"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtName">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblDate">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Date"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtDate">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.Box$Filler" name="filler2">
+      <Properties>
+        <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[4, 4]"/>
+        </Property>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[4, 4]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[4, 4]"/>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.RigidArea"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="18" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblOwner">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Owner"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JTextField" name="txtOwner">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblComments">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Comments"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="10" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="12" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.1"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="txtComments">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="lblLocaleOfData">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Locale"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cboLocaleOfData">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="4" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblColumns">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Columns"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="14" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JPanel" name="pnlColumns">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="null"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="16" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.1" weightY="0.4"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+    </Container>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8_filler1">
+          <CodeVariable name="filler1" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="9_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="9_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="9_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="9_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="11">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="9_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13_lblName">
+          <CodeVariable name="lblName" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="9_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="14_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="16">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="14_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19_txtName">
+          <CodeVariable name="txtName" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtName"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="14_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="20_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="21">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="20_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24_lblDate">
+          <CodeVariable name="lblDate" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblDate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="20_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="25_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="29">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30_txtDate">
+          <CodeVariable name="txtDate" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtDate"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="25_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="31_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="31_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33">
+          <ExpressionOrigin>
+            <Value type="int" value="18"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="34_filler2">
+          <CodeVariable name="filler2" type="8193" declaredType="javax.swing.Box$Filler"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="filler2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="31_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="35_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="35_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39_lblOwner">
+          <CodeVariable name="lblOwner" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblOwner"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="35_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="40_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="43">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="40_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45_txtOwner">
+          <CodeVariable name="txtOwner" type="8193" declaredType="javax.swing.JTextField"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="txtOwner"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="40_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="46_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="46_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="46_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="46_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="46_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="49">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="46_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="46_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52_lblComments">
+          <CodeVariable name="lblComments" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblComments"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="46_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="53_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="55">
+          <ExpressionOrigin>
+            <Value type="int" value="12"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="56">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="57">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="58">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="53_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="59">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="60_jScrollPane1">
+          <CodeVariable name="jScrollPane1" type="8193" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="53_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="61_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="62">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="63">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="61_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="64">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="65_lblLocaleOfData">
+          <CodeVariable name="lblLocaleOfData" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblLocaleOfData"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="61_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="66_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="67">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="68">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="69">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="66_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="70">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="71_cboLocaleOfData">
+          <CodeVariable name="cboLocaleOfData" type="8193" declaredType="javax.swing.JComboBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="cboLocaleOfData"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="66_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="72_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="72_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="72_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="73">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="72_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="74">
+          <ExpressionOrigin>
+            <Value type="int" value="14"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="72_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="75">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="72_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="76">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="72_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="77">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="78_lblColumns">
+          <CodeVariable name="lblColumns" type="8193" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblColumns"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="72_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="79_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="80">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="81">
+          <ExpressionOrigin>
+            <Value type="int" value="16"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="82">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="83">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="84">
+          <ExpressionOrigin>
+            <Value type="double" value="0.1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="79_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="85">
+          <ExpressionOrigin>
+            <Value type="double" value="0.4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="86_pnlColumns">
+          <CodeVariable name="pnlColumns" type="8193" declaredType="javax.swing.JPanel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="pnlColumns"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="79_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CreateNewAttributePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CreateNewAttributePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CreateNewAttributePanel.java	(revision 42196)
@@ -0,0 +1,430 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.text.ParseException;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+
+/**
+ * To create new FeatureAttributeDescriptor from the interface.
+ * 
+ * @author Vicente Caballero Navarro
+ * 
+ */
+public class CreateNewAttributePanel extends JPanel implements IWindow {
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 6447641307779709964L;
+    private static final String DEFAULT_FIELD_LENGTH = "50";
+    private JLabel jLblFieldName = null;
+    private JTextField jTxtFieldName = null;
+    private JLabel jLblFieldType = null;
+    private JComboBox jCboFieldType = null;
+    private JLabel jLblFieldLength = null;
+    private JTextField jTxtFieldLength = null;
+    private JLabel jLblFieldPrecision = null;
+    private JTextField jTxtFieldPrecision = null;
+    private JLabel jLblDefaultValue = null;
+    private JTextField jTxtDefaultValue = null;
+    private WindowInfo viewInfo;
+    private JPanel jPanel = null;
+    private AcceptCancelPanel jPanelOkCancel = null;
+    private JPanel jPnlFields = null;
+    private KeyListener checkInt = new KeyListener() {
+
+        public void keyPressed(KeyEvent e) {
+            // do nothing
+        }
+
+        public void keyReleased(KeyEvent e) {
+            JTextField component = (JTextField) e.getComponent();
+
+            try {
+                component.setText(String.valueOf(Integer.parseInt(component
+                    .getText())));
+
+            } catch (Exception ex) {
+                String text = component.getText();
+                text =
+                    (text.length() <= 1) ? "0" : text.substring(0,
+                        text.length() - 1);
+                component.setText(text);
+            }
+        }
+
+        public void keyTyped(KeyEvent e) {
+            // do nothing
+        }
+    };
+    private String[] currentFieldNames;
+
+    public CreateNewAttributePanel() {
+        super();
+        initialize();
+    }
+
+    public CreateNewAttributePanel(boolean isDoubleBuffered) {
+        super(isDoubleBuffered);
+        initialize();
+    }
+
+    public CreateNewAttributePanel(LayoutManager layout) {
+        super(layout);
+        initialize();
+    }
+
+    public CreateNewAttributePanel(LayoutManager layout,
+        boolean isDoubleBuffered) {
+        super(layout, isDoubleBuffered);
+        initialize();
+    }
+
+    public WindowInfo getWindowInfo() {
+        if (viewInfo == null) {
+            viewInfo = new WindowInfo(WindowInfo.MODALDIALOG);
+            viewInfo.setWidth(this.getWidth() + 8);
+            viewInfo.setHeight(this.getHeight());
+            viewInfo.setTitle(PluginServices.getText(this,
+                "new_field_properties"));
+        }
+        return viewInfo;
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(300, 210);
+        this.setPreferredSize(new java.awt.Dimension(300, 210));
+        this.add(getJPanel(), java.awt.BorderLayout.CENTER);
+        this.add(getJPanelOkCancel(), java.awt.BorderLayout.SOUTH);
+    }
+
+    /**
+     * This method initializes jTxtFieldName
+     * 
+     * @return javax.swing.JTextField
+     */
+    private JTextField getJTxtFieldName() {
+        if (jTxtFieldName == null) {
+            jTxtFieldName = new JTextField();
+            jTxtFieldName.setBounds(new java.awt.Rectangle(147, 15, 138, 22));
+        }
+        return jTxtFieldName;
+    }
+
+    /**
+     * This method initializes jCboFieldType
+     * 
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getJCboFieldType() {
+        DataTypesManager manager = ToolsLocator.getDataTypesManager();
+        if (jCboFieldType == null) {
+            jCboFieldType = new JComboBox();
+            jCboFieldType.setBounds(new java.awt.Rectangle(147, 52, 138, 22));
+            jCboFieldType.addItem(manager.getTypeName(DataTypes.BOOLEAN));
+            jCboFieldType.addItem(manager.getTypeName(DataTypes.DATE));
+            jCboFieldType.addItem(manager.getTypeName(DataTypes.INT));
+            jCboFieldType.addItem(manager.getTypeName(DataTypes.DOUBLE));
+            jCboFieldType.addItem(manager.getTypeName(DataTypes.STRING));
+
+            jCboFieldType.setSelectedIndex(4);
+            jCboFieldType
+                .addActionListener(new java.awt.event.ActionListener() {
+
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        DataTypesManager manager =
+                            ToolsLocator.getDataTypesManager();
+                        String strType =
+                            (String) getJCboFieldType().getModel()
+                                .getSelectedItem();
+                        if (strType == manager.getTypeName(DataTypes.DOUBLE)) {
+                            getJTxtFieldPrecision().setEnabled(true);
+                            if (getJTxtFieldPrecision().getText().equals("")) {
+                                getJTxtFieldPrecision().setText("3");
+                            } else {
+                                try {
+                                    Integer.parseInt(getJTxtFieldPrecision()
+                                        .getText());
+                                } catch (NumberFormatException e1) {
+                                    getJTxtFieldPrecision().setText("3");
+                                }
+                            }
+                        } else {
+                            getJTxtFieldPrecision().setEnabled(false);
+                        }
+                        if (strType == manager.getTypeName(DataTypes.BOOLEAN)) {
+                            getJTxtFieldLength().setText("0");
+                            getJTxtFieldLength().setEnabled(false);
+                        } else {
+                            getJTxtFieldLength().setEnabled(true);
+                        }
+
+                    }
+                });
+
+        }
+        return jCboFieldType;
+    }
+
+    /**
+     * This method initializes jTxtFieldLength
+     * 
+     * @return javax.swing.JTextField
+     */
+    private JTextField getJTxtFieldLength() {
+        if (jTxtFieldLength == null) {
+            jTxtFieldLength = new JTextField();
+            jTxtFieldLength.setBounds(new java.awt.Rectangle(147, 89, 138, 22));
+            jTxtFieldLength.setText(DEFAULT_FIELD_LENGTH);
+            jTxtFieldLength.addKeyListener(checkInt);
+        }
+        return jTxtFieldLength;
+    }
+
+    /**
+     * This method initializes jTxtFieldPrecision
+     * 
+     * @return javax.swing.JTextField
+     */
+    private JTextField getJTxtFieldPrecision() {
+        if (jTxtFieldPrecision == null) {
+            jTxtFieldPrecision = new JTextField();
+            jTxtFieldPrecision.setBounds(new java.awt.Rectangle(147, 126, 138,
+                22));
+            jTxtFieldPrecision.setEnabled(false);
+            jTxtFieldPrecision.addKeyListener(checkInt);
+        }
+        return jTxtFieldPrecision;
+    }
+
+    /**
+     * This method initializes jTxtDefaultValue
+     * 
+     * @return javax.swing.JTextField
+     */
+    private JTextField getJTxtDefaultValue() {
+        if (jTxtDefaultValue == null) {
+            jTxtDefaultValue = new JTextField();
+            jTxtDefaultValue
+                .setBounds(new java.awt.Rectangle(147, 163, 138, 22));
+        }
+        return jTxtDefaultValue;
+    }
+
+    public EditableFeatureAttributeDescriptor loadFieldDescription(
+        EditableFeatureType featureType) throws ParseException {
+        String nameAttr = "";
+        int typeAttr = DataTypes.STRING;
+        int sizeAttr = 0;
+        int precisionAttr = 0;
+        Object defaultValueAttr = "";
+
+        nameAttr = getJTxtFieldName().getText();
+        
+        if (nameAttr == null || nameAttr.length() == 0) {
+        	
+            JOptionPane.showMessageDialog(
+                    this,
+                    Messages.getText("_No_input_name"),
+                    Messages.getText("_Rename_column"),
+                    JOptionPane.ERROR_MESSAGE);
+            return null;
+        }
+        
+        String strType =
+            (String) getJCboFieldType().getModel().getSelectedItem();
+        typeAttr = ToolsLocator.getDataTypesManager().getType(strType);
+        try {
+            int fieldLength = Integer.parseInt(getJTxtFieldLength().getText());
+            sizeAttr = fieldLength;
+        } catch (Exception e) {
+            throw new ParseException(e.getMessage(), 0);
+        }
+
+        if (typeAttr == DataTypes.DOUBLE) {
+            try {
+                precisionAttr =
+                    Integer.parseInt(getJTxtFieldPrecision().getText());
+            } catch (NumberFormatException e) {
+                precisionAttr = 3;
+            }
+        }
+        defaultValueAttr = getJTxtDefaultValue().getText();
+        if (defaultValueAttr.equals("")) {
+            defaultValueAttr = null;
+        }
+        if (featureType.getIndex(nameAttr) != -1) {
+            NotificationManager.showMessageInfo(
+                PluginServices.getText(this, "field_already_exists"), null);
+            return null;
+        }
+        EditableFeatureAttributeDescriptor ead =
+            featureType.add(nameAttr, typeAttr, sizeAttr);
+        ead.setPrecision(precisionAttr);
+        ead.setDefaultValue(defaultValueAttr);
+        return ead;
+    }
+
+    public void setOkAction(ActionListener okAction) {
+        getJPanelOkCancel().setOkButtonActionListener(okAction);
+
+    }
+
+    /**
+     * This method initializes jPanel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel() {
+        if (jPanel == null) {
+            jPanel = new JPanel();
+            jPanel.setLayout(null);
+
+            jPanel.add(getJPnlFields(), null);
+        }
+        return jPanel;
+    }
+
+    /**
+     * This method initializes jPanelOkCancel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private AcceptCancelPanel getJPanelOkCancel() {
+        if (jPanelOkCancel == null) {
+            jPanelOkCancel = new AcceptCancelPanel();
+            jPanelOkCancel.setCancelButtonActionListener(new ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    PluginServices.getMDIManager().closeWindow(
+                        CreateNewAttributePanel.this);
+                }
+            });
+            jPanelOkCancel.setPreferredSize(new java.awt.Dimension(10, 50));
+        }
+        return jPanelOkCancel;
+    }
+
+    /**
+     * This method initializes jPnlFields
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPnlFields() {
+        if (jPnlFields == null) {
+            GridLayout gridLayout = new GridLayout();
+            gridLayout.setRows(6);
+            gridLayout.setVgap(3);
+            gridLayout.setHgap(5);
+            gridLayout.setColumns(2);
+            jPnlFields = new JPanel();
+            jPnlFields.setLayout(gridLayout);
+            jPnlFields.setBounds(new java.awt.Rectangle(5, 12, 290, 142));
+            jLblDefaultValue = new JLabel();
+            jLblDefaultValue
+                .setBounds(new java.awt.Rectangle(14, 163, 125, 22));
+            jLblDefaultValue.setText(PluginServices.getText(this,
+                "default_value"));
+            jLblFieldPrecision = new JLabel();
+            jLblFieldPrecision.setBounds(new java.awt.Rectangle(14, 126, 112,
+                22));
+            jLblFieldPrecision.setText(PluginServices
+                .getText(this, "precision"));
+            jLblFieldLength = new JLabel();
+            jLblFieldLength.setBounds(new java.awt.Rectangle(14, 89, 99, 22));
+            jLblFieldLength.setText(PluginServices
+                .getText(this, "field_length"));
+            jLblFieldType = new JLabel();
+            jLblFieldType.setBounds(new java.awt.Rectangle(14, 52, 94, 22));
+            jLblFieldType.setText(PluginServices.getText(this, "field_type"));
+            jLblFieldName = new JLabel();
+            jLblFieldName.setText(PluginServices.getText(this, "field_name"));
+            jLblFieldName.setBounds(new java.awt.Rectangle(14, 15, 99, 22));
+            jPnlFields.add(jLblFieldName, null);
+            jPnlFields.add(getJTxtFieldName(), null);
+            jPnlFields.add(jLblFieldType, null);
+            jPnlFields.add(getJCboFieldType(), null);
+            jPnlFields.add(jLblFieldLength, null);
+            jPnlFields.add(getJTxtFieldLength(), null);
+            jPnlFields.add(jLblFieldPrecision, null);
+            jPnlFields.add(getJTxtFieldPrecision(), null);
+            jPnlFields.add(jLblDefaultValue, null);
+            jPnlFields.add(getJTxtDefaultValue(), null);
+        }
+        return jPnlFields;
+    }
+
+    public void setCurrentFieldNames(String[] fieldNames) {
+        currentFieldNames = fieldNames;
+        String newField =
+            PluginServices.getText(this, "field").replaceAll(" +", "_");
+        int index = 0;
+        for (int i = 0; i < currentFieldNames.length; i++) {
+            if (currentFieldNames[i].startsWith(newField)) {
+                try {
+                    index =
+                        Integer.parseInt(currentFieldNames[i].replaceAll(
+                            newField, ""));
+                } catch (Exception e) { /* we don't care */
+                }
+            }
+        }
+        jTxtFieldName.setText(newField + (++index));
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CreateNewAttributePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTypeEditingPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTypeEditingPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTypeEditingPanel.java	(revision 42196)
@@ -0,0 +1,653 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionListener;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.table.TableOperations;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * To modify FeatureTypes from the interface.
+ * 
+ * @author Vicente Caballero Navarro
+ * 
+ */
+public class FeatureTypeEditingPanel extends JPanel implements IWindow {
+
+    private static final long serialVersionUID = -4284879326692474318L;
+
+    private static final Logger logger = LoggerFactory
+        .getLogger(FeatureTypeEditingPanel.class);
+
+    WindowInfo windowInfo = null;
+
+    private JLabel jLabel = null;
+
+    private JScrollPane jScrollPane = null;
+
+    private JTable jTableFields = null;
+
+    private JButton jBtnNewField = null;
+
+    private JButton jBtnDeleteField = null;
+
+    private JButton jBtnRenameField = null;
+
+    private JButton jBtnOK = null;
+
+    private JButton jBtnCancel = null;
+
+    private CreateNewAttributePanel panelNewField =
+        new CreateNewAttributePanel();
+
+    private FeatureStore featureStore = null;
+
+    private JPanel jPanelButtons = null;
+
+    private EditableFeatureType editableType = null;
+
+    private class MyTableModel extends AbstractTableModel {
+
+        /**
+		 * 
+		 */
+        private static final long serialVersionUID = -2847526298987536118L;
+
+        public MyTableModel() {
+
+        }
+
+        public int getColumnCount() {
+            return 5;
+        }
+
+        public int getRowCount() {
+            return editableType.size();
+        }
+
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            FeatureAttributeDescriptor myField = null;
+            myField = (FeatureAttributeDescriptor) editableType.get(rowIndex);
+
+            switch (columnIndex) {
+            case 0:
+                return myField.getName();
+            case 1:
+                return myField.getDataType().getName();
+            case 2:
+                return new Integer(myField.getSize());
+            case 3:
+                return new Integer(myField.getPrecision());
+            case 4:
+                return myField.getDefaultValue();
+
+            }
+            return null;
+        }
+
+        public Class<?> getColumnClass(int columnIndex) {
+            return super.getColumnClass(columnIndex);
+        }
+
+        public String getColumnName(int column) {
+            switch (column) {
+            case 0:
+                return PluginServices.getText(this, "field_name");
+            case 1:
+                return PluginServices.getText(this, "field_type");
+            case 2:
+                return PluginServices.getText(this, "field_length");
+            case 3:
+                return PluginServices.getText(this, "field_decimal_count");
+            case 4:
+                return PluginServices.getText(this, "field_default_value");
+
+            }
+            return super.getColumnName(column);
+        }
+
+        public boolean isCellEditable(int rowIndex, int columnIndex) {
+            return false;
+
+        }
+
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+            if (columnIndex == 0) {
+                editableType.remove(rowIndex);
+            }
+            String name = "";
+            int type = DataTypes.STRING;
+            int size = 0;
+            int precision = 0;
+            switch (columnIndex) {
+            case 0:
+                name = (String) aValue;
+                break;
+            case 1:
+                String strType = (String) aValue;
+                if (strType.equals("String")) {
+                    type = DataTypes.STRING;
+                }
+                if (strType.equals("Double")) {
+                    type = DataTypes.DOUBLE;
+                    precision = 5;
+                }
+                if (strType.equals("Integer")) {
+                    type = DataTypes.INT;
+                }
+                if (strType.equals("Boolean")) {
+                    type = DataTypes.BOOLEAN;
+                }
+                if (strType.equals("Date")) {
+                    type = DataTypes.DATE;
+                }
+                break;
+            case 2:
+                size = ((Integer) aValue).intValue();
+
+                // TODO: HACERLO BIEN
+                // if (ead.getDataType()==DataTypes.STRING) {
+                // ead.setPrecision(5);
+                // }
+            }
+            EditableFeatureAttributeDescriptor ead =
+                editableType.add(name, type, size);
+            ead.setPrecision(precision);
+        }
+
+    }
+
+    /**
+     * This method initializes
+     * 
+     * @throws DataException
+     * 
+     */
+    public FeatureTypeEditingPanel(FeatureStore fs) throws DataException {
+        super();
+        this.featureStore = fs;
+        this.editableType = fs.getDefaultFeatureType().getEditable();
+        initialize();
+        // Add a new row
+        TableModel tm;
+        tm = new MyTableModel();
+        getJTableFields().setModel(tm);
+        // Esto lo a�ado aqu� porque si no tiene registros, no hace caso.
+        // (Por eso no
+        // lo pongo en getJTable()
+        TableColumn typeColumn = jTableFields.getColumnModel().getColumn(1);
+        JComboBox comboBox = new JComboBox();
+        comboBox.addItem("Boolean");
+        comboBox.addItem("Date");
+        comboBox.addItem("Integer");
+        comboBox.addItem("Double");
+        comboBox.addItem("String");
+        typeColumn.setCellEditor(new DefaultCellEditor(comboBox));
+
+    }
+
+    /**
+     * This method initializes this
+     * 
+     */
+    private void initialize() {
+        FlowLayout flowLayout = new FlowLayout();
+        flowLayout.setVgap(5);
+        flowLayout.setHgap(0);
+        BorderLayout borderLayout = new BorderLayout();
+        borderLayout.setHgap(15);
+        borderLayout.setVgap(15);
+        jLabel = new JLabel();
+        jLabel.setText(PluginServices.getText(this, "add_delete_edit_fields")
+            + ": ");
+        this.setLayout(borderLayout);
+        this.setSize(new java.awt.Dimension(663, 404));
+        this.setPreferredSize(new java.awt.Dimension(getWidth(), getHeight()));
+        JPanel jPanelNorth = new JPanel(new FlowLayout(FlowLayout.LEFT));
+        jPanelNorth.add(jLabel);
+        this.add(jPanelNorth, BorderLayout.NORTH);
+        JPanel jPanelCenter =
+            new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
+        jPanelCenter.add(getJScrollPane());
+        this.add(jPanelCenter, BorderLayout.CENTER);
+
+        this.add(getJPanelButtons(), BorderLayout.EAST);
+        JPanel jPanelSouth = new JPanel();
+        jPanelSouth.setLayout(flowLayout);
+        jPanelSouth.add(getJBtnOK(), null);
+        jPanelSouth.add(getJBtnCancel(), null);
+        this.add(jPanelSouth, BorderLayout.SOUTH);
+
+    }
+
+    public WindowInfo getWindowInfo() {
+        if (windowInfo == null) {
+            windowInfo =
+                new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.PALETTE
+                    | WindowInfo.RESIZABLE);
+            windowInfo.setTitle(PluginServices.getText(this, "field_manager"));
+            windowInfo.setHeight(this.getHeight());
+            windowInfo.setWidth(this.getWidth());
+        }
+        return windowInfo;
+    }
+
+    // /**
+    // * Convierte lo que hay en la tabla en una definici�n de campos adecuada
+    // * para crear un LayerDefinition
+    // *
+    // * @return
+    // */
+    // public FieldDescription[] getFieldsDescription() {
+    // DefaultTableModel tm = (DefaultTableModel) jTableFields.getModel();
+    // FieldDescription[] fieldsDesc = new FieldDescription[tm.getRowCount()];
+    //
+    // for (int i = 0; i < tm.getRowCount(); i++) {
+    // fieldsDesc[i] = new FieldDescription();
+    // fieldsDesc[i].setFieldName((String) tm.getValueAt(i, 0));
+    // String strType = (String) tm.getValueAt(i, 1);
+    // if (strType.equals("String"))
+    // fieldsDesc[i].setFieldType(Types.VARCHAR);
+    // if (strType.equals("Double"))
+    // fieldsDesc[i].setFieldType(Types.DOUBLE);
+    // if (strType.equals("Integer"))
+    // fieldsDesc[i].setFieldType(Types.INTEGER);
+    // if (strType.equals("Boolean"))
+    // fieldsDesc[i].setFieldType(Types.BOOLEAN);
+    // if (strType.equals("Date"))
+    // fieldsDesc[i].setFieldType(Types.DATE);
+    // int fieldLength = Integer.parseInt((String) tm.getValueAt(i, 2));
+    // fieldsDesc[i].setFieldLength(fieldLength);
+    //
+    // // TODO: HACERLO BIEN
+    // if (strType.equals("Double"))
+    // fieldsDesc[i].setFieldDecimalCount(5);
+    //
+    // }
+    //
+    // return fieldsDesc;
+    // }
+
+    /**
+     * This method initializes jScrollPane
+     * 
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new JScrollPane();
+            jScrollPane.setPreferredSize(new java.awt.Dimension(482, 350));
+            jScrollPane.setViewportView(getJTableFields());
+        }
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes jTableFields
+     * 
+     * @return javax.swing.JTable
+     */
+    private JTable getJTableFields() {
+        if (jTableFields == null) {
+            jTableFields = new JTable();
+            jTableFields
+                .setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+
+            jTableFields.setColumnSelectionAllowed(false);
+            // Ask to be notified of selection changes.
+            ListSelectionModel rowSM = jTableFields.getSelectionModel();
+            rowSM.addListSelectionListener(new ListSelectionListener() {
+
+                public void valueChanged(ListSelectionEvent e) {
+                    // Ignore extra messages.
+                    if (e.getValueIsAdjusting()) {
+                        return;
+                    }
+
+                    ListSelectionModel lsm = (ListSelectionModel) e.getSource();
+                    if (lsm.isSelectionEmpty()) {
+                        // no rows are selected
+                        jBtnDeleteField.setEnabled(false);
+                    } else {
+                        jBtnDeleteField.setEnabled(true);
+                    }
+                    if (jTableFields.getSelectedRows().length != 1) {
+                        getJBtnRenameField().setEnabled(false);
+                    } else {
+                        getJBtnRenameField().setEnabled(true);
+                    }
+
+                }
+            });
+
+        }
+        return jTableFields;
+    }
+
+    /**
+     * This method initializes jBtnNewField
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJBtnNewField() {
+        if (jBtnNewField == null) {
+            jBtnNewField =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnNewField.setText(PluginServices.getText(this, "new_field"));
+            jBtnNewField.addActionListener(new java.awt.event.ActionListener() {
+
+                private List<String> tempFieldNames = new ArrayList<String>();
+
+                {
+                    try {
+                        int size = editableType.size();
+                        for (int i = 0; i < size; i++) {
+                            FeatureAttributeDescriptor ad =
+                                (FeatureAttributeDescriptor) editableType
+                                    .get(i);
+                            tempFieldNames.add(ad.getName());
+                        }
+                    } catch (Exception ex) {
+                        logger.warn("Can't initialize tempFieldNames", ex);
+                    }
+                }
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    ActionListener okAction;
+                    okAction = new java.awt.event.ActionListener() {
+
+                        public void actionPerformed(java.awt.event.ActionEvent e) {
+                            try {
+                                EditableFeatureAttributeDescriptor ead =
+                                    panelNewField
+                                        .loadFieldDescription(editableType);
+                                if (ead == null) {
+                                    return;
+                                }
+                                if (ead.getType() == DataTypes.STRING
+                                    && ead.getSize() > TableOperations.MAX_FIELD_LENGTH) {
+                                    NotificationManager.showMessageInfo(
+                                        PluginServices.getText(this,
+                                            "max_length_is")
+                                            + ":"
+                                            + TableOperations.MAX_FIELD_LENGTH,
+                                        null);
+                                    ead.setSize(TableOperations.MAX_FIELD_LENGTH);
+                                }
+                                tempFieldNames.add(ead.getName());
+                                jTableFields.revalidate();
+                                PluginServices.getMDIManager().closeWindow(
+                                    panelNewField);
+                            } catch (ParseException e2) {
+                                NotificationManager.addError(e2);
+                            }
+
+                        }
+                    };
+                    panelNewField.setOkAction(okAction);
+                    String[] names =
+                        (String[]) tempFieldNames.toArray(new String[0]);
+                    panelNewField.setCurrentFieldNames(names);
+                    panelNewField =
+                        (CreateNewAttributePanel) PluginServices
+                            .getMDIManager().addWindow(panelNewField);
+                }
+            });
+        }
+        return jBtnNewField;
+    }
+
+    /**
+     * This method initializes jButton
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJBtnDelete() {
+        if (jBtnDeleteField == null) {
+            jBtnDeleteField =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnDeleteField.setText(PluginServices
+                .getText(this, "delete_field"));
+            jBtnDeleteField
+                .addActionListener(new java.awt.event.ActionListener() {
+
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        int[] selecteds = jTableFields.getSelectedRows();
+                        TableModel tm = jTableFields.getModel();
+
+                        for (int i = selecteds.length - 1; i >= 0; i--) {
+                            String fieldName =
+                                (String) tm.getValueAt(selecteds[i], 0);
+                            
+                            String old_geom_fld = editableType.getDefaultGeometryAttributeName();
+                            if (old_geom_fld.compareTo(fieldName) == 0) {
+                                JOptionPane.showMessageDialog(
+                                    jTableFields,
+                                    Messages.getText("_Cannot_delete_geometry_field"),
+                                    Messages.getText("_Remove_column"),
+                                    JOptionPane.WARNING_MESSAGE);
+                                continue;
+                            }
+
+                            editableType.remove(fieldName);
+                        }
+                        jTableFields.getSelectionModel().clearSelection();
+                        jTableFields.revalidate();
+                    }
+                });
+        }
+        return jBtnDeleteField;
+    }
+
+    /**
+     * This method initializes jBtnRenameField
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJBtnRenameField() {
+        if (jBtnRenameField == null) {
+            jBtnRenameField =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnRenameField.setText(PluginServices
+                .getText(this, "rename_field"));
+            jBtnRenameField
+                .addActionListener(new java.awt.event.ActionListener() {
+
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        int[] selecteds = jTableFields.getSelectedRows();
+                        TableModel tm = jTableFields.getModel();
+
+                        for (int i = selecteds.length - 1; i >= 0; i--) {
+                            String fieldName =
+                                (String) tm.getValueAt(selecteds[i], 0);
+                            
+                            String old_geom_fld = editableType.getDefaultGeometryAttributeName();
+                            /*
+                             * old_geom_fld is null if we are dealing with
+                             * table (no geometry column)
+                             */
+                            if (old_geom_fld != null && old_geom_fld.compareTo(fieldName) == 0) {
+                                JOptionPane.showMessageDialog(
+                                    jTableFields,
+                                    Messages.getText("_Cannot_rename_geometry_field"),
+                                    Messages.getText("_Rename_column"),
+                                    JOptionPane.WARNING_MESSAGE);
+                                continue;
+                            }
+
+                            String newName =
+                                JOptionPane.showInputDialog(
+                                    (Component) PluginServices.getMDIManager()
+                                        .getActiveWindow(), PluginServices
+                                        .getText(this, "_Please_insert_new_field_name"),
+                                    fieldName);
+                            if (newName == null) {
+                                continue;
+                            }
+                            
+                            if (newName.length() == 0)  {
+                                JOptionPane.showMessageDialog(
+                                        jTableFields,
+                                        Messages.getText("_No_input_name"),
+                                        Messages.getText("_Rename_column"),
+                                        JOptionPane.ERROR_MESSAGE);
+                                continue;
+                            }
+                            
+                            if (editableType.getIndex(newName) != -1) {
+                                NotificationManager.showMessageInfo(
+                                    PluginServices.getText(this,
+                                        "field_already_exists"), null);
+                                continue;
+                            }
+                            
+                            try {
+                                EditableFeatureAttributeDescriptor efad =
+                                    (EditableFeatureAttributeDescriptor)
+                                    editableType.getAttributeDescriptor(fieldName);
+                                efad.setName(newName);
+                                
+                            } catch (Exception de) {
+                                JOptionPane.showMessageDialog(
+                                    jTableFields,
+                                    Messages.getText("_Unable_to_rename_field")
+                                    + ": " + de.getMessage(),
+                                    Messages.getText("_Rename_column"),
+                                    JOptionPane.ERROR_MESSAGE);
+                            }
+                        }
+                        jTableFields.repaint();
+                    }
+                });
+        }
+        return jBtnRenameField;
+    }
+
+    /**
+     * This method initializes jBtnOK
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJBtnOK() {
+        if (jBtnOK == null) {
+            jBtnOK =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnOK.setText(PluginServices.getText(this, "aceptar"));
+            jBtnOK.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    try {
+                        featureStore.update(editableType);
+                    } catch (DataException e1) {
+                        NotificationManager.showMessageError(PluginServices
+                            .getText(this, "update_featuretype_error"), e1);
+                    }
+                    PluginServices.getMDIManager().closeWindow(
+                        FeatureTypeEditingPanel.this);
+                }
+            });
+        }
+        return jBtnOK;
+    }
+
+    /**
+     * This method initializes jButton
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJBtnCancel() {
+        if (jBtnCancel == null) {
+            jBtnCancel =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnCancel.setText(PluginServices.getText(this, "cancelar"));
+            jBtnCancel.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    PluginServices.getMDIManager().closeWindow(
+                        FeatureTypeEditingPanel.this);
+                }
+            });
+            // jBtnCancel.setVisible(false);
+        }
+        return jBtnCancel;
+    }
+
+    /**
+     * This method initializes jPanelButtons
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanelButtons() {
+        if (jPanelButtons == null) {
+            jPanelButtons = new JPanel();
+            JPanel aux = new JPanel(new GridLayout(3, 1));
+            aux.add(getJBtnNewField());
+            aux.add(getJBtnRenameField());
+            aux.add(getJBtnDelete());
+            jPanelButtons.add(aux, BorderLayout.NORTH);
+        }
+        return jPanelButtons;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTypeEditingPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTableDocumentPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTableDocumentPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTableDocumentPanel.java	(revision 42196)
@@ -0,0 +1,202 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {TableDocument implementation based on the gvSIG DAL API}
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindowTransform;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.gui.WindowLayout;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTypesTablePanel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.notification.ColumnHeaderSelectionChangeNotification;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.swing.api.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Feature table visualization panel.
+ * 
+ * @author 2005- Vicente Caballero
+ * @author 2009- gvSIG team
+ */
+public class FeatureTableDocumentPanel extends FeatureTypesTablePanel implements
+    IDocumentWindow, IWindowTransform, Observer, Component {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(FeatureTableDocumentPanel.class);
+
+    private static final long serialVersionUID = -1003263265311764630L;
+
+    private static final int DEFAULT_HEIGHT = 450;
+
+    private static final int DEFAULT_WIDTH = 700;
+
+    private boolean isPalette = false;
+
+    private WindowInfo windowInfo = null;
+
+    private TableDocument model = null;
+
+    private boolean selectionIsEmpty = true;
+
+    public FeatureTableDocumentPanel(Document document) throws DataException {
+        super(((TableDocument) document).getFeatureStoreModel());
+        this.model = (TableDocument) document;
+        initialize();
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    // IWindow interface
+
+    public WindowInfo getWindowInfo() {
+        if (windowInfo == null) {
+            windowInfo =
+                new WindowInfo(WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
+                    | WindowInfo.RESIZABLE);
+
+            if (this.model == null) {
+                windowInfo.setTitle("Tabla");
+            } else {
+                windowInfo.setTitle(this.model.getName());
+            }
+
+            windowInfo.setWidth(DEFAULT_WIDTH);
+            windowInfo.setHeight(DEFAULT_HEIGHT);
+        }
+        return windowInfo;
+    }
+
+    // SingletonWindow interface
+
+    public Object getWindowModel() {
+        return this.model;
+    }
+
+    public void toPalette() {
+        isPalette = true;
+        windowInfo.toPalette(true);
+        windowInfo.setClosed(false);
+        PluginServices.getMDIManager().changeWindowInfo(this, getWindowInfo());
+    }
+
+    public void restore() {
+        isPalette = false;
+        windowInfo.toPalette(false);
+        windowInfo.setClosed(false);
+        PluginServices.getMDIManager().changeWindowInfo(this, getWindowInfo());
+    }
+
+    public boolean isPalette() {
+        return isPalette;
+    }
+
+    public TableDocument getModel() {
+        return model;
+    }
+
+    public void update(Observable observable, Object notification) {
+        // If selection changes from nothing selected to anything selected
+        // or the reverse, enable controls
+        if (DataStoreNotification.SELECTION_CHANGE.equals(notification)) {
+            try {
+                if (selectionIsEmpty != getFeatureSelection().isEmpty()) {
+                    selectionIsEmpty = !selectionIsEmpty;
+        			enableControls(notification);
+                }
+            } catch (DataException e) {
+                LOG.error("Error getting the current selection", e);
+            }
+		} else if (notification instanceof ColumnHeaderSelectionChangeNotification) {
+			enableControls(notification);
+		}
+    }
+
+	private void enableControls(Object notification) {
+		try {
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					PluginServices.getMainFrame().enableControls();
+				}
+			});
+		} catch (Exception e) {
+			LOG.warn("Error calling enableControls() after notification: "
+					+ notification, e);
+		}
+	}
+
+    private void initialize() throws DataException {
+        getTablePanel().getTable().addObserver(this);
+        getFeatureSelection().addObserver(this);
+    }
+
+    private FeatureSelection getFeatureSelection() throws DataException {
+        return getTableModel().getFeatureStore().getFeatureSelection();
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.EDITOR_PROFILE;
+    }
+
+    public WindowLayout getWindowLayout() {
+        return null;
+    }
+
+    public void setWindowLayout(WindowLayout layout) {
+
+    }
+
+    public void setDocument(Document document) {
+        // FIXME: ?????????
+    }
+
+    public Document getDocument() {
+        return model;
+    }
+
+    public void windowActivated() {
+        // Do nothing
+    }
+
+    public void windowClosed() {
+        // Do nothing
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTableDocumentPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableProperties.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.Dimension;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.i18n.Messages;
+import org.gvsig.propertypage.BasePropertiesPageDialog;
+
+/**
+ * Dialogo donde se muestran las propiedades de una vista
+ * 
+ * @author gvSIG Team
+ */
+public class TableProperties extends BasePropertiesPageDialog implements SingletonWindow {
+
+    private static final long serialVersionUID = 5328865370833315385L;
+    private TableDocument tableDocument;
+    
+    /**
+     * This is the default constructor
+     * 
+     * @param tableDocument
+     *            Vista que se representa
+     */
+    public TableProperties(TableDocument tableDocument) {
+        this.tableDocument = tableDocument;
+        this.init(TableDocument.TABLE_PROPERTIES_PAGE_GROUP,tableDocument);
+    }
+
+    @Override
+    protected boolean useTabsAlwais() {
+        return super.useTabsAlwais();
+        // return true;
+    }
+
+    
+    public boolean isAcceppted() {
+        return this.getUserAction()==BasePropertiesPageDialog.ACTION_ACCEPT;
+    }
+
+    public Object getWindowModel() {
+        return tableDocument;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.PROPERTIES_PROFILE;
+    }
+    
+    public WindowInfo getWindowInfo() {
+        WindowInfo m_viewinfo = new WindowInfo(
+                WindowInfo.RESIZABLE |
+                WindowInfo.MAXIMIZABLE |
+                WindowInfo.MAXIMIZABLE |
+                WindowInfo.ICONIFIABLE
+        );
+        
+        this.validate();
+        m_viewinfo.setTitle(Messages.getText("propiedades_tabla"));
+        Dimension dim = getPreferredSize();
+        m_viewinfo.setWidth(dim.width);
+        m_viewinfo.setHeight(dim.height);
+        return m_viewinfo;
+    }    
+
+    @Override
+    protected void closeDialog() {
+        PluginServices.getMDIManager().closeWindow(this);
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableWizardStep.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableWizardStep.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableWizardStep.java	(revision 42196)
@@ -0,0 +1,209 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.utils.swing.JComboBox;
+import org.gvsig.utils.swing.objectSelection.ObjectSelectionModel;
+
+public class TableWizardStep extends JWizardPanel {
+
+    private JLabel lbl_header = null;
+    private static final long serialVersionUID = 1L;
+    private JLabel tableNameLbl = null;
+    private JComboBox tableNameCmb = null;
+    private JLabel fieldNameLbl = null;
+    private JComboBox fieldNameCmb = null;
+    private JLabel fieldPrefixLbl = null;
+    private JTextField fieldPrefixTxt = null;
+
+    public TableWizardStep(JWizardComponents wizardComponents, String title) {
+        super(wizardComponents, title);
+        initialize();
+    }
+
+    public void setTableModel(ObjectSelectionModel model) {
+        getTableNameCmb().removeAllItems();
+        Object[] tableNames;
+        try {
+            tableNames = model.getObjects();
+            for (int i = 0; i < tableNames.length; i++) {
+                getTableNameCmb().addItem(tableNames[i]);
+            }
+        } catch (Exception e) {
+            NotificationManager.addError(
+                PluginServices.getText(this, "Error_getting_table_fields"), e);
+        }
+    }
+
+    public void setFieldModel(ObjectSelectionModel model) {
+        getFieldNameCmb().removeAllItems();
+        Object[] fieldNames;
+        try {
+            fieldNames = model.getObjects();
+            for (int i = 0; i < fieldNames.length; i++) {
+                getFieldNameCmb().addItem(fieldNames[i]);
+            }
+        } catch (Exception e) {
+            NotificationManager.addError(
+                PluginServices.getText(this, "Error_getting_table_fields"), e);
+        }
+
+    }
+
+    private void initialize() {
+        this.setLayout(new GridBagLayout());
+
+        GridBagConstraints constraints = new GridBagConstraints();
+        constraints.gridx = 0;
+        constraints.gridy = 0;
+        constraints.gridwidth = 2;
+        constraints.anchor = GridBagConstraints.NORTH;
+        constraints.fill = GridBagConstraints.HORIZONTAL;
+        constraints.weightx = 1.0;
+        constraints.weighty = 0.0;
+        constraints.insets = new Insets(4, 10, 8, 4);
+        this.add(getHeaderLbl(), constraints);
+
+        constraints.gridx = 0;
+        constraints.gridy = 1;
+        constraints.gridwidth = 1;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.weightx = 0.0;
+        constraints.weighty = 0.0;
+        constraints.insets = new Insets(4, 10, 4, 6);
+        this.add(getTableNameLbl(), constraints);
+
+        constraints.gridx = 1;
+        constraints.gridy = 1;
+        constraints.gridwidth = 1;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        constraints.fill = GridBagConstraints.HORIZONTAL;
+        constraints.weightx = 0.5;
+        constraints.weighty = 0.0;
+        this.add(getTableNameCmb(), constraints);
+
+        constraints.gridx = 0;
+        constraints.gridy = 2;
+        constraints.gridwidth = 1;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.weightx = 0.0;
+        constraints.weighty = 0.0;
+        constraints.insets = new Insets(4, 10, 4, 6);
+        this.add(getFieldNameLbl(), constraints);
+
+        constraints.gridx = 1;
+        constraints.gridy = 2;
+        constraints.gridwidth = 1;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        constraints.fill = GridBagConstraints.HORIZONTAL;
+        constraints.weightx = 0.5;
+        constraints.weighty = 0.0;
+        this.add(getFieldNameCmb(), constraints);
+
+        constraints.gridx = 0;
+        constraints.gridy = 3;
+        constraints.gridwidth = 1;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.weightx = 0.0;
+        constraints.weighty = 0.0;
+        constraints.insets = new Insets(4, 10, 4, 6);
+        this.add(getFieldPrefixLbl(), constraints);
+
+        constraints.gridx = 1;
+        constraints.gridy = 3;
+        constraints.gridwidth = 1;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        constraints.fill = GridBagConstraints.HORIZONTAL;
+        constraints.weightx = 0.5;
+        constraints.weighty = 0.0;
+        this.add(getFieldPrefixTxt(), constraints);
+    }
+
+    public JLabel getHeaderLbl() {
+        if (lbl_header == null) {
+            lbl_header = new JLabel();
+            Font font = lbl_header.getFont();
+            lbl_header.setFont(font.deriveFont(Font.BOLD));
+        }
+        return lbl_header;
+    }
+
+    public JLabel getTableNameLbl() {
+        if (tableNameLbl == null) {
+            tableNameLbl = new JLabel();
+        }
+        return tableNameLbl;
+    }
+
+    public JComboBox getTableNameCmb() {
+        if (tableNameCmb == null) {
+            tableNameCmb = new JComboBox();
+        }
+        return tableNameCmb;
+    }
+
+    public JLabel getFieldNameLbl() {
+        if (fieldNameLbl == null) {
+            fieldNameLbl = new JLabel();
+        }
+        return fieldNameLbl;
+    }
+
+    public JComboBox getFieldNameCmb() {
+        if (fieldNameCmb == null) {
+            fieldNameCmb = new JComboBox();
+        }
+        return fieldNameCmb;
+    }
+
+    public JLabel getFieldPrefixLbl() {
+        if (fieldPrefixLbl == null) {
+            fieldPrefixLbl = new JLabel();
+        }
+        return fieldPrefixLbl;
+    }
+
+    public JTextField getFieldPrefixTxt() {
+        if (fieldPrefixTxt == null) {
+            fieldPrefixTxt = new JTextField();
+        }
+        return fieldPrefixTxt;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/TableWizardStep.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/toc/ShowAttributesTableTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/toc/ShowAttributesTableTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/toc/ShowAttributesTableTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.gui.toc;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.app.extension.ShowTable;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.i18n.Messages;
+
+
+
+/**
+ * Shows att table
+ *
+ * @author jldominguez
+ */
+public class ShowAttributesTableTocMenuEntry
+extends AbstractTocContextMenuAction {
+	
+	public static final String EXTENSION_POINT_NAME = "ShowAttributesTable";
+	private IExtension ext = null;
+	
+	public String getGroup() {
+		return "group2"; 
+	}
+
+	public int getGroupOrder() {
+		return 20;
+	}
+
+	public int getOrder() {
+		return -1;
+	}
+
+	public String getText() {
+		return Messages.getText("_Attributes_table");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return getExtension().isEnabled();
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		return getExtension().isVisible();
+	}
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		getExtension().execute("layer-show-attributes-table");
+	}
+	
+	private IExtension getExtension() {
+		
+		if (ext == null) {
+			ext = PluginServices.getExtension(ShowTable.class);		
+		}
+		return ext;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageFactory.java	(revision 42196)
@@ -0,0 +1,25 @@
+
+package org.gvsig.app.project.documents.table.gui;
+
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+public class GeneralTablePropertiesPageFactory implements PropertiesPageFactory {
+
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    public PropertiesPage create(Object obj) {
+        return new GeneralTablePropertiesPage((TableDocument)obj);
+    }
+
+    public String getGroupID() {
+        return TableDocument.TABLE_PROPERTIES_PAGE_GROUP;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CSVSeparatorOptionsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CSVSeparatorOptionsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CSVSeparatorOptionsPanel.java	(revision 42196)
@@ -0,0 +1,310 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+/**
+ * Class to create csv file at disk with the statistics group generated from a
+ * table with an Specifically separator
+ * 
+ * Basic separator "," -> csv basic file
+ * Excel separator ";" -> csv file to work in gvSIG documents
+ * 
+ * Optionally separator -> the user can enter a character or a string
+ * 
+ * 
+ * @author �ngel Fraile Gri��n e-mail: angel.fraile@iver.es
+ * 
+ */
+
+public class CSVSeparatorOptionsPanel extends JPanel implements IWindow,
+    ItemListener, ActionListener {
+
+    private static final long serialVersionUID = 1L;
+
+    public static final String commaChar = ",";
+    public static final String semicolonChar = ";";
+    private JButton buttonAccept;
+    private JButton buttonCancel;
+    private JRadioButton commaOption;
+    private JRadioButton semicolonOption;
+    private JRadioButton otherSymbol;
+    private JTextField symbol;
+    private String separator = null;
+
+    public CSVSeparatorOptionsPanel() {
+
+        setName("Separation options");
+        // Initialize component
+        inicialize();
+
+    }
+
+    /**
+     * Creating a basic option separator panel
+     * 
+     */
+    private void inicialize() {
+
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+
+        setLayout(new java.awt.GridBagLayout());
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.insets = new java.awt.Insets(10, 10, 5, 5);
+        add(getJCheckBoxPointComma(), gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridwidth = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 10);
+        add(getJCheckBoxComma(), gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
+        gridBagConstraints.weighty = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(5, 10, 5, 5);
+        add(getJCheckBoxOtherSymbol(), gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 1;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.gridwidth = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 10);
+        add(getTextFieldSymbol(), gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 1;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
+        add(getAcceptButton(), gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        add(getCancelButton(), gridBagConstraints);
+
+        ButtonGroup group = new ButtonGroup();
+        group.add(commaOption);
+        group.add(semicolonOption);
+        group.add(otherSymbol);
+
+    }
+
+    /**
+     * Selection option comma as the separator
+     * 
+     * 
+     * @return JRadioButton
+     */
+
+    private JRadioButton getJCheckBoxComma() {
+        if (commaOption == null) {
+            commaOption =
+                new JRadioButton(PluginServices.getText(this, "comma"), false);
+            commaOption.setEnabled(true);
+            commaOption.setToolTipText(PluginServices.getText(this,
+                "sepatator_info_coma"));
+        }
+        return commaOption;
+    }
+
+    /**
+     * Selection option semicolon as the separator
+     * 
+     * @return JRadioButton
+     */
+    private JRadioButton getJCheckBoxPointComma() {
+        if (semicolonOption == null) {
+            semicolonOption =
+                new JRadioButton(PluginServices.getText(this, "semicolon"),
+                    true);
+            semicolonOption.setEnabled(true);
+            semicolonOption.setToolTipText(PluginServices.getText(this,
+                "sepatator_info_semicolon"));
+        }
+        return semicolonOption;
+    }
+
+    /**
+     * The user can enter the separator
+     * 
+     * @return JRadioButton
+     */
+    private JRadioButton getJCheckBoxOtherSymbol() {
+        if (otherSymbol == null) {
+            otherSymbol =
+                new JRadioButton(PluginServices.getText(this, "otro_simbolo"),
+                    false);
+            otherSymbol.setEnabled(true);
+            otherSymbol.addItemListener(this);
+            otherSymbol.setToolTipText(PluginServices.getText(this,
+                "sepatator_info_other"));
+        }
+        return otherSymbol;
+    }
+
+    /**
+     * Return textfield where the user can enter a separator (char or string)
+     * 
+     * @return TextField.
+     */
+    private JTextField getTextFieldSymbol() {
+        if (symbol == null) {
+            symbol = new JTextField(null, 4);
+            symbol.setHorizontalAlignment(JTextField.RIGHT);
+            symbol.setEnabled(otherSymbol.isSelected());
+            symbol.setToolTipText(PluginServices
+                .getText(this, "sepatator_info"));
+        }
+        return symbol;
+    }
+
+    /**
+     * Method that generates the button to accept selected separator
+     * 
+     * @return JButton
+     */
+    private JButton getAcceptButton() {
+        if (buttonAccept == null) {
+            buttonAccept = new JButton();
+            buttonAccept.setText(PluginServices.getText(this, "Aceptar"));
+            buttonAccept.addActionListener(this);
+            buttonAccept
+                .setToolTipText(PluginServices.getText(this, "Aceptar"));
+        }
+        return buttonAccept;
+    }
+
+    /**
+     * Method that generates the button to cancel csv file creation
+     * 
+     * @return JButton
+     */
+    private JButton getCancelButton() {
+        if (buttonCancel == null) {
+            buttonCancel = new JButton();
+            buttonCancel.setText(PluginServices.getText(this, "Cancelar"));
+            buttonCancel.addActionListener(this);
+            buttonCancel.setToolTipText(PluginServices
+                .getText(this, "Cancelar"));
+        }
+        return buttonCancel;
+    }
+
+    /**
+     * Window properties
+     * 
+     * @see org.gvsig.andami.ui.mdiManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        WindowInfo m_viewinfo =
+            new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+        m_viewinfo
+            .setTitle(PluginServices.getText(this, "opciones_separacion"));
+        m_viewinfo.setHeight(100);
+        m_viewinfo.setWidth(300);
+        return m_viewinfo;
+    }
+
+    /**
+     * Getting the window profile
+     */
+    // public Object getWindowProfile() {
+    // return WindowInfo.DIALOG_PROFILE;
+    // }
+
+    /**
+     * JRadioButton to enter the separator listener
+     */
+    public void itemStateChanged(ItemEvent e) {
+        symbol.setEnabled(otherSymbol.isSelected());
+    }
+
+    /**
+     * JButtons Accept and Cancel listener
+     */
+    public void actionPerformed(ActionEvent event) {
+        if (event.getSource() == this.buttonAccept) {
+            if (commaOption.isSelected()) {
+                separator = commaChar;
+
+            } else
+                if (semicolonOption.isSelected()) {
+                    separator = semicolonChar;
+                } else
+                    if (otherSymbol.isSelected()) {
+                        separator = symbol.getText();
+
+                    }
+            PluginServices.getMDIManager().closeWindow(this);
+
+        }
+        if (event.getSource() == this.buttonCancel) {
+            separator = null;
+            PluginServices.getMDIManager().closeWindow(this);
+            return;
+        }
+
+    }
+
+    /**
+     * 
+     * @return separator
+     *         - Chosen as the separator character or separator string
+     */
+    public String getSeparator() {
+        return separator;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CSVSeparatorOptionsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/Statistics.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/Statistics.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/Statistics.java	(revision 42196)
@@ -0,0 +1,259 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.table.ExportStatisticsFile;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class Statistics extends JPanel implements IWindow {
+
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = 4121044001351869615L;
+    private JScrollPane jScrollPane = null;
+    private JTextArea txtStatistics = null;
+    private JButton jButton = null;
+    private JPanel jPanel = null;
+    private JButton jButtonExport;
+
+    // private Hashtable<String, Number> valores = new Hashtable<String,
+    // Number>();
+    // private TreeMap<String, Number> valores = new TreeMap<String, Number>();
+    private List<MyObjectStatistics> valores =
+        new ArrayList<MyObjectStatistics>();
+
+    // private HashSet<String, Number> valores = new HashSet<String, Number>();
+    /**
+     * This is the default constructor
+     */
+    public Statistics() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(300, 200);
+        this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+        this.add(getJPanel(), java.awt.BorderLayout.SOUTH);
+    }
+
+    /**
+     * This method initializes jScrollPane
+     * 
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new JScrollPane();
+            jScrollPane.setViewportView(getTxtStatistics());
+        }
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes jTextArea
+     * 
+     * @return javax.swing.JTextArea
+     */
+    private JTextArea getTxtStatistics() {
+        if (txtStatistics == null) {
+            txtStatistics = new JTextArea();
+        }
+        return txtStatistics;
+    }
+
+    /**
+     * This method initializes jButton
+     * 
+     * @return JButton
+     */
+    private JButton getJButton() {
+        if (jButton == null) {
+            jButton =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jButton.setPreferredSize(new java.awt.Dimension(100, 18));
+            jButton.setText(PluginServices.getText(this, "cerrar"));
+            jButton.addActionListener(new ActionListener() {
+
+                public void actionPerformed(ActionEvent e) {
+                    PluginServices.getMDIManager().closeWindow(Statistics.this);
+                }
+            });
+        }
+        return jButton;
+    }
+
+    /**
+     * This method initializes jButton
+     * 
+     * @return JButton
+     *         - New JButton to Export the statistics
+     */
+    private JButton getJButtonExport() {
+        if (jButtonExport == null) {
+            jButtonExport =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jButtonExport.setPreferredSize(new java.awt.Dimension(100, 18));
+            jButtonExport.setText(PluginServices.getText(this, "exportar"));
+            jButtonExport.addActionListener(new ActionListener() {
+
+                public void actionPerformed(ActionEvent e) {
+                    new ExportStatisticsFile(valores); // Class to export
+                                                       // statistics to dbf or
+                                                       // csv format
+                }
+            });// listener
+        }
+        return jButtonExport;
+    }
+
+    /**
+     * This method initializes jPanel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel() {
+        if (jPanel == null) {
+            jPanel = new JPanel();
+            FlowLayout layout = new FlowLayout();
+            layout.setAlignment(FlowLayout.RIGHT);
+            jPanel.setLayout(layout);
+            jPanel.add(getJButtonExport(), null);
+            jPanel.add(getJButton(), null);
+        }
+        return jPanel;
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        WindowInfo vi = new WindowInfo(WindowInfo.MODALDIALOG);
+        vi.setTitle(PluginServices.getText(this, "estadisticas"));
+        return vi;
+    }
+
+    /**
+     * @param i
+     * @param j
+     * @param k
+     * @param l
+     * @param m
+     * @param n
+     * @param o
+     * @param p
+     */
+    public void setStatistics(double media, double maximo, double minimo,
+        double varianza, double desviacion, long numero, double ambito,
+        double suma) {
+        getTxtStatistics().setText(
+            PluginServices.getText(this, "suma") + ": " + suma + "\n"
+                + PluginServices.getText(this, "recuento") + ": " + numero
+                + "\n" + PluginServices.getText(this, "media") + ": " + media
+                + "\n" + PluginServices.getText(this, "maximo") + ": " + maximo
+                + "\n" + PluginServices.getText(this, "minimo") + ": " + minimo
+                + "\n" + PluginServices.getText(this, "ambito") + ": " + ambito
+                + "\n" + PluginServices.getText(this, "varianza") + ": "
+                + varianza + "\n"
+                + PluginServices.getText(this, "desviacion_tipica") + ": "
+                + desviacion);
+
+        // Saving the statistics table values necessary in
+        // ExportStatisticsFile.java
+        valores.add(new MyObjectStatistics(
+            PluginServices.getText(this, "suma"), suma));
+        valores.add(new MyObjectStatistics(PluginServices.getText(this,
+            "recuento"), numero));
+        valores.add(new MyObjectStatistics(PluginServices
+            .getText(this, "media"), media));
+        valores.add(new MyObjectStatistics(PluginServices.getText(this,
+            "maximo"), maximo));
+        valores.add(new MyObjectStatistics(PluginServices.getText(this,
+            "minimo"), minimo));
+        valores.add(new MyObjectStatistics(PluginServices.getText(this,
+            "ambito"), ambito));
+        valores.add(new MyObjectStatistics(PluginServices.getText(this,
+            "varianza"), varianza));
+        valores.add(new MyObjectStatistics(PluginServices.getText(this,
+            "desviacion_tipica"), desviacion));
+
+    }
+
+    /**
+     * Class to create an object with key and value.
+     * 
+     * @author �ngel Fraile Gri��n e-mail: angel.fraile@iver.es
+     * 
+     */
+
+    public class MyObjectStatistics {
+
+        private String key;
+        private double value;
+
+        public MyObjectStatistics(String key, double value) {
+            this.key = key;
+            this.value = value;
+        }
+
+        public String getKey() {
+            return this.key;
+        }
+
+        public double getValue() {
+            return this.value;
+        }
+
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/Statistics.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/GeneralTablePropertiesPageLayout.java	(revision 42196)
@@ -0,0 +1,209 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.GroupLayout;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+
+/**
+ *
+ * @author usuario
+ */
+public class GeneralTablePropertiesPageLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form TablePropertiesPanelLayout
+     */
+    public GeneralTablePropertiesPageLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        filler1 = new Box.Filler(new Dimension(4, 4), new Dimension(4, 4), new Dimension(4, 4));
+        lblName = new JLabel();
+        txtName = new JTextField();
+        lblDate = new JLabel();
+        txtDate = new JTextField();
+        filler2 = new Box.Filler(new Dimension(4, 4), new Dimension(4, 4), new Dimension(4, 4));
+        lblOwner = new JLabel();
+        txtOwner = new JTextField();
+        lblComments = new JLabel();
+        jScrollPane1 = new JScrollPane();
+        txtComments = new JTextArea();
+        lblLocaleOfData = new JLabel();
+        cboLocaleOfData = new JComboBox();
+        lblColumns = new JLabel();
+        pnlColumns = new JPanel();
+
+        setBorder(null);
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 0;
+        add(filler1, gridBagConstraints);
+
+        lblName.setText("Name");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(lblName, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(txtName, gridBagConstraints);
+
+        lblDate.setText("Date");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(lblDate, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(txtDate, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 18;
+        add(filler2, gridBagConstraints);
+
+        lblOwner.setText("Owner");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(lblOwner, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(txtOwner, gridBagConstraints);
+
+        lblComments.setText("Comments");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(lblComments, gridBagConstraints);
+
+        txtComments.setColumns(20);
+        txtComments.setRows(5);
+        jScrollPane1.setViewportView(txtComments);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 12;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.1;
+        add(jScrollPane1, gridBagConstraints);
+
+        lblLocaleOfData.setText("Locale");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(lblLocaleOfData, gridBagConstraints);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.weightx = 0.1;
+        add(cboLocaleOfData, gridBagConstraints);
+
+        lblColumns.setText("Columns");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 14;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(lblColumns, gridBagConstraints);
+
+        pnlColumns.setBorder(null);
+
+        org.jdesktop.layout.GroupLayout pnlColumnsLayout = new org.jdesktop.layout.GroupLayout(pnlColumns);
+        pnlColumns.setLayout(pnlColumnsLayout);
+        pnlColumnsLayout.setHorizontalGroup(
+            pnlColumnsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(0, 0, Short.MAX_VALUE)
+        );
+        pnlColumnsLayout.setVerticalGroup(
+            pnlColumnsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(0, 0, Short.MAX_VALUE)
+        );
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 16;
+        gridBagConstraints.gridwidth = 3;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 0.1;
+        gridBagConstraints.weighty = 0.4;
+        add(pnlColumns, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void jTextField2ActionPerformed(ActionEvent evt) {//GEN-FIRST:event_jTextField2ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jTextField2ActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    public JComboBox cboLocaleOfData;
+    public Box.Filler filler1;
+    public Box.Filler filler2;
+    public JScrollPane jScrollPane1;
+    public JLabel lblColumns;
+    public JLabel lblComments;
+    public JLabel lblDate;
+    public JLabel lblLocaleOfData;
+    public JLabel lblName;
+    public JLabel lblOwner;
+    public JPanel pnlColumns;
+    public JTextArea txtComments;
+    public JTextField txtDate;
+    public JTextField txtName;
+    public JTextField txtOwner;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableDocument.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableDocument.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableDocument.java	(revision 42196)
@@ -0,0 +1,550 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {TableDocument implementation based on the gvSIG DAL API}
+ */
+package org.gvsig.app.project.documents.table;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.AbstractDocument;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.VectorLayer;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureStoreModel;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
+ */
+public class TableDocument extends AbstractDocument implements Observer {
+
+    public static final String TABLE_PROPERTIES_PAGE_GROUP = "TableDocument";
+
+    private static final long serialVersionUID = -1842181135614158881L;
+
+    final static private Logger logger = LoggerFactory
+        .getLogger(TableDocument.class);
+
+    private FeatureStore store;
+
+    private String featureTypeId;
+
+    private String[] attributeNames;
+
+    private List<TableLink> linkTable;
+
+    private VectorLayer associatedLayer;
+
+    private FeatureQuery query;
+
+    private Evaluator baseFilter;
+
+    private FeatureQueryOrder baseOrder;
+
+    private FeatureStoreModel featureStoreModel;
+
+    private Object lock = new Object();
+
+    public TableDocument(DocumentManager factory) {
+        super(factory);
+        this.store = null;
+        this.query = null;
+        this.featureTypeId = null;
+        this.baseFilter = null;
+        this.baseOrder = null;
+    }
+
+    public TableDocument() {
+        this(null);
+    }
+
+    public TableDocument(DocumentManager factory, FeatureStore store) {
+        this(factory);
+        setStore(store);
+    }
+
+    public FeatureStoreModel getFeatureStoreModel() {
+        synchronized (lock) {
+            if (this.featureStoreModel == null) {
+                try {
+                    this.featureStoreModel =
+                        new FeatureStoreModel(getStore(), getQuery());
+                } catch (BaseException e) {
+                    NotificationManager.addError(e);
+                }
+            }
+        }
+        return this.featureStoreModel;
+    }
+
+    public void setStore(FeatureStore store) {
+        if (this.store != null) {
+            throw new UnsupportedOperationException(
+                "can't set store. store already set.");
+        }
+        this.store = store;
+        this.store.addObserver(this);
+        this.query = null; // setQuery(store.createFeatureQuery());
+    }
+
+    @SuppressWarnings("unchecked")
+    public FeatureQuery getQuery() {
+        if (this.query == null) {
+            try {
+                FeatureType fType = null;
+                this.query = this.store.createFeatureQuery();
+                if (this.featureTypeId != null) {
+                    Iterator<FeatureType> iter;
+                    iter = this.store.getFeatureTypes().iterator();
+                    while (iter.hasNext()) {
+                        fType = iter.next();
+                        if (this.featureTypeId.equals(fType.getId())) {
+                            this.query.setFeatureType(fType);
+                            break;
+                        }
+                    }
+                    if (fType == null) {
+                        throw new RuntimeException(MessageFormat.format(
+                            "frature type {1} not found.", this.featureTypeId));
+                    }
+
+                } else {
+                    fType = store.getDefaultFeatureType();
+                }
+
+                if (this.attributeNames != null) {
+                    ArrayList<String> newNames = new ArrayList<String>();
+                    for (String name : this.attributeNames) {
+                        if (fType.getIndex(name) > -1) {
+                            newNames.add(name);
+                        }
+                    }
+                    if (newNames.size() > 0) {
+                        this.query.setAttributeNames(newNames
+                            .toArray(this.attributeNames));
+                    }
+                }
+
+                this.query.setFilter(this.baseFilter); // TODO check is valid
+                this.query.setOrder(this.baseOrder);
+
+            } catch (DataException e) {
+                NotificationManager.addError(e);
+                return null;
+            }
+
+        }
+        return this.query;
+    }
+
+    /**
+     * @return the store
+     */
+    public FeatureStore getStore() {
+        return store;
+    }
+
+    /**
+     * Return information about the table links.
+     *
+     * @return List of TableLink information.
+     */
+    public List<TableLink> getLinks() {
+        return this.linkTable;
+    }
+
+    /**
+     * Returns if this table document has links with other tables.
+     *
+     * @return if this table document has links with other tables
+     */
+    public boolean hasLinks() {
+        return this.linkTable != null && this.linkTable.size() > 0;
+    }
+
+    /**
+     * Devuelve el identificador de la tabla que contiene el link.
+     *
+     * @return identificador �nico de la tabla.
+     * @deprecated see {{@link #getLinks()}
+     */
+    public String getLinkTable() {
+        if (linkTable == null || linkTable.isEmpty()) {
+            return null;
+        }
+        return linkTable.get(0).getTargetTable().getName();
+    }
+
+    /**
+     * Devuelve el nombre del campo de la tabla a enlazar.
+     *
+     * @return Nombre del campo de la tabla a enlazar.
+     * @deprecated see {{@link #getLink()}
+     */
+    public String getField1() {
+        if (linkTable.isEmpty()) {
+            return null;
+        }
+        return this.linkTable.get(0).getSourceFieldName();
+    }
+
+    /**
+     * Devuelve el nombre del campo de la tabla enlazada.
+     *
+     * @return Nombre del campo de la tabla enlazada.
+     * @deprecated see {{@link #getLink()}
+     */
+    public String getField2() {
+        if (linkTable.isEmpty()) {
+            return null;
+        }
+        return this.linkTable.get(0).getTargetFieldName();
+    }
+
+    /**
+     * Enlaza la seleccion de esta tabla con la de la tabla indicada
+     *
+     * @deprecated see {@link #addLinkTable(String, String, String)}
+     */
+    public void setLinkTable(String targetTable, String fieldSource,
+        String fieldTarget) {
+        this.addLinkTable(targetTable, fieldSource, fieldTarget);
+    }
+
+    /**
+     * Add a table link to this document.
+     *
+     * @param targetTable
+     * @param fieldSource
+     * @param fieldTarget
+     */
+    public void addLinkTable(String targetTable, String fieldSource,
+        String fieldTarget) {
+        TableDocument target =
+            (TableDocument) ProjectManager.getInstance().getCurrentProject()
+                .getDocument(targetTable, TableManager.TYPENAME);
+        TableLink link = new TableLink(this, target, fieldSource, fieldTarget);
+        link.setEnabled(true);
+        if (this.linkTable == null) {
+            this.linkTable = new ArrayList<TableLink>();
+        }
+        this.linkTable.add(link);
+    }
+
+    /**
+     * remove the last link to table added.
+     *
+     */
+    public void removeLinkTable() {
+        if (linkTable.isEmpty()) {
+            return;
+        }
+        TableLink link = this.linkTable.remove(this.linkTable.size() - 1);
+        link.setEnabled(false);
+        this.linkTable = null;
+    }
+
+    /**
+     * Remove the link to the table document.
+     *
+     * @param name
+     *            of table document to remove.
+     */
+    public void removeLinkTable(String name) {
+        for (TableLink link : this.linkTable) {
+            if (name.equals(link.target.getName())) {
+                link.setEnabled(false);
+                this.linkTable.remove(link);
+            }
+        }
+    }
+
+    public VectorLayer getAssociatedLayer() {
+        return associatedLayer;
+    }
+
+    public void setAssociatedLayer(VectorLayer associatedLayer) {
+        this.associatedLayer = associatedLayer;
+    }
+
+    public void update(Observable arg0, Object arg1) {
+        if (this.store.equals(arg0)) {
+            if (arg1 instanceof FeatureStoreNotification) {
+                FeatureStoreNotification event =
+                    (FeatureStoreNotification) arg1;
+                if (event.getType() == FeatureStoreNotification.TRANSFORM_CHANGE
+                    || event.getType() == FeatureStoreNotification.RESOURCE_CHANGED) {
+                    this.query = null;
+                }
+            }
+
+        }
+
+    }
+
+    @SuppressWarnings("unchecked")
+    public void loadFromState(PersistentState state)
+        throws PersistenceException {
+        try {
+            super.loadFromState(state);
+
+            this.store = (FeatureStore) state.get("store");
+            this.featureTypeId = state.getString("featureTypeId");
+            this.attributeNames =
+                (String[]) state.getArray("attributeNames", String.class);
+            this.linkTable = state.getList("linkTable");
+            this.associatedLayer = (FLyrVect) state.get("associatedLayer");
+            this.query = (FeatureQuery) state.get("query");
+            this.baseFilter = (Evaluator) state.get("baseFilter");
+            this.baseOrder = (FeatureQueryOrder) state.get("baseOrder");
+        } catch (Throwable e) {
+            String storeName = (store == null) ? "unknow" : store.getFullName();
+            logger.warn("can't load table '" + this.getName() + "' (store="
+                + storeName + ") from persisted state.", e);
+//            this.setAvailable(false);
+            return;
+        }
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        super.saveToState(state);
+
+        state.set("store", store);
+        state.set("featureTypeId", featureTypeId);
+        state.set("attributeNames", attributeNames);
+        state.set("linkTable", linkTable);
+        state.set("associatedLayer", associatedLayer);
+        state.set("query", query);
+        // state.set("baseFilter", baseFilter);
+        state.set("baseOrder", baseOrder);
+    }
+
+    public static class TableLink implements Observer, Persistent {
+
+        private TableDocument source;
+        private FeatureStore storeSource;
+        private int fieldSource;
+
+        private TableDocument target;
+        private FeatureStore storeTarget;
+        private int fieldTarget;
+
+        private boolean enabled;
+
+        public TableLink() {
+            this.source = null;
+            this.target = null;
+            this.fieldSource = -1;
+            this.fieldTarget = -1;
+            this.storeSource = null;
+            this.storeTarget = null;
+            this.enabled = false;
+        }
+
+        public TableLink(TableDocument source, TableDocument target,
+            String fieldSource, String fieldTarget) {
+            this();
+            this.initialize(source, target, fieldSource, fieldTarget);
+        }
+
+        private void initialize(TableDocument source, TableDocument target,
+            String fieldSource, String fieldTarget) {
+            this.source = source;
+            this.target = target;
+
+            this.storeSource = this.source.getStore();
+            this.storeTarget = this.target.getStore();
+            try {
+                this.fieldSource =
+                    storeSource.getDefaultFeatureType().getIndex(fieldSource);
+                this.fieldTarget =
+                    storeTarget.getDefaultFeatureType().getIndex(fieldTarget);
+            } catch (DataException ex) {
+                logger.error("Can't initialize TableLink", ex);
+                throw new RuntimeException("Can't initialize TableLink", ex);
+            }
+        }
+
+        public void setEnabled(boolean enabled) {
+            if (enabled) {
+                this.storeSource.addObserver(this);
+            } else {
+                this.storeSource.deleteObserver(this);
+            }
+            this.enabled = enabled;
+        }
+
+        public boolean getEnabled() {
+            return this.enabled;
+        }
+
+        public TableDocument getTargetTable() {
+            return this.target;
+        }
+
+        public TableDocument getSourceTable() {
+            return this.source;
+        }
+
+        public String getSourceFieldName() {
+            try {
+                return ((FeatureAttributeDescriptor) this.storeSource
+                    .getDefaultFeatureType().get(this.fieldSource)).getName();
+            } catch (DataException e) {
+                logger.warn("Can't get source field name.", e);
+                return null;
+            }
+        }
+
+        public String getTargetFieldName() {
+            try {
+                return ((FeatureAttributeDescriptor) this.storeTarget
+                    .getDefaultFeatureType().get(this.fieldTarget)).getName();
+            } catch (DataException e) {
+                logger.warn("Can't get target field name.", e);
+                return null;
+            }
+        }
+
+        public void update(Observable arg0, Object arg1) {
+            try {
+                FeatureSet fCollection1 =
+                    (FeatureSet) storeSource.getSelection();
+                FeatureSelection fCollection2 =
+                    (FeatureSelection) storeTarget.createSelection();
+                List<Object> idx = new ArrayList<Object>();
+
+                // Construimos el �ndice
+                DisposableIterator iterator1 = null;
+                try {
+                    iterator1 = fCollection1.fastIterator();
+                    while (iterator1.hasNext()) {
+                        Feature feature = (Feature) iterator1.next();
+                        Object obj = feature.get(fieldSource);
+                        if (!idx.contains(obj)) {
+                            idx.add(obj);
+                        }
+                    }
+                } finally {
+                    if (iterator1 != null) {
+                        iterator1.dispose();
+                    }
+                }
+                FeatureSet set = null;
+                DisposableIterator iterator2 = null;
+
+                try {
+                    set = storeTarget.getFeatureSet();
+                    iterator2 = set.fastIterator();
+                    while (iterator2.hasNext()) {
+                        Feature feature = (Feature) iterator2.next();
+                        Object obj = feature.get(fieldTarget);
+                        if (idx.contains(obj)) {
+                            fCollection2.select(feature);
+                        }
+                    }
+                } catch (DataException e1) {
+                    NotificationManager.addError(e1);
+                    return;
+                } finally {
+                    if (iterator2 != null) {
+                        iterator2.dispose();
+                    }
+                    if (set != null) {
+                        set.dispose();
+                    }
+                }
+
+                // this applies the selection to the linked table
+                if (storeSource != storeTarget) {
+                    storeTarget.setSelection(fCollection2);
+                }
+            } catch (DataException e2) {
+                NotificationManager.addError(e2);
+                return;
+            }
+        }
+
+        public void loadFromState(PersistentState state)
+            throws PersistenceException {
+            this.initialize((TableDocument) state.get("source"),
+                (TableDocument) state.get("target"),
+                state.getString("fieldSource"), state.getString("fieldTarget"));
+            this.setEnabled(state.getBoolean("enabled"));
+        }
+
+        public void saveToState(PersistentState state)
+            throws PersistenceException {
+            state.set("source", this.source);
+            state.set("target", this.target);
+            state.set("fieldSource", this.getSourceFieldName());
+            state.set("fieldTarget", this.getTargetFieldName());
+            state.set("enabled", this.getEnabled());
+        }
+
+    }
+
+    @Override
+    public boolean isTemporary() {
+        if(this.associatedLayer!=null && this.associatedLayer.isTemporary()){
+            return true;
+        }
+        return false;
+    }
+
+    public boolean isAvailable() {
+        if(this.store == null){
+            return false;
+        }
+        return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableDocument.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/FieldSelectionModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/FieldSelectionModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/FieldSelectionModel.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.utils.swing.objectSelection.ObjectSelectionModel;
+import org.gvsig.utils.swing.objectSelection.SelectionException;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class FieldSelectionModel implements ObjectSelectionModel {
+
+    // final static private Logger logger =
+    // LoggerFactory.getLogger(FieldSelectionModel.class);
+
+    private FeatureStore fs;
+    private String msg;
+    private int type = DataTypes.INVALID;
+    private boolean selectAll = false;
+
+    /**
+     * Crea un nuevo FirstFieldSelectionModel.
+     * 
+     */
+    public FieldSelectionModel(FeatureStore fs, String msg, int type) {
+        this.fs = fs;
+        this.msg = msg;
+        this.type = type;
+    }
+
+    public FieldSelectionModel(FeatureStore fs, String msg) {
+        this(fs, msg, DataTypes.UNKNOWN);
+        selectAll = true;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Object[] getObjects() throws SelectionException {
+
+        List<String> fields = new ArrayList<String>();
+        Iterator<FeatureAttributeDescriptor> iterator = null;
+        try {
+            iterator = fs.getDefaultFeatureType().iterator();
+        } catch (DataException e) {
+            throw new SelectionException(
+                "Can't create iterator for the atribute of feature type", e);
+        }
+        while (iterator.hasNext()) {
+            FeatureAttributeDescriptor descriptor = iterator.next();
+            if (type != DataTypes.INVALID) {
+                if ((descriptor.getType() == type) || selectAll) {
+                    fields.add(descriptor.getName());
+                }
+            } else {
+                fields.add(descriptor.getName());
+            }
+        }
+
+        return (String[]) fields.toArray(new String[fields.size()]);
+    }
+
+    /**
+     * @see org.gvsig.utils.swing.objectSelection.ObjectSelectionModel#getMsg()
+     */
+    public String getMsg() {
+        return msg;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/FieldSelectionModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableOperations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableOperations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableOperations.java	(revision 42196)
@@ -0,0 +1,535 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+import javax.swing.event.TableModelListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.table.gui.CreateNewAttributePanel;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.editing.EditingNotification;
+import org.gvsig.editing.EditingNotificationManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.StoreUpdateFeatureTypeException;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTable;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableModel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Feature Table Operations.
+ * 
+ * @author Vicente Caballero Navarro
+ * 
+ */
+public class TableOperations {
+
+    private static Logger logger = LoggerFactory.getLogger(TableOperations.class);
+    
+    public static final int MAX_FIELD_LENGTH = 254;
+    private static TableOperations fto = null;
+    private ArrayList<Feature> selectedFeatures = new ArrayList<Feature>();
+    private boolean cutting = false;
+    
+    private FeatureTableDocumentPanel tablePanel = null;
+    private FeatureStore featureStore;
+
+    public static TableOperations getInstance() {
+        if (fto == null) {
+            fto = new TableOperations();
+        }
+        return fto;
+    }
+
+    public void setTablePanel(FeatureTableDocumentPanel tp) {
+        tablePanel = tp;
+        featureStore = tp.getModel().getStore();
+    }
+
+    public void copyFeatures() throws DataException {
+        cutting = false;
+        copy();
+    }
+
+    public boolean hasSelection() {
+        return !selectedFeatures.isEmpty();
+    }
+
+    public void pasteFeatures() throws DataException {
+        if (cutting) {
+            delete();
+            cutting = false;
+        }
+        Iterator<Feature> features = selectedFeatures.iterator();
+        while (features.hasNext()) {
+            Feature feature = features.next();
+            if( !insertFeature(feature.getEditable()) ) {
+                break;
+            }
+        }
+    }
+
+    public void cutFeatures() throws DataException {
+        cutting = true;
+        copy();
+    }
+
+    private void copy() throws DataException {
+        DisposableIterator features = null;
+        try {
+            features =
+                ((FeatureSelection) featureStore.getSelection()).fastIterator();
+            selectedFeatures.clear();
+            while (features.hasNext()) {
+                Feature feature = (Feature) features.next();
+                selectedFeatures.add(feature);
+            }
+        } finally {
+            if (features != null) {
+                features.dispose();
+            }
+        }
+    }
+
+    private void delete() throws DataException {
+        Iterator<Feature> features = selectedFeatures.iterator();
+        while (features.hasNext()) {
+            Feature feature = features.next();
+            if( !deleteFeature(feature) ) {
+                break;
+            }
+        }
+    }
+
+    public void deleteFeatures() throws DataException {
+        
+        FeatureTableModel _ftm = this.tablePanel.getTablePanel().getTableModel();
+        List<TableModelListener> tmll = removeTableModelListeners(_ftm);
+        DisposableIterator feat_iter = null;
+        Feature feat = null;
+        try {
+        	
+        	
+            FeatureSelection selection = featureStore.createFeatureSelection();
+            selection.select((FeatureSet) featureStore.getSelection());
+            feat_iter = selection.fastIterator();
+            while (feat_iter.hasNext()) {
+                feat = (Feature) feat_iter.next();
+                if( !deleteFeature(feat) ) {
+                    return;
+                }
+            }
+
+
+        } finally {
+            if (feat_iter != null) {
+            	feat_iter.dispose();
+            }
+            
+            addTableModelListeners(_ftm, tmll);
+        }
+    }
+
+    /**
+     * @param _ftm
+     * @param tmll
+     */
+    private void addTableModelListeners(
+        FeatureTableModel _model,
+        List<TableModelListener> _list) {
+        
+        Iterator<TableModelListener> iter = _list.iterator();
+        while (iter.hasNext()) {
+            _model.addTableModelListener(iter.next());
+        }
+        _model.fireTableDataChanged();
+    }
+
+    /**
+     * @param ftm
+     * @param class1
+     * @return
+     */
+    private List<TableModelListener> removeTableModelListeners(FeatureTableModel ftm) {
+        
+        TableModelListener[] ll = ftm.getListeners(TableModelListener.class);
+        List<TableModelListener> resp = new ArrayList<TableModelListener>();
+        
+        int n = ll.length;
+        for (int i=0; i<n; i++) {
+            resp.add(ll[i]);
+            ftm.removeTableModelListener(ll[i]);
+        }
+
+        return resp;
+    }
+
+    public void insertNewFeature() throws DataException {
+        EditableFeature feature = featureStore.createNewFeature();
+        insertFeature(feature);
+    }
+
+    /*
+     * Return false if the operation is canceled.
+     */
+    private boolean insertFeature(EditableFeature feature) throws DataException {
+        EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+        EditingNotification notification = editingNotificationManager.notifyObservers(
+                this,
+                EditingNotification.BEFORE_INSERT_FEATURE,
+                tablePanel.getDocument(),
+                featureStore,
+                feature);
+        if ( notification.isCanceled() ) {
+            return false;
+        }
+        if( notification.shouldValidateTheFeature() ) {
+            if ( !editingNotificationManager.validateFeature(feature) ) {
+                return false;
+            }
+        }
+        featureStore.insert(feature);
+        editingNotificationManager.notifyObservers(
+                this,
+                EditingNotification.AFTER_INSERT_FEATURE,
+                tablePanel.getDocument(),
+                featureStore,
+                feature);
+        return true;
+    }
+
+    private boolean deleteFeature(Feature feature) throws DataException {
+        EditingNotificationManager editingNotification = MapControlLocator.getEditingNotificationManager();
+        EditingNotification notification = editingNotification.notifyObservers(
+                this,
+                EditingNotification.BEFORE_REMOVE_FEATURE,
+                tablePanel.getDocument(),
+                featureStore,
+                feature);
+        if ( notification.isCanceled() ) {
+            return false;
+        }
+        featureStore.delete(feature);
+        editingNotification.notifyObservers(
+                this,
+                EditingNotification.AFTER_REMOVE_FEATURE,
+                tablePanel.getDocument(),
+                featureStore,
+                feature);
+        return true;
+    }
+    
+    private boolean updateFeatureType(EditableFeatureType featureType) throws DataException {
+        
+        EditingNotificationManager editingNotification = MapControlLocator.getEditingNotificationManager();
+        EditingNotification notification = editingNotification.notifyObservers(
+                this,
+                EditingNotification.BEFORE_UPDATE_FEATURE_TYPE,
+                tablePanel.getDocument(),
+                featureStore,
+                featureType);
+        if ( notification.isCanceled() ) {
+            return false;
+        }
+        featureStore.update(featureType);
+        editingNotification.notifyObservers(
+                this,
+                EditingNotification.AFTER_UPDATE_FEATURE_TYPE,
+                tablePanel.getDocument(),
+                featureStore,
+                featureType);
+        return true;
+    }
+
+    public void deleteAttributes(FeatureTable table) throws DataException {
+        EditableFeatureType eft =
+            featureStore.getDefaultFeatureType().getEditable();
+        FeatureAttributeDescriptor[] selecteds =
+            table.getSelectedColumnsAttributeDescriptor();
+        for (int i = 0; i < selecteds.length; i++) {
+            eft.remove(selecteds[i].getName());
+        }
+        featureStore.update(eft);
+    }
+
+    public void insertAttributes(FeatureTable table) throws DataException {
+    	
+		EditableFeatureType eft = featureStore.getDefaultFeatureType().getEditable();
+
+		List<String> tmpfnames = new ArrayList<String>();
+		int size = eft.size();
+		for (int i = 0; i < size; i++) {
+			FeatureAttributeDescriptor ad = (FeatureAttributeDescriptor) eft.get(i);
+			tmpfnames.add(ad.getName());
+		}
+
+		CreateNewAttributePanel panelNewField = new CreateNewAttributePanel();
+		panelNewField.setCurrentFieldNames(tmpfnames.toArray(new String[0]));
+		panelNewField.setOkAction(new NewFieldActionListener(panelNewField, eft));
+		ApplicationLocator.getManager().getUIManager().addWindow(panelNewField);
+		featureStore.update(eft);
+    }
+
+    public void renameAttributes(FeatureTable table) throws DataException {
+        
+        FeatureType _ft = featureStore.getDefaultFeatureType();
+
+        FeatureAttributeDescriptor[] selecteds =
+            table.getSelectedColumnsAttributeDescriptor();
+
+        for (int i = selecteds.length - 1; i >= 0; i--) {
+            String newName =
+                JOptionPane.showInputDialog((Component) PluginServices
+                    .getMDIManager().getActiveWindow(),
+                    PluginServices.getText(
+                    this, "_Please_insert_new_field_name"),
+                    selecteds[i]
+                    .getName());
+            if (newName == null || newName.length() == 0) {
+                continue;
+            }
+            if (_ft.getIndex(newName) != -1) {
+                NotificationManager.showMessageInfo(
+                		Messages.getText("field_already_exists"), null);
+                return;
+            }
+            
+            renameAttribute(featureStore, selecteds[i].getName(), newName);
+        }
+        
+        // featureStore.finishEditing();
+        // featureStore.edit(FeatureStore.MODE_FULLEDIT);
+    }
+
+    /**
+     * This method renames a field in three steps:
+     * 
+     * (1) add new field using type and size of old field.
+     * (2) copy value from old field to new field.
+     * (3) remove old field.
+     * 
+     * @param fs
+     * @param name
+     * @param newName
+     * @return true if the change took place
+     */
+    private static boolean renameAttribute(FeatureStore fs, String name, String newName) {
+
+        EditableFeatureType eft = null;
+        FeatureType dft = null;
+        try {
+            dft = fs.getDefaultFeatureType();
+            
+            if (dft instanceof EditableFeatureType) {
+                eft = (EditableFeatureType) dft;
+            } else {
+                eft = dft.getEditable();
+            }
+            
+            EditableFeatureAttributeDescriptor efad =
+                (EditableFeatureAttributeDescriptor) eft.getAttributeDescriptor(name);
+            efad.setName(newName);
+            fs.update(eft);
+            
+        } catch (DataException de) {
+            
+            Component root_comp =
+                ApplicationLocator.getManager().getRootComponent();
+
+            JOptionPane.showMessageDialog(
+                root_comp,
+                Messages.getText("_Unable_to_rename_attribute") +
+                ": " + de.getMessage(),
+                Messages.getText("_Unable_to_rename_attribute"),
+                JOptionPane.ERROR_MESSAGE);
+            return false;
+        }
+        return true;
+
+        /*
+        try {
+            // ========== add new field
+            eft = fs.getDefaultFeatureType().getEditable();
+            FeatureAttributeDescriptor fad = eft.getAttributeDescriptor(name);
+            eft.add(newName, fad.getType(), fad.getSize());
+            fs.update(eft);
+        } catch (DataException ex) {
+            logger.info("Unable to rename attribute (" + name + " --> " + newName + ")", ex);
+            ApplicationLocator.getManager().message(
+                Messages.getText("_Unable_to_rename_attribute"),
+                JOptionPane.ERROR_MESSAGE);
+            // did not even add new field
+            return false;
+        }
+        
+        boolean error_when_inserting = false;
+        try {
+            // ========== copy value old field -> new field
+            FeatureSet fset = fs.getFeatureSet();
+            DisposableIterator diter = fset.fastIterator();
+            Feature feat = null;
+            Object val = null;
+            EditableFeature efeat = null;
+            while (diter.hasNext()) {
+                feat = (Feature) diter.next();
+                val = feat.get(name);
+                efeat = feat.getEditable();
+                efeat.set(newName, val);
+                fset.update(efeat);
+            }
+            diter.dispose();
+            
+            // Closing editing to check that store admits new field
+            fs.finishEditing();
+        } catch (DataException ex) {
+            
+            logger.info("Error while renaming att to: " + newName, ex);
+            String final_msg = getLastMessage(ex);
+            JOptionPane.showMessageDialog(
+                root_comp,
+                Messages.getText("_Unable_to_rename_attribute")
+                + ": " + final_msg,
+                Messages.getText("_Rename_column"),
+                JOptionPane.ERROR_MESSAGE);
+            error_when_inserting = true;
+        }
+        
+        if (error_when_inserting) {
+            try {
+                // Trying to remove new field and leave table as it was
+                eft.remove(newName);
+                fs.update(eft);
+            } catch (DataException ex) {
+                // Unable to remove added field but user was
+                // already notified that something went wrong
+            }
+            // Not changed
+            return false;
+        }
+            
+
+        try {
+            // Finally reopen editing and delete old field
+            fs.edit(FeatureStore.MODE_FULLEDIT);
+            eft = fs.getDefaultFeatureType().getEditable();
+            eft.remove(name);
+            fs.update(eft);
+            
+        } catch (DataException ex) {
+            logger.info("Unable to rename attribute (" + name + " --> " + newName + ")", ex);
+            ApplicationLocator.getManager().message(
+                Messages.getText("_Unable_to_rename_attribute"),
+                JOptionPane.ERROR_MESSAGE);
+            return false;
+        }
+        return true;
+        */
+
+    }
+    
+
+
+    /**
+     * Renames field in feature store
+     * 
+     * @param fs
+     * @param oldname
+     * @param newname
+     * @return 
+     * @throws DataException
+     */
+    public static void renameColumn(FeatureStore fs,
+        String oldname, String newname) throws DataException {
+        
+        FeatureType _ft = fs.getDefaultFeatureType();
+        if (_ft.getIndex(newname) != -1) {
+            throw new StoreUpdateFeatureTypeException(
+                new Exception("Attribute name already existed."),
+                fs.getName());
+        }
+        renameAttribute(fs, oldname, newname);
+        // fs.finishEditing();
+    }
+    
+    public class NewFieldActionListener implements ActionListener {
+
+    	private CreateNewAttributePanel panel = null;
+    	private EditableFeatureType eft = null;
+    	
+    	public NewFieldActionListener(CreateNewAttributePanel p, EditableFeatureType t) {
+    		eft = t;
+    		panel = p;
+    	}
+    	
+		public void actionPerformed(ActionEvent e) {
+            try {
+                EditableFeatureAttributeDescriptor ead = panel.loadFieldDescription(eft);
+                if (ead == null) {
+                    return;
+                }
+                if (ead.getType() == DataTypes.STRING
+                    && ead.getSize() > TableOperations.MAX_FIELD_LENGTH) {
+                    NotificationManager.showMessageInfo(
+                        PluginServices.getText(this,
+                            "max_length_is")
+                            + ":"
+                            + TableOperations.MAX_FIELD_LENGTH,
+                        null);
+                    ead.setSize(TableOperations.MAX_FIELD_LENGTH);
+                }
+                PluginServices.getMDIManager().closeWindow(panel);
+            } catch (ParseException e2) {
+                NotificationManager.addError(e2);
+            }
+			
+		}
+    	
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableOperations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/ExportStatisticsFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/ExportStatisticsFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/ExportStatisticsFile.java	(revision 42196)
@@ -0,0 +1,375 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table;
+
+import java.awt.Component;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.project.documents.table.gui.CSVSeparatorOptionsPanel;
+import org.gvsig.app.project.documents.table.gui.Statistics.MyObjectStatistics;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class to create dbf and csv files at disk with the statistics group generated
+ * from a table.
+ * 
+ * dbf -> Data Base File
+ * csv -> Comma Separated Value
+ * 
+ * @author �ngel Fraile Gri��n e-mail: angel.fraile@iver.es
+ * 
+ */
+
+public class ExportStatisticsFile {
+
+    private static final Logger logger = LoggerFactory
+        .getLogger(ExportStatisticsFile.class);
+
+    private String lastPath = null;
+    private Hashtable<String, MyFileFilter> dbfExtensionsSupported; // Supported
+                                                                    // extensions.
+    private Hashtable<String, MyFileFilter> csvExtensionsSupported;
+
+    public ExportStatisticsFile(List<MyObjectStatistics> valores) {
+
+        JFileChooser jfc = new JFileChooser(lastPath);
+        jfc.removeChoosableFileFilter(jfc.getAcceptAllFileFilter());
+
+        // Adding required extensions (dbf, csv)
+        dbfExtensionsSupported = new Hashtable<String, MyFileFilter>();
+        csvExtensionsSupported = new Hashtable<String, MyFileFilter>();
+        dbfExtensionsSupported.put("dbf", new MyFileFilter("dbf",
+            PluginServices.getText(this, "Ficheros_dbf"), "dbf"));
+        csvExtensionsSupported.put("csv", new MyFileFilter("csv",
+            PluginServices.getText(this, "Ficheros_csv"), "csv"));
+
+        Iterator<MyFileFilter> iter =
+            csvExtensionsSupported.values().iterator();
+        while (iter.hasNext()) {
+            jfc.addChoosableFileFilter(iter.next());
+        }
+
+        iter = dbfExtensionsSupported.values().iterator();
+        while (iter.hasNext()) {
+            jfc.addChoosableFileFilter(iter.next());
+        }
+
+        // Opening a JFileCooser
+        if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
+            File endFile = jfc.getSelectedFile();
+            if (endFile.exists()) {// File exists in the directory.
+                int resp =
+                    JOptionPane.showConfirmDialog(
+                        (Component) PluginServices.getMainFrame(),
+                        PluginServices.getText(this,
+                            "fichero_ya_existe_seguro_desea_guardarlo")
+                            + "\n"
+                            + endFile.getAbsolutePath(), PluginServices
+                            .getText(this, "guardar"),
+                        JOptionPane.YES_NO_OPTION);// Informing the user
+                if (resp != JOptionPane.YES_OPTION) {// cancel pressed.
+                    return;
+                }
+            }// end if exits.
+            MyFileFilter filter = (MyFileFilter) jfc.getFileFilter();// dbf, csv
+            endFile = filter.normalizeExtension(endFile);// "name" + "." +
+                                                         // "dbf", "name" + "."
+                                                         // + "csv"
+
+            if (filter.getExtensionOfAFile(endFile).toLowerCase()
+                .compareTo("csv") == 0) { // csv file
+                exportToCSVFile(valores, endFile); // export to csv format
+            } else
+                if (filter.getExtensionOfAFile(endFile).toLowerCase()
+                    .compareTo("dbf") == 0) {// dbf file
+                    try {
+                        exportToDBFFile(valores, endFile);
+                    } catch (Exception e) {
+                        NotificationManager.addError(e);
+                    } // export to dbf format
+                }
+        }// end if aprove option.
+    }
+
+    /**
+     * Creating cvs format file with the statistics.
+     * Option to select the two columns separator.
+     * 
+     * Example with semicolon: Name;data\n
+     * Name2;data2\n
+     * 
+     * @param valores
+     *            - Pairs: String name (key) + Double value (
+     * @param endFile
+     *            - File to write the information
+     */
+
+    private void exportToCSVFile(List<MyObjectStatistics> valores, File endFile) {
+
+        try {
+            CSVSeparatorOptionsPanel csvSeparatorOptions =
+                new CSVSeparatorOptionsPanel();
+            PluginServices.getMDIManager().addWindow(csvSeparatorOptions);
+
+            String separator = csvSeparatorOptions.getSeparator();
+
+            if (separator != null) {
+
+                FileWriter fileCSV = new FileWriter(endFile);
+
+                fileCSV.write(PluginServices.getText(this, "Nombre")
+                    + separator + PluginServices.getText(this, "Valor") + "\n");
+
+                Iterator<MyObjectStatistics> iterador = valores.listIterator();
+
+                while (iterador.hasNext()) {// Writing value,value\n
+                    MyObjectStatistics data = iterador.next();
+                    fileCSV.write(data.getKey() + separator + (data.getValue())
+                        + "\n");
+                }
+                fileCSV.close();
+                JOptionPane.showMessageDialog(
+                    null,
+                    PluginServices.getText(this, "fichero_creado_en") + " "
+                        + endFile.getAbsolutePath(),
+                    PluginServices.getText(this, "fichero_creado_en_formato")
+                        + " csv "
+                        + PluginServices.getText(this, "mediante_el_separador")
+                        + " \"" + separator + "\"",
+                    JOptionPane.INFORMATION_MESSAGE);// Informing the user
+            } else {
+                return;
+            }
+
+        } catch (IOException e) {// Informing the user
+            logger.error("Error exportando a formato csv");
+            JOptionPane.showMessageDialog(
+                null,
+                PluginServices.getText(this,
+                    "Error_exportando_las_estadisticas")
+                    + " "
+                    + endFile.getAbsolutePath(), PluginServices.getText(this,
+                    "Error"), JOptionPane.ERROR_MESSAGE);
+        }
+
+    }
+
+    public void exportToDBFFile(List<MyObjectStatistics> valores, File endFile)
+        throws DataException, ValidateDataParametersException {
+        DataManager datamanager = DALLocator.getDataManager();
+
+        //
+        // Averigua el proveedor en funcion del fichero
+        // preguntandoselo al FilesystemServerExplorer.
+        DataServerExplorerParameters no_params =
+            (DataServerExplorerParameters) datamanager
+                .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+        
+        FilesystemServerExplorer explorer =
+            (FilesystemServerExplorer) datamanager.openServerExplorer(
+                FilesystemServerExplorer.NAME, no_params // empty params
+                );
+        String providerName = explorer.getProviderName(endFile);
+
+        try {
+            if (endFile.exists()) {
+                endFile.delete();
+            }
+            endFile.createNewFile();
+            
+            DataStoreParameters dsp =
+                explorer.createStoreParameters(endFile, providerName);
+            NewFeatureStoreParameters parameters =
+                (NewFeatureStoreParameters) datamanager
+                    .createNewStoreParameters(FilesystemServerExplorer.NAME,
+                        providerName);
+            
+            parameters.delegate(dsp);
+            
+            EditableFeatureType type =
+                parameters.getDefaultFeatureType(); // .getEditable();
+            type.add(PluginServices.getText(this, "Nombre"), DataTypes.STRING,
+                50);
+            type.add(PluginServices.getText(this, "Valor"), DataTypes.DOUBLE,
+                100).setPrecision(25);
+
+            parameters.setDefaultFeatureType(type);
+            datamanager.newStore(FilesystemServerExplorer.NAME, providerName,
+                parameters, true);
+
+            FeatureStore target =
+                (FeatureStore) datamanager.openStore(providerName, parameters);
+            target.edit(FeatureStore.MODE_APPEND);
+            Iterator<MyObjectStatistics> iterador = valores.listIterator();
+            while (iterador.hasNext()) {
+                MyObjectStatistics data = iterador.next();
+                EditableFeature ef = target.createNewFeature().getEditable();
+                ef.set(PluginServices.getText(this, "Nombre"), data.getKey());
+                ef.set(PluginServices.getText(this, "Valor"), data.getValue());
+                target.insert(ef);
+            }
+            target.finishEditing();
+            target.dispose();
+            JOptionPane.showMessageDialog(
+                (Component) PluginServices.getMainFrame(),
+                PluginServices.getText(this, "fichero_creado_en") + " "
+                    + endFile.getAbsolutePath(),
+                PluginServices.getText(this, "fichero_creado_en_formato")
+                    + " dbf", JOptionPane.INFORMATION_MESSAGE);// Informing the
+                                                               // user
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
+
+/**
+ * @author �ngel Fraile Gri��n e-mail: angel.fraile@iver.es
+ * 
+ *         Class to work with the file extensions.
+ */
+class MyFileFilter extends FileFilter {
+
+    private String[] extensiones = new String[1];
+    private String description;
+    private boolean dirs = true;
+    private String info = null;
+
+    public MyFileFilter(String[] ext, String desc) {
+        extensiones = ext;
+        description = desc;
+    }
+
+    public MyFileFilter(String[] ext, String desc, String info) {
+        extensiones = ext;
+        description = desc;
+        this.info = info;
+    }
+
+    public MyFileFilter(String ext, String desc) {
+        extensiones[0] = ext;
+        description = desc;
+    }
+
+    public MyFileFilter(String ext, String desc, String info) {
+        extensiones[0] = ext;
+        description = desc;
+        this.info = info;
+    }
+
+    public MyFileFilter(String ext, String desc, boolean dirs) {
+        extensiones[0] = ext;
+        description = desc;
+        this.dirs = dirs;
+    }
+
+    public MyFileFilter(String ext, String desc, boolean dirs, String info) {
+        extensiones[0] = ext;
+        description = desc;
+        this.dirs = dirs;
+        this.info = info;
+    }
+
+    public boolean accept(File f) {
+        if (f.isDirectory()) {
+            if (dirs) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+        for (int i = 0; i < extensiones.length; i++) {
+            if (extensiones[i].equals("")) {
+                continue;
+            }
+            if (getExtensionOfAFile(f).equalsIgnoreCase(extensiones[i])) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String[] getExtensions() {
+        return extensiones;
+    }
+
+    public boolean isDirectory() {
+        return dirs;
+    }
+
+    public String getExtensionOfAFile(File file) {
+        String name;
+        int dotPos;
+        name = file.getName();
+        dotPos = name.lastIndexOf(".");
+        if (dotPos < 1) {
+            return "";
+        }
+        return name.substring(dotPos + 1);
+    }
+
+    public File normalizeExtension(File file) {
+        String ext = getExtensionOfAFile(file);
+        if (ext.equals("") || !(this.accept(file))) {
+            return new File(file.getAbsolutePath() + "." + extensiones[0]);
+        }
+        return file;
+    }
+
+    public String getInfo() {
+        return this.info;
+    }
+
+    public void setInfo(String info) {
+        this.info = info;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/ExportStatisticsFile.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableSelectionModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableSelectionModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableSelectionModel.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.table;
+
+import org.gvsig.utils.swing.objectSelection.ObjectSelectionModel;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class TableSelectionModel implements ObjectSelectionModel {
+
+    private TableDocument[] tables;
+    private String msg;
+
+    public TableSelectionModel(TableDocument[] tables, String msg) {
+        this.tables = tables;
+        this.msg = msg;
+    }
+
+    /**
+     * @see org.gvsig.app.project.documents.table.TableSelectionModel#getTables()
+     */
+    public Object[] getObjects() {
+        return tables;
+    }
+
+    /**
+     * @see org.gvsig.utils.swing.objectSelection.ObjectSelectionModel#getMsg()
+     */
+    public String getMsg() {
+        return msg;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableSelectionModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.landregistryviewer package documentation</title>
+</head>
+<body>
+
+	<p>Table document support</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableProperties.java	(revision 42196)
@@ -0,0 +1,49 @@
+
+
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.gui.GeneralTablePropertiesPageFactory;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.propertypage.PropertiesPageManager;
+
+
+public class TableProperties extends Extension {
+
+    public void initialize() {
+        PropertiesPageManager propertiesPageManager = MapControlLocator.getPropertiesPageManager();
+        propertiesPageManager.registerFactory(new GeneralTablePropertiesPageFactory());
+    }
+
+    public void execute(String actionCommand) {
+        if( "table-show-properties".equalsIgnoreCase(actionCommand) ) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            Document doc = application.getActiveDocument(TableManager.TYPENAME);
+            if( doc == null ) {
+                return;
+            }
+            ProjectManager projectmanager = ApplicationLocator.getProjectManager();
+            DocumentManager tableManager = projectmanager.getDocumentManager(TableManager.TYPENAME);
+            IWindow win = tableManager.getPropertiesWindow(doc);
+            application.getUIManager().addWindow(win);
+        }
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        Document doc = application.getActiveDocument(TableManager.TYPENAME);
+        return doc != null;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/PrintTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/PrintTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/PrintTable.java	(revision 42196)
@@ -0,0 +1,179 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+
+import javax.swing.JTable;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * Extensi�n para imprimir una tabla.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class PrintTable extends Extension implements Printable {
+
+    private JTable table = null;
+
+    public void initialize() {
+    	IconThemeHelper.registerIcon("action", "document-print", this);
+    }
+
+    public void execute(String s) {
+        if (s.compareTo("application-print-table") == 0) {
+            IWindow f = PluginServices.getMDIManager().getActiveWindow();
+            try {
+                table =
+                    ((FeatureTableDocumentPanel) f).getTablePanel().getTable();
+            } catch (DataException e) {
+                NotificationManager.showMessageError(
+                    PluginServices.getText(this, "print_table_error"), e);
+            }
+            PluginServices.backgroundExecution(new Runnable() {
+
+                public void run() {
+                    PrinterJob pj = PrinterJob.getPrinterJob();
+                    pj.setPrintable(PrintTable.this);
+                    if (pj.printDialog()) {
+                        try {
+                            pj.print();
+                        } catch (Exception PrintException) {
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public boolean isVisible() {
+        IWindow f = PluginServices.getMDIManager().getActiveWindow();
+        if (f == null) {
+            return false;
+        }
+        if (f instanceof FeatureTableDocumentPanel) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public int print(Graphics g, PageFormat pageFormat, int pageIndex)
+        throws PrinterException {
+        Graphics2D g2 = (Graphics2D) g;
+        g2.setColor(Color.black);
+        int fontHeight = g2.getFontMetrics().getHeight();
+        int fontDesent = g2.getFontMetrics().getDescent();
+
+        // leave room for page number
+        double pageHeight = pageFormat.getImageableHeight() - fontHeight;
+        double pageWidth = pageFormat.getImageableWidth();
+        double tableWidth =
+            (double) table.getColumnModel().getTotalColumnWidth();
+        double scale = 1;
+        if (tableWidth >= pageWidth) {
+            scale = pageWidth / tableWidth;
+        }
+
+        double headerHeightOnPage = table.getTableHeader().getHeight() * scale;
+        double tableWidthOnPage = tableWidth * scale;
+
+        double oneRowHeight =
+            (table.getRowHeight() + table.getRowMargin()) * scale;
+        int numRowsOnAPage =
+            (int) ((pageHeight - headerHeightOnPage) / oneRowHeight);
+        double pageHeightForTable = oneRowHeight * numRowsOnAPage;
+        int totalNumPages =
+            (int) Math.ceil(((double) table.getRowCount()) / numRowsOnAPage);
+        if (pageIndex >= totalNumPages) {
+            return NO_SUCH_PAGE;
+        }
+
+        g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
+        // bottom center
+        g2.drawString("Page: " + (pageIndex + 1), (int) pageWidth / 2 - 35,
+            (int) (pageHeight + fontHeight - fontDesent));
+
+        g2.translate(0f, headerHeightOnPage);
+        g2.translate(0f, -pageIndex * pageHeightForTable);
+
+        // If this piece of the table is smaller
+        // than the size available,
+        // clip to the appropriate bounds.
+        if (pageIndex + 1 == totalNumPages) {
+            int lastRowPrinted = numRowsOnAPage * pageIndex;
+            int numRowsLeft = table.getRowCount() - lastRowPrinted;
+            g2.setClip(0, (int) (pageHeightForTable * pageIndex),
+                (int) Math.ceil(tableWidthOnPage),
+                (int) Math.ceil(oneRowHeight * numRowsLeft));
+        }
+        // else clip to the entire area available.
+        else {
+            g2.setClip(0, (int) (pageHeightForTable * pageIndex),
+                (int) Math.ceil(tableWidthOnPage),
+                (int) Math.ceil(pageHeightForTable));
+        }
+
+        g2.scale(scale, scale);
+        table.paint(g2);
+        g2.scale(1 / scale, 1 / scale);
+        g2.translate(0f, pageIndex * pageHeightForTable);
+        g2.translate(0f, -headerHeightOnPage);
+        g2.setClip(0, 0, (int) Math.ceil(tableWidthOnPage),
+            (int) Math.ceil(headerHeightOnPage));
+        g2.scale(scale, scale);
+        table.getTableHeader().paint(g2);
+        // paint header at top
+
+        return Printable.PAGE_EXISTS;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/PrintTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditAttributes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditAttributes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditAttributes.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableOperations;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.app.project.documents.table.gui.FeatureTypeEditingPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Extensi�n que abre la ventana para cambiar la configuraci�n de la estructura
+ * de la tabla.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditAttributes extends Extension {
+
+    private FeatureTableDocumentPanel table = null;
+    private TableOperations featureTableOperations = null;
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#updateUI(java.lang.String)
+     */
+    public void execute(String s) {
+    	if( "table-column-manager".equalsIgnoreCase(s)) {
+	        TableDocument pt = table.getModel();
+	        FeatureStore fs = pt.getStore();
+	        try {
+	            PluginServices.getMDIManager().addWindow(
+	                new FeatureTypeEditingPanel(fs));
+	        } catch (DataException e) {
+	            NotificationManager.addError(
+	                PluginServices.getText(this, "create_editabletype"), e);
+	        }
+    	} else {
+
+    		try {
+                if ("table-add-column".equals(s)) {
+                	featureTableOperations.setTablePanel(table);
+                    featureTableOperations.insertAttributes(table
+                        .getTablePanel().getTable());
+                }
+    		} catch (DataException de) {
+                NotificationManager.showMessageError(
+                		Messages.getText("update_featuretype_error"), null);
+    		}
+    		
+    	}
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    	IconThemeHelper.registerIcon("action", "table-column-manager", this);
+		IconThemeHelper.registerIcon("action", "table-add-column", this);
+		featureTableOperations = TableOperations.getInstance();
+    }
+
+    public boolean isEnabled() {
+        FeatureStore fs = table.getModel().getStore();
+        return fs.isEditing();
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        if (v != null && v instanceof FeatureTableDocumentPanel) {
+            table = (FeatureTableDocumentPanel) v;
+            return true;
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditAttributes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableRowsOperations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableRowsOperations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableRowsOperations.java	(revision 42196)
@@ -0,0 +1,124 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+
+public class TableRowsOperations extends Extension {
+
+    public void initialize() {
+        registerIcons();
+    }
+
+    private void registerIcons() {
+    	IconThemeHelper.registerIcon("action", "selection-move-up", this);
+    	IconThemeHelper.registerIcon("action", "selection-disable-move-up", this);
+    	IconThemeHelper.registerIcon("action", "selection-reverse", this);    
+    }
+
+    public void execute(String actionCommand) {
+        FeatureTableDocumentPanel tableDocument = getTableDocument();
+        if (actionCommand.equalsIgnoreCase("selection-disable-move-up") ) {
+            tableDocument.setSelectionUp(false);
+        }
+        if (actionCommand.equalsIgnoreCase("selection-move-up") ) {
+//            if (thereIsSelection(tableDocument)) {
+                tableDocument.setSelectionUp(true);
+                tableDocument.getModel().setModified(true);
+//            } else {
+//                JOptionPane.showMessageDialog(
+//                    ApplicationLocator.getManager().getRootComponent(),
+//                    Messages.getText("_There_are_no_selected_rows"),
+//                    Messages.getText("_Move_up_selection"),
+//                    JOptionPane.INFORMATION_MESSAGE);
+//            }
+            
+        }
+        if (actionCommand.equalsIgnoreCase("selection-reverse") ) {
+            invertSelection(tableDocument);
+            tableDocument.getModel().setModified(true);
+        }
+        
+    }
+
+    /**
+     * Flip the selection (inverts selection)
+     * 
+     * @param table
+     */
+    private void invertSelection(FeatureTableDocumentPanel table) {
+        try {
+            FeatureStore fs = getTableDocument().getModel().getStore();
+            fs.getFeatureSelection().reverse();
+        } catch (DataException e) {
+            e.printStackTrace();
+            NotificationManager.addError(e);
+        }
+    }
+
+//    private void showsSelectedRows(FeatureTableDocumentPanel table) {
+//        table.setSelectionUp(true);
+//    }
+
+    public boolean isEnabled() {
+        return getTableDocument() != null;
+    }
+
+    public boolean isVisible() {
+        return getTableDocument() != null;
+    }
+
+    private FeatureTableDocumentPanel getTableDocument() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        if (v != null && v instanceof FeatureTableDocumentPanel) {
+            return (FeatureTableDocumentPanel) v;
+        }
+        return null;
+    }
+    
+    private boolean thereIsSelection(FeatureTableDocumentPanel tabledoc) {
+        
+        if (tabledoc != null) {
+            try {
+                return !tabledoc.getModel().getStore()
+                    .getFeatureSelection().isEmpty();
+            } catch (DataException e) {
+                NotificationManager.addError(e);
+            }
+        }
+        return false;
+        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableRowsOperations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowGraphicsLayerTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowGraphicsLayerTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowGraphicsLayerTable.java	(revision 42196)
@@ -0,0 +1,166 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Opens a table document of the current view's graphic layer.
+ * 
+ * @author gvSIG team
+ */
+public class ShowGraphicsLayerTable extends Extension implements
+		PropertyChangeListener {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(ShowGraphicsLayerTable.class);
+
+	private ApplicationManager appManager = ApplicationLocator.getManager();
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return getCurrentViewDocument() != null;
+	}
+
+	private ViewDocument getCurrentViewDocument() {
+		return (ViewDocument) appManager
+				.getActiveDocument(ViewManager.TYPENAME);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		try {
+			ViewDocument document = getCurrentViewDocument();
+			if (document == null) {
+				return false;
+			}
+			GraphicLayer graphicsLayer = document.getMapContext()
+					.getGraphicsLayer();
+			TableManager tableManager = getTableManager();
+			TableDocument tableDocument = tableManager
+					.getTableDocument(graphicsLayer);
+			return tableDocument != null
+					|| document.getMapContext().getGraphicsLayer()
+							.getFeatureStore().getFeatureCount() > 0;
+		} catch (DataException e) {
+			LOG.error("Error checking if the current document is a "
+					+ "view and has data in the graphics layer", e);
+			return false;
+		}
+	}
+
+	/**
+	 * @see com.iver.mdiApp.plugins.IExtension#updateUI(java.lang.String)
+	 */
+	public void execute(String action) {
+
+		ViewDocument document = getCurrentViewDocument();
+		GraphicLayer graphicsLayer = document.getMapContext()
+				.getGraphicsLayer();
+
+		ProjectManager projectManager = getProjectManager();
+		TableManager tableManager = getTableManager();
+
+		TableDocument tableDocument = tableManager
+				.getTableDocument(graphicsLayer);
+		FeatureStore fs = graphicsLayer.getFeatureStore();
+
+		if (tableDocument == null) {
+			tableDocument = (TableDocument) projectManager.createDocument(
+					TableManager.TYPENAME,
+					PluginServices.getText(this, "Tabla_de_Atributos") + ": "
+							+ graphicsLayer.getName());
+			tableDocument.setStore(fs);
+			tableDocument.setAssociatedLayer(graphicsLayer);
+			projectManager.getCurrentProject().add(tableDocument);
+		}
+
+		tableDocument.setModified(true);
+		FeatureTableDocumentPanel featureTableDocumentPanel = (FeatureTableDocumentPanel) tableManager
+				.getMainWindow(tableDocument);
+
+		appManager.getUIManager().addWindow(featureTableDocumentPanel);
+
+	}
+
+	private ProjectManager getProjectManager() {
+		return ProjectManager.getInstance();
+	}
+
+	private TableManager getTableManager() {
+		TableManager tableManager = (TableManager) getProjectManager()
+				.getDocumentManager(TableManager.TYPENAME);
+		return tableManager;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		registerIcons();
+	}
+
+	public void postInitialize() {
+		// Listen just in case a view document is removed, to remove also
+		// the related graphics layer table document, if any
+		getProjectManager().getCurrentProject().addPropertyChangeListener(this);
+	}
+
+	private void registerIcons() {
+		IconThemeHelper.registerIcon("action", "layer-show-attributes-table", this);
+	}
+
+	public void propertyChange(PropertyChangeEvent evt) {
+		if ("delDocument".equals(evt.getPropertyName())) {
+			if (evt.getOldValue() != null
+					&& evt.getOldValue() instanceof ViewDocument) {
+				ViewDocument viewDocument = (ViewDocument) evt.getOldValue();
+				getTableManager().removeTableDocument(
+						viewDocument.getMapContext().getGraphicsLayer());
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowGraphicsLayerTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCutExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCutExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCutExtension.java	(revision 42196)
@@ -0,0 +1,70 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditCutExtension extends AbstractTableEditExtension {
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        super.initialize();
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        if ("edit-cut-table".equals(actionCommand)) {
+            try {
+                featureTableOperations.setTablePanel(table);
+                featureTableOperations.cutFeatures();
+            } catch (DataException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+     public boolean isEnabled() {
+        try {
+            if (this.table.getTablePanel().getTable().getSelectedRowCount() > 0) {
+                return true;
+            }
+        } catch (DataException ex) {
+            logger.warn("can't determine if there are selected lines in the table.",ex);
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCutExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStartExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStartExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStartExtension.java	(revision 42196)
@@ -0,0 +1,119 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.util.List;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableDocument.TableLink;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.editing.EditingNotification;
+import org.gvsig.editing.EditingNotificationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditStartExtension extends AbstractTableEditExtension {
+        private static final Logger logger = LoggerFactory.getLogger(TableEditStartExtension.class);
+
+	public void initialize() {
+		super.initialize();
+		IconThemeHelper.registerIcon("action", "table-start-editing", this);
+	}
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        if ("table-start-editing".equals(actionCommand)) {
+            try {
+                TableDocument doc = (TableDocument) table.getDocument();
+                EditingNotificationManager editingNotification = MapControlLocator.getEditingNotificationManager();
+                EditingNotification notification = editingNotification.notifyObservers(
+                        this,
+                        EditingNotification.BEFORE_ENTER_EDITING_STORE,
+                        doc,
+                        doc.getStore());
+                if( notification.isCanceled() ) {
+                    return;
+                }
+                doc.getStore().edit(FeatureStore.MODE_FULLEDIT);
+                ApplicationLocator.getManager().refreshMenusAndToolBars();
+                editingNotification.notifyObservers(
+                        this,
+                        EditingNotification.AFTER_ENTER_EDITING_STORE,
+                        doc,
+                        doc.getStore());
+            } catch (DataException e) {
+                logger.warn("Problems starting table editing.",e);
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (v == null) {
+            return false;
+        }
+        if (v instanceof FeatureTableDocumentPanel) {
+            FeatureTableDocumentPanel t = (FeatureTableDocumentPanel) v;
+            FeatureStore fs = t.getModel().getStore();
+            return fs.allowWrite();
+        }
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (v == null) {
+            return false;
+        }
+
+        if (v instanceof FeatureTableDocumentPanel
+            && !((FeatureTableDocumentPanel) v).getModel().getStore().isEditing()) {
+            table = (FeatureTableDocumentPanel) v;
+            return true;
+        }
+
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStartExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableCommandStackExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableCommandStackExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableCommandStackExtension.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.gui.command.CommandStackDialog;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class TableCommandStackExtension extends Extension {
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+		.getActiveWindow();
+
+		FeatureTableDocumentPanel table = (FeatureTableDocumentPanel) f;
+		TableDocument model = table.getModel();
+		if (s.equals("edit-undo-redo-actions-table")) {
+			FeatureStore featureStore = model.getStore();
+			featureStore.addObserver(table);
+			CommandStackDialog csd = new CommandStackDialog();
+
+			csd.setModel(featureStore);
+
+			PluginServices.getMDIManager().addWindow(csd);
+		}
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+				.getActiveWindow();
+		if (f instanceof FeatureTableDocumentPanel){
+			FeatureTableDocumentPanel table = (FeatureTableDocumentPanel) f;
+			TableDocument model = table.getModel();
+			if (model.getStore().isEditing())
+				return true;
+		}
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableCommandStackExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoTableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoTableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoTableExtension.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.undo.UndoException;
+
+/**
+ * Extensi�n encargada de gestionar el rehacer un comando anteriormente
+ * deshecho.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class UndoTableExtension extends Extension {
+
+    private FeatureTableDocumentPanel table;
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String s) {
+    	if( "edit-undo-table".equalsIgnoreCase(s)) {
+            if (table.getModel().getStore().isEditing()) {
+                FeatureStore fs = table.getModel().getStore();
+                try {
+                    fs.undo();
+                } catch (UndoException e) {
+                    NotificationManager.addError(e);
+                }
+            }
+            table.getModel().setModified(true);
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        FeatureStore fs = table.getModel().getStore();
+        if (fs != null && fs.isEditing()) {
+            return fs.canUndo();
+        }
+
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        org.gvsig.andami.ui.mdiManager.IWindow f =
+            PluginServices.getMDIManager().getActiveWindow();
+        if (f != null && f instanceof FeatureTableDocumentPanel) {
+            table = (FeatureTableDocumentPanel) f;
+            return true;
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoTableExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/package.html	(revision 42196)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.landregistryviewer package documentation</title>
+</head>
+<body>
+
+	<p>
+	Table document extensions for gvSIG.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTableEditExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTableEditExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTableEditExtension.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.table.TableOperations;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractTableEditExtension extends Extension {
+    
+    protected static final Logger logger = LoggerFactory.getLogger(AbstractTableEditExtension.class);
+
+    protected FeatureTableDocumentPanel table = null;
+    protected TableOperations featureTableOperations = null;
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        featureTableOperations = TableOperations.getInstance();
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        if (v != null
+            && v instanceof FeatureTableDocumentPanel
+            && ((FeatureTableDocumentPanel) v).getModel().getStore()
+                .isEditing()) {
+            table = (FeatureTableDocumentPanel) v;
+            return true;
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTableEditExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java	(revision 42196)
@@ -0,0 +1,251 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.filter.ExpressionListener;
+import org.gvsig.app.gui.filter.FilterDialog;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+import org.gvsig.utils.exceptionHandling.ExceptionListener;
+
+/**
+ * Extensi�n que abre un di�logo para poder hacer un filtro de una capa o tabla.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class SelectByAttributesExtension extends Extension implements ExpressionListener {
+
+    protected FeatureStore featureStore = null;
+    protected FeatureTableDocumentPanel table;
+    private String filterTitle;
+
+    public void initialize() {
+        registerIcons();
+    }
+
+    private void registerIcons() {
+    	IconThemeHelper.registerIcon("action", "selection-by-attributes", this);
+    }
+
+    public void execute(String actionCommand) {
+        if ("selection-by-attributes-table".equals(actionCommand)) {
+            IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+            if (v instanceof FeatureTableDocumentPanel) {
+                table = (FeatureTableDocumentPanel) v;
+
+                featureStore = table.getModel().getStore();
+                filterTitle = table.getModel().getName();
+                table.getModel().setModified(true);
+            }
+
+            doExecute();
+        }
+    }
+
+    protected void doExecute() {
+        FilterDialog dlg = new FilterDialog(filterTitle);
+        dlg.addExpressionListener(this);
+        dlg.addExceptionListener(new ExceptionListener() {
+
+            public void exceptionThrown(Throwable t) {
+                NotificationManager.addError(t.getMessage(), t);
+            }
+        });
+        dlg.setModel(featureStore);
+        PluginServices.getMDIManager().addWindow(dlg);
+    }
+
+    public boolean isEnabled() {
+        return isVisible();
+    }
+
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        return (v instanceof FeatureTableDocumentPanel);
+    }
+
+    // if no filter expression -> no element selected
+    public void newSet(String expression) throws DataException {
+        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+            FeatureSet set = null;
+            try {
+                set = doSet(expression);
+
+                if (set == null) {
+                    return;
+                }
+                featureStore.setSelection(set);
+
+            } catch (Exception e) {
+                
+                JOptionPane.showMessageDialog(
+                    ApplicationLocator.getManager().getRootComponent(),
+                    Messages.getText("_Invalid_expression") + ":\n"
+                        + getLastMessage(e),
+                    Messages.getText("_Invalid_expression"),
+                    JOptionPane.ERROR_MESSAGE);
+                
+            } finally {
+                if (set != null) {
+                    set.dispose();
+                }
+            }
+        } else {
+            // if no expression -> no element selected
+            featureStore.getFeatureSelection().deselectAll();
+        }
+    }
+
+    private FeatureSet doSet(String expression) throws DataException {
+        FeatureQuery query = featureStore.createFeatureQuery();
+        DataManager manager = DALLocator.getDataManager();
+        query.setFilter(manager.createExpresion(expression));
+        return featureStore.getFeatureSet(query);
+    }
+
+    public void addToSet(String expression) throws DataException {
+        // if no filter expression -> don't add more elements to set
+        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+            FeatureSet set = null;
+            try {
+                set = doSet(expression);
+
+                if (set == null) {
+                    return;
+                }
+                featureStore.getFeatureSelection().select(set);
+            } finally {
+                if (set != null) {
+                    set.dispose();
+                }
+            }
+        }
+    }
+
+    public void fromSet(String expression) throws DataException {
+        if ( !this.filterExpressionFromWhereIsEmpty(expression) ) {
+            FeatureSet set = null;
+            try {
+                set = doSet(expression);
+                if ( set == null ) {
+                    return;
+                }
+                FeatureSelection oldSelection = featureStore.getFeatureSelection();
+                FeatureSelection newSelection = featureStore.createFeatureSelection();
+                Iterator iterator = set.iterator();
+                while ( iterator.hasNext() ) {
+                    Feature feature = (Feature) iterator.next();
+                    if ( oldSelection.isSelected(feature) ) {
+                        newSelection.select(feature);
+                    }
+                }
+                featureStore.setSelection(newSelection);
+            } finally {
+                if ( set != null ) {
+                    set.dispose();
+                }
+            }
+        } else {
+            featureStore.getFeatureSelection().deselectAll();
+        }
+    }
+    
+    /**
+     * Returns true if the WHERE subconsultation of the filterExpression is
+     * empty ("")
+     * 
+     * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+     * @param expression
+     *            An string
+     * @return A boolean value
+     */
+    private boolean filterExpressionFromWhereIsEmpty(String expression) {
+        
+        if (expression == null) {
+            return true;
+        }
+        
+        String subExpression = expression.trim();
+        
+        if (subExpression.length() == 0) {
+            return true;
+        }
+        
+        int pos;
+
+        // Remove last ';' if exists
+        if (subExpression.charAt(subExpression.length() - 1) == ';') {
+            subExpression =
+                subExpression.substring(0, subExpression.length() - 1).trim();
+        }
+
+        // If there is no 'where' clause
+        if ((pos = subExpression.indexOf("where")) == -1) {
+            return false;
+        }
+
+        // If there is no subexpression in the WHERE clause -> true
+        // ( + 5 is the length of the 'where')
+        subExpression =subExpression.substring(pos + 5, subExpression.length()).trim(); 
+                                                                             
+        if (subExpression.length() == 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    
+    /**
+     * @param ex
+     * @return
+     */
+    public static String getLastMessage(Throwable ex) {
+        
+        Throwable p = ex;
+        while (p.getCause() != null && p.getCause() != p) {
+            p = p.getCause();
+        }
+        return p.getMessage();
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditInsertExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditInsertExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditInsertExtension.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditInsertExtension extends AbstractTableEditExtension {
+
+	public void initialize() {
+		super.initialize();
+		IconThemeHelper.registerIcon("action", "table-add-row", this);
+	}
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        if ("table-add-row".equals(actionCommand)) {
+            try {
+                featureTableOperations.setTablePanel(table);
+                featureTableOperations.insertNewFeature();
+            } catch (DataException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return (table.getModel().getAssociatedLayer() == null);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditInsertExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableNumericFieldOperations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableNumericFieldOperations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableNumericFieldOperations.java	(revision 42196)
@@ -0,0 +1,214 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.math.BigDecimal;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.app.project.documents.table.gui.Statistics;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * @author 2004-2005 Fernando Gonz�lez Cort�s
+ * @author 2005- Vicente Caballero
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class TableNumericFieldOperations extends Extension {
+
+    private FeatureTableDocumentPanel table;
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+       IconThemeHelper.registerIcon("action", "table-statistics", this);
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+    	if( "table-statistics".equalsIgnoreCase(actionCommand)) {
+	        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+	
+	        if (v != null) {
+	            if (v.getClass() == FeatureTableDocumentPanel.class) {
+	
+	                FeatureTableDocumentPanel table = (FeatureTableDocumentPanel) v;
+	
+	                doExecute(table);
+	            }
+	        }
+    	}
+    	
+    }
+
+    /**
+     * "execute" method acction
+     * 
+     * @param actionCommand
+     *            The acction command that executes this method
+     * @param table
+     *            Table to operate
+     */
+    protected void doExecute(FeatureTableDocumentPanel table) {
+        FeatureSet featureSet = null;
+        DisposableIterator iterator = null;
+        try {
+            FeatureAttributeDescriptor fad =
+                table.getTablePanel().getTable()
+                    .getSelectedColumnsAttributeDescriptor()[0];
+            long numRows = 0;
+            FeatureStore fs = table.getModel().getStore();
+
+            // Get the iterator from the selection or all the data
+            FeatureSelection selection = fs.getFeatureSelection();
+            if (selection.isEmpty()) {
+                FeatureQuery fq = fs.createFeatureQuery();
+                fq.setAttributeNames(new String[] { fad.getName() });
+                featureSet = fs.getFeatureSet();
+                numRows = featureSet.getSize();
+                iterator = featureSet.fastIterator();
+            } else {
+                numRows = selection.getSize();
+                iterator = selection.fastIterator();
+            }
+
+            // Read all values and calculate the min, max and the sum.
+            // Also, calculate what we can for the variance
+            BigDecimal sum = BigDecimal.ZERO;
+            double min = Double.MAX_VALUE;
+            double max = -Double.MAX_VALUE;
+            BigDecimal variance = BigDecimal.ZERO;
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Number valueNumber = (Number) feature.get(fad.getName());
+                if (valueNumber == null) {
+                    continue;
+                }
+                double value = valueNumber.doubleValue();
+                BigDecimal valueBig = BigDecimal.valueOf(value);
+                sum = sum.add(valueBig);
+                if (value < min) {
+                    min = value;
+                }
+                if (value > max) {
+                    max = value;
+                }
+                variance = variance.add(valueBig.pow(2));
+            }
+
+            // Calculate the average, the variance final value and the standard
+            // desviation
+            BigDecimal average;
+            double desviation = 0.0d;
+            if (numRows < 1l) {
+                average = BigDecimal.ZERO;
+            } else {
+                BigDecimal numRowsBig = BigDecimal.valueOf(numRows);
+                average = sum.divide(numRowsBig, BigDecimal.ROUND_HALF_DOWN);
+                variance =
+                    variance.divide(numRowsBig, BigDecimal.ROUND_HALF_DOWN)
+                        .subtract(average.pow(2));
+                desviation = Math.sqrt(variance.doubleValue());
+            }
+
+            // Create and shot the statistics window
+            Statistics st = new Statistics();
+            st.setStatistics(average.doubleValue(), max, min,
+                variance.doubleValue(), desviation, numRows, max - min,
+                sum.doubleValue());
+            PluginServices.getMDIManager().addWindow(st);
+        } catch (DataException e) {
+            NotificationManager.addError(e);
+        } finally {
+            if (iterator != null) {
+                iterator.dispose();
+            }
+            if (featureSet != null) {
+                featureSet.dispose();
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return doIsEnabled(table);
+    }
+
+    protected boolean doIsEnabled(FeatureTableDocumentPanel table) {
+        // FIXME
+        FeatureAttributeDescriptor[] fads = null;
+        try {
+            fads =
+                table.getTablePanel().getTable()
+                    .getSelectedColumnsAttributeDescriptor();
+        } catch (DataException e) {
+            e.printStackTrace();
+        }
+
+        if (fads.length == 1) {
+            // int index=indices.nextSetBit(0);
+            // if
+            // (table.getModel().getStore().getDefaultFeatureType().size()<index+1)
+            // {
+            // return false;
+            // }
+            int type = fads[0].getType();
+            if ((type == DataTypes.LONG) || (type == DataTypes.DOUBLE)
+                || (type == DataTypes.FLOAT) || (type == DataTypes.INT)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        if (v != null && v instanceof FeatureTableDocumentPanel) {
+            table = (FeatureTableDocumentPanel) v;
+            return true;
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableNumericFieldOperations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RemoveTableLink.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RemoveTableLink.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RemoveTableLink.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+
+/**
+ * Extensi�n para borrar los link existentes entre tablas.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class RemoveTableLink extends Extension {
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    	IconThemeHelper.registerIcon("action", "table-remove-link", this);
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+    	if( "table-remove-link".equalsIgnoreCase(actionCommand)) {
+	        FeatureTableDocumentPanel t =
+	            (FeatureTableDocumentPanel) PluginServices.getMDIManager()
+	                .getActiveWindow();
+	        TableDocument pt = t.getModel();
+	        pt.removeLinkTable();// restoreDataSource();
+	        t.getModel().setModified(true);
+    	}
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (v == null) {
+            return false;
+        }
+
+        if (v.getClass() == FeatureTableDocumentPanel.class) {
+            FeatureTableDocumentPanel t = (FeatureTableDocumentPanel) v;
+
+            if (t.getModel().hasLinks()) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (v == null) {
+            return false;
+        }
+
+        if (v instanceof FeatureTableDocumentPanel) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RemoveTableLink.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableExtension.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.gui.toc.ShowAttributesTableTocMenuEntry;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerTableWizardPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+/**
+ * A gvSIG {@link Extension} to register the Table document type.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class TableExtension extends Extension {
+
+    public void initialize() {
+    	
+        ExtensionPointManager epMan = ToolsLocator.getExtensionPointManager();
+        epMan.add("DocumentActions_Table",
+            "Context menu options of the table document list"
+                + " in the project window " + "(register instances of "
+                + "org.gvsig.app.project.AbstractDocumentContextMenuAction)");
+        
+        // Adding TOC menu entry
+    	ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add(
+				"View_TocActions", "");
+		exPoint.append(
+				ShowAttributesTableTocMenuEntry.EXTENSION_POINT_NAME,
+				"TOC popup menu to show vector layer's attributes table",
+				new ShowAttributesTableTocMenuEntry());
+    }
+
+    public void postInitialize() {
+        TableManager.register();
+        ApplicationLocator.getManager().registerAddTableWizard("File",
+            "File Table", FilesystemExplorerTableWizardPanel.class);
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+
+    public void execute(String actionCommand) {
+        // Nothing to do
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java	(revision 42196)
@@ -0,0 +1,131 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Extensi�n de zoom a lo seleccionado teniendo como ventana activa una tabla.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class ZoomToSelectExtension extends Extension {
+
+    public void execute(String s) {
+    	if( "view-navigation-zoom-to-selection-table".equalsIgnoreCase(s) ) {
+	        org.gvsig.andami.ui.mdiManager.IWindow f =
+	            PluginServices.getMDIManager().getActiveWindow();
+	        MapContext mapa = null;
+	        Envelope selectedExtent = null;
+	        if (f instanceof FeatureTableDocumentPanel) {
+	            FeatureTableDocumentPanel table = (FeatureTableDocumentPanel) f;
+	            mapa = (table.getModel().getAssociatedLayer()).getMapContext();
+	        }
+	
+	        try {
+	            selectedExtent = mapa.getSelectionBounds();
+	            mapa.getViewPort().setEnvelope(selectedExtent);
+	        } catch (BaseException e) {
+	            NotificationManager.addError(e);
+	        }
+    	}
+    }
+
+    public boolean isVisible() {
+        org.gvsig.andami.ui.mdiManager.IWindow window =
+            PluginServices.getMDIManager().getActiveWindow();
+        if (window instanceof FeatureTableDocumentPanel) {
+            FeatureTableDocumentPanel featureTableDocumentPanel =
+                (FeatureTableDocumentPanel) window;
+            IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
+            for (int i = 0; i < windows.length; i++) {
+                if (windows[i] instanceof DefaultViewPanel) {
+                    if (featureTableDocumentPanel.getModel()
+                        .getAssociatedLayer() != null) {
+                        if (((DefaultViewPanel) windows[i])
+                            .getMapControl()
+                            .getMapContext()
+                            .equals(
+                                (featureTableDocumentPanel.getModel()
+                                    .getAssociatedLayer()).getMapContext())) {
+                            return true;
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    public boolean isEnabled() {
+        org.gvsig.andami.ui.mdiManager.IWindow f =
+            PluginServices.getMDIManager().getActiveWindow();
+        if (f == null) {
+            return false;
+        }
+        if (f instanceof FeatureTableDocumentPanel) {
+            FeatureTableDocumentPanel t = (FeatureTableDocumentPanel) f;
+            IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
+            for (int i = 0; i < windows.length; i++) {
+                if (windows[i] instanceof DefaultViewPanel) {
+                    if (((DefaultViewPanel) windows[i])
+                        .getMapControl()
+                        .getMapContext()
+                        .equals(
+                            (t.getModel().getAssociatedLayer()).getMapContext())) {
+                        try {
+                            if (!t.getModel().getStore().getFeatureSelection()
+                                .isEmpty()) {
+                                return true;
+                            }
+                        } catch (DataException e) {
+                            NotificationManager.addError(e);
+                            return false;
+                        }
+                    }
+                }
+            }
+
+        }
+        return false;
+    }
+
+    public void initialize() {
+        registerIcons();
+    }
+
+    private void registerIcons() {
+    	IconThemeHelper.registerIcon("action", "view-navigation-zoom-to-selection", this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCopyExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCopyExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCopyExtension.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditCopyExtension extends AbstractTableEditExtension {
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        super.initialize();
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        if ("edit-copy-table".equals(actionCommand)) {
+            try {
+                featureTableOperations.setTablePanel(table);
+                featureTableOperations.copyFeatures();
+            } catch (DataException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        try {
+            if (table.getTablePanel().getTable().getSelectedRowCount() > 0)
+                return true;
+        } catch (DataException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditCopyExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditPasteExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditPasteExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditPasteExtension.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditPasteExtension extends AbstractTableEditExtension {
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        super.initialize();
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        if ("edit-paste-table".equals(actionCommand)) {
+            try {
+                featureTableOperations.setTablePanel(table);
+                featureTableOperations.pasteFeatures();
+            } catch (DataException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return featureTableOperations.hasSelection();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditPasteExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowTable.java	(revision 42196)
@@ -0,0 +1,211 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+/**
+ * Extensi�n que abre las tablas asociadas a las vistas.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class ShowTable extends Extension implements LayerCollectionListener {
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        AbstractViewPanel f =
+            (AbstractViewPanel) PluginServices.getMDIManager()
+                .getActiveWindow();
+
+        if (f == null) {
+            return false;
+        }
+
+        FLayer[] selected =
+            f.getViewDocument().getMapContext().getLayers().getActives();
+
+        boolean algunaTabla = false;
+
+        for (int i = 0; i < selected.length; i++) {
+            if (selected[i].isAvailable() && selected[i] instanceof FLyrVect) {
+                FLyrVect co = (FLyrVect) selected[i];
+
+                try {
+                    if (co.getFeatureStore() != null) {
+                        algunaTabla = true;
+                    }
+                    // } catch (ReadException e) {
+                    // return false;
+                } catch (NullPointerException e) {
+                    return false;
+                }
+            }
+        }
+
+        return algunaTabla;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        org.gvsig.andami.ui.mdiManager.IWindow f =
+            PluginServices.getMDIManager().getActiveWindow();
+
+        if (f == null) {
+            return false;
+        }
+
+        return (f instanceof AbstractViewPanel);
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#updateUI(java.lang.String)
+     */
+    public void execute(String s) {
+		if ("layer-show-attributes-table".equalsIgnoreCase(s)) {
+			AbstractViewPanel vista = (AbstractViewPanel) PluginServices
+					.getMDIManager().getActiveWindow();
+			FLayer[] actives = vista.getViewDocument().getMapContext()
+					.getLayers().getActives();
+
+			for (int i = 0; i < actives.length; i++) {
+				if (actives[i] instanceof FLyrVect) {
+					FLyrVect co = (FLyrVect) actives[i];
+
+					ProjectManager projectManager = getProjectManager();
+					TableManager tableManager = getTableManager();
+
+					TableDocument projectTable = tableManager
+							.getTableDocument(co);
+					FeatureStore fs = ((FLyrVect) actives[i]).getFeatureStore();
+
+					if (projectTable == null) {
+						projectTable = (TableDocument) projectManager
+								.createDocument(
+										TableManager.TYPENAME,
+										PluginServices.getText(this,
+												"Tabla_de_Atributos")
+												+ ": "
+												+ actives[i].getName());
+						projectTable.setStore(fs);
+						projectTable.setAssociatedLayer(co);
+						co.getParentLayer().addLayerCollectionListener(this);
+						projectManager.getCurrentProject().add(projectTable);
+					}
+
+					FeatureTableDocumentPanel featureTableDocumentPanel = (FeatureTableDocumentPanel) projectTable
+							.getFactory().getMainWindow(projectTable);
+
+					featureTableDocumentPanel.getModel().setModified(true);
+					PluginServices.getMDIManager().addWindow(
+							featureTableDocumentPanel);
+				}
+			}
+		}
+	}
+
+    private ProjectManager getProjectManager() {
+        return ProjectManager.getInstance();
+    }
+
+    private TableManager getTableManager() {
+        TableManager tableManager =
+            (TableManager) getProjectManager().getDocumentManager(
+                TableManager.TYPENAME);
+        return tableManager;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    	IconThemeHelper.registerIcon("action", "layer-show-attributes-table", this);
+    }
+
+    public void layerAdded(LayerCollectionEvent e) {
+        // Nothing to do
+    }
+
+    public void layerMoved(LayerPositionEvent e) {
+        // Nothing to do
+    }
+
+    public void layerRemoved(LayerCollectionEvent e) {
+        FLayer layer = e.getAffectedLayer();
+        // Just in case we where listening to a group of layers being removed
+        // remove us from there
+        if (layer instanceof FLayers) {
+            ((FLayers) layer).removeLayerCollectionListener(this);
+        }
+        // Remove the related table document, if any
+        if (layer instanceof FLyrVect) {
+            getTableManager().removeTableDocument((FLyrVect) layer);
+            // If the parent layers has not other child layers, for sure there
+            // are not related tables opened, don't need to listen
+            // LayerCollectionEvents anymore.
+            // TODO: remove us also when there are not any child layers with
+            // related table documents
+            FLayers layers = layer.getParentLayer();
+            if (layers != null && layers.getLayersCount() == 0) {
+                layers.removeLayerCollectionListener(this);
+            }
+        }
+    }
+
+    public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+        // Nothing to do
+    }
+
+    public void layerMoving(LayerPositionEvent e) throws CancelationException {
+        // Nothing to do
+    }
+
+    public void layerRemoving(LayerCollectionEvent e)
+        throws CancelationException {
+        // Nothing to do
+    }
+
+    public void visibilityChanged(LayerCollectionEvent e)
+        throws CancelationException {
+        // Nothing to do
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+
+/**
+ * Extensi�n encargada de limpiar la selecci�n.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class ClearSelectionExtension extends Extension {
+
+    public void execute(String s) {
+        if (s.compareTo("selection-clear-table") == 0) {
+            IWindow activeWindow =
+                PluginServices.getMDIManager().getActiveWindow();
+
+            if (isFeatureTableDocumentPanel(activeWindow)) {
+                try {
+                    FeatureSelection selection = getSelection(activeWindow);
+                    selection.deselectAll();
+                } catch (DataException e) {
+                    NotificationManager.addError(e);
+                }
+            }
+        }
+    }
+
+    public boolean isVisible() {
+        IWindow activeWindow = PluginServices.getMDIManager().getActiveWindow();
+        return isFeatureTableDocumentPanel(activeWindow);
+    }
+
+    private boolean isFeatureTableDocumentPanel(IWindow activeWindow) {
+        return activeWindow instanceof FeatureTableDocumentPanel;
+    }
+
+    public boolean isEnabled() {
+        IWindow activeWindow = PluginServices.getMDIManager().getActiveWindow();
+
+        if (isFeatureTableDocumentPanel(activeWindow)) {
+            try {
+                return !getSelection(activeWindow).isEmpty();
+            } catch (DataException e) {
+                throw new RuntimeException(
+                    "Error getting the selection to check if it is empty", e);
+            }
+        }
+
+        return false;
+    }
+
+    private FeatureSelection getSelection(IWindow activeWindow)
+        throws DataException {
+        return (FeatureSelection) ((FeatureTableDocumentPanel) activeWindow)
+            .getModel().getStore().getSelection();
+    }
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "selection-clear", this);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableOperations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableOperations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableOperations.java	(revision 42196)
@@ -0,0 +1,408 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.filter.ExpressionListener;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.gui.AndamiWizard;
+import org.gvsig.app.project.documents.gui.ObjectSelectionStep;
+import org.gvsig.app.project.documents.table.FieldSelectionModel;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.TableSelectionModel;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.utils.swing.objectSelection.SelectionException;
+import org.gvsig.utils.swing.wizard.WizardControl;
+import org.gvsig.utils.swing.wizard.WizardEvent;
+import org.gvsig.utils.swing.wizard.WizardListener;
+
+/**
+ * Extensi�n que controla las operaciones realizadas sobre las tablas.
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class TableOperations extends Extension implements ExpressionListener {
+
+    private FeatureStore featureStore = null;
+
+    public void execute(String actionCommand) {
+        final Project project =
+            ProjectManager.getInstance().getCurrentProject();
+        List<Document> tableDcouments =
+            project.getDocuments(TableManager.TYPENAME);
+        TableDocument[] pts =
+            tableDcouments
+                .toArray(new TableDocument[tableDcouments.size()]);
+
+        if ("table-create-link".equals(actionCommand)) {
+            try {
+                final ObjectSelectionStep sourceTable =
+                    new ObjectSelectionStep();
+                sourceTable.setModel(new TableSelectionModel(pts,
+                    PluginServices.getText(this, "seleccione_tabla_origen")));
+
+                final ObjectSelectionStep targetTable =
+                    new ObjectSelectionStep();
+                targetTable
+                    .setModel(new TableSelectionModel(pts, PluginServices
+                        .getText(this, "seleccione_tabla_a_enlazar")));
+
+                final ObjectSelectionStep firstTableField =
+                    new ObjectSelectionStep();
+                final ObjectSelectionStep secondTableField =
+                    new ObjectSelectionStep();
+                final AndamiWizard wiz =
+                    new AndamiWizard(PluginServices.getText(this, "back"),
+                        PluginServices.getText(this, "next"),
+                        PluginServices.getText(this, "finish"),
+                        PluginServices.getText(this, "cancel"));
+                wiz.setSize(new Dimension(450, 200));
+                wiz.addStep(sourceTable);
+                wiz.addStep(firstTableField);
+                wiz.addStep(targetTable);
+                wiz.addStep(secondTableField);
+
+                wiz.addWizardListener(new WizardListener() {
+
+                    public void cancel(WizardEvent w) {
+                        PluginServices.getMDIManager().closeWindow(wiz);
+                    }
+
+                    public void finished(WizardEvent w) {
+                        PluginServices.getMDIManager().closeWindow(wiz);
+
+                        TableDocument sourceProjectTable =
+                            (TableDocument) sourceTable.getSelected();
+
+                        TableDocument targetProjectTable =
+                            (TableDocument) targetTable.getSelected();
+                        FeatureStore sds2 = targetProjectTable.getStore();
+
+                        String field1 = (String) firstTableField.getSelected();
+                        String field2 = (String) secondTableField.getSelected();
+                        sourceProjectTable.addLinkTable(
+                            targetProjectTable.getName(), field1,
+                            field2);
+
+                    }
+
+                    public void next(WizardEvent w) {
+                        WizardControl wiz = w.wizard;
+                        wiz.enableBack(true);
+                        wiz.enableNext(((ObjectSelectionStep) wiz
+                            .getCurrentStep()).getSelectedItem() != null);
+
+                        if (w.currentStep == 1) {
+                            TableDocument pt =
+                                (TableDocument) sourceTable.getSelected();
+
+                            try {
+                                firstTableField
+                                    .setModel(new FieldSelectionModel(pt
+                                        .getStore(), PluginServices.getText(
+                                        this, "seleccione_campo_enlace")));
+                            } catch (SelectionException e) {
+                                NotificationManager.addError(
+                                    "Error obteniendo los campos de la tabla",
+                                    e);
+                            }
+                        } else
+                            if (w.currentStep == 3) {
+                                try {
+                                    // tabla
+                                    TableDocument pt =
+                                        (TableDocument) sourceTable
+                                            .getSelected();
+
+                                    // �ndice del campo
+                                    FeatureStore fs = pt.getStore();
+                                    String fieldName =
+                                        (String) firstTableField.getSelected();
+                                    int type =
+                                        ((FeatureAttributeDescriptor) fs
+                                            .getDefaultFeatureType().get(
+                                                fieldName)).getType();
+
+                                    secondTableField
+                                        .setModel(new FieldSelectionModel(
+                                            ((TableDocument) targetTable
+                                                .getSelected()).getStore(),
+                                            PluginServices.getText(this,
+                                                "seleccione_campo_enlace"),
+                                            type));
+                                } catch (SelectionException e) {
+                                    NotificationManager
+                                        .addError(
+                                            "Error obteniendo los campos de la tabla",
+                                            e);
+                                } catch (DataException e) {
+                                    NotificationManager
+                                        .addError(
+                                            "Error obteniendo los campos de la tabla",
+                                            e);
+                                }
+                            }
+                    }
+
+                    public void back(WizardEvent w) {
+                        WizardControl wiz = w.wizard;
+                        wiz.enableBack(true);
+                        wiz.enableNext(((ObjectSelectionStep) wiz
+                            .getCurrentStep()).getSelectedItem() != null);
+                    }
+                });
+                project.setModified(true);
+                PluginServices.getMDIManager().addWindow(wiz);
+            } catch (SelectionException e) {
+                NotificationManager.addError("Error abriendo el asistente", e);
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.app.gui.filter.ExpressionListener#newSet(java.lang.String)
+     */
+    public void newSet(String expression) throws DataException {
+        // By Pablo: if no filter expression -> no element selected
+        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+            FeatureSet set = null;
+            try {
+                set = doSet(expression);
+
+                if (set == null) {
+                    throw new RuntimeException("Not a 'where' clause?");
+                }
+                FeatureSelection newSel = featureStore.createFeatureSelection();
+                newSel.select(set);
+                featureStore.setSelection(newSel);
+            } catch (Exception e) {
+                
+                JOptionPane.showMessageDialog(
+                    ApplicationLocator.getManager().getRootComponent(),
+                    Messages.getText("_Invalid_expression") + ":\n"
+                        + SelectByAttributesExtension.getLastMessage(e),
+                    Messages.getText("_Invalid_expression"),
+                    JOptionPane.ERROR_MESSAGE);
+                
+                
+            } finally {
+                if (set != null) {
+                    set.dispose();
+                }
+            }
+        } else {
+            // By Pablo: if no expression -> no element selected
+            featureStore.getFeatureSelection().deselectAll();
+        }
+    }
+
+    /**
+     * @see org.gvsig.app.gui.filter.ExpressionListener#newSet(java.lang.String)
+     */
+    private FeatureSet doSet(String expression) throws DataException {
+        FeatureQuery query = featureStore.createFeatureQuery();
+        query
+            .setFilter(DALLocator.getDataManager().createExpresion(expression));
+        return featureStore.getFeatureSet(query);
+    }
+
+    /**
+     * @see org.gvsig.app.gui.filter.ExpressionListener#addToSet(java.lang.String)
+     */
+    public void addToSet(String expression) throws DataException {
+        // By Pablo: if no filter expression -> don't add more elements to set
+        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+            FeatureSet set = null;
+            try {
+                set = doSet(expression);
+
+                featureStore.getFeatureSelection().select(set);
+            } finally {
+                if (set != null) {
+                    set.dispose();
+                }
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.app.gui.filter.ExpressionListener#fromSet(java.lang.String)
+     */
+    public void fromSet(String expression) throws DataException {
+        // By Pablo: if no filter expression -> no element selected
+        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+
+            FeatureSet set = null;
+            DisposableIterator iterator = null;
+            try {
+                set = doSet(expression);
+
+                if (set == null) {
+                    throw new RuntimeException("Not a 'where' clause?");
+                }
+                FeatureSelection oldSelection =
+                    featureStore.getFeatureSelection();
+
+                FeatureSelection newSelection =
+                    featureStore.createFeatureSelection();
+                iterator = set.fastIterator();
+                while (iterator.hasNext()) {
+                    Feature feature = (Feature) iterator.next();
+                    if (oldSelection.isSelected(feature)) {
+                        newSelection.select(feature);
+                    }
+                }
+                featureStore.setSelection(newSelection);
+            } finally {
+                DisposeUtils.dispose(iterator);
+                DisposeUtils.dispose(set);
+            }
+        } else {
+            // By Pablo: if no expression -> no element selected
+            // featureStore.setSelection(featureStore.createSelection());
+            featureStore.getFeatureSelection().deselectAll();
+        }
+    }
+
+    /**
+     * Returns true if the WHERE subconsultation of the filterExpression is
+     * empty ("")
+     * 
+     * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+     * @param expression
+     *            An string
+     * @return A boolean value
+     */
+    private boolean filterExpressionFromWhereIsEmpty(String expression) {
+        String subExpression = expression.trim();
+        int pos;
+
+        // Remove last ';' if exists
+        if (subExpression.charAt(subExpression.length() - 1) == ';') {
+            subExpression =
+                subExpression.substring(0, subExpression.length() - 1).trim();
+        }
+
+        // If there is no 'where' clause
+        if ((pos = subExpression.indexOf("where")) == -1) {
+            return false;
+        }
+
+        // If there is no subexpression in the WHERE clause -> true
+        subExpression =
+            subExpression.substring(pos + 5, subExpression.length()).trim(); // +
+                                                                             // 5
+                                                                             // is
+                                                                             // the
+                                                                             // length
+                                                                             // of
+                                                                             // 'where'
+        if (subExpression.length() == 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (v == null) {
+            return false;
+        }
+
+        if (v instanceof FeatureTableDocumentPanel) {
+            return true;
+        } /*
+           * else {
+           * if (v instanceof com.iver.cit.gvsig.gui.View) {
+           * com.iver.cit.gvsig.gui.View view = (com.iver.cit.gvsig.gui.View) v;
+           * ProjectView pv = view.getModel();
+           * FLayer[] seleccionadas = pv.getMapContext().getLayers()
+           * .getActives();
+           * 
+           * if (seleccionadas.length == 1) {
+           * if (seleccionadas[0] instanceof AlphanumericData) {
+           * return true;
+           * }
+           * }
+           * }
+           */
+        return false;
+        // }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    	IconThemeHelper.registerIcon("action", "table-create-link", this);
+
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * Ensure that field name only has 'safe' characters
+     * (no spaces, special characters, etc).
+     */
+    public String sanitizeFieldName(String fieldName) {
+        return fieldName.replaceAll("\\W", "_"); // replace any non-word
+                                                 // character by an underscore
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableOperations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoTableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoTableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoTableExtension.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.undo.RedoException;
+
+/**
+ * Extensi�n encargada de gestionar el rehacer un comando anteriormente
+ * deshecho.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class RedoTableExtension extends Extension {
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    }
+
+
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String s) {
+        FeatureTableDocumentPanel tabla =
+            (FeatureTableDocumentPanel) PluginServices.getMDIManager()
+                .getActiveWindow();
+
+        if ( "edit-redo-table".equalsIgnoreCase(s)) {
+            if (tabla.getModel().getStore().isEditing()) {
+                FeatureStore fs = tabla.getModel().getStore();
+                try {
+                    fs.redo();                    
+                } catch (RedoException e) {
+                     NotificationManager.addError(e);
+                }
+            }
+            tabla.getModel().setModified(true);
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        FeatureTableDocumentPanel tabla =
+            (FeatureTableDocumentPanel) PluginServices.getMDIManager()
+                .getActiveWindow();
+        FeatureStore fs = tabla.getModel().getStore();
+        if (fs != null && fs.isEditing()) {
+            return fs.canRedo();
+        }
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        org.gvsig.andami.ui.mdiManager.IWindow f =
+            PluginServices.getMDIManager().getActiveWindow();
+
+        if (f == null) {
+            return false;
+        }
+
+        if (f instanceof FeatureTableDocumentPanel) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoTableExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableFieldOperations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableFieldOperations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableFieldOperations.java	(revision 42196)
@@ -0,0 +1,293 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTable;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.ConfigurableFeatureTableModel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Operations regarding order and duplicated values.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableFieldOperations extends Extension {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(TableFieldOperations.class);
+    private FeatureTableDocumentPanel table = null;
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "table-order-desc", this);
+        IconThemeHelper.registerIcon("action", "table-order-asc", this);
+        IconThemeHelper.registerIcon("action", "selection-duplicates", this);    
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        doExecute(actionCommand, table);
+    }
+
+    /**
+     * "execute" method acction
+     * 
+     * @param actionCommand
+     *            The acction command that executes this method
+     * @param table
+     *            Table to operate
+     */
+    protected void doExecute(String actionCommand,
+        FeatureTableDocumentPanel table) {
+        // FIXME
+        ConfigurableFeatureTableModel cftm =
+            table.getTablePanel().getTableModel();
+        try {
+            if ("table-order-asc".equals(actionCommand)) {
+                cftm.orderByColumn(table.getTablePanel().getTable()
+                    .getSelectedColumnsAttributeDescriptor()[0].getName(), true);
+                
+                // Mark as modified:
+                table.getModel().setModified(true);
+
+            } else {
+                if ("table-order-desc".equals(actionCommand)) {
+                    cftm.orderByColumn(table.getTablePanel().getTable()
+                        .getSelectedColumnsAttributeDescriptor()[0].getName(),
+                        false);
+                    
+                    // Mark as modified:
+                    table.getModel().setModified(true);
+
+                } else {
+                    if ("selection-duplicates".equals(actionCommand)) {
+                        
+                        // Find and select duplicates in selected column
+                        long[] valCases = findSelectDuplicates(table);
+                        /*
+                         * Show info dialog
+                         */
+                        String msg = "";
+                        if (valCases[0] == 0) {
+                            // No repetitions
+                            msg = Messages.getText("_No_repetitions_found");
+                        } else {
+                            String[] args = new String[2];
+                            args[0] = Long.toString(valCases[0]);
+                            args[1] = Long.toString(valCases[1]);
+                            msg = Messages.getText(
+                                "_Found_N_diff_repeated_vals_in_total_N_cases", args);
+                        }
+                        JOptionPane.showMessageDialog(
+                            ApplicationLocator.getManager().getRootComponent(),
+                            msg,
+                            Messages.getText("_Find_and_select_duplicates"),
+                            JOptionPane.INFORMATION_MESSAGE);
+                    }
+                }
+            }
+        } catch (BaseException e) {
+            logger.error("While applying field operation (" + actionCommand + ")", e);
+        }
+    }
+
+
+    /**
+     * Detects repeated values
+     * 
+     * @param tpanel
+     * @return Returns two values: numbers of values repeated and number of rows
+     * with values which are repeated
+     * 
+     * @throws DataException
+     */
+    private long[] findSelectDuplicates(FeatureTableDocumentPanel tpanel)
+        throws DataException {
+        
+        long[] values_cases = {0, 0};
+        
+        ConfigurableFeatureTableModel cftm = tpanel.getTablePanel().getTableModel();
+        FeatureTable ftable = tpanel.getTablePanel().getTable();
+        
+        // There is only one selected column
+        String fieldName = ftable.getSelectedColumnsAttributeDescriptor()[0].getName();
+        FeatureStore fstore = cftm.getFeatureStore();
+        
+        Set<Feature> selFeats = new HashSet<Feature>();
+        
+        FeatureQuery fquery = fstore.createFeatureQuery();
+        /*
+         * Create order based on selected column
+         * (ascending but descending would be ok too)
+         */
+        FeatureQueryOrder fqo = new FeatureQueryOrder();
+        fqo.add(fieldName, true);
+        fquery.setOrder(fqo);
+        FeatureSet fset = fstore.getFeatureSet(fquery);
+        DisposableIterator iter = fset.fastIterator();
+        Feature currFeat = null;
+        Feature prevFeat = null;
+        
+        Object curVal = null;
+        Object preVal = null;
+        
+        /*
+         * Get first feature and go next if there is next
+         */
+        if (iter.hasNext()) {
+            currFeat = (Feature) iter.next();
+            currFeat = currFeat.getCopy();
+            curVal = currFeat.get(fieldName);
+        } else {
+            iter.dispose();
+            return values_cases;
+        }
+        
+        boolean equals = false;
+        /*
+         * Iterate and get copy of features with repeated value
+         */
+        while (iter.hasNext()) {
+            prevFeat = currFeat;
+            currFeat = (Feature) iter.next();
+            currFeat = currFeat.getCopy();
+            
+            preVal = curVal;
+            curVal = currFeat.get(fieldName);
+            
+            if (sameValue(preVal, curVal)) {
+                if (!equals) {
+                    // We are entering a new set of repetitions
+                    values_cases[0]++;
+                }
+                equals = true;
+                selFeats.add(prevFeat);
+            } else {
+                if (equals) {
+                    // We have gone out of equal group
+                    selFeats.add(prevFeat);
+                }
+                equals = false;
+            }
+        }
+        iter.dispose();
+        FeatureSelection fsele = (FeatureSelection) fstore.getSelection();
+        fsele.beginComplexNotification();
+        /*
+         * Set selection inside complex notification to prevent
+         * lots of notifications
+         */
+        // ============================
+        fsele.deselectAll();
+        
+        values_cases[1] = selFeats.size(); 
+        if (values_cases[1] > 0) {
+            Iterator<Feature> fiter = selFeats.iterator();
+            while (fiter.hasNext()) {
+                fsele.select(fiter.next());
+            }
+        }
+        // ============================
+        fsele.endComplexNotification();
+        return values_cases;
+    }
+    
+
+    private boolean sameValue(Object v1, Object v2) {
+        
+        if (v1 == null) {
+            if (v2 == null) {
+                // Both null, same value
+                return true;
+            } else {
+                // Only one is null, not same value
+                return false;
+            }
+        } else {
+            if (v2 == null) {
+                // Only one is null, not same value
+                return false;
+            } else {
+                // Delegate in equals method
+                return v1.equals(v2);
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        try {
+            return (table.getTablePanel().getTable().getSelectedColumnCount() == 1);
+        } catch (DataException e) {
+            logger.error("While getting number of selected rows.", e);
+        }
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        if (v != null && v instanceof FeatureTableDocumentPanel) {
+            table = (FeatureTableDocumentPanel) v;
+            return true;
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableFieldOperations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditRemoveRowExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditRemoveRowExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditRemoveRowExtension.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditRemoveRowExtension extends AbstractTableEditExtension {
+
+	public void initialize() {
+		super.initialize();
+		IconThemeHelper.registerIcon("action", "table-remove-row", this);
+	}
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        if ("table-remove-row".equals(actionCommand)) {
+            try {
+                featureTableOperations.setTablePanel(table);
+                featureTableOperations.deleteFeatures();
+            } catch (DataException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        try {
+            if (table.getTablePanel().getTable().getSelectedRowCount() > 0)
+                return true;
+        } catch (DataException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditRemoveRowExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStopExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStopExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStopExtension.java	(revision 42196)
@@ -0,0 +1,377 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.andami.plugins.status.UnsavedData;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.editing.EditingNotification;
+import org.gvsig.editing.EditingNotificationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+
+public class TableEditStopExtension extends AbstractTableEditExtension {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(TableEditStopExtension.class);
+
+	public void initialize() {
+		super.initialize();
+		IconThemeHelper.registerIcon("action", "table-stop-editing", this);
+	}
+
+    public void execute(String actionCommand) {
+        if ("table-stop-editing".equals(actionCommand)) {
+            TableDocument doc = (TableDocument) table.getDocument();
+            EditingNotificationManager editingNotification = MapControlLocator.getEditingNotificationManager();
+            EditingNotification notification = editingNotification.notifyObservers(
+                    this,
+                    EditingNotification.BEFORE_ENTER_EDITING_STORE,
+                    doc,
+                    doc.getStore());
+            if( notification.isCanceled() ) {
+                return;
+            }
+            stopEditing(table);
+            ApplicationLocator.getManager().refreshMenusAndToolBars();
+            editingNotification.notifyObservers(
+                    this,
+                    EditingNotification.AFTER_ENTER_EDITING_STORE,
+                    doc,
+                    doc.getStore());
+        }
+    }
+
+    private void stopEditing(FeatureTableDocumentPanel table) {
+
+        Object[] options = {
+            PluginServices.getText(this, "_Guardar"),
+            "       " + PluginServices.getText(this, "_Descartar") + "       ",
+            PluginServices.getText(this, "_Continuar") };
+
+        JPanel explanation_panel = getExplanationPanel(table.getModel().getName());
+
+        int resp = JOptionPane
+            .showOptionDialog(
+                    (Component) PluginServices.getMainFrame(),
+                    explanation_panel,
+                    PluginServices.getText(this, "stop_edition"),
+                    JOptionPane.YES_NO_CANCEL_OPTION,
+                    JOptionPane.QUESTION_MESSAGE, null, options,
+                    options[2]);
+
+        try {
+            if (resp == JOptionPane.NO_OPTION) {
+                // CANCEL EDITING
+                table.getModel().getStore().cancelEditing();
+            } else {
+
+                if (resp == JOptionPane.YES_OPTION) {
+                    // Save table
+                    table.getModel().getStore().finishEditing();
+                } else {
+                    // This happens when user clicks on [x]
+                    // to abruptly close previous JOptionPane dialog
+                    // We do nothing (equivalent to 'Continue editing')
+                }
+            }
+        } catch (DataException e) {
+            logger.error("While finishing or canceling table editing: "
+                + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (v == null) {
+            return false;
+        } else
+            if (v instanceof FeatureTableDocumentPanel
+                && ((FeatureTableDocumentPanel) v).getModel().getStore()
+                    .isEditing()) {
+                table = (FeatureTableDocumentPanel) v;
+                return true;
+            } else {
+                return false;
+            }
+    }
+
+    /**
+     * <p>
+     * This class provides the status of extensions. If this extension has some
+     * unsaved editing table (and save them), and methods to check if the
+     * extension has some associated background tasks.
+     *
+     * @author Vicente Caballero Navarro
+     *
+     */
+    private class StopEditingStatus implements IExtensionStatus {
+
+        /**
+         * This method is used to check if this extension has some unsaved
+         * editing tables.
+         *
+         * @return true if the extension has some unsaved editing tables, false
+         *         otherwise.
+         */
+        public boolean hasUnsavedData() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            List<Document> tables = project.getDocuments(TableManager.TYPENAME);
+            for (int i = 0; i < tables.size(); i++) {
+                FeatureStore store = ((TableDocument) tables.get(i)).getStore();
+                if (store == null) {
+                    continue;
+                }
+                if (store.isEditing()) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        /**
+         * This method is used to check if the extension has some associated
+         * background process which is currently running.
+         *
+         * @return true if the extension has some associated background process,
+         *         false otherwise.
+         */
+        public boolean hasRunningProcesses() {
+            return false;
+        }
+
+        /**
+         * <p>
+         * Gets an array of the traceable background tasks associated with this
+         * extension. These tasks may be tracked, canceled, etc.
+         * </p>
+         *
+         * @return An array of the associated background tasks, or null in case
+         *         there is
+         *         no associated background tasks.
+         */
+        public IMonitorableTask[] getRunningProcesses() {
+            return null;
+        }
+
+        /**
+         * <p>
+         * Gets an array of the UnsavedData objects, which contain information
+         * about the unsaved editing tables and allows to save it.
+         * </p>
+         *
+         * @return An array of the associated unsaved editing layers, or null in
+         *         case the extension
+         *         has not unsaved editing tables.
+         */
+        public IUnsavedData[] getUnsavedData() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            List<Document> tables = project.getDocuments(TableManager.TYPENAME);
+            List<UnsavedTable> unsavedTables = new ArrayList<UnsavedTable>();
+            for (int i = 0; i < tables.size(); i++) {
+                TableDocument table = (TableDocument) tables.get(i);
+                FeatureStore store = table.getStore();
+                if (store == null) {
+                    continue;
+                }
+                if (store.isEditing()) {
+                    UnsavedTable ul =
+                        new UnsavedTable(TableEditStopExtension.this);
+                    ul.setTable(table);
+                    unsavedTables.add(ul);
+                }
+            }
+            return unsavedTables
+                .toArray(new IUnsavedData[unsavedTables.size()]);
+        }
+    }
+
+    private class UnsavedTable extends UnsavedData {
+
+        private TableDocument table;
+
+        public UnsavedTable(IExtension extension) {
+            super(extension);
+        }
+
+        public String getDescription() {
+            return PluginServices.getText(this, "editing_table_unsaved");
+        }
+
+        public String getResourceName() {
+            return table.getName();
+        }
+
+        public boolean saveData() {
+            return executeSaveTable(table);
+        }
+
+        public void setTable(TableDocument table) {
+            this.table = table;
+        }
+
+        public String getIcon() {
+            return "document-table-icon-small";
+        }
+    }
+
+    // TODO Este c�digo est� duplicado, tambi�n est� en la clase Table en el
+    // m�todo "public void stopEditing()"
+    private boolean executeSaveTable(TableDocument table2) {
+        FeatureStore fs = table2.getStore();
+        try {
+            fs.finishEditing();
+        } catch (WriteException e) {
+            NotificationManager.addError(
+                PluginServices.getText(this, "error_saving_table"), e);
+            return false;
+        } catch (ReadException e) {
+            NotificationManager.addError(
+                PluginServices.getText(this, "error_saving_table"), e);
+            return false;
+        } catch (DataException e) {
+            NotificationManager.addError(
+                PluginServices.getText(this, "error_saving_table"), e);
+            return false;
+        }
+        // if (ies instanceof IWriteable) {
+        // IWriteable w = (IWriteable) ies;
+        // IWriter writer = w.getWriter();
+        // if (writer == null) {
+        // return false;
+        // }
+        // try {
+        // ITableDefinition tableDef = ies.getTableDefinition();
+        // writer.initialize(tableDef);
+        // ies.stopEdition(writer, EditionEvent.ALPHANUMERIC);
+        // ies.getSelection().clear();
+        // } catch (InitializeWriterException e) {
+        // NotificationManager.addError(PluginServices.getText(this,"error_saving_table"),e);
+        // return false;
+        // } catch (StopWriterVisitorException e) {
+        // NotificationManager.addError(PluginServices.getText(this,"error_saving_table"),e);
+        // return false;
+        // } catch (ReadDriverException e) {
+        // NotificationManager.addError(PluginServices.getText(this,"error_saving_table"),e);
+        // return false;
+        // }
+        // }
+        return true;
+    }
+
+    public IExtensionStatus getStatus() {
+        return new StopEditingStatus();
+    }
+
+
+    private JPanel getExplanationPanel(String name) {
+
+        BorderLayout bl = new BorderLayout(10, 10);
+        JPanel resp = new JPanel(bl);
+
+        String msg = Messages.getText("realmente_desea_guardar");
+        JLabel topLabel = new JLabel(msg);
+
+        JPanel mainPanel = new JPanel(new GridBagLayout());
+        GridBagConstraints cc = new GridBagConstraints();
+
+        cc.gridx = 0;
+        cc.gridy = 0;
+        cc.anchor = GridBagConstraints.WEST;
+
+        cc.insets = new Insets(3, 6, 3, 6);
+
+        Font boldf = mainPanel.getFont().deriveFont(Font.BOLD);
+
+        JLabel lbl = new JLabel(Messages.getText("_Guardar"));
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(Messages.getText("_Save_changes_performed")), cc);
+
+        cc.gridx = 0;
+        cc.gridy = 1;
+        lbl = new JLabel(Messages.getText("_Descartar"));
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(Messages.getText("_Discard_and_lose_changes")), cc);
+
+        cc.gridx = 0;
+        cc.gridy = 2;
+        lbl = new JLabel(Messages.getText("_Continuar"));
+        lbl.setFont(boldf);
+        mainPanel.add(lbl, cc);
+        cc.gridx = 1;
+        mainPanel.add(new JLabel(Messages.getText("_Do_not_save_yet_Stay_in_editing_mode")), cc);
+
+        resp.add(mainPanel, BorderLayout.CENTER);
+        resp.add(topLabel, BorderLayout.NORTH);
+        return resp;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditStopExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditChangeColumnsExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditChangeColumnsExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditChangeColumnsExtension.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class TableEditChangeColumnsExtension extends AbstractTableEditExtension {
+
+	public void initialize() {
+		super.initialize();
+		IconThemeHelper.registerIcon("action", "table-rename-column", this);
+		IconThemeHelper.registerIcon("action", "table-remove-column", this);
+	}
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        try {
+            featureTableOperations.setTablePanel(table);
+            if ("table-remove-column".equals(actionCommand)) {
+                featureTableOperations.deleteAttributes(table.getTablePanel()
+                    .getTable());
+            } else
+                    if ("table-rename-column".equals(actionCommand)) {
+                        featureTableOperations.renameAttributes(table
+                            .getTablePanel().getTable());
+                    }
+        } catch (DataException e) {
+            NotificationManager.showMessageError(
+                PluginServices.getText(this, "update_featuretype_error"), null);
+        }
+
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        try {
+            if (table.getTablePanel().getTable().getSelectedColumnCount() > 0) {
+                return true;
+            }
+        } catch (DataException e) {
+            return false;
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableEditChangeColumnsExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerTableWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerTableWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerTableWizardPanel.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import java.awt.Window;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.JOptionPane;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.prepareAction.PrepareContext;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.exception.DynFieldRequiredValueException;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+
+public class FilesystemExplorerTableWizardPanel extends
+    FilesystemExplorerWizardPanel {
+
+    private static final long serialVersionUID = 8469934188826417698L;
+    private static final Logger LOG = LoggerFactory.getLogger(
+        FilesystemExplorerTableWizardPanel.class);
+
+    private PrepareContext prepareDSContext = null;
+
+    @Override
+    public void execute() {
+        executeWizard();
+    }
+
+    public Object executeWizard() {
+        FeatureStore store;
+        TableDocument table;
+
+        ApplicationManager manager = ApplicationLocator.getManager();
+        Project project = manager.getCurrentProject();
+
+        PrepareContext context = this.getPrepareDataStoreContext();
+        DataStoreParameters[] parameters = this.getParameters();
+        List<TableDocument> tabledocs =
+            new ArrayList<TableDocument>(parameters.length);
+        
+        Set<String> not_valid = new HashSet<String>();
+        
+        for (DataStoreParameters params : parameters) {
+            store = null;
+            
+            /*
+             * Try to validate.
+             */
+            try {
+                params.validate();
+            } catch (ValidateDataParametersException ecx) {
+                StringBuffer buffer = new StringBuffer();
+                if( ecx.getCause() instanceof DynObjectValidateException ) {
+                    DynObjectValidateException exceptions = (DynObjectValidateException) ecx.getCause();
+                    for( int i=0; i<exceptions.size(); i++ ) {
+                        if( exceptions.get(i) instanceof DynFieldRequiredValueException ) {
+                            DynFieldRequiredValueException exx = (DynFieldRequiredValueException) exceptions.get(i);
+                            if( buffer.length()>0 ) {
+                                buffer.append(", ");
+                            }
+                            buffer.append(exx.getMessage());
+                        }
+                        
+                    }
+                }
+                String msg = params.getDataStoreName();
+                if( buffer.length()>0 ) {
+                    msg = msg + ": "+buffer.toString();
+                }
+                LOG.info("Unable to validate params: " + msg);
+                not_valid.add(msg);
+                continue;
+            }
+            
+            try {
+
+                DataManager dataManager = DALLocator.getDataManager();
+                store =
+                    (FeatureStore) dataManager.openStore(
+                        params.getDataStoreName(), params);
+                manager.pepareOpenDataSource(store, context);
+
+                table =
+                    (TableDocument) ProjectManager.getInstance()
+                        .createDocument(TableManager.TYPENAME);
+                table.setName(store.getName());
+                table.setStore(store);
+
+                // project.add(table);
+                tabledocs.add(table);
+            } catch (Exception e) {
+                if (store != null) {
+                    store.dispose();
+                }
+                NotificationManager.addError(e);
+            }
+
+        }
+        
+        if (not_valid.size() > 0) {
+            String not_str = not_valid.toString();
+            JOptionPane.showMessageDialog(
+                this,
+                Messages.getText("_These_sources_were_not_loaded")
+                + ": " + not_str, // not_valid,
+                Messages.getText("_Load_error"),
+                JOptionPane.WARNING_MESSAGE);
+        }
+        return tabledocs;
+    }
+
+    @Override
+    protected PrepareContext getPrepareDataStoreContext() {
+        if (this.prepareDSContext == null) {
+            this.prepareDSContext = new PrepareContext() {
+
+                public Window getOwnerWindow() {
+                    return null;
+                }
+                
+                public IProjection getViewProjection() {
+                	return null;
+                }
+
+            };
+        }
+        return this.prepareDSContext;
+    }
+
+    public String getTabName() {
+        return PluginServices.getText(this, "File");
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerTableWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/package.html	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.landregistryviewer package documentation</title>
+</head>
+<body>
+
+	<p>Open table document from file support</p>
+	
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,728 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+    <libraries library-dir="lib"/>
+    <depends plugin-name="org.gvsig.app.mainplugin" />
+    <resourceBundle name="text"/>
+    <extensions>
+        <extension class-name="org.gvsig.app.extension.TableExtension"
+                           description="Extensi�n encargada de a�adir soporte a documentos tabla."
+                           active="true"
+                           priority="10">
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.ClearSelectionExtension"
+                           description="Extensi�n encargada de limpiar la selecci�n."
+                           active="true">
+
+            <action
+                name="selection-clear-table"
+                label="_Clear_selection"
+                tooltip="_Clear_selection"
+                position="300300000"
+                action-command="selection-clear-table"
+                icon="edit-clear"
+                accelerator=""
+            />
+
+            <menu
+                name="selection-clear-table"
+                text="Selection/_Clear"
+            />
+
+            <tool-bar name="view_selection">
+                <action-tool
+                    name="selection-clear-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.ShowTable"
+                           description="Extensi�n encargada de abrir la tabla asociada a la capa seleccionado."
+                           active="true">
+
+            <action
+                name="layer-show-attributes-table"
+                label="_Attributes_table"
+                tooltip="_Show_attributes_table"
+                position="601200000"
+                action-command="layer-show-attributes-table"
+                icon="layer-show-attributes-table"
+                accelerator=""
+            />
+
+            <menu
+                name="layer-show-attributes-table"
+                text="Layer/_Show_attributes_table"
+            />
+
+            <tool-bar name="view_actions">
+                <action-tool
+                    name="layer-show-attributes-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableOperations"
+                           description="Extensi�n encargada de gestionar las operaciones sobre las tablas."
+                           active="true">
+
+            <action
+                name="table-create-link"
+                label="_Create_link"
+                tooltip="_Create_link_between_tables"
+                position="501300000"
+                action-command="table-create-link"
+                icon="table-create-link"
+                accelerator=""
+            />
+
+            <menu
+                name="table-create-link"
+                text="Table/_Create_link"
+            />
+
+            <tool-bar name="table_tools">
+                <action-tool
+                    name="table-create-link"
+                />
+            </tool-bar>
+        </extension>
+
+    <extension class-name="org.gvsig.app.extension.TableCommandStackExtension"
+      description="Extensi�n encargada de administrar la pila de comados de edici�n sobre una tabla."
+      active="true">
+
+            <action
+                name="edit-undo-redo-actions-table"
+                label="_Undo_redo_history"
+                tooltip="_Undo_redo_history"
+                position="200300000"
+                action-command="edit-undo-redo-actions-table"
+                icon="edit-undo-redo-actions"
+                accelerator=""
+                />
+
+            <menu
+                name="edit-undo-redo-actions-table"
+                text="Edit/_Undo_redo_history"
+                />
+
+            <tool-bar name="edit_actions">
+                <action-tool name="edit-undo-redo-actions-table"/>
+            </tool-bar>
+
+    </extension>
+
+        <extension class-name="org.gvsig.app.extension.RedoTableExtension"
+                           description="Extensi�n encargada de rehacer la edici�n sobre la capa activa."
+                           active="true">
+
+            <action
+                name="edit-redo-table"
+                label="_Redo"
+                tooltip="_Redo"
+                position="200200000"
+                action-command="edit-redo-table"
+                icon="edit-redo"
+                accelerator=""
+            />
+
+            <menu
+                name="edit-redo-table"
+                text="Edit/_Redo"
+            />
+
+            <tool-bar name="edit_actions">
+                <action-tool
+                    name="edit-redo-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.UndoTableExtension"
+                           description="Extensi�n encargada de dehacer la edici�n sobre la capa activa."
+                           active="true">
+
+            <action
+                name="edit-undo-table"
+                label="_Undo"
+                tooltip="_Undo"
+                position="200100000"
+                action-command="edit-undo-table"
+                icon="edit-undo"
+                accelerator=""
+            />
+
+            <menu
+                name="edit-undo-table"
+                text="Edit/_Undo"
+            />
+
+            <tool-bar name="edit_actions">
+                <action-tool
+                    name="edit-undo-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableEditStopExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+                           active="true">
+
+            <action
+                name="table-stop-editing"
+                label="_Stop_editing"
+                tooltip="_Stop_editing"
+                position="500300000"
+                action-command="table-stop-editing"
+                icon="table-stop-editing"
+                accelerator=""
+            />
+
+            <menu
+                name="table-stop-editing"
+                text="Table/_Stop_editing"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-stop-editing"
+                />
+            </tool-bar>
+        </extension>
+        <extension class-name="org.gvsig.app.extension.TableEditStartExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+                           active="true">
+
+            <action
+                name="table-start-editing"
+                label="_Start_editing"
+                tooltip="_Start_editing"
+                position="500200000"
+                action-command="table-start-editing"
+                icon="table-start-editing"
+                accelerator=""
+            />
+
+            <menu
+                name="table-start-editing"
+                text="Table/_Start_editing"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-start-editing"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableEditInsertExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+                           active="true">
+            <action
+                name="table-add-row"
+                label="_Add_row"
+                tooltip="_Add_row"
+                position="500500000"
+                action-command="table-add-row"
+                icon="table-add-row"
+                accelerator=""
+            />
+
+            <menu
+                name="table-add-row"
+                text="Table/_Add_row"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-add-row"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableEditRemoveRowExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+                           active="true">
+
+            <action
+                name="table-remove-row"
+                label="_Remove_row"
+                tooltip="_Remove_row"
+                position="500600000"
+                action-command="table-remove-row"
+                icon="table-remove-row"
+                accelerator=""
+            />
+
+            <menu
+                name="table-remove-row"
+                text="Table/_Remove_row"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-remove-row"
+                />
+            </tool-bar>
+        </extension>
+        <extension class-name="org.gvsig.app.extension.TableEditChangeColumnsExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n de columnas sobre las tablas."
+                           active="true">
+
+            <action
+                name="table-rename-column"
+                label="_Rename_column"
+                tooltip="_Rename_column"
+                position="500650000"
+                action-command="table-rename-column"
+                icon="table-rename-column"
+                accelerator=""
+            />
+
+            <action
+                name="table-remove-column"
+                label="_Remove_column"
+                tooltip="_Remove_column"
+                position="500670000"
+                action-command="table-remove-column"
+                icon="table-remove-column"
+                accelerator=""
+            />
+
+            <menu
+                name="table-remove-column"
+                text="Table/_Remove_column"
+            />
+
+            <menu
+                name="table-rename-column"
+                text="Table/_Rename_column"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-remove-column"
+                />
+                <action-tool
+                    name="table-rename-column"
+                />
+            </tool-bar>
+
+        </extension>
+        <extension class-name="org.gvsig.app.extension.TableEditAttributes"
+                           description="Extensi�n encargada de gestionar los campos de las tablas."
+                           active="true">
+            <action
+                name="table-column-manager"
+                label="_Column_manager"
+                tooltip="_Column_manager"
+                position="0500700000"
+                action-command="table-column-manager"
+                icon="table-column-manager"
+                accelerator=""
+            />
+
+            <action
+                name="table-add-column"
+                label="_Add_column"
+                tooltip="_Add_column"
+                position="500630000"
+                action-command="table-add-column"
+                icon="table-add-column"
+                accelerator=""
+            />
+
+            <menu
+                name="table-column-manager"
+                text="Table/_Column_manager"
+            />
+
+            <menu
+                name="table-add-column"
+                text="Table/_Add_column"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-column-manager"
+                />
+                <action-tool
+                    name="table-add-column"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableEditCopyExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+                           active="true">
+            <action
+                name="edit-copy-table"
+                label="_Copy"
+                tooltip="_Copy"
+                position="200500000"
+                action-command="edit-copy-table"
+                icon="edit-copy"
+                accelerator=""
+            />
+
+            <menu
+                name="edit-copy-table"
+                text="Edit/_Copy"
+            />
+
+            <tool-bar name="edit_actions">
+                <action-tool
+                    name="edit-copy-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableEditCutExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+                           active="true">
+            <action
+                name="edit-cut-table"
+                label="_Cut_table"
+                tooltip="_Cut_table_in_editing"
+                position="200400000"
+                action-command="edit-cut-table"
+                icon="edit-cut"
+                accelerator=""
+            />
+
+            <menu
+                name="edit-cut-table"
+                text="Edit/_Cut"
+            />
+
+            <tool-bar name="edit_actions">
+                <action-tool
+                    name="edit-cut-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableEditPasteExtension"
+                           description="Extensi�n encargada de gestionar las operaciones de edici�n sobre las tablas."
+                           active="true">
+            <action
+                name="edit-paste-table"
+                label="_Paste"
+                tooltip="_Paste"
+                position="200600000"
+                action-command="edit-paste-table"
+                icon="edit-paste"
+                accelerator=""
+            />
+
+            <menu
+                name="edit-paste-table"
+                text="Edit/_Paste"
+            />
+
+            <tool-bar name="edit_actions">
+                <action-tool
+                    name="edit-paste-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension active="true" class-name="org.gvsig.app.extension.TableFieldOperations"
+                           description="Operaciones sobre los campos de las tablas">
+            <action
+                name="table-order-asc"
+                label="_Order_ascending"
+                tooltip="_Order_ascending"
+                position="500900000"
+                action-command="table-order-asc"
+                icon="table-order-asc"
+                accelerator=""
+            />
+
+            <action
+                name="table-order-desc"
+                label="_Order_descending"
+                tooltip="_Order_descending"
+                position="501000000"
+                action-command="table-order-desc"
+                icon="table-order-desc"
+                accelerator=""
+            />
+
+
+            <action
+                name="selection-duplicates"
+                label="_Find_and_select_duplicates"
+                tooltip="_Find_and_select_duplicates"
+                position="501100000"
+                action-command="selection-duplicates"
+                icon="selection-duplicates"
+                accelerator=""
+            />
+
+            <menu
+                name="table-order-asc"
+                text="Table/_Order_ascending"
+            />
+
+            <menu
+                name="table-order-desc"
+                text="Table/_Order_descending"
+            />
+
+            <menu
+                name="selection-duplicates"
+                text="Table/_Find_and_select_duplicates"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-order-asc"
+                />
+                <action-tool
+                    name="table-order-desc"
+                />
+                <action-tool
+                    name="selection-duplicates"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableNumericFieldOperations"
+                           description="Extensi�n encargada de gestionar las operaciones sobre los campos num�ricos."
+                           active="true">
+            <action
+                name="table-statistics"
+                label="_Statistics"
+                tooltip="_Statistics"
+                position="508000000"
+                action-command="table-statistics"
+                icon="table-statistics"
+                accelerator=""
+            />
+
+            <menu
+                name="table-statistics"
+                text="Table/_Statistics"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="table-statistics"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableRowsOperations"
+                           description="Extensi�n encargada de gestionar la selecci�n en la tabla."
+                           active="true">
+            <action
+                name="selection-move-up"
+                label="_Move_up_selection"
+                tooltip="_Move_up_selection"
+                position="300600000"
+                action-command="selection-move-up"
+                icon="selection-move-up"
+                accelerator=""
+            />
+
+            <action
+                name="selection-disable-move-up"
+                label="_Disable_move_up_selection"
+                tooltip="_Disable_move_up_selection"
+                position="300600000"
+                action-command="selection-disable-move-up"
+                icon="selection-disable-move-up"
+                accelerator=""
+            />
+
+            <action
+                name="selection-reverse"
+                label="_Reverse_selection"
+                tooltip="_Reverse_selection"
+                position="300090000"
+                action-command="selection-reverse"
+                icon="selection-reverse"
+                accelerator=""
+            />
+
+
+            <menu
+                name="selection-move-up"
+                text="Selection/_Move_up"
+            />
+            <menu
+                name="selection-disable-move-up"
+                text="Selection/_Disable_move_up"
+            />
+
+            <menu
+                name="selection-reverse"
+                text="Selection/_Reverse"
+            />
+
+            <tool-bar name="selection_actions">
+                <selectable-tool
+                    name="selection-move-up"
+                />
+                <selectable-tool
+                    name="selection-disable-move-up"
+                />
+                <action-tool
+                    name="selection-reverse"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.RemoveTableLink"
+                           description="Extensi�n encargada de quitar los enlaces de las tablas."
+                           active="true">
+            <action
+                name="table-remove-link"
+                label="_Remove_link"
+                tooltip="_Remove_link"
+                position="501400000"
+                action-command="table-remove-link"
+                icon="table-remove-link"
+                accelerator=""
+            />
+
+            <menu
+                name="table-remove-link"
+                text="Table/_Remove_link"
+            />
+
+            <tool-bar name="table_tools">
+                <action-tool
+                    name="table-remove-link"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.PrintTable"
+                           description="Extensi�n encargada de la impresi�n de las tablas."
+                           active="true">
+            <action
+                name="application-print-table"
+                label="_Print_table"
+                tooltip="_Print_table"
+                position="100800000"
+                action-command="application-print-table"
+                icon="document-print"
+                accelerator=""
+            />
+
+            <menu
+                name="application-print-table"
+                text="File/_Print"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="application-print-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.ZoomToSelectExtension"
+                   description="Extensi�n encargada de gestionar los eventos realizados sobre una capa."
+                   active="true">
+            <action
+                name="view-navigation-zoom-to-selection-table"
+                label="Zoom_to_selection"
+                tooltip="Zoom_to_selection"
+                position="650100900"
+                action-command="view-navigation-zoom-to-selection-table"
+                icon="view-navigation-zoom-to-selection"
+                accelerator=""
+            />
+
+            <menu
+                name="view-navigation-zoom-to-selection-table"
+                text="View/Navigation/Zoom_to_selection"
+            />
+
+            <tool-bar name="view_navigation">
+                <action-tool
+                    name="view-navigation-zoom-to-selection-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.SelectByAttributesExtension"
+                   description="Extensi�n encargada de abrir el di�logo para filtrar una tabla."
+                   active="true">
+            <action
+                name="selection-by-attributes-table"
+                label="_Select_by_attributes"
+                tooltip="_Select_by_attributes"
+                position="300400000"
+                action-command="selection-by-attributes-table"
+                icon="selection-by-attributes"
+                accelerator=""
+            />
+            <menu
+                name="selection-by-attributes-table"
+                text="Selection/_Select_by_attributes"
+            />
+
+            <tool-bar name="table_actions">
+                <action-tool
+                    name="selection-by-attributes-table"
+                />
+            </tool-bar>
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableProperties"
+                           description="Muestra las propiedades de la tabla."
+                           active="true">
+
+            <action
+                name="table-show-properties"
+                label="_Show_table_properties"
+                tooltip="_Show_table_properties"
+                position="509990000"
+                action-command="table-show-properties"
+                icon="table-show-properties"
+                accelerator=""
+            />
+
+            <menu
+                name="table-show-properties"
+                text="Table/Properties"
+            />
+
+        </extension>
+
+
+
+
+    </extensions>
+    <icon src="gvsig-logo-icon" text="gvSIG"/>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-start-editing.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-start-editing.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/layer-show-attributes-table.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/layer-show-attributes-table.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-order-asc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-order-asc.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/document-print.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/document-print.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-add-column.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-add-column.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-clear.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-clear.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-move-up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-move-up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-column-manager.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-column-manager.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-disable-move-up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-disable-move-up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-order-desc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-order-desc.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-remove-link.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-remove-link.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-remove-column.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-remove-column.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-statistics.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-statistics.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-duplicates.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-duplicates.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-by-attributes.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-by-attributes.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-add-row.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-add-row.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-create-link.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-create-link.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-remove-row.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-remove-row.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-rename-column.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-rename-column.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-stop-editing.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-stop-editing.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-to-selection.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-to-selection.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-reverse.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/selection-reverse.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/document/document-table-icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/document/document-table-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/document/document-table-icon-sel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/document/document-table-icon-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/document/document-table-icon-small.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/document/document-table-icon-small.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,55 @@
+_Guardar=Guardar
+_Save_changes_performed=Guardar los cambios realizados.
+_Descartar=Descartar
+_Discard_and_lose_changes=Descartar y perder los cambios realizados.
+_Continuar=Continuar
+_Do_not_save_yet_Stay_in_editing_mode=No guardar a\u00FAn. Continuar en edici\u00F3n.
+_Attributes_table=Tabla de atributos
+_Show_attributes_table=Mostrar tabla de atributos
+_Cut_table=Cortar tabla
+_Cut_table_in_editing=Cortar tabla en edici\u00F3n
+_Print_table=Imprimir tabla
+_Start_editing=Comenzar edici\u00F3n
+_Stop_editing=Terminar edici\u00F3n
+_Create_link_between_tables=Enlazar tablas
+_Unable_to_rename_attribute=No se pudo renombrar el campo
+_Create_link=Enlazar
+_Order_ascending=Ordenar ascendente
+_Order_descending=Ordenar descendente
+_Move_up=Mover arriba
+_Print=Imprimir
+Table=Tabla
+_Reverse=Invertir
+_Statistics=Estad\u00EDsticas
+_Cut=Cortar
+_Paste=Pegar
+_Rename_column=Renombrar columna
+_Add_column=A\u00F1adir columna
+_Remove_column=Eliminar columna
+_Add_row=A\u00F1adir fila
+_Remove_row=Eliminar fila
+_Remove_link=Eliminar enlace
+_Filter_table=Filtrar tabla
+_Filter=Filtrar
+_Clear_selection=Deseleccionar todo
+_Column_manager=Gestor de columnas
+_Move_up_selection=Mover arriba la selecci\u00F3n
+_Unable_to_rename_field=No se pudo renombrar el campo
+_These_sources_were_not_loaded=Estos tipos de or\u00EDgenes de datos no fueron cargados
+_Load_error=Problemas en la carga
+_Cannot_rename_geometry_field=No es posible renombrar el campo geom\u00E9trico
+_Please_insert_new_field_name=Introduzca el nombre del nuevo campo
+_Cannot_delete_geometry_field=No es posible eliminar el campo geom\u00E9trico
+_No_input_name=No se ha introducido un nombre
+_Find_and_select_duplicates=Detectar y seleccionar duplicados
+_No_repetitions_found=No se han encontrado repeticiones
+_Found_N_diff_repeated_vals_in_total_N_cases=Se han encontrado {0} valores diferentes repetidos en un total de {1} casos.
+_Invalid_expression=Expresi\u00F3n no v\u00E1lida
+_There_are_no_selected_rows=No hay filas seleccionadas
+locale=Idioma
+locale_XcolonX=Idioma\:
+_Select_by_attributes=Selecci\u00F3n por atributos
+_Column_information_XcolonX=Informaci\u00F3n de columna\:
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,52 @@
+_Guardar=Save
+_Save_changes_performed=Save edits performed in layer.
+_Descartar=Discard
+_Discard_and_lose_changes=Discard and lose edits performed.
+_Continuar=Continue
+_Do_not_save_yet_Stay_in_editing_mode=Do not save yet. Continue editing.
+_Attributes_table=Attributes table
+_Show_attributes_table=Show attributes table
+_Cut_table=Cut table
+_Cut_table_in_editing=Cut current table
+_Print_table=Print table
+_Start_editing=Start editing
+_Stop_editing=Stop editing
+_Create_link_between_tables=Create link between tables
+_Unable_to_rename_attribute=Unable to rename attribute
+_Create_link=Create link
+_Order_ascending=Sort ascending
+_Order_descending=Sort descending
+_Move_up=Move up
+_Print=Print
+Table=Table
+_Reverse=Reverse
+_Statistics=Statistics
+_Cut=Cut
+_Paste=Paste
+_Rename_column=Rename column
+_Add_column=Add column
+_Remove_column=Remove column
+_Add_row=Add row
+_Remove_row=Remove row
+_Remove_link=Remove link
+_Filter_table=Filter table
+_Filter=Filter
+_Clear_selection=Clear selection
+_Column_manager=Column manager
+_Move_up_selection=Move up selection
+_Unable_to_rename_field=Unable to rename field
+_These_sources_were_not_loaded=These data source types were not loaded
+_Load_error=Loading error
+_Cannot_rename_geometry_field=Renaming geometry field is not allowed
+_Please_insert_new_field_name=Insert new field name
+_Cannot_delete_geometry_field=Deleting geometry field is not allowed
+_No_input_name=No input name
+_Find_and_select_duplicates=Find and select duplicates
+_No_repetitions_found=No repetitions found
+_Found_N_diff_repeated_vals_in_total_N_cases=Found {0} different repeated values in {1} cases in total.
+_Invalid_expression=Invalid expression
+_There_are_no_selected_rows=There are no selected rows
+locale=Locale
+locale_XcolonX=Locale\:
+_Select_by_attributes=Select by attributes
+_Column_information_XcolonX=Column information\:
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>jar</packaging>
+  <artifactId>org.gvsig.app.document.table.app.mainplugin</artifactId>
+  <name>${project.artifactId}</name>
+  <description>
+This plugin adds a table document type to gvSIG. 
+This document shows information data sources with Features or from an already open View document. 
+Also allows editing on data sources that allow so.
+  </description>  
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.app.document.table.app</artifactId>
+    <version>2.0.97</version>
+  </parent>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.control</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.utils</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.ui</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>
+        <scope>compile</scope>
+    </dependency>   
+
+  </dependencies>
+
+  <build>
+      <plugins>
+
+      </plugins>
+  </build>
+
+  <properties>
+      <gvsig.package.info.name>Document: Table</gvsig.package.info.name>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Table</gvsig.package.info.categories>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>  
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/pom.xml	(revision 42196)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.app.document.table.app</artifactId>
+    <packaging>pom</packaging>
+    <description>This project group al plugins related to the manage of the table document.</description>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.plugin</artifactId>
+        <version>2.0.97</version>
+    </parent>
+    <modules>
+        <module>org.gvsig.app.document.table.app.mainplugin</module>
+    </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/pom.xml	(revision 42196)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.app</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.exportto.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:57 CEST 2015
+buildNumber=2162

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.exportto">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.exportto.app.extension.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.exportto.app.extension">
+      <description>Persistence of the Exportto plugin</description>
+      <fields>
+        <field name="enabledProviders" type="Set" classOfItems="java.lang.String" mandatory="false">
+          <description>List of export to provider names enabled by the user</description>
+        </field>
+        <field name="disabledProviders" type="Set" classOfItems="java.lang.String" mandatory="false">
+          <description>List of export to provider names disabled by the user</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,62 @@
+_Abort_process=Abort process
+add_table=Add table
+add_table_to_project=Add the table to the project?
+_All=All
+_check_geometries_before_export=Check geometries before export
+_check_geometries_before_export_header=Validation of the geometry information
+_Comprobar_la_validez_de_las_geometrias_antes_de_insertarlas=Check the if the geometry if valid
+_Comprobar_que_la_geometria_no_este_corrupta=Check if the geometry is corrupt
+_Crear_indice_espacial_sobre_las_columnas_de_tipo_geometria=Create a spatial index in the geoetry columns
+_Crear_una_tabla_nueva=Create a new table
+_Create_spatial_index=Creation of spatials index
+_Create_spatial_index_header=Si la tabla contiene columnas de tipo geometria es recomendable que cree un indice espacial sobre ellas.
+_Cuando_la_geometria_este_corrupta=When the geoemtry is corrupt:
+_Cuando_la_geometria_no_sea_valida=When the geometry is not valid:
+_Desea_crear_una_clave_primaria=Create a primary key ?
+exportto_preferences=Export to
+exportto_preferences_panel_description=Enable or disable "export to" formats
+_Generar_una_clave_primaria_con_un_serial=Create a serial primary key
+_Indique_donde_desea_insertar_los_datos=Where insert the data
+_Indique_el_esquema_en_el_que_desea_crear_la_tabla=Enter the schema:
+_Indique_el_nombre_a_usar_para_la_clave_primaria=Enter the name of the primari key
+_Indique_el_nombre_de_la_tabla=Enter the table name:
+_Insertar_registros_en_una_tabla_existente=Insert data in a existing table
+_Intentar_reparar_la_geometria=Try to repair the geometry
+_Introducir_sentencia_a_ejecutar_tras_la_creacion_de_la_tabla=Statement to execute before the creation of the table
+_La_tabla_{0}_{1}_ya_existe_en_la_base_de_datos_Seleccione_la_opcion_de_insertar_registros_en_una_tabla_existente_para_a\u00f1adir_los_datos_a_esta_o_indique_otro_nombre=La tabla "{0}.{1}" ya existe en la base de datos.\nSeleccione la opcion de insertar registros en una tabla existente para a\u00f1adir los datos a esta o indique otro nombre.
+_Los_datos_se_insertaran_usando_los_nombres_de_columna_que_coincidan_con_la_tabla_origen_dejandose_al_valor_por_defecto_para_los_que_no_haya_valores_en_la_tabla_origen=Los datos se insertaran usando los nombres de columna que coincidan con la tabla origen, dejandose al valor por defecto para los que no haya valores en la tabla origen.
+_No_hacer_nada_en_relacion_a_la_creacion_de_la_clave_primaria=Don't create a primary key
+_No_realizar_ninguna_comprobacion_sobre_las_geometrias=Don't check the geometries
+_Permissions_header=Puede indicar permisos que desea se asignen a la tabla una vez creada.<br> Marque que privilegios desea le sean asignados e indique para cada uno que <i>perfil</i>, usuario o grupo, desea que tenga ese privilegio.<br> Puede indicar mas de un <i>perfil</i> separandolos por comas.
+_Permissions=Permissions
+_Post_creating_statement_header=Puede indicar una sentencia SQL a ejecutar tras la creacion de la tabla en la base de datos.<br> Esto puede ser de utilidad para asignar una configuracion de permisos peculiar, para crear algun tipo de indice que no cree la aplicacion por defecto o a\u00f1adir alguna columna a la tabla que no este en la tabla original.
+_Post_creating_statement=Postcreation statements
+_Primary_key_msg=Para que gvSIG pueda trabajar correctamente con tablas de BBDD es muy recomendable que esta disponga de una clave primaria definida. Si no  la tiene e intenta cargarla en gvSIG puede que algunas operaciones no funcionen adecuadamente.
+_Primary_key=Primary key
+_Recalcular_estadisticas_de_la_tabla_al_terminar=Recreate table statistics when finish
+_role=Role
+_Seleccione_el_campo_a_usar_como_clave_primaria=Select a field to use as primary key
+_Set_geometry_to_null=Set geometry to null
+_Skip_entire_feature=Skip entire feature
+_Some_field_names_too_long_automatically_changed=Some field names were too long and were automatically changed
+_Table_and_fields_name_options_header=Some database require specially handle of the identifiers of table or fields containing mixed-case or whitespace.
+_Table_and_fields_name_options=Table and fields name options
+_The_name_of_schema_cannot_be_empty=Need a schema name
+_The_name_of_table_cannot_be_empty=Need a table name
+_Trasladar_espacios_a_guiones=Translate spaces to "_"
+_Trasladar_identificadores_a_minusculas=Translate identifiers to lowercase
+_update_table_statistics_header=Algunos gestores de base de datos tienen la opcion de recopilar estadisticas de los datos de  las tablas para optimizar el acceso a los datos tras una insercion masiva de estos.<br> Puede indicar aqui si desea que se realice esta operacion al final de la exportacion.
+_update_table_statistics=Update table statistics
+_Utilizar_un_campo_existente_como_clave_primaria=Use a existing field as primary key
+_Indique_que_registros_desea_exportar=Select the records to export
+_Todos_los_registros=All records
+_Los_registros_seleccionados=Only selected records
+_Los_registros_que_cumplan_el_critrio_seleccionado=Filtered records
+_Nombre_de_la_expresion_opcinal=Expression name (optional)
+_Expresion=Expression
+_Type_here_the_name_of_the_expression_if_you_want_to_save_it_otherwise_leave_it_blank=Type here the name of the expression if you want to save it, otherwise leave it blank.
+_Test=Test
+_Usar_una_expresion_guardada=Use a saved expression
+_Nueva_expresion=New expression
+_Filtro=Filter
+_Export_to=Export to...

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,63 @@
+_Abort_process=Abortar el proceso
+add_table=A\u00f1adir tabla
+add_table_to_project=\u00bfDesea a\u00f1adir la tabla al proyecto?
+_All=Todos
+_check_geometries_before_export=Comprobar las geometrias antes de exportar
+_check_geometries_before_export_header=Validacion de la informacion geometrica
+_Comprobar_la_validez_de_las_geometrias_antes_de_insertarlas=Comprobar la validez de las geometrias antes de insertarlas
+_Comprobar_que_la_geometria_no_este_corrupta=Comprobar que la geometria no este corrupta
+_Crear_indice_espacial_sobre_las_columnas_de_tipo_geometria=Crear indice espacial sobre las columnas de tipo geometria
+_Crear_una_tabla_nueva=Crear una tabla nueva
+_Create_spatial_index=Creacion de indice espacial
+_Create_spatial_index_header=Si la tabla contiene columnas de tipo geometria es recomendable que cree un indice espacial sobre ellas.
+_Cuando_la_geometria_este_corrupta=Cuando la geometria este corrupta
+_Cuando_la_geometria_no_sea_valida=Cuando la geometria no sea valida
+_Desea_crear_una_clave_primaria=\u00bf Desea crear una clave primaria ?
+exportto_preferences=Export to
+exportto_preferences_panel_description=Enable or disable "export to" formats
+_Generar_una_clave_primaria_con_un_serial=Generar una clave primaria con un serial
+_Indique_donde_desea_insertar_los_datos=Indique donde desea insertar los datos
+_Indique_el_esquema_en_el_que_desea_crear_la_tabla=Indique el esquema en el que desea crear la tabla\:
+_Indique_el_nombre_a_usar_para_la_clave_primaria=Indique el nombre de a usar para la clave primaria
+_Indique_el_nombre_de_la_tabla=Indique el nombre de la tabla\:
+_Insertar_registros_en_una_tabla_existente=Insertar registros en una tabla existente
+_Intentar_reparar_la_geometria=Intentar reparar la geometria
+_Introducir_sentencia_a_ejecutar_tras_la_creacion_de_la_tabla=Introducir sentencia a ejecutar tras la creacion de la tabla
+_La_tabla_{0}_{1}_ya_existe_en_la_base_de_datos_Seleccione_la_opcion_de_insertar_registros_en_una_tabla_existente_para_a\u00f1adir_los_datos_a_esta_o_indique_otro_nombre=La tabla "{0}.{1}" ya existe en la base de datos.\nSeleccione la opcion de insertar registros en una tabla existente para a\u00f1adir los datos a esta o indique otro nombre.
+_Los_datos_se_insertaran_usando_los_nombres_de_columna_que_coincidan_con_la_tabla_origen_dejandose_al_valor_por_defecto_para_los_que_no_haya_valores_en_la_tabla_origen=Los datos se insertaran usando los nombres de columna que coincidan con la tabla origen, dejandose al valor por defecto para los que no haya valores en la tabla origen.
+_No_hacer_nada_en_relacion_a_la_creacion_de_la_clave_primaria=No hacer nada en relacion a la creacion de la clave primaria.
+_No_realizar_ninguna_comprobacion_sobre_las_geometrias=No realizar ninguna comprobacion sobre las geometrias
+_Permissions_header=Puede indicar permisos que desea se asignen a la tabla una vez creada.<br> Marque que privilegios desea le sean asignados e indique para cada uno que <i>perfil</i>, usuario o grupo, desea que tenga ese privilegio.<br> Puede indicar mas de un <i>perfil</i> separandolos por comas.
+_Permissions=Permisos
+_Post_creating_statement_header=Puede indicar una sentencia SQL a ejecutar tras la creacion de la tabla en la base de datos.<br> Esto puede ser de utilidad para asignar una configuracion de permisos peculiar, para crear algun tipo de indice que no cree la aplicacion por defecto o a\u00f1adir alguna columna a la tabla que no este en la tabla original.
+_Post_creating_statement=Sentencias postcreacion
+_Primary_key=Clave primaria
+_Primary_key_msg=Para que gvSIG pueda trabajar correctamente con tablas de BBDD es muy recomendable que esta disponga de una clave primaria definida. Si no  la tiene e intenta cargarla en gvSIG puede que algunas operaciones no funcionen adecuadamente.
+_Recalcular_estadisticas_de_la_tabla_al_terminar=Recalcular estadisticas de la tabla al terminar
+_role=Perfil
+_Seleccione_el_campo_a_usar_como_clave_primaria=Seleccione el campo a usar como clave primaria:
+_Seleccione_la_tabla_a_usar=Seleccione la tabla a usar\:
+_Set_geometry_to_null=Asignar la geometria a null
+_Skip_entire_feature=No insertar la feature
+_Table_and_fields_name_options_header=Algunas bases de datos precisan tratar los identificadores de tabla o campo que tienen mayusculas y minusculas mezcladas, o espacios en blanco de forma especial a la hora de referirse a ellos.  Es recomendable que no los utilice para evitar problemas.<br> Puede indicar al asistente que traslade todos los nombres de campo a minusculas y que use "_" en lugar de espacios en blanco en el nombre de tabla si los hubiese.
+_Table_and_fields_name_options=Opciones del nombre de tabla y campos
+_Tablename=Nombre de tabla
+_The_name_of_schema_cannot_be_empty=Debera especificar un nombre de esquema.
+_The_name_of_table_cannot_be_empty=Debera especificar un nombre de table.
+_Trasladar_espacios_a_guiones=Trasladar espacios a "_"
+_Trasladar_identificadores_a_minusculas=Trasladar identificadores a min\u00fasculas
+_update_table_statistics=Actualizar estadisticas de la tabla
+_update_table_statistics_header=Algunos gestores de base de datos tienen la opcion de recopilar estadisticas de los datos de  las tablas para optimizar el acceso a los datos tras una insercion masiva de estos.<br> Puede indicar aqui si desea que se realice esta operacion al final de la exportacion.
+_Utilizar_un_campo_existente_como_clave_primaria=Utilizar un campo existente como clave primaria.
+_Indique_que_registros_desea_exportar=Indique que registros desea exportar
+_Todos_los_registros=Todos los registros
+_Los_registros_seleccionados=Los registros seleccionados
+_Los_registros_que_cumplan_el_critrio_seleccionado=Los registros que cumplan el criterio seleccionado
+_Nombre_de_la_expresion_opcinal=Nombre de la expresion (opcional)
+_Expresion=Expresion
+_Type_here_the_name_of_the_expression_if_you_want_to_save_it_otherwise_leave_it_blank=Indique aqui el nombre con el que desea guardar la expresion, o deje este campo en blanco si no desea guardarla.
+_Test=Test
+_Usar_una_expresion_guardada=Usar una expresion guardada
+_Nueva_expresion=Nueva expresion
+_Filtro=Filtro
+_Export_to=Exportar a...

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+    <alternativeNames name="org.gvsig.exportto.app.extension"/>
+    <depends plugin-name="org.gvsig.app.mainplugin" />
+    <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
+    <depends plugin-name="org.gvsig.geodb.app.mainplugin" />
+    <depends plugin-name="org.gvsig.shp.app.mainplugin" />
+
+    <resourceBundle name="text"/>
+    <libraries library-dir="lib"/>
+    <extensions>
+        <extension class-name="org.gvsig.exportto.app.extension.ExporttoLayerExtension"
+                   description=""
+                   active="true"
+                   priority="1">
+            <action 
+                name="layer-exportto"
+                label="export_to" 
+                position="600500000"  
+                tooltip="export_to" 
+                action-command="Exportto"
+                icon="layer-export"
+                accelerator=""
+            />    
+
+            <menu 
+                name="layer-exportto"
+                text="Layer/export_to" 
+            />              
+        </extension>	
+                
+                        	
+        <extension class-name="org.gvsig.exportto.app.extension.ExporttoTableExtension"
+                   description=""
+                   active="true"
+                   priority="1">
+
+            <action 
+                name="table-exportto"
+                label="export_to" 
+                position="500500000"  
+                tooltip="export_to" 
+                action-command="Exportto"
+                icon="table-export"
+                accelerator=""
+            />    
+
+            <menu 
+                name="table-exportto"
+                text="Table/export_to" 
+            />              
+
+        </extension>        
+        <extension class-name="org.gvsig.exportto.app.extension.ExporttoPreferencesExtension"
+                   description=""
+                   active="true"
+                   priority="1">
+        </extension>        
+    </extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/images/action/table-export.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/images/action/table-export.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/images/action/layer-export.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/images/action/layer-export.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/images/preferences/export-to-preferences.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/resources-plugin/images/preferences/export-to-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,77 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>org.gvsig:org.gvsig.exportto.lib.api</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.api</include>
+        <include>org.gvsig:org.gvsig.exportto.lib.impl</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.impl</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.spi</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.file</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.shape</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.dxf</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.jdbc</include>
+        <!--
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.generic</include>
+
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.postgresql</include>
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.mysql</include>
+        -->
+        <include>org.gvsig:org.gvsig.exportto.swing.prov.dbf</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoTableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoTableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoTableExtension.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.ExporttoWindowManager;
+import org.gvsig.exportto.swing.JExporttoServicePanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoTableExtension extends Extension {
+
+    private ExporttoSwingManager swingManager;
+    private static final ApplicationManager APPLICATION_MANAGER =
+        ApplicationLocator.getManager();
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "table-export", this);
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+        swingManager = ExporttoSwingLocator.getSwingManager();
+    }
+
+    public void execute(String actionCommand) {
+        org.gvsig.andami.ui.mdiManager.IWindow f =
+            PluginServices.getMDIManager().getActiveWindow();
+
+        if (f instanceof FeatureTableDocumentPanel) {
+            FeatureTableDocumentPanel featureTableDocumentPanel =
+                (FeatureTableDocumentPanel) f;
+            TableDocument tableDocument =
+                (TableDocument) featureTableDocumentPanel.getDocument();
+            showExportto(tableDocument.getStore());
+        }
+    }
+
+    private void showExportto(FeatureStore featureStore) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        JExporttoServicePanel panel =
+            swingManager
+                .createExportto(
+                    featureStore,
+                    null,
+                    new LoadTableAction(),
+                    new int[] { ExporttoSwingManager.VECTORIAL_TABLE_WITHOUT_GEOMETRY });
+
+        swingManager.getWindowManager().showWindow(panel, i18nManager.getTranslation("_Export_to"),
+            ExporttoWindowManager.MODE_WINDOW);
+
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        IWindow window = APPLICATION_MANAGER.getUIManager().getActiveWindow();
+
+        if (window == null) {
+            return false;
+        }
+
+        if (window instanceof FeatureTableDocumentPanel) {
+            return true;
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoTableExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadLayerAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadLayerAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadLayerAction.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class LoadLayerAction implements ExporttoServiceFinishAction {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(LoadLayerAction.class);
+    private static final MapContextManager MAP_CONTEXT_MANAGER =
+        MapContextLocator.getMapContextManager();
+
+    private MapContext mapContext = null;
+
+    public LoadLayerAction(MapContext mapContext) {
+        super();
+        this.mapContext = mapContext;
+    }
+
+    public void finished(String layerName,
+        DataStoreParameters dataStoreParameters) {
+        try {
+            int res =
+                JOptionPane.showConfirmDialog((JComponent) PluginServices
+                    .getMDIManager().getActiveWindow(), PluginServices.getText(
+                    this, "insertar_en_la_vista_la_capa_creada"),
+                    PluginServices.getText(this, "insertar_capa"),
+                    JOptionPane.YES_NO_OPTION);
+
+            if (res == JOptionPane.YES_OPTION) {
+                FLayer layer =
+                    MAP_CONTEXT_MANAGER.createLayer(layerName,
+                        dataStoreParameters);
+                mapContext.getLayers().addLayer(layer);
+            }
+
+        } catch (LoadLayerException e) {
+            LOG.error("Error loading the exported layer", e);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadLayerAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindow.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.exportto.swing.ExporttoWindowManager;
+
+/**
+ * {@link IWindow} to show a Exportto.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoWindow extends JPanel implements IWindow {
+
+    private static final long serialVersionUID = -4401123724140025094L;
+
+    private WindowInfo info;
+
+    private Object profile = WindowInfo.EDITOR_PROFILE;
+
+    /**
+     * Constructor.
+     * 
+     * @param panel
+     *            the panel to show
+     * @param title
+     *            the window title
+     * @param mode
+     *            the window mode
+     * @see {@link ExporttoWindowManager#MODE_DIALOG}
+     * @see {@link ExporttoWindowManager#MODE_TOOL}
+     * @see {@link ExporttoWindowManager#MODE_WINDOW}
+     */
+    public ExporttoWindow(JPanel panel, String title, int mode) {
+        this.setLayout(new BorderLayout());
+        add(panel, BorderLayout.CENTER);
+        Dimension dimension = new Dimension(800, 500);
+        setSize(dimension);
+        int code =
+            WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
+                | WindowInfo.RESIZABLE;
+        switch (mode) {
+        case ExporttoWindowManager.MODE_DIALOG:
+            code |= WindowInfo.MODALDIALOG;
+            profile = WindowInfo.DIALOG_PROFILE;
+            break;
+        case ExporttoWindowManager.MODE_TOOL:
+            code |= WindowInfo.PALETTE;
+            profile = WindowInfo.TOOL_PROFILE;
+            break;
+        case ExporttoWindowManager.MODE_WINDOW:
+        default:
+            code |= WindowInfo.MODELESSDIALOG;
+            profile = WindowInfo.EDITOR_PROFILE;
+        }
+        info = new WindowInfo(code);
+        info.setTitle(title);
+        info.setMinimumSize(dimension);
+    }
+
+    public WindowInfo getWindowInfo() {
+        return info;
+    }
+
+    public Object getWindowProfile() {
+        return profile;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoLayerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoLayerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoLayerExtension.java	(revision 42196)
@@ -0,0 +1,160 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.exportto.swing.ExporttoSwingLocator;
+import org.gvsig.exportto.swing.ExporttoSwingManager;
+import org.gvsig.exportto.swing.JExporttoServicePanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class ExporttoLayerExtension extends Extension {
+
+    private ExporttoSwingManager swingManager;
+    private static final ApplicationManager APPLICATION_MANAGER
+            = ApplicationLocator.getManager();
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-export", this);
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+        // Asignamos el locator e iniciamos la instancia
+        swingManager = ExporttoSwingLocator.getSwingManager();
+
+        swingManager.registerWindowManager(new GvSIGExporttoWindowManager());
+
+        ProjectManager projectManager = ApplicationLocator.getProjectManager();
+        ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+        viewManager.addTOCContextAction("layer-exportto");
+
+    }
+
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument view
+                = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if ( view != null ) {
+            MapContext mapContext = view.getMapContext();
+            FLayers layers = mapContext.getLayers();
+            FLayer[] actives = layers.getActives();
+            try {
+                if ( actives.length == 1 ) {
+                    if ( actives[0] instanceof FLyrVect ) {
+                        FLyrVect fLyrVect = (FLyrVect) actives[0];
+                        showExportto(fLyrVect, mapContext.getProjection(),
+                                mapContext, WindowManager.MODE.WINDOW);
+                    }
+                } else {
+                    for ( int i = 0; i < actives.length; i++ ) {
+                        if ( actives[i] instanceof FLyrVect ) {
+                            FLyrVect fLyrVect = (FLyrVect) actives[i];
+                            showExportto(fLyrVect, mapContext.getProjection(),
+                                    mapContext, WindowManager.MODE.DIALOG);
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                NotificationManager.showMessageError(e.getMessage(), e);
+            }
+        }
+    }
+
+    public int showExportto(FLyrVect fLyrVect, IProjection projection,
+            MapContext mapContext) {
+        return this.showExportto(fLyrVect, projection, mapContext, WindowManager.MODE.DIALOG);
+    }
+    
+    public int showExportto(FLyrVect fLyrVect, IProjection projection,
+            MapContext mapContext, WindowManager.MODE mode) {
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        JExporttoServicePanel panel
+                = swingManager
+                .createExportto(
+                        fLyrVect,
+                        new LoadLayerAction(mapContext),
+                        new int[]{ExporttoSwingManager.VECTORIAL_TABLE_WITH_GEOMETRY});
+
+        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+        winmgr.showWindow(panel, i18nManager.getTranslation("_Export_to"), mode);
+        return panel.getStatus();
+
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument view
+                = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if ( view != null ) {
+            FLayer[] actives = view.getMapContext().getLayers().getActives();
+            for ( int i = 0; i < actives.length; i++ ) {
+                if ( actives[i] instanceof FLyrVect ) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    public boolean isVisible() {
+        IWindow window = APPLICATION_MANAGER.getUIManager().getActiveWindow();
+
+        if ( window == null ) {
+            return false;
+        }
+
+        if ( window instanceof DefaultViewPanel ) {
+            return true;
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoLayerExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.exportto package documentation</title>
+</head>
+<body>
+
+	<p>Exportto gvSIG extension</p>
+	
+	<p>
+	Shows Exportto into gvSIG.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/preferences/ExporttoPreferencesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/preferences/ExporttoPreferencesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/preferences/ExporttoPreferencesPage.java	(revision 42196)
@@ -0,0 +1,167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension.preferences;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.exportto.app.extension.ExporttoPreferencesExtension;
+import org.gvsig.exportto.swing.preferences.ExporttoSwingPreferencesComponent;
+
+//import org.gvsig.exportto.swing.prov.generic.ExporttoGenericProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * Exportto related preferences page.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoPreferencesPage extends AbstractPreferencePage {
+
+    private static final long serialVersionUID = -5751805016601819817L;
+
+    //private ImageIcon icon;
+
+    private ExporttoSwingProviderManager manager;
+
+    private ExporttoSwingPreferencesComponent preferences;
+
+    /**
+     * Constructor.
+     */
+    public ExporttoPreferencesPage() {
+        //icon = PluginServices.getIconTheme().get("exportto-properties");
+
+        manager = ExporttoSwingProviderLocator.getManager();
+        addComponent(new JLabel(
+            Messages.getText("exportto_preferences_panel_description")));
+        preferences = manager.createExporttoSwingProvidersPreferences();
+        addComponent(preferences.asJComponent());
+    }
+
+    public String getID() {
+        return getClass().getName();
+    }
+
+    public String getTitle() {
+        return Messages.getText("exportto_preferences");
+    }
+
+    public JPanel getPanel() {
+        return this;
+    }
+
+    public void initializeValues() {
+        // Nothing to do
+    }
+
+    public void initializeDefaults() {
+
+        ExporttoSwingProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        List<ExporttoSwingProviderFactory> list =  
+        providerManager.getProviderFactories();
+        
+        ExporttoSwingProviderFactory item = null;
+        /*
+         * This is similar to the initialization of the
+         * export-to library
+         */
+        for (int i=0; i<list.size(); i++) {
+            item = list.get(i);
+            // if (item.getClass() == ExporttoGenericProviderFactory.class) {
+                // The generic one (advanced) is disabled
+            //     providerManager.enableProvider(item, false);
+            // } else {
+                providerManager.enableProvider(item, true);
+            // }
+        }
+
+        preferences.initializeDefaults();
+    }
+
+    public ImageIcon getIcon() {
+        return IconThemeHelper.getImageIcon("export-to-preferences");
+    }
+
+    public boolean isValueChanged() {
+        return preferences.isValueChanged();
+    }
+
+    @Override
+    public void storeValues() throws StoreException {
+        // Update manager values
+        List<ExporttoSwingProviderFactory> providers =
+            manager.getProviderFactories();
+        @SuppressWarnings({ "unchecked" })
+        Set<ExporttoSwingProviderFactory> disabledProviders =
+            (Set<ExporttoSwingProviderFactory>) preferences
+                .getDisabledProviders();
+        Set<String> enabledNames = new HashSet<String>();
+        Set<String> disabledNames =
+            new HashSet<String>(disabledProviders.size());
+        for (int i = 0; i < providers.size(); i++) {
+            ExporttoSwingProviderFactory provider = providers.get(i);
+            boolean disabled = disabledProviders.contains(provider);
+            provider.setEnabled(!disabled);
+            if (disabled) {
+                disabledNames.add(provider.getName());
+            } else {
+                enabledNames.add(provider.getName());
+            }
+        }
+        // Persist them
+        DynObject preferences =
+            PluginsLocator.getManager()
+                .getPlugin("org.gvsig.exportto.app.extension")
+                .getPluginProperties();
+        preferences.setDynValue(
+            ExporttoPreferencesExtension.PREFERENCE_ENABLED_PROVIDERS,
+            enabledNames);
+        preferences.setDynValue(
+            ExporttoPreferencesExtension.PREFERENCE_DISABLED_PROVIDERS,
+            disabledNames);
+    }
+
+    @Override
+    public void setChangesApplied() {
+        preferences.setChangesApplied();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/preferences/ExporttoPreferencesPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindowListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindowListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindowListener.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.exportto.swing.JExporttoServicePanelListener;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class ExporttoWindowListener implements JExporttoServicePanelListener {
+
+    private IWindow exporttoWindow = null;
+
+    public ExporttoWindowListener(IWindow exporttoWindow) {
+        super();
+        this.exporttoWindow = exporttoWindow;
+    }
+
+    public void close() {
+        PluginServices.getMDIManager().closeWindow(exporttoWindow);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoWindowListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoPreferencesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoPreferencesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoPreferencesExtension.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.exportto.app.extension.preferences.ExporttoPreferencesPage;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderFactory;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
+import org.gvsig.exportto.swing.spi.ExporttoSwingProviderManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.NotRegisteredException;
+
+/**
+ * Andami extension to register the ExportTo preferences panel.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class ExporttoPreferencesExtension extends Extension {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(ExporttoPreferencesExtension.class);
+
+    /**
+     * The name of the preferences property with the names of the hidden
+     * ExporttoSwingProviderFactory.
+     */
+    public static final String PREFERENCE_DISABLED_PROVIDERS =
+        "disabledProviders";
+    public static final String PREFERENCE_ENABLED_PROVIDERS =
+        "enabledProviders";
+
+    public void initialize() {
+        ExporttoSwingProviderManager providerManager =
+            ExporttoSwingProviderLocator.getManager();
+        // Load from preferences the list of Exportto Providers to ignore.
+        DynObject preferences = this.getPlugin().getPluginProperties();
+        @SuppressWarnings("unchecked")
+        Set<String> disabledProviders =
+            (Set<String>) preferences
+                .getDynValue(PREFERENCE_DISABLED_PROVIDERS);
+        if (disabledProviders != null) {
+            for (Iterator<String> iterator = disabledProviders.iterator(); iterator
+                .hasNext();) {
+                ExporttoSwingProviderFactory factory;
+                String providerName = null;
+                try {
+                    providerName = iterator.next();
+                    factory =
+                        providerManager
+                            .getExporttoSwingProviderFactory(providerName);
+                    providerManager.enableProvider(factory, Boolean.FALSE);
+                } catch (NotRegisteredException e) {
+                    LOG.info("In preferences have registered as disable a provider for the export tool that now is not availabe (" + providerName+").");
+                } catch (ServiceException e) {
+                    LOG.warn("Problems loading the provider '"+providerName+"'.",e);
+                }
+            }
+        }
+        @SuppressWarnings("unchecked")
+        Set<String> enabledProviders =
+            (Set<String>) preferences.getDynValue(PREFERENCE_ENABLED_PROVIDERS);
+        if (enabledProviders != null) {
+            for (Iterator<String> iterator = enabledProviders.iterator(); iterator
+                .hasNext();) {
+                ExporttoSwingProviderFactory factory;
+                String providerName = null;
+                try {
+                    providerName = iterator.next();
+                    factory =
+                        providerManager
+                            .getExporttoSwingProviderFactory(providerName);
+                    providerManager.enableProvider(factory, Boolean.TRUE);
+                } catch (NotRegisteredException e) {
+                    LOG.info("In preferences have registered as enabled a provider for the export tool that now is not availabe (" + providerName+").");
+                } catch (ServiceException e) {
+                    LOG.warn("Problems loading the provider '"+providerName+"'.",e);
+                }
+            }
+        }
+
+        // Register preferences page
+        ExtensionPointManager extensionPoints =
+            ToolsLocator.getExtensionPointManager();
+        ExtensionPoint ep = extensionPoints.add("AplicationPreferences", "");
+
+        IconThemeHelper.registerIcon("preferences", "export-to-preferences", this);
+
+        ep.append("ExporttoPreferencesPage", "", new ExporttoPreferencesPage());
+    }
+
+    public void execute(String actionCommand) {
+        // Nothing to do
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/ExporttoPreferencesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadTableAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadTableAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadTableAction.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.exportto.ExporttoServiceFinishAction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class LoadTableAction implements ExporttoServiceFinishAction {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(LoadLayerAction.class);
+    private static final DataManager DATA_MANAGER = DALLocator.getDataManager();
+
+    public LoadTableAction() {
+        super();
+    }
+
+    public void finished(String tableName,
+        DataStoreParameters dataStoreParameters) {
+
+        int res =
+            JOptionPane.showConfirmDialog((JComponent) PluginServices
+                .getMDIManager().getActiveWindow(), PluginServices.getText(
+                this, "add_table_to_project"), PluginServices.getText(this,
+                "add_table"), JOptionPane.YES_NO_OPTION);
+
+        if (res == JOptionPane.YES_OPTION) {
+            try {
+                FeatureStore featureStore =
+                    (FeatureStore) DATA_MANAGER.openStore(
+                        dataStoreParameters.getDataStoreName(),
+                        dataStoreParameters);
+                TableDocument tableDocument =
+                    (TableDocument) ProjectManager.getInstance()
+                        .createDocument(TableManager.TYPENAME, tableName);
+                tableDocument.setStore(featureStore);
+
+                ApplicationLocator.getManager().getProjectManager()
+                    .getCurrentProject().add(tableDocument);
+                // FeatureTableDocumentPanel featureTableDocumentPanel =
+                // new FeatureTableDocumentPanel(tableDocument);
+                //
+                // MDI_MANAGER.addWindow(featureTableDocumentPanel);
+            } catch (ValidateDataParametersException e) {
+                LOG.error("Error opening the exported table", e);
+            } catch (InitializeException e) {
+                LOG.error("Error opening the exported table", e);
+            } catch (ProviderNotRegisteredException e) {
+                LOG.error("Error opening the exported table", e);
+            } catch (DataException e) {
+                LOG.error("Error opening the exported table", e);
+            }
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/LoadTableAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/GvSIGExporttoWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/GvSIGExporttoWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/GvSIGExporttoWindowManager.java	(revision 42196)
@@ -0,0 +1,80 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.exportto.app.extension;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.exportto.swing.ExporttoWindowManager;
+import org.gvsig.exportto.swing.JExporttoServicePanel;
+
+/**
+ * {@link ExporttoWindowManager} implementation to show Exportto
+ * windows as gvSIG windows
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class GvSIGExporttoWindowManager implements ExporttoWindowManager,
+    ComponentListener {
+
+    private Map<JPanel, IWindow> panelToWindow = new HashMap<JPanel, IWindow>();
+
+    public void showWindow(JExporttoServicePanel panel, String title, int mode) {
+        ExporttoWindow window = new ExporttoWindow(panel, title, mode);
+        panel
+            .setExporttoServicePanelListener(new ExporttoWindowListener(window));
+
+        panel.addComponentListener(this);
+
+        panelToWindow.put(panel, window);
+
+        PluginServices.getMDIManager().addCentredWindow(window);
+    }
+
+    public void componentHidden(ComponentEvent componentEvent) {
+        JPanel panel = (JPanel) componentEvent.getSource();
+        IWindow window = panelToWindow.get(panel);
+        PluginServices.getMDIManager().closeWindow(window);
+        panelToWindow.remove(panel);
+    }
+
+    public void componentMoved(ComponentEvent e) {
+        // Nothing to do
+    }
+
+    public void componentResized(ComponentEvent e) {
+        // Nothing to do
+    }
+
+    public void componentShown(ComponentEvent e) {
+        // Nothing to do
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/src/main/java/org/gvsig/exportto/app/extension/GvSIGExporttoWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.exportto.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <description>
+This plugin provide the framework to export data tables and layers to other
+formats that the original format of table or layer.
+Provide the final tools to export to the formats:
+- DBF
+- DXF
+- Shape
+- PostgreSQL
+- MySQL
+- Generic, a generic exporter to any format that gvsig support (less intuitive)
+  </description>
+
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.exportto.app</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.document.table.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+<!--
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.generic</artifactId>
+      <scope>compile</scope>
+    </dependency>
+-->
+
+    <!-- Runtime dependencies -->
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.lib.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.file</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.shape</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.dxf</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.jdbc</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.postgresql</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.mysql</artifactId>
+      <scope>runtime</scope>
+    </dependency>     
+     <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.exportto.swing.prov.dbf</artifactId>
+      <scope>runtime</scope>
+    </dependency>     
+
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+  <properties>
+      <gvsig.package.info.name>Export framework</gvsig.package.info.name>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.document.table.app.mainplugin -ge 2, required: org.gvsig.exportto.app.extension -ge 1</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Import And Export</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.exportto.app.extension</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>  
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app/org.gvsig.exportto.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.exportto.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,23 @@
+_Import_images_as_picture_marker_symbols=Importar imagenes como simbolos puntuales de imagen
+_Images_to_import=Imagenes a importar
+_Folder_name_for_creatimg_the_symbols=Nombre de la carpeta donde crear los simbolos
+_Default_size_to_use_in_symbols=Tama\u00f1o por defecto a usar para los nuevos simbolos
+_import=Importar
+_Overwrite_options=Opciones de sobreescritura
+_Select_images=Seleccione las imagenes
+_Ask_to_the_user=Preguntar al usuario
+_Dont_overwrite=No sobreescribir
+_Overwrite_always=Sobreescribir siempre
+_Import_picture_marker_symbols=Importar simbolos de imagen puntual
+_Should_select_a_folder_name=Debera seleccionar un nombre de carpeta
+_Should_select_the_images_to_import=Debera seleccionar las imagenes a importar
+_Select_the_images=Seleccione las imagenes
+_Images=Imagenes
+_Import_process_already_running_Wait_to_terminate_and_retry=El proceso de importacion esta ejecutandose.Espere a que termine y reintentelo de nuevo.
+_Cancel=Cancelar
+_File_{0}_already_exists_Overwrite=El archivo {0} ya existe. \u00bfDesea sobreescribirlo?
+_Symbol_{0}_already_exists_Overwrite=El s\u00edmbolo {0} ya existe. \u00bfDesea sobreescribirlo?
+_Import_of_symbols_completed=Importaci\u00f3n de s\u00edmbolos completada
+_Import_of_symbols_aborted=Importaci\u00f3n de s\u00edmbolos abortada
+_Error_in_the_process_of_import_point_symbols_Some_symbols_cant_be_imported=Error en la importaci\u00f3n de s\u00edmbolos puntuales. Algunos no se han importado
+Import_picture_marker_symbols=Importar s\u00edmbolos puntuales de imagen

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,23 @@
+_Import_images_as_picture_marker_symbols=Import images as picture marker symbols
+_Images_to_import=Images to import
+_Folder_name_for_creatimg_the_symbols=Folder name for creating the symbols
+_Default_size_to_use_in_symbols=Default size to use in symbols
+_import=Import
+_Overwrite_options=Overwrite options
+_Select_images=Select images
+_Ask_to_the_user=Ask to the user
+_Dont_overwrite=Don't overwrite
+_Overwrite_always=Overwrite always
+_Import_picture_marker_symbols=Import picture marker symbols
+_Should_select_a_folder_name=Should select a folder name
+_Should_select_the_images_to_import=Should select the images to import
+_Select_the_images=Select the images
+_Images=Images
+_Import_process_already_running_Wait_to_terminate_and_retry=Import process already running. Wait to terminate and retry.
+_Cancel=Cancel
+_File_{0}_already_exists_Overwrite=File {0} already exists. Overwrite?
+_Symbol_{0}_already_exists_Overwrite=Symbol {0} already exists. Overwrite?
+_Import_of_symbols_completed=Import of symbols completed
+_Import_of_symbols_aborted=Import of symbols aborted
+_Error_in_the_process_of_import_point_symbols_Some_symbols_cant_be_imported=Error in the import process. Some point symbols were not imported
+Import_picture_marker_symbols=Import picture marker symbols

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib" />
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+	<resourceBundle name="text" />
+	<extensions>
+        <extension
+            class-name="org.gvsig.symbology.app.importsymbols.ImportPictureMarkerSymbolsExtension"
+            description="" active="true">
+
+          <action 
+                 name="tools-symbology-import-picture-marker-symbol" 
+                 label="_import_picture-marker_symbols"
+                 tooltip="_import_images_from_folder_as_picture_marker_symbols" 
+                 action-command="tools-symbology-import-picture-marker-symbol"
+                 icon="tools-simbology-import-picture-marker-symbol" 
+                 position="900400200" 
+                 accelerator="" 
+            />
+            <menu
+                 name="tools-symbology-import-picture-marker-symbol" 
+                 text="tools/Symbols/Import_picture_marker_symbols"
+            />
+        </extension>
+	</extensions>
+</plugin-config>
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsExtension.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.importsymbols;
+
+import java.awt.Component;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ImportPictureMarkerSymbolsExtension extends Extension {
+
+    @SuppressWarnings("unused")
+    private static Logger logger = LoggerFactory.getLogger(ImportPictureMarkerSymbolsExtension.class);
+    private ImportPictureMarkerSymbolsProcess process = null;
+
+    public void initialize() {
+      // Do nothing
+    }
+    public void execute(String actionCommand) {
+      ApplicationManager application = ApplicationLocator.getManager();
+
+      if ("tools-symbology-import-picture-marker-symbol".equalsIgnoreCase(actionCommand)) {
+        if (process != null && process.isAlive()) {
+          application.messageDialog(
+        	  application.translate("_Import_process_already_running_Wait_to_terminate"),
+              application.translate("_Import_picture_marker_symbols"),
+              JOptionPane.WARNING_MESSAGE);
+          return;
+        }
+        process = new ImportPictureMarkerSymbolsProcess();
+        /*
+		Component dlg = application.createComponent(ImportPictureMarkerSymbolsPanel.class, process);
+		application.showDialog(dlg, application.translate("_Import_point_symbols"));
+		*/
+		if( !process.isCancellationRequested() ) {
+			process.start();
+		}
+      }
+    }
+    public boolean isEnabled() {
+      if (process != null && process.isAlive()) { 
+        return false;
+      }
+      return true;
+    }
+    public boolean isVisible() {
+      return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.xml	(revision 42196)
@@ -0,0 +1,1028 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+
+<object classname="com.jeta.forms.store.memento.FormPackage">
+ <at name="fileversion">
+  <object classname="com.jeta.forms.store.memento.FormsVersion2">
+   <at name="major">2</at>
+   <at name="minor">0</at>
+   <at name="sub">0</at>
+  </object>
+ </at>
+ <at name="form">
+  <object classname="com.jeta.forms.store.memento.FormMemento">
+   <super classname="com.jeta.forms.store.memento.ComponentMemento">
+    <at name="cellconstraints">
+     <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+      <at name="column">1</at>
+      <at name="row">1</at>
+      <at name="colspan">1</at>
+      <at name="rowspan">1</at>
+      <at name="halign">default</at>
+      <at name="valign">default</at>
+      <at name="insets" object="insets">0,0,0,0</at>
+     </object>
+    </at>
+    <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
+   </super>
+   <at name="id">/home/jjdelcerro/workspaces/gvsig-desktop-2.0.0-20120418/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.xml</at>
+   <at name="path">gvsig-desktop-2.0.0-20120418/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:PREF:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE</at>
+   <at name="components">
+    <object classname="java.util.LinkedList">
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">2</at>
+           <at name="colspan">6</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_Import_images_as_picture_marker_symbols</at>
+            <at name="height">17</at>
+            <at name="width">631</at>
+            <at name="name">labelTitle</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">4</at>
+           <at name="colspan">6</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_Images_to_import</at>
+            <at name="height">17</at>
+            <at name="width">631</at>
+            <at name="name">labelImagesToImport</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">7</at>
+           <at name="colspan">6</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_Folder_name_for_creatimg_the_symbols</at>
+            <at name="height">17</at>
+            <at name="width">631</at>
+            <at name="name">labelFolderName</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">3</at>
+           <at name="row">8</at>
+           <at name="colspan">5</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTextField</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTextField</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="height">21</at>
+            <at name="width">615</at>
+            <at name="name">ctrltFolderName</at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">3</at>
+           <at name="row">9</at>
+           <at name="colspan">5</at>
+           <at name="rowspan">1</at>
+           <at name="halign">fill</at>
+           <at name="valign">top</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JList</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JList</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="height">78</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="width">613</at>
+            <at name="name">ctrlExistingFolders</at>
+            <at name="scollBars">
+             <object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
+              <at name="name">scollBars</at>
+              <at name="verticalpolicy">20</at>
+              <at name="horizontalpolicy">30</at>
+              <at name="border">
+               <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+                <super classname="com.jeta.forms.store.properties.BorderProperty">
+                 <at name="name">border</at>
+                </super>
+                <at name="borders">
+                 <object classname="java.util.LinkedList">
+                  <item >
+                   <at name="value">
+                    <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                      <at name="name">border</at>
+                     </super>
+                    </object>
+                   </at>
+                  </item>
+                 </object>
+                </at>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="scrollableTracksViewportHeight">true</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">11</at>
+           <at name="colspan">6</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_Default_size_to_use_in_symbols</at>
+            <at name="height">17</at>
+            <at name="width">631</at>
+            <at name="name">labelSize</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">3</at>
+           <at name="row">12</at>
+           <at name="colspan">5</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JSpinner</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JSpinner</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="height">24</at>
+            <at name="width">615</at>
+            <at name="name">ctrlDefaultSize</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">5</at>
+           <at name="row">17</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_Cancel</at>
+            <at name="height">22</at>
+            <at name="width">62</at>
+            <at name="name">ctrlCancel</at>
+            <at name="actionCommand">_Cancel</at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">7</at>
+           <at name="row">17</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_import</at>
+            <at name="height">22</at>
+            <at name="width">62</at>
+            <at name="name">ctrlImport</at>
+            <at name="actionCommand">_import</at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">14</at>
+           <at name="colspan">6</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_Overwrite_options</at>
+            <at name="height">17</at>
+            <at name="width">631</at>
+            <at name="name">labelOverwriteOptions</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">3</at>
+           <at name="row">15</at>
+           <at name="colspan">5</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JComboBox</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JComboBox</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="height">23</at>
+            <at name="selectedItem">
+             <object classname="com.jeta.forms.store.properties.ListItemProperty">
+              <at name="name">listitem</at>
+              <at name="label">_Ask_to_user</at>
+              <at name="icon">
+               <object classname="com.jeta.forms.store.properties.IconProperty">
+                <at name="embedded">false</at>
+                <at name="description"></at>
+                <at name="width">0</at>
+                <at name="height">0</at>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.ListItemProperty">
+                   <at name="name">listitem</at>
+                   <at name="label">_Ask_to_user</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="description"></at>
+                     <at name="width">0</at>
+                     <at name="height">0</at>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.ListItemProperty">
+                   <at name="name">listitem</at>
+                   <at name="label">_Dont_overwrite</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="description"></at>
+                     <at name="width">0</at>
+                     <at name="height">0</at>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.ListItemProperty">
+                   <at name="name">listitem</at>
+                   <at name="label">_Overwrite_always</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="description"></at>
+                     <at name="width">0</at>
+                     <at name="height">0</at>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">615</at>
+            <at name="name">ctrlOverwriteOptions</at>
+            <at name="itemCount">3</at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">3</at>
+           <at name="row">5</at>
+           <at name="colspan">5</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">top</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JList</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JList</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="height">78</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="width">613</at>
+            <at name="name">ctrlImagesToImport</at>
+            <at name="scollBars">
+             <object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
+              <at name="name">scollBars</at>
+              <at name="verticalpolicy">20</at>
+              <at name="horizontalpolicy">30</at>
+             </object>
+            </at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="scrollableTracksViewportHeight">true</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">3</at>
+           <at name="row">6</at>
+           <at name="colspan">5</at>
+           <at name="rowspan">1</at>
+           <at name="halign">right</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">_Select_images</at>
+            <at name="height">22</at>
+            <at name="width">119</at>
+            <at name="name">ctrlBrowseImagesToImport</at>
+            <at name="actionCommand">_Browse</at>
+            <at name="border">
+             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+    </object>
+   </at>
+   <at name="properties">
+    <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+     <at name="classname">com.jeta.forms.gui.form.GridView</at>
+     <at name="properties">
+      <object classname="com.jeta.forms.store.support.PropertyMap">
+       <at name="name"></at>
+       <at name="fill">
+        <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+         <at name="name">fill</at>
+        </object>
+       </at>
+       <at name="scollBars">
+        <object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
+         <at name="name">scollBars</at>
+         <at name="verticalpolicy">21</at>
+         <at name="horizontalpolicy">31</at>
+         <at name="border">
+          <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+           <super classname="com.jeta.forms.store.properties.BorderProperty">
+            <at name="name">border</at>
+           </super>
+           <at name="borders">
+            <object classname="java.util.LinkedList">
+             <item >
+              <at name="value">
+               <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                <super classname="com.jeta.forms.store.properties.BorderProperty">
+                 <at name="name">border</at>
+                </super>
+               </object>
+              </at>
+             </item>
+            </object>
+           </at>
+          </object>
+         </at>
+        </object>
+       </at>
+       <at name="border">
+        <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+         <super classname="com.jeta.forms.store.properties.BorderProperty">
+          <at name="name">border</at>
+         </super>
+         <at name="borders">
+          <object classname="java.util.LinkedList"/>
+         </at>
+        </object>
+       </at>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="18">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="17">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="rowgroups">
+    <object classname="com.jeta.forms.store.memento.FormGroupSet">
+     <at name="groups">
+      <object classname="java.util.HashMap"/>
+     </at>
+    </object>
+   </at>
+   <at name="colgroups">
+    <object classname="com.jeta.forms.store.memento.FormGroupSet">
+     <at name="groups">
+      <object classname="java.util.HashMap"/>
+     </at>
+    </object>
+   </at>
+  </object>
+ </at>
+</object>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.java	(revision 42196)
@@ -0,0 +1,235 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.importsymbols;
+
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSpinner;
+import javax.swing.JTextField;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+
+public class ImportPictureMarkerSymbolsPanelLayout extends JPanel
+{
+   /**
+	 * 
+	 */
+	private static final long serialVersionUID = -5315759500182797864L;
+JLabel labelTitle = new JLabel();
+   JLabel labelImagesToImport = new JLabel();
+   JLabel labelFolderName = new JLabel();
+   JTextField ctrltFolderName = new JTextField();
+   JList ctrlExistingFolders = new JList();
+   JLabel labelSize = new JLabel();
+   JSpinner ctrlDefaultSize = new JSpinner();
+   JButton ctrlCancel = new JButton();
+   JButton ctrlImport = new JButton();
+   JLabel labelOverwriteOptions = new JLabel();
+   JComboBox ctrlOverwriteOptions = new JComboBox();
+   JList ctrlImagesToImport = new JList();
+   JButton ctrlBrowseImagesToImport = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public ImportPictureMarkerSymbolsPanelLayout()
+   {
+      initializePanel();
+   }
+
+   /**
+    * Adds fill components to empty cells in the first row and first column of the grid.
+    * This ensures that the grid spacing will be the same as shown in the designer.
+    * @param cols an array of column indices in the first row where fill components should be added.
+    * @param rows an array of row indices in the first column where fill components should be added.
+    */
+   void addFillComponents( Container panel, int[] cols, int[] rows )
+   {
+      Dimension filler = new Dimension(10,10);
+
+      boolean filled_cell_11 = false;
+      CellConstraints cc = new CellConstraints();
+      if ( cols.length > 0 && rows.length > 0 )
+      {
+         if ( cols[0] == 1 && rows[0] == 1 )
+         {
+            /** add a rigid area  */
+            panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
+            filled_cell_11 = true;
+         }
+      }
+
+      for( int index = 0; index < cols.length; index++ )
+      {
+         if ( cols[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
+      }
+
+      for( int index = 0; index < rows.length; index++ )
+      {
+         if ( rows[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
+      }
+
+   }
+
+   /**
+    * Helper method to load an image file from the CLASSPATH
+    * @param imageName the package and name of the file to load relative to the CLASSPATH
+    * @return an ImageIcon instance with the specified image file
+    * @throws IllegalArgumentException if the image resource cannot be loaded.
+    */
+   public ImageIcon loadImage( String imageName )
+   {
+      try
+      {
+         ClassLoader classloader = getClass().getClassLoader();
+         java.net.URL url = classloader.getResource( imageName );
+         if ( url != null )
+         {
+            ImageIcon icon = new ImageIcon( url );
+            return icon;
+         }
+      }
+      catch( Exception e )
+      {
+         e.printStackTrace();
+      }
+      throw new IllegalArgumentException( "Unable to load image: " + imageName );
+   }
+
+   /**
+    * Method for recalculating the component orientation for 
+    * right-to-left Locales.
+    * @param orientation the component orientation to be applied
+    */
+   public void applyComponentOrientation( ComponentOrientation orientation )
+   {
+      // Not yet implemented...
+      // I18NUtils.applyComponentOrientation(this, orientation);
+      super.applyComponentOrientation(orientation);
+   }
+
+   public JPanel createPanel()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:PREF:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      labelTitle.setName("labelTitle");
+      labelTitle.setText("_Import_images_as_picture_marker_symbols");
+      jpanel1.add(labelTitle,cc.xywh(2,2,6,1));
+
+      labelImagesToImport.setName("labelImagesToImport");
+      labelImagesToImport.setText("_Images_to_import");
+      jpanel1.add(labelImagesToImport,cc.xywh(2,4,6,1));
+
+      labelFolderName.setName("labelFolderName");
+      labelFolderName.setText("_Folder_name_for_creatimg_the_symbols");
+      jpanel1.add(labelFolderName,cc.xywh(2,7,6,1));
+
+      ctrltFolderName.setName("ctrltFolderName");
+      jpanel1.add(ctrltFolderName,cc.xywh(3,8,5,1));
+
+      ctrlExistingFolders.setName("ctrlExistingFolders");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(ctrlExistingFolders);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,new CellConstraints(3,9,5,1,CellConstraints.FILL,CellConstraints.TOP));
+
+      labelSize.setName("labelSize");
+      labelSize.setText("_Default_size_to_use_in_symbols");
+      jpanel1.add(labelSize,cc.xywh(2,11,6,1));
+
+      ctrlDefaultSize.setName("ctrlDefaultSize");
+      jpanel1.add(ctrlDefaultSize,cc.xywh(3,12,5,1));
+
+      ctrlCancel.setActionCommand("_Cancel");
+      ctrlCancel.setName("ctrlCancel");
+      ctrlCancel.setText("_Cancel");
+      jpanel1.add(ctrlCancel,cc.xy(5,17));
+
+      ctrlImport.setActionCommand("_import");
+      ctrlImport.setName("ctrlImport");
+      ctrlImport.setText("_import");
+      jpanel1.add(ctrlImport,cc.xy(7,17));
+
+      labelOverwriteOptions.setName("labelOverwriteOptions");
+      labelOverwriteOptions.setText("_Overwrite_options");
+      jpanel1.add(labelOverwriteOptions,cc.xywh(2,14,6,1));
+
+      ctrlOverwriteOptions.setName("ctrlOverwriteOptions");
+      ctrlOverwriteOptions.addItem("_Ask_to_user");
+      ctrlOverwriteOptions.addItem("_Dont_overwrite");
+      ctrlOverwriteOptions.addItem("_Overwrite_always");
+      jpanel1.add(ctrlOverwriteOptions,cc.xywh(3,15,5,1));
+
+      ctrlImagesToImport.setName("ctrlImagesToImport");
+      JScrollPane jscrollpane2 = new JScrollPane();
+      jscrollpane2.setViewportView(ctrlImagesToImport);
+      jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane2,new CellConstraints(3,5,5,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      ctrlBrowseImagesToImport.setActionCommand("_Browse");
+      ctrlBrowseImagesToImport.setName("ctrlBrowseImagesToImport");
+      ctrlBrowseImagesToImport.setText("_Select_images");
+      jpanel1.add(ctrlBrowseImagesToImport,new CellConstraints(3,6,5,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanelLayout.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsProcess.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsProcess.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsProcess.java	(revision 42196)
@@ -0,0 +1,404 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.importsymbols;
+
+import java.awt.Component;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.SymbologyManager;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.util.FolderSet;
+import org.gvsig.tools.util.impl.DefaultFolderSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ImportPictureMarkerSymbolsProcess extends AbstractMonitorableTask {
+	private static Logger logger = LoggerFactory
+			.getLogger(ImportPictureMarkerSymbolsProcess.class);
+
+	public enum YesNoAsk {
+		YES, NO, ASK
+	};
+	
+	private static final String[] SELECTION_SUFFIX = {"_sel", "_bg"};
+
+	private ApplicationManager application = null;
+	private SymbolManager symbolManager = null;
+	private SymbologyManager symbologyManager = null;
+
+	private Set<String> allowedFileExtensions = null;
+	private List<File> notCreatedSymbols = new ArrayList<File>();
+
+	private boolean quietMode = false;
+
+	private YesNoAsk overwrite = YesNoAsk.ASK;
+	private List<File> selectedImageFiles = new ArrayList<File>();
+
+	// Name of the folder in the symbols repository
+	private String targetFolderName;
+	private double symbolSize = 18;
+
+	protected ImportPictureMarkerSymbolsProcess() {
+		super(false);
+		this.application = ApplicationLocator.getManager();
+		this.setTaskName(application.translate("_Import_picture_marker_symbols"));
+	}
+
+	public Set<String> getAllowedFileExtensions() {
+		if (allowedFileExtensions == null) {
+			allowedFileExtensions = new HashSet<String>();
+			allowedFileExtensions.add("png");
+			allowedFileExtensions.add("jpg");
+			allowedFileExtensions.add("jpeg");
+			allowedFileExtensions.add("gif");
+			allowedFileExtensions.add("bmp");
+			allowedFileExtensions.add("svg");
+		}
+		return allowedFileExtensions;
+	}
+
+	public YesNoAsk getOverwrite() {
+		return overwrite;
+	}
+
+	public void setOverwrite(YesNoAsk overwrite) {
+		this.overwrite = overwrite;
+	}
+
+	public double getSymbolSize() {
+		return symbolSize;
+	}
+
+	public void setSymbolSize(double symbolSize) {
+		this.symbolSize = symbolSize;
+	}
+
+	public String getTargetFolderName() {
+		return targetFolderName;
+	}
+
+	public void setTargetFolderName(String targetFolderName) {
+		this.targetFolderName = targetFolderName;
+	}
+
+	public List<File> getSelectedImageFiles() {
+		return selectedImageFiles;
+	}
+
+	public boolean isQuietMode() {
+		return quietMode;
+	}
+
+	public void setQuietMode(boolean quietMode) {
+		this.quietMode = quietMode;
+	}
+
+	public FolderSet getSymbolsRepository() {
+		File symbolsFolder = new File(getSymbolManager().getSymbolPreferences()
+				.getSymbolLibraryPath());
+
+		FolderSet repo = new DefaultFolderSet();
+		repo.add(symbolsFolder);
+		return repo;
+	}
+
+	public List<File> getNotCreatedSymbols() {
+		return notCreatedSymbols;
+	}
+
+	public void run() {
+		SimpleTaskStatus status = null;
+		try {
+			status = (SimpleTaskStatus) this.getTaskStatus();
+			this.preProcess();
+			if (status.isCancellationRequested()) {
+				status.cancel();
+				return;
+			}
+			status.add();
+			status.setRangeOfValues(1, this.getSelectedImageFiles().size());
+			for (int i = 0; i < this.getSelectedImageFiles().size(); i++) {
+				if (status.isCancellationRequested()) {
+					status.cancel();
+					return;
+				}
+				status.setCurValue(i+1);
+				this.processItem(this.getSelectedImageFiles().get(i));
+			}
+			this.postPrecess();
+			if (status.isCancellationRequested()) {
+				status.cancel();
+				return;
+			}
+			if (!this.isQuietMode()) {
+				application.messageDialog(
+				    "_Import_of_symbols_completed",
+				    this.getName(),
+				    JOptionPane.INFORMATION_MESSAGE);
+			}
+		} catch (Exception e) {
+			logger.info("Error in process", e);
+			if (status != null) {
+				status.abort();
+			}
+			if (!this.isQuietMode()) {
+				application.message(
+						"_Import_of_symbols_aborted" + "\n\n" + e.getMessage(),
+						JOptionPane.WARNING_MESSAGE);
+				application.messageDialog(
+						"_Error_in_the_process_of_import_point_symbols_Some_symbols_cant_be_imported"
+								+ "\n\n" + e.getMessage(), this.getName(),
+						JOptionPane.WARNING_MESSAGE);
+			}
+		} finally {
+			if (status != null) {
+				// Mark process as terminate if it is running.
+				if (status.isRunning()) {
+					status.terminate();
+				}
+			}
+			application.refreshMenusAndToolBars();
+		}
+	}
+
+	private void preProcess() {
+		if (this.isQuietMode() && this.getOverwrite() == YesNoAsk.ASK) {
+			this.setOverwrite(YesNoAsk.YES);
+		} else {
+			Component dlg = application.createComponent(ImportPictureMarkerSymbolsPanel.class, this);
+			application.showDialog(dlg, this.getName());
+		}
+	}
+
+	private void processItem(File item) throws InterruptedException {
+		File source_image;
+		File source_image_sel;
+		File target_image;
+		File target_image_sel;
+		File target_symbol;
+		IPictureMarkerSymbol symbol;
+		PersistenceManager persistenceManager = ToolsLocator
+				.getPersistenceManager();
+
+		if (isSelectedImage(item)) {
+		    return;
+		}
+		
+		source_image = this.getSourceImage(item);
+		source_image_sel = this.getSourceImageSelected(item);
+		target_image = this.getTargetImage(item);
+		target_image_sel = this.getTargetImageSelected(item);
+		target_symbol = this.getTargetSymbol(item);
+
+		if (!source_image_sel.exists()) {
+			source_image_sel = source_image;
+		}
+
+		if (target_symbol.exists()) {
+			switch (this.getOverwrite()) {
+			case ASK:
+				int resp = application
+						.confirmDialog(application.translate(
+								"_Symbol_{0}_already_exists_Overwrite",
+								target_symbol.getAbsolutePath()), this
+								.getName(), JOptionPane.YES_NO_OPTION,
+								JOptionPane.QUESTION_MESSAGE);
+				if (resp == JOptionPane.NO_OPTION) {
+					return;
+				}
+				break;
+			case NO:
+				return;
+			case YES:
+				break;
+			}
+		}
+		try {
+			if( !target_image.getParentFile().exists() ) {
+				target_image.getParentFile().mkdirs();
+			}
+			copyFile(source_image, target_image);
+			copyFile(source_image_sel, target_image_sel);
+			symbol = this.getSymbologyManager().createPictureMarkerSymbol(
+					target_image.toURI().toURL(),
+					target_image_sel.toURI().toURL());
+			symbol.setSize(this.getSymbolSize());
+			symbol.setDescription(FilenameUtils.getBaseName(target_image.getName()));
+
+			PersistentState state = persistenceManager.getState(symbol);
+			FileOutputStream out = new FileOutputStream(target_symbol);
+			persistenceManager.saveState(state, out);
+		} catch (Exception e) {
+			logger.info("Can't create symbol from '" + item.getAbsolutePath()
+					+ ".", e);
+			this.notCreatedSymbols.add(item);
+		}
+	}
+
+	/**
+     * @param item
+     * @return
+     */
+    private boolean isSelectedImage(File item) {
+        
+        String ext = FilenameUtils.getExtension(item.getName());
+        String name = FilenameUtils.getBaseName(item.getName());
+
+        File orig = null;
+        String suf = null;
+        for (int i=0; i<SELECTION_SUFFIX.length; i++) {
+            suf = SELECTION_SUFFIX[i];
+            if (name.endsWith(suf)) {
+                orig = new File(item.getParentFile(), name.substring(0, name.length() - suf.length()) + "." + ext);
+                if (orig.exists()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private void postPrecess() {
+		if (!this.isQuietMode()) {
+			if (this.notCreatedSymbols.size() > 0) {
+				StringBuffer listOfFiles = new StringBuffer();
+				listOfFiles.append("\n\n");
+				for (File file : this.notCreatedSymbols) {
+					listOfFiles.append(file.getAbsolutePath());
+					listOfFiles.append("\n");
+				}
+				application.message(
+						application.translate("_many_symbols_can_be_createds")
+								+ listOfFiles.toString(),
+						JOptionPane.WARNING_MESSAGE);
+			}
+		}
+	}
+
+	private void copyFile(File source, File target) throws IOException {
+		if (target.exists()) {
+			switch (this.getOverwrite()) {
+			case ASK:
+				int resp = application
+						.confirmDialog(application.translate(
+								"_File_{0}_already_exists_Overwrite",
+								target.getAbsolutePath()), this.getName(),
+								JOptionPane.YES_NO_OPTION,
+								JOptionPane.QUESTION_MESSAGE);
+				if (resp == JOptionPane.YES_OPTION) {
+					FileUtils.copyFile(source, target);
+				}
+				break;
+			case NO:
+				break;
+			case YES:
+				FileUtils.copyFile(source, target);
+				break;
+			}
+		} else {
+			FileUtils.copyFile(source, target);
+		}
+
+	}
+
+	private File getTargetSymbol(File item) {
+		File target = FileUtils.getFile(getSymbolsRepository()
+				.asFile(), this.getTargetFolderName(),
+				FilenameUtils.getBaseName(item.getName())
+						+ this.getSymbolManager().getSymbolPreferences()
+								.getSymbolFileExtension());
+		return target;
+	}
+
+	private File getSourceImage(File item) {
+		return item;
+	}
+
+	private File getSourceImageSelected(File item) {
+		String ext = FilenameUtils.getExtension(item.getName());
+		String name = FilenameUtils.getBaseName(item.getName());
+		
+        File source = null;
+        String suf = null;
+        for (int i=0; i<SELECTION_SUFFIX.length; i++) {
+            suf = SELECTION_SUFFIX[i];
+            source = new File(item.getParentFile(), name + suf + "." + ext);
+            if (source.exists()) {
+                return source;
+            }
+        }
+
+        source = new File(item.getParentFile(), name + SELECTION_SUFFIX[0] + "." + ext);
+		return source;
+	}
+
+	private File getTargetImage(File item) {
+		File target = FileUtils.getFile(getSymbolsRepository()
+				.asFile(), this.getTargetFolderName(), item.getName());
+		return target;
+	}
+
+	private File getTargetImageSelected(File item) {
+		String ext = FilenameUtils.getExtension(item.getName());
+		String name = FilenameUtils.getBaseName(item.getName());
+		File target = FileUtils.getFile(getSymbolsRepository()
+				.asFile(), this.getTargetFolderName(), name + "_sel." + ext);
+		return target;
+	}
+
+	private SymbolManager getSymbolManager() {
+		if (symbolManager == null) {
+			symbolManager = MapContextLocator.getSymbolManager();
+		}
+		return symbolManager;
+	}
+
+	private SymbologyManager getSymbologyManager() {
+		if (symbologyManager == null) {
+			symbologyManager = SymbologyLocator.getSymbologyManager();
+		}
+		return symbologyManager;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsProcess.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanel.java	(revision 42196)
@@ -0,0 +1,341 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.importsymbols;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.swing.AbstractButton;
+import javax.swing.ComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.ListModel;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.text.JTextComponent;
+
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.symbology.app.importsymbols.ImportPictureMarkerSymbolsProcess.YesNoAsk;
+import org.gvsig.tools.util.FolderSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ImportPictureMarkerSymbolsPanel extends ImportPictureMarkerSymbolsPanelLayout {
+	
+	private static final long serialVersionUID = 1919826881234125305L;
+	
+	private static Logger logger = LoggerFactory.getLogger(ImportPictureMarkerSymbolsPanel.class);
+	private ImportPictureMarkerSymbolsProcess process = null;
+	private ApplicationManager application;
+	private List<File> selectedFiles = null;
+
+	public ImportPictureMarkerSymbolsPanel(ImportPictureMarkerSymbolsProcess process) {
+		super();
+		this.process = process;
+		this.application = ApplicationLocator.getManager();
+		initComponents();
+	}
+
+	private void closeWindow() {
+		this.setVisible(false);
+	}
+
+	private class OverwriteItem {
+		private String label;
+		private YesNoAsk value;
+
+		OverwriteItem(String label, YesNoAsk value) {
+			this.label = label;
+			this.value = value;
+		}
+		public String toString() {
+			return this.label;
+		}
+		public YesNoAsk getValue() {
+			return value;
+		}
+	}
+
+	private class FileItem {
+		private File value;
+
+		FileItem(File value) {
+			this.value = value;
+		}
+		public String toString() {
+			return this.value.getName();
+		}
+		public File getValue() {
+			return value;
+		}
+	}
+	
+	private void translate(Container container) {
+		for (int n = 0; n < container.getComponentCount(); n++) {
+			Component component = container.getComponent(n);
+			try {
+				if (component instanceof JLabel) {
+					JLabel label = (JLabel) component;
+					if( label.getText().startsWith("_") ) {
+						label.setText(application.translate(label.getText()));
+					}
+				} else if (component instanceof AbstractButton) {
+					AbstractButton button = (AbstractButton) component;
+					if( button.getText().startsWith("_") ) {
+						button.setText(application.translate(button.getText()));
+					}
+				} else if (component instanceof JTextComponent) {
+					JTextComponent text = (JTextComponent) component;
+					if( text.getText().startsWith("_") ) {
+						text.setText(application.translate(text.getText()));
+					}
+				} else if (component instanceof Container) {
+					translate((Container) component);
+				}
+			} catch (Throwable e) {
+				// Ignore if
+			} 
+		}
+	}
+	
+	private void initComponents() {
+		translate(this);
+		// ------------------------------------------------------------
+		// Image file names
+		this.ctrlBrowseImagesToImport.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				doBrowseImagesToImport();
+			}
+
+		});
+		
+		// ------------------------------------------------------------
+		// Default symbol size
+		this.ctrlDefaultSize.setValue(this.process.getSymbolSize());
+	
+		// ------------------------------------------------------------
+		// Target folder name
+		if( this.process.getTargetFolderName()!=null ) {
+			this.ctrltFolderName.setText(this.process.getTargetFolderName());
+		}
+		
+		// ------------------------------------------------------------
+		// List of existing target folders 
+		FolderSet repo = this.process.getSymbolsRepository();
+		final File[] folders = repo.listFiles(new FilenameFilter() {
+			public boolean accept(File arg0, String arg1) {
+				return arg0.isDirectory(); 
+			}
+		});
+		final List<FileItem> folderItems = new ArrayList<FileItem>();
+		for( int i=0; i<folders.length; i ++ ) {
+			folderItems.add(new FileItem(folders[i]));
+		}
+		ctrlExistingFolders.setModel(new ListModel() {
+			public void removeListDataListener(ListDataListener arg0) {
+				// Do nothing
+			}
+			public int getSize() {
+				return folderItems.size();
+			}
+			public Object getElementAt(int arg0) {
+				return folderItems.get(arg0);
+						
+			}
+			public void addListDataListener(ListDataListener arg0) {
+				// Do nothing
+			}
+		});
+		this.ctrlExistingFolders.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(ListSelectionEvent arg0) {
+				if( !arg0.getValueIsAdjusting() ) {
+					try {
+						File file = ((FileItem)ctrlExistingFolders.getSelectedValue()).getValue();
+						ctrltFolderName.setText(file.getName());
+					} catch(Exception ex) {
+						logger.info("Error getting selected filename",ex);
+					}
+				}
+			}
+		});
+		
+		// ------------------------------------------------------------
+		// Overwrite options
+		final OverwriteItem[] overwriteItems = new OverwriteItem[] {
+				new OverwriteItem(application.translate("_Ask_to_the_user"), YesNoAsk.ASK),
+				new OverwriteItem(application.translate("_Dont_overwrite"), YesNoAsk.NO),
+				new OverwriteItem(application.translate("_Overwrite_always"), YesNoAsk.YES)
+		};
+		this.ctrlOverwriteOptions.setModel(new ComboBoxModel() {
+			OverwriteItem selected = null;
+			public void removeListDataListener(ListDataListener arg0) {
+				// Do nothing
+			}
+			public int getSize() {
+				return overwriteItems.length;
+			}
+			public Object getElementAt(int arg0) {
+				return overwriteItems[arg0];
+			}
+			public void addListDataListener(ListDataListener arg0) {
+				// Do nothing
+			}
+			public void setSelectedItem(Object arg0) {
+				this.selected = (OverwriteItem) arg0;
+			}
+			public Object getSelectedItem() {
+				return this.selected;
+			}
+		});
+		this.ctrlOverwriteOptions.setSelectedIndex(0);
+		
+		// ------------------------------------------------------------
+		// Import button
+		this.ctrlImport.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				doImport();
+			}
+		});
+		
+		// ------------------------------------------------------------
+		// Cancel button
+		this.ctrlCancel.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				doCancel();
+			}
+		});
+
+
+	}
+
+	private void doImport() {
+		if( this.ctrltFolderName.getText().trim().length()==0 ) {
+			application.messageDialog(
+					application.translate("_Should_select_a_folder_name"),
+					this.process.getName(), 
+					JOptionPane.WARNING_MESSAGE);
+			return;
+		}
+		if( this.selectedFiles==null || this.selectedFiles.size()==0 ) {
+			application.messageDialog(
+					application.translate("_Should_select_the_images_to_import"),
+					this.process.getName(), 
+					JOptionPane.WARNING_MESSAGE);
+			return;
+		}
+		this.process.setTargetFolderName(this.ctrltFolderName.getText());
+		this.process.setSymbolSize( (( SpinnerNumberModel)this.ctrlDefaultSize.getModel()).getNumber().doubleValue());
+		this.process.setOverwrite( ((OverwriteItem)this.ctrlOverwriteOptions.getSelectedItem()).getValue() );
+		this.process.getSelectedImageFiles().clear();
+		this.process.getSelectedImageFiles().addAll(selectedFiles);
+		this.closeWindow();
+	}
+
+	private void doCancel() {
+		this.process.cancelRequest();
+		this.closeWindow();
+	}
+
+	private List<File> fileChooser(String title, boolean multiselect, FileFilter filter) {
+		JFileChooser fc = new JFileChooser();
+		fc.setFileFilter(filter);
+		fc.setMultiSelectionEnabled(multiselect);
+		int r = fc.showDialog(application.getRootComponent(),title);
+		if( r == JFileChooser.APPROVE_OPTION ) {
+			return Arrays.asList(fc.getSelectedFiles()); 
+		}
+		return null;
+	}
+	
+	private void doBrowseImagesToImport() {
+		List<File> files = fileChooser(application.translate("_Select_the_images"), true, new FileFilter() {
+			public String getDescription() {
+				StringBuffer buffer = new StringBuffer();
+				List<String> extensions = new ArrayList<String>();
+				extensions.addAll(process.getAllowedFileExtensions());
+				int l=extensions.size();
+				if( l>=2 ) {
+					for( int i=0; i<l-2; i++) {
+						buffer.append(extensions.get(i));
+						buffer.append(", ");
+					}
+					buffer.append( extensions.get(l-2));
+					buffer.append(" & ");
+					buffer.append( extensions.get(l-1));
+				} else {
+					buffer.append( extensions.get(0));
+				}
+				buffer.append(" ");
+				buffer.append(application.translate("_Images"));
+				return buffer.toString();
+			}
+
+			public boolean accept(File f) {
+				if (f.isDirectory()) {
+					return true;
+				}
+				String extension = FilenameUtils.getExtension(f.getName()).toLowerCase(); 
+				return extension != null && process.getAllowedFileExtensions().contains(extension);
+			}
+		});
+		if( files != null ) {
+			this.selectedFiles = files;
+			final List<FileItem> folderItems = new ArrayList<FileItem>();
+			for( int i=0; i<files.size(); i ++ ) {
+				folderItems.add(new FileItem(files.get(i)));
+			}
+			ctrlImagesToImport.setModel(new ListModel() {
+				public void removeListDataListener(ListDataListener arg0) {
+					// Do nothing
+				}
+				public int getSize() {
+					return folderItems.size();
+				}
+				public Object getElementAt(int arg0) {
+					return folderItems.get(arg0);
+							
+				}
+				public void addListDataListener(ListDataListener arg0) {
+					// Do nothing
+				}
+			});
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/src/main/java/org/gvsig/symbology/app/importsymbols/ImportPictureMarkerSymbolsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/pom.xml	(revision 42196)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.app.importsymbols</artifactId>
+  <packaging>jar</packaging>
+  <name>Tools: Import marker symbols tool</name>
+  <description>Importador de simbolos puntuales a partir de las imagenes que existan en una carpeta</description>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology.app</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    <gvsig.package.info.categories>Symbology,Import And Export</gvsig.package.info.categories>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:54 CEST 2015
+buildNumber=2154

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.importsymbols
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:54 CEST 2015
+buildNumber=2154

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/SymbolInstallerProviderLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/SymbolInstallerProviderLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/SymbolInstallerProviderLibrary.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller;
+
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.symbology.app.symbolinstaller.execution.SymbolInstallerExecutionProviderFactory;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.service.spi.ProviderManager;
+
+public class SymbolInstallerProviderLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(InstallerLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        ProviderManager providerManager =
+            InstallerProviderLocator.getProviderManager();
+
+        providerManager
+            .addProviderFactory(new SymbolInstallerExecutionProviderFactory());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/SymbolInstallerProviderLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProviderFactory.java	(revision 42196)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller.execution;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.service.spi.AbstractProviderFactory;
+import org.gvsig.tools.service.spi.Provider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+public class SymbolInstallerExecutionProviderFactory extends
+    AbstractProviderFactory {
+
+    public static final String PROVIDER_NAME = "symbols";
+    public static final String PROVIDER_DESCRIPTION = "";
+
+    private DynClass dynclass;
+
+    @Override
+    protected DynClass createParametersDynClass() {
+        if (dynclass == null) {
+            initialize();
+        }
+        return dynclass;
+    }
+
+    @Override
+    protected Provider doCreate(DynObject parameters, ProviderServices services) {
+        return new SymbolInstallerExecutionProvider(services);
+    }
+
+    public void initialize() {
+        if (dynclass == null) {
+            DynObjectManager dynObjectManager =
+                ToolsLocator.getDynObjectManager();
+            dynclass =
+                dynObjectManager.createDynClass(PROVIDER_NAME,
+                    PROVIDER_DESCRIPTION);
+            dynObjectManager.add(dynclass);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExtension.java	(revision 42196)
@@ -0,0 +1,76 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller.execution;
+
+import java.io.File;
+import java.util.Locale;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.ToolsWindowManager;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.symbology.app.symbolinstaller.creation.DefaultMakeSymbolPackageWizard;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class SymbolInstallerExtension extends Extension {
+
+    public void initialize() {
+
+        IconThemeHelper.registerIcon("symbol-installer", "wizard-make-symbol-package", this);
+    }
+
+    @Override
+    public void postInitialize() {
+        InstallerManager im = InstallerLocator.getInstallerManager();
+        
+        SymbolManager sym_man = MapContextLocator.getSymbolManager();
+        File symbolsDirectory =
+            new File(sym_man.getSymbolPreferences().getSymbolLibraryPath());
+
+        im.setDefaultLocalAddonRepository(symbolsDirectory,SymbolInstallerExecutionProviderFactory.PROVIDER_NAME);
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+
+    public void execute(String actionCommand) {
+        if (actionCommand.equals("Create_Package")) {
+            DefaultMakeSymbolPackageWizard wizard =
+                new DefaultMakeSymbolPackageWizard();
+
+            WindowManager windowManager = new ToolsWindowManager();
+            windowManager.showWindow(wizard, Messages.getText("_Create_package_symbols"),
+                WindowManager.MODE.DIALOG);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProvider.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller.execution;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.lib.spi.InstallPackageProviderServices;
+import org.gvsig.installer.lib.spi.InstallerProviderLocator;
+import org.gvsig.installer.lib.spi.InstallerProviderManager;
+import org.gvsig.installer.lib.spi.execution.InstallPackageProvider;
+import org.gvsig.tools.service.spi.AbstractProvider;
+import org.gvsig.tools.service.spi.ProviderServices;
+
+public class SymbolInstallerExecutionProvider extends AbstractProvider
+    implements InstallPackageProvider {
+
+    public SymbolInstallerExecutionProvider(ProviderServices providerServices) {
+        super(providerServices);
+    }
+
+    public class InstallerSymbolsDirectoryNotFoundException extends
+        InstallPackageServiceException {
+
+        private static final long serialVersionUID = 4416143986837955880L;
+        private static final String message = "Symbols directory not found";
+        private static final String KEY = "symbols_directory_not_found";
+
+        public InstallerSymbolsDirectoryNotFoundException() {
+            super(message, KEY, serialVersionUID);
+        }
+    }
+
+    public void install(File applicationDirectory, InputStream inputStream,
+        PackageInfo packageInfo) throws InstallPackageServiceException {
+
+        
+        SymbolManager sym_man = MapContextLocator.getSymbolManager();
+        File symbolsDirectory =
+            new File(sym_man.getSymbolPreferences().getSymbolLibraryPath());
+
+        try {
+            if (!symbolsDirectory.exists()) {
+                throw new InstallerSymbolsDirectoryNotFoundException();
+            }
+            InstallerProviderManager installerProviderManager =
+                InstallerProviderLocator.getProviderManager();
+            InstallPackageProviderServices installerProviderServices =
+                installerProviderManager.createInstallerProviderServices();
+
+            installerProviderServices.decompress(inputStream, symbolsDirectory);
+
+        } catch (Exception e) {
+            throw new InstallPackageServiceException(e);
+        }
+    }
+
+    public void installLater(File applicationDirectory,
+        InputStream inputStream, PackageInfo packageInfo)
+        throws InstallPackageServiceException, IOException {
+        // TODO Auto-generated method stub
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolInstallerExecutionProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/panel/SelectSymbolsFolderInstallPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/panel/SelectSymbolsFolderInstallPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/panel/SelectSymbolsFolderInstallPanel.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller.creation.panel;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListSelectionModel;
+
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.i18n.Messages;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class SelectSymbolsFolderInstallPanel extends JPanel {
+
+    private static final long serialVersionUID = 948949741432221418L;
+
+    private JList folderJList;
+    private File symbolsDirectory = null;
+    private ArrayList<String> folders = null;
+
+    public SelectSymbolsFolderInstallPanel() {
+        super();
+        initComponents();
+    }
+
+    private String getText(String string) {
+        return Messages.getText(string);
+    }
+
+    private void initComponents() {
+
+        JLabel symbolsFolderLabel =
+            new JLabel(
+                getText("_select_the_folder_to_create_the_package_with")
+                    + ":");
+
+        SymbolManager sym_man = MapContextLocator.getSymbolManager();
+        symbolsDirectory =
+            new File(sym_man.getSymbolPreferences().getSymbolLibraryPath());
+
+        String[] itemsArray = symbolsDirectory.list();
+        folders = new ArrayList<String>();
+
+        for (int i = 0; i < itemsArray.length; i++) {
+            File f = new File(symbolsDirectory, itemsArray[i]);
+            if (f.isDirectory()) {
+                folders.add(itemsArray[i]);
+            }
+        }
+
+        folderJList = new JList(folders.toArray());
+        folderJList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+        // TODO: actionEvent should be added
+        folderJList.setSelectedIndex(0);
+
+        setLayout(new BorderLayout(2, 2));
+        setBounds(2, 2, 2, 2);
+
+        add(symbolsFolderLabel, BorderLayout.NORTH);
+
+        JScrollPane scroller = new JScrollPane(folderJList);
+
+        add(scroller);
+    }
+
+    public File getSelectedFolder() {
+        String folderName = folders.get(folderJList.getSelectedIndex());
+        return new File(symbolsDirectory + "/" + folderName.toString());
+    }
+
+    public void setSelectedFolder(File selectedFile) {
+        folderJList.setSelectedValue(selectedFile, true);
+    }
+
+    public void actionPerformed(ActionEvent arg0) {
+        // TODO Auto-generated method stub
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/panel/SelectSymbolsFolderInstallPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/OutputWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/OutputWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/OutputWizard.java	(revision 42196)
@@ -0,0 +1,144 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.symbology.app.symbolinstaller.creation.wizard;
+
+import java.io.File;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.creation.JOutputPanel;
+import org.gvsig.symbology.app.symbolinstaller.creation.DefaultMakeSymbolPackageWizard;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class OutputWizard implements OptionPanel {
+
+    private JOutputPanel outputPanel;
+    private PackageInfo packageInfo;
+
+    // private DefaultMakeSymbolPackageWizard wizard;
+
+    // private static final Logger logger =
+    // LoggerFactory.getLogger(OutputWizard.class);
+
+    public OutputWizard(DefaultMakeSymbolPackageWizard wizard,
+        PackageInfo packageInfo) {
+        super();
+        // this.wizard = wizard;
+        outputPanel =
+            SwingInstallerLocator.getSwingInstallerManager()
+                .createOutputPanel();
+        this.packageInfo = packageInfo;
+        this.outputPanel.setPackageInfo(packageInfo);
+    }
+
+    public JPanel getJPanel() {
+        return this.outputPanel;
+    }
+
+    private String getText(String msg) {
+        return Messages.getText(msg);
+    }
+
+    public String getPanelTitle() {
+        return getText("_output_options");
+    }
+
+    public void lastPanel() {
+
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        // try {
+        File file = outputPanel.getPackageFile();
+        File filePath = new File(file.getParent());
+        if (!filePath.exists()) {
+            JOptionPane.showMessageDialog(outputPanel,
+                getText("_the_package_file_folder_does_not_exist") + ": "
+                    + filePath);
+            throw new NotContinueWizardException("", null, false);
+        }
+        if (outputPanel.isCreatePackageIndex()) {
+            URL url = outputPanel.getDownloadURL();
+            if (url == null) {
+                throw new NotContinueWizardException("", null, false);
+            }
+            File indexFile = outputPanel.getPackageIndexFile();
+            File indexFilePath = new File(indexFile.getParent());
+            if (!indexFilePath.exists()) {
+                JOptionPane.showMessageDialog(outputPanel,
+                    getText("_the_package_index_file_folder_does_not_exist")
+                        + ": " + indexFilePath);
+                throw new NotContinueWizardException("", null, false);
+            }
+        }
+        // } catch (FileNotFoundException e) {
+        // logger.info(
+        // getText("create_output_file_exception"), e);
+        // JOptionPane.showMessageDialog(wizard,
+        // getText("create_output_file_exception"));
+        // }
+    }
+
+    public void updatePanel() {
+        outputPanel.setPackageFile(getDefaultPackageBundleFile());
+        outputPanel.setPackageIndexFile(getDefaultPackageIndexBundleFile());
+    }
+
+    private File getDefaultPackageBundleFile() {
+        PluginsManager manager = PluginsLocator.getManager();
+        File installsFolder = manager.getInstallFolder();
+        String fileName =
+            InstallerLocator.getInstallerManager().getPackageFileName(
+                packageInfo);
+        return new File(installsFolder, fileName);
+    }
+
+    private File getDefaultPackageIndexBundleFile() {
+        PluginsManager manager = PluginsLocator.getManager();
+        File installsFolder = manager.getInstallFolder();
+        String fileName =
+            InstallerLocator.getInstallerManager().getPackageIndexFileName(
+                packageInfo);
+        return new File(installsFolder, fileName);
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/OutputWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/ProgressWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/ProgressWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/ProgressWizard.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+package org.gvsig.symbology.app.symbolinstaller.creation.wizard;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePackageService;
+import org.gvsig.installer.lib.api.creation.MakePackageServiceException;
+import org.gvsig.installer.swing.api.JProgressPanel;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.creation.JOutputPanel;
+import org.gvsig.symbology.app.symbolinstaller.creation.DefaultMakeSymbolPackageWizard;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class ProgressWizard implements OptionPanel {
+
+    private static final Logger logger = LoggerFactory.getLogger(ProgressWizard.class);
+    private DefaultMakeSymbolPackageWizard wizard;
+    private PackageInfo packageInfo;
+    private JOutputPanel outputPanel;
+    private JProgressPanel progressPanel;
+
+    public ProgressWizard(DefaultMakeSymbolPackageWizard wizard,
+        PackageInfo packageInfo, JOutputPanel outputPanel) {
+        super();
+        this.wizard = wizard;
+        this.packageInfo = packageInfo;
+        this.outputPanel = outputPanel;
+        progressPanel =
+            SwingInstallerLocator.getSwingInstallerManager()
+                .createProgressPanel();
+    }
+
+    private String getText(String msg) {
+        return Messages.getText(msg);
+    }
+
+    public JPanel getJPanel() {
+        return this.progressPanel;
+    }
+
+    public String getPanelTitle() {
+        return Messages.getText("_Installer_progress");
+    }
+
+    public void lastPanel() {
+        wizard.setFinishButtonEnabled(false);
+        wizard.setCancelButtonEnabled(true);
+    }
+
+    public void nextPanel() {
+        // Do nothing
+    }
+
+    public void updatePanel() {
+
+        OutputStream outputStream =
+            openFileOutputStream(outputPanel.getPackageFile());
+        if (outputStream == null) {
+            return;
+        }
+        OutputStream indexOutputStream = null;
+        if (outputPanel.isCreatePackageIndex()) {
+            indexOutputStream =
+                openFileOutputStream(outputPanel.getPackageIndexFile());
+            if (indexOutputStream == null) {
+                return;
+            }
+        }
+
+        wizard.setFinishButtonEnabled(false);
+        wizard.setCancelButtonEnabled(false);
+
+        SimpleTaskStatus taskStatus =
+            ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(
+                packageInfo.getName());
+
+        this.progressPanel.bind(taskStatus);
+
+        try {
+
+            MakePackageService makePackageService =
+                InstallerLocator.getInstallerManager().createMakePackage(
+                    wizard.getSymbolFolderToInsertInPackage(), packageInfo);
+
+            taskStatus.message(getText("_Compressing"));
+
+            makePackageService.preparePackage();
+            makePackageService.createPackage(outputStream);
+            if (indexOutputStream != null) {
+                taskStatus.message(getText("_Creating_index"));
+                makePackageService.createPackageIndex(outputPanel
+                    .getDownloadURL(), indexOutputStream);
+            }
+            taskStatus.terminate();
+
+            // Set the finished text
+            taskStatus.message(getText("_Finished"));
+        } catch (MakePackageServiceException e) {
+            logger.info("Error while creating package.", e);
+            JOptionPane.showMessageDialog(null, getText("_cant_create_the_package")
+                + "\n\n" + e.getLocalizedMessageStack(),
+                getText("_create_package"), JOptionPane.ERROR_MESSAGE);
+        }
+        wizard.setFinishButtonEnabled(true);
+        wizard.setCancelButtonEnabled(false);
+    }
+
+    private OutputStream openFileOutputStream(File file) {
+        OutputStream os;
+
+        try {
+            os = new FileOutputStream(file);
+        } catch (FileNotFoundException e1) {
+            JOptionPane.showMessageDialog(null,
+                getText("_cant_create_the_package") + " (" + file + ").",
+                getText("_create_package"), JOptionPane.WARNING_MESSAGE);
+            return null;
+        }
+        return os;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/ProgressWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/PackageInfoWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/PackageInfoWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/PackageInfoWizard.java	(revision 42196)
@@ -0,0 +1,112 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller.creation.wizard;
+
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.creation.JPackageInfoPanel;
+import org.gvsig.symbology.app.symbolinstaller.creation.DefaultMakeSymbolPackageWizard;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class PackageInfoWizard implements OptionPanel {
+
+    private JPackageInfoPanel packageInfoPanel;
+
+    private PackageInfo packageInfo;
+
+    // private DefaultMakeSymbolPackageWizard wizard;
+
+    public PackageInfoWizard(DefaultMakeSymbolPackageWizard wizard,
+        PackageInfo packageInfo) {
+        super();
+        // this.wizard = wizard;
+        this.packageInfoPanel =
+            SwingInstallerLocator.getSwingInstallerManager()
+                .createPackageInfoPanel();
+        this.packageInfo = packageInfo;
+    }
+
+    private String getText(String msg) {
+        return Messages.getText(msg);
+    }
+
+    public JPanel getJPanel() {
+        return this.packageInfoPanel;
+    }
+
+    public String getPanelTitle() {
+        return getText("_plugin_description");
+    }
+
+    public void lastPanel() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+        if (!this.packageInfoPanel.validatePanel()) {
+            throw new NotContinueWizardException("", null, false);
+        }
+        this.packageInfoPanel.panelToPackageInfo(packageInfo);
+    }
+
+    public void updatePanel() {
+        this.packageInfoPanel.packageInfoToPanel(packageInfo);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/PackageInfoWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/SelectSymbolsFolderInstallWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/SelectSymbolsFolderInstallWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/SelectSymbolsFolderInstallWizard.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller.creation.wizard;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
+import org.gvsig.gui.beans.wizard.panel.OptionPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.symbology.app.symbolinstaller.creation.DefaultMakeSymbolPackageWizard;
+import org.gvsig.symbology.app.symbolinstaller.creation.panel.SelectSymbolsFolderInstallPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class SelectSymbolsFolderInstallWizard implements OptionPanel {
+
+    private SelectSymbolsFolderInstallPanel panel = null;
+    // private PackageInfo packageInfo;
+    DefaultMakeSymbolPackageWizard wizard;
+
+    /**
+     * @param defaultMakeSymbolPackageWizard
+     * @param packageInfo
+     */
+    public SelectSymbolsFolderInstallWizard(
+        DefaultMakeSymbolPackageWizard defaultMakeSymbolPackageWizard,
+        PackageInfo packageInfo) {
+        super();
+        wizard = defaultMakeSymbolPackageWizard;
+        panel = new SelectSymbolsFolderInstallPanel();
+        // this.packageInfo = packageInfo;
+    }
+
+    public JPanel getJPanel() {
+        return panel;
+    }
+
+    public void lastPanel() {
+
+    }
+
+    public void nextPanel() throws NotContinueWizardException {
+
+        wizard.setSymbolFolderToInsertInPackage(panel.getSelectedFolder());
+    }
+
+    public void updatePanel() {
+
+    }
+
+    public String getPanelTitle() {
+        return getText("_select_symbol_folder");
+    }
+
+    private String getText(String msg) {
+        return Messages.getText(msg);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/wizard/SelectSymbolsFolderInstallWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/DefaultMakeSymbolPackageWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/DefaultMakeSymbolPackageWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/DefaultMakeSymbolPackageWizard.java	(revision 42196)
@@ -0,0 +1,161 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller.creation;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.io.File;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.gui.beans.wizard.WizardPanelWithLogo;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.creation.JOutputPanel;
+import org.gvsig.symbology.app.symbolinstaller.WizardListenerAdapter;
+import org.gvsig.symbology.app.symbolinstaller.creation.wizard.OutputWizard;
+import org.gvsig.symbology.app.symbolinstaller.creation.wizard.PackageInfoWizard;
+import org.gvsig.symbology.app.symbolinstaller.creation.wizard.ProgressWizard;
+import org.gvsig.symbology.app.symbolinstaller.creation.wizard.SelectSymbolsFolderInstallWizard;
+import org.gvsig.symbology.app.symbolinstaller.execution.SymbolInstallerExecutionProviderFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.locator.LocatorException;
+
+public class DefaultMakeSymbolPackageWizard extends JPanel implements
+    WizardPanel {
+
+    
+    private static final long serialVersionUID = 9205891710214122265L;
+    private WizardPanelWithLogo wizardPanelWithLogo = null;
+
+    // Wizards
+    private PackageInfoWizard packageInfoWizard = null;
+    private ProgressWizard progressWizard = null;
+    private OutputWizard outputWizard = null;
+    private SelectSymbolsFolderInstallWizard selectSymbolsFolderInstallWizard =
+        null;
+    private PackageInfo packageInfo = null;
+
+    private File symbolFolderToInsertInPackage = null;
+
+    private WizardListenerAdapter wizardListenerAdapter = null;
+
+    public DefaultMakeSymbolPackageWizard() throws LocatorException {
+        wizardPanelWithLogo = new WizardPanelWithLogo(); //IconThemeHelper.getImageIcon("wizard-make-symbol-package"));
+
+        setCancelButtonEnabled(true);
+        setFinishButtonEnabled(false);
+
+        // WizardPanel wizardPanel = this;
+
+        packageInfo =
+        ToolsLocator.getPackageManager().createPackageInfo();
+        packageInfo
+            .setType(SymbolInstallerExecutionProviderFactory.PROVIDER_NAME);
+
+        selectSymbolsFolderInstallWizard =
+            new SelectSymbolsFolderInstallWizard(this, packageInfo);
+        packageInfoWizard = new PackageInfoWizard(this, packageInfo);
+        outputWizard = new OutputWizard(this, packageInfo);
+        progressWizard =
+            new ProgressWizard(this, packageInfo, (JOutputPanel) (outputWizard
+                .getJPanel()));
+
+        addWizards();
+
+        // Adding the listeners
+        wizardPanelWithLogo.setWizardListener(this);
+
+        this.setLayout(new BorderLayout());
+        this.add(wizardPanelWithLogo, BorderLayout.CENTER);
+        this.setPreferredSize(new Dimension(700, 550));
+    }
+
+    private void addWizards() {
+        wizardPanelWithLogo.addOptionPanel(selectSymbolsFolderInstallWizard);
+        wizardPanelWithLogo.addOptionPanel(packageInfoWizard);
+        wizardPanelWithLogo.addOptionPanel(outputWizard);
+        wizardPanelWithLogo.addOptionPanel(progressWizard);
+    }
+
+    public void setNextButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setNextButtonEnabled(isEnabled);
+    }
+
+    public void setCancelButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setCancelButtonEnabled(isEnabled);
+    }
+
+    public void setFinishButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setFinishButtonEnabled(isEnabled);
+    }
+
+    public void setBackButtonEnabled(boolean isEnabled) {
+        wizardPanelWithLogo.setBackButtonEnabled(isEnabled);
+    }
+
+    public WizardPanelActionListener getWizardPanelActionListener() {
+        if (wizardListenerAdapter == null) { // && (getWizardActionListener() !=
+            // null))) {
+            return new WizardListenerAdapter(this);
+        }
+        return wizardListenerAdapter;
+    }
+
+    public void setWizardPanelActionListener(
+        WizardPanelActionListener wizardActionListener) {
+        // TODO Auto-generated method stub
+        // this.wizardListenerAdapter = wizardActionListener;
+        throw new RuntimeException("Esto falta por ver que hace");
+    }
+
+    public void setSymbolFolderToInsertInPackage(File file) {
+        symbolFolderToInsertInPackage = file;
+        
+        File pinfo = new File(file, "package.info");
+        if (pinfo.exists()) {
+            try {
+                ToolsLocator.getPackageManager().readPacakgeInfo(
+                    (org.gvsig.tools.packageutils.PackageInfo) packageInfo, pinfo);
+                packageInfo
+                    .setType(SymbolInstallerExecutionProviderFactory.PROVIDER_NAME);
+            } catch (Exception e) {
+                /*
+                 * Do nothing, packageInfo remains empty
+                 * form will be empty
+                 * 
+                 */
+            }
+        }
+        
+        
+    }
+
+    public File getSymbolFolderToInsertInPackage() {
+        return symbolFolderToInsertInPackage;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/creation/DefaultMakeSymbolPackageWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/WizardListenerAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/WizardListenerAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/WizardListenerAdapter.java	(revision 42196)
@@ -0,0 +1,53 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.symbology.app.symbolinstaller;
+
+import org.gvsig.gui.beans.wizard.WizardPanel;
+import org.gvsig.gui.beans.wizard.WizardPanelActionListener;
+import org.gvsig.symbology.app.symbolinstaller.creation.DefaultMakeSymbolPackageWizard;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class WizardListenerAdapter implements WizardPanelActionListener {
+
+    private DefaultMakeSymbolPackageWizard installerWizardPanel;
+
+    public WizardListenerAdapter(
+        DefaultMakeSymbolPackageWizard installerWizardPanel) {
+        super();
+        this.installerWizardPanel = installerWizardPanel;
+    }
+
+    public void cancel(WizardPanel wizardPanel) {
+        installerWizardPanel.setVisible(false);
+    }
+
+    public void finish(WizardPanel wizardPanel) {
+        installerWizardPanel.setVisible(false);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/WizardListenerAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,5 @@
+Create_package=Empaquetar simbolog�a
+_Browse_symbols=Visualizar s�mbolos
+_Import_images_from_folder_as_picture_marker_symbols=Crear s�mbolos con im�genes de un directorio
+Create_a_symbols_package_from_symbols_that_exist_in_a_folder=Crea un paquete de s�mbolos existentes en un directorio
+Symbols=Simbolog�a
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,5 @@
+Create_package=Create symbology package
+_Browse_symbols=Browse symbols
+_Import_images_from_folder_as_picture_marker_symbols=Create marker symbols using pictures from folder
+Create_a_symbols_package_from_symbols_that_exist_in_a_folder=Create a symbols package with symbols from a folder
+Symbols=Symbology
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app.mainplugin"/>
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.symbology.app.symbolinstaller.execution.SymbolInstallerExtension"
+			description=""
+			active="true">
+			<menu text="tools/Symbols/Create_package"
+				  tooltip="Create_a_symbols_package_from_symbols_that_exist_in_a_folder"
+				  action-command="Create_Package" />
+				  	
+		</extension>
+	</extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/images/symbol-installer/wizard-make-symbol-package.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/images/symbol-installer/wizard-make-symbol-package.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.symbology.app.symbolinstaller.SymbolInstallerProviderLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/pom.xml	(revision 42196)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.app.symbolinstaller</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <description>Plugin that allows to install packages of symbols</description>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.symbology.app</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.symbology.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>       
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.spi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jwizardcomponent</groupId>
+      <artifactId>jwizardcomponent</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.name>Tools: Install marker symbols tool</gvsig.package.info.name>
+      <gvsig.package.info.categories>Symbology,Addon Management</gvsig.package.info.categories>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.symbology.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.symbology.app.importsymbols</module>
+    <module>org.gvsig.symbology.app.symbolinstaller</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.symbology.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/test/java/org/gvsig/centerviewpoint/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/test/java/org/gvsig/centerviewpoint/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/test/java/org/gvsig/centerviewpoint/AllTests.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.centerviewpoint;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for com.iver.gvsig.centerviewpoint");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/test/java/org/gvsig/centerviewpoint/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app.mainplugin"/>
+		<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.centerviewpoint.CenterViewToPointExtension"
+			description="Extensi�n que permite hacer zooms en funci�n de un par de coordenadas introducidas por el usuario."
+			active="true">
+			
+			<action 
+                name="view-navigation-center-view-to-point"
+                label="Centrar_la_Vista_sobre_un_punto" 
+                tooltip="Centrar_la_Vista_sobre_un_punto" 
+                position="650109100" 
+                action-command="view-navigation-center-view-to-point"
+                icon="view-navigation-center-view-to-point"
+                accelerator=""
+                />
+			
+			<menu
+			    name="view-navigation-center-view-to-point" 
+			    text="View/Navigation/Centrar_la_Vista_sobre_un_punto"
+			    />
+			    
+			<tool-bar name="view_navigation">
+				<action-tool name="view-navigation-center-view-to-point"/>
+			</tool-bar>
+			
+		</extension>
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-center-view-to-point.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-center-view-to-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+Centrar_la_Vista_sobre_un_punto=Center view to point
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Select the layers you want to get information from
+formato_de_numero_incorrecto=Incorrect number format
+no_hay_ninguna_capa_seleccionada=No layer has been selected
+Vista=View

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+Centrar_la_Vista_sobre_un_punto=Centrar a vista sobre un punto
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar as capas das que desexe obter informaci\u00f3n
+formato_de_numero_incorrecto=
+no_hay_ninguna_capa_seleccionada=
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+Centrar_la_Vista_sobre_un_punto=Centrar la Vista sobre un punt
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Ha de seleccionar les capes de les quals vol obtindre informaci\u00f3
+formato_de_numero_incorrecto=Format de n\u00famero incorrecte
+no_hay_ninguna_capa_seleccionada=
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+Centrar_la_Vista_sobre_un_punto=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=
+formato_de_numero_incorrecto=
+no_hay_ninguna_capa_seleccionada=
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+Centrar_la_Vista_sobre_un_punto=Centruj pohled na st\u0159ed
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Ozna\u010dte vrstvy, ze kter\u00fdch chcete z\u00edskat informace
+formato_de_numero_incorrecto=Neplatn\u00e9 \u010d\u00edslo form\u00e1tu
+no_hay_ninguna_capa_seleccionada=Nebyla vybr\u00e1na \u017e\u00e1dn\u00e1 vrstva
+Vista=Pohled

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+Centrar_la_Vista_sobre_un_punto=Centrer la vue sur un point
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Vous devez s\u00e9lectionner les couches pour lesquelles vous souhaitez obtenir des informations.
+formato_de_numero_incorrecto=Format incorrect
+no_hay_ninguna_capa_seleccionada=
+Vista=Vue

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1,8 @@
+#Translations for language [de]
+#Wed Oct 08 17:44:19 CEST 2008
+Centrar_la_Vista_sobre_un_punto=View auf Koordinate zentrieren
+com.iver.cit.gvsig.Herramientas=
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=W\u00e4hlen Sie die Ebenen aus, von denen Sie Informationen bekommen wollen
+formato_de_numero_incorrecto=Ung\u00fcltiges Zahlenformat
+no_hay_ninguna_capa_seleccionada=Es wurde kein Layer ausgew\u00e4hlt
+Vista=Ansicht

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+Centrar_la_Vista_sobre_un_punto=Zentratu bista puntu batekiko
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Geruzak hautatu behar dituzu horien gaineko informazioa jasotzeko.
+formato_de_numero_incorrecto=Zenbakiaren formatua okerra da
+no_hay_ninguna_capa_seleccionada=
+Vista=Bista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+Centrar_la_Vista_sobre_un_punto=Centra la visuale su un punto
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Selezionare i layers di cui si desiderano informazioni.
+formato_de_numero_incorrecto=Formato del numero errato.
+no_hay_ninguna_capa_seleccionada=Nessun layer selezionato
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+Centrar_la_Vista_sobre_un_punto=Centrar la vista sobre un punto
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=Debe seleccionar las capas de las que quiera obtener informaci\u00f3n.
+formato_de_numero_incorrecto=Formato de n\u00famero incorrecto.
+no_hay_ninguna_capa_seleccionada=No hay ninguna capa seleccionada
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 42196)
@@ -0,0 +1,7 @@
+#Translations for language [en]
+#Fri Nov 03 13:14:56 CET 2006
+Centrar_la_Vista_sobre_un_punto=\u5411\u4e00\u70b9\u96c6\u4e2d
+debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion=\u60a8\u5fc5\u987b\u9009\u5b9a\u60a8\u8981\u8bfb\u53d6\u4fe1\u606f\u7684\u56fe\u5c42
+formato_de_numero_incorrecto=\u6570\u5b57\u683c\u5f0f\u65e0\u6548
+no_hay_ninguna_capa_seleccionada=\u672a\u9009\u5b9a\u56fe\u5c42
+Vista=\u89c6\u56fe

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/gui/InputCoordinatesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/gui/InputCoordinatesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/gui/InputCoordinatesPanel.java	(revision 42196)
@@ -0,0 +1,345 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.centerviewpoint.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.util.prefs.Preferences;
+
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.project.documents.view.toolListeners.InfoListener;
+import org.gvsig.centerviewpoint.CenterViewToPointExtension;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+
+
+/**
+ * The InputCoordinatesPanel class creates a JPanel where the
+ * user can input the coordinates of the point of reference
+ * for center the View.
+ *
+ * @author jmorell
+ */
+public class InputCoordinatesPanel extends JPanel implements IWindow {
+    private static final long serialVersionUID = 1L;
+    private JLabel labelX = null;
+    private JTextField textX = null;
+    private JLabel labelY = null;
+    private JTextField textY = null;
+    private MapControl mapControl;
+    private WindowInfo viewInfo = null;
+    private String firstCoordinate;
+    private String secondCoordinate;
+    private Point2D center;
+    private GraphicLayer lyr;
+    private ColorChooserPanel colorPanel;
+	private AcceptCancelPanel okCancelPanel = null;
+	
+	MapContextManager mapContextManager = MapContextLocator
+			.getMapContextManager();
+	
+    private static final Logger LOG = LoggerFactory
+        .getLogger(InputCoordinatesPanel.class);
+
+	/**
+     * This is the default constructor
+     */
+    public InputCoordinatesPanel(MapContext mapContext) {
+        super();
+        this.mapControl = new MapControl();
+        mapControl.setMapContext(mapContext);
+        lyr=mapControl.getMapContext().getGraphicsLayer();
+        initializeCoordinates();
+        initialize();
+    }
+
+    /**
+     * Sets the proper text for the first and second coordinate labels,
+     * depending on the kind of selected projection.
+     *
+     */
+    private void initializeCoordinates() {
+        IProjection proj = mapControl.getProjection();
+        if (proj.isProjected()) {
+            firstCoordinate = "X";
+            secondCoordinate = "Y";
+        } else {
+            firstCoordinate = "Lon";
+            secondCoordinate = "Lat";
+        }
+    }
+
+    /**
+     * Move the view's extent so that the specified point gets
+     * centered.
+     *
+     * @throws Exception
+     */
+    private void zoomToCoordinates() throws Exception {
+       try{
+    	Envelope oldExtent = mapControl.getViewPort().getAdjustedEnvelope();
+        double oldCenterX = oldExtent.getCenter(0);
+        double oldCenterY = oldExtent.getCenter(1);
+        double centerX = (new Double((String)textX.getText())).doubleValue();
+        double centerY = (new Double((String)textY.getText())).doubleValue();
+        center=new Point2D.Double(centerX,centerY);
+        double movX = centerX-oldCenterX;
+        double movY = centerY-oldCenterY;
+        
+        double minx = oldExtent.getMinimum(0) + movX;
+        double miny = oldExtent.getMinimum(1) + movY;
+        double maxX = oldExtent.getMaximum(0) + movX;
+        double maxY = oldExtent.getMaximum(1) + movY;
+        Envelope extent = GeometryLocator.getGeometryManager().createEnvelope(
+            minx, miny,
+            maxX, maxY,
+            SUBTYPES.GEOM2D);
+        mapControl.getViewPort().setEnvelope(extent);
+       }catch (NumberFormatException e) {
+    	   throw new Exception();
+       }
+
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    private void initialize() {
+        labelY = new JLabel();
+        labelY.setBounds(10, 35, 28, 20);
+        labelY.setText(secondCoordinate + ":");
+        labelX = new JLabel();
+        labelX.setBounds(10, 10, 28, 20);
+        labelX.setText(firstCoordinate + ":");
+        this.setLayout(null);
+        this.setSize(307, 100);
+        this.add(labelX, null);
+        this.add(getTextX(), null);
+        this.add(labelY, null);
+        this.add(getTextY(), null);
+        this.add(getColorPanel());
+        this.add(getOkCancelPanel(), null);
+    }
+
+    /**
+     * This method initializes textX
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTextX() {
+    	if (textX == null) {
+    		textX = new JTextField();
+    		textX.setBounds(40, 10, 260, 20);
+    		textX.addActionListener(new java.awt.event.ActionListener() {
+    			public void actionPerformed(java.awt.event.ActionEvent e) {
+    				textX.transferFocus();
+    			}
+    		});
+    	}
+    	return textX;
+    }
+
+    /**
+     * This method initializes textY
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTextY() {
+    	if (textY == null) {
+    		textY = new JTextField();
+    		textY.setBounds(40, 35, 260, 20);
+    		textY.addActionListener(new java.awt.event.ActionListener() {
+    			public void actionPerformed(java.awt.event.ActionEvent e) {
+    				textY.transferFocus();
+    			}
+    		});
+    	}
+    	return textY;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.ui.mdiManager.View#getViewInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        // TODO Auto-generated method stub
+        if (viewInfo == null) {
+            viewInfo=new WindowInfo(WindowInfo.MODALDIALOG);
+            viewInfo.setTitle(PluginServices.getText(this,"Centrar_la_Vista_sobre_un_punto"));
+            viewInfo.setWidth(this.getWidth()+8);
+            viewInfo.setHeight(this.getHeight());
+        }
+        return viewInfo;
+    }
+    /**
+     * Opens the infoByPoint dialog for the selected point.
+     *
+     */
+    private void openInfo(){
+    	InfoListener infoListener=new InfoListener(mapControl);
+    	MouseEvent e=new MouseEvent((Component)(((CenterViewToPointExtension)PluginServices.getExtension(CenterViewToPointExtension.class)).getView()),MouseEvent.BUTTON1,MouseEvent.ACTION_EVENT_MASK,MouseEvent.MOUSE_CLICKED,500,400,1,true);
+    	Point2D centerPixels=mapControl.getViewPort().fromMapPoint(center.getX(),center.getY());
+    	PointEvent pe=new PointEvent(centerPixels,e,mapControl);
+    	try {
+			infoListener.point(pe);
+		} catch (org.gvsig.fmap.mapcontrol.tools.BehaviorException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		if (mapControl.getMapContext().getLayers().getActives().length==0){
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),PluginServices.getText(this,"no_hay_ninguna_capa_seleccionada")+" \n"+
+					PluginServices.getText(this,"debe_seleccionar_las_capas_de_las_que_quiera_obtener_informacion"));
+		}
+    }
+
+    /**
+     * Draws the selected point on the view.
+     *
+     * @param color
+     */
+    private void drawPoint(Color color){
+    	CenterViewToPointExtension.COLOR=color;
+    	lyr.clearAllGraphics();
+		ISymbol theSymbol =
+				mapContextManager.getSymbolManager().createSymbol(
+				Geometry.TYPES.POINT, color);
+        int idSymbol = lyr.addSymbol(theSymbol);
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+//        org.gvsig.fmap.geom.Geometry geom = geomManager.create(center.getX(),center.getY());
+        Point geom = null;
+		try {
+			geom = (Point)geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
+			geom.setX(center.getX());
+			geom.setY(center.getY());
+		} catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
+            LOG.error("Error creating a point geometry", e);
+		}
+//        FGraphic theGraphic = new FGraphic(geom, idSymbol);
+//        lyr.addGraphic(theGraphic);
+        lyr.addGraphic(geom, idSymbol);
+        mapControl.drawGraphics();
+
+    }
+
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getColorPanel() {
+		if (colorPanel==null){
+		 	colorPanel=new ColorChooserPanel();
+		 	colorPanel.setAlpha(250);
+		 	colorPanel.setColor(CenterViewToPointExtension.COLOR);
+		 	colorPanel.setBounds(new java.awt.Rectangle(40,59,123,24));
+		}
+		 	return colorPanel;
+	}
+
+	/**
+	 * This method initializes okCancelPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private AcceptCancelPanel getOkCancelPanel() {
+		if (okCancelPanel == null) {
+			ActionListener okAction, cancelAction;
+			okAction = new java.awt.event.ActionListener() {
+    			public void actionPerformed(java.awt.event.ActionEvent e) {
+    				try{
+    				zoomToCoordinates();
+    				}catch (Exception e1) {
+    					JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),PluginServices.getText(this,"formato_de_numero_incorrecto"));
+    					return;
+    				}
+    				// y sale.
+                    if (PluginServices.getMainFrame() == null)
+                        ((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+                    else
+                        PluginServices.getMDIManager().closeWindow(InputCoordinatesPanel.this);
+                    Preferences prefs = Preferences.userRoot().node( "gvsig.centerViewToPoint" );
+                    if( prefs.get("showInfo", "True").equalsIgnoreCase("True")){
+                    	openInfo();
+                    }
+                    drawPoint(((ColorChooserPanel)getColorPanel()).getColor());
+    			}
+    		};
+    		cancelAction = new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					closeThis();
+				}
+    		};
+			okCancelPanel = new AcceptCancelPanel(okAction, cancelAction);
+			okCancelPanel.setBounds(new java.awt.Rectangle(40, 88, 260, 30));
+		}
+		return okCancelPanel;
+	}
+
+	/**
+	 * Close the window.
+	 *
+	 */
+	private void closeThis() {
+		PluginServices.getMDIManager().closeWindow(this);
+
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+
+}  //  @jve:decl-index=0:visual-constraint="103,18"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/gui/InputCoordinatesPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/CenterViewToPointExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/CenterViewToPointExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/CenterViewToPointExtension.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.centerviewpoint;
+
+import java.awt.Color;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.centerviewpoint.gui.InputCoordinatesPanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+
+
+/**
+ * The CenterViewToPointExtension class allows to center the View over a
+ * concrete point given by its coordinates.
+ *
+ * @author jmorell
+ */
+public class CenterViewToPointExtension extends Extension {
+	private DefaultViewPanel vista;
+	public static Color COLOR=Color.red;
+	
+	public void initialize() {
+		IconThemeHelper.registerIcon("action", "view-navigation-center-view-to-point", this);
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+    	if( "view-navigation-center-view-to-point".equalsIgnoreCase(actionCommand)) {
+			vista = (DefaultViewPanel)PluginServices.getMDIManager().getActiveWindow();
+	        MapContext mapContext = vista.getModel().getMapContext();
+	        InputCoordinatesPanel dataSelectionPanel = new InputCoordinatesPanel(mapContext);
+	        //dataSelectionPanel.setColor(color);
+			PluginServices.getMDIManager().addWindow(dataSelectionPanel);
+    	}
+    }
+
+    public DefaultViewPanel getView(){
+    	return vista;
+    }
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isEnabled()
+     */
+    public boolean isEnabled() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f.getClass() == DefaultViewPanel.class) {
+		    DefaultViewPanel vista = (DefaultViewPanel) f;
+		    ViewDocument model = vista.getModel();
+		    MapContext mapa = model.getMapContext();
+		    FLayers layers = mapa.getLayers();
+		    for (int i=0;i < layers.getLayersCount();i++) {
+               if (layers.getLayer(i).isAvailable()) return true;
+		    }
+		}
+		return false;
+
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isVisible()
+     */
+    public boolean isVisible() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f.getClass() == DefaultViewPanel.class) {
+		    DefaultViewPanel vista = (DefaultViewPanel) f;
+		    ViewDocument model = vista.getModel();
+		    MapContext mapa = model.getMapContext();
+            if (mapa.getLayers().getLayersCount() > 0) {
+                return true;
+            }
+            return false;
+        }
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/src/main/java/org/gvsig/centerviewpoint/CenterViewToPointExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.centerviewpoint.app.mainplugin</artifactId>
+  <name>Tools: Center view to point</name>
+  <description>Tool to center view to point</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.centerviewpoint.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.andami</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.control</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.ui</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>        
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+      <plugins>
+          <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+          <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-surefire-plugin</artifactId>
+              <configuration>
+                  <skipTests>true</skipTests>
+              </configuration>
+          </plugin> 
+      </plugins>
+  </build>
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.app -ge 2.0.0-2066</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Vector, View</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.centerviewpoint</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:52 CEST 2015
+buildNumber=2155

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/org.gvsig.centerviewpoint.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/pom.xml	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.centerviewpoint.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <description>Tool to center view to point</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.centerviewpoint.app.mainplugin</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.centerviewpoint.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.newlayer.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.newlayer.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>Tools: New layer</name>
+  <description>
+This plugin add tools to create new layers.
+  </description>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.newlayer.app</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.andami</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>   
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>   
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.lib.impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+<!--
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.prov.generic</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+-->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.prov.file</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.prov.shape</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+
+  <properties>
+    <gvsig.package.info.categories>View,Table,Vector</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.newlayer.app.extension</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+  
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:57 CEST 2015
+buildNumber=125

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+    <alternativeNames name="org.gvsig.newlayer.app.extension"/>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.newlayer.app.extension.NewLayerExtension"
+			description=""
+			active="true"
+			priority="1">
+			<menu text="View/new_layer"
+				position="650200000"
+				action-command="NewLayer"
+				icon="view-new-layer" />				
+		</extension>		
+		<!-- <extension class-name="org.gvsig.newlayer.app.extension.ExporttoTableExtension"
+            description=""
+            active="true"
+            priority="1">
+            <menu text="Tabla/new_layer"
+                position="50"
+                action-command="NewLayer"/>             
+        </extension> -->
+        <extension class-name="org.gvsig.newlayer.app.extension.NewLayerPreferencesExtension"
+            description=""
+            active="true"
+            priority="1">
+        </extension>          
+	</extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/images/preferences/newlayer-preferences.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/images/preferences/newlayer-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 42196)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.newlayer.app.extension.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.newlayer.app.extension">
+      <description>Persistence of the NewLayer plugin</description>
+      <fields>
+        <field name="enabledProviders" type="Set" classOfItems="java.lang.String" mandatory="false">
+          <description>List of new layer provider names enabled by the user</description>
+        </field>
+        <field name="disabledProviders" type="Set" classOfItems="java.lang.String" mandatory="false">
+          <description>List of new layer to provider names disabled by the user</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,5 @@
+add_table_to_project=Desea a�adir la tabla al proyecto?
+add_table=A�adir tabla
+newlayer_preferences=Nueva capa
+newlayer_preferences_panel_description=Marque los formatos de nueva capa que quiera activar o desactivar
+_New_layer_wizard=Asistente para nueva capa
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,5 @@
+add_table_to_project=Add the table to the project?
+add_table=Add table
+newlayer_preferences=New layer
+newlayer_preferences_panel_description=Enable or disable new layer formats
+_New_layer_wizard=New layer wizard
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,66 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>org.gvsig:org.gvsig.newlayer.lib.api</include>
+        <include>org.gvsig:org.gvsig.newlayer.lib.impl</include>
+        <include>org.gvsig:org.gvsig.newlayer.prov.generic</include>
+        <include>org.gvsig:org.gvsig.newlayer.prov.file</include>
+        <include>org.gvsig:org.gvsig.newlayer.prov.shape</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/package.html	(revision 42196)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.newlayer package documentation</title>
+</head>
+<body>
+
+	<p>NewLayer gvSIG extension</p>
+	
+	<p>
+	Shows NewLayer into gvSIG.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/preferences/NewLayerPreferencesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/preferences/NewLayerPreferencesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/preferences/NewLayerPreferencesPage.java	(revision 42196)
@@ -0,0 +1,142 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.app.extension.preferences;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.newlayer.NewLayerManager;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.newlayer.app.extension.NewLayerPreferencesExtension;
+import org.gvsig.newlayer.preferences.NewLayerPreferencesComponent;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * NewLayer related preferences page.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerPreferencesPage extends AbstractPreferencePage {
+
+    private static final long serialVersionUID = -5751805016601819817L;
+
+//    private ImageIcon icon;
+
+    private NewLayerManager manager;
+
+    private NewLayerPreferencesComponent preferences;
+
+    /**
+     * Constructor.
+     */
+    public NewLayerPreferencesPage() {
+//        icon = PluginServices.getIconTheme().get("newlayer-properties");
+
+        manager = NewLayerLocator.getManager();
+        addComponent(new JLabel(
+            Messages.getText("newlayer_preferences_panel_description")));
+        preferences = manager.createNewLayerProvidersPreferences();
+        addComponent(preferences.asJComponent());
+
+        // setParentID("org.gvsig.app.gui.preferencespage.ViewPage");
+    }
+
+    public String getID() {
+        return getClass().getName();
+    }
+
+    public String getTitle() {
+        return Messages.getText("newlayer_preferences");
+    }
+
+    public JPanel getPanel() {
+        return this;
+    }
+
+    public void initializeValues() {
+        // Nothing to do
+    }
+
+    public void initializeDefaults() {
+        preferences.initializeDefaults();
+    }
+
+    public ImageIcon getIcon() {
+        return IconThemeHelper.getImageIcon("newlayer-preferences");
+    }
+
+    public boolean isValueChanged() {
+        return preferences.isValueChanged();
+    }
+
+    @Override
+    public void storeValues() throws StoreException {
+        // Update manager values
+        List<NewLayerProviderFactory> providers = manager.getProviders();
+        Set<NewLayerProviderFactory> disabledProviders =
+            preferences.getDisabledProviders();
+        Set<String> enabledNames = new HashSet<String>();
+        Set<String> disabledNames =
+            new HashSet<String>(disabledProviders.size());
+        for (int i = 0; i < providers.size(); i++) {
+            NewLayerProviderFactory provider = providers.get(i);
+            boolean disabled = disabledProviders.contains(provider);
+            provider.setEnabled(!disabled);
+            if (disabled) {
+                disabledNames.add(provider.getName());
+            } else {
+                enabledNames.add(provider.getName());
+            }
+        }
+        // Persist them
+        DynObject preferences =
+            PluginsLocator.getManager()
+                .getPlugin("org.gvsig.newlayer.app.extension")
+                .getPluginProperties();
+        preferences.setDynValue(
+            NewLayerPreferencesExtension.PREFERENCE_ENABLED_PROVIDERS,
+            enabledNames);
+        preferences.setDynValue(
+            NewLayerPreferencesExtension.PREFERENCE_DISABLED_PROVIDERS,
+            disabledNames);
+    }
+
+    @Override
+    public void setChangesApplied() {
+        preferences.setChangesApplied();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/preferences/NewLayerPreferencesPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerExtension.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.newlayer.NewLayerManager;
+import org.gvsig.newlayer.NewLayerService;
+import org.gvsig.newlayer.NewLayerWizard;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class NewLayerExtension extends Extension {
+	
+	private ViewDocument view = null;
+
+	public void initialize() {
+	}
+
+	@Override
+	public void postInitialize() {
+		super.postInitialize();
+	}
+
+	public void execute(String actionCommand) {
+		
+		ApplicationManager application = ApplicationLocator.getManager();
+		ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+
+		if (view != null) {
+			NewLayerManager manager = NewLayerLocator.getManager();
+			NewLayerService service = manager.createNewLayerService(view.getMapContext());
+			NewLayerWizard wizard = manager.createNewLayerWizard(service);
+			
+			WindowManager windowMgr = ToolsSwingLocator.getWindowManager();
+			windowMgr.showWindow(
+			    wizard,
+			    Messages.getText("_New_layer_wizard"),
+			    WindowManager.MODE.DIALOG);
+		}
+	}
+
+	public boolean isEnabled() {
+		
+		ApplicationManager application = ApplicationLocator.getManager();
+		view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+		return (view != null);
+		
+	}
+
+	public boolean isVisible() {
+		
+		ApplicationManager application = ApplicationLocator.getManager();
+		view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+		return (view != null);
+		
+	}
+	
+	public ViewDocument getView() {
+		return view;
+	}
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerPreferencesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerPreferencesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerPreferencesExtension.java	(revision 42196)
@@ -0,0 +1,136 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.newlayer.app.extension;
+
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.i18n.Messages;
+import org.gvsig.newlayer.NewLayerLocator;
+import org.gvsig.newlayer.NewLayerManager;
+import org.gvsig.newlayer.NewLayerProviderFactory;
+import org.gvsig.newlayer.app.extension.preferences.NewLayerPreferencesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * Andami extension to register the NewLayer preferences panel.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class NewLayerPreferencesExtension extends Extension {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(NewLayerPreferencesExtension.class);
+
+    /**
+     * The name of the preferences property with the names of the hidden
+     * NewLayerSwingProviderFactory.
+     */
+    public static final String PREFERENCE_DISABLED_PROVIDERS =
+        "disabledProviders";
+    public static final String PREFERENCE_ENABLED_PROVIDERS =
+        "enabledProviders";
+
+    public void initialize() {
+
+        NewLayerManager providerManager = NewLayerLocator.getManager();
+        // Load from preferences the list of NewLayer Providers to ignore.
+        DynObject preferences = this.getPlugin().getPluginProperties();
+        @SuppressWarnings("unchecked")
+        Set<String> disabledProviders =
+            (Set<String>) preferences
+                .getDynValue(PREFERENCE_DISABLED_PROVIDERS);
+        if (disabledProviders != null) {
+            for (Iterator<String> iterator = disabledProviders.iterator(); iterator
+                .hasNext();) {
+                NewLayerProviderFactory factory;
+                String providerName = null;
+                try {
+                    providerName = iterator.next();
+                    factory =
+                        providerManager
+                            .getNewLayerProviderFactory(providerName);
+                    providerManager.enableProvider(factory, Boolean.FALSE);
+                } catch (ServiceException e) {
+                    LOG.warn("Disabled NewLayer provider " + providerName
+                        + " is not available", e);
+                }
+            }
+        }
+        @SuppressWarnings("unchecked")
+        Set<String> enabledProviders =
+            (Set<String>) preferences.getDynValue(PREFERENCE_ENABLED_PROVIDERS);
+        if (enabledProviders != null) {
+            for (Iterator<String> iterator = enabledProviders.iterator(); iterator
+                .hasNext();) {
+                NewLayerProviderFactory factory;
+                String providerName = null;
+                try {
+                    providerName = iterator.next();
+                    factory =
+                        providerManager
+                            .getNewLayerProviderFactory(providerName);
+                    providerManager.enableProvider(factory, Boolean.TRUE);
+                } catch (ServiceException e) {
+                    LOG.warn("Enabled NewLayer provider " + providerName
+                        + " is not available", e);
+                }
+            }
+        }
+
+        // Register preferences page
+        ExtensionPointManager extensionPoints =
+            ToolsLocator.getExtensionPointManager();
+        ExtensionPoint ep = extensionPoints.add("AplicationPreferences", "");
+
+        IconThemeHelper.registerIcon("preferences", "newlayer-preferences", this);
+        
+        ep.append("NewLayerPreferencesPage", "", new NewLayerPreferencesPage());
+    }
+
+    public void execute(String actionCommand) {
+        // Nothing to do
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerPreferencesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.newlayer">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.newlayer.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/about/about.htm
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/about/about.htm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/about/about.htm	(revision 42196)
@@ -0,0 +1,46 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<html>
+  <head>
+    <title>Extension 3D del programa GvSIG </title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+<table width="60%" border="0">
+  <tr>
+    <td width="64%"><img src="images/logo_horiz_bicolor_gva.png" width="329" height="50"></td>
+    <td width="36%"><div align="right"><img src="images/logoIver.png" width="87" height="50"></div></td>
+  </tr>
+  <tr>
+    <td colspan="2"><font face="Arial, Helvetica, sans-serif">&copy; Copyright
+      Generalitat Valenciana, IVER T.I and other contributors 2005.</font></td>
+  </tr>
+</table>
+  <h3>Extesi&oacute;n de la Aplicaci&oacute;n para el tratamiento de top&oacute;nimos del Instituto Geogr&aacute;fico Nacional</h3>
+  <p><br><br><b> Build Number: #build.number#</b></p>
+  </body>
+</html>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/about/about.htm
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+  	<alternativeNames name="org.gvsig.help"/>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.help.HelpExtension"
+			description=""
+			active="true"
+			priority="1">
+            
+            <action 
+                name="help-contents"
+                label="_Help" 
+                tooltip="_Help" 
+                position="990101000" 
+                action-command="help-contents"
+                icon="help-contents"
+                accelerator=""
+                />
+            
+            <menu
+                name="help-contents"
+                text="Help/Contents"
+                />
+		</extension>		
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/view-refresh.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/view-refresh.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/document-print.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/document-print.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/go-home.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/go-home.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/go-previous.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/go-previous.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/go-next.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/icons/go-next.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/help.hs
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/help.hs	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/help.hs	(revision 42196)
@@ -0,0 +1,65 @@
+<?xml version='1.0' encoding='ISO-8859-1' ?>
+<!DOCTYPE helpset
+  PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 2.0//EN"
+         "../dtd/helpset_2_0.dtd">
+
+<helpset version="1.0">
+
+  <!-- title -->
+  <title>gvSIG - Ayuda en linea</title>
+
+  <!-- maps -->
+  <maps>
+     <homeID>docs.introduccion-a-gvsig.copy_of_queesgvsig.html</homeID>
+     <mapref location="map.jhm"/>
+  </maps>
+
+  <!-- views -->
+  <view>
+    <name>TOC</name>
+    <label>Tabla de contenidos</label>
+    <type>javax.help.TOCView</type>
+    <data>toc.xml</data>
+  </view>
+
+  <view>
+    <name>Index</name>
+    <label>Indice analitico</label>
+    <type>javax.help.IndexView</type>
+    <data>index.xml</data>
+  </view>
+
+  <view>
+    <name>Search</name>
+    <label>Search</label>
+    <type>javax.help.SearchView</type>
+    <data engine="com.sun.java.help.search.DefaultSearchEngine">
+      JavaHelpSearch
+    </data>
+  </view>
+
+<!--
+  <view>
+    <name>Favorites</name>
+    <label>Favoritos</label>
+    <type>javax.help.FavoritesView</type>
+  </view>
+-->
+  <presentation default="true" displayviewimages="false">
+     <name>main window</name>
+     <size width="700" height="400" />
+     <location x="200" y="200" />
+     <title>gvSIG - Ayuda en linea</title>
+     <image>toplevelfolder</image>
+     <toolbar>
+	<helpaction image="action.back">javax.help.BackAction</helpaction>
+	<helpaction image="action.forward">javax.help.ForwardAction</helpaction>
+	<helpaction>javax.help.SeparatorAction</helpaction>
+	<helpaction image="action.home">javax.help.HomeAction</helpaction>
+	<!--helpaction image="action.reload">javax.help.ReloadAction</helpaction-->
+	<helpaction>javax.help.SeparatorAction</helpaction>
+	<helpaction image="action.print">javax.help.PrintAction</helpaction>
+	<!--helpaction>javax.help.PrintSetupAction</helpaction-->
+     </toolbar>
+  </presentation>
+</helpset>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/index.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/index.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/index.xml	(revision 42196)
@@ -0,0 +1,361 @@
+<?xml version='1.0' encoding='ISO-8859-1'  ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<!DOCTYPE index
+  PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Index Version 1.0//EN"
+         "http://java.sun.com/products/javahelp/index_1_0.dtd">
+
+<index version="1.0">
+   <indexitem text=".prof extension (profile data)" target="prof.profile"/>
+   
+   <indexitem text="accelerators (keyboard), see 'keyboard commands'"/>
+   
+   <indexitem text="adding an existing portfolio" target="proj.import"/>
+   
+   <indexitem text="adding an existing project" expand="false">
+      <indexitem text="naming the project" target="proj.importdirectory"/>
+      <indexitem text="naming the storage directory" target="proj.importdirectory"/>
+      <indexitem text="procedures for" target="proj.importproject2"/>
+   </indexitem>
+   
+   <indexitem text="analyzing program performance, see 'profiler'"/>
+   
+   <indexitem text="arguments" expand="false">
+      <indexitem text="passing" target="debug.arguments"/>
+      <indexitem text="specifying" target="debug.arguments"/>
+   </indexitem>
+
+   <indexitem text="assignments (keyboard), see 'keyboard commands'"/>
+
+   <indexitem text="auto indent, source editor" target="edit.tabs"/>
+   <indexitem text="auto indent, source editor - Secondary Window" target="edit.tabs" presentationtype="javax.help.SecondaryWindow" presentationname="main"/>
+   <indexitem text="auto indent, source editor - Popup" target="edit.tabs" presentationtype="javax.help.Popup"/>
+
+   <indexitem text="background color, source editor" target="edit.syntax"/>
+
+   <indexitem text="BeanInfo file" target="proj.beansproject"/>
+
+   <indexitem text="beans" expand="false">
+      <indexitem text="adding existing sources to a bean project" target="proj.existingbeans"/>
+      <indexitem text="changing bean file status" target="proj.existingbeans"/>
+      <indexitem text="creating a bean project" target="proj.beansproject"/>
+      <indexitem text="removing existing sources from a bean project" target="proj.existingbeans"/>
+   </indexitem>
+   
+   <indexitem text="bindings (keyboard), see 'keyboard commands'"/>
+   
+   <indexitem text="break exception always" target="debug.addexception"/>
+   
+   <indexitem text="break exception on uncaught" target="debug.addexception"/>
+   
+   <indexitem text="breakpoints">
+      <indexitem text="advanced functions" target="debug.breakpoint"/>
+      <indexitem text="conditional" target="debug.conditional"/>
+      <indexitem text="list of" target="debug.breakpoint"/>
+      <indexitem text="location" target="debug.breakpoint"/>
+      <indexitem text="window" target="debug.breakpoint"/>
+   </indexitem>
+   
+   <indexitem text="browsing source code, see 'source browser'"/>
+   
+   <indexitem text="building projects">
+      <indexitem text="Build menu" target="menus.build"/>
+      <indexitem text="building projects" target="build.build"/>
+      <indexitem text="javac" target="build.build"/>
+   </indexitem>
+
+
+   <indexitem text="call stack, moving on the" target="debug.stack"/>
+
+   <indexitem text="callbacks, see `adding operations'"/>
+
+   <indexitem text="changing the current project" target="proj.changeproject"/>
+   
+   <indexitem text="changing the status of a bean file" target="proj.existingbeans"/>
+
+   <indexitem text="check in (version control)" target="version.version"/>
+
+   <indexitem text="check in new (version control)" target="version.version"/>
+
+   <indexitem text="choosing a Java compiler" target="build.compiler_pref"/>
+
+   <indexitem text="Fast Javac" target="build.compiler_pref"/>
+
+   <indexitem text="compiling a single file" target="build.compilefile"/>
+
+   <indexitem text="compiling projects" target="build.build"/>
+
+
+   <indexitem text="counted breakpoints" target="debug.counted"/>
+
+   <indexitem text="Create Project Wizard">
+      <indexitem text="adding existing sources to a bean project" target="proj.existingbeans"/>
+      <indexitem text="naming a source file location" target="proj.appletwizard"/>
+   </indexitem>
+
+   <indexitem text="creating a portfolio">
+      <indexitem text="steps for" target="proj.createportfolio"/>
+      <indexitem text="using the dialog box for" target="proj.createportfolio"/>
+   </indexitem>
+   
+   <indexitem text="Customizer file" target="proj.beansproject"/>
+   
+   <indexitem text="Debug/Browse Tab">
+      <indexitem text="editing project attributes" target="proj.editproject"/>
+      <indexitem text="output" target="debug.messages"/>
+   </indexitem>
+   
+   <indexitem text="debugging">
+      <indexitem text="-g option" target="debug.overview"/>
+      <indexitem text="evaluating expressions" target="debug.eval"/>
+      <indexitem text="prerequisites" target="debug.overview"/>
+      <indexitem text="stack frames, viewing" target="debug.viewthreads"/>
+      <indexitem text="starting" target="debug.start"/>
+      <indexitem text="window, tab" target="debug.messages"/>
+   </indexitem>
+   
+   <indexitem text="displaying a portfolio" target="proj.changeportfolio"/>
+   
+   <indexitem text="displaying a project" target="proj.changeproject"/>
+   
+   <indexitem text="editor, see 'source editor'"/>
+   
+   <indexitem text="evaluation history" target="debug.eval"/>
+   
+   <indexitem text="exceptions">
+      <indexitem text="adding" target="debug.addexception"/>
+      <indexitem text="break always" target="debug.addexception"/>
+      <indexitem text="using the window" target="debug.exceptions"/>
+      <indexitem text="window" target="debug.exceptions"/>
+   </indexitem>
+   
+   <indexitem text="expanding objects and arrays" target="debug.eval"/>
+   
+   <indexitem text="expressions">
+      <indexitem text="defined" target="debug.eval"/>
+      <indexitem text="evaluating" target="debug.eval"/>
+      <indexitem text="evaluation history" target="debug.eval"/>
+      <indexitem text="using the evaluate button" target="debug.eval"/>
+      <indexitem text="value of" target="debug.eval"/>
+   </indexitem>
+   
+   
+   
+   <indexitem text="Fast Javac compiler" target="build.compiler_pref"/>
+   
+   <indexitem text="files, storing project" target="proj.paths"/>
+   
+   <indexitem text="flags, compiler see 'compiler options'"/>
+   
+   <indexitem text="fonts, setting in source editor" target="edit.font"/>
+   
+   
+   
+   <indexitem text="generating an HTML page" target="proj.generatehtml"/>
+   <indexitem text="A Junk Entry" target="intentional.junk"/>
+   
+   
+   <indexitem text="HTML file">
+      <indexitem text="editing" target="proj.edithtml"/>
+      <indexitem text="saving" target="proj.edithtml"/>
+      <indexitem text="updating a run page URL" target="proj.edithtml"/>
+   </indexitem>
+   
+   
+   <indexitem text="ignore, exceptions list" target="debug.addexception"/>
+   
+   
+   
+   <indexitem text="JAR files">
+      <indexitem text="defined" target="proj.beansproject"/>
+   </indexitem>
+   
+   <indexitem text="JavaBeans, see 'beans'"/>
+   
+   <indexitem text="javadoc, use in class browser" target="browse.class"/>
+   
+   
+   
+   <indexitem text="line/column indicator, source editor" target="edit.controls"/>
+   
+   <indexitem text="local variables" target="debug.threads"/>
+   
+   <indexitem text="location of breakpoints" target="debug.breakpoint"/>
+   
+   <indexitem text="location, debugging" target="debug.run"/>
+   
+   
+   
+   <indexitem text="managing projects" target="proj.managertoc"/>
+   
+   <indexitem text="methods, stepping into" target="debug.step"/>
+   
+   
+   
+   <indexitem text="naming a project" target="proj.projectwizard"/>
+   
+   
+   
+   <indexitem text="opening a portfolio" target="proj.changeportfolio"/>
+   
+   <indexitem text="opening a project" target="proj.changeproject"/>
+   
+   
+   <indexitem text="package">
+     <indexitem text="creating a package project" target="proj.createpackage"/>
+     <indexitem text="editing the name" target="proj.generaldisplay"/>
+     <indexitem text="naming" target="proj.generaldisplay"/>
+   </indexitem>
+   
+   <indexitem text="passing arguments to a standalone project" target="debug.arguments"/>
+   
+   <indexitem text="performance analysis, see 'profiler'"/>
+   
+   <indexitem text="portfolios">
+      <indexitem text="Add Portfolio dialog box" target="proj.importportfolio"/>
+      <indexitem text="changing" target="proj.changeportfolio"/>
+      <indexitem text="Create Portfolio dialog box" target="proj.createportfolio"/>
+      <indexitem text="removing" target="proj.removeportfolio"/>
+   </indexitem>
+   
+   <indexitem text="Preferences menu" target="menus.preferences"/>
+   
+   <indexitem text="prerequisites, debugging" target="debug.overview"/>
+   
+   <indexitem text="printing profile data" target="prof.menus"/>
+   
+   <indexitem text="profiler">
+      <indexitem text="customizing data filters" target="prof.custom"/>
+   </indexitem>
+   
+   <indexitem text="Project Manager" target="proj.projectmanager"/>
+   
+   <indexitem text="project name" target="proj.generaldisplay"/>
+   
+   <indexitem text="project type" target="proj.generaldisplay"/>
+   
+   <indexitem text="projects">
+      <indexitem text="contents" target="proj.managertoc"/>
+      <indexitem text="copying an added project" target="proj.importwizard"/>
+      <indexitem text="manager" target="proj.projectmanager"/>
+      <indexitem text="using the project manager" target="proj.projectmanager"/>
+   </indexitem>
+   
+   
+   <indexitem text="quitting debugging" target="debug.enddebug"/>
+   
+   
+   <indexitem text="RCS (version control)" target="version.version"/>
+   
+   <indexitem text="referencing an added project" target="proj.importwizard"/>
+   
+   <indexitem text="remote debugging">
+      <indexitem text="agent password" target="debug.remotedebug"/>
+      <indexitem text="classpaths" target="debug.remotedebug"/>
+      <indexitem text="network connection" target="debug.remotedebug"/>
+      <indexitem text="password" target="debug.remotedebug"/>
+   </indexitem>
+   
+   <indexitem text="removing a portfolio" target="proj.removeportfolio"/>
+   
+   <indexitem text="removing a project" target="proj.removeproject"/>
+      
+   <indexitem text="replacing text, source editor" target="edit.replace"/>
+   
+   <indexitem text="requirements, debugging" target="debug.overview"/>
+   
+   <indexitem text="running a program to collect profile data" target="prof.profile"/>
+   
+   <indexitem text="running a project" target="proj.run"/>
+   
+   <indexitem text="running to a specific location" target="proj.run"/>
+   
+   
+   
+   <indexitem text="saving an HTML file" target="proj.edithtml"/>
+   
+   <indexitem text="SCCS (version control)" target="version.version"/>
+   
+   <indexitem text="shortcuts (keyboard), see 'keyboard commands'"/>
+   
+   <indexitem text="showing the stack frame source" target="debug.source"/>
+      
+   <indexitem text="source browser">
+      <indexitem text="Browse menu" target="menus.browse"/>
+      <indexitem text="browsing class files" target="browse.class"/>
+      <indexitem text="javadoc, use in class browser" target="browse.class"/>
+      <indexitem text="strings, searching for in source code" target="browse.strings"/>
+   </indexitem>
+   
+   <indexitem text="source directory" target="proj.generaldisplay"/>
+   
+   <indexitem text="standalone project">
+      <indexitem text="creating" target="proj.createstandalone"/>
+      <indexitem text="running" target="proj.run"/>
+      <indexitem text="specifying program arguments" target="debug.arguments"/>
+   </indexitem>
+   
+   <indexitem text="starting debugging" target="debug.start"/>
+   
+   <indexitem text="starting over, debugging" target="debug.startover"/>
+   
+   <indexitem text="subprojects, creating" target="proj.nestedprojects"/>
+   
+   <indexitem text="subprojects, defined" target="proj.projects"/>
+   
+   <indexitem text="tabs, see 'component palette'"/>
+   
+   <indexitem text="threads">
+      <indexitem text="data values" target="debug.variables"/>
+      <indexitem text="evaluating data values" target="debug.variables"/>
+      <indexitem text="variables, defined" target="debug.threads"/>
+      <indexitem text="viewing threads" target="debug.viewthreads"/>
+   </indexitem>
+   
+   <indexitem text="using the debugger" target="debug.overview"/>
+   
+   <indexitem text="using the Exceptions Window" target="debug.exceptions"/>
+   
+   <indexitem text="defined" target="debug.eval"/>
+   
+   <indexitem text="evaluating" target="debug.eval"/>
+   
+   <indexitem text="viewing" target="debug.threads"/>
+   
+   <indexitem text="version control">
+      <indexitem text="check in" target="version.version"/>
+      <indexitem text="check in new" target="version.version"/>
+      <indexitem text="uncheckout" target="version.version"/>
+   </indexitem>
+   
+   <indexitem text="viewing stack frames" target="debug.viewthreads"/>
+   
+
+   <indexitem text="Windows menu" target="menus.windows"/>
+
+
+</index>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/manual-de-usuario/es/index.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/end.add
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/end.add	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/end.add	(revision 42196)
@@ -0,0 +1,2 @@
+
+</map>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/map.jhm.add
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/map.jhm.add	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/help/gvSIG/map.jhm.add	(revision 42196)
@@ -0,0 +1 @@
+  <mapID target="com.iver.cit.gvsig.project.documents.gui.ProjectWindow" url="docs/proyectos-y-documentos-propios-de-gvsig/proyectosydocumentospropios.html" />
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/java/org/gvsig/help/HelpExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/java/org/gvsig/help/HelpExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/java/org/gvsig/help/HelpExtension.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.help;
+
+import java.io.File;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.help.Help;
+import org.gvsig.andami.plugins.Extension;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class HelpExtension  extends Extension {
+
+	private static Logger logger = LoggerFactory.getLogger(HelpExtension.class);
+
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+
+		// If the option pressed is help control the help panel is created.
+		if(actionCommand.equalsIgnoreCase("help-contents")){
+
+			Help help = Help.getHelp();	//My constructor.
+			help.show("docs.introduccion-a-gvsig.copy_of_queesgvsig.html");//Launch help panel.
+
+			return;
+		}
+	}
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		return true;
+	}
+
+	public static String getExtensionPath() {
+		String pluginName = "org.gvsig.help";
+		PluginServices ps = PluginServices.getPluginServices(pluginName);
+		return ps.getPluginDirectory().getAbsolutePath();
+	}
+
+	@Override
+	public void postInitialize() {
+		super.postInitialize();
+		Help help = Help.getHelp();	//My constructor.
+		help.addResource(HelpExtension.getExtensionPath()+File.separator+ "gvSIG"+File.separator+"manual-de-usuario.zip");//Documentation path.
+		help.addHelp("manual-de-usuario");
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/src/main/java/org/gvsig/help/HelpExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.help.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>Online basic help</name>
+  <description>gvSIG help extension</description>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.help.app</artifactId>
+    <version>2.0.24-SNAPSHOT</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+      <plugins>
+
+      </plugins>
+  </build>
+
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.0.1</gvsig.package.info.dependencies>
+      <gvsig.package.info.codealias>org.gvsig.help</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/build.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/build.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/build.xml	(revision 42196)
@@ -0,0 +1,79 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<project name="Generar extension en Andami" default="help-documentation-zip" basedir=".">
+	<description>
+        Prepara el manual de usuario para el plugin de de Ayuda de gvSIG en Andami.
+    </description>
+	<!-- set global properties for this build -->
+	<property name="dist" location="dist-temp" />
+	<property name="plugin" value="org.gvsig.help" />
+	<property name="extension-dir" location="../build/product/gvSIG/extensiones" />
+	<property name="mydist" location="dist" />
+	<import file="../binaries/ant/utilities.xml" />
+
+	<target name="init">
+		<!-- Create the time stamp -->
+		<tstamp />
+		<!-- Create the build directory structure used by compile -->
+		<mkdir dir="${dist}" />
+	</target>
+
+	<target name="help-documentation-zip">
+
+		<!--get src="http://"
+		 	dest="${mydist}/gvSIG/manual-de-usuario.zip"
+	 	 /-->
+
+		<unzip src="${mydist}/gvSIG/manual-de-usuario.zip" dest="${mydist}/gvSIG">
+			<patternset>
+				<include name="manual-de-usuario/es/map.jhm" />
+			</patternset>
+		</unzip>
+
+		<loadfile property="add_text" srcFile="${mydist}/gvSIG/map.jhm.add" />
+		<loadfile property="end_text" srcFile="${mydist}/gvSIG/end.add" />
+
+		<property name="total" value="${add_text}${end_text}" />
+
+		<replace file="${mydist}/gvSIG/manual-de-usuario/es/map.jhm" value="${total}">
+			<replacetoken>
+				<![CDATA[</map>]]></replacetoken>
+		</replace>
+
+		<zip destfile="${dist}/gvSIG/manual-de-usuario.zip" basedir="${mydist}/gvSIG" includes="manual-de-usuario/**/**" excludes="**/*.db" update="true" />
+	</target>
+
+	<target name="move-to-andami">
+		<move todir="${extension-dir}/${plugin}/">
+			<fileset dir="${dist}" includes="**/**" />
+		</move>
+	</target>
+
+	<target name="clean">
+		<delete dir="${dist}" failonerror="no" />
+	</target>
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/build.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Sun Jan 26 14:57:07 CET 2014
+buildNumber=2091

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/org.gvsig.help.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/pom.xml	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.help.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.24-SNAPSHOT</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.help.app.mainplugin</module>
+  </modules>  
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.help.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.shp.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.shp.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+  <depends plugin-name="org.gvsig.app.mainplugin" />
+  <libraries library-dir="lib"/>
+  <resourceBundle name="text"/>
+  <extensions>
+    <extension class-name="org.gvsig.andami.LibraryExtension"
+      description=""
+      active="true">
+    </extension>
+  </extensions>
+
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,64 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>org.gvsig:org.gvsig.fmap.dal.file.dbf</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.file.shp</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.shp.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>${artifactId}</name>
+  <description>DBF/SHP file format support</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.shp.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  <dependencies>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.andami</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.i18n</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+ 
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.dal.file.dbf</artifactId>
+          <scope>runtime</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
+          <scope>runtime</scope>
+      </dependency>
+ 
+            
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.name>Formats: DBF/SHP file format support</gvsig.package.info.name>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.1.0-A</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Formats,Vector</gvsig.package.info.categories>
+      <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:58 CEST 2015
+buildNumber=2278

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project

target

.classpath

.settings


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/pom.xml	(revision 42196)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.app.animation</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>This plugin add a control to create animations</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.app</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.app.mainplugin</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.swing.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+    <properties>
+        <gvsig.package.info.name>Tools: Animation by time</gvsig.package.info.name>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:59 CEST 2015
+buildNumber=13
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/package.info
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/package.info	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/package.info	(revision 42196)
@@ -0,0 +1,20 @@
+#
+#Mon Aug 27 14:23:13 CEST 2012
+owner=gvSIG Association
+code=org.gvsig.timesupport.app.animation.extension
+java-version=j1_5
+official=true
+type=plugin
+version=1.0.0-SNAPSHOT-3
+state=devel
+operating-system=all
+dependencies=
+sources-url=https\://devel.gvsig.org/redmine/projects/gvsig-sensors/repository/show/org.gvsig.timesupport/extension/trunk/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation.extension
+web-url=http\://www.gvsig.com
+architecture=all
+model-version=1.0.1
+categories=
+description=This plugin add a control to create animations
+buildNumber=3
+gvSIG-version=2.0.0
+name=Animation by time
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+  <!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>xxx:xxx</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+  -->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationPreferencesListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationPreferencesListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationPreferencesListener.java	(revision 42196)
@@ -0,0 +1,166 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.app.animation.extension;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JComponent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingLocator;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingManager;
+import org.gvsig.timesupport.swing.api.panel.AnimationBarPanel;
+import org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel;
+
+/**
+ * Listener for the preferences dialog
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ */
+public class AnimationPreferencesListener implements ActionListener {
+	private AnimationPreferencesPanel    prefs               = null;
+	private AnimationDialog              prefsDialog         = null;
+	private TimeSupportSwingManager      swingManager        = null;
+	private TimeSupportManager           timeSupportManager  = null;
+	private TimeAnimation                animation           = null;
+	private ViewDocument            view                = null;
+	
+	/**
+	 * Constructor
+	 * @param dialog {@link AnimationDialog}
+	 * @param animation {@link TimeAnimation}
+	 * @param view {@link AbstractViewPanel}
+	 */
+	public AnimationPreferencesListener(AnimationDialog dialog, TimeAnimation animation, ViewDocument view) {
+		this.prefsDialog = dialog;
+		this.animation = animation;
+		this.view = view;
+		this.prefs = (AnimationPreferencesPanel)dialog.getMainComponent();
+		swingManager = TimeSupportSwingLocator.getSwingManager();
+		timeSupportManager = TimeSupportLocator.getManager();
+	}
+	
+	 /*
+     * (non-Javadoc)
+     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+     */
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == prefsDialog.getButtonAccept()) {
+			if(this.prefsDialog != null) {
+				TimeAnimationDataModel dataModel = prefs.getOutput();
+				RelativeInstant endWindow = addWindowTimeToInitInterval(dataModel);
+				dataModel.setTimeWindow(dataModel.getInitTime(), endWindow);
+				AnimationBarPanel barPanel = swingManager.createAnimationBarPanel(dataModel);
+				
+				AnimationDialog barDialog = new AnimationDialog(
+	        			(JComponent)barPanel, 
+	        			600, 100, 
+	        			PluginServices.getText(this, "animation_bar"),
+	        			false,
+	        			false);
+				AnimationBarListener listener = new AnimationBarListener(animation, barDialog, view);
+				barDialog.setWindowListener(listener);
+				barPanel.addButtonsListener(listener);
+	        	PluginServices.getMDIManager().addWindow(barDialog);
+				this.prefsDialog.close();
+			}
+		}
+		if(e.getSource() == prefsDialog.getButtonCancel()) {
+			if(prefsDialog != null) {
+				prefsDialog.close();
+			}
+		}
+	}
+	
+	
+	/**
+	 * Gets a date that is the sum of the RelativeInstant plus windowTime. That is calculated
+	 * using the scale.
+	 * @param dataModel {@link TimeAnimationDataModel}
+	 * @return {@link RelativeInstant}
+	 */
+	private RelativeInstant addWindowTimeToInitInterval(TimeAnimationDataModel dataModel) {
+		RelativeInstant instant = dataModel.getInitTime();
+		int[] value = new int[7];
+		int[] increment = dataModel.getWindowTimeByPartOfData();
+		value[0] = instant.getYear() + increment[0];
+		value[1] = instant.getMonthOfYear() + increment[1];
+		value[2] = instant.getDayOfMonth() + increment[2];
+		value[3] = instant.getHourOfDay() + increment[3];
+		value[4] = instant.getMinuteOfHour() + increment[4];
+		value[5] = instant.getSecondOfMinute() + increment[5];
+		value[6] = instant.getMillisOfSecond() + increment[6];
+		if(value[6] > 999) {
+			value[5] += (int)(value[6] / 1000);
+			value[6] = value[6] % 1000;
+		}
+		if(value[5] > 59) {
+			value[4] += (int)(value[5] / 59);
+			value[5] = value[5] % 60;
+		}
+		if(value[4] > 59) {
+			value[3] += (int)(value[4] / 59);
+			value[4] = value[4] % 60;
+		}
+		if(value[3] > 23) {
+			value[2] += (int)(value[3] / 23);
+			value[3] = value[3] % 24;
+		}
+		
+		//Meses de 31 dias
+		int t = 31;
+		
+		//Meses de 30 dias
+		if(value[1] == 4 || value[1] == 6 || value[1] == 9 || value[1] == 11) { 
+			t = 30;
+		}
+		//Meses de 29 dias
+		if(value[1] == 2 && (value[0] % 4) == 0) {
+			t = 29;
+		}
+		//Meses de 28 dias
+		if(value[1] == 2 && (value[0] % 4) != 0) {
+			t = 28;
+		}
+		
+		if(value[2] > t) {
+			value[1] += (int)(value[2] / t);
+			value[2] = (value[2] - t);
+		}
+
+		if(value[1] > 12) {
+			value[0] += (int)(value[1] / 12);
+			value[1] = value[1] - 12;
+		}
+
+		return timeSupportManager.createRelativeInstant(
+				value[0], value[1], value[2], value[3], value[4], value[5], value[6]);
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationSupportExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationSupportExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationSupportExtension.java	(revision 42196)
@@ -0,0 +1,204 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.app.animation.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingLocator;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingManager;
+import org.gvsig.timesupport.swing.api.panel.AnimationPreferencesPanel;
+
+/**
+ * Andami extension to animate the time variable on a gvSIG view
+ * 
+ * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+ */
+public class AnimationSupportExtension extends Extension {
+    private TimeSupportSwingManager    swingManager        = null;
+    private AnimationDialog            prefsDialog         = null; 
+
+    public void initialize() {
+        // Do nothing
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+        swingManager = TimeSupportSwingLocator.getSwingManager();
+    }
+
+    /**
+     * Throws the preferences dialog for animation
+     * @param actionCommand
+     */
+    public void execute(String actionCommand) {
+       if(actionCommand.equalsIgnoreCase("AnimationSupport") ) {
+           ViewDocument viewDocument = getView();
+           if(viewDocument == null) {
+        	   return;
+           }
+           RelativeInstant[] instant = getRelativeInstants(viewDocument);
+           int scale = getScale(instant);
+           if(instant != null) {
+        	   TimeAnimation animation = TimeSupportLocator.getManager().createTimeAnimation();
+        	   TimeAnimationDataModel dataModel = animation.getDataModel();
+        	   dataModel.setTimeInterval(instant[0], instant[1]);
+        	   dataModel.setTimeStepScale(scale);
+        	   dataModel.setWindowTimeScale(scale);
+        	   AnimationPreferencesPanel prefs = swingManager.createAnimationPreferencesPanel(dataModel);
+        	  
+        	   prefsDialog = new AnimationDialog(prefs.asJComponent(), 
+        			   600, 310, 
+        			   PluginServices.getText(this, "animation_preferences"),
+        			   true, 
+        			   true);
+        	   AnimationPreferencesListener listener = new AnimationPreferencesListener(prefsDialog, animation, viewDocument);
+        	   prefsDialog.addAcceptCancelListener(listener);
+        	   PluginServices.getMDIManager().addWindow(prefsDialog);
+           }
+       }
+    }
+
+    /**
+     * Gets a scale to the step. This calculus is not accurate. 
+     * @param instant {@link RelativeInstant} array
+     * @return
+     */
+    private int getScale(RelativeInstant[] instant) {
+    	int years = instant[1].getYear() - instant[0].getYear();
+    	int scale = TimeAnimation.YEAR;
+    	if(years == 1)
+    		scale = TimeAnimation.MONTH;
+    	if(years < 1) {
+    		int months = instant[1].getMonthOfYear() - instant[0].getMonthOfYear();
+    		scale = TimeAnimation.MONTH;
+    		if(months == 1)
+    			scale = TimeAnimation.DAY;
+    		if(months < 1) {
+    			int day = instant[1].getDayOfMonth() - instant[0].getDayOfMonth();
+    			scale = TimeAnimation.DAY;
+    			if(day == 1)
+    				scale = TimeAnimation.HOUR;
+    			if(day < 1) {
+    				int hour = instant[1].getHourOfDay() - instant[0].getHourOfDay();
+    				scale = TimeAnimation.HOUR;
+    				if(hour == 1)
+    					scale = TimeAnimation.SECOND;
+    				if(hour < 1) {
+    					int second = instant[1].getSecondOfDay() - instant[0].getSecondOfDay();
+    					scale = TimeAnimation.SECOND;
+    					if(second == 1)
+    						scale = TimeAnimation.MILLISECOND;
+    					if(second < 1)
+    						scale = TimeAnimation.MILLISECOND;
+    				}
+    			}
+    		}
+    	}
+    	return scale;
+    }
+
+    /**
+     * This extension is enabled when exists a layer with time support 
+     * loaded in the active view
+     */
+    public boolean isEnabled() {
+        ViewDocument viewDocument = getView();
+        if(viewDocument == null)
+        	return false;
+        LayersIterator it = new LayersIterator(viewDocument.getMapContext().getLayers());
+ 
+        while (it.hasNext()) {
+            FLayer layer = it.nextLayer();
+            if (layer instanceof SingleLayer){
+                DataStore dataStore = ((SingleLayer)layer).getDataStore();
+                if (dataStore.getInterval() != null){           
+                    return true;
+                }
+            }
+        }
+        
+        return false;
+    }
+    
+    /**
+     * Gets the active view
+     * @return {@link AbstractViewPanel}
+     */
+    private ViewDocument getView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewDocument = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);        
+        return viewDocument;
+    }
+    
+    /**
+     * Gets the interval from a layer with time content
+     * @param {@link AbstractViewPanel}
+     * @return {@link RelativeInstant} array
+     */
+    private RelativeInstant[] getRelativeInstants(ViewDocument viewDocument) {
+    	 LayersIterator it = new LayersIterator(viewDocument.getMapContext().getLayers());
+    	 RelativeInstant start = null;
+    	 RelativeInstant end = null;
+         while (it.hasNext()) {
+             FLayer layer = it.nextLayer();
+             if (layer instanceof SingleLayer) {
+                 DataStore dataStore = ((SingleLayer)layer).getDataStore();
+                 if (dataStore.getInterval() != null){           
+                	 Instant s = dataStore.getInterval().getStart();
+                	 Instant e = dataStore.getInterval().getEnd();
+                	 if(s instanceof RelativeInstant) { 
+                		 if(start == null || s.isBefore(start))
+                			 start = (RelativeInstant)s;
+                	 }
+                	 if(e instanceof RelativeInstant) {
+                		 if(end == null || e.isAfter(end))
+                			 end = (RelativeInstant)e;
+                	 }
+                 }
+             }
+         }
+         if(start != null && end != null)
+        	 return new RelativeInstant[]{start, end};
+         return null;
+    }
+    
+    public boolean isVisible() {
+        return true;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationBarListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationBarListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationBarListener.java	(revision 42196)
@@ -0,0 +1,136 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.app.animation.extension;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.animation.AnimateClient;
+import org.gvsig.timesupport.animation.TimeAnimation;
+import org.gvsig.timesupport.animation.TimeAnimationDataModel;
+import org.gvsig.timesupport.swing.api.panel.AnimationBarPanel;
+
+/**
+ * Listener for the preferences dialog
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class AnimationBarListener implements ActionListener, AnimateClient, IWindowListener {
+	private TimeAnimation                animation           = null;
+	private AnimationBarPanel            barPanel            = null;
+	private ViewDocument            view                = null;
+	private AnimationDialog              dialog              = null;
+	
+	public AnimationBarListener(TimeAnimation animation, AnimationDialog dialog, ViewDocument view) {
+		this.animation = animation;
+		animation.setAnimateClient(this);
+		this.view = view;
+		this.barPanel = (AnimationBarPanel)dialog.getMainComponent();
+		this.dialog = dialog;
+	}
+	
+	/**
+	 * Stops the thread an set this to null. These are the actions when the
+	 * window of animation is closed.
+	 */
+	public void destroyThread() {
+		if(animation != null) {
+			animation.stopAnimation();
+			animation = null;
+		}
+	}
+	
+	 /*
+     * (non-Javadoc)
+     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+     */
+	public void actionPerformed(ActionEvent e) {
+		if(barPanel.getIDSource(e.getSource()) == TimeAnimationDataModel.PLAY) {
+			if(animation != null)
+				animation.startAnimation();
+		}
+		if(barPanel.getIDSource(e.getSource()) == TimeAnimationDataModel.STOP) {
+			if(animation != null && animation.isAlive()) {
+				animation.stopAnimation();
+				//animation = null;
+			}
+		}
+		if(barPanel.getIDSource(e.getSource()) == TimeAnimationDataModel.PAUSE) {
+			if(animation != null)
+				animation.pauseAnimation();
+		}
+		
+		if(barPanel.getIDSource(e.getSource()) == TimeAnimationDataModel.CLOSE) {
+			if(animation != null) {
+				destroyThread();
+			}
+			this.dialog.close();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.animation.AnimateClient#update(org.gvsig.timesupport.RelativeInstant, org.gvsig.timesupport.RelativeInstant)
+	 */
+	public void update(RelativeInstant startDateTime, RelativeInstant endDateTime) {
+		//Updates the GUI
+		animation.getDataModel().setTimeWindow(startDateTime, endDateTime);
+		animation.getDataModel().setSliderPosition(startDateTime);
+		
+		//Updates the View
+		Time time = TimeSupportLocator.getManager().createRelativeInterval(startDateTime, endDateTime);
+		view.getMapContext().getViewPort().setTime(time);
+		view.getMapContext().invalidate();
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.animation.AnimateClient#endIteration(org.gvsig.timesupport.RelativeInstant)
+	 */
+	public void endIteration(RelativeInstant endDateTime) {
+		animation.getDataModel().setSliderPosition(endDateTime);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.timesupport.animation.AnimateClient#end()
+	 */
+	public void end() {
+		barPanel.resetButtonsStatus();
+	}
+
+	public void windowActivated() {
+		
+	}
+
+	public void windowClosed() {
+		if(animation != null) {
+			destroyThread();
+		}
+	}
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/package.html	(revision 42196)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.timesupport.app.animation.extension package documentation</title>
+</head>
+<body>
+
+	<p>Time animation gvSIG extension.</p>
+	
+	<p>
+	This extension gives to gvSIG the possibility of animate layers with temporal information.
+	Through this plugin you can configure parameters, play, stop and pause the motion. For each
+	step, the view of gvSIG shows a window of data from the input layer.  
+	</p>
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/java/org/gvsig/timesupport/app/animation/extension/AnimationDialog.java	(revision 42196)
@@ -0,0 +1,222 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.timesupport.app.animation.extension;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.i18n.Messages;
+
+/**
+* Dialog for the panel AnimationPreferences
+* 
+* @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
+*/
+public class AnimationDialog extends JPanel implements IWindow, IWindowListener {
+	private static final long         serialVersionUID    = 1L;
+	private JComponent                comp                = null;
+	private int                       width               = 0;
+	private int                       height              = 0;
+	private String                    label               = "";
+	private boolean                   notClosable         = false;
+	private IWindowListener           listener            = null;
+	private JPanel                    panelButtons        = null;
+	private JButton                   buttonAccept        = null;
+	private JButton                   buttonCancel        = null;
+	private boolean                   resizable           = false;
+	
+	/**
+	 * Constructor
+	 * @param comp
+	 * @param w 
+	 *        width for the dialog
+	 * @param h 
+	 *        height for the dialog
+	 * @param label 
+	 *        Window label 
+	 * @param frame 
+	 *        true to add the buttons accept and cancel and false to hide them
+	 * @param resizable
+	 *        true to get a resizable window and false to get a window with a fixed size
+	 */
+    public AnimationDialog(JComponent comp, 
+    		int w, 
+    		int h, 
+    		String label, 
+    		boolean frame, 
+    		boolean resizable) {
+		super();
+		this.resizable = resizable;
+		this.comp = comp;
+		this.width = w;
+		this.height = h;
+		this.label = label;
+		this.setLayout(new GridBagLayout());
+		GridBagConstraints gbc = new GridBagConstraints();
+		gbc.fill = GridBagConstraints.BOTH;
+		gbc.weightx = 1;
+		gbc.weighty = 1;
+        this.add(comp, gbc);
+        if(frame) {
+        	gbc.insets = new Insets(2, 2, 4, 2);
+    		gbc.fill = GridBagConstraints.HORIZONTAL;
+    		gbc.weighty = 0;
+    		gbc.gridy = 1;
+        	this.add(getJPanelButtons(), gbc);
+        }
+	}
+    
+    /**
+     * Sets the {@link IWindowListener} to manage the events
+     * @param listener {@link IWindowListener}
+     */
+    public void setWindowListener(IWindowListener listener) {
+    	this.listener = listener;
+    }
+    
+    /**
+     * Creates the window without the close button
+     */
+    public void setNotClosable() {
+    	notClosable = true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.gvsig.andami.ui.mdiManager.IWindow#getWindowInfo()
+     */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = null;
+		int code = WindowInfo.MODELESSDIALOG;
+		code = notClosable ? code | WindowInfo.NOTCLOSABLE : code;
+		code = resizable ? code | WindowInfo.RESIZABLE : code;
+		m_viewinfo = new WindowInfo(code);
+		m_viewinfo.setTitle(label);
+		m_viewinfo.setHeight(height);
+		m_viewinfo.setWidth(width);
+		return m_viewinfo;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.andami.ui.mdiManager.IWindow#getWindowProfile()
+	 */
+	public Object getWindowProfile() {
+		return WindowInfo.PROPERTIES_PROFILE;
+	}
+	
+	/**
+	 * Actions to execute when the window is closed
+	 */
+	public void close() {
+		try {
+			PluginServices.getMDIManager().closeWindow(this);
+		} catch (ArrayIndexOutOfBoundsException e) {
+			//Si la ventana no se puede eliminar no hacemos nada
+		}
+	}
+	
+	/**
+	 * Returns the component inside this window
+	 * @return {@link JComponent}
+	 */
+	public JComponent getMainComponent() {
+		return comp;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.andami.ui.mdiManager.IWindowListener#windowActivated()
+	 */
+	public void windowActivated() {
+		if(listener != null)
+			listener.windowActivated();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.andami.ui.mdiManager.IWindowListener#windowClosed()
+	 */
+	public void windowClosed() {
+		if(listener != null)
+			listener.windowClosed();
+	}
+	
+	/**
+	 * Gets the panel of buttons
+	 * @return
+	 */
+	public JPanel getJPanelButtons() {
+		if(panelButtons == null) {
+			panelButtons = new JPanel();
+			FlowLayout fl = new FlowLayout();
+			fl.setAlignment(FlowLayout.RIGHT);
+			fl.setHgap(2);
+			fl.setVgap(0);
+			panelButtons.setLayout(fl);
+			panelButtons.add(getButtonAccept(), fl);
+			panelButtons.add(getButtonCancel(), fl);
+		}
+		return panelButtons;
+	}
+	
+	/**
+	 * Gets the accept button
+	 * @return {@link JButton}
+	 */
+	public JButton getButtonAccept() {
+		if(buttonAccept == null)
+			buttonAccept = new JButton(Messages.getText("accept"));
+		return buttonAccept;
+	}
+
+	/**
+	 * Gets the cancel button
+	 * @return {@link JButton}
+	 */
+	public JButton getButtonCancel() {
+		if(buttonCancel == null)
+			buttonCancel = new JButton(Messages.getText("cancel"));
+		return buttonCancel;
+	}
+	
+	/**
+	 * Adds a listener for the buttons
+	 * @param listener {@link ActionListener}
+	 */
+	public void addAcceptCancelListener(ActionListener listener) {
+		getButtonAccept().addActionListener(listener);
+		getButtonCancel().addActionListener(listener);
+	}
+}  
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/text.properties	(revision 42196)
@@ -0,0 +1,27 @@
+animation=Animaci�n
+creates_time_animation=Crea una animaci�n usando la varible temporal
+animation_preferences=Preferencias de animaci�n
+animation_bar=Barra de animaci�n
+step=Paso
+interval=Intervalo
+windowtime=Ventana de tiempo
+timestep=Paso de tiempo
+visualization=Visualizaci�n
+speed=Velocidad
+loop=Loop
+iterations=Iteraciones
+day=D�a
+month=Mes
+week=Semana
+year=A�o
+hour=Hora
+minute=Minuto
+second=Segundo
+millisecond=Milisegundo
+noloop=No loop
+loop_once=Loop una vez
+loop_n=Loop N veces
+speedofprogress=Velocidad de progreso
+lbl_begin_position=Fecha de inicio
+lbl_end_position=Fecha de fin
+Time=Tiempo
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/text_en.properties	(revision 42196)
@@ -0,0 +1,27 @@
+animation=Animation
+creates_time_animation=Creates a animation using time varible
+animation_preferences=Animation preferences
+animation_bar=Animation bar
+step=Step
+interval=Interval
+windowtime=Window time
+timestep=Time step
+visualization=Visualization
+speed=Speed
+loop=Loop
+iterations=Iterations
+day=Day
+month=Month
+week=Week
+year=Year
+hour=Hour
+minute=Minute
+second=Second
+millisecond=Millisecond
+noloop=No loop
+loop_once=Loop once
+loop_n=Loop N
+speedofprogress=Speed of progress
+lbl_begin_position=Initial date
+lbl_end_position=End date
+Time=Time
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation/src/main/resources/config.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="org.gvsig.app" />
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.timesupport.app.animation.extension.AnimationSupportExtension"
+			description=""
+			active="true"
+			priority="1">
+			<menu text="View/Time/animation"
+				tooltip="creates_time_animation"
+				position="11"
+				action-command="AnimationSupport"/>
+		</extension>		
+	</extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.animation
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:59 CEST 2015
+buildNumber=13
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/test/resources/README.txt	(revision 42196)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/test/resources/log4j.xml	(revision 42196)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- 
+Log4J configuration file for unit tests execution.
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Appender configuration to show logging messages through the console -->
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
+		</layout>
+	</appender>
+
+	<!-- 
+	Activate logging messages of DEBUG level of higher only for the
+	org.gvsig.tools packages.
+	You can put full classes names or packages instead, to configure
+	logging for all the classes and subpackages of the package.
+	-->
+	<category name="org.gvsig.tools">
+		<priority value="DEBUG" />
+	</category>
+	<category name="org.gvsig.timesupport">
+		<priority value="DEBUG" />
+	</category>
+
+	<!-- 
+	By default, show only logging messages of INFO level or higher, 
+	through the previously configured CONSOLE appender. 
+	-->
+	<root>
+		<priority value="INFO" />
+		<appender-ref ref="CONSOLE" />
+	</root>
+</log4j:configuration>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+  <!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>xxx:xxx</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+  -->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/MapContextToInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/MapContextToInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/MapContextToInterval.java	(revision 42196)
@@ -0,0 +1,123 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.app.extension;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.timesupport.AbsoluteInstant;
+import org.gvsig.timesupport.AbsoluteIntervalTypeNotRegisteredException;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.RelativeInstant;
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MapContextToInterval {
+    private static final Logger LOG = LoggerFactory.getLogger(MapContextToInterval.class);
+    
+    private static final TimeSupportManager TIME_SUPPORT_MANAGER = TimeSupportLocator.getManager();
+    
+    private MapContext mapContext;
+    private Interval interval = null;
+    private List<Time> times;
+
+    public MapContextToInterval(MapContext mapContext) {
+        super();
+        this.mapContext = mapContext;        
+        times = new ArrayList();
+        update();
+    }
+    
+    public Interval getInterval(){
+        return interval;        
+    }
+    
+    public List getTimes(){
+        return times;
+    }
+
+    public MapContext getMapContext() {
+        return mapContext;
+    }
+    
+    
+    public void update(){
+        LayersIterator it = new LayersIterator(mapContext.getLayers());
+        Instant minInstant = null;
+        Instant maxInstant = null;
+        times.clear();
+        interval = null;
+
+        //TODO Separate absolute and relative time
+        while (it.hasNext()){
+            FLayer layer = it.nextLayer();
+            if (layer instanceof SingleLayer){
+                DataStore dataStore = ((SingleLayer)layer).getDataStore();
+                if (dataStore.getInterval() != null){                    
+                    Instant startInstant = dataStore.getInterval().getStart();
+                    Instant endInstant = dataStore.getInterval().getEnd();
+                    times.addAll(dataStore.getTimes());
+                    if (minInstant == null){
+                        minInstant = startInstant;
+                        maxInstant =  endInstant;
+                    }else{
+                        if (minInstant.isAfter(startInstant)){
+                            minInstant = startInstant;
+                        }
+                        if (maxInstant.isBefore(endInstant))
+                            maxInstant = endInstant;
+                    }                   
+                }
+            }
+        }
+        
+        if (minInstant != null){
+            if (minInstant.isAbsolute()){ 
+                try {
+                    interval = TIME_SUPPORT_MANAGER.createAbsoluteInterval((AbsoluteInstant)minInstant, (AbsoluteInstant)maxInstant);
+                } catch (AbsoluteIntervalTypeNotRegisteredException e) {
+                   LOG.error("Error creating the time interval", e);
+                }   
+            }else{
+                interval = TIME_SUPPORT_MANAGER.createRelativeInterval(((RelativeInstant)minInstant).toMillis(), ((RelativeInstant)maxInstant).toMillis());  
+            }               
+        }        
+    }
+    
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/package.html	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.timesupport package documentation</title>
+</head>
+<body>
+
+	<p>TimeSupport gvSIG extension</p>
+	
+	<p>
+	Shows TimeSupport into gvSIG.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/TimeSelectorObserver.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/TimeSelectorObserver.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/TimeSelectorObserver.java	(revision 42196)
@@ -0,0 +1,70 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.app.extension;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.timesupport.Time;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanel;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanelNotification;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class TimeSelectorObserver implements Observer{
+    private ViewDocument viewDocument = null;
+    private Time time = null;
+
+    public TimeSelectorObserver(ViewDocument viewDocument) {
+        super();
+        this.viewDocument = viewDocument;
+    }
+
+    public void update(Observable observable, Object notification) {
+        TimeSelectorPanel timeSliderPanel = (TimeSelectorPanel)observable;
+        TimeSelectorPanelNotification timeSelectorPanelNotification = (TimeSelectorPanelNotification)notification;
+
+        if (timeSelectorPanelNotification.getType().equals(TimeSelectorPanelNotification.UPDATE_TIME)){
+            Time newTime = timeSelectorPanelNotification.getTime();
+            if (time == null){
+                time = newTime;
+                filter();
+            }else{
+                if (!time.equals(newTime)){
+                    time = newTime;
+                    filter();
+                }
+            }  
+        } else if (timeSelectorPanelNotification.getType().equals(TimeSelectorPanelNotification.CLOSE_WINDOW)){
+            time = null;
+            filter();
+        }
+    }
+
+    private void filter(){
+        this.viewDocument.getMapContext().getViewPort().setTime(time);
+    }   
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/MapContextListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/MapContextListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/MapContextListener.java	(revision 42196)
@@ -0,0 +1,90 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.app.extension;
+
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanel;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class MapContextListener implements org.gvsig.fmap.mapcontext.layers.LayerCollectionListener{
+    private final MapContextToInterval mapContextToInterval;
+    private final TimeSelectorPanel timeSelectorPanel;
+
+    public MapContextListener(MapContextToInterval mapContextToInterval, TimeSelectorPanel timeSelectorPanel) {
+        super();
+        this.mapContextToInterval = mapContextToInterval;
+        this.timeSelectorPanel = timeSelectorPanel;
+    }
+
+    public void layerAdded(LayerCollectionEvent e) {
+        mapContextUpdated();
+    }
+
+    public void layerMoved(LayerPositionEvent e) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void layerRemoved(LayerCollectionEvent e) {
+        mapContextUpdated();        
+    }
+
+    public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void layerMoving(LayerPositionEvent e) throws CancelationException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void layerRemoving(LayerCollectionEvent e)
+    throws CancelationException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void visibilityChanged(LayerCollectionEvent e)
+    throws CancelationException {
+        // TODO Auto-generated method stub
+
+    }
+
+    private void mapContextUpdated(){
+        mapContextToInterval.update();   
+        if (mapContextToInterval.getInterval() == null){
+            timeSelectorPanel.setVisible(false);
+        }else{
+            timeSelectorPanel.setVisible(true);
+            timeSelectorPanel.initialize(mapContextToInterval.getInterval());
+            timeSelectorPanel.setInstants(mapContextToInterval.getTimes());  
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/TimeSupportExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/TimeSupportExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/java/org/gvsig/timesupport/app/extension/TimeSupportExtension.java	(revision 42196)
@@ -0,0 +1,130 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.timesupport.app.extension;
+
+import org.apache.commons.lang3.mutable.MutableBoolean;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.timesupport.AbsoluteIntervalTypeNotRegisteredException;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingException;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingLocator;
+import org.gvsig.timesupport.swing.api.TimeSupportSwingManager;
+import org.gvsig.timesupport.swing.api.panel.TimeSelectorPanel;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Andami extension to show TimeSupport in the application.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class TimeSupportExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(TimeSupportExtension.class);
+
+    public void initialize() {
+        // Do nothing
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+    }
+
+    public void execute(String actionCommand) {
+        try {
+            showTimeSupport();
+        } catch (Exception e) {
+            logger.warn("Can't show time support dialog",e);
+        }
+    }
+
+    public void showTimeSupport() throws CloneNotSupportedException, LocatorException, TimeSupportSwingException, AbsoluteIntervalTypeNotRegisteredException {
+
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewDocument = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewDocument == null ) {
+            return;
+        }
+        
+        TimeSupportSwingManager swingManager = TimeSupportSwingLocator.getSwingManager();
+        
+        MapContext mapContext = viewDocument.getMapContext();
+        MapContextToInterval mapContextToInterval = new MapContextToInterval(mapContext);
+        
+        TimeSelectorPanel timeSelectorPanel = swingManager.createTimeSelectorPanel(mapContextToInterval.getInterval());
+        timeSelectorPanel.setInstants(mapContextToInterval.getTimes());
+        timeSelectorPanel.addObserver(new TimeSelectorObserver(viewDocument));
+        
+        mapContext.getLayers().addLayerCollectionListener(new MapContextListener(mapContextToInterval, timeSelectorPanel));
+
+        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
+        windowManager.showWindow(timeSelectorPanel, viewDocument.getName(), WindowManager.MODE.TOOL);
+     }
+
+    public boolean isEnabled() {
+        
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewDocument = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewDocument == null ) {
+            return false;
+        }
+        final MutableBoolean enabled = new MutableBoolean(false);
+        
+        MapContext mapContext = viewDocument.getMapContext();        
+        try {
+            mapContext.getLayers().accept(new Visitor() {                
+                public void visit(Object layer) throws VisitCanceledException, BaseException {
+                    if (layer instanceof SingleLayer){
+                        DataStore dataStore = ((SingleLayer)layer).getDataStore();
+                        if (dataStore.getInterval() != null){           
+                            enabled.setValue(true);
+                            throw new VisitCanceledException();
+                        }
+                    }                    
+                }
+            });
+        } catch (Exception ex) {
+            logger.warn("Unable to determine if there are layers with temporal information.",ex);
+        }
+
+        return enabled.getValue();
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/text.properties	(revision 42196)
@@ -0,0 +1,22 @@
+Add_Temporal_Filter=A�adir filtro temporal
+add_temporal_filter_description=A�ade un filtro temporal a la vista
+temporal_filter=Filtro temporal
+rdButton_none=Ninguno
+rdButton_interval=Intervalo
+rdButton_instant=Instante
+lbl_begin_position=Fecha inicial 
+lbl_end_position=Fecha final
+temporal_btn_cancel=Cerrar
+checkbox_change_type_time=Tiempo absoluto / Tiempo relativo
+lbl_sos_years=A�os
+lbl_sos_month_of_year=Mes del a�o
+lbl_sos_week_of_wekk_year=Semana del a�o
+lbl_sos_weeks=Semanas
+lbl_sos_days=D�as
+lbl_sos_hours=Horas
+lbl_sos_minutes=Minutos
+lbl_sos_seconds=Segundos
+lbl_sos_millis=Mil�simas
+radio_start=Desde inicio
+radio_end=Desde el fin
+Time=Tiempo
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/text_en.properties	(revision 42196)
@@ -0,0 +1,21 @@
+Add_Temporal_Filter=Add temporal filter
+add_temporal_filter_description=Add a temporal filter to the view
+temporal_filter=Temporal Filter
+rdButton_none=None
+rdButton_interval=Interval
+rdButton_instant=Instant
+lbl_begin_position=Start date
+lbl_end_position=End date
+temporal_btn_cancel=Close
+checkbox_change_type_time=Absolutely time / Relative time
+lbl_sos_years=Years
+lbl_sos_month_of_year=Month of year
+lbl_sos_week_of_wekk_year=Week of Year
+lbl_sos_days=Days
+lbl_sos_hours=Hours
+lbl_sos_minutes=Minutes
+lbl_sos_seconds=Seconds
+lbl_sos_millis=Millis
+radio_start=Start time
+radio_end=End time
+Time=Time
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/config.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="org.gvsig.app" />
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.timesupport.app.extension.TimeSupportExtension"
+			description=""
+			active="true"
+			priority="1">
+			<menu text="View/Time/Add_Temporal_Filter"
+				tooltip="add_temporal_filter_description"
+				position="11"
+				action-command="TimeSupport"/>
+		</extension>		
+	</extensions>
+</plugin-config>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/build.number
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/build.number	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/build.number	(revision 42196)
@@ -0,0 +1,3 @@
+#Build Number for ANT. Do not edit!
+#Tue Apr 28 16:00:47 CEST 2009
+build.number=2005
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/install/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/install/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/src/main/resources/install/install.xml	(revision 42196)
@@ -0,0 +1,15 @@
+<project name="org.gvsig.timesupport.app.viewfilter.extension" default="main" basedir=".">
+	<property name="app_lib_dir" location="${gvsig_dir}/gvSIG/extensiones/org.gvsig.app/lib/"/>
+	<target name="main" depends="remove_old_files, copy_files"/>
+    <target name="remove_old_files">
+   		 <delete>
+    		<fileset dir="${app_lib_dir}" includes="org.gvsig.fmap.dal-2.0-SNAPSHOT*.jar"/>
+			<fileset dir="${app_lib_dir}" includes="org.gvsig.fmap.mapcontext-2.0-SNAPSHOT*.jar"/>
+  		</delete>			
+	</target>
+	<target name="copy_files">
+    	<copy todir="${gvsig_dir}">
+    		<fileset dir="./files" includes="**"/>
+		</copy>
+	</target>   
+</project>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter/pom.xml	(revision 42196)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.timesupport.app.viewfilter</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>This plugin add a control to make filters by time</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.app</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.swing.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+            <scope>compile</scope>
+        </dependency>   
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>             
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.andami</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.app.mainplugin</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <properties>
+        <gvsig.package.info.name>Tools: Filter a view by time</gvsig.package.info.name>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/org.gvsig.timesupport.app.viewfilter
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.timesupport.app/pom.xml	(revision 42196)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.timesupport.app</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <description>Extension of the TimeSupport example project</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.plugin</artifactId>
+        <version>2.0.97</version>
+    </parent>
+
+    <modules>
+        <module>org.gvsig.timesupport.app.viewfilter</module>
+        <module>org.gvsig.timesupport.app.animation</module>
+    </modules>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.csv.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.csv.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.csv.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>Formats: CSV file format support</name>
+  <description>CSV file format support</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.csv.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  <dependencies>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.andami</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.i18n</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+ 
+       <dependency>
+           <groupId>org.gvsig</groupId>
+           <artifactId>org.gvsig.fmap.dal.file.csv</artifactId>
+     		<scope>runtime</scope>
+       </dependency>
+		<dependency>
+		  <groupId>net.sf.supercsv</groupId>
+		  <artifactId>super-csv</artifactId>
+   	      <scope>runtime</scope>
+		</dependency>
+	    <dependency>
+		  <groupId>org.apache.commons</groupId>
+		  <artifactId>commons-lang3</artifactId>
+   	      <scope>runtime</scope>
+	    </dependency>
+            
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.1.0-A</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Formats</gvsig.package.info.categories>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:58 CEST 2015
+buildNumber=2279

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+  <depends plugin-name="org.gvsig.app.mainplugin" />
+  <libraries library-dir="lib"/>
+  <resourceBundle name="text"/>
+  <extensions>
+    <extension class-name="org.gvsig.andami.LibraryExtension"
+      description=""
+      active="true">
+    </extension>
+  </extensions>
+
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,65 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>org.gvsig:org.gvsig.fmap.dal.file.csv</include>
+        <include>net.sf.supercsv:super-csv</include>
+        <include>org.apache.commons:commons-lang3</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.csv.app/org.gvsig.csv.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project

.classpath

target

.settings


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:58 CEST 2015
+buildNumber=2278

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/java/org/gvsig/geometry/app/generalpath/FlatnessExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/java/org/gvsig/geometry/app/generalpath/FlatnessExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/java/org/gvsig/geometry/app/generalpath/FlatnessExtension.java	(revision 42196)
@@ -0,0 +1,45 @@
+package org.gvsig.geometry.app.generalpath;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+
+public class FlatnessExtension extends Extension {
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("preferences", "preferences-layer-modify-flatness", this);
+
+        Double flatness =
+            (Double) getPlugin().getPluginProperties().getDynValue("flatness");
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        geomManager.setFlatness(flatness.doubleValue());
+    }
+
+    public void execute(String actionCommand) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public boolean isEnabled() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean isVisible() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public void postInitialize() {
+        ExtensionPointManager extensionPoints =
+            ToolsLocator.getExtensionPointManager();
+        ExtensionPoint ep = extensionPoints.add("AplicationPreferences", "");
+        ep.append("Flatness", "", new FlatnessPage());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/java/org/gvsig/geometry/app/generalpath/FlatnessPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/java/org/gvsig/geometry/app/generalpath/FlatnessPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/java/org/gvsig/geometry/app/generalpath/FlatnessPage.java	(revision 42196)
@@ -0,0 +1,220 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.geometry.app.generalpath;
+
+
+
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+
+public class FlatnessPage extends AbstractPreferencePage implements KeyListener  {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -6521882508307037082L;
+
+    private static final Logger logger = LoggerFactory.getLogger(FlatnessPage.class);
+
+    public static final String ID = FlatnessPage.class.getName();
+
+    private JPanel flatnessPanel;
+    private JTextArea jTextArea = null;
+    private JTextField txtFlatness;
+	private boolean valChanged = false;
+
+    private DynObject pluginProperties;
+    private PluginServices plugin;
+
+    private ImageIcon icon;
+
+
+
+    public FlatnessPage() {
+        initComponents();
+    }
+
+    private void initComponents() {
+        icon = IconThemeHelper.getImageIcon("preferences-layer-modify-flatness");
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        this.plugin = pluginManager.getPlugin(this);
+        this.pluginProperties = this.plugin.getPluginProperties();
+
+        this.flatnessPanel = getFlatnessPanel();
+
+        this.setLayout(new BorderLayout());
+        this.add(this.flatnessPanel, BorderLayout.NORTH);
+        initializeValues();
+    }
+
+    public void storeValues() throws StoreException {
+
+      double flatness;
+      try{
+          flatness=Double.parseDouble(txtFlatness.getText());
+      }catch (Exception e) {
+          throw new StoreException(PluginServices.getText(this,"minimum_size_of_line_incorrect"));
+      }
+      GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+      geometryManager.setFlatness(flatness);
+
+      this.pluginProperties.setDynValue("flatness", flatness);
+      this.plugin.savePluginProperties();
+    }
+
+    public void setChangesApplied() {
+      setChanged(false);
+    }
+
+    public String getID() {
+        return ID;
+    }
+
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("Flatness");
+    }
+
+    public JPanel getPanel() {
+        return this;
+    }
+
+    public void initializeValues() {
+        Double flatness = (Double) pluginProperties.getDynValue("flatness");
+        txtFlatness.setText(String.valueOf(flatness));
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+        geometryManager.setFlatness(flatness.doubleValue());
+    }
+
+    public void initializeDefaults() {
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+        txtFlatness.setText(String.valueOf(geometryManager.getFlatness()));
+    }
+
+    public ImageIcon getIcon() {
+        return this.icon;
+    }
+
+    public boolean isValueChanged() {
+        return valChanged;
+    }
+
+    public boolean isResizeable() {
+      return true;
+    }
+
+
+  public JPanel getFlatnessPanel(){
+  if (flatnessPanel == null){
+      flatnessPanel = new JPanel();
+      flatnessPanel.setLayout(new GridBagLayout());
+      flatnessPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+
+      GridBagConstraints constraints = new GridBagConstraints();
+      constraints.gridx = 0;
+      constraints.gridy = 0;
+      constraints.fill = GridBagConstraints.HORIZONTAL;
+      constraints.weightx = 1.0;
+      constraints.gridwidth = 2;
+      constraints.insets = new Insets(0, 0, 5, 0);
+      flatnessPanel.add(getJTextArea(), constraints);
+
+      constraints = new GridBagConstraints();
+      constraints.gridx = 0;
+      constraints.gridy = 1;
+      flatnessPanel.add(new JLabel(PluginServices.getText(this, "densityfication") + ":"), constraints);
+
+      txtFlatness = new JTextField("", 15);
+      txtFlatness.addKeyListener(this);
+      constraints = new GridBagConstraints();
+      constraints.gridx = 1;
+      constraints.gridy = 1;
+      constraints.fill = GridBagConstraints.HORIZONTAL;
+      constraints.weightx = 1.0;
+      flatnessPanel.add(txtFlatness, constraints);
+  }
+  return flatnessPanel;
+}
+
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return javax.swing.JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea();
+			jTextArea.setBounds(new java.awt.Rectangle(13,7,285,57));
+			jTextArea.setForeground(java.awt.Color.black);
+			jTextArea.setBackground(java.awt.SystemColor.control);
+			jTextArea.setRows(3);
+			jTextArea.setWrapStyleWord(true);
+			jTextArea.setLineWrap(true);
+			jTextArea.setEditable(false);
+			jTextArea.setText(PluginServices.getText(this,"specifies_the_minimum_size_of_the_lines_that_will_form_the_curves"));
+		}
+		return jTextArea;
+	}
+
+    public void keyTyped(KeyEvent e) {
+        valChanged = true;
+    }
+
+    public void keyPressed(KeyEvent e) {
+        valChanged = true;
+    }
+
+    public void keyReleased(KeyEvent e) {
+        // do nothing
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+  <depends plugin-name="org.gvsig.projection.app.mainplugin" />
+  <alternativeNames name="org.gvsig.geometry.app.mainplugin"/>
+  <libraries library-dir="lib"/>
+  <resourceBundle name="text"/>
+  <extensions>
+    <extension class-name="org.gvsig.andami.LibraryExtension"
+      description=""
+      active="true">
+    </extension>
+    <extension class-name="org.gvsig.geometry.app.generalpath.FlatnessExtension"
+      description="Support flatness preference"
+      active="true">
+    </extension>
+
+  </extensions>
+
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/images/preferences/preferences-layer-modify-flatness.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/images/preferences/preferences-layer-modify-flatness.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/resources-plugin/plugin-persistence.def	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.geometry.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.geometry.app.generalpath">
+      <description>Persistence for the core plugin</description>
+      <fields>
+
+        <field name="flatness" type="Double" defaultValue="0.02" mandatory="true">
+          <description></description>
+        </field>
+
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,66 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>com.vividsolutions:jts</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.api</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.generalpath</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.operation</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/pom.xml	(revision 42196)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.geometry.app.generalpath</artifactId>
+  <packaging>jar</packaging>
+  <name>Geometry Support</name>
+  <description>This project has the geometries library for use in the application based  on the use of GeneralPath</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.geometry.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  <dependencies>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.andami</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.i18n</artifactId>
+          <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+       <dependency>
+           <groupId>com.vividsolutions</groupId>
+           <artifactId>jts</artifactId>
+     		<scope>runtime</scope>
+       </dependency>
+       <dependency>
+           <groupId>org.gvsig</groupId>
+           <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+     		<scope>compile</scope>
+       </dependency>
+       <dependency>
+           <groupId>org.gvsig</groupId>
+           <artifactId>org.gvsig.fmap.geometry.generalpath</artifactId>
+     		<scope>runtime</scope>
+       </dependency>
+       <dependency>
+           <groupId>org.gvsig</groupId>
+           <artifactId>org.gvsig.fmap.geometry.operation</artifactId>
+     		<scope>runtime</scope>
+       </dependency>
+
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.projection.app.mainplugin -ge 1</gvsig.package.info.dependencies>
+      <gvsig.package.info.codealias>org.gvsig.geometry.app.mainplugin</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.generalpath
___________________________________________________________________
Added: svn:ignore
   + target
.settings
.project
.classpath
.pom.xml.swp


Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml	(revision 42196)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.geometry.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.geometry.app.generalpath</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml	(revision 42196)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.daltransform.app</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <modules>
+      <module>org.gvsig.daltransform.app.mainplugin</module>
+      <module>org.gvsig.daltransform.app.eventtheme</module>
+      <module>org.gvsig.daltransform.app.join</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:56 CEST 2015
+buildNumber=2147

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/test/java/org/gvsig/app/join/dal/feature/data/join.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/test/java/org/gvsig/app/join/dal/feature/data/join.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/test/java/org/gvsig/app/join/dal/feature/JoinTransformTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/test/java/org/gvsig/app/join/dal/feature/JoinTransformTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/test/java/org/gvsig/app/join/dal/feature/JoinTransformTest.java	(revision 42196)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.app.join.dal.feature;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.gvsig.daltransform.BaseFeatureStoreTransform;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class JoinTransformTest extends BaseFeatureStoreTransform {
+	private final File dbf = new File("src-test/org/gvsig/app/join/dal/feature/data/join.dbf");
+	
+	@Override
+	public DataStoreParameters getDefaultDataStoreParameters()
+			throws DataException {		
+	    DataStoreParameters dbfParameters = null;
+        dbfParameters = dataManager.createStoreParameters("DBFStoreParameters");
+
+        dbfParameters.setDynValue("dbfFile", dbf);
+
+		return dbfParameters;
+	}
+
+	@Override
+	public FeatureStoreTransform getFeatureStoreTransform()
+			throws DataException, ValidateDataParametersException {
+		URL url = JoinTransformTest.class.getResource("data/events.dbf");
+		
+		FeatureStore store = (FeatureStore) dataManager.createStore(this
+				.getDefaultDataStoreParameters());
+		
+		FeatureStore store2 = (FeatureStore) dataManager.createStore(this
+				.getDefaultDataStoreParameters2());		
+		
+		JoinTransform transform = new JoinTransform();
+				
+		ArrayList names = new ArrayList();
+		Iterator iter = store2.getDefaultFeatureType().iterator();// <FeatureAttributeDescriptor>
+		while (iter.hasNext()) {
+			names.add(((FeatureAttributeDescriptor) iter.next()).getName());
+		}
+		
+		transform.initialize(store, store2, 
+				"NOMBRE", "NOMBRE", 
+				null, null, 
+				(String[]) names.toArray(new String[0]));
+		return transform;
+	}
+	
+	private DataStoreParameters getDefaultDataStoreParameters2() throws InitializeException, ProviderNotRegisteredException{
+		DataStoreParameters dbfParameters = dataManager.createStoreParameters("DBFStoreParameters");
+		dbfParameters.setDynValue("dbfFile",dbf);
+		return dbfParameters;
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/test/java/org/gvsig/app/join/dal/feature/JoinTransformTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,14 @@
+join_description=Join two tables creates a new table from a two origin tables. It is necessary a common attribute to apply the join. 
+join_name=Join
+join_first_key=Select the key of the first table
+join_second_key=Select the key of the second table
+join_first_prefix=Type a prefix for the first table
+join_second_prefix=Type a prefix for the second table
+join_select_attributes=Select the attributes to join
+_Unable_to_refresh_table_contents=Unable to refresh table contents
+_First_table_has_no_fields=First table has no fields
+_Join=Join
+_Error_getting_attributes=Error getting attributes
+_No_compatible_field_in_second_table=No compatible fields in second table
+_Remove_join=Remove join
+_Create_join=Create join

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,14 @@
+join_description=La uni�n entre tablas crea una nueva tabla a partir de dos tablas de origen. Para ello es necesario que ambas tengan un campo con el que poder hacer la uni�n.
+join_name=Uni�n
+join_first_key=Selecciona la clave de la primera tabla
+join_second_key=Selecciona la clave de la segunda tabla
+join_first_prefix=Escriba el prefijo de la primera tabla
+join_second_prefix=Escriba el prefijo de la segunda tabla
+join_select_attributes=Selecciona los atributos a unir
+_Unable_to_refresh_table_contents=No se ha podido actualizar la tabla
+_First_table_has_no_fields=La primera tabla no tiene campos
+_Join=Uni�n de tablas
+_Error_getting_attributes=Error al obtener campos
+_No_compatible_field_in_second_table=No hay campos compatibles en la segunda tabla
+_Remove_join=Deshacer uni�n
+_Create_join=Crear uni�n
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app.mainplugin"/>
+	<depends plugin-name="org.gvsig.daltransform.app.mainplugin"/>
+	<depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />	
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.app.join.RemoveTableUnion"
+			description="Extensi�n encargada de quitar uniones de las tablas."
+			active="true">
+			
+            <action 
+                name="table-remove-join"
+                label="_Remove_join" 
+                tooltip="_Remove_join" 
+                position="501200000" 
+                action-command="table-remove-join"
+                icon="table-remove-join"
+                accelerator=""
+                />
+            
+			
+			<menu
+			     name="table-remove-join" 
+			     text="Table/_Remove_join"
+			/>
+			
+			<tool-bar name="table_tools">
+				<action-tool name="table-remove-join"/>
+			</tool-bar>
+
+		</extension>
+		
+		
+		<extension class-name="org.gvsig.app.join.JoinToolExtension"
+			description="Extensi�n encargada de gestionar las operaciones sobre las tablas."
+			active="true">
+
+            <action 
+                name="table-create-join"
+                label="_Create_join" 
+                tooltip="_Create_join" 
+                position="501200000" 
+                action-command="table-create-join"
+                icon="table-create-join"
+                accelerator=""
+                />
+            
+            <menu
+                name="table-create-join" 
+                text="Table/_Create_join"
+                />
+                
+			<tool-bar name="table_tools">
+				<action-tool name="table-create-join"/>
+			</tool-bar>
+		
+		</extension>			
+	</extensions>
+	<icon src="gvsig-logo-icon" text="gvSIG"/>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/images/action/table-remove-join.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/images/action/table-remove-join.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/images/action/table-create-join.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/images/action/table-create-join.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.app.join.JoinTransformLibrary
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,64 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinToolExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinToolExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinToolExtension.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.join;
+
+import java.awt.Component;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.extension.TableOperations;
+import org.gvsig.app.join.daltransform.JoinTransformGui;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.swing.DataTransformWizard;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class JoinToolExtension extends TableOperations {
+
+	public void initialize() {
+		IconThemeHelper.registerIcon("action", "table-create-join", this);
+	}
+	
+	/**
+	 * @see com.iver.mdiApp.plugins.IExtension#updateUI(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+		if( "table-create-join".equalsIgnoreCase(actionCommand)) {
+		    try {
+		        DataTransformWizard dataTransformWizard = DataTransformLocator.getDataTransformManager().createWizard();
+	            dataTransformWizard.setDataTransformGui(new JoinTransformGui());
+		        PluginServices.getMDIManager().addWindow(dataTransformWizard.getWindow());
+	        } catch (Exception e) {
+	            
+	            IWindow iw = PluginServices.getMDIManager().getActiveWindow();
+	            JOptionPane.showInternalMessageDialog(
+	                iw instanceof Component ? (Component) iw : null,
+	                    PluginServices.getText(this, "transform_create_wizard_exception"),
+	                    PluginServices.getText(this, "feature_transform"),
+	                    JOptionPane.ERROR_MESSAGE);
+	        }
+		}
+	}		
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinToolExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/JoinTransformGui.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/JoinTransformGui.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/JoinTransformGui.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.join.daltransform;
+
+import java.awt.Dimension;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.join.dal.feature.JoinTransform;
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.daltransform.swing.DataTransformWizardPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTypesTablePanel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.ConfigurableFeatureTableModel;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class JoinTransformGui implements DataTransformGui {
+    
+    private static Logger logger = LoggerFactory.getLogger(JoinTransformGui.class);
+    
+	private SelectSecondDataStoreWizardPanel secondDataStoreWizard = null;
+	private SelectParametersWizardPanel parametersWizard = null;
+	private List<DataTransformWizardPanel> panels = null;	
+	
+	public JoinTransformGui() {
+		super();			
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#createFeatureStoreTransform(org.gvsig.fmap.dal.feature.FeatureStore)
+	 */
+	public FeatureStoreTransform createFeatureStoreTransform(
+			FeatureStore featureStore) throws DataException {
+		JoinTransform transform = new JoinTransform();
+		transform.initialize(featureStore,
+				secondDataStoreWizard.getSelectedFeatureStore(),
+				parametersWizard.getKeyAttr1(),
+				parametersWizard.getkeyAtrr2(),
+				parametersWizard.getPrefix1(),
+				parametersWizard.getPrefix2(),
+				parametersWizard.getAttributes()
+		);
+		return transform;
+	}
+
+
+
+    /* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#getDescription()
+	 */
+	public String getDescription() {
+		return PluginServices.getText(this, "join_description");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#createPanels(org.gvsig.app.daltransform.gui.FeatureTransformWizardModel)
+	 */
+	public List<DataTransformWizardPanel> createPanels() {
+		if (panels == null){
+			parametersWizard = new SelectParametersWizardPanel();
+			secondDataStoreWizard = new SelectSecondDataStoreWizardPanel(parametersWizard);
+			panels = new ArrayList<DataTransformWizardPanel>();
+			panels.add(secondDataStoreWizard);
+			panels.add(parametersWizard);				
+		}	
+		return panels;		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#getName()
+	 */
+	public String getName() {
+		return PluginServices.getText(this, "join_name");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.DataTransformGui#getMinDimension()
+	 */
+	public Dimension getMinDimension() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public boolean accept(FeatureStore featureStore) {        
+        return true;
+    }
+
+   
+    
+    public String toString() {
+        return getName();
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/JoinTransformGui.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectSecondDataStoreWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectSecondDataStoreWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectSecondDataStoreWizardPanel.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.join.daltransform;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.daltransform.swing.impl.SelectDataStoreWizardPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class SelectSecondDataStoreWizardPanel extends SelectDataStoreWizardPanel{
+	private SelectParametersWizardPanel selectParametersWizardPanel = null;
+	
+	/**
+	 * @param featureTransformWizardModel
+	 */
+	public SelectSecondDataStoreWizardPanel(SelectParametersWizardPanel selectParametersWizardPanel) {
+		super();	
+		this.selectParametersWizardPanel = selectParametersWizardPanel;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.SelectDataStoreWizard#getPanelTitle()
+	 */	
+	public String getPanelTitle() {
+		return PluginServices.getText(this, "transform_second_datastore_selection");
+	}
+
+	/* (non-Javadoc)
+	 * @see jwizardcomponent.JWizardPanel#next()
+	 */	
+	public void nextPanel() {
+        selectParametersWizardPanel.setSecondFeatureStore(getSelectedFeatureStore());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.SelectDataStoreWizard#update()
+	 */
+	public void updatePanel() {
+		removeFeatureStore(getDataTransformWizard().getFeatureStore());
+		super.updatePanel();
+	}
+	
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectSecondDataStoreWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectParametersWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectParametersWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectParametersWizardPanel.java	(revision 42196)
@@ -0,0 +1,333 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.join.daltransform;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.join.utils.TransformUtils;
+import org.gvsig.daltransform.swing.DataTransformWizardPanel;
+import org.gvsig.daltransform.swing.impl.AbstractDataTransformWizardPanel;
+import org.gvsig.daltransform.swing.impl.components.FeatureTypeAttributesCombo;
+import org.gvsig.daltransform.swing.impl.components.FeatureTypeAttributesList;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ParameterMissingException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class SelectParametersWizardPanel extends AbstractDataTransformWizardPanel
+implements DataTransformWizardPanel, ActionListener{
+    
+    private static Logger logger =
+        LoggerFactory.getLogger(SelectParametersWizardPanel.class);
+    
+	private javax.swing.JLabel attributesLabel;
+	private FeatureTypeAttributesList attributesList;
+	private javax.swing.JScrollPane attributesScroll;
+	private FeatureTypeAttributesCombo key1Combo;
+	private javax.swing.JLabel key1Label;
+	private FeatureTypeAttributesCombo key2_Combo;
+	private javax.swing.JLabel key2Label;
+	private javax.swing.JLabel prefix1Label;
+	private javax.swing.JTextField prefix1Text;
+	private javax.swing.JLabel prefix2Label;
+	private javax.swing.JTextField prefix2Text; 
+	
+	private FeatureStore secondFeatStore = null;
+
+	/**
+	 * @param featureTransformWizardModel
+	 */
+	public SelectParametersWizardPanel() {
+		super();	
+	}
+	
+	   
+	public void updatePanel() {
+        initComponents();
+        initLabels();
+        try {
+            updateFeatureStores();
+        } catch (DataException e) {
+            logger.error("While updating feature stores", e);
+        }
+	}
+	
+	private void initLabels(){
+		key1Label.setText(PluginServices.getText(this,"join_first_key"));
+		key2Label.setText(PluginServices.getText(this,"join_second_key"));
+		prefix1Label.setText(PluginServices.getText(this,"join_first_prefix"));
+		prefix2Label.setText(PluginServices.getText(this,"join_second_prefix"));
+		attributesLabel.setText(PluginServices.getText(this,"join_select_attributes"));
+	}
+
+	private void initComponents() {
+		removeAll();
+		prefix2Text = new javax.swing.JTextField();
+		key2_Combo = new FeatureTypeAttributesCombo();
+		prefix1Text = new javax.swing.JTextField();
+		key1Label = new javax.swing.JLabel();
+		
+		key1Combo = new FeatureTypeAttributesCombo();
+		// listen to changes in first combo
+		// we'll update second combo leaving
+		// fields of same type
+		key1Combo.addActionListener(this);
+		
+		key2Label = new javax.swing.JLabel();
+		prefix1Label = new javax.swing.JLabel();
+		prefix2Label = new javax.swing.JLabel();
+		attributesLabel = new javax.swing.JLabel();
+		attributesScroll = new javax.swing.JScrollPane();
+		attributesList = new FeatureTypeAttributesList();
+
+		setLayout(new java.awt.GridBagLayout());
+		
+		java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 7;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 3, 2);
+		add(prefix2Text, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 3;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 3, 2);
+		add(key2_Combo, gridBagConstraints);
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 5;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 3, 2);
+		add(prefix1Text, gridBagConstraints);
+
+		key1Label.setText("jLabel1");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(key1Label, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 3, 2);
+		add(key1Combo, gridBagConstraints);
+
+		key2Label.setText("jLabel2");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.insets = new java.awt.Insets(3, 2, 2, 2);
+		add(key2Label, gridBagConstraints);
+
+		prefix1Label.setText("jLabel1");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 4;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.insets = new java.awt.Insets(3, 2, 2, 2);
+		add(prefix1Label, gridBagConstraints);
+
+		prefix2Label.setText("jLabel2");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 6;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.insets = new java.awt.Insets(3, 2, 2, 2);
+		add(prefix2Label, gridBagConstraints);
+
+		attributesLabel.setText("attributesLabel");
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 8;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.insets = new java.awt.Insets(3, 2, 2, 2);
+		add(attributesLabel, gridBagConstraints);
+
+		attributesScroll.setViewportView(attributesList);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 9;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(attributesScroll, gridBagConstraints);
+	}
+	
+
+	/**
+	 * @return
+	 */
+	public String getKeyAttr1() {
+		return key1Combo.getSelectedFeatureAttributeDescriptor().getName();
+	}
+
+	/**
+	 * @return
+	 */
+	public String getkeyAtrr2() {
+		return key2_Combo.getSelectedFeatureAttributeDescriptor().getName();
+	}
+
+	/**
+	 * @return
+	 */
+	public String getPrefix1() {
+		return prefix1Text.getText();
+	}
+
+	/**
+	 * @return
+	 */
+	public String getPrefix2() {
+		return prefix2Text.getText();
+	}
+
+	/**
+	 * @return
+	 */
+	public String[] getAttributes() {
+		return attributesList.getAttributesName();
+	}
+	
+	
+	public void setSecondFeatureStore(FeatureStore selectedFeatureStore) {
+	    secondFeatStore = selectedFeatureStore;
+	    
+	}
+	/**
+	 * @param selectedFeatureStore
+	 * @throws DataException 
+	 */
+	public void updateFeatureStores() throws DataException {
+	    
+	    if (secondFeatStore == null) {
+	        throw new ParameterMissingException("Second feature store");
+	    }
+	    
+		key1Combo.addFeatureAttributes(getFeatureStore().getDefaultFeatureType());
+		attributesList.addFeatureAttributes(secondFeatStore.getDefaultFeatureType());
+		
+		if (key1Combo.getItemCount() == 0) {
+		    
+            String _msg =
+                Messages.getText("_First_table_has_no_fields");
+            String _tit = Messages.getText("_Join");
+            
+            JOptionPane.showMessageDialog(
+                this, _msg, _tit,
+                JOptionPane.ERROR_MESSAGE);
+            
+		    getDataTransformWizard().setApplicable(false);
+        } else {
+            key1Combo.setSelectedIndex(0);
+		}
+	}
+
+
+	/**
+	 * Listen to changes in first combo box (key1)
+	 */
+    public void actionPerformed(ActionEvent e) {
+        
+        Object src = e.getSource();
+        if (src == key1Combo
+            && key1Combo != null
+            && key2_Combo != null
+            && secondFeatStore != null) {
+            
+            FeatureAttributeDescriptor att =
+                key1Combo.getSelectedFeatureAttributeDescriptor();
+            if (att != null) {
+                
+                int the_type = att.getType();
+                key2_Combo.removeAllItems();
+                FeatureType ft = null;
+                
+                try {
+                    ft = secondFeatStore.getDefaultFeatureType();
+                } catch (DataException de) {
+                    logger.info("While getting feat type: " + de.getMessage());
+                    getDataTransformWizard().setApplicable(false);
+                    ApplicationLocator.getManager().message(
+                        Messages.getText("_Error_getting_attributes"),
+                        JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+                
+                ArrayList<Integer> comparable_types =
+                    TransformUtils.getComparableDataTypes(ft, the_type);
+                
+                if (key2_Combo.addFeatureAttributes(ft, comparable_types) == 0) {
+
+                    String _msg =
+                        Messages.getText("_No_compatible_field_in_second_table");
+                    String _tit = Messages.getText("_Join");
+                    
+                    JOptionPane.showMessageDialog(
+                        this, _msg, _tit,
+                        JOptionPane.ERROR_MESSAGE);
+                    getDataTransformWizard().setApplicable(false);
+                    
+                } else {
+                    getDataTransformWizard().setApplicable(true);
+                    // JOptionPane.showMessageDialog(this, "(2) OK !!");
+                }
+            }
+        }
+        
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectParametersWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/RemoveTableUnion.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/RemoveTableUnion.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/RemoveTableUnion.java	(revision 42196)
@@ -0,0 +1,164 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.join;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.join.dal.feature.JoinTransform;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class RemoveTableUnion extends Extension{
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+		IconThemeHelper.registerIcon("action", "table-remove-join", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+		if( "table-remove-join".equalsIgnoreCase(actionCommand)) {
+			FeatureTableDocumentPanel t = (FeatureTableDocumentPanel) PluginServices.getMDIManager().getActiveWindow();
+			TableDocument pt = t.getModel();
+			FeatureStore fs = pt.getStore();
+			this.removeJoinTransfor(fs);
+	
+			//		TODO
+			//		if (fs instanceof JoinFeatureStore) {
+			//			DataManager dm = DALLocator.getDataManager();
+			//			DataStoreParameters originalParams = ((JoinFeatureStoreParameters) fs
+			//					.getParameters()).getStorePrimary();
+			//			FeatureStore original = null;
+			//			try {
+			//				original = (FeatureStore) dm.createStore(originalParams);
+			//			} catch (InitializeException e) {
+			//				NotificationManager.addError(e.getMessage(), e);
+			//				return;
+			//			}
+			//
+			//			pt.setStore(original);
+			//			try {
+			//				fs.dispose();
+			//			} catch (CloseException e) {
+			//				NotificationManager.addError(e);
+			//			}
+			//			t.setModel(pt);
+			//
+			//		}
+	
+			//		t.clearSelectedFields();
+			t.getModel().setModified(true);
+		}
+	}
+
+	public void removeJoinTransfor(FeatureStore store) {
+		FeatureStoreTransforms transforms = store.getTransforms();
+		int size = transforms.size();
+		if (size < 1) {
+			return;
+		}
+		FeatureStoreTransform join = transforms.getTransform(size - 1);
+		if (join instanceof JoinTransform) {
+			transforms.remove(join);
+		} else {
+			return;
+		}
+
+
+
+	}
+
+	public boolean hasJoinTransform(FeatureStore store) {
+
+		FeatureStoreTransforms transforms = store.getTransforms();
+		int size = transforms.size();
+		if (size < 1) {
+			return false;
+		}
+		return (transforms.getTransform(size - 1) instanceof JoinTransform);
+
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+		if (v == null) {
+			return false;
+		}
+
+		if (v.getClass() == FeatureTableDocumentPanel.class) {
+			FeatureTableDocumentPanel t = (FeatureTableDocumentPanel) v;
+			// FIXME !!!! Asi se hacia antes
+			//			if (t.getModel().getOriginal() != null){
+			//				return true;
+			//			}
+
+			TableDocument pt = t.getModel();
+			FeatureStore fs = pt.getStore();
+
+			return this.hasJoinTransform(fs);
+//			TODO
+//			if (fs instanceof JoinFeatureStore) {
+//				return true;
+//			}
+
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+		if (v == null) {
+			return false;
+		}
+
+		if (v instanceof FeatureTableDocumentPanel) {
+			return true;
+		} else {
+			return false;
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/RemoveTableUnion.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinTransformLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinTransformLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinTransformLibrary.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.app.join;
+
+import java.util.Locale;
+
+import org.gvsig.app.join.dal.feature.JoinTransform;
+import org.gvsig.app.join.daltransform.JoinTransformGui;
+import org.gvsig.daltransform.DataTransformLibrary;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.DataTransformManager;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class JoinTransformLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(JoinTransformLibrary.class);
+        require(DALLibrary.class);
+        require(DataTransformLibrary.class);
+
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		// Validate there is any implementation registered.
+		DataTransformManager dataTransformManager = DataTransformLocator.getDataTransformManager();
+		if (dataTransformManager == null) {
+			throw new ReferenceNotRegisteredException(
+					DataTransformLocator.DATA_TRANSFORM_MANAGER_NAME, DataTransformLocator.getInstance());
+		}	
+		dataTransformManager.registerDataTransform("join", JoinTransformGui.class);		
+		
+		JoinTransform.registerPersistent();
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinTransformLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/dal/feature/JoinTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/dal/feature/JoinTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/dal/feature/JoinTransform.java	(revision 42196)
@@ -0,0 +1,482 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.join.dal.feature;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.SetReadOnlyAttributeException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JoinTransform extends AbstractFeatureStoreTransform {
+
+	private static Logger logger = LoggerFactory.getLogger(JoinTransform.class);
+	
+    public static final String PERSISTENCE_DEFINITION_NAME = "JoinTransform";
+    
+    /**
+     * Store from which the join transform will get the additional attributes
+     */
+    private FeatureStore store2;
+
+    /**
+     * name of the key attr in store1 that will be used to match features in
+     * store2
+     */
+    private String keyAttr1;
+
+    /**
+     * name of the key attr in store2 that will be used to match features in
+     * store1
+     */
+    private String keyAttr2;
+
+    /**
+     * names of the attributes to join from store2 to store1
+     */
+    private String[] attrs;
+
+    /**
+     * Attribute names may change after transformation a prefix is applied.
+     * This map keeps correspondence between store1 original names
+     * and their transformed counterparts.
+     */
+    private Map<String,String> store1NamesMap;
+
+    /**
+     * Attribute names may change after transformation if they are repeated in
+     * both stores or if a prefix is applied. This map keeps correspondence
+     * between store2 original names and their transformed counterparts.
+     */
+    private Map<String,String> store2NamesMap;
+
+    private JoinTransformEvaluator evaluator = null;
+
+    private FeatureType originalFeatureType;
+
+    private String[] attrsForQuery;
+
+    private String prefix1;
+
+    private String prefix2;
+
+    /**
+     * A default constructor
+     */
+    public JoinTransform() {
+        store1NamesMap = new HashMap<String,String>();
+        store2NamesMap = new HashMap<String,String>();
+    }
+
+    /**
+     * Initializes all the necessary data for this transform
+     *
+     * @param store1
+     *            store whose default feature type is the target of this
+     *            transform
+     *
+     * @param store2
+     *            store whose default feature type will provide the new
+     *            attributes to join
+     *
+     * @param keyAttr1
+     *            key attribute in store1 that matches keyAttr2 in store2
+     *            (foreign key), used for joining both stores.
+     *
+     * @param keyAttr2
+     *            key attribute in store2 that matches keyAttr1 in store2
+     *            (foreign key), used for joining both stores.
+     *
+     * @param attrs
+     *            names of the attributes in store2 that will be joined to
+     *            store1.
+     */
+    public void initialize(FeatureStore store1, FeatureStore store2,
+        String keyAttr1, String keyAttr2, String prefix1, String prefix2,
+        String[] attrs)
+    throws DataException {
+
+        if (store1 == store2) {
+            throw new IllegalArgumentException("store1 == store2");
+        }
+
+        // Initialize needed data
+        this.setFeatureStore(store1);
+        this.store2 = store2;
+        this.keyAttr1 = keyAttr1;
+        this.keyAttr2 = keyAttr2;
+        this.prefix1 = prefix1; // TODO
+        this.prefix2 = prefix2; // TODO
+        this.attrs = attrs;
+
+        // calculate this transform resulting feature type
+        // by adding all specified attrs from store2 to store1's default
+        // feature type
+        // FIXME for more than one FTypes ??
+        this.originalFeatureType = this.getFeatureStore()
+        .getDefaultFeatureType();
+
+        // keep index of geometry and att desc ==============
+        int orig_geom_field_index =
+            this.originalFeatureType.getDefaultGeometryAttributeIndex();
+        FeatureAttributeDescriptor orig_geom_field_att = 
+            this.originalFeatureType.getDefaultGeometryAttribute();
+        
+        // Create the feature type and copy the store 1 type        
+        EditableFeatureType editableFeatureType = this.getFeatureStore().getDefaultFeatureType().getEditable();
+        FeatureAttributeDescriptor[] featureAttributeDescriptors = editableFeatureType.getAttributeDescriptors();
+        for (int i=0 ; i<featureAttributeDescriptors.length ; i++){ 
+            editableFeatureType.remove(featureAttributeDescriptors[i].getName());           
+        }    
+        addFeatureType(editableFeatureType, featureAttributeDescriptors, prefix1, store1NamesMap);
+
+        // =========== set the new geom field name and restore geometry values
+        if (orig_geom_field_index >= 0) {
+            EditableFeatureAttributeDescriptor ed_att = null;
+            ed_att = (EditableFeatureAttributeDescriptor)
+                editableFeatureType.getAttributeDescriptor(orig_geom_field_index);
+            ed_att.setSRS(orig_geom_field_att.getSRS());
+            ed_att.setObjectClass(orig_geom_field_att.getObjectClass());
+            ed_att.setGeometryType(orig_geom_field_att.getGeomType());
+            ed_att.setDefaultValue(orig_geom_field_att.getDefaultValue());
+
+            String new_geom_field_name = ed_att.getName();
+            editableFeatureType.setDefaultGeometryAttributeName(new_geom_field_name);
+        }
+        // =====================================================================
+
+        // Add the store 2 fields    
+        FeatureType featureType2 = store2.getDefaultFeatureType();
+
+        // Add the fields       
+        for (int i = 0; i < attrs.length; i++) {
+            addFeatureType(editableFeatureType, featureType2.getAttributeDescriptor(attrs[i]), prefix2, store2NamesMap);        
+        }
+
+        if (this.store2NamesMap.containsKey(keyAttr2)) {
+            this.attrsForQuery = this.attrs;
+        } else {
+            List<String> list = new ArrayList<String>(this.attrs.length + 1);
+            list.addAll(Arrays.asList(this.attrs));
+            list.add(keyAttr2);
+            this.attrsForQuery = (String[]) list.toArray(new String[] {});
+        }
+
+        // assign calculated feature type as this transform's feature type
+        FeatureType[] types = new FeatureType[] { editableFeatureType.getNotEditableCopy() };
+        setFeatureTypes(Arrays.asList(types), types[0]);
+    }
+
+    private void addFeatureType(EditableFeatureType targetFeatureType, FeatureAttributeDescriptor[] featureAttributeDescriptors,
+        String prefix, Map<String, String> storeMap) throws DataException{
+
+        for (int i=0 ; i<featureAttributeDescriptors.length ; i++){         
+            addFeatureType(targetFeatureType, featureAttributeDescriptors[i], prefix, storeMap);
+        }
+    }
+
+    private void addFeatureType(EditableFeatureType targetFeatureType, FeatureAttributeDescriptor featureAttributeDescriptor,
+        String prefix, Map<String, String> storeMap) throws DataException{
+
+        String attName = featureAttributeDescriptor.getName();
+        if ((prefix != null) && (!prefix.equals(""))){
+            attName = prefix + "_" + attName;
+        }
+
+        // If an attribute already exists, calculate an alternate name and add it to our type
+        int j = 0;
+        while (targetFeatureType.getIndex(attName) >= 0) {
+            attName = targetFeatureType.getAttributeDescriptor(attName).getName() + "_" + ++j;
+        }
+
+        EditableFeatureAttributeDescriptor editableFeatureAttributeDescriptor = 
+            targetFeatureType.add(attName, featureAttributeDescriptor.getType(),
+                featureAttributeDescriptor.getSize());
+        editableFeatureAttributeDescriptor.setPrecision(featureAttributeDescriptor.getPrecision());
+
+        // keep correspondence between original name and transformed name
+        storeMap.put(featureAttributeDescriptor.getName(), attName);
+    } 
+
+    /**
+     *
+     *
+     * @param source
+     *
+     * @param target
+     *
+     * @throws DataException
+     */
+    public void applyTransform(Feature source, EditableFeature target)
+    throws DataException {
+
+        // copy the data from store1 into the resulting feature
+        this.copySourceToTarget(source, target);
+
+        // ask store2 for the specified attributes, filtering by the key
+        // attribute value
+        // from the source feature
+        JoinTransformEvaluator eval = this.getEvaluator();
+        eval.updateValue(source.get(this.keyAttr1));
+
+        FeatureQuery query = store2.createFeatureQuery();
+        query.setAttributeNames(attrsForQuery);
+        query.setFilter(eval);
+        FeatureSet set = null;
+        DisposableIterator itFeat = null;
+
+        try {
+
+            set = store2.getFeatureSet(query);
+            // In this join implementation, we will take only the first matching
+            // feature found in store2
+
+            Feature feat;
+
+
+            itFeat = set.iterator();
+            if (itFeat.hasNext()) {
+                feat = (Feature) itFeat.next();
+
+                // copy all attributes from joined feature to target
+                this.copyJoinToTarget(feat, target);
+            }
+        } finally {
+            if (itFeat != null) {
+                itFeat.dispose();
+            }
+            if (set != null) {
+                set.dispose();
+            }
+        }
+    }
+
+    /**
+     * @param feat
+     * @param target
+     */
+    private void copyJoinToTarget(Feature join, EditableFeature target) {
+        Iterator<Entry<String, String>> iter = store2NamesMap.entrySet()
+        .iterator();
+        Entry<String, String> entry;
+        FeatureType trgType = target.getType();
+        FeatureAttributeDescriptor attr;
+        while (iter.hasNext()) {
+            entry = iter.next();
+            attr = trgType.getAttributeDescriptor((String) entry.getValue());
+            if (attr != null) {
+                target.set(attr.getIndex(), join.get((String) entry.getKey()));
+            }
+        }
+    }
+
+    /**
+     * @param source
+     * @param target
+     */
+    private void copySourceToTarget(Feature source, EditableFeature target) {
+        FeatureAttributeDescriptor attr, attrTrg;
+        FeatureType ftSrc = source.getType();
+        FeatureType ftTrg = target.getType();
+
+
+        for (int i = 0; i < source.getType().size(); i++) {
+            attr = ftSrc.getAttributeDescriptor(i);
+            attrTrg = ftTrg.getAttributeDescriptor(store1NamesMap.get(attr.getName()));
+            if (attrTrg != null) {
+                try {
+                    target.set(attrTrg.getIndex(), source.get(i));
+                } catch ( SetReadOnlyAttributeException e1) {
+                    // Ignore, do nothing
+                    
+                } catch (IllegalArgumentException e) {
+                    attrTrg = ftTrg.getAttributeDescriptor(attr.getName());
+                    target.set(attrTrg.getIndex(), attrTrg.getDefaultValue());
+                }
+
+            }
+        }
+
+    }
+
+    private JoinTransformEvaluator getEvaluator() {
+        if (this.evaluator == null){
+        	FeatureType ft2 = null;
+        	try {
+				ft2 = this.store2.getDefaultFeatureType();
+			} catch (DataException e) {
+				logger.error("While getting feat type.", e);
+			}
+        	FeatureAttributeDescriptor att2 = ft2.getAttributeDescriptor(keyAttr2);
+        	boolean is_num = att2.getDataType().isNumeric();
+            this.evaluator = new JoinTransformEvaluator(keyAttr2, is_num);
+        }
+        return evaluator;
+
+    }
+
+    private class JoinTransformEvaluator implements Evaluator {
+
+        private String attribute;
+        private boolean isNumeric = false;
+        private Object value;
+        private String sql;
+        private EvaluatorFieldsInfo info = null;
+
+        //		private int attributeIndex;
+
+        public JoinTransformEvaluator(String attribute, boolean is_numeric) {
+            this.attribute = attribute;
+            this.isNumeric = is_numeric;
+            this.value = null;
+            this.info = new EvaluatorFieldsInfo();
+
+            //			this.attributeIndex = attrIndex;
+        }
+
+        public void updateValue(Object value) {
+            this.value = value;
+            String qt = this.isNumeric ? "" : "'";
+            this.sql = this.attribute + " = " + qt + this.value + qt;
+            this.info = new EvaluatorFieldsInfo();
+            this.info.addMatchFieldValue(this.attribute, value);
+        }
+
+        public Object evaluate(EvaluatorData arg0) throws EvaluatorException {
+            Object curValue = arg0.getDataValue(attribute);
+            if (curValue == null) {
+                return value == null;
+            }
+            return curValue.equals(value);
+        }
+
+        public String getSQL() {
+            return this.sql;
+        }
+
+        public String getDescription() {
+            return "Evaluates join transform match";
+        }
+
+        public String getName() {
+            return "JoinTransformEvaluator";
+        }
+
+        public EvaluatorFieldsInfo getFieldsInfo() {
+            return this.info;
+        }
+
+    }	
+
+    @SuppressWarnings("unchecked")
+    public FeatureType getSourceFeatureTypeFrom(FeatureType arg0) {
+        return originalFeatureType;
+    }
+
+    public boolean isTransformsOriginalValues() {
+        return false;
+    }
+
+    public static void registerPersistent() {
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+
+        if( persistenceManager.getDefinition(AbstractFeatureStoreTransform.class) == null ) {
+            AbstractFeatureStoreTransform.registerPersistent();
+        }
+
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_DEFINITION_NAME);
+
+        if (definition == null){  
+            definition = persistenceManager.addDefinition(
+                JoinTransform.class,
+                PERSISTENCE_DEFINITION_NAME,
+                "JoinTransform Persistence definition",
+                null, 
+                null
+            );
+            definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE,
+                ABSTRACT_FEATURESTORE_DYNCLASS_NAME);
+
+            definition.addDynFieldObject("store2").setClassOfValue(FeatureStore.class).setMandatory(true);
+            definition.addDynFieldString("keyAttr1").setMandatory(true);
+            definition.addDynFieldString("keyAttr2").setMandatory(true);
+            definition.addDynFieldString("prefix1").setMandatory(false);
+            definition.addDynFieldString("prefix2").setMandatory(false);
+            definition.addDynFieldList("attrs").setClassOfItems(String.class).setMandatory(true);
+        }
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        super.saveToState(state);
+        state.set("store2", this.store2);
+        state.set("keyAttr1", this.keyAttr1);
+        state.set("keyAttr2", this.keyAttr2);
+        state.set("prefix1", this.prefix1);
+        state.set("prefix2", this.prefix2);		
+        state.set("attrs", this.attrs);
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        super.loadFromState(state);
+        FeatureStore store2 = (FeatureStore) state.get("store2");
+        String keyAttr1 = state.getString("keyAttr1");
+        String keyAttr2 = state.getString("keyAttr2");
+        String prefix1 =  state.getString("prefix1");
+        String prefix2 =  state.getString("prefix2");
+        String[] attrs = (String[]) state.getArray("attrs", String.class);
+        try {
+            initialize(getFeatureStore(), store2, keyAttr1, keyAttr2, prefix1, prefix2, attrs);
+        } catch (DataException e) {
+            throw new PersistenceException("Impossible to create the transform", e);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/dal/feature/JoinTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/utils/TransformUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/utils/TransformUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/utils/TransformUtils.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.join.utils;
+
+import java.util.ArrayList;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dataTypes.DataTypes;
+
+
+/**
+ * {@link DataTypes}-related utility methods
+ * 
+ * @author jldominguez
+ *
+ */
+public class TransformUtils {
+
+    public static boolean isNumericType(int t) {
+        return (t == DataTypes.DOUBLE
+            || t == DataTypes.FLOAT
+            || t == DataTypes.INT
+            || t == DataTypes.LONG
+            || t == DataTypes.BYTE);
+    }
+    
+    public static boolean comparableTypes(int a, int b) {
+        
+        if (a == b) {
+            return true;
+        } else {
+            return isNumericType(a) && isNumericType(b);
+        }
+        
+    }
+    /**
+     * @param ft
+     * @param the_type
+     * @return
+     */
+    public static ArrayList<Integer> getComparableDataTypes(
+        FeatureType ft,
+        int the_type) {
+
+        ArrayList<Integer> resp = new ArrayList<Integer>();
+        
+        FeatureAttributeDescriptor[] atts = ft.getAttributeDescriptors();
+        int len = atts.length;
+        for (int i=0; i<len; i++) {
+            if (comparableTypes(the_type, atts[i].getType())) {
+                resp.add(atts[i].getType());
+            }
+        }
+        return resp;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/utils/TransformUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml	(revision 42196)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.daltransform.app.join</artifactId>
+  <packaging>jar</packaging>
+  <name>Transformation: Join</name>
+  <description>This plugin allow join two tables by a common field and removing join.</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.daltransform.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.document.table.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.daltransform.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.control</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>  
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+        <scope>compile</scope>
+    </dependency>       
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.i18n</artifactId>
+        <scope>compile</scope>
+    </dependency> 
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>      
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>        
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.utils</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>jwizardcomponent</groupId>
+        <artifactId>jwizardcomponent</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <!--TEST-->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.daltransform.app.mainplugin</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>    
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.daltransform.app.mainplugin -ge 2</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Data-transforms</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.app.join</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.daltransform.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>Transforms framework</name>
+  <description>Frame which provide access to the different transformations like join, event theme, ...</description>
+  
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.daltransform.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.document.table.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.control</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jwizardcomponent</groupId>
+      <artifactId>jwizardcomponent</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <!-- Testing -->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+        <type>test-jar</type>
+        <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Packaging tests in jar -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <executions>
+            <!-- Generates a jar file only with the test classes -->
+            <execution>
+              <goals>
+                <goal>test-jar</goal>
+              </goals>
+              <configuration>
+                <includes>
+                  <include>**/**</include>
+                </includes>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin> 
+
+
+      </plugins>
+  </build>
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.document.table.app.mainplugin -ge 2</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Data-transforms</gvsig.package.info.categories>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:55 CEST 2015
+buildNumber=2155

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/test/java/org/gvsig/daltransform/BaseFeatureStoreTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/test/java/org/gvsig/daltransform/BaseFeatureStoreTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/test/java/org/gvsig/daltransform/BaseFeatureStoreTransform.java	(revision 42196)
@@ -0,0 +1,125 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.BaseTestFeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistentState;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class BaseFeatureStoreTransform extends BaseTestFeatureStore {
+	public abstract DataStoreParameters getDefaultDataStoreParameters() throws DataException;
+		
+	public void testInitializeStore() throws Exception {
+		FeatureStore store = (FeatureStore) dataManager.createStore(this
+				.getDefaultDataStoreParameters());
+		assertNotNull(store);
+		store.dispose();
+	}
+	
+	public abstract FeatureStoreTransform getFeatureStoreTransform() throws DataException, ValidateDataParametersException;
+	
+	public void testTransform() throws Exception {
+		FeatureStore store = (FeatureStore) dataManager.createStore(this
+				.getDefaultDataStoreParameters());
+		store.getTransforms().add(getFeatureStoreTransform());
+		this.testSimpleIteration(store);		
+	}
+	
+	public void testPersistenceTransform() throws Exception {
+		if (ToolsLocator.getPersistenceManager() == null) {
+			fail("Default Persistence Manager not register");
+		}
+		FeatureStore store = (FeatureStore) dataManager.createStore(this
+				.getDefaultDataStoreParameters());
+		store.getTransforms().add(getFeatureStoreTransform());
+
+		testSimpleIteration(store);
+
+		PersistentState state = ToolsLocator.getPersistenceManager().getState(
+				store);
+
+		FeatureStore store2 = (FeatureStore) ToolsLocator
+				.getPersistenceManager().create(state);
+
+		testSimpleIteration(store2);
+
+		assertTrue(compareStores(store, store2));
+
+		store.dispose();
+		store2.dispose();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#hasExplorer()
+	 */
+	public boolean hasExplorer() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#usesResources()
+	 */	
+	public boolean usesResources() {		
+		return false;
+	}	
+	
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/test/java/org/gvsig/daltransform/BaseFeatureStoreTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,64 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformManager.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform;
+
+import java.util.List;
+
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.daltransform.swing.DataTransformWizard;
+import org.gvsig.daltransform.swing.JDataTransformList;
+import org.gvsig.daltransform.swing.JDialogDataTransformList;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ * This singleton provides a centralized access to register
+ * {@link DataTransformGui} that is a class to establish
+ * a relationship between a tranformation and a user interface.
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface DataTransformManager {
+
+    /**
+     * Register a data transformation
+     * 
+     * @param name
+     *            the name used to register the transformation
+     * @param featureTransformGui
+     *            the class that contains the relationship between a
+     *            transformation
+     *            and its user interface. This class has to be an instance of
+     *            {@link DataTransformGui}
+     */
+    public void registerDataTransform(String name, Class<?> dataTransformGui);
+
+    /**
+     * Register the GUI that is used to apply transformations.
+     * 
+     * @param dataTransformWizard
+     *            the class that implements the GUI. This class has to be an
+     *            instance of {@link DataTransformWizard}
+     */
+    public void registerDataTransformWizard(Class<?> dataTransformWizard);
+
+    /**
+     * Returns a list of the registered data transformations.
+     * 
+     * @return
+     *         A list of the registered data transformations.
+     */
+    public List<DataTransformGui> getDataTransforms();
+
+    /**
+     * Creates a wizard that can be used to apply the transformations.
+     * 
+     * @return
+     *         The wizard.
+     */
+    public DataTransformWizard createWizard() throws CreateWizardException;
+
+    /**
+     * It creates a wizard and selects the transformation specified
+     * by the parameter.
+     * 
+     * @param transformName
+     *            The name of the transformation to apply.
+     * @return
+     *         The wizard.
+     * @throws CreateWizardException
+     */
+    public DataTransformWizard createWizard(String transformName)
+        throws CreateWizardException, NotRegisteredTransformException;
+
+    public JDataTransformList createJDataTransformList(FeatureStore featureStore);
+
+    // public JDialogDataTransformList createJDialogDataTransformList(
+    // FeatureStore featureStore);
+
+    public JDialogDataTransformList createJDialogDataTransformList();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/app/mainplugin/DataTransformExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/app/mainplugin/DataTransformExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/app/mainplugin/DataTransformExtension.java	(revision 42196)
@@ -0,0 +1,142 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.app.mainplugin;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.ToolsWindowManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.DataTransformManager;
+import org.gvsig.daltransform.swing.JDialogDataTransformList;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DataTransformExtension extends Extension {
+    
+    private static final Logger logger =
+        LoggerFactory.getLogger(DataTransformExtension.class);
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        DataTransformManager manager =
+            DataTransformLocator.getDataTransformManager();
+
+        if ("CREATE".equalsIgnoreCase(actionCommand)) {
+            try {
+                PluginServices.getMDIManager().addWindow(
+                    manager.createWizard().getWindow());
+
+            } catch (Exception e) {
+                
+                logger.info("Error while creating data transform wizard", e);
+                ApplicationLocator.getManager().messageDialog(
+                    Messages.getText("transform_create_wizard_exception") +
+                    ": " + e.getMessage(),
+                    Messages.getText("feature_transform"),
+                    JOptionPane.ERROR_MESSAGE);
+                
+            }
+        } else
+            if ("VIEW".equalsIgnoreCase(actionCommand)) {
+
+                // there is no layer loaded
+                if (application.getActiveDocument() == null) {
+                    JOptionPane.showMessageDialog(null,
+                        Messages.getText("not_featurestore_loaded"),
+                        Messages.getText("view_transforms"),
+                        JOptionPane.OK_OPTION + JOptionPane.WARNING_MESSAGE);
+                    return;
+                }
+
+                JDialogDataTransformList dialog =
+                    manager.createJDialogDataTransformList();
+
+                ToolsWindowManager wm = new ToolsWindowManager();
+                wm.showWindow(dialog, Messages.getText("view_transforms"),
+                    WindowManager.MODE.WINDOW, GridBagConstraints.CENTER);
+            }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    	IconThemeHelper.registerIcon("feature-transform-tools", "feature-transform-wizard", this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.plugins.Extension#postInitialize()
+     */
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/app/mainplugin/DataTransformExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformLibrary.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.impl;
+
+import org.gvsig.app.ApplicationLibrary;
+import org.gvsig.daltransform.DataTransformLibrary;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.DataTransformManager;
+import org.gvsig.daltransform.swing.impl.DefaultDataTransformWizard;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultDataTransformLibrary extends AbstractLibrary {
+		
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(DataTransformLibrary.class);
+        require(DALLibrary.class);
+        require(ApplicationLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+        //Register the default DataTransformManager
+        DataTransformLocator.registerDataTransformManager(DefaultDataTransformManager.class);
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		DataTransformManager dataTransformManager = DataTransformLocator.getDataTransformManager();
+		
+		//Register the default wizard to apply transformations
+		dataTransformManager.registerDataTransformWizard(DefaultDataTransformWizard.class);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformManager.java	(revision 42196)
@@ -0,0 +1,179 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.daltransform.CreateWizardException;
+import org.gvsig.daltransform.DataTransformManager;
+import org.gvsig.daltransform.NotRegisteredTransformException;
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.daltransform.swing.DataTransformWizard;
+import org.gvsig.daltransform.swing.JDataTransformList;
+import org.gvsig.daltransform.swing.JDialogDataTransformList;
+import org.gvsig.daltransform.swing.impl.DefaultJDataTransformList;
+import org.gvsig.daltransform.swing.impl.DefaultJDialogDataTransformList;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultDataTransformManager implements DataTransformManager{
+	private static final String TRANSFORM_GUI_EXTENSION_POINT = "TransformGuiExtensionPoint";
+	private static final String TRANSFORM_WIZARD_EXTENSION_POINT = "TransformWizardExtensionPoint";
+	private static final String TRANSFORM_WIZARD_NAME = "Wizard";
+	private static final Logger logger = LoggerFactory.getLogger(DefaultDataTransformManager.class);
+	private ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.feature.transform.FeatureTransformManager#registerFeatureTransform(java.lang.String, java.lang.Class)
+	 */
+	public void registerDataTransform(String name,
+			Class<?> featureTransformPage) {
+		if (!DataTransformGui.class.isAssignableFrom(featureTransformPage)) {
+			throw new IllegalArgumentException(featureTransformPage.getName()
+					+ " must implement the DataTransformGui interface");
+		}
+		
+		ExtensionPoint extensionPoint = extensionPoints.add(TRANSFORM_GUI_EXTENSION_POINT, "");
+		extensionPoint.append(name, name, featureTransformPage);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.feature.transform.FeatureTransformManager#getFeatureTransforms()
+	 */
+	@SuppressWarnings("unchecked")
+    public List<DataTransformGui> getDataTransforms() {
+		List<DataTransformGui> transformArray = new ArrayList<DataTransformGui>();
+		
+		ExtensionPoint ep = extensionPoints.add(TRANSFORM_GUI_EXTENSION_POINT);
+		Iterator<ExtensionPoint.Extension> iterator = ep.iterator();
+		while (iterator.hasNext()) {
+			try {				
+				transformArray.add((DataTransformGui)((ExtensionPoint.Extension) iterator
+						.next()).create());				
+			} catch (Exception e) {
+				logger.error("Error creating a FeatureTranformationGui", e);
+			} 
+		}
+		return transformArray;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformManager#createWizard()
+	 */
+	public DataTransformWizard createWizard() throws CreateWizardException {
+		ExtensionPoint ep = extensionPoints.add(TRANSFORM_WIZARD_EXTENSION_POINT);
+		try {
+			return (DataTransformWizard)ep.create(TRANSFORM_WIZARD_NAME);			
+		} catch (Exception e) {
+			throw new CreateWizardException(e);
+		}	
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformManager#registerDataTransformWizard(java.lang.String, java.lang.Class)
+	 */
+	public void registerDataTransformWizard(Class<?> dataTransformWizard) {
+		if (!DataTransformWizard.class.isAssignableFrom(dataTransformWizard)) {
+			throw new IllegalArgumentException(dataTransformWizard.getName()
+					+ " must implement the DataTransformWizard interface");
+		}
+		
+		ExtensionPoint extensionPoint = extensionPoints.add(TRANSFORM_WIZARD_EXTENSION_POINT, "");
+		extensionPoint.append(TRANSFORM_WIZARD_NAME, "", dataTransformWizard);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformManager#createWizard(java.lang.String)
+	 */
+	public DataTransformWizard createWizard(String transformName)
+			throws CreateWizardException {
+		ExtensionPoint ep = extensionPoints.add(TRANSFORM_GUI_EXTENSION_POINT);
+		try {
+			Object obj = ep.create(transformName);
+			if (obj == null){
+				throw new NotRegisteredTransformException(transformName);
+			}
+			DataTransformGui dataTransformGui = (DataTransformGui)obj;
+			DataTransformWizard wizard = createWizard();
+			wizard.setDataTransformGui(dataTransformGui);
+			return wizard;
+		} catch (Exception e) {
+			throw new CreateWizardException(e);
+		} 		
+	}
+	
+    public JDataTransformList createJDataTransformList(FeatureStore featureStore) {
+        return new DefaultJDataTransformList(featureStore);
+    }
+
+    public JDialogDataTransformList createJDialogDataTransformList() {
+        return new DefaultJDialogDataTransformList();
+    }
+
+//    public JDialogDataTransformList createJDialogDataTransformList(
+//        FeatureStore featureStore) {
+//        return new DefaultJDialogDataTransformList(featureStore);
+//    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/CreateWizardException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/CreateWizardException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/CreateWizardException.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class CreateWizardException extends BaseException{
+	private static final long serialVersionUID = 3062621423281216473L;
+
+	/**
+	 * @param message
+	 * @param cause
+	 * @param key
+	 * @param code
+	 */
+	public CreateWizardException(Throwable cause) {
+		init();
+		initCause(cause);
+	}
+	
+	private void init() {
+		messageKey = "transform_create_wizard_exception";
+		formatString = "Can�t create the wizard to apply transformations.";
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/CreateWizardException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDataTransformList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDataTransformList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDataTransformList.java	(revision 42196)
@@ -0,0 +1,181 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.daltransform.swing.impl;
+
+import java.awt.Color;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.daltransform.swing.JDataTransformList;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultJDataTransformList extends JDataTransformList {
+
+    private static final long serialVersionUID = 3179282558802329381L;
+
+    private FeatureStore store;
+    private JList l;
+    DefaultListModel model;
+
+    public DefaultJDataTransformList(FeatureStore store) {
+        this.store = store;
+        createComponents();
+    }
+
+    private void createComponents() {
+        FeatureStoreTransforms transforms = this.store.getTransforms();
+        model = new DefaultListModel();
+        for (int i = 0; i < transforms.size(); i++) {
+            model.addElement(new ItemData(transforms.getTransform(i)));
+        }
+        l = new JList(model);
+        l.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        this.add(l);
+        this.setBackground(Color.WHITE);
+
+    }
+
+    @Override
+    public void addListSelectionListener(ListSelectionListener actionListener) {
+        this.l.addListSelectionListener(new ListSelectionListenerWrapper(this,
+            actionListener));
+    }
+
+    private class ListSelectionListenerWrapper implements ListSelectionListener {
+
+        private DefaultJDataTransformList list;
+        private ListSelectionListener listListener;
+
+        public ListSelectionListenerWrapper(DefaultJDataTransformList list,
+            ListSelectionListener listListener) {
+            this.list = list;
+            this.listListener = listListener;
+        }
+
+        public void valueChanged(ListSelectionEvent e) {
+            listListener.valueChanged(new ListSelectionEventWrapper(e, list));
+        }
+    }
+
+    private class ListSelectionEventWrapper extends ListSelectionEvent {
+
+        private static final long serialVersionUID = -8159225017709144435L;
+
+        public ListSelectionEventWrapper(ListSelectionEvent e,
+            DefaultJDataTransformList transformList) {
+            super(transformList, e.getFirstIndex(), e.getLastIndex(), e
+                .getValueIsAdjusting());
+        }
+
+    }
+
+    private class ItemData {
+
+        public FeatureStoreTransform transform;
+
+        ItemData(FeatureStoreTransform transform) {
+            this.transform = transform;
+        }
+
+        @Override
+        public String toString() {
+            return this.transform.getName();
+        }
+
+        public FeatureStoreTransform getTransform() {
+            return transform;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            return this.transform.equals(((ItemData) obj).transform);
+        }
+    }
+
+    @Override
+    public FeatureStoreTransform getSelected() {
+        if ((l != null) && (l.getSelectedValue() != null)) {
+            return ((ItemData) l.getSelectedValue()).getTransform();
+        }
+        return null;
+    }
+
+    @Override
+    public void remove(FeatureStoreTransform transform) {
+        this.store.getTransforms().remove(transform);
+        model.removeElement(new ItemData(transform));
+    }
+
+    @Override
+    public void addTransforms(FeatureStoreTransforms transforms) {
+        for (int i = 0; i < transforms.size(); i++) {
+            model.addElement(new ItemData(transforms.getTransform(i)));
+        }
+    }
+
+    @Override
+    public void removeAllTransforms() {
+        model.removeAllElements();
+    }
+
+    @Override
+    public void changeStore(FeatureStore featureStore) {
+        this.store = featureStore;
+    }
+
+    @Override
+    public int getTransformsCount() {
+        return model.getSize();
+    }
+
+    @Override
+    public boolean isLastTransform(FeatureStoreTransform selectedTransform) {
+
+        ItemData selectedTransformItem = new ItemData(selectedTransform);
+        ItemData lastTransformItem = (ItemData) model.get(model.size() - 1);
+
+        if (selectedTransformItem.equals(lastTransformItem)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public int getSelectedIndex() {
+        return this.l.getSelectedIndex();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDataTransformList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDialogDataTransformList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDialogDataTransformList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDialogDataTransformList.java	(revision 42196)
@@ -0,0 +1,408 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.daltransform.swing.impl;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.Action;
+import javax.swing.ComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.swing.JDataTransformList;
+import org.gvsig.daltransform.swing.JDialogDataTransformList;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.usability.UsabilitySwingManager;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public class DefaultJDialogDataTransformList extends JDialogDataTransformList {
+
+    private static final long serialVersionUID = 8666781163497235054L;
+    private JDataTransformList transforms = null;
+
+    private JButton botonEliminar;
+    private JButton botonCerrar;
+    private JComboBox comboBox;
+
+    public DefaultJDialogDataTransformList() {
+        super();
+        initComponents();
+        createGUI();
+    }
+
+    private class MyComboBoxItem {
+
+        private String label;
+        private FeatureStore store;
+
+        MyComboBoxItem(String label, FeatureStore store) {
+            this.label = label;
+            this.store = store;
+        }
+
+        @Override
+        public String toString() {
+            return label;
+        }
+
+        public FeatureStore getStore() {
+            return this.store;
+        }
+    }
+
+    private class MyComboBoxModel implements ComboBoxModel {
+
+        private List<MyComboBoxItem> items = new ArrayList<MyComboBoxItem>();
+        private MyComboBoxItem selected = null;
+
+        public MyComboBoxModel(List<MyComboBoxItem> items) {
+            this.items.addAll(items);
+        }
+
+        public Object getSelectedItem() {
+            return this.selected;
+        }
+
+        public MyComboBoxItem getSelected() {
+            return this.selected;
+        }
+
+        public void setSelectedItem(Object arg0) {
+            this.selected = (MyComboBoxItem) arg0;
+        }
+
+        public Object getElementAt(int arg0) {
+            return this.items.get(arg0);
+        }
+
+        public MyComboBoxItem get(int arg0) {
+            return this.items.get(arg0);
+        }
+
+        public int getSize() {
+            return this.items.size();
+        }
+
+        public void removeListDataListener(ListDataListener arg0) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void addListDataListener(ListDataListener arg0) {
+            // TODO Auto-generated method stub
+
+        }
+
+    }
+
+    private void initComponents() {
+        MyComboBoxModel comboModel = new MyComboBoxModel(getAllStores());
+
+        comboBox = new JComboBox(comboModel);
+
+        comboBox.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                JComboBox jcmbType = (JComboBox) e.getSource();
+                MyComboBoxModel model = (MyComboBoxModel) jcmbType.getModel();
+                updatePanel(model.getSelected().getStore());
+            }
+        });
+
+        if (comboModel.getSize() > 0) {
+            transforms =
+                DataTransformLocator.getDataTransformManager()
+                    .createJDataTransformList(comboModel.get(0).getStore());
+            comboModel.setSelectedItem(comboModel.get(0));
+        }
+        if (transforms != null) {
+            transforms.addListSelectionListener(new ListSelectionHandler());
+        }
+    }
+
+    private List<MyComboBoxItem> getAllStores() {
+        List<MyComboBoxItem> stores = new ArrayList<MyComboBoxItem>();
+        ApplicationManager application = ApplicationLocator.getManager();
+        Project project = application.getCurrentProject();
+
+        List<Document> views = project.getDocuments(ViewManager.TYPENAME);
+        for (Document doc : views) {
+            ViewDocument viewDocument = (ViewDocument) doc;
+
+            FLayer[] layers =
+                viewDocument.getMapContext().getLayers().getVisibles();
+            if (layers.length > 1) {
+                for (int i = 1; i < layers.length; i++) {
+                    if (layers[i] instanceof FLyrVect) {
+                        FLyrVect layer = (FLyrVect) layers[i];
+                        stores.add(new MyComboBoxItem(layer.getName(), layer
+                            .getFeatureStore()));
+                    }
+                }
+            }
+        }
+        List<Document> tables = project.getDocuments(TableManager.TYPENAME);
+        for (Document doc : tables) {
+            TableDocument tableDocument = (TableDocument) doc;
+            stores.add(new MyComboBoxItem(doc.getName(), tableDocument
+                .getStore()));
+        }
+
+        return stores;
+    }
+
+    private void createGUI() {
+
+        java.awt.GridBagConstraints gridBagConstraints;
+        this.setLayout(new java.awt.GridBagLayout());
+
+        // Add an empty margin
+        this.setBorder(new EmptyBorder(15, 15, 15, 15));
+
+        UsabilitySwingManager usabilitymanager =
+            ToolsSwingLocator.getUsabilitySwingManager();
+
+        JLabel layerText = new JLabel(Messages.getText("select_layer"));
+        JLabel transformText = new JLabel(Messages.getText("select_transform"));
+        JPanel botones = new JPanel();
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.weightx = 0.0;
+        gridBagConstraints.weighty = 0.0;
+        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+        this.add(layerText, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 0.0;
+        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
+        this.add(comboBox, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.weightx = 0.0;
+        gridBagConstraints.weighty = 0.0;
+        gridBagConstraints.insets = new java.awt.Insets(10, 2, 5, 2);
+        this.add(transformText, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 3;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+        if (transforms != null) {
+            JScrollPane scroller = new JScrollPane(transforms);
+            this.add(scroller, gridBagConstraints);
+        } else {
+            JPanel emptyPanel = new JPanel();
+            this.add(emptyPanel, gridBagConstraints);
+        }
+
+        botones.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 0));
+        botonCerrar = usabilitymanager.createJButton(new ActionClose(this));
+        botonCerrar.setText(Messages.getText("close"));
+        botonEliminar = usabilitymanager.createJButton(new ActionRemove(this));
+        botonEliminar.setText(Messages.getText("remove"));
+        botones.add(botonEliminar);
+        botones.add(botonCerrar);
+        botonEliminar.setEnabled(false);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
+        gridBagConstraints.weightx = 0.0;
+        gridBagConstraints.weighty = 0.0;
+        gridBagConstraints.insets = new java.awt.Insets(10, 2, 2, 2);
+        this.add(botones, gridBagConstraints);
+
+        botonEliminar.setEnabled(false);
+
+        updatePanel(null);
+    }
+
+    class ListSelectionHandler implements ListSelectionListener {
+
+        public void valueChanged(ListSelectionEvent e) {
+
+            if ((transforms != null) && (transforms.getSelected() != null)) {
+                if (transforms.isLastTransform(transforms.getSelected())) {
+                    botonEliminar.setEnabled(true);
+                    return;
+                }
+            }
+            botonEliminar.setEnabled(false);
+        }
+
+    }
+
+    @Override
+    public Dimension getPreferredSize() {
+        return new Dimension(250, 300);
+    }
+
+    private class ActionRemove implements Action {
+
+        private DefaultJDialogDataTransformList parent;
+
+        public ActionRemove(DefaultJDialogDataTransformList parent) {
+            this.parent = parent;
+        }
+
+        public void addPropertyChangeListener(PropertyChangeListener listener) {
+        }
+
+        public Object getValue(String key) {
+            return null;
+        }
+
+        public boolean isEnabled() {
+            return true;
+        }
+
+        public void putValue(String key, Object value) {
+        }
+
+        public void removePropertyChangeListener(PropertyChangeListener listener) {
+        }
+
+        public void setEnabled(boolean b) {
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (this.parent.transforms.getSelected() != null) {
+                this.parent.transforms.remove(this.parent.transforms
+                    .getSelected());
+            }
+            updatePanel(null);
+        }
+
+    }
+
+    private class ActionClose implements Action {
+
+        private DefaultJDialogDataTransformList parent;
+
+        public ActionClose(DefaultJDialogDataTransformList parent) {
+            this.parent = parent;
+        }
+
+        public void addPropertyChangeListener(PropertyChangeListener listener) {
+        }
+
+        public Object getValue(String key) {
+            return null;
+        }
+
+        public boolean isEnabled() {
+            return true;
+        }
+
+        public void putValue(String key, Object value) {
+        }
+
+        public void removePropertyChangeListener(PropertyChangeListener listener) {
+        }
+
+        public void setEnabled(boolean b) {
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            this.parent.setVisible(false);
+        }
+
+    }
+
+    private void updatePanel(FeatureStore store) {
+
+        if (transforms != null) {
+
+            if (store != null) {
+                FeatureStoreTransforms layerTransforms = store.getTransforms();
+
+                transforms.changeStore(store);
+                transforms.removeAllTransforms();
+                transforms.addTransforms(layerTransforms);
+            }
+
+            // disable the remove button if the transforms list is empty
+            if (transforms.getSelected() != null) {
+                botonEliminar.setEnabled(transforms.getTransformsCount() > 0);
+            }
+
+        } else {
+            botonEliminar.setEnabled(false);
+        }
+
+    }
+
+    @Override
+    public void setDeleteButton(boolean active) {
+        botonEliminar.setEnabled(active);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDialogDataTransformList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesCombo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesCombo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesCombo.java	(revision 42196)
@@ -0,0 +1,159 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl.components;
+
+import java.util.ArrayList;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class FeatureTypeAttributesCombo extends JComboBox {
+	/**
+     * 
+     */
+    private static final long serialVersionUID = -8843843810490892699L;
+    protected static final Logger logger = LoggerFactory.getLogger(FeatureTypeAttributesCombo.class);
+
+	public FeatureTypeAttributesCombo() {
+		super();
+		this.setModel(new DefaultComboBoxModel());
+	}
+
+	/**
+	 * Removes all items then adds atts
+	 * 
+	 * @param featureStore
+	 * @return the number of items added (equals total item count)
+	 * 
+	 * @throws DataException
+	 */
+	public int addFeatureAttrubutes(FeatureStore featureStore) throws DataException{
+		return addFeatureAttributes(featureStore.getDefaultFeatureType());
+	}
+	
+	/**
+	 * Removes all items then adds atts
+	 * 
+	 * @param featureType
+	 * @return the number of items added (equals total item count)
+	 */
+	public int addFeatureAttributes(FeatureType featureType){
+		removeAllItems();
+		FeatureAttributeDescriptor[] descriptors = featureType.getAttributeDescriptors();
+		for (int i=0 ; i<descriptors.length ; i++){
+			addFeatureAttributeDescriptor(descriptors[i]);						
+		}		
+		return descriptors.length;
+	}
+
+
+	/**
+	 * Removes all items then adds atts whose type is
+	 * contained by list
+	 * 
+	 * @param featureType
+	 * @param type
+	 * @return the number of items added (equals total item count)
+	 */
+	public int addFeatureAttributes(
+	    FeatureType featureType,
+	    ArrayList<Integer> types){
+	    
+	    removeAllItems();
+	    
+	    int count = 0;
+	    FeatureAttributeDescriptor[] descriptors = featureType.getAttributeDescriptors();
+	    for (int i=0 ; i<descriptors.length ; i++){
+	        if (isIn(descriptors[i].getType(), types)) {
+	            addFeatureAttributeDescriptor(descriptors[i]);  
+	            count++;
+	        }
+	    }     
+	    return count;
+	}
+
+	/**
+     * @param type
+     * @param types
+     * @return
+     */
+    private boolean isIn(int t, ArrayList<Integer> list) {
+        
+        int len = list.size();
+        for (int i=0; i<len; i++) {
+            if (list.get(i).intValue() == t) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void addFeatureAttributeDescriptor(FeatureAttributeDescriptor featureAttributeDescriptor){
+		((DefaultComboBoxModel)getModel()).addElement(new FeatureTypeAttributeWrapper(featureAttributeDescriptor));
+	}
+		
+	public FeatureAttributeDescriptor getSelectedFeatureAttributeDescriptor(){
+		return ((FeatureTypeAttributeWrapper)getSelectedItem()).getFeatureAttributeDescriptor();
+	}	
+	
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesCombo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/NumericFeatureTypeAttributesCombo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/NumericFeatureTypeAttributesCombo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/NumericFeatureTypeAttributesCombo.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.swing.impl.components;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class NumericFeatureTypeAttributesCombo extends FeatureTypeAttributesCombo{
+
+	/**
+     * 
+     */
+    private static final long serialVersionUID = -1694488470656611290L;
+
+    /* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.combos.FeatureTypeAttributesCombo#addFeatureAttributeDescriptor(org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor)
+	 */
+	public void addFeatureAttributeDescriptor(
+			FeatureAttributeDescriptor featureAttributeDescriptor) {
+		int type = featureAttributeDescriptor.getType();
+		if ((type == DataTypes.DOUBLE) ||
+				(type == DataTypes.FLOAT) ||
+				(type == DataTypes.INT) ||
+				(type == DataTypes.LONG)){
+			super.addFeatureAttributeDescriptor(featureAttributeDescriptor);
+		}
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/NumericFeatureTypeAttributesCombo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeCombo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeCombo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeCombo.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl.components;
+
+import java.util.List;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class FeatureTypeCombo extends JComboBox{
+	/**
+     * 
+     */
+    private static final long serialVersionUID = -3689986732982756932L;
+    protected static final Logger logger = LoggerFactory.getLogger(FeatureTypeCombo.class);
+
+	public FeatureTypeCombo() {
+		super();
+		this.setModel(new DefaultComboBoxModel());
+	}
+
+	@SuppressWarnings("unchecked")
+    public void addFeatureStore(FeatureStore featureStore){
+		removeAllItems();
+		List<FeatureType> featureTypes;
+		try {
+			featureTypes = featureStore.getFeatureTypes();
+			for (int i=0 ; i<featureTypes.size() ; i++){
+				((DefaultComboBoxModel)getModel()).addElement(featureTypes.get(i));
+			}
+		} catch (DataException e) {
+			logger.error("Error updating the panel", e);
+		}		
+	}
+	
+	public FeatureType getSelectedFeatureType(){
+		return (FeatureType)getSelectedItem();
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeCombo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeWrapper.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl.components;
+
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class FeatureTypeWrapper {
+	private FeatureType featureType = null;
+	
+	/**
+	 * @param featureType
+	 */
+	public FeatureTypeWrapper(FeatureType featureType) {
+		super();
+		this.featureType = featureType;
+	}
+
+	/**
+	 * @return the featureType
+	 */
+	public FeatureType getFeatureType() {
+		return featureType;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */		
+	public String toString() {			
+		return featureType.toString();
+	}		
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeWrapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesList.java	(revision 42196)
@@ -0,0 +1,112 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl.components;
+
+import java.util.ArrayList;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class FeatureTypeAttributesList extends JList {
+
+	/**
+     * 
+     */
+    private static final long serialVersionUID = -3457322116557877761L;
+
+    public FeatureTypeAttributesList() {
+		super();	
+		setModel(new DefaultListModel());
+	}
+	
+	public void addFeatureAttrubutes(FeatureStore featureStore) throws DataException{
+		addFeatureAttributes(featureStore.getDefaultFeatureType());
+	}
+	
+	public void addFeatureAttributes(FeatureType featureType){
+		removeAll();
+		FeatureAttributeDescriptor[] descriptors = featureType.getAttributeDescriptors();
+		for (int i=0 ; i<descriptors.length ; i++){
+			addFeatureAttributeDescriptor(descriptors[i]);						
+		}		
+	}
+
+	public void addFeatureAttributeDescriptor(FeatureAttributeDescriptor featureAttributeDescriptor){
+		((DefaultListModel)getModel()).addElement(new FeatureTypeAttributeWrapper(featureAttributeDescriptor));
+	}
+	
+	public ArrayList<FeatureAttributeDescriptor> getSelectedFeatureTypes(){
+		ArrayList<FeatureAttributeDescriptor> featureTypes = new ArrayList<FeatureAttributeDescriptor>();
+		Object[] objects = getSelectedValues();
+		for (int i=0 ; i<objects.length ; i++){
+			featureTypes.add(((FeatureTypeAttributeWrapper)objects[i]).getFeatureAttributeDescriptor());
+		}
+		return featureTypes;
+	}
+	
+	public String[] getAttributesName(){
+		Object[] objects = getSelectedValues();
+		String[] featureTypes = new String[objects.length];
+		for (int i=0 ; i<objects.length ; i++){
+			featureTypes[i] = ((FeatureTypeAttributeWrapper)objects[i]).getFeatureAttributeDescriptor().getName();
+		}
+		return featureTypes;
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributesList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributeWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributeWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributeWrapper.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl.components;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class FeatureTypeAttributeWrapper {
+	private FeatureAttributeDescriptor attributeDescriptor = null;
+	
+	/**
+	 * @param featureType
+	 */
+	public FeatureTypeAttributeWrapper(FeatureAttributeDescriptor attributeDescriptor) {
+		super();
+		this.attributeDescriptor = attributeDescriptor;
+	}
+
+	/**
+	 * @return the featureType
+	 */
+	public FeatureAttributeDescriptor getFeatureAttributeDescriptor() {
+		return attributeDescriptor;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */		
+	public String toString() {			
+		return attributeDescriptor.getName();
+	}		
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/components/FeatureTypeAttributeWrapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectDataStoreWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectDataStoreWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectDataStoreWizardPanel.java	(revision 42196)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.swing.impl;
+
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class SelectDataStoreWizardPanel extends AbstractDataTransformWizardPanel{
+	private static final long serialVersionUID = -1841990357325903449L;
+	private JList dataStoreList;
+	private JScrollPane dataStoreScrollPane;
+
+	/**
+	 * @param wizardComponents
+	 */
+	public SelectDataStoreWizardPanel() {
+		super();
+		initComponents();		
+	}	
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		dataStoreScrollPane = new javax.swing.JScrollPane();
+		dataStoreList = new javax.swing.JList();
+
+		setLayout(new java.awt.GridBagLayout());
+
+		dataStoreScrollPane.setViewportView(dataStoreList);
+
+		dataStoreList.setModel(new DefaultListModel());
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
+		add(dataStoreScrollPane, gridBagConstraints);
+	}
+
+	public void removeFeatureStore(FeatureStore featureStore){
+		DefaultListModel model =( DefaultListModel)dataStoreList.getModel();
+		for (int i=model.getSize()-1 ; i>=0 ; i--){
+			if (((FeatureStoreCombo)model.get(i)).getFeatureStore().equals(featureStore)){
+				model.remove(i);
+				break;
+			}
+		}		
+	}
+
+	/**
+	 * Adding the objects
+	 */
+	private void addDataStores(){
+	    ((DefaultListModel)dataStoreList.getModel()).removeAllElements();
+	    DataTransformGui dataTransformGui = 
+                getDataTransformWizard().getDataTransformGui();	    
+	    
+	    //Add all the tables
+		List<Document> tables = ProjectManager.getInstance().getCurrentProject()
+			.getDocuments(TableManager.TYPENAME);
+		for (Document table : tables) {
+			if (dataTransformGui.accept(((TableDocument)table).getStore())){
+    		    ((DefaultListModel)dataStoreList.getModel()).addElement(					
+    		        new FeatureStoreCombo(
+    		            table.getName(),
+    		            ((TableDocument)table).getStore(),
+    		            false
+    		        )
+    		    );	
+			}
+		}
+		
+		//Add the layers from the current view
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof IView){
+			IView view = (IView)window;
+			LayersIterator it = new LayersIterator(
+					view.getMapControl().getMapContext().getLayers());
+			while(it.hasNext()){
+				FLayer layer = it.nextLayer();
+				if (layer instanceof FLyrVect){
+				    FLyrVect layerVect = (FLyrVect)layer;
+				    FeatureStore featureStore = layerVect.getFeatureStore();
+				    boolean found = false;
+				    for (int i=0 ; i<tables.size() ; i++){
+				        TableDocument table = (TableDocument)tables.get(i);
+				        if (table.getStore().equals(featureStore)) {
+				            found = true;
+				        }							
+				    }
+				    if (!found){
+				        if (dataTransformGui.accept(featureStore)){
+				            ((DefaultListModel)dataStoreList.getModel()).addElement(
+				                new FeatureStoreCombo(layerVect.getName(),
+				                    featureStore,
+				                    true));
+				        }
+				    }
+				}
+			}
+		}	
+	}
+
+
+	/**
+	 * @return the selected feature store
+	 */
+	public FeatureStore getSelectedFeatureStore(){
+		Object obj = dataStoreList.getSelectedValue();
+		if (obj != null){
+			return ((FeatureStoreCombo)obj).getFeatureStore();
+		}
+		return null;
+	}	
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.impl.AbstractDataTransformWizardPanel#getFeatureStore()
+	 */
+	@Override
+	public FeatureStore getFeatureStore() {
+		return getSelectedFeatureStore();
+	}
+
+	/**
+	 * @return the selected feature store
+	 */
+	public boolean isSelectedFeatureStoreLoaded(){
+		Object obj = dataStoreList.getSelectedValue();
+		if (obj != null){
+			return ((FeatureStoreCombo)obj).isLoaded();
+		}
+		return false;
+	}
+
+	/**
+	 * Used to fill the combo
+	 * @author jpiera
+	 */
+	private class FeatureStoreCombo{
+		private FeatureStore featureStore = null;
+		private String name = null;
+		private boolean isLoaded = false;
+
+		public FeatureStoreCombo(String name, FeatureStore featureStore, boolean isLoaded) {
+			super();
+			this.name = name;
+			this.featureStore = featureStore;
+			this.isLoaded = isLoaded;
+		}
+
+		/**
+		 * @return the isLoaded
+		 */
+		public boolean isLoaded() {
+			return isLoaded;
+		}
+
+		/**
+		 * @return the featureStore
+		 */
+		public FeatureStore getFeatureStore() {
+			return featureStore;
+		}
+
+		/* (non-Javadoc)
+		 * @see java.lang.Object#toString()
+		 */		
+		public String toString() {			
+			return name;
+		}		
+	}
+
+	/*
+	 * 	(non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformWizard#getPanelTitle()
+	 */
+	public String getPanelTitle() {
+		return PluginServices.getText(this, "transform_datastore_selection");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizard#updatePanel()
+	 */
+	public void updatePanel() {
+	    addDataStores();	    
+	    if (dataStoreList.getSelectedIndex() == -1){
+			if (dataStoreList.getModel().getSize() > 0){
+				dataStoreList.setSelectedIndex(0);
+				getDataTransformWizard().setApplicable(true);
+			}else{
+				getDataTransformWizard().setApplicable(false);
+			}
+		}		
+	}
+
+	/**
+	 * @return
+	 */
+	public boolean isFeatureStoreLayer() {
+		Object obj = dataStoreList.getSelectedValue();
+		if (obj != null){
+			return ((FeatureStoreCombo)obj).isLoaded;
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.impl.AbstractDataTransformWizardPanel#nextPanel()
+	 */
+	@Override
+	public void nextPanel() {
+		getDataTransformWizard().updateGui();
+	}
+	
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectDataStoreWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformSelectionAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformSelectionAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformSelectionAction.java	(revision 42196)
@@ -0,0 +1,152 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl;
+
+import javax.swing.JOptionPane;
+
+import jwizardcomponent.FinishAction;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DataTransformSelectionAction extends FinishAction{
+	private static final Logger logger = LoggerFactory.getLogger(DataTransformSelectionAction.class);
+	private DefaultDataTransformWizard dataTransformWizard = null;
+	
+	public DataTransformSelectionAction(DefaultDataTransformWizard dataTransformWizard) {
+		super(dataTransformWizard.getWizardComponents());		
+		this.dataTransformWizard = dataTransformWizard;
+	}
+
+	/* (non-Javadoc)
+	 * @see jwizardcomponent.Action#performAction()
+	 */
+	public void performAction() {	
+	    
+	    /*
+	     * For layer attributes table, this depends on the user
+	     * decision. For tables without layer, for example, this is
+	     * always false
+	     */
+	    boolean result_added_separately = dataTransformWizard.isLayerLoaded();
+		//Gets the selected transformation
+		DataTransformGui featureTransformGui = dataTransformWizard.getDataTransformGui();
+			
+		//Gets the selected FeatureStore
+		FeatureStore fsto = dataTransformWizard.getFeatureStore();
+		// FeatureStore cloned_store = null;
+		
+		if (result_added_separately) {
+	        try {
+	            /*
+	             * Clone if added separately
+	             */
+	            fsto = (FeatureStore) fsto.clone();
+	        } catch (CloneNotSupportedException e1) {
+	            // FeatureStore always implements the clone method
+	        }
+		}
+
+		try {			
+			//Gets the transform
+			FeatureStoreTransform fst = null;
+			
+			// Apply the transformation
+			fst = featureTransformGui.createFeatureStoreTransform(fsto);
+			fsto.getTransforms().add(fst);
+
+			//Create and load a new layer...
+			if (result_added_separately){
+			    MapContextManager manager = MapContextLocator.getMapContextManager();
+			    FLayer layer = manager.createLayer(
+			        featureTransformGui.toString(),
+			        fsto);
+			    
+			    MapContext mco = dataTransformWizard.getMapContext();
+			    if (mco != null) {
+			        mco.getLayers().addLayer(layer);
+			    } else {
+			        ApplicationLocator.getManager().messageDialog(
+                        Messages.getText("_Layer_was_not_added_to_any_view"),
+                        Messages.getText("transform_apply"),
+			            JOptionPane.ERROR_MESSAGE);
+			    }
+				
+				layer.dispose();
+			}
+		} catch (DataException e) {
+			logger.error("Error creating the transformation", e);
+		} catch (LoadLayerException e) {
+			logger.error("Error loading the layer", e);
+		}
+		//Closing the window
+		PluginServices.getMDIManager().closeWindow(dataTransformWizard);
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformSelectionAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformWizardContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformWizardContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformWizardContainer.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl;
+
+import java.awt.BorderLayout;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.daltransform.swing.DataTransformWizardPanel;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DataTransformWizardContainer extends JWizardPanel {
+	private static final long serialVersionUID = -3410258554443619626L;
+	private DataTransformWizardPanel wizard = null;
+	
+	/**
+	 * @param wizardComponents
+	 */
+	public DataTransformWizardContainer(JWizardComponents wizardComponents, DataTransformWizardPanel wizard) {
+		super(wizardComponents);	
+		this.wizard = wizard;
+		setLayout(new BorderLayout());
+		setBorder(javax.swing.BorderFactory.createTitledBorder(wizard.getPanelTitle()));
+		add(wizard.getJPanel(), BorderLayout.CENTER);
+	}
+
+	/* (non-Javadoc)
+	 * @see jwizardcomponent.WizardPanel#back()
+	 */
+	@Override
+	public void back() {
+		wizard.lastPanel();
+		super.back();
+	}
+
+	/* (non-Javadoc)
+	 * @see jwizardcomponent.WizardPanel#next()
+	 */
+	@Override
+	public void next() {
+		wizard.nextPanel();
+		super.next();
+	}
+
+	/* (non-Javadoc)
+	 * @see jwizardcomponent.JWizardPanel#update()
+	 */
+	@Override
+	public void update() {
+		wizard.updatePanel();
+		super.update();
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformWizardContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/AbstractDataTransformWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/AbstractDataTransformWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/AbstractDataTransformWizardPanel.java	(revision 42196)
@@ -0,0 +1,151 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing.impl;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.daltransform.swing.DataTransformWizard;
+import org.gvsig.daltransform.swing.DataTransformWizardPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class AbstractDataTransformWizardPanel extends JPanel implements DataTransformWizardPanel {
+	/**
+     * 
+     */
+    private static final long serialVersionUID = 3397225908470941630L;
+    protected static final Logger logger = LoggerFactory.getLogger(AbstractDataTransformWizardPanel.class);
+	private DefaultDataTransformWizard dataTransformWizard = null;
+
+	/**
+	 * @param featureStore
+	 */
+	public AbstractDataTransformWizardPanel() {
+		super();
+	}	
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizardPanel#setDataTransformWizard(org.gvsig.app.daltransform.DataTransformWizard)
+	 */
+	public void setDataTransformWizard(DataTransformWizard dataTransformWizard) {
+		this.dataTransformWizard = (DefaultDataTransformWizard)dataTransformWizard;		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizard#getJPanel()
+	 */
+	public JPanel getJPanel() {
+		return this;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizard#getPanelTitle()
+	 */
+	public String getPanelTitle() {
+		return PluginServices.getText(this, "transform_parameters");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizard#isNextButtonEnabled()
+	 */
+	public boolean isNextButtonEnabled() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizard#lastPanel()
+	 */
+	public void lastPanel() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizard#nextPanel()
+	 */
+	public void nextPanel() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.DataTransformWizard#updatePanel()
+	 */
+	public void updatePanel() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/**
+	 * @return the featureStore
+	 */
+	public FeatureStore getFeatureStore() {
+		if (dataTransformWizard != null){
+			return dataTransformWizard.getFeatureStore();
+		}
+		return null;
+	}
+	
+	/**
+	 * @return the dataTransformWizard
+	 */
+	public DefaultDataTransformWizard getDataTransformWizard() {
+		return dataTransformWizard;
+	}	
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/AbstractDataTransformWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultDataTransformWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultDataTransformWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultDataTransformWizard.java	(revision 42196)
@@ -0,0 +1,188 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.swing.impl;
+
+import java.util.List;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.wizard.WizardAndami;
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.daltransform.swing.DataTransformWizard;
+import org.gvsig.daltransform.swing.DataTransformWizardPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DefaultDataTransformWizard extends WizardAndami implements
+    DataTransformWizard {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 8346790424453722486L;
+    private List<DataTransformWizardPanel> transformWizardPanels = null;
+    // The three default panels
+    private LoadLayerWizardPanel loadLayerWizardPanel = null;
+    private SelectDataStoreWizardPanel selectDataStoreWizardPanel = null;
+    private SelectTransformWizardPanel selectTransformWizardPanel = null;
+    // If the wizard has to use a concrete transformation
+    private DataTransformGui dataTransformGui = null;
+    private int PANELS_TO_REFRESH = 2;
+
+    /**
+     * @param wizard
+     */
+    public DefaultDataTransformWizard() {
+        super(IconThemeHelper.getImageIcon("feature-transform-wizard"));
+        loadLayerWizardPanel = new LoadLayerWizardPanel();
+        selectDataStoreWizardPanel = new SelectDataStoreWizardPanel();
+        selectTransformWizardPanel = new SelectTransformWizardPanel();
+        initialize();
+        setSize(selectTransformWizardPanel.getMaxHeight(),
+            selectTransformWizardPanel.getMaxWidth());
+    }
+
+    private void initialize() {
+        
+        getWizardComponents().getFinishButton().setEnabled(false);
+        getWizardComponents().getBackButton().setEnabled(false);
+        
+        getWindowInfo().setTitle(
+            PluginServices.getText(this, "transform_wizard"));
+        addDataTransformWizardPanel(selectTransformWizardPanel);
+        addDataTransformWizardPanel(selectDataStoreWizardPanel);
+        getWizardComponents().setFinishAction(
+            new DataTransformSelectionAction(this));
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.gvsig.app.daltransform.gui.DataTransformWizard#setApplicable(boolean)
+     */
+    public void setApplicable(boolean isEnabled) {
+        getWizardComponents().getNextButton().setEnabled(isEnabled);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.app.daltransform.DataTransformWizard#getDataTransformGui()
+     */
+    public DataTransformGui getDataTransformGui() {
+        if (dataTransformGui == null) {
+            return selectTransformWizardPanel.getFeatureTransformGui();
+        } else {
+            return dataTransformGui;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.gvsig.app.daltransform.DataTransformWizard#setDataTransformGui(org
+     * .gvsig.app.daltransform.DataTransformGui)
+     */
+    public void updateGui() {
+        // Remove all the panels
+        for (int i = getWizardComponents().getWizardPanelList().size() - 1; i >= PANELS_TO_REFRESH; i--) {
+            getWizardComponents().removeWizardPanel(i);
+        }
+        // Add new panels
+        transformWizardPanels = getDataTransformGui().createPanels();
+        for (int i = 0; i < transformWizardPanels.size(); i++) {
+            addDataTransformWizardPanel(transformWizardPanels.get(i));
+        }
+        addDataTransformWizardPanel(loadLayerWizardPanel);
+    }
+
+    public void addDataTransformWizardPanel(
+        DataTransformWizardPanel dataTransformWizardPanel) {
+        dataTransformWizardPanel.setDataTransformWizard(this);
+        getWizardComponents().addWizardPanel(
+            new DataTransformWizardContainer(getWizardComponents(),
+                dataTransformWizardPanel));
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.app.daltransform.DataTransformWizard#getFeatureStore()
+     */
+    public FeatureStore getFeatureStore() {
+        return selectDataStoreWizardPanel.getFeatureStore();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.app.daltransform.DataTransformWizard#isFeatureStoreLayer()
+     */
+    public boolean isFeatureStoreLayer() {
+        return selectDataStoreWizardPanel.isFeatureStoreLayer();
+    }
+
+    public boolean isLayerLoaded() {
+        return loadLayerWizardPanel.isLayerLoaded();
+    }
+
+    public MapContext getMapContext() {
+        return loadLayerWizardPanel.getMapContext();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.gvsig.app.daltransform.gui.DataTransformWizard#getWindow()
+     */
+    public IWindow getWindow() {
+        return this;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.gvsig.app.daltransform.gui.DataTransformWizard#setDataTransformGui
+     * (org.gvsig.app.daltransform.gui.DataTransformGui)
+     */
+    public void setDataTransformGui(DataTransformGui dataTransformGui) {
+        this.dataTransformGui = dataTransformGui;
+        PANELS_TO_REFRESH = 1;
+        getWizardComponents().removeWizardPanel(0);
+        
+        selectDataStoreWizardPanel.updatePanel();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultDataTransformWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectTransformWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectTransformWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectTransformWizardPanel.java	(revision 42196)
@@ -0,0 +1,227 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.swing.impl;
+
+import java.awt.Dimension;
+import java.awt.Font;
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.DataTransformManager;
+import org.gvsig.daltransform.swing.DataTransformGui;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class SelectTransformWizardPanel extends AbstractDataTransformWizardPanel implements ListSelectionListener{
+	/**
+     * 
+     */
+    private static final long serialVersionUID = -4191590513663444616L;
+    private JList transformList;
+	private JScrollPane transformScrollPane;
+	private JScrollPane descriptionScrollPane;
+	private JTextArea descriptionText;
+	private int maxWidth = 315;
+	private int maxHeight = 600;
+
+	/**
+	 * @param wizardComponents
+	 */
+	public SelectTransformWizardPanel() {
+		super();	
+		initComponents();		
+		addTransforms();
+		transformList.addListSelectionListener(this);		
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		transformScrollPane = new javax.swing.JScrollPane();
+		transformList = new javax.swing.JList();
+		descriptionScrollPane = new javax.swing.JScrollPane();
+		descriptionText = new javax.swing.JTextArea();
+
+		setLayout(new java.awt.GridBagLayout());
+
+		transformScrollPane.setViewportView(transformList);
+
+		transformList.setModel(new DefaultListModel());
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(2, 2, 5, 2);
+		add(transformScrollPane, gridBagConstraints);
+
+		descriptionText.setColumns(20);
+		descriptionText.setEditable(false);
+		descriptionText.setRows(5);
+		descriptionText.setLineWrap(true);
+		descriptionText.setWrapStyleWord(true);
+		descriptionText.setBackground(this.getBackground());
+		
+		
+		Font fnt = descriptionText.getFont();
+		fnt = fnt.deriveFont(Font.PLAIN);
+		descriptionText.setFont(fnt);
+		
+		descriptionText.setBorder(null);
+		descriptionScrollPane.setBorder(null);
+		descriptionScrollPane.setViewportView(descriptionText);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(5, 2, 2, 2);
+		add(descriptionScrollPane, gridBagConstraints);
+	}
+
+	/**
+	 * Adding the objects
+	 */
+	protected void addTransforms(){
+		DataTransformManager featureTransformManager = 
+			DataTransformLocator.getDataTransformManager();			
+		List<DataTransformGui> dataTransformGui =
+			featureTransformManager.getDataTransforms();
+		for (int i=0 ; i<dataTransformGui.size() ; i++){
+			((DefaultListModel)transformList.getModel()).addElement(new FeatureTransformGuiWrapper(dataTransformGui.get(i)));
+			Dimension dimension = dataTransformGui.get(i).getMinDimension();
+			if (dimension != null){
+				if (dimension.getHeight() > maxHeight){
+					maxHeight = (int)dimension.getHeight();
+				}
+				if (dimension.getWidth() > maxWidth){
+					maxWidth = (int)dimension.getWidth();
+				}
+			}
+		}	
+		updatePanel();
+	}
+
+	/*
+	 * 	(non-Javadoc)
+	 * @see org.gvsig.app.daltransform.impl.AbstractDataTransformWizardPanel#updatePanel()
+	 */
+	@Override
+	public void updatePanel() {
+		if (transformList.getSelectedIndex() == -1){
+			if (transformList.getModel().getSize() > 0){
+				transformList.setSelectedIndex(0);
+				valueChanged(null);
+			}
+		}else{
+			if (transformList.getModel().getSize() == 0){
+				getDataTransformWizard().setApplicable(false);
+			}
+		}
+	}	
+
+	/* (non-Javadoc)
+	 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
+	 */
+	public void valueChanged(ListSelectionEvent e) {
+		Object obj = transformList.getSelectedValue();
+		if (obj != null){
+			descriptionText.setText(((FeatureTransformGuiWrapper)obj).getFeatureTransformGui().getDescription());
+		}
+	}
+
+	public DataTransformGui getFeatureTransformGui(){
+		Object obj = transformList.getSelectedValue();
+		if (obj != null){
+			return ((FeatureTransformGuiWrapper)obj).getFeatureTransformGui();
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformWizard#getPanelTitle()
+	 */
+	public String getPanelTitle() {
+		return PluginServices.getText(this, "transform_selection");
+	}
+
+	/**
+	 * @return the maxWidth
+	 */
+	public int getMaxWidth() {
+		return maxWidth;
+	}
+
+	/**
+	 * @return the maxHeight
+	 */
+	public int getMaxHeight() {
+		return maxHeight;
+	}
+
+	private class FeatureTransformGuiWrapper{
+		private DataTransformGui featureTransformGui = null;
+
+		/**
+		 * @param featureTransformGui
+		 */
+		public FeatureTransformGuiWrapper(
+				DataTransformGui featureTransformGui) {
+			super();
+			this.featureTransformGui = featureTransformGui;
+		}
+
+		/**
+		 * @return the featureTransformGui
+		 */
+		public DataTransformGui getFeatureTransformGui() {
+			return featureTransformGui;
+		}
+
+		/* (non-Javadoc)
+		 * @see java.lang.Object#toString()
+		 */
+		public String toString() {			
+			return featureTransformGui.getName();
+		}		
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectTransformWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/LoadLayerWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/LoadLayerWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/LoadLayerWizardPanel.java	(revision 42196)
@@ -0,0 +1,330 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.swing.impl;
+
+import java.awt.Font;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.List;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.view.BaseViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.MapContext;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class LoadLayerWizardPanel extends AbstractDataTransformWizardPanel implements ItemListener{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -7893735055404404591L;
+	
+	private static final Logger logger = LoggerFactory.getLogger(LoadLayerWizardPanel.class);
+	private JCheckBox loadLayerCb = null;
+	private JScrollPane messageScroll = null;
+	private JTextArea messageTextArea = null;
+	private JPanel northPanel = null;
+	private JLabel selectViewLabel;
+	private JComboBox selectViewCombo;
+    private JPanel centerPanel;
+	private FeatureStoreTransform transform = null;
+
+	/**
+	 * @param wizardComponents
+	 */
+	public LoadLayerWizardPanel() {
+		super();	
+
+		initComponents();
+		initLabels();	
+		addViews();
+		loadLayerCb.addItemListener(this);
+		loadLayerCb.setSelected(true);
+		selectViewLabel.setEnabled(true);
+		selectViewCombo.setEnabled(true);
+	}
+
+	private void initLabels(){
+		loadLayerCb.setText(PluginServices.getText(this, "transform_load_layer_query"));
+		selectViewLabel.setText(PluginServices.getText(this, "transform_view_to_load"));
+	}
+
+	private void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+
+        northPanel = new javax.swing.JPanel();
+        messageScroll = new javax.swing.JScrollPane();
+        messageTextArea = new javax.swing.JTextArea();
+        loadLayerCb = new javax.swing.JCheckBox();
+        selectViewLabel = new javax.swing.JLabel();
+        centerPanel = new javax.swing.JPanel();
+        selectViewCombo = new JComboBox();
+
+        setLayout(new java.awt.BorderLayout());
+
+        northPanel.setLayout(new java.awt.GridBagLayout());
+
+        messageScroll.setBorder(null);
+
+        messageTextArea.setColumns(20);
+        messageTextArea.setEditable(false);
+        messageTextArea.setLineWrap(true);
+
+        messageTextArea.setWrapStyleWord(true);
+        messageTextArea.setBackground(northPanel.getBackground());
+        Font fnt = messageTextArea.getFont();
+        fnt = fnt.deriveFont(Font.PLAIN);
+        messageTextArea.setFont(fnt);
+
+        
+        messageTextArea.setRows(5);
+        messageTextArea.setBorder(null);
+        messageScroll.setViewportView(messageTextArea);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(2, 2, 5, 2);
+        northPanel.add(messageScroll, gridBagConstraints);
+
+        loadLayerCb.setText("jCheckBox1");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(5, 2, 2, 2);
+        northPanel.add(loadLayerCb, gridBagConstraints);
+        
+        add(northPanel, java.awt.BorderLayout.NORTH);
+        
+        centerPanel.setLayout(new java.awt.GridBagLayout());
+
+        selectViewLabel.setText("jLabel1");
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(5, 2, 5, 2);
+        centerPanel.add(selectViewLabel, gridBagConstraints);
+
+        gridBagConstraints = new java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        gridBagConstraints.insets = new java.awt.Insets(5, 2, 2, 2);
+        centerPanel.add(selectViewCombo, gridBagConstraints);
+
+        add(centerPanel, java.awt.BorderLayout.CENTER);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.impl.AbstractDataTransformWizardPanel#updatePanel()
+	 */
+	public void updatePanel() {
+		//Gets the selected transformation
+		DataTransformGui featureTransformGui = getDataTransformWizard().getDataTransformGui();
+		
+		//Gets the selected FeatureStore
+		FeatureStore featureStore = getFeatureStore();
+		
+		//Apply the transformation
+		try {
+			transform = featureTransformGui.createFeatureStoreTransform(featureStore);
+
+			if (getDataTransformWizard().isFeatureStoreLayer()){
+				updateGuiForLayer(transform);
+			}else{
+				updateGuiForTable(transform);
+			}
+		} catch (DataException e) {
+			logger.error("Error creating the transformation", e);
+		}		
+	}
+
+	/**
+	 * Update the form when the transform has been applied in
+	 * to a table
+	 * @param transform
+	 * @throws DataException
+	 */
+	private void updateGuiForTable(FeatureStoreTransform transform) throws DataException{
+		FeatureType featureType = transform.getDefaultFeatureType();
+		FeatureAttributeDescriptor[] featureAttributeDescriptors = featureType.getAttributeDescriptors();
+		boolean hasGeometry = false;
+		for (int i=0 ; i<featureAttributeDescriptors.length ; i++){
+			if (featureAttributeDescriptors[i].getType() == DataTypes.GEOMETRY){
+				hasGeometry = true;
+			}
+		}
+		if (hasGeometry){
+			if (selectViewCombo.getItemCount() == 0){
+				messageTextArea.setText(PluginServices.getText(this, "transform_layout_not_view_to_load"));
+				setLoadLayerVisible(false);
+			}else{
+				messageTextArea.setText(PluginServices.getText(this, "transform_layout_geometry"));
+				setLoadLayerVisible(true);
+			}
+		}else{
+			messageTextArea.setText(PluginServices.getText(this, "transform_layout_no_geometry"));
+			setLoadLayerVisible(false);
+		}		
+	}
+
+	/**
+	 * Set if it is possible or not lo load a layer
+	 * from the transformation
+	 * @param isVisible
+	 */
+	private void setLoadLayerVisible(boolean isVisible){
+		loadLayerCb.setVisible(isVisible);
+		selectViewLabel.setVisible(isVisible);
+		selectViewCombo.setVisible(isVisible);
+	}
+
+	/**
+	 * Add the project views
+	 */
+	private void addViews(){
+	    selectViewCombo.removeAllItems();
+		
+		List<Document> views = ProjectManager.getInstance().getCurrentProject().getDocuments(ViewManager.TYPENAME);
+		for (Document view : views) {
+		    selectViewCombo.addItem(view);
+		}
+//		ProjectExtension ext = (ProjectExtension) PluginServices.getExtension(ProjectExtension.class);
+//		ArrayList<ProjectDocument> projects = ext.getProject().getDocumentsByType(ProjectViewFactory.registerName);
+//		for (int i=0 ; i<projects.size() ; i++){
+//			ProjectViewBase view = (ProjectViewBase)projects.get(i);
+//			((DefaultListModel)selectViewList.getModel()).addElement(view);
+//		}
+//		if (selectViewList.getModel().getSize() > 0){
+//			hasViews = true;
+//		}
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof IView){
+		    selectViewCombo.setSelectedItem(window);
+		}
+	}
+
+    public boolean isNextButtonEnabled() {
+        return true;
+    }
+
+	
+	/**
+	 * Update the form when the transform has been applied in
+	 * to a layer
+	 * @param transform
+	 * @throws DataException
+	 */
+	private void updateGuiForLayer(FeatureStoreTransform transform){
+		messageTextArea.setText(PluginServices.getText(this, "transform_layer"));
+		setLoadLayerVisible(false);
+	}
+
+	/**
+	 * @return if the layer has to be loaded 
+	 */
+	public boolean isLayerLoaded(){
+		if (!loadLayerCb.isVisible()){
+			return false;
+		}
+		return loadLayerCb.isSelected();
+	}	
+
+	/**
+	 * @return the transform
+	 */
+	public FeatureStoreTransform getTransform() {
+		return transform;
+	}
+	
+	/**
+	 * @return The mapcontext
+	 */
+	public MapContext getMapContext(){
+		Object obj = selectViewCombo.getSelectedItem();
+		if (obj != null){
+			return ((BaseViewDocument)obj).getMapContext();
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
+	 */
+	public void itemStateChanged(ItemEvent arg0) {
+		boolean isSelected = loadLayerCb.isSelected();
+		selectViewLabel.setEnabled(isSelected);
+		selectViewCombo.setEnabled(isSelected);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformWizard#getPanelTitle()
+	 */
+	public String getPanelTitle() {
+		return PluginServices.getText(this, "transform_apply");
+	}
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/LoadLayerWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizard.java	(revision 42196)
@@ -0,0 +1,114 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+
+
+/**
+ * This interface has to be implemented by the transformation
+ * wizard. It has to provide 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface DataTransformWizard {
+	
+	/**
+	 * Returns the window that has to be displayed to 
+	 * apply transformation.
+	 * @return
+	 * The window to display.
+	 */
+	public IWindow getWindow();
+	
+	/**
+	 * Returns <code>true</code> if the transformation 
+	 * can be applied. 
+	 * @param isApplicable
+	 * If the transformation can be applied.
+	 */
+	public void setApplicable(boolean isApplicable);
+	
+	/**
+	 * Returns the  {@link FeatureStore} that can is used
+	 * to apply the transformation.
+	 * @return
+	 * The selected {@link FeatureStore}
+	 */
+	public FeatureStore getFeatureStore();
+	
+	/**
+	 * Returns <code>true</code> if the selected {@link FeatureStore}
+	 * has been selected from a layer. 
+	 * @return
+	 * If the selected {@link FeatureStore} has been selected
+	 * from a layer. 
+	 */
+	public boolean isFeatureStoreLayer();
+	
+	/**
+	 * Returns the selected {@link DataTransformGui}. It is used
+	 * to create the {@link FeatureStoreTransform}.
+	 * @return
+	 * The selected {@link DataTransformGui}.
+	 */
+	public DataTransformGui getDataTransformGui();	
+	
+	/**
+	 * Sets the value of the transformation to apply. The wizard
+	 * uses this transformation like the selected transformation.
+	 * @param dataTransformGui
+	 * The transformation to apply.
+	 */
+	public void setDataTransformGui(DataTransformGui dataTransformGui);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizardPanel.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.swing;
+
+import javax.swing.JPanel;
+
+/**
+ * This class has to be inherited by all the classes
+ * that appears on the transformation wizard. It contains
+ * methods to manage the wizard.  
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface DataTransformWizardPanel {
+
+	/**
+	 * Returns a title for the panel.
+	 * @return
+	 * The panel title.
+	 */
+	public String getPanelTitle();
+
+	/**
+	 * This method is called when the next button is clicked
+	 */
+	public void nextPanel();
+
+	/**
+	 * This method is called when the last button is clicked
+	 */
+	public void lastPanel();
+	
+	/**
+	 * This method is called when the panel is displayed
+	 */
+	public void updatePanel();
+		
+	/**
+	 * Return the panel to display.
+	 * @return
+	 * The panel.
+	 */
+	public JPanel getJPanel();
+	
+	/**
+	 * Sets the DataTransformWizard that contains information about
+	 * all the wizard.
+	 * @param dataTransformWizard
+	 * The wizard to set.
+	 */
+	public void setDataTransformWizard(DataTransformWizard dataTransformWizard);
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformGui.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformGui.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformGui.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform.swing;
+
+import java.awt.Dimension;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+
+/**
+ * This interface is used to establish a relationship between 
+ * feature transformations and their user interfaces. It creates 
+ * the panels that are used to set the parameters that the 
+ * transformation needs. 
+ * 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface DataTransformGui {
+    
+	/**
+	 * Creates a feature transformation from a feature store. The
+	 * class that implements this interface can create a transformation
+	 * using this feature store and all the parameters that the user has
+	 * selected. All these parameters must be known by this class
+	 * @param featureStore
+	 * The selected feature store
+	 * @return
+	 * the transformation
+	 * @throws DataException
+	 */
+	public FeatureStoreTransform createFeatureStoreTransform(FeatureStore featureStore) throws DataException;
+	
+	/**
+	 * Return if the transformation can be applied in a {@link FeatureStore}. 
+	 * @param featureStore
+	 *     the original feature store
+	 * @return
+	 *     <code>true</code> if the transformation can be applied.
+	 */
+	public boolean accept(FeatureStore featureStore);
+		
+    /**
+     * Creates a list of panels to set the parameters used on the transformation.
+     * @return
+     * a set of panels with the parameters of the transformation
+     */
+	public List<DataTransformWizardPanel> createPanels();
+
+	/**
+	 * @return the name that is displayed in the feature transformation
+	 * list
+	 */
+	public String getName();
+	
+	/**
+	 * @return a description of the feature transformation
+	 */
+	public String getDescription();
+	
+	/**
+	 * Returns the minimum size that has to be the wizard to display
+	 * the forms.
+	 * @return
+	 * The minimum size for the panels. 
+	 */
+	public Dimension getMinDimension();
+
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformGui.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDataTransformList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDataTransformList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDataTransformList.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.daltransform.swing;
+
+import javax.swing.JPanel;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class JDataTransformList extends JPanel {
+
+    private static final long serialVersionUID = -6577975265992377228L;
+
+    public abstract FeatureStoreTransform getSelected();
+
+    public abstract void remove(FeatureStoreTransform transform);
+
+    public <ListSelectionListenerHandler> void addListSelectionListener(
+        ListSelectionListenerHandler listSelectionListenerHandler) {
+    }
+
+    public abstract void addTransforms(FeatureStoreTransforms transforms);
+
+    public abstract void removeAllTransforms();
+
+    public abstract void changeStore(FeatureStore featureStore);
+
+    public abstract int getTransformsCount();
+
+    public abstract boolean isLastTransform(FeatureStoreTransform selected);
+
+    public abstract void addListSelectionListener(
+        ListSelectionListener actionListener);
+
+    public abstract int getSelectedIndex();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDataTransformList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDialogDataTransformList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDialogDataTransformList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDialogDataTransformList.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.daltransform.swing;
+
+import javax.swing.JPanel;
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ * 
+ */
+public abstract class JDialogDataTransformList extends JPanel {
+
+    private static final long serialVersionUID = -4119133113380461961L;
+
+    public abstract void setDeleteButton(boolean active);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDialogDataTransformList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLocator.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform;
+
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DataTransformLocator extends AbstractLocator {
+	private static final String LOCATOR_NAME = "DataTransformLocator";
+	/**
+	 * GPEManager name used by the locator to access the instance
+	 */
+	public static final String DATA_TRANSFORM_MANAGER_NAME = "DataTransformManager";
+	private static final String DATA_TRANSFORM_MANAGER_DESCRIPTION = "DataTransformManager of gvSIG";
+
+	/**
+	 * Unique instance.
+	 */
+	private static final DataTransformLocator instance = new DataTransformLocator();
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.tools.locator.Locator#getLocatorName()
+	 */
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+	
+	/**
+	 * Return a reference to {@link DataTransformManager}.
+	 *
+	 * @return a reference to DataTransformManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static DataTransformManager getDataTransformManager() throws LocatorException {
+		return (DataTransformManager) getInstance().get(DATA_TRANSFORM_MANAGER_NAME);
+	}
+	
+	/**
+	 * Return the singleton instance.
+	 *
+	 * @return the singleton instance
+	 */
+	public static DataTransformLocator getInstance() {
+		return instance;
+	}
+	
+	/**
+	 * Registers the Class implementing the {@link DataTransformManager} interface.
+	 *
+	 * @param clazz
+	 *            implementing the DataTransformManager interface
+	 */
+	public static void registerDataTransformManager(Class<?> clazz) {
+		getInstance().register(DATA_TRANSFORM_MANAGER_NAME, 
+				DATA_TRANSFORM_MANAGER_DESCRIPTION,
+				clazz);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/NotRegisteredTransformException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/NotRegisteredTransformException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/NotRegisteredTransformException.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class NotRegisteredTransformException extends BaseException{
+	private static final long serialVersionUID = 6104956845700384855L;
+	private String name = null;
+	
+	/**
+	 * @param message
+	 * @param cause
+	 * @param key
+	 * @param code
+	 */
+	public NotRegisteredTransformException(String name) {
+		init();
+		this.name = name;
+	}
+	
+	private void init() {
+		messageKey = "transform_not_registered";
+		formatString = "Can�t create the wizard because there is not a " +
+			"registered transform whit the name " + name + ".";
+	}
+
+}
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/NotRegisteredTransformException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLibrary.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.daltransform;
+
+import java.util.Locale;
+
+import org.gvsig.app.ApplicationLibrary;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class DataTransformLibrary extends AbstractLibrary  {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(DataTransformLibrary.class);
+        require(DALLibrary.class);
+        require(ApplicationLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		// Validate there is any implementation registered.
+		DataTransformManager dataTransformManager = DataTransformLocator.getDataTransformManager();
+		if (dataTransformManager == null) {
+			throw new ReferenceNotRegisteredException(
+					DataTransformLocator.DATA_TRANSFORM_MANAGER_NAME, DataTransformLocator.getInstance());
+		}	
+	}
+}
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+    <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
+	<resourceBundle name="text"/>	
+	<extensions>		
+		<extension class-name="org.gvsig.daltransform.app.mainplugin.DataTransformExtension"
+			description="Create a transform"
+			active="true">
+			<menu text="tools/feature_transform/create"
+			action-command="CREATE" />
+		</extension>
+		<extension class-name="org.gvsig.daltransform.app.mainplugin.DataTransformExtension"
+			description="View a transform"
+			active="true">
+			<menu text="tools/feature_transform/view"
+			action-command="VIEW" />
+		</extension>
+	</extensions>	
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/images/feature-transform-tools/feature-transform-wizard.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/images/feature-transform-tools/feature-transform-wizard.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,21 @@
+transform_wizard=Aplicar una transformaci�n
+transform_selection=Selecciona una transformaci�n
+transform_datastore_selection=Selecciona un origen de datos
+transform_parameters=Selecciona los par�metros de la transformaci�n
+feature_transform=Transformaciones
+transform_apply=Aplicar la transformaci�n
+transform_load_layer_query=Cargar el resultado de la transformaci�n como una capa
+transform_layer=Ha aplicado una transformaci�n sobre una capa. Si contin�a, el resultado de la transformaci�n de aplicar� sobre la capa.
+transform_layout_geometry=Ha aplicado una transformaci�n sobre una tabla. La transformaci�n resultante tiene un atributo de tipo geometr�a, por lo que se podr� cargar en una vista.
+transform_layout_no_geometry=Ha aplicado una transformaci�n sobre una tabla. La transformaci�n resultante NO tiene un atributo de tipo geometr�a, por lo que NO se podr� cargar en la vista activa.
+transform_layout_not_view_to_load=Ha aplicado una transformaci�n sobre una tabla. La transformaci�n resultante tiene un atributo de tipo geometr�a pero no hay ninguna vista creada por lo que no se podr� cargar. Si quiere visualizarla, cree una vista y vuelva a aplicar la transformaci�n.
+transform_view_to_load=Selecciona la vista en la que quiere cargar la transformaci�n
+transform_second_datastore_selection=Selecciona el segundo origen de datos
+transform_create_wizard_exception=Excepci�n creando el wizard para aplicar trasnformaciones.
+create=Crear
+view=Ver
+select_transform=Selecciona una transformaci�n
+select_layer=Selecciona una capa
+view_transforms=Ver transformaciones
+not_featurestore_loaded=No hay ning�n almac�n de datos vectorial cargado
+_Layer_was_not_added_to_any_view=No se a�adi� la capa a ninguna vista
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,21 @@
+transform_wizard=Apply a transform
+transform_selection=Select a transform
+transform_datastore_selection=Select a data store
+transform_parameters=Select the transformation parameters
+feature_transform=Transforms
+transform_apply=Apply the transform
+transform_load_layer_query=Load the transformation output like a layer
+transform_layer=You have applied the transformation in a layer. If you continue, the result will be applied in the layer.
+transform_layout_geometry=You have applied the transformation in a table. The result of the transformation has a geometric attribute and it is possible to load it like a layer.
+transform_layout_no_geometry==You have applied the transformation in a table The result of the transformation DOESN'T have a geometric attribute and it can NOT be loaded like a layer.
+transform_layout_not_view_to_load=You have applied the transformation in a table.The result of the transformation has a geometric attribute and it is possible to load it like a layer but there is not a view created. If you want to visualize it, just create a view and apply other time the transformation.
+transform_view_to_load=Select the view to load the transformation.
+transform_second_datastore_selection=Select the second data store.
+transform_create_wizard_exception=Exception creating a wizard to apply transformations. 
+create=Create
+view=View
+select_transform=Select a transform
+select_layer=Select a layer
+view_transforms=View transforms
+not_featurestore_loaded=There is not any feature store loaded
+_Layer_was_not_added_to_any_view=Layer was not added to any view
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1,2 @@
+org.gvsig.daltransform.DataTransformLibrary
+org.gvsig.daltransform.impl.DefaultDataTransformLibrary
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml	(revision 42196)
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.daltransform.app.eventtheme</artifactId>
+  <packaging>jar</packaging>
+  <name>Transformation: Event theme</name>
+  <description>
+This plugin add an event theme layer to the view by selecting 2 fields from a table.
+  </description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.daltransform.app</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.daltransform.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.andami</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.tools.lib</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.projection.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.control</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.api</artifactId>
+        <scope>compile</scope>
+    </dependency>
+    <!--TEST-->
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.daltransform.app.mainplugin</artifactId>
+        <type>test-jar</type>
+        <scope>test</scope>
+    </dependency>        
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>    
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.daltransform.app.mainplugin -ge 2</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>Data-transforms</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.app.eventtheme</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:56 CEST 2015
+buildNumber=2147

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,64 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/dal/feature/EventThemeTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/dal/feature/EventThemeTransform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/dal/feature/EventThemeTransform.java	(revision 42196)
@@ -0,0 +1,475 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.eventtheme.dal.feature;
+
+import java.util.Arrays;
+
+import javax.swing.JOptionPane;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.SetReadOnlyAttributeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.task.AbstractMonitorableTask;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class implements a transformation for a events theme. The original 
+ * {@link DataStore} have to have a couple of attributes, one with the X 
+ * coordinate and the second one with the Y coordinate. The result of 
+ * the transformation is a {@link DataStore} that has a new geometric 
+ * attribute and its value is a point with the coordinates specified in 
+ * the original {@link DataStore}. 
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class EventThemeTransform extends AbstractFeatureStoreTransform {
+
+	private static Logger logger = LoggerFactory.getLogger(
+			EventThemeTransform.class);
+	
+    public static final String PERSISTENCE_DEFINITION_NAME = "EventThemeTransform";
+    /**
+     * Max number of features used for initial estimation
+     * of extent. Many other features will be ignored
+     * simply with "iter.next()"
+     */
+    public static int MAX_INI_FEATURES = 200;
+
+    private String xFieldName = null;
+    private String yFieldName = null;
+    private String geometryFieldName = null;
+    private IProjection projection = null;
+    private FeatureType originalFeatureType;
+    private GeometryManager geometryManager = GeometryLocator.getGeometryManager();    
+    private Envelope envelope;
+
+    public EventThemeTransform() {
+        super();
+        geometryManager = GeometryLocator.getGeometryManager();
+    }
+
+    /**
+     * This method initializes the transformation, sets the name of the parameters and 
+     * sets the value of the {@link FeatureType} returned by the transformation. 
+     * @param store
+     * The original store. 
+     * @param geometryFieldName
+     * The field that contains the geometric attribute.
+     * @param xFieldName
+     * The field that contains the X coordinate.
+     * @param yFieldName
+     * The field that contains the Y coordinate.
+     * @throws DataException
+     */
+    public void initialize(
+    		FeatureStore store,
+    		String geometryFieldName,
+    		String xFieldName,
+    		String yFieldName,
+    		IProjection projection) throws DataException{
+    	
+        setFeatureStore(store);
+        this.xFieldName = xFieldName;
+        this.yFieldName = yFieldName;
+        this.projection = projection;
+        if ((geometryFieldName == null) || (geometryFieldName.equals(""))){
+            this.geometryFieldName = "the_geom";
+        }else{
+            this.geometryFieldName = geometryFieldName;
+        }
+        this.originalFeatureType = this.getFeatureStore()
+        .getDefaultFeatureType();
+
+        EditableFeatureType type = originalFeatureType.getEditable();
+        if (type.get(this.geometryFieldName) == null){
+            EditableFeatureAttributeDescriptor attributeDescriptor = type.add(this.geometryFieldName,  DataTypes.GEOMETRY);
+            try {
+                attributeDescriptor.setGeometryType(geometryManager.getGeometryType(TYPES.POINT, SUBTYPES.GEOM2D));
+            } catch (GeometryTypeNotSupportedException e) {
+                throw new InitializeException(e);
+            } catch (GeometryTypeNotValidException e) {
+                throw new InitializeException(e);
+            }           
+            attributeDescriptor.setSRS(projection);
+        }
+
+        try {
+            /*
+             * creates and updates envelope with all features
+             */
+            initEnvelope(store, MAX_INI_FEATURES);
+        } catch (CreateEnvelopeException e) {
+            throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(e);
+        }
+
+        type.setDefaultGeometryAttributeName(this.geometryFieldName);
+        FeatureType[] types = new FeatureType[] { type.getNotEditableCopy() };
+        setFeatureTypes(Arrays.asList(types), types[0]);
+    }
+    
+    
+
+    /**
+     * creates and updates envelope with all features
+     * 
+     */
+    private void initEnvelope(FeatureStore fsto, int max_feats) throws CreateEnvelopeException {
+        
+        envelope = geometryManager.createEnvelope(SUBTYPES.GEOM2D);
+        FeatureSet fset = null;
+        DisposableIterator diter = null;
+        Feature feat = null;
+        try {
+            fset = fsto.getFeatureSet();
+            diter = fset.fastIterator();
+            
+            // int count = 0;
+            int countused = 0;
+            int nextwait = 1;
+            int index = 0;
+            
+            while (diter.hasNext() && (countused < max_feats)) {
+            	
+                feat = (Feature) diter.next();
+                /*
+                 * This loop will use about 70 features from the first
+                 * 3000 features, more and more separated each time.
+                 * Something like:
+                 * 
+                 * 1st, 2nd ,3rd, 5th, 8th, 15, 25, 40, 100, 300...
+                 * 
+                 * Other features are ignored with diter.next().
+                 * That causes an acceptable behavior even if the store
+                 * is very large.
+                 * 
+                 * Afterwards, the extent is updated while drawing,
+                 * so it's not very important.
+                 */
+                index++;
+                if (index == nextwait) {
+                	index = 0;
+                	/*
+                	 * This causes that the first 5 features
+                	 * will always be used.
+                	 */
+                	if (countused > 5) {
+                    	nextwait++;
+                	}
+                	this.updateEnvelope(feat);
+                	countused++;
+                }
+                // count++;
+            }
+            
+            diter.dispose();
+            
+        } catch (Exception dex) {
+            throw new CreateEnvelopeException(SUBTYPES.GEOM2D, dex);
+        }
+    }
+    
+    public void setEnvelope(Envelope env) {
+    	this.envelope = env;
+    }
+
+    /*
+     * Currently not used
+     */
+    private void launchFullExtentThread(DisposableIterator diter) {
+    	
+    	ComputeExtentTask task = new ComputeExtentTask(diter, this);
+    	task.start();
+	}
+
+	/* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#applyTransform(org.gvsig.fmap.dal.feature.Feature, org.gvsig.fmap.dal.feature.EditableFeature)
+     */
+    public void applyTransform(Feature source, EditableFeature target)
+    throws DataException {
+        
+        this.copySourceToTarget(source, target);
+
+        try {
+            
+            Geometry point = null;
+            Object xval = source.get(xFieldName);
+            Object yval = source.get(yFieldName);
+            if (xval == null || yval == null) {
+                logger.info("Found row with null coordinates in event theme (created null geometry)");
+                target.set(geometryFieldName, null);
+                target.setDefaultGeometry(null);  
+            } else {
+                point = geometryManager.createPoint(
+                    new Double(xval.toString()),
+                    new Double(yval.toString()),
+                    SUBTYPES.GEOM2D);
+                target.set(geometryFieldName, point);
+                target.setDefaultGeometry(point);   
+                envelope.add(point.getEnvelope());
+            }
+        } catch ( SetReadOnlyAttributeException e1) {            
+            // Do nothing
+            
+        } catch (Exception e) {
+            throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(
+                TYPES.POINT, SUBTYPES.GEOM2D, e);
+        }       
+        
+    }
+    
+    /**
+     * Used internally to initialize envelope
+     * 
+     */
+    private void updateEnvelope(Feature feat) throws CreateGeometryException {
+
+        Point point = geometryManager.createPoint(
+            new Double(feat.get(xFieldName).toString()),
+            new Double(feat.get(yFieldName).toString()),
+            SUBTYPES.GEOM2D);
+        envelope.add(point.getEnvelope());
+    }
+
+    /**
+     * @param source
+     * @param target
+     */
+    private void copySourceToTarget(Feature source, EditableFeature target) {
+        FeatureAttributeDescriptor attr, attrTrg;
+        FeatureType ftSrc = source.getType();
+        FeatureType ftTrg = target.getType();
+
+
+        for (int i = 0; i < source.getType().size(); i++) {
+            attr = ftSrc.getAttributeDescriptor(i);
+            if (ftTrg.getIndex(attr.getName()) > -1) {
+                try {
+                    target.set(attr.getName(), source.get(i));
+                } catch (IllegalArgumentException e) {
+                    attrTrg = ftTrg.getAttributeDescriptor(attr.getName());
+                    target.set(attrTrg.getIndex(), attrTrg.getDefaultValue());
+                }
+
+            }
+        }
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#getSourceFeatureTypeFrom(org.gvsig.fmap.dal.feature.FeatureType)
+     */
+    public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
+        return this.originalFeatureType;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#isTransformsOriginalValues()
+     */
+    public boolean isTransformsOriginalValues() {
+        return true;
+    }
+
+    public static void registerPersistent() {
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+
+        if( persistenceManager.getDefinition(AbstractFeatureStoreTransform.class) == null ) {
+            AbstractFeatureStoreTransform.registerPersistent();
+        }
+
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_DEFINITION_NAME);
+
+        if (definition == null){           
+            definition = persistenceManager.addDefinition(
+                EventThemeTransform.class,
+                PERSISTENCE_DEFINITION_NAME,
+                "EventThemeTransform Persistence definition",
+                null, 
+                null
+            );
+            definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE,
+                ABSTRACT_FEATURESTORE_DYNCLASS_NAME);
+
+            definition.addDynFieldString("geometryFieldName").setMandatory(true);
+            definition.addDynFieldString("xFieldName").setMandatory(true);
+            definition.addDynFieldString("yFieldName").setMandatory(true);
+            definition.addDynFieldObject("projection").setType(DataTypes.CRS);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.persistence.PersistentState)
+     */
+    public void saveToState(PersistentState state) throws PersistenceException {
+        super.saveToState(state);
+        state.set("geometryFieldName", this.geometryFieldName);
+        state.set("xFieldName", this.xFieldName);
+        state.set("yFieldName", this.yFieldName);
+        state.set("projection", this.projection);		
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
+     */
+    public void loadFromState(PersistentState state)
+    throws PersistenceException {
+        super.loadFromState(state);		
+        String geometryFieldName = state.getString("geometryFieldName");
+        String xFieldName = state.getString("xFieldName");
+        String yFieldName = state.getString("yFieldName");
+        IProjection projection =  (IProjection)state.get("projection");	
+        try {
+            initialize(getFeatureStore(), geometryFieldName, xFieldName, yFieldName, projection);
+        } catch (DataException e) {
+            throw new PersistenceException("Impossible to create the transform", e);
+        }
+    }
+
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if (DataStore.METADATA_CRS.equals(name)){
+            return projection;
+        }else if(DataStore.METADATA_ENVELOPE.equals(name)){
+            return envelope;
+        }
+        return null;
+    }
+
+    public boolean hasDynValue(String name) {
+        return ((DataStore.METADATA_CRS.equals(name)) || 
+            (DataStore.METADATA_ENVELOPE.equals(name)));
+    }    
+    
+    
+    /**
+     * 
+     * A thread to compute the true extent (in case it has a lot of features)
+     * Currently not used.
+     * 
+     * @author jldominguez
+     * 
+     * @deprecated This is not used because it causes issues with
+     * ConsurrentModificationException because the store is notified of
+     * a change (the transformation). Anyway, this is not very important I think.
+     */
+    private class ComputeExtentTask extends AbstractMonitorableTask {
+    	
+    	private DisposableIterator disp_iter = null;
+    	private EventThemeTransform tra_toupdate = null;
+    	
+    	public ComputeExtentTask(DisposableIterator diter, EventThemeTransform ettra) {
+    		/*
+    		 * Auto-added by task manager
+    		 */
+    		super(Messages.getText("_Extent_of_event_theme"), true);
+    		disp_iter = diter;
+    		tra_toupdate = ettra;
+    	}
+    	
+    	public void run() {
+
+    		Envelope env = null;
+    		Feature feat = null;
+    		Point point = null;
+    		int count = 99;
+    		
+    		try {
+                while (disp_iter.hasNext()) {
+                    feat = (Feature) disp_iter.next();
+                    point = geometryManager.createPoint(
+                            Double.parseDouble(feat.get(xFieldName).toString()),
+                            Double.parseDouble(feat.get(yFieldName).toString()),
+                            SUBTYPES.GEOM2D);
+                    if (env == null) {
+                    	env = (Envelope) point.getEnvelope().clone();
+                    } else {
+                    	env.add(point.getEnvelope());
+                    }
+                    count++;
+                    Thread.sleep(10);
+                    if (count % 100 == 0) {
+                    	System.out.println("COUNT = " + count);
+                    }
+                }
+    		} catch (Exception exc) {
+    			
+    			ApplicationLocator.getManager().message(
+    					Messages.getText("_Error_while_getting_extent"),
+    					JOptionPane.ERROR_MESSAGE);
+    			logger.info("Error while getting extent in thread.", exc);
+    			
+    		}
+    		
+    		disp_iter.dispose();
+    		// =================
+    		if (env != null) {
+    			Envelope curr_env = (Envelope) tra_toupdate.getDynValue(
+    					DataStore.METADATA_ENVELOPE); 
+    			curr_env.add(env);
+    		}
+    		// =========== End
+    		TaskStatusManager man = this.getTaskStatus().getManager();
+    		man.remove(this.getTaskStatus());
+    	}
+    	
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/dal/feature/EventThemeTransform.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/EventThemeTransformLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/EventThemeTransformLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/EventThemeTransformLibrary.java	(revision 42196)
@@ -0,0 +1,93 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.app.eventtheme;
+
+import org.gvsig.app.eventtheme.dal.feature.EventThemeTransform;
+import org.gvsig.app.eventtheme.daltransform.EventThemeTransformGui;
+import org.gvsig.daltransform.DataTransformLibrary;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.DataTransformManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class EventThemeTransformLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        this.registerAsImplementationOf(EventThemeTransformLibrary.class);
+        this.require(DataTransformLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+				
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+				
+		// Validate there is any implementation registered.
+		DataTransformManager dataTransformManager = DataTransformLocator.getDataTransformManager();
+		if (dataTransformManager == null) {
+			throw new ReferenceNotRegisteredException(
+					DataTransformLocator.DATA_TRANSFORM_MANAGER_NAME, DataTransformLocator.getInstance());
+		}	
+		dataTransformManager.registerDataTransform("EventThemeTransform", EventThemeTransformGui.class);
+		
+		EventThemeTransform.registerPersistent();
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/EventThemeTransformLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/AddEventThemeExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/AddEventThemeExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/AddEventThemeExtension.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+package org.gvsig.app.eventtheme;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.eventtheme.daltransform.EventThemeTransformGui;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.daltransform.DataTransformLocator;
+import org.gvsig.daltransform.swing.DataTransformWizard;
+import org.gvsig.i18n.Messages;
+
+/**
+ * This extension opens the transformation wizard
+ * with the "add event theme" option selected 
+ *  
+ * @author jldominguez
+ *
+ */
+public class AddEventThemeExtension extends Extension {
+
+	public void initialize() {
+		
+		IconThemeHelper.registerIcon("action", "view-event-theme-add", this);
+		
+	}
+
+	public void execute(String comm) {
+		
+		if (comm.compareToIgnoreCase("view-event-theme-add") == 0) {
+			
+		    try {
+		        DataTransformWizard dataTransformWizard =
+		        		DataTransformLocator.getDataTransformManager().createWizard();
+	            dataTransformWizard.setDataTransformGui(new EventThemeTransformGui());
+		        PluginServices.getMDIManager().addWindow(dataTransformWizard.getWindow());
+	        } catch (Exception e) {
+	            
+	        	JOptionPane.showInternalMessageDialog(
+	        			ApplicationLocator.getManager().getRootComponent(),
+	        			Messages.getText("_Error_while_opening_wizard")
+	        			+ ":      \n\n" + e.getMessage(),
+	        			Messages.getText("Anadir_capa_de_eventos"),
+	                    JOptionPane.ERROR_MESSAGE);
+	        }
+			
+		}
+		
+	}
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		
+		IWindow iw = ApplicationLocator.getManager().getActiveWindow();
+		return (iw instanceof IView);
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformPanel.java	(revision 42196)
@@ -0,0 +1,311 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.eventtheme.daltransform;
+
+import java.awt.BorderLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.gui.panels.CRSSelectPanel;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.app.project.ProjectPreferences;
+import org.gvsig.daltransform.swing.DataTransformWizard;
+import org.gvsig.daltransform.swing.impl.AbstractDataTransformWizardPanel;
+import org.gvsig.daltransform.swing.impl.DefaultDataTransformWizard;
+import org.gvsig.daltransform.swing.impl.components.FeatureTypeCombo;
+import org.gvsig.daltransform.swing.impl.components.NumericFeatureTypeAttributesCombo;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.MapContext;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class EventThemeTransformPanel extends AbstractDataTransformWizardPanel implements ActionListener {
+	private JLabel nameLabel;
+	private JTextField nameText;
+	private NumericFeatureTypeAttributesCombo xCombo;
+	private JLabel xLabel;
+	private NumericFeatureTypeAttributesCombo yCombo;
+	private JLabel yLabel;
+	private FeatureTypeCombo featureTypeCombo;
+	private JLabel featureTypeLabel;
+	private JPanel northPanel = null;
+	private JTextField projectionText;
+	private JLabel projectionLabel;
+	private JButton projectionButton = null;
+
+	public EventThemeTransformPanel() {
+		super();
+		initComponents();
+		initLabels();
+		resetProjection();
+		featureTypeCombo.addActionListener(this);
+		projectionButton.addActionListener(this);
+	}
+
+	private void resetProjection() {
+	    
+	    DefaultDataTransformWizard dtw = getDataTransformWizard();
+	    if (dtw != null) {
+	        MapContext mco = dtw.getMapContext();
+	        if (mco != null && mco.getProjection() != null) {
+	            projectionText.setText(mco.getProjection().getAbrev());
+	            return;
+	        }
+	    }
+	    
+        ProjectPreferences prefs = new ProjectPreferences();
+        projectionText.setText(prefs.getDefaultProjection().getAbrev());
+	}
+
+	
+	public void setDataTransformWizard(DataTransformWizard dtw) {
+	    super.setDataTransformWizard(dtw);
+	    resetProjection();
+	}
+
+	private void initLabels() {
+		featureTypeLabel.setText(PluginServices.getText(this, "events_feature_type_field") + ":");
+		xLabel.setText(PluginServices.getText(this, "events_x_field") + ":");
+		yLabel.setText(PluginServices.getText(this, "events_y_field") + ":");
+		nameLabel.setText(PluginServices.getText(this, "events_geom_field") + ":");
+		projectionLabel.setText(PluginServices.getText(this, "projection") + ":");
+		projectionButton.setText("...");
+	}
+
+	private void initComponents() {
+		java.awt.GridBagConstraints gridBagConstraints;
+
+		featureTypeCombo = new FeatureTypeCombo();
+		featureTypeLabel = new javax.swing.JLabel();
+		xLabel = new javax.swing.JLabel();
+		xCombo = new NumericFeatureTypeAttributesCombo();
+		yLabel = new javax.swing.JLabel();
+		yCombo = new NumericFeatureTypeAttributesCombo();
+		nameLabel = new javax.swing.JLabel();
+		nameText = new javax.swing.JTextField();
+		northPanel= new JPanel();
+		projectionText = new JTextField();
+		projectionLabel = new JLabel();
+		projectionButton = new JButton();
+		projectionButton.setSize(25, 25);
+		projectionText.setEnabled(false);
+
+		setLayout(new BorderLayout());
+		northPanel.setLayout(new java.awt.GridBagLayout());
+
+		//		gridBagConstraints = new java.awt.GridBagConstraints();
+		//		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		//		gridBagConstraints.insets = new Insets(5,2,2,2);
+		//		northPanel.add(featureTypeLabel, gridBagConstraints);
+		//
+		//		featureTypeCombo.setModel(new javax.swing.DefaultComboBoxModel());
+		//		gridBagConstraints = new java.awt.GridBagConstraints();
+		//		gridBagConstraints.gridx = 0;
+		//		gridBagConstraints.gridy = 1;
+		//		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		//		gridBagConstraints.weightx = 1.0;
+		//		gridBagConstraints.insets = new Insets(2,2,5,2);
+		//		northPanel.add(featureTypeCombo, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(5,2,2,2);
+		northPanel.add(xLabel, gridBagConstraints);
+
+		xCombo.setModel(new javax.swing.DefaultComboBoxModel());
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 1;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(2,2,5,2);
+		gridBagConstraints.weightx = 1.0;
+		northPanel.add(xCombo, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 2;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(5,2,2,2);
+		gridBagConstraints.gridwidth = 2;
+		northPanel.add(yLabel, gridBagConstraints);
+
+		yCombo.setModel(new javax.swing.DefaultComboBoxModel());
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 3;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new Insets(2,2,5,2);
+		gridBagConstraints.gridwidth = 2;
+		northPanel.add(yCombo, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 4;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.insets = new Insets(5,2,2,2);
+		gridBagConstraints.gridwidth = 2;
+		northPanel.add(nameLabel, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 5;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.insets = new Insets(2,2,5,2);
+		gridBagConstraints.gridwidth = 2;
+		northPanel.add(nameText, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 6;
+		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+		gridBagConstraints.gridwidth = 2;
+		gridBagConstraints.insets = new Insets(5,2,2,2);
+		northPanel.add(projectionLabel, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 7;
+		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.gridwidth = 1;
+		gridBagConstraints.insets = new Insets(2,2,5,2);
+		northPanel.add(projectionText, gridBagConstraints);
+
+		gridBagConstraints = new java.awt.GridBagConstraints();
+		gridBagConstraints.gridx = 1;
+		gridBagConstraints.gridy = 7;
+		gridBagConstraints.gridwidth = 1;
+		gridBagConstraints.insets = new Insets(2,2,5,2);
+		northPanel.add(projectionButton, gridBagConstraints);
+
+		add(northPanel, BorderLayout.NORTH);
+	}	
+
+	/* (non-Javadoc)
+	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(ActionEvent event) {
+		if (event == null){
+			return;
+		}
+		if (event.getSource() == featureTypeCombo){
+			Object obj = featureTypeCombo.getSelectedItem();
+			if (obj != null){
+				xCombo.addFeatureAttributes(featureTypeCombo.getSelectedFeatureType());
+				yCombo.addFeatureAttributes(featureTypeCombo.getSelectedFeatureType());			
+			}
+		}else if (event.getSource() == projectionButton){
+			ISelectCrsPanel panel = CRSSelectPanel.getUIFactory().getSelectCrsPanel(
+					CRSFactory.getCRS(projectionText.getText()), false);
+			PluginServices.getMDIManager().addWindow(panel);
+			if (panel.isOkPressed()) {
+				IProjection proj = panel.getProjection();
+				projectionText.setText(proj.getAbrev());
+			}
+		}
+	}
+
+	public String getGeometryName(){
+		return nameText.getText();
+	}
+
+	public String getXName(){
+		return xCombo.getSelectedFeatureAttributeDescriptor().getName();
+	}
+
+	public String getYName(){
+		return yCombo.getSelectedFeatureAttributeDescriptor().getName();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.impl.AbstractDataTransformWizardPanel#updatePanel()
+	 */
+	public void updatePanel() {
+		featureTypeCombo.addFeatureStore(getFeatureStore());
+		if (nameText != null) {
+		    nameText.setText(this.suggestedGeomFieldName(getFeatureStore()));
+		}
+		// actionPerformed(null);			
+	}
+
+	public IProjection getProjection() {
+		return CRSFactory.getCRS(projectionText.getText());
+	}
+	
+	private String suggestedGeomFieldName(FeatureStore fsto) {
+	    
+	    if (fsto == null) {
+	        return "";
+	    }
+	    
+	    FeatureType ft = null;
+	    try {
+            ft = fsto.getDefaultFeatureType();
+        } catch (DataException e) {
+            logger.info("Error: unable to suggest geom field name.", e);
+            return "";
+        }
+	    
+	    if (ft.getAttributeDescriptor("geometry") == null) {
+	        return "geometry";
+	    }
+	    if (ft.getAttributeDescriptor("geom") == null) {
+	        return "geom";
+	    }
+	    String aux = "";
+	    int i = -1;
+	    do {
+	        i++;
+	        aux = "geom" + i;
+	    } while (ft.getAttributeDescriptor(aux) != null);
+	    
+	    return aux;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformGui.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformGui.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformGui.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.eventtheme.daltransform;
+
+import java.awt.Dimension;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.eventtheme.dal.feature.EventThemeTransform;
+import org.gvsig.daltransform.swing.DataTransformGui;
+import org.gvsig.daltransform.swing.DataTransformWizardPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class EventThemeTransformGui implements DataTransformGui{
+	private EventThemeTransformPanel panel = null;
+	
+	public EventThemeTransformGui() {
+		super();		
+	}	
+	
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#createPanels(org.gvsig.app.daltransform.gui.FeatureTransformWizardModel)
+	 */
+	public List<DataTransformWizardPanel> createPanels() {
+		if (panel == null){
+			panel = new EventThemeTransformPanel();
+		}
+		List<DataTransformWizardPanel> panels = new ArrayList<DataTransformWizardPanel>();
+		panels.add(panel);
+		return panels;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#getDescription()
+	 */
+	public String getDescription() {
+		return PluginServices.getText(this, "events_layer_description");
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.Component#toString()
+	 */	
+	public String toString() {
+		return getName();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#createFeatureStoreTransform(org.gvsig.fmap.dal.feature.FeatureStore)
+	 */
+	public FeatureStoreTransform createFeatureStoreTransform(
+			FeatureStore featureStore) throws DataException {
+		EventThemeTransform transform = new EventThemeTransform();
+		transform.initialize(featureStore,
+				panel.getGeometryName(),
+				panel.getXName(),
+				panel.getYName(),
+				panel.getProjection());
+		return transform;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.FeatureTransformGui#getName()
+	 */
+	public String getName() {
+		return PluginServices.getText(this, "events_layer");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.app.daltransform.gui.DataTransformGui#getMinDimension()
+	 */
+	public Dimension getMinDimension() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public boolean accept(FeatureStore featureStore) {
+        try {
+            return featureStore.getDefaultFeatureType().getDefaultGeometryAttribute() == null;
+        } catch (DataException e) {
+           return false;
+        }        
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.daltransform.swing.DataTransformGui#beforeApplyingTransform(org.gvsig.fmap.dal.feature.FeatureStore, org.gvsig.fmap.dal.feature.FeatureStoreTransform)
+     */
+    public void beforeApplyingTransform(FeatureStore store,
+        FeatureStoreTransform transform) {
+        // nothing to do
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.daltransform.swing.DataTransformGui#afterApplyingTransform(org.gvsig.fmap.dal.feature.FeatureStore, org.gvsig.fmap.dal.feature.FeatureStoreTransform)
+     */
+    public void afterApplyingTransform(FeatureStore store,
+        FeatureStoreTransform transform) {
+        // nothing to do
+        
+    }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformGui.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib/"/>
+	<depends plugin-name="org.gvsig.app.mainplugin"/>
+	<depends plugin-name="org.gvsig.daltransform.app.mainplugin"/>
+	<resourceBundle name="text"/>
+
+	<extensions>
+	    <extension class-name="org.gvsig.andami.LibraryExtension" active="false"/>
+	    
+		<extension class-name="org.gvsig.app.eventtheme.AddEventThemeExtension"
+			description="This extension lets the user create a new event theme based on an existing table."
+			active="true">
+
+            <action 
+                name="view-event-theme-add"
+                label="Anadir_capa_de_eventos" 
+                tooltip="Anadir_capa_de_eventos" 
+                position="650350000" 
+                action-command="view-event-theme-add"
+                icon="view-event-theme-add"
+                accelerator=""
+                />
+            
+            <menu
+                name="view-event-theme-add" 
+                text="View/Anadir_capa_de_eventos"
+                />
+                
+			<tool-bar name="view" position="30015">
+				<action-tool name="view-event-theme-add"/>
+			</tool-bar>
+		
+		</extension>			
+	</extensions>
+	
+
+</plugin-config>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/images/action/view-event-theme-add.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/images/action/view-event-theme-add.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,14 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+Anadir_capa_de_eventos=A\u00f1adir capa de eventos
+Tabla=Tabla
+Vista=Vista
+events_layer=Capa de Eventos
+events_layer_description=Esta transformaci�n crea una capa de eventos, que no es m�s que una capa de puntos cuyas coordenadas X e Y sos dos atributos de un origen de datos vectorial.
+events_x_field=Campo que cotiene la coordenada X
+events_y_field=Campo que contiene la coordenada Y
+events_geom_field=Nombre del campo que contiene la geometr�a
+events_feature_type_field=Tipo de feature
+_Extent_of_event_theme=Extensi�n de capa de eventos
+_Error_while_getting_extent=Error durante c�lculo de extensi�n
+_Error_while_opening_wizard=Error al abrir el asistente
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_zh.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [en]
+#Fri Nov 03 13:14:56 CET 2006
+Anadir_capa_de_eventos=\u6dfb\u52a0\u9879\u76ee\u56fe\u5c42
+Tabla=\u8868\u683c
+Vista=\u89c6\u56fe

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,14 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+Anadir_capa_de_eventos=Add event theme
+Tabla=Table
+Vista=View
+events_layer=Event layer
+events_layer_description=This transformation creates an event theme, i.e. a point layer where X and Y coordinates are taken from two fields in an alphanumeric datasource.
+events_x_field=Field containing X-coordinate
+events_y_field=Field containing Y-coordinate
+events_geom_field=Geometry field name
+events_feature_type_field=Feature type
+_Extent_of_event_theme=Extent of event theme
+_Error_while_getting_extent=Error while getting extent
+_Error_while_opening_wizard=Error while opening wizard
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+Anadir_capa_de_eventos=Engadir capa de eventos
+Tabla=T\u00e1boa
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+Anadir_capa_de_eventos=Afegir capa d'esdeveniments
+Tabla=Taula
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+Anadir_capa_de_eventos=
+Tabla=Tabela
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+Anadir_capa_de_eventos=P\u0159idej vrstvu ud\u00e1losti
+Tabla=Tabulka
+Vista=Pohled

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+Anadir_capa_de_eventos=Ajouter une couche g\u00e9ographique de points
+Tabla=Table
+Vista=Vue

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1,6 @@
+#Translations for language [de]
+#Wed Oct 08 17:44:19 CEST 2008
+Anadir\ capa\ de\ eventos=
+Anadir_capa_de_eventos=F\u00fcge Ereignislayer hinzu
+Tabla=Tabelle
+Vista=Ansicht

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+Anadir_capa_de_eventos=Gehitu gertaeren geruza
+Tabla=Taula
+Vista=Bista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1,5 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+Anadir_capa_de_eventos=Aggiungi layer eventi
+Tabla=Tabella
+Vista=Vista

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 42196)
@@ -0,0 +1 @@
+org.gvsig.app.eventtheme.EventThemeTransformLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/test/resources/events.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/test/resources/events.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/test/java/org/gvsig/app/eventlayer/dal/feature/EventThemeTransformTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/test/java/org/gvsig/app/eventlayer/dal/feature/EventThemeTransformTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/test/java/org/gvsig/app/eventlayer/dal/feature/EventThemeTransformTest.java	(revision 42196)
@@ -0,0 +1,91 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.app.eventlayer.dal.feature;
+
+import java.io.File;
+
+import org.gvsig.app.eventtheme.dal.feature.EventThemeTransform;
+import org.gvsig.daltransform.BaseFeatureStoreTransform;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class EventThemeTransformTest extends BaseFeatureStoreTransform {
+	private final File dbf = new File("testdata/events.dbf");
+	private final String xFieldName = "x";
+	private final String yFieldName = "y";
+	private final String geometryFieldName = "geom";
+	private final String projection = "EPSG:23030";
+	protected boolean testDBFInitialized = false;
+	
+
+	public DataStoreParameters getDefaultDataStoreParameters() throws DataException {
+		DataStoreParameters dbfParameters = null;
+		dbfParameters = dataManager.createStoreParameters("DBFStoreParameters");
+
+		dbfParameters.setDynValue("dbfFile", dbf);
+
+		return dbfParameters;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseFeatureStoreTransform#getFeatureStoreTransform()
+	 */
+	public FeatureStoreTransform getFeatureStoreTransform() throws DataException, ValidateDataParametersException {
+		FeatureStore store = (FeatureStore) dataManager.openStore("DBF", 
+		    this.getDefaultDataStoreParameters());
+		EventThemeTransform transform = new EventThemeTransform();
+		transform.initialize(store, geometryFieldName, xFieldName, yFieldName,
+				CRSFactory.getCRS(projection));
+		return transform;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#hasExplorer()
+	 */
+	public boolean hasExplorer() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#usesResources()
+	 */
+	public boolean usesResources() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/test/java/org/gvsig/app/eventlayer/dal/feature/EventThemeTransformTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.daltransform.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/pom.xml	(revision 42196)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.datalocator.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.datalocator.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:53 CEST 2015
+buildNumber=2154

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/test/java/org/gvsig/datalocator/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/test/java/org/gvsig/datalocator/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/test/java/org/gvsig/datalocator/AllTests.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.datalocator;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for com.iver.cit.gvsig.datalocator");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/test/java/org/gvsig/datalocator/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/DataLocatorExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/DataLocatorExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/DataLocatorExtension.java	(revision 42196)
@@ -0,0 +1,132 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.datalocator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.datalocator.gui.DataSelectionPanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+/**
+ * The DataLocatorExtension class allows to make a quick zoom based on an
+ * alphanumeric attribute.
+ *
+ * @author jldominguez
+ */
+public class DataLocatorExtension extends Extension {
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#inicializar()
+     */
+    public void initialize() {
+    	registerIcons();
+
+    }
+
+    private void registerIcons(){
+    	IconThemeHelper.registerIcon("action", "view-navigation-locator-by-attribute", this);
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+    	if( "view-navigation-locator-by-attribute".equalsIgnoreCase(actionCommand))  {
+    	    
+    	    IWindow wi = ApplicationLocator.getManager().getActiveWindow(); 
+    	    if (wi instanceof IView) {
+    	        MapContext mapContext = ((IView) wi).getMapControl().getMapContext();
+                DataSelectionPanel selpan = new DataSelectionPanel(mapContext);
+                ApplicationLocator.getManager().getUIManager().addWindow(selpan);
+    	    }
+    	}
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isEnabled()
+     */
+    public boolean isEnabled() {
+        
+		IWindow wi = PluginServices.getMDIManager().getActiveWindow();
+		
+		if (!(wi instanceof IView)) {
+		    return false;
+		}
+		
+		MapContext mapContext = ((IView) wi).getMapControl().getMapContext();
+		List<FLyrVect> vects = getVectorLayers(mapContext.getLayers());
+		/*
+		 * View has at least one vector layer
+		 */
+		return vects.size() > 0;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow wi = PluginServices.getMDIManager().getActiveWindow();
+        return (wi instanceof IView);
+    }
+    
+    
+    /**
+     * Recursively search for vector layers
+     * 
+     * @param layers
+     * @return
+     */
+    public static List<FLyrVect> getVectorLayers(FLayers layers) {
+        
+        List<FLyrVect> resp = new ArrayList<FLyrVect>();
+        // ================================================
+        int len = layers.getLayersCount();
+        for (int i=0; i<len; i++) {
+            if (layers.getLayer(i) instanceof FLyrVect) {
+                resp.add((FLyrVect) layers.getLayer(i));
+            } else {
+                // ===========================
+                if (layers.getLayer(i) instanceof FLayers) {
+                    List<FLyrVect> added = getVectorLayers((FLayers) layers.getLayer(i));
+                    resp.addAll(added);
+                }
+                // ===========================
+            }
+        }
+        // ================================================
+        return resp;
+        
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/DataLocatorExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/LayersComboItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/LayersComboItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/LayersComboItem.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.datalocator.gui;
+
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+/**
+ * Utility class to use in Swing component with items that represent layers
+ *  
+ * @author jldominguez
+ *
+ */
+public class LayersComboItem {
+
+    private FLyrVect vlayer = null;
+    
+    public LayersComboItem(FLyrVect vect) {
+        vlayer = vect;
+    }
+    
+    public FLyrVect getLayer() {
+        return vlayer;
+    }
+    
+    public String toString() {
+        return vlayer == null ? "-" : vlayer.getName();
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/DataSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/DataSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/DataSelectionPanel.java	(revision 42196)
@@ -0,0 +1,541 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.datalocator.gui;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.TreeSet;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.datalocator.DataLocatorExtension;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.strategies.SelectedZoomVisitor;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+
+
+/**
+ * 
+ * This panel lets the user choose a vector layer from a view and a field and a value
+ * and then it zooms to the extent of the features which match the value.
+ * 
+ * @author jldominguez
+ */
+public class DataSelectionPanel extends JPanel
+implements IWindow, ActionListener {
+
+	private static final long serialVersionUID = 1L;
+	
+	private static final Logger logger =
+        LoggerFactory.getLogger(DataSelectionPanel.class);
+            
+    private JComboBox layerComboBox = null;
+	private JLabel jLabel = null; 
+	private JLabel jLabel1 = null; 
+	private JComboBox fieldValueComboBox = null;
+	private JLabel jLabel2 = null;  
+	private JComboBox fieldNameComboBox = null;
+    private WindowInfo viewInfo = null;
+	private JButton goButton = null;
+	private JButton closeButton = null;
+	private FLayer layerToZoom = null;
+	private int fieldToZoomIndex = 0;
+	private Object itemToZoom = null;
+	private MapContext mapCtxt = null;
+	private JPanel jPanelButtons = null;
+
+
+	public DataSelectionPanel(MapContext mapContext) {
+		super();
+		this.mapCtxt = mapContext;
+        initialize();
+	}
+	
+
+	private void initialize() {
+        jLabel2 = new JLabel();
+        jLabel1 = new JLabel();
+        jLabel = new JLabel();
+        this.setLayout(null);
+        this.setSize(350, 161);
+        jLabel.setBounds(6, 6, 80, 23);
+        jLabel.setText(PluginServices.getText(this,"Capa") + ":");
+        jLabel1.setBounds(6, 34, 80, 23);
+        jLabel1.setText(PluginServices.getText(this,"Campo") + ":");
+        jLabel2.setBounds(6, 61, 80, 23);
+        jLabel2.setText(PluginServices.getText(this,"Valor") + ":");
+        
+        this.add(jLabel, null);
+        this.add(jLabel1, null);
+        this.add(getFieldsComboBox(), null);
+        this.add(jLabel2, null);
+        this.add(getValuesComboBox(), null);
+        
+        /*
+         * Last to be added
+         */
+        this.add(getLayersComboBox(), null);
+        
+        jPanelButtons = new JPanel();
+        FlowLayout flowLayor = new FlowLayout(FlowLayout.CENTER);
+        flowLayor.setHgap(10);
+
+        jPanelButtons.setLayout(flowLayor);
+        jPanelButtons.setBounds(0,95,360,35);
+        jPanelButtons.add(getGoButton(), null);
+        jPanelButtons.add(getCloseButton(), null);
+
+        this.add(jPanelButtons);
+	}
+	
+
+	private FeatureAttributeDescriptor[] getFields(FLyrVect vect) {
+	    
+		FeatureStore featureStore;
+		try {
+            featureStore = vect.getFeatureStore();
+            FeatureType fty = featureStore.getDefaultFeatureType();
+            FeatureAttributeDescriptor[] atts = fty.getAttributeDescriptors();
+            return atts;
+        } catch (DataException e) {
+            logger.error("While getting field names.", e);
+            return new FeatureAttributeDescriptor[0];
+		}
+		
+	}
+
+
+	private Object[] getNewValues(FLyrVect vlayer, String fname) {
+	    
+		FeatureStore featureStore;
+		if (vlayer == null || fname == null) {
+		    return new Object[0];
+		}
+		
+		FeatureSet set = null;
+
+		try {
+			featureStore = vlayer.getFeatureStore();
+			FeatureQuery query = featureStore.createFeatureQuery();
+			Evaluator myEvaluator = new ValueEvaluator(fname);
+			query.setFilter(myEvaluator);
+			query.setAttributeNames(new String[] { fname });
+			set = featureStore.getFeatureSet(query);
+			/*
+			 * Removing duplicated and sorting
+			 */
+			TreeSet<Object> treeSet =
+					new TreeSet<Object>(new Comparator<Object>() {
+						public int compare(Object o1, Object o2) {
+							if (o1 instanceof Number && o2 instanceof Number) {
+								if (((Number) o1).doubleValue() < ((Number) o2).doubleValue())
+									return -1;
+								if (((Number) o1).doubleValue() > ((Number) o2).doubleValue())
+									return 1;
+							} else if (o1 instanceof String
+									&& o2 instanceof String) {
+								return ((String) o1).compareTo((String) o2);
+							} else if (o1 instanceof Date && o2 instanceof Date) {
+								return ((Date) o1).compareTo((Date) o2);
+							}
+							return 0;
+						}
+					});
+			DisposableIterator diter = set.fastIterator();
+			Feature feat = null;
+			while (diter.hasNext()) {
+			    feat = (Feature) diter.next();
+			    treeSet.add(feat.get(fname));
+			    if (treeSet.size() > 200) {
+			        /*
+			         * Not more than 200 elements
+			         */
+			        break;
+			    }
+			}
+			diter.dispose();
+			return treeSet.toArray();
+
+		} catch (DataException e) {
+		    logger.error("While getting sample values.", e);
+		    return new Object[0];
+		}
+	}
+
+
+    public WindowInfo getWindowInfo() {
+        if (viewInfo == null) {
+            viewInfo = new WindowInfo(WindowInfo.MODALDIALOG);
+            viewInfo.setTitle(PluginServices.getText(this,"Localizador_por_atributo"));
+            viewInfo.setHeight(105);
+            viewInfo.setWidth(360);
+        }
+        return viewInfo;
+    }
+	/**
+	 * This method initializes jComboBox
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getLayersComboBox() {
+		if (layerComboBox == null) {
+			layerComboBox = new JComboBox();
+			
+			List<FLyrVect> vs = DataLocatorExtension.getVectorLayers(mapCtxt.getLayers());
+			LayersComboItem[] items = new LayersComboItem[vs.size()];
+			for (int i=0; i<vs.size(); i++) {
+			    items[i] = new LayersComboItem(vs.get(i));
+			}
+            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(items);
+            layerComboBox.setModel(defaultModel);
+			layerComboBox.setBounds(90, 6, 250, 23);
+			layerComboBox.addActionListener(this);
+			if (items.length > 0) {
+			    layerComboBox.setSelectedIndex(0);
+			}
+		}
+		return layerComboBox;
+	}
+	
+	/**
+	 * This method initializes jComboBox1
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getFieldsComboBox() {
+		if (fieldNameComboBox == null) {
+		    fieldNameComboBox = new JComboBox();
+		    fieldNameComboBox.setBounds(90, 34, 250, 23);
+		    fieldNameComboBox.addActionListener(this);
+		    fieldNameComboBox.setEnabled(false);
+		}
+		return fieldNameComboBox;
+	}
+
+
+	/**
+	 * This method initializes jComboBox2
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getValuesComboBox() {
+		if (fieldValueComboBox == null) {
+		    fieldValueComboBox = new JComboBox();
+		    fieldValueComboBox.setBounds(90, 61, 250, 23);
+		    fieldValueComboBox.addActionListener(this);
+		    fieldValueComboBox.setEnabled(false);
+		}
+		return fieldValueComboBox;
+	}
+	
+	
+
+
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getGoButton() {
+		if (goButton == null) {
+		    goButton = new JButton();
+		    goButton.setPreferredSize(new Dimension(80, 21));
+		    goButton.setText(PluginServices.getText(this,"_Go"));
+		    goButton.addActionListener(this);
+		}
+		return goButton;
+	}
+	/**
+	 * This method initializes jButton1
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getCloseButton() {
+		if (closeButton == null) {
+		    closeButton = new JButton();
+		    closeButton.setPreferredSize(new Dimension(80, 21));
+			//jButton1.setBounds(141, 121, 128, 23);
+		    closeButton.setText(PluginServices.getText(this,"_Close"));
+		    closeButton.addActionListener(this);
+		}
+		return closeButton;
+	}
+
+
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+	
+	class ValueEvaluator implements Evaluator {
+	    
+		private String fieldName = null;
+		private Object value = null;
+		private EvaluatorFieldsInfo info = null;
+		private boolean nonnull = true;
+		private DataType dataType = null;
+
+	    /**
+	     * Non null
+	     * 
+	     * @param name
+	     */
+		public ValueEvaluator(String name) {
+		    fieldName = name;
+		    info = new EvaluatorFieldsInfo();
+		    info.addFieldValue(name);
+		    nonnull = true;
+		}
+
+		/**
+		 * This value
+		 * @param name
+		 * @param val
+		 */
+		public ValueEvaluator(String name, Object val, DataType dtype) {
+		    
+		    fieldName = name;
+			info = new EvaluatorFieldsInfo();
+			info.addFieldValue(name);
+			value = val;
+			nonnull = false;
+			dataType = dtype;
+		}
+
+		public Object evaluate(EvaluatorData data)
+				throws EvaluatorException {
+		    
+			Object obj = data.getDataValue(fieldName);
+			if (nonnull) {
+			    /*
+			     * Accepts non null
+			     */
+	            if (obj == null) {
+	                return Boolean.FALSE;
+	            } else {
+	                return Boolean.TRUE;
+	            }
+			} else {
+			    return (value == null && obj == null)
+			        ||
+			        (value != null && obj != null && value.equals(obj));
+			}
+		}
+
+		public String getSQL() {
+		    String resp = null;
+		    if (nonnull) {
+		        resp = fieldName + " is not null";
+		    } else {
+		        if (value == null) {
+		            resp = fieldName + " is null";
+		        } else {
+		            String quote = dataType.isNumeric() ? "" : "'"; 
+		            resp = fieldName + " = "  + quote + value.toString() + quote;
+		        }
+		    }
+		    return resp;
+		}
+
+		public String getDescription() {
+			return "Evaluates if a field is not null";
+		}
+
+		public EvaluatorFieldsInfo getFieldsInfo() {
+			return this.info;
+		}
+
+		public String getName() {
+			return this.getClass().getName();
+		}
+
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        
+        Object src = e.getSource();
+        if (src == this.getLayersComboBox()) {
+            
+            LayersComboItem litem =
+                (LayersComboItem) getLayersComboBox().getSelectedItem();
+            if (litem != null) {
+                FeatureAttributeDescriptor[] atts = getFields(litem.getLayer());
+                if (atts.length > 0) {
+                    getFieldsComboBox().setEnabled(true);
+                    getFieldsComboBox().removeAllItems();
+                    
+                    for (int i=0; i<atts.length; i++) {
+                        if (atts[i].getType() != DataTypes.GEOMETRY) {
+                            getFieldsComboBox().addItem(new FieldsComboItem(atts[i]));
+                        }
+                    }
+                    getFieldsComboBox().setSelectedIndex(0);
+                    /*
+                     * OK
+                     */
+                    return;
+                }
+            }
+            /*
+             * Not OK
+             */
+            getFieldsComboBox().setEnabled(false);
+            getValuesComboBox().setEnabled(false);
+            return;
+        }
+        
+        // ==========================================================
+        // ==========================================================
+        
+        if (src == this.getFieldsComboBox()) {
+            
+            LayersComboItem litem =
+                (LayersComboItem) getLayersComboBox().getSelectedItem();
+            FieldsComboItem fatt =
+                (FieldsComboItem) getFieldsComboBox().getSelectedItem();
+            if (litem != null && fatt != null) {
+                
+                Object[] vals = this.getNewValues(litem.getLayer(), fatt.toString());
+                if (vals.length > 0) {
+                    
+                    this.getValuesComboBox().setEnabled(true);
+                    this.getValuesComboBox().removeAllItems();
+                    DefaultComboBoxModel model = new DefaultComboBoxModel(vals);
+                    getValuesComboBox().setModel(model);
+                    getValuesComboBox().setSelectedIndex(0);
+                    this.getGoButton().setEnabled(true);
+                    /*
+                     * OK
+                     */
+                    return;
+                }
+            }
+            /*
+             * Not OK
+             */
+            this.getValuesComboBox().setEnabled(false);
+            this.getGoButton().setEnabled(false);
+            return;
+        }
+
+        // ==========================================================
+        // ==========================================================
+
+        if (src == this.getValuesComboBox()) {
+            
+            return;
+        }
+
+        // ==========================================================
+        // ==========================================================
+
+        if (src == this.getCloseButton()) {
+            ApplicationLocator.getManager().getUIManager().closeWindow(this);
+            return;
+        }
+
+        // ==========================================================
+        // ==========================================================
+
+        if (src == this.getGoButton()) {
+
+            LayersComboItem litem =
+                (LayersComboItem) getLayersComboBox().getSelectedItem();
+            FieldsComboItem fatt = (FieldsComboItem)
+                getFieldsComboBox().getSelectedItem();
+            Object value = this.getValuesComboBox().getSelectedItem();
+            if (litem == null || fatt == null || value == null) {
+                // Problem with combo boxes
+                return;
+            }
+            FLyrVect lyr = litem.getLayer();
+            FeatureStore featureStore;
+            FeatureSet featureSet = null;
+            DisposableIterator diter = null;
+            try {
+                featureStore = lyr.getFeatureStore();
+                FeatureQuery query = featureStore.createFeatureQuery();
+                Evaluator myEvaluator =
+                    new ValueEvaluator(fatt.toString(), value, fatt.getType());
+                query.setFilter(myEvaluator);
+                String geoname =
+                    featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName();
+                query.setAttributeNames(new String[] { fatt.toString(), geoname });
+                featureSet = featureStore.getFeatureSet(query);
+                SelectedZoomVisitor visitor = new SelectedZoomVisitor();
+                featureSet.accept(visitor);
+                Envelope env_data = visitor.getSelectBound();
+                
+                if (env_data != null) {
+                    if (lyr.getCoordTrans() != null) {
+                        env_data = env_data.convert(lyr.getCoordTrans());
+                    }
+                    this.mapCtxt.getViewPort().setEnvelope(env_data);            
+                }
+            // =======================================
+
+            } catch (Exception exc) {
+                logger.error("While zooming to value", exc);
+            }
+            return;
+        }
+        
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/DataSelectionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/FieldsComboItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/FieldsComboItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/java/org/gvsig/datalocator/gui/FieldsComboItem.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.datalocator.gui;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.dataTypes.DataType;
+
+
+/**
+ * Utility class to use in Swing component with items that represent fields
+ *  
+ * @author jldominguez
+ *
+ */
+public class FieldsComboItem {
+
+    private FeatureAttributeDescriptor att = null;
+    
+    public FieldsComboItem(FeatureAttributeDescriptor a) {
+        att = a;
+    }
+    
+    public DataType getType() {
+        return att.getDataType();
+    }
+    
+    public String toString() {
+        return att == null ? "-" : att.getName();
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app.mainplugin"/>
+		<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.datalocator.DataLocatorExtension"
+			description="Extensi�n que permite hacer zooms en funci�n de los valores de la base de datos. Tambi�n permite guardar y recuperar estos zooms."
+			active="true">
+			
+			<action 
+                name="view-navigation-locator-by-attribute"
+                label="Localizador_por_atributo" 
+                tooltip="Localizador_por_atributo" 
+                position="650102000" 
+                action-command="view-navigation-locator-by-attribute"
+                icon="view-navigation-locator-by-attribute"
+                accelerator=""
+                />
+            
+            <menu
+                name="view-navigation-locator-by-attribute" 
+                text="View/Navigation/Localizador_por_atributo"
+                />
+                
+			<tool-bar name="view_navigation" position="3">
+                <action-tool name="view-navigation-locator-by-attribute"/>
+            </tool-bar>
+
+		</extension>
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-locator-by-attribute.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-locator-by-attribute.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+Campo=Campo
+Capa=Layer
+Localizador_por_atributo=Localizza per attributo
+open_first_time=Apri con la vista
+Salir=Esci
+Valor=Valore
+Vista=Vista
+Zoom=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,12 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Campo
+Capa=Capa
+Localizador_por_atributo=Localizador por atributo
+open_first_time=Abrir este di�logo cada vez que se abre una vista
+Salir=Salir
+Valor=Valor
+Vista=Vista
+Zoom=Zoom
+_Close=Cerrar
+_Go=Ir

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [en]
+#Fri Nov 03 13:14:56 CET 2006
+Campo=\u5b57\u6bb5
+Capa=\u56fe\u5c42
+Localizador_por_atributo=\u6839\u636e\u7279\u6027\u5b9a\u4f4d
+open_first_time=\u4e0e\u89c6\u56fe\u6253\u5f00
+Salir=\u9000\u51fa
+Valor=\u6570\u636e
+Vista=\u89c6\u56fe
+Zoom=\u7f29\u653e

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,12 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Field
+Capa=Layer
+Localizador_por_atributo=Locate by attribute
+open_first_time=Open this dialog when a view is opened
+Salir=Exit
+Valor=Value
+Vista=View
+Zoom=Zoom
+_Close=Close
+_Go=Go

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Campo
+Capa=Capa
+Localizador_por_atributo=Localizador por atributo
+open_first_time=Abrir coa vista
+Salir=Sa\u00edr
+Valor=Valor
+Vista=Vista
+Zoom=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Camp
+Capa=Capa
+Localizador_por_atributo=Localitzador per atribut
+open_first_time=Obrir amb la vista
+Salir=Eixir
+Valor=Valor
+Vista=Vista
+Zoom=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Campo
+Capa=Capa
+Localizador_por_atributo=Localizador por atributo
+open_first_time=Abrir com a vista
+Salir=Fechar
+Valor=Valor
+Vista=Vista
+Zoom=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [cs]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Pole
+Capa=Vrstva
+Localizador_por_atributo=Vyhledat podle atributu
+open_first_time=Otev\u0159\u00edt spole\u010dn\u011b s pohledem
+Salir=Konec
+Valor=Hodnota
+Vista=Pohled
+Zoom=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Champ
+Capa=Couche
+Localizador_por_atributo=Localisation par attribut
+open_first_time=Ouvrir avec la vue
+Salir=Quitter
+Valor=Valeur
+Vista=Vue
+Zoom=Zoomer

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 42196)
@@ -0,0 +1,11 @@
+#Translations for language [de]
+#Wed Oct 08 17:44:19 CEST 2008
+Campo=Feld
+Capa=Layer
+com.iver.cit.gvsig.Herramientas=
+Localizador_por_atributo=Objekt mittels Attribut suchen
+open_first_time=Mit dem View \u00f6ffnen
+Salir=Schlie\u00dfen
+Valor=Wert
+Vista=Ansicht
+Zoom=Zoom

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 42196)
@@ -0,0 +1,10 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Eremua
+Capa=Geruza
+Localizador_por_atributo=Ezaugarrien araberako bilagailua
+open_first_time=Bistarekin ireki
+Salir=Irten
+Valor=Balioa
+Vista=Bista
+Zoom=Zooma

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.datalocator.app.mainplugin</artifactId>
+  <name>Tools: Locator by attribute</name>
+  <description>Locator by atribute</description>
+  <packaging>jar</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.datalocator.app</artifactId>
+      <version>2.0.97</version>
+  </parent> 
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.app.mainplugin</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>        
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>        
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>        
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+  <properties>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.0.1</gvsig.package.info.dependencies>
+      <gvsig.package.info.codealias>org.gvsig.datalocator</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+  </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app/org.gvsig.datalocator.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.datalocator.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/pom.xml	(revision 42196)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.97</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.installer.app.mainplugin</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:57 CEST 2015
+buildNumber=2161

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 42196)
@@ -0,0 +1,19 @@
+make_plugin_package=Crear paquete instalaci\u00f3n de plugin
+make_plugin_package_description=Crea un paquete de instalaci\u00f3n de un plugin instalado
+addons_manager=Administrador de complementos
+addons_manager_description=Muestra el administrador de complementos (plugin, traducciones, temas, etc.) de gvSIG
+_select_an_option=Seleccione una opci\u00f3n
+_Cant_install_packege=No se puede instalar el paquete
+_Finished=Finalizado
+_this_is_not_an_official_package=Este no es un paquete oficial
+_this_is_not_a_final_package=Este no es un paquete final
+_Creating_index=Creando \u00edndice
+_Compressing=Comprimiendo
+_Cant_create_package=No se puede crear el paquete
+_Installer_progress=Progreso de instalaci\u00f3n
+_Cant_download_package_files=No se pueden descargar los archivos del paquete
+_Downloading=Descargando
+_Downloading_error=Error descargando
+_Download_progress=Progreso de descarga
+_Start_download=Iniciar descarga
+_Create_installation_package=Crear paquete de instalacion

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 42196)
@@ -0,0 +1,19 @@
+make_plugin_package=Create plugin installation package
+make_plugin_package_description=Create an installation package from an already installed plugin
+addons_manager=Addons manager
+addons_manager_description=Show the addons manager
+_select_an_option=Select an option
+_Cant_install_packege=Can't install package
+_Finished=Finished
+_this_is_not_an_official_package=This is not an official package
+_this_is_not_a_final_package=This is not a final package
+_Creating_index=Creating index
+_Compressing=Compressing
+_Cant_create_package=Can't create package
+_Installer_progress=Installation progress
+_Cant_download_package_files=Can't download package files
+_Downloading=Downloading
+_Downloading_error=Downloading error
+_Download_progress=Download progress
+_Start_download=Start download
+Create_installation_package=Create installation package

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/config.xml	(revision 42196)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<plugin-config>
+    <alternativeNames name="org.gvsig.installer.app.extension"/>
+	<libraries library-dir="lib"/>
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.installer.app.extension.creation.MakePluginPackageExtension"
+			description="This extension is used to create a bundle for a plugin package from the current gvSIG application."
+			active="true">
+			<action 
+			    name= "tools-devel-create-package"
+				label="Create_installation_package"
+				tooltip="Create_installation_package"
+				action-command="tools-devel-create-package" 
+				icon="tools-devel-create-package"
+				position="908500600"/>
+
+			<menu
+				name="tools-devel-create-package" 
+				text="tools/Development/Create_installation_package"
+				 />			
+		</extension>
+		
+			<extension class-name="org.gvsig.installer.app.extension.execution.InstallPackageExtension"
+			description="This extension is used to install a package from a bundle in gvSIG"
+			active="true">
+
+			<action 
+			    name= "tools-addonsmanager"
+				label="_addons_manager"
+				tooltip="_show_the_addons_manager"
+				action-command="tools-addonsmanager" 
+				icon="tools-addonsmanager"
+				position="900100000"/>
+
+			<menu
+				name="tools-addonsmanager" 
+				text="tools/addons_manager"
+				/>			
+		</extension>
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/defaultDownloadsURLs
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/defaultDownloadsURLs	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/defaultDownloadsURLs	(revision 42196)
@@ -0,0 +1,8 @@
+http://downloads.gvsig.org/download/gvsig-desktop-testing/ ## Testing gvSIG repository
+http://downloads.gvsig.org/download/gvsig-desktop/ ## Official gvSIG repository for this version
+http://gis-lab.info/programs/gvsig/gvsig-desktop
+http://www.i3geo.com.br/gvsig/gvsig-desktop
+http://www.geocuba.mirrors.gvsig2/gvsig-desktop
+http://download.osgeo.org/gvsig/gvsig-desktop
+http://www.lapig.iesa.ufg.br/ftp/gvSIG/gvsig-desktop
+http://elogeo.nottingham.ac.uk/gvsig/gvsig-desktop
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/images/action/tools-addonsmanager.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/images/action/tools-addonsmanager.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/images/system-software-update.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/resources-plugin/images/system-software-update.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,63 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+<!--
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>groupId:artifactId</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/utils/WindowInstallerListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/utils/WindowInstallerListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/utils/WindowInstallerListener.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.app.extension.utils;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardActionListener;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardPanel;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class WindowInstallerListener implements InstallerWizardActionListener {
+
+	private IWindow window = null;
+
+	public WindowInstallerListener(IWindow window) {
+		super();
+		this.window = window;
+	}
+
+	public void closeWizard() {
+		PluginServices.getMDIManager().closeWindow(window);
+	}
+
+	public void cancel(InstallerWizardPanel installerWizard) {
+		PluginServices.getMDIManager().closeWindow(window);
+	}
+
+	public void finish(InstallerWizardPanel installerWizard) {
+		PluginServices.getMDIManager().closeWindow(window);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/utils/WindowInstallerListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageExtension.java	(revision 42196)
@@ -0,0 +1,192 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+package org.gvsig.installer.app.extension.execution;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.util.logging.Level;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(InstallPackageExtension.class);
+
+    public void execute(String actionCommand) {
+        this.execute(actionCommand, null);
+    }
+
+    public void execute(String actionCommand, Object[] args) {
+
+        if ("tools-addonsmanager".equalsIgnoreCase(actionCommand)) {
+//            InstallerManager installManager = InstallerLocator.getInstallerManager();
+//            if (installManager.needAdminRights()) {
+//                showExternalAddonsManager();
+//            } else {
+                showInternalAddonsManager(args);
+//            }
+        }
+    }
+
+    private void showExternalAddonsManager() {
+        InstallerManager installManager = InstallerLocator.getInstallerManager();
+
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        
+        String cmd = null;
+        boolean useInternalAddonsManager = false;
+
+        if( InstallerManager.OS.WINDOWS.equalsIgnoreCase(installManager.getOperatingSystem()) ) {
+            cmd = "runas /noprofile /user:Administrator " + pluginManager.getApplicationFolder() + File.separator + "gvsig-package-installer.exe --install";
+            try {
+                Process p = Runtime.getRuntime().exec(cmd);
+                if( p.exitValue() != 0 ) {
+                    useInternalAddonsManager = true;
+                }
+            } catch (IOException ex) {
+                logger.warn("Can't execute command '"+cmd+"'.",ex);
+                useInternalAddonsManager = true;
+            }
+        } else {
+            cmd = "pkexec " + pluginManager.getApplicationFolder() + File.separator + "/gvSIG.sh --install";
+            try {
+                Process p = Runtime.getRuntime().exec(cmd);
+                if( p.exitValue() != 0 ) {
+                    useInternalAddonsManager = true;
+                }
+            } catch (IOException ex) {
+                logger.warn("Can't execute command '"+cmd+"'.",ex);
+                useInternalAddonsManager = true;
+            }
+        }
+        if( useInternalAddonsManager ) {
+            logger.warn("Use internal addons manager.");
+            showInternalAddonsManager(null);
+        }
+    }
+    
+    
+    private void showInternalAddonsManager(Object[] args) {
+        boolean skipBundleSelection = false;
+        if (args != null && args.length > 0) {
+            String subcmd = (String) args[0];
+            if ("skipBundleSelection".equalsIgnoreCase(subcmd)) {
+                skipBundleSelection = true;
+            }
+        }
+        PluginsManager manager = PluginsLocator.getManager();
+        try {
+            PluginServices.getMDIManager().addCentredWindow(
+                    new InstallPackageWindow(
+                            manager.getApplicationFolder(),
+                            manager.getInstallFolder(),
+                            skipBundleSelection
+                    )
+            );
+        } catch (Error e) {
+            logger.error("Error creating the wizard to install a package ", e);
+        } catch (Exception e) {
+            logger.error("Error creating the wizard to install a package ", e);
+        }
+
+    }
+
+    public void initialize() {
+        PluginsManager pm = PluginsLocator.getManager();
+        PackageInfo packageInfo = pm.getPackageInfo();
+        Version version = packageInfo.getVersion();
+
+        InstallerLocator.getInstallerManager().setVersion(version);
+        try {
+            IconThemeHelper.registerIcon("action", "tools-addonsmanager", this);
+
+            SwingInstallerManager manager = SwingInstallerLocator
+                    .getSwingInstallerManager();
+
+            try {
+                if (packageInfo != null && (packageInfo.getState().startsWith(InstallerManager.STATE.BETA)
+                        || packageInfo.getState().startsWith(InstallerManager.STATE.RC)
+                        || packageInfo.getState().equalsIgnoreCase(InstallerManager.STATE.FINAL))) {
+
+                    String installURL = manager.getInstallerManager().getDownloadBaseURL().toString()
+                            + "dists/<%Version%>/builds/<%Build%>/packages.gvspki ## Official gvSIG repository (frozen in this version)";
+                    manager.addDefaultDownloadURL(installURL);
+                }
+            } catch (Throwable th) {
+                logger.info("Error. Can't select default gvspki", th);
+            }
+
+            InputStream is = this.getClass().getResourceAsStream(
+                    "/defaultDownloadsURLs");
+            BufferedReader in = new BufferedReader(new InputStreamReader(is));
+            String line = null;
+            for (line = in.readLine(); line != null; line = in.readLine()) {
+                try {
+                    manager.addDefaultDownloadURL(line);
+                } catch (MalformedURLException e) {
+                    logger.error(
+                            "Error creating the default packages download URL pointing to "
+                            + line, e);
+                }
+            }
+            manager.getInstallerManager().setVersion(version);
+        } catch (Throwable e) {
+            logger.error("Error reading the default packages download URL file "
+                    + "/defaultDownloadsURLs", e);
+        }
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageWindow.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.app.extension.execution;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.io.File;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.app.extension.utils.WindowInstallerListener;
+import org.gvsig.installer.lib.api.execution.InstallPackageServiceException;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.api.execution.InstallPackageWizardException;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class InstallPackageWindow extends JPanel implements IWindow {
+
+	private static final long serialVersionUID = 4719868181091291809L;
+	WindowInfo windowInfo = null;
+
+	public InstallPackageWindow(File applicationFolder, File installFolder, 
+                boolean skipBundleSelection)
+			throws LocatorException, InstallPackageWizardException {
+		super();
+		AbstractInstallPackageWizard installPackageWizard = SwingInstallerLocator
+				.getSwingInstallerManager().createInstallPackageWizard(
+						applicationFolder, installFolder);
+		installPackageWizard.setWizardActionListener(new WindowInstallerListener(this));
+		this.setLayout(new BorderLayout());
+                installPackageWizard.setSkipBundleSelection(skipBundleSelection);
+		add(installPackageWizard, BorderLayout.CENTER);
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (windowInfo == null) {
+			windowInfo = new WindowInfo(WindowInfo.MAXIMIZABLE
+					| WindowInfo.ICONIFIABLE | WindowInfo.RESIZABLE);
+			Dimension dim = getPreferredSize();
+			windowInfo.setWidth((int) dim.getWidth());
+			windowInfo.setHeight((int) dim.getHeight());
+			windowInfo.setTitle(Messages.getText("install_package"));
+		}
+		return windowInfo;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/execution/InstallPackageWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageWindow.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.app.extension.creation;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.io.File;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.app.extension.utils.WindowInstallerListener;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizard;
+import org.gvsig.installer.swing.api.creation.MakePluginPackageWizardException;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePluginPackageWindow extends JPanel implements IWindow {
+
+	private static final long serialVersionUID = 3423389124323013058L;
+	WindowInfo windowInfo = null;
+
+	public MakePluginPackageWindow(File applicationFolder, File installFolder)
+			throws LocatorException, MakePluginPackageWizardException {
+		super();
+		MakePluginPackageWizard makePluginPackageWizard = SwingInstallerLocator
+				.getSwingInstallerManager().createMakePluginPackageWizard(
+						applicationFolder, installFolder);
+		makePluginPackageWizard
+				.setWizardActionListener(new WindowInstallerListener(this));
+		this.setLayout(new BorderLayout());
+		add(makePluginPackageWizard, BorderLayout.CENTER);
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (windowInfo == null) {
+			windowInfo = new WindowInfo(WindowInfo.MODELESSDIALOG
+					| WindowInfo.ICONIFIABLE | WindowInfo.RESIZABLE);
+			Dimension dim = getPreferredSize();
+			windowInfo.setWidth((int) dim.getWidth());
+			windowInfo.setHeight((int) dim.getHeight());
+			windowInfo.setTitle(Messages.getText("Create_installation_package"));
+		}
+		return windowInfo;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageExtension.java	(revision 42196)
@@ -0,0 +1,87 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+
+package org.gvsig.installer.app.extension.creation;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public class MakePluginPackageExtension extends Extension {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(MakePluginPackageExtension.class);
+
+	public void execute(String actionCommand) {
+		if ("tools-devel-create-package".equalsIgnoreCase(actionCommand)) {
+			PluginsManager manager = PluginsLocator.getManager();
+
+			try {
+				PluginServices.getMDIManager().addCentredWindow(
+						new MakePluginPackageWindow(manager
+								.getApplicationFolder(), manager
+								.getInstallFolder()));
+			} catch (Exception e) {
+				LOG.error("Error creating teh wizard to create an installer ",
+						e);
+			}
+		}
+	}
+
+	public void initialize() {
+
+	}
+
+	@Override
+	public void postInitialize() {
+		super.postInitialize();
+	    PluginsManager pm = PluginsLocator.getManager();
+	    PackageInfo packageInfo = pm.getPackageInfo();
+		Version version = packageInfo.getVersion();
+		
+		SwingInstallerLocator.getSwingInstallerManager().setApplicationVersion(version.format("%M.%m.%r"));
+	}
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/src/main/java/org/gvsig/installer/app/extension/creation/MakePluginPackageExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/pom.xml	(revision 42196)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>org.gvsig.installer.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.installer.app</artifactId>
+    <version>2.0.97</version>
+  </parent>
+
+  <dependencies>
+<!--     <dependency> -->
+<!--       <groupId>org.gvsig</groupId> -->
+<!--       <artifactId>org.gvsig.app.mainplugin</artifactId> -->
+<!--       <scope>compile</scope> -->
+<!--     </dependency> -->
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.installer.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <scope>compile</scope>
+    </dependency>        
+
+  </dependencies>
+
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <!-- Skip test execution -->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <skipTests>true</skipTests>
+          </configuration>
+        </plugin>
+
+      </plugins>
+  </build>
+
+  <properties>
+    <gvsig.package.info.categories>Addon Management</gvsig.package.info.categories>
+    <gvsig.package.info.codealias>org.gvsig.installer.app.extension</gvsig.package.info.codealias>
+    <gvsig.package.info.official>true</gvsig.package.info.official>
+    <gvsig.package.info.name>Add-ons manager</gvsig.package.info.name>
+  </properties>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app/org.gvsig.installer.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin



Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.installer.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties	(revision 42196)
@@ -0,0 +1,2 @@
+#Mon May 18 17:46:52 CEST 2015
+buildNumber=2310

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 42196)
@@ -0,0 +1,115 @@
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<assembly>
+  <id>gvsig-plugin-package</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <baseDirectory>${project.artifactId}</baseDirectory>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <files>
+    <file>
+      <source>target/${project.artifactId}-${project.version}.jar</source>
+      <outputDirectory>lib</outputDirectory>
+    </file>
+    <file>
+      <source>target/package.info</source>
+    </file>
+  </files>
+
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources-plugin</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+
+
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>com.h2database:h2</include>
+
+        <include>com.sun:jimi</include>
+        <include>java3d:vecmath</include>
+        <include>joda-time:joda-time</include>
+        <include>net.sf:sqljep</include>
+        <include>net.sf:jsi</include>
+        <include>gnu.trove:trove</include>
+
+        <include>org.apache.xmlgraphics:batik-anim</include>
+        <include>org.apache.xmlgraphics:batik-css</include>
+        <include>org.apache.xmlgraphics:batik-dom</include>
+        <include>org.apache.xmlgraphics:batik-js</include>
+        <include>org.apache.xmlgraphics:batik-parser</include>
+        <include>org.apache.xmlgraphics:batik-svg-dom</include>
+        <include>org.apache.xmlgraphics:batik-awt-util</include>
+        <include>org.apache.xmlgraphics:batik-bridge</include>
+        <include>org.apache.xmlgraphics:batik-gvt</include>
+        <include>org.apache.xmlgraphics:batik-script</include>
+        <include>org.apache.xmlgraphics:batik-ext</include>
+
+        <include>xml-apis:xml-apis-ext</include>
+        
+        <include>org.gvsig:org.gvsig.fmap.control</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.api</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.db.lib</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.db.jdbc</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.file.lib</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.impl</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.spi</include>
+       <include>org.gvsig:org.gvsig.fmap.dal.swing.api</include>
+       <include>org.gvsig:org.gvsig.fmap.dal.swing.impl</include>
+        <include>org.gvsig:org.gvsig.fmap.mapcontext.api</include>
+        <include>org.gvsig:org.gvsig.fmap.mapcontext.impl</include>
+        <include>org.gvsig:org.gvsig.fmap.mapcontext.operation</include>
+
+        <include>org.gvsig:org.gvsig.metadata.lib.basic.api</include>
+        <include>org.gvsig:org.gvsig.metadata.lib.basic.impl</include>
+        <include>org.gvsig:org.gvsig.metadata.swing.basic.api</include>
+        <include>org.gvsig:org.gvsig.metadata.swing.basic.impl</include>
+        <include>org.gvsig:org.gvsig.remoteclient</include>
+        <include>org.gvsig:org.gvsig.symbology.lib.api</include>
+        <include>org.gvsig:org.gvsig.symbology.lib.impl</include>
+        <include>org.gvsig:org.gvsig.symbology.swing.api</include>
+        <include>org.gvsig:org.gvsig.symbology.swing.impl</include>
+        <include>org.gvsig:org.gvsig.timesupport.lib.api</include>
+        <include>org.gvsig:org.gvsig.timesupport.lib.impl</include>
+        <include>org.gvsig:org.gvsig.timesupport.swing.api</include>
+        <include>org.gvsig:org.gvsig.timesupport.swing.impl</include>
+        <include>org.gvsig:org.gvsig.tools.evaluator.sqljep</include>
+        <include>org.jpedal:jpedal_lgpl</include>
+
+        <include>zql:zql</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/sqlQueryValidation/SQLQueryValidation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/sqlQueryValidation/SQLQueryValidation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/sqlQueryValidation/SQLQueryValidation.java	(revision 42196)
@@ -0,0 +1,236 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.sqlQueryValidation;
+
+import java.io.ByteArrayInputStream;
+
+import org.gvsig.andami.PluginServices;
+
+import Zql.ZqlParser;
+
+
+/**
+ * Class for validate a complete query or the sentence of a query from WHERE 
+ *
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class SQLQueryValidation {
+	private String query;
+	private boolean onlyWhereStatement;
+	private int[] errorPosition; //[0] -> line, [1] -> column        ( (-1, -1) -> no error ) ( (-2, -2) -> error: query = null)
+	private String errorMessage;
+	private String errorPositionAsMessage;
+	private String token;
+	private final String preQuery = "SELECT a FROM b WHERE ";
+	private final int preQueryLenght = preQuery.length();
+	
+	/**
+	 * Default constructor with a parameter
+	 * 
+	 * @param _query The query to validate
+	 * @param _onlyWhereStatement If the query is only the part of WHERE ... in a query
+	 */
+	public SQLQueryValidation(String _query, boolean _onlyWhereStatement) {
+		query = new String(_query);
+		onlyWhereStatement = _onlyWhereStatement;
+		
+		// By default no error position
+		errorPosition = new int[2];
+		errorPosition[0] = -1;
+		errorPosition[1] = -1;
+		
+		errorPositionAsMessage = null;
+		
+		// By default no error message
+		errorMessage = null;
+		
+		// By default no error symbol
+		token = null;
+	}
+		
+	/**
+	 * Validates a query
+	 * 
+	 * Returns 'null' if there has been some error
+	 */
+	public boolean validateQuery() {
+		String completeQuery = new String();
+		
+		// If the query is null -> error 
+		if (query == null)	{
+			errorPosition[0] = -2;
+			errorPosition[1] = -2;
+			defineErrorPositionAsMessageAttribute(errorPosition);
+			errorMessage = new String( PluginServices.getText(null, "queryIsNull"));
+			
+			return false;
+		}
+		
+		// If no query itsn't considered as a error
+		if ((query.compareTo("")) == 0) {
+			errorPosition[0] = -1;
+			errorPosition[1] = -1;
+			defineErrorPositionAsMessageAttribute(errorPosition);
+			errorMessage = null;
+			
+			return true;
+		}
+
+		// Converts all apostrophes between aphostrophes to double inverted commas ( " )
+		int index = 0;
+		boolean is_word = false; // by default isn't a word
+		String formatted_query = new String();
+		char c;
+		
+		while (index < query.length()) {
+			c = query.charAt(index);
+			if (c == '\'') {
+				if (is_word == false) {
+					if ((index > 0) && ((query.charAt(index-1) == ' ') || (query.charAt(index-1) == '(')) ) {
+						is_word = true;
+					}
+					
+					formatted_query += c;
+				}
+				else {
+					if (index == (query.length() -1)) {
+//						is_word = false;
+						formatted_query += c;
+					}
+					else {
+						if (((query.charAt(index+1) == ' ') || (query.charAt(index+1) == ')')) ) {
+							is_word = false;
+							formatted_query += c;
+						}
+						else {
+							formatted_query += "\""; // Convert ' to "
+						}
+					}
+				}
+			}
+			else {
+				formatted_query += c;
+			}
+			
+			index ++;
+		}		
+		
+		// Converts all ocurrences of the symbol " ( double inverted commas ) to space because Zql doesn't support that symbol
+		if (onlyWhereStatement)
+			completeQuery = preQuery + formatted_query.trim().replaceAll("\"", " ");
+		else
+			completeQuery = formatted_query.trim().replaceAll("\"", " ");
+
+		if ((completeQuery.length() > 0) && (completeQuery.charAt(completeQuery.length() - 1) != ';'))
+			completeQuery += ";";
+
+		try {
+			// Starts the parser
+			ZqlParser p = new ZqlParser();
+			p.initParser(new ByteArrayInputStream(completeQuery.getBytes()));
+	      
+			// Analyzes the query
+			p.readStatement();
+			
+			// If arrives here -> there has been no errors
+			errorPosition[0] = -1;
+			errorPosition[1] = -1;
+			defineErrorPositionAsMessageAttribute(errorPosition);
+			errorMessage = null;
+			return true;
+		} catch (Exception e) {
+			// Defines the error message
+			errorMessage = e.getMessage();
+			
+			// Get the token that produced the error
+			int ini_pos = e.getMessage().indexOf('\"') +1;
+			token = new String(errorMessage.substring(ini_pos, errorMessage.indexOf('\"', ini_pos)));
+
+			// Get the line an column where the syntax error starts
+			String line = new String(errorMessage.substring(e.getMessage().indexOf("line"), errorMessage.indexOf(',')));
+			line = line.substring(line.indexOf(' ')+1, line.length());
+			
+			String column = new String(e.getMessage().substring(errorMessage.indexOf("column"), errorMessage.indexOf('.')));
+			column = column.substring(column.indexOf(' ')+1, column.length());			
+
+			// Get the line an column of the error
+			errorPosition[0] = Integer.valueOf(line.trim()).intValue();			
+			errorPosition[1] = Integer.valueOf(column.trim()).intValue();
+			
+			if (onlyWhereStatement) {
+				this.errorPosition[1] -= this.preQueryLenght; // Substract the lenght of the pre-query added
+			}
+			
+			defineErrorPositionAsMessageAttribute(this.errorPosition);
+
+			return false;
+		}
+	}
+	
+	/**
+	 * Returns an string with an error message if there has been an error, or 'null' if there hasn't been
+	 * 
+	 * @return An string or null
+	 */
+	public String getErrorMessage() {
+		return this.errorMessage;
+	}
+	
+	/**
+	 * Returns an string with a text describing the (first) position of the error
+	 * 
+	 * @return An string or null
+	 */
+	public String getErrorPositionAsMessage() {
+		return this.errorPositionAsMessage;
+	}
+	
+	/**
+	 * Returns the error position (line, column) or (-1, -1) if there hasn't been any error
+	 * 
+	 * @return An array of 2 integer values (first: line, second: column) 
+	 */
+	public int[] getErrorPosition() {
+		return errorPosition;
+	}
+	
+	/**
+	 * Returns the token where the validator failed
+	 * 
+	 * @return An string
+	 */
+	public String getTokenThatProducedTheSyntacticError() {
+		return token;
+	}
+	
+	/**
+	 * Creates a message with information about the message
+	 * 
+	 * @param position An array with 2 elements: (row, column)
+	 */
+	private void defineErrorPositionAsMessageAttribute(int position[]) {
+		// Defines the error message
+		errorPositionAsMessage = new String( PluginServices.getText(null, "line") + ": " + errorPosition[0] + ", " + PluginServices.getText(null, "column") + ": " + errorPosition[1] );
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/sqlQueryValidation/SQLQueryValidation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ILayerPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ILayerPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ILayerPanel.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+/**
+ * @author fjp
+ *
+ * Interfaz que se usa por las nuevas capas que necesiten definir
+ * una capa que todav�a no existe en gvSIG.
+ * Para usarlo, en una extensi�n aparter, se define un JPanel
+ * que implemente este interfaz, y luego se a�ade al Wizard 
+ * correspondiente.
+ * Por ejemplo, cuando se crea una nueva capa, existe un Wizard
+ * del tipo JWizardComponents en la clase NewTheme de extCAD
+ * (o extEdition, como quiera que se llame al final)
+ */
+public interface ILayerPanel {
+	/**
+	 * Creates a FLyrWFS.
+	 * 
+	 * @return the layer
+	 */
+	public FLayer getLayer();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ILayerPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionDataSource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionDataSource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionDataSource.java	(revision 42196)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.filter;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision: 29596 $
+ */
+public interface ExpressionDataSource {
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param row DOCUMENT ME!
+	 * @param idField DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * @throws FilterException DOCUMENT ME!
+	 */
+	public Object getFieldValue(int row, int idField) throws FilterException;
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * @throws FilterException DOCUMENT ME!
+	 */
+	public int getFieldCount() throws FilterException;
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param idField DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * @throws FilterException DOCUMENT ME!
+	 */
+	public String getFieldName(int idField) throws FilterException;
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 *
+	 * @throws FilterException DOCUMENT ME!
+	 */
+	public int getRowCount() throws FilterException;
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public String getDataSourceName();
+
+//    public void start() throws ReadDriverException;
+//    public void stop() throws ReadDriverException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionDataSource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterException.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.filter;
+
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+
+
+public class FilterException extends BaseException {
+
+	/**
+	 *
+	 */
+	public FilterException() {
+		super();
+
+	}
+
+	protected Map values() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionListener.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.filter;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+public interface ExpressionListener {
+	public void newSet(String expression) throws DataException;
+
+	public void addToSet(String expression) throws DataException;
+
+	public void fromSet(String expression) throws DataException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterDialog.java	(revision 42196)
@@ -0,0 +1,708 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.filter;
+
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.gui.beans.filterPanel.tableFilterQueryPanel.TableFilterQueryJPanel;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.utils.DefaultCharSet;
+import org.gvsig.utils.StringUtilities;
+import org.gvsig.utils.exceptionHandling.ExceptionHandlingSupport;
+import org.gvsig.utils.exceptionHandling.ExceptionListener;
+
+/**
+ * This class substitutes the old "FilterDialog" class made by
+ * "Fernando Gonz�lez Cort�s"
+ * The functionality is the same, but now the class is made from separately (and
+ * reusable) components
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class FilterDialog extends TableFilterQueryJPanel implements IWindow,
+    IWindowListener {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -149317534873551735L;
+    private static final Logger logger =
+        LoggerFactory.getLogger(FilterDialog.class);
+    private FeatureStore model = null;
+    private ArrayList expressionListeners = new ArrayList();
+    private ExceptionHandlingSupport exceptionHandlingSupport =
+        new ExceptionHandlingSupport();
+    private NumberFormat nf = NumberFormat.getNumberInstance();
+
+    private String title;
+
+    private final int filterDialog_Width = 500;
+    private final int filterDialog_Height = 362;
+    private final int widthIncrementForAndami = 20; // This is necessary because
+                                                    // when the panel is sent to
+                                                    // Andami, that needs a bit
+                                                    // more width-space to show
+                                                    // that panel.
+
+    /**
+     * This is the default constructor
+     */
+    public FilterDialog(String _title) {
+        super();
+        title = _title;
+        defaultTreeModel = (DefaultTreeModel) fieldsJTree.getModel();
+    }
+
+    /**
+     * This is the default constructor
+     */
+    public FilterDialog() {
+        super();
+        defaultTreeModel = (DefaultTreeModel) fieldsJTree.getModel();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#initialize()
+     */
+    @Override
+    protected void initialize() {
+        super.initialize();
+
+        super.resizeHeight(filterDialog_Height);
+        super.resizeWidth(filterDialog_Width - widthIncrementForAndami);
+
+        this.addNewListeners();
+    }
+
+    /**
+     * Adds some listeners
+     */
+    private void addNewListeners() {
+        // Listener for "btnAdd"
+        // Adds more elements to the current set
+        getBtnAddToCurrentSet().addActionListener(
+            new java.awt.event.ActionListener() {
+
+                /*
+                 * (non-Javadoc)
+                 * 
+                 * @see
+                 * java.awt.event.ActionListener#actionPerformed(java.awt.event
+                 * .ActionEvent)
+                 */
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    // final String expr = "select * from '" +
+                    // model.getName() + "' where " +
+                    // getTxtExpression().getText() + ";";
+                    final String expr = getTxtExpression().getText();
+                    logger.debug(expr);
+
+                    PluginServices.backgroundExecution(new Runnable() {
+
+                        public void run() {
+                            for (int i = 0; i < expressionListeners.size(); i++) {
+                                ExpressionListener l =
+                                    (ExpressionListener) expressionListeners
+                                        .get(i);
+                                try {
+                                    l.addToSet(expr);
+                                } catch (DataException e) {
+                                    e.printStackTrace();
+                                }
+                            }
+                        }
+                    });
+                }
+            });
+
+        // Listener for "btnNuevo"
+        // Adds a new set
+        getBtnNewSet().addActionListener(new java.awt.event.ActionListener() {
+
+            public void actionPerformed(java.awt.event.ActionEvent e) {
+                // final String expr = "select * from '" +
+                // model.getName() + "' where " +
+                // getTxtExpression().getText() + ";";
+                final String expr = getTxtExpression().getText();
+
+                logger.debug(expr);
+
+                PluginServices.backgroundExecution(new Runnable() {
+
+                    public void run() {
+                        for (int i = 0; i < expressionListeners.size(); i++) {
+                            ExpressionListener l =
+                                (ExpressionListener) expressionListeners.get(i);
+                            try {
+                                l.newSet(expr);
+                            } catch (DataException e) {
+                                // TODO Auto-generated catch block
+                                NotificationManager.addError(e);
+                            }
+                        }
+                    }
+                });
+            }
+        });
+
+        // Listener for "btnFromSet"
+        // Selects elements from the current filtered selection
+        getBtnFromSet().addActionListener(new java.awt.event.ActionListener() {
+
+            public void actionPerformed(java.awt.event.ActionEvent e) {
+                // final String expr = "select * from '" +
+                // model.getName() + "' where " +
+                // getTxtExpression().getText() + ";";
+                final String expr = getTxtExpression().getText();
+                logger.debug(expr);
+
+                PluginServices.backgroundExecution(new Runnable() {
+
+                    public void run() {
+                        for (int i = 0; i < expressionListeners.size(); i++) {
+                            ExpressionListener l =
+                                (ExpressionListener) expressionListeners.get(i);
+                            try {
+                                l.fromSet(expr);
+                            } catch (DataException e) {
+                                NotificationManager.addError(e);
+                            }
+                        }
+                    }
+                });
+            }
+        });
+
+        // Listener for "fieldsJTree"
+        getFieldsJTree().addMouseListener(new MouseAdapter() {
+
+            /*
+             * (non-Javadoc)
+             * 
+             * @see
+             * java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent
+             * )
+             */
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                int row = fieldsJTree.getRowForLocation(e.getX(), e.getY());
+
+                if (row > -1) {
+                    switch (e.getClickCount()) {
+                    case 1:
+                        fillValues(row);
+                        break;
+                    case 2:
+                        putSymbol(jtreeRoot.getChildAt(row).toString());
+                        break;
+                    }
+                }
+            }
+        });
+
+        // Listener for "valuesJList"
+        getValuesJList().addMouseListener(new MouseAdapter() {
+
+            /*
+             * (non-Javadoc)
+             * 
+             * @see
+             * java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent
+             * )
+             */
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2) {
+                    Object valor =
+                        valuesListModel.getElementAt(getValuesJList()
+                            .getSelectedIndex());
+
+                    if (valor instanceof Date) {
+                        putSymbol("date('" + valor + "')");
+                    } else
+                        if (valor instanceof Boolean) {
+                            putSymbol("boolean('" + valor.toString() + "')");
+                        } else
+                            if (valor instanceof String) {
+                                putSymbol("'" + valor + "'");
+                            } else {
+                                putSymbol(valor.toString());
+                            }
+                }
+            }
+        });
+    }
+
+    /**
+     * Rellena la lista con los valores del campo seleccionado
+     */
+    private void fillValues(int row) {
+        // int index = lstCampos.getSelectedIndex();
+
+        // Index es ahora el �ndice del campo seleccionado
+        // Se eliminan los duplicados
+        Collection conjunto = new TreeSet(new Comparator() {
+
+            public int compare(Object o1, Object o2) {
+                return ((Comparable) o1).compareTo(o2);
+            }
+        }); // Para poder ordenar
+
+        valuesListModel.clear();
+        FeatureSet fs = null;
+        DisposableIterator iterator = null;
+        try {
+            String[] fieldName =
+                new String[] { ((FeatureAttributeDescriptor) model
+                    .getDefaultFeatureType().get(row)).getName() };
+
+            FeatureQuery query = model.createFeatureQuery();
+            query.setAttributeNames(fieldName);
+            fs = model.getFeatureSet(query);
+            iterator = fs.iterator();
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                Object value = feature.get(fieldName[0]);
+                if (value == null) {
+                    continue;
+                }
+
+                conjunto.add(value);
+            }
+
+            Iterator it = conjunto.iterator();
+
+            while (it.hasNext()) {
+                valuesListModel.addElement(it.next());
+            }
+        } catch (DataException e) {
+            throwException(e);
+        } finally {
+            DisposeUtils.dispose(iterator);
+            DisposeUtils.dispose(fs);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param t
+     *            DOCUMENT ME!
+     */
+    public void setModel(FeatureStore t) {
+        // try {
+        model = t;
+        // model.start();
+        // } catch (ReadException e1) {
+        // NotificationManager.addError(e1.getMessage(), e1);
+        // }
+
+        jtreeRoot.removeAllChildren();
+
+        try {
+            Iterator attributes = model.getDefaultFeatureType().iterator();
+            while (attributes.hasNext()) {
+                FeatureAttributeDescriptor descriptor =
+                    (FeatureAttributeDescriptor) attributes.next();
+                Object field = descriptor.getName();
+
+                if (field != null) {
+                    jtreeRoot.add(new DefaultMutableTreeNode(field.toString()));
+                }
+            }
+            // for (int i = 0; i < model.getFieldCount(); i++) {
+            // Object field = model.getFieldName(i);
+            //
+            // if (field != null) {
+            // jtreeRoot.add(new DefaultMutableTreeNode(field.toString()));
+            // }
+            // }
+
+            defaultTreeModel.setRoot(jtreeRoot);
+        } catch (DataException e) {
+            throwException(e);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     * 
+     * @throws ParseException
+     *             DOCUMENT ME!
+     */
+    private String validateExpression() throws ParseException {
+        String expression = txtExpression.getText();
+        // HashSet variablesIndexes = new HashSet();
+        //
+        // StringBuffer traducida = new StringBuffer();
+
+        // Se transforman los nombres de los campos en las variables xix que
+        // analizar�n
+        // Se quitan los Date(fecha) y se mete la fecha correspondiente
+        expression = translateDates(expression);
+        expression = translateNumber(expression);
+        expression = translateWord(expression, "true", "1");
+        expression = translateWord(expression, "false", "0");
+
+        String replacement;
+        Pattern patron = Pattern.compile("[^<>!]=");
+        Matcher m = patron.matcher(expression);
+        int index = 0;
+
+        while (m.find(index)) {
+            index = m.start();
+            replacement = expression.charAt(index) + "==";
+            m.replaceFirst(replacement);
+            index++;
+        }
+
+        expression = expression.replaceAll("[^<>!]=", "==");
+
+        logger.debug(expression);
+
+        return expression;
+    }
+
+    /**
+     * Redefinition of the 'putSymbol' method of AbstractFilterQueryJPanel
+     * (I've made this redefinition for write the same code as the 'putSymbol'
+     * code of the original class (FilterDialog) that was in this project
+     * (appgvSIG) and didn't has path troubles to find 'StringUtilities').
+     * 
+     * Sets a symbol on the filter expression (JTextArea that stores and shows
+     * the current filter expression)
+     * 
+     * @param symbol
+     *            A symbol: character, characters, number, ...
+     */
+    @Override
+    protected void putSymbol(String symbol) {
+        int position = txtExpression.getCaretPosition();
+        txtExpression.setText(StringUtilities.insert(txtExpression.getText(),
+            position, symbol));
+
+        if (symbol.equals(" () ")) {
+            position = position + 2;
+        } else {
+            position = position + symbol.length();
+        }
+
+        txtExpression.setCaretPosition(position);
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param expresion
+     *            DOCUMENT ME!
+     * @param substring
+     *            DOCUMENT ME!
+     * @param startingPos
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    private int getIndex(String expresion, String substring, int startingPos) {
+        int index = startingPos;
+
+        do {
+            index = expresion.indexOf(substring, index);
+        } while ((StringUtilities.isBetweenSymbols(expresion, index, "\""))
+            && (index != -1));
+
+        return index;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param expresion
+     *            DOCUMENT ME!
+     * @param word
+     *            DOCUMENT ME!
+     * @param translation
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     * 
+     * @throws ParseException
+     *             DOCUMENT ME!
+     */
+    private String translateWord(String expresion, String word,
+        String translation) throws ParseException {
+        int booleanIndex = 0;
+        int endIndex = 0;
+        StringBuffer res = new StringBuffer();
+
+        while ((booleanIndex = getIndex(expresion, word, booleanIndex)) != -1) {
+            res.append(expresion.substring(endIndex, booleanIndex));
+            endIndex = booleanIndex + word.length();
+            booleanIndex++;
+            res.append(translation);
+        }
+
+        if (endIndex < expresion.length()) {
+            res.append(expresion.substring(endIndex));
+        }
+
+        return res.toString();
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param expresion
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     * 
+     * @throws ParseException
+     *             DOCUMENT ME!
+     */
+    private String translateDates(String expresion) throws ParseException {
+        // Se obtiene el valor de la fecha
+        String date =
+            StringUtilities.substringDelimited(expresion, "Date(", ")", 0);
+
+        if (date == null) {
+            return expresion;
+        }
+
+        // Se comprueba que no est� entre comillas
+        int startIndex = expresion.indexOf(date);
+
+        while (startIndex != -1) {
+            if (!StringUtilities.isBetweenSymbols(expresion, startIndex, "\"")) {
+                // Se sustituye por el valor ordinal de la fecha
+                expresion =
+                    expresion.substring(0, startIndex - 5)
+                        + expresion.substring(startIndex).replaceFirst(
+                            date + "\\)",
+                            new Long((filterButtonsJPanel.getDateFormat()
+                                .parse(date)).getTime()).toString());
+                ;
+            } else {
+                startIndex += date.length();
+            }
+
+            // Se obtiene el valor de la fecha
+
+            /*
+             * date = StringUtilities.substringDelimited(expresion, "Date(",
+             * ")",
+             * startIndex);
+             */
+            if (date == null) {
+                return expresion;
+            }
+
+            startIndex = expresion.indexOf(date, startIndex);
+        }
+
+        return expresion;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param expresion
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     * 
+     * @throws ParseException
+     *             DOCUMENT ME!
+     */
+    public String translateNumber(String expresion) throws ParseException {
+        DefaultCharSet ss = new DefaultCharSet();
+        ss.addInterval('0', '9');
+        ss.addCharacter(',');
+        ss.addCharacter('.');
+
+        String number = StringUtilities.substringWithSymbols(expresion, ss, 0);
+
+        if (number == null) {
+            return expresion;
+        }
+
+        int startIndex = expresion.indexOf(number);
+
+        while (startIndex != -1) {
+            Number n = nf.parse(number);
+
+            if (!StringUtilities.isBetweenSymbols(expresion, startIndex, "\"")) {
+                // Se sustituye por el valor ordinal de la fecha
+                expresion =
+                    expresion.substring(0, startIndex)
+                        + expresion.substring(startIndex).replaceFirst(number,
+                            n.toString());
+            } else {
+                startIndex += n.toString().length();
+            }
+
+            number =
+                StringUtilities.substringWithSymbols(expresion, ss, startIndex);
+
+            if (number == null) {
+                return expresion;
+            }
+
+            startIndex = expresion.indexOf(number, startIndex);
+        }
+
+        return expresion;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param arg0
+     * 
+     * @return
+     */
+    public boolean addExpressionListener(ExpressionListener arg0) {
+        return expressionListeners.add(arg0);
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param arg0
+     * 
+     * @return
+     */
+    public boolean removeExpressionListener(ExpressionListener arg0) {
+        return expressionListeners.remove(arg0);
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        WindowInfo vi = new WindowInfo(WindowInfo.ICONIFIABLE);
+
+        // if (System.getProperty("os.name")co.compareTo(arg0))
+        vi.setHeight(this.filterDialog_Height);
+        vi.setWidth(this.filterDialog_Width);
+
+        // Old instructions
+        // vi.setWidth(480);
+        // vi.setHeight(362);
+        vi
+            .setTitle(PluginServices.getText(this, "_Selection_by_attributes") + " (" + title
+                + ")");
+        return vi;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param o
+     *            DOCUMENT ME!
+     */
+    public void addExceptionListener(ExceptionListener o) {
+        exceptionHandlingSupport.addExceptionListener(o);
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param o
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public boolean removeExceptionListener(ExceptionListener o) {
+        return exceptionHandlingSupport.removeExceptionListener(o);
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param t
+     *            DOCUMENT ME!
+     */
+    private void throwException(Throwable t) {
+        exceptionHandlingSupport.throwException(t);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.ui.mdiManager.ViewListener#viewActivated()
+     */
+    public void windowActivated() {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.ui.mdiManager.ViewListener#viewClosed()
+     */
+    public void windowClosed() {
+        // try {
+        // model.stop();
+        // } catch (ReadDriverException e) {
+        // NotificationManager.addError(e.getMessage(), e);
+        // }
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.TOOL_PROFILE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/TableSorter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/TableSorter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/TableSorter.java	(revision 42196)
@@ -0,0 +1,521 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+/**
+ * TableSorter is a decorator for TableModels; adding sorting
+ * functionality to a supplied TableModel. TableSorter does
+ * not store or copy the data in its TableModel; instead it maintains
+ * a map from the row indexes of the view to the row indexes of the
+ * model. As requests are made of the sorter (like getValueAt(row, col))
+ * they are passed to the underlying model after the row numbers
+ * have been translated via the internal mapping array. This way,
+ * the TableSorter appears to hold another copy of the table
+ * with the rows in a different order.
+ * <p/>
+ * TableSorter registers itself as a listener to the underlying model,
+ * just as the JTable itself would. Events recieved from the model
+ * are examined, sometimes manipulated (typically widened), and then
+ * passed on to the TableSorter's listeners (typically the JTable).
+ * If a change to the model has invalidated the order of TableSorter's
+ * rows, a note of this is made and the sorter will resort the
+ * rows the next time a value is requested.
+ * <p/>
+ * When the tableHeader property is set, either by using the
+ * setTableHeader() method or the two argument constructor, the
+ * table header may be used as a complete UI for TableSorter.
+ * The default renderer of the tableHeader is decorated with a renderer
+ * that indicates the sorting status of each column. In addition,
+ * a mouse listener is installed with the following behavior:
+ * <ul>
+ * <li>
+ * Mouse-click: Clears the sorting status of all other columns
+ * and advances the sorting status of that column through three
+ * values: {NOT_SORTED, ASCENDING, DESCENDING} (then back to
+ * NOT_SORTED again).
+ * <li>
+ * SHIFT-mouse-click: Clears the sorting status of all other columns
+ * and cycles the sorting status of the column through the same
+ * three values, in the opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
+ * <li>
+ * CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except
+ * that the changes to the column do not cancel the statuses of columns
+ * that are already sorting - giving a way to initiate a compound
+ * sort.
+ * </ul>
+ * <p/>
+ * This is a long overdue rewrite of a class of the same name that
+ * first appeared in the swing table demos in 1997.
+ * 
+ * @author Philip Milne
+ * @author Brendon McLean 
+ * @author Dan van Enckevort
+ * @author Parwinder Sekhon
+ * @version 2.0 02/27/04
+ */
+
+public class TableSorter extends AbstractTableModel {
+    protected TableModel tableModel;
+
+    public static final int DESCENDING = -1;
+    public static final int NOT_SORTED = 0;
+    public static final int ASCENDING = 1;
+
+    private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
+
+    public static final Comparator COMPARABLE_COMAPRATOR = new Comparator() {
+        public int compare(Object o1, Object o2) {
+            return ((Comparable) o1).compareTo(o2);
+        }
+    };
+    public static final Comparator LEXICAL_COMPARATOR = new Comparator() {
+        public int compare(Object o1, Object o2) {
+            return o1.toString().compareTo(o2.toString());
+        }
+    };
+
+    private Row[] viewToModel;
+    private int[] modelToView;
+
+    private JTableHeader tableHeader;
+    private MouseListener mouseListener;
+    private TableModelListener tableModelListener;
+    private Map columnComparators = new HashMap();
+    private List sortingColumns = new ArrayList();
+
+    public TableSorter() {
+        this.mouseListener = new MouseHandler();
+        this.tableModelListener = new TableModelHandler();
+    }
+
+    public TableSorter(TableModel tableModel) {
+        this();
+        setTableModel(tableModel);
+    }
+
+    public TableSorter(TableModel tableModel, JTableHeader tableHeader) {
+        this();
+        setTableHeader(tableHeader);
+        setTableModel(tableModel);
+    }
+
+    private void clearSortingState() {
+        viewToModel = null;
+        modelToView = null;
+    }
+
+    public TableModel getTableModel() {
+        return tableModel;
+    }
+
+    public void setTableModel(TableModel tableModel) {
+        if (this.tableModel != null) {
+            this.tableModel.removeTableModelListener(tableModelListener);
+        }
+
+        this.tableModel = tableModel;
+        if (this.tableModel != null) {
+            this.tableModel.addTableModelListener(tableModelListener);
+        }
+
+        clearSortingState();
+        fireTableStructureChanged();
+    }
+
+    public JTableHeader getTableHeader() {
+        return tableHeader;
+    }
+
+    public void setTableHeader(JTableHeader tableHeader) {
+        if (this.tableHeader != null) {
+            this.tableHeader.removeMouseListener(mouseListener);
+            TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
+            if (defaultRenderer instanceof SortableHeaderRenderer) {
+                this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
+            }
+        }
+        this.tableHeader = tableHeader;
+        if (this.tableHeader != null) {
+            this.tableHeader.addMouseListener(mouseListener);
+            this.tableHeader.setDefaultRenderer(
+                    new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
+        }
+    }
+
+    public boolean isSorting() {
+        return sortingColumns.size() != 0;
+    }
+
+    private Directive getDirective(int column) {
+        for (int i = 0; i < sortingColumns.size(); i++) {
+            Directive directive = (Directive)sortingColumns.get(i);
+            if (directive.column == column) {
+                return directive;
+            }
+        }
+        return EMPTY_DIRECTIVE;
+    }
+
+    public int getSortingStatus(int column) {
+        return getDirective(column).direction;
+    }
+
+    private void sortingStatusChanged() {
+        clearSortingState();
+        fireTableDataChanged();
+        if (tableHeader != null) {
+            tableHeader.repaint();
+        }
+    }
+
+    public void setSortingStatus(int column, int status) {
+        Directive directive = getDirective(column);
+        if (directive != EMPTY_DIRECTIVE) {
+            sortingColumns.remove(directive);
+        }
+        if (status != NOT_SORTED) {
+            sortingColumns.add(new Directive(column, status));
+        }
+        sortingStatusChanged();
+    }
+
+    protected Icon getHeaderRendererIcon(int column, int size) {
+        Directive directive = getDirective(column);
+        if (directive == EMPTY_DIRECTIVE) {
+            return null;
+        }
+        return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
+    }
+
+    private void cancelSorting() {
+        sortingColumns.clear();
+        sortingStatusChanged();
+    }
+
+    public void setColumnComparator(Class type, Comparator comparator) {
+        if (comparator == null) {
+            columnComparators.remove(type);
+        } else {
+            columnComparators.put(type, comparator);
+        }
+    }
+
+    protected Comparator getComparator(int column) {
+        Class columnType = tableModel.getColumnClass(column);
+        Comparator comparator = (Comparator) columnComparators.get(columnType);
+        if (comparator != null) {
+            return comparator;
+        }
+        if (Comparable.class.isAssignableFrom(columnType)) {
+            return COMPARABLE_COMAPRATOR;
+        }
+        return LEXICAL_COMPARATOR;
+    }
+
+    private Row[] getViewToModel() {
+        if (viewToModel == null) {
+            int tableModelRowCount = tableModel.getRowCount();
+            viewToModel = new Row[tableModelRowCount];
+            for (int row = 0; row < tableModelRowCount; row++) {
+                viewToModel[row] = new Row(row);
+            }
+
+            if (isSorting()) {
+                Arrays.sort(viewToModel);
+            }
+        }
+        return viewToModel;
+    }
+
+    public int modelIndex(int viewIndex) {
+        return getViewToModel()[viewIndex].modelIndex;
+    }
+
+    private int[] getModelToView() {
+        if (modelToView == null) {
+            int n = getViewToModel().length;
+            modelToView = new int[n];
+            for (int i = 0; i < n; i++) {
+                modelToView[modelIndex(i)] = i;
+            }
+        }
+        return modelToView;
+    }
+
+    // TableModel interface methods 
+
+    public int getRowCount() {
+        return (tableModel == null) ? 0 : tableModel.getRowCount();
+    }
+
+    public int getColumnCount() {
+        return (tableModel == null) ? 0 : tableModel.getColumnCount();
+    }
+
+    public String getColumnName(int column) {
+        return tableModel.getColumnName(column);
+    }
+
+    public Class getColumnClass(int column) {
+        return tableModel.getColumnClass(column);
+    }
+
+    public boolean isCellEditable(int row, int column) {
+        return tableModel.isCellEditable(modelIndex(row), column);
+    }
+
+    public Object getValueAt(int row, int column) {
+        return tableModel.getValueAt(modelIndex(row), column);
+    }
+
+    public void setValueAt(Object aValue, int row, int column) {
+        tableModel.setValueAt(aValue, modelIndex(row), column);
+    }
+
+    // Helper classes
+    
+    private class Row implements Comparable {
+        private int modelIndex;
+
+        public Row(int index) {
+            this.modelIndex = index;
+        }
+
+        public int compareTo(Object o) {
+            int row1 = modelIndex;
+            int row2 = ((Row) o).modelIndex;
+
+            for (Iterator it = sortingColumns.iterator(); it.hasNext();) {
+                Directive directive = (Directive) it.next();
+                int column = directive.column;
+                Object o1 = tableModel.getValueAt(row1, column);
+                Object o2 = tableModel.getValueAt(row2, column);
+
+                int comparison = 0;
+                // Define null less than everything, except null.
+                if (o1 == null && o2 == null) {
+                    comparison = 0;
+                } else if (o1 == null) {
+                    comparison = -1;
+                } else if (o2 == null) {
+                    comparison = 1;
+                } else {
+                    comparison = getComparator(column).compare(o1, o2);
+                }
+                if (comparison != 0) {
+                    return directive.direction == DESCENDING ? -comparison : comparison;
+                }
+            }
+            return 0;
+        }
+    }
+
+    private class TableModelHandler implements TableModelListener {
+        public void tableChanged(TableModelEvent e) {
+            // If we're not sorting by anything, just pass the event along.             
+            if (!isSorting()) {
+                clearSortingState();
+                fireTableChanged(e);
+                return;
+            }
+                
+            // If the table structure has changed, cancel the sorting; the             
+            // sorting columns may have been either moved or deleted from             
+            // the model. 
+            if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
+                cancelSorting();
+                fireTableChanged(e);
+                return;
+            }
+
+            // We can map a cell event through to the view without widening             
+            // when the following conditions apply: 
+            // 
+            // a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and, 
+            // b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
+            // c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and, 
+            // d) a reverse lookup will not trigger a sort (modelToView != null)
+            //
+            // Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
+            // 
+            // The last check, for (modelToView != null) is to see if modelToView 
+            // is already allocated. If we don't do this check; sorting can become 
+            // a performance bottleneck for applications where cells  
+            // change rapidly in different parts of the table. If cells 
+            // change alternately in the sorting column and then outside of             
+            // it this class can end up re-sorting on alternate cell updates - 
+            // which can be a performance problem for large tables. The last 
+            // clause avoids this problem. 
+            int column = e.getColumn();
+            if (e.getFirstRow() == e.getLastRow()
+                    && column != TableModelEvent.ALL_COLUMNS
+                    && getSortingStatus(column) == NOT_SORTED
+                    && modelToView != null) {
+                int viewIndex = getModelToView()[e.getFirstRow()];
+                fireTableChanged(new TableModelEvent(TableSorter.this, 
+                                                     viewIndex, viewIndex, 
+                                                     column, e.getType()));
+                return;
+            }
+
+            // Something has happened to the data that may have invalidated the row order. 
+            clearSortingState();
+            fireTableDataChanged();
+            return;
+        }
+    }
+
+    private class MouseHandler extends MouseAdapter {
+        public void mouseClicked(MouseEvent e) {
+            JTableHeader h = (JTableHeader) e.getSource();
+            TableColumnModel columnModel = h.getColumnModel();
+            int viewColumn = columnModel.getColumnIndexAtX(e.getX());
+            int column = columnModel.getColumn(viewColumn).getModelIndex();
+            if (column != -1) {
+                int status = getSortingStatus(column);
+                if (!e.isControlDown()) {
+                    cancelSorting();
+                }
+                // Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or 
+                // {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed. 
+                status = status + (e.isShiftDown() ? -1 : 1);
+                status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
+                setSortingStatus(column, status);
+            }
+        }
+    }
+
+    private static class Arrow implements Icon {
+        private boolean descending;
+        private int size;
+        private int priority;
+
+        public Arrow(boolean descending, int size, int priority) {
+            this.descending = descending;
+            this.size = size;
+            this.priority = priority;
+        }
+
+        public void paintIcon(Component c, Graphics g, int x, int y) {
+            Color color = c == null ? Color.GRAY : c.getBackground();             
+            // In a compound sort, make each succesive triangle 20% 
+            // smaller than the previous one. 
+            int dx = (int)(size/2*Math.pow(0.8, priority));
+            int dy = descending ? dx : -dx;
+            // Align icon (roughly) with font baseline. 
+            y = y + 5*size/6 + (descending ? -dy : 0);
+            int shift = descending ? 1 : -1;
+            g.translate(x, y);
+
+            // Right diagonal. 
+            g.setColor(color.darker());
+            g.drawLine(dx / 2, dy, 0, 0);
+            g.drawLine(dx / 2, dy + shift, 0, shift);
+            
+            // Left diagonal. 
+            g.setColor(color.brighter());
+            g.drawLine(dx / 2, dy, dx, 0);
+            g.drawLine(dx / 2, dy + shift, dx, shift);
+            
+            // Horizontal line. 
+            if (descending) {
+                g.setColor(color.darker().darker());
+            } else {
+                g.setColor(color.brighter().brighter());
+            }
+            g.drawLine(dx, 0, 0, 0);
+
+            g.setColor(color);
+            g.translate(-x, -y);
+        }
+
+        public int getIconWidth() {
+            return size;
+        }
+
+        public int getIconHeight() {
+            return size;
+        }
+    }
+
+    private class SortableHeaderRenderer implements TableCellRenderer {
+        private TableCellRenderer tableCellRenderer;
+
+        public SortableHeaderRenderer(TableCellRenderer tableCellRenderer) {
+            this.tableCellRenderer = tableCellRenderer;
+        }
+
+        public Component getTableCellRendererComponent(JTable table, 
+                                                       Object value,
+                                                       boolean isSelected, 
+                                                       boolean hasFocus,
+                                                       int row, 
+                                                       int column) {
+            Component c = tableCellRenderer.getTableCellRendererComponent(table, 
+                    value, isSelected, hasFocus, row, column);
+            if (c instanceof JLabel) {
+                JLabel l = (JLabel) c;
+                l.setHorizontalTextPosition(JLabel.LEFT);
+                int modelColumn = table.convertColumnIndexToModel(column);
+                l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
+            }
+            return c;
+        }
+    }
+
+    private static class Directive {
+        private int column;
+        private int direction;
+
+        public Directive(int column, int direction) {
+            this.column = column;
+            this.direction = direction;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/TableSorter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/SimpleWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/SimpleWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/SimpleWizard.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.simpleWizard;
+
+import java.awt.BorderLayout;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+
+
+public class SimpleWizard extends JPanel implements IWindow {
+	WindowInfo viewInfo = null;
+	WizardPanelWithLogo wizardPanel;
+
+	// No deber�an necesitarse un FinishAction y un CancelAction, pero bueno,
+	// lo mantengo por ahora.
+	private class CloseAction extends FinishAction
+	{
+		IWindow v;
+		public CloseAction(IWindow view)
+		{
+			super(wizardPanel.getWizardComponents());
+			v = view;
+		}
+		public void performAction() {
+			PluginServices.getMDIManager().closeWindow(v);
+		}
+
+	}
+	private class CloseAction2 extends CancelAction
+	{
+
+		IWindow v;
+		public CloseAction2(IWindow view)
+		{
+			super(wizardPanel.getWizardComponents());
+			v = view;
+		}
+		public void performAction() {
+			PluginServices.getMDIManager().closeWindow(v);
+		}
+
+	}
+
+
+	public SimpleWizard(ImageIcon logo)
+	{
+		wizardPanel = new WizardPanelWithLogo(logo);
+		CloseAction closeAction = new CloseAction(this);
+		CloseAction2 closeAction2 = new CloseAction2(this);
+		wizardPanel.getWizardComponents().setFinishAction(closeAction);
+		wizardPanel.getWizardComponents().setCancelAction(closeAction2);
+
+		this.setLayout(new BorderLayout());
+		this.add(wizardPanel, BorderLayout.CENTER);
+	}
+
+	public DefaultJWizardComponents getWizardComponents()
+	{
+		return wizardPanel.getWizardComponents();
+	}
+
+
+	public WindowInfo getWindowInfo() {
+		if (viewInfo == null)
+		{
+			viewInfo = new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
+		}
+		return viewInfo;
+	}
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/SimpleWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/WizardPanelWithLogo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/WizardPanelWithLogo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/WizardPanelWithLogo.java	(revision 42196)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.simpleWizard;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+import jwizardcomponent.common.SimpleButtonPanel;
+
+public class WizardPanelWithLogo extends JPanel {
+	  DefaultJWizardComponents wizardComponents;
+
+	  JPanel buttonPanel;
+	  JLabel statusLabel = new JLabel();
+
+	  ImageIcon logo;
+
+	  public WizardPanelWithLogo(ImageIcon logo) {
+	    this.logo = logo;
+	    wizardComponents = new DefaultJWizardComponents();
+	    init();
+	  }
+
+	  private void init() {
+	    
+
+	    JPanel logoPanel = new JPanel();
+
+	    String fileString;
+	    if (logo.toString().indexOf("file:") < 0 &&
+	        logo.toString().indexOf("http:") < 0) {
+	      fileString = "file:///" +System.getProperty("user.dir") +"/"
+	                        +logo.toString();
+	      fileString = fileString.replaceAll("\\\\", "/");
+	    } else {
+	      fileString = logo.toString();
+	    }
+	    logoPanel.add(new JLabel(logo));
+	    logoPanel.setBackground(Color.WHITE);
+	    this.setLayout(new BorderLayout());
+	    this.add(logoPanel, BorderLayout.WEST);
+	    this.add(wizardComponents.getWizardPanelsContainer(),
+	    							BorderLayout.CENTER);
+
+	    JPanel auxPanel = new JPanel(new BorderLayout());
+	    auxPanel.add(new JSeparator(), BorderLayout.NORTH);
+
+	    buttonPanel = new SimpleButtonPanel(wizardComponents);
+	    auxPanel.add(buttonPanel);
+	    this.add(auxPanel, BorderLayout.SOUTH);
+	    
+
+	    wizardComponents.setFinishAction(new FinishAction(wizardComponents) {
+	      public void performAction() {
+	        // dispose();
+	      }
+	    });
+	    wizardComponents.setCancelAction(new CancelAction(wizardComponents) {
+	      public void performAction() {
+	        // dispose();
+	      }
+	    });
+	  }
+
+	  public DefaultJWizardComponents getWizardComponents(){
+	    return wizardComponents;
+	  }
+
+	  public void setWizardComponents(DefaultJWizardComponents aWizardComponents){
+	    wizardComponents = aWizardComponents;
+	  }
+
+	  public void show() {
+	    wizardComponents.updateComponents();
+	    super.setVisible(true);
+	  }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/WizardPanelWithLogo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandStackDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandStackDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandStackDialog.java	(revision 42196)
@@ -0,0 +1,404 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.command;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollBar;
+import javax.swing.JScrollPane;
+import javax.swing.JSlider;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableColumn;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.gui.beans.DefaultBean;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.undo.UndoRedoInfo;
+import org.gvsig.tools.undo.UndoRedoStack;
+
+
+@SuppressWarnings("serial")
+public class CommandStackDialog extends DefaultBean implements SingletonWindow, IWindowListener, Observer{
+
+	private JTable commandTable = null;
+	private JPanel topPanel = null;
+	private UndoRedoStack undoRedoStack;
+	private JSlider commandSlider = null;
+	
+	private int lowLimit;
+	private int currentValue = -1;
+	private int currentSliderValue = -1;
+	private JPanel sliderPanel = null;
+	protected boolean refreshing;
+	private JPanel centerPanel = null;
+	private JScrollPane jScrollPane = null;
+	private JPanel tablePanel = null;
+	
+	private static final ImageIcon imodify = IconThemeHelper.getImageIcon("edit-undo-redo-actions-modify"); 
+	private static final ImageIcon iadd = IconThemeHelper.getImageIcon("edit-undo-redo-actions-add");
+	private static final ImageIcon idel = IconThemeHelper.getImageIcon("edit-undo-redo-actions-delete");
+
+	private CommandTableModel commandTableModel = null;
+	/**
+	 * This is the default constructor
+	 */
+	public CommandStackDialog() {
+		super();
+		initialize();
+	}
+	
+	public void setModel(UndoRedoStack cr1) {
+        if (this.undoRedoStack != null) {
+            if (this.undoRedoStack.equals(cr1)) {
+                return;
+            } else {
+                this.undoRedoStack.deleteObserver(this);
+            }
+		}
+		this.undoRedoStack = cr1;
+		this.undoRedoStack.addObserver(this);
+		initTable();
+		initSlider();
+		currentValue = commandTableModel.getPos();
+    	refreshControls();
+		refreshSliderSize();
+	}
+	
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.setSize(328, 229);		
+		this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+	}
+
+	/**
+	 * This method initializes jList
+	 *
+	 * @return javax.swing.JList
+	 */
+	private JTable getTable() {
+		if (commandTable == null) {
+			commandTable = new JTable();
+		}
+		return commandTable;
+	}
+	
+	private void initTable(){
+		commandTableModel = new CommandTableModel(undoRedoStack);
+		commandTable.setModel(commandTableModel);
+		commandTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		commandTable.setSelectionBackground(Color.orange);
+		commandTable.setSelectionForeground(Color.black);
+		commandTable.setShowGrid(false);
+		commandTable.getTableHeader().setBackground(Color.white);
+		TableColumn tc = commandTable.getColumnModel().getColumn(0);
+		tc.setCellRenderer(new DefaultTableCellRenderer() {
+			   public Component getTableCellRendererComponent(JTable table,
+			                                               Object value,
+			                                               boolean isSelected,
+			                                               boolean hasFocus,
+			                                               int row,
+			                                               int column)
+			      {
+			         JLabel label = (JLabel)
+			            super.getTableCellRendererComponent
+			               (table, value, isSelected, hasFocus, row, column);
+			            UndoRedoInfo info = (UndoRedoInfo) value;
+			            switch (info.getType()) {
+                            case UndoRedoInfo.INSERT:
+                                label.setIcon(iadd);
+                                break;
+                            case UndoRedoInfo.DELETE:
+                                label.setIcon(idel);
+                                break;
+                            default:
+                                label.setIcon(imodify);
+                        }
+			         if (commandTableModel.getPos()<row){
+			        	 label.setBackground(Color.lightGray);
+			         }else {
+			       		 label.setBackground(Color.orange);
+			         }
+			            return label;
+			      }
+			});
+
+		commandTable.addMouseListener(new java.awt.event.MouseAdapter() {
+			public void mousePressed(java.awt.event.MouseEvent e) {
+				int newpos = commandTable.getSelectedRow();	
+				if (newpos >= 0){
+    				commandTableModel.setPos(newpos);				
+    				ApplicationLocator.getManager().refreshMenusAndToolBars();
+				}
+			}
+		});
+	}
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getTopPanel() {
+		if (topPanel == null) {
+			topPanel = new JPanel();	
+		}
+		return topPanel;
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.ICONIFIABLE |
+				WindowInfo.MODELESSDIALOG | WindowInfo.RESIZABLE | WindowInfo.PALETTE);
+		m_viewinfo.setTitle(PluginServices.getText(this,
+				"pila_de_comandos"));
+		return m_viewinfo;
+	}
+
+	public Object getWindowModel() {
+		return commandTableModel.getClass().getName();
+	}
+
+	public void windowActivated() {
+		this.validate();
+	}
+
+	public void windowClosed() {
+		
+	}
+
+	public void commandRepaint() {
+		setValue(commandTableModel.getPos(), true);
+		refreshSliderSize();
+	}
+
+    /**
+     * Refreshes all the mutable controls in this component.
+     */
+    private void refreshControls() {
+        int normalizedValue = (int) (((commandTableModel.getRowCount() - (currentValue + 1)) / (float)commandTableModel.getRowCount()) * 100);
+        //Adding the 50% od the interval
+        if (commandTableModel.getRowCount() > 0){
+            normalizedValue = normalizedValue + (100 / (commandTableModel.getRowCount() * 2));
+        }
+        refreshSlider(normalizedValue);
+        commandTable.repaint();
+    }
+    
+    /**
+     * Sets the slider to the correct (scaled) position.
+     * @param normalizedValue
+     */
+    private void refreshSlider(int normalizedValue) {
+        if (!refreshing){
+            refreshing = true;
+            getJSlider().setValue(normalizedValue);
+            refreshing = false; 
+        }
+    }    
+    
+    private void refreshSliderSize(){
+        if (!refreshing){
+            Dimension size = new Dimension(commandSlider.getPreferredSize().width,
+                ((commandTableModel.getRowCount() + 1) * getTable().getRowHeight()));
+            JScrollBar verticalScrollBar = getJScrollPane().getVerticalScrollBar();
+            verticalScrollBar.setValue(commandTableModel.getPos()*getTable().getRowHeight());
+            commandSlider.setPreferredSize(size);
+            commandSlider.setSize(size);
+            validate();
+        }
+    }
+    
+	
+	/**
+	 * This method initializes jSlider
+	 *
+	 * @return javax.swing.JSlider
+	 */
+	private JSlider getJSlider() {
+		if (commandSlider == null) {
+			commandSlider = new JSlider(JSlider.VERTICAL, 0, 100, 0);	
+		}
+		return commandSlider;
+	}
+	
+	private void initSlider(){		
+		commandSlider.setPreferredSize(
+		    new Dimension(commandSlider.getPreferredSize().width,
+		        ((getTable().getRowCount())*getTable().getRowHeight())));
+
+		commandSlider.addChangeListener(new javax.swing.event.ChangeListener() {
+				public synchronized void stateChanged(javax.swing.event.ChangeEvent e) {
+				    if (!refreshing){
+				        int value = getTablePosFromSlider();  
+				        //currentSliderValue controls the same event thrown by the
+				        //slider. currentValue controls the event thrown by the table
+				        if (currentSliderValue != value){
+				            refreshing = true;	
+				            currentSliderValue = value;
+				            commandTableModel.setPos(value);
+				            ApplicationLocator.getManager().refreshMenusAndToolBars();
+				            refreshing = false;    
+				        }
+				    }
+			    }
+    		});
+    	setValue(commandTableModel.getRowCount() - 1 - commandTableModel.getPos(),true);
+	}
+	
+	private int getTablePosFromSlider(){	  
+	    if (commandTableModel.getRowCount() == 0){
+	        return -1;
+	    }
+	    
+	    int value = getJSlider().getValue();
+	    value = (int) ((value * 0.01) * commandTableModel.getRowCount());
+
+	    //The bottom part of the slider starts in 100: take the reverse value
+	    value = (commandTableModel.getRowCount() - 1) - value;
+	    
+	    if (value == -1){
+	        return 0;
+	    }
+	    return value;
+	}
+	
+    public void setValue(int number, boolean fireEvent) {
+        int rowCount = commandTableModel.getRowCount();
+               
+        if (number < lowLimit) {
+			number = lowLimit;
+		}
+        if (number > (rowCount - 1)) {
+			number = rowCount;
+		}
+        if (number != currentValue) {
+        	currentValue = number;
+        	if (fireEvent) {
+				callValueChanged(new Integer(currentValue));
+			}
+        }
+        /*
+         * This needs to be refreshed also when same number is set
+         * Example: select one feature and click 'delete' key
+         */
+        refreshControls();
+    }
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getSliderPanel() {
+		if (sliderPanel == null) {
+			sliderPanel = new JPanel();
+			sliderPanel.add(getJSlider());
+		}
+		return sliderPanel;
+	}
+
+	/**
+	 * This method initializes pCenter
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getCenterPanel() {
+		if (centerPanel == null) {
+			centerPanel = new JPanel();
+			centerPanel.setLayout(new BorderLayout());			
+			centerPanel.add(getTablePanel(), java.awt.BorderLayout.CENTER);
+			centerPanel.add(getSliderPanel(), java.awt.BorderLayout.WEST);
+		}
+		return centerPanel;
+	}
+	
+	private JPanel getTablePanel() {
+	    if (tablePanel == null) {
+	        tablePanel = new JPanel();
+	        tablePanel.setLayout(new BorderLayout());
+	        tablePanel.add(getTable(), java.awt.BorderLayout.CENTER);	        
+	        tablePanel.add(getTopPanel(), java.awt.BorderLayout.NORTH);
+	    }
+	    return tablePanel;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getCenterPanel());
+		}
+		return jScrollPane;
+	}
+	
+	public void update(Observable observable, Object notification) {
+		if (notification instanceof FeatureStoreNotification){
+			FeatureStoreNotification featureStoreNotification =
+					(FeatureStoreNotification) notification;
+			//If the edition finish the command stack disappears
+			String type = featureStoreNotification.getType();
+			if (FeatureStoreNotification.AFTER_FINISHEDITING.equals(type) ||
+					FeatureStoreNotification.AFTER_CANCELEDITING.equals(type)){							
+				ApplicationLocator.getManager().getUIManager().closeWindow(this);				
+				featureStoreNotification.getSource().deleteObserver(this);
+				return;
+			}
+			//Only repaint if the event is a selection event or an edition event
+			if (FeatureStoreNotification.AFTER_INSERT.equals(type) ||
+                FeatureStoreNotification.AFTER_DELETE.equals(type) ||
+                FeatureStoreNotification.AFTER_UPDATE.equals(type) ||
+                FeatureStoreNotification.SELECTION_CHANGE.equals(type) ||
+                FeatureStoreNotification.AFTER_REDO.equals(type) ||
+                FeatureStoreNotification.AFTER_UNDO.equals(type)) {                   
+			    commandRepaint();
+			}			
+		}
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}  

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandStackDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/ColorRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/ColorRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/ColorRenderer.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.command;
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.border.Border;
+import javax.swing.table.TableCellRenderer;
+
+public class ColorRenderer extends JLabel
+                           implements TableCellRenderer {
+    Border unselectedBorder = null;
+    Border selectedBorder = null;
+    boolean isBordered = true;
+
+    public ColorRenderer(boolean isBordered) {
+        this.isBordered = isBordered;
+        setOpaque(true); //MUST do this for background to show up.
+    }
+
+    public Component getTableCellRendererComponent(
+                            JTable table, Object color,
+                            boolean isSelected, boolean hasFocus,
+                            int row, int column) {
+        Color newColor = (Color)color;
+        setBackground(newColor);
+        if (isBordered) {
+            if (isSelected) {
+                if (selectedBorder == null) {
+                    selectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
+                                              table.getSelectionBackground());
+                }
+                setBorder(selectedBorder);
+            } else {
+                if (unselectedBorder == null) {
+                    unselectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
+                                              table.getBackground());
+                }
+                setBorder(unselectedBorder);
+            }
+        }
+
+        setToolTipText("RGB value: " + newColor.getRed() + ", "
+                                     + newColor.getGreen() + ", "
+                                     + newColor.getBlue());
+        return this;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/ColorRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandTableModel.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.command;
+
+import javax.swing.table.AbstractTableModel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.undo.UndoRedoStack;
+import org.gvsig.tools.undo.command.Command;
+
+
+@SuppressWarnings("serial")
+public class CommandTableModel extends AbstractTableModel{
+    private static final Logger LOG = 
+        LoggerFactory.getLogger(CommandTableModel.class);
+    
+    private UndoRedoStack undoRedoStack;
+        
+    public CommandTableModel(UndoRedoStack undoRedoStack) {
+        this.undoRedoStack = undoRedoStack;
+	}
+
+	public int getPos() {
+		if ((undoRedoStack == null) || undoRedoStack.getUndoInfos() == null){
+		    return 0;
+		}
+	    return undoRedoStack.getUndoInfos().size() - 1;
+	}
+	
+	public int getColumnCount() {
+		return 1;
+	}
+	
+	public int getRowCount() {
+		if ((undoRedoStack == null) || undoRedoStack.getUndoInfos() == null || undoRedoStack.getRedoInfos() == null){
+		    return 0;
+		}
+		return undoRedoStack.getRedoInfos().size() + undoRedoStack.getUndoInfos().size();
+	}
+	
+	@SuppressWarnings("unchecked")
+    public Object getValueAt(int i, int j) {
+		Command[] undos=(Command[])undoRedoStack.getUndoInfos().toArray(new Command[0]);
+		Command[] redos=(Command[])undoRedoStack.getRedoInfos().toArray(new Command[0]);
+		if (i<undos.length){
+			//System.out.println("undo i=" + i + " index=" + (undos.length-1-i));
+			return undos[undos.length-1-i];
+		}else{
+			//System.out.println("redo i=" + i + " index=" + (i-undos.length));
+			return redos[i-undos.length];
+		}
+	}
+	
+	public void setPos(int newpos) {
+		try {
+		    int currentPos = getPos();
+			if (newpos > currentPos) {
+				undoRedoStack.redo(newpos - currentPos);
+			}else if (newpos < getPos()) {
+				undoRedoStack.undo(currentPos - newpos);
+			}
+			
+		} catch (RedoException e) {
+			LOG.error("Error executing the command", e);
+		} catch (UndoException e) {
+		    LOG.error("Error executing the command", e);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewBehaviorPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewBehaviorPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewBehaviorPage.java	(revision 42196)
@@ -0,0 +1,212 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.preferencespage;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.border.Border;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.utils.XMLEntity;
+
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class ViewBehaviorPage extends AbstractPreferencePage{
+	private static final int FACTORY_DEFAULT_MAPCONTEXT_FRAME_RATE = 3;
+	protected String id = ViewBehaviorPage.class.getName();
+	private ScreenRefreshRatePanel refreshRate;
+	private static final String MAPCONTROL_ENABLE_ANIMATION_KEY_NAME = "MapControlEnableAnimation";
+	private static final String MAPCONTROL_REFRESH_RATE_KEY_NAME = "MapControlRefreshRate";
+
+	public ViewBehaviorPage() {
+		super();
+		setParentID(ViewPage.id);
+		addComponent(new JBlank(1,1));
+		refreshRate = new ScreenRefreshRatePanel();
+		addComponent(refreshRate);
+	}
+
+	@Override
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+
+	@Override
+	public void storeValues() throws StoreException {
+		final int frameRate = refreshRate.getFrameRate();
+		final boolean bAnimationEnabled = frameRate>0;
+		if (frameRate > 0) {
+			MapContext.setDrawFrameRate(frameRate);
+		}
+		MapControl.setDrawAnimationEnabled(bAnimationEnabled);
+
+		// Apply on-the-fly to all already created views
+		IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
+		for (int i = 0; i < windows.length; i++) {
+			if (windows[i] instanceof AbstractViewPanel) {
+				AbstractViewPanel view = (AbstractViewPanel) windows[i];
+				view.getMapControl().applyFrameRate();
+			}
+		}
+
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+		xml.putProperty(
+				MAPCONTROL_REFRESH_RATE_KEY_NAME,
+				MapContext.getDrawFrameRate());
+		xml.putProperty(
+				MAPCONTROL_ENABLE_ANIMATION_KEY_NAME,
+				MapControl.isDrawAnimationEnabled());
+
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public ImageIcon getIcon() {
+		return null;
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "behavior");
+	}
+
+	public void initializeDefaults() {
+		refreshRate.setFrameRate(FACTORY_DEFAULT_MAPCONTEXT_FRAME_RATE);
+	}
+
+	public void initializeValues() {
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+
+		// View refresh rate
+		if (xml.contains(MAPCONTROL_REFRESH_RATE_KEY_NAME)) {
+			MapContext.setDrawFrameRate(xml.getIntProperty(MAPCONTROL_REFRESH_RATE_KEY_NAME));
+		}
+
+		// View animation enabled
+		if (xml.contains(MAPCONTROL_ENABLE_ANIMATION_KEY_NAME)) {
+			MapControl.setDrawAnimationEnabled(xml.getBooleanProperty(MAPCONTROL_ENABLE_ANIMATION_KEY_NAME));
+		}
+
+
+		int frameRate = MapContext.getDrawFrameRate();
+		if (!MapControl.isDrawAnimationEnabled())
+			frameRate = 0;
+		refreshRate.setFrameRate(frameRate);
+	}
+
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+
+	private class ScreenRefreshRatePanel extends JPanel {
+		private static final long serialVersionUID = -68376902499946576L;
+		private JSlider sldRefreshRate;
+
+		public ScreenRefreshRatePanel() {
+    		setPreferredSize(new Dimension(500, 200));
+            Border border=BorderFactory.createTitledBorder(
+            		PluginServices.getText(this, "options.view.behavior.screen_refreshrate"));
+            setBorder(border);
+    		setLayout(new BorderLayout(15, 15));
+
+    		JPanel aux = new JPanel(new BorderLayout());
+    		aux.add(new JLabel(
+    				PluginServices.getText(
+    						this,
+    						"options.view.behavior.screen_refreshrate.none")),
+    				BorderLayout.WEST);
+    		JPanel aux2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
+    		aux2.add(new JLabel(
+    				PluginServices.getText(
+    						this,
+    						"options.view.behavior.screen_refreshrate.half")),
+    				BorderLayout.CENTER);
+    		aux.add(aux2);
+    		aux.add(new JLabel(
+    				PluginServices.getText(
+    						this,
+    						"options.view.behavior.screen_refreshrate.full")),
+    				BorderLayout.EAST);
+
+    		add(aux, BorderLayout.NORTH);
+    		aux = new JPanel(new BorderLayout());
+    		aux.add(getSldRefreshRate(), BorderLayout.NORTH);
+    		aux.add(new JBlank(10, 20), BorderLayout.SOUTH);
+    		add(aux, BorderLayout.CENTER);
+    		add(new JLabel(PluginServices.
+    				getText(this, "options.view.behavior.screen_refresh_rate.help")),
+    				BorderLayout.SOUTH);
+    	}
+
+		private JSlider getSldRefreshRate() {
+			if (sldRefreshRate == null) {
+				sldRefreshRate = new JSlider(0, 30);
+
+			}
+
+			return sldRefreshRate;
+		}
+
+		public int getFrameRate() {
+			return getSldRefreshRate().getValue();
+		}
+
+		public void setFrameRate(int sampleRate) {
+			if (sampleRate<=30)
+				getSldRefreshRate().setValue(sampleRate);
+		}
+
+    }
+
+	@Override
+	public String getParentID() {
+		if (super.getParentID()==null) {
+			setParentID(ViewPage.id);
+		}
+		return super.getParentID();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewBehaviorPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPage.java	(revision 42196)
@@ -0,0 +1,597 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ViewPage.java 38875 2012-09-10 13:22:58Z jldominguez $
+* $Log$
+* Revision 1.27  2007-09-17 09:22:10  jaume
+* view draw frame rate now customizable
+*
+* Revision 1.26  2007/05/09 16:08:14  jaume
+* *** empty log message ***
+*
+* Revision 1.25  2007/03/06 16:35:02  caballero
+* Exceptions
+*
+* Revision 1.24  2007/02/20 15:52:32  caballero
+* *** empty log message ***
+*
+* Revision 1.23  2007/01/25 11:04:07  caballero
+* comprobar que el factor no es cero
+*
+* Revision 1.22  2006/12/20 14:41:12  caballero
+* Remodelado Layout
+*
+* Revision 1.21  2006/11/08 10:57:55  jaume
+* remove unecessary imports
+*
+* Revision 1.20  2006/10/25 08:34:06  jmvivo
+* LLamado al PluginServices.getText para las unidades de medida del los combo
+*
+* Revision 1.19  2006/10/04 07:23:31  jaume
+* refactored ambiguous methods and field names and added some more features for preference pages
+*
+* Revision 1.18  2006/10/03 09:52:38  jaume
+* restores to meters
+*
+* Revision 1.17  2006/10/03 09:19:12  jaume
+* *** empty log message ***
+*
+* Revision 1.16  2006/10/03 07:26:08  jaume
+* *** empty log message ***
+*
+* Revision 1.15  2006/10/02 15:30:29  jaume
+* *** empty log message ***
+*
+* Revision 1.14  2006/10/02 13:52:34  jaume
+* organize impots
+*
+* Revision 1.13  2006/10/02 13:38:23  jaume
+* *** empty log message ***
+*
+* Revision 1.12  2006/10/02 11:49:23  jaume
+* *** empty log message ***
+*
+* Revision 1.11  2006/09/28 12:04:21  jaume
+* default selection color now configurable
+*
+* Revision 1.10  2006/09/25 10:17:15  caballero
+* Projection
+*
+* Revision 1.9  2006/09/15 10:41:30  caballero
+* extensibilidad de documentos
+*
+* Revision 1.8  2006/09/14 15:43:48  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/09/14 15:42:38  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/09/14 06:57:18  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/09/12 15:56:50  jaume
+* Default Projection now customizable
+*
+* Revision 1.4  2006/08/29 07:21:08  cesar
+* Rename com.iver.cit.gvsig.fmap.Fmap class to com.iver.cit.gvsig.fmap.MapContext
+*
+* Revision 1.3  2006/08/22 12:30:59  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/08/22 07:36:04  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/08/04 11:41:05  caballero
+* poder especificar el zoom a aplicar en las vistas
+*
+* Revision 1.3  2006/07/31 10:02:31  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/06/13 07:43:08  fjp
+* Ajustes sobre los cuadros de dialogos de preferencias
+*
+* Revision 1.1  2006/06/12 16:04:28  caballero
+* Preferencias
+*
+* Revision 1.11  2006/06/06 10:26:31  jaume
+* *** empty log message ***
+*
+* Revision 1.10  2006/06/05 17:07:17  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2006/06/05 17:00:44  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2006/06/05 16:57:59  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/06/05 14:45:06  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/06/05 11:00:09  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/06/05 10:39:02  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/06/05 10:13:40  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/06/05 10:06:08  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/06/05 09:51:56  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/06/02 10:50:18  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.gui.preferencespage;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Enumeration;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.UIManager;
+import javax.swing.plaf.FontUIResource;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import org.gvsig.app.gui.panels.CRSSelectPanel;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.app.project.DefaultProject;
+import org.gvsig.app.project.ProjectPreferences;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.utils.StringUtilities;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.swing.JComboBox;
+
+
+/**
+ *  View document configuration page.
+ *  <b><b>
+ *  Here the user can establish what settings wants to use by default regarding to
+ *  the document View.
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class ViewPage extends AbstractPreferencePage {
+
+	private static final String FACTORY_DEFAULT_PROJECTION =
+	    MapContextLocator.getMapContextManager().getDefaultCRS().getAbrev();
+
+	private static final String ZOOM_IN_FACTOR_KEY_NAME = "ZoomInFactor";
+	private static final String ZOOM_OUT_FACTOR_KEY_NAME = "ZoomOutFactor";
+	public static final String ADD_NEW_LAYERS_IN_INVISIBLE_MODE_KEY_NAME = "NewLayersInInvisibleMode";
+	private static final String KEEP_SCALE_ON_RESIZING_KEY_NAME = "KeepScaleOnResizing";
+	private static final String DEFAULT_SELECTION_COLOR_KEY_NAME = "DefaultSelectionColor";
+	private static final String DEFAULT_VIEW_BACK_COLOR_KEY_NAME = "DefaultViewBackColor";
+	private static final String DEFAULT_DISTANCE_AREA_KEY_NAME = "DefaultDistanceArea";
+	private static final String DEFAULT_DISTANCE_UNITS_KEY_NAME = "DefaultDistanceUnits";
+	private static final String DEFAULT_MAP_UNITS_KEY_NAME = "DefaultMapUnits";
+	/*
+	 * Locator's background color, for when we let it be possible
+	 * private static final String DEFAULT_MAP_OVERVIEW_BACK_COLOR_KEY_NAME = "DefaultMapOverViewBackColor";
+	 */
+	private static final double DEFAULT_ZOOM_IN_FACTOR = 2.0;
+	private static final double DEFAULT_ZOOM_OUT_FACTOR = 0.5;
+	private static final Color FACTORY_DEFAULT_SELECTION_COLOR = Color.YELLOW;
+	private static final Color FACTORY_DEFAULT_VIEW_BACK_COLOR = Color.WHITE;
+	/*
+	 * Locator's background color, for when we let it be possible
+	 * private static final Color FACTORY_DEFAULT_MAP_OVERVIEW_BACK_COLOR = Color.WHITE;
+	 */
+
+	private static String[] unitsNames = null;
+
+	private static int FACTORY_DEFAULT_MAP_UNITS;
+	private static int FACTORY_DEFAULT_DISTANCE_UNITS;
+	private static int FACTORY_DEFAULT_DISTANCE_AREA;
+
+	private JTextField txtZoomInFactor;
+	private JTextField txtZoomOutFactor;
+	protected static String id = ViewPage.class.getName();
+	private ImageIcon icon;
+	private JLabel lblDefaultProjection;
+	private JButton btnChangeProjection;
+	private String fontName;
+	private JCheckBox chkInvisibleNewLayers;
+	private JCheckBox chkKeepScaleOnResizing;
+	private ColorChooserPanel jccDefaultSelectionColor;
+	private ColorChooserPanel jccDefaultViewBackColor;
+	private JComboBox jCmbMapUnits;
+	private JComboBox jCmbDistanceUnits;
+	private JComboBox jCmbDistanceArea;
+
+	CRSSelectPanel jPanelProj = null;
+
+
+	/*
+	 * Locator's background color, for when we let it be possible
+	 * private ColorChooserPanel jccDefaultMapOverViewBackColor;
+	 */
+
+	{
+		Enumeration keys = UIManager.getDefaults().keys();
+		while (keys.hasMoreElements()) {
+			Object key = keys.nextElement();
+			Object value = UIManager.get (key);
+			if (value instanceof FontUIResource) {
+				FontUIResource fur = (FontUIResource) value;
+				fontName = fur.getFontName();
+
+			}
+		}
+
+		String[] unitNames = MapContext.getDistanceNames();
+		for (int i = 0; i < unitNames.length; i++) {
+			if (unitNames[i].equals("Metros")) {
+				FACTORY_DEFAULT_DISTANCE_UNITS = i;
+				FACTORY_DEFAULT_DISTANCE_AREA = i;
+				FACTORY_DEFAULT_MAP_UNITS = i;
+				break;
+			}
+		}
+
+	}
+
+	/**
+	 * Creates a new panel containing View preferences settings.
+	 *
+	 */
+	public ViewPage() {
+		super();
+
+		icon = IconThemeHelper.getImageIcon("document-view-icon");
+
+		// default projection
+		lblDefaultProjection = new JLabel();
+		lblDefaultProjection.setFont(new java.awt.Font(
+			fontName, java.awt.Font.BOLD, 11));
+		btnChangeProjection = new JButton(PluginServices.getText(this, "change"));
+		btnChangeProjection.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				ISelectCrsPanel panel = CRSSelectPanel.getUIFactory().getSelectCrsPanel(
+						CRSFactory.getCRS(lblDefaultProjection.getText()), false);
+				PluginServices.getMDIManager().addWindow(panel);
+		        if (panel.isOkPressed()) {
+		        	IProjection proj = panel.getProjection();
+		        	lblDefaultProjection.setText(proj.getAbrev());
+		        }
+			}
+		});
+
+		addComponent(PluginServices.getText(this, "default_projection") + ":", lblDefaultProjection );
+
+		IProjection proj = CRSFactory.getCRS(FACTORY_DEFAULT_PROJECTION);
+		if (PluginServices.getMainFrame() != null) {
+			proj = AddLayerDialog.getLastProjection();
+		}
+
+		jPanelProj = CRSSelectPanel.getPanel(proj);
+		jPanelProj.setTransPanelActive(true);
+		jPanelProj.setBounds(11, 400, 448, 35);
+		jPanelProj.setPreferredSize(new Dimension(448, 35));
+		jPanelProj.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if (jPanelProj.isOkPressed()) {
+					lblDefaultProjection.setText(jPanelProj.getCurProj().getAbrev());
+				}
+			}
+		});
+
+
+		JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+		aux.add(btnChangeProjection);
+		addComponent("", aux);
+
+		// just a separator
+		addComponent(new JLabel(" "));
+
+		// Adding Invisible New Layers
+		chkInvisibleNewLayers = new JCheckBox(
+				PluginServices.getText(this, "options.view.invisible_new_layers"));
+
+		addComponent("", chkInvisibleNewLayers);
+		chkKeepScaleOnResizing = new JCheckBox(
+				PluginServices.getText(this, "options.view.keep_scale_on_resizing"));
+		chkKeepScaleOnResizing.setEnabled(false);
+		addComponent("", chkKeepScaleOnResizing);
+
+		// just a separator
+		addComponent(new JLabel(" "));
+
+		// zoom in factor
+		addComponent(PluginServices.getText(this, "zoom_in_factor") + ":",
+			txtZoomInFactor = new JTextField("", 15));
+		// zoom out factor
+		addComponent(PluginServices.getText(this, "zoom_out_factor") + ":",
+			txtZoomOutFactor = new JTextField("", 15));
+
+		// just a separator
+		addComponent(new JLabel(" "));
+
+		// default back color chooser
+		addComponent(PluginServices.getText(this, "options.view.default_view_back_color"),
+				jccDefaultViewBackColor = new ColorChooserPanel());
+
+		/*
+		 * Locator's background color, for when we let it be possible
+		 * // default back color chooser
+		 * addComponent(PluginServices.getText(this, "options.view.default_map_overview_back_color"), jccDefaultMapOverViewBackColor = new ColorChooserPanel());
+		 */
+
+		// default selection color chooser
+		addComponent(PluginServices.getText(this, "options.view.default_selection_color"),
+				jccDefaultSelectionColor = new ColorChooserPanel());
+
+		// just a separator
+		addComponent(new JLabel(" "));
+
+		// default map units
+		addComponent(PluginServices.getText(this, "map_units"),
+				jCmbMapUnits = new JComboBox());
+
+		// default distance units
+		addComponent(PluginServices.getText(this, "distance_units"),
+				jCmbDistanceUnits = new JComboBox());
+
+		// default distance area
+		addComponent(PluginServices.getText(this, "distance_area"),
+				jCmbDistanceArea = new JComboBox());
+
+		initializeValues();
+	}
+
+	public void initializeValues() {
+                ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+                PluginServices ps = PluginsLocator.getManager().getPlugin(this);
+		XMLEntity xml = ps.getPersistentXML();
+
+//                projectPreferences.setDefaultProjection(lblDefaultProjection.getText());
+        lblDefaultProjection.setText(projectPreferences.getDefaultProjection().getAbrev());
+
+		// Adding invisible new layers
+		if (xml.contains(ADD_NEW_LAYERS_IN_INVISIBLE_MODE_KEY_NAME)) {
+			chkInvisibleNewLayers.setSelected(
+				xml.getBooleanProperty(ADD_NEW_LAYERS_IN_INVISIBLE_MODE_KEY_NAME));
+		}
+
+		// Keep scale on resizing
+		if (xml.contains(KEEP_SCALE_ON_RESIZING_KEY_NAME)) {
+			chkKeepScaleOnResizing.setSelected(
+				xml.getBooleanProperty(KEEP_SCALE_ON_RESIZING_KEY_NAME));
+		}
+
+		// Zoom-in factor
+		if (xml.contains(ZOOM_IN_FACTOR_KEY_NAME)) {
+			double zoomInFactor = xml.getDoubleProperty(ZOOM_IN_FACTOR_KEY_NAME);
+			txtZoomInFactor.setText(String.valueOf( zoomInFactor ));
+		} else {
+			txtZoomInFactor.setText(
+				String.valueOf( MapContext.ZOOMINFACTOR ));
+		}
+		MapContext.ZOOMINFACTOR = Double.parseDouble(txtZoomInFactor.getText());
+
+		// Zoom-out factor
+		if (xml.contains(ZOOM_OUT_FACTOR_KEY_NAME)) {
+			double zoomOutFactor = xml.getDoubleProperty(ZOOM_OUT_FACTOR_KEY_NAME);
+			txtZoomOutFactor.setText(String.valueOf( zoomOutFactor ));
+		} else {
+			txtZoomOutFactor.setText(
+				String.valueOf( MapContext.ZOOMOUTFACTOR ));
+		}
+		MapContext.ZOOMOUTFACTOR = Double.parseDouble(txtZoomOutFactor.getText());;
+
+		// Default back color
+		jccDefaultViewBackColor.setColor(DefaultViewPanel.getDefaultBackColor());
+		jccDefaultViewBackColor.setAlpha(255);
+		/*
+		 * Locator's background color, for when we let it be possible
+		 * // Default map overview back color
+		 * jccDefaultMapOverViewBackColor.setColor(Project.getDefaultMapOverViewBackColor());
+		 * jccDefaultMapOverViewBackColor.setAlpha(255);
+		 */
+
+		// Default selection color
+		jccDefaultSelectionColor.setColor(DefaultProject.getDefaultSelectionColor());
+		jccDefaultSelectionColor.setAlpha(255);
+		String[] distanceNames=MapContext.getDistanceNames();
+		// Map units
+		if (DefaultProject.getDefaultMapUnits()<=distanceNames.length && distanceNames.length != jCmbMapUnits.getItemCount()){
+			((DefaultComboBoxModel)jCmbMapUnits.getModel()).removeAllElements();
+			//			 default map units
+			for (int i = 0; i < distanceNames.length; i++) {
+				((DefaultComboBoxModel)jCmbMapUnits.getModel()).addElement(PluginServices.getText(this,distanceNames[i]));
+			}
+			jCmbMapUnits.setSelectedIndex(DefaultProject.getDefaultMapUnits());
+		}
+
+		// Distance units
+		if (DefaultProject.getDefaultDistanceUnits()<=distanceNames.length&& distanceNames.length != jCmbDistanceUnits.getItemCount()){
+			((DefaultComboBoxModel)jCmbDistanceUnits.getModel()).removeAllElements();
+			// default distance units
+			for (int i = 0; i < distanceNames.length; i++) {
+				((DefaultComboBoxModel)jCmbDistanceUnits.getModel()).addElement(PluginServices.getText(this,distanceNames[i]));
+			}
+			jCmbDistanceUnits.setSelectedIndex(DefaultProject.getDefaultDistanceUnits());
+		}
+		String[] names=MapContext.getAreaNames();
+
+		// Distance area
+		if (DefaultProject.getDefaultDistanceArea()<=names.length && names.length != jCmbDistanceArea.getItemCount()){
+			((DefaultComboBoxModel)jCmbDistanceArea.getModel()).removeAllElements();
+			for (int i = 0; i < names.length; i++) {
+				((DefaultComboBoxModel)jCmbDistanceArea.getModel()).addElement(PluginServices.getText(this,names[i])+MapContext.getOfLinear(i));
+			}
+			jCmbDistanceArea.setSelectedIndex(DefaultProject.getDefaultDistanceArea());
+		}
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "Vista");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void storeValues() throws StoreException {
+            String projName = lblDefaultProjection.getText();
+            double zif=1;
+            double zof=1;
+            boolean invisibleNewLayers, keepScaleOnResize;
+            Color selectionColor, viewBackColor;
+
+            ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+            /*
+             * Locator's background color, for when we let it be possible
+             * Color mapOverViewBackColor;
+             */
+
+		try {
+//			try {
+				zif=Double.parseDouble(txtZoomInFactor.getText());
+				zof=Double.parseDouble(txtZoomOutFactor.getText());
+				if (zif==0 || zof==0) {
+					throw new NumberFormatException();
+				}
+//			}catch (NumberFormatException e) {
+//				//JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),PluginServices.getText(this,"numero_incorrecto")+" = "+ txtZoomInFactor.getText()+ ", "+txtZoomOutFactor.getText());
+//				throw new StoreException(PluginServices.getText(this,"numero_incorrecto")+" = "+ txtZoomInFactor.getText()+ ", "+txtZoomOutFactor.getText());
+//			}
+                        projectPreferences.setDefaultProjection( CRSFactory.getCRS(projName));
+
+			selectionColor = jccDefaultSelectionColor.getColor();
+			projectPreferences.setDefaultSelectionColor( selectionColor );
+
+			viewBackColor = jccDefaultViewBackColor.getColor();
+			DefaultViewPanel.setDefaultBackColor( viewBackColor );
+			/*
+			 * Locator's background color, for when we let it be possible
+			 * mapOverViewBackColor = jccDefaultMapOverViewBackColor.getColor();
+			 * View.setDefaultMapOverViewBackColor( mapOverViewBackColor );
+			 */
+
+			projectPreferences.setDefaultMapUnits(jCmbMapUnits.getSelectedIndex());
+			projectPreferences.setDefaultDistanceUnits(jCmbDistanceUnits.getSelectedIndex());
+			projectPreferences.setDefaultDistanceArea(jCmbDistanceArea.getSelectedIndex());
+			invisibleNewLayers = chkInvisibleNewLayers.isSelected();
+			keepScaleOnResize = chkKeepScaleOnResizing.isSelected();
+		} catch (Exception e) {
+			throw new StoreException(PluginServices.getText(this,"factor_zoom_incorrecto"));
+		}
+		MapContext.ZOOMINFACTOR=zif;
+		MapContext.ZOOMOUTFACTOR=zof;
+		// MapControl.setScalingOnResize(!keepScaleOnResize);
+
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+		//xml.putProperty(DEFAULT_PROJECTION_KEY_NAME, projName);
+		xml.putProperty(ZOOM_IN_FACTOR_KEY_NAME, zif);
+		xml.putProperty(ZOOM_OUT_FACTOR_KEY_NAME, zof);
+		xml.putProperty(ADD_NEW_LAYERS_IN_INVISIBLE_MODE_KEY_NAME, invisibleNewLayers);
+		xml.putProperty(KEEP_SCALE_ON_RESIZING_KEY_NAME, keepScaleOnResize);
+		xml.putProperty(DEFAULT_VIEW_BACK_COLOR_KEY_NAME, StringUtilities.color2String(viewBackColor));
+		/*
+		 * Locator's background color, for when we let it be possible
+		 * xml.putProperty(DEFAULT_MAP_OVERVIEW_BACK_COLOR_KEY_NAME, StringUtilities.color2String(mapOverViewBackColor));
+		 */
+		xml.putProperty(DEFAULT_SELECTION_COLOR_KEY_NAME, StringUtilities.color2String(selectionColor));
+		xml.putProperty(DEFAULT_MAP_UNITS_KEY_NAME, jCmbMapUnits.getSelectedIndex());
+		xml.putProperty(DEFAULT_DISTANCE_UNITS_KEY_NAME, jCmbDistanceUnits.getSelectedIndex());
+		xml.putProperty(DEFAULT_DISTANCE_AREA_KEY_NAME, jCmbDistanceArea.getSelectedIndex());
+	}
+
+
+	public void initializeDefaults() {
+		lblDefaultProjection.setText(FACTORY_DEFAULT_PROJECTION);
+		txtZoomInFactor.setText(String.valueOf(DEFAULT_ZOOM_IN_FACTOR));
+		txtZoomOutFactor.setText(String.valueOf(DEFAULT_ZOOM_OUT_FACTOR));
+		chkInvisibleNewLayers.setSelected(false);
+		chkKeepScaleOnResizing.setSelected(false);
+		jccDefaultViewBackColor.setColor(FACTORY_DEFAULT_VIEW_BACK_COLOR);
+		/*
+		 * Locator's background color, for when we let it be possible
+		 * jccDefaultMapOverViewBackColor.setColor(FACTORY_DEFAULT_VIEW_BACK_COLOR);
+		 */
+		jccDefaultSelectionColor.setColor(FACTORY_DEFAULT_SELECTION_COLOR);
+		jCmbMapUnits.setSelectedIndex(FACTORY_DEFAULT_MAP_UNITS);
+		jCmbDistanceUnits.setSelectedIndex(FACTORY_DEFAULT_DISTANCE_UNITS);
+		jCmbDistanceArea.setSelectedIndex(FACTORY_DEFAULT_DISTANCE_AREA);
+
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+
+
+//	private String[] getUnitsNames() {
+//		if (unitsNames == null) {
+//			String[] names=MapContext.getDistanceNames();
+//			unitsNames = new String[names.length];
+//			for (int i=0;i<names.length;i++) {
+//				unitsNames[i]=PluginServices.getText(this, names[i]);
+//			}
+//		}
+//		return unitsNames;
+//	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/AppSymbolPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/AppSymbolPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/AppSymbolPreferences.java	(revision 42196)
@@ -0,0 +1,234 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {}  {{Task}}
+*/
+package org.gvsig.app.gui.preferencespage;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.io.File;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.app.extension.InitializeApplicationExtension;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * Default {@link SymbolPreferences} implementation based on object attributes.
+ * 
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class AppSymbolPreferences implements SymbolPreferences {
+	private static final String SYMBOL_COLOR                   = "defaultSymbolColor";
+	private static final String SYMBOL_FILL_COLOR              = "defaultSymbolFillColor";
+	private static final String SYMBOL_FILL_COLOR_ALEATORY     = "defaultSymbolFillColorAleatory";
+	private static final String SYMBOL_FONT                    = "defaultSymbolFont";
+	private static final String SYMBOL_LIBRARY_PATH            = "symbolLibraryPath";
+	
+	private DynObject           values                         = null;
+	
+	private String symbolFileExtension = ".gvssym";
+	private Color defaultSymbolColor;
+	private Color defaultSymbolFillColor;
+	private boolean defaultSymbolFillColorAleatory;
+	private Font defaultSymbolFont;
+	private String symbolLibraryPath;
+
+	/**
+	 * The unit that will be used when creating new symbols with Cartographic
+	 * support.
+	 */
+	private int defaultCartographicSupportMeasureUnit = -1;
+
+	/**
+	 * The reference system that will be used when creating new symbols with
+	 * Cartographic support.
+	 */
+	private int defaultCartographicSupportReferenceSystem = CartographicSupport.WORLD;
+
+	public AppSymbolPreferences() {
+		PluginsManager pluginsManager = (PluginsManager) PluginsLocator.getManager();
+		PluginServices plugin = pluginsManager.getPlugin(InitializeApplicationExtension.class);
+		values = plugin.getPluginProperties();
+		initDefaults();
+	}
+	
+	private void initDefaults() {
+		resetDefaultSymbolColor();
+		resetDefaultSymbolFillColor();
+		resetDefaultSymbolFillColorAleatory();
+		resetSymbolLibraryPath();
+		resetDefaultSymbolFont();
+		
+		if(getDefaultSymbolFont() == null)
+			setDefaultSymbolFont(defaultSymbolFont);
+		if(getDefaultSymbolColor() == null)
+			setDefaultSymbolColor(defaultSymbolColor);
+		if(getDefaultSymbolFillColor() == null)
+			setDefaultSymbolFillColor(defaultSymbolFillColor);
+		if(getSymbolLibraryPath() == null)
+			setSymbolLibraryPath(symbolLibraryPath);
+		setSymbolFileExtension(symbolFileExtension);
+		setDefaultCartographicSupportMeasureUnit(defaultCartographicSupportMeasureUnit);
+		setDefaultCartographicSupportReferenceSystem(defaultCartographicSupportReferenceSystem);
+	}
+
+	public String getSymbolFileExtension() {
+		return symbolFileExtension;
+	}
+
+	public void setSymbolFileExtension(String symbolFileExtension) {
+		this.symbolFileExtension = symbolFileExtension;
+	}
+	
+	public String getSymbolLibraryPath() {
+		String spath = (String)values.getDynValue(SYMBOL_LIBRARY_PATH);
+                if( spath==null ) {
+                    return this.symbolLibraryPath;
+                }
+                File path = new File(spath);
+                if( !path.exists() ) {
+                    return this.symbolLibraryPath;
+                }
+		return spath;
+	}
+
+	public void setSymbolLibraryPath(String symbolLibraryPath) {
+		values.setDynValue(SYMBOL_LIBRARY_PATH, symbolLibraryPath);
+		PluginServices.getPluginServices(this).savePluginProperties();
+	}
+
+	public Color getDefaultSymbolColor() {
+		return (Color)values.getDynValue(SYMBOL_COLOR);
+	}
+
+	public void setDefaultSymbolColor(Color symbolColor) {
+		values.setDynValue(SYMBOL_COLOR, symbolColor);
+		PluginServices.getPluginServices(this).savePluginProperties();
+	}
+
+	public Color getDefaultSymbolFillColor() {
+		return (Color)values.getDynValue(SYMBOL_FILL_COLOR);
+	}
+
+	public void setDefaultSymbolFillColor(Color symbolFillColor) {
+		values.setDynValue(SYMBOL_FILL_COLOR, symbolFillColor);
+		PluginServices.getPluginServices(this).savePluginProperties();
+	}
+
+	public boolean isDefaultSymbolFillColorAleatory() {
+		if(values.getDynValue(SYMBOL_FILL_COLOR_ALEATORY) == null) {
+			setDefaultSymbolFillColorAleatory(defaultSymbolFillColorAleatory);
+		}
+		return (Boolean)values.getDynValue(SYMBOL_FILL_COLOR_ALEATORY);
+	}
+
+	public void setDefaultSymbolFillColorAleatory(boolean defaultSymbolFillColorAleatory) {
+		values.setDynValue(SYMBOL_FILL_COLOR_ALEATORY, defaultSymbolFillColorAleatory);
+		PluginServices.getPluginServices(this).savePluginProperties();
+	}
+
+	public Font getDefaultSymbolFont() {
+		return (Font)values.getDynValue(SYMBOL_FONT);
+	}
+
+	public void setDefaultSymbolFont(Font defaultSymbolFont) {
+		values.setDynValue(SYMBOL_FONT, defaultSymbolFont);
+		PluginServices.getPluginServices(this).savePluginProperties();
+	}
+
+
+	public int getDefaultCartographicSupportMeasureUnit() {
+		return defaultCartographicSupportMeasureUnit;
+	}
+
+	public void setDefaultCartographicSupportMeasureUnit(
+			int defaultCartographicSupportMeasureUnit) {
+		this.defaultCartographicSupportMeasureUnit =
+				defaultCartographicSupportMeasureUnit;
+	}
+
+	public int getDefaultCartographicSupportReferenceSystem() {
+		return defaultCartographicSupportReferenceSystem;
+	}
+
+	public void setDefaultCartographicSupportReferenceSystem(
+			int defaultCartographicSupportReferenceSystem) {
+		this.defaultCartographicSupportReferenceSystem =
+				defaultCartographicSupportReferenceSystem;
+	}
+
+	public void resetDefaultSymbolColor() {
+		defaultSymbolColor = Color.DARK_GRAY;
+	}
+
+	public void resetDefaultSymbolFillColor() {
+		defaultSymbolFillColor = new Color(60, 235, 235);
+	}
+
+	public void resetDefaultSymbolFillColorAleatory() {
+		defaultSymbolFillColorAleatory = true;
+	}
+
+	public void resetDefaultSymbolFont() {
+		defaultSymbolFont = new Font("SansSerif", Font.PLAIN, 14);
+	}
+
+	public void resetSymbolLibraryPath() {
+		PluginsManager pluginsManager = (PluginsManager) PluginsLocator.getManager();
+		PluginServices plugin = pluginsManager.getPlugin(InitializeApplicationExtension.class);
+		
+		symbolLibraryPath = new File(plugin.getPluginHomeFolder(),"Symbols").getAbsolutePath();
+		
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/AppSymbolPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriversPages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriversPages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriversPages.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.preferencespage;
+
+import java.awt.BorderLayout;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+
+
+
+/**
+ * P�gina de preferencias de donde cuelgan todos los drivers.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class DriversPages extends AbstractPreferencePage {
+    private JLabel jLabel = null;
+    private ImageIcon icon;
+
+    /**
+     * This is the default constructor
+     */
+    public DriversPages() {
+        super();
+        icon=PluginServices.getIconTheme().get("layout-insert-view");
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        jLabel = new JLabel();
+        jLabel.setText(PluginServices.getText(this,
+                "configurar_todos_los_drivers"));
+        this.setLayout(new BorderLayout());
+        this.setSize(300, 200);
+        this.add(jLabel, java.awt.BorderLayout.CENTER);
+    }
+
+    public String getID() {
+        return this.getClass().getName();
+    }
+
+    public String getTitle() {
+        return PluginServices.getText(this, "drivers");
+    }
+
+    public JPanel getPanel() {
+        return this;
+    }
+
+    public void initializeValues() {
+    }
+
+    public void storeValues() {
+    }
+
+    public void initializeDefaults() {
+    }
+
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    public boolean isValueChanged() {
+        return false; // Because it does not manage values
+    }
+
+    public void setChangesApplied() {
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriversPages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/CartographicSupportPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/CartographicSupportPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/CartographicSupportPage.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.preferencespage;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.extension.BasicSymbologyExtension;
+import org.gvsig.app.gui.JComboBoxUnits;
+import org.gvsig.app.gui.styling.JComboBoxUnitsReferenceSystem;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class CartographicSupportPage extends AbstractPreferencePage {
+    
+	private static final String DefaultMeasureUnitKey = "default_measure_units";
+	private static final String DefaultUnitReferenceSystemKey = "default_measure_units_reference_system";
+	
+	private JComboBoxUnits cmbUnits;
+	private JComboBoxUnitsReferenceSystem cmbReferenceSystem;
+	
+	public CartographicSupportPage() {
+		super();
+		initialize();
+	}
+	
+	private void initialize() {
+		addComponent(PluginServices.getText(this, "_Default_measure_units"),
+				cmbUnits = new JComboBoxUnits(true));
+		addComponent(PluginServices.getText(this, "_Default_measure_units_reference_system"),
+				cmbReferenceSystem = new JComboBoxUnitsReferenceSystem());
+		addComponent(new JSeparator(JSeparator.HORIZONTAL));
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+
+	public String getID() {
+		return getClass().getName();
+	}
+
+	public ImageIcon getIcon() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public String getTitle() {
+		return Messages.getText("_Cartographic_support_panel_title");
+	}
+
+	public void initializeValues() {
+	    
+	    DynObject props = this.getPluginProperties();
+	    int val = 0;
+	    Object val_obj = null;
+
+	    val_obj = props.getDynValue(CartographicSupportPage.DefaultMeasureUnitKey);
+	    if (val_obj != null) {
+	        val = ((Integer) val_obj).intValue(); 
+	        cmbUnits.setSelectedUnitIndex(val);
+	    } 
+	    
+	    val_obj = props.getDynValue(CartographicSupportPage.DefaultUnitReferenceSystemKey);
+	    if (val_obj != null) {
+	        val = ((Integer) val_obj).intValue(); 
+	        cmbReferenceSystem.setSelectedIndex(val);
+	    }
+	}
+
+	public void initializeDefaults() {
+        cmbUnits.setSelectedUnitIndex(CartographicSupportToolkit.DefaultMeasureUnit);
+        cmbReferenceSystem.setSelectedIndex(CartographicSupportToolkit.DefaultReferenceSystem);
+	}
+	
+	public void storeValues() throws StoreException {
+	    
+	    DynObject props = this.getPluginProperties();
+        props.setDynValue(CartographicSupportPage.DefaultMeasureUnitKey,
+            new Integer(cmbUnits.getSelectedUnitIndex()));
+        props.setDynValue(CartographicSupportPage.DefaultUnitReferenceSystemKey,
+            new Integer(cmbReferenceSystem.getSelectedIndex()));
+	}
+
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+	
+	private DynObject getPluginProperties() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        return pluginsManager.getPlugin(BasicSymbologyExtension.class).getPluginProperties();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/CartographicSupportPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPage.java	(revision 42196)
@@ -0,0 +1,337 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.preferencespage;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolPreferences;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JComboBoxFontSizes;
+import org.gvsig.gui.beans.swing.JComboBoxFonts;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.i18n.Messages;
+
+
+
+/**
+ * This class extends AbstractPreferencesPage. This component is a preferences page for
+ * symbology and allows select default fore color, fill color, font and size text and
+ * the path where the images that compound symbols are located.
+ *
+ */
+public class SymbologyPage extends AbstractPreferencePage {
+
+	private static final long serialVersionUID = 1L;
+	
+	private SymbolPreferences preferences = null;
+
+	private ColorChooserPanel defaultColor = null;
+	private ColorChooserPanel defaultFillColor = null;
+	private JSlider jsDefaultSelectionAlpha = null;
+	private JSlider jsFillSelelctionAlpha = null;
+	protected String id;
+	private boolean panelStarted = false;
+	private JButton btnSelectProjectsFolder=null;
+	private ActionListener btnFileChooserAction=null;
+	private JTextField txtProjectsFolder=null;
+	private JComboBoxFonts fonts= null;
+	private JComboBoxFontSizes sizes= null;
+	private ImageIcon icon=null;
+	private JCheckBox aleatoryFillColor;
+
+	public SymbologyPage(){
+		super();
+		id = this.getClass().getName();
+	}
+	
+	public SymbolPreferences getPreferences() {
+		if(preferences == null) 	
+			preferences = MapContextLocator.getSymbolManager().getSymbolPreferences();
+		return preferences;
+	}
+
+	@Override
+	public void setChangesApplied() {
+		setChanged(false);
+
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public ImageIcon getIcon() {
+		if (icon == null){
+			icon = IconThemeHelper.getImageIcon("symbology-preferences");
+		}
+		return icon;
+	}
+
+	public JPanel getPanel() {
+		if(panelStarted)return this;
+		panelStarted=true;
+		addComponent(new JLabel(" "));
+
+		GridBagLayoutPanel selectionDefaultColorPanel = new GridBagLayoutPanel();
+		selectionDefaultColorPanel.setBorder(new TitledBorder(
+				Messages.getText("_Default_color")));
+		selectionDefaultColorPanel.setLayout(new GridBagLayout());
+		selectionDefaultColorPanel.add(new JLabel(
+				Messages.getText("fill")));
+		selectionDefaultColorPanel.add(defaultColor = new ColorChooserPanel());
+
+		selectionDefaultColorPanel.add(new JLabel(
+				Messages.getText("alpha")));
+		selectionDefaultColorPanel.add(jsDefaultSelectionAlpha = new JSlider(0,255));
+		selectionDefaultColorPanel.add(new JBlank(50,50));
+
+		jsDefaultSelectionAlpha.setPreferredSize(new Dimension(100,30));
+		jsDefaultSelectionAlpha.addChangeListener(new ChangeListener(){
+			public void stateChanged(ChangeEvent e) {
+				defaultColor.setAlpha(((JSlider)e.getSource()).getValue());
+		}});
+		addComponent(new JLabel(" "));
+		addComponent(selectionDefaultColorPanel);
+
+		GridBagLayoutPanel selectionFillColor = new GridBagLayoutPanel();
+		selectionFillColor.setBorder(new TitledBorder(
+				Messages.getText("_Default_fill_color")));
+		selectionFillColor.setLayout(new GridBagLayout());
+		selectionFillColor.add(new JLabel(
+				Messages.getText("fill")));
+		selectionFillColor.add(defaultFillColor = new ColorChooserPanel());
+
+		selectionFillColor.add(new JLabel(
+				Messages.getText("alpha")));
+		selectionFillColor.add(jsFillSelelctionAlpha = new JSlider(0,255));
+
+		jsFillSelelctionAlpha.setPreferredSize(new Dimension(100,30));
+		jsFillSelelctionAlpha.addChangeListener(new ChangeListener(){
+			public void stateChanged(ChangeEvent e) {
+				defaultFillColor.setAlpha(((JSlider)e.getSource()).getValue());
+		}});
+
+		selectionFillColor.add(new JBlank(50,50));
+		selectionFillColor.add(aleatoryFillColor = new JCheckBox());
+		selectionFillColor.add(new JLabel("   " +
+				Messages.getText("_Random")));
+
+
+		aleatoryFillColor.addActionListener(new ActionListener(){
+
+			public void actionPerformed(ActionEvent e) {
+				if(e.getSource() == aleatoryFillColor){
+					defaultFillColor.setEnabled(!aleatoryFillColor.isSelected());
+					jsFillSelelctionAlpha.setEnabled(!aleatoryFillColor.isSelected());
+				}
+			}
+
+		});
+
+		addComponent(new JLabel(" "));
+		addComponent(selectionFillColor);
+
+		btnFileChooserAction = new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				String path;
+				if (e.getSource().equals(btnSelectProjectsFolder)) {
+					path = txtProjectsFolder.getText();
+
+
+				FileFilter def =  new FileFilter(){
+					public boolean accept(File f) {
+						return (f.isDirectory());
+					}
+
+					public String getDescription() {
+						return null;
+					}
+				};
+
+				File file = new File(path);
+				JFileChooser fc;
+				if (file.exists()) {
+					fc = new JFileChooser("SYMBOLOGY_PREFERENCE_PAGE_FILECHOOSER", file);
+				} else {
+					fc= new JFileChooser("SYMBOLOGY_PREFERENCE_PAGE_FILECHOOSER",JFileChooser.getLastPath("SYMBOLOGY_PREFERENCE_PAGE_FILECHOOSER", file));
+				}
+
+
+				fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+                fc.setMultiSelectionEnabled(false);
+                fc.setAcceptAllFileFilterUsed(false);
+                fc.addChoosableFileFilter(def);
+                int result = fc.showOpenDialog(SymbologyPage.this);
+
+                if (result == JFileChooser.APPROVE_OPTION && (file = fc.getSelectedFile()) != null)
+                	if (e.getSource().equals(btnSelectProjectsFolder))
+    					txtProjectsFolder.setText(file.getAbsolutePath());
+                }
+			}
+
+		};
+		btnSelectProjectsFolder = new JButton(
+				Messages.getText("browse"));
+		btnSelectProjectsFolder.addActionListener(btnFileChooserAction);
+
+		JPanel panelBrowser = new JPanel();
+		panelBrowser.setBorder(new TitledBorder(
+				Messages.getText("_Symbols_folder")));
+
+		panelBrowser.add(txtProjectsFolder = new JTextField(30));
+		panelBrowser.add(btnSelectProjectsFolder);
+
+		addComponent(panelBrowser);
+
+		fonts= new JComboBoxFonts();
+		sizes = new JComboBoxFontSizes();
+
+		JPanel panelFont = new JPanel(new FlowLayout());
+		panelFont.setBorder(new TitledBorder(
+				Messages.getText("_Default_font")));
+		panelFont.add(fonts);
+		panelFont.add(sizes);
+
+		addComponent(panelFont);
+		initializeValues();
+		return this;
+	}
+
+	public String getTitle() {
+		return Messages.getText("Simbologia");
+	}
+	
+	public void initializeValues() {
+		if (!panelStarted) 
+			getPanel();
+
+		defaultColor.setColor(getPreferences().getDefaultSymbolColor());
+		defaultColor.setAlpha(getPreferences().getDefaultSymbolColor().getAlpha());
+		jsDefaultSelectionAlpha.setValue(getPreferences().getDefaultSymbolColor().getAlpha());
+		
+		aleatoryFillColor.setSelected(getPreferences().isDefaultSymbolFillColorAleatory());
+
+		defaultFillColor.setColor(getPreferences().getDefaultSymbolFillColor());
+		defaultFillColor.setAlpha(getPreferences().getDefaultSymbolFillColor().getAlpha());
+		jsFillSelelctionAlpha.setValue(getPreferences().getDefaultSymbolFillColor().getAlpha());
+		
+		txtProjectsFolder.setText(getPreferences().getSymbolLibraryPath());
+
+		fonts.setSelectedItem(getPreferences().getDefaultSymbolFont().getFamily());
+		sizes.setSelectedItem(getPreferences().getDefaultSymbolFont().getSize());
+		
+		defaultFillColor.setEnabled(!aleatoryFillColor.isSelected());
+		jsFillSelelctionAlpha.setEnabled(!aleatoryFillColor.isSelected());
+
+	}
+
+	public void initializeDefaults() {
+
+	    defaultColor.setColor(Color.DARK_GRAY);
+	    defaultColor.setAlpha(255);
+	    jsDefaultSelectionAlpha.setValue(255);
+	    
+	    aleatoryFillColor.setSelected(true);
+
+	    defaultFillColor.setColor(new Color(60, 235, 235));
+	    defaultFillColor.setAlpha(255);
+	    jsFillSelelctionAlpha.setValue(255);
+	    
+	    String path = PluginServices.getPluginServices(this).
+	        getPluginHomeFolder().getAbsolutePath() + File.separator + "Symbols";
+	    txtProjectsFolder.setText(path);
+	    
+	    fonts.setSelectedItem("SansSerif");
+	    sizes.setSelectedItem(14);
+	    
+	    defaultFillColor.setEnabled(!aleatoryFillColor.isSelected());
+        jsFillSelelctionAlpha.setEnabled(!aleatoryFillColor.isSelected());
+	}
+	
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+
+	@Override
+	public void storeValues() throws StoreException {
+		persistPreferences();
+	}
+
+	private void persistPreferences() {
+		if(defaultColor.getColor() != null) {
+			Color color = defaultColor.getColor();
+			color = new Color(color.getRed(), 
+					color.getGreen(), 
+					color.getBlue(), 
+					jsDefaultSelectionAlpha.getValue());
+			getPreferences().setDefaultSymbolColor(color);
+		}
+
+		if(aleatoryFillColor != null) {
+			getPreferences().setDefaultSymbolFillColorAleatory(aleatoryFillColor.isSelected());
+		}
+		
+		if (defaultFillColor.getColor()  !=  null) {
+			Color color = defaultFillColor.getColor();
+			color = new Color(color.getRed(),color.getGreen(),color.getBlue(),jsFillSelelctionAlpha.getValue());
+			getPreferences().setDefaultSymbolFillColor(color);
+		}
+
+		if (txtProjectsFolder.getText() != null) {
+			getPreferences().setSymbolLibraryPath(txtProjectsFolder.getText());
+		}
+
+		if(fonts.getFont() != null && sizes.getSelectedItem() != null){
+			String f = (String)fonts.getSelectedItem();
+			Font font = new Font(f, Font.PLAIN, (Integer)sizes.getSelectedItem());
+			getPreferences().setDefaultSymbolFont(font);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriverCSVPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriverCSVPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriverCSVPage.java	(revision 42196)
@@ -0,0 +1,115 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.preferencespage;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.utils.XMLEntity;
+
+/**
+ * CSV Driver preference page where the user can establish default values for
+ * <ol>
+ *  <li><b>separator</b></li>
+ * </ol>
+ * @author Vicente Caballero Navarro
+ *
+ */
+//TODO comentado para que compile
+public class DriverCSVPage extends AbstractPreferencePage{
+	private static final String DEFAULT_SEPARATOR_CSV_DRIVER = "DefaultSeparatorCSVDriver";
+	static String id = DriverCSVPage.class.getName();;
+	private ImageIcon icon;
+	private JTextField txtSeparator;
+
+	/**
+	 * Builds preference page where the user can establish default values for
+	 * <ol>
+	 *  <li><b>separator</b></li>
+	 * </ol>
+	 */
+	public DriverCSVPage() {
+		super();
+		icon=PluginServices.getIconTheme().get("mapa-icono");
+		addComponent(PluginServices.getText(this, "separador"), txtSeparator = new JTextField(5));
+		setParentID(DriversPages.class.getName());
+	}
+
+	public void storeValues() throws StoreException {
+		String separator;
+		separator = txtSeparator.getText();
+//		DriverManager dm=LayerFactory.getDM();
+//		CSVStringDriver cvsDriver=null;
+//		try {
+//			cvsDriver = (CSVStringDriver)dm.getDriver("csv string");
+//		} catch (DriverLoadException e) {
+//			throw new StoreException();
+//		}
+//		cvsDriver.setSeparator(separator);
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+		xml.putProperty(DEFAULT_SEPARATOR_CSV_DRIVER, separator);
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "CSVStringDriver");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void initializeValues() {
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+		if (xml.contains(DEFAULT_SEPARATOR_CSV_DRIVER)) {
+			txtSeparator.setText(xml.getStringProperty(DEFAULT_SEPARATOR_CSV_DRIVER));
+		}
+
+	}
+
+	public void initializeDefaults() {
+		txtSeparator.setText(",");
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriverCSVPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/LayerOrderPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/LayerOrderPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/LayerOrderPage.java	(revision 42196)
@@ -0,0 +1,256 @@
+package org.gvsig.app.gui.preferencespage;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.app.extension.AddLayer;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LayerOrderPage extends AbstractPreferencePage implements ActionListener {
+
+	private static Logger logger = LoggerFactory.getLogger(LayerOrderPage.class);
+	public static String PREFERENCES_ID = "current_layer_order_manager";
+	
+	private ImageIcon icon;
+	private JComboBox orderCombo = null;
+	private JTextArea descArea = null;
+	
+	public LayerOrderPage() {
+		super();
+		setParentID(ViewPage.id);
+		initUI();
+	}
+	
+	
+	private void initUI() {
+		
+		JPanel panel = new JPanel(new GridBagLayout());
+		
+		GridBagConstraints gbc = new GridBagConstraints();
+		
+		gbc.insets = new Insets(5, 8, 5, 8);
+		gbc.anchor = GridBagConstraints.NORTHWEST;
+		
+		gbc.gridx = 0;
+		gbc.gridy = 0;
+		panel.add(new JLabel(Messages.getText("_Order")), gbc);
+		
+		gbc.gridx = 1;
+		panel.add(getOrderCombo(), gbc);
+		
+		gbc.gridx = 0;
+		gbc.gridy = 1;
+		panel.add(new JLabel(Messages.getText("_Description")), gbc);
+		
+		gbc.gridx = 1;
+		panel.add(getDescArea(getOrderCombo().getFont(), panel.getBackground()), gbc);
+		
+		this.addComponent(panel);
+		
+	}
+
+
+	private JTextArea getDescArea(Font fnt, Color bg) {
+		
+		if (descArea == null) {
+			
+			descArea = new JTextArea();
+			descArea.setWrapStyleWord(true);
+			descArea.setLineWrap(true);
+			descArea.setPreferredSize(new Dimension(250, 80));
+			if (fnt != null) {
+				descArea.setFont(fnt);
+			}
+			if (bg != null) {
+				descArea.setBackground(bg);
+			}
+		}
+		return descArea;
+	}
+
+
+	private JComboBox getOrderCombo() {
+		
+		if (orderCombo == null) {
+			orderCombo = new JComboBox();
+			orderCombo.addActionListener(this);
+			
+		}
+		return orderCombo;
+	}
+
+
+	public String getID() {
+		return this.getClass().getName();
+	}
+
+	public String getTitle() {
+		return Messages.getText("_Layer_order_in_TOC");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void initializeValues() {
+		
+		this.getOrderCombo().removeAllItems();
+		loadAvailables();
+		
+		DynObject props = this.getPluginProperties();
+		// current_layer_order_manager
+		Object val_obj = null;
+		if (props.hasDynValue(PREFERENCES_ID)) {
+			val_obj = props.getDynValue(PREFERENCES_ID);
+		}
+		if (val_obj != null && val_obj instanceof LayerOrderManager) {
+			LayerOrderManager lom = (LayerOrderManager) val_obj;
+			String code = lom.getCode();
+			setSelected(code);
+			return;
+		}
+		// init to default
+		LayerOrderManager lom = MapContextLocator.getDefaultOrderManager();
+		if (lom != null) {
+			setSelected(lom.getCode());
+		} else {
+			logger.warn("No default order manager set!");
+		}
+	}
+
+	private void setSelected(String code) {
+		
+		int n = this.getOrderCombo().getItemCount();
+		LayerOrderManager lom = null;
+		for (int i=0; i<n; i++) {
+			lom = ((LayerOrderComboItem) getOrderCombo().getItemAt(i)).getManager();
+			if (lom.getCode().compareTo(code) == 0) {
+				this.getOrderCombo().setSelectedIndex(i);
+				return;
+			}
+		}
+		
+		logger.warn("Did not find code in list of order managers: " + code);
+		getOrderCombo().setSelectedIndex(0);
+	}
+
+
+	private void loadAvailables() {
+		
+		List avs = MapContextLocator.getOrderManagers();
+		LayerOrderManager lom = null;
+		Iterator iter = avs.iterator();
+		while (iter.hasNext()) {
+			lom = (LayerOrderManager) iter.next();
+			this.getOrderCombo().addItem(new LayerOrderComboItem(lom));
+		}
+		
+	}
+
+
+	public void initializeDefaults() {
+		
+		this.getOrderCombo().removeAllItems();
+		loadAvailables();
+		// init to default
+		LayerOrderManager lom = MapContextLocator.getDefaultOrderManager();
+		if (lom != null) {
+			setSelected(lom.getCode());
+		} else {
+			logger.warn("No default order manager set!");
+		}
+		
+	}
+
+	public ImageIcon getIcon() {
+		
+		if (icon == null) {
+			icon = IconThemeHelper.getImageIcon("layer-order-preferences");
+		}
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return true;
+	}
+
+	public void storeValues() throws StoreException {
+		
+		LayerOrderComboItem loci =
+				(LayerOrderComboItem) getOrderCombo().getSelectedItem();
+		
+		DynObject props = this.getPluginProperties();
+		props.setDynValue(PREFERENCES_ID, loci.getManager());
+	}
+
+
+	public void setChangesApplied() {
+	}
+	
+	
+	private DynObject getPluginProperties() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        return pluginsManager.getPlugin(AddLayer.class).getPluginProperties();
+	}
+	
+	
+	public class LayerOrderComboItem {
+		
+		private LayerOrderManager lom = null;
+		
+		public LayerOrderComboItem(LayerOrderManager _lom) {
+			lom = _lom;
+		}
+		
+		public String toString() {
+			return lom.getName();
+		}
+		
+		public LayerOrderManager getManager() {
+			return lom;
+		}
+	}
+
+
+	public void actionPerformed(ActionEvent e) {
+		
+		Object src = e.getSource();
+		if (src == getOrderCombo()) {
+			LayerOrderComboItem item = null;
+			item = (LayerOrderComboItem) getOrderCombo().getSelectedItem(); 
+			if (item == null) {
+				return;
+			}
+			String desc = item.getManager().getDescription();
+			this.getDescArea(null, null).setText(desc);
+		}
+		
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/WizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/WizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/WizardPanel.java	(revision 42196)
@@ -0,0 +1,324 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui;
+
+import java.awt.Window;
+import java.util.logging.Level;
+import javax.swing.JOptionPane;
+
+import javax.swing.JPanel;
+import org.apache.commons.lang3.StringUtils;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.wizards.WizardListener;
+import org.gvsig.app.gui.wizards.WizardListenerSupport;
+import org.gvsig.app.prepareAction.PrepareContextView_v1;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlCreationException;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.identitymanagement.UnauthorizedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class WizardPanel extends JPanel {
+
+	private static final Logger logger = LoggerFactory.getLogger(WizardPanel.class);
+    private static final long serialVersionUID = 5317749209668850863L;
+    private String tabName = "TabName";
+    private MapControl mapCtrl = null;
+    private WizardListenerSupport listenerSupport = new WizardListenerSupport();
+	private MapContext mapContext;
+	private boolean b_isMapControlAvailable = false;
+
+    public void addWizardListener(WizardListener listener) {
+        listenerSupport.addWizardListener(listener);
+    }
+
+    public void callError(Exception descripcion) {
+        listenerSupport.callError(descripcion);
+    }
+
+    public void removeWizardListener(WizardListener listener) {
+        listenerSupport.removeWizardListener(listener);
+    }
+
+    public void callStateChanged(boolean finishable) {
+        listenerSupport.callStateChanged(finishable);
+    }
+
+    protected void setTabName(String name) {
+        tabName = name;
+    }
+
+    public String getTabName() {
+        return tabName;
+    }
+
+    abstract public void initWizard();
+
+    /**
+     * @deprecated use {@link #executeWizard()} instead.
+     */
+    abstract public void execute();
+
+    /**
+     * Executes the wizard and returns anything created in the process.
+     * 
+     * @return anything created in the process
+     */
+    public Object executeWizard() {
+        execute();
+        return null;
+    }
+
+    abstract public void close();
+
+    abstract public DataStoreParameters[] getParameters();
+
+    /**
+     * You can use it to interact with the MapControl component that will
+     * receive the new layer, in order to get user feedback
+     * (for instance a bounding box). Check the
+     * {@link #isMapControlAvailable()} method before accessing the MapControl
+     * because it may not be available (for instance when adding layers
+     * to a MapContext not associated with a View).
+     * 
+     * For the moment, this method will return a non-null MapControl for
+     * compatibility reasons, but you should still check
+     * {@link #isMapControlAvailable()} to be sure it is a valid one,
+     * as it could only be a fake MapControl.
+     * 
+     * It is recommended to use {@link #getMapContext()} method
+     * when no interaction is needed with the map user interface
+     * (for instance to get the active projection, visible extent, etc)
+     * 
+     * @return Returns the mapCtrl.
+     */
+    public MapControl getMapCtrl() {
+    	if (mapCtrl!=null) {
+    		return mapCtrl;
+    	}
+    	else if (mapContext!=null) {
+    		// if MapContext has been set, create a fake MapControl
+    		// for compatibility purposes
+    		MapControl mc;
+                try {
+                    mc = MapControlLocator.getMapControlManager().createJMapControlPanel(mapContext);
+                } catch (MapControlCreationException ex) {
+                    logger.warn("Can't create a MapControl.", ex);
+                    throw  new RuntimeException(ex);
+                }
+    		mapCtrl=mc;
+    	}
+    	return mapCtrl;
+    }
+
+    /**
+     * Sets the MapControl that will receive the new layer
+     * @param mapCtrl
+     *            The mapCtrl to set.
+     */
+    public void setMapCtrl(MapControl mapCtrl) {
+        this.mapCtrl = mapCtrl;
+        b_isMapControlAvailable = (mapCtrl!=null);
+    }
+    
+    /**
+     * You can use it to extract information from
+     * the MapContext that will receive the new layer.
+     * For example, projection to use, or visible extent.
+     * 
+     * @return Returns the MapContext.
+     */
+    public MapContext getMapContext() {
+    	if (this.mapContext!=null || this.mapCtrl==null) {
+    		return this.mapContext;
+    	}
+    	else {
+    		return this.mapCtrl.getMapContext();
+    	}
+        
+    }
+
+    /**
+     * Sets the MapContext that will receive the new layer
+     * @param mapContext
+     *            The mapContext to set.
+     */
+    public void setMapContext(MapContext mapContext) {
+        this.mapContext = mapContext;
+    }
+
+    /**
+     * Checks whether the MapControl is available.
+     * The MapControl may not be available in some circumstances, for instance
+     * when adding layers to a MapContext not associated with a View.
+     * 
+     * A MapContext should always be available on the {@link #getMapContext()}
+     * method.
+     * 
+     * @return true if the MapControl is available, false otherwise
+     */
+    public boolean isMapControlAvailable() {
+    	return b_isMapControlAvailable ;
+    }
+
+    protected void doAddLayer(
+            final String layerName, final DataStoreParameters parameters) {
+    	final boolean b_isMapControlAvail = this.isMapControlAvailable();
+    	final MapControl mapControl = this.getMapCtrl();
+    	final MapContext mapContext = this.getMapContext();
+    	final ApplicationManager application = ApplicationLocator.getManager();
+        final MapContextManager manager =
+            MapContextLocator.getMapContextManager();
+
+        logger.info("addLayer('{}','{}')", layerName, parameters.toString());
+        Thread task = new Thread(new Runnable() {
+
+            public void run() {
+                FLayer layer = null;
+                FLayer preparedLayer = null;
+                try {                    
+                    DataManager dataManager = DALLocator.getDataManager();
+                    DataStore dataStore = dataManager.openStore(parameters.getDataStoreName(), parameters);
+                    String layerName = dataStore.getName();
+                    layer = manager.createLayer(layerName, dataStore);   
+                    dataStore.dispose(); 
+                    dataStore = null;
+                    preparedLayer =
+                        application.prepareOpenLayer(layer,
+                            new PrepareContextView_v1() {
+
+                                public Window getOwnerWindow() {
+                                    return null;
+                                }
+
+                                public MapControl getMapControl() {
+                                    return mapControl;
+                                }
+
+								public IProjection getViewProjection() {
+									return mapContext.getProjection();
+								}
+
+								public MapContext getMapContext() {
+									return mapContext;
+								}
+
+								public boolean isMapControlAvailable() {
+									return b_isMapControlAvail;
+								}
+                            });
+                    if (preparedLayer != null) {
+                        mapContext.getLayers().addLayer(preparedLayer);
+                    }
+                } catch (UnauthorizedException e) {
+                    I18nManager i18nManager = ToolsLocator.getI18nManager();
+                    ApplicationManager application = ApplicationLocator.getManager();
+                    String resource = "";
+                    if( e.getResource() instanceof FilesystemStoreParameters ) {
+                        resource = ((FilesystemStoreParameters)e.getResource()).getFile().getPath();
+                    }
+                    application.messageDialog(
+                            i18nManager.getTranslation("_User_0_is_not_authorized_to_1_on_resource_2_3",
+                            new String[] {
+                              e.getIdentity().getID(),
+                              e.getActionName(),
+                              e.getResourceName(),
+                              resource
+                            }),     
+                            i18nManager.getTranslation("_Unauthorized_access"), 
+                            JOptionPane.WARNING_MESSAGE
+                    );
+                    logger.warn("Unauthorized access to layer '"+layerName+"'.",e);
+                    return;
+                    
+                } catch (Exception e) {
+                    I18nManager i18nManager = ToolsLocator.getI18nManager();
+                    ApplicationManager application = ApplicationLocator.getManager();
+                    application.messageDialog(
+                            i18nManager.getTranslation("_Cant_load_the_layer") + " ("+layerName+")",
+                            i18nManager.getTranslation("_Probems_loading_the_layer"), 
+                            JOptionPane.WARNING_MESSAGE
+                    );
+                    logger.warn("Can't load layer '"+layerName+"'.",e);
+                    return;
+
+                } finally {
+                    if (preparedLayer != null && preparedLayer != layer) {
+                        preparedLayer.dispose();
+                        preparedLayer = null;
+                    }
+                    if (layer != null) {
+                        layer.dispose();
+                        layer = null;
+                    }
+                }
+            }
+        });
+        task.start();
+
+    }
+    
+    /**
+     * 
+     * @param mapControl
+     * @param layerName
+     * @param parameters
+     * @deprecated Use {@link #doAddLayer(String, DataStoreParameters)}
+     * in combination with {@link #setMapCtrl(MapControl)} if you need
+     * to set the MapControl. Note that MapControl is automatically initialized
+     * when creating the panel from the AddLayer extension.
+     */
+    protected void doAddLayer(final MapControl mapControl,
+        final String layerName, final DataStoreParameters parameters) {
+    	this.setMapCtrl(mapControl);
+    	doAddLayer(layerName, parameters);
+    }
+    
+    /**
+     * This method is called for example when user changes
+     * tab in add layer dialog (new tab's settings are valid?)
+     * 
+     * @return whether current wizard settings are enough
+     * (for example, to enable an Accept button in a container)
+     */
+    public boolean areSettingsValid() {
+        return true;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/WizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorScheme.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorScheme.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorScheme.txt	(revision 42196)
@@ -0,0 +1,53 @@
+BuGn (ColorBrewer),range,f7fcfd,e5f5f9,ccece6,99d8c9,66c2a4,41ae76,238b45,006d2c,00441b
+BuPu (ColorBrewer),range,f7fcfd,e0ecf4,bfd3e6,9ebcda,8c96c6,8c6bb1,88419d,810f7c,4d004b
+GnBu (ColorBrewer),range,f7fcf0,e0f3db,ccebc5,a8ddb5,7bccc4,4eb3d3,2b8cbe,0868ac,084081
+OrRd (ColorBrewer),range,fff7ec,fee8c8,fdd49e,fdbb84,fc8d59,ef6548,d7301f,b30000,7f0000
+PuBu (ColorBrewer),range,fff7fb,ece7f2,d0d1e6,a6bddb,74a9cf,3690c0,0570b0,045a8d,023858
+PuBuGn (ColorBrewer),range,fff7fb,ece2f0,d0d1e6,a6bddb,67a9cf,3690c0,02818a,016c59,014636
+PuRd (ColorBrewer),range,f7f4f9,e7e1ef,d4b9da,c994c7,df65b0,e7298a,ce1256,980043,67001f
+RdPu (ColorBrewer),range,fff7f3,fde0dd,fcc5c0,fa9fb5,f768a1,dd3497,b0017e,7a0177,49006a
+YlGn (ColorBrewer),range,ffffe5,f7fcb9,d9f0a3,addd8e,78c679,41ab5d,238443,006837,004529
+YlGnBu (ColorBrewer),range,ffffd9,edf8b0,c7e9b4,7fcdbb,41b6c3,1d91c0,225ea8,253494,081d58
+YlOrBr (ColorBrewer),range,ffffe5,fff7bc,fee391,fec44f,fe9929,ec7014,cc4c02,993404,662506
+YlOrRd (ColorBrewer),range,ffffcc,ffeda0,fed976,feb24c,fd8d3c,fc4e2a,e31a1a,bd0026,b00026
+Blues (ColorBrewer),range,f7fbff,deebf7,c6dbef,9ecae1,6baed6,4292c6,2171b5,08519c,08306b
+Greens (ColorBrewer),range,f7fcf5,e5f5e0,c7e9c0,a1d99b,74c476,41ab5d,238b45,006d2c,00441b
+Greys (ColorBrewer),range,ffffff,f0f0f0,d9d9d9,bdbdbd,969696,737373,525252,252525,000000
+Oranges (ColorBrewer),range,fff5eb,fee6ce,fdd0a2,fdae6b,fd8d3c,f16913,d94801,a63603,7f2704
+Purples (ColorBrewer),range,fcfbfd,efedf5,dadaeb,bbbddc,9e9ac8,807dba,6a51a3,54278f,3f007d
+Reds (ColorBrewer),range,fff5f0,fee0d2,fcbba1,fc9272,fb6a4a,ef3b2c,cb181d,a50f15,67000d
+BrBG (ColorBrewer),range,543005,8c510a,bf812d,dfc27d,f6e8c3,f5f5f5,c7eae5,80cdc1,35978f,01665e,003c30
+PRGn (ColorBrewer),range,40004b,762a83,9970ab,c2a5cf,e7d4e8,f7f7f7,d9f0d3,a8d8b7,5aae61,1b7837,00441b
+PiYG (ColorBrewer),range,8e0152,c51b7d,de77ae,f1b6da,fde0ef,f7f7f7,e6f5d0,b8e186,7fbc41,4d9221,276419
+PuOr (ColorBrewer),range,7f3b08,b35806,e08214,fdb863,fee0b6,f7f7f7,d8daeb,b2abd2,8073ac,542788,2d004b
+RYB (ColorBrewer),range,a50026,d73027,f46d43,fdae61,fee090,ffffbf,e0f3f8,abd9e9,74add1,4575b4,313695
+RYG (ColorBrewer),range,a50026,d73027,f46d43,fdae61,fee08b,ffffbf,d9ef8b,a6d96a,66bd63,1a9850,006837
+RdBu (ColorBrewer),range,67001f,b2182b,d6604d,f4a582,fddbc7,f7f7f7,d1e5f0,92c5de,4393c3,2166ac,053061
+RdGy (ColorBrewer),range,67001f,b2182b,d6604d,f4a582,fddbc7,ffffff,e0e0e0,bababa,878787,4d4d4d,1a1a1a
+spectral (ColorBrewer),range,9e0142,d53e4f,f46d43,fdae61,fee08b,ffffbf,e6f598,abdda4,66c2a5,3288bd,5e4fa2
+Accents (ColorBrewer),discrete,7fc97f,beaed4,fdc086,ffff99,386cb0,f0027f,bf5b17,666666
+Dark 2 (ColorBrewer),discrete,1b9e77,d95f02,7570b3,e7298a,66a61e,e6ab02,a6761d,666666
+Paired (ColorBrewer),discrete,a6cee3,1f77b4,b2df8a,33a02c,fb9a99,e31a1c,fdbf6f,ff7f00,cab2d6,6a3d9a,ffff99
+Pastel 1 (ColorBrewer),discrete,fbb3ad,b2cce2,ccebc5,decbe4,fed9a5,ffffcc,e4d7bc,fddaec,f2f2f2
+Pastel 2 (ColorBrewer),discrete,b3e2cd,fdcdac,cbd5e8,f4cae4,e6f5c9,fff2ae,f1e2cc,cccccc
+Set 1 (ColorBrewer),discrete,e31a1c,377db8,4daf4a,984ea3,ff7f00,ffff33,a65628,f781bf,999999
+Set 2 (ColorBrewer),discrete,66c2a5,fc8d62,8da0cb,e78ac3,a6d854,ffd92f,e5c494,b3b3b3
+Set 3 (ColorBrewer),discrete,8dd3c7,ffffbc,bebada,fb8072,80b1d3,fdb462,b3de69,fccde5,d9d9d9,bc80bd,ccebc5,ffed6f
+Autumn Evening (Visual Mining Inc.),discrete,993300,6B5E4F,934266,629191,93928F,485EB4,B5A689
+Azalea Garden (Visual Mining Inc.),discrete,755CB7,BABA66,255CC9,375437,007DA3,A10346,758C27
+Cool and Crisp (Visual Mining Inc.),discrete,005699,99CCCC,008B87,C2C4C6,68AEE0,00B09B,9691C7
+Crackling Rosy (Visual Mining Inc.),discrete,99007E,BE99CC,9600A7,C6C2C5,E068CE,6C00B0,C7919A
+Earthy (Visual Mining Inc.),discrete,999966,213321,C3C3E6,333366,DACE98,AA0036,291441
+Expanded Earth Tones (Visual Mining Inc.),discrete,284B53,005699,B8BC9C,271651,AA0036,ECF0B9,999966,333366,C3C3E6,594330,A0BDC4,005699,999966,213321,DACE98
+Festival (Visual Mining Inc.),discrete,CC33CC,FFFF66,62449B,FF9933,999933,FFFFCC,B31646
+Garden Party (Visual Mining Inc.),discrete,FFCC33,33FFCC,9999FF,FF6600,00008B,CC9900,8B0000
+Gold Amber (Visual Mining Inc.),discrete,998300,CCAE99,A76100,C6C6C2,E0CB68,B03400,ABC791
+Lilies and Chrysanthemums (Visual Mining Inc.),discrete,D6B8D9,7D0440,CCD29C,CD672F,8F7DA0,E9E497,A9A67E,D8D7F1,5C776B,5C1F4D
+Moon Lake (Visual Mining Inc.),discrete,E3D782,C7555A,7D1242,51779C,82CBD9,1A2A67,BCCCC1
+Post-Modern (Visual Mining Inc.),discrete,ECEFB8,576728,FFEFCF,386AB3,E2EBF0,C77640,E9ECD9,284B53
+Rose and Jade (Visual Mining Inc.),discrete,D6B8D9,C7D38E,93785F,CBAC9F,EB769A,A74F78
+Soft and Warm (Visual Mining Inc.),discrete,FFF4D6,D7BAD6,A1BBEE,C0C1A1,F0CBAE,958F91,BFA9AC,DBCE99,C8C8C8
+Sophisticated Shades (Visual Mining Inc.),discrete,6C5D94,999966,315394,213321,00566F,690931,515F23
+Summer Smoothie (Visual Mining Inc.),discrete,EBF0F3,5E8109,F7BB83,B55290,1A4C8F,00AB9C,758EC5
+Super-Chill (Visual Mining Inc.),discrete,01559B,68FCFF,008AA7,BAC2CF,49B3FF,00B09B,6A59FF
+Swimming Pool (Visual Mining Inc.),discrete,AC0000,E76C42,99CC99,CC3300,C6FCFB,64BCB7,2F3293,FF6666,339276
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorScheme.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorRenderer.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.gui.utils;
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.border.Border;
+import javax.swing.table.TableCellRenderer;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author vcn
+ */
+public class ColorRenderer extends JLabel implements TableCellRenderer {
+    Border unselectedBorder = null;
+    Border selectedBorder = null;
+    boolean isBordered = true;
+
+    /**
+     * Creates a new ColorRenderer object.
+     *
+     * @param isBordered DOCUMENT ME!
+     */
+    public ColorRenderer(boolean isBordered) {
+        this.isBordered = isBordered;
+        setOpaque(true); //MUST do this for background to show up.
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param table DOCUMENT ME!
+     * @param color DOCUMENT ME!
+     * @param isSelected DOCUMENT ME!
+     * @param hasFocus DOCUMENT ME!
+     * @param row DOCUMENT ME!
+     * @param column DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public Component getTableCellRendererComponent(JTable table, Object color,
+        boolean isSelected, boolean hasFocus, int row, int column) {
+        Color newColor = (Color) color;
+        setBackground(newColor);
+
+        //JLabel boton=new JLabel("si");
+        //boton.setBackground(new Color(10,10,100));
+        //add(boton);
+        //System.out.println("dentro de Color Renderer");
+        if (isBordered) {
+            if (isSelected) {
+                if (selectedBorder == null) {
+                    selectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+                            5, table.getSelectionBackground());
+                }
+
+                setBorder(selectedBorder);
+            } else {
+                if (unselectedBorder == null) {
+                    unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2,
+                            5, table.getBackground());
+                }
+
+                setBorder(unselectedBorder);
+            }
+        }
+
+      /*  setToolTipText("RGB value: " + newColor.getRed() + ", " +
+            newColor.getGreen() + ", " + newColor.getBlue());
+*/
+        return this;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserDialog.java	(revision 42196)
@@ -0,0 +1,128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.utils;
+
+
+import java.awt.BorderLayout;
+import java.awt.Dialog;
+import java.awt.Font;
+import java.awt.Frame;
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+
+import org.jfree.ui.StandardDialog;
+
+/**
+ * A dialog for choosing a font from the available system fonts.
+ * Allows hiding size and/or style (bold, etc)
+ *
+ * @author jldominguez
+ */
+public class PartialFontChooserDialog extends StandardDialog {
+
+    /** The panel within the dialog that contains the font selection controls. */
+    private PartialFontChooserPanel fontChooserPanel;
+    
+    private boolean allowStyle = true;
+    private boolean allowSize = true;
+
+    /**
+     * Standard constructor - builds a font chooser dialog owned by another dialog.
+     *
+     * @param owner  the dialog that 'owns' this dialog.
+     * @param title  the title for the dialog.
+     * @param modal  a boolean that indicates whether or not the dialog is modal.
+     * @param font  the initial font displayed.
+     */
+    public PartialFontChooserDialog(
+        final Dialog owner,
+        final String title,
+        final boolean modal,
+        final Font font,
+        boolean style,
+        boolean size) {
+        
+        super(owner, title, modal);
+        allowStyle = style;
+        allowSize = size;
+        setContentPane(createContent(font));
+    }
+
+    /**
+     * Standard constructor - builds a font chooser dialog owned by a frame.
+     *
+     * @param owner  the frame that 'owns' this dialog.
+     * @param title  the title for the dialog.
+     * @param modal  a boolean that indicates whether or not the dialog is modal.
+     * @param font  the initial font displayed.
+     */
+    public PartialFontChooserDialog(
+        final Frame owner,
+        final String title,
+        final boolean modal,
+        final Font font,
+        boolean style,
+        boolean size) {
+        
+        super(owner, title, modal);
+        allowStyle = style;
+        allowSize = size;
+        setContentPane(createContent(font));
+    }
+    
+
+    /**
+     * Returns the selected font.
+     *
+     * @return the font.
+     */
+    public Font getSelectedFont() {
+        return this.fontChooserPanel.getSelectedFont();
+    }
+
+    /**
+     * Returns the panel that is the user interface.
+     *
+     * @param font  the font.
+     *
+     * @return the panel.
+     */
+    private JPanel createContent(Font font) {
+        final JPanel content = new JPanel(new BorderLayout());
+        content.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
+        if (font == null) {
+            font = new Font("Dialog", 10, Font.PLAIN);
+        }
+        this.fontChooserPanel =
+            new PartialFontChooserPanel(font, allowStyle, allowSize);
+        content.add(this.fontChooserPanel);
+
+        final JPanel buttons = createButtonPanel();
+        buttons.setBorder(BorderFactory.createEmptyBorder(4, 0, 0, 0));
+        content.add(buttons, BorderLayout.SOUTH);
+
+        return content;
+    }
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserPanel.java	(revision 42196)
@@ -0,0 +1,262 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.utils;
+
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.GraphicsEnvironment;
+import java.awt.GridLayout;
+import java.util.ResourceBundle;
+
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListModel;
+
+import org.jfree.util.ResourceBundleWrapper;
+
+/**
+ * A panel for choosing a font from the available system fonts.
+ * Allows hiding size and/or style (bold, etc)
+ *
+ * @author jldominguez
+ */
+public class PartialFontChooserPanel extends JPanel {
+
+    /** The font sizes that can be selected. */
+    public static final String[] SIZES = {"9", "10", "11", "12", "14", "16",
+            "18", "20", "22", "24", "28", "36", "48", "72"};
+
+    /** The list of fonts. */
+    private JList fontlist;
+
+    /** The list of sizes. */
+    private JList sizelist;
+
+    /** The checkbox that indicates whether the font is bold. */
+    private JCheckBox bold;
+
+    /** The checkbox that indicates whether or not the font is italic. */
+    private JCheckBox italic;
+
+    /** The resourceBundle for the localization. */
+    protected static ResourceBundle localizationResources =
+        ResourceBundleWrapper.getBundle("org.jfree.ui.LocalizationBundle");
+
+    /**
+     * Standard constructor - builds a FontChooserPanel initialised with the
+     * specified font.
+     *
+     * @param font  the initial font to display.
+     */
+    public PartialFontChooserPanel(
+        final Font font,
+        boolean showStyle,
+        boolean showSize) {
+
+        final GraphicsEnvironment g
+                = GraphicsEnvironment.getLocalGraphicsEnvironment();
+        final String[] fonts = g.getAvailableFontFamilyNames();
+
+        setLayout(new BorderLayout());
+        final JPanel right = new JPanel(new BorderLayout());
+
+        final JPanel fontPanel = new JPanel(new BorderLayout());
+        fontPanel.setBorder(BorderFactory.createTitledBorder(
+                            BorderFactory.createEtchedBorder(),
+                            localizationResources.getString("Font")));
+        this.fontlist = new JList(fonts);
+        final JScrollPane fontpane = new JScrollPane(this.fontlist);
+        fontpane.setBorder(BorderFactory.createEtchedBorder());
+        fontPanel.add(fontpane);
+        add(fontPanel, BorderLayout.CENTER);
+        
+        // ==============================
+
+        final JPanel sizePanel = new JPanel(new BorderLayout());
+        sizePanel.setBorder(BorderFactory.createTitledBorder(
+                            BorderFactory.createEtchedBorder(),
+                            localizationResources.getString("Size")));
+        this.sizelist = new JList(SIZES);
+        final JScrollPane sizepane = new JScrollPane(this.sizelist);
+        sizepane.setBorder(BorderFactory.createEtchedBorder());
+        sizePanel.add(sizepane);
+        
+        // ==============================
+
+        final JPanel attributes = new JPanel(new GridLayout(1, 2));
+        this.bold = new JCheckBox(localizationResources.getString("Bold"));
+        this.italic = new JCheckBox(localizationResources.getString("Italic"));
+        attributes.add(this.bold);
+        attributes.add(this.italic);
+        attributes.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(),
+                localizationResources.getString("Attributes")));
+        
+        // ==============================
+        
+        if (showStyle && showSize) {
+            // both
+            right.add(sizePanel, BorderLayout.CENTER);
+            right.add(attributes, BorderLayout.SOUTH);
+            add(right, BorderLayout.EAST);
+        } else {
+            if (showStyle) {
+                // only style
+                right.add(attributes, BorderLayout.CENTER);
+                add(right, BorderLayout.EAST);
+            } else {
+                if (showSize) {
+                    // only size
+                    right.add(sizePanel, BorderLayout.CENTER);
+                    add(right, BorderLayout.EAST);
+                } else {
+                    // nothing
+                    
+                }
+            }
+        }
+
+        setSelectedFont(font);
+    }
+
+    /**
+     * Returns a Font object representing the selection in the panel.
+     *
+     * @return the font.
+     */
+    public Font getSelectedFont() {
+        return new Font(getSelectedName(), getSelectedStyle(),
+                getSelectedSize());
+    }
+
+    /**
+     * Returns the selected name.
+     *
+     * @return the name.
+     */
+    public String getSelectedName() {
+        return (String) this.fontlist.getSelectedValue();
+    }
+
+    /**
+     * Returns the selected style.
+     *
+     * @return the style.
+     */
+    public int getSelectedStyle() {
+        if (this.bold.isSelected() && this.italic.isSelected()) {
+            return Font.BOLD + Font.ITALIC;
+        }
+        if (this.bold.isSelected()) {
+            return Font.BOLD;
+        }
+        if (this.italic.isSelected()) {
+            return Font.ITALIC;
+        }
+        else {
+            return Font.PLAIN;
+        }
+    }
+
+    /**
+     * Returns the selected size.
+     *
+     * @return the size.
+     */
+    public int getSelectedSize() {
+        final String selected = (String) this.sizelist.getSelectedValue();
+        if (selected != null) {
+            return Integer.parseInt(selected);
+        }
+        else {
+            return 10;
+        }
+    }
+
+    /**
+     * Initializes the contents of the dialog from the given font
+     * object.
+     *
+     * @param font the font from which to read the properties.
+     */
+    public void setSelectedFont (final Font font) {
+        if (font == null) {
+            throw new NullPointerException();
+        }
+        this.bold.setSelected(font.isBold());
+        this.italic.setSelected(font.isItalic());
+
+        final String fontName = font.getName();
+        ListModel model = this.fontlist.getModel();
+        this.fontlist.clearSelection();
+        
+        boolean found = false;
+        for (int i = 0; i < model.getSize(); i++) {
+            if (fontName.equals(model.getElementAt(i))) {
+                this.fontlist.setSelectedIndex(i);
+                this.fontlist.scrollRectToVisible(this.fontlist.getCellBounds(i, i));
+                found = true;
+                break;
+            }
+        }
+        // If not found, we search for a prefix
+        if (!found) {
+            for (int i = 0; i < model.getSize(); i++) {
+                String item =
+                    (model.getElementAt(i) == null) ?
+                        "[NULL]" : model.getElementAt(i).toString();
+                /*
+                 * This checks that fontName begins with this simple font name
+                 * and the following character is a white space or point
+                 */
+                if (fontName.indexOf(item) == 0
+                    && fontName.length() > (item.length() + 1)
+                    && (" ".equals(fontName.substring(item.length(), item.length() + 1)) ||
+                        ".".equals(fontName.substring(item.length(), item.length() + 1)))
+                            ) {
+                    this.fontlist.setSelectedIndex(i);
+                    this.fontlist.scrollRectToVisible(this.fontlist.getCellBounds(i, i));
+                    break;
+                }
+            }
+        }
+
+        final String fontSize = String.valueOf(font.getSize());
+        model = this.sizelist.getModel();
+        this.sizelist.clearSelection();
+        for (int i = 0; i < model.getSize(); i++) {
+            if (fontSize.equals(model.getElementAt(i))) {
+                this.sizelist.setSelectedIndex(i);
+                this.sizelist.scrollRectToVisible(this.sizelist.getCellBounds(i, i));
+                break;
+            }
+        }
+    }
+}
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/FontChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/FontChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/FontChooser.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.gui.utils;
+
+import java.awt.Component;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Toolkit;
+
+import org.jfree.ui.FontChooserDialog;
+
+
+
+public class FontChooser {
+    
+    public static Font showDialog(String title, Font font) {
+    	
+    	FontChooserDialog dlg = new FontChooserDialog(
+    	    (Dialog)null,title, true,font);
+    	
+    	dlg.pack();
+    	centerComponent(dlg);
+    	
+    	dlg.setVisible(true);
+    	if( dlg.isCancelled() ) {
+    		return null;
+    	}
+    	return dlg.getSelectedFont();
+    }
+    
+    public static Font showDialog(
+        String title,
+        Font font,
+        boolean allowStyle, boolean allowSize) {
+        
+        PartialFontChooserDialog dlg = new PartialFontChooserDialog(
+            (Dialog)null,title, true,font,allowStyle,allowSize);
+        
+        dlg.pack();
+        centerComponent(dlg);
+        
+        dlg.setVisible(true);
+        if( dlg.isCancelled() ) {
+            return null;
+        }
+        return dlg.getSelectedFont();
+    }    
+    
+    private static void centerComponent(Component comp) {
+        
+        Dimension scr_dim = Toolkit.getDefaultToolkit().getScreenSize();
+        Dimension comp_dim = comp.getSize();
+        
+        comp.setLocation(
+            (scr_dim.width - comp_dim.width) / 2,
+            (scr_dim.height - comp_dim.height) / 2
+            );
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/FontChooser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TransparencyPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TransparencyPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TransparencyPanel.java	(revision 42196)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.gui.panels;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+
+
+public class TransparencyPanel extends JPanel {
+    JPanel opaquePanel = new JPanel();
+    JPanel transparentPanel = new JPanel();
+    GridBagLayout gridBagLayout3 = new GridBagLayout();
+    JSlider transparencySlider = new JSlider();
+
+    public TransparencyPanel() {
+    	transparencySlider.setSize(100,30);
+    	transparencySlider.setPreferredSize(new Dimension(100,30));
+        transparencySlider.setMaximum(255);
+        transparencySlider.setPreferredSize(new Dimension(100, 24));
+        setLayout(gridBagLayout3);
+        add(opaquePanel,
+            new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
+                GridBagConstraints.CENTER, GridBagConstraints.NONE,
+                new Insets(0, 0, 0, 0), 0, 0));
+        add(transparencySlider,
+            new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
+                GridBagConstraints.CENTER, GridBagConstraints.NONE,
+                new Insets(0, 0, 0, 0), 0, 0));
+        add(transparentPanel,
+            new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0,
+                GridBagConstraints.CENTER, GridBagConstraints.NONE,
+                new Insets(0, 0, 0, 0), 0, 0));
+        opaquePanel.setBackground(Color.black);
+        opaquePanel.setMinimumSize(new Dimension(11, 11));
+        opaquePanel.setMaximumSize(new Dimension(11, 11));
+        opaquePanel.setPreferredSize(new Dimension(11, 11));
+        transparentPanel.setBackground(Color.white);
+        transparentPanel.setForeground(Color.white);
+        transparentPanel.setMaximumSize(new Dimension(11, 11));
+        transparentPanel.setMinimumSize(new Dimension(11, 11));
+        transparentPanel.setPreferredSize(new Dimension(11, 11));
+    }
+
+    public void setColor(Color color) {
+        opaquePanel.setBackground(color);
+    }
+
+    public JSlider getSlider() {
+        return transparencySlider;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TransparencyPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/PanelLinkProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/PanelLinkProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/PanelLinkProperties.java	(revision 42196)
@@ -0,0 +1,212 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+//TODO comentado para que compile
+public class PanelLinkProperties extends JPanel {
+
+	FLayer layer=null;
+	private JPanel jPanel1 = null;
+	private JLabel jLabelCampo1 = null;
+	private JComboBox jComboBoxCampo1 = null;
+	private JLabel jLabelExtension1 = null;
+	private JTextField jTextFieldExtension1 = null;
+	private JLabel jLabelAccion1 = null;
+	private JComboBox jComboBoxAccion1 = null;
+	private ViewDocument view;
+
+	/**
+	 * This is the default constructor
+	 */
+	public PanelLinkProperties(FLayer flayer, ViewDocument vista) {
+		super();
+//		this.setLayout(new GridBagLayout());
+		this.layer=flayer;
+		view=vista;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		this.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED), PluginServices.getText(this, "Hiperenlace"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		this.setBounds(315, 195, 313, 154);
+		this.add(getJPanel1(), null);
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jLabelAccion1 = new JLabel();
+			jLabelAccion1.setText(PluginServices.getText(this, "Accion_Predefinida") + "  ");
+			jLabelExtension1 = new JLabel();
+			jLabelExtension1.setText(PluginServices.getText(this,"extension"));
+			jLabelCampo1 = new JLabel();
+			jLabelCampo1.setText(PluginServices.getText(this, "Campo") + "   ");
+			jPanel1 = new JPanel();
+		}
+		jPanel1.setBounds(315, 195, 313, 154);
+		jPanel1.setPreferredSize(new java.awt.Dimension(300,120));
+		//jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+		jPanel1.add(jLabelCampo1, null);
+		jPanel1.add(getJComboBoxCampo1(), null);
+		jPanel1.add(jLabelExtension1, null);
+		jPanel1.add(getJTextFieldExtension1(), null);
+		jPanel1.add(jLabelAccion1, null);
+		jPanel1.add(getJComboBoxAccion1(), null);
+		return jPanel1;
+	}
+
+	/**
+	 * This method initializes jComboBoxCampo1
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getJComboBoxCampo1() {
+		if (jComboBoxCampo1 == null) {
+			jComboBoxCampo1 = new JComboBox();
+			jComboBoxCampo1.setPreferredSize(new java.awt.Dimension(80,25));
+
+			if (PluginServices.getMainFrame() != null) {
+				if  (PluginServices.getMDIManager().getActiveWindow() instanceof AbstractViewPanel ){
+				    AbstractViewPanel theView = (AbstractViewPanel)PluginServices.getMDIManager().getActiveWindow();
+				    view = theView.getModel();
+//				    try {
+//                		if (layer instanceof FLyrVect) {
+//                    		FLyrVect ad = (FLyrVect) layer;
+//                    		DataSource ds;
+//                    		ds = ad.getRecordset();
+//                    		String[] names = new String[ds.getFieldCount()];
+//                    		for (int i = 0; i < ds.getFieldCount(); i++) {
+//                    			names[i] = ds.getFieldName(i);
+//                    		}
+//                    		//jComboBox = new javax.swing.JComboBox(names);
+//                    		DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(names);
+//                    		jComboBoxCampo1.setModel(defaultModel);
+//                    		if (view.getSelectedField() != null) {
+//                    			jComboBoxCampo1.setSelectedItem(view.getSelectedField());
+//                    			//layer.setField(view.getSelectedField());
+//                    		}
+//                			}else{
+//                				jComboBoxCampo1 = new javax.swing.JComboBox();
+//                			}
+//				    } catch (ReadException e) {
+//				    	NotificationManager.addError("No se pudo obtener la tabla", e);
+//				    }
+				}
+			}
+			}
+		return jComboBoxCampo1;
+	}
+
+	/**
+	 * This method initializes jTextFieldExtension1
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTextFieldExtension1() {
+		if (jTextFieldExtension1 == null) {
+			jTextFieldExtension1 = new JTextField();
+			jTextFieldExtension1.setPreferredSize(new java.awt.Dimension(40,25));
+		}
+		return jTextFieldExtension1;
+	}
+
+	/**
+	 * This method initializes jComboBoxAccion1
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getJComboBoxAccion1() {
+		if (jComboBoxAccion1 == null) {
+			jComboBoxAccion1 = new JComboBox();
+			jComboBoxAccion1.setPreferredSize(new java.awt.Dimension(120,25));
+			ComboActionModel t=new ComboActionModel();
+			DefaultComboBoxModel defaultModel1 = new DefaultComboBoxModel(t.getModel());
+			jComboBoxAccion1.setModel(defaultModel1);
+
+		}
+		return jComboBoxAccion1;
+	}
+}
+
+	class ComboActionModel{
+		private String types[] = null;
+
+		ComboActionModel(){
+			types[0]="Enlazar a ficheros de im�gen";
+			types[1]="Enlazar a ficheros de texto";
+		}
+		String toString(int ind){
+			return types[ind];
+		}
+		public String[] getModel(){
+			return types;
+		}
+
+		public int getOrder(String field){
+			if (field.compareTo(types[0])==0){
+				return 0;
+			}
+			else if (field.compareTo(types[1])==0) {
+				return 1;
+			}
+			return 1;
+		}
+
+
+	}
+
+	class ComboActionItem {
+		private String text=null;
+		private int cont;
+
+		public ComboActionItem(String texto, int contador){
+			text = texto;
+			cont = contador;
+		}
+
+		public String toString() {
+			return this.text;
+		}
+	}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/PanelLinkProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/SelectAnnotationLayerNameAndField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/SelectAnnotationLayerNameAndField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/SelectAnnotationLayerNameAndField.java	(revision 42196)
@@ -0,0 +1,206 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels.annotation;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+
+import org.gvsig.andami.PluginServices;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+
+//TODO comentado para que compile
+public class SelectAnnotationLayerNameAndField extends JWizardPanel {
+//	private FLyrAnnotation layer;
+
+	public SelectAnnotationLayerNameAndField(JWizardComponents wizardComponents) {
+		super(wizardComponents);
+		// TODO Auto-generated constructor stub
+	}
+
+
+	private JLabel lblDescription = null;
+	private JLabel lblStep1 = null;
+	private JLabel lblNewLayerName = null;
+	private JLabel lblStep2 = null;
+	private JLabel lblField = null;
+
+	private JTextField txtNewLayerName = null;
+	private JComboBox cmbField = null;
+
+
+	private static final Rectangle lblDescriptionPosition = new Rectangle(4,4,355,75);
+
+	private static final Rectangle lblStep1Position = new Rectangle(4,90,15,15);
+	private static final Rectangle lblNewLayerNamePosition = new Rectangle(30,90,355,15);
+	private static final Rectangle txtNewLayerNamePosition = new Rectangle(30,109,250,18);
+
+
+	private static final Rectangle lblStep2Position = new Rectangle(4,135,15,12);
+	private static final Rectangle lblFieldPosition = new Rectangle(30,135,355,30);
+	private static final Rectangle cmbFieldPosition = new Rectangle(30,169,170,18);
+
+
+
+
+	private class EventsListener implements CaretListener,ItemListener
+	{
+		public void caretUpdate(CaretEvent arg0) {
+			updateButtonsState();
+		}
+
+		public void itemStateChanged(ItemEvent e) {
+			updateButtonsState();
+		}
+
+	}
+
+
+	private void updateButtonsState() {
+		setBackButtonEnabled(false);
+		boolean enabled =checkIsOkPanelData();
+		setNextButtonEnabled(enabled);
+		setFinishButtonEnabled(enabled);
+	}
+
+
+	private EventsListener eventsListener = new EventsListener();
+
+
+	protected boolean checkIsOkPanelData() {
+		if (txtNewLayerName.getText().trim().length() < 1) {
+			return false;
+		}
+		if (((String)cmbField.getSelectedItem()).trim().length() < 1) {
+			return false;
+		}
+		return true;
+	}
+
+
+//	public SelectAnnotationLayerNameAndField(JWizardComponents arg0,FLyrAnnotation layer) {
+//		super(arg0);
+//		this.layer =layer;
+//		this.initialize();
+//	}
+
+	protected void initialize() {
+		this.setLayout(null);
+		this.setSize(new Dimension(358,263));
+		this.addLabels();
+
+		this.add(getTxtNewLayerName(),null);
+		this.add(getCmbField(),null);
+
+		checkIsOkPanelData();
+	}
+
+	private JTextField getTxtNewLayerName() {
+		if (this.txtNewLayerName == null) {
+			this.txtNewLayerName = new JTextField();
+			this.txtNewLayerName.setBounds(txtNewLayerNamePosition);
+			this.txtNewLayerName.setText("NuevaCapa");
+			this.txtNewLayerName.addCaretListener(eventsListener);
+		}
+		return this.txtNewLayerName;
+	}
+
+	public String getNewLayerName() {
+		return this.getTxtNewLayerName().getText();
+	}
+
+
+	private JComboBox getCmbField() {
+		if (this.cmbField == null) {
+			this.cmbField = new JComboBox();
+			this.cmbField.setEditable(false);
+			this.cmbField.setBounds(cmbFieldPosition);
+			this.cmbField.addItemListener(this.eventsListener);
+			this.cmbField.addItem("");
+
+
+//			try {
+//				SelectableDataSource dataSource = this.layer.getRecordset();
+//
+//				String[] fieldsNames = dataSource.getFieldNames();
+//
+//				for (int i=0; i < fieldsNames.length; i++) {
+//					this.cmbField.addItem(fieldsNames[i]);
+//				}
+//
+//			} catch (ReadDriverException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			}
+
+		}
+		return this.cmbField;
+	}
+
+	public String getField() {
+		return (String)this.getCmbField().getSelectedItem();
+	}
+
+
+	protected void addLabels() {
+		this.lblDescription = new JLabel();
+		this.lblStep1 = new JLabel();
+		this.lblNewLayerName = new JLabel();
+		this.lblStep2 = new JLabel();
+		this.lblField= new JLabel();
+
+		this.lblDescription.setText(PluginServices.getText(this,"descripcion_de_crear_capa_de_anotaciones"));
+		this.lblStep1.setText("1.");
+		this.lblNewLayerName.setText(PluginServices.getText(this,"introduzca_el_nombre_de_la_nueva_capa_de_anotaciones"));
+		this.lblStep2.setText("2.");
+		this.lblField.setText(PluginServices.getText(this,"seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual"));
+
+		this.lblDescription.setBounds(lblDescriptionPosition);
+		this.lblStep1.setBounds(lblStep1Position);
+		this.lblNewLayerName.setBounds(lblNewLayerNamePosition);
+		this.lblStep2.setBounds(lblStep2Position);
+		this.lblField.setBounds(lblFieldPosition);
+
+
+		this.add(lblDescription,null);
+		this.add(lblStep1,null);
+		this.add(lblNewLayerName,null);
+		this.add(lblStep2,null);
+		this.add(lblField,null);
+
+	}
+
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/SelectAnnotationLayerNameAndField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/ConfigureLabel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/ConfigureLabel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/ConfigureLabel.java	(revision 42196)
@@ -0,0 +1,349 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels.annotation;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+
+import org.gvsig.andami.PluginServices;
+
+import jwizardcomponent.JWizardComponents;
+import jwizardcomponent.JWizardPanel;
+
+
+
+//TODO comentado para que compile
+public class ConfigureLabel extends JWizardPanel {
+
+	public ConfigureLabel(JWizardComponents wizardComponents) {
+		super(wizardComponents);
+		// TODO Auto-generated constructor stub
+	}
+
+	public static final String TEXT_FOR_DEFAULT_VALUE = "- Default -";
+
+//	private FLyrAnnotation layer;
+
+	private HashMap fieldsNames = new HashMap() ;
+	private JLabel lblDescription;
+
+	private JLabel lblAngle;
+
+	private JLabel lblColor;
+
+	private JLabel lblSize;
+
+	private JLabel lblSizeUnits;
+
+	private JLabel lblFont;
+
+	private JLabel lblStep1;
+
+	private JLabel lblStep2;
+
+	private JLabel lblStep3;
+
+	private JLabel lblStep4;
+
+	private JComboBox cmbAngle = null;
+	private JComboBox cmbColor = null;
+	private JComboBox cmbSize = null;
+	private JComboBox cmbSizeUnits = null;
+	private JComboBox cmbFont = null;
+
+
+
+	private static final Rectangle lblDescriptionPosition = new Rectangle(4,4,355,60);
+
+	private static final Rectangle lblStep1Position = new Rectangle(4,90,15,15);
+	private static final Rectangle lblAnglePosition = new Rectangle(30,90,355,30);
+	private static final Rectangle cmbAnglePosition = new Rectangle(30,124,170,18);
+
+
+	private static final Rectangle lblStep2Position = new Rectangle(4,150,15,15);
+	private static final Rectangle lblColorPosition = new Rectangle(30,150,355,30);
+	private static final Rectangle cmbColorPosition = new Rectangle(30,184,170,18);
+
+	private static final Rectangle lblStep3Position = new Rectangle(4,210,15,15);
+	private static final Rectangle lblSizePosition = new Rectangle(30,210,355,30);
+	private static final Rectangle cmbSizePosition = new Rectangle(30,244,170,18);
+	private static final Rectangle lblSizeUnitsPosition = new Rectangle(204,244,80,15);
+	private static final Rectangle cmbSizeUnitsPosition = new Rectangle(305,244,80,18);
+
+	private static final Rectangle lblStep4Position = new Rectangle(4,270,15,15);
+	private static final Rectangle lblFontPosition = new Rectangle(30,270,355,30);
+	private static final Rectangle cmbFontPosition = new Rectangle(30,304,170,18);
+
+
+	private void updateButtonsState() {
+		setBackButtonEnabled(true);
+		setNextButtonEnabled(false);
+		setFinishButtonEnabled(checkIsOkPanelData());
+	}
+
+
+
+	protected boolean checkIsOkPanelData() {
+		if (!((String)this.getCmbSize().getSelectedItem()).equals(ConfigureLabel.TEXT_FOR_DEFAULT_VALUE)) {
+			return (((String)this.getCmbSizeUnits().getSelectedItem()).trim().length() > 0);
+		}
+		return true;
+	}
+
+
+	private class EventsListener implements ItemListener
+	{
+
+		public void itemStateChanged(ItemEvent e) {
+			updateButtonsState();
+		}
+
+	}
+
+	private EventsListener eventsListener = new EventsListener();
+
+
+//	public ConfigureLabel(JWizardComponents arg0,FLyrAnnotation layer) {
+//		super(arg0);
+//		this.layer =layer;
+//		this.initialize();
+//	}
+
+	protected void initialize() {
+		this.setLayout(null);
+		this.setSize(new Dimension(358,263));
+		this.addLabels();
+
+		this.add(getCmbAngle(),null);
+		this.add(getCmbColor(),null);
+		this.add(getCmbSize(),null);
+		this.add(getCmbSizeUnits(),null);
+		this.add(getCmbFont(),null);
+
+		checkIsOkPanelData();
+	}
+
+
+	protected void addLabels() {
+		this.lblDescription = new JLabel();
+		this.lblStep1 = new JLabel();
+		this.lblAngle = new JLabel();
+		this.lblStep2 = new JLabel();
+		this.lblColor= new JLabel();
+		this.lblStep3 = new JLabel();
+		this.lblSize= new JLabel();
+		this.lblSizeUnits= new JLabel();
+		this.lblStep4 = new JLabel();
+		this.lblFont= new JLabel();
+
+		this.lblDescription.setText(PluginServices.getText(this,"descripcion_de_configuracion_capa_de_anotaciones"));
+		this.lblStep1.setText("1.");
+		this.lblAngle.setText(PluginServices.getText(this,"seleccione_el_campo_angulo_de_la_capa_de_anotaciones"));
+		this.lblStep2.setText("2.");
+		this.lblColor.setText(PluginServices.getText(this,"seleccione_el_campo_color_de_la_capa_de_anotaciones"));
+		this.lblStep3.setText("3.");
+		this.lblSize.setText(PluginServices.getText(this,"seleccione_el_campo_tamano_de_la_capa_de_anotaciones"));
+		this.lblSizeUnits.setText(PluginServices.getText(this,"en_unidades"));
+		this.lblStep4.setText("4.");
+		this.lblFont.setText(PluginServices.getText(this,"seleccione_el_campo_fuente_de_la_capa_de_anotaciones"));
+
+		//TODO: Posicionar
+		this.lblDescription.setBounds(lblDescriptionPosition);
+		this.lblStep1.setBounds(lblStep1Position);
+		this.lblAngle.setBounds(lblAnglePosition);
+		this.lblStep2.setBounds(lblStep2Position);
+		this.lblColor.setBounds(lblColorPosition);
+		this.lblStep3.setBounds(lblStep3Position);
+		this.lblSize.setBounds(lblSizePosition);
+		this.lblSizeUnits.setBounds(lblSizeUnitsPosition);
+		this.lblStep4.setBounds(lblStep4Position);
+		this.lblFont.setBounds(lblFontPosition);
+
+
+
+		this.add(lblDescription,null);
+		this.add(lblStep1,null);
+		this.add(lblAngle,null);
+		this.add(lblStep2,null);
+		this.add(lblColor,null);
+		this.add(lblStep3,null);
+		this.add(lblSize,null);
+		this.add(lblSizeUnits,null);
+		this.add(lblStep4,null);
+		this.add(lblFont,null);
+
+
+	}
+
+	private void fillFieldsNames(JComboBox cmb,int[] types) {
+		cmb.addItem(ConfigureLabel.TEXT_FOR_DEFAULT_VALUE);
+		Collection names;
+		if (types == null) {
+
+			String[] allNames = (String[])this.fieldsNames.get("ALL");
+//			if (allNames == null) {
+//				try {
+//					SelectableDataSource dataSource = this.layer.getRecordset();
+//
+//					allNames = dataSource.getFieldNames();
+//					this.fieldsNames.put("ALL",allNames);
+//
+//				} catch (ReadDriverException e) {
+//					e.printStackTrace();
+//				}
+//			}
+			for (int i=0; i < allNames.length; i++) {
+				cmb.addItem(allNames[i]);
+			}
+			return;
+		}
+		Integer typeKey;
+		for (int i=0; i < types.length; i++) {
+			typeKey = new Integer(types[i]);
+			if (!this.fieldsNames.containsKey(typeKey)){
+				names = this.getFieldsFromType(types[i]);
+				this.fieldsNames.put(typeKey,names);
+			}else{
+				names = (Collection)this.fieldsNames.get(typeKey);
+			}
+			if (names != null) {
+				Iterator name = names.iterator();
+				while (name.hasNext()){
+					cmb.addItem(name.next());
+				}
+			}
+
+		}
+	}
+	private Collection getFieldsFromType(int type){
+		ArrayList result = new ArrayList();
+//		try {
+//			SelectableDataSource dataSource = this.layer.getRecordset();
+//
+//			for (int i=0; i < dataSource.getFieldCount(); i++) {
+//				if (dataSource.getFieldType(i) == type){
+//					result.add(dataSource.getFieldName(i));
+//				}
+//			}
+//		} catch (ReadDriverException e) {
+//			e.printStackTrace();
+//		}
+		if (result.size() == 0){
+			return null;
+		}
+		return result;
+
+	}
+
+	private JComboBox getCmbAngle() {
+		if (this.cmbAngle == null) {
+			this.cmbAngle= new JComboBox();
+			this.cmbAngle.setEditable(false);
+			this.cmbAngle.setBounds(cmbAnglePosition);
+			this.fillFieldsNames(this.cmbAngle,new int[]{Types.INTEGER,Types.DOUBLE});
+			this.cmbAngle.addItemListener(this.eventsListener);
+		}
+		return this.cmbAngle;
+	}
+
+	public String getAngleFieldName(){
+		return (String)this.getCmbAngle().getSelectedItem();
+	}
+
+	private JComboBox getCmbColor() {
+		if (this.cmbColor == null) {
+			this.cmbColor= new JComboBox();
+			this.cmbColor.setEditable(false);
+			this.cmbColor.setBounds(cmbColorPosition);
+			this.fillFieldsNames(this.cmbColor,new int[]{Types.INTEGER});
+			this.cmbColor.addItemListener(this.eventsListener);
+		}
+		return this.cmbColor;
+	}
+
+	public String getColorFieldName(){
+		return (String)this.getCmbColor().getSelectedItem();
+	}
+
+
+	private JComboBox getCmbSize() {
+		if (this.cmbSize == null) {
+			this.cmbSize= new JComboBox();
+			this.cmbSize.setEditable(false);
+			this.cmbSize.setBounds(cmbSizePosition);
+			this.fillFieldsNames(this.cmbSize,new int[]{Types.INTEGER,Types.DOUBLE});
+			this.cmbSize.addItemListener(this.eventsListener);
+		}
+		return this.cmbSize;
+	}
+
+
+	public String getSizeFieldName(){
+		return (String)this.getCmbSize().getSelectedItem();
+	}
+
+	private JComboBox getCmbSizeUnits() {
+		if (this.cmbSizeUnits == null) {
+			this.cmbSizeUnits= new JComboBox();
+			this.cmbSizeUnits.setEditable(false);
+			this.cmbSizeUnits.setBounds(cmbSizeUnitsPosition);
+			this.cmbSizeUnits.addItem(PluginServices.getText(this,"pixels"));
+			this.cmbSizeUnits.addItem(PluginServices.getText(this,"metros"));
+			this.cmbSizeUnits.addItemListener(this.eventsListener);
+		}
+		return this.cmbSizeUnits;
+	}
+
+	public boolean sizeUnitsInPixels(){
+		return (this.getCmbSize().getSelectedIndex() == 0);
+	}
+
+
+	private JComboBox getCmbFont() {
+		if (this.cmbFont == null) {
+			this.cmbFont= new JComboBox();
+			this.cmbFont.setEditable(false);
+			this.cmbFont.setBounds(cmbFontPosition);
+			this.fillFieldsNames(this.cmbFont,new int[]{Types.VARCHAR,Types.LONGVARCHAR});
+			this.cmbFont.addItemListener(this.eventsListener);
+		}
+		return this.cmbFont;
+	}
+
+	public String getFontFieldName(){
+		return (String)this.getCmbFont().getSelectedItem();
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/ConfigureLabel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TextFieldEdit.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TextFieldEdit.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TextFieldEdit.java	(revision 42196)
@@ -0,0 +1,146 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels;
+
+import java.awt.Dimension;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.geom.Point2D;
+
+import javax.swing.BorderFactory;
+import javax.swing.FocusManager;
+import javax.swing.JComponent;
+import javax.swing.JPopupMenu;
+import javax.swing.JTextField;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+//TODO comentado para que compile
+public class TextFieldEdit extends JPopupMenu implements KeyListener {
+    private JTextField txt = new JTextField();
+//    private FLyrAnnotation lyr;
+    /**
+     * This is the default constructor
+     */
+//    public TextFieldEdit(FLyrAnnotation lyr) {
+//        super();
+//        this.lyr=lyr;
+//        initialize();
+//    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setSize(100, 20);
+        txt.setPreferredSize(new Dimension(100, 20));
+//        txt.addActionListener(new java.awt.event.ActionListener() {
+//        	public void actionPerformed(java.awt.event.ActionEvent e) {
+//        		 try {
+//        				VectorialEditableAdapter vea=(VectorialEditableAdapter)lyr.getSource();
+//        				int index=lyr.getInEdition();
+//        				IRowEdited row = vea.getRow(index); //.getAttribute(columnIndex);
+//        		        Value[] values = row.getAttributes();
+//        		        int columnText=lyr.getMapping().getColumnText();
+//        		        int type=vea.getRecordset().getFieldType(columnText);
+//        		        values[columnText] = ValueFactory.createValueByType(txt.getText(),type);
+//
+//        		        IRow newRow = null;
+//
+//        		        if (row.getLinkedRow() instanceof IFeature) {
+//        		            IGeometry geometry = ((DefaultFeature) row.getLinkedRow()).getGeometry();
+//        		            newRow = new DefaultFeature(geometry, values);
+//        		        } else {
+//        		            newRow = new DefaultRow(values);
+//        		        }
+//
+//
+//        					vea.modifyRow(index, newRow,"Editar valor de texto", EditionEvent.GRAPHIC);
+//        				} catch (ReadDriverException e1) {
+//        					e1.printStackTrace();
+//        				}  catch (ParseException e1) {
+//							e1.printStackTrace();
+//						} catch (NumberFormatException e1) {
+//							NotificationManager.addError("no_es_de_tipo_numerico",e1);
+//						} catch (ValidateRowException e1) {
+//							e1.printStackTrace();
+//						}
+//        				View view=(View)PluginServices.getMDIManager().getActiveWindow();
+//        				TextFieldEdit.this.show(false);
+//        				// view.getMapControl().drawMap(true);
+//        				lyr.setDirty(true);
+//        				view.getMapControl().rePaintDirtyLayers();
+//
+//        				PluginServices.getMainFrame().enableControls();
+//        	}
+//        });
+        this.add(txt);
+        this.setBorderPainted(false);
+        this.setBorder(BorderFactory.createEmptyBorder());
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param p DOCUMENT ME!
+     * @param component DOCUMENT ME!
+     */
+    public void show(Point2D p, JComponent component) {
+
+//    	VectorialEditableAdapter vea=(VectorialEditableAdapter)lyr.getSource();
+//		int index=lyr.getInEdition();
+//		Value value=null;
+//		try {
+//			int columnText=lyr.getMapping().getColumnText();
+//			value = vea.getRecordset().getFieldValue(index,columnText);
+//			txt.setText(value.toString());
+//		} catch (ReadDriverException e) {
+//			e.printStackTrace();
+//		}
+
+		this.show(component, (int)p.getX(), (int)p.getY()-20);
+        FocusManager fm = FocusManager.getCurrentManager();
+        fm.focusPreviousComponent(txt);
+    }
+
+	public void keyPressed(KeyEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void keyReleased(KeyEvent arg0) {
+		 FocusManager fm = FocusManager.getCurrentManager();
+	     fm.focusPreviousComponent(txt);
+	}
+
+	public void keyTyped(KeyEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TextFieldEdit.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/FPanelAbout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/FPanelAbout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/FPanelAbout.java	(revision 42196)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.gui.panels;
+
+import java.awt.BorderLayout;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.event.HyperlinkEvent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.extension.Version;
+import org.gvsig.utils.BrowserControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author FJP
+ *
+ * A Window with panels showing web pages. A developer
+ * can write a web page with information about his/her plugin
+ * and call addAboutUrl to add his/her about to gvSIG's about and
+ * others.
+ * 
+ * @deprecated see the AboutManager
+ */
+public class FPanelAbout extends JPanel implements IWindow {
+    private static final Logger logger = LoggerFactory
+    .getLogger(FPanelAbout.class);
+    
+	private JEditorPane jEditorPane = null;
+	private JScrollPane jScrollPane = null;
+	private JEditorPane jEditorPane1 = null;
+	private JPanel jPanel = null;
+	private JButton jButton = null;
+
+	private JLabel jLblVersion = null;
+	private JLabel jLblJavaVersion = null;
+    private JTabbedPane jTabbedPane = null;
+	/**
+	 * This is the default constructor
+	 * @throws FileNotFoundException
+	 */
+	public FPanelAbout(){
+		super();
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 * @throws FileNotFoundException
+	 */
+	private  void initialize(){
+		this.setLayout(new BorderLayout());
+		this.setSize(600, 450);
+		this.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);
+
+		this.add(getJPanel(), java.awt.BorderLayout.SOUTH);
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane(URL url) {
+		// if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setPreferredSize(new java.awt.Dimension(300,400));
+			jScrollPane.setViewportView(getJEditorPane(url));
+		// }
+		return jScrollPane;
+	}
+	/**
+	 * This method initializes jEditorPane1
+	 *
+	 * @return javax.swing.JEditorPane
+	 */
+		private JEditorPane getJEditorPane(URL aboutURL) {
+			// if (jEditorPane == null) {
+				jEditorPane = new JEditorPane();
+
+				jEditorPane.setEditable(false);
+				jEditorPane.setContentType("text/html");
+				jEditorPane.setPreferredSize(new java.awt.Dimension(300,200));
+
+				if (aboutURL != null) {
+				    try {
+				    	jEditorPane.setPage(aboutURL);
+				    	jEditorPane.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
+				    		public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent e) {
+				    			if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
+				    			{
+				    	 		      JEditorPane pane = (JEditorPane) e.getSource();
+				    	 		      System.out.println("hyperlinkUpdate()"); // TODO Auto-generated Event stub hyperlinkUpdate()
+				    	 		      BrowserControl.displayURL(e.getURL().toString());
+				    	 		      // if (e instanceof HTMLFrameHyperlinkEvent) {
+				    			}
+
+
+				    		}
+				    	});
+				    } catch (IOException e) {
+				        System.err.println("Attempted to read a bad URL: " + aboutURL);
+				    }
+				} else {
+				    System.err.println("Couldn't find file: about.html" + aboutURL.getPath());
+				}
+
+			// }
+			return jEditorPane;
+		}
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jLblVersion = new JLabel();
+			jLblJavaVersion = new JLabel();
+			jPanel = new JPanel();
+			jPanel.setLayout(null);
+			jPanel.setPreferredSize(new java.awt.Dimension(10,50));
+			jLblVersion.setBounds(10, 16, 205, 17);
+			jLblVersion.setText("Version "+Version.longFormat());
+			jLblJavaVersion.setBounds(415, 16, 150, 17);
+			jLblJavaVersion.setText("Java "+System.getProperties().get("java.version"));
+			jPanel.add(getJButton(), null);
+			jPanel.add(jLblVersion, null);
+			jPanel.add(jLblJavaVersion, null);
+		}
+		return jPanel;
+	}
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
+			jButton.setText(PluginServices.getText(this,"Cerrar"));
+			jButton.setBounds(266, 12, 94, 25);
+			jButton.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
+					if (PluginServices.getMainFrame() != null)
+					{
+						PluginServices.getMDIManager().closeWindow(FPanelAbout.this);
+					}
+					else
+					{
+						((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+					}
+
+				}
+			});
+		}
+		return jButton;
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_ViewInfo = new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
+		m_ViewInfo.setTitle(PluginServices.getText(this,"acerca_de"));
+
+		return m_ViewInfo;
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.mdiApp.ui.MDIManager.View#viewActivated()
+	 */
+	public void viewActivated() {
+		// TODO Auto-generated method stub
+
+	}
+    public void addAboutUrl(String pluginName, URL url)
+    {
+        getJTabbedPane().addTab(pluginName, getJScrollPane(url));
+        // this.add(getJScrollPane(url), java.awt.BorderLayout.CENTER);
+    }
+    /**
+     * This method initializes jTabbedPane
+     *
+     * @return javax.swing.JTabbedPane
+     */
+    private JTabbedPane getJTabbedPane() {
+    	if (jTabbedPane == null) {
+    		jTabbedPane = new JTabbedPane();
+    		jTabbedPane.setPreferredSize(new java.awt.Dimension(5,50));
+    	}
+    	return jTabbedPane;
+    }
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/FPanelAbout.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/MappingFieldsToAnotation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/MappingFieldsToAnotation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/MappingFieldsToAnotation.java	(revision 42196)
@@ -0,0 +1,419 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.panels;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.mapcontext.layers.MappingAnnotation;
+
+
+//TODO comentado para que compile
+public class MappingFieldsToAnotation extends JPanel implements IWindow{
+
+	private JComboBox cmbText = null;
+	private JComboBox cmbAngle = null;
+	private JLabel jLabel = null;
+	private JLabel jLabel1 = null;
+	private JLabel jLabel2 = null;
+	private JComboBox cmbColor = null;
+	private JLabel jLabel3 = null;
+	private JComboBox cmbHeight = null;
+	private JLabel jLabel4 = null;
+	private JComboBox cmbFont = null;
+	private JButton bOk = null;
+	private JButton bCancel = null;
+//	private SelectableDataSource sds=null;
+//	private FLyrAnnotation la;
+	private int[] mapText;
+	private int[] mapAngle;
+	private int[] mapColor;
+	private int[] mapHeight;
+	private int[] mapFont;
+	private JPanel jPanel = null;
+	private JLabel jLabel5 = null;
+	private JTextField txtName = null;
+	//private JCheckBox chbPixels = null;
+	private JRadioButton rbMapUnits = null;
+	private JRadioButton rbPixels = null;
+	private boolean isOk=false;
+	/**
+	 * This is the default constructor
+	 */
+//	public MappingFieldsToAnotation(FLyrAnnotation la) {
+//		super();
+//		this.la=la;
+//		try {
+//			this.sds=la.getRecordset();
+//			initialize();
+//		} catch (ReadDriverException e) {
+//			e.printStackTrace();
+//		}
+//
+//	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		jLabel4 = new JLabel();
+		jLabel4.setBounds(new java.awt.Rectangle(15,259,166,20));
+		jLabel4.setText("fuente");
+		jLabel3 = new JLabel();
+		jLabel3.setBounds(new java.awt.Rectangle(15,197,166,20));
+		jLabel3.setText("alto");
+		jLabel2 = new JLabel();
+		jLabel2.setBounds(new java.awt.Rectangle(15,135,166,20));
+		jLabel2.setText("color");
+		jLabel1 = new JLabel();
+		jLabel1.setBounds(new java.awt.Rectangle(15,73,166,20));
+		jLabel1.setText("angulo");
+		jLabel = new JLabel();
+		jLabel.setBounds(new java.awt.Rectangle(15,11,166,20));
+		jLabel.setText("texto");
+		this.setLayout(null);
+		this.setSize(544, 368);
+		this.add(getCmbText(), null);
+		this.add(getCmbAngle(), null);
+		this.add(jLabel, null);
+		this.add(jLabel1, null);
+		this.add(jLabel2, null);
+		this.add(getCmbColor(), null);
+		this.add(jLabel3, null);
+		this.add(getCmbHeight(), null);
+		this.add(jLabel4, null);
+		this.add(getCmbFont(), null);
+		this.add(getBOk(), null);
+		this.add(getBCancel(), null);
+		this.add(getJPanel(), null);
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
+		m_viewinfo.setTitle(PluginServices.getText(this,
+				"indexar_campos"));
+
+		return m_viewinfo;
+	}
+
+	/**
+	 * This method initializes cmbOrigin
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getCmbText() {
+		if (cmbText == null) {
+			cmbText = new JComboBox();
+//			try {
+//				mapText=new int[sds.getFieldCount()];
+//				int num=-1;
+//				for (int i = 0; i < sds.getFieldCount(); i++) {
+//					cmbText.addItem(sds.getFieldName(i));
+//					num++;
+//					mapText[i]=num;
+//				}
+//				//cmbText.addItem("- Defaulf -");
+//			} catch (ReadDriverException e) {
+//				e.printStackTrace();
+//			}
+			cmbText.setBounds(new java.awt.Rectangle(15,42,166,20));
+
+		}
+		return cmbText;
+	}
+
+	/**
+	 * This method initializes cmbEnd
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getCmbAngle() {
+		if (cmbAngle == null) {
+			cmbAngle = new JComboBox();
+//			try {
+//				mapAngle=new int[sds.getFieldCount()];
+//				int num=-1;
+//			for (int i = 0; i < sds.getFieldCount(); i++) {
+//				if (sds.getFieldType(i) == Types.DOUBLE){
+//					cmbAngle.addItem(sds.getFieldName(i));
+//					num++;
+//					mapAngle[i]=num;
+//				}
+//			}
+//			cmbAngle.addItem("- Default -");
+//			cmbAngle.setSelectedItem("- Default -");
+//			} catch (ReadDriverException e) {
+//				e.printStackTrace();
+//			}
+			cmbAngle.setBounds(new java.awt.Rectangle(15,104,166,20));
+		}
+		return cmbAngle;
+	}
+
+	/**
+	 * This method initializes cmbColor
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getCmbColor() {
+		if (cmbColor == null) {
+			cmbColor = new JComboBox();
+			cmbColor.setBounds(new java.awt.Rectangle(15,166,166,20));
+//			try {
+//				mapColor=new int[sds.getFieldCount()];
+//				int num=-1;
+//				for (int i = 0; i < sds.getFieldCount(); i++) {
+//					if (sds.getFieldType(i) == Types.DOUBLE){
+//						cmbColor.addItem(sds.getFieldName(i));
+//						num++;
+//						mapColor[i]=num;
+//					}
+//				}
+//				cmbColor.addItem("- Default -");
+//				cmbColor.setSelectedItem("- Default -");
+//			} catch (ReadDriverException e) {
+//				e.printStackTrace();
+//			}
+		}
+		return cmbColor;
+	}
+
+	/**
+	 * This method initializes cmbHeight
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getCmbHeight() {
+		if (cmbHeight == null) {
+			cmbHeight = new JComboBox();
+//			try {
+//				mapHeight=new int[sds.getFieldCount()];
+//				int num=-1;
+//				for (int i = 0; i < sds.getFieldCount(); i++) {
+//					if (sds.getFieldType(i) == Types.DOUBLE){
+//						cmbHeight.addItem(sds.getFieldName(i));
+//						num++;
+//						mapHeight[i]=num;
+//					}
+//				}
+//				cmbHeight.addItem("- Default -");
+//				cmbHeight.setSelectedItem("- Default -");
+//			} catch (ReadDriverException e) {
+//				e.printStackTrace();
+//			}
+			cmbHeight.setBounds(new java.awt.Rectangle(15,228,166,20));
+		}
+		return cmbHeight;
+	}
+
+	/**
+	 * This method initializes cmbFont
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getCmbFont() {
+		if (cmbFont == null) {
+			cmbFont = new JComboBox();
+//			try {
+//				mapFont=new int[sds.getFieldCount()];
+//				int num=-1;
+//				for (int i = 0; i < sds.getFieldCount(); i++) {
+//					if (sds.getFieldType(i) == Types.VARCHAR){
+//						cmbFont.addItem(sds.getFieldName(i));
+//						num++;
+//						mapFont[i]=num;
+//					}
+//				}
+//				cmbFont.addItem("- Default -");
+//				cmbFont.setSelectedItem("- Default -");
+//			} catch (ReadDriverException e) {
+//				e.printStackTrace();
+//			}
+			cmbFont.setBounds(new java.awt.Rectangle(15,290,166,20));
+		}
+		return cmbFont;
+	}
+
+	/**
+	 * This method initializes bOk
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBOk() {
+		if (bOk == null) {
+			bOk = new JButton();
+			bOk.setBounds(new java.awt.Rectangle(119,326,92,24));
+			bOk.setText("Aceptar");
+			bOk.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					MappingAnnotation mapping=new MappingAnnotation();
+					if (getCmbText().getSelectedItem().equals("")) {
+						mapping.setColumnText(-1);
+					} else {
+						mapping.setColumnText(mapText[getCmbText().getSelectedIndex()]);
+					}
+					if (!getCmbAngle().getSelectedItem().equals("- Default -")) {
+						mapping.setColumnRotate(mapAngle[getCmbAngle().getSelectedIndex()]);
+					}
+					if (!getCmbColor().getSelectedItem().equals("- Default -")) {
+						mapping.setColumnColor(mapColor[getCmbColor().getSelectedIndex()]);
+					}
+					if (!getCmbHeight().getSelectedItem().equals("- Default -")) {
+						mapping.setColumnHeight(mapHeight[getCmbHeight().getSelectedIndex()]);
+					}
+					if (!getCmbFont().getSelectedItem().equals("- Default -")) {
+						mapping.setColumnTypeFont(mapFont[getCmbFont().getSelectedIndex()]);
+					}
+					//Falta el estilo, si es necesario.
+//					la.setInPixels(rbPixels.isSelected());
+//					la.setMapping(mapping);
+//					la.setName(getTxtName().getText());
+					isOk=true;
+					PluginServices.getMDIManager().closeWindow(MappingFieldsToAnotation.this);
+				}
+			});
+		}
+		return bOk;
+	}
+
+	/**
+	 * This method initializes bCancel
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBCancel() {
+		if (bCancel == null) {
+			bCancel = new JButton();
+			bCancel.setBounds(new java.awt.Rectangle(330,325,93,25));
+			bCancel.setText("cancelar");
+			bCancel.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					isOk=false;
+					PluginServices.getMDIManager().closeWindow(MappingFieldsToAnotation.this);
+				}
+			});
+		}
+		return bCancel;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jLabel5 = new JLabel();
+			jLabel5.setBounds(new java.awt.Rectangle(15,10,228,22));
+			jLabel5.setText("nombre");
+			jPanel = new JPanel();
+			jPanel.setLayout(null);
+			jPanel.setBounds(new java.awt.Rectangle(234,14,251,141));
+			jPanel.add(jLabel5, null);
+			jPanel.add(getTxtName(), null);
+			//jPanel.add(getChbPixels(), null);
+			jPanel.add(getRbMapUnits(), null);
+			jPanel.add(getRbPixels(), null);
+			ButtonGroup bg=new ButtonGroup();
+			bg.add(getRbMapUnits());
+			bg.add(getRbPixels());
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes txtName
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtName() {
+		if (txtName == null) {
+			txtName = new JTextField();
+			//txtName.setText(la.get.getName());
+			txtName.setBounds(new java.awt.Rectangle(15,42,227,22));
+		}
+		return txtName;
+	}
+
+	/**
+	 * This method initializes chbPixels
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	/*private JCheckBox getChbPixels() {
+		if (chbPixels == null) {
+			chbPixels = new JCheckBox();
+			chbPixels.setBounds(new java.awt.Rectangle(15,138,226,25));
+			chbPixels.setText("pixels");
+		}
+		return chbPixels;
+	}
+*/
+	/**
+	 * This method initializes rbMapUnits
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getRbMapUnits() {
+		if (rbMapUnits == null) {
+			rbMapUnits = new JRadioButton();
+			rbMapUnits.setBounds(new java.awt.Rectangle(15,74,167,22));
+			rbMapUnits.setText("unidades_mapa");
+		}
+		return rbMapUnits;
+	}
+
+	/**
+	 * This method initializes rbPixels
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getRbPixels() {
+		if (rbPixels == null) {
+			rbPixels = new JRadioButton();
+			rbPixels.setBounds(new java.awt.Rectangle(15,106,167,22));
+			rbPixels.setText("pixels");
+			rbPixels.setSelected(true);
+		}
+		return rbPixels;
+	}
+
+	public boolean isOk() {
+		return isOk;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}  //  @jve:decl-index=0:visual-constraint="-150,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/MappingFieldsToAnotation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/MySelectionByThemeListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/MySelectionByThemeListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/MySelectionByThemeListener.java	(revision 42196)
@@ -0,0 +1,317 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.selectionByTheme;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.ContainsGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.CrossesGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.DisjointGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.EqualsGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.IntersectsGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.OverlapsGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.TouchesGeometryEvaluator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.WithinGeometryEvaluator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+//TODO comentado para que compile
+public class MySelectionByThemeListener implements SelectionByThemeListener {
+	/**
+	 * @see org.gvsig.app.gui.selectionByTheme.SelectionByThemeListener#newSet(int,
+	 *      int, int)
+	 */
+	public void newSet(FLayer[] toSelect, FLayer selectionLayer, int action) {
+		long t1 = System.currentTimeMillis();
+
+		if (selectionLayer instanceof FLyrVect) {
+			try {
+				FeatureSelection selection=(FeatureSelection)((FLyrVect)selectionLayer).getFeatureStore().getSelection();
+				SelectByTheme filter=new SelectByTheme(selection,selectionLayer.getMapContext().getProjection(),selection.getDefaultFeatureType().getDefaultGeometryAttributeName(), action);
+
+				for (int i = 0; i < toSelect.length; i++) {
+					if (toSelect[i] instanceof FLyrVect) {
+//						if (!selectionLayer.getFullEnvelope().intersects(toSelect[i].getFullEnvelope())){
+//							continue;
+//						}
+						FeatureStore storeToQuery = ((FLyrVect) toSelect[i]).getFeatureStore();
+						FeatureQuery fQuery = storeToQuery
+								.createFeatureQuery();
+						filter.setData(storeToQuery.getDefaultFeatureType(),storeToQuery.getDefaultFeatureType().getDefaultGeometryAttributeName(),null);
+
+						fQuery.setFilter(filter);
+						FeatureSet featureSet = null;
+						try {
+							featureSet = storeToQuery.getFeatureSet(fQuery);
+							((FeatureSelection) storeToQuery.getSelection())
+									.deselectAll();
+							storeToQuery.setSelection(featureSet);
+						} finally {
+							if (featureSet != null) {
+								featureSet.dispose();
+							}
+						}
+					}
+				}
+			} catch (ReadException e) {
+				NotificationManager.addError("error_selection_by_theme", e);
+			} catch (DataException e) {
+				NotificationManager.addError("error_selection_by_theme", e);
+			}
+
+		}
+		long t2 = System.currentTimeMillis();
+		System.out
+				.println("Tiempo de consulta: " + (t2 - t1) + " milisegundos");
+		// doSelection(toSelect, selectionLayer, action, false);
+	}
+
+	/**
+	 * @see org.gvsig.app.gui.selectionByTheme.SelectionByThemeListener#addToSet(int,
+	 *      int, int)
+	 */
+	public void addToSet(FLayer[] toSelect, FLayer selectionLayer, int action) {
+		long t1 = System.currentTimeMillis();
+
+		if (selectionLayer instanceof FLyrVect) {
+			try {
+				FeatureSelection selection=(FeatureSelection)((FLyrVect)selectionLayer).getFeatureStore().getSelection();
+				SelectByTheme filter=new SelectByTheme(selection,selectionLayer.getMapContext().getProjection(),selection.getDefaultFeatureType().getDefaultGeometryAttributeName(), action);
+
+				for (int i = 0; i < toSelect.length; i++) {
+					if (toSelect[i] instanceof FLyrVect) {
+						if (!selectionLayer.getFullEnvelope().intersects(toSelect[i].getFullEnvelope())){
+							continue;
+						}
+						FeatureStore storeToQuery = ((FLyrVect) toSelect[i]).getFeatureStore();
+						FeatureQuery fQuery = storeToQuery
+								.createFeatureQuery();
+						filter.setData(storeToQuery.getDefaultFeatureType(),storeToQuery.getDefaultFeatureType().getDefaultGeometryAttributeName(),null);
+
+						fQuery.setFilter(filter);
+						FeatureSet newFeatureSet = null;
+						FeatureSelection previousFeatureSet = null;
+						try {
+							newFeatureSet = storeToQuery.getFeatureSet(fQuery);
+							previousFeatureSet= storeToQuery.getFeatureSelection();
+							previousFeatureSet.select(newFeatureSet);
+							storeToQuery.setSelection(previousFeatureSet);
+						} finally {
+							if (newFeatureSet != null) {
+								newFeatureSet.dispose();
+							}
+							if (previousFeatureSet != null) {
+								previousFeatureSet.dispose();
+							}
+						}
+					}
+				}
+			} catch (ReadException e) {
+				NotificationManager.addError("error_selection_by_theme", e);
+			} catch (DataException e) {
+				NotificationManager.addError("error_selection_by_theme", e);
+			}
+
+		}
+		long t2 = System.currentTimeMillis();
+		System.out
+				.println("Tiempo de consulta: " + (t2 - t1) + " milisegundos");
+	}
+
+	/**
+	 * @see org.gvsig.app.gui.selectionByTheme.SelectionByThemeListener#fromSet(int,
+	 *      int, int)
+	 */
+	public void fromSet(FLayer[] toSelect, FLayer selectionLayer, int action) {
+		long t1 = System.currentTimeMillis();
+		if (selectionLayer instanceof FLyrVect) {
+			try {
+				FeatureSelection selection=(FeatureSelection)((FLyrVect)selectionLayer).getFeatureStore().getSelection();
+				SelectByTheme filter=new SelectByTheme(selection,selectionLayer.getMapContext().getProjection(),selection.getDefaultFeatureType().getDefaultGeometryAttributeName(), action);
+
+				for (int i = 0; i < toSelect.length; i++) {
+					if (toSelect[i] instanceof FLyrVect) {
+						if (!selectionLayer.getFullEnvelope().intersects(toSelect[i].getFullEnvelope())){
+							continue;
+						}
+						FeatureStore storeToQuery = ((FLyrVect) toSelect[i]).getFeatureStore();
+						FeatureQuery fQuery = storeToQuery
+								.createFeatureQuery();
+						filter.setData(storeToQuery.getDefaultFeatureType(),storeToQuery.getDefaultFeatureType().getDefaultGeometryAttributeName(),(FeatureSelection)storeToQuery.getSelection());
+
+						fQuery.setFilter(filter);
+						FeatureSet featureSet = null;
+						try {
+							featureSet = storeToQuery.getFeatureSet(fQuery);
+							((FeatureSelection) storeToQuery.getSelection())
+									.deselectAll();
+							storeToQuery.setSelection(featureSet);
+						} finally {
+							if (featureSet != null) {
+								featureSet.dispose();
+							}
+
+						}
+					}
+				}
+			} catch (ReadException e) {
+				NotificationManager.addError("error_selection_by_theme", e);
+			} catch (DataException e) {
+				NotificationManager.addError("error_selection_by_theme", e);
+			}
+
+		}
+		long t2 = System.currentTimeMillis();
+		System.out
+				.println("Tiempo de consulta: " + (t2 - t1) + " milisegundos");
+	}
+	class SelectByTheme implements Evaluator{
+		private FeatureSelection selection=null;
+		private IProjection projection;
+		private FeatureType featureType;
+		private String geomName;
+		private EvaluatorFieldsInfo info;
+		private String nameSelectedGeom;
+		private FeatureSelection featureSelection;
+		private int action;
+		private int index;
+
+		public SelectByTheme(FeatureSelection selection, IProjection projection,String nameSelectedGeom, int action){
+			this.selection=selection;
+
+			this.projection=projection;
+			this.nameSelectedGeom=nameSelectedGeom;
+			this.action=action;
+			this.index=selection.getDefaultFeatureType().getIndex(nameSelectedGeom);
+		}
+		public void setData(FeatureType featureType, String geomName, FeatureSelection featureSelection){
+			this.featureType=featureType;
+			this.geomName=geomName;
+			this.featureSelection=featureSelection;
+			this.info=new EvaluatorFieldsInfo();
+			this.info.addFieldValue(geomName);
+		}
+
+		public Object evaluate(EvaluatorData data) throws EvaluatorException {
+			if (featureSelection!=null && !featureSelection.isSelected(((Feature)data.getContextValue("feature")))){
+				return new Boolean(false);
+			}
+			DisposableIterator features = null;
+			try {
+				features = selection.iterator();
+
+				while (features.hasNext()) {
+					Feature feature = (Feature) features.next();
+					Geometry geometry = feature.getGeometry(index);
+					Evaluator eval = null;
+					switch (action) {
+					case SelectionByTheme.INTERSECTS:
+						eval = new IntersectsGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+					case SelectionByTheme.CONTAINS:
+						eval = new ContainsGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+					case SelectionByTheme.CROSSES:
+						eval = new CrossesGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+					case SelectionByTheme.DISJOINT:
+						eval = new DisjointGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+					case SelectionByTheme.EQUALS:
+						eval = new EqualsGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+					case SelectionByTheme.OVERLAPS:
+						eval = new OverlapsGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+					case SelectionByTheme.TOUCHES:
+						eval = new TouchesGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+					case SelectionByTheme.WITHIN:
+						eval = new WithinGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+						break;
+
+					default:
+						eval = new IntersectsGeometryEvaluator(geometry,
+								projection, featureType, geomName);
+					break;
+					}
+
+					Boolean evaluate = (Boolean) eval.evaluate(data);
+					if ((evaluate).booleanValue()) {
+						return evaluate;
+					}
+				}
+			} catch (DataException e) {
+				NotificationManager.addError("error_selection_by_theme", e);
+			} finally {
+				DisposeUtils.dispose(features);
+			}
+			return new Boolean(false);
+		}
+
+		public String getName() {
+			return "select by theme";
+		}
+
+		public String getSQL() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+		public String getDescription() {
+			return getName();
+		}
+		public EvaluatorFieldsInfo getFieldsInfo() {
+			return info;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/MySelectionByThemeListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByTheme.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByTheme.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByTheme.java	(revision 42196)
@@ -0,0 +1,345 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.selectionByTheme;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.util.ArrayList;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.utils.swing.JComboBox;
+
+
+
+public class SelectionByTheme extends JPanel implements IWindow {
+	public static final int EQUALS = 0;
+	public static final int DISJOINT = 1;
+	public static final int INTERSECTS = 2;
+	public static final int TOUCHES = 3;
+	public static final int CROSSES = 4;
+	public static final int WITHIN = 5;
+	public static final int CONTAINS = 6;
+	public static final int OVERLAPS = 7;
+	public final String[] textosAcciones = new String[] {
+    PluginServices.getText(this, "Sean_iguales_a"), //"sean iguales a",
+    PluginServices.getText(this, "Sean_disjuntos_a"), //"sean disjuntos a",
+    PluginServices.getText(this, "Intersecten_con"), //"intersecten con",
+    PluginServices.getText(this, "Toquen"), //"toquen",
+    PluginServices.getText(this, "Crucen_con"), //"crucen con",
+    PluginServices.getText(this, "Contengan"), //"contengan",
+    PluginServices.getText(this, "Esten_contenidos_en"), //"est�n contenidos en",
+    PluginServices.getText(this, "Se_superponen_a"), //"se superponen a"
+	};
+
+	private SelectionByThemeModel dataSource = null;
+
+	private ArrayList listeners = new ArrayList();
+
+	private JPanel jPanel = null;
+	private JPanel jPanel1 = null;
+	private JLabel jLabel = null;
+	private JComboBox cmbAction = null;
+	private JLabel jLabel1 = null;
+	private JComboBox cmbCapas = null;
+	private JButton btnNew = null;
+	private JButton btnAdd = null;
+	private JButton btnFrom = null;
+	private JButton btnCancel = null;
+	/**
+	 * This is the default constructor
+	 */
+	public SelectionByTheme() {
+		super();
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout(10, 10));
+		this.add(new JLabel(), BorderLayout.NORTH);
+		this.add(new JLabel(), BorderLayout.WEST);
+		this.add(getJPanel(), BorderLayout.CENTER);
+		this.add(getJPanel1(), BorderLayout.EAST);
+		this.add(new JLabel(), BorderLayout.SOUTH);
+		this.setSize(540, 95);
+	}
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return JPanel
+	 */
+	private JPanel getJPanel() {
+		if(jPanel == null) {
+			jPanel = new JPanel();
+			java.awt.FlowLayout layFlowLayout1 = new java.awt.FlowLayout();
+			layFlowLayout1.setVgap(30);
+			jPanel.setLayout(new GridLayout(4, 2, 5, 5));
+			jPanel.add(getJLabel(), null);
+			jPanel.add(getCmbAction(), null);
+			jPanel.add(getJLabel1(), null);
+			jPanel.add(getCmbCapas(), null);
+
+		}
+		return jPanel;
+	}
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return JPanel
+	 */
+	private JPanel getJPanel1() {
+		if(jPanel1 == null) {
+			jPanel1 = new JPanel();
+			jPanel1.setLayout(new GridLayout(4, 1, 5, 5));
+			jPanel1.add(getBtnNew(), null);
+			jPanel1.add(getBtnAdd(), null);
+			jPanel1.add(getBtnFrom(), null);
+			jPanel1.add(getBtnCancel(), null);
+			jPanel1.setPreferredSize(new java.awt.Dimension(200,220));
+		}
+		return jPanel1;
+	}
+	/**
+	 * This method initializes jLabel
+	 *
+	 * @return JLabel
+	 */
+	private JLabel getJLabel() {
+		if(jLabel == null) {
+			jLabel = new JLabel();
+			jLabel.setText(PluginServices.getText(this, "Seleccionar_de_las_capas_activas_los_elementos_que") + "... ");
+		}
+		return jLabel;
+	}
+	/**
+	 * This method initializes cmbAction
+	 *
+	 * @return JComboBox
+	 */
+	private JComboBox getCmbAction() {
+		if(cmbAction == null) {
+			cmbAction = new JComboBox();
+			cmbAction.setPreferredSize(new java.awt.Dimension(200,20));
+			DefaultComboBoxModel model = new DefaultComboBoxModel(textosAcciones);
+			cmbAction.setModel(model);
+		}
+		return cmbAction;
+	}
+	/**
+	 * This method initializes jLabel1
+	 *
+	 * @return JLabel
+	 */
+	private JLabel getJLabel1() {
+		if(jLabel1 == null) {
+			jLabel1 = new JLabel();
+			jLabel1.setText(PluginServices.getText(this, "Elementos_seleccionados_de_la_capa"));
+		}
+		return jLabel1;
+	}
+	/**
+	 * This method initializes cmbCapas
+	 *
+	 * @return JComboBox
+	 */
+	private JComboBox getCmbCapas() {
+		if(cmbCapas == null) {
+			cmbCapas = new JComboBox();
+			cmbCapas.setPreferredSize(new java.awt.Dimension(200,20));
+		}
+		return cmbCapas;
+	}
+	/**
+	 * This method initializes btnNew
+	 *
+	 * @return JButton
+	 */
+	private JButton getBtnNew() {
+		if(btnNew == null) {
+			btnNew = new JButton();
+			btnNew.setText(PluginServices.getText(this, "Nuevo_conjunto"));
+			btnNew.setMargin(new java.awt.Insets(2,2,2,2));
+			btnNew.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					callNewListeners(cmbCapas.getSelectedIndex(), cmbAction.getSelectedIndex());
+				}
+			});
+		}
+		return btnNew;
+	}
+	/**
+	 * This method initializes btnAdd
+	 *
+	 * @return JButton
+	 */
+	private JButton getBtnAdd() {
+		if(btnAdd == null) {
+			btnAdd = new JButton();
+			btnAdd.setText(PluginServices.getText(this, "Anadir_al_conjunto"));
+			btnAdd.setMargin(new java.awt.Insets(2,2,2,2));
+			btnAdd.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					callAddToListeners(cmbCapas.getSelectedIndex(), cmbAction.getSelectedIndex());
+				}
+			});
+		}
+		return btnAdd;
+	}
+	/**
+	 * This method initializes btnFrom
+	 *
+	 * @return JButton
+	 */
+	private JButton getBtnFrom() {
+		if(btnFrom == null) {
+			btnFrom = new JButton();
+			btnFrom.setText(PluginServices.getText(this, "Seleccionar_del_conjunto"));
+			btnFrom.setMargin(new java.awt.Insets(2,2,2,2));
+			btnFrom.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					callFromListeners(cmbCapas.getSelectedIndex(), cmbAction.getSelectedIndex());
+				}
+			});
+		}
+		return btnFrom;
+	}
+	/**
+	 * This method initializes btnCancel
+	 *
+	 * @return JButton
+	 */
+	private JButton getBtnCancel() {
+		if(btnCancel == null) {
+			btnCancel = new JButton();
+			btnCancel.setText(PluginServices.getText(this, "Cancel"));
+			btnCancel.setMargin(new java.awt.Insets(2,2,2,2));
+			btnCancel.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					PluginServices.getMDIManager().closeWindow(SelectionByTheme.this);
+				}
+			});
+		}
+		return btnCancel;
+	}
+
+	/**
+	 * @return
+	 */
+	public SelectionByThemeModel getModel() {
+		return dataSource;
+	}
+
+	/**
+	 * @param source
+	 */
+	public void setModel(SelectionByThemeModel source) {
+		dataSource = source;
+		String[] nameLayers = new String[dataSource.getLayers().getLayersCount()];
+		for (int i=0; i < nameLayers.length; i++) {
+			nameLayers[i] = dataSource.getLayers().getLayer(i).getName();
+		}
+		DefaultComboBoxModel model =
+			new DefaultComboBoxModel(nameLayers);
+		cmbCapas.setModel(model);
+	}
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo vi = new WindowInfo(WindowInfo.MODALDIALOG);
+		vi.setWidth(this.getWidth()+8);
+		vi.setHeight(this.getHeight());
+		vi.setTitle(PluginServices.getText(this, "Seleccion_por_capa"));
+		return vi;
+	}
+
+	private void callNewListeners(int selection, int actionCode){
+		for (int i = 0; i < listeners.size();
+				i++) {
+			SelectionByThemeListener l = (SelectionByThemeListener) listeners.get(i);
+			l.newSet(dataSource.getLayers().getActives(), dataSource.getLayers().getLayer(selection), actionCode);
+		}
+
+	}
+
+	private void callAddToListeners(int selection, int actionCode){
+		for (int i = 0; i < listeners.size();
+				i++) {
+			SelectionByThemeListener l = (SelectionByThemeListener) listeners.get(i);
+			l.addToSet(dataSource.getLayers().getActives(), dataSource.getLayers().getLayer(selection), actionCode);
+		}
+
+	}
+
+	private void callFromListeners(int selection, int actionCode){
+		for (int i = 0; i < listeners.size();
+				i++) {
+			SelectionByThemeListener l = (SelectionByThemeListener) listeners.get(i);
+			l.fromSet(dataSource.getLayers().getActives(), dataSource.getLayers().getLayer(selection), actionCode);
+		}
+
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param arg0
+	 *
+	 * @return
+	 */
+	public boolean addSelectionListener(SelectionByThemeListener arg0) {
+		return listeners.add(arg0);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param arg0
+	 *
+	 * @return
+	 */
+	public boolean removeSelectionListener(SelectionByThemeListener arg0) {
+		return listeners.remove(arg0);
+	}
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#windowActivated()
+	 */
+	public void viewActivated() {
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}  //  @jve:visual-info  decl-index=0 visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByTheme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeModel.java	(revision 42196)
@@ -0,0 +1,31 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.selectionByTheme;
+
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+
+
+public interface SelectionByThemeModel {
+	public FLayers getLayers();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/DefaultSelectionByThemeModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/DefaultSelectionByThemeModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/DefaultSelectionByThemeModel.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.selectionByTheme;
+
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+
+public class DefaultSelectionByThemeModel implements SelectionByThemeModel {
+
+    public FLayers getLayers() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        ViewDocument document = (ViewDocument) application.getActiveDocument(ViewDocument.class);
+        if (document == null) {
+            return null;
+        }
+        return document.getMapContext().getLayers();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/DefaultSelectionByThemeModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeListener.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.selectionByTheme;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+public interface SelectionByThemeListener {
+	public void newSet(FLayer[] toSelect, FLayer selectionLayer, int action);
+	public void addToSet(FLayer[] toSelect, FLayer selectionLayer, int action);
+	public void fromSet(FLayer[] toSelect, FLayer selectionLayer, int action);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListener.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.wizards;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ */
+public interface WizardListener {
+
+	/**
+	 * Invocado cuando el wizard puede ser finalizado porque se
+	 * ha rellenado toda la informaci�n necesaria
+	 */
+	public void wizardStateChanged(boolean finishable);
+	
+	/**
+	 * Si se produce alg�n error
+	 *
+	 * @param e Excepci�n que se ha producido
+	 */
+	public void error(Exception e);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerInfo.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.wizards;
+
+import java.util.ArrayList;
+
+
+//	Nodo[] nodos;
+public class LayerInfo {
+    public String text;
+    public String name;
+    public boolean queryable;
+    private ArrayList srs = new ArrayList();
+    
+    public ArrayList hijos = new ArrayList();
+    public LayerInfo padre;
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param srs DOCUMENT ME!
+     */
+    public void addSRS(String srs) {
+    	String[] srsArray = srs.split(" ");
+    	for (int i = 0; i < srsArray.length; i++){
+			this.srs.add(srsArray[i]);
+    	}
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public ArrayList getSRSs() {
+		ArrayList ret = new ArrayList();
+		ret.addAll(srs);
+
+        if (padre != null) {
+            ret.addAll(padre.getSRSs());
+        }
+
+        return ret;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public String toString() {
+        return text;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object obj) {
+    	try{
+	        LayerInfo objeto = (LayerInfo) obj;
+			return this.name.equals(objeto.name);
+		}catch(ClassCastException e){
+			e.printStackTrace();
+			return false;
+		}catch (NullPointerException e) {
+			return false;
+		}
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerListModel.java	(revision 42196)
@@ -0,0 +1,127 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.wizards;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.swing.AbstractListModel;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class LayerListModel extends AbstractListModel {
+    private ArrayList nodos = new ArrayList();
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param elemento DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public boolean addElement(LayerInfo elemento) {
+        if (elemento == null) {
+            return false;
+        }
+
+        for (int i = 0; i < nodos.size(); i++) {
+            if (((LayerInfo) nodos.get(i)).equals(elemento)) {
+                return false;
+            }
+        }
+
+        nodos.add(elemento);
+
+        fireContentsChanged(this, nodos.size() - 1, nodos.size() - 1);
+
+        return true;
+    }
+
+	public void clear(){
+		nodos.clear();
+		fireContentsChanged(this, 0, 0);
+	}
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param index DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public LayerInfo delElement(int index) {
+        LayerInfo ret = (LayerInfo) nodos.remove(index);
+        this.fireContentsChanged(this, index, index);
+
+        return ret;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param c DOCUMENT ME!
+     */
+    public void delElements(Collection c) {
+        nodos.removeAll(c);
+        this.fireContentsChanged(this, 0, nodos.size());
+    }
+
+    /**
+     * @see javax.swing.ListModel#getSize()
+     */
+    public int getSize() {
+        return nodos.size();
+    }
+
+    /**
+     * @see javax.swing.ListModel#getElementAt(int)
+     */
+    public Object getElementAt(int index) {
+        return ((LayerInfo) nodos.get(index)).text;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public LayerInfo[] getElements() {
+        return (LayerInfo[]) nodos.toArray(new LayerInfo[0]);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param index DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public LayerInfo getLayerInfo(int index) {
+        return (LayerInfo) nodos.get(index);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardData.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardData.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardData.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.wizards;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class WizardData {
+    private String title;
+    private String Abstract;
+    private LayerInfo layer;
+    private String[] formats;
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return
+     */
+    public String getAbstract() {
+        return Abstract;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return
+     */
+    public String[] getFormats() {
+        return formats;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return
+     */
+    public LayerInfo getLayer() {
+        return layer;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param string
+     */
+    public void setAbstract(String string) {
+        Abstract = string;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param strings
+     */
+    public void setFormats(String[] strings) {
+        formats = strings;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param info
+     */
+    public void setLayer(LayerInfo info) {
+        layer = info;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param string
+     */
+    public void setTitle(String string) {
+        title = string;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardData.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardDataSource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardDataSource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardDataSource.java	(revision 42196)
@@ -0,0 +1,47 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.gui.wizards;
+
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+import java.net.URL;
+
+import org.exolab.castor.xml.ValidationException;
+import org.gvsig.fmap.mapcontext.exceptions.UnsupportedVersionLayerException;
+
+
+/**
+ * @author fernando
+ *
+ * To change the template for this generated type comment go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+public interface WizardDataSource {
+	public WizardData detalles(URL host)throws IllegalStateException, ValidationException, 
+	UnsupportedVersionLayerException, IOException ;
+	
+	public Rectangle2D getBoundingBox(String[] layerName, String srs);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardDataSource.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListenerSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListenerSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListenerSupport.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.wizards;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class WizardListenerSupport {
+    private ArrayList listeners = new ArrayList();
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param listener DOCUMENT ME!
+     */
+    public void addWizardListener(WizardListener listener) {
+        listeners.add(listener);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param listener DOCUMENT ME!
+     */
+    public void removeWizardListener(WizardListener listener) {
+        listeners.remove(listener);
+    }
+
+	/**
+	 * DOCUMENT ME!
+	 * @param finishable TODO
+	 */
+	public void callStateChanged(boolean finishable) {
+		Iterator i = listeners.iterator();
+
+		while (i.hasNext()) {
+			((WizardListener) i.next()).wizardStateChanged(finishable);
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	public void callError(Exception descripcion) {
+		Iterator i = listeners.iterator();
+
+		while (i.hasNext()) {
+			((WizardListener) i.next()).error(descripcion);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListenerSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/FormatListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/FormatListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/FormatListModel.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui.wizards;
+
+import javax.swing.AbstractListModel;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class FormatListModel extends AbstractListModel {
+    String[] formatos;
+
+    /**
+     * Creates a new FormatListModel object.
+     *
+     * @param f DOCUMENT ME!
+     */
+    public FormatListModel(String[] f) {
+        formatos = f;
+    }
+
+    /**
+     * @see javax.swing.ListModel#getSize()
+     */
+    public int getSize() {
+        return formatos.length;
+    }
+
+    /**
+     * @see javax.swing.ListModel#getElementAt(int)
+     */
+    public Object getElementAt(int index) {
+        return formatos[index];
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/FormatListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/MessagePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/MessagePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/MessagePanel.java	(revision 42196)
@@ -0,0 +1,185 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.UnknownHostException;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextPane;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.service.ServiceException;
+
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MessagePanel extends JPanel {
+
+    private static Logger logger = LoggerFactory.getLogger(MessagePanel.class);
+
+    private static final long serialVersionUID = 2579894035021915221L;
+
+    private JButton accept = null;
+    private JTextPane text = null;
+
+    public static void showMessage(String title,
+            String header, String html) {
+        JPanel panel = new MessagePanel(header, html, null);
+        WindowManager wm = ToolsSwingLocator.getWindowManager();
+        wm.showWindow(panel, title, WindowManager.MODE.DIALOG);
+    }
+
+    public static void showMessage(String title,
+            String header, Exception ex) {
+        showMessage(title, header, getMessageAsHTML(ex));
+    }
+
+    private static class ExceptionIterator implements Iterator {
+
+        Throwable exception;
+
+        ExceptionIterator(Throwable exception) {
+            this.exception = exception;
+        }
+
+        public boolean hasNext() {
+            return this.exception != null;
+        }
+
+        public Object next() {
+            Throwable exception = this.exception;
+            this.exception = exception.getCause();
+            return exception;
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    private static String getMessageAsHTML(Exception ex) {
+        Iterator exceptions = new ExceptionIterator(ex);
+        StringBuilder html = new StringBuilder();
+
+        html.append("<ul>\n");
+        while (exceptions.hasNext()) {
+            Throwable ex1 = ((Throwable) exceptions.next());
+            String message = null;
+            if (ex1 instanceof UnknownHostException) {
+                message = "Unknown Host " + ex1.getMessage();
+            } else {
+                message = ex1.getMessage();
+            }
+            if (message != null && !(message.startsWith("Exception ") 
+                    || message.startsWith("Error ")) ) {
+                html.append("<li>");
+                if (message.toLowerCase().contains(" create ")) {
+                    message = message.replaceFirst(" create ", "<br>\nCREATE ");
+                    message = message.replaceAll(",", ",<br>\n");
+                } else if (message.toLowerCase().contains(" insert ")) {
+                    message = message.replaceFirst(" insert ", "<br>\nINSERT ");
+                    message = message.replaceAll(",", ",<br>\n");
+                }
+                html.append(message);
+                html.append("</li>\n");
+            }
+        }
+        html.append("</ul>\n");
+        return html.toString();
+    }
+
+    public MessagePanel(final String header, final String html, Feature feature) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        this.setLayout(new BorderLayout());
+        this.setPreferredSize(new Dimension(500, 300));
+        this.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
+
+        JLabel headerlabel = new JLabel();
+        headerlabel.setText(header);
+
+        JTabbedPane tabs = new JTabbedPane();
+
+        text = new JTextPane();
+        text.setContentType("text/html");
+        text.setEditable(false);
+        text.setText(html);
+        text.setCaretPosition(0);
+
+        JScrollPane scrollPane = new JScrollPane(text);
+        scrollPane.setPreferredSize(new Dimension(500, 220));
+
+        tabs.addTab(i18nManager.getTranslation("_Problem"), scrollPane);
+        if (feature != null) {
+            try {
+                DynObject data = feature.getAsDynObject();
+                JDynForm form = DynFormLocator.getDynFormManager().createJDynForm(data);
+                form.setLayoutMode(form.USE_TABS);
+                tabs.addTab(i18nManager.getTranslation("_Row_values"), form.asJComponent());
+            } catch (ServiceException ex) {
+                logger.warn("Can't show feature associated with the problem.", ex);
+            }
+        }
+
+        accept = new JButton(i18nManager.getTranslation("_Accept"));
+        accept.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                setVisible(false);
+            }
+        });
+
+        JPanel buttonsPanel = new JPanel();
+        buttonsPanel.setLayout(new BoxLayout(buttonsPanel,
+                BoxLayout.LINE_AXIS));
+        buttonsPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+        buttonsPanel.add(Box.createHorizontalGlue());
+        buttonsPanel.add(accept);
+
+        this.add(headerlabel, BorderLayout.NORTH);
+        this.add(tabs, BorderLayout.CENTER);
+        this.add(buttonsPanel, BorderLayout.SOUTH);
+        this.setVisible(true);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/MessagePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/addlayer/AddLayerDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/addlayer/AddLayerDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/addlayer/AddLayerDialog.java	(revision 42196)
@@ -0,0 +1,262 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.addlayer;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.gui.wizards.WizardListener;
+import org.gvsig.app.project.DefaultProject;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Frame del cuadro de dialogo que contendra los tabs de aperturas de ficheros
+ *
+ * @version 04/09/2007
+ * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+ */
+public class AddLayerDialog extends JPanel implements org.gvsig.andami.ui.mdiManager.IWindow , Disposable{
+        private static Logger logger = LoggerFactory.getLogger(AddLayerDialog.class);
+	static private IProjection proj           = null;
+	private JTabbedPane        jTabbedPane    = null;
+	private AcceptCancelPanel  jPanel         = null;
+	private boolean            accepted       = false;
+	private String             title          = PluginServices.getText(this, "add_layer");
+	private WizardListener     wizardListener = new DialogWizardListener();
+
+	/**
+   * Creates a new FOpenDialog object.
+   * @param view Vista que vamos a refrescar
+   * @param mapControl MapControl que recibe la capa (te puede interesar
+   *          a�adirla al principal o al Overview.
+   */
+	public AddLayerDialog() {
+		initialize();
+	}
+
+	/**
+	 * Constructor con un nombre de Frame
+	 * @param title
+	 */
+	public AddLayerDialog(String title) {
+		this.title = title;
+		initialize();
+	}
+
+	/**
+   * This method initializes this
+   */
+	private void initialize() {
+		ToolsLocator.getDisposableManager().bind(this);
+		
+		this.setLayout(new BorderLayout());
+		this.setSize(523, 385);
+		this.setPreferredSize(new Dimension(523, 385));
+		this.add(getJTabbedPane(), BorderLayout.CENTER);
+		this.add(getJPanel(), BorderLayout.SOUTH);
+	}
+
+	/**
+   * This method initializes jTabbedPane
+   * @return javax.swing.JTabbedPane
+   */
+	private JTabbedPane getJTabbedPane() {
+		if (jTabbedPane == null) {
+			jTabbedPane = new JTabbedPane();
+			jTabbedPane.setBounds(0, 0, getWindowInfo().getWidth() - 10, getWindowInfo().getHeight() - 10);
+			jTabbedPane.addChangeListener(new ChangeListener() {
+				public void stateChanged(ChangeEvent e) {
+					JTabbedPane tabs = (JTabbedPane) e.getSource();
+					Component sel_tab = tabs.getSelectedComponent();
+					if (sel_tab instanceof WizardPanel) {
+					    WizardPanel wipa = (WizardPanel) sel_tab;
+					    wizardListener.wizardStateChanged(
+					        wipa.areSettingsValid());
+					}
+					// getJPanel().setOkButtonEnabled(!(tabs.getSelectedComponent() instanceof WizardPanel));
+				}
+			});
+		}
+
+		return jTabbedPane;
+	}
+
+	/**
+	 * A�ade en una pesta�a un Jpanel con un titulo
+	 * @param title
+	 * @param panel
+	 */
+	public void addTab(String title, JPanel panel) {
+		getJTabbedPane().addTab(title, panel);
+	}
+
+	/**
+	 * A�ade en una pesta�a un WizardPanel con un titulo
+	 * @param title
+	 * @param panel
+	 */
+	public void addWizardTab(String title, WizardPanel panel) {
+		panel.addWizardListener(wizardListener);
+		getJTabbedPane().addTab(title, panel);
+	}
+
+	/**
+	 * Devuelve el JPanel seleccionado en las pesta�as
+	 * @return
+	 */
+	public JPanel getSelectedTab() {
+		return (JPanel) getJTabbedPane().getSelectedComponent();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(
+                        WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+		m_viewinfo.setTitle(this.title);
+		m_viewinfo.setHeight(500);
+		m_viewinfo.setWidth(530);
+		return m_viewinfo;
+	}
+
+        public void updateOkButtonState() {
+            if (this.getSelectedTab() instanceof WizardPanel) {
+                WizardPanel wp = (WizardPanel) this.getSelectedTab();
+                getJPanel().setOkButtonEnabled(wp.areSettingsValid());
+            }
+        }
+        
+	/**
+   * This method initializes jPanel
+   * @return javax.swing.JPanel
+   */
+	private AcceptCancelPanel getJPanel() {
+		if (jPanel == null) {
+			ActionListener okAction = new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					accepted = true;
+					closeWindow();
+				}
+			};
+			ActionListener cancelAction = new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					closeWindow();
+				}
+			};
+			jPanel = new AcceptCancelPanel(okAction, cancelAction);
+			jPanel.setOkButtonEnabled(false);
+		}
+		return jPanel;
+	}
+
+	/**
+	 * @return
+	 */
+	public boolean isAccepted() {
+		return accepted;
+	}
+
+	/**
+	 * Listener para el Wizard de apertura de fichero
+	 * @version 05/09/2007
+	 * @author BorSanZa - Borja S�nchez Zamorano (borja.sanchez@iver.es)
+	 */
+	public class DialogWizardListener implements WizardListener {
+		/*
+		 * (non-Javadoc)
+		 * @see com.iver.cit.gvsig.gui.wizards.WizardListener#error(java.lang.Exception)
+		 */
+		public void error(Exception e) {}
+
+		/*
+		 * (non-Javadoc)
+		 * @see com.iver.cit.gvsig.gui.wizards.WizardListener#wizardStateChanged(boolean)
+		 */
+		public void wizardStateChanged(boolean finishable) {
+			getJPanel().setOkButtonEnabled(finishable);
+		}
+	}
+
+	/**
+	 * Devuelve la ultima proyecci�n usada
+	 * @return
+	 */
+	public static IProjection getLastProjection() {
+		if (proj == null) {
+			proj = DefaultProject.getDefaultProjection();
+		}
+		return proj;
+	}
+
+	/**
+	 * Define la ultima proyeccion
+	 * @param proj
+	 */
+	public static void setLastProjection(IProjection proj) {
+		AddLayerDialog.proj = proj;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+	private void closeWindow() {
+		if (PluginServices.getMainFrame() == null) {
+			((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+		} else {
+			PluginServices.getMDIManager().closeWindow(AddLayerDialog.this);
+		}
+	}
+
+	public void dispose() {
+		JTabbedPane tabbed = getJTabbedPane();
+		for (int i = 0; i < tabbed.getTabCount(); i++) {
+			Component component = tabbed.getComponentAt(i);
+			if (component instanceof WizardPanel) {
+				((WizardPanel) component).close();
+			}
+		}
+		ToolsLocator.getDisposableManager().release(this);
+	}
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/addlayer/AddLayerDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultApplicationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultApplicationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultApplicationManager.java	(revision 42196)
@@ -0,0 +1,562 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.imp;
+
+import java.awt.Component;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import javax.swing.JComponent;
+
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+import javax.swing.event.HyperlinkListener;
+import javax.swing.filechooser.FileFilter;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.about.AboutLocator;
+import org.gvsig.about.AboutManager;
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.PreferencesNode;
+import org.gvsig.app.extension.Version;
+import org.gvsig.app.extension.develtools.InfoPanel;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.prepareAction.PrepareContext;
+import org.gvsig.app.prepareAction.PrepareContextView;
+import org.gvsig.app.prepareAction.PrepareDataStore;
+import org.gvsig.app.prepareAction.PrepareDataStoreParameters;
+import org.gvsig.app.prepareAction.PrepareLayer;
+import org.gvsig.app.project.DefaultProject;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.gui.ColorTablesFactory;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dispose.DisposableManager;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+
+/**
+ * @author jmvivo
+ *
+ */
+public class DefaultApplicationManager implements ApplicationManager {
+
+    @SuppressWarnings("unused")
+	private static Logger logger = LoggerFactory.getLogger(DefaultApplicationManager.class);
+    
+	private static final String EPNAME_PREPARE_OPEN_DATASTORE = "org.gvsig.datastore.open.prepare"; //"PrepareOpenDataStore";
+	private static final String EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS = "org.gvsig.datastoreparameters.open.prepare"; //"PrepareOpenDataStoreParameters";
+	private static final String EPNAME_PREPARE_OPEN_LAYER = "org.gvsig.layer.open.prepare"; // "PrepareOpenLayer";
+
+	private static final String EPNAME_ADD_TABLE_WIZARD = "AddLayerWizard";
+
+	private ExtensionPointManager epManager;
+
+    private Version version;
+
+	public DefaultApplicationManager() {
+		epManager = ToolsLocator.getExtensionPointManager();
+		epManager.add(EPNAME_PREPARE_OPEN_DATASTORE,
+				"Actions to do when open a DataStore");
+		epManager.add(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS,
+				"Actions to do before open a DataStore with parameters");
+		epManager.add(EPNAME_PREPARE_OPEN_LAYER,
+			"Actions to do after create a Layer");
+		epManager.add(EPNAME_ADD_TABLE_WIZARD,
+				"Wizards to add new document table");
+
+        version = new Version();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.appGvSigManager#pepareOpenDataSource(org.gvsig.fmap.dal.DataStore)
+	 */
+	@SuppressWarnings("unchecked")
+	public DataStore pepareOpenDataSource(DataStore store,
+			PrepareContext context) throws Exception {
+		ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_DATASTORE);
+		if (ep.getCount() == 0) {
+			return store;
+		}
+		DataStore result = store;
+		Iterator<ExtensionPoint.Extension> iter = ep.iterator();
+		PrepareDataStore prepare;
+		while (iter.hasNext()) {
+			prepare = (PrepareDataStore) iter.next().create();
+			result = prepare.prepare(store, context);
+		}
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.appGvSigManager#prepareOpenDataStoreParameters(org.gvsig.fmap.dal.DataStoreParameters)
+	 */
+	@SuppressWarnings("unchecked")
+	public DataStoreParameters prepareOpenDataStoreParameters(
+			DataStoreParameters storeParameters, PrepareContext context)
+			throws Exception {
+
+		ExtensionPoint ep = epManager
+				.get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
+		if (ep.getCount() == 0) {
+			return storeParameters;
+		}
+		DataStoreParameters result = storeParameters;
+		Iterator<ExtensionPoint.Extension> iter = ep.iterator();
+		PrepareDataStoreParameters prepare;
+		while (iter.hasNext()) {
+			prepare = (PrepareDataStoreParameters) iter.next().create();
+			result = prepare.prepare(storeParameters, context);
+		}
+
+		return result;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.app.ApplicationManager#prepareOpenDataStoreParameters(java.util.List, org.gvsig.app.prepareAction.PrepareContext)
+	 */
+	@SuppressWarnings("unchecked")
+	public List<DataStoreParameters> prepareOpenDataStoreParameters(
+			List<DataStoreParameters> storeParameters, PrepareContext context)
+			throws Exception {
+
+		ExtensionPoint ep = epManager
+				.get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
+		if (ep.getCount() == 0) {
+			return storeParameters;
+		}
+		
+		List<DataStoreParameters> result = new ArrayList<DataStoreParameters>();
+		
+		Iterator<ExtensionPoint.Extension> iter = ep.iterator();
+		List<PrepareDataStoreParameters> prepareList = new ArrayList<PrepareDataStoreParameters>();
+		while (iter.hasNext()) {
+			prepareList.add((PrepareDataStoreParameters) iter.next().create());
+		}
+		
+		for (int i = 0; i < storeParameters.size(); i++) {
+			DataStoreParameters param = storeParameters.get(i);
+			for (int j = 0; j < prepareList.size(); j++) {
+				prepareList.get(j).pre(param, context);
+			}
+		}
+		
+		for (int i = 0; i < storeParameters.size(); i++) {
+			DataStoreParameters param = storeParameters.get(i);
+			if(param != null) {
+				for (int j = 0; j < prepareList.size(); j++) {
+					param = prepareList.get(j).prepare(param, context);
+					if(param == null)
+						break;
+				}
+				if(param != null)
+					result.add(param);
+			}
+		}
+		
+		for (int i = 0; i < storeParameters.size(); i++) {
+			DataStoreParameters param = storeParameters.get(i);
+			for (int j = 0; j < prepareList.size(); j++) {
+				prepareList.get(j).post(param, context);
+			}
+		}
+
+		return result;
+	}
+
+	public void registerPrepareOpenDataStore(PrepareDataStore action) {
+		ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_DATASTORE);
+		ep.append(action.getName(), action.getDescription(), action);
+	}
+
+	public void registerPrepareOpenDataStoreParameters(
+			PrepareDataStoreParameters action) {
+		ExtensionPoint ep = epManager
+				.get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
+		ep.append(action.getName(), action.getDescription(), action);
+
+
+	}
+
+	@SuppressWarnings("unchecked")
+	public FLayer prepareOpenLayer(FLayer layer,
+			PrepareContextView context)
+			throws Exception {
+
+		ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
+
+		if (ep.getCount() == 0) {
+			return layer;
+		}
+		FLayer result = layer;
+		Iterator<ExtensionPoint.Extension> iter = ep.iterator();
+		PrepareLayer prepare;
+		while (iter.hasNext()) {
+			prepare = (PrepareLayer) iter.next().create();
+			result = prepare.prepare(result, context);
+		}
+
+		return result;
+
+	}
+
+	public void registerPrepareOpenLayer(PrepareLayer action) {
+		ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
+		ep.append(action.getName(), action.getDescription(), action);
+	}
+
+	public void registerAddTableWizard(String name, String description,
+			Class<? extends WizardPanel> wpClass) {
+		ExtensionPoint ep = epManager.get(EPNAME_ADD_TABLE_WIZARD);
+		ep.append(name, description, wpClass);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<WizardPanel> getWizardPanels() throws Exception {
+		ExtensionPoint ep = epManager.get(EPNAME_ADD_TABLE_WIZARD);
+		List<WizardPanel> result = new ArrayList<WizardPanel>();
+		Iterator<Extension> iter = ep.iterator();
+		while (iter.hasNext()) {
+			result.add((WizardPanel) iter.next().create());
+		}
+		return result;
+	}
+
+	public DataManager getDataManager() {
+		return DALLocator.getDataManager();
+	}
+
+	public GeometryManager getGeometryManager() {
+		return GeometryLocator.getGeometryManager();
+	}
+
+	public PersistenceManager getPersistenceManager() {
+		return ToolsLocator.getPersistenceManager();
+	}
+
+	public DisposableManager getDisposableManager() {
+		return ToolsLocator.getDisposableManager();
+	}
+
+	public DynObjectManager getDynObjectManager() {
+		return ToolsLocator.getDynObjectManager();
+	}
+
+	public ExtensionPointManager getExtensionPointManager() {
+		return ToolsLocator.getExtensionPointManager();
+	}
+
+	public ProjectManager getProjectManager() {
+		return ProjectManager.getInstance();
+	}
+
+	public MDIManager getUIManager() {
+		return PluginServices.getMDIManager();
+	}
+
+	public MapContextManager getMapContextManager() {
+		return MapContextLocator.getMapContextManager();
+	}
+
+	public DataTypesManager getDataTypesManager() {
+		return ToolsLocator.getDataTypesManager();
+	}
+	
+	public IProjection getCRS(String code) {
+		return CRSFactory.getCRS(code);
+	}
+
+	public IconThemeManager getIconThemeManager() {
+		return ToolsSwingLocator.getIconThemeManager();
+	}
+
+	public String getArgument(String name) {
+		return PluginServices.getArgumentByName(name);
+	}
+
+	public String[] getArguments() {
+		return PluginServices.getArguments();
+	}
+
+	public String getFromClipboard() {
+		return PluginServices.getFromClipboard();
+	}
+
+	public void putInClipboard(String data) {
+		PluginServices.putInClipboard(data);
+	}
+
+	public Project getCurrentProject() {
+		return ProjectManager.getInstance().getCurrentProject();
+	}
+
+	public PreferencesNode getPreferences(String node) {
+		if( node.equalsIgnoreCase("project")) {
+			return DefaultProject.getPreferences();
+		}
+		return new DefaultPreferencesNode(node);
+	}
+
+	public PreferencesNode getPreferences() {
+		return new DefaultPreferencesNode();
+	}
+
+	public Version getVersion() {
+        return version;
+	}
+	
+	public AboutManager getAbout() {
+		AboutManager manager = AboutLocator.getManager();
+		return manager;
+	}
+
+	public ColorTablesFactory getColorTablesFactory() {
+		return SymbologySwingLocator.getSwingManager().getColorTablesFactory();
+	}
+
+	public void registerColorTablesFactory(ColorTablesFactory factory) {
+		SymbologySwingLocator.getSwingManager().setColorTablesFactory(factory);
+		
+	}
+
+    public IWindow getActiveWindow() {
+        try {
+            IWindow window = PluginServices.getMDIManager().getActiveWindow();
+            return window;
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+    public Document getActiveDocument() {
+    	return this.getActiveDocument((Class<? extends Document>)null);
+    }
+    
+    public Document getActiveDocument(String documentTypeName) {
+        Document document = this.getActiveDocument();
+        if( document!= null && document.getTypeName().equalsIgnoreCase(documentTypeName) ) {
+            return document;
+        }
+        return null;
+    }
+    
+    public Document getActiveDocument(Class<? extends Document> documentClass) {
+        Project project = this.getCurrentProject();
+        if( project == null ) {
+            return null;
+        }
+        return project.getActiveDocument(documentClass);
+    }
+
+    public JComponent getActiveComponent(Class<? extends Document> documentClass) {
+        Document document = this.getActiveDocument(documentClass);
+        if (document == null) {
+            return null;
+        }
+        return document.getMainComponent();
+    }
+    
+   
+    public IDocumentWindow getDocumentWindow(Document document) {
+        Class<? extends IDocumentWindow> defaultDocumentClass =
+            document.getFactory().getMainWindowClass();
+        return (IDocumentWindow) this.getUIManager().getSingletonWindow(defaultDocumentClass, document);
+    }
+
+	public String getLocaleLanguage() {
+		return Launcher.getAndamiConfig().getLocaleLanguage();
+	}
+
+	public void message(String message, int message_type) {
+		MainFrame main = PluginServices.getMainFrame();
+		main.message(message, message_type);
+	}
+
+	public void messageDialog(String message, String title, int messageType) {
+		MainFrame main = PluginServices.getMainFrame();
+		main.messageDialog(message, title, messageType);
+	}
+
+	public void messageDialog(String message, String[] messageArgs,
+			String title, int messageType) {
+		MainFrame main = PluginServices.getMainFrame();
+		main.messageDialog(message, messageArgs, title, messageType);
+	}
+
+	public int confirmDialog(String message, String title, int optionType,
+			int messageType) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.confirmDialog(message, title, optionType, messageType);
+	}
+
+	public String inputDialog(String message, String title, int messageType,
+			String initialValue) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.inputDialog(message, title, messageType, initialValue);
+	}
+
+	public String inputDialog(String message, String title) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.inputDialog(message, title);
+	}
+
+	public void showDialog(Component contents, String title) {
+		MainFrame main = PluginServices.getMainFrame();
+		main.showDialog(contents, title);
+	}
+
+	public Component createComponent(Class<? extends Component> theClass,
+			Object... parameters) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.createComponentWithParams(theClass, parameters);
+	}
+
+	public Component createComponentWithParams(
+			Class<? extends Component> theClass, Object[] parameters) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.createComponentWithParams(theClass, parameters);
+	}
+
+
+	public File[] showChooserDialog(
+			final String title,
+			final int type, // SAVE_DIALOG / OPEN_DIALOG
+			final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
+			final boolean multiselection, 
+			final File initialPath,
+			final FileFilter filter,
+			final boolean fileHidingEnabled
+			) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.showChooserDialog(title, type, selectionMode, multiselection, initialPath, filter, fileHidingEnabled);
+	}
+	
+	public File[] showOpenDirectoryDialog(String title, File initialPath) {
+		return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
+	}
+
+	
+	public File[] showOpenFileDialog(String title, File initialPath) {
+		return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+	}
+
+	
+	public File[] showSaveFileDialog(String title, File initialPath) {
+		return showChooserDialog(title, JFileChooser.SAVE_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+	}
+	
+	public String translate(String message, String... args) {
+		return org.gvsig.i18n.Messages.translate(message, args);
+	}
+	
+	public Component getRootComponent() {
+		return (Component) PluginServices.getMainFrame();
+	}
+
+	public void refreshMenusAndToolBars() {
+		PluginServices.getMainFrame().refreshControls();
+	}
+
+    public MainFrame getMainFrame() {
+        return PluginServices.getMainFrame();
+    }
+    
+	public void addMenu(ActionInfo action, String text) {
+		MainFrame f = this.getMainFrame();
+		f.addMenu(action,text);
+	}
+
+	public void addTool(ActionInfo action, String toolBarName) {
+		MainFrame f = this.getMainFrame();
+		f.addTool(action,toolBarName);
+		f.refreshControls();
+	}
+        
+        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText) {
+            this.showTextDialog(mode, title, htmlText, null);
+        }
+        
+        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText, final HyperlinkListener hyperlinkListener) {
+            if (!SwingUtilities.isEventDispatchThread()) {
+                if( mode == WindowManager.MODE.DIALOG ) {
+                    try {
+                        SwingUtilities.invokeAndWait(new Runnable() {
+                            public void run() {
+                                showTextDialog(mode, title, htmlText,hyperlinkListener);
+                            }
+                        });
+                    } catch (Exception ex) {
+                        logger.warn("Can't show text dialog:\n"+htmlText,ex);
+                    }
+                } else {
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            showTextDialog(mode, title, htmlText,hyperlinkListener);
+                        }
+                    });
+                }
+                return;
+            }
+            InfoPanel.showPanel(title, mode, htmlText,hyperlinkListener);
+        }
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultApplicationManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/ApplicationLibraryImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/ApplicationLibraryImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/ApplicationLibraryImpl.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.app.imp;
+
+import org.gvsig.app.ApplicationLibrary;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.gui.ProjectGeneralPropertiesPageFactory;
+import org.gvsig.app.project.documents.view.gui.GeneralViewPropertiesPageFactory;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Registers the default implementation for the AppGvSigManager.
+ * @author <a href="mailto:cordinyana@gvsig.org">C�sar Ordi�ana</a>
+ */
+public class ApplicationLibraryImpl extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(ApplicationLibrary.class);
+        require(InstallerLibrary.class);
+    }
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		ApplicationLocator.registerDefaultApplicationManager(DefaultApplicationManager.class);
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+            PropertiesPageManager propertiesPageManager = MapControlLocator.getPropertiesPageManager();
+            propertiesPageManager.registerFactory(new ProjectGeneralPropertiesPageFactory());
+            propertiesPageManager.registerFactory(new GeneralViewPropertiesPageFactory());
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/ApplicationLibraryImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultPreferencesNode.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultPreferencesNode.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultPreferencesNode.java	(revision 42196)
@@ -0,0 +1,220 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.imp;
+
+import java.awt.Color;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.PreferencesNode;
+import org.gvsig.utils.StringUtilities;
+import org.gvsig.utils.XMLEntity;
+
+public class DefaultPreferencesNode implements PreferencesNode {
+
+	private String name;
+	private XMLEntity node;
+	
+	public DefaultPreferencesNode() {
+		this.name = null;
+	}
+	
+	public DefaultPreferencesNode(String nodeName) {
+		this.name = nodeName;
+	}
+	
+	protected XMLEntity getRootNode() {
+		XMLEntity node = PluginServices.getPluginServices("org.gvsig.app")	.getPersistentXML();
+		return node;
+	}
+	
+	protected XMLEntity getNode() {
+		if( this.node == null ) {
+			if( this.name == null ) {
+				this.node = this.getRootNode();
+			} else {
+		        this.node = this.getRootNode().firstChild(this.name);		
+			}
+		}
+        return this.node;
+	}
+	
+	public String name() {
+		return this.name;
+	}
+
+	public String[] keys() throws Exception {
+		XMLEntity node = this.getNode();
+		int count = node.getChildrenCount();
+		String[] keys = new String[count];
+		for(int  i=0 ; i<count ; i++ ) {
+			keys[i] = node.getChild(i).getName();
+		}
+		return keys;
+	}
+
+	public void clear() throws Exception {
+		XMLEntity node = this.getNode();
+		node.removeAllChildren();
+	}
+
+	public void flush() throws Exception {
+		// do nothing
+	}
+
+	public String get(String name, String defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		String value = node.getStringProperty(name);
+		return value;
+	}
+
+	public boolean getBoolean(String name, boolean defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		boolean value = node.getBooleanProperty(name);
+		return value;
+	}
+
+	public byte[] getByteArray(String name, byte[] defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		byte[] value = node.getByteArrayProperty(name);
+		return value;
+	}
+
+	public double getDouble(String name, double defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		double value = node.getDoubleProperty(name);
+		return value;
+	}
+
+	public float getFloat(String name, float defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		float value = node.getFloatProperty(name);
+		return value;
+	}
+
+	public int getInt(String name, int defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		int value = node.getIntProperty(name);
+		return value;
+	}
+
+	public long getLong(String name, long defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		long value = node.getLongProperty(name);
+		return value;
+	}
+
+	public Color getColor(String name, Color defaultValue) {
+		XMLEntity node = this.getNode();
+		
+		if (!node.contains(name)) {
+			return defaultValue;
+		}
+		String value = node.getStringProperty(name);
+		return  StringUtilities.string2Color(value);
+	}
+
+	public void put(String name, String value) {
+		XMLEntity node = this.getNode();
+		
+		node.putProperty(name, value);
+	}
+
+	public void putBoolean(String name, boolean value) {
+		XMLEntity node = this.getNode();
+		
+		node.putProperty(name, value);
+	}
+
+	public void putByteArray(String name, byte[] value) {
+		XMLEntity node = this.getNode();
+		
+		node.putProperty(name, value);
+	}
+
+	public void putDouble(String name, double value) {
+		XMLEntity node = this.getNode();
+		
+		node.putProperty(name, value);
+	}
+
+	public void putFloat(String name, float value) {
+		XMLEntity node = this.getNode();
+		
+		node.putProperty(name, value);
+	}
+
+	public void putInt(String name, int value) {
+		XMLEntity node = this.getNode();
+		
+		node.putProperty(name, value);
+	}
+
+	public void putLong(String name, long value) {
+		XMLEntity node = this.getNode();
+		
+		node.putProperty(name, value);
+	}
+
+	public void remove(String name) {
+		XMLEntity node = this.getNode();
+
+		if (!node.contains(name)) {
+			return;
+		}
+		node.remove(name);
+	}
+
+	public void sync() throws Exception {
+		// do nothing
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultPreferencesNode.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/Project.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/Project.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/Project.java	(revision 42196)
@@ -0,0 +1,193 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project;
+
+import java.awt.Color;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.List;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public interface Project extends DocumentsContainer,  Persistent, ExtendedPropertiesSupport {
+
+    public static final String PROJECT_PROPERTIES_PAGE_GROUP = "Proyect";
+
+    public static final String FILE_EXTENSION = ".gvsproj";
+        
+	public void addPropertyChangeListener(PropertyChangeListener arg0);
+
+	/**
+	 * Return the creation date of the project
+	 *
+	 * @return
+	 */
+	public String getCreationDate();
+
+	/**
+	 * Return the name of the project
+	 *
+	 * @return
+	 */
+	public String getName();
+
+	/**
+	 * Set the name of he project.
+	 *
+	 * @param string
+	 */
+	public void setName(String name);
+
+	/**
+	 * Return the comments associateds with the project
+	 *
+	 * @return comments
+	 */
+	public String getComments();
+
+	/**
+	 * Set the comments associateds with the project
+	 *
+	 * @param comments as string
+	 */
+	public void setComments(String string);
+
+	/**
+	 * Retuen the modification date of the project.
+	 *
+	 * @return modification date as string
+	 */
+	public String getModificationDate();
+
+	/**
+	 * Return the author of the project,
+	 *
+	 * @return author as string
+	 */
+	public String getOwner();
+
+	/**
+	 * Sets the author of the project
+	 *
+	 * @param author name as string
+	 */
+	public void setOwner(String owner);
+
+	/**
+	 * Obtiene el color de selecci�n que se usar� en el proyecto
+	 *
+	 * @return
+	 */
+	public Color getSelectionColor();
+
+	/**
+	 * Sets the selecction color
+	 *
+	 * @param selection color as string
+	 */
+	public void setSelectionColor(String selectionColor);
+
+	/**
+	 * Sets the selecction color
+	 *
+	 * @param selection color as Color
+	 */
+	public void setSelectionColor(Color selectionColor);
+
+	public IProjection getProjection();
+
+	public void setProjection(IProjection projection);
+
+	/**
+	 * Sets the modified state of project.
+	 * 
+	 * Can't set to not modified.
+	 *
+	 * @param modified as boolean
+	 */
+	public void setModified(boolean modified);
+
+	public boolean hasChanged();
+
+
+	/**
+	 * Adds a document to the project
+	 *
+	 * @param document as IProjectDocument
+         * @deprecated use addDocument
+	 */
+	public void add(Document document);
+
+	/**
+	 * Remove a document of the project
+	 *
+	 * @param document as Document
+         * @deprecated use removeDocument
+	 */
+	public void remove(Document document);
+
+	/**
+	 * Return the view that contains the especified layer.
+	 *
+	 * @param layer
+	 *
+	 * @return name of the view that contains the layer
+	 *
+	 * @throws RuntimeException 
+	 *             Si la capa que se pasa como par�metro no se encuentra en
+	 *             ninguna vista
+	 */
+	public String getViewName(FLayer layer);
+
+	public void addExtent(ProjectExtent arg1);
+
+	public ProjectExtent removeExtent(int arg0);
+
+	public ProjectExtent[] getExtents();
+
+	public void saveState(File out) throws PersistenceException;
+	
+	public void saveState(OutputStream out) throws PersistenceException;
+
+	public void loadState(InputStream in);
+
+	public void loadState(File in);
+	
+	public String exportDocumentsAsText(List<Document> documents);
+	
+	public void importDocuments(String data, String doctype);
+	
+	public boolean canImportDocuments(String data, String doctype);
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/Project.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectPreferences.java	(revision 42196)
@@ -0,0 +1,288 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.app.project;
+
+import java.awt.Color;
+import org.apache.commons.lang.StringUtils;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.imp.DefaultPreferencesNode;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.utils.StringUtilities;
+import org.gvsig.utils.XMLEntity;
+
+/**
+ * Clase que representa las preferencias para el proyecto
+ *
+ * @author 2009-         Joaquin del Cerro
+ * 
+ */
+
+public class ProjectPreferences extends DefaultPreferencesNode {
+
+    public static final String DEFAULT_PROJECTION_KEY_NAME = "DefaultProjection";
+    
+	private IProjection defaultProjection = null;
+
+	private IProjection defaultFactoryProjection =
+	    MapContextLocator.getMapContextManager().getDefaultCRS();
+
+	private Color defaultSelectionColor = Color.YELLOW;
+	
+	private Color defaultViewBackColor = Color.WHITE;
+
+	private Color defaultOverviewBackColor = Color.WHITE;	
+
+	private int defaultMapUnits = -1;
+
+	private int defaultDistanceUnits = -1;
+
+	private int defaultDistanceArea = -1;
+
+	
+	public ProjectPreferences() {
+	}
+
+        /**
+	 * Sets the projection used when no projection is defined
+	 *
+	 * @param defaultProjection
+	 */
+	public void setDefaultProjection(IProjection defaultProjection) {
+            this.defaultProjection = defaultProjection;
+            if (defaultProjection != null){
+                PluginServices plugin = PluginServices.getPluginServices("org.gvsig.app");
+                XMLEntity xml = plugin.getPersistentXML();
+                xml.putProperty(DEFAULT_PROJECTION_KEY_NAME, defaultProjection.getAbrev());
+            }
+	}
+	
+	public void setDefaultProjection(String defaultProjection) {
+            if( !StringUtils.isEmpty(defaultProjection) ) {
+                this.setDefaultProjection(CRSFactory.getCRS(defaultProjection));
+            }
+        }
+        
+	public IProjection getDefaultProjection() {
+            if (this.defaultProjection == null){
+                PluginServices plugin = PluginServices.getPluginServices("org.gvsig.app");
+                XMLEntity xml = plugin.getPersistentXML();
+                if (xml.contains(DEFAULT_PROJECTION_KEY_NAME)) {
+                        String projCode = xml.getStringProperty(DEFAULT_PROJECTION_KEY_NAME);
+                        this.defaultProjection = CRSFactory.getCRS(projCode);
+                } else {
+                        this.defaultProjection = defaultFactoryProjection;
+                }
+            }
+            return this.defaultProjection;
+	}
+
+	public int getInt(String name, int defaultValue) {
+		if( name.equalsIgnoreCase("DefaultDistanceUnits")) {
+			return this.getDefaultDistanceUnits();
+		} else if( name.equalsIgnoreCase("DefaultDistanceArea")) {
+			return this.getDefaultDistanceArea();
+		} else if( name.equalsIgnoreCase("DefaultMapUnits")) {
+			return this.getDefaultMapUnits();
+		}
+		
+		return super.getInt(name, defaultValue);
+	}
+
+	/**
+	 * Sets the default selection color that will be used in subsequent
+	 * projects.
+	 *
+	 * @param color
+	 */
+	public void setDefaultSelectionColor(Color color) {
+		defaultSelectionColor = color;
+	}
+
+	/**
+	 * Returns the current default selection color defined which is the color
+	 * defined when the user does not define any other one
+	 *
+	 * @return java.awt.Color
+	 */
+	public Color getDefaultSelectionColor() {
+		XMLEntity xml = PluginServices.getPluginServices("org.gvsig.app")
+				.getPersistentXML();
+		if (xml.contains("DefaultSelectionColor")) {
+			defaultSelectionColor = StringUtilities.string2Color(xml
+					.getStringProperty("DefaultSelectionColor"));
+		}
+		return defaultSelectionColor;
+	}
+
+	public Color getDefaultViewBackColor() {
+		XMLEntity xml = PluginServices.getPluginServices("org.gvsig.app").getPersistentXML();
+		if (xml.contains("DefaultViewBackColor")) {
+			defaultViewBackColor = StringUtilities.
+				string2Color(xml.getStringProperty("DefaultViewBackColor"));
+		}
+		return defaultViewBackColor;
+	}
+
+	public void setDefaultViewBackColor(Color color) {
+		defaultViewBackColor = color;
+	}
+
+	public Color getDefaultOverviewBackColor() {
+		XMLEntity xml = PluginServices.getPluginServices("org.gvsig.app")
+				.getPersistentXML();
+		if (xml.contains("defaultOverviewBackColor")) {
+			defaultOverviewBackColor = StringUtilities.string2Color(xml
+					.getStringProperty("defaultOverviewBackColor"));
+		}
+		return defaultOverviewBackColor;
+
+	}
+
+	public void setDefaultOverviewBackColor(Color color) {
+		defaultOverviewBackColor = color;
+	}
+
+	/**
+	 * Returns the user's default map units. This is the cartography data
+	 * distance units.
+	 *
+	 * @return int (index of the <b>Attributes.NAMES array</b>)
+	 */
+	public int getDefaultMapUnits() {
+		if (defaultMapUnits == -1) {
+			XMLEntity xml = PluginServices.getPluginServices(
+					"org.gvsig.app").getPersistentXML();
+			if (xml.contains("DefaultMapUnits")) {
+				defaultMapUnits = xml.getIntProperty("DefaultMapUnits");
+			} else {
+				// first app run case
+				String[] unitNames = MapContext.getDistanceNames();
+				for (int i = 0; i < unitNames.length; i++) {
+					// meter is the factory default's map unit
+					if (unitNames[i].equals("Metros")) {
+						defaultMapUnits = i;
+						break;
+					}
+				}
+			}
+			if (defaultMapUnits == -1 || defaultMapUnits >= MapContext.getDistanceNames().length){
+				defaultMapUnits = MapContext.getDistancePosition("Metros");
+			}
+		}
+		return defaultMapUnits;
+	}
+
+	/**
+	 * Returns the user's default view units for measuring distances. This is
+	 * the units that the user will see in the status bar of the view.
+	 *
+	 * @return int (index of the <b>Attributes.NAMES array</b>)
+	 */
+	public int getDefaultDistanceUnits() {
+		if (defaultDistanceUnits == -1) {
+			XMLEntity xml = PluginServices.getPluginServices(
+					"org.gvsig.app").getPersistentXML();
+			if (xml.contains("DefaultDistanceUnits")) {
+				defaultDistanceUnits = xml
+						.getIntProperty("DefaultDistanceUnits");
+			} else {
+				// first app run case
+				String[] unitNames = MapContext.getDistanceNames();
+				for (int i = 0; i < unitNames.length; i++) {
+					// meter is the factory default's distance unit
+					if (unitNames[i].equals("Metros")) {
+						defaultDistanceUnits = i;
+						break;
+					}
+				}
+			}
+			if (defaultDistanceUnits == -1 || defaultDistanceUnits >= MapContext.getDistanceNames().length){
+				defaultDistanceUnits = MapContext.getDistancePosition("Metros");
+			}
+		}
+		return defaultDistanceUnits;
+	}
+	/**
+	 * Returns the user's default view units for measuring areas. This is
+	 * the units that the user will see in the status bar of the view.
+	 *
+	 * @return int (index of the <b>Attributes.NAMES array</b>)
+	 */
+	public int getDefaultDistanceArea() {
+		if (defaultDistanceArea == -1) {
+			XMLEntity xml = PluginServices.getPluginServices(
+					"org.gvsig.app").getPersistentXML();
+			if (xml.contains("DefaultDistanceArea")) {
+				defaultDistanceArea = xml
+						.getIntProperty("DefaultDistanceArea");
+			} else {
+				// first app run case
+				String[] unitNames = MapContext.getAreaNames();
+				for (int i = 0; i < unitNames.length; i++) {
+					// meter is the factory default's distance unit
+					if (unitNames[i].equals("Metros")) {
+						defaultDistanceArea = i;
+						break;
+					}
+				}
+			}
+			if (defaultDistanceArea == -1 || defaultDistanceArea >= MapContext.getAreaNames().length){
+				defaultDistanceArea=getDefaultDistanceUnits();
+			}
+		}
+		return defaultDistanceArea;
+	}
+	/**
+	 * Sets the default map unit (the units used by the data).
+	 *
+	 * @param mapUnits
+	 */
+	public void setDefaultMapUnits(int mapUnits) {
+		defaultMapUnits = mapUnits;
+	}
+
+	/**
+	 * Sets the default distance units (the units shown in the status bar)
+	 *
+	 * @param distanceUnits
+	 */
+	public void setDefaultDistanceUnits(int distanceUnits) {
+		defaultDistanceUnits = distanceUnits;
+	}
+	/**
+	 * Sets the default distance area (the units shown in the status bar)
+	 *
+	 * @param distanceUnits
+	 */
+	public void setDefaultDistanceArea(int distanceArea) {
+		defaultDistanceArea = distanceArea;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DefaultProject.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DefaultProject.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DefaultProject.java	(revision 42196)
@@ -0,0 +1,1128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project;
+
+import java.awt.Color;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.extension.Version;
+import org.gvsig.app.project.documents.AbstractDocument;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.exceptions.SaveException;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.gui.ProjectWindow;
+import org.gvsig.app.project.documents.view.DefaultViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesHelper;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.observer.ObservableHelper;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.utils.StringUtilities;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Clase que representa un proyecto de gvSIG
+ *
+ */
+public class DefaultProject implements Serializable, PropertyChangeListener,
+        Project {
+
+    private Logger LOG = LoggerFactory.getLogger(DefaultProject.class);
+    /**
+     * @deprecated see ApplicationLocator.getManager().getVersion()
+     */
+    public static String VERSION = Version.format();
+
+    private ExtendedPropertiesHelper propertiesHelper = new ExtendedPropertiesHelper();
+
+    private ObservableHelper observableHelper = new ObservableHelper();
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -4449622027521773178L;
+
+    private static final Logger logger = LoggerFactory.getLogger(Project.class);
+
+    private static ProjectPreferences preferences = new ProjectPreferences();
+
+    /**
+     * Index used by the generator of unique names of documents.
+     */
+    private Map<String, Integer> nextDocumentIndexByType = new HashMap<String, Integer>();
+
+    private PropertyChangeSupport change;
+
+    private boolean modified = false;
+
+    private String name = null;
+
+    private String creationDate = null;
+
+    private String modificationDate = null;
+
+    private String owner = null;
+
+    private String comments = null;
+
+    private Color selectionColor = null;
+
+    private List<Document> documents = null;
+
+    private List<ProjectExtent> extents = null;
+
+    private IProjection projection;
+
+    /**
+     * Creates a new Project object.
+     */
+    DefaultProject() {
+        this.change = new PropertyChangeSupport(this);
+        this.clean();
+    }
+
+    protected void clean() {
+        this.owner = "";
+        this.comments = "";
+        this.name = PluginServices.getText(this, "untitled");
+        this.creationDate = DateFormat.getDateInstance().format(new Date());
+        this.modificationDate = this.creationDate;
+
+        this.documents = new ArrayList<Document>();
+        this.extents = new ArrayList<ProjectExtent>();
+
+        this.setSelectionColor(getPreferences().getDefaultSelectionColor());
+
+        this.projection = null; // se inicializa en el getProjection()
+    }
+
+    public static ProjectPreferences getPreferences() {
+        return preferences;
+    }
+
+    public void propertyChange(PropertyChangeEvent evt) {
+        change.firePropertyChange(evt);
+    }
+
+    public synchronized void addPropertyChangeListener(
+            PropertyChangeListener arg0) {
+        change.addPropertyChangeListener(arg0);
+    }
+
+    /**
+     * Return the creation date of the project
+     *
+     * @return
+     */
+    public String getCreationDate() {
+        return creationDate;
+    }
+
+    protected void setCreationDate(String creationDate) {
+        this.creationDate = creationDate;
+        change.firePropertyChange("setCreationDate", null, null);
+    }
+
+    public Document createDocument(String type) {
+        logger.info("createDocument('{}')", type);
+        return ProjectManager.getInstance().createDocument(type);
+    }
+
+    /**
+     * Return the name of the project
+     *
+     * @return
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Set the name of he project.
+     *
+     * @param string
+     */
+    public void setName(String name) {
+        this.name = name;
+        change.firePropertyChange("setName", null, null);
+    }
+
+    /**
+     * Return the comments associateds with the project
+     *
+     * @return comments
+     */
+    public String getComments() {
+        return comments;
+    }
+
+    /**
+     * Set the comments associateds with the project
+     *
+     * @param comments as string
+     */
+    public void setComments(String string) {
+        comments = string;
+        change.firePropertyChange("setComments", null, null);
+    }
+
+    /**
+     * Retuen the modification date of the project.
+     *
+     * @return modification date as string
+     */
+    public String getModificationDate() {
+        return modificationDate;
+    }
+
+    protected void setModificationDate(String string) {
+        modificationDate = string;
+        change.firePropertyChange("setModificationDate", null, null);
+    }
+
+    /**
+     * Return the author of the project,
+     *
+     * @return author as string
+     */
+    public String getOwner() {
+        return owner;
+    }
+
+    /**
+     * Sets the author of the project
+     *
+     * @param author name as string
+     */
+    public void setOwner(String owner) {
+        this.owner = owner;
+        change.firePropertyChange("setOwner", null, null);
+    }
+
+    /**
+     * Obtiene el color de selecci�n que se usar� en el proyecto
+     *
+     * @return
+     */
+    public Color getSelectionColor() {
+        if (selectionColor == null) {
+            selectionColor = getPreferences().getDefaultSelectionColor();
+        }
+        return selectionColor;
+    }
+
+    /**
+     * Sets the selecction color
+     *
+     * @param selection color as string
+     */
+    public void setSelectionColor(String selectionColor) {
+        this.setSelectionColor(StringUtilities.string2Color(selectionColor));
+    }
+
+    /**
+     * Sets the selecction color
+     *
+     * @param selection color as Color
+     */
+    public void setSelectionColor(Color selectionColor) {
+        this.selectionColor = selectionColor;
+        MapContext.setSelectionColor(selectionColor);
+        change.firePropertyChange("selectionColor", null, selectionColor);
+    }
+
+    public IProjection getProjection() {
+        if (projection == null) {
+            projection = getPreferences().getDefaultProjection();
+        }
+        return projection;
+    }
+
+    public void setProjection(IProjection projection) {
+        this.projection = projection;
+    }
+
+    /**
+     * Sets the modified state of project.
+     *
+     * Can't set to not modified.
+     *
+     * @param modified as boolean
+     */
+    public void setModified(boolean modified) {
+        this.modified = modified;
+        if (modified == false) {
+            List<Document> documents = this.getDocuments();
+            for (int i = 0; i < documents.size(); i++) {
+                documents.get(i).setModified(false);
+            }
+        }
+    }
+
+    public boolean hasChanged() {
+		// we return true if the project is not empty (until we have a better
+        // method...)
+        if ((this.getDocuments().size() != 0) || modified) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Return a list of documents in the project.
+     *
+     * @return documents as List of IProjectDocument
+     */
+    public List<Document> getDocuments() {
+        return Collections.unmodifiableList(documents);
+    }
+
+    /**
+     * Return a list with all documents of especified type.
+     *
+     * @param type of document
+     *
+     * @return List of IProjectDocument
+     */
+    public List<Document> getDocuments(String type) {
+        List<Document> docs = new ArrayList<Document>();
+        if (type != null) {
+            for (Document document : this.documents) {
+                if (type.equalsIgnoreCase(document.getTypeName())) {
+                    docs.add(document);
+                }
+            }
+        }
+        return Collections.unmodifiableList(docs);
+    }
+
+    /**
+     * Adds a document to the project
+     *
+     * @param document as Document
+     */
+    public void add(Document document) {
+        this.addDocument(document);
+    }
+
+    public void addDocument(Document document) {
+        logger.info("add('{}')", document.toString());
+
+        if (notifyObservers(ProjectNotification.BEFORE_ADD_DOCUMENT, document).isProcessCanceled()) {
+            return;
+        }
+        document.addPropertyChangeListener(this);
+        document.setProject(this);
+        document.setName(this.getUniqueNameForDocument(document.getTypeName(),
+                document.getName()));
+        documents.add(document);
+        document.afterAdd();
+        this.setModified(true);
+        notifyObservers(ProjectNotification.AFTER_ADD_DOCUMENT, document);
+        change.firePropertyChange("addDocument", null, document);
+    }
+
+    public void remove(Document doc) {
+        this.removeDocument(doc);
+    }
+
+    public void removeDocument(Document doc) {
+        logger.info("remove('{}')", doc.toString());
+        if (notifyObservers(ProjectNotification.BEFORE_REMOVE_DOCUMENT, doc).isProcessCanceled()) {
+            return;
+        }
+        documents.remove(doc);
+        this.setModified(true);
+        change.firePropertyChange("delDocument", doc, null);
+        doc.afterRemove();
+        notifyObservers(ProjectNotification.AFTER_REMOVE_DOCUMENT, doc);
+    }
+
+    public Iterator<Document> iterator() {
+        return documents.iterator();
+    }
+
+    public boolean isEmpty() {
+        return documents.isEmpty();
+    }
+
+    /**
+     * Return the view that contains the especified layer.
+     *
+     * @param layer
+     *
+     * @return name of the view that contains the layer
+     *
+     * @throws RuntimeException Si la capa que se pasa como par�metro no se
+     * encuentra en ninguna vista
+     */
+    public String getViewName(FLayer layer) {
+        List<Document> views = getDocuments(ViewManager.TYPENAME);
+        for (int v = 0; v < views.size(); v++) {
+            DefaultViewDocument pView = (DefaultViewDocument) views.get(v);
+            FLayers layers = pView.getMapContext().getLayers();
+            if (isView(layers, layer)) {
+                return pView.getName();
+            }
+        }
+
+        throw new RuntimeException(MessageFormat.format(
+                "The layer '{1}' is not in a view", layer.getName()));
+    }
+
+    private boolean isView(FLayers layers, FLayer layer) {
+        for (int i = 0; i < layers.getLayersCount(); i++) {
+            if (layers.getLayer(i) instanceof FLayers) {
+                if (isView((FLayers) layers.getLayer(i), layer)) {
+                    return true;
+                }
+            }
+            if (layers.getLayer(i) == layer) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void addExtent(ProjectExtent arg1) {
+        extents.add(arg1);
+        change.firePropertyChange("addExtent", null, null);
+    }
+
+    public ProjectExtent removeExtent(int arg0) {
+        change.firePropertyChange("delExtent", null, null);
+        return extents.remove(arg0);
+    }
+
+    public ProjectExtent[] getExtents() {
+        return (ProjectExtent[]) extents.toArray(new ProjectExtent[0]);
+    }
+
+    /**
+     * Obtiene un documento a partir de su nombre y el nombre de registro en el
+     * pointExtension, este �ltimo se puede obtener del
+     * Project****Factory.registerName.
+     *
+     * @param name Nombre del documento
+     * @param type nombre de registro en el extensionPoint
+     *
+     * @return Documento
+     */
+    public Document getDocument(String name, String type) {
+        if (type != null) {
+            for (int i = 0; i < documents.size(); i++) {
+                Document document = documents.get(i);
+                if (type.equalsIgnoreCase(document.getTypeName())
+                        && name.equalsIgnoreCase(document.getName())) {
+                    return document;
+                }
+            }
+        }
+        return null;
+    }
+
+    public String getUniqueNameForDocument(String type, String name) {
+        Document document = getDocument(name, type);
+        if (document == null) {
+            return name;
+        }
+
+        String newName = null;
+        int num = this.getNextDocumentIndex(type);
+        while (document != null) {
+            newName = name + " - " + num++;
+            document = getDocument(newName, type);
+        }
+        this.setNextDocumentIndex(type, num);
+        return newName;
+    }
+
+    private int getNextDocumentIndex(String type) {
+        if (nextDocumentIndexByType.get(type) == null) {
+            nextDocumentIndexByType.put(type, new Integer(1));
+            return 1;
+        }
+        return nextDocumentIndexByType.get(type).intValue();
+    }
+
+    private void setNextDocumentIndex(String type, int newIndex) {
+        if (nextDocumentIndexByType.get(type) == null) {
+            nextDocumentIndexByType.put(type, new Integer(newIndex));
+        } else {
+            nextDocumentIndexByType.put(type, new Integer(newIndex));
+        }
+    }
+
+    public void saveState(File out) throws PersistenceException {
+        FileOutputStream fout;
+        if (notifyObservers(ProjectNotification.BEFORE_SAVE_TO_FILE, out).isProcessCanceled()) {
+            return;
+        }
+        try {
+            fout = new FileOutputStream(out);
+            saveState(fout, new File(out.getParent()));
+        } catch (FileNotFoundException e) {
+            throw new PersistenceException(e);
+        }
+        notifyObservers(ProjectNotification.AFTER_SAVE_TO_FILE, out);
+    }
+
+    public void saveState(OutputStream out) throws PersistenceException {
+        saveState(out, null);
+    }
+
+    public void saveState(OutputStream out, File rootFolder)
+            throws PersistenceException {
+        if (notifyObservers(ProjectNotification.BEFORE_SAVE_TO_STREAM).isProcessCanceled()) {
+            return;
+        }
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        PersistentState state = null;
+        state = manager.getState(this, true);
+        try {
+            if (rootFolder != null) {
+                state.relativizeFiles(rootFolder);
+            }
+        } catch (Exception ex) {
+            state.getContext().addError(ex);
+        }
+        manager.saveState(state, out);
+        if (state.getContext().getErrors() != null) {
+            throw state.getContext().getErrors();
+        }
+        notifyObservers(ProjectNotification.AFTER_SAVE_TO_STREAM);
+    }
+
+    public void loadState(InputStream in) {
+        loadState(in, null);
+    }
+
+    public void loadState(InputStream in, File rootFolder) {
+        if (notifyObservers(ProjectNotification.BEFORE_LOAD_FROM_STREAM).isProcessCanceled()) {
+            return;
+        }
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        try {
+            PersistentState state = manager.loadState(in);
+            try {
+                if (rootFolder != null) {
+                    state.derelativizeFiles(rootFolder);
+                }
+            } catch (Exception ex) {
+                state.getContext().addError(ex);
+            }
+            this.loadFromState(state);
+        } catch (PersistenceException e) {
+            LOG.info("Can't load project to stream", e);
+        }
+        notifyObservers(ProjectNotification.AFTER_LOAD_FROM_STREAM);
+
+    }
+
+    public void loadState(File in) {
+        if (notifyObservers(ProjectNotification.BEFORE_LOAD_FROM_FILE, in).isProcessCanceled()) {
+            return;
+        }
+        FileInputStream fin;
+        try {
+            fin = new FileInputStream(in);
+            loadState(fin, new File(in.getParent()));
+        } catch (FileNotFoundException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        notifyObservers(ProjectNotification.AFTER_LOAD_FROM_FILE, in);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        this.clean();
+
+        this.setComments(state.getString("comments"));
+        this.setCreationDate(state.getString("creationDate"));
+        this.setModificationDate(state.getString("modificationDate"));
+        this.setName(state.getString("name"));
+        this.setOwner(state.getString("owner"));
+        this.setSelectionColor((Color) state.get("selectionColor"));
+        this.setProjection((IProjection) state.get("projection"));
+
+        this.propertiesHelper = (ExtendedPropertiesHelper) state.get("propertiesHelper");
+
+        List<ProjectExtent> extents = (List<ProjectExtent>) state
+                .get("extents");
+        for (int i = 0; i < extents.size(); i++) {
+            this.addExtent(extents.get(i));
+        }
+
+        List<AbstractDocument> documents = (List<AbstractDocument>) state
+                .get("documents");
+        for (int i = 0; i < documents.size(); i++) {
+            this.add(documents.get(i));
+        }
+
+        List<DocumentWindowInfo> persistentWindows = (List<DocumentWindowInfo>) state.get("documentWindowsInformation");
+
+        for (int i = 0; i < persistentWindows.size(); i++) {
+            DocumentWindowInfo persistentWindow = persistentWindows.get(i);
+            String docName = persistentWindow.getDocumentName();
+            String docType = persistentWindow.getDocumentType();
+            Document doc = this.getDocument(docName, docType);
+            IWindow win = doc.getFactory().getMainWindow(doc);
+            if(win!=null){
+                win.getWindowInfo().setWindowInfo(persistentWindow.getWindowInfo());
+                PluginServices.getMDIManager().addWindow(win);
+            }
+        }
+
+        if (state.hasValue("projectWindowInfo")) {
+            WindowInfo projectWindowInfo = (WindowInfo) state.get("projectWindowInfo");
+            ProjectExtension pe = (ProjectExtension) PluginServices.getExtension(org.gvsig.app.extension.ProjectExtension.class);
+            pe.setProject(this);
+            pe.showProjectWindow(projectWindowInfo);
+        }
+
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("version", VERSION);
+        state.set("comments", getComments());
+        state.set("creationDate", this.getCreationDate());
+
+        state.set("modificationDate", this.getModificationDate());
+        state.set("name", this.getName());
+        state.set("owner", this.getOwner());
+        state.set("selectionColor", this.getSelectionColor());
+
+        state.set("projection", this.getProjection());
+
+        state.set("extents", this.extents);
+        List<Document> docs = this.getDocuments();
+        List<Document> noTempDocs = new ArrayList<Document>();
+        for (Iterator iterator = docs.iterator(); iterator.hasNext();) {
+            Document document = (Document) iterator.next();
+            if(!document.isTemporary()){
+                noTempDocs.add(document);
+            }
+        }
+        state.set("documents", noTempDocs);
+
+        state.set("propertiesHelper",propertiesHelper);
+
+        List<DocumentWindowInfo> persistentWindows = new ArrayList<DocumentWindowInfo>();
+        MDIManager mdiMan = PluginServices.getMDIManager();
+        IWindow[] windows = mdiMan.getOrderedWindows();
+        for (int i = windows.length - 1; i >= 0; i--) {
+            IWindow window = windows[i];
+            if (window instanceof IDocumentWindow) {
+                WindowInfo wi = mdiMan.getWindowInfo(window);
+                DocumentWindowInfo dwi = new DocumentWindowInfo(
+                        wi,
+                        ((IDocumentWindow) window).getDocument().getTypeName(),
+                        ((IDocumentWindow) window).getDocument().getName());
+                persistentWindows.add(dwi);
+            } else if (window instanceof ProjectWindow) {
+                state.set("projectWindowInfo", mdiMan.getWindowInfo(window));
+            }
+        }
+        state.set("documentWindowsInformation", persistentWindows);
+
+    }
+
+    public Object getProperty(Object key) {
+        return this.propertiesHelper.getProperty(key);
+    }
+
+    public void setProperty(Object key, Object obj) {
+        this.propertiesHelper.setProperty(key, obj);
+    }
+
+    public Map getExtendedProperties() {
+        return this.propertiesHelper.getExtendedProperties();
+    }
+
+    public static class DocumentWindowInfo implements Persistent {
+
+        public static final String PERSISTENCE_DEFINITION_NAME = "DocumentWindowInfo";
+
+        private WindowInfo windowInfo;
+        private String documentType;
+        private String documentName;
+
+        public DocumentWindowInfo() {
+        }
+
+        DocumentWindowInfo(WindowInfo wi, String docType, String docName) {
+            windowInfo = wi;
+            documentType = docType;
+            documentName = docName;
+        }
+
+        public WindowInfo getWindowInfo() {
+            return windowInfo;
+        }
+
+        public String getDocumentType() {
+            return documentType;
+        }
+
+        public String getDocumentName() {
+            return documentName;
+        }
+
+        public void saveToState(PersistentState state)
+                throws PersistenceException {
+            state.set("windowInfo", this.windowInfo);
+            state.set("documentType", this.documentType);
+            state.set("documentName", this.documentName);
+        }
+
+        public void loadFromState(PersistentState state)
+                throws PersistenceException {
+            this.windowInfo = (WindowInfo) state.get("windowInfo");
+            this.documentType = state.getString("documentType");
+            this.documentName = state.getString("documentName");
+        }
+
+        public static void registerPersistent() {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            DynStruct definition = manager.getDefinition(PERSISTENCE_DEFINITION_NAME);
+            if (definition == null) {
+                definition = manager.addDefinition(
+                        DocumentWindowInfo.class,
+                        PERSISTENCE_DEFINITION_NAME,
+                        "DocumentWindowInfo persistence definition",
+                        null,
+                        null
+                );
+                definition.addDynFieldObject("windowInfo").setMandatory(true).setClassOfValue(WindowInfo.class);
+                definition.addDynFieldString("documentType").setMandatory(true);
+                definition.addDynFieldString("documentName").setMandatory(true);
+            }
+
+        }
+    }
+
+    public static void registerPersistent() {
+        AbstractDocument.registerPersistent();
+        DocumentWindowInfo.registerPersistent();
+        ProjectExtent.registerPersistent();
+
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.addDefinition(DefaultProject.class,
+                "Project", "Project Persistence definition", null, null);
+        definition.addDynFieldString("version").setMandatory(true);
+        definition.addDynFieldString("comments").setMandatory(true);
+        definition.addDynFieldString("creationDate").setMandatory(true);
+        definition.addDynFieldString("modificationDate").setMandatory(true);
+        definition.addDynFieldString("name").setMandatory(true);
+        definition.addDynFieldString("owner").setMandatory(true);
+
+        definition.addDynFieldObject("selectionColor")
+                .setClassOfValue(Color.class).setMandatory(true);
+        definition.addDynFieldObject("projection")
+                .setClassOfValue(IProjection.class).setMandatory(true);
+
+        definition.addDynFieldList("extents")
+                .setClassOfItems(ProjectExtent.class).setMandatory(true);
+
+        definition.addDynFieldList("documents").setClassOfItems(Document.class)
+                .setMandatory(true);
+
+        definition.addDynFieldObject("projectWindowInfo").setClassOfValue(WindowInfo.class).setMandatory(false);
+
+        definition.addDynFieldList("documentWindowsInformation").setClassOfItems(WindowInfo.class).setMandatory(false);
+
+
+        definition.addDynFieldObject("propertiesHelper").setClassOfValue(ExtendedPropertiesHelper.class)
+                        .setMandatory(false);
+
+    }
+
+    /**
+     * @deprecated use getPreferences().setDefaultSelectionColor()
+     */
+    public static void setDefaultSelectionColor(Color color) {
+        getPreferences().setDefaultSelectionColor(color);
+    }
+
+    /**
+     * @deprecated use getPreferences().getDefaultSelectionColor()
+     */
+    public static Color getDefaultSelectionColor() {
+        return getPreferences().getDefaultSelectionColor();
+    }
+
+    /**
+     * @deprecated use getPreferences().getDefaultMapUnits()
+     */
+    public static int getDefaultMapUnits() {
+        return getPreferences().getDefaultMapUnits();
+    }
+
+    /**
+     * @deprecated use getPreferences().getDefaultDistanceUnits()
+     */
+    public static int getDefaultDistanceUnits() {
+        return getPreferences().getDefaultDistanceUnits();
+    }
+
+    /**
+     * @deprecated use getPreferences().getDefaultDistanceArea()
+     */
+    public static int getDefaultDistanceArea() {
+        return getPreferences().getDefaultDistanceArea();
+    }
+
+    /**
+     * @deprecated use getPreferences().setDefaultMapUnits()
+     */
+    public static void setDefaultMapUnits(int mapUnits) {
+        getPreferences().setDefaultMapUnits(mapUnits);
+    }
+
+    /**
+     * @deprecated use getPreferences().setDefaultDistanceUnits()
+     */
+    public static void setDefaultDistanceUnits(int distanceUnits) {
+        getPreferences().setDefaultDistanceUnits(distanceUnits);
+    }
+
+    /**
+     * @deprecated use getPreferences().setDefaultDistanceArea()
+     */
+    public static void setDefaultDistanceArea(int distanceArea) {
+        getPreferences().setDefaultDistanceArea(distanceArea);
+    }
+
+    /**
+     * @deprecated use getPreferences().setDefaultProjection()
+     */
+    public static void setDefaultProjection(IProjection defaultProjection) {
+        getPreferences().setDefaultProjection(defaultProjection);
+    }
+
+    /**
+     * @deprecated use getPreferences().getDefaultProjection()
+     */
+    public static IProjection getDefaultProjection() {
+        return getPreferences().getDefaultProjection();
+    }
+
+    /**
+     * @deprecated see {@link #setSelectionColor(String)}, to be remove in gvSIG
+     * 2.1.0
+     */
+    public void setColor(String color) {
+        this.setSelectionColor(StringUtilities.string2Color(color));
+    }
+
+    /**
+     * Return the selection color
+     *
+     * @return selection color as string
+     * @deprecated use {@link #getSelectionColor()}
+     */
+    public String getColor() {
+        return StringUtilities.color2String(selectionColor);
+    }
+
+    /**
+     * Return the list of views of the project
+     *
+     * @return views as ArrayList of ProjectDocument
+     *
+     * @deprecated see {@link #getDocumentsByType(String)}
+     */
+    public List<Document> getViews() {
+        return getDocuments(ViewManager.TYPENAME);
+    }
+
+    /**
+     * Add a view to the project
+     *
+     * @deprecated see {@link #add(AbstractDocument)}
+     */
+    public void addView(DefaultViewDocument v) {
+        add(v);
+    }
+
+    /**
+     * Remove a view of the project
+     *
+     * @param index of the view as integer
+     *
+     * @deprecated see {@link #remove(AbstractDocument)}
+     */
+    public void delView(int i) {
+        List<Document> list = getDocuments(ViewManager.TYPENAME);
+        remove(list.get(i));
+    }
+
+    /**
+     * @deprecated see {@link #getDocument(String, String)}
+     */
+    public Document getProjectDocumentByName(String name, String type) {
+        return this.getDocument(name, type);
+    }
+
+    /**
+     * @deprecated see {@link #getDocuments(String)}
+     */
+    public List<Document> getDocumentsByType(String type) {
+        return this.getDocuments(type);
+    }
+
+    /**
+     * @deprecated aun por decidir que API darle al copy/paste
+     */
+    public String exportToXML(AbstractDocument[] selectedItems)
+            throws SaveException {
+        // FIXME jjdc:hay que decirdir que API darle al copy/paste
+        throw new UnsupportedOperationException("This method is not supported");
+    }
+
+    /**
+     * @deprecated aun por decidir que API darle al copy/paste
+     */
+    public void importFromXML(String sourceString, String docType) {
+        // FIXME jjdc:hay que decirdir que API darle al copy/paste
+        throw new UnsupportedOperationException("This method is not supported");
+    }
+
+    /**
+     * @deprecated aun por decidir que API darle al copy/paste
+     */
+    public boolean isValidXMLForImport(String sourceString, String docType) {
+        // FIXME jjdc:hay que decirdir que API darle al copy/paste
+        throw new UnsupportedOperationException("This method is not supported");
+    }
+
+    public boolean canImportDocuments(String data, String doctype) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public String exportDocumentsAsText(List<Document> documents) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void importDocuments(String data, String doctype) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Document getActiveDocument() {
+        return this.getActiveDocument((Class<? extends Document>)null);
+    }
+
+    public Document getActiveDocument(String documentTypeName) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        Document document = null;
+        IWindow[] windows = application.getUIManager().getOrderedWindows();
+        IWindow window = null;
+        for (int i = 0; i < windows.length; i++) {
+            window = windows[i];
+            if (window instanceof SingletonWindow) {
+		// Cogemos no la primera ventana, si no la primera
+                // ventana de tipo documento (SingletonWindow).
+                // Y por si las mosca no es un documento, atrapamos
+                // los errores y continuamos si no puede hacer un cast
+                // del Model a Document
+                try {
+                    document = (Document) ((SingletonWindow) window).getWindowModel();
+                    if (documentTypeName == null) {
+                        return document;
+                    }
+                    if( document.getTypeName().equalsIgnoreCase(documentTypeName) ) {
+                        return document;
+                    }
+                    if( document instanceof DocumentsContainer ) {
+                        Document subdoc = ((DocumentsContainer)document).getActiveDocument(documentTypeName);
+                        return subdoc;
+                    }
+
+                } catch (ClassCastException e) {
+                    // Do nothing, skip this window
+                }
+            }
+        }
+        return null;
+    }
+
+    public Document getActiveDocument(Class<? extends Document> documentClass) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        Document document = null;
+        IWindow[] windows = application.getUIManager().getOrderedWindows();
+        IWindow window = null;
+        for (int i = 0; i < windows.length; i++) {
+            window = windows[i];
+            if (window instanceof SingletonWindow && window instanceof IDocumentWindow) {
+		// Cogemos no la primera ventana, si no la primera
+                // ventana de tipo documento (SingletonWindow).
+                // Y por si las mosca no es un documento, atrapamos
+                // los errores y continuamos si no puede hacer un cast
+                // del Model a Document
+                try {
+                    document = (Document) ((SingletonWindow) window).getWindowModel();
+                    if (documentClass == null) {
+                        return document;
+                    }
+                    if (documentClass.isAssignableFrom(document.getClass())) {
+                        return document;
+                    }
+                    if( document instanceof DocumentsContainer ) {
+                        Document subdoc = ((DocumentsContainer)document).getActiveDocument(documentClass);
+                        return subdoc;
+                    }
+
+                } catch (ClassCastException e) {
+                    // Do nothing, skip this window
+                }
+            }
+        }
+        return null;
+    }
+
+    public void addObserver(Observer o) {
+        observableHelper.addObserver(o);
+    }
+
+    public void deleteObserver(Observer o) {
+        observableHelper.deleteObserver(o);
+    }
+
+    public void deleteObservers() {
+        observableHelper.deleteObservers();
+    }
+
+//	private void notifyObservers(ProjectNotifycation notifycation) {
+//		observableHelper.notifyObservers(this, notifycation);
+//	}
+    private ProjectNotification notifyObservers(int type) {
+        DefaultProjectNotification notifycation
+                = new DefaultProjectNotification(type, null, null);
+        try {
+            observableHelper.notifyObservers(this, notifycation);
+        } catch (Exception ex) {
+            LOG.info("Can't notify observers", ex);
+        }
+        return notifycation;
+    }
+
+    private ProjectNotification notifyObservers(int type, Document document) {
+        DefaultProjectNotification notifycation
+                = new DefaultProjectNotification(type, document, null);
+        try {
+            observableHelper.notifyObservers(this, notifycation);
+        } catch (Exception ex) {
+            LOG.info("Can't notify observers", ex);
+        }
+        return notifycation;
+    }
+
+    private ProjectNotification notifyObservers(int type, File file) {
+        DefaultProjectNotification notifycation
+                = new DefaultProjectNotification(type, null, file);
+        try {
+            observableHelper.notifyObservers(this, notifycation);
+        } catch (Exception ex) {
+            LOG.info("Can't notify observers", ex);
+        }
+        return notifycation;
+    }
+
+    class DefaultProjectNotification implements ProjectNotification {
+
+        private int type;
+        private Document document;
+        private File file;
+        private boolean processCanceled = false;
+
+        DefaultProjectNotification(int type, Document document, File file) {
+            this.type = type;
+            this.document = document;
+            this.file = file;
+        }
+
+        public int getNotificationType() {
+            return type;
+        }
+
+        public Document getDocument() {
+            return document;
+        }
+
+        public void cancelProcess() {
+            processCanceled = true;
+        }
+
+        public boolean isProcessCanceled() {
+            return processCanceled;
+        }
+
+        public File getFile() {
+            return file;
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DefaultProject.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainerNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainerNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainerNotification.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project;
+
+import java.io.File;
+
+import org.gvsig.app.project.documents.Document;
+
+public interface DocumentsContainerNotification {
+	
+	public static final int BEFORE_ADD_DOCUMENT = 1;
+	public static final int AFTER_ADD_DOCUMENT = 2;
+
+	public static final int BEFORE_REMOVE_DOCUMENT = 3;
+	public static final int AFTER_REMOVE_DOCUMENT = 4;
+	
+	public int getNotificationType();
+	public Document getDocument();
+	public void cancelProcess();
+	public boolean isProcessCanceled();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainerNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectNotification.java	(revision 42196)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project;
+
+import java.io.File;
+
+
+public interface ProjectNotification extends DocumentsContainerNotification {
+	
+	public static final int BEFORE_SAVE_TO_FILE = 9;
+	public static final int AFTER_SAVE_TO_FILE = 10;
+	
+	public static final int BEFORE_SAVE_TO_STREAM = 11;
+	public static final int AFTER_SAVE_TO_STREAM = 12;
+
+	public static final int BEFORE_LOAD_FROM_FILE = 13;
+	public static final int AFTER_LOAD_FROM_FILE = 14;
+	
+	public static final int BEFORE_LOAD_FROM_STREAM = 15;
+	public static final int AFTER_LOAD_FROM_STREAM = 16;
+	
+	public File getFile();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectExtent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectExtent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectExtent.java	(revision 42196)
@@ -0,0 +1,169 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project;
+
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * @author 2006-2009 Jose Manuel Vivo
+ * @author 2005-         Vicente Caballero
+ * @author 2009-         Joaquin del Cerro
+ * 
+ */
+
+public class ProjectExtent implements Persistent {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(ProjectExtent.class);
+	
+    public static final String PERSISTENCE_DEFINITION_NAME = "org.gvsig.app.project.ProjectExtent";
+
+	private Envelope extent;
+    private String description;
+
+    public ProjectExtent() {
+    	this.extent = null;
+    	this.description = null;
+    }
+    
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String string) {
+        description = string;
+    }
+
+    public Envelope getExtent() {
+    	if( this.extent == null ) {
+    		try {
+				this.extent = geomManager.createEnvelope(Geometry.SUBTYPES.GEOM2D);
+			} catch (CreateEnvelopeException e) {
+				logger.warn("Can't create envelop.", e);
+			}
+    	}
+    	return this.extent;
+    }
+
+    public void setExtent(Envelope envelope) {
+        this.extent = envelope;
+    }
+
+    /**
+     * @deprecated use {link {@link #setExtent(Envelope)}
+     */
+    public void setExtent(Rectangle2D rectangle2D) {
+        try {
+			this.extent = geomManager.createEnvelope(
+					rectangle2D.getMinX(),
+					rectangle2D.getMinY(),
+					rectangle2D.getMaxX(),
+					rectangle2D.getMaxY(),
+					Geometry.SUBTYPES.GEOM2D);
+		} catch (CreateEnvelopeException e) {
+			logger.warn("Can't create envelope.", e);
+			throw new RuntimeException("Can't create envelope.",e);
+		}
+    }
+
+    public String getEncuadre() {
+    	Point lower = extent.getLowerCorner();
+    	Point upper = extent.getUpperCorner();
+    	return lower.getX() + "," + lower.getY() + "," + upper.getX() + "," + upper.getY(); 
+    }
+
+    public void setEncuadre(String encuadre) {
+        String[] coords = encuadre.split(",");
+        try {
+			this.extent = geomManager.createEnvelope(
+					Double.parseDouble(coords[0]),
+					Double.parseDouble(coords[1]),
+					Double.parseDouble(coords[2]),
+					Double.parseDouble(coords[3]),
+					Geometry.SUBTYPES.GEOM2D);
+		} catch (NumberFormatException e) {
+			logger.warn("Incorrect format string.", e);
+			throw new RuntimeException("Incorrect format string.",e);
+		} catch (CreateEnvelopeException e) {
+			logger.warn("Can't create envelope.", e);
+			throw new RuntimeException("Can't create envelope.",e);
+		}
+    }
+
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString() {
+        return description;
+    }
+
+    public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		this.extent = (Envelope) state.get("envelope");
+		this.description = state.getString("description");
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("description", description);
+        state.set("envelope", extent);
+	}
+
+    /**
+     * 
+     */
+    public static void registerPersistent() {
+        
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.getDefinition(PERSISTENCE_DEFINITION_NAME);
+        if ( definition == null ){
+            definition = manager.addDefinition(
+                ProjectExtent.class,
+                PERSISTENCE_DEFINITION_NAME,
+                PERSISTENCE_DEFINITION_NAME + "  persistence definition",
+                    null, 
+                    null
+            );
+            definition.addDynFieldObject("envelope").setMandatory(true).setClassOfValue(Envelope.class);
+            definition.addDynFieldString("description").setMandatory(true);
+        }        
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectExtent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectManager.java	(revision 42196)
@@ -0,0 +1,294 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.documents.DefaultDocumentActionGroup;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.DocumentAction;
+import org.gvsig.app.project.documents.DocumentActionGroup;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.app.project.documents.gui.ProjectWindow;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
+
+public class ProjectManager extends BaseWeakReferencingObservable {
+
+    private static final Logger logger = LoggerFactory
+        .getLogger(ProjectManager.class);
+    private static ProjectManager factory = null;
+
+    // private static final String KEY_PROJECT = "app.project";
+    // private static final String KEY_DOCUMENTS = "app.project.documents";
+    private static final String KEY_DOCUMENTS_FACTORIES =
+        "app.project.documents.factories";
+    private static final String KEY_DOCUMENTS_ACTIONS =
+        "app.project.documents.actions";
+
+    private Map<String, DocumentActionGroup> documentActionGroups;
+
+    public static ProjectManager getInstance() {
+        if (factory == null) {
+            factory = new ProjectManager();
+        }
+        return factory;
+    }
+
+    private ProjectManager() {
+        this.documentActionGroups = new HashMap<String, DocumentActionGroup>();
+    }
+
+    
+    public Project getCurrentProject() {
+        return ((ProjectExtension) PluginServices
+            .getExtension(ProjectExtension.class)).getProject();
+    }
+
+    public ProjectWindow getCurrentProjectWindow() {
+        ProjectExtension projectExtension =
+            (ProjectExtension) PluginServices
+                .getExtension(ProjectExtension.class);
+        ProjectWindow window =
+            (ProjectWindow) projectExtension.getProjectWindow();
+        return window;
+    }
+
+    /**
+     * @deprecated use {@link #getDocumentManagers()} instead.
+     */
+    public List<DocumentManager> getDocumentManager() {
+        return getDocumentManagers();
+    }
+
+    @SuppressWarnings("unchecked")
+    public List<DocumentManager> getDocumentManagers() {
+        Iterator<Extension> iterator =
+            ToolsLocator.getExtensionPointManager()
+                .get(KEY_DOCUMENTS_FACTORIES).iterator();
+        List<DocumentManager> factories = new ArrayList<DocumentManager>();
+        while (iterator.hasNext()) {
+            Extension extension = iterator.next();
+            try {
+                factories.add((DocumentManager) extension.create());
+            } catch (InstantiationException e) {
+                logger.error("Can't access to project document factory ("
+                    + extension.getName() + ").");
+            } catch (IllegalAccessException e) {
+                logger.error("Can't access to project document factory ("
+                    + extension.getName() + ").");
+            }
+        }
+        return factories;
+    }
+
+    /**
+     * @deprecated use {@link #getDocumentManager(String)} instead.
+     */
+    public DocumentManager getDocumentManagers(String type) {
+        return getDocumentManager(type);
+    }
+
+    public DocumentManager getDocumentManager(String type) {
+        DocumentManager factory = null;
+        try {
+            factory =
+                (DocumentManager) ToolsLocator.getExtensionPointManager()
+                    .get(KEY_DOCUMENTS_FACTORIES).create(type);
+        } catch (Exception ex) {
+            logger
+                .warn(
+                    MessageFormat.format(
+                        "Unable to locate factory for documents of type {0}",
+                        type), ex);
+        }
+        return factory;
+    }
+
+    public Document createDocument(String type) {
+        Document doc = getDocumentManager(type).createDocument();
+        return doc;
+    }
+
+    public Document createDocument(String type, String name) {
+        Document doc = createDocument(type);
+        doc.setName(name);
+        return doc;
+    }
+
+    /**
+     * @deprecated use {@link #createDocumentsByUser(String)} instead
+     */
+    public Document createDocumentByUser(String type) {
+        Document doc = getDocumentManager(type).createDocumentByUser();
+        return doc;
+    }
+
+    /**
+     * Creates a group of documents of a given type through the user interface.
+     * 
+     * @param type
+     *            the type of documents to create
+     * @return the created documents
+     */
+    public Iterator<? extends Document> createDocumentsByUser(String type) {
+        logger.info("createDocumentsByUser('{}')", type);
+        return getDocumentManager(type).createDocumentsByUser();
+    }
+
+    public Project createProject() {
+        return new DefaultProject();
+    }
+
+    public ProjectExtent createExtent() {
+        return new ProjectExtent();
+    }
+
+    public void registerDocumentFactory(DocumentManager documentManager) {
+        ExtensionPointManager manager = ToolsLocator.getExtensionPointManager();
+        manager.add(KEY_DOCUMENTS_FACTORIES).append(
+            documentManager.getTypeName(), null, documentManager);
+        notifyObservers();
+    }
+
+    public void registerDocumentFactoryAlias(String typeName, String alias) {
+        ExtensionPointManager manager = ToolsLocator.getExtensionPointManager();
+
+        manager.get(KEY_DOCUMENTS_FACTORIES).addAlias(typeName, alias);
+    }
+
+    public void registerDocumentAction(String typeName, DocumentAction action) {
+        ExtensionPointManager manager = ToolsLocator.getExtensionPointManager();
+
+        String key = KEY_DOCUMENTS_ACTIONS + "." + typeName;
+        String description =
+            MessageFormat.format("Actions for {1} documents ", typeName);
+
+        manager.add(key, description).append(action.getId(),
+            action.getDescription(), action);
+    }
+
+    /**
+     * Gets a list of actions for the document type especified.
+     * 
+     * La lista esta ordenada deacuerdo al orden especificado en
+     * las acciones y grupos de acciones involucrados.
+     * 
+     * @param doctype
+     * @return list of actions as List<DocumentAction>
+     */
+    @SuppressWarnings("unchecked")
+    public List<DocumentAction> getDocumentActions(String doctype) {
+
+        ExtensionPointManager manager = ToolsLocator.getExtensionPointManager();
+
+        String key = KEY_DOCUMENTS_ACTIONS + "." + doctype;
+        ExtensionPoint extensionPoint = manager.get(key);
+        if (extensionPoint == null) {
+            // No hay acciones registradas para ese tipo de documento
+            return null;
+        }
+        List<DocumentAction> actions = new ArrayList<DocumentAction>();
+        Iterator<Extension> it = extensionPoint.iterator();
+        while (it.hasNext()) {
+            try {
+                DocumentAction action;
+                action = (DocumentAction) it.next().create();
+                actions.add(action);
+            } catch (InstantiationException e) {
+                logger.warn("Can't retrieve document action", e);
+            } catch (IllegalAccessException e) {
+                logger.warn("Can't retrieve document action", e);
+            }
+        }
+        if (actions.size() < 1) {
+            return null;
+        }
+        Collections.sort(actions, new CompareAction());
+        return actions;
+    }
+
+    private class CompareAction implements Comparator<DocumentAction> {
+
+        public int compare(DocumentAction action1, DocumentAction action2) {
+            // FIXME: flata formatear los enteros!!!!
+            String key1 =
+                MessageFormat.format("{1}.{2}.{3}", action1.getGroup()
+                    .getOrder(), action1.getGroup().getTitle(), action1
+                    .getOrder());
+            String key2 =
+                MessageFormat.format("{1}.{2}.{3}", action2.getGroup()
+                    .getOrder(), action2.getGroup().getTitle(), action2
+                    .getOrder());
+            return key1.compareTo(key2);
+        }
+    }
+
+    /**
+     * Create, add and return a new action for documents.
+     * 
+     * If action already exists don't create and return this.
+     * 
+     * @param unique
+     *            identifier for the action
+     * @param title
+     * @param description
+     * @param order
+     * @return
+     */
+    public DocumentActionGroup addDocumentActionGroup(String id, String title,
+        String description, int order) {
+        DocumentActionGroup group = this.documentActionGroups.get(id);
+        if (group != null) {
+            return group;
+        }
+        group = new DefaultDocumentActionGroup(id, title, description, order);
+        this.documentActionGroups.put(id, group);
+        return group;
+    }
+
+    public ProjectPreferences getProjectPreferences() {
+        return DefaultProject.getPreferences();
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/BaseViewDocument.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/BaseViewDocument.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/BaseViewDocument.java	(revision 42196)
@@ -0,0 +1,286 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.app.project.documents.view;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.AbstractDocument;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.app.project.documents.view.info.gui.HTMLInfoToolPanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.events.ErrorEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.ErrorListener;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesHelper;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * @author 2005-         Vicente Caballero
+ * @author 2009-         Joaquin del Cerro
+ * 
+ */
+
+public abstract class BaseViewDocument extends AbstractDocument implements ErrorListener,
+		ViewDocument {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2621709089720665902L;
+	
+	public static final String PERSISTENCE_DEFINITION_NAME = "BaseViewDocument";
+	
+	protected MapContext mapOverViewContext;
+	protected MapContext mapContext;
+	
+        private ExtendedPropertiesHelper propertiesHelper = new ExtendedPropertiesHelper();
+        
+	public BaseViewDocument() {
+		super();
+	}
+	
+	public BaseViewDocument(DocumentManager factory) {
+		super(factory);
+	}
+	
+	/**
+	 * Gets the MapContext of the main map in the view.
+	 *
+	 * @return the  main MapContext
+	 */
+	public MapContext getMapContext() {
+		return mapContext;
+	}
+
+	/**
+	 * Gets the MapContext from the locator, which is the
+	 * small map in the left-bottom corner of the View.
+	 *
+	 * @return the locator MapContext
+	 */
+	public MapContext getMapOverViewContext() {
+		return mapOverViewContext;
+	}
+
+	public void setMapContext(MapContext fmap) {
+		mapContext = fmap;
+		fmap.addErrorListener(this);
+	}
+
+	public void setMapOverViewContext(MapContext fmap) {
+		mapOverViewContext = fmap;
+		mapOverViewContext.setProjection(mapContext.getProjection());
+	}
+
+	public void showErrors(){
+		if (mapContext.getLayersError().size()>0){
+			String layersError="";
+			for (int i=0;i<mapContext.getLayersError().size();i++){
+				layersError=layersError+"\n"+(String)mapContext.getLayersError().get(i);
+			}
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this,"fallo_capas")+" : \n"+
+					layersError);
+		}
+	}
+
+	/**
+	 * Reports to the user a bundle of driver exceptions produced in the
+	 * same atomic MapContext transaction
+	 */
+	@SuppressWarnings("rawtypes") 
+	public void reportDriverExceptions(String introductoryText, List driverExceptions) {
+		HtmlWindow htmlPanel = new HtmlWindow(570, 600, PluginServices.getText(this,"driver_error"));
+		String htmlText = "";
+		if(introductoryText == null){
+			htmlText += "<h2 text=\"#000080\">"+PluginServices.getText(this,"se_han_producido_los_siguientes_errores_durante_la_carga_de_las_capas")+"</h2>";
+		}else{
+			htmlText += introductoryText;
+		}
+		int numErrors = driverExceptions.size();
+		for(int i = 0; i < numErrors; i++){
+			//htmlText += "<br>\n";
+			BaseException exception = (BaseException) driverExceptions.get(i);
+			htmlText +="<p text=\"#550080\">_________________________________________________________________________________________</p>";
+			htmlText += "<h3>"+PluginServices.getText(this,exception.getMessageKey())+"</h3>";
+			htmlText += "<p>"+exception.getMessage()+"</p>";
+			htmlText +="<p text=\"#550080\">_________________________________________________________________________________________</p>";
+		}
+
+		System.out.println(htmlText);
+		htmlPanel.show(htmlText);
+
+		PluginServices.getMDIManager().addCentredWindow(htmlPanel);
+
+	}
+
+	/**
+	 * HtmlInfoToolPanel that implements IWindow
+	 * @author azabala
+	 *
+	 */
+	class HtmlWindow extends JPanel implements IWindow {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1151465547277478664L;
+		
+		private HTMLInfoToolPanel htmlPanel=new HTMLInfoToolPanel();
+		WindowInfo viewInfo = null;
+		public HtmlWindow(int width, int height, String windowTitle){
+			htmlPanel.setBackground(Color.white);
+			JScrollPane scrollPane=new JScrollPane(htmlPanel);
+			scrollPane.setPreferredSize(new Dimension(width-30,height-30));
+			this.add(scrollPane);
+			viewInfo = new WindowInfo(WindowInfo.MODELESSDIALOG);
+			viewInfo.setTitle(windowTitle);
+			viewInfo.setWidth(width);
+			viewInfo.setHeight(height);
+		}
+
+		public void show(String htmlText) {
+			htmlPanel.show(htmlText);
+		}
+
+		public WindowInfo getWindowInfo() {
+			return viewInfo;
+		}
+		public Object getWindowProfile() {
+			return WindowInfo.PROPERTIES_PROFILE;
+		}
+
+	}
+
+	public IProjection getProjection() {
+		return mapContext.getProjection();
+	}
+
+	public void setProjection (IProjection proj) {
+		mapContext.setProjection(proj);
+		mapOverViewContext.setProjection(proj);
+	}
+
+	public IProjection getOverViewProjection() {
+		return mapOverViewContext.getProjection();
+	}
+
+	public void afterRemove() {
+		// FIXME: Parece que no recorre correctamente el arbol de capas
+		
+		FLayers layers=this.getMapContext().getLayers();
+
+		for (int i = layers.getLayersCount()-1; i>=0; i--){
+        	try {
+                layers.getLayer(i).getParentLayer().removeLayer(layers.getLayer(i));
+			} catch (CancelationException e1) {
+    			e1.printStackTrace();
+    		}
+    	}
+		getMapContext().dispose();
+		getMapOverViewContext().dispose();
+	}
+
+	public void afterAdd() {
+		// Do nothing
+	}
+
+
+	public void setBackColor(Color c) {
+		getMapContext().getViewPort().setBackColor(c);
+	}
+
+	public void errorThrown(ErrorEvent e) {
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this,"fallo_capas")+" : \n"+
+					e.getMessage());
+
+	}
+
+	public boolean isLocked() {
+		if(super.isLocked()) return true;
+		FLayers layers = getMapContext().getLayers();
+		for(int i=0; i<layers.getLayersCount(); i++){
+			FLayer layer = layers.getLayer(i);
+			if (layer.isEditing()){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public void saveToState(PersistentState state) throws PersistenceException {
+		super.saveToState(state);
+		state.set("mainMapContext", this.getMapContext());
+		if( this.getMapOverViewContext() != null ) {
+			state.set("useMapOverview", true);
+		} else {
+			state.set("useMapOverview", false);
+		}
+		state.set("overviewMapContext", this.getMapOverViewContext());
+                state.set("propertiesHelper",propertiesHelper);
+	}
+	
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		super.loadFromState(state);
+		this.mapContext = (MapContext) state.get("mainMapContext");
+		if( state.getBoolean("useMapOverview") ) {
+			this.mapOverViewContext = (MapContext) state.get("overviewMapContext");
+		} else {
+			this.mapOverViewContext = null;
+		}
+                this.propertiesHelper = (ExtendedPropertiesHelper) state.get("propertiesHelper");
+	}
+        
+        public Object getProperty(Object key) {
+            return this.propertiesHelper.getProperty(key);
+        }
+
+        public void setProperty(Object key, Object obj) {
+            this.propertiesHelper.setProperty(key, obj);
+        }
+
+        public Map getExtendedProperties() {
+            return this.propertiesHelper.getExtendedProperties();
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/BaseViewDocument.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/MapOverview.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/MapOverview.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/MapOverview.java	(revision 42196)
@@ -0,0 +1,330 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.app.project.documents.view.toolListeners.MapOverviewChangeZoomListener;
+import org.gvsig.app.project.documents.view.toolListeners.MapOverviewListener;
+import org.gvsig.app.project.documents.view.toolListeners.MapOverviewPanListener;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.events.ColorEvent;
+import org.gvsig.fmap.mapcontext.events.ExtentEvent;
+import org.gvsig.fmap.mapcontext.events.ProjectionEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.ViewPortListener;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.DraggerBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
+
+
+
+/**
+ * <p>Lightweight <code>MapControl</code> that uses another <code>MapControl</code>'s <code>MapContext</code>, and updates
+ *  any rectangular extent selected, to the associated <code>MapControl</code>.</p>
+ *
+ * <p>Both <code>MapControl</code> instances work in the same projection. And, always, the not undefined <i>adjusted extent</i>
+ *  of the associated one, will be enhanced as a red-bordered grey-filled rectangle in this one. Furthermore, draws a horizontal and vertical
+ *  this component's width or height, black lines centered in that rectangle.</p>
+ *
+ * @author FJP
+ */
+public class MapOverview extends MapControl implements ViewPortListener {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2849739771493279542L;
+
+	/**
+	 * <p>Associated <code>MapControl</code> instance that this component represents its overview.</p>
+	 */
+	private MapControl m_MapAssoc;
+
+	/**
+	 * <p>Determines that's the first time this component is going to be painted.</p>
+	 */
+	boolean first = true;
+
+	/**
+	 * <p>Tool listener used to apply a <i>zoom out</i> operation in this component graphical information.</p>
+	 */
+	private MapOverviewListener movl;
+
+	/**
+	 * <p>Tool listener used to allow user work with this component applying <i>pan</i> operations.</p>
+	 */
+	private MapOverviewPanListener movpl;
+
+	/**
+	 * <p>Tool listener used to allow user work with this component applying <i>pan</i> operations.</p>
+	 */
+	private MapOverviewChangeZoomListener movczl;
+
+	/**
+	 * <p>Rectangular area selected in this component, that will be the extent of the associated <code>MapControl</code> instance.</p>
+	 */
+	private Envelope extent;
+
+	/**
+	 * <p>Double buffer used to paint this component graphical information.</p>
+	 */
+	private BufferedImage image;
+
+	/**
+	 * <p>Creates a <code>MapOverview</code> instance associated to <code>mapAssoc</code>.</p>
+	 *
+	 * @param mapAssoc <code>MapControl</code> this component will be the overview
+	 */
+	public MapOverview(MapControl mapAssoc) {
+		super();
+		this.setName("MapOverview");
+		// super.vp.setBackColor(new Color(230,230,230));
+		m_MapAssoc = mapAssoc;
+
+		// setModel((FMap) m_MapAssoc.getMapContext().clone()); // Lo inicializamos con
+		// los mismos temas que tenga el grande.
+		movl = new MapOverviewListener(this);
+		movpl = new MapOverviewPanListener(this);
+		movczl = new MapOverviewChangeZoomListener(this);
+		addBehavior(
+				"zoomtopoint",
+				new Behavior[]{
+						new PointBehavior(movl),
+						new RectangleBehavior(movczl),
+						new DraggerBehavior(movczl),
+						new DraggerBehavior(movpl)
+				}
+		);
+
+//		setCursor(movl.getCursor());
+
+		setTool("zoomtopoint");
+		getGrid().setShowGrid(false);
+		getGrid().setAdjustGrid(false);
+	}
+
+	/**
+	 * @see MapControl#getMapContext()
+	 */
+	public MapContext getAssociatedMapContext() {
+		return m_MapAssoc.getMapContext();
+	}
+
+	/**
+	 * <p>Gets the <code>MapControl</code> instance that wrappers.</p>
+	 *
+	 * @return the <code>MapControl</code> instance that wrappers
+	 */
+	public MapControl getAssociatedMapControl(){
+		return m_MapAssoc;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.ViewPortListener#extentChanged(com.iver.cit.gvsig.fmap.ExtentEvent)
+	 */
+	public void extentChanged(ExtentEvent evExtent) {
+		// Nos llega el nuevo extent del FMap asociado, as� que dibujamos nuestro
+		// rect�ngulo para mostrar la zona de dibujo del otro mapa.
+		repaint();
+	}
+
+	/**
+	 * <p>If this had no extent, calls {@link #delModel() #delModel()}, otherwise recalculates this
+	 *  component's view port extent as the union of all extents of all layers of this map.</p>
+	 */
+	public void refreshExtent() {
+		try {
+		if (this.getMapContext().getFullEnvelope()!=null){
+				this.getMapContext().getViewPort().setEnvelope(this.getMapContext().getFullEnvelope());
+		} else {
+			// delModel();
+		}
+		} catch (ReadException e1) {
+			e1.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Repaints this component updating its <i>extent</i>.</p>
+	 *
+	 * @param r the new extent
+	 */
+	public void refreshOverView(Envelope r){
+		extent=r;
+		repaint();
+	}
+
+	/**
+	 * <p>Paints this component's graphical information using a 8-bit RGBA color double buffer, drawing a red-bordered
+	 *  grey-filled rectangle enhancing the extent selected, and a horizontal and vertical this component's width or
+	 *  height, black lines centered in that rectangle.</p>
+	 */
+	protected void paintComponent(Graphics g) {
+		getGrid().setShowGrid(false);
+		getGrid().setAdjustGrid(false);
+		super.paintComponent(g);
+		
+		if (m_MapAssoc.getMapContext().getViewPort().getEnvelope() != null &&
+					getMapContext().getViewPort().getEnvelope() != null &&
+					getMapContext().getLayers().getLayersCount() > 0) {
+		    
+				if (first) {
+					first = false;
+					repaint();
+					return;
+				}
+				image = new BufferedImage(this.getWidth(), this.getHeight(),
+		                    BufferedImage.TYPE_INT_ARGB);
+				ViewPort vp = getMapContext().getViewPort();
+				Envelope extentView=vp.getAdjustedEnvelope();
+				ViewPort vpOrig = m_MapAssoc.getMapContext().getViewPort();
+				if (extent==null) {
+					extent=vpOrig.getAdjustedEnvelope();
+				}
+				// Dibujamos el extent del mapa asociado.
+				Graphics2D g2 = (Graphics2D) image.getGraphics();
+				g2.setTransform(vp.getAffineTransform());
+
+				g2.setStroke(new BasicStroke((float) vp.getDist1pixel()));
+
+				g2.setColor(Color.red);
+				Rectangle2D extentToDraw=new Rectangle2D.Double(extent.getMinimum(0),extent.getMinimum(1),extent.getLength(0),extent.getLength(1));
+				g2.draw(extentToDraw);
+				g2.setColor(new Color(100,100,100,100));
+				g2.fill(extentToDraw);
+				// dibujamos las l�neas vertical y horizontal
+				Point2D pRightUp = vp.toMapPoint(getWidth(), 0);
+
+				Line2D.Double linVert = new Line2D.Double(extentToDraw.getCenterX(),
+						extentView.getMinimum(1), extentToDraw.getCenterX(),
+						pRightUp.getY());
+				Line2D.Double linHoriz = new Line2D.Double(extentView.getMinimum(0),
+						extentToDraw.getCenterY(), pRightUp.getX(),
+						extentToDraw.getCenterY());
+
+				g2.setColor(Color.darkGray);
+				g2.draw(linVert);
+				g2.draw(linHoriz);
+				g.drawImage(image,0,0,this);
+				g2.setTransform(new AffineTransform());
+				extent=null;
+			}
+
+	}
+
+	/**
+	 * <p>Sets a <code>MapContext</code> to this component, configuring it to manage view port events produced
+	 *  in the associated <code>MapControl</code> and this one's view port.</p>
+	 *
+	 * <p>This <code>MapContext</code>'s projection will be the same as the associated <code>MapControl</code>'s one.</p>
+	 *
+	 * <p>Setting the model includes the following steps:
+	 *  <ul>
+	 *   <li><b>1.-</b> set <code>model</code> as the <code>MapContext</code> of <code>this</code>.</li>
+	 *   <li><b>2.-</b> set as <code>model</code> projection, the associated <code>MapControl<code>'s projection.</li>
+	 *   <li><b>3.-</b> set <code>this</code> as <i>view port</i> listener of the associated <code>MapControl</code>'s <i>view port</i>.</li>
+	 *   <li><b>4.-</b> set <code>this</code> as <i>view port</i> listener of this <code>MapContext</code>'s <i>view port</i></li>
+	 *  </ul>
+	 * </p>
+	 *
+	 * @param model data to set
+	 */
+	public void setModel(MapContext model) {
+		this.setMapContext(model);
+		model.setProjection(m_MapAssoc.getMapContext().getProjection());
+		m_MapAssoc.getMapContext().getViewPort().addViewPortListener(this);
+		getMapContext().getViewPort().addViewPortListener(this);
+	}
+
+	/**
+	 * <p>Removes this component as listener of the the associated <code>MapControl</code> and this one's view port. Besides,
+     *  removes the extent.</p>
+	 */
+	/*
+	private void delModel(){
+		this.getMapContext().getViewPort().setEnvelope(null);
+		m_MapAssoc.getMapContext().getViewPort().removeViewPortListener(this);
+		getMapContext().getViewPort().removeViewPortListener(this);
+	}
+	*/
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.ViewPortListener#backColorChanged(com.iver.cit.gvsig.fmap.ColorEvent)
+	 */
+	public void backColorChanged(ColorEvent e) {
+		// do nothing
+	}
+
+	/**
+	 * @see ViewPortListener#projectionChanged(ProjectionEvent)
+	 *
+	 * @see MapControl#setProjection(IProjection)
+	 */
+	public void projectionChanged(ProjectionEvent e) {
+		super.setProjection(e.getNewProjection());
+
+	}
+
+	/**
+	 * <p>Unimplemented.</p>
+	 *
+	 * <p>Can't change the projection, because must be the same as the one of the
+	 *  associated <code>MapControl</code> instance.</p>
+	 */
+	public void setProjection(IProjection proj) {
+		//No permitimos cambiar la proyeccion
+		//ya que debe ser la misma que la del
+		//MapControl asociado
+		return;
+	}
+	
+	public void calculateSnapPoint(Point point) {
+	    /*
+	     * This is the behavior of a MapControl when there is no snapping.
+	     * We do the same and save a lot of computations
+	     */
+        adjustedPoint = point;
+        mapAdjustedPoint = null;
+	}
+	
+	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/MapOverview.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPage.java	(revision 42196)
@@ -0,0 +1,684 @@
+
+
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ActionListener;
+import java.util.List;
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JColorChooser;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.JComboBoxUnits;
+import org.gvsig.app.gui.panels.CRSSelectPanel;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.ProjectPreferences;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+public class GeneralViewPropertiesPage extends JPanel implements PropertiesPage {
+
+    public static final int FIXED_WIDTH = 300;
+
+    private javax.swing.JLabel jLabelName = null;
+    private javax.swing.JTextField txtName = null;
+    private javax.swing.JLabel jLabelDate = null;
+    private javax.swing.JTextField txtDate = null;
+    private javax.swing.JLabel jLabelOwner = null;
+    private javax.swing.JTextField txtOwner = null;
+    private javax.swing.JLabel jLabelMapUnits = null;
+    private javax.swing.JComboBox cmbMapUnits = null;
+    private javax.swing.JLabel jLabelDistanceUnits = null;
+    private javax.swing.JComboBox cmbDistanceUnits = null;
+    private javax.swing.JLabel jLabelAreaUnits = null;
+    private javax.swing.JTextArea txtComments = null;
+    private javax.swing.JLabel jLabelColor = null;
+    private javax.swing.JLabel jLabelComments = null;
+    private javax.swing.JPanel lblColor = null;
+
+    private JCheckBox setAsDefCrsChk = null;
+
+    private Color backColor = null;
+
+    private JButton btnColor = null;
+    private ViewDocument view = null;
+    private javax.swing.JScrollPane jScrollPane = null;
+    protected CRSSelectPanel jPanelProj = null;
+    private boolean isAcceppted = false;
+    private JComboBox cmbDistanceArea = null;
+
+    public GeneralViewPropertiesPage(ViewDocument view) {
+        this.view = view;
+        initComponents();
+    }
+
+    public boolean whenAccept() {
+        isAcceppted = true;
+        return whenApply();
+    }
+
+    public boolean whenApply() {
+        String name = txtName.getText();
+        if (name == null || name.length() == 0) {
+            return false;
+        }
+        Project project =
+            ProjectManager.getInstance().getCurrentProject();
+        List<Document> views =
+            project.getDocuments(ViewManager.TYPENAME);
+        for (Document theView : views) {
+            if (view.equals(theView)) {
+                continue;
+            }
+            if (theView.getName().equals(name)) {
+                JOptionPane.showMessageDialog(
+                    (Component) PluginServices.getMainFrame(),
+                    Messages.getText("elemento_ya_existe"));
+                return false;
+            }
+        }
+
+        //FIXME: Parche provisional para permitir guardar otras propiedades de la vista en edici�n
+        if (!view.isLocked()) {
+            view.setName(name);
+            view.setCreationDate(txtDate.getText());
+            view.setOwner(txtOwner.getText());
+            view.setComment(txtComments.getText());
+            view.getMapContext().getViewPort()
+                .setMapUnits(cmbMapUnits.getSelectedIndex());
+            view.getMapContext().getViewPort()
+                .setDistanceUnits(cmbDistanceUnits.getSelectedIndex());
+            view.getMapContext().getViewPort()
+                .setDistanceArea(cmbDistanceArea.getSelectedIndex());
+            view.setBackColor(backColor);
+
+            // Select the projection
+            if (jPanelProj.isOkPressed()) {
+                if (!jPanelProj.getCurProj().isProjected()) {
+                    getCmbMapUnits()
+                        .setSelectedItem(Messages.getText("Grados"));
+                    getCmbMapUnits().setEnabled(false);
+                } else {
+                    if (getCmbMapUnits().getSelectedItem().equals(
+                        Messages.getText("Grados"))) {
+                        getCmbMapUnits().setSelectedIndex(1);
+                    }
+                    getCmbMapUnits().setEnabled(true);
+                }
+                view.setProjection(jPanelProj.getCurProj());
+                if (getSetAsDefaultCrsCheckbox().isSelected()) {
+                    setAppDefaultCRS(jPanelProj.getCurProj().getAbrev());
+                }
+            }
+        }
+
+        return true;
+    }
+
+    public boolean whenCancel() {
+        isAcceppted = false;
+        return true;
+    }
+
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("General");
+    }
+
+    public int getPriority() {
+        return 1000;
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void initComponents() {
+        setLayout(new GridBagLayout());
+        setBorder(BorderFactory.createEmptyBorder(4, 5, 4, 5));
+
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(2, 5, 2, 5);
+        c.gridy = -1;
+
+        addRow(c, getJLabelName(), getTxtName());
+        addRow(c, getJLabelDate(), getTxtDate());
+        addRow(c, getJLabelOwner(), getTxtOwner());
+        addRow(c, getJLabelMapUnits(), getCmbMapUnits());
+        addRow(c, getJLabelDistanceUnits(), getCmbDistanceUnits());
+        addRow(c, getJLabelAreaUnits(), getCmbDistanceArea());
+
+        // some extra space
+        addRow(c, new JLabel(" "), new JLabel(" "));
+
+        GridLayout gl = new GridLayout(1,2);
+        JPanel colorPanel = new JPanel(gl);
+        colorPanel.add(getJLabelColor());
+        JPanel secondHalfPanel = new JPanel(new GridBagLayout());
+
+        GridBagConstraints c2 = new GridBagConstraints();
+
+        c2.fill = GridBagConstraints.BOTH;
+        c2.weightx = 1.0;   //request any extra hor space
+        c2.gridx = 0;
+        c2.gridwidth = 1;
+        c2.gridy = 0;
+
+        JPanel auxPanel = new JPanel(new GridLayout(1,2));
+        auxPanel.add(getLblColor(secondHalfPanel.getBackground()));
+        auxPanel.add(new JLabel(""));
+        secondHalfPanel.add(auxPanel, c2);
+
+        c2.fill = GridBagConstraints.NONE;
+        c2.weightx = 0.0;
+        c2.gridx = 1;
+        secondHalfPanel.add(getBtnColor(), c2);
+
+        colorPanel.add(secondHalfPanel);
+
+        c.gridx = 0;
+        c.gridwidth = 2;
+        c.gridy++;
+        add(colorPanel, c);
+        c.gridwidth = 1;
+
+        c.anchor = GridBagConstraints.WEST;
+        c.weightx = 0.0d;
+        c.gridx = 0;
+        c.gridwidth = GridBagConstraints.REMAINDER;
+        c.gridy++;
+        c.weightx = 1.0d;
+        c.fill = GridBagConstraints.HORIZONTAL;
+        add(getJPanelProj(), c);
+
+        // ============ set current as app default CRS
+        c.anchor = GridBagConstraints.CENTER;
+        c.gridy++;
+        JPanel auxp = new JPanel(new BorderLayout());
+        auxp.add(getSetAsDefaultCrsCheckbox(), BorderLayout.CENTER);
+        add(auxp, c);
+        // =============================
+
+        // some extra space
+        addRow(c, new JLabel(" "), new JLabel(" "));
+
+        c.anchor = GridBagConstraints.WEST;
+        c.weightx = 0.0d;
+        c.gridx = 0;
+        c.gridy++;
+        add(getJLabelComments(), c);
+
+        c.fill = GridBagConstraints.BOTH;
+        c.weightx = 1.0d;
+        c.gridy++;
+        c.gridwidth = 2;
+        add(getJScrollPaneComments(), c);
+
+    }
+
+
+    /**
+     * @return
+     */
+    private JCheckBox getSetAsDefaultCrsCheckbox() {
+
+        if (setAsDefCrsChk == null) {
+            setAsDefCrsChk = new JCheckBox(Messages.getText(
+                "_Set_this_CRS_as_app_default"));
+            updateSetAsDefaultCRSChk();
+        }
+        return setAsDefCrsChk;
+    }
+
+
+    private String getAppDefaultCRS() {
+        ProjectPreferences pp = new ProjectPreferences();
+        IProjection curr_def = pp.getDefaultProjection();
+        return curr_def.getAbrev();
+    }
+
+    private void setAppDefaultCRS(String abbrev) {
+        IProjection proj = CRSFactory.getCRS(abbrev);
+        ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+        projectPreferences.setDefaultProjection(proj);
+    }
+
+    private void updateSetAsDefaultCRSChk() {
+
+        IProjection view_proj = this.jPanelProj.getCurProj();
+        String view_abbrev = view_proj.getAbrev();
+
+        String curr_app_crs_def = getAppDefaultCRS();
+        if (view_abbrev.compareToIgnoreCase(curr_app_crs_def) == 0) {
+            // same as curr default
+            this.getSetAsDefaultCrsCheckbox().setSelected(true);
+            this.getSetAsDefaultCrsCheckbox().setEnabled(false);
+        } else {
+            this.getSetAsDefaultCrsCheckbox().setEnabled(true);
+            this.getSetAsDefaultCrsCheckbox().setSelected(false);
+        }
+    }
+
+    private void addRow(GridBagConstraints c, JComponent label, JComponent text) {
+        c.anchor = GridBagConstraints.WEST;
+        c.weightx = 0.0d;
+        c.gridx = 0;
+        c.gridy++;
+        add(label, c);
+
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0d;
+        c.gridx = 1;
+        add(text, c);
+    }
+
+
+
+    /**
+     * This method initializes jLabel
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelName() {
+        if (jLabelName == null) {
+            jLabelName =
+                new javax.swing.JLabel(Messages.getText("nombre") + ":");
+        }
+
+        return jLabelName;
+    }
+
+    /**
+     * This method initializes txtName
+     *
+     * @return javax.swing.JTextField
+     */
+    private javax.swing.JTextField getTxtName() {
+        if (txtName == null) {
+            txtName = new javax.swing.JTextField(view.getName());
+        }
+
+        return txtName;
+    }
+
+    /**
+     * This method initializes jLabel1
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelDate() {
+        if (jLabelDate == null) {
+            jLabelDate =
+                new javax.swing.JLabel(Messages.getText("creation_date") + ":");
+        }
+
+        return jLabelDate;
+    }
+
+    /**
+     * This method initializes txtDate
+     *
+     * @return javax.swing.JTextField
+     */
+    private javax.swing.JTextField getTxtDate() {
+        if (txtDate == null) {
+            txtDate = new javax.swing.JTextField(view.getCreationDate());
+            txtDate.setEditable(false);
+            txtDate.setBackground(java.awt.Color.white);
+        }
+
+        return txtDate;
+    }
+
+    /**
+     * This method initializes jLabel2
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelOwner() {
+        if (jLabelOwner == null) {
+            jLabelOwner =
+                new javax.swing.JLabel(Messages.getText("owner") + ":");
+        }
+
+        return jLabelOwner;
+    }
+
+    /**
+     * This method initializes txtOwner
+     *
+     * @return javax.swing.JTextField
+     */
+    private javax.swing.JTextField getTxtOwner() {
+        if (txtOwner == null) {
+            txtOwner = new javax.swing.JTextField(view.getOwner());
+        }
+
+        return txtOwner;
+    }
+
+    /**
+     * This method initializes jLabel4
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelMapUnits() {
+        if (jLabelMapUnits == null) {
+            jLabelMapUnits =
+                new javax.swing.JLabel(Messages.getText("map_units") + ":");
+        }
+
+        return jLabelMapUnits;
+    }
+
+    /**
+     * This method initializes cmbMapUnits
+     *
+     * @return javax.swing.JComboBox
+     */
+    private javax.swing.JComboBox getCmbMapUnits() {
+        if (cmbMapUnits == null
+            || MapContext.getDistanceNames().length > cmbMapUnits
+                .getItemCount()) {
+            cmbMapUnits = new JComboBoxUnits(false);
+
+            IProjection proj = view.getProjection();
+            if (!proj.isProjected()) {
+                cmbMapUnits.setSelectedItem(Messages.getText("Grados")); // deegree
+                cmbMapUnits.setEnabled(false);
+            } else {
+                if (!(cmbMapUnits.getItemCount() == MapContext
+                    .getDistanceNames().length)) {
+                    cmbMapUnits.removeItem(Messages.getText("Grados")); // deegree
+                    view.getMapContext().getViewPort().setMapUnits(1);
+                }
+                cmbMapUnits.setSelectedIndex(view.getMapContext().getViewPort()
+                    .getMapUnits());
+                cmbMapUnits.setEnabled(true);
+            }
+        }
+
+        return cmbMapUnits;
+    }
+
+    /**
+     * This method initializes jLabel5
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelDistanceUnits() {
+        if (jLabelDistanceUnits == null) {
+            jLabelDistanceUnits =
+                new javax.swing.JLabel(Messages.getText("distance_units") + ":");
+        }
+
+        return jLabelDistanceUnits;
+    }
+
+    /**
+     * This method initializes jLabel6
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelAreaUnits() {
+        if (jLabelAreaUnits == null) {
+            jLabelAreaUnits =
+                new javax.swing.JLabel(Messages.getText("unidades_area") + ":");
+        }
+
+        return jLabelAreaUnits;
+    }
+
+    /**
+     * This method initializes cmbDistanceUnits
+     *
+     * @return javax.swing.JComboBox
+     */
+    private javax.swing.JComboBox getCmbDistanceUnits() {
+        if (cmbDistanceUnits == null
+            || MapContext.getDistanceNames().length > cmbDistanceUnits
+                .getItemCount()) {
+            cmbDistanceUnits = new JComboBoxUnits(false);
+            cmbDistanceUnits.setSelectedIndex(view.getMapContext()
+                .getViewPort().getDistanceUnits());
+        }
+
+        return cmbDistanceUnits;
+    }
+
+    /**
+     * This method initializes jLabel6
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelComments() {
+        if (jLabelComments == null) {
+            jLabelComments =
+                new javax.swing.JLabel(Messages.getText("comentarios") + ":");
+            jLabelComments
+                .setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+            jLabelComments
+                .setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
+        }
+
+        return jLabelComments;
+    }
+
+    /**
+     * This method initializes txtComments
+     *
+     * @return javax.swing.JTextArea
+     */
+    private javax.swing.JTextArea getTxtComments() {
+        if (txtComments == null) {
+            txtComments = new javax.swing.JTextArea(view.getComment());
+            txtComments.setRows(3);
+            txtComments.setColumns(20);
+        }
+
+        return txtComments;
+    }
+
+    /**
+     * This method initializes jLabel7
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabelColor() {
+        if (jLabelColor == null) {
+            jLabelColor =
+                new javax.swing.JLabel(Messages.getText("background_color")
+                    + ":");
+        }
+
+        return jLabelColor;
+    }
+
+    /**
+     * This method initializes lblColor
+     *
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JPanel getLblColor(Color surround_color) {
+        if (lblColor == null) {
+            lblColor = new javax.swing.JPanel();
+            lblColor.setPreferredSize(new java.awt.Dimension(42, 21));
+            Color theColor = view.getMapContext().getViewPort().getBackColor();
+            backColor = theColor;
+            if (theColor == null) {
+                theColor = Color.WHITE;
+            }
+            lblColor.setBackground(theColor);
+            // lblColor.setBorder(BorderFactory.createLineBorder(surround_color, 3));
+            lblColor.setOpaque(true);
+        }
+
+        return lblColor;
+    }
+
+    /**
+     * This method initializes btnColor
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBtnColor() {
+        if (btnColor == null) {
+            btnColor = new JButton();
+            // ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+
+            btnColor.setText("...");
+
+            btnColor.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    Color ret =
+                        JColorChooser.showDialog(GeneralViewPropertiesPage.this,
+                            Messages.getText("background_color"),
+                            lblColor.getBackground());
+
+                    if (ret != null) {
+                        lblColor.setBackground(ret);
+                        backColor = ret;
+                    } else {
+                        lblColor.setBackground(Color.WHITE);
+                    }
+                }
+            });
+        }
+
+        return btnColor;
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private javax.swing.JScrollPane getJScrollPaneComments() {
+        if (jScrollPane == null) {
+            jScrollPane = new javax.swing.JScrollPane();
+            jScrollPane.setViewportView(getTxtComments());
+            Dimension dim = getTxtComments().getPreferredSize();
+            jScrollPane
+                .setMinimumSize(new Dimension(dim.width, dim.height + 10));
+        }
+
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes jPanel4
+     *
+     * @return javax.swing.JPanel
+     */
+    private CRSSelectPanel getJPanelProj() {
+        if (jPanelProj == null) {
+            IProjection proj = view.getProjection();
+            jPanelProj = CRSSelectPanel.getPanel(proj);
+            jPanelProj.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    if (jPanelProj.isOkPressed()) {
+                    	int numberOfLayers = view.getMapContext().getLayers().getLayersCount();
+                    	if(numberOfLayers > 0) {
+                    		warningViewProjectionChange();
+                    	}
+
+                        if (!jPanelProj.getCurProj().isProjected()) {
+                            getCmbMapUnits().setSelectedItem(
+                                PluginServices
+                                    .getText(this, "Grados"));
+                            getCmbMapUnits().setEnabled(false);
+                        } else {
+                            if (getCmbMapUnits().getSelectedItem().equals(
+                                PluginServices
+                                    .getText(this, "Grados"))) {
+                                getCmbMapUnits().setSelectedIndex(1);
+                            }
+                            getCmbMapUnits().setEnabled(true);
+                        }
+                        updateSetAsDefaultCRSChk();
+                    }
+                }
+            });
+        }
+        return jPanelProj;
+    }
+
+    private void warningViewProjectionChange() {
+    	JOptionPane.showMessageDialog(
+    			(Component)PluginServices.getMainFrame(),
+    			Messages.getText("view_contain_layers"));
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiManager.SingletonWindow#getWindowModel()
+     */
+    public Object getWindowModel() {
+        return view;
+    }
+
+
+    public boolean isAcceppted() {
+        return isAcceppted;
+    }
+
+    /**
+     * This method initializes jComboBox
+     *
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getCmbDistanceArea() {
+        String[] names = MapContext.getAreaNames();
+        if (cmbDistanceArea == null
+            || names.length > cmbDistanceArea.getItemCount()) {
+            for (int i = 0; i < names.length; i++) {
+                names[i] =
+                    Messages.getText(names[i]) + MapContext.getOfLinear(i);
+            }
+            cmbDistanceArea = new javax.swing.JComboBox(names);
+            cmbDistanceArea.setEditable(false);
+            cmbDistanceArea.setSelectedIndex(view.getMapContext().getViewPort()
+                .getDistanceArea());
+            cmbDistanceArea
+                .addActionListener(new java.awt.event.ActionListener() {
+
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        // view.getMapContext().getViewPort().setDistanceUnits(cmbDistanceUnits.getSelectedIndex());
+                    }
+                });
+        }
+
+        return cmbDistanceArea;
+
+    }
+
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/IView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/IView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/IView.java	(revision 42196)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.view.MapOverview;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.toc.gui.TOC;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+public interface IView extends IDocumentWindow {
+
+    public MapControl getMapControl();
+    
+    public MapOverview getMapOverview();
+
+    public TOC getTOC();
+
+    public ViewDocument getViewDocument();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/IView.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/MapOverViewPalette.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/MapOverViewPalette.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/MapOverViewPalette.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowTransform;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.view.MapOverview;
+
+public class MapOverViewPalette extends JPanel implements IWindow,
+    IWindowTransform {
+
+    private static final long serialVersionUID = 3254895082290314502L;
+    private MapOverview mov;
+    private DefaultViewPanel view;
+
+    public MapOverViewPalette(MapOverview mapOverView, IView view) {
+        super();
+        mov = mapOverView;
+        this.view = (DefaultViewPanel) view;
+        initialize();
+        this.add(mov);
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        this.setSize(300, 200);
+        this.setBackground(java.awt.SystemColor.control);
+        this.setBorder(javax.swing.BorderFactory.createLineBorder(
+            java.awt.Color.gray, 0));
+    }
+
+    public WindowInfo getWindowInfo() {
+        WindowInfo m_viewinfo =
+            new WindowInfo(WindowInfo.ICONIFIABLE | WindowInfo.MODELESSDIALOG
+                | WindowInfo.PALETTE);
+        m_viewinfo.setTitle(PluginServices.getText(this, "localizador"));
+        m_viewinfo.setWidth(mov.getWidth() + 20);
+        m_viewinfo.setHeight(mov.getHeight());
+
+        return m_viewinfo;
+    }
+
+    public void toPalette() {
+        view.toPalette();
+
+    }
+
+    public void restore() {
+        view.restore();
+
+    }
+
+    public boolean isPalette() {
+        return true;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.TOOL_PROFILE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/MapOverViewPalette.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ExtentListSelectorModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ExtentListSelectorModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ExtentListSelectorModel.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.ListModel;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+import org.gvsig.app.project.Project;
+
+public class ExtentListSelectorModel implements ListModel,
+    PropertyChangeListener {
+
+    private Project project;
+    private List<ListDataListener> listeners =
+        new ArrayList<ListDataListener>();
+
+    public ExtentListSelectorModel(Project p) {
+        project = p;
+    }
+
+    public int getSize() {
+        return project.getExtents().length;
+    }
+
+    public Object getElementAt(int arg0) {
+        return project.getExtents()[arg0];
+    }
+
+    public void addListDataListener(ListDataListener arg0) {
+        listeners.add(arg0);
+    }
+
+    public void removeListDataListener(ListDataListener arg0) {
+        listeners.remove(arg0);
+    }
+
+    public void propertyChange(PropertyChangeEvent change) {
+        if (change.getPropertyName().equals("addExtent")) {
+            ListDataEvent event =
+                new ListDataEvent(this, ListDataEvent.INTERVAL_ADDED, 0,
+                    getSize());
+            for (int i = 0; i < listeners.size(); i++) {
+                listeners.get(i).intervalAdded(event);
+            }
+        } else {
+            ListDataEvent event =
+                new ListDataEvent(this, ListDataEvent.INTERVAL_REMOVED, 0,
+                    getSize());
+            for (int i = 0; i < listeners.size(); i++) {
+                listeners.get(i).intervalRemoved(event);
+            }
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ExtentListSelectorModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerListItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerListItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerListItem.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+/**
+ * Utility class to use in Swing layer lists
+ * 
+ * @author jldominguez
+ *
+ */
+public class LayerListItem {
+    
+    private FLayer layer = null;
+    
+    public LayerListItem(FLayer lyr) {
+        layer = lyr;
+    }
+    
+    public FLayer getLayer() {
+        return layer;
+    }
+    
+    public String toString() {
+        if (layer == null) {
+            return "[Null]";
+        } else {
+            return layer.getName();
+        }
+    }
+    
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewProperties.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.Dimension;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.i18n.Messages;
+import org.gvsig.propertypage.BasePropertiesPageDialog;
+
+/**
+ * Dialogo donde se muestran las propiedades de una vista
+ * 
+ * @author gvSIG Team
+ */
+public class ViewProperties extends BasePropertiesPageDialog implements SingletonWindow {
+
+    private static final long serialVersionUID = 5328865370833315385L;
+    private ViewDocument viewDocument;
+    
+    /**
+     * This is the default constructor
+     * 
+     * @param viewDocument
+     *            Vista que se representa
+     */
+    public ViewProperties(ViewDocument viewDocument) {
+        this.viewDocument = viewDocument;
+        this.init(ViewDocument.VIEW_PROPERTIES_PAGE_GROUP,viewDocument);
+    }
+
+    @Override
+    protected boolean useTabsAlwais() {
+        return super.useTabsAlwais();
+        // return true;
+    }
+
+    
+    public boolean isAcceppted() {
+        return this.getUserAction()==BasePropertiesPageDialog.ACTION_ACCEPT;
+    }
+
+    public Object getWindowModel() {
+        return viewDocument;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.PROPERTIES_PROFILE;
+    }
+    
+    public WindowInfo getWindowInfo() {
+        WindowInfo m_viewinfo = new WindowInfo(
+                WindowInfo.RESIZABLE |
+                WindowInfo.MAXIMIZABLE |
+                WindowInfo.MAXIMIZABLE |
+                WindowInfo.ICONIFIABLE
+        );
+        
+        this.validate();
+        m_viewinfo.setTitle(Messages.getText("propiedades_vista"));
+        Dimension dim = getPreferredSize();
+        m_viewinfo.setWidth(dim.width);
+        m_viewinfo.setHeight(dim.height);
+        return m_viewinfo;
+    }    
+
+    @Override
+    protected void closeDialog() {
+        PluginServices.getMDIManager().closeWindow(this);
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelLocConfig.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelLocConfig.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelLocConfig.java	(revision 42196)
@@ -0,0 +1,491 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.plaf.basic.BasicArrowButton;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.extension.AddLayer;
+import org.gvsig.app.project.documents.view.MapOverview;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.operations.Classifiable;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ * @author FJP
+ * 
+ *         TODO To change the template for this generated type comment go to
+ *         Window - Preferences - Java - Code Generation - Code and Comments
+ */
+public class FPanelLocConfig extends JPanel implements ActionListener, IWindow {
+
+    private static Logger logger = LoggerFactory.getLogger(FPanelLocConfig.class);
+    private static final long serialVersionUID = -3331364698732098356L;
+    private javax.swing.JLabel jLabel = null;
+    private javax.swing.JList jList = null; // @jve:decl-index=0:visual-constraint="390,10"
+    private JButton jBtnAddLayer = null; //
+    private JButton jBtnRemoveLayer = null;
+    private JButton jBtnEditLegend = null;
+    private JButton jBtnCancel = null;
+
+    private MapControl mapCtrl;
+    private WindowInfo m_viewinfo = null;
+    private JPanel pnlButtons = null; // @jve:decl-index=0:visual-constraint="10,159"
+    private BasicArrowButton jBtnUp;
+    private BasicArrowButton jBtnDown;
+
+    /**
+     * This is the default constructor
+     */
+    public FPanelLocConfig(MapControl mc) {
+        super();
+        mapCtrl = mc;
+        initialize();
+        refreshList();
+        updateControls(null);
+    }
+
+    private void refreshList() {
+        
+        DefaultListModel listModel = (DefaultListModel) getJList().getModel();
+        listModel.removeAllElements();
+
+        int index = 0;
+        for (int i = mapCtrl.getMapContext().getLayers().getLayersCount() - 1; i >= 0; i--) {
+            FLayer lyr = mapCtrl.getMapContext().getLayers().getLayer(i);
+            listModel.add(index++, new LayerListItem(lyr));
+        }
+    }
+    
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        
+        this.setLayout(new BorderLayout());
+        
+        this.add(getJLabel(), BorderLayout.NORTH);
+        this.add(getJList(), BorderLayout.CENTER);
+        
+        JPanel eastp = new JPanel(new BorderLayout());
+        eastp.add(getJBtnUp(), BorderLayout.NORTH);
+        eastp.add(getJBtnDown(), BorderLayout.SOUTH);
+        this.add(eastp, BorderLayout.EAST);
+        
+        this.add(getJPanel(), BorderLayout.SOUTH);
+    }
+
+    /**
+     * This method initializes jLabel
+     * 
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabel() {
+        if (jLabel == null) {
+            jLabel = new javax.swing.JLabel();
+            
+            jLabel.setBorder(BorderFactory.createEmptyBorder(8,4,8,8));
+            
+            jLabel.setText(PluginServices
+                .getText(this, "Capas_del_localizador") + ":");
+        }
+        return jLabel;
+    }
+
+    /**
+     * This method initializes jList
+     * 
+     * @return javax.swing.JList
+     */
+    public javax.swing.JList getJList() {
+        if (jList == null) {
+            
+            jList = new javax.swing.JList(new DefaultListModel());            
+            jList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+            jList.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+            jList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+
+                    public void valueChanged(
+                        javax.swing.event.ListSelectionEvent e) {
+                        updateControls(e);
+                    }
+                });
+
+        }
+        return jList;
+    }
+
+    private void updateControls(javax.swing.event.ListSelectionEvent e) {
+
+        DefaultListModel lstModel = (DefaultListModel) getJList().getModel();
+        
+        int selIndex = jList.getSelectedIndex();
+        jBtnDown.setEnabled(false);
+        jBtnUp.setEnabled(false);
+
+        if (selIndex != -1) {
+            if (lstModel.getSize() > 1) {
+                if (selIndex < (lstModel.getSize() - 1)) {
+                    jBtnDown.setEnabled(true);
+                }
+
+                if (selIndex > 0) {
+                    jBtnUp.setEnabled(true);
+                }
+            }
+        }
+        
+        jBtnRemoveLayer.setEnabled(selIndex != -1);
+        jBtnEditLegend.setEnabled(selIndex != -1);
+    }
+
+    /**
+     * This method initializes jBtnUp
+     * 
+     * @return JButton
+     */
+    private BasicArrowButton getJBtnUp() {
+        if (jBtnUp == null) {
+            jBtnUp =
+                new javax.swing.plaf.basic.BasicArrowButton(
+                    javax.swing.SwingConstants.NORTH);
+            jBtnUp.setToolTipText(PluginServices.getText(this, "Subir_capa"));
+            jBtnUp.addActionListener(this);
+            jBtnUp.setActionCommand("UP");
+
+        }
+        return jBtnUp;
+    }
+
+    /**
+     * This method initializes jBtnDown
+     * 
+     * @return JButton
+     */
+    private BasicArrowButton getJBtnDown() {
+        if (jBtnDown == null) {
+            jBtnDown =
+                new javax.swing.plaf.basic.BasicArrowButton(
+                    javax.swing.SwingConstants.SOUTH);
+            jBtnDown.setToolTipText(PluginServices.getText(this, "Bajar_capa"));
+            jBtnDown.setActionCommand("DOWN");
+            jBtnDown.addActionListener(this);
+        }
+        return jBtnDown;
+    }
+
+    /**
+     * This method initializes jButton2
+     * 
+     * @return JButton
+     */
+    private JButton getJBtnAddLayer() {
+        if (jBtnAddLayer == null) {
+            jBtnAddLayer =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnAddLayer.setText(PluginServices.getText(this, "Anadir_capa")
+                + "...");
+            jBtnAddLayer.addActionListener(this);
+            jBtnAddLayer.setActionCommand("ADD_LAYER");
+        }
+        return jBtnAddLayer;
+    }
+
+    /**
+     * This method initializes jBtnRemoveLayer
+     * 
+     * @return JButton
+     */
+    private JButton getJBtnRemoveLayer() {
+        if (jBtnRemoveLayer == null) {
+            jBtnRemoveLayer =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnRemoveLayer.setText(PluginServices.getText(this, "Quitar_capa"));
+            jBtnRemoveLayer.addActionListener(this);
+            jBtnRemoveLayer.setActionCommand("REMOVE_LAYER");
+
+        }
+        return jBtnRemoveLayer;
+    }
+
+    /**
+     * This method initializes jBtnEditLegend
+     * 
+     * @return JButton
+     */
+    private JButton getJBtnEditLegend() {
+        if (jBtnEditLegend == null) {
+            jBtnEditLegend =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnEditLegend.setText(PluginServices.getText(this,
+                "Editar_leyenda") + "...");
+            jBtnEditLegend.addActionListener(this);
+            jBtnEditLegend.setActionCommand("EDIT_LEGEND");
+        }
+        return jBtnEditLegend;
+    }
+
+    /**
+     * This method initializes jBtnCancel
+     * 
+     * @return JButton
+     */
+    private JButton getJBtnCancel() {
+        if (jBtnCancel == null) {
+            jBtnCancel =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            jBtnCancel.setText(PluginServices.getText(this, "Cerrar"));
+            jBtnCancel.setActionCommand("CANCEL");
+            jBtnCancel.addActionListener(this);
+
+        }
+        return jBtnCancel;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        DefaultListModel lstModel = (DefaultListModel) getJList().getModel();
+        FLayers theLayers = mapCtrl.getMapContext().getLayers();
+
+        int numLayers = theLayers.getLayersCount() - 1;
+
+        if (e.getActionCommand() == "CANCEL") {
+            if (PluginServices.getMainFrame() != null) {
+                PluginServices.getMDIManager()
+                    .closeWindow(FPanelLocConfig.this);
+            } else {
+                ((JDialog) (getParent().getParent().getParent().getParent()))
+                    .dispose();
+            }
+        }
+        if (e.getActionCommand() == "ADD_LAYER") {
+            AddLayer addLayer =
+                (AddLayer) PluginServices.getExtension(AddLayer.class);
+
+            if (addLayer.addLayers(mapCtrl)) {
+                RefreshThread st = new RefreshThread(500);
+                st.start();
+            }
+            if (mapCtrl instanceof MapOverview) {
+                ((MapOverview) mapCtrl).refreshExtent();
+            }
+
+        }
+        if (e.getActionCommand() == "REMOVE_LAYER") {
+            if (jList.getSelectedIndex() != -1) {
+                
+                LayerListItem lli = (LayerListItem)
+                    lstModel.get(jList.getSelectedIndex());
+                
+                theLayers.removeLayer(lli.getLayer());
+                
+                lstModel.remove(jList.getSelectedIndex());
+
+                updateControls(null);
+                if (mapCtrl instanceof MapOverview) {
+                    ((MapOverview) mapCtrl).refreshExtent();
+                }
+            }
+        }
+        if (e.getActionCommand() == "EDIT_LEGEND") {
+            int idSelec = jList.getSelectedIndex();
+            if (idSelec != -1) {
+                
+                LayerListItem lli = (LayerListItem) lstModel.get(idSelec);
+                FLayer lyr = lli.getLayer();
+                
+                if (lyr instanceof Classifiable) {
+                    LayerProperties dlg = new LayerProperties(lyr);
+                    WindowManager wm = ToolsSwingLocator.getWindowManager();
+                    wm.showWindow(
+                            dlg.asJComponent(), 
+                            ToolsLocator.getI18nManager().getTranslation("propiedades_de_la_capa"), 
+                            WindowManager.MODE.DIALOG
+                    );
+
+                } else {
+                    JOptionPane.showMessageDialog(
+                        null,
+                        PluginServices.getText(this,
+                            "Solo_para_capas_vectoriales") + ".");
+                }
+
+            }
+
+        }
+        if (e.getActionCommand() == "UP") {
+            int idSelec = jList.getSelectedIndex();
+            int fromIndex = idSelec;
+            int toIndex = idSelec - 1;
+            
+            LayerListItem lli = (LayerListItem) lstModel.get(fromIndex);
+            
+            try {
+                theLayers.moveTo(numLayers - fromIndex, numLayers - toIndex);
+            } catch (CancelationException e1) {
+                e1.printStackTrace();
+            }
+
+            lstModel.remove(fromIndex);
+            lstModel.add(toIndex, lli);
+
+            jList.setSelectedIndex(toIndex);
+        }
+        if (e.getActionCommand() == "DOWN") {
+            int idSelec = jList.getSelectedIndex();
+            int fromIndex = idSelec;
+            int toIndex = idSelec + 1;
+            
+            LayerListItem lli = (LayerListItem) lstModel.get(fromIndex);
+            
+            try {
+                theLayers.moveTo(numLayers - fromIndex, numLayers - toIndex);
+            } catch (CancelationException e1) {
+                e1.printStackTrace();
+            }
+
+            lstModel.remove(fromIndex);
+            lstModel.add(toIndex, lli);
+
+            jList.setSelectedIndex(toIndex);
+        }
+
+    }
+
+    public WindowInfo getWindowInfo() {
+        if (m_viewinfo == null) {
+            m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG);
+            m_viewinfo.setTitle(PluginServices.getText(this,
+                "Configurar_localizador"));
+            
+            m_viewinfo.setWidth(400);
+            m_viewinfo.setHeight(200);
+        }
+        return m_viewinfo;
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#windowActivated()
+     */
+    public void viewActivated() {
+    }
+
+    /**
+     * This method initializes jPanel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel() {
+        if (pnlButtons == null) {
+            pnlButtons = new JPanel(new GridLayout(2, 3, 8, 4));
+            pnlButtons.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));
+            
+            pnlButtons.add(getJBtnAddLayer());
+            pnlButtons.add(new JLabel());
+            pnlButtons.add(new JLabel());
+            
+            pnlButtons.add(getJBtnRemoveLayer());
+            pnlButtons.add(getJBtnEditLegend());
+            pnlButtons.add(getJBtnCancel());
+        }
+        return pnlButtons;
+    }
+
+    /**
+     * Obtiene el MapControl asociado al localizador
+     * 
+     * @return MapControl
+     */
+    public MapControl getMapCtrl() {
+        return mapCtrl;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+    
+    
+    class RefreshThread extends Thread {
+        
+        private int waitt = 0;
+        
+        public RefreshThread(int t) {
+            waitt = t;
+        }
+        public void run() {
+            
+            try {
+                /*
+                 * We might need to wait a bit because the GUI thread needs
+                 * some time to update (this is because we have used a modal dialog
+                 * and we refresh after that dialog is closed)
+                 */
+                Thread.sleep(waitt);
+            } catch (Exception exc) {
+                
+            }
+            
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    try {
+                        refreshList();
+                        updateControls(null);
+                    } catch (Exception exc) {
+                        logger.info("Error while refreshing components.", exc);
+                    }
+                }
+            });
+        }
+    }
+
+}
+
+// @jve:visual-info decl-index=0 visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelLocConfig.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerProperties.java	(revision 42196)
@@ -0,0 +1,51 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.Dimension;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.propertypage.BasePropertiesPageDialog;
+
+/**
+ * Dialogo donde se muestran las propiedades de una capa
+ * 
+ * @author gvSIG Team
+ */
+public class LayerProperties extends BasePropertiesPageDialog {
+
+    private static final long serialVersionUID = 5328865370833315385L;
+    
+    public LayerProperties(FLayer layer) {
+        super(layer,ViewDocument.LAYER_PROPERTIES_PAGE_GROUP);
+        this.setPreferredSize(new Dimension(778, 570));
+    }
+
+    @Override
+    protected boolean useTabsAlwais() {
+        return super.useTabsAlwais();
+        // return true;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPageFactory.java	(revision 42196)
@@ -0,0 +1,24 @@
+
+package org.gvsig.app.project.documents.view.gui;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+public class GeneralViewPropertiesPageFactory implements PropertiesPageFactory {
+
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    public PropertiesPage create(Object obj) {
+        return new GeneralViewPropertiesPage((ViewDocument)obj);
+    }
+
+    public String getGroupID() {
+        return ViewDocument.VIEW_PROPERTIES_PAGE_GROUP;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/AbstractViewPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/AbstractViewPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/AbstractViewPanel.java	(revision 42196)
@@ -0,0 +1,349 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import javax.swing.JComponent;
+
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindowTransform;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.gui.WindowLayout;
+import org.gvsig.app.project.documents.view.MapOverview;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.toc.gui.TOC;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.utils.exceptionHandling.ExceptionListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author 2005- Vicente Caballero
+ * @author 2009- Joaquin del Cerro
+ * 
+ */
+
+public abstract class AbstractViewPanel extends JPanel implements IView,
+    IWindowTransform, PropertyChangeListener, Component {
+
+	private static final Logger logger = LoggerFactory.getLogger(AbstractViewPanel.class);
+	
+    private static final long serialVersionUID = -259620280790490262L;
+
+    private static final int DEFAULT_HEIGHT = 450;
+
+    private static final int DEFAULT_WIDTH = 700;
+
+    protected MapControl m_MapControl;
+    protected MapOverview m_MapLoc;
+
+    // store the properties of the window
+    protected WindowInfo m_viewInfo = null;
+    protected WindowLayout windowLayout = null;
+
+    protected TOC m_TOC;
+    protected ViewDocument modelo;
+    protected ViewExceptionListener mapControlExceptionListener =
+        new ViewExceptionListener();
+
+    protected boolean isPalette = false;
+    protected MapOverViewPalette movp;
+    protected ViewSplitPane tempMainSplit = null;
+    protected JSplitPane tempSplitToc = null;
+
+    
+    // This class is to temporarily solve a problem with jcrs 
+    private class ViewProjectionContainer implements org.gvsig.andami.ProjectionContainerManager.ProjectionContainer {
+		public Object getCurrentProjection() {
+			return getProjection();
+		}
+		public void set() {
+	    	org.gvsig.andami.ProjectionContainerManager.set(this);
+		}
+		public void unset() {
+			org.gvsig.andami.ProjectionContainerManager.unset(this);
+		}
+    }
+    private ViewProjectionContainer viewProjectionContainer = new ViewProjectionContainer();
+    
+	public void windowActivated() {
+        // This code is to temporarily solve a problem with jcrs 
+    	viewProjectionContainer.set();
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public void toPalette() {
+        // By default do nothing
+    }
+
+    public void restore() {
+        // By default do nothing
+    }
+
+    protected class ViewSplitPane extends JSplitPane {
+
+        private static final long serialVersionUID = -7506953938664812652L;
+        private int lastDivider = 0;
+
+        public ViewSplitPane(int horizontal_split) {
+            super(horizontal_split);
+        }
+
+        protected void paintChildren(Graphics g) {
+            if (lastDivider != lastDividerLocation) {
+            	logger.debug("paintChildren = "+ this.lastDividerLocation);
+                lastDivider = lastDividerLocation;
+            }
+            super.paintChildren(g);
+        }
+
+    }
+
+    /**
+     * Creates a new View object. Before using it, it must be initialized
+     * using the <code>initialize()</code> method.
+     * 
+     * @see initialize()
+     */
+    public AbstractViewPanel() {
+    	ProjectManager.getInstance().getCurrentProject().addPropertyChangeListener(this);
+    }
+
+    /**
+     * Create the internal componentes and populate the window with them.
+     * If the layout properties were set using the
+     * <code>setWindowData(WindowData)</code> method, the window will be
+     * populated according to this
+     * properties.
+     */
+    protected void initialize() {
+        // Do nothing
+    }
+
+    /**
+     * This method is used to get <strong>an initial</strong> ViewInfo object
+     * for this View. It is not intended to retrieve the ViewInfo object in a
+     * later time. <strong>Use PluginServices.getMDIManager().getViewInfo(view)
+     * to retrieve the ViewInfo object at any time after the creation of the
+     * object.
+     * 
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        if (m_viewInfo == null) {
+            m_viewInfo =
+                new WindowInfo(WindowInfo.ICONIFIABLE | WindowInfo.RESIZABLE
+                    | WindowInfo.MAXIMIZABLE);
+
+            m_viewInfo.setWidth(DEFAULT_WIDTH);
+            m_viewInfo.setHeight(DEFAULT_HEIGHT);
+            m_viewInfo.setTitle(PluginServices.getText(this, "Vista") + ": "
+                + modelo.getName());
+        }
+        return m_viewInfo;
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiManager.IWindowListener#windowClosed()
+     */
+    public void windowClosed() {
+    	viewProjectionContainer.unset();
+        if (movp != null) {
+            PluginServices.getMDIManager().closeWindow(movp);
+        }
+        if (modelo != null) {
+            modelo.setWindowLayout(this.getWindowLayout());
+        }
+    }
+
+    /**
+     * @deprecated See {@link #getViewDocument()}
+     */
+    public ViewDocument getModel() {
+        return modelo;
+    }
+
+    public ViewDocument getViewDocument() {
+        return modelo;
+    }
+
+    public MapOverview getMapOverview() {
+        return m_MapLoc;
+    }
+
+    public MapControl getMapControl() {
+        return m_MapControl;
+    }
+
+    public TOC getTOC() {
+        return m_TOC;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.mdiApp.ui.MDIManager.SingletonView#getModel()
+     */
+
+    public Object getWindowModel() {
+        return modelo;
+    }
+
+    /**
+     * This method is used to get <strong>an initial</strong> ViewInfo object
+     * for this View. It is not intended to retrieve the ViewInfo object in a
+     * later time. <strong>Use PluginServices.getMDIManager().getViewInfo(view)
+     * to retrieve the ViewInfo object at any time after the creation of the
+     * object.
+     * 
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
+     */
+
+    public boolean isPalette() {
+        return isPalette;
+    }
+
+    public void repaintMap() {
+        m_MapControl.drawMap(false);
+    }
+
+    public class ViewExceptionListener implements ExceptionListener {
+
+        /**
+         * @see com.iver.cit.gvsig.fmap.ExceptionListener#exceptionThrown(java.lang.Throwable)
+         */
+        public void exceptionThrown(Throwable t) {
+            NotificationManager.addError(t.getMessage(), t);
+        }
+
+    }
+
+    /**
+     * @return
+     */
+    public BufferedImage getImage() {
+        return m_MapControl.getImage();
+    }
+
+    public void setProjection(IProjection proj) {
+        getMapControl().setProjection(proj);
+    }
+
+    public IProjection getProjection() {
+        return getMapControl().getProjection();
+    }
+
+    public WindowLayout getWindowLayout() {
+        if (windowLayout == null) {
+            windowLayout = new WindowLayout();
+        }
+        windowLayout.set("MainWindow.X", Integer.toString(this.getX()));
+        windowLayout.set("MainWindow.Y", Integer.toString(this.getY()));
+        windowLayout.set("MainWindow.Width", Integer.toString(this.getWidth()));
+        windowLayout.set("MainWindow.Height",
+            Integer.toString(this.getHeight()));
+
+        windowLayout.set("MainDivider.Location",
+            Integer.toString(tempMainSplit.getDividerLocation()));
+        windowLayout.set("MainDivider.X",
+            Integer.toString(tempMainSplit.getX()));
+        windowLayout.set("MainDivider.Y",
+            Integer.toString(tempMainSplit.getY()));
+        windowLayout.set("MainDivider.Width",
+            Integer.toString(tempMainSplit.getWidth()));
+        windowLayout.set("MainDivider.Height",
+            Integer.toString(tempMainSplit.getHeight()));
+
+        if (isPalette()) {
+            windowLayout.set("GraphicLocator.isPalette", "true");
+        } else {
+            windowLayout.set("GraphicLocator.isPalette", "false");
+            if (tempSplitToc != null) {
+                windowLayout.set("TOCDivider.Location",
+                    Integer.toString(tempSplitToc.getDividerLocation()));
+                windowLayout.set("TOCDivider.X",
+                    Integer.toString(tempSplitToc.getX()));
+                windowLayout.set("TOCDivider.Y",
+                    Integer.toString(tempSplitToc.getY()));
+                windowLayout.set("TOCDivider.Width",
+                    Integer.toString(tempSplitToc.getWidth()));
+                windowLayout.set("TOCDivider.Height",
+                    Integer.toString(tempSplitToc.getHeight()));
+            }
+        }
+        if (m_TOC != null) {
+            windowLayout.set("TOC.Width", Integer.toString(m_TOC.getWidth()));
+            windowLayout.set("TOC.Height", Integer.toString(m_TOC.getHeight()));
+        }
+        if (m_MapControl != null) {
+            windowLayout.set("MapControl.Width",
+                Integer.toString(m_MapControl.getWidth()));
+            windowLayout.set("MapControl.Height",
+                Integer.toString(m_MapControl.getHeight()));
+        }
+        if (m_MapLoc != null) {
+            windowLayout.set("GraphicLocator.Width",
+                Integer.toString(m_MapLoc.getWidth()));
+            windowLayout.set("GraphicLocator.Height",
+                Integer.toString(m_MapLoc.getHeight()));
+        }
+
+        return windowLayout;
+    }
+
+    public void setWindowLayout(WindowLayout data) {
+        windowLayout = data;
+    }
+    
+	public void propertyChange(PropertyChangeEvent evt) {
+		// Detect when the related document has been removed
+		// and close or dispose whatever is needed
+		if ("delDocument".equals(evt.getPropertyName())) {
+			if (evt.getOldValue() != null
+					&& evt.getOldValue() instanceof ViewDocument) {
+				ViewDocument viewDocument = (ViewDocument) evt.getOldValue();
+				ViewDocument myViewDocument = getViewDocument();
+				if (myViewDocument != null
+						&& myViewDocument.equals(viewDocument)) {
+					m_MapControl.dispose();
+					m_MapLoc.dispose();
+				}
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/AbstractViewPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelExtentSelector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelExtentSelector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelExtentSelector.java	(revision 42196)
@@ -0,0 +1,358 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.ListModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.view.ListSelectorListener;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class FPanelExtentSelector extends JPanel implements IWindow {
+
+    private static final long serialVersionUID = -8246729582621010542L;
+    private javax.swing.JScrollPane jScrollPane = null;
+    private javax.swing.JList lista = null;
+    private JButton btnAceptar = null;
+    private ListModel modelo = null;
+    private List<ListSelectorListener> selectionListeners =
+        new ArrayList<ListSelectorListener>();
+    private JButton btnEliminar = null;
+    private javax.swing.JPanel jPanel = null;
+    private javax.swing.JPanel jPanel1 = null;
+    private javax.swing.JLabel jLabel = null;
+    private javax.swing.JTextField txtGuardar = null;
+    private JButton btnGuardar = null;
+    private WindowInfo m_viewinfo = null;
+    private JPanel jPanel2 = null;
+    private JPanel jPanel3 = null;
+
+    /**
+     * This is the default constructor
+     */
+    public FPanelExtentSelector() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(new java.awt.Dimension(530, 320));
+        this.add(getJPanel(), java.awt.BorderLayout.NORTH);
+        this.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
+
+    }
+
+    /**
+     * This method initializes jScrollPane
+     * 
+     * @return javax.swing.JScrollPane
+     */
+    private javax.swing.JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new javax.swing.JScrollPane();
+            jScrollPane.setViewportView(getLista());
+            jScrollPane.setBounds(11, 26, 508, 150);
+            jScrollPane.setPreferredSize(new java.awt.Dimension(400, 150));
+        }
+
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes lista
+     * 
+     * @return javax.swing.JList
+     */
+    private javax.swing.JList getLista() {
+        if (lista == null) {
+            lista = new javax.swing.JList();
+        }
+
+        return lista;
+    }
+
+    /**
+     * Asigna el el array que se va a representar. Se crea una
+     * copia del modelo, de forma que modificaciones en el modelo
+     * fuera de esta clase ya no afectan al modelo copiado
+     * 
+     * @param model
+     *            DOCUMENT ME!
+     */
+    public void setModel(ListModel model) {
+        // modelo de la lista
+        modelo = model;
+        getLista().setModel(modelo);
+    }
+
+    public void addSelectionListener(ListSelectorListener listener) {
+        getSelectionListeners().add(listener);
+    }
+
+    public void removeSelectionListener(ListSelectorListener listener) {
+        getSelectionListeners().remove(listener);
+    }
+
+    private void callIndexesRemoved(int[] indices) {
+        for (int i = 0; i < selectionListeners.size(); i++) {
+            selectionListeners.get(i).indexesRemoved(indices);
+        }
+    }
+
+    private void callIndexesSelected(int[] indices) {
+        for (int i = 0; i < selectionListeners.size(); i++) {
+            selectionListeners.get(i).indexesSelected(indices);
+        }
+    }
+
+    private void callNewElement(String name) {
+        for (int i = 0; i < selectionListeners.size(); i++) {
+            selectionListeners.get(i).newElement(name);
+        }
+    }
+
+    /**
+     * This method initializes btnAceptar
+     * 
+     * @return JButton
+     */
+    private JButton getBtnAceptar() {
+        if (btnAceptar == null) {
+            btnAceptar =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            btnAceptar.setText(PluginServices.getText(this, "Seleccionar"));
+            btnAceptar.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    int[] indices = lista.getSelectedIndices();
+
+                    if (indices.length != 0) {
+                        callIndexesSelected(indices);
+                    }
+                }
+            });
+        }
+
+        return btnAceptar;
+    }
+
+    /**
+     * @return
+     */
+    private List<ListSelectorListener> getSelectionListeners() {
+        return selectionListeners;
+    }
+
+    /**
+     * This method initializes btnEliminar
+     * 
+     * @return JButton
+     */
+    private JButton getBtnEliminar() {
+        if (btnEliminar == null) {
+            btnEliminar =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            btnEliminar.setText(PluginServices.getText(this, "Eliminar"));
+            btnEliminar.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    int[] indices = lista.getSelectedIndices();
+
+                    if (indices.length != 0) {
+                        callIndexesRemoved(indices);
+                    }
+                }
+            });
+        }
+        return btnEliminar;
+    }
+
+    /**
+     * This method initializes jPanel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private javax.swing.JPanel getJPanel() {
+        if (jPanel == null) {
+            jPanel = new javax.swing.JPanel();
+            jPanel.setLayout(null);
+
+            jPanel.add(getJLabel(), null);
+            jPanel.add(getTxtGuardar(), null);
+            jPanel.setPreferredSize(new java.awt.Dimension(530, 100));
+            jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
+                PluginServices.getText(this, "Guardar_el_zoom_actual"),
+                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+            jPanel.add(getJPanel3(), null);
+        }
+        return jPanel;
+    }
+
+    /**
+     * This method initializes jPanel1
+     * 
+     * @return javax.swing.JPanel
+     */
+    private javax.swing.JPanel getJPanel1() {
+        if (jPanel1 == null) {
+            jPanel1 = new javax.swing.JPanel();
+            jPanel1.setLayout(null);
+            jPanel1.add(getJScrollPane(), null);
+            jPanel1.setPreferredSize(new java.awt.Dimension(530, 220));
+            jPanel1
+                .setBorder(javax.swing.BorderFactory.createTitledBorder(null,
+                    PluginServices.getText(this,
+                        "Recuperar_y_eliminar_otros_zoom"),
+                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
+                    null));
+            jPanel1.add(getJPanel2(), null);
+        }
+        return jPanel1;
+    }
+
+    /**
+     * This method initializes jLabel
+     * 
+     * @return javax.swing.JLabel
+     */
+    private javax.swing.JLabel getJLabel() {
+        if (jLabel == null) {
+            jLabel = new javax.swing.JLabel();
+            jLabel.setBounds(7, 35, 248, 16);
+            jLabel.setText(PluginServices.getText(this,
+                "Nombre_que_se_le_dara_al_zoom") + ":");
+        }
+        return jLabel;
+    }
+
+    /**
+     * This method initializes txtGuardar
+     * 
+     * @return javax.swing.JTextField
+     */
+    private javax.swing.JTextField getTxtGuardar() {
+        if (txtGuardar == null) {
+            txtGuardar = new javax.swing.JTextField();
+            txtGuardar.setBounds(250, 34, 269, 20);
+            txtGuardar.setPreferredSize(new java.awt.Dimension(330, 20));
+        }
+        return txtGuardar;
+    }
+
+    /**
+     * This method initializes btnGuardar
+     * 
+     * @return JButton
+     */
+    private JButton getBtnGuardar() {
+        if (btnGuardar == null) {
+            btnGuardar =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            btnGuardar.setText(PluginServices.getText(this, "Guardar"));
+            btnGuardar.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    String text = txtGuardar.getText().trim();
+                    if (text.length() > 0) {
+                        callNewElement(text);
+                    }
+                }
+            });
+        }
+        return btnGuardar;
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        if (m_viewinfo == null) {
+            m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG);
+            m_viewinfo.setWidth(this.getWidth() + 8);
+            m_viewinfo.setHeight(this.getHeight());
+            m_viewinfo.setTitle(PluginServices.getText(this, "Encuadre"));
+        }
+        return m_viewinfo;
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#windowActivated()
+     */
+    public void viewActivated() {
+    }
+
+    /**
+     * This method initializes jPanel2
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel2() {
+        if (jPanel2 == null) {
+            jPanel2 = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 5));
+            jPanel2.setBounds(new java.awt.Rectangle(11, 180, 508, 33));
+            jPanel2.add(getBtnAceptar(), null);
+            jPanel2.add(getBtnEliminar(), null);
+        }
+        return jPanel2;
+    }
+
+    /**
+     * This method initializes jPanel3
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel3() {
+        if (jPanel3 == null) {
+            jPanel3 = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 5));
+            jPanel3.setBounds(new java.awt.Rectangle(8, 59, 511, 33));
+            jPanel3.add(getBtnGuardar(), null);
+        }
+        return jPanel3;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.TOOL_PROFILE;
+    }
+
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelExtentSelector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewPanel.java	(revision 42196)
@@ -0,0 +1,592 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.swing.JSplitPane;
+import javax.swing.SwingUtilities;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiFrame.NewStatusBar;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.DefaultProject;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.view.MapOverview;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.toc.gui.TOC;
+import org.gvsig.app.project.documents.view.toolListeners.AreaListener;
+import org.gvsig.app.project.documents.view.toolListeners.InfoListener;
+import org.gvsig.app.project.documents.view.toolListeners.MeasureListener;
+import org.gvsig.app.project.documents.view.toolListeners.PanListener;
+import org.gvsig.app.project.documents.view.toolListeners.PointSelectListener;
+import org.gvsig.app.project.documents.view.toolListeners.PolygonSelectListener;
+import org.gvsig.app.project.documents.view.toolListeners.RectangleSelectListener;
+import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
+import org.gvsig.app.project.documents.view.toolListeners.ZoomInListener;
+import org.gvsig.app.project.documents.view.toolListeners.ZoomOutListener;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.events.ColorEvent;
+import org.gvsig.fmap.mapcontext.events.ExtentEvent;
+import org.gvsig.fmap.mapcontext.events.ProjectionEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.ViewPortListener;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlCreationException;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.MouseMovementBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.MouseWheelBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.MoveBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PolygonBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PolylineBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.utils.console.JConsole;
+import org.gvsig.utils.console.JDockPanel;
+import org.gvsig.utils.console.ResponseListener;
+import org.gvsig.utils.console.jedit.JEditTextArea;
+
+/**
+ * <p>
+ * <b>Class View</b>. This class represents the gvSIG specific internal window
+ * where the maps are displayed and where the events coming from the user are
+ * captured.
+ * </p>
+ * <p>
+ * It is composed by three main visual areas:
+ * </p>
+ * <ol>
+ * <li>
+ * <b>Map control</b>: the map area located in the right area of the window. It
+ * takes up the biggest part of the window.</li>
+ * <li>
+ * <b>Table of contents (TOC)</b>: is a list of layers displayed in the view.
+ * The TOC is located on the left-top corner of the View and is the place where
+ * the user can modify the order, the legends, the visibility and other
+ * properties of the layers.</li>
+ * <li>
+ * <b>Map overview</b>: is a small MapControl located in the left-bottom corner
+ * of the View where the user can put some layers which summarizes the view. It
+ * is used to make the navigation easier and faster.</li>
+ * </ol>
+ *
+ * @author 2005- Vicente Caballero
+ * @author 2009- Joaquin del Cerro
+ *
+ */
+public class DefaultViewPanel extends AbstractViewPanel implements Observer {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -4044661458841786519L;
+
+    private JConsole console;
+    private JDockPanel dockConsole = null;
+    protected ResponseAdapter consoleResponseAdapter = new ResponseAdapter();
+    protected boolean isShowConsole = false;
+    private ViewPortListener viewPortListener;
+
+    private static MapControlManager mapControlManager = MapControlLocator
+            .getMapControlManager();
+
+    /**
+     * Creates a new View object. Before being used, the object must be
+     * initialized.
+     *
+     * @see initialize()
+     */
+    public DefaultViewPanel() {
+        super();
+        this.setName("View");
+        // TODO Remove this when the system lo load libraries is finished
+        if (mapControlManager == null) {
+            mapControlManager = MapControlLocator.getMapControlManager();
+        }
+    }
+
+    public DefaultViewPanel(Document document) {
+        this();
+        this.initialize(((ViewDocument) document).getMapContext());
+        this.setDocument(document);
+    }
+
+    /**
+     * Create the internal componentes and populate the window with them. If the
+     * layout properties were set using the
+     * <code>setWindowData(WindowData)</code> method, the window will be
+     * populated according to this properties.
+     */
+    protected void initialize(MapContext mapContext) {
+        super.initialize();
+        initComponents(mapContext);
+        hideConsole();
+        getConsolePanel().addResponseListener(consoleResponseAdapter);
+    }
+
+    public void setDocument(Document document) {
+        setModel((ViewDocument) document);
+    }
+
+    public Document getDocument() {
+        return this.modelo;
+    }
+
+    public void setModel(ViewDocument model) {
+        this.modelo = model;
+        // Se registra como listener de cambios en FMap
+        MapContext fmap = modelo.getMapContext();
+
+        FLayers layers = fmap.getLayers();
+        for (int i = 0; i < layers.getLayersCount(); i++) {
+            if (layers.getLayer(i).isEditing()
+                    && layers.getLayer(i) instanceof FLyrVect) {
+                this.showConsole();
+            }
+        }
+
+        // Se configura el mapControl
+        m_TOC.setMapContext(fmap);
+        m_MapControl.getMapContext().getLayers().addLegendListener(m_TOC);
+
+        m_MapControl.setBackground(new Color(255, 255, 255));
+        if (modelo.getMapOverViewContext() != null) {
+            m_MapLoc.setModel(modelo.getMapOverViewContext());
+        }
+        model.addPropertyChangeListener(new PropertyChangeListener() {
+            public void propertyChange(PropertyChangeEvent evt) {
+                if (evt.getPropertyName().equals("name")) {
+                    PluginServices.getMDIManager()
+                            .getWindowInfo(DefaultViewPanel.this)
+                            .setTitle(
+                                    PluginServices.getText(this, "Vista") + ": "
+                                    + (String) evt.getNewValue());
+                }
+            }
+        });
+        if (m_MapControl.getViewPort() != null) {
+            viewPortListener = new ViewPortListener() {
+                public void extentChanged(ExtentEvent e) {
+                    if (PluginServices.getMainFrame() != null) {
+                        PluginServices
+                                .getMainFrame()
+                                .getStatusBar()
+                                .setControlValue(
+                                        "view-change-scale",
+                                        String.valueOf(m_MapControl
+                                                .getMapContext().getScaleView()));
+                        PluginServices
+                                .getMainFrame()
+                                .getStatusBar()
+                                .setMessage(
+                                        "projection",
+                                        getMapControl().getViewPort()
+                                        .getProjection().getAbrev());
+                    }
+                }
+
+                public void backColorChanged(ColorEvent e) {
+                    // Do nothing
+                }
+
+                public void projectionChanged(ProjectionEvent e) {
+                    m_MapLoc.setProjection(e.getNewProjection());
+                }
+            };
+            m_MapControl.getViewPort().addViewPortListener(viewPortListener);
+        }
+    }
+
+    public JConsole getConsolePanel() {
+        if (console == null) {
+            console = new JConsole(true);
+            // Para distinguir cuando se est� escribiendo sobre la consola y
+            // cuando no.
+            console.setJTextName("CADConsole");
+        }
+        return console;
+    }
+
+    private JDockPanel getDockConsole() {
+        if (dockConsole == null) {
+            dockConsole = new JDockPanel(getConsolePanel());
+        }
+        return dockConsole;
+    }
+
+    public void addConsoleListener(String prefix, ResponseListener listener) {
+        consoleResponseAdapter.putSpaceListener(prefix, listener);
+
+    }
+
+    public void removeConsoleListener(ResponseListener listener) {
+        consoleResponseAdapter.deleteListener(listener);
+
+    }
+
+    public void focusConsole(String text) {
+        getConsolePanel().addResponseText(text);
+
+        JEditTextArea jeta = getConsolePanel().getTxt();
+        jeta.requestFocusInWindow();
+        jeta.setCaretPosition(jeta.getText().length());
+
+    }
+
+    public void hideConsole() {
+        isShowConsole = false;
+        getDockConsole().setVisible(false);
+
+    }
+
+    public void showConsole() {
+        if (isShowConsole || disableConsole) {
+            return;
+        }
+        isShowConsole = true;
+        getMapControl().remove(getDockConsole());
+        getMapControl().setLayout(new BorderLayout());
+        getMapControl().add(getDockConsole(), BorderLayout.SOUTH);
+        getDockConsole().setVisible(true);
+
+    }
+
+    static class ResponseAdapter implements ResponseListener {
+
+        private HashMap<String, ResponseListener> spaceListener
+                = new HashMap<String, ResponseListener>();
+
+        public void putSpaceListener(String namespace, ResponseListener listener) {
+            spaceListener.put(namespace, listener);
+        }
+
+        public void acceptResponse(String response) {
+            boolean nameSpace = false;
+            int n = -1;
+            if (response != null) {
+                if ((n = response.indexOf(':')) != -1) {
+                    nameSpace = true;
+                }
+            }
+
+            if (nameSpace) {
+                ResponseListener listener
+                        = spaceListener.get(response.substring(0, n));
+                if (listener != null) {
+                    listener.acceptResponse(response.substring(n + 1));
+                }
+            } else {
+                Iterator<ResponseListener> i
+                        = spaceListener.values().iterator();
+                while (i.hasNext()) {
+                    ResponseListener listener = i.next();
+                    listener.acceptResponse(response);
+                }
+            }
+        }
+
+        /**
+         * @param listener
+         */
+        public void deleteListener(ResponseListener listener) {
+            Iterator<String> i = spaceListener.keySet().iterator();
+            while (i.hasNext()) {
+                String namespace = i.next();
+                ResponseListener l = spaceListener.get(namespace);
+                if (l == listener) {
+                    spaceListener.remove(namespace);
+                }
+            }
+        }
+
+    }
+
+    protected void initComponents(MapContext mapContext) { // GEN-BEGIN:initComponents
+        // Remember to activate it
+        try {
+            m_MapControl = mapControlManager.createJMapControlPanel(mapContext);
+            m_MapControl.setMapControlDrawer(mapControlManager
+                    .createDefaultMapControlDrawer());
+        } catch (MapControlCreationException e) {
+            NotificationManager.addError(e);
+        }
+
+        m_MapControl.addExceptionListener(mapControlExceptionListener);
+        m_TOC = new TOC();
+
+        // Ponemos el localizador
+        m_MapLoc = new MapOverview(m_MapControl);
+        try {
+            m_MapLoc.setMapControlDrawer(mapControlManager
+                    .createDefaultMapControlDrawer());
+        } catch (MapControlCreationException e) {
+            NotificationManager.addError(e);
+        }
+        removeAll();
+        tempMainSplit = new ViewSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+
+        if (windowLayout == null) {
+            m_MapLoc.setPreferredSize(new Dimension(150, 200));
+            tempMainSplit.setPreferredSize(new Dimension(500, 300));
+        }
+
+        if (!isPalette()) {
+            tempSplitToc = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+            tempSplitToc.setTopComponent(m_TOC);
+            tempSplitToc.setBottomComponent(m_MapLoc);
+            tempSplitToc.setResizeWeight(0.7);
+            tempMainSplit.setLeftComponent(tempSplitToc);
+        } else {
+            tempMainSplit.setLeftComponent(m_TOC);
+        }
+        m_TOC.setVisible(true);
+        tempMainSplit.setRightComponent(m_MapControl);
+        this.setLayout(new BorderLayout());
+        this.add(tempMainSplit, BorderLayout.CENTER);
+
+        if (windowLayout != null) {
+            try {
+                tempMainSplit.setDividerLocation(Integer.valueOf(
+                        windowLayout.get("MainDivider.Location")).intValue());
+                if (windowLayout.get("TOCDivider.Location") != null) {
+                    tempSplitToc.setDividerLocation(Integer.valueOf(
+                            windowLayout.get("TOCDivider.Location")).intValue());
+                }
+            } catch (NumberFormatException ex) {
+                PluginServices.getLogger().error(
+                        "Error restoring View properties");
+            }
+        }
+
+        // Zoom out (pinchas y el mapa se centra y te muestra m�s).
+        // No es dibujando un rect�ngulo, es solo pinchando.
+        ZoomOutListener zoomOutListener = new ZoomOutListener(m_MapControl);
+        m_MapControl.addBehavior("zoomOut", new PointBehavior(zoomOutListener));
+
+        // Zoom por rect�ngulo
+        ZoomInListener zoomInListener = new ZoomInListener(m_MapControl);
+        m_MapControl.addBehavior("zoomIn", new Behavior[]{
+            new RectangleBehavior(zoomInListener), 
+            new PointBehavior(zoomOutListener, Behavior.BUTTON_RIGHT)});
+
+        // pan
+        PanListener panListener = new PanListener(m_MapControl);
+        m_MapControl.addBehavior("pan", new MoveBehavior(panListener,Behavior.BUTTON_LEFT));
+
+        // Medir
+        MeasureListener mli = new MeasureListener(m_MapControl);
+        m_MapControl.addBehavior("medicion", new PolylineBehavior(mli));
+
+        // Area
+        AreaListener ali = new AreaListener(m_MapControl);
+        m_MapControl.addBehavior("area", new PolygonBehavior(ali));
+
+        // Info por punto
+        InfoListener il = new InfoListener(m_MapControl);
+        m_MapControl.addBehavior("info", new PointBehavior(il));
+
+        // Seleccion por punto
+        PointSelectListener psl = new PointSelectListener(m_MapControl);
+        m_MapControl.addBehavior("pointSelection", new PointBehavior(psl));
+
+        // Selecci�n por rect�ngulo
+        RectangleSelectListener rsl = new RectangleSelectListener(m_MapControl);
+        m_MapControl.addBehavior("rectSelection", new RectangleBehavior(rsl));
+
+        // Selecci�n por pol�gono
+        PolygonSelectListener poligSel = new PolygonSelectListener(m_MapControl);
+        m_MapControl.addBehavior("polSelection", new PolygonBehavior(poligSel));
+        
+        m_MapControl.setTool("zoomIn");
+
+        // Listener de eventos de movimiento que pone las coordenadas del rat�n
+        // en la barra de estado
+        StatusBarListener statusBarListener = new StatusBarListener(m_MapControl);
+        
+        m_MapControl.addCombinedBehavior(new MouseMovementBehavior(statusBarListener));
+        m_MapControl.addCombinedBehavior(new MouseWheelBehavior());
+        m_MapControl.addCombinedBehavior(new MoveBehavior(panListener, Behavior.BUTTON_MIDDLE));
+    }
+
+    public void windowActivated() {
+        super.windowActivated();
+
+        NewStatusBar statusbar = PluginServices.getMainFrame().getStatusBar();
+        MapContext mapContext = this.getMapControl().getMapContext();
+
+        statusbar.setMessage("units",
+                PluginServices.getText(this, mapContext.getDistanceName()));
+        statusbar.setControlValue("view-change-scale",
+                String.valueOf(mapContext.getScaleView()));
+        IProjection proj = getMapControl().getViewPort().getProjection();
+        if (proj != null) {
+            statusbar.setMessage("projection", proj.getAbrev());
+        } else {
+            statusbar.setMessage("projection", "");
+        }
+    }
+
+    public void windowClosed() {
+        super.windowClosed();
+        if (viewPortListener != null) {
+            getMapControl().getViewPort().removeViewPortListener(
+                    viewPortListener);
+        }
+        if (getMapOverview() != null) {
+            getMapOverview().getViewPort().removeViewPortListener(
+                    getMapOverview());
+        }
+
+    }
+
+    public void toPalette() {
+        isPalette = true;
+        m_MapLoc.setPreferredSize(new Dimension(200, 150));
+        m_MapLoc.setSize(new Dimension(200, 150));
+        movp = new MapOverViewPalette(m_MapLoc, this);
+        PluginServices.getMDIManager().addWindow(movp);
+        FLayer[] layers
+                = getViewDocument().getMapContext().getLayers().getActives();
+        if (layers.length > 0 && layers[0] instanceof FLyrVect) {
+            if (((FLyrVect) layers[0]).isEditing()) {
+                showConsole();
+                return;
+            }
+        }
+        hideConsole();
+
+    }
+
+    public void restore() {
+        isPalette = false;
+        PluginServices.getMDIManager().closeWindow(movp);
+        FLayer[] layers
+                = getViewDocument().getMapContext().getLayers().getActives();
+        if (layers.length > 0 && layers[0] instanceof FLyrVect) {
+            if (((FLyrVect) layers[0]).isEditing()) {
+                showConsole();
+                return;
+            }
+        }
+        hideConsole();
+        JSplitPane tempSplitToc = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+        tempSplitToc.setTopComponent(m_TOC);
+        tempSplitToc.setBottomComponent(m_MapLoc);
+        tempSplitToc.setResizeWeight(0.7);
+        tempMainSplit.setLeftComponent(tempSplitToc);
+    }
+
+    /**
+     * Sets the default map overview background color that will be used in
+     * subsequent projects.
+     *
+     * @param color
+     * @deprecated use instead
+     * Project.getPreferences().setDefaultMapoverViewBackColor
+     */
+    public static void setDefaultMapOverViewBackColor(Color color) {
+        DefaultProject.getPreferences().setDefaultOverviewBackColor(color);
+    }
+
+    /**
+     * Returns the current default map overview background color defined which
+     * is the color defined when the user does not define any other one
+     *
+     * @return java.awt.Color
+     * @deprecated use instead
+     * Project.getPreferences().setDefaultMapoverViewBackColor
+     */
+    public static Color getDefaultMapOverViewBackColor() {
+        return DefaultProject.getPreferences().getDefaultOverviewBackColor();
+    }
+
+    /**
+     * Returns the current default view background color defined which is the
+     * color defined when the user does not define any other one
+     *
+     * @return java.awt.Color
+     * @deprecated use instead Project.getPreferences().getDefaultViewBackColor
+     */
+    public static Color getDefaultBackColor() {
+        return DefaultProject.getPreferences().getDefaultViewBackColor();
+    }
+
+    /**
+     * @deprecated use instead Project.getPreferences().setDefaultViewBackColor
+     */
+    public static void setDefaultBackColor(Color color) {
+        DefaultProject.getPreferences().setDefaultViewBackColor(color);
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.EDITOR_PROFILE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.tools.observer.Observer#update(org.gvsig.tools.observer.Observable, java.lang.Object)
+     */
+    public void update(final Observable observable, final Object notification) {
+
+        if (notification instanceof FeatureStoreNotification) {
+            FeatureStoreNotification event
+                    = (FeatureStoreNotification) notification;
+            if (event.getType() == FeatureStoreNotification.AFTER_CANCELEDITING
+                    || event.getType() == FeatureStoreNotification.AFTER_FINISHEDITING) {
+
+                if (!SwingUtilities.isEventDispatchThread()) {
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            update(observable, notification);
+                        }
+                    });
+                    return;
+                }
+                getMapControl().setTool("zoomIn");
+                hideConsole();
+                repaintMap();
+            }
+        }
+    }
+
+    private static boolean disableConsole = false;
+
+    public static void setDisableConsole(boolean disable) {
+        disableConsole = disable;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewManager.java	(revision 42196)
@@ -0,0 +1,327 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view;
+
+import java.util.Map;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.AbstractDocument;
+import org.gvsig.app.project.documents.AbstractDocumentManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.actions.CopyDocumentAction;
+import org.gvsig.app.project.documents.actions.CutDocumentAction;
+import org.gvsig.app.project.documents.actions.PasteDocumentAction;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.gui.WindowLayout;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.app.project.documents.view.gui.ViewProperties;
+import org.gvsig.app.project.documents.view.toc.AbstractActionInfoAdapterToTocContextMenuAction;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesHelper;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Factory of View.
+ *
+ * @author 2005-         Vicente Caballero
+ * @author 2009-         Joaquin del Cerro
+ * 
+ */
+public class ViewManager extends AbstractDocumentManager {
+    private static final Logger logger = LoggerFactory.getLogger(ViewManager.class);
+    
+    private static final String PERSISTENCE_VIEW_DOCUMENT_DEFINITION_NAME =
+        "DefaultViewDocument";
+    public static String TYPENAME = "project.document.view2d";
+    private DynStruct persistenceDefinition;
+    
+    public ViewManager() {
+    	// Do nothing
+    }
+    
+    public int getPriority() {
+        return 0;
+    }
+
+    public ImageIcon getIcon() {
+		return PluginServices.getIconTheme().get("document-view-icon");
+    }
+
+    public ImageIcon getIconSelected() {
+		return PluginServices.getIconTheme().get("document-view-icon-sel");
+    }
+
+    public String getTitle() {
+        return PluginServices.getText(this, "Vista");
+    }
+
+    public String getTypeName() {
+        return TYPENAME;
+    }
+    
+    public Class getMainWindowClass() {
+        return DefaultViewPanel.class;
+    }
+    
+    public AbstractDocument createDocument() {
+        AbstractDocument doc = new DefaultViewDocument(this);
+        if( this.notifyObservers(NOTIFY_AFTER_CREATEDOCUMENT,doc).isCanceled() ) {
+            return null;
+        }
+    	return doc;        
+        
+    }
+
+    public IWindow getMainWindow(Document doc, WindowLayout layout) {
+        IDocumentWindow win;
+
+        win = (IDocumentWindow) PluginServices.getMDIManager().getSingletonWindow(getMainWindowClass(), doc);
+        if ( win != null ) {
+            // The view window document is already created, return it.
+            return win;
+        }
+        win = this.createDocumentWindow(doc);
+        if ( layout != null && win != null ) {
+            win.setWindowLayout(layout);
+        }
+        if( this.notifyObservers(NOTIFY_AFTER_GETMAINWINDOW,win).isCanceled() ) {
+            return null;
+        }
+        ((AbstractDocument) doc).raiseEventCreateWindow(win);
+        return win;
+    }
+
+    public IWindow getPropertiesWindow(Document doc) {
+        IWindow win = new ViewProperties((DefaultViewDocument) doc);
+        if( this.notifyObservers(NOTIFY_AFTER_GETPROPERTIESWINDOW,win).isCanceled() ) {
+            return null;
+        }
+        return win;
+    }
+
+    public void addTOCContextAction(String theAction) {
+    	ActionInfoManager actionManager = PluginsLocator.getActionInfoManager(); 
+    	ActionInfo action = actionManager.getAction(theAction);
+    	if( action==null ) {
+    		String errmsg = "Action '"+theAction+"' not found";
+    		logger.info(errmsg);
+    		throw new RuntimeException(errmsg);
+    	}
+    	this.addTOCContextAction(action);
+    }
+    
+    public void addTOCContextAction(String theAction, String group, int groupOrder, int order) {
+    	ActionInfoManager actionManager = PluginsLocator.getActionInfoManager(); 
+    	ActionInfo action = actionManager.getAction(theAction);
+    	if( action==null ) {
+    		String errmsg = "Action '"+theAction+"' not found";
+    		logger.info(errmsg);
+    		throw new RuntimeException(errmsg);
+    	}
+    	this.addTOCContextAction(
+                action.getName(), 
+                new ActionInfoAdapterToContextMenuAction(action, group, groupOrder,0)
+        );
+    }
+    
+    public void addTOCContextAction(ActionInfo action) {
+    	this.addTOCContextAction(action.getName(), new ActionInfoAdapterToContextMenuAction(action, "default", 10000));
+    }
+    
+    public void addTOCContextAction(ActionInfo action, String group, int groupOrder) {
+    	this.addTOCContextAction(action.getName(), new ActionInfoAdapterToContextMenuAction(action, group, groupOrder));
+    }
+    
+    class ActionInfoAdapterToContextMenuAction extends AbstractActionInfoAdapterToTocContextMenuAction {
+    	
+    	ActionInfoAdapterToContextMenuAction(ActionInfo action, String group, int groupOrder) {
+            super(action, group, groupOrder);
+    	}
+    	ActionInfoAdapterToContextMenuAction(ActionInfo action, String group, int groupOrder, int order) {
+            super(action, group, groupOrder,order);
+    	}
+    }
+    
+    /**
+     * @deprecated use addTOCContextAction(ActionInfo action, String group, int groupOrder)
+     * @param id
+     * @param action 
+     */
+    public void addTOCContextAction(String id, IContextMenuAction action) {
+    	initializeRegisterTOCActions();
+    	ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add(
+    			"View_TocActions", "");
+    	if( action instanceof ExtensionBuilder ) {
+    		exPoint.append(id, "", (ExtensionBuilder)action);
+    		return;
+    	}
+		exPoint.append(id, "", new ContextMenuActionAdapterToExtensionBuilder(action));
+    }
+
+    class ContextMenuActionAdapterToExtensionBuilder implements ExtensionBuilder {
+    	IContextMenuAction menuAction = null;
+    	ContextMenuActionAdapterToExtensionBuilder(IContextMenuAction menuAction) {
+    		this.menuAction = menuAction;
+    	}
+		public Object create() {
+			return this.menuAction;
+		}
+		public Object create(Object[] args) {
+			return this.menuAction;
+		}
+		public Object create(Map args) {
+			return this.menuAction;
+		}
+    }
+    
+    private static void initializeRegisterTOCActions() {
+		ExtensionPointManager epManager = ToolsLocator.getExtensionPointManager();
+
+		if (!epManager.has("View_TocActions")) {
+			epManager.add(
+					"View_TocActions",
+					"Context menu options of the TOC " +
+						" in the view window "+
+						"(register instances of " +
+						"org.gvsig.app.gui.toc.AbstractTocContextMenuAction)"
+			);
+		}
+    }
+    
+    /**
+     * Registers in the points of extension the Factory with alias.
+     *
+     */
+    public static void register() {
+        ViewManager factory = new ViewManager();
+    	ProjectManager.getInstance().registerDocumentFactory(factory);
+    	
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        manager.registerFactory(factory);
+
+        initializeRegisterTOCActions();
+        
+        ProjectManager.getInstance().registerDocumentAction(TYPENAME,new CopyDocumentAction());
+        ProjectManager.getInstance().registerDocumentAction(TYPENAME,new CutDocumentAction());
+        ProjectManager.getInstance().registerDocumentAction(TYPENAME,new PasteDocumentAction());
+
+	   	IconThemeHelper.registerIcon("document", "document-view-icon", ViewManager.class);
+	   	IconThemeHelper.registerIcon("document", "document-view-icon-sel", ViewManager.class);
+	   	
+	   	IconThemeHelper.registerIcon("cursor", "cursor-crux", ViewManager.class);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-info-by-point", ViewManager.class);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-pan", ViewManager.class);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-query-area", ViewManager.class);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-select-by-point", ViewManager.class);
+        IconThemeHelper.registerIcon("cursor", "cursor-select-by-polygon", ViewManager.class);
+        IconThemeHelper.registerIcon("cursor", "cursor-select-by-rectangle", ViewManager.class);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-zoom-in", ViewManager.class);
+	   	IconThemeHelper.registerIcon("cursor", "cursor-zoom-out", ViewManager.class);
+
+	   	IconThemeHelper.registerIcon("layer", "layer-icon", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-group", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-vectorial", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-dgn", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-dxf", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-postgresql", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-mysql", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-icon-jdbc", ViewManager.class);
+	   	//IconThemeHelper.registerIcon("layer", "layer-icon-unavailable", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-chk-unavailable", ViewManager.class);
+	   	IconThemeHelper.registerIcon("layer", "layer-chk-temporary", ViewManager.class);
+
+	   	IconThemeHelper.registerIcon("legend", "legend-overview-single-symbol", ViewManager.class);
+	   	IconThemeHelper.registerIcon("legend", "legend-overview-vectorial-interval", ViewManager.class);
+	   	IconThemeHelper.registerIcon("legend", "legend-overview-vectorial-unique-value", ViewManager.class);
+
+	   	MapContextManager mapContextMgr = MapContextLocator.getMapContextManager();
+	   	mapContextMgr.registerIconLayer("DGN", "layer-icon-dgn");
+	   	mapContextMgr.registerIconLayer("DXF", "layer-icon-dxf");
+	   	mapContextMgr.registerIconLayer("jdbc", "layer-icon-jdbc");
+	   	mapContextMgr.registerIconLayer("PostgreSQL", "layer-icon-postgresql");
+	   	mapContextMgr.registerIconLayer("MySQL", "layer-icon-mysql");
+	   	
+        if (factory.persistenceDefinition == null){
+            factory.persistenceDefinition = manager.addDefinition(
+                ViewDocument.class,
+                PERSISTENCE_VIEW_DOCUMENT_DEFINITION_NAME,
+                "Default view document persistence definition",
+                null, 
+                null
+            );
+            factory.persistenceDefinition.extend(manager.getDefinition(AbstractDocument.PERSISTENCE_DEFINITION_NAME));
+
+            factory.persistenceDefinition.addDynFieldBoolean("useMapOverview").setMandatory(true);
+            factory.persistenceDefinition.addDynFieldObject("mainMapContext").setClassOfValue(MapContext.class).setMandatory(true);
+            factory.persistenceDefinition.addDynFieldObject("overviewMapContext").setClassOfValue(MapContext.class).setMandatory(false);
+            factory.persistenceDefinition.addDynFieldObject("propertiesHelper").setClassOfValue(ExtendedPropertiesHelper.class)
+                .setMandatory(false);
+        
+        }
+
+
+    }
+
+    @SuppressWarnings("rawtypes")
+    public DynStruct getDefinition(String className) {
+
+        if( this.persistenceDefinition.getName().equalsIgnoreCase(className)) {
+            return this.persistenceDefinition;
+        }
+        if( this.persistenceDefinition.getFullName().equalsIgnoreCase(className)) {
+            return this.persistenceDefinition;
+        }
+        if( this.getDocumentClass().getName().equals(className) ) {
+            return this.persistenceDefinition;
+        }
+
+        return null;
+    }
+
+    @SuppressWarnings("rawtypes")
+    protected Class getDocumentClass() {
+        return DefaultViewDocument.class;
+    }
+
+    public boolean manages(Object object) {
+        return object instanceof ViewDocument;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOCRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOCRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOCRenderer.java	(revision 42196)
@@ -0,0 +1,200 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Rectangle;
+
+import javax.swing.Icon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTree;
+import javax.swing.SpringLayout;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeCellRenderer;
+
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.TocItemBranch;
+import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
+
+/**
+ * Renderer que actua sobre el TOC.
+ * 
+ * @author vcn
+ */
+public class TOCRenderer extends JPanel implements TreeCellRenderer {
+
+    private static final long serialVersionUID = -6733445768959238193L;
+    private JCheckBox check;
+    private JLabel label;
+    private static int MARGIN  = 100;
+
+    private final Color editingColor;
+    
+    /**
+     * toc background color
+     */
+    private final Color tocBgColor;
+
+    /**
+     * Creates a new TOCRenderer object.
+     */
+    public TOCRenderer(Color tocBackground) {
+        this(Color.RED, tocBackground);
+    }
+
+    /**
+     * Creates a new TOCRenderer object.
+     */
+    public TOCRenderer(Color editingColor, Color tocBackground) {
+        
+        this.editingColor = editingColor;
+        this.tocBgColor = tocBackground;
+
+        check = new JCheckBox();
+        label = new JLabel();
+
+        SpringLayout theLayout = new SpringLayout();
+        this.setLayout(theLayout);
+
+        // Adjust constraints for the text field so it's at
+        // (<label's right edge> + 5, 5).
+        this.add(check);
+        this.add(label);
+
+        theLayout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.EAST,
+            check);
+    }
+    
+    /**
+     * Gets the dimension of the node.  
+     * @param item
+     * @param font
+     * @return
+     */
+    private Dimension getNodeDimension(ITocItem item, Font font) {
+    	int textWidth = 0;
+        int textHeight = 0;
+        if(font != null && item.getLabel() != null) {
+        	FontMetrics metrics = this.getFontMetrics(font);
+        	textWidth = metrics.stringWidth(item.getLabel());
+        	textHeight = metrics.getHeight();
+        }
+        Dimension itemSize = item.getSize();
+        
+        int w = (int)Math.max(textWidth, itemSize.getWidth());
+        int h = (int)Math.max(textHeight, itemSize.getHeight());
+        
+        return new Dimension(w + MARGIN, h);
+    }
+
+    /**
+     * M�todo llamado una vez por cada nodo, y todas las veces que se redibuja
+     * en pantalla el TOC.
+     * 
+     * @param tree
+     * @param value
+     * @param isSelected
+     * @param expanded
+     * @param leaf
+     * @param row
+     * @param hasFocus
+     * 
+     * @return
+     */
+    public Component getTreeCellRendererComponent(JTree tree, Object value,
+        boolean isSelected, boolean expanded, boolean leaf, int row,
+        boolean hasFocus) {
+
+        DefaultMutableTreeNode n = (DefaultMutableTreeNode) value;
+        Color foreground = tree.getForeground();
+        this.label.setFont(tree.getFont());
+        
+        this.label.setBackground(this.tocBgColor);
+        this.setBackground(this.tocBgColor);
+
+        if (n.getUserObject() instanceof ITocItem) {
+
+            ITocItem item = (ITocItem) n.getUserObject();
+            label.setText(item.getLabel());
+            Icon icono = item.getIcon();
+            if (icono != null) {
+                label.setIcon(icono);
+            }
+
+            this.validate();
+            
+            Dimension sizeNode = getNodeDimension(item, tree.getFont());
+            
+            this.setPreferredSize(sizeNode);
+
+            if (item instanceof TocItemBranch) {
+                TocItemBranch branch = (TocItemBranch) item;
+                FLyrDefault lyr = (FLyrDefault) branch.getLayer();
+                check.setVisible(true);
+                check.setSelected(lyr.visibleRequired());
+                check.setBackground(this.tocBgColor);
+                if (!lyr.isAvailable()) {
+                    check.setEnabled(false);
+                } else {
+                    check.setEnabled(true);
+                    if (!lyr.isWithinScale(lyr.getMapContext().getScaleView())) {
+                        check.setEnabled(false);
+                    }
+
+                    if (lyr.isEditing()) {
+                        this.label.setForeground(editingColor);
+                    } else {
+                        this.label.setForeground(foreground);
+                    }
+                }
+                if (lyr.isActive()) {
+                    this.label.setFont(label.getFont().deriveFont(Font.BOLD));
+                }
+            } else {
+                check.setVisible(false);
+            }
+        }
+
+        if (leaf) {
+            // label.setIcon(UIManager.getIcon("Tree.leafIcon"));
+        } else if (expanded) {
+            // label.setIcon(UIManager.getIcon("Tree.openIcon"));
+        } else {
+            // label.setIcon(UIManager.getIcon("Tree.closedIcon"));
+        }
+
+        return this;
+    }
+
+    public Rectangle getCheckBoxBounds() {
+        return check.getBounds();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOCRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/FPopupMenu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/FPopupMenu.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/FPopupMenu.java	(revision 42196)
@@ -0,0 +1,257 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.lang.reflect.Array;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.view.IContextMenuAction;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.TocItemBranch;
+import org.gvsig.app.project.documents.view.toc.actions.ChangeNameTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.ChangeSymbolTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.CopyLayersTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.CutLayersTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.EliminarCapaTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.FLyrVectEditPropertiesTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.FirstLayerTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.LayersGroupTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.LayersUngroupTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.OldTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.actions.PasteLayersTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.ReloadLayerTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.ShowLayerErrorsTocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.actions.ZoomAlTemaTocMenuEntry;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+
+/**
+ * Menu de bot�n derecho para el TOC.
+ * Se pueden a�adir entradas facilmente desde una extensi�n,
+ * creando una clase derivando de TocMenuEntry, y a�adiendola en
+ * est�tico (o en tiempo de carga de la extensi�n) a FPopupMenu.
+ * (Las entradas actuales est�n hechas de esa manera).
+ * 
+ * @author vcn To change the template for this generated type comment go to
+ *         Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and
+ *         Comments
+ */
+
+public class FPopupMenu extends JPopupMenu {
+
+    private static final long serialVersionUID = -7420923229618207434L;
+    private DefaultMutableTreeNode nodo;
+    protected MapContext mapContext;
+    private ExtensionPoint extensionPoint;
+    private FLayer[] selecteds;
+
+    public static void registerExtensionPoint() {
+    	ProjectManager projectManager = ProjectManager.getInstance(); 
+    	ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+
+    	viewManager.addTOCContextAction("FSymbolChangeColor", new ChangeSymbolTocMenuEntry());
+        viewManager.addTOCContextAction("ChangeName", new ChangeNameTocMenuEntry());
+//        viewManager.addTOCContextAction("FLyrVectEditProperties", new FLyrVectEditPropertiesTocMenuEntry());
+        viewManager.addTOCContextAction("ZoomAlTema", new ZoomAlTemaTocMenuEntry());
+        viewManager.addTOCContextAction("EliminarCapa", new EliminarCapaTocMenuEntry());
+        viewManager.addTOCContextAction("VerErroresCapa", new ShowLayerErrorsTocMenuEntry());
+        viewManager.addTOCContextAction("ReloadLayer", new ReloadLayerTocMenuEntry());
+        viewManager.addTOCContextAction("LayersGroup", new LayersGroupTocMenuEntry());
+        viewManager.addTOCContextAction("LayersUngroup", new LayersUngroupTocMenuEntry());
+        viewManager.addTOCContextAction("FirstLayer", new FirstLayerTocMenuEntry());
+
+        viewManager.addTOCContextAction("Copy", new CopyLayersTocMenuEntry());
+        viewManager.addTOCContextAction("Cut", new CutLayersTocMenuEntry());
+        viewManager.addTOCContextAction("Paste", new PasteLayersTocMenuEntry());
+    }
+
+    /**
+     * Creates a new FPopupMenu object.
+     * 
+     * @param nodo
+     *            DOCUMENT ME!
+     * @param vista
+     *            DOCUMENT ME!
+     */
+    public FPopupMenu(MapContext mc, DefaultMutableTreeNode node) {
+        super();
+        this.initialize(mc, node);
+    }
+
+    private void initialize(MapContext mc, DefaultMutableTreeNode node) {
+        this.mapContext = mc;
+        this.nodo = node;
+
+        this.extensionPoint =
+            ToolsLocator.getExtensionPointManager().get("View_TocActions");
+        this.selecteds = this.mapContext.getLayers().getActives();
+
+        IContextMenuAction[] actions = this.getActionList();
+        if (actions == null) {
+            return;
+        }
+        this.createMenuElements(actions);
+    }
+
+    public MapContext getMapContext() {
+        return mapContext;
+    }
+
+    public ITocItem getNodeUserObject() {
+        if (nodo == null) {
+            return null;
+        }
+        return (ITocItem) nodo.getUserObject();
+    }
+
+    public DefaultMutableTreeNode getNode() {
+        return this.nodo;
+    }
+
+    private IContextMenuAction[] getActionList() {
+        ArrayList<IContextMenuAction> actionArrayList =
+            new ArrayList<IContextMenuAction>();
+        @SuppressWarnings("unchecked")
+        Iterator<Extension> iter = this.extensionPoint.iterator();
+        IContextMenuAction action;
+        boolean contains = false;
+        ITocItem tocItem = this.getNodeUserObject();
+        if (tocItem instanceof TocItemBranch) {
+            for (int i = 0; i < this.selecteds.length; i++) {
+                if (this.selecteds[i].equals(((TocItemBranch) tocItem)
+                    .getLayer())) {
+                    contains = true;
+                    break;
+                }
+            }
+        } else {
+            contains = true;
+        }
+        if (contains) {
+            while (iter.hasNext()) {
+                action = null;
+                try {
+                    action = (IContextMenuAction) iter.next().create();
+                } catch (Exception e) {
+                    NotificationManager.addError(e);
+                }
+                if (action != null ) {
+                	if( action instanceof AbstractTocContextMenuAction 
+                		&& !(action instanceof OldTocContextMenuAction)) {
+                		((AbstractTocContextMenuAction)action).setMapContext(this.mapContext);
+                	}
+                    if (action.isVisible(this.getNodeUserObject(),
+                        this.selecteds)) {
+                        actionArrayList.add(action);
+                    }
+                }
+
+            }
+            IContextMenuAction[] result =
+                (IContextMenuAction[]) Array.newInstance(
+                    IContextMenuAction.class, actionArrayList.size());
+            System.arraycopy(actionArrayList.toArray(), 0, result, 0,
+                actionArrayList.size());
+            Arrays.sort(result, new CompareAction());
+
+            return result;
+        }
+        return null;
+    }
+
+    public class CompareAction implements Comparator<IContextMenuAction> {
+
+        public int compare(IContextMenuAction o1, IContextMenuAction o2) {
+            // FIXME: flata formatear los enteros!!!!
+            NumberFormat formater = NumberFormat.getInstance();
+            formater.setMinimumIntegerDigits(3);
+            String key1 =
+                "" + formater.format(o1.getGroupOrder()) + o1.getGroup()
+                    + formater.format(o1.getOrder());
+            String key2 =
+                "" + formater.format(o2.getGroupOrder()) + o2.getGroup()
+                    + formater.format(o2.getOrder());
+            return key1.compareTo(key2);
+        }
+    }
+
+    private void createMenuElements(IContextMenuAction[] actions) {
+        String group = null;
+        for (int i = 0; i < actions.length; i++) {
+            IContextMenuAction action = actions[i];
+            MenuItem item = new MenuItem(action.getText(), action);
+            item.setEnabled(action.isEnabled(this.getNodeUserObject(),
+                this.selecteds));
+            if( action.getGroup()!=null ) {
+	            if ( !action.getGroup().equals(group)) {
+	                if (group != null) {
+	                    this.addSeparator();
+	                }
+	                group = action.getGroup();
+	            }
+            }
+            this.add(item);
+        }
+
+    }
+
+    public class MenuItem extends JMenuItem implements ActionListener {
+
+        private static final long serialVersionUID = 6858724610206253411L;
+        private IContextMenuAction action;
+
+        public MenuItem(String text, IContextMenuAction documentAction) {
+            super(text);
+            this.action = documentAction;
+            String tip = this.action.getDescription();
+            if (tip != null && tip.length() > 0) {
+                this.setToolTipText(tip);
+            }
+            this.addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            this.action.execute(FPopupMenu.this.getNodeUserObject(),
+                FPopupMenu.this.selecteds);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/FPopupMenu.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/PanelColor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/PanelColor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/PanelColor.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.toc.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author vcn To change the template for this generated type comment go to
+ *         Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and
+ *         Comments
+ */
+public class PanelColor extends JPanel {
+    public Color[] m_colores = new Color[100];
+    public Color m_color;
+    private Integer numReg;
+    private int numreg;
+    public int a = 155;
+    public int b = 205;
+    public int c = 255;
+
+    /**
+     * Creates a new PanelColor object.
+     *
+     * @param numReg DOCUMENT ME!
+     */
+    public PanelColor(int numReg) {
+        //numReg=numReg+1;
+        //m_color = new Color((numReg*numReg+100)%255,(numReg+(3*numReg+100))%255,numReg%255);
+        //this.setBackground(m_color);
+        setLayout(new BorderLayout());
+		
+        //add(oneColorPanel);
+        setMaximumSize(new Dimension(12, 12));
+        setMinimumSize(new Dimension(12, 12));
+        setPreferredSize(new Dimension(12, 12));
+    }
+
+    //private ColorPanel oneColorPanel = new ColorPanel();
+    //private FourColorPanel fourColorPanel = new LayerColorPanel.FourColorPanel();
+    public void setColor(Color color) {
+        m_color = color;
+        a=color.getRed();
+        System.out.println("a=color.getRed();"+a);
+		b=color.getGreen();
+		System.out.println("b=color.getGreen();"+b);
+        c=color.getBlue();
+		System.out.println("c=color.getBlue();"+c);
+        this.setBackground(color);
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void setColorinicial() {
+        a=155;
+		b=205;
+		c=255;
+        m_color = new Color(a, b, c);
+        this.setBackground(m_color);
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void setColorfin() {
+        this.m_color = new Color(45, 95, 145);
+        a=45;
+        b=95;
+        c=145;
+        this.setBackground(m_color);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/PanelColor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/HTMLInfoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/HTMLInfoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/HTMLInfoPanel.java	(revision 42196)
@@ -0,0 +1,224 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.app.project.documents.view.toc.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.JEditorPane;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.utils.swing.JComboBox;
+
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class HTMLInfoPanel extends AbstractPanel{
+	private final String      bgColor0        = "\"#FEEDD6\""; // light salmon
+	private final String      bgColor1        = "\"#EAEAEA\""; // light grey
+	private final String      bgColor3        = "\"#FBFFE1\""; // light yellow
+	private final String      bgColor4        = "\"#D6D6D6\""; // Gris
+	private final String      bgColorBody     = "\"#FFFFFF\""; // white
+	
+	private JScrollPane       jScrollPane     = null;
+	public JEditorPane        jEditorPane     = null;
+	private JComboBox         jComboBox       = null;
+		
+	/**
+	 * 
+	 */
+	public HTMLInfoPanel() {
+		super();
+		setLabel(PluginServices.getText(this, "info"));
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	protected void initialize() {
+		this.setLayout(new BorderLayout(5, 5));
+		this.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		this.add(getJScrollPane(), BorderLayout.CENTER);		
+		this.getJEditorPane().repaint();		
+	}	
+	
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getJEditorPane());
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jEditorPane
+	 *
+	 * @return javax.swing.JEditorPane
+	 */
+	private JEditorPane getJEditorPane() {
+		if (jEditorPane == null) {
+			jEditorPane = new JEditorPane();
+			jEditorPane.setEditable(false);
+			jEditorPane.setContentType("text/html");
+		}
+		return jEditorPane;
+	}
+	
+	/**
+	 * Booleano que est� a true cuando la fila a dibujar es par y a false cuando
+	 * es impar.
+	 */
+	private boolean           rowColor        = true;
+	
+	/**
+	 * Controla la alternatividad de colores en la tabla.
+	 *
+	 * @return Cadena con el color de la fila siguiente.
+	 */
+	private String getColor() {
+		String color = (rowColor ? bgColor0 : bgColor1);
+		rowColor = !rowColor;
+		return color;
+	}
+
+	/**
+	 * Obtiene una entrada de la tabla en formato HTML a partir de una propiedad,
+	 * un valor y un color.
+	 *
+	 * @param prop
+	 *          Nombre de la propiedad
+	 * @param value
+	 *          Valor
+	 * @param color
+	 *          Color
+	 *
+	 * @return Entrada HTML de la tabla
+	 */
+	protected String setHTMLBasicProperty(String prop, String value) {
+		String content = "<tr valign=\"top\">";
+		if (prop != null)
+			content += "<td bgcolor=" + bgColor4 + "align=\"right\" width=\"33%\"><font face=\"Arial\" size=\"3\">" + prop + ":&nbsp;</font></td>";
+		content += "<td bgcolor=" + getColor() + "align=\"left\" width=\"67%\"><font face=\"Arial\" size=\"3\">" + value + "</font></td>";
+		content += "</tr>";
+
+		return content;
+	}
+
+	/**
+	 * Obtiene una cabecera de tabla en formato HTML a partir de un titulo.
+	 *
+	 * @param title
+	 *          Nombre del titulo
+	 * @param colspan
+	 *          Numero de celdas que ocupara el titulo
+	 *
+	 * @return Entrada HTML del titulo
+	 */
+	protected String setHTMLTitleTable(String title, int colspan) {
+		return
+			"<tr valign=\"middle\" >" +
+			"<td bgcolor=" + bgColor3 + " align=\"center\" colspan=\"" + colspan + "\"><font face=\"Arial\" size=\"3\"><b> " + title + "</b></font></td>" +
+			"</tr>";
+	}
+
+	/**
+	 * Obtiene una cabecera de tabla en formato HTML a partir de un titulo.
+	 *
+	 * @param content
+	 *          Codigo HTML de las filas que componen la tabla.
+	 *
+	 * @return Entrada HTML de la tabla completa
+	 */
+	protected String setHTMLTable(String content) {
+		return "<table cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">" + content + "</table>";
+	}
+
+	/**
+	 * Genera el HTML para todo el contenido.
+	 *
+	 * @param content
+	 *          Codigo HTML que ira en el <body>...</body>.
+	 *
+	 * @return HTML completo
+	 */
+	protected String setHTMLBody(String content) {
+		String html = "<html>";
+		html += "<body bgcolor=" + bgColorBody + " topmargin=\"0\" marginheight=\"0\">";
+		html += content;
+		html += "</body>";
+		html += "</html>";
+		return html;
+	}
+	
+	/**
+	 * Add the HTML code t the form
+	 * @param content
+	 */
+	protected void addHTMLToPanel(String content){
+		this.getJEditorPane().setContentType("text/html");
+		this.getJEditorPane().setText(content);
+		this.getJEditorPane().setCaretPosition(0);
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/HTMLInfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOC.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOC.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOC.java	(revision 42196)
@@ -0,0 +1,1177 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.BorderFactory;
+import javax.swing.JColorChooser;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.SwingUtilities;
+import javax.swing.event.TreeExpansionEvent;
+import javax.swing.event.TreeExpansionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.preferencespage.ViewPage;
+import org.gvsig.app.project.documents.view.IContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.DnDJTree;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.ITocOrderListener;
+import org.gvsig.app.project.documents.view.toc.TocItemBranch;
+import org.gvsig.app.project.documents.view.toc.TocItemLeaf;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.events.AtomicEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.AtomicEventListener;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+import org.gvsig.fmap.mapcontext.layers.operations.Classifiable;
+import org.gvsig.fmap.mapcontext.layers.operations.IHasImageLegend;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendClearEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.utils.XMLEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author fjp
+ */
+public class TOC extends JComponent implements ITocOrderListener,
+    LegendListener, LayerCollectionListener, TreeExpansionListener,
+    ComponentListener, LegendContentsChangedListener {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 5689047685537359038L;
+
+    /**
+     * Useful for debug the problems during the implementation.
+     */
+    private static Logger logger = LoggerFactory.getLogger(TOC.class);
+
+    private MapContext mapContext;
+
+    private DnDJTree m_Tree;
+
+    private DefaultTreeModel m_TreeModel;
+
+    private DefaultMutableTreeNode m_Root;
+
+    private TOCRenderer m_TocRenderer;
+
+    private JScrollPane m_Scroller;
+
+    // private ArrayList m_Listeners;
+    private Map<String, Boolean> m_ItemsExpanded =
+        new HashMap<String, Boolean>();
+
+    private NodeSelectionListener nodeSelectionListener = null;
+
+    /**
+     * Crea un nuevo TOC.
+     */
+    public TOC() {
+        this.setName("TOC");
+        this.setLayout(new BorderLayout());
+        this.setMinimumSize(new Dimension(100, 80));
+        this.setPreferredSize(new Dimension(100, 80));
+
+        // Construct the tree.
+        m_Root = new DefaultMutableTreeNode(java.lang.Object.class);
+        m_TreeModel = new DefaultTreeModel(m_Root);
+        m_Tree = new DnDJTree(m_TreeModel);
+
+        m_TocRenderer = new TOCRenderer(m_Tree.getBackground());
+        m_Tree.setCellRenderer(m_TocRenderer);
+
+        m_Tree.setRootVisible(false);
+
+        // m_Tree.setExpandsSelectedPaths(true);
+        // m_Tree.setAutoscrolls(true);
+        m_Tree.setShowsRootHandles(true);
+
+        // Posibilidad de seleccionar de forma aleatoria nodos de la leyenda.
+        m_Tree.getSelectionModel().setSelectionMode(
+            TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
+        nodeSelectionListener = new NodeSelectionListener(m_Tree);
+        m_Tree.addMouseListener(nodeSelectionListener);
+        // m_Tree.setBackground(UIManager.getColor("Button.background"));
+        // m_Tree.setBorder(BorderFactory.createEtchedBorder());
+
+        this.addComponentListener(this);
+
+        m_Tree.addTreeExpansionListener(this);
+
+        m_Tree.addOrderListener(this);
+
+        m_Tree.setRowHeight(0); // Para que lo determine el renderer
+
+        m_Scroller = new JScrollPane(m_Tree);
+        m_Scroller.setBorder(BorderFactory.createEmptyBorder());
+
+        // scrollPane.setPreferredSize(new Dimension(80,80));
+        // Add everything to this panel.
+        /*
+         * GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c =
+         * new GridBagConstraints(); setLayout(gridbag); c.fill =
+         * GridBagConstraints.BOTH; c.weightx = 1.0;
+         * gridbag.setConstraints(check,c);
+         */
+        add(m_Scroller); // , BorderLayout.WEST);
+
+        // refresh();
+    }
+
+    /**
+     * Elimina los listeners que actuan sobre el TOC, lo �nico que deja hacer es
+     * desplegar la leyenda de las capas.
+     */
+    public void removeListeners() {
+        m_Tree.removeMouseListener(nodeSelectionListener);
+        m_Tree.invalidateListeners();
+    }
+
+    /**
+     * Inserta el FMap.
+     * 
+     * @param mc
+     *            FMap.
+     */
+    public void setMapContext(MapContext mc) {
+        mapContext = mc;
+        mapContext.addAtomicEventListener(new AtomicEventListener() {
+
+            /**
+             * @see org.gvsig.fmap.mapcontext.events.listeners.AtomicEventListener#atomicEvent(org.gvsig.fmap.mapcontext.events.AtomicEvent)
+             */
+            public void atomicEvent(final AtomicEvent e) {
+                if (!SwingUtilities.isEventDispatchThread()) {
+                    SwingUtilities.invokeLater(new Runnable() {
+
+                        public void run() {
+                            atomicEvent(e);
+                        }
+                    });
+                    return;
+                }
+
+                if ((e.getLayerCollectionEvents().length > 0)
+                    || (e.getLegendEvents().length > 0)) {
+                    refresh();
+                }
+
+                if (e.getLayerEvents().length > 0) {
+                    repaint();
+                }
+
+                if (e.getExtentEvents().length > 0) {
+                    repaint();
+                }
+                LayerCollectionEvent[] events = e.getLayerCollectionEvents();
+                for( int i=0; i<events.length ; i++ ) {
+                   if( events[i].getEventType() == LayerCollectionEvent.LAYER_ADDED ) { 
+                       if (PluginServices.getMainFrame() != null) {
+                           PluginServices.getMainFrame().enableControls();
+                       }
+                   }
+                   // ===================================================
+                   // Change visibility of layer before adding, according to app preferences
+                   if( events[i].getEventType() == LayerCollectionEvent.LAYER_ADDING ) {
+
+                       if (invisibilityIsForced()) {
+                           events[i].getAffectedLayer().setVisible(false);
+                       }
+                   }
+                   // ===================================================
+                }
+            }
+        });
+
+        refresh();
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    private void setExpandedNodes(DefaultMutableTreeNode node) {
+        // int i = 0;
+        // Las claves sobrantes de m_ItemsExpanded (provocadas
+        // por layerRemove, se quitan en el evento layerRemoved
+        // de este TOC
+        DefaultMutableTreeNode n;
+        @SuppressWarnings("rawtypes")
+        Enumeration enumeration = node.children();
+        //Copia necesaria para que los cambios no adulteren el estado inicial del TOC
+        Map<String, Boolean> itemsExpanded_copy = new HashMap<String, Boolean>(m_ItemsExpanded);
+
+        while (enumeration.hasMoreElements()) {
+            n = (DefaultMutableTreeNode) enumeration.nextElement();
+            if (n.getChildCount() > 0) {
+                setExpandedNodes(n);
+            }
+            TreePath path = new TreePath(m_TreeModel.getPathToRoot(n));
+            ITocItem item = (ITocItem) n.getUserObject();
+            Boolean b = (Boolean) itemsExpanded_copy.get(item.getLabel());
+
+            if (b == null) // No estaba en el hash todav�a: valor por defecto
+            {
+                m_Tree.expandPath(path);
+
+                return;
+            }
+
+            if (b.booleanValue()) {
+                m_Tree.expandPath(path);
+            } else {
+                m_Tree.collapsePath(path);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.cit.opensig.gui.IToc#refresh()
+     */
+    public void refresh() {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    refresh();
+                }
+            });
+            return;
+        }
+        LayerCollection theLayers = mapContext.getLayers();
+        m_Root.removeAllChildren();
+        m_Root.setAllowsChildren(true);
+        doRefresh(theLayers, m_Root);
+
+        m_TreeModel.reload();
+
+        setExpandedNodes(m_Root);
+    }
+
+    private void doRefresh(LayerCollection theLayers,
+        DefaultMutableTreeNode parentNode) {
+        int width = m_Tree.getWidth();
+        if (width == 0) {
+            width = 300;
+        }
+        Dimension sizeLeaf = new Dimension(width, 15);
+        // Get the tree font height
+        Font font = m_Tree.getFont();
+        FontMetrics metrics = this.getFontMetrics(font);
+        Dimension sizeBranch = new Dimension(width, metrics.getHeight() + 4);
+
+        for (int i = theLayers.getLayersCount() - 1; i >= 0; i--) {
+            FLayer lyr = theLayers.getLayer(i);
+            if (!lyr.isInTOC()) {
+                continue;
+            }
+            TocItemBranch elTema = new TocItemBranch(lyr);
+            elTema.setSize(sizeBranch);
+
+            DefaultMutableTreeNode nodeLayer =
+                new DefaultMutableTreeNode(elTema);
+
+            m_TreeModel.insertNodeInto(nodeLayer, parentNode,
+                parentNode.getChildCount());
+
+            if (lyr instanceof LayerCollection) {
+                LayerCollection group = (LayerCollection) lyr;
+                doRefresh(group, nodeLayer);
+            } else {
+                if (lyr instanceof Classifiable) {// && !(lyr instanceof
+                                                  // FLyrAnnotation)) {
+
+                    Classifiable classifiable = (Classifiable) lyr;
+                    ILegend legendInfo = classifiable.getLegend();
+
+                    try {
+                        if (legendInfo instanceof IClassifiedLegend) {
+                            IClassifiedLegend cl =
+                                (IClassifiedLegend) legendInfo;
+                            String[] descriptions = cl.getDescriptions();
+                            ISymbol[] symbols = cl.getSymbols();
+
+                            for (int j = 0; j < descriptions.length; j++) {
+                                TocItemLeaf itemLeaf;
+                                itemLeaf =
+                                    new TocItemLeaf(symbols[j],
+                                        descriptions[j], classifiable.getShapeType());
+                                itemLeaf.setSize(sizeLeaf);
+
+                                DefaultMutableTreeNode nodeValue =
+                                    new DefaultMutableTreeNode(itemLeaf);
+                                m_TreeModel.insertNodeInto(nodeValue,
+                                    nodeLayer, nodeLayer.getChildCount());
+
+                            }
+                        }
+
+                        if (legendInfo instanceof ISingleSymbolLegend
+                            && (legendInfo.getDefaultSymbol() != null)) {
+                            TocItemLeaf itemLeaf;
+                            itemLeaf =
+                                new TocItemLeaf(legendInfo.getDefaultSymbol(),
+                                    legendInfo.getDefaultSymbol()
+                                        .getDescription(), classifiable.getShapeType());
+                            itemLeaf.setSize(sizeLeaf);
+
+                            DefaultMutableTreeNode nodeValue =
+                                new DefaultMutableTreeNode(itemLeaf);
+                            m_TreeModel.insertNodeInto(nodeValue, nodeLayer,
+                                nodeLayer.getChildCount());
+                        }
+                        
+                        if (legendInfo instanceof IHasImageLegend) {
+                            TocItemLeaf itemLeaf;
+                            IHasImageLegend imageLegend = (IHasImageLegend) legendInfo;
+                            Image image = imageLegend.getImageLegend();
+                            
+                            int w = 0;
+                            int h = 0;
+                            
+                            if(image != null) {
+                            	w = image.getWidth(null);
+                            	h = image.getHeight(null);
+                            }
+                            
+                            if (image != null && w > 0 && h > 0) {
+                                itemLeaf = new TocItemLeaf();
+                                itemLeaf.setImageLegend(image, "", new Dimension(w, h));
+
+                                DefaultMutableTreeNode nodeValue =
+                                    new DefaultMutableTreeNode(itemLeaf);
+                                m_TreeModel.insertNodeInto(nodeValue, nodeLayer,
+                                    nodeLayer.getChildCount());
+                            }
+                        }
+                    } catch (ReadException e) {
+                        logger.error(MessageFormat.format(
+                            "Can't add leyend of layer {0} to the TOC.", lyr),
+                            e);
+                    }
+                } 
+            } // if instanceof layers
+        }
+    }
+
+    /**
+     * @see com.iver.cit.opensig.gui.toc.ITocOrderListener#orderChanged(int,
+     *      int)
+     */
+    public void orderChanged(int oldPos, int newPos, FLayers lpd) {
+        try {
+            lpd.moveTo(oldPos, newPos);
+        } catch (CancelationException e) {
+            logger.error("Can't change order of layers in TOC", e);
+        }
+        mapContext.invalidate();
+    }
+
+    public void parentChanged(FLayers lpo, FLayers lpd, FLayer ls) {
+        lpo.move(ls, lpd);
+        mapContext.invalidate();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.
+     * ComponentEvent)
+     */
+    public void componentHidden(ComponentEvent e) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent
+     * )
+     */
+    public void componentMoved(ComponentEvent e) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.event.ComponentListener#componentResized(java.awt.event.
+     * ComponentEvent)
+     */
+    public void componentResized(ComponentEvent e) {
+        DefaultMutableTreeNode n;
+        @SuppressWarnings("rawtypes")
+        Enumeration enumeration = m_Root.children();
+
+        while (enumeration.hasMoreElements()) {
+            n = (DefaultMutableTreeNode) enumeration.nextElement();
+
+            if (n.getUserObject() instanceof TocItemBranch) {
+                ITocItem item = (ITocItem) n.getUserObject();
+                Dimension szAnt = item.getSize();
+                item.setSize(new Dimension(this.getWidth() - 40, szAnt.height));
+            }
+
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent
+     * )
+     */
+    public void componentShown(ComponentEvent e) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerListener#legendChanged(com.iver.cit
+     * .gvsig.fmap.rendering.LegendChangedEvent)
+     */
+    public void legendChanged(final LegendChangedEvent e) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    legendChanged(e);
+                }
+            });
+            return;
+        }
+        refresh();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdded(com
+     * .iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+     */
+    public void layerAdded(final LayerCollectionEvent e) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    layerAdded(e);
+                }
+            });
+            return;
+        }
+        FLayer layer = e.getAffectedLayer();
+        if( layer instanceof FLyrVect ) {
+            FLyrVect layerVect = (FLyrVect)layer;
+            ILegend legend = layerVect.getLegend();
+            switch( e.getEventType() ) {
+                case LayerCollectionEvent.LAYER_ADDED :
+                    legend.addLegendListener(this);
+                    break;
+                case LayerCollectionEvent.LAYER_REMOVED :
+                    legend.removeLegendListener(this);
+                    break;
+            }
+        }
+        refresh();
+    }
+
+    public boolean symbolChanged(SymbolLegendEvent e) {
+        refresh();
+        return true;
+    }
+
+    public void legendCleared(LegendClearEvent event) {
+        refresh();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoved(com
+     * .iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+     */
+    public void layerMoved(final LayerPositionEvent e) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    layerMoved(e);
+                }
+            });
+            return;
+        }
+        refresh();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com
+     * .iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+     */
+    public void layerRemoved(final LayerCollectionEvent e) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    layerRemoved(e);
+                }
+            });
+            return;
+        }
+        m_ItemsExpanded.remove(e.getAffectedLayer().getName());
+        refresh();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdding(com
+     * .iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+     */
+    public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoving(com
+     * .iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+     */
+    public void layerMoving(LayerPositionEvent e) throws CancelationException {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoving(
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+     */
+    public void layerRemoving(LayerCollectionEvent e)
+        throws CancelationException {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#activationChanged
+     * (com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+     */
+    public void activationChanged(LayerCollectionEvent e)
+        throws CancelationException {
+        repaint();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#visibilityChanged
+     * (com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+     */
+    public void visibilityChanged(final LayerCollectionEvent e)
+        throws CancelationException {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    visibilityChanged(e);
+                }
+            });
+            return;
+        }
+        repaint();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * javax.swing.event.TreeExpansionListener#treeCollapsed(javax.swing.event
+     * .TreeExpansionEvent)
+     */
+    public void treeCollapsed(TreeExpansionEvent event) {
+        TreePath path = event.getPath();
+        DefaultMutableTreeNode n =
+            (DefaultMutableTreeNode) path.getLastPathComponent();
+
+        if (n.getUserObject() instanceof ITocItem) {
+            ITocItem item = (ITocItem) n.getUserObject();
+            Boolean b = Boolean.FALSE;
+
+            m_ItemsExpanded.put(item.getLabel(), b);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * javax.swing.event.TreeExpansionListener#treeExpanded(javax.swing.event
+     * .TreeExpansionEvent)
+     */
+    public void treeExpanded(TreeExpansionEvent event) {
+        TreePath path = event.getPath();
+        DefaultMutableTreeNode n =
+            (DefaultMutableTreeNode) path.getLastPathComponent();
+
+        if (n.getUserObject() instanceof ITocItem) {
+            ITocItem item = (ITocItem) n.getUserObject();
+            Boolean b = Boolean.TRUE;
+
+            m_ItemsExpanded.put(item.getLabel(), b);
+        }
+    }
+
+    /**
+     * Obtiene el JScrollPane que contiene el TOC
+     * 
+     * @return JScrollPane que contiene el TOC
+     */
+    public JScrollPane getJScrollPane() {
+        return this.m_Scroller;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public DnDJTree getTree() {
+        return m_Tree;
+    }
+
+    /**
+     * Clase Listener que reacciona al pulsar sobre el checkbox de un nodo y
+     * crea un popupmenu al pulsar el bot�n derecho.
+     */
+    class NodeSelectionListener extends MouseAdapter implements ActionListener {
+
+        JTree tree;
+
+        JDialog dlg;
+
+        JColorChooser colorChooser;
+
+        FPopupMenu popmenu = null;
+
+        DefaultMutableTreeNode node;
+
+        /**
+         * Crea un nuevo NodeSelectionListener.
+         * 
+         * @param tree
+         *            DOCUMENT ME!
+         */
+        NodeSelectionListener(JTree tree) {
+            this.tree = tree;
+        }
+
+        /**
+         * DOCUMENT ME!
+         * 
+         * @param e
+         *            DOCUMENT ME!
+         */
+        public void mouseClicked(MouseEvent e) {
+            int x = e.getX();
+            int y = e.getY();
+            int row = tree.getRowForLocation(x, y);
+            TreePath path = tree.getPathForRow(row);
+            LayerCollection layers = mapContext.getLayers();
+
+            if (path != null) {
+                if (e.getClickCount() == 1) {
+                    // this fixes a bug when double-clicking. JTree by default
+                    // expands the tree when double-clicking, so we capture a
+                    // different node in the second click than in the first
+                    node = (DefaultMutableTreeNode) path.getLastPathComponent();
+                }
+
+                if (node != null
+                    && node.getUserObject() instanceof TocItemBranch) {
+                    // double click with left button ON A BRANCH/NODE (layer)
+                    if (e.getClickCount() >= 2
+                        && e.getButton() == MouseEvent.BUTTON1) {
+                        e.consume();
+                        PluginServices.getMDIManager().setWaitCursor();
+                        try {
+                            TocItemBranch leaf =
+                                (TocItemBranch) node.getUserObject();
+
+                            IContextMenuAction action =
+                                leaf.getDoubleClickAction();
+                            if (action != null) {
+                                /*
+                                 * if there is an action associated with the
+                                 * double-clicked element it will be fired for
+                                 * it and FOR ALL OTHER COMPATIBLES THAT HAVE
+                                 * BEEN ACTIVATED.
+                                 */
+                                ArrayList<FLayer> targetLayers =
+                                    new ArrayList<FLayer>();
+
+                                TocItemBranch owner =
+                                    (TocItemBranch) node.getUserObject();
+
+                                FLayer masterLayer = owner.getLayer();
+                                targetLayers.add(masterLayer);
+                                FLayer[] actives =
+                                    mapContext.getLayers().getActives();
+                                for (int i = 0; i < actives.length; i++) {
+                                    if (actives[i].getClass().equals(
+                                        masterLayer.getClass())) {
+                                        if (actives[i] instanceof FLyrVect) {
+                                            FLyrVect vectorLayer =
+                                                (FLyrVect) actives[i];
+                                            FLyrVect vectorMaster =
+                                                (FLyrVect) masterLayer;
+                                            if (vectorLayer.getShapeType() == vectorMaster
+                                                .getShapeType()) {
+                                                targetLayers.add(vectorLayer);
+                                            } else {
+                                                vectorLayer.setActive(false);
+                                            }
+                                        }
+                                        // TODO for the rest of layer types
+                                        // (i.e. FLyrRaster)
+                                    } else {
+                                        actives[i].setActive(false);
+                                    }
+                                }
+                                
+                                // Do nothing if there is a non-available layer
+                                for (int k=0; k<targetLayers.size(); k++) {
+                                    if (!targetLayers.get(k).isAvailable()) {
+                                        return;
+                                    }
+                                }
+                                
+                                action.execute(leaf,
+                                    targetLayers.toArray(new FLayer[0]));
+                            }
+                        } catch (Exception ex) {
+                            NotificationManager.addError(ex);
+                        } finally {
+                            PluginServices.getMDIManager().restoreCursor();
+                        }
+                        return;
+                    }
+
+                    TocItemBranch elTema = (TocItemBranch) node.getUserObject();
+                    FLayer lyr = elTema.getLayer();
+                    lyr.getMapContext().beginAtomicEvent();
+
+                    if (((e.getModifiers() & InputEvent.SHIFT_MASK) != 0)
+                        && (e.getButton() == MouseEvent.BUTTON1)) {
+                        FLayer[] activeLayers = layers.getActives();
+                        if (activeLayers.length > 0) {
+                            selectInterval(layers, lyr);
+                        } else {
+                            updateActive(lyr, !lyr.isActive());
+                        }
+
+                    } else {
+                        if (!((e.getModifiers() & InputEvent.CTRL_MASK) != 0)
+                            && (e.getButton() == MouseEvent.BUTTON1)) {
+                            layers.setAllActives(false);
+                        }
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // lyr.setActive(true);
+                            updateActive(lyr, !lyr.isActive());
+                        }
+                    }
+                    // Si pertenece a un grupo, lo ponemos activo tambi�n.
+                    // FLayer parentLayer = lyr.getParentLayer();
+
+                    /*
+                     * if (parentLayer != null) { parentLayer.setActive(true); }
+                     */
+                    Point layerNodeLocation =
+                        tree.getUI().getPathBounds(tree, path).getLocation();
+
+                    // Rect�ngulo que representa el checkbox
+                    Rectangle checkBoxBounds =
+                        m_TocRenderer.getCheckBoxBounds();
+                    checkBoxBounds.translate((int) layerNodeLocation.getX(),
+                        (int) layerNodeLocation.getY());
+
+                    if (checkBoxBounds.contains(e.getPoint())) {
+                        updateVisible(lyr);
+                    }
+
+                    // }
+                    if (e.getButton() == MouseEvent.BUTTON3) {
+                        // Boton derecho sobre un nodo del arbol
+                        // if ((e.getModifiers() & InputEvent.META_MASK) != 0) {
+                        popmenu = new FPopupMenu(mapContext, node);
+                        tree.add(popmenu);
+
+                        popmenu.show(e.getComponent(), e.getX(), e.getY());
+
+                        // }
+                    }
+
+                    lyr.getMapContext().endAtomicEvent();
+                }
+
+                if (node != null && node.getUserObject() instanceof TocItemLeaf) {
+                    // double click with left button ON A LEAF (ISymbol)
+                    if (e.getClickCount() >= 2
+                        && e.getButton() == MouseEvent.BUTTON1) {
+                        e.consume();
+
+                        PluginServices.getMDIManager().setWaitCursor();
+                        try {
+                            TocItemLeaf leaf =
+                                (TocItemLeaf) node.getUserObject();
+                            IContextMenuAction action =
+                                leaf.getDoubleClickAction();
+                            if (action != null) {
+                                /*
+                                 * if there is an action associated with the
+                                 * double-clicked element it will be fired for
+                                 * it and FOR ALL OTHER COMPATIBLES THAT HAVE
+                                 * BEEN ACTIVATED.
+                                 */
+                                ArrayList<FLayer> targetLayers =
+                                    new ArrayList<FLayer>();
+
+                                TocItemBranch owner =
+                                    (TocItemBranch) ((DefaultMutableTreeNode) node
+                                        .getParent()).getUserObject();
+
+                                FLayer masterLayer = owner.getLayer();
+                                targetLayers.add(masterLayer);
+                                FLayer[] actives =
+                                    mapContext.getLayers().getActives();
+                                for (int i = 0; i < actives.length; i++) {
+                                    if (actives[i].getClass().equals(
+                                        masterLayer.getClass())) {
+                                        if (actives[i] instanceof FLyrVect) {
+                                            FLyrVect vectorLayer =
+                                                (FLyrVect) actives[i];
+                                            FLyrVect vectorMaster =
+                                                (FLyrVect) masterLayer;
+                                            int masterLayerShapetypeOF_THE_LEGEND =
+                                                ((IVectorLegend) vectorMaster
+                                                    .getLegend())
+                                                    .getShapeType();
+                                            int anotherVectorLayerShapetypeOF_THE_LEGEND =
+                                                ((IVectorLegend) vectorLayer
+                                                    .getLegend())
+                                                    .getShapeType();
+                                            if (masterLayerShapetypeOF_THE_LEGEND == anotherVectorLayerShapetypeOF_THE_LEGEND) {
+                                                targetLayers.add(vectorLayer);
+                                            } else {
+                                                vectorLayer.setActive(false);
+                                            }
+                                        }
+                                        // TODO for the rest of layer types
+                                        // (i.e. FLyrRaster)
+                                    } else {
+                                        actives[i].setActive(false);
+                                    }
+                                }
+                                action.execute(leaf,
+                                    targetLayers.toArray(new FLayer[0]));
+                            }
+                        } catch (Exception ex) {
+                            NotificationManager.addError(ex);
+                        } finally {
+                            PluginServices.getMDIManager().restoreCursor();
+                        }
+                        return;
+                    }
+
+                    // Boton derecho sobre un Simbolo
+                    // TocItemLeaf auxLeaf = (TocItemLeaf) node.getUserObject();
+                    // FSymbol theSym = auxLeaf.getSymbol();
+                    if ((e.getModifiers() & InputEvent.META_MASK) != 0) {
+                        popmenu = new FPopupMenu(mapContext, node);
+                        tree.add(popmenu);
+                        popmenu.show(e.getComponent(), e.getX(), e.getY());
+                    }
+                }
+
+                ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
+
+                if (row == 0) {
+                    tree.revalidate();
+                    tree.repaint();
+                }
+
+                if (PluginServices.getMainFrame() != null) {
+                    PluginServices.getMainFrame().enableControls();
+                }
+            } else {
+                if (e.getButton() == MouseEvent.BUTTON3) {
+                    popmenu = new FPopupMenu(mapContext, null);
+                    tree.add(popmenu);
+                    popmenu.show(e.getComponent(), e.getX(), e.getY());
+                }
+
+            }
+        }
+
+        private void selectInterval(LayerCollection layers, FLayer lyr) {
+            FLayer[] activeLayers = layers.getActives();
+            // if (activeLayers[0].getParentLayer() instanceof FLayers &&
+            // activeLayers[0].getParentLayer().getParentLayer()!=null) {
+            // selectInterval((LayerCollection)activeLayers[0].getParentLayer(),lyr);
+            // }
+            for (int j = 0; j < layers.getLayersCount(); j++) {
+                FLayer layerAux = layers.getLayer(j);
+                // Si se cumple esta condici�n es porque la primera capa que nos
+                // encontramos en el TOC es la que estaba activa
+                if (activeLayers[0].equals(layerAux)) {
+                    boolean isSelected = false;
+                    for (int i = 0; i < layers.getLayersCount(); i++) {
+                        FLayer layer = layers.getLayer(i);
+                        if (!isSelected) {
+                            isSelected = layer.isActive();
+                        } else {
+                            updateActive(layer, true);
+                            if (lyr.equals(layer)) {
+                                isSelected = false;
+                            }
+                        }
+                    }
+                    break;
+                } else
+                    // Si se cumple esta condici�n es porque la primera capa que
+                    // nos
+                    // encontramos en el TOC es la que acabamos de seleccionar
+                    if (lyr.equals(layerAux)) {
+                        boolean isSelected = false;
+                        for (int i = layers.getLayersCount() - 1; i >= 0; i--) {
+                            FLayer layer = layers.getLayer(i);
+                            if (!isSelected) {
+                                isSelected = layer.isActive();
+                            } else {
+                                updateActive(layer, true);
+                                if (lyr.equals(layer)) {
+                                    isSelected = false;
+                                }
+                            }
+                        }
+                        break;
+                    }
+            }
+
+        }
+
+        /**
+         * DOCUMENT ME!
+         * 
+         * @param lyr
+         *            DOCUMENT ME!
+         * @param active
+         *            DOCUMENT ME!
+         */
+        private void updateActive(FLayer lyr, boolean active) {
+            lyr.setActive(active);
+            updateActiveChild(lyr);
+        }
+
+        /**
+         * DOCUMENT ME!
+         * 
+         * @param lyr
+         *            DOCUMENT ME!
+         */
+        private void updateActiveChild(FLayer lyr) {
+            if (lyr instanceof FLayers) { // Es la raiz de una rama o
+                // cualquier nodo intermedio.
+
+                FLayers layergroup = (FLayers) lyr;
+
+                for (int i = 0; i < layergroup.getLayersCount(); i++) {
+                    layergroup.getLayer(i).setActive(lyr.isActive());
+                    updateActiveChild(layergroup.getLayer(i));
+                }
+            }
+        }
+
+        /**
+         * Actualiza la visibilidad de la capas.
+         * 
+         * @param lyr
+         *            Capa sobre la que se est� clickando.
+         */
+        private void updateVisible(FLayer lyr) {
+            if (lyr.isAvailable()) {
+                lyr.setVisible(!lyr.visibleRequired());
+                updateVisibleChild(lyr);
+                updateVisibleParent(lyr);
+            }
+        }
+
+        /**
+         * Actualiza de forma recursiva la visibilidad de los hijos de la capa
+         * que se pasa como par�metro.
+         * 
+         * @param lyr
+         *            Capa a actualizar.
+         */
+        private void updateVisibleChild(FLayer lyr) {
+            if (lyr instanceof FLayers) { // Es la raiz de una rama o
+                                          // cualquier nodo intermedio.
+
+                FLayers layergroup = (FLayers) lyr;
+
+                for (int i = 0; i < layergroup.getLayersCount(); i++) {
+                    layergroup.getLayer(i).setVisible(lyr.visibleRequired());
+                    updateVisibleChild(layergroup.getLayer(i));
+                }
+            }
+        }
+
+        /**
+         * Actualiza de forma recursiva la visibilidad del padre de la capa que
+         * se pasa como par�metro.
+         * 
+         * @param lyr
+         *            Capa a actualizar.
+         */
+        private void updateVisibleParent(FLayer lyr) {
+            FLayers parent = lyr.getParentLayer();
+
+            if (parent != null) {
+                boolean parentVisible = false;
+
+                for (int i = 0; i < parent.getLayersCount(); i++) {
+                    if (parent.getLayer(i).visibleRequired()) {
+                        parentVisible = true;
+                    }
+                }
+
+                parent.setVisible(parentVisible);
+                updateVisibleParent(parent);
+            }
+        }
+
+        /**
+         * DOCUMENT ME!
+         * 
+         * @param arg0
+         *            DOCUMENT ME!
+         */
+        public void actionPerformed(ActionEvent arg0) {
+        }
+
+        /**
+         * DOCUMENT ME!
+         * 
+         * @param arg0
+         *            DOCUMENT ME!
+         */
+        public void mouseReleased(MouseEvent arg0) {
+            super.mouseReleased(arg0);
+        }
+
+        /**
+         * DOCUMENT ME!
+         * 
+         * @param arg0
+         *            DOCUMENT ME!
+         */
+        public void mouseEntered(MouseEvent arg0) {
+            super.mouseEntered(arg0);
+        }
+    }
+    
+    private boolean invisibilityIsForced() {
+        
+        PluginServices ps = PluginServices.getPluginServices(this);
+        XMLEntity xml = ps.getPersistentXML();
+
+        if (xml.contains(ViewPage.ADD_NEW_LAYERS_IN_INVISIBLE_MODE_KEY_NAME)) {
+            // Get invisibility value
+            return xml.getBooleanProperty(ViewPage.ADD_NEW_LAYERS_IN_INVISIBLE_MODE_KEY_NAME);
+        } else {
+            // not found in preferences
+            return false;
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/TOC.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/ChangeName.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/ChangeName.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/ChangeName.java	(revision 42196)
@@ -0,0 +1,223 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.gui;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Di�logo para cambiar el nombre de una capa.
+ * 
+ * @author Vicente Caballero Navarro
+ * @author gvSIG Team
+ */
+public class ChangeName extends JPanel implements IWindow {
+
+    private static final long serialVersionUID = -1366865045507066336L;
+    private JLabel lblName = null;
+    private JTextField txtName = null;
+    private String name;
+    private AcceptCancelPanel jPanelAcceptCancel = null;
+    private boolean isAccepted = false;
+
+    /**
+     * This is the default constructor
+     * 
+     * @param layout
+     *            Referencia al Layout.
+     * @param fframe
+     *            Referencia al fframe de imagen.
+     */
+    public ChangeName(String n) {
+        super();
+        if (n == null) {
+            name = PluginServices.getText(this, "agrupacion");
+        } else {
+            name = n;
+        }
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        setLayout(new GridBagLayout());
+        setBorder(BorderFactory.createEmptyBorder(4, 5, 4, 5));
+
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(2, 5, 2, 5);
+        c.gridy = -1;
+
+        c.anchor = GridBagConstraints.WEST;
+        c.weightx = 0.0d;
+        c.gridx = 0;
+        c.gridy++;
+        add(getLblName(), c);
+
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0d;
+        c.gridx = 1;
+        add(getTxtName(), c);
+
+        c.anchor = GridBagConstraints.EAST;
+        c.gridx = 0;
+        c.gridwidth = 2;
+        c.gridy++;
+        c.weightx = 1.0d;
+        add(getJPanelAcceptCancel(), c);
+    }
+
+    /**
+     * This method initializes lFichero
+     * 
+     * @return javax.swing.JLabel
+     */
+    private JLabel getLblName() {
+        if (lblName == null) {
+            lblName = new JLabel(Messages.getText("nombre"));
+        }
+
+        return lblName;
+    }
+
+    /**
+     * This method initializes tFichero
+     * 
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTxtName() {
+        if (txtName == null) {
+            txtName = new JTextField(name, 20);
+            txtName.addKeyListener(new KeyListener() {
+
+                public void keyPressed(KeyEvent e) {
+                    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+                        acceptAction();
+                    } else
+                        if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+                            cancelAction();
+                        }
+                }
+
+                public void keyReleased(KeyEvent e) {
+                    // Nothing to do
+                }
+
+                public void keyTyped(KeyEvent e) {
+                    // Nothing to do
+                }
+
+            });
+        }
+        return txtName;
+    }
+
+    /**
+     * Inserta el path al TFichero.
+     * 
+     * @param val
+     *            path del fichero.
+     */
+    public void setText(String val) {
+        getTxtName().setText(val);
+    }
+
+    public WindowInfo getWindowInfo() {
+        WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
+        m_viewinfo.setTitle(Messages.getText("cambio_nombre"));
+        Dimension dim = getPreferredSize();
+        m_viewinfo.setWidth(dim.width);
+        m_viewinfo.setHeight(dim.height);
+        return m_viewinfo;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * This method initializes jPanel1
+     * 
+     * @return javax.swing.JPanel
+     */
+    private AcceptCancelPanel getJPanelAcceptCancel() {
+        if (jPanelAcceptCancel == null) {
+            ActionListener okActionListener, cancelActionListener;
+            okActionListener = new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    acceptAction();
+                }
+            };
+            cancelActionListener = new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    cancelAction();
+                }
+            };
+            jPanelAcceptCancel =
+                new AcceptCancelPanel(okActionListener, cancelActionListener);
+        }
+        return jPanelAcceptCancel;
+    }
+
+    public boolean isAccepted() {
+        return isAccepted;
+    }
+
+    protected void acceptAction() {
+        name = getTxtName().getText();
+        isAccepted = true;
+        PluginServices.getMDIManager().closeWindow(ChangeName.this);
+
+    }
+
+    protected void cancelAction() {
+        isAccepted = false;
+        PluginServices.getMDIManager().closeWindow(ChangeName.this);
+
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/gui/ChangeName.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemLeaf.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemLeaf.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemLeaf.java	(revision 42196)
@@ -0,0 +1,239 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.toc;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Rectangle;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.IContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.actions.ChangeSymbolTocMenuEntry;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
+
+
+/**
+ * @author FJP
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+public class TocItemLeaf implements ITocItem {
+    
+    private static Logger logger = LoggerFactory.getLogger(TocItemLeaf.class);
+
+	private ISymbol symbol;
+	private String description;
+	private int layerType;
+	private static int w_1symbol = 20;
+	private static int h_1symbol = 15;
+
+	private Dimension sz;
+	BufferedImage imgLegend = null;
+
+    final public static DataFlavor INFO_FLAVOR =
+	    new DataFlavor(TocItemLeaf.class, "ItemLeaf");
+
+	static DataFlavor flavors[] = {INFO_FLAVOR };
+
+
+	public TocItemLeaf(ISymbol symbol, String description, int layerType)
+	{
+		this.symbol = symbol;
+		this.description = description;
+		this.layerType = layerType;
+	}
+	public TocItemLeaf()
+	{
+
+	}
+	public void setImageLegend(Image imageLegend, String descrip, Dimension size)
+	{
+		this.description = descrip;
+		this.sz = size;
+		imgLegend = new BufferedImage(sz.width, sz.height, BufferedImage.TYPE_INT_ARGB);
+		Graphics2D g2 = imgLegend.createGraphics();
+		// Rectangle r = new Rectangle(sz.width, sz.height);
+		// TODO: Calcular ratio
+
+		double ratioImage =  (double) imageLegend.getWidth(null) / (double) imageLegend.getHeight(null);
+	    double ratioToc  = (double) sz.width / (double) sz.height;
+
+	    boolean resul = g2.drawImage(imageLegend, 0, 0, sz.width, sz.height, null);
+//		if (ratioImage > ratioToc) {
+//			int newHeight = (int) (sz.width / ratioImage);
+//			boolean resul = g2.drawImage(imageLegend, 0, 0, sz.width, newHeight, null);
+//		} else {
+//			int newWidth = (int) (sz.height * ratioImage);
+//			boolean resul = g2.drawImage(imageLegend, 0, 0, newWidth, sz.height, null);
+//		}
+
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#getLabel()
+	 */
+	public String getLabel() {
+		return description;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#getIcon()
+	 */
+	public Icon getIcon() {
+		// System.out.println("Dentro de getIcon: layerType=" + layerType);
+		if (imgLegend != null)
+		{
+//			Graphics2D g2 = imgLegend.createGraphics();
+//			g2.drawString("Prueba", 10, 20);
+			return new ImageIcon(imgLegend);
+		}
+
+		BufferedImage img = null;
+		Graphics2D g2 = null;
+		Rectangle r = null;
+
+		switch (layerType)
+		{
+			case Geometry.TYPES.POINT:
+			case Geometry.TYPES.CURVE:
+			case Geometry.TYPES.SURFACE:
+			case Geometry.TYPES.MULTICURVE:
+			case Geometry.TYPES.MULTISURFACE:
+			case Geometry.TYPES.MULTIPOINT:
+				img = new BufferedImage(w_1symbol, h_1symbol, BufferedImage.TYPE_INT_ARGB);
+				g2 = img.createGraphics();
+				r = new Rectangle(w_1symbol, h_1symbol);
+
+//				// TODO: CAMBIAR PARA QUE NO DEPENDA DE FSYMBOL
+//				if (symbol instanceof FSymbol)
+//					FGraphicUtilities.DrawSymbol(g2, AffineTransform.getScaleInstance(0.8,0.8), r, (FSymbol) symbol);
+//				// Por ahora, los que no sean FSymbol no se renderizan en el TOC.
+				break;
+			case Geometry.TYPES.GEOMETRY:
+				img = new BufferedImage(3*w_1symbol, h_1symbol, BufferedImage.TYPE_INT_ARGB);
+				g2 = img.createGraphics();
+				r = new Rectangle(3*w_1symbol, h_1symbol);
+//				if (symbol instanceof FSymbol)
+//					FGraphicUtilities.DrawSymbol(g2, AffineTransform.getScaleInstance(0.8,0.8), r, (FSymbol) symbol);
+				break;
+
+		}
+
+		if (g2 == null) {
+			return null;//TODO tipo de shape no soportado.
+		}
+		try {
+		    ISymbol clonesym = (ISymbol) symbol.clone();
+		    clonesym.drawInsideRectangle(g2, AffineTransform.getScaleInstance(1,1), r,null);
+		} catch (SymbolDrawingException e) {
+			if (e.getType() == SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS) {
+				try {
+					MapContextLocator.getSymbolManager()
+							.getWarningSymbol(
+									SymbolDrawingException.STR_UNSUPPORTED_SET_OF_SETTINGS,
+									symbol.getDescription(),
+									SymbolDrawingException.UNSUPPORTED_SET_OF_SETTINGS)
+							.drawInsideRectangle(g2, g2.getTransform(),
+									r.getBounds(), null);
+				} catch (SymbolDrawingException e1) {
+					// IMPOSSIBLE TO REACH THIS
+				}
+			} else {
+				// should be unreachable code
+	            logger.error("Symbol type mismatch", e);
+	            return null;
+			}
+		} catch (CloneNotSupportedException e) {
+		 // should be unreachable code
+		    logger.error("Symbol cannot be cloned (?)", e);
+		    return null;
+        }
+		return new ImageIcon(img);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.datatransfer.Transferable#getTransferDataFlavors()
+	 */
+	public DataFlavor[] getTransferDataFlavors() {
+		return flavors;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.datatransfer.Transferable#isDataFlavorSupported(java.awt.datatransfer.DataFlavor)
+	 */
+	public boolean isDataFlavorSupported(DataFlavor dF) {
+		return dF.equals(INFO_FLAVOR);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.datatransfer.Transferable#getTransferData(java.awt.datatransfer.DataFlavor)
+	 */
+	public Object getTransferData(DataFlavor dF) throws UnsupportedFlavorException, IOException {
+	    if (dF.equals(INFO_FLAVOR)) {
+	        return this;
+	      } else {
+			throw new UnsupportedFlavorException(dF);
+		}
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#getSize()
+	 */
+	public Dimension getSize() {
+		return sz;
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#setSize(java.awt.Dimension)
+	 */
+	public void setSize(Dimension sz) {
+		this.sz = sz;
+
+	}
+
+
+	/**
+	 * @return Returns the symbol.
+	 */
+	public ISymbol getSymbol() {
+		return symbol;
+	}
+	public IContextMenuAction getDoubleClickAction() {
+		return new ChangeSymbolTocMenuEntry();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemLeaf.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocMenuEntry.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import org.gvsig.app.project.documents.view.toc.gui.FPopupMenu;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)�
+ * @deprecated
+ */
+public abstract class TocMenuEntry implements ActionListener {
+	private FPopupMenu menu;
+	//private Class [] layerTypes = null;
+	public TocMenuEntry() {
+	}
+
+	/**
+	 * Se utiliza para inicializar el menu. Dentro comprobar�
+	 * encima de qu� tipo de tocItem hemos pinchado, y se
+	 * mostrar� la opci�n de menu o no en funci�n de si
+	 * es un branch o un leaf, o incluso de alg�n otro
+	 * par�metro interno.
+	 * @param menu
+	 */
+	public void initialize(FPopupMenu m) {
+		menu = m;
+	}
+
+	/**
+	 * C�digo que se ejecuta cuando selecciona una opci�n
+	 * de menu. Recibe el tocItem sobre el que has pinchado.
+	 * @param tocItem
+	 */
+	public abstract void actionPerformed(ActionEvent e);
+
+	public FPopupMenu getMenu() { return menu; }
+
+	public MapContext getMapContext() {
+		return menu.getMapContext();
+	}
+	public Object getNodeUserObject() {
+		if (menu.getNode() == null) {
+			return null;
+		}
+		return menu.getNode().getUserObject();
+	}
+
+	public FLayer getNodeLayer() {
+		if (isTocItemBranch()) {
+			return ((TocItemBranch) getNodeUserObject()).getLayer();
+		}
+		return null;
+	}
+	public boolean isTocItemLeaf() {
+		return getNodeUserObject() instanceof TocItemLeaf;
+	}
+
+	public boolean isTocItemBranch() {
+		return getNodeUserObject() instanceof TocItemBranch;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocItem.java	(revision 42196)
@@ -0,0 +1,50 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.toc;
+
+import java.awt.Dimension;
+import java.awt.datatransfer.Transferable;
+
+import javax.swing.Icon;
+
+import org.gvsig.app.project.documents.view.IContextMenuAction;
+
+
+/**
+ * @author FJP
+ * Siguiendo el Patr�n COMPOSITE: la rama ser� la capa (FLayer) y la
+ * hoja ser� el s�mbolo (FStyle2D)
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+public interface ITocItem extends Transferable {
+	String getLabel();
+	Icon getIcon();
+	Dimension getSize();
+	void setSize(Dimension sz);
+	public IContextMenuAction getDoubleClickAction();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractActionInfoAdapterToTocContextMenuAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractActionInfoAdapterToTocContextMenuAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractActionInfoAdapterToTocContextMenuAction.java	(revision 42196)
@@ -0,0 +1,74 @@
+package org.gvsig.app.project.documents.view.toc;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AbstractActionInfoAdapterToTocContextMenuAction extends AbstractTocContextMenuAction {
+
+	private static final Logger logger = LoggerFactory.getLogger(AbstractActionInfoAdapterToTocContextMenuAction.class);
+	protected ActionInfo action = null;
+	protected String group = null;
+	protected int groupOrder = 1;
+	protected int order = 1;
+	
+	protected AbstractActionInfoAdapterToTocContextMenuAction(ActionInfo action, String group, int groupOrder, int order) {
+		this.action = action;
+		this.group = group;
+		this.groupOrder = groupOrder;
+		this.order = order;
+        }
+
+        protected AbstractActionInfoAdapterToTocContextMenuAction(ActionInfo action, String group, int groupOrder) {
+            this(action, group, groupOrder, (int) action.getPosition());
+        }
+        
+        protected AbstractActionInfoAdapterToTocContextMenuAction(String actionName, String group, int groupOrder, int order) {
+                this(
+                        PluginsLocator.getActionInfoManager().getAction(actionName),
+                        group,groupOrder,order
+                );
+	}
+	
+	protected AbstractActionInfoAdapterToTocContextMenuAction(String actionName,  String group, int groupOrder) {
+                this(
+                        PluginsLocator.getActionInfoManager().getAction(actionName),
+                        group,groupOrder
+                );
+        }
+        
+	public String getGroup() {
+		return this.group;
+	}
+
+	public int getGroupOrder() {
+		return this.groupOrder;
+	}
+
+	public int getOrder() {
+		return this.order;
+	}
+
+	public String getText() {
+		I18nManager i18nManager = ToolsLocator.getI18nManager();
+		return i18nManager.getTranslation( this.action.getLabel() );
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return this.action.isEnabled();
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		boolean n = this.action.isVisible();
+		return n;
+	}
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		this.action.execute(selectedItems);
+   }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractActionInfoAdapterToTocContextMenuAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/DnDJTree.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/DnDJTree.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/DnDJTree.java	(revision 42196)
@@ -0,0 +1,588 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.toc;
+/*
+**  This is version II of DnDJTree. The first version allowed for what I
+**  thought was a JDK oversight. However, we can set the cursor appropriately,
+**  relative to whether the current cursor location is a valid drop target.
+**
+**  If this is your first time reading the source code. Just ignore the above
+**  comment and ignore the "CHANGED" comments below. Otherwise, the
+**  "CHANGED" comments will show where the code has changed.
+**
+**  Credit for finding this shortcoming in my code goes Laurent Hubert.
+**  Thanks Laurent.
+**
+**  Rob. [ rkenworthy@hotmail.com ]
+*/
+
+
+import java.awt.Point;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
+import java.awt.dnd.DragSourceDragEvent;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceEvent;
+import java.awt.dnd.DragSourceListener;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.dnd.MouseDragGestureRecognizer;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.swing.JTree;
+import javax.swing.SwingUtilities;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.MutableTreeNode;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+
+
+public class DnDJTree extends JTree
+                  implements TreeSelectionListener,
+                  DragGestureListener, DropTargetListener,
+                  DragSourceListener {
+
+  protected ArrayList m_Listeners = new ArrayList();
+
+  private static DnDJTree oDnDtocOrigin = null;
+  private static DnDJTree oDnDtocDestination = null;
+  /** Stores the parent Frame of the component */
+  // private Frame Parent = null;
+
+  /** Stores the selected node info */
+  protected TreePath SelectedTreePath = null;
+  protected DefaultMutableTreeNode SelectedNode = null;
+
+  /** Variables needed for DnD */
+  private DragSource dragSource = null;
+  //private DragSourceContext dragSourceContext = null;
+  private DropTarget dropTarget;
+  //private ArrayList treeListeners=new ArrayList();
+  //private ArrayList dropListeners=new ArrayList();
+ // private TreeModel model1;
+  /** Constructor
+  @param root The root node of the tree
+  @param parent Parent JFrame of the JTree */
+  public DnDJTree(TreeModel treeModel) {
+    super(treeModel);
+    // Parent = parent;
+
+    //addTreeSelectionListener(this);
+
+		/* ********************** CHANGED ********************** */
+    dragSource = DragSource.getDefaultDragSource() ;
+		/* ****************** END OF CHANGE ******************** */
+
+    DragGestureRecognizer dgr =
+      dragSource.createDefaultDragGestureRecognizer(
+        this,                             //DragSource
+        DnDConstants.ACTION_COPY_OR_MOVE, //specifies valid actions
+        this                              //DragGestureListener
+      );
+
+
+    /* Eliminates right mouse clicks as valid actions - useful especially
+     * if you implement a JPopupMenu for the JTree
+     */
+    dgr.setSourceActions(dgr.getSourceActions() & ~InputEvent.BUTTON3_MASK);
+
+    /* First argument:  Component to associate the target with
+     * Second argument: DropTargetListener
+    */
+    //DropTarget dropTarget = new DropTarget(this, this);
+    setDropTarget();
+  }
+  public void invalidateListeners(){
+	  removeDropListener();
+	  removeTreeListener();
+  }
+  private void addDropListener(){
+	  dropTarget= new DropTarget(this, this);
+  }
+  private void removeDropListener(){
+	  dropTarget=null;
+  }
+  private void addTreeListener(){
+	  addTreeSelectionListener(this);
+  }
+  private void removeTreeListener(){
+	  removeTreeSelectionListener(this);
+  }
+  public void setDropTarget(){
+      // TODO: COMENTADO POR FJP
+	  /* com.iver.andami.ui.mdiManager.View[] views=PluginServices.getMDIManager().getAllViews();
+	  for(int i=0;i<views.length;i++){
+		  if (views[i] instanceof View){
+			 // model1=((View)views[i]).getTOC().getTree().getModel();
+			  ((View)views[i]).getTOC().getTree().removeTreeListener();
+			  ((View)views[i]).getTOC().getTree().addTreeListener();
+			  ((View)views[i]).getTOC().getTree().removeDropListener();
+			  ((View)views[i]).getTOC().getTree().addDropListener();
+		  } */
+		  addTreeListener();
+		  addDropListener();
+	  // }
+	 ////////// new DropTarget(this, this);
+  }
+  /** Returns The selected node */
+  public DefaultMutableTreeNode getSelectedNode() {
+    return SelectedNode;
+  }
+
+  ///////////////////////// Interface stuff ////////////////////
+
+
+  /** DragGestureListener interface method */
+  public void dragGestureRecognized(DragGestureEvent e) {
+	  if (((MouseEvent)((MouseDragGestureRecognizer)e.getSource()).getTriggerEvent()).getButton()==MouseEvent.BUTTON3){
+		  return;
+	  }
+    //Get the selected node
+    DefaultMutableTreeNode dragNode = getSelectedNode();
+    if (dragNode != null) {
+
+
+      if (!(dragNode.getUserObject() instanceof Transferable)) {
+		return;
+	}
+
+//    Get the Transferable Object
+      Transferable transferable = (Transferable) dragNode.getUserObject();
+
+			/* ********************** CHANGED ********************** */
+
+      //Select the appropriate cursor;
+      // Cursor cursor = DragSource.DefaultCopyNoDrop;
+      int action = e.getDragAction();
+      /* if (action == DnDConstants.ACTION_MOVE)
+        cursor = DragSource.DefaultMoveDrop; */
+
+
+      //In fact the cursor is set to NoDrop because once an action is rejected
+      // by a dropTarget, the dragSourceListener are no more invoked.
+      // Setting the cursor to no drop by default is so more logical, because
+      // when the drop is accepted by a component, then the cursor is changed by the
+      // dropActionChanged of the default DragSource.
+			/* ****************** END OF CHANGE ******************** */
+
+      //begin the drag
+      oDnDtocOrigin = this;
+      dragSource.startDrag(e, null, transferable, this);
+    }
+  }
+
+  /** DragSourceListener interface method */
+  public void dragDropEnd(DragSourceDropEvent dsde) {
+  }
+
+  /** DragSourceListener interface method */
+  public void dragEnter(DragSourceDragEvent dsde) {
+		/* ********************** CHANGED ********************** */
+      // System.err.println("dragOver" + dsde.getDragSourceContext().getComponent());
+
+		/* ****************** END OF CHANGE ******************** */
+  }
+
+  /** DragSourceListener interface method */
+  public void dragOver(DragSourceDragEvent dsde) {
+		/* ********************** CHANGED ********************** */
+      // System.err.println("dragOver" + dsde.getDragSourceContext().getComponent());
+		/* ****************** END OF CHANGE ******************** */
+  }
+
+  /** DragSourceListener interface method */
+  public void dropActionChanged(DragSourceDragEvent dsde) {
+  }
+
+  /** DragSourceListener interface method */
+  public void dragExit(DragSourceEvent dsde) {
+  }
+
+  /** DropTargetListener interface method - What we do when drag is released */
+  public void drop(DropTargetDropEvent e) {
+    try {
+      Transferable tr = e.getTransferable();
+      //flavor not supported, reject drop
+      if (!tr.isDataFlavorSupported( TocItemBranch.INFO_FLAVOR)) {
+		e.rejectDrop();
+                return;
+	}
+      //cast into appropriate data type
+      TocItemBranch childInfo =
+        (TocItemBranch) tr.getTransferData( TocItemBranch.INFO_FLAVOR );
+      //get new parent node
+      Point loc = e.getLocation();
+      TreePath destinationPath = getPathForLocation(loc.x, loc.y);
+
+      final String msg = testDropTarget(destinationPath, SelectedTreePath);
+      if (msg != null) {
+          /* if (testSameComponent())
+          { */
+              e.rejectDrop();
+              SwingUtilities.invokeLater(new Runnable() {
+                  public void run() {
+                      System.err.println(msg);
+                  }
+              });
+              return;
+          /* }
+          else
+          {
+              // TODO: Por ahora solo dejamos mover, no copiar
+              // TODO: �Y qu� pasa si la vista a la que vamos
+              // no tiene la misma proyecci�n? MEJOR DESHABILITO ESTO POR AHORA
+              if (e.getDropAction() == DnDConstants.ACTION_MOVE)
+                  dropRoot(SelectedNode);
+              else
+                  e.rejectDrop();
+              return;
+          } */
+      }
+      if (!testSameComponent(e))
+      {
+          e.rejectDrop();
+          return;
+      }
+      int oldPos,newPos;
+	  //boolean isContainer=false;
+
+	  DefaultMutableTreeNode nodoTocado =
+        (DefaultMutableTreeNode) destinationPath.getLastPathComponent();
+	  //	get old parent node
+      DefaultMutableTreeNode oldParent = (DefaultMutableTreeNode) getSelectedNode().getParent();
+      if (nodoTocado.getParent().equals(getSelectedNode())){
+    	  return;
+      }
+      //oldParent.setUserObject(new TocItemBranch(((TocItemBranch)getSelectedNode().getUserObject()).getLayer().getParentLayer()));
+	  if (oldParent==null) {
+		return;
+	}
+      oldPos = oldParent.getIndex(getSelectedNode());
+	  // Para no tener en cuenta los nodos de s�mbolos:
+      if (!(nodoTocado.getUserObject() instanceof TocItemBranch)){
+      		nodoTocado = (DefaultMutableTreeNode) nodoTocado.getParent();
+      }
+
+      ///posActual = oldParent.getIndex(getSelectedNode());
+      //Destino
+	  DefaultMutableTreeNode destParent=null;
+
+	  if (((TocItemBranch)nodoTocado.getUserObject()).getLayer() instanceof FLayers){
+		  //isContainer=true;
+		  newPos=0;
+		  destParent=nodoTocado;
+      }else{//Si donde se deja la capa seleccionada no es un contenedor de capas.
+		destParent= (DefaultMutableTreeNode)nodoTocado.getParent();
+        newPos=destParent.getIndex(nodoTocado);
+      }
+
+
+
+
+      int action = e.getDropAction();
+      boolean copyAction = (action == DnDConstants.ACTION_COPY);
+
+      //make new child node
+      DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(childInfo);
+	  if (getSelectedNode().getAllowsChildren()){
+		  int childs=getSelectedNode().getChildCount();
+
+		  for (int i=0;i<childs;i++){
+			  newChild.add((MutableTreeNode)getSelectedNode().getChildAt(0));
+		  }
+	  }
+
+	  try {
+        if (!copyAction){
+        	oldParent.remove(getSelectedNode());
+            destParent.insert(newChild,newPos);
+            // newParent.add(newChild);
+        }
+        if (copyAction) {
+			e.acceptDrop (DnDConstants.ACTION_COPY);
+		} else {
+			e.acceptDrop (DnDConstants.ACTION_MOVE);
+		}
+      }
+      catch (java.lang.IllegalStateException ils) {
+        e.rejectDrop();
+      }
+
+      e.getDropTargetContext().dropComplete(true);
+
+      //expand nodes appropriately - this probably isnt the best way...
+
+      // TODO: COMENTADO POR FJP
+      /* com.iver.andami.ui.mdiManager.View[] views=PluginServices.getMDIManager().getAllViews();
+	  for(int i=0;i<views.length;i++){
+		  if (views[i] instanceof View){
+			  ((DefaultTreeModel)((View)views[i]).getTOC().getTree().getModel()).reload(oldParent);
+		  }
+	  } */
+
+
+
+     // ((DefaultTreeModel)model1).reload(oldParent);
+      DefaultTreeModel model = (DefaultTreeModel) getModel();
+
+	  model.reload(getSelectedNode().getRoot());
+	  FLayers lpo=null;
+	  FLayers lpd=null;
+
+	  if (oldParent.getUserObject() instanceof TocItemBranch){
+	  lpo=(FLayers)((TocItemBranch)oldParent.getUserObject()).getLayer();
+	  //lpd=(FLayers)((TocItemBranch)destParent.getUserObject()).getLayer();
+	  }/*else if (((TocItemBranch)nodoTocado.getUserObject()).getLayer().getParentLayer()!=null){
+		  lpo=((TocItemBranch)nodoTocado.getUserObject()).getLayer().getParentLayer();
+	  }*/else{
+		  lpo=((TocItemBranch)getSelectedNode().getUserObject()).getLayer().getParentLayer();
+	  }
+		  if (destParent.getUserObject() instanceof TocItemBranch){
+		  lpd=(FLayers)((TocItemBranch)destParent.getUserObject()).getLayer();
+		  }else{
+		  lpd=((TocItemBranch)nodoTocado.getUserObject()).getLayer().getParentLayer();
+		  }
+
+
+	  if (destParent.equals(oldParent)){
+		  callListeners(oldPos,newPos,lpd);
+	  }else{
+		  callListeners(lpo,lpd,((TocItemBranch)newChild.getUserObject()).getLayer());
+	  }
+	  }
+
+    catch (IOException io) { e.rejectDrop(); }
+    catch (UnsupportedFlavorException ufe) {e.rejectDrop();}
+  } //end of method
+public void dropRoot(TreeNode tn){
+	int oldPos,newPos;
+	DefaultMutableTreeNode nodoTocado =
+	        (DefaultMutableTreeNode) tn;
+		  //	get old parent node
+	    if (getSelectedNode()==null) {
+			return;
+		}
+		DefaultMutableTreeNode oldParent = (DefaultMutableTreeNode) getSelectedNode().getParent();
+		  if (oldParent!=null){
+	      oldPos = oldParent.getIndex(getSelectedNode());
+	      //Destino
+		  DefaultMutableTreeNode destParent=null;
+		  newPos=0;
+		  destParent=nodoTocado;
+
+	      //make new child node
+	      DefaultMutableTreeNode newChild = (DefaultMutableTreeNode)getSelectedNode().clone();
+	      oldParent.remove(getSelectedNode());
+	      destParent.insert(newChild,newPos);
+
+	      org.gvsig.andami.ui.mdiManager.IWindow[] views=PluginServices.getMDIManager().getAllWindows();
+		  for(int i=0;i<views.length;i++){
+			  if (views[i] instanceof DefaultViewPanel){
+				  ((DefaultTreeModel)((DefaultViewPanel)views[i]).getTOC().getTree().getModel()).reload(oldParent);
+			  }
+		  }
+	     // ((DefaultTreeModel)model1).reload(oldParent);
+	      DefaultTreeModel model = (DefaultTreeModel) getModel();
+		  model.reload(destParent);
+		  FLayers lpo=null;
+		  FLayers lpd=null;
+
+		  lpo=((TocItemBranch)getSelectedNode().getUserObject()).getLayer().getParentLayer();
+		  for(int i=0;i<views.length;i++){
+			  if (views[i] instanceof DefaultViewPanel){
+				  if (((DefaultViewPanel)views[i]).getTOC().getTree().equals(this)){
+					  lpd= ((DefaultViewPanel)views[i]).getMapControl().getMapContext().getLayers();
+				  }
+			  }
+		  }
+		  if (destParent.equals(oldParent)){
+			  callListeners(oldPos,newPos,lpd);
+		  }else{
+			  callListeners(lpo,lpd,((TocItemBranch)newChild.getUserObject()).getLayer());
+		  }
+		  }
+	}
+
+  /** DropTaregetListener interface method */
+  public void dragEnter(DropTargetDragEvent e) {
+  }
+
+  /** DropTaregetListener interface method */
+  public void dragExit(DropTargetEvent e) {
+  }
+
+  /** DropTaregetListener interface method */
+  public void dragOver(DropTargetDragEvent e) {
+		/* ********************** CHANGED ********************** */
+    //set cursor location. Needed in setCursor method
+    Point cursorLocationBis = e.getLocation();
+        TreePath destinationPath =
+      getPathForLocation(cursorLocationBis.x, cursorLocationBis.y);
+
+
+    // if destination path is okay accept drop...
+
+    if (testSameComponent(e))
+    {
+        String msg = testDropTarget(destinationPath, SelectedTreePath);
+        if ( msg == null) {
+            e.acceptDrag(DnDConstants.ACTION_MOVE) ;
+            return;
+        }
+
+    }
+    // ...otherwise reject drop
+    // else {
+        // System.err.println(e.getDropTargetContext().getComponent());
+
+        // if (testSameComponent(e))
+            e.rejectDrag() ;
+        /* else
+            e.acceptDrag(DnDConstants.ACTION_MOVE); */
+    // }
+		/* ****************** END OF CHANGE ******************** */
+  }
+
+  /** DropTaregetListener interface method */
+  public void dropActionChanged(DropTargetDragEvent e) {
+  }
+  private void setSelectedNode(DefaultMutableTreeNode smtn){
+	  if (smtn!=null) {
+		SelectedNode=smtn;
+	}
+  }
+
+  /** TreeSelectionListener - sets selected node */
+  public void valueChanged(TreeSelectionEvent evt) {
+    SelectedTreePath = evt.getNewLeadSelectionPath();
+    /* com.iver.andami.ui.mdiManager.View[] views=PluginServices.getMDIManager().getAllViews();
+	  for(int i=0;i<views.length;i++){
+		  if (views[i] instanceof View){
+			  if (SelectedTreePath == null) {
+				((View)views[i]).getTOC().getTree().setSelectedNode(null);
+			  }else{
+			   	((View)views[i]).getTOC().getTree().setSelectedNode((DefaultMutableTreeNode)SelectedTreePath.getLastPathComponent());
+			  }
+		  }
+	  } */
+	  if (SelectedTreePath == null){
+		  setSelectedNode(null);
+	  }else{
+		  setSelectedNode((DefaultMutableTreeNode)SelectedTreePath.getLastPathComponent());
+	  }
+  }
+
+  /** Convenience method to test whether drop location is valid
+  @param destination The destination path
+  @param dropper The path for the node to be dropped
+  @return null if no problems, otherwise an explanation
+  */
+  private String testDropTarget(TreePath destination, TreePath dropper) {
+    //Typical Tests for dropping
+
+    //Test 1.
+    boolean destinationPathIsNull = destination == null;
+    if (destinationPathIsNull) {
+		return "Invalid drop location.";
+	}
+
+    //Test 2.
+    DefaultMutableTreeNode node = (DefaultMutableTreeNode) destination.getLastPathComponent();
+    if ( !node.getAllowsChildren() ) {
+		return "This node does not allow children";
+	}
+
+    if (destination.equals(dropper)) {
+		return "Destination cannot be same as source";
+	}
+
+    //Test 3.
+    /* if ( dropper.isDescendant(destination))
+       return "Destination node cannot be a descendant.";
+
+    //Test 4.
+    if ( dropper.getParentPath().equals(destination))
+       return "Destination node cannot be a parent."; */
+
+    return null;
+  }
+
+  private boolean testSameComponent(DropTargetEvent e)
+  {
+      oDnDtocDestination = this;
+      return (oDnDtocOrigin == oDnDtocDestination);
+  }
+	/**
+	 * @param arg0
+	 * @return
+	 */
+	public boolean addOrderListener(ITocOrderListener arg0) {
+		return m_Listeners.add(arg0);
+	}
+	/**
+	 * @param arg0
+	 * @return
+	 */
+	public boolean removeOrderListener(ITocOrderListener arg0) {
+		return m_Listeners.remove(arg0);
+	}
+	private void callListeners(int oldPos, int newPos,FLayers lpd)
+	{
+		for (int i=0; i < m_Listeners.size(); i++)
+		{
+			ITocOrderListener listener = (ITocOrderListener) m_Listeners.get(i);
+			listener.orderChanged(oldPos, newPos,lpd);
+		}
+	}
+
+  private void callListeners(FLayers lpo,FLayers lpd,FLayer ls){
+	  for (int i=0; i < m_Listeners.size(); i++)
+		{
+			ITocOrderListener listener = (ITocOrderListener) m_Listeners.get(i);
+			listener.parentChanged(lpo,lpd,ls);
+		}
+  }
+
+} //end of DnDJTree

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/DnDJTree.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocOrderListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocOrderListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocOrderListener.java	(revision 42196)
@@ -0,0 +1,40 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.toc;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+
+
+/**
+ * @author fjp
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+public interface ITocOrderListener {
+	void orderChanged(int oldPos, int newPos,FLayers lpd);
+	void parentChanged(FLayers lpo,FLayers lpd,FLayer ls);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocOrderListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ZoomAlTemaTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ZoomAlTemaTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ZoomAlTemaTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,135 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ZoomAlTemaTocMenuEntry extends AbstractTocContextMenuAction {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(ZoomAlTemaTocMenuEntry.class);
+	
+	public String getGroup() {
+		return "group2"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 20;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "Zoom_a_la_capa");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+	    
+	    if (isVisible(item, selectedItems)) {
+	        
+	        for (int i=0; i<selectedItems.length; i++) {
+	            if (!selectedItems[i].isAvailable()) {
+	                return false;
+	            }
+	        }
+	        return true;
+	        
+	    } else {
+	        return false;
+	    }
+		
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item) && !(selectedItems == null || selectedItems.length <= 0)) {
+			return true;
+		}
+		return false;
+
+	}
+
+    public void execute(ITocItem ite, FLayer[] selectedItems) {
+
+        if (selectedItems.length == 1) {
+            try {
+                if (!selectedItems[0].isAvailable()) {
+                    return;
+                }
+                getMapContext().zoomToEnvelope(selectedItems[0].getFullEnvelope());
+            } catch (ReadException e1) {
+                e1.printStackTrace();
+            }
+        } else {
+            try {
+                Envelope maxExtent = setMaxExtent(selectedItems);
+                getMapContext().zoomToEnvelope(maxExtent);
+            } catch (ReadException e1) {
+                e1.printStackTrace();
+            }
+        }
+        Project project = ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).getProject();
+        project.setModified(true);
+    }
+
+    private Envelope setMaxExtent(FLayer[] actives)
+            throws ReadException {
+
+        Envelope extRef = null;
+        try {
+            extRef = geomManager.createEnvelope(Geometry.SUBTYPES.GEOM2D);
+        } catch (Exception ex) {
+            logger.warn("Can't create new envelope", ex);
+            return null;
+        }
+        for (int i = 0; i < actives.length; i++) {
+            if (actives[i].isAvailable()) {
+                Envelope extVar = actives[i].getFullEnvelope();
+                try {
+                    extRef.add(extVar);
+                } catch (Exception e) {
+                    logger.warn("Error creating the envelope", e);
+                }
+            }
+        }
+        return extRef;
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ZoomAlTemaTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ShowLayerErrorsTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ShowLayerErrorsTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ShowLayerErrorsTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ShowLayerErrorsTocMenuEntry.java 31496 2009-11-04 12:53:20Z jjdelcerro $
+* $Log$
+* Revision 1.4  2007-03-06 16:37:08  caballero
+* Exceptions
+*
+* Revision 1.3  2007/02/20 15:52:17  caballero
+* no modified
+*
+* Revision 1.2  2007/01/04 07:24:31  caballero
+* isModified
+*
+* Revision 1.1  2006/09/21 18:26:13  azabala
+* first version in cvs
+*
+*
+*/
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+public class ShowLayerErrorsTocMenuEntry extends AbstractTocContextMenuAction{
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		FLayer layer = getNodeLayer(item);
+		String introductoryText = "<h2 text=\"#000080\">La capa "+
+								layer.getName()+
+								" presenta los siguientes errores</h2>";
+		((DefaultViewPanel)PluginServices.getMDIManager().getActiveWindow()).
+			getMapControl().
+			getMapContext().
+			reportDriverExceptions(introductoryText, layer.getErrors());
+//		Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+//		project.setModified(true);
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "ver_error_capa");
+	}
+
+	public String getGroup() {
+		return "group3"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 30;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return !getNodeLayer(item).isOk();
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			return true;
+		}
+		return false;
+
+	}
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ShowLayerErrorsTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeSymbolTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeSymbolTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeSymbolTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,168 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.gui.styling.SymbolSelector;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.legend.gui.ISymbolSelector;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.TocItemLeaf;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.MultiLayerFillSymbol;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+/**
+ * Directly opens the Symbol Selector if it is invoked from the TOC avoiding
+ * by-passing the Layer Properties window
+ */
+public class ChangeSymbolTocMenuEntry extends AbstractTocContextMenuAction {
+    private static final Logger logger = LoggerFactory
+            .getLogger(ChangeSymbolTocMenuEntry.class);
+
+	public String getGroup() {
+		return "group1"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 10;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "change_symbol");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return true;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		return isTocItemLeaf(item);
+	}
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+
+		boolean showDialog = isTocItemLeaf(item);
+
+		if (!showDialog) {
+			return;
+		}
+
+		try {
+			if(!(selectedItems[0] instanceof FLyrVect))
+				return;
+			FLyrVect layer = (FLyrVect) selectedItems[0];
+			ISymbol oldSymbol = ((TocItemLeaf) item).getSymbol();
+			// patch, figure out an ellegant way to solve this
+			if (oldSymbol instanceof MultiLayerFillSymbol) {
+				MultiLayerFillSymbol ms = (MultiLayerFillSymbol) oldSymbol;
+				for (int i = 0; i < ms.getLayerCount(); i++) {
+					if (ms.getLayer(i).getClass().getName().equals("org.gvsig.symbology.symbols.DotDensityFillSymbol")) {
+						/*
+						 * since dot density symbol works together with the
+						 * legend, there is no way to edit it from the symbol selector and editor
+						 * we have to break now!
+						 */
+						return;
+					}
+				}
+			}
+			// end patch
+
+
+			int shapeType = ((IVectorLegend) layer.getLegend()).getShapeType();
+			if (shapeType == 0) {
+				logger.debug("Error legend " + layer.getLegend()
+                        + " does not have shapetype initialized");
+				shapeType = layer.getShapeType();
+			}
+
+			ISymbolSelector symSel = null;
+
+			try {
+				symSel = SymbolSelector.createSymbolSelector(oldSymbol, shapeType);
+			} catch (IllegalArgumentException iaEx) {
+				/*
+				 * this usually happens when the Legend has a composed
+				 * symbol that collides with the normal operation and
+				 * it only can be changed from the panel of the legend
+				 */
+				// TODO throw a signal and show a warning message box telling
+				// that the operation cannot be performed
+				return;
+			}
+			PluginServices.getMDIManager().addWindow(symSel);
+			ISymbol newSymbol = (ISymbol) symSel.getSelectedObject();
+
+			if (newSymbol == null) {
+				return;
+			}
+
+			newSymbol.setDescription(oldSymbol.getDescription());
+
+			for (int i = 0; i < selectedItems.length; i++) {
+				FLyrVect theLayer = ((FLyrVect) selectedItems[i]);
+
+				try {
+					ILegend legend = theLayer.getLegend();
+					if (legend instanceof IClassifiedVectorLegend) {
+						IClassifiedVectorLegend cv = (IClassifiedVectorLegend) legend;
+						cv.replace(oldSymbol, newSymbol);
+					} else if (legend instanceof ISingleSymbolLegend) {
+						ISingleSymbolLegend ss = (ISingleSymbolLegend) legend;
+						ss.setDefaultSymbol(newSymbol);
+					}
+				} catch (Exception e) {
+					NotificationManager.addWarning(PluginServices.getText(this, "skipped_symbol_changed_for_layer")+": "+theLayer.getName(), e);
+				}
+
+			}
+		     // refresh view treak
+			MapContext mc = layer.getMapContext();
+			mc.invalidate();
+			Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+			project.setModified(true);
+			mc.callLegendChanged();
+
+		} catch (ReadException e) {
+			NotificationManager.addError(PluginServices.getText(this, "getting_shape_type"), e);
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeSymbolTocMenuEntry.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CutLayersTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CutLayersTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CutLayersTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,157 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.persistence.PersistentState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class CutLayersTocMenuEntry extends AbstractTocContextMenuAction {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(CutLayersTocMenuEntry.class);
+
+	public String getGroup() {
+		return "copyPasteLayer";
+	}
+
+	public int getGroupOrder() {
+		return 60;
+	}
+	public int getOrder() {
+		return 1;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "cortar");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		if ( selectedItems.length >= 1 && isTocItemBranch(item)){
+			for (int i=0;i< selectedItems.length;i++) {
+				if (selectedItems[i].isEditing() ||
+				    (!selectedItems[i].isAvailable())) {
+					return false;
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+	    
+        PersistentState lyrs_state = null;
+        
+        try {
+        	FLayer[] tocopy = getLayersWithNoActiveAncestors(selectedItems);
+        	lyrs_state = CopyPasteLayersUtils.getAsFLayersPersistentState(
+             		tocopy, this.getMapContext());
+             /*
+              * Saving layers data to clipboard.
+              * Files and URLs are not relativized
+              */
+            CopyPasteLayersUtils.saveToClipboard(lyrs_state);
+            
+            int option=JOptionPane.showConfirmDialog(
+                (Component)PluginServices.getMainFrame(),
+                PluginServices.getText(this,"desea_borrar_la_capa"));
+            
+            if (option == JOptionPane.OK_OPTION) {
+                /*
+                 * If user says no, this is like copy (not cut)
+                 */
+                CopyPasteLayersUtils.removeLayers(
+                		tocopy,
+                    this.getMapContext());
+            }
+            
+           
+
+            
+        } catch (Exception e) {
+            
+            JOptionPane.showMessageDialog(
+                (Component)PluginServices.getMainFrame(),
+                Messages.getText("No_ha_sido_posible_realizar_la_operacion")
+                + "\n\n" + e.getMessage(),
+                Messages.getText("cortar"),
+                JOptionPane.ERROR_MESSAGE
+                );
+            logger.info("While cutting layers.", e);
+            return;
+        }
+
+
+
+	}
+	
+	private FLayer[] getLayersWithNoActiveAncestors(FLayer[] selItems) {
+        
+        List<FLayer> resp = new ArrayList<FLayer>();
+        FLayer lyr = null;
+        for (int i=0; i<selItems.length; i++) {
+            lyr = selItems[i];
+            if (!hasActiveAncestor(lyr)) {
+                resp.add(lyr);
+            }
+        }
+        return resp.toArray(new FLayer[0]);
+    }
+
+    private boolean hasActiveAncestor(FLayer lyr) {
+        
+        FLayers lyrs = lyr.getParentLayer();
+        while (lyrs != null) {
+            if (lyrs.isActive()) {
+                return true;
+            } else {
+                if (lyrs == lyrs.getParentLayer()) {
+                    /*
+                     * Prevent endless loop due to bad setting
+                     */
+                    return false;
+                } else {
+                    lyrs = lyrs.getParentLayer();
+                }
+            }
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CutLayersTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersGroupTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersGroupTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersGroupTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,121 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.gui.ChangeName;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Realiza una agrupaci�n de capas, a partir de las capas que se encuentren activas.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class LayersGroupTocMenuEntry extends AbstractTocContextMenuAction {
+	/**
+	 * Useful for debug the problems during the implementation.
+	 */
+	private static Logger logger = LoggerFactory.getLogger(LayersGroupTocMenuEntry.class);
+
+	public String getGroup() {
+		return "group4"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 40;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "agrupar_capas");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length > 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (selectedItems.length < 2) {
+			return false;
+		}
+		FLayers parent = selectedItems[0].getParentLayer();
+		for (int i = 1; i < selectedItems.length;i++){
+			if (parent != selectedItems[i].getParentLayer()){
+				return false;
+			}
+		}
+		return true;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		//ITocItem tocItem = (ITocItem) getNodeUserObject();
+		ChangeName changename=new ChangeName(null);
+		PluginServices.getMDIManager().addWindow(changename);
+		if (!changename.isAccepted())
+			return;
+		String nombre=changename.getName();
+
+		if (nombre != null){
+
+			getMapContext().beginAtomicEvent();
+			FLayers parent = selectedItems[0].getParentLayer();
+			FLayers newGroup = getMapContext().getNewGroupLayer(parent);
+			
+			newGroup.setProjection(getMapContext().getProjection());
+			newGroup.setName(nombre);
+			
+			int pos=0;
+			for (int i=0;i<parent.getLayersCount();i++){
+				if (parent.getLayer(i).equals(selectedItems[0])){
+					pos=i;
+					continue;
+				}
+			}
+			for (int j = 0; j < selectedItems.length; j++){
+				FLayer layer = selectedItems[j];
+				parent.join(layer, newGroup);
+			}
+			parent.addLayer(pos,newGroup);
+			newGroup.dispose();
+			getMapContext().endAtomicEvent();
+			// TRUCO PARA REFRESCAR.
+			getMapContext().invalidate();
+			Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+			project.setModified(true);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersGroupTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersUngroupTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersUngroupTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersUngroupTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,158 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerNotFoundInCollectionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/* CVS MESSAGES:
+ *
+ * $Id: LayersUngroupTocMenuEntry.java 39575 2013-01-09 12:28:47Z jldominguez $
+ * $Log$
+ * Revision 1.6  2007-01-04 07:24:31  caballero
+ * isModified
+ *
+ * Revision 1.5  2006/10/02 13:52:34  jaume
+ * organize impots
+ *
+ * Revision 1.4  2006/09/25 15:24:26  jmvivo
+ * * Modificada la implementacion.
+ *
+ * Revision 1.3  2006/09/20 12:01:24  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/09/20 11:41:20  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/09/15 10:41:30  caballero
+ * extensibilidad de documentos
+ *
+ * Revision 1.1  2006/09/12 15:58:14  jorpiell
+ * "Sacadas" las opcines del men� de FPopupMenu
+ *
+ *
+ */
+/**
+ * Realiza una desagrupaci�n de capas, a partir de las capas que se encuentren activas.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class LayersUngroupTocMenuEntry extends AbstractTocContextMenuAction {
+	/**
+	 * Useful for debug the problems during the implementation.
+	 */
+	private static Logger logger = LoggerFactory.getLogger(LayersUngroupTocMenuEntry.class);
+
+	public String getGroup() {
+		return "group4"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 40;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "desagrupar_capas");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return true;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		FLayer lyr = getNodeLayer(item);
+		if (!(lyr instanceof FLayers) || (lyr instanceof FLayers && lyr.getParentLayer() == null)){
+			return false;
+		}
+		return true;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)){
+			FLayers agrupa = (FLayers)getNodeLayer(item);
+			FLayers parent=agrupa.getParentLayer();
+
+			if (parent!=null){
+				getMapContext().beginAtomicEvent();
+
+				int insert_pos = getPositionForUngrouped(agrupa);
+				parent.removeLayer(agrupa);
+				
+				while (agrupa.getLayersCount() > 0) {
+					 FLayer layer = agrupa.getLayer(0);
+					 try {
+						 parent.addLayer(insert_pos, layer.cloneLayer());
+						 agrupa.removeLayer(layer);
+					 } catch (Exception e) {
+						 logger.error("Error ungrouping layer. Can't copy layer outside the group");
+					 }
+					 insert_pos++;
+				    
+				}
+
+				getMapContext().endAtomicEvent();
+
+				// TRUCO PARA REFRESCAR.
+				getMapContext().invalidate();
+				Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+				project.setModified(true);
+
+			}
+		}
+	}
+
+    /**
+     * Tells the starting position of children when FLayers provided is ungrouped
+     * @param agrupa
+     * @return
+     */
+    private int getPositionForUngrouped(FLayers lyr) {
+        
+        FLayers pare = lyr.getParentLayer();
+        for (int i=0; i<pare.getLayersCount(); i++) {
+            if (pare.getLayer(i) == lyr) {
+                return i;
+            }
+        }
+        return 0;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayersUngroupTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FLyrVectEditPropertiesTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FLyrVectEditPropertiesTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FLyrVectEditPropertiesTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.gui.LayerProperties;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.TocItemBranch;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.ClassifiableVectorial;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ * Muestra el men� de propiedades del tema.
+ *
+ * @author jmorell
+ */
+
+
+public class FLyrVectEditPropertiesTocMenuEntry extends AbstractTocContextMenuAction {
+	public String getGroup() {
+		return "group2"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 20;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "propiedades");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+	    
+        if (item instanceof TocItemBranch) {
+            TocItemBranch bra = (TocItemBranch) item; 
+            return bra.getLayer().isAvailable();
+        } else {
+            return false;
+        }
+	        
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			FLayer lyr = getNodeLayer(item);
+            if ((lyr instanceof ClassifiableVectorial)) {
+            	if (!((lyr instanceof FLyrVect) &&
+            			!((FLyrVect)lyr).isPropertiesMenuVisible())){
+            		return true;
+//            		if (!(lyr instanceof FLyrAnnotation))
+//            			return true;
+            	}
+
+            }
+		}
+		return false;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+//		long t1 = System.currentTimeMillis();
+
+		FLayer lyr = getNodeLayer(item);
+
+		if (lyr.isAvailable()) {
+                    LayerProperties dlg = new LayerProperties(lyr);
+                    WindowManager wm = ToolsSwingLocator.getWindowManager();
+                    wm.showWindow(
+                            dlg.asJComponent(),
+                            ToolsLocator.getI18nManager().getTranslation("propiedades_de_la_capa"),
+                            WindowManager.MODE.WINDOW
+                    );
+                }
+
+		Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+		project.setModified(true);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FLyrVectEditPropertiesTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FirstLayerTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FirstLayerTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FirstLayerTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,99 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.TocItemBranch;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+
+
+/**
+ * Cambia la posici�n actual del layer a la primera posici�n.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FirstLayerTocMenuEntry extends AbstractTocContextMenuAction {
+	public String getGroup() {
+		return "group4"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 40;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "colocar_delante");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+        return true;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)){
+			return true;
+		}
+		return false;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+      	if (isTocItemBranch(item)){
+            if (getMapContext().getLayers().getActives().length == 1) {
+                FLayer layer=((TocItemBranch)item).getLayer();
+                FLayers layers=layer.getParentLayer();
+                for (int i=0;i<layers.getLayersCount();i++){
+                    if(layers.getLayer(i).equals(layer)){
+                    	layers.moveTo(layers.getLayersCount()-1-i, 0);
+                    }
+                }
+            } else if (selectedItems.length > 1) {
+                FLayer[] actives =selectedItems;
+                FLayers layers=actives[0].getParentLayer();
+                for (int i=0;i<actives.length;i++){
+                    for (int j=0;j<layers.getLayersCount();j++){
+                        if(layers.getLayer(j).equals(actives[i])){
+                        	layers.moveTo(layers.getLayersCount()-1-j, 0);
+                        }
+                    }
+                }
+            }
+		}
+		// TRUCO PARA REFRESCAR.
+        getMapContext().invalidate();
+        Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+		project.setModified(true);
+		PluginServices.getMainFrame().enableControls();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/FirstLayerTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/EliminarCapaTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/EliminarCapaTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/EliminarCapaTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,138 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import java.awt.Component;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+public class EliminarCapaTocMenuEntry extends AbstractTocContextMenuAction {
+	public String getGroup() {
+		return "group3"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 30;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "eliminar_capa");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return true;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			return true;
+		}
+		return false;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+    	// 050209, jmorell: Para poder borrar todas las capas seleccionadas desde el FPopUpMenu.
+		//					Es necesario pulsar May�sculas a la vez que el bot�n derecho.
+
+    	FLayer[] actives = selectedItems;
+
+    	int i;
+    	for (i= 0; i < actives.length;i++){
+    		if (actives[i].isEditing() && actives[i].isAvailable()){
+    			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), PluginServices.getText(this,"no_se_puede_borrar_una_capa_en_edicion"), PluginServices.getText(this, "eliminar_capa"), JOptionPane.WARNING_MESSAGE);
+    			return;
+    		}
+    	}
+
+    	int option=-1;
+    	if (actives.length>0) {
+    		option=JOptionPane.showConfirmDialog((Component)PluginServices.getMainFrame(),PluginServices.getText(this,"desea_borrar_la_capa"));
+    	} else {
+    		return;
+    	}
+    	if (option!=JOptionPane.OK_OPTION)
+    		return;
+    	getMapContext().beginAtomicEvent();
+    	for (i = actives.length-1; i>=0; i--){
+        	try {
+				//actives[i].getParentLayer().removeLayer(actives[i]);
+				//FLayers lyrs=getMapContext().getLayers();
+				//lyrs.addLayer(actives[i]);
+				actives[i].getParentLayer().removeLayer(actives[i]);
+
+                //Cierra todas las ventanas asociadas a la capa
+        		IWindow[] wList = PluginServices.getMDIManager().getAllWindows();
+        		for (int j = 0; j < wList.length; j++) {
+        			String name = wList[j].getWindowInfo().getAdditionalInfo();
+        			for (int k = 0; k < actives.length; k++) {
+        				if( name != null && actives != null && actives[k] != null &&
+                			actives[k].getName() != null &&
+                			name.compareTo(actives[k].getName()) == 0)
+                			PluginServices.getMDIManager().closeWindow(wList[j]);
+					}
+        		}
+
+    		} catch (CancelationException e1) {
+    			e1.printStackTrace();
+    		}
+    	}
+        // ===============================================
+    	/*
+    	 * If the removed layer is in a group, the TOC does not received a
+    	 * notification to refresh, so we force a refreshment unless the TOC is empty
+    	 */
+    	if (getMapContext().getLayers().getLayersCount() > 0) {
+    	    getMapContext().getLayers().moveTo(0, 0);
+    	}
+        // ===============================================
+    	getMapContext().endAtomicEvent();
+    	Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+		project.setModified(true);
+    	PluginServices.getMainFrame().enableControls();
+		// 050209, jmorell: As� solo borra una capa (sobre la que pulsas).
+    	/*FLayer lyr = getNodeLayer();
+        try {
+        	getMapContext().getLayers().removeLayer(lyr);
+        	if (getMapContext().getLayers().getLayersCount()==0)PluginServices.getMainFrame().enableControls();
+		} catch (CancelationException e1) {
+			e1.printStackTrace();
+		}*/
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/EliminarCapaTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeNameTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeNameTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeNameTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.TocItemBranch;
+import org.gvsig.app.project.documents.view.toc.gui.ChangeName;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+/**
+ * Realiza un cambio de nombre en la capa seleccionada
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ChangeNameTocMenuEntry extends AbstractTocContextMenuAction {
+	public String getGroup() {
+		return "group1"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 10;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "cambio_nombre");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+	    
+	    if (item instanceof TocItemBranch) {
+	        TocItemBranch bra = (TocItemBranch) item; 
+	        return bra.getLayer().isAvailable();
+	    } else {
+	        return false;
+	    }
+		
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		return isTocItemBranch(item);
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		FLayer lyr = getNodeLayer(item);
+		if (!lyr.isAvailable()) return;
+		ChangeName chn=new ChangeName(lyr.getName());
+		PluginServices.getMDIManager().addWindow(chn);
+		lyr.setName(chn.getName());
+		Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+		project.setModified(true);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ChangeNameTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyLayersTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyLayersTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyLayersTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,154 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.persistence.PersistentState;
+
+
+public class CopyLayersTocMenuEntry extends AbstractTocContextMenuAction {
+    
+    private static Logger logger =
+        LoggerFactory.getLogger(CopyLayersTocMenuEntry.class);
+    
+	public String getGroup() {
+		return "copyPasteLayer";
+	}
+
+	public int getGroupOrder() {
+		return 60;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "copiar");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		if ( selectedItems.length >= 1 && isTocItemBranch(item)){
+			for (int i=0;i< selectedItems.length;i++) {
+				if (selectedItems[i].isEditing() ||
+				    (!selectedItems[i].isAvailable())){
+					return false;
+				}
+			}
+			return true;
+		}
+		return false;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selItems) {
+
+	       PersistentState lyrs_state = null;
+	        
+	        try {
+	            /*
+	             * This prevents copying the same layer
+	             * twice (because a parent is also copied)
+	             */
+	            FLayer[] tocopy = getLayersWithNoActiveAncestors(selItems);
+	            
+	            lyrs_state = CopyPasteLayersUtils.getAsFLayersPersistentState(
+	                tocopy, this.getMapContext());
+	            /*
+	             * Saving layers data to clipboard.
+	             * Files and URLs are not relativized
+	             */
+	            CopyPasteLayersUtils.saveToClipboard(lyrs_state);
+	            
+	            /*
+	             * This code does not look right: why modified?
+	             * 
+	            Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+	            project.setModified(true);
+	            */
+
+	        } catch (Exception e) {
+	            
+	            JOptionPane.showMessageDialog(
+                    (Component)PluginServices.getMainFrame(),
+                    Messages.getText("No_ha_sido_posible_realizar_la_operacion")
+                    + "\n\n" + e.getMessage(),
+                    Messages.getText("copiar"),
+                    JOptionPane.ERROR_MESSAGE
+                    );
+	            logger.info("While copying layers.", e);
+	            return;
+	        }
+	}
+
+    private FLayer[] getLayersWithNoActiveAncestors(FLayer[] selItems) {
+        
+        List<FLayer> resp = new ArrayList<FLayer>();
+        FLayer lyr = null;
+        for (int i=0; i<selItems.length; i++) {
+            lyr = selItems[i];
+            if (!hasActiveAncestor(lyr)) {
+                resp.add(lyr);
+            }
+        }
+        return resp.toArray(new FLayer[0]);
+    }
+
+    private boolean hasActiveAncestor(FLayer lyr) {
+        
+        FLayers lyrs = lyr.getParentLayer();
+        while (lyrs != null) {
+            if (lyrs.isActive()) {
+                return true;
+            } else {
+                if (lyrs == lyrs.getParentLayer()) {
+                    /*
+                     * Prevent endless loop due to bad setting
+                     */
+                    return false;
+                } else {
+                    lyrs = lyrs.getParentLayer();
+                }
+            }
+        }
+        return false;
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyLayersTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyPasteLayersUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyPasteLayersUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyPasteLayersUtils.java	(revision 42196)
@@ -0,0 +1,351 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import java.awt.Component;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.persistence.impl.exception.ObjectNotFoundException;
+
+/**
+ * This class provides utility methods to manage the TOC clipboard
+ * which will contain one or more layers for copy/cut/paste
+ * operations. It is currently implemented using a persistence
+ * file where an instance of FLayers is stored.
+ * 
+ * @author jldominguez
+ * 
+ */
+public class CopyPasteLayersUtils {
+
+    private static Logger logger = LoggerFactory
+        .getLogger(CopyPasteLayersUtils.class);
+
+    /**
+     * The file which is used to save the layers
+     */
+    private static String CLIPBOARD_FILE_NAME = "gvSIG_layers_clipboard.tmp";
+    private static File clipboardFolder = null;
+
+    private CopyPasteLayersUtils() {
+    }
+    
+    private static PersistenceManager getPersMan() {
+        return ToolsLocator.getPersistenceManager();
+    }
+    
+    private static File getClipboardFolder() {
+        if (clipboardFolder == null) {
+            File appf = PluginsLocator.getManager().getApplicationHomeFolder();
+            clipboardFolder = new File(appf, "clipboard-layers");
+            clipboardFolder.mkdirs();
+        }
+        return clipboardFolder;
+        // 
+        
+    }
+    /**
+     * Gets the outputstream for writing contents to the
+     * clipboard
+     * 
+     * @return
+     * @throws IOException
+     */
+    private static OutputStream getClipboardOStream() throws IOException {
+        
+        File f = new File(getClipboardFolder(), CLIPBOARD_FILE_NAME);
+        if (f.exists()) {
+            /*
+             * If file exists, it is removed
+             * (clipboard content overwritten)
+             */
+            f.delete();
+        }
+        f.createNewFile();
+        /*
+         * File will be removed on exit
+         */
+        f.deleteOnExit();
+        return new FileOutputStream(f);
+    }
+    
+    public static void clearClipboard() throws IOException {
+
+        File f = new File(getClipboardFolder(), CLIPBOARD_FILE_NAME);
+        if (f.exists()) {
+            f.delete();
+        }
+    }
+
+    /**
+     * Gets the input stream to read the clipboard or null
+     * if clipboard is empty
+     * 
+     * @return
+     * @throws IOException
+     */
+    private static InputStream getClipboardIStream() throws IOException {
+
+        File f = new File(getClipboardFolder(), CLIPBOARD_FILE_NAME);
+        if (f.exists()) {
+            return new FileInputStream(f);
+        } else {
+            return null;
+        }
+
+    }
+    
+    public static boolean isClipboardEmpty() {
+        File f = new File(getClipboardFolder(), CLIPBOARD_FILE_NAME);
+        return !f.exists();
+    }
+
+    /**
+     * Returns the content of the clipboard as an instance
+     * of FLayers or null if clipboard is empty or does not
+     * contain instance of FLayers
+     * 
+     * @return
+     * @throws PersistenceException
+     */
+    public static FLayers getClipboardAsFLayers() throws PersistenceException {
+
+        InputStream is = null;
+
+        try {
+            is = getClipboardIStream();
+            
+            if (is == null) {
+                return null;
+            }
+            
+            Object obj = getPersMan().getObject(is);
+            is.close();
+            if (obj instanceof FLayers) {
+                return (FLayers) obj;
+            } else {
+                return null;
+            }
+        } catch (Exception e) {
+            logger.info("While getting object from clipboard: ", e);
+            throw new PersistenceException(e);
+        }
+
+    }
+
+    /**
+     * Stores the given {@link PersistentState}
+     * to clipboard
+     * 
+     * @param st
+     * @throws PersistenceException
+     */
+    public static void saveToClipboard(PersistentState st)
+        throws PersistenceException {
+
+        OutputStream os = null;
+        try {
+            os = getClipboardOStream();
+            getPersMan().saveState(st, os);
+            os.close();
+            if (st.getContext().getErrors() != null) {
+                throw st.getContext().getErrors();
+            }
+        } catch (Exception ex) {
+            throw new PersistenceException(ex);
+        }
+    }
+
+    /**
+     * Gets an array of layers as a {@link PersistentState}
+     * of an instance of FLayers
+     * 
+     * @param actives
+     * @param ctxt
+     * @return
+     * @throws PersistenceException
+     */
+    public static PersistentState getAsFLayersPersistentState(FLayer[] actives,
+        MapContext ctxt) throws PersistenceException {
+
+        FLayers lyrs = new FLayers();
+        lyrs.setMapContext(ctxt);
+        lyrs.setName("copy-paste-root");
+
+        FLayer item = null;
+        if (actives != null) {
+            for (int i = 0; i < actives.length; i++) {
+                if(actives[i] instanceof FLayers){
+                	FLayers aux = (FLayers) actives[i];
+                	 FLayers copyaux = new FLayers();
+                	 copyaux.setMapContext(ctxt);
+                	 copyaux.setName(aux.getName());
+                	 for(int j=0; j<aux.getLayersCount(); j++){
+                		 copyaux.addLayer(aux.getLayer(j));
+                	 }
+                	 lyrs.addLayer(copyaux);
+                }else{
+	            	item = actives[i];
+	                try {
+	                    item = item.cloneLayer();
+	                } catch (Exception ex) {
+	                    throw new PersistenceException(ex);
+	                }
+	                lyrs.addLayer(item);
+                }
+            }
+        }
+
+        PersistentState state = null;
+        state = getPersMan().getState(lyrs, true);
+
+        if (state.getContext().getErrors() != null) {
+            throw state.getContext().getErrors();
+        }
+        return state;
+    }
+
+    /**
+     * Remosves the layers from the their parent
+     * @param actives
+     * @param mc
+     * @return
+     */
+    public static boolean removeLayers(FLayer[] actives, MapContext mc) {
+
+        if (actives == null || actives.length == 0) {
+            return false;
+        }
+
+        for (int i = 0; i < actives.length; i++) {
+            if (actives[i].isEditing() && actives[i].isAvailable()) {
+                JOptionPane.showMessageDialog(
+                    (Component) PluginServices.getMainFrame(),
+                    Messages.getText("no_se_puede_borrar_una_capa_en_edicion"),
+                    Messages.getText("eliminar_capa"),
+                    JOptionPane.WARNING_MESSAGE);
+                return false;
+            }
+        }
+
+        mc.beginAtomicEvent();
+        for (int i = actives.length - 1; i >= 0; i--) {
+            try {
+                // actives[i].getParentLayer().removeLayer(actives[i]);
+                // FLayers lyrs=getMapContext().getLayers();
+                // lyrs.addLayer(actives[i]);
+            	FLayers parent = actives[i].getParentLayer();
+            	if(actives[i] instanceof FLayers){
+            		FLayers grouped = (FLayers) actives[i];
+            		parent.removeLayer(grouped);
+            		while(grouped.getLayersCount()>0){
+            			FLayer lay = grouped.getLayer(0);
+            			grouped.removeLayer(lay);
+            		}
+            	}else{
+            		parent.removeLayer(actives[i]);
+            	}
+                
+                // Cierra todas las ventanas asociadas a la capa
+                IWindow[] wList =
+                    PluginServices.getMDIManager().getAllWindows();
+                for (int j = 0; j < wList.length; j++) {
+                    String name = wList[j].getWindowInfo().getAdditionalInfo();
+                    for (int k = 0; k < actives.length; k++) {
+                        if (name != null && actives != null
+                            && actives[k] != null
+                            && actives[k].getName() != null
+                            && name.compareTo(actives[k].getName()) == 0)
+                            PluginServices.getMDIManager()
+                                .closeWindow(wList[j]);
+                    }
+                }
+
+            } catch (CancelationException e1) {
+                JOptionPane.showMessageDialog((Component) PluginServices
+                    .getMainFrame(), Messages
+                    .getText("No_ha_sido_posible_realizar_la_operacion"),
+                    Messages.getText("eliminar_capa"),
+                    JOptionPane.WARNING_MESSAGE);
+                logger.info("Error while removing layers.", e1);
+                return false;
+            }
+        }
+        mc.endAtomicEvent();
+        Project project =
+            ((ProjectExtension) PluginServices
+                .getExtension(ProjectExtension.class)).getProject();
+        project.setModified(true);
+        PluginServices.getMainFrame().enableControls();
+        return true;
+
+    }
+
+    /**
+     * Adds layers to target {@link FLayers}
+     * 
+     * @param clipboard_root
+     * @param target_root
+     * @return
+     */
+    public static boolean addLayers(FLayers clipboard_root, FLayers target_root) {
+
+        if (clipboard_root == null || clipboard_root.getLayersCount() == 0) {
+            return false;
+        }
+
+        int n = clipboard_root.getLayersCount();
+        FLayer item = null;
+        for (int i = 0; i < n; i++) {
+            item = clipboard_root.getLayer(i);
+            target_root.addLayer(item);
+        }
+        return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyPasteLayersUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/PasteLayersTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/PasteLayersTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/PasteLayersTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import java.awt.Component;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+public class PasteLayersTocMenuEntry extends AbstractTocContextMenuAction {
+    
+    private static Logger logger =
+        LoggerFactory.getLogger(PasteLayersTocMenuEntry.class);
+
+	public String getGroup() {
+		return "copyPasteLayer";
+	}
+
+	public int getGroupOrder() {
+		return 60;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "pegar");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			FLayer lyr = getNodeLayer(item);
+			if (lyr instanceof FLayers) {
+			    /*
+			     * We cannot parse it here because it can
+			     * lead to bad error dialog. We accept anything.
+			     * When user tries to paste, the error
+			     * message will show if there is a problem.
+			     */
+			    return !CopyPasteLayersUtils.isClipboardEmpty();
+			}
+
+		} else if (!isTocItemLeaf(item)) {
+			if (getNodeLayer(item) == null) {
+                /*
+                 * We cannot parse it here because it can
+                 * lead to bad error dialog. We accept anything.
+                 * When user tries to paste, the error
+                 * message will show if there is a problem.
+                 */
+			    return !CopyPasteLayersUtils.isClipboardEmpty();
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * This method can return null (if content of clipboard not useful)
+	 * 
+	 * @return
+	 */
+	private FLayers getFLayersFromClipboard() {
+	    
+		FLayers resp = null;
+        try {
+            resp = CopyPasteLayersUtils.getClipboardAsFLayers();
+            // resp can be null here if clipboard content not useful
+        } catch (PersistenceException e) {
+            ApplicationLocator.getManager().message(
+                Messages.getText("_Clipboard_error"),
+                JOptionPane.ERROR_MESSAGE);
+            resp = null;
+        }
+		return resp;
+	}
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		FLayers target_root;
+
+        FLayers clipboard_root = this.getFLayersFromClipboard();
+        if (clipboard_root == null) {
+            JOptionPane.showMessageDialog(
+                (Component)PluginServices.getMainFrame(),
+                Messages.getText("No_ha_sido_posible_realizar_la_operacion"),
+                Messages.getText("pegar"),
+                JOptionPane.ERROR_MESSAGE
+                );
+            logger.info("Unable to parse clipboard as flayers");
+            return;
+        }
+
+		if (isTocItemBranch(item)) {
+		    target_root = (FLayers)getNodeLayer(item);
+		} else if (getNodeLayer(item) == null){
+		    target_root = getMapContext().getLayers();
+		} else {
+			return;
+		}
+		
+		getMapContext().beginAtomicEvent();
+
+		boolean isOK = CopyPasteLayersUtils.addLayers(clipboard_root, target_root);
+
+		getMapContext().endAtomicEvent();
+
+		if (isOK) {
+			getMapContext().invalidate();
+			Project project=((ProjectExtension)PluginServices.getExtension(ProjectExtension.class)).getProject();
+			project.setModified(true);
+		}
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/PasteLayersTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/DelegatedTocContextMenuAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/DelegatedTocContextMenuAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/DelegatedTocContextMenuAction.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+/**
+ * Clase abstract para facilitar sobreescribir una accion sobre el TOC.
+ *
+ * @author Joaquin del Cerro
+ */
+public abstract class DelegatedTocContextMenuAction extends AbstractTocContextMenuAction {
+
+	private AbstractTocContextMenuAction delegated = null; 
+	
+	public DelegatedTocContextMenuAction(AbstractTocContextMenuAction delegated) {
+		this.delegated = delegated;
+	}
+	
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		delegated.execute(item,selectedItems);
+	}
+
+	public String getText() {
+		return delegated.getText();
+	}
+	public String getGroup() {
+		return delegated.getGroup();
+	}
+
+	public int getGroupOrder() {
+		return delegated.getGroupOrder();
+	}
+
+	public int getOrder() {
+		return delegated.getOrder();
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return delegated.isEnabled(item, selectedItems);
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		return delegated.isVisible(item, selectedItems);
+		
+	}
+	
+	public MapContext getMapContext() {
+		return delegated.getMapContext();
+	}
+	
+	public void setMapContext(MapContext mapContext) {
+		delegated.setMapContext(mapContext);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/DelegatedTocContextMenuAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/OldTocContextMenuAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/OldTocContextMenuAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/OldTocContextMenuAction.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toc.TocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.gui.FPopupMenu;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+public class OldTocContextMenuAction extends AbstractTocContextMenuAction {
+	private TocMenuEntry entry;
+
+	public int getGroupOrder() {
+		return 999;
+	}
+
+	public String getGroup() {
+		return "zzzOldMenus";
+	}
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		return; //No se llega a ejecutar nunca
+	}
+
+	public String getText() {
+		return null; //No se llega a ejecutar nunca
+	}
+
+	public void initializeElement(FPopupMenu menu) {
+		this.entry.initialize(menu);
+	}
+
+	public void setEntry(TocMenuEntry entry) {
+		this.entry = entry;
+	}
+
+	public TocMenuEntry getEntry() {
+		return this.entry;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/OldTocContextMenuAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ReloadLayerTocMenuEntry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ReloadLayerTocMenuEntry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ReloadLayerTocMenuEntry.java	(revision 42196)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+/**
+*
+* @author Jose Manuel Viv� (Chema)
+*
+* Entrada de men� para recargar una capa.
+*/
+public class ReloadLayerTocMenuEntry extends AbstractTocContextMenuAction{
+    
+    private static Logger logger =
+        LoggerFactory.getLogger(ReloadLayerTocMenuEntry.class);
+        
+	public String getGroup() {
+		return "group3"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 30;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "recargar");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return !getNodeLayer(item).isAvailable();
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			return true;
+		}
+		return false;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		try {
+			getNodeLayer(item).reload();
+		} catch (Exception ex) {
+            logger.info("While reloading layer", ex);
+            getNodeLayer(item).setAvailable(false);
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/ReloadLayerTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractTocContextMenuAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractTocContextMenuAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractTocContextMenuAction.java	(revision 42196)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toc;
+
+import java.util.Map;
+
+import org.gvsig.app.project.documents.view.AbstractContextMenuAction;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+
+
+public abstract class AbstractTocContextMenuAction extends AbstractContextMenuAction implements ExtensionBuilder{
+	private MapContext mapContext;
+
+	public MapContext getMapContext() {
+		return this.mapContext;
+	}
+
+	public void setMapContext(MapContext mapContext) {
+		this.mapContext = mapContext;
+	}
+
+	/**
+	 * @deprecated use public boolean isEnabled(ITocItem item, FLayer[] selectedItems)
+	 */
+	public boolean isEnabled(Object item, Object[] selectedItems) {
+		return this.isEnabled((ITocItem)item, (FLayer[])selectedItems);
+	}
+
+	/**
+	 * @deprecated use public boolean isVisible(ITocItem item, FLayer[] selectedItems)
+	 */
+	public boolean isVisible(Object item, Object[] selectedItems) {
+		return this.isVisible((ITocItem)item, (FLayer[])selectedItems);
+	}
+
+	/**
+	 * @deprecated use public void execute(ITocItem item, FLayer[] selectedItems)
+	 */
+	public void execute(Object item, Object[] selectedItems) {
+		this.execute((ITocItem)item, (FLayer[])selectedItems);
+	}
+
+	public FLayer getNodeLayer(ITocItem node) {
+		if (isTocItemBranch(node))
+			return ((TocItemBranch) node).getLayer();
+		return null;
+	}
+	public boolean isTocItemLeaf(ITocItem node) {
+		return node instanceof TocItemLeaf;
+	}
+
+	public boolean isTocItemBranch(ITocItem node) {
+		return node instanceof TocItemBranch;
+	}
+
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return true;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		return true;
+	}
+
+	public abstract void execute(ITocItem item, FLayer[] selectedItems);
+
+	public Object create() {
+		return this;
+	}
+
+	public Object create(Map args) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	public Object create(Object[] args) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractTocContextMenuAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemBranch.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemBranch.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemBranch.java	(revision 42196)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.toc;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.IContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.actions.FLyrVectEditPropertiesTocMenuEntry;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+/**
+ * @author FJP
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+public class TocItemBranch implements ITocItem {
+
+	private ImageIcon icolayer = null;
+
+	private ImageIcon finalIcon = null;
+
+	private BufferedImage unavailableImg = null;
+        
+	private BufferedImage temporaryLayerImg = null;
+        
+	private final String defaultIcon = "images/icolayer.PNG";
+
+	private boolean isAvailable = true;
+
+	private FLayer lyr;
+
+	private Dimension sz;
+
+    final public static DataFlavor INFO_FLAVOR =
+	    new DataFlavor(TocItemBranch.class, "ItemBranch");
+    static DataFlavor flavors[] = {INFO_FLAVOR };
+
+	public TocItemBranch(FLayer lyr)
+	{
+		this.lyr = lyr;
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#getLabel()
+	 */
+	public String getLabel() {
+		/*if (lyr instanceof FLyrVect && ((FLyrVect)lyr).isBroken())
+		{
+			return lyr.getName() + "(broken)";
+		}
+		else*/
+			return lyr.getName();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#getIcon()
+	 */
+	public Icon getIcon() {
+		// TODO Pedirle el icono a la capa. Por defecto habr� un icono
+		// para vectoriales y otro para raster, pero se podr�n cambiar.
+
+		if (finalIcon == null) {
+			ImageIcon icon = (ImageIcon) PluginServices.getIconTheme().get(lyr.getTocImageIcon());
+			this.setIcon(icon);
+		}
+		updateStateIcon();
+
+		return finalIcon;
+	}
+
+	private void setIcon(String path) {
+		File f = new File(path);
+		if (f.exists()) {
+			icolayer = new ImageIcon(f.getAbsolutePath());
+		} else {
+			URL url =PluginServices.getPluginServices("org.gvsig.app").getClassLoader().getResource(path);
+			if (url!=null) {
+				icolayer = new ImageIcon(url);
+				return;
+			}
+		}
+		updateStateIcon();
+
+	}
+	private void updateStateIcon() {
+		if (icolayer == null) {
+                    return;
+                }
+        	BufferedImage newImage = new BufferedImage(icolayer.getIconWidth(),icolayer.getIconHeight(),BufferedImage.TYPE_INT_ARGB);
+                Graphics2D grp = newImage.createGraphics();
+                grp.drawImage(icolayer.getImage(),0,0,null);
+		if (lyr.getTocStatusImage() != null) {
+			Image img = lyr.getTocStatusImage();
+			grp.drawImage(img,0,icolayer.getIconHeight()-img.getHeight(null),null);
+		}
+
+                if (this.lyr.isAvailable() != this.isAvailable ) {
+			if (!this.lyr.isAvailable()) {
+				BufferedImage img = this.getUnavailableImage();
+				grp.drawImage(img,0,icolayer.getIconHeight()-img.getHeight(),null);
+			}
+			this.isAvailable =(this.lyr.isAvailable());
+		}
+                
+                if( this.lyr.isTemporary() ) {
+                        BufferedImage img = this.getTemporaryLayerImage();
+                        grp.drawImage(img,icolayer.getIconWidth()-img.getWidth(),icolayer.getIconHeight()-img.getHeight(),null);
+                }
+                
+		this.finalIcon = new ImageIcon(newImage);
+        }
+
+	private void setIcon(ImageIcon icon) {
+		if (icon!=null) {
+			icolayer = icon;
+		} else {
+			this.setIcon(defaultIcon);
+
+		}
+		updateStateIcon();
+
+	}
+
+	public FLayer getLayer() {
+		return lyr;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.datatransfer.Transferable#getTransferDataFlavors()
+	 */
+	public DataFlavor[] getTransferDataFlavors() {
+		return flavors;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.datatransfer.Transferable#isDataFlavorSupported(java.awt.datatransfer.DataFlavor)
+	 */
+	public boolean isDataFlavorSupported(DataFlavor dF) {
+		return dF.equals(INFO_FLAVOR);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.datatransfer.Transferable#getTransferData(java.awt.datatransfer.DataFlavor)
+	 */
+	public Object getTransferData(DataFlavor dF) throws UnsupportedFlavorException, IOException {
+	    if (dF.equals(INFO_FLAVOR)) {
+	        return this;
+	      }
+	      else throw new UnsupportedFlavorException(dF);
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#getSize()
+	 */
+	public Dimension getSize() {
+		return sz;
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.ITocItem#setSize(java.awt.Dimension)
+	 */
+	public void setSize(Dimension sz) {
+		this.sz = sz;
+	}
+
+	private BufferedImage getUnavailableImage() {
+		if (this.unavailableImg == null) {
+			ImageIcon uIcon = IconThemeHelper.getImageIcon("layer-chk-unavailable");
+			if (uIcon != null) {
+				this.unavailableImg = new BufferedImage(uIcon.getIconWidth(), uIcon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
+				this.unavailableImg.getGraphics().drawImage(uIcon.getImage(), 0, 0, null);
+			}
+		}
+		return this.unavailableImg;
+	}
+        
+	private BufferedImage getTemporaryLayerImage() {
+		if (this.temporaryLayerImg == null) {
+			ImageIcon uIcon = IconThemeHelper.getImageIcon("layer-chk-temporary");
+			if (uIcon != null) {
+				this.temporaryLayerImg = new BufferedImage(uIcon.getIconWidth(), uIcon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
+				this.temporaryLayerImg.getGraphics().drawImage(uIcon.getImage(), 0, 0, null);
+			}
+		}
+		return this.temporaryLayerImg;
+	}
+
+	public IContextMenuAction getDoubleClickAction() {
+		// TODO
+		// THIS IS A PATCH; IT WILL BE REMOVED WHEN ALL THE PROPERTIES
+		// FOR ALL LAYERS WILL BE MERGED IN THE SAME DIALOG
+		if (!(getLayer() instanceof FLyrVect)) {
+			return null;
+		}
+		return new FLyrVectEditPropertiesTocMenuEntry();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemBranch.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewChangeZoomListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewChangeZoomListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewChangeZoomListener.java	(revision 42196)
@@ -0,0 +1,213 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/**
+ *
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import java.awt.Image;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.gui.styling.SymbolSelector;
+import org.gvsig.app.project.documents.view.MapOverview;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.RectangleListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * <p>Listener for changes of the zoom caused by selecting a rectangular area on the associated
+ *  {@link MapOverview MapOverview} object with the first button of the mouse.</p>
+ *
+ * <p>If the kind of action was a movement on the associated object,
+ *  updates the <i>extent</i> of its rectangular area.</p>
+ *
+ * <p>If the kind of action is the selection of a rectangular area, and is bigger than 3x3 pixels,
+ *  applies a <i>zoom in</i> operation centering its <code>ViewPort</code> according the equivalent <i>extent</i>
+ *  in map coordinates.</p>
+ *
+ * @see ViewPort
+ *
+ * @author jmvivo
+ */
+public class MapOverviewChangeZoomListener implements RectangleListener, PanListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(MapOverviewChangeZoomListener.class);
+	/**
+	 * The image to display when the cursor is active.
+	 */
+	private final Image izoomin = PluginServices.getIconTheme()
+		.get("cursor-zoom-in").getImage();
+
+	/**
+	 * The cursor used to work with this tool listener.
+	 *
+	 * @see #getCursor()
+	 */
+//	private Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(izoomin,new Point(16, 16), "");
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapControl mapControl;
+
+	/**
+	 * <p>Creates a new listener for changes of zoom at the associated {@link MapOverview MapOverview} object.</p>
+	 *
+	 * @param mapControl the <code>MapControl</code> object which represents the <code>MapOverview</code>
+	 */
+	public MapOverviewChangeZoomListener(MapControl mapControl) {
+		this.mapControl=mapControl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener#rectangle(com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent)
+	 */
+	public void rectangle(EnvelopeEvent event) throws BehaviorException {
+
+		if (!checkModifiers(event.getEvent())){
+			return;
+		}
+		MapOverview mov=(MapOverview) this.mapControl;
+		ViewPort vpView=mov.getAssociatedMapContext().getViewPort();
+		ViewPort vp = mov.getViewPort();
+
+		if (vp.getExtent() != null && vpView.getExtent() != null) {
+
+			// Recuperamos las coordenadas del evento en px
+			Rectangle2D pxRectangle = event.getPixelCoordRect();
+			// Recuperamos las coordenadas del evento en coordenadas de la vista de localizador
+			Envelope realRectangle = event.getWorldCoordRect();
+
+			if ((pxRectangle.getWidth() < 3) && (pxRectangle.getHeight() < 3))
+			{
+				// rectangulo < 3 px no hacemos nada
+				return;
+
+			} else {
+				// Cambiamos la extension de la vista asociada al localizador
+				vpView.setEnvelope(realRectangle);
+				mov.getAssociatedMapContext().invalidate();
+				vpView.setEnvelope(realRectangle);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
+	 */
+	public Image getImageCursor() {
+		return izoomin;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return true; //???
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PanListener#move(com.iver.cit.gvsig.fmap.tools.Events.MoveEvent)
+	 */
+	public void move(MoveEvent event) throws BehaviorException {
+
+
+		if (!checkModifiers(event.getEvent())){
+			return;
+		}
+		// System.out.println("mapOvervierChangeZoom");
+		MapOverview mov=(MapOverview) this.mapControl;
+		ViewPort vpView=mov.getAssociatedMapContext().getViewPort();
+		ViewPort vp = mov.getViewPort();
+
+		if (vp.getExtent() != null && vpView.getExtent() != null) {
+
+			// Creamos un recuadro con las coordenadas del raton
+			// traducidas a la del mapa
+//			Rectangle2D realRectangle = new Rectangle2D.Double();
+			Point2D p1=vp.toMapPoint(event.getFrom());
+			Point2D p2=vp.toMapPoint(event.getTo());
+			Envelope realRectangle = null;
+			double x=0;
+			double y=0;
+			double xMax=0;
+			double yMax=0;
+			if (p1.getX()<p2.getX()){
+				x=p1.getX();
+				xMax=p2.getX();
+			}else{
+				x=p2.getX();
+				xMax=p1.getX();
+			}
+			if (p1.getY()<p2.getY()){
+				y=p1.getY();
+				yMax=p2.getY();
+			}else{
+				y=p2.getY();
+				yMax=p1.getY();
+			}
+				try {
+					realRectangle = geomManager.createEnvelope(x,y,xMax,yMax, SUBTYPES.GEOM2D);
+				} catch (CreateEnvelopeException e) {
+					logger.error("Error creating the envelope", e);
+				}
+
+			//			realRectangle.setFrameFromDiagonal(vp.toMapPoint(event.getFrom()),vp.toMapPoint(event.getTo()));
+
+			// Establecemos la forma
+			mov.refreshOverView(realRectangle);
+		}
+
+
+
+	}
+
+	/**
+	 * Determines if has pressed the button 1 of the mouse.
+	 */
+	private boolean checkModifiers(MouseEvent event) {
+		int modifiers = event.getModifiers();
+		int keyPressedMask = InputEvent.BUTTON1_MASK;
+		return ((modifiers & keyPressedMask) == keyPressedMask);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewChangeZoomListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MeasureListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MeasureListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MeasureListener.java	(revision 42196)
@@ -0,0 +1,127 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import java.awt.geom.Point2D;
+import java.text.NumberFormat;
+import java.util.Locale;
+
+import org.cresques.cts.IProjection;
+import org.geotools.measure.AngleFormat;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.MeasureListenerImpl;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+
+
+
+/**
+ * <p>Listener for calculating distances using vertexes of a polyline, defined in the associated {@link MapControl MapControl}
+ *  object, and displaying that information at the status bar of the application's main frame.</p>
+ *
+ * <p>Calculates and displays:
+ *  <ul>
+ *   <li>Distance of the last segment of the polyline.</li>
+ *   <li>Accumulated distance of all segments of the polyline.</li>
+ *  </ul>
+ * </p>
+ *
+ * @see MeasureListenerImpl
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MeasureListener extends MeasureListenerImpl {
+	/**
+	 * <p>Creates a new listener for calculating distances using points of a polyline.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where is calculated the length
+	 */
+	public MeasureListener(MapControl mc) {
+		super(mc);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.MeasureListenerImpl#points(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void points(MeasureEvent event) {
+		double dist = 0;
+		double distAll = 0;
+		double angle = 0;
+		double sin = 0;
+		double cos = 0;
+		double dm = 0;
+
+		ViewPort vp = mapCtrl.getMapContext().getViewPort();
+
+		IProjection proj = mapCtrl.getMapContext().getProjection();
+		
+		Point2D p = new Point2D.Double(event.getXs()[0].doubleValue(),event.getYs()[0].doubleValue());//vp.toMapPoint(new Point(event.getXs()[0].intValue(),event.getYs()[0].intValue()));
+		for (int i = 1; i < (event.getXs().length); i++) {
+			Point2D p2 = new Point2D.Double(event.getXs()[i].doubleValue(),	event.getYs()[i].doubleValue());// vp.toMapPoint(new Point(event.getXs()[i].intValue(),event.getYs()[i].intValue()));
+			dist = vp.distanceWorld(p, p2);
+			distAll += dist;
+			
+			if (proj.isProjected()) {
+				dm = p.distance(p2);
+				sin = (p2.getX() - p.getX()) / dm;
+				cos = (p2.getY() - p.getY()) / dm;
+				if (sin >= 0) {
+					angle = Math.toDegrees(Math.acos(cos));
+				} else {
+					angle = 360 - Math.toDegrees(Math.acos(cos));
+				}
+			}
+			p = p2;
+		}
+
+		NumberFormat nf = NumberFormat.getInstance();
+		AngleFormat af = AngleFormat.getInstance(Locale.getDefault());
+        nf.setMaximumFractionDigits(2);
+        if (PluginServices.getMainFrame() != null)
+        {
+        	double[] trans2Meter=MapContext.getDistanceTrans2Meter();
+            int distanceUnits = mapCtrl.getViewPort().getDistanceUnits();
+			PluginServices.getMainFrame().getStatusBar().setMessage("4",
+    			"Dist=" + nf.format(dist/trans2Meter[distanceUnits]) + " " + MapContext.getDistanceAbbr()[distanceUnits]);
+    		PluginServices.getMainFrame().getStatusBar().setMessage("5",
+    			"T=" + nf.format(distAll/trans2Meter[distanceUnits]) + " " + MapContext.getDistanceAbbr()[distanceUnits]);
+
+    		//
+    		// El calculo del azimut esta pensado para trabajar en coordenadas proyectadas (metros)
+    		// y probablemente cuando se esten usando coordenadas en lat/lang se generen resultados
+    		// erroneos, asi que solo se calcula y muestra el azimut si la proyeccion es proyectada.
+    		//
+    		if( proj.isProjected() ) {
+	    		PluginServices.getMainFrame().getStatusBar().setMessage("azimut",
+	        			"Azimut:" + af.format(angle) + "");
+    		} else {
+	    		PluginServices.getMainFrame().getStatusBar().setMessage("azimut",
+	        			"Azimut: (not available)");
+    		}
+        }
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MeasureListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/CircleMeasureListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/CircleMeasureListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/CircleMeasureListener.java	(revision 42196)
@@ -0,0 +1,128 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.text.NumberFormat;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.CircleListener;
+
+
+
+/**
+ * <p>Listener for tools that measure using a circular area, displaying
+ *   its radius at the status bar of the application's main frame.</p>
+ *
+ * @see CircleListener
+ *
+ * @author Laura
+ */
+public class CircleMeasureListener implements CircleListener {
+	/**
+	 * The image to display when the cursor is active.
+	 */
+	private final Image img = PluginServices.getIconTheme().get("cursor-query-distance").getImage();
+
+	/**
+	 * The cursor used to work with this tool listener.
+	 *
+	 * @see #getCursor()
+	 */
+//	private Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(img,
+//			new Point(16, 16), "");
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	private MapControl mapCtrl;
+
+	/**
+	 * <p>Creates a new listener for measure circular areas.</p>
+	 *
+	 * @param mc the <code>MapControl</code> object where the measures are made
+	 */
+	public CircleMeasureListener(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.CircleListener#circle(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void circle(MeasureEvent event) throws BehaviorException {
+		double dist = 0;
+		double distAll = 0;
+
+		ViewPort vp = mapCtrl.getMapContext().getViewPort();
+
+		for (int i = 0; i < (event.getXs().length - 1); i++) {
+			dist = 0;
+
+			Point2D p = new Point2D.Double(event.getXs()[i].doubleValue(),
+					event.getYs()[i].doubleValue());
+			Point2D p2 = new Point2D.Double(event.getXs()[i + 1].doubleValue(),
+					event.getYs()[i + 1].doubleValue());
+
+			///dist = vp.toMapDistance((int) p.distance(p2));
+			dist = vp.distanceWorld(p, p2);
+			distAll += dist;
+		}
+		//System.out.println("Distancia = " + dist + " Distancia Total = " +
+		//	(distAll));
+		NumberFormat nf = NumberFormat.getInstance();
+        nf.setMaximumFractionDigits(2);
+        if (PluginServices.getMainFrame() != null)
+        {
+        	double[] trans2Meter=MapContext.getDistanceTrans2Meter();
+            PluginServices.getMainFrame().getStatusBar().setMessage("4",
+    			"Dist:" + nf.format(dist/trans2Meter[mapCtrl.getViewPort().getDistanceUnits()]) + "");
+    		PluginServices.getMainFrame().getStatusBar().setMessage("5",
+    			"Total:" + nf.format(distAll/trans2Meter[mapCtrl.getViewPort().getDistanceUnits()]) + "");
+        }
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return img;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/CircleMeasureListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewPanListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewPanListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewPanListener.java	(revision 42196)
@@ -0,0 +1,217 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import java.awt.Image;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.gui.styling.SymbolSelector;
+import org.gvsig.app.project.documents.view.MapOverview;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+
+/**
+ * <p>Listener for moving the extent of the associated {@link MapOverview MapOverview} object
+ *  according the movement between the initial and final points of line determined by the movement
+ *  dragging with the third button of the mouse.</p>
+ *
+ * <p>Updates the extent of its <code>ViewPort</code> with the new position.</p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MapOverviewPanListener implements PanListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(MapOverviewPanListener.class);
+	
+	/**
+	 * The image to display when the cursor is active.
+	 */
+	private final Image icursor = PluginServices.getIconTheme().get("cursor-crux").getImage();
+
+	/**
+	 * The cursor used to work with this tool listener.
+	 *
+	 * @see #getCursor()
+	 */
+//	private Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(icursor,
+//			new Point(16, 16), "");
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapControl mapControl;
+
+	/**
+ 	 * <p>Creates a new listener for changing the position of the extent of the associated {@link MapOverview MapOverview} object.</p>
+	 *
+	 * @param mapControl the <code>MapControl</code> object which represents the <code>MapOverview</code>
+	 */
+	public MapOverviewPanListener(MapControl mapControl) {
+		this.mapControl = mapControl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return icursor;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return true;
+	}
+
+	/*
+	public void move(MoveEvent event) throws BehaviorException {
+		if (!checkModifiers(event.getEvent().getModifiers())){
+			return;
+		}
+
+		ViewPort vp = mapControl.getMapContext().getViewPort();
+		MapOverview mov=(MapOverview) this.mapControl;
+		ViewPort vpView=mov.getAssociatedMapContext().getViewPort();
+		if (vp.getExtent() != null) {
+			Point2D p = vp.toMapPoint(event.getTo());
+			Rectangle2D r = (Rectangle2D) vpView.getExtent().clone();
+			r.setRect(p.getX() - (r.getWidth() / 2),
+				p.getY() - (r.getHeight() / 2), r.getWidth(), r.getHeight());
+			//vpView.setExtent(r);
+			double scale;
+			double escalaX;
+			double escalaY;
+			double newHeight;
+			double newWidth;
+			double xCenter = r.getCenterX();
+			double yCenter = r.getCenterY();
+
+			escalaX = mapControl.getWidth() / r.getWidth();
+			escalaY = mapControl.getHeight() / r.getHeight();
+			Rectangle2D adjustedExtent = new Rectangle2D.Double();
+
+			if (escalaX < escalaY) {
+				scale = escalaX;
+				newHeight = mapControl.getHeight() / scale;
+				adjustedExtent.setRect(xCenter - (r.getWidth() / 2.0),
+					yCenter - (newHeight / 2.0), r.getWidth(), newHeight);
+			} else {
+				scale = escalaY;
+				newWidth = mapControl.getWidth() / scale;
+				adjustedExtent.setRect(xCenter - (newWidth / 2.0),
+					yCenter - (r.getHeight() / 2.0), newWidth,
+					r.getHeight());
+			}
+			mov.refreshOverView(adjustedExtent);
+		}
+
+	}
+	*/
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PanListener#move(MoveEvent)
+	 */
+	public void move(MoveEvent event) throws BehaviorException {
+
+
+		if (!checkModifiers(event.getEvent())){
+			return;
+		}
+		System.out.println("mapOvervierPan");
+		MapOverview mov=(MapOverview) this.mapControl;
+		ViewPort vp = mov.getViewPort();
+		ViewPort vpView=mov.getAssociatedMapContext().getViewPort();
+
+		if (vp.getExtent() != null && vpView.getExtent() != null) {
+
+			// recogemos la forma de la vista actual
+			Envelope curEnvelope = vpView.getAdjustedExtent();
+			// traducimos las coordenadas en px de la ultima posicion del raton
+			// a coordenadas de la vista
+			Point2D thePoint= vp.toMapPoint( event.getTo());
+
+			double diffx =
+				(curEnvelope.getMaximum(0) - curEnvelope.getMinimum(0)) / 2;
+			double diffy =
+				(curEnvelope.getMaximum(1) - curEnvelope.getMinimum(1)) / 2;
+			// Creamos un envelope del mismo tama�o
+			// con la coordenadas del punto del raton,
+			// teniendo en cuenta que estas sera el
+			// centro del recuadro
+
+			Envelope envelope;
+			try {
+				envelope = geomManager.createEnvelope(
+						thePoint.getX() - diffx,
+						thePoint.getY() - diffy,
+						thePoint.getX() + diffx,
+						thePoint.getY()	+ diffy,
+						SUBTYPES.GEOM2D
+				);
+				// cambiamos la posicion
+				mov.refreshOverView(envelope);
+				vpView.setEnvelope(envelope);
+			} catch (CreateEnvelopeException e) {
+				logger.error("Error creating the envelope", e);
+			}			
+			mov.getAssociatedMapContext().invalidate();
+		}
+	}
+
+	/**
+	 * Determines if has pressed the button 3 of the mouse.
+	 */
+	private boolean checkModifiers(MouseEvent event) {
+
+		int modifiers = event.getModifiers();
+		/*
+		int keyPressedMask = InputEvent.BUTTON2_MASK;
+
+		*** No se porque el boton derecho del raton devuelve
+		*** un modificador 'Meta + BUTTON3'. Pensaba que deberia
+		*** devolver 'BUTTON2' ????
+		*/
+		int keyPressedMask = InputEvent.BUTTON3_MASK;
+		return ((modifiers & keyPressedMask) == keyPressedMask);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewPanListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewListener.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import java.awt.Image;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.gui.styling.SymbolSelector;
+import org.gvsig.app.project.documents.view.MapOverview;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Listener for changes of the zoom caused by selecting a point on the associated {@link MapOverview MapOverview} object
+ *  by a single click of the button 1 of the mouse.</p>
+ *
+ * <p>Updates the extent of its <code>ViewPort</code> with a <i>zoom out</i> operation, and enables/disables controls for
+ *  managing the data.</p>
+ *
+ * @see ViewPort
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MapOverviewListener implements PointListener {
+	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(MapOverviewListener.class);
+	/**
+	 * The image to display when the cursor is active.
+	 */
+	private final Image izoomout = PluginServices.getIconTheme().get("cursor-crux").getImage();
+
+	/**
+	 * The cursor used to work with this tool listener.
+	 *
+	 * @see #getCursor()
+	 */
+//	private Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(izoomout,
+//			new Point(16, 16), "");
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	protected MapOverview mapControl;
+
+	/**
+ 	 * <p>Creates a new listener for zooming out the extent of the associated {@link MapOverview MapOverview} object.</p>
+	 *
+	 * @param mapControl the <code>MapControl</code> object which represents the <code>MapOverview</code>
+	 */
+	public MapOverviewListener(MapOverview mapControl) {
+		this.mapControl = mapControl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) {
+		ViewPort vp = mapControl.getMapContext().getViewPort();
+
+		if (vp.getExtent() != null &&
+				mapControl.getAssociatedMapContext().getViewPort().getExtent()!=null) {
+			Point2D p = vp.toMapPoint(event.getPoint());
+			Rectangle2D r = (Rectangle2D) mapControl.getAssociatedMapContext()
+										   .getViewPort().getExtent().clone();
+
+			r.setRect(p.getX() - (r.getWidth() / 2),
+				p.getY() - (r.getHeight() / 2), r.getWidth(), r.getHeight());
+
+			if (event.getEvent().getButton()!=MouseEvent.BUTTON1) {
+				try {
+					(this.mapControl).getAssociatedMapContext()
+						.getViewPort().setEnvelope(geomManager.createEnvelope(r.getX(),r.getY(),r.getMaxX(),r.getMaxY(), SUBTYPES.GEOM2D));
+				} catch (CreateEnvelopeException e) {
+					logger.error("Error creating the envelope", e);
+				}
+				PluginServices.getMainFrame().enableControls();
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return izoomout;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+		// TODO Auto-generated method stub
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/RectangleSelectListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/RectangleSelectListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/RectangleSelectListener.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.RectangleSelectionListener;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+
+
+
+/**
+ * <p>Inherits {@link RectangleSelectionListener RectangleSelectionListener} enabling/disabling special
+ *  controls for managing the data selected.</p>
+ *
+ * @see RectangleSelectionListener
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class RectangleSelectListener extends RectangleSelectionListener {
+	/**
+ 	 * <p>Creates a new <code>RectangleSelectListener</code> object.</p>
+ 	 *
+	 * @param mapCtrl the <code>MapControl</code> where is defined the rectangle
+	 */
+	public RectangleSelectListener(MapControl mapCtrl) {
+		super(mapCtrl);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.RectangleSelectionListener#rectangle(com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent)
+	 */
+	public void rectangle(EnvelopeEvent event) throws BehaviorException {
+		super.rectangle(event);
+		PluginServices.getMainFrame().enableControls();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/RectangleSelectListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PolygonSelectListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PolygonSelectListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PolygonSelectListener.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.PolygonSelectionListener;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+
+
+
+/**
+ * <p>Inherits {@link PolygonSelectionListener PolygonSelectionListener} enabling/disabling special
+ *  controls for managing the data selected.</p>
+ *
+ * @see PolygonSelectionListener
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PolygonSelectListener extends PolygonSelectionListener {
+	/**
+ 	 * <p>Creates a new <code>PolygonSelectListener</code> object.</p>
+	 *
+	 * @param mapCtrl the <code>MapControl</code> where is drawn the polyline
+	 */
+	public PolygonSelectListener(MapControl mapCtrl) {
+		super(mapCtrl);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.PolygonSelectionListener#polylineFinished(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+	 */
+	public void polylineFinished(MeasureEvent event) throws BehaviorException {
+		super.polylineFinished(event);
+		PluginServices.getMainFrame().enableControls();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PolygonSelectListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AreaListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AreaListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AreaListener.java	(revision 42196)
@@ -0,0 +1,111 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import java.awt.geom.Point2D;
+import java.text.NumberFormat;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.AreaListenerImpl;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+
+
+
+/**
+ * <p>Listener for calculating the area of a polygon, defined in the associated {@link MapControl MapControl}
+ *  object.</p>
+ * <p>Moves the extent of the associated {@link MapControl MapControl} object
+ *  according the movement between the initial and final points of the line determined by the movement
+ *  dragged with the third button of the mouse.</p>
+ *
+ * <p>Updates the status bar of the main frame of the application with the current area.</p>
+ *
+ * @see AreaListenerImpl
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class AreaListener extends AreaListenerImpl {
+	/**
+ 	 * <p>Creates a new listener for calculating the area of a polygon and displaying it at the status bar
+ 	 *  of the main frame of the application.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where is calculated the area
+	 */
+    public AreaListener(MapControl mc) {
+    	super(mc);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see com.iver.cit.gvsig.fmap.tools.AreaListenerImpl#points(com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent)
+     */
+    public void points(MeasureEvent event) {
+        this.event = event;
+
+        double dist = 0;
+        double distAll = 0;
+
+        ViewPort vp = mapCtrl.getMapContext().getViewPort();
+        for (int i = 0; i < (event.getXs().length - 1); i++) {
+            dist = 0;
+
+            Point2D p = new Point2D.Double(event.getXs()[i].doubleValue(), event.getYs()[i].doubleValue());//vp.toMapPoint(new Point(event.getXs()[i].intValue(), event.getYs()[i].intValue()));
+            Point2D p2 = new Point2D.Double(event.getXs()[i + 1].doubleValue(), event.getYs()[i + 1].doubleValue());//vp.toMapPoint(new Point(event.getXs()[i + 1].intValue(), event.getYs()[i + 1].intValue()));
+            ///dist = vp.toMapDistance((int) p.distance(p2));
+            dist = vp.distanceWorld(p,p2);
+//            System.out.println("distancia parcial = "+dist);
+            distAll += dist;
+        }
+
+       // System.out.println("Per�metro = " + distAll + " �rea = " +
+       //     (returnArea(vp.toMapPoint(
+       //             new Point2D.Double(
+       //                 event.getXs()[event.getXs().length - 2].doubleValue(),
+       //                 event.getYs()[event.getYs().length - 2].doubleValue())))));
+        NumberFormat nf = NumberFormat.getInstance();
+        nf.setMaximumFractionDigits(2);
+        MainFrame mF = PluginServices.getMainFrame();
+        if (mF != null)
+        {
+        	int distanceUnits=mapCtrl.getViewPort().getDistanceUnits();
+        	int distanceArea=mapCtrl.getViewPort().getDistanceArea();
+            mF.getStatusBar().setMessage("4",
+        			"P=" + nf.format(distAll/MapContext.getDistanceTrans2Meter()[distanceUnits]) + " " + MapContext.getDistanceAbbr()[distanceUnits]);
+        		mF.getStatusBar().setMessage("5",
+        			///"A:" + nf.format(returnArea(vp.toMapPoint(
+                    ///        new Point2D.Double(
+                    ///                event.getXs()[event.getXs().length - 2].doubleValue(),
+                    ///                event.getYs()[event.getYs().length - 2].doubleValue())))/FMap.CHANGEM[mapCtrl.getViewPort().getDistanceUnits()]) + "");
+        				"A=" + nf.format(returnArea(
+                                new Point2D.Double(
+                                        event.getXs()[event.getXs().length - 2].doubleValue(),
+                                        event.getYs()[event.getYs().length - 2].doubleValue()))/Math.pow(MapContext.getAreaTrans2Meter()[distanceArea],2)) + " " + MapContext.getAreaAbbr()[distanceArea]);
+//        		mF.getStatusBar().setMessage("distancearea",MapContext.getAreaAbbr()[distanceArea]);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AreaListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/StatusBarListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/StatusBarListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/StatusBarListener.java	(revision 42196)
@@ -0,0 +1,339 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.text.NumberFormat;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+
+
+
+/**
+ * <p>Listener that displays at the status bar of the application's main frame, the value of the point coordinates of the mouse's
+ *  cursor on the associated <code>MapControl</code>, just as is received a <code>PointEvent</code> event.</p>
+ *
+ * <p>Calculates the coordinates equivalent to the point according this rules:
+ *  <ul>
+ *   <li>uses <i><code>formatDegrees(p.get{X or Y}()</code></i> if the associated <code>MapControl</code> object isn't projected.</li>
+ *   <li>uses <i><code>formatDegrees({MapControl's projection}.toGeo(p.get{X or Y}())</code></i> if the associated
+ *    <code>MapControl</code> object is projected and its <code>ViewPort</code>'s distance units are in degrees.</li>
+ *   <li>uses <i><code>{NumberFormat according to {@link #setFractionDigits(Point2D) #setFractionDigits(Point2D)}}.format((p.get{X or Y}()/MapContext.CHANGEM[mapControl.getViewPort().getDistanceUnits()])*MapContext.CHANGEM[mapControl.getViewPort().getMapUnits()])</code></i>
+ *    otherwise.</li>
+ *  </ul>
+ * </p>
+ *
+ * <p>The <u>prefix</u> of the coordinate expressions will be:
+ *  <ul>
+ *   <li>Longitude "<i>Long =</i>" and latitude "<i>Lat =</i>", if the associated <i>MapControl</i> object isn't projected, or the current distance unit
+ *    of the <code>MapControl</code>'s view port is in degrees.</li>
+ *   <li>X "<i>X =</i>" and Y "<i>Y =</i>", otherwise.</li>
+ *  </ul>
+ * </p>
+ *
+ * <p>And the <u>sufix</u> value:
+ *  <ul>
+ *   <li>If the associated <i>MapControl</i> object isn't projected, or the current distance unit
+ *    of the <code>MapControl</code>'s view port is in degrees(expected latitude or longitude), according this pattern:<br>
+ *    <code><b><i>S?G� M' S''</i></b></code>, having:<br>
+ *    <ul>
+ *     <li><i>S?</i> : optionally, if the value is negative, sets a "-" symbol.</li>
+ *     <li><i>G</i> : equivalent grades.</li>
+ *     <li><i>M</i> : equivalent minutes.</li>
+ *     <li><i>S</i> : equivalent seconds.</li>
+ *    </ul>
+ *   </li>
+ *   <li>Otherwise a decimal number according this rules:
+ *    <ul>
+ *     <li><i>8 decimals</i>, if is using any of the following geographic coordinate systems:
+ *      <ul>
+ *       <li><i>EPSG:4230 (known as <a href="http://en.wikipedia.org/wiki/ED50">ED50</a>)</i>.</li>
+ *       <li><i>EPSG:4326 (known as <a href="http://en.wikipedia.org/wiki/WGS84">WGS84</a>)</i>.</li>
+ *      </ul>
+ *     <li><i>2 decimals</i>, otherwise.</li>
+ *    </ul>
+ *   </li>
+ *  </ul>
+ * </p>
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class StatusBarListener implements PointListener {
+    
+    private static Logger logger =
+        LoggerFactory.getLogger(StatusBarListener.class);
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */
+	private MapControl mapControl = null;
+
+	/**
+	 * Format of the coordinates. Is used to set the number of decimals.
+	 */
+	private NumberFormat nf = null;
+	
+	private static long lastLogTime = 0;
+
+	/**
+	 * <p>Creates a new <code>StatusBarListener</code> object.</p>
+	 *
+	 * @param mc the <code>MapControl</code> where will be applied the changes
+	 */
+	public StatusBarListener(MapControl mc) {
+		mapControl = mc;
+		nf = NumberFormat.getInstance();
+		nf.setMaximumFractionDigits(2);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return false;
+	}
+
+	/*
+	 * 050211, jmorell: M�todo modificado para mejorar la manera de mostrar las
+	 * coordenadas geod�sicas en la barra de estado. Muestra Lat y Lon y aumenta
+	 * el n�mero de decimales para cuando trabajemos en coordenadas geod�sicas.
+	 *
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) throws BehaviorException {
+		String[] axisText = new String[2];
+		axisText[0] = "X = ";
+		axisText[1] = "Y = ";
+		Point2D p = mapControl.getMapContext().getViewPort().toMapPoint(event.getPoint());
+		setFractionDigits(p);
+		axisText = setCoorDisplayText(axisText);
+		MainFrame mF = PluginServices.getMainFrame();
+
+		if (mF != null){
+
+			mF.getStatusBar().setMessage("units",
+            		PluginServices.getText(this, MapContext.getDistanceNames()[mapControl.getMapContext().getViewPort().getDistanceUnits()]));
+
+			// FJP: No se debe llamar a setControlValue desde aqu�, porque
+            // cambia la escala, y con ella el viewPort (adem�s, de
+            // la vista que no es).
+            // mF.getStatusBar().setControlValue("scale",String.valueOf(mapControl.getMapContext().getScaleView()));
+            // Fin
+			mF.getStatusBar().setMessage("projection", mapControl.getViewPort().getProjection().getAbrev());
+
+			String[] coords=getCoords(p);
+			mF.getStatusBar().setMessage("x", axisText[0] + coords[0]);
+			mF.getStatusBar().setMessage("y", axisText[1] + coords[1]);
+		}
+	}
+
+	/**
+	 * <p>Sets the number of decimals of the coordinates that will be displayed, according the current projection
+	 *  of the associated <code>MapControl</code>:
+	 *  <ul>
+	 *   <li><i>8 decimals</i>, if is using geographical coordinates:
+	 *    <ul>
+	 *     <li><i>EPSG:4230 (known as <a href="http://en.wikipedia.org/wiki/ED50">ED50</a>)</i>.</li>
+	 *     <li><i>EPSG:4326 (known as <a href="http://en.wikipedia.org/wiki/WGS84">WGS84</a>)</i>.</li>
+	 *    </ul>
+	 *   <li><i>2 decimals</i>, otherwise.</li>
+	 *  </ul>
+	 * </p>
+	 *
+	 * @param p unused parameter
+	 *
+	 * @version 050211
+	 * @author jmorell.
+	 */
+	public void setFractionDigits(Point2D p) {
+		IProjection iProj = mapControl.getMapContext().getProjection();
+		if (!iProj.isProjected()) {
+			nf.setMaximumFractionDigits(8);
+		} else {
+			nf.setMaximumFractionDigits(2);
+		}
+	}
+
+	/**
+	 * <p>Gets the name of the coordinates:
+	 *  <ul>
+	 *   <li><i>Longitude</i> and <i>Latitude</i>, if the associated <i>MapControl</i> object isn't projected, or the current distance unit
+	 *    of the <code>MapControl</code>'s view port is in degrees.</li>
+	 *   <li><i>X</i> and <i>Y</i>, otherwise.</li>
+	 *  </ul>
+	 * </p>
+	 *
+	 * @param p array of at least two <code>String</code>, where text will be stored and returned
+	 *
+	 * @return text describing the coordinate value:
+	 *  <ul>
+	 *   <li>If isn't projected:
+	 *    <ul>
+	 *     <li><code>String[0]</code> : "Long = "</li>
+	 *     <li><code>String[1]</code> : "Lat = "</li>
+	 *    </ul>
+	 *   </li>
+	 *   <li>Otherwise:
+	 *    <ul>
+	 *     <li><code>String[0]</code> : "X = "</li>
+	 *     <li><code>String[1]</code> : "Y = "</li>
+	 *    </ul>
+	 *   </li>
+	 *  </ul>
+	 *
+	 * @version 050211
+	 * @author jmorell
+	 */
+	public String[] setCoorDisplayText(String[] axisText) {
+		IProjection iProj = mapControl.getMapContext().getProjection();
+		if (!iProj.isProjected() || MapContext.getDistanceNames()[mapControl.getMapContext().getViewPort().getDistanceUnits()].equals("Grados")) {
+			axisText[0] = "Lon = ";
+			axisText[1] = "Lat = ";
+		} else {
+			axisText[0] = "X = ";
+			axisText[1] = "Y = ";
+		}
+		return axisText;
+	}
+
+	/**
+	 * <p>Converts a decimal value (expected latitude or longitude) in degrees, and formats it according this pattern:<br>
+	 *  <code><b><i>S?G� M' S''</i></b></code>, having:<br>
+	 *  <ul>
+	 *   <li><i>S?</i> : optionally, if the value is negative, sets a "-" symbol.</li>
+	 *   <li><i>G</i> : equivalent grades.</li>
+	 *   <li><i>M</i> : equivalent minutes.</li>
+	 *   <li><i>S</i> : equivalent seconds.</li>
+	 *  </ul>
+	 * </p>
+	 *
+	 * @param d the latitude or longitude value to convert
+	 *
+	 * @return value formatted in degrees
+	 */
+	private String formatDegrees(double d) {
+		String signo = d<0 ? "-" : "";
+		d = Math.abs(d);
+		long grado = 0;
+		double minuto = 0;
+		double segundo = 0;
+
+		grado = (long)(d);
+		minuto = (d - grado) * 60;
+		segundo = (minuto - (long) minuto)*60;
+//		System.out.println("Grados: " + grado);
+//		System.out.println("Minutos: " + minuto);
+//		System.out.println("Segundos: " + segundo);
+		return signo+grado+"� "+(long) minuto+"' "+(long)segundo+"''";
+	}
+
+	/**
+	 * <p>Returns the coordinates equivalent to <code>p</code>:
+	 *  <ul>
+	 *   <li>Uses <i><code>formatDegrees(p.get{X or Y}()</code></i> if the associated <code>MapControl</code> object isn't projected.</li>
+	 *   <li>Uses <i><code>formatDegrees({MapControl's projection}.toGeo(p.get{X or Y}())</code></i> if the associated
+	 *    <code>MapControl</code> object is projected and its <code>ViewPort</code>'s distance units are in degrees.</li>
+	 *   <li>Uses <i><code>{NumberFormat according to {@link #setFractionDigits(Point2D) #setFractionDigits(Point2D)}}.format((p.get{X or Y}()/MapContext.CHANGEM[mapControl.getViewPort().getDistanceUnits()])*MapContext.CHANGEM[mapControl.getViewPort().getMapUnits()])</code></i>
+	 *    otherwise.</li>
+	 *  </ul>
+	 * </p>
+	 *
+	 * @param p point 2D to convert in text coordinates according the projection of the associated <code>MapControl</code> and the
+	 *  distance units of its <code>ViewPort</code>.
+	 *
+	 * @return coordinates equivalent to <code>p</code>, according to the algorithm explained up
+	 */
+	public String[] getCoords(Point2D p) {
+		String[] coords=new String[2];
+		IProjection iProj = mapControl.getMapContext().getProjection();
+		if (!iProj.isProjected()) {
+			coords[0]=String.valueOf(formatDegrees(p.getX()));
+			coords[1]=String.valueOf(formatDegrees(p.getY()));
+		} else {
+			double[] trans2Meter=MapContext.getDistanceTrans2Meter();
+			if (PluginServices.getText(this,MapContext.getDistanceNames()[mapControl.getViewPort().getDistanceUnits()]).equals(PluginServices.getText(this,"Grados"))) {
+			    
+				Point2D pgeo = null;
+				try {
+				    pgeo = iProj.toGeo(p);
+	                coords[0]=String.valueOf(formatDegrees(pgeo.getX()));
+	                coords[1]=String.valueOf(formatDegrees(pgeo.getY()));
+				} catch (Exception exc) {
+				    
+				    if ((System.currentTimeMillis() - lastLogTime) > 5000) {
+				        /*
+				         * Prevent too many log lines
+				         */
+				        lastLogTime = System.currentTimeMillis(); 
+				        logger.info("Error: Unable to unproject coordinates: " + p);
+				    }
+				    
+				    /*
+				     * Unable to "unproject". This is not necessarily a bug
+				     * (example: UTM coordinates very far from fuse)
+				     */
+	                coords[0]= "-";
+	                coords[1]= "-";
+				}
+				
+			}else {
+				if (PluginServices.getText(this,MapContext.getDistanceNames()[mapControl.getViewPort().getMapUnits()]).equals(PluginServices.getText(this,"Grados"))) {
+					mapControl.getViewPort().setMapUnits(1);
+				}
+
+				coords[0]=String.valueOf(nf.format((p.getX()/trans2Meter[mapControl.getViewPort().getDistanceUnits()])*trans2Meter[mapControl.getViewPort().getMapUnits()]));
+				coords[1]=String.valueOf(nf.format((p.getY()/trans2Meter[mapControl.getViewPort().getDistanceUnits()])*trans2Meter[mapControl.getViewPort().getMapUnits()]));
+			}
+		}
+		return coords;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+		// TODO Auto-generated method stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/StatusBarListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PointSelectListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PointSelectListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PointSelectListener.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.PointSelectionListener;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+
+
+
+/**
+ * <p>Inherits {@link PointSelectListener PointSelectListener} enabling/disabling special
+ *  controls for managing the data selected.</p>
+ *
+ * @see PointSelectionListener
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PointSelectListener extends PointSelectionListener {
+	/**
+	 * <p>Creates a new <code>PointSelectListener</code> object.</p>
+	 * 
+	 * @param mapCtrl the <code>MapControl</code> where will be applied the changes
+	 */
+	public PointSelectListener(MapControl mapCtrl) {
+		super(mapCtrl);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.PointSelectionListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) throws BehaviorException {
+		super.point(event);
+		PluginServices.getMainFrame().enableControls();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.PointSelectionListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+	/*	try {
+			FLayer[] actives = mapCtrl.getMapContext()
+            .getLayers().getActives();
+            for (int i=0; i < actives.length; i++){
+                if (actives[i] instanceof FLyrAnnotation && actives[i].isEditing()) {
+                    FLyrAnnotation lyrAnnotation = (FLyrAnnotation) actives[i];
+
+                    	lyrAnnotation.setSelectedEditing();
+                    	lyrAnnotation.setInEdition(lyrAnnotation.getRecordset().getSelection().nextSetBit(0));
+                    	FLabel fl=lyrAnnotation.getLabel(lyrAnnotation.getInEdition());
+        				if (fl!=null){
+
+        					View vista=(View)PluginServices.getMDIManager().getActiveView();
+        					TextFieldEdit tfe=new TextFieldEdit(lyrAnnotation);
+
+        					tfe.show(vista.getMapControl().getViewPort().fromMapPoint(fl.getOrig()),vista.getMapControl());
+        				}
+
+
+                }
+            }
+
+		} catch (DriverLoadException e) {
+			e.printStackTrace();
+			throw new BehaviorException("Fallo con el recordset");
+		} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+			e.printStackTrace();
+			throw new BehaviorException("Fallo con el recordset");
+		}
+*/
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PointSelectListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/InfoListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/InfoListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/InfoListener.java	(revision 42196)
@@ -0,0 +1,220 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import java.awt.GridBagConstraints;
+import java.awt.Image;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.info.gui.FInfoDialog;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.InfoByPoint;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.extensionpoint.ExtensionSingleton;
+
+/**
+ * Listener that looks for information at the point selected by one
+ * click of any mouse's button, in the active layers of the associated
+ * <code>MapControl</code>, and displays that data on a {@link FInfoDialog
+ * FInfoDialog} dialog.
+ * 
+ * @author -2009 Vicente Caballero Navarro
+ * @author 2009- gvSIG Team
+ */
+public class InfoListener implements PointListener {
+
+    /**
+     * Object used to log messages for this listener.
+     */
+//    
+    private static final Logger logger = LoggerFactory.getLogger(InfoListener.class);
+
+    private static final String EP_INFOTOOL_NAME = "org.gvsig.app.infotool"; 
+    private static final String EP_INFOTOOL_RENDERER = "renderer"; 
+
+    public static void initializeExtensionPoint() {
+        ExtensionPointManager manager = ToolsLocator.getExtensionPointManager();
+        ExtensionPoint point = manager.add(EP_INFOTOOL_NAME, "Register of data relative to infotool");
+        point.append(
+            EP_INFOTOOL_RENDERER, 
+            "Renderer used to show in a panel the info by point tool.", 
+            new DefaultInfoByPointRenderer()
+        );
+    }
+    
+    /**
+     * The image to display when the cursor is active.
+     */
+    private final Image img = PluginServices.getIconTheme()
+        .get("cursor-info-by-point").getImage();
+
+    /**
+     * Reference to the <code>MapControl</code> object that uses.
+     */
+    private MapControl mapCtrl;
+
+    /**
+     * Radius as tolerance around the selected point, the area will be used to
+     * look for information.
+     */
+    private static int TOL = 7;
+
+    /**
+     * <p>
+     * Creates a new <code>InfoListener</code> object.
+     * </p>
+     * 
+     * @param mc
+     *            the <code>MapControl</code> where will be applied the changes
+     */
+    public InfoListener(MapControl mc) {
+        this.mapCtrl = mc;
+    }
+
+    public void point(PointEvent event) throws BehaviorException {
+        try {
+            ApplicationManager application = ApplicationLocator.getManager();
+            int numLayersInfoable = 0;
+            Point point = event.getMapPoint();
+            double tolerance = mapCtrl.getViewPort().toMapDistance(TOL);
+
+            FLayer[] sel = mapCtrl.getMapContext().getLayers().getActives();
+            Map<String, DynObjectSet> layer2info =
+                new HashMap<String, DynObjectSet>(sel.length);
+
+            for (int i = 0; i < sel.length; i++) {
+                FLayer laCapa = sel[i];
+                if (laCapa instanceof InfoByPoint) {
+                    InfoByPoint layer = (InfoByPoint) laCapa;
+                    DynObjectSet info = layer.getInfo(point, tolerance);
+                    layer2info.put(laCapa.getName(), info);
+                    numLayersInfoable++;
+                }
+            }
+            
+            if (numLayersInfoable == 0) {
+                return;
+            }
+
+            ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
+            InfoByPointRenderer renderer = (InfoByPointRenderer)extensionPoints.get(EP_INFOTOOL_NAME).create(EP_INFOTOOL_RENDERER);
+            if( renderer instanceof DefaultInfoByPointRenderer ) {
+            	((DefaultInfoByPointRenderer)renderer).setMapContext(this.mapCtrl.getMapContext());
+            }
+            IWindow window = renderer.getPanel(layer2info);
+
+            if (window == null) {
+                logger.info("Error. Unable to create info panel.");
+                return;
+            }
+
+            PluginServices.getMDIManager().addWindow(window, GridBagConstraints.LAST_LINE_END);
+
+        } catch (Exception e) {
+            NotificationManager.addError("Info by Point", e);
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * @param window
+     * @return whether the window is currently one the app windows
+     */
+    private boolean isCurrentlyAdded(IWindow iw) {
+        
+        IWindow[] iws = PluginServices.getMDIManager().getAllWindows();
+        for (int i=0; i<iws.length; i++) {
+            if (iws[i] == iw) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public Image getImageCursor() {
+        return img;
+    }
+
+    public boolean cancelDrawing() {
+        return false;
+    }
+
+    public void pointDoubleClick(PointEvent event) throws BehaviorException {
+        // Nothing to do
+    }
+    
+    public interface InfoByPointRenderer {
+        
+       public SingletonWindow getPanel(Map<String, DynObjectSet> layersInfo);
+       
+    }
+    
+    public static class DefaultInfoByPointRenderer implements InfoByPointRenderer, ExtensionSingleton {
+        
+        private FInfoDialog dlgInfo = null;
+		private MapContext mapContext;
+        
+        public void setMapContext(MapContext mapContext) {
+        	this.mapContext = mapContext;
+        }
+        
+        public SingletonWindow getPanel(Map<String, DynObjectSet> layersInfo) {
+            // TODO: set the writable parameter to true to activate
+            // edition of the info by point information.
+            LayersDynObjectSetComponent infoComponent =
+                MapControlLocator.getMapControlManager()
+                    .createLayersDynObjectSetComponent(layersInfo, false);
+            infoComponent.setMapContext(mapContext);
+            if (dlgInfo == null) {
+                dlgInfo = new FInfoDialog(infoComponent);
+            } else {
+                dlgInfo.setInfo(infoComponent);
+            }
+            return dlgInfo;
+        }
+       
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/InfoListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomInListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomInListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomInListener.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.ZoomInListenerImpl;
+import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
+
+
+
+/**
+ * <p>Inherits {@link ZoomInListenerImpl ZoomInListenerImpl} enabling/disabling special
+ *  controls for managing the data selected.</p>
+ *
+ * @see ZoomInListenerImpl
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ZoomInListener extends ZoomInListenerImpl {
+	/**
+	 * <p>Creates a new <code>ZoomInListener</code> object.</p>
+	 * 
+	 * @param mapCtrl the <code>MapControl</code> where be applied the changes
+	 */
+	public ZoomInListener(MapControl mapCtrl) {
+		super(mapCtrl);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.ZoomInListenerImpl#rectangle(com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent)
+	 */
+	public void rectangle(EnvelopeEvent event) {
+		super.rectangle(event);
+		if (PluginServices.getMainFrame() != null)
+		    PluginServices.getMainFrame().enableControls();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomInListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomOutListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomOutListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomOutListener.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.ZoomOutListenerImpl;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+
+
+
+/**
+ * <p>Inherits {@link ZoomOutListenerImpl ZoomOutListenerImpl} enabling/disabling special
+ *  controls for managing the data selected.</p>
+ *
+ * @see ZoomOutListenerImpl
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ZoomOutListener extends ZoomOutListenerImpl {
+	/**
+	 * <p>Creates a new <code>ZoomOutListener</code> object.</p>
+	 * 
+	 * @param mapCtrl the <code>MapControl</code> where be applied the changes
+	 */
+	public ZoomOutListener(MapControl mapCtrl) {
+		super(mapCtrl);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.ZoomOutListenerImpl#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) {
+		super.point(event);
+		PluginServices.getMainFrame().enableControls();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomOutListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PanListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PanListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PanListener.java	(revision 42196)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.toolListeners;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.PanListenerImpl;
+import org.gvsig.fmap.mapcontrol.tools.Events.MoveEvent;
+
+
+
+/**
+ * <p>Inherits {@link PanListener PanListener} enabling/disabling special
+ *  controls for managing the data.</p>
+ *
+ * @see PanListenerImpl
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PanListener extends PanListenerImpl {
+	/**
+	 * <p>Creates a new <code>PanListener</code> object.</p>
+	 * 
+	 * @param mapCtrl the <code>MapControl</code> where will be applied the changes
+	 */
+	public PanListener(MapControl mapCtrl) {
+		super(mapCtrl);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.PanListenerImpl#move(com.iver.cit.gvsig.fmap.tools.Events.MoveEvent)
+	 */
+	public void move(MoveEvent event) {
+		super.move(event);
+		PluginServices.getMainFrame().enableControls();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PanListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/Encuadrator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/Encuadrator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/Encuadrator.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectExtent;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontext.MapContext;
+
+
+
+public class Encuadrator implements ListSelectorListener {
+
+	private Project project;
+//	private View vista;
+	private MapContext mapa;
+
+	public Encuadrator(Project project, MapContext map, IView vista){
+		this.project = project;
+//		this.vista = vista;
+		mapa = map;
+	}
+
+	/**
+	 * @see com.iver.utiles.ListSelectorListener#indexesSelected(int[])
+	 */
+	public void indexesSelected(int[] indices) {
+		mapa.getViewPort().setEnvelope(project.getExtents()[indices[0]].getExtent());
+	}
+
+	/**
+	 * @see com.iver.utiles.ListSelectorListener#indexesRemoved(int[])
+	 */
+	public void indexesRemoved(int[] indices) {
+		for (int i = 0; i < indices.length; i++){
+			project.removeExtent(indices[i]);		
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.utiles.ListSelectorListener#newElement(java.lang.String)
+	 */
+	public void newElement(String name) {
+		ProjectExtent extent = ProjectManager.getInstance().createExtent();
+		extent.setDescription(name);
+		extent.setExtent(mapa.getViewPort().getEnvelope());
+		project.addExtent(extent);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/Encuadrator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewDocument.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewDocument.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewDocument.java	(revision 42196)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view;
+
+import java.awt.Color;
+import java.beans.PropertyChangeListener;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport;
+
+
+public interface ViewDocument extends Document, ExtendedPropertiesSupport {
+
+        public static final String VIEW_PROPERTIES_PAGE_GROUP = "ViewDocument";
+        public static final String LAYER_PROPERTIES_PAGE_GROUP = "LayerPropertiesPageGroup";
+
+        /**
+	 * Gets the FMap's contexts of the main map in the view.
+	 *
+	 * @return
+	 */
+	public MapContext getMapContext();
+
+	/**
+	 * Gets the FMap's context from the locator, which is the
+	 * small map in the left-bottom corner of the View.
+	 *
+	 * @return
+	 */
+	public MapContext getMapOverViewContext();
+
+	public void setMapContext(MapContext fmap);
+
+	public void setMapOverViewContext(MapContext fmap);
+
+	public String getName();
+
+	public Project getProject();
+
+	public void addPropertyChangeListener(PropertyChangeListener listener);
+        
+        public IProjection getProjection();
+        
+        public void setProjection (IProjection proj);
+        
+        public void setBackColor(Color c) ;
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewDocument.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/AbstractContextMenuAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/AbstractContextMenuAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/AbstractContextMenuAction.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view;
+
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+
+
+public abstract class AbstractContextMenuAction implements IContextMenuAction,
+		ExtensionBuilder {
+
+	public boolean isVisible(Object item, Object[] selectedItems) {
+		return true;
+	}
+
+	public boolean isEnabled(Object item, Object[] selectedItems) {
+		return true;
+	}
+
+	public String getGroup() {
+		return "general";
+	}
+
+	public int getGroupOrder() {
+		return 50;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public String getDescription() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/AbstractContextMenuAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/HTMLInfoToolPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/HTMLInfoToolPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/HTMLInfoToolPanel.java	(revision 42196)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.info.gui;
+
+import java.awt.Dimension;
+import java.awt.HeadlessException;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.text.html.HTMLEditorKit;
+
+import org.gvsig.utils.BrowserControl;
+
+
+/**
+ * JPanel to show the feature information return in HTML code
+ * @author laura
+ *
+ */
+public class HTMLInfoToolPanel extends JPanel implements IInfoToolPanel{
+		
+	private boolean initialized = false;
+	private JEditorPane editor = null;
+	private JScrollPane scrollPane = null;
+
+	public HTMLInfoToolPanel() throws HeadlessException {
+		super();
+	}
+	
+	private void init() {
+		if (this.initialized ) return;
+				
+		this.setAutoscrolls(true);
+		this.setLocation(0,0);
+
+		scrollPane = new JScrollPane();		
+		scrollPane.setAutoscrolls(true);
+				
+		editor = new JEditorPane();
+		editor.setContentType("text/html");
+		editor.setAutoscrolls(true);
+		editor.setEditable(false);
+		editor.addHyperlinkListener(new javax.swing.event.HyperlinkListener() { 
+	          public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent e) {
+	           if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
+	           {
+	        	   BrowserControl.displayURL(e.getURL().toString());
+	           }
+	          }
+		});
+		
+//azabala		this.add(editor);
+		
+		
+		this.setSize(new Dimension(640, 400));
+		editor.setSize(new Dimension(640, 400));
+		
+		
+		editor.setEditorKit(new HTMLEditorKit());
+        scrollPane.setViewportView(editor);
+//azabalA		
+		this.add(scrollPane);
+		
+//azabala		scrollPane.setLocation(0,0);
+	}
+	
+	public void show(String text) 
+	{
+		this.init();
+		this.setVisible(true);	
+		editor.setText(text.replaceFirst("Content-Type","Content-Typex"));		
+	}
+
+	public void refreshSize() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void show(XMLItem item) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/HTMLInfoToolPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/XMLItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/XMLItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/XMLItem.java	(revision 42196)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.app.project.documents.view.info.gui;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public interface XMLItem {
+	public void parse(ContentHandler handler) throws SAXException;
+	public FLayer getLayer();
+	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/XMLItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialog.java	(revision 42196)
@@ -0,0 +1,120 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.info.gui;
+
+import java.awt.BorderLayout;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
+
+
+
+/**
+ * Dialog that contains the generic Feature Info Viewer
+ *
+ * @author laura
+ *
+ */
+public class FInfoDialog extends JPanel implements SingletonWindow,
+    IWindowListener, ComponentListener {
+
+    private static final long serialVersionUID = -6707094091114785970L;
+    
+    private LayersDynObjectSetComponent infoViewer;
+
+    public FInfoDialog(LayersDynObjectSetComponent info) {
+        super(new BorderLayout());
+        this.infoViewer = info;
+        add(infoViewer.asJComponent(), BorderLayout.CENTER);
+		setSize(450, 400);
+		infoViewer.asJComponent().addComponentListener(this);
+	}
+    
+    public void setInfo(LayersDynObjectSetComponent info) {
+        this.setEnabled(false);
+		info.asJComponent().addComponentListener(this);
+        this.removeAll();
+        if (infoViewer != null) {
+            infoViewer.dispose();
+        }
+        this.infoViewer = info;
+        add(infoViewer.asJComponent(), BorderLayout.CENTER);
+        this.setEnabled(true);
+}
+
+	public WindowInfo getWindowInfo() {
+
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG |
+				WindowInfo.RESIZABLE | WindowInfo.PALETTE);
+		m_viewinfo.setWidth(getWidth()+8);
+		m_viewinfo.setHeight(getHeight());
+		m_viewinfo.setTitle(PluginServices.getText(this,
+				"Identificar_Resultados"));
+
+		return m_viewinfo;
+	}
+
+	public Object getWindowModel() {
+		return "FInfoDialog";
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.PROPERTIES_PROFILE;
+	}
+
+    public void windowActivated() {
+        // Nothing to do
+    }
+
+    public void windowClosed() {
+        infoViewer.dispose();
+    }
+
+	public void componentHidden(ComponentEvent arg0) {
+		ApplicationManager application = ApplicationLocator.getManager();
+		application.getUIManager().closeWindow(this);
+	}
+
+	public void componentMoved(ComponentEvent arg0) {
+		// Do nothing
+	}
+
+	public void componentResized(ComponentEvent arg0) {
+		// Do nothing
+	}
+
+	public void componentShown(ComponentEvent arg0) {
+		// Do nothing
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialogXML.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialogXML.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialogXML.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.info.gui;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.utils.xmlViewer.XMLViewer;
+
+
+
+/**
+ * Di�logo utilizado para mostrar la infromaci�n.
+ *
+ * @author fernando To change the template for this generated type comment go
+ * 		   to Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and
+ * 		   Comments
+ */
+public class FInfoDialogXML extends XMLViewer implements IWindow {
+
+
+	public FInfoDialogXML(){
+		super();
+		setNamesColumn(new String[]{PluginServices.getText(this, "Atributo"), PluginServices.getText(this, "Valor")});
+		setSize(500, 375);
+	}
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#windowActivated()
+	 */
+	public void viewActivated() {
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG |
+				WindowInfo.RESIZABLE | WindowInfo.PALETTE);
+		m_viewinfo.setWidth(getWidth()+8);
+		m_viewinfo.setHeight(getHeight());
+		m_viewinfo.setTitle(PluginServices.getText(this,
+				"Identificar_Resultados"));
+
+		return m_viewinfo;
+	}
+
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.SingletonWindow#getWindowModel()
+	 */
+	public Object getViewModel() {
+		return "FInfoDialogXML";
+	}
+	public Object getWindowProfile() {
+		return WindowInfo.PROPERTIES_PROFILE;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/FInfoDialogXML.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IInfoToolPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IInfoToolPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IInfoToolPanel.java	(revision 42196)
@@ -0,0 +1,39 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.info.gui;
+
+
+/**
+ * Interface that must implement the panels provided from a layer
+ * to display its Feature Information
+ * 
+ * @author laura
+ *
+ */
+public interface IInfoToolPanel{
+
+	public void show(String s);
+	public void refreshSize();
+	public void show(XMLItem item);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IInfoToolPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IXULInfoToolSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IXULInfoToolSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IXULInfoToolSupport.java	(revision 42196)
@@ -0,0 +1,32 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.info.gui;
+
+import java.io.IOException;
+
+public interface IXULInfoToolSupport extends IInfoToolPanel {
+
+	public void setXULFile(String xulFile) throws IOException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/IXULInfoToolSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/VectorialXMLItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/VectorialXMLItem.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/VectorialXMLItem.java	(revision 42196)
@@ -0,0 +1,149 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 {Iver T.I.}   {Task}
+*/
+ 
+package org.gvsig.app.project.documents.view.info.gui;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class VectorialXMLItem implements XMLItem {
+
+	private FeatureSet selection;
+	private FLayer layer;
+
+	public VectorialXMLItem(FeatureSet selection, FLayer layer) {
+		this.selection = selection;
+		this.layer = layer;
+	}
+
+	public FLayer getLayer(){
+		return layer;
+	}
+	/**
+	 * @see org.gvsig.app.project.documents.view.info.gui.iver.cit.gvsig.gui.toolListeners.InfoListener.XMLItem#parse(org.xml.sax.ContentHandler)
+	 */
+	public void parse(ContentHandler handler) throws SAXException {
+		AttributesImpl aii = new AttributesImpl();
+		handler.startElement("", "", (layer).getName(), aii);
+		DisposableIterator iterator = null;
+		try {
+
+//			FeatureStore ds = ((FLyrVect) layer).getFeatureStore();
+			iterator = selection.iterator();
+			int j=0;
+			FeatureAttributeDescriptor attr;
+			Object value;
+			String strValue;
+			while (iterator.hasNext()) {
+				Feature feature = (Feature) iterator.next();
+				AttributesImpl ai = new AttributesImpl();
+				FeatureType featureType=((FLyrVect) layer).getFeatureStore().getDefaultFeatureType();
+				for (int k = 0; k < featureType.size(); k++) {
+					attr = (FeatureAttributeDescriptor) featureType
+							.get(k);
+					value = feature.get(k);
+					if (value == null) {
+						strValue = "{null}";
+					} else {
+						strValue = value.toString();
+					}
+					ai.addAttribute("", attr.getName(), attr.getName(),
+					"xs:string",
+							strValue);
+				}
+				handler.startElement("", "", String.valueOf(j), ai);
+				handler.endElement("", "", String.valueOf(j));
+				j++;
+			}
+
+			//TODO
+//			ds.start();
+//
+//			for (int j = bitset.nextSetBit(0); j >= 0; j = bitset
+//					.nextSetBit(j + 1)) {
+//				AttributesImpl ai = new AttributesImpl();
+//
+//				for (int k = 0; k < ds.getFieldCount(); k++) {
+//					ai.addAttribute("", ds.getFieldName(k), "",
+//							"xs:string", ds.getFieldValue(j, k).toString());
+//				}
+//				handler.startElement("", "", String.valueOf(j), ai);
+//				handler.endElement("", "", String.valueOf(j));
+//			}
+//
+//			ds.stop();
+
+		} catch (ReadException e) {
+			throw new SAXException(e);
+		} catch (DataException e) {
+			throw new SAXException(e);
+		}
+		finally {
+			DisposeUtils.dispose(iterator);
+		}
+		handler.endElement("", "", (layer).getName());
+	}
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/VectorialXMLItem.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/InfoToolViewer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/InfoToolViewer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/InfoToolViewer.java	(revision 42196)
@@ -0,0 +1,334 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.info.gui;
+
+import java.awt.Dimension;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.util.Vector;
+
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+
+import org.gvsig.app.gui.wizards.FormatListModel;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
+import org.gvsig.fmap.mapcontext.layers.operations.InfoByPoint;
+import org.gvsig.utils.xmlViewer.XMLContent;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+/**
+ * This is the generic Feature Info Viewer
+ * 
+ * If the feature Info comes from a special layer which has registered
+ * the way to visualize itself, adds a panel that the layer should provide
+ * otherwise this viewer will add a panel to visualize HTML or a special
+ * viewer to show XML.
+ * 
+ * @author laura
+ *
+ */
+public class InfoToolViewer extends JPanel {
+	
+	public static Class XULPanelClass = null;
+	
+    private javax.swing.JScrollPane jScrollPane = null;
+    private JList layerList = null;
+    private javax.swing.JSplitPane jSplitPane1 = null;
+    private javax.swing.JPanel layerListPanel = null;
+	private JPanel infoViewerPanel;	
+	private XMLItem[] m_layers;
+	IInfoToolPanel infoPanel = null;
+
+    /**
+     * This is the default constructor
+     */
+    public InfoToolViewer() {
+        super();
+        initialize();
+        this.addComponentListener(new componentListener());
+    }
+    
+    public InfoToolViewer(XMLItem[] layers) {
+    	super();
+    	initialize();
+    	setLayers(layers);
+    }
+    
+    public void setLayers(XMLItem[] layers){    	
+    	m_layers = layers;
+    	initilizeLayerListModel();
+    	updateViewer(0);
+    	// layerList.setSelectedIndex(0);
+    }
+
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(new java.awt.BorderLayout());
+        this.add(getJSplitPane1(), java.awt.BorderLayout.CENTER);
+        this.setSize(600, 600);
+        this.setPreferredSize(new Dimension(600, 600));
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private javax.swing.JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new javax.swing.JScrollPane();
+            jScrollPane.setSize(new Dimension(600,600));
+            jScrollPane.setPreferredSize( new Dimension(600,600));
+            jScrollPane.setViewportView(getLayerListPanel());
+        }
+
+        return jScrollPane;
+    }
+    
+    private void initilizeLayerListModel() {
+        Vector layerNames = new Vector();
+        if (m_layers != null)
+        {
+        	for (int i = 0; i < m_layers.length; i++)
+        	{
+        		layerNames.add(m_layers[i].getLayer().getName());
+        	}        	
+        }         
+        
+        FormatListModel model = new FormatListModel((String[])layerNames.toArray(new String[0])); 
+        getJList().setModel(model);    	
+    }
+
+    public JList getJList(){
+
+	  if (layerList == null) {
+		  layerList = new JList();
+		  initilizeLayerListModel();
+	      layerList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+	  }
+  
+      layerList.addListSelectionListener(new ListSelectionListener() { 
+				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+				  int changedIdx = layerList.getSelectedIndex();//e.getFirstIndex();
+				 
+				  if (changedIdx == -1) return;
+				  updateViewer(changedIdx);
+	           }
+          });    
+      return layerList;
+}
+    /**
+     * This method initializes jSplitPane1
+     *
+     * @return javax.swing.JSplitPane
+     */
+    private javax.swing.JSplitPane getJSplitPane1() {
+        if (jSplitPane1 == null) {
+            jSplitPane1 = new javax.swing.JSplitPane();
+            jSplitPane1.setLeftComponent(getJScrollPane());
+            jSplitPane1.setRightComponent(getInfoViewerPanel());
+            jSplitPane1.setDividerSize(4);
+            jSplitPane1.setDividerLocation(100);
+            jSplitPane1.setSize( new Dimension(600,600));
+            jSplitPane1.setPreferredSize( new Dimension(600,600));
+        }
+        return jSplitPane1;
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private javax.swing.JPanel getLayerListPanel() {
+        if (layerListPanel == null) {
+            layerListPanel = new javax.swing.JPanel();
+            layerListPanel.setLayout(new java.awt.BorderLayout());
+            layerListPanel.add(getJList(), java.awt.BorderLayout.CENTER);
+        }
+
+        return layerListPanel;
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private javax.swing.JPanel getInfoViewerPanel() {
+        if (infoViewerPanel == null) {
+            infoViewerPanel = new javax.swing.JPanel();
+            infoViewerPanel.setLayout(new java.awt.BorderLayout());
+        }
+        validate();
+        return infoViewerPanel;
+    } 
+    
+    /**
+     * updates the layer to display
+     *
+     */
+    private void updateViewer(int changedIdx)
+    {
+    	if((m_layers == null) || (m_layers.length == 0)) return;    	  
+		  final XMLItem item = m_layers[changedIdx];
+		  FLayer layer = item.getLayer(); 
+		
+		  if (layer instanceof InfoByPoint){					  				
+			  FLyrDefault defaultLayer = (FLyrDefault)layer;
+              if ( XULPanelClass!=null && defaultLayer.getProperty("infoTool.XULFile") != null){
+            	try {
+					IXULInfoToolSupport infoPanel = (IXULInfoToolSupport) XULPanelClass.newInstance();
+					infoPanel.setXULFile((String)defaultLayer.getProperty("infoTool.XULFile"));
+					infoViewerPanel.removeAll();
+					infoViewerPanel.add((JPanel)infoPanel);
+					infoPanel.show(item);
+					infoViewerPanel.setVisible( true ); 
+					revalidate();
+					return;
+				} catch (Exception e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+            	  
+              }
+              
+              if (defaultLayer.getProperty("customPanel") != null){
+				  
+				Object o = (Object)defaultLayer.getProperty("customPanel");
+				if (o instanceof IInfoToolPanel) {
+					  infoPanel = (IInfoToolPanel)o;
+				} else {
+				 	try {
+						Class c = (Class)o;
+				 		infoPanel = (IInfoToolPanel)c.newInstance();
+					} catch (InstantiationException e1) {
+						e1.printStackTrace();
+					} catch (IllegalAccessException e1) {
+						e1.printStackTrace();
+					}
+				}
+				infoViewerPanel.removeAll();
+				infoViewerPanel.add((JPanel)infoPanel);
+				infoPanel.show(item);
+				infoViewerPanel.setVisible( true ); 
+				revalidate();
+
+			  } else {
+				  
+				  if (item.toString().toLowerCase().endsWith( "</html>"))//if (item.toString().toLowerCase().startsWith( "<html>"))
+				  {
+					  //skip the header info
+					  IInfoToolPanel htmlPanel = new HTMLInfoToolPanel();
+					 
+					  int idx = item.toString().toLowerCase().indexOf("<html");
+					  if (idx != -1){
+						  htmlPanel.show(item.toString().substring(idx));					  
+					  }else{
+						  htmlPanel.show(item.toString());
+					  }
+					  infoViewerPanel.removeAll();
+					  infoViewerPanel.add((JPanel)htmlPanel);
+					  infoViewerPanel.setVisible( true ); 							  
+					  revalidate();
+				  } else {
+					  FInfoDialogXML dlgXML = new FInfoDialogXML();
+						try {
+							dlgXML.setModel(new XMLContent() {
+								private ContentHandler handler;
+
+								public void setContentHandler(ContentHandler arg0) {
+									handler = arg0;
+								}
+
+								public void parse() throws SAXException {
+									handler.startDocument();
+									item.parse( handler);
+									handler.endDocument();
+								}
+							});
+							dlgXML.getXmlTree().setRootVisible(false);
+							DefaultTreeModel treeModel = (DefaultTreeModel) dlgXML
+									.getXmlTree().getModel();
+							DefaultMutableTreeNode n;
+							DefaultMutableTreeNode root = (DefaultMutableTreeNode) dlgXML
+									.getXmlTree().getModel().getRoot();
+							n = root.getFirstLeaf();
+							TreePath path = new TreePath(treeModel.getPathToRoot(n));
+							dlgXML.getXmlTree().expandPath(path);
+							dlgXML.getXmlTree().setSelectionPath(path);
+							//dlgXML.
+							
+							infoViewerPanel.removeAll();
+							infoViewerPanel.add(dlgXML);
+							infoViewerPanel.setVisible( true ); 
+							this.validate();
+	    					this.doLayout();	
+							
+						} catch (SAXException e1) {
+							e1.printStackTrace();
+						}
+				  }
+			  }
+		  }    	
+    }
+    
+    class componentListener implements ComponentListener{
+
+		public void componentHidden(ComponentEvent e) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		public void componentMoved(ComponentEvent e) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		public void componentResized(ComponentEvent e) {
+			
+			//if (e.getComponent() == )
+			if (infoPanel != null){
+				infoPanel.refreshSize();
+			}
+			
+			
+		}
+
+		public void componentShown(ComponentEvent e) {
+			// TODO Auto-generated method stub
+			
+		}
+    	
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/info/gui/InfoToolViewer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/DefaultViewDocument.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/DefaultViewDocument.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/DefaultViewDocument.java	(revision 42196)
@@ -0,0 +1,169 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.extension.AddLayer;
+import org.gvsig.app.gui.preferencespage.LayerOrderPage;
+import org.gvsig.app.project.ProjectPreferences;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * Clase que representa una vista del proyecto
+ *
+ * @author 2004-2005 Fernando Gonz�lez Cort�s
+ * @author 2006-2009 Jose Manuel Vivo
+ * @author 2005-         Vicente Caballero
+ * @author 2009-         Joaquin del Cerro
+ * 
+ */
+
+public class DefaultViewDocument extends BaseViewDocument {
+
+	private static Logger logger = LoggerFactory.getLogger(DefaultViewDocument.class);
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 676711512482334764L;
+
+	public static final String PERSISTENCE_DEFINITION_NAME = "DefaultViewDocument";
+	
+
+	public DefaultViewDocument() {
+		this(null);
+	}
+	
+	public DefaultViewDocument(DocumentManager factory) {
+		super(factory); 
+
+		ViewPort vp;
+	
+		ProjectPreferences preferences = (ProjectPreferences) ApplicationLocator.getManager().getPreferences("project");
+    	
+    	MapContext viewMapContext = new MapContext(
+				new ViewPort( preferences.getDefaultProjection() )
+		);
+		vp = viewMapContext.getViewPort();
+		vp.setBackColor(preferences.getDefaultViewBackColor());
+		vp.setDistanceUnits(preferences.getDefaultDistanceUnits());
+		vp.setDistanceArea(preferences.getDefaultDistanceArea());
+		
+		/*
+		 * Another user preference: the order manager
+		 */
+		LayerOrderManager lom = getCurrentOrderManager();
+		viewMapContext.setOrderManager(lom);
+		
+		
+		/*
+		 * Not very elegant but we are forcing meters if projected
+		 */
+		if (viewMapContext.getProjection().isProjected()) {
+		    vp.setMapUnits(1);
+		} else {
+            vp.setMapUnits(8);
+		}
+		
+		
+		this.setMapContext(viewMapContext);
+		
+		MapContext overviewMapContext = new MapContext(
+				new ViewPort( viewMapContext.getProjection() )
+		);
+		vp = viewMapContext.getViewPort();
+		vp.setBackColor(preferences.getDefaultViewBackColor());
+		this.setMapOverViewContext(overviewMapContext);
+	}
+	
+	/**
+	 * Get current order manager from persistence
+	 * 
+	 * @return
+	 */
+	private LayerOrderManager getCurrentOrderManager() {
+		
+		DynObject props = this.getPluginProperties();
+		// current_layer_order_manager
+		Object val_obj = null;
+		if (props.hasDynValue(LayerOrderPage.PREFERENCES_ID)) {
+			val_obj = props.getDynValue(LayerOrderPage.PREFERENCES_ID);
+		}
+		if (val_obj != null && val_obj instanceof LayerOrderManager) {
+			LayerOrderManager lom = (LayerOrderManager) val_obj;
+			return lom;
+		} else {
+			logger.info("No order manager found in persistence.");
+			return MapContextLocator.getDefaultOrderManager();
+		}
+		
+	}
+	
+	private DynObject getPluginProperties() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        return pluginsManager.getPlugin(AddLayer.class).getPluginProperties();
+	}
+	
+	
+	public void saveToState(PersistentState state) throws PersistenceException {
+		super.saveToState(state);
+	}
+	
+	public void loadFromState(PersistentState state) throws PersistenceException {
+		super.loadFromState(state);
+	}
+
+	public String exportDocumentAsText() {
+		// FIXME: jjdc PersistentManager getStateAsText o similar
+//		 PersistenceManager manager = ToolsLocator.getPersistenceManager();
+//		 PersistentState state = manager.getState(this);
+//		 return manager.getStateAsText(state);
+		return null;
+	}
+
+	public void setStateFromText(String text) {
+		// FIXME: jjdc PersistentManager getStateFromText o similar
+//		 PersistenceManager manager = ToolsLocator.getPersistenceManager();
+//		 PersistentState state = manager.getStateFromText(text);
+//		 this.loadFromState(state);
+	}
+
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/DefaultViewDocument.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/ValueCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/ValueCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/ValueCellEditor.java	(revision 42196)
@@ -0,0 +1,214 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.edition.gui;
+
+import java.awt.Component;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+/**
+ * Cell Editor sobre los valores �nicos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ValueCellEditor extends JTextField implements TableCellEditor {
+	private ArrayList listeners = new ArrayList();
+	//private Value initialValue;
+
+	/**
+	 * Crea un nuevo FLabelCellEditor.
+	 */
+	public ValueCellEditor() {
+		addKeyListener(new KeyAdapter() {
+				public void keyReleased(KeyEvent e) {
+					if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+						stopCellEditing();
+					} else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+						cancelCellEditing();
+					}
+				}
+			});
+	}
+
+	//Implement the one CellEditor method that AbstractCellEditor doesn't.
+	public Object getCellEditorValue() {
+		return getValue(getText());
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+		//initialValue=(Value)value;
+		if (value == null) {
+			setText("");
+		} else {
+			setText(value.toString());
+		}
+
+		return this;
+	}
+
+	/**
+	 * @see javax.swing.CellEditor#cancelCellEditing()
+	 */
+	public void cancelCellEditing() {
+		//if (initialValue != null) {
+		//	setText(initialValue.toString());
+		//}
+
+		for (int i = 0; i < listeners.size(); i++) {
+			CellEditorListener l = (CellEditorListener) listeners.get(i);
+			ChangeEvent evt = new ChangeEvent(this);
+			l.editingCanceled(evt);
+		}
+	}
+
+	/**
+	 * @see javax.swing.CellEditor#stopCellEditing()
+	 */
+	public boolean stopCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+			CellEditorListener l = (CellEditorListener) listeners.get(i);
+			ChangeEvent evt = new ChangeEvent(this);
+			l.editingStopped(evt);
+		}
+
+		return true;
+	}
+
+	/**
+	 * @see javax.swing.CellEditor#isCellEditable(java.util.EventObject)
+	 */
+	public boolean isCellEditable(EventObject anEvent) {
+		return true;
+	}
+
+	/**
+	 * @see javax.swing.CellEditor#shouldSelectCell(java.util.EventObject)
+	 */
+	public boolean shouldSelectCell(EventObject anEvent) {
+		return true;
+	}
+
+	/**
+	 * @see javax.swing.CellEditor#addCellEditorListener(javax.swing.event.CellEditorListener)
+	 */
+	public void addCellEditorListener(CellEditorListener l) {
+		listeners.add(l);
+	}
+
+	/**
+	 * @see javax.swing.CellEditor#removeCellEditorListener(javax.swing.event.CellEditorListener)
+	 */
+	public void removeCellEditorListener(CellEditorListener l) {
+		listeners.remove(l);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param s DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	private Object getValue(String s) {
+		Object val = null;
+		//Value cero = null;
+
+//		try {
+			try {
+				val = new Integer(s);//ValueFactory.createValueByType(s, Types.INTEGER);
+
+				return val;
+			} catch (NumberFormatException e) {
+			}
+
+			try {
+				val = new Long(s);//ValueFactory.createValueByType(s, Types.BIGINT);
+
+				return val;
+			} catch (NumberFormatException e) {
+			}
+
+			try {
+				val = new Float(s);//ValueFactory.createValueByType(s, Types.FLOAT);
+
+				return val;
+			} catch (NumberFormatException e) {
+			}
+
+			try {
+				val = new Double(s);//ValueFactory.createValueByType(s, Types.DOUBLE);
+
+				return val;
+			} catch (NumberFormatException e) {
+			}
+
+			val = s;//ValueFactory.createValueByType(s, Types.LONGVARCHAR);
+//		} catch (ParseException e) {
+//			e.printStackTrace();
+//		}
+
+		/*try {
+		   if (v instanceof DoubleValue) {
+		           val = ValueFactory.createValue(Double.parseDouble(s));
+		           cero = ValueFactory.createValue((double) 0);
+		   } else if (v instanceof StringValue) {
+		           val = ValueFactory.createValue(s);
+		           cero = ValueFactory.createValue((String) "");
+		   } else if (v instanceof LongValue) {
+		           val = ValueFactory.createValue(Long.parseLong(s));
+		           cero = ValueFactory.createValue((long) 0);
+		   } else if (v instanceof IntValue) {
+		           val = ValueFactory.createValue(Integer.parseInt(s));
+		           cero = ValueFactory.createValue((int) 0);
+		   } else if (v instanceof FloatValue) {
+		           val = ValueFactory.createValue(Float.parseFloat(s));
+		           cero = ValueFactory.createValue((float) 0);
+		   } else if (v instanceof ShortValue) {
+		           val = ValueFactory.createValue(Short.parseShort(s));
+		           cero = ValueFactory.createValue((short) 0);
+		   } else if (v instanceof BooleanValue) {
+		           val = ValueFactory.createValue(Boolean.getBoolean(s));
+		           cero = ValueFactory.createValue((boolean) false);
+		   } else if (v instanceof DateValue) {
+		           val = ValueFactory.createValue(Date.parse(s));
+		           cero = ValueFactory.createValue((Date) new Date());
+		   }
+		   } catch (NumberFormatException e) {
+		           ///JOptionPane.showMessageDialog(null, PluginServices...getText(this,"Formato de n�mero erroneo")+".");
+		           return cero;
+		   }
+		 */
+		return val;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/ValueCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PanelEditInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PanelEditInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PanelEditInterval.java	(revision 42196)
@@ -0,0 +1,222 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.legend.edition.gui;
+
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.FInterval;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author fjp To change the template for this generated type comment go to
+ *         Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and
+ *         Comments
+*/
+public class PanelEditInterval extends JPanel implements IWindow  {
+	private JButton jButton = null;
+	//private FIntervalCellEditor intervaleditor;
+	private JPanel jPanel = null;
+	private JPanel jPanel1 = null;
+	private JLabel jLabel = null;
+	private JTextField m_txtMin1 = null;
+	private JPanel jPanel2 = null;
+	private JLabel jLabel1 = null;
+	private JTextField m_txtMax1 = null;
+	private boolean ok=false;
+	/**
+     * This is the default constructor
+     */
+    public PanelEditInterval() {
+        super();
+        initialize();
+		//intervaleditor=ice;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param i DOCUMENT ME!
+     */
+    public void setFInterval(IInterval i) {
+    	ok=false;
+		if (i instanceof FInterval){
+
+			m_txtMin1.setText(String.valueOf(((FInterval)i).getMin()));
+			m_txtMax1.setText(String.valueOf(((FInterval)i).getMax()));
+		}
+	}
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public FInterval getFInterval() {
+		double from=0;
+		double to=0;
+		try{
+        from = Double.parseDouble(m_txtMin1.getText());
+        to =Double.parseDouble(m_txtMax1.getText());
+
+		}catch (NumberFormatException e) {
+			JOptionPane.showMessageDialog(null, PluginServices.getText(this,"Formato_de_numero_erroneo")+".");
+		}
+		FInterval i = new FInterval(from, to);
+        return i;
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setSize(316, 124);
+		this.add(getJPanel1(), null);
+		this.add(getJPanel2(), null);
+		this.add(getJPanel(), null);
+
+
+    }
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
+		m_viewinfo.setTitle(PluginServices.getText(this, "Intervalo"));
+		m_viewinfo.setWidth(this.getWidth());
+		m_viewinfo.setHeight(this.getHeight());
+		return m_viewinfo;
+	}
+
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setText("aceptar");
+			jButton.setPreferredSize(new java.awt.Dimension(90,26));
+			jButton.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					//intervaleditor.setCurrentInterval(getFInterval());
+					ok=true;
+					PluginServices.getMDIManager().closeWindow(PanelEditInterval.this);
+				}
+			});
+		}
+		return jButton;
+	}
+	public boolean isOK(){
+		return ok;
+	}
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.setPreferredSize(new java.awt.Dimension(140,36));
+			jPanel.add(getJButton(), null);
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jLabel = new JLabel();
+			jLabel.setText("Valor minimo");
+			jPanel1 = new JPanel();
+			jPanel1.add(jLabel, null);
+			jPanel1.add(getM_txtMin1(), null);
+
+		}
+		return jPanel1;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getM_txtMin1() {
+		if (m_txtMin1 == null) {
+			m_txtMin1 = new JTextField();
+			m_txtMin1.setPreferredSize(new java.awt.Dimension(100,20));
+		}
+		return m_txtMin1;
+	}
+
+	/**
+	 * This method initializes jPanel2
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel2() {
+		if (jPanel2 == null) {
+			jLabel1 = new JLabel();
+			jLabel1.setText("Valor maximo");
+			jPanel2 = new JPanel();
+			jPanel2.add(jLabel1, null);
+			jPanel2.add(getM_txtMax1(), null);
+
+		}
+		return jPanel2;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getM_txtMax1() {
+		if (m_txtMax1 == null) {
+			m_txtMax1 = new JTextField();
+			m_txtMax1.setPreferredSize(new java.awt.Dimension(100,20));
+		}
+		return m_txtMax1;
+	}
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PanelEditInterval.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PreviewIcon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PreviewIcon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PreviewIcon.java	(revision 42196)
@@ -0,0 +1,103 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.edition.gui;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+
+public class PreviewIcon extends JPanel {
+	private ImageIcon icon;
+	private boolean isSelected;
+
+	/**
+	 *
+	 */
+	public PreviewIcon() {
+		super();
+			initialize();
+	}
+
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+        this.setSize(70, 52);
+
+	}
+	protected void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		if (icon == null)
+			return;
+
+		Graphics2D g2 = (Graphics2D) g;
+		//g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		//g.setClip(0,0,getWidth(), getHeight());
+		//Rectangle r = g.getClipBounds(); //getClipRect();
+		if (isSelected)
+			g2.setColor(Color.blue);
+		else
+			g2.setColor(Color.white);
+
+		//g2.setColor(color);
+		g2.fillRect(0,0,getWidth(),getHeight());
+		g2.drawImage(icon.getImage(),0,0,this);
+
+	}
+	public void setSelected(boolean b) {
+		isSelected=b;
+	}
+	public void setIcon(ImageIcon icon) {
+		this.icon=icon;
+		repaint();
+	}
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.Component#isShowing()
+	 */
+	public boolean isShowing() {
+		return true; // super.isShowing();
+	}
+
+
+	public boolean isSelected() {
+		return isSelected;
+	}
+
+
+	public synchronized void addMouseListener(MouseListener arg0) {
+		super.addMouseListener(arg0);
+
+	}
+}  //  @jve:visual-info  decl-index=0 visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/PreviewIcon.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/IntervalCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/IntervalCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/IntervalCellEditor.java	(revision 42196)
@@ -0,0 +1,167 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.legend.edition.gui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JTable;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.FInterval;
+
+
+
+/**
+ * Cell Editor de intervalos. Controla los eventos de edici�n que se realicen
+ * sobre la columna de intervalos.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class IntervalCellEditor extends JButton
+	implements TableCellEditor{
+
+	private static final long serialVersionUID = 2020808901328629215L;
+
+	private List listeners = new ArrayList();
+	private IInterval interval;
+	private PanelEditInterval editPanel;
+		/**
+	 * Crea un nuevo FIntervalCellEditor.
+	 */
+	public IntervalCellEditor() {
+		addMouseListener(new MouseListener(){
+
+			public void mouseClicked(MouseEvent e) {
+				if (e.getClickCount()==2){
+					if (interval instanceof IInterval){
+					editPanel.setFInterval(interval);
+					PluginServices.getMDIManager().addWindow(editPanel);
+					if (editPanel.isOK()){
+						interval = editPanel.getFInterval();
+						setBackground(Color.white);
+						setText(interval.toString());
+						stopCellEditing();
+					}
+					}
+				}
+			}
+
+			public void mouseEntered(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseReleased(MouseEvent e) {
+			}
+			
+		});
+		addKeyListener(new KeyAdapter() {
+            public void keyReleased(KeyEvent e) {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER){
+                    stopCellEditing();
+                }else if (e.getKeyCode() == KeyEvent.VK_ESCAPE){
+                    cancelCellEditing();
+                }
+            }
+        });
+		editPanel = new PanelEditInterval();
+		this.setBackground(Color.white);
+		
+	}
+
+	/**
+	 * Inserta el intervalo.
+	 *
+	 * @param i DOCUMENT ME!
+	 */
+	public void setCurrentInterval(FInterval i) {
+		interval = i;
+		this.setText(i.toString());
+	}
+
+	//Implement the one CellEditor method that AbstractCellEditor doesn't.
+	public Object getCellEditorValue() {
+		return interval;
+	}
+
+	//Implement the one method defined by TableCellEditor.
+	public Component getTableCellEditorComponent(JTable table, Object value,
+		boolean isSelected, int row, int column) {
+		interval = (IInterval) value;
+		this.setText(interval.toString());
+		editPanel.setFInterval(interval);
+		return this;
+	}
+
+	public void cancelCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+	        CellEditorListener l = (CellEditorListener) listeners.get(i);
+	        ChangeEvent evt = new ChangeEvent(this);
+	        l.editingCanceled(evt);
+	    }
+	}
+
+	public boolean stopCellEditing() {
+		for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingStopped(evt);
+        }
+        return true;
+	}
+
+	public boolean isCellEditable(EventObject anEvent) {
+		return true;
+	}
+
+	public boolean shouldSelectCell(EventObject anEvent) {
+		return true;
+	}
+
+	public void addCellEditorListener(CellEditorListener l) {
+		listeners.add(l);
+	}
+
+	public void removeCellEditorListener(CellEditorListener l) {
+		listeners.remove(l);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/edition/gui/IntervalCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialInterval.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialInterval.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialInterval.java	(revision 42196)
@@ -0,0 +1,896 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.ClassifiableVectorial;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.IInterval;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialIntervalLegend;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.symbology.SymbologyLocator;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.FInterval;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.VectorialIntervalLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.IMultiShapeSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class VectorialInterval extends JPanel implements ILegendPanel{
+    private static final Logger logger = LoggerFactory
+            .getLogger(VectorialInterval.class);
+    private GridBagLayoutPanel pnlGeneral = null;
+    protected JComboBox cmbField = null;
+    protected JTextField txtNumIntervals = null;
+    private ColorChooserPanel colorChooserPanel = null;
+    private ColorChooserPanel colorChooserPanel1 = null;
+    protected JCheckBox chkdefaultvalues = null;
+    protected JComboBox cmbIntervalType = null;
+    private JPanel panelS = null;
+    private JButton bintervals = null;
+    private JButton bInsert = null;
+    protected JButton bDelAll = null;
+    protected JButton bDel = null;
+    private int count = 0;
+    protected ClassifiableVectorial layer;
+    protected VectorialIntervalLegend theLegend;
+    protected IVectorialIntervalLegend auxLegend = null;
+    protected SymbolTable symbolTable;
+    private MyListener listener = new MyListener();
+    protected JPanel pnlCenter = null;
+    protected JPanel optionPanel;
+    private JPanel pnlNorth;
+	protected JSymbolPreviewButton defaultSymbolPrev;
+	private GridBagLayoutPanel defaultSymbolPanel = new GridBagLayoutPanel();
+	
+	private MapContextManager mapContextManager = MapContextLocator
+			.getMapContextManager();
+
+    /**
+     * This is the default constructor
+     */
+    public VectorialInterval() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(700, 350);
+        this.add(getPnlNorth(), BorderLayout.NORTH);
+
+        this.add(getPnlButtons(), BorderLayout.SOUTH);
+        this.add(getPnlCenter(), BorderLayout.CENTER);
+        setOptionPanel(getOptionPanel());
+    }
+
+    private JPanel getPnlNorth() {
+        if (pnlNorth == null) {
+            pnlNorth = new JPanel(new GridLayout(1, 2));
+            pnlNorth.add(getGeneralPanel());
+        }
+        return pnlNorth;
+    }
+
+    /**
+     * This method initializes panelN
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getGeneralPanel() {
+        if (pnlGeneral == null) {
+            pnlGeneral = new GridBagLayoutPanel();
+            pnlGeneral.setBorder(BorderFactory.
+                    createTitledBorder(null,
+                            PluginServices.getText(this, "fields")));
+            pnlGeneral.addComponent(PluginServices.getText(this, "Campo_de_clasificacion"),
+                    getCmbFields());
+            pnlGeneral.addComponent(PluginServices.getText(this, "tipo_de_intervalo"),
+                    getCmbIntervalTypes());
+
+            JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0));
+            aux.add(getTxtNumIntervals());
+            pnlGeneral.addComponent(PluginServices.getText(this, "No_de_intervalos"),
+                    aux);
+            defaultSymbolPanel.add(getChkDefaultvalues(), null);
+			pnlGeneral.addComponent(defaultSymbolPanel);
+        }
+        return pnlGeneral;
+    }
+
+    public JPanel getOptionPanel() {
+        if (optionPanel == null) {
+            optionPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+            optionPanel.setBorder(BorderFactory.
+                    createTitledBorder(null,
+                            PluginServices.getText(this, "color_ramp")));
+
+            GridBagLayoutPanel aux = new GridBagLayoutPanel();
+            aux.addComponent(PluginServices.getText(this, "Color_inicio"),
+                    getColorChooserPanel());
+            aux.addComponent(PluginServices.getText(this, "Color_final"),
+                    getColorChooserPanel1());
+            optionPanel.add(aux);
+        }
+        return optionPanel;
+    }
+
+    private void setOptionPanel(JPanel p) {
+        getPnlNorth().remove(getOptionPanel());
+        getPnlNorth().add(p, BorderLayout.NORTH);
+    }
+    /**
+     * This method initializes jComboBox
+     *
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getCmbFields() {
+        if (cmbField == null) {
+            cmbField = new JComboBox();
+            cmbField.setActionCommand("FIELD_SELECTED");
+            cmbField.addActionListener(listener);
+            cmbField.setVisible(true);
+        }
+
+        return cmbField;
+    }
+
+    /**
+     * This method initializes txtNumIntervals
+     *
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTxtNumIntervals() {
+        if (txtNumIntervals == null) {
+            txtNumIntervals = new JTextField(5);
+            txtNumIntervals.setText("5");
+        }
+
+        return txtNumIntervals;
+    }
+
+    /**
+     * This method initializes colorChooserPanel
+     *
+     * @return com.iver.cit.gvsig.gui.Panels.ColorChooserPanel
+     */
+    private ColorChooserPanel getColorChooserPanel() {
+        if (colorChooserPanel == null) {
+            colorChooserPanel = new ColorChooserPanel();
+            colorChooserPanel.setBounds(new java.awt.Rectangle(108, 49, 54, 20));
+            colorChooserPanel.setAlpha(255);
+            colorChooserPanel.setColor(Color.red);
+        }
+
+        return colorChooserPanel;
+    }
+
+    /**
+     * This method initializes colorChooserPanel1
+     *
+     * @return com.iver.cit.gvsig.gui.Panels.ColorChooserPanel
+     */
+    private ColorChooserPanel getColorChooserPanel1() {
+        if (colorChooserPanel1 == null) {
+            colorChooserPanel1 = new ColorChooserPanel();
+            colorChooserPanel1.setBounds(new java.awt.Rectangle(251, 49, 54, 20));
+            colorChooserPanel1.setAlpha(255);
+            colorChooserPanel1.setColor(Color.blue);
+        }
+
+        return colorChooserPanel1;
+    }
+
+    /**
+     * This method initializes chkdefaultvalues
+     *
+     * @return javax.swing.JCheckBox
+     */
+    protected JCheckBox getChkDefaultvalues() {
+		if (chkdefaultvalues == null) {
+			chkdefaultvalues = new JCheckBox();
+			chkdefaultvalues.setText(PluginServices.getText(this,
+			"resto_valores")+": ");
+			chkdefaultvalues.setBounds(new java.awt.Rectangle(342, 26, 141, 20));
+			chkdefaultvalues.setSelected(false);
+			chkdefaultvalues.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					if (chkdefaultvalues.isSelected()) {
+						auxLegend.useDefaultSymbol(true);
+					} else {
+						auxLegend.useDefaultSymbol(false);
+					}
+				}
+			});
+		}
+
+		return chkdefaultvalues;
+	}
+
+    /**
+     * This method initializes jComboBox1
+     *
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getCmbIntervalTypes() {
+        if (cmbIntervalType == null) {
+            cmbIntervalType = new JComboBox();
+            cmbIntervalType.setActionCommand("INTERVAL_TYPE");
+            cmbIntervalType.addActionListener(listener);
+            cmbIntervalType.addItem(PluginServices.getText(this, "equal_intervals"));
+            cmbIntervalType.addItem(PluginServices.getText(this,
+                    "natural_intervals"));
+            cmbIntervalType.addItem(PluginServices.getText(this,
+                    "quantile_intervals"));
+            cmbIntervalType.setVisible(true);
+        }
+
+        return cmbIntervalType;
+    }
+
+    /**
+     * This method initializes panelS
+     *
+     * @return javax.swing.JPanel
+     */
+    protected JPanel getPnlButtons() {
+        if (panelS == null) {
+            panelS = new JPanel();
+            panelS.setPreferredSize(new java.awt.Dimension(417, 32));
+            panelS.add(getBintervals(), null);
+            panelS.add(getBInsert(), null);
+            panelS.add(getBDelAll(), null);
+            panelS.add(getBDel(), null);
+        }
+
+        return panelS;
+    }
+
+    /**
+     * This method initializes bintervals
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBintervals() {
+        if (bintervals == null) {
+            bintervals = new JButton();
+            bintervals.setActionCommand("ADD_ALL_VALUES");
+            bintervals.addActionListener(listener);
+            bintervals.setText(PluginServices.getText(this,
+                    "Calcular_intervalos"));
+        }
+
+        return bintervals;
+    }
+
+    /**
+     * This method initializes bInsert
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBInsert() {
+        if (bInsert == null) {
+            bInsert = new JButton();
+            bInsert.setActionCommand("ADD_VALUE");
+            bInsert.addActionListener(listener);
+            bInsert.setText(PluginServices.getText(this, "Anadir"));
+        }
+
+        return bInsert;
+    }
+
+    /**
+     * This method initializes bDelAll
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBDelAll() {
+        if (bDelAll == null) {
+            bDelAll = new JButton();
+            bDelAll.setActionCommand("REMOVE_ALL");
+            bDelAll.addActionListener(listener);
+            bDelAll.setText(PluginServices.getText(this, "Quitar_todos"));
+        }
+
+        return bDelAll;
+    }
+
+    /**
+     * This method initializes bDel
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBDel() {
+        if (bDel == null) {
+            bDel = new JButton();
+            bDel.setText(PluginServices.getText(this, "Quitar"));
+            bDel.setActionCommand("REMOVE");
+            bDel.addActionListener(listener);
+        }
+
+        return bDel;
+    }
+
+
+    /**
+     * Damos una primera pasada para saber los l�mites inferior y superior y
+     * rellenar un array con los valores. Luego dividimos ese array en
+     * intervalos.
+     */
+    protected void fillTableValues() {
+
+        symbolTable.removeAllItems();
+
+        try {
+            IInterval[] arrayIntervalos = calculateIntervals();
+            if (arrayIntervalos == null) {
+				return;
+			}
+
+            IInterval interval;
+            NumberFormat.getInstance().setMaximumFractionDigits(2);
+            //theLegend.clear();
+            auxLegend.clear();
+
+            int r;
+            int g;
+            int b;
+            int stepR;
+            int stepG;
+            int stepB;
+
+            // Cogemos el tipo de gradaci�n de colores que quiere el usuario y
+            // Creamos el primer y �ltimo color.
+            Color startColor = colorChooserPanel.getColor();
+
+            Color endColor = colorChooserPanel1.getColor();
+
+            r = startColor.getRed();
+            g = startColor.getGreen();
+            b = startColor.getBlue();
+            stepR = (endColor.getRed() - r) / arrayIntervalos.length;
+            stepG = (endColor.getGreen() - g) / arrayIntervalos.length;
+            stepB = (endColor.getBlue() - b) / arrayIntervalos.length;
+
+//            auxLegend = LegendFactory.createVectorialIntervalLegend(layer.getShapeType());
+			auxLegend = (IVectorialIntervalLegend) MapContextLocator
+					.getMapContextManager().createLegend(
+							IVectorialIntervalLegend.LEGEND_NAME);
+            auxLegend.setShapeType(layer.getShapeType());
+            auxLegend.useDefaultSymbol(false);
+            auxLegend.setStartColor(startColor);
+            auxLegend.setEndColor(endColor);
+
+            int geomType = layer.getGeometryType().getType();
+            int numSymbols = 0;
+
+            for (int k = 0; k < arrayIntervalos.length; k++) {
+                interval = arrayIntervalos[k];
+
+				ISymbol theSymbol = null;
+				Color col = new Color(r, g, b);
+				
+                theSymbol = mapContextManager.getSymbolManager().createSymbol(
+                    geomType, col);
+                
+                /*
+                 * If multishape, we need to set line and fill color here.
+                 * This is because the symbol manager is in mapcontext.api, which cannot
+                 * depend on symbology.lib.api
+                 */
+                if (theSymbol instanceof IMultiShapeSymbol) {
+                    IMultiShapeSymbol mss = (IMultiShapeSymbol) theSymbol; 
+                    mss.getLineSymbol().setLineColor(col);
+                    mss.getFillSymbol().setFillColor(col);
+                }
+
+				
+                theSymbol.setDescription(NumberFormat.getInstance().format(interval.getMin()) +
+                    " - " +
+                    NumberFormat.getInstance().format(interval.getMax()));
+
+                //////////////////////////////////////
+                // CALCULAMOS UN COLOR APROPIADO
+                r = r + stepR;
+                g = g + stepG;
+                b = b + stepB;
+
+                /////////////////////////////////
+                auxLegend.addSymbol(interval, theSymbol);
+                numSymbols++;
+
+                if (numSymbols > 100) {
+                    int resp = JOptionPane.showConfirmDialog(this,
+                            PluginServices.getText(this, "mas_de_100_simbolos"),
+                            PluginServices.getText(this, "quiere_continuar"),
+                            JOptionPane.YES_NO_OPTION,
+                            JOptionPane.WARNING_MESSAGE);
+
+                    if ((resp == JOptionPane.NO_OPTION) ||
+                            (resp == JOptionPane.DEFAULT_OPTION)) {
+                        return;
+                    }
+                }
+
+                // }
+            } // for
+
+          symbolTable.fillTableFromSymbolList(auxLegend.getSymbols(),
+          auxLegend.getValues(), auxLegend.getDescriptions());
+
+        } catch (DataException e) {
+        	NotificationManager.addError(PluginServices.getText(this, "could_not_get_shape_type"), e);
+        } catch (LegendLayerException e) {
+        	NotificationManager.addError(PluginServices.getText(this, "failed_computing_intervals"), e);
+		}
+
+        bDelAll.setEnabled(true);
+        bDel.setEnabled(true);
+    }
+
+    protected IInterval[] calculateIntervals() throws LegendLayerException {
+    	int intervalCount = 1;
+    	// ensure the interval value is an integer greather than 0
+    	try {
+    		intervalCount = (int) Double.
+    				parseDouble(txtNumIntervals.getText());
+    		if (intervalCount<1) {
+    			throw new Exception();
+    		}
+    	} catch (Exception e) {
+    		JOptionPane.showMessageDialog(this,
+    				PluginServices.getText(this, "invalid_interval_count_value"));
+    		return null;
+    	}
+
+    	try {
+            auxLegend.setIntervalType(getCmbIntervalTypes().getSelectedIndex());
+
+    		return auxLegend.calculateIntervals(
+    		//return theLegend.calculateIntervals(
+    				((FLyrVect) layer).getFeatureStore(),
+    				(String) cmbField.getSelectedItem(),
+    				intervalCount,
+    				layer.getShapeType()
+    				);
+    	} catch (DataException e) {
+    		return null;
+    	}
+    }
+
+    public void setData(FLayer layer, ILegend legend) {
+        this.layer = (ClassifiableVectorial) layer;
+    	int shapeType = 0;
+    	try {
+    		shapeType = this.layer.getShapeType();
+    	} catch (DataException e) {
+    		NotificationManager.addError(PluginServices.getText(this, "generating_intervals"), e);
+    	}
+
+    	if (symbolTable != null) {
+			pnlCenter.remove(symbolTable);
+		}
+
+    	getDefaultSymbolPrev(shapeType);
+
+    	symbolTable = new SymbolTable(this, SymbolTable.INTERVALS_TYPE, shapeType);
+    	pnlCenter.add(symbolTable);
+        fillFieldNames();
+
+/*        if (legend instanceof VectorialIntervalLegend) {
+            theLegend = (VectorialIntervalLegend) legend;
+            getChkDefaultvalues().setSelected(theLegend.isUseDefaultSymbol());
+            cmbField.getModel().setSelectedItem(theLegend.getClassifyingFieldNames()[0]);
+            symbolTable.fillTableFromSymbolList(theLegend.getSymbols(),
+                theLegend.getValues(), theLegend.getDescriptions());
+            colorChooserPanel.setColor(theLegend.getStartColor());
+            colorChooserPanel1.setColor(theLegend.getEndColor());
+            colorChooserPanel.repaint();
+            colorChooserPanel1.repaint();
+        } else {
+        		// Si la capa viene con otro tipo de leyenda, creamos
+        		// una nueva del tipo que maneja este panel
+        		theLegend = new VectorialIntervalLegend();
+        		theLegend.setShapeType(shapeType);
+        }
+
+
+        cmbFieldType.setSelectedIndex(theLegend.getIntervalType());
+*/
+		if (VectorialIntervalLegend.class.equals(legend.getClass())) {
+			auxLegend = (VectorialIntervalLegend) legend.cloneLegend();
+			chkdefaultvalues.setSelected(auxLegend.isUseDefaultSymbol());
+			cmbField.getModel().setSelectedItem(auxLegend.getClassifyingFieldNames()[0]);
+			
+			//Patch to fix an array overflow 
+            Object[] auxValues = auxLegend.getValues();
+            List<ISymbol> symbols = new ArrayList();
+            List<Object> values = new ArrayList();
+            List<String> descriptions = new ArrayList();
+            
+            for( int i=0; i<auxValues.length; i++){
+                Object key = auxValues[i];
+                if (key!=null){
+                    IInterval auxInterval = null;
+                    if (key instanceof IInterval){
+                        auxInterval = (IInterval) key;
+                        ISymbol symbol = auxLegend.getSymbolByInterval(auxInterval);
+                        symbols.add(symbol);
+                        values.add(auxValues[i]);
+                        descriptions.add(symbol.getDescription());
+                    }
+                }
+            }
+            symbolTable.fillTableFromSymbolList(
+                symbols.toArray(new ISymbol[0]),
+                values.toArray(),
+                descriptions.toArray(new String[0]));
+            //End Patch
+
+			colorChooserPanel.setColor(auxLegend.getStartColor());
+			colorChooserPanel1.setColor(auxLegend.getEndColor());
+			colorChooserPanel.repaint();
+			colorChooserPanel1.repaint();
+			if(auxLegend.isUseDefaultSymbol()) {
+				txtNumIntervals.setText(String.valueOf(auxLegend.getSymbols().length - 1));
+			} else {
+				txtNumIntervals.setText(String.valueOf(auxLegend.getSymbols().length));
+			}
+		} else {
+			// Si la capa viene con otro tipo de leyenda, creamos
+			// una nueva del tipo que maneja este panel
+			auxLegend = new VectorialIntervalLegend();
+			auxLegend.setShapeType(shapeType);
+			auxLegend.useDefaultSymbol(false);
+		}
+		defaultSymbolPrev.setSymbol(auxLegend.getDefaultSymbol());
+		cmbIntervalType.setSelectedIndex(auxLegend.getIntervalType());
+    }
+
+
+	public void getDefaultSymbolPrev(int shapeType) {
+		if(defaultSymbolPrev == null){
+		defaultSymbolPrev = new JSymbolPreviewButton(shapeType);
+		defaultSymbolPrev.setPreferredSize(new Dimension(110,20));
+		defaultSymbolPanel.add(defaultSymbolPrev,null);
+		}
+	}
+
+    protected void fillFieldNames() {
+        FeatureStore rs = null;
+        ArrayList<String> nomFields = null;
+
+        try {
+            rs = ((FLyrVect) layer).getFeatureStore();
+//            logger.debug("rs.start()");
+//            rs.start();
+
+            nomFields = new ArrayList<String>();
+
+            int type;
+            Iterator<FeatureAttributeDescriptor> iterator=rs.getDefaultFeatureType().iterator();
+            while (iterator.hasNext()) {
+				FeatureAttributeDescriptor descriptor = iterator.next();
+
+//			}
+//            for (int i = 0; i < rs.getFieldCount(); i++) {
+                type = descriptor.getType();//rs.getFieldType(i);
+
+//                if (type.equals(FeatureAttributeDescriptor.) == Types.NULL) {
+//                    continue;
+//                }
+
+                if (type == DataTypes.INT ||
+                		type == DataTypes.DOUBLE ||
+                		type == DataTypes.FLOAT ||
+                		type  == DataTypes.LONG)
+                {
+                	nomFields.add(descriptor.getName());
+                }
+            }
+
+//            rs.stop();
+        } catch (DataException e) {
+        	NotificationManager.addError(PluginServices.getText(this, "recovering_recordset"), e);
+        }
+
+        DefaultComboBoxModel cM = new DefaultComboBoxModel(nomFields.toArray());
+        cmbField.setModel(cM);
+
+        symbolTable.removeAllItems();
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.gui.legendmanager.panels.ILegendPanel#getLegend()
+     */
+     public ILegend getLegend() {
+		fillSymbolListFromTable();
+		if(defaultSymbolPrev.getSymbol() != null) {
+			auxLegend.setDefaultSymbol(defaultSymbolPrev.getSymbol());
+		}
+
+		auxLegend.useDefaultSymbol(chkdefaultvalues.isSelected());
+		auxLegend.setIntervalType(cmbIntervalType.getSelectedIndex());
+		
+
+		theLegend = (VectorialIntervalLegend) auxLegend.cloneLegend();
+		return theLegend;
+	}
+
+    /**
+     * A partir de los registros de la tabla, regenera el FRenderer. (No solo
+     * el symbolList, si no tambi�n el arrayKeys y el defaultRenderer
+     */
+
+    private void fillSymbolListFromTable() {
+		ISymbol theSymbol;
+		IInterval theInterval = null;
+
+		// Borramos las anteriores listas:
+		auxLegend.clear();
+
+		String fieldName = (String) cmbField.getSelectedItem();
+		auxLegend.setClassifyingFieldNames(new String[] {fieldName});
+
+		ISymbol defsym = null;
+        if (chkdefaultvalues.isSelected() && defaultSymbolPrev.getSymbol() != null) {
+            defsym = (ISymbol) defaultSymbolPrev.getSymbol();
+            String description = PluginServices.getText(this,"default");
+            defsym.setDescription(description);
+            auxLegend.setDefaultSymbol(defsym);
+            auxLegend.useDefaultSymbol(true);
+        } else {
+            
+            auxLegend.useDefaultSymbol(false);
+        }
+
+		FeatureStore rs;
+		try {
+
+			rs = ((FLyrVect) layer).getFeatureStore();
+			FeatureType featureType=rs.getDefaultFeatureType();
+			auxLegend
+					.setClassifyingFieldTypes(new int[] { new Integer(
+							featureType.getAttributeDescriptor(fieldName)
+									.getType()) });
+
+		} catch (DataException e) {
+			NotificationManager.addError(PluginServices.getText(this, "recovering_recordset"), e);
+		}
+
+
+
+		for (int row = 0; row < symbolTable.getRowCount(); row++) {
+			if (symbolTable.getFieldValue(row, 1) instanceof FInterval) {
+				theInterval = (IInterval) symbolTable.getFieldValue(row, 1);
+				theSymbol = (ISymbol) symbolTable.getFieldValue(row, 0);
+				theSymbol.setDescription((String) symbolTable.getFieldValue(
+						row, 2));
+				auxLegend.addSymbol(theInterval, theSymbol);
+			}
+		}
+		
+		if (auxLegend.isUseDefaultSymbol()) {
+		    theSymbol = auxLegend.getDefaultSymbol();
+		    auxLegend.addSymbol(theSymbol.getDescription(), theSymbol);
+		}
+		
+	}
+
+    /**
+     * This method initializes panelC
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlCenter() {
+        if (pnlCenter == null) {
+            pnlCenter = new JPanel();
+        }
+
+        return pnlCenter;
+    }
+
+    /**
+     * Listener.
+     *
+     * @author Vicente Caballero Navarro
+     */
+    class MyListener implements ActionListener {
+
+       public void actionPerformed(ActionEvent e) {
+            // System.out.println("ActionEvent con " + e.getActionCommand());
+
+            //modificar el combobox de valor
+            if (e.getActionCommand() == "FIELD_SELECTED") {
+                JComboBox cb = (JComboBox) e.getSource();
+                String fieldName = (String) cb.getSelectedItem();
+                // System.out.println("Nombre del campo: " + fieldName);
+                symbolTable.removeAllItems();
+
+                //theLegend.setClassifyingFieldNames(new String[] {fieldName});
+                auxLegend.setClassifyingFieldNames(new String[] {fieldName});
+            } else if (e.getActionCommand() == "INTERVAL_TYPE") {
+                JComboBox cb = (JComboBox) e.getSource();
+
+                //if ((theLegend != null) &&
+                if ((auxLegend != null) &&
+                    //    (cb.getSelectedIndex() != theLegend.getIntervalType())) {
+                        (cb.getSelectedIndex() != auxLegend.getIntervalType())) {
+                    //theLegend.setIntervalType(cb.getSelectedIndex());
+                    auxLegend.setIntervalType(cb.getSelectedIndex());
+                    symbolTable.removeAllItems();
+                }
+            }
+
+            //A�adir todos los elementos por valor
+            if (e.getActionCommand() == "ADD_ALL_VALUES") {
+                fillTableValues();
+            }
+
+            //A�adir un �nico elemento
+            if (e.getActionCommand() == "ADD_VALUE") {
+                try {
+                    symbolTable.addTableRecord(
+							mapContextManager.getSymbolManager().createSymbol(
+									layer.getShapeType()),
+                    		new FInterval(0, 0),
+                    		"0 - 0");
+                } catch (DataException e1) {
+                	NotificationManager.addError(PluginServices.getText(this, "could_not_get_shape_type"), e1);
+                }
+
+            }
+
+            //Vacia la tabla
+            if (e.getActionCommand() == "REMOVE_ALL") {
+                symbolTable.removeAllItems();
+
+            }
+
+            //Quitar solo el elemento seleccionado
+            if (e.getActionCommand() == "REMOVE") {
+                symbolTable.removeSelectedRows();
+            }
+        }
+    }
+
+    public String getDescription() {
+        return PluginServices.getText(this,"Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos") + ".";
+    }
+
+    public ImageIcon getIcon() {
+        return IconThemeHelper.getImageIcon(
+            "legend-overview-vectorial-interval");
+    }
+
+    public Class getParentClass() {
+        return Quantities.class;
+    }
+
+    public String getTitle() {
+        return PluginServices.getText(this,"Intervalos");
+    }
+
+    public JPanel getPanel() {
+        return this;
+    }
+
+    public Class getLegendClass() {
+        return VectorialIntervalLegend.class;
+    }
+
+    private boolean isNumericField(int fieldType) {
+		if (fieldType == DataTypes.DOUBLE || fieldType == DataTypes.FLOAT
+				|| fieldType == DataTypes.LONG || fieldType == DataTypes.INT) {
+			return true;
+		}else{
+			return false;
+		}
+//    	switch (fieldType) {
+//		case Types.BIGINT:
+//		case Types.DECIMAL:
+//		case Types.DOUBLE:
+//		case Types.FLOAT:
+//		case Types.INTEGER:
+//		case Types.NUMERIC:
+//		case Types.REAL:
+//		case Types.SMALLINT:
+//		case Types.TINYINT:
+//			return true;
+//		default:
+//			return false;
+//		}
+
+	}
+	public boolean isSuitableFor(FLayer layer) {
+		if (layer instanceof FLyrVect) {
+			FeatureStore sds;
+			try {
+				sds = ((FLyrVect) layer).getFeatureStore();
+				FeatureType featureType=sds.getDefaultFeatureType();
+				Iterator iterator=featureType.iterator();
+				while (iterator.hasNext()) {
+					FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) iterator.next();
+
+//				}
+//				String[] fNames = sds.getFieldNames();
+//				for (int i = 0; i < fNames.length; i++) {
+					if (descriptor.getDataType().isNumeric() ) {
+						return true;
+					}
+				}
+			} catch (DataException e) {
+				return false;
+			}
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialInterval.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractParentPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractParentPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractParentPanel.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: AbstractParentPanel.java 29598 2009-06-29 16:09:14Z jpiera $
+* $Log$
+* Revision 1.3  2007-05-10 09:46:45  jaume
+* Refactored legend interface names
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.3  2007/02/21 07:35:14  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.2  2007/02/09 11:00:03  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+
+
+public abstract class AbstractParentPanel implements ILegendPanel {
+
+	public final void setData(FLayer lyr, ILegend legend) {}
+
+	public final ILegend getLegend() {
+		return null;
+	}
+
+	public final ImageIcon getIcon() {
+		return null;
+	}
+
+	public Class getParentClass() {
+		return null;
+	}
+
+	public final JPanel getPanel() {
+		return null;
+	}
+
+	public Class getLegendClass() {
+		return null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractParentPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindowNew.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindowNew.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindowNew.java	(revision 42196)
@@ -0,0 +1,306 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import javax.swing.JComponent;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public final class ThemeManagerWindowNew extends JPanel implements IWindow, ActionListener {
+	private static final Logger logger = LoggerFactory.getLogger(ThemeManagerWindow.class);
+			
+	private static final long serialVersionUID = 4650656815369149211L;
+	private static int selectedTabIndex = 0;
+	private static ArrayList<Class<? extends AbstractThemeManagerPage>> pages =
+			new ArrayList<Class<? extends AbstractThemeManagerPage>>();
+	private FLayer layer;
+	//private Legend legend; // Le asignaremos la leyenda del primer tema activo.
+	private JTabbedPane tabs = new JTabbedPane();  //  @jve:decl-index=0:
+	private JPanel panelButtons;
+	private static Hashtable<Class<? extends AbstractThemeManagerPage>, ArrayList<Class<? extends FLayer>>> s =
+		new Hashtable<Class<? extends AbstractThemeManagerPage>, ArrayList<Class<? extends FLayer>>>();
+
+
+	/**
+	 * Sobrecarga del constructor. Este se utiliza cuando se llama a este
+	 * di�logo desde la barra de comandos.
+	 *
+	 */
+	public ThemeManagerWindowNew(FLayer l) {
+		this.layer = l;
+
+		// TODO falta definir leyenda para cualquier tipo de capa
+		// y decidir entonces qu� opciones soporta cada una para
+		// que el di�logo se autorrellene
+		initialize();
+	}
+
+	private  void initialize() {
+		StringBuffer msgerr = new StringBuffer(); 
+		for (int i = 0; i < pages.size(); i++) {
+			Class<? extends AbstractThemeManagerPage> pageClass = pages.get(i);
+			AbstractThemeManagerPage tab = null;
+			try {
+				tab = pageClass.newInstance();
+			} catch (Exception e) {
+				msgerr.append(translate("_Cant_add_property_page_related_to_{0}", pageClass.getName()))
+					.append("\n");
+				logger.info("Can't instance propety page from class "+pageClass.getName(),e);
+				continue;
+			}
+			if (tab!=null){
+                            if( tab.isTabEnabledForLayer(layer) ) {
+			    	String tabName = null;
+			    	try {
+			    		tab.setModel(layer);
+			    		tabName = tab.getName();
+			    	} catch( Throwable ex) {
+						msgerr.append(translate("_Cant_initialice_property_page_{0}", tabName))
+							.append("\n");
+			    		logger.info("Can't set model of property page '"+tabName+"' from class '"+pageClass.getName()+"'.");
+			    	}
+			        tabs.addTab(tabName, tab);
+			    }
+			}
+		}
+
+		if (tabs.getComponentCount()>selectedTabIndex) {
+			tabs.setSelectedIndex(selectedTabIndex);
+		}
+		tabs.setPreferredSize(new java.awt.Dimension(640,390));
+
+
+		setLayout(new BorderLayout());
+		add(tabs, java.awt.BorderLayout.CENTER);
+
+		// The listener must be added after the tabs are added to the window
+		tabs.addChangeListener(new ChangeListener() {
+			public void stateChanged(javax.swing.event.ChangeEvent e) {
+				//remember the visible tab
+				selectedTabIndex = tabs.getSelectedIndex();
+				if (selectedTabIndex<0) {
+					selectedTabIndex = 0;
+				}
+			};
+		});
+		add(getPanelButtons(), java.awt.BorderLayout.SOUTH);
+		setSize(new Dimension(780, 540));
+		if( msgerr.length()>0 ) {
+			PluginServices.getMainFrame().messageDialog(msgerr.toString(), "_Warning", JOptionPane.WARNING_MESSAGE);
+		}
+	}
+
+	private String translate(String msg, String arg1) {
+		String[] args = null;
+		String translation = null;
+        if (msg == null) {
+            return "";
+        }
+        if( arg1 != null ) {
+        	args = new String[] { arg1 };
+        }
+        translation = org.gvsig.i18n.Messages.getText(msg, args);
+        if (translation == null) {
+        	return "_"+msg.replace("_", " ");
+        }
+        return translation;
+	}
+	
+	private JPanel getPanelButtons() {
+		if (panelButtons == null) {
+			panelButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5,5));
+
+			JButton btnAceptar = new JButton(PluginServices.getText(this,"Aceptar"));
+			btnAceptar.setActionCommand("OK");
+			btnAceptar.addActionListener(this);
+
+			JButton btnApply = new JButton(PluginServices.getText(this,"Apply"));
+			btnApply.setActionCommand("APPLY");
+			btnApply.addActionListener(this);
+
+
+			JButton btnCancelar = new JButton(PluginServices.getText(this,"Cerrar"));
+			btnCancelar.setActionCommand("CANCEL");
+			btnCancelar.addActionListener(this);
+			panelButtons.setPreferredSize(new java.awt.Dimension(493,33));
+			panelButtons.add(btnCancelar);
+			panelButtons.add(btnApply);
+			panelButtons.add(btnAceptar);
+		}
+		return panelButtons;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getActionCommand() == "OK") {
+			/* Causes all the tabs in the ThemeManagerWindow to perform THEIR apply-action
+			 * then fires the LegendChanged event that causes the view to be refreshed.
+			 * After that, it closes the window.
+			 */
+			actionPerformed(new ActionEvent(e.getSource(), e.getID(), "APPLY"));
+
+			close();
+		} else if (e.getActionCommand() == "CANCEL") {
+			/* Causes all the tabs in the ThemeManagerWindow to perform THEIR cancel-action
+			 * then closes the window.
+			 */
+			for (int i = 0; i < tabs.getTabCount(); i++) {
+				AbstractThemeManagerPage tab = (AbstractThemeManagerPage) tabs.getComponentAt(i);
+				tab.cancelAction();
+			}
+			close();
+		} else if (e.getActionCommand() == "APPLY") {
+			/* Causes the current visible tab in the ThemeManagerWindow to perform
+			 * ITS specific apply-action.
+			 */
+			for (int i = 0; i < tabs.getTabCount(); i++) {
+				AbstractThemeManagerPage tab = (AbstractThemeManagerPage) tabs.getComponentAt(i);
+				tab.applyAction();
+			}
+			layer.getMapContext().callLegendChanged();
+		} else {}
+//		 Lots of temporary objects were create.
+		// let's try some memory cleanup
+		System.gc();
+	}
+
+	private void close() {
+		PluginServices.getMDIManager().closeWindow(this);
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo viewInfo = new WindowInfo(WindowInfo.MODELESSDIALOG|WindowInfo.RESIZABLE);
+		viewInfo.setWidth(getWidth());
+		viewInfo.setHeight(getHeight());
+		viewInfo.setTitle(PluginServices.getText(this,"propiedades_de_la_capa"));
+		return viewInfo;
+	}
+
+        private static class AbstractThemeManagerPageAdapter implements PropertiesPage, PropertiesPageFactory {
+
+            AbstractThemeManagerPage x;
+            
+            AbstractThemeManagerPageAdapter(AbstractThemeManagerPage x) {
+                this.x = x;
+            }
+            
+            public String getTitle() {
+                return this.x.getName();
+            }
+
+            public int getPriority() {
+                return 100;
+            }
+
+            public boolean whenAccept() {
+                this.x.acceptAction();
+                return true;
+            }
+
+            public boolean whenApply() {
+                this.x.applyAction();
+                return true;
+            }
+
+            public boolean whenCancel() {
+                this.x.cancelAction();
+                return true;
+            }
+
+            public JComponent asJComponent() {
+                return this.x;
+            }
+
+            public String getGroupID() {
+                return "Layer";
+            }
+
+            public boolean isVisible(Object obj) {
+                return this.x.isTabEnabledForLayer((FLayer)obj);
+            }
+
+            public PropertiesPage create(Object obj) {
+                this.x.setModel((FLayer)obj);
+                return this;
+            }
+
+        }
+        
+	public static void addPage(Class<? extends AbstractThemeManagerPage> abstractThemeManagerPageClass) {
+            
+		pages.add(abstractThemeManagerPageClass);
+	}
+
+	public static void setTabEnabledForLayer(Class<? extends AbstractThemeManagerPage> abstractThemeManagerPageClass, Class<? extends FLayer> fLayerClazz, boolean enabled) {
+		ArrayList<Class<? extends FLayer>> enabledLayers;
+		if (enabled == true) {
+			if (!s.containsKey(abstractThemeManagerPageClass)) {
+				enabledLayers = new ArrayList<Class<? extends FLayer>> ();
+				enabledLayers.add(fLayerClazz);
+				s.put(abstractThemeManagerPageClass, enabledLayers);
+			} else {
+				enabledLayers = s.get(abstractThemeManagerPageClass);
+				enabledLayers.add(fLayerClazz);
+			}
+		} else {
+			if (!s.containsKey(abstractThemeManagerPageClass)) {
+				return;
+			}
+				enabledLayers = s.get(abstractThemeManagerPageClass);
+			enabledLayers.remove(fLayerClazz);
+		}
+	};
+
+        public static boolean isTabEnabledForLayer(AbstractThemeManagerPage page, FLayer layer) {
+            try {
+                return s.get(page.getClass()).contains(layer.getClass());            
+            } catch( Exception ex) {
+                return false;
+            }
+        }
+        
+        public Object getWindowProfile() {
+		return WindowInfo.TOOL_PROFILE;
+	};
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindowNew.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/MultipleAttributes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/MultipleAttributes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/MultipleAttributes.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+public class MultipleAttributes extends AbstractParentPanel {
+
+	public String getDescription() {
+		return null;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "multiple_atributes");
+	}
+
+	public boolean isSuitableFor(FLayer layer) {
+		return layer instanceof FLyrVect;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/MultipleAttributes.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendFileFilter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendFileFilter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendFileFilter.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+/**
+ * Utility class to deal with legend files (sld, gvsleg, etc)
+ */
+public class LegendFileFilter extends FileFilter {
+
+    private String fileExt = "";
+    private String description = "";
+    
+    public LegendFileFilter(String ext, String desc) {
+        fileExt = ext.toLowerCase();
+        description = desc;
+    }
+    
+    public LegendFileFilter(String ext) {
+        fileExt = ext.toLowerCase();
+        description = ext.toUpperCase() + " format for legends (*."
+            + ext.toLowerCase() + ")";
+    }
+    
+    public String getFileExtension() {
+        return fileExt;
+    }
+    
+    public boolean accept(File pathname) {
+        if (pathname.isDirectory()) {
+            return true;
+        } else {
+            return pathname.getAbsolutePath().toLowerCase().endsWith("." + fileExt);
+        }
+    }
+    
+
+    public String getDescription() {
+        return description;
+    }
+    
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AttrInTableLabeling.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AttrInTableLabeling.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AttrInTableLabeling.java	(revision 42196)
@@ -0,0 +1,527 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.JComboBoxUnits;
+import org.gvsig.app.gui.panels.ColorChooserPanel;
+import org.gvsig.app.gui.styling.JComboBoxUnitsReferenceSystem;
+import org.gvsig.app.gui.utils.FontChooser;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.AttrInTableLabelingStrategy;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.IAttrInTableLabelingStrategy;
+import org.gvsig.utils.swing.JComboBox;
+
+
+public class AttrInTableLabeling extends JPanel implements  ILabelingStrategyPanel{
+	private static final long serialVersionUID = 8229927418031917075L;
+	private static final String NO_FIELD_ITEM = "-- " +
+			PluginServices.getText(LabelingManager.class, "none") + " --";
+	private String[] fieldNames;
+	private String[] numericFieldNames;
+	private String[] integerFieldNames;
+
+	private JRadioButton rdBtnFixedHeight;
+	private JRadioButton rdBtnHeightField;
+	private JRadioButton rdBtnFixedColor;
+	private JRadioButton rdBtnColorField;
+	private JComboBox cmbTextField;
+	private JComboBox cmbHeightField;
+	private JComboBox cmbRotationField;
+	private JComboBoxUnits cmbUnits;
+	private JComboBoxUnitsReferenceSystem cmbReferenceSystem;
+	private JTextField txtHeightField;
+	private FLyrVect layer;
+
+	private ColorChooserPanel colorChooser;
+	private JComboBox cmbColorField;
+	private JButton chooseFontBut;
+	private Font labelFont;
+
+	public AttrInTableLabeling() {
+		labelFont =
+				MapContextLocator.getSymbolManager()
+						.getSymbolPreferences()
+						.getDefaultSymbolFont();
+		initialize();
+	}
+
+	private void initialize() {
+		setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
+		GridBagLayoutPanel panel = new GridBagLayoutPanel();
+
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+		aux.addComponent(PluginServices.getText(this, "_Field_to_use_in_label") + ":", getCmbTextField());
+		aux.addComponent(getRdBtnHeightField(), getCmbHeightField());
+		aux.addComponent(getRdBtnFixedHeight(), getTxtHeightField());
+		aux.addComponent(PluginServices.getText(this, "rotation_height") + ":", getCmbRotationField());
+		aux.addComponent(PluginServices.getText(this, "units") + ":", getCmbUnits());
+		aux.addComponent(PluginServices.getText(this,"reference_system"),getCmbReferenceSystem());
+		panel.add(aux);
+
+		aux = new GridBagLayoutPanel();
+		aux.addComponent(getChooseFontBut(),new JBlank(20,20));
+		GridBagLayoutPanel aux2 = new GridBagLayoutPanel();
+		aux2.setBorder(BorderFactory.createTitledBorder(null,PluginServices.getText(this,"color")));
+		aux2.addComponent(getRdBtnFixedColor(),colorChooser = new ColorChooserPanel(true));
+		aux2.addComponent(getRdBtnColorField(),getCmbColorField());
+		aux.addComponent(aux2);
+
+		panel.add(new JBlank(20,20));
+		panel.add(aux);
+
+
+		add(panel);
+
+
+		ButtonGroup group = new ButtonGroup();
+		group.add(getRdBtnFixedHeight());
+		group.add(getRdBtnHeightField());
+
+		ButtonGroup colorGroup = new ButtonGroup();
+		colorGroup.add(getRdBtnFixedColor());
+		colorGroup.add(getRdBtnColorField());
+
+//		getRdBtnHeightField().setEnabled(true);
+	}
+
+	private JButton getChooseFontBut() {
+		if(chooseFontBut == null){
+			chooseFontBut = new JButton(PluginServices.getText(this,"font"));
+			chooseFontBut.setPreferredSize(new Dimension(80,10));
+			chooseFontBut.addActionListener(new ActionListener(){
+
+				public void actionPerformed(ActionEvent e) {
+					Font newFont;
+
+					newFont = FontChooser.showDialog("Choose Font", labelFont);
+					if (newFont == null) {
+						return;
+					}
+
+					labelFont = newFont;
+				}
+
+			});
+		}
+		return chooseFontBut;
+	}
+
+	private JRadioButton getRdBtnFixedHeight() {
+		if (rdBtnFixedHeight == null) {
+			rdBtnFixedHeight = new JRadioButton(PluginServices.getText(this, "fixed_height") + ":");
+			rdBtnFixedHeight.setSelected(true);
+			rdBtnFixedHeight.setName("RDFIXEDHEIGHT");
+		}
+
+		return rdBtnFixedHeight;
+	}
+
+	private JRadioButton getRdBtnHeightField() {
+		if (rdBtnHeightField == null) {
+			rdBtnHeightField = new JRadioButton(PluginServices.getText(this, "text_height_field") + ":");
+			rdBtnHeightField.setSelected(false);
+			rdBtnHeightField.setName("RDHEIGHTFIELD");
+		}
+
+		return rdBtnHeightField;
+	}
+
+	private JRadioButton getRdBtnFixedColor() {
+		if (rdBtnFixedColor == null) {
+			rdBtnFixedColor = new JRadioButton(PluginServices.getText(this, "_Fixed_color") + ":");
+			rdBtnFixedColor.setSelected(true);
+			rdBtnFixedColor.setName("RDFIXEDCOLOR");
+		}
+
+		return rdBtnFixedColor;
+	}
+
+	private JRadioButton getRdBtnColorField() {
+		if (rdBtnColorField == null) {
+			rdBtnColorField = new JRadioButton(PluginServices.getText(this, "color_field") + ":");
+			rdBtnColorField.setSelected(false);
+			rdBtnColorField.setName("RDCOLORFIELD");
+		}
+
+		return rdBtnColorField;
+	}
+
+	private JComboBoxUnits getCmbUnits() {
+		if (cmbUnits == null) {
+			cmbUnits = new JComboBoxUnits(true);
+			cmbUnits.setName("CMBUNITS");
+		}
+
+		return cmbUnits;
+	}
+
+	private JComboBoxUnitsReferenceSystem getCmbReferenceSystem(){
+		if(cmbReferenceSystem == null){
+			cmbReferenceSystem = new JComboBoxUnitsReferenceSystem();
+			cmbReferenceSystem.setSelectedIndex(0);
+			cmbReferenceSystem.setName("CMBREFSYST");
+		}
+		return cmbReferenceSystem;
+	}
+
+	private JComboBox getCmbColorField() {
+		if (cmbColorField == null) {
+			cmbColorField = new JComboBox();
+			cmbColorField.setName("CMBCOLOR");
+		}
+
+		return cmbColorField;
+	}
+
+	private void refreshControls() {
+		// When the attributes are in the table -----
+		//      field with the text
+		refreshCmbTextField();
+
+		//      field with the rotation
+		refreshCmbRotationField();
+
+		//      field with the text height or the text size
+		refreshTextHeight();
+
+		//		the text size unit name
+		refreshCmbUnits();
+
+		refreshCmbRefSystem();
+		//		the font for the text
+		refreshFont();
+		//		the color for the font
+		refreshColorFont();
+	}
+
+	private JComboBox getCmbRotationField() {
+		if (cmbRotationField == null) {
+			cmbRotationField = new JComboBox();
+			cmbRotationField.setPreferredSize(new Dimension(200, 20));
+			cmbRotationField.setName("CMBROTATIONFIELD");
+		}
+		return cmbRotationField;
+	}
+
+	private JComboBox getCmbHeightField() {
+		if (cmbHeightField == null) {
+			cmbHeightField = new JComboBox();
+			cmbHeightField.setPreferredSize(new Dimension(200, 20));
+			cmbHeightField.setName("CMBHEIGHTFIELD");
+		}
+		return cmbHeightField;
+	}
+
+	private JComboBox getCmbTextField() {
+		if (cmbTextField == null) {
+			cmbTextField = new JComboBox();
+			cmbTextField.setPreferredSize(new Dimension(200, 20));
+			cmbTextField.setName("CMBTEXTFIELD");
+		}
+		return cmbTextField;
+	}
+
+
+	private JTextField getTxtHeightField() {
+		if (txtHeightField == null) {
+			txtHeightField = new JTextField(10);
+			txtHeightField.setText("10");
+			txtHeightField.setName("TXTHEIGHTFIELD");
+		}
+
+		return txtHeightField;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+	private ColorChooserPanel getColorChooser() {
+		if (colorChooser == null){
+			colorChooser = new ColorChooserPanel(true);
+		}
+		return colorChooser;
+	}
+
+	public ILabelingStrategy getLabelingStrategy() {
+		// user selected to define each label attributes from values
+		// contained in the table for each feature row.
+
+		double fixedSize;
+		try {
+			fixedSize = Double.parseDouble(getTxtHeightField().getText());
+		} catch (Exception e) {
+			fixedSize = 10;
+		}
+		AttrInTableLabelingStrategy strategy = new AttrInTableLabelingStrategy();
+		strategy.setLayer(layer);
+
+		if(getCmbHeightField().getItemCount() > 0 && !rdBtnFixedHeight.isSelected()) {
+			strategy.setHeightField(
+				(String) getCmbHeightField().getSelectedItem());
+		}
+		if(getCmbRotationField().getItemCount() > 0) {
+			if(!getCmbRotationField().getSelectedItem().equals(NO_FIELD_ITEM)) {
+				strategy.setRotationField(
+						(String) getCmbRotationField().getSelectedItem());
+			} else {
+				strategy.setRotationField(null);
+			}
+		}
+
+		if(getCmbTextField().getItemCount() > 0) {
+			strategy.setTextField(
+				(String) getCmbTextField().getSelectedItem());
+		}
+
+		strategy.setUsesFixedSize(getRdBtnFixedHeight().isSelected());
+		strategy.setFixedSize(fixedSize);
+
+		if(getCmbUnits().getItemCount() > 0) {
+			strategy.setUnit(getCmbUnits().getSelectedUnitIndex());
+		}
+		if(getCmbReferenceSystem().getItemCount() > 0) {
+			strategy.setReferenceSystem(getCmbReferenceSystem().getSelectedIndex());
+		}
+
+		strategy.setUsesFixedColor(getRdBtnFixedColor().isSelected());
+		strategy.setFixedColor(getColorChooser().getColor());
+
+		if(getCmbColorField().getItemCount() > 0 && !rdBtnFixedColor.isSelected()) {
+			strategy.setColorField((String) getCmbColorField().getSelectedItem());
+		}
+
+
+		strategy.setFont(labelFont);
+		return strategy;
+	}
+
+	public void setModel(FLayer layer, ILabelingStrategy str) {
+		this.layer = (FLyrVect) layer;
+		// to allow the labeling of non-FLyrVect layers
+		if (layer instanceof FLyrVect) {
+			FLyrVect lv = (FLyrVect) layer;
+			try {
+				FeatureType featureType = lv.getFeatureStore()
+						.getDefaultFeatureType();
+				fieldNames = new String[featureType.size()];
+				Iterator<FeatureAttributeDescriptor> iterator = featureType
+						.iterator();
+				ArrayList<String> l = new ArrayList<String>();
+				ArrayList<String> lColors = new ArrayList<String>();
+				String name;
+				FeatureAttributeDescriptor descriptor;
+				while (iterator.hasNext()) {
+					descriptor = iterator.next();
+
+					name = descriptor.getName();
+					fieldNames[descriptor.getIndex()] = name;
+					switch (descriptor.getType()) {
+//					case DataTypes.DECIMAL:
+//					case DataTypes.NUMERIC:
+					case DataTypes.FLOAT:
+//					case DataTypes.REAL:
+					case DataTypes.DOUBLE:
+						l.add(name);
+						break;
+					case DataTypes.INT:
+//					case DataTypes.SMALLINT:
+//					case DataTypes.TINYINT:
+					case DataTypes.LONG:
+						lColors.add(name);
+						l.add(name);
+						break;
+					}
+				}
+				numericFieldNames = l.toArray(new String[l.size()]);
+				integerFieldNames = lColors.toArray(new String[lColors.size()]);
+			} catch (DataException e) {
+				NotificationManager.addError(PluginServices.getText(this, "accessing_file_structure"), e);
+			}
+			refreshControls();
+		}
+	}
+
+	private void refreshColorFont(){
+
+		getCmbColorField().removeAllItems();
+
+		boolean enabled = integerFieldNames.length>0;
+		getCmbColorField().setEnabled(enabled);
+		getRdBtnColorField().setEnabled(enabled);
+
+		if (!enabled) {
+			getRdBtnFixedColor().setSelected(true);
+		}
+
+		for (int i = 0; i < integerFieldNames.length; i++) {
+			getCmbColorField().addItem(integerFieldNames[i]);
+		}
+
+		if (layer.getLabelingStrategy() instanceof AttrInTableLabelingStrategy) {
+			IAttrInTableLabelingStrategy aux = (IAttrInTableLabelingStrategy) layer.getLabelingStrategy();
+			getRdBtnFixedColor().setSelected(aux.usesFixedColor());
+			getRdBtnColorField().setSelected(!aux.usesFixedColor());
+
+			String item = aux.getColorField();
+			getCmbColorField().setSelectedItem(item);
+			getColorChooser().setColor(aux.getFixedColor());
+		}
+	}
+
+	private void refreshFont(){
+
+		if (layer.getLabelingStrategy() instanceof AttrInTableLabelingStrategy) {
+			IAttrInTableLabelingStrategy aux = (IAttrInTableLabelingStrategy) layer.getLabelingStrategy();
+			labelFont = aux.getFont();
+		}
+	}
+
+	private void refreshCmbUnits() {
+
+		if (layer.getLabelingStrategy() instanceof AttrInTableLabelingStrategy) {
+			AttrInTableLabelingStrategy aux = (AttrInTableLabelingStrategy) layer.getLabelingStrategy();
+			getCmbUnits().setSelectedUnitIndex(aux.getUnit());
+		}
+	}
+
+	private void refreshCmbRefSystem() {
+
+		if (layer.getLabelingStrategy() instanceof AttrInTableLabelingStrategy) {
+			AttrInTableLabelingStrategy aux = (AttrInTableLabelingStrategy) layer.getLabelingStrategy();
+			getCmbReferenceSystem().setSelectedIndex(aux.getReferenceSystem());
+		}
+	}
+
+	private void refreshTextHeight() {
+		getCmbHeightField().removeAllItems();
+
+		/*
+		boolean enabled = numericFieldNames.length>0;
+	    // getCmbHeightField().setEnabled(enabled);
+	    // getRdBtnHeightField().setEnabled(enabled);
+
+		if (!enabled) {
+			getRdBtnFixedHeight().setSelected(true);
+		}
+		*/
+
+		for (int i = 0; i < numericFieldNames.length; i++) {
+			getCmbHeightField().addItem(numericFieldNames[i]);
+		}
+
+		if (layer.getLabelingStrategy() instanceof AttrInTableLabelingStrategy) {
+			IAttrInTableLabelingStrategy aux = (IAttrInTableLabelingStrategy) layer.getLabelingStrategy();
+			getTxtHeightField().setText(String.valueOf(aux.getFixedSize()));
+			getRdBtnFixedHeight().setSelected(aux.usesFixedSize());
+			getRdBtnHeightField().setSelected(!aux.usesFixedSize());
+
+			String item = aux.getHeightField();
+			getCmbHeightField().setSelectedItem(item);
+
+		}
+
+	}
+
+	private void refreshCmbRotationField() {
+		getCmbRotationField().removeAllItems();
+		getCmbRotationField().addItem(NO_FIELD_ITEM);
+		for (int i = 0; i < numericFieldNames.length; i++) {
+			getCmbRotationField().addItem(numericFieldNames[i]);
+		}
+
+		if (layer.getLabelingStrategy() instanceof AttrInTableLabelingStrategy) {
+			IAttrInTableLabelingStrategy aux = (IAttrInTableLabelingStrategy) layer.getLabelingStrategy();
+			String item = aux.getRotationField();
+			getCmbRotationField().setSelectedItem(item != null? item : NO_FIELD_ITEM);
+		}
+	}
+
+	private void refreshCmbTextField() {
+		getCmbTextField().removeAllItems();
+		for (int i = 0; i < fieldNames.length; i++) {
+			getCmbTextField().addItem(fieldNames[i]);
+		}
+
+		if (layer.getLabelingStrategy() instanceof AttrInTableLabelingStrategy) {
+			IAttrInTableLabelingStrategy aux = (IAttrInTableLabelingStrategy) layer.getLabelingStrategy();
+			String item = aux.getTextField();
+			getCmbTextField().setSelectedItem(item != null? item : NO_FIELD_ITEM);
+		}
+	}
+
+	public String getLabelingStrategyName() {
+		return PluginServices.getText(this, "label_attributes_defined_in_table");
+	}
+
+	public Class getLabelingStrategyClass() {
+		return AttrInTableLabelingStrategy.class;
+	}
+
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		getChooseFontBut().setEnabled(enabled);
+		getCmbColorField().setEnabled(enabled);
+		getCmbHeightField().setEnabled(enabled);
+		getCmbReferenceSystem().setEnabled(enabled);
+		getCmbRotationField().setEnabled(enabled);
+		getCmbTextField().setEnabled(enabled);
+		getCmbUnits().setEnabled(enabled);
+		getColorChooser().setEnabled(enabled);
+		getRdBtnColorField().setEnabled(enabled);
+		getRdBtnFixedColor().setEnabled(enabled);
+		getRdBtnFixedHeight().setEnabled(enabled);
+		getRdBtnHeightField().setEnabled(enabled);
+		getTxtHeightField().setEnabled(enabled);
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AttrInTableLabeling.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SingleSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SingleSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SingleSymbol.java	(revision 42196)
@@ -0,0 +1,277 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.styling.SymbolLevelsWindow;
+import org.gvsig.app.gui.styling.SymbolPreviewer;
+import org.gvsig.app.gui.styling.SymbolSelector;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ZSort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.SingleSymbolLegend;
+
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SingleSymbol extends JPanel implements ILegendPanel, ActionListener {
+	private JPanel symbolPanel = null;
+	private int shapeType;
+	private GridBagLayoutPanel legendPanel = null;
+	private SymbolPreviewer symbolPreviewComponent;
+	private JButton btnOpenSymbolSelector;
+	private JTextField txtLabel;
+	private JButton btnOpenSymbolLevelsEditor;
+	private SingleSymbolLegend legend;
+	private ZSort zSort;
+
+
+	public SingleSymbol() {
+		super();
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(new java.awt.Dimension(320, 160));
+        this.add(getSymbolPanel(), BorderLayout.CENTER);
+        this.add(getLegendPanel(), BorderLayout.SOUTH);
+
+	}
+
+	public void setData(FLayer lyr, ILegend legend) {
+		try {
+			shapeType = ((FLyrVect) lyr).getShapeType();
+		} catch (ReadException e) {
+			NotificationManager.addError("Could not find out the shape type" ,e);
+		}
+		if (legend instanceof SingleSymbolLegend) {
+			setSymbol(legend.getDefaultSymbol());
+			this.legend = (SingleSymbolLegend) legend;
+
+		} else {
+			this.legend = (SingleSymbolLegend) MapContextLocator
+					.getMapContextManager().createLegend(
+							SingleSymbolLegend.LEGEND_NAME);
+			this.legend.setShapeType(shapeType);
+//			LegendFactory.
+//					createSingleSymbolLegend(shapeType);
+		}
+		getSymbolPreviewPanel().setSymbol(this.legend.getDefaultSymbol());
+		getBtnOpenSymbolLevelsEditor().setEnabled(legend!=null);
+		this.txtLabel.setText(legend.getDefaultSymbol().getDescription());
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.legendmanager.panels.ILegendPanel#getLegend()
+	 */
+	public ILegend getLegend() {
+		ISymbol symbol = getSymbolPreviewPanel().getSymbol();
+		symbol.setDescription(txtLabel.getText());
+		AbstractVectorialLegend leg = new SingleSymbolLegend();
+		leg.setShapeType(shapeType);
+		leg.setDefaultSymbol(symbol);
+		leg.setZSort(zSort);
+		return leg;
+	}
+
+	public String getDescription() {
+		return PluginServices.getText(this,"Muestra_todos_s_elementos_de_una_capa_usando_el_mismo_simbolo");
+	}
+
+	public Class getParentClass() {
+		return Features.class;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this,"Simbolo_unico");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public ImageIcon getIcon() {
+		return IconThemeHelper.getImageIcon("legend-overview-single-symbol");
+	}
+
+	public Class getLegendClass() {
+		return SingleSymbolLegend.class;
+	}
+	/**
+	 * This method initializes symbolPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getSymbolPanel() {
+		if (symbolPanel == null) {
+			symbolPanel = new JPanel(new BorderLayout());
+			symbolPanel.setBorder(
+					BorderFactory.createTitledBorder(null,
+					    Messages.getText("symbol"), TitledBorder.DEFAULT_JUSTIFICATION,
+					    TitledBorder.DEFAULT_POSITION, null, null));
+			
+			symbolPanel.add(
+			    putInPanel(getSymbolPreviewPanel()),
+			    BorderLayout.CENTER);
+			
+			JPanel bp = new JPanel(new BorderLayout());
+			bp.add(putInPanel(getBtnOpenSymbolSelector()), BorderLayout.CENTER);
+			bp.add(putInPanel(getBtnOpenSymbolLevelsEditor()), BorderLayout.SOUTH);
+			
+			symbolPanel.add(putInPanel(bp), BorderLayout.EAST);
+		}
+		return symbolPanel;
+	}
+	
+	private JPanel putInPanel(JComponent comp) {
+	    JPanel resp = new JPanel();
+	    resp.add(comp);
+	    return resp;
+	}
+
+	private JButton getBtnOpenSymbolLevelsEditor() {
+		if (btnOpenSymbolLevelsEditor == null) {
+			btnOpenSymbolLevelsEditor = new JButton(PluginServices.getText(this, "symbol_levels"));
+			btnOpenSymbolLevelsEditor.addActionListener(this);
+			btnOpenSymbolLevelsEditor.setEnabled(legend != null);
+		}
+
+		return btnOpenSymbolLevelsEditor;
+	}
+	private JButton getBtnOpenSymbolSelector() {
+		if (btnOpenSymbolSelector == null) {
+			btnOpenSymbolSelector = new JButton();
+			btnOpenSymbolSelector.setText(PluginServices.getText(this, "choose_symbol"));
+			btnOpenSymbolSelector.addActionListener(this);
+		}
+		return btnOpenSymbolSelector;
+	}
+
+	private SymbolPreviewer getSymbolPreviewPanel() {
+		if (symbolPreviewComponent == null) {
+			symbolPreviewComponent = new SymbolPreviewer();
+			symbolPreviewComponent.setBorder(BorderFactory.createBevelBorder(1));
+			symbolPreviewComponent.setPreferredSize(new Dimension(150, 75));
+		}
+		return symbolPreviewComponent;
+	}
+	/**
+	 * This method initializes legendPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private GridBagLayoutPanel getLegendPanel() {
+		if (legendPanel == null) {
+			legendPanel = new GridBagLayoutPanel();
+			legendPanel.setBorder(BorderFactory.createTitledBorder(null,
+					PluginServices.getText(this, "legend"), TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
+			legendPanel.addComponent(PluginServices.getText(this, "label_text_in_the_TOC") + ":", txtLabel = new JTextField(25));
+			txtLabel.addActionListener(this);
+		}
+		return legendPanel;
+	}
+
+	public void setShapeType(int shapeType) {
+		this.shapeType = shapeType;
+	}
+
+	public void setSymbol(ISymbol symbol) {
+		setOnlySymbol(symbol);
+		if(symbol.getDescription() != null) {
+			txtLabel.setText(symbol.getDescription());
+		}
+	}
+
+	private void setOnlySymbol(ISymbol symbol){
+		getSymbolPreviewPanel().setSymbol(symbol);
+		if (legend != null){
+			legend.setDefaultSymbol(symbol);
+		}
+	}
+
+
+	public ISymbol getSymbol() {
+		ISymbol symbol = getSymbolPreviewPanel().getSymbol();
+		symbol.setDescription(txtLabel.getText());
+		return symbol;
+	}
+	public boolean isSuitableFor(FLayer layer) {
+		return (layer instanceof FLyrVect) ;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		JComponent c = (JComponent) e.getSource();
+		if (c.equals(getBtnOpenSymbolSelector())){
+			ISymbolSelector se = SymbolSelector.createSymbolSelector(getSymbol(), shapeType);
+			PluginServices.getMDIManager().addWindow(se);
+			ISymbol sym = (ISymbol) se.getSelectedObject();
+			if (sym != null) {
+				// no symbol, no changes
+				setOnlySymbol(sym);
+			}
+		} else if (c.equals(getBtnOpenSymbolLevelsEditor())){
+			if (legend != null) {
+				ZSort myZSort = legend.getZSort();
+				if (myZSort == null) {
+					myZSort = new ZSort(legend);
+				}
+				SymbolLevelsWindow sl = new SymbolLevelsWindow(myZSort);
+				PluginServices.getMDIManager().addWindow(sl);
+				zSort = sl.getZSort();
+			}
+		}else if (c.equals(txtLabel)){
+			getSymbolPreviewPanel().getSymbol().setDescription(txtLabel.getText());
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SingleSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LabelingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LabelingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LabelingManager.java	(revision 42196)
@@ -0,0 +1,296 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TreeMap;
+
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+import org.gvsig.utils.swing.JComboBox;
+
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class LabelingManager extends AbstractThemeManagerPage implements ActionListener {
+	private static final long serialVersionUID = 856162295985695717L;
+//	private static ArrayList<Class<? extends ILabelingStrategyPanel>> installedPanels = new ArrayList<Class<? extends ILabelingStrategyPanel>>();
+	private Comparator<Class<?>> comparator=new Comparator<Class<?>>(){
+
+		public int compare(Class<?> o1, Class<?> o2) {
+			return o1.getSimpleName().compareTo(o2.getSimpleName());
+		}
+
+	};
+	private TreeMap<Class<?>, ILabelingStrategyPanel> strategyPanels =
+			new TreeMap<Class<?>, ILabelingStrategyPanel>(comparator);
+	
+	private JCheckBox chkApplyLabels;
+	private ILabelable layer;
+	private JPanel content;
+	private JPanel pnlNorth;
+	private JComboBox cmbStrategy;
+
+
+	public LabelingManager() {
+		super();
+		initialize();
+	}
+
+	private class LabelingStrategyItem {
+		private ILabelingStrategyPanel strategyPanel;
+
+		private LabelingStrategyItem(ILabelingStrategyPanel strategyPanel) {
+			this.strategyPanel = strategyPanel;
+		}
+
+		public String toString() {
+			return strategyPanel.getLabelingStrategyName();
+		}
+
+		public boolean equals(Object obj) {
+			if (obj instanceof LabelingStrategyItem) {
+				LabelingStrategyItem item = (LabelingStrategyItem) obj;
+				return this.strategyPanel.getClass().equals(item.strategyPanel.getClass());
+
+			}
+			return super.equals(obj);
+		}
+
+	}
+	
+	 @Override
+	    public int getPriority() {
+	    	return 600;
+	    }
+
+	private void initialize() {
+		setLayout(new BorderLayout());
+                SymbologySwingManager symbologySwingManager = SymbologySwingLocator.getSwingManager();
+    
+                Iterator<ILabelingStrategyPanel> it = symbologySwingManager.getLabelingEditors().iterator();
+                while( it.hasNext() ) {
+                    ILabelingStrategyPanel pnl = it.next();
+                    strategyPanels.put(pnl.getLabelingStrategyClass(), pnl);
+		}
+		content = new JPanel(new BorderLayout());
+		content.setBorder(BorderFactory.createEtchedBorder());
+		add(getPnlNorth(), BorderLayout.NORTH);
+		add(content, BorderLayout.SOUTH);
+
+	}
+
+	private JPanel getPnlNorth() {
+		if (pnlNorth == null) {
+			pnlNorth = new JPanel(new BorderLayout(5,5));
+			JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEFT));
+
+			aux.add(getChkApplyLabels());
+			pnlNorth.add(aux, BorderLayout.NORTH);
+			aux = new JPanel(new FlowLayout(FlowLayout.LEFT));
+			aux.add(new JLabel(PluginServices.getText(this, "general")+":"));
+			aux.add(getCmbStrategy());
+			pnlNorth.add(aux, BorderLayout.CENTER);
+
+		}
+		return pnlNorth;
+	}
+
+	private JComboBox getCmbStrategy() {
+		if (cmbStrategy == null) {
+			Iterator<ILabelingStrategyPanel> it = strategyPanels.values().iterator();
+			final ArrayList<LabelingStrategyItem> aux = new ArrayList<LabelingStrategyItem>();
+			while (it.hasNext()) {
+				aux.add(new LabelingStrategyItem(it.next()));
+			}
+			final LabelingStrategyItem items[] = aux.toArray(new LabelingStrategyItem[aux.size()]);
+
+			cmbStrategy = new JComboBox(items) {
+				private static final long serialVersionUID = 7506754097091500846L;
+
+				@Override
+				public void setSelectedItem(Object anObject) {
+					if (anObject == null)
+						return;
+					if (anObject instanceof ILabelingStrategy) {
+						ILabelingStrategy st = (ILabelingStrategy) anObject;
+						for (ILabelingStrategyPanel pnl : strategyPanels.values()) {
+							if (pnl.getLabelingStrategyClass() != null &&
+								pnl.getLabelingStrategyClass().equals(st.getClass())) {
+								super.setSelectedItem(new LabelingStrategyItem(pnl));
+								return;
+							}
+						}
+					} else {
+						super.setSelectedItem(anObject);
+					}
+				}
+			};
+
+			cmbStrategy.setName("CMBMODE");
+			cmbStrategy.addActionListener(this);
+		}
+
+		return cmbStrategy;
+	}
+
+	private JCheckBox getChkApplyLabels() {
+		if (chkApplyLabels == null) {
+			chkApplyLabels = new JCheckBox(PluginServices.getText(this, "enable_labeling"));
+			chkApplyLabels.setName("CHKAPPLYLABELS");
+			chkApplyLabels.addActionListener(this);
+		}
+		return chkApplyLabels;
+	}
+
+        /**
+         * 
+         * @deprecated use {#SymbolSwingManger.
+         */
+	public static void addLabelingStrategy(Class<? extends ILabelingStrategyPanel> iLabelingStrategyPanelClass) {
+            SymbologySwingManager symbologySwingManager = SymbologySwingLocator.getSwingManager();
+            symbologySwingManager.registerLabelingEditor(iLabelingStrategyPanelClass);
+	}
+
+	private void setComponentEnabled(Component c, boolean b) {
+		c.setEnabled(b);
+	}
+
+
+	public void setModel(FLayer layer) throws IllegalArgumentException {
+		if (layer instanceof ILabelable) {
+			// get the labeling strategy
+			this.layer = (ILabelable) layer;
+			for (ILabelingStrategyPanel p : strategyPanels.values()) {
+				p.setModel(layer,((ILabelable) layer).getLabelingStrategy() );
+			}
+
+			setComponentEnabled(this, true);
+			refreshControls();
+
+
+			ActionEvent evt = new ActionEvent(chkApplyLabels, 0, null);
+			evt.setSource(chkApplyLabels);
+			actionPerformed(evt);
+
+			getCmbStrategy().setSelectedItem(this.layer.getLabelingStrategy());
+			evt.setSource(getCmbStrategy());
+			actionPerformed(evt);
+		} else {
+			setComponentEnabled(this, false);
+		}
+	}
+
+
+
+	private void refreshControls() {
+		if (layer == null) return;
+
+		// enables labeling
+		JCheckBox applyLabels = getChkApplyLabels();
+		applyLabels.setSelected(layer.isLabeled());
+	}
+
+
+
+
+	public void actionPerformed(ActionEvent e) {
+		JComponent c = (JComponent)e.getSource();
+
+		if (c.equals(chkApplyLabels)) {
+			boolean b = chkApplyLabels.isSelected();
+			// enables/disables all components
+			getCmbStrategy().setEnabled(b);
+			for (int i = 0; i < content.getComponentCount(); i++) {
+				Component c1 = content.getComponent(i);
+				if (!c1.equals(c))
+					setComponentEnabled(c1, b);
+			}
+
+		} else if (c.equals(cmbStrategy)) {
+			if (c.equals(cmbStrategy)) {
+				ILabelingStrategyPanel panel = ((LabelingStrategyItem) cmbStrategy.getSelectedItem()).strategyPanel;
+				if (panel!=null) {
+					try {
+						remove(content);
+
+						content.removeAll();
+						content.add((Component) panel);
+						add(content, BorderLayout.CENTER);
+						actionPerformed(new ActionEvent(chkApplyLabels, 0, null));
+						revalidate();
+						paintImmediately(getBounds());
+					} catch (Exception e1) {
+						e1.printStackTrace();
+					}
+				}
+			}
+		}
+	}
+
+	public void acceptAction() {
+
+	}
+
+	public void cancelAction() {
+
+	}
+
+	public void applyAction() {
+		if (layer != null) { // in other case the layer is not labelable
+			ILabelingStrategyPanel panel = ((LabelingStrategyItem) getCmbStrategy().getSelectedItem()).strategyPanel;
+			ILabelingStrategy strategy=panel.getLabelingStrategy();
+			layer.setLabelingStrategy(strategy);
+			layer.setIsLabeled(getChkApplyLabels().isSelected());
+		}
+	}
+
+
+	public String getName() {
+		return PluginServices.getText(this,"Etiquetados");
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LabelingManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialUniqueValue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialUniqueValue.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialUniqueValue.java	(revision 42196)
@@ -0,0 +1,769 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Random;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.styling.JComboBoxColorScheme;
+import org.gvsig.app.gui.styling.SymbolLevelsWindow;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.ClassifiableVectorial;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorialUniqueValueLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ZSort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractClassifiedVectorLegend;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.VectorialUniqueValueLegend;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author fjp To change the template for this generated type comment go to
+ *         Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and
+ *         Comments
+ */
+public class VectorialUniqueValue extends JPanel implements ILegendPanel, ActionListener{
+    private static final Logger logger = LoggerFactory
+    .getLogger(VectorialUniqueValue.class);
+
+    protected VectorialUniqueValueLegend theLegend;
+    private ClassifiableVectorial layer;
+    private SymbolTable symbolTable;
+    protected JComboBox cmbFields;
+    private JButton btnRemoveAll;
+    private JButton btnRemove;
+    private JCheckBox chbUseDefault = null;
+    private JSymbolPreviewButton defaultSymbolPrev;
+    private VectorialUniqueValueLegend auxLegend;
+	private JPanel pnlCenter;
+	private JButton btnOpenSymbolLevelsEditor;
+
+	private JComboBoxColorScheme cmbColorScheme;
+	private GridBagLayoutPanel defaultSymbolPanel = new GridBagLayoutPanel();
+		
+	private MapContextManager mapContextManager = MapContextLocator
+			.getMapContextManager();
+
+    /**
+     *
+     */
+    public VectorialUniqueValue() {
+        super();
+        initComponents();
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    protected void initComponents() {
+        JPanel pnlButtons = new JPanel();
+
+        JButton btnAddAll = new JButton(PluginServices.getText(this,
+                    "Anadir_todos"));
+        btnAddAll.setActionCommand("ADD_ALL_VALUES");
+        btnAddAll.addActionListener(this);
+        pnlButtons.add(btnAddAll);
+
+        JButton btnAdd = new JButton(PluginServices.getText(this, "Anadir"));
+        btnAdd.setActionCommand("ADD_VALUE");
+        btnAdd.addActionListener(this);
+        pnlButtons.add(btnAdd);
+
+        btnRemoveAll = new JButton(PluginServices.getText(this, "Quitar_todos"));
+        btnRemoveAll.setActionCommand("REMOVE_ALL");
+        btnRemoveAll.addActionListener(this);
+        pnlButtons.add(btnRemoveAll);
+
+        btnRemove = new JButton(PluginServices.getText(this, "Quitar"));
+        btnRemove.setActionCommand("REMOVE");
+        btnRemove.addActionListener(this);
+        pnlButtons.add(btnRemove);
+
+        btnOpenSymbolLevelsEditor = new JButton(PluginServices.getText(this, "symbol_levels"));
+        btnOpenSymbolLevelsEditor.addActionListener(this);
+        btnOpenSymbolLevelsEditor.setActionCommand("OPEN_SYMBOL_LEVEL_EDITOR");
+        pnlButtons.add(btnOpenSymbolLevelsEditor);
+		btnOpenSymbolLevelsEditor.setEnabled(symbolTable != null && symbolTable.getRowCount()>0);
+
+		pnlCenter = new JPanel();
+        pnlCenter.setLayout(new BorderLayout());
+
+        cmbFields = new JComboBox();
+        cmbFields.setActionCommand("FIELD_SELECTED");
+        cmbFields.addActionListener(this);
+        cmbFields.setVisible(true);
+
+		JPanel pnlNorth = new JPanel();
+		pnlNorth.setLayout(new GridLayout(0,2));
+
+		GridBagLayoutPanel auxPanel = new GridBagLayoutPanel();
+		JLabel lblFieldClassification = new JLabel(PluginServices.getText(
+				this, "Campo_de_clasificacion")+": ");
+		auxPanel.add(lblFieldClassification);
+		auxPanel.add(cmbFields);
+		pnlNorth.add(auxPanel);
+
+		auxPanel = new GridBagLayoutPanel();
+		auxPanel.add(new JLabel(PluginServices.getText(this, "color_scheme")+": "));
+		cmbColorScheme = new JComboBoxColorScheme(false);
+		cmbColorScheme.addActionListener(this);
+		auxPanel.add(cmbColorScheme);
+		pnlNorth.add(auxPanel);
+
+
+		defaultSymbolPanel.add(getChbUseDefault(), null);
+		pnlNorth.add(defaultSymbolPanel);
+		pnlNorth.add(new JBlank(0,30));
+
+		this.setLayout(new BorderLayout());
+		this.add(pnlNorth, BorderLayout.NORTH);
+		this.add(pnlCenter, BorderLayout.CENTER);
+		this.add(pnlButtons, BorderLayout.SOUTH);
+
+
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    private void fillTableValues() {
+        FeatureStore elRs;
+
+        try {
+            elRs = ((FLyrVect) layer).getFeatureStore();
+//            logger.debug("elRs.start()");
+//            elRs.start();
+
+//            int idField = -1;
+            String fieldName = (String) cmbFields.getSelectedItem();
+            if (fieldName==null) {
+            	JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),PluginServices.getText(this,"no_hay_campo_seleccionado"));
+            	return;
+            }
+
+//            idField = elRs.getFieldIndexByName(fieldName);
+            auxLegend.setClassifyingFieldNames(new String[] {fieldName});
+
+            //long numReg = elRs.getRowCount();
+//            if (idField == -1) {
+//                NotificationManager.addWarning(
+//                		PluginServices.getText(this, "unrecognized_field_name")+" " + fieldName, null);
+//
+//                return;
+//            }
+
+            symbolTable.removeAllItems();
+
+            int numSymbols = 0;
+            ISymbol theSymbol = null;
+
+            //auxLegend=(VectorialUniqueValueLegend)m_lyr.getLegend();
+
+            //            auxLegend = LegendFactory.createVectorialUniqueValueLegend(layer.getShapeType());
+            auxLegend = (VectorialUniqueValueLegend) MapContextLocator
+					.getMapContextManager().createLegend(
+							IVectorialUniqueValueLegend.LEGEND_NAME);
+            auxLegend.setShapeType(layer.getShapeType());
+
+            Object clave=null;
+
+            //Object resul;
+            if (chbUseDefault.isSelected()) {
+                auxLegend.getDefaultSymbol().setDescription("Default");
+                auxLegend.addSymbol(null, auxLegend.getDefaultSymbol());
+            }
+
+            Color[] colorScheme = cmbColorScheme.getSelectedColors();
+
+            Color[] colors = new Color[colorScheme.length];
+			for (int i = 0; i < colorScheme.length; i++) {
+				colors[i] = colorScheme[i];
+			}
+			auxLegend.setColorScheme(colors);
+
+            Random rand = new Random(System.currentTimeMillis());
+
+            FeatureSet set = null;
+			DisposableIterator iterator = null;
+
+			try {
+				set = elRs.getFeatureSet();
+
+				int count = 0;
+
+				iterator = set.iterator();
+				while (iterator.hasNext()) {
+					Feature feature = (Feature) iterator.next();
+					clave = feature.get(fieldName);
+					// }
+					// for (int j = 0; j < elRs.getRowCount(); j++) {
+					// clave = elRs.getFieldValue(j, idField);
+
+//					if (clave instanceof NullValue) {
+//						continue;
+//					}
+					if (clave == null) {
+						continue;
+					}
+
+					// //Comprobar que no esta repetido y no hace falta
+					// introducir en el hashtable el campo junto con el simbolo.
+					if (auxLegend.getSymbolByValue(clave) == null) {
+
+						if (count == 100) {
+							int resp = JOptionPane.showConfirmDialog(this,
+									PluginServices.getText(this,
+											"mas_de_100_simbolos"),
+									PluginServices.getText(this,
+											"quiere_continuar"),
+									JOptionPane.YES_NO_OPTION,
+									JOptionPane.WARNING_MESSAGE);
+
+							if ((resp == JOptionPane.NO_OPTION)
+									|| (resp == JOptionPane.DEFAULT_OPTION)) {
+								break;
+							}
+						}
+
+
+						// si no esta creado el simbolo se crea
+						// jaume (moved to ISymbol); theSymbol = new
+						// FSymbol(layer.getShapeType());
+						theSymbol =
+								mapContextManager.getSymbolManager()
+										.createSymbol(
+												layer
+										.getShapeType(), colorScheme[rand
+										.nextInt(colorScheme.length)]);
+						theSymbol.setDescription(clave.toString());
+						auxLegend.addSymbol(clave, theSymbol);
+						count++;
+					}
+
+				} // for
+			}finally{
+				if (iterator != null){
+					iterator.dispose();
+				}
+				if (set != null) {
+					set.dispose();
+				}
+			}
+
+			Object[] values = auxLegend.getValues();
+			String[] descriptions = new String[values.length];
+			ISymbol[] symbols = new ISymbol[values.length];
+			
+			for (int i = 0; i < values.length; i++) {
+				Object value = values[i];
+				symbols[i] = auxLegend.getSymbolByValue(value);
+				descriptions[i] = symbols[i].getDescription();
+			}
+			
+            symbolTable.fillTableFromSymbolList(symbols,
+                values, descriptions);
+//            elRs.stop();
+//            set.dispose();
+        } catch (DataException e) {
+        	NotificationManager.addError(PluginServices.getText(this, "recovering_recordset"), e);
+        }
+
+        btnRemoveAll.setEnabled(true);
+        btnRemove.setEnabled(true);
+
+        //m_bCacheDirty = false;
+    }
+
+	private boolean compareClassifyingFieldNames(String[] a, String[] b){
+		if (a==b) {
+			return true;
+		}
+		if (a == null || b == null) {
+			return false;
+		}
+		if (a.length != b.length) {
+			return false;
+		}
+		for (int i=0; i<a.length; i++){
+			if (!a[i].equals(b[i])) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private boolean compareClassifyingFieldTypes(int[] a, int[] b){
+		if (a==b) {
+			return true;
+		}
+		if (a == null || b == null) {
+			return false;
+		}
+		if (a.length != b.length) {
+			return false;
+		}
+		for (int i=0; i<a.length; i++){
+			if (a[i]!=b[i]) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+    /**
+     * A partir de los registros de la tabla, regenera el FRenderer. (No solo
+     * el symbolList, si no tambi�n el arrayKeys y el defaultRenderer
+     */
+    private void fillSymbolListFromTable() {
+        Object clave=null;
+        ISymbol theSymbol;
+		ArrayList visitedKeys = new ArrayList();
+		boolean changedLegend = false;
+
+    	String fieldName = (String) cmbFields.getSelectedItem();
+		String[] classifyingFieldNames = new String[] {fieldName};
+		if(auxLegend!=null){
+			if(!compareClassifyingFieldNames(classifyingFieldNames,auxLegend.getClassifyingFieldNames())){
+				auxLegend.setClassifyingFieldNames(classifyingFieldNames);
+				changedLegend = true;
+			}
+		} else {
+			auxLegend.setClassifyingFieldNames(classifyingFieldNames);
+			changedLegend = true;
+		}
+
+		FLyrVect m = (FLyrVect) layer;
+
+        try {
+        	int fieldType = m.getFeatureStore().getDefaultFeatureType()
+					.getAttributeDescriptor(cmbFields.getSelectedIndex())
+					.getType();
+//        	int fieldType = m.getSource().getRecordset().getFieldType((int)cmbFields.getSelectedIndex());
+			int[] classifyingFieldTypes = new int[] {fieldType};
+			if(auxLegend!=null){
+				if(!compareClassifyingFieldTypes(classifyingFieldTypes,auxLegend.getClassifyingFieldTypes())){
+					auxLegend.setClassifyingFieldTypes(classifyingFieldTypes);
+					changedLegend = true;
+				}
+			} else {
+				auxLegend.setClassifyingFieldTypes(classifyingFieldTypes);
+				changedLegend = true;
+			}
+        } catch (DataException e) {
+        	NotificationManager.addError(PluginServices.getText(this, "could_not_setup_legend"), e);
+        } catch (Exception e) {
+			NotificationManager.showMessageWarning(PluginServices.getText(this, "could_not_setup_legend"), e);
+		}
+
+		if(changedLegend){
+			auxLegend.clear();
+		}
+
+        for (int row = 0; row < symbolTable.getRowCount(); row++) {
+            clave = symbolTable.getFieldValue(row, 1);
+            theSymbol = (ISymbol) symbolTable.getFieldValue(row, 0);
+			String description = (String) symbolTable.getFieldValue(row, 2);
+			theSymbol.setDescription(description);
+			ISymbol legendSymbol = null;
+			if (auxLegend != null){
+				legendSymbol = auxLegend.getSymbolByValue(clave);
+			}
+			if( legendSymbol == null || ( auxLegend.isUseDefaultSymbol() && legendSymbol == auxLegend.getDefaultSymbol())){
+				if (auxLegend != null){
+					auxLegend.addSymbol(clave, theSymbol);
+				}
+			} else {
+			    
+			    // avoid same instance
+			    if (legendSymbol != theSymbol) {
+
+			        /*
+			         * Perhaps use this "if" when implementations of ISymbol
+			         * properly implement the equals method. 
+			         */
+			        // if (!legendSymbol.equals(theSymbol)) {
+			            auxLegend.replace(legendSymbol, theSymbol);
+			        // }
+			    }
+			}
+			visitedKeys.add(clave);
+		}
+		if(auxLegend != null){
+			Object[] keys = auxLegend.getValues();
+			for(int i=0; i<keys.length; i++){
+				Object key = keys[i];
+				if(!visitedKeys.contains(key)){
+					auxLegend.delSymbol(key);
+				}
+			}
+		}
+		clave = null;
+		if(chbUseDefault.isSelected()){
+			theSymbol = defaultSymbolPrev.getSymbol();
+			if(theSymbol != null){
+				String description = PluginServices.getText(this,"default");
+				theSymbol.setDescription(description);
+				ISymbol legendSymbol = null;
+				if (auxLegend != null){
+					legendSymbol = auxLegend.getSymbolByValue(clave);
+				}
+				if( legendSymbol == null){
+					auxLegend.addSymbol(clave, theSymbol);
+				} else {
+//					if(!legendSymbol.equals(theSymbol)){
+					if(legendSymbol!=theSymbol){
+						auxLegend.replace(legendSymbol, theSymbol);
+					}
+				}
+			}
+		} else {
+			if (auxLegend != null){
+				ISymbol legendSymbol = auxLegend.getSymbolByValue(clave);
+				if( legendSymbol != null){
+					auxLegend.replace(legendSymbol, null);
+				}
+			}
+		}
+	}
+
+    /**
+     * DOCUMENT ME!
+     */
+    private void fillFieldNames() {
+        FeatureStore rs;
+
+        try {
+            rs = ((FLyrVect) layer).getFeatureStore();
+//            logger.debug("rs.start()");
+//            rs.start();
+
+            ArrayList names=new ArrayList();
+            Iterator iterator=rs.getDefaultFeatureType().iterator();
+            while (iterator.hasNext()) {
+				FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) iterator.next();
+				names.add(descriptor.getName());
+			}
+//            String[] nomFields = new String[rs.getFieldCount()];
+//
+//            for (int i = 0; i < rs.getFieldCount(); i++) {
+//                nomFields[i] = rs.getFieldName(i).trim();
+//            }
+//
+//            rs.stop();
+
+            DefaultComboBoxModel cM = new DefaultComboBoxModel(names.toArray(new String[0]));
+            cmbFields.setModel(cM);
+
+            // fieldsListValor.setSelectedIndex(0);
+        } catch (DataException e) {
+        	NotificationManager.addError(PluginServices.getText(this, "recovering_recordset"), e);
+        }
+    }
+
+    public void setData(FLayer layer, ILegend legend) {
+    	this.layer = (ClassifiableVectorial) layer;
+      	int shapeType = 0;
+      	try {
+      		shapeType = this.layer.getShapeType();
+      	} catch (ReadException e) {
+    		NotificationManager.addError(PluginServices.getText(this, "generating_intervals"), e);
+		}
+
+      	getDefaultSymbolPrev(shapeType);
+
+      	if (symbolTable != null) {
+			pnlCenter.remove(symbolTable);
+		}
+      	symbolTable = new SymbolTable(this, SymbolTable.VALUES_TYPE, shapeType);
+      	pnlCenter.add(symbolTable, BorderLayout.CENTER);
+
+        fillFieldNames();
+
+        symbolTable.removeAllItems();
+
+    	if (VectorialUniqueValueLegend.class.equals(legend.getClass())) {
+			auxLegend = (VectorialUniqueValueLegend) legend.cloneLegend();
+			getChbUseDefault().setSelected(auxLegend.isUseDefaultSymbol());
+			cmbFields.getModel().setSelectedItem(auxLegend.getClassifyingFieldNames()[0]);
+			setColorScheme();
+			
+			Object[] values = auxLegend.getValues();
+			String[] descriptions = new String[values.length];
+			ISymbol[] symbols = new ISymbol[values.length];
+			
+			for (int i = 0; i < values.length; i++) {
+				Object value = values[i];
+				symbols[i] = auxLegend.getSymbolByValue(value);
+				descriptions[i] = symbols[i].getDescription();
+			}
+
+			symbolTable.fillTableFromSymbolList(symbols,
+					values,descriptions);
+			chbUseDefault.setSelected(auxLegend.isUseDefaultSymbol());
+		} else {
+			auxLegend = new VectorialUniqueValueLegend(shapeType);
+		}
+		defaultSymbolPrev.setSymbol(auxLegend.getDefaultSymbol());
+		btnOpenSymbolLevelsEditor.setEnabled(symbolTable != null && symbolTable.getRowCount()>0);
+    }
+
+
+    private void setColorScheme(){
+
+		if(auxLegend.getColorScheme() != null) {
+			Color[] colorScheme = auxLegend.getColorScheme();
+//			ColorItem[] colors = new ColorItem[auxLegend.getColorScheme().length];
+//			for (int i = 0; i < auxLegend.getColorScheme().length; i++) {
+//				colors[i] = new ColorItem();
+//				colors[i].setColor(auxLegend.getColorScheme()[i]);
+//			}
+			cmbColorScheme.setSelectedColors(colorScheme);
+		}
+	}
+
+    private void getDefaultSymbolPrev(int shapeType) {
+		if(defaultSymbolPrev == null){
+			defaultSymbolPrev = new JSymbolPreviewButton(shapeType);
+			defaultSymbolPrev.setPreferredSize(new Dimension(110,20));
+			defaultSymbolPrev.addActionListener(this);
+			defaultSymbolPanel.add(defaultSymbolPrev,null);
+		}
+	}
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.gui.legendmanager.panels.ILegendPanel#getLegend()
+     */
+    public ILegend getLegend() {
+    	fillSymbolListFromTable();
+
+    	if (auxLegend != null) {
+    		// your settings that are not the set of symbols must be located here
+//  		auxLegend.setClassifyingFieldNames(
+//  		new String[] {(String) cmbFields.getSelectedItem()});
+
+    		ISymbol defaultSymbolLegend = auxLegend.getDefaultSymbol();
+    		ISymbol symbol = defaultSymbolPrev.getSymbol();
+    		if(symbol != null){
+    			if(symbol!=defaultSymbolLegend){
+    				auxLegend.setDefaultSymbol(symbol);
+    			}
+    		}
+
+    		auxLegend.useDefaultSymbol(chbUseDefault.isSelected());
+
+    		theLegend = (VectorialUniqueValueLegend) auxLegend.cloneLegend();
+    		theLegend.setZSort(auxLegend.getZSort());
+    	}
+
+    	return theLegend;
+    }
+
+    private JCheckBox getChbUseDefault() {
+    	if (chbUseDefault == null) {
+			chbUseDefault = new JCheckBox();
+			chbUseDefault.setSelected(false);
+			chbUseDefault.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					if (chbUseDefault.isSelected()) {
+						auxLegend.useDefaultSymbol(true);
+					} else {
+						auxLegend.useDefaultSymbol(false);
+					}
+				}
+			});
+			chbUseDefault.setText(PluginServices.getText(this, "resto_valores")+ ": ");
+		}
+
+		return chbUseDefault;
+    }
+
+    /**
+     * A�ade el resto de valores.
+     */
+    private void addDefault() {
+        auxLegend.getDefaultSymbol().setDescription("Default");
+        auxLegend.addSymbol(null, auxLegend.getDefaultSymbol());
+        symbolTable.addTableRecord(auxLegend.getDefaultSymbol(),
+            null, auxLegend.getDefaultSymbol().getDescription());
+        symbolTable.repaint();
+    }
+
+    /**
+     * Elimina el resto de valores que no estan representados por ning�n otro s�mbolo..
+     */
+    private void delDefault() {
+        auxLegend.delSymbol(null);
+        symbolTable.removeRow(null);
+        symbolTable.repaint();
+    }
+
+
+    public void actionPerformed(ActionEvent e) {
+
+    	//modificar el combobox de valor
+    	if (e.getActionCommand() == "FIELD_SELECTED") {
+    		JComboBox cb = (JComboBox) e.getSource();
+    		String fieldName = (String) cb.getSelectedItem();
+    		symbolTable.removeAllItems();
+			btnOpenSymbolLevelsEditor.setEnabled(false);
+
+
+//    		if (theLegend.getClassifyingFieldNames()!=null && fieldName != theLegend.getClassifyingFieldNames()[0]) {
+//    			//m_bCacheDirty = true;
+//    			theLegend.setClassifyingFieldNames(new String[] {fieldName});
+//    		}
+//
+//    		//////////////////////////////////////////PEPE
+//    		FLyrVect m = (FLyrVect) layer;
+//    		try {
+//    			int fieldType = m.getSource().getRecordset().getFieldType((int)cb.getSelectedIndex());
+//    			if (theLegend.getClassifyingFieldTypes()!=null && fieldType != theLegend.getClassifyingFieldTypes()[0]) {
+//    				//m_bCacheDirty = true;
+//    				theLegend.setClassifyingFieldTypes(new int[] {fieldType});
+//    			}
+//    		} catch (ReadDriverException e1) {
+//    			NotificationManager.addError(PluginServices.getText(this, "could_not_setup_legend"), e1);
+//    		}
+//    		/////////////////////////////////////////PEPE
+    	}
+
+    	// add all elements by value
+    	if (e.getActionCommand() == "ADD_ALL_VALUES") {
+    		fillTableValues();
+			btnOpenSymbolLevelsEditor.setEnabled(symbolTable != null && symbolTable.getRowCount()>0);
+    	}
+
+    	// add only one value
+    	if (e.getActionCommand() == "ADD_VALUE") {
+    		try {
+				ISymbol symbol =
+						mapContextManager.getSymbolManager().createSymbol(
+								layer.getShapeType());
+				Double clave = new Double(0.0);
+				symbolTable.addTableRecord(symbol,
+						clave,"0 - 0");
+				btnOpenSymbolLevelsEditor.setEnabled(true);
+    		} catch (ReadException ex) {
+    			NotificationManager.addError(PluginServices.getText(this, "getting_shape_type"), ex);
+    		}
+    	}
+
+    	//Vacia la tabla
+    	if (e.getActionCommand() == "REMOVE_ALL") {
+    		symbolTable.removeAllItems();
+    		auxLegend.setZSort(null);
+			btnOpenSymbolLevelsEditor.setEnabled(false);
+
+    	}
+
+    	//Quitar solo el elemento seleccionado
+    	if (e.getActionCommand() == "REMOVE") {
+    		symbolTable.removeSelectedRows();
+			btnOpenSymbolLevelsEditor.setEnabled(symbolTable.getRowCount()>0);
+    	}
+
+    	if (e.getActionCommand() == "OPEN_SYMBOL_LEVEL_EDITOR") {
+			ZSort myZSort = null;
+			if (auxLegend != null) {
+				myZSort = ((AbstractClassifiedVectorLegend) getLegend()).getZSort();
+				if(myZSort == null){
+					myZSort = new ZSort(auxLegend);
+				}
+			}
+			if (myZSort == null && theLegend != null) {
+				myZSort = new ZSort(theLegend);
+			}
+			SymbolLevelsWindow sl = new SymbolLevelsWindow(myZSort);
+			PluginServices.getMDIManager().addWindow(sl);
+			auxLegend.setZSort(sl.getZSort());
+		}
+    }
+
+	public String getDescription() {
+		return PluginServices.getText(this,"Dado_un_campo_de_atributos") + "," + PluginServices.getText(this,"muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico") + ".";
+	}
+
+	public ImageIcon getIcon() {
+	    return IconThemeHelper.getImageIcon(
+	        "legend-overview-vectorial-unique-value");
+	}
+
+	public Class getParentClass() {
+		return Categories.class;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this,"Valores_unicos");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public Class getLegendClass() {
+		return VectorialUniqueValueLegend.class;
+	}
+
+
+	public boolean isSuitableFor(FLayer layer) {
+		return (layer instanceof FLyrVect);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/VectorialUniqueValue.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SymbolTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SymbolTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SymbolTable.java	(revision 42196)
@@ -0,0 +1,507 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.util.Hashtable;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableColumn;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.gui.SymbolCellEditor;
+import org.gvsig.app.project.documents.gui.TableSymbolCellRenderer;
+import org.gvsig.app.project.documents.view.legend.edition.gui.IntervalCellEditor;
+import org.gvsig.app.project.documents.view.legend.edition.gui.ValueCellEditor;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.utils.swing.jtable.JTable;
+import org.gvsig.utils.swing.jtable.TextFieldCellEditor;
+
+
+/**
+ * JPanel que contiene la tabla con los s�mbolos intervalos o valores y
+ * etiquetado de estos valores.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SymbolTable extends JPanel {
+	private static final long serialVersionUID = -8694846716328735113L;
+	private static Hashtable<String,TableCellEditor> cellEditors = new Hashtable<String,TableCellEditor>();
+
+	public static final String VALUES_TYPE = "values";
+	public static final String INTERVALS_TYPE = "intervals";
+	private JTable table;
+	private String type;
+	private int shapeType;
+
+	/**
+	 * Crea un nuevo FSymbolTable.
+	 *
+	 * @param type
+	 *            tipo de valor si es intervalo: "intervals" y si es por
+	 *            valores: "values".
+	 */
+	public SymbolTable(Component ownerComponent, String type, int shapeType) {
+		super(new GridLayout(1, 0));
+		this.type = type;
+		this.shapeType = shapeType;
+
+		table = new JTable();
+		table.setModel(new MyTableModel());
+		table.setPreferredScrollableViewportSize(new Dimension(480, 110));
+
+		initializeCellEditors();
+
+		// Create the scroll pane and add the table to it.
+		JScrollPane scrollPane = new JScrollPane(table);
+
+		// Set up column sizes.
+		// initColumnSizes(table);
+		setUpSymbolColumn(table, table.getColumnModel().getColumn(0));
+
+		if(cellEditors.get(type) == null)
+			throw new Error("Symbol table type not set!");
+
+		setUpValueColumn(table, table.getColumnModel().getColumn(1),cellEditors.get(this.type));
+		setUpLabelColumn(table, table.getColumnModel().getColumn(2));
+
+		// Add the scroll pane to this panel.
+		add(scrollPane);
+		table.setRowSelectionAllowed(true);
+		// default is 16
+		table.setRowHeight(24);
+	}
+	/**
+	 * Inicializa los valores de los CellEditors que la SymbolTable poseer� por defecto
+	 */
+	private void initializeCellEditors() {
+		this.cellEditors.put(this.INTERVALS_TYPE,new IntervalCellEditor());
+		this.cellEditors.put(this.VALUES_TYPE, new ValueCellEditor());
+	}
+	/**
+	 * A�ade un nuevo CellEditor a la lista de disponibles
+	 *
+	 * @param key String con el nombre identificativo del CellEditor
+	 * @param cellEditor CellEditor que va a ser a�adido
+	 */
+	public static void addNewCellEditor(String key,TableCellEditor cellEditor ) {
+		cellEditors.put(key, cellEditor);
+	}
+	/**
+	 * Obtiene el valor de los elementos de una fila seleccionada
+	 *
+	 * @return Object[] Array con los objetos de cada una de las columnas de la fila seleccionada
+	 */
+	public Object[] getSelectedRowElements() {
+		Object[] values = new Object[3];
+
+		MyTableModel m = (MyTableModel) table.getModel();
+		int[] selectedRows = table.getSelectedRows();
+
+		if(selectedRows.length != 1)
+			return null;
+
+		for (int i = 0; i < 3; i++) {
+			values[i] = m.getValueAt(selectedRows[0], i);
+		}
+
+		return values;
+	}
+	/**
+	 * A�ade una fila al modelo.
+	 *
+	 * @param vector
+	 *            Fila en forma de vector de Object para a�adir al modelo.
+	 */
+	public void addRow(Object[] vector) {
+		MyTableModel m = (MyTableModel) table.getModel();
+		m.addRow(vector);
+
+	}
+
+	/**
+	 * Elimina la fila que tiene como clave el objeto que se pasa como
+	 * par�metro.
+	 *
+	 * @param obj
+	 *            clave del objeto a eliminar.
+	 */
+	public void removeRow(Object obj) {
+		MyTableModel m = (MyTableModel) table.getModel();
+
+		for (int i = 0; i < m.getRowCount(); i++) {
+//			if (m.getValueAt(i, 1) instanceof NullUniqueValue
+//					|| m.getValueAt(i, 1) instanceof NullIntervalValue) {
+//				m.removeRow(i);
+//			}
+			if (m.getValueAt(i, 1) == null) {
+				m.removeRow(i);
+			}
+		}
+	}
+
+	/**
+	 * Elimina las filas que est�n seleccionadas.
+	 */
+	public void removeSelectedRows() {
+		if (table.getCellEditor() != null) {
+			table.getCellEditor().cancelCellEditing();
+		}
+
+		MyTableModel m = (MyTableModel) table.getModel();
+		int[] selectedRows = table.getSelectedRows();
+
+		for (int i = selectedRows.length - 1; i >= 0; i--) {
+			m.removeRow(selectedRows[i]);
+		}
+	}
+
+	/**
+	 * Rellena la tabla con los s�mbolos valores y descripciones que se pasan
+	 * como par�metro.
+	 *
+	 * @param symbols
+	 *            Array de s�mbolos
+	 * @param values
+	 *            Array de valores.
+	 * @param descriptions
+	 *            Array de descripciones.
+	 */
+	public void fillTableFromSymbolList(ISymbol[] symbols, Object[] values,
+			String[] descriptions) {
+		ISymbol theSymbol;
+
+		for (int i = 0; i < symbols.length; i++) {
+			theSymbol = symbols[i];
+//			if(!(values[i] instanceof NullIntervalValue) && !(values[i] instanceof NullUniqueValue))
+//				addTableRecord(theSymbol, values[i], descriptions[i]);
+			if(!(values[i] == null))
+				addTableRecord(theSymbol, values[i], descriptions[i]);
+		}
+	}
+
+	/**
+	 * A�ade una fila con los objetos que se pasan como par�metros.
+	 *
+	 * @param symbol
+	 *            s�mbolo de la fila.
+	 * @param value
+	 *            Valor de la fila.
+	 * @param description
+	 *            Descripci�n.
+	 */
+	public void addTableRecord(ISymbol symbol, Object value, String description) {
+		Object[] theRow = new Object[3];
+		theRow[0] = symbol;
+		theRow[1] = value;
+		theRow[2] = description;
+		addRow(theRow);
+	}
+
+	/**
+	 * Devuelve el valor a partie del n�mero de fila y columna.
+	 *
+	 * @param row
+	 *            n�mero de fila.
+	 * @param col
+	 *            n�mero de columna.
+	 *
+	 * @return Objeto.
+	 */
+	public Object getFieldValue(int row, int col) {
+		MyTableModel m = (MyTableModel) table.getModel();
+
+		return m.getValueAt(row, col);
+	}
+
+	/**
+	 * Devuelve el n�mero total de filas que contiene el modelo.
+	 *
+	 * @return N�mero de filas.
+	 */
+	public int getRowCount() {
+		MyTableModel m = (MyTableModel) table.getModel();
+
+		return m.getRowCount();
+	}
+
+	/**
+	 * Elimina todas las filas del modelo.
+	 */
+	public void removeAllItems() {
+		table.setModel(new MyTableModel());
+		setUpSymbolColumn(table, table.getColumnModel().getColumn(0));
+		setUpValueColumn(table, table.getColumnModel().getColumn(1),cellEditors.get(this.type));
+		setUpLabelColumn(table, table.getColumnModel().getColumn(2));
+	}
+
+	/**
+	 * Inicializa el cell editor de tipo descripci�n de la columna que se pasa
+	 * como par�metro.
+	 *
+	 * @param table2
+	 *            Tabla.
+	 * @param column
+	 *            Columna.
+	 */
+	public void setUpLabelColumn(JTable table2, TableColumn column) {
+		TextFieldCellEditor labeleditor = new TextFieldCellEditor();
+		column.setCellEditor(labeleditor);
+	}
+
+	/**
+	 * Inicializa el cell editor de tipo valor de la columna que se pasa como
+	 * par�metro.
+	 *
+	 * @param table2
+	 *            Tabla.
+	 * @param column
+	 *            Columna.
+	 * @param tableCellEditor
+	 */
+	public void setUpValueColumn(JTable table2,TableColumn column, TableCellEditor tableCellEditor) {
+		column.setCellEditor(tableCellEditor);
+	}
+	/**
+	 * Inicializa el cell editor de tipo s�mbolo de la columna que se pasa como
+	 * par�metro.
+	 *
+	 * @param table2
+	 *            Tabla.
+	 * @param column
+	 *            Columna.
+	 */
+	public void setUpSymbolColumn(JTable table2, TableColumn column) {
+		// Set up the editor
+		column.setMaxWidth(100);
+		column.setWidth(60);
+		column.setPreferredWidth(60);
+		column.setMinWidth(50);
+
+		// FSymbolCellEditor symboleditor = new FSymbolCellEditor();
+		SymbolCellEditor symboleditor = new SymbolCellEditor(shapeType);
+		column.setCellEditor(symboleditor);
+
+		TableSymbolCellRenderer renderer = new TableSymbolCellRenderer(true);
+		column.setCellRenderer(renderer);
+	}
+
+	/**
+	 * Modelo que propio que se aplica a la tabla.
+	 *
+	 * @author Vicente Caballero Navarro
+	 */
+	class MyTableModel extends DefaultTableModel {
+		private static final long serialVersionUID = 1L;
+
+		// AbstractTableModel {
+		private String[] columnNames = {
+				PluginServices.getText(this, "Simbolo"),
+				PluginServices.getText(this, "Valor"),
+				PluginServices.getText(this, "Etiqueta") };
+
+		/**
+		 * Devuelve el n�mero de columnas.
+		 *
+		 * @return N�mero de columnas.
+		 */
+		public int getColumnCount() {
+			return columnNames.length;
+		}
+
+		/**
+		 * Devuelve el String del valor de la columna.
+		 *
+		 * @param col
+		 *            N�mero de columna.
+		 *
+		 * @return Nombre de la columna.
+		 */
+		public String getColumnName(int col) {
+			return columnNames[col];
+		}
+
+		public Class getColumnClass(int c) {
+            switch (c) {
+            case 0:
+                return ISymbol.class;
+            case 1:
+                // TODO: take the value from the related FeatureType attribute
+                Object value = getValueAt(0, c);
+                return value == null ? Object.class : value.getClass();
+            case 2:
+                return String.class;
+            default:
+                return Object.class;
+            }
+		}
+
+		/*
+		 * Don't need to implement this method unless your table's editable.
+		 */
+		public boolean isCellEditable(int row, int col) {
+			// Note that the data/cell address is constant,
+			// no matter where the cell appears onscreen.
+			// if (col > 0) {
+			return true;
+		}
+
+		@Override
+		public Object getValueAt(int row, int column) {
+			if(column == 2)
+				return ((ISymbol)getValueAt(row,0)).getDescription();
+
+			return super.getValueAt(row, column);
+		}
+
+		@Override
+		public void setValueAt(Object aValue, int row, int column) {
+
+			if(column == 2){
+				ISymbol symbol = (ISymbol) getValueAt(row,0);
+				symbol.setDescription((String) aValue);
+				setValueAt(symbol,row,0);
+			}
+
+			super.setValueAt(aValue, row, column);
+		}
+
+	}
+	
+	
+	
+    public void moveDownRows(int startPos, int endPos, int numOfElements) {
+        if(startPos > endPos)
+            return;
+        if(startPos >= getRowCount()-1 )
+            return;
+        if(startPos == getRowCount()-1)
+            return;
+
+        Object[][] values = new Object[getRowCount()][3];
+        for (int i = 0; i < getRowCount(); i++) {
+            values[i][0] = table.getModel().getValueAt(i,0);
+            values[i][1] = table.getModel().getValueAt(i,1);
+            values[i][2] = table.getModel().getValueAt(i,2);
+        }
+
+        Object[][]aux = new Object[numOfElements][3];
+        for (int i = 0; i < numOfElements; i++) {
+
+            aux[numOfElements - i - 1][0] = values[startPos - i][0];
+            aux[numOfElements - i - 1][1] = values[startPos - i][1];
+            aux[numOfElements - i - 1][2] = values[startPos - i][2];
+        }
+
+        Object [][] targetVal = {{values[endPos][0],values[endPos][1],values[endPos][2]}};
+
+        values[startPos - numOfElements + 1][0] = targetVal[0][0];
+        values[startPos - numOfElements + 1][1] = targetVal[0][1];
+        values[startPos - numOfElements + 1][2] = targetVal[0][2];
+
+        for (int i = 0; i < numOfElements; i++) {
+            values[endPos - i][0] = aux[numOfElements - i - 1][0];
+            values[endPos - i][1] = aux[numOfElements - i - 1][1];
+            values[endPos - i][2] = aux[numOfElements - i - 1][2];
+        }
+
+        ISymbol[] symbols = new ISymbol[getRowCount()];
+        Object[] objects = new Object[getRowCount()];
+        String[] cads = new String[getRowCount()];
+
+        for (int i = 0; i < getRowCount(); i++) {
+            symbols[i] = (ISymbol) values[i][0];
+            objects[i] = values[i][1];
+            cads[i] = (String) values[i][2];
+        }
+
+        removeAllItems();
+        fillTableFromSymbolList(symbols,objects,cads);
+        table.addRowSelectionInterval(endPos-numOfElements+1,endPos);
+    }
+
+
+    public void moveUpRows(int startPos, int endPos, int numOfElements) {
+
+        if(startPos == 0)
+            return;
+        if(endPos > startPos)
+            return;
+
+
+        Object[][] values = new Object[getRowCount()][3];
+        for (int i = 0; i < getRowCount(); i++) {
+            values[i][0] = table.getModel().getValueAt(i,0);
+            values[i][1] = table.getModel().getValueAt(i,1);
+            values[i][2] = table.getModel().getValueAt(i,2);
+        }
+
+        Object[][]aux = new Object[numOfElements][3];
+        for (int i = 0; i < numOfElements; i++) {
+
+            aux[i][0] = values[startPos + i][0];
+            aux[i][1] = values[startPos + i][1];
+            aux[i][2] = values[startPos + i][2];
+        }
+
+        Object [][] targetVal = {{values[endPos][0],values[endPos][1],values[endPos][2]}};
+
+        values[startPos + numOfElements - 1][0] = targetVal[0][0];
+        values[startPos + numOfElements - 1][1] = targetVal[0][1];
+        values[startPos + numOfElements - 1][2] = targetVal[0][2];
+
+        for (int i = 0; i < numOfElements; i++) {
+
+            values[endPos + i][0] = aux[i][0];
+            values[endPos + i][1] = aux[i][1];
+            values[endPos + i][2] = aux[i][2];
+        }
+
+        ISymbol[] symbols = new ISymbol[getRowCount()];
+        Object[] objects = new Object[getRowCount()];
+        String[] cads = new String[getRowCount()];
+
+        for (int i = 0; i < getRowCount(); i++) {
+            symbols[i] = (ISymbol) values[i][0];
+            objects[i] = values[i][1];
+            cads[i] = (String) values[i][2];
+        }
+
+        removeAllItems();
+        fillTableFromSymbolList(symbols,objects,cads);
+        table.addRowSelectionInterval(endPos,endPos+numOfElements-1);
+    }
+    
+    
+    public int[] getSelectedRows(){
+        return table.getSelectedRows();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/SymbolTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/General.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/General.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/General.java	(revision 42196)
@@ -0,0 +1,508 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.SystemColor;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.NumberFormat;
+import java.text.ParseException;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.BevelBorder;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.tools.locator.LocatorException;
+
+
+
+
+/**
+ * This class implements an useful and intuitive graphic interface to change some
+ * properties of the layer. This class extends AbstractThemeManager. The properties
+ * that allow modified are the name of the layer, the scale, if the user want to use
+ * Spatial index or not and the HyperLink. Also shows a scroll with a little resume
+ * with the properties of the layer.
+ * @author jmorell
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class General extends AbstractThemeManagerPage {
+
+	private static final long serialVersionUID = 1L;
+    private FLayer layer;
+	private NumberFormat nf = NumberFormat.getInstance();
+	private JPanel pnlLayerName = null;
+	private GridBagLayoutPanel pnlScale = null;
+	private JPanel pnlProperties = null;
+	private JLabel lblLayerName = null;
+	private JTextField txtLayerName = null;
+	private JTextField txtMaxScale = null;
+	private JTextArea propertiesTextArea = null;
+	private JRadioButton rdBtnShowAlways = null;
+	private JRadioButton rdBtnDoNotShow = null;
+	private JTextField txtMinScale = null;
+	private JScrollPane scrlProperties;
+
+    /**
+	 * This is the default constructor.
+	 */
+	public General() {
+		super();
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private  void initialize() {
+		this.setLayout(new BorderLayout());
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+		aux.addComponent(getPnlLayerName());
+		aux.addComponent(new JBlank(10, 10));
+		aux.addComponent("", getPnlScale());
+		JPanel aux2 = new JPanel(new GridLayout(1,2));
+		aux2.add(getPnlProperties());
+		aux.addComponent(aux2);
+
+
+
+		aux.setPreferredSize(getPreferredSize());
+		this.add(aux, BorderLayout.CENTER);
+		this.add(new JBlank(5, 10), BorderLayout.WEST);
+		this.add(new JBlank(5, 10), BorderLayout.EAST);
+
+	}
+
+    @Override
+    public int getPriority() {
+        return 1000;
+    }
+
+        
+
+	/**
+	 * Sets the necessary properties in the panel. This properties are
+	 * extracted from the layer. With this properties fills the TextFields,
+	 * ComboBoxes and the rest of GUI components.
+	 * @param FLayer layer,
+	 */
+	public void setModel(FLayer layer) {
+		this.layer = layer;
+
+		if (layer.getMinScale() != -1) {
+			getTxtMaxScale().setText(nf.format(layer.getMinScale()));
+		}
+		if (layer.getMaxScale() != -1) {
+			getTxtMinScale().setText(nf.format(layer.getMaxScale()));
+		}
+		if (layer.getMinScale() == -1 && layer.getMaxScale() == -1) {
+			getRdBtnShowAlways().setSelected(true);
+			txtMaxScale.setEnabled(false);
+			txtMinScale.setEnabled(false);
+
+		} else {
+			getRdBtnDoNotShowWhen().setSelected(true);
+			txtMaxScale.setEnabled(true);
+			txtMinScale.setEnabled(true);
+		}
+		txtLayerName.setText(layer.getName());
+		showLayerInfo();
+
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlLayerName() {
+		if (pnlLayerName == null) {
+			lblLayerName = new JLabel();
+			pnlLayerName = new JPanel();
+			lblLayerName.setText(PluginServices.getText(this,"Nombre") + ":");
+			lblLayerName.setComponentOrientation(ComponentOrientation.UNKNOWN);
+			pnlLayerName.setComponentOrientation(ComponentOrientation.UNKNOWN);
+			pnlLayerName.add(lblLayerName, null);
+			pnlLayerName.add(getTxtLayerName(), null);
+		}
+		return pnlLayerName;
+	}
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private GridBagLayoutPanel getPnlScale() {
+		if (pnlScale == null) {
+			pnlScale = new GridBagLayoutPanel();
+			pnlScale.setBorder(BorderFactory.createTitledBorder(
+    				BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
+					PluginServices.getText(this, "rango_de_escalas"),
+					TitledBorder.DEFAULT_JUSTIFICATION,
+					TitledBorder.DEFAULT_POSITION, null, null)
+				);
+			ButtonGroup buttonGroup = new ButtonGroup();
+			buttonGroup.add(getRdBtnShowAlways());
+			buttonGroup.add(getRdBtnDoNotShowWhen());
+			pnlScale.addComponent(getRdBtnShowAlways());
+			pnlScale.addComponent(getRdBtnDoNotShowWhen());
+			JPanel aux;
+
+
+			aux = new JPanel(new FlowLayout(FlowLayout.LEFT));
+			aux.add(getTxtMaxScale());
+			aux.add(new JLabel("(" + PluginServices.getText(this,"escala_maxima") + ")"));
+
+			GridBagLayoutPanel aux2;
+			aux2 = new GridBagLayoutPanel();
+			aux2.addComponent(PluginServices.getText(
+					this,"este_por_encima_de")+" 1:",
+					aux);
+			aux = new JPanel(new FlowLayout(FlowLayout.LEFT));
+			aux.add(getTxtMinScale());
+			aux.add(new JLabel("(" + PluginServices.getText(this,"escala_minima") + ")"));
+
+			aux2.addComponent(PluginServices.getText(
+					this,"este_por_debajo_de_")+" 1:",
+					aux);
+
+			pnlScale.addComponent(new JBlank(20, 1), aux2);
+
+			pnlScale.addComponent(new JBlank(20, 1), aux2);
+
+		}
+		return pnlScale;
+	}
+	/**
+	 * This method initializes jPanel2, this contains the ScrollPane with the
+	 * properies.
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlProperties() {
+		if (pnlProperties == null) {
+			pnlProperties = new JPanel();
+			pnlProperties.setBorder(BorderFactory.createTitledBorder(
+    				BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
+					PluginServices.getText(this, "propiedades"),
+					TitledBorder.DEFAULT_JUSTIFICATION,
+					TitledBorder.DEFAULT_POSITION, null, null)
+				);
+			pnlProperties.add(getScrlProperties(), null);
+		}
+		return pnlProperties;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtLayerName() {
+		if (txtLayerName == null) {
+		    txtLayerName = new JTextField(25);
+		    txtLayerName.setEditable(false);
+		}
+		return txtLayerName;
+	}
+
+	/**
+	 * This method initializes TxtMaxScale
+	 * @return jTextField1
+	 */
+	private JTextField getTxtMaxScale() {
+		if (txtMaxScale == null) {
+			txtMaxScale = new JTextField(15);
+			txtMaxScale.setEnabled(false);
+		}
+		return txtMaxScale;
+	}
+	/**
+	 * This method initilizes TxtArea, in this TextArea sets the text with
+	 * the properties of the layer
+	 * @return
+	 */
+	private JTextArea getPropertiesTextArea() {
+		if (propertiesTextArea == null) {
+			propertiesTextArea = new JTextArea();
+			propertiesTextArea.setEditable(false);
+			propertiesTextArea.setBackground(SystemColor.control);
+
+		}
+		return propertiesTextArea;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getScrlProperties() {
+		if (scrlProperties == null) {
+			scrlProperties = new JScrollPane();
+			scrlProperties.setViewportView(getPropertiesTextArea());
+			scrlProperties.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
+			scrlProperties.setPreferredSize(new Dimension(350, 180));
+		}
+		return scrlProperties;
+	}
+	/**
+	 * This method initializes jRadioButton
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getRdBtnShowAlways() {
+		if (rdBtnShowAlways == null) {
+			rdBtnShowAlways = new JRadioButton();
+			rdBtnShowAlways.setText(PluginServices.getText(this,"Mostrar_siempre"));
+			rdBtnShowAlways.setSelected(true);
+			rdBtnShowAlways.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					txtMaxScale.setEnabled(false);
+					txtMinScale.setEnabled(false);
+				}
+			});
+		}
+		return rdBtnShowAlways;
+	}
+	/**
+	 * This method initializes jRadioButton1
+	 *
+	 * @return javax.swing.JRadioButton
+	 */
+	private JRadioButton getRdBtnDoNotShowWhen() {
+		if (rdBtnDoNotShow == null) {
+			rdBtnDoNotShow = new JRadioButton();
+			rdBtnDoNotShow.setText(PluginServices.getText(this,"No_mostrar_la_capa_cuando_la_escala"));
+			rdBtnDoNotShow.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					txtMaxScale.setEnabled(true);
+					txtMinScale.setEnabled(true);
+				}
+			});
+		}
+		return rdBtnDoNotShow;
+	}
+	/**
+	 * This method initializes jTextField2
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getTxtMinScale() {
+		if (txtMinScale == null) {
+			txtMinScale = new JTextField(15);
+			txtMinScale.setEnabled(false);
+		}
+		return txtMinScale;
+	}
+
+	private String getLayerName(){
+		return txtLayerName.getText().toString();
+	}
+
+    /**
+     * Add the information of the layer to the textArea
+     */
+    private void showLayerInfo() {
+		try {
+			String info = ((FLyrDefault)layer).getInfoString();
+			if (info == null) {
+				StringBuffer buff= new StringBuffer();
+				Envelope fullExtentViewPort = layer.getFullEnvelope();
+				IProjection viewPortProj = layer.getMapContext().getProjection();
+				buff.append(PluginServices.getText(this,"Extent"));
+				buff.append(" ");
+				buff.append(viewPortProj.getAbrev());
+				buff.append(" (" + PluginServices.getText(this, "view_projection") + "):\n\t");
+				buff.append(PluginServices.getText(this,"Superior") + ":\t" + fullExtentViewPort.getMaximum(1) + "\n\t");
+				buff.append(PluginServices.getText(this,"Inferior") + ":\t" + fullExtentViewPort.getMinimum(1) + "\n\t");
+				buff.append(PluginServices.getText(this,"Izquierda") + ":\t" + fullExtentViewPort.getMinimum(0) + "\n\t");
+				buff.append(PluginServices.getText(this,"Derecha") + ":\t" + fullExtentViewPort.getMaximum(0) + "\n");
+				// show layer native projection
+				if (layer.getProjection() != null
+						&& !layer.getProjection().getAbrev().equals(
+								viewPortProj.getAbrev())) {
+					IProjection nativeLayerProj = layer.getProjection();
+					ICoordTrans ct = viewPortProj.getCT(nativeLayerProj);
+//					Rectangle2D r=new Rectangle2D.Double(fullExtentViewPort.getMinimum(0),fullExtentViewPort.getMinimum(1),fullExtentViewPort.getLength(0),fullExtentViewPort.getLength(1));
+//					Rectangle2D nativeLayerExtent = ct.convert(r);
+					Envelope nativeLayerExtent = fullExtentViewPort.convert(ct);
+					buff.append(PluginServices.getText(this,"Extent") + " ");
+					buff.append(nativeLayerProj.getAbrev());
+					buff.append(" (" + PluginServices.getText(this, "layer_native_projection") + "):\n\t");
+					buff.append(PluginServices.getText(this, "Superior")
+							+ ":\t" + nativeLayerExtent.getMaximum(1) + "\n\t");
+					buff.append(PluginServices.getText(this, "Inferior")
+							+ ":\t" + nativeLayerExtent.getMinimum(1) + "\n\t");
+					buff.append(PluginServices.getText(this, "Izquierda")
+							+ ":\t" + nativeLayerExtent.getMinimum(0) + "\n\t");
+					buff.append(PluginServices.getText(this, "Derecha") + ":\t"
+							+ nativeLayerExtent.getMaximum(0) + "\n");
+
+				}
+				if (layer instanceof FLyrVect) {
+					FeatureStore fStore=((FLyrVect)layer).getFeatureStore();
+
+					buff.append(PluginServices.getText(this,"Origen_de_datos") + ": ");
+					buff.append(fStore.getName());
+					info=buff.toString();
+
+					DataStoreParameters parameters=fStore.getParameters();
+					if (parameters instanceof FilesystemStoreParameters) {
+						info = info  + "\n" +
+						PluginServices.getText(this, "fichero")
+								+ ": "
+								+ ((FilesystemStoreParameters) parameters)
+										.getFile();
+					}else{
+						info = info + "\n" + fStore.getName() + "\n";
+					}
+					String sGeomType= "Unknow";
+
+					try {
+						GeometryType geomType = ((FLyrVect)layer).getTypeVectorLayer();
+						sGeomType = geomType.getName();
+					} catch (LocatorException e) {
+						NotificationManager.addError(e);
+					} catch (GeometryTypeNotSupportedException e) {
+						NotificationManager.showMessageWarning("Not supported GeometryType", e);
+					} catch (GeometryTypeNotValidException e) {
+						NotificationManager.showMessageWarning("Not valid GeometryType", e);
+					}
+
+					info += "\n" + PluginServices.getText(this,"type")+ ": "+sGeomType + "\n";
+
+				} else {
+					info=buff.toString();
+					info = info + PluginServices.getText(this,"Origen_de_datos") + ": " + layer.getName();
+				}
+
+			}
+			getPropertiesTextArea().setText(info);
+
+		} catch (ReadException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		} catch (DataException e) {
+			NotificationManager.addError(e.getMessage(), e);
+		}
+
+    }
+
+    /**
+     * Returns true or false if the scale is activa
+     */
+	private boolean isScaleActive() {
+		return getRdBtnDoNotShowWhen().isSelected();
+	}
+
+
+	public void acceptAction() {
+
+	}
+
+	public void cancelAction() {
+		// does nothing
+	}
+
+	/**
+	 * When we press the apply button, sets the new properties of the layer thar the
+	 * user modified using the UI components
+	 */
+	public void applyAction() {
+		if (isScaleActive()) {
+			try	{
+				layer.setMinScale((nf.parse(getTxtMaxScale().getText())).doubleValue());
+			} catch (ParseException ex)	{
+			    if (getTxtMaxScale().getText().compareTo("") == 0) {
+					layer.setMinScale(-1);
+				} else {
+					System.err.print(ex.getLocalizedMessage());
+				}
+			}
+
+			try	{
+			    layer.setMaxScale((nf.parse(getTxtMinScale().getText())).doubleValue());
+			} catch (ParseException ex)	{
+			    if (getTxtMinScale().getText().compareTo("") == 0) {
+					layer.setMaxScale(-1);
+				} else {
+					System.err.print(ex.getLocalizedMessage());
+				}
+			}
+
+		} else {
+	        layer.setMinScale(-1);
+	        layer.setMaxScale(-1);
+		}
+
+		if (!getLayerName().equals(layer.getName())){
+			layer.setName(getLayerName());
+		}
+
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.awt.Component#getName()
+	 */
+	public String getName() {
+		return PluginServices.getText(this,"General");
+	}
+}  
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/General.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Features.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Features.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Features.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: Features.java 29598 2009-06-29 16:09:14Z jpiera $
+* $Log$
+* Revision 1.3  2007-05-17 09:32:37  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+public class Features extends AbstractParentPanel {
+
+	public String getDescription() {
+		// TODO Implement it
+		throw new Error("Not yet implemented!");
+
+	}
+	public String getTitle() {
+		return PluginServices.getText(Features.class, "features");
+	}
+
+	public boolean isSuitableFor(FLayer layer) {
+		return layer instanceof FLyrVect;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Features.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractThemeManagerPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractThemeManagerPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractThemeManagerPage.java	(revision 42196)
@@ -0,0 +1,181 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.operations.Classifiable;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.propertypage.PropertiesPage;
+
+
+public abstract class AbstractThemeManagerPage extends JPanel implements PropertiesPage {
+	/**
+	 * Cuando hay varios capas vectoriales seleccionados, devolver� el �ltimo.
+	 *
+	 * @param layers Grupo de layers.
+	 *
+	 * @return la primera flayer seleccionada.
+	 */
+	protected FLayer getFirstActiveLayerVect(FLayers layers) {
+		// Comprobar en openLegendManager que hay alg�n capa activo!
+		FLayer[] activeLyrs = layers.getActives();
+
+		if (activeLyrs.length == 0) {
+			JOptionPane.showMessageDialog(null,
+				Messages.getString("necesita_una_capa_activa"), "",
+				JOptionPane.ERROR_MESSAGE);
+
+			return null;
+		}
+
+		FLayer lyr = null;
+
+		for (int i = 0; i < activeLyrs.length; i++) {
+			if (activeLyrs[i] instanceof FLayers) {
+				lyr = getFirstActiveLayerVect((FLayers) activeLyrs[i]);
+			}
+
+			if (activeLyrs[i] instanceof Classifiable) {
+				Classifiable auxC = (Classifiable) activeLyrs[i];
+				ILegend theLegend = auxC.getLegend();
+
+				if (theLegend instanceof IVectorLegend) {
+					lyr = (FLayer) auxC;
+				}
+			}
+		}
+
+		if (lyr == null) {
+			JOptionPane.showMessageDialog(null,
+				Messages.getString(
+						PluginServices.getText(this, "necesita_una_capa_vectorial_activa") +
+						"\n\n"+
+						PluginServices.getText(this, "Por_favor_active_la_capa") + "."),
+				"",
+				JOptionPane.ERROR_MESSAGE);
+			return null;
+		}
+
+		return lyr;
+	}
+
+        public boolean isTabEnabledForLayer(FLayer layer) {
+            return ThemeManagerWindow.isTabEnabledForLayer(this, layer);
+        }
+        
+        /**
+         * Retorna la prioridad usada para determinar la posicion de la pesta�a.
+         * 
+         * Cuanto mas alta sea esta mas a la izquierda estara la pesta�a.
+         * @return La prioridad 
+         */
+        public int getPriority() {
+            return 50;
+        }
+        
+	/**
+	 * Returns the name of this ThemeManagerPage's tab, the text returned by this
+	 * method will be shown in the text of this panel's tab.
+	 */
+	public abstract String getName();
+
+	/**
+	 * <p>
+	 * Method invoked when the Ok button is pressed from the ThemeManagerWindow.
+	 * It will cause the changes performed by the user to take effect into the
+	 * layer if the Apply button wasn't pressed yet. In case Apply button was
+	 * pressed, then the programmer can choose between apply the changes again or
+	 * not.<br>
+	 * </p>
+	 * <p>
+	 * It shouldn't be a problem rather than the potential consumption of time
+	 * required in when applying such changes.<br>
+	 * </p>
+	 * <p>
+	 * <b>Notice</b> that after the call of this method the ThemeManagerWindow will be closed.
+	 * </p>
+	 */
+	public abstract void acceptAction();
+
+	/**
+	 * <p>
+	 * Method invoked when the Cancel button is pressed from the ThemeManagerWindow.
+	 * It will cause that the changes performed will be discarded.
+	 * </p>
+	 */
+	public abstract void cancelAction();
+
+	/**
+	 * Method invoked when the Apply button is pressed from the ThemeManagerWindow.
+	 * It will cause the changes performed by the user to take effect inmediately
+	 * into the the layer.
+	 */
+	public abstract void applyAction();
+
+	/**
+	 * This method is invoked during the initialization of the ThemeManagerWindow
+	 * and causes the dialog to be updated to reflect the current settings of
+	 * the layer in the context that this panel was designed for.
+	 * @param layer, the target FLayer
+	 */
+	public abstract void setModel(FLayer layer);
+
+    void setModel(Object obj) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+    
+    public String getTitle() {
+        return this.getName();
+    }
+    
+    public boolean whenAccept()  {
+        acceptAction();
+        return true;
+    }
+
+    public boolean whenApply()  {
+        applyAction();
+        return true;
+    }
+
+    public boolean whenCancel()  {
+        cancelAction();
+        return true;
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/AbstractThemeManagerPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Categories.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Categories.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Categories.java	(revision 42196)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: Categories.java 29598 2009-06-29 16:09:14Z jpiera $
+* $Log$
+* Revision 1.3  2007-05-17 09:32:37  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+public class Categories extends AbstractParentPanel {
+
+	public String getDescription() {
+		// TODO Implement it
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(Categories.class, "categories");
+	}
+
+	public boolean isSuitableFor(FLayer layer) {
+		return layer instanceof FLyrVect;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Categories.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindow.java	(revision 42196)
@@ -0,0 +1,140 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.app.project.documents.view.ViewDocument;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class ThemeManagerWindow {
+
+    private static final Logger logger = LoggerFactory.getLogger(ThemeManagerWindow.class);
+
+    private static final long serialVersionUID = 4650656815369149211L;
+    /*
+     private static int selectedTabIndex = 0;
+     private static ArrayList<Class<? extends AbstractThemeManagerPage>> pages =
+     new ArrayList<Class<? extends AbstractThemeManagerPage>>();
+     private FLayer layer;
+     private JTabbedPane tabs = new JTabbedPane();  //  @jve:decl-index=0:
+     private JPanel panelButtons;
+     */
+    private static Map<Class<? extends AbstractThemeManagerPage>, List<Class<? extends FLayer>>> s
+            = new HashMap<Class<? extends AbstractThemeManagerPage>, List<Class<? extends FLayer>>>();
+
+    private static class ThemeManagerPropertiesPageFactory implements PropertiesPageFactory {
+
+        private Class<? extends AbstractThemeManagerPage> pageClass;
+        private AbstractThemeManagerPage page = null;
+        private FLayer layer = null;
+
+        public ThemeManagerPropertiesPageFactory(Class<? extends AbstractThemeManagerPage> pageClass) {
+            this.pageClass = pageClass;
+        }
+
+        private AbstractThemeManagerPage getPage(FLayer layer) throws InstantiationException, IllegalAccessException {
+            if (this.layer == null || this.layer != layer) {
+                AbstractThemeManagerPage p = pageClass.newInstance();
+                p.setModel(layer);
+                this.page = p;
+                this.layer = layer;
+            }
+            return this.page;
+        }
+
+        public String getGroupID() {
+            return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+        }
+
+        public boolean isVisible(Object obj) {
+            try {
+                AbstractThemeManagerPage page = this.getPage((FLayer) obj);
+                return page.isTabEnabledForLayer((FLayer) obj);
+            } catch (Throwable th) {
+                logger.warn("can't determine if the page must be visible to the object '" + obj + "'", th);
+            }
+            return false;
+        }
+
+        public PropertiesPage create(Object obj) {
+            try {
+                return this.getPage((FLayer) obj);
+            } catch (Exception ex) {
+                logger.warn("Can't create the page '"+this.pageClass+"' asociated to '"+obj+"'.",ex);
+                return null;
+            }
+        }
+
+    }
+
+    public ThemeManagerWindow() {
+    }
+
+    public static void addPage(Class<? extends AbstractThemeManagerPage> pageClass) {
+        PropertiesPageManager manager = MapControlLocator.getPropertiesPageManager();
+        manager.registerFactory(new ThemeManagerPropertiesPageFactory(pageClass));
+    }
+
+    public static void setTabEnabledForLayer(Class<? extends AbstractThemeManagerPage> abstractThemeManagerPageClass, Class<? extends FLayer> fLayerClazz, boolean enabled) {
+        ArrayList<Class<? extends FLayer>> enabledLayers;
+        if (enabled == true) {
+            if (!s.containsKey(abstractThemeManagerPageClass)) {
+                enabledLayers = new ArrayList<Class<? extends FLayer>>();
+                enabledLayers.add(fLayerClazz);
+                s.put(abstractThemeManagerPageClass, enabledLayers);
+            } else {
+                enabledLayers = (ArrayList<Class<? extends FLayer>>) s.get(abstractThemeManagerPageClass);
+                enabledLayers.add(fLayerClazz);
+            }
+        } else {
+            if (!s.containsKey(abstractThemeManagerPageClass)) {
+                return;
+            }
+            enabledLayers = (ArrayList<Class<? extends FLayer>>) s.get(abstractThemeManagerPageClass);
+            enabledLayers.remove(fLayerClazz);
+        }
+    }
+
+    ;
+
+        public static boolean isTabEnabledForLayer(AbstractThemeManagerPage page, FLayer layer) {
+        try {
+            return s.get(page.getClass()).contains(layer.getClass());
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/ThemeManagerWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Quantities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Quantities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Quantities.java	(revision 42196)
@@ -0,0 +1,63 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: Quantities.java 29598 2009-06-29 16:09:14Z jpiera $
+* $Log$
+* Revision 1.3  2007-05-17 09:32:37  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2007/03/09 11:25:00  jaume
+* Advanced symbology (start committing)
+*
+* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+public class Quantities extends AbstractParentPanel {
+
+	public String getDescription() {
+		return "testing per a comprovar l'agrupament";
+	}
+
+	public String getParentTitle() {
+		return null;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(Quantities.class, "quantities");
+	}
+
+	public boolean isSuitableFor(FLayer layer) {
+		return layer instanceof FLyrVect;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/Quantities.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendManager.java	(revision 42196)
@@ -0,0 +1,1106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.prefs.Preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTextArea;
+import javax.swing.JTree;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.MutableTreeNode;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.WriteLegendException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.operations.Classifiable;
+import org.gvsig.fmap.mapcontext.layers.operations.ClassifiableVectorial;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendReader;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendWriter;
+import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * Implements the panel which allows the user to control all the information
+ * about the
+ * legends of a layer in order to improve the information that it offers to the
+ * user.
+ * There are options to create, save or load an existing legend.
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class LegendManager extends AbstractThemeManagerPage {
+
+    private static final Logger logger =
+        LoggerFactory.getLogger(LegendManager.class);
+    
+    private static final long serialVersionUID = 7989057553773181019L;
+//    private static ArrayList<Class<? extends ILegendPanel>> legendPool =
+//        new ArrayList<Class<? extends ILegendPanel>>();
+    // private static ArrayList<Class<? extends IFMapLegendDriver>>
+    // legendDriverPool = new ArrayList<Class<? extends IFMapLegendDriver>>();
+
+    private FLayer layer;
+    private ILegend legend; // Le asignaremos la leyenda del primer tema activo.
+    private Hashtable<Class<? extends ILegendPanel>, ILegendPanel> pages =
+        new Hashtable<Class<? extends ILegendPanel>, ILegendPanel>();
+    private JPanel topPanel = null;
+    private JTextArea titleArea = null;
+    private JPanel preview = null;
+    private JScrollPane jTitleScrollPane = null;
+    private JTree jTreeLegends;
+    private ILegendPanel activePanel;
+    private JScrollPane legendTreeScrollPane;
+    private boolean dirtyTree_;
+    private DefaultMutableTreeNode root = new DefaultMutableTreeNode();
+    private DefaultTreeModel treeModel;
+    private JScrollPane jPanelContainer;
+    private JPanel jCentralPanel;
+    private JSplitPane jSplitPane;
+    private boolean isTreeListenerDisabled;
+    private JButton btnSaveLegend;
+    private JButton btnLoadLegend;
+    private Hashtable<FLayer, ILegend> table = null;
+    private boolean empty = true;
+    private JLabel iconLabel;
+
+    public static String defaultLegendFolderPath;
+    {
+
+        Preferences prefs = Preferences.userRoot().node("gvsig.foldering");
+        defaultLegendFolderPath = prefs.get("LegendsFolder", "");
+    }
+    
+    private ActionListener loadSaveLegendAction = new ActionListener() {
+
+        public void actionPerformed(java.awt.event.ActionEvent e) {
+            JComponent c = (JComponent) e.getSource();
+            if (c.equals(getBtnSaveLegend())) {
+                
+                try {
+                    saveLegend();
+                } catch (Exception exc) {
+                    JOptionPane.showMessageDialog(
+                        ApplicationLocator.getManager().getRootComponent(),
+                        Messages.getText("_Unable_to_save_legend")
+                        + "\n\n" + exc.getMessage(),
+                        Messages.getText("legend"),
+                        JOptionPane.WARNING_MESSAGE);
+                    return;
+                }
+
+            } else
+                if (c.equals(getBtnLoadLegend())) {
+                    try {
+                        loadLegend();
+                    } catch (Exception e1) {
+                        JOptionPane.showMessageDialog(
+                            ApplicationLocator.getManager().getRootComponent(),
+                            Messages.getText("_Unable_to_read_legend")
+                            + "\n\n" + e1.getMessage(),
+                            Messages.getText("legend"),
+                            JOptionPane.WARNING_MESSAGE);
+                        return;
+                    }
+                }
+        }
+
+        private void saveLegend() throws Exception {
+            
+            List<LegendFileFilter> filters = getLegendFileFilters(true);
+            if (filters.size() == 0) {
+                JOptionPane.showMessageDialog(
+                    ApplicationLocator.getManager().getRootComponent(),
+                    Messages.getText("_No_output_format_available"),
+                    Messages.getText("legend"),
+                    JOptionPane.WARNING_MESSAGE);
+                return;
+            }
+
+            ILegend legend = activePanel.getLegend();
+            MapContextManager mcoman = MapContextLocator.getMapContextManager();
+            
+            JFileChooser fileChooser = new JFileChooser();
+            fileChooser.setAcceptAllFileFilterUsed(false);
+            
+            for (int i=0; i<filters.size(); i++) {
+                fileChooser.addChoosableFileFilter(filters.get(i));
+            }
+
+            if (fileChooser.showSaveDialog(
+                ApplicationLocator.getManager().getRootComponent())
+                == JFileChooser.APPROVE_OPTION) {
+                
+                LegendFileFilter lff = (LegendFileFilter) fileChooser.getFileFilter();
+                
+                File selfile = fileChooser.getSelectedFile();
+                if (!selfile.getAbsolutePath().toLowerCase().endsWith(
+                    "." + lff.getFileExtension().toLowerCase())) {
+                    
+                    selfile = new File(selfile.getAbsolutePath() +
+                        "." + lff.getFileExtension().toLowerCase());
+                }
+                
+                ILegendWriter lw = null;
+                lw = mcoman.createLegendWriter(legend.getClass(), lff.getFileExtension());
+                
+                if (lw == null) {
+                    throw new WriteLegendException(legend,
+                        new Exception("Unable to create legend writer."));
+                } else {
+                    lw.write(legend, selfile, lff.getFileExtension());
+                }
+            }
+        }
+
+        /**
+         * 
+         * @param writing true for writing; false for reading
+         * @return
+         */
+        private List<LegendFileFilter> getLegendFileFilters(boolean writing) {
+            
+            List<LegendFileFilter> resp = new ArrayList<LegendFileFilter>();
+            MapContextManager mcoman = MapContextLocator.getMapContextManager();
+            List wformats = null;
+            
+            if (writing) {
+                wformats = mcoman.getLegendWritingFormats();
+            } else {
+                wformats = mcoman.getLegendReadingFormats();
+            }
+            
+            String fmt = null;
+            for (int i=0; i<wformats.size(); i++) {
+                fmt = (String) wformats.get(i);
+                fmt = getFileExtension(fmt);
+                if (fmt != null) {
+                    resp.add(new LegendFileFilter(fmt));
+                }
+            }
+            return resp;
+        }
+        
+        
+        /**
+         * Returns null if mime format is not parsed properly
+         * 
+         * @param fmt MIME format
+         * 
+         * @return
+         */
+        private String getFileExtension(String fmt) {
+            // Example: "text/xml; subtype=gml/2.1.2" => "gml"
+            if (fmt == null) {
+                return null;
+            }
+            String[] parts = fmt.split(";");
+            String aux = "";
+            if (parts.length > 1) {
+                aux = parts[1].trim();
+            } else {
+                aux = parts[0].trim();
+            }
+            parts = aux.split("=");
+            if (parts.length > 1) {
+                aux = parts[1].trim();
+                // Example: aux = "gml/2.1.2"
+                parts = aux.split("/");
+                return parts[0].length() == 0 ? null : parts[0].toLowerCase();
+            } else {
+                aux = parts[0].trim();
+                // Example: "text/xml"
+                parts = aux.split("/");
+                if (parts.length > 1) {
+                    return parts[1].length() == 0 ? null : parts[1].toLowerCase();
+                } else {
+                    return aux.length() == 0 ? null : aux.toLowerCase();
+                }
+            }
+        }        
+
+        private void loadLegend() throws Exception {
+            
+            List<LegendFileFilter> filters = getLegendFileFilters(false);
+            if (filters.size() == 0) {
+                JOptionPane.showMessageDialog(
+                    ApplicationLocator.getManager().getRootComponent(),
+                    Messages.getText("_No_input_format_available"),
+                    Messages.getText("legend"),
+                    JOptionPane.WARNING_MESSAGE);
+                return;
+            }
+
+            JFileChooser fileChooser = new JFileChooser();
+            fileChooser.setAcceptAllFileFilterUsed(false);
+            
+            for (int i=0; i<filters.size(); i++) {
+                fileChooser.addChoosableFileFilter(filters.get(i));
+            }
+
+            // open a file
+            if (fileChooser.showOpenDialog((Component) PluginServices
+                .getMainFrame()) == JFileChooser.APPROVE_OPTION) {
+                
+                File file = fileChooser.getSelectedFile();
+                LegendFileFilter lff = (LegendFileFilter) fileChooser.getFileFilter();
+                MapContextManager mcoman = MapContextLocator.getMapContextManager();
+                ILegendReader lr = mcoman.createLegendReader(lff.getFileExtension());
+                
+                ILegend leg = lr.read(file, Geometry.TYPES.GEOMETRY);
+                applyLegend(leg);
+            }
+        }
+    };
+
+    //
+    // JLegendFileChooser jfc = new
+    // JLegendFileChooser(getLegendDrivers(),true);
+    // jfc.setAcceptAllFileFilterUsed(false);
+    //
+    //
+    // File basedir = null;
+    // jfc.setCurrentDirectory(basedir);
+    // if (jfc.showSaveDialog((Component) PluginServices.getMainFrame())
+    // == JFileChooser.APPROVE_OPTION) {
+    //
+    // File file = jfc.getSelectedFile();
+    // String version = jfc.getDriverVersion();
+    // IFMapLegendDriver driver = jfc.getSuitableDriver();
+    //
+    // if(!(driver instanceof FMapGVLDriver)){
+    // Object[] options = {PluginServices.getText(this, "yes"),
+    // PluginServices.getText(this, "no")};
+    //
+    // int answer =
+    // JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
+    // PluginServices.getText(this, "not_GVSLEG_save_question")+"\n"+ //GVL
+    // changed to GVSLEG, be aware
+    // PluginServices.getText(this, "desea_continuar"),
+    // PluginServices.getText(this, "confirmation_dialog"),
+    // JOptionPane.YES_NO_OPTION,
+    // JOptionPane.QUESTION_MESSAGE,
+    // null,
+    // options, options[1]);
+    // if (answer!=JOptionPane.OK_OPTION) {
+    // // 'Cancel' pressed or window closed: don't save anythig, exit
+    // save dialog
+    // return;
+    // }
+    // }
+    //
+    // if (file.exists()) {
+    // Object[] options = {PluginServices.getText(this, "yes"),
+    // PluginServices.getText(this, "no"),
+    // PluginServices.getText(this, "Cancel")};
+    //
+    // int answer =
+    // JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
+    // PluginServices.getText(this,
+    // "fichero_ya_existe_seguro_desea_guardarlo"),
+    // PluginServices.getText(this, "confirmation_dialog"),
+    // JOptionPane.YES_NO_CANCEL_OPTION,
+    // JOptionPane.QUESTION_MESSAGE,
+    // null,
+    // options, options[1]);
+    // if (answer!=JOptionPane.OK_OPTION) {
+    // // 'Cancel' pressed or window closed: don't save anythig, exit
+    // save dialog
+    // return;
+    // }
+    // }
+    //
+    //
+    // try {
+    // driver.write(layer.getMapContext().getLayers(),layer,
+    // activePanel.getLegend(), file, version);
+    //
+    // } catch (LegendDriverException e1) {
+    // int type = e1.getType();
+    // String message=PluginServices.getText(this,
+    // "could_not_save_legend")+":\n";
+    //
+    // if ((type & LegendDriverException.SAVE_LEGEND_ERROR) != 0){
+    // type = type & ~LegendDriverException.SAVE_LEGEND_ERROR;
+    // message += PluginServices.getText(this,
+    // "error_writing_file")+".\n";
+    // }
+    // if ((type & LegendDriverException.UNSUPPORTED_LEGEND_CREATION) !=
+    // 0){
+    // type = type & ~LegendDriverException.UNSUPPORTED_LEGEND_CREATION;
+    // message += "-"+ PluginServices.getText(this,
+    // "legend_format_not_yet_supported")+"\n";
+    // }
+    // if (type != 0) {
+    // message = "-"+PluginServices.getText(this, "unknown_error")+"\n";
+    // }
+    // JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+    // message);
+    // }
+    // }
+    // } else if (c.equals(getBtnLoadLegend())) {
+    //
+    // JLegendFileChooser jfc = new
+    // JLegendFileChooser(getLegendDrivers());
+    // jfc.setAcceptAllFileFilterUsed(false);
+    //
+    // if (jfc.showOpenDialog((Component) PluginServices.getMainFrame())
+    // == JFileChooser.APPROVE_OPTION) {
+    // File file=jfc.getSelectedFile();
+    // IFMapLegendDriver driver = jfc.getSuitableDriver();
+    // String path = file.getAbsolutePath();
+    // defaultLegendFolderPath = path.substring(0,
+    // path.lastIndexOf(File.separator));
+    //
+    // try {
+    // table = driver.read(layer.getMapContext().getLayers(),layer,
+    // file);
+    //
+    // if(table.containsKey(layer))
+    // applyLegend((ILegend) table.get(layer));
+    //
+    //
+    // } catch (LegendDriverException e1) {
+    // int type = e1.getType();
+    // String message = PluginServices.getText(this,
+    // "the_legend_will_not_be_applied")+":\n";
+    // boolean hasReason = false;
+    //
+    // if ((type &
+    // LegendDriverException.CLASSIFICATION_FIELDS_NOT_FOUND) != 0){
+    // type = type &
+    // ~LegendDriverException.CLASSIFICATION_FIELDS_NOT_FOUND;
+    // message +="-"+ PluginServices.getText(this,
+    // "classification_field_does_not_exists")+"\n";
+    // hasReason = true;
+    // }
+    // if ((type & LegendDriverException.LEGEND_TYPE_NOT_YET_SUPPORTED)
+    // != 0){
+    // type = type &
+    // ~LegendDriverException.LEGEND_TYPE_NOT_YET_SUPPORTED;
+    // message += "-"+ PluginServices.getText(this,
+    // "legend_type_not_yet_supported")+"\n";
+    // hasReason = true;
+    // }
+    // if ((type & LegendDriverException.SYMBOL_TYPE_NOT_YET_SUPPORTED)
+    // != 0){
+    // type = type &
+    // ~LegendDriverException.SYMBOL_TYPE_NOT_YET_SUPPORTED;
+    // message += "-"+ PluginServices.getText(this,
+    // "unsupported_symbol_type")+"\n";
+    // hasReason = true;
+    // }
+    // if ((type & LegendDriverException.LAYER_SHAPETYPE_MISMATCH) !=
+    // 0){
+    // type = type & ~LegendDriverException.LAYER_SHAPETYPE_MISMATCH;
+    // message += "-"+ PluginServices.getText(this,
+    // "layer_geometry_and_legend_types_are_incompatible")+"\n";
+    // hasReason = true;
+    // }
+    // if ((type & LegendDriverException.PARSE_LEGEND_FILE_ERROR) != 0){
+    // type = type & ~LegendDriverException.PARSE_LEGEND_FILE_ERROR;
+    // message += "-"+ PluginServices.getText(this,
+    // "failed_reading_file")+"\n";
+    // hasReason = true;
+    // }
+    // if ((type &
+    // LegendDriverException.UNSUPPORTED_LEGEND_FILE_VERSION) != 0){
+    // type = type &
+    // ~LegendDriverException.UNSUPPORTED_LEGEND_FILE_VERSION;
+    // message += "-"+ PluginServices.getText(this,
+    // "unsupported_legend_file_version")+"\n";
+    // hasReason = true;
+    // }
+    // if ((type & LegendDriverException.UNSUPPORTED_LEGEND_READING) !=
+    // 0){
+    // type = type & ~LegendDriverException.UNSUPPORTED_LEGEND_READING;
+    // message +="-"+ PluginServices.getText(this,
+    // "unsupported_legend_file_format")+"\n";
+    // hasReason = true;
+    // }
+    // if ((type & LegendDriverException.LAYER_NAME_NOT_FOUND) != 0){
+    // type = type & ~LegendDriverException.UNSUPPORTED_LEGEND_READING;
+    // message +="-"+ PluginServices.getText(this,
+    // "could_not_find_layer")+"\n";
+    // hasReason = true;
+    // }
+    // if (!hasReason) {
+    // message = "-"+ PluginServices.getText(this,
+    // "unknown_error")+"\n";
+    // }
+    // JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+    // message);
+    // }
+    // }
+    // }
+
+    // private IFMapLegendDriver[] getLegendDrivers() {
+    // Class<?>[] legendDriverClasses = legendDriverPool.toArray(new Class[0]);
+    // ArrayList<IFMapLegendDriver> drivers = new
+    // ArrayList<IFMapLegendDriver>();
+    // for (int i = 0; i < legendDriverClasses.length; i++) {
+    // String message = PluginServices.getText(this,
+    // "adding_legend_file_format_support")+": ";
+    // try {
+    // Class<?> c = legendDriverClasses[i];
+    // drivers.add((IFMapLegendDriver) c.newInstance());
+    // } catch (Exception e) {
+    // NotificationManager.addError(message+PluginServices.getText(this,
+    // "failed"), e);
+    // }
+    // NotificationManager.addInfo(message+PluginServices.getText(this, "OK"));
+    //
+    // }
+    // return (IFMapLegendDriver[]) drivers.toArray(new IFMapLegendDriver[0]);
+    // };
+
+    private String getExtension(File f) {
+        String ext = null;
+        String s = f.getName();
+        int i = s.lastIndexOf('.');
+
+        if (i > 0 && i < s.length() - 1) {
+            // ext = s.substring(i + 1).toLowerCase();
+            ext = s.substring(i).toLowerCase();
+        }
+        return ext;
+    }
+
+    public LegendManager() {
+        initialize();
+    }
+
+    private void initialize() {
+        setLayout(new BorderLayout());
+        add(getTopPanel(), BorderLayout.NORTH);
+        add(getSplitPane(), BorderLayout.CENTER);
+        setSize(500, 360);
+        treeModel = new DefaultTreeModel(root);
+    }
+
+    private JSplitPane getSplitPane() {
+        if (jSplitPane == null) {
+            jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+            JPanel aux = new JPanel(new BorderLayout(0, 5));
+            aux.add(getLegendTreeScrollPane(), BorderLayout.CENTER);
+            aux.add(getPreviewPanel(), BorderLayout.SOUTH);
+            jSplitPane.setLeftComponent(aux);
+            jSplitPane.setRightComponent(getCentralPanel());
+            jSplitPane.setDividerLocation(150);
+        }
+        return jSplitPane;
+    }
+
+    private JPanel getCentralPanel() {
+        if (jCentralPanel == null) {
+            jCentralPanel = new JPanel(new BorderLayout(0, 10));
+            jCentralPanel.add(getTitleScroll(), BorderLayout.NORTH);
+            jCentralPanel.add(getJPanelContainer(), BorderLayout.CENTER);
+        }
+        return jCentralPanel;
+    }
+
+    private JScrollPane getJPanelContainer() {
+        if (jPanelContainer == null) {
+            jPanelContainer = new JScrollPane();
+        }
+        return jPanelContainer;
+    }
+
+    /**
+     * This method initializes jPanel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getTopPanel() {
+        if (topPanel == null) {
+            topPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0));
+            topPanel.setPreferredSize(new Dimension(638, 31));
+            topPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
+                null, "",
+                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+            topPanel.add(getBtnSaveLegend(), null);
+            topPanel.add(getBtnLoadLegend(), null);
+        }
+        return topPanel;
+    }
+
+    private JButton getBtnSaveLegend() {
+        if (btnSaveLegend == null) {
+            btnSaveLegend =
+                new JButton(PluginServices.getText(this, "Guardar_leyenda")
+                    + "...");
+            btnSaveLegend.addActionListener(loadSaveLegendAction);
+        }
+        return btnSaveLegend;
+    }
+
+    private JButton getBtnLoadLegend() {
+        if (btnLoadLegend == null) {
+            btnLoadLegend =
+                new JButton(PluginServices.getText(this, "Recuperar_leyenda")
+                    + "...");
+            btnLoadLegend.addActionListener(loadSaveLegendAction);
+        }
+        return btnLoadLegend;
+    }
+
+    /**
+     * This method initializes jTextArea
+     * 
+     * @return javax.swing.JTextArea
+     */
+    private JTextArea getTitleArea() {
+        if (titleArea == null) {
+            titleArea = new JTextArea();
+            titleArea.setBackground(java.awt.SystemColor.control);
+            titleArea.setLineWrap(true);
+            titleArea.setRows(0);
+            titleArea.setWrapStyleWord(false);
+            titleArea.setEditable(false);
+            titleArea.setPreferredSize(new java.awt.Dimension(495, 40));
+        }
+        return titleArea;
+    }
+
+    /**
+     * This method initializes jPanel1
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPreviewPanel() {
+        if (preview == null) {
+            preview = new JPanel();
+            preview.setBorder(javax.swing.BorderFactory
+                .createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+            preview.setBackground(java.awt.SystemColor.text);
+            preview.setLayout(new BorderLayout(5, 5));
+            preview.add(getIconLabel());
+            preview.setPreferredSize(new Dimension(getSplitPane()
+                .getDividerLocation(), 130));
+            preview.setBackground(Color.white);
+        }
+        return preview;
+    }
+
+    private JLabel getIconLabel() {
+        if (iconLabel == null) {
+            iconLabel = new JLabel();
+            iconLabel.setVerticalAlignment(JLabel.CENTER);
+            iconLabel.setHorizontalAlignment(JLabel.CENTER);
+        }
+
+        return iconLabel;
+    }
+
+    /**
+     * This method initializes jScrollPane
+     * 
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getLegendTreeScrollPane() {
+        if (legendTreeScrollPane == null) {
+            legendTreeScrollPane = new JScrollPane();
+            legendTreeScrollPane.setViewportView(getJTreeLegends());
+        }
+        return legendTreeScrollPane;
+    }
+
+    /**
+     * <p>
+     * Adds a new fully-featured legend panel to the LegendManager.<br>
+     * </p>
+     * 
+     * <p>
+     * <b>CAUTION:</b> Trying to add a child page whose parent hasn't been added
+     * yet causes the application to fall in an infinite loop. This is a known
+     * bug, sorry. Just avoid this case or try to fix it (lol).<br>
+     * </p>
+     * 
+     * @param page
+     *            , Class of type ILegendPanel
+     * @deprecated use SymbologySwingManager.registerLegendEditor
+     */
+    public static void addLegendPage(Class<? extends ILegendPanel> iLegendPanelClass) {
+        SymbologySwingManager manager = SymbologySwingLocator.getSwingManager();
+        manager.registerLegendEditor(iLegendPanelClass);
+    }
+
+    /**
+     * Causes the component to be autofilled with the legend pages that
+     * were added through the static method addLegendPage(ILegendPanel page)
+     */
+    private void fillDialog() {
+        if (empty) {
+            SymbologySwingManager manager = SymbologySwingLocator.getSwingManager();
+              
+            Iterator<ILegendPanel> it = manager.getLegendEditors(layer).iterator();
+            while( it.hasNext() ) {
+                ILegendPanel page = it.next();
+                pages.put(page.getClass(), page); 
+            }
+            
+            Enumeration<ILegendPanel> enume = pages.elements();
+            while (enume.hasMoreElements()) {
+                ILegendPanel page = enume.nextElement();
+                doInsertNode(treeModel, page);
+            }
+            getJTreeLegends().setModel(treeModel);
+            getJTreeLegends().repaint();
+            empty = false;
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private DefaultMutableTreeNode findNode(Class searchID) {
+        String title;
+        try {
+            title =
+                ((ILegendPanel) Class.forName(searchID.getName()).newInstance())
+                    .getTitle();
+        } catch (Exception e) {
+            // this should be impossible, but anyway this case will be treat as
+            // the node does not
+            // exist.
+            return null;
+        }
+
+        Enumeration e = root.breadthFirstEnumeration();
+        while (e.hasMoreElements()) {
+            DefaultMutableTreeNode nodeAux =
+                (DefaultMutableTreeNode) e.nextElement();
+            if (nodeAux != null) {
+                ILegendPanel legend = (ILegendPanel) nodeAux.getUserObject();
+                if (legend == null)
+                    continue; // Root node
+                if (legend.getTitle().equals(title)) {
+                    return nodeAux;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * If parent_node == null, add to root.
+     * Returns added node
+     * 
+     * @param tm
+     * @param parent_node
+     * @param item
+     */
+    private MutableTreeNode insertNodeHere(
+        DefaultTreeModel tm,
+        MutableTreeNode parent_node,
+        ILegendPanel item) {
+        
+        MutableTreeNode pn = null;
+        
+        if (parent_node == null) {
+            pn = root;
+        } else {
+            pn = parent_node;
+        }
+        
+        DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(item);
+        int children = pn.getChildCount();
+        int pos = 0;
+        String pTitle = null;
+        
+        for (int i = 0; i < children; i++) {
+            DefaultMutableTreeNode node =
+                (DefaultMutableTreeNode) tm.getChild(pn, i);
+            if (node.getUserObject() instanceof ILegendPanel) {
+                pTitle = ((ILegendPanel) node.getUserObject()).getTitle();
+                if (pTitle.compareTo(item.getTitle()) < 0) {
+                    pos++;
+                }
+            }
+        }
+        tm.insertNodeInto(nodeValue, pn, pos);
+        return nodeValue;
+    }
+    
+    /**
+     * Returns inserted node
+     * 
+     * @param tm
+     * @param page
+     * @return
+     */
+    private MutableTreeNode doInsertNode(DefaultTreeModel tm, ILegendPanel page) {
+        
+        if (tm == null || page == null) {
+            return null;
+        }
+        
+        MutableTreeNode aux = findNode(page.getClass()); 
+        if (aux != null) {
+            return aux;
+        }
+
+        Class parent_class = page.getParentClass();
+        
+        if (parent_class != null) {
+            if (pages.containsKey(parent_class)) {
+                ILegendPanel parent = (ILegendPanel) pages.get(parent_class);
+                
+                aux = doInsertNode(tm, parent); 
+                if (aux != null) {
+                    return insertNodeHere(tm, aux, page);
+                } else {
+                    return null;
+                }
+                
+            } else {
+                return null;
+            }
+        } else {
+            // add to root
+            return insertNodeHere(tm, null, page);
+        }
+        
+
+    }
+    
+    
+    
+    
+
+    private JScrollPane getTitleScroll() {
+        if (jTitleScrollPane == null) {
+            jTitleScrollPane = new JScrollPane();
+            jTitleScrollPane.setBounds(2, 2, 498, 42);
+            jTitleScrollPane.setViewportView(getTitleArea());
+        }
+        return jTitleScrollPane;
+    }
+
+    private JTree getJTreeLegends() {
+        if (jTreeLegends == null) {
+            jTreeLegends = new JTree();
+            jTreeLegends.setRootVisible(false);
+            MyTreeCellRenderer treeCellRenderer = new MyTreeCellRenderer();
+            treeCellRenderer.setOpenIcon(null);
+            treeCellRenderer.setClosedIcon(null);
+            treeCellRenderer.setLeafIcon(null);
+
+            jTreeLegends.setCellRenderer(treeCellRenderer);
+            jTreeLegends.setShowsRootHandles(true);
+            jTreeLegends
+                .addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
+
+                    public void valueChanged(
+                        javax.swing.event.TreeSelectionEvent e) {
+                        if (isTreeListenerDisabled)
+                            return;
+                        DefaultMutableTreeNode node =
+                            (DefaultMutableTreeNode) jTreeLegends
+                                .getLastSelectedPathComponent();
+
+                        if (node == null)
+                            return;
+                        setActivePage((ILegendPanel) node.getUserObject());
+                    }
+                });
+            jTreeLegends.putClientProperty("JTree.linestyle", "Angled");
+            jTreeLegends.getSelectionModel().setSelectionMode(
+                TreeSelectionModel.SINGLE_TREE_SELECTION);
+        }
+        return jTreeLegends;
+    }
+
+    private void setActivePage(ILegendPanel page) {
+        if (page.getPanel() == null) {
+            // this is what happens when the user clicked in a parent node
+            // which only acts as a folder, and does not manage any legend
+            // then it expands and selects the first child
+            DefaultMutableTreeNode node = findNode(page.getClass());
+            if (treeModel.getChildCount(node) > 0) {
+                DefaultMutableTreeNode dmn =
+                    (DefaultMutableTreeNode) treeModel.getChild(node, 0);
+                page = (ILegendPanel) dmn.getUserObject();
+                setActivePage(page);
+                expandAndSelect(page);
+            }
+        } else {
+            // show the page
+            activePanel = page;
+            setIcon(activePanel.getIcon());
+
+            activePanel.setData(layer, legend);
+            getTitleArea().setText(activePanel.getDescription());
+            jPanelContainer.setViewportView(activePanel.getPanel());
+        }
+    }
+
+    private void setIcon(ImageIcon icon) {
+        getIconLabel().setIcon(icon);
+    }
+
+    private class MyTreeCellRenderer extends DefaultTreeCellRenderer {
+
+        private static final long serialVersionUID = -6013698992263578041L;
+
+        public MyTreeCellRenderer() {
+        }
+
+        public Component getTreeCellRendererComponent(JTree tree, Object value,
+            boolean sel, boolean expanded, boolean leaf, int row,
+            boolean hasFocus) {
+
+            super.getTreeCellRendererComponent(tree, value, sel, expanded,
+                leaf, row, hasFocus);
+            if (value instanceof DefaultMutableTreeNode) {
+                DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+                if (node.getUserObject() instanceof ILegendPanel) {
+                    ILegendPanel legend = (ILegendPanel) node.getUserObject();
+                    this
+                        .setText(legend.getPanel() == null ? "<html><b>"
+                            + legend.getTitle() + "</b></html>" : legend
+                            .getTitle());
+                }
+            }
+            return this;
+        }
+
+    }
+
+    private void expandAndSelect(Object node) {
+        isTreeListenerDisabled = true;
+        // will expand the tree and select the node
+        int i = 0;
+        boolean exit = false;
+
+        TreePath tp = null;
+        // find the page in the tree
+        while (i < jTreeLegends.getRowCount() && !exit) {
+            // see if this row is the node that we are looking for
+
+            tp = jTreeLegends.getPathForRow(i);
+            Object[] obj = tp.getPath();
+            for (int j = 0; j < obj.length && !exit; j++) {
+                Object o = ((DefaultMutableTreeNode) obj[j]).getUserObject();
+
+                if (o != null && o.getClass().equals(node.getClass())
+                    && o.equals(node)) {
+                    // found it! collapse the tree
+                    while (i >= 0) {
+                        jTreeLegends.collapseRow(i);
+                        i--;
+                    }
+                    exit = true;
+                }
+            }
+            jTreeLegends.expandRow(i);
+            i++;
+        }
+
+        // expand the tree and set the selection
+        if (tp != null) {
+            jTreeLegends.expandPath(tp);
+            jTreeLegends.setSelectionPath(tp);
+        }
+        isTreeListenerDisabled = false;
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "Simbologia");
+    }
+
+    public void acceptAction() {
+        // automatically handled by the ThemeManagerWindow
+    }
+
+    public void cancelAction() {
+        // does nothing
+    }
+
+    public void applyAction() {
+        legend = activePanel.getLegend();
+
+        if (table != null && table.size() > 1)
+            applyRestOfLegends(table, layer.getMapContext().getLayers());
+
+        /*
+         * try to apply the legend to all the active layers that
+         * can accept it
+         */
+        FLayer[] activeLyrs = layer.getMapContext().getLayers().getActives();
+        for (int i = 0; i < activeLyrs.length; i++) {
+            FLayer laux = activeLyrs[i];
+
+            if (activeLyrs[i] instanceof FLayers) {
+                laux = getFirstActiveLayerVect((FLayers) activeLyrs[i]);
+            }
+
+            if (laux instanceof ClassifiableVectorial) {
+                ClassifiableVectorial aux2 = (ClassifiableVectorial) laux;
+                try {
+                    if (legend instanceof IClassifiedVectorLegend) {
+                        // Es una leyenda que necesita un recordset con un
+                        // nombre de campo. Comprobamos que ese recordset
+                        // tiene ese nombre de campo y es del tipo esperado
+                        IClassifiedVectorLegend cl =
+                            (IClassifiedVectorLegend) legend;
+
+                        if (aux2 instanceof FLyrVect) {
+
+                            if (cl.getValues().length == 0) {
+                                JOptionPane.showMessageDialog(
+                                    (Component) PluginServices.getMainFrame(),
+                                    PluginServices.getText(this,
+                                        "no_es_posible_aplicar_leyenda_vacia"));
+                                return;
+                            }
+
+                            aux2.setLegend((IVectorLegend) legend);
+                        }
+                    } else
+                        if (legend instanceof IVectorLegend) {
+                            aux2.setLegend((IVectorLegend) legend);
+                        }
+                } catch (LegendLayerException e) {
+                    NotificationManager.addError(PluginServices.getText(this,
+                        "legend_exception"), e);
+                }
+            }
+        }
+    }
+
+    private void applyRestOfLegends(Hashtable<FLayer, ILegend> table2,
+        FLayers layers) {
+
+        for (int i = 0; i < layers.getLayersCount(); i++) {
+            FLayer my_layer = layers.getLayer(i);
+
+            if (!(my_layer instanceof FLayers)) {
+                if (my_layer instanceof ClassifiableVectorial) {
+                    try {
+                        if (table.containsKey(my_layer)) {
+                            ClassifiableVectorial lyr =
+                                (ClassifiableVectorial) my_layer;
+                            lyr.setLegend((IVectorLegend) table.get(my_layer));
+                        }
+
+                    } catch (LegendLayerException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            } else
+                applyRestOfLegends(table, (FLayers) my_layer);
+        }
+    }
+
+    @Override
+    public void setModel(FLayer layer) {
+        this.layer = layer;
+        applyLegend(((Classifiable) layer).getLegend());
+    }
+
+    /**
+     * Applies the legend to the layer.
+     * 
+     * @param aLegend
+     *            , legend that the user wants to apply
+     */
+    private void applyLegend(ILegend aLegend) {
+        this.legend = aLegend;
+        fillDialog();
+        Enumeration<Class<? extends ILegendPanel>> en = pages.keys();
+        while (en.hasMoreElements()) {
+            ILegendPanel page = (ILegendPanel) pages.get(en.nextElement());
+            if (legend.getClass().equals(page.getLegendClass())) {
+                setActivePage(page);
+                expandAndSelect(page);
+                return;
+            }
+        }
+        NotificationManager.addWarning(PluginServices.getText(this,
+            "caution_no_registered_panel_associated_to_"
+                + "loaded_legend_the_legend_wont_be_applied"));
+    }
+    
+    @Override
+    public int getPriority() {
+    	return 800;
+    }
+
+    // public static void addLegendDriver(Class<? extends IFMapLegendDriver>
+    // legendDriverClass) {
+    // if (!legendDriverPool.contains(legendDriverClass)) {
+    // legendDriverPool.add(legendDriverClass);
+    // }
+    // }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LegendManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JLegendFileChooser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JLegendFileChooser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JLegendFileChooser.java	(revision 42196)
@@ -0,0 +1,196 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import javax.swing.JFileChooser;
+
+
+/**
+ *
+ * JLegendFileChooser.java
+ *
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es Jul 22, 2008
+ *
+ */
+public class JLegendFileChooser extends JFileChooser  {
+	private static final long serialVersionUID = 8855060580358068594L;
+	private static String lastPath;
+//	private IFMapLegendDriver[] drivers;
+	private boolean write_mode = false;
+	public static String driverVersion;
+
+	public JLegendFileChooser() {
+		super();
+	}
+
+//	public JLegendFileChooser(IFMapLegendDriver[] legendDrivers) {
+//		this(legendDrivers, false);
+//	}
+//
+//	public JLegendFileChooser(final IFMapLegendDriver[] legendDrivers, boolean write_mode) {
+//		super(lastPath);
+//		this.write_mode = write_mode;
+//		this.drivers = legendDrivers;
+//
+//		setMultiSelectionEnabled(false);
+//
+//		if (!this.write_mode){//load method->"all the drivers in one"
+//
+//			this.setFileFilter(new FileFilter() {
+//				@Override
+//				public boolean accept(File f) {
+//					for (int i = 0; i < legendDrivers.length; i++) {
+//						if (legendDrivers[i].accept(f))
+//							return true;
+//					}
+//					return false;
+//				}
+//
+//				@Override
+//				public String getDescription() {
+//					String strLegendFormats = "";
+//					for (int i = 0; i < legendDrivers.length; i++) {
+//
+//						strLegendFormats += "*."+legendDrivers[i].getFileExtension();
+//						if (i<legendDrivers.length-1) strLegendFormats += ", ";
+//					}
+//
+//					return PluginServices.getText(this, "all_supported_legend_formats") +
+//					" ("+strLegendFormats+")";
+//				}
+//			});
+//		}
+//		else {//write method->all drivers are separated
+//			for (int i = 0; i < legendDrivers.length; i++) {
+//				final IFMapLegendDriver driver = legendDrivers[i];
+//
+//				if (driver.getSupportedVersions() != null) {
+//
+//					for (int j = 0; j < driver.getSupportedVersions().size(); j++) {
+//
+//						final String version = (String)driver.getSupportedVersions().get(j);
+//
+//						FileFilter aFilter = new FileFilter() {
+//
+//							@Override
+//							public boolean accept(File f) {
+//								return driver.accept(f);
+//							}
+//
+//							@Override
+//							public String getDescription() {
+//								return PluginServices.getText(this, driver.getDescription()+" "+version+" (*."+driver.getFileExtension()+")");
+//							}
+//
+//						};
+//						this.addChoosableFileFilter(aFilter);
+//					}
+//				}
+//				else {
+//
+//					FileFilter aFilter = new FileFilter() {
+//
+//						@Override
+//						public boolean accept(File f) {
+//							return driver.accept(f);
+//						}
+//
+//						@Override
+//						public String getDescription() {
+//							return PluginServices.getText(this, driver.getDescription()+" (*."+driver.getFileExtension()+")");
+//						}
+//
+//					};
+//					this.addChoosableFileFilter(aFilter);
+//				}
+//
+//			}
+//		}
+//	}
+//
+//
+//
+//	public IFMapLegendDriver getSuitableDriver() {
+//		File f = getSelectedFile();
+//
+//		for (int i = 0; drivers != null && i < drivers.length; i++) {
+//			if (drivers[i].accept(f))
+//				return drivers[i];
+//		}
+//		return null;
+//	}
+//
+//
+//
+//	public IFMapLegendDriver getDriverFromDescription(File file) {
+//		if (getFileFilter() != null){
+//			String descripFile = getFileFilter().getDescription();
+//			IFMapLegendDriver myDriver = null;
+//
+//			for (int i = 0; i < drivers.length; i++) {
+//
+//				myDriver = drivers[i];
+//				String driverDesc;
+//
+//				if(myDriver.getSupportedVersions() != null) {
+//					for (int j = 0; j < myDriver.getSupportedVersions().size(); j++) {
+//						driverDesc = myDriver.getDescription()+" "+myDriver.getSupportedVersions().get(j)+" (*."+myDriver.getFileExtension()+")";
+//						if (driverDesc.equals(descripFile)){
+//							driverVersion = (String)myDriver.getSupportedVersions().get(j);
+//							return myDriver;
+//						}
+//					}
+//				}
+//				else {
+//					driverDesc = myDriver.getDescription()+" (*."+myDriver.getFileExtension()+")";
+//					if (driverDesc.equals(descripFile)){
+//						driverVersion ="";
+//						return myDriver;
+//					}
+//				}
+//			}
+//		}
+//		return null;
+//	}
+//
+//	public File getSelectedFile() {
+//		File f = super.getSelectedFile();
+//
+//		IFMapLegendDriver myDriver = getDriverFromDescription(f);
+//		if (f!=null){
+//			if(myDriver != null && !(f.getPath().toLowerCase().endsWith("."+myDriver.getFileExtension()))){
+//				f = new File(f.getPath()+ "."+myDriver.getFileExtension());
+//			}
+//			lastPath = f.getAbsolutePath().substring(0, f.getAbsolutePath().lastIndexOf(File.separator));
+//		}
+//		return f;
+//	}
+
+	public static String getDriverVersion() {
+		return driverVersion;
+	}
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/JLegendFileChooser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/PanelEditSymbol.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/PanelEditSymbol.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/PanelEditSymbol.java	(revision 42196)
@@ -0,0 +1,150 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+
+/**
+ * Panel creado para editar el s�mbolo seleccionado.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class PanelEditSymbol extends JPanel implements IWindow {
+	private SingleSymbol panel = null;
+	private JButton bAceptar = null;  //  @jve:decl-index=0:visual-constraint="198,310"
+	private JPanel panelbutton = null;
+	private boolean ok=false;
+	//private FSymbol symbol;
+
+
+	public PanelEditSymbol(){
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(320, 160);
+        this.add(getPanel(), java.awt.BorderLayout.NORTH);
+		this.add(getPanelbutton(),BorderLayout.SOUTH);
+	}
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
+		m_viewinfo.setTitle(PluginServices.getText(this, "simbolo"));
+		m_viewinfo.setWidth(getWidth()+10);
+		m_viewinfo.setHeight(getHeight());
+		return m_viewinfo;
+	}
+
+	/**
+	 * This method initializes panel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private SingleSymbol getPanel() {
+		if (panel == null) {
+			panel = new SingleSymbol();
+			panel.setPreferredSize(new Dimension(320, 160));
+			panel.setVisible(true);
+		}
+		return panel;
+	}
+
+	/**
+	 * This method initializes bAceptar
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBAceptar() {
+	  I18nManager i18nManager = ToolsLocator.getI18nManager();
+		if (bAceptar == null) {
+			bAceptar = new JButton();
+			bAceptar.setPreferredSize(new java.awt.Dimension(80,20));
+			bAceptar.setText(i18nManager.getTranslation("Aceptar"));
+			bAceptar.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					ok=true;
+					PluginServices.getMDIManager().closeWindow(PanelEditSymbol.this);
+				}
+			});
+			bAceptar.setSize(35, 20);
+		}
+		return bAceptar;
+	}
+
+	public ISymbol getSymbol(){
+		return panel.getSymbol();
+	}
+
+	public void setSymbol(ISymbol s){
+		ok=false;
+		panel.setSymbol(s);
+	}
+
+	public boolean isOK(){
+		return ok;
+	}
+	/**
+	 * This method initializes panelbutton
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPanelbutton() {
+		if (panelbutton == null) {
+			panelbutton = new JPanel();
+			panelbutton.add(getBAceptar(), null);
+		}
+		return panelbutton;
+	}
+
+	public void setShapeType(int shapeType) {
+		getPanel().setShapeType(shapeType);
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/PanelEditSymbol.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/CreateSpatialIndexMonitorableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/CreateSpatialIndexMonitorableTask.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/CreateSpatialIndexMonitorableTask.java	(revision 42196)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: CreateSpatialIndexMonitorableTask.java 29596 2009-06-29 16:02:00Z jpiera $
+* $Log$
+* Revision 1.4  2007-07-30 12:56:04  jaume
+* organize imports, java 5 code downgraded to 1.4 and added PictureFillSymbol
+*
+* Revision 1.3  2007/05/15 07:22:56  cesar
+* Add the finished method for execution from Event Dispatch Thread
+*
+* Revision 1.2  2007/03/06 16:37:08  caballero
+* Exceptions
+*
+* Revision 1.1  2006/09/15 10:41:30  caballero
+* extensibilidad de documentos
+*
+* Revision 1.2  2006/05/22 10:35:41  fjp
+* Monitorable tasks easy
+*
+* Revision 1.1  2006/05/08 15:41:06  azabala
+* added rtree spatial indexing capabilities
+*
+*
+*/
+package org.gvsig.app.project.documents.view.legend;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.utils.swing.threads.CancellableMonitorable;
+import org.gvsig.utils.swing.threads.DefaultCancellableMonitorable;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+
+
+public class CreateSpatialIndexMonitorableTask implements IMonitorableTask{
+
+	String MAIN_MESSAGE;
+	String HULL_MESSAGE = PluginServices.getText(this, "Indexando");
+	String OF = "de";
+
+	FLyrVect layer;
+	/**
+	 * It monitors advance of indexing process
+	 */
+	private CancellableMonitorable cancelMonitor = null;
+	/**
+	 * flag to tell if the process is finished
+	 */
+	private boolean finished = false;
+
+	/**
+	 * Default constructor
+	 * @throws DriverIOException
+	 * @throws DriverException
+	 */
+	public CreateSpatialIndexMonitorableTask(FLyrVect layer)
+			throws DataException {
+		this.layer = layer;
+		MAIN_MESSAGE = PluginServices.getText(this, "Indexando_espacialmente") +
+								layer.getName();
+//		cancelMonitor = createCancelMonitor();
+	}
+
+	/**
+	 * Creates a CancellableMonitorable instance to monitor
+	 * progress and to cancel the process.
+	 * @return
+	 * @throws DriverIOException
+	 * @throws DriverException
+	 */
+//	private CancellableMonitorable createCancelMonitor()
+//				throws ReadException {
+//		DefaultCancellableMonitorable monitor =
+//			new DefaultCancellableMonitorable();
+//		monitor.setInitialStep(0);
+//		monitor.setDeterminatedProcess(true);
+//		int numSteps = ((FLyrVect)layer).getFeatureStore().getDataCollection().size();
+//		monitor.setFinalStep(numSteps);
+//		return monitor;
+//	}
+
+	public void run() throws Exception {
+		FeatureStore fs=(layer).getFeatureStore();
+		//TODO comentado para que compile
+//		fs.createIndex(fs.getDefaultFeatureType());
+		finished = true;
+	}
+
+	public int getInitialStep() {
+		return cancelMonitor.getInitialStep();
+	}
+
+	public int getFinishStep() {
+		return cancelMonitor.getFinalStep();
+	}
+
+	public int getCurrentStep() {
+		return cancelMonitor.getCurrentStep();
+	}
+
+	public String getStatusMessage() {
+		return MAIN_MESSAGE;
+	}
+
+	public String getNote() {
+		return HULL_MESSAGE + " " +
+		getCurrentStep()+ " " +
+		OF  + " "+
+		getFinishStep();
+	}
+	//FIXME Borrar los ficheros de indice en caso de cancelacion
+	public void cancel() {
+		((DefaultCancellableMonitorable) cancelMonitor).setCanceled(true);
+	}
+	/**
+	 * Tells if it is a defined process (we know its number of steps)
+	 */
+	public boolean isDefined() {
+		return true;
+	}
+	public boolean isCanceled() {
+		return cancelMonitor.isCanceled();
+	}
+
+	public boolean isFinished() {
+		return finished;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.utiles.swing.threads.IMonitorableTask#finished()
+	 */
+	public void finished() {
+		// TODO Auto-generated method stub
+
+	}
+}//CreateSpatialIndexMonitorableTask
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/CreateSpatialIndexMonitorableTask.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuAction.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view;
+
+
+/**
+ * Interface que deben de cumplir una acci�n aplicable dede un
+ * Menu contextual o popup.
+ * <br>
+ * Las acciones se deben registrar en el punto de extensi�n adecuado * 
+ * <br><br>
+ * Por lo general extender de la clase AbstractDocumentAction
+ * 
+ *  
+ * 
+ * @author Jose Manuel Viv� (Chema)
+ */
+
+public interface IContextMenuAction {
+	
+	/**
+	 * Dice si la acci�n es visible 
+	 * segun los documentos seleccionados
+	 * <br>
+	 * @param item elemento sobre el que se ha pulsado
+	 * @param selectedItems elementos seleccionados en el momento de pulsar
+	 * 
+	 */
+	public boolean isVisible(Object item, Object[] selectedItems);
+	
+	/**
+	 * Dice si la acci�n esta habilitada 
+	 * segun los documentos seleccionados
+	 * <br>
+	 * @param item elemento sobre el que se ha pulsado
+	 * @param selectedItems elementos seleccionados en el momento de pulsar
+	 * 
+	 */
+	public boolean isEnabled(Object item, Object[] selectedItems);
+	
+	/**
+	 * Ejecuta la acci�n sobre los documentos seleccionados
+	 * <br>
+	 * @param item elemento sobre el que se ha pulsado
+	 * @param selectedItems elementos seleccionados en el momento de pulsar
+	 * 
+	 */
+	public void execute(Object item, Object[] selectedItems);
+	
+	/**
+	 * Nombre del grupo al que pertenece la accion
+	 */
+	public String getGroup();
+	
+	/**
+	 * Orden del grupo al que pertenece la acci�n
+	 */
+	public int getGroupOrder();
+	
+	/**
+	 * Orden del elemento dentro del grupo
+	 */
+	public int getOrder();
+	
+	/**
+	 * Texto del elemento
+	 */
+	public String getText();
+	
+	/**
+	 * Descripci�n mas detallada de la acci�n
+	 * (se utilizar� como Tooltip)
+	 */
+	public String getDescription();	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/metadata/gui/MetadataInfoManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/metadata/gui/MetadataInfoManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/metadata/gui/MetadataInfoManager.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view.metadata.gui;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.project.documents.view.legend.gui.AbstractThemeManagerPage;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.metadata.swing.basic.api.JMetadataPanel;
+import org.gvsig.metadata.swing.basic.api.MetadataSwingLocator;
+import org.gvsig.metadata.swing.basic.api.MetadataSwingManager;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+
+public class MetadataInfoManager extends AbstractThemeManagerPage {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7432962479048597376L;
+	private JMetadataPanel metadataPanel;
+
+	/**
+	 * This is the default constructor.
+	 */
+	public MetadataInfoManager() {
+		super();
+		initialize();
+	}
+
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.add(new JBlank(5, 10), BorderLayout.WEST);
+		this.add(new JBlank(5, 10), BorderLayout.EAST);
+	}
+
+	/**
+	 * Sets the necessary properties in the panel. This properties are extracted
+	 * from the layer. With this properties fills the TextFields, ComboBoxes and
+	 * the rest of GUI components.
+	 * 
+	 * @param FLayer
+	 *            layer,
+	 */
+	public void setModel(FLayer layer) {
+		try {
+			MetadataSwingManager manager = MetadataSwingLocator
+					.getMetadataSwingManager();
+			this.metadataPanel = manager.createJMetadataPanel(layer);			
+			this.add(metadataPanel, BorderLayout.CENTER);
+
+		} catch (Exception e) {
+			NotificationManager.addError("Can't assign model", e);
+		}
+	}
+
+	public void acceptAction() {
+		if (metadataPanel == null) {
+			return;
+		}
+		saveMetadata();
+	}
+
+	private void saveMetadata() {
+		try {
+			this.metadataPanel.saveMetadata();
+		} catch (DynObjectValidateException e) {
+			JOptionPane.showMessageDialog(null, getInfoString(e),
+					"Metadata Validation Errors",
+					 JOptionPane.WARNING_MESSAGE);
+		}
+	}
+
+	private String getInfoString(DynObjectValidateException e) {
+		StringBuffer buffer = new StringBuffer();
+
+		buffer.append("<html>");
+		buffer.append("<body>");
+		buffer.append("<h2>Metadata values could not be stored due to the following errors:'")
+				.append(this.metadataPanel.getMetadata().getDynClass()
+						.getName()).append("'</h2>");
+		buffer.append("<p>");
+		buffer.append("<br>");
+		buffer.append("<ol>");
+		buffer.append("  " + e.getLocalizedMessageStack());
+		buffer.append("</ol>");
+		buffer.append("</p>");
+		buffer.append("</body>");
+		buffer.append("</html>");
+
+		return buffer.toString().replace("\n", "<br/>");
+	}
+
+	public void cancelAction() {
+		// does nothing
+	}
+
+	/**
+	 * When we press the apply button, sets the new properties of the layer that
+	 * the user modified using the UI components
+	 */
+	public void applyAction() {
+		if (metadataPanel == null) {
+			return;
+		}
+		saveMetadata();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.awt.Component#getName()
+	 */
+	public String getName() {
+		return PluginServices.getText(this, "_Metadata");
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/metadata/gui/MetadataInfoManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ListSelectorListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ListSelectorListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ListSelectorListener.java	(revision 42196)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.view;
+
+/**
+ * Interfaz invocada por el FPanelExtentSelector cuando el usuario ha seleccionado al
+ * menos un elemento y pulsa el bot�n aceptar
+ *
+ * @author $author$
+ * @version $Revision: 29598 $
+ */
+public interface ListSelectorListener {
+    /**
+     * M�todo invocado cuando el usuario pulsa aceptar y hay algo seleccionado
+     *
+     * @param indices Array con los �ndices de los elementos seleccionados
+     */
+    public void indexesSelected(int[] indices);
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param indices DOCUMENT ME!
+     */
+    public void indexesRemoved(int[] indices);
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param name DOCUMENT ME!
+     */
+    public void newElement(String name);
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ListSelectorListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/ProjectDocumentListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/ProjectDocumentListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/ProjectDocumentListener.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+
+/**
+ * Listener para notificaci�n en los cambios de las vistas de un proyecto.
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ *
+ */
+public interface ProjectDocumentListener {
+
+	/**
+	 * Evento lanzado cuando se crea una ventana de proyecto
+	 * @param  view
+	 *         Ventana creada
+	 */
+	public void windowCreated(IWindow window);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/ProjectDocumentListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentAction.java	(revision 42196)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents;
+
+import java.util.List;
+
+import org.gvsig.tools.extensionpoint.ExtensionSingleton;
+
+
+/**
+ * Interface que deben den cumplir las  acciones asociadas
+ * a un documento
+ * <br>
+ *  Las acciones de un documento se registraran  a traves
+ *  del metodo registerDocumentAction del ProjectFactory
+ *  <br><br>
+ * Por lo general extender de la clase AbstractDocumentAction
+ * 
+ *  
+ * 
+ */
+
+public interface DocumentAction extends ExtensionSingleton {
+
+	/**
+	 * Gets the unique identifier for this action.
+	 * 
+	 * @return id as String
+	 */
+	public String getId();
+
+	public boolean isVisible(Document document, List<Document> documents);
+	
+	public boolean isAvailable(Document document, List<Document> documents);
+	
+	/**
+	 * 
+	 * @param document Optionally a document with a special role or 
+	 * null if there is not a document with a special role
+	 *  
+	 * @param documents Documents to manage
+	 */
+	public void execute(Document document, List<Document> documents);
+	
+	/**
+	 * Gets the group name for this action.
+	 * 
+	 * @return group name as String
+	 */
+	public DocumentActionGroup getGroup();
+	
+	/**
+	 * Representa el orden en el que se presentara la accion entre
+	 * elresto de acciones de este tipo documento alla donde estas se
+	 * presenten.
+	 * 
+	 * @return title as String 
+	 */
+	public int getOrder();
+	
+	/**
+	 * Returns a  phrase with the action title for this document.type.
+	 * 
+	 * @return description as String 
+	 */
+	public String getTitle();
+	
+	/**
+	 * Returns a  paragraph with the action description for this document 
+	 * type.
+	 * 
+	 * @return description as String 
+	 */
+	public String getDescription();	
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentManager.java	(revision 42196)
@@ -0,0 +1,354 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.app.project.documents;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Formatter;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.DocumentsContainer;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+import org.gvsig.tools.observer.BaseNotification;
+import org.gvsig.tools.observer.Notification;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.swing.api.Component;
+
+
+
+/**
+ * Factory of ProjectDocument.
+ * 
+ */
+
+public abstract class AbstractDocumentManager implements DocumentManager, Observer {
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractDocumentManager.class);
+
+    
+    private Map<String, JComponent> mainComponents = new HashMap<String, JComponent>();
+
+    private DelegateWeakReferencingObservable observableHelper = null;
+
+    protected AbstractDocumentManager() {
+        this.observableHelper = new DelegateWeakReferencingObservable(this);
+    }
+    
+    /**
+     * Returns the type of document priority.
+     *
+     * This priority is used when order document factories in UI.
+     * 
+     * @return Priority.
+     */
+    public int getPriority() {
+        return 10;
+    }
+
+    /**
+     * Returns the icon for the type of document.
+     *
+     * @return Image.
+     */
+    public ImageIcon getIcon() {
+        return PluginServices.getIconTheme().get("document-icon-sel");
+    }
+
+    /**
+     * Returns the icon for the type of document when is selected
+     *
+     * @return Image.
+     */
+    public ImageIcon getIconSelected() {
+        return PluginServices.getIconTheme().get("document-icon");
+    }
+
+    /**
+     * Returns the title of type of document.
+     *
+     * @return String title for type of document
+     */
+    public String getTitle() {
+        return PluginServices.getText(this, "documento");
+    }
+
+    public AbstractDocument createDocumentByUser() {
+        return createDocument();
+    }
+
+    public Iterator<? extends Document> createDocumentsByUser() {
+        Set<AbstractDocument> doc = new HashSet<AbstractDocument>(1);
+        doc.add(createDocumentByUser());
+        return doc.iterator();
+    }
+
+    /**
+     * @see ExtensionBuilder
+     */
+    public Object create() {
+        return this;
+    }
+
+    /**
+     * @see ExtensionBuilder
+     */
+    public Object create(Object[] args) {
+        return this;
+    }
+
+    /**
+     * @see ExtensionBuilder
+     */
+    @SuppressWarnings("rawtypes")
+    public Object create(Map args) {
+        return this;
+    }
+
+    public IWindow getMainWindow(Document doc) {
+        return getMainWindow(doc, null);
+    }
+    
+    public JComponent getMainComponent(Document doc) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        Document activeDoc = application.getActiveDocument();
+        if( activeDoc == doc ) { // Ojo, hay que cerciorarse de que esta comparacion funciona.
+            IWindow win = this.getMainWindow(doc);
+            if( win instanceof Component ) {
+                return ((Component)win).asJComponent();
+            }
+            return (JComponent)win;
+        }
+        if( activeDoc instanceof DocumentsContainer ) {
+            DocumentsContainer container = (DocumentsContainer)activeDoc;
+            return this.getMainComponent(container, doc);
+        }
+        return null;
+    }
+    
+    public JComponent getMainComponent(DocumentsContainer container, Document doc) {
+        Formatter f = new Formatter();
+        f.format("08X",container.hashCode());
+        f.format("08X",doc.hashCode());
+        String key = f.toString();
+        f.close();
+        return mainComponents.get(key);
+    }
+
+    public void unregisterMainComponent(DocumentsContainer container, Document doc) {
+        Formatter f = new Formatter();
+        f.format("08X",container.hashCode());
+        f.format("08X",doc.hashCode());
+        String key = f.toString();
+        f.close();
+        mainComponents.remove(key);
+    }
+
+    public void registerMainComponent(DocumentsContainer container, Document doc, JComponent component) {
+        Formatter f = new Formatter();
+        f.format("08X",container.hashCode());
+        f.format("08X",doc.hashCode());
+        String key = f.toString();
+        f.close();
+        mainComponents.put(key,component);
+    }
+    
+    /**
+     * Return true if the name exists to another document.
+     *
+     * @param project
+     * @param documentName
+     *
+     * @return True if the name exists.
+     * @deprecated use instead  project.getProjectDocument
+     */
+    public boolean existName(Project project, String documentName) {
+        return project.getDocument(documentName, getTypeName())!=null;
+    }
+
+    /**
+     * Return the class or interface for the documents managed by this factory.
+     * @return The document class;
+     */
+    @SuppressWarnings("rawtypes")
+    abstract protected Class getDocumentClass();
+
+    public Object createFromState(PersistentState state) throws PersistenceException {
+        Document doc = this.createDocument();
+        return doc;
+    }
+
+    public void loadFromState(PersistentState state, Object object) throws PersistenceException {
+        Document doc = (Document) object;
+        doc.loadFromState(state);
+    }
+
+    public void saveToState(PersistentState state, Object obj) throws PersistenceException {
+        Document doc = (Document) obj;
+        doc.saveToState(state);
+
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    public boolean manages(Class theClass) {
+        return this.getDocumentClass().isAssignableFrom(theClass);
+    }
+
+    @SuppressWarnings("rawtypes")
+    public boolean manages(PersistentState state) {
+        try {
+            Class theClass;
+            theClass = (Class) Class.forName(state.getTheClassName());
+            return manages(theClass);
+        } catch (ClassNotFoundException e) {
+            return false;
+        }
+    }
+
+    public List<DynStruct> getDefinitions() {
+        DynStruct definition = this.getDefinition(this.getDocumentClass().getName());
+        List<DynStruct> definitions = new ArrayList<DynStruct>();
+        definitions.add(definition);
+        return definitions;
+    }
+
+    public String getDomainName() {
+        return PersistenceManager.DEFAULT_DOMAIN_NAME;
+    }
+
+    public String getDomainURL() {
+        return PersistenceManager.DEFAULT_DOMAIN_URL;
+    }
+
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    public List getManagedClasses() {
+        List classes = new ArrayList();
+        classes.add(this.getDocumentClass());
+        return classes;
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Class getManagedClass(Object object) {
+        return this.getDocumentClass();
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Class getManagedClass(PersistentState state) {
+        return this.getDocumentClass();
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Class getManagedClass(String name) {
+        return this.getDocumentClass();
+    }
+
+    @SuppressWarnings("rawtypes")
+    public String getManagedClassName(Object object) {
+        Class clazz = this.getManagedClass(object);
+        if (clazz != null){
+            return clazz.getName();
+        }
+        return null;
+    }
+
+    @SuppressWarnings("rawtypes")
+    protected IDocumentWindow createDocumentWindow(Document document) {
+        IDocumentWindow documentWindow = null;
+        Class windowClass = getMainWindowClass();
+
+        try {
+
+            try {
+                Constructor constructor;
+                constructor =
+                    windowClass.getConstructor(new Class[] { Document.class });
+                documentWindow =
+                    (IDocumentWindow) constructor
+                        .newInstance(new Object[] { document });
+            } catch (NoSuchMethodException e1) {
+                documentWindow = (IDocumentWindow) windowClass.newInstance();
+                documentWindow.setDocument(document);
+            }
+        } catch (Exception e) {
+            logger.warn("Can't create the document window.", e);
+            return null;
+        }
+        return documentWindow;
+    }
+
+    public void update(Observable observable, Object notification) {
+        // Do nothing
+    }
+    
+
+    public void addObserver(Observer o) {
+        this.observableHelper.addObserver(o);
+    }
+
+    public void deleteObserver(Observer o) {
+        this.observableHelper.deleteObserver(o);
+    }
+
+    public void deleteObservers() {
+        this.observableHelper.deleteObservers();
+    }
+    
+    protected Notification notifyObservers(String type, Document doc) {
+        Notification notification = new BaseNotification(type, new Object[] {doc});
+        this.observableHelper.notifyObservers(notification);
+        return notification;
+    }
+
+    protected Notification notifyObservers(String type, IWindow doc) {
+        Notification notification = new BaseNotification(type, new Object[] {doc});
+        this.observableHelper.notifyObservers(notification);
+        return notification;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DefaultDocumentActionGroup.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DefaultDocumentActionGroup.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DefaultDocumentActionGroup.java	(revision 42196)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents;
+
+public class DefaultDocumentActionGroup implements DocumentActionGroup  {
+
+	private String title;
+	private String description;
+	private int order;
+	private String id;
+
+	public DefaultDocumentActionGroup(String id, String title, String description, int order) {
+		this.id = id;
+		this.title = title;
+		this.description = description;
+		this.order= order;
+	}
+	
+	public String getDescription() {
+		return this.description;
+	}
+
+	public int getOrder() {
+		return this.order;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+	public String getId() {
+		return this.id;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DefaultDocumentActionGroup.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/Document.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/Document.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/Document.java	(revision 42196)
@@ -0,0 +1,170 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents;
+
+import java.beans.PropertyChangeListener;
+import javax.swing.JComponent;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.gui.WindowLayout;
+import org.gvsig.tools.persistence.Persistent;
+
+public interface Document extends Persistent {
+
+	/**
+	 * Obtiene el nombre del elemento
+	 *
+	 * @return
+	 */
+	public String getName();
+
+	/**
+	 * Establece el nombre del elemento
+	 *
+	 * @param string
+	 */
+	public void setName(String string);
+
+	/**
+	 * Obtiene la fecha de creaci�n del elemento
+	 *
+	 * @return
+	 */
+	public String getCreationDate();
+
+	/**
+	 * Obtiene el propietario del elemento
+	 *
+	 * @return
+	 */
+	public String getOwner();
+
+	public String getTypeName();
+
+	/**
+	 * Establece la fecha de creaci�n del elemento.
+	 *
+	 * @param string
+	 */
+	public void setCreationDate(String string);
+
+	/**
+	 * Establece el propietario del elemento
+	 *
+	 * @param string
+	 */
+	public void setOwner(String string);
+
+	/**
+	 * Obtiene los comentarios del proyecto
+	 *
+	 * @return
+	 */
+	public String getComment();
+
+	/**
+	 * Establece los comentarios del proyecto
+	 *
+	 * @param string
+	 */
+	public void setComment(String string);
+
+	public Project getProject();
+
+	public void setProject(Project project);
+
+	/**
+	 * Locks this project element protecting it from deleting from the project.
+	 */
+	public abstract void lock();
+
+	/**
+	 * Unlocks this element. So, from now on, it can be removed from the project.
+	 */
+	public abstract void unlock();
+
+	/**
+	 * Tells whether if this project's element is locked/protected or not. A protected
+	 * element cannot be removed from the current project.
+	 *
+	 * @see <b>lock()</b> and <b>unlock()</b> methods.
+	 *
+	 * @return true if it is locked, false otherwise
+	 */
+	public abstract boolean isLocked();
+
+	public DocumentManager getFactory();
+
+	public boolean isModified();
+
+	public void setModified(boolean modified);
+
+	/**
+	 * Register a  ProjectDocumentListener.
+	 * @param  listener  ProjectDocumentListener
+	 */
+	public void addListener(ProjectDocumentListener listener);
+
+	/**
+	 * A�ade un listener para los cambios en las bounded properties
+	 *
+	 * @param listener
+	 */
+	public void addPropertyChangeListener(
+			PropertyChangeListener listener);
+
+	public void afterRemove();
+
+	public void afterAdd();
+
+	public WindowLayout getWindowLayout();
+
+	public void setWindowLayout(WindowLayout layout) ;
+
+	public IWindow getPropertiesWindow();
+
+        /**
+         * Return the main window associated to this document.
+         * Is a tutility method, is equivalent to:
+         * <code>this.getFactory().getMainWindow(doc)</code>
+         *
+         * @return the IWindow associated to this document
+         */
+	public IWindow getMainWindow();
+
+        /**
+         * Return the main JComponent associated to this document.
+         * Is a tutility method, is equivalent to:
+         * <code>this.getFactory().getMainComponent(doc)</code>
+         *
+         * @return the JComponent associated to this document
+         */
+        public JComponent getMainComponent();
+
+    public boolean isTemporary();
+
+    public boolean isAvailable();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/Document.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentAction.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents;
+
+import java.util.Arrays;
+
+import org.gvsig.app.project.ProjectManager;
+
+
+public abstract class AbstractDocumentAction implements DocumentAction {
+
+	private String id;
+	protected DocumentActionGroup group;
+	protected String title; 
+	protected String description;
+	protected int order;
+	
+	public AbstractDocumentAction(String id) {
+		this.group = ProjectManager.getInstance().addDocumentActionGroup("default","Default action group", null, 1000);
+		this.id = id;
+		this.title= id;
+		this.description = null;
+		this.order = 1000;
+	}
+
+	public AbstractDocumentAction(DocumentActionGroup group, String id, String title, String description, int order) {
+		this(id);
+		if( group!= null ) {
+			this.group = group;
+		}
+		this.title= title;
+		this.description = description;
+		this.order = order;
+	}
+	
+	public String getDescription() {
+		return this.description;
+	}
+
+	public DocumentActionGroup getGroup() {
+		return this.group;
+	}
+
+	public String getId() {
+		return this.id;
+	}
+
+	public int getOrder() {
+		return this.order;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyPasteDocsUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyPasteDocsUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyPasteDocsUtils.java	(revision 42196)
@@ -0,0 +1,307 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.actions;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * This class provides utility methods to manage the clipboard
+ * for documents (it's file-based, it's not the system clipboard)
+ * which will contain one or more documents for copy/cut/paste
+ * operations. It is currently implemented using persistence
+ * 
+ * Each document type uses it's own "clipboard". Some actions
+ * can affect all those clipboards at the same time
+ * 
+ * @author jldominguez
+ * 
+ */
+public class CopyPasteDocsUtils {
+
+    private static Logger logger = LoggerFactory
+        .getLogger(CopyPasteDocsUtils.class);
+
+    /**
+     * The folder where docs are temporarily persisted
+     */
+    private static File clipboardFolder = null;
+    private static String CLIPBOARD_FILE_NAME_PREFIX = "gvSIG_docs_clipboard_";
+    private static String CLIPBOARD_FILE_NAME_EXTENSION = "tmp";
+    private static int MAX_FILE_COUNT = 1000;
+
+    private CopyPasteDocsUtils() {
+    }
+    
+    private static PersistenceManager getPersMan() {
+        return ToolsLocator.getPersistenceManager();
+    }
+    
+    private static File getClipboardFolder() {
+        if (clipboardFolder == null) {
+            File appf = PluginsLocator.getManager().getApplicationHomeFolder();
+            clipboardFolder = new File(appf, "clipboard-documents");
+            clipboardFolder.mkdirs();
+        }
+        return clipboardFolder;
+    }
+    
+    /**
+     * Gets all if parameter is null
+     * 
+     */
+    public static List<File> getClipboardFiles(String typeName) {
+        
+        List<File> resp = new ArrayList<File>();
+        
+        String filebase = CLIPBOARD_FILE_NAME_PREFIX;
+        if (typeName != null) {
+            filebase = filebase + typeName;
+        }
+        
+        File folder = getClipboardFolder();
+        
+        if (!folder.exists() || !folder.isDirectory()) {
+            return resp;
+        }
+        
+        File[] ff = folder.listFiles();
+        for (int i=0; i<ff.length; i++) {
+            if (ff[i].getName().startsWith(filebase)) {
+                resp.add(ff[i]);
+            }
+        }
+        return resp;
+    }
+    
+    
+    private static File getFirstUnusedClipboardFile(String docTypeName)
+    throws IOException {
+        
+        if (docTypeName == null || docTypeName.length() == 0) {
+            throw new IOException("Doc type name cannot be empty");
+        }
+        
+        String filename = null;
+        for (int i=0; i<MAX_FILE_COUNT; i++) {
+            filename = CLIPBOARD_FILE_NAME_PREFIX + docTypeName + "_" +
+                Integer.toString(i)
+                + "." + CLIPBOARD_FILE_NAME_EXTENSION;
+            File resp = new File(getClipboardFolder(), filename);
+            if (!resp.exists()) {
+                /*
+                 * Removed when JVM terminates
+                 */
+                resp.deleteOnExit();
+                return resp;
+            }
+        }
+        // This should never happen
+        throw new IOException("Clipboard is full for documents: " + docTypeName);
+    }
+    
+    /**
+     * Clears clipboard of the provided doc type,
+     * or clears all document clipboard if parameter is null.
+     * 
+     * @param docTypeName
+     */
+    public static void clearClipboard(String docTypeName) throws IOException {
+        
+        String filebase = CLIPBOARD_FILE_NAME_PREFIX;
+        if (docTypeName != null) {
+            filebase = filebase + docTypeName;
+        }
+        
+        File folder = getClipboardFolder();
+        
+        if (!folder.exists() || !folder.isDirectory()) {
+            /*
+             * Nothing to do
+             */
+            return;
+        }
+        
+        File[] ff = folder.listFiles();
+        Exception exc = null;
+        for (int i=0; i<ff.length; i++) {
+            if (ff[i].getName().startsWith(filebase)) {
+                try {
+                    ff[i].delete();
+                } catch (Exception e) {
+                    // Keep first exception and try to go on
+                    if (exc == null) {
+                        exc = e;
+                    }
+                }
+            }
+        }
+        // =================================
+        if (exc != null) {
+            throw new IOException(exc.getMessage());
+        }
+    }
+
+
+
+    /**
+     * Returns the content of the clipboard as a list of
+     * documents or null if clipboard is empty or does not
+     * contain documents of the specified type
+     * 
+     * 
+     * 
+     * @return
+     * @throws PersistenceException
+     */
+    public static List<Document> getClipboardDocuments(String typeName)
+        throws IOException, PersistenceException {
+
+        List<Document> resp = new ArrayList<Document>();
+        
+        List<File> ff = getClipboardFiles(typeName);
+        File infile = null;
+        InputStream is = null;
+        Object obj = null;
+        Document doc = null;
+        for (int i=0; i<ff.size(); i++) {
+            infile = ff.get(i);
+            is = new FileInputStream(infile);
+            obj = getPersMan().getObject(is);
+            is.close();
+            if (obj instanceof Document) {
+                doc = (Document) obj;
+                // Checking, but it should not be necessary
+                if (typeName == null || doc.getTypeName().compareTo(typeName) == 0) {
+                    resp.add(doc);
+                }
+            }
+        }
+        return resp;
+    }
+
+    /**
+     * Stores doc list to their clipboard
+     * to clipboard
+     * 
+     * @param st
+     * @throws PersistenceException
+     */
+    public static void saveToClipboard(List<Document> docs)
+        throws IOException, PersistenceException {
+        
+        if (docs == null || docs.size() == 0) {
+            return;
+        }
+        
+        Map<String, List<Document>> separ =
+            new HashMap<String, List<Document>>();
+        Document doc = null;
+        List<Document> list = null;
+        for (int i=0; i<docs.size(); i++) {
+            doc = docs.get(i);
+            if (doc != null && doc.getTypeName() != null) {
+                list = separ.get(doc.getTypeName());
+                if (list == null) {
+                    list = new ArrayList<Document>();
+                    list.add(doc);
+                    separ.put(doc.getTypeName(), list);
+                } else {
+                    list.add(doc);
+                }
+            }
+        }
+        
+        Iterator<String> iter = separ.keySet().iterator();
+        String k = null;
+        while (iter.hasNext()) {
+            k = iter.next();
+            saveToClipboard(k, separ.get(k));
+        }
+    }
+    
+    /**
+     * docs in list are of same type
+     * @param typeName
+     * @param docs
+     */
+    private static void saveToClipboard(String typeName, List<Document> docs)
+    throws IOException, PersistenceException {
+        
+        clearClipboard(typeName);
+        File f = null;
+        OutputStream os = null;
+        PersistentState state = null;
+            
+        for (int i=0; i<docs.size(); i++) {
+            state = getPersMan().getState(docs.get(i), true);
+            if (state.getContext().getErrors() != null) {
+                throw state.getContext().getErrors();
+            }
+            f = getFirstUnusedClipboardFile(typeName);
+            os = new FileOutputStream(f);
+            getPersMan().saveState(state, os);
+            os.close();
+        }
+    }
+    
+    
+
+    public static String getLastMessage(Throwable ex) {
+        
+        if (ex == null) {
+            return "-";
+        }
+        
+        Throwable p = ex;
+        while (p.getCause() != null && p.getCause() != p) {
+            p = p.getCause();
+        }
+        return p.getMessage();
+    }
+
+
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyDocumentAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyDocumentAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyDocumentAction.java	(revision 42196)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.actions;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.AbstractDocumentAction;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+public class CopyDocumentAction extends AbstractDocumentAction {
+
+    private static Logger logger = LoggerFactory.getLogger(
+        CopyDocumentAction.class);
+    
+	public CopyDocumentAction() {
+		super("copy");
+		this.order = 0;
+		this.title = Messages.getText("copiar");
+		this.group = ProjectManager.getInstance().addDocumentActionGroup("ClipboardActions", "Clipboard actions", null, 0);
+	}
+	
+	public void execute(Document document, List<Document> documents) {
+	    
+		List<Document> docs = new ArrayList<Document>(documents);
+		if(document != null &&  !docs.contains(document)) {
+			docs.add(document);
+		}
+		// Now "docs" has all docs involved
+		try {
+            CopyPasteDocsUtils.saveToClipboard(docs);
+        } catch (Exception e) {
+            
+            logger.info("While copying docs to clipboard.", e);
+            JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                Messages.getText("_Clipboard_error") + ":\n"
+                + CopyPasteDocsUtils.getLastMessage(e),
+                title,
+                JOptionPane.ERROR_MESSAGE);
+            /*
+             * Clear clipboard after error
+             */
+            try {
+                CopyPasteDocsUtils.clearClipboard(null);
+            } catch (Exception exc) {
+                logger.error("While clearing clipboard.", exc);
+            }
+            
+        }
+	}
+	
+	public boolean isAvailable(Document document, List<Document> selectedItems) {
+	    return selectedItems.size() > 0;
+	}
+
+	public boolean isVisible(Document document, List<Document> documents) {
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyDocumentAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CutDocumentAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CutDocumentAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CutDocumentAction.java	(revision 42196)
@@ -0,0 +1,138 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.actions;
+
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.AbstractDocumentAction;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.i18n.Messages;
+
+
+public class CutDocumentAction extends AbstractDocumentAction {
+	
+    private static Logger logger = LoggerFactory.getLogger(
+        CutDocumentAction.class);
+    
+	public CutDocumentAction() {
+		super("cut");
+		this.order = 0;
+		this.title =PluginServices.getText(this, "cortar");
+		this.group = ProjectManager.getInstance().addDocumentActionGroup("ClipboardActions", "Clipboard actions", null, 0);
+	}
+	
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public boolean isVisible(Document item, List<Document> selectedItems) {
+		return true;
+	}
+
+	public boolean isAvailable(Document item, List<Document> selectedItems) {
+		return selectedItems.size() > 0;
+	}
+
+	public void execute(Document document, List<Document> documents) {
+
+        List<Document> docs = new ArrayList<Document>(documents);
+        if(document != null &&   !docs.contains(document)) {
+            docs.add(document);
+        }
+        // Now "docs" has all docs involved
+        try {
+            CopyPasteDocsUtils.saveToClipboard(docs);
+        } catch (Exception e) {
+            
+            logger.info("While copying docs to clipboard in cut operation.", e);
+            JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                Messages.getText("_Clipboard_error") + ":\n"
+                + CopyPasteDocsUtils.getLastMessage(e),
+                title,
+                JOptionPane.ERROR_MESSAGE);
+            /*
+             * Clear clipboard after error
+             */
+            try {
+                CopyPasteDocsUtils.clearClipboard(null);
+            } catch (Exception exc) {
+                logger.error("While clearing clipboard.", exc);
+            }
+        }
+        
+	    // ==================================================
+	    
+		Project project = ProjectManager.getInstance().getCurrentProject();
+		for (Document doc : docs) {
+			if (doc.isLocked()) {
+				JOptionPane.showMessageDialog(
+						(Component)PluginServices.getMainFrame(),
+						PluginServices.getText(this, "locked_element_it_cannot_be_deleted") + ": " +doc.getName()
+				);
+				return;
+			}
+		}
+
+    	int option=JOptionPane.showConfirmDialog(
+    			(Component)PluginServices.getMainFrame(),
+    			PluginServices.getText(this,"desea_borrar_el_documento")
+    	);
+    	if (option!=JOptionPane.OK_OPTION) {
+    		return;
+    	}
+
+		this.removeDocuments(docs,project);
+
+	}
+
+	private boolean removeDocuments(List<Document> selectedItems,Project project) {
+		for (Document document : selectedItems) {
+			if (document.isLocked()) {
+				JOptionPane.showMessageDialog(
+						(Component)PluginServices.getMainFrame(),
+						PluginServices.getText(this, "locked_element_it_cannot_be_deleted") + ": " +document.getName()
+				);
+			} else {
+				PluginServices.getMDIManager().closeSingletonWindow(document);
+				project.remove(document);
+			}
+		}
+		return true;
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CutDocumentAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/PasteDocumentAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/PasteDocumentAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/PasteDocumentAction.java	(revision 42196)
@@ -0,0 +1,101 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.actions;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.AbstractDocumentAction;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.gui.ProjectWindow;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+public class PasteDocumentAction extends AbstractDocumentAction {
+
+    private static Logger logger = LoggerFactory.getLogger(
+        PasteDocumentAction.class);
+
+	public PasteDocumentAction() {
+		super("paste");
+		this.order = 0;
+		this.title =PluginServices.getText(this, "pegar");
+		this.group = ProjectManager.getInstance().addDocumentActionGroup("ClipboardActions", "Clipboard actions", null, 0);
+	}
+	
+	public void execute(Document document, List<Document> documents) {
+	    
+	    List<Document> docs = null;
+	    
+	    try {
+            docs = CopyPasteDocsUtils.getClipboardDocuments(null);
+        } catch (Exception e) {
+            
+            logger.info("While getting docs from clipboard.", e);
+            JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                Messages.getText("_Clipboard_error") + ":\n"
+                + CopyPasteDocsUtils.getLastMessage(e),
+                title,
+                JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+	    
+	    if (docs.size() == 0) {
+            JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                Messages.getText("_There_are_no_documents_to_paste"),
+                title,
+                JOptionPane.INFORMATION_MESSAGE);
+            return;
+	    }
+	    
+	    Project project = ProjectManager.getInstance().getCurrentProject();
+	    
+	    for (int i=0; i<docs.size(); i++) {
+	        project.add(docs.get(i));
+	    }
+
+	}
+	
+	public boolean isAvailable(Document document, List<Document> documents) {
+	    return CopyPasteDocsUtils.getClipboardFiles(null).size() > 0;
+	}
+
+	public boolean isVisible(Document document, List<Document> documents) {
+		return true;
+	}
+
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/PasteDocumentAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/NameException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/NameException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/NameException.java	(revision 42196)
@@ -0,0 +1,75 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.exceptions;
+
+/**
+ * Excepci�n que indica un conflicto de nombres en los elementos del 
+ * proyecto
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class NameException extends RuntimeException {
+	/**
+	 *
+	 */
+	public NameException() {
+		super();
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 */
+	public NameException(String message) {
+		super(message);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public NameException(String message, Throwable cause) {
+		super(message, cause);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param cause
+	 */
+	public NameException(Throwable cause) {
+		super(cause);
+
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/NameException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/OpenException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/OpenException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/OpenException.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.exceptions;
+
+import java.util.Map;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.utils.XMLException;
+
+
+public class OpenException extends XMLException {
+	private Exception e;
+	private String c;
+	public OpenException(Exception e,String c) {
+		this.e=e;
+		this.c=c;
+	}
+	public void showError(){
+		NotificationManager.addError(PluginServices.getText(this,"abrir_proyecto"),e);
+	}
+	public void showInfo(){
+		NotificationManager.addInfo(PluginServices.getText(this,"abrir_proyecto"),e);
+	}
+	public void showWarning(){
+		NotificationManager.addWarning(PluginServices.getText(this,"abrir_proyecto"),e);
+	}
+	protected Map values() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	public void showMessageError(String name) {
+		String message=PluginServices.getText(this,"error_opening_the_document")+": "+name;
+		NotificationManager.showMessageError(message,e);
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/OpenException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/SaveException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/SaveException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/SaveException.java	(revision 42196)
@@ -0,0 +1,55 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.exceptions;
+
+import java.util.Map;
+
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.utils.XMLException;
+
+
+public class SaveException extends XMLException {
+	private Exception e;
+	private String c;
+	public SaveException(Exception e, String c) {
+		this.e=e;
+		this.c=c;
+	}
+	public SaveException() {
+		// TODO Auto-generated constructor stub
+	}
+	public void showError(){
+		NotificationManager.addError("Fallo guardando el Proyecto en : "+c,e);
+	}
+	public void showInfo(){
+		NotificationManager.addInfo("Guardando el Proyecto en : "+c,e);
+	}
+	public void showWarning(){
+		NotificationManager.addWarning("Guardando el Proyecto en : "+c,e);
+	}
+	protected Map values() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/SaveException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocument.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocument.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocument.java	(revision 42196)
@@ -0,0 +1,374 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.project.documents;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.swing.JComponent;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.gui.WindowLayout;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+
+/**
+ * Clase base de los elementos del proyecto (mapas, tablas y vistas)
+ *
+ * @author 2006-2009 Jose Manuel Vivo
+ * @author 2005-         Vicente Caballero
+ * @author 2009-         Joaquin del Cerro
+ *
+ */
+public abstract class AbstractDocument implements Serializable, Persistent, Document {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 3335040973071555406L;
+
+	public static final String PERSISTENCE_DEFINITION_NAME = "AbstractDocument";
+
+	protected PropertyChangeSupport change;
+
+	private Project project;
+
+	private String name;
+	private String creationDate;
+	private String owner;
+	private String comment;
+	private boolean locked = false;
+	private boolean isModified=false;
+
+	private DocumentManager factory;
+
+	private WindowLayout windowLayout = null;
+
+	private List<ProjectDocumentListener> projectDocListener = new ArrayList<ProjectDocumentListener>();
+
+	/**
+	 * Creates a new ProjectElement object.
+	 */
+	public AbstractDocument() {
+		creationDate = DateFormat.getDateInstance().format(new Date());
+		change = new PropertyChangeSupport(this);
+		this.factory = null;
+		this.project = null;
+		this.name = PluginServices.getText(this, "untitled");
+	}
+
+	public AbstractDocument(DocumentManager factory) {
+		this();
+		this.factory = factory;
+	}
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return name;
+	}
+
+	/**
+	 * return the name of the document
+	 *
+	 * @return name as String
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Return the name of the type of documents
+	 *
+	 * @return name as String
+	 */
+	public String getTypeName() {
+		return this.factory.getTypeName();
+	}
+
+	/**
+	 * Sets the nane of the document
+	 *
+	 * @param name as string
+	 */
+	public void setName(String name) {
+		if (isLocked()) {
+			throw new RuntimeException("this document is locked");
+		}
+		if( name.length()==0) {
+			name = null;
+		}
+		if( project != null ) {
+			Document doc = project.getDocument(name, this.getTypeName());
+			if( doc != null && !this.equals(doc)  ) {
+				throw new RuntimeException("document name already exists in project");
+			}
+		}
+		String previousName = this.name;
+		this.name = name;
+		change.firePropertyChange("name", previousName, name);
+	}
+
+	/**
+	 * Get the creation date of the document.
+	 *
+	 * @return creation date as String
+	 */
+	public String getCreationDate() {
+		return creationDate;
+	}
+
+	/**
+	 * Get the creator name of the document.
+	 *
+	 * @return creator name as String
+	 */
+	public String getOwner() {
+		return owner;
+	}
+
+	/**
+	 * Set the creation date of the document.
+	 *
+	 * @param string
+	 */
+	public void setCreationDate(String string) {
+		creationDate = string;
+		change.firePropertyChange("creationDate", creationDate, creationDate);
+	}
+
+	/**
+	 * Sets the creator name of the document
+	 *
+	 * @param string
+	 */
+	public void setOwner(String string) {
+		String oldOwner = owner;
+		owner = string;
+		change.firePropertyChange("owner", oldOwner, owner);
+	}
+
+	/**
+	 * Gets the comments asociateds to the document
+	 *
+	 * @return comments as String
+	 */
+	public String getComment() {
+		return comment;
+	}
+
+	/**
+	 * Gets the comments asociateds to the document
+	 *
+	 * @param string
+	 */
+	public void setComment(String string) {
+		String oldComment = comment;
+		comment = string;
+		change.firePropertyChange("comment", oldComment, comment);
+	}
+
+	/**
+	 * Add a listener to monitor the changes in the properties of the document
+	 *
+	 * @param listener
+	 */
+	public synchronized void addPropertyChangeListener(
+		PropertyChangeListener listener) {
+		change.addPropertyChangeListener(listener);
+	}
+
+	/**
+	 * Register a  ProjectDocumentListener.
+	 * @param  listener  ProjectDocumentListener
+	 */
+	public void addListener(ProjectDocumentListener listener) {
+		if(this.projectDocListener.indexOf(listener) == -1)
+			this.projectDocListener.add(listener);
+	}
+
+
+	public WindowLayout getWindowLayout() {
+		return this.windowLayout;
+	}
+
+	public void setWindowLayout(WindowLayout layout) {
+		this.windowLayout = layout;
+	}
+
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+		this.setComment( state.getString("comment") );
+		this.setCreationDate( state.getString("creationDate") );
+		this.setName( state.getString("name") );
+		this.setOwner( state.getString("owner") );
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+		state.set("comment", comment);
+		state.set("creationDate", creationDate);
+		state.set("name", name);
+		state.set("owner", owner);
+		state.set("locked", locked);
+	}
+
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.getDefinition(PERSISTENCE_DEFINITION_NAME);
+		if ( definition == null ){
+		    definition = manager.addDefinition(
+		        AbstractDocument.class,
+		        PERSISTENCE_DEFINITION_NAME,
+		        "Document persistence definition",
+		        null,
+		        null
+		    );
+		    definition.addDynFieldString("comment").setMandatory(false);
+		    definition.addDynFieldString("creationDate").setMandatory(true);
+		    definition.addDynFieldString("name").setMandatory(true);
+		    definition.addDynFieldString("owner").setMandatory(false);
+		    definition.addDynFieldBoolean("locked").setMandatory(true);
+		}
+	}
+
+	public Project getProject() {
+		return project;
+	}
+
+	public void setProject(Project project) {
+		this.project = project;
+	}
+
+
+	/**
+	 * Locks this project element protecting it from deleting from the project.
+	 */
+	public void lock() {
+		boolean oldLocked = locked;
+		locked = Boolean.TRUE;
+		change.firePropertyChange("locked", oldLocked, locked);
+	}
+
+	/**
+	 * Unlocks this element. So, from now on, it can be removed from the project.
+	 */
+	public void unlock() {
+		boolean oldLocked = locked;
+		locked = Boolean.FALSE;
+		change.firePropertyChange("locked", oldLocked, locked);
+	}
+
+	/**
+	 * Tells whether if this project's element is locked/protected or not. A protected
+	 * element cannot be removed from the current project.
+	 *
+	 * @see <b>lock()</b> and <b>unlock()</b> methods.
+	 *
+	 * @return true if it is locked, false otherwise
+	 */
+	public boolean isLocked() {
+		return locked;
+	}
+
+	public DocumentManager getFactory() {
+		return factory;
+	}
+
+	public boolean isModified() {
+		return isModified;
+	}
+
+	public void setModified(boolean modified) {
+		isModified=modified;
+	}
+
+	/**
+	 * Throw this event when a new window is created
+	 * @param  window
+	 *         IWindow created
+	 */
+	public void raiseEventCreateWindow(IWindow window) {
+		for (int i = 0; i < projectDocListener.size(); i++)
+			projectDocListener.get(i).windowCreated(window);
+	}
+
+	/**
+	 * @deprecated use {link {@link #raiseEventCreateWindow(IWindow)}
+	 */
+	protected void callCreateWindow(IWindow window) {
+		raiseEventCreateWindow(window);
+	}
+
+	public void afterAdd() {
+		// do nothing by default
+	}
+
+	public void afterRemove() {
+		// do nothing by default
+	}
+
+	public String exportDocumentAsText() {
+		throw new UnsupportedOperationException();
+	}
+
+	public void setStateFromText(String text) {
+		throw new UnsupportedOperationException();
+	}
+
+	public IWindow getPropertiesWindow() {
+		return this.getFactory().getPropertiesWindow(this);
+	}
+
+	public IWindow getMainWindow() {
+		return this.getFactory().getMainWindow(this);
+	}
+
+    public JComponent getMainComponent() {
+		return this.getFactory().getMainComponent(this);
+    }
+
+    public boolean isTemporary() {
+        return false;
+    }
+
+    public boolean isAvailable() {
+        return true;
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocument.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/WindowLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/WindowLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/WindowLayout.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * @author cesar
+ * 
+ */
+public class WindowLayout implements Persistent {
+
+    Map<String, String> data = null;
+
+    public WindowLayout() {
+        data = new HashMap<String, String>();
+    }
+
+    public void set(String key, String value) {
+        data.put(key, value);
+    }
+
+    public String get(String key) {
+        return (String) data.get(key);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void loadFromState(PersistentState state)
+        throws PersistenceException {
+        this.data.clear();
+        this.data.putAll((Map<String, String>) state.get("data"));
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("data", data);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/WindowLayout.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPageFactory.java	(revision 42196)
@@ -0,0 +1,23 @@
+
+package org.gvsig.app.project.documents.gui;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+public class ProjectGeneralPropertiesPageFactory implements PropertiesPageFactory {
+
+    public String getGroupID() {
+        return Project.PROJECT_PROPERTIES_PAGE_GROUP;
+    }
+    
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    public PropertiesPage create(Object obj) {
+        return new ProjectGeneralPropertiesPage((Project)obj);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/DocumentContextMenu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/DocumentContextMenu.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/DocumentContextMenu.java	(revision 42196)
@@ -0,0 +1,113 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.DocumentAction;
+import org.gvsig.app.project.documents.DocumentActionGroup;
+
+public class DocumentContextMenu extends JPopupMenu {
+
+    /**
+	 *
+	 */
+    private static final long serialVersionUID = -8153469580038240864L;
+
+    private Document item;
+    private List<Document> seleteds;
+    private List<DocumentAction> actions = null;
+
+    public DocumentContextMenu(String doctype, Document document,
+        Document[] seletedDocuments) {
+        super();
+
+        List<DocumentAction> allActions =
+            ProjectManager.getInstance().getDocumentActions(doctype);
+        List<DocumentAction> actions = new ArrayList<DocumentAction>();
+        DocumentActionGroup group = null;
+
+        this.item = document;
+        this.seleteds = Arrays.asList(seletedDocuments);
+        if (allActions != null) {
+            for (DocumentAction action : allActions) {
+                if (action.isVisible(document, this.seleteds)) {
+                    actions.add(action);
+                    // Create menu item
+                    MenuItem item = new MenuItem(action.getTitle(), action);
+
+                    item.setEnabled(action
+                        .isAvailable(this.item, this.seleteds));
+                    if (!action.getGroup().equals(group)) {
+                        if (group != null) {
+                            this.addSeparator();
+                        }
+                        group = action.getGroup();
+                    }
+                    this.add(item);
+
+                }
+            }
+        }
+        this.actions = actions;
+    }
+
+    public boolean hasActions() {
+        return actions != null || actions.size() > 0;
+    }
+
+    private class MenuItem extends JMenuItem implements ActionListener {
+
+        /**
+		 *
+		 */
+        private static final long serialVersionUID = -752624469241001299L;
+        private DocumentAction action;
+
+        public MenuItem(String text, DocumentAction action) {
+            super(text);
+            this.action = action;
+            String tip = this.action.getDescription();
+            if (tip != null && tip.length() > 0) {
+                this.setToolTipText(tip);
+            }
+            this.addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            this.action.execute(DocumentContextMenu.this.item,
+                DocumentContextMenu.this.seleteds);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/DocumentContextMenu.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ObjectSelectionStep.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ObjectSelectionStep.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ObjectSelectionStep.java	(revision 42196)
@@ -0,0 +1,64 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import org.gvsig.utils.swing.objectSelection.ObjectSelection;
+import org.gvsig.utils.swing.wizard.Step;
+import org.gvsig.utils.swing.wizard.WizardControl;
+
+/**
+ * Control ObjectSelection como paso de un asistente
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ObjectSelectionStep extends ObjectSelection implements Step {
+
+    private static final long serialVersionUID = 1721757595450180255L;
+    private WizardControl w;
+
+    /**
+     * @see org.gvsig.utils.swing.wizard.Step#init(org.gvsig.utils.swing.wizard.Wizard)
+     */
+    public void init(WizardControl w) {
+        this.w = w;
+    }
+
+    /**
+     * @see org.gvsig.utils.swing.objectSelection.ObjectSelection#seleccion()
+     */
+    protected void seleccion() {
+        if (w != null) {
+            w.enableNext(getCombo().getSelectedIndex() != -1);
+        }
+    }
+
+    /**
+     * Obtiene el elemento seleccionado
+     * 
+     * @return
+     */
+    public Object getSelectedItem() {
+        return getCombo().getSelectedItem();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ObjectSelectionStep.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/AndamiWizard.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/AndamiWizard.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/AndamiWizard.java	(revision 42196)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.utils.swing.wizard.Wizard;
+
+/**
+ * Vista de andami que contiene un asistente
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class AndamiWizard extends Wizard implements IWindow {
+
+    private static final long serialVersionUID = -4320079648891816068L;
+
+    /**
+     * @param backText
+     * @param nextText
+     * @param finishText
+     * @param cancelText
+     */
+    public AndamiWizard(String backText, String nextText, String finishText,
+        String cancelText) {
+        super(backText, nextText, finishText, cancelText);
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        return new WindowInfo(WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
+            | WindowInfo.RESIZABLE);
+    }
+
+    public Object getWindowProfile() {
+        // TODO Auto-generated method stub
+        return WindowInfo.PROPERTIES_PROFILE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/AndamiWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ListManagerSkin.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ListManagerSkin.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ListManagerSkin.java	(revision 42196)
@@ -0,0 +1,199 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.utils.listManager.ListManager;
+
+public class ListManagerSkin extends JPanel {
+
+    private static final long serialVersionUID = 5194138202300759734L;
+    private JScrollPane jScrollPane = null;
+    private JPanel jPanel = null;
+    private JButton jButtonDown = null;
+    private JButton jButtonUp = null;
+    private JButton jButtonAdd = null;
+    private JButton jButtonDel = null;
+
+    private ListManager listManager;// = new ListManager();
+
+    private JList jList = null;
+    private JPanel jPanel1 = null;
+
+    /**
+     * This method initializes jScrollPane
+     * 
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new JScrollPane();
+            jScrollPane.setViewportView(getJList());
+        }
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes jPanel
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel() {
+        if (jPanel == null) {
+            jPanel = new JPanel();
+            FlowLayout flowLayout = new FlowLayout();
+            flowLayout.setAlignment(FlowLayout.RIGHT);
+            jPanel.setLayout(flowLayout);
+            jPanel.add(getJPanel1(), null);
+        }
+        return jPanel;
+    }
+
+    /**
+     * This method initializes jButton
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJButtonDown() {
+        if (jButtonDown == null) {
+            jButtonDown = new JButton("abajo");
+            jButtonDown.setText(PluginServices.getText(this, "abajo"));
+        }
+        return jButtonDown;
+    }
+
+    /**
+     * This method initializes jButton1
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJButtonUp() {
+        if (jButtonUp == null) {
+            jButtonUp = new JButton("arriba");
+            jButtonUp.setText(PluginServices.getText(this, "arriba"));
+        }
+        return jButtonUp;
+    }
+
+    /**
+     * This method initializes jButton2
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJButtonAdd() {
+        if (jButtonAdd == null) {
+            jButtonAdd = new JButton("A�adir");
+            jButtonAdd.setText(PluginServices.getText(this, "Anadir"));
+        }
+        return jButtonAdd;
+    }
+
+    /**
+     * This method initializes jButton3
+     * 
+     * @return javax.swing.JButton
+     */
+    private JButton getJButtonDel() {
+        if (jButtonDel == null) {
+            jButtonDel = new JButton("Eliminar");
+            jButtonDel.setText(PluginServices.getText(this, "Eliminar"));
+        }
+        return jButtonDel;
+    }
+
+    /**
+     * This method initializes jList
+     * 
+     * @return javax.swing.JList
+     */
+    private JList getJList() {
+        if (jList == null) {
+            jList = new JList();
+        }
+        return jList;
+    }
+
+    /**
+     * This is the default constructor
+     */
+    public ListManagerSkin(boolean down) {
+        super();
+        listManager = new ListManager(down);
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(421, 349);
+        this.add(getJScrollPane(), BorderLayout.CENTER);
+        this.add(getJPanel(), BorderLayout.EAST);
+        listManager.setBtnDown(getJButtonDown());
+        listManager.setBtnUp(getJButtonUp());
+        listManager.setBtnAdd(getJButtonAdd());
+        listManager.setBtnDel(getJButtonDel());
+        listManager.setList(getJList());
+        listManager.initialize();
+
+    }
+
+    /**
+     * @return Returns the listManager.
+     */
+    public ListManager getListManager() {
+        return listManager;
+    }
+
+    /**
+     * This method initializes jPanel1
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel1() {
+        if (jPanel1 == null) {
+            jPanel1 = new JPanel(new GridLayout(6, 1, 5, 5));
+
+            jPanel1.setPreferredSize(new Dimension(100, 180));
+            jPanel1.add(getJButtonAdd(), null);
+            jPanel1.add(getJButtonDel(), null);
+            jPanel1.add(getJButtonUp(), null);
+            jPanel1.add(getJButtonDown(), null);
+        }
+        return jPanel1;
+    }
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ListManagerSkin.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/SymbolCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/SymbolCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/SymbolCellEditor.java	(revision 42196)
@@ -0,0 +1,193 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.awt.Component;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.EventObject;
+
+import javax.swing.JButton;
+import javax.swing.JTable;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.legend.gui.PanelEditSymbol;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+/**
+ * Cell Editor de ISymbols. Controla los eventos de edici�n que se realicen
+ * sobre la columna de s�mbolos.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class SymbolCellEditor extends JButton implements TableCellEditor {
+
+    private static final long serialVersionUID = -913612642474934455L;
+    private ArrayList listeners = new ArrayList();
+    private ISymbol symbol;
+    private int shapeType;
+    private PanelEditSymbol symbolPanel;
+
+    public SymbolCellEditor(int shapeType) {
+        this.shapeType = shapeType;
+        addMouseListener(new MouseListener() {
+
+            public void mouseClicked(MouseEvent e) {
+                // if (e.getClickCount() == 2) {
+                /*
+                 * It's a button, simple click is enough, I think
+                 */
+                    symbolPanel.setSymbol(symbol);
+                    // symbolPanel.setShapeType(SymbolCellEditor.this.shapeType);
+                    symbolPanel.setShapeType(symbol.getSymbolType());
+                    PluginServices.getMDIManager().addWindow(symbolPanel);
+                    if (symbolPanel.isOK()) {
+                        symbol = (ISymbol) symbolPanel.getSymbol();
+                        stopCellEditing();
+                    }
+                // }
+            }
+
+            public void mouseEntered(MouseEvent e) {
+            }
+
+            public void mouseExited(MouseEvent e) {
+            }
+
+            public void mousePressed(MouseEvent e) {
+            }
+
+            public void mouseReleased(MouseEvent e) {
+            }
+
+        });
+        addKeyListener(new KeyAdapter() {
+
+            public void keyReleased(KeyEvent e) {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+                    stopCellEditing();
+                } else
+                    if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+                        cancelCellEditing();
+                    }
+            }
+        });
+        symbolPanel = new PanelEditSymbol();
+
+    }
+
+    // Implement the one CellEditor method that AbstractCellEditor doesn't.
+    public Object getCellEditorValue() {
+        return symbol;
+    }
+
+    // Implement the one method defined by TableCellEditor.
+    public Component getTableCellEditorComponent(JTable table, Object value,
+        boolean isSelected, int row, int column) {
+        symbol = (ISymbol) value;
+        // setBackground(symbol.getColor());
+
+        return this;
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void cancelCellEditing() {
+        if (symbol != null) {
+            // setBackground(symbol.getColor());
+        }
+
+        for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingCanceled(evt);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public boolean stopCellEditing() {
+        for (int i = 0; i < listeners.size(); i++) {
+            CellEditorListener l = (CellEditorListener) listeners.get(i);
+            ChangeEvent evt = new ChangeEvent(this);
+            l.editingStopped(evt);
+        }
+
+        return true;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param anEvent
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public boolean isCellEditable(EventObject anEvent) {
+        return true;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param anEvent
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    public boolean shouldSelectCell(EventObject anEvent) {
+        return true;
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param l
+     *            DOCUMENT ME!
+     */
+    public void addCellEditorListener(CellEditorListener l) {
+        listeners.add(l);
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param l
+     *            DOCUMENT ME!
+     */
+    public void removeCellEditorListener(CellEditorListener l) {
+        listeners.remove(l);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/SymbolCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectElementListModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectElementListModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectElementListModel.java	(revision 42196)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.util.ArrayList;
+
+import javax.swing.AbstractListModel;
+
+/**
+ * Modelo para presentar los ProjectElement's (vistas, mapas, tablas) en un
+ * JList
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ProjectElementListModel extends AbstractListModel {
+
+    private static final long serialVersionUID = 5224594892273078623L;
+    private ArrayList els;
+
+    /**
+     * Creates a new MyListModel object.
+     * 
+     * @param els
+     *            Elementos del modelo
+     */
+    public ProjectElementListModel(ArrayList els) {
+        this.els = els;
+    }
+
+    /**
+     * Obtiene el tama�o de la lista
+     * 
+     * @return tama�o de la lista
+     */
+    public int getSize() {
+        if (els == null) {
+            return 0;
+        }
+
+        return els.size();
+    }
+
+    /**
+     * @see javax.swing.ListModel#getElementAt(int)
+     */
+    public Object getElementAt(int index) {
+        if (els == null) {
+            return "";
+        }
+
+        return els.get(index);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectElementListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPage.java	(revision 42196)
@@ -0,0 +1,424 @@
+package org.gvsig.app.project.documents.gui;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.io.File;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+
+public class ProjectGeneralPropertiesPage extends JPanel implements PropertiesPage {
+
+    private Project project = null;
+
+    private JPanel jPanel = null;
+    private JLabel jLabel = null;
+    private JLabel jLabel1 = null;
+    private JLabel jLabel2 = null;
+    private JLabel jLabel3 = null;
+    private JLabel jLabel4 = null;
+    private JTextField txtName = null;
+    private JTextField txtPath = null;
+    private JTextField txtCreationDate = null;
+    private JTextField txtModificationDate = null;
+    private JTextField txtOwner = null;
+    private JLabel jLabel5 = null;
+    private JTextArea txtComments = null;
+    private JLabel jLabel6 = null;
+    private JLabel lblColor = null;
+    private JButton btnColor = null;
+    private JScrollPane jScrollPane = null;
+
+    public ProjectGeneralPropertiesPage(Project project) {
+        this.project = project;
+        initComponents();
+    }
+
+    public boolean whenAccept() {
+        return whenApply();
+    }
+
+    public boolean whenApply() {
+        project.setName(txtName.getText());
+        project.setOwner(txtOwner.getText());
+        project.setComments(txtComments.getText());
+        project.setSelectionColor(lblColor.getBackground());
+
+        return true;
+    }
+
+    public boolean whenCancel() {
+        return true;
+    }
+
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("General");
+    }
+
+    public int getPriority() {
+        return 1000;
+    }
+
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void initComponents() {
+        setLayout(new GridLayout(1, 1, 0, 0));
+        add(getJPanel());
+
+        getTxtName().setText(project.getName());
+
+        String path = ProjectExtension.getPath();
+
+        if ( path != null ) {
+            File f = new File(path);
+            getTxtPath().setText(f.toString());
+        } else {
+            getTxtPath().setText("");
+        }
+
+        getTxtOwner().setText(project.getOwner());
+        getTxtComments().setText(project.getComments());
+        getTxtCreationDate().setText(project.getCreationDate());
+        getTxtModificationDate().setText(project.getModificationDate());
+
+        getLblColor().setBackground(project.getSelectionColor());
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return JPanel
+     */
+    private JPanel getJPanel() {
+        if ( jPanel == null ) {
+
+            jPanel = new JPanel(new GridBagLayout());
+            GridBagConstraints c = new GridBagConstraints();
+            c.insets = new Insets(2, 5, 0, 5);
+            c.gridy = -1;
+
+            addRow(c, getJLabel(), getTxtName());
+            addRow(c, getJLabel1(), getTxtPath());
+            addRow(c, getJLabel2(), getTxtCreationDate());
+            addRow(c, getJLabel3(), getTxtModificationDate());
+            addRow(c, getJLabel4(), getTxtOwner());
+
+            c.anchor = GridBagConstraints.WEST;
+            c.weightx = 0.0d;
+            c.gridx = 0;
+            c.gridy++;
+            jPanel.add(getJLabel6(), c);
+
+            JPanel colorPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+            colorPanel.add(getLblColor());
+            colorPanel.add(getBtnColor());
+
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.weightx = 1.0d;
+            c.gridx = 1;
+            jPanel.add(colorPanel, c);
+
+            c.anchor = GridBagConstraints.WEST;
+            c.weightx = 0.0d;
+            c.gridx = 0;
+            c.gridy++;
+            jPanel.add(getJLabel5(), c);
+
+            c.fill = GridBagConstraints.BOTH;
+            c.weightx = 1.0d;
+            c.gridy++;
+            c.gridwidth = 2;
+            jPanel.add(getJScrollPane(), c);
+
+            c.anchor = GridBagConstraints.EAST;
+            c.gridx = 0;
+            c.gridwidth = 2;
+            c.gridy++;
+            c.weightx = 1.0d;
+        }
+
+        return jPanel;
+    }
+
+    private void addRow(GridBagConstraints c, JComponent label, JComponent text) {
+        c.anchor = GridBagConstraints.WEST;
+        c.weightx = 0.0d;
+        c.gridx = 0;
+        c.gridy++;
+        jPanel.add(label, c);
+
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0d;
+        c.gridx = 1;
+        jPanel.add(text, c);
+    }
+
+    /**
+     * This method initializes jLabel
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel() {
+        if ( jLabel == null ) {
+            jLabel = new JLabel();
+            jLabel.setText(PluginServices.getText(this, "nombre_sesion") + ":");
+        }
+
+        return jLabel;
+    }
+
+    /**
+     * This method initializes jLabel1
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel1() {
+        if ( jLabel1 == null ) {
+            jLabel1 = new JLabel();
+            jLabel1.setText(PluginServices.getText(this, "path") + ":");
+        }
+
+        return jLabel1;
+    }
+
+    /**
+     * This method initializes jLabel2
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel2() {
+        if ( jLabel2 == null ) {
+            jLabel2 = new JLabel();
+            jLabel2
+                    .setText(PluginServices.getText(this, "creation_date") + ":");
+        }
+
+        return jLabel2;
+    }
+
+    /**
+     * This method initializes jLabel3
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel3() {
+        if ( jLabel3 == null ) {
+            jLabel3 = new JLabel();
+            jLabel3.setText(PluginServices.getText(this, "modification_date")
+                    + ":");
+        }
+
+        return jLabel3;
+    }
+
+    /**
+     * This method initializes jLabel4
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel4() {
+        if ( jLabel4 == null ) {
+            jLabel4 = new JLabel();
+            jLabel4.setText(PluginServices.getText(this, "owner") + ":");
+        }
+
+        return jLabel4;
+    }
+
+    /**
+     * This method initializes txtName
+     *
+     * @return JTextField
+     */
+    private JTextField getTxtName() {
+        if ( txtName == null ) {
+            txtName = new JTextField(20);
+        }
+
+        return txtName;
+    }
+
+    /**
+     * This method initializes txtPath
+     *
+     * @return JTextField
+     */
+    private JTextField getTxtPath() {
+        if ( txtPath == null ) {
+            txtPath = new JTextField(20);
+            txtPath.setEditable(false);
+            txtPath.setBackground(java.awt.Color.white);
+        }
+
+        return txtPath;
+    }
+
+    /**
+     * This method initializes txtCreationDate
+     *
+     * @return JTextField
+     */
+    private JTextField getTxtCreationDate() {
+        if ( txtCreationDate == null ) {
+            txtCreationDate = new JTextField(20);
+            txtCreationDate.setEditable(false);
+            txtCreationDate.setBackground(java.awt.Color.white);
+        }
+
+        return txtCreationDate;
+    }
+
+    /**
+     * This method initializes txtModificationDate
+     *
+     * @return JTextField
+     */
+    private JTextField getTxtModificationDate() {
+        if ( txtModificationDate == null ) {
+            txtModificationDate = new JTextField(20);
+            txtModificationDate.setEditable(false);
+            txtModificationDate.setBackground(java.awt.Color.white);
+        }
+
+        return txtModificationDate;
+    }
+
+    /**
+     * This method initializes txtOwner
+     *
+     * @return JTextField
+     */
+    private JTextField getTxtOwner() {
+        if ( txtOwner == null ) {
+            txtOwner = new JTextField(20);
+        }
+
+        return txtOwner;
+    }
+
+    /**
+     * This method initializes jLabel5
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel5() {
+        if ( jLabel5 == null ) {
+            jLabel5 = new JLabel();
+            jLabel5.setText(PluginServices.getText(this, "comentarios") + ":");
+        }
+
+        return jLabel5;
+    }
+
+    /**
+     * This method initializes txtComments
+     *
+     * @return JTextArea
+     */
+    private JTextArea getTxtComments() {
+        if ( txtComments == null ) {
+            txtComments = new JTextArea();
+            txtComments.setRows(4);
+            txtComments.setColumns(20);
+        }
+
+        return txtComments;
+    }
+
+    /**
+     * This method initializes jLabel6
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel6() {
+        if ( jLabel6 == null ) {
+            jLabel6 = new JLabel();
+            jLabel6.setText(PluginServices.getText(this, "selection_color")
+                    + ":");
+        }
+
+        return jLabel6;
+    }
+
+    /**
+     * This method initializes lblColor
+     *
+     * @return JLabel
+     */
+    private JLabel getLblColor() {
+        if ( lblColor == null ) {
+            lblColor = new JLabel();
+
+            lblColor.setPreferredSize(getBtnColor().getPreferredSize());
+            lblColor.setOpaque(true);
+        }
+
+        return lblColor;
+    }
+
+    /**
+     * This method initializes btnColor
+     *
+     * @return JButton
+     */
+    private JButton getBtnColor() {
+        if ( btnColor == null ) {
+            btnColor
+                    = ToolsSwingLocator.getUsabilitySwingManager().createJButton(
+                            "...");
+
+            btnColor.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    Color ret
+                            = JColorChooser.showDialog(ProjectGeneralPropertiesPage.this,
+                                    PluginServices.getText(this, "selection_color"),
+                                    lblColor.getBackground());
+
+                    if ( ret != null ) {
+                        lblColor.setBackground(ret);
+                    }
+                }
+            });
+        }
+
+        return btnColor;
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if ( jScrollPane == null ) {
+            jScrollPane = new JScrollPane(getTxtComments());
+            Dimension dim = getTxtComments().getPreferredSize();
+            jScrollPane
+                    .setMinimumSize(new Dimension(dim.width, dim.height + 10));
+        }
+
+        return jScrollPane;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow.java	(revision 42196)
@@ -0,0 +1,1189 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import javax.swing.AbstractButton;
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.ScrollPaneConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.border.TitledBorder;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.help.Help;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.extension.ProjectExtension;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.AbstractDocument;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.usability.UsabilitySwingManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.utils.DefaultListModel;
+
+/**
+ * Clase principal del proyecto donde se puede operar para crear cualquier tipo
+ * de documento.
+ *
+ * @author Vicente Caballero Navarro
+ * @author gvSIG team
+ */
+public class ProjectWindow extends JPanel implements PropertyChangeListener,
+    IWindow, SingletonWindow, Observer {
+
+    private static final long serialVersionUID = 7315293357719796556L;
+
+    public static final String PERSISTENCE_DEFINITION_NAME = "ProjectWindow";
+
+    private JScrollPane documentTypes = null;
+    private JPanel documentTypesList = null;
+    private JRadioButton[] btnsDocuments = null;
+    private ButtonGroup grupo = new ButtonGroup();
+    private JPanel documentsPanel = null;
+    private JList lstDocs = null;
+    private JPanel jPanel2 = null;
+    private JButton btnNuevo = null;
+    private JButton btnPropiedades = null;
+    private JButton btnAbrir = null;
+    private JButton btnBorrar = null;
+    private JButton btnRenombrar = null;
+    private JPanel propertiesPanel = null;
+    private JLabel jLabel = null;
+    private JLabel lblNombreSesion = null;
+    private JLabel jLabel1 = null;
+    private JLabel lblGuardado = null;
+    private JLabel jLabel2 = null;
+    private JLabel lblFecha = null;
+    private JButton btnImportar = null;
+    private JButton btnExportar = null;
+    private JButton btnEditar = null;
+    // The properties of the Project Manager window (size, position, etc):
+    private WindowInfo m_viewInfo = null;
+
+    private Project project;
+    private UsabilitySwingManager manager = ToolsSwingLocator
+        .getUsabilitySwingManager();
+
+    private JScrollPane documentsScrollPane = null;
+    private JPanel projectButtonsPanel = null;
+
+    /**
+     * This is the default constructor
+     *
+     * @param project
+     *            Extension
+     */
+    public ProjectWindow() {
+        super();
+        initialize();
+        refreshControls();
+        Help.getHelp().enableHelp(this, this.getClass().getName());
+        // Observe document factory registration changes
+        ProjectManager.getInstance().addObserver(this);
+    }
+
+    /**
+     * Asigna el proyecto a la ventana
+     *
+     * @param project
+     *            Proyecto con el que se operar� a trav�s de este di�logo
+     */
+    public void setProject(Project project) {
+        this.project = project;
+        project.addPropertyChangeListener(this);
+        refreshControls();
+    }
+
+    /**
+     * Activa los botones de la botonera del medio o los desactiva en funci�n de
+     * que est� seleccionado o no un elemento de proyecto en la lista del medio
+     */
+    private void activarBotones() {
+        if (lstDocs.getSelectedIndex() != -1) {
+            btnAbrir.setEnabled(true);
+            btnBorrar.setEnabled(true);
+            if (lstDocs.getSelectedIndices().length == 1) {
+                btnRenombrar.setEnabled(true);
+                btnPropiedades.setEnabled(true);
+            } else {
+                btnRenombrar.setEnabled(false);
+                btnPropiedades.setEnabled(false);
+            }
+        } else {
+            btnAbrir.setEnabled(false);
+            btnBorrar.setEnabled(false);
+            btnRenombrar.setEnabled(false);
+            btnPropiedades.setEnabled(false);
+        }
+    }
+
+    /**
+     * Refresca la lista de elementos de proyecto con vistas, mapas o tablas,
+     * seg�n la opci�n activada
+     */
+    private void refreshList() {
+        if (project != null) {
+            DefaultListModel model = null;
+            String tituloMarco =
+                PluginServices.getText(this, "documentos_existentes");
+
+            String doctype = getDocumentSelected();
+            model = new DefaultListModel(project.getDocuments(doctype));
+            tituloMarco = getDocumentSelectedName();
+            Object selectedDoc = lstDocs.getSelectedValue();
+            lstDocs.setModel(model);
+            if (selectedDoc!=null) {
+            	lstDocs.setSelectedValue(selectedDoc, false);
+            }
+            
+            ((TitledBorder) getDocumentsPanel().getBorder())
+                .setTitle(tituloMarco);
+            getDocumentsPanel().repaint(1);
+            activarBotones();
+        }
+    }
+
+    /**
+     * Devuelve el nombre del tipo de documento activo (el mismo que
+     * ProjectDocumentFactory.getRegisterName)
+     *
+     *
+     * @return
+     */
+
+    public String getDocumentSelected() {
+        JRadioButton btnSelected = null;
+        for (int i = 0; i < btnsDocuments.length; i++) {
+            if (btnsDocuments[i].isSelected()) {
+                btnSelected = btnsDocuments[i];
+                return btnSelected.getName();
+            }
+        }
+
+        return null;
+    }
+
+    private String getDocumentSelectedName() {
+        JRadioButton btnSelected = null;
+        for (int i = 0; i < btnsDocuments.length; i++) {
+            if (btnsDocuments[i].isSelected()) {
+                btnSelected = btnsDocuments[i];
+                return btnSelected.getText();
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Refresca las etiquetas con la informaci�n del proyecto
+     */
+    private void refreshProperties() {
+        if (project != null) {
+            lblNombreSesion.setText(project.getName());
+            String path = ProjectExtension.getPath();
+            if (path != null) {
+                File f = new File(path);
+                lblGuardado.setText(f.toString());
+            } else {
+                lblGuardado.setText("");
+            }
+            lblFecha.setText(project.getCreationDate());
+        }
+    }
+
+    /**
+     * Refresca todo el di�logo
+     */
+    public void refreshControls() {
+        refreshList();
+        refreshProperties();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(new GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(2, 5, 2, 5);
+
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0d;
+        c.weighty = 0.0d;
+        c.gridy = 0;
+        add(getDocumentTypesPanel(), c);
+
+        c.fill = GridBagConstraints.BOTH;
+        c.gridy = 1;
+        c.weightx = 1.0d;
+        c.weighty = 1.0d;
+        add(getDocumentsPanel(), c);
+
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0d;
+        c.weighty = 0.0d;
+        c.gridy = 2;
+        add(getPropertiesPanel(), c);
+
+        this.setMinimumSize(this.getPreferredSize());
+        refreshDocuments();
+    }
+
+    private void createDocumentsInProject(String doctype) {
+        Iterator<? extends Document> documents =
+            ProjectManager.getInstance().createDocumentsByUser(doctype);
+        for (; (documents != null) && (documents.hasNext());) {
+            try {
+                Document document = documents.next();
+                project.add(document);
+                int index =
+                    ((DefaultListModel) lstDocs.getModel()).indexOf(document);
+                lstDocs.setSelectedIndex(index);
+                lstDocs.requestFocus();
+                openDocumentWindow(document);
+            } catch (Exception e) {
+                NotificationManager.addError(e);
+            }
+        }
+    }
+
+    /**
+     * Crea un nuevo project element
+     *
+     * @throws Exception
+     *             DOCUMENT ME!
+     */
+    private void newProjectDocument() throws Exception {
+        String doctype = getDocumentSelected();
+        createDocumentsInProject(doctype);
+        lstDocs.setSelectedIndex(lstDocs.getModel().getSize()-1);
+    }
+
+    /**
+     * Abre la ventana de un nuevo documento
+     */
+    private void abrir() {
+        int[] indexes = lstDocs.getSelectedIndices();
+        for (int i = indexes.length - 1; i >= 0; i--) {
+            int index = indexes[i];
+            if (index == -1) {
+                return;
+            }
+            String doctype = getDocumentSelected();
+            List<Document> documents = project.getDocuments(doctype);
+            Document doc = documents.get(index);
+            if(!doc.isAvailable()){
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+                JOptionPane.showMessageDialog(
+                    this,
+                    i18nManager.getTranslation("document_not_available"),
+                    i18nManager.getTranslation("abrir"),
+                    JOptionPane.WARNING_MESSAGE);
+                return;
+            }
+            openDocumentWindow(doc);
+        }
+    }
+
+    private void openDocumentWindow(Document doc) {
+        if (doc != null) {
+            IWindow window = doc.getFactory().getMainWindow(doc);
+            if (window == null) {
+                JOptionPane.showMessageDialog(
+                    (Component) PluginServices.getMainFrame(),
+                    PluginServices.getText(this, "error_opening_the_document"));
+                return;
+            }
+            PluginServices.getMDIManager().addWindow(window,
+                MDIManager.ALIGN_FIRST_LINE_END_CASCADE);
+            project.setModified(true);
+        }
+    }
+
+    /**
+     * Cambia el nombre de un project element
+     */
+    private void renombrar() {
+        int index = lstDocs.getSelectedIndex();
+
+        if (index == -1) {
+            return;
+        }
+        String doctype = getDocumentSelected();
+        List<Document> documents = project.getDocuments(doctype);
+        Document doc = documents.get(index);
+
+        JOptionPane pane = new JOptionPane();
+        pane.setMessage(PluginServices.getText(this, "introduce_nombre"));
+        pane.setMessageType(JOptionPane.QUESTION_MESSAGE);
+        pane.setWantsInput(true);
+        pane.setInitialSelectionValue(doc.getName());
+        pane.setInputValue(doc.getName());
+        JDialog dlg =
+            pane.createDialog((Component) PluginServices.getMainFrame(),
+                PluginServices.getText(this, "renombrar"));
+        dlg.setModal(true);
+        dlg.setVisible(true);
+
+        String nuevoNombre = pane.getInputValue().toString().trim();
+
+        if (nuevoNombre.length() == 0) {
+            return;
+        }
+
+        for (int i = 0; i < lstDocs.getModel().getSize(); i++) {
+            if (i == index) {
+                continue;
+            }
+            if (((AbstractDocument) lstDocs.getModel().getElementAt(i))
+                .getName().equals(nuevoNombre)) {
+                JOptionPane.showMessageDialog(
+                    (Component) PluginServices.getMainFrame(),
+                    PluginServices.getText(this, "elemento_ya_existe"));
+                return;
+            }
+
+        }
+        doc.setName(nuevoNombre);
+
+        refreshList();
+        project.setModified(true);
+    }
+
+    /**
+     * Borra un project element
+     */
+    private void borrar() {
+        int res =
+            JOptionPane.showConfirmDialog(
+                (Component) PluginServices.getMainFrame(),
+                PluginServices.getText(this, "confirmar_borrar"),
+                PluginServices.getText(this, "borrar"),
+                JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
+
+        int lastremoved = 0;
+        if (res == JOptionPane.YES_OPTION) {
+            int[] indexes = lstDocs.getSelectedIndices();
+            for (int i = indexes.length - 1; i >= 0; i--) {
+                int index = indexes[i];
+                String s = getDocumentSelected();
+                List<Document> documents = project.getDocuments(s);
+                Document doc = documents.get(index);
+                if (doc.isLocked()) {
+                    JOptionPane.showMessageDialog(this, PluginServices.getText(
+                        this, "locked_element_it_cannot_be_deleted"));
+                    return;
+                }
+                PluginServices.getMDIManager().closeSingletonWindow(doc);
+                project.remove(doc);
+                lastremoved = index;
+            }
+            if (lastremoved > lstDocs.getModel().getSize()) {
+                lastremoved = lstDocs.getModel().getSize();
+            }
+            if (lastremoved >= 0) {
+                lstDocs.setSelectedIndex(lastremoved);
+            }
+            // refreshList();
+            project.setModified(true);
+        }
+    }
+
+    /**
+     * Muestra el di�logo de propiedades de un project element
+     */
+    private void propiedades() {
+        int index = lstDocs.getSelectedIndex();
+
+        if (index == -1) {
+            return;
+        }
+
+        IWindow dlg = null;
+        String doctype = getDocumentSelected();
+        List<Document> documents = project.getDocuments(doctype);
+        Document doc = documents.get(index);
+        if(!doc.isAvailable()){
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            JOptionPane.showMessageDialog(
+                this,
+                i18nManager.getTranslation("document_not_available"),
+                i18nManager.getTranslation("properties"),
+                JOptionPane.WARNING_MESSAGE);
+            return;
+        }
+        dlg = doc.getFactory().getPropertiesWindow(doc);
+        PluginServices.getMDIManager().addWindow(dlg);
+
+        refreshControls();
+        lstDocs.setSelectedIndex(index);
+        project.setModified(true);
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return JPanel
+     */
+    private JComponent getDocumentTypesPanel() {
+        if (documentTypes == null) {
+
+            documentTypesList =
+                new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5));
+            documentTypesList.setName("tipoDocPanel");
+            fillDocumentTypeButtons();
+
+            documentTypes = new JScrollPane(documentTypesList);
+            Dimension dim = documentTypesList.getPreferredSize();
+            documentTypes.setMinimumSize(new Dimension(dim.width,dim.height + 35));
+            documentTypes.setBorder(BorderFactory.createTitledBorder(null,
+                PluginServices.getText(this, "tipos_de_documentos"),
+                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+            documentTypes.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
+            documentTypes.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+
+        }
+
+        return documentTypes;
+    }
+
+    /**
+     * Adds a button for each document type
+     */
+    private void fillDocumentTypeButtons() {
+        JRadioButton[] btns = getBtnDocumentTypes();
+        for (int i = 0; i < btns.length; i++) {
+            documentTypesList.add(btns[i]);
+        }
+    }
+
+    /**
+     * This method initializes btnVistas
+     *
+     * @return JRadioButton
+     */
+    private JRadioButton[] getBtnDocumentTypes() {
+        if (btnsDocuments == null) {
+
+            List<JRadioButton> btns = new ArrayList<JRadioButton>();
+            List<DocumentManager> factories =
+                ProjectManager.getInstance().getDocumentManagers();
+            Collections.sort(factories, new Comparator<DocumentManager>() {
+
+                public int compare(DocumentManager arg0, DocumentManager arg1) {
+                    return arg0.getPriority() - arg1.getPriority();
+                }
+
+            });
+            for (DocumentManager documentFactory : factories) {
+                JRadioButton rb = new JRadioButton();
+
+                rb.setIcon(documentFactory.getIcon());
+                rb.setSelectedIcon(documentFactory.getIconSelected());
+                rb.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
+                rb.setText(documentFactory.getTitle());
+                rb.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+                rb.setName(documentFactory.getTypeName());
+                rb.addChangeListener(new javax.swing.event.ChangeListener() {
+
+                    public void stateChanged(javax.swing.event.ChangeEvent e) {
+                        refreshList();
+                    }
+                });
+                btns.add(rb);
+            }
+            btnsDocuments = btns.toArray(new JRadioButton[0]);
+        }
+        return btnsDocuments;
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return JPanel
+     */
+    private JPanel getDocumentsPanel() {
+        if (documentsPanel == null) {
+            documentsPanel = new JPanel();
+
+            GridBagLayout layout2 = new GridBagLayout();
+            GridBagConstraints c = new GridBagConstraints();
+
+            documentsPanel.setLayout(layout2);
+
+            c.insets = new Insets(2, 5, 2, 5);
+            c.anchor = GridBagConstraints.WEST;
+            c.fill = GridBagConstraints.BOTH;
+            c.weightx = 1.0;
+            c.weighty = 1.0;
+            documentsPanel.add(getDocumentsScrollPane(), c);
+
+            c.anchor = GridBagConstraints.EAST;
+            c.fill = GridBagConstraints.NONE;
+            c.weightx = 0;
+            c.weighty = 0;
+            documentsPanel.add(getDocumentButtonsPanel(), c);
+
+            documentsPanel.setBorder(javax.swing.BorderFactory
+                .createTitledBorder(null,
+                    PluginServices.getText(this, "documentos_existentes"),
+                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
+                    null));
+        }
+
+        return documentsPanel;
+    }
+
+    /**
+     * This method initializes lstDocs
+     *
+     * @return JList
+     */
+    private JList getDocumentsList() {
+        if (lstDocs == null) {
+            lstDocs = new JList();
+            lstDocs.addMouseListener(new java.awt.event.MouseAdapter() {
+
+                public AbstractDocument[] getSelecteds() {
+                    if (lstDocs.getSelectedIndex() < 0) {
+                        return new AbstractDocument[0];
+                    }
+                    Object[] seleteds = lstDocs.getSelectedValues();
+                    AbstractDocument[] returnValue =
+                        new AbstractDocument[seleteds.length];
+                    System.arraycopy(seleteds, 0, returnValue, 0,
+                        seleteds.length);
+                    return returnValue;
+                }
+
+                public AbstractDocument getItem(java.awt.event.MouseEvent e) {
+                    if (lstDocs.getSelectedIndex() < 0) {
+                        return null;
+                    }
+
+                    return null;
+                }
+
+                @Override
+                public void mouseClicked(java.awt.event.MouseEvent e) {
+                    if (e.getButton() == java.awt.event.MouseEvent.BUTTON3) {
+                        /*
+                         * getDocumentSelected();//ProjectView
+                         * getDocumentSelectedName();//Vista
+                         */
+                        String docType = getDocumentSelected();
+                        AbstractDocument[] selecteds = this.getSelecteds();
+
+                        if (selecteds == null) {
+                            return;
+                        }
+                        DocumentContextMenu menu =
+                            new DocumentContextMenu(docType, this.getItem(e),
+                                selecteds);
+                        if (!menu.hasActions()) {
+                            return;
+                        }
+                        lstDocs.add(menu);
+                        menu.show(e.getComponent(), e.getX(), e.getY());
+                        return;
+                    }
+
+                    if (e.getClickCount() == 2) {
+                        abrir();
+                    }
+
+                }
+            });
+            lstDocs
+                .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+
+                    public void valueChanged(
+                        javax.swing.event.ListSelectionEvent e) {
+                        activarBotones();
+                    }
+                });
+        }
+
+        return lstDocs;
+    }
+
+    /**
+     * This method initializes jPanel2
+     *
+     * @return JPanel
+     */
+    private JPanel getDocumentButtonsPanel() {
+        if (jPanel2 == null) {
+            jPanel2 = new JPanel();
+
+            // FlowLayout layout = new FlowLayout();
+            GridLayout layout = new GridLayout(5, 1);
+            layout.setVgap(7);
+
+            jPanel2.setLayout(layout);
+            jPanel2.add(getBtnNuevo(), null);
+            jPanel2.add(getBtnAbrir(), null);
+            jPanel2.add(getBtnRenombrar(), null);
+            jPanel2.add(getBtnBorrar(), null);
+            jPanel2.add(getBtnPropiedades(), null);
+        }
+
+        return jPanel2;
+    }
+
+    /**
+     * This method initializes btnNuevo
+     *
+     * @return JButton
+     */
+    private JButton getBtnNuevo() {
+        if (btnNuevo == null) {
+            btnNuevo = manager.createJButton();
+            btnNuevo.setName("btnNuevo");
+            btnNuevo.setText(PluginServices.getText(this, "nuevo"));
+            btnNuevo.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            btnNuevo.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    try {
+                        newProjectDocument();
+                    } catch (Exception e1) {
+                        NotificationManager.addError(e1.getLocalizedMessage(),
+                            e1);
+                    }
+                }
+            });
+        }
+
+        return btnNuevo;
+    }
+
+    /**
+     * This method initializes btnPropiedades
+     *
+     * @return JButton
+     */
+    private JButton getBtnPropiedades() {
+        if (btnPropiedades == null) {
+            btnPropiedades = manager.createJButton();
+            ;
+            btnPropiedades.setText(PluginServices.getText(this, "propiedades"));
+            btnPropiedades.setName("btnPropiedades");
+            btnPropiedades.setEnabled(false);
+            btnPropiedades.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            btnPropiedades
+                .addActionListener(new java.awt.event.ActionListener() {
+
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        propiedades();
+                    }
+                });
+        }
+
+        return btnPropiedades;
+    }
+
+    /**
+     * This method initializes btnAbrir
+     *
+     * @return JButton
+     */
+    private JButton getBtnAbrir() {
+        if (btnAbrir == null) {
+            btnAbrir = manager.createJButton();
+            btnAbrir.setName("btnAbrir");
+            btnAbrir.setText(PluginServices.getText(this, "abrir"));
+            btnAbrir.setEnabled(false);
+            btnAbrir.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            btnAbrir.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    abrir();
+                }
+            });
+        }
+
+        return btnAbrir;
+    }
+
+    /**
+     * This method initializes btnBorrar
+     *
+     * @return JButton
+     */
+    private JButton getBtnBorrar() {
+        if (btnBorrar == null) {
+            btnBorrar = manager.createJButton();
+            btnBorrar.setText(PluginServices.getText(this, "borrar"));
+            btnBorrar.setName("btnBorrar");
+            btnBorrar.setEnabled(false);
+            btnBorrar.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            btnBorrar.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    borrar();
+                }
+            });
+        }
+
+        return btnBorrar;
+    }
+
+    /**
+     * This method initializes btnRenombrar
+     *
+     * @return JButton
+     */
+    private JButton getBtnRenombrar() {
+        if (btnRenombrar == null) {
+            btnRenombrar = manager.createJButton();
+            btnRenombrar.setName("btnRenombrar");
+            btnRenombrar.setText(PluginServices.getText(this, "renombrar"));
+            btnRenombrar.setEnabled(false);
+            btnRenombrar.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            btnRenombrar.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    renombrar();
+                }
+            });
+        }
+
+        return btnRenombrar;
+    }
+
+    /**
+     * This method initializes jPanel3
+     *
+     * @return JPanel
+     */
+    private JPanel getPropertiesPanel() {
+        if (propertiesPanel == null) {
+            propertiesPanel = new JPanel(new GridBagLayout());
+            GridBagConstraints c = new GridBagConstraints();
+
+            c.insets = new Insets(2, 5, 0, 5);
+            c.anchor = GridBagConstraints.WEST;
+            c.gridx = 0;
+            c.gridy = 0;
+            propertiesPanel.add(getJLabel(), c);
+
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.weightx = 1.0;
+            c.gridx = 1;
+            propertiesPanel.add(getLblNombreSesion(), c);
+
+            c.gridx = 0;
+            c.gridy = 1;
+            c.fill = GridBagConstraints.NONE;
+            c.weightx = 0.0;
+            propertiesPanel.add(getJLabel1(), c);
+
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.weightx = 1.0;
+            c.gridx = 1;
+            propertiesPanel.add(getLblGuardado(), c);
+
+            c.gridx = 0;
+            c.gridy = 2;
+            c.fill = GridBagConstraints.NONE;
+            c.weightx = 0.0;
+            propertiesPanel.add(getJLabel2(), c);
+
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.weightx = 1.0;
+            c.gridx = 1;
+            propertiesPanel.add(getLblFecha(), c);
+
+            c.gridx = 0;
+            c.gridwidth = 2;
+            c.gridy = 4;
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.anchor = GridBagConstraints.EAST;
+            propertiesPanel.add(getProjectsButtonPanel(), c);
+
+            propertiesPanel.setBorder(javax.swing.BorderFactory
+                .createTitledBorder(null,
+                    PluginServices.getText(this, "propiedades_sesion"),
+                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
+                    null));
+        }
+
+        return propertiesPanel;
+    }
+
+    /**
+     * This method initializes jLabel
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel() {
+        if (jLabel == null) {
+            jLabel = new JLabel();
+            jLabel.setText(PluginServices.getText(this, "nombre_sesion") + ":");
+        }
+
+        return jLabel;
+    }
+
+    /**
+     * This method initializes lblNombreSesion
+     *
+     * @return JLabel
+     */
+    private JLabel getLblNombreSesion() {
+        if (lblNombreSesion == null) {
+            lblNombreSesion = new JLabel();
+            lblNombreSesion.setText("");
+            lblNombreSesion.setName("lblNombreSesion");
+            lblNombreSesion.setAutoscrolls(true);
+        }
+
+        return lblNombreSesion;
+    }
+
+    /**
+     * This method initializes jLabel1
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel1() {
+        if (jLabel1 == null) {
+            jLabel1 = new JLabel();
+            jLabel1.setText(PluginServices.getText(this, "guardado") + ":");
+        }
+
+        return jLabel1;
+    }
+
+    /**
+     * This method initializes lblGuardado
+     *
+     * @return JLabel
+     */
+    private JLabel getLblGuardado() {
+        if (lblGuardado == null) {
+            lblGuardado = new JLabel();
+            lblGuardado.setText("");
+            lblGuardado.setAutoscrolls(true);
+        }
+
+        return lblGuardado;
+    }
+
+    /**
+     * This method initializes jLabel2
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel2() {
+        if (jLabel2 == null) {
+            jLabel2 = new JLabel();
+            jLabel2
+                .setText(PluginServices.getText(this, "creation_date") + ":");
+        }
+
+        return jLabel2;
+    }
+
+    /**
+     * This method initializes lblFecha
+     *
+     * @return JLabel
+     */
+    private JLabel getLblFecha() {
+        if (lblFecha == null) {
+            lblFecha = new JLabel();
+            lblFecha.setText("");
+            lblFecha.setAutoscrolls(true);
+        }
+
+        return lblFecha;
+    }
+
+    /**
+     * This method initializes btnImportar
+     *
+     * @return JButton
+     */
+    private JButton getBtnImportar() {
+        if (btnImportar == null) {
+            btnImportar = manager.createJButton();
+            btnImportar.setPreferredSize(new java.awt.Dimension(80, 23));
+            btnImportar.setText(PluginServices.getText(this, "importar"));
+            btnImportar.setName("btnImportar");
+            btnImportar.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        }
+
+        return btnImportar;
+    }
+
+    /**
+     * This method initializes btnExportar
+     *
+     * @return JButton
+     */
+    private JButton getBtnExportar() {
+        if (btnExportar == null) {
+            btnExportar = manager.createJButton();
+            btnExportar.setPreferredSize(new java.awt.Dimension(80, 23));
+            btnExportar.setText(PluginServices.getText(this, "exportar"));
+            btnExportar.setName("btnExportar");
+            btnExportar.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        }
+
+        return btnExportar;
+    }
+
+    /**
+     * This method initializes btnEditar
+     *
+     * @return JButton
+     */
+    private JButton getBtnEditar() {
+        if (btnEditar == null) {
+            btnEditar = manager.createJButton();
+            btnEditar.setPreferredSize(new java.awt.Dimension(80, 23));
+            btnEditar.setText(PluginServices.getText(this, "propiedades"));
+
+            btnEditar.setName("btnEditar");
+            btnEditar.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+            btnEditar.addActionListener(new java.awt.event.ActionListener() {
+
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    I18nManager i18nManager = ToolsLocator.getI18nManager();
+                    WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+                    winmgr.showWindow(
+                            new ProjectProperties(project),
+                            i18nManager.getTranslation("project_properties"),
+                            WindowManager.MODE.WINDOW
+                    );
+                    refreshProperties();
+                }
+            });
+        }
+
+        return btnEditar;
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return JScrollPane
+     */
+    private JScrollPane getDocumentsScrollPane() {
+        if (documentsScrollPane == null) {
+            documentsScrollPane = new JScrollPane();
+            documentsScrollPane.setViewportView(getDocumentsList());
+            documentsScrollPane.setPreferredSize(new java.awt.Dimension(200,100));
+            documentsScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
+        }
+
+        return documentsScrollPane;
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.MDIManager.SingletonWindow#getWindowModel()
+     */
+    public Object getWindowModel() {
+        return project;
+    }
+
+    public Project getProject() {
+        return project;
+    }
+
+    /**
+     * This method is used to get <strong>an initial</strong> ViewInfo object
+     * for this Project Manager window. It is not intended to retrieve the
+     * ViewInfo object in a later time. <strong>Use
+     * PluginServices.getMDIManager().getViewInfo(view) to retrieve the ViewInfo
+     * object at any time after the creation of the object.
+     *
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        if (m_viewInfo == null) {
+            m_viewInfo =
+                new WindowInfo(WindowInfo.MAXIMIZABLE | WindowInfo.RESIZABLE);
+            m_viewInfo.setWidth(this.getWidth());
+            m_viewInfo.setHeight(this.getHeight());
+            int w = this.getPreferredSize().width;
+            if( w < 450 ) {
+                w = 450;
+            }
+            m_viewInfo.setNormalWidth(w);
+            m_viewInfo.setNormalHeight(this.getPreferredSize().height);
+            m_viewInfo.setMinimumSize(getPreferredSize());
+
+            m_viewInfo.setTitle(PluginServices.getText(this, "_Project_manager"));
+        }
+        return m_viewInfo;
+    }
+
+    public void propertyChange(final PropertyChangeEvent evt) {
+		if( !SwingUtilities.isEventDispatchThread() ) {
+			SwingUtilities.invokeLater( new Runnable() {
+				public void run() {
+					propertyChange(evt);
+				}
+			});
+			return;
+		}
+        refreshControls();
+    }
+
+    /**
+     * This method initializes jPanel4
+     *
+     * @return JPanel
+     */
+    private JPanel getProjectsButtonPanel() {
+        if (projectButtonsPanel == null) {
+            projectButtonsPanel = new JPanel();
+
+            projectButtonsPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
+            projectButtonsPanel
+                .setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
+            // TODO: implement export and import functions
+            // projectButtonsPanel.add(getBtnImportar(), null);
+            // projectButtonsPanel.add(getBtnExportar(), null);
+            projectButtonsPanel.add(getBtnEditar(), null);
+        }
+
+        return projectButtonsPanel;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.PROJECT_PROFILE;
+    }
+
+    public void update(Observable observable, Object notification) {
+        if (observable instanceof ProjectManager) {
+            refreshDocuments();
+        }
+    }
+
+    private void refreshDocuments() {
+        // Setting it to null will make it recreate in the next
+        // getBtnDocuments() call
+        this.btnsDocuments = null;
+
+        // Clear previous document type buttons
+        documentTypesList.removeAll();
+        for (Enumeration<AbstractButton> buttons = grupo.getElements(); buttons
+            .hasMoreElements();) {
+            grupo.remove(buttons.nextElement());
+        }
+
+        JRadioButton[] btnDocuments = getBtnDocumentTypes();
+        for (int i = 0; i < btnDocuments.length; i++) {
+            grupo.add(btnDocuments[i]);
+        }
+        if (btnDocuments.length > 0) {
+            btnDocuments[0].setSelected(true);
+        }
+        fillDocumentTypeButtons();
+    }
+
+    @Override
+    public void setLocale(Locale locale) {
+        super.setLocale(locale);
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        btnNuevo.setText(i18nManager.getTranslation( "nuevo"));
+        btnPropiedades.setText(i18nManager.getTranslation("propiedades"));
+        btnAbrir.setText(i18nManager.getTranslation("abrir"));
+        btnBorrar.setText(i18nManager.getTranslation("borrar"));
+        btnRenombrar.setText(i18nManager.getTranslation("renombrar"));
+
+        jLabel.setText(i18nManager.getTranslation("nombre_sesion") + ":");
+        jLabel1.setText(i18nManager.getTranslation("guardado") + ":");
+        jLabel2.setText(i18nManager.getTranslation("creation_date") + ":");
+
+        // btnImportar.setText(i18nManager.getTranslation("importar"));
+        // btnExportar.setText(i18nManager.getTranslation("exportar"));
+        btnEditar.setText(i18nManager.getTranslation("propiedades"));
+
+        m_viewInfo.setTitle(i18nManager.getTranslation("_Project_manager"));
+
+        TitledBorder border = null;
+
+        border = (TitledBorder) propertiesPanel.getBorder();
+        border.setTitle(i18nManager.getTranslation("propiedades_sesion"));
+
+        border = (TitledBorder) documentTypes.getBorder();
+        border.setTitle(i18nManager.getTranslation("tipos_de_documentos"));
+
+        border = (TitledBorder) documentsPanel.getBorder();
+        border.setTitle(i18nManager.getTranslation("documentos_existentes"));
+
+        refreshList();
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/IDocumentWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/IDocumentWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/IDocumentWindow.java	(revision 42196)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.app.project.documents.Document;
+
+/**
+ * @author Miguel �ngel Querol Carratal� <querol_mig@gva.es>
+ * 
+ *         Interfaz que tienen que implementar las clases de interfaz de
+ *         usuario de los documentos que se quieran insertar en gvSIG. Estas
+ *         clases se usar�n para cargar y guardar las propiedades graficas de la
+ *         ventana
+ *         del documento como tama�os y posiciones.
+ */
+public interface IDocumentWindow extends IWindow, IWindowListener,
+    SingletonWindow {
+
+    /**
+     * M�todo para obtener un windowData con las propiedades de la
+     * ventana del documento como pueden ser tama�os, posiciones y
+     * estados de sliders, divisores etc. Este m�todo ser� llamado
+     * para guardar los datos a disco. Lo llamar� la clase project para
+     * obtener los datos y asi guardarlos.
+     * 
+     * @return un windowData con los datos de la ventana.
+     */
+    public WindowLayout getWindowLayout();
+
+    /**
+     * M�todo para cargar los datos de la ventana de proyecto. El widowData
+     * guardado
+     * se le pasa a la clase de interfaz de usuario correspondiente a la ventana
+     * del documento.
+     * 
+     * @param winData
+     */
+    public void setWindowLayout(WindowLayout layout);
+
+    public void setDocument(Document document);
+
+    public Document getDocument();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/IDocumentWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/PDFViewerWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/PDFViewerWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/PDFViewerWindow.java	(revision 42196)
@@ -0,0 +1,486 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.print.PageFormat;
+import java.awt.print.Paper;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.net.URL;
+
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.PageRanges;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+import org.jpedal.Display;
+import org.jpedal.PdfDecoder;
+import org.jpedal.exception.PdfException;
+import org.jpedal.objects.PrinterOptions;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+public class PDFViewerWindow extends JPanel implements IWindow,
+    PropertyChangeListener {
+
+    private static final long serialVersionUID = 4022263653761949704L;
+    private WindowInfo m_viewInfo;
+    private PdfDecoder pf;
+
+    // private String viewerTitle="Visor PDF";
+    private String currentFile = null;
+    private int currentPage = 1;
+    private final JLabel pageCounter1 = new JLabel(" "
+        + PluginServices.getText(this, "Pagina") + " ");
+    private JTextField pageCounter2 = new JTextField(4);
+    private JLabel pageCounter3 =
+        new JLabel(PluginServices.getText(this, "de"));
+
+    public PDFViewerWindow(String currentFile) {
+        super();
+        initialize(currentFile);
+    }
+
+    private void initialize(String currentFile) {
+
+        pf = new PdfDecoder();
+        this.currentFile = currentFile;
+        // currentFile = "C:\\Cartografia\\prueba.pdf";
+
+        try {
+            // this opens the PDF and reads its internal details
+            pf.openPdfFile(currentFile);
+
+            // these 2 lines opens page 1 at 100% scaling
+            pf.decodePage(currentPage);
+            float scaling = (float) 1.5;
+            pf.setPageParameters(scaling, 1); // values scaling (1=100%). page
+                                              // number
+            pf.setDisplayView(Display.SINGLE_PAGE, Display.DISPLAY_CENTERED);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // setup our GUI display
+        initializeViewer();
+
+        // set page number display
+        pageCounter2.setText(currentPage + "");
+        pageCounter3.setText(PluginServices.getText(this, "de") + " "
+            + pf.getPageCount() + " ");
+    }
+
+    public void setCurrentFile(String currentFile) {
+        this.currentFile = currentFile;
+    }
+
+    private void initializeViewer() {
+
+        Container cPane = this;
+        cPane.setLayout(new BorderLayout());
+
+        // JButton open = initOpenBut();//setup open button
+        Component[] itemsToAdd = initChangerPanel();// setup page display and
+                                                    // changer
+
+        JPanel topBar = new JPanel();
+        topBar.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
+        // topBar.add(pageChanger);
+        for (int i = 0; i < itemsToAdd.length; i++) {
+            topBar.add(itemsToAdd[i]);
+        }
+
+        cPane.add(topBar, BorderLayout.NORTH);
+
+        JScrollPane display = getJPaneViewer();// setup scrollpane with pdf
+                                               // display inside
+        cPane.add(display, BorderLayout.CENTER);
+
+        // pack();
+
+        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
+        setSize(screen.width / 2, screen.height / 2);
+        // <start-13>
+        // setLocationRelativeTo(null);//centre on screen
+        // <end-13>
+        setVisible(true);
+    }
+
+    private Component[] initChangerPanel() {
+
+        Component[] list = new Component[12];
+
+        /** back to page 1 */
+        JButton start = new JButton();
+        start.setBorderPainted(false);
+        URL startImage =
+            getClass().getResource(
+                "/org/jpedal/examples/simpleviewer/res/start.gif");
+        start.setIcon(new ImageIcon(startImage));
+        start.setToolTipText(PluginServices.getText(this, "primera_pagina"));
+        // currentBar1.add(start);
+        list[0] = start;
+        start.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (currentFile != null && currentPage != 1) {
+                    currentPage = 1;
+                    try {
+                        pf.decodePage(currentPage);
+                        pf.invalidate();
+                        repaint();
+                    } catch (Exception e1) {
+                        System.err.println("back to page 1");
+                        e1.printStackTrace();
+                    }
+
+                    // set page number display
+                    pageCounter2.setText(currentPage + "");
+                }
+            }
+        });
+
+        /** back 10 icon */
+        JButton fback = new JButton();
+        fback.setBorderPainted(false);
+        URL fbackImage =
+            getClass().getResource(
+                "/org/jpedal/examples/simpleviewer/res/fback.gif");
+        fback.setIcon(new ImageIcon(fbackImage));
+        fback
+            .setToolTipText(PluginServices.getText(this, "diez_paginas_atras"));
+        // currentBar1.add(fback);
+        list[1] = fback;
+        fback.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (currentFile != null && currentPage > 10) {
+                    currentPage -= 10;
+                    try {
+                        pf.decodePage(currentPage);
+                        pf.invalidate();
+                        repaint();
+                    } catch (Exception e1) {
+                        System.err.println("back 10 pages");
+                        e1.printStackTrace();
+                    }
+
+                    // set page number display
+                    pageCounter2.setText(currentPage + "");
+                }
+            }
+        });
+
+        /** back icon */
+        JButton back = new JButton();
+        back.setBorderPainted(false);
+        URL backImage =
+            getClass().getResource(
+                "/org/jpedal/examples/simpleviewer/res/back.gif");
+        back.setIcon(new ImageIcon(backImage));
+        back.setToolTipText(PluginServices.getText(this, "pagina_atras"));
+        // currentBar1.add(back);
+        list[2] = back;
+        back.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (currentFile != null && currentPage > 1) {
+                    currentPage -= 1;
+                    try {
+                        pf.decodePage(currentPage);
+                        pf.invalidate();
+                        repaint();
+                    } catch (Exception e1) {
+                        System.err.println("back 1 page");
+                        e1.printStackTrace();
+                    }
+
+                    // set page number display
+                    pageCounter2.setText(currentPage + "");
+                }
+            }
+        });
+
+        pageCounter2.setEditable(true);
+        pageCounter2.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent a) {
+
+                String value = pageCounter2.getText().trim();
+                int newPage;
+
+                // allow for bum values
+                try {
+                    newPage = Integer.parseInt(value);
+
+                    if ((newPage > pf.getPageCount()) | (newPage < 1)) {
+                        return;
+                    }
+
+                    currentPage = newPage;
+                    try {
+                        pf.decodePage(currentPage);
+                        pf.invalidate();
+                        repaint();
+                    } catch (Exception e) {
+                        System.err.println("page number entered");
+                        e.printStackTrace();
+                    }
+
+                } catch (Exception e) {
+                    JOptionPane.showMessageDialog(
+                        null,
+                        ">" + value + "< "
+                            + PluginServices.getText(this, "valor_incorrecto")
+                            + pf.getPageCount());
+                }
+
+            }
+
+        });
+
+        /** put page count in middle of forward and back */
+        // currentBar1.add(pageCounter1);
+        // currentBar1.add(new JPanel());//add gap
+        // currentBar1.add(pageCounter2);
+        // currentBar1.add(new JPanel());//add gap
+        // currentBar1.add(pageCounter3);
+        list[3] = pageCounter1;
+        list[4] = new JPanel();
+        list[5] = pageCounter2;
+        list[6] = new JPanel();
+        list[7] = pageCounter3;
+
+        /** forward icon */
+        JButton forward = new JButton();
+        forward.setBorderPainted(false);
+        URL fowardImage =
+            getClass().getResource(
+                "/org/jpedal/examples/simpleviewer/res/forward.gif");
+        forward.setIcon(new ImageIcon(fowardImage));
+        forward.setToolTipText(PluginServices.getText(this, "pagina_delante"));
+        // currentBar1.add(forward);
+        list[8] = forward;
+        forward.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (currentFile != null && currentPage < pf.getPageCount()) {
+                    currentPage += 1;
+                    try {
+                        pf.decodePage(currentPage);
+                        pf.invalidate();
+                        repaint();
+                    } catch (Exception e1) {
+                        System.err.println("forward 1 page");
+                        e1.printStackTrace();
+                    }
+
+                    // set page number display
+                    pageCounter2.setText(currentPage + "");
+                }
+            }
+        });
+
+        /** fast forward icon */
+        JButton fforward = new JButton();
+        fforward.setBorderPainted(false);
+        URL ffowardImage =
+            getClass().getResource(
+                "/org/jpedal/examples/simpleviewer/res/fforward.gif");
+        fforward.setIcon(new ImageIcon(ffowardImage));
+        fforward.setToolTipText(PluginServices.getText(this,
+            "10_paginas_delante"));
+        // currentBar1.add(fforward);
+        list[9] = fforward;
+        fforward.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (currentFile != null && currentPage < pf.getPageCount() - 9) {
+                    currentPage += 10;
+                    try {
+                        pf.decodePage(currentPage);
+                        pf.invalidate();
+                        repaint();
+                    } catch (Exception e1) {
+                        System.err.println("forward 10 pages");
+                        e1.printStackTrace();
+                    }
+
+                    // set page number display
+                    pageCounter2.setText(currentPage + "");
+                }
+            }
+        });
+
+        /** goto last page */
+        JButton end = new JButton();
+        end.setBorderPainted(false);
+        URL endImage =
+            getClass().getResource(
+                "/org/jpedal/examples/simpleviewer/res/end.gif");
+        end.setIcon(new ImageIcon(endImage));
+        end.setToolTipText(PluginServices.getText(this, "ultima_pagina"));
+        // currentBar1.add(end);
+        list[10] = end;
+        end.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (currentFile != null && currentPage < pf.getPageCount()) {
+                    currentPage = pf.getPageCount();
+                    try {
+                        pf.decodePage(currentPage);
+                        pf.invalidate();
+                        repaint();
+                    } catch (Exception e1) {
+                        System.err.println("forward to last page");
+                        e1.printStackTrace();
+                    }
+
+                    // set page number display
+                    pageCounter2.setText(currentPage + "");
+                }
+            }
+        });
+
+        /** Print */
+        JButton print = new JButton();
+        print.setBorderPainted(false);
+        URL printImage =
+            getClass().getResource(
+                "/org/jpedal/examples/simpleviewer/res/print.gif");
+        print.setIcon(new ImageIcon(printImage));
+        print.setToolTipText(PluginServices.getText(this, "imprimir"));
+        // currentBar1.add(end);
+        list[11] = print;
+        print.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                printPDF();
+            }
+        });
+        return list;
+    }
+
+    public void printPDF() {
+        PrinterJob printJob = PrinterJob.getPrinterJob();
+
+        printJob.setPageable(pf);
+        // decode_pdf.setPageFormat(pf);
+
+        /**
+         * this additional functionality is available under printable interface
+         */
+        // setup default values to add into JPS
+        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
+        aset.add(new PageRanges(1, pf.getPageCount()));
+
+        boolean printFile = printJob.printDialog(aset);
+
+        // set page range
+        PageRanges r = (PageRanges) aset.get(PageRanges.class);
+        if (r != null) {
+            try {
+                PageFormat pformat = printJob.defaultPage();
+
+                Paper paper = new Paper();
+                paper.setSize(595, 842); // default A4
+                paper.setImageableArea(43, 43, 545, 792); // actual print 'zone'
+
+                pformat.setPaper(paper);
+
+                // pageable provides a method getPageFormat(int p) - this method
+                // allows it to be set by JPedal
+                pf.setPageFormat(pformat);
+                pf.setPagePrintRange(r);
+            } catch (PdfException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+
+        /**
+         * generic call to both Pageable and printable
+         */
+        if (printFile) {
+            try {
+                pf.setPrintPageScalingMode(PrinterOptions.PAGE_SCALING_FIT_TO_PRINTER_MARGINS);
+                printJob.print();
+            } catch (PrinterException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private JScrollPane getJPaneViewer() {
+        JScrollPane currentScroll = new JScrollPane();
+        currentScroll
+            .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        currentScroll
+            .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+
+        currentScroll.setViewportView(pf);
+        return currentScroll;
+    }
+
+    public WindowInfo getWindowInfo() {
+        if (m_viewInfo == null) {
+            m_viewInfo = new WindowInfo(WindowInfo.PALETTE);
+            m_viewInfo.setMaximizable(true);
+            m_viewInfo.setWidth(this.getWidth());
+            m_viewInfo.setHeight(this.getHeight());
+            m_viewInfo.setTitle(PluginServices.getText(this, "pdf_viewer"));
+        }
+        return m_viewInfo;
+    }
+
+    public void propertyChange(PropertyChangeEvent arg0) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Object getWindowProfile() {
+        // TODO Auto-generated method stub
+        return WindowInfo.TOOL_PROFILE;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/PDFViewerWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectProperties.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectProperties.java	(revision 42196)
@@ -0,0 +1,43 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents.gui;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.propertypage.BasePropertiesPageDialog;
+
+/**
+ * Propiedades del proyecto
+ * 
+ * @author gvSIG team
+ */
+public class ProjectProperties extends BasePropertiesPageDialog {
+
+    private static final long serialVersionUID = 8952351479171919349L;
+
+    public ProjectProperties(Project project) {
+        super();
+        init(Project.PROJECT_PROPERTIES_PAGE_GROUP,project);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectProperties.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentActionGroup.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentActionGroup.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentActionGroup.java	(revision 42196)
@@ -0,0 +1,33 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents;
+
+public interface DocumentActionGroup {
+
+	public String getTitle();
+	
+	public String getDescription();
+	
+	public int getOrder();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentActionGroup.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentManager.java	(revision 42196)
@@ -0,0 +1,178 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project.documents;
+
+import java.util.Iterator;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.DocumentsContainer;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.app.project.documents.gui.WindowLayout;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistenceFactory;
+
+public interface DocumentManager extends ExtensionBuilder, PersistenceFactory, WeakReferencingObservable {
+
+        public static String NOTIFY_AFTER_CREATEDOCUMENT = "DocumentManager.CreateDocument";
+        public static String NOTIFY_AFTER_GETMAINWINDOW = "DocumentManager.getMainWindow";
+        public static String NOTIFY_AFTER_GETPROPERTIESWINDOW = "DocumentManager.getPropertiesWindow";
+        
+	/**
+	 * Returns the type of document priority.
+	 *
+	 * @return Priority.
+	 */
+	public int getPriority();
+
+	/**
+	 * Returns tdocumenthe icon for the type of document.
+	 *
+	 * @return Image.
+	 */
+	public ImageIcon getIcon();
+
+	/**
+	 * Returns the icon for the type of document when is selected
+	 *
+	 * @return Image.
+	 */
+	public ImageIcon getIconSelected();
+
+	/**
+	 * Create a new ProjectDocument.
+	 *
+	 * @param project Opened project.
+	 *
+	 * @return ProjectDocument.
+	 */
+	public AbstractDocument createDocument();
+
+	        /**
+     * Uses a gui to be able from the characteristics that we want a
+     * ProjectDocument
+     * 
+     * @return a new Document
+     * 
+     * @deprecated user {@link #createDocumentsByUser()} instead
+     */
+	public AbstractDocument createDocumentByUser();
+
+    /**
+     * Uses a gui to be able from the characteristics that we want a
+     * ProjectDocument
+     * 
+     * @return the created documents
+     */
+    public Iterator<? extends Document> createDocumentsByUser();
+
+	/**
+	 * Returns the title of type of document.
+	 *
+	 * @return String title for type of document
+	 */
+	public String getTitle();
+
+	/**
+	 * Returns the type name of the document factory.
+	 *
+	 * @return Name of registration
+	 */
+	public String getTypeName();
+
+	/**
+	 * Return the main window asociated to the passed document. 
+	 * If the window alreade exists return it. If not, a new
+	 * window is created.
+	 * 
+	 * @param doc
+	 * @return Window asociated to document
+	 */
+	public IWindow getMainWindow(Document doc) ;
+	
+	/**
+	 * Return the main window asociated to the document.
+	 * 
+	 * @param doc, layout
+	 * @return Window asociated to document
+	 */
+	public IWindow getMainWindow(Document doc, WindowLayout layout) ;
+        
+        /**
+         * Create a new JComponent for the document or if already exists
+         * in the specified container, return this.
+         * 
+         * @param container
+         * @param doc
+         * @return 
+         */
+        public JComponent getMainComponent(DocumentsContainer container, Document doc);
+	
+        /**
+         * Devuelbe el JComponent que se corresponde con el documento indicado.
+         * Si la ventana activa se corresponde con este documento, devuelbe el 
+         * JComponent asociado a esa ventana. Si no se corresponde con la ventana
+         * activa, pero esta es un contenedor de documentos le pide a este el componente
+         * asociado al documento requerido y si lo encuentra lo devuelve. En 
+         * otro caso develbe null.
+         * @param doc
+         * @return el JComponent asociado a doc
+         */
+        public JComponent getMainComponent(Document doc);
+
+        public void unregisterMainComponent(DocumentsContainer container, Document document);
+        
+        public void registerMainComponent(DocumentsContainer container, Document document, JComponent component);
+        
+	/**
+	 * Return the windows properties asociated to the document.
+	 * @param doc
+	 * @return
+	 */
+	public IWindow getPropertiesWindow(Document doc) ;
+	
+	/**
+	 * Return true if the name exists to another document.
+	 *
+	 * @param project
+	 * @param documentName
+	 *
+	 * @return True if the name exists.
+	 * @deprecated use instead  project.getDocument
+	 */
+	public boolean existName(Project project, String documentName);
+	
+	/**
+	 * Return the class that implement the main window for this type of
+	 * documents.
+	 * 
+	 * @return the class of main window 
+	 */
+    public Class<? extends IDocumentWindow> getMainWindowClass();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainer.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.project;
+
+import java.util.Iterator;
+import java.util.List;
+
+
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.tools.observer.Observable;
+
+public interface DocumentsContainer extends Iterable<Document>,  Observable {
+
+	/**
+	 * Return a list of documents in the project.
+	 *
+	 * @return documents as List of IProjectDocument
+	 */
+	public List<Document> getDocuments();
+
+	/**
+	 * Return a list with all documents of especified type.
+	 *
+	 * @param type of document
+	 *
+	 * @return List of IProjectDocument
+	 */
+	public List<Document> getDocuments(String type);
+
+	/**
+	 * Adds a document to the project
+	 *
+	 * @param document as Document
+	 */
+	public void addDocument(Document document);
+
+	/**
+	 * Remove a document of the project
+	 *
+	 * @param document as Document
+	 */
+	public void removeDocument(Document document);
+
+	public Iterator<Document> iterator();
+
+	public boolean isEmpty();
+        
+	/**
+	 * Obtiene un documento a partir de su nombre y el nombre de del tipo
+         * de documento
+	 *
+	 * @param name
+	 *            Nombre del documento
+	 * @param type
+	 *            nombre de del tipo de documento
+	 *
+	 * @return Documento
+	 */
+	public Document getDocument(String name, String type);
+	
+	public Document getActiveDocument();
+
+	public Document getActiveDocument(Class<? extends Document> documentClass);
+
+        public Document getActiveDocument(String documentTypeName);
+
+	public Document createDocument(String type);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLocator.java	(revision 42196)
@@ -0,0 +1,94 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+
+package org.gvsig.app;
+
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.tools.locator.BaseLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+public class ApplicationLocator extends BaseLocator {
+
+	private static final String LOCATOR_NAME = "gvSIGApplicationLocator";
+
+	public static final String APPGVSIG_MANAGER_NAME = LOCATOR_NAME+".manager";
+
+	private static final String APPGVSIG_MANAGER_DESCRIPTION = "Manager of gvSIG application";
+	
+	/**
+	 * Unique instance.
+	 */
+	private static final ApplicationLocator instance = new ApplicationLocator();
+
+	/**
+	 * Return the singleton instance.
+	 *
+	 * @return the singleton instance
+	 */
+	public static ApplicationLocator getInstance() {
+		return instance;
+	}
+
+	public String getLocatorName() {
+		return LOCATOR_NAME;
+	}
+
+	/**
+	 * Return a reference to PersistenceManager.
+	 *
+	 * @return a reference to PersistenceManager
+	 * @throws LocatorException
+	 *             if there is no access to the class or the class cannot be
+	 *             instantiated
+	 * @see Locator#get(String)
+	 */
+	public static ApplicationManager getManager()
+			throws LocatorException {
+		return (ApplicationManager) getInstance().get(APPGVSIG_MANAGER_NAME);
+	}
+
+	/**
+	 * Registers the Class implementing the PersistenceManager interface.
+	 *
+	 * @param clazz
+	 *            implementing the PersistenceManager interface
+	 */
+	@SuppressWarnings("unchecked")
+	public static void registerApplicationManager(Class<? extends ApplicationManager> clazz) {
+		getInstance().register(APPGVSIG_MANAGER_NAME,
+				APPGVSIG_MANAGER_DESCRIPTION, clazz);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static void registerDefaultApplicationManager(Class<? extends ApplicationManager> clazz) {
+		getInstance().registerDefault(APPGVSIG_MANAGER_NAME,
+				APPGVSIG_MANAGER_DESCRIPTION, clazz);
+	}
+	
+	public static ProjectManager getProjectManager() throws LocatorException {
+		return ProjectManager.getInstance();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/PreferencesNode.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/PreferencesNode.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/PreferencesNode.java	(revision 42196)
@@ -0,0 +1,77 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app;
+
+import java.awt.Color;
+
+
+public interface PreferencesNode {
+
+	public String name() ;
+
+	public void clear() throws Exception ;
+	
+	public void flush() throws Exception;
+
+	public String[] keys() throws Exception ;
+
+	public String get(String arg0, String arg1) ;
+
+	public void remove(String arg0) ;
+
+	public void sync() throws Exception ;
+
+	
+	
+	public Color getColor(String name, Color value) ;
+
+	public boolean getBoolean(String name, boolean value) ;
+
+	public byte[] getByteArray(String name, byte[] value) ;
+
+	public double getDouble(String name, double value) ;
+
+	public float getFloat(String name, float value) ;
+
+	public int getInt(String name, int value) ;
+
+	public long getLong(String name, long value) ;
+
+
+	public void put(String name, String value) ;
+
+	public void putBoolean(String name, boolean value) ;
+
+	public void putByteArray(String name, byte[] value) ;
+
+	public void putDouble(String name, double value) ;
+
+	public void putFloat(String name, float value) ;
+
+	public void putInt(String name, int value) ;
+
+	public void putLong(String name, long value) ;
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/PreferencesNode.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLibrary.java	(revision 42196)
@@ -0,0 +1,159 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.io.FileUtils;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.app.extension.InitializeApplicationExtension;
+import org.gvsig.app.gui.preferencespage.AppSymbolPreferences;
+import org.gvsig.app.project.DefaultProject;
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontrol.MapControlLibrary;
+import org.gvsig.i18n.Messages;
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author 2008-2009 jmvivo
+ * @author 2009- jjdelcerro
+ * 
+ */
+public class ApplicationLibrary extends AbstractLibrary {
+
+    private static final Logger logger =
+        LoggerFactory.getLogger(ApplicationLibrary.class);
+    
+    @Override
+    public void doRegistration() {
+        registerAsAPI(ApplicationLibrary.class);
+        require(MapContextLibrary.class);
+        require(MapControlLibrary.class);
+        require(InstallerLibrary.class);
+    }
+	
+	@Override
+	protected void doInitialize() throws LibraryException {
+		// Do nothing
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		ApplicationManager manager = ApplicationLocator.getManager();
+		if (manager == null) {
+			throw new ReferenceNotRegisteredException(
+					ApplicationLocator.APPGVSIG_MANAGER_NAME, ApplicationLocator
+							.getInstance());
+		}
+		DefaultProject.registerPersistent();
+
+                MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+
+                PluginServices plugin = PluginsLocator.getManager().getPlugin(InitializeApplicationExtension.class);
+                mapContextManager.setColorTableLibraryFolder(new File(plugin.getPluginHomeFolder(),"colortable"));
+                
+		MapContextLocator.getSymbolManager().setSymbolPreferences(new AppSymbolPreferences());
+		
+		installBaseSymbols();
+	}
+
+	/**
+	 * Copy symbol folders from this plugin's 'Symbols' folder
+	 * to user's 'Symbols' folder unless a folder with same name
+	 * exists.
+	 */
+	private void installBaseSymbols() {
+		PluginServices ps = PluginsLocator.getManager().getPlugin(InitializeApplicationExtension.class);
+		File from_folder = new File( ps.getPluginDirectory(), "Symbols");
+		String to_folder = MapContextLocator.getSymbolManager().
+			    getSymbolPreferences().getSymbolLibraryPath();
+		try {
+		    copyMissingFolders(from_folder, new File(to_folder));
+		} catch (IOException ioe) {
+		    ApplicationLocator.getManager().message(
+		        Messages.getText("_Unable_to_copy_symbols_from_main_plugin"),
+		        JOptionPane.ERROR_MESSAGE);
+		}
+	
+	}
+	
+    private void copyMissingFolders(File fromf, File tof)
+        throws IOException {
+        
+        if (fromf == null || tof == null) {
+            return;
+        }
+        
+        if (!fromf.exists() || !fromf.isDirectory() ||
+            (tof.exists() && tof.isFile())) {
+            return;
+        }
+        
+        if (!tof.exists()) {
+            tof.mkdirs();
+        }
+        
+        File[] from_subs = fromf.listFiles();
+        for (int i=0; i<from_subs.length; i++) {
+            if (!folderIsOneIn(from_subs[i], tof)) {
+                logger.info("Copying symbols subfolder: " + from_subs[i].getName());
+                FileUtils.copyDirectoryToDirectory(from_subs[i], tof);
+            } else {
+                logger.info("Symbols subfolder already exists: " + from_subs[i].getName());
+            }
+        }
+    }
+
+
+    /**
+     * Tells whether <folder> is a folder and <tofolder>
+     * has a file or subfolder with the same short name as 
+     * <folder>
+     *  
+     */
+    private boolean folderIsOneIn(File folder, File tofolder) {
+        
+        if (!folder.isDirectory()) {
+            return false;
+        }
+        
+        String name = folder.getName();
+        String tname = tofolder.getAbsolutePath() + File.separator + name;
+        File tfile = new File(tname);
+        return tfile.exists();
+    }
+
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MetadataPropertiesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MetadataPropertiesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MetadataPropertiesExtension.java	(revision 42196)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.project.documents.view.legend.gui.ThemeManagerWindow;
+import org.gvsig.app.project.documents.view.metadata.gui.MetadataInfoManager;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+public class MetadataPropertiesExtension extends Extension {
+
+    public void initialize() {
+		ThemeManagerWindow.addPage(MetadataInfoManager.class);
+		ThemeManagerWindow.setTabEnabledForLayer(MetadataInfoManager.class, FLyrVect.class, true);	
+    }
+    
+    public void postInitialize(){
+    }
+
+    public void execute(String actionCommand) {
+    	// no commands, no code.
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MetadataPropertiesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CheckSOAndArquitectureExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CheckSOAndArquitectureExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CheckSOAndArquitectureExtension.java	(revision 42196)
@@ -0,0 +1,275 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextPane;
+
+import org.apache.commons.io.FileUtils;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class CheckSOAndArquitectureExtension extends Extension implements Runnable {
+
+	private static Logger logger = LoggerFactory.getLogger(CheckSOAndArquitectureExtension.class);
+	public void initialize() {
+		// Do nothing
+	}
+
+	public void execute(String actionCommand) {
+		// Do nothing
+
+	}
+
+	public boolean isEnabled() {
+		return false;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+
+	public void postInitialize() {
+            PluginsManager pluginManager = PluginsLocator.getManager();
+            pluginManager.addStartupTask("CheckOsAndArquitectre", this, true, 100);
+        }
+        
+        public void run() {
+		ApplicationManager application = ApplicationLocator.getManager();
+		InstallerManager installmgr = InstallerLocator.getInstallerManager();
+		PluginsManager pluginmgr = PluginsLocator.getManager();
+
+		Set<PackageInfo>  mismatchs = new HashSet<PackageInfo>();
+		try {
+			PackageInfo[] pkgs = installmgr.getInstalledPackages();
+			for (int i = 0; i < pkgs.length; i++) {
+				PackageInfo pkg = pkgs[i];
+				if ( !InstallerManager.ARCH.ALL.equalsIgnoreCase(pkg.getArchitecture()) && !installmgr.getArchitecture().equalsIgnoreCase(
+						pkg.getArchitecture())) {
+					mismatchs.add(pkg);
+				}
+				if (!InstallerManager.OS.ALL.equalsIgnoreCase(pkg.getOperatingSystem()) &&  !installmgr.getOperatingSystem().equalsIgnoreCase(
+						pkg.getOperatingSystem())) {
+					mismatchs.add(pkg);
+				}
+			}
+		} catch (Throwable e) {
+			logger.info("Can't get installed packages.",e);
+		}
+		if( mismatchs.size() == 0  ) {
+			return;
+		}
+
+		StringBuffer buffer = new StringBuffer();
+		Iterator<PackageInfo> it = mismatchs.iterator();
+		while( it.hasNext() ) {
+			PackageInfo pkg = it.next();
+            buffer.append(pkg.getName());
+            buffer.append(" (");
+            buffer.append(pkg.getOperatingSystem());
+            buffer.append("/");
+            buffer.append(pkg.getArchitecture());
+            buffer.append(")");
+			buffer.append("<br>\n");
+		}
+		String template = "<html>"
+				+ "<p>Packages are installed that are not compatible with your system.</p>\n"
+				+ "<br>\n"
+				+ "$(PACKAGES)"
+				+ "<br>\n"
+				+ "<p>Some are not specific to your system or architecture.</p>\n"
+				+ "<br>\n" 
+				+ "<p>You may need to configure a 32-bit Java environment\n"
+				+ "for the proper functioning of gvSIG.</p>\n" 
+				+ "</html>\n";
+
+		try {
+			String fname = "i18n/" + application.translate("_filename_warning_architecture_or_os_mismatch");
+			URL res = this.getClass().getClassLoader().getResource(fname);
+			template = FileUtils.readFileToString(new File(res.getFile()));
+		} catch (Throwable e) {
+			logger.info("Can't get template, use default.",e);
+		}
+		
+		String msg = template.replaceAll("[$][(]PACKAGES[)]", buffer.toString());
+		msg = msg.replaceAll("[%]PACKAGES[%]", buffer.toString());
+		msg = msg.replaceAll("[$]PACKAGES", buffer.toString());
+		
+		application.showDialog(new ShowMessageControler(msg), "_Warning");
+	}
+
+	public class ShowMessageControler extends ShowMessageView {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 2641062720310466029L;
+
+		public ShowMessageControler(String message) {
+			super();
+			this.messaje.setContentType("text/html");
+			this.messaje.setText(message);
+			this.closeButton.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent arg0) {
+					close();
+				}
+			});
+			ApplicationManager application = ApplicationLocator.getManager();
+			this.closeButton.setText(application.translate("Close"));
+		}
+		
+		public void close() {
+			this.setVisible(false);
+		}
+		
+	}
+	
+	public class ShowMessageView extends JPanel {
+		private static final long serialVersionUID = 8291970039773969840L;
+		JTextPane messaje = new JTextPane();
+		JButton closeButton = new JButton();
+
+		/**
+		 * Default constructor
+		 */
+		public ShowMessageView() {
+			initializePanel();
+		}
+		
+		/**
+		 * Adds fill components to empty cells in the first row and first column
+		 * of the grid. This ensures that the grid spacing will be the same as
+		 * shown in the designer.
+		 * 
+		 * @param cols
+		 *            an array of column indices in the first row where fill
+		 *            components should be added.
+		 * @param rows
+		 *            an array of row indices in the first column where fill
+		 *            components should be added.
+		 */
+		private void addFillComponents(Container panel, int[] cols, int[] rows) {
+			Dimension filler = new Dimension(10, 10);
+
+			boolean filled_cell_11 = false;
+			CellConstraints cc = new CellConstraints();
+			if (cols.length > 0 && rows.length > 0) {
+				if (cols[0] == 1 && rows[0] == 1) {
+					/** add a rigid area */
+					panel.add(Box.createRigidArea(filler), cc.xy(1, 1));
+					filled_cell_11 = true;
+				}
+			}
+
+			for (int index = 0; index < cols.length; index++) {
+				if (cols[index] == 1 && filled_cell_11) {
+					continue;
+				}
+				panel.add(Box.createRigidArea(filler), cc.xy(cols[index], 1));
+			}
+
+			for (int index = 0; index < rows.length; index++) {
+				if (rows[index] == 1 && filled_cell_11) {
+					continue;
+				}
+				panel.add(Box.createRigidArea(filler), cc.xy(1, rows[index]));
+			}
+
+		}
+
+		/**
+		 * Method for recalculating the component orientation for right-to-left
+		 * Locales.
+		 * 
+		 * @param orientation
+		 *            the component orientation to be applied
+		 */
+		public void applyComponentOrientation(ComponentOrientation orientation) {
+			// Not yet implemented...
+			// I18NUtils.applyComponentOrientation(this, orientation);
+			super.applyComponentOrientation(orientation);
+		}
+
+		public JPanel createPanel() {
+			JPanel jpanel1 = new JPanel();
+			FormLayout formlayout1 = new FormLayout(
+					"FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE",
+					"CENTER:DEFAULT:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+			CellConstraints cc = new CellConstraints();
+			jpanel1.setLayout(formlayout1);
+
+			JScrollPane jscrollpane1 = new JScrollPane();
+			jscrollpane1.setViewportView(messaje);
+			jscrollpane1
+					.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+			jscrollpane1
+					.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+			jpanel1.add(jscrollpane1, new CellConstraints(2, 2, 3, 1,
+					CellConstraints.DEFAULT, CellConstraints.FILL));
+
+			closeButton.setActionCommand("JButton");
+			closeButton.setText("JButton");
+			jpanel1.add(closeButton, cc.xy(3, 4));
+
+			addFillComponents(jpanel1, new int[] { 1, 2, 3, 4, 5 }, new int[] {
+					1, 2, 3, 4, 5 });
+			return jpanel1;
+		}
+
+		/**
+		 * Initializer
+		 */
+		protected void initializePanel() {
+			setLayout(new BorderLayout());
+			add(createPanel(), BorderLayout.CENTER);
+		}
+
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CheckSOAndArquitectureExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/MenusDevelTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/MenusDevelTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/MenusDevelTool.java	(revision 42196)
@@ -0,0 +1,170 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.develtools;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.Launcher.PluginMenuItem;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class MenusDevelTool {
+	public void showAllMenus() {
+		String html = "<html>\n<body>\n"+ this.getAllMenus()+"</body>\n</html>\n";
+		InfoPanel.save2file("menus-report", html);
+		InfoPanel.showPanel("Menu information", WindowManager.MODE.WINDOW, html);
+	}
+	public void showAllMenusByPlugin() {
+		String html = "<html>\n<body>\n"+ this.getAllMenusByPlugin()+"</body>\n</html>\n";
+		InfoPanel.save2file("menus-report-sorted-by-plugin", html);
+		InfoPanel.showPanel("Menu by plugin information", WindowManager.MODE.WINDOW, html);
+	}
+	
+	public String getAllMenus() {
+		Launcher launcher = Launcher.getInstance();
+		List<PluginMenuItem> menuItems = launcher.getPluginMenuItems();
+		
+		return this.getAllMenus(menuItems);
+	}
+	
+	public String getMenusOfPlugin(String pluginName) {
+		Launcher launcher = Launcher.getInstance();
+		List<PluginMenuItem> menuItems = launcher.getPluginMenuItems();
+		List<PluginMenuItem> pluginMenus = new ArrayList<Launcher.PluginMenuItem>();
+		
+		for (PluginMenuItem pluginMenuItem : menuItems) {
+			if( pluginName.equalsIgnoreCase(pluginMenuItem.getPluginName())) {
+				pluginMenus.add(pluginMenuItem);
+			}
+		}
+		if( pluginMenus.isEmpty() ) {
+			return "";
+		}
+		return this.getAllMenus(pluginMenus);
+	}
+	
+
+	public String getAllMenusByPlugin() {
+		Launcher launcher = Launcher.getInstance();
+		List<PluginMenuItem> menuItems = launcher.getPluginMenuItems();
+		
+		Collections.sort(menuItems, new Comparator<PluginMenuItem>() {
+			public int compare(PluginMenuItem o1, PluginMenuItem o2) {
+				String s1 = String.format("%s:%012d:%s", o1.getPluginName(), o1.getPosition(), o1.getText());
+				String s2 = String.format("%s:%012d:%s", o2.getPluginName(), o2.getPosition(), o2.getText());
+				return s1.compareTo(s2);
+			}
+		});
+		return this.getAllMenus(menuItems);
+	}
+	
+	private String getAllMenus(List<PluginMenuItem> menuItems) {
+		StringBuffer buffer = new StringBuffer();
+
+//		String warning_open = "<b>";
+//		String warning_close = "</b>";
+		
+		String error_open = "<b><font color=\"red\">";
+		String error_close = "</font></b>";
+		
+		buffer.append("<div>\n");
+		buffer.append("<h2>Menu information </h2>\n");
+		buffer.append("<br>\n");
+		
+		buffer.append("<table border=\"0\">\n");
+		buffer.append("  <tr>\n");
+		buffer.append("    <td>Position</td>\n");
+		buffer.append("    <td>Text</td>\n");
+		buffer.append("    <td>Action</td>\n");
+		buffer.append("    <td>Plugin</td>\n");
+		buffer.append("  </tr>\n");
+
+		
+		for (PluginMenuItem menu : menuItems) {
+			buffer.append("  <tr valign=\"top\">\n");
+			buffer
+				.append("    <td>")
+				.append(formatPosition( menu.getPosition()))
+				.append("</td>\n");			
+			buffer
+				.append("    <td>")
+				.append(menu.getText())
+				.append("</td>\n");		
+			if( menu.isParent() ) {
+				buffer
+					.append("    <td>")
+					.append("----")
+					.append("</td>\n");
+				buffer
+					.append("    <td>")
+					.append(menu.getPluginName())
+					.append("</td>\n");			
+			} else {
+				ActionInfo action = menu.getAction();
+				if( action == null ) {
+					buffer
+						.append("    <td>")
+						.append(error_open)
+						.append(menu.getName())
+						.append(error_close)
+						.append("</td>\n");
+					buffer
+						.append("    <td>")
+						.append(menu.getPluginName())
+						.append("</td>\n");			
+				} else {
+					buffer
+						.append("    <td>")
+						.append(action.getName())
+						.append("</td>\n");
+					buffer
+						.append("    <td>")
+						.append(action.getPluginName())
+						.append("</td>\n");			
+				}
+			}
+			buffer.append("  </tr>\n");
+		}
+		buffer.append("</table>\n");
+		buffer.append("</div>\n");
+
+		return buffer.toString();
+	}
+	
+	static String formatPosition(long position) {
+		String pos = String.format("%012d",position);
+		if( pos.length() != 12) {
+			return pos;
+		}
+		String posf = pos.substring(0, 5) + "-" +
+			pos.substring(5,8) + "-" +
+			pos.substring(8,11) + "-" +
+			pos.substring(11);
+		return posf;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/MenusDevelTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerExtension.java	(revision 42196)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.develtools;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+
+public class EditingListenerExtension extends Extension {
+    private EditingListenerPanel win = null;
+
+    public void initialize() {
+    }
+
+    public void execute(String actionCommand) {
+        if( "tools-devel-show-editing-listener".equalsIgnoreCase(actionCommand) ) {
+            if( this.win == null || this.win.isClosed() ) {
+                this.win = new EditingListenerPanel();
+                WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+                winmgr.showWindow(win, "Editing monitor", WindowManager.MODE.TOOL);
+            }
+        }
+    }
+
+    public boolean isEnabled() {
+        if( this.win == null || this.win.isClosed() ) {
+            return true;
+        }
+        return false;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.java	(revision 42196)
@@ -0,0 +1,159 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.extension.develtools;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTextArea;
+import javax.swing.JTextPane;
+import javax.swing.border.TitledBorder;
+import org.jdesktop.layout.GroupLayout;
+
+
+public class EditingListenerPanelLayout extends javax.swing.JPanel {
+
+    /**
+     * Creates new form EditingListenerPanelLayout
+     */
+    public EditingListenerPanelLayout() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+        GridBagConstraints gridBagConstraints;
+
+        lblEditNotifications = new JLabel();
+        btnClose = new JButton();
+        btnClear = new JButton();
+        jSeparator1 = new JSeparator();
+        jSeparator2 = new JSeparator();
+        chkAskToAceptNotification = new JCheckBox();
+        jScrollPane2 = new JScrollPane();
+        txtNotifications = new JTextPane();
+        chkShowFeatureInForm = new JCheckBox();
+        chkSkipFeatureValidation = new JCheckBox();
+
+        setBorder(null);
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0};
+        layout.rowHeights = new int[] {0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0};
+        setLayout(layout);
+
+        lblEditNotifications.setText("Editing notifications");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 1.0;
+        add(lblEditNotifications, gridBagConstraints);
+
+        btnClose.setText("Close");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 3;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_END;
+        add(btnClose, gridBagConstraints);
+
+        btnClear.setText("Clear");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_END;
+        add(btnClear, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        add(jSeparator1, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        add(jSeparator2, gridBagConstraints);
+
+        chkAskToAceptNotification.setText("Ask to acept or cancel notification");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(chkAskToAceptNotification, gridBagConstraints);
+
+        txtNotifications.setContentType("text/html"); // NOI18N
+        jScrollPane2.setViewportView(txtNotifications);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridwidth = 2;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        add(jScrollPane2, gridBagConstraints);
+
+        chkShowFeatureInForm.setText("Show feature in form"); // NOI18N
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(chkShowFeatureInForm, gridBagConstraints);
+
+        chkSkipFeatureValidation.setText("Skip feature validation");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.LINE_START;
+        add(chkSkipFeatureValidation, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected JButton btnClear;
+    protected JButton btnClose;
+    protected JCheckBox chkAskToAceptNotification;
+    protected JCheckBox chkShowFeatureInForm;
+    protected JCheckBox chkSkipFeatureValidation;
+    protected JScrollPane jScrollPane2;
+    protected JSeparator jSeparator1;
+    protected JSeparator jSeparator2;
+    protected JLabel lblEditNotifications;
+    protected JTextPane txtNotifications;
+    // End of variables declaration//GEN-END:variables
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanel.java	(revision 42196)
@@ -0,0 +1,218 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.develtools;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JOptionPane;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.editing.EditingNotificationManager;
+import org.gvsig.editing.EditingNotification;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class EditingListenerPanel extends EditingListenerPanelLayout implements Observer {
+    private static final long serialVersionUID = -4106763914259136033L;
+    private static final Logger logger = LoggerFactory.getLogger(EditingListenerPanel.class);
+    private boolean askToAceptNotification;
+    private boolean closed = true;
+    private StringBuilder buffer = new StringBuilder();
+    
+    public EditingListenerPanel() {
+        initComponents();
+        startObservation();
+    }
+    
+    private void initComponents() {
+        this.btnClear.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                onClear();
+            }
+        });
+        this.btnClose.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                setVisible(false);
+            }
+        });
+
+        this.chkAskToAceptNotification.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent ae) {
+                onAskToAceptNotification();
+            }
+        });
+        this.chkSkipFeatureValidation.setSelected(false);
+
+        this.chkAskToAceptNotification.setSelected(false);
+        this.addComponentListener(new ComponentListener() {
+            public void componentResized(ComponentEvent ce) {
+            }
+            public void componentMoved(ComponentEvent ce) {
+            }
+            public void componentShown(ComponentEvent ce) {
+                closed = false;
+            }
+            public void componentHidden(ComponentEvent ce) {
+                onClose();
+            }
+        });
+        this.setPreferredSize(new Dimension(300, 400));
+    }
+    
+    public boolean isClosed() {
+        return closed;
+    }
+
+    private void onClose() {
+        this.stopObservation();
+        this.closed = true;
+    }
+    
+    private void onClear() {
+        this.txtNotifications.setText("");
+        this.buffer = new StringBuilder();
+    }
+    
+    private void onAskToAceptNotification() {
+        this.askToAceptNotification = this.chkAskToAceptNotification.isSelected();
+    }
+
+    private void addText(String text) {
+        this.buffer.append(text);
+        if( this.buffer.length()> 30000) {
+            this.buffer.delete(0, 20000);
+        }
+        String s = "<html>\n"+buffer.toString()+"</html>\n";
+        this.txtNotifications.setText(s);
+        this.txtNotifications.setSelectionStart(s.length());
+    }
+    
+    public void update(Observable observable, Object notification) {
+        EditingNotification n = (EditingNotification) notification;
+        StringBuilder b = new StringBuilder();
+        b.append("<b>Notification type</b>: ");
+        b.append(n.getType());
+        b.append("<br>\n");
+        if( n.getSource() == null ) {
+            b.append("<b>Source</b>: (unknow)<br>\n");
+        } else {
+            b.append("<b>Source</b>: <i>");
+            b.append(n.getSource().getClass().getName());
+            b.append("</i> (");
+            b.append(n.getSource().hashCode());
+            b.append(") <br>\n");
+        }
+        if( n.getDocument() == null ) {
+            b.append("<b>Document</b>: (unknow)<br>\n");
+        } else {
+            b.append("<b>Document</b>: <i>");
+            b.append(n.getDocument().toString());
+            b.append("</i> (");
+            b.append(n.getDocument().hashCode());
+            b.append(", ");
+            b.append(n.getDocument().getClass().getName());
+            b.append(") <br>\n");
+        }
+        if( n.getLayer() == null ) {
+            b.append("<b>Layer</b>: (unknow)<br>\n");
+        } else {
+            b.append("<b>Layer</b>: <i>");
+            b.append(n.getLayer().getName());
+            b.append("</i><br>\n");
+        }
+        if( n.getStore()== null ) {
+            b.append("<b>Store</b>: (unknow)<br>\n");
+        } else {
+            b.append("<b>Store</b>: <i>");
+            b.append(n.getStore().getName());
+            b.append("</i> (");
+            b.append(n.getStore().hashCode());
+            b.append(", ");
+            b.append(n.getStore().getClass().getName());
+            b.append(") <br>\n");
+        }
+        if( n.getFeature()== null ) {
+            b.append("<b>Feature</b>: (unknow)<br>\n");
+        } else {
+            b.append("<b>Feature</b>: ");
+            b.append(n.getFeature().toString());
+            b.append("<br>\n");
+        }
+
+        b.append("<hr><br>\n");
+        this.addText(b.toString());
+
+        n.setSkipFeatureValidation(this.chkSkipFeatureValidation.isSelected());
+        
+        if( n.isCancelable() ) {
+            if( this.chkShowFeatureInForm.isSelected() && n.getFeature()!=null ) {
+                try {
+                    DynObject data = n.getFeature().getAsDynObject();
+                    DynObjectEditor editor = new DynObjectEditor(data);
+                    editor.setTitle("Editing monitor - "+n.getFeature().getType().getName());
+                    editor.editObject(true);
+                    if( editor.isCanceled() ) {
+                        if( this.askToAceptNotification ) {
+                                n.cancel();
+                        }
+                    } else {
+                         editor.getData(data);
+                    }
+                } catch (Exception ex) {
+                    logger.warn("Problems showing the feature in a form.",ex);
+                }
+            } else if( this.askToAceptNotification ) {
+                ApplicationManager application = ApplicationLocator.getManager();
+                int r = application.confirmDialog(
+                        "Do you want to cancel the process that generated this notification?", 
+                        "Cancel process", 
+                        JOptionPane.YES_NO_OPTION,
+                        JOptionPane.QUESTION_MESSAGE);
+                if( r == JOptionPane.YES_OPTION ) {
+                    n.cancel();
+                }
+            }
+        }
+    }
+
+    private void startObservation() {
+        EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+        editingNotificationManager.addObserver(this);
+    }
+
+    private void stopObservation() {
+        EditingNotificationManager editingNotificationManager = MapControlLocator.getEditingNotificationManager();
+        editingNotificationManager.deleteObserver(this);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.form
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.form	(revision 42196)
@@ -0,0 +1,862 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <Properties>
+    <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+      <Border info="null"/>
+    </Property>
+  </Properties>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="4"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lblEditNotifications">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Editing notifications"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="1.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="btnClose">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Close"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="3" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JButton" name="btnClear">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Clear"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator1">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator2">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkAskToAceptNotification">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Ask to acept or cancel notification"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="2" gridWidth="2" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="1.0" weightY="1.0"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextPane" name="txtNotifications">
+          <Properties>
+            <Property name="contentType" type="java.lang.String" value="text/html" noResource="true"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JCheckBox" name="chkShowFeatureInForm">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Show feature in form" noResource="true"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="6" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="chkSkipFeatureValidation">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Skip feature validation"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="2" gridY="8" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+  </SubComponents>
+  <LayoutCode>
+    <CodeStatement>
+      <CodeExpression id="1_layout">
+        <CodeVariable name="layout" type="4096" declaredType="java.awt.GridBagLayout"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagLayout" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="1_layout"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="columnWidths" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="2">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="1_layout"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="rowHeights" class="java.awt.GridBagLayout"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="3">
+          <ExpressionOrigin>
+            <Value type="[I" editor="org.netbeans.modules.form.layoutsupport.delegates.GridBagLayoutSupport$IntArrayPropertyEditor">
+              <PropertyValue value="[0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0]"/>
+            </Value>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4">
+        <ExpressionOrigin>
+          <ExpressionProvider type="ComponentRef">
+            <ComponentRef name="."/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="setLayout" class="java.awt.Container" parameterTypes="java.awt.LayoutManager"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="1_layout"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints" type="20480" declaredType="java.awt.GridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="5_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="6">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="7">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="8">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="5_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="9">
+          <ExpressionOrigin>
+            <Value type="double" value="1.0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="10_lblEditNotifications">
+          <CodeVariable name="lblEditNotifications" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="lblEditNotifications"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="5_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="11_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="12">
+          <ExpressionOrigin>
+            <Value type="int" value="3"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="13">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="11_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="15_btnClose">
+          <CodeVariable name="btnClose" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="btnClose"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="11_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="16_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="16_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="16_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="17">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="16_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="18">
+          <ExpressionOrigin>
+            <Value type="int" value="10"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="16_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="22"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20_btnClear">
+          <CodeVariable name="btnClear" type="8196" declaredType="javax.swing.JButton"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="btnClear"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="16_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="21_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="22">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="21_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="23">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="24_jSeparator1">
+          <CodeVariable name="jSeparator1" type="8196" declaredType="javax.swing.JSeparator"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jSeparator1"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="21_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="25_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="26">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="25_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="27">
+          <ExpressionOrigin>
+            <Value type="int" value="0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="28_jSeparator2">
+          <CodeVariable name="jSeparator2" type="8196" declaredType="javax.swing.JSeparator"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jSeparator2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="25_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="29_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="30">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="31">
+          <ExpressionOrigin>
+            <Value type="int" value="4"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="29_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="32">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="33_chkAskToAceptNotification">
+          <CodeVariable name="chkAskToAceptNotification" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkAskToAceptNotification"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="29_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="34_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="35">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="36">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridwidth" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="37">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="38">
+          <ExpressionOrigin>
+            <Value type="int" value="1"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="39">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weightx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="40">
+          <ExpressionOrigin>
+            <Value type="double" value="1.0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="34_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="weighty" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="41">
+          <ExpressionOrigin>
+            <Value type="double" value="1.0"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="42_jScrollPane2">
+          <CodeVariable name="jScrollPane2" type="8196" declaredType="javax.swing.JScrollPane"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jScrollPane2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="34_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="43_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="44">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="45">
+          <ExpressionOrigin>
+            <Value type="int" value="6"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="46">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="43_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="47">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="48_chkShowFeatureInForm">
+          <CodeVariable name="chkShowFeatureInForm" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkShowFeatureInForm"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="43_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints">
+        <CodeVariable name="gridBagConstraints"/>
+        <ExpressionOrigin>
+          <ExpressionProvider type="CodeConstructor">
+            <CodeConstructor class="java.awt.GridBagConstraints" parameterTypes=""/>
+          </ExpressionProvider>
+        </ExpressionOrigin>
+      </CodeExpression>
+      <StatementProvider type="CodeExpression">
+        <CodeExpression id="49_gridBagConstraints"/>
+      </StatementProvider>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridx" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="50">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="gridy" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="51">
+          <ExpressionOrigin>
+            <Value type="int" value="8"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="52">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="49_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="53">
+          <ExpressionOrigin>
+            <Value type="int" value="21"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="4"/>
+      <StatementProvider type="CodeMethod">
+        <CodeMethod name="add" class="java.awt.Container" parameterTypes="java.awt.Component, java.lang.Object"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="54_chkSkipFeatureValidation">
+          <CodeVariable name="chkSkipFeatureValidation" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="chkSkipFeatureValidation"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="49_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/IconThemeDevelTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/IconThemeDevelTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/IconThemeDevelTool.java	(revision 42196)
@@ -0,0 +1,583 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.develtools;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+
+public class IconThemeDevelTool {
+
+	public void showDefaultIconTheme() {
+		String html = "<html>\n<body>\n"+ this.getIconThemeInformationByGroup()+"</body>\n</html>\n";
+		InfoPanel.save2file("icontheme-report", html);
+		InfoPanel.showPanel("Icon theme information", WindowManager.MODE.WINDOW, html);
+	}
+
+	public void showDefaultIconThemeByPlugin() {
+		String html = "<html>\n<body>\n"+ this.getIconThemeInformationByPlugin()+"</body>\n</html>\n";
+		InfoPanel.save2file("icontheme-report", html);
+		InfoPanel.showPanel("Icon theme information", WindowManager.MODE.WINDOW, html);
+	}
+
+	private String getIconThemeInformationByPlugin() {
+		IconThemeManager manager = ToolsSwingLocator.getIconThemeManager();
+		IconTheme theme = manager.getDefault();
+		
+		List<IconTheme.Icon>themeIcons = new ArrayList<IconTheme.Icon>();
+		Iterator<IconTheme.Icon> themeIconsIt = theme.getThemeIcons();
+		while (themeIconsIt.hasNext()) {
+			themeIcons.add(themeIconsIt.next());
+		}
+		Collections.sort(themeIcons, new Comparator<IconTheme.Icon>() {
+			public int compare(IconTheme.Icon o1, IconTheme.Icon o2) {
+				String s1 = String.format("%s:%s:%s", o1.getProviderName(), o1.getGroup(), o1.getName());
+				String s2 = String.format("%s:%s:%s", o2.getProviderName(), o2.getGroup(), o2.getName());
+				return s1.compareTo(s2);
+			}
+		});
+		themeIconsIt = themeIcons.iterator();
+		return getIconThemeInformation(theme, themeIconsIt);
+	}
+	
+	public String getIconThemeInformationOfPlugin(String pluginName) {
+		if( pluginName == null ) {
+			return "";
+		}
+		IconThemeManager manager = ToolsSwingLocator.getIconThemeManager();
+		IconTheme theme = manager.getDefault();
+		
+		List<IconTheme.Icon>themeIcons = new ArrayList<IconTheme.Icon>();
+		Iterator<IconTheme.Icon> themeIconsIt = theme.getThemeIcons();
+		while (themeIconsIt.hasNext()) {
+			IconTheme.Icon iconTheme = (IconTheme.Icon) themeIconsIt.next();
+			if( !pluginName.equalsIgnoreCase(iconTheme.getProviderName()) ) {
+				continue;
+			}
+			themeIcons.add(iconTheme);
+		}
+		Collections.sort(themeIcons, new Comparator<IconTheme.Icon>() {
+			public int compare(IconTheme.Icon o1, IconTheme.Icon o2) {
+				String s1 = String.format("%s:%s:%s", o1.getProviderName(), o1.getGroup(), o1.getName());
+				String s2 = String.format("%s:%s:%s", o2.getProviderName(), o2.getGroup(), o2.getName());
+				return s1.compareTo(s2);
+			}
+		});
+		themeIconsIt = themeIcons.iterator();
+		return getIconThemeInformation(theme, themeIconsIt);
+	}
+	
+	private String getIconThemeInformationByGroup() {
+		IconThemeManager manager = ToolsSwingLocator.getIconThemeManager();
+		IconTheme theme = manager.getDefault();
+		
+		List<IconTheme.Icon>themeIcons = new ArrayList<IconTheme.Icon>();
+		Iterator<IconTheme.Icon> themeIconsIt = theme.getThemeIcons();
+		while (themeIconsIt.hasNext()) {
+			themeIcons.add(themeIconsIt.next());
+		}
+		Collections.sort(themeIcons, new Comparator<IconTheme.Icon>() {
+			public int compare(IconTheme.Icon o1, IconTheme.Icon o2) {
+				String s1 = String.format("%s:%s:%s", o1.getGroup(), o1.getName(), o1.getProviderName());
+				String s2 = String.format("%s:%s:%s", o2.getGroup(), o2.getName(), o2.getProviderName());
+				return s1.compareTo(s2);
+			}
+		});
+		themeIconsIt = themeIcons.iterator();
+		return getIconThemeInformation(theme,themeIconsIt);
+	}
+
+	private String getIconThemeInformation(IconTheme theme, Iterator<IconTheme.Icon> themeIconsIt) {
+		Set<String> actionIcons = new HashSet<String>();
+		Iterator<ActionInfo> actions = PluginsLocator.getActionInfoManager().getActions(); 
+		while (actions.hasNext()) {
+			ActionInfo action = actions.next();
+			if( action.getIconName()!=null ) {
+				actionIcons.add(action.getIconName());
+			}
+		}
+		Set<String> tangoIconNames = getTangoIconNames();
+		
+		StringBuffer buffer = new StringBuffer();
+
+		String warning_open = "<b>";
+		String warning_close = "</b>";
+		
+		String error_open = "<b><font color=\"red\">";
+		String error_close = "</font></b>";
+
+		String tangoicon_open = "<b><font color=\"green\">";
+		String tangoicon_close = "</font></b>";
+		
+		String previousPluginName = null;
+
+		buffer.append("<div>\n");
+		buffer.append("<h2>Icon theme information</h2>\n");
+		buffer.append("<br>\n");
+		buffer.append("Theme: ");
+		buffer.append(theme.getName());
+		buffer.append("<br>\n");
+		buffer.append("Description: ");
+		buffer.append(theme.getDescription());
+		buffer.append("<br>\n");
+
+		buffer.append("<table border=\"0\">\n");
+		buffer.append("  <tr>\n");
+		buffer.append("    <td>Preview</td>\n");
+		buffer.append("    <td>Group</td>\n");
+		buffer.append("    <td>Name</td>\n");
+		buffer.append("    <td>Provider/Plugin</td>\n");
+		buffer.append("    <td>Resource</td>\n");
+		buffer.append("  </tr>\n");
+		
+		
+		while (themeIconsIt.hasNext()) {
+			IconTheme.Icon themeIcon = themeIconsIt.next();
+			if( previousPluginName!=null && !themeIcon.getProviderName().equals(previousPluginName) ) {
+				buffer
+					.append("  <tr>\n")
+					.append("    <td colspan=\"4\"><hr></td>\n")
+					.append("  </tr>\n");
+				previousPluginName = themeIcon.getProviderName();
+			}
+			
+			buffer.append("  <tr valign=\"top\">\n");
+			
+			// Preview			
+			if( themeIcon.getLabel().length()>0 && themeIcon.getImageIcon()!=null ) {
+				try {
+					ImageIcon img = themeIcon.getImageIcon();
+					if( img.getIconHeight() > 48 || img.getIconWidth() > 48 ) {
+						buffer
+							.append("    <td nowrap>")
+							.append("<img width=\"48\" height=\"48\" src=\"")
+							.append(themeIcon.getLabel())
+							.append("\">(*)</td>");
+					} else {
+						buffer
+							.append("    <td>")
+							.append("<img src=\"")
+							.append(themeIcon.getLabel())
+							.append("\"></td>");
+					}
+				} catch(Exception ex) {
+					buffer
+						.append("    <td>")
+						.append("<img src=\"")
+						.append(themeIcon.getLabel())
+						.append("\"></td>");
+				}
+			} else {
+				buffer.append("    <td></td>");
+			}
+		
+			// Group
+			if( themeIcon.getGroup()==null ) {
+				buffer.append("    <td title=\"missing recomended group\">")
+					.append(warning_open)
+					.append(themeIcon.getGroup())
+					.append(warning_close)
+					.append("</td>\n");
+			} else {
+				buffer.append("    <td>")
+					.append(themeIcon.getGroup())
+					.append("</td>\n");
+			}
+
+			// Name
+			if( "action".equals(themeIcon.getGroup()) && !actionIcons.contains(themeIcon.getName())) {
+				buffer.append("    <td title=\"Don't exists an action associated to this icon\">")
+					.append(error_open)
+					.append(themeIcon.getName())
+					.append(error_close)
+					.append("</td>\n");
+			} else if( !themeIcon.getName().contains("-") ) {
+				buffer.append("    <td title=\"Name don't have recomended format\">")
+					.append(warning_open)
+					.append(themeIcon.getName())
+					.append(warning_close)
+					.append("</td>\n");
+			} else if( tangoIconNames.contains(themeIcon.getName()) ){
+				buffer.append("    <td>")
+					.append(tangoicon_open)
+					.append(themeIcon.getName())
+					.append(tangoicon_close)
+					.append("</td>\n");
+			} else {
+				buffer.append("    <td>")
+					.append(themeIcon.getName())
+					.append("</td>\n");
+			}
+
+			// Plugin
+			if( themeIcon.getProviderName()== null ) {
+				buffer.append("    <td title=\"missing recomended associated plugin\">")
+					.append(warning_open)
+					.append(themeIcon.getProviderName())
+					.append(warning_close)
+					.append("</td>\n");
+				
+			}  else {
+				buffer.append("    <td>")
+					.append(themeIcon.getProviderName())
+					.append("</td>\n");
+			}			
+			
+			// Resource
+			if( themeIcon.getLabel().length()<1 ) {
+				buffer.append("    <td title=\"Resource icon not specified\">")
+					.append(error_open)
+					.append("(missing)")
+					.append(error_close)
+					.append("</td>\n");
+			} else if( themeIcon.getImageIcon()==null ) {
+				buffer.append("    <td title=\"Can't locate icon\">")
+					.append(error_open)
+					.append(themeIcon.getLabel())
+					.append(error_close)
+					.append("</td>\n");
+			} else {
+				buffer.append("    <td>")
+					.append(themeIcon.getLabel())
+					.append("</td>\n");
+
+			}
+			buffer.append("  </tr>\n");
+		}
+		buffer.append("</table>\n");
+		buffer.append("</div>\n");
+
+		return buffer.toString();
+	}
+
+	private Set<String> getTangoIconNames() {
+		String[] iconNames = new String[] {
+				"address-book-new",
+				"application-exit",
+				"appointment-new",
+				"call-start",
+				"call-stop",
+				"contact-new",
+				"document-new",
+				"document-open",
+				"document-open-recent",
+				"document-page-setup",
+				"document-print",
+				"document-print-preview",
+				"document-properties",
+				"document-revert",
+				"document-save",
+				"document-save-as",
+				"document-send",
+				"edit-clear",
+				"edit-copy",
+				"edit-cut",
+				"edit-delete",
+				"edit-find",
+				"edit-find-replace",
+				"edit-paste",
+				"edit-redo",
+				"edit-select-all",
+				"edit-undo",
+				"folder-new",
+				"format-indent-less",
+				"format-indent-more",
+				"format-justify-center",
+				"format-justify-fill",
+				"format-justify-left",
+				"format-justify-right",
+				"format-text-direction-ltr",
+				"format-text-direction-rtl",
+				"format-text-bold",
+				"format-text-italic",
+				"format-text-underline",
+				"format-text-strikethrough",
+				"go-bottom",
+				"go-down",
+				"go-first",
+				"go-home",
+				"go-jump",
+				"go-last",
+				"go-next",
+				"go-previous",
+				"go-top",
+				"go-up",
+				"help-about",
+				"help-contents",
+				"help-faq",
+				"insert-image",
+				"insert-link",
+				"insert-object",
+				"insert-text",
+				"list-add",
+				"list-remove",
+				"mail-forward",
+				"mail-mark-important",
+				"mail-mark-junk",
+				"mail-mark-notjunk",
+				"mail-mark-read",
+				"mail-mark-unread",
+				"mail-message-new",
+				"mail-reply-all",
+				"mail-reply-sender",
+				"mail-send",
+				"mail-send-receive",
+				"media-eject",
+				"media-playback-pause",
+				"media-playback-start",
+				"media-playback-stop",
+				"media-record",
+				"media-seek-backward",
+				"media-seek-forward",
+				"media-skip-backward",
+				"media-skip-forward",
+				"object-flip-horizontal",
+				"object-flip-vertical",
+				"object-rotate-left",
+				"object-rotate-right",
+				"process-stop",
+				"system-lock-screen",
+				"system-log-out",
+				"system-run",
+				"system-search",
+				"system-reboot",
+				"system-shutdown",
+				"tools-check-spelling",
+				"view-fullscreen",
+				"view-refresh",
+				"view-restore",
+				"view-sort-ascending",
+				"view-sort-descending",
+				"window-close",
+				"window-new",
+				"zoom-fit-best",
+				"zoom-in",
+				"zoom-original",
+				"zoom-out",
+				"process-working",
+				"accessories-calculator",
+				"accessories-character-map",
+				"accessories-dictionary",
+				"accessories-text-editor",
+				"help-browser",
+				"multimedia-volume-control",
+				"preferences-desktop-accessibility",
+				"preferences-desktop-font",
+				"preferences-desktop-keyboard",
+				"preferences-desktop-locale",
+				"preferences-desktop-multimedia",
+				"preferences-desktop-screensaver",
+				"preferences-desktop-theme",
+				"preferences-desktop-wallpaper",
+				"system-file-manager",
+				"system-software-install",
+				"system-software-update",
+				"utilities-system-monitor",
+				"utilities-terminal",
+				"applications-accessories",
+				"applications-development",
+				"applications-engineering",
+				"applications-games",
+				"applications-graphics",
+				"applications-internet",
+				"applications-multimedia",
+				"applications-office",
+				"applications-other",
+				"applications-science",
+				"applications-system",
+				"applications-utilities",
+				"preferences-desktop",
+				"preferences-desktop-peripherals",
+				"preferences-desktop-personal",
+				"preferences-other",
+				"preferences-system",
+				"preferences-system-network",
+				"system-help",
+				"audio-card",
+				"audio-input-microphone",
+				"battery",
+				"camera-photo",
+				"camera-video",
+				"camera-web",
+				"computer",
+				"drive-harddisk",
+				"drive-optical",
+				"drive-removable-media",
+				"input-gaming",
+				"input-keyboard",
+				"input-mouse",
+				"input-tablet",
+				"media-flash",
+				"media-floppy",
+				"media-optical",
+				"media-tape",
+				"modem",
+				"multimedia-player",
+				"network-wired",
+				"network-wireless",
+				"pda",
+				"phone",
+				"printer",
+				"scanner",
+				"video-display",
+				"emblem-default",
+				"emblem-documents",
+				"emblem-downloads",
+				"emblem-favorite",
+				"emblem-important",
+				"emblem-mail",
+				"emblem-photos",
+				"emblem-readonly",
+				"emblem-shared",
+				"emblem-symbolic-link",
+				"emblem-synchronized",
+				"emblem-system",
+				"emblem-unreadable",
+				"face-angel",
+				"face-angry",
+				"face-cool",
+				"face-crying",
+				"face-devilish",
+				"face-embarrassed",
+				"face-kiss",
+				"face-laugh",
+				"face-monkey",
+				"face-plain",
+				"face-raspberry",
+				"face-sad",
+				"face-sick",
+				"face-smile",
+				"face-smile-big",
+				"face-smirk",
+				"face-surprise",
+				"face-tired",
+				"face-uncertain",
+				"face-wink",
+				"face-worried",
+				"flag-aa",
+				"application-x-executable",
+				"audio-x-generic",
+				"font-x-generic",
+				"image-x-generic",
+				"package-x-generic",
+				"text-html",
+				"text-x-generic",
+				"text-x-generic-template",
+				"text-x-script",
+				"video-x-generic",
+				"x-office-address-book",
+				"x-office-calendar",
+				"x-office-document",
+				"x-office-presentation",
+				"x-office-spreadsheet",
+				"folder",
+				"folder-remote",
+				"network-server",
+				"network-workgroup",
+				"start-here",
+				"user-bookmarks",
+				"user-desktop",
+				"user-home",
+				"user-trash",
+				"appointment-missed",
+				"appointment-soon",
+				"audio-volume-high",
+				"audio-volume-low",
+				"audio-volume-medium",
+				"audio-volume-muted",
+				"battery-caution",
+				"battery-low",
+				"dialog-error",
+				"dialog-information",
+				"dialog-password",
+				"dialog-question",
+				"dialog-warning",
+				"folder-drag-accept",
+				"folder-open",
+				"folder-visiting",
+				"image-loading",
+				"image-missing",
+				"mail-attachment",
+				"mail-unread",
+				"mail-read",
+				"mail-replied",
+				"mail-signed",
+				"mail-signed-verified",
+				"media-playlist-repeat",
+				"media-playlist-shuffle",
+				"network-error",
+				"network-idle",
+				"network-offline",
+				"network-receive",
+				"network-transmit",
+				"network-transmit-receive",
+				"printer-error",
+				"printer-printing",
+				"security-high",
+				"security-medium",
+				"security-low",
+				"software-update-available",
+				"software-update-urgent",
+				"sync-error",
+				"sync-synchronizing",
+				"task-due",
+				"task-past-due",
+				"user-available",
+				"user-away",
+				"user-idle",
+				"user-offline",
+				"user-trash-full",
+				"weather-clear",
+				"weather-clear-night",
+				"weather-few-clouds",
+				"weather-few-clouds-night",
+				"weather-fog",
+				"weather-overcast",
+				"weather-severe-alert",
+				"weather-showers",
+				"weather-showers-scattered",
+				"weather-snow",
+				"weather-storm"
+		};
+		Set<String> icons = new HashSet<String>();
+		for (int i = 0; i < iconNames.length; i++) {
+			icons.add(iconNames[i]);
+		}
+		return icons;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/IconThemeDevelTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/ActionsInfoDevelTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/ActionsInfoDevelTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/ActionsInfoDevelTool.java	(revision 42196)
@@ -0,0 +1,237 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.develtools;
+
+import java.util.Iterator;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class ActionsInfoDevelTool {
+
+	public void showActions() {
+		String html = "<html>\n<body>\n"+ this.getActionsInformation(null)+"</body>\n</html>\n";
+		
+		InfoPanel.save2file("actions-report", html);
+		InfoPanel.showPanel("Actions information", WindowManager.MODE.WINDOW, html);
+	}
+
+	public void showReportOfPlugin() {
+		ApplicationManager application = ApplicationLocator.getManager();
+		String pluginName = null;
+		
+		pluginName = application.inputDialog("Introduzca el nombre del plugin del que desea el informe", "Plugin actions report");
+		if( pluginName == null ) {
+			return;
+		}
+		String actionsHtml = this.getActionsInformation(pluginName);
+		String menusHtml = new MenusDevelTool().getMenusOfPlugin(pluginName);
+		String iconsHtml = new IconThemeDevelTool().getIconThemeInformationOfPlugin(pluginName);
+		
+		String html = "<html>\n<body>\n"+actionsHtml+"<br>"+menusHtml+"<br>"+iconsHtml+"</body>\n</html>\n";
+		
+		InfoPanel.save2file("plugin-report", html);
+		InfoPanel.showPanel("Plugin report", WindowManager.MODE.WINDOW, html);
+	}
+
+	
+	
+	public String getActionsInformation(String pluginName) {
+		
+		String previousPluginName = null;
+		
+		String warning_open = "<b>";
+		String warning_close = "</b>";
+		
+		String error_open = "<b><font color=\"red\">";
+		String error_close = "</font></b>";
+
+		StringBuffer buffer = new StringBuffer();
+
+		buffer.append("<html>\n");
+		buffer.append("<body>\n");
+		
+		buffer.append("<div>\n");
+		buffer.append("<h2>Actions information </h2>\n");
+		buffer.append("<br>\n");
+
+		buffer.append("<table border=\"0\">\n");
+		buffer.append("  <tr>\n");
+		buffer.append("    <td>Plugin</td>\n");
+		buffer.append("    <td>Extension</td>\n");
+		buffer.append("    <td>Name</td>\n");
+		buffer.append("    <td>Position</td>\n");
+		buffer.append("    <td>Text</td>\n");
+		buffer.append("    <td>Command</td>\n");
+		buffer.append("    <td>Icon</td>\n");
+		buffer.append("    <td>Tip</td>\n");
+		buffer.append("    <td>Accelerator</td>\n");
+		buffer.append("  </tr>\n");
+		Iterator<ActionInfo> actions = PluginsLocator.getActionInfoManager().getActions(); 
+		while (actions.hasNext()) {
+			ActionInfo action = actions.next();
+			if( pluginName!=null && !pluginName.equalsIgnoreCase(action.getPluginName()) ) {
+				continue;
+			}
+			if( previousPluginName!=null && !action.getPluginName().equals(previousPluginName) ) {
+				buffer
+					.append("  <tr>\n")
+					.append("    <td colspan=\"9\"><hr></td>\n")
+					.append("  </tr>\n");
+				previousPluginName = action.getPluginName();
+			}
+			buffer.append("  <tr valign=\"top\">\n");
+			buffer.append("    <td>")
+				.append(action.getPluginName())
+				.append("</td>\n");
+			buffer.append("    <td>")
+				.append(action.getExtensionName())
+				.append("</td>\n");
+			if( action.getName().startsWith("anonymous__") ) {
+				buffer.append("    <td title=\"Missing action name, asigned one by default\">")
+					.append(error_open)
+					.append(action.getName())
+					.append(error_close)
+					.append("</td>\n");
+			} else if( !action.getName().contains("-") ) {
+				buffer.append("    <td title=\"Name don't have recomended syntax\">")
+					.append(warning_open)
+					.append(action.getName())
+					.append(warning_close)
+					.append("</td>\n");
+			} else {
+				buffer.append("    <td>")
+					.append(action.getName())
+					.append("</td>\n");
+			}  
+			if( action.getPosition()<100000000 ) {
+				buffer.append("    <td title=\"Incorrect position\">")
+					.append(error_open)
+					.append(MenusDevelTool.formatPosition(action.getPosition()))
+					.append(error_close)
+					.append("</td>\n");
+			} else {
+				buffer.append("    <td>")
+					.append(MenusDevelTool.formatPosition(action.getPosition()))
+					.append("</td>\n");
+			}
+			if( action.getLabel()==null ) {
+				buffer.append("    <td title=\"Missing label of action\">")
+					.append(error_open)
+					.append("(missing)")
+					.append(error_close)
+					.append("</td>\n");
+			} else {
+				buffer.append("    <td>")
+					.append(action.getLabel())
+					.append("</td>\n");
+			}
+			if( action.getCommand()==null ) {
+				buffer.append("    <td title=\"Missing command of action\">")
+					.append(error_open)
+					.append(action.getCommand())
+					.append(error_close)
+					.append("</td>\n");
+				
+			} else if(!action.getCommand().contains("-") && !action.getCommand().equals(action.getName())) {
+				buffer.append("    <td title=\"Command don't have recomended syntax and differ fron action name\">")
+					.append(warning_open)
+					.append(action.getCommand())
+					.append(warning_close)
+					.append("</td>\n");
+				
+			} else if(!action.getCommand().contains("-") ) {
+				buffer.append("    <td title=\"Command don't have recomended syntax\">")
+					.append(warning_open)
+					.append(action.getCommand())
+					.append(warning_close)
+					.append("</td>\n");
+				
+			} else if(!action.getCommand().equals(action.getName())) {
+				buffer.append("    <td title=\"Command differ fron action name\">")
+					.append(warning_open)
+					.append(action.getCommand())
+					.append(warning_close)
+					.append("</td>\n");
+				
+			} else {
+				buffer.append("    <td>")
+					.append(action.getCommand())
+					.append("</td>\n");
+			}
+			if( action.getIconName()==null ) {
+				buffer.append("    <td title=\"Missing icon name\">")
+					.append(error_open)
+					.append("(missing)")
+					.append(error_close)
+					.append("</td>\n");
+			} else if( action.getIcon()==null ) {
+				buffer.append("    <td title=\"Missing icon\">")
+					.append(error_open)
+					.append(action.getIconName())
+					.append(error_close)
+					.append("</td>\n");
+			} else {
+				buffer.append("    <td>")
+					.append(action.getIconName())
+					.append("</td>\n");
+			}
+			if( action.getTooltip()==null ) {
+				buffer.append("    <td title=\"Missing tooltip\">")
+					.append(error_open)
+					.append(action.getTooltip())
+					.append(error_close)
+					.append("</td>\n");
+				
+			} else {
+				buffer.append("    <td>")
+					.append(action.getTooltip())
+					.append("</td>\n");
+			}
+			if( action.getAccelerator()!=null && action.getKeyStroke()==null ) {
+				buffer.append("    <td title=\"Incorrect syntax of the accelerator key\">")
+					.append(error_open)
+					.append(action.getAccelerator())
+					.append(error_close)
+					.append("</td>\n");
+				
+			} else {
+				buffer.append("    <td>")
+					.append(action.getAccelerator())
+					.append("</td>\n");
+			}
+			buffer.append("  </tr>\n");
+			
+		}
+		buffer.append("</table>\n");
+		buffer.append("</div>\n");
+
+		return buffer.toString();
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/ActionsInfoDevelTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/InfoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/InfoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/InfoPanel.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.develtools;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextPane;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class InfoPanel extends JPanel {
+	private static Logger logger = LoggerFactory.getLogger(InfoPanel.class);
+
+
+	private static final long serialVersionUID = 7164653790859770568L;
+
+	private JButton accept = null;
+	private JButton copy = null;
+	private JTextPane text = null;
+
+	public static void showPanel(String title, WindowManager.MODE mode,
+			String html) {
+		JPanel panel = new InfoPanel(html, null);
+		WindowManager wm = ToolsSwingLocator.getWindowManager();
+		wm.showWindow(panel, title, mode);
+	}
+        
+
+	public static void showPanel(String title, WindowManager.MODE mode,
+			String html, HyperlinkListener hyperlinkListener) {
+		JPanel panel = new InfoPanel(html,hyperlinkListener);
+		WindowManager wm = ToolsSwingLocator.getWindowManager();
+		wm.showWindow(panel, title, mode);
+	}
+        
+
+	public static void save2file(String name, String contents) {
+		File file;
+		try {
+			file = File.createTempFile("gvsig-" + name + "-", ".html");
+			FileWriter fwriter = new FileWriter(file);
+			fwriter.append(contents);
+			fwriter.close();
+		} catch (IOException e) {
+			logger.warn("Can't save contents to temp file gvsig-" + name, e);
+		}
+	}
+        
+	public InfoPanel(final String html, HyperlinkListener hyperlinkListener) {
+		this.setLayout(new BorderLayout());
+		this.setPreferredSize(new Dimension(500, 300));
+		this.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
+
+		text = new JTextPane();
+		text.setContentType("text/html");
+		text.setEditable(false);
+		text.setText(html);
+		text.setCaretPosition(0);
+                if( hyperlinkListener!=null ) {
+                    text.addHyperlinkListener(hyperlinkListener);
+                }
+
+		JScrollPane scrollPane = new JScrollPane(text);
+		scrollPane.setPreferredSize(new Dimension(500, 220));
+
+		accept = new JButton("Accept");
+		accept.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				setVisible(false);
+			}
+		});
+		copy = new JButton("Copy to clipboard");
+		copy.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				ApplicationLocator.getManager().putInClipboard(
+						text.getText());
+			}
+		});
+
+		JPanel buttonsPanel = new JPanel();
+		buttonsPanel.setLayout(new BoxLayout(buttonsPanel,
+				BoxLayout.LINE_AXIS));
+		buttonsPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+		buttonsPanel.add(Box.createHorizontalGlue());
+		buttonsPanel.add(copy);
+		buttonsPanel.add(accept);
+
+		this.add(scrollPane, BorderLayout.CENTER);
+		this.add(buttonsPanel, BorderLayout.SOUTH);
+		this.setVisible(true);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/InfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/PersistenceDevelTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/PersistenceDevelTool.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/PersistenceDevelTool.java	(revision 42196)
@@ -0,0 +1,268 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.develtools;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceFactory;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PersistenceDevelTool {
+	private static Logger logger = LoggerFactory.getLogger(PersistenceDevelTool.class);
+
+	public void showPersistenceFactories() {
+		String html = this.getPersistenceFactories();
+		InfoPanel.save2file("persistenceinfo", html);
+		InfoPanel.showPanel("Persistence factories", WindowManager.MODE.WINDOW, html);
+	}
+	
+
+	public class PersistenceInfo implements Comparable<PersistenceInfo> {
+		PersistenceFactory factory;
+		@SuppressWarnings("rawtypes")
+		Class theClass;
+		DynStruct definition;
+
+		PersistenceInfo(PersistenceFactory factory,
+				@SuppressWarnings("rawtypes") Class theClass,
+				DynStruct definition) {
+			this.factory = factory;
+			this.theClass = theClass;
+			this.definition = definition;
+		}
+
+		String getDefinitionName() {
+			if (definition == null) {
+				return "";
+			}
+			return definition.getFullName();
+		}
+
+		String getDefinitionDescription() {
+			if (definition == null) {
+				return "";
+			}
+			return definition.getDescription();
+		}
+
+		String getClassName() {
+			if (theClass == null) {
+				return "";
+			}
+			return theClass.getName();
+		}
+
+		String getFactoryName() {
+			if (factory == null) {
+				return "";
+			}
+			return factory.getClass().getName();
+		}
+
+		public int compareTo(PersistenceInfo other) {
+			int r = this.factory.getClass().getName()
+					.compareTo(other.factory.getClass().getName());
+			if (r == 0) {
+				return this.theClass.getName().compareTo(
+						other.theClass.getName());
+			}
+			return r;
+		}
+	}
+
+	@SuppressWarnings("rawtypes")
+	public class ClassComparator implements Comparator {
+
+		public int compare(Object o1, Object o2) {
+			if (o1 == null || o2 == null || ((Class) o1).getName() == null) {
+				logger.warn("Esto no deberia estar pasando.");
+				return 0; // FIXME
+			}
+			return ((Class) o1).getName().compareTo(((Class) o2).getName());
+		}
+
+	}
+
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	public String getPersistenceFactories() {
+		int warningsCounter = 0;
+		List<PersistenceInfo> classes = new ArrayList<PersistenceInfo>();
+		Set<Class> referencedClasses = new TreeSet<Class>(new ClassComparator());
+
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+
+		List<PersistenceFactory> factories = manager.getFactories();
+		for (PersistenceFactory factory : factories) {
+			List<Class> theClasses = factory.getManagedClasses();
+			for (Class theClass : theClasses) {
+
+				DynStruct definition = manager.getDefinition(theClass);
+				List defs = factory.getDefinitions();
+				if (definition == null && defs != null && !defs.isEmpty()) {
+					for (int i = 0; i < defs.size(); i++) {
+						definition = (DynStruct) defs.get(i);
+						classes.add(new PersistenceInfo(factory, theClass,
+								definition));
+					}
+				} else {
+					classes.add(new PersistenceInfo(factory, theClass,
+							definition));
+				}
+			}
+		}
+		Collections.sort(classes);
+
+		StringBuffer buffer = new StringBuffer();
+		StringBuffer warnings = new StringBuffer();
+
+		buffer.append("<html>\n");
+		buffer.append("<body>\n");
+		buffer.append("<h2>Supported persistent classes</h2>\n");
+		buffer.append("<br>\n");
+
+		buffer.append("<ol>\n");
+		for (PersistenceInfo classInfo : classes) {
+			StringBuffer classBuffer = new StringBuffer();
+			boolean warning = false;
+			classBuffer.append("  <li>\n    ");
+			classBuffer.append("Class: <i>");
+			classBuffer.append(classInfo.getClassName());
+			classBuffer.append("</i><br>\n    Persistent: <i>");
+			if (Persistent.class.isAssignableFrom(classInfo.theClass)) {
+				classBuffer.append(" yes.");
+			} else {
+				classBuffer.append(" through a factory.");
+			}
+			classBuffer.append("<br>\n    Factory: <i>");
+			classBuffer.append(classInfo.getFactoryName()).append(
+					"</i><br>\n    Definition name: <i>");
+			classBuffer.append(classInfo.getDefinitionName()).append(
+					"</i><br>\n    Description: \n");
+			classBuffer.append(classInfo.getDefinitionDescription()).append(
+					"<br>\n    ");
+			DataTypesManager dataTypesManager = ToolsLocator
+					.getDataTypesManager();
+			DynStruct definition = classInfo.definition;
+			if (definition == null) {
+				classBuffer.append("Definition for ")
+						.append(classInfo.getClassName())
+						.append(" is null.<br>\n    ");
+				warningsCounter++;
+				warning = true;
+			} else {
+				DynField[] fields = definition.getDynFields();
+				for (int i = 0; i < fields.length; i++) {
+					DynField field = fields[i];
+					if (dataTypesManager.isContainer(field.getType())) {
+						if (field.getClassOfItems() == null) {
+							classBuffer
+									.append("Field <b>")
+									.append(field.getName())
+									.append("</b>, container,  can't has class for value of items.<br>\n    ");
+							warningsCounter++;
+							warning = true;
+						} else {
+							classBuffer.append("Field ")
+									.append(field.getName())
+									.append(", container of '")
+									.append(field.getClassOfItems().getName())
+									.append("'.<br>\n    ");
+							referencedClasses.add(field.getClassOfItems());
+						}
+					} else if (dataTypesManager.isObject(field.getType())) {
+						if (field.getClassOfValue() == null) {
+							classBuffer
+									.append("Field <b>")
+									.append(field.getName())
+									.append("</b> can't has class of value.<br>\n    ");
+							warningsCounter++;
+							warning = true;
+						} else {
+							classBuffer.append("Field ")
+									.append(field.getName()).append(" of '")
+									.append(field.getClassOfValue())
+									.append("'.<br>\n    ");
+							referencedClasses.add(field.getClassOfValue());
+						}
+					}
+				}
+			}
+			classBuffer.append("<br>\n  </li>\n");
+			buffer.append(classBuffer);
+			if (warning) {
+				warnings.append(classBuffer);
+			}
+		}
+		buffer.append("</ol>\n");
+		buffer.append("<br>\n");
+		buffer.append("<br>\n");
+
+		buffer.append("<h2>Persistent classes with problems</h2>\n");
+		buffer.append("<ol>\n");
+		buffer.append(warnings);
+		buffer.append("</ol>\n");
+		buffer.append("<br>\n<p>Total warnigs: ").append(warningsCounter)
+				.append("</p>");
+
+		buffer.append("<h2>Not persistents used classes</h2>\n");
+		buffer.append("<ol>\n");
+		for (Class theClass : referencedClasses) {
+			// if( manager.canPersist(theClass) ) {
+			// continue;
+			// }
+			if (Persistent.class.isAssignableFrom(theClass)) {
+				continue;
+			}
+			if (manager.getFactories().get(theClass) != null) {
+				continue;
+			}
+			buffer.append("  <li>\n");
+			buffer.append("    <i>").append(theClass.getName())
+					.append("</i><br>\n");
+			buffer.append("  </li>\n");
+			warningsCounter++;
+		}
+		buffer.append("</ol>\n");
+
+		buffer.append("</body>\n");
+		buffer.append("</html>\n");
+
+		return buffer.toString();
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/PersistenceDevelTool.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/PaletteViewInfoExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/PaletteViewInfoExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/PaletteViewInfoExtension.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowTransform;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+public class PaletteViewInfoExtension extends Extension{
+    private static final Logger logger = LoggerFactory
+            .getLogger(PaletteViewInfoExtension.class);
+    
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+        if (s.equals("window-convert-to-tool")){
+    		IWindow view = PluginServices.getMDIManager().getActiveWindow();
+        	IWindowTransform vt=(IWindowTransform)view;
+        	vt.toPalette();
+            PluginServices.getMainFrame().enableControls();
+        }
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+       return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager().getFocusWindow();
+		if (f == null) {
+			return false;
+		}
+		if (f instanceof IWindowTransform) {
+			IWindowTransform vt=(IWindowTransform)f;
+			if (!vt.isPalette())
+				return true;
+		}
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/PaletteViewInfoExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ProjectExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ProjectExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ProjectExtension.java	(revision 42196)
@@ -0,0 +1,818 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.awt.Component;
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.prefs.Preferences;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.tools.util.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.Launcher.TerminationProcess;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.andami.plugins.status.UnsavedData;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.andami.ui.wizard.UnsavedDataPanel;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.gui.ProjectWindow;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.utils.GenericFileFilter;
+import org.gvsig.utils.save.AfterSavingListener;
+import org.gvsig.utils.save.BeforeSavingListener;
+import org.gvsig.utils.save.SaveEvent;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+
+
+/**
+ * Extension que proporciona controles para crear proyectos nuevos, abrirlos y
+ * guardarlos. Adem�s los tipos de tabla que soporta el proyecto son a�adidos en
+ * esta clase.
+ * 
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class ProjectExtension extends Extension implements IExtensionStatus {
+	private static final Logger LOG = LoggerFactory
+			.getLogger(ProjectExtension.class);
+
+	private static String projectPath = null;
+	private ProjectWindow projectFrame;
+	private Project p;
+	private String lastSavePath;
+	private WindowInfo seedProjectWindow;
+	public static final String PROJECT_FILE_CHOOSER_ID = "PROJECT_FILECHOOSER_ID";
+	/**
+	 * Use UTF-8 for encoding, as it can represent characters from any language.
+	 * 
+	 * Another sensible option would be encoding =
+	 * System.getProperty("file.encoding"); but this would need some extra
+	 * testing.
+	 * 
+	 * @deprecated see PersistentManager
+	 */
+	public static String PROJECTENCODING = "UTF-8";
+
+	private List<BeforeSavingListener> beforeSavingListeners = new ArrayList<BeforeSavingListener>();
+
+	private List<AfterSavingListener> afterSavingListeners = new ArrayList<AfterSavingListener>();
+
+        public void initialize() {
+            initializeDocumentActionsExtensionPoint();
+            registerDocuments();
+            registerIcons();
+            
+            File projectFile = getProjectFileFromArguments();
+            if( projectFile!=null ) {
+                // Posponemos la apertura del proyecto ya que en este momento
+                // puede que no este inicializado algun plugin que precise el
+                // proyecto para poderse cargar.
+                PluginsLocator.getManager().addStartupTask(
+                    "Open project",
+                    new OpenInitialProjectTask(projectFile), true, 1000);
+            }
+        }
+
+	private void registerIcons() {
+		IconThemeHelper.registerIcon("action", "application-project-new", this);
+		IconThemeHelper
+				.registerIcon("action", "application-project-open", this);
+		IconThemeHelper
+				.registerIcon("action", "application-project-save", this);
+		IconThemeHelper.registerIcon("action", "application-project-save-as",
+				this);
+
+		IconThemeHelper.registerIcon("project", "project-icon", this);
+	}
+
+        /**
+         * Returns the file to be opened or null if no parameter
+         * or file does not exist
+         * 
+         * @return
+         */
+        private File getProjectFileFromArguments() {
+            String[] theArgs = PluginServices.getArguments();
+            if( theArgs.length< 3 ) {
+                // application-name and extensions-folder are fixed arguments
+                return null;
+            }
+            String lastArg = theArgs[theArgs.length - 1];
+            if ( StringUtils.isEmpty(lastArg) ) {
+                return null;
+            }
+            if( lastArg.startsWith("-") ) {
+                // Args starts with "-" are flags
+                return null;
+            }
+            if (!lastArg.toLowerCase().endsWith(Project.FILE_EXTENSION.toLowerCase())) {
+                LOG.info("Do not open project file, does not have the expected extension '" + 
+                        Project.FILE_EXTENSION +"' ("+lastArg+").");
+                return null;
+            }
+            File projectFile = new File(lastArg);
+            if ( !projectFile.exists()) {
+                LOG.info("Do not open project file, '" +projectFile.getAbsolutePath() + "' do not exist.");
+                return null;
+            }
+            return projectFile;
+        }   
+
+        private class OpenInitialProjectTask implements Runnable {
+            private File projectFile;
+            public OpenInitialProjectTask(File projectFile) {
+                this.projectFile = projectFile;
+            }
+            public void run() {
+                if (this.projectFile == null) {
+                    return;
+                }
+                ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+                ActionInfo action = actionManager.getAction("application-project-open");
+                action.execute(this.projectFile);
+            }
+        }
+
+	public ProjectWindow getProjectFrame() {
+		if (projectFrame == null) {
+			projectFrame = new ProjectWindow();
+		}
+		return projectFrame;
+	}
+
+	/**
+	 * Muestra la ventana con el gestor de proyectos.
+	 */
+	public void showProjectWindow() {
+		if (seedProjectWindow != null) {
+			if (seedProjectWindow.isClosed()) {
+				// if it was closed, we just don't open the window now
+				seedProjectWindow.setClosed(false);
+				return;
+			}
+			WindowInfo winProps = seedProjectWindow;
+			seedProjectWindow = null;
+			PluginServices.getMDIManager().addWindow(getProjectFrame());
+			PluginServices.getMDIManager().changeWindowInfo(getProjectFrame(),
+					winProps);
+		} else {
+			PluginServices.getMDIManager().addWindow(getProjectFrame());
+		}
+	}
+
+	/**
+	 * Muestra la ventana con el gestor de proyectos, con las propiedades de
+	 * ventana especificadas.
+	 */
+	public void showProjectWindow(WindowInfo wi) {
+		seedProjectWindow = wi;
+		showProjectWindow();
+	}
+
+	/**
+	 * Guarda el proyecto actual en disco.
+	 */
+	private boolean saveProject() {
+		boolean saved = false;
+		// if (p.getPath() == null) {
+		if (projectPath == null) {
+			saved = saveAsProject(null);
+		} else {
+			long t1, t2;
+			t1 = System.currentTimeMillis();
+			saved = writeProject(new File(projectPath), p, false);
+			t2 = System.currentTimeMillis();
+			PluginServices.getLogger().info(
+					"Project saved. " + (t2 - t1) + " miliseconds");
+			getProjectFrame().refreshControls();
+		}
+		return saved;
+	}
+
+	private boolean saveAsProject(File file) {
+		boolean saved = false;
+
+		if (lastSavePath == null) {
+			lastSavePath = projectPath;
+		}
+
+		if (file == null) {
+			Preferences prefs = Preferences.userRoot().node("gvsig.foldering");
+			JFileChooser jfc = new JFileChooser(PROJECT_FILE_CHOOSER_ID,
+					prefs.get("ProjectsFolder", null));
+
+			jfc.setDialogTitle(PluginServices.getText(this, "guardar_proyecto"));
+			
+			GenericFileFilter projExtensionFilter = new GenericFileFilter(
+					Project.FILE_EXTENSION, MessageFormat.format(PluginServices
+							.getText(this, "tipo_fichero_proyecto"),
+							Project.FILE_EXTENSION));
+      jfc.addChoosableFileFilter(projExtensionFilter);
+      jfc.setFileFilter(projExtensionFilter);
+
+			if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) != JFileChooser.APPROVE_OPTION) {
+				return saved;
+			}
+			file = jfc.getSelectedFile();
+		}
+
+		if (!(file.getPath().toLowerCase().endsWith(Project.FILE_EXTENSION
+				.toLowerCase()))) {
+			file = new File(file.getPath() + Project.FILE_EXTENSION);
+		}
+		saved = writeProject(file, p);
+		String filePath = file.getAbsolutePath();
+		lastSavePath = filePath.substring(0,
+				filePath.lastIndexOf(File.separatorChar));
+
+		getProjectFrame().refreshControls();
+		return saved;
+	}
+
+	/**
+	 * Checks whether the project and related unsaved data is modified, and
+	 * allows the user to save it.
+	 * 
+	 * @return true if the data has been correctly saved, false otherwise
+	 */
+	private boolean askSave() {
+		if (p != null && p.hasChanged()) {
+			TerminationProcess process = Launcher.getTerminationProcess();
+			UnsavedDataPanel panel = process.getUnsavedDataPanel();
+			panel.setHeaderText(PluginServices.getText(this,
+					"_Select_resources_to_save_before_closing_current_project"));
+			panel.setAcceptText(
+					PluginServices.getText(this, "save_resources"),
+					PluginServices
+							.getText(this,
+									"Save_the_selected_resources_and_close_current_project"));
+			panel.setCancelText(PluginServices.getText(this, "Cancel"),
+					PluginServices.getText(this, "Return_to_current_project"));
+			int closeCurrProj;
+			try {
+				closeCurrProj = process.manageUnsavedData();
+				if (closeCurrProj == JOptionPane.NO_OPTION) {
+					// the user chose to return to current project
+					return false;
+				}
+			} catch (Exception e) {
+				LOG.error("Some data can not be saved", e);
+			}
+		}
+		return true;
+	}
+
+	public void execute(String command) {
+		this.execute(command, null);
+	}
+        
+	public void execute(String actionCommand, Object[] args) {
+		if (actionCommand.equals("application-project-new")) {
+			if (!askSave()) {
+				return;
+			}
+
+			projectPath = null;
+			PluginServices.getMDIManager().closeAllWindows();
+			setProject(ProjectManager.getInstance().createProject());
+			getProjectFrame().setProject(p);
+			showProjectWindow();
+			PluginServices.getMainFrame().setTitle(
+					PluginServices.getText(this, "sin_titulo"));
+
+                } else if (actionCommand.equals("application-project-open")) {
+			if (!askSave()) {
+				return;
+			}
+                        File projectFile = (File) ArrayUtils.get(args, 0, DataTypes.FILE);
+                        if ( projectFile != null && !projectFile.exists() ) {
+                            LOG.warn("Can't load project '"
+                                    + projectFile.getAbsolutePath()
+                                    + "', file not exist.");
+                            projectFile = null;
+                        }
+
+			if (projectFile == null) {
+				Preferences prefs = Preferences.userRoot().node(
+						"gvsig.foldering");
+				JFileChooser jfc = new JFileChooser(PROJECT_FILE_CHOOSER_ID,
+						prefs.get("ProjectsFolder", null));
+				
+				GenericFileFilter projExtensionFilter = new GenericFileFilter(
+						Project.FILE_EXTENSION, PluginServices.getText(this,
+								"tipo_fichero_proyecto"));
+        jfc.addChoosableFileFilter(projExtensionFilter);
+				jfc.setFileFilter(projExtensionFilter);
+
+				if (jfc.showOpenDialog((Component) PluginServices
+						.getMainFrame()) != JFileChooser.APPROVE_OPTION) {
+					return;
+				}
+				// ProjectDocument.initializeNUMS();
+				
+
+				projectFile = jfc.getSelectedFile();
+			}
+			
+			PluginServices.getMDIManager().closeAllWindows();
+
+			Project o = readProject(projectFile);
+			setPath(projectFile.getAbsolutePath());
+			// lastPath = getPath();
+			if (o != null) {
+				setProject(o);
+			}
+
+			getProjectFrame().setProject(p);
+			PluginServices.getMainFrame().setTitle(projectFile.getName());
+			getProjectFrame().refreshControls();
+
+			// p.restoreWindowProperties();
+
+		} else if (actionCommand.equals("application-project-save")) {
+			saveProject();
+		} else if (actionCommand.equals("application-project-save-as")) {
+			File file = (File) ArrayUtils.get(args, 0, DataTypes.FILE);
+			saveAsProject(file);
+		}
+
+	}
+
+	
+    private void createEmptyProject() {
+        setProject(ProjectManager.getInstance().createProject());
+        p.setName(PluginServices.getText(this, "untitled"));
+        p.setModified(false);
+        PluginServices.getMainFrame().setTitle(
+                PluginServices.getText(this, "sin_titulo"));
+        setProject(p);
+        showProjectWindow();
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#postInitialize()
+     */
+    public void postInitialize() {
+        try {
+            if( !SwingUtilities.isEventDispatchThread() ) {
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    public void run() {
+                        createEmptyProject();
+                    }
+                });
+            } else {
+                createEmptyProject();
+            }
+        } catch (Exception e) {
+            LOG.warn("Can't load initial project.",e);
+        }
+    }	
+	
+	
+	/**
+	 * Escribe el proyecto en XML.
+	 * 
+	 * @param file
+	 *            Fichero.
+	 * @param p
+	 *            Proyecto.
+	 */
+	public boolean writeProject(File file, Project p) {
+		return writeProject(file, p, true);
+	}
+
+	/**
+	 * Escribe el proyecto en XML. Pero permite decidir si se pide confirmaci�n
+	 * para sobreescribir
+	 * 
+	 * @param file
+	 *            Fichero.
+	 * @param p
+	 *            Proyecto.
+	 * @param askConfirmation
+	 *            boolean
+	 */
+	public boolean writeProject(File file, Project p, boolean askConfirmation) {
+		if (askConfirmation && file.exists()) {
+			int resp = JOptionPane.showConfirmDialog((Component) PluginServices
+					.getMainFrame(), PluginServices.getText(this,
+					"fichero_ya_existe_seguro_desea_guardarlo"), PluginServices
+					.getText(this, "guardar"), JOptionPane.YES_NO_OPTION);
+			if (resp != JOptionPane.YES_OPTION) {
+				return false;
+			}
+		}
+		NotificationManager.addInfo(PluginServices.getText(this,
+				"writinng_project") + ": " + file.getName());
+
+		// write it out as XML
+		try {
+			fireBeforeSavingFileEvent(new SaveEvent(this,
+					SaveEvent.BEFORE_SAVING, file));
+			p.saveState(file);
+			fireAfterSavingFileEvent(new SaveEvent(this,
+					SaveEvent.AFTER_SAVING, file));
+
+			PluginServices.getMainFrame().setTitle(file.getName());
+			setPath(file.toString());
+
+		} catch (PersistenceException e) {
+			String messagestack = e.getLocalizedMessageStack();
+			NotificationManager.addError(
+					PluginServices.getText(this, "error_writing_project")
+							+ ": " + file.getName() + "\n" + messagestack, e);
+			return false;
+		} catch (Exception e) {
+			NotificationManager.addError(
+					PluginServices.getText(this, "error_writing_project")
+							+ ": " + file.getName(), e);
+			return false;
+		}
+		NotificationManager.addInfo(PluginServices.getText(this,
+				"wrote_project") + ": " + file.getName());
+		return true;
+	}
+
+	public Project readProject(String path) {
+		Project project = ProjectManager.getInstance().createProject();
+
+		project.loadState(new File(path));
+		return (Project) project;
+	}
+
+	/**
+	 * Lee del XML el proyecto.<br>
+	 * <br>
+	 * 
+	 * Reads the XML of the project.<br>
+	 * It returns a project object holding all needed info that is not linked to
+	 * the Project Dialog. <br>
+	 * In case you want the project to be linked to the window you must set this
+	 * object to the extension:<br>
+	 * 
+	 * <b>Example:</b><br>
+	 * 
+	 * ...<br>
+	 * ...<br>
+	 * Project p = ProjectExtension.readProject(projectFile);<br>
+	 * ProjectExtension.setProject(p); ...<br>
+	 * ...<br>
+	 * 
+	 * @param file
+	 *            Fichero.
+	 * 
+	 * @return Project
+	 * 
+	 */
+	public Project readProject(File file) {
+		Project project = ProjectManager.getInstance().createProject();
+
+		project.loadState(file);
+		return (Project) project;
+	}
+
+	/**
+	 * Devuelve el proyecto.
+	 * 
+	 * @return Proyecto.
+	 */
+	public Project getProject() {
+		return p;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		return true;
+	}
+
+	/**
+	 * Sets the project
+	 * 
+	 * @param p
+	 */
+	public void setProject(Project p) {
+		getProjectFrame().setProject(p);
+		this.p = p;
+	}
+
+	private void registerDocuments() {
+		ViewManager.register();
+	}
+
+	private void initializeDocumentActionsExtensionPoint() {
+		ExtensionPointManager epMan = ToolsLocator.getExtensionPointManager();
+		epMan.add(
+				"DocumentActions_View",
+				"Context menu options of the view document list"
+						+ " in the project window "
+						+ "(register instances of "
+						+ "org.gvsig.app.project.AbstractDocumentContextMenuAction)");
+	}
+
+	public static String getPath() {
+		return projectPath;
+	}
+
+	public static void setPath(String path) {
+		projectPath = path;
+	}
+
+	public IWindow getProjectWindow() {
+		return getProjectFrame();
+	}
+
+	public IExtensionStatus getStatus() {
+		return this;
+	}
+
+	public boolean hasUnsavedData() {
+		return p.hasChanged();
+	}
+
+	public IUnsavedData[] getUnsavedData() {
+		if (hasUnsavedData()) {
+			UnsavedProject data = new UnsavedProject(this);
+			IUnsavedData[] dataArray = { data };
+			return dataArray;
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Implements the IUnsavedData interface to show unsaved projects in the
+	 * Unsavad Data dialog.
+	 * 
+	 * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+	 */
+	public class UnsavedProject extends UnsavedData {
+
+		public UnsavedProject(IExtension extension) {
+			super(extension);
+		}
+
+		public String getDescription() {
+			if (getPath() == null) {
+				return PluginServices.getText(ProjectExtension.this,
+						"Unnamed_new_gvsig_project_");
+			} else {
+				return PluginServices.getText(ProjectExtension.this,
+						"Modified_project_");
+			}
+		}
+
+		public String getResourceName() {
+			if (getPath() == null) {
+				return PluginServices.getText(ProjectExtension.this, "Unnamed");
+			} else {
+				return getPath();
+			}
+
+		}
+
+		public boolean saveData() {
+			return saveProject();
+		}
+
+		public String getIcon() {
+			return "project-icon";
+		}
+	}
+
+	public IMonitorableTask[] getRunningProcesses() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean hasRunningProcesses() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/**
+	 * Adds the specified before saving listener to receive
+	 * "before saving file events" from this component. If l is null, no
+	 * exception is thrown and no action is performed.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @param l
+	 *            the before saving listener.
+	 * @see SaveEvent
+	 * @see BeforeSavingListener
+	 * @see #removeListener(BeforeSavingListener)
+	 * @see #getBeforeSavingListeners
+	 */
+	public synchronized void addListener(BeforeSavingListener l) {
+		if (l == null) {
+			return;
+		}
+		if (!this.beforeSavingListeners.contains(l)) {
+			this.beforeSavingListeners.add(l);
+		}
+	}
+
+	/**
+	 * Adds the specified after saving listener to receive
+	 * "after saving file events" from this component. If l is null, no
+	 * exception is thrown and no action is performed.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @param l
+	 *            the after saving listener.
+	 * @see SaveEvent
+	 * @see AfterSavingListener
+	 * @see #removeListener(AfterSavingListener)
+	 * @see #getAfterSavingListeners()
+	 */
+	public synchronized void addListener(AfterSavingListener l) {
+		if (l == null) {
+			return;
+		}
+
+		if (!this.afterSavingListeners.contains(l)) {
+			this.afterSavingListeners.add(l);
+		}
+
+	}
+
+	/**
+	 * Returns an array of all the before saving listeners registered on this
+	 * component.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @return all of this component's <code>BeforeSavingListener</code>s or an
+	 *         empty array if no key listeners are currently registered
+	 * 
+	 * @see #addBeforeSavingListener(BeforeSavingListener)
+	 * @see #removeBeforeSavingListener(BeforeSavingListener)
+	 */
+	public synchronized BeforeSavingListener[] getBeforeSavingListeners() {
+		return this.beforeSavingListeners
+				.toArray(new BeforeSavingListener[] {});
+	}
+
+	/**
+	 * Returns an array of all the after saving listeners registered on this
+	 * component.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @return all of this component's <code>AfterSavingListener</code>s or an
+	 *         empty array if no key listeners are currently registered
+	 * 
+	 * @see #addAfterSavingListener(AfterSavingListener)
+	 * @see #removeAfterSavingListener
+	 */
+	public synchronized AfterSavingListener[] getAfterSavingListeners() {
+		return this.afterSavingListeners.toArray(new AfterSavingListener[] {});
+
+	}
+
+	/**
+	 * Removes the specified before saving listener so that it no longer
+	 * receives save file events from this component. This method performs no
+	 * function, nor does it throw an exception, if the listener specified by
+	 * the argument was not previously added to this component. If listener
+	 * <code>l</code> is <code>null</code>, no exception is thrown and no action
+	 * is performed.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @param l
+	 *            the before saving listener
+	 * @see SaveEvent
+	 * @see BeforeSavingListener
+	 * @see #addListener(BeforeSavingListener)
+	 * @see #getBeforeSavingListeners()
+	 */
+	public synchronized void removeListener(BeforeSavingListener l) {
+		if (l == null) {
+			return;
+		}
+
+		this.beforeSavingListeners.remove(l);
+	}
+
+	/**
+	 * Removes the specified after saving listener so that it no longer receives
+	 * save file events from this component. This method performs no function,
+	 * nor does it throw an exception, if the listener specified by the argument
+	 * was not previously added to this component. If listener <code>l</code> is
+	 * <code>null</code>, no exception is thrown and no action is performed.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @param l
+	 *            the after saving listener
+	 * @see SaveEvent
+	 * @see AfterSavingListener
+	 * @see #addListener(AfterSavingListener)
+	 * @see #getAfterSavingListeners()
+	 */
+	public synchronized void removeListener(AfterSavingListener l) {
+		if (l == null) {
+			return;
+		}
+
+		this.afterSavingListeners.remove(l);
+	}
+
+	/**
+	 * Reports a before saving file event.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @param evt
+	 *            the before saving file event
+	 */
+	protected void fireBeforeSavingFileEvent(SaveEvent evt) {
+		if ((evt.getID() != SaveEvent.BEFORE_SAVING) || (evt.getFile() == null)) {
+			return;
+		}
+
+		Iterator<BeforeSavingListener> iter = this.beforeSavingListeners
+				.iterator();
+
+		while (iter.hasNext()) {
+			iter.next().beforeSaving(evt);
+		}
+	}
+
+	/**
+	 * Reports a after saving file event.
+	 * 
+	 * @author Pablo Piqueras Bartolom� <pablo.piqueras@iver.es>
+	 * 
+	 * @param evt
+	 *            the after saving file event
+	 */
+	protected void fireAfterSavingFileEvent(SaveEvent evt) {
+		if ((evt.getID() != SaveEvent.AFTER_SAVING) || (evt.getFile() == null)) {
+			return;
+		}
+		Iterator<AfterSavingListener> iter = this.afterSavingListeners
+				.iterator();
+
+		while (iter.hasNext()) {
+			iter.next().afterSaving(evt);
+		}
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ProjectExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BrowseSymbolsExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BrowseSymbolsExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BrowseSymbolsExtension.java	(revision 42196)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.styling.SymbolSelector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BrowseSymbolsExtension extends Extension {
+
+    @SuppressWarnings("unused")
+    private static Logger logger = LoggerFactory.getLogger(BrowseSymbolsExtension.class);
+
+    public void initialize() {
+      // Do nothing
+    }
+    public void execute(String actionCommand) {
+      ApplicationManager application = ApplicationLocator.getManager();
+
+      if("tools-symbology-browse-symbols".equalsIgnoreCase(actionCommand)) {
+    	  application.getUIManager().addWindow(SymbolSelector.createSymbolBrowser());
+      }
+    }
+    
+    public boolean isEnabled() {
+      return true;
+    }
+    
+    public boolean isVisible() {
+      return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BrowseSymbolsExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayerDropingFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayerDropingFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayerDropingFile.java	(revision 42196)
@@ -0,0 +1,120 @@
+
+package org.gvsig.app.extension;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.io.File;
+import java.util.List;
+import javax.swing.TransferHandler;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.app.project.documents.view.toc.DnDJTree;
+import org.gvsig.app.project.documents.view.toc.TocItemBranch;
+import org.gvsig.app.project.documents.view.toc.gui.TOC;
+import org.gvsig.tools.observer.Notification;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class AddLayerDropingFile extends Extension implements Runnable, Observer, DropTargetListener  {
+
+    private static final Logger logger = LoggerFactory.getLogger(AddLayerDropingFile.class);
+            
+    private ActionInfo addLayerAction = null;
+    
+    public void initialize() {
+    }
+
+    public void execute(String actionCommand) {
+    }
+
+    public void postInitialize() {
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        pluginManager.addStartupTask("RegisterDropFilesOnTheView", this, true, 1000);    
+    }
+
+    
+    public boolean isEnabled() {
+        return false;
+    }
+
+    public boolean isVisible() {
+        return false;
+    }
+
+    public void run() {
+        ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+        addLayerAction = actionManager.getAction("view-layer-add");
+        if( addLayerAction==null ) {
+            logger.warn("can't locate addLayer action, don't enable drop of files in the view.");
+            return;
+        }
+        ApplicationManager application = ApplicationLocator.getManager();
+        ProjectManager pm = application.getProjectManager();
+        ViewManager viewManager = (ViewManager) pm.getDocumentManager(ViewManager.TYPENAME);
+        viewManager.addObserver(this);
+        
+    }
+
+    public void update(Observable observable, Object notificationArg) {
+        Notification notification = (Notification)notificationArg;
+        if( notification.isOfType(DocumentManager.NOTIFY_AFTER_GETMAINWINDOW) ) {
+            enableDragInView((IView) notification.getValue());
+        }
+    }
+    
+    private void enableDragInView(IView view) {
+        DropTarget dt = new DropTarget(view.getMapControl(),this);
+    }
+
+    public void dragEnter(DropTargetDragEvent dtde) {
+    }
+
+    public void dragOver(DropTargetDragEvent dtde) {
+    }
+
+    public void dropActionChanged(DropTargetDragEvent dtde) {
+    }
+
+    public void dragExit(DropTargetEvent dte) {
+    }
+
+    public void drop(DropTargetDropEvent dtde) {
+        Transferable tr = dtde.getTransferable();
+        if (!tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+		dtde.rejectDrop();
+                return;
+	}
+        dtde.acceptDrop(dtde.getDropAction());
+        List<File> fileNames;
+        try {
+            fileNames = (List<File>)tr.getTransferData(DataFlavor.javaFileListFlavor);
+        } catch (Exception e) { 
+            try {
+                dtde.rejectDrop();
+            } catch(Exception ex) {
+                
+            }
+            logger.warn("Can't retrieve droped files.",e);
+            return; 
+        }
+        dtde.dropComplete(true);
+        addLayerAction.execute(fileNames);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewInvertSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewInvertSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewInvertSelection.java	(revision 42196)
@@ -0,0 +1,112 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extension that handles the selection tools, selection tools have sense on
+ * vectorial layers only.
+ *
+ */
+public class ViewInvertSelection extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(ViewInvertSelection.class);
+    private DefaultViewPanel vista;
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "selection-reverse", this);
+    }
+
+    public void postInitialize() {
+    }
+
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return ;
+        }
+        ViewDocument document = view.getViewDocument();
+
+        MapContext mapa = document.getMapContext();
+
+        if (actionCommand.equalsIgnoreCase("selection-reverse-view")) {
+            FLayer[] actives = mapa.getLayers().getActives();
+            for (FLayer lyr : actives) {
+                if (lyr.isAvailable() && lyr instanceof SingleLayer) {
+                    SingleLayer lyrSingle = (SingleLayer) lyr;
+                    DataStore ds = lyrSingle.getDataStore();
+                    if (ds instanceof FeatureStore) {
+                        try {
+                            ((FeatureStore) ds).getFeatureSelection().reverse();
+                            document.setModified(true);
+                        } catch (DataException e) {
+                            NotificationManager.addError(e);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasActiveVectorLayers();
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasVectorLayers();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewInvertSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitialWarningExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitialWarningExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitialWarningExtension.java	(revision 42196)
@@ -0,0 +1,193 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+/* CVS MESSAGES:
+*
+* $Id: InitialWarningExtension.java 39337 2012-11-26 09:59:22Z jldominguez $
+* $Log$
+* Revision 1.4  2006-10-02 13:52:34  jaume
+* organize impots
+*
+* Revision 1.3  2006/08/29 07:56:27  cesar
+* Rename the *View* family of classes to *Window* (ie: SingletonView to SingletonWindow, ViewInfo to WindowInfo, etc)
+*
+* Revision 1.2  2006/08/29 07:13:53  cesar
+* Rename class com.iver.andami.ui.mdiManager.View to com.iver.andami.ui.mdiManager.IWindow
+*
+* Revision 1.1  2006/05/25 16:27:21  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.app.extension;
+
+import java.awt.Color;
+import java.awt.Window;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JWindow;
+import javax.swing.border.TitledBorder;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+public class InitialWarningExtension extends Extension {
+//	public static Preferences fPrefs = Preferences.userRoot().node( "gvsig.initial_warkning" );
+//	private boolean show = fPrefs.getBoolean( "show_panel", true);
+	private DlgWaring dlgWarning;
+    /**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return false;
+	}
+
+	/**
+	 * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+
+	    if (isEnabled() && isVisible()) {
+			dlgWarning = new DlgWaring();
+			dlgWarning.setText(PluginServices.getText(this, "initial_warning"));
+			dlgWarning.setVisible(true);
+			// PluginServices.getMDIManager().addWindow(dlgWarning);
+	    }
+
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+
+	}
+
+	private class DlgWaring extends JWindow{
+
+		private JButton btnOk = null;
+		private JCheckBox chkBoxShowAgain = null;
+		private JLabel lblText = null;
+		private JPanel panel=null;
+		private JPanel panel2;
+		/**
+		 * This is the default constructor
+		 */
+		public DlgWaring() {
+			super((Window)PluginServices.getMainFrame());
+			Window window=(Window)PluginServices.getMainFrame();
+			setLocation(window.getWidth()/2+window.getX()-150,window.getHeight()/2+window.getY()-150);
+			initialize();
+			this.setAlwaysOnTop(true);
+		}
+
+		public void setText(String string) {
+			lblText.setText(string);
+		}
+
+		/**
+		 * This method initializes this
+		 *
+		 * @return void
+		 */
+		private void initialize() {
+			panel=new JPanel();
+			panel.setBackground(Color.black);
+			panel.setLayout(null);
+			panel.setBounds(0,0,300,300);
+			panel2=new JPanel();
+			panel2.setLayout(null);
+			panel2.setBounds(2,2,298,298);
+			lblText = new JLabel();
+			lblText.setBounds(15, 15, 271, 200);
+			lblText.setText("JLabel");
+			lblText.setBorder(new TitledBorder(PluginServices.getText(this, "warning")));
+			panel2.add(lblText);
+			panel2.setSize((int)(panel.getSize().getWidth()-4),(int)(panel.getSize().getHeight()-4));
+			panel.add(panel2);
+			this.setLayout(null);
+			this.setSize(300, 300);
+			this.add(getBtnOk(), null);
+//			this.add(getChkBoxShowAgain(), null);
+			this.add(panel, null);
+		}
+
+		/**
+		 * This method initializes btnOk
+		 *
+		 * @return javax.swing.JButton
+		 */
+		private JButton getBtnOk() {
+			if (btnOk == null) {
+				btnOk = new JButton();
+				btnOk.setBounds(100, 250, 100, 20);
+				btnOk.setText(PluginServices.getText(this, "aceptar"));
+				btnOk.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						dlgWarning.setVisible(false);
+						dlgWarning.dispose();
+						//						PluginServices.getMDIManager().closeWindow(dlgWarning);
+					}
+				});
+			}
+			return btnOk;
+		}
+
+		/**
+		 * This method initializes chkBoxShowAgain
+		 *
+		 * @return javax.swing.JCheckBox
+		 */
+//		private JCheckBox getChkBoxShowAgain() {
+//			if (chkBoxShowAgain == null) {
+//				chkBoxShowAgain = new JCheckBox();
+//				chkBoxShowAgain.setBounds(44, 116, 241, 21);
+//				chkBoxShowAgain.setSelected(true);
+//				chkBoxShowAgain.setText(PluginServices.getText(this, "show_this_dialog_next_startup"));
+//			}
+//			return chkBoxShowAgain;
+//		}
+
+		public WindowInfo getWindowInfo() {
+			WindowInfo vi = new WindowInfo(WindowInfo.MODALDIALOG);
+			vi.setWidth(300+8);
+			vi.setHeight(250);
+			vi.setTitle(PluginServices.getText(this, "warning"));
+			return vi;
+		}
+
+	}  //  @jve:decl-index=0:visual-constraint="10,10"
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitialWarningExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/CopyFeaturesToClipboardExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/CopyFeaturesToClipboardExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/CopyFeaturesToClipboardExtension.java	(revision 42196)
@@ -0,0 +1,172 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.clipboard;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.extension.clipboard.util.FeatureTextUtils;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.i18n.Messages;
+
+
+public class CopyFeaturesToClipboardExtension extends Extension {
+
+    private static Logger logger = LoggerFactory.getLogger(
+    		CopyFeaturesToClipboardExtension.class);
+
+	public void initialize() {
+
+		IconThemeHelper.registerIcon("action", "layer-modify-clipboard-copy", this);
+	}
+
+	public void execute(String actionCommand) {
+
+		if (actionCommand.compareToIgnoreCase("layer-modify-clipboard-copy") != 0) {
+			return;
+		}
+
+		IWindow actw = actWin();
+
+		if (actw instanceof IView) {
+
+			IView vw = (IView) actw;
+			FLayer[] act_lyr = vw.getMapControl().getMapContext().getLayers().getActives();
+			if (act_lyr == null || act_lyr.length != 1
+					|| !(act_lyr[0] instanceof FLyrVect)) {
+
+			} else {
+
+				int usr_opt = JOptionPane.showConfirmDialog(
+						ApplicationLocator.getManager().getRootComponent(),
+						Messages.getText("_Include_alphanumeric_attributes_Question"),
+						Messages.getText("_Copy_selected_features_to_clipboard"),
+						JOptionPane.YES_NO_CANCEL_OPTION,
+						JOptionPane.QUESTION_MESSAGE);
+
+
+				if (usr_opt == JOptionPane.CANCEL_OPTION) {
+					return;
+				}
+
+				FLyrVect vect = (FLyrVect) act_lyr[0];
+				FeatureSelection sele = null;
+				FeatureStore fsto = null;
+				try {
+					fsto = vect.getFeatureStore();
+					sele = (FeatureSelection) fsto.getSelection();
+
+					StringBuilder strb = FeatureTextUtils.toString(
+							sele, fsto.getDefaultFeatureType(),
+							usr_opt == JOptionPane.YES_OPTION);
+					/*
+					 * Put selected features in clipboard.
+					 */
+					PluginServices.putInClipboard(strb.toString());
+
+					JOptionPane.showMessageDialog(
+							ApplicationLocator.getManager().getRootComponent(),
+							Messages.getText("_Number_of_features_copied_to_clipboard")
+							+ ":   " + sele.getSize() + "    ",
+							Messages.getText("_Copy_selected_features_to_clipboard"),
+							JOptionPane.INFORMATION_MESSAGE);
+
+				} catch (DataException e) {
+					logger.error("While getting store and selection. ", e);
+				}
+			}
+		}
+
+	}
+
+	public boolean isEnabled() {
+
+		/*
+		 * It's enabled if there is exactly one vector layer in the active view
+		 * and it has a selection
+		 */
+
+		IWindow actw = actWin();
+
+		if (actw instanceof IView) {
+
+			IView vw = (IView) actw;
+			FLayer[] act_lyr = vw.getMapControl().getMapContext().getLayers().getActives();
+			if (act_lyr == null || act_lyr.length != 1
+					|| !(act_lyr[0] instanceof FLyrVect)) {
+				return false;
+
+			} else {
+				FLyrVect vect = (FLyrVect) act_lyr[0];
+				if (!vect.isAvailable()) {
+				    /*
+				     * This can happen when opening a persisted project
+				     * and there is a "slow" layer (GeoDB)
+				     */
+				    return false;
+				}
+				FeatureSelection sele = null;
+				long sele_count = 0;
+				try {
+					sele = (FeatureSelection) vect.getFeatureStore().getSelection();
+					sele_count = sele.getSize();
+				} catch (DataException e) {
+					logger.error("While getting store. ", e);
+					return false;
+				}
+				return sele_count > 0;
+			}
+
+		} else {
+			return false;
+		}
+	}
+
+	public boolean isVisible() {
+
+		return actWin() instanceof IView;
+	}
+
+	/**
+	 * Gets active window
+	 * @return
+	 */
+	private IWindow actWin() {
+		return ApplicationLocator.getManager().getActiveWindow();
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/PasteFeaturesFromClipboardExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/PasteFeaturesFromClipboardExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/PasteFeaturesFromClipboardExtension.java	(revision 42196)
@@ -0,0 +1,359 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.clipboard;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.extension.clipboard.util.FeatureTextUtils;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.i18n.Messages;
+
+
+public class PasteFeaturesFromClipboardExtension extends Extension {
+
+    private static Logger logger = LoggerFactory.getLogger(
+    		PasteFeaturesFromClipboardExtension.class);
+
+	public void initialize() {
+
+		IconThemeHelper.registerIcon("action", "layer-modify-clipboard-paste", this);
+	}
+
+	public void execute(String actionCommand) {
+
+		if (actionCommand.compareToIgnoreCase("layer-modify-clipboard-paste") != 0) {
+			return;
+		}
+
+		IWindow actw = actWin();
+
+		if (actw instanceof IView) {
+
+			IView vw = (IView) actw;
+			FLayer[] act_lyr = vw.getMapControl().getMapContext().getLayers().getActives();
+			if (act_lyr == null || act_lyr.length != 1
+					|| !(act_lyr[0] instanceof FLyrVect)) {
+
+			} else {
+				FLyrVect vect = (FLyrVect) act_lyr[0];
+				if (vect.isEditing()) {
+
+					// Discard if no text data or empty:
+					if (!FeatureTextUtils.textInClipboard()) {
+						JOptionPane.showMessageDialog(
+								ApplicationLocator.getManager().getRootComponent(),
+								Messages.getText("_Clipboard_has_no_valid_info_or_is_empty"),
+								Messages.getText("_Pasting_features_from_clipboard"),
+								JOptionPane.INFORMATION_MESSAGE);
+						return;
+					}
+					String clipb = PluginServices.getFromClipboard();
+					if (clipb == null || clipb.length() == 0) {
+						JOptionPane.showMessageDialog(
+								ApplicationLocator.getManager().getRootComponent(),
+								Messages.getText("_Clipboard_has_no_valid_info_or_is_empty"),
+								Messages.getText("_Pasting_features_from_clipboard"),
+								JOptionPane.INFORMATION_MESSAGE);
+						return;
+					}
+
+					// ============================================
+					// ============================================
+
+					FeatureStore fsto = vect.getFeatureStore();
+					List<EditableFeature> try_feats = FeatureTextUtils.fromString(clipb, fsto);
+					/*
+					 * This method will check geometry type
+					 */
+					List<EditableFeature> added_feats = addFeatures(fsto, try_feats);
+
+					int n_orig = try_feats.size();
+					int n_added = added_feats.size();
+					int n_disc = n_orig - n_added;
+
+					String msg = "";
+
+					if (n_orig == 0) {
+						msg = Messages.getText("_No_features_found_in_clipboard");
+					} else {
+						msg = Messages.getText("_Number_of_features_pasted_from_clipboard");
+						msg = msg + ":   " + n_added + "    \n";
+						msg = msg + Messages.getText("_Number_of_features_from_clipboard_discarded_due_to_bad_format");
+						msg = msg + ":   " + n_disc + "    ";
+					}
+
+
+					if (n_added > 0) {
+
+						msg = msg + "\n\n" +
+								Messages.getText("_Zoom_to_added_features_question");
+						int user_opt = JOptionPane.showConfirmDialog(
+								ApplicationLocator.getManager().getRootComponent(),
+								msg,
+								Messages.getText("_Pasting_features_from_clipboard"),
+								JOptionPane.YES_NO_OPTION);
+						if (user_opt == JOptionPane.YES_OPTION) {
+							try {
+								zoomToExtent(added_feats,
+										vw.getMapControl().getMapContext());
+							} catch (Exception ex) {
+								JOptionPane.showMessageDialog(
+										ApplicationLocator.getManager().getRootComponent(),
+										Messages.getText("_Unable_to_zoom_to_features")
+										+ ": " + ex.getMessage(),
+										Messages.getText("_Pasting_features_from_clipboard"),
+										JOptionPane.ERROR_MESSAGE);
+							}
+
+						} else {
+							// Repaint view
+							vw.getMapControl().getMapContext().invalidate();
+						}
+
+					} else {
+						JOptionPane.showMessageDialog(
+								ApplicationLocator.getManager().getRootComponent(),
+								msg,
+								Messages.getText("_Pasting_features_from_clipboard"),
+								JOptionPane.INFORMATION_MESSAGE);
+					}
+				}
+			}
+
+		}
+
+
+	}
+
+	private void zoomToExtent(
+			List<EditableFeature> added_feats,
+			MapContext mco) throws Exception {
+
+		Envelope env = null;
+		Envelope itemenv = null;
+		Iterator<EditableFeature> iter = added_feats.iterator();
+		Feature feat = null;
+		while (iter.hasNext()) {
+			feat = (Feature) iter.next();
+			itemenv = feat.getDefaultGeometry().getEnvelope();
+			if (itemenv != null) {
+				if (env == null) {
+					itemenv = (Envelope) itemenv.clone();
+					env = itemenv;
+				} else {
+					env.add(itemenv);
+				}
+			}
+		}
+		if (env == null) {
+			throw new GeometryException(new Exception("All envelopes are null."));
+		}
+		mco.getViewPort().setEnvelope(env);
+	}
+
+	/**
+	 * Add features if geometry is of right type.
+	 * Returns number of features added.
+	 * If returned number is negative, it means there were errors.
+	 * Example: -5 means 5 were added and there were errors with other geometries.
+	 *
+	 * @param fsto
+	 * @param add_feats
+	 * @throws DataException
+	 */
+	private List<EditableFeature> addFeatures(
+			FeatureStore fsto,
+			List<EditableFeature> add_feats) {
+
+		List<EditableFeature> really_added = new ArrayList<EditableFeature>();
+
+		Iterator<EditableFeature> iter = add_feats.iterator();
+		EditableFeature item = null;
+		Geometry geom = null;
+		GeometryType good_gt = null;
+		int good_dimensions = 0;
+
+		try {
+			good_gt = fsto.getDefaultFeatureType().getDefaultGeometryAttribute().getGeomType();
+			good_dimensions = FeatureTextUtils.geoman().create(good_gt).getDimension();
+		} catch (Exception e) {
+			logger.error("While getting geom type.", e);
+			return really_added;
+		}
+
+		while (iter.hasNext()) {
+			item = iter.next();
+			geom = item.getDefaultGeometry();
+			/*
+			 * Same number of dimensions and compatible types
+			 */
+			if ((geom.getDimension() == good_dimensions)
+					&&
+					(geom.getGeometryType().isTypeOf(good_gt)
+					|| simpleTypeOf(geom.getGeometryType(), good_gt))
+					) {
+				try {
+					fsto.insert(item);
+					really_added.add(item);
+				} catch (DataException e) {
+					/*
+					 * This error will cause that "really_added"
+					 * will be shorter than "add_feats" and the user
+					 * must be notified of that when the process ends.
+					 */
+					logger.info("Error while inserting feature from clipboard: " + e.getMessage());
+				}
+			}
+		}
+
+		return really_added;
+	}
+
+	private boolean simpleTypeOf(GeometryType simplet, GeometryType multit) {
+
+		return (multit.getType() == Geometry.TYPES.MULTISURFACE
+				&& simplet.isTypeOf(Geometry.TYPES.SURFACE))
+				||
+				(multit.getType() == Geometry.TYPES.MULTICURVE
+				&& simplet.isTypeOf(Geometry.TYPES.CURVE))
+				||
+				(multit.getType() == Geometry.TYPES.MULTIPOINT
+				&& simplet.getType() == Geometry.TYPES.POINT);
+	}
+
+	public boolean isEnabled() {
+
+		/*
+		 * I think it's better to make it enabled always when the active layer
+		 * is in editing mode, so it's not necessary to refresh the state of the button
+		 * (with a zoom or changing window, etc). The content of the clipboard can change
+		 * and gvSIG does not know. Of course, if the user clicks the button,
+		 * a dialog will tell if the clipboard is empty or has invalid data.
+		 */
+		return isVisible();
+
+		/*
+		 * Discarded by now:
+		 *
+		 * It's enabled if the active layer is a vector layer
+		 * in editing mode and the clipboard seems to have valid features
+		 *
+		IWindow actw = actWin();
+		if (actw instanceof IView) {
+
+			IView vw = (IView) actw;
+			FLayer[] act_lyr = vw.getMapControl().getMapContext().getLayers().getActives();
+			if (act_lyr == null || act_lyr.length != 1
+					|| !(act_lyr[0] instanceof FLyrVect)) {
+				return false;
+
+			} else {
+				FLyrVect vect = (FLyrVect) act_lyr[0];
+				if (vect.isEditing()) {
+					return FeatureTextUtils.clipboardSeemsToHaveValidFeatures();
+				} else {
+					return false;
+				}
+			}
+
+		} else {
+			return false;
+		}
+		*/
+	}
+
+
+	public boolean isVisible() {
+
+        org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+        .getActiveWindow();
+        if (f == null)
+            return false;
+
+        if (f instanceof DefaultViewPanel) {
+            DefaultViewPanel vista = (DefaultViewPanel) f;
+            ViewDocument model = vista.getViewDocument();
+            MapContext mapa = model.getMapContext();
+
+            FLayers capas = mapa.getLayers();
+
+            int numActiveVectorial = 0;
+            int numActiveVectorialEditable = 0;
+
+            LayersIterator iter = new LayersIterator(capas);
+
+            FLayer capa;
+            while (iter.hasNext()) {
+                capa = iter.nextLayer();
+                if (capa instanceof FLyrVect &&
+                        capa.isActive() && capa.isAvailable()) {
+                    numActiveVectorial++;
+                    if (capa.isEditing())
+                        numActiveVectorialEditable++;
+                }
+
+            }
+
+            if (numActiveVectorialEditable == 1 && numActiveVectorial == 1)
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Gets active window
+	 * @return
+	 */
+	private IWindow actWin() {
+		return ApplicationLocator.getManager().getActiveWindow();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/util/FeatureTextUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/util/FeatureTextUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/util/FeatureTextUtils.java	(revision 42196)
@@ -0,0 +1,282 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension.clipboard.util;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FeatureTextUtils {
+
+	private static final Logger logger = LoggerFactory.getLogger(FeatureTextUtils.class);
+
+	/**
+	 * The format of the clipboard content will be:
+	 *
+	 * <FEATURE><CLIPBOARD_SEPARATOR_1><FEATURE><CLIPBOARD_SEPARATOR_1><FEATURE>...
+	 *
+	 * <FEATURE> = <WKT><CLIPBOARD_SEPARATOR_2><FIELD><CLIPBOARD_SEPARATOR_2><FIELD>...
+	 *
+	 * <FIELD> = <NAME><CLIPBOARD_SEPARATOR_3><TYPE><CLIPBOARD_SEPARATOR_3><VALUE>
+	 *
+	 *  Fields are optional, so a WKT string alone will also be valid.
+	 */
+	public static final String CLIPBOARD_SEPARATOR_1 = "_GVSIGCOPYPASTESEPARATOR1_";
+	public static final String CLIPBOARD_SEPARATOR_2 = "_GVSIGCOPYPASTESEPARATOR2_";
+	public static final String CLIPBOARD_SEPARATOR_3 = "_GVSIGCOPYPASTESEPARATOR3_";
+
+	private static GeometryManager gm = null;
+	private static GeometryOperationContext wktctxt = new GeometryOperationContext();
+
+
+	public static GeometryManager geoman() {
+		if (gm == null) {
+			gm = GeometryLocator.getGeometryManager();
+		}
+		return gm;
+	}
+
+	public static boolean clipboardSeemsToHaveValidFeatures() {
+
+		if (!textInClipboard()) {
+			return false;
+		}
+
+		String clipb = PluginServices.getFromClipboard();
+
+		if (clipb == null || clipb.length() < 5) {
+			return false;
+		}
+
+		String[] feats = clipb.split(CLIPBOARD_SEPARATOR_1);
+		String[] feat_parts = feats[0].split(CLIPBOARD_SEPARATOR_2);
+
+		if (feat_parts[0].length() > 10000) {
+			logger.info("Clipboard: First part (wkt) of feature description is long ("
+					+ feat_parts[0].length() +
+					"). Not parsed. Returned 'true' meaning 'perhaps'.");
+			/*
+			 * 10000 characters is about 400 vertices or more.
+			 * This seems to be a large geometry and we are not
+			 * going to parse it here because this method must be fast.
+			 * We will say "true" so the user will try to paste it, and perhaps it will
+			 * not work (a dialog message will show, for example)
+			 */
+			return true;
+		}
+
+		Object geom_obj = null;
+
+		try {
+			geom_obj = geoman().createFrom(feat_parts[0]);
+		} catch (Exception e) {
+			logger.info("Unable to parse short WKT: " + e.getMessage());
+			/*
+			 * We discard the content of the clipboard after trying to parse only the
+			 * first geometry (perhaps there were other geometries, but this method
+			 * has to be very fast)
+			 */
+			return false;
+		}
+
+		return geom_obj instanceof Geometry;
+	}
+
+	public static boolean textInClipboard() {
+
+		return Toolkit.getDefaultToolkit().getSystemClipboard(
+				).isDataFlavorAvailable(DataFlavor.stringFlavor);
+	}
+
+	public static StringBuilder toString(
+			FeatureSet fset,
+			FeatureType fty,
+			boolean include_atts) throws DataException {
+
+		StringBuilder strb = new StringBuilder();
+		Feature feat = null;
+		DisposableIterator diter = fset.fastIterator();
+		while (diter.hasNext()) {
+			feat = (Feature) diter.next();
+			if (strb.length() > 0) {
+				strb.append(CLIPBOARD_SEPARATOR_1);
+			}
+			try {
+				appendFeatureText(strb, feat, fty, include_atts);
+			} catch (Exception e) {
+				logger.info("One of the features in clipboard was not valid.", e);
+			}
+		}
+		diter.dispose();
+		return strb;
+	}
+
+	private static void appendFeatureText(
+			StringBuilder strb,
+			Feature feat,
+			FeatureType fty,
+			boolean include_atts) throws Exception {
+
+		String aux = feat.getDefaultGeometry().convertToWKT();
+		strb.append(aux);
+
+		if (!include_atts) {
+			return;
+		}
+
+		FeatureAttributeDescriptor[] atts = fty.getAttributeDescriptors();
+		for (int i=0; i<atts.length; i++) {
+			if (atts[i].getType() != DataTypes.GEOMETRY) {
+				strb.append(CLIPBOARD_SEPARATOR_2);
+				appendAttribute(strb, feat, atts[i].getName(), atts[i].getType());
+			}
+		}
+
+	}
+
+	private static void appendAttribute(
+			StringBuilder strb,
+			Feature feat,
+			String name,
+			int type) {
+
+		strb.append(name);
+		strb.append(CLIPBOARD_SEPARATOR_3);
+		strb.append(type);
+		strb.append(CLIPBOARD_SEPARATOR_3);
+		strb.append(feat.get(name).toString());
+	}
+
+	public static List<EditableFeature> fromString(String str, FeatureStore fsto) {
+
+		List<EditableFeature> resp = new ArrayList<EditableFeature>();
+
+		if (!textInClipboard()) {
+			return resp;
+		}
+
+		if (str == null || str.length() < 5) {
+			return resp;
+		}
+
+		String[] feats = str.split(CLIPBOARD_SEPARATOR_1);
+		EditableFeature item = null;
+
+		for (int i=0; i<feats.length; i++) {
+			item = stringToFeature(feats[i], fsto);
+			if (item != null) {
+				resp.add(item);
+			}
+		}
+		return resp;
+	}
+
+	/**
+	 * Returns null if feature was not created
+	 *
+	 * @param str
+	 * @param fsto
+	 * @return
+	 */
+	private static EditableFeature stringToFeature(String str, FeatureStore fsto) {
+
+		String[] feat_parts = str.split(CLIPBOARD_SEPARATOR_2);
+		Object geom_obj = null;
+		try {
+			geom_obj = geoman().createFrom(feat_parts[0]);
+		} catch (Exception e) {
+			logger.info("Unable to parse WKT: " + e.getMessage());
+			return null;
+		}
+
+		if (!(geom_obj instanceof Geometry)) {
+			// Parse issue, no feature
+			return null;
+		}
+
+		EditableFeature resp = null;
+		try {
+			resp = fsto.createNewFeature(true);
+		} catch (DataException e) {
+			logger.error("Unable to create feature in clipboard operation.", e);
+			return null;
+		}
+
+		// set geometry
+		resp.setDefaultGeometry((Geometry) geom_obj);
+		for (int i=1; i<feat_parts.length; i++) {
+			setAttribute(resp, feat_parts[i]);
+		}
+		return resp;
+	}
+
+	private static void setAttribute(EditableFeature resp, String att_desc) {
+
+		String[] att_parts = att_desc.split(CLIPBOARD_SEPARATOR_3);
+		if (att_parts.length != 3) {
+			// must be: name - type - value
+			return;
+		}
+
+		FeatureType fty = null;
+		fty = resp.getType();
+
+		if (fty.get(att_parts[0]) == null) {
+			// name not in feature type
+			return;
+		}
+
+		try {
+			resp.set(att_parts[0], att_parts[2]);
+		} catch (Exception ex) {
+			/*
+			logger.info("Did not set value for field '" + att_parts[0]
+					+ "': " + ex.getMessage());
+			*/
+		}
+	}
+
+
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomPrev.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomPrev.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomPrev.java	(revision 42196)
@@ -0,0 +1,83 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontext.ViewPort;
+
+/**
+ * Extensi�n que cambia el extent de la vista al extent anterior.
+ */
+public class ZoomPrev extends Extension {
+
+  public void postInitialize() {}
+
+  public void initialize() {
+    IconThemeHelper.registerIcon("action", "view-navigation-zoom-back", this);
+  }
+
+  public boolean isEnabled() {
+    ApplicationManager application = ApplicationLocator.getManager();
+
+    IView view = (IView) application.getActiveComponent(ViewDocument.class);
+    if (view == null) {
+      return false;
+    }
+    ViewDocument document = view.getViewDocument();
+    ViewPort vp = document.getMapContext().getViewPort();
+    return vp.getEnvelopes().hasPrevious();
+  }
+
+  public boolean isVisible() {
+    ApplicationManager application = ApplicationLocator.getManager();
+
+    IView view = (IView) application.getActiveComponent(ViewDocument.class);
+    if (view == null) {
+      return false;
+    }
+    ViewDocument document = view.getViewDocument();
+    return document.getMapContext().getLayers().getLayersCount() > 0;
+  }
+
+  public void execute(String arg0) {
+    ApplicationManager application = ApplicationLocator.getManager();
+
+    IView view = (IView) application.getActiveComponent(ViewDocument.class);
+    if (view == null) {
+      return;
+    }
+    ViewDocument document = view.getViewDocument();
+    ViewPort vp = document.getMapContext().getViewPort();
+
+    vp.setPreviousEnvelope();
+    document.setModified(true);
+
+    ApplicationLocator.getManager().refreshMenusAndToolBars();
+  }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomPrev.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BasicSymbologyExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BasicSymbologyExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BasicSymbologyExtension.java	(revision 42196)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.preferences.IPreference;
+import org.gvsig.andami.preferences.IPreferenceExtension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.preferencespage.CartographicSupportPage;
+import org.gvsig.app.gui.preferencespage.SymbologyPage;
+import org.gvsig.app.gui.styling.MarkerFill;
+import org.gvsig.app.gui.styling.PictureFill;
+import org.gvsig.app.gui.styling.PictureLine;
+import org.gvsig.app.gui.styling.PictureMarker;
+import org.gvsig.app.gui.styling.SimpleFill;
+import org.gvsig.app.gui.styling.SimpleLine;
+import org.gvsig.app.gui.styling.SimpleMarker;
+import org.gvsig.app.project.documents.view.legend.gui.AttrInTableLabeling;
+import org.gvsig.app.project.documents.view.legend.gui.Categories;
+import org.gvsig.app.project.documents.view.legend.gui.Features;
+import org.gvsig.app.project.documents.view.legend.gui.General;
+import org.gvsig.app.project.documents.view.legend.gui.LabelingManager;
+import org.gvsig.app.project.documents.view.legend.gui.LegendManager;
+import org.gvsig.app.project.documents.view.legend.gui.MultipleAttributes;
+import org.gvsig.app.project.documents.view.legend.gui.Quantities;
+import org.gvsig.app.project.documents.view.legend.gui.SingleSymbol;
+import org.gvsig.app.project.documents.view.legend.gui.ThemeManagerWindow;
+import org.gvsig.app.project.documents.view.legend.gui.VectorialInterval;
+import org.gvsig.app.project.documents.view.legend.gui.VectorialUniqueValue;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+
+/**
+ * Extension for enable the symbology. It only installs the core symbology.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class BasicSymbologyExtension extends Extension implements IPreferenceExtension{
+
+    public void initialize() {
+        // modules for symbol editor
+        SymbologySwingManager symbologySwingManager = SymbologySwingLocator.getSwingManager();
+
+        symbologySwingManager.registerSymbolEditor(SimpleFill.class, Geometry.TYPES.SURFACE);
+        symbologySwingManager.registerSymbolEditor(SimpleMarker.class, Geometry.TYPES.POINT);
+        symbologySwingManager.registerSymbolEditor(SimpleLine.class, Geometry.TYPES.CURVE);
+        symbologySwingManager.registerSymbolEditor(SimpleFill.class, Geometry.TYPES.MULTISURFACE);
+        symbologySwingManager.registerSymbolEditor(SimpleMarker.class, Geometry.TYPES.MULTIPOINT);
+        symbologySwingManager.registerSymbolEditor(SimpleLine.class, Geometry.TYPES.MULTICURVE);
+
+        //FIXME 
+        symbologySwingManager.registerSymbolEditor(PictureMarker.class, Geometry.TYPES.POINT);
+        symbologySwingManager.registerSymbolEditor(PictureLine.class, Geometry.TYPES.CURVE);
+        symbologySwingManager.registerSymbolEditor(PictureFill.class, Geometry.TYPES.SURFACE);
+        symbologySwingManager.registerSymbolEditor(MarkerFill.class, Geometry.TYPES.SURFACE);
+
+        symbologySwingManager.registerSymbolEditor(PictureMarker.class, Geometry.TYPES.MULTIPOINT);
+        symbologySwingManager.registerSymbolEditor(PictureLine.class, Geometry.TYPES.MULTICURVE);
+        symbologySwingManager.registerSymbolEditor(PictureFill.class, Geometry.TYPES.MULTISURFACE);
+        symbologySwingManager.registerSymbolEditor(MarkerFill.class, Geometry.TYPES.MULTISURFACE);
+
+        // legends available 
+        symbologySwingManager.registerLegendEditor(Quantities.class);
+        symbologySwingManager.registerLegendEditor(Features.class);
+        symbologySwingManager.registerLegendEditor(Categories.class);
+        symbologySwingManager.registerLegendEditor(MultipleAttributes.class);
+
+        symbologySwingManager.registerLegendEditor(SingleSymbol.class);
+        symbologySwingManager.registerLegendEditor(VectorialInterval.class);
+        symbologySwingManager.registerLegendEditor(VectorialUniqueValue.class);
+
+        // labeling strategies (inverse order to the wanted to be shown)
+        symbologySwingManager.registerLabelingEditor(AttrInTableLabeling.class);
+
+        
+        // pages
+        ThemeManagerWindow.addPage(General.class);
+        ThemeManagerWindow.addPage(LegendManager.class);
+        ThemeManagerWindow.addPage(LabelingManager.class);
+
+        ThemeManagerWindow.setTabEnabledForLayer(General.class, FLyrVect.class, true);
+        ThemeManagerWindow.setTabEnabledForLayer(LegendManager.class, FLyrVect.class, true);
+        ThemeManagerWindow.setTabEnabledForLayer(LabelingManager.class, FLyrVect.class, true);
+
+        registerIcons();
+    }
+
+	@Override
+	public void postInitialize() {
+		super.postInitialize();
+		
+		SymbologySwingLocator.getSwingManager().setColorTablesFactory(
+				ApplicationLocator.getManager().getColorTablesFactory());
+	}
+
+	private void registerIcons(){
+    	IconThemeHelper.registerIcon("preferences", "symbology-preferences", this);
+	}
+
+	public void execute(String actionCommand) {
+
+	}
+
+	public boolean isEnabled() {
+		return false;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+
+	public IPreference[] getPreferencesPages() {
+		return new IPreference[] {
+			new CartographicSupportPage(), new SymbologyPage()
+		};
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BasicSymbologyExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java	(revision 42196)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import javax.swing.JOptionPane;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extensi�n de zoom a lo seleccionado teniendo como ventana activa una vista.
+ *
+ */
+public class ZoomToSelectExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(ZoomToSelectExtension.class);
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "view-navigation-zoom-to-selection", this);
+    }
+
+    public void execute(String s) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapContext mapa = document.getMapContext();
+        Envelope selectedExtent = null;
+        try {
+            selectedExtent = mapa.getSelectionBounds();
+            mapa.getViewPort().setEnvelope(selectedExtent);
+        } catch (BaseException e) {
+            String msg = "Can't zoom to the seleccion.";
+            logger.warn(msg, e);
+            application.message(msg, JOptionPane.WARNING_MESSAGE);
+        }
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().getLayers().getLayersCount() > 0;
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        FLayer[] selected = document.getMapContext().getLayers().getActives();
+        if (selected.length == 1 && selected[0] instanceof FLyrVect && selected[0].isAvailable()) {
+            FLyrVect layer = (FLyrVect) selected[0];
+            try {
+                if (!layer.getFeatureStore().getFeatureSelection().isEmpty()) {
+                    return true;
+                }
+            } catch (Exception e) {
+                String msg = "Can't check if selection if empty in layer '" + layer.getName() + "'.";
+                logger.warn(msg, e);
+                application.message(msg, JOptionPane.WARNING_MESSAGE);
+            }
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InfoToolExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InfoToolExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InfoToolExtension.java	(revision 42196)
@@ -0,0 +1,96 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extension that handles the info by point tool for a selected layer set
+ *
+ */
+public class InfoToolExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(InfoToolExtension.class);
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-info-by-point", this);
+    }
+
+    public void execute(String s) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+
+        if (s.compareTo("layer-info-by-point") == 0) {
+            MapControl mapCtrl = view.getMapControl();
+            mapCtrl.setTool("info");
+            document.setModified(true);
+        }
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapContext mapa = document.getMapContext();
+        FLayer[] layers = mapa.getLayers().getActives();
+        for (int i = 0; i < layers.length; i++) {
+            if (layers[i].isAvailable()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapContext mapa = document.getMapContext();
+        return mapa.getLayers().getLayersCount() > 0;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InfoToolExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/LayerPropertiesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/LayerPropertiesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/LayerPropertiesExtension.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.app.project.documents.view.gui.LayerProperties;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class LayerPropertiesExtension extends Extension {
+
+    public void initialize() {
+    }
+
+    public void execute(String s) {
+
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        if (!document.getMapContext().hasActiveVectorLayers()) {
+            return;
+        }
+
+        if (s.equalsIgnoreCase("layer-properties")) {
+            FLayer layer = document.getMapContext().getLayers().getActives()[0];
+            LayerProperties dlg = new LayerProperties(layer);
+            WindowManager wm = ToolsSwingLocator.getWindowManager();
+            wm.showWindow(
+                    dlg.asJComponent(),
+                    ToolsLocator.getI18nManager().getTranslation("propiedades_de_la_capa"),
+                    WindowManager.MODE.WINDOW
+            );
+        }
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasActiveVectorLayers();
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasVectorLayers();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/LayerPropertiesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java	(revision 42196)
@@ -0,0 +1,153 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+/**
+ * Extensi�n encargada de limpiar la selecci�n.
+ *
+ */
+public class ClearSelectionExtension extends Extension {
+
+
+    public void execute(String s) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        if (s.equalsIgnoreCase("selection-clear-view")) {
+            MapContext mapa = document.getMapContext();
+            MapControl mapCtrl = view.getMapControl();
+            FLayers layers = mapa.getLayers();
+            boolean refresh = clearSelectionOfView(layers);
+            if (refresh) {
+                mapCtrl.drawMap(false);
+            }
+            document.setModified(true);
+        }
+    }
+
+    private boolean clearSelectionOfView(FLayers layers) {
+        boolean refresh = false;
+
+        for (int i = 0; i < layers.getLayersCount(); i++) {
+            FLayer lyr = layers.getLayer(i);
+            if (lyr instanceof FLayers) {
+                refresh = refresh || clearSelectionOfView((FLayers) lyr);
+            } else if (lyr instanceof FLyrVect) {
+                FLyrVect lyrVect = (FLyrVect) lyr;
+                if (lyrVect.isActive()) {
+                    try {
+                        FeatureStore featureStore;
+
+                        featureStore = ((FLyrVect) lyr).getFeatureStore();
+                        if (!featureStore.getFeatureSelection().isEmpty()) {
+                            refresh = true;
+                        }
+                        featureStore.getFeatureSelection().deselectAll();
+                    } catch (ReadException e) {
+                        e.printStackTrace();
+                    } catch (DataException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        return refresh;
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapContext mapa = document.getMapContext();
+        return mapa.getLayers().getLayersCount() > 0;
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapContext mapa = document.getMapContext();
+        return hasVectorLayersWithSelection(mapa.getLayers());
+    }
+
+    private boolean hasVectorLayersWithSelection(FLayers layers) {
+        for (int i = 0; i < layers.getLayersCount(); i++) {
+            FLayer lyr = layers.getLayer(i);
+            if (lyr instanceof FLayers) {
+                if (hasVectorLayersWithSelection((FLayers) lyr)) {
+                    return true;
+                }
+            } else if (lyr instanceof FLyrVect) {
+                FLyrVect lyrVect = (FLyrVect) lyr;
+                if (lyrVect.isActive()) {
+                    if (lyrVect.isAvailable()) {
+                        try {
+                            if (!lyrVect.getFeatureStore().getFeatureSelection().isEmpty()) {
+                                return true;
+                            }
+                        } catch (DataException e) {
+                            e.printStackTrace();
+                            NotificationManager.addWarning("Capa " + lyrVect.getName() + " sin recordset correcto", e);
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "edit-clear", this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/TranslationsPackageExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/TranslationsPackageExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/TranslationsPackageExtension.java	(revision 42196)
@@ -0,0 +1,88 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.io.File;
+import org.cresques.Messages;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.installer.packagebuilder.BasePackageWizard;
+import org.gvsig.andami.installer.translations.TranslationsInstallerFactory;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TranslationsPackageExtension extends Extension {
+
+    private static Logger logger = LoggerFactory
+            .getLogger(TranslationsPackageExtension.class);
+
+    public void initialize() {
+        // Do nothing
+    }
+
+    public void postInitialize() {
+        super.postInitialize();
+    }
+
+    public void execute(String actionCommand) {
+        if ( "tools-devel-translations-package".equalsIgnoreCase(actionCommand) ) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            application.getUIManager().showWindow(
+                    new TranslationsPackageWizard(),
+                    application.translate("_Translations_package"),
+                    WindowManager.MODE.WINDOW
+            );
+        }
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+
+    private class TranslationsPackageWizard extends BasePackageWizard {
+
+        private static final long serialVersionUID = 9205891710214122265L;
+
+        TranslationsPackageWizard() {
+            super(TranslationsInstallerFactory.PROVIDER_NAME);
+        }
+
+        @Override
+        protected void initOptionPanels() {
+            PluginsManager pluginsManager = PluginsLocator.getManager();
+            this.addSelectFolderToPackagingOption(Messages.getText("_Seleccione_la_carpeta_en_la_que_se_encuentran_las_traducciones_a_empaquetar"));
+            super.addDefaultOptionPanels();
+            this.setFolderToPackaging(new File(pluginsManager.getApplicationFolder(), "i18n"));
+        }
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/TranslationsPackageExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSimpleSelectionControl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSimpleSelectionControl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSimpleSelectionControl.java	(revision 42196)
@@ -0,0 +1,89 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extension that handles the simple selection tool
+ *
+ */
+public class ViewSimpleSelectionControl extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(ViewSimpleSelectionControl.class);
+
+    public void initialize() {
+        registerIcons();
+    }
+
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("action", "selection-simple-select", this);
+    }
+
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapControl mapCtrl = view.getMapControl();
+        if (actionCommand.equalsIgnoreCase("selection-simple-select-view")) {
+            mapCtrl.setTool("pointSelection");
+            document.setModified(true);
+        }
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasActiveVectorLayers();
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasVectorLayers();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewCommandStackExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewCommandStackExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewCommandStackExtension.java	(revision 42196)
@@ -0,0 +1,133 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.gui.command.CommandStackDialog;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ViewCommandStackExtension extends Extension {
+
+	public static CommandStackDialog csd=null;
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+				.getActiveWindow();
+
+		DefaultViewPanel vista = (DefaultViewPanel) f;
+		ViewDocument model = vista.getModel();
+		MapContext mapa = model.getMapContext();
+		FLayers layers = mapa.getLayers();
+		if (s.equals("edit-undo-redo-actions-layer")) {
+			for (int i =0;i<layers.getLayersCount();i++){
+				if (layers.getLayer(i) instanceof FLyrVect){
+					FLyrVect lyrVect=(FLyrVect)layers.getLayer(i);
+					if (lyrVect.isEditing() && lyrVect.isActive()){
+						FeatureStore featureStore=lyrVect.getFeatureStore();
+						csd=new CommandStackDialog();
+						csd.setModel(featureStore);
+						PluginServices.getMDIManager().addWindow(csd);
+						return;
+					}
+				}
+			}
+		}
+
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+    public boolean isVisible() {
+
+        org.gvsig.andami.ui.mdiManager.IWindow f =
+            PluginServices.getMDIManager().getActiveWindow();
+        if (f == null) {
+            return false;
+        }
+
+        if (f instanceof DefaultViewPanel) {
+            DefaultViewPanel vista = (DefaultViewPanel) f;
+            ViewDocument model = vista.getViewDocument();
+            MapContext mapa = model.getMapContext();
+
+            FLayers capas = mapa.getLayers();
+
+            int numActiveVectorial = 0;
+            int numActiveVectorialEditable = 0;
+
+            LayersIterator iter = new LayersIterator(capas);
+
+            FLayer capa;
+            while (iter.hasNext()) {
+                capa = iter.nextLayer();
+                if (capa instanceof FLyrVect && capa.isActive()
+                    && capa.isAvailable()) {
+                    numActiveVectorial++;
+                    if (capa.isEditing())
+                        numActiveVectorialEditable++;
+                }
+
+            }
+
+            if (numActiveVectorialEditable == 1 && numActiveVectorial == 1) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewCommandStackExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoViewExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoViewExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoViewExtension.java	(revision 42196)
@@ -0,0 +1,143 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.undo.UndoException;
+
+
+
+/**
+ * Extensi�n encargada de gestionar el deshacer los comandos anteriormente
+ * aplicados.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class UndoViewExtension extends Extension {
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+        IconThemeHelper.registerIcon("action", "edit-undo", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		DefaultViewPanel vista = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+
+
+		if (s.compareTo("edit-undo-layer") == 0) {
+			undo(vista);
+
+		}
+	}
+
+	private void undo(DefaultViewPanel vista) {
+		MapControl mapControl = vista.getMapControl();
+		try {
+			FLayers layers=mapControl.getMapContext().getLayers();
+			for (int i=0;i<layers.getLayersCount();i++){
+				if (layers.getLayer(i) instanceof FLyrVect && layers.getLayer(i).isEditing() && layers.getLayer(i).isActive()){
+					((FLyrVect)layers.getLayer(i)).getFeatureStore().undo();
+					mapControl.drawMap(false);
+					ApplicationLocator.getManager().refreshMenusAndToolBars();
+				}
+			}
+		} catch (UndoException e) {
+			NotificationManager.addError(e.getMessage(),e);
+		}
+
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		DefaultViewPanel vista = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapControl = vista.getMapControl();
+		FLayers layers=mapControl.getMapContext().getLayers();
+		for (int i=0;i<layers.getLayersCount();i++){
+//			try {
+				if (layers.getLayer(i) instanceof FLyrVect && ((FLyrVect)layers.getLayer(i)).getFeatureStore().isEditing() && layers.getLayer(i).isActive()){
+					return ((FLyrVect)layers.getLayer(i)).getFeatureStore().canUndo();
+//				VectorialEditableAdapter vea=(VectorialEditableAdapter)((FLyrVect)layers.getLayer(i)).getSource();
+//				if (vea==null)return false;
+//				return vea.getCommandRecord().moreUndoCommands();
+				}
+//			} catch (ReadException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			} catch (DataException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			}
+
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+															 .getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+
+		if (f instanceof DefaultViewPanel) {
+			MapControl mapControl = ((DefaultViewPanel)f).getMapControl();
+			FLayer[] layers=mapControl.getMapContext().getLayers().getActives();
+			FLayer layer;
+			for (int i=0;i<layers.length;i++){
+				layer = layers[i];
+				if (!layer.isAvailable()){
+					continue;
+				}
+//				try {
+					if (layer instanceof FLyrVect && ((FLyrVect)layer).getFeatureStore().isEditing()){
+						return true;
+					}
+//				} catch (ReadException e) {
+//					// TODO Auto-generated catch block
+//					e.printStackTrace();
+//				}
+			}
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoViewExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MeasureExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MeasureExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MeasureExtension.java	(revision 42196)
@@ -0,0 +1,109 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+/**
+ * Extensi�n que controla las operaciones de medida realizadas sobre la vista.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class MeasureExtension extends Extension {
+
+    private void registerDistanceUnits() {
+        MapContext.addDistanceUnit("Millas_Nauticas", "nmi", 1852);
+        MapContext.addDistanceUnit("Decimetros", "dm", 0.1);
+    }
+
+    private void registerAreaUnits() {
+        MapContext.addAreaUnit("Areas", "a", false, 10);
+        MapContext.addAreaUnit("Hectareas", "ha", false, 100);
+        MapContext.addAreaUnit("HanegadasV", "hgV", false, 28.8287);
+        MapContext.addAreaUnit("HanegadasC", "hgC", false, 80.2467);
+        MapContext.addAreaUnit("Decimetros", "dm", true, 0.1);
+        MapContext.addAreaUnit("Acres", "acre", false, 63.6149);
+        MapContext.addAreaUnit("Millas_Nauticas", "nmi", true, 1852);
+    }
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.IExtension#initialize()
+     */
+
+    public void initialize() {
+        registerDistanceUnits();
+        registerAreaUnits();
+        IconThemeHelper.registerIcon("action", "view-query-distance", this);
+        IconThemeHelper.registerIcon("action", "view-query-area", this);
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String s) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        MapControl mapCtrl = view.getMapControl();
+
+        if (s.equals("view-query-distance")) {
+            mapCtrl.setTool("medicion");
+        } else if (s.equals("view-query-area")) {
+            mapCtrl.setTool("area");
+        }
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        return true;
+//        ViewDocument document = view.getViewDocument();
+//        return document.getMapContext().hasActiveVectorLayers();
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        return true;
+//        ViewDocument document = view.getViewDocument();
+//        MapContext mapa = document.getMapContext();
+//        return mapa.getLayers().getLayersCount() > 0;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MeasureExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewControls.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewControls.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewControls.java	(revision 42196)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.preferences.IPreference;
+import org.gvsig.andami.preferences.IPreferenceExtension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.preferencespage.ViewPage;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.view.Encuadrator;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.gui.ExtentListSelectorModel;
+import org.gvsig.app.project.documents.view.gui.FPanelExtentSelector;
+import org.gvsig.app.project.documents.view.gui.FPanelLocConfig;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.app.project.documents.view.toc.gui.FPopupMenu;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+
+/**
+ * Extensi�n que controla las operaciones b�sicas realizadas sobre la vista.
+ *
+ */
+public class ViewControls extends Extension implements IPreferenceExtension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(ViewInvertSelection.class);
+
+    private static ViewPage viewPropertiesPage = null;
+
+    public void execute(String s) {
+        execute(s, null);
+    }
+
+    public void execute(String command, Object[] args) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+
+        MapContext mapa = document.getMapContext();
+        MapControl mapCtrl = view.getMapControl();
+
+        if (command.equalsIgnoreCase("view-navigation-zoom-all")) {
+            Envelope all = mapa.getLayers().getFullEnvelope();
+            if( all!=null && !all.isEmpty() ) {
+                mapa.getViewPort().setEnvelope(all);
+                document.setModified(true);
+            }
+
+        } else if (command.equalsIgnoreCase("view-navigation-frame-manager")) {
+            FPanelExtentSelector l = new FPanelExtentSelector();
+
+            ProjectExtension p = (ProjectExtension) PluginServices.getExtension(org.gvsig.app.extension.ProjectExtension.class);
+            Project project = p.getProject();
+            ExtentListSelectorModel modelo = new ExtentListSelectorModel(project);
+            project.addPropertyChangeListener(modelo);
+            l.setModel(modelo);
+            l.addSelectionListener(new Encuadrator(project, mapa, view));
+            document.setModified(true);
+            PluginServices.getMDIManager().addWindow(l);
+
+        } else if (command.equalsIgnoreCase("view-locator-setup")) {
+            FPanelLocConfig m_panelLoc = new FPanelLocConfig(view.getMapOverview());
+            PluginServices.getMDIManager().addCentredWindow(m_panelLoc);
+            document.setModified(true);
+
+        } else if (command.equalsIgnoreCase("view-navigation-pan")) {
+            mapCtrl.setTool("pan");
+            document.setModified(true);
+
+        } else if (command.equalsIgnoreCase("view-navigation-zoom-in-topoint")) {
+            mapCtrl.setTool("zoomIn");
+            document.setModified(true);
+
+        } else if (command.equalsIgnoreCase("view-navigation-zoom-out-topoint")) {
+            mapCtrl.setTool("zoomOut");
+            document.setModified(true);
+
+        } else if (command.equalsIgnoreCase("layer-set-visible")) {
+            setVisibles(true, mapa.getLayers());
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("layer-set-hide")) {
+            setVisibles(false, mapa.getLayers());
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("layer-set-active")) {
+            setActives(true, mapa.getLayers());
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("layer-set-inactive")) {
+            setActives(false, mapa.getLayers());
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("view-navigation-zoom-in-center")) {
+            mapCtrl.zoomIn();
+            document.setModified(true);
+
+        } else if (command.equalsIgnoreCase("view-navigation-zoom-out-center")) {
+            mapCtrl.zoomOut();
+            document.setModified(true);
+
+        } else if (command.equalsIgnoreCase("view-change-scale")) {
+            try {
+                Long scale = (Long) ToolsLocator.getDataTypesManager().coerce(DataTypes.LONG, args[0]);
+                mapa.setScaleView(scale.longValue());
+                document.setModified(true);
+            } catch (Throwable ex) {
+                logger.info("Can't change scale of view.", ex);
+                application.message("Can't change scale of view.", JOptionPane.ERROR_MESSAGE);
+            }
+        }
+    }
+
+    private ViewPage getViewPropertiesPage() {
+        if (viewPropertiesPage == null) {
+            viewPropertiesPage = new ViewPage();
+        }
+        return viewPropertiesPage;
+    }
+
+    /**
+     * Pone todas las capas visibles o no visibles.
+     *
+     * @param visible true si que quieren poner a visibles.
+     * @param mapa FMap sobre el que actuar.
+     */
+    private void setVisibles(boolean visible, FLayers layers) {
+        int layerCount = layers.getLayersCount();
+        for (int i = 0; i < layerCount; i++) {
+            FLayer layer = layers.getLayer(i);
+            layer.setVisible(visible);
+            if (layer instanceof FLayers) {
+                setVisibles(visible, (FLayers) layer);
+            }
+        }
+    }
+
+    /**
+     * Pone todas las capas activas o no activas.
+     *
+     * @param active true si que quieren poner a activas.
+     * @param mapa FMap sobre el que actuar.
+     */
+    private void setActives(boolean active, FLayers layers) {
+        int layerCount = layers.getLayersCount();
+        for (int i = 0; i < layerCount; i++) {
+            FLayer layer = layers.getLayer(i);
+            layer.setActive(active);
+            if (layer instanceof FLayers) {
+                setActives(active, (FLayers) layer);
+            }
+        }
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapContext mapa = document.getMapContext();
+        return mapa.getLayers().getLayersCount() > 0;
+    }
+
+    public void initialize() {
+        registerIcons();
+    }
+
+    public void postInitialize() {
+        FPopupMenu.registerExtensionPoint();
+        ProjectManager projectManager = ApplicationLocator.getProjectManager();
+        ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+        viewManager.addTOCContextAction("view-layer-add");
+        viewManager.addTOCContextAction("layer-properties","group2",20,0);
+    }
+
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("action", "view-navigation-zoom-in-topoint", this);
+        IconThemeHelper.registerIcon("action", "view-navigation-zoom-out-topoint", this);
+        IconThemeHelper.registerIcon("action", "view-navigation-zoom-all", this);
+        IconThemeHelper.registerIcon("action", "view-navigation-zoom-in-center", this);
+        IconThemeHelper.registerIcon("action", "view-navigation-zoom-out-center", this);
+        IconThemeHelper.registerIcon("action", "view-navigation-pan", this);
+        IconThemeHelper.registerIcon("action", "view-navigation-frame-manager", this);
+
+        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions-modify", this);
+        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions-add", this);
+        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions-delete", this);
+
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapContext mapa = document.getMapContext();
+        FLayers layers = mapa.getLayers();
+        for (int i = 0; i < layers.getLayersCount(); i++) {
+            if (layers.getLayer(i).isAvailable()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public IPreference[] getPreferencesPages() {
+        IPreference[] preferences = new IPreference[1];
+        preferences[0] = getViewPropertiesPage();
+//        GridPage gridPage = new GridPage();
+//        preferences[1] = gridPage;
+        return preferences;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewControls.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionByTheme.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionByTheme.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionByTheme.java	(revision 42196)
@@ -0,0 +1,92 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.selectionByTheme.DefaultSelectionByThemeModel;
+import org.gvsig.app.gui.selectionByTheme.MySelectionByThemeListener;
+import org.gvsig.app.gui.selectionByTheme.SelectionByTheme;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extension that handles the selection tools, selection tools have sense on
+ * vectorial layers only.
+ *
+ */
+public class ViewSelectionByTheme extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(ViewSelectionByTheme.class);
+
+    public void initialize() {
+
+    }
+
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+
+        if (actionCommand.equalsIgnoreCase("selection-select-by-layer")) {
+
+            SelectionByTheme dlg = new SelectionByTheme();
+            dlg.setModel(new DefaultSelectionByThemeModel());
+            dlg.addSelectionListener(new MySelectionByThemeListener());
+            application.getUIManager().addWindow(dlg);
+            document.setModified(true);
+        }
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+
+        return document.getMapContext().hasActiveVectorLayers();
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+
+        return document.getMapContext().hasVectorLayers();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionByTheme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionControls.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionControls.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionControls.java	(revision 42196)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extension that handles the selection tools, selection tools have sense on
+ * vectorial layers only.
+ *
+ */
+public class ViewSelectionControls extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(ViewSelectionControls.class);
+
+    public void initialize() {
+        registerIcons();
+    }
+
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("action", "selection-select-by-rectangle", this);
+        IconThemeHelper.registerIcon("action", "selection-select-by-polygon", this);
+        IconThemeHelper.registerIcon("action", "selection-clear", this);
+    }
+
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        MapControl mapCtrl = view.getMapControl();
+
+        if (actionCommand.equalsIgnoreCase("selection-select-by-rectangle-view")) {
+            mapCtrl.setTool("rectSelection");
+            document.setModified(true);
+
+        } else if (actionCommand.equalsIgnoreCase("selection-select-by-polygon")) {
+            mapCtrl.setTool("polSelection");
+            document.setModified(true);
+
+        }
+    }
+
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasActiveVectorLayers();
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasVectorLayers();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionControls.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowDevelInfoExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowDevelInfoExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowDevelInfoExtension.java	(revision 42196)
@@ -0,0 +1,90 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.extension.develtools.ActionsInfoDevelTool;
+import org.gvsig.app.extension.develtools.IconThemeDevelTool;
+import org.gvsig.app.extension.develtools.MenusDevelTool;
+import org.gvsig.app.extension.develtools.PersistenceDevelTool;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ShowDevelInfoExtension extends Extension {
+
+	private static Logger logger = LoggerFactory
+			.getLogger(ShowDevelInfoExtension.class);
+
+	public void initialize() {
+		// Do nothing
+	}
+
+	public void postInitialize() {
+		super.postInitialize();
+//		ActionInfoManager actionMgr = PluginsLocator.getActionInfoManager();
+//		actionMgr.redirect("tools-devel-disposables-show-pendings", "layer-info-by-point");
+		
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		
+		try {
+			manager.setAutoValidation(PersistenceManager.MANDATORY_IF_DECLARED);
+		} catch (PersistenceException e) {
+			logger.warn(
+					"Error modificando el modo de autovalidacion de persistencia.",
+					e);
+		}
+
+	}
+
+	public void execute(String actionCommand) {
+		if ("tools-devel-show-persistencefactories".equalsIgnoreCase(actionCommand)) {
+			new PersistenceDevelTool().showPersistenceFactories();
+		} else if ("tools-devel-show-icontheme".equalsIgnoreCase(actionCommand)) {
+			new IconThemeDevelTool().showDefaultIconTheme();
+		} else if ("tools-devel-show-actions".equalsIgnoreCase(actionCommand)) {
+			new ActionsInfoDevelTool().showActions();
+		} else if ("tools-devel-show-menus".equalsIgnoreCase(actionCommand)) {
+			new MenusDevelTool().showAllMenus();
+		} else if ("tools-devel-show-menus-by-plugin".equalsIgnoreCase(actionCommand)) {
+			new MenusDevelTool().showAllMenusByPlugin();
+		} else if ("tools-devel-show-plugin-report".equalsIgnoreCase(actionCommand)) {
+			new ActionsInfoDevelTool().showReportOfPlugin();
+		}
+	}
+
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		return true;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowDevelInfoExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/About.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/About.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/About.java	(revision 42196)
@@ -0,0 +1,200 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.gvsig.about.AboutLocator;
+import org.gvsig.about.AboutManager;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+
+/**
+ * Extensi�n que abre una nueva ventana mostrando la informaci�n sobre el gvSIG.
+ *
+ */
+public class About extends Extension {
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        return true;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    public void initialize() {
+    }
+
+    private URL getResource(String name) {
+        URL resource = this.getClass().getClassLoader().getResource(name);
+        return resource;
+    }
+
+    public void postInitialize() {
+        super.postInitialize();
+
+        PluginsManager pmanager = PluginsLocator.getManager();
+
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        PackageInfo pinfo = pmanager.getPackageInfo(About.class);
+
+        AboutManager about = application.getAbout();
+
+        about.setProject("gvSIG desktop", getResource("about/about.htm"),
+                getResource("about/gvsig-icon16x16.png"));
+        about.getProject().set("version", pinfo.getVersion().toString());
+        about.getProject().set("state", pinfo.getState());
+        about.getProject().set("java.version",
+                System.getProperty("java.version"));
+
+        about.addSponsor(
+                "CITMA GVA", //"Conselleria d'infraestructures i transport de la Generalitat Valenciana",
+                getResource("about/gva-cit.html"),
+                1
+        );
+        about.addDeveloper(
+                "PRODEVELOP",
+                getResource("about/prodevelop.html"),
+                2
+        );
+
+        about.addDeveloper(
+                "Software Colaborativo",
+                getResource("about/scolab.html"),
+                3
+        );
+
+        about.addDeveloper(
+                "DISID",
+                getResource("about/disid.html"),
+                4
+        );
+    }
+
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        application.getUIManager().addCentredWindow(new AboutWindow());
+    }
+
+    class AboutWindow extends JPanel implements IWindow {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = -3577229971045886621L;
+
+        AboutWindow() {
+            AboutManager aboutManager = AboutLocator.getManager();
+
+            this.setLayout(new BorderLayout());
+            this.add(aboutManager.getAboutPanel(), BorderLayout.CENTER);
+            this.add(new JPanelButtons(), BorderLayout.SOUTH);
+        }
+
+        public WindowInfo getWindowInfo() {
+            WindowInfo winfo = new WindowInfo(
+                    WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE
+            );
+            winfo.setTitle(PluginServices.getText(this, "acerca_de"));
+            winfo.setHeight(500);
+            winfo.setWidth(750);
+            return winfo;
+        }
+
+        public Object getWindowProfile() {
+            return WindowInfo.DIALOG_PROFILE;
+        }
+
+        public void closeWindow() {
+            PluginServices.getMDIManager().closeWindow(this);
+        }
+
+        class JPanelButtons extends JPanel {
+
+            /**
+             *
+             */
+            private static final long serialVersionUID = 1529755877776747074L;
+            JButton close = null;
+            JButton installedPlugins = null;
+
+            JPanelButtons() {
+                this.setLayout(new FlowLayout(FlowLayout.RIGHT));
+                this.close = getCloseButton();
+//				this.installedPlugins = getInstalledPluginsButton();
+                this.add(this.close);
+//				this.add(this.installedPlugins);
+            }
+
+            private JButton getCloseButton() {
+                JButton button = new JButton(
+                        PluginServices.getText(this, "Close"));
+                button.addActionListener(new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        closeWindow();
+                    }
+                });
+                return button;
+            }
+
+            private JButton getInstalledPluginsButton() {
+                JButton button = new JButton(PluginServices.getText(this,
+                        "Installed plugins"));
+                button.addActionListener(new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        // TODO: Need implementation
+                    }
+                });
+                return button;
+            }
+
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/About.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java	(revision 42196)
@@ -0,0 +1,266 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.filter.ExpressionListener;
+import org.gvsig.app.gui.filter.FilterDialog;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.i18n.Messages;
+import org.gvsig.utils.exceptionHandling.ExceptionListener;
+
+/**
+ * Extensi�n que abre un di�logo para poder hacer un filtro de una capa o tabla.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class SelectByAttributesExtension extends Extension implements ExpressionListener {
+
+    protected FeatureStore featureStore = null;
+    private String filterTitle;
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "selection-by-attributes", this);
+    }
+
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        
+        if ("selection-by-attributes-layer".equalsIgnoreCase(actionCommand)) {
+            FLayer layer = document.getMapContext().getLayers().getActives()[0];
+            filterTitle = layer.getName();
+            featureStore = ((FLyrVect) layer).getFeatureStore();
+            document.setModified(true);
+            doExecute();
+        }
+    }
+
+    /**
+     * "execute" method action.
+     *
+     */
+    protected void doExecute() {
+        FilterDialog dlg = new FilterDialog(filterTitle);
+        dlg.addExpressionListener(this);
+        dlg.addExceptionListener(new ExceptionListener() {
+
+            public void exceptionThrown(Throwable t) {
+                NotificationManager.addError(t.getMessage(), t);
+            }
+        });
+        dlg.setModel(featureStore);
+        PluginServices.getMDIManager().addWindow(dlg);
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        return document.getMapContext().hasActiveVectorLayers();
+    }
+
+    // By Pablo: if no filter expression -> no element selected
+    public void newSet(String expression) throws DataException {
+        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+            FeatureSet set = null;
+            try {
+                set = doSet(expression);
+
+                if (set == null) {
+                    // throw new RuntimeException("Not a 'where' clause?");
+                    return;
+                }
+                featureStore.setSelection(set);
+
+            } catch (Exception e) {
+
+                JOptionPane.showMessageDialog(
+                        ApplicationLocator.getManager().getRootComponent(),
+                        Messages.getText("expresion_error") + ":\n"
+                        + getLastMessage(e),
+                        Messages.getText("expresion_error"),
+                        JOptionPane.ERROR_MESSAGE);
+            } finally {
+                if (set != null) {
+                    set.dispose();
+                }
+            }
+        } else {
+            // By Pablo: if no expression -> no element selected
+            featureStore.getFeatureSelection().deselectAll();
+        }
+    }
+
+    private FeatureSet doSet(String expression) throws DataException {
+        FeatureQuery query = featureStore.createFeatureQuery();
+        DataManager manager = DALLocator.getDataManager();
+        query.setFilter(manager.createExpresion(expression));
+        return featureStore.getFeatureSet(query);
+    }
+
+    public void addToSet(String expression) throws DataException {
+        // By Pablo: if no filter expression -> don't add more elements to set
+        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+            FeatureSet set = null;
+            try {
+                set = doSet(expression);
+
+                if (set == null) {
+                    // throw new RuntimeException("Not a 'where' clause?");
+                    return;
+                }
+                featureStore.getFeatureSelection().select(set);
+            } finally {
+                if (set != null) {
+                    set.dispose();
+                }
+            }
+        }
+    }
+
+    public void fromSet(String expression) throws DataException {
+        // By Pablo: if no filter expression -> no element selected
+        try {
+            if (!this.filterExpressionFromWhereIsEmpty(expression)) {
+                // NotificationManager.showMessageInfo("Falta por implementar",
+                // null);
+
+                FeatureSet set = null;
+                set = doSet(expression);
+
+                if (set == null) {
+                    throw new RuntimeException("Not a 'where' clause?");
+                }
+
+                FeatureSelection oldSelection
+                        = featureStore.getFeatureSelection();
+
+                FeatureSelection newSelection
+                        = featureStore.createFeatureSelection();
+                Iterator iterator = set.iterator();
+                while (iterator.hasNext()) {
+                    Feature feature = (Feature) iterator.next();
+                    if (oldSelection.isSelected(feature)) {
+                        newSelection.select(feature);
+                    }
+                }
+                featureStore.setSelection(newSelection);
+                set.dispose();
+
+            } else {
+                // By Pablo: if no expression -> no element selected
+                featureStore.getFeatureSelection().deselectAll();
+                ;
+            }
+        } catch (DataException e) {
+            NotificationManager.addError(e);
+        }
+
+    }
+
+    /**
+     * Returns true if the WHERE subconsultation of the filterExpression is
+     * empty ("")
+     *
+     * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+     * @param expression An string
+     * @return A boolean value
+     */
+    private boolean filterExpressionFromWhereIsEmpty(String expression) {
+
+        if (expression == null) {
+            return true;
+        }
+
+        String subExpression = expression.trim();
+
+        if (subExpression.length() == 0) {
+            return true;
+        }
+
+        int pos;
+
+        // Remove last ';' if exists
+        if (subExpression.charAt(subExpression.length() - 1) == ';') {
+            subExpression
+                    = subExpression.substring(0, subExpression.length() - 1).trim();
+        }
+
+        // If there is no 'where' clause
+        if ((pos = subExpression.indexOf("where")) == -1) {
+            return false;
+        }
+
+        // If there is no subexpression in the WHERE clause -> true
+        // + 5 is the length of 'where'
+        subExpression = subExpression.substring(pos + 5, subExpression.length()).trim();
+        if (subExpression.length() == 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private String getLastMessage(Throwable ex) {
+
+        Throwable p = ex;
+        while (p.getCause() != null && p.getCause() != p) {
+            p = p.getCause();
+        }
+        return p.getMessage();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoViewExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoViewExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoViewExtension.java	(revision 42196)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.undo.RedoException;
+
+
+
+/**
+ * Extensi�n encargada de gestionar el rehacer un comando anteriormente
+ * deshecho.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class RedoViewExtension extends Extension {
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+        IconThemeHelper.registerIcon("action", "edit-redo", this);
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		DefaultViewPanel vista = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapControl = vista.getMapControl();
+
+		if (s.compareTo("edit-redo-layer") == 0) {
+			try {
+					FLayers layers=mapControl.getMapContext().getLayers();
+					for (int i=0;i<layers.getLayersCount();i++){
+						if (layers.getLayer(i) instanceof FLyrVect && layers.getLayer(i).isEditing() && layers.getLayer(i).isActive()){
+							((FLyrVect)layers.getLayer(i)).getFeatureStore().redo();
+							mapControl.drawMap(false);
+							ApplicationLocator.getManager().refreshMenusAndToolBars();
+						}
+
+					}
+			} catch (RedoException e) {
+				NotificationManager.addError(e.getMessage(),e);
+			}
+		}
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		DefaultViewPanel vista = (DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapControl = vista.getMapControl();
+		FLayers layers=mapControl.getMapContext().getLayers();
+		for (int i=0;i<layers.getLayersCount();i++){
+//			try {
+				if (layers.getLayer(i) instanceof FLyrVect && ((FLyrVect)layers.getLayer(i)).getFeatureStore().isEditing() && layers.getLayer(i).isActive()){
+					return ((FLyrVect)layers.getLayer(i)).getFeatureStore().canRedo();
+				}
+//			} catch (ReadException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			} catch (DataException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			}
+
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+															 .getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+
+		if (f instanceof DefaultViewPanel) {
+			MapControl mapControl = ((DefaultViewPanel)f).getMapControl();
+			FLayer[] layers=mapControl.getMapContext().getLayers().getActives();
+			FLayer layer;
+			for (int i=0;i<layers.length;i++){
+				layer = layers[i];
+				if (!layer.isAvailable()){
+					continue;
+				}
+//				try {
+					if (layer instanceof FLyrVect && ((FLyrVect)layer).getFeatureStore().isEditing()){
+						return true;
+					}
+//				} catch (ReadException e) {
+//					// TODO Auto-generated catch block
+//					e.printStackTrace();
+//				}
+			}
+		}
+		return false;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RedoViewExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitializeApplicationExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitializeApplicationExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitializeApplicationExtension.java	(revision 42196)
@@ -0,0 +1,253 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import javax.swing.JOptionPane;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.toolListeners.InfoListener;
+import org.gvsig.app.util.BaseOpenErrorHandler;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.OpenErrorHandler;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.dal.resource.exception.DisposeResorceManagerException;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.sqljep.SQLJEPEvaluator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class InitializeApplicationExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory
+            .getLogger(InitializeApplicationExtension.class);
+
+    private OpenErrorHandler openErrorHandler = null;
+
+    public void initialize() {
+
+        // Register default expression parser
+        DALLocator.getDataManager().registerDefaultEvaluator(
+                SQLJEPEvaluator.class);
+
+        InfoListener.initializeExtensionPoint();
+        // addToLogInfo();
+        registerIcons();
+
+    }
+
+    public void postInitialize() {
+        openErrorHandler = new BaseOpenErrorHandler();
+        ApplicationLocator.getManager().getDataManager().setOpenErrorHandler(openErrorHandler);
+
+        DALLocator.getResourceManager().startResourceCollector(
+                3 * (60 * 1000), // minutes --> miliseconds
+                null);
+        // showAddOnManagerOnStartIfNeed();
+    }
+
+    private void showAddOnManagerOnStartIfNeed() {
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginManager.getPlugin(this);
+        DynObject pluginProperties = plugin.getPluginProperties();
+        Map<String,Boolean> showAddOnmanagerOnStart = null;
+        try {
+            showAddOnmanagerOnStart = (Map<String,Boolean>) pluginProperties.getDynValue("showAddOnmanagerOnStart");
+        } catch(Exception ex) {
+            // Do nothing
+        }
+        if( showAddOnmanagerOnStart==null ) {
+            showAddOnmanagerOnStart = new HashMap<String, Boolean>();
+            pluginProperties.setDynValue("showAddOnmanagerOnStart",showAddOnmanagerOnStart);
+        }
+        Boolean showAddOnmanagerOnStartForCurrentVersion = (Boolean)showAddOnmanagerOnStart.get(pluginManager.getApplicationVersion().fullFormat());
+                
+        if( showAddOnmanagerOnStartForCurrentVersion==null || showAddOnmanagerOnStartForCurrentVersion.booleanValue() ) {
+            pluginManager.addStartupTask(
+                    "showAddOnmanagerOnStart", 
+                    new ShowAddOnManagerOnStart(),
+                    true, 
+                    500
+            );
+        }
+    }
+    
+    private static class ShowAddOnManagerOnStart implements Runnable {
+
+        public void run() {
+            ApplicationManager application = ApplicationLocator.getManager();
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            PluginsManager pluginManager = PluginsLocator.getManager();
+            PluginServices plugin = pluginManager.getPlugin(this);
+            DynObject pluginProperties = plugin.getPluginProperties();
+
+            String msg = i18nManager.getTranslation("_Instalar_complementos_adicionales_no_disponibles_durante_el_proceso_de_instalacion");
+            int resp = application.confirmDialog(
+                    msg, 
+                    i18nManager.getTranslation("_Finalizando_proceso_de_instalacion"), 
+                    JOptionPane.YES_NO_OPTION, 
+                    JOptionPane.QUESTION_MESSAGE
+            );
+            if( resp == JOptionPane.YES_OPTION ) {
+                ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+                actionManager.execute(
+                        "tools-addonsmanager",
+                        new Object[] {"skipBundleSelection"}
+                );
+            }
+            Map<String,Boolean> showAddOnmanagerOnStart = (Map<String,Boolean>) pluginProperties.getDynValue("showAddOnmanagerOnStart");
+            showAddOnmanagerOnStart.put(pluginManager.getApplicationVersion().fullFormat(), Boolean.FALSE);
+        }
+    }
+    
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("action", "edit-clear", this);
+        IconThemeHelper.registerIcon("action", "edit-copy", this);
+        IconThemeHelper.registerIcon("action", "edit-cut", this);
+        IconThemeHelper.registerIcon("action", "edit-delete", this);
+        IconThemeHelper.registerIcon("action", "edit-find", this);
+        IconThemeHelper.registerIcon("action", "edit-find-replace", this);
+        IconThemeHelper.registerIcon("action", "edit-paste", this);
+        IconThemeHelper.registerIcon("action", "edit-redo", this);
+        IconThemeHelper.registerIcon("action", "edit-select-all", this);
+        IconThemeHelper.registerIcon("action", "edit-undo", this);
+        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions", this);
+        IconThemeHelper.registerIcon("action", "document-print", this);
+
+        IconThemeHelper.registerIcon("toolbar-go", "go-next", this);
+        IconThemeHelper.registerIcon("toolbar-go", "go-previous", this);
+        IconThemeHelper.registerIcon("toolbar-go", "go-next-fast", this);
+        IconThemeHelper.registerIcon("toolbar-go", "go-previous-fast", this);
+        IconThemeHelper.registerIcon("toolbar-go", "go-first", this);
+        IconThemeHelper.registerIcon("toolbar-go", "go-last", this);
+
+    }
+
+    public void execute(String actionCommand) {
+
+    }
+
+    public boolean isEnabled() {
+        return false;
+    }
+
+    public boolean isVisible() {
+        return false;
+    }
+
+    private void addToLogInfo() {
+        String info[] = this.getStringInfo().split("\n");
+        for (int i = 0; i < info.length; i++) {
+            logger.info(info[i]);
+        }
+    }
+
+    public String getStringInfo() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        PluginsManager pluginmgr = PluginsLocator.getManager();
+        InstallerManager installmgr = InstallerLocator.getInstallerManager();
+
+        StringWriter writer = new StringWriter();
+
+        Properties props = System.getProperties();
+
+        // OS information
+        String osName = props.getProperty("os.name");
+        writer.write("OS\n");
+        writer.write("    name   : " + osName + "\n");
+        writer.write("    arch   : " + props.get("os.arch") + "\n");
+        writer.write("    version: " + props.get("os.version") + "\n");
+        if (osName.startsWith("Linux")) {
+            try {
+                String[] command = {"lsb_release", "-a"};
+                Process p = Runtime.getRuntime().exec(command);
+                InputStream is = p.getInputStream();
+                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    writer.write("    " + line + "\n");
+                }
+            } catch (Exception ex) {
+                writer.write("Can't get detailled os information (lsb_release -a).");
+            }
+        }
+
+        // JRE information
+        writer.write("JRE\n");
+        writer.write("    vendor : " + props.get("java.vendor") + "\n");
+        writer.write("    version: " + props.get("java.version") + "\n");
+        writer.write("    home   : " + props.get("java.home") + "\n");
+
+        writer.write("gvSIG\n");
+        writer.write("    version                 : " + application.getVersion().getLongFormat() + "\n");
+        writer.write("    locale language         : " + application.getLocaleLanguage() + "\n");
+        writer.write("    application forlder     : " + pluginmgr.getApplicationFolder() + "\n");
+        writer.write("    install forlder         : " + pluginmgr.getInstallFolder() + "\n");
+        writer.write("    application home forlder: " + pluginmgr.getApplicationHomeFolder() + "\n");
+        writer.write("    plugins forlder         : " + StringUtils.join(pluginmgr.getPluginsFolders()) + "\n");
+
+        try {
+            PackageInfo[] pkgs = installmgr.getInstalledPackages();
+            writer.write("Installed packages\n");
+            for (int i = 0; i < pkgs.length; i++) {
+                writer.write("    ");
+                writer.write(pkgs[i].toStringCompact());
+                writer.write("\n");
+            }
+        } catch (Throwable e) {
+            writer.write("Can't get installed package information.");
+        }
+        return writer.toString();
+    }
+
+    public void terminate() {
+        ResourceManager resMan = DALLocator.getResourceManager();
+        resMan.stopResourceCollector();
+        try {
+            resMan.dispose();
+        } catch (DisposeResorceManagerException e) {
+            logger.warn(e.getMessageStack());
+        }
+        super.terminate();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitializeApplicationExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomNext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomNext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomNext.java	(revision 42196)
@@ -0,0 +1,81 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.mapcontext.ViewPort;
+
+/**
+ * Extensi�n que cambia el extent de la vista al extent siguiente.
+ */
+public class ZoomNext extends Extension {
+
+  public void initialize() {
+    IconThemeHelper.registerIcon("action", "view-navigation-zoom-next", this);
+  }
+
+  public boolean isEnabled() {
+    ApplicationManager application = ApplicationLocator.getManager();
+
+    IView view = (IView) application.getActiveComponent(ViewDocument.class);
+    if (view == null) {
+      return false;
+    }
+
+    ViewDocument document = view.getViewDocument();
+    ViewPort vp = document.getMapContext().getViewPort();
+    return vp.getEnvelopes().hasNext();
+  }
+
+  public boolean isVisible() {
+    ApplicationManager application = ApplicationLocator.getManager();
+
+    IView view = (IView) application.getActiveComponent(ViewDocument.class);
+    if (view == null) {
+      return false;
+    }
+    ViewDocument document = view.getViewDocument();
+    return document.getMapContext().getLayers().getLayersCount() > 0;
+  }
+
+  public void execute(String actionCommand) {
+    ApplicationManager application = ApplicationLocator.getManager();
+
+    IView view = (IView) application.getActiveComponent(ViewDocument.class);
+    if (view == null) {
+      return;
+    }
+    ViewDocument document = view.getViewDocument();
+    ViewPort vp = document.getMapContext().getViewPort();
+
+    vp.setNextEnvelope();
+    document.setModified(true);
+
+    ApplicationLocator.getManager().refreshMenusAndToolBars();
+  }
+}
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewPropertiesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewPropertiesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewPropertiesExtension.java	(revision 42196)
@@ -0,0 +1,78 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.preferences.IPreference;
+import org.gvsig.andami.preferences.IPreferenceExtension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.preferencespage.LayerOrderPage;
+import org.gvsig.app.gui.preferencespage.ViewBehaviorPage;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.app.project.documents.view.gui.ViewProperties;
+
+public class ViewPropertiesExtension extends Extension implements IPreferenceExtension {
+
+    private ViewBehaviorPage vb = new ViewBehaviorPage();
+    private LayerOrderPage lo_page = new LayerOrderPage();
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("preferences", "grid-preferences", this);
+        IconThemeHelper.registerIcon("preferences", "layer-order-preferences", this);
+    }
+
+    public void execute(String s) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+
+        if (s.equalsIgnoreCase("view-properties")) {
+            ViewProperties viewProperties = new ViewProperties(document);
+            application.getUIManager().addWindow(viewProperties);
+            if (viewProperties.isAcceppted()) {
+                document.setModified(true);
+            }
+        }
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        return application.getActiveComponent(ViewDocument.class) != null;
+    }
+
+    public IPreference[] getPreferencesPages() {
+        return new IPreference[]{vb, lo_page};
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewPropertiesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayer.java	(revision 42196)
@@ -0,0 +1,265 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.awt.Component;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerAddLayerWizardPanel;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extensi�n que abre un di�logo para seleccionar la capa o capas que se
+ * quieren anadir a la vista.
+ *
+ */
+public class AddLayer extends Extension {
+    private static final Logger logger = LoggerFactory.getLogger(AddLayer.class);
+    
+    private static ArrayList<Class<? extends WizardPanel>> wizardStack = null;
+
+    static {
+        AddLayer.wizardStack = new ArrayList<Class<? extends WizardPanel>>();
+		// Anadimos el panel al wizard de cargar capa. (Esto es temporal hasta que
+        // el actual sea totalmente extensible)
+        AddLayer.addWizard(FilesystemExplorerAddLayerWizardPanel.class);
+    }
+
+    public static void addWizard(Class<? extends WizardPanel> wpClass) {
+        AddLayer.wizardStack.add(wpClass);
+    }
+
+    private static WizardPanel getInstance(int i, MapControl mapControl)
+            throws IllegalArgumentException, SecurityException,
+            InstantiationException, IllegalAccessException,
+            InvocationTargetException, NoSuchMethodException {
+        Class<? extends WizardPanel> wpClass = AddLayer.wizardStack.get(i);
+        Object[] params = {};
+        WizardPanel wp = wpClass.getConstructor()
+                .newInstance(params);
+        wp.setMapCtrl(mapControl);
+        wp.initWizard();
+
+        return wp;
+    }
+
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        return application.getActiveComponent(ViewDocument.class) != null;
+    }
+
+    public void postInitialize() {
+        super.postInitialize();
+    }
+
+    public static void checkProjection(FLayer lyr, ViewPort viewPort) {
+        if (lyr instanceof FLayers) {
+            FLayers layers = (FLayers) lyr;
+            for (int i = 0; i < layers.getLayersCount(); i++) {
+                checkProjection(layers.getLayer(i), viewPort);
+            }
+        }
+        if (lyr instanceof FLyrVect) {
+            FLyrVect lyrVect = (FLyrVect) lyr;
+            IProjection proj = lyr.getProjection();
+            // Comprobar que la projecci�n es la misma que la vista
+            if (proj == null) {
+		// SUPONEMOS que la capa est� en la proyecci�n que
+                // estamos pidiendo (que ya es mucho suponer, ya).
+                lyrVect.setProjection(viewPort.getProjection());
+                return;
+            }
+            int option = JOptionPane.YES_OPTION;
+            if (proj != viewPort.getProjection()) {
+                option = JOptionPane.showConfirmDialog((Component) PluginServices.getMainFrame(), PluginServices
+                        .getText(AddLayer.class, "reproyectar_aviso") + "\n" + PluginServices.getText(AddLayer.class, "Capa") + ": " + lyrVect.getName(), PluginServices
+                        .getText(AddLayer.class, "reproyectar_pregunta"),
+                        JOptionPane.YES_NO_OPTION);
+
+                if (option != JOptionPane.OK_OPTION) {
+                    return;
+                }
+
+                ICoordTrans ct = proj.getCT(viewPort.getProjection());
+                lyrVect.setCoordTrans(ct);
+                System.err.println("coordTrans = " + proj.getAbrev() + " "
+                        + viewPort.getProjection().getAbrev());
+            }
+        }
+
+    }
+
+    public void execute(String actionCommand) {
+        this.execute(actionCommand, null);
+    }
+
+    public void execute(String command, Object[] args) {
+        List<File> files = null;
+        if( args!=null && args.length>=1 && args[0] instanceof List ) {
+            files = (List<File>) args[0];
+        }
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        
+        MapControl mapControl = view.getMapControl();
+        this.doAddLayers(mapControl, mapControl.getMapContext(), files);
+        mapControl.getMapContext().callLegendChanged();
+        document.setModified(true);
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * Creates FOpenDialog, and adds file tab, and additional registered tabs
+     *
+     * @return FOpenDialog
+     */
+    private AddLayerDialog createFOpenDialog(MapControl mapControl, MapContext mapContext, List<File> files) {
+        AddLayerDialog fopen = new AddLayerDialog();
+        for (int i = 0; i < wizardStack.size(); i++) {
+            WizardPanel wp;
+            try {
+                Class<? extends WizardPanel> wpClass = AddLayer.wizardStack.get(i);
+                Object[] params = {};
+                wp = wpClass.getConstructor()
+                        .newInstance(params);
+                wp.setMapCtrl(mapControl);
+                wp.setMapContext(mapContext);
+                wp.initWizard();
+                if( wp instanceof FilesystemExplorerWizardPanel && files!=null && !files.isEmpty() ) {
+                    FilesystemExplorerWizardPanel fswp = (FilesystemExplorerWizardPanel)wp;
+                    fswp.addFiles(files);
+                }
+
+                fopen.addWizardTab(wp.getTabName(), wp);
+            } catch (Exception e) {
+                logger.warn("Can't create layer open dialog.",e);
+            }
+        }
+        fopen.updateOkButtonState();
+        return fopen;
+    }
+
+    /**
+     * Adds to mapcontrol all layers selected by user in the specified
+     * WizardPanel.
+     *
+     * @param mapControl MapControl on which we want to load user selected
+     * layers.
+     * @param wizardPanel WizardPanel where user selected the layers to load
+     * @return
+     */
+    private boolean loadGenericWizardPanelLayers(MapContext mapContext, WizardPanel wp, boolean mapControlAvailable) {
+        wp.setMapContext(mapContext);
+        wp.executeWizard();
+        return true;
+    }
+
+    /**
+     * Opens the AddLayer dialog, and adds the selected layers to the provided
+     * MapContext.
+     *
+     * This method is useful when we want to add a layer but we don't have an
+     * associated View. If a View or a MapControl is available, you will
+     * usually prefer the {@link #addLayers(MapControl)} method.
+     * 
+     * @param mapContext The MapContext to add the layers to
+     * @return <code>true</code> if any layer has been added.
+     */
+    public boolean addLayers(MapContext mapContext) {
+    	return doAddLayers(null, mapContext, null);
+    }
+
+    /**
+     * Opens the AddLayer dialog, and adds the selected layers to the provided
+     * mapControl.
+     * 
+     * @param mapControl The MapControl to add the layers to
+     * 
+     * @return <code>true</code> if any layer has been added.
+     */
+    public boolean addLayers(MapControl mapControl) {
+    	return doAddLayers(mapControl, mapControl.getMapContext(), null);
+    }
+    
+    private boolean doAddLayers(MapControl mapControl, MapContext mapContext, List<File>files) {
+        AddLayerDialog fopen = null;
+        try {
+            fopen = createFOpenDialog(mapControl, mapContext, files);
+            PluginServices.getMDIManager().addWindow(fopen);
+
+            if (fopen.isAccepted()) {
+                if (fopen.getSelectedTab() instanceof WizardPanel) {
+                    WizardPanel wp = (WizardPanel) fopen.getSelectedTab();
+                    wp.execute();
+                    return true;
+                } else {
+                    JOptionPane.showMessageDialog((Component) PluginServices
+                            .getMainFrame(), PluginServices.getText(this, "ninguna_capa_seleccionada"));
+                }
+            }
+            return false;
+        } finally {
+            if (fopen != null) {
+                fopen.dispose();
+                fopen = null;
+            }
+        }
+    }
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "view-layer-add", this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/Version.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/Version.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/Version.java	(revision 42196)
@@ -0,0 +1,105 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import java.util.StringTokenizer;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.creation.MakePluginPackageService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * gvSIG application version information.
+ * 
+ * @author gvSIG Team
+ * @version $Id: Version.java 39065 2012-10-16 11:26:12Z jldominguez $
+ */
+public class Version {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Version.class);
+
+    private org.gvsig.installer.lib.api.Version version;
+
+    @Deprecated
+    public static String format() {
+        return ApplicationLocator.getManager().getVersion().getFormat();
+    }
+
+    @Deprecated
+    public static String longFormat() {
+        return ApplicationLocator.getManager().getVersion().getLongFormat();
+    }
+
+    @Deprecated
+    public static String getBuild() {
+        return ApplicationLocator.getManager().getVersion().getBuildId();
+    }
+
+    /**
+     * Constructor.
+     * Loads version information from the application installation information.
+     */
+    public Version() {
+        
+        PackageInfo pinfo = PluginsLocator.getManager().getPackageInfo(InitializeApplicationExtension.class);
+        this.version = pinfo.getVersion();
+        LOG.debug("Loaded version information: {}", getLongFormat());
+    }
+
+    public int getMinor() {
+        return this.version.getMinor();
+    }
+
+    public int getMajor() {
+        return this.version.getMajor();
+    }
+
+    public int getRelease() {
+        return this.version.getRevision();
+    }
+
+    public String getBuildId() {
+        return Integer.toString(this.version.getBuild());
+    }
+
+    public String toString() {
+        return getLongFormat();
+    }
+
+    public String getFormat() {
+        return getMajor() + "." + getMinor() + "." + getRelease();
+    }
+
+    public String getLongFormat() {
+        return version.toString(); 
+    }
+    
+    public org.gvsig.installer.lib.api.Version asInstallerVersion() {
+        return version;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/Version.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.java	(revision 42196)
@@ -0,0 +1,171 @@
+package org.gvsig.app.extension.dispose;
+
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+
+public class DisposablesDoListLayout extends JPanel
+{
+   JButton disposeButton = new JButton();
+   JButton closeButton = new JButton();
+   JButton disposeAllButton = new JButton();
+   JLabel messageLabel = new JLabel();
+   JButton refreshButton = new JButton();
+   JSplitPane splitPanel = new JSplitPane();
+
+   /**
+    * Default constructor
+    */
+   public DisposablesDoListLayout()
+   {
+      initializePanel();
+   }
+
+   /**
+    * Adds fill components to empty cells in the first row and first column of the grid.
+    * This ensures that the grid spacing will be the same as shown in the designer.
+    * @param cols an array of column indices in the first row where fill components should be added.
+    * @param rows an array of row indices in the first column where fill components should be added.
+    */
+   void addFillComponents( Container panel, int[] cols, int[] rows )
+   {
+      Dimension filler = new Dimension(10,10);
+
+      boolean filled_cell_11 = false;
+      CellConstraints cc = new CellConstraints();
+      if ( cols.length > 0 && rows.length > 0 )
+      {
+         if ( cols[0] == 1 && rows[0] == 1 )
+         {
+            /** add a rigid area  */
+            panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
+            filled_cell_11 = true;
+         }
+      }
+
+      for( int index = 0; index < cols.length; index++ )
+      {
+         if ( cols[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
+      }
+
+      for( int index = 0; index < rows.length; index++ )
+      {
+         if ( rows[index] == 1 && filled_cell_11 )
+         {
+            continue;
+         }
+         panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
+      }
+
+   }
+
+   /**
+    * Helper method to load an image file from the CLASSPATH
+    * @param imageName the package and name of the file to load relative to the CLASSPATH
+    * @return an ImageIcon instance with the specified image file
+    * @throws IllegalArgumentException if the image resource cannot be loaded.
+    */
+   public ImageIcon loadImage( String imageName )
+   {
+      try
+      {
+         ClassLoader classloader = getClass().getClassLoader();
+         java.net.URL url = classloader.getResource( imageName );
+         if ( url != null )
+         {
+            ImageIcon icon = new ImageIcon( url );
+            return icon;
+         }
+      }
+      catch( Exception e )
+      {
+         e.printStackTrace();
+      }
+      throw new IllegalArgumentException( "Unable to load image: " + imageName );
+   }
+
+   /**
+    * Method for recalculating the component orientation for 
+    * right-to-left Locales.
+    * @param orientation the component orientation to be applied
+    */
+   public void applyComponentOrientation( ComponentOrientation orientation )
+   {
+      // Not yet implemented...
+      // I18NUtils.applyComponentOrientation(this, orientation);
+      super.applyComponentOrientation(orientation);
+   }
+
+   public JPanel createPanel()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("Disposables do list");
+      jpanel1.add(jlabel1,cc.xywh(2,2,8,1));
+
+      disposeButton.setActionCommand("Dispose");
+      disposeButton.setEnabled(false);
+      disposeButton.setName("disposeButton");
+      disposeButton.setText("Dispose");
+      jpanel1.add(disposeButton,cc.xy(7,6));
+
+      closeButton.setActionCommand("Close");
+      closeButton.setName("closeButton");
+      closeButton.setText("Close");
+      jpanel1.add(closeButton,cc.xy(9,6));
+
+      disposeAllButton.setActionCommand("Dispose all");
+      disposeAllButton.setName("disposeAllButton");
+      disposeAllButton.setText("Dispose all");
+      jpanel1.add(disposeAllButton,cc.xy(5,6));
+
+      messageLabel.setName("messageLabel");
+      jpanel1.add(messageLabel,cc.xy(2,6));
+
+      refreshButton.setActionCommand("Refresh");
+      refreshButton.setName("refreshButton");
+      refreshButton.setText("Refresh");
+      jpanel1.add(refreshButton,cc.xy(3,6));
+
+      splitPanel.setDividerLocation(120);
+      splitPanel.setLastDividerLocation(-1);
+      splitPanel.setName("splitPanel");
+      splitPanel.setOneTouchExpandable(true);
+      splitPanel.setOrientation(0);
+      jpanel1.add(splitPanel,cc.xywh(2,4,8,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10 },new int[]{ 1,2,3,4,5,6,7 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposableManagementExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposableManagementExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposableManagementExtension.java	(revision 42196)
@@ -0,0 +1,275 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.app.extension.dispose;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.JTextPane;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposableInfo;
+import org.gvsig.tools.dispose.DisposableManager;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * An extension to view and manage {@link Disposable} objects which are still
+ * bound.
+ *
+ * TODO: remove this extension and replace with a better one, maybe based on
+ * scripting.
+ *
+ * @author 2009- <a href="cordinyana@gvsig.org">C�sar Ordi�ana</a> - gvSIG team
+ */
+public class DisposableManagementExtension extends Extension {
+
+    public static String SHOW_COMMAND = "tools-devel-disposables-show-pendings";
+    public static String DISPOSE_ALL_COMMAND = "tools-devel-disposables-free-all";
+
+    private static final Logger LOG
+            = LoggerFactory.getLogger(DisposableManagementExtension.class);
+
+    public void initialize() {
+        // Nothing to do
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+    }
+
+    public void execute(String actionCommand) {
+
+        if (DISPOSE_ALL_COMMAND.equals(actionCommand)) {
+            disposeAll();
+        } else {
+            if (SHOW_COMMAND.equals(actionCommand)) {
+                DisposablesDoList panel = new DisposablesDoList();
+                panel.showPanel();
+            }
+        }
+    }
+
+    private void disposeAll() {
+        DisposableManager manager;
+        manager = ToolsLocator.getDisposableManager();
+        try {
+            manager.releaseAll();
+        } catch (BaseException ex) {
+            LOG.error("Error disposing all bound disposable objects", ex);
+        }
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+
+    class DisposablesDoList extends DisposablesDoListLayout {
+
+        private DisposableManager manager;
+        private JList disposablesList = null;
+        private JTextPane infoTextArea = null;
+
+        public DisposablesDoList() {
+            manager = ToolsLocator.getDisposableManager();
+            initComponents();
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    fillList();
+                }
+            });
+        }
+
+        private void initComponents() {
+            this.setPreferredSize(new Dimension(600, 550));
+            this.disposablesList = new JList();
+            this.infoTextArea = new JTextPane();
+            this.infoTextArea.setContentType("text/html");
+            JScrollPane listScroller = new JScrollPane(this.disposablesList);
+            JScrollPane infoScroller = new JScrollPane(this.infoTextArea);
+            this.splitPanel.setLeftComponent(listScroller);
+            this.splitPanel.setRightComponent(infoScroller);
+
+            this.closeButton.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent arg0) {
+                    closeWindow();
+                }
+            });
+            this.closeButton.setEnabled(true);
+            this.disposeAllButton.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    disposeAll();
+                    refreshList();
+                }
+            });
+            this.disposeAllButton.setEnabled(true);
+            this.disposeButton.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    disposeSelecteds();
+                    refreshList();
+                }
+            });
+            this.disposeButton.setEnabled(true);
+            this.disposablesList.addListSelectionListener(new ListSelectionListener() {
+                public void valueChanged(ListSelectionEvent arg0) {
+                    ListItemSelected();
+                }
+            });
+            this.disposablesList.setEnabled(true);
+            this.refreshButton.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent arg0) {
+                    refreshList();
+                }
+            });
+            this.refreshButton.setEnabled(true);
+        }
+
+        private void refreshList() {
+            fillList();
+        }
+
+        private void ListItemSelected() {
+            DisposableInfoItem item = (DisposableInfoItem) disposablesList.getSelectedValue();
+            if (item == null) {
+                this.infoTextArea.setText("");
+            } else {
+                this.infoTextArea.setText(item.getAllInformation());
+                this.infoTextArea.setCaretPosition(0);
+            }
+        }
+
+        private void fillList() {
+            Set<DisposableInfo> disposables
+                    = (Set<DisposableInfo>) manager.getBoundDisposables();
+
+            this.messageLabel.setText("Pending " + disposables.size());
+            DefaultListModel listmodel = new DefaultListModel();
+            for (Iterator<DisposableInfo> iterator = disposables.iterator(); iterator.hasNext();) {
+                DisposableInfo disposableInfo = iterator.next();
+                listmodel.addElement(new DisposableInfoItem(disposableInfo));
+            }
+            this.disposablesList.setModel(listmodel);
+            this.infoTextArea.setText("");
+        }
+
+        class DisposableInfoItem {
+
+            DisposableInfo disposableInfo = null;
+
+            DisposableInfoItem(DisposableInfo disposableInfo) {
+                this.disposableInfo = disposableInfo;
+            }
+
+            public Disposable getDisposable() {
+                return this.disposableInfo.getDisposable();
+            }
+
+            public DisposableInfo getDisposableInfo() {
+                return this.disposableInfo;
+            }
+
+            public String toString() {
+                if (this.disposableInfo == null) {
+                    return "(null)";
+                }
+                Disposable d = this.disposableInfo.getDisposable();
+                if (d == null) {
+                    return "(null - disposable)";
+                }
+                String msg = d.getClass().getName() + " - " + d.toString();
+                return msg;
+            }
+
+            public String getAllInformation() {
+                StringBuffer buffer = new StringBuffer();
+                Disposable disposable = this.disposableInfo.getDisposable();
+
+                buffer.append("<b>Class</b>: ").append(disposable.getClass().getName()).append("<br>\n");
+                buffer.append("<b>References</b>: ").append(this.disposableInfo.getReferencesCount()).append("<br>\n");
+                buffer.append("<b>toString</b>: ").append(disposable.toString()).append("<br>\n");
+
+                buffer.append("<b>Binded from (stack)</b>:<br>\n");
+                try {
+                    StackTraceElement[] stackTrace = disposableInfo
+                            .getBindDisposableStackTrace();
+                    for (int i = 0; i < stackTrace.length; i++) {
+                        buffer.append("&nbsp;&nbsp;").append(stackTrace[i].toString().replaceAll("[<]", "&lt;").replace("[>]", "&gt;")).append("<br>\n");
+                    }
+                } catch (Exception ex) {
+                    buffer.append("<br>\n<br>\nError showing stack.<br>\n").append(ex.getMessage());
+                }
+                return buffer.toString();
+            }
+        }
+
+        public void closeWindow() {
+            this.setVisible(false);
+        }
+
+        public void disposeAll() {
+            try {
+                manager.releaseAll();
+            } catch (BaseException ex) {
+                LOG.error("Error disposing all bound disposable objects", ex);
+            }
+        }
+
+        public void disposeSelecteds() {
+            Object[] selection = this.disposablesList.getSelectedValues();
+            for (int i = 0; i < selection.length; i++) {
+                DisposableInfoItem item = (DisposableInfoItem) selection[i];
+                this.manager.release(item.getDisposable());
+            }
+            refreshList();
+        }
+
+        public void showPanel() {
+            WindowManager wm = ToolsSwingLocator.getWindowManager();
+            wm.showWindow(this, "Disposable do list", WindowManager.MODE.WINDOW);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposableManagementExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.jfrm
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.jfrm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RestoreViewInfoExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RestoreViewInfoExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RestoreViewInfoExtension.java	(revision 42196)
@@ -0,0 +1,82 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.extension;
+
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowTransform;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+public class RestoreViewInfoExtension extends Extension{
+    private static final Logger logger = LoggerFactory
+            .getLogger(RestoreViewInfoExtension.class);
+    
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		IWindow view = PluginServices.getMDIManager().getFocusWindow();
+        if (s.equalsIgnoreCase("window-restore-from-tool")){
+        	IWindowTransform vt=(IWindowTransform)view;
+        	vt.restore();
+        }
+        PluginServices.getMainFrame().enableControls();
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+       return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager().getFocusWindow();
+		if (f == null) {
+			return false;
+		}
+		if (f instanceof IWindowTransform) {
+			IWindowTransform vt=(IWindowTransform)f;
+			if (vt.isPalette())
+				return true;
+		}
+		return false;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RestoreViewInfoExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewProjectWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewProjectWindow.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewProjectWindow.java	(revision 42196)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+
+
+/**
+ * Extensi�n que abre la ventana de gestor de proyecto.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ViewProjectWindow extends Extension {
+	/**
+	 * @see com.iver.mdiApp.plugins.IExtension#updateUI(java.lang.String)
+	 */
+	public void execute(String arg0) {
+		if (arg0.equalsIgnoreCase("show-project-manager")) {
+			ProjectExtension pe = (ProjectExtension) PluginServices.getExtension(org.gvsig.app.extension.ProjectExtension.class);
+			pe.showProjectWindow();
+		}
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+	}
+
+	public void postInitialize() {
+		
+	}
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		return true;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewProjectWindow.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/loaders/PanelGroupLoaderFromExtensionPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/loaders/PanelGroupLoaderFromExtensionPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/loaders/PanelGroupLoaderFromExtensionPoint.java	(revision 42196)
@@ -0,0 +1,176 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.panelGroup.loaders;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntLoadPanelException;
+import org.gvsig.gui.beans.panelGroup.exceptions.PanelBaseException;
+import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
+import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * <p>
+ * Panel loader version that loads {@link AbstractPanel AbstractPanel} classes
+ * registered as a extension point.
+ * </p>
+ *
+ * @see IPanelGroupLoader
+ *
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class PanelGroupLoaderFromExtensionPoint implements IPanelGroupLoader, Serializable {
+    private static final Logger logger = LoggerFactory
+            .getLogger(PanelGroupLoaderFromExtensionPoint.class);
+    
+	private static final long serialVersionUID = 6810333457209196344L;
+
+	/**
+	 * Extension point id
+	 */
+	private String id;
+
+	/**
+	 * <p>
+	 * Initializes this loader.
+	 * </p>
+	 *
+	 * @param id
+	 *            extension point identifier
+	 */
+	public PanelGroupLoaderFromExtensionPoint(String id) {
+		this.id = id;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader#loadPanels(java.util.ArrayList)
+	 */
+	public void loadPanels(ArrayList<IPanel> panels) throws ListCouldntLoadPanelException {
+		if (id == null) {
+			return;
+		}
+
+		ExtensionPointManager ePManager = ToolsLocator
+				.getExtensionPointManager();
+		ListCouldntLoadPanelException lCLPException = null;
+		Iterator<Extension> iterator = null;
+
+		try {
+			if (!ePManager.has(id)) {
+				return;
+			}
+
+			iterator = ePManager.get(id).iterator();
+		} catch (Exception e) {
+			logger.debug(PluginServices
+                    .getText(this, "panel_loading_exception"), e);
+
+			if ( lCLPException == null ) {
+				lCLPException = new ListCouldntLoadPanelFromExtensionPointException();
+			}
+
+			lCLPException.add(e);
+		}
+
+		AbstractPanel panel = null;
+
+		while (iterator.hasNext()) {
+			try {
+
+				panel = (AbstractPanel) ((iterator.next()).create());
+				panels.add(panel);
+			} catch (Exception e) {
+				logger.debug(PluginServices.getText(this,
+                        "panel_loading_exception"), e);
+
+				if ( lCLPException == null ) {
+					lCLPException = new ListCouldntLoadPanelFromExtensionPointException();
+				}
+
+				PanelBaseException bew = null;
+
+				if (panel == null) {
+					bew = new PanelBaseException(e, "");
+				} else {
+					bew = new PanelBaseException(e, panel.getLabel());
+				}
+
+				lCLPException.add(bew);
+			}
+		}
+
+		if ( lCLPException != null ) {
+			throw lCLPException;
+		}
+
+	}
+
+	/**
+	 * <p>
+	 * Exception produced when fails the load of a panel by a loader of type
+	 * <code>PanelGroupLoaderFromExtensionPoint</code>.
+	 * </p>
+	 *
+	 * @version 27/11/2007
+	 * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+	 */
+	public class ListCouldntLoadPanelFromExtensionPointException extends ListCouldntLoadPanelException {
+		private static final long serialVersionUID = -1513294728326593385L;
+
+		private static final String formatString = "Couldn't load some panels from an extension point of classes:";
+		private static final String messageKey = "couldnt_load_panels_from_extension_point_exception";
+
+		/**
+		 * <p>
+		 * Creates an initializes a new instance of
+		 * <code>ListCouldntLoadPanelFromExtensionPointException</code>.
+		 * </p>
+		 */
+		public ListCouldntLoadPanelFromExtensionPointException() {
+			super(formatString, messageKey, serialVersionUID);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see org.gvsig.tools.exceptions.BaseException#values()
+		 */
+		protected Map<String, String> values() {
+			return null;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/loaders/PanelGroupLoaderFromExtensionPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/PanelGroupDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/PanelGroupDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/PanelGroupDialog.java	(revision 42196)
@@ -0,0 +1,594 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.panelGroup;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.io.Serializable;
+import java.util.Hashtable;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
+import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
+import org.gvsig.gui.beans.buttonspanel.IButtonsPanel;
+import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
+import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
+import org.gvsig.gui.beans.panelGroup.IPanelGroup;
+import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupException;
+import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupGUIException;
+import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntAddPanelException;
+import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * <p>Graphical component that is represented as an {@link IWindow IWindow}, and that has two immediate internal
+ *  panels, the top is a {@link PanelGroup PanelGroup}, and the bottom is a {@link PanelGroupDialog PanelGroupDialog}
+ *  of <code>PanelGroupDialog.BUTTONS_ACCEPTCANCELAPPLY</code> type.</p>
+ *
+ * @see DefaultButtonsPanel
+ *
+ * @version 15/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class PanelGroupDialog extends DefaultButtonsPanel implements ButtonsPanelListener, IWindow, IWindowListener, IPanelGroup, IButtonsPanel, Serializable {
+	private static final long serialVersionUID = 6267404338808012765L;
+
+	/**
+	 * <p>Default width.</p>
+	 */
+	protected static int defaultWidth = 530;
+
+	/**
+	 * <p>Default height.</p>
+	 */
+	protected static int defaultHeight = 432;
+
+	/**
+	 * <p>This graphical component has a panel that allows work {@link IPanel IPanel}.</p>
+	 *
+	 * @see #getPanelGroup()
+	 */
+	protected IPanelGroup panelGroup;
+
+	/**
+	 * <p>Properties about the managing of this dialog by <i>Andami</i>.</p>
+	 */
+	private WindowInfo windowInfo;
+
+	/**
+	 * <p>Default constructor with two parameters, that creates a panel with an {@link AbstractPanelGroup AbstractPanelGroup}
+	 *  on top and another with <i>accept</i>, <i>apply</i>, and <i>cancel</i> buttons on bottom.</p>
+	 *
+	 * @param windowTitle title for this <code>IWindow</code>
+	 * @param PanelGroup kind of panel for work with this <code>IWindow</code>
+	 */
+	public PanelGroupDialog(String windowTitle, IPanelGroup panelGroup) {
+		super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
+
+		windowInfo = new WindowInfo();
+		windowInfo.setTitle(PluginServices.getText(this, windowTitle));
+		windowInfo.setWidth(defaultWidth);
+		windowInfo.setHeight(defaultHeight);
+
+		this.panelGroup = panelGroup;
+
+		initialize();
+	}
+
+	/**
+	 * <p>Default constructor with six parameters, that creates a panel with an {@link AbstractPanelGroup AbstractPanelGroup}
+	 *  on top and another with <i>accept</i>, <i>apply</i>, and <i>cancel</i> buttons on bottom.</p>
+	 * <p>Last parameter is the {@link PanelGroup PanelGroup} graphical component that
+	 *  this panel will have, and the previous are information to initialize this {@link IWindow IWindow}.</p>
+	 *
+	 * @param additionalInfo additional information about this <code>IWindow</code>
+	 * @param windowTitle title for this <code>IWindow</code>
+	 * @param width width for this component
+	 * @param height height for this component
+	 * @param windowInfoProperties properties about the managing of this dialog by <i>Andami</i>
+	 * @param PanelGroup kind of panel for work with this <code>IWindow</code>
+	 */
+	public PanelGroupDialog(String additionalInfo, String windowTitle, int  width, int height, byte windowInfoProperties, IPanelGroup panelGroup) {
+		super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
+
+		windowInfo = new WindowInfo(windowInfoProperties);
+		windowInfo.setAdditionalInfo(additionalInfo);
+		windowInfo.setTitle(PluginServices.getText(this, windowTitle));
+		windowInfo.setWidth(width);
+		windowInfo.setHeight(height);
+
+		this.panelGroup = panelGroup;
+
+		initialize();
+	}
+
+	/**
+	 * <p>This method is used to execute initialization tasks of this graphical component.</p>
+	 */
+	private void initialize() {
+		setLayout(new BorderLayout());
+		addButtonPressedListener(this);
+
+		this.panelGroup.setParentPanelGroup(this);
+
+		// Mask possible extra exceptions
+		if (panelGroup != null) {
+			add((AbstractPanelGroup)panelGroup, BorderLayout.CENTER);
+
+			// Holds the preferred size
+			if ((windowInfo.getWidth() > getPreferredSize().width) || (windowInfo.getHeight() > getPreferredSize().height)) {
+				setPreferredSize(new Dimension(Math.max(windowInfo.getWidth(), getWidth()), Math.max(windowInfo.getHeight(), getHeight())));
+			}
+		}
+	}
+
+	/**
+	 * <p>Determinates if this panel is resizable or not.</p>
+	 *
+	 * @return <code>true</code> if it's resizable; <code>false</code> otherwise.
+	 */
+	public boolean isResizable() {
+		return windowInfo.isResizable();
+	}
+
+	/**
+	 * <p>Closes this {@link IWindow IWindow}.</p>
+	 */
+	public void close() {
+		PluginServices.getMDIManager().closeWindow(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		return windowInfo;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+	 */
+	public void actionButtonPressed(ButtonsPanelEvent e) {
+		// Masks possible extra exceptions
+		if (panelGroup != null) {
+			switch (e.getButton()) {
+			case ButtonsPanel.BUTTON_ACCEPT:
+				accept();
+				close();
+				break;
+			case ButtonsPanel.BUTTON_APPLY:
+				apply();
+				break;
+			case ButtonsPanel.BUTTON_CANCEL:
+				cancel();
+				close();
+				break;
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.andami.ui.mdiManager.IWindowListener#windowActivated()
+	 */
+	public void windowActivated() {}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.andami.ui.mdiManager.IWindowListener#windowClosed()
+	 */
+	public void windowClosed() {
+		// Masks possible extra exceptions
+		if (panelGroup != null) {
+			if (!panelGroup.isAccepted()) {
+				panelGroup.cancel();
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#accept()
+	 */
+	public void accept() {
+		panelGroup.accept();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#addPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	public void addPanel(IPanel panel) throws BaseException {
+		panelGroup.addPanel(panel);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#apply()
+	 */
+	public void apply() {
+		panelGroup.apply();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#cancel()
+	 */
+	public void cancel() {
+		panelGroup.cancel();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getActivePanel()
+	 */
+	public IPanel getActivePanel() {
+		return panelGroup.getActivePanel();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getProperties()
+	 */
+	public Hashtable getProperties() {
+		return panelGroup.getProperties();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getReference()
+	 */
+	public Object getReference() {
+		return panelGroup.getReference();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#updateReference(java.lang.Object)
+	 */
+	public void updateReference(Object reference) {
+		panelGroup.updateReference(reference);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isAccepted()
+	 */
+	public boolean isAccepted() {
+		return panelGroup.isAccepted();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#loadPanels(org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader)
+	 */
+	public void loadPanels(IPanelGroupLoader loader) throws ListCouldntAddPanelException, EmptyPanelGroupException, EmptyPanelGroupGUIException {
+		try {
+			panelGroup.loadPanels(loader);
+
+			if (panelGroup.getPanelInGUICount() == 0) {
+				close();
+			}
+		}
+		catch (BaseException be) {
+			be.setTranslator(new Messages());
+
+			JOptionPane.showMessageDialog(this, be.getLocalizedMessageStack());
+
+			// Don't show the dialog if there is no panels in the GUI
+			if (panelGroup.getPanelInGUICount() == 0) {
+				close();
+			}
+		}
+		catch (Exception e) {
+			NotificationManager.showMessageError(e.getMessage(), e);
+
+			// Don't show the dialog if there is no panels in the GUI
+			if (panelGroup.getPanelInGUICount() == 0) {
+				close();
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#removePanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	public void removePanel(IPanel panel) {
+		panelGroup.removePanel(panel);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel)
+	 */
+	public boolean isPanelInGUI(IPanel panel) {
+		return panelGroup.isPanelInGUI(panel);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#setPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel, boolean)
+	 */
+	public void setPanelInGUI(IPanel panel, boolean b) {
+		panelGroup.setPanelInGUI(panel, b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelCount()
+	 */
+	public int getPanelCount() {
+		return panelGroup.getPanelCount();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelInGUICount()
+	 */
+	public int getPanelInGUICount() {
+		return panelGroup.getPanelInGUICount();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#setPreferredSize(java.awt.Dimension)
+	 */
+	public void setPreferredSize(Dimension preferredSize) {
+		super.setPreferredSize(preferredSize);
+
+		windowInfo.setWidth(preferredSize.width);
+		windowInfo.setHeight(preferredSize.height);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#setParentPanelGroup(org.gvsig.gui.beans.panelGroup.IPanelGroup)
+	 */
+	public void setParentPanelGroup(IPanelGroup parent) {
+		panelGroup.setParentPanelGroup(parent);
+
+//		this.addComponentListener(new ComponentAdapter())
+	}
+
+	///// BEGIN: Buttons Enable/Disable functionality /////
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledAcceptButton()
+	 */
+	public boolean isEnabledAcceptButton() {
+		return getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).isEnabled();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledApplyButton()
+	 */
+	public boolean isEnabledApplyButton() {
+		return getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).isEnabled();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledCancelButton()
+	 */
+	public boolean isEnabledCancelButton() {
+		return getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL).isEnabled();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledCloseButton()
+	 */
+	public boolean isEnabledCloseButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledExitButton()
+	 */
+	public boolean isEnabledExitButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledHideDetailsButton()
+	 */
+	public boolean isEnabledHideDetailsButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledNoButton()
+	 */
+	public boolean isEnabledNoButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledPauseButton()
+	 */
+	public boolean isEnabledPauseButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledRestartButton()
+	 */
+	public boolean isEnabledRestartButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSaveButton()
+	 */
+	public boolean isEnabledSaveButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSeeDetailsButton()
+	 */
+	public boolean isEnabledSeeDetailsButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledYesButton()
+	 */
+	public boolean isEnabledYesButton() {
+		/* Unimplemented */
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledAcceptButton(boolean)
+	 */
+	public void setEnabledAcceptButton(boolean b) {
+		getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).setEnabled(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledApplyButton(boolean)
+	 */
+	public void setEnabledApplyButton(boolean b) {
+		getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setEnabled(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledCancelButton(boolean)
+	 */
+	public void setEnabledCancelButton(boolean b) {
+		getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL).setEnabled(b);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledCloseButton(boolean)
+	 */
+	public void setEnabledCloseButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledExitButton(boolean)
+	 */
+	public void setEnabledExitButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledHideDetailsButton(boolean)
+	 */
+	public void setEnabledHideDetailsButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledNoButton(boolean)
+	 */
+	public void setEnabledNoButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledPauseButton(boolean)
+	 */
+	public void setEnabledPauseButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledRestartButton(boolean)
+	 */
+	public void setEnabledRestartButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSaveButton(boolean)
+	 */
+	public void setEnabledSaveButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSeeDetailsButton(boolean)
+	 */
+	public void setEnabledSeeDetailsButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledYesButton(boolean)
+	 */
+	public void setEnabledYesButton(boolean b) {
+		/* Unimplemented */
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.PROPERTIES_PROFILE;
+	}
+	///// END: Buttons Enable/Disable functionality /////
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/PanelGroupDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareLayer.java	(revision 42196)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.prepareAction;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+
+public interface PrepareLayer extends ExtensionBuilder {
+	/**
+	 * Returns the layer input or a new processed layer
+	 * @param layer
+	 * @param context
+	 * @return
+	 * @throws BaseException
+	 */
+	FLayer prepare(FLayer layer, PrepareContextView context)
+			throws BaseException;
+
+	String getName();
+
+	String getDescription();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareLayer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/prepareAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/prepareAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/prepareAction.java	(revision 42196)
@@ -0,0 +1,34 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.prepareAction;
+
+
+public interface prepareAction {
+	Object execute(PrepareContext context, Object data);
+	
+	String getName();
+
+	String getDescription();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/prepareAction.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView.java	(revision 42196)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.prepareAction;
+
+import org.gvsig.fmap.mapcontrol.MapControl;
+
+/**
+ * Object containing the context to prepare the loading process
+ * of a layer.
+ * 
+ * @author jmvivo
+ * @see PrepareContextView_1
+ */
+public interface PrepareContextView extends PrepareContext {
+
+    /**
+     * You can use it to interact with the MapControl component that will
+     * receive the new layer, in order to get user feedback
+     * (for instance a bounding box). Check the
+     * {@link PrepareContextView_v1#isMapControlAvailable()} method before
+     * accessing the MapControl
+     * because it may not be available (for instance when adding layers
+     * to a MapContext not associated with a View).
+     * 
+     * For the moment, this method will return a non-null MapControl for
+     * compatibility reasons, but you should still check
+     * {@link PrepareContextView_v1#isMapControlAvailable()} to be sure it
+     * is a valid one, as it could only be a fake MapControl.
+     * 
+     * It is recommended to use {@link PrepareContextView_v1#getMapContext()}
+     * method when no interaction is needed with the map user interface
+     * (for instance to get the active projection, visible extent, etc)
+     * 
+     * @return Returns the mapCtrl.
+     */
+	MapControl getMapControl();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContext.java	(revision 42196)
@@ -0,0 +1,48 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.prepareAction;
+
+import java.awt.Window;
+
+import org.cresques.cts.IProjection;
+
+public interface PrepareContext {
+	/**
+	 * Return a {@link java.awt.Dialog} or a {@link java.awt.Frame} to use like
+	 * owner for any created dialogs.
+	 * 
+	 * @return <ul>
+	 *         <li>null</li>
+	 *         <li>{@link java.awt.Dialog} instance</li>
+	 *         <li>{@link java.awt.Frame} instance</li>
+	 *         </ul>
+	 */
+	Window getOwnerWindow();
+	
+	/**
+	 * Gets the view projection
+	 * @return IProjection
+	 */
+	public IProjection getViewProjection();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContext.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView_v1.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView_v1.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView_v1.java	(revision 42196)
@@ -0,0 +1,67 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.app.prepareAction;
+
+import org.gvsig.fmap.mapcontext.MapContext;
+
+/**
+ * Interface extending PrepareContextView. The methods defined
+ * here are indended to be integrated on PrepareContextView, but
+ * are maintained on this separate interface in order to mantain
+ * compatibility with existing implementations.
+ * 
+ * This interface may be eventually integrated with PrepareContextView
+ * on the next major refactoring.
+ *
+ * @author Cesar Martinez
+ *
+ */
+public interface PrepareContextView_v1 extends PrepareContextView {
+
+    /**
+     * You can use it to extract information from
+     * the MapContext that will receive the new layer.
+     * For example, projection to use, or visible extent.
+     * 
+     * @return Returns the MapContext.
+     */
+    MapContext getMapContext();
+
+    /**
+     * Checks whether the MapControl is available.
+     * The MapControl may not be available in some circumstances, for instance
+     * when adding layers to a MapContext not associated with a View.
+     * 
+     * A MapContext should always be available on the {@link #getMapContext()}
+     * method.
+     * 
+     * @return true if the MapControl is available, false otherwise
+     */
+    boolean isMapControlAvailable();
+
+}
+
+
+
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStore.java	(revision 42196)
@@ -0,0 +1,37 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.prepareAction;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+
+public interface PrepareDataStore extends ExtensionBuilder {
+	DataStore prepare(DataStore store, PrepareContext context)
+			throws BaseException;
+
+	String getName();
+
+	String getDescription();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStore.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStoreParameters.java	(revision 42196)
@@ -0,0 +1,41 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.prepareAction;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+
+public interface PrepareDataStoreParameters extends ExtensionBuilder {
+	void pre(DataStoreParameters storeParamters, PrepareContext context);
+	
+	void post(DataStoreParameters storeParamters, PrepareContext context);
+	
+	DataStoreParameters prepare(DataStoreParameters storeParamters,
+			PrepareContext context) throws BaseException;
+
+	String getName();
+
+	String getDescription();
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/util/BaseOpenErrorHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/util/BaseOpenErrorHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/util/BaseOpenErrorHandler.java	(revision 42196)
@@ -0,0 +1,196 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app.util;
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.OpenErrorHandler;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.i18n.Messages;
+import org.gvsig.utils.SimpleFileFilter;
+
+public class BaseOpenErrorHandler implements OpenErrorHandler{
+	
+	
+	private DataParameters parameters;
+//	private Exception exception;
+
+	public BaseOpenErrorHandler() {
+//		exception=null;
+		parameters=null;
+		
+	}
+
+	public boolean canRetryOpen(Exception e, DataParameters parameters) {
+//		this.exception=e;
+		this.parameters=parameters;
+//		Throwable cause = null;
+		boolean retry = false;
+
+		/*if (this.exception instanceof InvocationTargetException){
+			cause = this.exception.getCause();
+		} else {
+			cause = this.exception;
+		}*/
+		//if (cause instanceof InitializeException){
+			//if (cause.getCause() instanceof OpenException){
+				if ( this.parameters instanceof FilesystemStoreParameters) {
+					FilesystemStoreParameters filesystemStoreParameters = (FilesystemStoreParameters)this.parameters;
+					File searchedFile = filesystemStoreParameters.getFile();
+					File file = null;
+					if( searchedFile != null && !searchedFile.exists() ) {
+						file = chooseAlternateFile(searchedFile);
+						if( file!=null){
+							filesystemStoreParameters.setFile(file);
+							retry = true;
+						} else {
+							return false;
+						}
+					}
+
+					if (this.parameters.getDynClass().getName().equalsIgnoreCase("SHPStoreParameters") ) {
+						//SHPStoreParameters shpStoreParameters = (SHPStoreParameters)this.parameters;
+//						File searchedDBFFile = shpStoreParameters.getDBFFile();
+						File searchedDBFFile =  (File) this.parameters.getDynValue("dbfFile");
+						if (searchedDBFFile!=null && !searchedDBFFile.exists()) {
+							File possibleDbfFile = null;
+							if (file != null){
+//								possibleDbfFile = SHP.getDbfFile(file);
+								possibleDbfFile = findFile(file, "dbf");
+							}
+							if (possibleDbfFile != null && possibleDbfFile.exists()) {
+//								shpStoreParameters.setDBFFile(possibleDbfFile);
+								this.parameters.setDynValue("dbfFile", possibleDbfFile);
+								retry = true;
+							} else {
+								File dbfFile = chooseAlternateFile(searchedDBFFile);
+								if (dbfFile != null){
+//									shpStoreParameters.setDBFFile(dbfFile);
+									this.parameters.setDynValue("dbfFile", dbfFile);
+									retry = true;
+								} else {
+									return false;
+								}
+							}
+						}
+//						File searchedSHXFile = shpStoreParameters.getSHXFile();
+						File searchedSHXFile = (File) this.parameters.getDynValue("shxfile");;
+						if (searchedDBFFile!=null && !searchedSHXFile.exists()) {
+							File possibleShxFile = null;
+							if (file != null){
+//								possibleShxFile = SHP.getShxFile(file);
+								possibleShxFile = findFile(file, "shx");
+							}
+							if (possibleShxFile != null && possibleShxFile.exists()) {
+//								shpStoreParameters.setSHXFile(possibleShxFile);
+								this.parameters.setDynValue("shxfile", possibleShxFile);
+								retry = true;
+							} else {
+								File shxFile = chooseAlternateFile(searchedSHXFile);
+								if (shxFile != null) {
+//									shpStoreParameters.setSHXFile(shxFile);
+									this.parameters.setDynValue("shxfile", shxFile);
+									retry = true;
+								} else {
+									return false;
+								}
+							}
+						}
+					}
+				}
+			//}
+		//}
+		return retry;
+	}
+	
+	private File chooseAlternateFile(File searchedFile){
+			int resp = JOptionPane.showConfirmDialog(
+					null,
+					Messages.getText("dont_find_the_file")+"\n"+
+					searchedFile.getName()+"\n"+
+					Messages.getText("do_you_want_to_locate_the_file"),
+					Messages.getText("dont_find_the_file"),
+					JOptionPane.YES_NO_OPTION,
+					JOptionPane.QUESTION_MESSAGE);
+			if (resp == JOptionPane.OK_OPTION){
+				JFileChooser fileChooser = new JFileChooser(FilesystemExplorerWizardPanel.OPEN_LAYER_FILE_CHOOSER_ID,
+						searchedFile.getParentFile());
+				File parentFile = searchedFile.getParentFile();
+				if (parentFile.exists()){
+					fileChooser.setLastPath(parentFile);
+				}
+				fileChooser.setMultiSelectionEnabled(false);
+				fileChooser.setAcceptAllFileFilterUsed(false);
+				fileChooser.setDialogTitle("dont_find_the_file: "+searchedFile.getAbsolutePath());
+
+				String searchedFileName = searchedFile.getName();
+				String ext = searchedFileName.substring(searchedFileName.lastIndexOf(".")+1);
+				SimpleFileFilter fileFilter = new SimpleFileFilter(ext, ext);
+				fileChooser.addChoosableFileFilter(fileFilter);
+				fileChooser.setFileFilter(fileFilter);
+				
+				int result = fileChooser.showOpenDialog(null);
+				if (result == JFileChooser.APPROVE_OPTION) {
+		            File file = fileChooser.getSelectedFile();
+		            return file;
+		        }
+			}
+		return null;
+	}
+	
+	private File findFile(File file, String extension) {
+		File[] files = file.getParentFile().listFiles(new ExtensionFilenameFilter(file, extension));
+		if( files == null || files.length<1 ) {
+			return new File(file.getParentFile(),FilenameUtils.getBaseName(file.getName())+"."+extension);
+		}
+		return files[0];
+	}
+	
+	private class ExtensionFilenameFilter implements FilenameFilter {
+		private String extension;
+		private String baseName;
+		ExtensionFilenameFilter(File f, String extension) {
+			this.extension = extension;
+			this.baseName = FilenameUtils.getBaseName(f.getName());
+		}
+		public boolean accept(File arg0, String filename) {
+			if( FilenameUtils.getBaseName(filename).equals(baseName) ) {
+				if( FilenameUtils.getExtension(filename).equalsIgnoreCase(extension) ) {
+					return true;
+				}
+			}
+			return false;
+		}
+	}
+
+}
+
+

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/util/BaseOpenErrorHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationManager.java	(revision 42196)
@@ -0,0 +1,333 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.app;
+
+import java.awt.Component;
+import java.util.List;
+import javax.swing.JComponent;
+import javax.swing.event.HyperlinkListener;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.about.AboutManager;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiFrame.ThreadSafeDialogs;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.app.extension.Version;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.prepareAction.PrepareContext;
+import org.gvsig.app.prepareAction.PrepareContextView;
+import org.gvsig.app.prepareAction.PrepareDataStore;
+import org.gvsig.app.prepareAction.PrepareDataStoreParameters;
+import org.gvsig.app.prepareAction.PrepareLayer;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.gui.IDocumentWindow;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.gui.ColorTablesFactory;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dispose.DisposableManager;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+
+
+public interface ApplicationManager extends ThreadSafeDialogs {
+
+    /**
+     * Return the version of the application.
+     * 
+     * @return the version
+     */
+	public Version getVersion() ;
+
+    /**
+     * Return the active window, IWindow, in the application.
+     * 
+     * @return the active window
+     */
+	public IWindow getActiveWindow();
+
+	/**
+	 * Return the project that is loaded and in use in the application.
+	 * 
+	 * @return the project 
+	 */
+    public Project getCurrentProject();
+
+    /**
+     * Returns the active document of the application or null 
+     * if there is no active document.
+     * 
+     * @return the active document
+     */
+    public Document getActiveDocument();
+
+    /**
+     * Returns the active document of the application that is of the 
+     * requested type or null if there is no active document or the
+     * active document is not of the requested type.
+     * 
+     * @param documentTypeName, type name of the document requested.
+     * @return the active document
+     */
+    public Document getActiveDocument(String documentTypeName);
+
+    /**
+     * Returns the active document of the application that is of the 
+     * requested type or null if there is no active document or the
+     * active document is not of the requested type.
+     * 
+     * @param documentClass, class of the document requested.
+     * @return the active document
+     */
+    public Document getActiveDocument(Class<? extends Document> documentClass);
+    
+    /**
+     * Returns the JComponent associated to the active document for the
+     * specified type of document.
+     * If not is active the specified type of document return null.
+     * 
+     * @param documentClass
+     * @return the component associated to the active document of type documentClass
+     */
+    public JComponent getActiveComponent(Class<? extends Document> documentClass);
+    
+    /**
+     * Returns the window associated with the document passed as 
+     * parameter or null if there is no window associated with 
+     * the document.
+     * 
+     * @param document to search the window
+     * @return window associated to the document
+     */
+    public IDocumentWindow getDocumentWindow(Document document);
+    
+    
+    /**
+     * Return the root of the nodes of preferences in the application.
+     * 
+     * @return the root of preferences.
+     */
+    PreferencesNode getPreferences();
+	
+    /**
+     * Search and return the node of preferences required as nodeName.
+     *  
+     * @param nodeName, name of the node to return
+     * @return the preferences node requested
+     */
+	PreferencesNode getPreferences(String nodeName);
+	
+	/**
+	 * Return the arguments passed to the application in the command line
+	 *  
+	 * @return arguments as a string array
+	 */
+	public String[] getArguments();
+	
+	/**
+	 * Return the value of the argument passed in the command line by
+	 * the name indicated as the parameter. This is passed as:
+	 * <code>
+	 * application --name=value
+	 * </code>
+	 * @param name of the requested argument
+	 * @return value of the requested argument
+	 */
+	public String getArgument(String name);
+	
+	/**
+	 * Get the value of the system clipboard as a string.
+	 * 
+	 * @return the clipboard value
+	 */
+	public String getFromClipboard();
+	
+	/**
+	 * Put the string value passed as parameter in the clipboard of
+	 * the system.
+	 * 
+	 * @param data to put in the clipboard.
+	 */
+	public void putInClipboard(String data) ;
+
+	/**
+	 * Obtain the projection associated by the code of projection
+	 * Passed as parameter. If passed code of projection it not
+	 * a valid projection code null is returned.
+	 * 
+	 * @param code of the projection requested
+	 * @return the requested projection or null
+	 */
+    public IProjection getCRS(String code);
+    
+	/**
+     * Utility method to obtain the DataManager used in the application at this moment.
+     * 
+     * @return the DataManager
+	 */
+	public DataManager getDataManager();
+    
+    /**
+     * Utility method to obtain the ProjectManager used in the application at this moment.
+     * 
+     * @return the ProjectManager
+     */
+    public ProjectManager getProjectManager();
+
+    /**
+     * Utility method to obtain the UIManager used in the application at this moment.
+     * 
+     * @return the UIManager
+     */
+    public MDIManager getUIManager();
+    
+    /**
+     * Utility method to obtain the GeometryManager used in the application at this moment.
+     * 
+     * @return the GeometryManager
+     */
+    public GeometryManager getGeometryManager();
+    
+    /**
+     * Utility method to obtain the PersistenceManager used in the application at this moment.
+     * 
+     * @return the PersistenceManager
+     */
+    public PersistenceManager getPersistenceManager();
+    
+    /**
+     * Utility method to obtain the DisposableManager used in the application at this moment.
+     * 
+     * @return the DisposableManager
+     */
+    public DisposableManager getDisposableManager() ;
+
+    /**
+     * Utility method to obtain the DynObjectManager used in the application at this moment.
+     * 
+     * @return the DynObjectManager
+     */
+    public DynObjectManager getDynObjectManager() ;
+
+    /**
+     * Utility method to obtain the ExtensionPointManager used in the application at this moment.
+     * 
+     * @return the ExtensionPointManager
+     */
+    public ExtensionPointManager getExtensionPointManager();
+
+    /**
+     * Utility method to obtain the MapContextManager used in the application at this moment.
+     * 
+     * @return the MapContextManager
+     */
+    public MapContextManager getMapContextManager();
+    
+    /**
+     * Utility method to obtain the AboutManager used in the application at this moment.
+     * 
+     * @return the AboutManager
+     */
+    public AboutManager getAbout();
+
+    public DataTypesManager getDataTypesManager();
+    
+    /**
+     * Utility method to obtain the IconThemeManager used in the application at this moment.
+     * 
+     * @return the IconThemeManager
+     */
+    IconThemeManager getIconThemeManager();
+    
+	void registerAddTableWizard(String name, String description,
+			Class<? extends WizardPanel> wpClass);
+
+	List<WizardPanel> getWizardPanels() throws Exception;
+
+
+
+	void registerPrepareOpenDataStore(PrepareDataStore action);
+	void registerPrepareOpenDataStoreParameters(	PrepareDataStoreParameters action);
+	void registerPrepareOpenLayer(PrepareLayer action);
+
+	DataStore pepareOpenDataSource(DataStore store,
+			PrepareContext context)
+			throws Exception;
+
+	DataStoreParameters prepareOpenDataStoreParameters(
+			DataStoreParameters storeParameters, PrepareContext context)
+			throws Exception;
+	
+	List<DataStoreParameters> prepareOpenDataStoreParameters(
+			List<DataStoreParameters> storeParameters, PrepareContext context)
+			throws Exception;
+
+	FLayer prepareOpenLayer(FLayer layer,
+			PrepareContextView context)
+			throws Exception;
+	
+	
+	public ColorTablesFactory getColorTablesFactory();
+	
+	public void registerColorTablesFactory(ColorTablesFactory factory);
+
+	public String getLocaleLanguage();
+
+    /**
+     * sets message in status bar
+     * 
+     * This method is thread safe.
+     * 
+     * @param message
+     * @param message_type One of: JOptionPane.ERROR_MESSAGE,
+     * JOptionPane.WARNING_MESSAGE, JOptionPane.INFORMATION_MESSAGE 
+     */
+    public void message(String message, int message_type);
+    
+    public String translate(String message, String... args) ;
+
+    public Component getRootComponent();
+
+    public void refreshMenusAndToolBars();
+
+    public MainFrame getMainFrame();
+
+    public void addMenu(ActionInfo action, String text);
+    public void addTool(ActionInfo action, String toolBarName);
+
+    public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText);
+    public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText, HyperlinkListener hyperlinkListener);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanel.java	(revision 42196)
@@ -0,0 +1,773 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.prefs.Preferences;
+
+import javax.swing.AbstractListModel;
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ScrollPaneConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.prepareAction.PrepareContext;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.FileNotFoundException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemFileFilter;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ * 
+ */
+public abstract class FilesystemExplorerWizardPanel extends WizardPanel
+    implements ActionListener, ListSelectionListener, Disposable {
+
+    /**
+	 *
+	 */
+    private static final long serialVersionUID = -3371957786521876903L;
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(FilesystemExplorerWizardPanel.class);
+
+    public static final String OPEN_LAYER_FILE_CHOOSER_ID =
+        "OPEN_LAYER_FILE_CHOOSER_ID";
+
+    protected static final String ADD_COMMAND = "ADD";
+    protected static final String EDIT_COMMAND = "PROPERTIES";
+    protected static final String REMOVE_COMMAND = "REMOVE";
+    protected static final String UP_COMMAND = "UP";
+    protected static final String DOWN_COMMAND = "DOWN";
+
+    private static String lastPath = null;
+    private static MyFileFilter lastFilter = null;
+    private static final String DEFAULT_FILTER = "All_supported";
+
+    private JList fileList;
+    private JScrollPane fileListScroll;
+    private JPanel buttonsPanel;
+    private JButton addButton;
+    private JButton propertiesButton;
+    private JButton removeButton;
+    private JButton upButton;
+    private JButton downButton;
+
+    protected FilesystemServerExplorer explorer;
+    private ArrayList<MyFileFilter> filters;
+    
+    public FilesystemExplorerWizardPanel() {
+        super();
+        this.addAncestorListener(new AncestorListener() {
+            public void ancestorAdded(AncestorEvent ae) {
+                initExplorer();
+                initFilters();
+            }
+            public void ancestorRemoved(AncestorEvent ae) {
+                dispose();
+            }
+            public void ancestorMoved(AncestorEvent ae) {
+            }
+        });
+    }
+    
+    public void setTabName(String name) {
+        super.setTabName(name);
+    }
+
+    public DataStoreParameters[] getParameters() {
+        return ((FilesystemStoreListModel) getFileList().getModel())
+            .getParameters();
+    }
+
+    public void initWizard() {
+        setTabName(PluginServices.getText(this, "Fichero"));
+        if (lastPath == null) {
+            Preferences prefs = Preferences.userRoot().node("gvsig.foldering");
+            lastPath = prefs.get("DataFolder", null);
+        }
+        initExplorer();
+        initFilters();
+        initUI();
+    }
+
+    private void initExplorer() {
+        if (this.explorer == null) {
+            DataManager dm = DALLocator.getDataManager();
+            FilesystemServerExplorerParameters param;
+            try {
+                param
+                        = (FilesystemServerExplorerParameters) dm
+                        .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+                param.setInitialpath(lastPath);
+                explorer
+                        = (FilesystemServerExplorer) dm.openServerExplorer(
+                                FilesystemServerExplorer.NAME, param);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private void initFilters() {
+        if (this.filters == null) {
+            int mode = FilesystemServerExplorer.MODE_ALL;
+            this.filters = new ArrayList<MyFileFilter>();
+            if (this.getMapCtrl() == null) {
+                mode = FilesystemServerExplorer.MODE_FEATURE;
+            } else {
+                mode
+                        = FilesystemServerExplorer.MODE_GEOMETRY
+                        | FilesystemServerExplorer.MODE_RASTER;
+            }
+
+            // First filter in list will be 'All formats' filter
+            this.filters.add(new MyFileFilter(explorer.getFilter(mode,
+                    Messages.get(DEFAULT_FILTER))));
+
+            @SuppressWarnings("unchecked")
+            Iterator<FilesystemFileFilter> iter = explorer.getFilters(mode);
+            while (iter.hasNext()) {
+                this.filters.add(new MyFileFilter(iter.next()));
+            }
+        }
+    }
+
+    private void initUI() {
+        this.setLayout(new GridBagLayout());
+        GridBagConstraints constr = new GridBagConstraints();
+
+        constr.gridwidth = GridBagConstraints.RELATIVE;
+        constr.gridheight = GridBagConstraints.RELATIVE;
+        constr.fill = GridBagConstraints.BOTH;
+        constr.anchor = GridBagConstraints.FIRST_LINE_START;
+        constr.weightx = 1;
+        constr.weighty = 1;
+        constr.ipadx = 3;
+        constr.ipady = 3;
+
+        this.add(getFileListScroll(), constr);
+
+        constr.gridwidth = GridBagConstraints.REMAINDER;
+        constr.gridheight = GridBagConstraints.RELATIVE;
+        constr.fill = GridBagConstraints.NONE;
+        constr.anchor = GridBagConstraints.FIRST_LINE_END;
+        constr.weightx = 0;
+        constr.weighty = 0;
+        this.add(getButtonsPanel(), constr);
+
+        this.updateButtons();
+        this.updateContainingWizardAcceptButton();
+
+    }
+
+    protected class FilesystemStoreListModel extends AbstractListModel {
+
+        private static final long serialVersionUID = -726119349962990665L;
+        private ArrayList<FilesystemStoreParameters> theList;
+
+        public FilesystemStoreListModel() {
+            theList = new ArrayList<FilesystemStoreParameters>();
+        }
+
+        public DataStoreParameters[] getParameters() {
+            return theList.toArray(new DataStoreParameters[0]);
+        }
+
+        public Object getElementAt(int index) {
+            return theList.get(index).getFile().getName();
+        }
+
+        public FilesystemStoreParameters getStoreParameterAt(int index) {
+            return theList.get(index);
+        }
+
+        public int getSize() {
+            return theList.size();
+        }
+
+        public DynObject getDynObjectAt(int index) {
+            return (DynObject) theList.get(index);
+        }
+
+        public void add(DynObject dynObject) {
+            this.theList.add((FilesystemStoreParameters) dynObject);
+            this.fireIntervalAdded(this, this.theList.size() - 1,
+                this.theList.size() - 1);
+        }
+
+        public void addAll(List<FilesystemStoreParameters> toAdd) {
+            int index0 = this.getSize() - 1;
+            if (index0 < 0) {
+                index0 = 0;
+            }
+            this.theList.addAll(toAdd);
+            this.fireIntervalAdded(this, index0, this.theList.size() - 1);
+        }
+
+        public void remove(int i) {
+            this.theList.remove(i);
+            this.fireIntervalRemoved(this, i, i);
+
+        }
+
+        public void up(FilesystemStoreParameters item) {
+            int curIndex = this.theList.indexOf(item);
+            if (curIndex < 1) {
+                return;
+            }
+            this.theList.remove(item);
+            this.theList.add(curIndex - 1, item);
+            this.fireContentsChanged(this, curIndex, curIndex - 1);
+        }
+
+        public void down(FilesystemStoreParameters item) {
+            int curIndex = this.theList.indexOf(item);
+            if (curIndex < 0) {
+                return;
+            } else
+                if (curIndex == this.theList.size() - 1) {
+                    return;
+                }
+            this.theList.remove(item);
+            this.theList.add(curIndex + 1, item);
+            this.fireContentsChanged(this, curIndex, curIndex + 1);
+        }
+        
+        public void forceUpdate(int index) {
+            this.fireContentsChanged(this, index, index);
+        }
+
+    }
+
+    protected JList getFileList() {
+        if (fileList == null) {
+            fileList = new JList(new FilesystemStoreListModel());
+
+            fileList.addListSelectionListener(this);
+        }
+        return fileList;
+    }
+
+    private JScrollPane getFileListScroll() {
+        if (fileListScroll == null) {
+            fileListScroll = new JScrollPane();
+            fileListScroll.setViewportView(getFileList());
+            fileListScroll
+                .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
+            fileListScroll
+                .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+
+        }
+        return fileListScroll;
+    }
+
+    private Component getButtonsPanel() {
+        if (buttonsPanel == null) {
+            buttonsPanel = new JPanel();
+
+            buttonsPanel.setLayout(new GridBagLayout());
+
+            GridBagConstraints constr = new GridBagConstraints();
+
+            constr.anchor = GridBagConstraints.CENTER;
+            constr.fill = GridBagConstraints.NONE;
+            constr.ipadx = 3;
+            constr.ipady = 3;
+            constr.insets = new Insets(3, 3, 3, 3);
+            constr.gridwidth = GridBagConstraints.REMAINDER;
+
+            buttonsPanel.add(getAddButton(), constr);
+            buttonsPanel.add(getPropertiesButton(), constr);
+            buttonsPanel.add(getRemoveButton(), constr);
+            buttonsPanel.add(getUpButton(), constr);
+            buttonsPanel.add(getDownButton(), constr);
+            // buttonsPanel.add(new JLabel(), constrLbl);
+        }
+        return buttonsPanel;
+    }
+
+    private JButton getAddButton() {
+        if (addButton == null) {
+            addButton =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            addButton.setText(getLocalizedText("add"));
+            addButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            addButton.setActionCommand(ADD_COMMAND);
+            addButton.addActionListener(this);
+        }
+        return addButton;
+    }
+
+    private JButton getPropertiesButton() {
+        if (propertiesButton == null) {
+            propertiesButton =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            propertiesButton.setText(getLocalizedText("properties"));
+            propertiesButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            propertiesButton.setActionCommand(EDIT_COMMAND);
+            propertiesButton.addActionListener(this);
+        }
+        return propertiesButton;
+    }
+
+    private JButton getRemoveButton() {
+        if (removeButton == null) {
+            removeButton =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            removeButton.setText(getLocalizedText("remove"));
+            removeButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            removeButton.setActionCommand(REMOVE_COMMAND);
+            removeButton.addActionListener(this);
+        }
+        return removeButton;
+    }
+
+    private JButton getUpButton() {
+        if (upButton == null) {
+            upButton =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            upButton.setText(getLocalizedText("up"));
+            upButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            upButton.setActionCommand(UP_COMMAND);
+            upButton.addActionListener(this);
+        }
+        return upButton;
+    }
+
+    private JButton getDownButton() {
+        if (downButton == null) {
+            downButton =
+                ToolsSwingLocator.getUsabilitySwingManager().createJButton();
+            downButton.setText(getLocalizedText("down"));
+            downButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+            downButton.setActionCommand(DOWN_COMMAND);
+            downButton.addActionListener(this);
+        }
+        return downButton;
+    }
+
+    private String getLocalizedText(String txt) {
+        try {
+            return PluginServices.getText(this, txt);
+        } catch (Exception e) {
+            return txt;
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        String command = e.getActionCommand();
+        FilesystemStoreListModel model =
+            (FilesystemStoreListModel) getFileList().getModel();
+
+        if (command == ADD_COMMAND) {
+            this.addFilesFromParameters(this.chooseFilesParameters());
+        } else
+            if (command == EDIT_COMMAND) {
+                DynObject dynObject =
+                    model.getDynObjectAt(getFileList().getSelectedIndex());
+
+                try {
+                    DynObjectEditor editor = new DynObjectEditor(dynObject);
+                    editor.editObject(true);
+                    
+                    RefreshThread st = new RefreshThread(getFileList(), 500);
+                    st.start();
+                    
+                } catch (ServiceException ex) {
+                    LOG.error(
+                        "Error creating a Swing component for the DynObject: "
+                            + dynObject, ex);
+                }
+
+            } else
+                if (command == REMOVE_COMMAND) {
+                    int[] selecteds = getFileList().getSelectedIndices();
+                    for (int i = selecteds.length - 1; i > -1; i--) {
+                        model.remove(selecteds[i]);
+                    }
+                    getFileList().setSelectedIndex(-1);
+                    
+                    this.updateContainingWizardAcceptButton();
+
+                } else
+                    if (command == UP_COMMAND) {
+                        List<FilesystemStoreParameters> items =
+                            new ArrayList<FilesystemStoreParameters>();
+                        int[] selecteds = getFileList().getSelectedIndices();
+                        if (selecteds.length == 0 || selecteds[0] == 0) {
+                            return;
+                        }
+                        for (int i = 0; i < selecteds.length; i++) {
+                            items.add(model.getStoreParameterAt(selecteds[i]));
+                            selecteds[i]--;
+                        }
+                        Iterator<FilesystemStoreParameters> iter =
+                            items.iterator();
+                        while (iter.hasNext()) {
+                            model.up(iter.next());
+                        }
+                        getFileList().setSelectedIndices(selecteds);
+
+                    } else
+                        if (command == DOWN_COMMAND) {
+                            List<FilesystemStoreParameters> items =
+                                new ArrayList<FilesystemStoreParameters>();
+                            int[] selecteds =
+                                getFileList().getSelectedIndices();
+                            if (selecteds.length == 0
+                                || selecteds[selecteds.length - 1] == model
+                                    .getSize() - 1) {
+                                return;
+                            }
+                            for (int i = selecteds.length - 1; i > -1; i--) {
+                                items.add(model
+                                    .getStoreParameterAt(selecteds[i]));
+                                selecteds[i]++;
+                            }
+                            Iterator<FilesystemStoreParameters> iter =
+                                items.iterator();
+                            while (iter.hasNext()) {
+                                model.down(iter.next());
+                            }
+                            getFileList().setSelectedIndices(selecteds);
+
+                        } else {
+                            throw new IllegalArgumentException(command);
+                        }
+
+    }
+
+    public void addFiles(List<File> files) {
+        File[] filesArray = files.toArray(new File[files.size()]);
+        this.addFilesFromParameters(this.getParametersList(null, filesArray, null));
+    }
+
+    private void addFilesFromParameters(List<FilesystemStoreParameters> filesParams) {
+        if ( filesParams.isEmpty() ) {
+            return;
+        }
+        FilesystemStoreListModel model = (FilesystemStoreListModel) getFileList().getModel();
+        model.addAll(filesParams);
+        getFileList().setModel(model);
+
+        this.updateContainingWizardAcceptButton();
+        try {
+            fileList.setSelectedIndex(fileList.getModel().getSize() - 1);
+        } catch (Exception ex) {
+            // Ignore errors
+        }
+    }
+
+    /**
+     * check number of files already selected for adding
+     */
+    private void updateContainingWizardAcceptButton() {
+        int curr_add_file_count = getFileList().getModel().getSize();
+        this.callStateChanged(curr_add_file_count > 0);
+    }
+
+    
+    public boolean areSettingsValid() {
+        int curr_add_file_count = getFileList().getModel().getSize();
+        boolean r = curr_add_file_count > 0;
+        return r;
+    }
+
+    public List<DynObject> getSelecteds() {
+        ArrayList<DynObject> list = new ArrayList<DynObject>();
+        JList fList = this.getFileList();
+        int[] selecteds = fList.getSelectedIndices();
+        FilesystemStoreListModel model =
+            (FilesystemStoreListModel) fList.getModel();
+
+        for (int index : selecteds) {
+            list.add((DynObject) model.getStoreParameterAt(index));
+        }
+        return list;
+    }
+
+    public void valueChanged(ListSelectionEvent e) {
+        this.updateButtons();
+    }
+
+    public class MyFileFilter extends FileFilter {
+
+        public FilesystemFileFilter filter = null;
+
+        public MyFileFilter(FilesystemFileFilter params) {
+            this.filter = params;
+        }
+
+        /**
+         * @see javax.swing.filechooser.FileFilter#accept(java.io.File)
+         */
+        public boolean accept(File f) {
+            if (f.isDirectory()) {
+                return true;
+            }
+            return filter.accept(f);
+
+        }
+
+        /**
+         * @see javax.swing.filechooser.FileFilter#getDescription()
+         */
+        public String getDescription() {
+            return filter.getDescription();
+        }
+
+        public String getName() {
+            return filter.getDataStoreProviderName();
+        }
+    }
+
+    private List<FilesystemStoreParameters> chooseFilesParameters() {
+        
+        // this.callStateChanged(true);
+        
+        JFileChooser fileChooser =
+            new JFileChooser(OPEN_LAYER_FILE_CHOOSER_ID,
+                explorer.getCurrentPath());
+        fileChooser.setMultiSelectionEnabled(true);
+        fileChooser.setAcceptAllFileFilterUsed(false);
+
+        Iterator<MyFileFilter> iter = this.filters.iterator();
+        while (iter.hasNext()) {
+            fileChooser.addChoosableFileFilter(iter.next());
+        }
+        
+        if (filters.size() > 0) {
+            MyFileFilter firstf = filters.get(0);
+            // Set first filter
+            fileChooser.setFileFilter(firstf);
+        }
+
+        // If there is a last filter, use it
+        if (lastFilter != null && filters.contains(lastFilter)) {
+            fileChooser.setFileFilter(lastFilter);
+        }
+
+        int result = fileChooser.showOpenDialog(this);
+
+        List<FilesystemStoreParameters> toAdd = 
+            new ArrayList<FilesystemStoreParameters>();
+
+        if (result == JFileChooser.APPROVE_OPTION) {
+            lastFilter = (MyFileFilter) fileChooser.getFileFilter();
+            lastPath = fileChooser.getCurrentDirectory().getAbsolutePath();
+            JFileChooser.setLastPath(OPEN_LAYER_FILE_CHOOSER_ID, fileChooser.getCurrentDirectory());
+            String providerName = null;
+            if( lastFilter!=null ) {
+                if( !DEFAULT_FILTER.equalsIgnoreCase(lastFilter.getDescription()) ) {
+                    providerName = lastFilter.getName();
+                }
+            }
+            toAdd = this.getParametersList(
+                    fileChooser.getCurrentDirectory(), 
+                    fileChooser.getSelectedFiles(), 
+                    providerName
+            );
+        }
+        return toAdd;
+    }
+
+    private List<FilesystemStoreParameters> getParametersList(File folder, File[] files, String providerName) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        
+        PrepareContext context = this.getPrepareDataStoreContext();
+        
+        List<DataStoreParameters> params = new ArrayList<DataStoreParameters>();
+        List<DataStoreParameters> preparedParams = null;
+        List<FilesystemStoreParameters> returnParams = new ArrayList<FilesystemStoreParameters>();
+        
+        for ( File aFile : files ) {
+            String currentProvider = providerName;
+            DataStoreParameters param;
+            try {
+                if( folder == null) {
+                    explorer.setCurrentPath(aFile.getParentFile());
+                } else {
+                    explorer.setCurrentPath(folder);
+                }
+                if( currentProvider == null ) {
+                    for( int i=1; i<this.filters.size(); i++) {
+                        MyFileFilter filter = this.filters.get(i);
+                        if( filter.accept(aFile)) {
+                            currentProvider = filter.getName();
+                            break;
+                        }
+                    }
+                }
+                if( currentProvider == null ) {
+                    // TODO: ask user
+                    continue;
+                }
+                param = explorer.createStoreParameters(aFile, currentProvider);
+                if ( param == null ) {
+                    // TODO show warning
+                    continue;
+                }
+                params.add(param);
+
+            } catch (DataException e) {
+                NotificationManager.addError(e);
+                return null;
+            }
+        }
+
+        try {
+            preparedParams
+                    = application.prepareOpenDataStoreParameters(params, context);
+        } catch (Exception e) {
+            NotificationManager.addError(e);
+        }
+
+        if ( preparedParams != null ) {
+            for ( int i = 0; i < preparedParams.size(); i++ ) {
+                returnParams.add((FilesystemStoreParameters) preparedParams.get(i));
+            }
+        }
+        return returnParams;
+    }
+
+    protected abstract PrepareContext getPrepareDataStoreContext();
+
+    /**
+     * Refers to up/down/remove buttons etc. Called when selection changes
+     */
+    private void updateButtons() {
+        int selectedIndex = this.getFileList().getSelectedIndex();
+        int size = this.getFileList().getModel().getSize();
+        int[] selecteds = this.getFileList().getSelectedIndices();
+        if (size < 1) {
+            this.getPropertiesButton().setEnabled(false);
+            this.getRemoveButton().setEnabled(false);
+            this.getUpButton().setEnabled(false);
+            this.getDownButton().setEnabled(false);
+            return;
+        } else
+            if (size == 1) {
+                this.getUpButton().setEnabled(false);
+                this.getDownButton().setEnabled(false);
+            } else {
+                this.getUpButton().setEnabled(selectedIndex > 0);
+
+                this.getDownButton().setEnabled(
+                    selectedIndex > -1
+                        && selecteds[selecteds.length - 1] < size - 1);
+            }
+        this.getPropertiesButton().setEnabled(
+            selectedIndex > -1
+                && this.getFileList().getSelectedIndices().length == 1);
+        this.getRemoveButton().setEnabled(selectedIndex > -1);
+    }
+
+    public void close() {
+        this.dispose();
+    }
+
+    public void dispose() {
+        if (explorer != null) {
+            explorer.dispose();
+            explorer = null;
+        }
+        if (filters != null) {
+            filters.clear();
+            filters = null;
+        }
+    }
+    
+    class RefreshThread extends Thread {
+        
+        private int waitt = 0;
+        private JList comp = null;
+        
+        public RefreshThread(JList c, int t) {
+            waitt = t;
+            comp = c;
+        }
+        public void run() {
+            
+            try {
+                /*
+                 * We might need to wait a bit because the GUI thread needs
+                 * some time to update (this is because we have used a modal dialog
+                 * and we refresh after that dialog is closed)
+                 */
+                Thread.sleep(waitt);
+            } catch (Exception exc) {
+                
+            }
+            
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    try {
+                        // System.out.println("REFRESH");
+                        comp.clearSelection();
+                    } catch (Exception exc) {
+                        LOG.info("Error while refreshing components.", exc);
+                    }
+                }
+            });
+        }
+    }    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerAddLayerWizardPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerAddLayerWizardPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerAddLayerWizardPanel.java	(revision 42196)
@@ -0,0 +1,347 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import javax.swing.UIDefaults;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import org.gvsig.app.prepareAction.PrepareContext;
+import org.gvsig.app.prepareAction.PrepareContextView;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.service.ServiceException;
+
+/**
+ * @author jmvivo
+ * 
+ */
+public class FilesystemExplorerAddLayerWizardPanel extends
+    FilesystemExplorerWizardPanel {
+
+    private static final long serialVersionUID = -5054057255129168139L;
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(FilesystemExplorerAddLayerWizardPanel.class);
+
+    private PrepareContext prepareContext;
+
+    public void initWizard() {
+
+        super.initWizard();
+        this.getFileList().setCellRenderer(
+            new TwoColumnFileListCellRenderer(this.getMapCtrl()));
+    }
+
+    @Override
+    public void execute() {
+        if (this.getMapCtrl() == null) {
+            throw new IllegalArgumentException("MapControl need");
+        }
+        String layerName;
+
+        for (DataStoreParameters params : this.getParameters()) {
+            IProjection proj = null;
+
+            proj = this.getMapCtrl().getProjection();
+
+            // Buscamos por el parametro de la proyeccion
+            // que sean obligatorios y est�n a null
+            // y le ponemos la proyeccion de la vista
+            DynField[] fields = params.getDynClass().getDynFields();
+            for (DynField field : fields) {
+                if (field.getType() == DataTypes.CRS && field.isMandatory()) {
+                    if (params.getDynValue(field.getName()) == null) {
+                        params.setDynValue(field.getName(), proj);
+                    }
+                }
+            }
+
+            layerName =
+                ((FilesystemStoreParameters) params).getFile().getName();
+
+            this.doAddLayer(this.getMapCtrl(), layerName, params);
+        }
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+
+        String command = e.getActionCommand();
+        FilesystemStoreListModel model =
+            (FilesystemStoreListModel) getFileList().getModel();
+
+        if (command == EDIT_COMMAND) {
+            DynObject dynObject =
+                model.getDynObjectAt(getFileList().getSelectedIndex());
+
+            // For store parameters with a CRS field, add the current view
+            // CRS as default value when null.
+            try {
+                IProjection projection =
+                    (IProjection) dynObject.getDynValue("CRS");
+                if (projection == null) {
+                    projection = getDefaultProjection();
+                    dynObject.setDynValue("CRS", projection);
+                }
+            } catch (DynFieldNotFoundException e1) {
+                LOG.debug("Loading a store whose parameters "
+                    + "don't have a CRS field");
+            }
+
+            try {
+                DynObjectEditor editor = new DynObjectEditor(dynObject);
+                editor.editObject(true);
+            } catch (ServiceException ex) {
+                LOG.error(
+                    "Error creating a Swing component for the DynObject: "
+                        + dynObject, ex);
+            }
+
+            // force repaint
+            ListModel lm = this.getFileList().getModel();
+            if (lm instanceof FilesystemStoreListModel) {
+                FilesystemStoreListModel mm = (FilesystemStoreListModel) lm;
+                mm.forceUpdate(getFileList().getSelectedIndex());
+            }
+            
+
+            
+        } else {
+            super.actionPerformed(e);
+        }
+    }
+
+    /**
+     * @return
+     */
+    private IProjection getDefaultProjection() {
+        return getMapCtrl().getViewPort().getProjection();
+    }
+
+    public static void main(String[] args) {
+        try {
+            new DefaultLibrariesInitializer().fullInitialize();
+
+            JFrame frame = new JFrame();
+
+            AddLayerDialog addLayerDlg = new AddLayerDialog();
+
+            FilesystemExplorerAddLayerWizardPanel wizardPanel =
+                new FilesystemExplorerAddLayerWizardPanel();
+            addLayerDlg.addWizardTab("File", wizardPanel);
+            wizardPanel.initWizard();
+
+            frame.setLayout(new BorderLayout());
+            frame.add(addLayerDlg);
+
+            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+            frame.setBounds(10, 10, 400, 400);
+            frame.setVisible(true);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.exit(-1);
+            return;
+        }
+    }
+
+    @Override
+    protected PrepareContext getPrepareDataStoreContext() {
+        if (this.prepareContext == null) {
+            this.prepareContext = new PrepareContextView() {
+
+                public Window getOwnerWindow() {
+                    return null;
+                }
+
+                public MapControl getMapControl() {
+                    return FilesystemExplorerAddLayerWizardPanel.this
+                        .getMapCtrl();
+                }
+
+				public IProjection getViewProjection() {
+					return getMapControl().getProjection();
+				}
+
+            };
+        }
+        return this.prepareContext;
+    }
+    
+    // =================
+    
+    private class TwoColumnFileListCellRenderer extends JPanel implements ListCellRenderer {
+
+        private JLabel fileName = null;
+        private JLabel crsName = null;
+        
+        private Color selBC = null;
+        private Color selFC = null;
+        private Color unselBC = null;
+        private Color unselFC = null;
+        
+        private MapControl mapCtrl = null;
+        
+        public TwoColumnFileListCellRenderer(MapControl mct) {
+            // 1 col for name, one for crs
+            setLayout(new GridLayout(0, 2));
+            fileName = new JLabel();
+            crsName = new JLabel();
+            
+            Font fnt = crsName.getFont();
+            fnt = fnt.deriveFont((float) (fnt.getSize() - 1));
+            crsName.setFont(fnt);
+            
+            add(fileName);
+            add(crsName);
+            mapCtrl = mct;
+            
+            UIDefaults defaults = javax.swing.UIManager.getDefaults();
+            selBC = defaults.getColor("List.selectionBackground");
+            selFC = defaults.getColor("List.selectionForeground");
+            unselBC = this.getBackground();
+            unselFC = this.getForeground();
+        }
+
+        public Component getListCellRendererComponent(
+            JList list, Object _value,
+            int index, boolean isSelected, boolean cellHasFocus) {
+            
+            if (isSelected) {
+                setBackground(selBC);
+                fileName.setForeground(selFC);
+                crsName.setForeground(selFC);
+            } else {
+                setBackground(unselBC);
+                fileName.setForeground(unselFC);
+                crsName.setForeground(unselFC);
+            }
+            
+            // ===========================
+            
+            fileName.setText(_value == null ?
+                "?": fixString(_value.toString()));
+            
+            ListModel lm = list.getModel();
+            String unkown_tag = Messages.get("_Unknown_CRS_so_assumed");
+            String view_crs = getViewCRS();
+            
+            if (lm instanceof FilesystemStoreListModel) {
+                
+                FilesystemStoreListModel fsslm = (FilesystemStoreListModel) lm;
+                DynObject dyno = fsslm.getDynObjectAt(index);
+                
+                try {
+                    Object crs_obj = dyno.getDynValue(DataStore.METADATA_CRS);
+                    if (crs_obj == null || crs_obj.toString().compareToIgnoreCase("null") == 0) {
+                        crsName.setText(unkown_tag + " " + view_crs);
+                    } else {
+                        if (crs_obj instanceof IProjection) {
+                            IProjection ipr = (IProjection) crs_obj;
+                            if (ipr.getAbrev().compareToIgnoreCase(view_crs) == 0) {
+                                // CRS set but same as view's
+                                crsName.setText(view_crs);
+                            } else {
+                                // CRS set and not same as view's
+                                crsName.setText(ipr.getAbrev() +
+                                    " (" +
+                                    Messages.get("_reprojected_on_the_fly") +
+                                    ")");
+                            }
+                        } else {
+                            // CRS parameter class not expected
+                            crsName.setText(unkown_tag + " " + view_crs);
+                        }
+                        
+                    }
+                } catch (Exception ex) {
+                    // CRS parameter not found
+                    crsName.setText(unkown_tag + " " + view_crs);
+                }
+                
+            } else {
+                // list model not of expected class
+                crsName.setText(unkown_tag + " " + view_crs);
+            }
+            
+            return this;
+        }
+
+        /**
+         * @param string
+         * @return
+         */
+        private String fixString(String str) {
+            
+            int len = str.length();
+            String resp = str;
+            if (len < 32) {
+                // return str;
+            } else {
+                int cut = len - 14;
+                resp = resp.substring(0, 14) +
+                    "..." + resp.substring(cut); 
+            }
+            return resp + "    ";
+        }
+        
+        private String getViewCRS() {
+            if (this.mapCtrl == null) {
+                return "CRS?";
+            } else {
+                return mapCtrl.getProjection().getAbrev();
+            }
+        }
+        
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerAddLayerWizardPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3519"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 26">
+  <defs
+     id="defs3521" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3524">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.27523258,0,0,0.53174859,-109.61375,-67.055823)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3609"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 32">
+  <defs
+     id="defs3611" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8409507"
+     inkscape:cy="7.9901934"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3614">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.61394787;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9-1"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.24764499,0,0,0.47844946,-97.824883,-59.5327)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Sun.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Sun.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3723"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Diamond 5.svg">
+  <defs
+     id="defs3725" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3728">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.61394787000000006;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9-1-4-5"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.26415466,0,0,0.51034609,-104.87988,-64.03488)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Expressway.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Expressway.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Beige.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Beige.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Lt Orange.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Lt Orange.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1_sel.svg	(revision 42196)
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4865"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Hospital 1.svg">
+  <defs
+     id="defs4867" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4870">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(0.12921879,0,0,0.12921044,-0.14937682,0.10453146)"
+       id="g6721">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff"
+         d="m 15.914,1.949 c -6.758,0 -12.258,5.492 -12.258,12.25 v 94.023 c 0,6.781 5.5,12.273 12.258,12.273 h 94.023 c 6.75,0 12.25,-5.492 12.25,-12.273 V 14.199 c 0,-6.758 -5.5,-12.25 -12.25,-12.25 H 15.914 z"
+         id="path6723" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#0088cf"
+         d="m 110.18,123.02 c 8.164,0 14.797,-6.617 14.797,-14.797 V 13.988 c 0,-8.156 -6.633,-14.797 -14.797,-14.797 H 15.953 c -8.18,0 -14.797,6.641 -14.797,14.797 v 94.234 c 0,8.18 6.617,14.797 14.797,14.797 h 94.227 z"
+         id="path6725" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff"
+         d="M 15.953,1.699 C 9.172,1.699 3.656,7.207 3.656,13.988 v 94.234 c 0,6.781 5.516,12.297 12.297,12.297 h 94.227 c 6.773,0 12.289,-5.516 12.289,-12.297 V 13.988 c 0,-6.781 -5.516,-12.289 -12.289,-12.289 H 15.953 z"
+         id="path6727" />
+      <polygon
+         style="fill:#0088cf"
+         points="29.992,22.559 29.992,99.684 46.594,99.684 46.594,65.379 79.758,65.379 79.758,99.684 96.375,99.684 96.375,22.559 79.758,22.559 79.758,48.801 46.594,48.801 46.594,22.559 "
+         id="polygon6729" />
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 1.6762316,15.626946 C 1.171235,15.541548 0.71980324,15.197711 0.49913038,14.730396 l -0.1170017,-0.247772 0,-6.487129 0,-6.4871287 L 0.49900181,1.260594 C 0.64804287,0.94462537 0.94462541,0.64804283 1.260594,0.49900178 l 0.2477723,-0.11687314 6.4871288,0 6.4871289,0 0.247772,0.11700171 c 0.493581,0.23307619 0.813877,0.67447875 0.901543,1.24242535 0.07595,0.4920539 0.03791,12.6021983 -0.04024,12.8106903 -0.167073,0.445708 -0.59368,0.872322 -1.039452,1.03947 -0.12967,0.04862 -1.333637,0.06135 -6.3990776,0.06765 -3.4887254,0.0043 -6.3440942,-0.01 -6.4769368,-0.03242 l 0,0 z m 4.2244615,-4.838382 0,-2.2299501 2.1173267,0 2.1173272,0 0,2.2299501 0,2.229951 1.103712,0 1.103713,0 0,-5.0004952 0,-5.0004951 -1.103713,0 -1.103712,0 0,1.6893565 0,1.6893564 -2.1173272,0 -2.1173267,0 0,-1.6893564 0,-1.6893565 -1.1037129,0 -1.1037129,0 0,5.0004951 0,5.0004952 1.1037129,0 1.1037129,0 0,-2.229951 z"
+       id="path3206"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2_sel.svg	(revision 42196)
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4922"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Hospital 2.svg">
+  <defs
+     id="defs4924" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4927">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(0.12921879,0,0,0.12921044,-0.14937682,0.10453146)"
+       id="g6738">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff"
+         d="m 15.914,1.949 c -6.758,0 -12.258,5.492 -12.258,12.25 v 94.023 c 0,6.781 5.5,12.273 12.258,12.273 h 94.023 c 6.75,0 12.25,-5.492 12.25,-12.273 V 14.199 c 0,-6.758 -5.5,-12.25 -12.25,-12.25 H 15.914 z"
+         id="path6740" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#0088cf"
+         d="m 110.18,123.02 c 8.164,0 14.797,-6.617 14.797,-14.797 V 13.988 c 0,-8.156 -6.633,-14.797 -14.797,-14.797 H 15.953 c -8.18,0 -14.797,6.641 -14.797,14.797 v 94.234 c 0,8.18 6.617,14.797 14.797,14.797 h 94.227 z"
+         id="path6742" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#0088cf"
+         d="M 15.953,1.699 C 9.172,1.699 3.656,7.207 3.656,13.988 v 94.234 c 0,6.781 5.516,12.297 12.297,12.297 h 94.227 c 6.773,0 12.289,-5.516 12.289,-12.297 V 13.988 c 0,-6.781 -5.516,-12.289 -12.289,-12.289 H 15.953 z"
+         id="path6744" />
+      <polygon
+         style="fill:#ffffff"
+         points="29.992,99.684 46.594,99.684 46.594,65.379 79.758,65.379 79.758,99.684 96.375,99.684 96.375,22.559 79.758,22.559 79.758,48.801 46.594,48.801 46.594,22.559 29.992,22.559 "
+         id="polygon6746" />
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 1.6342007,15.946802 C 1.042759,15.859047 0.47327883,15.430843 0.21063121,14.87639 l -0.14384907,-0.303667 0,-6.577228 0,-6.5772277 0.14007544,-0.2956035 C 0.38905388,0.73817196 0.73817199,0.38905385 1.1226638,0.20685755 l 0.2956035,-0.14007544 6.5772278,0 6.5772279,0 0.293628,0.13915093 c 0.587653,0.27849028 0.993986,0.83817076 1.08492,1.49436136 0.02572,0.1856022 0.03731,2.7766073 0.02919,6.5225988 -0.01498,6.9039728 0.0096,6.3712998 -0.317877,6.8768868 -0.177146,0.273458 -0.331402,0.424419 -0.610387,0.597349 -0.465048,0.288264 0.01079,0.269147 -6.8990236,0.277174 -3.4564233,0.004 -6.3899588,-0.0084 -6.5189677,-0.0275 l 0,0 z m 4.2664924,-5.158238 0,-2.2299501 2.1173267,0 2.1173272,0 0,2.2299501 0,2.229951 1.103712,0 1.103713,0 0,-5.0004952 0,-5.0004951 -1.103713,0 -1.103712,0 0,1.6893565 0,1.6893564 -2.1173272,0 -2.1173267,0 0,-1.6893564 0,-1.6893565 -1.1037129,0 -1.1037129,0 0,5.0004951 0,5.0004952 1.1037129,0 1.1037129,0 0,-2.229951 z"
+       id="path3335"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Stacked Multi Roadway.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Stacked Multi Roadway.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Toll Road.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Toll Road.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Tan.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Tan.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify_sel.svg	(revision 42196)
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4173"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Identify.svg">
+  <defs
+     id="defs4175" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4178">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;stroke:none"
+       id="path3980-6-1"
+       sodipodi:cx="751.61926"
+       sodipodi:cy="191.27083"
+       sodipodi:rx="63.197376"
+       sodipodi:ry="63.197376"
+       d="m 814.81664,191.27083 a 63.197376,63.197376 0 1 1 -126.39475,0 63.197376,63.197376 0 1 1 126.39475,0 z"
+       transform="matrix(0.12658753,0,0,0.12658753,-87.145626,-16.212502)"
+       inkscape:export-filename="C:\Users\Toushirou\Downloads\g3846.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <g
+       id="g3121-0"
+       transform="matrix(0.29410691,0,0,0.29410691,-5.9535022,-158.9922)"
+       style="fill:#ffffff;fill-opacity:1">
+      <path
+         transform="matrix(0.50196079,0,0,0.50196079,-329.77388,468.2597)"
+         d="m 761.79047,167.7709 c 0,6.58741 -5.34015,11.92756 -11.92755,11.92756 -6.58741,0 -11.92756,-5.34015 -11.92756,-11.92756 0,-6.5874 5.34015,-11.92755 11.92756,-11.92755 6.5874,0 11.92755,5.34015 11.92755,11.92755 z"
+         sodipodi:ry="11.927552"
+         sodipodi:rx="11.927552"
+         sodipodi:cy="167.7709"
+         sodipodi:cx="749.86292"
+         id="path3990-2"
+         style="fill:#ffffff;fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <g
+         id="g3113-8"
+         style="fill:#ffffff;fill-opacity:1">
+        <g
+           id="g3085-6"
+           style="fill:#ffffff;fill-opacity:1">
+          <rect
+             ry="4.0664949"
+             rx="4.0664949"
+             y="560.89362"
+             x="42.811901"
+             height="28.027821"
+             width="9.3426065"
+             id="rect3992-0"
+             style="fill:#ffffff;fill-opacity:1;stroke:none" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path3083-2"
+             d="m 51.637342,563.84168 c -0.875185,-1.2599 -1.943463,-2.30013 -3.358488,-2.67928 -4.164716,-1.11594 -8.822444,2.74062 -10.393305,8.60316 -0.05288,0.19734 -0.07902,0.38498 -0.123489,0.5816 2.247299,-2.96029 5.909574,-4.46643 9.420992,-3.52555 1.221863,0.3274 2.269902,0.96949 3.184459,1.75914 l 1.261743,-4.70888 c 0.0028,-0.0103 0.0052,-0.0198 0.0081,-0.0301 z"
+             style="fill:#ffffff;fill-opacity:1;stroke:none" />
+        </g>
+        <g
+           transform="matrix(-1,0,0,-1,94.887279,1149.9951)"
+           id="g3085-1-4"
+           style="fill:#ffffff;fill-opacity:1">
+          <rect
+             ry="4.0664949"
+             rx="4.0664949"
+             y="560.89362"
+             x="42.811901"
+             height="28.027821"
+             width="9.3426065"
+             id="rect3992-7-8"
+             style="fill:#ffffff;fill-opacity:1;stroke:none" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path3083-4-6"
+             d="m 51.637342,563.84168 c -0.875185,-1.2599 -1.943463,-2.30013 -3.358488,-2.67928 -4.164716,-1.11594 -8.822444,2.74062 -10.393305,8.60316 -0.05288,0.19734 -0.07902,0.38498 -0.123489,0.5816 2.247299,-2.96029 5.909574,-4.46643 9.420992,-3.52555 1.221863,0.3274 2.269902,0.96949 3.184459,1.75914 l 1.261743,-4.70888 c 0.0028,-0.0103 0.0052,-0.0198 0.0081,-0.0301 z"
+             style="fill:#ffffff;fill-opacity:1;stroke:none" />
+        </g>
+      </g>
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 7.3873268,15.94375 C 4.368082,15.723842 1.6450534,13.693365 0.56148594,10.853935 -0.01646931,9.3394349 -0.11849429,7.6383074 0.27387205,6.0583663 0.97356629,3.240908 3.240908,0.97356626 6.0583664,0.27387202 6.7203368,0.1094767 7.2741016,0.0442517 8.0062723,0.04443851 c 0.7691572,1.9642e-4 1.2991818,0.0664494 2.0096917,0.25121173 2.571738,0.66875925 4.668357,2.61922216 5.519228,5.13447956 0.981584,2.9016603 0.251689,6.0352002 -1.909086,8.1959762 -1.653699,1.653698 -3.8995792,2.48802 -6.2387792,2.317644 z m 1.2323589,-1.735216 c 0.9493755,-0.244777 1.8042133,-1.191056 2.1738233,-2.406356 0.03391,-0.111497 0.06187,-0.23064 0.06214,-0.264762 2.71e-4,-0.03412 -0.148883,0.07985 -0.331447,0.253267 -0.227708,0.2163 -0.450498,0.374656 -0.7095297,0.504321 L 9.4370793,12.48402 9.4145545,9.676639 C 9.3926735,6.949473 9.3893421,6.8634505 9.2979596,6.6660292 9.0858093,6.2077009 8.7133734,5.9852834 8.1081188,5.9554606 7.0442144,5.9030392 6.0730552,6.5603057 5.4790563,7.7347715 5.3527852,7.9844363 5.1348515,8.6139878 5.1348515,8.7290843 c 0,0.038823 0.1154524,-0.049484 0.2646235,-0.2024051 C 5.5450178,8.377477 5.7528086,8.1947423 5.8612324,8.120602 6.051235,7.9906779 6.4580879,7.7927723 6.5351825,7.7927723 c 0.020566,0 0.043329,1.2518131 0.050585,2.7818067 0.01286,2.711602 0.015567,2.786936 0.1072628,2.985035 0.1228023,0.265302 0.3449648,0.48331 0.6257782,0.614076 0.2779586,0.129437 0.8722548,0.145355 1.300877,0.03484 l 0,0 z M 8.4362856,5.1370174 C 8.7680608,5.0098238 9.1739469,4.6394857 9.3389051,4.313452 9.5978024,3.801751 9.5899561,3.1620786 9.3185369,2.6528436 8.6366924,1.3735728 6.7752626,1.4289905 6.1525973,2.7470986 5.9760848,3.1207544 5.9379887,3.6445137 6.0602165,4.0171905 6.2557868,4.6134904 6.7428805,5.0761569 7.3303153,5.223594 7.600988,5.2915291 8.1441666,5.2490087 8.4362856,5.1370174 z"
+       id="path3411"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9487"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Octagon 1.svg">
+  <defs
+     id="defs9489" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="6.3414835"
+     inkscape:cy="10.035998"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9492">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1"
+       id="path3072"
+       sodipodi:sides="8"
+       sodipodi:cx="425.77386"
+       sodipodi:cy="-22.490788"
+       sodipodi:r1="18.105267"
+       sodipodi:r2="9.0526323"
+       sodipodi:arg1="0.7551044"
+       sodipodi:arg2="1.1478035"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 438.95812,-10.082077 -12.63586,5.688249 -12.95711,-4.9127045 -5.68824,-12.6358625 4.9127,-12.957103 12.63586,-5.688249 12.95711,4.912704 5.68824,12.635863 z"
+       transform="matrix(0.44206321,0,0,0.44206321,-180.21896,17.94235)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.09009901;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 5.2991589,14.839756 2.553963,13.786761 1.3045093,11.013699 0.05505559,8.2406374 1.1322146,5.398967 2.2093736,2.5572967 4.9836109,1.3064482 7.7578481,0.05559993 10.59011,1.1292876 c 1.557744,0.5905282 2.843138,1.0867282 2.856432,1.1026664 0.01329,0.015938 0.580557,1.2655689 1.260586,2.776957 l 1.236416,2.7479785 -0.817681,2.1624176 c -0.449725,1.1893299 -0.934137,2.4665019 -1.076474,2.8381599 l -0.258793,0.675743 -2.734954,1.238861 c -1.5042245,0.681374 -2.7971282,1.234771 -2.8731201,1.229772 -0.075992,-0.005 -1.3735053,-0.482939 -2.883363,-1.062087 l 0,0 z"
+       id="path3704"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9838"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Octagon 2.svg">
+  <defs
+     id="defs9840" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8.4841582"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9843">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3072-0"
+       sodipodi:sides="8"
+       sodipodi:cx="425.77386"
+       sodipodi:cy="-22.490788"
+       sodipodi:r1="18.105267"
+       sodipodi:r2="9.0526323"
+       sodipodi:arg1="0.7551044"
+       sodipodi:arg2="1.1478035"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 438.95812,-10.082077 -12.63586,5.688249 -12.95711,-4.9127045 -5.68824,-12.6358625 4.9127,-12.957103 12.63586,-5.688249 12.95711,4.912704 5.68824,12.635863 z"
+       transform="matrix(0.43017785,0,0,0.43017785,-175.15849,17.675039)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 5.5739602,14.524298 C 4.1244923,13.974164 2.905963,13.496464 2.8661172,13.462744 2.746821,13.361789 0.47503196,8.250396 0.50603813,8.1527043 0.59987294,7.857057 2.5131801,2.8626674 2.5422795,2.8374142 2.5620182,2.8202845 3.740339,2.2843776 5.1607702,1.64651 6.9345791,0.84995245 7.774014,0.49448403 7.8412157,0.51144413 7.9614839,0.54179692 13.141095,2.5050596 13.161518,2.5280339 c 0.0081,0.00906 0.543576,1.1923269 1.190051,2.6294842 l 1.175409,2.6130132 -1.023415,2.6963157 -1.023415,2.696317 -2.582271,1.16294 c -1.4202484,0.639617 -2.6061766,1.170927 -2.6353957,1.180689 -0.029219,0.0098 -1.2390533,-0.432361 -2.6885211,-0.982495 z"
+       id="path3762"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3_sel.svg	(revision 42196)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3113"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Octagon 3.svg">
+  <defs
+     id="defs3115" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3118">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3072-0-8"
+       sodipodi:sides="8"
+       sodipodi:cx="425.77386"
+       sodipodi:cy="-22.490788"
+       sodipodi:r1="18.105267"
+       sodipodi:r2="9.0526323"
+       sodipodi:arg1="0.7551044"
+       sodipodi:arg2="1.1478035"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 438.95812,-10.082077 -12.63586,5.688249 -12.95711,-4.9127045 -5.68824,-12.6358625 4.9127,-12.957103 12.63586,-5.688249 12.95711,4.912704 5.68824,12.635863 z"
+       transform="matrix(0.43017785,0,0,0.43017785,-175.15849,17.675039)" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.88320708;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954-6"
+       width="3.9823625"
+       height="3.9823625"
+       x="6.0088186"
+       y="6.0088186"
+       rx="3.080955" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 5.5628218,14.517378 C 4.1009653,13.962938 2.8812275,13.485035 2.8522932,13.455371 2.8014249,13.403219 0.55135396,8.4363184 0.50648573,8.2771373 0.4831239,8.1942557 2.451469,2.9418936 2.5388788,2.8538688 2.5986403,2.7936868 7.7030337,0.49475241 7.776896,0.49475241 c 0.087749,0 5.306664,1.98722549 5.363396,2.04223989 0.07745,0.075103 2.371559,5.1744336 2.364497,5.25578 -0.0032,0.037166 -0.459592,1.2601756 -1.014144,2.7177997 l -1.008276,2.650225 -2.495665,1.125206 C 9.6140887,14.904866 8.4302228,15.436912 8.3558911,15.468329 8.2284479,15.522193 8.0692024,15.467968 5.5628218,14.517378 z M 8.5283415,10.383954 C 9.4512676,10.188403 10.189649,9.4430947 10.389266,8.5055721 10.65405,7.2619814 9.9404313,6.060103 8.6937624,5.6500007 8.3239443,5.5283463 7.636364,5.5377202 7.243599,5.6697711 6.5092304,5.9166721 5.9380526,6.484454 5.6707658,7.2332534 5.5419121,7.5942351 5.5312011,8.3352048 5.6496538,8.6937624 5.9599701,9.6330923 6.6239701,10.210899 7.635099,10.421478 c 0.1978034,0.04119 0.6018258,0.02422 0.8932425,-0.03752 l 0,0 z"
+       id="path3822"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1_sel.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9288"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Square 1.svg">
+  <defs
+     id="defs9290" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="9.1123694"
+     inkscape:cy="7.4234485"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9293">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#000000;fill-opacity:1"
+       id="rect3056"
+       width="16"
+       height="16"
+       x="0"
+       y="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.09009901;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.04840892,8.0269475 0,-7.97376241 7.97376248,0 7.9737626,0 0,7.97376241 0,7.9737625 -7.9737626,0 -7.97376248,0 0,-7.9737625 z"
+       id="path4428"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2_sel.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9628"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Square 2.svg">
+  <defs
+     id="defs9630" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.8481082"
+     inkscape:cx="-14.048939"
+     inkscape:cy="5.0122674"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9633">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.94117647;stroke-opacity:1"
+       id="rect3056-7"
+       width="15.058824"
+       height="15.058824"
+       x="0.47058821"
+       y="0.47058821" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.12741925;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.0374993,7.9806385 0,-7.00805834 7.0080583,0 7.0080584,0 0,7.00805834 0,7.0080585 -7.0080584,0 -7.0080583,0 0,-7.0080585 z"
+       id="path4570"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3_sel.svg	(revision 42196)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg10014"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Square 3.svg">
+  <defs
+     id="defs10016" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata10019">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.94117647;stroke-opacity:1"
+       id="rect3056-7-8"
+       width="15.058824"
+       height="15.058824"
+       x="0.47058824"
+       y="0.47058818" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85422039;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954-9"
+       width="3.8516622"
+       height="3.8516622"
+       x="6.0741615"
+       y="6.0741687"
+       rx="2.9798386" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.94524746,7.995495 0,-7.05024754 7.05024754,0 7.050248,0 0,7.05024754 0,7.050248 -7.050248,0 -7.05024754,0 0,-7.050248 z M 8.5829361,10.290697 C 9.0208002,10.176709 9.3226373,10.000703 9.6616699,9.6616699 10.135579,9.1877613 10.360594,8.6513442 10.360594,7.995495 10.360594,6.9356356 9.6529808,6.0057994 8.6261881,5.716405 8.2706182,5.6161906 7.602858,5.6359547 7.2472876,5.7572176 6.532611,6.0009489 6.0009489,6.532611 5.7572176,7.2472876 5.6359547,7.602858 5.6161906,8.2706182 5.716405,8.6261881 c 0.2271279,0.8058667 0.8758921,1.4476109 1.6832883,1.6650729 0.3163538,0.08521 0.8547576,0.08495 1.1832428,-5.63e-4 l 0,-1e-6 z"
+       id="path4630"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1_sel.svg	(revision 42196)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9532"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Rnd Square 1.svg">
+  <defs
+     id="defs9534" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.8481082"
+     inkscape:cx="7.6246837"
+     inkscape:cy="1.6161263"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9537">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#000000;fill-opacity:1"
+       id="rect3074"
+       width="16"
+       height="16"
+       x="0"
+       y="0"
+       rx="3" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.12741925;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 2.3877528,15.847285 C 1.5047547,15.62641 0.79599449,15.051656 0.33173653,14.180003 0.11010185,13.76388 0.09420648,13.350329 0.09420648,8.0001697 c 0,-5.6317759 0.0048967,-5.7429406 0.27502389,-6.2435429 C 0.69104086,1.1602444 1.1901817,0.67015837 1.8143663,0.33770669 2.2304897,0.11607202 2.6440405,0.10017664 7.9941995,0.10017664 c 5.6760035,0 5.7391925,0.002849 6.2617065,0.28229846 0.771759,0.41275012 1.409137,1.2188011 1.578312,1.9959925 0.09573,0.4397659 0.128636,2.3963123 0.100988,6.0039598 -0.03779,4.9307956 -0.05969,5.3866756 -0.278543,5.7975756 -0.332452,0.624185 -0.822539,1.123325 -1.418921,1.445135 -0.497671,0.268547 -0.638736,0.275528 -5.988704,0.296395 -3.0134651,0.01175 -5.6510434,-0.02166 -5.8612852,-0.07425 l 0,0 z"
+       id="path4248"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2_sel.svg	(revision 42196)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9889"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Rnd Square 2.svg">
+  <defs
+     id="defs9891" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9894">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.94117647;stroke-opacity:1"
+       id="rect3074-2"
+       width="15.058824"
+       height="15.058824"
+       x="0.47058821"
+       y="0.47058821"
+       rx="2.8235295" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 2.814802,14.978436 C 2.4822581,14.90444 2.2418398,14.804135 2.0049258,14.640545 1.4456349,14.254353 1.0666668,13.633368 0.98755907,12.973465 0.95820406,12.728591 0.94662875,10.844662 0.95545087,7.7477228 0.97067165,2.4045872 0.95118832,2.7733078 1.2494195,2.1843848 1.3958723,1.8951815 1.8951815,1.3958723 2.1843848,1.2494195 2.7733079,0.95118829 2.4045872,0.97067161 7.7477228,0.95545084 c 3.0969392,-0.008822 4.9808682,0.002753 5.2257422,0.0321082 0.88536,0.10613506 1.63871,0.71774806 1.945502,1.57947066 l 0.104251,0.2928217 0.0124,5.019939 c 0.01208,4.8904616 0.01008,5.0291146 -0.07757,5.3757156 -0.21781,0.861324 -0.8352,1.481066 -1.694344,1.700798 -0.338797,0.08665 -0.502948,0.08933 -5.2641537,0.08586 -3.9231746,-0.0029 -4.968973,-0.01571 -5.1847493,-0.06372 z"
+       id="path4306"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3167"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Rnd Square 3.svg">
+  <defs
+     id="defs3169" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3172">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.94117647;stroke-opacity:1"
+       id="rect3074-2-5"
+       width="15.058824"
+       height="15.058824"
+       x="0.47058821"
+       y="0.47058821"
+       rx="2.8235295" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85422039;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954-36"
+       width="3.8516622"
+       height="3.8516622"
+       x="6.0741692"
+       y="6.0741692"
+       rx="2.9798386" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 2.814802,14.978436 C 2.4822581,14.90444 2.2418398,14.804135 2.0049258,14.640545 1.4456349,14.254353 1.0666668,13.633368 0.98755907,12.973465 0.95820406,12.728591 0.94662875,10.844662 0.95545087,7.7477228 0.97067165,2.4045872 0.95118832,2.7733078 1.2494195,2.1843848 1.3958723,1.8951815 1.8951815,1.3958723 2.1843848,1.2494195 2.7733079,0.95118829 2.4045872,0.97067161 7.7477228,0.95545084 c 3.0969392,-0.008822 4.9808682,0.002753 5.2257422,0.0321082 0.88536,0.10613506 1.63871,0.71774806 1.945502,1.57947066 l 0.104251,0.2928217 0.0124,5.019939 c 0.01208,4.8904616 0.01008,5.0291146 -0.07757,5.3757156 -0.21781,0.861324 -0.8352,1.481066 -1.694344,1.700798 -0.338797,0.08665 -0.502948,0.08933 -5.2641537,0.08586 -3.9231746,-0.0029 -4.968973,-0.01571 -5.1847493,-0.06372 z M 8.5829361,10.290697 C 9.0208002,10.176709 9.3226373,10.000703 9.66167,9.6616699 10.135579,9.1877613 10.360594,8.6513442 10.360594,7.995495 10.360594,6.9356356 9.6529808,6.0057994 8.6261882,5.716405 8.2706183,5.6161906 7.602858,5.6359547 7.2472877,5.7572176 6.5326111,6.0009489 6.000949,6.532611 5.7572176,7.2472876 5.6359547,7.602858 5.6161906,8.2706182 5.716405,8.6261881 c 0.2271279,0.8058667 0.8758921,1.4476109 1.6832883,1.6650729 0.3163538,0.08521 0.8547576,0.08495 1.1832428,-5.63e-4 l 0,-1e-6 z"
+       id="path4370"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hollow.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hollow.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Arrow at End.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Arrow at End.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2.svg	(revision 42196)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4068"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 59">
+  <defs
+     id="defs4070" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4073">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:0.98999999;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.76190478;stroke-opacity:1"
+       d="M 4.2609485,0.3809522 4.2760343,0.8876417 11.391059,0.9342703 11.375973,0.4275808 4.2609409,0.3809522 z M 10.695288,1.089516 4.7942514,1.0764112 2.41656,6.1139122 13.562655,6.1869788 10.695288,1.0895312 z M 1.9047657,6.2719617 1.9198514,6.7786436 14.095234,6.8584455 14.080148,6.351756 1.9047657,6.2719617 z M 6.20616,6.9665446 c 0.019962,1.4399692 1.2398019,5.7511244 2.0380723,8.6525034 0,0 1.7960377,-7.2424922 1.5664,-8.6288768 L 6.20616,6.9665522 z"
+       id="rect2987-0"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9423"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 103">
+  <defs
+     id="defs9425" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="11.283535"
+     inkscape:cy="8.4262453"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="675"
+     inkscape:window-height="383"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata9428">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1"
+       id="path3066"
+       sodipodi:sides="6"
+       sodipodi:cx="355.19934"
+       sodipodi:cy="-16.286432"
+       sodipodi:r1="14.237102"
+       sodipodi:r2="12.329692"
+       sodipodi:arg1="1.0584069"
+       sodipodi:arg2="1.5820056"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 362.17924,-3.8777226 -14.23621,-0.1595853 -6.9799,-12.4087101 7.25631,-12.249124 14.23621,0.159585 6.9799,12.40871 z"
+       transform="matrix(0.56194743,0,0,0.56194743,-191.60336,17.152119)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3829"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 44">
+  <defs
+     id="defs3831" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3834">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <text
+       xml:space="preserve"
+       style="font-size:25.54014778px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="-2.7061579"
+       y="16.012476"
+       id="text4213"
+       sodipodi:linespacing="125%"
+       transform="scale(1.0007797,0.9992209)"><tspan
+         sodipodi:role="line"
+         id="tspan4215"
+         x="-2.7061579"
+         y="16.012476">+</tspan></text>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3.svg	(revision 42196)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg10176"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 147">
+  <defs
+     id="defs10178" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="10.534354"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata10181">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3066-8-4"
+       sodipodi:sides="6"
+       sodipodi:cx="355.19934"
+       sodipodi:cy="-16.286432"
+       sodipodi:r1="14.237102"
+       sodipodi:r2="12.329692"
+       sodipodi:arg1="1.0584069"
+       sodipodi:arg2="1.5820056"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 362.17924,-3.8777226 -14.23621,-0.1595853 -6.9799,-12.4087101 7.25631,-12.249124 14.23621,0.159585 6.9799,12.40871 z"
+       transform="matrix(0.5428387,-0.0067389,0.0067389,0.5428387,-184.70572,19.36393)" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87681395;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954-1"
+       width="3.953536"
+       height="3.953536"
+       x="5.9222174"
+       y="6.2512889"
+       rx="3.0586534"
+       transform="matrix(0.99992295,-0.01241322,0.01241322,0.99992295,0,0)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3.svg	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3921"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 50">
+  <defs
+     id="defs3923" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3926">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.86679196;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 15.553604,5.9500218 0.013,4.0514462 -5.565159,0.04854 0.04854,5.503601 -4.0514468,0.013 -0.04854,-5.51662 -5.5036002,0 -0.013002,-4.0514465 5.5166108,0 8.6e-6,-5.55214925 4.0514466,-0.013002 0,5.56516835 5.552149,-0.04854 z"
+       id="path3207-2"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/globo-de-comic.svg.gvssty
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/globo-de-comic.svg.gvssty
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/River.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/River.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1.svg	(revision 42196)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4756"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 98">
+  <defs
+     id="defs4758" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4761">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       id="path1877-5"
+       d="M 5.5e-7,8.0000048 5.5e-7,0 7.9999995,0 l 7.9999995,0 0,8.0000048 0,7.9999952 -7.9999995,0 -7.99999895,0 0,-7.9999952 z"
+       style="fill:#0000ff"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1875-5"
+       d="m 0.06033205,8.0000048 0,-8.0000048 7.93966805,0 7.9396679,0 0,8.0000048 0,7.9999952 -7.9396679,0 -7.93966805,0 0,-7.9999952 z M 15.605942,15.672519 c 0.04259,-0.03565 0.04413,-0.303249 0.04413,-7.6574578 0,-7.05958161 -0.0029,-7.62349291 -0.03994,-7.66134689 -0.03853,-0.0394467 -0.306641,-0.0408356 -7.6018089,-0.0408356 -7.52969405,0 -7.56207605,1.9446e-4 -7.61013605,0.0447247 -0.04808,0.0445395 -0.04826,0.0744486 -0.04826,7.64866099 0,6.8460226 0.0037,7.6089176 0.03757,7.6536336 l 0.03757,0.04963 7.56837595,0 c 7.008587,0 7.571639,-0.0028 7.612507,-0.03695 z M 0.65069605,15.435792 c -0.0063,-0.01537 -0.0087,-3.366513 -0.0053,-7.4469637 l 0.0062,-7.419 7.36048505,0 7.3604819,0 0,7.4413438 0,7.4413439 -7.3551909,0.0056 c -5.871508,0.0046 -7.35750505,-1.8e-5 -7.36666105,-0.02232 z M 6.3629161,14.234364 c 0.51104,-0.05491 0.501519,-0.05324 0.828636,-0.150138 0.252325,-0.07473 0.940469,-0.381068 1.242837,-0.553189 0.494921,-0.281738 0.897167,-0.650823 1.289545,-1.183251 0.120296,-0.163232 0.3514799,-0.57231 0.3514799,-0.621933 0,-0.04047 -0.6197459,-1.444516 -0.6549659,-1.483815 -0.04173,-0.04658 -0.123367,-0.02713 -0.156368,0.03732 -0.01575,0.03074 -0.06414,0.141341 -0.107546,0.24581 -0.172421,0.415023 -0.555614,1.06105 -0.801056,1.350502 -0.544327,0.641924 -1.069178,0.933395 -1.935563,1.074875 -0.409592,0.06686 -0.540744,0.06824 -0.92972,0.0095 -0.412506,-0.06222 -0.700926,-0.15261 -1.043087,-0.326861 -0.394277,-0.200789 -0.650028,-0.402013 -0.946805,-0.744949 -0.281315,-0.325064 -0.507593,-0.823796 -0.593127,-1.307258 -0.05933,-0.335362 -0.05952,-0.514399 -8.69e-4,-0.8297781 0.116445,-0.6262111 0.308132,-0.986361 0.805307,-1.5130479 L 3.8274511,8.1154374 3.6943591,7.4296489 c -0.0732,-0.3771879 -0.145663,-0.6998171 -0.161023,-0.716957 -0.05751,-0.06417 -0.130343,-0.032594 -0.301737,0.13085 -0.399177,0.3806232 -0.707373,0.737134 -1.041332,1.2045954 -0.262404,0.3672984 -0.386147,0.643638 -0.463741,1.035623 -0.0292,0.1474897 -0.06327,0.3083876 -0.07571,0.3575478 -0.0479,0.1891958 -0.0778,0.9222189 -0.04823,1.1821309 0.08326,0.7318 0.113692,0.839991 0.377655,1.342649 0.236426,0.45022 0.429365,0.693576 0.8775,1.106785 0.447802,0.412903 0.596629,0.507676 1.241898,0.790887 0.469099,0.205882 0.794565,0.298933 1.221635,0.349279 0.389874,0.04593 0.494579,0.05741 0.571062,0.06269 0.02871,0.0019 0.240478,-0.01667 0.470589,-0.04139 z m 6.6791729,-1.560097 c 1.004545,-0.312897 1.563613,-0.497611 1.579499,-0.521853 0.01856,-0.02834 -0.01581,-0.154417 -0.140108,-0.513964 -0.09058,-0.262043 -0.185644,-0.528725 -0.211245,-0.592626 -0.0484,-0.120822 -0.114836,-0.166009 -0.17552,-0.119368 -0.0342,0.0263 -1.838992,0.6042 -1.887005,0.604247 -0.01517,9e-6 -0.0331,-0.01259 -0.03984,-0.02787 C 11.238919,9.3853346 10.594924,7.9327345 10.567929,7.8940009 l -0.03496,-0.050188 -2.5629179,-0.00556 -2.562919,-0.00556 -0.03188,-0.1769729 c -0.01753,-0.097329 -0.02633,-0.1903533 -0.01956,-0.206706 0.01011,-0.024353 0.361771,-0.029724 1.963004,-0.029724 1.485019,0 1.957594,-0.00648 1.97964,-0.026853 0.04126,-0.038243 0.04126,-1.2042528 0,-1.2424586 -0.02208,-0.020464 -0.524116,-0.026853 -2.11237,-0.026853 -1.645012,0 -2.085635,-0.00556 -2.09397,-0.027965 -0.02603,-0.068893 -0.230709,-1.4111904 -0.219357,-1.4385808 0.007,-0.016853 0.04546,-0.03065 0.08549,-0.03065 0.18482,0 0.655186,-0.2460323 0.860826,-0.4502845 0.103597,-0.1028947 0.270359,-0.3674559 0.300332,-0.476462 0.01361,-0.04954 0.03646,-0.1177659 0.05078,-0.1516937 0.01432,-0.033891 0.02492,-0.1646574 0.02357,-0.290507 -0.0021,-0.1928812 -0.01403,-0.2600609 -0.07606,-0.4278018 -0.08892,-0.2404487 -0.233323,-0.4478678 -0.43931,-0.6310262 -0.185791,-0.1652037 -0.37802,-0.258709 -0.631073,-0.3069987 -0.546295,-0.1042281 -1.007618,0.017038 -1.403382,0.3688448 -0.315294,0.2802842 -0.436581,0.5321872 -0.461932,0.9593872 -0.01331,0.2242255 -0.0087,0.2787008 0.0352,0.4134028 0.02779,0.085375 0.252771,1.3467701 0.499953,2.8032037 0.326692,1.9248952 0.459819,2.6586956 0.487487,2.6870491 0.03572,0.036576 0.204578,0.039354 2.743317,0.044725 l 2.705254,0.00556 0.8359589,1.9329597 c 0.459778,1.063134 0.852937,1.960619 0.873689,1.994418 0.02075,0.0338 0.05724,0.06065 0.08108,0.05972 0.02385,-9.26e-4 0.743064,-0.219651 1.598265,-0.486027 z"
+       style="fill:#ffffff;stroke:none"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1.svg	(revision 42196)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9243"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 91">
+  <defs
+     id="defs9245" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="2.1455706"
+     inkscape:cy="8.742918"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="945"
+     inkscape:window-height="527"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata9248">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1"
+       id="path3054"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.89698565,0,0,0.82522682,-32.000002,-7.6800006)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3.svg	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9941"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 134">
+  <defs
+     id="defs9943" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9946">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99958342;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3054-2-4"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.85123193,0,0,0.7831334,-29.959669,-6.8801903)" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86131358;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954"
+       width="3.8836451"
+       height="3.8836451"
+       x="6.0581775"
+       y="6.0581775"
+       rx="3.0045822" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5.svg	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg5152"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 119">
+  <defs
+     id="defs5154" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5157">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99958342;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3054-2-4-40"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.85123193,0,0,0.7831334,-29.959669,-6.8801904)" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86131358;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954-8"
+       width="3.8836451"
+       height="3.8836451"
+       x="6.0581036"
+       y="6.0581551"
+       rx="3.0045822" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg5265"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 125">
+  <defs
+     id="defs5267" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5270">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(0,1.0348934,-1.0346498,0,16.04488,-0.04489827)"
+       style="fill-rule:evenodd"
+       id="Layer_x0020_1">
+      <metadata
+         id="CorelCorpID_0Corel-Layer" />
+      <path
+         inkscape:connector-curvature="0"
+         class="fil0 str0"
+         d="m 0.957784,8.229 c 0.260157,3.58673 3.21015,6.37515 6.81583,6.37515 3.60568,0 6.55728,-2.78392 6.81588,-6.37515 l -13.6317,0 z m 13.6317,-0.903393 c -0.222639,-3.57506 -3.21969,-6.37884 -6.81588,-6.37884 -3.59618,0 -6.55446,2.7752 -6.81583,6.37884 l 13.6317,0 z m -14.5461,0.44801 c 0,-4.27455 3.45751,-7.73024 7.73024,-7.73024 4.27273,0 7.73029,3.46949 7.73029,7.73024 0,4.26076 -3.44489,7.73393 -7.73029,7.73393 -4.28539,0 -7.73024,-3.45938 -7.73024,-7.73393 z"
+         id="path8955" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Coral.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Coral.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pink.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pink.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/carretera-nacional.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/carretera-nacional.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/carretera-nacional.svg	(revision 42196)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--Copyright 2001 The Apache Software Foundation Licensed 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.
+-->
+<!--=========================================================================-->
+<!--GVT under the spot-light!-->
+<!---->
+<!--@author vincent.hardy@eng.sun.com-->
+<!--@version $Id: complex.svg,v 1.1 2005/09/28 11:14:43 fjp Exp $-->
+<!--=========================================================================-->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   contentScriptType="text/ecmascript"
+   zoomAndPan="magnify"
+   sodipodi:docbase="/home/jaume/gvSIG/Styles"
+   baseProfile="full"
+   contentStyleType="text/css"
+   id="svg2755"
+   version="1.0"
+   width="50"
+   preserveAspectRatio="xMidYMid meet"
+   inkscape:version="0.45.1"
+   sodipodi:docname="Carretera Nacional.svg"
+   viewBox="0 0 50 15"
+   height="15"
+   sodipodi:version="0.32"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata2887">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     bordercolor="#666666"
+     inkscape:window-height="959"
+     inkscape:zoom="12.04154"
+     id="base"
+     inkscape:current-layer="svg2755"
+     inkscape:window-y="31"
+     inkscape:cy="-0.68744527"
+     inkscape:window-x="0"
+     inkscape:cx="26.082677"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1273"
+     pagecolor="#ffffff"
+     borderopacity="1.0" />
+  <defs
+     id="defs2757" />
+  <g
+     id="g3446"
+     transform="matrix(3.129734,0.000000,0.000000,3.129734,-351.7159,-2.378312)">
+    <g
+       style="font-size:12.000000"
+       id="g1761"
+       transform="matrix(0.344216,-0.336555,0.344216,0.336555,114.7027,73.24620)">
+      <g
+         id="g1765" />
+    </g>
+  </g>
+  <rect
+     x="0.18481575"
+     width="49.851067"
+     y="0.072910473"
+     height="14.896672"
+     id="rect2232"
+     style="fill:#ff3333;stroke:#000000;stroke-width:0.11729663" />
+  <rect
+     x="20.94632"
+     width="27.447412"
+     y="1.8323597"
+     height="11.377773"
+     id="rect2234"
+     style="fill:#ffffff;stroke:#000000;stroke-width:0.11729663" />
+  <text
+     x="206.0"
+     y="213.0"
+     id="text2242">
+    <tspan
+       space="preserve"
+       id="tspan2244" />
+  </text>
+  <text
+     xml:space="preserve"
+     style="font-size:17.50440216px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     x="-0.33892575"
+     y="14.514148"
+     id="text2506"
+     transform="scale(1.0949085,0.9133183)"><tspan
+       sodipodi:role="line"
+       id="tspan2508"
+       x="-0.33892575"
+       y="14.514148">N-</tspan></text>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4988"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 110">
+  <defs
+     id="defs4990" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="18.591489"
+     inkscape:cy="11.918317"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4993">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.06268977pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path908"
+       d="m 8.0006932,0.05617788 c -1.100613,0.71531096 -2.439497,1.13827962 -3.885602,1.13827962 -1.008015,0 -1.960651,-0.20896893 -2.8205286,-0.57478911 C 0.5085387,2.0933062 0.0625,3.7495678 0.0625,5.5044893 0.0625,10.312232 3.3787922,14.396652 8.0027272,15.9375 12.626652,14.396652 15.94092,10.312232 15.94091,5.5044893 c 0,-1.7549215 -0.446378,-3.4111831 -1.232062,-4.88482091 -0.860008,0.36595864 -1.814339,0.57478911 -2.822564,0.57478911 -1.446104,0 -2.7849878,-0.42295943 -3.8855908,-1.13827962 z" />
+    <g
+       id="g3418"
+       transform="matrix(0.02747966,0,0,0.02542994,-2.5072793,-2.611974)">
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#007fff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1540"
+         d="m 720.375,594.4375 -546.28125,0 c -1.89326,15.80195 -2.875,31.90764 -2.875,48.21875 0,178.1432 115.27353,329.46877 276.03125,386.56255 160.75775,-57.09374 276.00006,-208.41935 276,-386.56255 0,-16.31111 -0.9808,-32.4168 -2.875,-48.21875 z" />
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1536"
+         d="m 447.1875,440.78125 c -38.26419,26.50485 -84.8177,42.15626 -135.09375,42.15625 -35.04504,10e-6 -68.16783,-7.72644 -98.0625,-21.28125 -17.95111,35.86827 -30.66991,74.67395 -37.375,115.5 l 541.15625,0 c -6.70771,-40.82605 -19.46303,-79.63173 -37.40625,-115.5 -29.89941,13.55999 -63.07285,21.28125 -98.125,21.28125 -50.2761,10e-6 -96.8296,-15.65137 -135.09375,-42.15625 z" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1.svg	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9378"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 100">
+  <defs
+     id="defs9380" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="3.7553234"
+     inkscape:cy="8.3206877"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="675"
+     inkscape:window-height="383"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata9383">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1"
+       id="path3068"
+       sodipodi:sides="5"
+       sodipodi:cx="274.54272"
+       sodipodi:cy="-16.286432"
+       sodipodi:r1="11.633166"
+       sodipodi:r2="9.4114285"
+       sodipodi:arg1="0.92729522"
+       sodipodi:arg2="1.5556137"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 281.52262,-6.9798992 -13.67403,0.207623 -4.42297,-12.9406178 10.94049,-8.205364 11.18456,7.869423 z"
+       inkscape:transform-center-x="0.039467226"
+       inkscape:transform-center-y="-0.76570938"
+       transform="matrix(0.72316231,0,0,0.72316231,-190.49948,20.543443)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/placa-calle.svg.gvssty
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/placa-calle.svg.gvssty
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3.svg	(revision 42196)
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg10122"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 144">
+  <defs
+     id="defs10124" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="7.3775512"
+     inkscape:cy="4.5421113"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata10127">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3068-4-7"
+       sodipodi:sides="5"
+       sodipodi:cx="274.54272"
+       sodipodi:cy="-16.286432"
+       sodipodi:r1="11.633166"
+       sodipodi:r2="9.4114285"
+       sodipodi:arg1="0.92729522"
+       sodipodi:arg2="1.5556137"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 281.52262,-6.9798992 -13.67403,0.207623 -4.42297,-12.9406178 10.94049,-8.205364 11.18456,7.869423 z"
+       inkscape:transform-center-x="-0.008737422"
+       inkscape:transform-center-y="-0.76020481"
+       transform="matrix(0.69169736,0.01293397,-0.01293397,0.69169736,-182.11987,16.786371)" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86836129;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954-4"
+       width="3.9154232"
+       height="3.9154232"
+       x="6.1648378"
+       y="6.2299905"
+       rx="3.0291674"
+       transform="matrix(0.99982522,0.01869562,-0.01869562,0.99982522,0,0)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2.svg	(revision 42196)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4399"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 77">
+  <defs
+     id="defs4401" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4404">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.96895421;stroke-opacity:1"
+       id="rect5865"
+       width="15.031046"
+       height="14.918031"
+       x="0.48447704"
+       y="0.54098463" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;stroke:none"
+       inkscape:connector-curvature="0"
+       d="M 11.314042,3.7054976 C 11.78069,3.389793 14.147109,1.6385632 14.566075,1.4112271 L 14.92669,1.923707 c -0.350451,0.2601643 -0.73467,0.5767992 -1.157319,0.9476276 l -1.49059,1.4975286 C 11.258966,5.4571926 10.142838,6.8750924 8.9239999,8.6304983 7.7083792,10.381728 6.8052073,11.878802 6.2140579,13.122232 L 5.4687674,13.624043 C 4.8507683,14.053174 4.4318023,14.375816 4.2119077,14.588773 4.1262522,14.269347 3.9337114,13.747168 3.6383741,13.029638 L 3.3569122,12.387096 C 2.9550966,11.443228 2.5805861,10.742354 2.2338458,10.296121 1.8908263,9.8461193 1.5024306,9.5508209 1.07331,9.4095861 1.7973125,8.6369904 2.4639433,8.252771 3.074995,8.252771 c 0.5082941,0 1.0786108,0.7003795 1.710495,2.101642 l 0.3124488,0.703646 C 6.2830281,9.0596288 8.1273067,6.8274198 10.630309,4.3582047 l 0.683733,-0.6527071 z"
+       class="fil2"
+       id="_43289992-3" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 2.svg	(revision 42196)
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg5189"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 5">
+  <defs
+     id="defs5191">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath774">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 271.093,596.436 54.424,0 0,54.375 -54.424,0 0,-54.375 z"
+         id="path776" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath780">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 299.373,607.028 c 8.805,0.172 25.366,2.9 25.104,10.071 -0.469,12.891 -23.302,12.016 -28.416,12.016 -18.19,0 -25.866,-8.084 -22.326,-14.083 7.12,-8.36 19.106,-8.134 25.638,-8.004"
+         id="path782" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.8481082"
+     inkscape:cx="7.4058783"
+     inkscape:cy="-3.8639217"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5194">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       id="path786"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 6.3459723,11.668779 0.045515,-0.112975 c 0.04389,-0.40232 0.088592,-0.911926 -0.3559927,-0.599823 -0.4478356,0.312103 -0.4055716,1.472737 0.3104777,0.712798"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path790"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 8.2340342,13.68282 0.1267919,0.03901 c 0.2844691,0.135732 0.3852524,0.263337 0.681913,0.214571 0.2942223,-0.04551 0.6095766,-0.602262 -0.4145121,-1.204523 -1.0273397,-0.603888 -2.0408624,-0.643713 -2.2294247,-0.04633 -0.1877496,0.592508 0.2682137,0.782696 0.7436834,0.745309 0.4787208,-0.03495 0.5510572,0.03495 1.0915485,0.251958"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path792"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 3.6905745,1.4036613 c -0.7583133,0.176371 -0.6233936,0.841216 -0.6233936,1.648295 0,0.401508 1.2931151,-0.04551 1.9628361,-0.93631 0.6680965,-0.891607 -0.5803165,-0.891607 -1.3394425,-0.711985"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path794"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="M 0.30953857,6.1817773 C -0.18299931,6.6735024 0.0665207,6.6442427 0.2437043,6.8214263 0.56881181,7.1465338 0.42413897,6.89295 1.1288095,7.0083631 1.6148452,7.0872017 1.9196335,6.6344895 1.7375733,6.449991 1.246661,5.954202 0.80045091,5.6916777 0.30953857,6.1817773"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path798"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 11.685051,6.7612814 c -0.267401,0.267401 0.136545,0.5786914 0.447836,0.3121032 0.310477,-0.2682137 -0.06502,-0.692479 -0.447836,-0.3121032"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path802"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 13.803126,4.8772834 c 0,0 -0.481159,-0.2381413 -0.776194,-0.073962 -0.206443,0.1129749 -0.863973,0.6160788 -0.459214,1.0590378 0.273903,0.2990989 0.606325,1.2565405 1.193144,0.2625243 0.254397,-0.4348313 0.533177,-1.2476001 0.04226,-1.2476001"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path804"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 9.919935,12.607744 c 0.432799,0.432237 0.865037,0.308982 0.926945,0.0923 0.06191,-0.214993 0.864474,-0.02983 1.204973,-0.245385 0.339937,-0.217244 0.276902,-0.402408 0.555492,-0.834645 0.278027,-0.432799 0.247073,-0.648354 0.247073,-1.1425 0,-0.24651 0.240319,-0.461503 0.580818,-0.6376621 l 0.0051,0 c 0,0 0.529602,-0.1750334 0.670867,-0.4266087 0.140703,-0.2532637 -0.0073,-0.5110299 0.171657,-0.7187062 0.285344,-0.3303685 0.790746,-0.8644736 1.160511,-0.6787468 0,0 0.111998,0.048964 0.281404,-0.1052452 0.16829,-0.1542095 0.395665,-0.3922774 0.120451,-0.5115928 -0.315735,-0.137888 -1.413211,-0.3697651 -1.691239,-0.2459472 -0.278027,0.123255 -0.549301,0.8627852 -0.520597,1.2021586 0.02139,0.2121787 -0.185164,0.5329795 -0.185164,0.5329795 l -0.01745,0.00788 c -0.128883,0.084984 -0.265646,0.2251234 -0.419856,0.4710706 -0.433924,0.6804349 -0.79975,0.4097244 -2.009788,0.030954 -0.272399,-0.085547 -0.48908,0.2245606 -0.39678,0.5633712 0.0923,0.3388104 0.30448,0.3005394 1.167264,0.3005394 0.866725,0 0.744033,0.587009 -0.0287,1.420528 -0.772172,0.833519 -1.469492,-0.907809 -2.1623097,-0.247636 -0.443493,0.421544 -0.093989,0.741219 0.3393736,1.172893"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path824"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 0.22489611,15.30167 c 0.1609282,0.883479 1.64910779,0.102409 1.64910779,0.102409 0.5348019,0.0894 1.6946229,-0.08859 2.1855353,-0.357619 0.4925379,-0.266588 0.7144237,-0.399882 0.7575005,-0.756687 0.046328,-0.356806 0.7583133,-0.711986 0.7152365,-1.470299 -0.044702,-0.757501 -0.400695,-1.648295 -1.2053361,-1.648295 -0.8022028,0 -1.4711115,0.131668 -1.7393252,0.399069 -0.2674009,0.268214 -0.713611,0.668909 -0.9379351,0.713611 -0.2218859,0.0447 -0.71361099,0.44621 -0.5356147,0.713611 0.1804347,0.266588 0.6250192,0.625019 1.2508512,0.0447 0.6242064,-0.580317 1.2037105,-0.580317 1.5166265,-0.267401 0.3121032,0.31129 0.2682137,1.068791 -0.312916,1.292302 -0.5795041,0.222699 -1.3345663,0.626645 -1.918947,0.312103 -0.66484489,-0.359244 -1.58408639,0.03739 -1.42478369,0.922493"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path828"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 12.298259,15.643276 c 0.09823,0.172578 0.741679,-0.04911 1.062502,-0.222593 0.172128,-0.09237 0.358674,-0.142388 0.53035,-0.141938 l 0.03515,0.01262 c 0.06083,0.04191 0.198262,0.07209 0.43978,-0.243772 0.321725,-0.420404 0.494753,-0.692564 0.791696,-0.692564 0.296491,0 0.444737,-0.19691 0.345155,-0.493401 -0.09733,-0.296042 -0.588479,-0.751143 -0.514581,-0.874606 0.0748,-0.123913 0.69707,-0.558287 0.441582,-0.865593 -0.332088,-0.400127 -1.144961,-0.21989 -0.827742,0.255938 0.09823,0.147345 -0.104088,0.792597 -0.129772,0.867395 -0.02433,0.0748 0.437979,0.271259 0.560991,0.345156 0.124364,0.0739 0.197811,0.173028 0.0748,0.271709 -0.123463,0.09958 -0.321725,0.149147 -0.469971,0.124364 -0.148696,-0.02478 -0.322625,-0.124364 -0.420855,0.123012 -0.09868,0.246025 -0.0068,0.65111 -0.291084,0.614611 l -0.01262,0.004 c -0.07164,-0.04596 -0.155906,-0.116253 -0.230704,-0.173028 -0.296942,-0.221692 -0.322176,0.09958 -0.420856,0.396073 -0.09823,0.297392 -0.228451,0.299646 -0.395172,0.247377 -0.396523,-0.123013 -0.668232,0.272609 -0.56865,0.445187"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path844"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="M 9.5645367,5.086165 C 10.083896,5.112986 10.545549,5.068284 10.633328,4.8683429 10.744677,4.6236995 10.817827,4.3140346 11.032398,4.0945871 L 11.15919,3.9572291 C 11.298986,3.8174329 10.961687,3.4598146 11.259973,3.441121 12.019099,3.398044 13.422751,3.482572 13.715347,2.9510214 13.783617,2.825855 13.780367,2.4300366 14.211136,2.2252189 14.641904,2.0171501 15.55383,0.74516687 14.541933,0.32008881 11.944324,-0.76820858 13.13503,2.0147117 12.867629,2.4609218 12.598603,2.9071319 12.240172,2.6397309 11.884992,2.3715172 11.526561,2.1041163 11.140496,2.9575235 10.515477,3.1363327 9.8896445,3.314329 9.9343465,2.8689317 9.4450596,2.8242295 8.9549601,2.7803399 8.6404186,3.0916304 8.5054989,3.6719473 8.4794903,3.7865477 8.4477924,3.8832672 8.4079667,3.9604802 L 8.2551662,4.0994637 C 8.0966762,4.4107541 7.8195221,3.9035864 7.2879713,3.9035864 c -0.6697215,0 -1.0679782,0.6225809 -0.8899818,1.0696037 0,0 0.3966312,0.3568055 0.8477178,-0.044702 0.4445846,-0.4023205 0.034949,-0.2763414 0.6599683,-0.098345 L 8.086923,4.8602151 C 9.2930719,5.086165 8.3600133,6.502821 8.9395175,6.2801223 9.5206471,6.0574237 10.010747,6.4581187 9.8750145,6.9945461 9.7433458,7.5301607 8.7168188,8.689169 8.1381274,8.7338713 7.556185,8.776948 6.972617,8.5550621 6.884838,8.3323635 6.7946207,8.1080393 6.7556078,8.1519288 7.0668982,7.8861534 7.3773759,7.6179397 7.3773759,7.5285352 7.15549,7.3505388 6.9344169,7.1717297 6.529658,7.4399434 6.4402535,7.8406384 6.3516617,8.2437717 6.0428095,8.5111726 5.7250169,8.288474 5.415352,8.0641498 4.1092326,6.4345484 4.6448472,6.298816 5.1796491,6.1663347 5.4925651,6.344331 5.4925651,6.0330406 5.4925651,5.7209374 5.4039733,5.7209374 5.1357596,5.5868305 4.8675459,5.4543492 4.8675459,5.4543492 4.733439,5.2755401 4.6009577,5.0975437 4.375008,5.0520287 4.0637176,5.0520287 c -0.3112905,0 -0.3112905,0.044702 -0.6250192,-0.2218859 C 3.1282207,4.5627419 2.4584992,4.5627419 2.234175,5.0520287 2.0114764,5.542941 2.4584992,6.1224452 2.9924883,6.0777429 c 0.5356146,-0.044702 1.3516345,1.0939868 1.3516345,1.4524178 0,0.3559927 -0.2218859,1.0249014 -0.9371224,0.8022028 C 2.6933894,8.1080393 2.4251757,7.6179397 1.9805912,7.7073443 1.5335683,7.7967488 1.4896788,8.1519288 1.8448588,8.8663526 2.0960043,9.3662054 2.2488049,10.026173 3.0063054,9.490559 3.7662442,8.9549444 4.0328323,8.421768 4.6578515,8.6005772 5.282058,8.776948 5.415352,8.9549444 5.5949739,9.4011544 c 0.1796219,0.4462099 0,0.7566876 0.9346841,0.5795039 C 7.4667804,9.8018493 8.895628,9.7132573 9.4320553,9.3117499 9.9660445,8.9102421 10.487842,7.1725424 10.499221,6.7263324 10.513851,6.3849695 10.685345,6.1508921 10.613822,5.908687 10.534983,5.6664819 10.415506,5.5917071 10.213939,5.6445371 9.6450008,5.7908355 8.9769048,5.1471226 9.5645367,5.086165"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path846"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 9.5645367,5.086165 -0.00163,0 c 8.128e-4,0 8.128e-4,0 0.00163,0"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry.svg	(revision 42196)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4298"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 71">
+  <defs
+     id="defs4300" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4303">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       id="rect5192"
+       width="14.511628"
+       height="16"
+       x="0.74418592"
+       y="0" />
+    <g
+       transform="matrix(0.04742571,0,0,0.042485,-2.4098722,-1.4717795)"
+       id="g1849"
+       style="fill:#ffffff">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff;stroke:none"
+         id="path1851"
+         d="m 196.963,300.274 49.531,-0.102 0,-38.482 c 0,-10.438 4.866,-20.3 17.886,-28.841 13.019,-8.537 49.364,-25.861 49.364,-71.409 0,-45.55 -38.167,-76.858 -70.25,-83.5 -32.078,-6.642 -66.835,-2.272 -91.5,24.75 -22.087,24.197 -26.741,43.337 -26.741,85.565 l 49.491,0 0,-9.815 c 0,-22.501 2.603,-46.254 34.75,-52.75 17.546,-3.546 33.994,1.958 43.75,11.5 11.16,10.912 11.25,35.5 -6.533,47.743 l -27.896,18.979 c -16.272,10.438 -21.852,22.059 -21.852,39.139 l 0,57.223 z" />
+      <g
+         id="g1853"
+         style="fill:#ffffff">
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#ffffff;stroke:none"
+           id="path1855"
+           d="m 196.638,370.692 0,-51.005 50.212,0 0,51.005 -50.212,0 z" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#ffffff;stroke:none"
+           id="path1857"
+           d="M 221.744,345.19" />
+      </g>
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt.svg	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4119"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 62">
+  <defs
+     id="defs4121" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4124">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:block"
+       sodipodi:nodetypes="cccccccccccc"
+       id="path4828-6"
+       d="M 10.244058,0.1687054 4.0537146,6.4752102 7.390513,6.5917277 2.096144,11.853249 4.3385904,11.895129 0.62290405,16 9.6010756,10.992933 6.2590116,11.028163 13.024025,5.6262796 9.3646864,5.6169102 15.377096,5e-7 10.244058,0.1683587 z" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rose.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rose.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 4.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 4.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 4.svg	(revision 42196)
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg354679"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="03.svg">
+  <defs
+     id="defs354681">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath142024">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 152.65,2261.571 44.289,0 0,-41.121 -44.289,0 0,41.121 z"
+         id="path142026" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136296">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1017.246,1599.996 6.87,0 0,-11.353 -6.87,0 0,11.353 z"
+         id="path136298" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136284">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 982.894,1599.996 34.472,0 0,-11.353 -34.472,0 0,11.353 z"
+         id="path136286" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136272">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 959.991,1599.996 23.023,0 0,-11.353 -23.023,0 0,11.353 z"
+         id="path136274" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136260">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1017.246,1588.762 6.87,0 0,-34.474 -6.87,0 0,34.474 z"
+         id="path136262" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136248">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 982.894,1554.288 34.472,0 0,34.474 -34.472,0 0,-34.474 z"
+         id="path136250" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136236">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 959.991,1588.762 23.023,0 0,-34.474 -23.023,0 0,34.474 z"
+         id="path136238" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136224">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1017.246,1554.408 6.87,0 0,-20.2 -6.87,0 0,20.2 z"
+         id="path136226" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136212">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 982.894,1554.408 34.472,0 0,-20.2 -34.472,0 0,20.2 z"
+         id="path136214" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath136200">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 959.991,1554.408 23.023,0 0,-20.2 -23.023,0 0,20.2 z"
+         id="path136202" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.696216"
+     inkscape:cx="8.4371964"
+     inkscape:cy="5.4108258"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="818"
+     inkscape:window-height="691"
+     inkscape:window-x="467"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata354684">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g136204"
+       transform="matrix(0.2130748,0,0,-0.2130748,0.75247307,13.333156)">
+      <path
+         inkscape:connector-curvature="0"
+         d="M 0,0 4.39,-0.053 4.326,0.103 2.448,4.072 m 9.652,-16.287 0.43,4.369 -0.163,-0.05 -4.114,-1.532 m 5.811,7.641 2.333,3.72 -0.168,0.027 -4.366,0.463 M 4.676,-7.123 0.339,-6.434 0.38,-6.599 1.664,-10.798 M 9.53,10.62 8.506,6.35 8.674,6.379 12.959,7.332 m 5.182,2.693 2.729,-3.439 0.08,0.149 1.893,3.961 m -3.112,-17.351 -1.296,-4.195 0.169,0.018 4.338,0.676"
+         style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path136206" />
+    </g>
+    <g
+       id="g136216"
+       transform="matrix(0.2130748,0,0,-0.2130748,8.2631474,13.333156)">
+      <path
+         inkscape:connector-curvature="0"
+         d="M 0,0 4.39,-0.053 4.326,0.103 2.448,4.072 m 9.652,-16.287 0.43,4.369 -0.163,-0.05 -4.114,-1.532 m 5.811,7.641 2.333,3.72 -0.168,0.027 -4.366,0.463 M -2.47,7.74 -4.022,11.848 -4.144,11.73 -7.155,8.534 M -5.481,-2.877 -8.137,0.62 -8.221,0.472 -10.198,-3.448 M 4.676,-7.123 0.339,-6.434 0.38,-6.599 1.664,-10.798 M 9.53,10.62 8.506,6.35 8.673,6.379 12.959,7.332 m 5.181,2.693 2.73,-3.439 0.08,0.149 1.893,3.961 m -3.113,-17.351 -1.295,-4.195 0.168,0.018 4.339,0.676"
+         style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path136218" />
+    </g>
+    <g
+       id="g136228"
+       transform="matrix(0.2130748,0,0,-0.2130748,15.056398,11.683957)">
+      <path
+         inkscape:connector-curvature="0"
+         d="M 0,0 -1.552,4.108 -1.674,3.99 -4.685,0.794 m 1.674,-11.411 -2.656,3.497 -0.084,-0.148 -1.977,-3.92"
+         style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path136230" />
+    </g>
+    <g
+       id="g136240"
+       transform="matrix(0.2130748,0,0,-0.2130748,0.94360193,6.0131839)">
+      <path
+         inkscape:connector-curvature="0"
+         d="M 0,0 4.39,-0.053 4.326,0.103 2.448,4.072 m 9.652,-16.287 0.43,4.369 -0.163,-0.051 -4.114,-1.531 m 5.811,7.641 2.333,3.72 -0.168,0.027 -4.366,0.463 M 4.676,-7.123 0.339,-6.434 0.38,-6.599 1.664,-10.798 M 9.53,10.62 8.506,6.35 8.674,6.379 12.959,7.332 m 5.182,2.693 2.729,-3.439 0.08,0.149 1.893,3.961 m -3.112,-17.351 -1.296,-4.195 0.169,0.017 4.338,0.677 m -7.424,-10.432 2.863,3.329 -0.162,0.051 -4.247,1.112 m -9.407,0.252 -1.934,-3.942 0.169,-0.009 4.391,-0.008"
+         style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path136242" />
+    </g>
+    <g
+       clip-path="url(#clipPath136248)"
+       id="g136246"
+       transform="matrix(0.2130748,0,0,-0.2130748,-203.44904,341.73085)">
+      <g
+         transform="translate(993.605,1575.586)"
+         id="g136252">
+        <path
+           id="path136254"
+           style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 4.39,-0.053 4.326,0.103 2.448,4.072 m -10.97,-19.426 4.332,0.712 -0.09,0.143 -2.54,3.581 m 18.92,-1.297 0.43,4.369 -0.163,-0.051 -4.114,-1.531 m 5.811,7.641 2.333,3.72 -0.168,0.027 -4.366,0.463 M -2.47,7.74 -4.022,11.848 -4.144,11.73 -7.155,8.534 M -5.481,-2.877 -8.137,0.62 -8.221,0.472 -10.198,-3.448 M 4.676,-7.123 0.339,-6.434 0.38,-6.599 1.664,-10.798 M 9.53,10.62 8.506,6.35 8.673,6.379 12.959,7.332 m 5.181,2.693 2.73,-3.439 0.08,0.149 1.893,3.961 m -3.113,-17.351 -1.295,-4.195 0.168,0.017 4.339,0.677 m -7.424,-10.432 2.863,3.329 -0.162,0.051 -4.247,1.112 m -9.407,0.252 -1.934,-3.942 0.169,-0.009 4.391,-0.008"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="g136264"
+       transform="matrix(0.2130748,0,0,-0.2130748,13.766869,9.2847343)">
+      <path
+         inkscape:connector-curvature="0"
+         d="M 0,0 4.332,0.712 4.242,0.855 1.702,4.436 M 6.052,23.094 4.5,27.202 4.378,27.084 1.367,23.888 M 3.041,12.477 0.385,15.974 0.301,15.826 -1.676,11.906"
+         style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path136266" />
+    </g>
+    <path
+       id="path136278"
+       style="fill:none;stroke:#000000;stroke-width:0.12827103;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.2669685,1.4233402 0.091622,-0.93092379 -0.034732,0.0108668 -0.8765898,0.3262175 M 1.6851007,0.3383633 0.76099531,0.19155476 l 0.00874,0.0351573 0.27358799,0.89470112 m 3.849619,-0.88276887 -0.276145,0.89384877 0.03601,-0.00362 0.9243185,-0.14425161 M 3.9952581,3.2074154 4.6052912,2.4980894 4.5707731,2.4872226 3.6658444,2.2502834 m -2.0043945,-0.053695 -0.4120867,0.8399409 0.03601,0.00192 0.9356115,0.0017"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g136288"
+       transform="matrix(0.2130748,0,0,-0.2130748,6.3199048,2.2196013)">
+      <path
+         inkscape:connector-curvature="0"
+         d="M 0,0 4.332,0.712 4.242,0.855 1.702,4.436 M 20.622,3.139 21.052,7.508 20.889,7.457 16.775,5.926 M 13.198,8.231 8.861,8.92 8.902,8.755 10.186,4.556 m 18.066,4.143 -1.295,-4.195 0.168,0.017 4.339,0.677 m -7.424,-10.432 2.863,3.329 -0.162,0.051 -4.247,1.112 m -9.407,0.252 -1.934,-3.942 0.169,-0.009 4.391,-0.008"
+         style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path136290" />
+    </g>
+    <g
+       transform="matrix(0.2130748,0,0,-0.2130748,-203.44904,341.73085)"
+       id="g136292">
+      <g
+         id="g136294"
+         clip-path="url(#clipPath136296)">
+        <g
+           id="g136300"
+           transform="translate(1019.435,1594.586)">
+          <path
+             inkscape:connector-curvature="0"
+             d="M 0,0 4.332,0.712 4.242,0.855 1.702,4.436"
+             style="fill:none;stroke:#000000;stroke-width:0.602;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path136302" />
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 6.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 6.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 6.svg	(revision 42196)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg355434"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 8">
+  <defs
+     id="defs355436">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath53030">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1920.839,1270.851 28.964,0 0,-31.415 -28.964,0 0,31.415 z"
+         id="path53032" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath53018">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1887.339,1270.851 33.62,0 0,-31.415 -33.62,0 0,31.415 z"
+         id="path53020" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath53006">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1885.68,1270.851 1.779,0 0,-31.415 -1.779,0 0,31.415 z"
+         id="path53008" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath52994">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1920.839,1239.556 28.964,0 0,-33.62 -28.964,0 0,33.62 z"
+         id="path52996" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath52982">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1887.339,1205.936 33.62,0 0,33.62 -33.62,0 0,-33.62 z"
+         id="path52984" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath52970">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1885.68,1239.556 1.779,0 0,-33.62 -1.779,0 0,33.62 z"
+         id="path52972" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath52958">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1920.839,1206.056 28.964,0 0,-0.992 -28.964,0 0,0.992 z"
+         id="path52960" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath52946">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1887.339,1206.056 33.62,0 0,-0.992 -33.62,0 0,0.992 z"
+         id="path52948" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath52934">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1885.68,1206.056 1.779,0 0,-0.992 -1.779,0 0,0.992 z"
+         id="path52936" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="31.85067"
+     inkscape:cx="5.9734037"
+     inkscape:cy="8.5829809"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata355439">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g355738"
+       transform="matrix(0.99971051,0,0,0.99988996,-0.15685204,-0.01443416)">
+      <g
+         transform="matrix(0.23837155,0,0,-0.23821246,-449.69483,303.27734)"
+         id="g52980"
+         clip-path="url(#clipPath52982)">
+        <g
+           id="g52986"
+           transform="translate(1892.796,1232.844)">
+          <path
+             inkscape:connector-curvature="0"
+             d="M 0,0 C -0.627,1.066 0.69,2.07 1.317,1.38 1.944,0.69 0.941,0.188 0,0 c -0.941,-0.188 -1.568,-2.446 -1.694,-4.077 -0.125,-1.631 0.377,-1.756 1.004,-3.387 0,0 0.669,-0.878 0.083,-1.129 -0.585,-0.251 -1.17,0 -1.17,0.669 0,0.669 0.418,0.753 1.087,0.46 m -0.753,4.955 c -0.188,0.502 -0.125,1.945 -0.941,1.945 -0.815,0 -2.007,1.442 -0.878,1.819 1.129,0.376 1.443,-1.192 0.878,-1.819 m 0.69,-3.513 c 0.377,0.251 0.565,0.753 1.192,0.627 C 0.125,-3.575 2.07,-3.826 1.505,-2.76 0.941,-1.693 0,-1.882 -0.502,-3.45 m -1.254,-1.129 c -0.879,0.941 -0.508,1.92 -1.318,1.38 -0.564,-0.376 -1.215,-1.254 -1.591,-0.125 -0.377,1.129 1.693,1.442 1.881,0.313 m 1.655,-3.324 c 0.376,0.878 0.69,1.38 1.505,0.753 0.816,-0.628 1.443,-0.126 1.192,0.501 -0.251,0.628 -1.317,1.004 -1.192,-0.501 m -1.944,0.062 c -0.69,0.502 -0.878,0.628 -1.255,0 -0.376,-0.627 -2.007,-2.069 -2.258,-0.878 -0.251,1.192 0.502,1.38 1.756,0.251 M -2.707,-24.9 c 0.821,-0.925 -0.277,-2.164 -1.026,-1.609 -0.748,0.556 0.139,1.242 1.026,1.609 0.887,0.365 1.372,1.803 1.18,3.428 -0.191,1.624 -0.708,1.65 -1.637,3.129 0,0 -0.826,0.733 -0.3,1.092 0.526,0.36 1.148,0.225 1.278,-0.43 0.129,-0.657 -0.265,-0.819 -0.978,-0.662 m 1.658,-4.532 c 0.281,-0.456 1.187,-2.073 1.987,-1.917 0.8,0.158 2.247,-1.028 1.213,-1.615 -1.036,-0.587 -1.646,0.891 -1.213,1.615 m -2.008,3.32 c -0.321,-0.32 -0.408,-0.848 -1.048,-0.846 -0.64,0.002 -2.596,-0.126 -1.836,-1.064 0.759,-0.937 1.646,-0.572 1.836,1.064 m 1.013,1.35 c 1.043,-0.754 1.6,-2.079 2.291,-1.393 0.482,0.478 0.951,1.465 1.538,0.43 0.586,-1.036 -1.384,-1.742 -1.786,-0.67 m -2.997,3.235 c -0.2,-0.934 -0.411,-1.487 -1.332,-1.029 -0.921,0.459 -1.44,-0.155 -1.073,-0.721 0.367,-0.568 1.487,-0.731 1.073,0.721 m 1.92,0.314 c 0.774,-0.359 0.983,-0.446 1.231,0.242 0.248,0.688 1.571,2.417 2.046,1.297 0.477,-1.121 -0.226,-1.451 -1.675,-0.585 M 9.22,4.642 C 8.217,5.771 9.597,6.649 10.287,6.147 10.976,5.645 10.663,5.018 9.22,4.642 7.778,4.265 8.091,2.258 9.158,1.505 c 1.066,-0.752 1.191,-2.258 1.254,-4.014 0,0 0.104,-0.648 0.271,-1.234 0.168,-0.585 -0.417,-1.003 -1.254,-0.836 -0.836,0.168 -0.836,1.338 -0.334,1.673 0.502,0.334 1.045,0.46 1.317,0.397 m -0.251,2.07 C 9.22,-0.251 8.53,-0.063 8.091,-0.564 7.652,-1.066 6.147,-1.631 7.527,-2.132 c 1.38,-0.502 1.38,1.254 0.564,1.568 m 1.757,1.317 c 0.25,1.129 -0.251,1.317 0.439,1.505 0.689,0.188 1.191,1.004 1.442,0 0.251,-1.003 -0.502,-1.819 -1.066,0 M 8.593,1.945 C 7.778,1.945 6.233,2.203 5.896,1.192 5.77,0.816 5.331,0.502 5.959,0.063 6.586,-0.376 7.84,0.565 6.649,1.756 m 1.63,1.443 C 7.276,3.324 6.418,3.45 6.251,3.701 5.831,4.331 4.223,5.101 5.415,5.791 6.606,6.481 7.004,4.788 5.582,4.37 M 4.94,-3.632 c 0.932,0.896 2.842,-0.922 1.365,-1.626 -1.476,-0.703 -0.522,1.01 -1.365,1.626 -0.842,0.616 -1.62,1.695 -1.539,2.533 0,0 -1.118,1.856 0.116,1.793 1.234,-0.063 1.145,-1.576 -0.116,-1.793 m 17.298,4.11 c -0.753,-1.129 0.376,-2.133 0.941,-1.694 0.742,0.578 -0.251,1.443 -0.941,1.694 -1.27,0.462 -0.565,1.819 -0.69,2.76 0,0 -0.126,0.501 -0.753,0.439 C 18.629,6.147 18.127,5.394 18.754,4.767 19.381,4.14 19.883,4.014 19.946,4.579 M -4.14,5.959 C -3.136,5.771 -2.363,5.603 -1.61,4.474 -0.858,3.345 0.522,2.216 1.651,2.781 2.78,3.345 4.097,3.91 3.094,4.913 2.09,5.917 1.777,4.349 2.153,3.22 m -3.638,1.003 c 0.063,-0.69 -1.54,-0.66 -2.153,-1.212 -0.627,-0.565 -1.129,-0.753 -1.485,0.02 -0.534,1.163 0.92,1.611 1.485,-0.02 m 2.655,0.71 c 0.753,0 0.69,0.189 1.129,0.941 C 0.585,5.415 1.589,5.854 0.397,6.356 -0.795,6.858 -1.171,5.603 -0.042,4.788 M 13.548,3.199 C 13.485,2.885 12.921,2.133 12.294,3.074 c -0.628,0.94 -0.251,1.819 0.376,1.819 0.627,0 0.815,-1.318 0.878,-1.694 0.063,-0.376 0.69,-0.627 1.443,-0.815 0.753,-0.189 1.317,-0.126 1.442,-1.004 0.126,-0.878 0.565,-1.443 1.38,-1.568 0.816,-0.125 0.941,-1.129 1.318,-1.882 0,0 0.062,0.063 0.439,0.565 0.376,0.502 0.69,0.125 1.191,0.062 0.502,-0.062 0.502,1.13 0.502,1.13 0,0 -1.693,1.693 -1.192,-0.941 m -1.819,0.815 c -0.062,0.815 -0.188,0.941 0.126,1.255 0.314,0.313 1.129,1.379 0.376,1.756 -0.752,0.376 -1.38,-1.067 -0.376,-1.756 m -2.195,1.191 c 0,0.816 -1.192,2.133 -0.753,2.321 0.439,0.188 0.376,1.631 -0.439,1.756 C 14.175,6.21 14.301,4.516 15.242,4.14 M 17.123,0 c -0.878,0.126 -1.066,0.376 -1.442,-0.125 -0.377,-0.502 -1.066,-0.816 -1.255,-0.126 -0.188,0.69 0.628,1.694 1.443,0.377 m 3.074,-1.819 c -0.628,0.062 -0.816,0.188 -1.13,-0.439 -0.313,-0.628 -0.69,-1.506 -1.254,-0.628 -0.564,0.878 0,1.882 1.38,0.816 m -0.147,-16.401 c 0.203,-0.247 1.054,-0.646 1.167,0.479 0.112,1.125 -0.633,1.724 -1.187,1.43 -0.553,-0.295 -0.101,-1.547 0.02,-1.909 0.121,-0.361 0.188,-1.567 -0.389,-2.087 -0.576,-0.52 -1.104,-0.729 -0.802,-1.563 0.301,-0.834 0.178,-1.539 -0.482,-2.033 -0.661,-0.493 -0.301,-1.438 -0.28,-2.28 0,0 -0.085,0.027 -0.653,0.292 -0.568,0.267 -0.668,-0.212 -1.081,-0.503 -0.414,-0.291 -0.973,0.761 -0.973,0.761 0,0 0.7,2.291 1.494,-0.271 m 1.223,1.574 c -0.327,0.749 -0.276,0.919 -0.7,1.048 -0.424,0.13 -1.645,0.688 -1.157,1.374 0.488,0.686 1.719,-0.294 1.157,-1.374 m 1.379,2.083 c -0.383,0.72 -0.497,1.857 -0.973,1.817 -0.476,-0.04 -1.098,1.263 -0.437,1.756 0.661,0.494 1.346,-1.06 0.692,-1.834 m 0.829,-3.952 c 0.717,0.522 0.765,0.832 1.333,0.566 0.568,-0.266 1.324,-0.219 1.166,0.479 -0.157,0.696 -1.349,1.2 -1.45,-0.345 m -1.859,-3.05 c 0.524,0.35 0.632,0.55 1.203,0.143 0.571,-0.407 1.316,-1.006 1.402,0.035 0.086,1.04 -0.884,1.661 -1.602,0.072 m 6.94,31.784 c -0.753,-0.502 0.063,-1.882 1.38,-2.07 1.317,-0.188 1.443,-0.313 1.568,-1.066 0.126,-0.753 -1.066,-2.76 -0.313,-3.387 0.752,-0.627 1.568,0.125 1.317,0.941 -0.251,0.815 -1.129,0.878 -1.506,0.878 m -2.32,3.199 C 23.521,3.638 22.894,2.446 22.079,3.262 21.263,4.077 22.455,4.893 22.831,4.516 23.208,4.14 23.27,3.513 23.27,3.513 m 1.882,0.564 c 0.502,0.251 0.627,0.627 0.816,1.38 0.188,0.753 0.627,1.255 1.254,0.627 C 27.849,5.457 27.347,4.83 26.783,4.767 26.218,4.704 25.905,5.081 25.905,5.081 M 24.713,4.14 c 0.126,-0.439 0.314,-0.941 0.314,-1.38 0,-0.439 -0.188,-1.255 -0.878,-1.129 -0.69,0.125 -0.44,2.07 0.815,1.631 M 11.432,-12.452 c -0.119,-1.146 -0.417,-1.699 0.654,-2.489 1.07,-0.79 1.122,-0.96 0.875,-1.682 -0.246,-0.722 -1.725,-1.528 -1.359,-2.436 0.365,-0.91 1.44,-0.633 1.606,0.204 0.165,0.837 -0.663,1.23 -1.04,1.167 m -0.919,3.839 c -0.807,-0.705 -1.924,-1.458 -2.256,-0.353 -0.331,1.105 1.105,1.258 1.258,0.748 0.153,-0.51 -0.089,-1.092 -0.089,-1.092 m 1.924,-0.395 c 0.561,-0.017 0.85,0.255 1.372,0.828 0.522,0.574 1.147,0.808 1.402,-0.042 0.255,-0.85 -0.484,-1.164 -1.011,-0.952 -0.527,0.213 -0.625,0.693 -0.625,0.693 m -1.495,-0.263 c -0.098,-0.446 -0.316,-1.521 -0.524,-1.907 -0.208,-0.388 -0.761,-1.016 -1.309,-0.579 -0.548,0.438 0.595,2.031 1.491,1.05 m -6.385,1.803 c -0.286,-1.117 -0.661,-1.62 0.282,-2.559 0.943,-0.939 0.969,-1.114 0.619,-1.792 -0.35,-0.678 -2.484,-0.674 -2.256,-1.628 0.228,-0.953 1.025,-0.647 1.618,-0.033 0.186,0.192 0.154,0.803 -0.148,1.029 m -0.501,3.627 c -0.901,-0.578 -2.117,-1.159 -2.283,-0.018 -0.165,1.142 1.277,1.082 1.354,0.556 0.076,-0.527 -0.249,-1.067 -0.249,-1.067 m 1.846,-0.674 c 0.553,-0.099 1.265,-0.62 1.866,-0.129 0.601,0.49 1.253,0.63 1.381,-0.248 0.127,-0.877 -0.65,-1.08 -1.14,-0.793 -0.49,0.287 -0.516,0.776 -0.516,0.776 m -1.905,0.708 c -0.162,-0.427 -0.311,-0.942 -0.574,-1.294 -0.263,-0.352 -0.901,-0.893 -1.379,-0.38 -0.478,0.514 0.886,1.922 1.629,0.819 m 9.09,14.023 c -0.627,0.126 -1.191,0.314 -0.878,1.255 0.314,0.94 0.502,0.689 0.941,-0.251 0.439,-0.941 -0.125,-0.816 0.126,-1.569 0.25,-0.752 0.501,-1.63 0.376,-2.258 -0.126,-0.627 -0.188,-1.693 0.125,-2.634 0.314,-0.941 0.377,-0.439 0.251,-1.129 -0.125,-0.69 1.192,-1.694 -0.188,-1.882 -1.38,-0.188 -0.878,1.757 0.188,1.882 m -0.502,2.509 c 0.628,0 1.129,0.314 1.569,0.125 0.439,-0.188 2.258,0.565 1.568,1.38 -0.69,0.816 -2.07,-0.501 -1.568,-1.38 m -1.506,0.69 c -0.313,0.314 -0.564,0.69 -1.003,0.565 -0.439,-0.126 -1.38,0.125 -1.255,1.003 0.126,0.879 0.941,0.628 1.38,0.126 0.439,-0.502 0.188,-0.816 -0.125,-1.129 m 1.066,-2.133 c -0.753,0 -1.317,0.063 -1.443,-0.251 -0.125,-0.313 0.314,-1.819 -0.752,-1.568 -1.067,0.251 -0.189,1.882 0.752,1.568 m 12.984,5.207 c -0.188,-0.502 0.941,-1.318 1.192,-1.255 0.672,0.168 0.627,0.815 0.502,1.192 -0.259,0.773 -0.879,0.251 -1.694,0.063 -0.815,-0.189 -1.192,2.195 -1.443,2.822 0,0 -1.38,1.192 -1.63,0.126 -0.251,-1.067 0.125,-1.694 0.815,-1.506 0.69,0.188 0.815,1.066 0.815,1.38 M 20.385,-5.52 c -1.38,0.126 -1.505,1.757 -0.251,1.819 1.255,0.063 0,-1.38 0.251,-1.819 0.251,-0.439 0.565,-0.94 1.756,-1.129 1.192,-0.188 1.757,-1.317 2.509,-2.132 0,0 0.753,-1.067 1.945,-0.377 m -2.446,0.941 c -0.063,-0.69 -0.69,-1.003 -0.189,-1.568 0.502,-0.564 1.38,-2.07 0.314,-2.195 -1.066,-0.126 -1.317,2.07 -0.314,2.195 m -2.32,3.199 c 0.376,-0.627 0.313,-1.254 -0.189,-1.693 -0.501,-0.44 -1.944,-1.694 -0.188,-1.757 1.756,-0.062 1.568,1.694 0.188,1.757 m -0.25,1.944 c 0.815,0.125 2.007,-0.125 2.007,0.627 0,0.753 0.125,1.882 0.941,1.819 0.815,-0.063 0.94,-2.258 -0.941,-1.819 m -2.384,-0.376 c -0.941,0.063 -0.878,0 -1.066,-0.627 -0.188,-0.628 0,-2.008 -1.004,-1.38 -1.003,0.627 0.063,1.693 1.004,1.38 m 4.391,-1.318 c 0.878,0.189 1.129,0.377 1.693,0.314 0.565,-0.063 1.255,0.627 0.502,1.192 -0.753,0.564 -1.568,-0.188 -1.004,-1.255 M 4.836,-23.854 c -0.477,-1.3 -2.085,-0.999 -1.821,0.229 0.263,1.228 1.332,-0.357 1.821,-0.229 0.489,0.13 2.63,-1.405 3.119,-0.302 0.49,1.103 1.727,1.356 2.709,1.872 0,0 1.225,0.452 0.866,1.781 m -1.541,-2.12 c 0.65,-0.238 0.945,-0.354 0.945,-0.354 0.676,0.338 2.403,0.245 1.84,-0.67 -0.668,-1.087 -1.978,-0.333 -1.84,0.67 m -3.595,-1.59 c 0.089,0.82 0.711,1.49 -0.017,1.685 -0.727,0.194 -1.785,0.606 -1.514,1.379 0.272,0.771 2.425,0.325 1.514,-1.379 m -1.363,-1.267 c -0.502,-0.062 -0.432,-0.824 -0.565,-0.878 0,0 2.308,-0.509 1.443,-1.317 -0.866,-0.807 -1.432,0.184 -0.886,1.012 m 3.856,2.758 c 0.045,0.897 -0.071,1.188 0.135,1.717 0.206,0.53 -0.282,1.374 -1.022,0.793 -0.74,-0.581 -0.223,-1.563 0.953,-1.293 m 15.098,-3.622 c -0.426,-1.319 1.025,-2.073 1.574,-0.944 0.55,1.129 -1.269,0.542 -1.574,0.944 -0.306,0.403 -0.644,0.888 -0.35,2.058 0.294,1.171 -0.523,2.132 -0.978,3.144 0,0 -0.498,2.57 -0.917,2.821 0,0 -0.752,1.255 -1.421,1.255 -0.669,0 -1.087,-0.251 -0.837,-0.921 0.251,-0.669 0.921,-1.171 1.255,-1.003 0.335,0.167 1.003,0.669 1.003,0.669 m 1.24,-3.504 c -0.659,0.214 -1.194,-0.241 -1.516,0.442 -0.323,0.684 -1.363,2.082 -1.897,1.15 -0.534,-0.931 1.388,-2.023 1.897,-1.15 m 2.032,-3.389 c -0.429,0.592 -1.031,0.78 -1.632,0.491 -0.6,-0.289 -2.32,-1.124 -1.689,0.516 0.631,1.64 2.173,0.778 1.689,-0.516 m 1.691,-0.993 c 0.435,0.7 0.671,1.895 1.364,1.6 0.692,-0.295 1.779,-0.622 2.042,0.152 0.262,0.775 -1.708,1.751 -2.042,-0.152 m -1.281,-2.044 c -0.312,-0.89 -0.345,-0.808 -0.995,-0.735 -0.651,0.072 -1.847,0.787 -1.664,-0.383 0.184,-1.169 1.583,-0.606 1.664,0.383 m 0.51,4.555 c 0.518,0.734 0.789,0.891 0.953,1.435 0.164,0.544 1.069,0.907 1.293,-0.006 0.224,-0.914 -0.788,-1.368 -1.548,-0.431 m -8.78,3.101 c 0.314,0.816 2.572,2.196 2.195,3.45 -0.376,1.255 -2.257,3.325 -0.815,3.513 1.443,0.188 1.192,-1.945 0.251,-2.196 m 0.564,-2.132 c 0.628,0.251 2.384,2.007 3.011,0.564 0.628,-1.442 -1.568,-1.505 -1.693,-0.941 -0.126,0.565 -0.126,1.129 -0.126,1.129 m -2.007,-1.756 c -0.188,0.753 -0.627,3.074 -1.38,2.697 -0.753,-0.376 -0.376,-1.379 0.314,-1.63 0.69,-0.251 0.69,0.125 0.69,0.125 M 6.649,-15.367 c 0.878,0.878 1.129,1.693 1.003,2.697 -0.125,1.003 0.439,3.011 1.443,3.951 1.003,0.941 2.132,1.506 0.627,2.321 C 8.217,-5.582 8.154,-6.837 8.53,-7.213 8.907,-7.589 9.158,-8.029 9.785,-8.029 M 8.028,-10.287 C 7.84,-9.848 7.84,-9.973 7.715,-9.346 7.589,-8.719 7.589,-8.279 6.962,-8.405 6.261,-8.545 5.645,-9.095 6.9,-9.722 c 0.571,-0.286 0.815,0.376 0.815,0.376 m 0.063,-1.756 c 0.69,0.314 1.442,1.38 2.195,0.878 0.753,-0.502 0.564,-1.066 -0.188,-1.317 -0.753,-0.251 -1.129,0.564 -0.941,1.192 m -4.14,2.446 c -0.376,-0.251 -0.627,-0.063 -1.192,0.376 -0.564,0.439 0.126,1.38 1.067,1.192 0.941,-0.188 0.439,-1.694 -0.69,-2.823 -1.129,-1.129 0.125,-2.634 0.125,-3.449 0,0 -0.376,-1.631 -1.568,-0.565 -1.192,1.066 0.188,1.38 0.627,1.129 0.439,-0.251 0.941,-0.564 0.941,-0.564 m -0.627,2.07 C 2.509,-10.475 2.07,-10.663 1.819,-10.098 1.568,-9.534 3.277,-7.386 1.631,-7.276 0.69,-7.213 1.254,-9.158 2.007,-9.22 m 5.206,-5.206 c -0.125,0.941 -0.335,0.912 -0.502,1.693 -0.188,0.878 -0.752,1.443 -1.191,1.066 -0.87,-0.744 0.188,-2.509 1.191,-1.066 m -11.478,4.391 c 1.819,-0.377 1.882,-1.945 1.944,-3.136 0.063,-1.192 0.063,-1.443 -0.188,-2.007 -0.251,-0.565 0.063,-0.691 0.815,-1.004 0.753,-0.314 1.192,-0.251 1.255,-0.753 0.063,-0.502 1.443,-1.317 1.756,-0.815 0.314,0.502 -0.313,2.258 -1.756,0.815 m -1.819,3.513 c 0.69,-0.314 1.004,-0.314 1.255,-0.753 0.25,-0.439 1.254,-0.314 1.254,0.502 0,0.815 -1.631,1.066 -1.254,-0.502 m -1.443,2.007 c -0.502,0.063 -1.129,0.251 -1.317,-0.376 -0.188,-0.627 0.501,-1.317 -0.188,-1.694 -0.691,-0.376 -1.694,0.878 0.188,1.694 m 1.129,-3.074 c -0.251,-0.313 -1.882,-0.815 -1.192,-1.505 0.69,-0.69 1.631,-0.439 1.443,0.251 -0.189,0.69 -0.44,0.878 -0.628,1.003 m 28.101,-3.637 c 0,1.003 -0.251,2.822 0.627,3.449 0.878,0.628 1.317,1.067 1.631,1.568 0.313,0.502 1.003,1.882 0.501,2.447 -0.501,0.564 -1.568,-1.255 -0.501,-2.447 m -2.133,-2.32 c -0.188,0.69 -1.129,2.383 -1.694,1.568 -0.564,-0.816 0.189,-2.007 1.255,-0.753 m 0.251,-2.007 c 0.439,0.188 0.753,1.129 1.756,0.941 1.004,-0.188 1.631,0.062 1.694,-0.628 0.062,-0.689 -0.251,-0.815 -0.941,-0.752 -0.69,0.063 -1.192,0.815 -0.753,1.38 M 7.955,-24.156 c 0.763,0.133 1.014,0.196 1.579,-0.62 0.564,-0.815 -0.314,-0.815 -0.126,-1.254 0.189,-0.439 1.506,-0.941 1.631,-0.439 0.126,0.501 -0.627,1.819 -1.38,1.317"
+             style="fill:none;stroke:#231f20;stroke-width:0.331;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path52988" />
+        </g>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         d="M 9.4793424,9.5985332 C 9.3298835,9.3445987 9.6438186,9.1054334 9.7932773,9.2698 9.9427369,9.4341666 9.7036493,9.5537493 9.4793424,9.5985332 9.2550347,9.6433169 9.1055758,10.181201 9.075541,10.569726 c -0.029797,0.388524 0.089866,0.418301 0.2393251,0.806825 0,0 0.1594706,0.209151 0.019785,0.268942 -0.1394474,0.0598 -0.2788947,0 -0.2788947,-0.159365 0,-0.159363 0.099639,-0.179373 0.2591099,-0.109577 M 9.1353723,10.196208 C 9.0905584,10.076626 9.1055758,9.7328851 8.9110646,9.7328851 8.7167918,9.7328851 8.432653,9.3893827 8.7017744,9.2995765 8.970896,9.2100087 9.0457445,9.5835258 8.9110646,9.7328851 M 9.075541,10.569726 c 0.089866,-0.0598 0.13468,-0.179374 0.2841389,-0.149359 0.149459,0.02977 0.6130913,0.08957 0.4784114,-0.164368 -0.1344411,-0.254172 -0.3587489,-0.20915 -0.4784114,0.164368 M 9.060762,10.689308 C 8.8512334,10.46515 8.9396693,10.23194 8.7465882,10.360575 c -0.1344414,0.08957 -0.2896215,0.298718 -0.379249,0.02977 -0.089628,-0.268942 0.403563,-0.343503 0.4486152,-0.07456 m 0.3942666,0.791818 c 0.089628,-0.209151 0.1644763,-0.328734 0.3587495,-0.179374 0.1945104,0.149598 0.3439701,0.03001 0.2841384,-0.119344 -0.059832,-0.149598 -0.3139353,-0.239165 -0.2841384,0.119344 m -0.4633947,-0.01477 c -0.1644764,-0.119583 -0.2092902,-0.149597 -0.2991564,0 -0.089628,0.149359 -0.4784116,0.492862 -0.5382429,0.20915 -0.059832,-0.283949 0.1196625,-0.328733 0.4188189,-0.0598 m 0.1470752,4.467199 c 0.195703,0.220345 -0.066028,0.51549 -0.2445692,0.383283 -0.1783019,-0.132446 0.033372,-0.29586 0.2445692,-0.383283 0.2114356,-0.08695 0.3270458,-0.429498 0.2812785,-0.816593 -0.045528,-0.386858 -0.1687671,-0.393051 -0.3902143,-0.745368 0,0 -0.1968949,-0.174609 -0.071512,-0.260127 0.1253835,-0.08576 0.2736506,-0.0536 0.3046389,0.102431 0.03075,0.156505 -0.063168,0.195096 -0.2331274,0.157696 m 0.39522,1.07958 c 0.066982,0.108624 0.2829471,0.493814 0.4736438,0.456653 0.1906978,-0.03764 0.5356219,0.244882 0.2891454,0.384713 C 9.6361901,16.028832 9.4907841,15.676754 9.5939984,15.504288 M 9.1153491,14.713431 c -0.076517,0.07623 -0.097256,0.202005 -0.2498135,0.201528 -0.1525577,-4.77e-4 -0.6188125,0.03001 -0.4376501,0.253458 0.180924,0.223205 0.3923596,0.136258 0.4376501,-0.253458 M 9.107006,14.593372 c 0.2486216,0.179612 0.3813946,0.495244 0.5461089,0.331831 0.1148952,-0.113866 0.2266914,-0.348983 0.3666151,-0.102432 0.139687,0.246787 -0.3299051,0.414966 -0.4257312,0.159602 M 8.8795995,14.211755 c -0.047674,0.222492 -0.097971,0.354222 -0.3175108,0.245121 -0.2195402,-0.109339 -0.3432551,0.03692 -0.2557727,0.171751 0.087722,0.135305 0.3544585,0.174134 0.2557727,-0.171751 m 0.4576734,-0.0748 c 0.1844996,0.08552 0.2343192,0.106242 0.2934353,-0.05765 0.059355,-0.16389 0.3744819,-0.575758 0.4877082,-0.308961 0.113703,0.267035 -0.053871,0.345645 -0.3990339,0.139354 M 11.677128,8.492751 c -0.239086,-0.2689419 0.08986,-0.4780925 0.254343,-0.3585099 0.164476,0.1195828 0.08962,0.2689419 -0.254343,0.3585099 -0.343731,0.089806 -0.269122,0.5678985 -0.01478,0.7472725 0.254104,0.1791357 0.2839,0.5378837 0.298918,0.9561845 0,0 0.02503,0.154362 0.06459,0.293955 0.04005,0.139353 -0.09941,0.238927 -0.298918,0.199145 -0.199278,-0.04002 -0.199278,-0.318728 -0.07961,-0.398529 0.119662,-0.07956 0.249098,-0.109578 0.313935,-0.09457 M 11.901429,9.7031134 C 11.677122,9.6583299 11.512646,9.6135455 11.408,9.7328894 11.303356,9.8524719 10.944606,9.987062 11.273559,10.106407 11.602512,10.22599 11.602512,9.8076881 11.408,9.7328894 m 0.418819,-0.3137258 c 0.05959,-0.2689419 -0.05983,-0.3137259 0.104646,-0.3585098 0.164476,-0.044784 0.2839,-0.2391653 0.343731,0 0.05983,0.238927 -0.119662,0.4333085 -0.254104,0 m -0.493429,0.07456 c -0.194272,0 -0.562557,-0.061459 -0.642888,0.1793741 -0.03003,0.089568 -0.13468,0.1643666 0.01502,0.2689419 0.14946,0.1045751 0.448377,-0.1195828 0.164478,-0.4032938 M 11.452821,8.8364916 C 11.213734,8.806715 11.009211,8.7767002 10.969403,8.7169089 10.869287,8.566835 10.485986,8.3834114 10.770124,8.2190448 c 0.283901,-0.1643666 0.378773,0.2389271 0.03981,0.3385 m -0.153039,1.9061762 c 0.222163,-0.213439 0.677453,0.219631 0.325378,0.387334 -0.351837,0.167463 -0.12443,-0.240596 -0.325378,-0.387334 -0.200708,-0.146739 -0.386161,-0.40377 -0.366853,-0.6033923 0,0 -0.266499,-0.4421223 0.02764,-0.4271149 0.294151,0.015007 0.272935,0.3754229 -0.02764,0.4271149 m 4.123351,-0.9790532 c -0.179493,0.2689419 0.08962,0.5081072 0.224308,0.4035319 0.176872,-0.1376868 -0.05983,-0.3437406 -0.224308,-0.4035319 -0.302732,-0.1100541 -0.13468,-0.4333084 -0.164476,-0.6574664 0,0 -0.03003,-0.1193444 -0.179494,-0.1045753 -0.149458,0.015007 -0.269122,0.1943814 -0.119662,0.3437405 0.149459,0.1493594 0.269121,0.1793741 0.284139,0.044783 M 8.4924842,8.1790251 c 0.239325,0.044784 0.4235863,0.084803 0.60308,0.3537455 C 9.2748196,8.8017125 9.6037727,9.0706544 9.8728936,8.9360643 10.142016,8.8017125 10.456189,8.6671225 10.216864,8.4281954 9.9775392,8.1890301 9.9029288,8.5625473 9.9925568,8.8314891 M 9.1253607,8.592562 C 9.1403781,8.7569286 8.7582684,8.7497822 8.6121468,8.8812755 8.4626877,9.0158654 8.3430252,9.0606495 8.2581649,8.8765112 8.1308746,8.5994702 8.4774668,8.492751 8.6121468,8.8812755 M 9.2450232,8.7121446 c 0.1794938,0 0.1644764,-0.045022 0.2691215,-0.2241579 C 9.6187893,8.3086127 9.8581149,8.2040375 9.5739763,8.0844548 9.289837,7.9648722 9.2002093,8.2638288 9.4693308,8.4579719 M 12.7088,8.8364916 c -0.01502,0.074799 -0.149459,0.2539345 -0.298918,0.029776 -0.149458,-0.2239198 -0.05983,-0.4333085 0.08962,-0.4333085 0.14946,0 0.194272,0.313964 0.20929,0.4035319 0.01502,0.089568 0.164476,0.1493592 0.343971,0.1941431 0.179493,0.045022 0.313935,0.030014 0.343731,0.2391653 0.03003,0.2091506 0.13468,0.3437406 0.328952,0.3735172 0.194513,0.029776 0.224309,0.2689418 0.314175,0.4483154 0,0 0.01502,-0.01501 0.104644,-0.1345896 0.08962,-0.1195827 0.164478,-0.029776 0.283901,-0.014769 0.119663,0.014769 0.119663,-0.26918 0.119663,-0.26918 0,0 -0.403564,-0.4032938 -0.28414,0.2241579 m -0.43335,-0.1941428 c -0.01502,-0.1941432 -0.04505,-0.2241579 0.02979,-0.2989567 0.07485,-0.07456 0.269122,-0.3284949 0.08962,-0.418301 -0.179256,-0.089568 -0.328954,0.2541727 -0.08962,0.418301 m -0.523221,-0.283711 c 0,-0.1943813 -0.284138,-0.5081071 -0.179493,-0.5528912 0.104644,-0.044783 0.08962,-0.3885245 -0.104645,-0.418301 -0.194511,-0.030014 -0.164477,0.3735172 0.05983,0.4630851 m 0.448615,0.9861995 c -0.209529,-0.030015 -0.254342,-0.089568 -0.343971,0.029776 -0.08986,0.1195827 -0.254103,0.1943814 -0.299155,0.030015 -0.04481,-0.1643665 0.149696,-0.4035318 0.343969,-0.089806 m 0.732754,0.4333088 c -0.149696,-0.01477 -0.194511,-0.044784 -0.26936,0.104575 -0.07461,0.149597 -0.164237,0.358747 -0.298917,0.149597 -0.134441,-0.20915 0,-0.4483154 0.328953,-0.194381 m -0.03504,3.906923 c 0.04838,0.05884 0.251244,0.153884 0.27818,-0.114104 0.0267,-0.267989 -0.150889,-0.410679 -0.282947,-0.340644 -0.13182,0.07028 -0.02407,0.368515 0.0048,0.454748 0.02884,0.086 0.04481,0.373278 -0.09272,0.49715 -0.137302,0.12387 -0.263162,0.173657 -0.191174,0.372326 0.07175,0.198669 0.04242,0.366608 -0.114895,0.484285 -0.157564,0.117439 -0.07175,0.34255 -0.06675,0.543124 0,0 -0.02026,-0.0065 -0.155656,-0.06956 -0.135157,-0.06361 -0.159233,0.0505 -0.25768,0.119821 -0.09868,0.06932 -0.231935,-0.181279 -0.231935,-0.181279 0,0 0.166859,-0.545745 0.356126,0.06456 m 0.291529,-0.374947 c -0.07794,-0.178421 -0.06579,-0.218918 -0.16686,-0.249647 -0.10107,-0.03097 -0.392122,-0.16389 -0.275797,-0.327303 0.116326,-0.163414 0.409762,0.07003 0.275797,0.327303 m 0.328714,-0.496196 c -0.09131,-0.171514 -0.118472,-0.442361 -0.231935,-0.432832 -0.113465,0.0095 -0.261733,-0.300862 -0.104169,-0.418301 0.157563,-0.117678 0.320849,0.252505 0.164953,0.436881 m 0.19761,0.941416 c 0.170913,-0.124347 0.182354,-0.198192 0.317749,-0.134829 0.135395,0.06336 0.315605,0.05217 0.27818,-0.114103 -0.03766,-0.165796 -0.321802,-0.285855 -0.345877,0.08219 m -0.443133,0.726548 c 0.124907,-0.08337 0.150651,-0.131016 0.286761,-0.03406 0.136111,0.09695 0.313697,0.239642 0.334197,-0.0083 0.0205,-0.247741 -0.21072,-0.395671 -0.381872,-0.01715 m 1.654299,-7.5713454 c -0.179255,0.1195827 0.01502,0.4483159 0.328954,0.4930997 0.313934,0.044784 0.34397,0.074561 0.373767,0.2539346 0.03003,0.179374 -0.254105,0.6574664 -0.07461,0.8068255 0.179255,0.1493593 0.373766,-0.029776 0.313935,-0.2241579 C 16.028125,9.2698 15.818834,9.2547927 15.728967,9.2547927 M 15.175946,8.492751 c -0.08987,0.2391652 -0.239326,0.5231144 -0.433598,0.3287332 -0.194511,-0.1941433 0.08963,-0.3885245 0.179255,-0.2987184 0.08987,0.089568 0.104645,0.2389271 0.104645,0.2389271 m 0.343971,-0.1493592 c 0.03003,0.1045752 0.07484,0.2241579 0.07484,0.3287331 0,0.1045753 -0.04481,0.2989567 -0.20929,0.2689419 -0.164478,-0.029777 -0.104646,-0.4930998 0.194272,-0.3885245 m -3.225644,3.7432708 c -0.02836,0.272991 -0.0994,0.404724 0.155895,0.59291 0.255057,0.188188 0.267453,0.228685 0.208576,0.400675 -0.05863,0.171989 -0.411192,0.363988 -0.323948,0.580285 0.08701,0.216773 0.343256,0.150787 0.382825,-0.04859 0.03933,-0.199384 -0.158041,-0.293002 -0.247906,-0.277994 m -0.219064,-0.914503 c -0.192366,0.167941 -0.458627,0.347314 -0.537766,0.08409 -0.07891,-0.263225 0.263401,-0.299672 0.299871,-0.178183 0.03647,0.121487 -0.02122,0.260128 -0.02122,0.260128 m 0.458627,0.0941 c 0.133727,0.004 0.202616,-0.06075 0.327046,-0.197239 0.12443,-0.136734 0.273412,-0.192477 0.334197,0.01 0.06078,0.20248 -0.115372,0.27728 -0.240993,0.226778 -0.125622,-0.05074 -0.148982,-0.165081 -0.148982,-0.165081 m -0.356367,0.06265 c -0.02336,0.106242 -0.07532,0.362321 -0.124906,0.454271 -0.04958,0.09243 -0.181401,0.242024 -0.312029,0.137925 -0.130627,-0.104337 0.141831,-0.483809 0.355412,-0.250123 m -1.522002,-0.429497 c -0.06817,0.266083 -0.157564,0.385905 0.06721,0.609585 0.224784,0.223681 0.230982,0.265369 0.147551,0.426878 -0.08342,0.161507 -0.592114,0.160554 -0.537766,0.387809 0.05435,0.227017 0.244332,0.154124 0.385685,0.0078 0.04433,-0.04575 0.03671,-0.191286 -0.03528,-0.245121 m -0.119425,-0.863997 c -0.214772,0.137687 -0.504394,0.276089 -0.544202,0.0043 -0.03933,-0.272039 0.304401,-0.257746 0.322756,-0.132446 0.01811,0.125538 -0.05935,0.254172 -0.05935,0.254172 m 0.440034,0.160555 c 0.13182,0.02358 0.301539,0.147693 0.444801,0.03072 0.143261,-0.116724 0.298679,-0.150074 0.329192,0.05908 0.03027,0.208912 -0.154942,0.25727 -0.271744,0.188903 -0.116802,-0.06837 -0.123,-0.184854 -0.123,-0.184854 m -0.454097,-0.168654 c -0.03861,0.101717 -0.07413,0.224396 -0.136826,0.308246 -0.06268,0.08385 -0.214772,0.212725 -0.328714,0.09052 -0.113942,-0.12244 0.211197,-0.457844 0.388307,-0.195096 m 2.166797,-3.340453 c -0.149459,-0.03001 -0.283901,-0.0748 -0.20929,-0.298956 0.07484,-0.2239202 0.119662,-0.1641288 0.224308,0.05979 0.104644,0.224157 -0.0298,0.194381 0.03003,0.373756 0.05959,0.179134 0.119425,0.388285 0.08962,0.537883 -0.03003,0.149359 -0.04481,0.403293 0.0298,0.627451 0.07484,0.224157 0.08986,0.104574 0.05983,0.268942 -0.02979,0.164366 0.284138,0.403532 -0.04481,0.448315 -0.328953,0.04478 -0.20929,-0.418538 0.04481,-0.448315 m -0.119662,-0.597675 c 0.149696,0 0.26912,-0.0748 0.374004,-0.02977 0.104646,0.04479 0.538243,-0.134589 0.373767,-0.328733 -0.164476,-0.19438 -0.493429,0.119345 -0.373767,0.328733 m -0.358988,-0.164366 c -0.07461,-0.0748 -0.134441,-0.164367 -0.239086,-0.13459 -0.104644,0.03001 -0.328952,-0.02977 -0.299157,-0.238927 0.03003,-0.209389 0.224309,-0.149598 0.328953,-0.03001 0.104646,0.119583 0.04481,0.194382 -0.0298,0.268943 m 0.254104,0.508107 c -0.179493,0 -0.313935,-0.015 -0.34397,0.0598 -0.0298,0.07456 0.07484,0.433308 -0.179255,0.373517 -0.254343,-0.0598 -0.04505,-0.448316 0.179255,-0.373517 m 3.095017,-1.240372 c -0.04481,0.119583 0.224306,0.313964 0.284138,0.298955 0.160186,-0.04002 0.149459,-0.194142 0.119663,-0.283948 -0.06173,-0.184138 -0.209291,-0.0598 -0.403801,-0.015 -0.194273,0.04503 -0.28414,-0.5228774 -0.343732,-0.6722366 -2.38e-4,0 -0.328953,-0.2839492 -0.388784,-0.030015 -0.05983,0.2541727 0.02979,0.4035316 0.194273,0.3587476 0.164476,-0.044783 0.194511,-0.2539342 0.194511,-0.3287329 M 14.33854,10.913467 c -0.328953,-0.03001 -0.358749,-0.418539 -0.05983,-0.433308 0.299157,-0.015 0,0.328733 0.05983,0.433308 0.05983,0.104575 0.13468,0.22392 0.418819,0.268942 0.283901,0.04479 0.418581,0.313725 0.597835,0.507869 0,0 0.179494,0.254173 0.463634,0.08981 m -0.583057,-0.224157 c -0.01502,0.164367 -0.164478,0.238927 -0.04505,0.373516 0.119663,0.134353 0.328952,0.4931 0.07485,0.522877 -0.254104,0.03001 -0.313936,-0.493099 -0.07485,-0.522877 M 14.6377,11.167406 c 0.08962,0.149361 0.07461,0.298719 -0.04505,0.403294 -0.119423,0.104813 -0.463393,0.403533 -0.04481,0.418539 0.418819,0.01477 0.373767,-0.403531 0.04481,-0.418539 m -0.05959,-0.463085 c 0.194273,-0.02977 0.478413,0.02977 0.478413,-0.149359 0,-0.179375 0.0298,-0.448316 0.224308,-0.433309 0.194273,0.015 0.224068,0.537884 -0.224308,0.433309 m -0.568278,0.08957 c -0.224308,-0.015 -0.20929,0 -0.254104,0.14936 -0.04481,0.149596 0,0.478329 -0.239325,0.328732 -0.239086,-0.149359 0.01502,-0.403294 0.239325,-0.328732 m 1.04669,0.313963 c 0.20929,-0.04503 0.269121,-0.08981 0.403563,-0.0748 0.13468,0.015 0.299156,-0.149359 0.119662,-0.283949 -0.179494,-0.134352 -0.373766,0.04478 -0.239326,0.298957 m -4.88757,3.829504 c -0.113703,0.309676 -0.497004,0.237974 -0.434074,-0.05456 0.06269,-0.292524 0.31751,0.08505 0.434074,0.05456 0.116802,-0.03097 0.626918,0.334688 0.743481,0.07194 0.116802,-0.262748 0.411668,-0.323016 0.645749,-0.445933 0,0 0.292005,-0.107672 0.20643,-0.424256 m -0.367331,0.505009 c 0.15518,0.0567 0.225262,0.08433 0.225262,0.08433 0.161139,-0.08051 0.572806,-0.05837 0.438841,0.159603 -0.15947,0.258936 -0.471737,0.07933 -0.438841,-0.159603 m -0.856946,0.378757 c 0.02122,-0.195334 0.169482,-0.354937 -0.004,-0.401387 -0.173297,-0.04622 -0.425493,-0.144357 -0.360895,-0.328496 0.06483,-0.183661 0.578051,-0.07742 0.360895,0.328496 m -0.324901,0.301815 c -0.119663,0.01477 -0.102976,0.196287 -0.13468,0.20915 0,0 0.550162,0.121251 0.34397,0.313726 -0.206429,0.192238 -0.341348,-0.04383 -0.211197,-0.241071 m 0.919161,-0.656989 c 0.01073,-0.213677 -0.01693,-0.282997 0.03218,-0.409012 0.0491,-0.126252 -0.06721,-0.327304 -0.243614,-0.188903 -0.176158,0.138402 -0.05315,0.372326 0.227167,0.30801 m 3.598933,0.862805 c -0.101545,0.314202 0.244332,0.493815 0.375198,0.224873 0.131104,-0.268942 -0.302494,-0.129111 -0.375198,-0.224873 -0.07293,-0.096 -0.153511,-0.211533 -0.08342,-0.490241 0.07008,-0.278947 -0.124669,-0.507869 -0.233128,-0.74894 0,0 -0.118709,-0.612206 -0.218587,-0.671997 0,0 -0.179254,-0.298957 -0.338726,-0.298957 -0.159471,0 -0.259109,0.0598 -0.199517,0.219394 0.05983,0.159363 0.219541,0.278946 0.299157,0.238926 0.07985,-0.03978 0.239086,-0.159363 0.239086,-0.159363 m 0.295581,0.834696 c -0.157087,-0.05099 -0.284615,0.05741 -0.361371,-0.10529 -0.07698,-0.162937 -0.3249,-0.495958 -0.452191,-0.273944 -0.127051,0.221776 0.330859,0.481903 0.452191,0.273944 m 0.484371,0.807301 c -0.102261,-0.14102 -0.245762,-0.185805 -0.389022,-0.116961 -0.143024,0.06885 -0.553023,0.267751 -0.40261,-0.122917 0.150413,-0.390669 0.517981,-0.18533 0.40261,0.122917 m 0.422871,0.342311 c -0.07437,0.212009 -0.08224,0.192476 -0.23718,0.175087 -0.15518,-0.01715 -0.440271,-0.187474 -0.39665,0.09124 0.04386,0.27847 0.377342,0.144358 0.39665,-0.09124 m 0.121569,-1.085059 c 0.123477,-0.174847 0.188075,-0.212246 0.227168,-0.341834 0.03909,-0.129588 0.25482,-0.216059 0.308214,0.0015 0.05339,0.217727 -0.187836,0.325876 -0.368998,0.10267 M 13.30694,13.513397 c 0.07485,-0.194381 0.613092,-0.523113 0.523464,-0.821833 -0.08986,-0.298956 -0.538243,-0.792056 -0.194512,-0.836839 0.343971,-0.04479 0.28414,0.463323 0.05983,0.523114 m 0.13468,0.507869 c 0.149459,-0.0598 0.568038,-0.478092 0.717498,-0.134352 0.149697,0.343503 -0.373767,0.35851 -0.403564,0.224158 -0.03003,-0.134589 -0.03003,-0.268942 -0.03003,-0.268942 m -0.478413,0.418302 c -0.04481,-0.179375 -0.149459,-0.732266 -0.328952,-0.64246 -0.179494,0.08957 -0.08962,0.328495 0.07484,0.388287 0.164477,0.0598 0.164477,-0.02977 0.164477,-0.02977 m -2.481924,0.4183 c 0.209289,-0.209151 0.269121,-0.403294 0.239086,-0.642459 -0.0298,-0.238927 0.104644,-0.717258 0.34397,-0.941178 0.239087,-0.224157 0.508208,-0.358747 0.149459,-0.552891 -0.358749,-0.194381 -0.373767,0.104576 -0.284138,0.194144 0.08986,0.08957 0.149696,0.194381 0.299155,0.194381 m -0.418592,0.53788 c -0.04505,-0.104574 -0.04505,-0.0748 -0.07484,-0.224157 -0.03003,-0.14936 -0.03003,-0.254173 -0.179495,-0.224158 -0.167097,0.03335 -0.313934,0.164366 -0.01478,0.313726 0.13611,0.06813 0.194273,-0.08957 0.194273,-0.08957 m 0.01502,0.418301 c 0.164476,-0.0748 0.343731,-0.328733 0.523226,-0.20915 0.179492,0.119582 0.134441,0.253934 -0.04481,0.313726 -0.179493,0.0598 -0.269122,-0.134352 -0.224307,-0.28395 m -0.986858,-0.582667 c -0.08962,0.0598 -0.149459,0.015 -0.284139,-0.08957 -0.134442,-0.104575 0.03003,-0.328733 0.254342,-0.283949 0.224308,0.04479 0.104645,0.403532 -0.164477,0.672474 -0.269121,0.268941 0.0298,0.627452 0.0298,0.821595 0,0 -0.08962,0.388525 -0.373766,0.13459 -0.2841392,-0.253935 0.04481,-0.328733 0.149458,-0.268941 0.104646,0.0598 0.224308,0.134351 0.224308,0.134351 M 10.28672,12.10858 C 10.077429,12.09381 9.9727842,12.13859 9.9129536,12.004005 9.8531216,11.869653 10.2605,11.357972 9.8681396,11.331769 c -0.224308,-0.015 -0.089867,0.448315 0.089628,0.463085 m 1.2409624,1.240134 c -0.0298,-0.224158 -0.07986,-0.21725 -0.119663,-0.403293 -0.04481,-0.209152 -0.179256,-0.343741 -0.2839,-0.253935 -0.207384,0.177231 0.04481,0.597675 0.2839,0.253935 M 8.3430252,11.585702 c 0.4335979,0.08981 0.4486153,0.463322 0.4633942,0.747034 0.015018,0.283949 0.015018,0.34374 -0.044814,0.478092 -0.059832,0.13459 0.015018,0.164605 0.1945112,0.239165 0.1792554,0.0748 0.2839005,0.0598 0.2989179,0.179375 0.015018,0.119582 0.3439701,0.313725 0.4185805,0.194142 0.074849,-0.119582 -0.07461,-0.537883 -0.4185805,-0.194142 M 8.8214369,12.392527 c 0.1644763,0.0748 0.2393251,0.0748 0.2991563,0.179374 0.059832,0.104575 0.298918,0.0748 0.298918,-0.119583 0,-0.194143 -0.388784,-0.253934 -0.298918,0.119583 M 8.7766231,12.093809 c -0.1196625,-0.015 -0.2691214,-0.0598 -0.3139354,0.08957 -0.044814,0.14936 0.1194242,0.313727 -0.044814,0.403532 -0.1644763,0.08957 -0.4038014,-0.20915 0.044814,-0.403532 m 0.2691215,0.732265 c -0.059832,0.07456 -0.4486153,0.194144 -0.2841389,0.358511 0.1644765,0.164366 0.388784,0.104575 0.3439702,-0.0598 C 8.7465882,13.049993 8.6869954,13.00521 8.6419431,12.975433 m 6.7282759,0.223919 c -0.04481,-0.164366 -0.269121,-0.567659 -0.403563,-0.373517 -0.13468,0.194381 0.04481,0.478093 0.298918,0.179375 m -3.889986,2.347583 c 0.182116,-0.03168 0.241709,-0.04669 0.376389,0.147692 0.134442,0.194144 -0.07485,0.194144 -0.03003,0.298719 0.04505,0.104575 0.358987,0.224158 0.388784,0.104575 0.03003,-0.119344 -0.149459,-0.433309 -0.328953,-0.313726"
+         style="fill:none;stroke:#231f20;stroke-width:0.07887466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path53000" />
+      <g
+         transform="matrix(0.23837155,0,0,-0.23821246,1.4938953,1.6184157)"
+         id="g53022">
+        <path
+           id="path53024"
+           style="fill:none;stroke:#231f20;stroke-width:0.331;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 C -0.627,1.066 0.69,2.07 1.317,1.38 1.944,0.69 0.941,0.188 0,0 c -0.941,-0.188 -1.568,-2.446 -1.694,-4.077 -0.125,-1.631 0.377,-1.756 1.004,-3.387 0,0 0.669,-0.878 0.083,-1.129 -0.585,-0.251 -1.17,0 -1.17,0.669 0,0.669 0.418,0.753 1.087,0.46 m -0.753,4.955 c -0.188,0.502 -0.125,1.945 -0.941,1.945 -0.815,0 -2.007,1.442 -0.878,1.819 1.129,0.376 1.443,-1.192 0.878,-1.819 m 0.69,-3.513 c 0.377,0.251 0.565,0.753 1.192,0.627 C 0.125,-3.575 2.07,-3.826 1.505,-2.76 0.941,-1.693 0,-1.882 -0.502,-3.45 m -1.254,-1.129 c -0.879,0.941 -0.508,1.92 -1.318,1.38 -0.564,-0.376 -1.215,-1.254 -1.591,-0.125 -0.377,1.129 1.693,1.442 1.881,0.313 m 1.655,-3.324 c 0.376,0.878 0.69,1.38 1.505,0.753 0.816,-0.628 1.443,-0.126 1.192,0.501 -0.251,0.628 -1.317,1.004 -1.192,-0.501 m -1.944,0.062 c -0.69,0.502 -0.878,0.628 -1.255,0 -0.376,-0.627 -2.007,-2.069 -2.258,-0.878 -0.251,1.192 0.502,1.38 1.756,0.251 M -2.707,-24.9 c 0.821,-0.925 -0.277,-2.164 -1.026,-1.609 -0.748,0.556 0.139,1.242 1.026,1.609 0.887,0.365 1.372,1.803 1.18,3.428 -0.191,1.624 -0.708,1.65 -1.637,3.129 0,0 -0.826,0.733 -0.3,1.092 0.526,0.36 1.148,0.225 1.278,-0.43 0.129,-0.657 -0.265,-0.819 -0.978,-0.662 m 1.658,-4.532 c 0.281,-0.456 1.187,-2.073 1.987,-1.917 0.8,0.158 2.247,-1.028 1.213,-1.615 -1.036,-0.587 -1.646,0.891 -1.213,1.615 m -2.008,3.32 c -0.321,-0.32 -0.408,-0.848 -1.048,-0.846 -0.64,0.002 -2.596,-0.126 -1.836,-1.064 0.759,-0.937 1.646,-0.572 1.836,1.064 m 1.013,1.35 c 1.043,-0.754 1.6,-2.079 2.291,-1.393 0.482,0.478 0.951,1.465 1.538,0.43 0.586,-1.036 -1.384,-1.742 -1.786,-0.67 m -2.997,3.235 c -0.2,-0.934 -0.411,-1.487 -1.332,-1.029 -0.921,0.459 -1.44,-0.155 -1.073,-0.721 0.367,-0.568 1.487,-0.731 1.073,0.721 m 1.92,0.314 c 0.774,-0.359 0.983,-0.446 1.231,0.242 0.248,0.688 1.571,2.417 2.046,1.297 0.477,-1.121 -0.226,-1.451 -1.675,-0.585 M 9.22,4.642 C 8.217,5.771 9.597,6.649 10.287,6.147 10.976,5.645 10.663,5.018 9.22,4.642 7.778,4.265 8.091,2.258 9.158,1.505 c 1.066,-0.752 1.191,-2.258 1.254,-4.014 0,0 0.104,-0.648 0.271,-1.234 0.168,-0.585 -0.417,-1.003 -1.254,-0.836 -0.836,0.168 -0.836,1.338 -0.334,1.673 0.502,0.334 1.045,0.46 1.317,0.397 m -0.251,2.07 C 9.22,-0.251 8.53,-0.063 8.091,-0.564 7.652,-1.066 6.147,-1.631 7.527,-2.132 c 1.38,-0.502 1.38,1.254 0.564,1.568 m 1.757,1.317 c 0.25,1.129 -0.251,1.317 0.439,1.505 0.689,0.188 1.191,1.004 1.442,0 0.251,-1.003 -0.502,-1.819 -1.066,0 M 8.593,1.945 C 7.778,1.945 6.233,2.203 5.896,1.192 5.77,0.816 5.331,0.502 5.959,0.063 6.586,-0.376 7.84,0.565 6.649,1.756 m 1.63,1.443 C 7.276,3.324 6.418,3.45 6.251,3.701 5.831,4.331 4.223,5.101 5.415,5.791 6.606,6.481 7.004,4.788 5.582,4.37 M 4.94,-3.632 c 0.932,0.896 2.842,-0.922 1.365,-1.626 -1.476,-0.703 -0.522,1.01 -1.365,1.626 -0.842,0.616 -1.62,1.695 -1.539,2.533 0,0 -1.118,1.856 0.116,1.793 1.234,-0.063 1.145,-1.576 -0.116,-1.793 m 17.298,4.11 c -0.753,-1.129 0.376,-2.133 0.941,-1.694 0.742,0.578 -0.251,1.443 -0.941,1.694 -1.27,0.462 -0.565,1.819 -0.69,2.76 0,0 -0.126,0.501 -0.753,0.439 C 18.629,6.147 18.127,5.394 18.754,4.767 19.381,4.14 19.883,4.014 19.946,4.579 M -4.14,5.959 C -3.136,5.771 -2.363,5.603 -1.61,4.474 -0.858,3.345 0.522,2.216 1.651,2.781 2.78,3.345 4.097,3.91 3.094,4.913 2.09,5.917 1.777,4.349 2.153,3.22 m -3.638,1.003 c 0.063,-0.69 -1.54,-0.66 -2.153,-1.212 -0.627,-0.565 -1.129,-0.753 -1.485,0.02 -0.534,1.163 0.92,1.611 1.485,-0.02 m 2.655,0.71 c 0.753,0 0.69,0.189 1.129,0.941 C 0.585,5.415 1.589,5.854 0.397,6.356 -0.795,6.858 -1.171,5.603 -0.042,4.788 M 13.548,3.199 C 13.485,2.885 12.921,2.133 12.294,3.074 c -0.628,0.94 -0.251,1.819 0.376,1.819 0.627,0 0.815,-1.318 0.878,-1.694 0.063,-0.376 0.69,-0.627 1.443,-0.815 0.753,-0.189 1.317,-0.126 1.442,-1.004 0.126,-0.878 0.565,-1.443 1.38,-1.568 0.816,-0.125 0.941,-1.129 1.318,-1.882 0,0 0.062,0.063 0.439,0.565 0.376,0.502 0.69,0.125 1.191,0.062 0.502,-0.062 0.502,1.13 0.502,1.13 0,0 -1.693,1.693 -1.192,-0.941 m -1.819,0.815 c -0.062,0.815 -0.188,0.941 0.126,1.255 0.314,0.313 1.129,1.379 0.376,1.756 -0.752,0.376 -1.38,-1.067 -0.376,-1.756 m -2.195,1.191 c 0,0.816 -1.192,2.133 -0.753,2.321 0.439,0.188 0.376,1.631 -0.439,1.756 C 14.175,6.21 14.301,4.516 15.242,4.14 M 17.123,0 c -0.878,0.126 -1.066,0.376 -1.442,-0.125 -0.377,-0.502 -1.066,-0.816 -1.255,-0.126 -0.188,0.69 0.628,1.694 1.443,0.377 m 3.074,-1.819 c -0.628,0.062 -0.816,0.188 -1.13,-0.439 -0.313,-0.628 -0.69,-1.506 -1.254,-0.628 -0.564,0.878 0,1.882 1.38,0.816 m -0.147,-16.401 c 0.203,-0.247 1.054,-0.646 1.167,0.479 0.112,1.125 -0.633,1.724 -1.187,1.43 -0.553,-0.296 -0.101,-1.547 0.02,-1.909 0.121,-0.361 0.188,-1.567 -0.389,-2.087 -0.576,-0.52 -1.104,-0.729 -0.802,-1.563 0.301,-0.834 0.178,-1.539 -0.482,-2.033 -0.661,-0.493 -0.301,-1.438 -0.28,-2.28 0,0 -0.085,0.027 -0.653,0.292 -0.568,0.267 -0.668,-0.212 -1.081,-0.503 -0.414,-0.291 -0.973,0.761 -0.973,0.761 0,0 0.7,2.291 1.494,-0.271 m 1.223,1.574 c -0.327,0.749 -0.276,0.919 -0.7,1.048 -0.424,0.13 -1.645,0.688 -1.157,1.374 0.488,0.686 1.719,-0.294 1.157,-1.374 m 1.379,2.083 c -0.383,0.72 -0.497,1.857 -0.973,1.817 -0.476,-0.04 -1.098,1.263 -0.437,1.756 0.661,0.494 1.346,-1.06 0.692,-1.834 m 0.829,-3.952 c 0.717,0.522 0.765,0.832 1.333,0.566 0.568,-0.266 1.324,-0.219 1.166,0.479 -0.157,0.696 -1.349,1.2 -1.45,-0.345 m -1.859,-3.05 c 0.524,0.35 0.632,0.55 1.203,0.143 0.571,-0.407 1.316,-1.006 1.402,0.035 0.086,1.04 -0.884,1.661 -1.602,0.072 m 6.94,31.784 c -0.753,-0.502 0.063,-1.882 1.38,-2.07 1.317,-0.188 1.443,-0.313 1.568,-1.066 0.126,-0.753 -1.066,-2.76 -0.313,-3.387 0.752,-0.627 1.568,0.125 1.317,0.941 -0.251,0.815 -1.129,0.878 -1.506,0.878 m -2.32,3.199 C 23.521,3.638 22.894,2.446 22.079,3.262 21.263,4.077 22.455,4.893 22.831,4.516 23.208,4.14 23.27,3.513 23.27,3.513 m 1.882,0.564 c 0.502,0.251 0.627,0.627 0.816,1.38 0.188,0.753 0.627,1.255 1.254,0.627 C 27.849,5.457 27.347,4.83 26.783,4.767 26.218,4.704 25.905,5.081 25.905,5.081 M 24.713,4.14 c 0.126,-0.439 0.314,-0.941 0.314,-1.38 0,-0.439 -0.188,-1.255 -0.878,-1.129 -0.69,0.125 -0.44,2.07 0.815,1.631 M 11.432,-12.452 c -0.119,-1.146 -0.417,-1.699 0.654,-2.489 1.07,-0.79 1.122,-0.96 0.875,-1.682 -0.246,-0.722 -1.725,-1.528 -1.359,-2.436 0.365,-0.91 1.44,-0.633 1.606,0.204 0.165,0.837 -0.663,1.23 -1.04,1.167 m -0.919,3.839 c -0.807,-0.705 -1.924,-1.458 -2.256,-0.353 -0.331,1.105 1.105,1.258 1.258,0.748 0.153,-0.51 -0.089,-1.092 -0.089,-1.092 m 1.924,-0.395 c 0.561,-0.017 0.85,0.255 1.372,0.828 0.522,0.574 1.147,0.808 1.402,-0.042 0.255,-0.85 -0.484,-1.164 -1.011,-0.952 -0.527,0.213 -0.625,0.693 -0.625,0.693 m -1.495,-0.263 c -0.098,-0.446 -0.316,-1.521 -0.524,-1.907 -0.208,-0.388 -0.761,-1.016 -1.309,-0.579 -0.548,0.438 0.595,2.031 1.491,1.05 m -6.385,1.803 c -0.286,-1.117 -0.661,-1.62 0.282,-2.559 0.943,-0.939 0.969,-1.114 0.619,-1.792 -0.35,-0.678 -2.484,-0.674 -2.256,-1.628 0.228,-0.953 1.025,-0.647 1.618,-0.033 0.186,0.192 0.154,0.803 -0.148,1.029 m -0.501,3.627 c -0.901,-0.578 -2.117,-1.159 -2.283,-0.018 -0.165,1.142 1.277,1.082 1.354,0.556 0.076,-0.527 -0.249,-1.067 -0.249,-1.067 m 1.846,-0.674 c 0.553,-0.099 1.265,-0.62 1.866,-0.129 0.601,0.49 1.253,0.63 1.381,-0.248 0.127,-0.877 -0.65,-1.08 -1.14,-0.793 -0.49,0.287 -0.516,0.776 -0.516,0.776 m -1.905,0.708 c -0.162,-0.427 -0.311,-0.942 -0.574,-1.294 -0.263,-0.352 -0.901,-0.893 -1.379,-0.38 -0.478,0.514 0.886,1.922 1.629,0.819 m 9.09,14.023 c -0.627,0.126 -1.191,0.314 -0.878,1.255 0.314,0.94 0.502,0.689 0.941,-0.251 0.439,-0.941 -0.125,-0.816 0.126,-1.569 0.25,-0.752 0.501,-1.63 0.376,-2.258 -0.126,-0.627 -0.188,-1.693 0.125,-2.634 0.314,-0.941 0.377,-0.439 0.251,-1.129 -0.125,-0.69 1.192,-1.694 -0.188,-1.882 -1.38,-0.188 -0.878,1.757 0.188,1.882 m -0.502,2.509 c 0.628,0 1.129,0.314 1.569,0.125 0.439,-0.188 2.258,0.565 1.568,1.38 -0.69,0.816 -2.07,-0.501 -1.568,-1.38 m -1.506,0.69 c -0.313,0.314 -0.564,0.69 -1.003,0.565 -0.439,-0.126 -1.38,0.125 -1.255,1.003 0.126,0.879 0.941,0.628 1.38,0.126 0.439,-0.502 0.188,-0.816 -0.125,-1.129 m 1.066,-2.133 c -0.753,0 -1.317,0.063 -1.443,-0.251 -0.125,-0.313 0.314,-1.819 -0.752,-1.568 -1.067,0.251 -0.189,1.882 0.752,1.568 m 12.984,5.207 c -0.188,-0.502 0.941,-1.318 1.192,-1.255 0.672,0.168 0.627,0.815 0.502,1.192 -0.259,0.773 -0.879,0.251 -1.694,0.063 -0.815,-0.189 -1.192,2.195 -1.443,2.822 0,0 -1.38,1.192 -1.63,0.126 -0.251,-1.067 0.125,-1.694 0.815,-1.506 0.69,0.188 0.815,1.066 0.815,1.38 M 20.385,-5.52 c -1.38,0.126 -1.505,1.757 -0.251,1.819 1.255,0.063 0,-1.38 0.251,-1.819 0.251,-0.439 0.565,-0.94 1.756,-1.129 1.192,-0.188 1.757,-1.317 2.509,-2.132 0,0 0.753,-1.067 1.945,-0.377 m -2.446,0.941 c -0.063,-0.69 -0.69,-1.003 -0.189,-1.568 0.502,-0.564 1.38,-2.07 0.314,-2.195 -1.066,-0.126 -1.317,2.07 -0.314,2.195 m -2.32,3.199 c 0.376,-0.627 0.313,-1.254 -0.189,-1.693 -0.501,-0.44 -1.944,-1.694 -0.188,-1.757 1.756,-0.062 1.568,1.694 0.188,1.757 m -0.25,1.944 c 0.815,0.125 2.007,-0.125 2.007,0.627 0,0.753 0.125,1.882 0.941,1.819 0.815,-0.063 0.94,-2.258 -0.941,-1.819 m -2.384,-0.376 c -0.941,0.063 -0.878,0 -1.066,-0.627 -0.188,-0.628 0,-2.008 -1.004,-1.38 -1.003,0.627 0.063,1.693 1.004,1.38 m 4.391,-1.318 c 0.878,0.189 1.129,0.377 1.693,0.314 0.565,-0.063 1.255,0.627 0.502,1.192 -0.753,0.564 -1.568,-0.188 -1.004,-1.255 M 4.836,-23.854 c -0.477,-1.3 -2.085,-0.999 -1.821,0.229 0.263,1.228 1.332,-0.357 1.821,-0.229 0.489,0.13 2.63,-1.405 3.119,-0.302 0.49,1.103 1.727,1.356 2.709,1.872 0,0 1.225,0.452 0.866,1.781 m -1.541,-2.12 c 0.65,-0.238 0.945,-0.354 0.945,-0.354 0.676,0.338 2.403,0.245 1.84,-0.67 -0.668,-1.087 -1.978,-0.333 -1.84,0.67 m -3.595,-1.59 c 0.089,0.82 0.711,1.49 -0.017,1.685 -0.727,0.194 -1.785,0.606 -1.514,1.379 0.272,0.771 2.425,0.325 1.514,-1.379 m -1.363,-1.267 c -0.502,-0.062 -0.432,-0.824 -0.565,-0.878 0,0 2.308,-0.509 1.443,-1.317 -0.866,-0.807 -1.432,0.184 -0.886,1.012 m 3.856,2.758 c 0.045,0.897 -0.071,1.188 0.135,1.717 0.206,0.53 -0.282,1.374 -1.022,0.793 -0.74,-0.581 -0.223,-1.563 0.953,-1.293 m 15.098,-3.622 c -0.426,-1.319 1.025,-2.073 1.574,-0.944 0.55,1.129 -1.269,0.542 -1.574,0.944 -0.306,0.403 -0.644,0.888 -0.35,2.058 0.294,1.171 -0.523,2.132 -0.978,3.144 0,0 -0.498,2.57 -0.917,2.821 0,0 -0.752,1.255 -1.421,1.255 -0.669,0 -1.087,-0.251 -0.837,-0.921 0.251,-0.669 0.921,-1.171 1.255,-1.003 0.335,0.167 1.003,0.669 1.003,0.669 m 1.24,-3.504 c -0.659,0.214 -1.194,-0.241 -1.516,0.442 -0.323,0.684 -1.363,2.082 -1.897,1.15 -0.534,-0.931 1.388,-2.023 1.897,-1.15 m 2.032,-3.389 c -0.429,0.592 -1.031,0.78 -1.632,0.491 -0.6,-0.289 -2.32,-1.124 -1.689,0.516 0.631,1.64 2.173,0.778 1.689,-0.516 m 1.691,-0.993 c 0.435,0.7 0.671,1.895 1.364,1.6 0.692,-0.295 1.779,-0.622 2.042,0.152 0.262,0.775 -1.708,1.751 -2.042,-0.152 m -1.281,-2.044 c -0.312,-0.89 -0.345,-0.808 -0.995,-0.735 -0.651,0.072 -1.847,0.787 -1.664,-0.383 0.184,-1.169 1.583,-0.606 1.664,0.383 m 0.51,4.555 c 0.518,0.734 0.789,0.891 0.953,1.435 0.164,0.544 1.069,0.907 1.293,-0.006 0.224,-0.914 -0.788,-1.368 -1.548,-0.431 m -8.78,3.101 c 0.314,0.816 2.572,2.196 2.195,3.45 -0.376,1.255 -2.257,3.325 -0.815,3.513 1.443,0.188 1.192,-1.945 0.251,-2.196 m 0.564,-2.132 c 0.628,0.251 2.384,2.007 3.011,0.564 0.628,-1.442 -1.568,-1.505 -1.693,-0.941 -0.126,0.565 -0.126,1.129 -0.126,1.129 m -2.007,-1.756 c -0.188,0.753 -0.627,3.074 -1.38,2.697 -0.753,-0.376 -0.376,-1.379 0.314,-1.63 0.69,-0.251 0.69,0.125 0.69,0.125 M 6.649,-15.367 c 0.878,0.878 1.129,1.693 1.003,2.697 -0.125,1.003 0.439,3.011 1.443,3.951 1.003,0.941 2.132,1.506 0.627,2.321 C 8.217,-5.582 8.154,-6.837 8.53,-7.213 8.907,-7.589 9.158,-8.029 9.785,-8.029 M 8.028,-10.287 C 7.84,-9.848 7.84,-9.973 7.715,-9.346 7.589,-8.719 7.589,-8.279 6.962,-8.405 6.261,-8.545 5.645,-9.095 6.9,-9.722 c 0.571,-0.286 0.815,0.376 0.815,0.376 m 0.063,-1.756 c 0.69,0.314 1.442,1.38 2.195,0.878 0.753,-0.502 0.564,-1.066 -0.188,-1.317 -0.753,-0.251 -1.129,0.564 -0.941,1.192 m -4.14,2.446 c -0.376,-0.251 -0.627,-0.063 -1.192,0.376 -0.564,0.439 0.126,1.38 1.067,1.192 0.941,-0.188 0.439,-1.694 -0.69,-2.823 -1.129,-1.129 0.125,-2.634 0.125,-3.449 0,0 -0.376,-1.631 -1.568,-0.565 -1.192,1.066 0.188,1.38 0.627,1.129 0.439,-0.251 0.941,-0.564 0.941,-0.564 m -0.627,2.07 C 2.509,-10.475 2.07,-10.663 1.819,-10.098 1.568,-9.534 3.277,-7.386 1.631,-7.276 0.69,-7.213 1.254,-9.158 2.007,-9.22 m 5.206,-5.206 c -0.125,0.941 -0.335,0.912 -0.502,1.693 -0.188,0.878 -0.752,1.443 -1.191,1.066 -0.87,-0.744 0.188,-2.509 1.191,-1.066 m -11.478,4.391 c 1.819,-0.377 1.882,-1.945 1.944,-3.136 0.063,-1.192 0.063,-1.443 -0.188,-2.007 -0.251,-0.565 0.063,-0.691 0.815,-1.004 0.753,-0.314 1.192,-0.251 1.255,-0.753 0.063,-0.502 1.443,-1.317 1.756,-0.815 0.314,0.502 -0.313,2.258 -1.756,0.815 m -1.819,3.513 c 0.69,-0.314 1.004,-0.314 1.255,-0.753 0.25,-0.439 1.254,-0.314 1.254,0.502 0,0.815 -1.631,1.066 -1.254,-0.502 m -1.443,2.007 c -0.502,0.063 -1.129,0.251 -1.317,-0.376 -0.188,-0.627 0.501,-1.317 -0.188,-1.694 -0.691,-0.376 -1.694,0.878 0.188,1.694 m 1.129,-3.074 c -0.251,-0.313 -1.882,-0.815 -1.192,-1.505 0.69,-0.69 1.631,-0.439 1.443,0.251 -0.189,0.69 -0.44,0.878 -0.628,1.003 m 28.101,-3.637 c 0,1.003 -0.251,2.822 0.627,3.449 0.878,0.628 1.317,1.067 1.631,1.568 0.313,0.502 1.003,1.882 0.501,2.447 -0.501,0.564 -1.568,-1.255 -0.501,-2.447 m -2.133,-2.32 c -0.188,0.69 -1.129,2.383 -1.694,1.568 -0.564,-0.816 0.189,-2.007 1.255,-0.753 m 0.251,-2.007 c 0.439,0.188 0.753,1.129 1.756,0.941 1.004,-0.188 1.631,0.062 1.694,-0.628 0.062,-0.689 -0.251,-0.815 -0.941,-0.752 -0.69,0.063 -1.192,0.815 -0.753,1.38 M 7.955,-24.156 c 0.763,0.133 1.014,0.196 1.579,-0.62 0.564,-0.815 -0.314,-0.815 -0.126,-1.254 0.189,-0.439 1.506,-0.941 1.631,-0.439 0.126,0.501 -0.627,1.819 -1.38,1.317"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.23837155,0,0,-0.23821246,9.4793424,1.6184157)"
+         id="g53034">
+        <path
+           id="path53036"
+           style="fill:none;stroke:#231f20;stroke-width:0.331;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 C -0.627,1.066 0.69,2.07 1.317,1.38 1.944,0.69 0.941,0.188 0,0 c -0.941,-0.188 -1.568,-2.446 -1.694,-4.077 -0.125,-1.631 0.377,-1.756 1.004,-3.387 0,0 0.669,-0.878 0.083,-1.129 -0.585,-0.251 -1.17,0 -1.17,0.669 0,0.669 0.418,0.753 1.087,0.46 m -0.753,4.955 c -0.188,0.502 -0.125,1.945 -0.941,1.945 -0.815,0 -2.007,1.442 -0.878,1.819 1.129,0.376 1.443,-1.192 0.878,-1.819 m 0.69,-3.513 c 0.377,0.251 0.565,0.753 1.192,0.627 C 0.125,-3.575 2.07,-3.826 1.505,-2.76 0.941,-1.693 0,-1.882 -0.502,-3.45 m -1.254,-1.129 c -0.879,0.941 -0.508,1.92 -1.318,1.38 -0.564,-0.376 -1.215,-1.254 -1.591,-0.125 -0.376,1.129 1.693,1.442 1.882,0.313 m 1.654,-3.324 c 0.376,0.878 0.69,1.38 1.505,0.753 0.816,-0.628 1.443,-0.126 1.192,0.501 -0.251,0.628 -1.317,1.004 -1.192,-0.501 m -1.944,0.062 c -0.69,0.502 -0.878,0.628 -1.255,0 -0.376,-0.627 -2.007,-2.069 -2.258,-0.878 -0.251,1.192 0.502,1.38 1.757,0.251 M -2.707,-24.9 c 0.821,-0.925 -0.277,-2.164 -1.026,-1.609 -0.748,0.556 0.14,1.242 1.026,1.609 0.887,0.365 1.372,1.803 1.18,3.428 -0.191,1.624 -0.708,1.65 -1.637,3.129 0,0 -0.826,0.733 -0.3,1.092 0.526,0.36 1.148,0.225 1.278,-0.43 0.129,-0.657 -0.265,-0.819 -0.978,-0.662 m 1.658,-4.532 c 0.281,-0.456 1.187,-2.073 1.987,-1.917 0.8,0.158 2.247,-1.028 1.213,-1.615 -1.036,-0.587 -1.646,0.891 -1.213,1.615 m -2.008,3.32 c -0.321,-0.32 -0.408,-0.848 -1.048,-0.846 -0.64,0.002 -2.596,-0.126 -1.836,-1.064 0.759,-0.937 1.646,-0.572 1.836,1.064 m 1.013,1.35 c 1.043,-0.754 1.6,-2.079 2.291,-1.393 0.482,0.478 0.951,1.465 1.538,0.43 0.586,-1.036 -1.384,-1.742 -1.786,-0.67 m -2.997,3.235 c -0.2,-0.934 -0.411,-1.487 -1.332,-1.029 -0.921,0.459 -1.44,-0.155 -1.073,-0.721 0.368,-0.568 1.487,-0.731 1.073,0.721 m 1.92,0.314 c 0.774,-0.359 0.983,-0.446 1.231,0.242 0.249,0.688 1.571,2.417 2.046,1.297 0.477,-1.121 -0.226,-1.451 -1.674,-0.585 M 9.22,4.642 C 8.217,5.771 9.597,6.649 10.287,6.147 10.977,5.645 10.663,5.018 9.22,4.642 7.778,4.265 8.091,2.258 9.158,1.505 c 1.066,-0.752 1.191,-2.258 1.254,-4.014 0,0 0.105,-0.648 0.271,-1.234 0.168,-0.585 -0.417,-1.003 -1.254,-0.836 -0.836,0.168 -0.836,1.338 -0.334,1.673 0.502,0.334 1.045,0.46 1.317,0.397 m -0.251,2.07 C 9.22,-0.251 8.53,-0.063 8.091,-0.564 7.652,-1.066 6.147,-1.631 7.527,-2.132 c 1.38,-0.502 1.38,1.254 0.564,1.568 m 1.757,1.317 c 0.25,1.129 -0.251,1.317 0.439,1.505 0.69,0.188 1.191,1.004 1.442,0 0.251,-1.003 -0.502,-1.819 -1.066,0 M 8.593,1.945 C 7.778,1.945 6.233,2.203 5.896,1.192 5.77,0.816 5.331,0.502 5.959,0.063 6.586,-0.376 7.84,0.565 6.649,1.756 m 1.63,1.443 C 7.276,3.324 6.418,3.45 6.251,3.701 5.831,4.331 4.223,5.101 5.415,5.791 6.606,6.481 7.004,4.788 5.582,4.37 M 4.94,-3.632 c 0.932,0.896 2.842,-0.922 1.365,-1.626 -1.476,-0.703 -0.522,1.01 -1.365,1.626 -0.842,0.616 -1.62,1.695 -1.539,2.533 0,0 -1.118,1.856 0.116,1.793 1.234,-0.063 1.145,-1.576 -0.116,-1.793 m 17.298,4.11 c -0.753,-1.129 0.376,-2.133 0.941,-1.694 0.742,0.578 -0.251,1.443 -0.941,1.694 -1.27,0.462 -0.565,1.819 -0.69,2.76 0,0 -0.126,0.501 -0.753,0.439 C 18.629,6.147 18.127,5.394 18.754,4.767 19.381,4.14 19.883,4.014 19.946,4.579 M -4.14,5.959 C -3.136,5.771 -2.363,5.603 -1.61,4.474 -0.858,3.345 0.522,2.216 1.651,2.781 2.78,3.345 4.098,3.91 3.094,4.913 2.09,5.917 1.777,4.349 2.153,3.22 m -3.638,1.003 c 0.063,-0.69 -1.54,-0.66 -2.153,-1.212 -0.627,-0.565 -1.129,-0.753 -1.485,0.02 -0.534,1.163 0.92,1.611 1.485,-0.02 m 2.655,0.71 c 0.753,0 0.69,0.189 1.129,0.941 C 0.585,5.415 1.589,5.854 0.397,6.356 -0.795,6.858 -1.171,5.603 -0.042,4.788 M 13.548,3.199 C 13.485,2.885 12.921,2.133 12.294,3.074 c -0.627,0.94 -0.251,1.819 0.376,1.819 0.627,0 0.815,-1.318 0.878,-1.694 0.063,-0.376 0.69,-0.627 1.443,-0.815 0.753,-0.189 1.317,-0.126 1.442,-1.004 0.126,-0.878 0.565,-1.443 1.38,-1.568 0.816,-0.125 0.941,-1.129 1.318,-1.882 0,0 0.063,0.063 0.439,0.565 0.376,0.502 0.69,0.125 1.191,0.062 0.502,-0.062 0.502,1.13 0.502,1.13 0,0 -1.693,1.693 -1.192,-0.941 m -1.818,0.815 c -0.063,0.815 -0.189,0.941 0.125,1.255 0.314,0.313 1.129,1.379 0.376,1.756 -0.752,0.376 -1.38,-1.067 -0.376,-1.756 m -2.195,1.191 c 0,0.816 -1.192,2.133 -0.753,2.321 0.439,0.188 0.376,1.631 -0.439,1.756 C 14.175,6.21 14.301,4.516 15.242,4.14 M 17.124,0 c -0.879,0.126 -1.067,0.376 -1.443,-0.125 -0.377,-0.502 -1.066,-0.816 -1.255,-0.126 -0.188,0.69 0.628,1.694 1.443,0.377 m 3.074,-1.819 c -0.628,0.062 -0.816,0.188 -1.13,-0.439 -0.313,-0.628 -0.689,-1.506 -1.254,-0.628 -0.564,0.878 0,1.882 1.38,0.816 m -0.147,-16.401 c 0.203,-0.247 1.054,-0.646 1.167,0.479 0.112,1.125 -0.633,1.724 -1.187,1.43 -0.553,-0.296 -0.101,-1.547 0.02,-1.909 0.121,-0.361 0.188,-1.567 -0.389,-2.087 -0.576,-0.52 -1.104,-0.729 -0.802,-1.563 0.301,-0.834 0.178,-1.539 -0.482,-2.033 -0.661,-0.493 -0.301,-1.438 -0.28,-2.28 0,0 -0.085,0.027 -0.653,0.292 -0.567,0.267 -0.668,-0.212 -1.081,-0.503 -0.414,-0.291 -0.973,0.761 -0.973,0.761 0,0 0.7,2.291 1.494,-0.271 m 1.223,1.574 c -0.327,0.749 -0.276,0.919 -0.7,1.048 -0.424,0.13 -1.645,0.688 -1.157,1.374 0.488,0.686 1.719,-0.294 1.157,-1.374 m 1.379,2.083 c -0.383,0.72 -0.497,1.857 -0.973,1.817 -0.476,-0.04 -1.098,1.263 -0.437,1.756 0.661,0.494 1.346,-1.06 0.692,-1.834 m 0.829,-3.952 c 0.717,0.522 0.765,0.832 1.333,0.566 0.568,-0.266 1.324,-0.219 1.167,0.479 -0.158,0.696 -1.35,1.2 -1.451,-0.345 m -1.859,-3.05 c 0.524,0.35 0.632,0.55 1.203,0.143 0.571,-0.407 1.316,-1.006 1.402,0.035 0.086,1.04 -0.884,1.661 -1.602,0.072 m 6.94,31.784 c -0.752,-0.502 0.063,-1.882 1.38,-2.07 1.317,-0.188 1.443,-0.313 1.568,-1.066 0.126,-0.753 -1.066,-2.76 -0.313,-3.387 0.752,-0.627 1.568,0.125 1.317,0.941 -0.251,0.815 -1.129,0.878 -1.506,0.878 m -2.32,3.199 C 23.521,3.638 22.894,2.446 22.079,3.262 21.263,4.077 22.455,4.893 22.831,4.516 23.208,4.14 23.27,3.513 23.27,3.513 m 1.443,0.627 c 0.126,-0.439 0.314,-0.941 0.314,-1.38 0,-0.439 -0.188,-1.255 -0.878,-1.129 -0.69,0.125 -0.439,2.07 0.815,1.631 M 11.432,-12.452 c -0.119,-1.146 -0.417,-1.699 0.654,-2.489 1.07,-0.79 1.122,-0.96 0.875,-1.682 -0.246,-0.722 -1.725,-1.528 -1.359,-2.436 0.365,-0.91 1.44,-0.633 1.606,0.204 0.165,0.837 -0.663,1.23 -1.04,1.167 m -0.919,3.839 c -0.807,-0.705 -1.924,-1.458 -2.256,-0.353 -0.331,1.105 1.105,1.258 1.258,0.748 0.153,-0.51 -0.089,-1.092 -0.089,-1.092 m 1.924,-0.395 c 0.561,-0.017 0.85,0.255 1.372,0.828 0.522,0.574 1.147,0.808 1.402,-0.042 0.255,-0.85 -0.484,-1.164 -1.011,-0.952 -0.527,0.213 -0.625,0.693 -0.625,0.693 m -1.495,-0.263 c -0.098,-0.446 -0.316,-1.521 -0.524,-1.907 -0.208,-0.388 -0.761,-1.016 -1.309,-0.579 -0.548,0.438 0.595,2.031 1.491,1.05 m -6.385,1.803 c -0.286,-1.117 -0.661,-1.62 0.282,-2.559 0.943,-0.939 0.969,-1.114 0.619,-1.792 -0.35,-0.678 -2.484,-0.674 -2.256,-1.628 0.228,-0.953 1.025,-0.647 1.618,-0.033 0.186,0.192 0.154,0.803 -0.148,1.029 m -0.501,3.627 c -0.901,-0.578 -2.116,-1.159 -2.283,-0.018 -0.165,1.142 1.277,1.082 1.354,0.556 0.076,-0.527 -0.249,-1.067 -0.249,-1.067 m 1.846,-0.674 c 0.553,-0.099 1.265,-0.62 1.866,-0.129 0.601,0.49 1.253,0.63 1.381,-0.248 0.127,-0.877 -0.65,-1.08 -1.14,-0.793 -0.49,0.287 -0.516,0.776 -0.516,0.776 m -1.905,0.708 c -0.162,-0.427 -0.311,-0.942 -0.574,-1.294 -0.263,-0.352 -0.901,-0.893 -1.379,-0.38 -0.478,0.514 0.886,1.922 1.629,0.819 m 9.09,14.023 c -0.627,0.126 -1.191,0.314 -0.878,1.255 0.314,0.94 0.502,0.689 0.941,-0.251 0.439,-0.941 -0.125,-0.816 0.126,-1.569 0.25,-0.752 0.501,-1.63 0.376,-2.258 -0.126,-0.627 -0.188,-1.693 0.125,-2.634 0.314,-0.941 0.377,-0.439 0.251,-1.129 -0.125,-0.69 1.192,-1.694 -0.188,-1.882 -1.38,-0.188 -0.878,1.757 0.188,1.882 m -0.502,2.509 c 0.628,0 1.129,0.314 1.569,0.125 0.439,-0.188 2.258,0.565 1.568,1.38 -0.69,0.816 -2.07,-0.501 -1.568,-1.38 m -1.506,0.69 c -0.313,0.314 -0.564,0.69 -1.003,0.565 -0.439,-0.126 -1.38,0.125 -1.255,1.003 0.126,0.879 0.941,0.628 1.38,0.126 0.439,-0.502 0.188,-0.816 -0.125,-1.129 m 1.066,-2.133 c -0.753,0 -1.317,0.063 -1.443,-0.251 -0.125,-0.313 0.314,-1.819 -0.752,-1.568 -1.067,0.251 -0.189,1.882 0.752,1.568 m 12.984,5.207 c -0.188,-0.502 0.941,-1.318 1.192,-1.255 0.672,0.168 0.627,0.815 0.502,1.192 -0.259,0.773 -0.878,0.251 -1.694,0.063 -0.815,-0.189 -1.192,2.195 -1.442,2.822 -10e-4,0 -1.38,1.192 -1.631,0.126 -0.251,-1.067 0.125,-1.694 0.815,-1.506 0.69,0.188 0.816,1.066 0.816,1.38 M 20.385,-5.52 c -1.38,0.126 -1.505,1.757 -0.251,1.819 1.255,0.063 0,-1.38 0.251,-1.819 0.251,-0.439 0.565,-0.94 1.757,-1.129 1.191,-0.188 1.756,-1.317 2.508,-2.132 0,0 0.753,-1.067 1.945,-0.377 m -2.446,0.941 c -0.063,-0.69 -0.69,-1.003 -0.189,-1.568 0.502,-0.564 1.38,-2.07 0.314,-2.195 -1.066,-0.126 -1.317,2.07 -0.314,2.195 m -2.32,3.199 c 0.376,-0.627 0.313,-1.254 -0.189,-1.693 -0.501,-0.44 -1.944,-1.694 -0.188,-1.757 1.757,-0.062 1.568,1.694 0.188,1.757 m -0.25,1.944 c 0.815,0.125 2.007,-0.125 2.007,0.627 0,0.753 0.125,1.882 0.941,1.819 0.815,-0.063 0.94,-2.258 -0.941,-1.819 m -2.384,-0.376 c -0.941,0.063 -0.878,0 -1.066,-0.627 -0.188,-0.628 0,-2.008 -1.004,-1.38 -1.003,0.627 0.063,1.693 1.004,1.38 m 4.391,-1.318 c 0.878,0.189 1.129,0.377 1.693,0.314 0.565,-0.063 1.255,0.627 0.502,1.192 -0.753,0.564 -1.568,-0.188 -1.004,-1.255 M 4.836,-23.854 c -0.477,-1.3 -2.085,-0.999 -1.821,0.229 0.263,1.228 1.332,-0.357 1.821,-0.229 0.49,0.13 2.63,-1.405 3.119,-0.302 0.49,1.103 1.727,1.356 2.709,1.872 0,0 1.225,0.452 0.866,1.781 m -1.541,-2.12 c 0.651,-0.238 0.945,-0.354 0.945,-0.354 0.676,0.338 2.403,0.245 1.841,-0.67 -0.669,-1.087 -1.979,-0.333 -1.841,0.67 m -3.595,-1.59 c 0.089,0.82 0.711,1.49 -0.017,1.685 -0.727,0.194 -1.785,0.606 -1.514,1.379 0.272,0.771 2.425,0.325 1.514,-1.379 m -1.363,-1.267 c -0.502,-0.062 -0.432,-0.824 -0.565,-0.878 0,0 2.308,-0.509 1.443,-1.317 -0.866,-0.807 -1.432,0.184 -0.886,1.012 m 3.856,2.758 c 0.045,0.897 -0.071,1.188 0.135,1.717 0.206,0.53 -0.282,1.374 -1.022,0.793 -0.739,-0.581 -0.223,-1.563 0.953,-1.293 m 15.098,-3.622 c -0.426,-1.319 1.025,-2.073 1.574,-0.944 0.55,1.129 -1.269,0.542 -1.574,0.944 -0.306,0.403 -0.644,0.888 -0.35,2.058 0.294,1.171 -0.523,2.132 -0.978,3.144 0,0 -0.498,2.57 -0.917,2.821 0,0 -0.752,1.255 -1.421,1.255 -0.669,0 -1.087,-0.251 -0.837,-0.921 0.251,-0.669 0.921,-1.171 1.255,-1.003 0.335,0.167 1.003,0.669 1.003,0.669 m 1.24,-3.504 c -0.659,0.214 -1.194,-0.241 -1.516,0.442 -0.323,0.684 -1.363,2.082 -1.897,1.15 -0.533,-0.931 1.388,-2.023 1.897,-1.15 m 2.032,-3.389 c -0.429,0.592 -1.031,0.78 -1.632,0.491 -0.6,-0.289 -2.32,-1.124 -1.689,0.516 0.631,1.64 2.173,0.778 1.689,-0.516 m 1.774,-1.437 c -0.312,-0.89 -0.345,-0.808 -0.995,-0.735 -0.651,0.072 -1.847,0.787 -1.664,-0.383 0.184,-1.169 1.583,-0.606 1.664,0.383 m 0.51,4.555 c 0.518,0.734 0.789,0.891 0.953,1.435 0.164,0.544 1.069,0.907 1.293,-0.006 0.224,-0.914 -0.788,-1.368 -1.548,-0.431 m -8.78,3.101 c 0.314,0.816 2.572,2.196 2.196,3.45 -0.377,1.255 -2.258,3.325 -0.816,3.513 1.443,0.188 1.192,-1.945 0.251,-2.196 m 0.565,-2.132 c 0.627,0.251 2.383,2.007 3.01,0.564 0.628,-1.442 -1.568,-1.505 -1.693,-0.941 -0.126,0.565 -0.126,1.129 -0.126,1.129 m -2.007,-1.756 c -0.188,0.753 -0.627,3.074 -1.38,2.697 -0.753,-0.376 -0.376,-1.379 0.314,-1.63 0.69,-0.251 0.69,0.125 0.69,0.125 M 6.649,-15.367 c 0.878,0.878 1.129,1.693 1.003,2.697 -0.125,1.003 0.439,3.011 1.443,3.951 1.003,0.941 2.132,1.506 0.627,2.321 C 8.217,-5.582 8.154,-6.837 8.53,-7.213 8.907,-7.589 9.158,-8.029 9.785,-8.029 M 8.029,-10.287 C 7.84,-9.848 7.84,-9.973 7.715,-9.346 7.589,-8.719 7.589,-8.279 6.962,-8.405 6.261,-8.545 5.645,-9.095 6.9,-9.722 c 0.571,-0.286 0.815,0.376 0.815,0.376 m 0.063,-1.756 c 0.69,0.314 1.442,1.38 2.195,0.878 0.753,-0.502 0.564,-1.066 -0.188,-1.317 -0.753,-0.251 -1.129,0.564 -0.941,1.192 m -4.14,2.446 c -0.376,-0.251 -0.627,-0.063 -1.192,0.376 -0.564,0.439 0.126,1.38 1.067,1.192 0.941,-0.188 0.439,-1.694 -0.69,-2.823 -1.129,-1.129 0.125,-2.634 0.125,-3.449 0,0 -0.376,-1.631 -1.568,-0.565 -1.192,1.066 0.188,1.38 0.627,1.129 0.439,-0.251 0.941,-0.564 0.941,-0.564 m -0.627,2.07 C 2.509,-10.475 2.07,-10.663 1.819,-10.098 1.568,-9.534 3.277,-7.386 1.631,-7.276 0.69,-7.213 1.254,-9.158 2.007,-9.22 m 5.206,-5.206 c -0.125,0.941 -0.335,0.912 -0.502,1.693 -0.188,0.878 -0.752,1.443 -1.191,1.066 -0.87,-0.744 0.188,-2.509 1.191,-1.066 m -11.478,4.391 c 1.819,-0.377 1.882,-1.945 1.944,-3.136 0.063,-1.192 0.063,-1.443 -0.188,-2.007 -0.251,-0.565 0.063,-0.691 0.816,-1.004 0.752,-0.314 1.191,-0.251 1.254,-0.753 0.063,-0.502 1.443,-1.317 1.756,-0.815 0.314,0.502 -0.313,2.258 -1.756,0.815 m -1.819,3.513 c 0.69,-0.314 1.004,-0.314 1.255,-0.753 0.251,-0.439 1.254,-0.314 1.254,0.502 0,0.815 -1.631,1.066 -1.254,-0.502 m -1.443,2.007 c -0.502,0.063 -1.129,0.251 -1.317,-0.376 -0.188,-0.627 0.501,-1.317 -0.188,-1.694 -0.69,-0.376 -1.694,0.878 0.188,1.694 m 1.129,-3.074 c -0.251,-0.313 -1.882,-0.815 -1.192,-1.505 0.69,-0.69 1.631,-0.439 1.443,0.251 -0.189,0.69 -0.439,0.878 -0.628,1.003 m 28.226,-0.94 c -0.188,0.69 -1.129,2.383 -1.693,1.568 -0.565,-0.816 0.188,-2.007 1.254,-0.753 M 7.955,-24.156 c 0.764,0.133 1.014,0.196 1.579,-0.62 0.564,-0.815 -0.314,-0.815 -0.126,-1.254 0.189,-0.439 1.506,-0.941 1.631,-0.439 0.126,0.501 -0.627,1.819 -1.38,1.317"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Road, Proposed.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Road, Proposed.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3781"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 41">
+  <defs
+     id="defs3783" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <text
+       xml:space="preserve"
+       style="font-size:29.71159744px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="-0.85594887"
+       y="16.248529"
+       id="text4209"
+       sodipodi:linespacing="125%"
+       transform="scale(1.0155331,0.98470447)"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="-0.85594887"
+         y="16.248529">x</tspan></text>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2.svg	(revision 42196)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4501"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 83">
+  <defs
+     id="defs4503" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4506">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="text4122"
+       style="font-size:120.72502136px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;font-family:Istanbul;-inkscape-font-specification:Istanbul"
+       transform="matrix(0.25136241,0,0,0.24717689,-17.738554,-209.33916)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4269"
+         style="fill:#00ff00;stroke:#000000;stroke-opacity:1;-inkscape-font-specification:Istanbul"
+         d="m 78.433927,901.71555 -7.36847,-12.67377 19.216971,-9.78533 -19.216971,-9.54954 7.36847,-12.61482 17.861173,11.78955 -1.296851,-21.45699 14.736941,0 -1.3558,21.45699 17.97907,-11.78955 7.36847,12.61482 -19.27592,9.54954 19.27592,9.66743 -7.36847,12.55587 -17.97907,-11.7306 1.3558,21.39804 -14.736941,0 1.473694,-21.39804 z" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4.svg	(revision 42196)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4611"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 89">
+  <defs
+     id="defs4613" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4616">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="text4122-6"
+       style="font-size:120.72502136px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;font-family:Istanbul;-inkscape-font-specification:Istanbul"
+       transform="matrix(0.25136241,0,0,0.24717689,-17.738554,-209.33916)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4269-7"
+         style="fill:#000000;stroke:#000000;stroke-opacity:1;-inkscape-font-specification:Istanbul"
+         d="m 78.433927,901.71555 -7.36847,-12.67377 19.216971,-9.78533 -19.216971,-9.54954 7.36847,-12.61482 17.861173,11.78955 -1.296851,-21.45699 14.736941,0 -1.3558,21.45699 17.97907,-11.78955 7.36847,12.61482 -19.27592,9.54954 19.27592,9.66743 -7.36847,12.55587 -17.97907,-11.7306 1.3558,21.39804 -14.736941,0 1.473694,-21.39804 z" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Coastline.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Coastline.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield.svg	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4710"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 95">
+  <defs
+     id="defs4712" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4715">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 1.58884e-4,5.4108433 c -0.012400004,1.04013 0.697579996,1.57876 1.602180016,1.74728 1.80004,0.24763 4.07861,0.0468 5.84035,0.2293 0.0855,2.19186 0.13892,3.3488697 0.23223,5.1650497 -2.24523,0.0104 -2.72194,0.16411 -2.75822,0.83822 -0.0358,0.66403 0.52193,0.7768 1.07424,0.79553 0.55231,0.0187 1.16178,0.0121 1.76197,0.0244 0,0 0.003,0.32949 0.10831,0.39454 0.098,0.0605 0.30682,0.0707 0.41674,0.0202 0.1015,-0.0466 0.13717,-0.4249 0.13717,-0.42489 0,0 1.13151,-0.004 1.6898601,0.0116 0.60973,0.0186 1.18678,-0.0221 1.20266,-0.8247 0.0159,-0.80233 -1.24487,-0.82743 -2.7901701,-0.83493 0.15147,-2.4193 0.17586,-2.5537697 0.30265,-5.1650497 1.7544001,-0.17011 3.7121201,0.0183 5.2342501,-0.2293 1.21754,-0.19807 1.9791,-0.7075 1.94449,-1.74374 -0.0346,-1.03623 -0.62347,-1.40465 -1.95367,-1.4064 -2.3514,-0.003 -5.0021201,-0.2128 -5.0021201,-0.2128 -0.0228,-1.02497 0.2343,-2.4488201 -0.78069,-2.4528101 -1.01499,-0.004 -0.83059,1.4204401 -0.86352,2.4551101 -1.25914,2.5e-4 -4.01035,0.22734 -5.82298,0.2172 -0.84805002,-0.005 -1.56319002,0.34584 -1.575730016,1.39616 z"
+       id="path3241"
+       sodipodi:nodetypes="cccczzczzcczccszsczcsz"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1_sel.svg	(revision 42196)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4756"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Handicapped 1.svg">
+  <defs
+     id="defs4758" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4761">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       id="path1877-5"
+       d="M 5.5e-7,8.0000048 5.5e-7,0 7.9999995,0 l 7.9999995,0 0,8.0000048 0,7.9999952 -7.9999995,0 -7.99999895,0 0,-7.9999952 z"
+       style="fill:#0000ff"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1875-5"
+       d="m 0.06033205,8.0000048 0,-8.0000048 7.93966805,0 7.9396679,0 0,8.0000048 0,7.9999952 -7.9396679,0 -7.93966805,0 0,-7.9999952 z M 15.605942,15.672519 c 0.04259,-0.03565 0.04413,-0.303249 0.04413,-7.6574578 0,-7.05958161 -0.0029,-7.62349291 -0.03994,-7.66134689 -0.03853,-0.0394467 -0.306641,-0.0408356 -7.6018089,-0.0408356 -7.52969405,0 -7.56207605,1.9446e-4 -7.61013605,0.0447247 -0.04808,0.0445395 -0.04826,0.0744486 -0.04826,7.64866099 0,6.8460226 0.0037,7.6089176 0.03757,7.6536336 l 0.03757,0.04963 7.56837595,0 c 7.008587,0 7.571639,-0.0028 7.612507,-0.03695 z M 0.65069605,15.435792 c -0.0063,-0.01537 -0.0087,-3.366513 -0.0053,-7.4469637 l 0.0062,-7.419 7.36048505,0 7.3604819,0 0,7.4413438 0,7.4413439 -7.3551909,0.0056 c -5.871508,0.0046 -7.35750505,-1.8e-5 -7.36666105,-0.02232 z M 6.3629161,14.234364 c 0.51104,-0.05491 0.501519,-0.05324 0.828636,-0.150138 0.252325,-0.07473 0.940469,-0.381068 1.242837,-0.553189 0.494921,-0.281738 0.897167,-0.650823 1.289545,-1.183251 0.120296,-0.163232 0.3514799,-0.57231 0.3514799,-0.621933 0,-0.04047 -0.6197459,-1.444516 -0.6549659,-1.483815 -0.04173,-0.04658 -0.123367,-0.02713 -0.156368,0.03732 -0.01575,0.03074 -0.06414,0.141341 -0.107546,0.24581 -0.172421,0.415023 -0.555614,1.06105 -0.801056,1.350502 -0.544327,0.641924 -1.069178,0.933395 -1.935563,1.074875 -0.409592,0.06686 -0.540744,0.06824 -0.92972,0.0095 -0.412506,-0.06222 -0.700926,-0.15261 -1.043087,-0.326861 -0.394277,-0.200789 -0.650028,-0.402013 -0.946805,-0.744949 -0.281315,-0.325064 -0.507593,-0.823796 -0.593127,-1.307258 -0.05933,-0.335362 -0.05952,-0.514399 -8.69e-4,-0.8297781 0.116445,-0.6262111 0.308132,-0.986361 0.805307,-1.5130479 L 3.8274511,8.1154374 3.6943591,7.4296489 c -0.0732,-0.3771879 -0.145663,-0.6998171 -0.161023,-0.716957 -0.05751,-0.06417 -0.130343,-0.032594 -0.301737,0.13085 -0.399177,0.3806232 -0.707373,0.737134 -1.041332,1.2045954 -0.262404,0.3672984 -0.386147,0.643638 -0.463741,1.035623 -0.0292,0.1474897 -0.06327,0.3083876 -0.07571,0.3575478 -0.0479,0.1891958 -0.0778,0.9222189 -0.04823,1.1821309 0.08326,0.7318 0.113692,0.839991 0.377655,1.342649 0.236426,0.45022 0.429365,0.693576 0.8775,1.106785 0.447802,0.412903 0.596629,0.507676 1.241898,0.790887 0.469099,0.205882 0.794565,0.298933 1.221635,0.349279 0.389874,0.04593 0.494579,0.05741 0.571062,0.06269 0.02871,0.0019 0.240478,-0.01667 0.470589,-0.04139 z m 6.6791729,-1.560097 c 1.004545,-0.312897 1.563613,-0.497611 1.579499,-0.521853 0.01856,-0.02834 -0.01581,-0.154417 -0.140108,-0.513964 -0.09058,-0.262043 -0.185644,-0.528725 -0.211245,-0.592626 -0.0484,-0.120822 -0.114836,-0.166009 -0.17552,-0.119368 -0.0342,0.0263 -1.838992,0.6042 -1.887005,0.604247 -0.01517,9e-6 -0.0331,-0.01259 -0.03984,-0.02787 C 11.238919,9.3853346 10.594924,7.9327345 10.567929,7.8940009 l -0.03496,-0.050188 -2.5629179,-0.00556 -2.562919,-0.00556 -0.03188,-0.1769729 c -0.01753,-0.097329 -0.02633,-0.1903533 -0.01956,-0.206706 0.01011,-0.024353 0.361771,-0.029724 1.963004,-0.029724 1.485019,0 1.957594,-0.00648 1.97964,-0.026853 0.04126,-0.038243 0.04126,-1.2042528 0,-1.2424586 -0.02208,-0.020464 -0.524116,-0.026853 -2.11237,-0.026853 -1.645012,0 -2.085635,-0.00556 -2.09397,-0.027965 -0.02603,-0.068893 -0.230709,-1.4111904 -0.219357,-1.4385808 0.007,-0.016853 0.04546,-0.03065 0.08549,-0.03065 0.18482,0 0.655186,-0.2460323 0.860826,-0.4502845 0.103597,-0.1028947 0.270359,-0.3674559 0.300332,-0.476462 0.01361,-0.04954 0.03646,-0.1177659 0.05078,-0.1516937 0.01432,-0.033891 0.02492,-0.1646574 0.02357,-0.290507 -0.0021,-0.1928812 -0.01403,-0.2600609 -0.07606,-0.4278018 -0.08892,-0.2404487 -0.233323,-0.4478678 -0.43931,-0.6310262 -0.185791,-0.1652037 -0.37802,-0.258709 -0.631073,-0.3069987 -0.546295,-0.1042281 -1.007618,0.017038 -1.403382,0.3688448 -0.315294,0.2802842 -0.436581,0.5321872 -0.461932,0.9593872 -0.01331,0.2242255 -0.0087,0.2787008 0.0352,0.4134028 0.02779,0.085375 0.252771,1.3467701 0.499953,2.8032037 0.326692,1.9248952 0.459819,2.6586956 0.487487,2.6870491 0.03572,0.036576 0.204578,0.039354 2.743317,0.044725 l 2.705254,0.00556 0.8359589,1.9329597 c 0.459778,1.063134 0.852937,1.960619 0.873689,1.994418 0.02075,0.0338 0.05724,0.06065 0.08108,0.05972 0.02385,-9.26e-4 0.743064,-0.219651 1.598265,-0.486027 z"
+       style="fill:#ffffff;stroke:none"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.2042822,15.417547 -0.52933174,-0.01427 0,-7.4092138 0,-7.40921378 7.34306934,0 7.3430692,0 0,7.43316838 0,7.4331682 -6.8137375,-0.0097 c -3.7475557,-0.0053 -7.0519369,-0.01611 -7.3430693,-0.02395 z M 6.575259,14.232331 c 0.4961365,-0.06221 0.8002941,-0.16566 1.5103351,-0.513692 0.6335091,-0.310519 1.0170872,-0.595833 1.4075285,-1.046952 0.236678,-0.273459 0.5971744,-0.843491 0.5971744,-0.944277 0,-0.07024 -0.6216367,-1.465878 -0.6780535,-1.522295 -0.068518,-0.06852 -0.155984,0.04939 -0.3827213,0.515909 -0.7204172,1.482291 -1.5780666,2.135914 -2.9333809,2.235559 -0.2631684,0.01935 -0.4678792,0.0023 -0.8036165,-0.0668 C 3.9585724,12.615101 3.0371629,11.631106 2.9031091,10.338069 2.8413296,9.7421653 3.1304053,8.9328487 3.5841114,8.4314873 3.7184789,8.2830064 3.8284158,8.1189897 3.8284158,8.0670057 3.8284158,8.0150218 3.767599,7.6855824 3.6932673,7.3349179 3.6189356,6.9842539 3.5581188,6.690414 3.5581188,6.6819407 c 0,-0.00847 -0.040718,-0.015406 -0.090484,-0.015406 -0.1931515,0 -1.2691594,1.2376374 -1.5365781,1.7673908 C 1.741164,8.810101 1.623525,9.3544139 1.5925479,10.000198 c -0.062965,1.312639 0.2142638,2.036598 1.1304455,2.952064 0.4343824,0.434043 0.5542143,0.525965 0.9477495,0.727006 1.0330461,0.527742 1.8562896,0.684499 2.9045164,0.553063 z m 7.246192,-1.782729 c 0.429226,-0.138515 0.790958,-0.279331 0.803849,-0.312924 0.05192,-0.135292 -0.364674,-1.23549 -0.467819,-1.23549 -0.03645,0 -0.489642,0.135587 -1.007091,0.301305 -0.517449,0.165718 -0.948654,0.292419 -0.958233,0.281559 -0.0096,-0.01086 -0.377805,-0.835704 -0.81828,-1.8329876 l -0.800865,-1.8132426 -0.8196226,0 c -0.4507928,0 -1.6135625,-0.01343 -2.583932,-0.029844 l -1.7643089,-0.029844 0,-0.1444594 c 0,-0.1319333 0.014648,-0.1468803 0.1689357,-0.1723823 0.092915,-0.015358 0.971784,-0.028147 1.9530429,-0.028419 L 9.3112348,7.4323767 9.3402188,7.0894954 C 9.35616,6.900911 9.356519,6.6101399 9.3410161,6.4433373 L 9.3128296,6.14006 8.203667,6.1105733 C 7.5936278,6.0943559 6.647376,6.0810429 6.1008854,6.0809893 L 5.1072659,6.0808911 5.0320354,5.5966089 C 4.8875694,4.6666367 4.8863078,4.6393069 4.9878465,4.6393069 5.1425568,4.6393069 5.7071933,4.32848 5.8519238,4.1636408 6.1159279,3.8629568 6.1920116,3.6616131 6.1913899,3.265297 6.1907146,2.8348768 6.0876891,2.5848992 5.7808542,2.2691895 5.5179295,1.9986599 5.2425937,1.8810539 4.8125262,1.8555819 4.369174,1.829323 4.0276585,1.9318893 3.718036,2.1842868 3.3786866,2.4609169 3.2448501,2.678311 3.1890858,3.043474 c -0.045395,0.2972594 -0.030322,0.4093339 0.3206415,2.3841992 0.5784189,3.2547507 0.6459781,3.6179659 0.6845746,3.6804415 0.02898,0.046909 0.5771113,0.06113 2.7348885,0.070953 l 2.6986447,0.012286 0.1819657,0.4156844 c 0.1000811,0.2286262 0.4809692,1.1049419 0.8464182,1.9473679 0.365449,0.842426 0.692154,1.55452 0.726011,1.582432 0.06426,0.05298 0.704048,-0.127276 2.439221,-0.687236 l 0,0 z"
+       id="path4672"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.08930689,8.0180198 0,-7.97376245 7.90618821,0 7.9061879,0 0,7.97376245 0,7.9737622 -7.9061879,0 -7.90618821,0 0,-7.9737622 z M 15.586337,15.677388 c 0.05963,-0.0377 0.06757,-0.939935 0.06757,-7.6764992 0,-4.1985793 -0.01319,-7.64696842 -0.02931,-7.66308683 -0.05508,-0.0550786 -15.18190962,-0.034258 -15.23713823,0.0209724 -0.0572583,0.0572602 -0.0750395,15.14499963 -0.0180123,15.28387463 0.0306518,0.07464 0.43429371,0.0788 7.59084183,0.07815 4.6851507,-4.06e-4 7.5841567,-0.01693 7.6260427,-0.04341 l 0,0 z"
+       id="path4674"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2_sel.svg	(revision 42196)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4805"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Handicapped 2.svg">
+  <defs
+     id="defs4807" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4810">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g4621"
+       transform="matrix(0.02413273,0,0,0.02234637,28.195591,-7.8090193)"
+       inkscape:transform-center-x="193.03424"
+       inkscape:transform-center-y="182.80778">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#fafcfc"
+         d="m -1168.3548,707.45356 0,-358.00001 331.49996,0 331.5,0 0,358.00001 0,358.00004 -331.5,0 -331.49996,0 0,-358.00004 z"
+         id="path1877" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#015ba0"
+         d="m -1165.8548,707.45358 0,-358 328.99998,0 328.99999,0 0,358 0,357.99992 -328.99999,0 -328.99998,0 0,-357.99992 z m 644.17123,343.34492 c 1.76484,-1.5971 1.82874,-13.5702 1.82874,-342.67117 0,-315.91592 -0.12181,-341.15087 -1.65499,-342.84501 -1.59661,-1.76424 -12.70644,-1.82874 -314.99999,-1.82874 -312.01169,0 -313.35349,0.009 -315.34499,2 -1.9922,1.99216 -2,3.33333 -2,342.27749 0,306.35923 0.1551,340.49903 1.5567,342.49993 l 1.5567,2.2225 313.61454,0 c 290.41833,0 313.74981,-0.1224 315.44329,-1.655 z m -619.70803,-10.5933 c -0.2613,-0.6884 -0.36,-150.65166 -0.2192,-333.25162 l 0.2559,-332 305.00008,0 304.99999,0 0,333 0,332.99992 -304.78075,0.2517 c -243.30062,0.2008 -304.87662,-9e-4 -305.25602,-1 z m 236.70014,-53.76396 c 21.1762,-2.458 20.7817,-2.3808 34.3366,-6.7188 10.4557,-3.3461 38.97066,-17.05281 51.50004,-24.7552 20.50829,-12.6075 37.17635,-29.1242 53.43555,-52.9505 4.98473,-7.30461 14.56445,-25.61061 14.56445,-27.8312 0,-1.8122 -25.68072,-64.64233 -27.14018,-66.40087 -1.72932,-2.0837 -5.112,-1.21244 -6.47949,1.66891 -0.65257,1.375 -2.65797,6.325 -4.45644,11 -7.14467,18.57206 -23.02325,47.48166 -33.19375,60.43456 -22.55555,28.72629 -44.30408,41.7695 -80.20488,48.1009 -16.9725,2.99319 -22.4071,3.0536 -38.5253,0.42779 -17.0932,-2.78459 -29.0446,-6.82899 -43.2229,-14.6267 -16.33784,-8.98529 -26.93554,-17.99019 -39.23324,-33.33659 -11.657,-14.5467 -21.0334,-36.8647 -24.5777,-58.49996 -2.4584,-15.00708 -2.4662,-23.01907 -0.036,-37.13222 4.8252,-28.02309 12.7682,-44.13976 33.3699,-67.70906 l 4.8,-5.4914 -5.515,-30.68906 c -3.0333,-16.87897 -6.0359,-31.31662 -6.6724,-32.08365 -2.383,-2.87134 -5.4011,-1.45793 -12.5032,5.85539 -16.5409,17.03294 -29.3118,32.98698 -43.1502,53.90567 -10.8734,16.43658 -16.001,28.80293 -19.2163,46.34433 -1.2098,6.6 -2.6216,13.8 -3.1373,16 -1.9847,8.4668 -3.224,41.26939 -1.9987,52.90048 3.4502,32.74818 4.7111,37.58948 15.6491,60.08358 9.7969,20.1474 17.7918,31.03739 36.3614,49.5285 18.5558,18.4774 24.7228,22.7187 51.46114,35.3922 19.4383,9.21339 32.9248,13.37749 50.6215,15.63009 16.1554,2.0563 20.4941,2.5706 23.6634,2.80511 1.1898,0.088 9.9648,-0.7455 19.5,-1.8523 z m 276.7682,-69.8144 c 41.62584,-14.0019 64.79223,-22.26781 65.45052,-23.35291 0.76898,-1.26759 -0.65525,-6.90989 -5.80574,-23 -3.75358,-11.7262 -7.69263,-23.6601 -8.75344,-26.51979 -2.00576,-5.407 -4.75854,-7.4288 -7.27313,-5.3419 -1.4172,1.1762 -76.20324,27.03829 -78.19279,27.0402 -0.62866,6e-4 -1.37152,-0.5614 -1.6508,-1.2489 -38.49343,-94.75795 -65.17894,-159.76169 -66.29755,-161.49542 l -1.44878,-2.24546 -106.20093,-0.25454 -106.20096,-0.25454 -1.3209,-7.9195 c -0.7265,-4.35572 -1.0912,-8.51822 -0.8104,-9.25 0.4191,-1.09215 14.9909,-1.3305 81.342,-1.3305 61.53548,0 81.1178,-0.28646 82.03134,-1.2 1.70979,-1.70979 1.70979,-53.89021 0,-55.6 -0.9148,-0.9148 -21.71809,-1.2 -87.53134,-1.2 -68.1652,0 -86.4235,-0.26303 -86.7689,-1.25 -1.0787,-3.08266 -9.56,-63.15067 -9.0896,-64.37655 0.2899,-0.7554 1.8839,-1.37345 3.5424,-1.37345 7.6585,0 27.1493,-11.0103 35.6705,-20.1502 4.2928,-4.6046 11.203,-16.44363 12.445,-21.32193 0.564,-2.21533 1.511,-5.27005 2.1043,-6.78827 0.5934,-1.51821 1.0328,-7.36821 0.9765,-13 -0.0864,-8.63156 -0.5813,-11.63802 -3.1518,-19.14437 -3.6845,-10.75983 -9.6683,-20.04202 -18.2039,-28.23837 -7.6987,-7.39263 -15.6642,-11.5773 -26.1501,-13.73793 -22.6371,-4.66438 -41.75314,0.76134 -58.15264,16.50556 -13.065,12.54288 -18.0908,23.81534 -19.1413,42.93253 -0.5514,10.03401 -0.3592,12.47197 1.4587,18.5 1.1516,3.81864 10.4742,60.26798 20.7168,125.44298 13.5373,86.13922 19.05374,118.97673 20.20024,120.24571 1.4803,1.63825 8.4772,1.76136 113.6762,2 l 112.09894,0.25429 34.64006,86.49996 c 19.05204,47.575 35.3436,87.7375 36.20348,89.25 0.85989,1.5125 2.37186,2.7155 3.35994,2.6733 0.98808,-0.0422 30.79072,-9.8297 66.22808,-21.75 z"
+         id="path1875" />
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.08930689,8.0180198 0,-7.97376245 7.90618821,0 7.9061879,0 0,7.97376245 0,7.9737622 -7.9061879,0 -7.90618821,0 0,-7.9737622 z M 15.586337,15.677388 c 0.05963,-0.0377 0.06757,-0.939935 0.06757,-7.6764992 0,-4.1985793 -0.01319,-7.64696842 -0.02931,-7.66308683 C 15.56952,0.28272259 0.44269322,0.30354406 0.38746477,0.35877528 0.33020648,0.41603645 0.31242529,15.503774 0.36945243,15.642649 c 0.0306518,0.07464 0.43429371,0.0788 7.59084187,0.07815 4.6851507,-4.06e-4 7.5841567,-0.01693 7.6260427,-0.04341 l 0,0 z"
+       id="path3026"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.2042822,15.417547 -0.52933174,-0.01427 0,-7.4092138 0,-7.40921378 7.34306934,0 7.3430692,0 0,7.43316838 0,7.4331682 -6.8137375,-0.0097 c -3.7475557,-0.0053 -7.0519369,-0.01611 -7.3430693,-0.02395 z M 6.575259,14.232331 c 0.4961365,-0.06221 0.8002941,-0.16566 1.5103351,-0.513692 0.6335091,-0.310519 1.0170872,-0.595833 1.4075285,-1.046952 0.236678,-0.273459 0.5971744,-0.843491 0.5971744,-0.944277 0,-0.07024 -0.6216367,-1.465878 -0.6780535,-1.522295 -0.068518,-0.06852 -0.155984,0.04939 -0.3827213,0.515909 -0.7204172,1.482291 -1.5780666,2.135914 -2.9333809,2.235559 -0.2631684,0.01935 -0.4678792,0.0023 -0.8036165,-0.0668 C 3.9585724,12.615101 3.0371629,11.631106 2.9031091,10.338069 2.8413296,9.7421653 3.1304053,8.9328487 3.5841114,8.4314873 3.7184789,8.2830064 3.8284158,8.1189897 3.8284158,8.0670057 3.8284158,8.0150218 3.767599,7.6855824 3.6932673,7.3349179 3.6189356,6.9842539 3.5581188,6.690414 3.5581188,6.6819407 c 0,-0.00847 -0.040718,-0.015406 -0.090484,-0.015406 -0.1931515,0 -1.2691594,1.2376374 -1.5365781,1.7673908 C 1.741164,8.810101 1.623525,9.3544139 1.5925479,10.000198 c -0.062965,1.312639 0.2142638,2.036598 1.1304455,2.952064 0.4343824,0.434043 0.5542143,0.525965 0.9477495,0.727006 1.0330461,0.527742 1.8562896,0.684499 2.9045164,0.553063 z m 7.246192,-1.783204 c 0.429226,-0.138255 0.790958,-0.278856 0.803849,-0.312449 0.05192,-0.135292 -0.364674,-1.23549 -0.467819,-1.23549 -0.03645,0 -0.489642,0.135587 -1.007091,0.301305 -0.517449,0.165718 -0.948654,0.292419 -0.958233,0.281559 -0.0096,-0.01086 -0.377805,-0.835704 -0.81828,-1.8329876 l -0.800865,-1.8132426 -0.8196226,0 c -0.4507928,0 -1.6135625,-0.01343 -2.583932,-0.029844 l -1.7643089,-0.029844 0,-0.1444594 c 0,-0.1319333 0.014648,-0.1468803 0.1689357,-0.1723823 0.092915,-0.015358 0.971784,-0.028147 1.9530429,-0.028419 L 9.3112348,7.4323767 9.3402188,7.0894954 C 9.35616,6.900911 9.356519,6.6101399 9.3410161,6.4433373 L 9.3128296,6.14006 8.203667,6.1105733 C 7.5936278,6.0943559 6.647376,6.0810429 6.1008854,6.0809893 L 5.1072659,6.0808911 5.0320354,5.5966089 C 4.8875694,4.6666367 4.8863078,4.6393069 4.9878465,4.6393069 5.1425568,4.6393069 5.7071933,4.32848 5.8519238,4.1636408 6.1159279,3.8629568 6.1920116,3.6616131 6.1913899,3.265297 6.1907146,2.8348768 6.0876891,2.5848992 5.7808542,2.2691895 5.5179295,1.9986599 5.2425937,1.8810539 4.8125262,1.8555819 4.369174,1.829323 4.0276585,1.9318893 3.718036,2.1842868 3.3786866,2.4609169 3.2448501,2.678311 3.1890858,3.043474 c -0.045395,0.2972594 -0.030322,0.4093339 0.3206415,2.3841992 0.5784189,3.2547507 0.6459781,3.6179659 0.6845746,3.6804415 0.02898,0.046909 0.5771113,0.06113 2.7348885,0.070953 l 2.6986447,0.012286 0.1819657,0.4156844 c 0.1000811,0.2286262 0.4809692,1.1049419 0.8464182,1.9473679 0.365449,0.842426 0.692017,1.55442 0.725706,1.582209 0.06376,0.05259 0.688151,-0.123367 2.439526,-0.687488 z"
+       id="path3028"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2.svg	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9685"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 119">
+  <defs
+     id="defs9687" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="4.3866281"
+     inkscape:cy="2.6684057"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9690">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3070-2"
+       sodipodi:sides="3"
+       sodipodi:cx="193.11055"
+       sodipodi:cy="-19.388611"
+       sodipodi:r1="16.360126"
+       sodipodi:r2="8.1800623"
+       sodipodi:arg1="0.5485494"
+       sodipodi:arg2="1.595747"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 207.07035,-10.857623 -14.16388,-0.353472 -14.16387,-0.35347 7.38805,-12.08954 7.38805,-12.08954 6.77583,12.443012 z"
+       inkscape:transform-center-x="-0.0095350151"
+       inkscape:transform-center-y="-2.3891145"
+       transform="matrix(0.50984193,-0.01674065,0.0138891,0.58749679,-90.196097,25.012659)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2.svg	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3265"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 11">
+  <defs
+     id="defs3267" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="37.3125"
+     inkscape:cx="4.3283082"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3270">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-5"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0067283124"
+       inkscape:transform-center-y="-0.76361922"
+       transform="matrix(0.44595779,0,0,0.46847646,-189.83868,31.289725)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Jade.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Jade.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4.svg	(revision 42196)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3356"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 17">
+  <defs
+     id="defs3358" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3361">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-2"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0067244289"
+       inkscape:transform-center-y="-0.76361918"
+       transform="matrix(0.44595809,0,0,0.46847661,-189.83881,31.289733)" />
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-58-5"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0020955704"
+       inkscape:transform-center-y="-0.23728245"
+       transform="matrix(0.13857681,0,0,0.1455742,-53.476341,15.23704)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1_sel.svg	(revision 42196)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4988"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Interstate HWY 1.svg">
+  <defs
+     id="defs4990" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="18.591489"
+     inkscape:cy="11.918317"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4993">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.06268977pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path908"
+       d="m 8.0006932,0.05617788 c -1.100613,0.71531096 -2.439497,1.13827962 -3.885602,1.13827962 -1.008015,0 -1.960651,-0.20896893 -2.8205286,-0.57478911 C 0.5085387,2.0933062 0.0625,3.7495678 0.0625,5.5044893 0.0625,10.312232 3.3787922,14.396652 8.0027272,15.9375 12.626652,14.396652 15.94092,10.312232 15.94091,5.5044893 c 0,-1.7549215 -0.446378,-3.4111831 -1.232062,-4.88482091 -0.860008,0.36595864 -1.814339,0.57478911 -2.822564,0.57478911 -1.446104,0 -2.7849878,-0.42295943 -3.8855908,-1.13827962 z" />
+    <g
+       id="g3418"
+       transform="matrix(0.02747966,0,0,0.02542994,-2.5072793,-2.611974)">
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#007fff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1540"
+         d="m 720.375,594.4375 -546.28125,0 c -1.89326,15.80195 -2.875,31.90764 -2.875,48.21875 0,178.1432 115.27353,329.46877 276.03125,386.56255 160.75775,-57.09374 276.00006,-208.41935 276,-386.56255 0,-16.31111 -0.9808,-32.4168 -2.875,-48.21875 z" />
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1536"
+         d="m 447.1875,440.78125 c -38.26419,26.50485 -84.8177,42.15626 -135.09375,42.15625 -35.04504,10e-6 -68.16783,-7.72644 -98.0625,-21.28125 -17.95111,35.86827 -30.66991,74.67395 -37.375,115.5 l 541.15625,0 c -6.70771,-40.82605 -19.46303,-79.63173 -37.40625,-115.5 -29.89941,13.55999 -63.07285,21.28125 -98.125,21.28125 -50.2761,10e-6 -96.8296,-15.65137 -135.09375,-42.15625 z" />
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 0.6348145,3.9532919 C 0.6349484,3.8240286 0.86588121,2.9621329 1.018049,2.5229701 1.1081936,2.2628092 1.2813109,1.8406302 1.4027542,1.5847945 1.6450816,1.0743013 1.6124801,1.0939258 1.9732003,1.2414138 2.2278706,1.3455411 2.9428202,1.5215702 3.3377265,1.5773765 3.8672935,1.6522124 4.8959354,1.6434954 5.4105394,1.5598109 6.21036,1.4297447 7.0402534,1.1468944 7.6783517,0.78687864 L 8.0320958,0.58729584 8.3344275,0.76690758 C 8.9158346,1.1123154 9.838298,1.4302176 10.635211,1.5598109 c 0.513163,0.08345 1.541432,0.092441 2.072813,0.018124 0.428213,-0.059888 1.114469,-0.2324644 1.449441,-0.364498 0.121399,-0.047851 0.229856,-0.087002 0.241017,-0.087002 0.03285,0 0.325413,0.6000236 0.477286,0.9788817 0.234638,0.5853234 0.535226,1.6184096 0.535226,1.8395079 0,0.056075 -0.992636,0.064779 -7.388119,0.064779 -5.8804932,0 -7.38810693,-0.011491 -7.3880605,-0.056312 z"
+       id="path3543"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 7.5273305,15.313324 C 5.8020579,14.660652 4.0747286,13.470963 2.9627777,12.169513 1.6170215,10.594413 0.83756517,8.9196706 0.55930193,7.0053959 0.48286831,6.4795811 0.4540092,4.9740825 0.51461269,4.674084 l 0.0341271,-0.1689356 7.47531821,0 7.475319,0 0.03387,0.1238861 c 0.05598,0.204761 0.03668,1.8508424 -0.0268,2.2862624 -0.437975,3.0040506 -2.086324,5.5221841 -4.758076,7.2687701 -0.719726,0.470502 -2.0235984,1.099522 -2.6579207,1.282247 -0.0519,0.01495 -0.2906427,-0.04991 -0.5631188,-0.15299 l 0,0 z"
+       id="path3545"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Grey.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Grey.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2_sel.svg	(revision 42196)
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg5041"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Interstate HWY 2.svg">
+  <defs
+     id="defs5043" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5046">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3418-2"
+       transform="matrix(0.02898387,0,0,0.02719065,-3.1094513,-3.3867105)"
+       style="fill:#000000">
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1540-5"
+         d="m 720.375,594.4375 -546.28125,0 c -1.89326,15.80195 -2.875,31.90764 -2.875,48.21875 0,178.1432 115.27353,329.46877 276.03125,386.56255 160.75775,-57.09374 276.00006,-208.41935 276,-386.56255 0,-16.31111 -0.9808,-32.4168 -2.875,-48.21875 z" />
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1536-8"
+         d="m 447.1875,440.78125 c -38.26419,26.50485 -84.8177,42.15626 -135.09375,42.15625 -35.04504,10e-6 -68.16783,-7.72644 -98.0625,-21.28125 -17.95111,35.86827 -30.66991,74.67395 -37.375,115.5 l 541.15625,0 c -6.70771,-40.82605 -19.46303,-79.63173 -37.40625,-115.5 -29.89941,13.55999 -63.07285,21.28125 -98.125,21.28125 -50.2761,10e-6 -96.8296,-15.65137 -135.09375,-42.15625 z" />
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 7.905396,15.941672 C 7.8558416,15.921235 7.6227104,15.830637 7.3873267,15.740342 5.6187904,15.061922 3.8693181,13.827289 2.6368151,12.387822 1.2249352,10.738857 0.41093938,8.9313152 0.11258849,6.7825791 0.04250931,6.2778657 0.02151738,5.04454 0.07361674,4.492896 l 0.02871887,-0.3040842 7.89510149,0 7.8951019,0 0.03468,0.326609 c 0.04999,0.4708366 0.03737,1.6628398 -0.02283,2.1560334 -0.395928,3.2436642 -2.289466,6.1626168 -5.19422,8.0070638 -0.9769478,0.620338 -2.5957257,1.349368 -2.804773,1.263154 z"
+       id="path3607"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.19773473,3.6144307 c 0.0134202,-0.04336 0.0544251,-0.2207426 0.0911219,-0.3941832 0.18813843,-0.889201 0.84429097,-2.59034658 0.99912807,-2.59034658 0.032655,0 0.1564166,0.0381277 0.2750257,0.0847284 C 1.8803712,0.83931778 2.5801106,1.0178404 3.0175247,1.0857155 3.5844559,1.1736883 4.7894321,1.1618085 5.3323359,1.062894 6.1443546,0.91494793 7.1928444,0.52606236 7.8456563,0.13070177 L 8.0111642,0.03046574 8.2299029,0.17082997 C 8.5247547,0.36003594 9.1325797,0.63586061 9.5722277,0.77996339 10.568664,1.1065637 11.451142,1.2153469 12.437984,1.1332257 c 0.763865,-0.063566 1.159042,-0.14107549 1.78318,-0.34975079 0.252633,-0.0844657 0.477195,-0.15357399 0.499026,-0.15357399 0.05656,0 0.429288,0.79721878 0.621337,1.32896038 0.136191,0.3770813 0.470057,1.584458 0.470057,1.69989 0,0.018984 -3.518606,0.034516 -7.8191248,0.034516 -7.42604799,0 -7.81789825,-0.00396 -7.79472447,-0.078837 z"
+       id="path3609"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6.svg	(revision 42196)
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3465"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 23">
+  <defs
+     id="defs3467" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3470">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99958342;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3054-2-4-4-5"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.85123193,0,0,0.7831334,-29.959669,-6.8801903)" />
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-58-6"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0021179412"
+       inkscape:transform-center-y="-0.22879121"
+       transform="matrix(0.14036485,0,0,0.14036485,-54.269562,14.978064)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1_sel.svg	(revision 42196)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4353"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Check 1.svg">
+  <defs
+     id="defs4355" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4358">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#000000;fill-rule:nonzero"
+       inkscape:connector-curvature="0"
+       d="m 11.827563,3.040065 c 0.538948,-0.36463 3.27205,-2.38722 3.755933,-2.64979 L 16,0.982165 c -0.404764,0.30049 -0.848513,0.66618 -1.33665,1.09446 l -1.721566,1.7296 c -1.177835,1.25694 -2.466906,2.89457 -3.87461,4.92197 -1.403983,2.02258 -2.447104,3.75165 -3.129847,5.18774 l -0.860785,0.57957 c -0.713752,0.49563 -1.197636,0.86827 -1.451605,1.11422 -0.09892,-0.36893 -0.321304,-0.97202 -0.662409,-1.80072 L 2.637457,13.066895 C 2.173377,11.976775 1.740836,11.167295 1.340369,10.651915 0.944198,10.132185 0.495621,9.791125 0,9.628015 c 0.836197,-0.89233 1.606122,-1.33607 2.311856,-1.33607 0.587058,0 1.245746,0.80891 1.975535,2.42729 l 0.360865,0.81268 c 1.368721,-2.30809 3.498773,-4.8862 6.389625,-7.73801 l 0.789682,-0.75384 z"
+       class="fil2"
+       id="_43289992" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 3.5611164,15.349827 C 3.3560356,14.652573 2.6040208,12.857737 2.1067579,11.878706 1.4970224,10.678234 0.89346043,9.9788527 0.22057281,9.6930766 L 0.03408503,9.6138751 0.32073062,9.3483092 C 1.0097114,8.7099955 1.5942752,8.3871167 2.1349824,8.346223 2.5257887,8.3166665 2.7104353,8.3941512 3.03718,8.72482 c 0.4059845,0.4108605 0.9776606,1.399292 1.4476396,2.502977 0.071218,0.167246 0.1434358,0.304084 0.1604843,0.304084 0.017049,0 0.148585,-0.187518 0.2923028,-0.416708 C 6.2346861,9.0467027 7.9519466,6.9708783 10.494488,4.3980156 l 1.240116,-1.2549052 1.486634,-1.0679218 c 1.42812,-1.0258887 2.291069,-1.6254857 2.339425,-1.6254857 0.01256,0 0.107713,0.11490002 0.211457,0.25533337 L 15.960746,0.96036963 15.848628,1.05417 c -0.06166,0.05159 -0.37397,0.3103863 -0.694012,0.5751027 -0.632069,0.5228046 -2.071505,1.9574285 -2.794127,2.7847867 -2.124133,2.4320047 -4.6444274,6.0649576 -6.049058,8.7195946 -0.3478042,0.657322 -0.4290415,0.778638 -0.5980659,0.893123 -0.608777,0.412342 -1.5688882,1.108166 -1.7886379,1.296284 -0.1396916,0.119584 -0.26598,0.217606 -0.280641,0.217826 -0.014661,2.25e-4 -0.051997,-0.08576 -0.08297,-0.19106 z"
+       id="path3489"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2_sel.svg	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4399"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Check 2.svg">
+  <defs
+     id="defs4401" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4404">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.96895421;stroke-opacity:1"
+       id="rect5865"
+       width="15.031046"
+       height="14.918031"
+       x="0.48447704"
+       y="0.54098463" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;stroke:none"
+       inkscape:connector-curvature="0"
+       d="M 11.314042,3.7054976 C 11.78069,3.389793 14.147109,1.6385632 14.566075,1.4112271 L 14.92669,1.923707 c -0.350451,0.2601643 -0.73467,0.5767992 -1.157319,0.9476276 l -1.49059,1.4975286 C 11.258966,5.4571926 10.142838,6.8750924 8.9239999,8.6304983 7.7083792,10.381728 6.8052073,11.878802 6.2140579,13.122232 L 5.4687674,13.624043 C 4.8507683,14.053174 4.4318023,14.375816 4.2119077,14.588773 4.1262522,14.269347 3.9337114,13.747168 3.6383741,13.029638 L 3.3569122,12.387096 C 2.9550966,11.443228 2.5805861,10.742354 2.2338458,10.296121 1.8908263,9.8461193 1.5024306,9.5508209 1.07331,9.4095861 1.7973125,8.6369904 2.4639433,8.252771 3.074995,8.252771 c 0.5082941,0 1.0786108,0.7003795 1.710495,2.101642 l 0.3124488,0.703646 C 6.2830281,9.0596288 8.1273067,6.8274198 10.630309,4.3582047 l 0.683733,-0.6527071 z"
+       class="fil2"
+       id="_43289992-3" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.990297,7.995495 0,-6.9601485 7.0051981,0 7.0051979,0 0,6.9601485 0,6.960149 -7.0051979,0 -7.0051981,0 0,-6.960149 z m 3.5739456,6.33669 C 4.8732721,14.080372 5.3153927,13.759032 5.9447803,13.328787 6.2102999,13.14728 6.2565035,13.090734 6.4567369,12.702236 7.5636694,10.554538 9.5472992,7.629689 11.436167,5.360099 12.009351,4.6713832 13.965028,2.7124934 14.515337,2.2758706 L 14.953495,1.9282292 14.772693,1.6619859 C 14.673252,1.515552 14.581594,1.3957425 14.56901,1.3957425 c -0.04339,0 -0.720912,0.4682331 -2.023515,1.3984354 L 11.239059,3.7271172 10.129318,4.8476923 C 7.8519228,7.1473183 6.5080465,8.7783244 5.2379722,10.784111 L 5.0981645,11.004904 4.9943803,10.761586 C 4.7870579,10.275525 4.360701,9.4400119 4.1679117,9.1419901 3.9069465,8.738579 3.6769189,8.4891327 3.4353053,8.347538 2.9868628,8.0847332 2.23978,8.3299169 1.4745792,8.9910256 1.2577784,9.1783347 1.080396,9.3584079 1.080396,9.3911886 c 0,0.032781 0.060579,0.080719 0.1346204,0.1065304 0.373298,0.1301323 0.8406729,0.563865 1.1967933,1.110647 0.4791494,0.73568 1.3788443,2.721327 1.7299078,3.817946 0.029745,0.09292 0.064343,0.168936 0.076885,0.168936 0.012542,0 0.1680799,-0.118379 0.34564,-0.263063 z"
+       id="path3549"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Blue 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Blue 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1.svg	(revision 42196)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4865"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 104">
+  <defs
+     id="defs4867" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4870">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(0.12921879,0,0,0.12921044,-0.14937682,0.10453146)"
+       id="g6721">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff"
+         d="m 15.914,1.949 c -6.758,0 -12.258,5.492 -12.258,12.25 v 94.023 c 0,6.781 5.5,12.273 12.258,12.273 h 94.023 c 6.75,0 12.25,-5.492 12.25,-12.273 V 14.199 c 0,-6.758 -5.5,-12.25 -12.25,-12.25 H 15.914 z"
+         id="path6723" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#0088cf"
+         d="m 110.18,123.02 c 8.164,0 14.797,-6.617 14.797,-14.797 V 13.988 c 0,-8.156 -6.633,-14.797 -14.797,-14.797 H 15.953 c -8.18,0 -14.797,6.641 -14.797,14.797 v 94.234 c 0,8.18 6.617,14.797 14.797,14.797 h 94.227 z"
+         id="path6725" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff"
+         d="M 15.953,1.699 C 9.172,1.699 3.656,7.207 3.656,13.988 v 94.234 c 0,6.781 5.516,12.297 12.297,12.297 h 94.227 c 6.773,0 12.289,-5.516 12.289,-12.297 V 13.988 c 0,-6.781 -5.516,-12.289 -12.289,-12.289 H 15.953 z"
+         id="path6727" />
+      <polygon
+         style="fill:#0088cf"
+         points="29.992,22.559 29.992,99.684 46.594,99.684 46.594,65.379 79.758,65.379 79.758,99.684 96.375,99.684 96.375,22.559 79.758,22.559 79.758,48.801 46.594,48.801 46.594,22.559 "
+         id="polygon6729" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Orange.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Orange.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question.svg	(revision 42196)
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4240"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 68">
+  <defs
+     id="defs4242" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4245">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(0.05228988,0,0,0.04684244,-3.4775502,-2.443245)"
+       id="g1849-1"
+       style="fill:#000000">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#000000;stroke:none"
+         id="path1851-1"
+         d="m 196.963,300.274 49.531,-0.102 0,-38.482 c 0,-10.438 4.866,-20.3 17.886,-28.841 13.019,-8.537 49.364,-25.861 49.364,-71.409 0,-45.55 -38.167,-76.858 -70.25,-83.5 -32.078,-6.642 -66.835,-2.272 -91.5,24.75 -22.087,24.197 -26.741,43.337 -26.741,85.565 l 49.491,0 0,-9.815 c 0,-22.501 2.603,-46.254 34.75,-52.75 17.546,-3.546 33.994,1.958 43.75,11.5 11.16,10.912 11.25,35.5 -6.533,47.743 l -27.896,18.979 c -16.272,10.438 -21.852,22.059 -21.852,39.139 l 0,57.223 z" />
+      <g
+         id="g1853-5"
+         style="fill:#000000">
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#000000;stroke:none"
+           id="path1855-4"
+           d="m 196.638,370.692 0,-51.005 50.212,0 0,51.005 -50.212,0 z" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#000000;stroke:none"
+           id="path1857-5"
+           d="M 221.744,345.19" />
+      </g>
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1_sel.svg	(revision 42196)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4453"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Asterisk 1.svg">
+  <defs
+     id="defs4455" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4458">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <text
+       xml:space="preserve"
+       style="font-size:35.70041275px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="-1.0633428"
+       y="26.496401"
+       id="text5890"
+       sodipodi:linespacing="125%"
+       transform="scale(1.0175838,0.98272006)"><tspan
+         sodipodi:role="line"
+         id="tspan5892"
+         x="-1.0633428"
+         y="26.496401">*</tspan></text>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 7.0269307,12.770743 c 0,-2.1399 -0.015282,-3.22104 -0.045528,-3.22104 -0.025041,0 -1.3638576,0.770347 -2.9751492,1.711881 C 2.3949621,12.203119 1.0622752,12.972622 1.0447272,12.97159 0.99653284,12.968758 0.06414069,11.41162 0.08421164,11.367485 0.09379787,11.346405 1.5010375,10.594958 3.2114108,9.6976028 4.921784,8.8002472 6.3374611,8.0497666 6.3573595,8.0298683 6.3772578,8.0099699 4.9801542,7.2568404 3.2526849,6.3562467 1.5252156,5.4556535 0.0975433,4.7058878 0.08007976,4.6901007 0.06261622,4.674314 0.27091684,4.2933159 0.54297001,3.8434388 L 1.0376122,3.0254805 3.9590551,4.7326324 c 1.6067936,0.9389339 2.9543905,1.7197955 2.9946594,1.7352479 0.067169,0.025775 0.073216,-0.2383583 0.073216,-3.1977635 l 0,-3.22585945 0.9907909,0 0.9907909,0 0.011561,3.22186335 0.011561,3.2218634 2.9056937,-1.6972564 c 1.598131,-0.9334909 2.940479,-1.6991401 2.982996,-1.7014425 0.05371,-0.00291 0.222614,0.2362207 0.553472,0.7836034 0.388328,0.6424637 0.46434,0.7962064 0.41205,0.8334159 -0.03526,0.025094 -1.463772,0.7754282 -3.17446,1.6674084 -1.710687,0.8919802 -3.0965525,1.6356948 -3.0796999,1.6526987 0.016853,0.017004 1.4294289,0.7641113 3.1390579,1.6602374 1.709628,0.896127 3.124192,1.64401 3.143475,1.661965 0.01928,0.01795 -0.18344,0.390851 -0.450495,0.828661 -0.355152,0.582236 -0.503702,0.789231 -0.553129,0.770751 -0.03717,-0.0139 -1.368585,-0.784203 -2.95871,-1.711794 C 10.36176,10.308641 9.0491296,9.549703 9.0349286,9.549703 c -0.014201,0 -0.02582,1.449468 -0.02582,3.22104 l 0,3.221039 -0.9910892,0 -0.9910891,0 0,-3.221039 z"
+       id="path3181"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2_sel.svg	(revision 42196)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4501"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Asterisk 2.svg">
+  <defs
+     id="defs4503" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4506">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="text4122"
+       style="font-size:120.72502136px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;font-family:Istanbul;-inkscape-font-specification:Istanbul"
+       transform="matrix(0.25136241,0,0,0.24717689,-17.738554,-209.33916)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4269"
+         style="fill:#00ff00;stroke:#000000;stroke-opacity:1;-inkscape-font-specification:Istanbul"
+         d="m 78.433927,901.71555 -7.36847,-12.67377 19.216971,-9.78533 -19.216971,-9.54954 7.36847,-12.61482 17.861173,11.78955 -1.296851,-21.45699 14.736941,0 -1.3558,21.45699 17.97907,-11.78955 7.36847,12.61482 -19.27592,9.54954 19.27592,9.66743 -7.36847,12.55587 -17.97907,-11.7306 1.3558,21.39804 -14.736941,0 1.473694,-21.39804 z" />
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 6.3061386,15.655397 c 0,-0.03635 0.081841,-1.226094 0.181868,-2.643878 0.1000271,-1.417784 0.1760481,-2.603369 0.1689357,-2.634633 -0.00752,-0.03306 -0.9742271,0.571346 -2.3104572,1.444551 C 3.0828465,12.647205 2.0349289,13.31011 2.0177794,13.29456 2.0006298,13.27901 1.6136314,12.637847 1.1577829,11.869753 L 0.32896741,10.473218 2.8076901,9.2301722 5.2864129,7.9871267 4.636251,7.6708809 C 1.620395,6.2039366 0.42145671,5.6149427 0.38796054,5.5838545 0.34981657,5.5484523 1.9740433,2.7502724 2.033914,2.7482441 2.0504158,2.7476851 3.0809758,3.4077135 4.3240473,4.214974 5.5671186,5.0222345 6.593732,5.6731656 6.6054097,5.6614878 6.6170874,5.6498101 6.554529,4.4733641 6.4663905,3.0471635 6.3782521,1.620963 6.3061386,0.4125441 6.3061386,0.36178825 c 0,-0.0913709 0.016704,-0.0922834 1.6893565,-0.0922834 0.929146,0 1.6893564,0.0176206 1.6893564,0.0391568 0,0.0875608 -0.3143563,4.99834685 -0.3314706,5.17814165 -0.014743,0.1548789 -0.00541,0.1892589 0.04601,0.1695263 0.035477,-0.013614 1.0559141,-0.6638608 2.2676391,-1.4449931 1.211724,-0.7811324 2.229889,-1.4305073 2.262589,-1.4430555 0.03927,-0.015069 0.234165,0.2719136 0.57404,0.8452689 0.283022,0.477446 0.660085,1.1134284 0.837919,1.4132944 l 0.323335,0.5452107 -2.438175,1.1833892 c -1.340995,0.650864 -2.453919,1.197693 -2.473163,1.2151749 -0.01924,0.017482 1.070391,0.5771535 2.421411,1.243715 1.35102,0.6665615 2.4564,1.2281029 2.4564,1.2478699 0,0.06354 -1.633575,2.781558 -1.671765,2.781558 -0.02025,0 -1.064326,-0.659211 -2.320169,-1.464915 -1.255843,-0.805703 -2.2871676,-1.459484 -2.2918316,-1.452846 -0.00466,0.0066 0.068126,1.177724 0.1617571,2.602415 0.09363,1.42469 0.1714156,2.635959 0.1728554,2.691708 l 0.00262,0.101361 -1.6893564,0 c -1.4547395,0 -1.6893565,-0.0092 -1.6893565,-0.06609 z"
+       id="path3248"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X_sel.svg	(revision 42196)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3781"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="X.svg">
+  <defs
+     id="defs3783" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <text
+       xml:space="preserve"
+       style="font-size:29.71159744px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="-0.85594887"
+       y="16.248529"
+       id="text4209"
+       sodipodi:linespacing="125%"
+       transform="scale(1.0155331,0.98470447)"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="-0.85594887"
+         y="16.248529">x</tspan></text>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 0.3254762,15.620124 C 0.61183692,15.251473 6.08632,8.098744 6.3191368,7.7890593 L 6.4404645,7.6276726 3.5350017,3.8472274 0.62953885,0.06678211 2.1726655,0.05401788 3.7157921,0.04125364 3.8333664,0.17990419 c 0.064666,0.0762578 1.0478712,1.35325911 2.1849009,2.83778061 1.1370297,1.4845215 2.0795866,2.6999581 2.0945705,2.70097 0.014984,0.00101 1.0076484,-1.2753132 2.2059202,-2.8362786 l 2.178677,-2.83811885 1.544451,0 c 0.849448,0 1.544451,0.01140258 1.544451,0.02533905 0,0.02356469 -5.421137,7.1156459 -5.7526806,7.5258167 l -0.149991,0.1855616 3.0921176,4.0490923 c 1.700665,2.227 3.112337,4.074432 3.13705,4.105403 0.03578,0.04484 -0.275093,0.05584 -1.526055,0.05401 L 12.815792,15.98718 10.507139,12.9599 C 9.2373798,11.2949 8.1524548,9.8753041 8.0961947,9.8052463 L 7.9939039,9.6778688 5.584551,12.834232 l -2.409353,3.156362 -1.5692095,5.94e-4 -1.5692096,5.94e-4 0.2886973,-0.371658 z"
+       id="path3142"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Green 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Green 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3_sel.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4556"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Asterisk 3.svg">
+  <defs
+     id="defs4558" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4561">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="text4122-5"
+       style="font-size:120.72502135999999950px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;font-family:Istanbul;-inkscape-font-specification:Istanbul"
+       transform="matrix(0.25136241,0,0,0.24717689,-17.738554,-209.33916)"
+       inkscape:transform-center-x="37.84404"
+       inkscape:transform-center-y="7.9989698">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4269-8"
+         style="fill:#ffff00;stroke:#000000;stroke-opacity:1;-inkscape-font-specification:Istanbul"
+         d="m 78.433927,901.71555 -7.36847,-12.67377 19.216971,-9.78533 -19.216971,-9.54954 7.36847,-12.61482 17.861173,11.78955 -1.296851,-21.45699 14.736941,0 -1.3558,21.45699 17.97907,-11.78955 7.36847,12.61482 -19.27592,9.54954 19.27592,9.66743 -7.36847,12.55587 -17.97907,-11.7306 1.3558,21.39804 -14.736941,0 1.473694,-21.39804 z" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4_sel.svg	(revision 42196)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4611"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Asterisk 4.svg">
+  <defs
+     id="defs4613" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4616">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="text4122-6"
+       style="font-size:120.72502136px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;font-family:Istanbul;-inkscape-font-specification:Istanbul"
+       transform="matrix(0.25136241,0,0,0.24717689,-17.738554,-209.33916)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4269-7"
+         style="fill:#000000;stroke:#000000;stroke-opacity:1;-inkscape-font-specification:Istanbul"
+         d="m 78.433927,901.71555 -7.36847,-12.67377 19.216971,-9.78533 -19.216971,-9.54954 7.36847,-12.61482 17.861173,11.78955 -1.296851,-21.45699 14.736941,0 -1.3558,21.45699 17.97907,-11.78955 7.36847,12.61482 -19.27592,9.54954 19.27592,9.66743 -7.36847,12.55587 -17.97907,-11.7306 1.3558,21.39804 -14.736941,0 1.473694,-21.39804 z" />
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 6.036029,15.93547 c 9.01e-5,-0.03097 0.080247,-1.190814 0.1780983,-2.57743 0.097851,-1.386614 0.1699024,-2.529126 0.160114,-2.538914 -0.00979,-0.0098 -1.010359,0.630376 -2.2234904,1.422588 L 1.9450573,13.682098 0.98339497,12.05779 C 0.45448066,11.164421 0.0152275,10.41784 0.00727679,10.39872 -6.739209e-4,10.379601 1.0510938,9.8347447 2.3445383,9.1879289 3.6779509,8.5211255 4.6790496,7.995054 4.656519,7.972996 4.6346637,7.9515993 3.5930322,7.4348931 2.3417822,6.8247598 1.0905321,6.2146268 0.05194845,5.7007196 0.03381838,5.6827444 0.0068557,5.6560125 1.8237968,2.5304787 1.9296615,2.4214824 1.9472492,2.4033744 2.9435649,3.0257123 4.1436963,3.8044554 5.343828,4.5831986 6.3312623,5.2148432 6.3379954,5.2081101 6.3447285,5.2013774 6.2795594,4.0519602 6.1931756,2.6538501 6.1067919,1.2557399 6.0360529,0.0966274 6.0359781,0.07804448 6.0359029,0.05946156 6.9197431,0.04425735 8.0000672,0.04425735 l 1.9642255,0 -0.027846,0.30408417 C 9.8769025,0.99857382 9.6356124,4.9716803 9.6485934,5.0881599 c 0.01333,0.1196141 0.077847,0.081861 2.1986346,-1.2865733 1.668491,-1.0765912 2.196925,-1.3970791 2.235776,-1.3559673 0.131501,0.1391531 1.90823,3.2033452 1.876065,3.2355097 -0.02015,0.020153 -1.059991,0.5353088 -2.310751,1.1447912 -1.25076,0.6094825 -2.29256,1.1262296 -2.31511,1.1483268 -0.02423,0.023746 0.914234,0.5110839 2.294609,1.1915756 1.284585,0.633269 2.344593,1.1603824 2.355574,1.1713634 0.02268,0.02268 -1.893023,3.262764 -1.930613,3.265316 -0.01342,9.1e-4 -1.004639,-0.627219 -2.202706,-1.395844 -1.198068,-0.768626 -2.1888809,-1.386925 -2.2018074,-1.373998 -0.021476,0.02147 0.2305381,4.221587 0.2926614,4.877563 l 0.026665,0.281559 -1.9658748,0 c -1.5427663,0 -1.9658343,-0.01212 -1.965687,-0.05631 l 0,0 z"
+       id="path3373"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9838"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 128">
+  <defs
+     id="defs9840" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9843">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3072-0"
+       sodipodi:sides="8"
+       sodipodi:cx="425.77386"
+       sodipodi:cy="-22.490788"
+       sodipodi:r1="18.105267"
+       sodipodi:r2="9.0526323"
+       sodipodi:arg1="0.7551044"
+       sodipodi:arg2="1.1478035"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 438.95812,-10.082077 -12.63586,5.688249 -12.95711,-4.9127045 -5.68824,-12.6358625 4.9127,-12.957103 12.63586,-5.688249 12.95711,4.912704 5.68824,12.635863 z"
+       transform="matrix(0.43017785,0,0,0.43017785,-175.15849,17.675039)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Lilac.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Lilac.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Med Green.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Med Green.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield_sel.svg	(revision 42196)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4710"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Airfield.svg">
+  <defs
+     id="defs4712" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4715">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 1.58884e-4,5.4108433 c -0.012400004,1.04013 0.697579996,1.57876 1.602180016,1.74728 1.80004,0.24763 4.07861,0.0468 5.84035,0.2293 0.0855,2.19186 0.13892,3.3488697 0.23223,5.1650497 -2.24523,0.0104 -2.72194,0.16411 -2.75822,0.83822 -0.0358,0.66403 0.52193,0.7768 1.07424,0.79553 0.55231,0.0187 1.16178,0.0121 1.76197,0.0244 0,0 0.003,0.32949 0.10831,0.39454 0.098,0.0605 0.30682,0.0707 0.41674,0.0202 0.1015,-0.0466 0.13717,-0.4249 0.13717,-0.42489 0,0 1.13151,-0.004 1.6898601,0.0116 0.60973,0.0186 1.18678,-0.0221 1.20266,-0.8247 0.0159,-0.80233 -1.24487,-0.82743 -2.7901701,-0.83493 0.15147,-2.4193 0.17586,-2.5537697 0.30265,-5.1650497 1.7544001,-0.17011 3.7121201,0.0183 5.2342501,-0.2293 1.21754,-0.19807 1.9791,-0.7075 1.94449,-1.74374 -0.0346,-1.03623 -0.62347,-1.40465 -1.95367,-1.4064 -2.3514,-0.003 -5.0021201,-0.2128 -5.0021201,-0.2128 -0.0228,-1.02497 0.2343,-2.4488201 -0.78069,-2.4528101 -1.01499,-0.004 -0.83059,1.4204401 -0.86352,2.4551101 -1.25914,2.5e-4 -4.01035,0.22734 -5.82298,0.2172 -0.84805002,-0.005 -1.56319002,0.34584 -1.575730016,1.39616 z"
+       id="path3241"
+       sodipodi:nodetypes="cccczzczzcczccszsczcsz"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 7.8828713,14.550198 c -0.050055,-0.05006 -0.090099,-0.150165 -0.090099,-0.225247 l 0,-0.135149 -0.6870049,-0.0023 c -0.3778528,-0.0013 -0.9026056,-0.01893 -1.1661173,-0.03926 -0.7464509,-0.05759 -0.9849966,-0.238697 -0.9849966,-0.7478 0,-0.237793 0.012983,-0.270366 0.1705687,-0.427952 0.259186,-0.259186 0.6222746,-0.335176 1.8501435,-0.387213 L 7.7121666,12.554057 7.685259,12.18938 C 7.6704593,11.988808 7.6154683,10.831361 7.5630563,9.6172772 7.5106444,8.4031931 7.4516863,7.3926151 7.4320379,7.3715481 7.4123901,7.3504816 6.4364272,7.3154782 5.2632313,7.2937625 3.0880703,7.2535013 1.9225181,7.1962655 1.5125528,7.1095808 0.91927934,6.9841364 0.41201578,6.6269465 0.19383781,6.1810068 0.03130227,5.848796 -0.00591238,5.264098 0.11274166,4.9068641 0.213898,4.6023109 0.47604302,4.3179558 0.77734574,4.185952 1.0398697,4.0709375 0.80340169,4.0867717 4.7744555,3.9182992 5.976151,3.8673171 7.0635253,3.826237 7.1908429,3.8270101 l 0.2314864,0.00141 0.019031,-0.7996287 C 7.4629734,2.1206682 7.5349562,1.7976661 7.7660787,1.5717008 8.032692,1.3110371 8.4521772,1.30141 8.7156619,1.5499082 8.9666863,1.7866546 9.0281622,2.0860378 9.0193383,3.0287871 l -0.00748,0.7996287 0.10061,0 c 0.055335,0 0.597001,0.030881 1.2037007,0.068624 0.606701,0.037743 1.812622,0.087519 2.679825,0.1106143 1.634353,0.043525 1.913413,0.071605 2.267465,0.2281636 0.397884,0.1759397 0.60142,0.457442 0.678985,0.9390798 0.149002,0.9252186 -0.384267,1.5971532 -1.482341,1.8677908 -0.681898,0.1680644 -1.166336,0.201529 -3.666095,0.2532485 C 9.7315791,7.3179188 8.8469289,7.3525418 8.828119,7.3728778 8.809308,7.3932138 8.770308,7.8761142 8.741451,8.4459904 8.712595,9.0158666 8.649516,10.09762 8.6012763,10.849887 c -0.048239,0.752267 -0.087708,1.442602 -0.087708,1.534077 l 0,0.166319 0.9122525,0.05203 c 1.1444062,0.06528 1.5189542,0.160736 1.7416902,0.443899 0.131024,0.16657 0.129365,0.550465 -0.0034,0.786688 -0.17615,0.313416 -0.263763,0.332516 -1.5978141,0.348326 l -1.1772215,0.01395 -0.028158,0.176087 c -0.04246,0.265541 -0.2963875,0.360585 -0.4780415,0.178931 z"
+       id="path3051"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2.svg	(revision 42196)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9628"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 116">
+  <defs
+     id="defs9630" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.8481082"
+     inkscape:cx="-14.048939"
+     inkscape:cy="5.0122674"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9633">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.94117647;stroke-opacity:1"
+       id="rect3056-7"
+       width="15.058824"
+       height="15.058824"
+       x="0.47058821"
+       y="0.47058821" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2.svg	(revision 42196)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9889"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 131">
+  <defs
+     id="defs9891" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9894">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.94117647;stroke-opacity:1"
+       id="rect3074-2"
+       width="15.058824"
+       height="15.058824"
+       x="0.47058821"
+       y="0.47058821"
+       rx="2.8235295" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/carretera-nacional.svg.gvssty
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/carretera-nacional.svg.gvssty
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1_sel.svg	(revision 42196)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9333"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Triangle 1.svg">
+  <defs
+     id="defs9335" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="31.392433"
+     inkscape:cx="12.66197"
+     inkscape:cy="8.2987201"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9338">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1"
+       id="path3070"
+       sodipodi:sides="3"
+       sodipodi:cx="193.11055"
+       sodipodi:cy="-19.388611"
+       sodipodi:r1="16.360126"
+       sodipodi:r2="8.1800623"
+       sodipodi:arg1="0.5485494"
+       sodipodi:arg2="1.595747"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 207.07035,-10.857623 -14.16388,-0.353472 -14.16387,-0.35347 7.38805,-12.08954 7.38805,-12.08954 6.77583,12.443012 z"
+       inkscape:transform-center-x="0.00064665227"
+       inkscape:transform-center-y="-2.3095583"
+       transform="matrix(0.56446761,-0.01401176,0.0140074,0.56464334,-100.73242,23.963027)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03185481;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 0.13719149,14.730044 C 0.19595282,14.629303 1.981394,11.536599 4.1048384,7.8573685 6.2282833,4.1781379 7.9756126,1.1573836 7.9877933,1.1445812 c 0.015147,-0.01592 7.7453757,13.3332328 7.9593037,13.7447368 0.0068,0.01314 -3.571642,0.02389 -7.9521619,0.02389 l -7.96458239,0 0.10683878,-0.183165 0,0 z"
+       id="path5055"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2_sel.svg	(revision 42196)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9685"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Triangle 2.svg">
+  <defs
+     id="defs9687" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="4.3866281"
+     inkscape:cy="2.6684057"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9690">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3070-2"
+       sodipodi:sides="3"
+       sodipodi:cx="193.11055"
+       sodipodi:cy="-19.388611"
+       sodipodi:r1="16.360126"
+       sodipodi:r2="8.1800623"
+       sodipodi:arg1="0.5485494"
+       sodipodi:arg2="1.595747"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 207.07035,-10.857623 -14.16388,-0.353472 -14.16387,-0.35347 7.38805,-12.08954 7.38805,-12.08954 6.77583,12.443012 z"
+       inkscape:transform-center-x="-0.0095350151"
+       inkscape:transform-center-y="-2.3891145"
+       transform="matrix(0.50984193,-0.01674065,0.0138891,0.58749679,-90.196097,25.012659)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.5895232,8.2300617 c 1.8348184,-3.6882686 3.3496521,-6.7197911 3.366297,-6.7367168 0.016645,-0.016926 1.5476127,2.9796853 3.4021508,6.6591357 1.854538,3.6794504 3.364823,6.6962264 3.356188,6.7039454 -0.0086,0.0077 -3.040818,0.02878 -6.7381841,0.04681 l -6.7224854,0.03277 3.3360337,-6.7059423 z"
+       id="path3022"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Med Yellow.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Med Yellow.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3_sel.svg	(revision 42196)
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg10068"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Triangle 3.svg">
+  <defs
+     id="defs10070" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata10073">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3070-2-9"
+       sodipodi:sides="3"
+       sodipodi:cx="193.11055"
+       sodipodi:cy="-19.388611"
+       sodipodi:r1="16.360126"
+       sodipodi:r2="8.1800623"
+       sodipodi:arg1="0.5485494"
+       sodipodi:arg2="1.595747"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 207.07035,-10.857623 -14.16388,-0.353472 -14.16387,-0.35347 7.38805,-12.08954 7.38805,-12.08954 6.77583,12.443012 z"
+       inkscape:transform-center-x="-0.016708589"
+       inkscape:transform-center-y="-2.0767927"
+       transform="matrix(-0.26836373,-0.43522408,0.43522408,-0.26836373,68.376246,89.249808)" />
+    <rect
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.82187068;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3954-3"
+       width="3.7057979"
+       height="3.7057979"
+       x="-13.648422"
+       y="-0.086942852"
+       rx="2.8669908"
+       transform="matrix(-0.52485406,-0.85119223,0.85119223,-0.52485406,0,0)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.4007598,14.293404 c 0.00963,-0.02557 1.5162227,-2.664953 3.3479859,-5.8652922 L 8.0792241,2.6093133 8.1575859,2.7345824 C 8.4537093,3.2079637 14.864618,14.250795 14.85114,14.264272 c -0.0093,0.0093 -3.043423,0.03016 -6.7424265,0.0463 -4.6159322,0.02013 -6.7199698,0.01475 -6.7079537,-0.01716 l 0,0 z M 8.22801,11.333755 C 8.6333289,11.225837 8.9383596,11.057294 9.241408,10.773807 9.7228972,10.323398 9.9704901,9.744329 9.9620001,9.0884907 9.9455688,7.8192046 8.9606384,6.8467327 7.6915226,6.8467327 c -1.6987903,0 -2.7918347,1.7707082 -2.0313735,3.2907803 0.4622988,0.924082 1.5998065,1.453991 2.5678609,1.196242 l 0,0 z"
+       id="path3082"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Contour Topo, Intermediate.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Contour Topo, Intermediate.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 6.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 6.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1_sel.svg	(revision 42196)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3220"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Star 1.svg">
+  <defs
+     id="defs3222" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="37.3125"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3225">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.006718572"
+       inkscape:transform-center-y="-0.76362005"
+       transform="matrix(0.44595779,0,0,0.46847646,-189.83868,31.289725)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.02680067;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.2264587,15.561102 c 0.00755,-0.03278 0.2127276,-1.259594 0.4559534,-2.726261 C 3.9256378,11.368174 4.1299747,10.144054 4.1364939,10.114573 4.1456959,10.07296 3.7204444,9.6203814 2.2352219,8.0911223 1.1830031,7.0077052 0.33645918,6.1184563 0.35401322,6.1150137 0.37156725,6.1115712 1.5616241,5.9332637 2.9985839,5.7187749 4.4355439,5.504286 5.6186656,5.320168 5.6277432,5.3096239 5.6368209,5.2990794 6.1714235,4.1748744 6.8157491,2.8113903 7.4600745,1.4479062 7.9960898,0.32334209 8.0068942,0.31235894 8.0176986,0.30137579 8.5566478,1.4285063 9.2045591,2.8170935 l 1.1780209,2.5247038 2.519263,0.3924443 c 1.385594,0.2158446 2.57795,0.4012208 2.649679,0.4119475 l 0.130417,0.019503 -0.506001,0.5138037 c -0.2783,0.2825921 -1.143739,1.1622708 -1.923198,1.9548417 l -1.417197,1.4410375 0.443793,2.766668 c 0.244087,1.521667 0.439346,2.771125 0.433909,2.776572 -0.0054,0.0054 -1.067906,-0.578283 -2.361045,-1.297181 C 8.2408153,13.147646 7.9940178,13.017032 7.9321785,13.04067 7.8778305,13.06144 3.6514809,15.369919 3.3001694,15.57072 l -0.087435,0.04998 0.013725,-0.05959 0,0 z"
+       id="path4701"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3564"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 29">
+  <defs
+     id="defs3566" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3569">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.27523258,0,0,0.53174859,-109.61375,-67.055823)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/placa-calle.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/placa-calle.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/placa-calle.svg	(revision 42196)
@@ -0,0 +1,894 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="200"
+   height="100"
+   id="svg2"
+   viewBox="0 0 200 100"
+   sodipodi:version="0.34"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/home/paco/Symbolos Background/modificados/"
+   sodipodi:docname="/home/paco/Symbolos Background/modificados/placa carrer.svg"
+   version="1.0"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="256"
+     inkscape:cx="20.511373"
+     inkscape:cy="64.587689"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     width="200px"
+     height="100px"
+     inkscape:window-width="1273"
+     inkscape:window-height="959"
+     inkscape:window-x="0"
+     inkscape:window-y="31" />
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4782">
+      <stop
+         style="stop-color:#776201;stop-opacity:1;"
+         offset="0"
+         id="stop4784" />
+      <stop
+         id="stop4790"
+         offset="0.5"
+         style="stop-color:#eac102;stop-opacity:1;" />
+      <stop
+         style="stop-color:#776201;stop-opacity:1;"
+         offset="1"
+         id="stop4786" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4476">
+      <stop
+         style="stop-color:#403800;stop-opacity:1;"
+         offset="0"
+         id="stop4478" />
+      <stop
+         id="stop3321"
+         offset="0.5"
+         style="stop-color:#c8af00;stop-opacity:1;" />
+      <stop
+         style="stop-color:#403900;stop-opacity:1;"
+         offset="1"
+         id="stop4480" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9301"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,112)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9303"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,112)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9776"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,112)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <radialGradient
+       gradientTransform="translate(-44,-30)"
+       gradientUnits="userSpaceOnUse"
+       r="208"
+       fy="568"
+       fx="-184"
+       cy="568"
+       cx="-184"
+       id="radialGradient6724"
+       xlink:href="#linearGradient6714"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient36935">
+      <stop
+         id="stop36937"
+         offset="0"
+         style="stop-color:#7b0916;stop-opacity:1;" />
+      <stop
+         id="stop36939"
+         offset="1"
+         style="stop-color:#ce1126;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6714"
+       inkscape:collect="always">
+      <stop
+         id="stop6716"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop6718"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12639">
+      <stop
+         id="stop12641"
+         offset="0"
+         style="stop-color:#403800;stop-opacity:1;" />
+      <stop
+         id="stop12643"
+         offset="1"
+         style="stop-color:#c8b200;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,1052.1168)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9411"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,869.35766)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9409"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,565.35766)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9407"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,259.35766)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9405"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9403"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(563,278)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9401"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,112)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9397"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="927.11957"
+       x2="416.10303"
+       y1="927.11957"
+       x1="133.89697"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9395"
+       xlink:href="#linearGradient36935"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="927.11957"
+       x2="416.10303"
+       y1="927.11957"
+       x1="133.89697"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8551"
+       xlink:href="#linearGradient36935"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,112)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8549"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="773.11957"
+       x2="416.10303"
+       y1="773.11957"
+       x1="133.89697"
+       gradientTransform="translate(0,204)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8153"
+       xlink:href="#linearGradient36935"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3649">
+      <stop
+         id="stop3651"
+         offset="0"
+         style="stop-color:#3c030b;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ad1518;stop-opacity:1;"
+         offset="0.5"
+         id="stop16346" />
+      <stop
+         id="stop3654"
+         offset="1"
+         style="stop-color:#3b040a;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(563,278)"
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient40949"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3640">
+      <stop
+         id="stop3642"
+         offset="0"
+         style="stop-color:#403800;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c8af00;stop-opacity:1;"
+         offset="0.5"
+         id="stop3644" />
+      <stop
+         id="stop3646"
+         offset="1"
+         style="stop-color:#403900;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,1052.1168)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient47099"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,869.35766)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient46595"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,565.35766)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient44244"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(0,259.35766)"
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient42755"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient41330"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3649"
+       id="linearGradient5494"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,204)"
+       x1="133.89697"
+       y1="773.11957"
+       x2="416.10303"
+       y2="773.11957" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3649"
+       id="linearGradient7595"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,204)"
+       x1="133.89697"
+       y1="773.11957"
+       x2="416.10303"
+       y2="773.11957" />
+    <linearGradient
+       id="linearGradient3117">
+      <stop
+         id="stop3119"
+         offset="0"
+         style="stop-color:#7b0916;stop-opacity:1;" />
+      <stop
+         id="stop3121"
+         offset="1"
+         style="stop-color:#ce1126;stop-opacity:1;" />
+    </linearGradient>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 172.5,842 C 172.5,842 185.5,840.5 210,843 C 229.06477,844.94538 244,849.5 244,849.5"
+       id="path39567"
+       sodipodi:nodetypes="csc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.05395389px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 291.02698,853.97302 C 291.02698,853.97302 310.00948,846.51197 334.57507,844.52236 C 359.14067,842.53275 381.47302,844.52236 381.47302,844.52236"
+       id="path39572" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient4117"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,112)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient4119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,112)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4782"
+       id="linearGradient6687"
+       gradientUnits="userSpaceOnUse"
+       x1="489.23758"
+       y1="332.13019"
+       x2="810.76239"
+       y2="332.13019" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4782"
+       id="linearGradient6689"
+       gradientUnits="userSpaceOnUse"
+       x1="489.23758"
+       y1="332.13019"
+       x2="810.76239"
+       y2="332.13019" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4782"
+       id="linearGradient6691"
+       gradientUnits="userSpaceOnUse"
+       x1="489.23758"
+       y1="332.13019"
+       x2="810.76239"
+       y2="332.13019" />
+    <linearGradient
+       y2="332.13019"
+       x2="810.76239"
+       y1="332.13019"
+       x1="489.23758"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9386"
+       xlink:href="#linearGradient4782"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="332.13019"
+       x2="810.76239"
+       y1="332.13019"
+       x1="489.23758"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9384"
+       xlink:href="#linearGradient4782"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="332.13019"
+       x2="810.76239"
+       y1="332.13019"
+       x1="489.23758"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9382"
+       xlink:href="#linearGradient4782"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,112)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9380"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,112)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9378"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <path
+       id="path9376"
+       d="M 291.02698,853.97302 C 291.02698,853.97302 310.00948,846.51197 334.57507,844.52236 C 359.14067,842.53275 381.47302,844.52236 381.47302,844.52236"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.05395389px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="csc"
+       id="path9374"
+       d="M 172.5,842 C 172.5,842 185.5,840.5 210,843 C 229.06477,844.94538 244,849.5 244,849.5"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <linearGradient
+       id="linearGradient9368">
+      <stop
+         style="stop-color:#7b0916;stop-opacity:1;"
+         offset="0"
+         id="stop9370" />
+      <stop
+         style="stop-color:#ce1126;stop-opacity:1;"
+         offset="1"
+         id="stop9372" />
+    </linearGradient>
+    <linearGradient
+       y2="773.11957"
+       x2="416.10303"
+       y1="773.11957"
+       x1="133.89697"
+       gradientTransform="translate(0,204)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9366"
+       xlink:href="#linearGradient3649"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="773.11957"
+       x2="416.10303"
+       y1="773.11957"
+       x1="133.89697"
+       gradientTransform="translate(0,204)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9364"
+       xlink:href="#linearGradient3649"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9362"
+       gradientUnits="userSpaceOnUse"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9360"
+       gradientUnits="userSpaceOnUse"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196"
+       gradientTransform="translate(0,259.35766)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9358"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,565.35766)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,869.35766)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9354"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1052.1168)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       id="linearGradient9346">
+      <stop
+         style="stop-color:#403800;stop-opacity:1;"
+         offset="0"
+         id="stop9348" />
+      <stop
+         id="stop9350"
+         offset="0.5"
+         style="stop-color:#c8af00;stop-opacity:1;" />
+      <stop
+         style="stop-color:#403900;stop-opacity:1;"
+         offset="1"
+         id="stop9352" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9344"
+       gradientUnits="userSpaceOnUse"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196"
+       gradientTransform="translate(563,278)" />
+    <linearGradient
+       id="linearGradient9336">
+      <stop
+         style="stop-color:#3c030b;stop-opacity:1;"
+         offset="0"
+         id="stop9338" />
+      <stop
+         id="stop9340"
+         offset="0.5"
+         style="stop-color:#ad1518;stop-opacity:1;" />
+      <stop
+         style="stop-color:#3b040a;stop-opacity:1;"
+         offset="1"
+         id="stop9342" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient36935"
+       id="linearGradient9334"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,204)"
+       x1="133.89697"
+       y1="773.11957"
+       x2="416.10303"
+       y2="773.11957" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9332"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,112)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient36935"
+       id="linearGradient9330"
+       gradientUnits="userSpaceOnUse"
+       x1="133.89697"
+       y1="927.11957"
+       x2="416.10303"
+       y2="927.11957" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient36935"
+       id="linearGradient9328"
+       gradientUnits="userSpaceOnUse"
+       x1="133.89697"
+       y1="927.11957"
+       x2="416.10303"
+       y2="927.11957" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9326"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,112)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9324"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(563,278)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9322"
+       gradientUnits="userSpaceOnUse"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9320"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,259.35766)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9318"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,565.35766)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9316"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,869.35766)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4476"
+       id="linearGradient9314"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1052.1168)"
+       x1="133.79698"
+       y1="343.1196"
+       x2="416.20303"
+       y2="343.1196" />
+    <linearGradient
+       id="linearGradient9308">
+      <stop
+         style="stop-color:#403800;stop-opacity:1;"
+         offset="0"
+         id="stop9310" />
+      <stop
+         style="stop-color:#c8b200;stop-opacity:1;"
+         offset="1"
+         id="stop9312" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9295">
+      <stop
+         style="stop-color:#7b0916;stop-opacity:1;"
+         offset="0"
+         id="stop9297" />
+      <stop
+         style="stop-color:#ce1126;stop-opacity:1;"
+         offset="1"
+         id="stop9299" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6714"
+       id="radialGradient9293"
+       cx="-184"
+       cy="568"
+       fx="-184"
+       fy="568"
+       r="208"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-44,-30)" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,112)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9291"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,112)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9289"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="343.1196"
+       x2="416.20303"
+       y1="343.1196"
+       x1="133.79698"
+       gradientTransform="translate(0,112)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9287"
+       xlink:href="#linearGradient4476"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient9279">
+      <stop
+         id="stop9281"
+         offset="0"
+         style="stop-color:#403800;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c8af00;stop-opacity:1;"
+         offset="0.5"
+         id="stop9283" />
+      <stop
+         id="stop9285"
+         offset="1"
+         style="stop-color:#403900;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9271">
+      <stop
+         id="stop9273"
+         offset="0"
+         style="stop-color:#776201;stop-opacity:1;" />
+      <stop
+         style="stop-color:#eac102;stop-opacity:1;"
+         offset="0.5"
+         id="stop9275" />
+      <stop
+         id="stop9277"
+         offset="1"
+         style="stop-color:#776201;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4782"
+       id="linearGradient12458"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-50,5.9489161)"
+       x1="489.23758"
+       y1="332.13019"
+       x2="810.76239"
+       y2="332.13019" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4782"
+       id="linearGradient12460"
+       gradientUnits="userSpaceOnUse"
+       x1="489.23758"
+       y1="332.13019"
+       x2="810.76239"
+       y2="332.13019" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4782"
+       id="linearGradient12462"
+       gradientUnits="userSpaceOnUse"
+       x1="489.23758"
+       y1="332.13019"
+       x2="810.76239"
+       y2="332.13019" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4782"
+       id="linearGradient14266"
+       gradientUnits="userSpaceOnUse"
+       x1="489.23758"
+       y1="332.13019"
+       x2="810.76239"
+       y2="332.13019" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g5299"
+     transform="translate(-654.7846,-69.41898)"
+     style="font-size:12;" />
+  <g
+     id="g9393"
+     transform="translate(-1789.162,99.65567)"
+     style="font-size:12;" />
+  <rect
+     style="font-size:12;fill:#0000ff;stroke:#c20000;stroke-width:0;"
+     id="rect5603"
+     width="199.98624"
+     height="99.97979"
+     x="71.567688"
+     y="69.418976"
+     transform="translate(-71.56769,-69.41898)" />
+  <rect
+     style="font-size:12;fill:#ffffff;stroke:#c20000;stroke-width:0;"
+     id="rect5605"
+     width="193.71567"
+     height="93.535187"
+     x="74.364105"
+     y="72.372719"
+     ry="11.81498"
+     transform="translate(-71.56769,-69.41898)" />
+  <rect
+     style="font-size:12;fill:#0000ff;stroke-width:0;"
+     id="rect5607"
+     width="189.81738"
+     height="89.507423"
+     x="76.228378"
+     y="74.25238"
+     ry="10.382861"
+     rx="9.1519117"
+     transform="translate(-71.56769,-69.41898)" />
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2_sel.svg	(revision 42196)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3265"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Star 2.svg">
+  <defs
+     id="defs3267" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="37.3125"
+     inkscape:cx="4.3283082"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3270">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-5"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0067283124"
+       inkscape:transform-center-y="-0.76361922"
+       transform="matrix(0.44595779,0,0,0.46847646,-189.83868,31.289725)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.02680067;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 10.087945,13.728668 C 8.9382906,13.088099 7.9794967,12.56928 7.9572912,12.575737 c -0.022205,0.0065 -0.9750467,0.525239 -2.1174252,1.152849 -1.1423786,0.627611 -2.0804297,1.131426 -2.084558,1.11959 -0.00413,-0.01184 0.1737611,-1.108627 0.3953099,-2.437313 0.2215488,-1.328685 0.4028159,-2.4339909 0.4028159,-2.4562344 0,-0.022243 -0.762814,-0.8258399 -1.6951424,-1.7857699 C 1.9259631,7.2089289 1.1672362,6.4158247 1.1722316,6.4064056 1.177227,6.3969863 2.2358412,6.2315701 3.5247075,6.0388138 4.8135737,5.8460578 5.8784201,5.6772135 5.8910325,5.6636044 5.9036452,5.6499956 6.3825444,4.6469012 6.9552536,3.4345059 7.5279627,2.2221106 8.0039418,1.2301508 8.0129852,1.2301508 c 0.00904,0 0.4844762,1.0040201 1.0565175,2.2311557 0.572041,1.2271357 1.0411983,2.2326556 1.0425723,2.2344885 0.0014,0.00183 1.063295,0.1681581 2.359826,0.3696115 1.29653,0.2014534 2.362359,0.3713104 2.368509,0.3774598 0.0061,0.00615 -0.667989,0.7021358 -1.498084,1.5466361 -0.830095,0.8445007 -1.602859,1.6319381 -1.717253,1.7498611 l -0.207989,0.2144053 0.386487,2.4120602 c 0.212568,1.326633 0.391198,2.439196 0.396955,2.472362 0.0058,0.03317 0.0031,0.05914 -0.0059,0.05772 -0.009,-0.0014 -0.957011,-0.526679 -2.106664,-1.167248 l 0,0 z"
+       id="path4759"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3_sel.svg	(revision 42196)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3310"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Star 3.svg">
+  <defs
+     id="defs3312" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="37.3125"
+     inkscape:cx="4.3283082"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3315">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-1"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0067283124"
+       inkscape:transform-center-y="-0.76361922"
+       transform="matrix(0.44595779,0,0,0.46847646,-189.83868,31.289725)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.02680067;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 10.091466,13.730766 C 8.9437491,13.090604 7.995223,12.566834 7.9836307,12.566834 c -0.011593,0 -0.9660186,0.518443 -2.1209469,1.152096 -1.1549285,0.633652 -2.1032475,1.142112 -2.1073758,1.12991 -0.00413,-0.0122 0.1737611,-1.109291 0.3953099,-2.437977 0.2215488,-1.328685 0.4028159,-2.4331665 0.4028159,-2.4544026 0,-0.021236 -0.762814,-0.8245145 -1.6951424,-1.785064 C 1.9259631,7.210847 1.1658463,6.4169187 1.1691429,6.4071113 1.1724395,6.3973041 2.2312911,6.2313327 3.5221463,6.0382864 4.8130015,5.8452401 5.8788996,5.6763958 5.8908084,5.663077 5.9027176,5.6497581 6.3794956,4.6499162 6.9503153,3.441206 7.521135,2.2324958 7.9962584,1.235633 8.0061448,1.2259554 c 0.00989,-0.00968 0.4883276,0.9922759 1.0632019,2.2265634 l 1.0452263,2.244159 2.358459,0.3668851 c 1.297152,0.2017868 2.369008,0.3666675 2.381902,0.3664013 0.01289,-2.68e-4 -0.625605,0.659818 -1.418884,1.4668532 -0.79328,0.8070352 -1.571965,1.6 -1.730411,1.7621441 l -0.288085,0.2948073 0.385322,2.3986602 c 0.211927,1.319263 0.391821,2.431826 0.399765,2.472362 0.0079,0.04054 0.0057,0.07285 -0.005,0.0718 -0.01069,-0.001 -0.958472,-0.525666 -2.106189,-1.165829 l 0,0 z"
+       id="path4817"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3672"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 35">
+  <defs
+     id="defs3674" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3677">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9-1-4"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.27523258,0,0,0.53174859,-109.61375,-67.055823)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4_sel.svg	(revision 42196)
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3356"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Star 4.svg">
+  <defs
+     id="defs3358" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3361">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-2"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0067244289"
+       inkscape:transform-center-y="-0.76361918"
+       transform="matrix(0.44595809,0,0,0.46847661,-189.83881,31.289733)" />
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-58-5"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0020955704"
+       inkscape:transform-center-y="-0.23728245"
+       transform="matrix(0.13857681,0,0,0.1455742,-53.476341,15.23704)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 10.157871,13.75417 C 9.0676733,13.14515 8.1250124,12.627255 8.0630693,12.60329 7.9636743,12.56484 7.7079576,12.69297 5.8859961,13.69418 4.7505486,14.318134 3.8101171,14.817213 3.7961481,14.803244 3.7821791,14.789274 3.9463783,13.707943 4.1610352,12.400284 4.3756921,11.092626 4.5498989,9.9923144 4.5481614,9.9551485 4.5464239,9.9179827 3.7861005,9.1070916 2.8585538,8.1531683 1.2456067,6.4943541 1.1774697,6.4174253 1.2951863,6.3880818 1.3628809,6.3712077 2.4116089,6.2108846 3.6256931,6.0318083 4.8397772,5.8527324 5.8533911,5.6908492 5.8781683,5.6720678 5.9029456,5.6532865 6.3884148,4.6530216 6.9569891,3.449257 7.5255634,2.2454923 8.0019619,1.2609533 8.0156525,1.2613925 8.029343,1.2618318 8.5056046,2.2618966 9.0740113,3.4837588 L 10.107478,5.7053265 12.38515,6.057769 c 1.252719,0.1938435 2.313127,0.3649424 2.356461,0.3802196 0.06148,0.021673 -0.296342,0.4092711 -1.628384,1.7639026 l -1.707175,1.7361259 0.375435,2.3398779 c 0.206489,1.286933 0.386336,2.395626 0.399659,2.463763 0.01332,0.06814 0.0095,0.122972 -0.0084,0.121853 -0.01796,-0.0011 -0.924641,-0.500322 -2.014839,-1.109341 z M 7.3775744,9.9259961 c 0.329129,-0.1821843 0.6053397,-0.3312436 0.6138018,-0.3312436 0.00846,0 0.3445557,0.1835483 0.7468753,0.4078845 0.4023196,0.224337 0.7379861,0.40139 0.7459252,0.39345 0.00794,-0.0079 -0.048363,-0.4057949 -0.125116,-0.8841238 L 9.2195095,8.6422735 9.8216507,8.0388908 C 10.152828,7.70703 10.41464,7.4274001 10.403455,7.4174905 10.384992,7.401133 8.8815288,7.1620792 8.7971168,7.1620792 c -0.019741,0 -0.1980453,-0.3542603 -0.396232,-0.7872451 C 8.2026976,5.9418489 8.0236744,5.5927076 8.0030553,5.598964 7.9824366,5.6052204 7.8027805,5.956217 7.6038198,6.3789571 L 7.2420732,7.1475746 6.5375958,7.2491928 C 6.1501335,7.3050825 5.772302,7.3656151 5.6979703,7.3837093 L 5.5628218,7.416608 6.1668005,8.0319365 6.7707792,8.6472645 6.6466606,9.4025681 C 6.5783958,9.817985 6.5114536,10.215662 6.4979009,10.286296 l -0.024642,0.128424 0.1529498,-0.07874 c 0.084122,-0.04331 0.4222369,-0.2278 0.7513658,-0.4099839 l 0,0 z"
+       id="path4877"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5_sel.svg	(revision 42196)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3410"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Star 5.svg">
+  <defs
+     id="defs3412" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3415">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99958342;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3054-2-4-4"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.85123193,0,0,0.7831334,-29.959669,-6.8801903)" />
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-58"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0021179412"
+       inkscape:transform-center-y="-0.22879125"
+       transform="matrix(0.14036485,0,0,0.14036485,-54.269562,14.978064)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 7.4999505,15.130584 C 4.6441788,14.939784 2.1549464,13.021096 1.2238814,10.29302 0.79792401,9.044939 0.73748082,7.511162 1.0641032,6.2385643 1.7111109,3.7176697 3.7176697,1.7111109 6.2385644,1.0641031 7.1790661,0.82271584 8.5153731,0.79130517 9.4370793,0.98892017 12.375672,1.6189584 14.597636,3.9494067 15.066431,6.893117 c 0.09367,0.5881578 0.09743,1.6332549 0.0079,2.1850199 -0.258817,1.5944461 -0.966639,2.9568111 -2.107059,4.0555151 -1.497285,1.442515 -3.3943679,2.135427 -5.4672835,1.996932 l 0,0 z M 8.7349814,9.9250672 C 9.1407986,10.140814 9.4824274,10.307738 9.494157,10.296008 9.5058861,10.284279 9.4521524,9.9055522 9.3747479,9.4543931 L 9.2340132,8.6341047 9.8480109,8.0463888 C 10.563395,7.3616264 10.592153,7.4397747 9.5722278,7.2969781 9.2005694,7.2449433 8.8641518,7.1929354 8.824633,7.181405 8.7849115,7.169816 8.5935318,6.8289458 8.3966627,6.4191385 8.2007978,6.0114225 8.0254598,5.6772984 8.0070228,5.6766407 7.9885858,5.675983 7.8087315,6.00487 7.6073467,6.4075 7.4059615,6.8101299 7.223679,7.1507096 7.2022742,7.1643434 c -0.021405,0.013634 -0.388902,0.072232 -0.8166606,0.1302192 -0.4277581,0.057987 -0.7929474,0.113914 -0.8115312,0.1242821 -0.018584,0.010368 0.241327,0.2862621 0.5775797,0.6130972 l 0.6113686,0.5942462 -0.138347,0.776135 c -0.076091,0.4268742 -0.138347,0.8078939 -0.138347,0.8467109 0,0.05123 0.2070313,-0.03724 0.7553977,-0.3228289 l 0.7553978,-0.3934047 0.7378492,0.3922668 0,0 z"
+       id="path4937"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6_sel.svg	(revision 42196)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3465"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Star 6.svg">
+  <defs
+     id="defs3467" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3470">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99958342;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3054-2-4-4-5"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.85123193,0,0,0.7831334,-29.959669,-6.8801903)" />
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4015-58-6"
+       sodipodi:sides="5"
+       sodipodi:cx="443.61139"
+       sodipodi:cy="-48.083752"
+       sodipodi:r1="17.219879"
+       sodipodi:r2="8.6099396"
+       sodipodi:arg1="0.94531129"
+       sodipodi:arg2="1.5736298"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 453.69347,-34.123953 -10.10648,-5.349894 -10.13663,5.292535 1.96498,-11.265035 -8.16589,-8.005023 11.3209,-1.612281 5.08983,-10.239911 5.03172,10.26859 11.31158,1.676411 -8.21112,7.958618 z"
+       inkscape:transform-center-x="-0.0021179412"
+       inkscape:transform-center-y="-0.22879121"
+       transform="matrix(0.14036485,0,0,0.14036485,-54.269562,14.978064)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 7.7026733,15.14762 C 5.1350313,15.053392 2.7426584,13.492538 1.5902329,11.159686 1.0870969,10.141189 0.85494195,9.1381406 0.85538847,7.9847179 0.85690819,4.0590837 4.0590837,0.85690816 7.9847179,0.85538844 9.1381406,0.85494191 10.141189,1.0870969 11.159686,1.5902329 c 1.879241,0.9283422 3.265928,2.6452405 3.771518,4.6696286 0.162437,0.6504013 0.207646,1.0328401 0.207329,1.7538678 -8.51e-4,1.9350578 -0.714332,3.6465067 -2.096314,5.0284897 -1.440075,1.440074 -3.3157787,2.17967 -5.3395457,2.105401 z M 8.7343944,9.9275026 C 9.1390101,10.143434 9.4799276,10.310237 9.4919892,10.298176 9.5040507,10.286114 9.4521952,9.9085124 9.3767548,9.4590602 L 9.2395903,8.6418744 9.8493985,8.0498189 C 10.35578,7.5581792 10.445113,7.4523336 10.376113,7.4257476 10.330412,7.4081391 9.9787996,7.3502204 9.5947525,7.2970399 9.2107055,7.2438589 8.8636608,7.1912127 8.8235415,7.1800481 8.7817545,7.168419 8.5995616,6.8427516 8.3969916,6.4175969 8.2025084,6.0094137 8.0276613,5.6754455 8.0084432,5.6754455 7.9892251,5.6754455 7.8087315,6.00487 7.6073467,6.4075 7.4059615,6.8101299 7.223679,7.1507096 7.2022742,7.1643434 7.1808694,7.1779772 6.8133722,7.2365758 6.3856136,7.2945626 5.9578555,7.3525494 5.5900524,7.410092 5.5682737,7.4224347 5.5464945,7.4347774 5.8059923,7.7106714 6.1449348,8.0355319 L 6.761194,8.6261881 6.6242945,9.3920297 C 6.5489996,9.8132426 6.4871566,10.194788 6.4868655,10.239909 6.486415,10.306766 6.62626,10.24913 7.2425331,9.9284229 l 0.7561965,-0.3935232 0.7356648,0.3926029 0,0 z"
+       id="path4997"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Collector Str.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Collector Str.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Highway Ramp.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Highway Ramp.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question_sel.svg	(revision 42196)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4240"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Question.svg">
+  <defs
+     id="defs4242" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4245">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(0.05228988,0,0,0.04684244,-3.4775502,-2.443245)"
+       id="g1849-1"
+       style="fill:#000000">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#000000;stroke:none"
+         id="path1851-1"
+         d="m 196.963,300.274 49.531,-0.102 0,-38.482 c 0,-10.438 4.866,-20.3 17.886,-28.841 13.019,-8.537 49.364,-25.861 49.364,-71.409 0,-45.55 -38.167,-76.858 -70.25,-83.5 -32.078,-6.642 -66.835,-2.272 -91.5,24.75 -22.087,24.197 -26.741,43.337 -26.741,85.565 l 49.491,0 0,-9.815 c 0,-22.501 2.603,-46.254 34.75,-52.75 17.546,-3.546 33.994,1.958 43.75,11.5 11.16,10.912 11.25,35.5 -6.533,47.743 l -27.896,18.979 c -16.272,10.438 -21.852,22.059 -21.852,39.139 l 0,57.223 z" />
+      <g
+         id="g1853-5"
+         style="fill:#000000">
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#000000;stroke:none"
+           id="path1855-4"
+           d="m 196.638,370.692 0,-51.005 50.212,0 0,51.005 -50.212,0 z" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#000000;stroke:none"
+           id="path1857-5"
+           d="M 221.744,345.19" />
+      </g>
+    </g>
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 6.8558836,10.040149 C 6.8700395,8.4810026 6.872725,8.4400535 6.9781567,8.1756931 7.1580277,7.7246827 7.5572454,7.3754747 8.6261882,6.7341089 9.9503936,5.9395856 10.152323,5.7016589 10.155534,4.9321287 10.156935,4.5960022 10.139898,4.4941537 10.055882,4.3364192 9.8296744,3.9117338 9.3268201,3.589899 8.6564398,3.4407535 7.9634541,3.2865788 6.9821022,3.4478396 6.4586305,3.8019087 5.9013161,4.1788686 5.6937271,4.6712533 5.6450082,5.7317574 l -0.028456,0.6194307 -1.254464,0 -1.254464,0 0,-0.4072209 c 0,-1.370369 0.2872027,-2.2755554 0.9879252,-3.1136772 C 4.7157089,2.0885278 5.3264763,1.6628404 6.1832253,1.3752392 7.2051852,1.0321786 8.6892012,1.0332919 9.7819765,1.3779391 10.983751,1.7569633 12.034392,2.6163347 12.543835,3.6370012 12.778788,4.1077273 12.8835,4.562362 12.882701,5.1082706 12.880745,6.4420205 12.24852,7.350224 10.714929,8.2223067 10.053155,8.5986268 9.6506896,8.9528646 9.5011613,9.2906278 9.4038061,9.5105392 9.3951539,9.5992692 9.3781536,10.552054 l -0.018286,1.024877 -1.115788,0 c -0.6136833,0 -1.180336,0.01291 -1.2592285,0.02869 l -0.1434411,0.02869 0.014474,-1.594158 0,0 z"
+       id="path4188"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 6.8467327,13.739307 0,-1.171287 1.2839109,0 1.2839109,0 0,1.171287 0,1.171287 -1.2839109,0 -1.2839109,0 0,-1.171287 z"
+       id="path4190"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Freeway Ramp.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Freeway Ramp.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Residential Str.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Residential Str.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Arterial Str.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Arterial Str.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Green.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Green.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 5.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 5.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Freeway.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Freeway.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3519"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Diamond 1.svg">
+  <defs
+     id="defs3521" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3524">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.27523258,0,0,0.53174859,-109.61375,-67.055823)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 5.9030818,12.084075 C 4.7537565,9.8631313 3.8135092,8.024497 3.8136435,7.9982205 3.813814,7.9648483 7.3543827,1.0826304 7.9694646,-0.0799354 c 0.017,-0.03213102 0.9242469,1.6727091 2.0976844,3.9418317 1.13725,2.1991478 2.0856,4.0288586 2.107444,4.0660245 0.02861,0.048678 -0.546338,1.199635 -2.056045,4.1158912 -1.1526672,2.226574 -2.1025147,4.055072 -2.1107714,4.063329 -0.00826,0.0083 -0.9553694,-1.802123 -2.1046948,-4.023066 l 0,0 z"
+       id="path4374"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3564"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Diamond 2.svg">
+  <defs
+     id="defs3566" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3569">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.27523258,0,0,0.53174859,-109.61375,-67.055823)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 6.0797245,11.705865 C 5.027334,9.6719083 4.1700886,7.9948662 4.1747348,7.9791038 4.179381,7.9633419 5.0075082,6.3590718 6.0150174,4.4140594 7.0225266,2.469047 7.8811589,0.8109664 7.9230891,0.72943586 L 7.9993259,0.58119852 9.9078214,4.265822 c 1.0496726,2.0265432 1.9086936,3.7053202 1.9089346,3.7306164 4.05e-4,0.043466 -3.7375001,7.3053866 -3.7960308,7.3748276 -0.01516,0.01798 -0.8886102,-1.631445 -1.9410007,-3.665401 l 0,0 z"
+       id="path4432"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3609"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Diamond 3.svg">
+  <defs
+     id="defs3611" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8409507"
+     inkscape:cy="7.9901934"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3614">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.61394787;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9-1"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.24764499,0,0,0.47844946,-97.824883,-59.5327)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 7.7930859,13.607007 C 7.3120695,12.711864 4.9096931,8.0461967 4.9087389,8.0053016 4.9062389,7.8981555 8.0025214,1.9876665 8.0318112,2.0436738 8.3944722,2.7371456 10.972993,7.7364007 11.027649,7.8520261 l 0.07661,0.1620706 -1.5214999,2.9463453 c -0.836825,1.62049 -1.5363826,2.963486 -1.5545724,2.984436 -0.01819,0.02095 -0.1239851,-0.131091 -0.2351008,-0.337871 z"
+       id="path4496"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3672"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Diamond 4.svg">
+  <defs
+     id="defs3674" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8.4841582"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3677">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9-1-4"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.27523258,0,0,0.53174859,-109.61375,-67.055823)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 6.0807671,11.718849 C 5.0339292,9.6939884 4.1774255,8.0199506 4.1774255,7.9987652 c 0,-0.081134 3.8081847,-7.40418229 3.8357358,-7.3760281 0.015979,0.0163287 0.7730223,1.4690203 1.6823186,3.2282035 0.9092961,1.7591831 1.7647671,3.4120387 1.9010471,3.6730123 l 0.247781,0.4744974 -1.8997372,3.6700567 c -1.0448557,2.018532 -1.9134004,3.683973 -1.9300997,3.700982 -0.016699,0.01701 -0.8868661,-1.62578 -1.933704,-3.65064 z"
+       id="path4554"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3723"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Diamond 5.svg">
+  <defs
+     id="defs3725" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3728">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.61394787000000006;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4135-9-1-4-5"
+       sodipodi:sides="4"
+       sodipodi:cx="427.32495"
+       sodipodi:cy="141.14908"
+       sodipodi:r1="14.735343"
+       sodipodi:r2="10.419461"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.3561945"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 427.32495,155.88442 -14.73534,-14.73534 14.73534,-14.73534 14.73534,14.73534 z"
+       transform="matrix(0.26415466,0,0,0.51034609,-104.87988,-64.03488)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 6.484456,11.500155 C 5.6554532,9.9008224 4.9093463,8.457953 4.8264405,8.2937786 L 4.6757028,7.9952797 6.2505201,4.9545458 C 7.1166696,3.2821421 7.8642755,1.8373769 7.9118665,1.7439564 l 0.086529,-0.1698555 1.6541189,3.1948535 c 0.9097656,1.7571695 1.6541196,3.2103143 1.6541196,3.2292103 0,0.035003 -3.1116663,6.0698993 -3.2429383,6.2894903 -0.071794,0.120097 -0.075485,0.113582 -1.5792398,-2.7875 l 0,0 z"
+       id="path4612"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1.svg	(revision 42196)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4023"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 56">
+  <defs
+     id="defs4025" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4028">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:0.98999999;fill:#000000;fill-opacity:1;stroke:none"
+       d="m 4.073996,0 0.01584,0.532024 7.470776,0.04896 L 11.544772,0.04896 4.073988,0 z m 6.756056,0.743992 -6.196088,-0.01376 -2.496576,5.2893761 11.7034,0.07672 -3.010736,-5.3523201 z m -9.230048,5.4415681 0.01584,0.532016 12.784152,0.083792 -0.01584,-0.532024 -12.784152,-0.083784 z m 4.516464,0.729312 C 6.137428,8.4268402 7.41826,12.953552 8.256444,16 c 0,0 1.88584,-7.6046158 1.64472,-9.0603199 l -3.784696,-0.0248 z"
+       id="rect2987"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Major Road.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Major Road.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2.svg	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3876"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 47">
+  <defs
+     id="defs3878" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3881">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.29792276;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 15.837548,5.8729593 0.01349,4.2037437 -5.774358,0.05036 0.05037,5.710485 -4.2037435,0.01349 -0.050365,-5.723993 -5.71048497,0 -0.01349,-4.2037436 5.72398397,0 9e-6,-5.76085875 4.2037435,-0.013491 0,5.77436725 5.760859,-0.050365 z"
+       id="path3207"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9787"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 125">
+  <defs
+     id="defs9789" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="-6.6618157"
+     inkscape:cy="7.0803864"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9792">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3066-8"
+       sodipodi:sides="6"
+       sodipodi:cx="355.19934"
+       sodipodi:cy="-16.286432"
+       sodipodi:r1="14.237102"
+       sodipodi:r2="12.329692"
+       sodipodi:arg1="1.0584069"
+       sodipodi:arg2="1.5820056"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 362.17924,-3.8777226 -14.23621,-0.1595853 -6.9799,-12.4087101 7.25631,-12.249124 14.23621,0.159585 6.9799,12.40871 z"
+       transform="matrix(0.54288053,0,0,0.54288053,-184.83081,16.841587)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4.svg	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3972"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 53">
+  <defs
+     id="defs3974" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3977">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.86679196;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 15.553603,5.9500218 0.013,4.0514462 -5.565159,0.04854 0.04854,5.5036 -4.0514465,0.013 -0.04854,-5.516619 -5.5036,0 -0.013,-4.0514462 5.516611,0 9e-6,-5.55214929 4.0514455,-0.0130019 0,5.56516859 5.552149,-0.04854 z"
+       id="path3207-1"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/globo-de-comic.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/globo-de-comic.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/globo-de-comic.svg	(revision 42196)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--Copyright 2001 The Apache Software Foundation Licensed 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.
+-->
+<!--=========================================================================-->
+<!--GVT under the spot-light!-->
+<!---->
+<!--@author vincent.hardy@eng.sun.com-->
+<!--@version $Id: complex.svg,v 1.1 2005/09/28 11:14:43 fjp Exp $-->
+<!--=========================================================================-->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   contentScriptType="text/ecmascript"
+   zoomAndPan="magnify"
+   sodipodi:docbase="/home/jaume/gvSIG/Styles"
+   baseProfile="full"
+   contentStyleType="text/css"
+   id="svg2755"
+   version="1.0"
+   width="123"
+   preserveAspectRatio="xMidYMid meet"
+   inkscape:version="0.45.1"
+   sodipodi:docname="Text Globe.svg"
+   viewBox="0 0 123 45"
+   height="45"
+   sodipodi:version="0.32"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata2887">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     bordercolor="#666666"
+     inkscape:window-height="804"
+     inkscape:zoom="1.248"
+     id="base"
+     inkscape:current-layer="svg2755"
+     inkscape:window-y="183"
+     inkscape:cy="-68.470981"
+     inkscape:window-x="0"
+     inkscape:cx="84.40096"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1152"
+     pagecolor="#ffffff"
+     borderopacity="1.0" />
+  <defs
+     id="defs2757" />
+  <g
+     id="g3446"
+     transform="matrix(3.129734,0.000000,0.000000,3.129734,-351.7159,-2.378312)">
+    <g
+       style="font-size:12.000000"
+       id="g1761"
+       transform="matrix(0.344216,-0.336555,0.344216,0.336555,114.7027,73.24620)">
+      <g
+         id="g1765" />
+    </g>
+  </g>
+  <text
+     x="206.0"
+     y="213.0"
+     id="text2500">
+    <tspan
+       space="preserve"
+       id="tspan2502" />
+  </text>
+  <polygon
+     points="2.666667,2 120.75,1.75 120.75,32 28.666668,32.666668 14.333334,43.666668 17.375,32.625 2.5,32.75 2.666667,2 "
+     id="polygon2504"
+     transform="matrix(0.9999209,0,0,1.0188927,4.8790769e-3,-2.8381232e-2)"
+     style="fill:#ffff99;stroke:#000000" />
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/dot-orange.png.gvssty
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/dot-orange.png.gvssty
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2.svg	(revision 42196)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4805"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 101">
+  <defs
+     id="defs4807" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4810">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g4621"
+       transform="matrix(0.02413273,0,0,0.02234637,28.195591,-7.8090193)"
+       inkscape:transform-center-x="193.03424"
+       inkscape:transform-center-y="182.80778">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#fafcfc"
+         d="m -1168.3548,707.45356 0,-358.00001 331.49996,0 331.5,0 0,358.00001 0,358.00004 -331.5,0 -331.49996,0 0,-358.00004 z"
+         id="path1877" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#015ba0"
+         d="m -1165.8548,707.45358 0,-358 328.99998,0 328.99999,0 0,358 0,357.99992 -328.99999,0 -328.99998,0 0,-357.99992 z m 644.17123,343.34492 c 1.76484,-1.5971 1.82874,-13.5702 1.82874,-342.67117 0,-315.91592 -0.12181,-341.15087 -1.65499,-342.84501 -1.59661,-1.76424 -12.70644,-1.82874 -314.99999,-1.82874 -312.01169,0 -313.35349,0.009 -315.34499,2 -1.9922,1.99216 -2,3.33333 -2,342.27749 0,306.35923 0.1551,340.49903 1.5567,342.49993 l 1.5567,2.2225 313.61454,0 c 290.41833,0 313.74981,-0.1224 315.44329,-1.655 z m -619.70803,-10.5933 c -0.2613,-0.6884 -0.36,-150.65166 -0.2192,-333.25162 l 0.2559,-332 305.00008,0 304.99999,0 0,333 0,332.99992 -304.78075,0.2517 c -243.30062,0.2008 -304.87662,-9e-4 -305.25602,-1 z m 236.70014,-53.76396 c 21.1762,-2.458 20.7817,-2.3808 34.3366,-6.7188 10.4557,-3.3461 38.97066,-17.05281 51.50004,-24.7552 20.50829,-12.6075 37.17635,-29.1242 53.43555,-52.9505 4.98473,-7.30461 14.56445,-25.61061 14.56445,-27.8312 0,-1.8122 -25.68072,-64.64233 -27.14018,-66.40087 -1.72932,-2.0837 -5.112,-1.21244 -6.47949,1.66891 -0.65257,1.375 -2.65797,6.325 -4.45644,11 -7.14467,18.57206 -23.02325,47.48166 -33.19375,60.43456 -22.55555,28.72629 -44.30408,41.7695 -80.20488,48.1009 -16.9725,2.99319 -22.4071,3.0536 -38.5253,0.42779 -17.0932,-2.78459 -29.0446,-6.82899 -43.2229,-14.6267 -16.33784,-8.98529 -26.93554,-17.99019 -39.23324,-33.33659 -11.657,-14.5467 -21.0334,-36.8647 -24.5777,-58.49996 -2.4584,-15.00708 -2.4662,-23.01907 -0.036,-37.13222 4.8252,-28.02309 12.7682,-44.13976 33.3699,-67.70906 l 4.8,-5.4914 -5.515,-30.68906 c -3.0333,-16.87897 -6.0359,-31.31662 -6.6724,-32.08365 -2.383,-2.87134 -5.4011,-1.45793 -12.5032,5.85539 -16.5409,17.03294 -29.3118,32.98698 -43.1502,53.90567 -10.8734,16.43658 -16.001,28.80293 -19.2163,46.34433 -1.2098,6.6 -2.6216,13.8 -3.1373,16 -1.9847,8.4668 -3.224,41.26939 -1.9987,52.90048 3.4502,32.74818 4.7111,37.58948 15.6491,60.08358 9.7969,20.1474 17.7918,31.03739 36.3614,49.5285 18.5558,18.4774 24.7228,22.7187 51.46114,35.3922 19.4383,9.21339 32.9248,13.37749 50.6215,15.63009 16.1554,2.0563 20.4941,2.5706 23.6634,2.80511 1.1898,0.088 9.9648,-0.7455 19.5,-1.8523 z m 276.7682,-69.8144 c 41.62584,-14.0019 64.79223,-22.26781 65.45052,-23.35291 0.76898,-1.26759 -0.65525,-6.90989 -5.80574,-23 -3.75358,-11.7262 -7.69263,-23.6601 -8.75344,-26.51979 -2.00576,-5.407 -4.75854,-7.4288 -7.27313,-5.3419 -1.4172,1.1762 -76.20324,27.03829 -78.19279,27.0402 -0.62866,6e-4 -1.37152,-0.5614 -1.6508,-1.2489 -38.49343,-94.75795 -65.17894,-159.76169 -66.29755,-161.49542 l -1.44878,-2.24546 -106.20093,-0.25454 -106.20096,-0.25454 -1.3209,-7.9195 c -0.7265,-4.35572 -1.0912,-8.51822 -0.8104,-9.25 0.4191,-1.09215 14.9909,-1.3305 81.342,-1.3305 61.53548,0 81.1178,-0.28646 82.03134,-1.2 1.70979,-1.70979 1.70979,-53.89021 0,-55.6 -0.9148,-0.9148 -21.71809,-1.2 -87.53134,-1.2 -68.1652,0 -86.4235,-0.26303 -86.7689,-1.25 -1.0787,-3.08266 -9.56,-63.15067 -9.0896,-64.37655 0.2899,-0.7554 1.8839,-1.37345 3.5424,-1.37345 7.6585,0 27.1493,-11.0103 35.6705,-20.1502 4.2928,-4.6046 11.203,-16.44363 12.445,-21.32193 0.564,-2.21533 1.511,-5.27005 2.1043,-6.78827 0.5934,-1.51821 1.0328,-7.36821 0.9765,-13 -0.0864,-8.63156 -0.5813,-11.63802 -3.1518,-19.14437 -3.6845,-10.75983 -9.6683,-20.04202 -18.2039,-28.23837 -7.6987,-7.39263 -15.6642,-11.5773 -26.1501,-13.73793 -22.6371,-4.66438 -41.75314,0.76134 -58.15264,16.50556 -13.065,12.54288 -18.0908,23.81534 -19.1413,42.93253 -0.5514,10.03401 -0.3592,12.47197 1.4587,18.5 1.1516,3.81864 10.4742,60.26798 20.7168,125.44298 13.5373,86.13922 19.05374,118.97673 20.20024,120.24571 1.4803,1.63825 8.4772,1.76136 113.6762,2 l 112.09894,0.25429 34.64006,86.49996 c 19.05204,47.575 35.3436,87.7375 36.20348,89.25 0.85989,1.5125 2.37186,2.7155 3.35994,2.6733 0.98808,-0.0422 30.79072,-9.8297 66.22808,-21.75 z"
+         id="path1875" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2.svg	(revision 42196)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9577"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 113">
+  <defs
+     id="defs9579" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="6.6581562"
+     inkscape:cy="11.276299"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9582">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3054-2"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.85121384,0,0,0.78311675,-29.958863,-6.879874)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/dot-orange.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/dot-orange.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4.svg	(revision 42196)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg5099"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 116">
+  <defs
+     id="defs5101" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3054-2-48"
+       sodipodi:cx="44.593803"
+       sodipodi:cy="19.000837"
+       sodipodi:rx="8.9187603"
+       sodipodi:ry="9.6943045"
+       d="m 53.512564,19.000837 a 8.9187603,9.6943045 0 1 1 -17.837521,0 8.9187603,9.6943045 0 1 1 17.837521,0 z"
+       transform="matrix(0.85121384,0,0,0.78311675,-29.958863,-6.879874)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg5207"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 122">
+  <defs
+     id="defs5209" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5212">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(2.2421462,0,0,2.2421462,-0.04488732,-0.04488789)"
+       style="fill-rule:evenodd"
+       id="Layer_x0020_1-6">
+      <metadata
+         id="CorelCorpID_0Corel-Layer-6" />
+      <path
+         inkscape:connector-curvature="0"
+         class="fil0 str0"
+         d="m 0.0200198,3.58804 c 0,-1.9733 1.59618,-3.56802 3.568,-3.56802 1.97182,0 3.56802,1.59746 3.56802,3.56802 0,1.97055 -1.59584,3.568 -3.56802,3.568 -1.97218,0 -3.568,-1.5947 -3.568,-3.568 z m 3.35951,0.208487 -2.93745,0 c 0.10116,1.56755 1.37224,2.83555 2.93745,2.93745 l 0,-2.93745 z m 0.416973,2.93745 c 1.58952,-0.126445 2.82732,-1.34113 2.93747,-2.93745 l -2.93747,0 0,2.93745 z m -0.416973,-3.35443 0,-2.93747 c -1.57,0.124884 -2.85139,1.34856 -2.93745,2.93747 l 2.93745,0 z m 0.416973,0 2.93747,0 c -0.069709,-1.57242 -1.38694,-2.82282 -2.93747,-2.93747 l 0,2.93747 z"
+         id="path9052" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Stacked Multi Roadway Ramp.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Stacked Multi Roadway Ramp.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3272"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 6">
+  <defs
+     id="defs3274" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3277">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(1.6371865,1.5312448,-1.5312448,1.6371865,-219.72128,-212.9954)"
+       style="fill-rule:evenodd"
+       id="Layer_x0020_1-6-0">
+      <metadata
+         id="CorelCorpID_0Corel-Layer-6-5" />
+      <path
+         inkscape:connector-curvature="0"
+         class="fil0 str0"
+         d="m 145.10132,2.6096847 c 0,1.9733 -1.59618,3.56802 -3.568,3.56802 -1.97182,0 -3.56802,-1.59746 -3.56802,-3.56802 0,-1.97055001 1.59584,-3.56800001 3.56802,-3.56800001 1.97218,0 3.568,1.5947 3.568,3.56800001 z m -3.35951,-0.20849 2.93745,0 c -0.10116,-1.56755001 -1.37224,-2.83555001 -2.93745,-2.93745001 l 0,2.93745001 z m -0.41698,-2.93745001 c -1.58952,0.12645 -2.82732,1.34113 -2.93747,2.93745001 l 2.93747,0 0,-2.93745001 z m 0.41698,3.35443001 0,2.93747 c 1.57,-0.12488 2.85139,-1.34856 2.93745,-2.93747 l -2.93745,0 z m -0.41698,0 -2.93747,0 c 0.0697,1.57242 1.38694,2.82282 2.93747,2.93747 l 0,-2.93747 z"
+         id="path9052-7" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 4.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 4.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane.svg	(revision 42196)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4665"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 92">
+  <defs
+     id="defs4667" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4670">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#000000;stroke:none"
+       id="path1972"
+       d="m 0.881543,8.94001 c -1.1809,-0.002 -1.1809,-1.7820701 0.0333,-1.7808901 l 4.9559998,0 4.1700902,-6.93825995 1.83098,0 -2.2725302,6.90495005 3.7040902,0 1.24842,-1.5979601 1.44812,0 -0.7657,2.46345 0.7657,2.4634601 -1.44812,0 -1.24842,-1.58133 -3.7040902,0 2.2725302,6.90571 -1.83098,0 -4.1700902,-6.83913 -4.9892698,0 z" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2.svg	(revision 42196)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg5041"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 113">
+  <defs
+     id="defs5043" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5046">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3418-2"
+       transform="matrix(0.02898387,0,0,0.02719065,-3.1094513,-3.3867105)"
+       style="fill:#000000">
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1540-5"
+         d="m 720.375,594.4375 -546.28125,0 c -1.89326,15.80195 -2.875,31.90764 -2.875,48.21875 0,178.1432 115.27353,329.46877 276.03125,386.56255 160.75775,-57.09374 276.00006,-208.41935 276,-386.56255 0,-16.31111 -0.9808,-32.4168 -2.875,-48.21875 z" />
+      <path
+         inkscape:connector-curvature="0"
+         transform="translate(-63.93662,-316.227)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path1536-8"
+         d="m 447.1875,440.78125 c -38.26419,26.50485 -84.8177,42.15626 -135.09375,42.15625 -35.04504,10e-6 -68.16783,-7.72644 -98.0625,-21.28125 -17.95111,35.86827 -30.66991,74.67395 -37.375,115.5 l 541.15625,0 c -6.70771,-40.82605 -19.46303,-79.63173 -37.40625,-115.5 -29.89941,13.55999 -63.07285,21.28125 -98.125,21.28125 -50.2761,10e-6 -96.8296,-15.65137 -135.09375,-42.15625 z" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2.svg	(revision 42196)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9736"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 122">
+  <defs
+     id="defs9738" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="7.8984575"
+     inkscape:cy="7.8192893"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9741">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path3068-4"
+       sodipodi:sides="5"
+       sodipodi:cx="274.54272"
+       sodipodi:cy="-16.286432"
+       sodipodi:r1="11.633166"
+       sodipodi:r2="9.4114285"
+       sodipodi:arg1="0.92729522"
+       sodipodi:arg2="1.5556137"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 281.52262,-6.9798992 -13.67403,0.207623 -4.42297,-12.9406178 10.94049,-8.205364 11.18456,7.869423 z"
+       inkscape:transform-center-x="0.037763288"
+       inkscape:transform-center-y="-0.73259823"
+       transform="matrix(0.69189049,0,0,0.69189049,-181.91574,20.001025)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 1.svg	(revision 42196)
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4657"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 2">
+  <defs
+     id="defs4659">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath538">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 270.188,684.275 40.085,0 0,39.916 -40.085,0 0,-39.916 z"
+         id="path540" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath544">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 299.373,662.819 c 8.805,0.172 25.366,2.9 25.104,10.071 -0.469,12.891 -23.302,12.016 -28.416,12.016 -18.19,0 -25.866,-8.084 -22.326,-14.083 7.12,-8.36 19.106,-8.134 25.638,-8.004"
+         id="path546" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath492">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 310.069,644.515 40.085,0 0,39.916 -40.085,0 0,-39.916 z"
+         id="path494" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath498">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 299.373,662.819 c 8.805,0.172 25.366,2.9 25.104,10.071 -0.469,12.891 -23.302,12.016 -28.416,12.016 -18.19,0 -25.866,-8.084 -22.326,-14.083 7.12,-8.36 19.106,-8.134 25.638,-8.004"
+         id="path500" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath394">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 270.188,644.515 40.085,0 0,39.916 -40.085,0 0,-39.916 z"
+         id="path396" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath400">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 299.373,662.819 c 8.805,0.172 25.366,2.9 25.104,10.071 -0.469,12.891 -23.302,12.016 -28.416,12.016 -18.19,0 -25.866,-8.084 -22.326,-14.083 7.12,-8.36 19.106,-8.134 25.638,-8.004"
+         id="path402" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.8481082"
+     inkscape:cx="36.743488"
+     inkscape:cy="-4.1654024"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4662">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       id="path422"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 13.228911,14.115688 c 0.607128,0.404211 1.325456,0.814916 1.732914,0.203729 0.408269,-0.611187 0.816539,-2.189884 0.408269,-2.903341 -0.408269,-0.712645 -0.509728,-1.171239 -1.121727,-1.222374 -0.611999,-0.05033 -1.325456,0.917187 -1.325456,1.732102 0,0.814917 0,1.986155 0.306,2.189884"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path442"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 7.9262753,14.217147 c 0.3092457,-0.353076 1.4780498,-1.171239 2.1923177,-1.272697 0.713458,-0.102271 1.223186,0 1.325457,0.560051 0.10227,0.560052 -0.509728,2.189884 -1.121728,2.189884 -0.6119978,0 -2.7531812,-1.06978 -2.3960467,-1.477238"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path444"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 4.8670939,10.143379 c 1.2321139,0.662322 2.5486414,2.138748 2.0389131,2.801071 -0.5097283,0.66151 -2.8554524,1.782425 -2.8554524,1.018644 0,-0.764592 0.1534055,-4.1768486 0.8165393,-3.819715"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path446"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 9.5577301,8.8187354 c 0.5600519,-0.05519 2.0389129,0.764592 1.9374549,1.3749666 -0.10227,0.611188 -1.070592,1.222374 -1.6314557,1.27351 C 9.302866,11.518352 8.2825977,11.518352 8.0277339,10.90716 7.7728698,10.295973 9.0480019,8.8698704 9.5577301,8.8187354"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path448"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 11.698914,6.8325804 c 0.626608,-0.125808 1.529997,-0.6111866 2.09086,-0.4074577 0.560863,0.2037287 1.044619,0.8027407 0.84089,1.3627927 -0.203729,0.560052 -0.790567,1.03082 -1.555159,0.929361 -0.764593,-0.10227 -1.631455,-0.509728 -1.784049,-0.814916 -0.153405,-0.305999 -0.10227,-0.96751 0.407458,-1.06978"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path450"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 14.554367,4.1849157 c 0.509728,0.050323 1.37659,0.3051876 1.223997,0.9163746 C 15.624958,5.7124771 14.554367,5.865071 13.891232,5.5598833 13.228911,5.253884 12.668046,5.253884 13.075505,4.5923736 c 0.40827,-0.662322 0.969133,-0.4585931 1.478862,-0.4074579"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path464"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="M 0.48164516,8.7172764 C 0.99137336,8.4112774 1.502725,8.2586834 1.9093712,8.6150064 2.3176408,8.9721404 3.0310981,10.652295 2.8273691,11.314618 2.6236401,11.976128 1.9093712,13.300772 1.4507782,12.689586 0.99137336,12.078398 -0.53781164,9.3284634 0.48164516,8.7172764"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path466"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="M 5.6828215,6.9859864 C 6.1925498,6.0688 8.2582484,4.7660708 8.9205698,5.1223937 9.583704,5.4795281 9.6088652,6.4762579 8.9457335,7.3423094 8.2826002,8.2075484 6.1925517,9.7359214 5.8865524,8.7684114 5.5805514,7.8000904 5.6828217,6.9859864 5.6828217,6.9859864"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path468"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 10.832051,2.3002198 c 0.590895,-0.186684 1.78486,-0.3051877 1.937454,0.2037289 0.153406,0.5097283 0,1.477238 -0.764592,2.1387484 C 11.240321,5.3050192 10.474917,5.9162062 10.373457,5.253884 10.271187,4.5923736 9.8637293,2.606219 10.832051,2.3002198"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path470"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="M 8.7931378,1.3838452 C 8.4132771,1.0429442 8.0277339,1.1801163 7.2120063,1.7913031 6.3962787,2.4024901 5.2745518,3.6248639 5.7842801,4.1337805 c 0.5097283,0.5089166 0.969133,0.5600517 1.8359959,0 0.8668626,-0.5600518 1.68259,-2.2921538 1.1728618,-2.7499353"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path472"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 1.603372,2.2490846 c 0.5097282,-0.4577815 2.141995,-0.5089166 2.5494529,0 C 4.5610946,2.7588128 4.5099595,3.5225936 3.949096,4.1849157 3.3882326,4.8464261 2.6739636,3.5737287 1.9605064,3.4714584 1.2462375,3.3699998 0.53278026,3.3699998 1.0425086,2.809948 1.5522368,2.2490846 1.603372,2.2490846 1.603372,2.2490846"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path474"
+       style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 3.4896912,5.8139358 c 0.5641101,-0.1404188 0.9179978,0 1.0714034,0.5608634 C 4.7136884,6.9348504 4.8670939,7.8000904 4.3565539,8.1060894 3.8468256,8.4112774 3.2859622,8.2586834 3.1333684,7.5460384 2.9799629,6.8325804 2.8785042,5.9673413 3.4896912,5.8139358"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1.svg	(revision 42196)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4353"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 74">
+  <defs
+     id="defs4355" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4358">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#000000;fill-rule:nonzero"
+       inkscape:connector-curvature="0"
+       d="m 11.827563,3.040065 c 0.538948,-0.36463 3.27205,-2.38722 3.755933,-2.64979 L 16,0.982165 c -0.404764,0.30049 -0.848513,0.66618 -1.33665,1.09446 l -1.721566,1.7296 c -1.177835,1.25694 -2.466906,2.89457 -3.87461,4.92197 -1.403983,2.02258 -2.447104,3.75165 -3.129847,5.18774 l -0.860785,0.57957 c -0.713752,0.49563 -1.197636,0.86827 -1.451605,1.11422 -0.09892,-0.36893 -0.321304,-0.97202 -0.662409,-1.80072 L 2.637457,13.066895 C 2.173377,11.976775 1.740836,11.167295 1.340369,10.651915 0.944198,10.132185 0.495621,9.791125 0,9.628015 c 0.836197,-0.89233 1.606122,-1.33607 2.311856,-1.33607 0.587058,0 1.245746,0.80891 1.975535,2.42729 l 0.360865,0.81268 c 1.368721,-2.30809 3.498773,-4.8862 6.389625,-7.73801 l 0.789682,-0.75384 z"
+       class="fil2"
+       id="_43289992" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 3.svg	(revision 42196)
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg354679"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 3">
+  <defs
+     id="defs354681">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath142024">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 152.65,2261.571 44.289,0 0,-41.121 -44.289,0 0,41.121 z"
+         id="path142026" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.696216"
+     inkscape:cx="8.3188591"
+     inkscape:cy="0.54174451"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="818"
+     inkscape:window-height="691"
+     inkscape:window-x="467"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata354684">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       transform="matrix(0.36185587,0,0,-0.36185587,-55.237299,818.86672)"
+       id="g142020">
+      <g
+         id="g142022"
+         clip-path="url(#clipPath142024)">
+        <g
+           id="g142028"
+           transform="translate(173.466,2252.016)">
+          <path
+             inkscape:connector-curvature="0"
+             d="M 0,0 C 0.582,0 1.054,0.32 1.054,0.715 1.054,1.11 0.582,1.43 0,1.43 -0.582,1.43 -1.054,1.11 -1.054,0.715 -1.054,0.32 -0.582,0 0,0 z m -12.192,-33.752 c 0.582,0 1.054,0.32 1.054,0.715 0,0.395 -0.472,0.715 -1.054,0.715 -0.582,0 -1.054,-0.32 -1.054,-0.715 0,-0.395 0.472,-0.715 1.054,-0.715 z m -1.587,23.293 c 0.582,0 1.054,0.32 1.054,0.715 0,0.395 -0.472,0.715 -1.054,0.715 -0.582,0 -1.054,-0.32 -1.054,-0.715 0,-0.395 0.472,-0.715 1.054,-0.715 z m 16.284,-3.502 c 0.582,0 1.054,0.32 1.054,0.715 0,0.395 -0.472,0.715 -1.054,0.715 -0.582,0 -1.054,-0.32 -1.054,-0.715 0,-0.395 0.472,-0.715 1.054,-0.715 z m -21.725,12.48 c 0.319,0 0.577,0.356 0.577,0.795 0,0.439 -0.258,0.795 -0.577,0.795 -0.319,0 -0.578,-0.356 -0.578,-0.795 0,-0.439 0.259,-0.795 0.578,-0.795 z m 9.42,-22.587 c 0.009,-0.283 0.332,-0.502 0.72,-0.49 0.389,0.013 0.696,0.252 0.687,0.534 -0.009,0.283 -0.331,0.502 -0.72,0.49 -0.388,-0.013 -0.696,-0.252 -0.687,-0.534 z m 24.813,-8.309 c 0.009,-0.283 0.331,-0.502 0.72,-0.49 0.388,0.013 0.696,0.252 0.687,0.534 -0.009,0.283 -0.331,0.502 -0.72,0.49 -0.389,-0.013 -0.696,-0.252 -0.687,-0.534 z M 10.188,5.245 C 9.585,5.087 9.001,5.316 8.885,5.759 8.768,6.201 9.163,6.688 9.766,6.847 10.369,7.006 10.952,6.776 11.069,6.334 11.185,5.892 10.791,5.404 10.188,5.245 z m 5.057,-19.034 c -0.548,0.035 -0.971,0.389 -0.945,0.791 0.026,0.402 0.491,0.699 1.039,0.663 0.548,-0.035 0.971,-0.389 0.945,-0.791 -0.026,-0.402 -0.491,-0.699 -1.039,-0.663 z M -8.334,7.922 c -0.103,0.539 0.134,1.038 0.529,1.113 0.396,0.075 0.8,-0.301 0.902,-0.84 0.103,-0.539 -0.134,-1.037 -0.529,-1.112 -0.396,-0.076 -0.8,0.3 -0.902,0.839 z m 3.657,-16.789 c -0.545,-0.303 -1.167,-0.224 -1.389,0.175 -0.222,0.4 0.04,0.97 0.585,1.273 0.545,0.303 0.932,-0.052 1.154,-0.451 0.222,-0.4 0.196,-0.694 -0.35,-0.997 z M 21.975,1.206 c -0.455,0 -0.823,0.313 -0.823,0.699 0,0.386 0.368,0.7 0.823,0.7 0.454,0 0.822,-0.314 0.822,-0.7 0,-0.386 -0.368,-0.699 -0.822,-0.699 z m -6.944,-3.184 c -0.454,0 -0.823,0.313 -0.823,0.699 0,0.387 0.369,0.7 0.823,0.7 0.454,0 0.823,-0.313 0.823,-0.7 0,-0.386 -0.369,-0.699 -0.823,-0.699 z m -36.894,-12.487 c 0.419,0.043 0.59,0.503 0.569,0.713 -0.022,0.209 -0.256,0.401 -0.676,0.358 -0.419,-0.043 -0.741,-0.248 -0.72,-0.457 0.022,-0.21 0.408,-0.657 0.827,-0.614 z M -9.446,0.326 c 0.08,-0.494 0.346,-0.861 0.593,-0.821 0.247,0.04 0.382,0.473 0.301,0.967 -0.08,0.494 -0.346,0.862 -0.593,0.822 C -9.392,1.253 -9.526,0.82 -9.446,0.326 z"
+             style="fill:none;stroke:#000000;stroke-width:0.40099999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path142030" />
+        </g>
+        <g
+           id="g142032"
+           transform="translate(188.372,2258.514)">
+          <path
+             inkscape:connector-curvature="0"
+             d="m 0,0 0,0 m -2.38,-2.171 0,0 m 5.762,3.549 0,0 m 3.883,-0.501 0,0 m -3.883,-4.259 0,0 m -7.391,-3.382 0,0 m 0.502,-5.637 0,0 m 8.58,2.443 0,0 m -5.115,-3.486 0,0 m 5.929,-5.846 0,0 m 0,-4.092 0,0 m -5.344,-1.002 0,0 m 1.461,-5.929 0,0 m 1.378,-4.76 0,0 m -39.415,-0.918 0,0 m -1.086,-2.84 0,0 m 5.595,2.505 0,0 m 16.493,-1.127 0,0 m 3.632,-2.129 0,0 m -4.634,6.388 0,0 m -3.007,-1.628 0,0 m -4.467,-0.752 0,0 m -5.679,2.756 0,0 m -4.885,2.756 0,0 m 29.52,12.108 0,0 m 1.169,-6.43 0,0 m -4.092,17.203 0,0 m -3.549,-1.712 0,0"
+             style="fill:none;stroke:#000000;stroke-width:0.80199999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path142034" />
+        </g>
+        <g
+           id="g142036"
+           transform="translate(175.914,2228.034)">
+          <path
+             inkscape:connector-curvature="0"
+             d="M 0,0 0,0 M -0.11,0 0,0 m 10.021,1.002 0,0 m -0.11,0 0.11,0"
+             style="fill:none;stroke:#000000;stroke-width:1.00199997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:1.40999997;stroke-opacity:1;stroke-dasharray:none"
+             id="path142038" />
+        </g>
+        <g
+           id="g142040"
+           transform="translate(195.762,2225.07)">
+          <path
+             inkscape:connector-curvature="0"
+             d="m 0,0 c 0.499,0 0.904,0.286 0.904,0.639 0,0.354 -0.405,0.64 -0.904,0.64 -0.499,0 -0.903,-0.286 -0.903,-0.64 C -0.903,0.286 -0.499,0 0,0 z m -14.363,-3.466 c 0.499,0 0.903,0.287 0.903,0.64 0,0.353 -0.404,0.64 -0.903,0.64 -0.499,0 -0.904,-0.287 -0.904,-0.64 0,-0.353 0.405,-0.64 0.904,-0.64 z M -2.202,19.12 c 0.489,-0.099 0.942,0.102 1.012,0.449 0.069,0.347 -0.27,0.707 -0.76,0.806 -0.489,0.098 -0.722,-0.204 -0.792,-0.55 -0.069,-0.347 0.051,-0.607 0.54,-0.705 z M -14.7,20.316 c 0.494,0.075 0.85,0.42 0.796,0.769 -0.053,0.349 -0.496,0.571 -0.99,0.496 -0.493,-0.076 -0.608,-0.44 -0.555,-0.789 0.054,-0.349 0.256,-0.552 0.749,-0.476 z M -31.359,9.167 c 0.493,0.076 0.849,0.42 0.796,0.77 -0.054,0.349 -0.497,0.571 -0.99,0.495 -0.493,-0.075 -0.609,-0.439 -0.555,-0.788 0.053,-0.349 0.256,-0.552 0.749,-0.477 z"
+             style="fill:none;stroke:#000000;stroke-width:0.40099999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path142042" />
+        </g>
+        <g
+           id="g142044"
+           transform="translate(179.478,2256.009)">
+          <path
+             inkscape:connector-curvature="0"
+             d="m 0,0 0,0 m -3.507,0.501 0,0 m -6.096,0.668 0,0 m -7.265,-0.668 0,0 m -4.342,2.672 0,0 m -1.838,-3.006 0,0 m -3.841,0.501 0,0 m -1.336,-9.436 0,0 m 3.507,-0.668 0,0 m 1.587,-6.43 0,0 m 2.004,-5.094 0,0 m -3.006,1.002 0,0 m 6.179,1.837 0,0 m -9.686,3.674 0,0 m 5.01,-10.187 0,0 m 2.422,21.628 0,0 m 9.853,0.167 0,0 m 1.671,-5.011 0,0 m 3.507,-4.092 0,0 m -2.422,-3.006 0,0 m 6.43,0.501 0,0 m 3.508,-3.925 0,0 m -15.282,10.355 0,0 m -2.171,-6.931 0,0 m 3.423,-3.507 0,0 m 4.51,-2.589 0,0 m -10.021,-2.422 0,0 m -0.919,-2.505 0,0 m 6.514,1.086 0,0 m 2.505,-1.002 0,0 m 5.428,1.92 0,0 m 3.507,-3.006 0,0 m 2.506,-2.839 0,0 m 4.175,-2.13 0,0 m -8.601,0.126 0,0 m 5.094,5.762 0,0 m 13.027,-0.501 0,0 m -16.785,5.678 0,0 m -16.869,11.608 0,0 m -2.505,1.92 0,0 m 13.445,12.025 0,0"
+             style="fill:none;stroke:#000000;stroke-width:0.80199999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path142046" />
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 5.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 5.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 5.svg	(revision 42196)
@@ -0,0 +1,411 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg354772"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="05.svg">
+  <defs
+     id="defs354774">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46720">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1448.226,943.532 15.985,0 0,-13.332 -15.985,0 0,13.332 z"
+         id="path46722" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46696">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1419.252,943.532 29.095,0 0,-13.332 -29.095,0 0,13.332 z"
+         id="path46698" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46672">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1400.086,943.532 19.285,0 0,-13.332 -19.285,0 0,13.332 z"
+         id="path46674" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46656">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1448.226,930.32 15.985,0 0,-29.096 -15.985,0 0,29.096 z"
+         id="path46658" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46632">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1419.252,901.224 29.095,0 0,29.096 -29.095,0 0,-29.096 z"
+         id="path46634" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46608">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1400.086,930.32 19.285,0 0,-29.096 -19.285,0 0,29.096 z"
+         id="path46610" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46592">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1448.226,901.344 15.985,0 0,-23.599 -15.985,0 0,23.599 z"
+         id="path46594" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46568">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1419.252,901.344 29.095,0 0,-23.599 -29.095,0 0,23.599 z"
+         id="path46570" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath46544">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 1400.086,901.344 19.285,0 0,-23.599 -19.285,0 0,23.599 z"
+         id="path46546" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="9.6541473"
+     inkscape:cy="7.5621672"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata354777">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g355304">
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,2.4950778,15.883506)"
+         id="g46548">
+        <path
+           id="path46550"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -4.516,-0.964 0,0 m -1.732,7.458 0,0 m -0.866,-4.849 0,0 m 9.005,14.547 0,0 m 1.424,-15.636 0,0 m -1.77,2.822 0,0 m -3.537,11.703 0,0 m 2.498,7 0,0 m -4.503,-3.117 0,0 m -2.475,2.608 0,0 m -2.312,-2.312 0,0 M 6.567,4.936 l 0,0 m 0.704,-4.564 0,0 m -6.939,8.374 0,0 m 5.057,0.865 0,0 m 2.39,7.967 0,0 m -2.424,-5.023 0,0 m -9.525,-2.944 0,0 m 2.587,-6.037 0,0 m 10.055,17.987 0,0 m -14.346,-6.319 0,0 m -3.264,-4.457 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,3.2499989,14.598632)"
+         id="g46552">
+        <path
+           sodipodi:nodetypes="cccccccccccccccccccccccc"
+           id="path46554"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 2.077,2.251 m -5.275,-2.523 -3.21,1.483 m -0.11,-4.097 1.265,-2.831 m 8.045,2.366 3.053,1.368 m -19.009,-0.343 2.946,1.805 M -2.425,8.658 -4.529,6.05 M 0.193,9.078 -0.328,5.388 M 2.807,9.661 5.76,9.492 m -5.67,3.902 0.935,3.417 m -3.523,-4.614 -2.143,2.214 m -7.482,-3.848 2.944,1.386 m -0.286,-7.083 1.479,3.413"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,3.8045158,11.003272)"
+         id="g46556">
+        <path
+           id="path46558"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m 3.511,-8.104 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,4.8926335,13.868032)"
+         id="g46560">
+        <path
+           id="path46562"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 -1.922,1.004 m -11.717,12.722 0.99,1.107"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,9.5418194,15.883506)"
+         id="g46572">
+        <path
+           id="path46574"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -4.515,-0.964 0,0 m -1.732,7.458 0,0 m -0.866,-4.849 0,0 m 9.005,14.547 0,0 m 1.424,-15.636 0,0 m -1.77,2.822 0,0 m -3.537,11.703 0,0 m 2.498,7 0,0 m -4.503,-3.117 0,0 m -2.475,2.608 0,0 m -2.313,-2.312 0,0 M 6.568,4.936 l 0,0 m 0.704,-4.564 0,0 m -6.939,8.374 0,0 m 5.057,0.865 0,0 m 2.39,7.967 0,0 m -2.425,-5.023 0,0 m -9.524,-2.944 0,0 m 2.587,-6.037 0,0 m 10.055,17.987 0,0 m -24.253,-22.303 0,0 m -2.009,10.604 0,0 m -0.769,-4.368 0,0 m 1.054,10.872 0,0 m 5.894,-15.412 0,0 m -3.473,2.447 0,0 m 4.16,2.574 0,0 m -3.341,5.084 0,0 m -1.335,10.676 0,0 m 9.725,-6.493 0,0 m -6.544,1.312 0,0 m 0.672,-2.732 0,0 m 2.609,-3.037 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,10.296741,14.598632)"
+         id="g46576">
+        <path
+           sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccc"
+           id="path46578"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 2.078,2.251 m -5.275,-2.523 -3.211,1.483 m -0.109,-4.097 1.265,-2.831 m 8.045,2.366 3.052,1.368 m -23.509,-2 -3.463,0.866 m 7.964,0.791 2.946,1.805 m -6.029,-0.469 -1.245,3.241 M -2.424,8.658 -4.529,6.05 M 0.194,9.078 -0.328,5.388 M 2.808,9.661 5.761,9.492 m -5.67,3.902 0.935,3.417 m -3.523,-4.614 -2.143,2.214 m -12.772,-2.508 -2.636,2.408 m 2.364,-5.541 -2.833,-1.882 m 5.797,-2.039 2.597,-2.251 m -2.765,10.695 0.593,4.012 m 2.172,-6.742 2.945,1.386 m -0.287,-7.083 1.48,3.413"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,10.851501,11.003272)"
+         id="g46580">
+        <path
+           id="path46582"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m 3.51,-8.104 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,5.3043865,14.095919)"
+         id="g46584">
+        <path
+           id="path46586"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 -1.813,0.948 M 27.281,0.937 25.36,1.941 m -11.718,12.722 0.99,1.107"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,15.490472,16.11796)"
+         id="g46596">
+        <path
+           id="path46598"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -1.732,7.458 0,0 m -0.865,-4.849 0,0 m 5.122,13.436 0,0 m -2.006,3.883 0,0 m -2.474,2.608 0,0 m -2.313,-2.312 0,0 m 4.614,-9.649 0,0 m -11.611,-10.353 0,0 m -2.008,10.604 0,0 m -0.769,-4.368 0,0 m 1.053,10.872 0,0 m 5.895,-15.412 0,0 m -3.474,2.447 0,0 m 4.16,2.574 0,0 m -3.34,5.084 0,0 m -1.335,10.676 0,0 m 9.725,-6.493 0,0 m -6.544,1.312 0,0 m 0.672,-2.732 0,0 m 2.609,-3.037 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,16.566186,14.664785)"
+         id="g46600">
+        <path
+           sodipodi:nodetypes="cccccccccccccccccccccccc"
+           id="path46602"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -3.32,-2.614 1.265,-2.831 m -12.412,1.734 -3.464,0.866 m 7.964,0.791 2.947,1.805 m -6.029,-0.469 -1.245,3.241 m 0.079,9.652 -2.636,2.408 m 2.364,-5.541 -2.834,-1.882 m 5.798,-2.039 2.597,-2.251 m -2.766,10.695 0.593,4.012 m 2.173,-6.742 2.945,1.386 M -6.268,5.138 -4.789,8.551 M -17.33,2.339 -19.144,3.287 m 15.456,13.715 0.99,1.107"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,2.4950778,8.8362782)"
+         id="g46612">
+        <path
+           id="path46614"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -4.516,-0.964 0,0 m -1.732,7.458 0,0 m -0.866,-4.85 0,0 m 9.005,14.548 0,0 m 1.424,-15.636 0,0 m -1.77,2.821 0,0 m 0.693,-6.927 0,0 m -3.336,0.875 0,0 m 7.11,-2.431 0,0 m -11.172,0.57 0,0 m -4.307,-0.764 0,0 m 7.475,20.381 0,0 m 2.498,6.999 0,0 m -4.503,-3.117 0,0 m -2.475,2.608 0,0 m -2.312,-2.312 0,0 M 6.567,4.935 l 0,0 m 0.704,-4.563 0,0 m -6.939,8.374 0,0 m 5.057,0.865 0,0 m 2.39,7.966 0,0 m -2.424,-5.022 0,0 m -9.525,-2.944 0,0 m 2.587,-6.038 0,0 m 10.055,17.988 0,0 m -14.346,-6.319 0,0 m -3.264,-4.457 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccccccccccc"
+         inkscape:connector-curvature="0"
+         d="M 3.2499989,7.5514043 3.7551443,7.0041837 M 2.4722161,7.6175572 1.6915147,7.256878 M 1.6647617,8.2533059 1.9724213,8.941831 M 3.4350811,9.0631923 4.2508045,9.7181545 M 3.9290388,8.3663981 4.6715563,8.033688 M 0.25925611,8.9839061 0.93318863,9.6157635 M 0.04839378,8.1171088 0.76488791,7.6781163 M 2.6602167,5.4459428 2.1485047,6.079989 M 3.2969383,5.3435517 3.1702263,6.2409935 M 3.932687,5.2017608 4.6508835,5.2428631 M 3.2718877,4.2938611 3.4992883,3.4628154 M 2.6424625,4.5852256 2.1212653,4.0465174 M 0.3015745,4.9823862 1.0175822,4.6455415 M 0.94802439,6.3681918 1.3077307,5.5378758"
+         style="fill:none;stroke:#231f20;stroke-width:0.10506635;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path46618" />
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,3.8045158,3.9562868)"
+         id="g46620">
+        <path
+           id="path46622"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m 4.046,-22.028 0,0 m -0.535,13.924 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,2.1913095,9.8759973)"
+         id="g46624">
+        <path
+           id="path46626"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 -1.52,-1.701 m 12.627,14.262 -1.922,1.004 m -11.717,12.723 0.99,1.107"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         id="g46628"
+         transform="matrix(0.24320914,0,0,-0.24320914,-340.31161,229.47561)">
+        <g
+           clip-path="url(#clipPath46632)"
+           id="g46630">
+          <g
+             transform="translate(1438.488,907.2)"
+             id="g46636">
+            <path
+               id="path46638"
+               style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 0,0 0,0 m -4.515,-0.964 0,0 m -7.202,-1.904 0,0 m -6.133,-1.201 0,0 m 11.603,10.563 0,0 m -0.866,-4.85 0,0 m 9.005,14.548 0,0 m 1.424,-15.636 0,0 m -1.77,2.821 0,0 m 0.692,-6.927 0,0 m -3.335,0.875 0,0 m 7.109,-2.431 0,0 m -11.171,0.57 0,0 m -4.307,-0.764 0,0 m 7.475,20.381 0,0 m 2.498,6.999 0,0 m -4.503,-3.117 0,0 m -2.475,2.608 0,0 m -2.313,-2.312 0,0 M 6.568,4.935 l 0,0 m 0.704,-4.563 0,0 m -6.939,8.374 0,0 m 5.057,0.865 0,0 m 2.39,7.966 0,0 m -2.425,-5.022 0,0 m -9.524,-2.944 0,0 m 2.587,-6.038 0,0 m 10.055,17.988 0,0 m -24.253,-22.303 0,0 m -2.009,10.604 0,0 m -0.769,-4.369 0,0 m 1.054,10.872 0,0 m 5.894,-15.412 0,0 m -3.473,2.448 0,0 m 4.16,2.574 0,0 m -3.341,5.083 0,0 m -1.335,10.676 0,0 m 9.725,-6.492 0,0 m -6.544,1.312 0,0 m 0.672,-2.732 0,0 m 2.609,-3.037 0,0"
+               inkscape:connector-curvature="0" />
+          </g>
+          <g
+             transform="translate(1441.592,912.483)"
+             id="g46640">
+            <path
+               id="path46642"
+               style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 0,0 2.078,2.25 m -5.275,-2.522 -3.211,1.483 m -0.109,-4.097 1.265,-2.831 m 6.014,-0.499 3.354,-2.693 m -1.323,5.558 3.052,1.368 m -23.509,-2.001 -3.463,0.866 m 5.087,-3.626 -1.97,-3.128 m 5.714,3.982 2.771,-2.598 m -3.638,6.162 2.946,1.805 m -6.029,-0.47 -1.245,3.241 M -2.424,8.657 -4.529,6.05 M 0.194,9.078 -0.328,5.388 M 2.808,9.661 5.761,9.492 m -5.67,3.902 0.935,3.417 m -3.523,-4.615 -2.143,2.215 m -12.772,-2.509 -2.636,2.409 m 2.364,-5.541 -2.833,-1.883 m 5.797,-2.038 2.597,-2.252 m -2.765,10.696 0.593,4.011 m 2.172,-6.741 2.945,1.385 m -0.287,-7.083 1.48,3.414"
+               inkscape:connector-curvature="0" />
+          </g>
+          <g
+             transform="translate(1443.873,927.265)"
+             id="g46644">
+            <path
+               id="path46646"
+               style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 0,0 0,0 m 4.046,-22.028 0,0 m -0.536,13.924 0,0"
+               inkscape:connector-curvature="0" />
+          </g>
+          <g
+             transform="translate(1437.24,902.925)"
+             id="g46648">
+            <path
+               id="path46650"
+               style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 0,0 -1.521,-1.701 m -14.654,13.326 -1.813,0.948 m 29.094,-0.012 -1.921,1.004 m -11.718,12.723 0.99,1.107"
+               inkscape:connector-curvature="0" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,15.490472,9.0707318)"
+         id="g46660">
+        <path
+           id="path46662"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -7.201,-1.904 0,0 m -6.134,-1.201 0,0 m 11.603,10.563 0,0 m -0.865,-4.85 0,0 m 1.954,-6.18 0,0 m -4.307,-0.764 0,0 m 7.475,20.381 0,0 m -2.006,3.882 0,0 m -2.474,2.608 0,0 m -2.313,-2.312 0,0 m 4.614,-9.648 0,0 m -11.611,-10.353 0,0 m -2.008,10.604 0,0 m -0.769,-4.369 0,0 m 1.053,10.872 0,0 m 5.895,-15.412 0,0 m -3.474,2.448 0,0 m 4.16,2.574 0,0 m -3.34,5.083 0,0 m -1.335,10.676 0,0 m 9.725,-6.492 0,0 m -6.544,1.312 0,0 m 0.672,-2.732 0,0 m 2.609,-3.037 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,16.566186,7.6175572)"
+         id="g46664">
+        <path
+           sodipodi:nodetypes="cccccccccccccccccccccccccccc"
+           id="path46666"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -3.32,-2.614 1.265,-2.831 m -12.412,1.733 -3.464,0.866 m 5.088,-3.626 -1.971,-3.128 m 5.715,3.982 2.771,-2.598 m -3.639,6.162 2.947,1.805 m -6.029,-0.47 -1.245,3.241 m 0.079,9.652 -2.636,2.409 m 2.364,-5.541 -2.834,-1.883 m 5.798,-2.038 2.597,-2.252 m -2.766,10.696 0.593,4.011 m 2.173,-6.741 2.945,1.385 M -6.268,5.137 -4.789,8.551 M -17.33,2.339 -19.144,3.287 m 15.456,13.715 0.99,1.107"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,2.4950778,1.7890502)"
+         id="g46676">
+        <path
+           id="path46678"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -4.516,-0.964 0,0 m -1.732,7.457 0,0 m -0.866,-4.849 0,0 m 10.429,-1.088 0,0 m -1.77,2.821 0,0 m 0.693,-6.927 0,0 m -3.336,0.875 0,0 m 7.11,-2.431 0,0 m -11.172,0.569 0,0 m -4.307,-0.764 0,0 m 16.034,10.236 0,0 m 0.704,-4.564 0,0 m -6.939,8.375 0,0 m -1.915,-5.173 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         sodipodi:nodetypes="cccccccccccccc"
+         inkscape:connector-curvature="0"
+         d="M 3.2499989,0.50441947 3.7551443,-0.0430443 M 2.4722161,0.57032915 1.6915147,0.2098932 M 1.6647617,1.206321 1.9724213,1.8948461 M 3.4350811,2.0159643 4.2508045,2.6711697 M 3.9290388,1.3194133 4.6715563,0.98670319 M 0.25925611,1.9366781 0.93318863,2.5685354 M 0.04839378,1.0701239 0.76488791,0.63088822"
+         style="fill:none;stroke:#231f20;stroke-width:0.10506635;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path46682" />
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,4.7885399,2.2667129)"
+         id="g46684">
+        <path
+           id="path46686"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,2.1913095,2.8290124)"
+         id="g46688">
+        <path
+           id="path46690"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 -1.52,-1.7"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,9.5418194,1.7890502)"
+         id="g46700">
+        <path
+           id="path46702"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -4.515,-0.964 0,0 m -7.202,-1.905 0,0 m -6.133,-1.201 0,0 m 11.603,10.563 0,0 m -0.866,-4.849 0,0 m 10.429,-1.088 0,0 m -1.77,2.821 0,0 m 0.692,-6.927 0,0 m -3.335,0.875 0,0 m 7.109,-2.431 0,0 m -11.171,0.569 0,0 m -4.307,-0.764 0,0 m 16.034,10.236 0,0 m 0.704,-4.564 0,0 m -6.939,8.375 0,0 m -1.915,-5.173 0,0 m -14.198,-4.316 0,0 m -2.778,6.236 0,0 m 6.948,-4.54 0,0 m -3.473,2.447 0,0 m 4.16,2.575 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,10.296741,0.50441947)"
+         id="g46704">
+        <path
+           sodipodi:nodetypes="cccccccccccccccccccc"
+           id="path46706"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 2.078,2.251 m -5.275,-2.522 -3.211,1.482 m -0.109,-4.097 1.265,-2.831 m 6.014,-0.498 3.354,-2.694 m -1.323,5.558 3.052,1.368 m -23.509,-2 -3.463,0.866 m 5.087,-3.626 -1.97,-3.129 m 5.714,3.983 2.771,-2.598 m -3.638,6.161 2.946,1.806 m -6.029,-0.47 -1.245,3.241"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,11.835525,2.2667129)"
+         id="g46708">
+        <path
+           id="path46710"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,9.2382944,2.8290124)"
+         id="g46712">
+        <path
+           sodipodi:nodetypes="cc"
+           id="path46714"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 0,0 -1.521,-1.7"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,15.490472,2.0235038)"
+         id="g46724">
+        <path
+           id="path46726"
+           style="fill:none;stroke:#231f20;stroke-width:0.70300001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 0,0 0,0 m -7.201,-1.905 0,0 m -6.134,-1.201 0,0 m 11.603,10.563 0,0 m -0.865,-4.849 0,0 m 1.954,-6.181 0,0 m -4.307,-0.764 0,0 m -6.315,4.558 0,0 m -2.777,6.236 0,0 m 6.948,-4.54 0,0 m -3.474,2.447 0,0 m 4.16,2.575 0,0"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="matrix(0.24320914,0,0,-0.24320914,16.566186,0.57032915)"
+         id="g46728">
+        <path
+           sodipodi:nodetypes="cccccccccccc"
+           id="path46730"
+           style="fill:none;stroke:#231f20;stroke-width:0.43200001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -3.32,-2.615 1.265,-2.831 m -12.412,1.734 -3.464,0.866 m 5.088,-3.626 -1.971,-3.129 m 5.715,3.983 2.771,-2.598 m -3.639,6.161 2.947,1.806 m -6.029,-0.47 -1.245,3.241"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4453"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 80">
+  <defs
+     id="defs4455" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4458">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <text
+       xml:space="preserve"
+       style="font-size:35.70041275px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="-1.0633428"
+       y="26.496401"
+       id="text5890"
+       sodipodi:linespacing="125%"
+       transform="scale(1.0175838,0.98272006)"><tspan
+         sodipodi:role="line"
+         id="tspan5892"
+         x="-1.0633428"
+         y="26.496401">*</tspan></text>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Olive.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Olive.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3.svg	(revision 42196)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4556"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 86">
+  <defs
+     id="defs4558" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4561">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="text4122-5"
+       style="font-size:120.72502136px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;font-family:Istanbul;-inkscape-font-specification:Istanbul"
+       transform="matrix(0.25136241,0,0,0.24717689,-17.738554,-209.33916)"
+       inkscape:transform-center-x="37.84404"
+       inkscape:transform-center-y="7.9989698">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4269-8"
+         style="fill:#ffffff;stroke:#000000;stroke-opacity:1;-inkscape-font-specification:Istanbul"
+         d="m 78.433927,901.71555 -7.36847,-12.67377 19.216971,-9.78533 -19.216971,-9.54954 7.36847,-12.61482 17.861173,11.78955 -1.296851,-21.45699 14.736941,0 -1.3558,21.45699 17.97907,-11.78955 7.36847,12.61482 -19.27592,9.54954 19.27592,9.66743 -7.36847,12.55587 -17.97907,-11.7306 1.3558,21.39804 -14.736941,0 1.473694,-21.39804 z" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1_sel.svg	(revision 42196)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4023"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Pushpin 1.svg">
+  <defs
+     id="defs4025" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4028">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:0.98999999;fill:#000000;fill-opacity:1;stroke:none"
+       d="m 4.073996,0 0.01584,0.532024 7.470776,0.04896 L 11.544772,0.04896 4.073988,0 z m 6.756056,0.743992 -6.196088,-0.01376 -2.496576,5.2893761 11.7034,0.07672 -3.010736,-5.3523201 z m -9.230048,5.4415681 0.01584,0.532016 12.784152,0.083792 -0.01584,-0.532024 -12.784152,-0.083784 z m 4.516464,0.729312 C 6.137428,8.4268402 7.41826,12.953552 8.256444,16 c 0,0 1.88584,-7.6046158 1.64472,-9.0603199 l -3.784696,-0.0248 z"
+       id="rect2987"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 6.8540055,6.0318218 C 4.3183397,6.0131258 2.2334837,5.9876093 2.2209923,5.9751175 2.2085008,5.9626262 2.7468377,4.7903188 3.4172964,3.3699901 l 1.2190159,-2.58241591 3.0935682,0 3.0935675,0 1.480454,2.63133791 c 0.81425,1.4472359 1.480455,2.638232 1.480455,2.6466585 0,0.016792 -0.222448,0.015709 -6.9303515,-0.033749 z"
+       id="path4056"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.7181436,0.50612448 -0.6194307,-0.0139146 0,-0.22397626 0,-0.22397625 3.2773515,2.3291e-4 c 1.8025433,1.2839e-4 3.4750066,0.01332186 3.7165846,0.02931926 l 0.439232,0.02908636 0,0.21845302 0,0.21845301 -3.0971532,-0.009881 c -1.7034345,-0.005435 -3.3758973,-0.016143 -3.7165842,-0.023796 z"
+       id="path4058"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 10.495743,6.7541506 C 8.3772896,6.7378116 5.5138305,6.72155 4.1325,6.7180137 l -2.5115099,-0.00643 0,-0.2523384 0,-0.2523384 5.146906,0.027685 c 2.8307983,0.015227 5.6993259,0.03986 6.3745049,0.054741 l 1.227599,0.027056 0,0.2426468 c 0,0.1334557 -0.0051,0.2386361 -0.01126,0.2337341 -0.0062,-0.0049 -1.744542,-0.022281 -3.862995,-0.03862 z"
+       id="path4060"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 8.20931,15.721485 C 8.1292959,15.475873 7.4728503,13.045985 7.0957245,11.599455 6.5690881,9.5794531 6.2190475,7.9261877 6.1579385,7.1702282 l -0.01937,-0.2396233 1.8423922,0.014376 c 1.5762623,0.012299 1.8490044,0.024137 1.8881678,0.08195 C 10.074111,7.3295287 9.3721644,11.257298 8.3635964,15.451188 8.2607151,15.878995 8.2606563,15.879099 8.20931,15.721485 l 0,0 z"
+       id="path4062"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2_sel.svg	(revision 42196)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg4068"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Pushpin 2.svg">
+  <defs
+     id="defs4070" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4073">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:0.98999999;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.76190478;stroke-opacity:1"
+       d="M 4.2609485,0.3809522 4.2760343,0.8876417 11.391059,0.9342703 11.375973,0.4275808 4.2609409,0.3809522 z M 10.695288,1.089516 4.7942514,1.0764112 2.41656,6.1139122 13.562655,6.1869788 10.695288,1.0895312 z M 1.9047657,6.2719617 1.9198514,6.7786436 14.095234,6.8584455 14.080148,6.351756 1.9047657,6.2719617 z M 6.20616,6.9665446 c 0.019962,1.4399692 1.2398019,5.7511244 2.0380723,8.6525034 0,0 1.7960377,-7.2424922 1.5664,-8.6288768 L 6.20616,6.9665522 z"
+       id="rect2987-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 5.1689269,5.7211645 -2.1057761,-0.023194 0.9895289,-2.094802 0.9895289,-2.094802 2.7104476,0 2.7104478,0 1.187607,2.1109075 c 0.653183,1.1609991 1.187606,2.1188642 1.187606,2.1285891 0,0.021661 -4.7940766,0.00497 -7.6693901,-0.026698 z"
+       id="path4120"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.04504951;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 8.1888441,13.894627 C 7.497132,11.421491 6.7755696,8.420591 6.6827736,7.6310411 l -0.028644,-0.2437144 1.3802124,0 1.3802124,0 -5.07e-5,0.1464109 C 9.4144189,7.7790865 9.246239,8.9880107 9.1017885,9.7816236 8.7976087,11.452792 8.2260661,14.027709 8.1888441,13.894627 z"
+       id="path4122"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Road, Undefined.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Road, Undefined.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1_sel.svg	(revision 42196)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg9423"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Hexagon 1.svg">
+  <defs
+     id="defs9425" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.098901"
+     inkscape:cx="11.283535"
+     inkscape:cy="8.4262453"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata9428">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:1"
+       id="path3066"
+       sodipodi:sides="6"
+       sodipodi:cx="355.19934"
+       sodipodi:cy="-16.286432"
+       sodipodi:r1="14.237102"
+       sodipodi:r2="12.329692"
+       sodipodi:arg1="1.0584069"
+       sodipodi:arg2="1.5820056"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 362.17924,-3.8777226 -14.23621,-0.1595853 -6.9799,-12.4087101 7.25631,-12.249124 14.23621,0.159585 6.9799,12.40871 z"
+       transform="matrix(0.56194743,0,0,0.56194743,-191.60336,17.152119)" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.09009901;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 5.0422824,14.840567 3.9456832,14.812283 2.03236,11.413761 C 0.98003234,9.5445746 0.11863812,7.9713798 0.11815063,7.9177732 0.11766314,7.8641665 1.0240226,6.2886533 2.1322828,4.4166329 l 2.0150185,-3.4036736 0.400197,0.054853 c 0.2201083,0.030169 1.991274,0.054853 3.9359238,0.054853 l 3.5357269,0 1.953586,3.4737927 c 1.074472,1.910586 1.940817,3.5057315 1.925213,3.5447679 -0.0156,0.039036 -0.920354,1.5768298 -2.010552,3.4173191 l -1.982178,3.346344 -2.8831682,-0.01802 c -1.5857426,-0.0099 -3.3766379,-0.03075 -3.9797674,-0.0463 z"
+       id="path3022"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.97/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1_sel.svg	(revision 42196)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3829"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Cross 1.svg">
+  <defs
+     id="defs3831" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="1.8282178"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1317"
+     inkscape:window-h